From 67fe28c5abf268c61ed9f2710c932e0c199447ef Mon Sep 17 00:00:00 2001 From: travis Date: Fri, 6 Jan 2023 17:28:05 -0800 Subject: [PATCH 01/37] prep for crosschain frxETH --- .../Curve/IFraxGaugeFXSRewardsDistributor.sol | 2 +- src/hardhat/contracts/Curve/IveFXS.sol | 5 +- .../ERC20/ERC20PermitPermissionedMint.sol | 107 ++++++++++++++++++ .../__CROSSCHAIN/CrossChainCanonicalV2.sol | 41 +++++++ .../convex/IConvexBaseRewardPool.sol | 4 +- .../Staking/FraxUnifiedFarmTemplate.sol | 2 +- .../Staking/FraxUnifiedFarmTemplate_V2.sol | 4 +- .../Staking/FraxUnifiedFarm_ERC20.sol | 2 +- .../Staking/FraxUnifiedFarm_ERC20_V2.sol | 2 +- .../FraxUnifiedFarm_ERC20_Convex_frxETH.sol | 45 ++++++-- .../contracts/Uniswap/TransferHelperV2.sol | 16 +-- .../contracts/Utils/ReentrancyGuard.sol | 9 +- .../contracts/Utils/ReentrancyGuardV2.sol | 62 ---------- 13 files changed, 204 insertions(+), 97 deletions(-) create mode 100644 src/hardhat/contracts/ERC20/ERC20PermitPermissionedMint.sol create mode 100755 src/hardhat/contracts/ERC20/__CROSSCHAIN/CrossChainCanonicalV2.sol delete mode 100755 src/hardhat/contracts/Utils/ReentrancyGuardV2.sol diff --git a/src/hardhat/contracts/Curve/IFraxGaugeFXSRewardsDistributor.sol b/src/hardhat/contracts/Curve/IFraxGaugeFXSRewardsDistributor.sol index e4e90c81..138cc74e 100644 --- a/src/hardhat/contracts/Curve/IFraxGaugeFXSRewardsDistributor.sol +++ b/src/hardhat/contracts/Curve/IFraxGaugeFXSRewardsDistributor.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: GPL-2.0-or-later -pragma solidity >=0.6.11; +pragma solidity ^0.8.0; interface IFraxGaugeFXSRewardsDistributor { function acceptOwnership() external; diff --git a/src/hardhat/contracts/Curve/IveFXS.sol b/src/hardhat/contracts/Curve/IveFXS.sol index 35283428..80323dac 100644 --- a/src/hardhat/contracts/Curve/IveFXS.sol +++ b/src/hardhat/contracts/Curve/IveFXS.sol @@ -1,8 +1,5 @@ - // SPDX-License-Identifier: GPL-2.0-or-later -pragma solidity >=0.6.11; -pragma abicoder v2; - +pragma solidity ^0.8.0; interface IveFXS { diff --git a/src/hardhat/contracts/ERC20/ERC20PermitPermissionedMint.sol b/src/hardhat/contracts/ERC20/ERC20PermitPermissionedMint.sol new file mode 100644 index 00000000..265ddd03 --- /dev/null +++ b/src/hardhat/contracts/ERC20/ERC20PermitPermissionedMint.sol @@ -0,0 +1,107 @@ +//SPDX-License-Identifier: Unlicense +pragma solidity ^0.8.0; + +import "@openzeppelin/contracts/token/ERC20/ERC20.sol"; +import "@openzeppelin/contracts/token/ERC20/IERC20.sol"; +import "@openzeppelin/contracts/token/ERC20/extensions/draft-ERC20Permit.sol"; +import "@openzeppelin/contracts/token/ERC20/extensions/ERC20Burnable.sol"; +import "../Staking/Owned.sol"; + +/// @title Parent contract for frxETH.sol, but also CrossChainCanonicalV2 +/** @notice Combines Openzeppelin's ERC20Permit and ERC20Burnable with Synthetix's Owned. + Also includes a list of authorized minters */ +/// @dev ERC20PermitPermissionedMint adheres to EIP-712/EIP-2612 and can use permits +contract ERC20PermitPermissionedMint is ERC20Permit, ERC20Burnable, Owned { + // Core + address public timelock_address; + + // Minters + address[] public minters_array; // Allowed to mint + mapping(address => bool) public minters; // Mapping is also used for faster verification + + /* ========== CONSTRUCTOR ========== */ + + constructor( + address _creator_address, + address _timelock_address, + string memory _name, + string memory _symbol + ) + ERC20(_name, _symbol) + ERC20Permit(_name) + Owned(_creator_address) + { + timelock_address = _timelock_address; + } + + + /* ========== MODIFIERS ========== */ + + modifier onlyByOwnGov() { + require(msg.sender == timelock_address || msg.sender == owner, "Not owner or timelock"); + _; + } + + modifier onlyMinters() { + require(minters[msg.sender] == true, "Only minters"); + _; + } + + /* ========== RESTRICTED FUNCTIONS ========== */ + + // Used by minters when user redeems + function minter_burn_from(address b_address, uint256 b_amount) public onlyMinters { + super.burnFrom(b_address, b_amount); + emit TokenMinterBurned(b_address, msg.sender, b_amount); + } + + // This function is what other minters will call to mint new tokens + function minter_mint(address m_address, uint256 m_amount) public onlyMinters { + super._mint(m_address, m_amount); + emit TokenMinterMinted(msg.sender, m_address, m_amount); + } + + // Adds whitelisted minters + function addMinter(address minter_address) public onlyByOwnGov { + require(minter_address != address(0), "Zero address detected"); + + require(minters[minter_address] == false, "Address already exists"); + minters[minter_address] = true; + minters_array.push(minter_address); + + emit MinterAdded(minter_address); + } + + // Remove a minter + function removeMinter(address minter_address) public onlyByOwnGov { + require(minter_address != address(0), "Zero address detected"); + require(minters[minter_address] == true, "Address nonexistant"); + + // Delete from the mapping + delete minters[minter_address]; + + // 'Delete' from the array by setting the address to 0x0 + for (uint i = 0; i < minters_array.length; i++){ + if (minters_array[i] == minter_address) { + minters_array[i] = address(0); // This will leave a null in the array and keep the indices the same + break; + } + } + + emit MinterRemoved(minter_address); + } + + function setTimelock(address _timelock_address) public onlyByOwnGov { + require(_timelock_address != address(0), "Zero address detected"); + timelock_address = _timelock_address; + emit TimelockChanged(_timelock_address); + } + + /* ========== EVENTS ========== */ + + event TokenMinterBurned(address indexed from, address indexed to, uint256 amount); + event TokenMinterMinted(address indexed from, address indexed to, uint256 amount); + event MinterAdded(address minter_address); + event MinterRemoved(address minter_address); + event TimelockChanged(address timelock_address); +} \ No newline at end of file diff --git a/src/hardhat/contracts/ERC20/__CROSSCHAIN/CrossChainCanonicalV2.sol b/src/hardhat/contracts/ERC20/__CROSSCHAIN/CrossChainCanonicalV2.sol new file mode 100755 index 00000000..bd518f8f --- /dev/null +++ b/src/hardhat/contracts/ERC20/__CROSSCHAIN/CrossChainCanonicalV2.sol @@ -0,0 +1,41 @@ +// SPDX-License-Identifier: GPL-2.0-or-later +pragma solidity >=0.8.0; + +// ==================================================================== +// | ______ _______ | +// | / _____________ __ __ / ____(_____ ____ _____ ________ | +// | / /_ / ___/ __ `| |/_/ / /_ / / __ \/ __ `/ __ \/ ___/ _ \ | +// | / __/ / / / /_/ _> < / __/ / / / / / /_/ / / / / /__/ __/ | +// | /_/ /_/ \__,_/_/|_| /_/ /_/_/ /_/\__,_/_/ /_/\___/\___/ | +// | | +// ==================================================================== +// ======================= CrossChainCanonicalV2 ====================== +// ==================================================================== +// Cross-chain / non mainnet canonical token contract. +// Does not include any spurious mainnet logic +// Does have authorized minters + +// Frax Finance: https://github.com/FraxFinance + +// Primary Author(s) +// Travis Moore: https://github.com/FortisFortuna +// Jack Corddry: https://github.com/corddry + +// Reviewer(s) / Contributor(s) +// Sam Kazemian: https://github.com/samkazemian +// Dennis: https://github.com/denett + +import { ERC20PermitPermissionedMint } from "../ERC20PermitPermissionedMint.sol"; + +contract CrossChainCanonicalV2 is ERC20PermitPermissionedMint { + /* ========== CONSTRUCTOR ========== */ + constructor( + address _creator_address, + address _timelock_address, + string memory _name, + string memory _symbol + ) ERC20PermitPermissionedMint(_creator_address, _timelock_address, _name, _symbol) + { + + } +} diff --git a/src/hardhat/contracts/Misc_AMOs/convex/IConvexBaseRewardPool.sol b/src/hardhat/contracts/Misc_AMOs/convex/IConvexBaseRewardPool.sol index e7aadb3c..01154e05 100644 --- a/src/hardhat/contracts/Misc_AMOs/convex/IConvexBaseRewardPool.sol +++ b/src/hardhat/contracts/Misc_AMOs/convex/IConvexBaseRewardPool.sol @@ -1,7 +1,5 @@ - - // SPDX-License-Identifier: GPL-2.0-or-later -pragma solidity >=0.6.11; +pragma solidity ^0.8.0; interface IConvexBaseRewardPool { function addExtraReward(address _reward) external returns (bool); diff --git a/src/hardhat/contracts/Staking/FraxUnifiedFarmTemplate.sol b/src/hardhat/contracts/Staking/FraxUnifiedFarmTemplate.sol index 980caa8d..3b51c2b5 100755 --- a/src/hardhat/contracts/Staking/FraxUnifiedFarmTemplate.sol +++ b/src/hardhat/contracts/Staking/FraxUnifiedFarmTemplate.sol @@ -735,4 +735,4 @@ contract FraxUnifiedFarmTemplate is Owned, ReentrancyGuard { // ,--'/` ' // // [hjw] https://textart.io/art/vw6Sa3iwqIRGkZsN1BC2vweF/chicken -} +} \ No newline at end of file diff --git a/src/hardhat/contracts/Staking/FraxUnifiedFarmTemplate_V2.sol b/src/hardhat/contracts/Staking/FraxUnifiedFarmTemplate_V2.sol index ea53fe8c..7f48f2ec 100755 --- a/src/hardhat/contracts/Staking/FraxUnifiedFarmTemplate_V2.sol +++ b/src/hardhat/contracts/Staking/FraxUnifiedFarmTemplate_V2.sol @@ -36,11 +36,11 @@ pragma solidity >=0.8.4; import "../Math/MathV2.sol"; import "../Curve/IveFXS.sol"; -import "../Curve/IFraxGaugeControllerV2.sol"; +import "../Curve/IFraxGaugeController.sol"; import "../Curve/IFraxGaugeFXSRewardsDistributor.sol"; import "../ERC20/IERC20V2.sol"; import '../Uniswap/TransferHelperV2.sol'; -import "../Utils/ReentrancyGuardV2.sol"; +import "../Utils/ReentrancyGuard.sol"; import "./OwnedV2.sol"; // Extra rewards diff --git a/src/hardhat/contracts/Staking/FraxUnifiedFarm_ERC20.sol b/src/hardhat/contracts/Staking/FraxUnifiedFarm_ERC20.sol index 02eb9190..803947d2 100755 --- a/src/hardhat/contracts/Staking/FraxUnifiedFarm_ERC20.sol +++ b/src/hardhat/contracts/Staking/FraxUnifiedFarm_ERC20.sol @@ -567,4 +567,4 @@ contract FraxUnifiedFarm_ERC20 is FraxUnifiedFarmTemplate { event LockedLonger(address indexed user, bytes32 kek_id, uint256 new_secs, uint256 new_start_ts, uint256 new_end_ts); event StakeLocked(address indexed user, uint256 amount, uint256 secs, bytes32 kek_id, address source_address); event WithdrawLocked(address indexed user, uint256 liquidity, bytes32 kek_id, address destination_address); -} +} \ No newline at end of file diff --git a/src/hardhat/contracts/Staking/FraxUnifiedFarm_ERC20_V2.sol b/src/hardhat/contracts/Staking/FraxUnifiedFarm_ERC20_V2.sol index 9f64863c..282cdac8 100644 --- a/src/hardhat/contracts/Staking/FraxUnifiedFarm_ERC20_V2.sol +++ b/src/hardhat/contracts/Staking/FraxUnifiedFarm_ERC20_V2.sol @@ -905,4 +905,4 @@ contract FraxUnifiedFarm_ERC20_V2 is FraxUnifiedFarmTemplate_V2 { event ApprovalForAll(address indexed owner, address indexed spender, bool approved); event TransferLockedByIndex(address indexed sender_address, address indexed destination_address, uint256 amount_transferred, uint256 source_stake_index, uint256 destination_stake_index); -} +} \ No newline at end of file diff --git a/src/hardhat/contracts/Staking/Variants/FraxUnifiedFarm_ERC20_Convex_frxETH.sol b/src/hardhat/contracts/Staking/Variants/FraxUnifiedFarm_ERC20_Convex_frxETH.sol index 9ab03ca4..4754416d 100755 --- a/src/hardhat/contracts/Staking/Variants/FraxUnifiedFarm_ERC20_Convex_frxETH.sol +++ b/src/hardhat/contracts/Staking/Variants/FraxUnifiedFarm_ERC20_Convex_frxETH.sol @@ -2,12 +2,17 @@ pragma solidity >=0.8.0; import "../FraxUnifiedFarm_ERC20.sol"; +import "../../Curve/ICurvefrxETHETHPool.sol"; import "../../Misc_AMOs/convex/IConvexStakingWrapperFrax.sol"; import "../../Misc_AMOs/convex/IDepositToken.sol"; import "../../Misc_AMOs/curve/I2pool.sol"; import "../../Misc_AMOs/curve/I2poolToken.sol"; +import "../../Oracle/AggregatorV3Interface.sol"; +import "../../ERC20/IERC20.sol"; -contract FraxUnifiedFarm_ERC20_Convex_FRAXBP_Volatile is FraxUnifiedFarm_ERC20 { +contract FraxUnifiedFarm_ERC20_Convex_frxETH is FraxUnifiedFarm_ERC20 { + + AggregatorV3Interface internal priceFeedETHUSD = AggregatorV3Interface(0x5f4eC3Df9cbd43714FE2740f5E3616155c5b8419); constructor ( address _owner, @@ -20,24 +25,44 @@ contract FraxUnifiedFarm_ERC20_Convex_FRAXBP_Volatile is FraxUnifiedFarm_ERC20 { ) FraxUnifiedFarm_ERC20(_owner , _rewardTokens, _rewardManagers, _rewardRates, _gaugeControllers, _rewardDistributors, _stakingToken) { - // Convex stkcvxFPIFRAX and stkcvxFRAXBP. Also Volatile/FRAXBP + // COMMENTED OUT SO COMPILER DOESNT COMPLAIN. UNCOMMENT WHEN DEPLOYING + + // // Convex frxETHETH only // stakingToken = IConvexStakingWrapperFrax(_stakingToken); // curveToken = I2poolToken(stakingToken.curveToken()); - // curvePool = I2pool(curveToken.minter()); - // address token0 = curvePool.coins(0); - // frax_is_token0 = (token0 == frax_address); + // curvePool = ICurvefrxETHETHPool(curveToken.minter()); + // // address token0 = curvePool.coins(0); + // // frax_is_token0 = false; // Doesn't matter for frxETH + } + + function getLatestETHPriceE8() public view returns (int) { + // Returns in E8 + (uint80 roundID, int price, , uint256 updatedAt, uint80 answeredInRound) = priceFeedETHUSD.latestRoundData(); + require(price >= 0 && updatedAt!= 0 && answeredInRound >= roundID, "Invalid chainlink price"); + + return price; + } + + function setETHUSDOracle(address _eth_usd_oracle_address) public onlyByOwnGov { + require(_eth_usd_oracle_address != address(0), "Zero address detected"); + + priceFeedETHUSD = AggregatorV3Interface(_eth_usd_oracle_address); } function fraxPerLPToken() public view override returns (uint256) { + // COMMENTED OUT SO COMPILER DOESNT COMPLAIN. UNCOMMENT WHEN DEPLOYING + // // Get the amount of FRAX 'inside' of the lp tokens // uint256 frax_per_lp_token; - // Convex Volatile/FRAXBP - // ============================================ + // // Convex frxETH/ETH + // // ============================================ // { - // // Half of the LP is FRAXBP. Half of that should be FRAX. - // // Using 0.25 * lp price for gas savings - // frax_per_lp_token = (curvePool.lp_price() * (1e18)) / (4 * curvePool.price_oracle()); + // // Assume frxETH = ETH for pricing purposes + // // Get the USD value of the frxETH per LP token + // uint256 frxETH_in_pool = IERC20(0x5E8422345238F34275888049021821E8E08CAa1f).balanceOf(address(curvePool)); + // uint256 frxETH_usd_val_per_lp_e8 = (frxETH_in_pool * uint256(getLatestETHPriceE8())) / curveToken.totalSupply(); + // frax_per_lp_token = frxETH_usd_val_per_lp_e8 * (1e10); // We use USD as "Frax" here // } // return frax_per_lp_token; diff --git a/src/hardhat/contracts/Uniswap/TransferHelperV2.sol b/src/hardhat/contracts/Uniswap/TransferHelperV2.sol index f6133948..c85ee060 100644 --- a/src/hardhat/contracts/Uniswap/TransferHelperV2.sol +++ b/src/hardhat/contracts/Uniswap/TransferHelperV2.sol @@ -3,34 +3,34 @@ pragma solidity >=0.8.4; // helper methods for interacting with ERC20 tokens and sending ETH that do not consistently return true/false library TransferHelperV2 { - error TranferHelperApproveFailed(); - error TranferHelperTransferFailed(); - error TranferHelperTransferFromFailed(); - error TranferHelperTransferETHFailed(); + error TransferHelperApproveFailed(); + error TransferHelperTransferFailed(); + error TransferHelperTransferFromFailed(); + error TransferHelperTransferETHFailed(); function safeApprove(address token, address to, uint value) internal { // bytes4(keccak256(bytes('approve(address,uint256)'))); (bool success, bytes memory data) = token.call(abi.encodeWithSelector(0x095ea7b3, to, value)); // require(success && (data.length == 0 || abi.decode(data, (bool))), 'TransferHelper: APPROVE_FAILED'); - if(!success || (data.length != 0 && !abi.decode(data, (bool)))) revert TranferHelperApproveFailed(); + if(!success || (data.length != 0 && !abi.decode(data, (bool)))) revert TransferHelperApproveFailed(); } function safeTransfer(address token, address to, uint value) internal { // bytes4(keccak256(bytes('transfer(address,uint256)'))); (bool success, bytes memory data) = token.call(abi.encodeWithSelector(0xa9059cbb, to, value)); // require(success && (data.length == 0 || abi.decode(data, (bool))), 'TransferHelper: TRANSFER_FAILED'); - if(!success || (data.length != 0 && !abi.decode(data, (bool)))) revert TranferHelperTransferFailed(); + if(!success || (data.length != 0 && !abi.decode(data, (bool)))) revert TransferHelperTransferFailed(); } function safeTransferFrom(address token, address from, address to, uint value) internal { // bytes4(keccak256(bytes('transferFrom(address,address,uint256)'))); (bool success, bytes memory data) = token.call(abi.encodeWithSelector(0x23b872dd, from, to, value)); // require(success && (data.length == 0 || abi.decode(data, (bool))), 'TransferHelper: TRANSFER_FROM_FAILED'); - if(!success || (data.length != 0 && !abi.decode(data, (bool)))) revert TranferHelperTransferFromFailed(); + if(!success || (data.length != 0 && !abi.decode(data, (bool)))) revert TransferHelperTransferFromFailed(); } function safeTransferETH(address to, uint value) internal { (bool success,) = to.call{value:value}(new bytes(0)); // require(success, 'TransferHelper: ETH_TRANSFER_FAILED'); - if(!success) revert TranferHelperTransferETHFailed(); + if(!success) revert TransferHelperTransferETHFailed(); } } \ No newline at end of file diff --git a/src/hardhat/contracts/Utils/ReentrancyGuard.sol b/src/hardhat/contracts/Utils/ReentrancyGuard.sol index 3dea46f2..e80e7684 100755 --- a/src/hardhat/contracts/Utils/ReentrancyGuard.sol +++ b/src/hardhat/contracts/Utils/ReentrancyGuard.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: MIT -pragma solidity >=0.6.11; +pragma solidity ^0.8.4; /** * @dev Contract module that helps prevent reentrant calls to a function. @@ -18,6 +18,7 @@ pragma solidity >=0.6.11; * https://blog.openzeppelin.com/reentrancy-after-istanbul/[Reentrancy After Istanbul]. */ abstract contract ReentrancyGuard { + error ReentrancyGuardFailure(); // Booleans are more expensive than uint256 or any type that takes up a full // word because each write operation emits an extra SLOAD to first read the // slot's contents, replace the bits taken up by the boolean, and then write @@ -34,7 +35,7 @@ abstract contract ReentrancyGuard { uint256 private _status; - constructor () internal { + constructor () { _status = _NOT_ENTERED; } @@ -47,8 +48,8 @@ abstract contract ReentrancyGuard { */ modifier nonReentrant() { // On the first call to nonReentrant, _notEntered will be true - require(_status != _ENTERED, "ReentrancyGuard: reentrant call"); - + // require(_status != _ENTERED, "ReentrancyGuard: reentrant call"); + if(_status == _ENTERED) revert ReentrancyGuardFailure(); // Any calls to nonReentrant after this point will fail _status = _ENTERED; diff --git a/src/hardhat/contracts/Utils/ReentrancyGuardV2.sol b/src/hardhat/contracts/Utils/ReentrancyGuardV2.sol deleted file mode 100755 index e80e7684..00000000 --- a/src/hardhat/contracts/Utils/ReentrancyGuardV2.sol +++ /dev/null @@ -1,62 +0,0 @@ -// SPDX-License-Identifier: MIT -pragma solidity ^0.8.4; - -/** - * @dev Contract module that helps prevent reentrant calls to a function. - * - * Inheriting from `ReentrancyGuard` will make the {nonReentrant} modifier - * available, which can be applied to functions to make sure there are no nested - * (reentrant) calls to them. - * - * Note that because there is a single `nonReentrant` guard, functions marked as - * `nonReentrant` may not call one another. This can be worked around by making - * those functions `private`, and then adding `external` `nonReentrant` entry - * points to them. - * - * TIP: If you would like to learn more about reentrancy and alternative ways - * to protect against it, check out our blog post - * https://blog.openzeppelin.com/reentrancy-after-istanbul/[Reentrancy After Istanbul]. - */ -abstract contract ReentrancyGuard { - error ReentrancyGuardFailure(); - // Booleans are more expensive than uint256 or any type that takes up a full - // word because each write operation emits an extra SLOAD to first read the - // slot's contents, replace the bits taken up by the boolean, and then write - // back. This is the compiler's defense against contract upgrades and - // pointer aliasing, and it cannot be disabled. - - // The values being non-zero value makes deployment a bit more expensive, - // but in exchange the refund on every call to nonReentrant will be lower in - // amount. Since refunds are capped to a percentage of the total - // transaction's gas, it is best to keep them low in cases like this one, to - // increase the likelihood of the full refund coming into effect. - uint256 private constant _NOT_ENTERED = 1; - uint256 private constant _ENTERED = 2; - - uint256 private _status; - - constructor () { - _status = _NOT_ENTERED; - } - - /** - * @dev Prevents a contract from calling itself, directly or indirectly. - * Calling a `nonReentrant` function from another `nonReentrant` - * function is not supported. It is possible to prevent this from happening - * by making the `nonReentrant` function external, and make it call a - * `private` function that does the actual work. - */ - modifier nonReentrant() { - // On the first call to nonReentrant, _notEntered will be true - // require(_status != _ENTERED, "ReentrancyGuard: reentrant call"); - if(_status == _ENTERED) revert ReentrancyGuardFailure(); - // Any calls to nonReentrant after this point will fail - _status = _ENTERED; - - _; - - // By storing the original value once again, a refund is triggered (see - // https://eips.ethereum.org/EIPS/eip-2200) - _status = _NOT_ENTERED; - } -} \ No newline at end of file From eda9388cf5242029fb90e89679251e240969fe04 Mon Sep 17 00:00:00 2001 From: travis Date: Fri, 6 Jan 2023 17:34:38 -0800 Subject: [PATCH 02/37] minor fix --- .../Staking/FraxUnifiedFarmTemplate_V2.sol | 6 +- .../contracts/Utils/ReentrancyGuard.sol | 9 ++- .../contracts/Utils/ReentrancyGuardV2.sol | 62 +++++++++++++++++++ 3 files changed, 69 insertions(+), 8 deletions(-) create mode 100644 src/hardhat/contracts/Utils/ReentrancyGuardV2.sol diff --git a/src/hardhat/contracts/Staking/FraxUnifiedFarmTemplate_V2.sol b/src/hardhat/contracts/Staking/FraxUnifiedFarmTemplate_V2.sol index 7f48f2ec..9b258645 100755 --- a/src/hardhat/contracts/Staking/FraxUnifiedFarmTemplate_V2.sol +++ b/src/hardhat/contracts/Staking/FraxUnifiedFarmTemplate_V2.sol @@ -36,17 +36,17 @@ pragma solidity >=0.8.4; import "../Math/MathV2.sol"; import "../Curve/IveFXS.sol"; -import "../Curve/IFraxGaugeController.sol"; +import "../Curve/IFraxGaugeControllerV2.sol"; import "../Curve/IFraxGaugeFXSRewardsDistributor.sol"; import "../ERC20/IERC20V2.sol"; import '../Uniswap/TransferHelperV2.sol'; -import "../Utils/ReentrancyGuard.sol"; +import "../Utils/ReentrancyGuardV2.sol"; import "./OwnedV2.sol"; // Extra rewards import "../Misc_AMOs/convex/IConvexBaseRewardPool.sol"; -contract FraxUnifiedFarmTemplate_V2 is OwnedV2, ReentrancyGuard { +contract FraxUnifiedFarmTemplate_V2 is OwnedV2, ReentrancyGuardV2 { error NeedsPreTransferProcessLogic(); error NeedsCCCWLogic(); diff --git a/src/hardhat/contracts/Utils/ReentrancyGuard.sol b/src/hardhat/contracts/Utils/ReentrancyGuard.sol index e80e7684..3dea46f2 100755 --- a/src/hardhat/contracts/Utils/ReentrancyGuard.sol +++ b/src/hardhat/contracts/Utils/ReentrancyGuard.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: MIT -pragma solidity ^0.8.4; +pragma solidity >=0.6.11; /** * @dev Contract module that helps prevent reentrant calls to a function. @@ -18,7 +18,6 @@ pragma solidity ^0.8.4; * https://blog.openzeppelin.com/reentrancy-after-istanbul/[Reentrancy After Istanbul]. */ abstract contract ReentrancyGuard { - error ReentrancyGuardFailure(); // Booleans are more expensive than uint256 or any type that takes up a full // word because each write operation emits an extra SLOAD to first read the // slot's contents, replace the bits taken up by the boolean, and then write @@ -35,7 +34,7 @@ abstract contract ReentrancyGuard { uint256 private _status; - constructor () { + constructor () internal { _status = _NOT_ENTERED; } @@ -48,8 +47,8 @@ abstract contract ReentrancyGuard { */ modifier nonReentrant() { // On the first call to nonReentrant, _notEntered will be true - // require(_status != _ENTERED, "ReentrancyGuard: reentrant call"); - if(_status == _ENTERED) revert ReentrancyGuardFailure(); + require(_status != _ENTERED, "ReentrancyGuard: reentrant call"); + // Any calls to nonReentrant after this point will fail _status = _ENTERED; diff --git a/src/hardhat/contracts/Utils/ReentrancyGuardV2.sol b/src/hardhat/contracts/Utils/ReentrancyGuardV2.sol new file mode 100644 index 00000000..e80e7684 --- /dev/null +++ b/src/hardhat/contracts/Utils/ReentrancyGuardV2.sol @@ -0,0 +1,62 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.4; + +/** + * @dev Contract module that helps prevent reentrant calls to a function. + * + * Inheriting from `ReentrancyGuard` will make the {nonReentrant} modifier + * available, which can be applied to functions to make sure there are no nested + * (reentrant) calls to them. + * + * Note that because there is a single `nonReentrant` guard, functions marked as + * `nonReentrant` may not call one another. This can be worked around by making + * those functions `private`, and then adding `external` `nonReentrant` entry + * points to them. + * + * TIP: If you would like to learn more about reentrancy and alternative ways + * to protect against it, check out our blog post + * https://blog.openzeppelin.com/reentrancy-after-istanbul/[Reentrancy After Istanbul]. + */ +abstract contract ReentrancyGuard { + error ReentrancyGuardFailure(); + // Booleans are more expensive than uint256 or any type that takes up a full + // word because each write operation emits an extra SLOAD to first read the + // slot's contents, replace the bits taken up by the boolean, and then write + // back. This is the compiler's defense against contract upgrades and + // pointer aliasing, and it cannot be disabled. + + // The values being non-zero value makes deployment a bit more expensive, + // but in exchange the refund on every call to nonReentrant will be lower in + // amount. Since refunds are capped to a percentage of the total + // transaction's gas, it is best to keep them low in cases like this one, to + // increase the likelihood of the full refund coming into effect. + uint256 private constant _NOT_ENTERED = 1; + uint256 private constant _ENTERED = 2; + + uint256 private _status; + + constructor () { + _status = _NOT_ENTERED; + } + + /** + * @dev Prevents a contract from calling itself, directly or indirectly. + * Calling a `nonReentrant` function from another `nonReentrant` + * function is not supported. It is possible to prevent this from happening + * by making the `nonReentrant` function external, and make it call a + * `private` function that does the actual work. + */ + modifier nonReentrant() { + // On the first call to nonReentrant, _notEntered will be true + // require(_status != _ENTERED, "ReentrancyGuard: reentrant call"); + if(_status == _ENTERED) revert ReentrancyGuardFailure(); + // Any calls to nonReentrant after this point will fail + _status = _ENTERED; + + _; + + // By storing the original value once again, a refund is triggered (see + // https://eips.ethereum.org/EIPS/eip-2200) + _status = _NOT_ENTERED; + } +} \ No newline at end of file From 0a157a4900691b1869370646f91297300cc02f8f Mon Sep 17 00:00:00 2001 From: travis Date: Fri, 6 Jan 2023 17:36:14 -0800 Subject: [PATCH 03/37] compile fix --- src/hardhat/contracts/Utils/ReentrancyGuardV2.sol | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/hardhat/contracts/Utils/ReentrancyGuardV2.sol b/src/hardhat/contracts/Utils/ReentrancyGuardV2.sol index e80e7684..9f881a31 100644 --- a/src/hardhat/contracts/Utils/ReentrancyGuardV2.sol +++ b/src/hardhat/contracts/Utils/ReentrancyGuardV2.sol @@ -17,7 +17,7 @@ pragma solidity ^0.8.4; * to protect against it, check out our blog post * https://blog.openzeppelin.com/reentrancy-after-istanbul/[Reentrancy After Istanbul]. */ -abstract contract ReentrancyGuard { +abstract contract ReentrancyGuardV2 { error ReentrancyGuardFailure(); // Booleans are more expensive than uint256 or any type that takes up a full // word because each write operation emits an extra SLOAD to first read the From fc4e427c51d17bd56fa19f73aa7bb868248e27ac Mon Sep 17 00:00:00 2001 From: travis Date: Thu, 12 Jan 2023 10:02:37 -0800 Subject: [PATCH 04/37] frxETH ferry stuff --- README_TESTS.md | 6 + .../__CROSSCHAIN/CrossChainCanonicalV2.sol | 6 +- src/hardhat/contracts/Fraxferry/Fraxferry.sol | 32 ++++-- src/types/constants.ts | 105 ++++++++++++++---- 4 files changed, 113 insertions(+), 36 deletions(-) diff --git a/README_TESTS.md b/README_TESTS.md index 201765da..ab6137ec 100755 --- a/README_TESTS.md +++ b/README_TESTS.md @@ -1,3 +1,9 @@ +# PREP +1) Using SAMPLE.env and SAMPLE.env.forge, make local versions of .env and .env.forge +2) npm install +3) tsc +4) forge b + ## FORGE **------Testing------** Do first diff --git a/src/hardhat/contracts/ERC20/__CROSSCHAIN/CrossChainCanonicalV2.sol b/src/hardhat/contracts/ERC20/__CROSSCHAIN/CrossChainCanonicalV2.sol index bd518f8f..bfd78443 100755 --- a/src/hardhat/contracts/ERC20/__CROSSCHAIN/CrossChainCanonicalV2.sol +++ b/src/hardhat/contracts/ERC20/__CROSSCHAIN/CrossChainCanonicalV2.sol @@ -33,9 +33,11 @@ contract CrossChainCanonicalV2 is ERC20PermitPermissionedMint { address _creator_address, address _timelock_address, string memory _name, - string memory _symbol + string memory _symbol, + uint256 _initial_mint_amt ) ERC20PermitPermissionedMint(_creator_address, _timelock_address, _name, _symbol) { - + // Mint some canonical tokens to the creator + super._mint(_creator_address, _initial_mint_amt); } } diff --git a/src/hardhat/contracts/Fraxferry/Fraxferry.sol b/src/hardhat/contracts/Fraxferry/Fraxferry.sol index 71caaae9..9473cbbc 100644 --- a/src/hardhat/contracts/Fraxferry/Fraxferry.sol +++ b/src/hardhat/contracts/Fraxferry/Fraxferry.sol @@ -39,6 +39,7 @@ pragma solidity ^0.8.4; */ import "@openzeppelin/contracts/token/ERC20/IERC20.sol"; import "@openzeppelin/contracts/token/ERC20/extensions/draft-IERC20Permit.sol"; +import "@openzeppelin/contracts/utils/math/Math.sol"; import "@uniswap/v3-periphery/contracts/libraries/TransferHelper.sol"; contract Fraxferry { @@ -57,9 +58,15 @@ contract Fraxferry { uint public MIN_WAIT_PERIOD_ADD=3600; // Minimal 1 hour waiting uint public MIN_WAIT_PERIOD_EXECUTE=79200; // Minimal 22 hour waiting - uint public FEE=5*1e18; // 5 token fee - uint immutable MAX_FEE=100e18; // Max fee is 100 tokens - uint immutable public REDUCED_DECIMALS=1e10; + uint public FEE_RATE=10; // 0.1% fee + uint public FEE_MIN=5*1e18; // 5 token min fee + uint public FEE_MAX=100*1e18; // 100 token max fee + + uint constant MAX_FEE_RATE=100; // Max fee rate is 1% + uint constant MAX_FEE_MIN=100e18; // Max minimum fee is 100 tokens + uint constant MAX_FEE_MAX=1000e18; // Max fee is 1000 tokens + + uint constant public REDUCED_DECIMALS=1e10; Transaction[] public transactions; mapping(uint => bool) public cancelled; @@ -109,7 +116,7 @@ contract Fraxferry { event SetCaptain(address indexed previousCaptain, address indexed newCaptain); event SetFirstOfficer(address indexed previousFirstOfficer, address indexed newFirstOfficer); event SetCrewmember(address indexed crewmember,bool set); - event SetFee(uint previousFee, uint fee); + event SetFee(uint previousFeeRate, uint feeRate,uint previousFeeMin, uint feeMin,uint previousFeeMax, uint feeMax); event SetMinWaitPeriods(uint previousMinWaitAdd,uint previousMinWaitExecute,uint minWaitAdd,uint minWaitExecute); // ############## Modifiers ############## @@ -143,10 +150,11 @@ contract Fraxferry { function embarkWithRecipient(uint amount, address recipient) public notPaused { amount = (amount/REDUCED_DECIMALS)*REDUCED_DECIMALS; // Round amount to fit in data structure - require (amount>FEE,"Amount too low"); + uint fee = Math.min(Math.max(FEE_MIN,amount*FEE_RATE/10000),FEE_MAX); + require (amount>fee,"Amount too low"); require (amount/REDUCED_DECIMALS<=type(uint64).max,"Amount too high"); TransferHelper.safeTransferFrom(address(token),msg.sender,address(this),amount); - uint64 amountAfterFee = uint64((amount-FEE)/REDUCED_DECIMALS); + uint64 amountAfterFee = uint64((amount-fee)/REDUCED_DECIMALS); emit Embark(recipient,transactions.length,amount,amountAfterFee*REDUCED_DECIMALS,block.timestamp); transactions.push(Transaction(recipient,amountAfterFee,uint32(block.timestamp))); } @@ -240,10 +248,14 @@ contract Fraxferry { // ############## Parameters management ############## - function setFee(uint _FEE) external isOwner { - require(FEE Date: Tue, 24 Jan 2023 14:45:01 -0800 Subject: [PATCH 05/37] periodic update --- .../Misc_AMOs/alphadex/IBBROARMasterchef.sol | 31 + .../Misc_AMOs/alphadex/IROARMasterchef.sol | 36 + .../contracts/Misc_AMOs/platypus/IAsset.sol | 37 + .../Misc_AMOs/saddle/IChildLiquidityGauge.sol | 69 ++ .../saddle/IChildLiquidityGaugeFactory.sol | 28 + .../Misc_AMOs/saddle/IGaugeMinter.sol | 31 + .../Misc_AMOs/saddle/IPoolRegistry.sol | 215 +++++ .../contracts/Misc_AMOs/saddle/IRootGauge.sol | 24 + .../Misc_AMOs/saddle/ISaddleMiniChefV2.sol | 37 + .../Misc_AMOs/stakedao/ICurveVault.sol | 36 + .../Misc_AMOs/stakedao/IStakeDAOGauge.sol | 56 ++ .../Misc_AMOs/stargate/ILPStaking.sol | 31 + .../stellaswap/IStellaDistributorV2.sol | 48 + .../stellaswap/IStellaSwapFlashLoan.sol | 47 + .../Misc_AMOs/thena/IThenaGaugeV2.sol | 46 + .../Staking/FraxUnifiedFarm_ERC20_V2.sol | 266 ++--- ...dFarm_ERC20_V2_BEFORE_MANUAL_MERGE.sol.old | 908 ++++++++++++++++++ .../CrossChainBridgeBacker_ARBI_AnySwap.sol | 62 -- .../FraxLiquidityBridger_ARBI_AnySwap.sol | 77 -- .../Bridges/Arbitrum/IL1CustomGateway.sol | 24 - .../Bridges/Arbitrum/IL2GatewayRouter.sol | 19 - .../old_contracts/Misc_AMOs/Convex_AMO_V2.sol | 486 ---------- .../__CROSSCHAIN/Arbitrum/CurveAMO_ARBI.sol | 300 ------ .../Arbitrum/SushiSwapLiquidityAMO_ARBI.sol | 490 ---------- .../Misc_AMOs/apeswap/IApePair.sol | 63 -- .../Misc_AMOs/apeswap/IApeRouter.sol | 29 - .../Misc_AMOs/apeswap/IMasterApe.sol | 33 - .../Misc_AMOs/axial/IAxialToken.sol | 31 - .../Misc_AMOs/axial/IMasterChefAxialV3.sol | 27 - .../Misc_AMOs/axial/ISwapFlashLoan.sol | 44 - .../Misc_AMOs/compound/IComptroller.sol | 47 - .../Misc_AMOs/compound/IcUSDC_Partial.sol | 19 - .../Misc_AMOs/gelato/IGUniPool.sol | 50 - .../Misc_AMOs/mstable/IFeederPool.sol | 78 -- .../Misc_AMOs/snowball/ILPToken.sol | 22 - .../Misc_AMOs/snowball/ISwapFlashLoan.sol | 34 - .../Misc_AMOs/vesper/IPoolRewards.sol | 27 - .../old_contracts/Misc_AMOs/vesper/IVPool.sol | 66 -- .../Staking/FraxCrossChainFarm.sol | 772 --------------- src/hardhat/test/Fraxferry/Fraxferry-test.js | 140 ++- src/hardhat/test/veFPIS-Tests.js | 2 +- src/types/constants.ts | 60 +- 42 files changed, 1922 insertions(+), 3026 deletions(-) create mode 100644 src/hardhat/contracts/Misc_AMOs/alphadex/IBBROARMasterchef.sol create mode 100644 src/hardhat/contracts/Misc_AMOs/alphadex/IROARMasterchef.sol create mode 100644 src/hardhat/contracts/Misc_AMOs/platypus/IAsset.sol create mode 100644 src/hardhat/contracts/Misc_AMOs/saddle/IChildLiquidityGauge.sol create mode 100644 src/hardhat/contracts/Misc_AMOs/saddle/IChildLiquidityGaugeFactory.sol create mode 100644 src/hardhat/contracts/Misc_AMOs/saddle/IGaugeMinter.sol create mode 100644 src/hardhat/contracts/Misc_AMOs/saddle/IPoolRegistry.sol create mode 100644 src/hardhat/contracts/Misc_AMOs/saddle/IRootGauge.sol create mode 100644 src/hardhat/contracts/Misc_AMOs/saddle/ISaddleMiniChefV2.sol create mode 100644 src/hardhat/contracts/Misc_AMOs/stakedao/ICurveVault.sol create mode 100644 src/hardhat/contracts/Misc_AMOs/stakedao/IStakeDAOGauge.sol create mode 100644 src/hardhat/contracts/Misc_AMOs/stargate/ILPStaking.sol create mode 100644 src/hardhat/contracts/Misc_AMOs/stellaswap/IStellaDistributorV2.sol create mode 100644 src/hardhat/contracts/Misc_AMOs/stellaswap/IStellaSwapFlashLoan.sol create mode 100644 src/hardhat/contracts/Misc_AMOs/thena/IThenaGaugeV2.sol create mode 100644 src/hardhat/contracts/Staking/FraxUnifiedFarm_ERC20_V2_BEFORE_MANUAL_MERGE.sol.old delete mode 100644 src/hardhat/old_contracts/Bridges/Arbitrum/CrossChainBridgeBacker_ARBI_AnySwap.sol delete mode 100644 src/hardhat/old_contracts/Bridges/Arbitrum/FraxLiquidityBridger_ARBI_AnySwap.sol delete mode 100644 src/hardhat/old_contracts/Bridges/Arbitrum/IL1CustomGateway.sol delete mode 100644 src/hardhat/old_contracts/Bridges/Arbitrum/IL2GatewayRouter.sol delete mode 100644 src/hardhat/old_contracts/Misc_AMOs/Convex_AMO_V2.sol delete mode 100644 src/hardhat/old_contracts/Misc_AMOs/__CROSSCHAIN/Arbitrum/CurveAMO_ARBI.sol delete mode 100644 src/hardhat/old_contracts/Misc_AMOs/__CROSSCHAIN/Arbitrum/SushiSwapLiquidityAMO_ARBI.sol delete mode 100644 src/hardhat/old_contracts/Misc_AMOs/apeswap/IApePair.sol delete mode 100644 src/hardhat/old_contracts/Misc_AMOs/apeswap/IApeRouter.sol delete mode 100644 src/hardhat/old_contracts/Misc_AMOs/apeswap/IMasterApe.sol delete mode 100644 src/hardhat/old_contracts/Misc_AMOs/axial/IAxialToken.sol delete mode 100644 src/hardhat/old_contracts/Misc_AMOs/axial/IMasterChefAxialV3.sol delete mode 100644 src/hardhat/old_contracts/Misc_AMOs/axial/ISwapFlashLoan.sol delete mode 100644 src/hardhat/old_contracts/Misc_AMOs/compound/IComptroller.sol delete mode 100644 src/hardhat/old_contracts/Misc_AMOs/compound/IcUSDC_Partial.sol delete mode 100644 src/hardhat/old_contracts/Misc_AMOs/gelato/IGUniPool.sol delete mode 100644 src/hardhat/old_contracts/Misc_AMOs/mstable/IFeederPool.sol delete mode 100644 src/hardhat/old_contracts/Misc_AMOs/snowball/ILPToken.sol delete mode 100644 src/hardhat/old_contracts/Misc_AMOs/snowball/ISwapFlashLoan.sol delete mode 100644 src/hardhat/old_contracts/Misc_AMOs/vesper/IPoolRewards.sol delete mode 100644 src/hardhat/old_contracts/Misc_AMOs/vesper/IVPool.sol delete mode 100755 src/hardhat/old_contracts/Staking/FraxCrossChainFarm.sol diff --git a/src/hardhat/contracts/Misc_AMOs/alphadex/IBBROARMasterchef.sol b/src/hardhat/contracts/Misc_AMOs/alphadex/IBBROARMasterchef.sol new file mode 100644 index 00000000..1c7ad1c3 --- /dev/null +++ b/src/hardhat/contracts/Misc_AMOs/alphadex/IBBROARMasterchef.sol @@ -0,0 +1,31 @@ +// SPDX-License-Identifier: GPL-2.0-or-later +pragma solidity >=0.8.0; + +interface IBBROARMasterchef { + function add ( uint256 _allocPoint, address _lpToken, bool _withUpdate ) external; + function deposit ( uint256 _pid, uint256 _amount ) external; + function emergencyWithdraw ( uint256 _pid ) external; + function getAllPoolUserInfos ( uint256 _pid ) external view returns ( address[] memory, uint256[] memory ); + function getAllPoolUsers ( uint256 _pid ) external view returns ( address[] memory ); + function getMultiplier ( uint256 _from, uint256 _to ) external pure returns ( uint256 ); + function massUpdatePools ( ) external; + function migrate ( uint256 _pid ) external; + function migrator ( ) external view returns ( address ); + function owner ( ) external view returns ( address ); + function pendingKwik ( uint256 _pid, address _user ) external view returns ( uint256 ); + function poolInfo ( uint256 ) external view returns ( address lpToken, uint256 allocPoint, uint256 lastRewardBlock, uint256 accKwikPerShare ); + function poolLength ( ) external view returns ( uint256 ); + function renounceOwnership ( ) external; + function roar ( ) external view returns ( address ); + function roarPerBlock ( ) external view returns ( uint256 ); + function set ( uint256 _pid, uint256 _allocPoint, bool _withUpdate ) external; + function setMigrator ( address _migrator ) external; + function startBlock ( ) external view returns ( uint256 ); + function totalAllocPoint ( ) external view returns ( uint256 ); + function transferOwnership ( address newOwner ) external; + function updatePool ( uint256 _pid ) external; + function updateRewardFirstBlock ( uint256 _blockNumber ) external; + function updateRoar ( address _roar ) external; + function userInfo ( uint256, address ) external view returns ( uint256 amount, uint256 rewardDebt ); + function withdraw ( uint256 _pid, uint256 _amount ) external; +} diff --git a/src/hardhat/contracts/Misc_AMOs/alphadex/IROARMasterchef.sol b/src/hardhat/contracts/Misc_AMOs/alphadex/IROARMasterchef.sol new file mode 100644 index 00000000..4b68c8ee --- /dev/null +++ b/src/hardhat/contracts/Misc_AMOs/alphadex/IROARMasterchef.sol @@ -0,0 +1,36 @@ +// SPDX-License-Identifier: GPL-2.0-or-later +pragma solidity >=0.8.0; + +interface IROARMasterchef { + function BONUS_MULTIPLIER ( ) external view returns ( uint256 ); + function OLD_MASTER_CHEF ( ) external view returns ( address ); + function add ( uint256 _allocPoint, address _lpToken, bool _withUpdate ) external; + function bonusEndBlock ( ) external view returns ( uint256 ); + function claimWait ( ) external view returns ( uint256 ); + function deposit ( uint256 _pid, uint256 _amount ) external; + function emergencyWithdraw ( uint256 _pid ) external; + function getMultiplier ( uint256 _from, uint256 _to ) external view returns ( uint256 ); + function massUpdatePools ( ) external; + function migrate ( uint256 _pid ) external; + function migrator ( ) external view returns ( address ); + function owner ( ) external view returns ( address ); + function pendingKwik ( uint256 _pid, address _user ) external view returns ( uint256 ); + function poolInfo ( uint256 ) external view returns ( address lpToken, uint256 allocPoint, uint256 lastRewardBlock, uint256 accKwikPerShare ); + function poolLength ( ) external view returns ( uint256 ); + function renounceOwnership ( ) external; + function rewardWithdraw ( ) external; + function roar ( ) external view returns ( address ); + function roarPerBlock ( ) external view returns ( uint256 ); + function set ( uint256 _pid, uint256 _allocPoint, bool _withUpdate ) external; + function setBlockReward ( uint256 _tokens ) external; + function setMigrator ( address _migrator ) external; + function startBlock ( ) external view returns ( uint256 ); + function totalAllocPoint ( ) external view returns ( uint256 ); + function transferOwnership ( address newOwner ) external; + function updateClaimWait ( uint256 _claimWait ) external; + function updatePool ( uint256 _pid ) external; + function updateRewardBlock ( uint256 _blockNumber ) external; + function updateRewardFirstBlock ( uint256 _blockNumber ) external; + function userInfo ( uint256, address ) external view returns ( uint256 amount, uint256 rewardDebt, bool migrated ); + function withdraw ( uint256 _pid, uint256 _amount ) external; +} diff --git a/src/hardhat/contracts/Misc_AMOs/platypus/IAsset.sol b/src/hardhat/contracts/Misc_AMOs/platypus/IAsset.sol new file mode 100644 index 00000000..08053df6 --- /dev/null +++ b/src/hardhat/contracts/Misc_AMOs/platypus/IAsset.sol @@ -0,0 +1,37 @@ +// SPDX-License-Identifier: GPL-2.0-or-later +pragma solidity >=0.8.0; + +interface IAsset { + function addCash (uint256 amount) external; + function addLiability (uint256 amount) external; + function aggregateAccount () external view returns (address); + function allowance (address owner, address spender) external view returns (uint256); + function approve (address spender, uint256 amount) external returns (bool); + function balanceOf (address account) external view returns (uint256); + function burn (address to, uint256 amount) external; + function cash () external view returns (uint256); + function decimals () external view returns (uint8); + function decreaseAllowance (address spender, uint256 subtractedValue) external returns (bool); + function increaseAllowance (address spender, uint256 addedValue) external returns (bool); + function initialize (address underlyingToken_, string memory name_, string memory symbol_, address aggregateAccount_) external; + function liability () external view returns (uint256); + function maxSupply () external view returns (uint256); + function mint (address to, uint256 amount) external; + function name () external view returns (string memory); + function owner () external view returns (address); + function pool () external view returns (address); + function removeCash (uint256 amount) external; + function removeLiability (uint256 amount) external; + function renounceOwnership () external; + function setAggregateAccount (address aggregateAccount_) external; + function setMaxSupply (uint256 maxSupply_) external; + function setPool (address pool_) external; + function symbol () external view returns (string memory); + function totalSupply () external view returns (uint256); + function transfer (address recipient, uint256 amount) external returns (bool); + function transferFrom (address sender, address recipient, uint256 amount) external returns (bool); + function transferOwnership (address newOwner) external; + function transferUnderlyingToken (address to, uint256 amount) external; + function underlyingToken () external view returns (address); + function underlyingTokenBalance () external view returns (uint256); +} diff --git a/src/hardhat/contracts/Misc_AMOs/saddle/IChildLiquidityGauge.sol b/src/hardhat/contracts/Misc_AMOs/saddle/IChildLiquidityGauge.sol new file mode 100644 index 00000000..b40ab7a9 --- /dev/null +++ b/src/hardhat/contracts/Misc_AMOs/saddle/IChildLiquidityGauge.sol @@ -0,0 +1,69 @@ +// SPDX-License-Identifier: GPL-2.0-or-later +pragma solidity >=0.8.0; + +interface IChildLiquidityGauge { + struct Reward { + address distributor; + uint256 period_finish; + uint256 rate; + uint256 last_update; + uint256 integral; + } + + function deposit (uint256 _value) external; + function deposit (uint256 _value, address _user) external; + function deposit (uint256 _value, address _user, bool _claim_rewards) external; + function withdraw (uint256 _value) external; + function withdraw (uint256 _value, address _user) external; + function withdraw (uint256 _value, address _user, bool _claim_rewards) external; + function transferFrom (address _from, address _to, uint256 _value) external returns (bool); + function approve (address _spender, uint256 _value) external returns (bool); + function permit (address _owner, address _spender, uint256 _value, uint256 _deadline, uint8 _v, bytes32 _r, bytes32 _s) external returns (bool); + function transfer (address _to, uint256 _value) external returns (bool); + function increaseAllowance (address _spender, uint256 _added_value) external returns (bool); + function decreaseAllowance (address _spender, uint256 _subtracted_value) external returns (bool); + function user_checkpoint (address addr) external returns (bool); + function claimable_tokens (address addr) external returns (uint256); + function claimed_reward (address _addr, address _token) external view returns (uint256); + function claimable_reward (address _user, address _reward_token) external view returns (uint256); + function set_rewards_receiver (address _receiver) external; + function claim_rewards () external; + function claim_rewards (address _addr) external; + function claim_rewards (address _addr, address _receiver) external; + function add_reward (address _reward_token, address _distributor) external; + function set_reward_distributor (address _reward_token, address _distributor) external; + function deposit_reward_token (address _reward_token, uint256 _amount) external; + function set_manager (address _manager) external; + function update_voting_escrow () external; + function set_killed (bool _is_killed) external; + function decimals () external view returns (uint256); + function integrate_checkpoint () external view returns (uint256); + function version () external view returns (string memory); + function factory () external view returns (address); + function initialize (address _lp_token, address _manager, string memory _name) external; + function DOMAIN_SEPARATOR () external view returns (bytes32); + function nonces (address arg0) external view returns (uint256); + function name () external view returns (string memory); + function symbol () external view returns (string memory); + function allowance (address arg0, address arg1) external view returns (uint256); + function balanceOf (address arg0) external view returns (uint256); + function totalSupply () external view returns (uint256); + function lp_token () external view returns (address); + function manager () external view returns (address); + function voting_escrow () external view returns (address); + function working_balances (address arg0) external view returns (uint256); + function working_supply () external view returns (uint256); + function period () external view returns (uint256); + function period_timestamp (uint256 arg0) external view returns (uint256); + function integrate_checkpoint_of (address arg0) external view returns (uint256); + function integrate_fraction (address arg0) external view returns (uint256); + function integrate_inv_supply (uint256 arg0) external view returns (uint256); + function integrate_inv_supply_of (address arg0) external view returns (uint256); + function reward_count () external view returns (uint256); + function reward_tokens (uint256 arg0) external view returns (address); + function reward_data (address arg0) external view returns (Reward memory); + function rewards_receiver (address arg0) external view returns (address); + function reward_integral_for (address arg0, address arg1) external view returns (uint256); + function is_killed () external view returns (bool); + function inflation_rate (uint256 arg0) external view returns (uint256); +} diff --git a/src/hardhat/contracts/Misc_AMOs/saddle/IChildLiquidityGaugeFactory.sol b/src/hardhat/contracts/Misc_AMOs/saddle/IChildLiquidityGaugeFactory.sol new file mode 100644 index 00000000..db805401 --- /dev/null +++ b/src/hardhat/contracts/Misc_AMOs/saddle/IChildLiquidityGaugeFactory.sol @@ -0,0 +1,28 @@ +// SPDX-License-Identifier: GPL-2.0-or-later +pragma solidity >=0.8.0; + +interface IChildLiquidityGaugeFactory { + function mint (address _gauge) external; + function mint_many (address[32] memory _gauges) external; + function deploy_gauge (address _lp_token, bytes32 _salt, string memory _name) external returns (address); + function deploy_gauge (address _lp_token, bytes32 _salt, string memory _name, address _manager) external returns (address); + function set_voting_escrow (address _voting_escrow) external; + function set_implementation (address _implementation) external; + function set_mirrored (address _gauge, bool _mirrored) external; + function set_call_proxy (address _new_call_proxy) external; + function commit_transfer_ownership (address _future_owner) external; + function accept_transfer_ownership () external; + function is_valid_gauge (address _gauge) external view returns (bool); + function is_mirrored (address _gauge) external view returns (bool); + function last_request (address _gauge) external view returns (uint256); + function get_implementation () external view returns (address); + function voting_escrow () external view returns (address); + function owner () external view returns (address); + function future_owner () external view returns (address); + function call_proxy () external view returns (address); + function gauge_data (address arg0) external view returns (uint256); + function minted (address arg0, address arg1) external view returns (uint256); + function get_gauge_from_lp_token (address arg0) external view returns (address); + function get_gauge_count () external view returns (uint256); + function get_gauge (uint256 arg0) external view returns (address); +} diff --git a/src/hardhat/contracts/Misc_AMOs/saddle/IGaugeMinter.sol b/src/hardhat/contracts/Misc_AMOs/saddle/IGaugeMinter.sol new file mode 100644 index 00000000..97577098 --- /dev/null +++ b/src/hardhat/contracts/Misc_AMOs/saddle/IGaugeMinter.sol @@ -0,0 +1,31 @@ +// SPDX-License-Identifier: GPL-2.0-or-later +pragma solidity >=0.8.0; + +interface IGaugeMinter { + function update_mining_parameters () external; + function start_epoch_time_write () external returns (uint256); + function future_epoch_time_write () external returns (uint256); + function mint (address gauge_addr) external; + function mint_many (address[8] memory gauge_addrs) external; + function mint_for (address gauge_addr, address _for) external; + function toggle_approve_mint (address minting_user) external; + function recover_balance (address _coin) external returns (bool); + function commit_next_emission (uint256 _rate_per_week) external; + function commit_transfer_emergency_return (address addr) external; + function apply_transfer_emergency_return () external; + function commit_transfer_ownership (address addr) external; + function apply_transfer_ownership () external; + function mining_epoch () external view returns (int128); + function start_epoch_time () external view returns (uint256); + function rate () external view returns (uint256); + function committed_rate () external view returns (uint256); + function is_start () external view returns (bool); + function token () external view returns (address); + function controller () external view returns (address); + function minted (address arg0, address arg1) external view returns (uint256); + function allowed_to_mint_for (address arg0, address arg1) external view returns (bool); + function future_emergency_return () external view returns (address); + function emergency_return () external view returns (address); + function admin () external view returns (address); + function future_admin () external view returns (address); +} diff --git a/src/hardhat/contracts/Misc_AMOs/saddle/IPoolRegistry.sol b/src/hardhat/contracts/Misc_AMOs/saddle/IPoolRegistry.sol new file mode 100644 index 00000000..32cd534f --- /dev/null +++ b/src/hardhat/contracts/Misc_AMOs/saddle/IPoolRegistry.sol @@ -0,0 +1,215 @@ +// SPDX-License-Identifier: MIT + +pragma solidity ^0.8.0; +pragma experimental ABIEncoderV2; + +import "@openzeppelin/contracts/token/ERC20/IERC20.sol"; + +interface IPoolRegistry { + /* Structs */ + + struct PoolInputData { + address poolAddress; + uint8 typeOfAsset; + bytes32 poolName; + address targetAddress; + address metaSwapDepositAddress; + bool isSaddleApproved; + bool isRemoved; + bool isGuarded; + } + + struct PoolData { + address poolAddress; + address lpToken; + uint8 typeOfAsset; + bytes32 poolName; + address targetAddress; + IERC20[] tokens; + IERC20[] underlyingTokens; + address basePoolAddress; + address metaSwapDepositAddress; + bool isSaddleApproved; + bool isRemoved; + bool isGuarded; + } + + struct SwapStorageData { + uint256 initialA; + uint256 futureA; + uint256 initialATime; + uint256 futureATime; + uint256 swapFee; + uint256 adminFee; + address lpToken; + } + + /* Public Variables */ + + /** + * @notice Returns the index + 1 of the pool address in the registry + * @param poolAddress address to look for + */ + function poolsIndexOfPlusOne(address poolAddress) + external + returns (uint256); + + /** + * @notice Returns the index + 1 of the pool name in the registry + * @param poolName pool name in bytes32 format to look for + */ + function poolsIndexOfNamePlusOne(bytes32 poolName) + external + returns (uint256); + + /* Functions */ + + /** + * @notice Add a new pool to the registry + * @param inputData PoolInputData struct for the new pool + * @dev Before adding a meta pool, the user must first add the underlying base pool. + * Only Swap and MetaSwap contracts need to be added. + */ + function addPool(PoolInputData memory inputData) external payable; + + /** + * @notice Add a new pool to the registry + * @param data PoolInputData struct for the new pool + * @dev Before adding a meta pool, the user must first add the underlying base pool. + * Only Swap and MetaSwap contracts need to be added. + */ + function addCommunityPool(PoolData memory data) external payable; + + /** + * @notice Approve community deployed pools to be upgraded as Saddle owned + * @dev since array entries are difficult to remove, we modify the entry to mark it + * as a Saddle owned pool. + * @param poolAddress address of the community pool + */ + function approvePool(address poolAddress) external payable; + + /** + * @notice Overwrite existing entry with new PoolData + * @param poolData new PoolData struct to store + */ + function updatePool(PoolData memory poolData) external payable; + + /** + * @notice Remove pool from the registry + * @dev Since arrays are not easily reducable, the entry will be marked as removed. + * @param poolAddress address of the pool to remove + */ + function removePool(address poolAddress) external payable; + + /** + * @notice Returns PoolData for given pool address + * @param poolAddress address of the pool to read + */ + function getPoolData(address poolAddress) + external + view + returns (PoolData memory); + + /** + * @notice Returns PoolData at given index + * @param index index of the pool to read + */ + function getPoolDataAtIndex(uint256 index) + external + view + returns (PoolData memory); + + /** + * @notice Returns PoolData with given name + * @param poolName name of the pool to read + */ + function getPoolDataByName(bytes32 poolName) + external + view + returns (PoolData memory); + + /** + * @notice Returns virtual price of the given pool address + * @param poolAddress address of the pool to read + */ + function getVirtualPrice(address poolAddress) + external + view + returns (uint256); + + /** + * @notice Returns A of the given pool address + * @param poolAddress address of the pool to read + */ + function getA(address poolAddress) external view returns (uint256); + + /** + * @notice Returns the paused status of the given pool address + * @param poolAddress address of the pool to read + */ + function getPaused(address poolAddress) external view returns (bool); + + /** + * @notice Returns the SwapStorage struct of the given pool address + * @param poolAddress address of the pool to read + */ + function getSwapStorage(address poolAddress) + external + view + returns (SwapStorageData memory swapStorageData); + + /** + * @notice Returns the tokens of the given pool address + * @param poolAddress address of the pool to read + */ + function getTokens(address poolAddress) + external + view + returns (IERC20[] memory); + + /** + * @notice Returns the underlying tokens of the given pool address. Base pools will return an empty array. + * @param poolAddress address of the pool to read + */ + function getUnderlyingTokens(address poolAddress) + external + view + returns (IERC20[] memory); + + /** + * @notice Returns number of entries in the registry. Includes removed pools + * in the list as well. + */ + function getPoolsLength() external view returns (uint256); + + /** + * @notice Returns an array of pool addresses that can swap between from and to + * @param from address of the token to swap from + * @param to address of the token to swap to + * @return eligiblePools array of pool addresses that can swap between from and to + */ + function getEligiblePools(address from, address to) + external + view + returns (address[] memory eligiblePools); + + /** + * @notice Returns an array of balances of the tokens + * @param poolAddress address of the pool to look up the token balances for + * @return balances array of token balances + */ + function getTokenBalances(address poolAddress) + external + view + returns (uint256[] memory balances); + + /** + * @notice Returns an array of balances of the tokens + * @param poolAddress address of the pool to look up the token balances for + * @return balances array of token balances + */ + function getUnderlyingTokenBalances(address poolAddress) + external + view + returns (uint256[] memory balances); +} \ No newline at end of file diff --git a/src/hardhat/contracts/Misc_AMOs/saddle/IRootGauge.sol b/src/hardhat/contracts/Misc_AMOs/saddle/IRootGauge.sol new file mode 100644 index 00000000..97c8a90e --- /dev/null +++ b/src/hardhat/contracts/Misc_AMOs/saddle/IRootGauge.sol @@ -0,0 +1,24 @@ +// SPDX-License-Identifier: GPL-2.0-or-later +pragma solidity >=0.8.0; + +interface IRootGauge { + struct InflationParams { + uint256 rate; + uint256 finish_time; + } + + function transmit_emissions () external; + function integrate_fraction (address _user) external view returns (uint256); + function user_checkpoint (address _user) external returns (bool); + function set_killed (bool _is_killed) external; + function update_bridger () external; + function initialize (address _bridger, uint256 _chain_id, string memory _name) external; + function chain_id () external view returns (uint256); + function bridger () external view returns (address); + function factory () external view returns (address); + function name () external view returns (string memory); + function inflation_params () external view returns (InflationParams memory); + function last_period () external view returns (uint256); + function total_emissions () external view returns (uint256); + function is_killed () external view returns (bool); +} diff --git a/src/hardhat/contracts/Misc_AMOs/saddle/ISaddleMiniChefV2.sol b/src/hardhat/contracts/Misc_AMOs/saddle/ISaddleMiniChefV2.sol new file mode 100644 index 00000000..efecd7fc --- /dev/null +++ b/src/hardhat/contracts/Misc_AMOs/saddle/ISaddleMiniChefV2.sol @@ -0,0 +1,37 @@ +// SPDX-License-Identifier: GPL-2.0-or-later +pragma solidity >=0.8.0; + +interface ISaddleMiniChefV2 { + struct PoolInfo { + address lpToken; // Address of LP token contract. + uint256 allocPoint; // How many allocation points assigned to this pool. SADDLE to distribute per block. + uint256 lastRewardBlock; // Last block number that SADDLE distribution occurs. + uint256 accSaddlePerShare; // Accumulated SADDLE per share, times 1e12. See below. + } + + function SADDLE () external view returns (address); + function add (uint256 allocPoint, address _lpToken, address _rewarder) external; + function batch (bytes[] memory calls, bool revertOnFail) external returns (bool[] memory successes, bytes[] memory results); + function claimOwnership () external; + function deposit (uint256 pid, uint256 amount, address to) external; + function emergencyWithdraw (uint256 pid, address to) external; + function harvest (uint256 pid, address to) external; + function lpToken (uint256) external view returns (address); + function massUpdatePools (uint256[] memory pids) external; + function owner () external view returns (address); + function pendingOwner () external view returns (address); + function pendingSaddle (uint256 _pid, address _user) external view returns (uint256 pending); + function permitToken (address token, address from, address to, uint256 amount, uint256 deadline, uint8 v, bytes32 r, bytes32 s) external; + function poolInfo (uint256) external view returns (uint128 accSaddlePerShare, uint64 lastRewardTime, uint64 allocPoint); + function poolLength () external view returns (uint256 pools); + function rewarder (uint256) external view returns (address); + function saddlePerSecond () external view returns (uint256); + function set (uint256 _pid, uint256 _allocPoint, address _rewarder, bool overwrite) external; + function setSaddlePerSecond (uint256 _saddlePerSecond) external; + function totalAllocPoint () external view returns (uint256); + function transferOwnership (address newOwner, bool direct, bool renounce) external; + function updatePool (uint256 pid) external returns (PoolInfo memory pool); + function userInfo (uint256, address) external view returns (uint256 amount, int256 rewardDebt); + function withdraw (uint256 pid, uint256 amount, address to) external; + function withdrawAndHarvest (uint256 pid, uint256 amount, address to) external; +} diff --git a/src/hardhat/contracts/Misc_AMOs/stakedao/ICurveVault.sol b/src/hardhat/contracts/Misc_AMOs/stakedao/ICurveVault.sol new file mode 100644 index 00000000..3538dd69 --- /dev/null +++ b/src/hardhat/contracts/Misc_AMOs/stakedao/ICurveVault.sol @@ -0,0 +1,36 @@ +// SPDX-License-Identifier: GPL-2.0-or-later +pragma solidity >=0.8.0; + +interface ICurveVault { + function MAX () external view returns (uint256); + function accumulatedFee () external view returns (uint256); + function allowance (address owner, address spender) external view returns (uint256); + function approve (address spender, uint256 amount) external returns (bool); + function available () external view returns (uint256); + function balanceOf (address account) external view returns (uint256); + function curveStrategy () external view returns (address); + function decimals () external view returns (uint8); + function decreaseAllowance (address spender, uint256 subtractedValue) external returns (bool); + function deposit (address _staker, uint256 _amount, bool _earn) external; + function governance () external view returns (address); + function increaseAllowance (address spender, uint256 addedValue) external returns (bool); + function init (address _token, address _governance, string memory name_, string memory symbol_, address _curveStrategy) external; + function keeperFee () external view returns (uint256); + function liquidityGauge () external view returns (address); + function min () external view returns (uint256); + function name () external view returns (string memory); + function setCurveStrategy (address _newStrat) external; + function setGovernance (address _governance) external; + function setKeeperFee (uint256 _newFee) external; + function setLiquidityGauge (address _liquidityGauge) external; + function setMin (uint256 _min) external; + function setWithdrawnFee (uint256 _newFee) external; + function symbol () external view returns (string memory); + function token () external view returns (address); + function totalSupply () external view returns (uint256); + function transfer (address to, uint256 amount) external returns (bool); + function transferFrom (address from, address to, uint256 amount) external returns (bool); + function withdraw (uint256 _shares) external; + function withdrawAll () external; + function withdrawalFee () external view returns (uint256); +} diff --git a/src/hardhat/contracts/Misc_AMOs/stakedao/IStakeDAOGauge.sol b/src/hardhat/contracts/Misc_AMOs/stakedao/IStakeDAOGauge.sol new file mode 100644 index 00000000..6e8ca4be --- /dev/null +++ b/src/hardhat/contracts/Misc_AMOs/stakedao/IStakeDAOGauge.sol @@ -0,0 +1,56 @@ +// SPDX-License-Identifier: GPL-2.0-or-later +pragma solidity >=0.8.0; + +interface IStakeDAOGauge { + function initialize (address _staking_token, address _admin, address _SDT, address _voting_escrow, address _veBoost_proxy, address _distributor, address _vault, string memory symbol) external; + function decimals () external view returns (uint256); + function user_checkpoint (address addr) external returns (bool); + function claimed_reward (address _addr, address _token) external view returns (uint256); + function claimable_reward (address _user, address _reward_token) external view returns (uint256); + function set_rewards_receiver (address _receiver) external; + function set_vault (address _vault) external; + function claim_rewards () external; + function claim_rewards (address _addr) external; + function claim_rewards (address _addr, address _receiver) external; + function claim_rewards_for (address _addr, address _receiver) external; + function kick (address addr) external; + function deposit (uint256 _value) external; + function deposit (uint256 _value, address _addr) external; + function deposit (uint256 _value, address _addr, bool _claim_rewards) external; + function withdraw (uint256 _value, address _addr) external; + function withdraw (uint256 _value, address _addr, bool _claim_rewards) external; + function transfer (address _to, uint256 _value) external returns (bool); + function transferFrom (address _from, address _to, uint256 _value) external returns (bool); + function approve (address _spender, uint256 _value) external returns (bool); + function increaseAllowance (address _spender, uint256 _added_value) external returns (bool); + function decreaseAllowance (address _spender, uint256 _subtracted_value) external returns (bool); + function add_reward (address _reward_token, address _distributor) external; + function set_reward_distributor (address _reward_token, address _distributor) external; + function set_claimer (address _claimer) external; + function deposit_reward_token (address _reward_token, uint256 _amount) external; + function commit_transfer_ownership (address addr) external; + function accept_transfer_ownership () external; + function SDT () external view returns (address); + function voting_escrow () external view returns (address); + function veBoost_proxy () external view returns (address); + function staking_token () external view returns (address); + function decimal_staking_token () external view returns (uint256); + function balanceOf (address arg0) external view returns (uint256); + function totalSupply () external view returns (uint256); + function allowance (address arg0, address arg1) external view returns (uint256); + function name () external view returns (string memory); + function symbol () external view returns (string memory); + function working_balances (address arg0) external view returns (uint256); + function working_supply () external view returns (uint256); + function integrate_checkpoint_of (address arg0) external view returns (uint256); + function reward_count () external view returns (uint256); + function reward_tokens (uint256 arg0) external view returns (address); + function reward_data (address arg0) external view returns (address token, address distributor, uint256 period_finish, uint256 rate, uint256 last_update, uint256 integral); + function rewards_receiver (address arg0) external view returns (address); + function reward_integral_for (address arg0, address arg1) external view returns (uint256); + function admin () external view returns (address); + function future_admin () external view returns (address); + function claimer () external view returns (address); + function initialized () external view returns (bool); + function vault () external view returns (address); +} diff --git a/src/hardhat/contracts/Misc_AMOs/stargate/ILPStaking.sol b/src/hardhat/contracts/Misc_AMOs/stargate/ILPStaking.sol new file mode 100644 index 00000000..8097eb7f --- /dev/null +++ b/src/hardhat/contracts/Misc_AMOs/stargate/ILPStaking.sol @@ -0,0 +1,31 @@ +// SPDX-License-Identifier: GPL-2.0-or-later +pragma solidity >=0.8.0; + +interface ILPStaking { + function BONUS_MULTIPLIER () external view returns (uint256); + function add (uint256 _allocPoint, address _lpToken) external; + function bonusEndBlock () external view returns (uint256); + function deposit (uint256 _pid, uint256 _amount) external; + function emergencyWithdraw (uint256 _pid) external; + function getMultiplier (uint256 _from, uint256 _to) external view returns (uint256); + function lpBalances (uint256) external view returns (uint256); + function massUpdatePools () external; + function owner () external view returns (address); + function pendingStargate (uint256 _pid, address _user) external view returns (uint256); + function poolInfo (uint256) external view returns (address lpToken, uint256 allocPoint, uint256 lastRewardBlock, uint256 accStargatePerShare); + function poolLength () external view returns (uint256); + function renounceOwnership () external; + function set (uint256 _pid, uint256 _allocPoint) external; + function setStargatePerBlock (uint256 _stargatePerBlock) external; + function stargate () external view returns (address); + function stargatePerBlock () external view returns (uint256); + function startBlock () external view returns (uint256); + function totalAllocPoint () external view returns (uint256); + function transferOwnership (address newOwner) external; + function updatePool (uint256 _pid) external; + function userInfo (uint256, address) external view returns (uint256 amount, uint256 rewardDebt); + function withdraw (uint256 _pid, uint256 _amount) external; + + // Extra + function eTokenPerSecond () external view returns (uint256); +} diff --git a/src/hardhat/contracts/Misc_AMOs/stellaswap/IStellaDistributorV2.sol b/src/hardhat/contracts/Misc_AMOs/stellaswap/IStellaDistributorV2.sol new file mode 100644 index 00000000..67f4a12e --- /dev/null +++ b/src/hardhat/contracts/Misc_AMOs/stellaswap/IStellaDistributorV2.sol @@ -0,0 +1,48 @@ +// SPDX-License-Identifier: GPL-2.0-or-later +pragma solidity >=0.8.0; + +interface IStellaDistributorV2 { + function MAXIMUM_DEPOSIT_FEE_RATE () external view returns (uint16); + function MAXIMUM_HARVEST_INTERVAL () external view returns (uint256); + function add (uint256 _allocPoint, address _lpToken, uint16 _depositFeeBP, uint256 _harvestInterval, address[] memory _rewarders) external; + function canHarvest (uint256 _pid, address _user) external view returns (bool); + function deposit (uint256 _pid, uint256 _amount) external; + function depositWithPermit (uint256 pid, uint256 amount, uint256 deadline, uint8 v, bytes32 r, bytes32 s) external; + function emergencyWithdraw (uint256 _pid) external; + function harvestMany (uint256[] memory _pids) external; + function investorAddress () external view returns (address); + function investorPercent () external view returns (uint256); + function massUpdatePools () external; + function owner () external view returns (address); + function pendingTokens (uint256 _pid, address _user) external view returns (address[] memory addresses, string[] memory symbols, uint256[] memory decimals, uint256[] memory amounts); + function poolInfo (uint256) external view returns (address lpToken, uint256 allocPoint, uint256 lastRewardTimestamp, uint256 accStellaPerShare, uint16 depositFeeBP, uint256 harvestInterval, uint256 totalLp); + function poolLength () external view returns (uint256); + function poolRewarders (uint256 _pid) external view returns (address[] memory rewarders); + function poolRewardsPerSec (uint256 _pid) external view returns (address[] memory addresses, string[] memory symbols, uint256[] memory decimals, uint256[] memory rewardsPerSec); + function poolTotalLp (uint256 pid) external view returns (uint256); + function renounceOwnership () external; + function set (uint256 _pid, uint256 _allocPoint, uint16 _depositFeeBP, uint256 _harvestInterval, address[] memory _rewarders) external; + function setInvestorAddress (address _investorAddress) external; + function setInvestorPercent (uint256 _newInvestorPercent) external; + function setTeamAddress (address _teamAddress) external; + function setTeamPercent (uint256 _newTeamPercent) external; + function setTreasuryAddress (address _treasuryAddress) external; + function setTreasuryPercent (uint256 _newTreasuryPercent) external; + function startFarming () external; + function startTimestamp () external view returns (uint256); + function stella () external view returns (address); + function stellaPerSec () external view returns (uint256); + function teamAddress () external view returns (address); + function teamPercent () external view returns (uint256); + function totalAllocPoint () external view returns (uint256); + function totalLockedUpRewards () external view returns (uint256); + function totalStellaInPools () external view returns (uint256); + function transferOwnership (address newOwner) external; + function treasuryAddress () external view returns (address); + function treasuryPercent () external view returns (uint256); + function updateAllocPoint (uint256 _pid, uint256 _allocPoint) external; + function updateEmissionRate (uint256 _stellaPerSec) external; + function updatePool (uint256 _pid) external; + function userInfo (uint256, address) external view returns (uint256 amount, uint256 rewardDebt, uint256 rewardLockedUp, uint256 nextHarvestUntil); + function withdraw (uint256 _pid, uint256 _amount) external; +} diff --git a/src/hardhat/contracts/Misc_AMOs/stellaswap/IStellaSwapFlashLoan.sol b/src/hardhat/contracts/Misc_AMOs/stellaswap/IStellaSwapFlashLoan.sol new file mode 100644 index 00000000..d9f95d53 --- /dev/null +++ b/src/hardhat/contracts/Misc_AMOs/stellaswap/IStellaSwapFlashLoan.sol @@ -0,0 +1,47 @@ +// SPDX-License-Identifier: GPL-2.0-or-later +pragma solidity >=0.8.0; + +interface IStellaSwapFlashLoan { + function MAX_BPS () external view returns (uint256); + function addLiquidity (uint256[] memory amounts, uint256 minToMint, uint256 deadline) external returns (uint256); + function calculateRemoveLiquidity (uint256 amount) external view returns (uint256[] memory); + function calculateRemoveLiquidityOneToken (uint256 tokenAmount, uint8 tokenIndex) external view returns (uint256 availableTokenAmount); + function calculateSwap (uint8 tokenIndexFrom, uint8 tokenIndexTo, uint256 dx) external view returns (uint256); + function calculateTokenAmount (uint256[] memory amounts, bool deposit) external view returns (uint256); + function flashLoan (address receiver, address token, uint256 amount, bytes memory params) external; + function flashLoanFeeBPS () external view returns (uint256); + function getA () external view returns (uint256); + function getAPrecise () external view returns (uint256); + function getAdminBalance (uint256 index) external view returns (uint256); + function getAdminBalances () external view returns (uint256[] memory adminBalances); + function getLpToken () external view returns (address); + function getNumberOfTokens () external view returns (uint256); + function getToken (uint8 index) external view returns (address); + function getTokenBalance (uint8 index) external view returns (uint256); + function getTokenBalances () external view returns (uint256[] memory); + function getTokenIndex (address tokenAddress) external view returns (uint8); + function getTokenPrecisionMultipliers () external view returns (uint256[] memory); + function getTokens () external view returns (address[] memory); + function getVirtualPrice () external view returns (uint256); + function initialize (address[] memory _pooledTokens, uint8[] memory decimals, string memory lpTokenName, string memory lpTokenSymbol, uint256 _a, uint256 _fee, uint256 _adminFee, address lpTokenTargetAddress) external; + function isFlashLoanEnabled () external view returns (bool); + function owner () external view returns (address); + function pause () external; + function paused () external view returns (bool); + function protocolFeeShareBPS () external view returns (uint256); + function rampA (uint256 futureA, uint256 futureTime) external; + function removeLiquidity (uint256 amount, uint256[] memory minAmounts, uint256 deadline) external returns (uint256[] memory); + function removeLiquidityImbalance (uint256[] memory amounts, uint256 maxBurnAmount, uint256 deadline) external returns (uint256); + function removeLiquidityOneToken (uint256 tokenAmount, uint8 tokenIndex, uint256 minAmount, uint256 deadline) external returns (uint256); + function renounceOwnership () external; + function setAdminFee (uint256 newAdminFee) external; + function setFlashLoanFees (uint256 newFlashLoanFeeBPS, uint256 newProtocolFeeShareBPS) external; + function setSwapFee (uint256 newSwapFee) external; + function stopRampA () external; + function swap (uint8 tokenIndexFrom, uint8 tokenIndexTo, uint256 dx, uint256 minDy, uint256 deadline) external returns (uint256); + function swapStorage () external view returns (uint256 initialA, uint256 futureA, uint256 initialATime, uint256 futureATime, uint256 swapFee, uint256 adminFee, address lpToken); + function toggleFlashLoan (bool enableFlashLoan) external; + function transferOwnership (address newOwner) external; + function unpause () external; + function withdrawAdminFees () external; +} diff --git a/src/hardhat/contracts/Misc_AMOs/thena/IThenaGaugeV2.sol b/src/hardhat/contracts/Misc_AMOs/thena/IThenaGaugeV2.sol new file mode 100644 index 00000000..48f19197 --- /dev/null +++ b/src/hardhat/contracts/Misc_AMOs/thena/IThenaGaugeV2.sol @@ -0,0 +1,46 @@ +// SPDX-License-Identifier: GPL-2.0-or-later +pragma solidity >=0.8.0; + +interface IThenaGaugeV2 { + function DISTRIBUTION () external view returns (address); + function DURATION () external view returns (uint256); + function TOKEN () external view returns (address); + function _VE () external view returns (address); + function _balances (address) external view returns (uint256); + function _periodFinish () external view returns (uint256); + function _totalSupply () external view returns (uint256); + function balanceOf (address account) external view returns (uint256); + function claimFees () external returns (uint256 claimed0, uint256 claimed1); + function deposit (uint256 amount) external; + function depositAll () external; + function earned (address account) external view returns (uint256); + function external_bribe () external view returns (address); + function fees0 () external view returns (uint256); + function fees1 () external view returns (uint256); + function gaugeRewarder () external view returns (address); + function getReward () external; + function internal_bribe () external view returns (address); + function isForPair () external view returns (bool); + function lastTimeRewardApplicable () external view returns (uint256); + function lastUpdateTime () external view returns (uint256); + function notifyRewardAmount (address token, uint256 reward) external; + function owner () external view returns (address); + function periodFinish () external view returns (uint256); + function renounceOwnership () external; + function rewardForDuration () external view returns (uint256); + function rewardPerToken () external view returns (uint256); + function rewardPerTokenStored () external view returns (uint256); + function rewardRate () external view returns (uint256); + function rewardToken () external view returns (address); + function rewarderPid () external view returns (uint256); + function rewards (address) external view returns (uint256); + function setDistribution (address _distribution) external; + function setGaugeRewarder (address _gaugeRewarder) external; + function setRewarderPid (uint256 _pid) external; + function totalSupply () external view returns (uint256); + function transferOwnership (address newOwner) external; + function userRewardPerTokenPaid (address) external view returns (uint256); + function withdraw (uint256 amount) external; + function withdrawAll () external; + function withdrawAllAndHarvest () external; +} diff --git a/src/hardhat/contracts/Staking/FraxUnifiedFarm_ERC20_V2.sol b/src/hardhat/contracts/Staking/FraxUnifiedFarm_ERC20_V2.sol index 282cdac8..7cd47f59 100644 --- a/src/hardhat/contracts/Staking/FraxUnifiedFarm_ERC20_V2.sol +++ b/src/hardhat/contracts/Staking/FraxUnifiedFarm_ERC20_V2.sol @@ -9,12 +9,13 @@ pragma solidity ^0.8.17; // | /_/ /_/ \__,_/_/|_| /_/ /_/_/ /_/\__,_/_/ /_/\___/\___/ | // | | // ==================================================================== -// ======================= FraxUnifiedFarm_ERC20 ====================== +// ===================== FraxUnifiedFarm_ERC20_V2 ===================== // ==================================================================== // For ERC20 Tokens // Uses FraxUnifiedFarmTemplate.sol /// @dev Testing for Lock Transferring performed in isolated repository: https://github.com/ZrowGz/frax-transfers.git +/// Locked Stake Transfer & Custom Error logic created by ZrowGz with the Pitch Foundation import "./FraxUnifiedFarmTemplate_V2.sol"; import "./ILockReceiverV2.sol"; @@ -67,7 +68,6 @@ contract FraxUnifiedFarm_ERC20_V2 is FraxUnifiedFarmTemplate_V2 { error CannotShortenLockTime(); error MustBeInTheFuture(); error MustBePositive(); - error StakerNotFound(); error CannotBeZero(); error AllowanceIsZero(); @@ -300,12 +300,6 @@ contract FraxUnifiedFarm_ERC20_V2 is FraxUnifiedFarmTemplate_V2 { // uint256 numerator = (pre_expiry_avg_multiplier * time_before_expiry) + (MULTIPLIER_PRECISION * time_after_expiry); uint256 numerator = (pre_expiry_avg_multiplier * time_before_expiry) + (0 * time_after_expiry); midpoint_lock_multiplier = numerator / (time_before_expiry + time_after_expiry); - // midpoint_lock_multiplier = ( - // ( - // (lockMultiplier(time_before_expiry / 2) * time_before_expiry) + - // (0 * time_after_expiry) - // ) / (time_before_expiry + time_after_expiry) - // ); } /// already initialized to zero // else { @@ -326,68 +320,12 @@ contract FraxUnifiedFarm_ERC20_V2 is FraxUnifiedFarmTemplate_V2 { avg_time_left = (time_left_p1 + time_left_p2) / 2; } midpoint_lock_multiplier = lockMultiplier(avg_time_left); - - // midpoint_lock_multiplier = lockMultiplier( - // ( - // (thisStake.ending_timestamp - accrue_start_time) + - // (thisStake.ending_timestamp - block.timestamp) - // ) / 2 - // ); } // Sanity check: make sure it never goes above the initial multiplier if (midpoint_lock_multiplier > thisStake.lock_multiplier) midpoint_lock_multiplier = thisStake.lock_multiplier; } - // // Calculate the combined weight for an account - // function calcCurCombinedWeight(address account) public override view - // returns ( - // uint256 old_combined_weight, - // uint256 new_vefxs_multiplier, - // uint256 new_combined_weight - // ) - // { - // // Get the old combined weight - // old_combined_weight = _combined_weights[account]; - - // // Get the veFXS multipliers - // // For the calculations, use the midpoint (analogous to midpoint Riemann sum) - // new_vefxs_multiplier = veFXSMultiplier(account); - - // uint256 midpoint_vefxs_multiplier; - // if ( - // (_locked_liquidity[account] == 0 && _combined_weights[account] == 0) || - // (new_vefxs_multiplier >= _vefxsMultiplierStored[account]) - // ) { - // // This is only called for the first stake to make sure the veFXS multiplier is not cut in half - // // Also used if the user increased or maintained their position - // midpoint_vefxs_multiplier = new_vefxs_multiplier; - // } - // else { - // // Handles natural decay with a non-increased veFXS position - // midpoint_vefxs_multiplier = (new_vefxs_multiplier + _vefxsMultiplierStored[account]) / 2; - // } - - // // Loop through the locked stakes, first by getting the liquidity * lock_multiplier portion - // new_combined_weight = 0; - // for (uint256 i; i < lockedStakes[account].length; i++) { - // LockedStake memory thisStake = lockedStakes[account][i]; - - // // Calculate the midpoint lock multiplier - // // uint256 midpoint_lock_multiplier = calcCurrLockMultiplier(account, i); - - // // Calculate the combined boost - // // uint256 liquidity = thisStake.liquidity; - // // uint256 combined_boosted_amount = thisStake.liquidity + ((thisStake.liquidity * (midpoint_lock_multiplier + midpoint_vefxs_multiplier)) / MULTIPLIER_PRECISION); - // new_combined_weight += ( - // thisStake.liquidity + ( - // ( - // thisStake.liquidity * (calcCurrLockMultiplier(account, i) + midpoint_vefxs_multiplier) - // ) / MULTIPLIER_PRECISION - // ) - // ); - // } - // } // Calculate the combined weight for an account function calcCurCombinedWeight(address account) public override view returns ( @@ -448,7 +386,7 @@ contract FraxUnifiedFarm_ERC20_V2 is FraxUnifiedFarmTemplate_V2 { return(lockedStakes[staker][locked_stake_index]); } - function getLockedStakeLiquidity(address staker, uint256 locked_stake_index) public view returns (uint256) { + function getLockedStakeLiquidity(address staker, uint256 locked_stake_index) external view returns (uint256) { return(lockedStakes[staker][locked_stake_index].liquidity); } @@ -492,13 +430,10 @@ contract FraxUnifiedFarm_ERC20_V2 is FraxUnifiedFarmTemplate_V2 { } // Add additional LPs to an existing locked stake - function lockAdditional(uint256 theArrayIndex, uint256 addl_liq) nonReentrant updateRewardAndBalanceMdf(msg.sender, true) public { + function lockAdditional(uint256 theArrayIndex, uint256 addl_liq) nonReentrant updateRewardAndBalanceMdf(msg.sender, true) external { // Get the stake by its index LockedStake memory thisStake = lockedStakes[msg.sender][theArrayIndex]; - // Calculate the new amount - // uint256 new_amt = thisStake.liquidity + addl_liq; - // Checks if (addl_liq <= 0) revert MustBePositive(); @@ -506,12 +441,6 @@ contract FraxUnifiedFarm_ERC20_V2 is FraxUnifiedFarmTemplate_V2 { TransferHelperV2.safeTransferFrom(address(stakingToken), msg.sender, address(this), addl_liq); // Update the stake - // lockedStakes[msg.sender][theArrayIndex] = LockedStake( - // thisStake.start_timestamp, - // (thisStake.liquidity + addl_liq), - // thisStake.ending_timestamp, - // thisStake.lock_multiplier - // ); _updateStake( msg.sender, theArrayIndex, @@ -527,7 +456,7 @@ contract FraxUnifiedFarm_ERC20_V2 is FraxUnifiedFarmTemplate_V2 { } // Extends the lock of an existing stake - function lockLonger(uint256 theArrayIndex, uint256 new_ending_ts) nonReentrant updateRewardAndBalanceMdf(msg.sender, true) public { + function lockLonger(uint256 theArrayIndex, uint256 new_ending_ts) nonReentrant updateRewardAndBalanceMdf(msg.sender, true) external { // Get the stake by its index LockedStake memory thisStake = lockedStakes[msg.sender][theArrayIndex]; @@ -549,12 +478,6 @@ contract FraxUnifiedFarm_ERC20_V2 is FraxUnifiedFarmTemplate_V2 { if (new_secs > lock_time_for_max_multiplier) revert TryingToLockForTooLong(); // Update the stake - // lockedStakes[msg.sender][theArrayIndex] = LockedStake( - // block.timestamp, - // thisStake.liquidity, - // new_ending_ts, - // lockMultiplier(new_secs) - // ); _updateStake( msg.sender, theArrayIndex, @@ -592,16 +515,7 @@ contract FraxUnifiedFarm_ERC20_V2 is FraxUnifiedFarmTemplate_V2 { // Varies per farm TransferHelperV2.safeTransferFrom(address(stakingToken), source_address, address(this), liquidity); - // Get the lock multiplier and create the new lockedStake - // uint256 lock_multiplier = lockMultiplier(secs); - // Create the locked stake - // lockedStakes[staker_address].push(LockedStake( - // start_timestamp, - // liquidity, - // block.timestamp + secs, - // lockMultiplier(secs) - // )); _createNewStake( staker_address, start_timestamp, @@ -615,7 +529,7 @@ contract FraxUnifiedFarm_ERC20_V2 is FraxUnifiedFarmTemplate_V2 { emit StakeLocked(staker_address, liquidity, secs, lockedStakes[staker_address].length, source_address); - return lockedStakes[staker_address].length; + return lockedStakes[staker_address].length - 1; } // ------ WITHDRAWING ------ @@ -635,8 +549,7 @@ contract FraxUnifiedFarm_ERC20_V2 is FraxUnifiedFarmTemplate_V2 { // Collect rewards first and then update the balances _getReward(staker_address, destination_address, true); - // Get the stake and its index - // (LockedStake memory thisStake, uint256 theArrayIndex) = _getStake(staker_address, lockedStake); + // Get the stake by its index LockedStake memory thisStake = lockedStakes[staker_address][theArrayIndex]; // require(block.timestamp >= thisStake.ending_timestamp || stakesUnlocked == true, "Stake is still locked!"); @@ -652,14 +565,6 @@ contract FraxUnifiedFarm_ERC20_V2 is FraxUnifiedFarmTemplate_V2 { // Should throw if insufficient balance TransferHelperV2.safeTransfer(address(stakingToken), destination_address, thisStake.liquidity); - // // Update liquidities - // _total_liquidity_locked -= thisStake.liquidity; - // _locked_liquidity[staker_address] -= thisStake.liquidity; - // { - // address the_proxy = getProxyFor(staker_address); - // if (the_proxy != address(0)) proxy_lp_balances[the_proxy] -= thisStake.liquidity; - // } - // Remove the stake from the array delete lockedStakes[staker_address][theArrayIndex]; @@ -682,36 +587,45 @@ contract FraxUnifiedFarm_ERC20_V2 is FraxUnifiedFarmTemplate_V2 { /* ========== LOCK TRANSFER & AUTHORIZATIONS - Approvals, Functions, Errors, & Events ========== */ // Approve `spender` to transfer `lockedStake` on behalf of `owner` + /// @notice Used to increase allowance when it is at zero + /// @dev separating this from the `increaseAllowance` function to avoid the allowance exploit function setAllowance(address spender, uint256 lockedStakeIndex, uint256 amount) external { - if(spenderAllowance[msg.sender][lockedStakeIndex][spender] >= 0) revert CannotBeZero(); + if(spenderAllowance[msg.sender][lockedStakeIndex][spender] > 0) revert CannotBeZero(); spenderAllowance[msg.sender][lockedStakeIndex][spender] = amount; emit Approval(msg.sender, spender, lockedStakeIndex, amount); } + /// @notice Used to increase allowance when it is not at zero + /// @dev separating this from the `setAllowance` function to avoid the allowance exploit function increaseAllowance(address spender, uint256 lockedStakeIndex, uint256 amount) external { if (spenderAllowance[msg.sender][lockedStakeIndex][spender] == 0) revert AllowanceIsZero(); spenderAllowance[msg.sender][lockedStakeIndex][spender] += amount; emit Approval(msg.sender, spender, lockedStakeIndex, spenderAllowance[msg.sender][lockedStakeIndex][spender]); } - // Revoke approval for a single lockedStake + /// @notice Revoke approval for a single lockedStake function removeAllowance(address spender, uint256 lockedStakeIndex) external { spenderAllowance[msg.sender][lockedStakeIndex][spender] = 0; emit Approval(msg.sender, spender, lockedStakeIndex, 0); } // Approve or revoke `spender` to transfer any/all locks on behalf of the owner + /// @notice Set's `spender` approval for all locks: true=approve, false=remove approval function setApprovalForAll(address spender, bool approved) external { spenderApprovalForAllLocks[msg.sender][spender] = approved; emit ApprovalForAll(msg.sender, spender, approved); } - // internal approval check and allowance manager - function isApproved(address staker, uint256 lockedStakeIndex, uint256 amount) public view returns (bool) { + /// @notice External getter function to check if a spender is approved for `amount` of a lockedStake + /// @param staker The address of the sender + /// @param spender The address of the spender + /// @param lockedStakeIndex The index of the locked stake + /// @param amount The amount to spend + function isApproved(address staker, address spender, uint256 lockedStakeIndex, uint256 amount) external view returns (bool) { // check if spender is approved for all `staker` locks - if (spenderApprovalForAllLocks[staker][msg.sender]) { + if (spenderApprovalForAllLocks[staker][spender]) { return true; - } else if (spenderAllowance[staker][lockedStakeIndex][msg.sender] >= amount) { + } else if (spenderAllowance[staker][lockedStakeIndex][spender] >= amount) { return true; } else { // for any other possibility, return false @@ -719,7 +633,14 @@ contract FraxUnifiedFarm_ERC20_V2 is FraxUnifiedFarmTemplate_V2 { } } + /// @notice Checks for sufficient allowance & spends it + /// @param staker The address of the sender + /// @param lockedStakeIndex The index of the locked stake + /// @param amount The amount to spend function _spendAllowance(address staker, uint256 lockedStakeIndex, uint256 amount) internal { + // if (spenderApprovalForAllLocks[staker][msg.sender]) { + // return; + // } if (spenderAllowance[staker][lockedStakeIndex][msg.sender] == amount) { spenderAllowance[staker][lockedStakeIndex][msg.sender] = 0; } else if (spenderAllowance[staker][lockedStakeIndex][msg.sender] > amount) { @@ -731,6 +652,13 @@ contract FraxUnifiedFarm_ERC20_V2 is FraxUnifiedFarmTemplate_V2 { // ------ TRANSFERRING LOCKED STAKES ------ + /// @notice Allows an approved spender to transfer assets in sender's lockedStake to another user + /// @param sender_address The address of the sender + /// @param receiver_address The address of the receiver + /// @param sender_lock_index The index of the sender's lockedStake + /// @param transfer_amount The amount to transfer + /// @param use_receiver_lock_index If true, the receiver wants the assets sent to an existing, valid lockedStake they control + /// @param receiver_lock_index The index of the receiver's lockedStake to add these assets to function transferLockedFrom( address sender_address, address receiver_address, @@ -739,11 +667,14 @@ contract FraxUnifiedFarm_ERC20_V2 is FraxUnifiedFarmTemplate_V2 { bool use_receiver_lock_index, uint256 receiver_lock_index ) external nonReentrant returns (uint256,uint256) { - // check approvals - if (!isApproved(sender_address, sender_lock_index, transfer_amount)) revert TransferLockNotAllowed(msg.sender, sender_lock_index); + // check approvals NOTE not needed as _spendAllowance does this also + // if (!isApproved(sender_address, sender_lock_index, transfer_amount)) revert TransferLockNotAllowed(msg.sender, sender_lock_index); - // adjust the allowance down - _spendAllowance(sender_address, sender_lock_index, transfer_amount); + /// if spender is not approved for all, spend allowance, otherwise, carry on + if(!spenderApprovalForAllLocks[sender_address][msg.sender]) { + // adjust the allowance down & performs checks + _spendAllowance(sender_address, sender_lock_index, transfer_amount); + } // do the transfer /// @dev the approval check is done in modifier, so to reach here caller is permitted, thus OK @@ -751,6 +682,12 @@ contract FraxUnifiedFarm_ERC20_V2 is FraxUnifiedFarmTemplate_V2 { return(_safeTransferLockedByLockIndex([sender_address, receiver_address], sender_lock_index, transfer_amount, use_receiver_lock_index, receiver_lock_index)); } + /// @notice Allows a staker to transfer assets in their lockedStake to another user + /// @param receiver_address The address of the receiver + /// @param sender_lock_index The index of the sender's lockedStake (previously used kek_id to look up this value) + /// @param transfer_amount The amount to transfer + /// @param use_receiver_lock_index If true, the receiver wants the assets sent to an existing, valid lockedStake they control + /// @param receiver_lock_index The index of the receiver's lockedStake to add these assets to function transferLocked( address receiver_address, uint256 sender_lock_index, @@ -763,8 +700,9 @@ contract FraxUnifiedFarm_ERC20_V2 is FraxUnifiedFarmTemplate_V2 { return(_safeTransferLockedByLockIndex([msg.sender, receiver_address], sender_lock_index, transfer_amount, use_receiver_lock_index, receiver_lock_index)); } + /// @notice The transfer logic that executes the transfer, utilizes beforeLockTransfer & onLockReceived to ensure that the receiver is able to prevent asset loss function _safeTransferLockedByLockIndex( - address[2] memory addrs, // [0]: sender_address, [1]: receiver_address. Reduces stack size + address[2] memory addrs, // [0]: sender_address, [1]: addrs[1]. Reduces stack size uint256 sender_lock_index, uint256 transfer_amount, bool use_receiver_lock_index, @@ -776,7 +714,7 @@ contract FraxUnifiedFarm_ERC20_V2 is FraxUnifiedFarmTemplate_V2 { require( ILockReceiverV2(addrs[0]).beforeLockTransfer(addrs[0], addrs[1], sender_lock_index, "") == - ILockReceiverV2.beforeLockTransfer.selector // 00x4fb07105 <--> bytes4(keccak256("beforeLockTransfer(address,address,bytes32,bytes)")) + ILockReceiverV2.beforeLockTransfer.selector ); } @@ -784,16 +722,14 @@ contract FraxUnifiedFarm_ERC20_V2 is FraxUnifiedFarmTemplate_V2 { LockedStake memory senderStake = getLockedStake(addrs[0], sender_lock_index); // perform checks - { - if (addrs[1] == address(0) || addrs[1] == addrs[0]) { - revert InvalidReceiver(); - } - if (block.timestamp >= senderStake.ending_timestamp || stakesUnlocked == true) { - revert StakesUnlocked(); - } - if (transfer_amount > senderStake.liquidity || transfer_amount <= 0) { - revert InvalidAmount(); - } + if (addrs[1] == address(0) || addrs[1] == addrs[0]) { + revert InvalidReceiver(); + } + if (block.timestamp >= senderStake.ending_timestamp || stakesUnlocked == true) { + revert StakesUnlocked(); + } + if (transfer_amount > senderStake.liquidity || transfer_amount <= 0) { + revert InvalidAmount(); } // Update the liquidities @@ -801,11 +737,11 @@ contract FraxUnifiedFarm_ERC20_V2 is FraxUnifiedFarmTemplate_V2 { _locked_liquidity[addrs[1]] += transfer_amount; if (getProxyFor(addrs[0]) != address(0)) { - proxy_lp_balances[getProxyFor(addrs[0])] -= transfer_amount; + proxy_lp_balances[getProxyFor(addrs[0])] -= transfer_amount; } if (getProxyFor(addrs[1]) != address(0)) { - proxy_lp_balances[getProxyFor(addrs[1])] += transfer_amount; + proxy_lp_balances[getProxyFor(addrs[1])] += transfer_amount; } // if sent amount was all the liquidity, delete the stake, otherwise decrease the balance @@ -815,56 +751,46 @@ contract FraxUnifiedFarm_ERC20_V2 is FraxUnifiedFarmTemplate_V2 { lockedStakes[addrs[0]][sender_lock_index].liquidity -= transfer_amount; } - // Get the stake and its index - { - // Scope here due to stack-too-deep + /** if use_receiver_lock_index is true & + * & the index is valid + * & has liquidity + * & is still locked, update the stake & ending timestamp (longer of the two) + * else, create a new lockedStake + * note using nested if checks to reduce gas costs slightly + */ + if (use_receiver_lock_index == true) { + // Get the stake and its index LockedStake memory receiverStake = getLockedStake(addrs[1], receiver_lock_index); - /** if use_receiver_lock_index is true & - * & the index is valid - * & has liquidity - * & is still locked, update the stake & ending timestamp (longer of the two) - * else, create a new lockedStake - * note using nested if checks to reduce gas costs slightly - */ - if (use_receiver_lock_index == true) { - if (receiver_lock_index < lockedStakes[addrs[1]].length ) { - if (receiverStake.liquidity > 0) { - if (receiverStake.ending_timestamp > block.timestamp) { - // Update the existing staker's stake liquidity - lockedStakes[addrs[1]][receiver_lock_index].liquidity += transfer_amount; - // check & update ending timestamp to whichever is farthest out - if (receiverStake.ending_timestamp < senderStake.ending_timestamp) { - // update the lock expiration to the later timestamp - lockedStakes[addrs[1]][receiver_lock_index].ending_timestamp = senderStake.ending_timestamp; - // update the lock multiplier since we are effectively extending the lock - lockedStakes[addrs[1]][receiver_lock_index].lock_multiplier = lockMultiplier( - senderStake.ending_timestamp - block.timestamp - ); - } + if (receiver_lock_index < lockedStakes[addrs[1]].length ) { + if (receiverStake.liquidity > 0) { + if (receiverStake.ending_timestamp > block.timestamp) { + // Update the existing staker's stake liquidity + lockedStakes[addrs[1]][receiver_lock_index].liquidity += transfer_amount; + // check & update ending timestamp to whichever is farthest out + if (receiverStake.ending_timestamp < senderStake.ending_timestamp) { + // update the lock expiration to the later timestamp + lockedStakes[addrs[1]][receiver_lock_index].ending_timestamp = senderStake.ending_timestamp; + // update the lock multiplier since we are effectively extending the lock + lockedStakes[addrs[1]][receiver_lock_index].lock_multiplier = lockMultiplier( + senderStake.ending_timestamp - block.timestamp + ); } } } - } else { - // create the new lockedStake - // lockedStakes[addrs[1]].push(LockedStake( - // senderStake.start_timestamp, - // transfer_amount, - // senderStake.ending_timestamp, - // senderStake.lock_multiplier - // )); - _createNewStake( - addrs[1], - senderStake.start_timestamp, - transfer_amount, - senderStake.ending_timestamp, - senderStake.lock_multiplier - ); - - // update the return value of the locked index - /// todo could also just use the length of the array in all 3 situations below - which is more gas efficient? - receiver_lock_index = lockedStakes[addrs[1]].length; } + } else { + // create the new lockedStake + _createNewStake( + addrs[1], + senderStake.start_timestamp, + transfer_amount, + senderStake.ending_timestamp, + senderStake.lock_multiplier + ); + + // update the return value of the locked index + receiver_lock_index = lockedStakes[addrs[1]].length - 1; } // Need to call again to make sure everything is correct diff --git a/src/hardhat/contracts/Staking/FraxUnifiedFarm_ERC20_V2_BEFORE_MANUAL_MERGE.sol.old b/src/hardhat/contracts/Staking/FraxUnifiedFarm_ERC20_V2_BEFORE_MANUAL_MERGE.sol.old new file mode 100644 index 00000000..69d69490 --- /dev/null +++ b/src/hardhat/contracts/Staking/FraxUnifiedFarm_ERC20_V2_BEFORE_MANUAL_MERGE.sol.old @@ -0,0 +1,908 @@ +// SPDX-License-Identifier: GPL-2.0-or-later +pragma solidity ^0.8.17; + +// ==================================================================== +// | ______ _______ | +// | / _____________ __ __ / ____(_____ ____ _____ ________ | +// | / /_ / ___/ __ `| |/_/ / /_ / / __ \/ __ `/ __ \/ ___/ _ \ | +// | / __/ / / / /_/ _> < / __/ / / / / / /_/ / / / / /__/ __/ | +// | /_/ /_/ \__,_/_/|_| /_/ /_/_/ /_/\__,_/_/ /_/\___/\___/ | +// | | +// ==================================================================== +// ===================== FraxUnifiedFarm_ERC20_V2 ===================== +// ==================================================================== +// For ERC20 Tokens +// Uses FraxUnifiedFarmTemplate.sol + +/// @dev Testing for Lock Transferring performed in isolated repository: https://github.com/ZrowGz/frax-transfers.git + +import "./FraxUnifiedFarmTemplate_V2.sol"; +import "./ILockReceiverV2.sol"; + +// -------------------- VARIES -------------------- + +// Convex wrappers +import "../Curve/ICurvefrxETHETHPool.sol"; +import "../Misc_AMOs/convex/IConvexStakingWrapperFrax.sol"; +import "../Misc_AMOs/convex/IDepositToken.sol"; +import "../Misc_AMOs/curve/I2pool.sol"; +import "../Misc_AMOs/curve/I2poolToken.sol"; + +// Fraxswap +// import '../Fraxswap/core/interfaces/IFraxswapPair.sol'; + +// G-UNI +// import "../Misc_AMOs/gelato/IGUniPool.sol"; + +// mStable +// import '../Misc_AMOs/mstable/IFeederPool.sol'; + +// StakeDAO sdETH-FraxPut +// import '../Misc_AMOs/stakedao/IOpynPerpVault.sol'; + +// StakeDAO Vault +// import '../Misc_AMOs/stakedao/IStakeDaoVault.sol'; + +// Uniswap V2 +// import '../Uniswap/Interfaces/IUniswapV2Pair.sol'; + +// Vesper +// import '../Misc_AMOs/vesper/IVPool.sol'; + +// ------------------------------------------------ + +contract FraxUnifiedFarm_ERC20_V2 is FraxUnifiedFarmTemplate_V2 { + + // use custom errors to reduce contract size + error TransferLockNotAllowed(address,uint256); // spender, locked_stake_index + error StakesUnlocked(); + error InvalidReceiver(); + error InvalidAmount(); + error InsufficientAllowance(); + error InvalidChainlinkPrice(); + error WithdrawalsPaused(); + error StakingPaused(); + error MinimumStakeTimeNotMet(); + error TryingToLockForTooLong(); + error CannotShortenLockTime(); + error MustBeInTheFuture(); + error MustBePositive(); + error StakerNotFound(); + error CannotBeZero(); + error AllowanceIsZero(); + + /* ========== STATE VARIABLES ========== */ + + // -------------------- COMMON -------------------- + bool internal frax_is_token0; + + // -------------------- VARIES -------------------- + + // Convex stkcvxFPIFRAX, stkcvxFRAXBP, etc + IConvexStakingWrapperFrax public stakingToken; + I2poolToken public curveToken; + // I2pool public curvePool; + /// @dev uncomment this one for convex frxEth, use the I2pool version for others + ICurvefrxETHETHPool public curvePool; + + // Fraxswap + // IFraxswapPair public stakingToken; + + // G-UNI + // IGUniPool public stakingToken; + + // mStable + // IFeederPool public stakingToken; + + // sdETH-FraxPut Vault + // IOpynPerpVault public stakingToken; + + // StakeDAO Vault + // IStakeDaoVault public stakingToken; + + // Uniswap V2 + // IUniswapV2Pair public stakingToken; + + // Vesper + // IVPool public stakingToken; + + // ------------------------------------------------ + + // Stake tracking + mapping(address => LockedStake[]) public lockedStakes; + /* ========== STRUCTS ========== */ + + // Struct for the stake + struct LockedStake { + uint256 start_timestamp; + uint256 liquidity; + uint256 ending_timestamp; + uint256 lock_multiplier; // 6 decimals of precision. 1x = 1000000 + } + + + /* ========== APPROVALS & ALLOWANCE FOR LOCK TRANSFERS ========== */ + // staker => locked_stake_index => spender => uint256 (amount of lock that spender is approved for) + mapping(address => mapping(uint256 => mapping(address => uint256))) public spenderAllowance; + // staker => spender => bool (true if approved) + mapping(address => mapping(address => bool)) public spenderApprovalForAllLocks; + + + /* ========== CONSTRUCTOR ========== */ + + constructor ( + address _owner, + address[] memory _rewardTokens, + address[] memory _rewardManagers, + uint256[] memory _rewardRatesManual, + address[] memory _gaugeControllers, + address[] memory _rewardDistributors, + address _stakingToken + ) + FraxUnifiedFarmTemplate_V2(_owner, _rewardTokens, _rewardManagers, _rewardRatesManual, _gaugeControllers, _rewardDistributors) + { + + // -------------------- VARIES (USE CHILD FOR LOGIC) -------------------- + + // Fraxswap + // stakingToken = IFraxswapPair(_stakingToken); + // address token0 = stakingToken.token0(); + // frax_is_token0 = (token0 == frax_address); + + // G-UNI + // stakingToken = IGUniPool(_stakingToken); + // address token0 = address(stakingToken.token0()); + // frax_is_token0 = (token0 == frax_address); + + // mStable + // stakingToken = IFeederPool(_stakingToken); + + // StakeDAO sdETH-FraxPut Vault + // stakingToken = IOpynPerpVault(_stakingToken); + + // StakeDAO Vault + // stakingToken = IStakeDaoVault(_stakingToken); + + // Uniswap V2 + // stakingToken = IUniswapV2Pair(_stakingToken); + // address token0 = stakingToken.token0(); + // if (token0 == frax_address) frax_is_token0 = true; + // else frax_is_token0 = false; + + // Vesper + // stakingToken = IVPool(_stakingToken); + } + + /* ============= VIEWS ============= */ + + // ------ FRAX RELATED ------ + + function fraxPerLPToken() public virtual view override returns (uint256) { + // Get the amount of FRAX 'inside' of the lp tokens + uint256 frax_per_lp_token; + + // Convex stkcvxFPIFRAX and stkcvxFRAXBP only + // ============================================ + // { + // // Half of the LP is FRAXBP + // // Using 0.5 * virtual price for gas savings + // frax_per_lp_token = curvePool.get_virtual_price() / 2; + // } + + // Convex Stable/FRAXBP + // ============================================ + // { + // // Half of the LP is FRAXBP. Half of that should be FRAX. + // // Using 0.25 * virtual price for gas savings + // frax_per_lp_token = curvePool.get_virtual_price() / 4; + // } + + // Convex Volatile/FRAXBP + // ============================================ + // { + // // Half of the LP is FRAXBP. Half of that should be FRAX. + // // Using 0.25 * lp price for gas savings + // frax_per_lp_token = curvePool.lp_price() / 4; + // } + + // Fraxswap + // ============================================ + // { + // uint256 total_frax_reserves; + // (uint256 _reserve0, uint256 _reserve1, , ,) = (stakingToken.getReserveAfterTwamm(block.timestamp)); + // if (frax_is_token0) total_frax_reserves = _reserve0; + // else total_frax_reserves = _reserve1; + + // frax_per_lp_token = (total_frax_reserves * 1e18) / stakingToken.totalSupply(); + // } + + // G-UNI + // ============================================ + // { + // (uint256 reserve0, uint256 reserve1) = stakingToken.getUnderlyingBalances(); + // uint256 total_frax_reserves = frax_is_token0 ? reserve0 : reserve1; + + // frax_per_lp_token = (total_frax_reserves * 1e18) / stakingToken.totalSupply(); + // } + + // mStable + // ============================================ + // { + // uint256 total_frax_reserves; + // (, IFeederPool.BassetData memory vaultData) = (stakingToken.getBasset(frax_address)); + // total_frax_reserves = uint256(vaultData.vaultBalance); + // frax_per_lp_token = (total_frax_reserves * 1e18) / stakingToken.totalSupply(); + // } + + // StakeDAO sdETH-FraxPut Vault + // ============================================ + // { + // uint256 frax3crv_held = stakingToken.totalUnderlyingControlled(); + + // // Optimistically assume 50/50 FRAX/3CRV ratio in the metapool to save gas + // frax_per_lp_token = ((frax3crv_held * 1e18) / stakingToken.totalSupply()) / 2; + // } + + // StakeDAO Vault + // ============================================ + // { + // uint256 frax3crv_held = stakingToken.balance(); + + // // Optimistically assume 50/50 FRAX/3CRV ratio in the metapool to save gas + // frax_per_lp_token = ((frax3crv_held * 1e18) / stakingToken.totalSupply()) / 2; + // } + + // Uniswap V2 + // ============================================ + // { + // uint256 total_frax_reserves; + // (uint256 reserve0, uint256 reserve1, ) = (stakingToken.getReserves()); + // if (frax_is_token0) total_frax_reserves = reserve0; + // else total_frax_reserves = reserve1; + + // frax_per_lp_token = (total_frax_reserves * 1e18) / stakingToken.totalSupply(); + // } + + // Vesper + // ============================================ + // frax_per_lp_token = stakingToken.pricePerShare(); + + return frax_per_lp_token; + } + + // ------ LIQUIDITY AND WEIGHTS ------ + + function calcCurrLockMultiplier(address account, uint256 stake_idx) public view returns (uint256 midpoint_lock_multiplier) { + // Get the stake + LockedStake memory thisStake = lockedStakes[account][stake_idx]; + + // Handles corner case where user never claims for a new stake + // Don't want the multiplier going above the max + uint256 accrue_start_time; + if (lastRewardClaimTime[account] < thisStake.start_timestamp) { + accrue_start_time = thisStake.start_timestamp; + } + else { + accrue_start_time = lastRewardClaimTime[account]; + } + + // If the lock is expired + if (thisStake.ending_timestamp <= block.timestamp) { + // If the lock expired in the time since the last claim, the weight needs to be proportionately averaged this time + if (lastRewardClaimTime[account] < thisStake.ending_timestamp){ + uint256 time_before_expiry = thisStake.ending_timestamp - accrue_start_time; + uint256 time_after_expiry = block.timestamp - thisStake.ending_timestamp; + + // Average the pre-expiry lock multiplier + uint256 pre_expiry_avg_multiplier = lockMultiplier(time_before_expiry / 2); + + // Get the weighted-average lock_multiplier + // uint256 numerator = (pre_expiry_avg_multiplier * time_before_expiry) + (MULTIPLIER_PRECISION * time_after_expiry); + uint256 numerator = (pre_expiry_avg_multiplier * time_before_expiry) + (0 * time_after_expiry); + midpoint_lock_multiplier = numerator / (time_before_expiry + time_after_expiry); + // midpoint_lock_multiplier = ( + // ( + // (lockMultiplier(time_before_expiry / 2) * time_before_expiry) + + // (0 * time_after_expiry) + // ) / (time_before_expiry + time_after_expiry) + // ); + } + /// already initialized to zero + // else { + // // Otherwise, it needs to just be 1x + // // midpoint_lock_multiplier = MULTIPLIER_PRECISION; + + // // Otherwise, it needs to just be 0x + // midpoint_lock_multiplier = 0; + // } + } + // If the lock is not expired + else { + // Decay the lock multiplier based on the time left + uint256 avg_time_left; + { + uint256 time_left_p1 = thisStake.ending_timestamp - accrue_start_time; + uint256 time_left_p2 = thisStake.ending_timestamp - block.timestamp; + avg_time_left = (time_left_p1 + time_left_p2) / 2; + } + midpoint_lock_multiplier = lockMultiplier(avg_time_left); + + // midpoint_lock_multiplier = lockMultiplier( + // ( + // (thisStake.ending_timestamp - accrue_start_time) + + // (thisStake.ending_timestamp - block.timestamp) + // ) / 2 + // ); + } + + // Sanity check: make sure it never goes above the initial multiplier + if (midpoint_lock_multiplier > thisStake.lock_multiplier) midpoint_lock_multiplier = thisStake.lock_multiplier; + } + + // // Calculate the combined weight for an account + // function calcCurCombinedWeight(address account) public override view + // returns ( + // uint256 old_combined_weight, + // uint256 new_vefxs_multiplier, + // uint256 new_combined_weight + // ) + // { + // // Get the old combined weight + // old_combined_weight = _combined_weights[account]; + + // // Get the veFXS multipliers + // // For the calculations, use the midpoint (analogous to midpoint Riemann sum) + // new_vefxs_multiplier = veFXSMultiplier(account); + + // uint256 midpoint_vefxs_multiplier; + // if ( + // (_locked_liquidity[account] == 0 && _combined_weights[account] == 0) || + // (new_vefxs_multiplier >= _vefxsMultiplierStored[account]) + // ) { + // // This is only called for the first stake to make sure the veFXS multiplier is not cut in half + // // Also used if the user increased or maintained their position + // midpoint_vefxs_multiplier = new_vefxs_multiplier; + // } + // else { + // // Handles natural decay with a non-increased veFXS position + // midpoint_vefxs_multiplier = (new_vefxs_multiplier + _vefxsMultiplierStored[account]) / 2; + // } + + // // Loop through the locked stakes, first by getting the liquidity * lock_multiplier portion + // new_combined_weight = 0; + // for (uint256 i; i < lockedStakes[account].length; i++) { + // LockedStake memory thisStake = lockedStakes[account][i]; + + // // Calculate the midpoint lock multiplier + // // uint256 midpoint_lock_multiplier = calcCurrLockMultiplier(account, i); + + // // Calculate the combined boost + // // uint256 liquidity = thisStake.liquidity; + // // uint256 combined_boosted_amount = thisStake.liquidity + ((thisStake.liquidity * (midpoint_lock_multiplier + midpoint_vefxs_multiplier)) / MULTIPLIER_PRECISION); + // new_combined_weight += ( + // thisStake.liquidity + ( + // ( + // thisStake.liquidity * (calcCurrLockMultiplier(account, i) + midpoint_vefxs_multiplier) + // ) / MULTIPLIER_PRECISION + // ) + // ); + // } + // } + // Calculate the combined weight for an account + function calcCurCombinedWeight(address account) public override view + returns ( + uint256 old_combined_weight, + uint256 new_vefxs_multiplier, + uint256 new_combined_weight + ) + { + // Get the old combined weight + old_combined_weight = _combined_weights[account]; + + // Get the veFXS multipliers + // For the calculations, use the midpoint (analogous to midpoint Riemann sum) + new_vefxs_multiplier = veFXSMultiplier(account); + + uint256 midpoint_vefxs_multiplier; + if ( + (_locked_liquidity[account] == 0 && _combined_weights[account] == 0) || + (new_vefxs_multiplier >= _vefxsMultiplierStored[account]) + ) { + // This is only called for the first stake to make sure the veFXS multiplier is not cut in half + // Also used if the user increased or maintained their position + midpoint_vefxs_multiplier = new_vefxs_multiplier; + } + else { + // Handles natural decay with a non-increased veFXS position + midpoint_vefxs_multiplier = (new_vefxs_multiplier + _vefxsMultiplierStored[account]) / 2; + } + + // Loop through the locked stakes, first by getting the liquidity * lock_multiplier portion + // new_combined_weight = 0; + for (uint256 i; i < lockedStakes[account].length; i++) { + LockedStake memory thisStake = lockedStakes[account][i]; + + // Calculate the midpoint lock multiplier + uint256 midpoint_lock_multiplier = calcCurrLockMultiplier(account, i); + + // Calculate the combined boost + uint256 liquidity = thisStake.liquidity; + uint256 combined_boosted_amount = liquidity + ((liquidity * (midpoint_lock_multiplier + midpoint_vefxs_multiplier)) / MULTIPLIER_PRECISION); + new_combined_weight += combined_boosted_amount; + } + } + + // ------ LOCK RELATED ------ + + // All the locked stakes for a given account + function lockedStakesOf(address account) external view returns (LockedStake[] memory) { + return lockedStakes[account]; + } + + // Returns the length of the locked stakes for a given account + function lockedStakesOfLength(address account) external view returns (uint256) { + return lockedStakes[account].length; + } + + function getLockedStake(address staker, uint256 locked_stake_index) public view returns (LockedStake memory locked_stake) { + return(lockedStakes[staker][locked_stake_index]); + } + + function getLockedStakeLiquidity(address staker, uint256 locked_stake_index) public view returns (uint256) { + return(lockedStakes[staker][locked_stake_index].liquidity); + } + + /* =============== MUTATIVE FUNCTIONS =============== */ + + // ------ STAKING ------ + + function _updateStake(address staker, uint256 index, uint256 start_timestamp, uint256 liquidity, uint256 ending_timestamp, uint256 lock_multiplier) internal { + lockedStakes[staker][index] = LockedStake(start_timestamp, liquidity, ending_timestamp, lock_multiplier); + } + + function _createNewStake(address staker, uint256 start_timestamp, uint256 liquidity, uint256 ending_timestamp, uint256 lock_multiplier) internal { + lockedStakes[staker].push(LockedStake(start_timestamp, liquidity, ending_timestamp, lock_multiplier)); + } + + function _updateLiqAmts(address staker_address, uint256 amt, bool is_add) internal { + // Get the proxy address + address the_proxy = staker_designated_proxies[staker_address]; + + if (is_add) { + // Update total liquidities + _total_liquidity_locked += amt; + _locked_liquidity[staker_address] += amt; + + // Update the proxy + if (staker_designated_proxies[staker_address] != address(0)) { + proxy_lp_balances[the_proxy] += amt; + } + } + else { + // Update total liquidities + _total_liquidity_locked -= amt; + _locked_liquidity[staker_address] -= amt; + + // Update the proxy + if (the_proxy != address(0)) proxy_lp_balances[the_proxy] -= amt; + } + + // Need to call to update the combined weights + updateRewardAndBalance(staker_address, false); + } + + // Add additional LPs to an existing locked stake + function lockAdditional(uint256 theArrayIndex, uint256 addl_liq) nonReentrant updateRewardAndBalanceMdf(msg.sender, true) public { + // Get the stake by its index + LockedStake memory thisStake = lockedStakes[msg.sender][theArrayIndex]; + + // Calculate the new amount + // uint256 new_amt = thisStake.liquidity + addl_liq; + + // Checks + if (addl_liq <= 0) revert MustBePositive(); + + // Pull the tokens from the sender + TransferHelperV2.safeTransferFrom(address(stakingToken), msg.sender, address(this), addl_liq); + + // Update the stake + // lockedStakes[msg.sender][theArrayIndex] = LockedStake( + // thisStake.start_timestamp, + // (thisStake.liquidity + addl_liq), + // thisStake.ending_timestamp, + // thisStake.lock_multiplier + // ); + _updateStake( + msg.sender, + theArrayIndex, + thisStake.start_timestamp, + (thisStake.liquidity + addl_liq), + thisStake.ending_timestamp, + thisStake.lock_multiplier + ); + // Update liquidities + _updateLiqAmts(msg.sender, addl_liq, true); + + emit LockedAdditional(msg.sender, theArrayIndex, addl_liq); + } + + // Extends the lock of an existing stake + function lockLonger(uint256 theArrayIndex, uint256 new_ending_ts) nonReentrant updateRewardAndBalanceMdf(msg.sender, true) public { + // Get the stake by its index + LockedStake memory thisStake = lockedStakes[msg.sender][theArrayIndex]; + + // Check + // require(new_ending_ts > block.timestamp, "Must be in the future"); + if (new_ending_ts <= block.timestamp) revert MustBeInTheFuture(); + + // Calculate some times + //uint256 time_left = (thisStake.ending_timestamp > block.timestamp) ? thisStake.ending_timestamp - block.timestamp : 0; + uint256 new_secs = new_ending_ts - block.timestamp; + + // Checks + // require(time_left > 0, "Already expired"); + if (new_secs <= ( + (thisStake.ending_timestamp > block.timestamp) ? + thisStake.ending_timestamp - block.timestamp : 0 + )) revert CannotShortenLockTime(); + if (new_secs < lock_time_min) revert MinimumStakeTimeNotMet(); + if (new_secs > lock_time_for_max_multiplier) revert TryingToLockForTooLong(); + + // Update the stake + // lockedStakes[msg.sender][theArrayIndex] = LockedStake( + // block.timestamp, + // thisStake.liquidity, + // new_ending_ts, + // lockMultiplier(new_secs) + // ); + _updateStake( + msg.sender, + theArrayIndex, + block.timestamp, + thisStake.liquidity, + new_ending_ts, + lockMultiplier(new_secs) + ); + + // Need to call to update the combined weights + updateRewardAndBalance(msg.sender, false); + + emit LockedLonger(msg.sender, theArrayIndex, new_secs, block.timestamp, new_ending_ts); + } + + // Two different stake functions are needed because of delegateCall and msg.sender issues (important for proxies) + function stakeLocked(uint256 liquidity, uint256 secs) nonReentrant external returns (uint256) { + return _stakeLocked(msg.sender, msg.sender, liquidity, secs, block.timestamp); + } + + // If this were not internal, and source_address had an infinite approve, this could be exploitable + // (pull funds from source_address and stake for an arbitrary staker_address) + function _stakeLocked( + address staker_address, + address source_address, + uint256 liquidity, + uint256 secs, + uint256 start_timestamp + ) internal updateRewardAndBalanceMdf(staker_address, true) returns (uint256) { + if (stakingPaused) revert StakingPaused(); + if (secs < lock_time_min) revert MinimumStakeTimeNotMet(); + if (secs > lock_time_for_max_multiplier) revert TryingToLockForTooLong(); + + // Pull in the required token(s) + // Varies per farm + TransferHelperV2.safeTransferFrom(address(stakingToken), source_address, address(this), liquidity); + + // Get the lock multiplier and create the new lockedStake + // uint256 lock_multiplier = lockMultiplier(secs); + + // Create the locked stake + // lockedStakes[staker_address].push(LockedStake( + // start_timestamp, + // liquidity, + // block.timestamp + secs, + // lockMultiplier(secs) + // )); + _createNewStake( + staker_address, + start_timestamp, + liquidity, + block.timestamp + secs, + lockMultiplier(secs) + ); + + // Update liquidities + _updateLiqAmts(staker_address, liquidity, true); + + emit StakeLocked(staker_address, liquidity, secs, lockedStakes[staker_address].length, source_address); + + return lockedStakes[staker_address].length; + } + + // ------ WITHDRAWING ------ + + // Two different withdrawLocked functions are needed because of delegateCall and msg.sender issues (important for proxies) + function withdrawLocked(uint256 theArrayIndex, address destination_address) nonReentrant external returns (uint256) { + if (withdrawalsPaused == true) revert WithdrawalsPaused(); + return _withdrawLocked(msg.sender, destination_address, theArrayIndex); + } + + // No withdrawer == msg.sender check needed since this is only internally callable and the checks are done in the wrapper + function _withdrawLocked( + address staker_address, + address destination_address, + uint256 theArrayIndex + ) internal returns (uint256) { + // Collect rewards first and then update the balances + _getReward(staker_address, destination_address, true); + + // Get the stake and its index + // (LockedStake memory thisStake, uint256 theArrayIndex) = _getStake(staker_address, lockedStake); + LockedStake memory thisStake = lockedStakes[staker_address][theArrayIndex]; + + // require(block.timestamp >= thisStake.ending_timestamp || stakesUnlocked == true, "Stake is still locked!"); + // the stake must still be locked to transfer + if (block.timestamp >= thisStake.ending_timestamp || stakesUnlocked == true) { + revert StakesUnlocked(); + } + // uint256 liquidity = thisStake.liquidity; + + if (thisStake.liquidity > 0) { + + // Give the tokens to the destination_address + // Should throw if insufficient balance + TransferHelperV2.safeTransfer(address(stakingToken), destination_address, thisStake.liquidity); + + // // Update liquidities + // _total_liquidity_locked -= thisStake.liquidity; + // _locked_liquidity[staker_address] -= thisStake.liquidity; + // { + // address the_proxy = getProxyFor(staker_address); + // if (the_proxy != address(0)) proxy_lp_balances[the_proxy] -= thisStake.liquidity; + // } + + // Remove the stake from the array + delete lockedStakes[staker_address][theArrayIndex]; + + // // Need to call again to make sure everything is correct + // updateRewardAndBalance(staker_address, false); + + // Update liquidities + _updateLiqAmts(staker_address, thisStake.liquidity, false); + + emit WithdrawLocked(staker_address, thisStake.liquidity, theArrayIndex, destination_address); + } + + return thisStake.liquidity; + } + + function _getRewardExtraLogic(address rewardee, address destination_address) internal override { + // Do nothing + } + + /* ========== LOCK TRANSFER & AUTHORIZATIONS - Approvals, Functions, Errors, & Events ========== */ + + // Approve `spender` to transfer `lockedStake` on behalf of `owner` + function setAllowance(address spender, uint256 lockedStakeIndex, uint256 amount) external { + if(spenderAllowance[msg.sender][lockedStakeIndex][spender] >= 0) revert CannotBeZero(); + spenderAllowance[msg.sender][lockedStakeIndex][spender] = amount; + emit Approval(msg.sender, spender, lockedStakeIndex, amount); + } + + function increaseAllowance(address spender, uint256 lockedStakeIndex, uint256 amount) external { + if (spenderAllowance[msg.sender][lockedStakeIndex][spender] == 0) revert AllowanceIsZero(); + spenderAllowance[msg.sender][lockedStakeIndex][spender] += amount; + emit Approval(msg.sender, spender, lockedStakeIndex, spenderAllowance[msg.sender][lockedStakeIndex][spender]); + } + + // Revoke approval for a single lockedStake + function removeAllowance(address spender, uint256 lockedStakeIndex) external { + spenderAllowance[msg.sender][lockedStakeIndex][spender] = 0; + emit Approval(msg.sender, spender, lockedStakeIndex, 0); + } + + // Approve or revoke `spender` to transfer any/all locks on behalf of the owner + function setApprovalForAll(address spender, bool approved) external { + spenderApprovalForAllLocks[msg.sender][spender] = approved; + emit ApprovalForAll(msg.sender, spender, approved); + } + + // internal approval check and allowance manager + function isApproved(address staker, uint256 lockedStakeIndex, uint256 amount) public view returns (bool) { + // check if spender is approved for all `staker` locks + if (spenderApprovalForAllLocks[staker][msg.sender]) { + return true; + } else if (spenderAllowance[staker][lockedStakeIndex][msg.sender] >= amount) { + return true; + } else { + // for any other possibility, return false + return false; + } + } + + function _spendAllowance(address staker, uint256 lockedStakeIndex, uint256 amount) internal { + if (spenderAllowance[staker][lockedStakeIndex][msg.sender] == amount) { + spenderAllowance[staker][lockedStakeIndex][msg.sender] = 0; + } else if (spenderAllowance[staker][lockedStakeIndex][msg.sender] > amount) { + spenderAllowance[staker][lockedStakeIndex][msg.sender] -= amount; + } else { + revert InsufficientAllowance(); + } + } + + // ------ TRANSFERRING LOCKED STAKES ------ + + function transferLockedFrom( + address sender_address, + address receiver_address, + uint256 sender_lock_index, + uint256 transfer_amount, + bool use_receiver_lock_index, + uint256 receiver_lock_index + ) external nonReentrant returns (uint256,uint256) { + // check approvals + if (!isApproved(sender_address, sender_lock_index, transfer_amount)) revert TransferLockNotAllowed(msg.sender, sender_lock_index); + + // adjust the allowance down + _spendAllowance(sender_address, sender_lock_index, transfer_amount); + + // do the transfer + /// @dev the approval check is done in modifier, so to reach here caller is permitted, thus OK + // to supply both staker & receiver here (no msg.sender) + return(_safeTransferLockedByLockIndex([sender_address, receiver_address], sender_lock_index, transfer_amount, use_receiver_lock_index, receiver_lock_index)); + } + + function transferLocked( + address receiver_address, + uint256 sender_lock_index, + uint256 transfer_amount, + bool use_receiver_lock_index, + uint256 receiver_lock_index + ) external nonReentrant returns (uint256,uint256) { + // do the transfer + /// @dev approval/owner check not needed here as msg.sender is the staker + return(_safeTransferLockedByLockIndex([msg.sender, receiver_address], sender_lock_index, transfer_amount, use_receiver_lock_index, receiver_lock_index)); + } + + function _safeTransferLockedByLockIndex( + address[2] memory addrs, // [0]: sender_address, [1]: receiver_address. Reduces stack size + uint256 sender_lock_index, + uint256 transfer_amount, + bool use_receiver_lock_index, + uint256 receiver_lock_index + ) internal updateRewardAndBalanceMdf(addrs[0], true) updateRewardAndBalanceMdf(addrs[1], true) returns (uint256,uint256) { + + // on transfer, call addrs[0] to verify sending is ok + if (addrs[0].code.length > 0) { + require( + ILockReceiverV2(addrs[0]).beforeLockTransfer(addrs[0], addrs[1], sender_lock_index, "") + == + ILockReceiverV2.beforeLockTransfer.selector // 00x4fb07105 <--> bytes4(keccak256("beforeLockTransfer(address,address,bytes32,bytes)")) + ); + } + + // Get the stake and its index + LockedStake memory senderStake = getLockedStake(addrs[0], sender_lock_index); + + // perform checks + { + if (addrs[1] == address(0) || addrs[1] == addrs[0]) { + revert InvalidReceiver(); + } + if (block.timestamp >= senderStake.ending_timestamp || stakesUnlocked == true) { + revert StakesUnlocked(); + } + if (transfer_amount > senderStake.liquidity || transfer_amount <= 0) { + revert InvalidAmount(); + } + } + + // Update the liquidities + _locked_liquidity[addrs[0]] -= transfer_amount; + _locked_liquidity[addrs[1]] += transfer_amount; + + if (getProxyFor(addrs[0]) != address(0)) { + proxy_lp_balances[getProxyFor(addrs[0])] -= transfer_amount; + } + + if (getProxyFor(addrs[1]) != address(0)) { + proxy_lp_balances[getProxyFor(addrs[1])] += transfer_amount; + } + + // if sent amount was all the liquidity, delete the stake, otherwise decrease the balance + if (transfer_amount == senderStake.liquidity) { + delete lockedStakes[addrs[0]][sender_lock_index]; + } else { + lockedStakes[addrs[0]][sender_lock_index].liquidity -= transfer_amount; + } + + // Get the stake and its index + { + // Scope here due to stack-too-deep + LockedStake memory receiverStake = getLockedStake(addrs[1], receiver_lock_index); + + /** if use_receiver_lock_index is true & + * & the index is valid + * & has liquidity + * & is still locked, update the stake & ending timestamp (longer of the two) + * else, create a new lockedStake + * note using nested if checks to reduce gas costs slightly + */ + if (use_receiver_lock_index == true) { + if (receiver_lock_index < lockedStakes[addrs[1]].length ) { + if (receiverStake.liquidity > 0) { + if (receiverStake.ending_timestamp > block.timestamp) { + // Update the existing staker's stake liquidity + lockedStakes[addrs[1]][receiver_lock_index].liquidity += transfer_amount; + // check & update ending timestamp to whichever is farthest out + if (receiverStake.ending_timestamp < senderStake.ending_timestamp) { + // update the lock expiration to the later timestamp + lockedStakes[addrs[1]][receiver_lock_index].ending_timestamp = senderStake.ending_timestamp; + // update the lock multiplier since we are effectively extending the lock + lockedStakes[addrs[1]][receiver_lock_index].lock_multiplier = lockMultiplier( + senderStake.ending_timestamp - block.timestamp + ); + } + } + } + } + } else { + // create the new lockedStake + // lockedStakes[addrs[1]].push(LockedStake( + // senderStake.start_timestamp, + // transfer_amount, + // senderStake.ending_timestamp, + // senderStake.lock_multiplier + // )); + _createNewStake( + addrs[1], + senderStake.start_timestamp, + transfer_amount, + senderStake.ending_timestamp, + senderStake.lock_multiplier + ); + + // update the return value of the locked index + /// todo could also just use the length of the array in all 3 situations below - which is more gas efficient? + receiver_lock_index = lockedStakes[addrs[1]].length; + } + } + + // Need to call again to make sure everything is correct + updateRewardAndBalance(addrs[0], true); + updateRewardAndBalance(addrs[1], true); + + emit TransferLockedByIndex( + addrs[0], + addrs[1], + transfer_amount, + sender_lock_index, + receiver_lock_index + ); + + // call the receiver with the destination lockedStake to verify receiving is ok + if (ILockReceiverV2(addrs[1]).onLockReceived( + addrs[0], + addrs[1], + receiver_lock_index, + "" + ) != ILockReceiverV2.onLockReceived.selector) revert InvalidReceiver(); //0xc42d8b95) revert InvalidReceiver(); + + return (sender_lock_index, receiver_lock_index); + + } + + /* ========== RESTRICTED FUNCTIONS - Owner or timelock only ========== */ + + // Inherited... + + /* ========== EVENTS ========== */ + event LockedAdditional(address indexed user, uint256 locked_stake_index, uint256 amount); + event LockedLonger(address indexed user, uint256 locked_stake_index, uint256 new_secs, uint256 new_start_ts, uint256 new_end_ts); + event StakeLocked(address indexed user, uint256 amount, uint256 secs, uint256 locked_stake_index, address source_address); + event WithdrawLocked(address indexed user, uint256 liquidity, uint256 locked_stake_index, address destination_address); + + event Approval(address indexed owner, address indexed spender, uint256 locked_stake_index, uint256 amount); + event ApprovalForAll(address indexed owner, address indexed spender, bool approved); + + event TransferLockedByIndex(address indexed sender_address, address indexed destination_address, uint256 amount_transferred, uint256 source_stake_index, uint256 destination_stake_index); +} \ No newline at end of file diff --git a/src/hardhat/old_contracts/Bridges/Arbitrum/CrossChainBridgeBacker_ARBI_AnySwap.sol b/src/hardhat/old_contracts/Bridges/Arbitrum/CrossChainBridgeBacker_ARBI_AnySwap.sol deleted file mode 100644 index 18fe4451..00000000 --- a/src/hardhat/old_contracts/Bridges/Arbitrum/CrossChainBridgeBacker_ARBI_AnySwap.sol +++ /dev/null @@ -1,62 +0,0 @@ -// SPDX-License-Identifier: GPL-2.0-or-later -pragma solidity >=0.8.0; - -import "../CrossChainBridgeBacker.sol"; -import "../../ERC20/__CROSSCHAIN/IAnyswapV5ERC20.sol"; -import "./IL2GatewayRouter.sol"; - -contract CrossChainBridgeBacker_ARBI_AnySwap is CrossChainBridgeBacker { - constructor ( - address _owner, - address _timelock_address, - address _cross_chain_oracle_address, - address[5] memory _token_addresses, - address[3] memory _bridge_addresses, - address _destination_address_override, - string memory _non_evm_destination_address, - string memory _name - ) - CrossChainBridgeBacker(_owner, _timelock_address, _cross_chain_oracle_address, _token_addresses, _bridge_addresses, _destination_address_override, _non_evm_destination_address, _name) - {} - - // Override with logic specific to this chain - function _bridgingLogic(uint256 token_type, address address_to_send_to, uint256 token_amount) internal override { - // [Arbitrum] - if (token_type == 0){ - // anyFRAX -> L1 FRAX - // Swapout - // AnySwap Bridge - IAnyswapV5ERC20(address(anyFRAX)).Swapout(token_amount, address_to_send_to); - } - else if (token_type == 1) { - // anyFXS -> L1 FXS - // Swapout - // AnySwap Bridge - IAnyswapV5ERC20(address(anyFXS)).Swapout(token_amount, address_to_send_to); - } - else { - revert("COLLATERAL TRANSFERS ARE DISABLED FOR NOW"); - // // arbiUSDC => L1 USDC - // // outboundTransfer - // // Arbitrum One Bridge - // // https://arbiscan.io/tx/0x32e16d596084d55f5ea0411ecfa25354e951db4b0d0055a14a86caeeb5d8f133 - - // revert("MAKE SURE TO TEST THIS CAREFULLY BEFORE DEPLOYING"); - - // // Approve - // collateral_token.approve(bridge_addresses[token_type], token_amount); - - // // Get the calldata - // uint256 maxSubmissionCost = 1; - // bytes memory the_calldata = abi.encode(['uint256', 'bytes'], maxSubmissionCost, '0x'); - - // // Transfer - // IL2GatewayRouter(bridge_addresses[token_type]).outboundTransfer( - // 0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48, // L1 token address - // address_to_send_to, - // token_amount, - // the_calldata - // ); - } - } -} diff --git a/src/hardhat/old_contracts/Bridges/Arbitrum/FraxLiquidityBridger_ARBI_AnySwap.sol b/src/hardhat/old_contracts/Bridges/Arbitrum/FraxLiquidityBridger_ARBI_AnySwap.sol deleted file mode 100644 index 0e5b68f2..00000000 --- a/src/hardhat/old_contracts/Bridges/Arbitrum/FraxLiquidityBridger_ARBI_AnySwap.sol +++ /dev/null @@ -1,77 +0,0 @@ -// SPDX-License-Identifier: GPL-2.0-or-later -pragma solidity >=0.8.0; - -import "../FraxLiquidityBridger.sol"; -import "./IL1CustomGateway.sol"; - -contract FraxLiquidityBridger_ARBI_AnySwap is FraxLiquidityBridger { - constructor ( - address _owner, - address _timelock_address, - address _amo_minter_address, - address[3] memory _bridge_addresses, - address _destination_address_override, - string memory _non_evm_destination_address, - string memory _name - ) - FraxLiquidityBridger(_owner, _timelock_address, _amo_minter_address, _bridge_addresses, _destination_address_override, _non_evm_destination_address, _name) - {} - - // The Arbitrum One Bridge needs _maxGas and _gasPriceBid parameters - uint256 public maxGas = 275000; - uint256 public gasPriceBid = 1632346222; - - function setGasVariables(uint256 _maxGas, uint256 _gasPriceBid) external onlyByOwnGov { - maxGas = _maxGas; - gasPriceBid = _gasPriceBid; - } - - // Override with logic specific to this chain - function _bridgingLogic(uint256 token_type, address address_to_send_to, uint256 token_amount) internal override { - // [Arbitrum] - if (token_type == 0){ - // L1 FRAX -> anyFRAX - // Simple dump in / CREATE2 - // AnySwap Bridge - TransferHelper.safeTransfer(address(FRAX), bridge_addresses[token_type], token_amount); - } - else if (token_type == 1) { - // L1 FXS -> anyFXS - // Simple dump in / CREATE2 - // AnySwap Bridge - TransferHelper.safeTransfer(address(FXS), bridge_addresses[token_type], token_amount); - } - else { - revert("COLLATERAL TRANSFERS ARE DISABLED FOR NOW"); - // // L1 USDC -> arbiUSDC - // // outboundTransfer - // // Arbitrum One Bridge - // // https://etherscan.io/tx/0x00835e1352b991ad9bfdb214628d58a9f1efe3af0436feaac31a404cfc402be5 - - // // INPUT - // // https://github.com/OffchainLabs/arbitrum/blob/3340b1919c2b0ed26f2b4c0298fb31dcbc075919/packages/arb-bridge-peripherals/test/customGateway.e2e.ts - - // revert("MAKE SURE TO TEST THIS CAREFULLY BEFORE DEPLOYING"); - - // // Approve - // collateral_token.approve(bridge_addresses[token_type], token_amount); - - // // Get the calldata - // uint256 maxSubmissionCost = 1; - // bytes memory the_calldata = abi.encode(['uint256', 'bytes'], maxSubmissionCost, '0x'); - - // // Transfer - // IL1CustomGateway(bridge_addresses[token_type]).outboundTransfer{ value: maxSubmissionCost + (maxGas * gasPriceBid) }( - // collateral_address, - // address_to_send_to, - // token_amount, - // maxGas, - // gasPriceBid, - // the_calldata - // ); - - // revert("finalizeInboundTransfer needs to be called somewhere too"); - } - } - -} diff --git a/src/hardhat/old_contracts/Bridges/Arbitrum/IL1CustomGateway.sol b/src/hardhat/old_contracts/Bridges/Arbitrum/IL1CustomGateway.sol deleted file mode 100644 index f67fdf3d..00000000 --- a/src/hardhat/old_contracts/Bridges/Arbitrum/IL1CustomGateway.sol +++ /dev/null @@ -1,24 +0,0 @@ -// SPDX-License-Identifier: GPL-2.0-or-later -pragma solidity >=0.8.0; - -interface IL1CustomGateway { - function calculateL2TokenAddress(address l1ERC20) external view returns (address); - function counterpartGateway() external view returns (address); - function encodeWithdrawal(uint256 _exitNum, address _initialDestination) external pure returns (bytes32); - function finalizeInboundTransfer(address _token, address _from, address _to, uint256 _amount, bytes calldata _data) external; - function forceRegisterTokenToL2(address[] memory _l1Addresses, address[] memory _l2Addresses, uint256 _maxGas, uint256 _gasPriceBid, uint256 _maxSubmissionCost) external returns (uint256); - function getExternalCall(uint256 _exitNum, address _initialDestination, bytes calldata _initialData) external view returns (address target, bytes calldata data); - function getOutboundCalldata(address _l1Token, address _from, address _to, uint256 _amount, bytes calldata _data) external view returns (bytes calldata outboundCalldata); - function inbox() external view returns (address); - function initialize(address _l1Counterpart, address _l1Router, address _inbox, address _owner) external; - function l1ToL2Token(address) external view returns (address); - function outboundTransfer(address _l1Token, address _to, uint256 _amount, uint256 _maxGas, uint256 _gasPriceBid, bytes calldata _data) external payable returns (bytes calldata res); - function owner() external view returns (address); - function postUpgradeInit() external; - function redirectedExits(bytes32) external view returns (bool isExit, address _newTo, bytes calldata _newData); - function registerTokenToL2(address, uint256, uint256, uint256, address) external returns (uint256); - function registerTokenToL2(address _l2Address, uint256 _maxGas, uint256 _gasPriceBid, uint256 _maxSubmissionCost) external returns (uint256); - function router() external view returns (address); - function transferExitAndCall(uint256 _exitNum, address _initialDestination, address _newDestination, bytes calldata _newData, bytes calldata _data) external; - function whitelist() external view returns (address); -} diff --git a/src/hardhat/old_contracts/Bridges/Arbitrum/IL2GatewayRouter.sol b/src/hardhat/old_contracts/Bridges/Arbitrum/IL2GatewayRouter.sol deleted file mode 100644 index 53cd89bd..00000000 --- a/src/hardhat/old_contracts/Bridges/Arbitrum/IL2GatewayRouter.sol +++ /dev/null @@ -1,19 +0,0 @@ -// SPDX-License-Identifier: GPL-2.0-or-later -pragma solidity >=0.8.0; - -interface IL2GatewayRouter { - function calculateL2TokenAddress(address l1ERC20) external view returns (address); - function counterpartGateway() external view returns (address); - function defaultGateway() external view returns (address); - function finalizeInboundTransfer(address, address, address, uint256, bytes calldata) external; - function getGateway(address _token) external view returns (address gateway); - function getOutboundCalldata(address _token, address _from, address _to, uint256 _amount, bytes calldata _data) external view returns (bytes memory); - function initialize(address _counterpartGateway, address _defaultGateway) external; - function l1TokenToGateway(address) external view returns (address); - function outboundTransfer(address _l1Token, address _to, uint256 _amount, bytes calldata _data) external returns (bytes calldata); - function outboundTransfer(address _token, address _to, uint256 _amount, uint256 _maxGas, uint256 _gasPriceBid, bytes calldata _data) external returns (bytes memory); - function postUpgradeInit() external; - function router() external view returns (address); - function setDefaultGateway(address newL2DefaultGateway) external; - function setGateway(address[] memory _l1Token, address[] memory _gateway) external; -} diff --git a/src/hardhat/old_contracts/Misc_AMOs/Convex_AMO_V2.sol b/src/hardhat/old_contracts/Misc_AMOs/Convex_AMO_V2.sol deleted file mode 100644 index 4430a650..00000000 --- a/src/hardhat/old_contracts/Misc_AMOs/Convex_AMO_V2.sol +++ /dev/null @@ -1,486 +0,0 @@ -// SPDX-License-Identifier: GPL-2.0-or-later -pragma solidity >=0.8.0; - -// ==================================================================== -// | ______ _______ | -// | / _____________ __ __ / ____(_____ ____ _____ ________ | -// | / /_ / ___/ __ `| |/_/ / /_ / / __ \/ __ `/ __ \/ ___/ _ \ | -// | / __/ / / / /_/ _> < / __/ / / / / / /_/ / / / / /__/ __/ | -// | /_/ /_/ \__,_/_/|_| /_/ /_/_/ /_/\__,_/_/ /_/\___/\___/ | -// | | -// ==================================================================== -// ============================ Convex_AMO_V2 ============================ -// ==================================================================== -// Frax Finance: https://github.com/FraxFinance - -// Primary Author(s) -// Travis Moore: https://github.com/FortisFortuna -// Jason Huan: https://github.com/jasonhuan - -// Reviewer(s) / Contributor(s) -// Sam Kazemian: https://github.com/samkazemian -// Dennis: github.com/denett - - -import "../Curve/IStableSwap3Pool.sol"; -import "../Curve/IMetaImplementationUSD.sol"; -import "../Misc_AMOs/convex/IConvexBooster.sol"; -import "../Misc_AMOs/convex/IConvexBaseRewardPool.sol"; -import "../Misc_AMOs/convex/IVirtualBalanceRewardPool.sol"; -import "../Misc_AMOs/convex/IConvexClaimZap.sol"; -import "../Misc_AMOs/convex/IcvxRewardPool.sol"; -import "../Frax/Frax.sol"; -import "../Frax/IFraxAMOMinter.sol"; -import '../Uniswap/TransferHelper.sol'; -import "../ERC20/ERC20.sol"; -import "../Math/SafeMath.sol"; -import "../Proxy/Initializable.sol"; -import "../Staking/Owned.sol"; - -contract Convex_AMO_V2 is Owned { - using SafeMath for uint256; - // SafeMath automatically included in Solidity >= 8.0.0 - - /* ========== STATE VARIABLES ========== */ - - // Core - FRAXStablecoin private FRAX = FRAXStablecoin(0x853d955aCEf822Db058eb8505911ED77F175b99e); - ERC20 private collateral_token = ERC20(0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48); - IFraxAMOMinter private amo_minter; - - // Curve-related - IMetaImplementationUSD private frax3crv_metapool; - IStableSwap3Pool private three_pool; - ERC20 private three_pool_erc20; - - // Convex-related - IConvexBooster private convex_booster; - IConvexBaseRewardPool private convex_base_reward_pool; - IConvexClaimZap private convex_claim_zap; - IVirtualBalanceRewardPool private convex_fxs_rewards_pool; - IcvxRewardPool private cvx_reward_pool; - ERC20 private cvx; - address private cvx_crv_address; - uint256 private lp_deposit_pid; - - address private crv_address; - address private constant fxs_address = 0x3432B6A60D23Ca0dFCa7761B7ab56459D9C964D0; - address private frax3crv_metapool_address; - - address public timelock_address; - address public custodian_address; - - // Number of decimals under 18, for collateral token - uint256 private missing_decimals; - - // Precision related - uint256 private PRICE_PRECISION; - - // Min ratio of collat <-> 3crv conversions via add_liquidity / remove_liquidity; 1e6 - uint256 public liq_slippage_3crv; - - // Min ratio of (FRAX + 3CRV) <-> FRAX3CRV-f-2 metapool conversions via add_liquidity / remove_liquidity; 1e6 - uint256 public slippage_metapool; - - // Convergence window - uint256 public convergence_window; // 1 cent - - // Default will use global_collateral_ratio() - bool public custom_floor; - uint256 public frax_floor; - - // Discount - bool public set_discount; - uint256 public discount_rate; - - /* ========== CONSTRUCTOR ========== */ - - constructor ( - address _owner_address, - address _amo_minter_address - ) Owned(_owner_address) { - owner = _owner_address; - missing_decimals = 12; - - frax3crv_metapool_address = 0xd632f22692FaC7611d2AA1C0D552930D43CAEd3B; - frax3crv_metapool = IMetaImplementationUSD(frax3crv_metapool_address); - three_pool = IStableSwap3Pool(0xbEbc44782C7dB0a1A60Cb6fe97d0b483032FF1C7); - three_pool_erc20 = ERC20(0x6c3F90f043a72FA612cbac8115EE7e52BDe6E490); - amo_minter = IFraxAMOMinter(_amo_minter_address); - - // Convex-related - convex_booster = IConvexBooster(0xF403C135812408BFbE8713b5A23a04b3D48AAE31); - convex_base_reward_pool = IConvexBaseRewardPool(0xB900EF131301B307dB5eFcbed9DBb50A3e209B2e); - convex_claim_zap = IConvexClaimZap(0x4890970BB23FCdF624A0557845A29366033e6Fa2); - cvx_reward_pool = IcvxRewardPool(0xCF50b810E57Ac33B91dCF525C6ddd9881B139332); - cvx = ERC20(0x4e3FBD56CD56c3e72c1403e103b45Db9da5B9D2B); - cvx_crv_address = 0x62B9c7356A2Dc64a1969e19C23e4f579F9810Aa7; - crv_address = 0xD533a949740bb3306d119CC777fa900bA034cd52; - convex_fxs_rewards_pool = IVirtualBalanceRewardPool(0xcDEC6714eB482f28f4889A0c122868450CDBF0b0); - lp_deposit_pid = 32; - - // Other variable initializations - PRICE_PRECISION = 1e6; - liq_slippage_3crv = 800000; - slippage_metapool = 950000; - convergence_window = 1e16; - custom_floor = false; - set_discount = false; - - // Get the custodian and timelock addresses from the minter - custodian_address = amo_minter.custodian_address(); - timelock_address = amo_minter.timelock_address(); - } - - /* ========== MODIFIERS ========== */ - - modifier onlyByOwnGov() { - require(msg.sender == timelock_address || msg.sender == owner, "Not owner or timelock"); - _; - } - - modifier onlyByOwnGovCust() { - require(msg.sender == timelock_address || msg.sender == owner || msg.sender == custodian_address, "Not owner, tlck, or custd"); - _; - } - - modifier onlyByMinter() { - require(msg.sender == address(amo_minter), "Not minter"); - _; - } - - /* ========== VIEWS ========== */ - - function showAllocations() public view returns (uint256[11] memory return_arr) { - // ------------LP Balance------------ - - // Free LP - uint256 lp_owned = (frax3crv_metapool.balanceOf(address(this))); - - // Staked in the vault - uint256 lp_value_in_vault = FRAX3CRVInVault(); - lp_owned = lp_owned.add(lp_value_in_vault); - - // ------------3pool Withdrawable------------ - // Uses iterate() to get metapool withdrawable amounts at FRAX floor price (global_collateral_ratio) - uint256 frax3crv_supply = frax3crv_metapool.totalSupply(); - - uint256 frax_withdrawable; - uint256 _3pool_withdrawable; - (frax_withdrawable, _3pool_withdrawable, ,) = iterate(); - if (frax3crv_supply > 0) { - _3pool_withdrawable = _3pool_withdrawable.mul(lp_owned).div(frax3crv_supply); - frax_withdrawable = frax_withdrawable.mul(lp_owned).div(frax3crv_supply); - } - else _3pool_withdrawable = 0; - - // ------------Frax Balance------------ - // Frax sums - uint256 frax_in_contract = FRAX.balanceOf(address(this)); - - // ------------Collateral Balance------------ - // Free Collateral - uint256 usdc_in_contract = collateral_token.balanceOf(address(this)); - - // Returns the dollar value withdrawable of USDC if the contract redeemed its 3CRV from the metapool; assume 1 USDC = $1 - uint256 usdc_withdrawable = _3pool_withdrawable.mul(three_pool.get_virtual_price()).div(1e18).div(10 ** missing_decimals); - - // USDC subtotal assuming FRAX drops to the CR and all reserves are arbed - uint256 usdc_subtotal = usdc_in_contract.add(usdc_withdrawable); - - return [ - frax_in_contract, // [0] Free FRAX in the contract - frax_withdrawable, // [1] FRAX withdrawable from the FRAX3CRV tokens - frax_withdrawable.add(frax_in_contract), // [2] FRAX withdrawable + free FRAX in the the contract - usdc_in_contract, // [3] Free USDC - usdc_withdrawable, // [4] USDC withdrawable from the FRAX3CRV tokens - usdc_subtotal, // [5] USDC subtotal assuming FRAX drops to the CR and all reserves are arbed - usdc_subtotal.add((frax_in_contract.add(frax_withdrawable)).mul(fraxDiscountRate()).div(1e6 * (10 ** missing_decimals))), // [6] USDC Total - lp_owned, // [7] FRAX3CRV free or in the vault - frax3crv_supply, // [8] Total supply of FRAX3CRV tokens - _3pool_withdrawable, // [9] 3pool withdrawable from the FRAX3CRV tokens - lp_value_in_vault // [10] FRAX3CRV in the vault - ]; - } - - function dollarBalances() public view returns (uint256 frax_val_e18, uint256 collat_val_e18) { - // Get the allocations - uint256[11] memory allocations = showAllocations(); - - frax_val_e18 = (allocations[2]).add((allocations[3]).mul((10 ** missing_decimals))); - collat_val_e18 = (allocations[6]).mul(10 ** missing_decimals); - } - - function showRewards() public view returns (uint256[4] memory return_arr) { - return_arr[0] = convex_base_reward_pool.earned(address(this)); // CRV claimable - return_arr[1] = 0; // CVX claimable. PITA to calculate. See https://docs.convexfinance.com/convexfinanceintegration/cvx-minting - return_arr[2] = cvx_reward_pool.earned(address(this)); // cvxCRV claimable - return_arr[3] = convex_fxs_rewards_pool.earned(address(this)); // FXS claimable - } - - // Returns hypothetical reserves of metapool if the FRAX price went to the CR, - // assuming no removal of liquidity from the metapool. - function iterate() public view returns (uint256, uint256, uint256, uint256) { - uint256 frax_balance = FRAX.balanceOf(frax3crv_metapool_address); - uint256 crv3_balance = three_pool_erc20.balanceOf(frax3crv_metapool_address); - uint256 total_balance = frax_balance.add(crv3_balance); - - uint256 floor_price_frax = uint(1e18).mul(fraxFloor()).div(1e6); - - uint256 crv3_received; - uint256 dollar_value; // 3crv is usually slightly above $1 due to collecting 3pool swap fees - for(uint i = 0; i < 256; i++){ - crv3_received = frax3crv_metapool.get_dy(0, 1, 1e18, [frax_balance, crv3_balance]); - dollar_value = crv3_received.mul(1e18).div(three_pool.get_virtual_price()); - if(dollar_value <= floor_price_frax.add(convergence_window) && dollar_value >= floor_price_frax.sub(convergence_window)){ - uint256 factor = uint256(1e6).mul(total_balance).div(frax_balance.add(crv3_balance)); //1e6 precision - - // Normalize back to initial balances, since this estimation method adds in extra tokens - frax_balance = frax_balance.mul(factor).div(1e6); - crv3_balance = crv3_balance.mul(factor).div(1e6); - return (frax_balance, crv3_balance, i, factor); - } else if (dollar_value <= floor_price_frax.add(convergence_window)){ - uint256 crv3_to_swap = total_balance.div(2 ** i); - frax_balance = frax_balance.sub(frax3crv_metapool.get_dy(1, 0, crv3_to_swap, [frax_balance, crv3_balance])); - crv3_balance = crv3_balance.add(crv3_to_swap); - } else if (dollar_value >= floor_price_frax.sub(convergence_window)){ - uint256 frax_to_swap = total_balance.div(2 ** i); - crv3_balance = crv3_balance.sub(frax3crv_metapool.get_dy(0, 1, frax_to_swap, [frax_balance, crv3_balance])); - frax_balance = frax_balance.add(frax_to_swap); - } - } - revert("No hypothetical point"); // in 256 rounds - } - - function fraxFloor() public view returns (uint256) { - if(custom_floor){ - return frax_floor; - } else { - return FRAX.global_collateral_ratio(); - } - } - - function fraxDiscountRate() public view returns (uint256) { - if(set_discount){ - return discount_rate; - } else { - return FRAX.global_collateral_ratio(); - } - } - - function FRAX3CRVInVault() public view returns (uint256) { - return convex_base_reward_pool.balanceOf(address(this)); - } - - // Backwards compatibility - function mintedBalance() public view returns (int256) { - return amo_minter.frax_mint_balances(address(this)); - } - - function usdValueInVault() public view returns (uint256) { - uint256 vault_balance = FRAX3CRVInVault(); - return vault_balance.mul(frax3crv_metapool.get_virtual_price()).div(1e18); - } - - /* ========== RESTRICTED FUNCTIONS ========== */ - - function metapoolDeposit(uint256 _frax_amount, uint256 _collateral_amount) external onlyByOwnGov returns (uint256 metapool_LP_received) { - uint256 threeCRV_received = 0; - if (_collateral_amount > 0) { - // Approve the collateral to be added to 3pool - collateral_token.approve(address(three_pool), _collateral_amount); - - // Convert collateral into 3pool - uint256[3] memory three_pool_collaterals; - three_pool_collaterals[1] = _collateral_amount; - { - uint256 min_3pool_out = (_collateral_amount * (10 ** missing_decimals)).mul(liq_slippage_3crv).div(PRICE_PRECISION); - three_pool.add_liquidity(three_pool_collaterals, min_3pool_out); - } - - // Approve the 3pool for the metapool - threeCRV_received = three_pool_erc20.balanceOf(address(this)); - - // WEIRD ISSUE: NEED TO DO three_pool_erc20.approve(address(three_pool), 0); first before every time - // May be related to https://github.com/vyperlang/vyper/blob/3e1ff1eb327e9017c5758e24db4bdf66bbfae371/examples/tokens/ERC20.vy#L85 - three_pool_erc20.approve(frax3crv_metapool_address, 0); - three_pool_erc20.approve(frax3crv_metapool_address, threeCRV_received); - } - - // Approve the FRAX for the metapool - FRAX.approve(frax3crv_metapool_address, _frax_amount); - - { - // Add the FRAX and the collateral to the metapool - uint256 min_lp_out = (_frax_amount.add(threeCRV_received)).mul(slippage_metapool).div(PRICE_PRECISION); - metapool_LP_received = frax3crv_metapool.add_liquidity([_frax_amount, threeCRV_received], min_lp_out); - } - - return metapool_LP_received; - } - - function metapoolWithdrawFrax(uint256 _metapool_lp_in, bool burn_the_frax) external onlyByOwnGov returns (uint256 frax_received) { - // Withdraw FRAX from the metapool - uint256 min_frax_out = _metapool_lp_in.mul(slippage_metapool).div(PRICE_PRECISION); - frax_received = frax3crv_metapool.remove_liquidity_one_coin(_metapool_lp_in, 0, min_frax_out); - - // Optionally burn the FRAX - if (burn_the_frax){ - burnFRAX(frax_received); - } - } - - function metapoolWithdraw3pool(uint256 _metapool_lp_in) internal onlyByOwnGov { - // Withdraw 3pool from the metapool - uint256 min_3pool_out = _metapool_lp_in.mul(slippage_metapool).div(PRICE_PRECISION); - frax3crv_metapool.remove_liquidity_one_coin(_metapool_lp_in, 1, min_3pool_out); - } - - function three_pool_to_collateral(uint256 _3pool_in) internal onlyByOwnGov { - // Convert the 3pool into the collateral - // WEIRD ISSUE: NEED TO DO three_pool_erc20.approve(address(three_pool), 0); first before every time - // May be related to https://github.com/vyperlang/vyper/blob/3e1ff1eb327e9017c5758e24db4bdf66bbfae371/examples/tokens/ERC20.vy#L85 - three_pool_erc20.approve(address(three_pool), 0); - three_pool_erc20.approve(address(three_pool), _3pool_in); - uint256 min_collat_out = _3pool_in.mul(liq_slippage_3crv).div(PRICE_PRECISION * (10 ** missing_decimals)); - three_pool.remove_liquidity_one_coin(_3pool_in, 1, min_collat_out); - } - - function metapoolWithdrawAndConvert3pool(uint256 _metapool_lp_in) external onlyByOwnGov { - metapoolWithdraw3pool(_metapool_lp_in); - three_pool_to_collateral(three_pool_erc20.balanceOf(address(this))); - } - - /* ========== Burns and givebacks ========== */ - - // Give USDC profits back. Goes through the minter - function giveCollatBack(uint256 collat_amount) external onlyByOwnGovCust { - collateral_token.approve(address(amo_minter), collat_amount); - amo_minter.receiveCollatFromAMO(collat_amount); - } - - // Burn unneeded or excess FRAX. Goes through the minter - function burnFRAX(uint256 frax_amount) public onlyByOwnGovCust { - FRAX.approve(address(amo_minter), frax_amount); - amo_minter.burnFraxFromAMO(frax_amount); - } - - /* ========== Convex: Deposit / Claim / Withdraw FRAX3CRV Metapool LP ========== */ - - // Deposit Metapool LP tokens, convert them to Convex LP, and deposit into their vault - function depositFRAX3CRV(uint256 _metapool_lp_in) external onlyByOwnGovCust{ - // Approve the metapool LP tokens for the vault contract - frax3crv_metapool.approve(address(convex_booster), _metapool_lp_in); - - // Deposit the metapool LP into the vault contract - convex_booster.deposit(lp_deposit_pid, _metapool_lp_in, true); - } - - // Withdraw Convex LP, convert it back to Metapool LP tokens, and give them back to the sender - function withdrawAndUnwrapFRAX3CRV(uint256 amount, bool claim) external onlyByOwnGovCust{ - convex_base_reward_pool.withdrawAndUnwrap(amount, claim); - } - - // Claim CVX, CRV, and FXS rewards - function claimRewardsFRAX3CRV() external onlyByOwnGovCust { - address[] memory rewardContracts = new address[](1); - rewardContracts[0] = address(convex_base_reward_pool); - - uint256[] memory chefIds = new uint256[](0); - - convex_claim_zap.claimRewards( - rewardContracts, - chefIds, - false, - false, - false, - 0, - 0 - ); - } - - /* ========== Convex: Stake / Claim / Withdraw CVX ========== */ - - // Stake CVX tokens - // E18 - function stakeCVX(uint256 _cvx_in) external onlyByOwnGovCust { - // Approve the CVX tokens for the staking contract - cvx.approve(address(cvx_reward_pool), _cvx_in); - - // Stake the CVX tokens into the staking contract - cvx_reward_pool.stakeFor(address(this), _cvx_in); - } - - // Claim cvxCRV rewards - function claimRewards_cvxCRV(bool stake) external onlyByOwnGovCust { - cvx_reward_pool.getReward(address(this), true, stake); - } - - // Unstake CVX tokens - // E18 - function withdrawCVX(uint256 cvx_amt, bool claim) external onlyByOwnGovCust { - cvx_reward_pool.withdraw(cvx_amt, claim); - } - - function withdrawRewards( - uint256 crv_amt, - uint256 cvx_amt, - uint256 cvxCRV_amt, - uint256 fxs_amt - ) external onlyByOwnGovCust { - if (crv_amt > 0) TransferHelper.safeTransfer(crv_address, msg.sender, crv_amt); - if (cvx_amt > 0) TransferHelper.safeTransfer(address(cvx), msg.sender, cvx_amt); - if (cvxCRV_amt > 0) TransferHelper.safeTransfer(cvx_crv_address, msg.sender, cvxCRV_amt); - if (fxs_amt > 0) TransferHelper.safeTransfer(fxs_address, msg.sender, fxs_amt); - } - - /* ========== RESTRICTED GOVERNANCE FUNCTIONS ========== */ - - function setAMOMinter(address _amo_minter_address) external onlyByOwnGov { - amo_minter = IFraxAMOMinter(_amo_minter_address); - - // Get the custodian and timelock addresses from the minter - custodian_address = amo_minter.custodian_address(); - timelock_address = amo_minter.timelock_address(); - - // Make sure the new addresses are not address(0) - require(custodian_address != address(0) && timelock_address != address(0), "Invalid custodian or timelock"); - } - - function setConvergenceWindow(uint256 _window) external onlyByOwnGov { - convergence_window = _window; - } - - // in terms of 1e6 (overriding global_collateral_ratio) - function setCustomFloor(bool _state, uint256 _floor_price) external onlyByOwnGov { - custom_floor = _state; - frax_floor = _floor_price; - } - - // in terms of 1e6 (overriding global_collateral_ratio) - function setDiscountRate(bool _state, uint256 _discount_rate) external onlyByOwnGov { - set_discount = _state; - discount_rate = _discount_rate; - } - - function setSlippages(uint256 _liq_slippage_3crv, uint256 _slippage_metapool) external onlyByOwnGov { - liq_slippage_3crv = _liq_slippage_3crv; - slippage_metapool = _slippage_metapool; - } - - function recoverERC20(address tokenAddress, uint256 tokenAmount) external onlyByOwnGov { - // Can only be triggered by owner or governance, not custodian - // Tokens are sent to the custodian, as a sort of safeguard - TransferHelper.safeTransfer(address(tokenAddress), msg.sender, tokenAmount); - } - - // Generic proxy - function execute( - address _to, - uint256 _value, - bytes calldata _data - ) external onlyByOwnGov returns (bool, bytes memory) { - (bool success, bytes memory result) = _to.call{value:_value}(_data); - return (success, result); - } -} \ No newline at end of file diff --git a/src/hardhat/old_contracts/Misc_AMOs/__CROSSCHAIN/Arbitrum/CurveAMO_ARBI.sol b/src/hardhat/old_contracts/Misc_AMOs/__CROSSCHAIN/Arbitrum/CurveAMO_ARBI.sol deleted file mode 100644 index 62355d3b..00000000 --- a/src/hardhat/old_contracts/Misc_AMOs/__CROSSCHAIN/Arbitrum/CurveAMO_ARBI.sol +++ /dev/null @@ -1,300 +0,0 @@ -// SPDX-License-Identifier: GPL-2.0-or-later -pragma solidity >=0.6.11; - -// ==================================================================== -// | ______ _______ | -// | / _____________ __ __ / ____(_____ ____ _____ ________ | -// | / /_ / ___/ __ `| |/_/ / /_ / / __ \/ __ `/ __ \/ ___/ _ \ | -// | / __/ / / / /_/ _> < / __/ / / / / / /_/ / / / / /__/ __/ | -// | /_/ /_/ \__,_/_/|_| /_/ /_/_/ /_/\__,_/_/ /_/\___/\___/ | -// | | -// ==================================================================== -// ========================== CurveAMO_ARBI =========================== -// ==================================================================== -// Uses Arbitrum Curve https://arbitrum.curve.fi/factory/9 - -// Frax Finance: https://github.com/FraxFinance - -// Primary Author(s) -// Travis Moore: https://github.com/FortisFortuna - - -// Reviewer(s) / Contributor(s) -// Sam Kazemian: https://github.com/samkazemian -// Jason Huan: https://github.com/jasonhuan -// Dennis: github.com/denett - -import "../../../ERC20/__CROSSCHAIN/CrossChainCanonicalFRAX.sol"; -import "../../../ERC20/ERC20.sol"; -import "../../../Bridges/Arbitrum/CrossChainBridgeBacker_ARBI_AnySwap.sol"; -import "../../curve/IFRAX2pool.sol"; -import "../../curve/I2poolGaugeDeposit.sol"; -import "../../curve/I2pool.sol"; -import "../../curve/IZapDepositor2pool.sol"; -import '../../../Uniswap/TransferHelper.sol'; -import "../../../Staking/Owned.sol"; - -contract CurveAMO_ARBI is Owned { - /* ========== STATE VARIABLES ========== */ - - // Core - CrossChainCanonicalFRAX public canFRAX; - ERC20 public USDC; // USDC: 0xFF970A61A04b1cA14834A43f5dE4533eBDDB5CC8 - ERC20 public USDT; // USDT: 0xFd086bC7CD5C481DCC9C85ebE478A1C0b69FCbb9 - CrossChainBridgeBacker_ARBI_AnySwap public cc_bridge_backer; - - // Pools - IFRAX2pool public frax2pool; // 0xf07d553B195080F84F582e88ecdD54bAa122b279 - I2poolGaugeDeposit public two_pool_gauge; // 0xbF7E49483881C76487b0989CD7d9A8239B20CA41 - I2pool public two_pool; // 0x7f90122BF0700F9E7e1F688fe926940E8839F353 - IZapDepositor2pool public zap_depositor; // 0x7544Fe3d184b6B55D6B36c3FCA1157eE0Ba30287 - - // Number of decimals under 18, for collateral token - uint256 public usdc_missing_decimals; - uint256 public usdt_missing_decimals; - - // Precision related - uint256 public PRICE_PRECISION = 1e6; - uint256 public VIRTUAL_PRICE_PRECISION = 1e18; - - // Min ratio of collat <-> 2pool conversions via add_liquidity / remove_liquidity; 1e6 - uint256 public liq_slippage_2pool; - - // Min ratio of (FRAX + 2pool) <-> FRAX2pool metapool conversions via add_liquidity / remove_liquidity; 1e6 - uint256 public slippage_metapool; - - // Admins - address public timelock_address; - address public custodian_address; - - /* ========== CONSTRUCTOR ========== */ - - constructor( - address _owner_address, - address _custodian_address, - address[4] memory _core_addresses, // 0: canFRAX, 1: USDC, 2: USDT, 3: CrossChainBridgeBacker - address[4] memory _pool_addresses // 0: FRAX2pool, 1: I2poolGaugeDeposit, 2: I2pool, 3: IZapDepositor2pool - ) Owned(_owner_address) { - // Owner - owner = _owner_address; - - // Core - canFRAX = CrossChainCanonicalFRAX(_core_addresses[0]); - USDC = ERC20(_core_addresses[1]); - USDT = ERC20(_core_addresses[2]); - usdc_missing_decimals = uint(18) - USDC.decimals(); - usdt_missing_decimals = uint(18) - USDT.decimals(); - cc_bridge_backer = CrossChainBridgeBacker_ARBI_AnySwap(_core_addresses[3]); - - // Pools - frax2pool = IFRAX2pool(_pool_addresses[0]); - two_pool_gauge = I2poolGaugeDeposit(_pool_addresses[1]); - two_pool = I2pool(_pool_addresses[2]); - zap_depositor = IZapDepositor2pool(_pool_addresses[3]); - - // Other variable initializations - liq_slippage_2pool = 950000; - slippage_metapool = 950000; - - // Set the custodian - custodian_address = _custodian_address; - - // Get the timelock address from the minter - timelock_address = cc_bridge_backer.timelock_address(); - } - - /* ========== MODIFIERS ========== */ - - modifier onlyByOwnGov() { - require(msg.sender == timelock_address || msg.sender == owner, "Not owner or timelock"); - _; - } - - /* ========== VIEWS ========== */ - - function showAllocations() public view returns (uint256[12] memory allocations) { - // Get some LP token prices - uint256 two_pool_price = two_pool.get_virtual_price(); - uint256 frax2pool_price = frax2pool.get_virtual_price(); - - // FRAX - allocations[0] = canFRAX.balanceOf(address(this)); // Free FRAX - - // USDC - allocations[1] = USDC.balanceOf(address(this)); // Free USDC, native precision - allocations[2] = (allocations[1] * (10 ** usdc_missing_decimals)); // Free USDC USD value - - // USDT - allocations[3] = USDT.balanceOf(address(this)); // Free USDT, native precision - allocations[4] = (allocations[3] * (10 ** usdt_missing_decimals)); // Free USDT USD value - - // 2pool Gauge Deposit - allocations[5] = (two_pool_gauge.balanceOf(address(this))); // Free 2pool gauge - allocations[6] = (allocations[5] * two_pool_price) / VIRTUAL_PRICE_PRECISION; // Free 2pool gauge USD value(1-to-1 conversion with 2pool) - - // 2pool - allocations[7] = (two_pool.balanceOf(address(this))); // Free 2pool - allocations[8] = (allocations[7] * two_pool_price) / VIRTUAL_PRICE_PRECISION; // Free 2pool USD value - - // FRAX2pool LP - allocations[9] = (frax2pool.balanceOf(address(this))); // Free FRAX2pool - allocations[10] = (allocations[9] * frax2pool_price) / VIRTUAL_PRICE_PRECISION; // Free FRAX2pool USD value - - // Total USD value - allocations[11] = allocations[0] + allocations[2] + allocations[4] + allocations[6] + allocations[8] + allocations[10]; - } - - // Needed by CrossChainBridgeBacker - function allDollarBalances() public view returns ( - uint256 frax_ttl, - uint256 fxs_ttl, - uint256 col_ttl, // in native decimals() - uint256 ttl_val_usd_e18 - ) { - uint256[12] memory allocations = showAllocations(); - - return(allocations[0], 0, allocations[1], allocations[11]); - } - - function borrowed_frax() public view returns (uint256) { - return cc_bridge_backer.frax_lent_balances(address(this)); - } - - function borrowed_collat() public view returns (uint256) { - return cc_bridge_backer.collat_lent_balances(address(this)); - } - - /* ========== RESTRICTED FUNCTIONS ========== */ - - function metapoolDeposit(uint256 _frax_amount, uint256 _usdc_amount, uint256 _usdt_amount) external onlyByOwnGov returns (uint256 metapool_LP_received) { - // Approve the FRAX to be zapped - if(_frax_amount > 0) { - canFRAX.approve(address(zap_depositor), _frax_amount); - } - - // Approve the USDC to be zapped - if(_usdc_amount > 0) { - USDC.approve(address(zap_depositor), _usdc_amount); - } - - // Approve the USDT to be zapped - if(_usdt_amount > 0) { - USDT.approve(address(zap_depositor), _usdt_amount); - } - - // Calculate the min LP out expected - uint256 ttl_val_usd = _frax_amount + (_usdc_amount * (10 ** usdc_missing_decimals)) + (_usdt_amount * (10 ** usdt_missing_decimals)); - ttl_val_usd = (ttl_val_usd * VIRTUAL_PRICE_PRECISION) / frax2pool.get_virtual_price(); - uint256 min_3pool_out = (ttl_val_usd * liq_slippage_2pool) / PRICE_PRECISION; - - // Zap the token(s) - metapool_LP_received = zap_depositor.add_liquidity( - address(frax2pool), - [ - _frax_amount, - _usdc_amount, - _usdt_amount - ], - min_3pool_out - ); - } - - function _metapoolWithdrawOneCoin(uint256 _metapool_lp_in, int128 tkn_idx) internal returns (uint256 tokens_received) { - // Approve the metapool LP tokens for zapper contract - frax2pool.approve(address(zap_depositor), _metapool_lp_in); - - // Calculate the min FRAX out - uint256 lp_usd_value = (_metapool_lp_in * VIRTUAL_PRICE_PRECISION) / frax2pool.get_virtual_price(); - uint256 min_tkn_out = (lp_usd_value * liq_slippage_2pool) / PRICE_PRECISION; - - // Handle different decimals - if(tkn_idx == 1) min_tkn_out = min_tkn_out / (10 ** usdc_missing_decimals); - else if(tkn_idx == 2) min_tkn_out = min_tkn_out / (10 ** usdt_missing_decimals); - - // Perform the liquidity swap - tokens_received = zap_depositor.remove_liquidity_one_coin( - address(frax2pool), - _metapool_lp_in, - tkn_idx, - min_tkn_out - ); - } - - function metapoolWithdrawFrax(uint256 _metapool_lp_in) external onlyByOwnGov returns (uint256) { - return _metapoolWithdrawOneCoin(_metapool_lp_in, 0); - } - - function metapoolWithdrawUsdc(uint256 _metapool_lp_in) external onlyByOwnGov returns (uint256) { - return _metapoolWithdrawOneCoin(_metapool_lp_in, 1); - } - - function metapoolWithdrawUsdt(uint256 _metapool_lp_in) external onlyByOwnGov returns (uint256) { - return _metapoolWithdrawOneCoin(_metapool_lp_in, 2); - } - - function metapoolWithdrawAtCurRatio( - uint256 _metapool_lp_in, - uint256 min_frax, - uint256 min_usdc, - uint256 min_usdt - ) external onlyByOwnGov returns (uint256 frax_received, uint256 usdc_received, uint256 usdt_received) { - // Approve the metapool LP tokens for zapper contract - frax2pool.approve(address(zap_depositor), _metapool_lp_in); - - // Withdraw FRAX, USDC, and USDT from the metapool at the current balance - uint256[3] memory result_arr = zap_depositor.remove_liquidity( - address(frax2pool), - _metapool_lp_in, - [min_frax, min_usdc, min_usdt] - ); - frax_received = result_arr[0]; - usdc_received = result_arr[1]; - usdt_received = result_arr[2]; - } - - /* ========== Burns and givebacks ========== */ - - // Give USDC profits back. Goes through the minter - function giveFRAXBack(uint256 frax_amount, bool do_bridging) external onlyByOwnGov { - canFRAX.approve(address(cc_bridge_backer), frax_amount); - cc_bridge_backer.receiveBackViaAMO(address(canFRAX), frax_amount, do_bridging); - } - - function giveCollatBack(uint256 collat_amount, bool do_bridging) external onlyByOwnGov { - USDC.approve(address(cc_bridge_backer), collat_amount); - cc_bridge_backer.receiveBackViaAMO(address(USDC), collat_amount, do_bridging); - } - - /* ========== RESTRICTED GOVERNANCE FUNCTIONS ========== */ - - function setCCBridgeBacker(address _cc_bridge_backer_address) external onlyByOwnGov { - cc_bridge_backer = CrossChainBridgeBacker_ARBI_AnySwap(_cc_bridge_backer_address); - - // Get the timelock addresses from the minter - timelock_address = cc_bridge_backer.timelock_address(); - - // Make sure the new addresse is not address(0) - require(timelock_address != address(0), "Invalid timelock"); - } - - function setSlippages(uint256 _liq_slippage_2pool, uint256 _slippage_metapool) external onlyByOwnGov { - liq_slippage_2pool = _liq_slippage_2pool; - slippage_metapool = _slippage_metapool; - } - - function recoverERC20(address tokenAddress, uint256 tokenAmount) external onlyByOwnGov { - // Can only be triggered by owner or governance, not custodian - // Tokens are sent to the custodian, as a sort of safeguard - TransferHelper.safeTransfer(address(tokenAddress), msg.sender, tokenAmount); - } - - // Generic proxy - function execute( - address _to, - uint256 _value, - bytes calldata _data - ) external onlyByOwnGov returns (bool, bytes memory) { - (bool success, bytes memory result) = _to.call{value:_value}(_data); - return(success, result); - } -} \ No newline at end of file diff --git a/src/hardhat/old_contracts/Misc_AMOs/__CROSSCHAIN/Arbitrum/SushiSwapLiquidityAMO_ARBI.sol b/src/hardhat/old_contracts/Misc_AMOs/__CROSSCHAIN/Arbitrum/SushiSwapLiquidityAMO_ARBI.sol deleted file mode 100644 index 8649707a..00000000 --- a/src/hardhat/old_contracts/Misc_AMOs/__CROSSCHAIN/Arbitrum/SushiSwapLiquidityAMO_ARBI.sol +++ /dev/null @@ -1,490 +0,0 @@ -// SPDX-License-Identifier: GPL-2.0-or-later -pragma solidity >=0.8.0; - -// ==================================================================== -// | ______ _______ | -// | / _____________ __ __ / ____(_____ ____ _____ ________ | -// | / /_ / ___/ __ `| |/_/ / /_ / / __ \/ __ `/ __ \/ ___/ _ \ | -// | / __/ / / / /_/ _> < / __/ / / / / / /_/ / / / / /__/ __/ | -// | /_/ /_/ \__,_/_/|_| /_/ /_/_/ /_/\__,_/_/ /_/\___/\___/ | -// | | -// ==================================================================== -// ==================== SushiSwapLiquidityAMO_ARBI ==================== -// ==================================================================== -// Provides Uniswap V2-style liquidity -// Frax Finance: https://github.com/FraxFinance - -// Primary Author(s) -// Travis Moore: https://github.com/FortisFortuna -// Jason Huan: https://github.com/jasonhuan - -// Reviewer(s) / Contributor(s) -// Sam Kazemian: https://github.com/samkazemian - -import "../../../ERC20/ERC20.sol"; -import "../../../ERC20/__CROSSCHAIN/IArbFiatToken.sol"; -import "../../../ERC20/__CROSSCHAIN/CrossChainCanonicalFRAX.sol"; -import "../../../ERC20/__CROSSCHAIN/CrossChainCanonicalFXS.sol"; -import "../../../Bridges/Arbitrum/CrossChainBridgeBacker_ARBI_AnySwap.sol"; -import "../../../Uniswap/Interfaces/IUniswapV2Pair.sol"; -import "../../../Uniswap/Interfaces/IUniswapV2Router02.sol"; -import "../../../Staking/Owned.sol"; -import '../../../Uniswap/TransferHelper.sol'; - -contract SushiSwapLiquidityAMO_ARBI is Owned { - // SafeMath automatically included in Solidity >= 8.0.0 - - /* ========== STATE VARIABLES ========== */ - - // Core - CrossChainCanonicalFRAX private canFRAX; - CrossChainCanonicalFXS private canFXS; - CrossChainBridgeBacker_ARBI_AnySwap public cc_bridge_backer; - IArbFiatToken private arbiCollateral; - address public canonical_frax_address; - address public canonical_fxs_address; - address public arbi_collateral_address; - - // Important addresses - address public timelock_address; - address public custodian_address; - - // Router - IUniswapV2Router02 public router = IUniswapV2Router02(0x1b02dA8Cb0d097eB8D57A175b88c7D8b47997506); - - // Positions - address[] public frax_fxs_pair_addresses_array; - mapping(address => bool) public frax_fxs_pair_addresses_allowed; - - // Slippages - uint256 public add_rem_liq_slippage = 20000; // 2.0% - - // Constants - uint256 public missing_decimals; - uint256 private PRICE_PRECISION = 1e6; - - /* ========== MODIFIERS ========== */ - - modifier onlyByOwnGov() { - require(msg.sender == timelock_address || msg.sender == owner, "Not owner or timelock"); - _; - } - - modifier onlyByOwnGovCust() { - require(msg.sender == timelock_address || msg.sender == owner || msg.sender == custodian_address, "Not owner, tlck, or custd"); - _; - } - - /* ========== CONSTRUCTOR ========== */ - - constructor ( - address _owner_address, - address _custodian_address, - address _canonical_frax_address, - address _canonical_fxs_address, - address _arbi_collateral_address, - address _cc_bridge_backer_address, - address[] memory _initial_pairs - ) Owned(_owner_address) { - // Core addresses - canonical_frax_address = _canonical_frax_address; - canonical_fxs_address = _canonical_fxs_address; - arbi_collateral_address = _arbi_collateral_address; - - // Core instances - canFRAX = CrossChainCanonicalFRAX(_canonical_frax_address); - canFXS = CrossChainCanonicalFXS(_canonical_fxs_address); - arbiCollateral = IArbFiatToken(_arbi_collateral_address); - cc_bridge_backer = CrossChainBridgeBacker_ARBI_AnySwap(_cc_bridge_backer_address); - - // Set the custodian - custodian_address = _custodian_address; - - // Get the timelock address from the minter - timelock_address = cc_bridge_backer.timelock_address(); - - // Get the missing decimals for the collateral - missing_decimals = uint(18) - arbiCollateral.decimals(); - - // Set the initial pairs - for (uint256 i = 0; i < _initial_pairs.length; i++){ - _addTrackedLP(_initial_pairs[i]); - } - } - - /* ========== VIEWS ========== */ - - function showAllocations() public view returns (uint256[17] memory allocations) { - // Get the FXS price - uint256 fxs_price = cc_bridge_backer.cross_chain_oracle().getPrice(canonical_fxs_address); - - // Loop through the lp tokens - uint256[] memory lp_tallies = new uint256[](4); // 0 = FRAX, 1 = FXS, 2 = Collateral, 3 = USD value - for (uint i = 0; i < frax_fxs_pair_addresses_array.length; i++){ - address pair_address = frax_fxs_pair_addresses_array[i]; - if (frax_fxs_pair_addresses_allowed[pair_address]) { - // Instantiate the pair - IUniswapV2Pair the_pair = IUniswapV2Pair(pair_address); - - // Get the pair info - uint256[4] memory lp_info_pack = lpTokenInfo(pair_address); - - // Get the lp token balance - uint256 lp_token_balance = the_pair.balanceOf(address(this)); - - // Get the FRAX and FXS balances - uint256 frax_amt = (lp_info_pack[0] * lp_token_balance) / 1e18; - uint256 fxs_amt = (lp_info_pack[1] * lp_token_balance) / 1e18; - uint256 collat_amt = (lp_info_pack[2] * lp_token_balance) / 1e18; - - // Add to the tallies - lp_tallies[0] += frax_amt; - lp_tallies[1] += fxs_amt; - lp_tallies[2] += collat_amt; - - // Get the USD value - if (lp_info_pack[3] == 0 || lp_info_pack[3] == 2){ - // If FRAX is in the pair, just double the FRAX balance since it is 50/50 - lp_tallies[3] += (frax_amt * 2); - } - else { - // Otherwise, double the value of the FXS component - lp_tallies[3] += ((fxs_amt * fxs_price) / PRICE_PRECISION) * 2; - } - - } - } - - // FRAX - allocations[0] = canFRAX.balanceOf(address(this)); // Free FRAX - allocations[1] = lp_tallies[0]; // FRAX in LP - allocations[2] = allocations[0] + allocations[1]; // Total FRAX - - // FXS - allocations[3] = canFXS.balanceOf(address(this)); // Free FXS, native E18 - allocations[4] = (allocations[3] * fxs_price) / PRICE_PRECISION; // Free FXS USD value - allocations[5] = lp_tallies[1]; // FXS in LP, native E18 - allocations[6] = (allocations[5] * fxs_price) / PRICE_PRECISION; // FXS in LP USD value - allocations[7] = allocations[3] + allocations[5]; // Total FXS, native E18 - allocations[8] = allocations[4] + allocations[6]; // Total FXS USD Value - - // Collateral - allocations[9] = arbiCollateral.balanceOf(address(this)); // Free Collateral, native precision - allocations[10] = (allocations[9] * (10 ** missing_decimals)); // Free Collateral USD value - allocations[11] = lp_tallies[2]; // Collateral in LP, native precision - allocations[12] = (allocations[11] * (10 ** missing_decimals)); // Collateral in LP USD value - allocations[13] = allocations[9] + allocations[11]; // Total Collateral, native precision - allocations[14] = allocations[10] + allocations[12]; // Total Collateral USD Value - - // LP - allocations[15] = lp_tallies[3]; // Total USD value in all LPs - - // Totals - allocations[16] = allocations[2] + allocations[8] + allocations[14]; // Total USD value in entire AMO, including FXS - } - - function showTokenBalances() public view returns (uint256[3] memory tkn_bals) { - tkn_bals[0] = canFRAX.balanceOf(address(this)); // canFRAX - tkn_bals[1] = canFXS.balanceOf(address(this)); // canFXS - tkn_bals[2] = arbiCollateral.balanceOf(address(this)); // arbiCollateral - } - - // [0] = FRAX per LP token - // [1] = FXS per LP token - // [2] = Collateral per LP token - // [3] = pair_type - function lpTokenInfo(address pair_address) public view returns (uint256[4] memory return_info) { - // Instantiate the pair - IUniswapV2Pair the_pair = IUniswapV2Pair(pair_address); - - // Get the reserves - uint256[] memory reserve_pack = new uint256[](3); // [0] = FRAX, [1] = FXS, [2] = Collateral - (uint256 reserve0, uint256 reserve1, ) = (the_pair.getReserves()); - { - // Get the underlying tokens in the LP - address token0 = the_pair.token0(); - address token1 = the_pair.token1(); - - // Test token0 - if (token0 == canonical_frax_address) reserve_pack[0] = reserve0; - else if (token0 == canonical_fxs_address) reserve_pack[1] = reserve0; - else if (token0 == arbi_collateral_address) reserve_pack[2] = reserve0; - - // Test token1 - if (token1 == canonical_frax_address) reserve_pack[0] = reserve1; - else if (token1 == canonical_fxs_address) reserve_pack[1] = reserve1; - else if (token1 == arbi_collateral_address) reserve_pack[2] = reserve1; - } - - // Get the token rates - return_info[0] = (reserve_pack[0] * 1e18) / (the_pair.totalSupply()); - return_info[1] = (reserve_pack[1] * 1e18) / (the_pair.totalSupply()); - return_info[2] = (reserve_pack[2] * 1e18) / (the_pair.totalSupply()); - - // Set the pair type (used later) - if (return_info[0] > 0 && return_info[1] == 0) return_info[3] = 0; // FRAX/XYZ - else if (return_info[0] == 0 && return_info[1] > 0) return_info[3] = 1; // FXS/XYZ - else if (return_info[0] > 0 && return_info[1] > 0) return_info[3] = 2; // FRAX/FXS - else revert("Invalid pair"); - } - - // Needed by CrossChainBridgeBacker - function allDollarBalances() public view returns ( - uint256 frax_ttl, - uint256 fxs_ttl, - uint256 col_ttl, // in native decimals() - uint256 ttl_val_usd_e18 - ) { - uint256[17] memory allocations = showAllocations(); - - return (allocations[2], allocations[7], allocations[13], allocations[16]); - } - - function borrowed_frax() public view returns (uint256) { - return cc_bridge_backer.frax_lent_balances(address(this)); - } - - function borrowed_fxs() public view returns (uint256) { - return cc_bridge_backer.fxs_lent_balances(address(this)); - } - - function borrowed_collat() public view returns (uint256) { - return cc_bridge_backer.collat_lent_balances(address(this)); - } - - function total_profit() public view returns (int256 profit) { - // Get the FXS price - uint256 fxs_price = cc_bridge_backer.cross_chain_oracle().getPrice(canonical_fxs_address); - - uint256[17] memory allocations = showAllocations(); - - // Handle FRAX - profit = int256(allocations[2]) - int256(borrowed_frax()); - - // Handle FXS - profit += ((int256(allocations[7]) - int256(borrowed_fxs())) * int256(fxs_price)) / int256(PRICE_PRECISION); - - // Handle Collat - profit += (int256(allocations[13]) - int256(borrowed_collat())) * int256(10 ** missing_decimals); - } - - // token_there_is_one_of means you want the return amount to be (X other token) per 1 token; - function pair_reserve_ratio_E18(address pair_address, address token_there_is_one_of) public view returns (uint256) { - // Instantiate the pair - IUniswapV2Pair the_pair = IUniswapV2Pair(pair_address); - - // Get the token addresses - address token0 = the_pair.token0(); - address token1 = the_pair.token1(); - uint256 decimals0 = ERC20(token0).decimals(); - uint256 decimals1 = ERC20(token1).decimals(); - - (uint256 reserve0, uint256 reserve1, ) = (the_pair.getReserves()); - - uint256 miss_dec = (decimals0 >= decimals1) ? (decimals0 - decimals1) : (decimals1 - decimals0); - - // Put everything into E18. Since one of the pair tokens will always be FRAX or FXS, this is ok to assume. - if (decimals0 >= decimals1){ - reserve1 *= (10 ** miss_dec); - } - else { - reserve0 *= (10 ** miss_dec); - } - - // Return the ratio - if (token0 == token_there_is_one_of){ - return (uint256(1e18) * reserve0) / reserve1; - } - else if (token1 == token_there_is_one_of){ - return (uint256(1e18) * reserve1) / reserve0; - } - else revert("Token not in pair"); - } - - /* ========== Swap ========== */ - - // Swap tokens directly - function swapTokens( - address from_token_address, - uint256 from_in, - address to_token_address, - uint256 to_token_out_min - ) public onlyByOwnGov returns (uint256[] memory amounts) { - // Approval - ERC20(from_token_address).approve(address(router), from_in); - - // Create the path object (compiler doesn't like feeding it in directly) - address[] memory the_path = new address[](2); - the_path[0] = from_token_address; - the_path[1] = to_token_address; - - // Swap - amounts = router.swapExactTokensForTokens( - from_in, - to_token_out_min, - the_path, - address(this), - block.timestamp + 604800 // Expiration: 7 days from now - ); - } - - // If you need a specific path - function swapTokensWithCustomPath( - address from_token_address, - uint256 from_in, - uint256 end_token_out_min, - address[] memory path - ) public onlyByOwnGov returns (uint256[] memory amounts) { - // Approval - ERC20(from_token_address).approve(address(router), from_in); - - // Swap - amounts = router.swapExactTokensForTokens( - from_in, - end_token_out_min, - path, - address(this), - block.timestamp + 604800 // Expiration: 7 days from now - ); - } - - /* ========== Add / Remove Liquidity ========== */ - - function addLiquidity( - address lp_token_address, - address tokenA_address, - uint256 tokenA_amt, - address tokenB_address, - uint256 tokenB_amt - ) public onlyByOwnGov returns (uint256 amountA, uint256 amountB, uint256 liquidity) { - require(frax_fxs_pair_addresses_allowed[lp_token_address], "LP address not allowed"); - - // Approvals - ERC20(tokenA_address).approve(address(router), tokenA_amt); - ERC20(tokenB_address).approve(address(router), tokenB_amt); - - // Add liquidity - (amountA, amountB, liquidity) = router.addLiquidity( - tokenA_address, - tokenB_address, - tokenA_amt, - tokenB_amt, - tokenA_amt - ((tokenA_amt * add_rem_liq_slippage) / PRICE_PRECISION), - tokenB_amt - ((tokenB_amt * add_rem_liq_slippage) / PRICE_PRECISION), - address(this), - block.timestamp + 604800 // Expiration: 7 days from now - ); - } - - function removeLiquidity( - address lp_token_address, - uint256 lp_token_in - ) public onlyByOwnGov returns (uint256 amountA, uint256 amountB) { - require(frax_fxs_pair_addresses_allowed[lp_token_address], "LP address not allowed"); - - // Approvals - ERC20(lp_token_address).approve(address(router), lp_token_in); - - // Get the token addresses - address tokenA = IUniswapV2Pair(lp_token_address).token0(); - address tokenB = IUniswapV2Pair(lp_token_address).token1(); - - // Remove liquidity - (amountA, amountB) = router.removeLiquidity( - tokenA, - tokenB, - lp_token_in, - 0, - 0, - address(this), - block.timestamp + 604800 // Expiration: 7 days from now - ); - } - - /* ========== Burns and givebacks ========== */ - - function giveFRAXBack(uint256 frax_amount, bool do_bridging) external onlyByOwnGov { - canFRAX.approve(address(cc_bridge_backer), frax_amount); - cc_bridge_backer.receiveBackViaAMO(canonical_frax_address, frax_amount, do_bridging); - } - - function giveFXSBack(uint256 fxs_amount, bool do_bridging) external onlyByOwnGov { - canFXS.approve(address(cc_bridge_backer), fxs_amount); - cc_bridge_backer.receiveBackViaAMO(canonical_fxs_address, fxs_amount, do_bridging); - } - - function giveCollatBack(uint256 collat_amount, bool do_bridging) external onlyByOwnGov { - arbiCollateral.approve(address(cc_bridge_backer), collat_amount); - cc_bridge_backer.receiveBackViaAMO(arbi_collateral_address, collat_amount, do_bridging); - } - - /* ========== RESTRICTED FUNCTIONS ========== */ - - // Any pairs with FRAX and/or FXS must be whitelisted first before adding liquidity - function _addTrackedLP(address pair_address) internal { - // Instantiate the pair - IUniswapV2Pair the_pair = IUniswapV2Pair(pair_address); - - // Make sure either FRAX or FXS is present - bool frax_present = (the_pair.token0() == canonical_frax_address || the_pair.token1() == canonical_frax_address); - bool fxs_present = (the_pair.token0() == canonical_fxs_address || the_pair.token1() == canonical_fxs_address); - require(frax_present || fxs_present, "FRAX or FXS not in pair"); - - // Adjust the state variables - require(frax_fxs_pair_addresses_allowed[pair_address] == false, "LP already exists"); - frax_fxs_pair_addresses_allowed[pair_address] = true; - frax_fxs_pair_addresses_array.push(pair_address); - } - - function addTrackedLP(address pair_address) public onlyByOwnGov { - _addTrackedLP(pair_address); - } - - // Remove FRAX and FXS related pairs - function removeTrackedLP(address pair_address) public onlyByOwnGov { - // Adjust the state variables - require(frax_fxs_pair_addresses_allowed[pair_address] == true, "LP not already present"); - frax_fxs_pair_addresses_allowed[pair_address] = false; - - // 'Delete' from the array by setting the address to 0x0 - for (uint i = 0; i < frax_fxs_pair_addresses_array.length; i++){ - if (frax_fxs_pair_addresses_array[i] == pair_address) { - frax_fxs_pair_addresses_array[i] = address(0); // This will leave a null in the array and keep the indices the same - break; - } - } - } - - function setCCBridgeBacker(address _cc_bridge_backer_address) external onlyByOwnGov { - cc_bridge_backer = CrossChainBridgeBacker_ARBI_AnySwap(_cc_bridge_backer_address); - - // Get the timelock addresses from the minter - timelock_address = cc_bridge_backer.timelock_address(); - - // Make sure the new addresse is not address(0) - require(timelock_address != address(0), "Invalid timelock"); - } - - function setSlippages(uint256 _add_rem_liq_slippage) external onlyByOwnGov { - add_rem_liq_slippage = _add_rem_liq_slippage; - } - - function setCustodian(address _custodian_address) external onlyByOwnGov { - require(_custodian_address != address(0), "Zero address detected"); - custodian_address = _custodian_address; - } - - function recoverERC20(address tokenAddress, uint256 tokenAmount) external onlyByOwnGov { - TransferHelper.safeTransfer(address(tokenAddress), msg.sender, tokenAmount); - } - - // Generic proxy - function execute( - address _to, - uint256 _value, - bytes calldata _data - ) external onlyByOwnGov returns (bool, bytes memory) { - (bool success, bytes memory result) = _to.call{value:_value}(_data); - return (success, result); - } -} \ No newline at end of file diff --git a/src/hardhat/old_contracts/Misc_AMOs/apeswap/IApePair.sol b/src/hardhat/old_contracts/Misc_AMOs/apeswap/IApePair.sol deleted file mode 100644 index 56e3bd33..00000000 --- a/src/hardhat/old_contracts/Misc_AMOs/apeswap/IApePair.sol +++ /dev/null @@ -1,63 +0,0 @@ -// SPDX-License-Identifier: GPL-2.0-or-later -pragma solidity >=0.8.0; - -/* - * ApeSwapFinance - * App: https://apeswap.finance - * Medium: https://medium.com/@ape_swap - * Twitter: https://twitter.com/ape_swap - * Telegram: https://t.me/ape_swap - * Announcements: https://t.me/ape_swap_news - * GitHub: https://github.com/ApeSwapFinance - */ - -interface IApePair { - event Approval(address indexed owner, address indexed spender, uint value); - event Transfer(address indexed from, address indexed to, uint value); - - function name() external pure returns (string memory); - function symbol() external pure returns (string memory); - function decimals() external pure returns (uint8); - function totalSupply() external view returns (uint); - function balanceOf(address owner) external view returns (uint); - function allowance(address owner, address spender) external view returns (uint); - - function approve(address spender, uint value) external returns (bool); - function transfer(address to, uint value) external returns (bool); - function transferFrom(address from, address to, uint value) external returns (bool); - - function DOMAIN_SEPARATOR() external view returns (bytes32); - function PERMIT_TYPEHASH() external pure returns (bytes32); - function nonces(address owner) external view returns (uint); - - function permit(address owner, address spender, uint value, uint deadline, uint8 v, bytes32 r, bytes32 s) external; - - event Mint(address indexed sender, uint amount0, uint amount1); - event Burn(address indexed sender, uint amount0, uint amount1, address indexed to); - event Swap( - address indexed sender, - uint amount0In, - uint amount1In, - uint amount0Out, - uint amount1Out, - address indexed to - ); - event Sync(uint112 reserve0, uint112 reserve1); - - function MINIMUM_LIQUIDITY() external pure returns (uint); - function factory() external view returns (address); - function token0() external view returns (address); - function token1() external view returns (address); - function getReserves() external view returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast); - function price0CumulativeLast() external view returns (uint); - function price1CumulativeLast() external view returns (uint); - function kLast() external view returns (uint); - - function mint(address to) external returns (uint liquidity); - function burn(address to) external returns (uint amount0, uint amount1); - function swap(uint amount0Out, uint amount1Out, address to, bytes calldata data) external; - function skim(address to) external; - function sync() external; - - function initialize(address, address) external; -} \ No newline at end of file diff --git a/src/hardhat/old_contracts/Misc_AMOs/apeswap/IApeRouter.sol b/src/hardhat/old_contracts/Misc_AMOs/apeswap/IApeRouter.sol deleted file mode 100644 index 12cb9fb2..00000000 --- a/src/hardhat/old_contracts/Misc_AMOs/apeswap/IApeRouter.sol +++ /dev/null @@ -1,29 +0,0 @@ -// SPDX-License-Identifier: GPL-2.0-or-later -pragma solidity >=0.8.0; - -interface IApeRouter { - function WETH ( ) external view returns ( address ); - function addLiquidity ( address tokenA, address tokenB, uint256 amountADesired, uint256 amountBDesired, uint256 amountAMin, uint256 amountBMin, address to, uint256 deadline ) external returns ( uint256 amountA, uint256 amountB, uint256 liquidity ); - function addLiquidityETH ( address token, uint256 amountTokenDesired, uint256 amountTokenMin, uint256 amountETHMin, address to, uint256 deadline ) external returns ( uint256 amountToken, uint256 amountETH, uint256 liquidity ); - function factory ( ) external view returns ( address ); - function getAmountIn ( uint256 amountOut, uint256 reserveIn, uint256 reserveOut ) external pure returns ( uint256 amountIn ); - function getAmountOut ( uint256 amountIn, uint256 reserveIn, uint256 reserveOut ) external pure returns ( uint256 amountOut ); - function getAmountsIn ( uint256 amountOut, address[] calldata path ) external view returns ( uint256[] memory amounts ); - function getAmountsOut ( uint256 amountIn, address[] calldata path ) external view returns ( uint256[] memory amounts ); - function quote ( uint256 amountA, uint256 reserveA, uint256 reserveB ) external pure returns ( uint256 amountB ); - function removeLiquidity ( address tokenA, address tokenB, uint256 liquidity, uint256 amountAMin, uint256 amountBMin, address to, uint256 deadline ) external returns ( uint256 amountA, uint256 amountB ); - function removeLiquidityETH ( address token, uint256 liquidity, uint256 amountTokenMin, uint256 amountETHMin, address to, uint256 deadline ) external returns ( uint256 amountToken, uint256 amountETH ); - function removeLiquidityETHSupportingFeeOnTransferTokens ( address token, uint256 liquidity, uint256 amountTokenMin, uint256 amountETHMin, address to, uint256 deadline ) external returns ( uint256 amountETH ); - function removeLiquidityETHWithPermit ( address token, uint256 liquidity, uint256 amountTokenMin, uint256 amountETHMin, address to, uint256 deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns ( uint256 amountToken, uint256 amountETH ); - function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens ( address token, uint256 liquidity, uint256 amountTokenMin, uint256 amountETHMin, address to, uint256 deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns ( uint256 amountETH ); - function removeLiquidityWithPermit ( address tokenA, address tokenB, uint256 liquidity, uint256 amountAMin, uint256 amountBMin, address to, uint256 deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns ( uint256 amountA, uint256 amountB ); - function swapETHForExactTokens ( uint256 amountOut, address[] calldata path, address to, uint256 deadline ) external returns ( uint256[] memory amounts ); - function swapExactETHForTokens ( uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external returns ( uint256[] memory amounts ); - function swapExactETHForTokensSupportingFeeOnTransferTokens ( uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external; - function swapExactTokensForETH ( uint256 amountIn, uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external returns ( uint256[] memory amounts ); - function swapExactTokensForETHSupportingFeeOnTransferTokens ( uint256 amountIn, uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external; - function swapExactTokensForTokens ( uint256 amountIn, uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external returns ( uint256[] memory amounts ); - function swapExactTokensForTokensSupportingFeeOnTransferTokens ( uint256 amountIn, uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external; - function swapTokensForExactETH ( uint256 amountOut, uint256 amountInMax, address[] calldata path, address to, uint256 deadline ) external returns ( uint256[] memory amounts ); - function swapTokensForExactTokens ( uint256 amountOut, uint256 amountInMax, address[] calldata path, address to, uint256 deadline ) external returns ( uint256[] memory amounts ); -} diff --git a/src/hardhat/old_contracts/Misc_AMOs/apeswap/IMasterApe.sol b/src/hardhat/old_contracts/Misc_AMOs/apeswap/IMasterApe.sol deleted file mode 100644 index 30919181..00000000 --- a/src/hardhat/old_contracts/Misc_AMOs/apeswap/IMasterApe.sol +++ /dev/null @@ -1,33 +0,0 @@ -// SPDX-License-Identifier: GPL-2.0-or-later -pragma solidity >=0.8.0; - -interface IMasterApe { - function BONUS_MULTIPLIER() external view returns (uint256); - function add(uint256 _allocPoint, address _lpToken, bool _withUpdate) external; - function cake() external view returns (address); - function cakePerBlock() external view returns (uint256); - function checkPoolDuplicate(address _lpToken) external view; - function deposit(uint256 _pid, uint256 _amount) external; - function dev(address _devaddr) external; - function devaddr() external view returns (address); - function emergencyWithdraw(uint256 _pid) external; - function enterStaking(uint256 _amount) external; - function getMultiplier(uint256 _from, uint256 _to) external view returns (uint256); - function getPoolInfo(uint256 _pid) external view returns (address lpToken, uint256 allocPoint, uint256 lastRewardBlock, uint256 accCakePerShare); - function leaveStaking(uint256 _amount) external; - function massUpdatePools() external; - function owner() external view returns (address); - function pendingCake(uint256 _pid, address _user) external view returns (uint256); - function poolInfo(uint256) external view returns (address lpToken, uint256 allocPoint, uint256 lastRewardBlock, uint256 accCakePerShare); - function poolLength() external view returns (uint256); - function renounceOwnership() external; - function set(uint256 _pid, uint256 _allocPoint, bool _withUpdate) external; - function startBlock() external view returns (uint256); - function syrup() external view returns (address); - function totalAllocPoint() external view returns (uint256); - function transferOwnership(address newOwner) external; - function updateMultiplier(uint256 multiplierNumber) external; - function updatePool(uint256 _pid) external; - function userInfo(uint256, address) external view returns (uint256 amount, uint256 rewardDebt); - function withdraw(uint256 _pid, uint256 _amount) external; -} diff --git a/src/hardhat/old_contracts/Misc_AMOs/axial/IAxialToken.sol b/src/hardhat/old_contracts/Misc_AMOs/axial/IAxialToken.sol deleted file mode 100644 index 6fdfd12a..00000000 --- a/src/hardhat/old_contracts/Misc_AMOs/axial/IAxialToken.sol +++ /dev/null @@ -1,31 +0,0 @@ -// SPDX-License-Identifier: GPL-2.0-or-later -pragma solidity >=0.8.0; - -interface IAxialToken { - function DELEGATION_TYPEHASH() external view returns (bytes32); - function DOMAIN_TYPEHASH() external view returns (bytes32); - function allowance(address owner, address spender) external view returns (uint256); - function approve(address spender, uint256 amount) external returns (bool); - function balanceOf(address account) external view returns (uint256); - function checkpoints(address, uint32) external view returns (uint32 fromBlock, uint256 votes); - function decimals() external view returns (uint8); - function decreaseAllowance(address spender, uint256 subtractedValue) external returns (bool); - function delegate(address delegatee) external; - function delegateBySig(address delegatee, uint256 nonce, uint256 expiry, uint8 v, bytes32 r, bytes32 s) external; - function delegates(address delegator) external view returns (address); - function getCurrentVotes(address account) external view returns (uint256); - function getPriorVotes(address account, uint256 blockNumber) external view returns (uint256); - function increaseAllowance(address spender, uint256 addedValue) external returns (bool); - function maxSupply() external view returns (uint256); - function mint(address _to, uint256 _amount) external; - function name() external view returns (string memory); - function nonces(address) external view returns (uint256); - function numCheckpoints(address) external view returns (uint32); - function owner() external view returns (address); - function renounceOwnership() external; - function symbol() external view returns (string memory); - function totalSupply() external view returns (uint256); - function transfer(address recipient, uint256 amount) external returns (bool); - function transferFrom(address sender, address recipient, uint256 amount) external returns (bool); - function transferOwnership(address newOwner) external; -} diff --git a/src/hardhat/old_contracts/Misc_AMOs/axial/IMasterChefAxialV3.sol b/src/hardhat/old_contracts/Misc_AMOs/axial/IMasterChefAxialV3.sol deleted file mode 100644 index 679f9ad0..00000000 --- a/src/hardhat/old_contracts/Misc_AMOs/axial/IMasterChefAxialV3.sol +++ /dev/null @@ -1,27 +0,0 @@ -// SPDX-License-Identifier: GPL-2.0-or-later -pragma solidity >=0.8.0; - -interface IMasterChefAxialV3 { - function AXIAL() external view returns (address); - function MASTER_CHEF_V2() external view returns (address); - function MASTER_PID() external view returns (uint256); - function add(uint256 allocPoint, address _lpToken, address _rewarder) external; - function axialPerSec() external view returns (uint256 amount); - function deposit(uint256 pid, uint256 amount) external; - function emergencyWithdraw(uint256 pid) external; - function harvestFromMasterChef() external; - function init(address dummyToken) external; - function massUpdatePools(uint256[] memory pids) external; - function owner() external view returns (address); - function pendingTokens(uint256 _pid, address _user) external view returns (uint256 pendingAxial, address bonusTokenAddress, string memory bonusTokenSymbol, uint256 pendingBonusToken); - function poolInfo(uint256) external view returns (address lpToken, uint256 accAxialPerShare, uint256 lastRewardTimestamp, uint256 allocPoint, address rewarder); - function poolLength() external view returns (uint256 pools); - function renounceOwnership() external; - function set(uint256 _pid, uint256 _allocPoint, address _rewarder, bool overwrite) external; - function totalAllocPoint() external view returns (uint256); - function transferOwnership(address newOwner) external; - function updatePool(uint256 pid) external; - function userInfo(uint256, address) external view returns (uint256 amount, uint256 rewardDebt); - function withdraw(uint256 pid, uint256 amount) external; -} - diff --git a/src/hardhat/old_contracts/Misc_AMOs/axial/ISwapFlashLoan.sol b/src/hardhat/old_contracts/Misc_AMOs/axial/ISwapFlashLoan.sol deleted file mode 100644 index 2d5b6409..00000000 --- a/src/hardhat/old_contracts/Misc_AMOs/axial/ISwapFlashLoan.sol +++ /dev/null @@ -1,44 +0,0 @@ -// SPDX-License-Identifier: GPL-2.0-or-later -pragma solidity >=0.8.0; - -interface ISwapFlashLoan { - // // ERC20 Stuff - // function totalSupply() external view returns (uint256); - // function balanceOf(address account) external view returns (uint256); - // function transfer(address recipient, uint256 amount) external returns (bool); - // function allowance(address owner, address spender) external view returns (uint256); - // function approve(address spender, uint256 amount) external returns (bool); - // function transferFrom(address sender, address recipient, uint256 amount) external returns (bool); - - // SwapFlashLoan - function MAX_BPS() external view returns (uint256); - function addLiquidity(uint256[] memory amounts, uint256 minToMint, uint256 deadline) external returns (uint256); - function calculateRemoveLiquidity(uint256 amount) external view returns (uint256[] memory); - function calculateRemoveLiquidityOneToken(uint256 tokenAmount, uint8 tokenIndex) external view returns (uint256 availableTokenAmount); - function calculateSwap(uint8 tokenIndexFrom, uint8 tokenIndexTo, uint256 dx) external view returns (uint256); - function calculateTokenAmount(uint256[] memory amounts, bool deposit) external view returns (uint256); - function getA() external view returns (uint256); - function getAPrecise() external view returns (uint256); - function getAdminBalance(uint256 index) external view returns (uint256); - function getToken(uint8 index) external view returns (address); - function getTokenBalance(uint8 index) external view returns (uint256); - function getTokenIndex(address tokenAddress) external view returns (uint8); - function getVirtualPrice() external view returns (uint256); - function owner() external view returns (address); - function pause() external; - function paused() external view returns (bool); - function protocolFeeShareBPS() external view returns (uint256); - function rampA(uint256 futureA, uint256 futureTime) external; - function removeLiquidity(uint256 amount, uint256[] calldata minAmounts, uint256 deadline) external returns (uint256[] memory); - function removeLiquidityOneToken(uint256 tokenAmount, uint8 tokenIndex, uint256 minAmount, uint256 deadline) external returns (uint256); - function renounceOwnership() external; - function setAdminFee(uint256 newAdminFee) external; - function setFlashLoanFees(uint256 newFlashLoanFeeBPS, uint256 newProtocolFeeShareBPS) external; - function setSwapFee(uint256 newSwapFee) external; - function stopRampA() external; - function swap(uint8 tokenIndexFrom, uint8 tokenIndexTo, uint256 dx, uint256 minDy, uint256 deadline) external returns (uint256); - function swapStorage() external view returns (uint256 initialA, uint256 futureA, uint256 initialATime, uint256 futureATime, uint256 swapFee, uint256 adminFee, address lpToken); - function transferOwnership(address newOwner) external; - function unpause() external; - function withdrawAdminFees() external; -} \ No newline at end of file diff --git a/src/hardhat/old_contracts/Misc_AMOs/compound/IComptroller.sol b/src/hardhat/old_contracts/Misc_AMOs/compound/IComptroller.sol deleted file mode 100644 index d1e6fb2e..00000000 --- a/src/hardhat/old_contracts/Misc_AMOs/compound/IComptroller.sol +++ /dev/null @@ -1,47 +0,0 @@ -// SPDX-License-Identifier: GPL-2.0-or-later -pragma solidity >=0.6.11; - -// Original at https://etherscan.io/address/0xbe7616B06f71e363A310Aa8CE8aD99654401ead7#code -// Address [0x3d9819210A31b4961b30EF54bE2aeD79B9c9Cd3B] used is a proxy -// Some functions were omitted for brevity. See the contract for details - - -interface IComptroller { - function SingleAssetDynamicRainMakerContractHash() external view returns (bytes32); - function _acceptAdmin() external returns (uint256); - function _setDynamicCompSpeed(address cToken, uint256 compSupplySpeed, uint256 compBorrowSpeed) external; - function _setDynamicCompSpeeds(address[] memory _cTokens, uint256[] memory _compSupplySpeeds, uint256[] memory _compBorrowSpeeds) external; - function _setLnIncentiveToken(address incentiveTokenAddress) external; - function _setPendingAdmin(address newPendingAdmin) external returns (uint256); - function _supportMarket(address cToken) external; - function admin() external view returns (address); - function allMarkets(uint256) external view returns (address); - function claimComp(address holder, address[] memory cTokens) external; - function claimComp(address[] memory holders, address[] memory cTokens, bool borrowers, bool suppliers) external; - function claimComp(address holder) external; - function compAccrued(address) external view returns (uint256); - function compBorrowSpeeds(address) external view returns (uint256); - function compBorrowState(address) external view returns (uint224 index, uint32 block); - function compBorrowerIndex(address, address) external view returns (uint256); - function compInitialIndex() external view returns (uint224); - function compSpeeds(address market) external view returns (uint256); - function compSupplierIndex(address, address) external view returns (uint256); - function compSupplySpeeds(address) external view returns (uint256); - function compSupplyState(address) external view returns (uint224 index, uint32 block); - function comptroller() external view returns (address); - function connect(bytes memory params) external; - function contractNameHash() external view returns (bytes32); - function distributeBorrowerComp(address cToken, address borrower, uint256 marketBorrowIndex_) external; - function distributeSupplierComp(address cToken, address supplier) external; - function getBlockNumber() external view returns (uint256); - function getLnIncentiveTokenAddress() external view returns (address); - function isListed(address) external view returns (bool); - function isRainMaker() external view returns (bool); - function isRetired() external view returns (bool); - function lnIncentiveTokenAddress() external view returns (address); - function pendingAdmin() external view returns (address); - function retire(bytes memory params) external; - function retireRainMaker() external; - function updateCompBorrowIndex(address cToken, uint256 marketBorrowIndex_) external; - function updateCompSupplyIndex(address cToken) external; -} diff --git a/src/hardhat/old_contracts/Misc_AMOs/compound/IcUSDC_Partial.sol b/src/hardhat/old_contracts/Misc_AMOs/compound/IcUSDC_Partial.sol deleted file mode 100644 index 558691ba..00000000 --- a/src/hardhat/old_contracts/Misc_AMOs/compound/IcUSDC_Partial.sol +++ /dev/null @@ -1,19 +0,0 @@ -// SPDX-License-Identifier: GPL-2.0-or-later -pragma solidity >=0.6.11; -import '../../ERC20/IERC20.sol'; - -// Original at https://etherscan.io/address/0x39aa39c021dfbae8fac545936693ac917d5e7563#code -// Some functions were omitted for brevity. See the contract for details -// https://compound.finance/docs/ctokens -interface IcUSDC_Partial is IERC20 { - function mint(uint mintAmount) external returns (uint); - - // redeemAmount = # of cUSDC - function redeem(uint redeemAmount) external returns (uint); - - // redeemAmount = # of USDC - function redeemUnderlying(uint redeemAmount) external returns (uint); - - // Multiply this by the E8 balance of cUSDC, then divide the product by E16 - function exchangeRateStored() external view returns (uint); -} diff --git a/src/hardhat/old_contracts/Misc_AMOs/gelato/IGUniPool.sol b/src/hardhat/old_contracts/Misc_AMOs/gelato/IGUniPool.sol deleted file mode 100644 index afda7546..00000000 --- a/src/hardhat/old_contracts/Misc_AMOs/gelato/IGUniPool.sol +++ /dev/null @@ -1,50 +0,0 @@ -// SPDX-License-Identifier: GPL-2.0-or-later -pragma solidity >=0.8.0; -import { IERC20 } from "../../ERC20/IERC20.sol"; -import { IUniswapV3Pool } from "../../Uniswap_V3/IUniswapV3Pool.sol"; - -interface IGUniPool { - function mint(uint256 mintAmount, address receiver) - external - returns ( - uint256 amount0, - uint256 amount1, - uint128 liquidityMinted - ); - - function burn(uint256 burnAmount, address receiver) - external - returns ( - uint256 amount0, - uint256 amount1, - uint128 liquidityBurned - ); - - function allowance(address owner, address spender) external view returns (uint256); - function approve(address spender, uint256 amount) external returns (bool); - function token0() external view returns (IERC20); - function token1() external view returns (IERC20); - function upperTick() external view returns (int24); - function lowerTick() external view returns (int24); - function pool() external view returns (IUniswapV3Pool); - function decimals() external view returns (uint256); - function totalSupply() external view returns (uint256); - function balanceOf(address account) external view returns (uint256); - function transfer(address recipient, uint256 amount) external returns (bool); - - function getMintAmounts(uint256 amount0Max, uint256 amount1Max) - external - view - returns ( - uint256 amount0, - uint256 amount1, - uint256 mintAmount - ); - - function getUnderlyingBalances() - external - view - returns (uint256 amount0, uint256 amount1); - - function getPositionID() external view returns (bytes32 positionID); -} \ No newline at end of file diff --git a/src/hardhat/old_contracts/Misc_AMOs/mstable/IFeederPool.sol b/src/hardhat/old_contracts/Misc_AMOs/mstable/IFeederPool.sol deleted file mode 100644 index 616ad131..00000000 --- a/src/hardhat/old_contracts/Misc_AMOs/mstable/IFeederPool.sol +++ /dev/null @@ -1,78 +0,0 @@ -// SPDX-License-Identifier: GPL-2.0-or-later -pragma solidity >=0.6.11; - -interface IFeederPool { - - enum BassetStatus { - Default, - Normal, - BrokenBelowPeg, - BrokenAbovePeg, - Blacklisted, - Liquidating, - Liquidated, - Failed - } - - struct BassetPersonal { - // Address of the bAsset - address addr; - // Address of the bAsset - address integrator; - // An ERC20 can charge transfer fee, for example USDT, DGX tokens. - bool hasTxFee; // takes a byte in storage - // Status of the bAsset - BassetStatus status; - } - - struct BassetData { - // 1 Basset * ratio / ratioScale == x Masset (relative value) - // If ratio == 10e8 then 1 bAsset = 10 mAssets - // A ratio is divised as 10^(18-tokenDecimals) * measurementMultiple(relative value of 1 base unit) - uint128 ratio; - // Amount of the Basset that is held in Collateral - uint128 vaultBalance; - } - - function allowance(address owner, address spender) external view returns (uint256); - function approve(address spender, uint256 amount) external returns (bool); - function balanceOf(address account) external view returns (uint256); - function collectPendingFees() external; - function collectPlatformInterest() external returns (uint256 mintAmount, uint256 newSupply); - // function data() external view returns (uint256 swapFee, uint256 redemptionFee, uint256 govFee, uint256 pendingFees, uint256 cacheSize, tuple ampData, tuple weightLimits); - function decimals() external view returns (uint8); - function decreaseAllowance(address spender, uint256 subtractedValue) external returns (bool); - function getBasset(address _bAsset) external view returns (BassetPersonal memory personal, BassetData memory data); - function getBassets() external view returns (BassetPersonal[] memory personal, BassetData[] memory data); - // function getConfig() external view returns (tuple config); - // function getMintMultiOutput(address[] _inputs, uint256[] _inputQuantities) external view returns (uint256 mintOutput); - function getMintOutput(address _input, uint256 _inputQuantity) external view returns (uint256 mintOutput); - function getPrice() external view returns (uint256 price, uint256 k); - // function getRedeemExactBassetsOutput(address[] _outputs, uint256[] _outputQuantities) external view returns (uint256 fpTokenQuantity); - function getRedeemOutput(address _output, uint256 _fpTokenQuantity) external view returns (uint256 bAssetOutput); - function getSwapOutput(address _input, address _output, uint256 _inputQuantity) external view returns (uint256 swapOutput); - function increaseAllowance(address spender, uint256 addedValue) external returns (bool); - // function initialize(string _nameArg, string _symbolArg, tuple _mAsset, tuple _fAsset, address[] _mpAssets, tuple _config) external; - function mAsset() external view returns (address); - // function migrateBassets(address[] _bAssets, address _newIntegration) external; - function mint(address _input, uint256 _inputQuantity, uint256 _minOutputQuantity, address _recipient) external returns (uint256 mintOutput); - // function mintMulti(address[] _inputs, uint256[] _inputQuantities, uint256 _minOutputQuantity, address _recipient) external returns (uint256 mintOutput); - function name() external view returns (string memory); - function nexus() external view returns (address); - function pause() external; - function paused() external view returns (bool); - function redeem(address _output, uint256 _fpTokenQuantity, uint256 _minOutputQuantity, address _recipient) external returns (uint256 outputQuantity); - // function redeemExactBassets(address[] _outputs, uint256[] _outputQuantities, uint256 _maxInputQuantity, address _recipient) external returns (uint256 fpTokenQuantity); - // function redeemProportionately(uint256 _inputQuantity, uint256[] _minOutputQuantities, address _recipient) external returns (uint256[] outputQuantities); - function setCacheSize(uint256 _cacheSize) external; - function setFees(uint256 _swapFee, uint256 _redemptionFee, uint256 _govFee) external; - function setWeightLimits(uint128 _min, uint128 _max) external; - function startRampA(uint256 _targetA, uint256 _rampEndTime) external; - function stopRampA() external; - function swap(address _input, address _output, uint256 _inputQuantity, uint256 _minOutputQuantity, address _recipient) external returns (uint256 swapOutput); - function symbol() external view returns (string memory); - function totalSupply() external view returns (uint256); - function transfer(address recipient, uint256 amount) external returns (bool); - function transferFrom(address sender, address recipient, uint256 amount) external returns (bool); - function unpause() external; -} diff --git a/src/hardhat/old_contracts/Misc_AMOs/snowball/ILPToken.sol b/src/hardhat/old_contracts/Misc_AMOs/snowball/ILPToken.sol deleted file mode 100644 index 8e2beae0..00000000 --- a/src/hardhat/old_contracts/Misc_AMOs/snowball/ILPToken.sol +++ /dev/null @@ -1,22 +0,0 @@ -// SPDX-License-Identifier: GPL-2.0-or-later -pragma solidity >=0.6.11; - -interface ILPToken { - function allowance(address owner, address spender) external view returns(uint256); - function approve(address spender, uint256 amount) external returns(bool); - function balanceOf(address account) external view returns(uint256); - function burn(uint256 amount) external; - function burnFrom(address account, uint256 amount) external; - function decimals() external view returns(uint8); - function decreaseAllowance(address spender, uint256 subtractedValue) external returns(bool); - function increaseAllowance(address spender, uint256 addedValue) external returns(bool); - function mint(address recipient, uint256 amount) external; - function name() external view returns(string memory); - function owner() external view returns(address); - function renounceOwnership() external; - function symbol() external view returns(string memory); - function totalSupply() external view returns(uint256); - function transfer(address recipient, uint256 amount) external returns(bool); - function transferFrom(address sender, address recipient, uint256 amount) external returns(bool); - function transferOwnership(address newOwner) external; -} diff --git a/src/hardhat/old_contracts/Misc_AMOs/snowball/ISwapFlashLoan.sol b/src/hardhat/old_contracts/Misc_AMOs/snowball/ISwapFlashLoan.sol deleted file mode 100644 index cc3f618a..00000000 --- a/src/hardhat/old_contracts/Misc_AMOs/snowball/ISwapFlashLoan.sol +++ /dev/null @@ -1,34 +0,0 @@ -// SPDX-License-Identifier: GPL-2.0-or-later -pragma solidity >=0.6.11; - -interface ISwapFlashLoan { - function MAX_BPS() external view returns(uint256); - function addLiquidity(uint256[] memory amounts, uint256 minToMint, uint256 deadline) external returns(uint256); - function calculateRemoveLiquidity(uint256 amount) external view returns(uint256[] memory); - function calculateRemoveLiquidityOneToken(uint256 tokenAmount, uint8 tokenIndex) external view returns(uint256 availableTokenAmount); - function calculateSwap(uint8 tokenIndexFrom, uint8 tokenIndexTo, uint256 dx) external view returns(uint256); - function calculateTokenAmount(uint256[] memory amounts, bool deposit) external view returns(uint256); - function getA() external view returns(uint256); - function getAPrecise() external view returns(uint256); - function getAdminBalance(uint256 index) external view returns(uint256); - function getToken(uint8 index) external view returns(address); - function getTokenBalance(uint8 index) external view returns(uint256); - function getTokenIndex(address tokenAddress) external view returns(uint8); - function getVirtualPrice() external view returns(uint256); - function owner() external view returns(address); - function pause() external; - function paused() external view returns(bool); - function protocolFeeShareBPS() external view returns(uint256); - function rampA(uint256 futureA, uint256 futureTime) external; - function removeLiquidityOneToken(uint256 tokenAmount, uint8 tokenIndex, uint256 minAmount, uint256 deadline) external returns(uint256); - function renounceOwnership() external; - function setAdminFee(uint256 newAdminFee) external; - function setFlashLoanFees(uint256 newFlashLoanFeeBPS, uint256 newProtocolFeeShareBPS) external; - function setSwapFee(uint256 newSwapFee) external; - function stopRampA() external; - function swap(uint8 tokenIndexFrom, uint8 tokenIndexTo, uint256 dx, uint256 minDy, uint256 deadline) external returns(uint256); - function swapStorage() external view returns(uint256 initialA, uint256 futureA, uint256 initialATime, uint256 futureATime, uint256 swapFee, uint256 adminFee, address lpToken); - function transferOwnership(address newOwner) external; - function unpause() external; - function withdrawAdminFees() external; -} diff --git a/src/hardhat/old_contracts/Misc_AMOs/vesper/IPoolRewards.sol b/src/hardhat/old_contracts/Misc_AMOs/vesper/IPoolRewards.sol deleted file mode 100644 index 0c9daceb..00000000 --- a/src/hardhat/old_contracts/Misc_AMOs/vesper/IPoolRewards.sol +++ /dev/null @@ -1,27 +0,0 @@ -// SPDX-License-Identifier: GPL-2.0-or-later -pragma solidity >=0.8.0; - -interface IPoolRewards { - function VERSION() external view returns(string memory); - function addRewardToken(address _newRewardToken) external; - function claimReward(address _account) external; - function claimable(address _account) external view returns(address[] memory _rewardTokens, uint256[] memory _claimableAmounts); - function getRewardTokens() external view returns(address[] memory); - function initialize(address _pool, address[] memory _rewardTokens) external; - function isRewardToken(address) external view returns(bool); - function lastTimeRewardApplicable(address _rewardToken) external view returns(uint256); - function lastUpdateTime(address) external view returns(uint256); - function notifyRewardAmount(address _rewardToken, uint256 _rewardAmount, uint256 _rewardDuration) external; - function notifyRewardAmount(address[] memory _rewardTokens, uint256[] memory _rewardAmounts, uint256[] memory _rewardDurations) external; - function periodFinish(address) external view returns(uint256); - function pool() external view returns(address); - function rewardDuration(address) external view returns(uint256); - function rewardForDuration() external view returns(address[] memory _rewardTokens, uint256[] memory _rewardForDuration); - function rewardPerToken() external view returns(address[] memory _rewardTokens, uint256[] memory _rewardPerTokenRate); - function rewardPerTokenStored(address) external view returns(uint256); - function rewardRates(address) external view returns(uint256); - function rewardTokens(uint256) external view returns(address); - function rewards(address, address) external view returns(uint256); - function updateReward(address _account) external; - function userRewardPerTokenPaid(address, address) external view returns(uint256); -} \ No newline at end of file diff --git a/src/hardhat/old_contracts/Misc_AMOs/vesper/IVPool.sol b/src/hardhat/old_contracts/Misc_AMOs/vesper/IVPool.sol deleted file mode 100644 index d4b8d40d..00000000 --- a/src/hardhat/old_contracts/Misc_AMOs/vesper/IVPool.sol +++ /dev/null @@ -1,66 +0,0 @@ -// SPDX-License-Identifier: GPL-2.0-or-later -pragma solidity >=0.8.0; - -interface IVPool { - function DOMAIN_SEPARATOR() external view returns (bytes32); - function MAX_BPS() external view returns (uint256); - function VERSION() external view returns (string memory); - function acceptGovernorship() external; - function addInList(address _listToUpdate, address _addressToAdd) external; - function allowance(address owner, address spender) external view returns (uint256); - function approve(address spender, uint256 amount) external returns (bool); - function availableCreditLimit(address _strategy) external view returns (uint256); - function balanceOf(address account) external view returns (uint256); - function convertFrom18(uint256 _amount) external view returns (uint256); - function decimalConversionFactor() external view returns (uint256); - function decimals() external view returns (uint8); - function decreaseAllowance(address spender, uint256 subtractedValue) external returns (bool); - function deposit(uint256 _amount) external; - function depositWithPermit(uint256 _amount, uint256 _deadline, uint8 _v, bytes32 _r, bytes32 _s) external; - function excessDebt(address _strategy) external view returns (uint256); - function feeCollector() external view returns (address); - function feeWhitelist() external view returns (address); - function getStrategies() external view returns (address[] memory); - function getWithdrawQueue() external view returns (address[] memory); - function governor() external view returns (address); - function increaseAllowance(address spender, uint256 addedValue) external returns (bool); - function initialize(string memory _name, string memory _symbol, address _token, address _poolAccountant, address _addressListFactory) external; - function keepers() external view returns (address); - function maintainers() external view returns (address); - function migrateStrategy(address _old, address _new) external; - function multiTransfer(address[] memory _recipients, uint256[] memory _amounts) external returns (bool); - function name() external view returns (string memory); - function nonces(address) external view returns (uint256); - function open() external; - function pause() external; - function paused() external view returns (bool); - function permit(address owner, address spender, uint256 value, uint256 deadline, uint8 v, bytes32 r, bytes32 s) external; - function poolAccountant() external view returns (address); - function poolRewards() external view returns (address); - function pricePerShare() external view returns (uint256); - function removeFromList(address _listToUpdate, address _addressToRemove) external; - function reportEarning(uint256 _profit, uint256 _loss, uint256 _payback) external; - function reportLoss(uint256 _loss) external; - function shutdown() external; - function stopEverything() external view returns (bool); - function strategy(address _strategy) external view returns (bool _active, uint256 _interestFee, uint256 _debtRate, uint256 _lastRebalance, uint256 _totalDebt, uint256 _totalLoss, uint256 _totalProfit, uint256 _debtRatio); - function sweepERC20(address _fromToken) external; - function symbol() external view returns (string memory); - function token() external view returns (address); - function tokensHere() external view returns (uint256); - function totalDebt() external view returns (uint256); - function totalDebtOf(address _strategy) external view returns (uint256); - function totalDebtRatio() external view returns (uint256); - function totalSupply() external view returns (uint256); - function totalValue() external view returns (uint256); - function transfer(address recipient, uint256 amount) external returns (bool); - function transferFrom(address sender, address recipient, uint256 amount) external returns (bool); - function transferGovernorship(address _proposedGovernor) external; - function unpause() external; - function updateFeeCollector(address _newFeeCollector) external; - function updatePoolRewards(address _newPoolRewards) external; - function updateWithdrawFee(uint256 _newWithdrawFee) external; - function whitelistedWithdraw(uint256 _shares) external; - function withdraw(uint256 _shares) external; - function withdrawFee() external view returns (uint256); -} \ No newline at end of file diff --git a/src/hardhat/old_contracts/Staking/FraxCrossChainFarm.sol b/src/hardhat/old_contracts/Staking/FraxCrossChainFarm.sol deleted file mode 100755 index 4d738a4f..00000000 --- a/src/hardhat/old_contracts/Staking/FraxCrossChainFarm.sol +++ /dev/null @@ -1,772 +0,0 @@ -// SPDX-License-Identifier: GPL-2.0-or-later -pragma solidity >=0.6.11; -pragma experimental ABIEncoderV2; - -// ==================================================================== -// | ______ _______ | -// | / _____________ __ __ / ____(_____ ____ _____ ________ | -// | / /_ / ___/ __ `| |/_/ / /_ / / __ \/ __ `/ __ \/ ___/ _ \ | -// | / __/ / / / /_/ _> < / __/ / / / / / /_/ / / / / /__/ __/ | -// | /_/ /_/ \__,_/_/|_| /_/ /_/_/ /_/\__,_/_/ /_/\___/\___/ | -// | | -// ==================================================================== -// ======================== FraxCrossChainFarm ======================== -// ==================================================================== -// No veFXS logic -// Because of lack of cross-chain reading of the gauge controller's emission rate, -// the contract sets its reward based on its token balance(s) -// Rolling 7 day reward period idea credit goes to denett -// rewardRate0 and rewardRate1 will look weird as people claim, but if you track the rewards actually emitted, -// the numbers do check out - -// Frax Finance: https://github.com/FraxFinance - -// Primary Author(s) -// Travis Moore: https://github.com/FortisFortuna - -// Reviewer(s) / Contributor(s) -// Jason Huan: https://github.com/jasonhuan -// Sam Kazemian: https://github.com/samkazemian -// Dennis: github.com/denett - -// Originally inspired by Synthetix.io, but heavily modified by the Frax team -// https://raw.githubusercontent.com/Synthetixio/synthetix/develop/contracts/StakingRewards.sol - -import "../Math/Math.sol"; -import "../Math/SafeMath.sol"; -import "../Curve/IveFXS.sol"; -import "../Curve/FraxCrossChainRewarder.sol"; -import "../ERC20/ERC20.sol"; -import '../Uniswap/TransferHelper.sol'; -import "../ERC20/SafeERC20.sol"; - -// import '../Misc_AMOs/impossible/IStableXPair.sol'; // Impossible -// import '../Misc_AMOs/mstable/IFeederPool.sol'; // mStable -import '../Misc_AMOs/snowball/ILPToken.sol'; // Snowball S4D - [Part 1] -import '../Misc_AMOs/snowball/ISwapFlashLoan.sol'; // Snowball S4D - [Part 2] -// import '../Uniswap/Interfaces/IUniswapV2Pair.sol'; // Uniswap V2 - -import "../Utils/ReentrancyGuard.sol"; - -// Inheritance -import "./Owned.sol"; - -contract FraxCrossChainFarm is Owned, ReentrancyGuard { - using SafeMath for uint256; - using SafeERC20 for ERC20; - - /* ========== STATE VARIABLES ========== */ - - // Instances - IveFXS public veFXS; - ERC20 public rewardsToken0; - ERC20 public rewardsToken1; - - // IStableXPair public stakingToken; // Impossible - // IFeederPool public stakingToken; // mStable - ILPToken public stakingToken; // Snowball S4D - // IUniswapV2Pair public stakingToken; // Uniswap V2 - - FraxCrossChainRewarder public rewarder; - - // FRAX - address public frax_address; - - // Constant for various precisions - uint256 private constant MULTIPLIER_PRECISION = 1e18; - - // Admin addresses - address public timelock_address; // Governance timelock address - address public controller_address; // Gauge controller - - // Time tracking - uint256 public periodFinish; - uint256 public lastUpdateTime; - - // Lock time and multiplier settings - uint256 public lock_max_multiplier = uint256(3e18); // E18. 1x = e18 - uint256 public lock_time_for_max_multiplier = 3 * 365 * 86400; // 3 years - uint256 public lock_time_min = 86400; // 1 * 86400 (1 day) - - // veFXS related - uint256 public vefxs_per_frax_for_max_boost = uint256(4e18); // E18. 4e18 means 4 veFXS must be held by the staker per 1 FRAX - uint256 public vefxs_max_multiplier = uint256(2e18); // E18. 1x = 1e18 - mapping(address => uint256) private _vefxsMultiplierStored; - - // Max reward per second - uint256 public rewardRate0; - uint256 public rewardRate1; - - // Reward period - uint256 public rewardsDuration = 604800; // 7 * 86400 (7 days). - - // Reward tracking - uint256 public ttlRew0Owed; - uint256 public ttlRew1Owed; - uint256 public ttlRew0Paid; - uint256 public ttlRew1Paid; - uint256 private rewardPerTokenStored0; - uint256 private rewardPerTokenStored1; - mapping(address => uint256) public userRewardPerTokenPaid0; - mapping(address => uint256) public userRewardPerTokenPaid1; - mapping(address => uint256) public rewards0; - mapping(address => uint256) public rewards1; - uint256 public lastRewardPull; - - // Balance tracking - uint256 private _total_liquidity_locked; - uint256 private _total_combined_weight; - mapping(address => uint256) private _locked_liquidity; - mapping(address => uint256) private _combined_weights; - - // Uniswap V2 / Impossible ONLY - bool frax_is_token0; - - // Stake tracking - mapping(address => LockedStake[]) private lockedStakes; - - // List of valid migrators (set by governance) - mapping(address => bool) public valid_migrators; - - // Stakers set which migrator(s) they want to use - mapping(address => mapping(address => bool)) public staker_allowed_migrators; - - // Greylisting of bad addresses - mapping(address => bool) public greylist; - - // Administrative booleans - bool public migrationsOn; // Used for migrations. Prevents new stakes, but allows LP and reward withdrawals - bool public stakesUnlocked; // Release locked stakes in case of system migration or emergency - bool public withdrawalsPaused; // For emergencies - bool public rewardsCollectionPaused; // For emergencies - bool public stakingPaused; // For emergencies - bool public isInitialized; - - /* ========== STRUCTS ========== */ - - struct LockedStake { - bytes32 kek_id; - uint256 start_timestamp; - uint256 liquidity; - uint256 ending_timestamp; - uint256 lock_multiplier; // 6 decimals of precision. 1x = 1000000 - } - - /* ========== MODIFIERS ========== */ - - modifier onlyByOwnGov() { - require(msg.sender == owner || msg.sender == timelock_address, "Not owner or timelock"); - _; - } - - modifier onlyByOwnGovCtrlr() { - require(msg.sender == owner || msg.sender == timelock_address || msg.sender == controller_address, "Not own, tlk, or ctrlr"); - _; - } - - modifier isMigrating() { - require(migrationsOn == true, "Not in migration"); - _; - } - - modifier notStakingPaused() { - require(stakingPaused == false, "Staking paused"); - _; - } - - modifier updateRewardAndBalance(address account, bool sync_too) { - _updateRewardAndBalance(account, sync_too); - _; - } - - /* ========== CONSTRUCTOR ========== */ - - constructor ( - address _owner, - address _rewardsToken0, - address _rewardsToken1, - address _stakingToken, - address _frax_address, - address _timelock_address, - address _rewarder_address - ) Owned(_owner){ - frax_address = _frax_address; - rewardsToken0 = ERC20(_rewardsToken0); - rewardsToken1 = ERC20(_rewardsToken1); - - // stakingToken = IStableXPair(_stakingToken); - // stakingToken = IFeederPool(_stakingToken); - stakingToken = ILPToken(_stakingToken); - // stakingToken = IUniswapV2Pair(_stakingToken); - - timelock_address = _timelock_address; - rewarder = FraxCrossChainRewarder(_rewarder_address); - - // // Uniswap V2 / Impossible ONLY - // // Need to know which token FRAX is (0 or 1) - // address token0 = stakingToken.token0(); - // if (token0 == frax_address) frax_is_token0 = true; - // else frax_is_token0 = false; - - // Other booleans - migrationsOn = false; - stakesUnlocked = false; - - // For initialization - lastUpdateTime = block.timestamp; - periodFinish = block.timestamp.add(rewardsDuration); - } - - /* ========== VIEWS ========== */ - - // Total locked liquidity tokens - function totalLiquidityLocked() external view returns (uint256) { - return _total_liquidity_locked; - } - - // Locked liquidity for a given account - function lockedLiquidityOf(address account) external view returns (uint256) { - return _locked_liquidity[account]; - } - - // Total 'balance' used for calculating the percent of the pool the account owns - // Takes into account the locked stake time multiplier and veFXS multiplier - function totalCombinedWeight() external view returns (uint256) { - return _total_combined_weight; - } - - // Combined weight for a specific account - function combinedWeightOf(address account) external view returns (uint256) { - return _combined_weights[account]; - } - - // All the locked stakes for a given account - function lockedStakesOf(address account) external view returns (LockedStake[] memory) { - return lockedStakes[account]; - } - - function lockMultiplier(uint256 secs) public view returns (uint256) { - uint256 lock_multiplier = - uint256(MULTIPLIER_PRECISION).add( - secs - .mul(lock_max_multiplier.sub(MULTIPLIER_PRECISION)) - .div(lock_time_for_max_multiplier) - ); - if (lock_multiplier > lock_max_multiplier) lock_multiplier = lock_max_multiplier; - return lock_multiplier; - } - - function lastTimeRewardApplicable() internal view returns (uint256) { - return Math.min(block.timestamp, periodFinish); - } - - function fraxPerLPToken() public view returns (uint256) { - // Get the amount of FRAX 'inside' of the lp tokens - uint256 frax_per_lp_token; - - // mStable - // ============================================ - // { - // uint256 total_frax_reserves; - // (, IFeederPool.BassetData memory vaultData) = (stakingToken.getBasset(frax_address)); - // total_frax_reserves = uint256(vaultData.vaultBalance); - // frax_per_lp_token = total_frax_reserves.mul(1e18).div(stakingToken.totalSupply()); - // } - - // Snowball S4D - // ============================================ - { - ISwapFlashLoan ISFL = ISwapFlashLoan(0xA0bE4f05E37617138Ec212D4fB0cD2A8778a535F); - uint256 total_frax = ISFL.getTokenBalance(ISFL.getTokenIndex(frax_address)); - frax_per_lp_token = total_frax.mul(1e18).div(stakingToken.totalSupply()); - } - - // Uniswap V2 & Impossible - // ============================================ - // { - // uint256 total_frax_reserves; - // (uint256 reserve0, uint256 reserve1, ) = (stakingToken.getReserves()); - // if (frax_is_token0) total_frax_reserves = reserve0; - // else total_frax_reserves = reserve1; - - // frax_per_lp_token = total_frax_reserves.mul(1e18).div(stakingToken.totalSupply()); - // } - - - - return frax_per_lp_token; - } - - function userStakedFrax(address account) public view returns (uint256) { - return (fraxPerLPToken()).mul(_locked_liquidity[account]).div(1e18); - } - - function minVeFXSForMaxBoost(address account) public view returns (uint256) { - return (userStakedFrax(account)).mul(vefxs_per_frax_for_max_boost).div(MULTIPLIER_PRECISION); - } - - function veFXSMultiplier(address account) public view returns (uint256) { - if (address(veFXS) != address(0)){ - // The claimer gets a boost depending on amount of veFXS they have relative to the amount of FRAX 'inside' - // of their locked LP tokens - uint256 veFXS_needed_for_max_boost = minVeFXSForMaxBoost(account); - if (veFXS_needed_for_max_boost > 0){ - uint256 user_vefxs_fraction = (veFXS.balanceOf(account)).mul(MULTIPLIER_PRECISION).div(veFXS_needed_for_max_boost); - - uint256 vefxs_multiplier = ((user_vefxs_fraction).mul(vefxs_max_multiplier)).div(MULTIPLIER_PRECISION); - - // Cap the boost to the vefxs_max_multiplier - if (vefxs_multiplier > vefxs_max_multiplier) vefxs_multiplier = vefxs_max_multiplier; - - return vefxs_multiplier; - } - else return 0; // This will happen with the first stake, when user_staked_frax is 0 - } - else return 0; - } - - function calcCurCombinedWeight(address account) public view - returns ( - uint256 old_combined_weight, - uint256 new_vefxs_multiplier, - uint256 new_combined_weight - ) - { - // Get the old combined weight - old_combined_weight = _combined_weights[account]; - - // Get the veFXS multipliers - // For the calculations, use the midpoint (analogous to midpoint Riemann sum) - new_vefxs_multiplier = veFXSMultiplier(account); - - uint256 midpoint_vefxs_multiplier; - if (_locked_liquidity[account] == 0 && _combined_weights[account] == 0) { - // This is only called for the first stake to make sure the veFXS multiplier is not cut in half - midpoint_vefxs_multiplier = new_vefxs_multiplier; - } - else { - midpoint_vefxs_multiplier = ((new_vefxs_multiplier).add(_vefxsMultiplierStored[account])).div(2); - } - - // Loop through the locked stakes, first by getting the liquidity * lock_multiplier portion - new_combined_weight = 0; - for (uint256 i = 0; i < lockedStakes[account].length; i++) { - LockedStake memory thisStake = lockedStakes[account][i]; - uint256 lock_multiplier = thisStake.lock_multiplier; - - // If the lock period is over, drop the lock multiplier down to 1x for the weight calculations - if (thisStake.ending_timestamp <= block.timestamp){ - lock_multiplier = MULTIPLIER_PRECISION; - } - - uint256 liquidity = thisStake.liquidity; - uint256 combined_boosted_amount = liquidity.mul(lock_multiplier.add(midpoint_vefxs_multiplier)).div(MULTIPLIER_PRECISION); - new_combined_weight = new_combined_weight.add(combined_boosted_amount); - } - } - - function rewardPerToken() public view returns (uint256, uint256) { - if (_total_liquidity_locked == 0 || _total_combined_weight == 0) { - return (rewardPerTokenStored0, rewardPerTokenStored1); - } - else { - return ( - rewardPerTokenStored0.add( - lastTimeRewardApplicable().sub(lastUpdateTime).mul(rewardRate0).mul(1e18).div(_total_combined_weight) - ), - rewardPerTokenStored1.add( - lastTimeRewardApplicable().sub(lastUpdateTime).mul(rewardRate1).mul(1e18).div(_total_combined_weight) - ) - ); - } - } - - function earned(address account) public view returns (uint256, uint256) { - (uint256 rew_per_token0, uint256 rew_per_token1) = rewardPerToken(); - if (_combined_weights[account] == 0){ - return (0, 0); - } - return ( - (_combined_weights[account].mul(rew_per_token0.sub(userRewardPerTokenPaid0[account]))).div(1e18).add(rewards0[account]), - (_combined_weights[account].mul(rew_per_token1.sub(userRewardPerTokenPaid1[account]))).div(1e18).add(rewards1[account]) - ); - } - - function getRewardForDuration() external view returns (uint256, uint256) { - return ( - rewardRate0.mul(rewardsDuration), - rewardRate1.mul(rewardsDuration) - ); - } - - /* ========== MUTATIVE FUNCTIONS ========== */ - - function _updateRewardAndBalance(address account, bool sync_too) internal { - // Need to retro-adjust some things if the period hasn't been renewed, then start a new one - if (sync_too){ - sync(); - } - - if (account != address(0)) { - // To keep the math correct, the user's combined weight must be recomputed to account for their - // ever-changing veFXS balance. - ( - uint256 old_combined_weight, - uint256 new_vefxs_multiplier, - uint256 new_combined_weight - ) = calcCurCombinedWeight(account); - - // Calculate the earnings first - _syncEarned(account); - - // Update the user's stored veFXS multipliers - _vefxsMultiplierStored[account] = new_vefxs_multiplier; - - // Update the user's and the global combined weights - if (new_combined_weight >= old_combined_weight) { - uint256 weight_diff = new_combined_weight.sub(old_combined_weight); - _total_combined_weight = _total_combined_weight.add(weight_diff); - _combined_weights[account] = old_combined_weight.add(weight_diff); - } else { - uint256 weight_diff = old_combined_weight.sub(new_combined_weight); - _total_combined_weight = _total_combined_weight.sub(weight_diff); - _combined_weights[account] = old_combined_weight.sub(weight_diff); - } - - } - } - - function _syncEarned(address account) internal { - if (account != address(0)) { - // Calculate the earnings - (uint256 earned0, uint256 earned1) = earned(account); - rewards0[account] = earned0; - rewards1[account] = earned1; - userRewardPerTokenPaid0[account] = rewardPerTokenStored0; - userRewardPerTokenPaid1[account] = rewardPerTokenStored1; - } - } - - // Staker can allow a migrator - function stakerAllowMigrator(address migrator_address) external { - require(valid_migrators[migrator_address], "Invalid migrator address"); - staker_allowed_migrators[msg.sender][migrator_address] = true; - } - - // Staker can disallow a previously-allowed migrator - function stakerDisallowMigrator(address migrator_address) external { - // Delete from the mapping - delete staker_allowed_migrators[msg.sender][migrator_address]; - } - - // Two different stake functions are needed because of delegateCall and msg.sender issues (important for migration) - function stakeLocked(uint256 liquidity, uint256 secs) nonReentrant public { - _stakeLocked(msg.sender, msg.sender, liquidity, secs, block.timestamp); - } - - // If this were not internal, and source_address had an infinite approve, this could be exploitable - // (pull funds from source_address and stake for an arbitrary staker_address) - function _stakeLocked( - address staker_address, - address source_address, - uint256 liquidity, - uint256 secs, - uint256 start_timestamp - ) internal updateRewardAndBalance(staker_address, true) { - require(!stakingPaused || valid_migrators[msg.sender] == true, "Staking paused or in migration"); - require(liquidity > 0, "Must stake more than zero"); - require(greylist[staker_address] == false, "Address has been greylisted"); - require(secs >= lock_time_min, "Minimum stake time not met"); - require(secs <= lock_time_for_max_multiplier,"Trying to lock for too long"); - - uint256 lock_multiplier = lockMultiplier(secs); - bytes32 kek_id = keccak256(abi.encodePacked(staker_address, start_timestamp, liquidity, _locked_liquidity[staker_address])); - lockedStakes[staker_address].push(LockedStake( - kek_id, - start_timestamp, - liquidity, - start_timestamp.add(secs), - lock_multiplier - )); - - // Pull the tokens from the source_address - TransferHelper.safeTransferFrom(address(stakingToken), source_address, address(this), liquidity); - - // Update liquidities - _total_liquidity_locked = _total_liquidity_locked.add(liquidity); - _locked_liquidity[staker_address] = _locked_liquidity[staker_address].add(liquidity); - - // Need to call to update the combined weights - _updateRewardAndBalance(staker_address, false); - - emit StakeLocked(staker_address, liquidity, secs, kek_id, source_address); - } - - // Two different withdrawLocked functions are needed because of delegateCall and msg.sender issues (important for migration) - function withdrawLocked(bytes32 kek_id) nonReentrant public { - require(withdrawalsPaused == false, "Withdrawals paused"); - _withdrawLocked(msg.sender, msg.sender, kek_id); - } - - // No withdrawer == msg.sender check needed since this is only internally callable and the checks are done in the wrapper - // functions like withdraw(), migrator_withdraw_unlocked() and migrator_withdraw_locked() - function _withdrawLocked(address staker_address, address destination_address, bytes32 kek_id) internal { - // Collect rewards first and then update the balances - _getReward(staker_address, destination_address); - - LockedStake memory thisStake; - thisStake.liquidity = 0; - uint theArrayIndex; - for (uint i = 0; i < lockedStakes[staker_address].length; i++){ - if (kek_id == lockedStakes[staker_address][i].kek_id){ - thisStake = lockedStakes[staker_address][i]; - theArrayIndex = i; - break; - } - } - require(thisStake.kek_id == kek_id, "Stake not found"); - require(block.timestamp >= thisStake.ending_timestamp || stakesUnlocked == true || valid_migrators[msg.sender] == true, "Stake is still locked!"); - - uint256 liquidity = thisStake.liquidity; - - if (liquidity > 0) { - // Update liquidities - _total_liquidity_locked = _total_liquidity_locked.sub(liquidity); - _locked_liquidity[staker_address] = _locked_liquidity[staker_address].sub(liquidity); - - // Remove the stake from the array - delete lockedStakes[staker_address][theArrayIndex]; - - // Need to call to update the combined weights - _updateRewardAndBalance(staker_address, false); - - // Give the tokens to the destination_address - // Should throw if insufficient balance - stakingToken.transfer(destination_address, liquidity); - - emit WithdrawLocked(staker_address, liquidity, kek_id, destination_address); - } - - } - - // Two different getReward functions are needed because of delegateCall and msg.sender issues (important for migration) - function getReward() external nonReentrant returns (uint256, uint256) { - require(rewardsCollectionPaused == false,"Rewards collection paused"); - return _getReward(msg.sender, msg.sender); - } - - // No withdrawer == msg.sender check needed since this is only internally callable - // This distinction is important for the migrator - function _getReward(address rewardee, address destination_address) internal updateRewardAndBalance(rewardee, true) returns (uint256 reward0, uint256 reward1) { - reward0 = rewards0[rewardee]; - reward1 = rewards1[rewardee]; - - if (reward0 > 0) { - rewards0[rewardee] = 0; - rewardsToken0.transfer(destination_address, reward0); - ttlRew0Paid += reward0; - emit RewardPaid(rewardee, reward0, address(rewardsToken0), destination_address); - } - - if (reward1 > 0) { - rewards1[rewardee] = 0; - rewardsToken1.transfer(destination_address, reward1); - ttlRew1Paid += reward1; - emit RewardPaid(rewardee, reward1, address(rewardsToken1), destination_address); - } - } - - // Quasi-notifyRewardAmount() logic - function syncRewards() internal { - // Bring in rewards, if applicable - if ((address(rewarder) != address(0)) && ((block.timestamp).sub(lastRewardPull) >= rewardsDuration)){ - rewarder.distributeReward(); - lastRewardPull = block.timestamp; - } - - // Get the current reward token balances - uint256 curr_bal_0 = rewardsToken0.balanceOf(address(this)); - uint256 curr_bal_1 = rewardsToken1.balanceOf(address(this)); - - // Update the owed amounts based off the old reward rates - // Anything over a week is zeroed - { - uint256 eligible_elapsed_time = Math.min((block.timestamp).sub(lastUpdateTime), rewardsDuration); - ttlRew0Owed += rewardRate0.mul(eligible_elapsed_time); - ttlRew1Owed += rewardRate1.mul(eligible_elapsed_time); - } - - // Update the stored amounts too - { - (uint256 reward0, uint256 reward1) = rewardPerToken(); - rewardPerTokenStored0 = reward0; - rewardPerTokenStored1 = reward1; - } - - // Set the reward rates based on the free amount of tokens - { - // Don't count unpaid rewards as free - uint256 unpaid0 = ttlRew0Owed.sub(ttlRew0Paid); - uint256 unpaid1 = ttlRew1Owed.sub(ttlRew1Paid); - - // Handle reward token0 - if (curr_bal_0 <= unpaid0){ - // token0 is depleted, so stop emitting - rewardRate0 = 0; - } - else { - uint256 free0 = curr_bal_0.sub(unpaid0); - rewardRate0 = (free0).div(rewardsDuration); - } - - // Handle reward token1 - if (curr_bal_1 <= unpaid1){ - // token1 is depleted, so stop emitting - rewardRate1 = 0; - } - else { - uint256 free1 = curr_bal_1.sub(unpaid1); - rewardRate1 = (free1).div(rewardsDuration); - } - } - } - - - function sync() public { - require(isInitialized, "Contract not initialized"); - - // Make sure the rewardRates are synced to the current FXS balance - syncRewards(); - - // Rolling 8 days rewards period - lastUpdateTime = block.timestamp; - periodFinish = (block.timestamp).add(rewardsDuration); - } - - /* ========== RESTRICTED FUNCTIONS ========== */ - - // Needed when first deploying the farm - // Make sure rewards are present - function initializeDefault() external onlyByOwnGovCtrlr { - require(!isInitialized, "Already initialized"); - isInitialized = true; - - // Bring in rewards, if applicable - if (address(rewarder) != address(0)){ - rewarder.distributeReward(); - lastRewardPull = block.timestamp; - } - - emit DefaultInitialization(); - } - - // Migrator can stake for someone else (they won't be able to withdraw it back though, only staker_address can). - function migrator_stakeLocked_for(address staker_address, uint256 amount, uint256 secs, uint256 start_timestamp) external isMigrating { - require(staker_allowed_migrators[staker_address][msg.sender] && valid_migrators[msg.sender], "Mig. invalid or unapproved"); - _stakeLocked(staker_address, msg.sender, amount, secs, start_timestamp); - } - - // Used for migrations - function migrator_withdraw_locked(address staker_address, bytes32 kek_id) external isMigrating { - require(staker_allowed_migrators[staker_address][msg.sender] && valid_migrators[msg.sender], "Mig. invalid or unapproved"); - _withdrawLocked(staker_address, msg.sender, kek_id); - } - - // Adds supported migrator address - function addMigrator(address migrator_address) external onlyByOwnGov { - valid_migrators[migrator_address] = true; - } - - // Remove a migrator address - function removeMigrator(address migrator_address) external onlyByOwnGov { - require(valid_migrators[migrator_address] == true, "Address nonexistent"); - - // Delete from the mapping - delete valid_migrators[migrator_address]; - } - - // Added to support recovering LP Rewards and other mistaken tokens from other systems to be distributed to holders - function recoverERC20(address tokenAddress, uint256 tokenAmount) external onlyByOwnGov { - // Admin cannot withdraw the staking token from the contract unless currently migrating - if(!migrationsOn){ - require(tokenAddress != address(stakingToken), "Not in migration"); // Only Governance / Timelock can trigger a migration - } - // Only the owner address can ever receive the recovery withdrawal - ERC20(tokenAddress).transfer(owner, tokenAmount); - emit Recovered(tokenAddress, tokenAmount); - } - - function setMultipliers(uint256 _lock_max_multiplier, uint256 _vefxs_max_multiplier, uint256 _vefxs_per_frax_for_max_boost) external onlyByOwnGov { - require(_lock_max_multiplier >= MULTIPLIER_PRECISION, "Mult must be >= MULTIPLIER_PRECISION"); - require(_vefxs_max_multiplier >= 0, "veFXS mul must be >= 0"); - require(_vefxs_per_frax_for_max_boost > 0, "veFXS pct max must be >= 0"); - - lock_max_multiplier = _lock_max_multiplier; - vefxs_max_multiplier = _vefxs_max_multiplier; - vefxs_per_frax_for_max_boost = _vefxs_per_frax_for_max_boost; - - emit MaxVeFXSMultiplier(vefxs_max_multiplier); - emit LockedStakeMaxMultiplierUpdated(lock_max_multiplier); - emit veFXSPerFraxForMaxBoostUpdated(vefxs_per_frax_for_max_boost); - } - - function setLockedStakeTimeForMinAndMaxMultiplier(uint256 _lock_time_for_max_multiplier, uint256 _lock_time_min) external onlyByOwnGov { - require(_lock_time_for_max_multiplier >= 1, "Mul max time must be >= 1"); - require(_lock_time_min >= 1, "Mul min time must be >= 1"); - - lock_time_for_max_multiplier = _lock_time_for_max_multiplier; - lock_time_min = _lock_time_min; - - emit LockedStakeTimeForMaxMultiplier(lock_time_for_max_multiplier); - emit LockedStakeMinTime(_lock_time_min); - } - - function greylistAddress(address _address) external onlyByOwnGov { - greylist[_address] = !(greylist[_address]); - } - - function unlockStakes() external onlyByOwnGov { - stakesUnlocked = !stakesUnlocked; - } - - function toggleMigrations() external onlyByOwnGov { - migrationsOn = !migrationsOn; - } - - function toggleStaking() external onlyByOwnGov { - stakingPaused = !stakingPaused; - } - - function toggleWithdrawals() external onlyByOwnGov { - withdrawalsPaused = !withdrawalsPaused; - } - - function toggleRewardsCollection() external onlyByOwnGov { - rewardsCollectionPaused = !rewardsCollectionPaused; - } - - function setTimelock(address _new_timelock) external onlyByOwnGov { - timelock_address = _new_timelock; - } - - function setController(address _controller_address) external onlyByOwnGov { - controller_address = _controller_address; - } - - function setVeFXS(address _vefxs_address) external onlyByOwnGov { - veFXS = IveFXS(_vefxs_address); - } - - /* ========== EVENTS ========== */ - - event StakeLocked(address indexed user, uint256 amount, uint256 secs, bytes32 kek_id, address source_address); - event WithdrawLocked(address indexed user, uint256 amount, bytes32 kek_id, address destination_address); - event RewardPaid(address indexed user, uint256 reward, address token_address, address destination_address); - event DefaultInitialization(); - event Recovered(address token, uint256 amount); - event LockedStakeMaxMultiplierUpdated(uint256 multiplier); - event LockedStakeTimeForMaxMultiplier(uint256 secs); - event LockedStakeMinTime(uint256 secs); - event MaxVeFXSMultiplier(uint256 multiplier); - event veFXSPerFraxForMaxBoostUpdated(uint256 scale_factor); -} diff --git a/src/hardhat/test/Fraxferry/Fraxferry-test.js b/src/hardhat/test/Fraxferry/Fraxferry-test.js index 7affb121..d681065e 100644 --- a/src/hardhat/test/Fraxferry/Fraxferry-test.js +++ b/src/hardhat/test/Fraxferry/Fraxferry-test.js @@ -22,7 +22,10 @@ describe("Fraxferry", function () { expect(contractBalanceAfter-contractBalanceBefore).to.equal(bridgeAmount); expect(BigInt(await contracts.ferryAB.noTransactions())).to.equal(BigInt(1)); var transaction = await contracts.ferryAB.transactions(0); - var fee = BigInt(await contracts.ferryAB.FEE()); + var fee_rate = BigInt(await contracts.ferryAB.FEE_RATE()); + var fee_min = BigInt(await contracts.ferryAB.FEE_MIN()); + var fee_max = BigInt(await contracts.ferryAB.FEE_MAX()); + var fee = bigIntMin(bigIntMax(bridgeAmount*fee_rate/BigInt(10000),fee_min),fee_max); var reducedDecimals = BigInt(await contracts.ferryAB.REDUCED_DECIMALS()); expect(transaction.user).to.equal(user.address); expect(BigInt(transaction.amount)*reducedDecimals).to.equal(bridgeAmount-fee); @@ -45,11 +48,14 @@ describe("Fraxferry", function () { var bridgeAmount = BigInt(1000*1e18); await contracts.token0.connect(user).approve(contracts.ferryAB.address,bridgeAmount); await contracts.ferryAB.connect(user).embarkWithRecipient(bridgeAmount,user2.address); - wait(100*60); + wait(3601); var nextBatch = await contracts.ferryAB.getNextBatch(0,10); await contracts.ferryBA.connect(captain).depart(nextBatch.start,nextBatch.end,nextBatch.hash); - wait(100*60); - var fee = BigInt(await contracts.ferryAB.FEE()); + wait(79201); + var fee_rate = BigInt(await contracts.ferryAB.FEE_RATE()); + var fee_min = BigInt(await contracts.ferryAB.FEE_MIN()); + var fee_max = BigInt(await contracts.ferryAB.FEE_MAX()); + var fee = bigIntMin(bigIntMax(bridgeAmount*fee_rate/BigInt(10000),fee_min),fee_max); var batch = await contracts.ferryAB.getBatchData(nextBatch.start,nextBatch.end); var userBalanceBefore = BigInt(await contracts.token1.balanceOf(user2.address)); await contracts.ferryBA.connect(firstOfficer).disembark(batch); @@ -97,11 +103,15 @@ describe("Fraxferry", function () { var bridgeAmount = BigInt(1000*1e18); await contracts.token0.connect(user).approve(contracts.ferryAB.address,bridgeAmount); await contracts.ferryAB.connect(user).embark(bridgeAmount); + wait(3601); var hash = await contracts.ferryAB.getTransactionsHash(0,0); var batch = await contracts.ferryAB.getBatchData(0,0); await contracts.ferryBA.connect(captain).depart(0,0,hash); - wait(60*60); - var fee = BigInt(await contracts.ferryAB.FEE()); + wait(79201); + var fee_rate = BigInt(await contracts.ferryAB.FEE_RATE()); + var fee_min = BigInt(await contracts.ferryAB.FEE_MIN()); + var fee_max = BigInt(await contracts.ferryAB.FEE_MAX()); + var fee = bigIntMin(bigIntMax(bridgeAmount*fee_rate/BigInt(10000),fee_min),fee_max); var userBalanceBefore = BigInt(await contracts.token1.balanceOf(user.address)); var contractBalanceBefore = BigInt(await contracts.token1.balanceOf(contracts.ferryBA.address)); await contracts.ferryBA.connect(firstOfficer).disembark(batch); @@ -120,6 +130,7 @@ describe("Fraxferry", function () { await contracts.ferryAB.connect(user).embark(bridgeAmount); await contracts.ferryAB.connect(user).embark(bridgeAmount*BigInt(2)); await contracts.ferryAB.connect(user).embark(bridgeAmount*BigInt(4)); + wait(3601); var batch1 = await contracts.ferryAB.getBatchData(0,0); var batch2 = await contracts.ferryAB.getBatchData(0,2); var batch3 = await contracts.ferryAB.getBatchData(1,1); @@ -128,7 +139,7 @@ describe("Fraxferry", function () { await contracts.ferryBA.connect(captain).depart(0,0,hash1); await contracts.ferryBA.connect(captain).depart(1,1,hash3); await expect(contracts.ferryBA.connect(firstOfficer).disembark(batch1)).to.be.revertedWith("Too soon"); - wait(60*60); + wait(79201); await expect(contracts.ferryBA.connect(firstOfficer).disembark(batch2)).to.be.revertedWith("Wrong size"); await expect(contracts.ferryBA.connect(firstOfficer).disembark(batch3)).to.be.revertedWith("Wrong start"); var batch4=[0,batch3[1],batch3[2],batch3[3]]; @@ -153,12 +164,12 @@ describe("Fraxferry", function () { await contracts.ferryAB.connect(user).embark(bridgeAmount); await contracts.ferryAB.connect(user).embark(bridgeAmount*BigInt(2)); await contracts.ferryAB.connect(user).embark(bridgeAmount*BigInt(4)); - wait(100*60); + wait(3601); var nextBatch = await contracts.ferryAB.getNextBatch(pos,10); if (pos!=0) await expect(contracts.ferryBA.connect(captain).depart(BigInt(nextBatch.start)-BigInt(1),BigInt(nextBatch.end)-BigInt(1),nextBatch.hash)).to.be.revertedWith("Wrong start"); await expect(contracts.ferryBA.connect(captain).depart(BigInt(nextBatch.start)+BigInt(1),BigInt(nextBatch.end)+BigInt(1),nextBatch.hash)).to.be.revertedWith("Wrong start"); await contracts.ferryBA.connect(captain).depart(nextBatch.start,nextBatch.end,nextBatch.hash); - wait(60*60); + wait(79201); var transactionsHash = await contracts.ferryAB.getTransactionsHash(nextBatch.start,nextBatch.end); await expect(transactionsHash).to.equal(nextBatch.hash); var batch = await contracts.ferryAB.getBatchData(nextBatch.start,nextBatch.end); @@ -167,6 +178,30 @@ describe("Fraxferry", function () { } }); + it("fees", async function () { + const [owner,user,captain,firstOfficer,crewmember] = await ethers.getSigners(); + var contracts = await setupContracts(); + var bridgeAmount = BigInt(10*1e18); + var fee_rate = BigInt(await contracts.ferryAB.FEE_RATE()); + var fee_min = BigInt(await contracts.ferryAB.FEE_MIN()); + var fee_max = BigInt(await contracts.ferryAB.FEE_MAX()); + for (var i=0;i<32;i++) { + await contracts.token0.mint(user.address,bridgeAmount); + await contracts.token0.connect(user).approve(contracts.ferryAB.address,bridgeAmount); + await contracts.ferryAB.connect(user).embarkWithRecipient(bridgeAmount,user.address); + bridgeAmount=bridgeAmount*BigInt(2); + } + wait(3601); + bridgeAmount = BigInt(10*1e18); + for (var i=0;i<32;i++) { + var batchAmount = BigInt(await contracts.ferryAB.getBatchAmount(i,i)); + var actualFee = bridgeAmount-batchAmount; + var fee = bigIntMin(bigIntMax(bridgeAmount*fee_rate/BigInt(10000),fee_min),fee_max); + expect(actualFee).to.equals(fee); + bridgeAmount=bridgeAmount*BigInt(2); + } + }); + it("jettison", async function () { const [owner,user,captain,firstOfficer,crewmember] = await ethers.getSigners(); var contracts = await setupContracts(); @@ -175,10 +210,11 @@ describe("Fraxferry", function () { await contracts.ferryAB.connect(user).embark(bridgeAmount); await contracts.ferryAB.connect(user).embark(bridgeAmount*BigInt(2)); await contracts.ferryAB.connect(user).embark(bridgeAmount*BigInt(4)); + wait(3601); var batch = await contracts.ferryAB.getBatchData(0,2); var hash = await contracts.ferryAB.getTransactionsHash(0,2); await contracts.ferryBA.connect(captain).depart(0,2,hash); - wait(60*60); + wait(79201); expect(await contracts.ferryBA.cancelled(1)).to.equal(false); await contracts.ferryBA.connect(owner).jettison(1,true); expect(await contracts.ferryBA.cancelled(1)).to.equal(true); @@ -191,8 +227,13 @@ describe("Fraxferry", function () { await contracts.ferryBA.connect(firstOfficer).disembark(batch); var userBalanceAfter = BigInt(await contracts.token1.balanceOf(user.address)); var contractBalanceAfter = BigInt(await contracts.token1.balanceOf(contracts.ferryBA.address)); - var fee = BigInt(await contracts.ferryAB.FEE()); - var expectedTransfered = bridgeAmount*BigInt(5)-fee*BigInt(2); + var fee_rate = BigInt(await contracts.ferryAB.FEE_RATE()); + var fee_min = BigInt(await contracts.ferryAB.FEE_MIN()); + var fee_max = BigInt(await contracts.ferryAB.FEE_MAX()); + var fee1 = bigIntMin(bigIntMax(bridgeAmount*fee_rate/BigInt(10000),fee_min),fee_max); + var fee2 = bigIntMin(bigIntMax(bridgeAmount*BigInt(2)*fee_rate/BigInt(10000),fee_min),fee_max); + var fee3 = bigIntMin(bigIntMax(bridgeAmount*BigInt(4)*fee_rate/BigInt(10000),fee_min),fee_max); + var expectedTransfered = bridgeAmount*BigInt(5)-fee1-fee3; expect(userBalanceAfter-userBalanceBefore).to.equal(expectedTransfered); expect(contractBalanceBefore-contractBalanceAfter).to.equal(expectedTransfered); }); @@ -206,10 +247,11 @@ describe("Fraxferry", function () { await contracts.ferryAB.connect(user).embark(bridgeAmount*BigInt(2)); await contracts.ferryAB.connect(user).embark(bridgeAmount*BigInt(4)); await contracts.ferryAB.connect(user).embark(bridgeAmount*BigInt(8)); + wait(3601); var batch = await contracts.ferryAB.getBatchData(0,2); var hash = await contracts.ferryAB.getTransactionsHash(0,2); await contracts.ferryBA.connect(captain).depart(0,2,hash); - wait(60*60); + wait(79201); await contracts.ferryBA.connect(firstOfficer).disembark(batch); await expect(contracts.ferryBA.connect(owner).jettison(0,true)).to.be.revertedWith("Transaction already executed"); await expect(contracts.ferryBA.connect(owner).jettison(1,true)).to.be.revertedWith("Transaction already executed"); @@ -230,6 +272,7 @@ describe("Fraxferry", function () { await contracts.ferryAB.connect(user).embark(bridgeAmount); var hash = await contracts.ferryAB.getTransactionsHash(0,0); await contracts.ferryAB.connect(user).embark(bridgeAmount*BigInt(2)); + wait(3601); var badHash = "0x1111111111111111111111111111111111111111111111111111111111111111"; var hash1 = await contracts.ferryAB.getTransactionsHash(0,0); var hash2 = await contracts.ferryAB.getTransactionsHash(1,1); @@ -243,7 +286,7 @@ describe("Fraxferry", function () { await expect(contracts.ferryBA.connect(user).disputeBatch(0,hash1)).to.be.revertedWith("Not crewmember"); await contracts.ferryBA.connect(crewmember).disputeBatch(0,badHash); await expect(contracts.ferryBA.connect(crewmember).disputeBatch(0,badHash)).to.be.revertedWith("Batch already disputed"); - wait(60*60); + wait(79201); await expect(contracts.ferryBA.connect(firstOfficer).disembark(batch1)).to.be.revertedWith("Paused"); await contracts.ferryBA.connect(owner).unPause(); await expect(contracts.ferryBA.connect(firstOfficer).disembark(batch1)).to.be.revertedWith("Batch disputed"); @@ -257,7 +300,7 @@ describe("Fraxferry", function () { expect(BigInt(await contracts.ferryBA.noBatches())).to.equal(BigInt(0)); await contracts.ferryBA.connect(captain).depart(0,0,hash1); - wait(60*60); + wait(79201); await contracts.ferryBA.connect(firstOfficer).disembark(batch1); }); @@ -289,6 +332,7 @@ describe("Fraxferry", function () { await contracts.ferryAB.connect(owner).unPause(); await contracts.ferryAB.connect(user).embark(bridgeAmount); + wait(3601); var hash = await contracts.ferryAB.getTransactionsHash(0,0); @@ -297,7 +341,7 @@ describe("Fraxferry", function () { await contracts.ferryBA.connect(owner).unPause(); await contracts.ferryBA.connect(captain).depart(0,0,hash); - wait(60*60); + wait(79201); await contracts.ferryBA.connect(owner).pause(); var batch = await contracts.ferryAB.getBatchData(0,0); @@ -311,25 +355,30 @@ describe("Fraxferry", function () { const [owner,user,captain,firstOfficer,crewmember,user2] = await ethers.getSigners(); var contracts = await setupContracts(); var bridgeAmount = BigInt(1000*1e18); - var fee = BigInt(await contracts.ferryAB.FEE()); + var fee_rate = BigInt(await contracts.ferryAB.FEE_RATE()); + var fee_min = BigInt(await contracts.ferryAB.FEE_MIN()); + var fee_max = BigInt(await contracts.ferryAB.FEE_MAX()); + var fee1 = bigIntMin(bigIntMax(bridgeAmount*fee_rate/BigInt(10000),fee_min),fee_max); + var fee2 = bigIntMin(bigIntMax(bridgeAmount*BigInt(2)*fee_rate/BigInt(10000),fee_min),fee_max); var reducedDecimals = BigInt(await contracts.ferryAB.REDUCED_DECIMALS()); await contracts.token0.connect(user).approve(contracts.ferryAB.address,bridgeAmount); var blockNumber1 = (await contracts.ferryAB.connect(user).embark(bridgeAmount)).blockNumber; var confirmedTime1 = (await ethers.provider.getBlock(blockNumber1)).timestamp; - wait(60); + wait(3601); await contracts.token0.connect(user2).approve(contracts.ferryAB.address,bridgeAmount*BigInt(2)); var blockNumber2 = (await contracts.ferryAB.connect(user2).embark(bridgeAmount*BigInt(2))).blockNumber; var confirmedTime2 = (await ethers.provider.getBlock(blockNumber2)).timestamp; + wait(3601); var batch = await contracts.ferryAB.getBatchData(0,1); expect(batch.startTransactionNo).to.be.equal(0); expect(batch.transactions.length).to.be.equal(2); expect(batch.transactions[0].user).to.be.equal(user.address); - expect(BigInt(batch.transactions[0].amount)*reducedDecimals).to.be.equal(bridgeAmount-fee); + expect(BigInt(batch.transactions[0].amount)*reducedDecimals).to.be.equal(bridgeAmount-fee1); expect(batch.transactions[0].timestamp).to.be.equal(confirmedTime1); expect(batch.transactions[1].user).to.be.equal(user2.address); - expect(BigInt(batch.transactions[1].amount)*reducedDecimals).to.be.equal(bridgeAmount*BigInt(2)-fee); + expect(BigInt(batch.transactions[1].amount)*reducedDecimals).to.be.equal(bridgeAmount*BigInt(2)-fee2); expect(batch.transactions[1].timestamp).to.be.equal(confirmedTime2); - expect(await contracts.ferryAB.getBatchAmount(0,1)).to.be.equals(bridgeAmount*BigInt(3)-fee*BigInt(2)); + expect(await contracts.ferryAB.getBatchAmount(0,1)).to.be.equals(bridgeAmount*BigInt(3)-fee1-fee2); }); it("getNextBatch", async function () { @@ -366,8 +415,11 @@ describe("Fraxferry", function () { it("getTransactionsHash", async function () { const [owner,user,captain,firstOfficer,crewmember,user2] = await ethers.getSigners(); var contracts = await setupContracts(); - var fee = BigInt(await contracts.ferryAB.FEE()); - var bridgeAmount = BigInt(5*1e10)+fee; + + var fee_rate = BigInt(await contracts.ferryAB.FEE_RATE()); + var fee_min = BigInt(await contracts.ferryAB.FEE_MIN()); + var fee_max = BigInt(await contracts.ferryAB.FEE_MAX()); + var bridgeAmount = BigInt(5*1e10)+fee_min; await contracts.token0.connect(user).approve(contracts.ferryAB.address,bridgeAmount); await contracts.ferryAB.connect(user).embark(bridgeAmount); await contracts.token0.connect(user2).approve(contracts.ferryAB.address,bridgeAmount*BigInt(2)); @@ -445,15 +497,21 @@ describe("Fraxferry", function () { var contracts = await setupContracts(); // setFee - var newFee = BigInt(2e18); - await expect(contracts.ferryAB.connect(user).setFee(newFee)).to.be.revertedWith("Not owner"); - await expect(contracts.ferryAB.connect(captain).setFee(newFee)).to.be.revertedWith("Not owner"); - await expect(contracts.ferryAB.connect(firstOfficer).setFee(newFee)).to.be.revertedWith("Not owner"); - await expect(contracts.ferryAB.connect(crewmember).setFee(newFee)).to.be.revertedWith("Not owner"); - - expect(await contracts.ferryAB.FEE()).to.not.equals(newFee); - await contracts.ferryAB.connect(owner).setFee(newFee); - expect(await contracts.ferryAB.FEE()).to.equals(newFee); + var new_fee_rate = BigInt(50); + var new_fee_min = BigInt(2e18); + var new_fee_max = BigInt(10e18); + await expect(contracts.ferryAB.connect(user).setFee(new_fee_rate,new_fee_min,new_fee_max)).to.be.revertedWith("Not owner"); + await expect(contracts.ferryAB.connect(captain).setFee(new_fee_rate,new_fee_min,new_fee_max)).to.be.revertedWith("Not owner"); + await expect(contracts.ferryAB.connect(firstOfficer).setFee(new_fee_rate,new_fee_min,new_fee_max)).to.be.revertedWith("Not owner"); + await expect(contracts.ferryAB.connect(crewmember).setFee(new_fee_rate,new_fee_min,new_fee_max)).to.be.revertedWith("Not owner"); + + expect(await contracts.ferryAB.FEE_RATE()).to.not.equals(new_fee_rate); + expect(await contracts.ferryAB.FEE_MIN()).to.not.equals(new_fee_min); + expect(await contracts.ferryAB.FEE_MAX()).to.not.equals(new_fee_max); + await contracts.ferryAB.connect(owner).setFee(new_fee_rate,new_fee_min,new_fee_max); + expect(await contracts.ferryAB.FEE_RATE()).to.equals(new_fee_rate); + expect(await contracts.ferryAB.FEE_MIN()).to.equals(new_fee_min); + expect(await contracts.ferryAB.FEE_MAX()).to.equals(new_fee_max); //setMinWaitPeriods var newWaitPeriodsAdd = BigInt(120*60); @@ -504,10 +562,11 @@ describe("Fraxferry", function () { }); for (var i=0;ib)return a; + else return b +} + async function setupContracts() { const [owner,user,captain,firstOfficer,crewmember,user2] = await ethers.getSigners(); diff --git a/src/hardhat/test/veFPIS-Tests.js b/src/hardhat/test/veFPIS-Tests.js index a4aea4e5..7bddad26 100644 --- a/src/hardhat/test/veFPIS-Tests.js +++ b/src/hardhat/test/veFPIS-Tests.js @@ -1622,4 +1622,4 @@ contract('veFPIS Tests', async (accounts) => { await veFPIS_instance.withdraw({ from: STAKING_OWNER }) }); -}); +}); \ No newline at end of file diff --git a/src/types/constants.ts b/src/types/constants.ts index 225dfc0e..b5fa11b1 100755 --- a/src/types/constants.ts +++ b/src/types/constants.ts @@ -2265,26 +2265,35 @@ export const CONTRACT_ADDRESSES = { fraxferry: { dummy_tkn: "", // for testing fraxferry_v1__ethereum_arbitrum__FRAX__ETH_SIDE: "0x85c5f05Ae4CB68190C695a22b292C3bA90696128", - fraxferry_v1__ethereum_arbitrum__frxETH__ETH_SIDE: "0x505603e2440b44C1602b44D0Eb8385399b3F7bab", - fraxferry_v1__ethereum_arbitrum__sfrxETH__ETH_SIDE: "0x8afd5082E0C24dEcEA39A9eFb14e4ACF4373D7D6", + fraxferry_v2__ethereum_arbitrum__FXS__ETH_SIDE: "0x4b8792aF00eaE944484bF572bc33029B2184a50C", + fraxferry_v2__ethereum_arbitrum__frxETH__ETH_SIDE: "0x505603e2440b44C1602b44D0Eb8385399b3F7bab", + fraxferry_v2__ethereum_arbitrum__sfrxETH__ETH_SIDE: "0x8afd5082E0C24dEcEA39A9eFb14e4ACF4373D7D6", fraxferry_v1__ethereum_aurora__FRAX__ETH_SIDE: "0x6ac96F65156281a9383455D704b58A74ea9C9eC4", fraxferry_v1__ethereum_avalanche__FRAX__ETH_SIDE: "0xA381d58e96eC3818c825E1fb264099448945CF8b", + fraxferry_v2__ethereum_avalanche__FXS__ETH_SIDE: "0x9Ab224996D25bfDCB91d838F7f1902698Ac0a742", fraxferry_v1__ethereum_boba__FRAX__ETH_SIDE: "0x3eF1d856EA62A2292B8690855042095a7aC48B4b", fraxferry_v1__ethereum_bsc__FRAX__ETH_SIDE: "0xDAe210BfB0cF8c81EDB4b459e2e0bA14D553e2D9", - fraxferry_v1__ethereum_bsc__frxETH__ETH_SIDE: "0xce4DbAF3fa72C962Ee1F371694109fc2a80B03f5", - fraxferry_v1__ethereum_bsc__sfrxETH__ETH_SIDE: "0x621D0e62f26314387f338A2509aFA3Ae3414661A", + fraxferry_v2__ethereum_bsc__FXS__ETH_SIDE: "0x9B62402Eb9A755677dEbdaE3639CB531c0Af0E5d", + fraxferry_v2__ethereum_bsc__frxETH__ETH_SIDE: "0xce4DbAF3fa72C962Ee1F371694109fc2a80B03f5", + fraxferry_v2__ethereum_bsc__sfrxETH__ETH_SIDE: "0x621D0e62f26314387f338A2509aFA3Ae3414661A", fraxferry_v1__ethereum_evmos__FRAX__ETH_SIDE: "0x2d2261f970F605C813f160E8BAEd455E9004A842", fraxferry_v1__ethereum_fantom__FRAX__ETH_SIDE: "0xfB788F9E20ef426a32A67986654750172A6c1788", + fraxferry_v2__ethereum_fantom__FXS__ETH_SIDE: "0x1313d143BE1ac25aCACEFF39Bf31877bccDb9622", + fraxferry_v2__ethereum_fantom__frxETH__ETH_SIDE: "0xaF4305d05e9B08b1D17894ce1ACE8235528f7EdE", + fraxferry_v2__ethereum_fantom__sfrxETH__ETH_SIDE: "0xB6b0290A39E2F896bBd8fC19cf17FE393e993dE4", fraxferry_v1__ethereum_moonbeam__FRAX__ETH_SIDE: "0xF1E1deA8F1053FD9C5F47f72F1f03977E17aF242", - fraxferry_v1__ethereum_moonbeam__frxETH__ETH_SIDE: "0x228567c10b7533C88057c10dDeA6349360F122c5", - fraxferry_v1__ethereum_moonbeam__sfrxETH__ETH_SIDE: "0xbc3A2bF4FA20bE2056DCE5BFB168970BA657F187", + fraxferry_v2__ethereum_moonbeam__FXS__ETH_SIDE: "0x2De1354c98880889643c4cA8B06FA2Fb8Fc1Fd7A", + fraxferry_v2__ethereum_moonbeam__frxETH__ETH_SIDE: "0x228567c10b7533C88057c10dDeA6349360F122c5", + fraxferry_v2__ethereum_moonbeam__sfrxETH__ETH_SIDE: "0xbc3A2bF4FA20bE2056DCE5BFB168970BA657F187", fraxferry_v1__ethereum_moonriver__FRAX__ETH_SIDE: "0x15ADa72A3B52A88E25DdD2CC2bA1120234e34bb0", fraxferry_v1__ethereum_optimism__FRAX__ETH_SIDE: "0x06Fa869caa1160754C6a0B744Da6454c5EA325d4", - fraxferry_v1__ethereum_optimism__frxETH__ETH_SIDE: "0x2F08F4645d2fA1fB12D2db8531c0c2EA0268BdE2", - fraxferry_v1__ethereum_optimism__sfrxETH__ETH_SIDE: "0x04ba20D2Cc47C63bce1166C2864F0241e4D0a0CC", + fraxferry_v2__ethereum_optimism__FXS__ETH_SIDE: "0x6650D5183C4Cd294a81B1F724c365b0c42f8270a", + fraxferry_v2__ethereum_optimism__frxETH__ETH_SIDE: "0x2F08F4645d2fA1fB12D2db8531c0c2EA0268BdE2", + fraxferry_v2__ethereum_optimism__sfrxETH__ETH_SIDE: "0x04ba20D2Cc47C63bce1166C2864F0241e4D0a0CC", fraxferry_v1__ethereum_polygon__FRAX__ETH_SIDE: "0x43959A388603DCb6B02Ca084A55d4c7f3b442c57", - fraxferry_v1__ethereum_polygon__frxETH__ETH_SIDE: "0x98f5E4b7D9eDF57A6ED41b334bD40B2eAa6B6e26", - fraxferry_v1__ethereum_polygon__sfrxETH__ETH_SIDE: "0x91Ff54EffF7564BA3884A91d0E293502D8E6fF90", + fraxferry_v2__ethereum_polygon__FXS__ETH_SIDE: "0xCa026e80F1E9e44da7ce3eD6aC2E9630260B9276", + fraxferry_v2__ethereum_polygon__frxETH__ETH_SIDE: "0x98f5E4b7D9eDF57A6ED41b334bD40B2eAa6B6e26", + fraxferry_v2__ethereum_polygon__sfrxETH__ETH_SIDE: "0x91Ff54EffF7564BA3884A91d0E293502D8E6fF90", captain: "0xBB437059584e30598b3AF0154472E47E6e2a45B9", first_officer: "0xBB437059584e30598b3AF0154472E47E6e2a45B9", crewmember: "0xBB437059584e30598b3AF0154472E47E6e2a45B9", @@ -2853,8 +2862,9 @@ export const CONTRACT_ADDRESSES = { fraxferry: { dummy_tkn: "0x57F0806Ad6E0264B3368413e8f3F1FbC5d1f9ff8", // for testing fraxferry_v1__ethereum_arbitrum__FRAX__ARBI_SIDE: "0x5a9BEf8CEa603aAc78a523fb245C1A9264D50706", - fraxferry_v1__ethereum_arbitrum__frxETH__ARBI_SIDE: "0x6c5Ae8dCaD1E101FB108a89954D7dC0B8991445b", - fraxferry_v1__ethereum_arbitrum__sfrxETH__ARBI_SIDE: "0xf1C16E1c01e62716884ef947063e9C7D44eC287F", + fraxferry_v2__ethereum_arbitrum__FXS__ARBI_SIDE: "0x078Dd77De4e0f480D7442495d55707cE071B4B09", + fraxferry_v2__ethereum_arbitrum__frxETH__ARBI_SIDE: "0x6c5Ae8dCaD1E101FB108a89954D7dC0B8991445b", + fraxferry_v2__ethereum_arbitrum__sfrxETH__ARBI_SIDE: "0xf1C16E1c01e62716884ef947063e9C7D44eC287F", ferry_to_polygon: "0xe57314D4405289FfC91306E4574C28b7394c4822", captain: "0xBB437059584e30598b3AF0154472E47E6e2a45B9", first_officer: "0xBB437059584e30598b3AF0154472E47E6e2a45B9", @@ -3036,6 +3046,7 @@ export const CONTRACT_ADDRESSES = { fraxferry: { dummy_tkn: "", // for testing fraxferry_v1__ethereum_avalanche__FRAX__AVAX_SIDE: "0x5dfF474Cea8A1FA929AC9A3cE2550376aF11d2A8", + fraxferry_v2__ethereum_avalanche__FXS__AVAX_SIDE: "0xC311b600bc926a3a8aC39945471427DFd9196930", captain: "0xBB437059584e30598b3AF0154472E47E6e2a45B9", first_officer: "0xBB437059584e30598b3AF0154472E47E6e2a45B9", crewmember: "0xBB437059584e30598b3AF0154472E47E6e2a45B9", @@ -3237,8 +3248,9 @@ export const CONTRACT_ADDRESSES = { fraxferry: { dummy_tkn: "", // for testing fraxferry_v1__ethereum_bsc__FRAX__BSC_SIDE: "0x10Ef54F944639764d2d5Efa272262f06cfaF09AE", - fraxferry_v1__ethereum_bsc__frxETH__BSC_SIDE: "0xB7C974530e59017DF7FA06b1EBD9e8a1E9aceC29", - fraxferry_v1__ethereum_bsc__sfrxETH__BSC_SIDE: "0x612015939f70C87E2041cc5daD909101c1A2383F", + fraxferry_v2__ethereum_bsc__FXS__BSC_SIDE: "0x5CD3d6465cd21b645F15175840f4659228C6195c", + fraxferry_v2__ethereum_bsc__frxETH__BSC_SIDE: "0xB7C974530e59017DF7FA06b1EBD9e8a1E9aceC29", + fraxferry_v2__ethereum_bsc__sfrxETH__BSC_SIDE: "0x612015939f70C87E2041cc5daD909101c1A2383F", captain: "0xBB437059584e30598b3AF0154472E47E6e2a45B9", first_officer: "0xBB437059584e30598b3AF0154472E47E6e2a45B9", crewmember: "0xBB437059584e30598b3AF0154472E47E6e2a45B9", @@ -3387,6 +3399,8 @@ export const CONTRACT_ADDRESSES = { FXS: "0x7d016eec9c25232b01F23EF992D98ca97fc2AF5a", FPI: "0xAb069E73f1AA50c37A7171D16dCc3614c705101B", // FOR TESTING FPIS: "0x3bb6B72dC07D7bFDa981F70C631482e9517CF6EE", // FOR TESTING + frxETH: "0x9E73F99EE061C8807F69f9c6CCc44ea3d8c373ee", + sfrxETH: "0xb90CCD563918fF900928dc529aA01046795ccb4A" }, bridge_tokens: { anyFRAX_V5: "0xBDba76fA2659c33ffCc2B0bc134c3A2c8a3Aa94d", // Router anyFRAX @@ -3415,6 +3429,9 @@ export const CONTRACT_ADDRESSES = { fraxferry: { dummy_tkn: "", // for testing fraxferry_v1__ethereum_fantom__FRAX__FTM_SIDE: "0x088Be716eCA24b143fCC9ed06C6ae9977A469CCE", + fraxferry_v2__ethereum_fantom__FXS__FTM_SIDE: "0x9b75031D46CdEe779B36F7F2f1857fd987C6C98c", + fraxferry_v2__ethereum_fantom__frxETH__FTM_SIDE: "0x12b6a8178C67B2835E280E1Ed709F64446cddb08", + fraxferry_v2__ethereum_fantom__sfrxETH__FTM_SIDE: "0x71e1FEeAA17b6557c5FaD60101ca12F81d03838C", captain: "0xBB437059584e30598b3AF0154472E47E6e2a45B9", first_officer: "0xBB437059584e30598b3AF0154472E47E6e2a45B9", crewmember: "0xBB437059584e30598b3AF0154472E47E6e2a45B9", @@ -3677,8 +3694,9 @@ export const CONTRACT_ADDRESSES = { fraxferry: { dummy_tkn: "", // for testing fraxferry_v1__ethereum_moonbeam__FRAX__MNBM_SIDE: "0xd545Fd6080db07eDdcC1F57dC28a53D930837A8d", - fraxferry_v1__ethereum_moonbeam__frxETH__MNBM_SIDE: "0x7c7Fd7412F5E79f4917163F78d5Ece5E2e923504", - fraxferry_v1__ethereum_moonbeam__sfrxETH__MNBM_SIDE: "0x78348E58582d0D1789da1621B79Fc62012485CAe", + fraxferry_v2__ethereum_moonbeam__FXS__MNBM_SIDE: "0x1E87990678f640BFfe5A118c331fEc296DDC8d89", + fraxferry_v2__ethereum_moonbeam__frxETH__MNBM_SIDE: "0x7c7Fd7412F5E79f4917163F78d5Ece5E2e923504", + fraxferry_v2__ethereum_moonbeam__sfrxETH__MNBM_SIDE: "0x78348E58582d0D1789da1621B79Fc62012485CAe", captain: "0xBB437059584e30598b3AF0154472E47E6e2a45B9", first_officer: "0xBB437059584e30598b3AF0154472E47E6e2a45B9", crewmember: "0xBB437059584e30598b3AF0154472E47E6e2a45B9", @@ -3858,8 +3876,9 @@ export const CONTRACT_ADDRESSES = { fraxferry: { dummy_tkn: "", // for testing fraxferry_v1__ethereum_optimism__FRAX__OPTI_SIDE: "0xb781FCaC4B8eF06891F9baD7dB9C178B1cE67967", - fraxferry_v1__ethereum_optimism__frxETH__OPTI_SIDE: "0xA4EFC2d768C9b9b0f97DD91a1555B345f69b39C0", - fraxferry_v1__ethereum_optimism__sfrxETH__OPTI_SIDE: "0x59b99CF08C01a6ADa0e0D819520719CA41B35c7C", + fraxferry_v2__ethereum_optimism__FXS__OPTI_SIDE: "0xdF6B3b56B1668dA507Db58C64b7153756cfE8e67", + fraxferry_v2__ethereum_optimism__frxETH__OPTI_SIDE: "0xA4EFC2d768C9b9b0f97DD91a1555B345f69b39C0", + fraxferry_v2__ethereum_optimism__sfrxETH__OPTI_SIDE: "0x59b99CF08C01a6ADa0e0D819520719CA41B35c7C", captain: "0xBB437059584e30598b3AF0154472E47E6e2a45B9", first_officer: "0xBB437059584e30598b3AF0154472E47E6e2a45B9", crewmember: "0xBB437059584e30598b3AF0154472E47E6e2a45B9", @@ -3962,8 +3981,9 @@ export const CONTRACT_ADDRESSES = { dummy_tkn: "0xC6525aC8fc37814Fd68216F1ea690b3dC2249e89", // for testing ferry_to_arbitrum: "0xA621dC655fFBD0dB9cb2564529324E5750f2A4F0", fraxferry_v1__ethereum_polygon__FRAX__POLY_SIDE: "0x6f7F18C15B97dC9Fac48Ae7F986989F97D25dbc7", - fraxferry_v1__ethereum_polygon__frxETH__POLY_SIDE: "0x2760a93993BaA3BC4d7C209db000d4685bdAD6B1", - fraxferry_v1__ethereum_polygon__sfrxETH__POLY_SIDE: "0x6728b24B4a4C42cabEe14a2BdFDc51271aa3Ae63", + fraxferry_v2__ethereum_polygon__FXS__POLY_SIDE: "0x6f71Ea0e9679389854010eE48a7D237cB430DBA4", + fraxferry_v2__ethereum_polygon__frxETH__POLY_SIDE: "0x2760a93993BaA3BC4d7C209db000d4685bdAD6B1", + fraxferry_v2__ethereum_polygon__sfrxETH__POLY_SIDE: "0x6728b24B4a4C42cabEe14a2BdFDc51271aa3Ae63", captain: "0xBB437059584e30598b3AF0154472E47E6e2a45B9", first_officer: "0xBB437059584e30598b3AF0154472E47E6e2a45B9", crewmember: "0xBB437059584e30598b3AF0154472E47E6e2a45B9", From 54e5ddbb12e5437705c156b37c352a89f6a3bcc0 Mon Sep 17 00:00:00 2001 From: Travis Moore <33413876+FortisFortuna@users.noreply.github.com> Date: Tue, 24 Jan 2023 14:48:41 -0800 Subject: [PATCH 06/37] Periodic update. Old contract cleanup + FXS Fraxferry prep (#189) * prep for crosschain frxETH * minor fix * compile fix * frxETH ferry stuff * periodic update --- .../Misc_AMOs/alphadex/IBBROARMasterchef.sol | 31 + .../Misc_AMOs/alphadex/IROARMasterchef.sol | 36 + .../contracts/Misc_AMOs/platypus/IAsset.sol | 37 + .../Misc_AMOs/saddle/IChildLiquidityGauge.sol | 69 ++ .../saddle/IChildLiquidityGaugeFactory.sol | 28 + .../Misc_AMOs/saddle/IGaugeMinter.sol | 31 + .../Misc_AMOs/saddle/IPoolRegistry.sol | 215 +++++ .../contracts/Misc_AMOs/saddle/IRootGauge.sol | 24 + .../Misc_AMOs/saddle/ISaddleMiniChefV2.sol | 37 + .../Misc_AMOs/stakedao/ICurveVault.sol | 36 + .../Misc_AMOs/stakedao/IStakeDAOGauge.sol | 56 ++ .../Misc_AMOs/stargate/ILPStaking.sol | 31 + .../stellaswap/IStellaDistributorV2.sol | 48 + .../stellaswap/IStellaSwapFlashLoan.sol | 47 + .../Misc_AMOs/thena/IThenaGaugeV2.sol | 46 + .../Staking/FraxUnifiedFarm_ERC20_V2.sol | 266 ++--- ...dFarm_ERC20_V2_BEFORE_MANUAL_MERGE.sol.old | 908 ++++++++++++++++++ .../CrossChainBridgeBacker_ARBI_AnySwap.sol | 62 -- .../FraxLiquidityBridger_ARBI_AnySwap.sol | 77 -- .../Bridges/Arbitrum/IL1CustomGateway.sol | 24 - .../Bridges/Arbitrum/IL2GatewayRouter.sol | 19 - .../old_contracts/Misc_AMOs/Convex_AMO_V2.sol | 486 ---------- .../__CROSSCHAIN/Arbitrum/CurveAMO_ARBI.sol | 300 ------ .../Arbitrum/SushiSwapLiquidityAMO_ARBI.sol | 490 ---------- .../Misc_AMOs/apeswap/IApePair.sol | 63 -- .../Misc_AMOs/apeswap/IApeRouter.sol | 29 - .../Misc_AMOs/apeswap/IMasterApe.sol | 33 - .../Misc_AMOs/axial/IAxialToken.sol | 31 - .../Misc_AMOs/axial/IMasterChefAxialV3.sol | 27 - .../Misc_AMOs/axial/ISwapFlashLoan.sol | 44 - .../Misc_AMOs/compound/IComptroller.sol | 47 - .../Misc_AMOs/compound/IcUSDC_Partial.sol | 19 - .../Misc_AMOs/gelato/IGUniPool.sol | 50 - .../Misc_AMOs/mstable/IFeederPool.sol | 78 -- .../Misc_AMOs/snowball/ILPToken.sol | 22 - .../Misc_AMOs/snowball/ISwapFlashLoan.sol | 34 - .../Misc_AMOs/vesper/IPoolRewards.sol | 27 - .../old_contracts/Misc_AMOs/vesper/IVPool.sol | 66 -- .../Staking/FraxCrossChainFarm.sol | 772 --------------- src/hardhat/test/Fraxferry/Fraxferry-test.js | 140 ++- src/hardhat/test/veFPIS-Tests.js | 2 +- src/types/constants.ts | 60 +- 42 files changed, 1922 insertions(+), 3026 deletions(-) create mode 100644 src/hardhat/contracts/Misc_AMOs/alphadex/IBBROARMasterchef.sol create mode 100644 src/hardhat/contracts/Misc_AMOs/alphadex/IROARMasterchef.sol create mode 100644 src/hardhat/contracts/Misc_AMOs/platypus/IAsset.sol create mode 100644 src/hardhat/contracts/Misc_AMOs/saddle/IChildLiquidityGauge.sol create mode 100644 src/hardhat/contracts/Misc_AMOs/saddle/IChildLiquidityGaugeFactory.sol create mode 100644 src/hardhat/contracts/Misc_AMOs/saddle/IGaugeMinter.sol create mode 100644 src/hardhat/contracts/Misc_AMOs/saddle/IPoolRegistry.sol create mode 100644 src/hardhat/contracts/Misc_AMOs/saddle/IRootGauge.sol create mode 100644 src/hardhat/contracts/Misc_AMOs/saddle/ISaddleMiniChefV2.sol create mode 100644 src/hardhat/contracts/Misc_AMOs/stakedao/ICurveVault.sol create mode 100644 src/hardhat/contracts/Misc_AMOs/stakedao/IStakeDAOGauge.sol create mode 100644 src/hardhat/contracts/Misc_AMOs/stargate/ILPStaking.sol create mode 100644 src/hardhat/contracts/Misc_AMOs/stellaswap/IStellaDistributorV2.sol create mode 100644 src/hardhat/contracts/Misc_AMOs/stellaswap/IStellaSwapFlashLoan.sol create mode 100644 src/hardhat/contracts/Misc_AMOs/thena/IThenaGaugeV2.sol create mode 100644 src/hardhat/contracts/Staking/FraxUnifiedFarm_ERC20_V2_BEFORE_MANUAL_MERGE.sol.old delete mode 100644 src/hardhat/old_contracts/Bridges/Arbitrum/CrossChainBridgeBacker_ARBI_AnySwap.sol delete mode 100644 src/hardhat/old_contracts/Bridges/Arbitrum/FraxLiquidityBridger_ARBI_AnySwap.sol delete mode 100644 src/hardhat/old_contracts/Bridges/Arbitrum/IL1CustomGateway.sol delete mode 100644 src/hardhat/old_contracts/Bridges/Arbitrum/IL2GatewayRouter.sol delete mode 100644 src/hardhat/old_contracts/Misc_AMOs/Convex_AMO_V2.sol delete mode 100644 src/hardhat/old_contracts/Misc_AMOs/__CROSSCHAIN/Arbitrum/CurveAMO_ARBI.sol delete mode 100644 src/hardhat/old_contracts/Misc_AMOs/__CROSSCHAIN/Arbitrum/SushiSwapLiquidityAMO_ARBI.sol delete mode 100644 src/hardhat/old_contracts/Misc_AMOs/apeswap/IApePair.sol delete mode 100644 src/hardhat/old_contracts/Misc_AMOs/apeswap/IApeRouter.sol delete mode 100644 src/hardhat/old_contracts/Misc_AMOs/apeswap/IMasterApe.sol delete mode 100644 src/hardhat/old_contracts/Misc_AMOs/axial/IAxialToken.sol delete mode 100644 src/hardhat/old_contracts/Misc_AMOs/axial/IMasterChefAxialV3.sol delete mode 100644 src/hardhat/old_contracts/Misc_AMOs/axial/ISwapFlashLoan.sol delete mode 100644 src/hardhat/old_contracts/Misc_AMOs/compound/IComptroller.sol delete mode 100644 src/hardhat/old_contracts/Misc_AMOs/compound/IcUSDC_Partial.sol delete mode 100644 src/hardhat/old_contracts/Misc_AMOs/gelato/IGUniPool.sol delete mode 100644 src/hardhat/old_contracts/Misc_AMOs/mstable/IFeederPool.sol delete mode 100644 src/hardhat/old_contracts/Misc_AMOs/snowball/ILPToken.sol delete mode 100644 src/hardhat/old_contracts/Misc_AMOs/snowball/ISwapFlashLoan.sol delete mode 100644 src/hardhat/old_contracts/Misc_AMOs/vesper/IPoolRewards.sol delete mode 100644 src/hardhat/old_contracts/Misc_AMOs/vesper/IVPool.sol delete mode 100755 src/hardhat/old_contracts/Staking/FraxCrossChainFarm.sol mode change 100755 => 100644 src/types/constants.ts diff --git a/src/hardhat/contracts/Misc_AMOs/alphadex/IBBROARMasterchef.sol b/src/hardhat/contracts/Misc_AMOs/alphadex/IBBROARMasterchef.sol new file mode 100644 index 00000000..1c7ad1c3 --- /dev/null +++ b/src/hardhat/contracts/Misc_AMOs/alphadex/IBBROARMasterchef.sol @@ -0,0 +1,31 @@ +// SPDX-License-Identifier: GPL-2.0-or-later +pragma solidity >=0.8.0; + +interface IBBROARMasterchef { + function add ( uint256 _allocPoint, address _lpToken, bool _withUpdate ) external; + function deposit ( uint256 _pid, uint256 _amount ) external; + function emergencyWithdraw ( uint256 _pid ) external; + function getAllPoolUserInfos ( uint256 _pid ) external view returns ( address[] memory, uint256[] memory ); + function getAllPoolUsers ( uint256 _pid ) external view returns ( address[] memory ); + function getMultiplier ( uint256 _from, uint256 _to ) external pure returns ( uint256 ); + function massUpdatePools ( ) external; + function migrate ( uint256 _pid ) external; + function migrator ( ) external view returns ( address ); + function owner ( ) external view returns ( address ); + function pendingKwik ( uint256 _pid, address _user ) external view returns ( uint256 ); + function poolInfo ( uint256 ) external view returns ( address lpToken, uint256 allocPoint, uint256 lastRewardBlock, uint256 accKwikPerShare ); + function poolLength ( ) external view returns ( uint256 ); + function renounceOwnership ( ) external; + function roar ( ) external view returns ( address ); + function roarPerBlock ( ) external view returns ( uint256 ); + function set ( uint256 _pid, uint256 _allocPoint, bool _withUpdate ) external; + function setMigrator ( address _migrator ) external; + function startBlock ( ) external view returns ( uint256 ); + function totalAllocPoint ( ) external view returns ( uint256 ); + function transferOwnership ( address newOwner ) external; + function updatePool ( uint256 _pid ) external; + function updateRewardFirstBlock ( uint256 _blockNumber ) external; + function updateRoar ( address _roar ) external; + function userInfo ( uint256, address ) external view returns ( uint256 amount, uint256 rewardDebt ); + function withdraw ( uint256 _pid, uint256 _amount ) external; +} diff --git a/src/hardhat/contracts/Misc_AMOs/alphadex/IROARMasterchef.sol b/src/hardhat/contracts/Misc_AMOs/alphadex/IROARMasterchef.sol new file mode 100644 index 00000000..4b68c8ee --- /dev/null +++ b/src/hardhat/contracts/Misc_AMOs/alphadex/IROARMasterchef.sol @@ -0,0 +1,36 @@ +// SPDX-License-Identifier: GPL-2.0-or-later +pragma solidity >=0.8.0; + +interface IROARMasterchef { + function BONUS_MULTIPLIER ( ) external view returns ( uint256 ); + function OLD_MASTER_CHEF ( ) external view returns ( address ); + function add ( uint256 _allocPoint, address _lpToken, bool _withUpdate ) external; + function bonusEndBlock ( ) external view returns ( uint256 ); + function claimWait ( ) external view returns ( uint256 ); + function deposit ( uint256 _pid, uint256 _amount ) external; + function emergencyWithdraw ( uint256 _pid ) external; + function getMultiplier ( uint256 _from, uint256 _to ) external view returns ( uint256 ); + function massUpdatePools ( ) external; + function migrate ( uint256 _pid ) external; + function migrator ( ) external view returns ( address ); + function owner ( ) external view returns ( address ); + function pendingKwik ( uint256 _pid, address _user ) external view returns ( uint256 ); + function poolInfo ( uint256 ) external view returns ( address lpToken, uint256 allocPoint, uint256 lastRewardBlock, uint256 accKwikPerShare ); + function poolLength ( ) external view returns ( uint256 ); + function renounceOwnership ( ) external; + function rewardWithdraw ( ) external; + function roar ( ) external view returns ( address ); + function roarPerBlock ( ) external view returns ( uint256 ); + function set ( uint256 _pid, uint256 _allocPoint, bool _withUpdate ) external; + function setBlockReward ( uint256 _tokens ) external; + function setMigrator ( address _migrator ) external; + function startBlock ( ) external view returns ( uint256 ); + function totalAllocPoint ( ) external view returns ( uint256 ); + function transferOwnership ( address newOwner ) external; + function updateClaimWait ( uint256 _claimWait ) external; + function updatePool ( uint256 _pid ) external; + function updateRewardBlock ( uint256 _blockNumber ) external; + function updateRewardFirstBlock ( uint256 _blockNumber ) external; + function userInfo ( uint256, address ) external view returns ( uint256 amount, uint256 rewardDebt, bool migrated ); + function withdraw ( uint256 _pid, uint256 _amount ) external; +} diff --git a/src/hardhat/contracts/Misc_AMOs/platypus/IAsset.sol b/src/hardhat/contracts/Misc_AMOs/platypus/IAsset.sol new file mode 100644 index 00000000..08053df6 --- /dev/null +++ b/src/hardhat/contracts/Misc_AMOs/platypus/IAsset.sol @@ -0,0 +1,37 @@ +// SPDX-License-Identifier: GPL-2.0-or-later +pragma solidity >=0.8.0; + +interface IAsset { + function addCash (uint256 amount) external; + function addLiability (uint256 amount) external; + function aggregateAccount () external view returns (address); + function allowance (address owner, address spender) external view returns (uint256); + function approve (address spender, uint256 amount) external returns (bool); + function balanceOf (address account) external view returns (uint256); + function burn (address to, uint256 amount) external; + function cash () external view returns (uint256); + function decimals () external view returns (uint8); + function decreaseAllowance (address spender, uint256 subtractedValue) external returns (bool); + function increaseAllowance (address spender, uint256 addedValue) external returns (bool); + function initialize (address underlyingToken_, string memory name_, string memory symbol_, address aggregateAccount_) external; + function liability () external view returns (uint256); + function maxSupply () external view returns (uint256); + function mint (address to, uint256 amount) external; + function name () external view returns (string memory); + function owner () external view returns (address); + function pool () external view returns (address); + function removeCash (uint256 amount) external; + function removeLiability (uint256 amount) external; + function renounceOwnership () external; + function setAggregateAccount (address aggregateAccount_) external; + function setMaxSupply (uint256 maxSupply_) external; + function setPool (address pool_) external; + function symbol () external view returns (string memory); + function totalSupply () external view returns (uint256); + function transfer (address recipient, uint256 amount) external returns (bool); + function transferFrom (address sender, address recipient, uint256 amount) external returns (bool); + function transferOwnership (address newOwner) external; + function transferUnderlyingToken (address to, uint256 amount) external; + function underlyingToken () external view returns (address); + function underlyingTokenBalance () external view returns (uint256); +} diff --git a/src/hardhat/contracts/Misc_AMOs/saddle/IChildLiquidityGauge.sol b/src/hardhat/contracts/Misc_AMOs/saddle/IChildLiquidityGauge.sol new file mode 100644 index 00000000..b40ab7a9 --- /dev/null +++ b/src/hardhat/contracts/Misc_AMOs/saddle/IChildLiquidityGauge.sol @@ -0,0 +1,69 @@ +// SPDX-License-Identifier: GPL-2.0-or-later +pragma solidity >=0.8.0; + +interface IChildLiquidityGauge { + struct Reward { + address distributor; + uint256 period_finish; + uint256 rate; + uint256 last_update; + uint256 integral; + } + + function deposit (uint256 _value) external; + function deposit (uint256 _value, address _user) external; + function deposit (uint256 _value, address _user, bool _claim_rewards) external; + function withdraw (uint256 _value) external; + function withdraw (uint256 _value, address _user) external; + function withdraw (uint256 _value, address _user, bool _claim_rewards) external; + function transferFrom (address _from, address _to, uint256 _value) external returns (bool); + function approve (address _spender, uint256 _value) external returns (bool); + function permit (address _owner, address _spender, uint256 _value, uint256 _deadline, uint8 _v, bytes32 _r, bytes32 _s) external returns (bool); + function transfer (address _to, uint256 _value) external returns (bool); + function increaseAllowance (address _spender, uint256 _added_value) external returns (bool); + function decreaseAllowance (address _spender, uint256 _subtracted_value) external returns (bool); + function user_checkpoint (address addr) external returns (bool); + function claimable_tokens (address addr) external returns (uint256); + function claimed_reward (address _addr, address _token) external view returns (uint256); + function claimable_reward (address _user, address _reward_token) external view returns (uint256); + function set_rewards_receiver (address _receiver) external; + function claim_rewards () external; + function claim_rewards (address _addr) external; + function claim_rewards (address _addr, address _receiver) external; + function add_reward (address _reward_token, address _distributor) external; + function set_reward_distributor (address _reward_token, address _distributor) external; + function deposit_reward_token (address _reward_token, uint256 _amount) external; + function set_manager (address _manager) external; + function update_voting_escrow () external; + function set_killed (bool _is_killed) external; + function decimals () external view returns (uint256); + function integrate_checkpoint () external view returns (uint256); + function version () external view returns (string memory); + function factory () external view returns (address); + function initialize (address _lp_token, address _manager, string memory _name) external; + function DOMAIN_SEPARATOR () external view returns (bytes32); + function nonces (address arg0) external view returns (uint256); + function name () external view returns (string memory); + function symbol () external view returns (string memory); + function allowance (address arg0, address arg1) external view returns (uint256); + function balanceOf (address arg0) external view returns (uint256); + function totalSupply () external view returns (uint256); + function lp_token () external view returns (address); + function manager () external view returns (address); + function voting_escrow () external view returns (address); + function working_balances (address arg0) external view returns (uint256); + function working_supply () external view returns (uint256); + function period () external view returns (uint256); + function period_timestamp (uint256 arg0) external view returns (uint256); + function integrate_checkpoint_of (address arg0) external view returns (uint256); + function integrate_fraction (address arg0) external view returns (uint256); + function integrate_inv_supply (uint256 arg0) external view returns (uint256); + function integrate_inv_supply_of (address arg0) external view returns (uint256); + function reward_count () external view returns (uint256); + function reward_tokens (uint256 arg0) external view returns (address); + function reward_data (address arg0) external view returns (Reward memory); + function rewards_receiver (address arg0) external view returns (address); + function reward_integral_for (address arg0, address arg1) external view returns (uint256); + function is_killed () external view returns (bool); + function inflation_rate (uint256 arg0) external view returns (uint256); +} diff --git a/src/hardhat/contracts/Misc_AMOs/saddle/IChildLiquidityGaugeFactory.sol b/src/hardhat/contracts/Misc_AMOs/saddle/IChildLiquidityGaugeFactory.sol new file mode 100644 index 00000000..db805401 --- /dev/null +++ b/src/hardhat/contracts/Misc_AMOs/saddle/IChildLiquidityGaugeFactory.sol @@ -0,0 +1,28 @@ +// SPDX-License-Identifier: GPL-2.0-or-later +pragma solidity >=0.8.0; + +interface IChildLiquidityGaugeFactory { + function mint (address _gauge) external; + function mint_many (address[32] memory _gauges) external; + function deploy_gauge (address _lp_token, bytes32 _salt, string memory _name) external returns (address); + function deploy_gauge (address _lp_token, bytes32 _salt, string memory _name, address _manager) external returns (address); + function set_voting_escrow (address _voting_escrow) external; + function set_implementation (address _implementation) external; + function set_mirrored (address _gauge, bool _mirrored) external; + function set_call_proxy (address _new_call_proxy) external; + function commit_transfer_ownership (address _future_owner) external; + function accept_transfer_ownership () external; + function is_valid_gauge (address _gauge) external view returns (bool); + function is_mirrored (address _gauge) external view returns (bool); + function last_request (address _gauge) external view returns (uint256); + function get_implementation () external view returns (address); + function voting_escrow () external view returns (address); + function owner () external view returns (address); + function future_owner () external view returns (address); + function call_proxy () external view returns (address); + function gauge_data (address arg0) external view returns (uint256); + function minted (address arg0, address arg1) external view returns (uint256); + function get_gauge_from_lp_token (address arg0) external view returns (address); + function get_gauge_count () external view returns (uint256); + function get_gauge (uint256 arg0) external view returns (address); +} diff --git a/src/hardhat/contracts/Misc_AMOs/saddle/IGaugeMinter.sol b/src/hardhat/contracts/Misc_AMOs/saddle/IGaugeMinter.sol new file mode 100644 index 00000000..97577098 --- /dev/null +++ b/src/hardhat/contracts/Misc_AMOs/saddle/IGaugeMinter.sol @@ -0,0 +1,31 @@ +// SPDX-License-Identifier: GPL-2.0-or-later +pragma solidity >=0.8.0; + +interface IGaugeMinter { + function update_mining_parameters () external; + function start_epoch_time_write () external returns (uint256); + function future_epoch_time_write () external returns (uint256); + function mint (address gauge_addr) external; + function mint_many (address[8] memory gauge_addrs) external; + function mint_for (address gauge_addr, address _for) external; + function toggle_approve_mint (address minting_user) external; + function recover_balance (address _coin) external returns (bool); + function commit_next_emission (uint256 _rate_per_week) external; + function commit_transfer_emergency_return (address addr) external; + function apply_transfer_emergency_return () external; + function commit_transfer_ownership (address addr) external; + function apply_transfer_ownership () external; + function mining_epoch () external view returns (int128); + function start_epoch_time () external view returns (uint256); + function rate () external view returns (uint256); + function committed_rate () external view returns (uint256); + function is_start () external view returns (bool); + function token () external view returns (address); + function controller () external view returns (address); + function minted (address arg0, address arg1) external view returns (uint256); + function allowed_to_mint_for (address arg0, address arg1) external view returns (bool); + function future_emergency_return () external view returns (address); + function emergency_return () external view returns (address); + function admin () external view returns (address); + function future_admin () external view returns (address); +} diff --git a/src/hardhat/contracts/Misc_AMOs/saddle/IPoolRegistry.sol b/src/hardhat/contracts/Misc_AMOs/saddle/IPoolRegistry.sol new file mode 100644 index 00000000..32cd534f --- /dev/null +++ b/src/hardhat/contracts/Misc_AMOs/saddle/IPoolRegistry.sol @@ -0,0 +1,215 @@ +// SPDX-License-Identifier: MIT + +pragma solidity ^0.8.0; +pragma experimental ABIEncoderV2; + +import "@openzeppelin/contracts/token/ERC20/IERC20.sol"; + +interface IPoolRegistry { + /* Structs */ + + struct PoolInputData { + address poolAddress; + uint8 typeOfAsset; + bytes32 poolName; + address targetAddress; + address metaSwapDepositAddress; + bool isSaddleApproved; + bool isRemoved; + bool isGuarded; + } + + struct PoolData { + address poolAddress; + address lpToken; + uint8 typeOfAsset; + bytes32 poolName; + address targetAddress; + IERC20[] tokens; + IERC20[] underlyingTokens; + address basePoolAddress; + address metaSwapDepositAddress; + bool isSaddleApproved; + bool isRemoved; + bool isGuarded; + } + + struct SwapStorageData { + uint256 initialA; + uint256 futureA; + uint256 initialATime; + uint256 futureATime; + uint256 swapFee; + uint256 adminFee; + address lpToken; + } + + /* Public Variables */ + + /** + * @notice Returns the index + 1 of the pool address in the registry + * @param poolAddress address to look for + */ + function poolsIndexOfPlusOne(address poolAddress) + external + returns (uint256); + + /** + * @notice Returns the index + 1 of the pool name in the registry + * @param poolName pool name in bytes32 format to look for + */ + function poolsIndexOfNamePlusOne(bytes32 poolName) + external + returns (uint256); + + /* Functions */ + + /** + * @notice Add a new pool to the registry + * @param inputData PoolInputData struct for the new pool + * @dev Before adding a meta pool, the user must first add the underlying base pool. + * Only Swap and MetaSwap contracts need to be added. + */ + function addPool(PoolInputData memory inputData) external payable; + + /** + * @notice Add a new pool to the registry + * @param data PoolInputData struct for the new pool + * @dev Before adding a meta pool, the user must first add the underlying base pool. + * Only Swap and MetaSwap contracts need to be added. + */ + function addCommunityPool(PoolData memory data) external payable; + + /** + * @notice Approve community deployed pools to be upgraded as Saddle owned + * @dev since array entries are difficult to remove, we modify the entry to mark it + * as a Saddle owned pool. + * @param poolAddress address of the community pool + */ + function approvePool(address poolAddress) external payable; + + /** + * @notice Overwrite existing entry with new PoolData + * @param poolData new PoolData struct to store + */ + function updatePool(PoolData memory poolData) external payable; + + /** + * @notice Remove pool from the registry + * @dev Since arrays are not easily reducable, the entry will be marked as removed. + * @param poolAddress address of the pool to remove + */ + function removePool(address poolAddress) external payable; + + /** + * @notice Returns PoolData for given pool address + * @param poolAddress address of the pool to read + */ + function getPoolData(address poolAddress) + external + view + returns (PoolData memory); + + /** + * @notice Returns PoolData at given index + * @param index index of the pool to read + */ + function getPoolDataAtIndex(uint256 index) + external + view + returns (PoolData memory); + + /** + * @notice Returns PoolData with given name + * @param poolName name of the pool to read + */ + function getPoolDataByName(bytes32 poolName) + external + view + returns (PoolData memory); + + /** + * @notice Returns virtual price of the given pool address + * @param poolAddress address of the pool to read + */ + function getVirtualPrice(address poolAddress) + external + view + returns (uint256); + + /** + * @notice Returns A of the given pool address + * @param poolAddress address of the pool to read + */ + function getA(address poolAddress) external view returns (uint256); + + /** + * @notice Returns the paused status of the given pool address + * @param poolAddress address of the pool to read + */ + function getPaused(address poolAddress) external view returns (bool); + + /** + * @notice Returns the SwapStorage struct of the given pool address + * @param poolAddress address of the pool to read + */ + function getSwapStorage(address poolAddress) + external + view + returns (SwapStorageData memory swapStorageData); + + /** + * @notice Returns the tokens of the given pool address + * @param poolAddress address of the pool to read + */ + function getTokens(address poolAddress) + external + view + returns (IERC20[] memory); + + /** + * @notice Returns the underlying tokens of the given pool address. Base pools will return an empty array. + * @param poolAddress address of the pool to read + */ + function getUnderlyingTokens(address poolAddress) + external + view + returns (IERC20[] memory); + + /** + * @notice Returns number of entries in the registry. Includes removed pools + * in the list as well. + */ + function getPoolsLength() external view returns (uint256); + + /** + * @notice Returns an array of pool addresses that can swap between from and to + * @param from address of the token to swap from + * @param to address of the token to swap to + * @return eligiblePools array of pool addresses that can swap between from and to + */ + function getEligiblePools(address from, address to) + external + view + returns (address[] memory eligiblePools); + + /** + * @notice Returns an array of balances of the tokens + * @param poolAddress address of the pool to look up the token balances for + * @return balances array of token balances + */ + function getTokenBalances(address poolAddress) + external + view + returns (uint256[] memory balances); + + /** + * @notice Returns an array of balances of the tokens + * @param poolAddress address of the pool to look up the token balances for + * @return balances array of token balances + */ + function getUnderlyingTokenBalances(address poolAddress) + external + view + returns (uint256[] memory balances); +} \ No newline at end of file diff --git a/src/hardhat/contracts/Misc_AMOs/saddle/IRootGauge.sol b/src/hardhat/contracts/Misc_AMOs/saddle/IRootGauge.sol new file mode 100644 index 00000000..97c8a90e --- /dev/null +++ b/src/hardhat/contracts/Misc_AMOs/saddle/IRootGauge.sol @@ -0,0 +1,24 @@ +// SPDX-License-Identifier: GPL-2.0-or-later +pragma solidity >=0.8.0; + +interface IRootGauge { + struct InflationParams { + uint256 rate; + uint256 finish_time; + } + + function transmit_emissions () external; + function integrate_fraction (address _user) external view returns (uint256); + function user_checkpoint (address _user) external returns (bool); + function set_killed (bool _is_killed) external; + function update_bridger () external; + function initialize (address _bridger, uint256 _chain_id, string memory _name) external; + function chain_id () external view returns (uint256); + function bridger () external view returns (address); + function factory () external view returns (address); + function name () external view returns (string memory); + function inflation_params () external view returns (InflationParams memory); + function last_period () external view returns (uint256); + function total_emissions () external view returns (uint256); + function is_killed () external view returns (bool); +} diff --git a/src/hardhat/contracts/Misc_AMOs/saddle/ISaddleMiniChefV2.sol b/src/hardhat/contracts/Misc_AMOs/saddle/ISaddleMiniChefV2.sol new file mode 100644 index 00000000..efecd7fc --- /dev/null +++ b/src/hardhat/contracts/Misc_AMOs/saddle/ISaddleMiniChefV2.sol @@ -0,0 +1,37 @@ +// SPDX-License-Identifier: GPL-2.0-or-later +pragma solidity >=0.8.0; + +interface ISaddleMiniChefV2 { + struct PoolInfo { + address lpToken; // Address of LP token contract. + uint256 allocPoint; // How many allocation points assigned to this pool. SADDLE to distribute per block. + uint256 lastRewardBlock; // Last block number that SADDLE distribution occurs. + uint256 accSaddlePerShare; // Accumulated SADDLE per share, times 1e12. See below. + } + + function SADDLE () external view returns (address); + function add (uint256 allocPoint, address _lpToken, address _rewarder) external; + function batch (bytes[] memory calls, bool revertOnFail) external returns (bool[] memory successes, bytes[] memory results); + function claimOwnership () external; + function deposit (uint256 pid, uint256 amount, address to) external; + function emergencyWithdraw (uint256 pid, address to) external; + function harvest (uint256 pid, address to) external; + function lpToken (uint256) external view returns (address); + function massUpdatePools (uint256[] memory pids) external; + function owner () external view returns (address); + function pendingOwner () external view returns (address); + function pendingSaddle (uint256 _pid, address _user) external view returns (uint256 pending); + function permitToken (address token, address from, address to, uint256 amount, uint256 deadline, uint8 v, bytes32 r, bytes32 s) external; + function poolInfo (uint256) external view returns (uint128 accSaddlePerShare, uint64 lastRewardTime, uint64 allocPoint); + function poolLength () external view returns (uint256 pools); + function rewarder (uint256) external view returns (address); + function saddlePerSecond () external view returns (uint256); + function set (uint256 _pid, uint256 _allocPoint, address _rewarder, bool overwrite) external; + function setSaddlePerSecond (uint256 _saddlePerSecond) external; + function totalAllocPoint () external view returns (uint256); + function transferOwnership (address newOwner, bool direct, bool renounce) external; + function updatePool (uint256 pid) external returns (PoolInfo memory pool); + function userInfo (uint256, address) external view returns (uint256 amount, int256 rewardDebt); + function withdraw (uint256 pid, uint256 amount, address to) external; + function withdrawAndHarvest (uint256 pid, uint256 amount, address to) external; +} diff --git a/src/hardhat/contracts/Misc_AMOs/stakedao/ICurveVault.sol b/src/hardhat/contracts/Misc_AMOs/stakedao/ICurveVault.sol new file mode 100644 index 00000000..3538dd69 --- /dev/null +++ b/src/hardhat/contracts/Misc_AMOs/stakedao/ICurveVault.sol @@ -0,0 +1,36 @@ +// SPDX-License-Identifier: GPL-2.0-or-later +pragma solidity >=0.8.0; + +interface ICurveVault { + function MAX () external view returns (uint256); + function accumulatedFee () external view returns (uint256); + function allowance (address owner, address spender) external view returns (uint256); + function approve (address spender, uint256 amount) external returns (bool); + function available () external view returns (uint256); + function balanceOf (address account) external view returns (uint256); + function curveStrategy () external view returns (address); + function decimals () external view returns (uint8); + function decreaseAllowance (address spender, uint256 subtractedValue) external returns (bool); + function deposit (address _staker, uint256 _amount, bool _earn) external; + function governance () external view returns (address); + function increaseAllowance (address spender, uint256 addedValue) external returns (bool); + function init (address _token, address _governance, string memory name_, string memory symbol_, address _curveStrategy) external; + function keeperFee () external view returns (uint256); + function liquidityGauge () external view returns (address); + function min () external view returns (uint256); + function name () external view returns (string memory); + function setCurveStrategy (address _newStrat) external; + function setGovernance (address _governance) external; + function setKeeperFee (uint256 _newFee) external; + function setLiquidityGauge (address _liquidityGauge) external; + function setMin (uint256 _min) external; + function setWithdrawnFee (uint256 _newFee) external; + function symbol () external view returns (string memory); + function token () external view returns (address); + function totalSupply () external view returns (uint256); + function transfer (address to, uint256 amount) external returns (bool); + function transferFrom (address from, address to, uint256 amount) external returns (bool); + function withdraw (uint256 _shares) external; + function withdrawAll () external; + function withdrawalFee () external view returns (uint256); +} diff --git a/src/hardhat/contracts/Misc_AMOs/stakedao/IStakeDAOGauge.sol b/src/hardhat/contracts/Misc_AMOs/stakedao/IStakeDAOGauge.sol new file mode 100644 index 00000000..6e8ca4be --- /dev/null +++ b/src/hardhat/contracts/Misc_AMOs/stakedao/IStakeDAOGauge.sol @@ -0,0 +1,56 @@ +// SPDX-License-Identifier: GPL-2.0-or-later +pragma solidity >=0.8.0; + +interface IStakeDAOGauge { + function initialize (address _staking_token, address _admin, address _SDT, address _voting_escrow, address _veBoost_proxy, address _distributor, address _vault, string memory symbol) external; + function decimals () external view returns (uint256); + function user_checkpoint (address addr) external returns (bool); + function claimed_reward (address _addr, address _token) external view returns (uint256); + function claimable_reward (address _user, address _reward_token) external view returns (uint256); + function set_rewards_receiver (address _receiver) external; + function set_vault (address _vault) external; + function claim_rewards () external; + function claim_rewards (address _addr) external; + function claim_rewards (address _addr, address _receiver) external; + function claim_rewards_for (address _addr, address _receiver) external; + function kick (address addr) external; + function deposit (uint256 _value) external; + function deposit (uint256 _value, address _addr) external; + function deposit (uint256 _value, address _addr, bool _claim_rewards) external; + function withdraw (uint256 _value, address _addr) external; + function withdraw (uint256 _value, address _addr, bool _claim_rewards) external; + function transfer (address _to, uint256 _value) external returns (bool); + function transferFrom (address _from, address _to, uint256 _value) external returns (bool); + function approve (address _spender, uint256 _value) external returns (bool); + function increaseAllowance (address _spender, uint256 _added_value) external returns (bool); + function decreaseAllowance (address _spender, uint256 _subtracted_value) external returns (bool); + function add_reward (address _reward_token, address _distributor) external; + function set_reward_distributor (address _reward_token, address _distributor) external; + function set_claimer (address _claimer) external; + function deposit_reward_token (address _reward_token, uint256 _amount) external; + function commit_transfer_ownership (address addr) external; + function accept_transfer_ownership () external; + function SDT () external view returns (address); + function voting_escrow () external view returns (address); + function veBoost_proxy () external view returns (address); + function staking_token () external view returns (address); + function decimal_staking_token () external view returns (uint256); + function balanceOf (address arg0) external view returns (uint256); + function totalSupply () external view returns (uint256); + function allowance (address arg0, address arg1) external view returns (uint256); + function name () external view returns (string memory); + function symbol () external view returns (string memory); + function working_balances (address arg0) external view returns (uint256); + function working_supply () external view returns (uint256); + function integrate_checkpoint_of (address arg0) external view returns (uint256); + function reward_count () external view returns (uint256); + function reward_tokens (uint256 arg0) external view returns (address); + function reward_data (address arg0) external view returns (address token, address distributor, uint256 period_finish, uint256 rate, uint256 last_update, uint256 integral); + function rewards_receiver (address arg0) external view returns (address); + function reward_integral_for (address arg0, address arg1) external view returns (uint256); + function admin () external view returns (address); + function future_admin () external view returns (address); + function claimer () external view returns (address); + function initialized () external view returns (bool); + function vault () external view returns (address); +} diff --git a/src/hardhat/contracts/Misc_AMOs/stargate/ILPStaking.sol b/src/hardhat/contracts/Misc_AMOs/stargate/ILPStaking.sol new file mode 100644 index 00000000..8097eb7f --- /dev/null +++ b/src/hardhat/contracts/Misc_AMOs/stargate/ILPStaking.sol @@ -0,0 +1,31 @@ +// SPDX-License-Identifier: GPL-2.0-or-later +pragma solidity >=0.8.0; + +interface ILPStaking { + function BONUS_MULTIPLIER () external view returns (uint256); + function add (uint256 _allocPoint, address _lpToken) external; + function bonusEndBlock () external view returns (uint256); + function deposit (uint256 _pid, uint256 _amount) external; + function emergencyWithdraw (uint256 _pid) external; + function getMultiplier (uint256 _from, uint256 _to) external view returns (uint256); + function lpBalances (uint256) external view returns (uint256); + function massUpdatePools () external; + function owner () external view returns (address); + function pendingStargate (uint256 _pid, address _user) external view returns (uint256); + function poolInfo (uint256) external view returns (address lpToken, uint256 allocPoint, uint256 lastRewardBlock, uint256 accStargatePerShare); + function poolLength () external view returns (uint256); + function renounceOwnership () external; + function set (uint256 _pid, uint256 _allocPoint) external; + function setStargatePerBlock (uint256 _stargatePerBlock) external; + function stargate () external view returns (address); + function stargatePerBlock () external view returns (uint256); + function startBlock () external view returns (uint256); + function totalAllocPoint () external view returns (uint256); + function transferOwnership (address newOwner) external; + function updatePool (uint256 _pid) external; + function userInfo (uint256, address) external view returns (uint256 amount, uint256 rewardDebt); + function withdraw (uint256 _pid, uint256 _amount) external; + + // Extra + function eTokenPerSecond () external view returns (uint256); +} diff --git a/src/hardhat/contracts/Misc_AMOs/stellaswap/IStellaDistributorV2.sol b/src/hardhat/contracts/Misc_AMOs/stellaswap/IStellaDistributorV2.sol new file mode 100644 index 00000000..67f4a12e --- /dev/null +++ b/src/hardhat/contracts/Misc_AMOs/stellaswap/IStellaDistributorV2.sol @@ -0,0 +1,48 @@ +// SPDX-License-Identifier: GPL-2.0-or-later +pragma solidity >=0.8.0; + +interface IStellaDistributorV2 { + function MAXIMUM_DEPOSIT_FEE_RATE () external view returns (uint16); + function MAXIMUM_HARVEST_INTERVAL () external view returns (uint256); + function add (uint256 _allocPoint, address _lpToken, uint16 _depositFeeBP, uint256 _harvestInterval, address[] memory _rewarders) external; + function canHarvest (uint256 _pid, address _user) external view returns (bool); + function deposit (uint256 _pid, uint256 _amount) external; + function depositWithPermit (uint256 pid, uint256 amount, uint256 deadline, uint8 v, bytes32 r, bytes32 s) external; + function emergencyWithdraw (uint256 _pid) external; + function harvestMany (uint256[] memory _pids) external; + function investorAddress () external view returns (address); + function investorPercent () external view returns (uint256); + function massUpdatePools () external; + function owner () external view returns (address); + function pendingTokens (uint256 _pid, address _user) external view returns (address[] memory addresses, string[] memory symbols, uint256[] memory decimals, uint256[] memory amounts); + function poolInfo (uint256) external view returns (address lpToken, uint256 allocPoint, uint256 lastRewardTimestamp, uint256 accStellaPerShare, uint16 depositFeeBP, uint256 harvestInterval, uint256 totalLp); + function poolLength () external view returns (uint256); + function poolRewarders (uint256 _pid) external view returns (address[] memory rewarders); + function poolRewardsPerSec (uint256 _pid) external view returns (address[] memory addresses, string[] memory symbols, uint256[] memory decimals, uint256[] memory rewardsPerSec); + function poolTotalLp (uint256 pid) external view returns (uint256); + function renounceOwnership () external; + function set (uint256 _pid, uint256 _allocPoint, uint16 _depositFeeBP, uint256 _harvestInterval, address[] memory _rewarders) external; + function setInvestorAddress (address _investorAddress) external; + function setInvestorPercent (uint256 _newInvestorPercent) external; + function setTeamAddress (address _teamAddress) external; + function setTeamPercent (uint256 _newTeamPercent) external; + function setTreasuryAddress (address _treasuryAddress) external; + function setTreasuryPercent (uint256 _newTreasuryPercent) external; + function startFarming () external; + function startTimestamp () external view returns (uint256); + function stella () external view returns (address); + function stellaPerSec () external view returns (uint256); + function teamAddress () external view returns (address); + function teamPercent () external view returns (uint256); + function totalAllocPoint () external view returns (uint256); + function totalLockedUpRewards () external view returns (uint256); + function totalStellaInPools () external view returns (uint256); + function transferOwnership (address newOwner) external; + function treasuryAddress () external view returns (address); + function treasuryPercent () external view returns (uint256); + function updateAllocPoint (uint256 _pid, uint256 _allocPoint) external; + function updateEmissionRate (uint256 _stellaPerSec) external; + function updatePool (uint256 _pid) external; + function userInfo (uint256, address) external view returns (uint256 amount, uint256 rewardDebt, uint256 rewardLockedUp, uint256 nextHarvestUntil); + function withdraw (uint256 _pid, uint256 _amount) external; +} diff --git a/src/hardhat/contracts/Misc_AMOs/stellaswap/IStellaSwapFlashLoan.sol b/src/hardhat/contracts/Misc_AMOs/stellaswap/IStellaSwapFlashLoan.sol new file mode 100644 index 00000000..d9f95d53 --- /dev/null +++ b/src/hardhat/contracts/Misc_AMOs/stellaswap/IStellaSwapFlashLoan.sol @@ -0,0 +1,47 @@ +// SPDX-License-Identifier: GPL-2.0-or-later +pragma solidity >=0.8.0; + +interface IStellaSwapFlashLoan { + function MAX_BPS () external view returns (uint256); + function addLiquidity (uint256[] memory amounts, uint256 minToMint, uint256 deadline) external returns (uint256); + function calculateRemoveLiquidity (uint256 amount) external view returns (uint256[] memory); + function calculateRemoveLiquidityOneToken (uint256 tokenAmount, uint8 tokenIndex) external view returns (uint256 availableTokenAmount); + function calculateSwap (uint8 tokenIndexFrom, uint8 tokenIndexTo, uint256 dx) external view returns (uint256); + function calculateTokenAmount (uint256[] memory amounts, bool deposit) external view returns (uint256); + function flashLoan (address receiver, address token, uint256 amount, bytes memory params) external; + function flashLoanFeeBPS () external view returns (uint256); + function getA () external view returns (uint256); + function getAPrecise () external view returns (uint256); + function getAdminBalance (uint256 index) external view returns (uint256); + function getAdminBalances () external view returns (uint256[] memory adminBalances); + function getLpToken () external view returns (address); + function getNumberOfTokens () external view returns (uint256); + function getToken (uint8 index) external view returns (address); + function getTokenBalance (uint8 index) external view returns (uint256); + function getTokenBalances () external view returns (uint256[] memory); + function getTokenIndex (address tokenAddress) external view returns (uint8); + function getTokenPrecisionMultipliers () external view returns (uint256[] memory); + function getTokens () external view returns (address[] memory); + function getVirtualPrice () external view returns (uint256); + function initialize (address[] memory _pooledTokens, uint8[] memory decimals, string memory lpTokenName, string memory lpTokenSymbol, uint256 _a, uint256 _fee, uint256 _adminFee, address lpTokenTargetAddress) external; + function isFlashLoanEnabled () external view returns (bool); + function owner () external view returns (address); + function pause () external; + function paused () external view returns (bool); + function protocolFeeShareBPS () external view returns (uint256); + function rampA (uint256 futureA, uint256 futureTime) external; + function removeLiquidity (uint256 amount, uint256[] memory minAmounts, uint256 deadline) external returns (uint256[] memory); + function removeLiquidityImbalance (uint256[] memory amounts, uint256 maxBurnAmount, uint256 deadline) external returns (uint256); + function removeLiquidityOneToken (uint256 tokenAmount, uint8 tokenIndex, uint256 minAmount, uint256 deadline) external returns (uint256); + function renounceOwnership () external; + function setAdminFee (uint256 newAdminFee) external; + function setFlashLoanFees (uint256 newFlashLoanFeeBPS, uint256 newProtocolFeeShareBPS) external; + function setSwapFee (uint256 newSwapFee) external; + function stopRampA () external; + function swap (uint8 tokenIndexFrom, uint8 tokenIndexTo, uint256 dx, uint256 minDy, uint256 deadline) external returns (uint256); + function swapStorage () external view returns (uint256 initialA, uint256 futureA, uint256 initialATime, uint256 futureATime, uint256 swapFee, uint256 adminFee, address lpToken); + function toggleFlashLoan (bool enableFlashLoan) external; + function transferOwnership (address newOwner) external; + function unpause () external; + function withdrawAdminFees () external; +} diff --git a/src/hardhat/contracts/Misc_AMOs/thena/IThenaGaugeV2.sol b/src/hardhat/contracts/Misc_AMOs/thena/IThenaGaugeV2.sol new file mode 100644 index 00000000..48f19197 --- /dev/null +++ b/src/hardhat/contracts/Misc_AMOs/thena/IThenaGaugeV2.sol @@ -0,0 +1,46 @@ +// SPDX-License-Identifier: GPL-2.0-or-later +pragma solidity >=0.8.0; + +interface IThenaGaugeV2 { + function DISTRIBUTION () external view returns (address); + function DURATION () external view returns (uint256); + function TOKEN () external view returns (address); + function _VE () external view returns (address); + function _balances (address) external view returns (uint256); + function _periodFinish () external view returns (uint256); + function _totalSupply () external view returns (uint256); + function balanceOf (address account) external view returns (uint256); + function claimFees () external returns (uint256 claimed0, uint256 claimed1); + function deposit (uint256 amount) external; + function depositAll () external; + function earned (address account) external view returns (uint256); + function external_bribe () external view returns (address); + function fees0 () external view returns (uint256); + function fees1 () external view returns (uint256); + function gaugeRewarder () external view returns (address); + function getReward () external; + function internal_bribe () external view returns (address); + function isForPair () external view returns (bool); + function lastTimeRewardApplicable () external view returns (uint256); + function lastUpdateTime () external view returns (uint256); + function notifyRewardAmount (address token, uint256 reward) external; + function owner () external view returns (address); + function periodFinish () external view returns (uint256); + function renounceOwnership () external; + function rewardForDuration () external view returns (uint256); + function rewardPerToken () external view returns (uint256); + function rewardPerTokenStored () external view returns (uint256); + function rewardRate () external view returns (uint256); + function rewardToken () external view returns (address); + function rewarderPid () external view returns (uint256); + function rewards (address) external view returns (uint256); + function setDistribution (address _distribution) external; + function setGaugeRewarder (address _gaugeRewarder) external; + function setRewarderPid (uint256 _pid) external; + function totalSupply () external view returns (uint256); + function transferOwnership (address newOwner) external; + function userRewardPerTokenPaid (address) external view returns (uint256); + function withdraw (uint256 amount) external; + function withdrawAll () external; + function withdrawAllAndHarvest () external; +} diff --git a/src/hardhat/contracts/Staking/FraxUnifiedFarm_ERC20_V2.sol b/src/hardhat/contracts/Staking/FraxUnifiedFarm_ERC20_V2.sol index 282cdac8..7cd47f59 100644 --- a/src/hardhat/contracts/Staking/FraxUnifiedFarm_ERC20_V2.sol +++ b/src/hardhat/contracts/Staking/FraxUnifiedFarm_ERC20_V2.sol @@ -9,12 +9,13 @@ pragma solidity ^0.8.17; // | /_/ /_/ \__,_/_/|_| /_/ /_/_/ /_/\__,_/_/ /_/\___/\___/ | // | | // ==================================================================== -// ======================= FraxUnifiedFarm_ERC20 ====================== +// ===================== FraxUnifiedFarm_ERC20_V2 ===================== // ==================================================================== // For ERC20 Tokens // Uses FraxUnifiedFarmTemplate.sol /// @dev Testing for Lock Transferring performed in isolated repository: https://github.com/ZrowGz/frax-transfers.git +/// Locked Stake Transfer & Custom Error logic created by ZrowGz with the Pitch Foundation import "./FraxUnifiedFarmTemplate_V2.sol"; import "./ILockReceiverV2.sol"; @@ -67,7 +68,6 @@ contract FraxUnifiedFarm_ERC20_V2 is FraxUnifiedFarmTemplate_V2 { error CannotShortenLockTime(); error MustBeInTheFuture(); error MustBePositive(); - error StakerNotFound(); error CannotBeZero(); error AllowanceIsZero(); @@ -300,12 +300,6 @@ contract FraxUnifiedFarm_ERC20_V2 is FraxUnifiedFarmTemplate_V2 { // uint256 numerator = (pre_expiry_avg_multiplier * time_before_expiry) + (MULTIPLIER_PRECISION * time_after_expiry); uint256 numerator = (pre_expiry_avg_multiplier * time_before_expiry) + (0 * time_after_expiry); midpoint_lock_multiplier = numerator / (time_before_expiry + time_after_expiry); - // midpoint_lock_multiplier = ( - // ( - // (lockMultiplier(time_before_expiry / 2) * time_before_expiry) + - // (0 * time_after_expiry) - // ) / (time_before_expiry + time_after_expiry) - // ); } /// already initialized to zero // else { @@ -326,68 +320,12 @@ contract FraxUnifiedFarm_ERC20_V2 is FraxUnifiedFarmTemplate_V2 { avg_time_left = (time_left_p1 + time_left_p2) / 2; } midpoint_lock_multiplier = lockMultiplier(avg_time_left); - - // midpoint_lock_multiplier = lockMultiplier( - // ( - // (thisStake.ending_timestamp - accrue_start_time) + - // (thisStake.ending_timestamp - block.timestamp) - // ) / 2 - // ); } // Sanity check: make sure it never goes above the initial multiplier if (midpoint_lock_multiplier > thisStake.lock_multiplier) midpoint_lock_multiplier = thisStake.lock_multiplier; } - // // Calculate the combined weight for an account - // function calcCurCombinedWeight(address account) public override view - // returns ( - // uint256 old_combined_weight, - // uint256 new_vefxs_multiplier, - // uint256 new_combined_weight - // ) - // { - // // Get the old combined weight - // old_combined_weight = _combined_weights[account]; - - // // Get the veFXS multipliers - // // For the calculations, use the midpoint (analogous to midpoint Riemann sum) - // new_vefxs_multiplier = veFXSMultiplier(account); - - // uint256 midpoint_vefxs_multiplier; - // if ( - // (_locked_liquidity[account] == 0 && _combined_weights[account] == 0) || - // (new_vefxs_multiplier >= _vefxsMultiplierStored[account]) - // ) { - // // This is only called for the first stake to make sure the veFXS multiplier is not cut in half - // // Also used if the user increased or maintained their position - // midpoint_vefxs_multiplier = new_vefxs_multiplier; - // } - // else { - // // Handles natural decay with a non-increased veFXS position - // midpoint_vefxs_multiplier = (new_vefxs_multiplier + _vefxsMultiplierStored[account]) / 2; - // } - - // // Loop through the locked stakes, first by getting the liquidity * lock_multiplier portion - // new_combined_weight = 0; - // for (uint256 i; i < lockedStakes[account].length; i++) { - // LockedStake memory thisStake = lockedStakes[account][i]; - - // // Calculate the midpoint lock multiplier - // // uint256 midpoint_lock_multiplier = calcCurrLockMultiplier(account, i); - - // // Calculate the combined boost - // // uint256 liquidity = thisStake.liquidity; - // // uint256 combined_boosted_amount = thisStake.liquidity + ((thisStake.liquidity * (midpoint_lock_multiplier + midpoint_vefxs_multiplier)) / MULTIPLIER_PRECISION); - // new_combined_weight += ( - // thisStake.liquidity + ( - // ( - // thisStake.liquidity * (calcCurrLockMultiplier(account, i) + midpoint_vefxs_multiplier) - // ) / MULTIPLIER_PRECISION - // ) - // ); - // } - // } // Calculate the combined weight for an account function calcCurCombinedWeight(address account) public override view returns ( @@ -448,7 +386,7 @@ contract FraxUnifiedFarm_ERC20_V2 is FraxUnifiedFarmTemplate_V2 { return(lockedStakes[staker][locked_stake_index]); } - function getLockedStakeLiquidity(address staker, uint256 locked_stake_index) public view returns (uint256) { + function getLockedStakeLiquidity(address staker, uint256 locked_stake_index) external view returns (uint256) { return(lockedStakes[staker][locked_stake_index].liquidity); } @@ -492,13 +430,10 @@ contract FraxUnifiedFarm_ERC20_V2 is FraxUnifiedFarmTemplate_V2 { } // Add additional LPs to an existing locked stake - function lockAdditional(uint256 theArrayIndex, uint256 addl_liq) nonReentrant updateRewardAndBalanceMdf(msg.sender, true) public { + function lockAdditional(uint256 theArrayIndex, uint256 addl_liq) nonReentrant updateRewardAndBalanceMdf(msg.sender, true) external { // Get the stake by its index LockedStake memory thisStake = lockedStakes[msg.sender][theArrayIndex]; - // Calculate the new amount - // uint256 new_amt = thisStake.liquidity + addl_liq; - // Checks if (addl_liq <= 0) revert MustBePositive(); @@ -506,12 +441,6 @@ contract FraxUnifiedFarm_ERC20_V2 is FraxUnifiedFarmTemplate_V2 { TransferHelperV2.safeTransferFrom(address(stakingToken), msg.sender, address(this), addl_liq); // Update the stake - // lockedStakes[msg.sender][theArrayIndex] = LockedStake( - // thisStake.start_timestamp, - // (thisStake.liquidity + addl_liq), - // thisStake.ending_timestamp, - // thisStake.lock_multiplier - // ); _updateStake( msg.sender, theArrayIndex, @@ -527,7 +456,7 @@ contract FraxUnifiedFarm_ERC20_V2 is FraxUnifiedFarmTemplate_V2 { } // Extends the lock of an existing stake - function lockLonger(uint256 theArrayIndex, uint256 new_ending_ts) nonReentrant updateRewardAndBalanceMdf(msg.sender, true) public { + function lockLonger(uint256 theArrayIndex, uint256 new_ending_ts) nonReentrant updateRewardAndBalanceMdf(msg.sender, true) external { // Get the stake by its index LockedStake memory thisStake = lockedStakes[msg.sender][theArrayIndex]; @@ -549,12 +478,6 @@ contract FraxUnifiedFarm_ERC20_V2 is FraxUnifiedFarmTemplate_V2 { if (new_secs > lock_time_for_max_multiplier) revert TryingToLockForTooLong(); // Update the stake - // lockedStakes[msg.sender][theArrayIndex] = LockedStake( - // block.timestamp, - // thisStake.liquidity, - // new_ending_ts, - // lockMultiplier(new_secs) - // ); _updateStake( msg.sender, theArrayIndex, @@ -592,16 +515,7 @@ contract FraxUnifiedFarm_ERC20_V2 is FraxUnifiedFarmTemplate_V2 { // Varies per farm TransferHelperV2.safeTransferFrom(address(stakingToken), source_address, address(this), liquidity); - // Get the lock multiplier and create the new lockedStake - // uint256 lock_multiplier = lockMultiplier(secs); - // Create the locked stake - // lockedStakes[staker_address].push(LockedStake( - // start_timestamp, - // liquidity, - // block.timestamp + secs, - // lockMultiplier(secs) - // )); _createNewStake( staker_address, start_timestamp, @@ -615,7 +529,7 @@ contract FraxUnifiedFarm_ERC20_V2 is FraxUnifiedFarmTemplate_V2 { emit StakeLocked(staker_address, liquidity, secs, lockedStakes[staker_address].length, source_address); - return lockedStakes[staker_address].length; + return lockedStakes[staker_address].length - 1; } // ------ WITHDRAWING ------ @@ -635,8 +549,7 @@ contract FraxUnifiedFarm_ERC20_V2 is FraxUnifiedFarmTemplate_V2 { // Collect rewards first and then update the balances _getReward(staker_address, destination_address, true); - // Get the stake and its index - // (LockedStake memory thisStake, uint256 theArrayIndex) = _getStake(staker_address, lockedStake); + // Get the stake by its index LockedStake memory thisStake = lockedStakes[staker_address][theArrayIndex]; // require(block.timestamp >= thisStake.ending_timestamp || stakesUnlocked == true, "Stake is still locked!"); @@ -652,14 +565,6 @@ contract FraxUnifiedFarm_ERC20_V2 is FraxUnifiedFarmTemplate_V2 { // Should throw if insufficient balance TransferHelperV2.safeTransfer(address(stakingToken), destination_address, thisStake.liquidity); - // // Update liquidities - // _total_liquidity_locked -= thisStake.liquidity; - // _locked_liquidity[staker_address] -= thisStake.liquidity; - // { - // address the_proxy = getProxyFor(staker_address); - // if (the_proxy != address(0)) proxy_lp_balances[the_proxy] -= thisStake.liquidity; - // } - // Remove the stake from the array delete lockedStakes[staker_address][theArrayIndex]; @@ -682,36 +587,45 @@ contract FraxUnifiedFarm_ERC20_V2 is FraxUnifiedFarmTemplate_V2 { /* ========== LOCK TRANSFER & AUTHORIZATIONS - Approvals, Functions, Errors, & Events ========== */ // Approve `spender` to transfer `lockedStake` on behalf of `owner` + /// @notice Used to increase allowance when it is at zero + /// @dev separating this from the `increaseAllowance` function to avoid the allowance exploit function setAllowance(address spender, uint256 lockedStakeIndex, uint256 amount) external { - if(spenderAllowance[msg.sender][lockedStakeIndex][spender] >= 0) revert CannotBeZero(); + if(spenderAllowance[msg.sender][lockedStakeIndex][spender] > 0) revert CannotBeZero(); spenderAllowance[msg.sender][lockedStakeIndex][spender] = amount; emit Approval(msg.sender, spender, lockedStakeIndex, amount); } + /// @notice Used to increase allowance when it is not at zero + /// @dev separating this from the `setAllowance` function to avoid the allowance exploit function increaseAllowance(address spender, uint256 lockedStakeIndex, uint256 amount) external { if (spenderAllowance[msg.sender][lockedStakeIndex][spender] == 0) revert AllowanceIsZero(); spenderAllowance[msg.sender][lockedStakeIndex][spender] += amount; emit Approval(msg.sender, spender, lockedStakeIndex, spenderAllowance[msg.sender][lockedStakeIndex][spender]); } - // Revoke approval for a single lockedStake + /// @notice Revoke approval for a single lockedStake function removeAllowance(address spender, uint256 lockedStakeIndex) external { spenderAllowance[msg.sender][lockedStakeIndex][spender] = 0; emit Approval(msg.sender, spender, lockedStakeIndex, 0); } // Approve or revoke `spender` to transfer any/all locks on behalf of the owner + /// @notice Set's `spender` approval for all locks: true=approve, false=remove approval function setApprovalForAll(address spender, bool approved) external { spenderApprovalForAllLocks[msg.sender][spender] = approved; emit ApprovalForAll(msg.sender, spender, approved); } - // internal approval check and allowance manager - function isApproved(address staker, uint256 lockedStakeIndex, uint256 amount) public view returns (bool) { + /// @notice External getter function to check if a spender is approved for `amount` of a lockedStake + /// @param staker The address of the sender + /// @param spender The address of the spender + /// @param lockedStakeIndex The index of the locked stake + /// @param amount The amount to spend + function isApproved(address staker, address spender, uint256 lockedStakeIndex, uint256 amount) external view returns (bool) { // check if spender is approved for all `staker` locks - if (spenderApprovalForAllLocks[staker][msg.sender]) { + if (spenderApprovalForAllLocks[staker][spender]) { return true; - } else if (spenderAllowance[staker][lockedStakeIndex][msg.sender] >= amount) { + } else if (spenderAllowance[staker][lockedStakeIndex][spender] >= amount) { return true; } else { // for any other possibility, return false @@ -719,7 +633,14 @@ contract FraxUnifiedFarm_ERC20_V2 is FraxUnifiedFarmTemplate_V2 { } } + /// @notice Checks for sufficient allowance & spends it + /// @param staker The address of the sender + /// @param lockedStakeIndex The index of the locked stake + /// @param amount The amount to spend function _spendAllowance(address staker, uint256 lockedStakeIndex, uint256 amount) internal { + // if (spenderApprovalForAllLocks[staker][msg.sender]) { + // return; + // } if (spenderAllowance[staker][lockedStakeIndex][msg.sender] == amount) { spenderAllowance[staker][lockedStakeIndex][msg.sender] = 0; } else if (spenderAllowance[staker][lockedStakeIndex][msg.sender] > amount) { @@ -731,6 +652,13 @@ contract FraxUnifiedFarm_ERC20_V2 is FraxUnifiedFarmTemplate_V2 { // ------ TRANSFERRING LOCKED STAKES ------ + /// @notice Allows an approved spender to transfer assets in sender's lockedStake to another user + /// @param sender_address The address of the sender + /// @param receiver_address The address of the receiver + /// @param sender_lock_index The index of the sender's lockedStake + /// @param transfer_amount The amount to transfer + /// @param use_receiver_lock_index If true, the receiver wants the assets sent to an existing, valid lockedStake they control + /// @param receiver_lock_index The index of the receiver's lockedStake to add these assets to function transferLockedFrom( address sender_address, address receiver_address, @@ -739,11 +667,14 @@ contract FraxUnifiedFarm_ERC20_V2 is FraxUnifiedFarmTemplate_V2 { bool use_receiver_lock_index, uint256 receiver_lock_index ) external nonReentrant returns (uint256,uint256) { - // check approvals - if (!isApproved(sender_address, sender_lock_index, transfer_amount)) revert TransferLockNotAllowed(msg.sender, sender_lock_index); + // check approvals NOTE not needed as _spendAllowance does this also + // if (!isApproved(sender_address, sender_lock_index, transfer_amount)) revert TransferLockNotAllowed(msg.sender, sender_lock_index); - // adjust the allowance down - _spendAllowance(sender_address, sender_lock_index, transfer_amount); + /// if spender is not approved for all, spend allowance, otherwise, carry on + if(!spenderApprovalForAllLocks[sender_address][msg.sender]) { + // adjust the allowance down & performs checks + _spendAllowance(sender_address, sender_lock_index, transfer_amount); + } // do the transfer /// @dev the approval check is done in modifier, so to reach here caller is permitted, thus OK @@ -751,6 +682,12 @@ contract FraxUnifiedFarm_ERC20_V2 is FraxUnifiedFarmTemplate_V2 { return(_safeTransferLockedByLockIndex([sender_address, receiver_address], sender_lock_index, transfer_amount, use_receiver_lock_index, receiver_lock_index)); } + /// @notice Allows a staker to transfer assets in their lockedStake to another user + /// @param receiver_address The address of the receiver + /// @param sender_lock_index The index of the sender's lockedStake (previously used kek_id to look up this value) + /// @param transfer_amount The amount to transfer + /// @param use_receiver_lock_index If true, the receiver wants the assets sent to an existing, valid lockedStake they control + /// @param receiver_lock_index The index of the receiver's lockedStake to add these assets to function transferLocked( address receiver_address, uint256 sender_lock_index, @@ -763,8 +700,9 @@ contract FraxUnifiedFarm_ERC20_V2 is FraxUnifiedFarmTemplate_V2 { return(_safeTransferLockedByLockIndex([msg.sender, receiver_address], sender_lock_index, transfer_amount, use_receiver_lock_index, receiver_lock_index)); } + /// @notice The transfer logic that executes the transfer, utilizes beforeLockTransfer & onLockReceived to ensure that the receiver is able to prevent asset loss function _safeTransferLockedByLockIndex( - address[2] memory addrs, // [0]: sender_address, [1]: receiver_address. Reduces stack size + address[2] memory addrs, // [0]: sender_address, [1]: addrs[1]. Reduces stack size uint256 sender_lock_index, uint256 transfer_amount, bool use_receiver_lock_index, @@ -776,7 +714,7 @@ contract FraxUnifiedFarm_ERC20_V2 is FraxUnifiedFarmTemplate_V2 { require( ILockReceiverV2(addrs[0]).beforeLockTransfer(addrs[0], addrs[1], sender_lock_index, "") == - ILockReceiverV2.beforeLockTransfer.selector // 00x4fb07105 <--> bytes4(keccak256("beforeLockTransfer(address,address,bytes32,bytes)")) + ILockReceiverV2.beforeLockTransfer.selector ); } @@ -784,16 +722,14 @@ contract FraxUnifiedFarm_ERC20_V2 is FraxUnifiedFarmTemplate_V2 { LockedStake memory senderStake = getLockedStake(addrs[0], sender_lock_index); // perform checks - { - if (addrs[1] == address(0) || addrs[1] == addrs[0]) { - revert InvalidReceiver(); - } - if (block.timestamp >= senderStake.ending_timestamp || stakesUnlocked == true) { - revert StakesUnlocked(); - } - if (transfer_amount > senderStake.liquidity || transfer_amount <= 0) { - revert InvalidAmount(); - } + if (addrs[1] == address(0) || addrs[1] == addrs[0]) { + revert InvalidReceiver(); + } + if (block.timestamp >= senderStake.ending_timestamp || stakesUnlocked == true) { + revert StakesUnlocked(); + } + if (transfer_amount > senderStake.liquidity || transfer_amount <= 0) { + revert InvalidAmount(); } // Update the liquidities @@ -801,11 +737,11 @@ contract FraxUnifiedFarm_ERC20_V2 is FraxUnifiedFarmTemplate_V2 { _locked_liquidity[addrs[1]] += transfer_amount; if (getProxyFor(addrs[0]) != address(0)) { - proxy_lp_balances[getProxyFor(addrs[0])] -= transfer_amount; + proxy_lp_balances[getProxyFor(addrs[0])] -= transfer_amount; } if (getProxyFor(addrs[1]) != address(0)) { - proxy_lp_balances[getProxyFor(addrs[1])] += transfer_amount; + proxy_lp_balances[getProxyFor(addrs[1])] += transfer_amount; } // if sent amount was all the liquidity, delete the stake, otherwise decrease the balance @@ -815,56 +751,46 @@ contract FraxUnifiedFarm_ERC20_V2 is FraxUnifiedFarmTemplate_V2 { lockedStakes[addrs[0]][sender_lock_index].liquidity -= transfer_amount; } - // Get the stake and its index - { - // Scope here due to stack-too-deep + /** if use_receiver_lock_index is true & + * & the index is valid + * & has liquidity + * & is still locked, update the stake & ending timestamp (longer of the two) + * else, create a new lockedStake + * note using nested if checks to reduce gas costs slightly + */ + if (use_receiver_lock_index == true) { + // Get the stake and its index LockedStake memory receiverStake = getLockedStake(addrs[1], receiver_lock_index); - /** if use_receiver_lock_index is true & - * & the index is valid - * & has liquidity - * & is still locked, update the stake & ending timestamp (longer of the two) - * else, create a new lockedStake - * note using nested if checks to reduce gas costs slightly - */ - if (use_receiver_lock_index == true) { - if (receiver_lock_index < lockedStakes[addrs[1]].length ) { - if (receiverStake.liquidity > 0) { - if (receiverStake.ending_timestamp > block.timestamp) { - // Update the existing staker's stake liquidity - lockedStakes[addrs[1]][receiver_lock_index].liquidity += transfer_amount; - // check & update ending timestamp to whichever is farthest out - if (receiverStake.ending_timestamp < senderStake.ending_timestamp) { - // update the lock expiration to the later timestamp - lockedStakes[addrs[1]][receiver_lock_index].ending_timestamp = senderStake.ending_timestamp; - // update the lock multiplier since we are effectively extending the lock - lockedStakes[addrs[1]][receiver_lock_index].lock_multiplier = lockMultiplier( - senderStake.ending_timestamp - block.timestamp - ); - } + if (receiver_lock_index < lockedStakes[addrs[1]].length ) { + if (receiverStake.liquidity > 0) { + if (receiverStake.ending_timestamp > block.timestamp) { + // Update the existing staker's stake liquidity + lockedStakes[addrs[1]][receiver_lock_index].liquidity += transfer_amount; + // check & update ending timestamp to whichever is farthest out + if (receiverStake.ending_timestamp < senderStake.ending_timestamp) { + // update the lock expiration to the later timestamp + lockedStakes[addrs[1]][receiver_lock_index].ending_timestamp = senderStake.ending_timestamp; + // update the lock multiplier since we are effectively extending the lock + lockedStakes[addrs[1]][receiver_lock_index].lock_multiplier = lockMultiplier( + senderStake.ending_timestamp - block.timestamp + ); } } } - } else { - // create the new lockedStake - // lockedStakes[addrs[1]].push(LockedStake( - // senderStake.start_timestamp, - // transfer_amount, - // senderStake.ending_timestamp, - // senderStake.lock_multiplier - // )); - _createNewStake( - addrs[1], - senderStake.start_timestamp, - transfer_amount, - senderStake.ending_timestamp, - senderStake.lock_multiplier - ); - - // update the return value of the locked index - /// todo could also just use the length of the array in all 3 situations below - which is more gas efficient? - receiver_lock_index = lockedStakes[addrs[1]].length; } + } else { + // create the new lockedStake + _createNewStake( + addrs[1], + senderStake.start_timestamp, + transfer_amount, + senderStake.ending_timestamp, + senderStake.lock_multiplier + ); + + // update the return value of the locked index + receiver_lock_index = lockedStakes[addrs[1]].length - 1; } // Need to call again to make sure everything is correct diff --git a/src/hardhat/contracts/Staking/FraxUnifiedFarm_ERC20_V2_BEFORE_MANUAL_MERGE.sol.old b/src/hardhat/contracts/Staking/FraxUnifiedFarm_ERC20_V2_BEFORE_MANUAL_MERGE.sol.old new file mode 100644 index 00000000..69d69490 --- /dev/null +++ b/src/hardhat/contracts/Staking/FraxUnifiedFarm_ERC20_V2_BEFORE_MANUAL_MERGE.sol.old @@ -0,0 +1,908 @@ +// SPDX-License-Identifier: GPL-2.0-or-later +pragma solidity ^0.8.17; + +// ==================================================================== +// | ______ _______ | +// | / _____________ __ __ / ____(_____ ____ _____ ________ | +// | / /_ / ___/ __ `| |/_/ / /_ / / __ \/ __ `/ __ \/ ___/ _ \ | +// | / __/ / / / /_/ _> < / __/ / / / / / /_/ / / / / /__/ __/ | +// | /_/ /_/ \__,_/_/|_| /_/ /_/_/ /_/\__,_/_/ /_/\___/\___/ | +// | | +// ==================================================================== +// ===================== FraxUnifiedFarm_ERC20_V2 ===================== +// ==================================================================== +// For ERC20 Tokens +// Uses FraxUnifiedFarmTemplate.sol + +/// @dev Testing for Lock Transferring performed in isolated repository: https://github.com/ZrowGz/frax-transfers.git + +import "./FraxUnifiedFarmTemplate_V2.sol"; +import "./ILockReceiverV2.sol"; + +// -------------------- VARIES -------------------- + +// Convex wrappers +import "../Curve/ICurvefrxETHETHPool.sol"; +import "../Misc_AMOs/convex/IConvexStakingWrapperFrax.sol"; +import "../Misc_AMOs/convex/IDepositToken.sol"; +import "../Misc_AMOs/curve/I2pool.sol"; +import "../Misc_AMOs/curve/I2poolToken.sol"; + +// Fraxswap +// import '../Fraxswap/core/interfaces/IFraxswapPair.sol'; + +// G-UNI +// import "../Misc_AMOs/gelato/IGUniPool.sol"; + +// mStable +// import '../Misc_AMOs/mstable/IFeederPool.sol'; + +// StakeDAO sdETH-FraxPut +// import '../Misc_AMOs/stakedao/IOpynPerpVault.sol'; + +// StakeDAO Vault +// import '../Misc_AMOs/stakedao/IStakeDaoVault.sol'; + +// Uniswap V2 +// import '../Uniswap/Interfaces/IUniswapV2Pair.sol'; + +// Vesper +// import '../Misc_AMOs/vesper/IVPool.sol'; + +// ------------------------------------------------ + +contract FraxUnifiedFarm_ERC20_V2 is FraxUnifiedFarmTemplate_V2 { + + // use custom errors to reduce contract size + error TransferLockNotAllowed(address,uint256); // spender, locked_stake_index + error StakesUnlocked(); + error InvalidReceiver(); + error InvalidAmount(); + error InsufficientAllowance(); + error InvalidChainlinkPrice(); + error WithdrawalsPaused(); + error StakingPaused(); + error MinimumStakeTimeNotMet(); + error TryingToLockForTooLong(); + error CannotShortenLockTime(); + error MustBeInTheFuture(); + error MustBePositive(); + error StakerNotFound(); + error CannotBeZero(); + error AllowanceIsZero(); + + /* ========== STATE VARIABLES ========== */ + + // -------------------- COMMON -------------------- + bool internal frax_is_token0; + + // -------------------- VARIES -------------------- + + // Convex stkcvxFPIFRAX, stkcvxFRAXBP, etc + IConvexStakingWrapperFrax public stakingToken; + I2poolToken public curveToken; + // I2pool public curvePool; + /// @dev uncomment this one for convex frxEth, use the I2pool version for others + ICurvefrxETHETHPool public curvePool; + + // Fraxswap + // IFraxswapPair public stakingToken; + + // G-UNI + // IGUniPool public stakingToken; + + // mStable + // IFeederPool public stakingToken; + + // sdETH-FraxPut Vault + // IOpynPerpVault public stakingToken; + + // StakeDAO Vault + // IStakeDaoVault public stakingToken; + + // Uniswap V2 + // IUniswapV2Pair public stakingToken; + + // Vesper + // IVPool public stakingToken; + + // ------------------------------------------------ + + // Stake tracking + mapping(address => LockedStake[]) public lockedStakes; + /* ========== STRUCTS ========== */ + + // Struct for the stake + struct LockedStake { + uint256 start_timestamp; + uint256 liquidity; + uint256 ending_timestamp; + uint256 lock_multiplier; // 6 decimals of precision. 1x = 1000000 + } + + + /* ========== APPROVALS & ALLOWANCE FOR LOCK TRANSFERS ========== */ + // staker => locked_stake_index => spender => uint256 (amount of lock that spender is approved for) + mapping(address => mapping(uint256 => mapping(address => uint256))) public spenderAllowance; + // staker => spender => bool (true if approved) + mapping(address => mapping(address => bool)) public spenderApprovalForAllLocks; + + + /* ========== CONSTRUCTOR ========== */ + + constructor ( + address _owner, + address[] memory _rewardTokens, + address[] memory _rewardManagers, + uint256[] memory _rewardRatesManual, + address[] memory _gaugeControllers, + address[] memory _rewardDistributors, + address _stakingToken + ) + FraxUnifiedFarmTemplate_V2(_owner, _rewardTokens, _rewardManagers, _rewardRatesManual, _gaugeControllers, _rewardDistributors) + { + + // -------------------- VARIES (USE CHILD FOR LOGIC) -------------------- + + // Fraxswap + // stakingToken = IFraxswapPair(_stakingToken); + // address token0 = stakingToken.token0(); + // frax_is_token0 = (token0 == frax_address); + + // G-UNI + // stakingToken = IGUniPool(_stakingToken); + // address token0 = address(stakingToken.token0()); + // frax_is_token0 = (token0 == frax_address); + + // mStable + // stakingToken = IFeederPool(_stakingToken); + + // StakeDAO sdETH-FraxPut Vault + // stakingToken = IOpynPerpVault(_stakingToken); + + // StakeDAO Vault + // stakingToken = IStakeDaoVault(_stakingToken); + + // Uniswap V2 + // stakingToken = IUniswapV2Pair(_stakingToken); + // address token0 = stakingToken.token0(); + // if (token0 == frax_address) frax_is_token0 = true; + // else frax_is_token0 = false; + + // Vesper + // stakingToken = IVPool(_stakingToken); + } + + /* ============= VIEWS ============= */ + + // ------ FRAX RELATED ------ + + function fraxPerLPToken() public virtual view override returns (uint256) { + // Get the amount of FRAX 'inside' of the lp tokens + uint256 frax_per_lp_token; + + // Convex stkcvxFPIFRAX and stkcvxFRAXBP only + // ============================================ + // { + // // Half of the LP is FRAXBP + // // Using 0.5 * virtual price for gas savings + // frax_per_lp_token = curvePool.get_virtual_price() / 2; + // } + + // Convex Stable/FRAXBP + // ============================================ + // { + // // Half of the LP is FRAXBP. Half of that should be FRAX. + // // Using 0.25 * virtual price for gas savings + // frax_per_lp_token = curvePool.get_virtual_price() / 4; + // } + + // Convex Volatile/FRAXBP + // ============================================ + // { + // // Half of the LP is FRAXBP. Half of that should be FRAX. + // // Using 0.25 * lp price for gas savings + // frax_per_lp_token = curvePool.lp_price() / 4; + // } + + // Fraxswap + // ============================================ + // { + // uint256 total_frax_reserves; + // (uint256 _reserve0, uint256 _reserve1, , ,) = (stakingToken.getReserveAfterTwamm(block.timestamp)); + // if (frax_is_token0) total_frax_reserves = _reserve0; + // else total_frax_reserves = _reserve1; + + // frax_per_lp_token = (total_frax_reserves * 1e18) / stakingToken.totalSupply(); + // } + + // G-UNI + // ============================================ + // { + // (uint256 reserve0, uint256 reserve1) = stakingToken.getUnderlyingBalances(); + // uint256 total_frax_reserves = frax_is_token0 ? reserve0 : reserve1; + + // frax_per_lp_token = (total_frax_reserves * 1e18) / stakingToken.totalSupply(); + // } + + // mStable + // ============================================ + // { + // uint256 total_frax_reserves; + // (, IFeederPool.BassetData memory vaultData) = (stakingToken.getBasset(frax_address)); + // total_frax_reserves = uint256(vaultData.vaultBalance); + // frax_per_lp_token = (total_frax_reserves * 1e18) / stakingToken.totalSupply(); + // } + + // StakeDAO sdETH-FraxPut Vault + // ============================================ + // { + // uint256 frax3crv_held = stakingToken.totalUnderlyingControlled(); + + // // Optimistically assume 50/50 FRAX/3CRV ratio in the metapool to save gas + // frax_per_lp_token = ((frax3crv_held * 1e18) / stakingToken.totalSupply()) / 2; + // } + + // StakeDAO Vault + // ============================================ + // { + // uint256 frax3crv_held = stakingToken.balance(); + + // // Optimistically assume 50/50 FRAX/3CRV ratio in the metapool to save gas + // frax_per_lp_token = ((frax3crv_held * 1e18) / stakingToken.totalSupply()) / 2; + // } + + // Uniswap V2 + // ============================================ + // { + // uint256 total_frax_reserves; + // (uint256 reserve0, uint256 reserve1, ) = (stakingToken.getReserves()); + // if (frax_is_token0) total_frax_reserves = reserve0; + // else total_frax_reserves = reserve1; + + // frax_per_lp_token = (total_frax_reserves * 1e18) / stakingToken.totalSupply(); + // } + + // Vesper + // ============================================ + // frax_per_lp_token = stakingToken.pricePerShare(); + + return frax_per_lp_token; + } + + // ------ LIQUIDITY AND WEIGHTS ------ + + function calcCurrLockMultiplier(address account, uint256 stake_idx) public view returns (uint256 midpoint_lock_multiplier) { + // Get the stake + LockedStake memory thisStake = lockedStakes[account][stake_idx]; + + // Handles corner case where user never claims for a new stake + // Don't want the multiplier going above the max + uint256 accrue_start_time; + if (lastRewardClaimTime[account] < thisStake.start_timestamp) { + accrue_start_time = thisStake.start_timestamp; + } + else { + accrue_start_time = lastRewardClaimTime[account]; + } + + // If the lock is expired + if (thisStake.ending_timestamp <= block.timestamp) { + // If the lock expired in the time since the last claim, the weight needs to be proportionately averaged this time + if (lastRewardClaimTime[account] < thisStake.ending_timestamp){ + uint256 time_before_expiry = thisStake.ending_timestamp - accrue_start_time; + uint256 time_after_expiry = block.timestamp - thisStake.ending_timestamp; + + // Average the pre-expiry lock multiplier + uint256 pre_expiry_avg_multiplier = lockMultiplier(time_before_expiry / 2); + + // Get the weighted-average lock_multiplier + // uint256 numerator = (pre_expiry_avg_multiplier * time_before_expiry) + (MULTIPLIER_PRECISION * time_after_expiry); + uint256 numerator = (pre_expiry_avg_multiplier * time_before_expiry) + (0 * time_after_expiry); + midpoint_lock_multiplier = numerator / (time_before_expiry + time_after_expiry); + // midpoint_lock_multiplier = ( + // ( + // (lockMultiplier(time_before_expiry / 2) * time_before_expiry) + + // (0 * time_after_expiry) + // ) / (time_before_expiry + time_after_expiry) + // ); + } + /// already initialized to zero + // else { + // // Otherwise, it needs to just be 1x + // // midpoint_lock_multiplier = MULTIPLIER_PRECISION; + + // // Otherwise, it needs to just be 0x + // midpoint_lock_multiplier = 0; + // } + } + // If the lock is not expired + else { + // Decay the lock multiplier based on the time left + uint256 avg_time_left; + { + uint256 time_left_p1 = thisStake.ending_timestamp - accrue_start_time; + uint256 time_left_p2 = thisStake.ending_timestamp - block.timestamp; + avg_time_left = (time_left_p1 + time_left_p2) / 2; + } + midpoint_lock_multiplier = lockMultiplier(avg_time_left); + + // midpoint_lock_multiplier = lockMultiplier( + // ( + // (thisStake.ending_timestamp - accrue_start_time) + + // (thisStake.ending_timestamp - block.timestamp) + // ) / 2 + // ); + } + + // Sanity check: make sure it never goes above the initial multiplier + if (midpoint_lock_multiplier > thisStake.lock_multiplier) midpoint_lock_multiplier = thisStake.lock_multiplier; + } + + // // Calculate the combined weight for an account + // function calcCurCombinedWeight(address account) public override view + // returns ( + // uint256 old_combined_weight, + // uint256 new_vefxs_multiplier, + // uint256 new_combined_weight + // ) + // { + // // Get the old combined weight + // old_combined_weight = _combined_weights[account]; + + // // Get the veFXS multipliers + // // For the calculations, use the midpoint (analogous to midpoint Riemann sum) + // new_vefxs_multiplier = veFXSMultiplier(account); + + // uint256 midpoint_vefxs_multiplier; + // if ( + // (_locked_liquidity[account] == 0 && _combined_weights[account] == 0) || + // (new_vefxs_multiplier >= _vefxsMultiplierStored[account]) + // ) { + // // This is only called for the first stake to make sure the veFXS multiplier is not cut in half + // // Also used if the user increased or maintained their position + // midpoint_vefxs_multiplier = new_vefxs_multiplier; + // } + // else { + // // Handles natural decay with a non-increased veFXS position + // midpoint_vefxs_multiplier = (new_vefxs_multiplier + _vefxsMultiplierStored[account]) / 2; + // } + + // // Loop through the locked stakes, first by getting the liquidity * lock_multiplier portion + // new_combined_weight = 0; + // for (uint256 i; i < lockedStakes[account].length; i++) { + // LockedStake memory thisStake = lockedStakes[account][i]; + + // // Calculate the midpoint lock multiplier + // // uint256 midpoint_lock_multiplier = calcCurrLockMultiplier(account, i); + + // // Calculate the combined boost + // // uint256 liquidity = thisStake.liquidity; + // // uint256 combined_boosted_amount = thisStake.liquidity + ((thisStake.liquidity * (midpoint_lock_multiplier + midpoint_vefxs_multiplier)) / MULTIPLIER_PRECISION); + // new_combined_weight += ( + // thisStake.liquidity + ( + // ( + // thisStake.liquidity * (calcCurrLockMultiplier(account, i) + midpoint_vefxs_multiplier) + // ) / MULTIPLIER_PRECISION + // ) + // ); + // } + // } + // Calculate the combined weight for an account + function calcCurCombinedWeight(address account) public override view + returns ( + uint256 old_combined_weight, + uint256 new_vefxs_multiplier, + uint256 new_combined_weight + ) + { + // Get the old combined weight + old_combined_weight = _combined_weights[account]; + + // Get the veFXS multipliers + // For the calculations, use the midpoint (analogous to midpoint Riemann sum) + new_vefxs_multiplier = veFXSMultiplier(account); + + uint256 midpoint_vefxs_multiplier; + if ( + (_locked_liquidity[account] == 0 && _combined_weights[account] == 0) || + (new_vefxs_multiplier >= _vefxsMultiplierStored[account]) + ) { + // This is only called for the first stake to make sure the veFXS multiplier is not cut in half + // Also used if the user increased or maintained their position + midpoint_vefxs_multiplier = new_vefxs_multiplier; + } + else { + // Handles natural decay with a non-increased veFXS position + midpoint_vefxs_multiplier = (new_vefxs_multiplier + _vefxsMultiplierStored[account]) / 2; + } + + // Loop through the locked stakes, first by getting the liquidity * lock_multiplier portion + // new_combined_weight = 0; + for (uint256 i; i < lockedStakes[account].length; i++) { + LockedStake memory thisStake = lockedStakes[account][i]; + + // Calculate the midpoint lock multiplier + uint256 midpoint_lock_multiplier = calcCurrLockMultiplier(account, i); + + // Calculate the combined boost + uint256 liquidity = thisStake.liquidity; + uint256 combined_boosted_amount = liquidity + ((liquidity * (midpoint_lock_multiplier + midpoint_vefxs_multiplier)) / MULTIPLIER_PRECISION); + new_combined_weight += combined_boosted_amount; + } + } + + // ------ LOCK RELATED ------ + + // All the locked stakes for a given account + function lockedStakesOf(address account) external view returns (LockedStake[] memory) { + return lockedStakes[account]; + } + + // Returns the length of the locked stakes for a given account + function lockedStakesOfLength(address account) external view returns (uint256) { + return lockedStakes[account].length; + } + + function getLockedStake(address staker, uint256 locked_stake_index) public view returns (LockedStake memory locked_stake) { + return(lockedStakes[staker][locked_stake_index]); + } + + function getLockedStakeLiquidity(address staker, uint256 locked_stake_index) public view returns (uint256) { + return(lockedStakes[staker][locked_stake_index].liquidity); + } + + /* =============== MUTATIVE FUNCTIONS =============== */ + + // ------ STAKING ------ + + function _updateStake(address staker, uint256 index, uint256 start_timestamp, uint256 liquidity, uint256 ending_timestamp, uint256 lock_multiplier) internal { + lockedStakes[staker][index] = LockedStake(start_timestamp, liquidity, ending_timestamp, lock_multiplier); + } + + function _createNewStake(address staker, uint256 start_timestamp, uint256 liquidity, uint256 ending_timestamp, uint256 lock_multiplier) internal { + lockedStakes[staker].push(LockedStake(start_timestamp, liquidity, ending_timestamp, lock_multiplier)); + } + + function _updateLiqAmts(address staker_address, uint256 amt, bool is_add) internal { + // Get the proxy address + address the_proxy = staker_designated_proxies[staker_address]; + + if (is_add) { + // Update total liquidities + _total_liquidity_locked += amt; + _locked_liquidity[staker_address] += amt; + + // Update the proxy + if (staker_designated_proxies[staker_address] != address(0)) { + proxy_lp_balances[the_proxy] += amt; + } + } + else { + // Update total liquidities + _total_liquidity_locked -= amt; + _locked_liquidity[staker_address] -= amt; + + // Update the proxy + if (the_proxy != address(0)) proxy_lp_balances[the_proxy] -= amt; + } + + // Need to call to update the combined weights + updateRewardAndBalance(staker_address, false); + } + + // Add additional LPs to an existing locked stake + function lockAdditional(uint256 theArrayIndex, uint256 addl_liq) nonReentrant updateRewardAndBalanceMdf(msg.sender, true) public { + // Get the stake by its index + LockedStake memory thisStake = lockedStakes[msg.sender][theArrayIndex]; + + // Calculate the new amount + // uint256 new_amt = thisStake.liquidity + addl_liq; + + // Checks + if (addl_liq <= 0) revert MustBePositive(); + + // Pull the tokens from the sender + TransferHelperV2.safeTransferFrom(address(stakingToken), msg.sender, address(this), addl_liq); + + // Update the stake + // lockedStakes[msg.sender][theArrayIndex] = LockedStake( + // thisStake.start_timestamp, + // (thisStake.liquidity + addl_liq), + // thisStake.ending_timestamp, + // thisStake.lock_multiplier + // ); + _updateStake( + msg.sender, + theArrayIndex, + thisStake.start_timestamp, + (thisStake.liquidity + addl_liq), + thisStake.ending_timestamp, + thisStake.lock_multiplier + ); + // Update liquidities + _updateLiqAmts(msg.sender, addl_liq, true); + + emit LockedAdditional(msg.sender, theArrayIndex, addl_liq); + } + + // Extends the lock of an existing stake + function lockLonger(uint256 theArrayIndex, uint256 new_ending_ts) nonReentrant updateRewardAndBalanceMdf(msg.sender, true) public { + // Get the stake by its index + LockedStake memory thisStake = lockedStakes[msg.sender][theArrayIndex]; + + // Check + // require(new_ending_ts > block.timestamp, "Must be in the future"); + if (new_ending_ts <= block.timestamp) revert MustBeInTheFuture(); + + // Calculate some times + //uint256 time_left = (thisStake.ending_timestamp > block.timestamp) ? thisStake.ending_timestamp - block.timestamp : 0; + uint256 new_secs = new_ending_ts - block.timestamp; + + // Checks + // require(time_left > 0, "Already expired"); + if (new_secs <= ( + (thisStake.ending_timestamp > block.timestamp) ? + thisStake.ending_timestamp - block.timestamp : 0 + )) revert CannotShortenLockTime(); + if (new_secs < lock_time_min) revert MinimumStakeTimeNotMet(); + if (new_secs > lock_time_for_max_multiplier) revert TryingToLockForTooLong(); + + // Update the stake + // lockedStakes[msg.sender][theArrayIndex] = LockedStake( + // block.timestamp, + // thisStake.liquidity, + // new_ending_ts, + // lockMultiplier(new_secs) + // ); + _updateStake( + msg.sender, + theArrayIndex, + block.timestamp, + thisStake.liquidity, + new_ending_ts, + lockMultiplier(new_secs) + ); + + // Need to call to update the combined weights + updateRewardAndBalance(msg.sender, false); + + emit LockedLonger(msg.sender, theArrayIndex, new_secs, block.timestamp, new_ending_ts); + } + + // Two different stake functions are needed because of delegateCall and msg.sender issues (important for proxies) + function stakeLocked(uint256 liquidity, uint256 secs) nonReentrant external returns (uint256) { + return _stakeLocked(msg.sender, msg.sender, liquidity, secs, block.timestamp); + } + + // If this were not internal, and source_address had an infinite approve, this could be exploitable + // (pull funds from source_address and stake for an arbitrary staker_address) + function _stakeLocked( + address staker_address, + address source_address, + uint256 liquidity, + uint256 secs, + uint256 start_timestamp + ) internal updateRewardAndBalanceMdf(staker_address, true) returns (uint256) { + if (stakingPaused) revert StakingPaused(); + if (secs < lock_time_min) revert MinimumStakeTimeNotMet(); + if (secs > lock_time_for_max_multiplier) revert TryingToLockForTooLong(); + + // Pull in the required token(s) + // Varies per farm + TransferHelperV2.safeTransferFrom(address(stakingToken), source_address, address(this), liquidity); + + // Get the lock multiplier and create the new lockedStake + // uint256 lock_multiplier = lockMultiplier(secs); + + // Create the locked stake + // lockedStakes[staker_address].push(LockedStake( + // start_timestamp, + // liquidity, + // block.timestamp + secs, + // lockMultiplier(secs) + // )); + _createNewStake( + staker_address, + start_timestamp, + liquidity, + block.timestamp + secs, + lockMultiplier(secs) + ); + + // Update liquidities + _updateLiqAmts(staker_address, liquidity, true); + + emit StakeLocked(staker_address, liquidity, secs, lockedStakes[staker_address].length, source_address); + + return lockedStakes[staker_address].length; + } + + // ------ WITHDRAWING ------ + + // Two different withdrawLocked functions are needed because of delegateCall and msg.sender issues (important for proxies) + function withdrawLocked(uint256 theArrayIndex, address destination_address) nonReentrant external returns (uint256) { + if (withdrawalsPaused == true) revert WithdrawalsPaused(); + return _withdrawLocked(msg.sender, destination_address, theArrayIndex); + } + + // No withdrawer == msg.sender check needed since this is only internally callable and the checks are done in the wrapper + function _withdrawLocked( + address staker_address, + address destination_address, + uint256 theArrayIndex + ) internal returns (uint256) { + // Collect rewards first and then update the balances + _getReward(staker_address, destination_address, true); + + // Get the stake and its index + // (LockedStake memory thisStake, uint256 theArrayIndex) = _getStake(staker_address, lockedStake); + LockedStake memory thisStake = lockedStakes[staker_address][theArrayIndex]; + + // require(block.timestamp >= thisStake.ending_timestamp || stakesUnlocked == true, "Stake is still locked!"); + // the stake must still be locked to transfer + if (block.timestamp >= thisStake.ending_timestamp || stakesUnlocked == true) { + revert StakesUnlocked(); + } + // uint256 liquidity = thisStake.liquidity; + + if (thisStake.liquidity > 0) { + + // Give the tokens to the destination_address + // Should throw if insufficient balance + TransferHelperV2.safeTransfer(address(stakingToken), destination_address, thisStake.liquidity); + + // // Update liquidities + // _total_liquidity_locked -= thisStake.liquidity; + // _locked_liquidity[staker_address] -= thisStake.liquidity; + // { + // address the_proxy = getProxyFor(staker_address); + // if (the_proxy != address(0)) proxy_lp_balances[the_proxy] -= thisStake.liquidity; + // } + + // Remove the stake from the array + delete lockedStakes[staker_address][theArrayIndex]; + + // // Need to call again to make sure everything is correct + // updateRewardAndBalance(staker_address, false); + + // Update liquidities + _updateLiqAmts(staker_address, thisStake.liquidity, false); + + emit WithdrawLocked(staker_address, thisStake.liquidity, theArrayIndex, destination_address); + } + + return thisStake.liquidity; + } + + function _getRewardExtraLogic(address rewardee, address destination_address) internal override { + // Do nothing + } + + /* ========== LOCK TRANSFER & AUTHORIZATIONS - Approvals, Functions, Errors, & Events ========== */ + + // Approve `spender` to transfer `lockedStake` on behalf of `owner` + function setAllowance(address spender, uint256 lockedStakeIndex, uint256 amount) external { + if(spenderAllowance[msg.sender][lockedStakeIndex][spender] >= 0) revert CannotBeZero(); + spenderAllowance[msg.sender][lockedStakeIndex][spender] = amount; + emit Approval(msg.sender, spender, lockedStakeIndex, amount); + } + + function increaseAllowance(address spender, uint256 lockedStakeIndex, uint256 amount) external { + if (spenderAllowance[msg.sender][lockedStakeIndex][spender] == 0) revert AllowanceIsZero(); + spenderAllowance[msg.sender][lockedStakeIndex][spender] += amount; + emit Approval(msg.sender, spender, lockedStakeIndex, spenderAllowance[msg.sender][lockedStakeIndex][spender]); + } + + // Revoke approval for a single lockedStake + function removeAllowance(address spender, uint256 lockedStakeIndex) external { + spenderAllowance[msg.sender][lockedStakeIndex][spender] = 0; + emit Approval(msg.sender, spender, lockedStakeIndex, 0); + } + + // Approve or revoke `spender` to transfer any/all locks on behalf of the owner + function setApprovalForAll(address spender, bool approved) external { + spenderApprovalForAllLocks[msg.sender][spender] = approved; + emit ApprovalForAll(msg.sender, spender, approved); + } + + // internal approval check and allowance manager + function isApproved(address staker, uint256 lockedStakeIndex, uint256 amount) public view returns (bool) { + // check if spender is approved for all `staker` locks + if (spenderApprovalForAllLocks[staker][msg.sender]) { + return true; + } else if (spenderAllowance[staker][lockedStakeIndex][msg.sender] >= amount) { + return true; + } else { + // for any other possibility, return false + return false; + } + } + + function _spendAllowance(address staker, uint256 lockedStakeIndex, uint256 amount) internal { + if (spenderAllowance[staker][lockedStakeIndex][msg.sender] == amount) { + spenderAllowance[staker][lockedStakeIndex][msg.sender] = 0; + } else if (spenderAllowance[staker][lockedStakeIndex][msg.sender] > amount) { + spenderAllowance[staker][lockedStakeIndex][msg.sender] -= amount; + } else { + revert InsufficientAllowance(); + } + } + + // ------ TRANSFERRING LOCKED STAKES ------ + + function transferLockedFrom( + address sender_address, + address receiver_address, + uint256 sender_lock_index, + uint256 transfer_amount, + bool use_receiver_lock_index, + uint256 receiver_lock_index + ) external nonReentrant returns (uint256,uint256) { + // check approvals + if (!isApproved(sender_address, sender_lock_index, transfer_amount)) revert TransferLockNotAllowed(msg.sender, sender_lock_index); + + // adjust the allowance down + _spendAllowance(sender_address, sender_lock_index, transfer_amount); + + // do the transfer + /// @dev the approval check is done in modifier, so to reach here caller is permitted, thus OK + // to supply both staker & receiver here (no msg.sender) + return(_safeTransferLockedByLockIndex([sender_address, receiver_address], sender_lock_index, transfer_amount, use_receiver_lock_index, receiver_lock_index)); + } + + function transferLocked( + address receiver_address, + uint256 sender_lock_index, + uint256 transfer_amount, + bool use_receiver_lock_index, + uint256 receiver_lock_index + ) external nonReentrant returns (uint256,uint256) { + // do the transfer + /// @dev approval/owner check not needed here as msg.sender is the staker + return(_safeTransferLockedByLockIndex([msg.sender, receiver_address], sender_lock_index, transfer_amount, use_receiver_lock_index, receiver_lock_index)); + } + + function _safeTransferLockedByLockIndex( + address[2] memory addrs, // [0]: sender_address, [1]: receiver_address. Reduces stack size + uint256 sender_lock_index, + uint256 transfer_amount, + bool use_receiver_lock_index, + uint256 receiver_lock_index + ) internal updateRewardAndBalanceMdf(addrs[0], true) updateRewardAndBalanceMdf(addrs[1], true) returns (uint256,uint256) { + + // on transfer, call addrs[0] to verify sending is ok + if (addrs[0].code.length > 0) { + require( + ILockReceiverV2(addrs[0]).beforeLockTransfer(addrs[0], addrs[1], sender_lock_index, "") + == + ILockReceiverV2.beforeLockTransfer.selector // 00x4fb07105 <--> bytes4(keccak256("beforeLockTransfer(address,address,bytes32,bytes)")) + ); + } + + // Get the stake and its index + LockedStake memory senderStake = getLockedStake(addrs[0], sender_lock_index); + + // perform checks + { + if (addrs[1] == address(0) || addrs[1] == addrs[0]) { + revert InvalidReceiver(); + } + if (block.timestamp >= senderStake.ending_timestamp || stakesUnlocked == true) { + revert StakesUnlocked(); + } + if (transfer_amount > senderStake.liquidity || transfer_amount <= 0) { + revert InvalidAmount(); + } + } + + // Update the liquidities + _locked_liquidity[addrs[0]] -= transfer_amount; + _locked_liquidity[addrs[1]] += transfer_amount; + + if (getProxyFor(addrs[0]) != address(0)) { + proxy_lp_balances[getProxyFor(addrs[0])] -= transfer_amount; + } + + if (getProxyFor(addrs[1]) != address(0)) { + proxy_lp_balances[getProxyFor(addrs[1])] += transfer_amount; + } + + // if sent amount was all the liquidity, delete the stake, otherwise decrease the balance + if (transfer_amount == senderStake.liquidity) { + delete lockedStakes[addrs[0]][sender_lock_index]; + } else { + lockedStakes[addrs[0]][sender_lock_index].liquidity -= transfer_amount; + } + + // Get the stake and its index + { + // Scope here due to stack-too-deep + LockedStake memory receiverStake = getLockedStake(addrs[1], receiver_lock_index); + + /** if use_receiver_lock_index is true & + * & the index is valid + * & has liquidity + * & is still locked, update the stake & ending timestamp (longer of the two) + * else, create a new lockedStake + * note using nested if checks to reduce gas costs slightly + */ + if (use_receiver_lock_index == true) { + if (receiver_lock_index < lockedStakes[addrs[1]].length ) { + if (receiverStake.liquidity > 0) { + if (receiverStake.ending_timestamp > block.timestamp) { + // Update the existing staker's stake liquidity + lockedStakes[addrs[1]][receiver_lock_index].liquidity += transfer_amount; + // check & update ending timestamp to whichever is farthest out + if (receiverStake.ending_timestamp < senderStake.ending_timestamp) { + // update the lock expiration to the later timestamp + lockedStakes[addrs[1]][receiver_lock_index].ending_timestamp = senderStake.ending_timestamp; + // update the lock multiplier since we are effectively extending the lock + lockedStakes[addrs[1]][receiver_lock_index].lock_multiplier = lockMultiplier( + senderStake.ending_timestamp - block.timestamp + ); + } + } + } + } + } else { + // create the new lockedStake + // lockedStakes[addrs[1]].push(LockedStake( + // senderStake.start_timestamp, + // transfer_amount, + // senderStake.ending_timestamp, + // senderStake.lock_multiplier + // )); + _createNewStake( + addrs[1], + senderStake.start_timestamp, + transfer_amount, + senderStake.ending_timestamp, + senderStake.lock_multiplier + ); + + // update the return value of the locked index + /// todo could also just use the length of the array in all 3 situations below - which is more gas efficient? + receiver_lock_index = lockedStakes[addrs[1]].length; + } + } + + // Need to call again to make sure everything is correct + updateRewardAndBalance(addrs[0], true); + updateRewardAndBalance(addrs[1], true); + + emit TransferLockedByIndex( + addrs[0], + addrs[1], + transfer_amount, + sender_lock_index, + receiver_lock_index + ); + + // call the receiver with the destination lockedStake to verify receiving is ok + if (ILockReceiverV2(addrs[1]).onLockReceived( + addrs[0], + addrs[1], + receiver_lock_index, + "" + ) != ILockReceiverV2.onLockReceived.selector) revert InvalidReceiver(); //0xc42d8b95) revert InvalidReceiver(); + + return (sender_lock_index, receiver_lock_index); + + } + + /* ========== RESTRICTED FUNCTIONS - Owner or timelock only ========== */ + + // Inherited... + + /* ========== EVENTS ========== */ + event LockedAdditional(address indexed user, uint256 locked_stake_index, uint256 amount); + event LockedLonger(address indexed user, uint256 locked_stake_index, uint256 new_secs, uint256 new_start_ts, uint256 new_end_ts); + event StakeLocked(address indexed user, uint256 amount, uint256 secs, uint256 locked_stake_index, address source_address); + event WithdrawLocked(address indexed user, uint256 liquidity, uint256 locked_stake_index, address destination_address); + + event Approval(address indexed owner, address indexed spender, uint256 locked_stake_index, uint256 amount); + event ApprovalForAll(address indexed owner, address indexed spender, bool approved); + + event TransferLockedByIndex(address indexed sender_address, address indexed destination_address, uint256 amount_transferred, uint256 source_stake_index, uint256 destination_stake_index); +} \ No newline at end of file diff --git a/src/hardhat/old_contracts/Bridges/Arbitrum/CrossChainBridgeBacker_ARBI_AnySwap.sol b/src/hardhat/old_contracts/Bridges/Arbitrum/CrossChainBridgeBacker_ARBI_AnySwap.sol deleted file mode 100644 index 18fe4451..00000000 --- a/src/hardhat/old_contracts/Bridges/Arbitrum/CrossChainBridgeBacker_ARBI_AnySwap.sol +++ /dev/null @@ -1,62 +0,0 @@ -// SPDX-License-Identifier: GPL-2.0-or-later -pragma solidity >=0.8.0; - -import "../CrossChainBridgeBacker.sol"; -import "../../ERC20/__CROSSCHAIN/IAnyswapV5ERC20.sol"; -import "./IL2GatewayRouter.sol"; - -contract CrossChainBridgeBacker_ARBI_AnySwap is CrossChainBridgeBacker { - constructor ( - address _owner, - address _timelock_address, - address _cross_chain_oracle_address, - address[5] memory _token_addresses, - address[3] memory _bridge_addresses, - address _destination_address_override, - string memory _non_evm_destination_address, - string memory _name - ) - CrossChainBridgeBacker(_owner, _timelock_address, _cross_chain_oracle_address, _token_addresses, _bridge_addresses, _destination_address_override, _non_evm_destination_address, _name) - {} - - // Override with logic specific to this chain - function _bridgingLogic(uint256 token_type, address address_to_send_to, uint256 token_amount) internal override { - // [Arbitrum] - if (token_type == 0){ - // anyFRAX -> L1 FRAX - // Swapout - // AnySwap Bridge - IAnyswapV5ERC20(address(anyFRAX)).Swapout(token_amount, address_to_send_to); - } - else if (token_type == 1) { - // anyFXS -> L1 FXS - // Swapout - // AnySwap Bridge - IAnyswapV5ERC20(address(anyFXS)).Swapout(token_amount, address_to_send_to); - } - else { - revert("COLLATERAL TRANSFERS ARE DISABLED FOR NOW"); - // // arbiUSDC => L1 USDC - // // outboundTransfer - // // Arbitrum One Bridge - // // https://arbiscan.io/tx/0x32e16d596084d55f5ea0411ecfa25354e951db4b0d0055a14a86caeeb5d8f133 - - // revert("MAKE SURE TO TEST THIS CAREFULLY BEFORE DEPLOYING"); - - // // Approve - // collateral_token.approve(bridge_addresses[token_type], token_amount); - - // // Get the calldata - // uint256 maxSubmissionCost = 1; - // bytes memory the_calldata = abi.encode(['uint256', 'bytes'], maxSubmissionCost, '0x'); - - // // Transfer - // IL2GatewayRouter(bridge_addresses[token_type]).outboundTransfer( - // 0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48, // L1 token address - // address_to_send_to, - // token_amount, - // the_calldata - // ); - } - } -} diff --git a/src/hardhat/old_contracts/Bridges/Arbitrum/FraxLiquidityBridger_ARBI_AnySwap.sol b/src/hardhat/old_contracts/Bridges/Arbitrum/FraxLiquidityBridger_ARBI_AnySwap.sol deleted file mode 100644 index 0e5b68f2..00000000 --- a/src/hardhat/old_contracts/Bridges/Arbitrum/FraxLiquidityBridger_ARBI_AnySwap.sol +++ /dev/null @@ -1,77 +0,0 @@ -// SPDX-License-Identifier: GPL-2.0-or-later -pragma solidity >=0.8.0; - -import "../FraxLiquidityBridger.sol"; -import "./IL1CustomGateway.sol"; - -contract FraxLiquidityBridger_ARBI_AnySwap is FraxLiquidityBridger { - constructor ( - address _owner, - address _timelock_address, - address _amo_minter_address, - address[3] memory _bridge_addresses, - address _destination_address_override, - string memory _non_evm_destination_address, - string memory _name - ) - FraxLiquidityBridger(_owner, _timelock_address, _amo_minter_address, _bridge_addresses, _destination_address_override, _non_evm_destination_address, _name) - {} - - // The Arbitrum One Bridge needs _maxGas and _gasPriceBid parameters - uint256 public maxGas = 275000; - uint256 public gasPriceBid = 1632346222; - - function setGasVariables(uint256 _maxGas, uint256 _gasPriceBid) external onlyByOwnGov { - maxGas = _maxGas; - gasPriceBid = _gasPriceBid; - } - - // Override with logic specific to this chain - function _bridgingLogic(uint256 token_type, address address_to_send_to, uint256 token_amount) internal override { - // [Arbitrum] - if (token_type == 0){ - // L1 FRAX -> anyFRAX - // Simple dump in / CREATE2 - // AnySwap Bridge - TransferHelper.safeTransfer(address(FRAX), bridge_addresses[token_type], token_amount); - } - else if (token_type == 1) { - // L1 FXS -> anyFXS - // Simple dump in / CREATE2 - // AnySwap Bridge - TransferHelper.safeTransfer(address(FXS), bridge_addresses[token_type], token_amount); - } - else { - revert("COLLATERAL TRANSFERS ARE DISABLED FOR NOW"); - // // L1 USDC -> arbiUSDC - // // outboundTransfer - // // Arbitrum One Bridge - // // https://etherscan.io/tx/0x00835e1352b991ad9bfdb214628d58a9f1efe3af0436feaac31a404cfc402be5 - - // // INPUT - // // https://github.com/OffchainLabs/arbitrum/blob/3340b1919c2b0ed26f2b4c0298fb31dcbc075919/packages/arb-bridge-peripherals/test/customGateway.e2e.ts - - // revert("MAKE SURE TO TEST THIS CAREFULLY BEFORE DEPLOYING"); - - // // Approve - // collateral_token.approve(bridge_addresses[token_type], token_amount); - - // // Get the calldata - // uint256 maxSubmissionCost = 1; - // bytes memory the_calldata = abi.encode(['uint256', 'bytes'], maxSubmissionCost, '0x'); - - // // Transfer - // IL1CustomGateway(bridge_addresses[token_type]).outboundTransfer{ value: maxSubmissionCost + (maxGas * gasPriceBid) }( - // collateral_address, - // address_to_send_to, - // token_amount, - // maxGas, - // gasPriceBid, - // the_calldata - // ); - - // revert("finalizeInboundTransfer needs to be called somewhere too"); - } - } - -} diff --git a/src/hardhat/old_contracts/Bridges/Arbitrum/IL1CustomGateway.sol b/src/hardhat/old_contracts/Bridges/Arbitrum/IL1CustomGateway.sol deleted file mode 100644 index f67fdf3d..00000000 --- a/src/hardhat/old_contracts/Bridges/Arbitrum/IL1CustomGateway.sol +++ /dev/null @@ -1,24 +0,0 @@ -// SPDX-License-Identifier: GPL-2.0-or-later -pragma solidity >=0.8.0; - -interface IL1CustomGateway { - function calculateL2TokenAddress(address l1ERC20) external view returns (address); - function counterpartGateway() external view returns (address); - function encodeWithdrawal(uint256 _exitNum, address _initialDestination) external pure returns (bytes32); - function finalizeInboundTransfer(address _token, address _from, address _to, uint256 _amount, bytes calldata _data) external; - function forceRegisterTokenToL2(address[] memory _l1Addresses, address[] memory _l2Addresses, uint256 _maxGas, uint256 _gasPriceBid, uint256 _maxSubmissionCost) external returns (uint256); - function getExternalCall(uint256 _exitNum, address _initialDestination, bytes calldata _initialData) external view returns (address target, bytes calldata data); - function getOutboundCalldata(address _l1Token, address _from, address _to, uint256 _amount, bytes calldata _data) external view returns (bytes calldata outboundCalldata); - function inbox() external view returns (address); - function initialize(address _l1Counterpart, address _l1Router, address _inbox, address _owner) external; - function l1ToL2Token(address) external view returns (address); - function outboundTransfer(address _l1Token, address _to, uint256 _amount, uint256 _maxGas, uint256 _gasPriceBid, bytes calldata _data) external payable returns (bytes calldata res); - function owner() external view returns (address); - function postUpgradeInit() external; - function redirectedExits(bytes32) external view returns (bool isExit, address _newTo, bytes calldata _newData); - function registerTokenToL2(address, uint256, uint256, uint256, address) external returns (uint256); - function registerTokenToL2(address _l2Address, uint256 _maxGas, uint256 _gasPriceBid, uint256 _maxSubmissionCost) external returns (uint256); - function router() external view returns (address); - function transferExitAndCall(uint256 _exitNum, address _initialDestination, address _newDestination, bytes calldata _newData, bytes calldata _data) external; - function whitelist() external view returns (address); -} diff --git a/src/hardhat/old_contracts/Bridges/Arbitrum/IL2GatewayRouter.sol b/src/hardhat/old_contracts/Bridges/Arbitrum/IL2GatewayRouter.sol deleted file mode 100644 index 53cd89bd..00000000 --- a/src/hardhat/old_contracts/Bridges/Arbitrum/IL2GatewayRouter.sol +++ /dev/null @@ -1,19 +0,0 @@ -// SPDX-License-Identifier: GPL-2.0-or-later -pragma solidity >=0.8.0; - -interface IL2GatewayRouter { - function calculateL2TokenAddress(address l1ERC20) external view returns (address); - function counterpartGateway() external view returns (address); - function defaultGateway() external view returns (address); - function finalizeInboundTransfer(address, address, address, uint256, bytes calldata) external; - function getGateway(address _token) external view returns (address gateway); - function getOutboundCalldata(address _token, address _from, address _to, uint256 _amount, bytes calldata _data) external view returns (bytes memory); - function initialize(address _counterpartGateway, address _defaultGateway) external; - function l1TokenToGateway(address) external view returns (address); - function outboundTransfer(address _l1Token, address _to, uint256 _amount, bytes calldata _data) external returns (bytes calldata); - function outboundTransfer(address _token, address _to, uint256 _amount, uint256 _maxGas, uint256 _gasPriceBid, bytes calldata _data) external returns (bytes memory); - function postUpgradeInit() external; - function router() external view returns (address); - function setDefaultGateway(address newL2DefaultGateway) external; - function setGateway(address[] memory _l1Token, address[] memory _gateway) external; -} diff --git a/src/hardhat/old_contracts/Misc_AMOs/Convex_AMO_V2.sol b/src/hardhat/old_contracts/Misc_AMOs/Convex_AMO_V2.sol deleted file mode 100644 index 4430a650..00000000 --- a/src/hardhat/old_contracts/Misc_AMOs/Convex_AMO_V2.sol +++ /dev/null @@ -1,486 +0,0 @@ -// SPDX-License-Identifier: GPL-2.0-or-later -pragma solidity >=0.8.0; - -// ==================================================================== -// | ______ _______ | -// | / _____________ __ __ / ____(_____ ____ _____ ________ | -// | / /_ / ___/ __ `| |/_/ / /_ / / __ \/ __ `/ __ \/ ___/ _ \ | -// | / __/ / / / /_/ _> < / __/ / / / / / /_/ / / / / /__/ __/ | -// | /_/ /_/ \__,_/_/|_| /_/ /_/_/ /_/\__,_/_/ /_/\___/\___/ | -// | | -// ==================================================================== -// ============================ Convex_AMO_V2 ============================ -// ==================================================================== -// Frax Finance: https://github.com/FraxFinance - -// Primary Author(s) -// Travis Moore: https://github.com/FortisFortuna -// Jason Huan: https://github.com/jasonhuan - -// Reviewer(s) / Contributor(s) -// Sam Kazemian: https://github.com/samkazemian -// Dennis: github.com/denett - - -import "../Curve/IStableSwap3Pool.sol"; -import "../Curve/IMetaImplementationUSD.sol"; -import "../Misc_AMOs/convex/IConvexBooster.sol"; -import "../Misc_AMOs/convex/IConvexBaseRewardPool.sol"; -import "../Misc_AMOs/convex/IVirtualBalanceRewardPool.sol"; -import "../Misc_AMOs/convex/IConvexClaimZap.sol"; -import "../Misc_AMOs/convex/IcvxRewardPool.sol"; -import "../Frax/Frax.sol"; -import "../Frax/IFraxAMOMinter.sol"; -import '../Uniswap/TransferHelper.sol'; -import "../ERC20/ERC20.sol"; -import "../Math/SafeMath.sol"; -import "../Proxy/Initializable.sol"; -import "../Staking/Owned.sol"; - -contract Convex_AMO_V2 is Owned { - using SafeMath for uint256; - // SafeMath automatically included in Solidity >= 8.0.0 - - /* ========== STATE VARIABLES ========== */ - - // Core - FRAXStablecoin private FRAX = FRAXStablecoin(0x853d955aCEf822Db058eb8505911ED77F175b99e); - ERC20 private collateral_token = ERC20(0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48); - IFraxAMOMinter private amo_minter; - - // Curve-related - IMetaImplementationUSD private frax3crv_metapool; - IStableSwap3Pool private three_pool; - ERC20 private three_pool_erc20; - - // Convex-related - IConvexBooster private convex_booster; - IConvexBaseRewardPool private convex_base_reward_pool; - IConvexClaimZap private convex_claim_zap; - IVirtualBalanceRewardPool private convex_fxs_rewards_pool; - IcvxRewardPool private cvx_reward_pool; - ERC20 private cvx; - address private cvx_crv_address; - uint256 private lp_deposit_pid; - - address private crv_address; - address private constant fxs_address = 0x3432B6A60D23Ca0dFCa7761B7ab56459D9C964D0; - address private frax3crv_metapool_address; - - address public timelock_address; - address public custodian_address; - - // Number of decimals under 18, for collateral token - uint256 private missing_decimals; - - // Precision related - uint256 private PRICE_PRECISION; - - // Min ratio of collat <-> 3crv conversions via add_liquidity / remove_liquidity; 1e6 - uint256 public liq_slippage_3crv; - - // Min ratio of (FRAX + 3CRV) <-> FRAX3CRV-f-2 metapool conversions via add_liquidity / remove_liquidity; 1e6 - uint256 public slippage_metapool; - - // Convergence window - uint256 public convergence_window; // 1 cent - - // Default will use global_collateral_ratio() - bool public custom_floor; - uint256 public frax_floor; - - // Discount - bool public set_discount; - uint256 public discount_rate; - - /* ========== CONSTRUCTOR ========== */ - - constructor ( - address _owner_address, - address _amo_minter_address - ) Owned(_owner_address) { - owner = _owner_address; - missing_decimals = 12; - - frax3crv_metapool_address = 0xd632f22692FaC7611d2AA1C0D552930D43CAEd3B; - frax3crv_metapool = IMetaImplementationUSD(frax3crv_metapool_address); - three_pool = IStableSwap3Pool(0xbEbc44782C7dB0a1A60Cb6fe97d0b483032FF1C7); - three_pool_erc20 = ERC20(0x6c3F90f043a72FA612cbac8115EE7e52BDe6E490); - amo_minter = IFraxAMOMinter(_amo_minter_address); - - // Convex-related - convex_booster = IConvexBooster(0xF403C135812408BFbE8713b5A23a04b3D48AAE31); - convex_base_reward_pool = IConvexBaseRewardPool(0xB900EF131301B307dB5eFcbed9DBb50A3e209B2e); - convex_claim_zap = IConvexClaimZap(0x4890970BB23FCdF624A0557845A29366033e6Fa2); - cvx_reward_pool = IcvxRewardPool(0xCF50b810E57Ac33B91dCF525C6ddd9881B139332); - cvx = ERC20(0x4e3FBD56CD56c3e72c1403e103b45Db9da5B9D2B); - cvx_crv_address = 0x62B9c7356A2Dc64a1969e19C23e4f579F9810Aa7; - crv_address = 0xD533a949740bb3306d119CC777fa900bA034cd52; - convex_fxs_rewards_pool = IVirtualBalanceRewardPool(0xcDEC6714eB482f28f4889A0c122868450CDBF0b0); - lp_deposit_pid = 32; - - // Other variable initializations - PRICE_PRECISION = 1e6; - liq_slippage_3crv = 800000; - slippage_metapool = 950000; - convergence_window = 1e16; - custom_floor = false; - set_discount = false; - - // Get the custodian and timelock addresses from the minter - custodian_address = amo_minter.custodian_address(); - timelock_address = amo_minter.timelock_address(); - } - - /* ========== MODIFIERS ========== */ - - modifier onlyByOwnGov() { - require(msg.sender == timelock_address || msg.sender == owner, "Not owner or timelock"); - _; - } - - modifier onlyByOwnGovCust() { - require(msg.sender == timelock_address || msg.sender == owner || msg.sender == custodian_address, "Not owner, tlck, or custd"); - _; - } - - modifier onlyByMinter() { - require(msg.sender == address(amo_minter), "Not minter"); - _; - } - - /* ========== VIEWS ========== */ - - function showAllocations() public view returns (uint256[11] memory return_arr) { - // ------------LP Balance------------ - - // Free LP - uint256 lp_owned = (frax3crv_metapool.balanceOf(address(this))); - - // Staked in the vault - uint256 lp_value_in_vault = FRAX3CRVInVault(); - lp_owned = lp_owned.add(lp_value_in_vault); - - // ------------3pool Withdrawable------------ - // Uses iterate() to get metapool withdrawable amounts at FRAX floor price (global_collateral_ratio) - uint256 frax3crv_supply = frax3crv_metapool.totalSupply(); - - uint256 frax_withdrawable; - uint256 _3pool_withdrawable; - (frax_withdrawable, _3pool_withdrawable, ,) = iterate(); - if (frax3crv_supply > 0) { - _3pool_withdrawable = _3pool_withdrawable.mul(lp_owned).div(frax3crv_supply); - frax_withdrawable = frax_withdrawable.mul(lp_owned).div(frax3crv_supply); - } - else _3pool_withdrawable = 0; - - // ------------Frax Balance------------ - // Frax sums - uint256 frax_in_contract = FRAX.balanceOf(address(this)); - - // ------------Collateral Balance------------ - // Free Collateral - uint256 usdc_in_contract = collateral_token.balanceOf(address(this)); - - // Returns the dollar value withdrawable of USDC if the contract redeemed its 3CRV from the metapool; assume 1 USDC = $1 - uint256 usdc_withdrawable = _3pool_withdrawable.mul(three_pool.get_virtual_price()).div(1e18).div(10 ** missing_decimals); - - // USDC subtotal assuming FRAX drops to the CR and all reserves are arbed - uint256 usdc_subtotal = usdc_in_contract.add(usdc_withdrawable); - - return [ - frax_in_contract, // [0] Free FRAX in the contract - frax_withdrawable, // [1] FRAX withdrawable from the FRAX3CRV tokens - frax_withdrawable.add(frax_in_contract), // [2] FRAX withdrawable + free FRAX in the the contract - usdc_in_contract, // [3] Free USDC - usdc_withdrawable, // [4] USDC withdrawable from the FRAX3CRV tokens - usdc_subtotal, // [5] USDC subtotal assuming FRAX drops to the CR and all reserves are arbed - usdc_subtotal.add((frax_in_contract.add(frax_withdrawable)).mul(fraxDiscountRate()).div(1e6 * (10 ** missing_decimals))), // [6] USDC Total - lp_owned, // [7] FRAX3CRV free or in the vault - frax3crv_supply, // [8] Total supply of FRAX3CRV tokens - _3pool_withdrawable, // [9] 3pool withdrawable from the FRAX3CRV tokens - lp_value_in_vault // [10] FRAX3CRV in the vault - ]; - } - - function dollarBalances() public view returns (uint256 frax_val_e18, uint256 collat_val_e18) { - // Get the allocations - uint256[11] memory allocations = showAllocations(); - - frax_val_e18 = (allocations[2]).add((allocations[3]).mul((10 ** missing_decimals))); - collat_val_e18 = (allocations[6]).mul(10 ** missing_decimals); - } - - function showRewards() public view returns (uint256[4] memory return_arr) { - return_arr[0] = convex_base_reward_pool.earned(address(this)); // CRV claimable - return_arr[1] = 0; // CVX claimable. PITA to calculate. See https://docs.convexfinance.com/convexfinanceintegration/cvx-minting - return_arr[2] = cvx_reward_pool.earned(address(this)); // cvxCRV claimable - return_arr[3] = convex_fxs_rewards_pool.earned(address(this)); // FXS claimable - } - - // Returns hypothetical reserves of metapool if the FRAX price went to the CR, - // assuming no removal of liquidity from the metapool. - function iterate() public view returns (uint256, uint256, uint256, uint256) { - uint256 frax_balance = FRAX.balanceOf(frax3crv_metapool_address); - uint256 crv3_balance = three_pool_erc20.balanceOf(frax3crv_metapool_address); - uint256 total_balance = frax_balance.add(crv3_balance); - - uint256 floor_price_frax = uint(1e18).mul(fraxFloor()).div(1e6); - - uint256 crv3_received; - uint256 dollar_value; // 3crv is usually slightly above $1 due to collecting 3pool swap fees - for(uint i = 0; i < 256; i++){ - crv3_received = frax3crv_metapool.get_dy(0, 1, 1e18, [frax_balance, crv3_balance]); - dollar_value = crv3_received.mul(1e18).div(three_pool.get_virtual_price()); - if(dollar_value <= floor_price_frax.add(convergence_window) && dollar_value >= floor_price_frax.sub(convergence_window)){ - uint256 factor = uint256(1e6).mul(total_balance).div(frax_balance.add(crv3_balance)); //1e6 precision - - // Normalize back to initial balances, since this estimation method adds in extra tokens - frax_balance = frax_balance.mul(factor).div(1e6); - crv3_balance = crv3_balance.mul(factor).div(1e6); - return (frax_balance, crv3_balance, i, factor); - } else if (dollar_value <= floor_price_frax.add(convergence_window)){ - uint256 crv3_to_swap = total_balance.div(2 ** i); - frax_balance = frax_balance.sub(frax3crv_metapool.get_dy(1, 0, crv3_to_swap, [frax_balance, crv3_balance])); - crv3_balance = crv3_balance.add(crv3_to_swap); - } else if (dollar_value >= floor_price_frax.sub(convergence_window)){ - uint256 frax_to_swap = total_balance.div(2 ** i); - crv3_balance = crv3_balance.sub(frax3crv_metapool.get_dy(0, 1, frax_to_swap, [frax_balance, crv3_balance])); - frax_balance = frax_balance.add(frax_to_swap); - } - } - revert("No hypothetical point"); // in 256 rounds - } - - function fraxFloor() public view returns (uint256) { - if(custom_floor){ - return frax_floor; - } else { - return FRAX.global_collateral_ratio(); - } - } - - function fraxDiscountRate() public view returns (uint256) { - if(set_discount){ - return discount_rate; - } else { - return FRAX.global_collateral_ratio(); - } - } - - function FRAX3CRVInVault() public view returns (uint256) { - return convex_base_reward_pool.balanceOf(address(this)); - } - - // Backwards compatibility - function mintedBalance() public view returns (int256) { - return amo_minter.frax_mint_balances(address(this)); - } - - function usdValueInVault() public view returns (uint256) { - uint256 vault_balance = FRAX3CRVInVault(); - return vault_balance.mul(frax3crv_metapool.get_virtual_price()).div(1e18); - } - - /* ========== RESTRICTED FUNCTIONS ========== */ - - function metapoolDeposit(uint256 _frax_amount, uint256 _collateral_amount) external onlyByOwnGov returns (uint256 metapool_LP_received) { - uint256 threeCRV_received = 0; - if (_collateral_amount > 0) { - // Approve the collateral to be added to 3pool - collateral_token.approve(address(three_pool), _collateral_amount); - - // Convert collateral into 3pool - uint256[3] memory three_pool_collaterals; - three_pool_collaterals[1] = _collateral_amount; - { - uint256 min_3pool_out = (_collateral_amount * (10 ** missing_decimals)).mul(liq_slippage_3crv).div(PRICE_PRECISION); - three_pool.add_liquidity(three_pool_collaterals, min_3pool_out); - } - - // Approve the 3pool for the metapool - threeCRV_received = three_pool_erc20.balanceOf(address(this)); - - // WEIRD ISSUE: NEED TO DO three_pool_erc20.approve(address(three_pool), 0); first before every time - // May be related to https://github.com/vyperlang/vyper/blob/3e1ff1eb327e9017c5758e24db4bdf66bbfae371/examples/tokens/ERC20.vy#L85 - three_pool_erc20.approve(frax3crv_metapool_address, 0); - three_pool_erc20.approve(frax3crv_metapool_address, threeCRV_received); - } - - // Approve the FRAX for the metapool - FRAX.approve(frax3crv_metapool_address, _frax_amount); - - { - // Add the FRAX and the collateral to the metapool - uint256 min_lp_out = (_frax_amount.add(threeCRV_received)).mul(slippage_metapool).div(PRICE_PRECISION); - metapool_LP_received = frax3crv_metapool.add_liquidity([_frax_amount, threeCRV_received], min_lp_out); - } - - return metapool_LP_received; - } - - function metapoolWithdrawFrax(uint256 _metapool_lp_in, bool burn_the_frax) external onlyByOwnGov returns (uint256 frax_received) { - // Withdraw FRAX from the metapool - uint256 min_frax_out = _metapool_lp_in.mul(slippage_metapool).div(PRICE_PRECISION); - frax_received = frax3crv_metapool.remove_liquidity_one_coin(_metapool_lp_in, 0, min_frax_out); - - // Optionally burn the FRAX - if (burn_the_frax){ - burnFRAX(frax_received); - } - } - - function metapoolWithdraw3pool(uint256 _metapool_lp_in) internal onlyByOwnGov { - // Withdraw 3pool from the metapool - uint256 min_3pool_out = _metapool_lp_in.mul(slippage_metapool).div(PRICE_PRECISION); - frax3crv_metapool.remove_liquidity_one_coin(_metapool_lp_in, 1, min_3pool_out); - } - - function three_pool_to_collateral(uint256 _3pool_in) internal onlyByOwnGov { - // Convert the 3pool into the collateral - // WEIRD ISSUE: NEED TO DO three_pool_erc20.approve(address(three_pool), 0); first before every time - // May be related to https://github.com/vyperlang/vyper/blob/3e1ff1eb327e9017c5758e24db4bdf66bbfae371/examples/tokens/ERC20.vy#L85 - three_pool_erc20.approve(address(three_pool), 0); - three_pool_erc20.approve(address(three_pool), _3pool_in); - uint256 min_collat_out = _3pool_in.mul(liq_slippage_3crv).div(PRICE_PRECISION * (10 ** missing_decimals)); - three_pool.remove_liquidity_one_coin(_3pool_in, 1, min_collat_out); - } - - function metapoolWithdrawAndConvert3pool(uint256 _metapool_lp_in) external onlyByOwnGov { - metapoolWithdraw3pool(_metapool_lp_in); - three_pool_to_collateral(three_pool_erc20.balanceOf(address(this))); - } - - /* ========== Burns and givebacks ========== */ - - // Give USDC profits back. Goes through the minter - function giveCollatBack(uint256 collat_amount) external onlyByOwnGovCust { - collateral_token.approve(address(amo_minter), collat_amount); - amo_minter.receiveCollatFromAMO(collat_amount); - } - - // Burn unneeded or excess FRAX. Goes through the minter - function burnFRAX(uint256 frax_amount) public onlyByOwnGovCust { - FRAX.approve(address(amo_minter), frax_amount); - amo_minter.burnFraxFromAMO(frax_amount); - } - - /* ========== Convex: Deposit / Claim / Withdraw FRAX3CRV Metapool LP ========== */ - - // Deposit Metapool LP tokens, convert them to Convex LP, and deposit into their vault - function depositFRAX3CRV(uint256 _metapool_lp_in) external onlyByOwnGovCust{ - // Approve the metapool LP tokens for the vault contract - frax3crv_metapool.approve(address(convex_booster), _metapool_lp_in); - - // Deposit the metapool LP into the vault contract - convex_booster.deposit(lp_deposit_pid, _metapool_lp_in, true); - } - - // Withdraw Convex LP, convert it back to Metapool LP tokens, and give them back to the sender - function withdrawAndUnwrapFRAX3CRV(uint256 amount, bool claim) external onlyByOwnGovCust{ - convex_base_reward_pool.withdrawAndUnwrap(amount, claim); - } - - // Claim CVX, CRV, and FXS rewards - function claimRewardsFRAX3CRV() external onlyByOwnGovCust { - address[] memory rewardContracts = new address[](1); - rewardContracts[0] = address(convex_base_reward_pool); - - uint256[] memory chefIds = new uint256[](0); - - convex_claim_zap.claimRewards( - rewardContracts, - chefIds, - false, - false, - false, - 0, - 0 - ); - } - - /* ========== Convex: Stake / Claim / Withdraw CVX ========== */ - - // Stake CVX tokens - // E18 - function stakeCVX(uint256 _cvx_in) external onlyByOwnGovCust { - // Approve the CVX tokens for the staking contract - cvx.approve(address(cvx_reward_pool), _cvx_in); - - // Stake the CVX tokens into the staking contract - cvx_reward_pool.stakeFor(address(this), _cvx_in); - } - - // Claim cvxCRV rewards - function claimRewards_cvxCRV(bool stake) external onlyByOwnGovCust { - cvx_reward_pool.getReward(address(this), true, stake); - } - - // Unstake CVX tokens - // E18 - function withdrawCVX(uint256 cvx_amt, bool claim) external onlyByOwnGovCust { - cvx_reward_pool.withdraw(cvx_amt, claim); - } - - function withdrawRewards( - uint256 crv_amt, - uint256 cvx_amt, - uint256 cvxCRV_amt, - uint256 fxs_amt - ) external onlyByOwnGovCust { - if (crv_amt > 0) TransferHelper.safeTransfer(crv_address, msg.sender, crv_amt); - if (cvx_amt > 0) TransferHelper.safeTransfer(address(cvx), msg.sender, cvx_amt); - if (cvxCRV_amt > 0) TransferHelper.safeTransfer(cvx_crv_address, msg.sender, cvxCRV_amt); - if (fxs_amt > 0) TransferHelper.safeTransfer(fxs_address, msg.sender, fxs_amt); - } - - /* ========== RESTRICTED GOVERNANCE FUNCTIONS ========== */ - - function setAMOMinter(address _amo_minter_address) external onlyByOwnGov { - amo_minter = IFraxAMOMinter(_amo_minter_address); - - // Get the custodian and timelock addresses from the minter - custodian_address = amo_minter.custodian_address(); - timelock_address = amo_minter.timelock_address(); - - // Make sure the new addresses are not address(0) - require(custodian_address != address(0) && timelock_address != address(0), "Invalid custodian or timelock"); - } - - function setConvergenceWindow(uint256 _window) external onlyByOwnGov { - convergence_window = _window; - } - - // in terms of 1e6 (overriding global_collateral_ratio) - function setCustomFloor(bool _state, uint256 _floor_price) external onlyByOwnGov { - custom_floor = _state; - frax_floor = _floor_price; - } - - // in terms of 1e6 (overriding global_collateral_ratio) - function setDiscountRate(bool _state, uint256 _discount_rate) external onlyByOwnGov { - set_discount = _state; - discount_rate = _discount_rate; - } - - function setSlippages(uint256 _liq_slippage_3crv, uint256 _slippage_metapool) external onlyByOwnGov { - liq_slippage_3crv = _liq_slippage_3crv; - slippage_metapool = _slippage_metapool; - } - - function recoverERC20(address tokenAddress, uint256 tokenAmount) external onlyByOwnGov { - // Can only be triggered by owner or governance, not custodian - // Tokens are sent to the custodian, as a sort of safeguard - TransferHelper.safeTransfer(address(tokenAddress), msg.sender, tokenAmount); - } - - // Generic proxy - function execute( - address _to, - uint256 _value, - bytes calldata _data - ) external onlyByOwnGov returns (bool, bytes memory) { - (bool success, bytes memory result) = _to.call{value:_value}(_data); - return (success, result); - } -} \ No newline at end of file diff --git a/src/hardhat/old_contracts/Misc_AMOs/__CROSSCHAIN/Arbitrum/CurveAMO_ARBI.sol b/src/hardhat/old_contracts/Misc_AMOs/__CROSSCHAIN/Arbitrum/CurveAMO_ARBI.sol deleted file mode 100644 index 62355d3b..00000000 --- a/src/hardhat/old_contracts/Misc_AMOs/__CROSSCHAIN/Arbitrum/CurveAMO_ARBI.sol +++ /dev/null @@ -1,300 +0,0 @@ -// SPDX-License-Identifier: GPL-2.0-or-later -pragma solidity >=0.6.11; - -// ==================================================================== -// | ______ _______ | -// | / _____________ __ __ / ____(_____ ____ _____ ________ | -// | / /_ / ___/ __ `| |/_/ / /_ / / __ \/ __ `/ __ \/ ___/ _ \ | -// | / __/ / / / /_/ _> < / __/ / / / / / /_/ / / / / /__/ __/ | -// | /_/ /_/ \__,_/_/|_| /_/ /_/_/ /_/\__,_/_/ /_/\___/\___/ | -// | | -// ==================================================================== -// ========================== CurveAMO_ARBI =========================== -// ==================================================================== -// Uses Arbitrum Curve https://arbitrum.curve.fi/factory/9 - -// Frax Finance: https://github.com/FraxFinance - -// Primary Author(s) -// Travis Moore: https://github.com/FortisFortuna - - -// Reviewer(s) / Contributor(s) -// Sam Kazemian: https://github.com/samkazemian -// Jason Huan: https://github.com/jasonhuan -// Dennis: github.com/denett - -import "../../../ERC20/__CROSSCHAIN/CrossChainCanonicalFRAX.sol"; -import "../../../ERC20/ERC20.sol"; -import "../../../Bridges/Arbitrum/CrossChainBridgeBacker_ARBI_AnySwap.sol"; -import "../../curve/IFRAX2pool.sol"; -import "../../curve/I2poolGaugeDeposit.sol"; -import "../../curve/I2pool.sol"; -import "../../curve/IZapDepositor2pool.sol"; -import '../../../Uniswap/TransferHelper.sol'; -import "../../../Staking/Owned.sol"; - -contract CurveAMO_ARBI is Owned { - /* ========== STATE VARIABLES ========== */ - - // Core - CrossChainCanonicalFRAX public canFRAX; - ERC20 public USDC; // USDC: 0xFF970A61A04b1cA14834A43f5dE4533eBDDB5CC8 - ERC20 public USDT; // USDT: 0xFd086bC7CD5C481DCC9C85ebE478A1C0b69FCbb9 - CrossChainBridgeBacker_ARBI_AnySwap public cc_bridge_backer; - - // Pools - IFRAX2pool public frax2pool; // 0xf07d553B195080F84F582e88ecdD54bAa122b279 - I2poolGaugeDeposit public two_pool_gauge; // 0xbF7E49483881C76487b0989CD7d9A8239B20CA41 - I2pool public two_pool; // 0x7f90122BF0700F9E7e1F688fe926940E8839F353 - IZapDepositor2pool public zap_depositor; // 0x7544Fe3d184b6B55D6B36c3FCA1157eE0Ba30287 - - // Number of decimals under 18, for collateral token - uint256 public usdc_missing_decimals; - uint256 public usdt_missing_decimals; - - // Precision related - uint256 public PRICE_PRECISION = 1e6; - uint256 public VIRTUAL_PRICE_PRECISION = 1e18; - - // Min ratio of collat <-> 2pool conversions via add_liquidity / remove_liquidity; 1e6 - uint256 public liq_slippage_2pool; - - // Min ratio of (FRAX + 2pool) <-> FRAX2pool metapool conversions via add_liquidity / remove_liquidity; 1e6 - uint256 public slippage_metapool; - - // Admins - address public timelock_address; - address public custodian_address; - - /* ========== CONSTRUCTOR ========== */ - - constructor( - address _owner_address, - address _custodian_address, - address[4] memory _core_addresses, // 0: canFRAX, 1: USDC, 2: USDT, 3: CrossChainBridgeBacker - address[4] memory _pool_addresses // 0: FRAX2pool, 1: I2poolGaugeDeposit, 2: I2pool, 3: IZapDepositor2pool - ) Owned(_owner_address) { - // Owner - owner = _owner_address; - - // Core - canFRAX = CrossChainCanonicalFRAX(_core_addresses[0]); - USDC = ERC20(_core_addresses[1]); - USDT = ERC20(_core_addresses[2]); - usdc_missing_decimals = uint(18) - USDC.decimals(); - usdt_missing_decimals = uint(18) - USDT.decimals(); - cc_bridge_backer = CrossChainBridgeBacker_ARBI_AnySwap(_core_addresses[3]); - - // Pools - frax2pool = IFRAX2pool(_pool_addresses[0]); - two_pool_gauge = I2poolGaugeDeposit(_pool_addresses[1]); - two_pool = I2pool(_pool_addresses[2]); - zap_depositor = IZapDepositor2pool(_pool_addresses[3]); - - // Other variable initializations - liq_slippage_2pool = 950000; - slippage_metapool = 950000; - - // Set the custodian - custodian_address = _custodian_address; - - // Get the timelock address from the minter - timelock_address = cc_bridge_backer.timelock_address(); - } - - /* ========== MODIFIERS ========== */ - - modifier onlyByOwnGov() { - require(msg.sender == timelock_address || msg.sender == owner, "Not owner or timelock"); - _; - } - - /* ========== VIEWS ========== */ - - function showAllocations() public view returns (uint256[12] memory allocations) { - // Get some LP token prices - uint256 two_pool_price = two_pool.get_virtual_price(); - uint256 frax2pool_price = frax2pool.get_virtual_price(); - - // FRAX - allocations[0] = canFRAX.balanceOf(address(this)); // Free FRAX - - // USDC - allocations[1] = USDC.balanceOf(address(this)); // Free USDC, native precision - allocations[2] = (allocations[1] * (10 ** usdc_missing_decimals)); // Free USDC USD value - - // USDT - allocations[3] = USDT.balanceOf(address(this)); // Free USDT, native precision - allocations[4] = (allocations[3] * (10 ** usdt_missing_decimals)); // Free USDT USD value - - // 2pool Gauge Deposit - allocations[5] = (two_pool_gauge.balanceOf(address(this))); // Free 2pool gauge - allocations[6] = (allocations[5] * two_pool_price) / VIRTUAL_PRICE_PRECISION; // Free 2pool gauge USD value(1-to-1 conversion with 2pool) - - // 2pool - allocations[7] = (two_pool.balanceOf(address(this))); // Free 2pool - allocations[8] = (allocations[7] * two_pool_price) / VIRTUAL_PRICE_PRECISION; // Free 2pool USD value - - // FRAX2pool LP - allocations[9] = (frax2pool.balanceOf(address(this))); // Free FRAX2pool - allocations[10] = (allocations[9] * frax2pool_price) / VIRTUAL_PRICE_PRECISION; // Free FRAX2pool USD value - - // Total USD value - allocations[11] = allocations[0] + allocations[2] + allocations[4] + allocations[6] + allocations[8] + allocations[10]; - } - - // Needed by CrossChainBridgeBacker - function allDollarBalances() public view returns ( - uint256 frax_ttl, - uint256 fxs_ttl, - uint256 col_ttl, // in native decimals() - uint256 ttl_val_usd_e18 - ) { - uint256[12] memory allocations = showAllocations(); - - return(allocations[0], 0, allocations[1], allocations[11]); - } - - function borrowed_frax() public view returns (uint256) { - return cc_bridge_backer.frax_lent_balances(address(this)); - } - - function borrowed_collat() public view returns (uint256) { - return cc_bridge_backer.collat_lent_balances(address(this)); - } - - /* ========== RESTRICTED FUNCTIONS ========== */ - - function metapoolDeposit(uint256 _frax_amount, uint256 _usdc_amount, uint256 _usdt_amount) external onlyByOwnGov returns (uint256 metapool_LP_received) { - // Approve the FRAX to be zapped - if(_frax_amount > 0) { - canFRAX.approve(address(zap_depositor), _frax_amount); - } - - // Approve the USDC to be zapped - if(_usdc_amount > 0) { - USDC.approve(address(zap_depositor), _usdc_amount); - } - - // Approve the USDT to be zapped - if(_usdt_amount > 0) { - USDT.approve(address(zap_depositor), _usdt_amount); - } - - // Calculate the min LP out expected - uint256 ttl_val_usd = _frax_amount + (_usdc_amount * (10 ** usdc_missing_decimals)) + (_usdt_amount * (10 ** usdt_missing_decimals)); - ttl_val_usd = (ttl_val_usd * VIRTUAL_PRICE_PRECISION) / frax2pool.get_virtual_price(); - uint256 min_3pool_out = (ttl_val_usd * liq_slippage_2pool) / PRICE_PRECISION; - - // Zap the token(s) - metapool_LP_received = zap_depositor.add_liquidity( - address(frax2pool), - [ - _frax_amount, - _usdc_amount, - _usdt_amount - ], - min_3pool_out - ); - } - - function _metapoolWithdrawOneCoin(uint256 _metapool_lp_in, int128 tkn_idx) internal returns (uint256 tokens_received) { - // Approve the metapool LP tokens for zapper contract - frax2pool.approve(address(zap_depositor), _metapool_lp_in); - - // Calculate the min FRAX out - uint256 lp_usd_value = (_metapool_lp_in * VIRTUAL_PRICE_PRECISION) / frax2pool.get_virtual_price(); - uint256 min_tkn_out = (lp_usd_value * liq_slippage_2pool) / PRICE_PRECISION; - - // Handle different decimals - if(tkn_idx == 1) min_tkn_out = min_tkn_out / (10 ** usdc_missing_decimals); - else if(tkn_idx == 2) min_tkn_out = min_tkn_out / (10 ** usdt_missing_decimals); - - // Perform the liquidity swap - tokens_received = zap_depositor.remove_liquidity_one_coin( - address(frax2pool), - _metapool_lp_in, - tkn_idx, - min_tkn_out - ); - } - - function metapoolWithdrawFrax(uint256 _metapool_lp_in) external onlyByOwnGov returns (uint256) { - return _metapoolWithdrawOneCoin(_metapool_lp_in, 0); - } - - function metapoolWithdrawUsdc(uint256 _metapool_lp_in) external onlyByOwnGov returns (uint256) { - return _metapoolWithdrawOneCoin(_metapool_lp_in, 1); - } - - function metapoolWithdrawUsdt(uint256 _metapool_lp_in) external onlyByOwnGov returns (uint256) { - return _metapoolWithdrawOneCoin(_metapool_lp_in, 2); - } - - function metapoolWithdrawAtCurRatio( - uint256 _metapool_lp_in, - uint256 min_frax, - uint256 min_usdc, - uint256 min_usdt - ) external onlyByOwnGov returns (uint256 frax_received, uint256 usdc_received, uint256 usdt_received) { - // Approve the metapool LP tokens for zapper contract - frax2pool.approve(address(zap_depositor), _metapool_lp_in); - - // Withdraw FRAX, USDC, and USDT from the metapool at the current balance - uint256[3] memory result_arr = zap_depositor.remove_liquidity( - address(frax2pool), - _metapool_lp_in, - [min_frax, min_usdc, min_usdt] - ); - frax_received = result_arr[0]; - usdc_received = result_arr[1]; - usdt_received = result_arr[2]; - } - - /* ========== Burns and givebacks ========== */ - - // Give USDC profits back. Goes through the minter - function giveFRAXBack(uint256 frax_amount, bool do_bridging) external onlyByOwnGov { - canFRAX.approve(address(cc_bridge_backer), frax_amount); - cc_bridge_backer.receiveBackViaAMO(address(canFRAX), frax_amount, do_bridging); - } - - function giveCollatBack(uint256 collat_amount, bool do_bridging) external onlyByOwnGov { - USDC.approve(address(cc_bridge_backer), collat_amount); - cc_bridge_backer.receiveBackViaAMO(address(USDC), collat_amount, do_bridging); - } - - /* ========== RESTRICTED GOVERNANCE FUNCTIONS ========== */ - - function setCCBridgeBacker(address _cc_bridge_backer_address) external onlyByOwnGov { - cc_bridge_backer = CrossChainBridgeBacker_ARBI_AnySwap(_cc_bridge_backer_address); - - // Get the timelock addresses from the minter - timelock_address = cc_bridge_backer.timelock_address(); - - // Make sure the new addresse is not address(0) - require(timelock_address != address(0), "Invalid timelock"); - } - - function setSlippages(uint256 _liq_slippage_2pool, uint256 _slippage_metapool) external onlyByOwnGov { - liq_slippage_2pool = _liq_slippage_2pool; - slippage_metapool = _slippage_metapool; - } - - function recoverERC20(address tokenAddress, uint256 tokenAmount) external onlyByOwnGov { - // Can only be triggered by owner or governance, not custodian - // Tokens are sent to the custodian, as a sort of safeguard - TransferHelper.safeTransfer(address(tokenAddress), msg.sender, tokenAmount); - } - - // Generic proxy - function execute( - address _to, - uint256 _value, - bytes calldata _data - ) external onlyByOwnGov returns (bool, bytes memory) { - (bool success, bytes memory result) = _to.call{value:_value}(_data); - return(success, result); - } -} \ No newline at end of file diff --git a/src/hardhat/old_contracts/Misc_AMOs/__CROSSCHAIN/Arbitrum/SushiSwapLiquidityAMO_ARBI.sol b/src/hardhat/old_contracts/Misc_AMOs/__CROSSCHAIN/Arbitrum/SushiSwapLiquidityAMO_ARBI.sol deleted file mode 100644 index 8649707a..00000000 --- a/src/hardhat/old_contracts/Misc_AMOs/__CROSSCHAIN/Arbitrum/SushiSwapLiquidityAMO_ARBI.sol +++ /dev/null @@ -1,490 +0,0 @@ -// SPDX-License-Identifier: GPL-2.0-or-later -pragma solidity >=0.8.0; - -// ==================================================================== -// | ______ _______ | -// | / _____________ __ __ / ____(_____ ____ _____ ________ | -// | / /_ / ___/ __ `| |/_/ / /_ / / __ \/ __ `/ __ \/ ___/ _ \ | -// | / __/ / / / /_/ _> < / __/ / / / / / /_/ / / / / /__/ __/ | -// | /_/ /_/ \__,_/_/|_| /_/ /_/_/ /_/\__,_/_/ /_/\___/\___/ | -// | | -// ==================================================================== -// ==================== SushiSwapLiquidityAMO_ARBI ==================== -// ==================================================================== -// Provides Uniswap V2-style liquidity -// Frax Finance: https://github.com/FraxFinance - -// Primary Author(s) -// Travis Moore: https://github.com/FortisFortuna -// Jason Huan: https://github.com/jasonhuan - -// Reviewer(s) / Contributor(s) -// Sam Kazemian: https://github.com/samkazemian - -import "../../../ERC20/ERC20.sol"; -import "../../../ERC20/__CROSSCHAIN/IArbFiatToken.sol"; -import "../../../ERC20/__CROSSCHAIN/CrossChainCanonicalFRAX.sol"; -import "../../../ERC20/__CROSSCHAIN/CrossChainCanonicalFXS.sol"; -import "../../../Bridges/Arbitrum/CrossChainBridgeBacker_ARBI_AnySwap.sol"; -import "../../../Uniswap/Interfaces/IUniswapV2Pair.sol"; -import "../../../Uniswap/Interfaces/IUniswapV2Router02.sol"; -import "../../../Staking/Owned.sol"; -import '../../../Uniswap/TransferHelper.sol'; - -contract SushiSwapLiquidityAMO_ARBI is Owned { - // SafeMath automatically included in Solidity >= 8.0.0 - - /* ========== STATE VARIABLES ========== */ - - // Core - CrossChainCanonicalFRAX private canFRAX; - CrossChainCanonicalFXS private canFXS; - CrossChainBridgeBacker_ARBI_AnySwap public cc_bridge_backer; - IArbFiatToken private arbiCollateral; - address public canonical_frax_address; - address public canonical_fxs_address; - address public arbi_collateral_address; - - // Important addresses - address public timelock_address; - address public custodian_address; - - // Router - IUniswapV2Router02 public router = IUniswapV2Router02(0x1b02dA8Cb0d097eB8D57A175b88c7D8b47997506); - - // Positions - address[] public frax_fxs_pair_addresses_array; - mapping(address => bool) public frax_fxs_pair_addresses_allowed; - - // Slippages - uint256 public add_rem_liq_slippage = 20000; // 2.0% - - // Constants - uint256 public missing_decimals; - uint256 private PRICE_PRECISION = 1e6; - - /* ========== MODIFIERS ========== */ - - modifier onlyByOwnGov() { - require(msg.sender == timelock_address || msg.sender == owner, "Not owner or timelock"); - _; - } - - modifier onlyByOwnGovCust() { - require(msg.sender == timelock_address || msg.sender == owner || msg.sender == custodian_address, "Not owner, tlck, or custd"); - _; - } - - /* ========== CONSTRUCTOR ========== */ - - constructor ( - address _owner_address, - address _custodian_address, - address _canonical_frax_address, - address _canonical_fxs_address, - address _arbi_collateral_address, - address _cc_bridge_backer_address, - address[] memory _initial_pairs - ) Owned(_owner_address) { - // Core addresses - canonical_frax_address = _canonical_frax_address; - canonical_fxs_address = _canonical_fxs_address; - arbi_collateral_address = _arbi_collateral_address; - - // Core instances - canFRAX = CrossChainCanonicalFRAX(_canonical_frax_address); - canFXS = CrossChainCanonicalFXS(_canonical_fxs_address); - arbiCollateral = IArbFiatToken(_arbi_collateral_address); - cc_bridge_backer = CrossChainBridgeBacker_ARBI_AnySwap(_cc_bridge_backer_address); - - // Set the custodian - custodian_address = _custodian_address; - - // Get the timelock address from the minter - timelock_address = cc_bridge_backer.timelock_address(); - - // Get the missing decimals for the collateral - missing_decimals = uint(18) - arbiCollateral.decimals(); - - // Set the initial pairs - for (uint256 i = 0; i < _initial_pairs.length; i++){ - _addTrackedLP(_initial_pairs[i]); - } - } - - /* ========== VIEWS ========== */ - - function showAllocations() public view returns (uint256[17] memory allocations) { - // Get the FXS price - uint256 fxs_price = cc_bridge_backer.cross_chain_oracle().getPrice(canonical_fxs_address); - - // Loop through the lp tokens - uint256[] memory lp_tallies = new uint256[](4); // 0 = FRAX, 1 = FXS, 2 = Collateral, 3 = USD value - for (uint i = 0; i < frax_fxs_pair_addresses_array.length; i++){ - address pair_address = frax_fxs_pair_addresses_array[i]; - if (frax_fxs_pair_addresses_allowed[pair_address]) { - // Instantiate the pair - IUniswapV2Pair the_pair = IUniswapV2Pair(pair_address); - - // Get the pair info - uint256[4] memory lp_info_pack = lpTokenInfo(pair_address); - - // Get the lp token balance - uint256 lp_token_balance = the_pair.balanceOf(address(this)); - - // Get the FRAX and FXS balances - uint256 frax_amt = (lp_info_pack[0] * lp_token_balance) / 1e18; - uint256 fxs_amt = (lp_info_pack[1] * lp_token_balance) / 1e18; - uint256 collat_amt = (lp_info_pack[2] * lp_token_balance) / 1e18; - - // Add to the tallies - lp_tallies[0] += frax_amt; - lp_tallies[1] += fxs_amt; - lp_tallies[2] += collat_amt; - - // Get the USD value - if (lp_info_pack[3] == 0 || lp_info_pack[3] == 2){ - // If FRAX is in the pair, just double the FRAX balance since it is 50/50 - lp_tallies[3] += (frax_amt * 2); - } - else { - // Otherwise, double the value of the FXS component - lp_tallies[3] += ((fxs_amt * fxs_price) / PRICE_PRECISION) * 2; - } - - } - } - - // FRAX - allocations[0] = canFRAX.balanceOf(address(this)); // Free FRAX - allocations[1] = lp_tallies[0]; // FRAX in LP - allocations[2] = allocations[0] + allocations[1]; // Total FRAX - - // FXS - allocations[3] = canFXS.balanceOf(address(this)); // Free FXS, native E18 - allocations[4] = (allocations[3] * fxs_price) / PRICE_PRECISION; // Free FXS USD value - allocations[5] = lp_tallies[1]; // FXS in LP, native E18 - allocations[6] = (allocations[5] * fxs_price) / PRICE_PRECISION; // FXS in LP USD value - allocations[7] = allocations[3] + allocations[5]; // Total FXS, native E18 - allocations[8] = allocations[4] + allocations[6]; // Total FXS USD Value - - // Collateral - allocations[9] = arbiCollateral.balanceOf(address(this)); // Free Collateral, native precision - allocations[10] = (allocations[9] * (10 ** missing_decimals)); // Free Collateral USD value - allocations[11] = lp_tallies[2]; // Collateral in LP, native precision - allocations[12] = (allocations[11] * (10 ** missing_decimals)); // Collateral in LP USD value - allocations[13] = allocations[9] + allocations[11]; // Total Collateral, native precision - allocations[14] = allocations[10] + allocations[12]; // Total Collateral USD Value - - // LP - allocations[15] = lp_tallies[3]; // Total USD value in all LPs - - // Totals - allocations[16] = allocations[2] + allocations[8] + allocations[14]; // Total USD value in entire AMO, including FXS - } - - function showTokenBalances() public view returns (uint256[3] memory tkn_bals) { - tkn_bals[0] = canFRAX.balanceOf(address(this)); // canFRAX - tkn_bals[1] = canFXS.balanceOf(address(this)); // canFXS - tkn_bals[2] = arbiCollateral.balanceOf(address(this)); // arbiCollateral - } - - // [0] = FRAX per LP token - // [1] = FXS per LP token - // [2] = Collateral per LP token - // [3] = pair_type - function lpTokenInfo(address pair_address) public view returns (uint256[4] memory return_info) { - // Instantiate the pair - IUniswapV2Pair the_pair = IUniswapV2Pair(pair_address); - - // Get the reserves - uint256[] memory reserve_pack = new uint256[](3); // [0] = FRAX, [1] = FXS, [2] = Collateral - (uint256 reserve0, uint256 reserve1, ) = (the_pair.getReserves()); - { - // Get the underlying tokens in the LP - address token0 = the_pair.token0(); - address token1 = the_pair.token1(); - - // Test token0 - if (token0 == canonical_frax_address) reserve_pack[0] = reserve0; - else if (token0 == canonical_fxs_address) reserve_pack[1] = reserve0; - else if (token0 == arbi_collateral_address) reserve_pack[2] = reserve0; - - // Test token1 - if (token1 == canonical_frax_address) reserve_pack[0] = reserve1; - else if (token1 == canonical_fxs_address) reserve_pack[1] = reserve1; - else if (token1 == arbi_collateral_address) reserve_pack[2] = reserve1; - } - - // Get the token rates - return_info[0] = (reserve_pack[0] * 1e18) / (the_pair.totalSupply()); - return_info[1] = (reserve_pack[1] * 1e18) / (the_pair.totalSupply()); - return_info[2] = (reserve_pack[2] * 1e18) / (the_pair.totalSupply()); - - // Set the pair type (used later) - if (return_info[0] > 0 && return_info[1] == 0) return_info[3] = 0; // FRAX/XYZ - else if (return_info[0] == 0 && return_info[1] > 0) return_info[3] = 1; // FXS/XYZ - else if (return_info[0] > 0 && return_info[1] > 0) return_info[3] = 2; // FRAX/FXS - else revert("Invalid pair"); - } - - // Needed by CrossChainBridgeBacker - function allDollarBalances() public view returns ( - uint256 frax_ttl, - uint256 fxs_ttl, - uint256 col_ttl, // in native decimals() - uint256 ttl_val_usd_e18 - ) { - uint256[17] memory allocations = showAllocations(); - - return (allocations[2], allocations[7], allocations[13], allocations[16]); - } - - function borrowed_frax() public view returns (uint256) { - return cc_bridge_backer.frax_lent_balances(address(this)); - } - - function borrowed_fxs() public view returns (uint256) { - return cc_bridge_backer.fxs_lent_balances(address(this)); - } - - function borrowed_collat() public view returns (uint256) { - return cc_bridge_backer.collat_lent_balances(address(this)); - } - - function total_profit() public view returns (int256 profit) { - // Get the FXS price - uint256 fxs_price = cc_bridge_backer.cross_chain_oracle().getPrice(canonical_fxs_address); - - uint256[17] memory allocations = showAllocations(); - - // Handle FRAX - profit = int256(allocations[2]) - int256(borrowed_frax()); - - // Handle FXS - profit += ((int256(allocations[7]) - int256(borrowed_fxs())) * int256(fxs_price)) / int256(PRICE_PRECISION); - - // Handle Collat - profit += (int256(allocations[13]) - int256(borrowed_collat())) * int256(10 ** missing_decimals); - } - - // token_there_is_one_of means you want the return amount to be (X other token) per 1 token; - function pair_reserve_ratio_E18(address pair_address, address token_there_is_one_of) public view returns (uint256) { - // Instantiate the pair - IUniswapV2Pair the_pair = IUniswapV2Pair(pair_address); - - // Get the token addresses - address token0 = the_pair.token0(); - address token1 = the_pair.token1(); - uint256 decimals0 = ERC20(token0).decimals(); - uint256 decimals1 = ERC20(token1).decimals(); - - (uint256 reserve0, uint256 reserve1, ) = (the_pair.getReserves()); - - uint256 miss_dec = (decimals0 >= decimals1) ? (decimals0 - decimals1) : (decimals1 - decimals0); - - // Put everything into E18. Since one of the pair tokens will always be FRAX or FXS, this is ok to assume. - if (decimals0 >= decimals1){ - reserve1 *= (10 ** miss_dec); - } - else { - reserve0 *= (10 ** miss_dec); - } - - // Return the ratio - if (token0 == token_there_is_one_of){ - return (uint256(1e18) * reserve0) / reserve1; - } - else if (token1 == token_there_is_one_of){ - return (uint256(1e18) * reserve1) / reserve0; - } - else revert("Token not in pair"); - } - - /* ========== Swap ========== */ - - // Swap tokens directly - function swapTokens( - address from_token_address, - uint256 from_in, - address to_token_address, - uint256 to_token_out_min - ) public onlyByOwnGov returns (uint256[] memory amounts) { - // Approval - ERC20(from_token_address).approve(address(router), from_in); - - // Create the path object (compiler doesn't like feeding it in directly) - address[] memory the_path = new address[](2); - the_path[0] = from_token_address; - the_path[1] = to_token_address; - - // Swap - amounts = router.swapExactTokensForTokens( - from_in, - to_token_out_min, - the_path, - address(this), - block.timestamp + 604800 // Expiration: 7 days from now - ); - } - - // If you need a specific path - function swapTokensWithCustomPath( - address from_token_address, - uint256 from_in, - uint256 end_token_out_min, - address[] memory path - ) public onlyByOwnGov returns (uint256[] memory amounts) { - // Approval - ERC20(from_token_address).approve(address(router), from_in); - - // Swap - amounts = router.swapExactTokensForTokens( - from_in, - end_token_out_min, - path, - address(this), - block.timestamp + 604800 // Expiration: 7 days from now - ); - } - - /* ========== Add / Remove Liquidity ========== */ - - function addLiquidity( - address lp_token_address, - address tokenA_address, - uint256 tokenA_amt, - address tokenB_address, - uint256 tokenB_amt - ) public onlyByOwnGov returns (uint256 amountA, uint256 amountB, uint256 liquidity) { - require(frax_fxs_pair_addresses_allowed[lp_token_address], "LP address not allowed"); - - // Approvals - ERC20(tokenA_address).approve(address(router), tokenA_amt); - ERC20(tokenB_address).approve(address(router), tokenB_amt); - - // Add liquidity - (amountA, amountB, liquidity) = router.addLiquidity( - tokenA_address, - tokenB_address, - tokenA_amt, - tokenB_amt, - tokenA_amt - ((tokenA_amt * add_rem_liq_slippage) / PRICE_PRECISION), - tokenB_amt - ((tokenB_amt * add_rem_liq_slippage) / PRICE_PRECISION), - address(this), - block.timestamp + 604800 // Expiration: 7 days from now - ); - } - - function removeLiquidity( - address lp_token_address, - uint256 lp_token_in - ) public onlyByOwnGov returns (uint256 amountA, uint256 amountB) { - require(frax_fxs_pair_addresses_allowed[lp_token_address], "LP address not allowed"); - - // Approvals - ERC20(lp_token_address).approve(address(router), lp_token_in); - - // Get the token addresses - address tokenA = IUniswapV2Pair(lp_token_address).token0(); - address tokenB = IUniswapV2Pair(lp_token_address).token1(); - - // Remove liquidity - (amountA, amountB) = router.removeLiquidity( - tokenA, - tokenB, - lp_token_in, - 0, - 0, - address(this), - block.timestamp + 604800 // Expiration: 7 days from now - ); - } - - /* ========== Burns and givebacks ========== */ - - function giveFRAXBack(uint256 frax_amount, bool do_bridging) external onlyByOwnGov { - canFRAX.approve(address(cc_bridge_backer), frax_amount); - cc_bridge_backer.receiveBackViaAMO(canonical_frax_address, frax_amount, do_bridging); - } - - function giveFXSBack(uint256 fxs_amount, bool do_bridging) external onlyByOwnGov { - canFXS.approve(address(cc_bridge_backer), fxs_amount); - cc_bridge_backer.receiveBackViaAMO(canonical_fxs_address, fxs_amount, do_bridging); - } - - function giveCollatBack(uint256 collat_amount, bool do_bridging) external onlyByOwnGov { - arbiCollateral.approve(address(cc_bridge_backer), collat_amount); - cc_bridge_backer.receiveBackViaAMO(arbi_collateral_address, collat_amount, do_bridging); - } - - /* ========== RESTRICTED FUNCTIONS ========== */ - - // Any pairs with FRAX and/or FXS must be whitelisted first before adding liquidity - function _addTrackedLP(address pair_address) internal { - // Instantiate the pair - IUniswapV2Pair the_pair = IUniswapV2Pair(pair_address); - - // Make sure either FRAX or FXS is present - bool frax_present = (the_pair.token0() == canonical_frax_address || the_pair.token1() == canonical_frax_address); - bool fxs_present = (the_pair.token0() == canonical_fxs_address || the_pair.token1() == canonical_fxs_address); - require(frax_present || fxs_present, "FRAX or FXS not in pair"); - - // Adjust the state variables - require(frax_fxs_pair_addresses_allowed[pair_address] == false, "LP already exists"); - frax_fxs_pair_addresses_allowed[pair_address] = true; - frax_fxs_pair_addresses_array.push(pair_address); - } - - function addTrackedLP(address pair_address) public onlyByOwnGov { - _addTrackedLP(pair_address); - } - - // Remove FRAX and FXS related pairs - function removeTrackedLP(address pair_address) public onlyByOwnGov { - // Adjust the state variables - require(frax_fxs_pair_addresses_allowed[pair_address] == true, "LP not already present"); - frax_fxs_pair_addresses_allowed[pair_address] = false; - - // 'Delete' from the array by setting the address to 0x0 - for (uint i = 0; i < frax_fxs_pair_addresses_array.length; i++){ - if (frax_fxs_pair_addresses_array[i] == pair_address) { - frax_fxs_pair_addresses_array[i] = address(0); // This will leave a null in the array and keep the indices the same - break; - } - } - } - - function setCCBridgeBacker(address _cc_bridge_backer_address) external onlyByOwnGov { - cc_bridge_backer = CrossChainBridgeBacker_ARBI_AnySwap(_cc_bridge_backer_address); - - // Get the timelock addresses from the minter - timelock_address = cc_bridge_backer.timelock_address(); - - // Make sure the new addresse is not address(0) - require(timelock_address != address(0), "Invalid timelock"); - } - - function setSlippages(uint256 _add_rem_liq_slippage) external onlyByOwnGov { - add_rem_liq_slippage = _add_rem_liq_slippage; - } - - function setCustodian(address _custodian_address) external onlyByOwnGov { - require(_custodian_address != address(0), "Zero address detected"); - custodian_address = _custodian_address; - } - - function recoverERC20(address tokenAddress, uint256 tokenAmount) external onlyByOwnGov { - TransferHelper.safeTransfer(address(tokenAddress), msg.sender, tokenAmount); - } - - // Generic proxy - function execute( - address _to, - uint256 _value, - bytes calldata _data - ) external onlyByOwnGov returns (bool, bytes memory) { - (bool success, bytes memory result) = _to.call{value:_value}(_data); - return (success, result); - } -} \ No newline at end of file diff --git a/src/hardhat/old_contracts/Misc_AMOs/apeswap/IApePair.sol b/src/hardhat/old_contracts/Misc_AMOs/apeswap/IApePair.sol deleted file mode 100644 index 56e3bd33..00000000 --- a/src/hardhat/old_contracts/Misc_AMOs/apeswap/IApePair.sol +++ /dev/null @@ -1,63 +0,0 @@ -// SPDX-License-Identifier: GPL-2.0-or-later -pragma solidity >=0.8.0; - -/* - * ApeSwapFinance - * App: https://apeswap.finance - * Medium: https://medium.com/@ape_swap - * Twitter: https://twitter.com/ape_swap - * Telegram: https://t.me/ape_swap - * Announcements: https://t.me/ape_swap_news - * GitHub: https://github.com/ApeSwapFinance - */ - -interface IApePair { - event Approval(address indexed owner, address indexed spender, uint value); - event Transfer(address indexed from, address indexed to, uint value); - - function name() external pure returns (string memory); - function symbol() external pure returns (string memory); - function decimals() external pure returns (uint8); - function totalSupply() external view returns (uint); - function balanceOf(address owner) external view returns (uint); - function allowance(address owner, address spender) external view returns (uint); - - function approve(address spender, uint value) external returns (bool); - function transfer(address to, uint value) external returns (bool); - function transferFrom(address from, address to, uint value) external returns (bool); - - function DOMAIN_SEPARATOR() external view returns (bytes32); - function PERMIT_TYPEHASH() external pure returns (bytes32); - function nonces(address owner) external view returns (uint); - - function permit(address owner, address spender, uint value, uint deadline, uint8 v, bytes32 r, bytes32 s) external; - - event Mint(address indexed sender, uint amount0, uint amount1); - event Burn(address indexed sender, uint amount0, uint amount1, address indexed to); - event Swap( - address indexed sender, - uint amount0In, - uint amount1In, - uint amount0Out, - uint amount1Out, - address indexed to - ); - event Sync(uint112 reserve0, uint112 reserve1); - - function MINIMUM_LIQUIDITY() external pure returns (uint); - function factory() external view returns (address); - function token0() external view returns (address); - function token1() external view returns (address); - function getReserves() external view returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast); - function price0CumulativeLast() external view returns (uint); - function price1CumulativeLast() external view returns (uint); - function kLast() external view returns (uint); - - function mint(address to) external returns (uint liquidity); - function burn(address to) external returns (uint amount0, uint amount1); - function swap(uint amount0Out, uint amount1Out, address to, bytes calldata data) external; - function skim(address to) external; - function sync() external; - - function initialize(address, address) external; -} \ No newline at end of file diff --git a/src/hardhat/old_contracts/Misc_AMOs/apeswap/IApeRouter.sol b/src/hardhat/old_contracts/Misc_AMOs/apeswap/IApeRouter.sol deleted file mode 100644 index 12cb9fb2..00000000 --- a/src/hardhat/old_contracts/Misc_AMOs/apeswap/IApeRouter.sol +++ /dev/null @@ -1,29 +0,0 @@ -// SPDX-License-Identifier: GPL-2.0-or-later -pragma solidity >=0.8.0; - -interface IApeRouter { - function WETH ( ) external view returns ( address ); - function addLiquidity ( address tokenA, address tokenB, uint256 amountADesired, uint256 amountBDesired, uint256 amountAMin, uint256 amountBMin, address to, uint256 deadline ) external returns ( uint256 amountA, uint256 amountB, uint256 liquidity ); - function addLiquidityETH ( address token, uint256 amountTokenDesired, uint256 amountTokenMin, uint256 amountETHMin, address to, uint256 deadline ) external returns ( uint256 amountToken, uint256 amountETH, uint256 liquidity ); - function factory ( ) external view returns ( address ); - function getAmountIn ( uint256 amountOut, uint256 reserveIn, uint256 reserveOut ) external pure returns ( uint256 amountIn ); - function getAmountOut ( uint256 amountIn, uint256 reserveIn, uint256 reserveOut ) external pure returns ( uint256 amountOut ); - function getAmountsIn ( uint256 amountOut, address[] calldata path ) external view returns ( uint256[] memory amounts ); - function getAmountsOut ( uint256 amountIn, address[] calldata path ) external view returns ( uint256[] memory amounts ); - function quote ( uint256 amountA, uint256 reserveA, uint256 reserveB ) external pure returns ( uint256 amountB ); - function removeLiquidity ( address tokenA, address tokenB, uint256 liquidity, uint256 amountAMin, uint256 amountBMin, address to, uint256 deadline ) external returns ( uint256 amountA, uint256 amountB ); - function removeLiquidityETH ( address token, uint256 liquidity, uint256 amountTokenMin, uint256 amountETHMin, address to, uint256 deadline ) external returns ( uint256 amountToken, uint256 amountETH ); - function removeLiquidityETHSupportingFeeOnTransferTokens ( address token, uint256 liquidity, uint256 amountTokenMin, uint256 amountETHMin, address to, uint256 deadline ) external returns ( uint256 amountETH ); - function removeLiquidityETHWithPermit ( address token, uint256 liquidity, uint256 amountTokenMin, uint256 amountETHMin, address to, uint256 deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns ( uint256 amountToken, uint256 amountETH ); - function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens ( address token, uint256 liquidity, uint256 amountTokenMin, uint256 amountETHMin, address to, uint256 deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns ( uint256 amountETH ); - function removeLiquidityWithPermit ( address tokenA, address tokenB, uint256 liquidity, uint256 amountAMin, uint256 amountBMin, address to, uint256 deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns ( uint256 amountA, uint256 amountB ); - function swapETHForExactTokens ( uint256 amountOut, address[] calldata path, address to, uint256 deadline ) external returns ( uint256[] memory amounts ); - function swapExactETHForTokens ( uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external returns ( uint256[] memory amounts ); - function swapExactETHForTokensSupportingFeeOnTransferTokens ( uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external; - function swapExactTokensForETH ( uint256 amountIn, uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external returns ( uint256[] memory amounts ); - function swapExactTokensForETHSupportingFeeOnTransferTokens ( uint256 amountIn, uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external; - function swapExactTokensForTokens ( uint256 amountIn, uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external returns ( uint256[] memory amounts ); - function swapExactTokensForTokensSupportingFeeOnTransferTokens ( uint256 amountIn, uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external; - function swapTokensForExactETH ( uint256 amountOut, uint256 amountInMax, address[] calldata path, address to, uint256 deadline ) external returns ( uint256[] memory amounts ); - function swapTokensForExactTokens ( uint256 amountOut, uint256 amountInMax, address[] calldata path, address to, uint256 deadline ) external returns ( uint256[] memory amounts ); -} diff --git a/src/hardhat/old_contracts/Misc_AMOs/apeswap/IMasterApe.sol b/src/hardhat/old_contracts/Misc_AMOs/apeswap/IMasterApe.sol deleted file mode 100644 index 30919181..00000000 --- a/src/hardhat/old_contracts/Misc_AMOs/apeswap/IMasterApe.sol +++ /dev/null @@ -1,33 +0,0 @@ -// SPDX-License-Identifier: GPL-2.0-or-later -pragma solidity >=0.8.0; - -interface IMasterApe { - function BONUS_MULTIPLIER() external view returns (uint256); - function add(uint256 _allocPoint, address _lpToken, bool _withUpdate) external; - function cake() external view returns (address); - function cakePerBlock() external view returns (uint256); - function checkPoolDuplicate(address _lpToken) external view; - function deposit(uint256 _pid, uint256 _amount) external; - function dev(address _devaddr) external; - function devaddr() external view returns (address); - function emergencyWithdraw(uint256 _pid) external; - function enterStaking(uint256 _amount) external; - function getMultiplier(uint256 _from, uint256 _to) external view returns (uint256); - function getPoolInfo(uint256 _pid) external view returns (address lpToken, uint256 allocPoint, uint256 lastRewardBlock, uint256 accCakePerShare); - function leaveStaking(uint256 _amount) external; - function massUpdatePools() external; - function owner() external view returns (address); - function pendingCake(uint256 _pid, address _user) external view returns (uint256); - function poolInfo(uint256) external view returns (address lpToken, uint256 allocPoint, uint256 lastRewardBlock, uint256 accCakePerShare); - function poolLength() external view returns (uint256); - function renounceOwnership() external; - function set(uint256 _pid, uint256 _allocPoint, bool _withUpdate) external; - function startBlock() external view returns (uint256); - function syrup() external view returns (address); - function totalAllocPoint() external view returns (uint256); - function transferOwnership(address newOwner) external; - function updateMultiplier(uint256 multiplierNumber) external; - function updatePool(uint256 _pid) external; - function userInfo(uint256, address) external view returns (uint256 amount, uint256 rewardDebt); - function withdraw(uint256 _pid, uint256 _amount) external; -} diff --git a/src/hardhat/old_contracts/Misc_AMOs/axial/IAxialToken.sol b/src/hardhat/old_contracts/Misc_AMOs/axial/IAxialToken.sol deleted file mode 100644 index 6fdfd12a..00000000 --- a/src/hardhat/old_contracts/Misc_AMOs/axial/IAxialToken.sol +++ /dev/null @@ -1,31 +0,0 @@ -// SPDX-License-Identifier: GPL-2.0-or-later -pragma solidity >=0.8.0; - -interface IAxialToken { - function DELEGATION_TYPEHASH() external view returns (bytes32); - function DOMAIN_TYPEHASH() external view returns (bytes32); - function allowance(address owner, address spender) external view returns (uint256); - function approve(address spender, uint256 amount) external returns (bool); - function balanceOf(address account) external view returns (uint256); - function checkpoints(address, uint32) external view returns (uint32 fromBlock, uint256 votes); - function decimals() external view returns (uint8); - function decreaseAllowance(address spender, uint256 subtractedValue) external returns (bool); - function delegate(address delegatee) external; - function delegateBySig(address delegatee, uint256 nonce, uint256 expiry, uint8 v, bytes32 r, bytes32 s) external; - function delegates(address delegator) external view returns (address); - function getCurrentVotes(address account) external view returns (uint256); - function getPriorVotes(address account, uint256 blockNumber) external view returns (uint256); - function increaseAllowance(address spender, uint256 addedValue) external returns (bool); - function maxSupply() external view returns (uint256); - function mint(address _to, uint256 _amount) external; - function name() external view returns (string memory); - function nonces(address) external view returns (uint256); - function numCheckpoints(address) external view returns (uint32); - function owner() external view returns (address); - function renounceOwnership() external; - function symbol() external view returns (string memory); - function totalSupply() external view returns (uint256); - function transfer(address recipient, uint256 amount) external returns (bool); - function transferFrom(address sender, address recipient, uint256 amount) external returns (bool); - function transferOwnership(address newOwner) external; -} diff --git a/src/hardhat/old_contracts/Misc_AMOs/axial/IMasterChefAxialV3.sol b/src/hardhat/old_contracts/Misc_AMOs/axial/IMasterChefAxialV3.sol deleted file mode 100644 index 679f9ad0..00000000 --- a/src/hardhat/old_contracts/Misc_AMOs/axial/IMasterChefAxialV3.sol +++ /dev/null @@ -1,27 +0,0 @@ -// SPDX-License-Identifier: GPL-2.0-or-later -pragma solidity >=0.8.0; - -interface IMasterChefAxialV3 { - function AXIAL() external view returns (address); - function MASTER_CHEF_V2() external view returns (address); - function MASTER_PID() external view returns (uint256); - function add(uint256 allocPoint, address _lpToken, address _rewarder) external; - function axialPerSec() external view returns (uint256 amount); - function deposit(uint256 pid, uint256 amount) external; - function emergencyWithdraw(uint256 pid) external; - function harvestFromMasterChef() external; - function init(address dummyToken) external; - function massUpdatePools(uint256[] memory pids) external; - function owner() external view returns (address); - function pendingTokens(uint256 _pid, address _user) external view returns (uint256 pendingAxial, address bonusTokenAddress, string memory bonusTokenSymbol, uint256 pendingBonusToken); - function poolInfo(uint256) external view returns (address lpToken, uint256 accAxialPerShare, uint256 lastRewardTimestamp, uint256 allocPoint, address rewarder); - function poolLength() external view returns (uint256 pools); - function renounceOwnership() external; - function set(uint256 _pid, uint256 _allocPoint, address _rewarder, bool overwrite) external; - function totalAllocPoint() external view returns (uint256); - function transferOwnership(address newOwner) external; - function updatePool(uint256 pid) external; - function userInfo(uint256, address) external view returns (uint256 amount, uint256 rewardDebt); - function withdraw(uint256 pid, uint256 amount) external; -} - diff --git a/src/hardhat/old_contracts/Misc_AMOs/axial/ISwapFlashLoan.sol b/src/hardhat/old_contracts/Misc_AMOs/axial/ISwapFlashLoan.sol deleted file mode 100644 index 2d5b6409..00000000 --- a/src/hardhat/old_contracts/Misc_AMOs/axial/ISwapFlashLoan.sol +++ /dev/null @@ -1,44 +0,0 @@ -// SPDX-License-Identifier: GPL-2.0-or-later -pragma solidity >=0.8.0; - -interface ISwapFlashLoan { - // // ERC20 Stuff - // function totalSupply() external view returns (uint256); - // function balanceOf(address account) external view returns (uint256); - // function transfer(address recipient, uint256 amount) external returns (bool); - // function allowance(address owner, address spender) external view returns (uint256); - // function approve(address spender, uint256 amount) external returns (bool); - // function transferFrom(address sender, address recipient, uint256 amount) external returns (bool); - - // SwapFlashLoan - function MAX_BPS() external view returns (uint256); - function addLiquidity(uint256[] memory amounts, uint256 minToMint, uint256 deadline) external returns (uint256); - function calculateRemoveLiquidity(uint256 amount) external view returns (uint256[] memory); - function calculateRemoveLiquidityOneToken(uint256 tokenAmount, uint8 tokenIndex) external view returns (uint256 availableTokenAmount); - function calculateSwap(uint8 tokenIndexFrom, uint8 tokenIndexTo, uint256 dx) external view returns (uint256); - function calculateTokenAmount(uint256[] memory amounts, bool deposit) external view returns (uint256); - function getA() external view returns (uint256); - function getAPrecise() external view returns (uint256); - function getAdminBalance(uint256 index) external view returns (uint256); - function getToken(uint8 index) external view returns (address); - function getTokenBalance(uint8 index) external view returns (uint256); - function getTokenIndex(address tokenAddress) external view returns (uint8); - function getVirtualPrice() external view returns (uint256); - function owner() external view returns (address); - function pause() external; - function paused() external view returns (bool); - function protocolFeeShareBPS() external view returns (uint256); - function rampA(uint256 futureA, uint256 futureTime) external; - function removeLiquidity(uint256 amount, uint256[] calldata minAmounts, uint256 deadline) external returns (uint256[] memory); - function removeLiquidityOneToken(uint256 tokenAmount, uint8 tokenIndex, uint256 minAmount, uint256 deadline) external returns (uint256); - function renounceOwnership() external; - function setAdminFee(uint256 newAdminFee) external; - function setFlashLoanFees(uint256 newFlashLoanFeeBPS, uint256 newProtocolFeeShareBPS) external; - function setSwapFee(uint256 newSwapFee) external; - function stopRampA() external; - function swap(uint8 tokenIndexFrom, uint8 tokenIndexTo, uint256 dx, uint256 minDy, uint256 deadline) external returns (uint256); - function swapStorage() external view returns (uint256 initialA, uint256 futureA, uint256 initialATime, uint256 futureATime, uint256 swapFee, uint256 adminFee, address lpToken); - function transferOwnership(address newOwner) external; - function unpause() external; - function withdrawAdminFees() external; -} \ No newline at end of file diff --git a/src/hardhat/old_contracts/Misc_AMOs/compound/IComptroller.sol b/src/hardhat/old_contracts/Misc_AMOs/compound/IComptroller.sol deleted file mode 100644 index d1e6fb2e..00000000 --- a/src/hardhat/old_contracts/Misc_AMOs/compound/IComptroller.sol +++ /dev/null @@ -1,47 +0,0 @@ -// SPDX-License-Identifier: GPL-2.0-or-later -pragma solidity >=0.6.11; - -// Original at https://etherscan.io/address/0xbe7616B06f71e363A310Aa8CE8aD99654401ead7#code -// Address [0x3d9819210A31b4961b30EF54bE2aeD79B9c9Cd3B] used is a proxy -// Some functions were omitted for brevity. See the contract for details - - -interface IComptroller { - function SingleAssetDynamicRainMakerContractHash() external view returns (bytes32); - function _acceptAdmin() external returns (uint256); - function _setDynamicCompSpeed(address cToken, uint256 compSupplySpeed, uint256 compBorrowSpeed) external; - function _setDynamicCompSpeeds(address[] memory _cTokens, uint256[] memory _compSupplySpeeds, uint256[] memory _compBorrowSpeeds) external; - function _setLnIncentiveToken(address incentiveTokenAddress) external; - function _setPendingAdmin(address newPendingAdmin) external returns (uint256); - function _supportMarket(address cToken) external; - function admin() external view returns (address); - function allMarkets(uint256) external view returns (address); - function claimComp(address holder, address[] memory cTokens) external; - function claimComp(address[] memory holders, address[] memory cTokens, bool borrowers, bool suppliers) external; - function claimComp(address holder) external; - function compAccrued(address) external view returns (uint256); - function compBorrowSpeeds(address) external view returns (uint256); - function compBorrowState(address) external view returns (uint224 index, uint32 block); - function compBorrowerIndex(address, address) external view returns (uint256); - function compInitialIndex() external view returns (uint224); - function compSpeeds(address market) external view returns (uint256); - function compSupplierIndex(address, address) external view returns (uint256); - function compSupplySpeeds(address) external view returns (uint256); - function compSupplyState(address) external view returns (uint224 index, uint32 block); - function comptroller() external view returns (address); - function connect(bytes memory params) external; - function contractNameHash() external view returns (bytes32); - function distributeBorrowerComp(address cToken, address borrower, uint256 marketBorrowIndex_) external; - function distributeSupplierComp(address cToken, address supplier) external; - function getBlockNumber() external view returns (uint256); - function getLnIncentiveTokenAddress() external view returns (address); - function isListed(address) external view returns (bool); - function isRainMaker() external view returns (bool); - function isRetired() external view returns (bool); - function lnIncentiveTokenAddress() external view returns (address); - function pendingAdmin() external view returns (address); - function retire(bytes memory params) external; - function retireRainMaker() external; - function updateCompBorrowIndex(address cToken, uint256 marketBorrowIndex_) external; - function updateCompSupplyIndex(address cToken) external; -} diff --git a/src/hardhat/old_contracts/Misc_AMOs/compound/IcUSDC_Partial.sol b/src/hardhat/old_contracts/Misc_AMOs/compound/IcUSDC_Partial.sol deleted file mode 100644 index 558691ba..00000000 --- a/src/hardhat/old_contracts/Misc_AMOs/compound/IcUSDC_Partial.sol +++ /dev/null @@ -1,19 +0,0 @@ -// SPDX-License-Identifier: GPL-2.0-or-later -pragma solidity >=0.6.11; -import '../../ERC20/IERC20.sol'; - -// Original at https://etherscan.io/address/0x39aa39c021dfbae8fac545936693ac917d5e7563#code -// Some functions were omitted for brevity. See the contract for details -// https://compound.finance/docs/ctokens -interface IcUSDC_Partial is IERC20 { - function mint(uint mintAmount) external returns (uint); - - // redeemAmount = # of cUSDC - function redeem(uint redeemAmount) external returns (uint); - - // redeemAmount = # of USDC - function redeemUnderlying(uint redeemAmount) external returns (uint); - - // Multiply this by the E8 balance of cUSDC, then divide the product by E16 - function exchangeRateStored() external view returns (uint); -} diff --git a/src/hardhat/old_contracts/Misc_AMOs/gelato/IGUniPool.sol b/src/hardhat/old_contracts/Misc_AMOs/gelato/IGUniPool.sol deleted file mode 100644 index afda7546..00000000 --- a/src/hardhat/old_contracts/Misc_AMOs/gelato/IGUniPool.sol +++ /dev/null @@ -1,50 +0,0 @@ -// SPDX-License-Identifier: GPL-2.0-or-later -pragma solidity >=0.8.0; -import { IERC20 } from "../../ERC20/IERC20.sol"; -import { IUniswapV3Pool } from "../../Uniswap_V3/IUniswapV3Pool.sol"; - -interface IGUniPool { - function mint(uint256 mintAmount, address receiver) - external - returns ( - uint256 amount0, - uint256 amount1, - uint128 liquidityMinted - ); - - function burn(uint256 burnAmount, address receiver) - external - returns ( - uint256 amount0, - uint256 amount1, - uint128 liquidityBurned - ); - - function allowance(address owner, address spender) external view returns (uint256); - function approve(address spender, uint256 amount) external returns (bool); - function token0() external view returns (IERC20); - function token1() external view returns (IERC20); - function upperTick() external view returns (int24); - function lowerTick() external view returns (int24); - function pool() external view returns (IUniswapV3Pool); - function decimals() external view returns (uint256); - function totalSupply() external view returns (uint256); - function balanceOf(address account) external view returns (uint256); - function transfer(address recipient, uint256 amount) external returns (bool); - - function getMintAmounts(uint256 amount0Max, uint256 amount1Max) - external - view - returns ( - uint256 amount0, - uint256 amount1, - uint256 mintAmount - ); - - function getUnderlyingBalances() - external - view - returns (uint256 amount0, uint256 amount1); - - function getPositionID() external view returns (bytes32 positionID); -} \ No newline at end of file diff --git a/src/hardhat/old_contracts/Misc_AMOs/mstable/IFeederPool.sol b/src/hardhat/old_contracts/Misc_AMOs/mstable/IFeederPool.sol deleted file mode 100644 index 616ad131..00000000 --- a/src/hardhat/old_contracts/Misc_AMOs/mstable/IFeederPool.sol +++ /dev/null @@ -1,78 +0,0 @@ -// SPDX-License-Identifier: GPL-2.0-or-later -pragma solidity >=0.6.11; - -interface IFeederPool { - - enum BassetStatus { - Default, - Normal, - BrokenBelowPeg, - BrokenAbovePeg, - Blacklisted, - Liquidating, - Liquidated, - Failed - } - - struct BassetPersonal { - // Address of the bAsset - address addr; - // Address of the bAsset - address integrator; - // An ERC20 can charge transfer fee, for example USDT, DGX tokens. - bool hasTxFee; // takes a byte in storage - // Status of the bAsset - BassetStatus status; - } - - struct BassetData { - // 1 Basset * ratio / ratioScale == x Masset (relative value) - // If ratio == 10e8 then 1 bAsset = 10 mAssets - // A ratio is divised as 10^(18-tokenDecimals) * measurementMultiple(relative value of 1 base unit) - uint128 ratio; - // Amount of the Basset that is held in Collateral - uint128 vaultBalance; - } - - function allowance(address owner, address spender) external view returns (uint256); - function approve(address spender, uint256 amount) external returns (bool); - function balanceOf(address account) external view returns (uint256); - function collectPendingFees() external; - function collectPlatformInterest() external returns (uint256 mintAmount, uint256 newSupply); - // function data() external view returns (uint256 swapFee, uint256 redemptionFee, uint256 govFee, uint256 pendingFees, uint256 cacheSize, tuple ampData, tuple weightLimits); - function decimals() external view returns (uint8); - function decreaseAllowance(address spender, uint256 subtractedValue) external returns (bool); - function getBasset(address _bAsset) external view returns (BassetPersonal memory personal, BassetData memory data); - function getBassets() external view returns (BassetPersonal[] memory personal, BassetData[] memory data); - // function getConfig() external view returns (tuple config); - // function getMintMultiOutput(address[] _inputs, uint256[] _inputQuantities) external view returns (uint256 mintOutput); - function getMintOutput(address _input, uint256 _inputQuantity) external view returns (uint256 mintOutput); - function getPrice() external view returns (uint256 price, uint256 k); - // function getRedeemExactBassetsOutput(address[] _outputs, uint256[] _outputQuantities) external view returns (uint256 fpTokenQuantity); - function getRedeemOutput(address _output, uint256 _fpTokenQuantity) external view returns (uint256 bAssetOutput); - function getSwapOutput(address _input, address _output, uint256 _inputQuantity) external view returns (uint256 swapOutput); - function increaseAllowance(address spender, uint256 addedValue) external returns (bool); - // function initialize(string _nameArg, string _symbolArg, tuple _mAsset, tuple _fAsset, address[] _mpAssets, tuple _config) external; - function mAsset() external view returns (address); - // function migrateBassets(address[] _bAssets, address _newIntegration) external; - function mint(address _input, uint256 _inputQuantity, uint256 _minOutputQuantity, address _recipient) external returns (uint256 mintOutput); - // function mintMulti(address[] _inputs, uint256[] _inputQuantities, uint256 _minOutputQuantity, address _recipient) external returns (uint256 mintOutput); - function name() external view returns (string memory); - function nexus() external view returns (address); - function pause() external; - function paused() external view returns (bool); - function redeem(address _output, uint256 _fpTokenQuantity, uint256 _minOutputQuantity, address _recipient) external returns (uint256 outputQuantity); - // function redeemExactBassets(address[] _outputs, uint256[] _outputQuantities, uint256 _maxInputQuantity, address _recipient) external returns (uint256 fpTokenQuantity); - // function redeemProportionately(uint256 _inputQuantity, uint256[] _minOutputQuantities, address _recipient) external returns (uint256[] outputQuantities); - function setCacheSize(uint256 _cacheSize) external; - function setFees(uint256 _swapFee, uint256 _redemptionFee, uint256 _govFee) external; - function setWeightLimits(uint128 _min, uint128 _max) external; - function startRampA(uint256 _targetA, uint256 _rampEndTime) external; - function stopRampA() external; - function swap(address _input, address _output, uint256 _inputQuantity, uint256 _minOutputQuantity, address _recipient) external returns (uint256 swapOutput); - function symbol() external view returns (string memory); - function totalSupply() external view returns (uint256); - function transfer(address recipient, uint256 amount) external returns (bool); - function transferFrom(address sender, address recipient, uint256 amount) external returns (bool); - function unpause() external; -} diff --git a/src/hardhat/old_contracts/Misc_AMOs/snowball/ILPToken.sol b/src/hardhat/old_contracts/Misc_AMOs/snowball/ILPToken.sol deleted file mode 100644 index 8e2beae0..00000000 --- a/src/hardhat/old_contracts/Misc_AMOs/snowball/ILPToken.sol +++ /dev/null @@ -1,22 +0,0 @@ -// SPDX-License-Identifier: GPL-2.0-or-later -pragma solidity >=0.6.11; - -interface ILPToken { - function allowance(address owner, address spender) external view returns(uint256); - function approve(address spender, uint256 amount) external returns(bool); - function balanceOf(address account) external view returns(uint256); - function burn(uint256 amount) external; - function burnFrom(address account, uint256 amount) external; - function decimals() external view returns(uint8); - function decreaseAllowance(address spender, uint256 subtractedValue) external returns(bool); - function increaseAllowance(address spender, uint256 addedValue) external returns(bool); - function mint(address recipient, uint256 amount) external; - function name() external view returns(string memory); - function owner() external view returns(address); - function renounceOwnership() external; - function symbol() external view returns(string memory); - function totalSupply() external view returns(uint256); - function transfer(address recipient, uint256 amount) external returns(bool); - function transferFrom(address sender, address recipient, uint256 amount) external returns(bool); - function transferOwnership(address newOwner) external; -} diff --git a/src/hardhat/old_contracts/Misc_AMOs/snowball/ISwapFlashLoan.sol b/src/hardhat/old_contracts/Misc_AMOs/snowball/ISwapFlashLoan.sol deleted file mode 100644 index cc3f618a..00000000 --- a/src/hardhat/old_contracts/Misc_AMOs/snowball/ISwapFlashLoan.sol +++ /dev/null @@ -1,34 +0,0 @@ -// SPDX-License-Identifier: GPL-2.0-or-later -pragma solidity >=0.6.11; - -interface ISwapFlashLoan { - function MAX_BPS() external view returns(uint256); - function addLiquidity(uint256[] memory amounts, uint256 minToMint, uint256 deadline) external returns(uint256); - function calculateRemoveLiquidity(uint256 amount) external view returns(uint256[] memory); - function calculateRemoveLiquidityOneToken(uint256 tokenAmount, uint8 tokenIndex) external view returns(uint256 availableTokenAmount); - function calculateSwap(uint8 tokenIndexFrom, uint8 tokenIndexTo, uint256 dx) external view returns(uint256); - function calculateTokenAmount(uint256[] memory amounts, bool deposit) external view returns(uint256); - function getA() external view returns(uint256); - function getAPrecise() external view returns(uint256); - function getAdminBalance(uint256 index) external view returns(uint256); - function getToken(uint8 index) external view returns(address); - function getTokenBalance(uint8 index) external view returns(uint256); - function getTokenIndex(address tokenAddress) external view returns(uint8); - function getVirtualPrice() external view returns(uint256); - function owner() external view returns(address); - function pause() external; - function paused() external view returns(bool); - function protocolFeeShareBPS() external view returns(uint256); - function rampA(uint256 futureA, uint256 futureTime) external; - function removeLiquidityOneToken(uint256 tokenAmount, uint8 tokenIndex, uint256 minAmount, uint256 deadline) external returns(uint256); - function renounceOwnership() external; - function setAdminFee(uint256 newAdminFee) external; - function setFlashLoanFees(uint256 newFlashLoanFeeBPS, uint256 newProtocolFeeShareBPS) external; - function setSwapFee(uint256 newSwapFee) external; - function stopRampA() external; - function swap(uint8 tokenIndexFrom, uint8 tokenIndexTo, uint256 dx, uint256 minDy, uint256 deadline) external returns(uint256); - function swapStorage() external view returns(uint256 initialA, uint256 futureA, uint256 initialATime, uint256 futureATime, uint256 swapFee, uint256 adminFee, address lpToken); - function transferOwnership(address newOwner) external; - function unpause() external; - function withdrawAdminFees() external; -} diff --git a/src/hardhat/old_contracts/Misc_AMOs/vesper/IPoolRewards.sol b/src/hardhat/old_contracts/Misc_AMOs/vesper/IPoolRewards.sol deleted file mode 100644 index 0c9daceb..00000000 --- a/src/hardhat/old_contracts/Misc_AMOs/vesper/IPoolRewards.sol +++ /dev/null @@ -1,27 +0,0 @@ -// SPDX-License-Identifier: GPL-2.0-or-later -pragma solidity >=0.8.0; - -interface IPoolRewards { - function VERSION() external view returns(string memory); - function addRewardToken(address _newRewardToken) external; - function claimReward(address _account) external; - function claimable(address _account) external view returns(address[] memory _rewardTokens, uint256[] memory _claimableAmounts); - function getRewardTokens() external view returns(address[] memory); - function initialize(address _pool, address[] memory _rewardTokens) external; - function isRewardToken(address) external view returns(bool); - function lastTimeRewardApplicable(address _rewardToken) external view returns(uint256); - function lastUpdateTime(address) external view returns(uint256); - function notifyRewardAmount(address _rewardToken, uint256 _rewardAmount, uint256 _rewardDuration) external; - function notifyRewardAmount(address[] memory _rewardTokens, uint256[] memory _rewardAmounts, uint256[] memory _rewardDurations) external; - function periodFinish(address) external view returns(uint256); - function pool() external view returns(address); - function rewardDuration(address) external view returns(uint256); - function rewardForDuration() external view returns(address[] memory _rewardTokens, uint256[] memory _rewardForDuration); - function rewardPerToken() external view returns(address[] memory _rewardTokens, uint256[] memory _rewardPerTokenRate); - function rewardPerTokenStored(address) external view returns(uint256); - function rewardRates(address) external view returns(uint256); - function rewardTokens(uint256) external view returns(address); - function rewards(address, address) external view returns(uint256); - function updateReward(address _account) external; - function userRewardPerTokenPaid(address, address) external view returns(uint256); -} \ No newline at end of file diff --git a/src/hardhat/old_contracts/Misc_AMOs/vesper/IVPool.sol b/src/hardhat/old_contracts/Misc_AMOs/vesper/IVPool.sol deleted file mode 100644 index d4b8d40d..00000000 --- a/src/hardhat/old_contracts/Misc_AMOs/vesper/IVPool.sol +++ /dev/null @@ -1,66 +0,0 @@ -// SPDX-License-Identifier: GPL-2.0-or-later -pragma solidity >=0.8.0; - -interface IVPool { - function DOMAIN_SEPARATOR() external view returns (bytes32); - function MAX_BPS() external view returns (uint256); - function VERSION() external view returns (string memory); - function acceptGovernorship() external; - function addInList(address _listToUpdate, address _addressToAdd) external; - function allowance(address owner, address spender) external view returns (uint256); - function approve(address spender, uint256 amount) external returns (bool); - function availableCreditLimit(address _strategy) external view returns (uint256); - function balanceOf(address account) external view returns (uint256); - function convertFrom18(uint256 _amount) external view returns (uint256); - function decimalConversionFactor() external view returns (uint256); - function decimals() external view returns (uint8); - function decreaseAllowance(address spender, uint256 subtractedValue) external returns (bool); - function deposit(uint256 _amount) external; - function depositWithPermit(uint256 _amount, uint256 _deadline, uint8 _v, bytes32 _r, bytes32 _s) external; - function excessDebt(address _strategy) external view returns (uint256); - function feeCollector() external view returns (address); - function feeWhitelist() external view returns (address); - function getStrategies() external view returns (address[] memory); - function getWithdrawQueue() external view returns (address[] memory); - function governor() external view returns (address); - function increaseAllowance(address spender, uint256 addedValue) external returns (bool); - function initialize(string memory _name, string memory _symbol, address _token, address _poolAccountant, address _addressListFactory) external; - function keepers() external view returns (address); - function maintainers() external view returns (address); - function migrateStrategy(address _old, address _new) external; - function multiTransfer(address[] memory _recipients, uint256[] memory _amounts) external returns (bool); - function name() external view returns (string memory); - function nonces(address) external view returns (uint256); - function open() external; - function pause() external; - function paused() external view returns (bool); - function permit(address owner, address spender, uint256 value, uint256 deadline, uint8 v, bytes32 r, bytes32 s) external; - function poolAccountant() external view returns (address); - function poolRewards() external view returns (address); - function pricePerShare() external view returns (uint256); - function removeFromList(address _listToUpdate, address _addressToRemove) external; - function reportEarning(uint256 _profit, uint256 _loss, uint256 _payback) external; - function reportLoss(uint256 _loss) external; - function shutdown() external; - function stopEverything() external view returns (bool); - function strategy(address _strategy) external view returns (bool _active, uint256 _interestFee, uint256 _debtRate, uint256 _lastRebalance, uint256 _totalDebt, uint256 _totalLoss, uint256 _totalProfit, uint256 _debtRatio); - function sweepERC20(address _fromToken) external; - function symbol() external view returns (string memory); - function token() external view returns (address); - function tokensHere() external view returns (uint256); - function totalDebt() external view returns (uint256); - function totalDebtOf(address _strategy) external view returns (uint256); - function totalDebtRatio() external view returns (uint256); - function totalSupply() external view returns (uint256); - function totalValue() external view returns (uint256); - function transfer(address recipient, uint256 amount) external returns (bool); - function transferFrom(address sender, address recipient, uint256 amount) external returns (bool); - function transferGovernorship(address _proposedGovernor) external; - function unpause() external; - function updateFeeCollector(address _newFeeCollector) external; - function updatePoolRewards(address _newPoolRewards) external; - function updateWithdrawFee(uint256 _newWithdrawFee) external; - function whitelistedWithdraw(uint256 _shares) external; - function withdraw(uint256 _shares) external; - function withdrawFee() external view returns (uint256); -} \ No newline at end of file diff --git a/src/hardhat/old_contracts/Staking/FraxCrossChainFarm.sol b/src/hardhat/old_contracts/Staking/FraxCrossChainFarm.sol deleted file mode 100755 index 4d738a4f..00000000 --- a/src/hardhat/old_contracts/Staking/FraxCrossChainFarm.sol +++ /dev/null @@ -1,772 +0,0 @@ -// SPDX-License-Identifier: GPL-2.0-or-later -pragma solidity >=0.6.11; -pragma experimental ABIEncoderV2; - -// ==================================================================== -// | ______ _______ | -// | / _____________ __ __ / ____(_____ ____ _____ ________ | -// | / /_ / ___/ __ `| |/_/ / /_ / / __ \/ __ `/ __ \/ ___/ _ \ | -// | / __/ / / / /_/ _> < / __/ / / / / / /_/ / / / / /__/ __/ | -// | /_/ /_/ \__,_/_/|_| /_/ /_/_/ /_/\__,_/_/ /_/\___/\___/ | -// | | -// ==================================================================== -// ======================== FraxCrossChainFarm ======================== -// ==================================================================== -// No veFXS logic -// Because of lack of cross-chain reading of the gauge controller's emission rate, -// the contract sets its reward based on its token balance(s) -// Rolling 7 day reward period idea credit goes to denett -// rewardRate0 and rewardRate1 will look weird as people claim, but if you track the rewards actually emitted, -// the numbers do check out - -// Frax Finance: https://github.com/FraxFinance - -// Primary Author(s) -// Travis Moore: https://github.com/FortisFortuna - -// Reviewer(s) / Contributor(s) -// Jason Huan: https://github.com/jasonhuan -// Sam Kazemian: https://github.com/samkazemian -// Dennis: github.com/denett - -// Originally inspired by Synthetix.io, but heavily modified by the Frax team -// https://raw.githubusercontent.com/Synthetixio/synthetix/develop/contracts/StakingRewards.sol - -import "../Math/Math.sol"; -import "../Math/SafeMath.sol"; -import "../Curve/IveFXS.sol"; -import "../Curve/FraxCrossChainRewarder.sol"; -import "../ERC20/ERC20.sol"; -import '../Uniswap/TransferHelper.sol'; -import "../ERC20/SafeERC20.sol"; - -// import '../Misc_AMOs/impossible/IStableXPair.sol'; // Impossible -// import '../Misc_AMOs/mstable/IFeederPool.sol'; // mStable -import '../Misc_AMOs/snowball/ILPToken.sol'; // Snowball S4D - [Part 1] -import '../Misc_AMOs/snowball/ISwapFlashLoan.sol'; // Snowball S4D - [Part 2] -// import '../Uniswap/Interfaces/IUniswapV2Pair.sol'; // Uniswap V2 - -import "../Utils/ReentrancyGuard.sol"; - -// Inheritance -import "./Owned.sol"; - -contract FraxCrossChainFarm is Owned, ReentrancyGuard { - using SafeMath for uint256; - using SafeERC20 for ERC20; - - /* ========== STATE VARIABLES ========== */ - - // Instances - IveFXS public veFXS; - ERC20 public rewardsToken0; - ERC20 public rewardsToken1; - - // IStableXPair public stakingToken; // Impossible - // IFeederPool public stakingToken; // mStable - ILPToken public stakingToken; // Snowball S4D - // IUniswapV2Pair public stakingToken; // Uniswap V2 - - FraxCrossChainRewarder public rewarder; - - // FRAX - address public frax_address; - - // Constant for various precisions - uint256 private constant MULTIPLIER_PRECISION = 1e18; - - // Admin addresses - address public timelock_address; // Governance timelock address - address public controller_address; // Gauge controller - - // Time tracking - uint256 public periodFinish; - uint256 public lastUpdateTime; - - // Lock time and multiplier settings - uint256 public lock_max_multiplier = uint256(3e18); // E18. 1x = e18 - uint256 public lock_time_for_max_multiplier = 3 * 365 * 86400; // 3 years - uint256 public lock_time_min = 86400; // 1 * 86400 (1 day) - - // veFXS related - uint256 public vefxs_per_frax_for_max_boost = uint256(4e18); // E18. 4e18 means 4 veFXS must be held by the staker per 1 FRAX - uint256 public vefxs_max_multiplier = uint256(2e18); // E18. 1x = 1e18 - mapping(address => uint256) private _vefxsMultiplierStored; - - // Max reward per second - uint256 public rewardRate0; - uint256 public rewardRate1; - - // Reward period - uint256 public rewardsDuration = 604800; // 7 * 86400 (7 days). - - // Reward tracking - uint256 public ttlRew0Owed; - uint256 public ttlRew1Owed; - uint256 public ttlRew0Paid; - uint256 public ttlRew1Paid; - uint256 private rewardPerTokenStored0; - uint256 private rewardPerTokenStored1; - mapping(address => uint256) public userRewardPerTokenPaid0; - mapping(address => uint256) public userRewardPerTokenPaid1; - mapping(address => uint256) public rewards0; - mapping(address => uint256) public rewards1; - uint256 public lastRewardPull; - - // Balance tracking - uint256 private _total_liquidity_locked; - uint256 private _total_combined_weight; - mapping(address => uint256) private _locked_liquidity; - mapping(address => uint256) private _combined_weights; - - // Uniswap V2 / Impossible ONLY - bool frax_is_token0; - - // Stake tracking - mapping(address => LockedStake[]) private lockedStakes; - - // List of valid migrators (set by governance) - mapping(address => bool) public valid_migrators; - - // Stakers set which migrator(s) they want to use - mapping(address => mapping(address => bool)) public staker_allowed_migrators; - - // Greylisting of bad addresses - mapping(address => bool) public greylist; - - // Administrative booleans - bool public migrationsOn; // Used for migrations. Prevents new stakes, but allows LP and reward withdrawals - bool public stakesUnlocked; // Release locked stakes in case of system migration or emergency - bool public withdrawalsPaused; // For emergencies - bool public rewardsCollectionPaused; // For emergencies - bool public stakingPaused; // For emergencies - bool public isInitialized; - - /* ========== STRUCTS ========== */ - - struct LockedStake { - bytes32 kek_id; - uint256 start_timestamp; - uint256 liquidity; - uint256 ending_timestamp; - uint256 lock_multiplier; // 6 decimals of precision. 1x = 1000000 - } - - /* ========== MODIFIERS ========== */ - - modifier onlyByOwnGov() { - require(msg.sender == owner || msg.sender == timelock_address, "Not owner or timelock"); - _; - } - - modifier onlyByOwnGovCtrlr() { - require(msg.sender == owner || msg.sender == timelock_address || msg.sender == controller_address, "Not own, tlk, or ctrlr"); - _; - } - - modifier isMigrating() { - require(migrationsOn == true, "Not in migration"); - _; - } - - modifier notStakingPaused() { - require(stakingPaused == false, "Staking paused"); - _; - } - - modifier updateRewardAndBalance(address account, bool sync_too) { - _updateRewardAndBalance(account, sync_too); - _; - } - - /* ========== CONSTRUCTOR ========== */ - - constructor ( - address _owner, - address _rewardsToken0, - address _rewardsToken1, - address _stakingToken, - address _frax_address, - address _timelock_address, - address _rewarder_address - ) Owned(_owner){ - frax_address = _frax_address; - rewardsToken0 = ERC20(_rewardsToken0); - rewardsToken1 = ERC20(_rewardsToken1); - - // stakingToken = IStableXPair(_stakingToken); - // stakingToken = IFeederPool(_stakingToken); - stakingToken = ILPToken(_stakingToken); - // stakingToken = IUniswapV2Pair(_stakingToken); - - timelock_address = _timelock_address; - rewarder = FraxCrossChainRewarder(_rewarder_address); - - // // Uniswap V2 / Impossible ONLY - // // Need to know which token FRAX is (0 or 1) - // address token0 = stakingToken.token0(); - // if (token0 == frax_address) frax_is_token0 = true; - // else frax_is_token0 = false; - - // Other booleans - migrationsOn = false; - stakesUnlocked = false; - - // For initialization - lastUpdateTime = block.timestamp; - periodFinish = block.timestamp.add(rewardsDuration); - } - - /* ========== VIEWS ========== */ - - // Total locked liquidity tokens - function totalLiquidityLocked() external view returns (uint256) { - return _total_liquidity_locked; - } - - // Locked liquidity for a given account - function lockedLiquidityOf(address account) external view returns (uint256) { - return _locked_liquidity[account]; - } - - // Total 'balance' used for calculating the percent of the pool the account owns - // Takes into account the locked stake time multiplier and veFXS multiplier - function totalCombinedWeight() external view returns (uint256) { - return _total_combined_weight; - } - - // Combined weight for a specific account - function combinedWeightOf(address account) external view returns (uint256) { - return _combined_weights[account]; - } - - // All the locked stakes for a given account - function lockedStakesOf(address account) external view returns (LockedStake[] memory) { - return lockedStakes[account]; - } - - function lockMultiplier(uint256 secs) public view returns (uint256) { - uint256 lock_multiplier = - uint256(MULTIPLIER_PRECISION).add( - secs - .mul(lock_max_multiplier.sub(MULTIPLIER_PRECISION)) - .div(lock_time_for_max_multiplier) - ); - if (lock_multiplier > lock_max_multiplier) lock_multiplier = lock_max_multiplier; - return lock_multiplier; - } - - function lastTimeRewardApplicable() internal view returns (uint256) { - return Math.min(block.timestamp, periodFinish); - } - - function fraxPerLPToken() public view returns (uint256) { - // Get the amount of FRAX 'inside' of the lp tokens - uint256 frax_per_lp_token; - - // mStable - // ============================================ - // { - // uint256 total_frax_reserves; - // (, IFeederPool.BassetData memory vaultData) = (stakingToken.getBasset(frax_address)); - // total_frax_reserves = uint256(vaultData.vaultBalance); - // frax_per_lp_token = total_frax_reserves.mul(1e18).div(stakingToken.totalSupply()); - // } - - // Snowball S4D - // ============================================ - { - ISwapFlashLoan ISFL = ISwapFlashLoan(0xA0bE4f05E37617138Ec212D4fB0cD2A8778a535F); - uint256 total_frax = ISFL.getTokenBalance(ISFL.getTokenIndex(frax_address)); - frax_per_lp_token = total_frax.mul(1e18).div(stakingToken.totalSupply()); - } - - // Uniswap V2 & Impossible - // ============================================ - // { - // uint256 total_frax_reserves; - // (uint256 reserve0, uint256 reserve1, ) = (stakingToken.getReserves()); - // if (frax_is_token0) total_frax_reserves = reserve0; - // else total_frax_reserves = reserve1; - - // frax_per_lp_token = total_frax_reserves.mul(1e18).div(stakingToken.totalSupply()); - // } - - - - return frax_per_lp_token; - } - - function userStakedFrax(address account) public view returns (uint256) { - return (fraxPerLPToken()).mul(_locked_liquidity[account]).div(1e18); - } - - function minVeFXSForMaxBoost(address account) public view returns (uint256) { - return (userStakedFrax(account)).mul(vefxs_per_frax_for_max_boost).div(MULTIPLIER_PRECISION); - } - - function veFXSMultiplier(address account) public view returns (uint256) { - if (address(veFXS) != address(0)){ - // The claimer gets a boost depending on amount of veFXS they have relative to the amount of FRAX 'inside' - // of their locked LP tokens - uint256 veFXS_needed_for_max_boost = minVeFXSForMaxBoost(account); - if (veFXS_needed_for_max_boost > 0){ - uint256 user_vefxs_fraction = (veFXS.balanceOf(account)).mul(MULTIPLIER_PRECISION).div(veFXS_needed_for_max_boost); - - uint256 vefxs_multiplier = ((user_vefxs_fraction).mul(vefxs_max_multiplier)).div(MULTIPLIER_PRECISION); - - // Cap the boost to the vefxs_max_multiplier - if (vefxs_multiplier > vefxs_max_multiplier) vefxs_multiplier = vefxs_max_multiplier; - - return vefxs_multiplier; - } - else return 0; // This will happen with the first stake, when user_staked_frax is 0 - } - else return 0; - } - - function calcCurCombinedWeight(address account) public view - returns ( - uint256 old_combined_weight, - uint256 new_vefxs_multiplier, - uint256 new_combined_weight - ) - { - // Get the old combined weight - old_combined_weight = _combined_weights[account]; - - // Get the veFXS multipliers - // For the calculations, use the midpoint (analogous to midpoint Riemann sum) - new_vefxs_multiplier = veFXSMultiplier(account); - - uint256 midpoint_vefxs_multiplier; - if (_locked_liquidity[account] == 0 && _combined_weights[account] == 0) { - // This is only called for the first stake to make sure the veFXS multiplier is not cut in half - midpoint_vefxs_multiplier = new_vefxs_multiplier; - } - else { - midpoint_vefxs_multiplier = ((new_vefxs_multiplier).add(_vefxsMultiplierStored[account])).div(2); - } - - // Loop through the locked stakes, first by getting the liquidity * lock_multiplier portion - new_combined_weight = 0; - for (uint256 i = 0; i < lockedStakes[account].length; i++) { - LockedStake memory thisStake = lockedStakes[account][i]; - uint256 lock_multiplier = thisStake.lock_multiplier; - - // If the lock period is over, drop the lock multiplier down to 1x for the weight calculations - if (thisStake.ending_timestamp <= block.timestamp){ - lock_multiplier = MULTIPLIER_PRECISION; - } - - uint256 liquidity = thisStake.liquidity; - uint256 combined_boosted_amount = liquidity.mul(lock_multiplier.add(midpoint_vefxs_multiplier)).div(MULTIPLIER_PRECISION); - new_combined_weight = new_combined_weight.add(combined_boosted_amount); - } - } - - function rewardPerToken() public view returns (uint256, uint256) { - if (_total_liquidity_locked == 0 || _total_combined_weight == 0) { - return (rewardPerTokenStored0, rewardPerTokenStored1); - } - else { - return ( - rewardPerTokenStored0.add( - lastTimeRewardApplicable().sub(lastUpdateTime).mul(rewardRate0).mul(1e18).div(_total_combined_weight) - ), - rewardPerTokenStored1.add( - lastTimeRewardApplicable().sub(lastUpdateTime).mul(rewardRate1).mul(1e18).div(_total_combined_weight) - ) - ); - } - } - - function earned(address account) public view returns (uint256, uint256) { - (uint256 rew_per_token0, uint256 rew_per_token1) = rewardPerToken(); - if (_combined_weights[account] == 0){ - return (0, 0); - } - return ( - (_combined_weights[account].mul(rew_per_token0.sub(userRewardPerTokenPaid0[account]))).div(1e18).add(rewards0[account]), - (_combined_weights[account].mul(rew_per_token1.sub(userRewardPerTokenPaid1[account]))).div(1e18).add(rewards1[account]) - ); - } - - function getRewardForDuration() external view returns (uint256, uint256) { - return ( - rewardRate0.mul(rewardsDuration), - rewardRate1.mul(rewardsDuration) - ); - } - - /* ========== MUTATIVE FUNCTIONS ========== */ - - function _updateRewardAndBalance(address account, bool sync_too) internal { - // Need to retro-adjust some things if the period hasn't been renewed, then start a new one - if (sync_too){ - sync(); - } - - if (account != address(0)) { - // To keep the math correct, the user's combined weight must be recomputed to account for their - // ever-changing veFXS balance. - ( - uint256 old_combined_weight, - uint256 new_vefxs_multiplier, - uint256 new_combined_weight - ) = calcCurCombinedWeight(account); - - // Calculate the earnings first - _syncEarned(account); - - // Update the user's stored veFXS multipliers - _vefxsMultiplierStored[account] = new_vefxs_multiplier; - - // Update the user's and the global combined weights - if (new_combined_weight >= old_combined_weight) { - uint256 weight_diff = new_combined_weight.sub(old_combined_weight); - _total_combined_weight = _total_combined_weight.add(weight_diff); - _combined_weights[account] = old_combined_weight.add(weight_diff); - } else { - uint256 weight_diff = old_combined_weight.sub(new_combined_weight); - _total_combined_weight = _total_combined_weight.sub(weight_diff); - _combined_weights[account] = old_combined_weight.sub(weight_diff); - } - - } - } - - function _syncEarned(address account) internal { - if (account != address(0)) { - // Calculate the earnings - (uint256 earned0, uint256 earned1) = earned(account); - rewards0[account] = earned0; - rewards1[account] = earned1; - userRewardPerTokenPaid0[account] = rewardPerTokenStored0; - userRewardPerTokenPaid1[account] = rewardPerTokenStored1; - } - } - - // Staker can allow a migrator - function stakerAllowMigrator(address migrator_address) external { - require(valid_migrators[migrator_address], "Invalid migrator address"); - staker_allowed_migrators[msg.sender][migrator_address] = true; - } - - // Staker can disallow a previously-allowed migrator - function stakerDisallowMigrator(address migrator_address) external { - // Delete from the mapping - delete staker_allowed_migrators[msg.sender][migrator_address]; - } - - // Two different stake functions are needed because of delegateCall and msg.sender issues (important for migration) - function stakeLocked(uint256 liquidity, uint256 secs) nonReentrant public { - _stakeLocked(msg.sender, msg.sender, liquidity, secs, block.timestamp); - } - - // If this were not internal, and source_address had an infinite approve, this could be exploitable - // (pull funds from source_address and stake for an arbitrary staker_address) - function _stakeLocked( - address staker_address, - address source_address, - uint256 liquidity, - uint256 secs, - uint256 start_timestamp - ) internal updateRewardAndBalance(staker_address, true) { - require(!stakingPaused || valid_migrators[msg.sender] == true, "Staking paused or in migration"); - require(liquidity > 0, "Must stake more than zero"); - require(greylist[staker_address] == false, "Address has been greylisted"); - require(secs >= lock_time_min, "Minimum stake time not met"); - require(secs <= lock_time_for_max_multiplier,"Trying to lock for too long"); - - uint256 lock_multiplier = lockMultiplier(secs); - bytes32 kek_id = keccak256(abi.encodePacked(staker_address, start_timestamp, liquidity, _locked_liquidity[staker_address])); - lockedStakes[staker_address].push(LockedStake( - kek_id, - start_timestamp, - liquidity, - start_timestamp.add(secs), - lock_multiplier - )); - - // Pull the tokens from the source_address - TransferHelper.safeTransferFrom(address(stakingToken), source_address, address(this), liquidity); - - // Update liquidities - _total_liquidity_locked = _total_liquidity_locked.add(liquidity); - _locked_liquidity[staker_address] = _locked_liquidity[staker_address].add(liquidity); - - // Need to call to update the combined weights - _updateRewardAndBalance(staker_address, false); - - emit StakeLocked(staker_address, liquidity, secs, kek_id, source_address); - } - - // Two different withdrawLocked functions are needed because of delegateCall and msg.sender issues (important for migration) - function withdrawLocked(bytes32 kek_id) nonReentrant public { - require(withdrawalsPaused == false, "Withdrawals paused"); - _withdrawLocked(msg.sender, msg.sender, kek_id); - } - - // No withdrawer == msg.sender check needed since this is only internally callable and the checks are done in the wrapper - // functions like withdraw(), migrator_withdraw_unlocked() and migrator_withdraw_locked() - function _withdrawLocked(address staker_address, address destination_address, bytes32 kek_id) internal { - // Collect rewards first and then update the balances - _getReward(staker_address, destination_address); - - LockedStake memory thisStake; - thisStake.liquidity = 0; - uint theArrayIndex; - for (uint i = 0; i < lockedStakes[staker_address].length; i++){ - if (kek_id == lockedStakes[staker_address][i].kek_id){ - thisStake = lockedStakes[staker_address][i]; - theArrayIndex = i; - break; - } - } - require(thisStake.kek_id == kek_id, "Stake not found"); - require(block.timestamp >= thisStake.ending_timestamp || stakesUnlocked == true || valid_migrators[msg.sender] == true, "Stake is still locked!"); - - uint256 liquidity = thisStake.liquidity; - - if (liquidity > 0) { - // Update liquidities - _total_liquidity_locked = _total_liquidity_locked.sub(liquidity); - _locked_liquidity[staker_address] = _locked_liquidity[staker_address].sub(liquidity); - - // Remove the stake from the array - delete lockedStakes[staker_address][theArrayIndex]; - - // Need to call to update the combined weights - _updateRewardAndBalance(staker_address, false); - - // Give the tokens to the destination_address - // Should throw if insufficient balance - stakingToken.transfer(destination_address, liquidity); - - emit WithdrawLocked(staker_address, liquidity, kek_id, destination_address); - } - - } - - // Two different getReward functions are needed because of delegateCall and msg.sender issues (important for migration) - function getReward() external nonReentrant returns (uint256, uint256) { - require(rewardsCollectionPaused == false,"Rewards collection paused"); - return _getReward(msg.sender, msg.sender); - } - - // No withdrawer == msg.sender check needed since this is only internally callable - // This distinction is important for the migrator - function _getReward(address rewardee, address destination_address) internal updateRewardAndBalance(rewardee, true) returns (uint256 reward0, uint256 reward1) { - reward0 = rewards0[rewardee]; - reward1 = rewards1[rewardee]; - - if (reward0 > 0) { - rewards0[rewardee] = 0; - rewardsToken0.transfer(destination_address, reward0); - ttlRew0Paid += reward0; - emit RewardPaid(rewardee, reward0, address(rewardsToken0), destination_address); - } - - if (reward1 > 0) { - rewards1[rewardee] = 0; - rewardsToken1.transfer(destination_address, reward1); - ttlRew1Paid += reward1; - emit RewardPaid(rewardee, reward1, address(rewardsToken1), destination_address); - } - } - - // Quasi-notifyRewardAmount() logic - function syncRewards() internal { - // Bring in rewards, if applicable - if ((address(rewarder) != address(0)) && ((block.timestamp).sub(lastRewardPull) >= rewardsDuration)){ - rewarder.distributeReward(); - lastRewardPull = block.timestamp; - } - - // Get the current reward token balances - uint256 curr_bal_0 = rewardsToken0.balanceOf(address(this)); - uint256 curr_bal_1 = rewardsToken1.balanceOf(address(this)); - - // Update the owed amounts based off the old reward rates - // Anything over a week is zeroed - { - uint256 eligible_elapsed_time = Math.min((block.timestamp).sub(lastUpdateTime), rewardsDuration); - ttlRew0Owed += rewardRate0.mul(eligible_elapsed_time); - ttlRew1Owed += rewardRate1.mul(eligible_elapsed_time); - } - - // Update the stored amounts too - { - (uint256 reward0, uint256 reward1) = rewardPerToken(); - rewardPerTokenStored0 = reward0; - rewardPerTokenStored1 = reward1; - } - - // Set the reward rates based on the free amount of tokens - { - // Don't count unpaid rewards as free - uint256 unpaid0 = ttlRew0Owed.sub(ttlRew0Paid); - uint256 unpaid1 = ttlRew1Owed.sub(ttlRew1Paid); - - // Handle reward token0 - if (curr_bal_0 <= unpaid0){ - // token0 is depleted, so stop emitting - rewardRate0 = 0; - } - else { - uint256 free0 = curr_bal_0.sub(unpaid0); - rewardRate0 = (free0).div(rewardsDuration); - } - - // Handle reward token1 - if (curr_bal_1 <= unpaid1){ - // token1 is depleted, so stop emitting - rewardRate1 = 0; - } - else { - uint256 free1 = curr_bal_1.sub(unpaid1); - rewardRate1 = (free1).div(rewardsDuration); - } - } - } - - - function sync() public { - require(isInitialized, "Contract not initialized"); - - // Make sure the rewardRates are synced to the current FXS balance - syncRewards(); - - // Rolling 8 days rewards period - lastUpdateTime = block.timestamp; - periodFinish = (block.timestamp).add(rewardsDuration); - } - - /* ========== RESTRICTED FUNCTIONS ========== */ - - // Needed when first deploying the farm - // Make sure rewards are present - function initializeDefault() external onlyByOwnGovCtrlr { - require(!isInitialized, "Already initialized"); - isInitialized = true; - - // Bring in rewards, if applicable - if (address(rewarder) != address(0)){ - rewarder.distributeReward(); - lastRewardPull = block.timestamp; - } - - emit DefaultInitialization(); - } - - // Migrator can stake for someone else (they won't be able to withdraw it back though, only staker_address can). - function migrator_stakeLocked_for(address staker_address, uint256 amount, uint256 secs, uint256 start_timestamp) external isMigrating { - require(staker_allowed_migrators[staker_address][msg.sender] && valid_migrators[msg.sender], "Mig. invalid or unapproved"); - _stakeLocked(staker_address, msg.sender, amount, secs, start_timestamp); - } - - // Used for migrations - function migrator_withdraw_locked(address staker_address, bytes32 kek_id) external isMigrating { - require(staker_allowed_migrators[staker_address][msg.sender] && valid_migrators[msg.sender], "Mig. invalid or unapproved"); - _withdrawLocked(staker_address, msg.sender, kek_id); - } - - // Adds supported migrator address - function addMigrator(address migrator_address) external onlyByOwnGov { - valid_migrators[migrator_address] = true; - } - - // Remove a migrator address - function removeMigrator(address migrator_address) external onlyByOwnGov { - require(valid_migrators[migrator_address] == true, "Address nonexistent"); - - // Delete from the mapping - delete valid_migrators[migrator_address]; - } - - // Added to support recovering LP Rewards and other mistaken tokens from other systems to be distributed to holders - function recoverERC20(address tokenAddress, uint256 tokenAmount) external onlyByOwnGov { - // Admin cannot withdraw the staking token from the contract unless currently migrating - if(!migrationsOn){ - require(tokenAddress != address(stakingToken), "Not in migration"); // Only Governance / Timelock can trigger a migration - } - // Only the owner address can ever receive the recovery withdrawal - ERC20(tokenAddress).transfer(owner, tokenAmount); - emit Recovered(tokenAddress, tokenAmount); - } - - function setMultipliers(uint256 _lock_max_multiplier, uint256 _vefxs_max_multiplier, uint256 _vefxs_per_frax_for_max_boost) external onlyByOwnGov { - require(_lock_max_multiplier >= MULTIPLIER_PRECISION, "Mult must be >= MULTIPLIER_PRECISION"); - require(_vefxs_max_multiplier >= 0, "veFXS mul must be >= 0"); - require(_vefxs_per_frax_for_max_boost > 0, "veFXS pct max must be >= 0"); - - lock_max_multiplier = _lock_max_multiplier; - vefxs_max_multiplier = _vefxs_max_multiplier; - vefxs_per_frax_for_max_boost = _vefxs_per_frax_for_max_boost; - - emit MaxVeFXSMultiplier(vefxs_max_multiplier); - emit LockedStakeMaxMultiplierUpdated(lock_max_multiplier); - emit veFXSPerFraxForMaxBoostUpdated(vefxs_per_frax_for_max_boost); - } - - function setLockedStakeTimeForMinAndMaxMultiplier(uint256 _lock_time_for_max_multiplier, uint256 _lock_time_min) external onlyByOwnGov { - require(_lock_time_for_max_multiplier >= 1, "Mul max time must be >= 1"); - require(_lock_time_min >= 1, "Mul min time must be >= 1"); - - lock_time_for_max_multiplier = _lock_time_for_max_multiplier; - lock_time_min = _lock_time_min; - - emit LockedStakeTimeForMaxMultiplier(lock_time_for_max_multiplier); - emit LockedStakeMinTime(_lock_time_min); - } - - function greylistAddress(address _address) external onlyByOwnGov { - greylist[_address] = !(greylist[_address]); - } - - function unlockStakes() external onlyByOwnGov { - stakesUnlocked = !stakesUnlocked; - } - - function toggleMigrations() external onlyByOwnGov { - migrationsOn = !migrationsOn; - } - - function toggleStaking() external onlyByOwnGov { - stakingPaused = !stakingPaused; - } - - function toggleWithdrawals() external onlyByOwnGov { - withdrawalsPaused = !withdrawalsPaused; - } - - function toggleRewardsCollection() external onlyByOwnGov { - rewardsCollectionPaused = !rewardsCollectionPaused; - } - - function setTimelock(address _new_timelock) external onlyByOwnGov { - timelock_address = _new_timelock; - } - - function setController(address _controller_address) external onlyByOwnGov { - controller_address = _controller_address; - } - - function setVeFXS(address _vefxs_address) external onlyByOwnGov { - veFXS = IveFXS(_vefxs_address); - } - - /* ========== EVENTS ========== */ - - event StakeLocked(address indexed user, uint256 amount, uint256 secs, bytes32 kek_id, address source_address); - event WithdrawLocked(address indexed user, uint256 amount, bytes32 kek_id, address destination_address); - event RewardPaid(address indexed user, uint256 reward, address token_address, address destination_address); - event DefaultInitialization(); - event Recovered(address token, uint256 amount); - event LockedStakeMaxMultiplierUpdated(uint256 multiplier); - event LockedStakeTimeForMaxMultiplier(uint256 secs); - event LockedStakeMinTime(uint256 secs); - event MaxVeFXSMultiplier(uint256 multiplier); - event veFXSPerFraxForMaxBoostUpdated(uint256 scale_factor); -} diff --git a/src/hardhat/test/Fraxferry/Fraxferry-test.js b/src/hardhat/test/Fraxferry/Fraxferry-test.js index 7affb121..d681065e 100644 --- a/src/hardhat/test/Fraxferry/Fraxferry-test.js +++ b/src/hardhat/test/Fraxferry/Fraxferry-test.js @@ -22,7 +22,10 @@ describe("Fraxferry", function () { expect(contractBalanceAfter-contractBalanceBefore).to.equal(bridgeAmount); expect(BigInt(await contracts.ferryAB.noTransactions())).to.equal(BigInt(1)); var transaction = await contracts.ferryAB.transactions(0); - var fee = BigInt(await contracts.ferryAB.FEE()); + var fee_rate = BigInt(await contracts.ferryAB.FEE_RATE()); + var fee_min = BigInt(await contracts.ferryAB.FEE_MIN()); + var fee_max = BigInt(await contracts.ferryAB.FEE_MAX()); + var fee = bigIntMin(bigIntMax(bridgeAmount*fee_rate/BigInt(10000),fee_min),fee_max); var reducedDecimals = BigInt(await contracts.ferryAB.REDUCED_DECIMALS()); expect(transaction.user).to.equal(user.address); expect(BigInt(transaction.amount)*reducedDecimals).to.equal(bridgeAmount-fee); @@ -45,11 +48,14 @@ describe("Fraxferry", function () { var bridgeAmount = BigInt(1000*1e18); await contracts.token0.connect(user).approve(contracts.ferryAB.address,bridgeAmount); await contracts.ferryAB.connect(user).embarkWithRecipient(bridgeAmount,user2.address); - wait(100*60); + wait(3601); var nextBatch = await contracts.ferryAB.getNextBatch(0,10); await contracts.ferryBA.connect(captain).depart(nextBatch.start,nextBatch.end,nextBatch.hash); - wait(100*60); - var fee = BigInt(await contracts.ferryAB.FEE()); + wait(79201); + var fee_rate = BigInt(await contracts.ferryAB.FEE_RATE()); + var fee_min = BigInt(await contracts.ferryAB.FEE_MIN()); + var fee_max = BigInt(await contracts.ferryAB.FEE_MAX()); + var fee = bigIntMin(bigIntMax(bridgeAmount*fee_rate/BigInt(10000),fee_min),fee_max); var batch = await contracts.ferryAB.getBatchData(nextBatch.start,nextBatch.end); var userBalanceBefore = BigInt(await contracts.token1.balanceOf(user2.address)); await contracts.ferryBA.connect(firstOfficer).disembark(batch); @@ -97,11 +103,15 @@ describe("Fraxferry", function () { var bridgeAmount = BigInt(1000*1e18); await contracts.token0.connect(user).approve(contracts.ferryAB.address,bridgeAmount); await contracts.ferryAB.connect(user).embark(bridgeAmount); + wait(3601); var hash = await contracts.ferryAB.getTransactionsHash(0,0); var batch = await contracts.ferryAB.getBatchData(0,0); await contracts.ferryBA.connect(captain).depart(0,0,hash); - wait(60*60); - var fee = BigInt(await contracts.ferryAB.FEE()); + wait(79201); + var fee_rate = BigInt(await contracts.ferryAB.FEE_RATE()); + var fee_min = BigInt(await contracts.ferryAB.FEE_MIN()); + var fee_max = BigInt(await contracts.ferryAB.FEE_MAX()); + var fee = bigIntMin(bigIntMax(bridgeAmount*fee_rate/BigInt(10000),fee_min),fee_max); var userBalanceBefore = BigInt(await contracts.token1.balanceOf(user.address)); var contractBalanceBefore = BigInt(await contracts.token1.balanceOf(contracts.ferryBA.address)); await contracts.ferryBA.connect(firstOfficer).disembark(batch); @@ -120,6 +130,7 @@ describe("Fraxferry", function () { await contracts.ferryAB.connect(user).embark(bridgeAmount); await contracts.ferryAB.connect(user).embark(bridgeAmount*BigInt(2)); await contracts.ferryAB.connect(user).embark(bridgeAmount*BigInt(4)); + wait(3601); var batch1 = await contracts.ferryAB.getBatchData(0,0); var batch2 = await contracts.ferryAB.getBatchData(0,2); var batch3 = await contracts.ferryAB.getBatchData(1,1); @@ -128,7 +139,7 @@ describe("Fraxferry", function () { await contracts.ferryBA.connect(captain).depart(0,0,hash1); await contracts.ferryBA.connect(captain).depart(1,1,hash3); await expect(contracts.ferryBA.connect(firstOfficer).disembark(batch1)).to.be.revertedWith("Too soon"); - wait(60*60); + wait(79201); await expect(contracts.ferryBA.connect(firstOfficer).disembark(batch2)).to.be.revertedWith("Wrong size"); await expect(contracts.ferryBA.connect(firstOfficer).disembark(batch3)).to.be.revertedWith("Wrong start"); var batch4=[0,batch3[1],batch3[2],batch3[3]]; @@ -153,12 +164,12 @@ describe("Fraxferry", function () { await contracts.ferryAB.connect(user).embark(bridgeAmount); await contracts.ferryAB.connect(user).embark(bridgeAmount*BigInt(2)); await contracts.ferryAB.connect(user).embark(bridgeAmount*BigInt(4)); - wait(100*60); + wait(3601); var nextBatch = await contracts.ferryAB.getNextBatch(pos,10); if (pos!=0) await expect(contracts.ferryBA.connect(captain).depart(BigInt(nextBatch.start)-BigInt(1),BigInt(nextBatch.end)-BigInt(1),nextBatch.hash)).to.be.revertedWith("Wrong start"); await expect(contracts.ferryBA.connect(captain).depart(BigInt(nextBatch.start)+BigInt(1),BigInt(nextBatch.end)+BigInt(1),nextBatch.hash)).to.be.revertedWith("Wrong start"); await contracts.ferryBA.connect(captain).depart(nextBatch.start,nextBatch.end,nextBatch.hash); - wait(60*60); + wait(79201); var transactionsHash = await contracts.ferryAB.getTransactionsHash(nextBatch.start,nextBatch.end); await expect(transactionsHash).to.equal(nextBatch.hash); var batch = await contracts.ferryAB.getBatchData(nextBatch.start,nextBatch.end); @@ -167,6 +178,30 @@ describe("Fraxferry", function () { } }); + it("fees", async function () { + const [owner,user,captain,firstOfficer,crewmember] = await ethers.getSigners(); + var contracts = await setupContracts(); + var bridgeAmount = BigInt(10*1e18); + var fee_rate = BigInt(await contracts.ferryAB.FEE_RATE()); + var fee_min = BigInt(await contracts.ferryAB.FEE_MIN()); + var fee_max = BigInt(await contracts.ferryAB.FEE_MAX()); + for (var i=0;i<32;i++) { + await contracts.token0.mint(user.address,bridgeAmount); + await contracts.token0.connect(user).approve(contracts.ferryAB.address,bridgeAmount); + await contracts.ferryAB.connect(user).embarkWithRecipient(bridgeAmount,user.address); + bridgeAmount=bridgeAmount*BigInt(2); + } + wait(3601); + bridgeAmount = BigInt(10*1e18); + for (var i=0;i<32;i++) { + var batchAmount = BigInt(await contracts.ferryAB.getBatchAmount(i,i)); + var actualFee = bridgeAmount-batchAmount; + var fee = bigIntMin(bigIntMax(bridgeAmount*fee_rate/BigInt(10000),fee_min),fee_max); + expect(actualFee).to.equals(fee); + bridgeAmount=bridgeAmount*BigInt(2); + } + }); + it("jettison", async function () { const [owner,user,captain,firstOfficer,crewmember] = await ethers.getSigners(); var contracts = await setupContracts(); @@ -175,10 +210,11 @@ describe("Fraxferry", function () { await contracts.ferryAB.connect(user).embark(bridgeAmount); await contracts.ferryAB.connect(user).embark(bridgeAmount*BigInt(2)); await contracts.ferryAB.connect(user).embark(bridgeAmount*BigInt(4)); + wait(3601); var batch = await contracts.ferryAB.getBatchData(0,2); var hash = await contracts.ferryAB.getTransactionsHash(0,2); await contracts.ferryBA.connect(captain).depart(0,2,hash); - wait(60*60); + wait(79201); expect(await contracts.ferryBA.cancelled(1)).to.equal(false); await contracts.ferryBA.connect(owner).jettison(1,true); expect(await contracts.ferryBA.cancelled(1)).to.equal(true); @@ -191,8 +227,13 @@ describe("Fraxferry", function () { await contracts.ferryBA.connect(firstOfficer).disembark(batch); var userBalanceAfter = BigInt(await contracts.token1.balanceOf(user.address)); var contractBalanceAfter = BigInt(await contracts.token1.balanceOf(contracts.ferryBA.address)); - var fee = BigInt(await contracts.ferryAB.FEE()); - var expectedTransfered = bridgeAmount*BigInt(5)-fee*BigInt(2); + var fee_rate = BigInt(await contracts.ferryAB.FEE_RATE()); + var fee_min = BigInt(await contracts.ferryAB.FEE_MIN()); + var fee_max = BigInt(await contracts.ferryAB.FEE_MAX()); + var fee1 = bigIntMin(bigIntMax(bridgeAmount*fee_rate/BigInt(10000),fee_min),fee_max); + var fee2 = bigIntMin(bigIntMax(bridgeAmount*BigInt(2)*fee_rate/BigInt(10000),fee_min),fee_max); + var fee3 = bigIntMin(bigIntMax(bridgeAmount*BigInt(4)*fee_rate/BigInt(10000),fee_min),fee_max); + var expectedTransfered = bridgeAmount*BigInt(5)-fee1-fee3; expect(userBalanceAfter-userBalanceBefore).to.equal(expectedTransfered); expect(contractBalanceBefore-contractBalanceAfter).to.equal(expectedTransfered); }); @@ -206,10 +247,11 @@ describe("Fraxferry", function () { await contracts.ferryAB.connect(user).embark(bridgeAmount*BigInt(2)); await contracts.ferryAB.connect(user).embark(bridgeAmount*BigInt(4)); await contracts.ferryAB.connect(user).embark(bridgeAmount*BigInt(8)); + wait(3601); var batch = await contracts.ferryAB.getBatchData(0,2); var hash = await contracts.ferryAB.getTransactionsHash(0,2); await contracts.ferryBA.connect(captain).depart(0,2,hash); - wait(60*60); + wait(79201); await contracts.ferryBA.connect(firstOfficer).disembark(batch); await expect(contracts.ferryBA.connect(owner).jettison(0,true)).to.be.revertedWith("Transaction already executed"); await expect(contracts.ferryBA.connect(owner).jettison(1,true)).to.be.revertedWith("Transaction already executed"); @@ -230,6 +272,7 @@ describe("Fraxferry", function () { await contracts.ferryAB.connect(user).embark(bridgeAmount); var hash = await contracts.ferryAB.getTransactionsHash(0,0); await contracts.ferryAB.connect(user).embark(bridgeAmount*BigInt(2)); + wait(3601); var badHash = "0x1111111111111111111111111111111111111111111111111111111111111111"; var hash1 = await contracts.ferryAB.getTransactionsHash(0,0); var hash2 = await contracts.ferryAB.getTransactionsHash(1,1); @@ -243,7 +286,7 @@ describe("Fraxferry", function () { await expect(contracts.ferryBA.connect(user).disputeBatch(0,hash1)).to.be.revertedWith("Not crewmember"); await contracts.ferryBA.connect(crewmember).disputeBatch(0,badHash); await expect(contracts.ferryBA.connect(crewmember).disputeBatch(0,badHash)).to.be.revertedWith("Batch already disputed"); - wait(60*60); + wait(79201); await expect(contracts.ferryBA.connect(firstOfficer).disembark(batch1)).to.be.revertedWith("Paused"); await contracts.ferryBA.connect(owner).unPause(); await expect(contracts.ferryBA.connect(firstOfficer).disembark(batch1)).to.be.revertedWith("Batch disputed"); @@ -257,7 +300,7 @@ describe("Fraxferry", function () { expect(BigInt(await contracts.ferryBA.noBatches())).to.equal(BigInt(0)); await contracts.ferryBA.connect(captain).depart(0,0,hash1); - wait(60*60); + wait(79201); await contracts.ferryBA.connect(firstOfficer).disembark(batch1); }); @@ -289,6 +332,7 @@ describe("Fraxferry", function () { await contracts.ferryAB.connect(owner).unPause(); await contracts.ferryAB.connect(user).embark(bridgeAmount); + wait(3601); var hash = await contracts.ferryAB.getTransactionsHash(0,0); @@ -297,7 +341,7 @@ describe("Fraxferry", function () { await contracts.ferryBA.connect(owner).unPause(); await contracts.ferryBA.connect(captain).depart(0,0,hash); - wait(60*60); + wait(79201); await contracts.ferryBA.connect(owner).pause(); var batch = await contracts.ferryAB.getBatchData(0,0); @@ -311,25 +355,30 @@ describe("Fraxferry", function () { const [owner,user,captain,firstOfficer,crewmember,user2] = await ethers.getSigners(); var contracts = await setupContracts(); var bridgeAmount = BigInt(1000*1e18); - var fee = BigInt(await contracts.ferryAB.FEE()); + var fee_rate = BigInt(await contracts.ferryAB.FEE_RATE()); + var fee_min = BigInt(await contracts.ferryAB.FEE_MIN()); + var fee_max = BigInt(await contracts.ferryAB.FEE_MAX()); + var fee1 = bigIntMin(bigIntMax(bridgeAmount*fee_rate/BigInt(10000),fee_min),fee_max); + var fee2 = bigIntMin(bigIntMax(bridgeAmount*BigInt(2)*fee_rate/BigInt(10000),fee_min),fee_max); var reducedDecimals = BigInt(await contracts.ferryAB.REDUCED_DECIMALS()); await contracts.token0.connect(user).approve(contracts.ferryAB.address,bridgeAmount); var blockNumber1 = (await contracts.ferryAB.connect(user).embark(bridgeAmount)).blockNumber; var confirmedTime1 = (await ethers.provider.getBlock(blockNumber1)).timestamp; - wait(60); + wait(3601); await contracts.token0.connect(user2).approve(contracts.ferryAB.address,bridgeAmount*BigInt(2)); var blockNumber2 = (await contracts.ferryAB.connect(user2).embark(bridgeAmount*BigInt(2))).blockNumber; var confirmedTime2 = (await ethers.provider.getBlock(blockNumber2)).timestamp; + wait(3601); var batch = await contracts.ferryAB.getBatchData(0,1); expect(batch.startTransactionNo).to.be.equal(0); expect(batch.transactions.length).to.be.equal(2); expect(batch.transactions[0].user).to.be.equal(user.address); - expect(BigInt(batch.transactions[0].amount)*reducedDecimals).to.be.equal(bridgeAmount-fee); + expect(BigInt(batch.transactions[0].amount)*reducedDecimals).to.be.equal(bridgeAmount-fee1); expect(batch.transactions[0].timestamp).to.be.equal(confirmedTime1); expect(batch.transactions[1].user).to.be.equal(user2.address); - expect(BigInt(batch.transactions[1].amount)*reducedDecimals).to.be.equal(bridgeAmount*BigInt(2)-fee); + expect(BigInt(batch.transactions[1].amount)*reducedDecimals).to.be.equal(bridgeAmount*BigInt(2)-fee2); expect(batch.transactions[1].timestamp).to.be.equal(confirmedTime2); - expect(await contracts.ferryAB.getBatchAmount(0,1)).to.be.equals(bridgeAmount*BigInt(3)-fee*BigInt(2)); + expect(await contracts.ferryAB.getBatchAmount(0,1)).to.be.equals(bridgeAmount*BigInt(3)-fee1-fee2); }); it("getNextBatch", async function () { @@ -366,8 +415,11 @@ describe("Fraxferry", function () { it("getTransactionsHash", async function () { const [owner,user,captain,firstOfficer,crewmember,user2] = await ethers.getSigners(); var contracts = await setupContracts(); - var fee = BigInt(await contracts.ferryAB.FEE()); - var bridgeAmount = BigInt(5*1e10)+fee; + + var fee_rate = BigInt(await contracts.ferryAB.FEE_RATE()); + var fee_min = BigInt(await contracts.ferryAB.FEE_MIN()); + var fee_max = BigInt(await contracts.ferryAB.FEE_MAX()); + var bridgeAmount = BigInt(5*1e10)+fee_min; await contracts.token0.connect(user).approve(contracts.ferryAB.address,bridgeAmount); await contracts.ferryAB.connect(user).embark(bridgeAmount); await contracts.token0.connect(user2).approve(contracts.ferryAB.address,bridgeAmount*BigInt(2)); @@ -445,15 +497,21 @@ describe("Fraxferry", function () { var contracts = await setupContracts(); // setFee - var newFee = BigInt(2e18); - await expect(contracts.ferryAB.connect(user).setFee(newFee)).to.be.revertedWith("Not owner"); - await expect(contracts.ferryAB.connect(captain).setFee(newFee)).to.be.revertedWith("Not owner"); - await expect(contracts.ferryAB.connect(firstOfficer).setFee(newFee)).to.be.revertedWith("Not owner"); - await expect(contracts.ferryAB.connect(crewmember).setFee(newFee)).to.be.revertedWith("Not owner"); - - expect(await contracts.ferryAB.FEE()).to.not.equals(newFee); - await contracts.ferryAB.connect(owner).setFee(newFee); - expect(await contracts.ferryAB.FEE()).to.equals(newFee); + var new_fee_rate = BigInt(50); + var new_fee_min = BigInt(2e18); + var new_fee_max = BigInt(10e18); + await expect(contracts.ferryAB.connect(user).setFee(new_fee_rate,new_fee_min,new_fee_max)).to.be.revertedWith("Not owner"); + await expect(contracts.ferryAB.connect(captain).setFee(new_fee_rate,new_fee_min,new_fee_max)).to.be.revertedWith("Not owner"); + await expect(contracts.ferryAB.connect(firstOfficer).setFee(new_fee_rate,new_fee_min,new_fee_max)).to.be.revertedWith("Not owner"); + await expect(contracts.ferryAB.connect(crewmember).setFee(new_fee_rate,new_fee_min,new_fee_max)).to.be.revertedWith("Not owner"); + + expect(await contracts.ferryAB.FEE_RATE()).to.not.equals(new_fee_rate); + expect(await contracts.ferryAB.FEE_MIN()).to.not.equals(new_fee_min); + expect(await contracts.ferryAB.FEE_MAX()).to.not.equals(new_fee_max); + await contracts.ferryAB.connect(owner).setFee(new_fee_rate,new_fee_min,new_fee_max); + expect(await contracts.ferryAB.FEE_RATE()).to.equals(new_fee_rate); + expect(await contracts.ferryAB.FEE_MIN()).to.equals(new_fee_min); + expect(await contracts.ferryAB.FEE_MAX()).to.equals(new_fee_max); //setMinWaitPeriods var newWaitPeriodsAdd = BigInt(120*60); @@ -504,10 +562,11 @@ describe("Fraxferry", function () { }); for (var i=0;ib)return a; + else return b +} + async function setupContracts() { const [owner,user,captain,firstOfficer,crewmember,user2] = await ethers.getSigners(); diff --git a/src/hardhat/test/veFPIS-Tests.js b/src/hardhat/test/veFPIS-Tests.js index a4aea4e5..7bddad26 100644 --- a/src/hardhat/test/veFPIS-Tests.js +++ b/src/hardhat/test/veFPIS-Tests.js @@ -1622,4 +1622,4 @@ contract('veFPIS Tests', async (accounts) => { await veFPIS_instance.withdraw({ from: STAKING_OWNER }) }); -}); +}); \ No newline at end of file diff --git a/src/types/constants.ts b/src/types/constants.ts old mode 100755 new mode 100644 index 225dfc0e..b5fa11b1 --- a/src/types/constants.ts +++ b/src/types/constants.ts @@ -2265,26 +2265,35 @@ export const CONTRACT_ADDRESSES = { fraxferry: { dummy_tkn: "", // for testing fraxferry_v1__ethereum_arbitrum__FRAX__ETH_SIDE: "0x85c5f05Ae4CB68190C695a22b292C3bA90696128", - fraxferry_v1__ethereum_arbitrum__frxETH__ETH_SIDE: "0x505603e2440b44C1602b44D0Eb8385399b3F7bab", - fraxferry_v1__ethereum_arbitrum__sfrxETH__ETH_SIDE: "0x8afd5082E0C24dEcEA39A9eFb14e4ACF4373D7D6", + fraxferry_v2__ethereum_arbitrum__FXS__ETH_SIDE: "0x4b8792aF00eaE944484bF572bc33029B2184a50C", + fraxferry_v2__ethereum_arbitrum__frxETH__ETH_SIDE: "0x505603e2440b44C1602b44D0Eb8385399b3F7bab", + fraxferry_v2__ethereum_arbitrum__sfrxETH__ETH_SIDE: "0x8afd5082E0C24dEcEA39A9eFb14e4ACF4373D7D6", fraxferry_v1__ethereum_aurora__FRAX__ETH_SIDE: "0x6ac96F65156281a9383455D704b58A74ea9C9eC4", fraxferry_v1__ethereum_avalanche__FRAX__ETH_SIDE: "0xA381d58e96eC3818c825E1fb264099448945CF8b", + fraxferry_v2__ethereum_avalanche__FXS__ETH_SIDE: "0x9Ab224996D25bfDCB91d838F7f1902698Ac0a742", fraxferry_v1__ethereum_boba__FRAX__ETH_SIDE: "0x3eF1d856EA62A2292B8690855042095a7aC48B4b", fraxferry_v1__ethereum_bsc__FRAX__ETH_SIDE: "0xDAe210BfB0cF8c81EDB4b459e2e0bA14D553e2D9", - fraxferry_v1__ethereum_bsc__frxETH__ETH_SIDE: "0xce4DbAF3fa72C962Ee1F371694109fc2a80B03f5", - fraxferry_v1__ethereum_bsc__sfrxETH__ETH_SIDE: "0x621D0e62f26314387f338A2509aFA3Ae3414661A", + fraxferry_v2__ethereum_bsc__FXS__ETH_SIDE: "0x9B62402Eb9A755677dEbdaE3639CB531c0Af0E5d", + fraxferry_v2__ethereum_bsc__frxETH__ETH_SIDE: "0xce4DbAF3fa72C962Ee1F371694109fc2a80B03f5", + fraxferry_v2__ethereum_bsc__sfrxETH__ETH_SIDE: "0x621D0e62f26314387f338A2509aFA3Ae3414661A", fraxferry_v1__ethereum_evmos__FRAX__ETH_SIDE: "0x2d2261f970F605C813f160E8BAEd455E9004A842", fraxferry_v1__ethereum_fantom__FRAX__ETH_SIDE: "0xfB788F9E20ef426a32A67986654750172A6c1788", + fraxferry_v2__ethereum_fantom__FXS__ETH_SIDE: "0x1313d143BE1ac25aCACEFF39Bf31877bccDb9622", + fraxferry_v2__ethereum_fantom__frxETH__ETH_SIDE: "0xaF4305d05e9B08b1D17894ce1ACE8235528f7EdE", + fraxferry_v2__ethereum_fantom__sfrxETH__ETH_SIDE: "0xB6b0290A39E2F896bBd8fC19cf17FE393e993dE4", fraxferry_v1__ethereum_moonbeam__FRAX__ETH_SIDE: "0xF1E1deA8F1053FD9C5F47f72F1f03977E17aF242", - fraxferry_v1__ethereum_moonbeam__frxETH__ETH_SIDE: "0x228567c10b7533C88057c10dDeA6349360F122c5", - fraxferry_v1__ethereum_moonbeam__sfrxETH__ETH_SIDE: "0xbc3A2bF4FA20bE2056DCE5BFB168970BA657F187", + fraxferry_v2__ethereum_moonbeam__FXS__ETH_SIDE: "0x2De1354c98880889643c4cA8B06FA2Fb8Fc1Fd7A", + fraxferry_v2__ethereum_moonbeam__frxETH__ETH_SIDE: "0x228567c10b7533C88057c10dDeA6349360F122c5", + fraxferry_v2__ethereum_moonbeam__sfrxETH__ETH_SIDE: "0xbc3A2bF4FA20bE2056DCE5BFB168970BA657F187", fraxferry_v1__ethereum_moonriver__FRAX__ETH_SIDE: "0x15ADa72A3B52A88E25DdD2CC2bA1120234e34bb0", fraxferry_v1__ethereum_optimism__FRAX__ETH_SIDE: "0x06Fa869caa1160754C6a0B744Da6454c5EA325d4", - fraxferry_v1__ethereum_optimism__frxETH__ETH_SIDE: "0x2F08F4645d2fA1fB12D2db8531c0c2EA0268BdE2", - fraxferry_v1__ethereum_optimism__sfrxETH__ETH_SIDE: "0x04ba20D2Cc47C63bce1166C2864F0241e4D0a0CC", + fraxferry_v2__ethereum_optimism__FXS__ETH_SIDE: "0x6650D5183C4Cd294a81B1F724c365b0c42f8270a", + fraxferry_v2__ethereum_optimism__frxETH__ETH_SIDE: "0x2F08F4645d2fA1fB12D2db8531c0c2EA0268BdE2", + fraxferry_v2__ethereum_optimism__sfrxETH__ETH_SIDE: "0x04ba20D2Cc47C63bce1166C2864F0241e4D0a0CC", fraxferry_v1__ethereum_polygon__FRAX__ETH_SIDE: "0x43959A388603DCb6B02Ca084A55d4c7f3b442c57", - fraxferry_v1__ethereum_polygon__frxETH__ETH_SIDE: "0x98f5E4b7D9eDF57A6ED41b334bD40B2eAa6B6e26", - fraxferry_v1__ethereum_polygon__sfrxETH__ETH_SIDE: "0x91Ff54EffF7564BA3884A91d0E293502D8E6fF90", + fraxferry_v2__ethereum_polygon__FXS__ETH_SIDE: "0xCa026e80F1E9e44da7ce3eD6aC2E9630260B9276", + fraxferry_v2__ethereum_polygon__frxETH__ETH_SIDE: "0x98f5E4b7D9eDF57A6ED41b334bD40B2eAa6B6e26", + fraxferry_v2__ethereum_polygon__sfrxETH__ETH_SIDE: "0x91Ff54EffF7564BA3884A91d0E293502D8E6fF90", captain: "0xBB437059584e30598b3AF0154472E47E6e2a45B9", first_officer: "0xBB437059584e30598b3AF0154472E47E6e2a45B9", crewmember: "0xBB437059584e30598b3AF0154472E47E6e2a45B9", @@ -2853,8 +2862,9 @@ export const CONTRACT_ADDRESSES = { fraxferry: { dummy_tkn: "0x57F0806Ad6E0264B3368413e8f3F1FbC5d1f9ff8", // for testing fraxferry_v1__ethereum_arbitrum__FRAX__ARBI_SIDE: "0x5a9BEf8CEa603aAc78a523fb245C1A9264D50706", - fraxferry_v1__ethereum_arbitrum__frxETH__ARBI_SIDE: "0x6c5Ae8dCaD1E101FB108a89954D7dC0B8991445b", - fraxferry_v1__ethereum_arbitrum__sfrxETH__ARBI_SIDE: "0xf1C16E1c01e62716884ef947063e9C7D44eC287F", + fraxferry_v2__ethereum_arbitrum__FXS__ARBI_SIDE: "0x078Dd77De4e0f480D7442495d55707cE071B4B09", + fraxferry_v2__ethereum_arbitrum__frxETH__ARBI_SIDE: "0x6c5Ae8dCaD1E101FB108a89954D7dC0B8991445b", + fraxferry_v2__ethereum_arbitrum__sfrxETH__ARBI_SIDE: "0xf1C16E1c01e62716884ef947063e9C7D44eC287F", ferry_to_polygon: "0xe57314D4405289FfC91306E4574C28b7394c4822", captain: "0xBB437059584e30598b3AF0154472E47E6e2a45B9", first_officer: "0xBB437059584e30598b3AF0154472E47E6e2a45B9", @@ -3036,6 +3046,7 @@ export const CONTRACT_ADDRESSES = { fraxferry: { dummy_tkn: "", // for testing fraxferry_v1__ethereum_avalanche__FRAX__AVAX_SIDE: "0x5dfF474Cea8A1FA929AC9A3cE2550376aF11d2A8", + fraxferry_v2__ethereum_avalanche__FXS__AVAX_SIDE: "0xC311b600bc926a3a8aC39945471427DFd9196930", captain: "0xBB437059584e30598b3AF0154472E47E6e2a45B9", first_officer: "0xBB437059584e30598b3AF0154472E47E6e2a45B9", crewmember: "0xBB437059584e30598b3AF0154472E47E6e2a45B9", @@ -3237,8 +3248,9 @@ export const CONTRACT_ADDRESSES = { fraxferry: { dummy_tkn: "", // for testing fraxferry_v1__ethereum_bsc__FRAX__BSC_SIDE: "0x10Ef54F944639764d2d5Efa272262f06cfaF09AE", - fraxferry_v1__ethereum_bsc__frxETH__BSC_SIDE: "0xB7C974530e59017DF7FA06b1EBD9e8a1E9aceC29", - fraxferry_v1__ethereum_bsc__sfrxETH__BSC_SIDE: "0x612015939f70C87E2041cc5daD909101c1A2383F", + fraxferry_v2__ethereum_bsc__FXS__BSC_SIDE: "0x5CD3d6465cd21b645F15175840f4659228C6195c", + fraxferry_v2__ethereum_bsc__frxETH__BSC_SIDE: "0xB7C974530e59017DF7FA06b1EBD9e8a1E9aceC29", + fraxferry_v2__ethereum_bsc__sfrxETH__BSC_SIDE: "0x612015939f70C87E2041cc5daD909101c1A2383F", captain: "0xBB437059584e30598b3AF0154472E47E6e2a45B9", first_officer: "0xBB437059584e30598b3AF0154472E47E6e2a45B9", crewmember: "0xBB437059584e30598b3AF0154472E47E6e2a45B9", @@ -3387,6 +3399,8 @@ export const CONTRACT_ADDRESSES = { FXS: "0x7d016eec9c25232b01F23EF992D98ca97fc2AF5a", FPI: "0xAb069E73f1AA50c37A7171D16dCc3614c705101B", // FOR TESTING FPIS: "0x3bb6B72dC07D7bFDa981F70C631482e9517CF6EE", // FOR TESTING + frxETH: "0x9E73F99EE061C8807F69f9c6CCc44ea3d8c373ee", + sfrxETH: "0xb90CCD563918fF900928dc529aA01046795ccb4A" }, bridge_tokens: { anyFRAX_V5: "0xBDba76fA2659c33ffCc2B0bc134c3A2c8a3Aa94d", // Router anyFRAX @@ -3415,6 +3429,9 @@ export const CONTRACT_ADDRESSES = { fraxferry: { dummy_tkn: "", // for testing fraxferry_v1__ethereum_fantom__FRAX__FTM_SIDE: "0x088Be716eCA24b143fCC9ed06C6ae9977A469CCE", + fraxferry_v2__ethereum_fantom__FXS__FTM_SIDE: "0x9b75031D46CdEe779B36F7F2f1857fd987C6C98c", + fraxferry_v2__ethereum_fantom__frxETH__FTM_SIDE: "0x12b6a8178C67B2835E280E1Ed709F64446cddb08", + fraxferry_v2__ethereum_fantom__sfrxETH__FTM_SIDE: "0x71e1FEeAA17b6557c5FaD60101ca12F81d03838C", captain: "0xBB437059584e30598b3AF0154472E47E6e2a45B9", first_officer: "0xBB437059584e30598b3AF0154472E47E6e2a45B9", crewmember: "0xBB437059584e30598b3AF0154472E47E6e2a45B9", @@ -3677,8 +3694,9 @@ export const CONTRACT_ADDRESSES = { fraxferry: { dummy_tkn: "", // for testing fraxferry_v1__ethereum_moonbeam__FRAX__MNBM_SIDE: "0xd545Fd6080db07eDdcC1F57dC28a53D930837A8d", - fraxferry_v1__ethereum_moonbeam__frxETH__MNBM_SIDE: "0x7c7Fd7412F5E79f4917163F78d5Ece5E2e923504", - fraxferry_v1__ethereum_moonbeam__sfrxETH__MNBM_SIDE: "0x78348E58582d0D1789da1621B79Fc62012485CAe", + fraxferry_v2__ethereum_moonbeam__FXS__MNBM_SIDE: "0x1E87990678f640BFfe5A118c331fEc296DDC8d89", + fraxferry_v2__ethereum_moonbeam__frxETH__MNBM_SIDE: "0x7c7Fd7412F5E79f4917163F78d5Ece5E2e923504", + fraxferry_v2__ethereum_moonbeam__sfrxETH__MNBM_SIDE: "0x78348E58582d0D1789da1621B79Fc62012485CAe", captain: "0xBB437059584e30598b3AF0154472E47E6e2a45B9", first_officer: "0xBB437059584e30598b3AF0154472E47E6e2a45B9", crewmember: "0xBB437059584e30598b3AF0154472E47E6e2a45B9", @@ -3858,8 +3876,9 @@ export const CONTRACT_ADDRESSES = { fraxferry: { dummy_tkn: "", // for testing fraxferry_v1__ethereum_optimism__FRAX__OPTI_SIDE: "0xb781FCaC4B8eF06891F9baD7dB9C178B1cE67967", - fraxferry_v1__ethereum_optimism__frxETH__OPTI_SIDE: "0xA4EFC2d768C9b9b0f97DD91a1555B345f69b39C0", - fraxferry_v1__ethereum_optimism__sfrxETH__OPTI_SIDE: "0x59b99CF08C01a6ADa0e0D819520719CA41B35c7C", + fraxferry_v2__ethereum_optimism__FXS__OPTI_SIDE: "0xdF6B3b56B1668dA507Db58C64b7153756cfE8e67", + fraxferry_v2__ethereum_optimism__frxETH__OPTI_SIDE: "0xA4EFC2d768C9b9b0f97DD91a1555B345f69b39C0", + fraxferry_v2__ethereum_optimism__sfrxETH__OPTI_SIDE: "0x59b99CF08C01a6ADa0e0D819520719CA41B35c7C", captain: "0xBB437059584e30598b3AF0154472E47E6e2a45B9", first_officer: "0xBB437059584e30598b3AF0154472E47E6e2a45B9", crewmember: "0xBB437059584e30598b3AF0154472E47E6e2a45B9", @@ -3962,8 +3981,9 @@ export const CONTRACT_ADDRESSES = { dummy_tkn: "0xC6525aC8fc37814Fd68216F1ea690b3dC2249e89", // for testing ferry_to_arbitrum: "0xA621dC655fFBD0dB9cb2564529324E5750f2A4F0", fraxferry_v1__ethereum_polygon__FRAX__POLY_SIDE: "0x6f7F18C15B97dC9Fac48Ae7F986989F97D25dbc7", - fraxferry_v1__ethereum_polygon__frxETH__POLY_SIDE: "0x2760a93993BaA3BC4d7C209db000d4685bdAD6B1", - fraxferry_v1__ethereum_polygon__sfrxETH__POLY_SIDE: "0x6728b24B4a4C42cabEe14a2BdFDc51271aa3Ae63", + fraxferry_v2__ethereum_polygon__FXS__POLY_SIDE: "0x6f71Ea0e9679389854010eE48a7D237cB430DBA4", + fraxferry_v2__ethereum_polygon__frxETH__POLY_SIDE: "0x2760a93993BaA3BC4d7C209db000d4685bdAD6B1", + fraxferry_v2__ethereum_polygon__sfrxETH__POLY_SIDE: "0x6728b24B4a4C42cabEe14a2BdFDc51271aa3Ae63", captain: "0xBB437059584e30598b3AF0154472E47E6e2a45B9", first_officer: "0xBB437059584e30598b3AF0154472E47E6e2a45B9", crewmember: "0xBB437059584e30598b3AF0154472E47E6e2a45B9", From 19a3f6879d6a31e67fe4d2ebac98dc59cab45ae0 Mon Sep 17 00:00:00 2001 From: Travis Moore <33413876+FortisFortuna@users.noreply.github.com> Date: Tue, 24 Jan 2023 14:50:17 -0800 Subject: [PATCH 07/37] Update FraxUnifiedFarm_ERC20_V2.sol (#186) --- src/hardhat/contracts/Staking/FraxUnifiedFarm_ERC20_V2.sol | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/hardhat/contracts/Staking/FraxUnifiedFarm_ERC20_V2.sol b/src/hardhat/contracts/Staking/FraxUnifiedFarm_ERC20_V2.sol index 7cd47f59..4913bf58 100644 --- a/src/hardhat/contracts/Staking/FraxUnifiedFarm_ERC20_V2.sol +++ b/src/hardhat/contracts/Staking/FraxUnifiedFarm_ERC20_V2.sol @@ -831,4 +831,4 @@ contract FraxUnifiedFarm_ERC20_V2 is FraxUnifiedFarmTemplate_V2 { event ApprovalForAll(address indexed owner, address indexed spender, bool approved); event TransferLockedByIndex(address indexed sender_address, address indexed destination_address, uint256 amount_transferred, uint256 source_stake_index, uint256 destination_stake_index); -} \ No newline at end of file +} From bdc4480e6a61b85251608208d04f8b469a99d2c1 Mon Sep 17 00:00:00 2001 From: Travis Moore <33413876+FortisFortuna@users.noreply.github.com> Date: Tue, 24 Jan 2023 14:55:25 -0800 Subject: [PATCH 08/37] From ZrowGz --- compiler_config.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/compiler_config.json b/compiler_config.json index 34cd7284..b3d073af 100644 --- a/compiler_config.json +++ b/compiler_config.json @@ -3,7 +3,7 @@ "settings": { "optimizer": { "enabled": true, - "runs": 200000, + "runs": 100000, "details": { "orderLiterals": true, "deduplicate": true, @@ -22,6 +22,6 @@ "*": ["abi", "metadata", "devdoc", "userdoc", "storageLayout", "evm.legacyAssembly", "evm.bytecode", "evm.deployedBytecode", "evm.methodIdentifiers", "evm.gasEstimates", "evm.assembly"] } }, - "evmVersion": "byzantium" + "evmVersion": "london" } } From 189e5362d6644ec3d1d2f3cd4753c5a5c53c5a50 Mon Sep 17 00:00:00 2001 From: Travis Moore <33413876+FortisFortuna@users.noreply.github.com> Date: Tue, 24 Jan 2023 14:56:54 -0800 Subject: [PATCH 09/37] From ZrowGz --- foundry.toml | 32 ++++++++++++++++++++++++++++++++ 1 file changed, 32 insertions(+) diff --git a/foundry.toml b/foundry.toml index a6bfab0c..bf914389 100644 --- a/foundry.toml +++ b/foundry.toml @@ -4,3 +4,35 @@ out = 'out' libs = ['node_modules', 'lib'] test = 'src/foundry/test/' cache_path = 'forge-cache' + +# See more config options https://github.com/foundry-rs/foundry/tree/master/config + +solc_version = "0.8.17" +gas_reports = ["*"] + +# settings for coverage reports +via_ir = true +optimizer = true #testing this out - was false +optimizer_runs = 100_000 + + +[profile.default.optimizer_details] +jumpdestRemover = true +orderLiterals = true +deduplicate = true + +yul = true +constantOptimizer = true +stackAllocation = true + +# Have `cse = true` commented out for faster testing compilation, +### but UNCOMMENT it for DEPLOYMENT! ### +cse = true + + +[profile.default.optimizer_details.yulDetails] +stackAllocation = true + +# Have `optimizerSteps = ""` uncommented for faster testing compilation, +### but COMMENT IT out for DEPLOYMENT!### +# optimizerSteps = "" From f37eba4a90712a30115580ed2453809ba1e46b6a Mon Sep 17 00:00:00 2001 From: ZrowGz <80988768+ZrowGz@users.noreply.github.com> Date: Tue, 24 Jan 2023 15:04:07 -0800 Subject: [PATCH 10/37] logic checks (#183) * Travis (#172) * farm * compiling * farm 2 * remove unneeded error * segregate changes into V2 for all files altered from original, revert pragma updates on otherwise unchanged files * comment removed * corrected testing errors * move get receiver stake * resolved errors * info * allowance logic * allowanace & approval logic * adds comments & some logic fixes from testing * include comments for allowance, make isApproved external & remove msg.sender from that * convert functions from public to external where feasible to reduce bytecode * file matching * file sync * file sync * file sync * file sync * file sync * enhanced foundry compiler settings * alter a getter * alter a getter * missed fixes from testing * missed fixes from testing * moved getReceiverLockedStake back inside the main if checks for receiver - causes it to fail instead of create a new locked stake Co-authored-by: Travis Moore <33413876+FortisFortuna@users.noreply.github.com> --- README_TESTS.md | 1 - .../Staking/FraxUnifiedFarmTemplate_V2.sol | 4 +- .../Staking/FraxUnifiedFarm_ERC20_V2.sol | 63 ++++++++++--------- ...FraxUnifiedFarm_ERC20_Convex_frxETH_V2.sol | 3 - .../contracts/Utils/ReentrancyGuardV2.sol | 0 .../contracts/mocks/MockConvexRegistry.sol | 6 -- .../contracts/mocks/MockConvexVault.sol | 6 -- 7 files changed, 36 insertions(+), 47 deletions(-) mode change 100644 => 100755 src/hardhat/contracts/Utils/ReentrancyGuardV2.sol delete mode 100644 src/hardhat/contracts/mocks/MockConvexRegistry.sol delete mode 100644 src/hardhat/contracts/mocks/MockConvexVault.sol diff --git a/README_TESTS.md b/README_TESTS.md index ab6137ec..dcedf969 100755 --- a/README_TESTS.md +++ b/README_TESTS.md @@ -115,4 +115,3 @@ npx hardhat test ./test/__OPTIMISM/CrossChainBridgeBacker_OPTI_Celer-Tests.js POLYGON npx hardhat test ./test/__POLYGON/CrossChainBridgeBacker_POLY_MaticBridge-Tests.js npx hardhat test ./test/__POLYGON/SushiSwapLiquidityAMO_POLY-Tests.js - diff --git a/src/hardhat/contracts/Staking/FraxUnifiedFarmTemplate_V2.sol b/src/hardhat/contracts/Staking/FraxUnifiedFarmTemplate_V2.sol index 9b258645..72a5d67d 100755 --- a/src/hardhat/contracts/Staking/FraxUnifiedFarmTemplate_V2.sol +++ b/src/hardhat/contracts/Staking/FraxUnifiedFarmTemplate_V2.sol @@ -81,7 +81,7 @@ contract FraxUnifiedFarmTemplate_V2 is OwnedV2, ReentrancyGuardV2 { // Lock time and multiplier settings uint256 public lock_max_multiplier = 2e18; // E18. 1x = e18 - uint256 public lock_time_for_max_multiplier = 1 * 1095 * 86400; // 3 years + uint256 public lock_time_for_max_multiplier = 1 * 365 * 86400; // 1 years // uint256 public lock_time_for_max_multiplier = 2 * 86400; // 2 days uint256 public lock_time_min = 594000; // 6.875 * 86400 (~7 day) @@ -425,7 +425,7 @@ contract FraxUnifiedFarmTemplate_V2 is OwnedV2, ReentrancyGuardV2 { // Staker can allow a veFXS proxy (the proxy will have to toggle them first) // CALLED BY STAKER function stakerSetVeFXSProxy(address proxy_address) external { - if(!valid_vefxs_proxies[msg.sender]) revert InvalidProxy(); + if(!valid_vefxs_proxies[proxy_address]) revert InvalidProxy(); if(!proxy_allowed_stakers[proxy_address][msg.sender]) revert ProxyHasNotApprovedYou(); // Corner case sanity check to make sure LP isn't double counted diff --git a/src/hardhat/contracts/Staking/FraxUnifiedFarm_ERC20_V2.sol b/src/hardhat/contracts/Staking/FraxUnifiedFarm_ERC20_V2.sol index 4913bf58..4ce96bb5 100644 --- a/src/hardhat/contracts/Staking/FraxUnifiedFarm_ERC20_V2.sol +++ b/src/hardhat/contracts/Staking/FraxUnifiedFarm_ERC20_V2.sol @@ -386,8 +386,13 @@ contract FraxUnifiedFarm_ERC20_V2 is FraxUnifiedFarmTemplate_V2 { return(lockedStakes[staker][locked_stake_index]); } - function getLockedStakeLiquidity(address staker, uint256 locked_stake_index) external view returns (uint256) { - return(lockedStakes[staker][locked_stake_index].liquidity); + + /// @notice Returns the liquidity and ending timestamp of a locked stake + function getStakeLiquidityAndEnding(address staker, uint256 locked_stake_index) external view returns (uint256,uint256) { + return( + lockedStakes[staker][locked_stake_index].liquidity, + lockedStakes[staker][locked_stake_index].ending_timestamp + ); } /* =============== MUTATIVE FUNCTIONS =============== */ @@ -751,35 +756,36 @@ contract FraxUnifiedFarm_ERC20_V2 is FraxUnifiedFarmTemplate_V2 { lockedStakes[addrs[0]][sender_lock_index].liquidity -= transfer_amount; } - /** if use_receiver_lock_index is true & - * & the index is valid - * & has liquidity - * & is still locked, update the stake & ending timestamp (longer of the two) - * else, create a new lockedStake - * note using nested if checks to reduce gas costs slightly - */ - if (use_receiver_lock_index == true) { - // Get the stake and its index - LockedStake memory receiverStake = getLockedStake(addrs[1], receiver_lock_index); - - if (receiver_lock_index < lockedStakes[addrs[1]].length ) { - if (receiverStake.liquidity > 0) { - if (receiverStake.ending_timestamp > block.timestamp) { - // Update the existing staker's stake liquidity - lockedStakes[addrs[1]][receiver_lock_index].liquidity += transfer_amount; - // check & update ending timestamp to whichever is farthest out - if (receiverStake.ending_timestamp < senderStake.ending_timestamp) { - // update the lock expiration to the later timestamp - lockedStakes[addrs[1]][receiver_lock_index].ending_timestamp = senderStake.ending_timestamp; - // update the lock multiplier since we are effectively extending the lock - lockedStakes[addrs[1]][receiver_lock_index].lock_multiplier = lockMultiplier( - senderStake.ending_timestamp - block.timestamp - ); +{ + /** if use_receiver_lock_index is true & + * & the index is valid + * & has liquidity + * & is still locked, update the stake & ending timestamp (longer of the two) + * else, create a new lockedStake + * note using nested if checks to reduce gas costs slightly + */ + if (use_receiver_lock_index == true) { + // Get the stake and its index + LockedStake memory receiverStake = getLockedStake(addrs[1], receiver_lock_index); + + if (receiver_lock_index < lockedStakes[addrs[1]].length) { + if (receiverStake.liquidity > 0) { + if (receiverStake.ending_timestamp > block.timestamp) { + // Update the existing staker's stake liquidity + lockedStakes[addrs[1]][receiver_lock_index].liquidity += transfer_amount; + // check & update ending timestamp to whichever is farthest out + if (receiverStake.ending_timestamp < senderStake.ending_timestamp) { + // update the lock expiration to the later timestamp + lockedStakes[addrs[1]][receiver_lock_index].ending_timestamp = senderStake.ending_timestamp; + // update the lock multiplier since we are effectively extending the lock + lockedStakes[addrs[1]][receiver_lock_index].lock_multiplier = lockMultiplier( + senderStake.ending_timestamp - block.timestamp + ); + } } } } - } - } else { + } else { // create the new lockedStake _createNewStake( addrs[1], @@ -814,7 +820,6 @@ contract FraxUnifiedFarm_ERC20_V2 is FraxUnifiedFarmTemplate_V2 { ) != ILockReceiverV2.onLockReceived.selector) revert InvalidReceiver(); //0xc42d8b95) revert InvalidReceiver(); return (sender_lock_index, receiver_lock_index); - } /* ========== RESTRICTED FUNCTIONS - Owner or timelock only ========== */ diff --git a/src/hardhat/contracts/Staking/Variants/FraxUnifiedFarm_ERC20_Convex_frxETH_V2.sol b/src/hardhat/contracts/Staking/Variants/FraxUnifiedFarm_ERC20_Convex_frxETH_V2.sol index 8e324d65..1b69c5c3 100755 --- a/src/hardhat/contracts/Staking/Variants/FraxUnifiedFarm_ERC20_Convex_frxETH_V2.sol +++ b/src/hardhat/contracts/Staking/Variants/FraxUnifiedFarm_ERC20_Convex_frxETH_V2.sol @@ -13,9 +13,6 @@ import "../../Oracle/AggregatorV3Interface.sol"; contract FraxUnifiedFarm_ERC20_Convex_frxETH_V2 is FraxUnifiedFarm_ERC20_V2 { AggregatorV3Interface internal priceFeedETHUSD = AggregatorV3Interface(0x5f4eC3Df9cbd43714FE2740f5E3616155c5b8419); - /// Added this as an override to the I2Pool version in FraxFarmERC20 to fix compiler warnings - // ICurvefrxETHETHPool public immutable curvePool; - constructor ( address _owner, address[] memory _rewardTokens, diff --git a/src/hardhat/contracts/Utils/ReentrancyGuardV2.sol b/src/hardhat/contracts/Utils/ReentrancyGuardV2.sol old mode 100644 new mode 100755 diff --git a/src/hardhat/contracts/mocks/MockConvexRegistry.sol b/src/hardhat/contracts/mocks/MockConvexRegistry.sol deleted file mode 100644 index 4137b123..00000000 --- a/src/hardhat/contracts/mocks/MockConvexRegistry.sol +++ /dev/null @@ -1,6 +0,0 @@ -// SPDX-License-Identifier: MIT -pragma solidity ^0.8.10; - -contract MockConvexRegistry { - // -} \ No newline at end of file diff --git a/src/hardhat/contracts/mocks/MockConvexVault.sol b/src/hardhat/contracts/mocks/MockConvexVault.sol deleted file mode 100644 index 6a0f7b66..00000000 --- a/src/hardhat/contracts/mocks/MockConvexVault.sol +++ /dev/null @@ -1,6 +0,0 @@ -// SPDX-License-Identifier: MIT -pragma solidity ^0.8.10; - -contract MockConvexVault { - // -} \ No newline at end of file From 5eecfc302dd36c893defa8bf81a9953a51704ef8 Mon Sep 17 00:00:00 2001 From: ZrowGz <80988768+ZrowGz@users.noreply.github.com> Date: Thu, 26 Jan 2023 08:20:22 -0800 Subject: [PATCH 11/37] Add address code length check to onLockRecieved (#190) Didn't check whether the receiver address is a contract or not, causing it to fail for instances of transfer to EOA. --- .../Staking/FraxUnifiedFarm_ERC20_V2.sol | 21 ++++++++++++------- 1 file changed, 14 insertions(+), 7 deletions(-) diff --git a/src/hardhat/contracts/Staking/FraxUnifiedFarm_ERC20_V2.sol b/src/hardhat/contracts/Staking/FraxUnifiedFarm_ERC20_V2.sol index 4ce96bb5..37e48b6d 100644 --- a/src/hardhat/contracts/Staking/FraxUnifiedFarm_ERC20_V2.sol +++ b/src/hardhat/contracts/Staking/FraxUnifiedFarm_ERC20_V2.sol @@ -811,14 +811,21 @@ contract FraxUnifiedFarm_ERC20_V2 is FraxUnifiedFarmTemplate_V2 { receiver_lock_index ); - // call the receiver with the destination lockedStake to verify receiving is ok - if (ILockReceiverV2(addrs[1]).onLockReceived( - addrs[0], - addrs[1], - receiver_lock_index, - "" - ) != ILockReceiverV2.onLockReceived.selector) revert InvalidReceiver(); //0xc42d8b95) revert InvalidReceiver(); + // call the receiver with the destination lockedStake to verify receiving is ok + // if (ILockReceiverV2(addrs[1]).onLockReceived( + // addrs[0], + // addrs[1], + // receiver_lock_index, + // "" + // ) != ILockReceiverV2.onLockReceived.selector) revert InvalidReceiver(); //0xc42d8b95) revert InvalidReceiver(); + if (addrs[1].code.length > 0) { + require(ILockReceiverV2(addrs[1]).beforeLockTransfer(addrs[0], addrs[1], receiver_lock_index, "") + == + ILockReceiverV2.beforeLockTransfer.selector + ); + } + return (sender_lock_index, receiver_lock_index); } From 84cd6d222766c6c03e867c2de74997c8e347ca8b Mon Sep 17 00:00:00 2001 From: ZrowGz <80988768+ZrowGz@users.noreply.github.com> Date: Thu, 2 Feb 2023 10:11:56 -0800 Subject: [PATCH 12/37] Update FraxUnifiedFarm_ERC20_V2.sol (#191) Remove unnecessary `{` before the lock transferring checks from line 760. --- .../Staking/FraxUnifiedFarm_ERC20_V2.sol | 53 +++++++++---------- 1 file changed, 26 insertions(+), 27 deletions(-) diff --git a/src/hardhat/contracts/Staking/FraxUnifiedFarm_ERC20_V2.sol b/src/hardhat/contracts/Staking/FraxUnifiedFarm_ERC20_V2.sol index 37e48b6d..1f09d345 100644 --- a/src/hardhat/contracts/Staking/FraxUnifiedFarm_ERC20_V2.sol +++ b/src/hardhat/contracts/Staking/FraxUnifiedFarm_ERC20_V2.sol @@ -756,36 +756,35 @@ contract FraxUnifiedFarm_ERC20_V2 is FraxUnifiedFarmTemplate_V2 { lockedStakes[addrs[0]][sender_lock_index].liquidity -= transfer_amount; } -{ - /** if use_receiver_lock_index is true & - * & the index is valid - * & has liquidity - * & is still locked, update the stake & ending timestamp (longer of the two) - * else, create a new lockedStake - * note using nested if checks to reduce gas costs slightly - */ - if (use_receiver_lock_index == true) { - // Get the stake and its index - LockedStake memory receiverStake = getLockedStake(addrs[1], receiver_lock_index); - - if (receiver_lock_index < lockedStakes[addrs[1]].length) { - if (receiverStake.liquidity > 0) { - if (receiverStake.ending_timestamp > block.timestamp) { - // Update the existing staker's stake liquidity - lockedStakes[addrs[1]][receiver_lock_index].liquidity += transfer_amount; - // check & update ending timestamp to whichever is farthest out - if (receiverStake.ending_timestamp < senderStake.ending_timestamp) { - // update the lock expiration to the later timestamp - lockedStakes[addrs[1]][receiver_lock_index].ending_timestamp = senderStake.ending_timestamp; - // update the lock multiplier since we are effectively extending the lock - lockedStakes[addrs[1]][receiver_lock_index].lock_multiplier = lockMultiplier( - senderStake.ending_timestamp - block.timestamp - ); - } + /** if use_receiver_lock_index is true & + * & the index is valid + * & has liquidity + * & is still locked, update the stake & ending timestamp (longer of the two) + * else, create a new lockedStake + * note using nested if checks to reduce gas costs slightly + */ + if (use_receiver_lock_index == true) { + // Get the stake and its index + LockedStake memory receiverStake = getLockedStake(addrs[1], receiver_lock_index); + + if (receiver_lock_index < lockedStakes[addrs[1]].length) { + if (receiverStake.liquidity > 0) { + if (receiverStake.ending_timestamp > block.timestamp) { + // Update the existing staker's stake liquidity + lockedStakes[addrs[1]][receiver_lock_index].liquidity += transfer_amount; + // check & update ending timestamp to whichever is farthest out + if (receiverStake.ending_timestamp < senderStake.ending_timestamp) { + // update the lock expiration to the later timestamp + lockedStakes[addrs[1]][receiver_lock_index].ending_timestamp = senderStake.ending_timestamp; + // update the lock multiplier since we are effectively extending the lock + lockedStakes[addrs[1]][receiver_lock_index].lock_multiplier = lockMultiplier( + senderStake.ending_timestamp - block.timestamp + ); } } } - } else { + } + } else { // create the new lockedStake _createNewStake( addrs[1], From c70515ffaf33aaaffa7288cb0caf682ec18bb18f Mon Sep 17 00:00:00 2001 From: Travis Moore <33413876+FortisFortuna@users.noreply.github.com> Date: Thu, 2 Feb 2023 17:21:17 -0800 Subject: [PATCH 13/37] Add 2 step ownership transfer to veFPIS --- src/hardhat/contracts/Curve/veFPIS.vy | 52 +++++++++++++-------------- 1 file changed, 25 insertions(+), 27 deletions(-) diff --git a/src/hardhat/contracts/Curve/veFPIS.vy b/src/hardhat/contracts/Curve/veFPIS.vy index c43b62a1..4d3d8719 100644 --- a/src/hardhat/contracts/Curve/veFPIS.vy +++ b/src/hardhat/contracts/Curve/veFPIS.vy @@ -94,10 +94,10 @@ PROXY_ADD: constant(int128) = 6 PROXY_SLASH: constant(int128) = 7 CHECKPOINT_ONLY: constant(int128) = 8 -event CommitOwnership: +event NominateOwnership: admin: address -event ApplyOwnership: +event AcceptOwnership: admin: address event Deposit: @@ -227,55 +227,53 @@ future_admin: public(address) @external -def __init__(token_addr: address, _name: String[64], _symbol: String[32], _version: String[32]): +def __init__(): """ - @notice Contract constructor - @param token_addr `ERC20CRV` token address - @param _name Token name - @param _symbol Token symbol - @param _version Contract version - required for Aragon compatibility + @notice Contract constructor. No constructor args due to Etherscan verification issues """ + token_addr: address = 0xc2544A32872A91F4A553b404C6950e89De901fdb self.admin = msg.sender self.token = token_addr self.point_history[0].blk = block.number self.point_history[0].ts = block.timestamp self.point_history[0].fpis_amt = 0 - self.appTransferFromsEnabled = True - self.appTransferTosEnabled = True - self.proxyAddsEnabled = True - self.proxySlashesEnabled = True + self.appTransferFromsEnabled = False + self.appTransferTosEnabled = False + self.proxyAddsEnabled = False + self.proxySlashesEnabled = False _decimals: uint256 = ERC20(token_addr).decimals() assert _decimals <= 255 self.decimals = _decimals - self.name = _name - self.symbol = _symbol - self.version = _version - + self.name = "veFPIS" + self.symbol = "veFPIS" + self.version = "veFPIS_1.0.0" @external -def commit_transfer_ownership(addr: address): +def nominate_ownership(addr: address): """ - @notice Transfer ownership of VotingEscrow contract to `addr` - @param addr Address to have ownership transferred to + @notice Transfer ownership of this contract to `addr` + @param addr Address of the new owner """ assert msg.sender == self.admin # dev: admin only + self.future_admin = addr - log CommitOwnership(addr) + log NominateOwnership(addr) @external -def apply_transfer_ownership(): +def accept_transfer_ownership(): """ - @notice Apply ownership transfer + @notice Accept a pending ownership transfer + @dev Only callable by the new owner """ - assert msg.sender == self.admin # dev: admin only _admin: address = self.future_admin - assert _admin != empty(address) # dev: admin not set - self.admin = _admin - log ApplyOwnership(_admin) + assert msg.sender == _admin # dev: future admin only + self.admin = _admin + self.future_admin = empty(address) + log AcceptOwnership(_admin) @external def commit_smart_wallet_checker(addr: address): @@ -1320,4 +1318,4 @@ def stakerSetProxy(_proxy: address): # Set the proxy self.staker_whitelisted_proxy[msg.sender] = _proxy - log StakerProxySet(_proxy) \ No newline at end of file + log StakerProxySet(_proxy) From 50cab69f22b8db1ab87665c2426052bbb058faa4 Mon Sep 17 00:00:00 2001 From: ZrowGz <80988768+ZrowGz@users.noreply.github.com> Date: Mon, 13 Feb 2023 07:15:04 -0800 Subject: [PATCH 14/37] Correct event emission in `_stakeLocked` (#194) Change the event emit value to match the name of the value for the event emitted during `_stakeLocked` function. It's emitting the number of stakes the user has instead of the new locked stake index. Added ` - 1` to the value being emitted to get it to match with the name of the parameter for the event. --- src/hardhat/contracts/Staking/FraxUnifiedFarm_ERC20_V2.sol | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/hardhat/contracts/Staking/FraxUnifiedFarm_ERC20_V2.sol b/src/hardhat/contracts/Staking/FraxUnifiedFarm_ERC20_V2.sol index 1f09d345..0d450c7f 100644 --- a/src/hardhat/contracts/Staking/FraxUnifiedFarm_ERC20_V2.sol +++ b/src/hardhat/contracts/Staking/FraxUnifiedFarm_ERC20_V2.sol @@ -532,7 +532,7 @@ contract FraxUnifiedFarm_ERC20_V2 is FraxUnifiedFarmTemplate_V2 { // Update liquidities _updateLiqAmts(staker_address, liquidity, true); - emit StakeLocked(staker_address, liquidity, secs, lockedStakes[staker_address].length, source_address); + emit StakeLocked(staker_address, liquidity, secs, lockedStakes[staker_address].length - 1, source_address); return lockedStakes[staker_address].length - 1; } From f6ebf2a186841c63a16eeffaeded0f54ca588ca3 Mon Sep 17 00:00:00 2001 From: ZrowGz <80988768+ZrowGz@users.noreply.github.com> Date: Mon, 13 Feb 2023 15:12:03 -0800 Subject: [PATCH 15/37] bug fixes (#195) * Travis (#172) * farm * compiling * farm 2 * remove unneeded error * segregate changes into V2 for all files altered from original, revert pragma updates on otherwise unchanged files * comment removed * corrected testing errors * move get receiver stake * resolved errors * info * allowance logic * allowanace & approval logic * adds comments & some logic fixes from testing * include comments for allowance, make isApproved external & remove msg.sender from that * convert functions from public to external where feasible to reduce bytecode * file matching * file sync * file sync * file sync * file sync * file sync * enhanced foundry compiler settings * alter a getter * alter a getter * missed fixes from testing * missed fixes from testing * moved getReceiverLockedStake back inside the main if checks for receiver - causes it to fail instead of create a new locked stake * bug fixes * remove ending timestamp alteration * changed ILockReceiverV2 back to ILockReceiver since that was original & messes up the selector * overwrote incorrect line --------- Co-authored-by: Travis Moore <33413876+FortisFortuna@users.noreply.github.com> --- .../Staking/FraxUnifiedFarm_ERC20_V2.sol | 83 +++++++------------ .../contracts/Staking/ILockReceiver.sol | 4 +- .../contracts/Staking/ILockReceiverV2.sol | 18 ---- 3 files changed, 33 insertions(+), 72 deletions(-) delete mode 100644 src/hardhat/contracts/Staking/ILockReceiverV2.sol diff --git a/src/hardhat/contracts/Staking/FraxUnifiedFarm_ERC20_V2.sol b/src/hardhat/contracts/Staking/FraxUnifiedFarm_ERC20_V2.sol index 0d450c7f..dca68b84 100644 --- a/src/hardhat/contracts/Staking/FraxUnifiedFarm_ERC20_V2.sol +++ b/src/hardhat/contracts/Staking/FraxUnifiedFarm_ERC20_V2.sol @@ -18,7 +18,7 @@ pragma solidity ^0.8.17; /// Locked Stake Transfer & Custom Error logic created by ZrowGz with the Pitch Foundation import "./FraxUnifiedFarmTemplate_V2.sol"; -import "./ILockReceiverV2.sol"; +import "./ILockReceiver.sol"; // -------------------- VARIES -------------------- @@ -56,6 +56,7 @@ contract FraxUnifiedFarm_ERC20_V2 is FraxUnifiedFarmTemplate_V2 { // use custom errors to reduce contract size error TransferLockNotAllowed(address,uint256); // spender, locked_stake_index + error StakeStillLocked(uint256,uint256); // ending_timestamp, block.timestamp error StakesUnlocked(); error InvalidReceiver(); error InvalidAmount(); @@ -557,32 +558,29 @@ contract FraxUnifiedFarm_ERC20_V2 is FraxUnifiedFarmTemplate_V2 { // Get the stake by its index LockedStake memory thisStake = lockedStakes[staker_address][theArrayIndex]; - // require(block.timestamp >= thisStake.ending_timestamp || stakesUnlocked == true, "Stake is still locked!"); - // the stake must still be locked to transfer - if (block.timestamp >= thisStake.ending_timestamp || stakesUnlocked == true) { - revert StakesUnlocked(); + // note: original check:: require(block.timestamp >= thisStake.ending_timestamp || stakesUnlocked == true, "Stake is still locked!"); + // the stake must still be unlocked to withdraw + if (block.timestamp < thisStake.ending_timestamp && !stakesUnlocked) { + revert StakeStillLocked(thisStake.ending_timestamp, block.timestamp); } - // uint256 liquidity = thisStake.liquidity; - if (thisStake.liquidity > 0) { + uint256 liq = thisStake.liquidity; + if (liq > 0) { // Give the tokens to the destination_address // Should throw if insufficient balance - TransferHelperV2.safeTransfer(address(stakingToken), destination_address, thisStake.liquidity); - - // Remove the stake from the array - delete lockedStakes[staker_address][theArrayIndex]; + TransferHelperV2.safeTransfer(address(stakingToken), destination_address, liq); - // // Need to call again to make sure everything is correct - // updateRewardAndBalance(staker_address, false); + // disable the stake by setting everything to zero + _updateStake(staker_address, theArrayIndex, 0, 0, 0, 0); - // Update liquidities + // Update liquidities & balances _updateLiqAmts(staker_address, thisStake.liquidity, false); emit WithdrawLocked(staker_address, thisStake.liquidity, theArrayIndex, destination_address); } - return thisStake.liquidity; + return liq; } function _getRewardExtraLogic(address rewardee, address destination_address) internal override { @@ -717,9 +715,9 @@ contract FraxUnifiedFarm_ERC20_V2 is FraxUnifiedFarmTemplate_V2 { // on transfer, call addrs[0] to verify sending is ok if (addrs[0].code.length > 0) { require( - ILockReceiverV2(addrs[0]).beforeLockTransfer(addrs[0], addrs[1], sender_lock_index, "") + ILockReceiver(addrs[0]).beforeLockTransfer(addrs[0], addrs[1], sender_lock_index, "") == - ILockReceiverV2.beforeLockTransfer.selector + ILockReceiver.beforeLockTransfer.selector ); } @@ -730,40 +728,37 @@ contract FraxUnifiedFarm_ERC20_V2 is FraxUnifiedFarmTemplate_V2 { if (addrs[1] == address(0) || addrs[1] == addrs[0]) { revert InvalidReceiver(); } - if (block.timestamp >= senderStake.ending_timestamp || stakesUnlocked == true) { + if (block.timestamp >= senderStake.ending_timestamp || stakesUnlocked) { revert StakesUnlocked(); } if (transfer_amount > senderStake.liquidity || transfer_amount <= 0) { revert InvalidAmount(); } - // Update the liquidities - _locked_liquidity[addrs[0]] -= transfer_amount; - _locked_liquidity[addrs[1]] += transfer_amount; - - if (getProxyFor(addrs[0]) != address(0)) { - proxy_lp_balances[getProxyFor(addrs[0])] -= transfer_amount; - } - - if (getProxyFor(addrs[1]) != address(0)) { - proxy_lp_balances[getProxyFor(addrs[1])] += transfer_amount; - } + // Update the liquidity for sender + _updateLiqAmts(addrs[0], transfer_amount, false); // if sent amount was all the liquidity, delete the stake, otherwise decrease the balance if (transfer_amount == senderStake.liquidity) { - delete lockedStakes[addrs[0]][sender_lock_index]; + // disable the stake + _updateStake(addrs[0], sender_lock_index, 0, 0, 0, 0); } else { + // otherwise, deduct the transfer amount from the stake lockedStakes[addrs[0]][sender_lock_index].liquidity -= transfer_amount; } - /** if use_receiver_lock_index is true & + /** if use_receiver_lock_index is true & the incoming stake wouldn't extend the receiver's stake * & the index is valid * & has liquidity * & is still locked, update the stake & ending timestamp (longer of the two) * else, create a new lockedStake * note using nested if checks to reduce gas costs slightly */ - if (use_receiver_lock_index == true) { + if ( + use_receiver_lock_index == true + && + senderStake.ending_timestamp <= lockedStakes[addrs[1]][receiver_lock_index].ending_timestamp + ) { // Get the stake and its index LockedStake memory receiverStake = getLockedStake(addrs[1], receiver_lock_index); @@ -772,15 +767,6 @@ contract FraxUnifiedFarm_ERC20_V2 is FraxUnifiedFarmTemplate_V2 { if (receiverStake.ending_timestamp > block.timestamp) { // Update the existing staker's stake liquidity lockedStakes[addrs[1]][receiver_lock_index].liquidity += transfer_amount; - // check & update ending timestamp to whichever is farthest out - if (receiverStake.ending_timestamp < senderStake.ending_timestamp) { - // update the lock expiration to the later timestamp - lockedStakes[addrs[1]][receiver_lock_index].ending_timestamp = senderStake.ending_timestamp; - // update the lock multiplier since we are effectively extending the lock - lockedStakes[addrs[1]][receiver_lock_index].lock_multiplier = lockMultiplier( - senderStake.ending_timestamp - block.timestamp - ); - } } } } @@ -798,9 +784,8 @@ contract FraxUnifiedFarm_ERC20_V2 is FraxUnifiedFarmTemplate_V2 { receiver_lock_index = lockedStakes[addrs[1]].length - 1; } - // Need to call again to make sure everything is correct - updateRewardAndBalance(addrs[0], true); - updateRewardAndBalance(addrs[1], true); + // update liquidity of the receiver + _updateLiqAmts(addrs[1], transfer_amount, true); emit TransferLockedByIndex( addrs[0], @@ -812,16 +797,10 @@ contract FraxUnifiedFarm_ERC20_V2 is FraxUnifiedFarmTemplate_V2 { // call the receiver with the destination lockedStake to verify receiving is ok - // if (ILockReceiverV2(addrs[1]).onLockReceived( - // addrs[0], - // addrs[1], - // receiver_lock_index, - // "" - // ) != ILockReceiverV2.onLockReceived.selector) revert InvalidReceiver(); //0xc42d8b95) revert InvalidReceiver(); if (addrs[1].code.length > 0) { - require(ILockReceiverV2(addrs[1]).beforeLockTransfer(addrs[0], addrs[1], receiver_lock_index, "") + require(ILockReceiver(addrs[1]).onLockReceived(addrs[0], addrs[1], receiver_lock_index, "") == - ILockReceiverV2.beforeLockTransfer.selector + ILockReceiver.beforeLockTransfer.selector ); } diff --git a/src/hardhat/contracts/Staking/ILockReceiver.sol b/src/hardhat/contracts/Staking/ILockReceiver.sol index d23ef3e5..44a2cdde 100644 --- a/src/hardhat/contracts/Staking/ILockReceiver.sol +++ b/src/hardhat/contracts/Staking/ILockReceiver.sol @@ -5,14 +5,14 @@ interface ILockReceiver { function beforeLockTransfer( address _sender, address _receiver, - bytes32 _lockId, + uint256 _lockId, bytes calldata _data ) external returns (bytes4); function onLockReceived( address _sender, address _receiver, - bytes32 _lockId, + uint256 _lockId, bytes calldata _data ) external returns (bytes4); } \ No newline at end of file diff --git a/src/hardhat/contracts/Staking/ILockReceiverV2.sol b/src/hardhat/contracts/Staking/ILockReceiverV2.sol deleted file mode 100644 index ce77dd08..00000000 --- a/src/hardhat/contracts/Staking/ILockReceiverV2.sol +++ /dev/null @@ -1,18 +0,0 @@ -// SPDX-License-Identifier: MIT -pragma solidity >=0.8.0; - -interface ILockReceiverV2 { - function beforeLockTransfer( - address _sender, - address _receiver, - uint256 _lockId, - bytes calldata _data - ) external returns (bytes4); - - function onLockReceived( - address _sender, - address _receiver, - uint256 _lockId, - bytes calldata _data - ) external returns (bytes4); -} \ No newline at end of file From 833b8d4706569afc775199ae1220c0db9036de86 Mon Sep 17 00:00:00 2001 From: ZrowGz <80988768+ZrowGz@users.noreply.github.com> Date: Wed, 22 Feb 2023 16:57:29 -0800 Subject: [PATCH 16/37] Fixes for issues found by Macro, part 1 (#197) * Travis (#172) * farm * compiling * farm 2 * remove unneeded error * segregate changes into V2 for all files altered from original, revert pragma updates on otherwise unchanged files * comment removed * corrected testing errors * move get receiver stake * resolved errors * info * allowance logic * allowanace & approval logic * adds comments & some logic fixes from testing * include comments for allowance, make isApproved external & remove msg.sender from that * convert functions from public to external where feasible to reduce bytecode * file matching * file sync * file sync * file sync * file sync * file sync * enhanced foundry compiler settings * alter a getter * alter a getter * missed fixes from testing * missed fixes from testing * moved getReceiverLockedStake back inside the main if checks for receiver - causes it to fail instead of create a new locked stake * bug fixes * remove ending timestamp alteration * changed ILockReceiverV2 back to ILockReceiver since that was original & messes up the selector * overwrote incorrect line * add familial middleman gauge type * create familial gauge for redistributing rewards across transferrable & non-transferrable gauges as a signle votable gauge, based on each child gauges total combined weight * remove gauge set up from constructor * change var names & make getters to match with farm required abis * change var names & make getters to match with farm required abis * convert vars to internal to reduce execution gas costs, expose through specified getters * return transfer tests to previous state --------- Co-authored-by: Travis Moore <33413876+FortisFortuna@users.noreply.github.com> --- .vscode/settings.json | 3 +- foundry.toml | 7 + package-lock.json | 88 +++- remappings.txt | 3 + .../Curve/FraxFamilialPitchGauge.sol | 390 ++++++++++++++++++ src/hardhat/contracts/Curve/IFraxFarm.sol | 203 +++++++++ 6 files changed, 679 insertions(+), 15 deletions(-) create mode 100755 src/hardhat/contracts/Curve/FraxFamilialPitchGauge.sol create mode 100644 src/hardhat/contracts/Curve/IFraxFarm.sol diff --git a/.vscode/settings.json b/.vscode/settings.json index 71069818..00e344d4 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -6,6 +6,7 @@ "forge-std/=lib/forge-std/src/", "@openzeppelin/=lib/openzeppelin-contracts/", "@mocks/=src/hardhat/contracts/mocks/", - "@staking/=src/hardhat/contracts/Staking/" + "@staking/=src/hardhat/contracts/Staking/", + "@openzeppelin/=node_modules/@openzeppelin/" ] } \ No newline at end of file diff --git a/foundry.toml b/foundry.toml index bf914389..4687477c 100644 --- a/foundry.toml +++ b/foundry.toml @@ -4,6 +4,13 @@ out = 'out' libs = ['node_modules', 'lib'] test = 'src/foundry/test/' cache_path = 'forge-cache' +remappings = [ + '@fraxmocks/=lib/frax-solidity/src/hardhat/contracts/mocks/', + '@staking/=/src/hardhat/contracts/Staking/', + '@openzeppelin-contracts/=lib/openzeppelin-contracts/', + 'openzeppelin-contracts/=lib/openzeppelin-contracts/contracts/', + '@openzeppelin/=lib/openzeppelin-contracts/', +] # See more config options https://github.com/foundry-rs/foundry/tree/master/config diff --git a/package-lock.json b/package-lock.json index a6d2cb0a..d3e87997 100644 --- a/package-lock.json +++ b/package-lock.json @@ -5479,7 +5479,8 @@ "node_modules/@yarnpkg/lockfile": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/@yarnpkg/lockfile/-/lockfile-1.1.0.tgz", - "integrity": "sha512-GpSwvyXOcOOlV70vbnzjj4fW5xW/FdUF6nQEt1ENy7m4ZCczi1+/buVUPAqmGfqznsORNFzUMjctTIp8a9tuCQ==" + "integrity": "sha512-GpSwvyXOcOOlV70vbnzjj4fW5xW/FdUF6nQEt1ENy7m4ZCczi1+/buVUPAqmGfqznsORNFzUMjctTIp8a9tuCQ==", + "dev": true }, "node_modules/abbrev": { "version": "1.1.1", @@ -6230,6 +6231,7 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/at-least-node/-/at-least-node-1.0.0.tgz", "integrity": "sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==", + "devOptional": true, "engines": { "node": ">= 4.0.0" } @@ -7666,6 +7668,7 @@ "version": "6.0.5", "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", + "dev": true, "dependencies": { "nice-try": "^1.0.4", "path-key": "^2.0.1", @@ -7681,6 +7684,7 @@ "version": "5.7.1", "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true, "bin": { "semver": "bin/semver" } @@ -8404,6 +8408,7 @@ "version": "0.4.1", "resolved": "https://registry.npmjs.org/emittery/-/emittery-0.4.1.tgz", "integrity": "sha512-r4eRSeStEGf6M5SKdrQhhLK5bOwOBxQhIE3YSTnZE3GpKiLfnnhE+tPtrJE79+eDJgm39BM6LSoI8SCx4HbwlQ==", + "optional": true, "engines": { "node": ">=6" } @@ -10896,6 +10901,7 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/find-yarn-workspace-root/-/find-yarn-workspace-root-2.0.0.tgz", "integrity": "sha512-1IMnbjt4KzsQfnhnzNd8wUEgXZ44IzZaZmnLYx7D5FZlaHt2gW20Cri8Q+E/t5tIj4+epTBub+2Zxu/vNILzqQ==", + "dev": true, "dependencies": { "micromatch": "^4.0.2" } @@ -21213,6 +21219,7 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-2.0.0.tgz", "integrity": "sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w==", + "dev": true, "dependencies": { "ci-info": "^2.0.0" }, @@ -21238,6 +21245,7 @@ "version": "2.2.1", "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz", "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==", + "dev": true, "bin": { "is-docker": "cli.js" }, @@ -21521,6 +21529,7 @@ "version": "2.2.0", "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", + "dev": true, "dependencies": { "is-docker": "^2.0.0" }, @@ -21840,6 +21849,7 @@ "version": "6.0.0", "resolved": "https://registry.npmjs.org/klaw-sync/-/klaw-sync-6.0.0.tgz", "integrity": "sha512-nIeuVSzdCCs6TDPTqI8w1Yre34sSq7AkZ4B3sfOBbI2CgVSB4Du4aLQijFU2+lhAFCwt9+42Hel6lQNIv6AntQ==", + "dev": true, "dependencies": { "graceful-fs": "^4.1.11" } @@ -22073,6 +22083,7 @@ "resolved": "https://registry.npmjs.org/leveldown/-/leveldown-5.6.0.tgz", "integrity": "sha512-iB8O/7Db9lPaITU1aA2txU/cBEXAt4vWwKQRrrWuS6XDgbP4QZGj9BL2aNbwb002atoQ/lIotJkfyzz+ygQnUQ==", "hasInstallScript": true, + "optional": true, "dependencies": { "abstract-leveldown": "~6.2.1", "napi-macros": "~2.0.0", @@ -22086,6 +22097,7 @@ "version": "6.2.3", "resolved": "https://registry.npmjs.org/abstract-leveldown/-/abstract-leveldown-6.2.3.tgz", "integrity": "sha512-BsLm5vFMRUrrLeCcRc+G0t2qOaTzpoJQLOubq2XM72eNpjF5UdU5o/5NvlNhx95XHcAvcl8OMXr4mlg/fRgUXQ==", + "optional": true, "dependencies": { "buffer": "^5.5.0", "immediate": "^3.2.3", @@ -22115,6 +22127,7 @@ "url": "https://feross.org/support" } ], + "optional": true, "dependencies": { "base64-js": "^1.3.1", "ieee754": "^1.1.13" @@ -22124,6 +22137,7 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/level-supports/-/level-supports-1.0.1.tgz", "integrity": "sha512-rXM7GYnW8gsl1vedTJIbzOrRv85c/2uCMpiiCzO2fndd06U/kUXEEU9evYn4zFggBOg36IsBW8LzqIpETwwQzg==", + "optional": true, "dependencies": { "xtend": "^4.0.2" }, @@ -22135,6 +22149,7 @@ "version": "4.1.1", "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.1.1.tgz", "integrity": "sha512-dSq1xmcPDKPZ2EED2S6zw/b9NKsqzXRE6dVr8TVQnI3FJOTteUMuqF3Qqs6LZg+mLGYJWqQzMbIjMtJqTv87nQ==", + "optional": true, "bin": { "node-gyp-build": "bin.js", "node-gyp-build-optional": "optional.js", @@ -22539,6 +22554,7 @@ "version": "4.0.5", "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", + "dev": true, "dependencies": { "braces": "^3.0.2", "picomatch": "^2.3.1" @@ -23091,7 +23107,8 @@ "node_modules/nice-try": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz", - "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==" + "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==", + "dev": true }, "node_modules/no-case": { "version": "2.3.2", @@ -23549,6 +23566,7 @@ "version": "7.4.2", "resolved": "https://registry.npmjs.org/open/-/open-7.4.2.tgz", "integrity": "sha512-MVHddDVweXZF3awtlAS+6pgKLlm/JgxZ90+/NBurBoQctVOOB/zDdVjcyPzQ+0laDGbsWgrRkflI65sQeOgT9Q==", + "dev": true, "dependencies": { "is-docker": "^2.0.0", "is-wsl": "^2.1.1" @@ -23753,6 +23771,7 @@ "version": "6.5.1", "resolved": "https://registry.npmjs.org/patch-package/-/patch-package-6.5.1.tgz", "integrity": "sha512-I/4Zsalfhc6bphmJTlrLoOcAF87jcxko4q0qsv4bGcurbr8IskEOtdnt9iCmsQVGL1B+iUhSQqweyTLJfCF9rA==", + "dev": true, "dependencies": { "@yarnpkg/lockfile": "^1.1.0", "chalk": "^4.1.2", @@ -23781,6 +23800,7 @@ "version": "1.1.11", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, "dependencies": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" @@ -23790,6 +23810,7 @@ "version": "9.1.0", "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", + "dev": true, "dependencies": { "at-least-node": "^1.0.0", "graceful-fs": "^4.2.0", @@ -23804,6 +23825,7 @@ "version": "7.2.3", "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "dev": true, "dependencies": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", @@ -23823,6 +23845,7 @@ "version": "3.1.2", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, "dependencies": { "brace-expansion": "^1.1.7" }, @@ -23834,6 +23857,7 @@ "version": "2.7.1", "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", + "dev": true, "dependencies": { "glob": "^7.1.3" }, @@ -23845,6 +23869,7 @@ "version": "5.7.1", "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true, "bin": { "semver": "bin/semver" } @@ -23892,6 +23917,7 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", "integrity": "sha512-fEHGKCSmUSDPv4uoj8AlD+joPlq3peND+HRYyxFz4KPw4z926S/b8rIuFs2FYJg3BwsxJf6A9/3eIdLaYC+9Dw==", + "dev": true, "engines": { "node": ">=4" } @@ -25536,6 +25562,7 @@ "version": "1.2.0", "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", "integrity": "sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg==", + "dev": true, "dependencies": { "shebang-regex": "^1.0.0" }, @@ -25547,6 +25574,7 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", "integrity": "sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ==", + "dev": true, "engines": { "node": ">=0.10.0" } @@ -25623,6 +25651,7 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/slash/-/slash-2.0.0.tgz", "integrity": "sha512-ZYKh3Wh2z1PpEXWr0MpSBZ0V6mZHAQfYevttO11c51CaWjGTaadiKZ+wVt1PbMlDV5qhMFslpZCemhwOK7C89A==", + "dev": true, "engines": { "node": ">=6" } @@ -29245,6 +29274,7 @@ "version": "1.10.2", "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz", "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==", + "dev": true, "engines": { "node": ">= 6" } @@ -33706,7 +33736,8 @@ "@yarnpkg/lockfile": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/@yarnpkg/lockfile/-/lockfile-1.1.0.tgz", - "integrity": "sha512-GpSwvyXOcOOlV70vbnzjj4fW5xW/FdUF6nQEt1ENy7m4ZCczi1+/buVUPAqmGfqznsORNFzUMjctTIp8a9tuCQ==" + "integrity": "sha512-GpSwvyXOcOOlV70vbnzjj4fW5xW/FdUF6nQEt1ENy7m4ZCczi1+/buVUPAqmGfqznsORNFzUMjctTIp8a9tuCQ==", + "dev": true }, "abbrev": { "version": "1.1.1", @@ -34315,7 +34346,8 @@ "at-least-node": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/at-least-node/-/at-least-node-1.0.0.tgz", - "integrity": "sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==" + "integrity": "sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==", + "devOptional": true }, "atomically": { "version": "1.7.0", @@ -35436,6 +35468,7 @@ "version": "6.0.5", "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", + "dev": true, "requires": { "nice-try": "^1.0.4", "path-key": "^2.0.1", @@ -35447,7 +35480,8 @@ "semver": { "version": "5.7.1", "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true } } }, @@ -36005,7 +36039,8 @@ "emittery": { "version": "0.4.1", "resolved": "https://registry.npmjs.org/emittery/-/emittery-0.4.1.tgz", - "integrity": "sha512-r4eRSeStEGf6M5SKdrQhhLK5bOwOBxQhIE3YSTnZE3GpKiLfnnhE+tPtrJE79+eDJgm39BM6LSoI8SCx4HbwlQ==" + "integrity": "sha512-r4eRSeStEGf6M5SKdrQhhLK5bOwOBxQhIE3YSTnZE3GpKiLfnnhE+tPtrJE79+eDJgm39BM6LSoI8SCx4HbwlQ==", + "optional": true }, "emoji-regex": { "version": "8.0.0", @@ -38236,6 +38271,7 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/find-yarn-workspace-root/-/find-yarn-workspace-root-2.0.0.tgz", "integrity": "sha512-1IMnbjt4KzsQfnhnzNd8wUEgXZ44IzZaZmnLYx7D5FZlaHt2gW20Cri8Q+E/t5tIj4+epTBub+2Zxu/vNILzqQ==", + "dev": true, "requires": { "micromatch": "^4.0.2" } @@ -45843,6 +45879,7 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-2.0.0.tgz", "integrity": "sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w==", + "dev": true, "requires": { "ci-info": "^2.0.0" } @@ -45858,7 +45895,8 @@ "is-docker": { "version": "2.2.1", "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz", - "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==" + "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==", + "dev": true }, "is-extglob": { "version": "2.1.1", @@ -46045,6 +46083,7 @@ "version": "2.2.0", "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", + "dev": true, "requires": { "is-docker": "^2.0.0" } @@ -46298,6 +46337,7 @@ "version": "6.0.0", "resolved": "https://registry.npmjs.org/klaw-sync/-/klaw-sync-6.0.0.tgz", "integrity": "sha512-nIeuVSzdCCs6TDPTqI8w1Yre34sSq7AkZ4B3sfOBbI2CgVSB4Du4aLQijFU2+lhAFCwt9+42Hel6lQNIv6AntQ==", + "dev": true, "requires": { "graceful-fs": "^4.1.11" } @@ -46463,6 +46503,7 @@ "version": "5.6.0", "resolved": "https://registry.npmjs.org/leveldown/-/leveldown-5.6.0.tgz", "integrity": "sha512-iB8O/7Db9lPaITU1aA2txU/cBEXAt4vWwKQRrrWuS6XDgbP4QZGj9BL2aNbwb002atoQ/lIotJkfyzz+ygQnUQ==", + "optional": true, "requires": { "abstract-leveldown": "~6.2.1", "napi-macros": "~2.0.0", @@ -46473,6 +46514,7 @@ "version": "6.2.3", "resolved": "https://registry.npmjs.org/abstract-leveldown/-/abstract-leveldown-6.2.3.tgz", "integrity": "sha512-BsLm5vFMRUrrLeCcRc+G0t2qOaTzpoJQLOubq2XM72eNpjF5UdU5o/5NvlNhx95XHcAvcl8OMXr4mlg/fRgUXQ==", + "optional": true, "requires": { "buffer": "^5.5.0", "immediate": "^3.2.3", @@ -46485,6 +46527,7 @@ "version": "5.7.1", "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", + "optional": true, "requires": { "base64-js": "^1.3.1", "ieee754": "^1.1.13" @@ -46494,6 +46537,7 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/level-supports/-/level-supports-1.0.1.tgz", "integrity": "sha512-rXM7GYnW8gsl1vedTJIbzOrRv85c/2uCMpiiCzO2fndd06U/kUXEEU9evYn4zFggBOg36IsBW8LzqIpETwwQzg==", + "optional": true, "requires": { "xtend": "^4.0.2" } @@ -46501,7 +46545,8 @@ "node-gyp-build": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.1.1.tgz", - "integrity": "sha512-dSq1xmcPDKPZ2EED2S6zw/b9NKsqzXRE6dVr8TVQnI3FJOTteUMuqF3Qqs6LZg+mLGYJWqQzMbIjMtJqTv87nQ==" + "integrity": "sha512-dSq1xmcPDKPZ2EED2S6zw/b9NKsqzXRE6dVr8TVQnI3FJOTteUMuqF3Qqs6LZg+mLGYJWqQzMbIjMtJqTv87nQ==", + "optional": true } } }, @@ -46825,6 +46870,7 @@ "version": "4.0.5", "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", + "dev": true, "requires": { "braces": "^3.0.2", "picomatch": "^2.3.1" @@ -47233,7 +47279,8 @@ "nice-try": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz", - "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==" + "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==", + "dev": true }, "no-case": { "version": "2.3.2", @@ -47587,6 +47634,7 @@ "version": "7.4.2", "resolved": "https://registry.npmjs.org/open/-/open-7.4.2.tgz", "integrity": "sha512-MVHddDVweXZF3awtlAS+6pgKLlm/JgxZ90+/NBurBoQctVOOB/zDdVjcyPzQ+0laDGbsWgrRkflI65sQeOgT9Q==", + "dev": true, "requires": { "is-docker": "^2.0.0", "is-wsl": "^2.1.1" @@ -47740,6 +47788,7 @@ "version": "6.5.1", "resolved": "https://registry.npmjs.org/patch-package/-/patch-package-6.5.1.tgz", "integrity": "sha512-I/4Zsalfhc6bphmJTlrLoOcAF87jcxko4q0qsv4bGcurbr8IskEOtdnt9iCmsQVGL1B+iUhSQqweyTLJfCF9rA==", + "dev": true, "requires": { "@yarnpkg/lockfile": "^1.1.0", "chalk": "^4.1.2", @@ -47761,6 +47810,7 @@ "version": "1.1.11", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, "requires": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" @@ -47770,6 +47820,7 @@ "version": "9.1.0", "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", + "dev": true, "requires": { "at-least-node": "^1.0.0", "graceful-fs": "^4.2.0", @@ -47781,6 +47832,7 @@ "version": "7.2.3", "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "dev": true, "requires": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", @@ -47794,6 +47846,7 @@ "version": "3.1.2", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, "requires": { "brace-expansion": "^1.1.7" } @@ -47802,6 +47855,7 @@ "version": "2.7.1", "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", + "dev": true, "requires": { "glob": "^7.1.3" } @@ -47809,7 +47863,8 @@ "semver": { "version": "5.7.1", "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true } } }, @@ -47864,7 +47919,8 @@ "path-key": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", - "integrity": "sha512-fEHGKCSmUSDPv4uoj8AlD+joPlq3peND+HRYyxFz4KPw4z926S/b8rIuFs2FYJg3BwsxJf6A9/3eIdLaYC+9Dw==" + "integrity": "sha512-fEHGKCSmUSDPv4uoj8AlD+joPlq3peND+HRYyxFz4KPw4z926S/b8rIuFs2FYJg3BwsxJf6A9/3eIdLaYC+9Dw==", + "dev": true }, "path-parse": { "version": "1.0.7", @@ -49190,6 +49246,7 @@ "version": "1.2.0", "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", "integrity": "sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg==", + "dev": true, "requires": { "shebang-regex": "^1.0.0" } @@ -49197,7 +49254,8 @@ "shebang-regex": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", - "integrity": "sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ==" + "integrity": "sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ==", + "dev": true }, "side-channel": { "version": "1.0.4", @@ -49249,7 +49307,8 @@ "slash": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/slash/-/slash-2.0.0.tgz", - "integrity": "sha512-ZYKh3Wh2z1PpEXWr0MpSBZ0V6mZHAQfYevttO11c51CaWjGTaadiKZ+wVt1PbMlDV5qhMFslpZCemhwOK7C89A==" + "integrity": "sha512-ZYKh3Wh2z1PpEXWr0MpSBZ0V6mZHAQfYevttO11c51CaWjGTaadiKZ+wVt1PbMlDV5qhMFslpZCemhwOK7C89A==", + "dev": true }, "slice-ansi": { "version": "4.0.0", @@ -52218,7 +52277,8 @@ "yaml": { "version": "1.10.2", "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz", - "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==" + "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==", + "dev": true }, "yargs": { "version": "16.2.0", diff --git a/remappings.txt b/remappings.txt index 60888d61..27410281 100644 --- a/remappings.txt +++ b/remappings.txt @@ -2,6 +2,9 @@ @ensdomains/=node_modules/@ensdomains/ @eth-optimism/=node_modules/@eth-optimism/ @openzeppelin/=node_modules/@openzeppelin/ +@openzeppelin-contracts/=lib/openzeppelin-contracts/ +openzeppelin-contracts/=lib/openzeppelin-contracts/contracts/ +@openzeppelin/=lib/openzeppelin-contracts/ @uniswap/=node_modules/@uniswap/ base64-sol/=node_modules/base64-sol/ ds-test/=lib/forge-std/lib/ds-test/src/ diff --git a/src/hardhat/contracts/Curve/FraxFamilialPitchGauge.sol b/src/hardhat/contracts/Curve/FraxFamilialPitchGauge.sol new file mode 100755 index 00000000..d67fc684 --- /dev/null +++ b/src/hardhat/contracts/Curve/FraxFamilialPitchGauge.sol @@ -0,0 +1,390 @@ +// SPDX-License-Identifier: GPL-2.0-or-later +pragma solidity ^0.8.17; + +// ==================================================================== +// | ______ _______ | +// | / _____________ __ __ / ____(_____ ____ _____ ________ | +// | / /_ / ___/ __ `| |/_/ / /_ / / __ \/ __ `/ __ \/ ___/ _ \ | +// | / __/ / / / /_/ _> < / __/ / / / / / /_/ / / / / /__/ __/ | +// | /_/ /_/ \__,_/_/|_| /_/ /_/_/ /_/\__,_/_/ /_/\___/\___/ | +// | | +// ==================================================================== +// ======================== FraxMiddlemanGauge ======================== +// ==================================================================== +// Looks at the gauge controller contract and pushes out FXS rewards once +// a week to the gauges (farms). +// This contract is what gets added to the gauge as a 'slice' + +// Frax Finance: https://github.com/FraxFinance + +// Primary Author(s) +// Travis Moore: https://github.com/FortisFortuna + +// Reviewer(s) / Contributor(s) +// Jason Huan: https://github.com/jasonhuan +// Sam Kazemian: https://github.com/samkazemian + +// import "../Math/Math.sol"; +// import "../Math/SafeMath.sol"; +// import "../ERC20/ERC20.sol"; +// import "../ERC20/SafeERC20.sol"; +import "./IFraxGaugeFXSRewardsDistributor.sol"; +import '../Uniswap/TransferHelper.sol'; +import "../Staking/Owned.sol"; +// import "../Utils/ReentrancyGuard.sol"; +import "./IFraxFarm.sol"; +import "./IFraxGaugeControllerV2.sol"; + +/** +* @title FraxFamilialPitchGauge +* @notice Redistributes gauge rewards to multiple gauges (FraxFarms) based on each "child" gauge's `total_combined_weight`. +* @author Modified version of the FraxMiddlemanGauge - by ZrowGz @ Pitch Foundation +* @dev To use this: +* - Add to GaugeController as a gauge +* - Add to FXS Rewards Distributor as a gauge +* * BUT do not set as a middleman gauge on the FXS Rewards Distributor +* - Set as the `gaugeController` & `rewardsDistributor` on all children FraxFarms +* - Disable rewards for pre-existing gauges on the FXS Rewards Distributor +*/ + +contract FraxFamilialPitchGauge is Owned {//, ReentrancyGuard { + // using SafeMath for uint256; + // using SafeERC20 for ERC20; + + // error LatestPeriodNotFinished(uint256,uint256); + + /* ========== STATE VARIABLES ========== */ + /// Note: variables made internal for execution gas savings, available through getters below + + // Informational + string public name; + + ///// State Address Storage ///// + /// @notice Address of the timelock + address internal timelock_address; + /// @notice Address of the gauge controller + address internal immutable gauge_controller; + /// @notice Address of the FXS Rewards Distributor + address internal immutable rewards_distributor; + /// @notice Address of the rewardToken + address internal immutable reward_token;// = 0x3432B6A60D23Ca0dFCa7761B7ab56459D9C964D0; // FXS + + ///// Familial Gauge Storage ///// + /// @notice Array of all child gauges + address[] internal gauges; + /// @notice Whether a child gauge is active or not + mapping(address => bool) internal gauge_active; + /// @notice Global reward emission rate from Controller + uint256 internal global_emission_rate_stored; + /// @notice Time of the last vote from Controller + uint256 internal time_total_stored; + + /// @notice Total vote weight from gauge controller vote + uint256 internal total_familial_relative_weight; + /// @notice Redistributed relative gauge weights by gauge combined weight + mapping(address => uint256) internal gauge_to_last_relative_weight; + + /// @notice Sum of all child gauge `total_combined_weight` + uint256 internal familial_total_combined_weight; + /// @notice Each gauge's combined weight for this reward epoch, available at the farm + mapping(address => uint256) internal gauge_to_total_combined_weight; + + // Distributor provided + /// @notice The timestamp of the vote period + uint256 public weeks_elapsed; + /// @notice The amount of FXS awarded to the family by the vote, from the Distributor + uint256 public reward_tally; + /// @notice The redistributed FXS rewards payable to each child gauge + mapping(address => uint256) internal gauge_to_reward_tally; + + // Reward period & Time tracking + /// @notice The timestamp of the last reward period + uint256 internal periodFinish; + /// @notice The number of seconds in a week + uint256 internal constant rewardsDuration = 604800; // 7 * 86400 (7 days) + /// @notice For the first time children are added, pull in the reward period finish for each. + bool internal isFirstTimeAddingGauges; + + /* ========== MODIFIERS ========== */ + + modifier onlyByOwnGov() { + require(msg.sender == owner || msg.sender == timelock_address, "Not owner or timelock"); + _; + } + + /* ========== CONSTRUCTOR ========== */ + + constructor ( + string memory _name, + address _owner, + address _timelock_address, + address _rewards_distributor, + address _gauge_controller, + address _reward_token + ) Owned(_owner) { + timelock_address = _timelock_address; + + rewards_distributor = _rewards_distributor; + + name = _name; + + gauge_controller = _gauge_controller; + reward_token = _reward_token; + } + + /* ========== MUTATIVE FUNCTIONS ========== */ + + /// This should only have the full recalculation logic ran once per epoch. + /// The first gauge to call this will trigger the full tvl & weight recalc + /// As other familial gauges call it, they'll be able to obtain the updated values from storage + /// The farm must call this through the `sync_gauge_weights` or `sync` functions + /// @notice Updates the relative weights of all child gauges + /// @dev Note: unfortunately many of the steps in this process need to be done after completing previous step for all children + // - this results in numerous for loops being used + function gauge_relative_weight_write(address child_gauge, uint256 timestamp) external returns (uint256) { + // check that the child gauge is active + require(gauge_active[child_gauge], "Gauge not active"); + + // If now is after the last time everything was updated, obtain all values for all gauges & recalculate new rebalanced weights + if (block.timestamp > time_total_stored) { + //// First, update all the state variables applicable to all child gauges + // store the most recent time_total for the farms to use & prevent this logic from being executed until epoch + time_total_stored = IFraxGaugeController(gauge_controller).time_total();//latest_time_total; + + // get & set the gauge controller's last global emission rate + // note this should be the same for all gauges, but if there were to be multiple controllers, + // we would need to have the emission rate for each of them. + global_emission_rate_stored = IFraxGaugeController(gauge_controller).global_emission_rate();//gauge_to_controller[gauges[i]]).global_emission_rate(); + + // to prevent re-calling the first gauge + address _gauge_calling; + for (uint256 i; i < gauges.length; i++) { + if (child_gauge == gauges[i]) { + _gauge_calling = gauges[i]; + } + } + + /// NOTE requiring caller to be `msg.sender` ensures all gauges are distributed to. + /// To access this function, must call `sync_gauge_weights` on the gauge, which will call this + // require it to be one of the child gauges to ensure correctly updating all children + require(_gauge_calling == child_gauge && child_gauge == msg.sender, "Not a child gauge"); + + // zero out the stored familial combined weight + familial_total_combined_weight = 0; + + // get the familial vote weight for this period + total_familial_relative_weight = + IFraxGaugeController(gauge_controller).gauge_relative_weight_write(address(this), timestamp); + + // update all the gauge weights + for (uint256 i; i < gauges.length; i++) { + // it shouldn't be zero, unless we don't use `delete` to remove a gauge + if (gauge_active[gauges[i]]) { + /// update the child gauges' total combined weights + gauge_to_total_combined_weight[gauges[i]] = IFraxFarm(gauges[i]).totalCombinedWeight(); + familial_total_combined_weight += gauge_to_total_combined_weight[gauges[i]]; + } + } + + // divvy up the relative weights based on each gauges `total combined weight` + for (uint256 i; i < gauges.length; i++) { + if (gauge_active[gauges[i]]) { + gauge_to_last_relative_weight[gauges[i]] = + gauge_to_total_combined_weight[gauges[i]] * total_familial_relative_weight / familial_total_combined_weight; + } + } + + // pull in the reward tokens allocated to the fam + (weeks_elapsed, reward_tally) = IFraxGaugeFXSRewardsDistributor(rewards_distributor).distributeReward(address(this)); + emit FamilialRewardClaimed(address(this), weeks_elapsed, reward_tally); + + // divide the reward_tally amount by the gauge's allocation + // note this will be used when the farm calls `distributeReward` + for (uint256 i; i < gauges.length; i++) { + if (gauge_active[gauges[i]]) { + gauge_to_reward_tally[gauges[i]] = reward_tally * gauge_to_total_combined_weight[gauges[i]] / familial_total_combined_weight; + } + } + + // call `sync_gauge_weights` on the other gauges + for (uint256 i; i < gauges.length; i++) { + if (gauges[i] != _gauge_calling && gauge_active[gauges[i]]) { + IFraxFarm(gauges[i]).sync_gauge_weights(true); + } + } + /// Now all farms should have their relative weights updated. Let the calling farm finish execution + } + + // finally, return the gauge's (msg.sender) rebalanced relative weight + return gauge_to_last_relative_weight[child_gauge]; + } + + /// This is called by the farm during `retroCatchUp` + /// If this is registered as a middleman gauge, distributor will call pullAndBridge, which will distribute the reward to the gauge + /// note it might be easier to NOT set this as a middleman on the distributor + /// Needs to be reentered to allow all farms to execute in one call, so is only callable by a gauge + function distributeReward(address child_gauge) public returns (uint256, uint256) { + // check that the child gauge is active + require(gauge_active[child_gauge], "Gauge not active"); + + if (block.timestamp >= periodFinish) { + // Ensure the provided reward amount is not more than the balance in the contract. + // This keeps the reward rate in the right range, preventing overflows due to + // very high values of rewardRate in the earned and rewardsPerToken functions; + // Reward + leftover must be less than 2^256 / 10^18 to avoid overflow. + uint256 num_periods_elapsed = uint256(block.timestamp - periodFinish) / rewardsDuration; // Floor division to the nearest period + + // lastUpdateTime = periodFinish; + // update period finish here so that the next call to `distributeReward` will bypapss this logic + periodFinish = periodFinish + ((num_periods_elapsed + 1) * rewardsDuration); + + // to prevent re-calling the first gauge during the farm `sync` calls + address _gauge_calling; + for (uint256 i; i < gauges.length; i++) { + if (child_gauge == gauges[i]) { + _gauge_calling = gauges[i]; + } + } + + /// NOTE requiring caller to be `msg.sender` ensures all gauges are distributed to. + /// To access this function, must call `sync` on the gauge, which will call this + // require it to be one of the child gauges to ensure correctly updating all children + require(_gauge_calling == child_gauge && child_gauge == msg.sender, "Not a child gauge"); + + // now that this logic won't be ran on the next call & all gauges are within periodFinish, call each farm's `sync` + for (uint256 i; i < gauges.length; i++) { + if (gauges[i] != _gauge_calling && gauge_active[gauges[i]]) { + IFraxFarm(gauges[i]).sync(); + } + } + /// Now all gauges should have their rewards distributed. Let the calling gauge finish execution. + } + + // preserve the gauge's reward tally for returning to the gauge + uint256 claimingGaugeRewardTally = gauge_to_reward_tally[child_gauge]; + + /// when the reward is distributed, send the amount in gauge_to_reward_tally to the gauge & zero that value out + TransferHelper.safeTransfer(reward_token, child_gauge, claimingGaugeRewardTally); + + // reset the reward tally to zero for the gauge + gauge_to_reward_tally[child_gauge] = 0; + emit ChildGaugeRewardDistributed(child_gauge, gauge_to_reward_tally[child_gauge]); + + return (weeks_elapsed, claimingGaugeRewardTally); + } + + /* ========== RESTRICTED FUNCTIONS - Owner or timelock only ========== */ + + // Added to support recovering LP Rewards and other mistaken tokens from other systems to be distributed to holders + function recoverERC20(address tokenAddress, uint256 tokenAmount) external onlyByOwnGov { + // Only the owner address can ever receive the recovery withdrawal + TransferHelper.safeTransfer(tokenAddress, owner, tokenAmount); + emit RecoveredERC20(tokenAddress, tokenAmount); + } + + // Generic proxy + function execute( + address _to, + uint256 _value, + bytes calldata _data + ) external onlyByOwnGov returns (bool, bytes memory) { + (bool success, bytes memory result) = _to.call{value:_value}(_data); + return (success, result); + } + + function setTimelock(address _new_timelock) external onlyByOwnGov { + timelock_address = _new_timelock; + } + + function addChildGauge(address[] calldata _gauges) external onlyByOwnGov { + gauges = _gauges; + // set the latest period finish for the child gauges + for (uint256 i; i < gauges.length; i++) { + // set gauge to active + gauge_active[_gauges[i]] = true; + + emit ChildGaugeAdded(_gauges[i], gauges.length - 1); + + if (isFirstTimeAddingGauges) { + uint256 childGaugePeriodFinish = IFraxFarm(gauges[i]).periodFinish(); + if (childGaugePeriodFinish > periodFinish) { + periodFinish = childGaugePeriodFinish; + } + } + } + // don't need to re-run that lookup to sync in the future + if (isFirstTimeAddingGauges) { + isFirstTimeAddingGauges = false; + } + } + + function deactivateChildGauge(uint256 _gaugeIndex) external onlyByOwnGov { + emit ChildGaugeDeactivated(gauges[_gaugeIndex], _gaugeIndex); + gauge_active[gauges[_gaugeIndex]] = false; + } + + // function setRewardsDistributor(address _rewards_distributor) external onlyByOwnGov { + // emit RewardsDistributorChanged(rewards_distributor, _rewards_distributor); + // rewards_distributor = _rewards_distributor; + // } + + // function setGaugeController(address _gauge_controller) external onlyByOwnGov { + // emit GaugeControllerChanged(gauge_controller, _gauge_controller); + // gauge_controller = _gauge_controller; + // } + /* ========== GETTERS ========== */ + + /// @notice Matches the abi available in the farms + /// @return global_emission_rate The global emission rate from the controller + function global_emission_rate() external view returns (uint256) { + return global_emission_rate_stored; + } + + /// @notice Matches the abi available in the farms + /// @return time_total The end of the vote period from the controller + function time_total() external view returns (uint256) { + return time_total_stored; + } + + + function getNumberOfGauges() external view returns (uint256) { + return gauges.length; + } + + function getChildGauges() external view returns (address[] memory) { + return gauges; + } + + function getGaugeState(address _gauge) external view returns (bool) { + return gauge_active[_gauge]; + } + + function getStateAddresses() external view returns (address, address, address, address) { + return (timelock_address, gauge_controller, rewards_distributor, reward_token); + } + + /// @notice Returns the last relative weight and reward tally for a gauge + /// @return last_relative_weight The redistributed last relative weight of the gauge + /// @return reward_tally The redistributed reward tally of the gauge + function getChildGaugeValues(address child_gauge) external view returns (uint256, uint256) { + return ( + gauge_to_last_relative_weight[child_gauge], + gauge_to_reward_tally[child_gauge] + ); + } + + /// @notice Returns the `periodFinish` stored + /// @return periodFinish The periodFinish timestamp when gauges can call to distribute rewards + function getPeriodFinish() external view returns (uint256) { + return periodFinish; + } + + /* ========== EVENTS ========== */ + event ChildGaugeAdded(address gauge, uint256 gauge_index); + event ChildGaugeDeactivated(address gauge, uint256 gauge_index); + event GaugeControllerChanged(address old_controller, address new_controller); + event RewardsDistributorChanged(address old_distributor, address new_distributor); + event FamilialRewardClaimed(address familial_gauge, uint256 reward_amount, uint256 weeks_elapsed); + event ChildGaugeRewardDistributed(address gauge, uint256 reward_amount); + event RecoveredERC20(address token, uint256 amount); +} diff --git a/src/hardhat/contracts/Curve/IFraxFarm.sol b/src/hardhat/contracts/Curve/IFraxFarm.sol new file mode 100644 index 00000000..7a1e7d2b --- /dev/null +++ b/src/hardhat/contracts/Curve/IFraxFarm.sol @@ -0,0 +1,203 @@ +// SPDX-License-Identifier: MIT +pragma solidity >=0.8.0; + +interface IFraxswap { + function getReserves() + external + view + returns ( + uint112 reserve0, + uint112 reserve1, + uint32 blockTimestampLast + ); + + function token0() external view returns (address); + + function token1() external view returns (address); +} + +/// @notice Minimalistic IFraxFarmUniV3 +interface IFraxFarmUniV3TokenPositions { + function uni_token0() external view returns (address); + + function uni_token1() external view returns (address); +} + +interface IFraxswapERC20 { + function decimals() external view returns (uint8); +} + +interface IFraxFarm { + function owner() external view returns (address); + + function stakingToken() external view returns (address); + + function fraxPerLPToken() external view returns (uint256); + + function calcCurCombinedWeight(address account) + external + view + returns ( + uint256 old_combined_weight, + uint256 new_vefxs_multiplier, + uint256 new_combined_weight + ); + + function periodFinish() external view returns (uint256); + + function getAllRewardTokens() external view returns (address[] memory); + + function earned(address account) external view returns (uint256[] memory new_earned); + + function totalLiquidityLocked() external view returns (uint256); + + function lockedLiquidityOf(address account) external view returns (uint256); + + function totalCombinedWeight() external view returns (uint256); + + function combinedWeightOf(address account) external view returns (uint256); + + function lockMultiplier(uint256 secs) external view returns (uint256); + + function rewardRates(uint256 token_idx) external view returns (uint256 rwd_rate); + + function userStakedFrax(address account) external view returns (uint256); + + function proxyStakedFrax(address proxy_address) external view returns (uint256); + + function maxLPForMaxBoost(address account) external view returns (uint256); + + function minVeFXSForMaxBoost(address account) external view returns (uint256); + + function minVeFXSForMaxBoostProxy(address proxy_address) external view returns (uint256); + + function veFXSMultiplier(address account) external view returns (uint256 vefxs_multiplier); + + function toggleValidVeFXSProxy(address proxy_address) external; + + function proxyToggleStaker(address staker_address) external; + + function stakerSetVeFXSProxy(address proxy_address) external; + + function getReward(address destination_address) external returns (uint256[] memory); + + function getReward(address destination_address, bool also_claim_extra) external returns (uint256[] memory); + + function vefxs_max_multiplier() external view returns (uint256); + + function vefxs_boost_scale_factor() external view returns (uint256); + + function vefxs_per_frax_for_max_boost() external view returns (uint256); + + function getProxyFor(address addr) external view returns (address); + + function sync() external; + + function nominateNewOwner(address _owner) external; + + function acceptOwnership() external; + + function updateRewardAndBalance(address acct, bool sync) external; + + function setRewardVars( + address reward_token_address, + uint256 _new_rate, + address _gauge_controller_address, + address _rewards_distributor_address + ) external; + + function calcCurrLockMultiplier(address account, uint256 stake_idx) + external + view + returns (uint256 midpoint_lock_multiplier); + + function staker_designated_proxies(address staker_address) external view returns (address); + + function sync_gauge_weights(bool andForce) external; +} + +interface IFraxFarmTransfers { + function setAllowance(address spender, uint256 lockId, uint256 amount) external; + function removeAllowance(address spender, uint256 lockId) external; + function setApprovalForAll(address spender, bool approved) external; + function isApproved(address staker, uint256 lockId, uint256 amount) external view returns (bool); + function transferLockedFrom( + address sender_address, + address receiver_address, + uint256 sender_lock_index, + uint256 transfer_amount, + bool use_receiver_lock_index, + uint256 receiver_lock_index + ) external returns (uint256); + + function transferLocked( + address receiver_address, + uint256 sender_lock_index, + uint256 transfer_amount, + bool use_receiver_lock_index, + uint256 receiver_lock_index + ) external returns (uint256); + + function beforeLockTransfer(address operator, address from, uint256 lockId, bytes calldata data) external returns (bytes4); + function onLockReceived(address operator, address from, uint256 lockId, bytes memory data) external returns (bytes4); + +} + +interface IFraxFarmERC20 is IFraxFarm, IFraxFarmTransfers { + struct LockedStake { + uint256 start_timestamp; + uint256 liquidity; + uint256 ending_timestamp; + uint256 lock_multiplier; // 6 decimals of precision. 1x = 1000000 + } + + /// TODO this references the public getter for `lockedStakes` in the contract + function lockedStakes(address account, uint256 stake_idx) external view returns (LockedStake memory); + + function lockedStakesOf(address account) external view returns (LockedStake[] memory); + + function lockedStakesOfLength(address account) external view returns (uint256); + + function lockAdditional(uint256 lockId, uint256 addl_liq) external; + + function lockLonger(uint256 lockId, uint256 _newUnlockTimestamp) external; + + function stakeLocked(uint256 liquidity, uint256 secs) external returns (uint256); + + function withdrawLocked(uint256 lockId, address destination_address) external returns (uint256); +} + +interface IFraxFarmUniV3 is IFraxFarm, IFraxFarmUniV3TokenPositions { + struct LockedNFT { + uint256 token_id; // for Uniswap V3 LPs + uint256 liquidity; + uint256 start_timestamp; + uint256 ending_timestamp; + uint256 lock_multiplier; // 6 decimals of precision. 1x = 1000000 + int24 tick_lower; + int24 tick_upper; + } + + function uni_tick_lower() external view returns (int24); + + function uni_tick_upper() external view returns (int24); + + function uni_required_fee() external view returns (uint24); + + function lockedNFTsOf(address account) external view returns (LockedNFT[] memory); + + function lockedNFTsOfLength(address account) external view returns (uint256); + + function lockAdditional( + uint256 token_id, + uint256 token0_amt, + uint256 token1_amt, + uint256 token0_min_in, + uint256 token1_min_in, + bool use_balof_override + ) external; + + function stakeLocked(uint256 token_id, uint256 secs) external; + + function withdrawLocked(uint256 token_id, address destination_address) external; +} From 7e1b1e94e1032aac513034fe8eda59e01567a0c9 Mon Sep 17 00:00:00 2001 From: travis Date: Wed, 22 Feb 2023 21:38:42 -0400 Subject: [PATCH 17/37] periodic update --- README_TESTS.md | 11 +- foundry.toml | 39 + package-lock.json | 2507 ++++++++--------- remappings.txt | 3 + .../Curve/FraxFamilialPitchGauge.sol | 389 +++ .../contracts/Curve/FraxGaugeControllerV2.vy | 2 +- .../contracts/Curve/FraxMiddlemanGaugeV2.sol | 146 + src/hardhat/contracts/Curve/veFPIS.vy | 50 +- .../__CROSSCHAIN/CrossChainCanonicalV2.sol | 2 +- src/hardhat/contracts/Fraxferry/Fraxferry.sol | 14 +- .../contracts/Fraxferry/IFraxferry.sol | 68 + .../contracts/Fraxlend/IFraxlendAMOV3.sol | 52 + .../Misc_AMOs/echidna/IMasterPlatypusV3.sol | 50 + .../Misc_AMOs/hundred/ICErc20DelegatorOld.sol | 57 + .../Misc_AMOs/platypus/IMasterPlatypusV4.sol | 80 + .../contracts/Misc_AMOs/platypus/IVoter.sol | 38 + .../saddle/ISaddlePermissionlessSwap.sol | 38 + .../Staking/FraxCrossChainFarmV3.sol | 951 +++++++ .../Staking/FraxUnifiedFarmTemplate_V2.sol | 9 +- .../Staking/FraxUnifiedFarm_ERC20.sol | 2 +- .../Staking/FraxUnifiedFarm_ERC20_V2.sol | 106 +- ...dFarm_ERC20_V2_BEFORE_MANUAL_MERGE.sol.old | 2 +- .../FraxUnifiedFarm_KyberSwapElastic.sol | 2 +- src/hardhat/contracts/Staking/IFraxFarm.sol | 203 ++ .../contracts/Staking/ILockReceiver.sol | 4 +- .../Variants/FraxCCFarmV3_ArbiSaddleL2D4.sol | 18 + .../Staking/veFPISYieldDistributorV5.sol | 401 +++ .../__ARBITRUM/FraxCrossChainFarmV2-Tests.js | 901 ++++++ .../__ARBITRUM/FraxCrossChainFarmV3-Tests.js | 898 ++++++ src/hardhat/test/truffle-fixture-Arbitrum.js | 21 +- src/hardhat/test/truffle-fixture.js | 21 +- .../test/veFPISYieldDistributorV5-Tests.js | 472 ++++ src/types/constants.ts | 56 +- 33 files changed, 6131 insertions(+), 1482 deletions(-) create mode 100644 src/hardhat/contracts/Curve/FraxFamilialPitchGauge.sol create mode 100755 src/hardhat/contracts/Curve/FraxMiddlemanGaugeV2.sol mode change 100644 => 100755 src/hardhat/contracts/ERC20/__CROSSCHAIN/CrossChainCanonicalV2.sol create mode 100644 src/hardhat/contracts/Fraxferry/IFraxferry.sol create mode 100644 src/hardhat/contracts/Fraxlend/IFraxlendAMOV3.sol create mode 100644 src/hardhat/contracts/Misc_AMOs/echidna/IMasterPlatypusV3.sol create mode 100644 src/hardhat/contracts/Misc_AMOs/hundred/ICErc20DelegatorOld.sol create mode 100644 src/hardhat/contracts/Misc_AMOs/platypus/IMasterPlatypusV4.sol create mode 100644 src/hardhat/contracts/Misc_AMOs/platypus/IVoter.sol create mode 100644 src/hardhat/contracts/Misc_AMOs/saddle/ISaddlePermissionlessSwap.sol create mode 100755 src/hardhat/contracts/Staking/FraxCrossChainFarmV3.sol create mode 100644 src/hardhat/contracts/Staking/IFraxFarm.sol create mode 100755 src/hardhat/contracts/Staking/Variants/FraxCCFarmV3_ArbiSaddleL2D4.sol create mode 100755 src/hardhat/contracts/Staking/veFPISYieldDistributorV5.sol create mode 100644 src/hardhat/test/__ARBITRUM/FraxCrossChainFarmV2-Tests.js create mode 100644 src/hardhat/test/__ARBITRUM/FraxCrossChainFarmV3-Tests.js create mode 100644 src/hardhat/test/veFPISYieldDistributorV5-Tests.js diff --git a/README_TESTS.md b/README_TESTS.md index ab6137ec..3b3f8aea 100755 --- a/README_TESTS.md +++ b/README_TESTS.md @@ -1,9 +1,3 @@ -# PREP -1) Using SAMPLE.env and SAMPLE.env.forge, make local versions of .env and .env.forge -2) npm install -3) tsc -4) forge b - ## FORGE **------Testing------** Do first @@ -24,14 +18,17 @@ If you need to fork mainnet, single test contract Verbosely test a single contract while forking mainnet or ```source .env.forge && forge test --fork-url $MAINNET_RPC_URL -m veFPISProxy.t.sol -vvvvv``` for single test verbosity level 5 + ## Hardhat **------Testing------** +tsc cd ./src/hardhat npx hardhat compile ARBITRUM npx hardhat test ./test/__ARBITRUM/CrossChainBridgeBacker_ARBI_AnySwap-Tests.js npx hardhat test ./test/__ARBITRUM/FraxCrossChainFarmV2-Tests.js +npx hardhat test ./test/__ARBITRUM/FraxCrossChainFarmV3-Tests.js npx hardhat test ./test/__ARBITRUM/CurveAMO-ARBI-Tests.js AURORA @@ -91,6 +88,7 @@ npx hardhat test ./test/UniV3LiquidityAMO_V2-Tests.js npx hardhat test ./test/UniV3TWAPOracle-Tests.js npx hardhat test ./test/openzeppelin/ERC20.test.js npx hardhat test ./test/veFPIS-Tests.js +npx hardhat test ./test/veFPISYieldDistributorV5-Tests.js npx hardhat test ./test/veFXSYieldDistributorV4-Tests.js FANTOM @@ -115,4 +113,3 @@ npx hardhat test ./test/__OPTIMISM/CrossChainBridgeBacker_OPTI_Celer-Tests.js POLYGON npx hardhat test ./test/__POLYGON/CrossChainBridgeBacker_POLY_MaticBridge-Tests.js npx hardhat test ./test/__POLYGON/SushiSwapLiquidityAMO_POLY-Tests.js - diff --git a/foundry.toml b/foundry.toml index a6bfab0c..05b1e576 100644 --- a/foundry.toml +++ b/foundry.toml @@ -4,3 +4,42 @@ out = 'out' libs = ['node_modules', 'lib'] test = 'src/foundry/test/' cache_path = 'forge-cache' +remappings = [ + '@fraxmocks/=lib/frax-solidity/src/hardhat/contracts/mocks/', + '@staking/=/src/hardhat/contracts/Staking/', + '@openzeppelin-contracts/=lib/openzeppelin-contracts/', + 'openzeppelin-contracts/=lib/openzeppelin-contracts/contracts/', + '@openzeppelin/=lib/openzeppelin-contracts/', +] + +# See more config options https://github.com/foundry-rs/foundry/tree/master/config + +solc_version = "0.8.17" +gas_reports = ["*"] + +# settings for coverage reports +via_ir = true +optimizer = true #testing this out - was false +optimizer_runs = 100_000 + + +[profile.default.optimizer_details] +jumpdestRemover = true +orderLiterals = true +deduplicate = true + +yul = true +constantOptimizer = true +stackAllocation = true + +# Have `cse = true` commented out for faster testing compilation, +### but UNCOMMENT it for DEPLOYMENT! ### +cse = true + + +[profile.default.optimizer_details.yulDetails] +stackAllocation = true + +# Have `optimizerSteps = ""` uncommented for faster testing compilation, +### but COMMENT IT out for DEPLOYMENT!### +# optimizerSteps = "" \ No newline at end of file diff --git a/package-lock.json b/package-lock.json index a6d2cb0a..07a72619 100644 --- a/package-lock.json +++ b/package-lock.json @@ -270,33 +270,33 @@ } }, "node_modules/@babel/compat-data": { - "version": "7.20.10", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.20.10.tgz", - "integrity": "sha512-sEnuDPpOJR/fcafHMjpcpGN5M2jbUGUHwmuWKM/YdPzeEDJg8bgmbcWQFUfE32MQjti1koACvoPVsDe8Uq+idg==", + "version": "7.19.4", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.19.4.tgz", + "integrity": "sha512-CHIGpJcUQ5lU9KrPHTjBMhVwQG6CQjxfg36fGXl3qk/Gik1WwWachaXFuo0uCWJT/mStOKtcbFJCaVLihC1CMw==", "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/core": { - "version": "7.20.12", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.20.12.tgz", - "integrity": "sha512-XsMfHovsUYHFMdrIHkZphTN/2Hzzi78R08NuHfDBehym2VsPDL6Zn/JAD/JQdnRvbSsbQc4mVaU1m6JgtTEElg==", + "version": "7.19.6", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.19.6.tgz", + "integrity": "sha512-D2Ue4KHpc6Ys2+AxpIx1BZ8+UegLLLE2p3KJEuJRKmokHOtl49jQ5ny1773KsGLZs8MQvBidAF6yWUJxRqtKtg==", "peer": true, "dependencies": { "@ampproject/remapping": "^2.1.0", "@babel/code-frame": "^7.18.6", - "@babel/generator": "^7.20.7", - "@babel/helper-compilation-targets": "^7.20.7", - "@babel/helper-module-transforms": "^7.20.11", - "@babel/helpers": "^7.20.7", - "@babel/parser": "^7.20.7", - "@babel/template": "^7.20.7", - "@babel/traverse": "^7.20.12", - "@babel/types": "^7.20.7", + "@babel/generator": "^7.19.6", + "@babel/helper-compilation-targets": "^7.19.3", + "@babel/helper-module-transforms": "^7.19.6", + "@babel/helpers": "^7.19.4", + "@babel/parser": "^7.19.6", + "@babel/template": "^7.18.10", + "@babel/traverse": "^7.19.6", + "@babel/types": "^7.19.4", "convert-source-map": "^1.7.0", "debug": "^4.1.0", "gensync": "^1.0.0-beta.2", - "json5": "^2.2.2", + "json5": "^2.2.1", "semver": "^6.3.0" }, "engines": { @@ -317,12 +317,12 @@ } }, "node_modules/@babel/generator": { - "version": "7.20.7", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.20.7.tgz", - "integrity": "sha512-7wqMOJq8doJMZmP4ApXTzLxSr7+oO2jroJURrVEp6XShrQUObV8Tq/D0NCcoYg2uHqUrjzO0zwBjoYzelxK+sw==", + "version": "7.19.6", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.19.6.tgz", + "integrity": "sha512-oHGRUQeoX1QrKeJIKVe0hwjGqNnVYsM5Nep5zo0uE0m42sLH+Fsd2pStJ5sRM1bNyTUUoz0pe2lTeMJrb/taTA==", "peer": true, "dependencies": { - "@babel/types": "^7.20.7", + "@babel/types": "^7.19.4", "@jridgewell/gen-mapping": "^0.3.2", "jsesc": "^2.5.1" }, @@ -345,14 +345,13 @@ } }, "node_modules/@babel/helper-compilation-targets": { - "version": "7.20.7", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.20.7.tgz", - "integrity": "sha512-4tGORmfQcrc+bvrjb5y3dG9Mx1IOZjsHqQVUz7XCNHO+iTmqxWnVg3KRygjGmpRLJGdQSKuvFinbIb0CnZwHAQ==", + "version": "7.19.3", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.19.3.tgz", + "integrity": "sha512-65ESqLGyGmLvgR0mst5AdW1FkNlj9rQsCKduzEoEPhBCDFGXvz2jW6bXFG6i0/MrV2s7hhXjjb2yAzcPuQlLwg==", "dependencies": { - "@babel/compat-data": "^7.20.5", + "@babel/compat-data": "^7.19.3", "@babel/helper-validator-option": "^7.18.6", "browserslist": "^4.21.3", - "lru-cache": "^5.1.1", "semver": "^6.3.0" }, "engines": { @@ -440,39 +439,39 @@ } }, "node_modules/@babel/helper-module-transforms": { - "version": "7.20.11", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.20.11.tgz", - "integrity": "sha512-uRy78kN4psmji1s2QtbtcCSaj/LILFDp0f/ymhpQH5QY3nljUZCaNWz9X1dEj/8MBdBEFECs7yRhKn8i7NjZgg==", + "version": "7.19.6", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.19.6.tgz", + "integrity": "sha512-fCmcfQo/KYr/VXXDIyd3CBGZ6AFhPFy1TfSEJ+PilGVlQT6jcbqtHAM4C1EciRqMza7/TpOUZliuSH+U6HAhJw==", "peer": true, "dependencies": { "@babel/helper-environment-visitor": "^7.18.9", "@babel/helper-module-imports": "^7.18.6", - "@babel/helper-simple-access": "^7.20.2", + "@babel/helper-simple-access": "^7.19.4", "@babel/helper-split-export-declaration": "^7.18.6", "@babel/helper-validator-identifier": "^7.19.1", - "@babel/template": "^7.20.7", - "@babel/traverse": "^7.20.10", - "@babel/types": "^7.20.7" + "@babel/template": "^7.18.10", + "@babel/traverse": "^7.19.6", + "@babel/types": "^7.19.4" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-plugin-utils": { - "version": "7.20.2", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.20.2.tgz", - "integrity": "sha512-8RvlJG2mj4huQ4pZ+rU9lqKi9ZKiRmuvGuM2HlWmkmgOhbs6zEAw6IEiJ5cQqGbDzGZOhwuOQNtZMi/ENLjZoQ==", + "version": "7.19.0", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.19.0.tgz", + "integrity": "sha512-40Ryx7I8mT+0gaNxm8JGTZFUITNqdLAgdg0hXzeVZxVD6nFsdhQvip6v8dqkRHzsz1VFpFAaOCHNn0vKBL7Czw==", "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-simple-access": { - "version": "7.20.2", - "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.20.2.tgz", - "integrity": "sha512-+0woI/WPq59IrqDYbVGfshjT5Dmk/nnbdpcF8SnMhhXObpTq2KNBdLFRFrkVdbDOyUmHBCxzm5FHV1rACIkIbA==", + "version": "7.19.4", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.19.4.tgz", + "integrity": "sha512-f9Xq6WqBFqaDfbCzn2w85hwklswz5qsKlh7f08w4Y9yhJHpnNC0QemtSkK5YyOY8kPGvyiwdzZksGUhnGdaUIg==", "peer": true, "dependencies": { - "@babel/types": "^7.20.2" + "@babel/types": "^7.19.4" }, "engines": { "node": ">=6.9.0" @@ -515,14 +514,14 @@ } }, "node_modules/@babel/helpers": { - "version": "7.20.7", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.20.7.tgz", - "integrity": "sha512-PBPjs5BppzsGaxHQCDKnZ6Gd9s6xl8bBCluz3vEInLGRJmnZan4F6BYCeqtyXqkk4W5IlPmjK4JlOuZkpJ3xZA==", + "version": "7.19.4", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.19.4.tgz", + "integrity": "sha512-G+z3aOx2nfDHwX/kyVii5fJq+bgscg89/dJNWpYeKeBv3v9xX8EIabmx1k6u9LS04H7nROFVRVK+e3k0VHp+sw==", "peer": true, "dependencies": { - "@babel/template": "^7.20.7", - "@babel/traverse": "^7.20.7", - "@babel/types": "^7.20.7" + "@babel/template": "^7.18.10", + "@babel/traverse": "^7.19.4", + "@babel/types": "^7.19.4" }, "engines": { "node": ">=6.9.0" @@ -614,9 +613,9 @@ } }, "node_modules/@babel/parser": { - "version": "7.20.7", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.20.7.tgz", - "integrity": "sha512-T3Z9oHybU+0vZlY9CiDSJQTD5ZapcW18ZctFMi0MOAl/4BjFF4ul7NVSARLdbGO5vDqy9eQiGTV0LtKfvCYvcg==", + "version": "7.19.6", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.19.6.tgz", + "integrity": "sha512-h1IUp81s2JYJ3mRkdxJgs4UvmSsRvDrx5ICSJbPvtWYv5i1nTBGcBpnog+89rAFMwvvru6E5NUHdBe01UeSzYA==", "peer": true, "bin": { "parser": "bin/babel-parser.js" @@ -664,33 +663,33 @@ } }, "node_modules/@babel/template": { - "version": "7.20.7", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.20.7.tgz", - "integrity": "sha512-8SegXApWe6VoNw0r9JHpSteLKTpTiLZ4rMlGIm9JQ18KiCtyQiAMEazujAHrUS5flrcqYZa75ukev3P6QmUwUw==", + "version": "7.18.10", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.18.10.tgz", + "integrity": "sha512-TI+rCtooWHr3QJ27kJxfjutghu44DLnasDMwpDqCXVTal9RLp3RSYNh4NdBrRP2cQAoG9A8juOQl6P6oZG4JxA==", "peer": true, "dependencies": { "@babel/code-frame": "^7.18.6", - "@babel/parser": "^7.20.7", - "@babel/types": "^7.20.7" + "@babel/parser": "^7.18.10", + "@babel/types": "^7.18.10" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/traverse": { - "version": "7.20.12", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.20.12.tgz", - "integrity": "sha512-MsIbFN0u+raeja38qboyF8TIT7K0BFzz/Yd/77ta4MsUsmP2RAnidIlwq7d5HFQrH/OZJecGV6B71C4zAgpoSQ==", + "version": "7.19.6", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.19.6.tgz", + "integrity": "sha512-6l5HrUCzFM04mfbG09AagtYyR2P0B71B1wN7PfSPiksDPz2k5H9CBC1tcZpz2M8OxbKTPccByoOJ22rUKbpmQQ==", "peer": true, "dependencies": { "@babel/code-frame": "^7.18.6", - "@babel/generator": "^7.20.7", + "@babel/generator": "^7.19.6", "@babel/helper-environment-visitor": "^7.18.9", "@babel/helper-function-name": "^7.19.0", "@babel/helper-hoist-variables": "^7.18.6", "@babel/helper-split-export-declaration": "^7.18.6", - "@babel/parser": "^7.20.7", - "@babel/types": "^7.20.7", + "@babel/parser": "^7.19.6", + "@babel/types": "^7.19.4", "debug": "^4.1.0", "globals": "^11.1.0" }, @@ -699,9 +698,9 @@ } }, "node_modules/@babel/types": { - "version": "7.20.7", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.20.7.tgz", - "integrity": "sha512-69OnhBxSSgK0OzTJai4kyPDiKTIe3j+ctaHdIGVbRahTLAT7L3R9oeXHC2aVSuGYt3cVnoAMDmOCgJ2yaiLMvg==", + "version": "7.19.4", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.19.4.tgz", + "integrity": "sha512-M5LK7nAeS6+9j7hAq+b3fQs+pNfUtTGq+yFFfHnauFA8zQtLRfmuipmsKDKKLuyG+wC8ABW43A153YNawNTEtw==", "dependencies": { "@babel/helper-string-parser": "^7.19.4", "@babel/helper-validator-identifier": "^7.19.1", @@ -978,11 +977,11 @@ "dev": true }, "node_modules/@eth-optimism/contracts": { - "version": "0.5.39", - "resolved": "https://registry.npmjs.org/@eth-optimism/contracts/-/contracts-0.5.39.tgz", - "integrity": "sha512-u3UufuZFzgidRN2/cC3mhRxX+M6VsMV9tauIKu8D5pym5/UO4pZr85WP3KxHFfLh1i8zmkdj+pN/GRQsNYCqMg==", + "version": "0.5.37", + "resolved": "https://registry.npmjs.org/@eth-optimism/contracts/-/contracts-0.5.37.tgz", + "integrity": "sha512-HbNUUDIM1dUAM0hWPfGp3l9/Zte40zi8QhVbUSIwdYRA7jG7cZgbteqavrjW8wwFqxkWX9IrtA0KAR7pNlSAIQ==", "dependencies": { - "@eth-optimism/core-utils": "0.12.0", + "@eth-optimism/core-utils": "0.10.1", "@ethersproject/abstract-provider": "^5.7.0", "@ethersproject/abstract-signer": "^5.7.0" }, @@ -991,9 +990,9 @@ } }, "node_modules/@eth-optimism/core-utils": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/@eth-optimism/core-utils/-/core-utils-0.12.0.tgz", - "integrity": "sha512-qW+7LZYCz7i8dRa7SRlUKIo1VBU8lvN0HeXCxJR+z+xtMzMQpPds20XJNCMclszxYQHkXY00fOT6GvFw9ZL6nw==", + "version": "0.10.1", + "resolved": "https://registry.npmjs.org/@eth-optimism/core-utils/-/core-utils-0.10.1.tgz", + "integrity": "sha512-IJvG5UtYvyz6An9QdohlCLoeB3NBFxx2lRJKlPzvYYlfugUNNCHsajRIWIwJTcPRRma0WPd46JUsKACLJDdNrA==", "dependencies": { "@ethersproject/abi": "^5.7.0", "@ethersproject/abstract-provider": "^5.7.0", @@ -1943,13 +1942,37 @@ } }, "node_modules/@flashbots/ethers-provider-bundle": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/@flashbots/ethers-provider-bundle/-/ethers-provider-bundle-0.6.1.tgz", - "integrity": "sha512-W7tSX832mi7XKlbg4dIMzV1HMw5Dg0ox0YOqPxW2nO2JqsAZwWYFrAk4nNZnsqRdexHiPF4JUYez/ELI5VpScA==", + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/@flashbots/ethers-provider-bundle/-/ethers-provider-bundle-0.6.0.tgz", + "integrity": "sha512-+SVzxE7FIHq1mWeXwozfusJDGaDrQxc73SH2fHrRb3hf34SxJwdsBSfcYGQUdfSbw4vXF8ZpWTFigd5naY+vnw==", + "dependencies": { + "typescript": "4.1.2", + "uuid": "9.0.0" + }, "peerDependencies": { "ethers": "5.7.2" } }, + "node_modules/@flashbots/ethers-provider-bundle/node_modules/typescript": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.1.2.tgz", + "integrity": "sha512-thGloWsGH3SOxv1SoY7QojKi0tc+8FnOmiarEGMbd/lar7QOEd3hvlx3Fp5y6FlDUGl9L+pd4n2e+oToGMmhRQ==", + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=4.2.0" + } + }, + "node_modules/@flashbots/ethers-provider-bundle/node_modules/uuid": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.0.tgz", + "integrity": "sha512-MXcSTerfPa4uqyzStbRoTgt5XIe3x5+42+q1sDuy3R5MDk66URdLMOZe5aPX/SQd+kuYAh0FdP/pO28IkQyTeg==", + "bin": { + "uuid": "dist/bin/uuid" + } + }, "node_modules/@graphql-tools/batch-execute": { "version": "8.5.1", "resolved": "https://registry.npmjs.org/@graphql-tools/batch-execute/-/batch-execute-8.5.1.tgz", @@ -2401,9 +2424,9 @@ ] }, "node_modules/@noble/hashes": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.1.5.tgz", - "integrity": "sha512-LTMZiiLc+V4v1Yi16TD6aX2gmtKszNye0pQgbaLqkvhIqP7nVsSaJsWloGQjJfJ8offaoP5GtX3yY5swbcJxxQ==", + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.1.3.tgz", + "integrity": "sha512-CE0FCR57H2acVI5UOzIGSSIYxZ6v/HOhDR0Ro9VLyhnzLwx0o8W1mmgaqlEUx4049qJDlIBRztv5k+MM8vbO3A==", "funding": [ { "type": "individual", @@ -3005,6 +3028,18 @@ "node": ">=4" } }, + "node_modules/@nomiclabs/hardhat-etherscan/node_modules/cbor": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/cbor/-/cbor-8.1.0.tgz", + "integrity": "sha512-DwGjNW9omn6EwP70aXsn7FQJx5kO12tX0bZkaTjzdVFM6/7nhA4t0EENocKGx6D2Bch9PE2KzCUf5SceBdeijg==", + "dev": true, + "dependencies": { + "nofilter": "^3.1.0" + }, + "engines": { + "node": ">=12.19" + } + }, "node_modules/@nomiclabs/hardhat-etherscan/node_modules/chalk": { "version": "2.4.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", @@ -3075,6 +3110,15 @@ "graceful-fs": "^4.1.6" } }, + "node_modules/@nomiclabs/hardhat-etherscan/node_modules/nofilter": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/nofilter/-/nofilter-3.1.0.tgz", + "integrity": "sha512-l2NNj07e9afPnhAhvgVrCD/oy2Ai1yfLpuo3EpiO1jFTsB4sFz6oIfAfSZyQzVpkZQ9xS8ZS5g1jCBgq4Hwo0g==", + "dev": true, + "engines": { + "node": ">=12.19" + } + }, "node_modules/@nomiclabs/hardhat-etherscan/node_modules/semver": { "version": "6.3.0", "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", @@ -3467,9 +3511,9 @@ } }, "node_modules/@openzeppelin/upgrades-core": { - "version": "1.20.6", - "resolved": "https://registry.npmjs.org/@openzeppelin/upgrades-core/-/upgrades-core-1.20.6.tgz", - "integrity": "sha512-KWdtlahm+iunlAlzLsdpBueanwEx0LLPfAkDL1p0C4SPjMiUqHHFlyGtmmWwdiqDpJ//605vfwkd5RqfnFrHSg==", + "version": "1.20.1", + "resolved": "https://registry.npmjs.org/@openzeppelin/upgrades-core/-/upgrades-core-1.20.1.tgz", + "integrity": "sha512-GXvqLkMNY1dGj9BAIXiqYjdj/qgpoeTed+pH2OL4UOqMlxIh8yIYdkLE9wOWiUVVr0rhUGqaoaJ9NeFLlVzBQQ==", "dev": true, "dependencies": { "cbor": "^8.0.0", @@ -3481,6 +3525,27 @@ "solidity-ast": "^0.4.15" } }, + "node_modules/@openzeppelin/upgrades-core/node_modules/cbor": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/cbor/-/cbor-8.1.0.tgz", + "integrity": "sha512-DwGjNW9omn6EwP70aXsn7FQJx5kO12tX0bZkaTjzdVFM6/7nhA4t0EENocKGx6D2Bch9PE2KzCUf5SceBdeijg==", + "dev": true, + "dependencies": { + "nofilter": "^3.1.0" + }, + "engines": { + "node": ">=12.19" + } + }, + "node_modules/@openzeppelin/upgrades-core/node_modules/nofilter": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/nofilter/-/nofilter-3.1.0.tgz", + "integrity": "sha512-l2NNj07e9afPnhAhvgVrCD/oy2Ai1yfLpuo3EpiO1jFTsB4sFz6oIfAfSZyQzVpkZQ9xS8ZS5g1jCBgq4Hwo0g==", + "dev": true, + "engines": { + "node": ">=12.19" + } + }, "node_modules/@poanet/solidity-flattener": { "version": "3.0.8", "resolved": "https://registry.npmjs.org/@poanet/solidity-flattener/-/solidity-flattener-3.0.8.tgz", @@ -3892,9 +3957,9 @@ } }, "node_modules/@solana/buffer-layout": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/@solana/buffer-layout/-/buffer-layout-4.0.1.tgz", - "integrity": "sha512-E1ImOIAD1tBZFRdjeM4/pzTiTApC0AOBGwyAMS4fwIodCWArzJ3DWdoh8cKxeFM2fElkxBh2Aqts1BPC373rHA==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@solana/buffer-layout/-/buffer-layout-4.0.0.tgz", + "integrity": "sha512-lR0EMP2HC3+Mxwd4YcnZb0smnaDw7Bl2IQWZiTevRH5ZZBZn6VRWn3/92E3qdU4SSImJkA6IDHawOHAnx/qUvQ==", "dependencies": { "buffer": "~6.0.3" }, @@ -3982,9 +4047,9 @@ } }, "node_modules/@solidity-parser/parser": { - "version": "0.14.5", - "resolved": "https://registry.npmjs.org/@solidity-parser/parser/-/parser-0.14.5.tgz", - "integrity": "sha512-6dKnHZn7fg/iQATVEzqyUOyEidbn05q7YA2mQ9hC0MMXhhV3/JrsxmFSYZAcr7j1yUP700LLhTruvJ3MiQmjJg==", + "version": "0.14.3", + "resolved": "https://registry.npmjs.org/@solidity-parser/parser/-/parser-0.14.3.tgz", + "integrity": "sha512-29g2SZ29HtsqA58pLCtopI1P/cPy5/UAzlcAXO6T/CNJimG6yA8kx4NaseMyJULiC+TEs02Y9/yeHzClqoA0hw==", "dependencies": { "antlr4ts": "^0.5.0-alpha.4" } @@ -4024,33 +4089,13 @@ "cbor": "^5.2.0" } }, - "node_modules/@truffle/code-utils/node_modules/cbor": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/cbor/-/cbor-5.2.0.tgz", - "integrity": "sha512-5IMhi9e1QU76ppa5/ajP1BmMWZ2FHkhAhjeVKQ/EFCgYSEaeVaoGtL7cxJskf9oCCk+XjzaIdc3IuU/dbA/o2A==", - "dependencies": { - "bignumber.js": "^9.0.1", - "nofilter": "^1.0.4" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@truffle/code-utils/node_modules/nofilter": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/nofilter/-/nofilter-1.0.4.tgz", - "integrity": "sha512-N8lidFp+fCz+TD51+haYdbDGrcBWwuHX40F5+z0qkUjMJ5Tp+rdSuAkMJ9N9eoolDlEVTf6u5icM+cNKkKW2mA==", - "engines": { - "node": ">=8" - } - }, "node_modules/@truffle/codec": { - "version": "0.14.12", - "resolved": "https://registry.npmjs.org/@truffle/codec/-/codec-0.14.12.tgz", - "integrity": "sha512-0RIUoZQiGqNNp0zogeoCLoFoKSY65ih129rjrDqyv7Yy+IIpKgdOk8zZqg2sWIt7ukQFjZmAOwPznhYNGg/eKA==", + "version": "0.14.11", + "resolved": "https://registry.npmjs.org/@truffle/codec/-/codec-0.14.11.tgz", + "integrity": "sha512-NgfMNYemgMXqoEcJA5ZsEhxChCwq33rSxtNxlececEH/1Nf0r+ryfrfmLlyPmv8f3jorVf1GWa0zI0AedGCGYQ==", "dependencies": { "@truffle/abi-utils": "^0.3.6", - "@truffle/compile-common": "^0.9.2", + "@truffle/compile-common": "^0.9.1", "big.js": "^6.0.3", "bn.js": "^5.1.3", "cbor": "^5.2.0", @@ -4061,18 +4106,6 @@ "web3-utils": "1.8.1" } }, - "node_modules/@truffle/codec/node_modules/cbor": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/cbor/-/cbor-5.2.0.tgz", - "integrity": "sha512-5IMhi9e1QU76ppa5/ajP1BmMWZ2FHkhAhjeVKQ/EFCgYSEaeVaoGtL7cxJskf9oCCk+XjzaIdc3IuU/dbA/o2A==", - "dependencies": { - "bignumber.js": "^9.0.1", - "nofilter": "^1.0.4" - }, - "engines": { - "node": ">=6.0.0" - } - }, "node_modules/@truffle/codec/node_modules/lru-cache": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", @@ -4084,14 +4117,6 @@ "node": ">=10" } }, - "node_modules/@truffle/codec/node_modules/nofilter": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/nofilter/-/nofilter-1.0.4.tgz", - "integrity": "sha512-N8lidFp+fCz+TD51+haYdbDGrcBWwuHX40F5+z0qkUjMJ5Tp+rdSuAkMJ9N9eoolDlEVTf6u5icM+cNKkKW2mA==", - "engines": { - "node": ">=8" - } - }, "node_modules/@truffle/codec/node_modules/semver": { "version": "7.3.7", "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz", @@ -4112,28 +4137,23 @@ "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" }, "node_modules/@truffle/compile-common": { - "version": "0.9.2", - "resolved": "https://registry.npmjs.org/@truffle/compile-common/-/compile-common-0.9.2.tgz", - "integrity": "sha512-n7MF/4/dntccj44RGe3PRMD8Vk46PU8dJtzd1VLAfgokK2Y2N+SjAzDskBnmAydZVWAM315nZIUQsgnY8xoATw==", + "version": "0.9.1", + "resolved": "https://registry.npmjs.org/@truffle/compile-common/-/compile-common-0.9.1.tgz", + "integrity": "sha512-mhdkX6ExZImHSBO3jGm6aAn8NpVtMTdjq50jRXY/O59/ZNC0J9WpRapxrAKUVNc+XydMdBlfeEpXoqTJg7cbXw==", "dependencies": { - "@truffle/error": "^0.2.0", + "@truffle/error": "^0.1.1", "colors": "1.4.0" } }, - "node_modules/@truffle/compile-common/node_modules/@truffle/error": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/@truffle/error/-/error-0.2.0.tgz", - "integrity": "sha512-Fe0/z4WWb7IP2gBnv3l6zqP87Y0kSMs7oiSLakKJq17q3GUunrHSdioKuNspdggxkXIBhEQLhi8C+LJdwmHKWQ==" - }, "node_modules/@truffle/config": { - "version": "1.3.48", - "resolved": "https://registry.npmjs.org/@truffle/config/-/config-1.3.48.tgz", - "integrity": "sha512-Q+Tw9+HLcFJEReTL0x408Qb08hh1qwGnnwGm+Xd5xmg1HWAFOEE0k4Sm553goqqKhwzDgtYb0YddJ61zTardJw==", + "version": "1.3.47", + "resolved": "https://registry.npmjs.org/@truffle/config/-/config-1.3.47.tgz", + "integrity": "sha512-L7Gh+HC7xRVGF/rrZoUnJK7pjrTJpnmnSSo+Dt1wGQXHWSn5eq6pMoRzjmp6OgKovrOe0uyBAjFUOlIgVpZwXQ==", "optional": true, "dependencies": { - "@truffle/error": "^0.2.0", + "@truffle/error": "^0.1.1", "@truffle/events": "^0.1.20", - "@truffle/provider": "^0.3.2", + "@truffle/provider": "^0.3.1", "conf": "^10.1.2", "debug": "^4.3.1", "find-up": "^2.1.0", @@ -4141,12 +4161,6 @@ "original-require": "^1.0.1" } }, - "node_modules/@truffle/config/node_modules/@truffle/error": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/@truffle/error/-/error-0.2.0.tgz", - "integrity": "sha512-Fe0/z4WWb7IP2gBnv3l6zqP87Y0kSMs7oiSLakKJq17q3GUunrHSdioKuNspdggxkXIBhEQLhi8C+LJdwmHKWQ==", - "optional": true - }, "node_modules/@truffle/config/node_modules/find-up": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", @@ -4215,16 +4229,16 @@ } }, "node_modules/@truffle/contract": { - "version": "4.6.11", - "resolved": "https://registry.npmjs.org/@truffle/contract/-/contract-4.6.11.tgz", - "integrity": "sha512-0YUS+4D4M+tLFx9JSxFgr7zfYBnHytmLDBjQKemhH/19NbSfos3bajdB08nKAphVM7IisoKnaCd5HOsEWusJJw==", + "version": "4.6.10", + "resolved": "https://registry.npmjs.org/@truffle/contract/-/contract-4.6.10.tgz", + "integrity": "sha512-69IZSXeQKRP3EutILqe+vLY5A5gUpeXUiZhm/Fy/qHHkP238vMjtOkTZGkY6bonYqmgk+vDY7KSYSYKzDNPdCA==", "dev": true, "dependencies": { "@ensdomains/ensjs": "^2.1.0", "@truffle/blockchain-utils": "^0.1.6", "@truffle/contract-schema": "^3.4.11", - "@truffle/debug-utils": "^6.0.43", - "@truffle/error": "^0.2.0", + "@truffle/debug-utils": "^6.0.42", + "@truffle/error": "^0.1.1", "@truffle/interface-adapter": "^0.5.26", "bignumber.js": "^7.2.1", "debug": "^4.3.1", @@ -4246,12 +4260,6 @@ "debug": "^4.3.1" } }, - "node_modules/@truffle/contract/node_modules/@truffle/error": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/@truffle/error/-/error-0.2.0.tgz", - "integrity": "sha512-Fe0/z4WWb7IP2gBnv3l6zqP87Y0kSMs7oiSLakKJq17q3GUunrHSdioKuNspdggxkXIBhEQLhi8C+LJdwmHKWQ==", - "dev": true - }, "node_modules/@truffle/contract/node_modules/bignumber.js": { "version": "7.2.1", "resolved": "https://registry.npmjs.org/bignumber.js/-/bignumber.js-7.2.1.tgz", @@ -4261,12 +4269,6 @@ "node": "*" } }, - "node_modules/@truffle/contract/node_modules/bn.js": { - "version": "4.12.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", - "dev": true - }, "node_modules/@truffle/contract/node_modules/ethers": { "version": "4.0.49", "resolved": "https://registry.npmjs.org/ethers/-/ethers-4.0.49.tgz", @@ -4284,6 +4286,12 @@ "xmlhttprequest": "1.8.0" } }, + "node_modules/@truffle/contract/node_modules/ethers/node_modules/bn.js": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", + "dev": true + }, "node_modules/@truffle/contract/node_modules/hash.js": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.3.tgz", @@ -4388,16 +4396,16 @@ "optional": true }, "node_modules/@truffle/db": { - "version": "2.0.11", - "resolved": "https://registry.npmjs.org/@truffle/db/-/db-2.0.11.tgz", - "integrity": "sha512-OozYKh4aw8AxGzQ8O1sXakvmhZtSFbUn45AvbqPHIBiOZ/pmb4KoNdcE5xeAUwS0k+gWuDoTo50NycpqJxkhYA==", + "version": "2.0.10", + "resolved": "https://registry.npmjs.org/@truffle/db/-/db-2.0.10.tgz", + "integrity": "sha512-APlORen3CwilujWZFTNhsX8yRWbNj7ifhuaLckNaWOcQ0knE7nrjHf2pXCdgtgRLP9Ae91jWHm32+7eLYgYpZA==", "optional": true, "dependencies": { "@graphql-tools/delegate": "^8.4.3", "@graphql-tools/schema": "^8.3.1", "@truffle/abi-utils": "^0.3.6", "@truffle/code-utils": "^3.0.1", - "@truffle/config": "^1.3.48", + "@truffle/config": "^1.3.47", "abstract-leveldown": "^7.2.0", "apollo-server": "^3.11.0", "debug": "^4.3.1", @@ -4415,11 +4423,11 @@ } }, "node_modules/@truffle/db-loader": { - "version": "0.2.11", - "resolved": "https://registry.npmjs.org/@truffle/db-loader/-/db-loader-0.2.11.tgz", - "integrity": "sha512-C0uSqeFXAdw1yH/k+yMqz8fbmRLxY+etd8JKorcW1O2ieYmoFpF1mCdwdryl0X37pdlPV8yZrRAo48YFrgy1Pw==", + "version": "0.2.10", + "resolved": "https://registry.npmjs.org/@truffle/db-loader/-/db-loader-0.2.10.tgz", + "integrity": "sha512-07Vf1yuwJur78K4hgG//MGEvLL4ZAnEu6BBvGK/ZSJ/iIQjj9a4wgQgXrAKMsbPGNEtR7qy+0WpvOslpaDnQZQ==", "optionalDependencies": { - "@truffle/db": "^2.0.11" + "@truffle/db": "^2.0.10" } }, "node_modules/@truffle/db/node_modules/abstract-leveldown": { @@ -4476,12 +4484,12 @@ } }, "node_modules/@truffle/debug-utils": { - "version": "6.0.43", - "resolved": "https://registry.npmjs.org/@truffle/debug-utils/-/debug-utils-6.0.43.tgz", - "integrity": "sha512-vJQmfSyrEgLjn7tp7K6WlZAkjISb5MFlN8mAjGnMz30Ja6/cTMQ0l6NLZGPYgZYk5uB4KrqcmNC+PqXrgXWt2Q==", + "version": "6.0.42", + "resolved": "https://registry.npmjs.org/@truffle/debug-utils/-/debug-utils-6.0.42.tgz", + "integrity": "sha512-9v70tj+My0Z2UZJ9OsuUlfo4Dt2AJqAQa/YWtGe28H8zsi+o9Dca0RsKWecuprdllgzrEs7ad8QUtSINhwjIlg==", "dev": true, "dependencies": { - "@truffle/codec": "^0.14.12", + "@truffle/codec": "^0.14.11", "@trufflesuite/chromafi": "^3.0.0", "bn.js": "^5.1.3", "chalk": "^2.4.2", @@ -4561,13 +4569,13 @@ } }, "node_modules/@truffle/debugger": { - "version": "11.0.22", - "resolved": "https://registry.npmjs.org/@truffle/debugger/-/debugger-11.0.22.tgz", - "integrity": "sha512-U2eCusUqYQsA13Tex5kVLGqn4nWWJewZBmnHbyOL6R1WX/aqXcs7gQhPgAuSw5kMtgmZ1DhtNZhlQ5RvkE8zhA==", + "version": "11.0.21", + "resolved": "https://registry.npmjs.org/@truffle/debugger/-/debugger-11.0.21.tgz", + "integrity": "sha512-iYoa01CzFVFhusXrQM34cTRqKT7W2KHoyciYo14IUjPAnUk/i7DwB4zcTqOfgTyz36G2Yd92uYf8Rc2t0Sdv0w==", "dependencies": { "@truffle/abi-utils": "^0.3.6", - "@truffle/codec": "^0.14.12", - "@truffle/source-map-utils": "^1.3.104", + "@truffle/codec": "^0.14.11", + "@truffle/source-map-utils": "^1.3.103", "bn.js": "^5.1.3", "debug": "^4.3.1", "json-pointer": "^0.6.1", @@ -4614,8 +4622,7 @@ "node_modules/@truffle/error": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/@truffle/error/-/error-0.1.1.tgz", - "integrity": "sha512-sE7c9IHIGdbK4YayH4BC8i8qMjoAOeg6nUXUDZZp8wlU21/EMpaG+CLx+KqcIPyR+GSWIW3Dm0PXkr2nlggFDA==", - "dev": true + "integrity": "sha512-sE7c9IHIGdbK4YayH4BC8i8qMjoAOeg6nUXUDZZp8wlU21/EMpaG+CLx+KqcIPyR+GSWIW3Dm0PXkr2nlggFDA==" }, "node_modules/@truffle/events": { "version": "0.1.20", @@ -4762,30 +4769,24 @@ "optional": true }, "node_modules/@truffle/provider": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/@truffle/provider/-/provider-0.3.2.tgz", - "integrity": "sha512-WJ0ebmFYIILg+P0Xa7MnBrjrnbxtyOIOpcGZ8UF0jA+WXp8gFRVs7YYteCJezTwrEZ6JzOCnC5G3vshJzf7GsA==", + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/@truffle/provider/-/provider-0.3.1.tgz", + "integrity": "sha512-qYSRjAprIylgmHl+Lq2Fzn8gevJ5vmCk3Gc3Zlpi7jkjL3SS14eOH0A5BqJWFkzJB43tPBHAXY1KWLYio3/3gg==", "optional": true, "dependencies": { - "@truffle/error": "^0.2.0", + "@truffle/error": "^0.1.1", "@truffle/interface-adapter": "^0.5.26", "debug": "^4.3.1", "web3": "1.8.1" } }, - "node_modules/@truffle/provider/node_modules/@truffle/error": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/@truffle/error/-/error-0.2.0.tgz", - "integrity": "sha512-Fe0/z4WWb7IP2gBnv3l6zqP87Y0kSMs7oiSLakKJq17q3GUunrHSdioKuNspdggxkXIBhEQLhi8C+LJdwmHKWQ==", - "optional": true - }, "node_modules/@truffle/source-map-utils": { - "version": "1.3.104", - "resolved": "https://registry.npmjs.org/@truffle/source-map-utils/-/source-map-utils-1.3.104.tgz", - "integrity": "sha512-AVD1+jnw/zj7Vqw8i8RIZ4pMEW69bAqTKjJbY6kFsxG9S1oi7ZEUFSBvuja/JNm8xkmmAwIc0NOkQr2K2G/rSA==", + "version": "1.3.103", + "resolved": "https://registry.npmjs.org/@truffle/source-map-utils/-/source-map-utils-1.3.103.tgz", + "integrity": "sha512-zLh8brf4s1MlwrsPABDP2LFY9rv5MtUE8iG5Np7guOtg50mucq2gN6XMAReQXJC4yY0an16YcnHMODpS48XD3Q==", "dependencies": { "@truffle/code-utils": "^3.0.1", - "@truffle/codec": "^0.14.12", + "@truffle/codec": "^0.14.11", "debug": "^4.3.1", "json-pointer": "^0.6.1", "node-interval-tree": "^1.3.3", @@ -4934,9 +4935,9 @@ } }, "node_modules/@types/abstract-leveldown": { - "version": "7.2.1", - "resolved": "https://registry.npmjs.org/@types/abstract-leveldown/-/abstract-leveldown-7.2.1.tgz", - "integrity": "sha512-YK8irIC+eMrrmtGx0H4ISn9GgzLd9dojZWJaMbjp1YHLl2VqqNFBNrL5Q3KjGf4VE3sf/4hmq6EhQZ7kZp1NoQ==" + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@types/abstract-leveldown/-/abstract-leveldown-7.2.0.tgz", + "integrity": "sha512-q5veSX6zjUy/DlDhR4Y4cU0k2Ar+DT2LUraP00T19WLmTO6Se1djepCCaqU6nQrwcJ5Hyo/CWqxTzrrFg8eqbQ==" }, "node_modules/@types/accepts": { "version": "1.3.5", @@ -4980,20 +4981,20 @@ } }, "node_modules/@types/cacheable-request": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/@types/cacheable-request/-/cacheable-request-6.0.3.tgz", - "integrity": "sha512-IQ3EbTzGxIigb1I3qPZc1rWJnH0BmSKv5QYTalEwweFvyBDLSAe24zP0le/hyi7ecGfZVlIVAg4BZqb8WBwKqw==", + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/@types/cacheable-request/-/cacheable-request-6.0.2.tgz", + "integrity": "sha512-B3xVo+dlKM6nnKTcmm5ZtY/OL8bOAOd2Olee9M1zft65ox50OzjEHW91sDiU9j6cvW8Ejg1/Qkf4xd2kugApUA==", "dependencies": { "@types/http-cache-semantics": "*", - "@types/keyv": "^3.1.4", + "@types/keyv": "*", "@types/node": "*", - "@types/responselike": "^1.0.0" + "@types/responselike": "*" } }, "node_modules/@types/chai": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/@types/chai/-/chai-4.3.4.tgz", - "integrity": "sha512-KnRanxnpfpjUTqTCXslZSEdLfXExwgNxYPdiO2WGUj8+HDjFi8R3k5RVKPeSCzLjCcshCAtVO2QBbVuAV4kTnw==", + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/@types/chai/-/chai-4.3.3.tgz", + "integrity": "sha512-hC7OMnszpxhZPduX+m+nrx+uFoLkWOMiR4oa/AZF3MuSETYTZmFfJAHqZEM8MVlvfG7BEUcgvtwoCTxBp6hm3g==", "dev": true }, "node_modules/@types/concat-stream": { @@ -5046,9 +5047,9 @@ } }, "node_modules/@types/express-serve-static-core": { - "version": "4.17.32", - "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.17.32.tgz", - "integrity": "sha512-aI5h/VOkxOF2Z1saPy0Zsxs5avets/iaiAJYznQFm5By/pamU31xWKL//epiF4OfUA2qTOc9PV6tCUjhO8wlZA==", + "version": "4.17.31", + "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.17.31.tgz", + "integrity": "sha512-DxMhY+NAsTwMMFHBTtJFNp5qiHKJ7TeqOo23zVEM9alT1Ml27Q3xcTH0xwxn7Q0BbMcVEJOs/7aQtUWupUQN3Q==", "dependencies": { "@types/node": "*", "@types/qs": "*", @@ -5078,11 +5079,12 @@ "integrity": "sha512-SZs7ekbP8CN0txVG2xVRH6EgKmEm31BOxA07vkFaETzZz1xh+cbt8BcI0slpymvwhx5dlFnQG2rTlPVQn+iRPQ==" }, "node_modules/@types/keyv": { - "version": "3.1.4", - "resolved": "https://registry.npmjs.org/@types/keyv/-/keyv-3.1.4.tgz", - "integrity": "sha512-BQ5aZNSCpj7D6K2ksrRCTmKRLEpnPvWDiLPfoGyhZ++8YtiK9d/3DBKPJgry359X/P1PfruyYwvnvwFjuEiEIg==", + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@types/keyv/-/keyv-4.2.0.tgz", + "integrity": "sha512-xoBtGl5R9jeKUhc8ZqeYaRDx04qqJ10yhhXYGmJ4Jr8qKpvMsDQQrNUvF/wUJ4klOtmJeJM+p2Xo3zp9uaC3tw==", + "deprecated": "This is a stub types definition. keyv provides its own type definitions, so you do not need this installed.", "dependencies": { - "@types/node": "*" + "keyv": "*" } }, "node_modules/@types/level-errors": { @@ -5154,9 +5156,9 @@ } }, "node_modules/@types/prettier": { - "version": "2.7.2", - "resolved": "https://registry.npmjs.org/@types/prettier/-/prettier-2.7.2.tgz", - "integrity": "sha512-KufADq8uQqo1pYKVIYzfKbJfBAc0sOeXqGbFaSpv8MRmC/zXgowNZmFcbngndGk922QDmOASEXUZCaY48gs4cg==", + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/@types/prettier/-/prettier-2.7.1.tgz", + "integrity": "sha512-ri0UmynRRvZiiUJdiz38MmIblKK+oH30MztdBVR95dv/Ubw6neWSb8u1XpRb72L4qsZOhz+L+z9JD40SJmfWow==", "dev": true }, "node_modules/@types/qs": { @@ -5213,9 +5215,9 @@ } }, "node_modules/@types/sinon-chai": { - "version": "3.2.9", - "resolved": "https://registry.npmjs.org/@types/sinon-chai/-/sinon-chai-3.2.9.tgz", - "integrity": "sha512-/19t63pFYU0ikrdbXKBWj9PCdnKyTd0Qkz0X91Ta081cYsq90OxYdcWwK/dwEoDa6dtXgj2HJfmzgq+QZTHdmQ==", + "version": "3.2.8", + "resolved": "https://registry.npmjs.org/@types/sinon-chai/-/sinon-chai-3.2.8.tgz", + "integrity": "sha512-d4ImIQbT/rKMG8+AXpmcan5T2/PNeSjrYhvkwet6z0p8kzYtfgA32xzOBlbU0yqJfq+/0Ml805iFoODO0LP5/g==", "dev": true, "dependencies": { "@types/chai": "*", @@ -5479,7 +5481,8 @@ "node_modules/@yarnpkg/lockfile": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/@yarnpkg/lockfile/-/lockfile-1.1.0.tgz", - "integrity": "sha512-GpSwvyXOcOOlV70vbnzjj4fW5xW/FdUF6nQEt1ENy7m4ZCczi1+/buVUPAqmGfqznsORNFzUMjctTIp8a9tuCQ==" + "integrity": "sha512-GpSwvyXOcOOlV70vbnzjj4fW5xW/FdUF6nQEt1ENy7m4ZCczi1+/buVUPAqmGfqznsORNFzUMjctTIp8a9tuCQ==", + "dev": true }, "node_modules/abbrev": { "version": "1.1.1", @@ -5617,6 +5620,14 @@ "node": ">= 8.0.0" } }, + "node_modules/agentkeepalive/node_modules/depd": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", + "integrity": "sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==", + "engines": { + "node": ">= 0.6" + } + }, "node_modules/aggregate-error": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", @@ -5662,9 +5673,9 @@ } }, "node_modules/ajv-formats/node_modules/ajv": { - "version": "8.12.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz", - "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==", + "version": "8.11.2", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.11.2.tgz", + "integrity": "sha512-E4bfmKAhGiSTvMfL1Myyycaub+cUEU2/IvpylXkUu7CHBkBj1f/ikdzbD7YQ6FKUbixDxeYvB/xY4fvyroDlQg==", "optional": true, "dependencies": { "fast-deep-equal": "^3.1.1", @@ -5739,9 +5750,9 @@ "integrity": "sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==" }, "node_modules/anymatch": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", - "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz", + "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==", "dependencies": { "normalize-path": "^3.0.0", "picomatch": "^2.0.4" @@ -5952,17 +5963,6 @@ "@types/serve-static": "*" } }, - "node_modules/apollo-server-express/node_modules/@types/express-serve-static-core": { - "version": "4.17.31", - "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.17.31.tgz", - "integrity": "sha512-DxMhY+NAsTwMMFHBTtJFNp5qiHKJ7TeqOo23zVEM9alT1Ml27Q3xcTH0xwxn7Q0BbMcVEJOs/7aQtUWupUQN3Q==", - "optional": true, - "dependencies": { - "@types/node": "*", - "@types/qs": "*", - "@types/range-parser": "*" - } - }, "node_modules/apollo-server-plugin-base": { "version": "3.7.1", "resolved": "https://registry.npmjs.org/apollo-server-plugin-base/-/apollo-server-plugin-base-3.7.1.tgz", @@ -6061,6 +6061,13 @@ "safe-buffer": "~5.1.0" } }, + "node_modules/arg": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz", + "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==", + "optional": true, + "peer": true + }, "node_modules/argparse": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", @@ -6098,13 +6105,13 @@ } }, "node_modules/array.prototype.reduce": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/array.prototype.reduce/-/array.prototype.reduce-1.0.5.tgz", - "integrity": "sha512-kDdugMl7id9COE8R7MHF5jWk7Dqt/fs4Pv+JXoICnYwqpjjjbUurz6w5fT5IG6brLdJhv6/VoHB0H7oyIBXd+Q==", + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/array.prototype.reduce/-/array.prototype.reduce-1.0.4.tgz", + "integrity": "sha512-WnM+AjG/DvLRLo4DDl+r+SvCzYtD2Jd9oeBYMcEaI7t3fFrHY9M53/wdLcTvmZNQ70IU6Htj0emFkZ5TS+lrdw==", "dependencies": { "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4", + "define-properties": "^1.1.3", + "es-abstract": "^1.19.2", "es-array-method-boxes-properly": "^1.0.0", "is-string": "^1.0.7" }, @@ -6230,6 +6237,7 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/at-least-node/-/at-least-node-1.0.0.tgz", "integrity": "sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==", + "optional": true, "engines": { "node": ">= 4.0.0" } @@ -6420,9 +6428,9 @@ } }, "node_modules/bigint-crypto-utils": { - "version": "3.1.8", - "resolved": "https://registry.npmjs.org/bigint-crypto-utils/-/bigint-crypto-utils-3.1.8.tgz", - "integrity": "sha512-+VMV9Laq8pXLBKKKK49nOoq9bfR3j7NNQAtbA617a4nw9bVLo8rsqkKMBgM2AJWlNX9fEIyYaYX+d0laqYV4tw==", + "version": "3.1.7", + "resolved": "https://registry.npmjs.org/bigint-crypto-utils/-/bigint-crypto-utils-3.1.7.tgz", + "integrity": "sha512-zpCQpIE2Oy5WIQpjC9iYZf8Uh9QqoS51ZCooAcNvzv1AQ3VWdT52D0ksr1+/faeK8HVIej1bxXcP75YcqH3KPA==", "dependencies": { "bigint-mod-arith": "^3.1.0" }, @@ -6554,14 +6562,6 @@ "ms": "2.0.0" } }, - "node_modules/body-parser/node_modules/depd": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", - "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", - "engines": { - "node": ">= 0.8" - } - }, "node_modules/body-parser/node_modules/ms": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", @@ -6816,9 +6816,9 @@ } }, "node_modules/bufio": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/bufio/-/bufio-1.2.0.tgz", - "integrity": "sha512-UlFk8z/PwdhYQTXSQQagwGAdtRI83gib2n4uy4rQnenxUM2yQi8lBDzF230BNk+3wAoZDxYRoBwVVUPgHa9MCA==", + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/bufio/-/bufio-1.1.3.tgz", + "integrity": "sha512-W0ydG8t+ST+drUpEwl1N+dU9Ije06g8+43CLtvEIzfKo9nPFLXbKqDYE2XSg4w6RugsBcCj7pEU7jOpBC6BqrA==", "engines": { "node": ">=8.0.0" } @@ -6937,9 +6937,9 @@ } }, "node_modules/caniuse-lite": { - "version": "1.0.30001442", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001442.tgz", - "integrity": "sha512-239m03Pqy0hwxYPYR5JwOIxRJfLTWtle9FV8zosfV5pHg+/51uD4nxcUlM8+mWWGfwKtt8lJNHnD3cWw9VZ6ow==", + "version": "1.0.30001423", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001423.tgz", + "integrity": "sha512-09iwWGOlifvE1XuHokFMP7eR38a0JnajoyL3/i87c8ZjRWRrdKo1fqjNfugfBD0UDBIOz0U+jtNhJ0EPm1VleQ==", "funding": [ { "type": "opencollective", @@ -6965,15 +6965,15 @@ } }, "node_modules/cbor": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/cbor/-/cbor-8.1.0.tgz", - "integrity": "sha512-DwGjNW9omn6EwP70aXsn7FQJx5kO12tX0bZkaTjzdVFM6/7nhA4t0EENocKGx6D2Bch9PE2KzCUf5SceBdeijg==", - "dev": true, + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/cbor/-/cbor-5.2.0.tgz", + "integrity": "sha512-5IMhi9e1QU76ppa5/ajP1BmMWZ2FHkhAhjeVKQ/EFCgYSEaeVaoGtL7cxJskf9oCCk+XjzaIdc3IuU/dbA/o2A==", "dependencies": { - "nofilter": "^3.1.0" + "bignumber.js": "^9.0.1", + "nofilter": "^1.0.4" }, "engines": { - "node": ">=12.19" + "node": ">=6.0.0" } }, "node_modules/chai": { @@ -7398,9 +7398,9 @@ "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==" }, "node_modules/compare-versions": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/compare-versions/-/compare-versions-5.0.3.tgz", - "integrity": "sha512-4UZlZP8Z99MGEY+Ovg/uJxJuvoXuN4M6B3hKaiackiHrgzQFEe3diJi1mf1PNHbFujM7FvLrK2bpgIaImbtZ1A==", + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/compare-versions/-/compare-versions-5.0.1.tgz", + "integrity": "sha512-v8Au3l0b+Nwkp4G142JcgJFh1/TUhdxut7wzD1Nq1dyp5oa3tXaqb03EXOAB6jS4gMlalkjAUPZBMiAfKUixHQ==", "dev": true }, "node_modules/complex.js": { @@ -7486,9 +7486,9 @@ } }, "node_modules/conf/node_modules/ajv": { - "version": "8.12.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz", - "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==", + "version": "8.11.2", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.11.2.tgz", + "integrity": "sha512-E4bfmKAhGiSTvMfL1Myyycaub+cUEU2/IvpylXkUu7CHBkBj1f/ikdzbD7YQ6FKUbixDxeYvB/xY4fvyroDlQg==", "optional": true, "dependencies": { "fast-deep-equal": "^3.1.1", @@ -7576,9 +7576,9 @@ "integrity": "sha512-JxbCBUdrfr6AQjOXrxoTvAMJO4HBTUIlBzslcJPAz+/KT8yk53fXun51u+RenNYvad/+Vc2DIz5o9UxlCDymFQ==" }, "node_modules/core-js-compat": { - "version": "3.27.1", - "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.27.1.tgz", - "integrity": "sha512-Dg91JFeCDA17FKnneN7oCMz4BkQ4TcffkgHP4OWwp9yx3pi7ubqMDXXSacfNak1PQqjc95skyt+YBLHQJnkJwA==", + "version": "3.25.5", + "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.25.5.tgz", + "integrity": "sha512-ovcyhs2DEBUIE0MGEKHP4olCUW/XYte3Vroyxuh38rD1wAO4dHohsovUC4eAOuzFxE6b+RXvBU3UZ9o0YhUTkA==", "dependencies": { "browserslist": "^4.21.4" }, @@ -7654,6 +7654,13 @@ "sha.js": "^2.4.8" } }, + "node_modules/create-require": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz", + "integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==", + "optional": true, + "peer": true + }, "node_modules/cross-fetch": { "version": "3.1.5", "resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-3.1.5.tgz", @@ -7666,6 +7673,7 @@ "version": "6.0.5", "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", + "dev": true, "dependencies": { "nice-try": "^1.0.4", "path-key": "^2.0.1", @@ -7681,6 +7689,7 @@ "version": "5.7.1", "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true, "bin": { "semver": "bin/semver" } @@ -8178,11 +8187,11 @@ "optional": true }, "node_modules/depd": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", - "integrity": "sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", + "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", "engines": { - "node": ">= 0.6" + "node": ">= 0.8" } }, "node_modules/des.js": { @@ -8404,6 +8413,7 @@ "version": "0.4.1", "resolved": "https://registry.npmjs.org/emittery/-/emittery-0.4.1.tgz", "integrity": "sha512-r4eRSeStEGf6M5SKdrQhhLK5bOwOBxQhIE3YSTnZE3GpKiLfnnhE+tPtrJE79+eDJgm39BM6LSoI8SCx4HbwlQ==", + "optional": true, "engines": { "node": ">=6" } @@ -8518,59 +8528,34 @@ } }, "node_modules/es-abstract": { - "version": "1.21.0", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.21.0.tgz", - "integrity": "sha512-GUGtW7eXQay0c+PRq0sGIKSdaBorfVqsCMhGHo4elP7YVqZu9nCZS4UkK4gv71gOWNMra/PaSKD3ao1oWExO0g==", + "version": "1.20.4", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.20.4.tgz", + "integrity": "sha512-0UtvRN79eMe2L+UNEF1BwRe364sj/DXhQ/k5FmivgoSdpM90b8Jc0mDzKMGo7QS0BVbOP/bTwBKNnDc9rNzaPA==", "dependencies": { "call-bind": "^1.0.2", - "es-set-tostringtag": "^2.0.0", "es-to-primitive": "^1.2.1", "function-bind": "^1.1.1", "function.prototype.name": "^1.1.5", "get-intrinsic": "^1.1.3", "get-symbol-description": "^1.0.0", - "globalthis": "^1.0.3", - "gopd": "^1.0.1", "has": "^1.0.3", "has-property-descriptors": "^1.0.0", - "has-proto": "^1.0.1", "has-symbols": "^1.0.3", - "internal-slot": "^1.0.4", - "is-array-buffer": "^3.0.0", + "internal-slot": "^1.0.3", "is-callable": "^1.2.7", "is-negative-zero": "^2.0.2", "is-regex": "^1.1.4", "is-shared-array-buffer": "^1.0.2", "is-string": "^1.0.7", - "is-typed-array": "^1.1.10", "is-weakref": "^1.0.2", "object-inspect": "^1.12.2", "object-keys": "^1.1.1", "object.assign": "^4.1.4", "regexp.prototype.flags": "^1.4.3", "safe-regex-test": "^1.0.0", - "string.prototype.trimend": "^1.0.6", - "string.prototype.trimstart": "^1.0.6", - "typed-array-length": "^1.0.4", - "unbox-primitive": "^1.0.2", - "which-typed-array": "^1.1.9" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/es-abstract/node_modules/object.assign": { - "version": "4.1.4", - "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.4.tgz", - "integrity": "sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ==", - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "has-symbols": "^1.0.3", - "object-keys": "^1.1.1" + "string.prototype.trimend": "^1.0.5", + "string.prototype.trimstart": "^1.0.5", + "unbox-primitive": "^1.0.2" }, "engines": { "node": ">= 0.4" @@ -8584,19 +8569,6 @@ "resolved": "https://registry.npmjs.org/es-array-method-boxes-properly/-/es-array-method-boxes-properly-1.0.0.tgz", "integrity": "sha512-wd6JXUmyHmt8T5a2xreUwKcGPq6f1f+WwIJkijUqiGcJz1qqnZgP6XIK+QyIWU5lT7imeNxUll48bziG+TSYcA==" }, - "node_modules/es-set-tostringtag": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.0.1.tgz", - "integrity": "sha512-g3OMbtlwY3QewlqAiMLI47KywjWZoEytKr8pf6iTC8uJq5bIAH52Z9pnQ8pVL6whrCto53JZDuUIsifGeLorTg==", - "dependencies": { - "get-intrinsic": "^1.1.3", - "has": "^1.0.3", - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - } - }, "node_modules/es-to-primitive": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", @@ -9176,6 +9148,20 @@ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==" }, + "node_modules/eth-gas-reporter/node_modules/object.assign": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.0.tgz", + "integrity": "sha512-exHJeq6kBKj58mqGyTQ9DFvrZC/eR6OwxzoM9YRoGBqrXYonaFyGiFMuc9VZrXf7DarreEwMpurG3dd+CNyW5w==", + "dependencies": { + "define-properties": "^1.1.2", + "function-bind": "^1.1.1", + "has-symbols": "^1.0.0", + "object-keys": "^1.0.11" + }, + "engines": { + "node": ">= 0.4" + } + }, "node_modules/eth-gas-reporter/node_modules/p-locate": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", @@ -10691,14 +10677,6 @@ "ms": "2.0.0" } }, - "node_modules/express/node_modules/depd": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", - "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", - "engines": { - "node": ">= 0.8" - } - }, "node_modules/express/node_modules/ms": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", @@ -10896,6 +10874,7 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/find-yarn-workspace-root/-/find-yarn-workspace-root-2.0.0.tgz", "integrity": "sha512-1IMnbjt4KzsQfnhnzNd8wUEgXZ44IzZaZmnLYx7D5FZlaHt2gW20Cri8Q+E/t5tIj4+epTBub+2Zxu/vNILzqQ==", + "dev": true, "dependencies": { "micromatch": "^4.0.2" } @@ -19528,7 +19507,6 @@ "version": "4.0.5", "resolved": "https://registry.npmjs.org/bufferutil/-/bufferutil-4.0.5.tgz", "integrity": "sha512-HTm14iMQKK2FjFLRTM5lAVcyaUzOnqbPtesFIvREgXpJHdQm8bWS+GkQgIkfaBYRHuCnea7w8UVNfwiAQhlr9A==", - "hasInstallScript": true, "optional": true, "dependencies": { "node-gyp-build": "^4.3.0" @@ -19865,7 +19843,6 @@ "version": "5.0.7", "resolved": "https://registry.npmjs.org/utf-8-validate/-/utf-8-validate-5.0.7.tgz", "integrity": "sha512-vLt1O5Pp+flcArHGIyKEQq883nBt8nN8tVBcoL0qUXj2XT1n7p70yGIq2VK98I5FdZ1YHc0wk/koOnHjnXWk1Q==", - "hasInstallScript": true, "optional": true, "dependencies": { "node-gyp-build": "^4.3.0" @@ -20089,31 +20066,6 @@ "node": ">=4" } }, - "node_modules/globalthis": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.3.tgz", - "integrity": "sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA==", - "dependencies": { - "define-properties": "^1.1.3" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/gopd": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", - "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", - "dependencies": { - "get-intrinsic": "^1.1.3" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/got": { "version": "12.1.0", "resolved": "https://registry.npmjs.org/got/-/got-12.1.0.tgz", @@ -20705,17 +20657,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/has-proto": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.1.tgz", - "integrity": "sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/has-symbol-support-x": { "version": "1.4.2", "resolved": "https://registry.npmjs.org/has-symbol-support-x/-/has-symbol-support-x-1.4.2.tgz", @@ -20889,14 +20830,6 @@ "node": ">= 0.8" } }, - "node_modules/http-errors/node_modules/depd": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", - "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", - "engines": { - "node": ">= 0.8" - } - }, "node_modules/http-https": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/http-https/-/http-https-1.0.0.tgz", @@ -21018,9 +20951,9 @@ "integrity": "sha512-HR7EVodfFUdQCTIeySw+WDRFJlPcLOJbXfwwZ7Oom6tjsvZ3bOkCDJHehQC3nxJrv7+f9XecwazynjU8e4Vw3Q==" }, "node_modules/immutable": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/immutable/-/immutable-4.2.2.tgz", - "integrity": "sha512-fTMKDwtbvO5tldky9QZ2fMX7slR0mYpY5nbnFWYp0fOzDhHqhgIw9KoYgxLWsoNTS9ZHGauHj18DTyEw6BK3Og==" + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/immutable/-/immutable-4.1.0.tgz", + "integrity": "sha512-oNkuqVTA8jqG1Q6c+UglTOD1xhC1BtjKI7XkCXRkZHrN5m18/XsnUp8Q89GkQO/z+0WjonSvl0FLhDYftp46nQ==" }, "node_modules/imul": { "version": "1.0.1", @@ -21060,11 +20993,11 @@ "optional": true }, "node_modules/internal-slot": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.4.tgz", - "integrity": "sha512-tA8URYccNzMo94s5MQZgH8NB/XTa6HsOo0MLfXTKKEnHVVdegzaQoFZ7Jp44bdvLvY2waT5dc+j5ICEswhi7UQ==", + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.3.tgz", + "integrity": "sha512-O0DB1JC/sPyZl7cIo78n5dR7eUSwwpYPiXRhTzNxZVAMUuB8vlnRFyLxdrVToks6XPLVnFfbzaVd5WLjhgg+vA==", "dependencies": { - "get-intrinsic": "^1.1.3", + "get-intrinsic": "^1.1.0", "has": "^1.0.3", "side-channel": "^1.0.4" }, @@ -21120,19 +21053,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/is-array-buffer": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.1.tgz", - "integrity": "sha512-ASfLknmY8Xa2XtB4wmbz13Wu202baeA18cJBCeCy0wXUHZF0IPyVEXqKEcd+t2fNSLLL1vC6k7lxZEojNbISXQ==", - "dependencies": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.1.3", - "is-typed-array": "^1.1.10" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/is-arrayish": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", @@ -21213,6 +21133,7 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-2.0.0.tgz", "integrity": "sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w==", + "dev": true, "dependencies": { "ci-info": "^2.0.0" }, @@ -21238,6 +21159,7 @@ "version": "2.2.1", "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz", "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==", + "dev": true, "bin": { "is-docker": "cli.js" }, @@ -21453,14 +21375,14 @@ } }, "node_modules/is-typed-array": { - "version": "1.1.10", - "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.10.tgz", - "integrity": "sha512-PJqgEHiWZvMpaFZ3uTc8kHPM4+4ADTlDniuQL7cU/UDA0Ql7F70yGfHph3cLNe+c9toaigv+DFzTJKhc2CtO6A==", + "version": "1.1.9", + "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.9.tgz", + "integrity": "sha512-kfrlnTTn8pZkfpJMUgYD7YZ3qzeJgWUn8XfVYBARc4wnmNOmLbmuuaAs3q5fvB0UJOn6yHAKaGTPM7d6ezoD/A==", "dependencies": { "available-typed-arrays": "^1.0.5", "call-bind": "^1.0.2", + "es-abstract": "^1.20.0", "for-each": "^0.3.3", - "gopd": "^1.0.1", "has-tostringtag": "^1.0.0" }, "engines": { @@ -21521,6 +21443,7 @@ "version": "2.2.0", "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", + "dev": true, "dependencies": { "is-docker": "^2.0.0" }, @@ -21723,14 +21646,11 @@ "optional": true }, "node_modules/json-stable-stringify": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/json-stable-stringify/-/json-stable-stringify-1.0.2.tgz", - "integrity": "sha512-eunSSaEnxV12z+Z73y/j5N37/In40GK4GmsSy+tEHJMxknvqnA7/djeYtAgW0GsWHUfg+847WJjKaEylk2y09g==", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json-stable-stringify/-/json-stable-stringify-1.0.1.tgz", + "integrity": "sha512-i/J297TW6xyj7sDFa7AmBPkQvLIxWr2kKPWI26tXydnZrzVAocNqn5DMNT1Mzk0vit1V5UkRM7C1KdVNp7Lmcg==", "dependencies": { - "jsonify": "^0.0.1" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "jsonify": "~0.0.0" } }, "node_modules/json-stringify-safe": { @@ -21739,9 +21659,9 @@ "integrity": "sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==" }, "node_modules/json5": { - "version": "2.2.3", - "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", - "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.2.tgz", + "integrity": "sha512-46Tk9JiOL2z7ytNQWFLpj99RZkVgeHf87yGQKsIkaPz1qSH9UczKH1rO7K3wgRselo0tYMUNfecYpm/p1vC7tQ==", "peer": true, "bin": { "json5": "lib/cli.js" @@ -21821,9 +21741,9 @@ } }, "node_modules/keyv": { - "version": "4.5.2", - "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.2.tgz", - "integrity": "sha512-5MHbFaKn8cNSmVW7BYnijeAVlE4cYA/SVkifVgrh7yotnfhKmjuXpDKjrABLnT0SfHWV21P8ow07OGfRrNDg8g==", + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.0.tgz", + "integrity": "sha512-2YvuMsA+jnFGtBareKqgANOEKe1mk3HKiXu2fRmAfyxG0MJAywNhi5ttWA3PMjl4NmpyjZNbFifR2vNjW1znfA==", "dependencies": { "json-buffer": "3.0.1" } @@ -21840,6 +21760,7 @@ "version": "6.0.0", "resolved": "https://registry.npmjs.org/klaw-sync/-/klaw-sync-6.0.0.tgz", "integrity": "sha512-nIeuVSzdCCs6TDPTqI8w1Yre34sSq7AkZ4B3sfOBbI2CgVSB4Du4aLQijFU2+lhAFCwt9+42Hel6lQNIv6AntQ==", + "dev": true, "dependencies": { "graceful-fs": "^4.1.11" } @@ -22073,6 +21994,7 @@ "resolved": "https://registry.npmjs.org/leveldown/-/leveldown-5.6.0.tgz", "integrity": "sha512-iB8O/7Db9lPaITU1aA2txU/cBEXAt4vWwKQRrrWuS6XDgbP4QZGj9BL2aNbwb002atoQ/lIotJkfyzz+ygQnUQ==", "hasInstallScript": true, + "optional": true, "dependencies": { "abstract-leveldown": "~6.2.1", "napi-macros": "~2.0.0", @@ -22086,6 +22008,7 @@ "version": "6.2.3", "resolved": "https://registry.npmjs.org/abstract-leveldown/-/abstract-leveldown-6.2.3.tgz", "integrity": "sha512-BsLm5vFMRUrrLeCcRc+G0t2qOaTzpoJQLOubq2XM72eNpjF5UdU5o/5NvlNhx95XHcAvcl8OMXr4mlg/fRgUXQ==", + "optional": true, "dependencies": { "buffer": "^5.5.0", "immediate": "^3.2.3", @@ -22115,6 +22038,7 @@ "url": "https://feross.org/support" } ], + "optional": true, "dependencies": { "base64-js": "^1.3.1", "ieee754": "^1.1.13" @@ -22124,6 +22048,7 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/level-supports/-/level-supports-1.0.1.tgz", "integrity": "sha512-rXM7GYnW8gsl1vedTJIbzOrRv85c/2uCMpiiCzO2fndd06U/kUXEEU9evYn4zFggBOg36IsBW8LzqIpETwwQzg==", + "optional": true, "dependencies": { "xtend": "^4.0.2" }, @@ -22135,6 +22060,7 @@ "version": "4.1.1", "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.1.1.tgz", "integrity": "sha512-dSq1xmcPDKPZ2EED2S6zw/b9NKsqzXRE6dVr8TVQnI3FJOTteUMuqF3Qqs6LZg+mLGYJWqQzMbIjMtJqTv87nQ==", + "optional": true, "bin": { "node-gyp-build": "bin.js", "node-gyp-build-optional": "optional.js", @@ -22299,9 +22225,9 @@ } }, "node_modules/loupe": { - "version": "2.3.6", - "resolved": "https://registry.npmjs.org/loupe/-/loupe-2.3.6.tgz", - "integrity": "sha512-RaPMZKiMy8/JruncMU5Bt6na1eftNoo++R4Y+N2FrxkDVTrGvcyzFTsaGif4QTeKESheMGegbhw6iUAq+5A8zA==", + "version": "2.3.4", + "resolved": "https://registry.npmjs.org/loupe/-/loupe-2.3.4.tgz", + "integrity": "sha512-OvKfgCC2Ndby6aSTREl5aCCPTNIzlDfQZvZxNUrBrihDhL3xcrYegTblhmEiCrg2kKQz4XsFIaemE5BF4ybSaQ==", "dependencies": { "get-func-name": "^2.0.0" } @@ -22359,6 +22285,13 @@ "node": ">=4" } }, + "node_modules/make-error": { + "version": "1.3.6", + "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", + "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==", + "optional": true, + "peer": true + }, "node_modules/markdown-table": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/markdown-table/-/markdown-table-1.1.3.tgz", @@ -22539,6 +22472,7 @@ "version": "4.0.5", "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", + "dev": true, "dependencies": { "braces": "^3.0.2", "picomatch": "^2.3.1" @@ -22634,9 +22568,9 @@ "integrity": "sha512-JIYlbt6g8i5jKfJ3xz7rF0LXmv2TkDxBLUkiBeZ7bAx4GnnNMr8xFpGnOxn6GhTEHx3SjRrZEoU+j04prX1ktg==" }, "node_modules/minimatch": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.2.tgz", - "integrity": "sha512-bNH9mmM9qsJ2X4r2Nat1B//1dJVcn3+iBLa3IgqJ7EbGaDNepL9QSHOxN4ng33s52VMMhhIfgCYDk3C4ZmlDAg==", + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.0.tgz", + "integrity": "sha512-9TPBGGak4nHfGZsPBohm9AWg6NoT7QTCehS3BIJABslyZbzxfV78QM2Y6+i741OPZIafFAaiiEMh5OyIrJPgtg==", "peer": true, "dependencies": { "brace-expansion": "^2.0.1" @@ -22708,9 +22642,9 @@ } }, "node_modules/mocha": { - "version": "10.2.0", - "resolved": "https://registry.npmjs.org/mocha/-/mocha-10.2.0.tgz", - "integrity": "sha512-IDY7fl/BecMwFHzoqF2sg/SHHANeBoMMXFlS9r0OXKDssYE1M5O43wUY/9BVPeIvfH2zmEbBfseqN9gBQZzXkg==", + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/mocha/-/mocha-10.1.0.tgz", + "integrity": "sha512-vUF7IYxEoN7XhQpFLxQAEMtE4W91acW4B6En9l97MwE9stL1A9gusXfoHZCLVHDUJ/7V5+lbCM6yMqzo5vNymg==", "dependencies": { "ansi-colors": "4.1.1", "browser-stdout": "1.3.1", @@ -23091,7 +23025,8 @@ "node_modules/nice-try": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz", - "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==" + "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==", + "dev": true }, "node_modules/no-case": { "version": "2.3.2", @@ -23167,9 +23102,9 @@ } }, "node_modules/node-gyp-build": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.6.0.tgz", - "integrity": "sha512-NTZVKn9IylLwUzaKjkas1e4u2DLNcV4rdYagA4PWdPwW87Bi7z+BznyKSRwS/761tV/lzCGXplWsiaMjLqP2zQ==", + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.5.0.tgz", + "integrity": "sha512-2iGbaQBV+ITgCz76ZEjmhUKAKVf7xfY1sRl4UiKQspfZMH2h06SyhNsnSVy50cwkFQDGLyif6m/6uFXHkOZ6rg==", "bin": { "node-gyp-build": "bin.js", "node-gyp-build-optional": "optional.js", @@ -23207,9 +23142,9 @@ } }, "node_modules/node-releases": { - "version": "2.0.8", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.8.tgz", - "integrity": "sha512-dFSmB8fFHEH/s81Xi+Y/15DQY6VHW81nXRj86EMSL3lmuTmK1e+aT4wrFCkTbm+gSwkw4KpX+rT/pMM2c1mF+A==" + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.6.tgz", + "integrity": "sha512-PiVXnNuFm5+iYkLBNeq5211hvO38y63T0i2KKh2KnUs3RpzJ+JtODFjkD8yjLwnDkTYF1eKXheUwdssR+NRZdg==" }, "node_modules/nodemon": { "version": "2.0.20", @@ -23294,12 +23229,11 @@ } }, "node_modules/nofilter": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/nofilter/-/nofilter-3.1.0.tgz", - "integrity": "sha512-l2NNj07e9afPnhAhvgVrCD/oy2Ai1yfLpuo3EpiO1jFTsB4sFz6oIfAfSZyQzVpkZQ9xS8ZS5g1jCBgq4Hwo0g==", - "dev": true, + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/nofilter/-/nofilter-1.0.4.tgz", + "integrity": "sha512-N8lidFp+fCz+TD51+haYdbDGrcBWwuHX40F5+z0qkUjMJ5Tp+rdSuAkMJ9N9eoolDlEVTf6u5icM+cNKkKW2mA==", "engines": { - "node": ">=12.19" + "node": ">=8" } }, "node_modules/noop-logger": { @@ -23459,28 +23393,31 @@ } }, "node_modules/object.assign": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.0.tgz", - "integrity": "sha512-exHJeq6kBKj58mqGyTQ9DFvrZC/eR6OwxzoM9YRoGBqrXYonaFyGiFMuc9VZrXf7DarreEwMpurG3dd+CNyW5w==", + "version": "4.1.4", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.4.tgz", + "integrity": "sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ==", "dependencies": { - "define-properties": "^1.1.2", - "function-bind": "^1.1.1", - "has-symbols": "^1.0.0", - "object-keys": "^1.0.11" + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "has-symbols": "^1.0.3", + "object-keys": "^1.1.1" }, "engines": { "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, "node_modules/object.getownpropertydescriptors": { - "version": "2.1.5", - "resolved": "https://registry.npmjs.org/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.5.tgz", - "integrity": "sha512-yDNzckpM6ntyQiGTik1fKV1DcVDRS+w8bvpWNCBanvH5LfRX9O8WTHqQzG4RZwRAM4I0oU7TV11Lj5v0g20ibw==", + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.4.tgz", + "integrity": "sha512-sccv3L/pMModT6dJAYF3fzGMVcb38ysQ0tEE6ixv2yXJDtEIPph268OlAdJj5/qZMZDq2g/jqvwppt36uS/uQQ==", "dependencies": { - "array.prototype.reduce": "^1.0.5", + "array.prototype.reduce": "^1.0.4", "call-bind": "^1.0.2", "define-properties": "^1.1.4", - "es-abstract": "^1.20.4" + "es-abstract": "^1.20.1" }, "engines": { "node": ">= 0.8" @@ -23549,6 +23486,7 @@ "version": "7.4.2", "resolved": "https://registry.npmjs.org/open/-/open-7.4.2.tgz", "integrity": "sha512-MVHddDVweXZF3awtlAS+6pgKLlm/JgxZ90+/NBurBoQctVOOB/zDdVjcyPzQ+0laDGbsWgrRkflI65sQeOgT9Q==", + "dev": true, "dependencies": { "is-docker": "^2.0.0", "is-wsl": "^2.1.1" @@ -23708,9 +23646,9 @@ } }, "node_modules/parse5": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/parse5/-/parse5-7.1.2.tgz", - "integrity": "sha512-Czj1WaSVpaoj0wbhMzLmWD69anp2WH7FXMB9n1Sy8/ZFF9jolSQVMu1Ij5WIyGmcBmhk7EOndpO4mIpihVqAXw==", + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-7.1.1.tgz", + "integrity": "sha512-kwpuwzB+px5WUg9pyK0IcK/shltJN5/OVhQagxhCQNtT9Y9QRZqNY2e1cmbu/paRh5LMnz/oVTVLBpjFmMZhSg==", "dev": true, "dependencies": { "entities": "^4.4.0" @@ -23750,60 +23688,111 @@ } }, "node_modules/patch-package": { - "version": "6.5.1", - "resolved": "https://registry.npmjs.org/patch-package/-/patch-package-6.5.1.tgz", - "integrity": "sha512-I/4Zsalfhc6bphmJTlrLoOcAF87jcxko4q0qsv4bGcurbr8IskEOtdnt9iCmsQVGL1B+iUhSQqweyTLJfCF9rA==", + "version": "6.4.7", + "resolved": "https://registry.npmjs.org/patch-package/-/patch-package-6.4.7.tgz", + "integrity": "sha512-S0vh/ZEafZ17hbhgqdnpunKDfzHQibQizx9g8yEf5dcVk3KOflOfdufRXQX8CSEkyOQwuM/bNz1GwKvFj54kaQ==", + "dev": true, "dependencies": { "@yarnpkg/lockfile": "^1.1.0", - "chalk": "^4.1.2", + "chalk": "^2.4.2", "cross-spawn": "^6.0.5", "find-yarn-workspace-root": "^2.0.0", - "fs-extra": "^9.0.0", + "fs-extra": "^7.0.1", "is-ci": "^2.0.0", "klaw-sync": "^6.0.0", - "minimist": "^1.2.6", + "minimist": "^1.2.0", "open": "^7.4.2", "rimraf": "^2.6.3", "semver": "^5.6.0", "slash": "^2.0.0", - "tmp": "^0.0.33", - "yaml": "^1.10.2" + "tmp": "^0.0.33" }, "bin": { "patch-package": "index.js" }, "engines": { - "node": ">=10", "npm": ">5" } }, + "node_modules/patch-package/node_modules/ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, "node_modules/patch-package/node_modules/brace-expansion": { "version": "1.1.11", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, "dependencies": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" } }, + "node_modules/patch-package/node_modules/chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/patch-package/node_modules/color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/patch-package/node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", + "dev": true + }, + "node_modules/patch-package/node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "dev": true, + "engines": { + "node": ">=0.8.0" + } + }, "node_modules/patch-package/node_modules/fs-extra": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", - "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-7.0.1.tgz", + "integrity": "sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==", + "dev": true, "dependencies": { - "at-least-node": "^1.0.0", - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" + "graceful-fs": "^4.1.2", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" }, "engines": { - "node": ">=10" + "node": ">=6 <7 || >=8" } }, "node_modules/patch-package/node_modules/glob": { "version": "7.2.3", "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "dev": true, "dependencies": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", @@ -23819,10 +23808,29 @@ "url": "https://github.com/sponsors/isaacs" } }, + "node_modules/patch-package/node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/patch-package/node_modules/jsonfile": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", + "integrity": "sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==", + "dev": true, + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, "node_modules/patch-package/node_modules/minimatch": { "version": "3.1.2", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, "dependencies": { "brace-expansion": "^1.1.7" }, @@ -23834,6 +23842,7 @@ "version": "2.7.1", "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", + "dev": true, "dependencies": { "glob": "^7.1.3" }, @@ -23845,10 +23854,32 @@ "version": "5.7.1", "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true, "bin": { "semver": "bin/semver" } }, + "node_modules/patch-package/node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/patch-package/node_modules/universalify": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", + "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", + "dev": true, + "engines": { + "node": ">= 4.0.0" + } + }, "node_modules/path": { "version": "0.12.7", "resolved": "https://registry.npmjs.org/path/-/path-0.12.7.tgz", @@ -23892,6 +23923,7 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", "integrity": "sha512-fEHGKCSmUSDPv4uoj8AlD+joPlq3peND+HRYyxFz4KPw4z926S/b8rIuFs2FYJg3BwsxJf6A9/3eIdLaYC+9Dw==", + "dev": true, "engines": { "node": ">=4" } @@ -24401,7 +24433,6 @@ "version": "2.4.3", "resolved": "https://registry.npmjs.org/prb-math/-/prb-math-2.4.3.tgz", "integrity": "sha512-t5jncEscKmWg7COkMkmbXXxSeDI6Xl21rxx5e+oxUCqskNvsu6Q9RqdVfGY6y+sMwyMQE8DJ/OOyQ9ExH1yfbw==", - "deprecated": "package no longer maintained, you should install @prb/math instead", "dependencies": { "@ethersproject/bignumber": "^5.5.0", "decimal.js": "^10.3.1", @@ -24490,9 +24521,9 @@ } }, "node_modules/prettier": { - "version": "2.8.1", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.8.1.tgz", - "integrity": "sha512-lqGoSJBQNJidqCHE80vqZJHWHRFoNYsSpP9AjFhlhi9ODCJA541svILes/+/1GM3VaL/abZi7cpFzOpdR9UPKg==", + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.7.1.tgz", + "integrity": "sha512-ujppO+MkdPqoVINuDFDRLClm7D78qbDt0/NR+wp5FqEZOoTNAjPHWj17QRhu7geIHJfcNhRk1XVQmF8Bp3ye+g==", "dev": true, "bin": { "prettier": "bin-prettier.js" @@ -24518,9 +24549,9 @@ "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==" }, "node_modules/promise": { - "version": "8.3.0", - "resolved": "https://registry.npmjs.org/promise/-/promise-8.3.0.tgz", - "integrity": "sha512-rZPNPKTOYVNEEKFaq1HqTgOwZD+4/YHS5ukLzQCypkj+OkYx7iv0mA91lJlpPPZ8vMau3IIGj5Qlwrx+8iiSmg==", + "version": "8.2.0", + "resolved": "https://registry.npmjs.org/promise/-/promise-8.2.0.tgz", + "integrity": "sha512-+CMAlLHqwRYwBMXKCP+o8ns7DN+xHDUiI+0nArsiJ9y+kJVPLFxEaSw6Ha9s9H0tftxg2Yzl25wqj9G7m5wLZg==", "dependencies": { "asap": "~2.0.6" } @@ -24611,19 +24642,13 @@ } }, "node_modules/pure-rand": { - "version": "5.0.5", - "resolved": "https://registry.npmjs.org/pure-rand/-/pure-rand-5.0.5.tgz", - "integrity": "sha512-BwQpbqxSCBJVpamI6ydzcKqyFmnd5msMWUGvzXLm1aXvusbbgkbOto/EUPM00hjveJEaJtdbhUjKSzWRhQVkaw==", - "funding": [ - { - "type": "individual", - "url": "https://github.com/sponsors/dubzzz" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/fast-check" - } - ] + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/pure-rand/-/pure-rand-5.0.3.tgz", + "integrity": "sha512-9N8x1h8dptBQpHyC7aZMS+iNOAm97WMGY0AFrguU1cpfW3I5jINkWe5BIY5md0ofy+1TCIELsVcm/GJXZSaPbw==", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/fast-check" + } }, "node_modules/qs": { "version": "6.11.0", @@ -25412,14 +25437,6 @@ "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" }, - "node_modules/send/node_modules/depd": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", - "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", - "engines": { - "node": ">= 0.8" - } - }, "node_modules/send/node_modules/ms": { "version": "2.1.3", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", @@ -25536,6 +25553,7 @@ "version": "1.2.0", "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", "integrity": "sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg==", + "dev": true, "dependencies": { "shebang-regex": "^1.0.0" }, @@ -25547,6 +25565,7 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", "integrity": "sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ==", + "dev": true, "engines": { "node": ">=0.10.0" } @@ -25601,9 +25620,9 @@ } }, "node_modules/simple-update-notifier": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/simple-update-notifier/-/simple-update-notifier-1.1.0.tgz", - "integrity": "sha512-VpsrsJSUcJEseSbMHkrsrAVSdvVS5I96Qo1QAQ4FxQ9wXFcB+pjj7FB7/us9+GcgfW4ziHtYMc1J0PLczb55mg==", + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/simple-update-notifier/-/simple-update-notifier-1.0.7.tgz", + "integrity": "sha512-BBKgR84BJQJm6WjWFMHgLVuo61FBDSj1z/xSFUIozqO6wO7ii0JxCqlIud7Enr/+LhlbNI0whErq96P2qHNWew==", "dependencies": { "semver": "~7.0.0" }, @@ -25623,6 +25642,7 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/slash/-/slash-2.0.0.tgz", "integrity": "sha512-ZYKh3Wh2z1PpEXWr0MpSBZ0V6mZHAQfYevttO11c51CaWjGTaadiKZ+wVt1PbMlDV5qhMFslpZCemhwOK7C89A==", + "dev": true, "engines": { "node": ">=6" } @@ -25689,9 +25709,9 @@ } }, "node_modules/solidity-ast": { - "version": "0.4.40", - "resolved": "https://registry.npmjs.org/solidity-ast/-/solidity-ast-0.4.40.tgz", - "integrity": "sha512-M8uLBT2jgFB7B0iVAC5a2l71J8vim7aEm03AZkaHbDqyrl1pE+i5PriMEw6WlwGfHp3/Ym7cn9BqvVLQgRk+Yw==", + "version": "0.4.35", + "resolved": "https://registry.npmjs.org/solidity-ast/-/solidity-ast-0.4.35.tgz", + "integrity": "sha512-F5bTDLh3rmDxRmLSrs3qt3nvxJprWSEkS7h2KmuXDx7XTfJ6ZKVTV1rtPIYCqJAuPsU/qa8YUeFn7jdOAZcTPA==", "dev": true }, "node_modules/source-map": { @@ -25875,26 +25895,26 @@ } }, "node_modules/string.prototype.trimend": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.6.tgz", - "integrity": "sha512-JySq+4mrPf9EsDBEDYMOb/lM7XQLulwg5R/m1r0PXEFqrV0qHvl58sdTilSXtKOflCsK2E8jxf+GKC0T07RWwQ==", + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.5.tgz", + "integrity": "sha512-I7RGvmjV4pJ7O3kdf+LXFpVfdNOxtCW/2C8f6jNiW4+PQchwxkCDzlk1/7p+Wl4bqFIZeF47qAHXLuHHWKAxog==", "dependencies": { "call-bind": "^1.0.2", "define-properties": "^1.1.4", - "es-abstract": "^1.20.4" + "es-abstract": "^1.19.5" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/string.prototype.trimstart": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.6.tgz", - "integrity": "sha512-omqjMDaY92pbn5HOX7f9IccLA+U1tA9GvtU4JrodiXFfYB7jPzzHpRzpglLAjtUV6bB557zwClJezTqnAiYnQA==", + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.5.tgz", + "integrity": "sha512-THx16TJCGlsN0o6dl2o6ncWUsdgnLRSA23rRE5pyGBw/mLr3Ej/R2LaqCtgP8VNMGZsvMWnf9ooZPyY2bHvUFg==", "dependencies": { "call-bind": "^1.0.2", "define-properties": "^1.1.4", - "es-abstract": "^1.20.4" + "es-abstract": "^1.19.5" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -26117,9 +26137,9 @@ } }, "node_modules/swarm-js/node_modules/got": { - "version": "11.8.6", - "resolved": "https://registry.npmjs.org/got/-/got-11.8.6.tgz", - "integrity": "sha512-6tfZ91bOr7bOXnK7PRDCGBLa1H4U080YHNaAQ2KsMGlLEzRbk44nsZF2E1IeRc3vtJHPVbKCYgdFbaGO2ljd8g==", + "version": "11.8.5", + "resolved": "https://registry.npmjs.org/got/-/got-11.8.5.tgz", + "integrity": "sha512-o0Je4NvQObAuZPHLFoRSkdG2lTgtcynqymzg2Vupdx6PorhaT5MCbIyXG6d4D94kk8ZG57QeosgdiqfJWhEhlQ==", "dependencies": { "@sindresorhus/is": "^4.0.0", "@szmarczak/http-timer": "^4.0.5", @@ -26225,9 +26245,9 @@ } }, "node_modules/table": { - "version": "6.8.1", - "resolved": "https://registry.npmjs.org/table/-/table-6.8.1.tgz", - "integrity": "sha512-Y4X9zqrCftUhMeH2EptSSERdVKt/nEdijTOacGD/97EKjhQ/Qs8RTlEGABSJNNN8lac9kheH+af7yAkEWlgneA==", + "version": "6.8.0", + "resolved": "https://registry.npmjs.org/table/-/table-6.8.0.tgz", + "integrity": "sha512-s/fitrbVeEyHKFa7mFdkuQMWlH1Wgw/yEXMt5xACT4ZpzWFluehAxRtUUQKPuWhaLAWhFcVx6w3oC8VKaUfPGA==", "dev": true, "dependencies": { "ajv": "^8.0.1", @@ -26241,9 +26261,9 @@ } }, "node_modules/table/node_modules/ajv": { - "version": "8.12.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz", - "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==", + "version": "8.11.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.11.0.tgz", + "integrity": "sha512-wGgprdCvMalC0BztXvitD2hC04YffAvtsUn93JbGXYLAtCUO4xd17mCCZQxUOItiBwZvJScWo8NIvQMQ71rdpg==", "dev": true, "dependencies": { "fast-deep-equal": "^3.1.1", @@ -26567,13 +26587,13 @@ "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==" }, "node_modules/truffle": { - "version": "5.7.2", - "resolved": "https://registry.npmjs.org/truffle/-/truffle-5.7.2.tgz", - "integrity": "sha512-8MlSliw7b6zF1Z89L5CwlI74IyhdNXGQUvjECNGpZEtXZ1jKzFJV/XjpjpvSMZrABG+vLFKwQo6UdTTB5ea+tg==", + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/truffle/-/truffle-5.7.1.tgz", + "integrity": "sha512-6XZfF9xb0J+9O4BdSyIEtMubGCRDJAPXu9a0KhDXXNbsPPMNFzbYfG3oI5W13q4V9mO4PQEtYKeLRD6QyLwFdg==", "hasInstallScript": true, "dependencies": { - "@truffle/db-loader": "^0.2.11", - "@truffle/debugger": "^11.0.22", + "@truffle/db-loader": "^0.2.10", + "@truffle/debugger": "^11.0.21", "app-module-path": "^2.2.0", "ganache": "7.6.0", "mocha": "10.1.0", @@ -26583,7 +26603,7 @@ "truffle": "build/cli.bundled.js" }, "optionalDependencies": { - "@truffle/db": "^2.0.11" + "@truffle/db": "^2.0.10" } }, "node_modules/truffle-contract-size": { @@ -27516,190 +27536,6 @@ "node": ">=0.10.0" } }, - "node_modules/truffle/node_modules/ansi-colors": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz", - "integrity": "sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==", - "engines": { - "node": ">=6" - } - }, - "node_modules/truffle/node_modules/find-up": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", - "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", - "dependencies": { - "locate-path": "^6.0.0", - "path-exists": "^4.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/truffle/node_modules/glob": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz", - "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==", - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "engines": { - "node": "*" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/truffle/node_modules/glob/node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/truffle/node_modules/glob/node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, - "node_modules/truffle/node_modules/locate-path": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", - "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", - "dependencies": { - "p-locate": "^5.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/truffle/node_modules/minimatch": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.0.1.tgz", - "integrity": "sha512-nLDxIFRyhDblz3qMuq+SoRZED4+miJ/G+tdDrjkkkRnjAsBexeGpgjLEQ0blJy7rHhR2b93rhQY4SvyWu9v03g==", - "dependencies": { - "brace-expansion": "^2.0.1" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/truffle/node_modules/mocha": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/mocha/-/mocha-10.1.0.tgz", - "integrity": "sha512-vUF7IYxEoN7XhQpFLxQAEMtE4W91acW4B6En9l97MwE9stL1A9gusXfoHZCLVHDUJ/7V5+lbCM6yMqzo5vNymg==", - "dependencies": { - "ansi-colors": "4.1.1", - "browser-stdout": "1.3.1", - "chokidar": "3.5.3", - "debug": "4.3.4", - "diff": "5.0.0", - "escape-string-regexp": "4.0.0", - "find-up": "5.0.0", - "glob": "7.2.0", - "he": "1.2.0", - "js-yaml": "4.1.0", - "log-symbols": "4.1.0", - "minimatch": "5.0.1", - "ms": "2.1.3", - "nanoid": "3.3.3", - "serialize-javascript": "6.0.0", - "strip-json-comments": "3.1.1", - "supports-color": "8.1.1", - "workerpool": "6.2.1", - "yargs": "16.2.0", - "yargs-parser": "20.2.4", - "yargs-unparser": "2.0.0" - }, - "bin": { - "_mocha": "bin/_mocha", - "mocha": "bin/mocha.js" - }, - "engines": { - "node": ">= 14.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/mochajs" - } - }, - "node_modules/truffle/node_modules/ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" - }, - "node_modules/truffle/node_modules/nanoid": { - "version": "3.3.3", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.3.tgz", - "integrity": "sha512-p1sjXuopFs0xg+fPASzQ28agW1oHD7xDsd9Xkf3T15H3c/cifrFHVwrh74PdoklAPi+i7MdRsE47vm2r6JoB+w==", - "bin": { - "nanoid": "bin/nanoid.cjs" - }, - "engines": { - "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" - } - }, - "node_modules/truffle/node_modules/p-limit": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", - "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", - "dependencies": { - "yocto-queue": "^0.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/truffle/node_modules/p-locate": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", - "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", - "dependencies": { - "p-limit": "^3.0.2" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/truffle/node_modules/supports-color": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", - "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/supports-color?sponsor=1" - } - }, "node_modules/ts-essentials": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/ts-essentials/-/ts-essentials-1.0.4.tgz", @@ -27839,6 +27675,43 @@ "node": ">=4" } }, + "node_modules/ts-node": { + "version": "9.1.1", + "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-9.1.1.tgz", + "integrity": "sha512-hPlt7ZACERQGf03M253ytLY3dHbGNGrAq9qIHWUY9XHYl1z7wYngSr3OQ5xmui8o2AaxsONxIzjafLUiWBo1Fg==", + "optional": true, + "peer": true, + "dependencies": { + "arg": "^4.1.0", + "create-require": "^1.1.0", + "diff": "^4.0.1", + "make-error": "^1.1.1", + "source-map-support": "^0.5.17", + "yn": "3.1.1" + }, + "bin": { + "ts-node": "dist/bin.js", + "ts-node-script": "dist/bin-script.js", + "ts-node-transpile-only": "dist/bin-transpile.js", + "ts-script": "dist/bin-script-deprecated.js" + }, + "engines": { + "node": ">=10.0.0" + }, + "peerDependencies": { + "typescript": ">=2.7" + } + }, + "node_modules/ts-node/node_modules/diff": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", + "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", + "optional": true, + "peer": true, + "engines": { + "node": ">=0.3.1" + } + }, "node_modules/tslib": { "version": "2.4.1", "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.1.tgz", @@ -27965,19 +27838,6 @@ "node": ">= 4.0.0" } }, - "node_modules/typed-array-length": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.4.tgz", - "integrity": "sha512-KjZypGq+I/H7HI5HlOoGHkWUUGq+Q0TPhQurLbyrVrvnKTBgzLhIJ7j6J/XTQOi0d1RjyZ0wdas8bKs2p0x3Ng==", - "dependencies": { - "call-bind": "^1.0.2", - "for-each": "^0.3.3", - "is-typed-array": "^1.1.9" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/typed-function": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/typed-function/-/typed-function-4.1.0.tgz", @@ -28106,9 +27966,9 @@ "dev": true }, "node_modules/undici": { - "version": "5.14.0", - "resolved": "https://registry.npmjs.org/undici/-/undici-5.14.0.tgz", - "integrity": "sha512-yJlHYw6yXPPsuOH0x2Ib1Km61vu4hLiRRQoafs+WUgX1vO64vgnxiCEN9dpIrhZyHFsai3F0AEj4P9zy19enEQ==", + "version": "5.11.0", + "resolved": "https://registry.npmjs.org/undici/-/undici-5.11.0.tgz", + "integrity": "sha512-oWjWJHzFet0Ow4YZBkyiJwiK5vWqEYoH7BINzJAJOLedZ++JpAlCbUktW2GQ2DS2FpKmxD/JMtWUUWl1BtghGw==", "dependencies": { "busboy": "^1.6.0" }, @@ -28999,16 +28859,16 @@ } }, "node_modules/which-typed-array": { - "version": "1.1.9", - "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.9.tgz", - "integrity": "sha512-w9c4xkx6mPidwp7180ckYWfMmvxpjlZuIudNtDf4N/tTAUB8VJbX25qZoAsrtGuYNnGw3pa0AXgbGKRB8/EceA==", + "version": "1.1.8", + "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.8.tgz", + "integrity": "sha512-Jn4e5PItbcAHyLoRDwvPj1ypu27DJbtdYXUa5zsinrUx77Uvfb0cXwwnGMTn7cjUfhhqgVQnVJCwF+7cgU7tpw==", "dependencies": { "available-typed-arrays": "^1.0.5", "call-bind": "^1.0.2", + "es-abstract": "^1.20.0", "for-each": "^0.3.3", - "gopd": "^1.0.1", "has-tostringtag": "^1.0.0", - "is-typed-array": "^1.1.10" + "is-typed-array": "^1.1.9" }, "engines": { "node": ">= 0.4" @@ -29241,14 +29101,6 @@ "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==" }, - "node_modules/yaml": { - "version": "1.10.2", - "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz", - "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==", - "engines": { - "node": ">= 6" - } - }, "node_modules/yargs": { "version": "16.2.0", "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", @@ -29308,6 +29160,16 @@ "fd-slicer": "~1.1.0" } }, + "node_modules/yn": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz", + "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==", + "optional": true, + "peer": true, + "engines": { + "node": ">=6" + } + }, "node_modules/yocto-queue": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", @@ -29470,30 +29332,30 @@ } }, "@babel/compat-data": { - "version": "7.20.10", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.20.10.tgz", - "integrity": "sha512-sEnuDPpOJR/fcafHMjpcpGN5M2jbUGUHwmuWKM/YdPzeEDJg8bgmbcWQFUfE32MQjti1koACvoPVsDe8Uq+idg==" + "version": "7.19.4", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.19.4.tgz", + "integrity": "sha512-CHIGpJcUQ5lU9KrPHTjBMhVwQG6CQjxfg36fGXl3qk/Gik1WwWachaXFuo0uCWJT/mStOKtcbFJCaVLihC1CMw==" }, "@babel/core": { - "version": "7.20.12", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.20.12.tgz", - "integrity": "sha512-XsMfHovsUYHFMdrIHkZphTN/2Hzzi78R08NuHfDBehym2VsPDL6Zn/JAD/JQdnRvbSsbQc4mVaU1m6JgtTEElg==", + "version": "7.19.6", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.19.6.tgz", + "integrity": "sha512-D2Ue4KHpc6Ys2+AxpIx1BZ8+UegLLLE2p3KJEuJRKmokHOtl49jQ5ny1773KsGLZs8MQvBidAF6yWUJxRqtKtg==", "peer": true, "requires": { "@ampproject/remapping": "^2.1.0", "@babel/code-frame": "^7.18.6", - "@babel/generator": "^7.20.7", - "@babel/helper-compilation-targets": "^7.20.7", - "@babel/helper-module-transforms": "^7.20.11", - "@babel/helpers": "^7.20.7", - "@babel/parser": "^7.20.7", - "@babel/template": "^7.20.7", - "@babel/traverse": "^7.20.12", - "@babel/types": "^7.20.7", + "@babel/generator": "^7.19.6", + "@babel/helper-compilation-targets": "^7.19.3", + "@babel/helper-module-transforms": "^7.19.6", + "@babel/helpers": "^7.19.4", + "@babel/parser": "^7.19.6", + "@babel/template": "^7.18.10", + "@babel/traverse": "^7.19.6", + "@babel/types": "^7.19.4", "convert-source-map": "^1.7.0", "debug": "^4.1.0", "gensync": "^1.0.0-beta.2", - "json5": "^2.2.2", + "json5": "^2.2.1", "semver": "^6.3.0" }, "dependencies": { @@ -29506,12 +29368,12 @@ } }, "@babel/generator": { - "version": "7.20.7", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.20.7.tgz", - "integrity": "sha512-7wqMOJq8doJMZmP4ApXTzLxSr7+oO2jroJURrVEp6XShrQUObV8Tq/D0NCcoYg2uHqUrjzO0zwBjoYzelxK+sw==", + "version": "7.19.6", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.19.6.tgz", + "integrity": "sha512-oHGRUQeoX1QrKeJIKVe0hwjGqNnVYsM5Nep5zo0uE0m42sLH+Fsd2pStJ5sRM1bNyTUUoz0pe2lTeMJrb/taTA==", "peer": true, "requires": { - "@babel/types": "^7.20.7", + "@babel/types": "^7.19.4", "@jridgewell/gen-mapping": "^0.3.2", "jsesc": "^2.5.1" }, @@ -29530,14 +29392,13 @@ } }, "@babel/helper-compilation-targets": { - "version": "7.20.7", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.20.7.tgz", - "integrity": "sha512-4tGORmfQcrc+bvrjb5y3dG9Mx1IOZjsHqQVUz7XCNHO+iTmqxWnVg3KRygjGmpRLJGdQSKuvFinbIb0CnZwHAQ==", + "version": "7.19.3", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.19.3.tgz", + "integrity": "sha512-65ESqLGyGmLvgR0mst5AdW1FkNlj9rQsCKduzEoEPhBCDFGXvz2jW6bXFG6i0/MrV2s7hhXjjb2yAzcPuQlLwg==", "requires": { - "@babel/compat-data": "^7.20.5", + "@babel/compat-data": "^7.19.3", "@babel/helper-validator-option": "^7.18.6", "browserslist": "^4.21.3", - "lru-cache": "^5.1.1", "semver": "^6.3.0" }, "dependencies": { @@ -29602,33 +29463,33 @@ } }, "@babel/helper-module-transforms": { - "version": "7.20.11", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.20.11.tgz", - "integrity": "sha512-uRy78kN4psmji1s2QtbtcCSaj/LILFDp0f/ymhpQH5QY3nljUZCaNWz9X1dEj/8MBdBEFECs7yRhKn8i7NjZgg==", + "version": "7.19.6", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.19.6.tgz", + "integrity": "sha512-fCmcfQo/KYr/VXXDIyd3CBGZ6AFhPFy1TfSEJ+PilGVlQT6jcbqtHAM4C1EciRqMza7/TpOUZliuSH+U6HAhJw==", "peer": true, "requires": { "@babel/helper-environment-visitor": "^7.18.9", "@babel/helper-module-imports": "^7.18.6", - "@babel/helper-simple-access": "^7.20.2", + "@babel/helper-simple-access": "^7.19.4", "@babel/helper-split-export-declaration": "^7.18.6", "@babel/helper-validator-identifier": "^7.19.1", - "@babel/template": "^7.20.7", - "@babel/traverse": "^7.20.10", - "@babel/types": "^7.20.7" + "@babel/template": "^7.18.10", + "@babel/traverse": "^7.19.6", + "@babel/types": "^7.19.4" } }, "@babel/helper-plugin-utils": { - "version": "7.20.2", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.20.2.tgz", - "integrity": "sha512-8RvlJG2mj4huQ4pZ+rU9lqKi9ZKiRmuvGuM2HlWmkmgOhbs6zEAw6IEiJ5cQqGbDzGZOhwuOQNtZMi/ENLjZoQ==" + "version": "7.19.0", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.19.0.tgz", + "integrity": "sha512-40Ryx7I8mT+0gaNxm8JGTZFUITNqdLAgdg0hXzeVZxVD6nFsdhQvip6v8dqkRHzsz1VFpFAaOCHNn0vKBL7Czw==" }, "@babel/helper-simple-access": { - "version": "7.20.2", - "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.20.2.tgz", - "integrity": "sha512-+0woI/WPq59IrqDYbVGfshjT5Dmk/nnbdpcF8SnMhhXObpTq2KNBdLFRFrkVdbDOyUmHBCxzm5FHV1rACIkIbA==", + "version": "7.19.4", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.19.4.tgz", + "integrity": "sha512-f9Xq6WqBFqaDfbCzn2w85hwklswz5qsKlh7f08w4Y9yhJHpnNC0QemtSkK5YyOY8kPGvyiwdzZksGUhnGdaUIg==", "peer": true, "requires": { - "@babel/types": "^7.20.2" + "@babel/types": "^7.19.4" } }, "@babel/helper-split-export-declaration": { @@ -29656,14 +29517,14 @@ "integrity": "sha512-XO7gESt5ouv/LRJdrVjkShckw6STTaB7l9BrpBaAHDeF5YZT+01PCwmR0SJHnkW6i8OwW/EVWRShfi4j2x+KQw==" }, "@babel/helpers": { - "version": "7.20.7", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.20.7.tgz", - "integrity": "sha512-PBPjs5BppzsGaxHQCDKnZ6Gd9s6xl8bBCluz3vEInLGRJmnZan4F6BYCeqtyXqkk4W5IlPmjK4JlOuZkpJ3xZA==", + "version": "7.19.4", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.19.4.tgz", + "integrity": "sha512-G+z3aOx2nfDHwX/kyVii5fJq+bgscg89/dJNWpYeKeBv3v9xX8EIabmx1k6u9LS04H7nROFVRVK+e3k0VHp+sw==", "peer": true, "requires": { - "@babel/template": "^7.20.7", - "@babel/traverse": "^7.20.7", - "@babel/types": "^7.20.7" + "@babel/template": "^7.18.10", + "@babel/traverse": "^7.19.4", + "@babel/types": "^7.19.4" } }, "@babel/highlight": { @@ -29736,9 +29597,9 @@ } }, "@babel/parser": { - "version": "7.20.7", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.20.7.tgz", - "integrity": "sha512-T3Z9oHybU+0vZlY9CiDSJQTD5ZapcW18ZctFMi0MOAl/4BjFF4ul7NVSARLdbGO5vDqy9eQiGTV0LtKfvCYvcg==", + "version": "7.19.6", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.19.6.tgz", + "integrity": "sha512-h1IUp81s2JYJ3mRkdxJgs4UvmSsRvDrx5ICSJbPvtWYv5i1nTBGcBpnog+89rAFMwvvru6E5NUHdBe01UeSzYA==", "peer": true }, "@babel/plugin-transform-runtime": { @@ -29770,38 +29631,38 @@ } }, "@babel/template": { - "version": "7.20.7", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.20.7.tgz", - "integrity": "sha512-8SegXApWe6VoNw0r9JHpSteLKTpTiLZ4rMlGIm9JQ18KiCtyQiAMEazujAHrUS5flrcqYZa75ukev3P6QmUwUw==", + "version": "7.18.10", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.18.10.tgz", + "integrity": "sha512-TI+rCtooWHr3QJ27kJxfjutghu44DLnasDMwpDqCXVTal9RLp3RSYNh4NdBrRP2cQAoG9A8juOQl6P6oZG4JxA==", "peer": true, "requires": { "@babel/code-frame": "^7.18.6", - "@babel/parser": "^7.20.7", - "@babel/types": "^7.20.7" + "@babel/parser": "^7.18.10", + "@babel/types": "^7.18.10" } }, "@babel/traverse": { - "version": "7.20.12", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.20.12.tgz", - "integrity": "sha512-MsIbFN0u+raeja38qboyF8TIT7K0BFzz/Yd/77ta4MsUsmP2RAnidIlwq7d5HFQrH/OZJecGV6B71C4zAgpoSQ==", + "version": "7.19.6", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.19.6.tgz", + "integrity": "sha512-6l5HrUCzFM04mfbG09AagtYyR2P0B71B1wN7PfSPiksDPz2k5H9CBC1tcZpz2M8OxbKTPccByoOJ22rUKbpmQQ==", "peer": true, "requires": { "@babel/code-frame": "^7.18.6", - "@babel/generator": "^7.20.7", + "@babel/generator": "^7.19.6", "@babel/helper-environment-visitor": "^7.18.9", "@babel/helper-function-name": "^7.19.0", "@babel/helper-hoist-variables": "^7.18.6", "@babel/helper-split-export-declaration": "^7.18.6", - "@babel/parser": "^7.20.7", - "@babel/types": "^7.20.7", + "@babel/parser": "^7.19.6", + "@babel/types": "^7.19.4", "debug": "^4.1.0", "globals": "^11.1.0" } }, "@babel/types": { - "version": "7.20.7", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.20.7.tgz", - "integrity": "sha512-69OnhBxSSgK0OzTJai4kyPDiKTIe3j+ctaHdIGVbRahTLAT7L3R9oeXHC2aVSuGYt3cVnoAMDmOCgJ2yaiLMvg==", + "version": "7.19.4", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.19.4.tgz", + "integrity": "sha512-M5LK7nAeS6+9j7hAq+b3fQs+pNfUtTGq+yFFfHnauFA8zQtLRfmuipmsKDKKLuyG+wC8ABW43A153YNawNTEtw==", "requires": { "@babel/helper-string-parser": "^7.19.4", "@babel/helper-validator-identifier": "^7.19.1", @@ -30044,19 +29905,19 @@ "dev": true }, "@eth-optimism/contracts": { - "version": "0.5.39", - "resolved": "https://registry.npmjs.org/@eth-optimism/contracts/-/contracts-0.5.39.tgz", - "integrity": "sha512-u3UufuZFzgidRN2/cC3mhRxX+M6VsMV9tauIKu8D5pym5/UO4pZr85WP3KxHFfLh1i8zmkdj+pN/GRQsNYCqMg==", + "version": "0.5.37", + "resolved": "https://registry.npmjs.org/@eth-optimism/contracts/-/contracts-0.5.37.tgz", + "integrity": "sha512-HbNUUDIM1dUAM0hWPfGp3l9/Zte40zi8QhVbUSIwdYRA7jG7cZgbteqavrjW8wwFqxkWX9IrtA0KAR7pNlSAIQ==", "requires": { - "@eth-optimism/core-utils": "0.12.0", + "@eth-optimism/core-utils": "0.10.1", "@ethersproject/abstract-provider": "^5.7.0", "@ethersproject/abstract-signer": "^5.7.0" } }, "@eth-optimism/core-utils": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/@eth-optimism/core-utils/-/core-utils-0.12.0.tgz", - "integrity": "sha512-qW+7LZYCz7i8dRa7SRlUKIo1VBU8lvN0HeXCxJR+z+xtMzMQpPds20XJNCMclszxYQHkXY00fOT6GvFw9ZL6nw==", + "version": "0.10.1", + "resolved": "https://registry.npmjs.org/@eth-optimism/core-utils/-/core-utils-0.10.1.tgz", + "integrity": "sha512-IJvG5UtYvyz6An9QdohlCLoeB3NBFxx2lRJKlPzvYYlfugUNNCHsajRIWIwJTcPRRma0WPd46JUsKACLJDdNrA==", "requires": { "@ethersproject/abi": "^5.7.0", "@ethersproject/abstract-provider": "^5.7.0", @@ -30650,10 +30511,25 @@ } }, "@flashbots/ethers-provider-bundle": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/@flashbots/ethers-provider-bundle/-/ethers-provider-bundle-0.6.1.tgz", - "integrity": "sha512-W7tSX832mi7XKlbg4dIMzV1HMw5Dg0ox0YOqPxW2nO2JqsAZwWYFrAk4nNZnsqRdexHiPF4JUYez/ELI5VpScA==", - "requires": {} + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/@flashbots/ethers-provider-bundle/-/ethers-provider-bundle-0.6.0.tgz", + "integrity": "sha512-+SVzxE7FIHq1mWeXwozfusJDGaDrQxc73SH2fHrRb3hf34SxJwdsBSfcYGQUdfSbw4vXF8ZpWTFigd5naY+vnw==", + "requires": { + "typescript": "4.1.2", + "uuid": "9.0.0" + }, + "dependencies": { + "typescript": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.1.2.tgz", + "integrity": "sha512-thGloWsGH3SOxv1SoY7QojKi0tc+8FnOmiarEGMbd/lar7QOEd3hvlx3Fp5y6FlDUGl9L+pd4n2e+oToGMmhRQ==" + }, + "uuid": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.0.tgz", + "integrity": "sha512-MXcSTerfPa4uqyzStbRoTgt5XIe3x5+42+q1sDuy3R5MDk66URdLMOZe5aPX/SQd+kuYAh0FdP/pO28IkQyTeg==" + } + } }, "@graphql-tools/batch-execute": { "version": "8.5.1", @@ -31044,9 +30920,9 @@ "integrity": "sha512-Rk4SkJFaXZiznFyC/t77Q0NKS4FL7TLJJsVG2V2oiEq3kJVeTdxysEe/yRWSpnWMe808XRDJ+VFh5pt/FN5plw==" }, "@noble/hashes": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.1.5.tgz", - "integrity": "sha512-LTMZiiLc+V4v1Yi16TD6aX2gmtKszNye0pQgbaLqkvhIqP7nVsSaJsWloGQjJfJ8offaoP5GtX3yY5swbcJxxQ==" + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.1.3.tgz", + "integrity": "sha512-CE0FCR57H2acVI5UOzIGSSIYxZ6v/HOhDR0Ro9VLyhnzLwx0o8W1mmgaqlEUx4049qJDlIBRztv5k+MM8vbO3A==" }, "@noble/secp256k1": { "version": "1.7.0", @@ -31522,6 +31398,15 @@ "color-convert": "^1.9.0" } }, + "cbor": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/cbor/-/cbor-8.1.0.tgz", + "integrity": "sha512-DwGjNW9omn6EwP70aXsn7FQJx5kO12tX0bZkaTjzdVFM6/7nhA4t0EENocKGx6D2Bch9PE2KzCUf5SceBdeijg==", + "dev": true, + "requires": { + "nofilter": "^3.1.0" + } + }, "chalk": { "version": "2.4.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", @@ -31580,6 +31465,12 @@ "graceful-fs": "^4.1.6" } }, + "nofilter": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/nofilter/-/nofilter-3.1.0.tgz", + "integrity": "sha512-l2NNj07e9afPnhAhvgVrCD/oy2Ai1yfLpuo3EpiO1jFTsB4sFz6oIfAfSZyQzVpkZQ9xS8ZS5g1jCBgq4Hwo0g==", + "dev": true + }, "semver": { "version": "6.3.0", "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", @@ -31906,9 +31797,9 @@ } }, "@openzeppelin/upgrades-core": { - "version": "1.20.6", - "resolved": "https://registry.npmjs.org/@openzeppelin/upgrades-core/-/upgrades-core-1.20.6.tgz", - "integrity": "sha512-KWdtlahm+iunlAlzLsdpBueanwEx0LLPfAkDL1p0C4SPjMiUqHHFlyGtmmWwdiqDpJ//605vfwkd5RqfnFrHSg==", + "version": "1.20.1", + "resolved": "https://registry.npmjs.org/@openzeppelin/upgrades-core/-/upgrades-core-1.20.1.tgz", + "integrity": "sha512-GXvqLkMNY1dGj9BAIXiqYjdj/qgpoeTed+pH2OL4UOqMlxIh8yIYdkLE9wOWiUVVr0rhUGqaoaJ9NeFLlVzBQQ==", "dev": true, "requires": { "cbor": "^8.0.0", @@ -31918,6 +31809,23 @@ "ethereumjs-util": "^7.0.3", "proper-lockfile": "^4.1.1", "solidity-ast": "^0.4.15" + }, + "dependencies": { + "cbor": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/cbor/-/cbor-8.1.0.tgz", + "integrity": "sha512-DwGjNW9omn6EwP70aXsn7FQJx5kO12tX0bZkaTjzdVFM6/7nhA4t0EENocKGx6D2Bch9PE2KzCUf5SceBdeijg==", + "dev": true, + "requires": { + "nofilter": "^3.1.0" + } + }, + "nofilter": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/nofilter/-/nofilter-3.1.0.tgz", + "integrity": "sha512-l2NNj07e9afPnhAhvgVrCD/oy2Ai1yfLpuo3EpiO1jFTsB4sFz6oIfAfSZyQzVpkZQ9xS8ZS5g1jCBgq4Hwo0g==", + "dev": true + } } }, "@poanet/solidity-flattener": { @@ -32294,9 +32202,9 @@ "integrity": "sha512-t09vSN3MdfsyCHoFcTRCH/iUtG7OJ0CsjzB8cjAmKc/va/kIgeDI/TxsigdncE/4be734m0cvIYwNaV4i2XqAw==" }, "@solana/buffer-layout": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/@solana/buffer-layout/-/buffer-layout-4.0.1.tgz", - "integrity": "sha512-E1ImOIAD1tBZFRdjeM4/pzTiTApC0AOBGwyAMS4fwIodCWArzJ3DWdoh8cKxeFM2fElkxBh2Aqts1BPC373rHA==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@solana/buffer-layout/-/buffer-layout-4.0.0.tgz", + "integrity": "sha512-lR0EMP2HC3+Mxwd4YcnZb0smnaDw7Bl2IQWZiTevRH5ZZBZn6VRWn3/92E3qdU4SSImJkA6IDHawOHAnx/qUvQ==", "requires": { "buffer": "~6.0.3" } @@ -32357,9 +32265,9 @@ } }, "@solidity-parser/parser": { - "version": "0.14.5", - "resolved": "https://registry.npmjs.org/@solidity-parser/parser/-/parser-0.14.5.tgz", - "integrity": "sha512-6dKnHZn7fg/iQATVEzqyUOyEidbn05q7YA2mQ9hC0MMXhhV3/JrsxmFSYZAcr7j1yUP700LLhTruvJ3MiQmjJg==", + "version": "0.14.3", + "resolved": "https://registry.npmjs.org/@solidity-parser/parser/-/parser-0.14.3.tgz", + "integrity": "sha512-29g2SZ29HtsqA58pLCtopI1P/cPy5/UAzlcAXO6T/CNJimG6yA8kx4NaseMyJULiC+TEs02Y9/yeHzClqoA0hw==", "requires": { "antlr4ts": "^0.5.0-alpha.4" } @@ -32394,31 +32302,15 @@ "integrity": "sha512-6cv318jVAvEvg7u7jFq1G6P6K1CMXKNG2btg2qgpmsTQURp4KrqeVrrZegYgx9l4hocpNZ8UAYc9Qw5ATrDg4g==", "requires": { "cbor": "^5.2.0" - }, - "dependencies": { - "cbor": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/cbor/-/cbor-5.2.0.tgz", - "integrity": "sha512-5IMhi9e1QU76ppa5/ajP1BmMWZ2FHkhAhjeVKQ/EFCgYSEaeVaoGtL7cxJskf9oCCk+XjzaIdc3IuU/dbA/o2A==", - "requires": { - "bignumber.js": "^9.0.1", - "nofilter": "^1.0.4" - } - }, - "nofilter": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/nofilter/-/nofilter-1.0.4.tgz", - "integrity": "sha512-N8lidFp+fCz+TD51+haYdbDGrcBWwuHX40F5+z0qkUjMJ5Tp+rdSuAkMJ9N9eoolDlEVTf6u5icM+cNKkKW2mA==" - } } }, "@truffle/codec": { - "version": "0.14.12", - "resolved": "https://registry.npmjs.org/@truffle/codec/-/codec-0.14.12.tgz", - "integrity": "sha512-0RIUoZQiGqNNp0zogeoCLoFoKSY65ih129rjrDqyv7Yy+IIpKgdOk8zZqg2sWIt7ukQFjZmAOwPznhYNGg/eKA==", + "version": "0.14.11", + "resolved": "https://registry.npmjs.org/@truffle/codec/-/codec-0.14.11.tgz", + "integrity": "sha512-NgfMNYemgMXqoEcJA5ZsEhxChCwq33rSxtNxlececEH/1Nf0r+ryfrfmLlyPmv8f3jorVf1GWa0zI0AedGCGYQ==", "requires": { "@truffle/abi-utils": "^0.3.6", - "@truffle/compile-common": "^0.9.2", + "@truffle/compile-common": "^0.9.1", "big.js": "^6.0.3", "bn.js": "^5.1.3", "cbor": "^5.2.0", @@ -32429,15 +32321,6 @@ "web3-utils": "1.8.1" }, "dependencies": { - "cbor": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/cbor/-/cbor-5.2.0.tgz", - "integrity": "sha512-5IMhi9e1QU76ppa5/ajP1BmMWZ2FHkhAhjeVKQ/EFCgYSEaeVaoGtL7cxJskf9oCCk+XjzaIdc3IuU/dbA/o2A==", - "requires": { - "bignumber.js": "^9.0.1", - "nofilter": "^1.0.4" - } - }, "lru-cache": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", @@ -32446,11 +32329,6 @@ "yallist": "^4.0.0" } }, - "nofilter": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/nofilter/-/nofilter-1.0.4.tgz", - "integrity": "sha512-N8lidFp+fCz+TD51+haYdbDGrcBWwuHX40F5+z0qkUjMJ5Tp+rdSuAkMJ9N9eoolDlEVTf6u5icM+cNKkKW2mA==" - }, "semver": { "version": "7.3.7", "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz", @@ -32467,30 +32345,23 @@ } }, "@truffle/compile-common": { - "version": "0.9.2", - "resolved": "https://registry.npmjs.org/@truffle/compile-common/-/compile-common-0.9.2.tgz", - "integrity": "sha512-n7MF/4/dntccj44RGe3PRMD8Vk46PU8dJtzd1VLAfgokK2Y2N+SjAzDskBnmAydZVWAM315nZIUQsgnY8xoATw==", + "version": "0.9.1", + "resolved": "https://registry.npmjs.org/@truffle/compile-common/-/compile-common-0.9.1.tgz", + "integrity": "sha512-mhdkX6ExZImHSBO3jGm6aAn8NpVtMTdjq50jRXY/O59/ZNC0J9WpRapxrAKUVNc+XydMdBlfeEpXoqTJg7cbXw==", "requires": { - "@truffle/error": "^0.2.0", + "@truffle/error": "^0.1.1", "colors": "1.4.0" - }, - "dependencies": { - "@truffle/error": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/@truffle/error/-/error-0.2.0.tgz", - "integrity": "sha512-Fe0/z4WWb7IP2gBnv3l6zqP87Y0kSMs7oiSLakKJq17q3GUunrHSdioKuNspdggxkXIBhEQLhi8C+LJdwmHKWQ==" - } } }, "@truffle/config": { - "version": "1.3.48", - "resolved": "https://registry.npmjs.org/@truffle/config/-/config-1.3.48.tgz", - "integrity": "sha512-Q+Tw9+HLcFJEReTL0x408Qb08hh1qwGnnwGm+Xd5xmg1HWAFOEE0k4Sm553goqqKhwzDgtYb0YddJ61zTardJw==", + "version": "1.3.47", + "resolved": "https://registry.npmjs.org/@truffle/config/-/config-1.3.47.tgz", + "integrity": "sha512-L7Gh+HC7xRVGF/rrZoUnJK7pjrTJpnmnSSo+Dt1wGQXHWSn5eq6pMoRzjmp6OgKovrOe0uyBAjFUOlIgVpZwXQ==", "optional": true, "requires": { - "@truffle/error": "^0.2.0", + "@truffle/error": "^0.1.1", "@truffle/events": "^0.1.20", - "@truffle/provider": "^0.3.2", + "@truffle/provider": "^0.3.1", "conf": "^10.1.2", "debug": "^4.3.1", "find-up": "^2.1.0", @@ -32498,12 +32369,6 @@ "original-require": "^1.0.1" }, "dependencies": { - "@truffle/error": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/@truffle/error/-/error-0.2.0.tgz", - "integrity": "sha512-Fe0/z4WWb7IP2gBnv3l6zqP87Y0kSMs7oiSLakKJq17q3GUunrHSdioKuNspdggxkXIBhEQLhi8C+LJdwmHKWQ==", - "optional": true - }, "find-up": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", @@ -32556,16 +32421,16 @@ } }, "@truffle/contract": { - "version": "4.6.11", - "resolved": "https://registry.npmjs.org/@truffle/contract/-/contract-4.6.11.tgz", - "integrity": "sha512-0YUS+4D4M+tLFx9JSxFgr7zfYBnHytmLDBjQKemhH/19NbSfos3bajdB08nKAphVM7IisoKnaCd5HOsEWusJJw==", + "version": "4.6.10", + "resolved": "https://registry.npmjs.org/@truffle/contract/-/contract-4.6.10.tgz", + "integrity": "sha512-69IZSXeQKRP3EutILqe+vLY5A5gUpeXUiZhm/Fy/qHHkP238vMjtOkTZGkY6bonYqmgk+vDY7KSYSYKzDNPdCA==", "dev": true, "requires": { "@ensdomains/ensjs": "^2.1.0", "@truffle/blockchain-utils": "^0.1.6", "@truffle/contract-schema": "^3.4.11", - "@truffle/debug-utils": "^6.0.43", - "@truffle/error": "^0.2.0", + "@truffle/debug-utils": "^6.0.42", + "@truffle/error": "^0.1.1", "@truffle/interface-adapter": "^0.5.26", "bignumber.js": "^7.2.1", "debug": "^4.3.1", @@ -32577,24 +32442,12 @@ "web3-utils": "1.8.1" }, "dependencies": { - "@truffle/error": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/@truffle/error/-/error-0.2.0.tgz", - "integrity": "sha512-Fe0/z4WWb7IP2gBnv3l6zqP87Y0kSMs7oiSLakKJq17q3GUunrHSdioKuNspdggxkXIBhEQLhi8C+LJdwmHKWQ==", - "dev": true - }, "bignumber.js": { "version": "7.2.1", "resolved": "https://registry.npmjs.org/bignumber.js/-/bignumber.js-7.2.1.tgz", "integrity": "sha512-S4XzBk5sMB+Rcb/LNcpzXr57VRTxgAvaAEDAl1AwRx27j00hT84O6OkteE7u8UB3NuaaygCRrEpqox4uDOrbdQ==", "dev": true }, - "bn.js": { - "version": "4.12.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", - "dev": true - }, "ethers": { "version": "4.0.49", "resolved": "https://registry.npmjs.org/ethers/-/ethers-4.0.49.tgz", @@ -32610,6 +32463,14 @@ "setimmediate": "1.0.4", "uuid": "2.0.1", "xmlhttprequest": "1.8.0" + }, + "dependencies": { + "bn.js": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", + "dev": true + } } }, "hash.js": { @@ -32712,16 +32573,16 @@ "optional": true }, "@truffle/db": { - "version": "2.0.11", - "resolved": "https://registry.npmjs.org/@truffle/db/-/db-2.0.11.tgz", - "integrity": "sha512-OozYKh4aw8AxGzQ8O1sXakvmhZtSFbUn45AvbqPHIBiOZ/pmb4KoNdcE5xeAUwS0k+gWuDoTo50NycpqJxkhYA==", + "version": "2.0.10", + "resolved": "https://registry.npmjs.org/@truffle/db/-/db-2.0.10.tgz", + "integrity": "sha512-APlORen3CwilujWZFTNhsX8yRWbNj7ifhuaLckNaWOcQ0knE7nrjHf2pXCdgtgRLP9Ae91jWHm32+7eLYgYpZA==", "optional": true, "requires": { "@graphql-tools/delegate": "^8.4.3", "@graphql-tools/schema": "^8.3.1", "@truffle/abi-utils": "^0.3.6", "@truffle/code-utils": "^3.0.1", - "@truffle/config": "^1.3.48", + "@truffle/config": "^1.3.47", "abstract-leveldown": "^7.2.0", "apollo-server": "^3.11.0", "debug": "^4.3.1", @@ -32782,20 +32643,20 @@ } }, "@truffle/db-loader": { - "version": "0.2.11", - "resolved": "https://registry.npmjs.org/@truffle/db-loader/-/db-loader-0.2.11.tgz", - "integrity": "sha512-C0uSqeFXAdw1yH/k+yMqz8fbmRLxY+etd8JKorcW1O2ieYmoFpF1mCdwdryl0X37pdlPV8yZrRAo48YFrgy1Pw==", + "version": "0.2.10", + "resolved": "https://registry.npmjs.org/@truffle/db-loader/-/db-loader-0.2.10.tgz", + "integrity": "sha512-07Vf1yuwJur78K4hgG//MGEvLL4ZAnEu6BBvGK/ZSJ/iIQjj9a4wgQgXrAKMsbPGNEtR7qy+0WpvOslpaDnQZQ==", "requires": { - "@truffle/db": "^2.0.11" + "@truffle/db": "^2.0.10" } }, "@truffle/debug-utils": { - "version": "6.0.43", - "resolved": "https://registry.npmjs.org/@truffle/debug-utils/-/debug-utils-6.0.43.tgz", - "integrity": "sha512-vJQmfSyrEgLjn7tp7K6WlZAkjISb5MFlN8mAjGnMz30Ja6/cTMQ0l6NLZGPYgZYk5uB4KrqcmNC+PqXrgXWt2Q==", + "version": "6.0.42", + "resolved": "https://registry.npmjs.org/@truffle/debug-utils/-/debug-utils-6.0.42.tgz", + "integrity": "sha512-9v70tj+My0Z2UZJ9OsuUlfo4Dt2AJqAQa/YWtGe28H8zsi+o9Dca0RsKWecuprdllgzrEs7ad8QUtSINhwjIlg==", "dev": true, "requires": { - "@truffle/codec": "^0.14.12", + "@truffle/codec": "^0.14.11", "@trufflesuite/chromafi": "^3.0.0", "bn.js": "^5.1.3", "chalk": "^2.4.2", @@ -32862,13 +32723,13 @@ } }, "@truffle/debugger": { - "version": "11.0.22", - "resolved": "https://registry.npmjs.org/@truffle/debugger/-/debugger-11.0.22.tgz", - "integrity": "sha512-U2eCusUqYQsA13Tex5kVLGqn4nWWJewZBmnHbyOL6R1WX/aqXcs7gQhPgAuSw5kMtgmZ1DhtNZhlQ5RvkE8zhA==", + "version": "11.0.21", + "resolved": "https://registry.npmjs.org/@truffle/debugger/-/debugger-11.0.21.tgz", + "integrity": "sha512-iYoa01CzFVFhusXrQM34cTRqKT7W2KHoyciYo14IUjPAnUk/i7DwB4zcTqOfgTyz36G2Yd92uYf8Rc2t0Sdv0w==", "requires": { "@truffle/abi-utils": "^0.3.6", - "@truffle/codec": "^0.14.12", - "@truffle/source-map-utils": "^1.3.104", + "@truffle/codec": "^0.14.11", + "@truffle/source-map-utils": "^1.3.103", "bn.js": "^5.1.3", "debug": "^4.3.1", "json-pointer": "^0.6.1", @@ -32908,8 +32769,7 @@ "@truffle/error": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/@truffle/error/-/error-0.1.1.tgz", - "integrity": "sha512-sE7c9IHIGdbK4YayH4BC8i8qMjoAOeg6nUXUDZZp8wlU21/EMpaG+CLx+KqcIPyR+GSWIW3Dm0PXkr2nlggFDA==", - "dev": true + "integrity": "sha512-sE7c9IHIGdbK4YayH4BC8i8qMjoAOeg6nUXUDZZp8wlU21/EMpaG+CLx+KqcIPyR+GSWIW3Dm0PXkr2nlggFDA==" }, "@truffle/events": { "version": "0.1.20", @@ -33061,32 +32921,24 @@ "optional": true }, "@truffle/provider": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/@truffle/provider/-/provider-0.3.2.tgz", - "integrity": "sha512-WJ0ebmFYIILg+P0Xa7MnBrjrnbxtyOIOpcGZ8UF0jA+WXp8gFRVs7YYteCJezTwrEZ6JzOCnC5G3vshJzf7GsA==", + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/@truffle/provider/-/provider-0.3.1.tgz", + "integrity": "sha512-qYSRjAprIylgmHl+Lq2Fzn8gevJ5vmCk3Gc3Zlpi7jkjL3SS14eOH0A5BqJWFkzJB43tPBHAXY1KWLYio3/3gg==", "optional": true, "requires": { - "@truffle/error": "^0.2.0", + "@truffle/error": "^0.1.1", "@truffle/interface-adapter": "^0.5.26", "debug": "^4.3.1", "web3": "1.8.1" - }, - "dependencies": { - "@truffle/error": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/@truffle/error/-/error-0.2.0.tgz", - "integrity": "sha512-Fe0/z4WWb7IP2gBnv3l6zqP87Y0kSMs7oiSLakKJq17q3GUunrHSdioKuNspdggxkXIBhEQLhi8C+LJdwmHKWQ==", - "optional": true - } } }, "@truffle/source-map-utils": { - "version": "1.3.104", - "resolved": "https://registry.npmjs.org/@truffle/source-map-utils/-/source-map-utils-1.3.104.tgz", - "integrity": "sha512-AVD1+jnw/zj7Vqw8i8RIZ4pMEW69bAqTKjJbY6kFsxG9S1oi7ZEUFSBvuja/JNm8xkmmAwIc0NOkQr2K2G/rSA==", + "version": "1.3.103", + "resolved": "https://registry.npmjs.org/@truffle/source-map-utils/-/source-map-utils-1.3.103.tgz", + "integrity": "sha512-zLh8brf4s1MlwrsPABDP2LFY9rv5MtUE8iG5Np7guOtg50mucq2gN6XMAReQXJC4yY0an16YcnHMODpS48XD3Q==", "requires": { "@truffle/code-utils": "^3.0.1", - "@truffle/codec": "^0.14.12", + "@truffle/codec": "^0.14.11", "debug": "^4.3.1", "json-pointer": "^0.6.1", "node-interval-tree": "^1.3.3", @@ -33214,9 +33066,9 @@ } }, "@types/abstract-leveldown": { - "version": "7.2.1", - "resolved": "https://registry.npmjs.org/@types/abstract-leveldown/-/abstract-leveldown-7.2.1.tgz", - "integrity": "sha512-YK8irIC+eMrrmtGx0H4ISn9GgzLd9dojZWJaMbjp1YHLl2VqqNFBNrL5Q3KjGf4VE3sf/4hmq6EhQZ7kZp1NoQ==" + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@types/abstract-leveldown/-/abstract-leveldown-7.2.0.tgz", + "integrity": "sha512-q5veSX6zjUy/DlDhR4Y4cU0k2Ar+DT2LUraP00T19WLmTO6Se1djepCCaqU6nQrwcJ5Hyo/CWqxTzrrFg8eqbQ==" }, "@types/accepts": { "version": "1.3.5", @@ -33259,20 +33111,20 @@ } }, "@types/cacheable-request": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/@types/cacheable-request/-/cacheable-request-6.0.3.tgz", - "integrity": "sha512-IQ3EbTzGxIigb1I3qPZc1rWJnH0BmSKv5QYTalEwweFvyBDLSAe24zP0le/hyi7ecGfZVlIVAg4BZqb8WBwKqw==", + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/@types/cacheable-request/-/cacheable-request-6.0.2.tgz", + "integrity": "sha512-B3xVo+dlKM6nnKTcmm5ZtY/OL8bOAOd2Olee9M1zft65ox50OzjEHW91sDiU9j6cvW8Ejg1/Qkf4xd2kugApUA==", "requires": { "@types/http-cache-semantics": "*", - "@types/keyv": "^3.1.4", + "@types/keyv": "*", "@types/node": "*", - "@types/responselike": "^1.0.0" + "@types/responselike": "*" } }, "@types/chai": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/@types/chai/-/chai-4.3.4.tgz", - "integrity": "sha512-KnRanxnpfpjUTqTCXslZSEdLfXExwgNxYPdiO2WGUj8+HDjFi8R3k5RVKPeSCzLjCcshCAtVO2QBbVuAV4kTnw==", + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/@types/chai/-/chai-4.3.3.tgz", + "integrity": "sha512-hC7OMnszpxhZPduX+m+nrx+uFoLkWOMiR4oa/AZF3MuSETYTZmFfJAHqZEM8MVlvfG7BEUcgvtwoCTxBp6hm3g==", "dev": true }, "@types/concat-stream": { @@ -33324,9 +33176,9 @@ } }, "@types/express-serve-static-core": { - "version": "4.17.32", - "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.17.32.tgz", - "integrity": "sha512-aI5h/VOkxOF2Z1saPy0Zsxs5avets/iaiAJYznQFm5By/pamU31xWKL//epiF4OfUA2qTOc9PV6tCUjhO8wlZA==", + "version": "4.17.31", + "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.17.31.tgz", + "integrity": "sha512-DxMhY+NAsTwMMFHBTtJFNp5qiHKJ7TeqOo23zVEM9alT1Ml27Q3xcTH0xwxn7Q0BbMcVEJOs/7aQtUWupUQN3Q==", "requires": { "@types/node": "*", "@types/qs": "*", @@ -33356,11 +33208,11 @@ "integrity": "sha512-SZs7ekbP8CN0txVG2xVRH6EgKmEm31BOxA07vkFaETzZz1xh+cbt8BcI0slpymvwhx5dlFnQG2rTlPVQn+iRPQ==" }, "@types/keyv": { - "version": "3.1.4", - "resolved": "https://registry.npmjs.org/@types/keyv/-/keyv-3.1.4.tgz", - "integrity": "sha512-BQ5aZNSCpj7D6K2ksrRCTmKRLEpnPvWDiLPfoGyhZ++8YtiK9d/3DBKPJgry359X/P1PfruyYwvnvwFjuEiEIg==", + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@types/keyv/-/keyv-4.2.0.tgz", + "integrity": "sha512-xoBtGl5R9jeKUhc8ZqeYaRDx04qqJ10yhhXYGmJ4Jr8qKpvMsDQQrNUvF/wUJ4klOtmJeJM+p2Xo3zp9uaC3tw==", "requires": { - "@types/node": "*" + "keyv": "*" } }, "@types/level-errors": { @@ -33432,9 +33284,9 @@ } }, "@types/prettier": { - "version": "2.7.2", - "resolved": "https://registry.npmjs.org/@types/prettier/-/prettier-2.7.2.tgz", - "integrity": "sha512-KufADq8uQqo1pYKVIYzfKbJfBAc0sOeXqGbFaSpv8MRmC/zXgowNZmFcbngndGk922QDmOASEXUZCaY48gs4cg==", + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/@types/prettier/-/prettier-2.7.1.tgz", + "integrity": "sha512-ri0UmynRRvZiiUJdiz38MmIblKK+oH30MztdBVR95dv/Ubw6neWSb8u1XpRb72L4qsZOhz+L+z9JD40SJmfWow==", "dev": true }, "@types/qs": { @@ -33491,9 +33343,9 @@ } }, "@types/sinon-chai": { - "version": "3.2.9", - "resolved": "https://registry.npmjs.org/@types/sinon-chai/-/sinon-chai-3.2.9.tgz", - "integrity": "sha512-/19t63pFYU0ikrdbXKBWj9PCdnKyTd0Qkz0X91Ta081cYsq90OxYdcWwK/dwEoDa6dtXgj2HJfmzgq+QZTHdmQ==", + "version": "3.2.8", + "resolved": "https://registry.npmjs.org/@types/sinon-chai/-/sinon-chai-3.2.8.tgz", + "integrity": "sha512-d4ImIQbT/rKMG8+AXpmcan5T2/PNeSjrYhvkwet6z0p8kzYtfgA32xzOBlbU0yqJfq+/0Ml805iFoODO0LP5/g==", "dev": true, "requires": { "@types/chai": "*", @@ -33706,7 +33558,8 @@ "@yarnpkg/lockfile": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/@yarnpkg/lockfile/-/lockfile-1.1.0.tgz", - "integrity": "sha512-GpSwvyXOcOOlV70vbnzjj4fW5xW/FdUF6nQEt1ENy7m4ZCczi1+/buVUPAqmGfqznsORNFzUMjctTIp8a9tuCQ==" + "integrity": "sha512-GpSwvyXOcOOlV70vbnzjj4fW5xW/FdUF6nQEt1ENy7m4ZCczi1+/buVUPAqmGfqznsORNFzUMjctTIp8a9tuCQ==", + "dev": true }, "abbrev": { "version": "1.1.1", @@ -33806,6 +33659,13 @@ "debug": "^4.1.0", "depd": "^1.1.2", "humanize-ms": "^1.2.1" + }, + "dependencies": { + "depd": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", + "integrity": "sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==" + } } }, "aggregate-error": { @@ -33838,9 +33698,9 @@ }, "dependencies": { "ajv": { - "version": "8.12.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz", - "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==", + "version": "8.11.2", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.11.2.tgz", + "integrity": "sha512-E4bfmKAhGiSTvMfL1Myyycaub+cUEU2/IvpylXkUu7CHBkBj1f/ikdzbD7YQ6FKUbixDxeYvB/xY4fvyroDlQg==", "optional": true, "requires": { "fast-deep-equal": "^3.1.1", @@ -33895,9 +33755,9 @@ "integrity": "sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==" }, "anymatch": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", - "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz", + "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==", "requires": { "normalize-path": "^3.0.0", "picomatch": "^2.0.4" @@ -34077,17 +33937,6 @@ "@types/qs": "*", "@types/serve-static": "*" } - }, - "@types/express-serve-static-core": { - "version": "4.17.31", - "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.17.31.tgz", - "integrity": "sha512-DxMhY+NAsTwMMFHBTtJFNp5qiHKJ7TeqOo23zVEM9alT1Ml27Q3xcTH0xwxn7Q0BbMcVEJOs/7aQtUWupUQN3Q==", - "optional": true, - "requires": { - "@types/node": "*", - "@types/qs": "*", - "@types/range-parser": "*" - } } } }, @@ -34165,6 +34014,13 @@ } } }, + "arg": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz", + "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==", + "optional": true, + "peer": true + }, "argparse": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", @@ -34196,13 +34052,13 @@ "integrity": "sha512-MNha4BWQ6JbwhFhj03YK552f7cb3AzoE8SzeljgChvL1dl3IcvggXVz1DilzySZkCja+CXuZbdW7yATchWn8/Q==" }, "array.prototype.reduce": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/array.prototype.reduce/-/array.prototype.reduce-1.0.5.tgz", - "integrity": "sha512-kDdugMl7id9COE8R7MHF5jWk7Dqt/fs4Pv+JXoICnYwqpjjjbUurz6w5fT5IG6brLdJhv6/VoHB0H7oyIBXd+Q==", + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/array.prototype.reduce/-/array.prototype.reduce-1.0.4.tgz", + "integrity": "sha512-WnM+AjG/DvLRLo4DDl+r+SvCzYtD2Jd9oeBYMcEaI7t3fFrHY9M53/wdLcTvmZNQ70IU6Htj0emFkZ5TS+lrdw==", "requires": { "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4", + "define-properties": "^1.1.3", + "es-abstract": "^1.19.2", "es-array-method-boxes-properly": "^1.0.0", "is-string": "^1.0.7" } @@ -34315,7 +34171,8 @@ "at-least-node": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/at-least-node/-/at-least-node-1.0.0.tgz", - "integrity": "sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==" + "integrity": "sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==", + "optional": true }, "atomically": { "version": "1.7.0", @@ -34452,9 +34309,9 @@ } }, "bigint-crypto-utils": { - "version": "3.1.8", - "resolved": "https://registry.npmjs.org/bigint-crypto-utils/-/bigint-crypto-utils-3.1.8.tgz", - "integrity": "sha512-+VMV9Laq8pXLBKKKK49nOoq9bfR3j7NNQAtbA617a4nw9bVLo8rsqkKMBgM2AJWlNX9fEIyYaYX+d0laqYV4tw==", + "version": "3.1.7", + "resolved": "https://registry.npmjs.org/bigint-crypto-utils/-/bigint-crypto-utils-3.1.7.tgz", + "integrity": "sha512-zpCQpIE2Oy5WIQpjC9iYZf8Uh9QqoS51ZCooAcNvzv1AQ3VWdT52D0ksr1+/faeK8HVIej1bxXcP75YcqH3KPA==", "requires": { "bigint-mod-arith": "^3.1.0" } @@ -34558,11 +34415,6 @@ "ms": "2.0.0" } }, - "depd": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", - "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==" - }, "ms": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", @@ -34773,9 +34625,9 @@ } }, "bufio": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/bufio/-/bufio-1.2.0.tgz", - "integrity": "sha512-UlFk8z/PwdhYQTXSQQagwGAdtRI83gib2n4uy4rQnenxUM2yQi8lBDzF230BNk+3wAoZDxYRoBwVVUPgHa9MCA==" + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/bufio/-/bufio-1.1.3.tgz", + "integrity": "sha512-W0ydG8t+ST+drUpEwl1N+dU9Ije06g8+43CLtvEIzfKo9nPFLXbKqDYE2XSg4w6RugsBcCj7pEU7jOpBC6BqrA==" }, "bunyan": { "version": "1.8.15", @@ -34860,9 +34712,9 @@ "dev": true }, "caniuse-lite": { - "version": "1.0.30001442", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001442.tgz", - "integrity": "sha512-239m03Pqy0hwxYPYR5JwOIxRJfLTWtle9FV8zosfV5pHg+/51uD4nxcUlM8+mWWGfwKtt8lJNHnD3cWw9VZ6ow==" + "version": "1.0.30001423", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001423.tgz", + "integrity": "sha512-09iwWGOlifvE1XuHokFMP7eR38a0JnajoyL3/i87c8ZjRWRrdKo1fqjNfugfBD0UDBIOz0U+jtNhJ0EPm1VleQ==" }, "caseless": { "version": "0.12.0", @@ -34875,12 +34727,12 @@ "integrity": "sha512-K7Qy8O9p76sL3/3m7/zLKbRkyOlSZAgzEaLhyj2mXS8PsCud2Eo4hAb8aLtZqHh0QGqLcb9dlJSu6lHRVENm1w==" }, "cbor": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/cbor/-/cbor-8.1.0.tgz", - "integrity": "sha512-DwGjNW9omn6EwP70aXsn7FQJx5kO12tX0bZkaTjzdVFM6/7nhA4t0EENocKGx6D2Bch9PE2KzCUf5SceBdeijg==", - "dev": true, + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/cbor/-/cbor-5.2.0.tgz", + "integrity": "sha512-5IMhi9e1QU76ppa5/ajP1BmMWZ2FHkhAhjeVKQ/EFCgYSEaeVaoGtL7cxJskf9oCCk+XjzaIdc3IuU/dbA/o2A==", "requires": { - "nofilter": "^3.1.0" + "bignumber.js": "^9.0.1", + "nofilter": "^1.0.4" } }, "chai": { @@ -35204,9 +35056,9 @@ "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==" }, "compare-versions": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/compare-versions/-/compare-versions-5.0.3.tgz", - "integrity": "sha512-4UZlZP8Z99MGEY+Ovg/uJxJuvoXuN4M6B3hKaiackiHrgzQFEe3diJi1mf1PNHbFujM7FvLrK2bpgIaImbtZ1A==", + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/compare-versions/-/compare-versions-5.0.1.tgz", + "integrity": "sha512-v8Au3l0b+Nwkp4G142JcgJFh1/TUhdxut7wzD1Nq1dyp5oa3tXaqb03EXOAB6jS4gMlalkjAUPZBMiAfKUixHQ==", "dev": true }, "complex.js": { @@ -35278,9 +35130,9 @@ }, "dependencies": { "ajv": { - "version": "8.12.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz", - "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==", + "version": "8.11.2", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.11.2.tgz", + "integrity": "sha512-E4bfmKAhGiSTvMfL1Myyycaub+cUEU2/IvpylXkUu7CHBkBj1f/ikdzbD7YQ6FKUbixDxeYvB/xY4fvyroDlQg==", "optional": true, "requires": { "fast-deep-equal": "^3.1.1", @@ -35357,9 +35209,9 @@ "integrity": "sha512-JxbCBUdrfr6AQjOXrxoTvAMJO4HBTUIlBzslcJPAz+/KT8yk53fXun51u+RenNYvad/+Vc2DIz5o9UxlCDymFQ==" }, "core-js-compat": { - "version": "3.27.1", - "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.27.1.tgz", - "integrity": "sha512-Dg91JFeCDA17FKnneN7oCMz4BkQ4TcffkgHP4OWwp9yx3pi7ubqMDXXSacfNak1PQqjc95skyt+YBLHQJnkJwA==", + "version": "3.25.5", + "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.25.5.tgz", + "integrity": "sha512-ovcyhs2DEBUIE0MGEKHP4olCUW/XYte3Vroyxuh38rD1wAO4dHohsovUC4eAOuzFxE6b+RXvBU3UZ9o0YhUTkA==", "requires": { "browserslist": "^4.21.4" } @@ -35424,6 +35276,13 @@ "sha.js": "^2.4.8" } }, + "create-require": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz", + "integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==", + "optional": true, + "peer": true + }, "cross-fetch": { "version": "3.1.5", "resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-3.1.5.tgz", @@ -35436,6 +35295,7 @@ "version": "6.0.5", "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", + "dev": true, "requires": { "nice-try": "^1.0.4", "path-key": "^2.0.1", @@ -35447,7 +35307,8 @@ "semver": { "version": "5.7.1", "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true } } }, @@ -35826,9 +35687,9 @@ "optional": true }, "depd": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", - "integrity": "sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==" + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", + "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==" }, "des.js": { "version": "1.0.1", @@ -36005,7 +35866,8 @@ "emittery": { "version": "0.4.1", "resolved": "https://registry.npmjs.org/emittery/-/emittery-0.4.1.tgz", - "integrity": "sha512-r4eRSeStEGf6M5SKdrQhhLK5bOwOBxQhIE3YSTnZE3GpKiLfnnhE+tPtrJE79+eDJgm39BM6LSoI8SCx4HbwlQ==" + "integrity": "sha512-r4eRSeStEGf6M5SKdrQhhLK5bOwOBxQhIE3YSTnZE3GpKiLfnnhE+tPtrJE79+eDJgm39BM6LSoI8SCx4HbwlQ==", + "optional": true }, "emoji-regex": { "version": "8.0.0", @@ -36095,55 +35957,34 @@ } }, "es-abstract": { - "version": "1.21.0", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.21.0.tgz", - "integrity": "sha512-GUGtW7eXQay0c+PRq0sGIKSdaBorfVqsCMhGHo4elP7YVqZu9nCZS4UkK4gv71gOWNMra/PaSKD3ao1oWExO0g==", + "version": "1.20.4", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.20.4.tgz", + "integrity": "sha512-0UtvRN79eMe2L+UNEF1BwRe364sj/DXhQ/k5FmivgoSdpM90b8Jc0mDzKMGo7QS0BVbOP/bTwBKNnDc9rNzaPA==", "requires": { "call-bind": "^1.0.2", - "es-set-tostringtag": "^2.0.0", "es-to-primitive": "^1.2.1", "function-bind": "^1.1.1", "function.prototype.name": "^1.1.5", "get-intrinsic": "^1.1.3", "get-symbol-description": "^1.0.0", - "globalthis": "^1.0.3", - "gopd": "^1.0.1", "has": "^1.0.3", "has-property-descriptors": "^1.0.0", - "has-proto": "^1.0.1", "has-symbols": "^1.0.3", - "internal-slot": "^1.0.4", - "is-array-buffer": "^3.0.0", + "internal-slot": "^1.0.3", "is-callable": "^1.2.7", "is-negative-zero": "^2.0.2", "is-regex": "^1.1.4", "is-shared-array-buffer": "^1.0.2", "is-string": "^1.0.7", - "is-typed-array": "^1.1.10", "is-weakref": "^1.0.2", "object-inspect": "^1.12.2", "object-keys": "^1.1.1", "object.assign": "^4.1.4", "regexp.prototype.flags": "^1.4.3", "safe-regex-test": "^1.0.0", - "string.prototype.trimend": "^1.0.6", - "string.prototype.trimstart": "^1.0.6", - "typed-array-length": "^1.0.4", - "unbox-primitive": "^1.0.2", - "which-typed-array": "^1.1.9" - }, - "dependencies": { - "object.assign": { - "version": "4.1.4", - "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.4.tgz", - "integrity": "sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ==", - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "has-symbols": "^1.0.3", - "object-keys": "^1.1.1" - } - } + "string.prototype.trimend": "^1.0.5", + "string.prototype.trimstart": "^1.0.5", + "unbox-primitive": "^1.0.2" } }, "es-array-method-boxes-properly": { @@ -36151,16 +35992,6 @@ "resolved": "https://registry.npmjs.org/es-array-method-boxes-properly/-/es-array-method-boxes-properly-1.0.0.tgz", "integrity": "sha512-wd6JXUmyHmt8T5a2xreUwKcGPq6f1f+WwIJkijUqiGcJz1qqnZgP6XIK+QyIWU5lT7imeNxUll48bziG+TSYcA==" }, - "es-set-tostringtag": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.0.1.tgz", - "integrity": "sha512-g3OMbtlwY3QewlqAiMLI47KywjWZoEytKr8pf6iTC8uJq5bIAH52Z9pnQ8pVL6whrCto53JZDuUIsifGeLorTg==", - "requires": { - "get-intrinsic": "^1.1.3", - "has": "^1.0.3", - "has-tostringtag": "^1.0.0" - } - }, "es-to-primitive": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", @@ -36613,6 +36444,17 @@ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==" }, + "object.assign": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.0.tgz", + "integrity": "sha512-exHJeq6kBKj58mqGyTQ9DFvrZC/eR6OwxzoM9YRoGBqrXYonaFyGiFMuc9VZrXf7DarreEwMpurG3dd+CNyW5w==", + "requires": { + "define-properties": "^1.1.2", + "function-bind": "^1.1.1", + "has-symbols": "^1.0.0", + "object-keys": "^1.0.11" + } + }, "p-locate": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", @@ -38060,11 +37902,6 @@ "ms": "2.0.0" } }, - "depd": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", - "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==" - }, "ms": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", @@ -38236,6 +38073,7 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/find-yarn-workspace-root/-/find-yarn-workspace-root-2.0.0.tgz", "integrity": "sha512-1IMnbjt4KzsQfnhnzNd8wUEgXZ44IzZaZmnLYx7D5FZlaHt2gW20Cri8Q+E/t5tIj4+epTBub+2Zxu/vNILzqQ==", + "dev": true, "requires": { "micromatch": "^4.0.2" } @@ -45012,22 +44850,6 @@ "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", "peer": true }, - "globalthis": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.3.tgz", - "integrity": "sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA==", - "requires": { - "define-properties": "^1.1.3" - } - }, - "gopd": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", - "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", - "requires": { - "get-intrinsic": "^1.1.3" - } - }, "got": { "version": "12.1.0", "resolved": "https://registry.npmjs.org/got/-/got-12.1.0.tgz", @@ -45469,11 +45291,6 @@ "get-intrinsic": "^1.1.1" } }, - "has-proto": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.1.tgz", - "integrity": "sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==" - }, "has-symbol-support-x": { "version": "1.4.2", "resolved": "https://registry.npmjs.org/has-symbol-support-x/-/has-symbol-support-x-1.4.2.tgz", @@ -45605,13 +45422,6 @@ "setprototypeof": "1.2.0", "statuses": "2.0.1", "toidentifier": "1.0.1" - }, - "dependencies": { - "depd": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", - "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==" - } } }, "http-https": { @@ -45707,9 +45517,9 @@ "integrity": "sha512-HR7EVodfFUdQCTIeySw+WDRFJlPcLOJbXfwwZ7Oom6tjsvZ3bOkCDJHehQC3nxJrv7+f9XecwazynjU8e4Vw3Q==" }, "immutable": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/immutable/-/immutable-4.2.2.tgz", - "integrity": "sha512-fTMKDwtbvO5tldky9QZ2fMX7slR0mYpY5nbnFWYp0fOzDhHqhgIw9KoYgxLWsoNTS9ZHGauHj18DTyEw6BK3Og==" + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/immutable/-/immutable-4.1.0.tgz", + "integrity": "sha512-oNkuqVTA8jqG1Q6c+UglTOD1xhC1BtjKI7XkCXRkZHrN5m18/XsnUp8Q89GkQO/z+0WjonSvl0FLhDYftp46nQ==" }, "imul": { "version": "1.0.1", @@ -45743,11 +45553,11 @@ "optional": true }, "internal-slot": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.4.tgz", - "integrity": "sha512-tA8URYccNzMo94s5MQZgH8NB/XTa6HsOo0MLfXTKKEnHVVdegzaQoFZ7Jp44bdvLvY2waT5dc+j5ICEswhi7UQ==", + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.3.tgz", + "integrity": "sha512-O0DB1JC/sPyZl7cIo78n5dR7eUSwwpYPiXRhTzNxZVAMUuB8vlnRFyLxdrVToks6XPLVnFfbzaVd5WLjhgg+vA==", "requires": { - "get-intrinsic": "^1.1.3", + "get-intrinsic": "^1.1.0", "has": "^1.0.3", "side-channel": "^1.0.4" } @@ -45788,16 +45598,6 @@ "has-tostringtag": "^1.0.0" } }, - "is-array-buffer": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.1.tgz", - "integrity": "sha512-ASfLknmY8Xa2XtB4wmbz13Wu202baeA18cJBCeCy0wXUHZF0IPyVEXqKEcd+t2fNSLLL1vC6k7lxZEojNbISXQ==", - "requires": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.1.3", - "is-typed-array": "^1.1.10" - } - }, "is-arrayish": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", @@ -45843,6 +45643,7 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-2.0.0.tgz", "integrity": "sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w==", + "dev": true, "requires": { "ci-info": "^2.0.0" } @@ -45858,7 +45659,8 @@ "is-docker": { "version": "2.2.1", "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz", - "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==" + "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==", + "dev": true }, "is-extglob": { "version": "2.1.1", @@ -45992,14 +45794,14 @@ } }, "is-typed-array": { - "version": "1.1.10", - "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.10.tgz", - "integrity": "sha512-PJqgEHiWZvMpaFZ3uTc8kHPM4+4ADTlDniuQL7cU/UDA0Ql7F70yGfHph3cLNe+c9toaigv+DFzTJKhc2CtO6A==", + "version": "1.1.9", + "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.9.tgz", + "integrity": "sha512-kfrlnTTn8pZkfpJMUgYD7YZ3qzeJgWUn8XfVYBARc4wnmNOmLbmuuaAs3q5fvB0UJOn6yHAKaGTPM7d6ezoD/A==", "requires": { "available-typed-arrays": "^1.0.5", "call-bind": "^1.0.2", + "es-abstract": "^1.20.0", "for-each": "^0.3.3", - "gopd": "^1.0.1", "has-tostringtag": "^1.0.0" } }, @@ -46045,6 +45847,7 @@ "version": "2.2.0", "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", + "dev": true, "requires": { "is-docker": "^2.0.0" } @@ -46211,11 +46014,11 @@ "optional": true }, "json-stable-stringify": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/json-stable-stringify/-/json-stable-stringify-1.0.2.tgz", - "integrity": "sha512-eunSSaEnxV12z+Z73y/j5N37/In40GK4GmsSy+tEHJMxknvqnA7/djeYtAgW0GsWHUfg+847WJjKaEylk2y09g==", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json-stable-stringify/-/json-stable-stringify-1.0.1.tgz", + "integrity": "sha512-i/J297TW6xyj7sDFa7AmBPkQvLIxWr2kKPWI26tXydnZrzVAocNqn5DMNT1Mzk0vit1V5UkRM7C1KdVNp7Lmcg==", "requires": { - "jsonify": "^0.0.1" + "jsonify": "~0.0.0" } }, "json-stringify-safe": { @@ -46224,9 +46027,9 @@ "integrity": "sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==" }, "json5": { - "version": "2.2.3", - "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", - "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.2.tgz", + "integrity": "sha512-46Tk9JiOL2z7ytNQWFLpj99RZkVgeHf87yGQKsIkaPz1qSH9UczKH1rO7K3wgRselo0tYMUNfecYpm/p1vC7tQ==", "peer": true }, "jsonfile": { @@ -46279,9 +46082,9 @@ } }, "keyv": { - "version": "4.5.2", - "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.2.tgz", - "integrity": "sha512-5MHbFaKn8cNSmVW7BYnijeAVlE4cYA/SVkifVgrh7yotnfhKmjuXpDKjrABLnT0SfHWV21P8ow07OGfRrNDg8g==", + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.0.tgz", + "integrity": "sha512-2YvuMsA+jnFGtBareKqgANOEKe1mk3HKiXu2fRmAfyxG0MJAywNhi5ttWA3PMjl4NmpyjZNbFifR2vNjW1znfA==", "requires": { "json-buffer": "3.0.1" } @@ -46298,6 +46101,7 @@ "version": "6.0.0", "resolved": "https://registry.npmjs.org/klaw-sync/-/klaw-sync-6.0.0.tgz", "integrity": "sha512-nIeuVSzdCCs6TDPTqI8w1Yre34sSq7AkZ4B3sfOBbI2CgVSB4Du4aLQijFU2+lhAFCwt9+42Hel6lQNIv6AntQ==", + "dev": true, "requires": { "graceful-fs": "^4.1.11" } @@ -46463,6 +46267,7 @@ "version": "5.6.0", "resolved": "https://registry.npmjs.org/leveldown/-/leveldown-5.6.0.tgz", "integrity": "sha512-iB8O/7Db9lPaITU1aA2txU/cBEXAt4vWwKQRrrWuS6XDgbP4QZGj9BL2aNbwb002atoQ/lIotJkfyzz+ygQnUQ==", + "optional": true, "requires": { "abstract-leveldown": "~6.2.1", "napi-macros": "~2.0.0", @@ -46473,6 +46278,7 @@ "version": "6.2.3", "resolved": "https://registry.npmjs.org/abstract-leveldown/-/abstract-leveldown-6.2.3.tgz", "integrity": "sha512-BsLm5vFMRUrrLeCcRc+G0t2qOaTzpoJQLOubq2XM72eNpjF5UdU5o/5NvlNhx95XHcAvcl8OMXr4mlg/fRgUXQ==", + "optional": true, "requires": { "buffer": "^5.5.0", "immediate": "^3.2.3", @@ -46485,6 +46291,7 @@ "version": "5.7.1", "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", + "optional": true, "requires": { "base64-js": "^1.3.1", "ieee754": "^1.1.13" @@ -46494,6 +46301,7 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/level-supports/-/level-supports-1.0.1.tgz", "integrity": "sha512-rXM7GYnW8gsl1vedTJIbzOrRv85c/2uCMpiiCzO2fndd06U/kUXEEU9evYn4zFggBOg36IsBW8LzqIpETwwQzg==", + "optional": true, "requires": { "xtend": "^4.0.2" } @@ -46501,7 +46309,8 @@ "node-gyp-build": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.1.1.tgz", - "integrity": "sha512-dSq1xmcPDKPZ2EED2S6zw/b9NKsqzXRE6dVr8TVQnI3FJOTteUMuqF3Qqs6LZg+mLGYJWqQzMbIjMtJqTv87nQ==" + "integrity": "sha512-dSq1xmcPDKPZ2EED2S6zw/b9NKsqzXRE6dVr8TVQnI3FJOTteUMuqF3Qqs6LZg+mLGYJWqQzMbIjMtJqTv87nQ==", + "optional": true } } }, @@ -46636,9 +46445,9 @@ } }, "loupe": { - "version": "2.3.6", - "resolved": "https://registry.npmjs.org/loupe/-/loupe-2.3.6.tgz", - "integrity": "sha512-RaPMZKiMy8/JruncMU5Bt6na1eftNoo++R4Y+N2FrxkDVTrGvcyzFTsaGif4QTeKESheMGegbhw6iUAq+5A8zA==", + "version": "2.3.4", + "resolved": "https://registry.npmjs.org/loupe/-/loupe-2.3.4.tgz", + "integrity": "sha512-OvKfgCC2Ndby6aSTREl5aCCPTNIzlDfQZvZxNUrBrihDhL3xcrYegTblhmEiCrg2kKQz4XsFIaemE5BF4ybSaQ==", "requires": { "get-func-name": "^2.0.0" } @@ -46687,6 +46496,13 @@ "pify": "^3.0.0" } }, + "make-error": { + "version": "1.3.6", + "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", + "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==", + "optional": true, + "peer": true + }, "markdown-table": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/markdown-table/-/markdown-table-1.1.3.tgz", @@ -46825,6 +46641,7 @@ "version": "4.0.5", "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", + "dev": true, "requires": { "braces": "^3.0.2", "picomatch": "^2.3.1" @@ -46895,9 +46712,9 @@ "integrity": "sha512-JIYlbt6g8i5jKfJ3xz7rF0LXmv2TkDxBLUkiBeZ7bAx4GnnNMr8xFpGnOxn6GhTEHx3SjRrZEoU+j04prX1ktg==" }, "minimatch": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.2.tgz", - "integrity": "sha512-bNH9mmM9qsJ2X4r2Nat1B//1dJVcn3+iBLa3IgqJ7EbGaDNepL9QSHOxN4ng33s52VMMhhIfgCYDk3C4ZmlDAg==", + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.0.tgz", + "integrity": "sha512-9TPBGGak4nHfGZsPBohm9AWg6NoT7QTCehS3BIJABslyZbzxfV78QM2Y6+i741OPZIafFAaiiEMh5OyIrJPgtg==", "peer": true, "requires": { "brace-expansion": "^2.0.1" @@ -46956,9 +46773,9 @@ } }, "mocha": { - "version": "10.2.0", - "resolved": "https://registry.npmjs.org/mocha/-/mocha-10.2.0.tgz", - "integrity": "sha512-IDY7fl/BecMwFHzoqF2sg/SHHANeBoMMXFlS9r0OXKDssYE1M5O43wUY/9BVPeIvfH2zmEbBfseqN9gBQZzXkg==", + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/mocha/-/mocha-10.1.0.tgz", + "integrity": "sha512-vUF7IYxEoN7XhQpFLxQAEMtE4W91acW4B6En9l97MwE9stL1A9gusXfoHZCLVHDUJ/7V5+lbCM6yMqzo5vNymg==", "requires": { "ansi-colors": "4.1.1", "browser-stdout": "1.3.1", @@ -47233,7 +47050,8 @@ "nice-try": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz", - "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==" + "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==", + "dev": true }, "no-case": { "version": "2.3.2", @@ -47296,9 +47114,9 @@ } }, "node-gyp-build": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.6.0.tgz", - "integrity": "sha512-NTZVKn9IylLwUzaKjkas1e4u2DLNcV4rdYagA4PWdPwW87Bi7z+BznyKSRwS/761tV/lzCGXplWsiaMjLqP2zQ==" + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.5.0.tgz", + "integrity": "sha512-2iGbaQBV+ITgCz76ZEjmhUKAKVf7xfY1sRl4UiKQspfZMH2h06SyhNsnSVy50cwkFQDGLyif6m/6uFXHkOZ6rg==" }, "node-hid": { "version": "1.3.0", @@ -47321,9 +47139,9 @@ } }, "node-releases": { - "version": "2.0.8", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.8.tgz", - "integrity": "sha512-dFSmB8fFHEH/s81Xi+Y/15DQY6VHW81nXRj86EMSL3lmuTmK1e+aT4wrFCkTbm+gSwkw4KpX+rT/pMM2c1mF+A==" + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.6.tgz", + "integrity": "sha512-PiVXnNuFm5+iYkLBNeq5211hvO38y63T0i2KKh2KnUs3RpzJ+JtODFjkD8yjLwnDkTYF1eKXheUwdssR+NRZdg==" }, "nodemon": { "version": "2.0.20", @@ -47388,10 +47206,9 @@ } }, "nofilter": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/nofilter/-/nofilter-3.1.0.tgz", - "integrity": "sha512-l2NNj07e9afPnhAhvgVrCD/oy2Ai1yfLpuo3EpiO1jFTsB4sFz6oIfAfSZyQzVpkZQ9xS8ZS5g1jCBgq4Hwo0g==", - "dev": true + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/nofilter/-/nofilter-1.0.4.tgz", + "integrity": "sha512-N8lidFp+fCz+TD51+haYdbDGrcBWwuHX40F5+z0qkUjMJ5Tp+rdSuAkMJ9N9eoolDlEVTf6u5icM+cNKkKW2mA==" }, "noop-logger": { "version": "0.1.1", @@ -47516,25 +47333,25 @@ "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==" }, "object.assign": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.0.tgz", - "integrity": "sha512-exHJeq6kBKj58mqGyTQ9DFvrZC/eR6OwxzoM9YRoGBqrXYonaFyGiFMuc9VZrXf7DarreEwMpurG3dd+CNyW5w==", + "version": "4.1.4", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.4.tgz", + "integrity": "sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ==", "requires": { - "define-properties": "^1.1.2", - "function-bind": "^1.1.1", - "has-symbols": "^1.0.0", - "object-keys": "^1.0.11" + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "has-symbols": "^1.0.3", + "object-keys": "^1.1.1" } }, "object.getownpropertydescriptors": { - "version": "2.1.5", - "resolved": "https://registry.npmjs.org/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.5.tgz", - "integrity": "sha512-yDNzckpM6ntyQiGTik1fKV1DcVDRS+w8bvpWNCBanvH5LfRX9O8WTHqQzG4RZwRAM4I0oU7TV11Lj5v0g20ibw==", + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.4.tgz", + "integrity": "sha512-sccv3L/pMModT6dJAYF3fzGMVcb38ysQ0tEE6ixv2yXJDtEIPph268OlAdJj5/qZMZDq2g/jqvwppt36uS/uQQ==", "requires": { - "array.prototype.reduce": "^1.0.5", + "array.prototype.reduce": "^1.0.4", "call-bind": "^1.0.2", "define-properties": "^1.1.4", - "es-abstract": "^1.20.4" + "es-abstract": "^1.20.1" } }, "obliterator": { @@ -47587,6 +47404,7 @@ "version": "7.4.2", "resolved": "https://registry.npmjs.org/open/-/open-7.4.2.tgz", "integrity": "sha512-MVHddDVweXZF3awtlAS+6pgKLlm/JgxZ90+/NBurBoQctVOOB/zDdVjcyPzQ+0laDGbsWgrRkflI65sQeOgT9Q==", + "dev": true, "requires": { "is-docker": "^2.0.0", "is-wsl": "^2.1.1" @@ -47704,9 +47522,9 @@ } }, "parse5": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/parse5/-/parse5-7.1.2.tgz", - "integrity": "sha512-Czj1WaSVpaoj0wbhMzLmWD69anp2WH7FXMB9n1Sy8/ZFF9jolSQVMu1Ij5WIyGmcBmhk7EOndpO4mIpihVqAXw==", + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-7.1.1.tgz", + "integrity": "sha512-kwpuwzB+px5WUg9pyK0IcK/shltJN5/OVhQagxhCQNtT9Y9QRZqNY2e1cmbu/paRh5LMnz/oVTVLBpjFmMZhSg==", "dev": true, "requires": { "entities": "^4.4.0" @@ -47737,50 +47555,93 @@ } }, "patch-package": { - "version": "6.5.1", - "resolved": "https://registry.npmjs.org/patch-package/-/patch-package-6.5.1.tgz", - "integrity": "sha512-I/4Zsalfhc6bphmJTlrLoOcAF87jcxko4q0qsv4bGcurbr8IskEOtdnt9iCmsQVGL1B+iUhSQqweyTLJfCF9rA==", + "version": "6.4.7", + "resolved": "https://registry.npmjs.org/patch-package/-/patch-package-6.4.7.tgz", + "integrity": "sha512-S0vh/ZEafZ17hbhgqdnpunKDfzHQibQizx9g8yEf5dcVk3KOflOfdufRXQX8CSEkyOQwuM/bNz1GwKvFj54kaQ==", + "dev": true, "requires": { "@yarnpkg/lockfile": "^1.1.0", - "chalk": "^4.1.2", + "chalk": "^2.4.2", "cross-spawn": "^6.0.5", "find-yarn-workspace-root": "^2.0.0", - "fs-extra": "^9.0.0", + "fs-extra": "^7.0.1", "is-ci": "^2.0.0", "klaw-sync": "^6.0.0", - "minimist": "^1.2.6", + "minimist": "^1.2.0", "open": "^7.4.2", "rimraf": "^2.6.3", "semver": "^5.6.0", "slash": "^2.0.0", - "tmp": "^0.0.33", - "yaml": "^1.10.2" + "tmp": "^0.0.33" }, "dependencies": { + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "requires": { + "color-convert": "^1.9.0" + } + }, "brace-expansion": { "version": "1.1.11", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, "requires": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" } }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", + "dev": true + }, + "escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "dev": true + }, "fs-extra": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", - "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-7.0.1.tgz", + "integrity": "sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==", + "dev": true, "requires": { - "at-least-node": "^1.0.0", - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" + "graceful-fs": "^4.1.2", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" } }, "glob": { "version": "7.2.3", "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "dev": true, "requires": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", @@ -47790,10 +47651,26 @@ "path-is-absolute": "^1.0.0" } }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "dev": true + }, + "jsonfile": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", + "integrity": "sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==", + "dev": true, + "requires": { + "graceful-fs": "^4.1.6" + } + }, "minimatch": { "version": "3.1.2", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, "requires": { "brace-expansion": "^1.1.7" } @@ -47802,6 +47679,7 @@ "version": "2.7.1", "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", + "dev": true, "requires": { "glob": "^7.1.3" } @@ -47809,7 +47687,23 @@ "semver": { "version": "5.7.1", "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true + }, + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + }, + "universalify": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", + "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", + "dev": true } } }, @@ -47864,7 +47758,8 @@ "path-key": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", - "integrity": "sha512-fEHGKCSmUSDPv4uoj8AlD+joPlq3peND+HRYyxFz4KPw4z926S/b8rIuFs2FYJg3BwsxJf6A9/3eIdLaYC+9Dw==" + "integrity": "sha512-fEHGKCSmUSDPv4uoj8AlD+joPlq3peND+HRYyxFz4KPw4z926S/b8rIuFs2FYJg3BwsxJf6A9/3eIdLaYC+9Dw==", + "dev": true }, "path-parse": { "version": "1.0.7", @@ -48379,9 +48274,9 @@ "integrity": "sha512-ravE6m9Atw9Z/jjttRUZ+clIXogdghyZAuWJ3qEzjT+jI/dL1ifAqhZeC5VHzQp1MSt1+jxKkFNemj/iO7tVUA==" }, "prettier": { - "version": "2.8.1", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.8.1.tgz", - "integrity": "sha512-lqGoSJBQNJidqCHE80vqZJHWHRFoNYsSpP9AjFhlhi9ODCJA541svILes/+/1GM3VaL/abZi7cpFzOpdR9UPKg==", + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.7.1.tgz", + "integrity": "sha512-ujppO+MkdPqoVINuDFDRLClm7D78qbDt0/NR+wp5FqEZOoTNAjPHWj17QRhu7geIHJfcNhRk1XVQmF8Bp3ye+g==", "dev": true }, "process": { @@ -48395,9 +48290,9 @@ "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==" }, "promise": { - "version": "8.3.0", - "resolved": "https://registry.npmjs.org/promise/-/promise-8.3.0.tgz", - "integrity": "sha512-rZPNPKTOYVNEEKFaq1HqTgOwZD+4/YHS5ukLzQCypkj+OkYx7iv0mA91lJlpPPZ8vMau3IIGj5Qlwrx+8iiSmg==", + "version": "8.2.0", + "resolved": "https://registry.npmjs.org/promise/-/promise-8.2.0.tgz", + "integrity": "sha512-+CMAlLHqwRYwBMXKCP+o8ns7DN+xHDUiI+0nArsiJ9y+kJVPLFxEaSw6Ha9s9H0tftxg2Yzl25wqj9G7m5wLZg==", "requires": { "asap": "~2.0.6" } @@ -48481,9 +48376,9 @@ "integrity": "sha512-Yxz2kRwT90aPiWEMHVYnEf4+rhwF1tBmmZ4KepCP+Wkium9JxtWnUm1nqGwpiAHr/tnTSeHqr3wb++jgSkXjhA==" }, "pure-rand": { - "version": "5.0.5", - "resolved": "https://registry.npmjs.org/pure-rand/-/pure-rand-5.0.5.tgz", - "integrity": "sha512-BwQpbqxSCBJVpamI6ydzcKqyFmnd5msMWUGvzXLm1aXvusbbgkbOto/EUPM00hjveJEaJtdbhUjKSzWRhQVkaw==" + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/pure-rand/-/pure-rand-5.0.3.tgz", + "integrity": "sha512-9N8x1h8dptBQpHyC7aZMS+iNOAm97WMGY0AFrguU1cpfW3I5jINkWe5BIY5md0ofy+1TCIELsVcm/GJXZSaPbw==" }, "qs": { "version": "6.11.0", @@ -49082,11 +48977,6 @@ } } }, - "depd": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", - "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==" - }, "ms": { "version": "2.1.3", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", @@ -49190,6 +49080,7 @@ "version": "1.2.0", "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", "integrity": "sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg==", + "dev": true, "requires": { "shebang-regex": "^1.0.0" } @@ -49197,7 +49088,8 @@ "shebang-regex": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", - "integrity": "sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ==" + "integrity": "sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ==", + "dev": true }, "side-channel": { "version": "1.0.4", @@ -49232,9 +49124,9 @@ } }, "simple-update-notifier": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/simple-update-notifier/-/simple-update-notifier-1.1.0.tgz", - "integrity": "sha512-VpsrsJSUcJEseSbMHkrsrAVSdvVS5I96Qo1QAQ4FxQ9wXFcB+pjj7FB7/us9+GcgfW4ziHtYMc1J0PLczb55mg==", + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/simple-update-notifier/-/simple-update-notifier-1.0.7.tgz", + "integrity": "sha512-BBKgR84BJQJm6WjWFMHgLVuo61FBDSj1z/xSFUIozqO6wO7ii0JxCqlIud7Enr/+LhlbNI0whErq96P2qHNWew==", "requires": { "semver": "~7.0.0" }, @@ -49249,7 +49141,8 @@ "slash": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/slash/-/slash-2.0.0.tgz", - "integrity": "sha512-ZYKh3Wh2z1PpEXWr0MpSBZ0V6mZHAQfYevttO11c51CaWjGTaadiKZ+wVt1PbMlDV5qhMFslpZCemhwOK7C89A==" + "integrity": "sha512-ZYKh3Wh2z1PpEXWr0MpSBZ0V6mZHAQfYevttO11c51CaWjGTaadiKZ+wVt1PbMlDV5qhMFslpZCemhwOK7C89A==", + "dev": true }, "slice-ansi": { "version": "4.0.0", @@ -49297,9 +49190,9 @@ } }, "solidity-ast": { - "version": "0.4.40", - "resolved": "https://registry.npmjs.org/solidity-ast/-/solidity-ast-0.4.40.tgz", - "integrity": "sha512-M8uLBT2jgFB7B0iVAC5a2l71J8vim7aEm03AZkaHbDqyrl1pE+i5PriMEw6WlwGfHp3/Ym7cn9BqvVLQgRk+Yw==", + "version": "0.4.35", + "resolved": "https://registry.npmjs.org/solidity-ast/-/solidity-ast-0.4.35.tgz", + "integrity": "sha512-F5bTDLh3rmDxRmLSrs3qt3nvxJprWSEkS7h2KmuXDx7XTfJ6ZKVTV1rtPIYCqJAuPsU/qa8YUeFn7jdOAZcTPA==", "dev": true }, "source-map": { @@ -49451,23 +49344,23 @@ } }, "string.prototype.trimend": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.6.tgz", - "integrity": "sha512-JySq+4mrPf9EsDBEDYMOb/lM7XQLulwg5R/m1r0PXEFqrV0qHvl58sdTilSXtKOflCsK2E8jxf+GKC0T07RWwQ==", + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.5.tgz", + "integrity": "sha512-I7RGvmjV4pJ7O3kdf+LXFpVfdNOxtCW/2C8f6jNiW4+PQchwxkCDzlk1/7p+Wl4bqFIZeF47qAHXLuHHWKAxog==", "requires": { "call-bind": "^1.0.2", "define-properties": "^1.1.4", - "es-abstract": "^1.20.4" + "es-abstract": "^1.19.5" } }, "string.prototype.trimstart": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.6.tgz", - "integrity": "sha512-omqjMDaY92pbn5HOX7f9IccLA+U1tA9GvtU4JrodiXFfYB7jPzzHpRzpglLAjtUV6bB557zwClJezTqnAiYnQA==", + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.5.tgz", + "integrity": "sha512-THx16TJCGlsN0o6dl2o6ncWUsdgnLRSA23rRE5pyGBw/mLr3Ej/R2LaqCtgP8VNMGZsvMWnf9ooZPyY2bHvUFg==", "requires": { "call-bind": "^1.0.2", "define-properties": "^1.1.4", - "es-abstract": "^1.20.4" + "es-abstract": "^1.19.5" } }, "strip-ansi": { @@ -49641,9 +49534,9 @@ } }, "got": { - "version": "11.8.6", - "resolved": "https://registry.npmjs.org/got/-/got-11.8.6.tgz", - "integrity": "sha512-6tfZ91bOr7bOXnK7PRDCGBLa1H4U080YHNaAQ2KsMGlLEzRbk44nsZF2E1IeRc3vtJHPVbKCYgdFbaGO2ljd8g==", + "version": "11.8.5", + "resolved": "https://registry.npmjs.org/got/-/got-11.8.5.tgz", + "integrity": "sha512-o0Je4NvQObAuZPHLFoRSkdG2lTgtcynqymzg2Vupdx6PorhaT5MCbIyXG6d4D94kk8ZG57QeosgdiqfJWhEhlQ==", "requires": { "@sindresorhus/is": "^4.0.0", "@szmarczak/http-timer": "^4.0.5", @@ -49721,9 +49614,9 @@ } }, "table": { - "version": "6.8.1", - "resolved": "https://registry.npmjs.org/table/-/table-6.8.1.tgz", - "integrity": "sha512-Y4X9zqrCftUhMeH2EptSSERdVKt/nEdijTOacGD/97EKjhQ/Qs8RTlEGABSJNNN8lac9kheH+af7yAkEWlgneA==", + "version": "6.8.0", + "resolved": "https://registry.npmjs.org/table/-/table-6.8.0.tgz", + "integrity": "sha512-s/fitrbVeEyHKFa7mFdkuQMWlH1Wgw/yEXMt5xACT4ZpzWFluehAxRtUUQKPuWhaLAWhFcVx6w3oC8VKaUfPGA==", "dev": true, "requires": { "ajv": "^8.0.1", @@ -49734,9 +49627,9 @@ }, "dependencies": { "ajv": { - "version": "8.12.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz", - "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==", + "version": "8.11.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.11.0.tgz", + "integrity": "sha512-wGgprdCvMalC0BztXvitD2hC04YffAvtsUn93JbGXYLAtCUO4xd17mCCZQxUOItiBwZvJScWo8NIvQMQ71rdpg==", "dev": true, "requires": { "fast-deep-equal": "^3.1.1", @@ -50011,143 +49904,17 @@ "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==" }, "truffle": { - "version": "5.7.2", - "resolved": "https://registry.npmjs.org/truffle/-/truffle-5.7.2.tgz", - "integrity": "sha512-8MlSliw7b6zF1Z89L5CwlI74IyhdNXGQUvjECNGpZEtXZ1jKzFJV/XjpjpvSMZrABG+vLFKwQo6UdTTB5ea+tg==", + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/truffle/-/truffle-5.7.1.tgz", + "integrity": "sha512-6XZfF9xb0J+9O4BdSyIEtMubGCRDJAPXu9a0KhDXXNbsPPMNFzbYfG3oI5W13q4V9mO4PQEtYKeLRD6QyLwFdg==", "requires": { - "@truffle/db": "^2.0.11", - "@truffle/db-loader": "^0.2.11", - "@truffle/debugger": "^11.0.22", + "@truffle/db": "^2.0.10", + "@truffle/db-loader": "^0.2.10", + "@truffle/debugger": "^11.0.21", "app-module-path": "^2.2.0", "ganache": "7.6.0", "mocha": "10.1.0", "original-require": "^1.0.1" - }, - "dependencies": { - "ansi-colors": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz", - "integrity": "sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==" - }, - "find-up": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", - "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", - "requires": { - "locate-path": "^6.0.0", - "path-exists": "^4.0.0" - } - }, - "glob": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz", - "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==", - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "dependencies": { - "brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "requires": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "requires": { - "brace-expansion": "^1.1.7" - } - } - } - }, - "locate-path": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", - "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", - "requires": { - "p-locate": "^5.0.0" - } - }, - "minimatch": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.0.1.tgz", - "integrity": "sha512-nLDxIFRyhDblz3qMuq+SoRZED4+miJ/G+tdDrjkkkRnjAsBexeGpgjLEQ0blJy7rHhR2b93rhQY4SvyWu9v03g==", - "requires": { - "brace-expansion": "^2.0.1" - } - }, - "mocha": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/mocha/-/mocha-10.1.0.tgz", - "integrity": "sha512-vUF7IYxEoN7XhQpFLxQAEMtE4W91acW4B6En9l97MwE9stL1A9gusXfoHZCLVHDUJ/7V5+lbCM6yMqzo5vNymg==", - "requires": { - "ansi-colors": "4.1.1", - "browser-stdout": "1.3.1", - "chokidar": "3.5.3", - "debug": "4.3.4", - "diff": "5.0.0", - "escape-string-regexp": "4.0.0", - "find-up": "5.0.0", - "glob": "7.2.0", - "he": "1.2.0", - "js-yaml": "4.1.0", - "log-symbols": "4.1.0", - "minimatch": "5.0.1", - "ms": "2.1.3", - "nanoid": "3.3.3", - "serialize-javascript": "6.0.0", - "strip-json-comments": "3.1.1", - "supports-color": "8.1.1", - "workerpool": "6.2.1", - "yargs": "16.2.0", - "yargs-parser": "20.2.4", - "yargs-unparser": "2.0.0" - } - }, - "ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" - }, - "nanoid": { - "version": "3.3.3", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.3.tgz", - "integrity": "sha512-p1sjXuopFs0xg+fPASzQ28agW1oHD7xDsd9Xkf3T15H3c/cifrFHVwrh74PdoklAPi+i7MdRsE47vm2r6JoB+w==" - }, - "p-limit": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", - "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", - "requires": { - "yocto-queue": "^0.1.0" - } - }, - "p-locate": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", - "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", - "requires": { - "p-limit": "^3.0.2" - } - }, - "supports-color": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", - "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", - "requires": { - "has-flag": "^4.0.0" - } - } } }, "truffle-contract-size": { @@ -51040,6 +50807,30 @@ } } }, + "ts-node": { + "version": "9.1.1", + "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-9.1.1.tgz", + "integrity": "sha512-hPlt7ZACERQGf03M253ytLY3dHbGNGrAq9qIHWUY9XHYl1z7wYngSr3OQ5xmui8o2AaxsONxIzjafLUiWBo1Fg==", + "optional": true, + "peer": true, + "requires": { + "arg": "^4.1.0", + "create-require": "^1.1.0", + "diff": "^4.0.1", + "make-error": "^1.1.1", + "source-map-support": "^0.5.17", + "yn": "3.1.1" + }, + "dependencies": { + "diff": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", + "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", + "optional": true, + "peer": true + } + } + }, "tslib": { "version": "2.4.1", "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.1.tgz", @@ -51142,16 +50933,6 @@ } } }, - "typed-array-length": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.4.tgz", - "integrity": "sha512-KjZypGq+I/H7HI5HlOoGHkWUUGq+Q0TPhQurLbyrVrvnKTBgzLhIJ7j6J/XTQOi0d1RjyZ0wdas8bKs2p0x3Ng==", - "requires": { - "call-bind": "^1.0.2", - "for-each": "^0.3.3", - "is-typed-array": "^1.1.9" - } - }, "typed-function": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/typed-function/-/typed-function-4.1.0.tgz", @@ -51255,9 +51036,9 @@ "dev": true }, "undici": { - "version": "5.14.0", - "resolved": "https://registry.npmjs.org/undici/-/undici-5.14.0.tgz", - "integrity": "sha512-yJlHYw6yXPPsuOH0x2Ib1Km61vu4hLiRRQoafs+WUgX1vO64vgnxiCEN9dpIrhZyHFsai3F0AEj4P9zy19enEQ==", + "version": "5.11.0", + "resolved": "https://registry.npmjs.org/undici/-/undici-5.11.0.tgz", + "integrity": "sha512-oWjWJHzFet0Ow4YZBkyiJwiK5vWqEYoH7BINzJAJOLedZ++JpAlCbUktW2GQ2DS2FpKmxD/JMtWUUWl1BtghGw==", "requires": { "busboy": "^1.6.0" } @@ -52029,16 +51810,16 @@ "optional": true }, "which-typed-array": { - "version": "1.1.9", - "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.9.tgz", - "integrity": "sha512-w9c4xkx6mPidwp7180ckYWfMmvxpjlZuIudNtDf4N/tTAUB8VJbX25qZoAsrtGuYNnGw3pa0AXgbGKRB8/EceA==", + "version": "1.1.8", + "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.8.tgz", + "integrity": "sha512-Jn4e5PItbcAHyLoRDwvPj1ypu27DJbtdYXUa5zsinrUx77Uvfb0cXwwnGMTn7cjUfhhqgVQnVJCwF+7cgU7tpw==", "requires": { "available-typed-arrays": "^1.0.5", "call-bind": "^1.0.2", + "es-abstract": "^1.20.0", "for-each": "^0.3.3", - "gopd": "^1.0.1", "has-tostringtag": "^1.0.0", - "is-typed-array": "^1.1.10" + "is-typed-array": "^1.1.9" } }, "wide-align": { @@ -52215,11 +51996,6 @@ "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==" }, - "yaml": { - "version": "1.10.2", - "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz", - "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==" - }, "yargs": { "version": "16.2.0", "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", @@ -52266,6 +52042,13 @@ "fd-slicer": "~1.1.0" } }, + "yn": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz", + "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==", + "optional": true, + "peer": true + }, "yocto-queue": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", diff --git a/remappings.txt b/remappings.txt index 60888d61..27410281 100644 --- a/remappings.txt +++ b/remappings.txt @@ -2,6 +2,9 @@ @ensdomains/=node_modules/@ensdomains/ @eth-optimism/=node_modules/@eth-optimism/ @openzeppelin/=node_modules/@openzeppelin/ +@openzeppelin-contracts/=lib/openzeppelin-contracts/ +openzeppelin-contracts/=lib/openzeppelin-contracts/contracts/ +@openzeppelin/=lib/openzeppelin-contracts/ @uniswap/=node_modules/@uniswap/ base64-sol/=node_modules/base64-sol/ ds-test/=lib/forge-std/lib/ds-test/src/ diff --git a/src/hardhat/contracts/Curve/FraxFamilialPitchGauge.sol b/src/hardhat/contracts/Curve/FraxFamilialPitchGauge.sol new file mode 100644 index 00000000..83492535 --- /dev/null +++ b/src/hardhat/contracts/Curve/FraxFamilialPitchGauge.sol @@ -0,0 +1,389 @@ +// SPDX-License-Identifier: GPL-2.0-or-later +pragma solidity ^0.8.17; + +// ==================================================================== +// | ______ _______ | +// | / _____________ __ __ / ____(_____ ____ _____ ________ | +// | / /_ / ___/ __ `| |/_/ / /_ / / __ \/ __ `/ __ \/ ___/ _ \ | +// | / __/ / / / /_/ _> < / __/ / / / / / /_/ / / / / /__/ __/ | +// | /_/ /_/ \__,_/_/|_| /_/ /_/_/ /_/\__,_/_/ /_/\___/\___/ | +// | | +// ==================================================================== +// ======================== FraxMiddlemanGauge ======================== +// ==================================================================== +/** +* @title FraxFamilialPitchGauge +* @notice Redistributes gauge rewards to multiple gauges (FraxFarms) based on each "child" gauge's `total_combined_weight`. +* @author Modified version of the FraxMiddlemanGauge - by ZrowGz @ Pitch Foundation +* @dev To use this: +* - Add to GaugeController as a gauge +* - Add to FXS Rewards Distributor as a gauge +* * BUT do not set as a middleman gauge on the FXS Rewards Distributor +* - Set as the `gaugeController` & `rewardsDistributor` on all children FraxFarms +* - Disable rewards for pre-existing gauges on the FXS Rewards Distributor +*/ + +// import "../Math/Math.sol"; +// import "../Math/SafeMath.sol"; +// import "../ERC20/ERC20.sol"; +// import "../ERC20/SafeERC20.sol"; +import "./IFraxGaugeFXSRewardsDistributor.sol"; +import '../Uniswap/TransferHelper.sol'; +import "../Staking/Owned.sol"; +// import "../Utils/ReentrancyGuard.sol"; +import "../Staking/IFraxFarm.sol"; +import "./IFraxGaugeControllerV2.sol"; + +/** +* @title FraxFamilialPitchGauge +* @notice Redistributes gauge rewards to multiple gauges (FraxFarms) based on each "child" gauge's `total_combined_weight`. +* @author Modified version of the FraxMiddlemanGauge - by ZrowGz @ Pitch Foundation +* @dev To use this: +* - Add to GaugeController as a gauge +* - Add to FXS Rewards Distributor as a gauge +* * BUT do not set as a middleman gauge on the FXS Rewards Distributor +* - Set as the `gaugeController` & `rewardsDistributor` on all children FraxFarms +* - Disable rewards for pre-existing gauges on the FXS Rewards Distributor +*/ + +contract FraxFamilialPitchGauge is Owned {//, ReentrancyGuard { + // using SafeMath for uint256; + // using SafeERC20 for ERC20; + + // error LatestPeriodNotFinished(uint256,uint256); + + /* ========== STATE VARIABLES ========== */ + /// Note: variables made internal for execution gas savings, available through getters below + + // Informational + string public name; + + ///// State Address Storage ///// + /// @notice Address of the timelock + address internal timelock_address; + /// @notice Address of the gauge controller + address internal immutable gauge_controller; + /// @notice Address of the FXS Rewards Distributor + address internal immutable rewards_distributor; + /// @notice Address of the rewardToken + address internal immutable reward_token;// = 0x3432B6A60D23Ca0dFCa7761B7ab56459D9C964D0; // FXS + + ///// Familial Gauge Storage ///// + /// @notice Array of all child gauges + address[] internal gauges; + /// @notice Whether a child gauge is active or not + mapping(address => bool) internal gauge_active; + /// @notice Global reward emission rate from Controller + uint256 internal global_emission_rate_stored; + /// @notice Time of the last vote from Controller + uint256 internal time_total_stored; + + /// @notice Total vote weight from gauge controller vote + uint256 internal total_familial_relative_weight; + /// @notice Redistributed relative gauge weights by gauge combined weight + mapping(address => uint256) internal gauge_to_last_relative_weight; + + /// @notice Sum of all child gauge `total_combined_weight` + uint256 internal familial_total_combined_weight; + /// @notice Each gauge's combined weight for this reward epoch, available at the farm + mapping(address => uint256) internal gauge_to_total_combined_weight; + + // Distributor provided + /// @notice The timestamp of the vote period + uint256 public weeks_elapsed; + /// @notice The amount of FXS awarded to the family by the vote, from the Distributor + uint256 public reward_tally; + /// @notice The redistributed FXS rewards payable to each child gauge + mapping(address => uint256) internal gauge_to_reward_tally; + + // Reward period & Time tracking + /// @notice The timestamp of the last reward period + uint256 internal periodFinish; + /// @notice The number of seconds in a week + uint256 internal constant rewardsDuration = 604800; // 7 * 86400 (7 days) + /// @notice For the first time children are added, pull in the reward period finish for each. + bool internal isFirstTimeAddingGauges; + + /* ========== MODIFIERS ========== */ + + modifier onlyByOwnGov() { + require(msg.sender == owner || msg.sender == timelock_address, "Not owner or timelock"); + _; + } + + /* ========== CONSTRUCTOR ========== */ + + constructor ( + string memory _name, + address _owner, + address _timelock_address, + address _rewards_distributor, + address _gauge_controller, + address _reward_token + ) Owned(_owner) { + timelock_address = _timelock_address; + + rewards_distributor = _rewards_distributor; + + name = _name; + + gauge_controller = _gauge_controller; + reward_token = _reward_token; + } + + /* ========== MUTATIVE FUNCTIONS ========== */ + + /// This should only have the full recalculation logic ran once per epoch. + /// The first gauge to call this will trigger the full tvl & weight recalc + /// As other familial gauges call it, they'll be able to obtain the updated values from storage + /// The farm must call this through the `sync_gauge_weights` or `sync` functions + /// @notice Updates the relative weights of all child gauges + /// @dev Note: unfortunately many of the steps in this process need to be done after completing previous step for all children + // - this results in numerous for loops being used + function gauge_relative_weight_write(address child_gauge, uint256 timestamp) external returns (uint256) { + // check that the child gauge is active + require(gauge_active[child_gauge], "Gauge not active"); + + // If now is after the last time everything was updated, obtain all values for all gauges & recalculate new rebalanced weights + if (block.timestamp > time_total_stored) { + //// First, update all the state variables applicable to all child gauges + // store the most recent time_total for the farms to use & prevent this logic from being executed until epoch + time_total_stored = IFraxGaugeController(gauge_controller).time_total();//latest_time_total; + + // get & set the gauge controller's last global emission rate + // note this should be the same for all gauges, but if there were to be multiple controllers, + // we would need to have the emission rate for each of them. + global_emission_rate_stored = IFraxGaugeController(gauge_controller).global_emission_rate();//gauge_to_controller[gauges[i]]).global_emission_rate(); + + // to prevent re-calling the first gauge + address _gauge_calling; + for (uint256 i; i < gauges.length; i++) { + if (child_gauge == gauges[i]) { + _gauge_calling = gauges[i]; + } + } + + /// NOTE requiring caller to be `msg.sender` ensures all gauges are distributed to. + /// To access this function, must call `sync_gauge_weights` on the gauge, which will call this + // require it to be one of the child gauges to ensure correctly updating all children + require(_gauge_calling == child_gauge && child_gauge == msg.sender, "Not a child gauge"); + + // zero out the stored familial combined weight + familial_total_combined_weight = 0; + + // get the familial vote weight for this period + total_familial_relative_weight = + IFraxGaugeController(gauge_controller).gauge_relative_weight_write(address(this), timestamp); + + // update all the gauge weights + for (uint256 i; i < gauges.length; i++) { + // it shouldn't be zero, unless we don't use `delete` to remove a gauge + if (gauge_active[gauges[i]]) { + /// update the child gauges' total combined weights + gauge_to_total_combined_weight[gauges[i]] = IFraxFarm(gauges[i]).totalCombinedWeight(); + familial_total_combined_weight += gauge_to_total_combined_weight[gauges[i]]; + } + } + + // divvy up the relative weights based on each gauges `total combined weight` + for (uint256 i; i < gauges.length; i++) { + if (gauge_active[gauges[i]]) { + gauge_to_last_relative_weight[gauges[i]] = + gauge_to_total_combined_weight[gauges[i]] * total_familial_relative_weight / familial_total_combined_weight; + } + } + + // pull in the reward tokens allocated to the fam + (weeks_elapsed, reward_tally) = IFraxGaugeFXSRewardsDistributor(rewards_distributor).distributeReward(address(this)); + emit FamilialRewardClaimed(address(this), weeks_elapsed, reward_tally); + + // divide the reward_tally amount by the gauge's allocation + // note this will be used when the farm calls `distributeReward` + for (uint256 i; i < gauges.length; i++) { + if (gauge_active[gauges[i]]) { + gauge_to_reward_tally[gauges[i]] = reward_tally * gauge_to_total_combined_weight[gauges[i]] / familial_total_combined_weight; + } + } + + // call `sync_gauge_weights` on the other gauges + for (uint256 i; i < gauges.length; i++) { + if (gauges[i] != _gauge_calling && gauge_active[gauges[i]]) { + IFraxFarm(gauges[i]).sync_gauge_weights(true); + } + } + /// Now all farms should have their relative weights updated. Let the calling farm finish execution + } + + // finally, return the gauge's (msg.sender) rebalanced relative weight + return gauge_to_last_relative_weight[child_gauge]; + } + + /// This is called by the farm during `retroCatchUp` + /// If this is registered as a middleman gauge, distributor will call pullAndBridge, which will distribute the reward to the gauge + /// note it might be easier to NOT set this as a middleman on the distributor + /// Needs to be reentered to allow all farms to execute in one call, so is only callable by a gauge + function distributeReward(address child_gauge) public returns (uint256, uint256) { + // check that the child gauge is active + require(gauge_active[child_gauge], "Gauge not active"); + + if (block.timestamp >= periodFinish) { + // Ensure the provided reward amount is not more than the balance in the contract. + // This keeps the reward rate in the right range, preventing overflows due to + // very high values of rewardRate in the earned and rewardsPerToken functions; + // Reward + leftover must be less than 2^256 / 10^18 to avoid overflow. + uint256 num_periods_elapsed = uint256(block.timestamp - periodFinish) / rewardsDuration; // Floor division to the nearest period + + // lastUpdateTime = periodFinish; + // update period finish here so that the next call to `distributeReward` will bypapss this logic + periodFinish = periodFinish + ((num_periods_elapsed + 1) * rewardsDuration); + + // to prevent re-calling the first gauge during the farm `sync` calls + address _gauge_calling; + for (uint256 i; i < gauges.length; i++) { + if (child_gauge == gauges[i]) { + _gauge_calling = gauges[i]; + } + } + + /// NOTE requiring caller to be `msg.sender` ensures all gauges are distributed to. + /// To access this function, must call `sync` on the gauge, which will call this + // require it to be one of the child gauges to ensure correctly updating all children + require(_gauge_calling == child_gauge && child_gauge == msg.sender, "Not a child gauge"); + + // now that this logic won't be ran on the next call & all gauges are within periodFinish, call each farm's `sync` + for (uint256 i; i < gauges.length; i++) { + if (gauges[i] != _gauge_calling && gauge_active[gauges[i]]) { + IFraxFarm(gauges[i]).sync(); + } + } + /// Now all gauges should have their rewards distributed. Let the calling gauge finish execution. + } + + // preserve the gauge's reward tally for returning to the gauge + uint256 claimingGaugeRewardTally = gauge_to_reward_tally[child_gauge]; + + /// when the reward is distributed, send the amount in gauge_to_reward_tally to the gauge & zero that value out + TransferHelper.safeTransfer(reward_token, child_gauge, claimingGaugeRewardTally); + + // reset the reward tally to zero for the gauge + gauge_to_reward_tally[child_gauge] = 0; + emit ChildGaugeRewardDistributed(child_gauge, gauge_to_reward_tally[child_gauge]); + + return (weeks_elapsed, claimingGaugeRewardTally); + } + + /* ========== RESTRICTED FUNCTIONS - Owner or timelock only ========== */ + + // Added to support recovering LP Rewards and other mistaken tokens from other systems to be distributed to holders + function recoverERC20(address tokenAddress, uint256 tokenAmount) external onlyByOwnGov { + // Only the owner address can ever receive the recovery withdrawal + TransferHelper.safeTransfer(tokenAddress, owner, tokenAmount); + emit RecoveredERC20(tokenAddress, tokenAmount); + } + + // Generic proxy + function execute( + address _to, + uint256 _value, + bytes calldata _data + ) external onlyByOwnGov returns (bool, bytes memory) { + (bool success, bytes memory result) = _to.call{value:_value}(_data); + return (success, result); + } + + function setTimelock(address _new_timelock) external onlyByOwnGov { + timelock_address = _new_timelock; + } + + function addChildGauge(address[] calldata _gauges) external onlyByOwnGov { + gauges = _gauges; + // set the latest period finish for the child gauges + for (uint256 i; i < gauges.length; i++) { + // set gauge to active + gauge_active[_gauges[i]] = true; + + emit ChildGaugeAdded(_gauges[i], gauges.length - 1); + + if (isFirstTimeAddingGauges) { + uint256 childGaugePeriodFinish = IFraxFarm(gauges[i]).periodFinish(); + if (childGaugePeriodFinish > periodFinish) { + periodFinish = childGaugePeriodFinish; + } + } + } + // don't need to re-run that lookup to sync in the future + if (isFirstTimeAddingGauges) { + isFirstTimeAddingGauges = false; + } + } + + function deactivateChildGauge(uint256 _gaugeIndex) external onlyByOwnGov { + emit ChildGaugeDeactivated(gauges[_gaugeIndex], _gaugeIndex); + gauge_active[gauges[_gaugeIndex]] = false; + } + + // function setRewardsDistributor(address _rewards_distributor) external onlyByOwnGov { + // emit RewardsDistributorChanged(rewards_distributor, _rewards_distributor); + // rewards_distributor = _rewards_distributor; + // } + + // function setGaugeController(address _gauge_controller) external onlyByOwnGov { + // emit GaugeControllerChanged(gauge_controller, _gauge_controller); + // gauge_controller = _gauge_controller; + // } + /* ========== GETTERS ========== */ + + /// @notice Matches the abi available in the farms + /// @return global_emission_rate The global emission rate from the controller + function global_emission_rate() external view returns (uint256) { + return global_emission_rate_stored; + } + + /// @notice Matches the abi available in the farms + /// @return time_total The end of the vote period from the controller + function time_total() external view returns (uint256) { + return time_total_stored; + } + + + function getNumberOfGauges() external view returns (uint256) { + return gauges.length; + } + + function getChildGauges() external view returns (address[] memory) { + return gauges; + } + + function getGaugeState(address _gauge) external view returns (bool) { + return gauge_active[_gauge]; + } + + function getStateAddresses() external view returns (address, address, address, address) { + return (timelock_address, gauge_controller, rewards_distributor, reward_token); + } + + /// @notice Returns the last relative weight and reward tally for a gauge + /// @return last_relative_weight The redistributed last relative weight of the gauge + /// @return reward_tally The redistributed reward tally of the gauge + function getChildGaugeValues(address child_gauge) external view returns (uint256, uint256) { + return ( + gauge_to_last_relative_weight[child_gauge], + gauge_to_reward_tally[child_gauge] + ); + } + + /// @notice Returns the `periodFinish` stored + /// @return periodFinish The periodFinish timestamp when gauges can call to distribute rewards + function getPeriodFinish() external view returns (uint256) { + return periodFinish; + } + + /* ========== EVENTS ========== */ + event ChildGaugeAdded(address gauge, uint256 gauge_index); + event ChildGaugeDeactivated(address gauge, uint256 gauge_index); + event GaugeControllerChanged(address old_controller, address new_controller); + event RewardsDistributorChanged(address old_distributor, address new_distributor); + event FamilialRewardClaimed(address familial_gauge, uint256 reward_amount, uint256 weeks_elapsed); + event ChildGaugeRewardDistributed(address gauge, uint256 reward_amount); + event RecoveredERC20(address token, uint256 amount); +} \ No newline at end of file diff --git a/src/hardhat/contracts/Curve/FraxGaugeControllerV2.vy b/src/hardhat/contracts/Curve/FraxGaugeControllerV2.vy index a3c16083..5501fb98 100644 --- a/src/hardhat/contracts/Curve/FraxGaugeControllerV2.vy +++ b/src/hardhat/contracts/Curve/FraxGaugeControllerV2.vy @@ -1,4 +1,4 @@ -# @version 0.3.7 +# @version 0.3.4 """ @title Gauge Controller diff --git a/src/hardhat/contracts/Curve/FraxMiddlemanGaugeV2.sol b/src/hardhat/contracts/Curve/FraxMiddlemanGaugeV2.sol new file mode 100755 index 00000000..ba730b58 --- /dev/null +++ b/src/hardhat/contracts/Curve/FraxMiddlemanGaugeV2.sol @@ -0,0 +1,146 @@ +// SPDX-License-Identifier: GPL-2.0-or-later +pragma solidity >=0.6.11; + +// ==================================================================== +// | ______ _______ | +// | / _____________ __ __ / ____(_____ ____ _____ ________ | +// | / /_ / ___/ __ `| |/_/ / /_ / / __ \/ __ `/ __ \/ ___/ _ \ | +// | / __/ / / / /_/ _> < / __/ / / / / / /_/ / / / / /__/ __/ | +// | /_/ /_/ \__,_/_/|_| /_/ /_/_/ /_/\__,_/_/ /_/\___/\___/ | +// | | +// ==================================================================== +// ======================= FraxMiddlemanGaugeV2 ======================= +// ==================================================================== +// Looks at the gauge controller contract and pushes out FXS rewards once +// a week to the gauges (farms). +// This contract is what gets added to the gauge as a 'slice' +// V2: Uses Fraxferry instead of miscellaneous 3rd-party bridges + +// Frax Finance: https://github.com/FraxFinance + +// Primary Author(s) +// Travis Moore: https://github.com/FortisFortuna + +// Reviewer(s) / Contributor(s) +// Sam Kazemian: https://github.com/samkazemian + +import "../Math/Math.sol"; +import "../Math/SafeMath.sol"; +import "../ERC20/ERC20.sol"; +import "../ERC20/SafeERC20.sol"; +import "./IFraxGaugeFXSRewardsDistributor.sol"; +import "../Fraxferry/IFraxferry.sol"; +import '../Uniswap/TransferHelper.sol'; +import "../Staking/Owned.sol"; +import "../Utils/ReentrancyGuard.sol"; + +contract FraxMiddlemanGaugeV2 is Owned, ReentrancyGuard { + using SafeMath for uint256; + using SafeERC20 for ERC20; + + /* ========== STATE VARIABLES ========== */ + + // Instances and addresses + address public reward_token_address = 0x3432B6A60D23Ca0dFCa7761B7ab56459D9C964D0; // FXS + address public rewards_distributor_address; + + // Informational + string public name; + + // Admin addresses + address public timelock_address; + + // Gauge-related + IFraxferry public ferry; + address public destination_address; + + + /* ========== MODIFIERS ========== */ + + modifier onlyByOwnGov() { + require(msg.sender == owner || msg.sender == timelock_address, "Not owner or timelock"); + _; + } + + modifier onlyRewardsDistributor() { + require(msg.sender == rewards_distributor_address, "Not rewards distributor"); + _; + } + + /* ========== CONSTRUCTOR ========== */ + + constructor ( + address _owner, + address _timelock_address, + address _rewards_distributor_address, + address _ferry_address, + address _destination_address, + string memory _name + ) Owned(_owner) { + timelock_address = _timelock_address; + + rewards_distributor_address = _rewards_distributor_address; + + ferry = IFraxferry(_ferry_address); + destination_address = _destination_address; + + name = _name; + } + + /* ========== MUTATIVE FUNCTIONS ========== */ + + // Callable only by the rewards distributor + function pullAndBridge(uint256 reward_amount) external onlyRewardsDistributor nonReentrant { + require(address(ferry) != address(0), "Invalid bridge address"); + + // Pull in the rewards from the rewards distributor + TransferHelper.safeTransferFrom(reward_token_address, rewards_distributor_address, address(this), reward_amount); + + // Logic here + ERC20(reward_token_address).approve(address(ferry), reward_amount); + ferry.embarkWithRecipient(reward_amount, destination_address); + + } + + /* ========== RESTRICTED FUNCTIONS - Owner or timelock only ========== */ + + // Added to support recovering LP Rewards and other mistaken tokens from other systems to be distributed to holders + function recoverERC20(address tokenAddress, uint256 tokenAmount) external onlyByOwnGov { + // Only the owner address can ever receive the recovery withdrawal + TransferHelper.safeTransfer(tokenAddress, owner, tokenAmount); + emit RecoveredERC20(tokenAddress, tokenAmount); + } + + // Generic proxy + function execute( + address _to, + uint256 _value, + bytes calldata _data + ) external onlyByOwnGov returns (bool, bytes memory) { + (bool success, bytes memory result) = _to.call{value:_value}(_data); + return (success, result); + } + + function setTimelock(address _new_timelock) external onlyByOwnGov { + timelock_address = _new_timelock; + } + + function setBridgeInfo(address _ferry_address, address _destination_address) external onlyByOwnGov { + ferry = IFraxferry(_ferry_address); + + // Overridden cross-chain destination address + destination_address = _destination_address; + + + emit BridgeInfoChanged(_ferry_address, _destination_address); + } + + function setRewardsDistributor(address _rewards_distributor_address) external onlyByOwnGov { + rewards_distributor_address = _rewards_distributor_address; + } + + /* ========== EVENTS ========== */ + + event RecoveredERC20(address token, uint256 amount); + event BridgeInfoChanged(address ferry_address, address destination_address); +} diff --git a/src/hardhat/contracts/Curve/veFPIS.vy b/src/hardhat/contracts/Curve/veFPIS.vy index c43b62a1..f2a22a87 100644 --- a/src/hardhat/contracts/Curve/veFPIS.vy +++ b/src/hardhat/contracts/Curve/veFPIS.vy @@ -94,10 +94,10 @@ PROXY_ADD: constant(int128) = 6 PROXY_SLASH: constant(int128) = 7 CHECKPOINT_ONLY: constant(int128) = 8 -event CommitOwnership: +event NominateOwnership: admin: address -event ApplyOwnership: +event AcceptOwnership: admin: address event Deposit: @@ -227,55 +227,53 @@ future_admin: public(address) @external -def __init__(token_addr: address, _name: String[64], _symbol: String[32], _version: String[32]): +def __init__(): """ - @notice Contract constructor - @param token_addr `ERC20CRV` token address - @param _name Token name - @param _symbol Token symbol - @param _version Contract version - required for Aragon compatibility + @notice Contract constructor. No constructor args due to Etherscan verification issues """ + token_addr: address = 0xc2544A32872A91F4A553b404C6950e89De901fdb self.admin = msg.sender self.token = token_addr self.point_history[0].blk = block.number self.point_history[0].ts = block.timestamp self.point_history[0].fpis_amt = 0 - self.appTransferFromsEnabled = True - self.appTransferTosEnabled = True - self.proxyAddsEnabled = True - self.proxySlashesEnabled = True + self.appTransferFromsEnabled = False + self.appTransferTosEnabled = False + self.proxyAddsEnabled = False + self.proxySlashesEnabled = False _decimals: uint256 = ERC20(token_addr).decimals() assert _decimals <= 255 self.decimals = _decimals - self.name = _name - self.symbol = _symbol - self.version = _version - + self.name = "veFPIS" + self.symbol = "veFPIS" + self.version = "veFPIS_1.0.0" @external -def commit_transfer_ownership(addr: address): +def nominate_ownership(addr: address): """ - @notice Transfer ownership of VotingEscrow contract to `addr` - @param addr Address to have ownership transferred to + @notice Transfer ownership of this contract to `addr` + @param addr Address of the new owner """ assert msg.sender == self.admin # dev: admin only + self.future_admin = addr - log CommitOwnership(addr) + log NominateOwnership(addr) @external -def apply_transfer_ownership(): +def accept_transfer_ownership(): """ - @notice Apply ownership transfer + @notice Accept a pending ownership transfer + @dev Only callable by the new owner """ - assert msg.sender == self.admin # dev: admin only _admin: address = self.future_admin - assert _admin != empty(address) # dev: admin not set - self.admin = _admin - log ApplyOwnership(_admin) + assert msg.sender == _admin # dev: future admin only + self.admin = _admin + self.future_admin = empty(address) + log AcceptOwnership(_admin) @external def commit_smart_wallet_checker(addr: address): diff --git a/src/hardhat/contracts/ERC20/__CROSSCHAIN/CrossChainCanonicalV2.sol b/src/hardhat/contracts/ERC20/__CROSSCHAIN/CrossChainCanonicalV2.sol old mode 100644 new mode 100755 index 22b70c4c..bfd78443 --- a/src/hardhat/contracts/ERC20/__CROSSCHAIN/CrossChainCanonicalV2.sol +++ b/src/hardhat/contracts/ERC20/__CROSSCHAIN/CrossChainCanonicalV2.sol @@ -29,7 +29,7 @@ import { ERC20PermitPermissionedMint } from "../ERC20PermitPermissionedMint.sol" contract CrossChainCanonicalV2 is ERC20PermitPermissionedMint { /* ========== CONSTRUCTOR ========== */ - constructor( + constructor( address _creator_address, address _timelock_address, string memory _name, diff --git a/src/hardhat/contracts/Fraxferry/Fraxferry.sol b/src/hardhat/contracts/Fraxferry/Fraxferry.sol index 9473cbbc..f763bc41 100644 --- a/src/hardhat/contracts/Fraxferry/Fraxferry.sol +++ b/src/hardhat/contracts/Fraxferry/Fraxferry.sol @@ -53,6 +53,7 @@ contract Fraxferry { address public captain; address public firstOfficer; mapping(address => bool) public crewmembers; + mapping(address => bool) public fee_exempt_addrs; bool public paused; @@ -118,7 +119,9 @@ contract Fraxferry { event SetCrewmember(address indexed crewmember,bool set); event SetFee(uint previousFeeRate, uint feeRate,uint previousFeeMin, uint feeMin,uint previousFeeMax, uint feeMax); event SetMinWaitPeriods(uint previousMinWaitAdd,uint previousMinWaitExecute,uint minWaitAdd,uint minWaitExecute); + event FeeExemptToggled(address addr,bool is_fee_exempt); + // ############## Modifiers ############## modifier isOwner() { @@ -150,7 +153,11 @@ contract Fraxferry { function embarkWithRecipient(uint amount, address recipient) public notPaused { amount = (amount/REDUCED_DECIMALS)*REDUCED_DECIMALS; // Round amount to fit in data structure - uint fee = Math.min(Math.max(FEE_MIN,amount*FEE_RATE/10000),FEE_MAX); + uint fee; + if(fee_exempt_addrs[msg.sender]) fee = 0; + else { + fee = Math.min(Math.max(FEE_MIN,amount*FEE_RATE/10000),FEE_MAX); + } require (amount>fee,"Amount too low"); require (amount/REDUCED_DECIMALS<=type(uint64).max,"Amount too high"); TransferHelper.safeTransferFrom(address(token),msg.sender,address(this),amount); @@ -293,6 +300,11 @@ contract Fraxferry { crewmembers[crewmember]=set; emit SetCrewmember(crewmember,set); } + + function toggleFeeExemptAddr(address addr) external isOwner { + fee_exempt_addrs[addr] = !fee_exempt_addrs[addr]; + emit FeeExemptToggled(addr,fee_exempt_addrs[addr]); + } // ############## Token management ############## diff --git a/src/hardhat/contracts/Fraxferry/IFraxferry.sol b/src/hardhat/contracts/Fraxferry/IFraxferry.sol new file mode 100644 index 00000000..9f20986f --- /dev/null +++ b/src/hardhat/contracts/Fraxferry/IFraxferry.sol @@ -0,0 +1,68 @@ +// SPDX-License-Identifier: GPL-2.0-or-later +pragma solidity >=0.8.0; + +interface IFraxferry { + struct Transaction { + address user; + uint64 amount; + uint32 timestamp; + } + + struct Batch { + uint64 start; + uint64 end; + uint64 departureTime; + uint64 status; + bytes32 hash; + } + + struct BatchData { + uint startTransactionNo; + Transaction[] transactions; + } + + function FEE () external view returns (uint256); + function MIN_WAIT_PERIOD_ADD () external view returns (uint256); + function MIN_WAIT_PERIOD_EXECUTE () external view returns (uint256); + function REDUCED_DECIMALS () external view returns (uint256); + function acceptOwnership () external; + function batches (uint256) external view returns (uint64 start, uint64 end, uint64 departureTime, uint64 status, bytes32 hash); + function cancelled (uint256) external view returns (bool); + function captain () external view returns (address); + function chainid () external view returns (uint256); + function crewmembers (address) external view returns (bool); + function depart (uint256 start, uint256 end, bytes32 hash) external; + function disembark (BatchData memory batchData) external; + function disputeBatch (uint256 batchNo, bytes32 hash) external; + function embark (uint256 amount) external; + function embarkWithRecipient (uint256 amount, address recipient) external; + function embarkWithSignature (uint256 _amount, address recipient, uint256 deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s) external; + function execute (address _to, uint256 _value, bytes memory _data) external returns (bool, bytes memory); + function executeIndex () external view returns (uint256); + function firstOfficer () external view returns (address); + function getBatchAmount (uint256 start, uint256 end) external view returns (uint256 totalAmount); + function getBatchData (uint256 start, uint256 end) external view returns (BatchData memory data); + function getNextBatch (uint256 _start, uint256 max) external view returns (uint256 start, uint256 end, bytes32 hash); + function getTransactionsHash (uint256 start, uint256 end) external view returns (bytes32); + function jettison (uint256 index, bool cancel) external; + function jettisonGroup (uint256[] memory indexes, bool cancel) external; + function noBatches () external view returns (uint256); + function noTransactions () external view returns (uint256); + function nominateNewOwner (address newOwner) external; + function nominatedOwner () external view returns (address); + function owner () external view returns (address); + function pause () external; + function paused () external view returns (bool); + function removeBatches (uint256 batchNo) external; + function sendTokens (address receiver, uint256 amount) external; + function setCaptain (address newCaptain) external; + function setCrewmember (address crewmember, bool set) external; + function setFee (uint256 _FEE) external; + function setFirstOfficer (address newFirstOfficer) external; + function setMinWaitPeriods (uint256 _MIN_WAIT_PERIOD_ADD, uint256 _MIN_WAIT_PERIOD_EXECUTE) external; + function targetChain () external view returns (uint256); + function targetToken () external view returns (address); + function token () external view returns (address); + function transactions (uint256) external view returns (address user, uint64 amount, uint32 timestamp); + function unPause () external; +} diff --git a/src/hardhat/contracts/Fraxlend/IFraxlendAMOV3.sol b/src/hardhat/contracts/Fraxlend/IFraxlendAMOV3.sol new file mode 100644 index 00000000..dddae06c --- /dev/null +++ b/src/hardhat/contracts/Fraxlend/IFraxlendAMOV3.sol @@ -0,0 +1,52 @@ +//SPDX-License-Identifier: Unlicense +pragma solidity ^0.8.0; + + + +interface IFraxlendAMOV3 { + function FRAX () external view returns (address); + function PRICE_PRECISION () external view returns (uint256); + function accrueInterestAllFraxlendPair () external; + function accrueInterestFraxlendPair (address _pairAddress) external; + function addCollateralToPair (address _pairAddress, uint256 _fraxAmount) external; + function amoMinter () external view returns (address); + function borrowPairsArray (uint256) external view returns (address); + function borrowPairsCollateralFrax (address) external view returns (uint256); + function borrowPairsInitialized (address) external view returns (bool); + function borrowPairsMaxCollateral (address) external view returns (uint256); + function borrowPairsMaxLTV (address) external view returns (uint256); + function burnFRAX (uint256 _fraxAmount) external; + function depositToPair (address _pairAddress, uint256 _fraxAmount) external; + function dollarBalances () external view returns (uint256 fraxValE18, uint256 collatValE18); + function execute (address _to, uint256 _value, bytes memory _data) external returns (bool, bytes memory); + function fraxlendPairDeployer () external view returns (address); + function mintedBalance () external view returns (int256); + function name () external pure returns (string memory _name); + function openBorrowPosition (address _pairAddress, uint256 _fraxAmount, uint256 _borrowAmount) external; + function operatorAddress () external view returns (address); + function owner () external view returns (address); + function pairsArray (uint256) external view returns (address); + function pairsInitialized (address) external view returns (bool); + function pairsMaxAllocation (address) external view returns (uint256); + function pairsMintedFrax (address) external view returns (uint256); + function pairsProfitTaken (address) external view returns (uint256); + function previewUpdateExchangeRate (address _pairAddress) external view returns (uint256 _exchangeRate); + function recoverERC20 (address _tokenAddress, uint256 _tokenAmount) external; + function removeCollateralFromPair (address _pairAddress, uint256 _fraxAmount) external; + function renounceOwnership () external; + function repayBorrowPosition (address _pairAddress, uint256 _shares) external; + function repayBorrowPositionWithCollateral (address _pairAddress, address _swapperAddress, uint256 _collateralToSwap, uint256 _amountAssetOutMin, address[] memory _path) external returns (uint256 _amountAssetOut); + function setAMOMinter (address _newAmoMinterAddress) external; + function setBorrowPair (address _pairAddress, uint256 _maxCollateral, uint256 _maxLTV) external; + function setFraxlendPairDeployer (address _newFraxlendPairDeployerAddress) external; + function setOperatorAddress (address _newOperatorAddress) external; + function setPair (address _pairAddress, uint256 _maxAllocation) external; + function showAllocations () external view returns (uint256[4] memory _allocations); + function showBorrowPairAccounting (address _pairAddress) external view returns (uint256[4] memory _allocations); + function showPairAccounting (address _pairAddress) external view returns (uint256[5] memory _allocations); + function transferOwnership (address newOwner) external; + function version () external pure returns (uint256 _major, uint256 _minor, uint256 _patch); + function withdrawFromPair (address _pairAddress, uint256 _shares) external returns (uint256 _amountWithdrawn); + function withdrawMaxFromAllPairs () external; + function withdrawMaxFromPair (address _pairAddress) external returns (uint256 _amountWithdrawn); +} diff --git a/src/hardhat/contracts/Misc_AMOs/echidna/IMasterPlatypusV3.sol b/src/hardhat/contracts/Misc_AMOs/echidna/IMasterPlatypusV3.sol new file mode 100644 index 00000000..83b4379e --- /dev/null +++ b/src/hardhat/contracts/Misc_AMOs/echidna/IMasterPlatypusV3.sol @@ -0,0 +1,50 @@ +// SPDX-License-Identifier: GPL-2.0-or-later +pragma solidity >=0.8.0; + + +interface IMasterPlatypusV3 { + function acceptOwnership () external; + function add (uint256 _baseAllocPoint, address _lpToken, address _rewarder) external; + function claimablePtp (uint256, address) external view returns (uint256); + function deposit (uint256 _pid, uint256 _amount) external returns (uint256, uint256); + function depositFor (uint256 _pid, uint256 _amount, address _user) external; + function dialutingRepartition () external view returns (uint256); + function emergencyPtpWithdraw () external; + function emergencyWithdraw (uint256 _pid) external; + function initialize (address _ptp, address _vePtp, uint256 _ptpPerSec, uint256 _dialutingRepartition, uint256 _startTimestamp) external; + function massUpdatePools () external; + function maxPoolLength () external view returns (uint256); + function migrate (uint256[] memory _pids) external; + function multiClaim (uint256[] memory _pids) external returns (uint256, uint256[] memory, uint256[] memory); + function newMasterPlatypus () external view returns (address); + function nonDialutingRepartition () external view returns (uint256); + function owner () external view returns (address); + function ownerCandidate () external view returns (address); + function pause () external; + function paused () external view returns (bool); + function pendingTokens (uint256 _pid, address _user) external view returns (uint256 pendingPtp, address bonusTokenAddress, string memory bonusTokenSymbol, uint256 pendingBonusToken); + function poolAdjustFactor (uint256 pid) external view returns (uint256); + function poolInfo (uint256) external view returns (address lpToken, uint256 baseAllocPoint, uint256 lastRewardTimestamp, uint256 accPtpPerShare, address rewarder, uint256 sumOfFactors, uint256 accPtpPerFactorShare, uint256 adjustedAllocPoint); + function poolLength () external view returns (uint256); + function proposeOwner (address newOwner) external; + function ptp () external view returns (address); + function ptpPerSec () external view returns (uint256); + function renounceOwnership () external; + function rewarderBonusTokenInfo (uint256 _pid) external view returns (address bonusTokenAddress, string memory bonusTokenSymbol); + function set (uint256 _pid, uint256 _baseAllocPoint, address _rewarder, bool overwrite) external; + function setMaxPoolLength (uint256 _maxPoolLength) external; + function setNewMasterPlatypus (address _newMasterPlatypus) external; + function setVePtp (address _newVePtp) external; + function startTimestamp () external view returns (uint256); + function totalAdjustedAllocPoint () external view returns (uint256); + function totalBaseAllocPoint () external view returns (uint256); + function unpause () external; + function updateEmissionRate (uint256 _ptpPerSec) external; + function updateEmissionRepartition (uint256 _dialutingRepartition) external; + function updateFactor (address _user, uint256 _newVePtpBalance) external; + function updatePool (uint256 _pid) external; + function userInfo (uint256, address) external view returns (uint256 amount, uint256 rewardDebt, uint256 factor); + function vePtp () external view returns (address); + function version () external pure returns (uint256); + function withdraw (uint256 _pid, uint256 _amount) external returns (uint256, uint256); +} diff --git a/src/hardhat/contracts/Misc_AMOs/hundred/ICErc20DelegatorOld.sol b/src/hardhat/contracts/Misc_AMOs/hundred/ICErc20DelegatorOld.sol new file mode 100644 index 00000000..2de53aca --- /dev/null +++ b/src/hardhat/contracts/Misc_AMOs/hundred/ICErc20DelegatorOld.sol @@ -0,0 +1,57 @@ +// SPDX-License-Identifier: GPL-2.0-or-later +pragma solidity >=0.8.0; + +interface ICErc20DelegatorOld { + function _acceptAdmin () external returns (uint256); + function _addReserves (uint256 addAmount) external returns (uint256); + function _reduceReserves (uint256 reduceAmount) external returns (uint256); + function _setComptroller (address newComptroller) external returns (uint256); + function _setImplementation (address implementation_, bool allowResign, bytes memory becomeImplementationData) external; + function _setInterestRateModel (address newInterestRateModel) external returns (uint256); + function _setPendingAdmin (address newPendingAdmin) external returns (uint256); + function _setReserveFactor (uint256 newReserveFactorMantissa) external returns (uint256); + function accrualBlockNumber () external view returns (uint256); + function accrualBlockTimestamp () external view returns (uint256); + function accrueInterest () external returns (uint256); + function admin () external view returns (address); + function allowance (address owner, address spender) external view returns (uint256); + function approve (address spender, uint256 amount) external returns (bool); + function balanceOf (address owner) external view returns (uint256); + function balanceOfUnderlying (address owner) external returns (uint256); + function borrow (uint256 borrowAmount) external returns (uint256); + function borrowBalanceCurrent (address account) external returns (uint256); + function borrowBalanceStored (address account) external view returns (uint256); + function borrowIndex () external view returns (uint256); + function borrowRatePerSecond () external view returns (uint256); + function comptroller () external view returns (address); + function decimals () external view returns (uint8); + function delegateToImplementation (bytes memory data) external returns (bytes memory); + function delegateToViewImplementation (bytes memory data) external view returns (bytes memory); + function exchangeRateCurrent () external returns (uint256); + function exchangeRateStored () external view returns (uint256); + function getAccountSnapshot (address account) external view returns (uint256, uint256, uint256, uint256); + function getCash () external view returns (uint256); + function implementation () external view returns (address); + function interestRateModel () external view returns (address); + function isCToken () external view returns (bool); + function liquidateBorrow (address borrower, uint256 repayAmount, address cTokenCollateral) external returns (uint256); + function mint (uint256 mintAmount) external returns (uint256); + function name () external view returns (string memory); + function pendingAdmin () external view returns (address); + function redeem (uint256 redeemTokens) external returns (uint256); + function redeemUnderlying (uint256 redeemAmount) external returns (uint256); + function repayBorrow (uint256 repayAmount) external returns (uint256); + function repayBorrowBehalf (address borrower, uint256 repayAmount) external returns (uint256); + function reserveFactorMantissa () external view returns (uint256); + function seize (address liquidator, address borrower, uint256 seizeTokens) external returns (uint256); + function supplyRatePerSecond () external view returns (uint256); + function sweepToken (address token) external; + function symbol () external view returns (string memory); + function totalBorrows () external view returns (uint256); + function totalBorrowsCurrent () external returns (uint256); + function totalReserves () external view returns (uint256); + function totalSupply () external view returns (uint256); + function transfer (address dst, uint256 amount) external returns (bool); + function transferFrom (address src, address dst, uint256 amount) external returns (bool); + function underlying () external view returns (address); +} diff --git a/src/hardhat/contracts/Misc_AMOs/platypus/IMasterPlatypusV4.sol b/src/hardhat/contracts/Misc_AMOs/platypus/IMasterPlatypusV4.sol new file mode 100644 index 00000000..9f4c6b49 --- /dev/null +++ b/src/hardhat/contracts/Misc_AMOs/platypus/IMasterPlatypusV4.sol @@ -0,0 +1,80 @@ +// SPDX-License-Identifier: GPL-2.0-or-later +pragma solidity >=0.8.0; + +interface IMasterPlatypusV4 { + struct UserInfo { + // 256 bit packed + uint128 amount; // How many LP tokens the user has provided. + uint128 factor; // non-dialuting factor = sqrt (lpAmount * vePtp.balanceOf()) + // 256 bit packed + uint128 rewardDebt; // Reward debt. See explanation below. + uint128 claimablePtp; + // + // We do some fancy math here. Basically, any point in time, the amount of PTPs + // entitled to a user but is pending to be distributed is: + // + // ((user.amount * pool.accPtpPerShare + user.factor * pool.accPtpPerFactorShare) / 1e12) - + // user.rewardDebt + // + // Whenever a user deposits or withdraws LP tokens to a pool. Here's what happens: + // 1. The pool's `accPtpPerShare`, `accPtpPerFactorShare` (and `lastRewardTimestamp`) gets updated. + // 2. User receives the pending reward sent to his/her address. + // 3. User's `amount` gets updated. + // 4. User's `rewardDebt` gets updated. + } + + // Info of each pool. + struct PoolInfo { + address lpToken; // Address of LP token contract. + address rewarder; + uint128 sumOfFactors; // 20.18 fixed point. The sum of all non dialuting factors by all of the users in the pool + uint128 accPtpPerShare; // 26.12 fixed point. Accumulated PTPs per share, times 1e12. + uint128 accPtpPerFactorShare; // 26.12 fixed point. Accumulated ptp per factor share + } + + function acceptOwnership () external; + function add (address _lpToken, address _rewarder) external; + function deposit (uint256 _pid, uint256 _amount) external returns (uint256 reward, uint256[] memory additionalRewards); + function depositFor (uint256 _pid, uint256 _amount, address _user) external; + function dilutingRepartition () external view returns (uint16); + function emergencyPtpWithdraw () external; + function emergencyWithdraw (uint256 _pid) external; + function getPoolId (address _lp) external view returns (uint256); + function getSumOfFactors (uint256 _pid) external view returns (uint256); + function getUserInfo (uint256 _pid, address _user) external view returns (UserInfo memory); + function initialize (address _ptp, address _vePtp, address _voter, uint16 _dilutingRepartition) external; + function liquidate (uint256 _pid, address _user, uint256 _amount) external; + function massUpdatePools () external; + function maxPoolLength () external view returns (uint256); + function migrate (uint256[] memory _pids) external; + function multiClaim (uint256[] memory _pids) external returns (uint256 reward, uint256[] memory amounts, uint256[][] memory additionalRewards); + function newMasterPlatypus () external view returns (address); + function nonDilutingRepartition () external view returns (uint256); + function notifyRewardAmount (address _lpToken, uint256 _amount) external; + function owner () external view returns (address); + function ownerCandidate () external view returns (address); + function pause () external; + function paused () external view returns (bool); + function pendingTokens (uint256 _pid, address _user) external view returns (uint256 pendingPtp, address[] memory bonusTokenAddresses, string[] memory bonusTokenSymbols, uint256[] memory pendingBonusTokens); + function platypusTreasure () external view returns (address); + function poolInfo (uint256) external view returns (address lpToken, address rewarder, uint128 sumOfFactors, uint128 accPtpPerShare, uint128 accPtpPerFactorShare); + function poolLength () external view returns (uint256); + function proposeOwner (address newOwner) external; + function ptp () external view returns (address); + function renounceOwnership () external; + function rewarderBonusTokenInfo (uint256 _pid) external view returns (address[] memory bonusTokenAddresses, string[] memory bonusTokenSymbols); + function setMaxPoolLength (uint256 _maxPoolLength) external; + function setNewMasterPlatypus (address _newMasterPlatypus) external; + function setPlatypusTreasure (address _platypusTreasure) external; + function setRewarder (uint256 _pid, address _rewarder) external; + function setVePtp (address _newVePtp) external; + function unpause () external; + function updateEmissionRepartition (uint16 _dilutingRepartition) external; + function updateFactor (address _user, uint256 _newVePtpBalance) external; + function updatePool (uint256 _pid) external; + function userInfo (uint256, address) external view returns (uint128 amount, uint128 factor, uint128 rewardDebt, uint128 claimablePtp); + function vePtp () external view returns (address); + function version () external pure returns (uint256); + function voter () external view returns (address); + function withdraw (uint256 _pid, uint256 _amount) external returns (uint256 reward, uint256[] memory additionalRewards); +} diff --git a/src/hardhat/contracts/Misc_AMOs/platypus/IVoter.sol b/src/hardhat/contracts/Misc_AMOs/platypus/IVoter.sol new file mode 100644 index 00000000..88da810c --- /dev/null +++ b/src/hardhat/contracts/Misc_AMOs/platypus/IVoter.sol @@ -0,0 +1,38 @@ +// SPDX-License-Identifier: GPL-2.0-or-later +pragma solidity >=0.8.0; + +interface IVoter { + function acceptOwnership () external; + function add (address _gauge, address _lpToken, address _bribe) external; + function bribes (address) external view returns (address); + function claimBribes (address[] memory _lpTokens) external returns (uint256[] memory bribeRewards); + function distribute (address _lpToken) external; + function emergencyPtpWithdraw () external; + function getUserVotes (address _user, address _lpToken) external view returns (uint256); + function index () external view returns (uint128); + function initialize (address _ptp, address _vePtp, uint88 _ptpPerSec, uint256 _startTimestamp) external; + function lastRewardTimestamp () external view returns (uint40); + function lpTokenLength () external view returns (uint256); + function lpTokens (uint256) external view returns (address); + function owner () external view returns (address); + function ownerCandidate () external view returns (address); + function pause (address _lpToken) external; + function pauseAll () external; + function paused () external view returns (bool); + function pendingBribes (address[] memory _lpTokens, address _user) external view returns (uint256[] memory bribeRewards); + function pendingPtp (address _lpToken) external view returns (uint256); + function proposeOwner (address newOwner) external; + function ptp () external view returns (address); + function ptpPerSec () external view returns (uint88); + function renounceOwnership () external; + function resume (address _lpToken) external; + function resumeAll () external; + function setBribe (address _lpToken, address _bribe) external; + function setGauge (address _lpToken, address _gauge) external; + function setPtpPerSec (uint88 _ptpPerSec) external; + function totalWeight () external view returns (uint256); + function vePtp () external view returns (address); + function vote (address[] memory _lpVote, int256[] memory _deltas) external returns (uint256[] memory bribeRewards); + function votes (address, address) external view returns (uint256); + function weights (address) external view returns (uint256); +} diff --git a/src/hardhat/contracts/Misc_AMOs/saddle/ISaddlePermissionlessSwap.sol b/src/hardhat/contracts/Misc_AMOs/saddle/ISaddlePermissionlessSwap.sol new file mode 100644 index 00000000..eca08ade --- /dev/null +++ b/src/hardhat/contracts/Misc_AMOs/saddle/ISaddlePermissionlessSwap.sol @@ -0,0 +1,38 @@ +// SPDX-License-Identifier: GPL-2.0-or-later +pragma solidity >=0.8.0; + +interface ISaddlePermissionlessSwap { + function FEE_COLLECTOR_NAME () external view returns (bytes32); + function MASTER_REGISTRY () external view returns (address); + function addLiquidity (uint256[] memory amounts, uint256 minToMint, uint256 deadline) external returns (uint256); + function calculateRemoveLiquidity (uint256 amount) external view returns (uint256[] memory); + function calculateRemoveLiquidityOneToken (uint256 tokenAmount, uint8 tokenIndex) external view returns (uint256 availableTokenAmount); + function calculateSwap (uint8 tokenIndexFrom, uint8 tokenIndexTo, uint256 dx) external view returns (uint256); + function calculateTokenAmount (uint256[] memory amounts, bool deposit) external view returns (uint256); + function feeCollector () external view returns (address); + function getA () external view returns (uint256); + function getAPrecise () external view returns (uint256); + function getAdminBalance (uint256 index) external view returns (uint256); + function getToken (uint8 index) external view returns (address); + function getTokenBalance (uint8 index) external view returns (uint256); + function getTokenIndex (address tokenAddress) external view returns (uint8); + function getVirtualPrice () external view returns (uint256); + function initialize (address[] memory _pooledTokens, uint8[] memory decimals, string memory lpTokenName, string memory lpTokenSymbol, uint256 _a, uint256 _fee, uint256 _adminFee, address lpTokenTargetAddress) external; + function owner () external view returns (address); + function pause () external; + function paused () external view returns (bool); + function rampA (uint256 futureA, uint256 futureTime) external; + function removeLiquidity (uint256 amount, uint256[] memory minAmounts, uint256 deadline) external returns (uint256[] memory); + function removeLiquidityImbalance (uint256[] memory amounts, uint256 maxBurnAmount, uint256 deadline) external returns (uint256); + function removeLiquidityOneToken (uint256 tokenAmount, uint8 tokenIndex, uint256 minAmount, uint256 deadline) external returns (uint256); + function renounceOwnership () external; + function setAdminFee (uint256 newAdminFee) external; + function setSwapFee (uint256 newSwapFee) external; + function stopRampA () external; + function swap (uint8 tokenIndexFrom, uint8 tokenIndexTo, uint256 dx, uint256 minDy, uint256 deadline) external returns (uint256); + function swapStorage () external view returns (uint256 initialA, uint256 futureA, uint256 initialATime, uint256 futureATime, uint256 swapFee, uint256 adminFee, address lpToken); + function transferOwnership (address newOwner) external; + function unpause () external; + function updateFeeCollectorCache () external; + function withdrawAdminFees () external; +} diff --git a/src/hardhat/contracts/Staking/FraxCrossChainFarmV3.sol b/src/hardhat/contracts/Staking/FraxCrossChainFarmV3.sol new file mode 100755 index 00000000..122e79cf --- /dev/null +++ b/src/hardhat/contracts/Staking/FraxCrossChainFarmV3.sol @@ -0,0 +1,951 @@ +// SPDX-License-Identifier: GPL-2.0-or-later +pragma solidity >=0.8.0; + +// ==================================================================== +// | ______ _______ | +// | / _____________ __ __ / ____(_____ ____ _____ ________ | +// | / /_ / ___/ __ `| |/_/ / /_ / / __ \/ __ `/ __ \/ ___/ _ \ | +// | / __/ / / / /_/ _> < / __/ / / / / / /_/ / / / / /__/ __/ | +// | /_/ /_/ \__,_/_/|_| /_/ /_/_/ /_/\__,_/_/ /_/\___/\___/ | +// | | +// ==================================================================== +// ======================= FraxCrossChainFarmV3 ======================= +// ==================================================================== +// No veFXS logic +// Because of lack of cross-chain reading of the gauge controller's emission rate, +// the contract sets its reward based on its token balance(s) +// Rolling 7 day reward period idea credit goes to denett +// rewardRate0 and rewardRate1 will look weird as people claim, but if you track the rewards actually emitted, +// the numbers do check out +// V3: Accepts canonicalFXS directly from Fraxferry and does not swap out + +// Frax Finance: https://github.com/FraxFinance + +// Primary Author(s) +// Travis Moore: https://github.com/FortisFortuna + +// Reviewer(s) / Contributor(s) +// Sam Kazemian: https://github.com/samkazemian +// Dennis: github.com/denett + +// Originally inspired by Synthetix.io, but heavily modified by the Frax team +// https://raw.githubusercontent.com/Synthetixio/synthetix/develop/contracts/StakingRewards.sol + +import "../Math/Math.sol"; +import "../Math/SafeMath.sol"; +import "../Curve/IveFXS.sol"; +import "../Curve/FraxCrossChainRewarder.sol"; +import "../ERC20/__CROSSCHAIN/IanyFXS.sol"; +import "../ERC20/__CROSSCHAIN/CrossChainCanonicalFXS.sol"; +import "../ERC20/ERC20.sol"; +import '../Uniswap/TransferHelper.sol'; +import "../ERC20/SafeERC20.sol"; + +// import '../Misc_AMOs/curve/I2pool.sol'; // Curve 2-token +// import '../Misc_AMOs/curve/I3pool.sol'; // Curve 3-token +// import '../Misc_AMOs/mstable/IFeederPool.sol'; // mStable +// import '../Misc_AMOs/impossible/IStableXPair.sol'; // Impossible +// import '../Misc_AMOs/mstable/IFeederPool.sol'; // mStable +import '../Misc_AMOs/saddle/ISaddleLPToken.sol'; // Saddle Arbitrum L2D4 +import '../Misc_AMOs/saddle/ISaddlePermissionlessSwap.sol'; // Saddle Arbitrum L2D4 +// import '../Misc_AMOs/snowball/ILPToken.sol'; // Snowball S4D - [Part 1] +// import '../Misc_AMOs/snowball/ISwapFlashLoan.sol'; // Snowball S4D - [Part 2] +// import '../Uniswap/Interfaces/IUniswapV2Pair.sol'; // Uniswap V2 + +import "../Utils/ReentrancyGuard.sol"; + +// Inheritance +import "./Owned.sol"; + +contract FraxCrossChainFarmV3 is Owned, ReentrancyGuard { + using SafeMath for uint256; + using SafeERC20 for ERC20; + + /* ========== STATE VARIABLES ========== */ + + // Instances + IveFXS public veFXS; + CrossChainCanonicalFXS public rewardsToken0; // Assumed to be canFXS + ERC20 public rewardsToken1; + + // I2pool public stakingToken; // Curve 2-token + // I3pool public stakingToken; // Curve 3-token + // IStableXPair public stakingToken; // Impossible + // IFeederPool public stakingToken; // mStable + ISaddleLPToken public stakingToken; // Saddle L2D4 + // ILPToken public stakingToken; // Snowball S4D + // IUniswapV2Pair public stakingToken; // Uniswap V2 + + FraxCrossChainRewarder public rewarder; + + // FRAX + address public frax_address; + + // Constant for various precisions + uint256 private constant MULTIPLIER_PRECISION = 1e18; + + // Admin addresses + address public timelock_address; // Governance timelock address + address public controller_address; // Gauge controller + + // Time tracking + uint256 public periodFinish; + uint256 public lastUpdateTime; + + // Lock time and multiplier settings + uint256 public lock_max_multiplier = uint256(3e18); // E18. 1x = e18 + uint256 public lock_time_for_max_multiplier = 3 * 365 * 86400; // 3 years + uint256 public lock_time_min = 86400; // 1 * 86400 (1 day) + + // veFXS related + uint256 public vefxs_per_frax_for_max_boost = uint256(4e18); // E18. 4e18 means 4 veFXS must be held by the staker per 1 FRAX + uint256 public vefxs_max_multiplier = uint256(2e18); // E18. 1x = 1e18 + mapping(address => uint256) private _vefxsMultiplierStored; + + // Max reward per second + uint256 public rewardRate0; + uint256 public rewardRate1; + + // Reward period + uint256 public rewardsDuration = 604800; // 7 * 86400 (7 days). + + // Reward tracking + uint256 public ttlRew0Owed; + uint256 public ttlRew1Owed; + uint256 public ttlRew0Paid; + uint256 public ttlRew1Paid; + uint256 private rewardPerTokenStored0; + uint256 private rewardPerTokenStored1; + mapping(address => uint256) public userRewardPerTokenPaid0; + mapping(address => uint256) public userRewardPerTokenPaid1; + mapping(address => uint256) public rewards0; + mapping(address => uint256) public rewards1; + uint256 public lastRewardPull; + mapping(address => uint256) internal lastRewardClaimTime; // staker addr -> timestamp + + // Balance tracking + uint256 private _total_liquidity_locked; + uint256 private _total_combined_weight; + mapping(address => uint256) private _locked_liquidity; + mapping(address => uint256) private _combined_weights; + + // Uniswap V2 / Impossible ONLY + bool frax_is_token0; + + // Stake tracking + mapping(address => LockedStake[]) public lockedStakes; + + // List of valid migrators (set by governance) + mapping(address => bool) public valid_migrators; + + // Stakers set which migrator(s) they want to use + mapping(address => mapping(address => bool)) public staker_allowed_migrators; + + // Administrative booleans + bool public migrationsOn; // Used for migrations. Prevents new stakes, but allows LP and reward withdrawals + bool public stakesUnlocked; // Release locked stakes in case of system migration or emergency + bool public withdrawalsPaused; // For emergencies + bool public rewardsCollectionPaused; // For emergencies + bool public stakingPaused; // For emergencies + bool public isInitialized; + + /* ========== STRUCTS ========== */ + + struct LockedStake { + bytes32 kek_id; + uint256 start_timestamp; + uint256 liquidity; + uint256 ending_timestamp; + uint256 lock_multiplier; // 6 decimals of precision. 1x = 1000000 + } + + /* ========== MODIFIERS ========== */ + + modifier onlyByOwnGov() { + require(msg.sender == owner || msg.sender == timelock_address, "Not owner or timelock"); + _; + } + + modifier onlyByOwnGovCtrlr() { + require(msg.sender == owner || msg.sender == timelock_address || msg.sender == controller_address, "Not own, tlk, or ctrlr"); + _; + } + + modifier isMigrating() { + require(migrationsOn == true, "Not in migration"); + _; + } + + modifier notStakingPaused() { + require(stakingPaused == false, "Staking paused"); + _; + } + + modifier updateRewardAndBalance(address account, bool sync_too) { + _updateRewardAndBalance(account, sync_too); + _; + } + + /* ========== CONSTRUCTOR ========== */ + + constructor ( + address _owner, + address _rewardsToken0, + address _rewardsToken1, + address _stakingToken, + address _frax_address, + address _timelock_address, + address _rewarder_address + ) Owned(_owner){ + frax_address = _frax_address; + rewardsToken0 = CrossChainCanonicalFXS(_rewardsToken0); + rewardsToken1 = ERC20(_rewardsToken1); + + // stakingToken = I2pool(_stakingToken); + // stakingToken = I3pool(_stakingToken); + // stakingToken = IStableXPair(_stakingToken); + // stakingToken = IFeederPool(_stakingToken); + stakingToken = ISaddleLPToken(_stakingToken); + // stakingToken = ILPToken(_stakingToken); + // stakingToken = IUniswapV2Pair(_stakingToken); + + timelock_address = _timelock_address; + rewarder = FraxCrossChainRewarder(_rewarder_address); + + // Uniswap V2 / Impossible ONLY + // Need to know which token FRAX is (0 or 1) + // address token0 = stakingToken.token0(); + // if (token0 == frax_address) frax_is_token0 = true; + // else frax_is_token0 = false; + + // Other booleans + migrationsOn = false; + stakesUnlocked = false; + + // For initialization + lastUpdateTime = block.timestamp; + periodFinish = block.timestamp.add(rewardsDuration); + } + + /* ========== VIEWS ========== */ + + // Total locked liquidity tokens + function totalLiquidityLocked() external view returns (uint256) { + return _total_liquidity_locked; + } + + // Locked liquidity for a given account + function lockedLiquidityOf(address account) external view returns (uint256) { + return _locked_liquidity[account]; + } + + // Total 'balance' used for calculating the percent of the pool the account owns + // Takes into account the locked stake time multiplier and veFXS multiplier + function totalCombinedWeight() external view returns (uint256) { + return _total_combined_weight; + } + + // Combined weight for a specific account + function combinedWeightOf(address account) external view returns (uint256) { + return _combined_weights[account]; + } + + // All the locked stakes for a given account + function lockedStakesOf(address account) external view returns (LockedStake[] memory) { + return lockedStakes[account]; + } + + function lockMultiplier(uint256 secs) public view returns (uint256) { + // return Math.min( + // lock_max_multiplier, + // uint256(MULTIPLIER_PRECISION) + ( + // (secs * (lock_max_multiplier - MULTIPLIER_PRECISION)) / lock_time_for_max_multiplier + // ) + // ) ; + return Math.min( + lock_max_multiplier, + (secs * lock_max_multiplier) / lock_time_for_max_multiplier + ) ; + } + + function lastTimeRewardApplicable() internal view returns (uint256) { + return Math.min(block.timestamp, periodFinish); + } + + function fraxPerLPToken() public view returns (uint256) { + // Get the amount of FRAX 'inside' of the lp tokens + uint256 frax_per_lp_token; + + + // // Curve 2-token + // // ============================================ + // { + // address coin0 = stakingToken.coins(0); + // uint256 total_frax_reserves; + // if (coin0 == frax_address) { + // total_frax_reserves = stakingToken.balances(0); + // } + // else { + // total_frax_reserves = stakingToken.balances(1); + // } + // frax_per_lp_token = total_frax_reserves.mul(1e18).div(stakingToken.totalSupply()); + // } + + // // Curve 3-token + // // ============================================ + // { + // address coin0 = stakingToken.coins(0); + // address coin1 = stakingToken.coins(1); + // uint256 total_frax_reserves; + // if (coin0 == frax_address) { + // total_frax_reserves = stakingToken.balances(0); + // } + // else if (coin1 == frax_address) { + // total_frax_reserves = stakingToken.balances(1); + // } + // else { + // total_frax_reserves = stakingToken.balances(2); + // } + // frax_per_lp_token = total_frax_reserves.mul(1e18).div(stakingToken.totalSupply()); + // } + + // mStable + // ============================================ + // { + // uint256 total_frax_reserves; + // (, IFeederPool.BassetData memory vaultData) = (stakingToken.getBasset(frax_address)); + // total_frax_reserves = uint256(vaultData.vaultBalance); + // frax_per_lp_token = total_frax_reserves.mul(1e18).div(stakingToken.totalSupply()); + // } + + // Saddle L2D4 + // ============================================ + { + ISaddlePermissionlessSwap ISPS = ISaddlePermissionlessSwap(0xF2839E0b30B5e96083085F498b14bbc12530b734); + uint256 total_frax = ISPS.getTokenBalance(ISPS.getTokenIndex(frax_address)); + frax_per_lp_token = total_frax.mul(1e18).div(stakingToken.totalSupply()); + } + + // Most Saddles / Snowball S4D + // ============================================ + // { + // ISwapFlashLoan ISFL = ISwapFlashLoan(0xfeEa4D1BacB0519E8f952460A70719944fe56Ee0); + // uint256 total_frax = ISFL.getTokenBalance(ISFL.getTokenIndex(frax_address)); + // frax_per_lp_token = total_frax.mul(1e18).div(stakingToken.totalSupply()); + // } + + // Uniswap V2 & Impossible + // ============================================ + // { + // uint256 total_frax_reserves; + // (uint256 reserve0, uint256 reserve1, ) = (stakingToken.getReserves()); + // if (frax_is_token0) total_frax_reserves = reserve0; + // else total_frax_reserves = reserve1; + + // frax_per_lp_token = total_frax_reserves.mul(1e18).div(stakingToken.totalSupply()); + // } + + + + return frax_per_lp_token; + } + + function userStakedFrax(address account) public view returns (uint256) { + return (fraxPerLPToken()).mul(_locked_liquidity[account]).div(1e18); + } + + function minVeFXSForMaxBoost(address account) public view returns (uint256) { + return (userStakedFrax(account)).mul(vefxs_per_frax_for_max_boost).div(MULTIPLIER_PRECISION); + } + + function veFXSMultiplier(address account) public view returns (uint256) { + if (address(veFXS) != address(0)){ + // The claimer gets a boost depending on amount of veFXS they have relative to the amount of FRAX 'inside' + // of their locked LP tokens + uint256 veFXS_needed_for_max_boost = minVeFXSForMaxBoost(account); + if (veFXS_needed_for_max_boost > 0){ + uint256 user_vefxs_fraction = (veFXS.balanceOf(account)).mul(MULTIPLIER_PRECISION).div(veFXS_needed_for_max_boost); + + uint256 vefxs_multiplier = ((user_vefxs_fraction).mul(vefxs_max_multiplier)).div(MULTIPLIER_PRECISION); + + // Cap the boost to the vefxs_max_multiplier + if (vefxs_multiplier > vefxs_max_multiplier) vefxs_multiplier = vefxs_max_multiplier; + + return vefxs_multiplier; + } + else return 0; // This will happen with the first stake, when user_staked_frax is 0 + } + else return 0; + } + + function calcCurrLockMultiplier(address account, uint256 stake_idx) public view returns (uint256 midpoint_lock_multiplier) { + // Get the stake + LockedStake memory thisStake = lockedStakes[account][stake_idx]; + + // Handles corner case where user never claims for a new stake + // Don't want the multiplier going above the max + uint256 accrue_start_time; + if (lastRewardClaimTime[account] < thisStake.start_timestamp) { + accrue_start_time = thisStake.start_timestamp; + } + else { + accrue_start_time = lastRewardClaimTime[account]; + } + + // If the lock is expired + if (thisStake.ending_timestamp <= block.timestamp) { + // If the lock expired in the time since the last claim, the weight needs to be proportionately averaged this time + if (lastRewardClaimTime[account] < thisStake.ending_timestamp){ + uint256 time_before_expiry = thisStake.ending_timestamp - accrue_start_time; + uint256 time_after_expiry = block.timestamp - thisStake.ending_timestamp; + + // Average the pre-expiry lock multiplier + uint256 pre_expiry_avg_multiplier = lockMultiplier(time_before_expiry / 2); + + // Get the weighted-average lock_multiplier + // uint256 numerator = (pre_expiry_avg_multiplier * time_before_expiry) + (MULTIPLIER_PRECISION * time_after_expiry); + uint256 numerator = (pre_expiry_avg_multiplier * time_before_expiry) + (0 * time_after_expiry); + midpoint_lock_multiplier = numerator / (time_before_expiry + time_after_expiry); + } + else { + // Otherwise, it needs to just be 1x + // midpoint_lock_multiplier = MULTIPLIER_PRECISION; + + // Otherwise, it needs to just be 0x + midpoint_lock_multiplier = 0; + } + } + // If the lock is not expired + else { + // Decay the lock multiplier based on the time left + uint256 avg_time_left; + { + uint256 time_left_p1 = thisStake.ending_timestamp - accrue_start_time; + uint256 time_left_p2 = thisStake.ending_timestamp - block.timestamp; + avg_time_left = (time_left_p1 + time_left_p2) / 2; + } + midpoint_lock_multiplier = lockMultiplier(avg_time_left); + } + + // Sanity check: make sure it never goes above the initial multiplier + if (midpoint_lock_multiplier > thisStake.lock_multiplier) midpoint_lock_multiplier = thisStake.lock_multiplier; + } + + // Calculate the combined weight for an account + function calcCurCombinedWeight(address account) public view + returns ( + uint256 old_combined_weight, + uint256 new_vefxs_multiplier, + uint256 new_combined_weight + ) + { + // Get the old combined weight + old_combined_weight = _combined_weights[account]; + + // Get the veFXS multipliers + // For the calculations, use the midpoint (analogous to midpoint Riemann sum) + new_vefxs_multiplier = veFXSMultiplier(account); + + uint256 midpoint_vefxs_multiplier; + if ( + (_locked_liquidity[account] == 0 && _combined_weights[account] == 0) || + (new_vefxs_multiplier >= _vefxsMultiplierStored[account]) + ) { + // This is only called for the first stake to make sure the veFXS multiplier is not cut in half + // Also used if the user increased or maintained their position + midpoint_vefxs_multiplier = new_vefxs_multiplier; + } + else { + // Handles natural decay with a non-increased veFXS position + midpoint_vefxs_multiplier = (new_vefxs_multiplier + _vefxsMultiplierStored[account]) / 2; + } + + // Loop through the locked stakes, first by getting the liquidity * lock_multiplier portion + new_combined_weight = 0; + for (uint256 i = 0; i < lockedStakes[account].length; i++) { + LockedStake memory thisStake = lockedStakes[account][i]; + + // Calculate the midpoint lock multiplier + uint256 midpoint_lock_multiplier = calcCurrLockMultiplier(account, i); + + // Calculate the combined boost + uint256 liquidity = thisStake.liquidity; + uint256 combined_boosted_amount = liquidity + ((liquidity * (midpoint_lock_multiplier + midpoint_vefxs_multiplier)) / MULTIPLIER_PRECISION); + new_combined_weight += combined_boosted_amount; + } + } + + function rewardPerToken() public view returns (uint256, uint256) { + if (_total_liquidity_locked == 0 || _total_combined_weight == 0) { + return (rewardPerTokenStored0, rewardPerTokenStored1); + } + else { + return ( + rewardPerTokenStored0.add( + lastTimeRewardApplicable().sub(lastUpdateTime).mul(rewardRate0).mul(1e18).div(_total_combined_weight) + ), + rewardPerTokenStored1.add( + lastTimeRewardApplicable().sub(lastUpdateTime).mul(rewardRate1).mul(1e18).div(_total_combined_weight) + ) + ); + } + } + + function earned(address account) public view returns (uint256, uint256) { + (uint256 rew_per_token0, uint256 rew_per_token1) = rewardPerToken(); + if (_combined_weights[account] == 0){ + return (0, 0); + } + return ( + (_combined_weights[account].mul(rew_per_token0.sub(userRewardPerTokenPaid0[account]))).div(1e18).add(rewards0[account]), + (_combined_weights[account].mul(rew_per_token1.sub(userRewardPerTokenPaid1[account]))).div(1e18).add(rewards1[account]) + ); + } + + function getRewardForDuration() external view returns (uint256, uint256) { + return ( + rewardRate0.mul(rewardsDuration), + rewardRate1.mul(rewardsDuration) + ); + } + + /* ========== MUTATIVE FUNCTIONS ========== */ + + function _getStake(address staker_address, bytes32 kek_id) internal view returns (LockedStake memory locked_stake, uint256 arr_idx) { + for (uint256 i = 0; i < lockedStakes[staker_address].length; i++){ + if (kek_id == lockedStakes[staker_address][i].kek_id){ + locked_stake = lockedStakes[staker_address][i]; + arr_idx = i; + break; + } + } + require(locked_stake.kek_id == kek_id, "Stake not found"); + + } + + function _updateRewardAndBalance(address account, bool sync_too) internal { + // Need to retro-adjust some things if the period hasn't been renewed, then start a new one + if (sync_too){ + sync(); + } + + if (account != address(0)) { + // To keep the math correct, the user's combined weight must be recomputed to account for their + // ever-changing veFXS balance. + ( + uint256 old_combined_weight, + uint256 new_vefxs_multiplier, + uint256 new_combined_weight + ) = calcCurCombinedWeight(account); + + // Calculate the earnings first + _syncEarned(account); + + // Update the user's stored veFXS multipliers + _vefxsMultiplierStored[account] = new_vefxs_multiplier; + + // Update the user's and the global combined weights + if (new_combined_weight >= old_combined_weight) { + uint256 weight_diff = new_combined_weight.sub(old_combined_weight); + _total_combined_weight = _total_combined_weight.add(weight_diff); + _combined_weights[account] = old_combined_weight.add(weight_diff); + } else { + uint256 weight_diff = old_combined_weight.sub(new_combined_weight); + _total_combined_weight = _total_combined_weight.sub(weight_diff); + _combined_weights[account] = old_combined_weight.sub(weight_diff); + } + + } + } + + // Add additional LPs to an existing locked stake + function lockAdditional(bytes32 kek_id, uint256 addl_liq) updateRewardAndBalance(msg.sender, true) public { + // Get the stake and its index + (LockedStake memory thisStake, uint256 theArrayIndex) = _getStake(msg.sender, kek_id); + + // Calculate the new amount + uint256 new_amt = thisStake.liquidity + addl_liq; + + // Checks + require(addl_liq >= 0, "Must be nonzero"); + + // Pull the tokens from the sender + TransferHelper.safeTransferFrom(address(stakingToken), msg.sender, address(this), addl_liq); + + // Update the stake + lockedStakes[msg.sender][theArrayIndex] = LockedStake( + kek_id, + thisStake.start_timestamp, + new_amt, + thisStake.ending_timestamp, + thisStake.lock_multiplier + ); + + // Update liquidities + _total_liquidity_locked += addl_liq; + _locked_liquidity[msg.sender] += addl_liq; + + // Need to call to update the combined weights + _updateRewardAndBalance(msg.sender, false); + + emit LockedAdditional(msg.sender, kek_id, addl_liq); + } + + // Extends the lock of an existing stake + function lockLonger(bytes32 kek_id, uint256 new_ending_ts) nonReentrant updateRewardAndBalance(msg.sender, true) public { + // Get the stake and its index + (LockedStake memory thisStake, uint256 theArrayIndex) = _getStake(msg.sender, kek_id); + + // Check + require(new_ending_ts > block.timestamp, "Must be in the future"); + + // Calculate some times + uint256 time_left = (thisStake.ending_timestamp > block.timestamp) ? thisStake.ending_timestamp - block.timestamp : 0; + uint256 new_secs = new_ending_ts - block.timestamp; + + // Checks + // require(time_left > 0, "Already expired"); + require(new_secs > time_left, "Cannot shorten lock time"); + require(new_secs >= lock_time_min, "Minimum stake time not met"); + require(new_secs <= lock_time_for_max_multiplier, "Trying to lock for too long"); + + // Update the stake + lockedStakes[msg.sender][theArrayIndex] = LockedStake( + kek_id, + block.timestamp, + thisStake.liquidity, + new_ending_ts, + lockMultiplier(new_secs) + ); + + // Need to call to update the combined weights + _updateRewardAndBalance(msg.sender, false); + + emit LockedLonger(msg.sender, kek_id, new_secs, block.timestamp, new_ending_ts); + } + + function _syncEarned(address account) internal { + if (account != address(0)) { + // Calculate the earnings + (uint256 earned0, uint256 earned1) = earned(account); + rewards0[account] = earned0; + rewards1[account] = earned1; + userRewardPerTokenPaid0[account] = rewardPerTokenStored0; + userRewardPerTokenPaid1[account] = rewardPerTokenStored1; + } + } + + // Staker can allow a migrator + function stakerAllowMigrator(address migrator_address) external { + require(valid_migrators[migrator_address], "Invalid migrator address"); + staker_allowed_migrators[msg.sender][migrator_address] = true; + } + + // Staker can disallow a previously-allowed migrator + function stakerDisallowMigrator(address migrator_address) external { + // Delete from the mapping + delete staker_allowed_migrators[msg.sender][migrator_address]; + } + + // Two different stake functions are needed because of delegateCall and msg.sender issues (important for migration) + function stakeLocked(uint256 liquidity, uint256 secs) nonReentrant public { + _stakeLocked(msg.sender, msg.sender, liquidity, secs, block.timestamp); + } + + // If this were not internal, and source_address had an infinite approve, this could be exploitable + // (pull funds from source_address and stake for an arbitrary staker_address) + function _stakeLocked( + address staker_address, + address source_address, + uint256 liquidity, + uint256 secs, + uint256 start_timestamp + ) internal updateRewardAndBalance(staker_address, true) { + require(!stakingPaused || valid_migrators[msg.sender] == true, "Staking paused or in migration"); + require(liquidity > 0, "Must stake more than zero"); + require(secs >= lock_time_min, "Minimum stake time not met"); + require(secs <= lock_time_for_max_multiplier,"Trying to lock for too long"); + + uint256 lock_multiplier = lockMultiplier(secs); + bytes32 kek_id = keccak256(abi.encodePacked(staker_address, start_timestamp, liquidity, _locked_liquidity[staker_address])); + lockedStakes[staker_address].push(LockedStake( + kek_id, + start_timestamp, + liquidity, + start_timestamp.add(secs), + lock_multiplier + )); + + // Pull the tokens from the source_address + TransferHelper.safeTransferFrom(address(stakingToken), source_address, address(this), liquidity); + + // Update liquidities + _total_liquidity_locked = _total_liquidity_locked.add(liquidity); + _locked_liquidity[staker_address] = _locked_liquidity[staker_address].add(liquidity); + + // Need to call to update the combined weights + _updateRewardAndBalance(staker_address, false); + + emit StakeLocked(staker_address, liquidity, secs, kek_id, source_address); + } + + // Two different withdrawLocked functions are needed because of delegateCall and msg.sender issues (important for migration) + function withdrawLocked(bytes32 kek_id) nonReentrant public { + require(withdrawalsPaused == false, "Withdrawals paused"); + _withdrawLocked(msg.sender, msg.sender, kek_id); + } + + // No withdrawer == msg.sender check needed since this is only internally callable and the checks are done in the wrapper + // functions like withdraw(), migrator_withdraw_unlocked() and migrator_withdraw_locked() + function _withdrawLocked(address staker_address, address destination_address, bytes32 kek_id) internal { + // Collect rewards first and then update the balances + _getReward(staker_address, destination_address); + + (LockedStake memory thisStake, uint256 theArrayIndex) = _getStake(staker_address, kek_id); + require(thisStake.kek_id == kek_id, "Stake not found"); + require(block.timestamp >= thisStake.ending_timestamp || stakesUnlocked == true || valid_migrators[msg.sender] == true, "Stake is still locked!"); + + uint256 liquidity = thisStake.liquidity; + + if (liquidity > 0) { + // Update liquidities + _total_liquidity_locked = _total_liquidity_locked.sub(liquidity); + _locked_liquidity[staker_address] = _locked_liquidity[staker_address].sub(liquidity); + + // Remove the stake from the array + delete lockedStakes[staker_address][theArrayIndex]; + + // Need to call to update the combined weights + _updateRewardAndBalance(staker_address, false); + + // Give the tokens to the destination_address + // Should throw if insufficient balance + stakingToken.transfer(destination_address, liquidity); + + emit WithdrawLocked(staker_address, liquidity, kek_id, destination_address); + } + + } + + // Two different getReward functions are needed because of delegateCall and msg.sender issues (important for migration) + function getReward() external nonReentrant returns (uint256, uint256) { + require(rewardsCollectionPaused == false,"Rewards collection paused"); + return _getReward(msg.sender, msg.sender); + } + + // No withdrawer == msg.sender check needed since this is only internally callable + // This distinction is important for the migrator + function _getReward(address rewardee, address destination_address) internal updateRewardAndBalance(rewardee, true) returns (uint256 reward0, uint256 reward1) { + reward0 = rewards0[rewardee]; + reward1 = rewards1[rewardee]; + + if (reward0 > 0) { + rewards0[rewardee] = 0; + rewardsToken0.transfer(destination_address, reward0); + ttlRew0Paid += reward0; + emit RewardPaid(rewardee, reward0, address(rewardsToken0), destination_address); + } + + if (reward1 > 0) { + rewards1[rewardee] = 0; + rewardsToken1.transfer(destination_address, reward1); + ttlRew1Paid += reward1; + emit RewardPaid(rewardee, reward1, address(rewardsToken1), destination_address); + } + + // Update the last reward claim time + lastRewardClaimTime[rewardee] = block.timestamp; + } + + // Quasi-notifyRewardAmount() logic + function syncRewards() internal { + // Bring in rewards, if applicable + if ((address(rewarder) != address(0)) && ((block.timestamp).sub(lastRewardPull) >= rewardsDuration)){ + rewarder.distributeReward(); + lastRewardPull = block.timestamp; + } + + // Get the current reward token balances + uint256 curr_bal_0 = rewardsToken0.balanceOf(address(this)); + uint256 curr_bal_1 = rewardsToken1.balanceOf(address(this)); + + // Update the owed amounts based off the old reward rates + // Anything over a week is zeroed + { + uint256 eligible_elapsed_time = Math.min((block.timestamp).sub(lastUpdateTime), rewardsDuration); + ttlRew0Owed += rewardRate0.mul(eligible_elapsed_time); + ttlRew1Owed += rewardRate1.mul(eligible_elapsed_time); + } + + // Update the stored amounts too + { + (uint256 reward0, uint256 reward1) = rewardPerToken(); + rewardPerTokenStored0 = reward0; + rewardPerTokenStored1 = reward1; + } + + // Set the reward rates based on the free amount of tokens + { + // Don't count unpaid rewards as free + uint256 unpaid0 = ttlRew0Owed.sub(ttlRew0Paid); + uint256 unpaid1 = ttlRew1Owed.sub(ttlRew1Paid); + + // Handle reward token0 + if (curr_bal_0 <= unpaid0){ + // token0 is depleted, so stop emitting + rewardRate0 = 0; + } + else { + uint256 free0 = curr_bal_0.sub(unpaid0); + rewardRate0 = (free0).div(rewardsDuration); + } + + // Handle reward token1 + if (curr_bal_1 <= unpaid1){ + // token1 is depleted, so stop emitting + rewardRate1 = 0; + } + else { + uint256 free1 = curr_bal_1.sub(unpaid1); + rewardRate1 = (free1).div(rewardsDuration); + } + } + } + + function sync() public { + require(isInitialized, "Contract not initialized"); + + // Swap bridge tokens + // Make sure the rewardRates are synced to the current FXS balance + syncRewards(); + + // Rolling 7 days rewards period + lastUpdateTime = block.timestamp; + periodFinish = (block.timestamp).add(rewardsDuration); + } + + /* ========== RESTRICTED FUNCTIONS ========== */ + + // Needed when first deploying the farm + // Make sure rewards are present + function initializeDefault() external onlyByOwnGovCtrlr { + require(!isInitialized, "Already initialized"); + isInitialized = true; + + // Bring in rewards, if applicable + if (address(rewarder) != address(0)){ + rewarder.distributeReward(); + lastRewardPull = block.timestamp; + } + + emit DefaultInitialization(); + } + + // Migrator can stake for someone else (they won't be able to withdraw it back though, only staker_address can). + function migrator_stakeLocked_for(address staker_address, uint256 amount, uint256 secs, uint256 start_timestamp) external isMigrating { + require(staker_allowed_migrators[staker_address][msg.sender] && valid_migrators[msg.sender], "Mig. invalid or unapproved"); + _stakeLocked(staker_address, msg.sender, amount, secs, start_timestamp); + } + + // Used for migrations + function migrator_withdraw_locked(address staker_address, bytes32 kek_id) external isMigrating { + require(staker_allowed_migrators[staker_address][msg.sender] && valid_migrators[msg.sender], "Mig. invalid or unapproved"); + _withdrawLocked(staker_address, msg.sender, kek_id); + } + + // Adds supported migrator address + function addMigrator(address migrator_address) external onlyByOwnGov { + valid_migrators[migrator_address] = true; + } + + // Remove a migrator address + function removeMigrator(address migrator_address) external onlyByOwnGov { + require(valid_migrators[migrator_address] == true, "Address nonexistent"); + + // Delete from the mapping + delete valid_migrators[migrator_address]; + } + + // Added to support recovering LP Rewards and other mistaken tokens from other systems to be distributed to holders + function recoverERC20(address tokenAddress, uint256 tokenAmount) external onlyByOwnGov { + // Admin cannot withdraw the staking token from the contract unless currently migrating + if(!migrationsOn){ + require(tokenAddress != address(stakingToken), "Not in migration"); // Only Governance / Timelock can trigger a migration + } + // Only the owner address can ever receive the recovery withdrawal + ERC20(tokenAddress).transfer(owner, tokenAmount); + emit Recovered(tokenAddress, tokenAmount); + } + + function setMultipliers(uint256 _lock_max_multiplier, uint256 _vefxs_max_multiplier, uint256 _vefxs_per_frax_for_max_boost) external onlyByOwnGov { + require(_lock_max_multiplier >= MULTIPLIER_PRECISION, "Mult must be >= MULTIPLIER_PRECISION"); + require(_vefxs_max_multiplier >= 0, "veFXS mul must be >= 0"); + require(_vefxs_per_frax_for_max_boost > 0, "veFXS pct max must be >= 0"); + + lock_max_multiplier = _lock_max_multiplier; + vefxs_max_multiplier = _vefxs_max_multiplier; + vefxs_per_frax_for_max_boost = _vefxs_per_frax_for_max_boost; + + emit MaxVeFXSMultiplier(vefxs_max_multiplier); + emit LockedStakeMaxMultiplierUpdated(lock_max_multiplier); + emit veFXSPerFraxForMaxBoostUpdated(vefxs_per_frax_for_max_boost); + } + + function setLockedStakeTimeForMinAndMaxMultiplier(uint256 _lock_time_for_max_multiplier, uint256 _lock_time_min) external onlyByOwnGov { + require(_lock_time_for_max_multiplier >= 1, "Mul max time must be >= 1"); + require(_lock_time_min >= 1, "Mul min time must be >= 1"); + + lock_time_for_max_multiplier = _lock_time_for_max_multiplier; + lock_time_min = _lock_time_min; + + emit LockedStakeTimeForMaxMultiplier(lock_time_for_max_multiplier); + emit LockedStakeMinTime(_lock_time_min); + } + + function unlockStakes() external onlyByOwnGov { + stakesUnlocked = !stakesUnlocked; + } + + function toggleMigrations() external onlyByOwnGov { + migrationsOn = !migrationsOn; + } + + function toggleStaking() external onlyByOwnGov { + stakingPaused = !stakingPaused; + } + + function toggleWithdrawals() external onlyByOwnGov { + withdrawalsPaused = !withdrawalsPaused; + } + + function toggleRewardsCollection() external onlyByOwnGov { + rewardsCollectionPaused = !rewardsCollectionPaused; + } + + function setTimelock(address _new_timelock) external onlyByOwnGov { + timelock_address = _new_timelock; + } + + function setController(address _controller_address) external onlyByOwnGov { + controller_address = _controller_address; + } + + function setVeFXS(address _vefxs_address) external onlyByOwnGov { + veFXS = IveFXS(_vefxs_address); + } + + /* ========== EVENTS ========== */ + + event StakeLocked(address indexed user, uint256 amount, uint256 secs, bytes32 kek_id, address source_address); + event WithdrawLocked(address indexed user, uint256 amount, bytes32 kek_id, address destination_address); + event RewardPaid(address indexed user, uint256 reward, address token_address, address destination_address); + event DefaultInitialization(); + event Recovered(address token, uint256 amount); + event LockedStakeMaxMultiplierUpdated(uint256 multiplier); + event LockedStakeTimeForMaxMultiplier(uint256 secs); + event LockedStakeMinTime(uint256 secs); + event LockedAdditional(address indexed user, bytes32 kek_id, uint256 amount); + event LockedLonger(address indexed user, bytes32 kek_id, uint256 new_secs, uint256 new_start_ts, uint256 new_end_ts); + event MaxVeFXSMultiplier(uint256 multiplier); + event veFXSPerFraxForMaxBoostUpdated(uint256 scale_factor); +} diff --git a/src/hardhat/contracts/Staking/FraxUnifiedFarmTemplate_V2.sol b/src/hardhat/contracts/Staking/FraxUnifiedFarmTemplate_V2.sol index 9b258645..f0a630e1 100755 --- a/src/hardhat/contracts/Staking/FraxUnifiedFarmTemplate_V2.sol +++ b/src/hardhat/contracts/Staking/FraxUnifiedFarmTemplate_V2.sol @@ -81,7 +81,7 @@ contract FraxUnifiedFarmTemplate_V2 is OwnedV2, ReentrancyGuardV2 { // Lock time and multiplier settings uint256 public lock_max_multiplier = 2e18; // E18. 1x = e18 - uint256 public lock_time_for_max_multiplier = 1 * 1095 * 86400; // 3 years + uint256 public lock_time_for_max_multiplier = 3 * 365 * 86400; // 3 years // uint256 public lock_time_for_max_multiplier = 2 * 86400; // 2 days uint256 public lock_time_min = 594000; // 6.875 * 86400 (~7 day) @@ -132,6 +132,7 @@ contract FraxUnifiedFarmTemplate_V2 is OwnedV2, ReentrancyGuardV2 { bool internal withdrawalsPaused; // For emergencies bool internal rewardsCollectionPaused; // For emergencies bool internal stakingPaused; // For emergencies + bool internal collectRewardsOnWithdrawalPaused; // For emergencies if a token is overemitted /* ========== STRUCTS ========== */ // In children... @@ -425,7 +426,7 @@ contract FraxUnifiedFarmTemplate_V2 is OwnedV2, ReentrancyGuardV2 { // Staker can allow a veFXS proxy (the proxy will have to toggle them first) // CALLED BY STAKER function stakerSetVeFXSProxy(address proxy_address) external { - if(!valid_vefxs_proxies[msg.sender]) revert InvalidProxy(); + if(!valid_vefxs_proxies[proxy_address]) revert InvalidProxy(); if(!proxy_allowed_stakers[proxy_address][msg.sender]) revert ProxyHasNotApprovedYou(); // Corner case sanity check to make sure LP isn't double counted @@ -692,11 +693,13 @@ contract FraxUnifiedFarmTemplate_V2 is OwnedV2, ReentrancyGuardV2 { function setPauses( bool _stakingPaused, bool _withdrawalsPaused, - bool _rewardsCollectionPaused + bool _rewardsCollectionPaused, + bool _collectRewardsOnWithdrawalPaused ) external onlyByOwnGov { stakingPaused = _stakingPaused; withdrawalsPaused = _withdrawalsPaused; rewardsCollectionPaused = _rewardsCollectionPaused; + collectRewardsOnWithdrawalPaused = _collectRewardsOnWithdrawalPaused; } /* ========== RESTRICTED FUNCTIONS - Owner or timelock only ========== */ diff --git a/src/hardhat/contracts/Staking/FraxUnifiedFarm_ERC20.sol b/src/hardhat/contracts/Staking/FraxUnifiedFarm_ERC20.sol index 803947d2..7f469273 100755 --- a/src/hardhat/contracts/Staking/FraxUnifiedFarm_ERC20.sol +++ b/src/hardhat/contracts/Staking/FraxUnifiedFarm_ERC20.sol @@ -371,7 +371,7 @@ contract FraxUnifiedFarm_ERC20 is FraxUnifiedFarmTemplate { function _updateLiqAmts(address staker_address, uint256 amt, bool is_add) internal { // Get the proxy address - address the_proxy = staker_designated_proxies[staker_address]; + address the_proxy = getProxyFor(staker_address); if (is_add) { // Update total liquidities diff --git a/src/hardhat/contracts/Staking/FraxUnifiedFarm_ERC20_V2.sol b/src/hardhat/contracts/Staking/FraxUnifiedFarm_ERC20_V2.sol index 7cd47f59..eae31f3c 100644 --- a/src/hardhat/contracts/Staking/FraxUnifiedFarm_ERC20_V2.sol +++ b/src/hardhat/contracts/Staking/FraxUnifiedFarm_ERC20_V2.sol @@ -18,7 +18,7 @@ pragma solidity ^0.8.17; /// Locked Stake Transfer & Custom Error logic created by ZrowGz with the Pitch Foundation import "./FraxUnifiedFarmTemplate_V2.sol"; -import "./ILockReceiverV2.sol"; +import "./ILockReceiver.sol"; // -------------------- VARIES -------------------- @@ -56,6 +56,7 @@ contract FraxUnifiedFarm_ERC20_V2 is FraxUnifiedFarmTemplate_V2 { // use custom errors to reduce contract size error TransferLockNotAllowed(address,uint256); // spender, locked_stake_index + error StakeStillLocked(uint256,uint256); // ending_timestamp, block.timestamp error StakesUnlocked(); error InvalidReceiver(); error InvalidAmount(); @@ -386,8 +387,13 @@ contract FraxUnifiedFarm_ERC20_V2 is FraxUnifiedFarmTemplate_V2 { return(lockedStakes[staker][locked_stake_index]); } - function getLockedStakeLiquidity(address staker, uint256 locked_stake_index) external view returns (uint256) { - return(lockedStakes[staker][locked_stake_index].liquidity); + + /// @notice Returns the liquidity and ending timestamp of a locked stake + function getStakeLiquidityAndEnding(address staker, uint256 locked_stake_index) external view returns (uint256,uint256) { + return( + lockedStakes[staker][locked_stake_index].liquidity, + lockedStakes[staker][locked_stake_index].ending_timestamp + ); } /* =============== MUTATIVE FUNCTIONS =============== */ @@ -527,7 +533,7 @@ contract FraxUnifiedFarm_ERC20_V2 is FraxUnifiedFarmTemplate_V2 { // Update liquidities _updateLiqAmts(staker_address, liquidity, true); - emit StakeLocked(staker_address, liquidity, secs, lockedStakes[staker_address].length, source_address); + emit StakeLocked(staker_address, liquidity, secs, lockedStakes[staker_address].length - 1, source_address); return lockedStakes[staker_address].length - 1; } @@ -547,37 +553,36 @@ contract FraxUnifiedFarm_ERC20_V2 is FraxUnifiedFarmTemplate_V2 { uint256 theArrayIndex ) internal returns (uint256) { // Collect rewards first and then update the balances - _getReward(staker_address, destination_address, true); + // collectRewardsOnWithdrawalPaused to be used in an emergency situation if reward is overemitted or not available + // and the user can forfeit rewards to get their principal back + if (!collectRewardsOnWithdrawalPaused) _getReward(staker_address, destination_address, true); // Get the stake by its index LockedStake memory thisStake = lockedStakes[staker_address][theArrayIndex]; - // require(block.timestamp >= thisStake.ending_timestamp || stakesUnlocked == true, "Stake is still locked!"); - // the stake must still be locked to transfer - if (block.timestamp >= thisStake.ending_timestamp || stakesUnlocked == true) { - revert StakesUnlocked(); + // note: original check:: require(block.timestamp >= thisStake.ending_timestamp || stakesUnlocked == true, "Stake is still locked!"); + // the stake must still be unlocked to withdraw + if (block.timestamp < thisStake.ending_timestamp && !stakesUnlocked) { + revert StakeStillLocked(thisStake.ending_timestamp, block.timestamp); } - // uint256 liquidity = thisStake.liquidity; - if (thisStake.liquidity > 0) { + uint256 liq = thisStake.liquidity; + if (liq > 0) { // Give the tokens to the destination_address // Should throw if insufficient balance - TransferHelperV2.safeTransfer(address(stakingToken), destination_address, thisStake.liquidity); + TransferHelperV2.safeTransfer(address(stakingToken), destination_address, liq); - // Remove the stake from the array - delete lockedStakes[staker_address][theArrayIndex]; + // disable the stake by setting everything to zero + _updateStake(staker_address, theArrayIndex, 0, 0, 0, 0); - // // Need to call again to make sure everything is correct - // updateRewardAndBalance(staker_address, false); - - // Update liquidities + // Update liquidities & balances _updateLiqAmts(staker_address, thisStake.liquidity, false); emit WithdrawLocked(staker_address, thisStake.liquidity, theArrayIndex, destination_address); } - return thisStake.liquidity; + return liq; } function _getRewardExtraLogic(address rewardee, address destination_address) internal override { @@ -712,9 +717,9 @@ contract FraxUnifiedFarm_ERC20_V2 is FraxUnifiedFarmTemplate_V2 { // on transfer, call addrs[0] to verify sending is ok if (addrs[0].code.length > 0) { require( - ILockReceiverV2(addrs[0]).beforeLockTransfer(addrs[0], addrs[1], sender_lock_index, "") + ILockReceiver(addrs[0]).beforeLockTransfer(addrs[0], addrs[1], sender_lock_index, "") == - ILockReceiverV2.beforeLockTransfer.selector + ILockReceiver.beforeLockTransfer.selector ); } @@ -725,57 +730,45 @@ contract FraxUnifiedFarm_ERC20_V2 is FraxUnifiedFarmTemplate_V2 { if (addrs[1] == address(0) || addrs[1] == addrs[0]) { revert InvalidReceiver(); } - if (block.timestamp >= senderStake.ending_timestamp || stakesUnlocked == true) { + if (block.timestamp >= senderStake.ending_timestamp || stakesUnlocked) { revert StakesUnlocked(); } if (transfer_amount > senderStake.liquidity || transfer_amount <= 0) { revert InvalidAmount(); } - // Update the liquidities - _locked_liquidity[addrs[0]] -= transfer_amount; - _locked_liquidity[addrs[1]] += transfer_amount; - - if (getProxyFor(addrs[0]) != address(0)) { - proxy_lp_balances[getProxyFor(addrs[0])] -= transfer_amount; - } - - if (getProxyFor(addrs[1]) != address(0)) { - proxy_lp_balances[getProxyFor(addrs[1])] += transfer_amount; - } + // Update the liquidity for sender + _updateLiqAmts(addrs[0], transfer_amount, false); // if sent amount was all the liquidity, delete the stake, otherwise decrease the balance if (transfer_amount == senderStake.liquidity) { - delete lockedStakes[addrs[0]][sender_lock_index]; + // disable the stake + _updateStake(addrs[0], sender_lock_index, 0, 0, 0, 0); } else { + // otherwise, deduct the transfer amount from the stake lockedStakes[addrs[0]][sender_lock_index].liquidity -= transfer_amount; } - /** if use_receiver_lock_index is true & + /** if use_receiver_lock_index is true & the incoming stake wouldn't extend the receiver's stake * & the index is valid * & has liquidity * & is still locked, update the stake & ending timestamp (longer of the two) * else, create a new lockedStake * note using nested if checks to reduce gas costs slightly */ - if (use_receiver_lock_index == true) { + if ( + use_receiver_lock_index == true + && + senderStake.ending_timestamp <= lockedStakes[addrs[1]][receiver_lock_index].ending_timestamp + ) { // Get the stake and its index LockedStake memory receiverStake = getLockedStake(addrs[1], receiver_lock_index); - if (receiver_lock_index < lockedStakes[addrs[1]].length ) { + if (receiver_lock_index < lockedStakes[addrs[1]].length) { if (receiverStake.liquidity > 0) { if (receiverStake.ending_timestamp > block.timestamp) { // Update the existing staker's stake liquidity lockedStakes[addrs[1]][receiver_lock_index].liquidity += transfer_amount; - // check & update ending timestamp to whichever is farthest out - if (receiverStake.ending_timestamp < senderStake.ending_timestamp) { - // update the lock expiration to the later timestamp - lockedStakes[addrs[1]][receiver_lock_index].ending_timestamp = senderStake.ending_timestamp; - // update the lock multiplier since we are effectively extending the lock - lockedStakes[addrs[1]][receiver_lock_index].lock_multiplier = lockMultiplier( - senderStake.ending_timestamp - block.timestamp - ); - } } } } @@ -793,9 +786,8 @@ contract FraxUnifiedFarm_ERC20_V2 is FraxUnifiedFarmTemplate_V2 { receiver_lock_index = lockedStakes[addrs[1]].length - 1; } - // Need to call again to make sure everything is correct - updateRewardAndBalance(addrs[0], true); - updateRewardAndBalance(addrs[1], true); + // update liquidity of the receiver + _updateLiqAmts(addrs[1], transfer_amount, true); emit TransferLockedByIndex( addrs[0], @@ -805,16 +797,16 @@ contract FraxUnifiedFarm_ERC20_V2 is FraxUnifiedFarmTemplate_V2 { receiver_lock_index ); - // call the receiver with the destination lockedStake to verify receiving is ok - if (ILockReceiverV2(addrs[1]).onLockReceived( - addrs[0], - addrs[1], - receiver_lock_index, - "" - ) != ILockReceiverV2.onLockReceived.selector) revert InvalidReceiver(); //0xc42d8b95) revert InvalidReceiver(); + // call the receiver with the destination lockedStake to verify receiving is ok + if (addrs[1].code.length > 0) { + require(ILockReceiver(addrs[1]).onLockReceived(addrs[0], addrs[1], receiver_lock_index, "") + == + ILockReceiver.beforeLockTransfer.selector + ); + } + return (sender_lock_index, receiver_lock_index); - } /* ========== RESTRICTED FUNCTIONS - Owner or timelock only ========== */ diff --git a/src/hardhat/contracts/Staking/FraxUnifiedFarm_ERC20_V2_BEFORE_MANUAL_MERGE.sol.old b/src/hardhat/contracts/Staking/FraxUnifiedFarm_ERC20_V2_BEFORE_MANUAL_MERGE.sol.old index 69d69490..7b20c2f3 100644 --- a/src/hardhat/contracts/Staking/FraxUnifiedFarm_ERC20_V2_BEFORE_MANUAL_MERGE.sol.old +++ b/src/hardhat/contracts/Staking/FraxUnifiedFarm_ERC20_V2_BEFORE_MANUAL_MERGE.sol.old @@ -466,7 +466,7 @@ contract FraxUnifiedFarm_ERC20_V2 is FraxUnifiedFarmTemplate_V2 { function _updateLiqAmts(address staker_address, uint256 amt, bool is_add) internal { // Get the proxy address - address the_proxy = staker_designated_proxies[staker_address]; + address the_proxy = getProxyFor(staker_address); if (is_add) { // Update total liquidities diff --git a/src/hardhat/contracts/Staking/FraxUnifiedFarm_KyberSwapElastic.sol b/src/hardhat/contracts/Staking/FraxUnifiedFarm_KyberSwapElastic.sol index ba2ea3b9..0f76309f 100755 --- a/src/hardhat/contracts/Staking/FraxUnifiedFarm_KyberSwapElastic.sol +++ b/src/hardhat/contracts/Staking/FraxUnifiedFarm_KyberSwapElastic.sol @@ -255,7 +255,7 @@ contract FraxUnifiedFarm_KyberSwapElastic is FraxUnifiedFarmTemplate { function _updateLiqAmts(address staker_address, uint256 amt, bool is_add) internal { // Get the proxy address - address the_proxy = staker_designated_proxies[staker_address]; + address the_proxy = getProxyFor(staker_address); if (is_add) { // Update total liquidities diff --git a/src/hardhat/contracts/Staking/IFraxFarm.sol b/src/hardhat/contracts/Staking/IFraxFarm.sol new file mode 100644 index 00000000..c49941b4 --- /dev/null +++ b/src/hardhat/contracts/Staking/IFraxFarm.sol @@ -0,0 +1,203 @@ +// SPDX-License-Identifier: MIT +pragma solidity >=0.8.0; + +interface IFraxswap { + function getReserves() + external + view + returns ( + uint112 reserve0, + uint112 reserve1, + uint32 blockTimestampLast + ); + + function token0() external view returns (address); + + function token1() external view returns (address); +} + +/// @notice Minimalistic IFraxFarmUniV3 +interface IFraxFarmUniV3TokenPositions { + function uni_token0() external view returns (address); + + function uni_token1() external view returns (address); +} + +interface IFraxswapERC20 { + function decimals() external view returns (uint8); +} + +interface IFraxFarm { + function owner() external view returns (address); + + function stakingToken() external view returns (address); + + function fraxPerLPToken() external view returns (uint256); + + function calcCurCombinedWeight(address account) + external + view + returns ( + uint256 old_combined_weight, + uint256 new_vefxs_multiplier, + uint256 new_combined_weight + ); + + function periodFinish() external view returns (uint256); + + function getAllRewardTokens() external view returns (address[] memory); + + function earned(address account) external view returns (uint256[] memory new_earned); + + function totalLiquidityLocked() external view returns (uint256); + + function lockedLiquidityOf(address account) external view returns (uint256); + + function totalCombinedWeight() external view returns (uint256); + + function combinedWeightOf(address account) external view returns (uint256); + + function lockMultiplier(uint256 secs) external view returns (uint256); + + function rewardRates(uint256 token_idx) external view returns (uint256 rwd_rate); + + function userStakedFrax(address account) external view returns (uint256); + + function proxyStakedFrax(address proxy_address) external view returns (uint256); + + function maxLPForMaxBoost(address account) external view returns (uint256); + + function minVeFXSForMaxBoost(address account) external view returns (uint256); + + function minVeFXSForMaxBoostProxy(address proxy_address) external view returns (uint256); + + function veFXSMultiplier(address account) external view returns (uint256 vefxs_multiplier); + + function toggleValidVeFXSProxy(address proxy_address) external; + + function proxyToggleStaker(address staker_address) external; + + function stakerSetVeFXSProxy(address proxy_address) external; + + function getReward(address destination_address) external returns (uint256[] memory); + + function getReward(address destination_address, bool also_claim_extra) external returns (uint256[] memory); + + function vefxs_max_multiplier() external view returns (uint256); + + function vefxs_boost_scale_factor() external view returns (uint256); + + function vefxs_per_frax_for_max_boost() external view returns (uint256); + + function getProxyFor(address addr) external view returns (address); + + function sync() external; + + function nominateNewOwner(address _owner) external; + + function acceptOwnership() external; + + function updateRewardAndBalance(address acct, bool sync) external; + + function setRewardVars( + address reward_token_address, + uint256 _new_rate, + address _gauge_controller_address, + address _rewards_distributor_address + ) external; + + function calcCurrLockMultiplier(address account, uint256 stake_idx) + external + view + returns (uint256 midpoint_lock_multiplier); + + function staker_designated_proxies(address staker_address) external view returns (address); + + function sync_gauge_weights(bool andForce) external; +} + +interface IFraxFarmTransfers { + function setAllowance(address spender, uint256 lockId, uint256 amount) external; + function removeAllowance(address spender, uint256 lockId) external; + function setApprovalForAll(address spender, bool approved) external; + function isApproved(address staker, uint256 lockId, uint256 amount) external view returns (bool); + function transferLockedFrom( + address sender_address, + address receiver_address, + uint256 sender_lock_index, + uint256 transfer_amount, + bool use_receiver_lock_index, + uint256 receiver_lock_index + ) external returns (uint256); + + function transferLocked( + address receiver_address, + uint256 sender_lock_index, + uint256 transfer_amount, + bool use_receiver_lock_index, + uint256 receiver_lock_index + ) external returns (uint256); + + function beforeLockTransfer(address operator, address from, uint256 lockId, bytes calldata data) external returns (bytes4); + function onLockReceived(address operator, address from, uint256 lockId, bytes memory data) external returns (bytes4); + +} + +interface IFraxFarmERC20 is IFraxFarm, IFraxFarmTransfers { + struct LockedStake { + uint256 start_timestamp; + uint256 liquidity; + uint256 ending_timestamp; + uint256 lock_multiplier; // 6 decimals of precision. 1x = 1000000 + } + + /// TODO this references the public getter for `lockedStakes` in the contract + function lockedStakes(address account, uint256 stake_idx) external view returns (LockedStake memory); + + function lockedStakesOf(address account) external view returns (LockedStake[] memory); + + function lockedStakesOfLength(address account) external view returns (uint256); + + function lockAdditional(uint256 lockId, uint256 addl_liq) external; + + function lockLonger(uint256 lockId, uint256 _newUnlockTimestamp) external; + + function stakeLocked(uint256 liquidity, uint256 secs) external returns (uint256); + + function withdrawLocked(uint256 lockId, address destination_address) external returns (uint256); +} + +interface IFraxFarmUniV3 is IFraxFarm, IFraxFarmUniV3TokenPositions { + struct LockedNFT { + uint256 token_id; // for Uniswap V3 LPs + uint256 liquidity; + uint256 start_timestamp; + uint256 ending_timestamp; + uint256 lock_multiplier; // 6 decimals of precision. 1x = 1000000 + int24 tick_lower; + int24 tick_upper; + } + + function uni_tick_lower() external view returns (int24); + + function uni_tick_upper() external view returns (int24); + + function uni_required_fee() external view returns (uint24); + + function lockedNFTsOf(address account) external view returns (LockedNFT[] memory); + + function lockedNFTsOfLength(address account) external view returns (uint256); + + function lockAdditional( + uint256 token_id, + uint256 token0_amt, + uint256 token1_amt, + uint256 token0_min_in, + uint256 token1_min_in, + bool use_balof_override + ) external; + + function stakeLocked(uint256 token_id, uint256 secs) external; + + function withdrawLocked(uint256 token_id, address destination_address) external; +} \ No newline at end of file diff --git a/src/hardhat/contracts/Staking/ILockReceiver.sol b/src/hardhat/contracts/Staking/ILockReceiver.sol index d23ef3e5..44a2cdde 100644 --- a/src/hardhat/contracts/Staking/ILockReceiver.sol +++ b/src/hardhat/contracts/Staking/ILockReceiver.sol @@ -5,14 +5,14 @@ interface ILockReceiver { function beforeLockTransfer( address _sender, address _receiver, - bytes32 _lockId, + uint256 _lockId, bytes calldata _data ) external returns (bytes4); function onLockReceived( address _sender, address _receiver, - bytes32 _lockId, + uint256 _lockId, bytes calldata _data ) external returns (bytes4); } \ No newline at end of file diff --git a/src/hardhat/contracts/Staking/Variants/FraxCCFarmV3_ArbiSaddleL2D4.sol b/src/hardhat/contracts/Staking/Variants/FraxCCFarmV3_ArbiSaddleL2D4.sol new file mode 100755 index 00000000..3cb1afe4 --- /dev/null +++ b/src/hardhat/contracts/Staking/Variants/FraxCCFarmV3_ArbiSaddleL2D4.sol @@ -0,0 +1,18 @@ +// SPDX-License-Identifier: GPL-2.0-or-later +pragma solidity >=0.8.0; + +import "../FraxCrossChainFarmV3.sol"; + +contract FraxCCFarmV3_ArbiSaddleL2D4 is FraxCrossChainFarmV3 { + constructor ( + address _owner, + address _rewardsToken0, + address _rewardsToken1, + address _stakingToken, + address _frax_address, + address _timelock_address, + address _rewarder_address + ) + FraxCrossChainFarmV3(_owner, _rewardsToken0, _rewardsToken1, _stakingToken, _frax_address, _timelock_address, _rewarder_address) + {} +} diff --git a/src/hardhat/contracts/Staking/veFPISYieldDistributorV5.sol b/src/hardhat/contracts/Staking/veFPISYieldDistributorV5.sol new file mode 100755 index 00000000..b13d68d3 --- /dev/null +++ b/src/hardhat/contracts/Staking/veFPISYieldDistributorV5.sol @@ -0,0 +1,401 @@ +// SPDX-License-Identifier: GPL-2.0-or-later +pragma solidity >=0.8.0; + +// ==================================================================== +// | ______ _______ | +// | / _____________ __ __ / ____(_____ ____ _____ ________ | +// | / /_ / ___/ __ `| |/_/ / /_ / / __ \/ __ `/ __ \/ ___/ _ \ | +// | / __/ / / / /_/ _> < / __/ / / / / / /_/ / / / / /__/ __/ | +// | /_/ /_/ \__,_/_/|_| /_/ /_/_/ /_/\__,_/_/ /_/\___/\___/ | +// | | +// ==================================================================== +// ======================veFPISYieldDistributorV5======================= +// ==================================================================== +// Distributes Frax protocol yield based on the claimer's veFPIS balance +// V3: Yield will now not accrue for unlocked veFPIS + +// Frax Finance: https://github.com/FraxFinance + +// Primary Author(s) +// Travis Moore: https://github.com/FortisFortuna + +// Reviewer(s) / Contributor(s) +// Jason Huan: https://github.com/jasonhuan +// Sam Kazemian: https://github.com/samkazemian +// Dennis: https://github.com/denett + +// Originally inspired by Synthetix.io, but heavily modified by the Frax team (veFPIS portion) +// https://github.com/Synthetixio/synthetix/blob/develop/contracts/StakingRewards.sol + +import "../Math/Math.sol"; +import "../Math/SafeMath.sol"; +import "../Curve/IveFPIS.sol"; +import "../Uniswap/TransferHelper.sol"; +import "../ERC20/ERC20.sol"; +import "../ERC20/SafeERC20.sol"; +import "../Utils/ReentrancyGuard.sol"; +import "./Owned.sol"; + +contract veFPISYieldDistributorV5 is Owned, ReentrancyGuard { + using SafeMath for uint256; + using SafeERC20 for ERC20; + + /* ========== STATE VARIABLES ========== */ + + // Instances + IveFPIS private veFPIS; + ERC20 public emittedToken; + + // Addresses + address public emitted_token_address; + + // Admin addresses + address public timelock_address; + + // Constant for price precision + uint256 private constant PRICE_PRECISION = 1e6; + + // Yield and period related + uint256 public periodFinish; + uint256 public lastUpdateTime; + uint256 public yieldRate; + uint256 public yieldDuration = 604800; // 7 * 86400 (7 days) + mapping(address => bool) public reward_notifiers; + + // Yield tracking + uint256 public yieldPerVeFPISStored = 0; + mapping(address => uint256) public userYieldPerTokenPaid; + mapping(address => uint256) public yields; + + // veFPIS tracking + uint256 public totalVeFPISParticipating = 0; + uint256 public totalVeFPISSupplyStored = 0; + mapping(address => bool) public userIsInitialized; + mapping(address => uint256) public userVeFPISCheckpointed; + mapping(address => uint256) public userVeFPISEndpointCheckpointed; + mapping(address => uint256) private lastRewardClaimTime; // staker addr -> timestamp + + // Greylists + mapping(address => bool) public greylist; + + // Admin booleans for emergencies + bool public yieldCollectionPaused = false; // For emergencies + + struct LockedBalance { + int128 amount; + uint256 end; + } + + /* ========== MODIFIERS ========== */ + + modifier onlyByOwnGov() { + require( msg.sender == owner || msg.sender == timelock_address, "Not owner or timelock"); + _; + } + + modifier notYieldCollectionPaused() { + require(yieldCollectionPaused == false, "Yield collection is paused"); + _; + } + + modifier checkpointUser(address account) { + _checkpointUser(account); + _; + } + + /* ========== CONSTRUCTOR ========== */ + + constructor ( + address _owner, + address _emittedToken, + address _timelock_address, + address _veFPIS_address + ) Owned(_owner) { + emitted_token_address = _emittedToken; + emittedToken = ERC20(_emittedToken); + + veFPIS = IveFPIS(_veFPIS_address); + lastUpdateTime = block.timestamp; + timelock_address = _timelock_address; + + reward_notifiers[_owner] = true; + } + + /* ========== VIEWS ========== */ + + function fractionParticipating() external view returns (uint256) { + return totalVeFPISParticipating.mul(PRICE_PRECISION).div(totalVeFPISSupplyStored); + } + + // Only positions with locked veFPIS can accrue yield. Otherwise, expired-locked veFPIS + // is de-facto rewards for FPIS. + function eligibleCurrentVeFPIS(address account) public view returns (uint256 eligible_vefpis_bal, uint256 stored_ending_timestamp) { + uint256 curr_vefpis_bal = veFPIS.balanceOf(account); + + // Stored is used to prevent abuse + stored_ending_timestamp = userVeFPISEndpointCheckpointed[account]; + + // Only unexpired veFPIS should be eligible + if (stored_ending_timestamp != 0 && (block.timestamp >= stored_ending_timestamp)){ + eligible_vefpis_bal = 0; + } + else if (block.timestamp >= stored_ending_timestamp){ + eligible_vefpis_bal = 0; + } + else { + eligible_vefpis_bal = curr_vefpis_bal; + } + } + + function lastTimeYieldApplicable() public view returns (uint256) { + return Math.min(block.timestamp, periodFinish); + } + + function yieldPerVeFPIS() public view returns (uint256) { + if (totalVeFPISSupplyStored == 0) { + return yieldPerVeFPISStored; + } else { + return ( + yieldPerVeFPISStored.add( + lastTimeYieldApplicable() + .sub(lastUpdateTime) + .mul(yieldRate) + .mul(1e18) + .div(totalVeFPISSupplyStored) + ) + ); + } + } + + function earned(address account) public view returns (uint256) { + // Uninitialized users should not earn anything yet + if (!userIsInitialized[account]) return 0; + + // Get eligible veFPIS balances + (uint256 eligible_current_vefpis, uint256 ending_timestamp) = eligibleCurrentVeFPIS(account); + + // If your veFPIS is unlocked + uint256 eligible_time_fraction = PRICE_PRECISION; + if (eligible_current_vefpis == 0){ + // And you already claimed after expiration + if (lastRewardClaimTime[account] >= ending_timestamp) { + // You get NOTHING. You LOSE. Good DAY ser! + return 0; + } + // You haven't claimed yet + else { + // Slow rewards decay + uint256 eligible_time = (ending_timestamp).sub(lastRewardClaimTime[account]); + uint256 total_time = (block.timestamp).sub(lastRewardClaimTime[account]); + eligible_time_fraction = PRICE_PRECISION.mul(eligible_time).div(total_time); + } + } + + // If the amount of veFPIS increased, only pay off based on the old balance to prevent people from staking little, + // waiting, staking a lot, then claiming. + // Otherwise, take the midpoint + uint256 vefpis_balance_to_use; + { + uint256 old_vefpis_balance = userVeFPISCheckpointed[account]; + if (eligible_current_vefpis > old_vefpis_balance){ + vefpis_balance_to_use = old_vefpis_balance; + } + else if (eligible_current_vefpis == 0) { + // Will get multiplied by eligible_time_fraction anyways. + vefpis_balance_to_use = old_vefpis_balance.add(uint256(uint128(veFPIS.locked(account).amount))).div(2); + } + else { + // Average the two veFPIS balances + vefpis_balance_to_use = ((eligible_current_vefpis).add(old_vefpis_balance)).div(2); + } + } + + return ( + vefpis_balance_to_use + .mul(yieldPerVeFPIS().sub(userYieldPerTokenPaid[account])) + .mul(eligible_time_fraction) + .div(1e18 * PRICE_PRECISION) + .add(yields[account]) + ); + } + + function getYieldForDuration() external view returns (uint256) { + return (yieldRate.mul(yieldDuration)); + } + + /* ========== MUTATIVE FUNCTIONS ========== */ + + function _checkpointUser(address account) internal { + // Need to retro-adjust some things if the period hasn't been renewed, then start a new one + sync(); + + // Calculate the earnings first + _syncEarned(account); + + // Get the old and the new veFPIS balances + uint256 old_vefpis_balance = userVeFPISCheckpointed[account]; + uint256 new_vefpis_balance = veFPIS.balanceOf(account); + + // Update the user's stored veFPIS balance + userVeFPISCheckpointed[account] = new_vefpis_balance; + + // Update the user's stored ending timestamp + IveFPIS.LockedBalance memory curr_locked_bal_pack = veFPIS.locked(account); + userVeFPISEndpointCheckpointed[account] = curr_locked_bal_pack.end; + + // Update the total amount participating + if (new_vefpis_balance >= old_vefpis_balance) { + uint256 weight_diff = new_vefpis_balance.sub(old_vefpis_balance); + totalVeFPISParticipating = totalVeFPISParticipating.add(weight_diff); + } else { + uint256 weight_diff = old_vefpis_balance.sub(new_vefpis_balance); + totalVeFPISParticipating = totalVeFPISParticipating.sub(weight_diff); + } + + // Mark the user as initialized + if (!userIsInitialized[account]) { + userIsInitialized[account] = true; + lastRewardClaimTime[account] = block.timestamp; + } + } + + function _syncEarned(address account) internal { + if (account != address(0)) { + uint256 earned0 = earned(account); + yields[account] = earned0; + userYieldPerTokenPaid[account] = yieldPerVeFPISStored; + } + } + + // Anyone can checkpoint another user + function checkpointOtherUser(address user_addr) external { + _checkpointUser(user_addr); + } + + // Checkpoints the user + function checkpoint() external { + _checkpointUser(msg.sender); + } + + function getYield() external nonReentrant notYieldCollectionPaused checkpointUser(msg.sender) returns (uint256 yield0) { + require(greylist[msg.sender] == false, "Address has been greylisted"); + + yield0 = yields[msg.sender]; + if (yield0 > 0) { + yields[msg.sender] = 0; + TransferHelper.safeTransfer( + emitted_token_address, + msg.sender, + yield0 + ); + emit YieldCollected(msg.sender, yield0, emitted_token_address); + } + + lastRewardClaimTime[msg.sender] = block.timestamp; + } + + + function sync() public { + // Update the total veFPIS supply + yieldPerVeFPISStored = yieldPerVeFPIS(); + totalVeFPISSupplyStored = veFPIS.totalSupply(); + lastUpdateTime = lastTimeYieldApplicable(); + } + + function notifyRewardAmount(uint256 amount) external { + // Only whitelisted addresses can notify rewards + require(reward_notifiers[msg.sender], "Sender not whitelisted"); + + // Handle the transfer of emission tokens via `transferFrom` to reduce the number + // of transactions required and ensure correctness of the smission amount + emittedToken.safeTransferFrom(msg.sender, address(this), amount); + + // Update some values beforehand + sync(); + + // Update the new yieldRate + if (block.timestamp >= periodFinish) { + yieldRate = amount.div(yieldDuration); + } else { + uint256 remaining = periodFinish.sub(block.timestamp); + uint256 leftover = remaining.mul(yieldRate); + yieldRate = amount.add(leftover).div(yieldDuration); + } + + // Update duration-related info + lastUpdateTime = block.timestamp; + periodFinish = block.timestamp.add(yieldDuration); + + emit RewardAdded(amount, yieldRate); + } + + /* ========== RESTRICTED FUNCTIONS ========== */ + + // Added to support recovering LP Yield and other mistaken tokens from other systems to be distributed to holders + function recoverERC20(address tokenAddress, uint256 tokenAmount) external onlyByOwnGov { + // Only the owner address can ever receive the recovery withdrawal + TransferHelper.safeTransfer(tokenAddress, owner, tokenAmount); + emit RecoveredERC20(tokenAddress, tokenAmount); + } + + function setYieldDuration(uint256 _yieldDuration) external onlyByOwnGov { + require( periodFinish == 0 || block.timestamp > periodFinish, "Previous yield period must be complete before changing the duration for the new period"); + yieldDuration = _yieldDuration; + emit YieldDurationUpdated(yieldDuration); + } + + function greylistAddress(address _address) external onlyByOwnGov { + greylist[_address] = !(greylist[_address]); + } + + function toggleRewardNotifier(address notifier_addr) external onlyByOwnGov { + reward_notifiers[notifier_addr] = !reward_notifiers[notifier_addr]; + } + + function setPauses(bool _yieldCollectionPaused) external onlyByOwnGov { + yieldCollectionPaused = _yieldCollectionPaused; + } + + function setYieldRate(uint256 _new_rate0, bool sync_too) external onlyByOwnGov { + yieldRate = _new_rate0; + + if (sync_too) { + sync(); + } + } + + function setTimelock(address _new_timelock) external onlyByOwnGov { + timelock_address = _new_timelock; + } + + /* ========== EVENTS ========== */ + + event RewardAdded(uint256 reward, uint256 yieldRate); + event OldYieldCollected(address indexed user, uint256 yield, address token_address); + event YieldCollected(address indexed user, uint256 yield, address token_address); + event YieldDurationUpdated(uint256 newDuration); + event RecoveredERC20(address token, uint256 amount); + event YieldPeriodRenewed(address token, uint256 yieldRate); + event DefaultInitialization(); + + /* ========== A CHICKEN ========== */ + // + // ,~. + // ,-'__ `-, + // {,-' `. } ,') + // ,( a ) `-.__ ,',')~, + // <=.) ( `-.__,==' ' ' '} + // ( ) /) + // `-'\ , ) + // | \ `~. / + // \ `._ \ / + // \ `._____,' ,' + // `-. ,' + // `-._ _,-' + // 77jj' + // //_|| + // __//--'/` + // ,--'/` ' + // + // [hjw] https://textart.io/art/vw6Sa3iwqIRGkZsN1BC2vweF/chicken +} diff --git a/src/hardhat/test/__ARBITRUM/FraxCrossChainFarmV2-Tests.js b/src/hardhat/test/__ARBITRUM/FraxCrossChainFarmV2-Tests.js new file mode 100644 index 00000000..50e751d0 --- /dev/null +++ b/src/hardhat/test/__ARBITRUM/FraxCrossChainFarmV2-Tests.js @@ -0,0 +1,901 @@ +const path = require('path'); +const envPath = path.join(__dirname, '../../.env'); +require('dotenv').config({ path: envPath }); + +const BigNumber = require('bignumber.js'); +const util = require('util'); +const chalk = require('chalk'); +const Contract = require('web3-eth-contract'); +const { expectRevert, time } = require('@openzeppelin/test-helpers'); + +const constants = require(path.join(__dirname, '../../../../dist/types/constants')); +const utilities = require(path.join(__dirname, '../../../../dist/misc/utilities')); + +// Set provider for all later instances to use +Contract.setProvider('http://127.0.0.1:7545'); + +global.artifacts = artifacts; +global.web3 = web3; + +const hre = require("hardhat"); + +// FRAX core +const CrossChainCanonicalFRAX = artifacts.require("ERC20/__CROSSCHAIN/CrossChainCanonicalFRAX"); +const CrossChainCanonicalFXS = artifacts.require("ERC20/__CROSSCHAIN/CrossChainCanonicalFXS"); +const ERC20 = artifacts.require("contracts/ERC20/ERC20.sol:ERC20"); + +// LP Pairs +const I2pool = artifacts.require("Misc_AMOs/curve/I2pool"); +const ISaddleLPToken = artifacts.require("Misc_AMOs/saddle/ISaddleLPToken"); + +// Staking contracts +const FraxCCFarmV2_ArbiCurveVSTFRAX = artifacts.require("Staking/Variants/FraxCCFarmV2_ArbiCurveVSTFRAX"); +const FraxCCFarmV2_SaddleArbUSDv2 = artifacts.require("Staking/Variants/FraxCCFarmV2_SaddleArbUSDv2"); + +const BIG6 = new BigNumber("1e6"); +const BIG18 = new BigNumber("1e18"); +const TIMELOCK_DELAY = 86400 * 2; // 2 days +const DUMP_ADDRESS = "0x6666666666666666666666666666666666666666"; +const METAMASK_ADDRESS = "0x6666666666666666666666666666666666666666"; + +const REWARDS_DURATION = 7 * 86400; // 7 days + +contract('FraxCrossChainFarmV2-Tests', async (accounts) => { + let CONTRACT_ADDRESSES = constants.CONTRACT_ADDRESSES; + let CHAIN_ADDRESSES = CONTRACT_ADDRESSES.arbitrum; + + // Constants + let ORIGINAL_FRAX_ONE_ADDRESS; + let COLLATERAL_FRAX_AND_FXS_OWNER; + let ORACLE_ADMIN; + let POOL_CREATOR; + let TIMELOCK_ADMIN; + let GOVERNOR_GUARDIAN_ADDRESS; + let STAKING_OWNER; + let STAKING_REWARDS_DISTRIBUTOR; + let INVESTOR_CUSTODIAN_ADDRESS; + let MIGRATOR_ADDRESS; + const ADDRESS_WITH_FXS = '0xbCa9a9Aab13a68d311160D4f997E3D783Da865Fb'; + const ADDRESS_WITH_REW1_TKN = '0xbCa9a9Aab13a68d311160D4f997E3D783Da865Fb'; + const ADDRESS_WITH_LP_TOKENS = '0xbCa9a9Aab13a68d311160D4f997E3D783Da865Fb'; + + // Initialize core contract instances + let canFRAX_instance; + let canFXS_instance; + + // Initialize reward token instance + let rew1_tkn_instance; + + // Initialize pair contracts + let lp_tkn_instance; + + // Initialize staking instances + let staking_instance; + + beforeEach(async() => { + + await hre.network.provider.request({ + method: "hardhat_impersonateAccount", + params: [process.env.FRAX_ONE_ADDRESS] + }); + + // Constants + ORIGINAL_FRAX_ONE_ADDRESS = process.env.FRAX_ONE_ADDRESS; + DEPLOYER_ADDRESS = accounts[0]; + COLLATERAL_FRAX_AND_FXS_OWNER = accounts[1]; + ORACLE_ADMIN = accounts[2]; + POOL_CREATOR = accounts[3]; + TIMELOCK_ADMIN = accounts[4]; + GOVERNOR_GUARDIAN_ADDRESS = accounts[5]; + STAKING_OWNER = accounts[6]; + STAKING_REWARDS_DISTRIBUTOR = accounts[7]; + INVESTOR_CUSTODIAN_ADDRESS = accounts[8]; + MIGRATOR_ADDRESS = accounts[10]; + + // Fill core contract instances + canFRAX_instance = await CrossChainCanonicalFRAX.deployed(); + canFXS_instance = await CrossChainCanonicalFXS.deployed(); + + // Get instances of the Curve pair + lp_tkn_instance = await I2pool.at(CHAIN_ADDRESSES.pair_tokens["Curve VSTFRAX-f"]); + // lp_tkn_instance = await ISaddleLPToken.at(CHAIN_ADDRESSES.bearer_tokens.saddleArbUSDv2); + + // Fill the staking rewards instances + staking_instance = await FraxCCFarmV2_ArbiCurveVSTFRAX.deployed(); + + // Fill reward token instance + const rew1_address = await staking_instance.rewardsToken1.call(); + rew1_tkn_instance = await ERC20.at(rew1_address); + }); + + afterEach(async() => { + await hre.network.provider.request({ + method: "hardhat_stopImpersonatingAccount", + params: [process.env.FRAX_ONE_ADDRESS] + }); + }) + + + it('Initialization related', async () => { + console.log("=========================Initialization=========================") + + console.log("------------------------------------------------"); + console.log("Seed the staking contract with FXS and give COLLATERAL_FRAX_AND_FXS_OWNER some FXS"); + await hre.network.provider.request({ + method: "hardhat_impersonateAccount", + params: [ADDRESS_WITH_FXS] + }); + + await canFXS_instance.transfer(staking_instance.address, new BigNumber("100e18"), { from: ADDRESS_WITH_FXS }); + await canFXS_instance.transfer(COLLATERAL_FRAX_AND_FXS_OWNER, new BigNumber("1000e18"), { from: ADDRESS_WITH_FXS }); + + await hre.network.provider.request({ + method: "hardhat_stopImpersonatingAccount", + params: [ADDRESS_WITH_FXS] + }); + + console.log("------------------------------------------------"); + console.log("Seed the staking contract with REW1 tokens"); + await hre.network.provider.request({ + method: "hardhat_impersonateAccount", + params: [ADDRESS_WITH_REW1_TKN] + }); + + await rew1_tkn_instance.transfer(staking_instance.address, new BigNumber("10e18"), { from: ADDRESS_WITH_REW1_TKN }); + + await hre.network.provider.request({ + method: "hardhat_stopImpersonatingAccount", + params: [ADDRESS_WITH_REW1_TKN] + }); + + console.log("------------------------------------------------"); + console.log("Give LPs to test users"); + await hre.network.provider.request({ + method: "hardhat_impersonateAccount", + params: [ADDRESS_WITH_LP_TOKENS] + }); + + await lp_tkn_instance.transfer(accounts[1], new BigNumber("30e18"), { from: ADDRESS_WITH_LP_TOKENS }); + await lp_tkn_instance.transfer(accounts[9], new BigNumber("30e18"), { from: ADDRESS_WITH_LP_TOKENS }); + + await hre.network.provider.request({ + method: "hardhat_stopImpersonatingAccount", + params: [ADDRESS_WITH_LP_TOKENS] + }); + + + // Add a migrator address + await staking_instance.addMigrator(MIGRATOR_ADDRESS, { from: STAKING_OWNER }); + }); + + it('Locked stakes', async () => { + console.log(chalk.hex("#ff8b3d").bold("====================================================================")); + console.log(chalk.hex("#ff8b3d").bold("TRY TESTS WITH LOCKED STAKES.")); + console.log(chalk.hex("#ff8b3d").bold("====================================================================")); + + // Get FXS balances before everything starts + const fxs_bal_acc_1_time0 = new BigNumber(await canFXS_instance.balanceOf(COLLATERAL_FRAX_AND_FXS_OWNER)).div(BIG18).toNumber(); + const fxs_bal_acc_9_time0 = new BigNumber(await canFXS_instance.balanceOf(accounts[9])).div(BIG18).toNumber(); + + // Print balances + console.log("Farm FXS balance:", new BigNumber(await canFXS_instance.balanceOf(staking_instance.address)).div(BIG18).toNumber()); + console.log("Farm FXS owed:", new BigNumber(await staking_instance.ttlRew0Owed()).div(BIG18).toNumber()); + console.log("Farm FXS paid:", new BigNumber(await staking_instance.ttlRew0Paid()).div(BIG18).toNumber()); + console.log("Farm REW1 balance:", new BigNumber(await rew1_tkn_instance.balanceOf(staking_instance.address)).div(BIG18).toNumber()); + console.log("Farm REW1 owed:", new BigNumber(await staking_instance.ttlRew1Owed()).div(BIG18).toNumber()); + console.log("Farm REW1 paid:", new BigNumber(await staking_instance.ttlRew1Paid()).div(BIG18).toNumber()); + + await utilities.printCalcCurCombinedWeight(staking_instance, COLLATERAL_FRAX_AND_FXS_OWNER); + await utilities.printCalcCurCombinedWeight(staking_instance, accounts[9]); + + // Need to approve first so the staking can use transfer + const uni_pool_locked_1 = new BigNumber("75e17"); + const uni_pool_locked_1_sum = new BigNumber("10e18"); + const uni_pool_locked_9 = new BigNumber("25e17"); + await lp_tkn_instance.approve(staking_instance.address, uni_pool_locked_1_sum, { from: COLLATERAL_FRAX_AND_FXS_OWNER }); + await lp_tkn_instance.approve(staking_instance.address, uni_pool_locked_9, { from: accounts[9] }); + + // // Note the FRAX amounts before + // const frax_before_1_locked = new BigNumber(await canFRAX_instance.balanceOf.call(COLLATERAL_FRAX_AND_FXS_OWNER)).div(BIG18); + // const frax_before_9_locked = new BigNumber(await canFRAX_instance.balanceOf.call(accounts[9])).div(BIG18); + // console.log("FRAX_USDC Uniswap Liquidity Tokens BEFORE [1]: ", frax_before_1_locked.toString()); + // console.log("FRAX_USDC Uniswap Liquidity Tokens BEFORE [9]: ", frax_before_9_locked.toString()); + + console.log("Try to stake before initialization [SHOULD FAIL]"); + await expectRevert( + staking_instance.stakeLocked(uni_pool_locked_1, 6.95 * 86400, { from: COLLATERAL_FRAX_AND_FXS_OWNER }), + "Contract not initialized" + ); + + console.log("Initialize Staking Contract"); + await staking_instance.initializeDefault({ from: STAKING_OWNER }); + + // Stake Locked + // account[1] + await staking_instance.stakeLocked(uni_pool_locked_1, 6.95 * 86400, { from: COLLATERAL_FRAX_AND_FXS_OWNER }); // 7 days + await staking_instance.stakeLocked(new BigNumber ("25e17"), 548 * 86400, { from: COLLATERAL_FRAX_AND_FXS_OWNER }); // 270 days + + // account[9] + await staking_instance.stakeLocked(uni_pool_locked_9, 27.95 * 86400, { from: accounts[9] }); + await time.advanceBlock(); + + // Show the stake structs + const locked_stake_structs_1_0 = await staking_instance.lockedStakesOf.call(COLLATERAL_FRAX_AND_FXS_OWNER); + const locked_stake_structs_9_0 = await staking_instance.lockedStakesOf.call(accounts[9]); + console.log("LOCKED STAKES [1]: ", locked_stake_structs_1_0); + console.log("LOCKED STAKES [9]: ", locked_stake_structs_9_0); + + // Note the UNI POOL and FXS amount after staking + const regular_balance_1 = new BigNumber(await staking_instance.lockedLiquidityOf.call(COLLATERAL_FRAX_AND_FXS_OWNER)).div(BIG18); + const boosted_balance_1 = new BigNumber(await staking_instance.combinedWeightOf.call(COLLATERAL_FRAX_AND_FXS_OWNER)).div(BIG18); + const locked_balance_1 = new BigNumber(await staking_instance.lockedLiquidityOf.call(COLLATERAL_FRAX_AND_FXS_OWNER)).div(BIG18); + const regular_balance_9 = new BigNumber(await staking_instance.lockedLiquidityOf.call(accounts[9])).div(BIG18); + const boosted_balance_9 = new BigNumber(await staking_instance.combinedWeightOf.call(accounts[9])).div(BIG18); + const locked_balance_9 = new BigNumber(await staking_instance.lockedLiquidityOf.call(accounts[9])).div(BIG18); + console.log("LOCKED LIQUIDITY [1]: ", regular_balance_1.toString()); + console.log("COMBINED WEIGHT [1]: ", boosted_balance_1.toString()); + console.log("---- LOCKED [1]: ", locked_balance_1.toString()); + console.log("LOCKED LIQUIDITY [9]: ", regular_balance_9.toString()); + console.log("COMBINED WEIGHT [9]: ", boosted_balance_9.toString()); + console.log("---- LOCKED [9]: ", locked_balance_9.toString()); + + console.log("TRY AN EARLY WITHDRAWAL (SHOULD FAIL)"); + await expectRevert.unspecified(staking_instance.withdrawLocked(locked_stake_structs_1_0[0].kek_id, { from: COLLATERAL_FRAX_AND_FXS_OWNER })); + await expectRevert.unspecified(staking_instance.withdrawLocked(locked_stake_structs_9_0[0].kek_id, { from: accounts[9] })); + await time.advanceBlock(); + + await utilities.printCalcCurCombinedWeight(staking_instance, COLLATERAL_FRAX_AND_FXS_OWNER); + await utilities.printCalcCurCombinedWeight(staking_instance, accounts[9]); + + const user_min_vefxs_for_max_boost_1_0 = new BigNumber(await staking_instance.minVeFXSForMaxBoost.call(COLLATERAL_FRAX_AND_FXS_OWNER)).div(BIG18); + const user_min_vefxs_for_max_boost_9_0 = new BigNumber(await staking_instance.minVeFXSForMaxBoost.call(accounts[9])).div(BIG18); + console.log("user_min_vefxs_for_max_boost_1_0: ", user_min_vefxs_for_max_boost_1_0.toString()); + console.log("user_min_vefxs_for_max_boost_9_0: ", user_min_vefxs_for_max_boost_9_0.toString()); + + const _total_liquidity_locked_0 = new BigNumber(await staking_instance.totalLiquidityLocked.call()).div(BIG18); + const _total_combined_weight_0 = new BigNumber(await staking_instance.totalCombinedWeight.call()).div(BIG18); + const frax_per_lp_token_0 = new BigNumber(await staking_instance.fraxPerLPToken.call()).div(BIG18); + console.log("_total_liquidity_locked GLOBAL: ", _total_liquidity_locked_0.toString()); + console.log("_total_combined_weight GLOBAL: ", _total_combined_weight_0.toString()); + console.log("frax_per_lp_token_0 GLOBAL: ", frax_per_lp_token_0.toString()); + + + console.log(chalk.hex("#ff8b3d")("====================================================================")); + console.log(chalk.hex("#ff8b3d")("MID-WEEK-SYNC AND [9] CLAIMS")); + console.log(chalk.hex("#ff8b3d")("====================================================================")); + await time.increase(2 * 86400); + await time.advanceBlock(); + + // Sync + await staking_instance.sync({ from: COLLATERAL_FRAX_AND_FXS_OWNER }); + + // Print balances + console.log(chalk.yellow("--- Before claim ---")); + console.log("Farm FXS balance:", new BigNumber(await canFXS_instance.balanceOf(staking_instance.address)).div(BIG18).toNumber()); + console.log("Farm FXS owed:", new BigNumber(await staking_instance.ttlRew0Owed()).div(BIG18).toNumber()); + console.log("Farm FXS paid:", new BigNumber(await staking_instance.ttlRew0Paid()).div(BIG18).toNumber()); + console.log("Farm REW1 balance:", new BigNumber(await rew1_tkn_instance.balanceOf(staking_instance.address)).div(BIG18).toNumber()); + console.log("Farm REW1 owed:", new BigNumber(await staking_instance.ttlRew1Owed()).div(BIG18).toNumber()); + console.log("Farm REW1 paid:", new BigNumber(await staking_instance.ttlRew1Paid()).div(BIG18).toNumber()); + + // [9] claims + console.log(chalk.yellow("--- Claim ---")); + const fxs_bal_9_mid0_before = new BigNumber(await canFXS_instance.balanceOf(accounts[9])); + const token1_bal_9_mid0_before = new BigNumber(await rew1_tkn_instance.balanceOf(accounts[9])); + await staking_instance.getReward({ from: accounts[9] }); + const fxs_bal_9_mid0_after = new BigNumber(await canFXS_instance.balanceOf(accounts[9])); + const token1_bal_9_mid0_after = new BigNumber(await rew1_tkn_instance.balanceOf(accounts[9])); + const staking_earned_9_mid0_fxs = (fxs_bal_9_mid0_after).minus(fxs_bal_9_mid0_before); + const staking_earned_9_mid0_token1 = (token1_bal_9_mid0_after).minus(token1_bal_9_mid0_before); + console.log("accounts[9] mid-week part 0 earnings [FXS]: ", (staking_earned_9_mid0_fxs).div(BIG18).toNumber()); + console.log("accounts[9] mid-week part 0 earnings [REW1]: ", staking_earned_9_mid0_token1.div(BIG18).toNumber()); + + // Print balances + console.log(chalk.yellow("--- After claim ---")); + console.log("Farm FXS balance:", new BigNumber(await canFXS_instance.balanceOf(staking_instance.address)).div(BIG18).toNumber()); + console.log("Farm FXS owed:", new BigNumber(await staking_instance.ttlRew0Owed()).div(BIG18).toNumber()); + console.log("Farm FXS paid:", new BigNumber(await staking_instance.ttlRew0Paid()).div(BIG18).toNumber()); + console.log("Farm REW1 balance:", new BigNumber(await rew1_tkn_instance.balanceOf(staking_instance.address)).div(BIG18).toNumber()); + console.log("Farm REW1 owed:", new BigNumber(await staking_instance.ttlRew1Owed()).div(BIG18).toNumber()); + console.log("Farm REW1 paid:", new BigNumber(await staking_instance.ttlRew1Paid()).div(BIG18).toNumber()); + + console.log(chalk.hex("#ff8b3d")("====================================================================")); + console.log(chalk.hex("#ff8b3d")("MID-WEEK-SYNC AGAIN AND [9] CLAIMS AGAIN")); + console.log(chalk.hex("#ff8b3d")("====================================================================")); + await time.increase(2 * 86400); + await time.advanceBlock(); + + // Sync + await staking_instance.sync({ from: COLLATERAL_FRAX_AND_FXS_OWNER }); + + // Print balances + console.log(chalk.yellow("--- Before claim ---")); + console.log("Farm FXS balance:", new BigNumber(await canFXS_instance.balanceOf(staking_instance.address)).div(BIG18).toNumber()); + console.log("Farm FXS owed:", new BigNumber(await staking_instance.ttlRew0Owed()).div(BIG18).toNumber()); + console.log("Farm FXS paid:", new BigNumber(await staking_instance.ttlRew0Paid()).div(BIG18).toNumber()); + console.log("Farm REW1 balance:", new BigNumber(await rew1_tkn_instance.balanceOf(staking_instance.address)).div(BIG18).toNumber()); + console.log("Farm REW1 owed:", new BigNumber(await staking_instance.ttlRew1Owed()).div(BIG18).toNumber()); + console.log("Farm REW1 paid:", new BigNumber(await staking_instance.ttlRew1Paid()).div(BIG18).toNumber()); + + // [9] claims + console.log(chalk.yellow("--- Claim ---")); + const fxs_bal_9_mid1_before = new BigNumber(await canFXS_instance.balanceOf(accounts[9])); + const token1_bal_9_mid1_before = new BigNumber(await rew1_tkn_instance.balanceOf(accounts[9])); + await staking_instance.getReward({ from: accounts[9] }); + const fxs_bal_9_mid1_after = new BigNumber(await canFXS_instance.balanceOf(accounts[9])); + const token1_bal_9_mid1_after = new BigNumber(await rew1_tkn_instance.balanceOf(accounts[9])); + const staking_earned_9_mid1_fxs = (fxs_bal_9_mid1_after).minus(fxs_bal_9_mid1_before); + const staking_earned_9_mid1_token1 = (token1_bal_9_mid1_after).minus(token1_bal_9_mid1_before); + console.log("accounts[9] mid-week part 1 earnings [FXS]: ", (staking_earned_9_mid1_fxs).div(BIG18).toNumber()); + console.log("accounts[9] mid-week part 1 earnings [REW1]: ", staking_earned_9_mid1_token1.div(BIG18).toNumber()); + + // Print balances + console.log(chalk.yellow("--- After claim ---")); + console.log("Farm FXS balance:", new BigNumber(await canFXS_instance.balanceOf(staking_instance.address)).div(BIG18).toNumber()); + console.log("Farm FXS owed:", new BigNumber(await staking_instance.ttlRew0Owed()).div(BIG18).toNumber()); + console.log("Farm FXS paid:", new BigNumber(await staking_instance.ttlRew0Paid()).div(BIG18).toNumber()); + console.log("Farm REW1 balance:", new BigNumber(await rew1_tkn_instance.balanceOf(staking_instance.address)).div(BIG18).toNumber()); + console.log("Farm REW1 owed:", new BigNumber(await staking_instance.ttlRew1Owed()).div(BIG18).toNumber()); + console.log("Farm REW1 paid:", new BigNumber(await staking_instance.ttlRew1Paid()).div(BIG18).toNumber()); + + + console.log(chalk.hex("#ff8b3d")("====================================================================")); + console.log(chalk.hex("#ff8b3d")("WAIT UNTIL THE END OF THE 1st PERIOD")); + console.log(chalk.hex("#ff8b3d")("====================================================================")); + // Sync beforehand + await staking_instance.sync({ from: COLLATERAL_FRAX_AND_FXS_OWNER }); + + const current_timestamp_0 = (new BigNumber(await time.latest())).toNumber(); + const period_end_0 = await staking_instance.periodFinish.call(); + + const increase_time_0 = (period_end_0 - current_timestamp_0); + console.log("increase_time_0 (days): ", increase_time_0 / 86400); + await time.increase(increase_time_0); + await time.advanceBlock(); + + + // Sync afterwards + await staking_instance.sync({ from: COLLATERAL_FRAX_AND_FXS_OWNER }); + + await utilities.printCalcCurCombinedWeight(staking_instance, COLLATERAL_FRAX_AND_FXS_OWNER); + await utilities.printCalcCurCombinedWeight(staking_instance, accounts[9]); + + // Note the UNI POOL and FXS amount after staking + const regular_balance_00_1 = new BigNumber(await staking_instance.lockedLiquidityOf.call(COLLATERAL_FRAX_AND_FXS_OWNER)).div(BIG18); + const boosted_balance_00_1 = new BigNumber(await staking_instance.combinedWeightOf.call(COLLATERAL_FRAX_AND_FXS_OWNER)).div(BIG18); + const locked_balance_00_1 = new BigNumber(await staking_instance.lockedLiquidityOf.call(COLLATERAL_FRAX_AND_FXS_OWNER)).div(BIG18); + const regular_balance_00_9 = new BigNumber(await staking_instance.lockedLiquidityOf.call(accounts[9])).div(BIG18); + const boosted_balance_00_9 = new BigNumber(await staking_instance.combinedWeightOf.call(accounts[9])).div(BIG18); + const locked_balance_00_9 = new BigNumber(await staking_instance.lockedLiquidityOf.call(accounts[9])).div(BIG18); + console.log("LOCKED LIQUIDITY [1]: ", regular_balance_00_1.toString()); + console.log("COMBINED WEIGHT [1]: ", boosted_balance_00_1.toString()); + console.log("---- LOCKED [1]: ", locked_balance_00_1.toString()); + console.log("LOCKED LIQUIDITY [9]: ", regular_balance_00_9.toString()); + console.log("COMBINED WEIGHT [9]: ", boosted_balance_00_9.toString()); + console.log("---- LOCKED [9]: ", locked_balance_00_9.toString()); + + // Print balances + console.log(chalk.yellow("--- Before claim ---")); + console.log("Farm FXS balance:", new BigNumber(await canFXS_instance.balanceOf(staking_instance.address)).div(BIG18).toNumber()); + console.log("Farm FXS owed:", new BigNumber(await staking_instance.ttlRew0Owed()).div(BIG18).toNumber()); + console.log("Farm FXS paid:", new BigNumber(await staking_instance.ttlRew0Paid()).div(BIG18).toNumber()); + console.log("Farm REW1 balance:", new BigNumber(await rew1_tkn_instance.balanceOf(staking_instance.address)).div(BIG18).toNumber()); + console.log("Farm REW1 owed:", new BigNumber(await staking_instance.ttlRew1Owed()).div(BIG18).toNumber()); + console.log("Farm REW1 paid:", new BigNumber(await staking_instance.ttlRew1Paid()).div(BIG18).toNumber()); + + const user_min_vefxs_for_max_boost_1_1 = new BigNumber(await staking_instance.minVeFXSForMaxBoost.call(COLLATERAL_FRAX_AND_FXS_OWNER)).div(BIG18); + const user_min_vefxs_for_max_boost_9_1 = new BigNumber(await staking_instance.minVeFXSForMaxBoost.call(accounts[9])).div(BIG18); + console.log("user_min_vefxs_for_max_boost_1_1: ", user_min_vefxs_for_max_boost_1_1.toString()); + console.log("user_min_vefxs_for_max_boost_9_1: ", user_min_vefxs_for_max_boost_9_1.toString()); + + // Make sure there is a valid period for the contract and sync it + await staking_instance.sync({ from: STAKING_OWNER }); + + const staking_earned_1 = await staking_instance.earned.call(COLLATERAL_FRAX_AND_FXS_OWNER); + const staking_earned_1_fxs = new BigNumber(staking_earned_1[0]).div(BIG18); + const staking_earned_1_token1 = new BigNumber(staking_earned_1[1]).div(BIG18); + console.log("accounts[1] earnings after 1 week [FXS]: ", staking_earned_1_fxs.toString()); + console.log("accounts[1] earnings after 1 week [REW1]: ", staking_earned_1_token1.toString()); + + const staking_earned_9 = await staking_instance.earned.call(accounts[9]); + const staking_earned_9_fxs = (new BigNumber(staking_earned_9[0])).plus(staking_earned_9_mid0_fxs).plus(staking_earned_9_mid1_fxs).div(BIG18); + const staking_earned_9_token1 = (new BigNumber(staking_earned_9[1])).plus(staking_earned_9_mid0_token1).plus(staking_earned_9_mid1_token1).div(BIG18); + console.log("accounts[9] earnings after 1 week [FXS]: ", staking_earned_9_fxs.toString()); + console.log("accounts[9] earnings after 1 week [REW1]: ", staking_earned_9_token1.toString()); + + const reward_week_1_fxs = (staking_earned_1_fxs).plus(staking_earned_9_fxs); + const reward_week_1_token1 = (staking_earned_1_token1).plus(staking_earned_9_token1); + const effective_yearly_reward_at_week_1_fxs = reward_week_1_fxs.multipliedBy(52.1429); + const effective_yearly_reward_at_week_1_token1 = reward_week_1_token1.multipliedBy(52.1429); + console.log("Effective weekly reward at week 1 [FXS]: ", reward_week_1_fxs.toString()); + console.log("Effective weekly reward at week 1 [REW1]: ", reward_week_1_token1.toString()); + console.log("Effective yearly reward at week 1 [FXS]: ", effective_yearly_reward_at_week_1_fxs.toString()); + console.log("Effective yearly reward at week 1 [REW1]: ", effective_yearly_reward_at_week_1_token1.toString()); + + const duration_reward_1 = await staking_instance.getRewardForDuration.call(); + const duration_reward_1_fxs = new BigNumber(duration_reward_1[0]).div(BIG18); + const duration_reward_1_token1 = new BigNumber(duration_reward_1[1]).div(BIG18); + console.log("Expected weekly reward [FXS]: ", duration_reward_1_fxs.toString()); + console.log("Expected weekly reward [REW1]: ", duration_reward_1_token1.toString()); + console.log("Expected yearly reward [FXS]: ", duration_reward_1_fxs.multipliedBy(52.1429).toString()); + console.log("Expected yearly reward [REW1]: ", duration_reward_1_token1.multipliedBy(52.1429).toString()); + + console.log("TRY WITHDRAWING AGAIN"); + console.log("[1] SHOULD SUCCEED, [9] SHOULD FAIL"); + await staking_instance.withdrawLocked(locked_stake_structs_1_0[0].kek_id, { from: COLLATERAL_FRAX_AND_FXS_OWNER }); + await expectRevert.unspecified(staking_instance.withdrawLocked(locked_stake_structs_9_0[0].kek_id, { from: accounts[9] })); + + // Claim [9] + await staking_instance.getReward({ from: accounts[9] }); + + // Print balances + console.log(chalk.yellow("--- After claim ---")); + console.log("Farm FXS balance:", new BigNumber(await canFXS_instance.balanceOf(staking_instance.address)).div(BIG18).toNumber()); + console.log("Farm FXS owed:", new BigNumber(await staking_instance.ttlRew0Owed()).div(BIG18).toNumber()); + console.log("Farm FXS paid:", new BigNumber(await staking_instance.ttlRew0Paid()).div(BIG18).toNumber()); + console.log("Farm REW1 balance:", new BigNumber(await rew1_tkn_instance.balanceOf(staking_instance.address)).div(BIG18).toNumber()); + console.log("Farm REW1 owed:", new BigNumber(await staking_instance.ttlRew1Owed()).div(BIG18).toNumber()); + console.log("Farm REW1 paid:", new BigNumber(await staking_instance.ttlRew1Paid()).div(BIG18).toNumber()); + + const fxs_bal_acc_1_time1 = new BigNumber(await canFXS_instance.balanceOf(COLLATERAL_FRAX_AND_FXS_OWNER)).div(BIG18).toNumber(); + const fxs_bal_acc_9_time1 = new BigNumber(await canFXS_instance.balanceOf(accounts[9])).div(BIG18).toNumber(); + console.log(chalk.green("accounts[1] FXS balance change:", fxs_bal_acc_1_time1 - fxs_bal_acc_1_time0)); + console.log(chalk.green("accounts[9] FXS balance change:", fxs_bal_acc_9_time1 - fxs_bal_acc_9_time0)); + console.log(chalk.green.bold("Total FXS balance change:", (fxs_bal_acc_1_time1 + fxs_bal_acc_9_time1) - (fxs_bal_acc_1_time0 + fxs_bal_acc_9_time0))); + + + console.log(chalk.hex("#ff8b3d")("====================================================================")); + console.log(chalk.hex("#ff8b3d")("ADVANCING 28 DAYS")); + console.log(chalk.hex("#ff8b3d")("====================================================================")); + // Sync beforehand + await staking_instance.sync({ from: COLLATERAL_FRAX_AND_FXS_OWNER }); + + const current_timestamp_1 = (new BigNumber(await time.latest())).toNumber(); + const period_end_1 = await staking_instance.periodFinish.call(); + + const increase_time_1 = (period_end_1 - current_timestamp_1) + ((3 * 7) * 86400); + console.log("increase_time_1 (days): ", increase_time_1 / 86400); + await time.increase(increase_time_1); + await time.advanceBlock(); + + // Sync afterwards + await staking_instance.sync({ from: COLLATERAL_FRAX_AND_FXS_OWNER }); + + await utilities.printCalcCurCombinedWeight(staking_instance, COLLATERAL_FRAX_AND_FXS_OWNER); + await utilities.printCalcCurCombinedWeight(staking_instance, accounts[9]); + + // Print balances + console.log("Farm FXS balance:", new BigNumber(await canFXS_instance.balanceOf(staking_instance.address)).div(BIG18).toNumber()); + console.log("Farm FXS owed:", new BigNumber(await staking_instance.ttlRew0Owed()).div(BIG18).toNumber()); + console.log("Farm FXS paid:", new BigNumber(await staking_instance.ttlRew0Paid()).div(BIG18).toNumber()); + console.log("Farm REW1 balance:", new BigNumber(await rew1_tkn_instance.balanceOf(staking_instance.address)).div(BIG18).toNumber()); + console.log("Farm REW1 owed:", new BigNumber(await staking_instance.ttlRew1Owed()).div(BIG18).toNumber()); + console.log("Farm REW1 paid:", new BigNumber(await staking_instance.ttlRew1Paid()).div(BIG18).toNumber()); + + // Note the UNI POOL and FXS amount after staking + const regular_balance_01_1 = new BigNumber(await staking_instance.lockedLiquidityOf.call(COLLATERAL_FRAX_AND_FXS_OWNER)).div(BIG18); + const boosted_balance_01_1 = new BigNumber(await staking_instance.combinedWeightOf.call(COLLATERAL_FRAX_AND_FXS_OWNER)).div(BIG18); + const locked_balance_01_1 = new BigNumber(await staking_instance.lockedLiquidityOf.call(COLLATERAL_FRAX_AND_FXS_OWNER)).div(BIG18); + const regular_balance_01_9 = new BigNumber(await staking_instance.lockedLiquidityOf.call(accounts[9])).div(BIG18); + const boosted_balance_01_9 = new BigNumber(await staking_instance.combinedWeightOf.call(accounts[9])).div(BIG18); + const locked_balance_01_9 = new BigNumber(await staking_instance.lockedLiquidityOf.call(accounts[9])).div(BIG18); + console.log("LOCKED LIQUIDITY [1]: ", regular_balance_01_1.toString()); + console.log("COMBINED WEIGHT [1]: ", boosted_balance_01_1.toString()); + console.log("---- LOCKED [1]: ", locked_balance_01_1.toString()); + console.log("LOCKED LIQUIDITY [9]: ", regular_balance_01_9.toString()); + console.log("COMBINED WEIGHT [9]: ", boosted_balance_01_9.toString()); + console.log("---- LOCKED [9]: ", locked_balance_01_9.toString()); + + const user_min_vefxs_for_max_boost_1_2 = new BigNumber(await staking_instance.minVeFXSForMaxBoost.call(COLLATERAL_FRAX_AND_FXS_OWNER)).div(BIG18); + const user_min_vefxs_for_max_boost_9_2 = new BigNumber(await staking_instance.minVeFXSForMaxBoost.call(accounts[9])).div(BIG18); + console.log("user_min_vefxs_for_max_boost_1_2: ", user_min_vefxs_for_max_boost_1_2.toString()); + console.log("user_min_vefxs_for_max_boost_9_2: ", user_min_vefxs_for_max_boost_9_2.toString()); + + // Make sure there is a valid period for the contract and sync it + await staking_instance.sync({ from: COLLATERAL_FRAX_AND_FXS_OWNER }); + + const staking_fxs_earned_28_1 = await staking_instance.earned.call(accounts[1]); + const staking_fxs_earned_28_1_fxs = new BigNumber(staking_fxs_earned_28_1[0]).div(BIG18); + const staking_fxs_earned_28_1_token1 = new BigNumber(staking_fxs_earned_28_1[1]).div(BIG18); + console.log("accounts[1] earnings after 5 weeks [FXS]: ", staking_fxs_earned_28_1_fxs.toString()); + console.log("accounts[1] earnings after 5 weeks [REW1]: ", staking_fxs_earned_28_1_token1.toString()); + + const staking_fxs_earned_28_9 = await staking_instance.earned.call(accounts[9]); + const staking_fxs_earned_28_9_fxs = new BigNumber(staking_fxs_earned_28_9[0]).div(BIG18); + const staking_fxs_earned_28_9_token1 = new BigNumber(staking_fxs_earned_28_9[1]).div(BIG18); + console.log("accounts[9] earnings after 5 weeks [FXS]: ", staking_fxs_earned_28_9_fxs.toString()); + console.log("accounts[9] earnings after 5 weeks [REW1]: ", staking_fxs_earned_28_9_token1.toString()); + + const reward_week_5_fxs = (staking_fxs_earned_28_1_fxs).plus(staking_fxs_earned_28_9_fxs); + const reward_week_5_token1 = (staking_fxs_earned_28_1_token1).plus(staking_fxs_earned_28_9_token1); + const effective_yearly_reward_at_week_5_fxs = reward_week_5_fxs.multipliedBy(52.1429 / 4.0); + const effective_yearly_reward_at_week_5_token1 = reward_week_5_token1.multipliedBy(52.1429 / 4.0); // 1 week delay + console.log("Effective weekly reward at week 5 [FXS]: ", reward_week_5_fxs.div(4).toString()); + console.log("Effective weekly reward at week 5 [REW1]: ", reward_week_5_token1.div(4).toString()); // 1 week delay + console.log("Effective yearly reward at week 5 [FXS]: ", effective_yearly_reward_at_week_5_fxs.toString()); + console.log("Effective yearly reward at week 5 [REW1]: ", effective_yearly_reward_at_week_5_token1.toString()); + + const duration_reward_3 = await staking_instance.getRewardForDuration.call(); + const duration_reward_3_fxs = new BigNumber(duration_reward_3[0]).div(BIG18); + const duration_reward_3_token1 = new BigNumber(duration_reward_3[1]).div(BIG18); + console.log("Expected weekly reward [FXS]: ", duration_reward_3_fxs.toString()); + console.log("Expected weekly reward [REW1]: ", duration_reward_3_token1.toString()); + console.log("Expected yearly reward [FXS]: ", duration_reward_3_fxs.multipliedBy(52.1429).toString()); + console.log("Expected yearly reward [REW1]: ", duration_reward_3_token1.multipliedBy(52.1429).toString()); + + console.log(chalk.yellow.bold("====================================================================")); + console.log(chalk.yellow.bold("Add more to a lock")); + + // Print the info for the stake + let add_more_before = await staking_instance.lockedStakes.call(COLLATERAL_FRAX_AND_FXS_OWNER, 1); + console.log("add_more_before: ", utilities.cleanLockedStake(add_more_before)); + + // Add 1 more LP token to the lock + const addl_amt_add = new BigNumber("1e18"); + await lp_tkn_instance.approve(staking_instance.address, addl_amt_add, { from: COLLATERAL_FRAX_AND_FXS_OWNER }); + await staking_instance.lockAdditional(add_more_before.kek_id, addl_amt_add, { from: COLLATERAL_FRAX_AND_FXS_OWNER }); + + // Print the info for the stake + const add_more_after = await staking_instance.lockedStakes.call(COLLATERAL_FRAX_AND_FXS_OWNER, 1); + console.log("add_more_after: ", utilities.cleanLockedStake(add_more_after)); + + // Make sure the liquidity has increased + const add_liq_before = new BigNumber(add_more_before.liquidity); + const add_liq_after = new BigNumber(add_more_after.liquidity); + const add_liq_diff = add_liq_after.minus(add_liq_before); + console.log("Add liq diff: ", add_liq_diff.toString()); + assert(add_liq_after.isGreaterThan(add_liq_before), `Liquidity did not increase`); + + console.log(chalk.hex("#ff8b3d")("====================================================================")); + console.log(chalk.hex("#ff8b3d")("REFILL REWARDS AND SYNC")); + console.log(chalk.hex("#ff8b3d")("====================================================================")); + + console.log("Give the staking contract some FXS"); + await hre.network.provider.request({ + method: "hardhat_impersonateAccount", + params: [ADDRESS_WITH_FXS] + }); + + await canFXS_instance.transfer(staking_instance.address, new BigNumber("1000e18"), { from: ADDRESS_WITH_FXS }); + + await hre.network.provider.request({ + method: "hardhat_stopImpersonatingAccount", + params: [ADDRESS_WITH_FXS] + }); + + console.log("Give the staking contract some REW1"); + await hre.network.provider.request({ + method: "hardhat_impersonateAccount", + params: [ADDRESS_WITH_REW1_TKN] + }); + + await rew1_tkn_instance.transfer(staking_instance.address, new BigNumber("100e18"), { from: ADDRESS_WITH_REW1_TKN }); + + await hre.network.provider.request({ + method: "hardhat_stopImpersonatingAccount", + params: [ADDRESS_WITH_REW1_TKN] + }); + + await staking_instance.sync({ from: COLLATERAL_FRAX_AND_FXS_OWNER }); + + console.log(chalk.hex("#ff8b3d")("====================================================================")); + console.log(chalk.hex("#ff8b3d")("CHECK EARNINGS (SHOULD BE ZERO)")); + console.log(chalk.hex("#ff8b3d")("====================================================================")); + + // Print balances + console.log("Farm FXS balance:", new BigNumber(await canFXS_instance.balanceOf(staking_instance.address)).div(BIG18).toNumber()); + console.log("Farm FXS owed:", new BigNumber(await staking_instance.ttlRew0Owed()).div(BIG18).toNumber()); + console.log("Farm FXS paid:", new BigNumber(await staking_instance.ttlRew0Paid()).div(BIG18).toNumber()); + console.log("Farm REW1 balance:", new BigNumber(await rew1_tkn_instance.balanceOf(staking_instance.address)).div(BIG18).toNumber()); + console.log("Farm REW1 owed:", new BigNumber(await staking_instance.ttlRew1Owed()).div(BIG18).toNumber()); + console.log("Farm REW1 paid:", new BigNumber(await staking_instance.ttlRew1Paid()).div(BIG18).toNumber()); + + const staking_fxs_earned_28PR_1 = await staking_instance.earned.call(accounts[1]); + const staking_fxs_earned_28PR_1_fxs = new BigNumber(staking_fxs_earned_28PR_1[0]).div(BIG18); + const staking_fxs_earned_28PR_1_token1 = new BigNumber(staking_fxs_earned_28PR_1[1]).div(BIG18); + console.log("accounts[1] earnings after 5 weeks (post refill) [FXS]: ", staking_fxs_earned_28PR_1_fxs.toString()); + console.log("accounts[1] earnings after 5 weeks (post refill) [REW1]: ", staking_fxs_earned_28PR_1_token1.toString()); + + const staking_fxs_earned_28PR_9 = await staking_instance.earned.call(accounts[9]); + const staking_fxs_earned_28PR_9_fxs = new BigNumber(staking_fxs_earned_28PR_9[0]).div(BIG18); + const staking_fxs_earned_28PR_9_token1 = new BigNumber(staking_fxs_earned_28PR_9[1]).div(BIG18); + console.log("accounts[9] earnings after 5 weeks (post refill) [FXS]: ", staking_fxs_earned_28PR_9_fxs.toString()); + console.log("accounts[9] earnings after 5 weeks (post refill) [REW1]: ", staking_fxs_earned_28PR_9_token1.toString()); + + const reward_week_5PR_fxs = (staking_fxs_earned_28PR_1_fxs).plus(staking_fxs_earned_28PR_9_fxs); + const reward_week_5PR_token1 = (staking_fxs_earned_28PR_1_token1).plus(staking_fxs_earned_28PR_9_token1); + const effective_yearly_reward_at_week_5PR_fxs = reward_week_5PR_fxs.multipliedBy(52.1429 / 4.0); + const effective_yearly_reward_at_week_5PR_token1 = reward_week_5PR_token1.multipliedBy(52.1429 / 4.0); // 1 week delay + console.log("Effective weekly reward at week 5 (post refill) [FXS]: ", reward_week_5PR_fxs.div(4).toString()); + console.log("Effective weekly reward at week 5 (post refill) [REW1]: ", reward_week_5PR_token1.div(4).toString()); // 1 week delay + console.log("Effective yearly reward at week 5 (post refill) [FXS]: ", effective_yearly_reward_at_week_5PR_fxs.toString()); + console.log("Effective yearly reward at week 5 (post refill) [REW1]: ", effective_yearly_reward_at_week_5PR_token1.toString()); + assert(reward_week_5PR_fxs.isEqualTo(new BigNumber(0)), `Reward should be zero`); + assert(reward_week_5PR_token1.isEqualTo(new BigNumber(0)), `Reward should be zero`); + + const duration_reward_3PR = await staking_instance.getRewardForDuration.call(); + const duration_reward_3PR_fxs = new BigNumber(duration_reward_3PR[0]).div(BIG18); + const duration_reward_3PR_token1 = new BigNumber(duration_reward_3PR[1]).div(BIG18); + console.log("Expected weekly reward [FXS]: ", duration_reward_3PR_fxs.toString()); + console.log("Expected weekly reward [REW1]: ", duration_reward_3PR_token1.toString()); + console.log("Expected yearly reward (post refill) [FXS]: ", duration_reward_3PR_fxs.multipliedBy(52.1429).toString()); + console.log("Expected yearly reward (post refill) [REW1]: ", duration_reward_3PR_token1.multipliedBy(52.1429).toString()); + + + console.log(chalk.hex("#ff8b3d")("====================================================================")); + console.log(chalk.hex("#ff8b3d")("ADVANCE TO DAY 35 (next period)")); + console.log(chalk.hex("#ff8b3d")("====================================================================")); + // Sync beforehand + await staking_instance.sync({ from: COLLATERAL_FRAX_AND_FXS_OWNER }); + + const current_timestamp_2 = (new BigNumber(await time.latest())).toNumber(); + const period_end_2 = await staking_instance.periodFinish.call(); + + // Advance ~7 days + const increase_time_2 = (period_end_2 - current_timestamp_2); + console.log("increase_time_2 (days): ", increase_time_2 / 86400); + await time.increase(increase_time_2); + await time.advanceBlock(); + + // Sync afterwards + await staking_instance.sync({ from: COLLATERAL_FRAX_AND_FXS_OWNER }); + + // Print balances + console.log("Farm FXS balance:", new BigNumber(await canFXS_instance.balanceOf(staking_instance.address)).div(BIG18).toNumber()); + console.log("Farm FXS owed:", new BigNumber(await staking_instance.ttlRew0Owed()).div(BIG18).toNumber()); + console.log("Farm FXS paid:", new BigNumber(await staking_instance.ttlRew0Paid()).div(BIG18).toNumber()); + console.log("Farm REW1 balance:", new BigNumber(await rew1_tkn_instance.balanceOf(staking_instance.address)).div(BIG18).toNumber()); + console.log("Farm REW1 owed:", new BigNumber(await staking_instance.ttlRew1Owed()).div(BIG18).toNumber()); + console.log("Farm REW1 paid:", new BigNumber(await staking_instance.ttlRew1Paid()).div(BIG18).toNumber()); + + const staking_fxs_earned_35_1 = await staking_instance.earned.call(accounts[1]); + const staking_fxs_earned_35_1_fxs = new BigNumber(staking_fxs_earned_35_1[0]).div(BIG18); + const staking_fxs_earned_35_1_token1 = new BigNumber(staking_fxs_earned_35_1[1]).div(BIG18); + console.log("accounts[1] earnings after 6 weeks [FXS]: ", staking_fxs_earned_35_1_fxs.toString()); + console.log("accounts[1] earnings after 6 weeks [REW1]: ", staking_fxs_earned_35_1_token1.toString()); + + const staking_fxs_earned_35_9 = await staking_instance.earned.call(accounts[9]); + const staking_fxs_earned_35_9_fxs = new BigNumber(staking_fxs_earned_35_9[0]).div(BIG18); + const staking_fxs_earned_35_9_token1 = new BigNumber(staking_fxs_earned_35_9[1]).div(BIG18); + console.log("accounts[9] earnings after 6 weeks [FXS]: ", staking_fxs_earned_35_9_fxs.toString()); + console.log("accounts[9] earnings after 6 weeks [REW1]: ", staking_fxs_earned_35_9_token1.toString()); + + const reward_week_6_fxs = (staking_fxs_earned_35_1_fxs).plus(staking_fxs_earned_35_9_fxs); + const reward_week_6_token1 = (staking_fxs_earned_35_1_token1).plus(staking_fxs_earned_35_9_token1); + const effective_yearly_reward_at_week_6_fxs = reward_week_6_fxs.multipliedBy(52.1429); + const effective_yearly_reward_at_week_6_token1 = reward_week_6_token1.multipliedBy(52.1429); // 1 week delay + console.log("Effective weekly reward at week 6 [FXS]: ", reward_week_6_fxs.div(1).toString()); + console.log("Effective weekly reward at week 6 [REW1]: ", reward_week_6_token1.div(1).toString()); // 1 week delay + console.log("Effective yearly reward at week 6 [FXS]: ", effective_yearly_reward_at_week_6_fxs.toString()); + console.log("Effective yearly reward at week 6 [REW1]: ", effective_yearly_reward_at_week_6_token1.toString()); + + const duration_reward_4 = await staking_instance.getRewardForDuration.call(); + const duration_reward_4_fxs = new BigNumber(duration_reward_4[0]).div(BIG18); + const duration_reward_4_token1 = new BigNumber(duration_reward_4[1]).div(BIG18); + console.log("Expected weekly reward [FXS]: ", duration_reward_4_fxs.toString()); + console.log("Expected weekly reward [REW1]: ", duration_reward_4_token1.toString()); + console.log("Expected yearly reward [FXS]: ", duration_reward_4_fxs.multipliedBy(52.1429).toString()); + console.log("Expected yearly reward [REW1]: ", duration_reward_4_token1.multipliedBy(52.1429).toString()); + + console.log(chalk.hex("#ff8b3d")("====================================================================")); + console.log(chalk.hex("#ff8b3d")("WITHDRAW STAKES")); + console.log(chalk.hex("#ff8b3d")("====================================================================")); + + // Account 9 withdraws and claims its locked stake + await staking_instance.withdrawLocked(locked_stake_structs_9_0[0].kek_id, { from: accounts[9] }); + await staking_instance.getReward({ from: accounts[9] }); + await expectRevert.unspecified(staking_instance.withdrawLocked(locked_stake_structs_1_0[1].kek_id, { from: COLLATERAL_FRAX_AND_FXS_OWNER })); + + const _total_liquidity_locked_1 = new BigNumber(await staking_instance.totalLiquidityLocked.call()).div(BIG18); + const _total_combined_weight_1 = new BigNumber(await staking_instance.totalCombinedWeight.call()).div(BIG18); + console.log("_total_liquidity_locked GLOBAL: ", _total_liquidity_locked_1.toString()); + console.log("_total_combined_weight GLOBAL: ", _total_combined_weight_1.toString()); + + console.log("UNLOCKING ALL STAKES"); + await staking_instance.unlockStakes({ from: STAKING_OWNER }); + await staking_instance.withdrawLocked(locked_stake_structs_1_0[1].kek_id, { from: COLLATERAL_FRAX_AND_FXS_OWNER }); + + await utilities.printCalcCurCombinedWeight(staking_instance, COLLATERAL_FRAX_AND_FXS_OWNER); + await utilities.printCalcCurCombinedWeight(staking_instance, accounts[9]); + + const user_min_vefxs_for_max_boost_1_3 = new BigNumber(await staking_instance.minVeFXSForMaxBoost.call(COLLATERAL_FRAX_AND_FXS_OWNER)).div(BIG18); + const user_min_vefxs_for_max_boost_9_3 = new BigNumber(await staking_instance.minVeFXSForMaxBoost.call(accounts[9])).div(BIG18); + console.log("user_min_vefxs_for_max_boost_1_3: ", user_min_vefxs_for_max_boost_1_3.toString()); + console.log("user_min_vefxs_for_max_boost_9_3: ", user_min_vefxs_for_max_boost_9_3.toString()); + + const _total_liquidity_locked_2 = new BigNumber(await staking_instance.totalLiquidityLocked.call()).div(BIG18); + const _total_combined_weight_2 = new BigNumber(await staking_instance.totalCombinedWeight.call()).div(BIG18); + const frax_per_lp_token_2 = new BigNumber(await staking_instance.fraxPerLPToken.call()).div(BIG18); + console.log("_total_liquidity_locked GLOBAL: ", _total_liquidity_locked_2.toString()); + console.log("_total_combined_weight GLOBAL: ", _total_combined_weight_2.toString()); + console.log("frax_per_lp_token_2 GLOBAL: ", frax_per_lp_token_2.toString()); + + // Claim rewards + console.log("Claim rewards"); + await staking_instance.getReward({ from: COLLATERAL_FRAX_AND_FXS_OWNER }); + await staking_instance.getReward({ from: accounts[9] }); + + console.log(chalk.hex("#ff8b3d")("====================================================================")); + console.log(chalk.hex("#ff8b3d")("CHECK EARNINGS AGAIN")); + console.log(chalk.hex("#ff8b3d")("====================================================================")); + + // Sync beforehand + await staking_instance.sync({ from: COLLATERAL_FRAX_AND_FXS_OWNER }); + + const current_timestamp_3 = (new BigNumber(await time.latest())).toNumber(); + const period_end_3 = await staking_instance.periodFinish.call(); + + // Advance to the next period + const increase_time_3 = (period_end_3 - current_timestamp_3); + console.log("increase_time_3 (days): ", increase_time_3 / 86400); + await time.increase(increase_time_3); + await time.advanceBlock(); + + // Sync afterwards + await staking_instance.sync({ from: COLLATERAL_FRAX_AND_FXS_OWNER }); + + // Print balances + console.log("Farm FXS balance:", new BigNumber(await canFXS_instance.balanceOf(staking_instance.address)).div(BIG18).toNumber()); + console.log("Farm FXS owed:", new BigNumber(await staking_instance.ttlRew0Owed()).div(BIG18).toNumber()); + console.log("Farm FXS paid:", new BigNumber(await staking_instance.ttlRew0Paid()).div(BIG18).toNumber()); + console.log("Farm REW1 balance:", new BigNumber(await rew1_tkn_instance.balanceOf(staking_instance.address)).div(BIG18).toNumber()); + console.log("Farm REW1 owed:", new BigNumber(await staking_instance.ttlRew1Owed()).div(BIG18).toNumber()); + console.log("Farm REW1 paid:", new BigNumber(await staking_instance.ttlRew1Paid()).div(BIG18).toNumber()); + + const staking_fxs_earned_PW_1 = await staking_instance.earned.call(accounts[1]); + const staking_fxs_earned_PW_1_fxs = new BigNumber(staking_fxs_earned_PW_1[0]).div(BIG18); + const staking_fxs_earned_PW_1_token1 = new BigNumber(staking_fxs_earned_PW_1[1]).div(BIG18); + console.log("accounts[1] earnings leftover [FXS]: ", staking_fxs_earned_PW_1_fxs.toString()); + console.log("accounts[1] earnings leftover [REW1]: ", staking_fxs_earned_PW_1_token1.toString()); + + const staking_fxs_earned_PW_9 = await staking_instance.earned.call(accounts[9]); + const staking_fxs_earned_PW_9_fxs = new BigNumber(staking_fxs_earned_PW_9[0]).div(BIG18); + const staking_fxs_earned_PW_9_token1 = new BigNumber(staking_fxs_earned_PW_9[1]).div(BIG18); + console.log("accounts[9] earnings leftover [FXS]: ", staking_fxs_earned_PW_9_fxs.toString()); + console.log("accounts[9] earnings leftover [REW1]: ", staking_fxs_earned_PW_9_token1.toString()); + assert(staking_fxs_earned_PW_9_fxs.isEqualTo(new BigNumber(0)), `Reward should be zero`); + assert(staking_fxs_earned_PW_9_token1.isEqualTo(new BigNumber(0)), `Reward should be zero`); + + const duration_reward_5 = await staking_instance.getRewardForDuration.call(); + const duration_reward_5_fxs = new BigNumber(duration_reward_5[0]).div(BIG18); + const duration_reward_5_token1 = new BigNumber(duration_reward_5[1]).div(BIG18); + console.log("Expected weekly reward [FXS]: ", duration_reward_5_fxs.toString()); + console.log("Expected weekly reward [REW1]: ", duration_reward_5_token1.toString()); + + }); + + + it("Migration Staking / Withdrawal Tests", async () => { + + // Advance 1 day + await time.increase((1 * 86400) + 1); + await time.advanceBlock(); + + // Untoggle the stake unlocking + await staking_instance.unlockStakes({ from: STAKING_OWNER }); + + // Stake normally again for next part + // Need to approve first so the staking can use transfer + const stake_amt_unlocked = new BigNumber("5e18"); + const stake_amt_locked = new BigNumber("5e18"); + + // Allow the migrator function to migrate for you + await staking_instance.stakerAllowMigrator(MIGRATOR_ADDRESS, { from: COLLATERAL_FRAX_AND_FXS_OWNER }); + + // Print the balance + console.log("accounts[1] ERC20 balanceOf LP:", (new BigNumber(await lp_tkn_instance.balanceOf(COLLATERAL_FRAX_AND_FXS_OWNER))).div(BIG18).toNumber()); + + // Stake Locked + await lp_tkn_instance.approve(staking_instance.address, stake_amt_locked, { from: COLLATERAL_FRAX_AND_FXS_OWNER }); + await staking_instance.stakeLocked(stake_amt_locked, 7 * 86400, { from: COLLATERAL_FRAX_AND_FXS_OWNER }); + + // Show the stake structs + const locked_stake_structs = await staking_instance.lockedStakesOf.call(COLLATERAL_FRAX_AND_FXS_OWNER); + console.log("LOCKED STAKES [1]: ", locked_stake_structs); + + // Turn on migrations + await staking_instance.toggleMigrations({ from: STAKING_OWNER }); + + // Print balances before + console.log("accounts[1] staked lockedLiquidityOf :", (new BigNumber(await staking_instance.lockedLiquidityOf(COLLATERAL_FRAX_AND_FXS_OWNER))).div(BIG18).toNumber()); + console.log("accounts[1] staked combinedWeightOf :", (new BigNumber(await staking_instance.combinedWeightOf(COLLATERAL_FRAX_AND_FXS_OWNER))).div(BIG18).toNumber()); + + // Have the migrator withdraw locked tokens + const withdraw_locked_amt = new BigNumber ("5e18"); + await staking_instance.migrator_withdraw_locked(COLLATERAL_FRAX_AND_FXS_OWNER, locked_stake_structs[2].kek_id, { from: MIGRATOR_ADDRESS }); + console.log(`Migrator (accounts[10]) withdrew ${withdraw_locked_amt.div(BIG18)} (E18) locked LP tokens from accounts[1]`); + console.log("Migrator (accounts[10]) ERC20 balanceOf:", (new BigNumber(await lp_tkn_instance.balanceOf(MIGRATOR_ADDRESS))).div(BIG18).toNumber()); + console.log("accounts[1] staked lockedLiquidityOf:", (new BigNumber(await staking_instance.lockedLiquidityOf(COLLATERAL_FRAX_AND_FXS_OWNER))).div(BIG18).toNumber()); + console.log("accounts[1] staked combinedWeightOf:", (new BigNumber(await staking_instance.combinedWeightOf(COLLATERAL_FRAX_AND_FXS_OWNER))).div(BIG18).toNumber()); + console.log(""); + + // Proxy locked stake for someone else as the migrator + const proxy_stake_lock_amt = new BigNumber ("5e18"); + await lp_tkn_instance.approve(staking_instance.address, proxy_stake_lock_amt, { from: MIGRATOR_ADDRESS }); + let block_time_current_1 = (await time.latest()).toNumber(); + await staking_instance.migrator_stakeLocked_for(COLLATERAL_FRAX_AND_FXS_OWNER, proxy_stake_lock_amt, 28 * 86400, block_time_current_1, { from: MIGRATOR_ADDRESS }); + console.log(`accounts[1] lock staked ${proxy_stake_lock_amt.div(BIG18)} (E18) LP tokens for account[8]`); + console.log("Migrator (accounts[10]) ERC20 balanceOf:", (new BigNumber(await lp_tkn_instance.balanceOf(MIGRATOR_ADDRESS))).div(BIG18).toNumber()); + console.log("accounts[1] staked lockedLiquidityOf:", (new BigNumber(await staking_instance.lockedLiquidityOf(COLLATERAL_FRAX_AND_FXS_OWNER))).div(BIG18).toNumber()); + console.log("accounts[1] staked combinedWeightOf:", (new BigNumber(await staking_instance.combinedWeightOf(COLLATERAL_FRAX_AND_FXS_OWNER))).div(BIG18).toNumber()); + console.log(""); + + + }); + + it("Fail Tests ", async () => { + + const test_amount_1 = new BigNumber ("1e18"); + const locked_stake_structs = await staking_instance.lockedStakesOf.call(COLLATERAL_FRAX_AND_FXS_OWNER); + + console.log(chalk.blue("=============TEST NOT IN MIGRATION [SHOULD FAIL]=============")); + + // Turn off migrations + await staking_instance.toggleMigrations({ from: STAKING_OWNER }); + + console.log("---------TRY TO migrator_withdraw_locked WHILE NOT IN MIGRATION---------"); + await expectRevert( + staking_instance.migrator_withdraw_locked(COLLATERAL_FRAX_AND_FXS_OWNER, locked_stake_structs[2].kek_id, { from: MIGRATOR_ADDRESS }), + "Not in migration" + ); + + console.log("---------TRY TO migrator_stakeLocked_for WHILE NOT IN MIGRATION---------"); + let block_time_current_2 = (await time.latest()).toNumber(); + await expectRevert( + staking_instance.migrator_stakeLocked_for(COLLATERAL_FRAX_AND_FXS_OWNER, test_amount_1, 28 * 86400, block_time_current_2, { from: MIGRATOR_ADDRESS }), + "Not in migration" + ); + + console.log("---------TRY TO ALLOW A WRONG MIGRATOR---------"); + await expectRevert( + staking_instance.stakerAllowMigrator(INVESTOR_CUSTODIAN_ADDRESS, { from: COLLATERAL_FRAX_AND_FXS_OWNER }), + "Invalid migrator address" + ); + + console.log("---------TRY TO DO EMERGENCY WITHDRAWALS WHILE NOT IN MIGRATION---------"); + await expectRevert( + staking_instance.recoverERC20(lp_tkn_instance.address, test_amount_1, { from: STAKING_OWNER }), + "Not in migration" + ); + + console.log(chalk.blue("=============TEST TRYING TO MIGRATE NOT AS A MIGRATOR [SHOULD FAIL]=============")); + + // Turn on migrations + await staking_instance.toggleMigrations({ from: STAKING_OWNER }); + + console.log("---------TRY TO migrator_withdraw_locked NOT AS THE MIGRATOR---------"); + await expectRevert( + staking_instance.migrator_withdraw_locked(COLLATERAL_FRAX_AND_FXS_OWNER, locked_stake_structs[2].kek_id, { from: INVESTOR_CUSTODIAN_ADDRESS }), + "Mig. invalid or unapproved" + ); + + console.log("---------TRY TO migrator_stakeLocked_for NOT AS THE MIGRATOR---------"); + let block_time_current_3 = (await time.latest()).toNumber(); + await expectRevert( + staking_instance.migrator_stakeLocked_for(COLLATERAL_FRAX_AND_FXS_OWNER, test_amount_1, 28 * 86400, block_time_current_3, { from: INVESTOR_CUSTODIAN_ADDRESS }), + "Mig. invalid or unapproved" + ); + + console.log("---------TRY TO migrator_withdraw_locked AS A NOW NON-APPROVED MIGRATOR ---------"); + // Staker disallows MIGRATOR_ADDRESS + await staking_instance.stakerDisallowMigrator(MIGRATOR_ADDRESS, { from: COLLATERAL_FRAX_AND_FXS_OWNER }) + + await expectRevert( + staking_instance.migrator_withdraw_locked(COLLATERAL_FRAX_AND_FXS_OWNER, locked_stake_structs[2].kek_id, { from: MIGRATOR_ADDRESS }), + "Mig. invalid or unapproved" + ); + + console.log("---------TRY TO migrator_withdraw_unlocked AS A NOW INVALID MIGRATOR ---------"); + // Staker re-allows MIGRATOR_ADDRESS + await staking_instance.stakerAllowMigrator(MIGRATOR_ADDRESS, { from: COLLATERAL_FRAX_AND_FXS_OWNER }) + + // But governance now disallows it + await staking_instance.removeMigrator(MIGRATOR_ADDRESS, { from: STAKING_OWNER }); + + await expectRevert( + staking_instance.migrator_withdraw_locked(COLLATERAL_FRAX_AND_FXS_OWNER, locked_stake_structs[2].kek_id, { from: MIGRATOR_ADDRESS }), + "Mig. invalid or unapproved" + ); + + }); +}); \ No newline at end of file diff --git a/src/hardhat/test/__ARBITRUM/FraxCrossChainFarmV3-Tests.js b/src/hardhat/test/__ARBITRUM/FraxCrossChainFarmV3-Tests.js new file mode 100644 index 00000000..58383577 --- /dev/null +++ b/src/hardhat/test/__ARBITRUM/FraxCrossChainFarmV3-Tests.js @@ -0,0 +1,898 @@ +const path = require('path'); +const envPath = path.join(__dirname, '../../.env'); +require('dotenv').config({ path: envPath }); + +const BigNumber = require('bignumber.js'); +const util = require('util'); +const chalk = require('chalk'); +const Contract = require('web3-eth-contract'); +const { expectRevert, time } = require('@openzeppelin/test-helpers'); + +const constants = require(path.join(__dirname, '../../../../dist/types/constants')); +const utilities = require(path.join(__dirname, '../../../../dist/misc/utilities')); + +// Set provider for all later instances to use +Contract.setProvider('http://127.0.0.1:7545'); + +global.artifacts = artifacts; +global.web3 = web3; + +const hre = require("hardhat"); + +// FRAX core +const CrossChainCanonicalFRAX = artifacts.require("ERC20/__CROSSCHAIN/CrossChainCanonicalFRAX"); +const CrossChainCanonicalFXS = artifacts.require("ERC20/__CROSSCHAIN/CrossChainCanonicalFXS"); +const ERC20 = artifacts.require("contracts/ERC20/ERC20.sol:ERC20"); + +// LP Pairs +const ISaddleLPToken = artifacts.require("Misc_AMOs/saddle/ISaddleLPToken"); + +// Staking contracts +const FraxCCFarmV3_ArbiSaddleL2D4 = artifacts.require("Staking/Variants/FraxCCFarmV3_ArbiSaddleL2D4"); + +const BIG6 = new BigNumber("1e6"); +const BIG18 = new BigNumber("1e18"); +const TIMELOCK_DELAY = 86400 * 2; // 2 days +const DUMP_ADDRESS = "0x6666666666666666666666666666666666666666"; +const METAMASK_ADDRESS = "0x6666666666666666666666666666666666666666"; + +const REWARDS_DURATION = 7 * 86400; // 7 days + +contract('FraxCrossChainFarmV3-Tests', async (accounts) => { + let CONTRACT_ADDRESSES = constants.CONTRACT_ADDRESSES; + let CHAIN_ADDRESSES = CONTRACT_ADDRESSES.arbitrum; + + // Constants + let ORIGINAL_FRAX_ONE_ADDRESS; + let COLLATERAL_FRAX_AND_FXS_OWNER; + let ORACLE_ADMIN; + let POOL_CREATOR; + let TIMELOCK_ADMIN; + let GOVERNOR_GUARDIAN_ADDRESS; + let STAKING_OWNER; + let STAKING_REWARDS_DISTRIBUTOR; + let INVESTOR_CUSTODIAN_ADDRESS; + let MIGRATOR_ADDRESS; + const ADDRESS_WITH_FXS = '0x5180db0237291A6449DdA9ed33aD90a38787621c'; + const ADDRESS_WITH_REW1_TKN = '0x5180db0237291A6449DdA9ed33aD90a38787621c'; + const ADDRESS_WITH_LP_TOKENS = '0x5180db0237291A6449DdA9ed33aD90a38787621c'; + + // Initialize core contract instances + let canFRAX_instance; + let canFXS_instance; + + // Initialize reward token instance + let rew1_tkn_instance; + + // Initialize pair contracts + let lp_tkn_instance; + + // Initialize staking instances + let staking_instance; + + beforeEach(async() => { + + await hre.network.provider.request({ + method: "hardhat_impersonateAccount", + params: [process.env.FRAX_ONE_ADDRESS] + }); + + // Constants + ORIGINAL_FRAX_ONE_ADDRESS = process.env.FRAX_ONE_ADDRESS; + DEPLOYER_ADDRESS = accounts[0]; + COLLATERAL_FRAX_AND_FXS_OWNER = accounts[1]; + ORACLE_ADMIN = accounts[2]; + POOL_CREATOR = accounts[3]; + TIMELOCK_ADMIN = accounts[4]; + GOVERNOR_GUARDIAN_ADDRESS = accounts[5]; + STAKING_OWNER = accounts[6]; + STAKING_REWARDS_DISTRIBUTOR = accounts[7]; + INVESTOR_CUSTODIAN_ADDRESS = accounts[8]; + MIGRATOR_ADDRESS = accounts[10]; + + // Fill core contract instances + canFRAX_instance = await CrossChainCanonicalFRAX.deployed(); + canFXS_instance = await CrossChainCanonicalFXS.deployed(); + + // Get instances of the Curve pair + lp_tkn_instance = await ISaddleLPToken.at(CHAIN_ADDRESSES.bearer_tokens.saddleL2D4); + + // Fill the staking rewards instances + staking_instance = await FraxCCFarmV3_ArbiSaddleL2D4.deployed(); + + // Fill reward token instance + const rew1_address = await staking_instance.rewardsToken1.call(); + rew1_tkn_instance = await ERC20.at(rew1_address); + }); + + afterEach(async() => { + await hre.network.provider.request({ + method: "hardhat_stopImpersonatingAccount", + params: [process.env.FRAX_ONE_ADDRESS] + }); + }) + + + it('Initialization related', async () => { + console.log("=========================Initialization=========================") + + console.log("------------------------------------------------"); + console.log("Seed the staking contract with FXS and give COLLATERAL_FRAX_AND_FXS_OWNER some FXS"); + await hre.network.provider.request({ + method: "hardhat_impersonateAccount", + params: [ADDRESS_WITH_FXS] + }); + + await canFXS_instance.transfer(staking_instance.address, new BigNumber("100e18"), { from: ADDRESS_WITH_FXS }); + await canFXS_instance.transfer(COLLATERAL_FRAX_AND_FXS_OWNER, new BigNumber("1000e18"), { from: ADDRESS_WITH_FXS }); + + await hre.network.provider.request({ + method: "hardhat_stopImpersonatingAccount", + params: [ADDRESS_WITH_FXS] + }); + + console.log("------------------------------------------------"); + console.log("Seed the staking contract with REW1 tokens"); + await hre.network.provider.request({ + method: "hardhat_impersonateAccount", + params: [ADDRESS_WITH_REW1_TKN] + }); + + await rew1_tkn_instance.transfer(staking_instance.address, new BigNumber("10e18"), { from: ADDRESS_WITH_REW1_TKN }); + + await hre.network.provider.request({ + method: "hardhat_stopImpersonatingAccount", + params: [ADDRESS_WITH_REW1_TKN] + }); + + console.log("------------------------------------------------"); + console.log("Give LPs to test users"); + await hre.network.provider.request({ + method: "hardhat_impersonateAccount", + params: [ADDRESS_WITH_LP_TOKENS] + }); + + await lp_tkn_instance.transfer(accounts[1], new BigNumber("30e18"), { from: ADDRESS_WITH_LP_TOKENS }); + await lp_tkn_instance.transfer(accounts[9], new BigNumber("30e18"), { from: ADDRESS_WITH_LP_TOKENS }); + + await hre.network.provider.request({ + method: "hardhat_stopImpersonatingAccount", + params: [ADDRESS_WITH_LP_TOKENS] + }); + + + // Add a migrator address + await staking_instance.addMigrator(MIGRATOR_ADDRESS, { from: STAKING_OWNER }); + }); + + it('Locked stakes', async () => { + console.log(chalk.hex("#ff8b3d").bold("====================================================================")); + console.log(chalk.hex("#ff8b3d").bold("TRY TESTS WITH LOCKED STAKES.")); + console.log(chalk.hex("#ff8b3d").bold("====================================================================")); + + // Get FXS balances before everything starts + const fxs_bal_acc_1_time0 = new BigNumber(await canFXS_instance.balanceOf(COLLATERAL_FRAX_AND_FXS_OWNER)).div(BIG18).toNumber(); + const fxs_bal_acc_9_time0 = new BigNumber(await canFXS_instance.balanceOf(accounts[9])).div(BIG18).toNumber(); + + // Print balances + console.log("Farm FXS balance:", new BigNumber(await canFXS_instance.balanceOf(staking_instance.address)).div(BIG18).toNumber()); + console.log("Farm FXS owed:", new BigNumber(await staking_instance.ttlRew0Owed()).div(BIG18).toNumber()); + console.log("Farm FXS paid:", new BigNumber(await staking_instance.ttlRew0Paid()).div(BIG18).toNumber()); + console.log("Farm REW1 balance:", new BigNumber(await rew1_tkn_instance.balanceOf(staking_instance.address)).div(BIG18).toNumber()); + console.log("Farm REW1 owed:", new BigNumber(await staking_instance.ttlRew1Owed()).div(BIG18).toNumber()); + console.log("Farm REW1 paid:", new BigNumber(await staking_instance.ttlRew1Paid()).div(BIG18).toNumber()); + + await utilities.printCalcCurCombinedWeight(staking_instance, COLLATERAL_FRAX_AND_FXS_OWNER); + await utilities.printCalcCurCombinedWeight(staking_instance, accounts[9]); + + // Need to approve first so the staking can use transfer + const uni_pool_locked_1 = new BigNumber("75e17"); + const uni_pool_locked_1_sum = new BigNumber("10e18"); + const uni_pool_locked_9 = new BigNumber("25e17"); + await lp_tkn_instance.approve(staking_instance.address, uni_pool_locked_1_sum, { from: COLLATERAL_FRAX_AND_FXS_OWNER }); + await lp_tkn_instance.approve(staking_instance.address, uni_pool_locked_9, { from: accounts[9] }); + + // // Note the FRAX amounts before + // const frax_before_1_locked = new BigNumber(await canFRAX_instance.balanceOf.call(COLLATERAL_FRAX_AND_FXS_OWNER)).div(BIG18); + // const frax_before_9_locked = new BigNumber(await canFRAX_instance.balanceOf.call(accounts[9])).div(BIG18); + // console.log("FRAX_USDC Uniswap Liquidity Tokens BEFORE [1]: ", frax_before_1_locked.toString()); + // console.log("FRAX_USDC Uniswap Liquidity Tokens BEFORE [9]: ", frax_before_9_locked.toString()); + + console.log("Try to stake before initialization [SHOULD FAIL]"); + await expectRevert( + staking_instance.stakeLocked(uni_pool_locked_1, 6.95 * 86400, { from: COLLATERAL_FRAX_AND_FXS_OWNER }), + "Contract not initialized" + ); + + console.log("Initialize Staking Contract"); + await staking_instance.initializeDefault({ from: STAKING_OWNER }); + + // Stake Locked + // account[1] + await staking_instance.stakeLocked(uni_pool_locked_1, 6.95 * 86400, { from: COLLATERAL_FRAX_AND_FXS_OWNER }); // 7 days + await staking_instance.stakeLocked(new BigNumber ("25e17"), 548 * 86400, { from: COLLATERAL_FRAX_AND_FXS_OWNER }); // 270 days + + // account[9] + await staking_instance.stakeLocked(uni_pool_locked_9, 27.95 * 86400, { from: accounts[9] }); + await time.advanceBlock(); + + // Show the stake structs + const locked_stake_structs_1_0 = await staking_instance.lockedStakesOf.call(COLLATERAL_FRAX_AND_FXS_OWNER); + const locked_stake_structs_9_0 = await staking_instance.lockedStakesOf.call(accounts[9]); + console.log("LOCKED STAKES [1]: ", locked_stake_structs_1_0); + console.log("LOCKED STAKES [9]: ", locked_stake_structs_9_0); + + // Note the UNI POOL and FXS amount after staking + const regular_balance_1 = new BigNumber(await staking_instance.lockedLiquidityOf.call(COLLATERAL_FRAX_AND_FXS_OWNER)).div(BIG18); + const boosted_balance_1 = new BigNumber(await staking_instance.combinedWeightOf.call(COLLATERAL_FRAX_AND_FXS_OWNER)).div(BIG18); + const locked_balance_1 = new BigNumber(await staking_instance.lockedLiquidityOf.call(COLLATERAL_FRAX_AND_FXS_OWNER)).div(BIG18); + const regular_balance_9 = new BigNumber(await staking_instance.lockedLiquidityOf.call(accounts[9])).div(BIG18); + const boosted_balance_9 = new BigNumber(await staking_instance.combinedWeightOf.call(accounts[9])).div(BIG18); + const locked_balance_9 = new BigNumber(await staking_instance.lockedLiquidityOf.call(accounts[9])).div(BIG18); + console.log("LOCKED LIQUIDITY [1]: ", regular_balance_1.toString()); + console.log("COMBINED WEIGHT [1]: ", boosted_balance_1.toString()); + console.log("---- LOCKED [1]: ", locked_balance_1.toString()); + console.log("LOCKED LIQUIDITY [9]: ", regular_balance_9.toString()); + console.log("COMBINED WEIGHT [9]: ", boosted_balance_9.toString()); + console.log("---- LOCKED [9]: ", locked_balance_9.toString()); + + console.log("TRY AN EARLY WITHDRAWAL (SHOULD FAIL)"); + await expectRevert.unspecified(staking_instance.withdrawLocked(locked_stake_structs_1_0[0].kek_id, { from: COLLATERAL_FRAX_AND_FXS_OWNER })); + await expectRevert.unspecified(staking_instance.withdrawLocked(locked_stake_structs_9_0[0].kek_id, { from: accounts[9] })); + await time.advanceBlock(); + + await utilities.printCalcCurCombinedWeight(staking_instance, COLLATERAL_FRAX_AND_FXS_OWNER); + await utilities.printCalcCurCombinedWeight(staking_instance, accounts[9]); + + const user_min_vefxs_for_max_boost_1_0 = new BigNumber(await staking_instance.minVeFXSForMaxBoost.call(COLLATERAL_FRAX_AND_FXS_OWNER)).div(BIG18); + const user_min_vefxs_for_max_boost_9_0 = new BigNumber(await staking_instance.minVeFXSForMaxBoost.call(accounts[9])).div(BIG18); + console.log("user_min_vefxs_for_max_boost_1_0: ", user_min_vefxs_for_max_boost_1_0.toString()); + console.log("user_min_vefxs_for_max_boost_9_0: ", user_min_vefxs_for_max_boost_9_0.toString()); + + const _total_liquidity_locked_0 = new BigNumber(await staking_instance.totalLiquidityLocked.call()).div(BIG18); + const _total_combined_weight_0 = new BigNumber(await staking_instance.totalCombinedWeight.call()).div(BIG18); + const frax_per_lp_token_0 = new BigNumber(await staking_instance.fraxPerLPToken.call()).div(BIG18); + console.log("_total_liquidity_locked GLOBAL: ", _total_liquidity_locked_0.toString()); + console.log("_total_combined_weight GLOBAL: ", _total_combined_weight_0.toString()); + console.log("frax_per_lp_token_0 GLOBAL: ", frax_per_lp_token_0.toString()); + + + console.log(chalk.hex("#ff8b3d")("====================================================================")); + console.log(chalk.hex("#ff8b3d")("MID-WEEK-SYNC AND [9] CLAIMS")); + console.log(chalk.hex("#ff8b3d")("====================================================================")); + await time.increase(2 * 86400); + await time.advanceBlock(); + + // Sync + await staking_instance.sync({ from: COLLATERAL_FRAX_AND_FXS_OWNER }); + + // Print balances + console.log(chalk.yellow("--- Before claim ---")); + console.log("Farm FXS balance:", new BigNumber(await canFXS_instance.balanceOf(staking_instance.address)).div(BIG18).toNumber()); + console.log("Farm FXS owed:", new BigNumber(await staking_instance.ttlRew0Owed()).div(BIG18).toNumber()); + console.log("Farm FXS paid:", new BigNumber(await staking_instance.ttlRew0Paid()).div(BIG18).toNumber()); + console.log("Farm REW1 balance:", new BigNumber(await rew1_tkn_instance.balanceOf(staking_instance.address)).div(BIG18).toNumber()); + console.log("Farm REW1 owed:", new BigNumber(await staking_instance.ttlRew1Owed()).div(BIG18).toNumber()); + console.log("Farm REW1 paid:", new BigNumber(await staking_instance.ttlRew1Paid()).div(BIG18).toNumber()); + + // [9] claims + console.log(chalk.yellow("--- Claim ---")); + const fxs_bal_9_mid0_before = new BigNumber(await canFXS_instance.balanceOf(accounts[9])); + const token1_bal_9_mid0_before = new BigNumber(await rew1_tkn_instance.balanceOf(accounts[9])); + await staking_instance.getReward({ from: accounts[9] }); + const fxs_bal_9_mid0_after = new BigNumber(await canFXS_instance.balanceOf(accounts[9])); + const token1_bal_9_mid0_after = new BigNumber(await rew1_tkn_instance.balanceOf(accounts[9])); + const staking_earned_9_mid0_fxs = (fxs_bal_9_mid0_after).minus(fxs_bal_9_mid0_before); + const staking_earned_9_mid0_token1 = (token1_bal_9_mid0_after).minus(token1_bal_9_mid0_before); + console.log("accounts[9] mid-week part 0 earnings [FXS]: ", (staking_earned_9_mid0_fxs).div(BIG18).toNumber()); + console.log("accounts[9] mid-week part 0 earnings [REW1]: ", staking_earned_9_mid0_token1.div(BIG18).toNumber()); + + // Print balances + console.log(chalk.yellow("--- After claim ---")); + console.log("Farm FXS balance:", new BigNumber(await canFXS_instance.balanceOf(staking_instance.address)).div(BIG18).toNumber()); + console.log("Farm FXS owed:", new BigNumber(await staking_instance.ttlRew0Owed()).div(BIG18).toNumber()); + console.log("Farm FXS paid:", new BigNumber(await staking_instance.ttlRew0Paid()).div(BIG18).toNumber()); + console.log("Farm REW1 balance:", new BigNumber(await rew1_tkn_instance.balanceOf(staking_instance.address)).div(BIG18).toNumber()); + console.log("Farm REW1 owed:", new BigNumber(await staking_instance.ttlRew1Owed()).div(BIG18).toNumber()); + console.log("Farm REW1 paid:", new BigNumber(await staking_instance.ttlRew1Paid()).div(BIG18).toNumber()); + + console.log(chalk.hex("#ff8b3d")("====================================================================")); + console.log(chalk.hex("#ff8b3d")("MID-WEEK-SYNC AGAIN AND [9] CLAIMS AGAIN")); + console.log(chalk.hex("#ff8b3d")("====================================================================")); + await time.increase(2 * 86400); + await time.advanceBlock(); + + // Sync + await staking_instance.sync({ from: COLLATERAL_FRAX_AND_FXS_OWNER }); + + // Print balances + console.log(chalk.yellow("--- Before claim ---")); + console.log("Farm FXS balance:", new BigNumber(await canFXS_instance.balanceOf(staking_instance.address)).div(BIG18).toNumber()); + console.log("Farm FXS owed:", new BigNumber(await staking_instance.ttlRew0Owed()).div(BIG18).toNumber()); + console.log("Farm FXS paid:", new BigNumber(await staking_instance.ttlRew0Paid()).div(BIG18).toNumber()); + console.log("Farm REW1 balance:", new BigNumber(await rew1_tkn_instance.balanceOf(staking_instance.address)).div(BIG18).toNumber()); + console.log("Farm REW1 owed:", new BigNumber(await staking_instance.ttlRew1Owed()).div(BIG18).toNumber()); + console.log("Farm REW1 paid:", new BigNumber(await staking_instance.ttlRew1Paid()).div(BIG18).toNumber()); + + // [9] claims + console.log(chalk.yellow("--- Claim ---")); + const fxs_bal_9_mid1_before = new BigNumber(await canFXS_instance.balanceOf(accounts[9])); + const token1_bal_9_mid1_before = new BigNumber(await rew1_tkn_instance.balanceOf(accounts[9])); + await staking_instance.getReward({ from: accounts[9] }); + const fxs_bal_9_mid1_after = new BigNumber(await canFXS_instance.balanceOf(accounts[9])); + const token1_bal_9_mid1_after = new BigNumber(await rew1_tkn_instance.balanceOf(accounts[9])); + const staking_earned_9_mid1_fxs = (fxs_bal_9_mid1_after).minus(fxs_bal_9_mid1_before); + const staking_earned_9_mid1_token1 = (token1_bal_9_mid1_after).minus(token1_bal_9_mid1_before); + console.log("accounts[9] mid-week part 1 earnings [FXS]: ", (staking_earned_9_mid1_fxs).div(BIG18).toNumber()); + console.log("accounts[9] mid-week part 1 earnings [REW1]: ", staking_earned_9_mid1_token1.div(BIG18).toNumber()); + + // Print balances + console.log(chalk.yellow("--- After claim ---")); + console.log("Farm FXS balance:", new BigNumber(await canFXS_instance.balanceOf(staking_instance.address)).div(BIG18).toNumber()); + console.log("Farm FXS owed:", new BigNumber(await staking_instance.ttlRew0Owed()).div(BIG18).toNumber()); + console.log("Farm FXS paid:", new BigNumber(await staking_instance.ttlRew0Paid()).div(BIG18).toNumber()); + console.log("Farm REW1 balance:", new BigNumber(await rew1_tkn_instance.balanceOf(staking_instance.address)).div(BIG18).toNumber()); + console.log("Farm REW1 owed:", new BigNumber(await staking_instance.ttlRew1Owed()).div(BIG18).toNumber()); + console.log("Farm REW1 paid:", new BigNumber(await staking_instance.ttlRew1Paid()).div(BIG18).toNumber()); + + + console.log(chalk.hex("#ff8b3d")("====================================================================")); + console.log(chalk.hex("#ff8b3d")("WAIT UNTIL THE END OF THE 1st PERIOD")); + console.log(chalk.hex("#ff8b3d")("====================================================================")); + // Sync beforehand + await staking_instance.sync({ from: COLLATERAL_FRAX_AND_FXS_OWNER }); + + const current_timestamp_0 = (new BigNumber(await time.latest())).toNumber(); + const period_end_0 = await staking_instance.periodFinish.call(); + + const increase_time_0 = (period_end_0 - current_timestamp_0); + console.log("increase_time_0 (days): ", increase_time_0 / 86400); + await time.increase(increase_time_0); + await time.advanceBlock(); + + + // Sync afterwards + await staking_instance.sync({ from: COLLATERAL_FRAX_AND_FXS_OWNER }); + + await utilities.printCalcCurCombinedWeight(staking_instance, COLLATERAL_FRAX_AND_FXS_OWNER); + await utilities.printCalcCurCombinedWeight(staking_instance, accounts[9]); + + // Note the UNI POOL and FXS amount after staking + const regular_balance_00_1 = new BigNumber(await staking_instance.lockedLiquidityOf.call(COLLATERAL_FRAX_AND_FXS_OWNER)).div(BIG18); + const boosted_balance_00_1 = new BigNumber(await staking_instance.combinedWeightOf.call(COLLATERAL_FRAX_AND_FXS_OWNER)).div(BIG18); + const locked_balance_00_1 = new BigNumber(await staking_instance.lockedLiquidityOf.call(COLLATERAL_FRAX_AND_FXS_OWNER)).div(BIG18); + const regular_balance_00_9 = new BigNumber(await staking_instance.lockedLiquidityOf.call(accounts[9])).div(BIG18); + const boosted_balance_00_9 = new BigNumber(await staking_instance.combinedWeightOf.call(accounts[9])).div(BIG18); + const locked_balance_00_9 = new BigNumber(await staking_instance.lockedLiquidityOf.call(accounts[9])).div(BIG18); + console.log("LOCKED LIQUIDITY [1]: ", regular_balance_00_1.toString()); + console.log("COMBINED WEIGHT [1]: ", boosted_balance_00_1.toString()); + console.log("---- LOCKED [1]: ", locked_balance_00_1.toString()); + console.log("LOCKED LIQUIDITY [9]: ", regular_balance_00_9.toString()); + console.log("COMBINED WEIGHT [9]: ", boosted_balance_00_9.toString()); + console.log("---- LOCKED [9]: ", locked_balance_00_9.toString()); + + // Print balances + console.log(chalk.yellow("--- Before claim ---")); + console.log("Farm FXS balance:", new BigNumber(await canFXS_instance.balanceOf(staking_instance.address)).div(BIG18).toNumber()); + console.log("Farm FXS owed:", new BigNumber(await staking_instance.ttlRew0Owed()).div(BIG18).toNumber()); + console.log("Farm FXS paid:", new BigNumber(await staking_instance.ttlRew0Paid()).div(BIG18).toNumber()); + console.log("Farm REW1 balance:", new BigNumber(await rew1_tkn_instance.balanceOf(staking_instance.address)).div(BIG18).toNumber()); + console.log("Farm REW1 owed:", new BigNumber(await staking_instance.ttlRew1Owed()).div(BIG18).toNumber()); + console.log("Farm REW1 paid:", new BigNumber(await staking_instance.ttlRew1Paid()).div(BIG18).toNumber()); + + const user_min_vefxs_for_max_boost_1_1 = new BigNumber(await staking_instance.minVeFXSForMaxBoost.call(COLLATERAL_FRAX_AND_FXS_OWNER)).div(BIG18); + const user_min_vefxs_for_max_boost_9_1 = new BigNumber(await staking_instance.minVeFXSForMaxBoost.call(accounts[9])).div(BIG18); + console.log("user_min_vefxs_for_max_boost_1_1: ", user_min_vefxs_for_max_boost_1_1.toString()); + console.log("user_min_vefxs_for_max_boost_9_1: ", user_min_vefxs_for_max_boost_9_1.toString()); + + // Make sure there is a valid period for the contract and sync it + await staking_instance.sync({ from: STAKING_OWNER }); + + const staking_earned_1 = await staking_instance.earned.call(COLLATERAL_FRAX_AND_FXS_OWNER); + const staking_earned_1_fxs = new BigNumber(staking_earned_1[0]).div(BIG18); + const staking_earned_1_token1 = new BigNumber(staking_earned_1[1]).div(BIG18); + console.log("accounts[1] earnings after 1 week [FXS]: ", staking_earned_1_fxs.toString()); + console.log("accounts[1] earnings after 1 week [REW1]: ", staking_earned_1_token1.toString()); + + const staking_earned_9 = await staking_instance.earned.call(accounts[9]); + const staking_earned_9_fxs = (new BigNumber(staking_earned_9[0])).plus(staking_earned_9_mid0_fxs).plus(staking_earned_9_mid1_fxs).div(BIG18); + const staking_earned_9_token1 = (new BigNumber(staking_earned_9[1])).plus(staking_earned_9_mid0_token1).plus(staking_earned_9_mid1_token1).div(BIG18); + console.log("accounts[9] earnings after 1 week [FXS]: ", staking_earned_9_fxs.toString()); + console.log("accounts[9] earnings after 1 week [REW1]: ", staking_earned_9_token1.toString()); + + const reward_week_1_fxs = (staking_earned_1_fxs).plus(staking_earned_9_fxs); + const reward_week_1_token1 = (staking_earned_1_token1).plus(staking_earned_9_token1); + const effective_yearly_reward_at_week_1_fxs = reward_week_1_fxs.multipliedBy(52.1429); + const effective_yearly_reward_at_week_1_token1 = reward_week_1_token1.multipliedBy(52.1429); + console.log("Effective weekly reward at week 1 [FXS]: ", reward_week_1_fxs.toString()); + console.log("Effective weekly reward at week 1 [REW1]: ", reward_week_1_token1.toString()); + console.log("Effective yearly reward at week 1 [FXS]: ", effective_yearly_reward_at_week_1_fxs.toString()); + console.log("Effective yearly reward at week 1 [REW1]: ", effective_yearly_reward_at_week_1_token1.toString()); + + const duration_reward_1 = await staking_instance.getRewardForDuration.call(); + const duration_reward_1_fxs = new BigNumber(duration_reward_1[0]).div(BIG18); + const duration_reward_1_token1 = new BigNumber(duration_reward_1[1]).div(BIG18); + console.log("Expected weekly reward [FXS]: ", duration_reward_1_fxs.toString()); + console.log("Expected weekly reward [REW1]: ", duration_reward_1_token1.toString()); + console.log("Expected yearly reward [FXS]: ", duration_reward_1_fxs.multipliedBy(52.1429).toString()); + console.log("Expected yearly reward [REW1]: ", duration_reward_1_token1.multipliedBy(52.1429).toString()); + + console.log("TRY WITHDRAWING AGAIN"); + console.log("[1] SHOULD SUCCEED, [9] SHOULD FAIL"); + await staking_instance.withdrawLocked(locked_stake_structs_1_0[0].kek_id, { from: COLLATERAL_FRAX_AND_FXS_OWNER }); + await expectRevert.unspecified(staking_instance.withdrawLocked(locked_stake_structs_9_0[0].kek_id, { from: accounts[9] })); + + // Claim [9] + await staking_instance.getReward({ from: accounts[9] }); + + // Print balances + console.log(chalk.yellow("--- After claim ---")); + console.log("Farm FXS balance:", new BigNumber(await canFXS_instance.balanceOf(staking_instance.address)).div(BIG18).toNumber()); + console.log("Farm FXS owed:", new BigNumber(await staking_instance.ttlRew0Owed()).div(BIG18).toNumber()); + console.log("Farm FXS paid:", new BigNumber(await staking_instance.ttlRew0Paid()).div(BIG18).toNumber()); + console.log("Farm REW1 balance:", new BigNumber(await rew1_tkn_instance.balanceOf(staking_instance.address)).div(BIG18).toNumber()); + console.log("Farm REW1 owed:", new BigNumber(await staking_instance.ttlRew1Owed()).div(BIG18).toNumber()); + console.log("Farm REW1 paid:", new BigNumber(await staking_instance.ttlRew1Paid()).div(BIG18).toNumber()); + + const fxs_bal_acc_1_time1 = new BigNumber(await canFXS_instance.balanceOf(COLLATERAL_FRAX_AND_FXS_OWNER)).div(BIG18).toNumber(); + const fxs_bal_acc_9_time1 = new BigNumber(await canFXS_instance.balanceOf(accounts[9])).div(BIG18).toNumber(); + console.log(chalk.green("accounts[1] FXS balance change:", fxs_bal_acc_1_time1 - fxs_bal_acc_1_time0)); + console.log(chalk.green("accounts[9] FXS balance change:", fxs_bal_acc_9_time1 - fxs_bal_acc_9_time0)); + console.log(chalk.green.bold("Total FXS balance change:", (fxs_bal_acc_1_time1 + fxs_bal_acc_9_time1) - (fxs_bal_acc_1_time0 + fxs_bal_acc_9_time0))); + + + console.log(chalk.hex("#ff8b3d")("====================================================================")); + console.log(chalk.hex("#ff8b3d")("ADVANCING 28 DAYS")); + console.log(chalk.hex("#ff8b3d")("====================================================================")); + // Sync beforehand + await staking_instance.sync({ from: COLLATERAL_FRAX_AND_FXS_OWNER }); + + const current_timestamp_1 = (new BigNumber(await time.latest())).toNumber(); + const period_end_1 = await staking_instance.periodFinish.call(); + + const increase_time_1 = (period_end_1 - current_timestamp_1) + ((3 * 7) * 86400); + console.log("increase_time_1 (days): ", increase_time_1 / 86400); + await time.increase(increase_time_1); + await time.advanceBlock(); + + // Sync afterwards + await staking_instance.sync({ from: COLLATERAL_FRAX_AND_FXS_OWNER }); + + await utilities.printCalcCurCombinedWeight(staking_instance, COLLATERAL_FRAX_AND_FXS_OWNER); + await utilities.printCalcCurCombinedWeight(staking_instance, accounts[9]); + + // Print balances + console.log("Farm FXS balance:", new BigNumber(await canFXS_instance.balanceOf(staking_instance.address)).div(BIG18).toNumber()); + console.log("Farm FXS owed:", new BigNumber(await staking_instance.ttlRew0Owed()).div(BIG18).toNumber()); + console.log("Farm FXS paid:", new BigNumber(await staking_instance.ttlRew0Paid()).div(BIG18).toNumber()); + console.log("Farm REW1 balance:", new BigNumber(await rew1_tkn_instance.balanceOf(staking_instance.address)).div(BIG18).toNumber()); + console.log("Farm REW1 owed:", new BigNumber(await staking_instance.ttlRew1Owed()).div(BIG18).toNumber()); + console.log("Farm REW1 paid:", new BigNumber(await staking_instance.ttlRew1Paid()).div(BIG18).toNumber()); + + // Note the UNI POOL and FXS amount after staking + const regular_balance_01_1 = new BigNumber(await staking_instance.lockedLiquidityOf.call(COLLATERAL_FRAX_AND_FXS_OWNER)).div(BIG18); + const boosted_balance_01_1 = new BigNumber(await staking_instance.combinedWeightOf.call(COLLATERAL_FRAX_AND_FXS_OWNER)).div(BIG18); + const locked_balance_01_1 = new BigNumber(await staking_instance.lockedLiquidityOf.call(COLLATERAL_FRAX_AND_FXS_OWNER)).div(BIG18); + const regular_balance_01_9 = new BigNumber(await staking_instance.lockedLiquidityOf.call(accounts[9])).div(BIG18); + const boosted_balance_01_9 = new BigNumber(await staking_instance.combinedWeightOf.call(accounts[9])).div(BIG18); + const locked_balance_01_9 = new BigNumber(await staking_instance.lockedLiquidityOf.call(accounts[9])).div(BIG18); + console.log("LOCKED LIQUIDITY [1]: ", regular_balance_01_1.toString()); + console.log("COMBINED WEIGHT [1]: ", boosted_balance_01_1.toString()); + console.log("---- LOCKED [1]: ", locked_balance_01_1.toString()); + console.log("LOCKED LIQUIDITY [9]: ", regular_balance_01_9.toString()); + console.log("COMBINED WEIGHT [9]: ", boosted_balance_01_9.toString()); + console.log("---- LOCKED [9]: ", locked_balance_01_9.toString()); + + const user_min_vefxs_for_max_boost_1_2 = new BigNumber(await staking_instance.minVeFXSForMaxBoost.call(COLLATERAL_FRAX_AND_FXS_OWNER)).div(BIG18); + const user_min_vefxs_for_max_boost_9_2 = new BigNumber(await staking_instance.minVeFXSForMaxBoost.call(accounts[9])).div(BIG18); + console.log("user_min_vefxs_for_max_boost_1_2: ", user_min_vefxs_for_max_boost_1_2.toString()); + console.log("user_min_vefxs_for_max_boost_9_2: ", user_min_vefxs_for_max_boost_9_2.toString()); + + // Make sure there is a valid period for the contract and sync it + await staking_instance.sync({ from: COLLATERAL_FRAX_AND_FXS_OWNER }); + + const staking_fxs_earned_28_1 = await staking_instance.earned.call(accounts[1]); + const staking_fxs_earned_28_1_fxs = new BigNumber(staking_fxs_earned_28_1[0]).div(BIG18); + const staking_fxs_earned_28_1_token1 = new BigNumber(staking_fxs_earned_28_1[1]).div(BIG18); + console.log("accounts[1] earnings after 5 weeks [FXS]: ", staking_fxs_earned_28_1_fxs.toString()); + console.log("accounts[1] earnings after 5 weeks [REW1]: ", staking_fxs_earned_28_1_token1.toString()); + + const staking_fxs_earned_28_9 = await staking_instance.earned.call(accounts[9]); + const staking_fxs_earned_28_9_fxs = new BigNumber(staking_fxs_earned_28_9[0]).div(BIG18); + const staking_fxs_earned_28_9_token1 = new BigNumber(staking_fxs_earned_28_9[1]).div(BIG18); + console.log("accounts[9] earnings after 5 weeks [FXS]: ", staking_fxs_earned_28_9_fxs.toString()); + console.log("accounts[9] earnings after 5 weeks [REW1]: ", staking_fxs_earned_28_9_token1.toString()); + + const reward_week_5_fxs = (staking_fxs_earned_28_1_fxs).plus(staking_fxs_earned_28_9_fxs); + const reward_week_5_token1 = (staking_fxs_earned_28_1_token1).plus(staking_fxs_earned_28_9_token1); + const effective_yearly_reward_at_week_5_fxs = reward_week_5_fxs.multipliedBy(52.1429 / 4.0); + const effective_yearly_reward_at_week_5_token1 = reward_week_5_token1.multipliedBy(52.1429 / 4.0); // 1 week delay + console.log("Effective weekly reward at week 5 [FXS]: ", reward_week_5_fxs.div(4).toString()); + console.log("Effective weekly reward at week 5 [REW1]: ", reward_week_5_token1.div(4).toString()); // 1 week delay + console.log("Effective yearly reward at week 5 [FXS]: ", effective_yearly_reward_at_week_5_fxs.toString()); + console.log("Effective yearly reward at week 5 [REW1]: ", effective_yearly_reward_at_week_5_token1.toString()); + + const duration_reward_3 = await staking_instance.getRewardForDuration.call(); + const duration_reward_3_fxs = new BigNumber(duration_reward_3[0]).div(BIG18); + const duration_reward_3_token1 = new BigNumber(duration_reward_3[1]).div(BIG18); + console.log("Expected weekly reward [FXS]: ", duration_reward_3_fxs.toString()); + console.log("Expected weekly reward [REW1]: ", duration_reward_3_token1.toString()); + console.log("Expected yearly reward [FXS]: ", duration_reward_3_fxs.multipliedBy(52.1429).toString()); + console.log("Expected yearly reward [REW1]: ", duration_reward_3_token1.multipliedBy(52.1429).toString()); + + console.log(chalk.yellow.bold("====================================================================")); + console.log(chalk.yellow.bold("Add more to a lock")); + + // Print the info for the stake + let add_more_before = await staking_instance.lockedStakes.call(COLLATERAL_FRAX_AND_FXS_OWNER, 1); + console.log("add_more_before: ", utilities.cleanLockedStake(add_more_before)); + + // Add 1 more LP token to the lock + const addl_amt_add = new BigNumber("1e18"); + await lp_tkn_instance.approve(staking_instance.address, addl_amt_add, { from: COLLATERAL_FRAX_AND_FXS_OWNER }); + await staking_instance.lockAdditional(add_more_before.kek_id, addl_amt_add, { from: COLLATERAL_FRAX_AND_FXS_OWNER }); + + // Print the info for the stake + const add_more_after = await staking_instance.lockedStakes.call(COLLATERAL_FRAX_AND_FXS_OWNER, 1); + console.log("add_more_after: ", utilities.cleanLockedStake(add_more_after)); + + // Make sure the liquidity has increased + const add_liq_before = new BigNumber(add_more_before.liquidity); + const add_liq_after = new BigNumber(add_more_after.liquidity); + const add_liq_diff = add_liq_after.minus(add_liq_before); + console.log("Add liq diff: ", add_liq_diff.toString()); + assert(add_liq_after.isGreaterThan(add_liq_before), `Liquidity did not increase`); + + console.log(chalk.hex("#ff8b3d")("====================================================================")); + console.log(chalk.hex("#ff8b3d")("REFILL REWARDS AND SYNC")); + console.log(chalk.hex("#ff8b3d")("====================================================================")); + + console.log("Give the staking contract 1000 FXS"); + await hre.network.provider.request({ + method: "hardhat_impersonateAccount", + params: [ADDRESS_WITH_FXS] + }); + + await canFXS_instance.transfer(staking_instance.address, new BigNumber("1000e18"), { from: ADDRESS_WITH_FXS }); + + await hre.network.provider.request({ + method: "hardhat_stopImpersonatingAccount", + params: [ADDRESS_WITH_FXS] + }); + + console.log("Give the staking contract 100 REW1"); + await hre.network.provider.request({ + method: "hardhat_impersonateAccount", + params: [ADDRESS_WITH_REW1_TKN] + }); + + await rew1_tkn_instance.transfer(staking_instance.address, new BigNumber("100e18"), { from: ADDRESS_WITH_REW1_TKN }); + + await hre.network.provider.request({ + method: "hardhat_stopImpersonatingAccount", + params: [ADDRESS_WITH_REW1_TKN] + }); + + await staking_instance.sync({ from: COLLATERAL_FRAX_AND_FXS_OWNER }); + + console.log(chalk.hex("#ff8b3d")("====================================================================")); + console.log(chalk.hex("#ff8b3d")("CHECK EARNINGS (SHOULD BE ZERO)")); + console.log(chalk.hex("#ff8b3d")("====================================================================")); + + // Print balances + console.log("Farm FXS balance:", new BigNumber(await canFXS_instance.balanceOf(staking_instance.address)).div(BIG18).toNumber()); + console.log("Farm FXS owed:", new BigNumber(await staking_instance.ttlRew0Owed()).div(BIG18).toNumber()); + console.log("Farm FXS paid:", new BigNumber(await staking_instance.ttlRew0Paid()).div(BIG18).toNumber()); + console.log("Farm REW1 balance:", new BigNumber(await rew1_tkn_instance.balanceOf(staking_instance.address)).div(BIG18).toNumber()); + console.log("Farm REW1 owed:", new BigNumber(await staking_instance.ttlRew1Owed()).div(BIG18).toNumber()); + console.log("Farm REW1 paid:", new BigNumber(await staking_instance.ttlRew1Paid()).div(BIG18).toNumber()); + + const staking_fxs_earned_28PR_1 = await staking_instance.earned.call(accounts[1]); + const staking_fxs_earned_28PR_1_fxs = new BigNumber(staking_fxs_earned_28PR_1[0]).div(BIG18); + const staking_fxs_earned_28PR_1_token1 = new BigNumber(staking_fxs_earned_28PR_1[1]).div(BIG18); + console.log("accounts[1] earnings after 5 weeks (post refill) [FXS]: ", staking_fxs_earned_28PR_1_fxs.toString()); + console.log("accounts[1] earnings after 5 weeks (post refill) [REW1]: ", staking_fxs_earned_28PR_1_token1.toString()); + + const staking_fxs_earned_28PR_9 = await staking_instance.earned.call(accounts[9]); + const staking_fxs_earned_28PR_9_fxs = new BigNumber(staking_fxs_earned_28PR_9[0]).div(BIG18); + const staking_fxs_earned_28PR_9_token1 = new BigNumber(staking_fxs_earned_28PR_9[1]).div(BIG18); + console.log("accounts[9] earnings after 5 weeks (post refill) [FXS]: ", staking_fxs_earned_28PR_9_fxs.toString()); + console.log("accounts[9] earnings after 5 weeks (post refill) [REW1]: ", staking_fxs_earned_28PR_9_token1.toString()); + + const reward_week_5PR_fxs = (staking_fxs_earned_28PR_1_fxs).plus(staking_fxs_earned_28PR_9_fxs); + const reward_week_5PR_token1 = (staking_fxs_earned_28PR_1_token1).plus(staking_fxs_earned_28PR_9_token1); + const effective_yearly_reward_at_week_5PR_fxs = reward_week_5PR_fxs.multipliedBy(52.1429 / 4.0); + const effective_yearly_reward_at_week_5PR_token1 = reward_week_5PR_token1.multipliedBy(52.1429 / 4.0); // 1 week delay + console.log("Effective weekly reward at week 5 (post refill) [FXS]: ", reward_week_5PR_fxs.div(4).toString()); + console.log("Effective weekly reward at week 5 (post refill) [REW1]: ", reward_week_5PR_token1.div(4).toString()); // 1 week delay + console.log("Effective yearly reward at week 5 (post refill) [FXS]: ", effective_yearly_reward_at_week_5PR_fxs.toString()); + console.log("Effective yearly reward at week 5 (post refill) [REW1]: ", effective_yearly_reward_at_week_5PR_token1.toString()); + assert(reward_week_5PR_fxs.isEqualTo(new BigNumber(0)), `Reward should be zero`); + assert(reward_week_5PR_token1.isEqualTo(new BigNumber(0)), `Reward should be zero`); + + const duration_reward_3PR = await staking_instance.getRewardForDuration.call(); + const duration_reward_3PR_fxs = new BigNumber(duration_reward_3PR[0]).div(BIG18); + const duration_reward_3PR_token1 = new BigNumber(duration_reward_3PR[1]).div(BIG18); + console.log("Expected weekly reward [FXS]: ", duration_reward_3PR_fxs.toString()); + console.log("Expected weekly reward [REW1]: ", duration_reward_3PR_token1.toString()); + console.log("Expected yearly reward (post refill) [FXS]: ", duration_reward_3PR_fxs.multipliedBy(52.1429).toString()); + console.log("Expected yearly reward (post refill) [REW1]: ", duration_reward_3PR_token1.multipliedBy(52.1429).toString()); + + + console.log(chalk.hex("#ff8b3d")("====================================================================")); + console.log(chalk.hex("#ff8b3d")("ADVANCE TO DAY 35 (next period)")); + console.log(chalk.hex("#ff8b3d")("====================================================================")); + // Sync beforehand + await staking_instance.sync({ from: COLLATERAL_FRAX_AND_FXS_OWNER }); + + const current_timestamp_2 = (new BigNumber(await time.latest())).toNumber(); + const period_end_2 = await staking_instance.periodFinish.call(); + + // Advance ~7 days + const increase_time_2 = (period_end_2 - current_timestamp_2); + console.log("increase_time_2 (days): ", increase_time_2 / 86400); + await time.increase(increase_time_2); + await time.advanceBlock(); + + // Sync afterwards + await staking_instance.sync({ from: COLLATERAL_FRAX_AND_FXS_OWNER }); + + // Print balances + console.log("Farm FXS balance:", new BigNumber(await canFXS_instance.balanceOf(staking_instance.address)).div(BIG18).toNumber()); + console.log("Farm FXS owed:", new BigNumber(await staking_instance.ttlRew0Owed()).div(BIG18).toNumber()); + console.log("Farm FXS paid:", new BigNumber(await staking_instance.ttlRew0Paid()).div(BIG18).toNumber()); + console.log("Farm REW1 balance:", new BigNumber(await rew1_tkn_instance.balanceOf(staking_instance.address)).div(BIG18).toNumber()); + console.log("Farm REW1 owed:", new BigNumber(await staking_instance.ttlRew1Owed()).div(BIG18).toNumber()); + console.log("Farm REW1 paid:", new BigNumber(await staking_instance.ttlRew1Paid()).div(BIG18).toNumber()); + + const staking_fxs_earned_35_1 = await staking_instance.earned.call(accounts[1]); + const staking_fxs_earned_35_1_fxs = new BigNumber(staking_fxs_earned_35_1[0]).div(BIG18); + const staking_fxs_earned_35_1_token1 = new BigNumber(staking_fxs_earned_35_1[1]).div(BIG18); + console.log("accounts[1] earnings after 6 weeks [FXS]: ", staking_fxs_earned_35_1_fxs.toString()); + console.log("accounts[1] earnings after 6 weeks [REW1]: ", staking_fxs_earned_35_1_token1.toString()); + + const staking_fxs_earned_35_9 = await staking_instance.earned.call(accounts[9]); + const staking_fxs_earned_35_9_fxs = new BigNumber(staking_fxs_earned_35_9[0]).div(BIG18); + const staking_fxs_earned_35_9_token1 = new BigNumber(staking_fxs_earned_35_9[1]).div(BIG18); + console.log("accounts[9] earnings after 6 weeks [FXS]: ", staking_fxs_earned_35_9_fxs.toString()); + console.log("accounts[9] earnings after 6 weeks [REW1]: ", staking_fxs_earned_35_9_token1.toString()); + + const reward_week_6_fxs = (staking_fxs_earned_35_1_fxs).plus(staking_fxs_earned_35_9_fxs); + const reward_week_6_token1 = (staking_fxs_earned_35_1_token1).plus(staking_fxs_earned_35_9_token1); + const effective_yearly_reward_at_week_6_fxs = reward_week_6_fxs.multipliedBy(52.1429); + const effective_yearly_reward_at_week_6_token1 = reward_week_6_token1.multipliedBy(52.1429); // 1 week delay + console.log("Effective weekly reward at week 6 [FXS]: ", reward_week_6_fxs.div(1).toString()); + console.log("Effective weekly reward at week 6 [REW1]: ", reward_week_6_token1.div(1).toString()); // 1 week delay + console.log("Effective yearly reward at week 6 [FXS]: ", effective_yearly_reward_at_week_6_fxs.toString()); + console.log("Effective yearly reward at week 6 [REW1]: ", effective_yearly_reward_at_week_6_token1.toString()); + + const duration_reward_4 = await staking_instance.getRewardForDuration.call(); + const duration_reward_4_fxs = new BigNumber(duration_reward_4[0]).div(BIG18); + const duration_reward_4_token1 = new BigNumber(duration_reward_4[1]).div(BIG18); + console.log("Expected weekly reward [FXS]: ", duration_reward_4_fxs.toString()); + console.log("Expected weekly reward [REW1]: ", duration_reward_4_token1.toString()); + console.log("Expected yearly reward [FXS]: ", duration_reward_4_fxs.multipliedBy(52.1429).toString()); + console.log("Expected yearly reward [REW1]: ", duration_reward_4_token1.multipliedBy(52.1429).toString()); + + console.log(chalk.hex("#ff8b3d")("====================================================================")); + console.log(chalk.hex("#ff8b3d")("WITHDRAW STAKES")); + console.log(chalk.hex("#ff8b3d")("====================================================================")); + + // Account 9 withdraws and claims its locked stake + await staking_instance.withdrawLocked(locked_stake_structs_9_0[0].kek_id, { from: accounts[9] }); + await staking_instance.getReward({ from: accounts[9] }); + await expectRevert.unspecified(staking_instance.withdrawLocked(locked_stake_structs_1_0[1].kek_id, { from: COLLATERAL_FRAX_AND_FXS_OWNER })); + + const _total_liquidity_locked_1 = new BigNumber(await staking_instance.totalLiquidityLocked.call()).div(BIG18); + const _total_combined_weight_1 = new BigNumber(await staking_instance.totalCombinedWeight.call()).div(BIG18); + console.log("_total_liquidity_locked GLOBAL: ", _total_liquidity_locked_1.toString()); + console.log("_total_combined_weight GLOBAL: ", _total_combined_weight_1.toString()); + + console.log("UNLOCKING ALL STAKES"); + await staking_instance.unlockStakes({ from: STAKING_OWNER }); + await staking_instance.withdrawLocked(locked_stake_structs_1_0[1].kek_id, { from: COLLATERAL_FRAX_AND_FXS_OWNER }); + + await utilities.printCalcCurCombinedWeight(staking_instance, COLLATERAL_FRAX_AND_FXS_OWNER); + await utilities.printCalcCurCombinedWeight(staking_instance, accounts[9]); + + const user_min_vefxs_for_max_boost_1_3 = new BigNumber(await staking_instance.minVeFXSForMaxBoost.call(COLLATERAL_FRAX_AND_FXS_OWNER)).div(BIG18); + const user_min_vefxs_for_max_boost_9_3 = new BigNumber(await staking_instance.minVeFXSForMaxBoost.call(accounts[9])).div(BIG18); + console.log("user_min_vefxs_for_max_boost_1_3: ", user_min_vefxs_for_max_boost_1_3.toString()); + console.log("user_min_vefxs_for_max_boost_9_3: ", user_min_vefxs_for_max_boost_9_3.toString()); + + const _total_liquidity_locked_2 = new BigNumber(await staking_instance.totalLiquidityLocked.call()).div(BIG18); + const _total_combined_weight_2 = new BigNumber(await staking_instance.totalCombinedWeight.call()).div(BIG18); + const frax_per_lp_token_2 = new BigNumber(await staking_instance.fraxPerLPToken.call()).div(BIG18); + console.log("_total_liquidity_locked GLOBAL: ", _total_liquidity_locked_2.toString()); + console.log("_total_combined_weight GLOBAL: ", _total_combined_weight_2.toString()); + console.log("frax_per_lp_token_2 GLOBAL: ", frax_per_lp_token_2.toString()); + + // Claim rewards + console.log("Claim rewards"); + await staking_instance.getReward({ from: COLLATERAL_FRAX_AND_FXS_OWNER }); + await staking_instance.getReward({ from: accounts[9] }); + + console.log(chalk.hex("#ff8b3d")("====================================================================")); + console.log(chalk.hex("#ff8b3d")("CHECK EARNINGS AGAIN")); + console.log(chalk.hex("#ff8b3d")("====================================================================")); + + // Sync beforehand + await staking_instance.sync({ from: COLLATERAL_FRAX_AND_FXS_OWNER }); + + const current_timestamp_3 = (new BigNumber(await time.latest())).toNumber(); + const period_end_3 = await staking_instance.periodFinish.call(); + + // Advance to the next period + const increase_time_3 = (period_end_3 - current_timestamp_3); + console.log("increase_time_3 (days): ", increase_time_3 / 86400); + await time.increase(increase_time_3); + await time.advanceBlock(); + + // Sync afterwards + await staking_instance.sync({ from: COLLATERAL_FRAX_AND_FXS_OWNER }); + + // Print balances + console.log("Farm FXS balance:", new BigNumber(await canFXS_instance.balanceOf(staking_instance.address)).div(BIG18).toNumber()); + console.log("Farm FXS owed:", new BigNumber(await staking_instance.ttlRew0Owed()).div(BIG18).toNumber()); + console.log("Farm FXS paid:", new BigNumber(await staking_instance.ttlRew0Paid()).div(BIG18).toNumber()); + console.log("Farm REW1 balance:", new BigNumber(await rew1_tkn_instance.balanceOf(staking_instance.address)).div(BIG18).toNumber()); + console.log("Farm REW1 owed:", new BigNumber(await staking_instance.ttlRew1Owed()).div(BIG18).toNumber()); + console.log("Farm REW1 paid:", new BigNumber(await staking_instance.ttlRew1Paid()).div(BIG18).toNumber()); + + const staking_fxs_earned_PW_1 = await staking_instance.earned.call(accounts[1]); + const staking_fxs_earned_PW_1_fxs = new BigNumber(staking_fxs_earned_PW_1[0]).div(BIG18); + const staking_fxs_earned_PW_1_token1 = new BigNumber(staking_fxs_earned_PW_1[1]).div(BIG18); + console.log("accounts[1] earnings leftover [FXS]: ", staking_fxs_earned_PW_1_fxs.toString()); + console.log("accounts[1] earnings leftover [REW1]: ", staking_fxs_earned_PW_1_token1.toString()); + + const staking_fxs_earned_PW_9 = await staking_instance.earned.call(accounts[9]); + const staking_fxs_earned_PW_9_fxs = new BigNumber(staking_fxs_earned_PW_9[0]).div(BIG18); + const staking_fxs_earned_PW_9_token1 = new BigNumber(staking_fxs_earned_PW_9[1]).div(BIG18); + console.log("accounts[9] earnings leftover [FXS]: ", staking_fxs_earned_PW_9_fxs.toString()); + console.log("accounts[9] earnings leftover [REW1]: ", staking_fxs_earned_PW_9_token1.toString()); + assert(staking_fxs_earned_PW_9_fxs.isEqualTo(new BigNumber(0)), `Reward should be zero`); + assert(staking_fxs_earned_PW_9_token1.isEqualTo(new BigNumber(0)), `Reward should be zero`); + + const duration_reward_5 = await staking_instance.getRewardForDuration.call(); + const duration_reward_5_fxs = new BigNumber(duration_reward_5[0]).div(BIG18); + const duration_reward_5_token1 = new BigNumber(duration_reward_5[1]).div(BIG18); + console.log("Expected weekly reward [FXS]: ", duration_reward_5_fxs.toString()); + console.log("Expected weekly reward [REW1]: ", duration_reward_5_token1.toString()); + + }); + + + it("Migration Staking / Withdrawal Tests", async () => { + + // Advance 1 day + await time.increase((1 * 86400) + 1); + await time.advanceBlock(); + + // Untoggle the stake unlocking + await staking_instance.unlockStakes({ from: STAKING_OWNER }); + + // Stake normally again for next part + // Need to approve first so the staking can use transfer + const stake_amt_unlocked = new BigNumber("5e18"); + const stake_amt_locked = new BigNumber("5e18"); + + // Allow the migrator function to migrate for you + await staking_instance.stakerAllowMigrator(MIGRATOR_ADDRESS, { from: COLLATERAL_FRAX_AND_FXS_OWNER }); + + // Print the balance + console.log("accounts[1] ERC20 balanceOf LP:", (new BigNumber(await lp_tkn_instance.balanceOf(COLLATERAL_FRAX_AND_FXS_OWNER))).div(BIG18).toNumber()); + + // Stake Locked + await lp_tkn_instance.approve(staking_instance.address, stake_amt_locked, { from: COLLATERAL_FRAX_AND_FXS_OWNER }); + await staking_instance.stakeLocked(stake_amt_locked, 7 * 86400, { from: COLLATERAL_FRAX_AND_FXS_OWNER }); + + // Show the stake structs + const locked_stake_structs = await staking_instance.lockedStakesOf.call(COLLATERAL_FRAX_AND_FXS_OWNER); + console.log("LOCKED STAKES [1]: ", locked_stake_structs); + + // Turn on migrations + await staking_instance.toggleMigrations({ from: STAKING_OWNER }); + + // Print balances before + console.log("accounts[1] staked lockedLiquidityOf :", (new BigNumber(await staking_instance.lockedLiquidityOf(COLLATERAL_FRAX_AND_FXS_OWNER))).div(BIG18).toNumber()); + console.log("accounts[1] staked combinedWeightOf :", (new BigNumber(await staking_instance.combinedWeightOf(COLLATERAL_FRAX_AND_FXS_OWNER))).div(BIG18).toNumber()); + + // Have the migrator withdraw locked tokens + const withdraw_locked_amt = new BigNumber ("5e18"); + await staking_instance.migrator_withdraw_locked(COLLATERAL_FRAX_AND_FXS_OWNER, locked_stake_structs[2].kek_id, { from: MIGRATOR_ADDRESS }); + console.log(`Migrator (accounts[10]) withdrew ${withdraw_locked_amt.div(BIG18)} (E18) locked LP tokens from accounts[1]`); + console.log("Migrator (accounts[10]) ERC20 balanceOf:", (new BigNumber(await lp_tkn_instance.balanceOf(MIGRATOR_ADDRESS))).div(BIG18).toNumber()); + console.log("accounts[1] staked lockedLiquidityOf:", (new BigNumber(await staking_instance.lockedLiquidityOf(COLLATERAL_FRAX_AND_FXS_OWNER))).div(BIG18).toNumber()); + console.log("accounts[1] staked combinedWeightOf:", (new BigNumber(await staking_instance.combinedWeightOf(COLLATERAL_FRAX_AND_FXS_OWNER))).div(BIG18).toNumber()); + console.log(""); + + // Proxy locked stake for someone else as the migrator + const proxy_stake_lock_amt = new BigNumber ("5e18"); + await lp_tkn_instance.approve(staking_instance.address, proxy_stake_lock_amt, { from: MIGRATOR_ADDRESS }); + let block_time_current_1 = (await time.latest()).toNumber(); + await staking_instance.migrator_stakeLocked_for(COLLATERAL_FRAX_AND_FXS_OWNER, proxy_stake_lock_amt, 28 * 86400, block_time_current_1, { from: MIGRATOR_ADDRESS }); + console.log(`accounts[1] lock staked ${proxy_stake_lock_amt.div(BIG18)} (E18) LP tokens for account[8]`); + console.log("Migrator (accounts[10]) ERC20 balanceOf:", (new BigNumber(await lp_tkn_instance.balanceOf(MIGRATOR_ADDRESS))).div(BIG18).toNumber()); + console.log("accounts[1] staked lockedLiquidityOf:", (new BigNumber(await staking_instance.lockedLiquidityOf(COLLATERAL_FRAX_AND_FXS_OWNER))).div(BIG18).toNumber()); + console.log("accounts[1] staked combinedWeightOf:", (new BigNumber(await staking_instance.combinedWeightOf(COLLATERAL_FRAX_AND_FXS_OWNER))).div(BIG18).toNumber()); + console.log(""); + + + }); + + it("Fail Tests ", async () => { + + const test_amount_1 = new BigNumber ("1e18"); + const locked_stake_structs = await staking_instance.lockedStakesOf.call(COLLATERAL_FRAX_AND_FXS_OWNER); + + console.log(chalk.blue("=============TEST NOT IN MIGRATION [SHOULD FAIL]=============")); + + // Turn off migrations + await staking_instance.toggleMigrations({ from: STAKING_OWNER }); + + console.log("---------TRY TO migrator_withdraw_locked WHILE NOT IN MIGRATION---------"); + await expectRevert( + staking_instance.migrator_withdraw_locked(COLLATERAL_FRAX_AND_FXS_OWNER, locked_stake_structs[2].kek_id, { from: MIGRATOR_ADDRESS }), + "Not in migration" + ); + + console.log("---------TRY TO migrator_stakeLocked_for WHILE NOT IN MIGRATION---------"); + let block_time_current_2 = (await time.latest()).toNumber(); + await expectRevert( + staking_instance.migrator_stakeLocked_for(COLLATERAL_FRAX_AND_FXS_OWNER, test_amount_1, 28 * 86400, block_time_current_2, { from: MIGRATOR_ADDRESS }), + "Not in migration" + ); + + console.log("---------TRY TO ALLOW A WRONG MIGRATOR---------"); + await expectRevert( + staking_instance.stakerAllowMigrator(INVESTOR_CUSTODIAN_ADDRESS, { from: COLLATERAL_FRAX_AND_FXS_OWNER }), + "Invalid migrator address" + ); + + console.log("---------TRY TO DO EMERGENCY WITHDRAWALS WHILE NOT IN MIGRATION---------"); + await expectRevert( + staking_instance.recoverERC20(lp_tkn_instance.address, test_amount_1, { from: STAKING_OWNER }), + "Not in migration" + ); + + console.log(chalk.blue("=============TEST TRYING TO MIGRATE NOT AS A MIGRATOR [SHOULD FAIL]=============")); + + // Turn on migrations + await staking_instance.toggleMigrations({ from: STAKING_OWNER }); + + console.log("---------TRY TO migrator_withdraw_locked NOT AS THE MIGRATOR---------"); + await expectRevert( + staking_instance.migrator_withdraw_locked(COLLATERAL_FRAX_AND_FXS_OWNER, locked_stake_structs[2].kek_id, { from: INVESTOR_CUSTODIAN_ADDRESS }), + "Mig. invalid or unapproved" + ); + + console.log("---------TRY TO migrator_stakeLocked_for NOT AS THE MIGRATOR---------"); + let block_time_current_3 = (await time.latest()).toNumber(); + await expectRevert( + staking_instance.migrator_stakeLocked_for(COLLATERAL_FRAX_AND_FXS_OWNER, test_amount_1, 28 * 86400, block_time_current_3, { from: INVESTOR_CUSTODIAN_ADDRESS }), + "Mig. invalid or unapproved" + ); + + console.log("---------TRY TO migrator_withdraw_locked AS A NOW NON-APPROVED MIGRATOR ---------"); + // Staker disallows MIGRATOR_ADDRESS + await staking_instance.stakerDisallowMigrator(MIGRATOR_ADDRESS, { from: COLLATERAL_FRAX_AND_FXS_OWNER }) + + await expectRevert( + staking_instance.migrator_withdraw_locked(COLLATERAL_FRAX_AND_FXS_OWNER, locked_stake_structs[2].kek_id, { from: MIGRATOR_ADDRESS }), + "Mig. invalid or unapproved" + ); + + console.log("---------TRY TO migrator_withdraw_unlocked AS A NOW INVALID MIGRATOR ---------"); + // Staker re-allows MIGRATOR_ADDRESS + await staking_instance.stakerAllowMigrator(MIGRATOR_ADDRESS, { from: COLLATERAL_FRAX_AND_FXS_OWNER }) + + // But governance now disallows it + await staking_instance.removeMigrator(MIGRATOR_ADDRESS, { from: STAKING_OWNER }); + + await expectRevert( + staking_instance.migrator_withdraw_locked(COLLATERAL_FRAX_AND_FXS_OWNER, locked_stake_structs[2].kek_id, { from: MIGRATOR_ADDRESS }), + "Mig. invalid or unapproved" + ); + + }); +}); \ No newline at end of file diff --git a/src/hardhat/test/truffle-fixture-Arbitrum.js b/src/hardhat/test/truffle-fixture-Arbitrum.js index ded225cd..6ce46dc1 100644 --- a/src/hardhat/test/truffle-fixture-Arbitrum.js +++ b/src/hardhat/test/truffle-fixture-Arbitrum.js @@ -24,6 +24,7 @@ const CrossChainOracle = artifacts.require("Oracle/CrossChainOracle"); // Staking contracts const FraxCCFarmV2_ArbiCurveVSTFRAX = artifacts.require("Staking/Variants/FraxCCFarmV2_ArbiCurveVSTFRAX"); const FraxCCFarmV2_SaddleArbUSDv2 = artifacts.require("Staking/Variants/FraxCCFarmV2_SaddleArbUSDv2"); +const FraxCCFarmV3_ArbiSaddleL2D4 = artifacts.require("Staking/Variants/FraxCCFarmV3_ArbiSaddleL2D4"); // AMOs const SushiSwapLiquidityAMO_ARBI = artifacts.require("Misc_AMOs/__CROSSCHAIN/Arbitrum/SushiSwapLiquidityAMO_ARBI.sol"); @@ -52,7 +53,8 @@ module.exports = async (deployer) => { // Staking let FraxCCFarmV2_ArbiCurveVSTFRAX_instance; - let fraxCCFarmV2_SaddleArbUSDv2_instance; + let FraxCCFarmV2_SaddleArbUSDv2_instance; + let FraxCCFarmV3_ArbiSaddleL2D4_instance; // AMOs let curve_amo_arbi_instance; @@ -182,7 +184,7 @@ module.exports = async (deployer) => { console.log(chalk.yellow("========== FraxCCFarmV2_SaddleArbUSDv2 ==========")); // FraxCCFarmV2_SaddleArbUSDv2 - fraxCCFarmV2_SaddleArbUSDv2_instance = await FraxCCFarmV2_SaddleArbUSDv2.new( + FraxCCFarmV2_SaddleArbUSDv2_instance = await FraxCCFarmV2_SaddleArbUSDv2.new( THE_ACCOUNTS[6], CONTRACT_ADDRESSES.arbitrum.bridge_tokens.anyFXS, // anyFXS CONTRACT_ADDRESSES.arbitrum.canonicals.FXS, // canFXS @@ -193,7 +195,17 @@ module.exports = async (deployer) => { "0x0000000000000000000000000000000000000000", // Rewarder ); - + console.log(chalk.yellow("========== FraxCCFarmV3_ArbiSaddleL2D4 ==========")); + // FraxCCFarmV3_ArbiSaddleL2D4 + FraxCCFarmV3_ArbiSaddleL2D4_instance = await FraxCCFarmV3_ArbiSaddleL2D4.new( + THE_ACCOUNTS[6], + CONTRACT_ADDRESSES.arbitrum.canonicals.FXS, // canFXS + CONTRACT_ADDRESSES.arbitrum.reward_tokens.SDL, + CONTRACT_ADDRESSES.arbitrum.bearer_tokens.saddleL2D4, + CONTRACT_ADDRESSES.arbitrum.canonicals.FRAX, // canFRAX + CONTRACT_ADDRESSES.arbitrum.multisigs.Comptrollers, // Timelock + "0x0000000000000000000000000000000000000000", // Rewarder + ); // console.log(chalk.yellow("========== CurveAMO_ARBI ==========")); // curve_amo_arbi_instance = await CurveAMO_ARBI.new( @@ -239,7 +251,8 @@ module.exports = async (deployer) => { CrossChainBridgeBacker_ARBI_AnySwap.setAsDeployed(cross_chain_bridge_backer_instance); CrossChainOracle.setAsDeployed(cross_chain_oracle_instance); FraxCCFarmV2_ArbiCurveVSTFRAX.setAsDeployed(FraxCCFarmV2_ArbiCurveVSTFRAX_instance); - FraxCCFarmV2_SaddleArbUSDv2.setAsDeployed(fraxCCFarmV2_SaddleArbUSDv2_instance); + FraxCCFarmV2_SaddleArbUSDv2.setAsDeployed(FraxCCFarmV2_SaddleArbUSDv2_instance); + FraxCCFarmV3_ArbiSaddleL2D4.setAsDeployed(FraxCCFarmV3_ArbiSaddleL2D4_instance); SushiSwapLiquidityAMO_ARBI.setAsDeployed(sushiswap_liquidity_amo_arbi_instance); CurveAMO_ARBI.setAsDeployed(curve_amo_arbi_instance); } \ No newline at end of file diff --git a/src/hardhat/test/truffle-fixture.js b/src/hardhat/test/truffle-fixture.js index 6d60c90a..bb39566e 100644 --- a/src/hardhat/test/truffle-fixture.js +++ b/src/hardhat/test/truffle-fixture.js @@ -62,10 +62,11 @@ const IUniswapV3PositionsNFT = artifacts.require("Uniswap_V3/IUniswapV3Positions // veFPIS const veFPIS = artifacts.require("Curve/veFPIS"); +const veFPISYieldDistributorV5 = artifacts.require("Staking/veFPISYieldDistributorV5"); // veFXS const veFXS = artifacts.require("Curve/IveFXS"); -const veFXSYieldDistributorV4 = artifacts.require("Staking/veFXSYieldDistributorV4.sol"); +const veFXSYieldDistributorV4 = artifacts.require("Staking/veFXSYieldDistributorV4"); const veFXSBoost = artifacts.require("Curve/IVotingEscrowDelegation"); const veFXSBoostDelegationProxy = artifacts.require("Curve/IDelegationProxy"); @@ -127,6 +128,7 @@ module.exports = async (deployer) => { // veFPIS let veFPIS_instance; + let veFPISYieldDistributorV5_instance; // veFXS let veFXS_instance; @@ -231,16 +233,20 @@ module.exports = async (deployer) => { console.log(chalk.yellow('========== veFPIS ==========')); // veFPIS - veFPIS_instance = await veFPIS.new( - CONTRACT_ADDRESSES.ethereum.canonicals.FPIS, - "veFPIS", - "veFPIS", - "veFPIS_1.0.0" - ); + veFPIS_instance = await veFPIS.new(); // // Add in a gauge type // await frax_gauge_controller_v2.add_type("Ethereum Mainnet", "1000000000000000000", { from: THE_ACCOUNTS[0] }); + console.log(chalk.yellow('========== veFPISYieldDistributorV5 ==========')); + // veFPISYieldDistributorV5 + veFPISYieldDistributorV5_instance = await veFPISYieldDistributorV5.new( + THE_ACCOUNTS[6], + CONTRACT_ADDRESSES.ethereum.canonicals.FPIS, + CONTRACT_ADDRESSES.ethereum.misc.timelock, + veFPIS_instance.address + ); + // console.log(chalk.yellow("========== FraxMiddlemanGauge_ARBI_Curve_VSTFRAX ==========")); // middlemanGauge_ARBI_Curve_VSTFRAX = await FraxMiddlemanGauge_ARBI_Curve_VSTFRAX.new( // THE_ACCOUNTS[1], @@ -577,6 +583,7 @@ module.exports = async (deployer) => { console.log(chalk.yellow("--------DEPLOYING veFPIS CONTRACTS--------")); veFPIS.setAsDeployed(veFPIS_instance); + veFPISYieldDistributorV5.setAsDeployed(veFPISYieldDistributorV5_instance); console.log(chalk.yellow("--------DEPLOYING veFXS CONTRACTS--------")); veFXS.setAsDeployed(veFXS_instance); diff --git a/src/hardhat/test/veFPISYieldDistributorV5-Tests.js b/src/hardhat/test/veFPISYieldDistributorV5-Tests.js new file mode 100644 index 00000000..2bf49a4d --- /dev/null +++ b/src/hardhat/test/veFPISYieldDistributorV5-Tests.js @@ -0,0 +1,472 @@ +const path = require('path'); +const envPath = path.join(__dirname, '../../.env'); +require('dotenv').config({ path: envPath }); + +const BigNumber = require('bignumber.js'); +const util = require('util'); +const chalk = require('chalk'); +const Contract = require('web3-eth-contract'); +const { expectRevert, time } = require('@openzeppelin/test-helpers'); +const { expect } = require("chai"); + +const constants = require(path.join(__dirname, '../../../dist/types/constants')); + +// Set provider for all later instances to use +Contract.setProvider('http://127.0.0.1:7545'); + +global.artifacts = artifacts; +global.web3 = web3; + +const hre = require("hardhat"); + +// Core +const ERC20 = artifacts.require("contracts/ERC20/ERC20.sol:ERC20"); + +// FRAX core +const FPIS = artifacts.require("FPI/FPIS"); + +// veFPIS related +const veFPIS = artifacts.require("Curve/veFPIS"); +const veFPISYieldDistributorV5 = artifacts.require("Staking/veFPISYieldDistributorV5"); + +const BIG6 = new BigNumber("1e6"); +const BIG18 = new BigNumber("1e18"); +const TIMELOCK_DELAY = 86400 * 2; // 2 days +const DUMP_ADDRESS = "0x6666666666666666666666666666666666666666"; +const METAMASK_ADDRESS = "0x6666666666666666666666666666666666666666"; + +const REWARDS_DURATION = 7 * 86400; // 7 days + +contract('veFPISYieldDistributorV5-Tests', async (accounts) => { + CONTRACT_ADDRESSES = constants.CONTRACT_ADDRESSES; + + // Constants + let ORIGINAL_FRAX_ONE_ADDRESS; + let COLLATERAL_FRAX_AND_FXS_OWNER; + let ORACLE_ADMIN; + let POOL_CREATOR; + let TIMELOCK_ADMIN; + let GOVERNOR_GUARDIAN_ADDRESS; + let STAKING_OWNER; + let STAKING_REWARDS_DISTRIBUTOR; + let INVESTOR_CUSTODIAN_ADDRESS; + let MIGRATOR_ADDRESS; + const ADDRESS_WITH_FPIS = '0x1e84614543Ab707089CebB022122503462AC51b3'; + + // Initialize core contract instances + let fpis_instance; + + // Initialize veFPIS related instances + let veFPIS_instance; + let veFPISYieldDistributor_instance; + + beforeEach(async() => { + + await hre.network.provider.request({ + method: "hardhat_impersonateAccount", + params: [process.env.FRAX_ONE_ADDRESS] + }); + + // Constants + ORIGINAL_FRAX_ONE_ADDRESS = process.env.FRAX_ONE_ADDRESS; + DEPLOYER_ADDRESS = accounts[0]; + COLLATERAL_FRAX_AND_FXS_OWNER = accounts[1]; + ORACLE_ADMIN = accounts[2]; + POOL_CREATOR = accounts[3]; + TIMELOCK_ADMIN = accounts[4]; + GOVERNOR_GUARDIAN_ADDRESS = accounts[5]; + STAKING_OWNER = accounts[6]; + STAKING_REWARDS_DISTRIBUTOR = accounts[7]; + INVESTOR_CUSTODIAN_ADDRESS = accounts[8]; + MIGRATOR_ADDRESS = accounts[10]; + + // Fill core contract instances + fpis_instance = await FPIS.deployed(); + + // Initialize veFPIS related instances + veFPIS_instance = await veFPIS.deployed(); + veFPISYieldDistributor_instance = await veFPISYieldDistributorV5.deployed(); + }); + + afterEach(async() => { + await hre.network.provider.request({ + method: "hardhat_stopImpersonatingAccount", + params: [process.env.FRAX_ONE_ADDRESS] + }); + }) + + it('Initialization related', async () => { + console.log("=========================Initialization========================="); + console.log("----------------------------"); + + // Fake move in some FPIS + console.log("Seed some accounts with FPIS"); + + await hre.network.provider.request({ + method: "hardhat_impersonateAccount", + params: [ADDRESS_WITH_FPIS] + }); + + // await fpis_instance.transfer(veFPISYieldDistributor_instance.address, new BigNumber("500000e18"), { from: ADDRESS_WITH_FPIS }); + await fpis_instance.transfer(COLLATERAL_FRAX_AND_FXS_OWNER, new BigNumber("250000e18"), { from: ADDRESS_WITH_FPIS }); + await fpis_instance.transfer(accounts[9], new BigNumber("10000e18"), { from: ADDRESS_WITH_FPIS }); + + await hre.network.provider.request({ + method: "hardhat_stopImpersonatingAccount", + params: [ADDRESS_WITH_FPIS] + }); + + + // Get some veFPIS + const deposit_amount_1 = 200000; + const deposit_amount_9 = 1250; + const deposit_amount_1_e18 = new BigNumber(`${deposit_amount_1}e18`); + const deposit_amount_9_e18 = new BigNumber(`${deposit_amount_9}e18`); + console.log(`Deposit (accounts[1]) ${deposit_amount_1} FPIS (4 years) for veFPIS`); + console.log(`Deposit (accounts[9]) ${deposit_amount_9} FPIS (4 years) for veFPIS`); + + const veFPIS_deposit_days = (4 * 365); // 4 years + let block_time_current = (await time.latest()).toNumber(); + const veFPIS_deposit_end_timestamp = block_time_current + ((veFPIS_deposit_days * 86400) + 1); + await fpis_instance.approve(veFPIS_instance.address, deposit_amount_1_e18, { from: COLLATERAL_FRAX_AND_FXS_OWNER }); + await fpis_instance.approve(veFPIS_instance.address, deposit_amount_9_e18, { from: accounts[9] }); + await veFPIS_instance.create_lock(deposit_amount_1_e18, veFPIS_deposit_end_timestamp, { from: COLLATERAL_FRAX_AND_FXS_OWNER }); + await veFPIS_instance.create_lock(deposit_amount_9_e18, veFPIS_deposit_end_timestamp, { from: accounts[9] }); + + // console.log("Initializing Contract"); + // await veFPISYieldDistributor_instance.initializeDefault({ from: STAKING_OWNER }); + + console.log("Allow COLLATERAL_FRAX_AND_FXS_OWNER as a reward notifier"); + await veFPISYieldDistributor_instance.toggleRewardNotifier(COLLATERAL_FRAX_AND_FXS_OWNER, { from: STAKING_OWNER }); + + console.log("----------Notify first half of 1st week's reward----------"); + const yield_week_1 = 3.5; + const yield_week_1_e18 = new BigNumber(`${yield_week_1}e18`); + await fpis_instance.approve(veFPISYieldDistributor_instance.address, yield_week_1_e18, { from: COLLATERAL_FRAX_AND_FXS_OWNER }); + await veFPISYieldDistributor_instance.notifyRewardAmount(yield_week_1_e18, { from: COLLATERAL_FRAX_AND_FXS_OWNER }); + console.log("1st week Yield Rate (1st half): ", new BigNumber(await veFPISYieldDistributor_instance.getYieldForDuration.call()).div(BIG18).toNumber()); + + console.log("----------Notify second half of 1st week's reward----------"); + await fpis_instance.approve(veFPISYieldDistributor_instance.address, yield_week_1_e18, { from: COLLATERAL_FRAX_AND_FXS_OWNER }); + await veFPISYieldDistributor_instance.notifyRewardAmount(yield_week_1_e18, { from: COLLATERAL_FRAX_AND_FXS_OWNER }); + console.log("1st week Yield Rate (2nd half): ", new BigNumber(await veFPISYieldDistributor_instance.getYieldForDuration.call()).div(BIG18).toNumber()); + }); + + it('Normal yield', async () => { + console.log("=========================Normal Yields========================="); + console.log("Day 0"); + // Note accounts[1] + const vefpis_at_1st_checkpoint_1 = new BigNumber(await veFPIS_instance.balanceOf.call(COLLATERAL_FRAX_AND_FXS_OWNER)).div(BIG18); + const fpis_at_1st_checkpoint_1 = new BigNumber(await fpis_instance.balanceOf.call(COLLATERAL_FRAX_AND_FXS_OWNER)).div(BIG18); + const fpis_in_vefpis_at_1st_checkpoint_1 = new BigNumber((await veFPIS_instance.locked.call(COLLATERAL_FRAX_AND_FXS_OWNER)).amount).div(BIG18); + const yield_at_1st_checkpoint_1_FPIS = new BigNumber(await veFPISYieldDistributor_instance.yields.call(COLLATERAL_FRAX_AND_FXS_OWNER)).div(BIG18); + expect(yield_at_1st_checkpoint_1_FPIS.toNumber()).to.equal(0); + + await veFPISYieldDistributor_instance.getYield({ from: COLLATERAL_FRAX_AND_FXS_OWNER }); + console.log("accounts[1] at first getYield"); + console.log("accounts[1] veFPIS balance:", vefpis_at_1st_checkpoint_1.toNumber()); + console.log("accounts[1] FPIS balance:", fpis_at_1st_checkpoint_1.toNumber()); + console.log("accounts[1] FPIS in veFPIS:", fpis_in_vefpis_at_1st_checkpoint_1.toNumber()); + console.log("accounts[1] staking yields() [FPIS]:", yield_at_1st_checkpoint_1_FPIS.toNumber()); + console.log("accounts[1] userVeFPISCheckpointed:", (new BigNumber(await veFPISYieldDistributor_instance.userVeFPISCheckpointed(COLLATERAL_FRAX_AND_FXS_OWNER))).div(BIG18).toNumber()); + console.log(""); + + // Note accounts[9] + const vefpis_at_1st_checkpoint_9 = new BigNumber(await veFPIS_instance.balanceOf.call(accounts[9])).div(BIG18); + const fpis_at_1st_checkpoint_9 = new BigNumber(await fpis_instance.balanceOf.call(accounts[9])).div(BIG18); + const yield_at_1st_checkpoint_9_FPIS = new BigNumber(await veFPISYieldDistributor_instance.yields(accounts[9])).div(BIG18); + expect(yield_at_1st_checkpoint_9_FPIS.toNumber()).to.equal(0); + + await veFPISYieldDistributor_instance.getYield({ from: accounts[9] }); + console.log("accounts[9] at first getYield"); + console.log("accounts[9] veFPIS balance:", vefpis_at_1st_checkpoint_9.toNumber()); + console.log("accounts[9] FPIS balance:", fpis_at_1st_checkpoint_9.toNumber()); + console.log("accounts[9] staking yields() [FPIS]:", yield_at_1st_checkpoint_9_FPIS.toNumber()); + console.log("accounts[9] userVeFPISCheckpointed:", (new BigNumber(await veFPISYieldDistributor_instance.userVeFPISCheckpointed(accounts[9]))).div(BIG18).toNumber()); + console.log(""); + + // Note the last update time + const block_time_before = (await time.latest()).toNumber(); + console.log("current block time (in seconds):", block_time_before); + + // Note the total lastUpdateTime + let distributor_lastUpdateTime = new BigNumber(await veFPISYieldDistributor_instance.lastUpdateTime.call()); + console.log("Distributor lastUpdateTime:", distributor_lastUpdateTime.toNumber()); + + // Note the total periodFinish + let distributor_periodFinish = new BigNumber(await veFPISYieldDistributor_instance.periodFinish.call()); + console.log("Distributor periodFinish:", distributor_periodFinish.toNumber()); + + // Note the total lastTimeYieldApplicable + let distributor_lastTimeYieldApplicable = new BigNumber(await veFPISYieldDistributor_instance.lastTimeYieldApplicable.call()); + console.log("Distributor lastTimeYieldApplicable():", distributor_lastTimeYieldApplicable.toNumber()); + + console.log("===================================================================="); + console.log("Advance one week (one yieldDuration period)"); + // Advance 7 days so the yield can be claimed + await time.increase((7 * 86400) + 1); + await time.advanceBlock(); + //await frax_instance.refreshCollateralRatio(); + console.log(""); + + // Note the last update time + let block_time_after = (await time.latest()).toNumber(); + console.log("block time after waiting one week (in seconds):", block_time_after); + + // Make sure there is a valid period for the contract + await veFPISYieldDistributor_instance.sync({ from: COLLATERAL_FRAX_AND_FXS_OWNER }); + + // Note the total lastUpdateTime + distributor_lastUpdateTime = new BigNumber(await veFPISYieldDistributor_instance.lastUpdateTime.call()); + console.log("Distributor lastUpdateTime:", distributor_lastUpdateTime.toNumber()); + + // Note the total periodFinish + distributor_periodFinish = new BigNumber(await veFPISYieldDistributor_instance.periodFinish.call()); + console.log("Distributor periodFinish:", distributor_periodFinish.toNumber()); + + // Note the total lastTimeYieldApplicable + distributor_lastTimeYieldApplicable = new BigNumber(await veFPISYieldDistributor_instance.lastTimeYieldApplicable.call()); + console.log("Distributor lastTimeYieldApplicable():", distributor_lastTimeYieldApplicable.toNumber()); + + // Note the total veFPIS supply stored + const distributor_total_vefpis_supply_Stored = new BigNumber(await veFPISYieldDistributor_instance.totalVeFPISSupplyStored.call()).div(BIG18); + console.log("Distributor totalVeFPISSupplyStored():", distributor_total_vefpis_supply_Stored.toNumber()); + + // Quick checkpoint + await veFPISYieldDistributor_instance.checkpoint({ from: COLLATERAL_FRAX_AND_FXS_OWNER }); + await veFPISYieldDistributor_instance.checkpoint({ from: accounts[9] }); + + console.log(""); + // Show the yields + const account_1_earned = await veFPISYieldDistributor_instance.earned.call(COLLATERAL_FRAX_AND_FXS_OWNER); + const staking_wk1_earned_1_fpis = new BigNumber(account_1_earned).div(BIG18); + const account_9_earned = await veFPISYieldDistributor_instance.earned.call(accounts[9]); + const staking_wk1_earned_9_fpis = new BigNumber(account_9_earned).div(BIG18); + + console.log("accounts[1] earnings after 1 week [FPIS]:", staking_wk1_earned_1_fpis.toNumber()); + console.log("accounts[9] earnings after 1 week [FPIS]:", staking_wk1_earned_9_fpis.toNumber()); + const yield_week_1_fpis = (staking_wk1_earned_1_fpis).plus(staking_wk1_earned_9_fpis); + const effective_weekly_yield_at_week_1_fpis = yield_week_1_fpis; + console.log("Effective weekly yield at week 1 [FPIS]: ", yield_week_1_fpis.toNumber()); + + const duration_yield = await veFPISYieldDistributor_instance.getYieldForDuration.call(); + const fractionParticipating = new BigNumber(await veFPISYieldDistributor_instance.fractionParticipating.call()).div(BIG6).toNumber(); + const pct_participating = fractionParticipating * 100; + const duration_yield_1_fpis = new BigNumber(duration_yield).div(BIG18); + console.log("Expected weekly yield [FPIS]: ", duration_yield_1_fpis.toNumber()); + const expected_weekly_1 = duration_yield_1_fpis.multipliedBy(fractionParticipating); + console.log(`Expected weekly yield [FPIS], accounting for ${pct_participating}% participation: `, expected_weekly_1.toNumber()); + + // Check to make the sure the yields are within expected values + assert(effective_weekly_yield_at_week_1_fpis.toNumber() >= (expected_weekly_1.toNumber() * .99), 'Effective weekly yield < expected weekly yield [underemission]'); + assert(effective_weekly_yield_at_week_1_fpis.toNumber() <= (expected_weekly_1.toNumber() * 1.01), 'Effective weekly yield > Expected weekly yield [overemission]'); + + console.log("accounts[1] claim yield"); + console.log("accounts[9] will not claim"); + await veFPISYieldDistributor_instance.getYield({ from: COLLATERAL_FRAX_AND_FXS_OWNER }); + + // Note the veFPIS and FPIS amounts after the yield + const veFPIS_post_yield_1 = new BigNumber(await veFPIS_instance.balanceOf.call(COLLATERAL_FRAX_AND_FXS_OWNER)).div(BIG18); + const fpis_post_yield_1 = new BigNumber(await fpis_instance.balanceOf.call(COLLATERAL_FRAX_AND_FXS_OWNER)).div(BIG18); + console.log("accounts[1] veFPIS balance:", veFPIS_post_yield_1.toNumber()); + console.log("accounts[1] FPIS balance:", fpis_post_yield_1.toNumber()); + + console.log("===================================================================="); + + console.log("Notify 2nd week's reward"); + const yield_week_2 = 70; + const yield_week_2_e18 = new BigNumber(`${yield_week_2}e18`); + await fpis_instance.approve(veFPISYieldDistributor_instance.address, yield_week_2_e18, { from: COLLATERAL_FRAX_AND_FXS_OWNER }); + await veFPISYieldDistributor_instance.notifyRewardAmount(yield_week_2_e18, { from: COLLATERAL_FRAX_AND_FXS_OWNER }); + console.log("2nd week Yield Rate: ", new BigNumber(await veFPISYieldDistributor_instance.getYieldForDuration.call()).div(BIG18).toNumber()); + + console.log("===================================================================="); + + console.log("wait two weeks to earn more"); + // Advance a few days + await time.increase(2 * (7 * 86400) + 1); + await time.advanceBlock(); + + // Make sure there is a valid period for the contract + await veFPISYieldDistributor_instance.sync({ from: COLLATERAL_FRAX_AND_FXS_OWNER }); + + // Note the last update time + block_time_after = (await time.latest()).toNumber(); + console.log("current block time (in seconds):", block_time_after); + + // Note the total lastUpdateTime + distributor_lastUpdateTime = new BigNumber(await veFPISYieldDistributor_instance.lastUpdateTime.call()); + console.log("Distributor lastUpdateTime:", distributor_lastUpdateTime.toNumber()); + + // Note the total periodFinish + distributor_periodFinish = new BigNumber(await veFPISYieldDistributor_instance.periodFinish.call()); + console.log("Distributor periodFinish: ", distributor_periodFinish.toNumber()); + + // Note the total lastTimeYieldApplicable + distributor_lastTimeYieldApplicable = new BigNumber(await veFPISYieldDistributor_instance.lastTimeYieldApplicable.call()); + console.log("Distributor lastTimeYieldApplicable: ", distributor_lastTimeYieldApplicable.toNumber()); + + // Quick checkpoint + await veFPISYieldDistributor_instance.checkpoint({ from: COLLATERAL_FRAX_AND_FXS_OWNER }); + await veFPISYieldDistributor_instance.checkpoint({ from: accounts[9] }); + + // Show the yield + const staking_part2_earned_1 = await veFPISYieldDistributor_instance.earned.call(COLLATERAL_FRAX_AND_FXS_OWNER); + const staking_part2_earned_1_fpis = new BigNumber(staking_part2_earned_1).div(BIG18); + + const staking_part2_earned_9 = await veFPISYieldDistributor_instance.earned.call(accounts[9]); + const staking_part2_earned_9_fpis = new BigNumber(staking_part2_earned_9).div(BIG18); + + console.log("accounts[1] staking earned() [FPIS]:", staking_part2_earned_1_fpis.toNumber()); + console.log("accounts[9] staking earned() (CARRYOVER) [FPIS]:", staking_wk1_earned_9_fpis.toNumber()); + console.log("accounts[9] staking earned() (THIS WEEK) [FPIS]:", staking_part2_earned_9_fpis.toNumber() - staking_wk1_earned_9_fpis.toNumber()); + console.log("accounts[9] staking earned() (TOTAL) [FPIS]:", staking_part2_earned_9_fpis.toNumber()); + console.log(""); + + const veFPIS_2nd_time_balance_1 = new BigNumber(await veFPIS_instance.balanceOf.call(COLLATERAL_FRAX_AND_FXS_OWNER)).div(BIG18); + const fpis_2nd_time_balance_1 = new BigNumber(await fpis_instance.balanceOf.call(COLLATERAL_FRAX_AND_FXS_OWNER)).div(BIG18); + + const yield_earned_2nd_time_1 = await veFPISYieldDistributor_instance.earned.call(COLLATERAL_FRAX_AND_FXS_OWNER) + const yield_earned_2nd_time_1_fpis = new BigNumber(yield_earned_2nd_time_1).div(BIG18); + console.log("accounts[1] veFPIS balance:", veFPIS_2nd_time_balance_1.toNumber()); + console.log("accounts[1] FPIS balance:", fpis_2nd_time_balance_1.toNumber()); + console.log("accounts[1] earned() [FPIS]:", yield_earned_2nd_time_1_fpis.toNumber()); + console.log(""); + + // const sum_yield_week_3_fpis = ((staking_part2_earned_1_fpis).plus(staking_part2_earned_9_fpis)).plus(staking_wk1_earned_1_fpis); + // const effective_yearly_yield_at_week_3_fpis = sum_yield_week_3_fpis.multipliedBy(52.1429 / 3.0); // Total over 3 weeks + // const fractionParticipating_week_3 = new BigNumber(await veFPISYieldDistributor_instance.fractionParticipating.call()).div(BIG6).toNumber(); + // const pct_participating_week_3 = fractionParticipating_week_3 * 100; + // console.log("Effective weekly yield at week 3 [FPIS]: ", sum_yield_week_3_fpis.div(3).toNumber()); // Total over 3 weeks + + // const duration_yield_3 = await veFPISYieldDistributor_instance.getYieldForDuration.call(); + // const duration_yield_3_fpis = new BigNumber(duration_yield_3).div(BIG18); + // console.log("Expected yearly yield: [FPIS]", duration_yield_3_fpis.multipliedBy(52.1429).toNumber()); + // const expected_yearly_3 = duration_yield_3_fpis.multipliedBy(52.1429).multipliedBy(fractionParticipating_week_3); + // console.log(`Expected yearly yield [FPIS], accounting for ${pct_participating_week_3}% participation: `, expected_yearly_3.toNumber()); + + // // Check to make the sure the yields are within expected values + // assert(effective_yearly_yield_at_week_3_fpis.toNumber() >= (expected_yearly_3.toNumber() * .99), 'Effective yearly yield < expected yearly yield [underemission]'); + // assert(effective_yearly_yield_at_week_3_fpis.toNumber() <= (expected_yearly_3.toNumber() * 1.01), 'Effective yearly yield > Expected yearly yield [overemission]'); + + console.log("accounts[9] getYield()"); + await veFPISYieldDistributor_instance.getYield({ from: accounts[9] }); + + await time.advanceBlock(); + + const acc_9_FPIS_balance_after = (new BigNumber(await fpis_instance.balanceOf(accounts[9]))).div(BIG18); + console.log("accounts[9] FPIS balance change:", acc_9_FPIS_balance_after.minus(fpis_at_1st_checkpoint_9).toNumber()); + + console.log("===================================================================="); + const current_timestamp_3rd = (new BigNumber(await time.latest())).toNumber(); + const veFPIS_timeleft = (await veFPIS_instance.locked__end.call(COLLATERAL_FRAX_AND_FXS_OWNER)) - (current_timestamp_3rd); + + console.log("Wait just under four years, then collect"); + // Advance a few days + await time.increase(veFPIS_timeleft - (7 * 86400)); + await time.advanceBlock(); + + const veFPIS_3rd_time_balance_1 = new BigNumber(await veFPIS_instance.balanceOf.call(COLLATERAL_FRAX_AND_FXS_OWNER)).div(BIG18); + const fpis_3rd_time_balance_1 = new BigNumber(await fpis_instance.balanceOf.call(COLLATERAL_FRAX_AND_FXS_OWNER)).div(BIG18); + const fpis_in_vefpis_3rd_time_balance_1 = new BigNumber((await veFPIS_instance.locked.call(COLLATERAL_FRAX_AND_FXS_OWNER)).amount).div(BIG18); + const yield_earned_3rd_time_1 = await veFPISYieldDistributor_instance.earned.call(COLLATERAL_FRAX_AND_FXS_OWNER) + const yield_earned_3rd_time_1_fpis = new BigNumber(yield_earned_3rd_time_1).div(BIG18); + console.log("accounts[1] veFPIS balance:", veFPIS_3rd_time_balance_1.toNumber()); + console.log("accounts[1] FPIS balance:", fpis_3rd_time_balance_1.toNumber()); + console.log("accounts[1] FPIS in veFPIS balance:", fpis_in_vefpis_3rd_time_balance_1.toNumber()); + console.log("accounts[1] earned() (CARRYOVER) [FPIS]:", yield_earned_3rd_time_1_fpis.toNumber()); + console.log(""); + + const staking_part3_earned_9 = await veFPISYieldDistributor_instance.earned.call(accounts[9]); + const staking_part3_earned_9_fpis = new BigNumber(staking_part3_earned_9).div(BIG18); + console.log("accounts[9] staking earned() (TOTAL) [FPIS]:", staking_part3_earned_9_fpis.toNumber()); + console.log(""); + + assert(yield_earned_3rd_time_1_fpis.toNumber() == staking_part2_earned_1_fpis.toNumber(), 'Should not have accrued extra FPIS'); + + await veFPISYieldDistributor_instance.getYield({ from: COLLATERAL_FRAX_AND_FXS_OWNER }); + await veFPISYieldDistributor_instance.getYield({ from: accounts[9] }); + + console.log("===================================================================="); + + console.log("Notify final week's reward"); + const yield_week_final = 700; + const yield_week_final_e18 = new BigNumber(`${yield_week_final}e18`); + await fpis_instance.approve(veFPISYieldDistributor_instance.address, yield_week_final_e18, { from: COLLATERAL_FRAX_AND_FXS_OWNER }); + await veFPISYieldDistributor_instance.notifyRewardAmount(yield_week_final_e18, { from: COLLATERAL_FRAX_AND_FXS_OWNER }); + console.log("Final week yield rate: ", new BigNumber(await veFPISYieldDistributor_instance.getYieldForDuration.call()).div(BIG18).toNumber()); + + console.log("===================================================================="); + console.log("Advance 2 years and try to collect past the veFPIS expiration."); + + // Advance two years + // await time.increase(2 * (365 * 86400)); + // await time.advanceBlock(); + + // Advance two years + await time.increase(7.05 * 86400); + await time.advanceBlock(); + + const veFPIS_4th_time_balance_1 = new BigNumber(await veFPIS_instance.balanceOf.call(COLLATERAL_FRAX_AND_FXS_OWNER)).div(BIG18); + const fpis_4th_time_balance_1 = new BigNumber(await fpis_instance.balanceOf.call(COLLATERAL_FRAX_AND_FXS_OWNER)).div(BIG18); + const fpis_in_vefpis_4th_time_balance_1 = new BigNumber((await veFPIS_instance.locked.call(COLLATERAL_FRAX_AND_FXS_OWNER)).amount).div(BIG18); + const yield_earned_4th_time_1 = await veFPISYieldDistributor_instance.earned.call(COLLATERAL_FRAX_AND_FXS_OWNER) + const yield_earned_4th_time_1_fpis = new BigNumber(yield_earned_4th_time_1).div(BIG18); + console.log("accounts[1] veFPIS balance:", veFPIS_4th_time_balance_1.toNumber()); + console.log("accounts[1] FPIS balance:", fpis_4th_time_balance_1.toNumber()); + console.log("accounts[1] FPIS in veFPIS balance:", fpis_in_vefpis_4th_time_balance_1.toNumber()); + console.log("accounts[1] earned() [FPIS]:", yield_earned_4th_time_1_fpis.toNumber()); + console.log(""); + + const staking_part4_earned_9 = await veFPISYieldDistributor_instance.earned.call(accounts[9]); + const staking_part4_earned_9_fpis = new BigNumber(staking_part4_earned_9).div(BIG18); + console.log("accounts[9] staking earned() (TOTAL) [FPIS]:", staking_part4_earned_9_fpis.toNumber()); + console.log(""); + + await veFPISYieldDistributor_instance.getYield({ from: COLLATERAL_FRAX_AND_FXS_OWNER }); + + console.log("===================================================================="); + + console.log("Wait one month. No yield should accrue because the veFPIS has expired back to 1-1"); + // Advance a few days + await time.increase(4 * (30 * 86400) + 1); + await time.advanceBlock(); + + const veFPIS_5th_time_balance_1 = new BigNumber(await veFPIS_instance.balanceOf.call(COLLATERAL_FRAX_AND_FXS_OWNER)).div(BIG18); + const fpis_5th_time_balance_1 = new BigNumber(await fpis_instance.balanceOf.call(COLLATERAL_FRAX_AND_FXS_OWNER)).div(BIG18); + const fpis_in_vefpis_5th_time_balance_1 = new BigNumber((await veFPIS_instance.locked.call(COLLATERAL_FRAX_AND_FXS_OWNER)).amount).div(BIG18); + const yield_earned_5th_time_1 = await veFPISYieldDistributor_instance.earned.call(COLLATERAL_FRAX_AND_FXS_OWNER) + const yield_earned_5th_time_1_fpis = new BigNumber(yield_earned_5th_time_1).div(BIG18); + console.log("accounts[1] veFPIS balance:", veFPIS_5th_time_balance_1.toNumber()); + console.log("accounts[1] FPIS balance:", fpis_5th_time_balance_1.toNumber()); + console.log("accounts[1] FPIS in veFPIS balance:", fpis_in_vefpis_5th_time_balance_1.toNumber()); + console.log("accounts[1] earned() [FPIS]:", yield_earned_5th_time_1_fpis.toNumber()); + console.log(""); + + // Make sure no yield was earned + assert(yield_earned_5th_time_1_fpis.toNumber() == 0, 'Should not have earned yield'); + + await veFPISYieldDistributor_instance.getYield({ from: COLLATERAL_FRAX_AND_FXS_OWNER }); + + }); + + + it("blocks a greylisted address which tries to get yield; SHOULD FAIL", async () => { + console.log("greylistAddress(accounts[9])"); + await veFPISYieldDistributor_instance.greylistAddress(accounts[9], { from: STAKING_OWNER }); + console.log(""); + console.log("this should fail"); + + await expectRevert.unspecified(veFPISYieldDistributor_instance.getYield({ from: accounts[9] })); + }); + + it("ungreylists a greylisted address which tries to get yield; SHOULD SUCCEED", async () => { + console.log("greylistAddress(accounts[9])"); + await veFPISYieldDistributor_instance.greylistAddress(accounts[9], { from: STAKING_OWNER }); + console.log(""); + console.log("this should succeed"); + await veFPISYieldDistributor_instance.getYield({ from: accounts[9] }); + }); + + +}); \ No newline at end of file diff --git a/src/types/constants.ts b/src/types/constants.ts index b5fa11b1..7a41c014 100755 --- a/src/types/constants.ts +++ b/src/types/constants.ts @@ -2040,7 +2040,7 @@ export const CONTRACT_ADDRESSES = { FXS: "0x3432B6A60D23Ca0dFCa7761B7ab56459D9C964D0", FXB: "", vesting: "NOT_DEPLOYED_YET", - veFPIS: "0xeC9189c95beB2e7f735E439E858a70b3bB8a6AA6", // Old: "0x1B0b9991Df27a4F2847478127d51Fb29883882f5", + veFPIS: "0x574C154C83432B0A45BA3ad2429C3fA242eD7359", // Old: "0x1B0b9991Df27a4F2847478127d51Fb29883882f5", veFXS: "0xc8418aF6358FFddA74e09Ca9CC3Fe03Ca6aDC5b0", // Old: "0xcb75A1655c84589652D0f3A4605e5dDA8431F0a6" veFXS_whitelist_checker: "", veFXS_boost: "0x59e132164Ec2e48b0714EB6abdb10225Df44dA0e", @@ -2266,6 +2266,8 @@ export const CONTRACT_ADDRESSES = { dummy_tkn: "", // for testing fraxferry_v1__ethereum_arbitrum__FRAX__ETH_SIDE: "0x85c5f05Ae4CB68190C695a22b292C3bA90696128", fraxferry_v2__ethereum_arbitrum__FXS__ETH_SIDE: "0x4b8792aF00eaE944484bF572bc33029B2184a50C", + fraxferry_v2__ethereum_arbitrum__FPI__ETH_SIDE: "0x5878d03AA50d2c00A921948Ea8Fa5F2d247f6BDB", + fraxferry_v2__ethereum_arbitrum__FPIS__ETH_SIDE: "0xCd4aa7DB9D8a995a651498E94f6693A4D26e6C9E", fraxferry_v2__ethereum_arbitrum__frxETH__ETH_SIDE: "0x505603e2440b44C1602b44D0Eb8385399b3F7bab", fraxferry_v2__ethereum_arbitrum__sfrxETH__ETH_SIDE: "0x8afd5082E0C24dEcEA39A9eFb14e4ACF4373D7D6", fraxferry_v1__ethereum_aurora__FRAX__ETH_SIDE: "0x6ac96F65156281a9383455D704b58A74ea9C9eC4", @@ -2274,6 +2276,8 @@ export const CONTRACT_ADDRESSES = { fraxferry_v1__ethereum_boba__FRAX__ETH_SIDE: "0x3eF1d856EA62A2292B8690855042095a7aC48B4b", fraxferry_v1__ethereum_bsc__FRAX__ETH_SIDE: "0xDAe210BfB0cF8c81EDB4b459e2e0bA14D553e2D9", fraxferry_v2__ethereum_bsc__FXS__ETH_SIDE: "0x9B62402Eb9A755677dEbdaE3639CB531c0Af0E5d", + fraxferry_v2__ethereum_bsc__FPI__ETH_SIDE: "0xfbD33d2f3330f063C87b523Ba80D5F7f296E5393", + fraxferry_v2__ethereum_bsc__FPIS__ETH_SIDE: "0xf18B122c3935Ff49f62C8f1f77Dc42A6F85A0bb5", fraxferry_v2__ethereum_bsc__frxETH__ETH_SIDE: "0xce4DbAF3fa72C962Ee1F371694109fc2a80B03f5", fraxferry_v2__ethereum_bsc__sfrxETH__ETH_SIDE: "0x621D0e62f26314387f338A2509aFA3Ae3414661A", fraxferry_v1__ethereum_evmos__FRAX__ETH_SIDE: "0x2d2261f970F605C813f160E8BAEd455E9004A842", @@ -2286,6 +2290,7 @@ export const CONTRACT_ADDRESSES = { fraxferry_v2__ethereum_moonbeam__frxETH__ETH_SIDE: "0x228567c10b7533C88057c10dDeA6349360F122c5", fraxferry_v2__ethereum_moonbeam__sfrxETH__ETH_SIDE: "0xbc3A2bF4FA20bE2056DCE5BFB168970BA657F187", fraxferry_v1__ethereum_moonriver__FRAX__ETH_SIDE: "0x15ADa72A3B52A88E25DdD2CC2bA1120234e34bb0", + fraxferry_v2__ethereum_moonriver__FXS__ETH_SIDE: "0xFe7ebA20c20C8FF12A337F940Ce7A97c6e2594DE", fraxferry_v1__ethereum_optimism__FRAX__ETH_SIDE: "0x06Fa869caa1160754C6a0B744Da6454c5EA325d4", fraxferry_v2__ethereum_optimism__FXS__ETH_SIDE: "0x6650D5183C4Cd294a81B1F724c365b0c42f8270a", fraxferry_v2__ethereum_optimism__frxETH__ETH_SIDE: "0x2F08F4645d2fA1fB12D2db8531c0c2EA0268BdE2", @@ -2364,7 +2369,7 @@ export const CONTRACT_ADDRESSES = { vefxs_yield_distributor_v2: "0x62C4cf364078C98fA08AfDB4D3d8D87e780Ebd45", vefxs_yield_distributor_v3: "0xed2647Bbf875b2936AAF95a3F5bbc82819e3d3FE", vefxs_yield_distributor_v4: "0xc6764e58b36e26b08Fd1d2AeD4538c02171fA872", - vefpis_yield_distributor_v4: "0x5814CBFb4F67CB384De981849D773a9Da179Fec9", + vefpis_yield_distributor_v4: "0xE6D31C144BA99Af564bE7E81261f7bD951b802F6", // V5 really, but keeping name here for DB compatibility yieldspace_amo: "0x8971946467a77b798762823434c0f407d20F9df9" }, libraries: { @@ -2430,6 +2435,8 @@ export const CONTRACT_ADDRESSES = { BUSDFRAXBP_Pool: "0x8fdb0bB9365a46B145Db80D0B1C5C5e979C84190", BUSDFRAXBP: "0x8fdb0bB9365a46B145Db80D0B1C5C5e979C84190", cAAVE: "0xe65cdB6479BaC1e22340E4E755fAE7E509EcD06c", + clevUSDFRAXBP: "0x84c333e94aea4a51a21f6cf0c7f528c50dc7592c", + clevUSDFRAXBP_Pool: "0x84c333e94aea4a51a21f6cf0c7f528c50dc7592c", crvFRAX: "0x3175Df0976dFA876431C2E9eE6Bc45b65d3473CC", curve4pool: "0x4e0915c88bc70750d68c481540f081fefaf22273", cUSDC: "0x39AA39c021dfbaE8faC545936693aC917d5E7563", @@ -2446,6 +2453,8 @@ export const CONTRACT_ADDRESSES = { cvxBADGERFRAXBP: "0x25f0b7c3A7A43b409634a5759526560cC3313d75", cvxBUSDFRAXBP_Rewarder: "0x9e6Daf019767D5cEAdE416ce77E8d187b5B254F3", cvxBUSDFRAXBP: "0xf203A94e59d071062a0dd31f396bCb19a38809A4", + cvxclevUSDFRAXBP: "0x84C333e94AEA4a51a21F6cf0C7F528C50Dc7592C", + cvxclevUSDFRAXBP_Rewarder: "0x710e85B2793b3AE88Cb1Da3cb25b3d62D810d180", cvxcrvFRAX_Rewarder: '0x7e880867363A7e321f5d260Cade2B0Bb2F717B02', cvxcrvFRAX: '0x117A0bab81F25e60900787d98061cCFae023560c', cvxCRVFRAXBP: "0x527331F3F550f6f85ACFEcAB9Cc0889180C6f1d5", @@ -2471,6 +2480,10 @@ export const CONTRACT_ADDRESSES = { cvxLUSDFRAXBP: "0xE8a371b5D32344033589A2F0a2712dBD12130b18", cvxMAIFRAXBP_Rewarder: "0xD3C412C3cEdbEC604425B23DCd79Aa1ac810622f", cvxMAIFRAXBP: "0xe79914274Ea1332222793d7ba931647531E10a5b", + cvxmsUSDFRAXBP: "0xc3b19502F8c02be75F3f77fd673503520DEB51dD", + cvxmsUSDFRAXBP_Rewarder: "0xF189A4a1E845Fd62944F93De497409798523B397", + cvxOHMFRAXBP: "0x5271045F7B73c17825A7A7aee6917eE46b0B7520", + cvxOHMFRAXBP_Rewarder: "0x27A8c58e3DE84280826d615D80ddb33930383fE9", cvxpUSDFRAXBP_Rewarder: "0x6d096C99Cc2Ea52490355311b73D86365Acf087f", cvxpUSDFRAXBP: "0xB17255D92892F1322d023befddaB85f172E36f67", cvxRSRFRAXBP: "0x022600684e9492dA82f0da11Bf039c11109d0935", @@ -2500,6 +2513,10 @@ export const CONTRACT_ADDRESSES = { LUSDFRAXBP: "0x497CE58F34605B9944E6b15EcafE6b001206fd25", MAIFRAXBP_Pool: "0x66E335622ad7a6C9c72c98dbfCCE684996a20Ef9", MAIFRAXBP: "0x66E335622ad7a6C9c72c98dbfCCE684996a20Ef9", + msUSDFRAXBP: "0xc3b19502f8c02be75f3f77fd673503520deb51dd", + msUSDFRAXBP_Pool: "0xc3b19502f8c02be75f3f77fd673503520deb51dd", + OHMFRAXBP: "0x5271045f7b73c17825a7a7aee6917ee46b0b7520", + OHMFRAXBP_Pool: "0xfc1e8bf3e81383ef07be24c3fd146745719de48d", OGTemple: "0x654590F810f01B51dc7B86915D4632977e49EA33", pitchFXS: "0x11EBe21e9d7BF541A18e1E3aC94939018Ce88F0b", pUSDFRAXBP_Pool: "0xC47EBd6c0f68fD5963005D28D0ba533750E5C11B", @@ -2527,6 +2544,7 @@ export const CONTRACT_ADDRESSES = { stkcvxapeUSDFRAXBP: "0x6a20FC1654A2167d00614332A5aFbB7EBcD9d414", stkcvxBADGERFRAXBP: "0xb92e3fD365Fc5E038aa304Afe919FeE158359C88", stkcvxBUSDFRAXBP: "0x20c5177504A3f9Bad59c430791feA853EeAD4CCE", + stkcvxclevUSDFRAXBP: "0x3199a1ed1Ad4cb1d1b57939809c8ee79eafE9934", stkcvxcvxCRVFRAXBP: "0xa103a6ca0C4D4072BA59a55FD453BFE4197A095B", stkcvxCVXFRAXBP: "0x93D1De20eaBB21686CFe716f78F67E51ee578185", stkcvxcvxFXSFRAXBP: "0xA6A8F315b1a8C9B05433d206b8fECfbF0fC96217", @@ -2537,6 +2555,8 @@ export const CONTRACT_ADDRESSES = { stkcvxGUSDFRAXBP: "0x16e9eaC2A9e29aF3c53d24ed0F07fc403E098b64", stkcvxLUSDFRAXBP: "0x8C402989a966D37B96f60401A6158D5D49f1381D", stkcvxMAIFRAXBP: "0x787eB52b94c4610ABE2C9C5eE95c3a4a16533344", + stkcvxmsUSDFRAXBP: "0x227b7F44468A0EC0FDdfc3FB0cE09b294E62f875", + stkcvxOHMFRAXBP: "0x81b0dCDa53482A2EA9eb496342dC787643323e95", stkcvxpUSDFRAXBP: "0x7AEF5bDC573dCbfb40EC68b0BAAB03abB846C9c6", stkcvxRSRFRAXBP: "0xF37007f2b9DE656115e1B977Bb1fd38A99B8a2a6", stkcvxSDTFRAXBP: "0xE6Aa75F98e6c105b821a2dba9Fbbd886b421F06b", @@ -2614,6 +2634,7 @@ export const CONTRACT_ADDRESSES = { 'Convex stkcvxapeUSDFRAXBP': '0x6a20FC1654A2167d00614332A5aFbB7EBcD9d414', 'Convex stkcvxBADGERFRAXBP': '0xb92e3fD365Fc5E038aa304Afe919FeE158359C88', 'Convex stkcvxBUSDFRAXBP': '0x20c5177504A3f9Bad59c430791feA853EeAD4CCE', + 'Convex stkcvxclevUSDFRAXBP': '0x3199a1ed1Ad4cb1d1b57939809c8ee79eafE9934', 'Convex stkcvxCVXFRAXBP': '0x93D1De20eaBB21686CFe716f78F67E51ee578185', 'Convex stkcvxcvxCRVFRAXBP': '0xa103a6ca0C4D4072BA59a55FD453BFE4197A095B', 'Convex stkcvxcvxFXSFRAXBP': '0xA6A8F315b1a8C9B05433d206b8fECfbF0fC96217', @@ -2624,6 +2645,8 @@ export const CONTRACT_ADDRESSES = { 'Convex stkcvxfrxETHETH': '0x4659d5fF63A1E1EDD6D5DD9CC315e063c95947d0', 'Convex stkcvxLUSDFRAXBP': '0x8C402989a966D37B96f60401A6158D5D49f1381D', 'Convex stkcvxMAIFRAXBP': '0x787eB52b94c4610ABE2C9C5eE95c3a4a16533344', + 'Convex stkcvxmsUSDFRAXBP': '0x227b7F44468A0EC0FDdfc3FB0cE09b294E62f875', + 'Convex stkcvxOHMFRAXBP': '0x81b0dCDa53482A2EA9eb496342dC787643323e95', 'Convex stkcvxpUSDFRAXBP': '0x7AEF5bDC573dCbfb40EC68b0BAAB03abB846C9c6', 'Convex stkcvxRSRFRAXBP': '0xF37007f2b9DE656115e1B977Bb1fd38A99B8a2a6', 'Convex stkcvxSDTFRAXBP': '0xE6Aa75F98e6c105b821a2dba9Fbbd886b421F06b', @@ -2697,6 +2720,7 @@ export const CONTRACT_ADDRESSES = { "Convex stkcvxALCXFRAXBP": "0xA0657642224Fc53dAB4a3d2069430afe157BEc5D", "Convex stkcvxBADGERFRAXBP": "0x5a92EF27f4baA7C766aee6d751f754EBdEBd9fae", "Convex stkcvxBUSDFRAXBP": "0xaCf54f101B86f9e55d35C0674Ebd8C854E5f80e4", + "Convex stkcvxclevUSDFRAXBP": "0x5745506D56b0088f800085b1227B3f1F7d419c89", "Convex stkcvxCVXFRAXBP": "0xeC670c5e0A8A8d5ae5639158565D840DE44CA03f", "Convex stkcvxcvxCRVFRAXBP": "0x57c9F019B25AaAF822926f4Cacf0a860f61eDd8D", "Convex stkcvxcvxFXSFRAXBP": "0x2F9504988675c91787E188Ed928D6E042d9052e9", @@ -2707,16 +2731,18 @@ export const CONTRACT_ADDRESSES = { "Convex stkcvxGUSDFRAXBP": "0xF0Ffe16810B7f412c52C1610e3BC9819A7Dcb366", "Convex stkcvxLUSDFRAXBP": "0xF0A9b6F6593b4Bf96E1Ab13921A8a3FbFd9d4F16", "Convex stkcvxMAIFRAXBP": "0xdE5684F85a78F6CcCFFB4b9301ad0944eb5CE3eE", + "Convex stkcvxmsUSDFRAXBP": "0xfB2CCc82755A734C53C8B45f260fFc2df026fe87", + "Convex stkcvxOHMFRAXBP": "0xc96e1a26264D965078bd01eaceB129A65C09FFE7", "Convex stkcvxpUSDFRAXBP": "0x40b42E4ab3c044e67CBFb0bD99C9E975dcB83668", - 'Convex stkcvxRSRFRAXBP': '0xF22D3C85e41Ef4b5Ac8Cb8B89a14718e290a0561', - 'Convex stkcvxSDTFRAXBP': '0x9C8d9667d5726aEcA4d24171958BeE9F46861bed', + "Convex stkcvxRSRFRAXBP": "0xF22D3C85e41Ef4b5Ac8Cb8B89a14718e290a0561", + "Convex stkcvxSDTFRAXBP": "0x9C8d9667d5726aEcA4d24171958BeE9F46861bed", "Convex stkcvxTUSDFRAXBP": "0xb324b2BD8a3Dc55b04111E84d5cce0c3771F8889", "Convex stkcvxUSDDFRAXBP": "0xF7242A1cE383174802818febB36B6eebb56d5BFb", "Convex stkcvxalUSDFRAXBP": "0x711d650Cd10dF656C2c28D375649689f137005fA", "Convex stkcvxapeUSDFRAXBP": "0xa810D1268cEF398EC26095c27094596374262826", "Convex stkcvxsUSDFRAXBP": "0x560c7668459221e33ED515D1D17c09ECda1996f5", - 'Convex stkcvxXAIFRAXBP': '0x4edF7C64dAD8c256f6843AcFe56876024b54A1b6', - "Fraxlend V1 FRAX/FXS": '0x73e1e624C6d3E027b8674e6C72F104F1429FC17E', + "Convex stkcvxXAIFRAXBP": "0x4edF7C64dAD8c256f6843AcFe56876024b54A1b6", + "Fraxlend V1 FRAX/FXS": "0x73e1e624C6d3E027b8674e6C72F104F1429FC17E", "Fraxswap V1 FRAX/IQ V2": "0xBF33B67F243a4DAbED494Ff5840f113B2E202a0d", "Fraxswap V1 FRAX/IQ V3": "0x35678017e1D252dA1CdD6745b147E3e75d1f9C27", "Fraxswap V1 FRAX/IQ": "0x5e15E40A3AA06bECA711EdE9F3F76E1d80C34490", @@ -2821,9 +2847,10 @@ export const CONTRACT_ADDRESSES = { middleman_gauges: { "Curve VSTFRAX-f": "0x127963A74c07f72D862F2Bdc225226c3251BD117", // Arbitrum "mStable FRAX/mUSD": "0x3e14f6EEDCC5Bc1d0Fc7B20B45eAE7B1F74a6AeC", // Polygon - "Sushi FRAX/FXS": "", // Polygon + "Saddle L2D4 [Arbitrum]": "0x9B8AEd182B8A9430C14e97Bf2C02F129f2b36854", // Arbitrum // "Snowball S4D": "0x66fD216bCBeb566EF038A116B7270f241005e186", // Avalanche "SpiritSwap FRAX/FXS": "0xebF993690F65B23862E10F489656529ac06A27B8", // Fantom + "Sushi FRAX/FXS": "", // Polygon }, }, arbitrum: { @@ -2835,6 +2862,8 @@ export const CONTRACT_ADDRESSES = { canonicals: { FRAX: "0x17FC002b466eEc40DaE837Fc4bE5c67993ddBd6F", FXS: "0x9d2F299715D94d8A7E6F5eaa8E654E8c74a988A7", + FPI: "0x1B01514A2B3CdEf16fD3c680a818A0Ab97Da8a09", + FPIS: "0x3405E88af759992937b84E58F2Fe691EF0EeA320", frxETH: '0x178412e79c25968a32e89b11f63B33F733770c2A', sfrxETH: '0x95aB45875cFFdba1E5f451B950bC2E42c0053f39', }, @@ -2863,6 +2892,8 @@ export const CONTRACT_ADDRESSES = { dummy_tkn: "0x57F0806Ad6E0264B3368413e8f3F1FbC5d1f9ff8", // for testing fraxferry_v1__ethereum_arbitrum__FRAX__ARBI_SIDE: "0x5a9BEf8CEa603aAc78a523fb245C1A9264D50706", fraxferry_v2__ethereum_arbitrum__FXS__ARBI_SIDE: "0x078Dd77De4e0f480D7442495d55707cE071B4B09", + fraxferry_v2__ethereum_arbitrum__FPI__ARBI_SIDE: "0x0304A365C0fbb4b1Ad423887861b9b69a5f0c00E", + fraxferry_v2__ethereum_arbitrum__FPIS__ARBI_SIDE: "0x4EE62cA4DC0576b943dc5A8A8b9FF0883C5F2fe1", fraxferry_v2__ethereum_arbitrum__frxETH__ARBI_SIDE: "0x6c5Ae8dCaD1E101FB108a89954D7dC0B8991445b", fraxferry_v2__ethereum_arbitrum__sfrxETH__ARBI_SIDE: "0xf1C16E1c01e62716884ef947063e9C7D44eC287F", ferry_to_polygon: "0xe57314D4405289FfC91306E4574C28b7394c4822", @@ -2912,6 +2943,8 @@ export const CONTRACT_ADDRESSES = { FRAXBP: "0xC9B8a3FDECB9D5b218d02555a8Baf332E5B740d5", // L2 Curve LP Token and Pool are same contract hFRAX: "0xb1c4426C86082D91a6c097fC588E5D5d8dD1f5a8", saddleArbUSDv2: "0x0a20c2FFa10cD43F67D06170422505b7D6fC0953", + saddleL2D4: "0x147D0Af556C6D89640BFa915D2b9619d7b55947a", + saddleL2D4_Permissionless_Swap: "0xF2839E0b30B5e96083085F498b14bbc12530b734", sdl_FRAXBP: "0x896935B02D3cBEb152192774e4F1991bb1D2ED3f", sdl_FRAXBP_Pool: "0x401AFbc31ad2A3Bc0eD8960d63eFcDEA749b4849", }, @@ -2922,6 +2955,7 @@ export const CONTRACT_ADDRESSES = { "Fraxswap V2 FRAX/FXS": "0x90FF2b6b6a2eb3C68D883bc276F6736b1262fa50", "Fraxswap V1 FRAX/WETH": "0xb771410E2b1d892C3469711824c44769528fdc89", "Fraxswap V2 FRAX/WETH": "0x0BB5A573886bbcecf18590b6Cb59E980FAC7d278", + "Saddle L2D4 [Arbitrum]": "0x147D0Af556C6D89640BFa915D2b9619d7b55947a", "Sushi canFRAX/canFXS": "0xfb5DB4f55Bb97A608f6EE50864104457FA04DA4f", "Sushi canFRAX/WETH": "0xaebfda10b251d650126830b952ee74b4a599f71f", "Sushi canFRAX/arbiUSDC": "0x8286a9881CEe20E71ac1215f8D39De6853Dd9A8F", @@ -2929,6 +2963,7 @@ export const CONTRACT_ADDRESSES = { }, staking_contracts: { "Curve VSTFRAX-f": "0x127963A74c07f72D862F2Bdc225226c3251BD117", + "Saddle L2D4 [Arbitrum]": "0xd1dF24e8D225b20F9c8f4912BE88cCCec93f36E5", "Olympus Pro FRAX Bond [Arbitrum]": "", }, }, @@ -3217,6 +3252,8 @@ export const CONTRACT_ADDRESSES = { canonicals: { FRAX: "0x90C97F71E18723b0Cf0dfa30ee176Ab653E89F40", FXS: "0xe48A3d7d0Bc88d552f730B62c006bC925eadB9eE", + FPI: "0x2Dd1B4D4548aCCeA497050619965f91f78b3b532", + FPIS: "0xD1738eB733A636d1b8665f48bC8a24dA889c2562", frxETH: '0x64048A7eEcF3a2F1BA9e144aAc3D7dB6e58F555e', sfrxETH: '0x3Cd55356433C89E50DC51aB07EE0fa0A95623D53', }, @@ -3249,6 +3286,8 @@ export const CONTRACT_ADDRESSES = { dummy_tkn: "", // for testing fraxferry_v1__ethereum_bsc__FRAX__BSC_SIDE: "0x10Ef54F944639764d2d5Efa272262f06cfaF09AE", fraxferry_v2__ethereum_bsc__FXS__BSC_SIDE: "0x5CD3d6465cd21b645F15175840f4659228C6195c", + fraxferry_v2__ethereum_bsc__FPI__BSC_SIDE: "0x1B01514A2B3CdEf16fD3c680a818A0Ab97Da8a09", + fraxferry_v2__ethereum_bsc__FPIS__BSC_SIDE: "0x0248940C22D2586450dd5145E81B7Fc0CA4Dd4a2", fraxferry_v2__ethereum_bsc__frxETH__BSC_SIDE: "0xB7C974530e59017DF7FA06b1EBD9e8a1E9aceC29", fraxferry_v2__ethereum_bsc__sfrxETH__BSC_SIDE: "0x612015939f70C87E2041cc5daD909101c1A2383F", captain: "0xBB437059584e30598b3AF0154472E47E6e2a45B9", @@ -3672,7 +3711,7 @@ export const CONTRACT_ADDRESSES = { }, bridge_tokens: { anyFRAX: "0x1CcCA1cE62c62F7Be95d4A67722a8fDbed6EEcb4", - anyFXS: "0x264c1383EA520f73dd837F915ef3a732e204a493", + anyFXS_V6: "0x264c1383EA520f73dd837F915ef3a732e204a493", celrFRAX: "0xC5Ef662b833De914B9bA7a3532C6BB008a9b23a6", celrFXS: "0x54f2980A851376CcBC561Ab4631dF2556Ad03386", madFRAX: "0x8D6e233106733c7cc1bA962f8De9E4dCd3b0308E", @@ -3786,6 +3825,7 @@ export const CONTRACT_ADDRESSES = { fraxferry: { dummy_tkn: "", // for testing fraxferry_v1__ethereum_moonriver__FRAX__MOVR_SIDE: "0x81dbcc69937DAd14e358B1a16Ba7ea047703c404", + fraxferry_v2__ethereum_moonriver__FXS__MOVR_SIDE: "0x2d3146aD02f64cb21C23b54f3fD5B0ddc927ba20", captain: "0xBB437059584e30598b3AF0154472E47E6e2a45B9", first_officer: "0xBB437059584e30598b3AF0154472E47E6e2a45B9", crewmember: "0xBB437059584e30598b3AF0154472E47E6e2a45B9", From 58970f56be72eef7b3f4737ea044181e6fcba5d9 Mon Sep 17 00:00:00 2001 From: travis Date: Tue, 14 Mar 2023 11:17:30 -0700 Subject: [PATCH 18/37] C2tP + ZrowGz additions --- .../Curve/FraxFamilialPitchGauge.sol | 2 +- .../contracts/Curve/FraxGaugeControllerV2.vy | 2 +- src/hardhat/contracts/Curve/IFraxFarm.sol | 203 ---- src/hardhat/contracts/Curve/veFPIS.vy | 2 +- .../__CROSSCHAIN/CrossChainCanonicalV2.sol | 2 +- .../Misc_AMOs/balancer/IBalancerVault.sol | 33 + .../Misc_AMOs/balancer/IStablePool.sol | 46 + .../Misc_AMOs/bunni/IBalancerOracle.sol | 14 + .../contracts/Misc_AMOs/bunni/IBunniGauge.sol | 72 ++ .../Misc_AMOs/bunni/IOptionsToken.sol | 29 + .../contracts/Misc_AMOs/sentiment/ILToken.sol | 56 ++ .../Misc_AMOs/sentiment/ILinearRateModel.sol | 11 + .../contracts/Staking/CommunalFarm.sol | 2 +- .../contracts/Staking/FraxCrossChainFarm.sol | 2 +- .../Staking/FraxCrossChainFarmV2.sol | 10 +- ...mV3.sol => FraxCrossChainFarmV3_ERC20.sol} | 116 ++- .../FraxCrossChainFarmV3_Pos_Rebase.sol | 949 ++++++++++++++++++ .../Staking/FraxFarmRageQuitter_mStable.sol | 108 ++ .../Staking/FraxUniV3Farm_Stable.sol | 4 +- .../Staking/FraxUnifiedFarmTemplate.sol | 202 ++-- .../Staking/FraxUnifiedFarmTemplate_V2.sol | 226 +++-- .../Staking/FraxUnifiedFarm_ERC20.sol | 37 +- .../Staking/FraxUnifiedFarm_ERC20_V2.sol | 464 ++++++--- .../FraxUnifiedFarm_KyberSwapElastic.sol | 18 +- .../Staking/FraxUnifiedFarm_PosRebase.sol | 23 +- .../Staking/FraxUnifiedFarm_UniV3.sol | 21 +- .../Staking/StakingRewardsDualV5.sol | 2 +- .../Staking/StakingRewardsMultiGauge.sol | 2 +- .../Variants/FraxCCFarmV3_ArbiSaddleL2D4.sol | 6 +- ...UnifiedFarm_ERC20_Convex_FRAXBP_Stable.sol | 30 +- ...ifiedFarm_ERC20_Convex_FRAXBP_Volatile.sol | 32 +- ...FraxUnifiedFarm_ERC20_Convex_frxETH_V2.sol | 3 + .../FraxUnifiedFarm_ERC20_FraxswapV2.sol | 36 +- .../contracts/Utils/ReentrancyGuardV2.sol | 0 .../contracts/mocks/MockConvexRegistry.sol | 6 + .../contracts/mocks/MockConvexVault.sol | 6 + .../Staking/FraxUniV3Farm_Volatile.sol | 4 +- .../__BSC/Staking/FraxFarmBSC_Dual_V5.sol | 2 +- .../test/FraxCrossChainFarmV2-Tests.js | 901 ----------------- .../test/FraxUnifiedFarm_ERC20-Tests.js | 93 +- ...js => FraxCrossChainFarmV3_ERC20-Tests.js} | 2 +- src/hardhat/test/truffle-fixture.js | 114 +-- src/types/constants.ts | 9 + 43 files changed, 2307 insertions(+), 1595 deletions(-) mode change 100755 => 100644 src/hardhat/contracts/Curve/FraxFamilialPitchGauge.sol delete mode 100644 src/hardhat/contracts/Curve/IFraxFarm.sol mode change 100644 => 100755 src/hardhat/contracts/ERC20/__CROSSCHAIN/CrossChainCanonicalV2.sol create mode 100644 src/hardhat/contracts/Misc_AMOs/balancer/IBalancerVault.sol create mode 100644 src/hardhat/contracts/Misc_AMOs/balancer/IStablePool.sol create mode 100644 src/hardhat/contracts/Misc_AMOs/bunni/IBalancerOracle.sol create mode 100644 src/hardhat/contracts/Misc_AMOs/bunni/IBunniGauge.sol create mode 100644 src/hardhat/contracts/Misc_AMOs/bunni/IOptionsToken.sol create mode 100644 src/hardhat/contracts/Misc_AMOs/sentiment/ILToken.sol create mode 100644 src/hardhat/contracts/Misc_AMOs/sentiment/ILinearRateModel.sol rename src/hardhat/contracts/Staking/{FraxCrossChainFarmV3.sol => FraxCrossChainFarmV3_ERC20.sol} (88%) create mode 100755 src/hardhat/contracts/Staking/FraxCrossChainFarmV3_Pos_Rebase.sol create mode 100644 src/hardhat/contracts/Staking/FraxFarmRageQuitter_mStable.sol mode change 100755 => 100644 src/hardhat/contracts/Utils/ReentrancyGuardV2.sol create mode 100644 src/hardhat/contracts/mocks/MockConvexRegistry.sol create mode 100644 src/hardhat/contracts/mocks/MockConvexVault.sol delete mode 100644 src/hardhat/test/FraxCrossChainFarmV2-Tests.js rename src/hardhat/test/__ARBITRUM/{FraxCrossChainFarmV3-Tests.js => FraxCrossChainFarmV3_ERC20-Tests.js} (99%) mode change 100644 => 100755 src/types/constants.ts diff --git a/src/hardhat/contracts/Curve/FraxFamilialPitchGauge.sol b/src/hardhat/contracts/Curve/FraxFamilialPitchGauge.sol old mode 100755 new mode 100644 index b4f1c545..83492535 --- a/src/hardhat/contracts/Curve/FraxFamilialPitchGauge.sol +++ b/src/hardhat/contracts/Curve/FraxFamilialPitchGauge.sol @@ -386,4 +386,4 @@ contract FraxFamilialPitchGauge is Owned {//, ReentrancyGuard { event FamilialRewardClaimed(address familial_gauge, uint256 reward_amount, uint256 weeks_elapsed); event ChildGaugeRewardDistributed(address gauge, uint256 reward_amount); event RecoveredERC20(address token, uint256 amount); -} +} \ No newline at end of file diff --git a/src/hardhat/contracts/Curve/FraxGaugeControllerV2.vy b/src/hardhat/contracts/Curve/FraxGaugeControllerV2.vy index 5501fb98..a3c16083 100644 --- a/src/hardhat/contracts/Curve/FraxGaugeControllerV2.vy +++ b/src/hardhat/contracts/Curve/FraxGaugeControllerV2.vy @@ -1,4 +1,4 @@ -# @version 0.3.4 +# @version 0.3.7 """ @title Gauge Controller diff --git a/src/hardhat/contracts/Curve/IFraxFarm.sol b/src/hardhat/contracts/Curve/IFraxFarm.sol deleted file mode 100644 index 7a1e7d2b..00000000 --- a/src/hardhat/contracts/Curve/IFraxFarm.sol +++ /dev/null @@ -1,203 +0,0 @@ -// SPDX-License-Identifier: MIT -pragma solidity >=0.8.0; - -interface IFraxswap { - function getReserves() - external - view - returns ( - uint112 reserve0, - uint112 reserve1, - uint32 blockTimestampLast - ); - - function token0() external view returns (address); - - function token1() external view returns (address); -} - -/// @notice Minimalistic IFraxFarmUniV3 -interface IFraxFarmUniV3TokenPositions { - function uni_token0() external view returns (address); - - function uni_token1() external view returns (address); -} - -interface IFraxswapERC20 { - function decimals() external view returns (uint8); -} - -interface IFraxFarm { - function owner() external view returns (address); - - function stakingToken() external view returns (address); - - function fraxPerLPToken() external view returns (uint256); - - function calcCurCombinedWeight(address account) - external - view - returns ( - uint256 old_combined_weight, - uint256 new_vefxs_multiplier, - uint256 new_combined_weight - ); - - function periodFinish() external view returns (uint256); - - function getAllRewardTokens() external view returns (address[] memory); - - function earned(address account) external view returns (uint256[] memory new_earned); - - function totalLiquidityLocked() external view returns (uint256); - - function lockedLiquidityOf(address account) external view returns (uint256); - - function totalCombinedWeight() external view returns (uint256); - - function combinedWeightOf(address account) external view returns (uint256); - - function lockMultiplier(uint256 secs) external view returns (uint256); - - function rewardRates(uint256 token_idx) external view returns (uint256 rwd_rate); - - function userStakedFrax(address account) external view returns (uint256); - - function proxyStakedFrax(address proxy_address) external view returns (uint256); - - function maxLPForMaxBoost(address account) external view returns (uint256); - - function minVeFXSForMaxBoost(address account) external view returns (uint256); - - function minVeFXSForMaxBoostProxy(address proxy_address) external view returns (uint256); - - function veFXSMultiplier(address account) external view returns (uint256 vefxs_multiplier); - - function toggleValidVeFXSProxy(address proxy_address) external; - - function proxyToggleStaker(address staker_address) external; - - function stakerSetVeFXSProxy(address proxy_address) external; - - function getReward(address destination_address) external returns (uint256[] memory); - - function getReward(address destination_address, bool also_claim_extra) external returns (uint256[] memory); - - function vefxs_max_multiplier() external view returns (uint256); - - function vefxs_boost_scale_factor() external view returns (uint256); - - function vefxs_per_frax_for_max_boost() external view returns (uint256); - - function getProxyFor(address addr) external view returns (address); - - function sync() external; - - function nominateNewOwner(address _owner) external; - - function acceptOwnership() external; - - function updateRewardAndBalance(address acct, bool sync) external; - - function setRewardVars( - address reward_token_address, - uint256 _new_rate, - address _gauge_controller_address, - address _rewards_distributor_address - ) external; - - function calcCurrLockMultiplier(address account, uint256 stake_idx) - external - view - returns (uint256 midpoint_lock_multiplier); - - function staker_designated_proxies(address staker_address) external view returns (address); - - function sync_gauge_weights(bool andForce) external; -} - -interface IFraxFarmTransfers { - function setAllowance(address spender, uint256 lockId, uint256 amount) external; - function removeAllowance(address spender, uint256 lockId) external; - function setApprovalForAll(address spender, bool approved) external; - function isApproved(address staker, uint256 lockId, uint256 amount) external view returns (bool); - function transferLockedFrom( - address sender_address, - address receiver_address, - uint256 sender_lock_index, - uint256 transfer_amount, - bool use_receiver_lock_index, - uint256 receiver_lock_index - ) external returns (uint256); - - function transferLocked( - address receiver_address, - uint256 sender_lock_index, - uint256 transfer_amount, - bool use_receiver_lock_index, - uint256 receiver_lock_index - ) external returns (uint256); - - function beforeLockTransfer(address operator, address from, uint256 lockId, bytes calldata data) external returns (bytes4); - function onLockReceived(address operator, address from, uint256 lockId, bytes memory data) external returns (bytes4); - -} - -interface IFraxFarmERC20 is IFraxFarm, IFraxFarmTransfers { - struct LockedStake { - uint256 start_timestamp; - uint256 liquidity; - uint256 ending_timestamp; - uint256 lock_multiplier; // 6 decimals of precision. 1x = 1000000 - } - - /// TODO this references the public getter for `lockedStakes` in the contract - function lockedStakes(address account, uint256 stake_idx) external view returns (LockedStake memory); - - function lockedStakesOf(address account) external view returns (LockedStake[] memory); - - function lockedStakesOfLength(address account) external view returns (uint256); - - function lockAdditional(uint256 lockId, uint256 addl_liq) external; - - function lockLonger(uint256 lockId, uint256 _newUnlockTimestamp) external; - - function stakeLocked(uint256 liquidity, uint256 secs) external returns (uint256); - - function withdrawLocked(uint256 lockId, address destination_address) external returns (uint256); -} - -interface IFraxFarmUniV3 is IFraxFarm, IFraxFarmUniV3TokenPositions { - struct LockedNFT { - uint256 token_id; // for Uniswap V3 LPs - uint256 liquidity; - uint256 start_timestamp; - uint256 ending_timestamp; - uint256 lock_multiplier; // 6 decimals of precision. 1x = 1000000 - int24 tick_lower; - int24 tick_upper; - } - - function uni_tick_lower() external view returns (int24); - - function uni_tick_upper() external view returns (int24); - - function uni_required_fee() external view returns (uint24); - - function lockedNFTsOf(address account) external view returns (LockedNFT[] memory); - - function lockedNFTsOfLength(address account) external view returns (uint256); - - function lockAdditional( - uint256 token_id, - uint256 token0_amt, - uint256 token1_amt, - uint256 token0_min_in, - uint256 token1_min_in, - bool use_balof_override - ) external; - - function stakeLocked(uint256 token_id, uint256 secs) external; - - function withdrawLocked(uint256 token_id, address destination_address) external; -} diff --git a/src/hardhat/contracts/Curve/veFPIS.vy b/src/hardhat/contracts/Curve/veFPIS.vy index 4d3d8719..f2a22a87 100644 --- a/src/hardhat/contracts/Curve/veFPIS.vy +++ b/src/hardhat/contracts/Curve/veFPIS.vy @@ -1318,4 +1318,4 @@ def stakerSetProxy(_proxy: address): # Set the proxy self.staker_whitelisted_proxy[msg.sender] = _proxy - log StakerProxySet(_proxy) + log StakerProxySet(_proxy) \ No newline at end of file diff --git a/src/hardhat/contracts/ERC20/__CROSSCHAIN/CrossChainCanonicalV2.sol b/src/hardhat/contracts/ERC20/__CROSSCHAIN/CrossChainCanonicalV2.sol old mode 100644 new mode 100755 index 22b70c4c..bfd78443 --- a/src/hardhat/contracts/ERC20/__CROSSCHAIN/CrossChainCanonicalV2.sol +++ b/src/hardhat/contracts/ERC20/__CROSSCHAIN/CrossChainCanonicalV2.sol @@ -29,7 +29,7 @@ import { ERC20PermitPermissionedMint } from "../ERC20PermitPermissionedMint.sol" contract CrossChainCanonicalV2 is ERC20PermitPermissionedMint { /* ========== CONSTRUCTOR ========== */ - constructor( + constructor( address _creator_address, address _timelock_address, string memory _name, diff --git a/src/hardhat/contracts/Misc_AMOs/balancer/IBalancerVault.sol b/src/hardhat/contracts/Misc_AMOs/balancer/IBalancerVault.sol new file mode 100644 index 00000000..56001691 --- /dev/null +++ b/src/hardhat/contracts/Misc_AMOs/balancer/IBalancerVault.sol @@ -0,0 +1,33 @@ +// SPDX-License-Identifier: GPL-2.0-or-later +pragma solidity >=0.8.0; + + + +interface IBalancerVault { + function WETH () external view returns (address); +// function batchSwap (uint8 kind, tuple[] swaps, address[] assets, tuple funds, int256[] limits, uint256 deadline) external returns (int256[] assetDeltas); + function deregisterTokens (bytes32 poolId, address[] memory tokens) external; +// function exitPool (bytes32 poolId, address sender, address recipient, tuple request) external; + function flashLoan (address recipient, address[] memory tokens, uint256[] memory amounts, bytes memory userData) external; + function getActionId (bytes4 selector) external view returns (bytes32); + function getAuthorizer () external view returns (address); + function getDomainSeparator () external view returns (bytes32); + function getInternalBalance (address user, address[] memory tokens) external view returns (uint256[] memory balances); + function getNextNonce (address user) external view returns (uint256); + function getPausedState () external view returns (bool paused, uint256 pauseWindowEndTime, uint256 bufferPeriodEndTime); + function getPool (bytes32 poolId) external view returns (address, uint8); + function getPoolTokenInfo (bytes32 poolId, address token) external view returns (uint256 cash, uint256 managed, uint256 lastChangeBlock, address assetManager); + function getPoolTokens (bytes32 poolId) external view returns (address[] memory tokens, uint256[] memory balances, uint256 lastChangeBlock); + function getProtocolFeesCollector () external view returns (address); + function hasApprovedRelayer (address user, address relayer) external view returns (bool); +// function joinPool (bytes32 poolId, address sender, address recipient, tuple request) external; +// function managePoolBalance (tuple[] ops) external; +// function manageUserBalance (tuple[] ops) external; +// function queryBatchSwap (uint8 kind, tuple[] swaps, address[] assets, tuple funds) external returns (int256[]); + function registerPool (uint8 specialization) external returns (bytes32); + function registerTokens (bytes32 poolId, address[] memory tokens, address[] memory assetManagers) external; + function setAuthorizer (address newAuthorizer) external; + function setPaused (bool paused) external; + function setRelayerApproval (address sender, address relayer, bool approved) external; +// function swap (tuple singleSwap, tuple funds, uint256 limit, uint256 deadline) external returns (uint256 amountCalculated); +} diff --git a/src/hardhat/contracts/Misc_AMOs/balancer/IStablePool.sol b/src/hardhat/contracts/Misc_AMOs/balancer/IStablePool.sol new file mode 100644 index 00000000..3b063ebc --- /dev/null +++ b/src/hardhat/contracts/Misc_AMOs/balancer/IStablePool.sol @@ -0,0 +1,46 @@ +// SPDX-License-Identifier: GPL-2.0-or-later +pragma solidity >=0.8.0; + + +interface IStablePool { + function DOMAIN_SEPARATOR () external view returns (bytes32); + function allowance (address owner, address spender) external view returns (uint256); + function approve (address spender, uint256 amount) external returns (bool); + function balanceOf (address account) external view returns (uint256); + function decimals () external view returns (uint8); + function decreaseAllowance (address spender, uint256 amount) external returns (bool); + function disableRecoveryMode () external; + function enableRecoveryMode () external; + function getActionId (bytes4 selector) external view returns (bytes32); + function getAmplificationParameter () external view returns (uint256 value, bool isUpdating, uint256 precision); + function getAuthorizer () external view returns (address); + function getLastInvariant () external view returns (uint256 lastInvariant, uint256 lastInvariantAmp); + function getOwner () external view returns (address); + function getPausedState () external view returns (bool paused, uint256 pauseWindowEndTime, uint256 bufferPeriodEndTime); + function getPoolId () external view returns (bytes32); + function getRate () external view returns (uint256); + function getScalingFactors () external view returns (uint256[] memory); + function getSwapFeePercentage () external view returns (uint256); + function getVault () external view returns (address); + function inRecoveryMode () external view returns (bool); + function increaseAllowance (address spender, uint256 addedValue) external returns (bool); + function name () external view returns (string memory); + function nonces (address owner) external view returns (uint256); + function onExitPool (bytes32 poolId, address sender, address recipient, uint256[] memory balances, uint256 lastChangeBlock, uint256 protocolSwapFeePercentage, bytes memory userData) external returns (uint256[] memory, uint256[] memory); + function onJoinPool (bytes32 poolId, address sender, address recipient, uint256[] memory balances, uint256 lastChangeBlock, uint256 protocolSwapFeePercentage, bytes memory userData) external returns (uint256[] memory, uint256[] memory); +// function onSwap (tuple swapRequest, uint256[] balances, uint256 indexIn, uint256 indexOut) external returns (uint256); +// function onSwap (tuple request, uint256 balanceTokenIn, uint256 balanceTokenOut) external returns (uint256); + function pause () external; + function permit (address owner, address spender, uint256 value, uint256 deadline, uint8 v, bytes32 r, bytes32 s) external; + function queryExit (bytes32 poolId, address sender, address recipient, uint256[] memory balances, uint256 lastChangeBlock, uint256 protocolSwapFeePercentage, bytes memory userData) external returns (uint256 bptIn, uint256[] memory amountsOut); + function queryJoin (bytes32 poolId, address sender, address recipient, uint256[] memory balances, uint256 lastChangeBlock, uint256 protocolSwapFeePercentage, bytes memory userData) external returns (uint256 bptOut, uint256[] memory amountsIn); + function setAssetManagerPoolConfig (address token, bytes memory poolConfig) external; + function setSwapFeePercentage (uint256 swapFeePercentage) external; + function startAmplificationParameterUpdate (uint256 rawEndValue, uint256 endTime) external; + function stopAmplificationParameterUpdate () external; + function symbol () external view returns (string memory); + function totalSupply () external view returns (uint256); + function transfer (address recipient, uint256 amount) external returns (bool); + function transferFrom (address sender, address recipient, uint256 amount) external returns (bool); + function unpause () external; +} diff --git a/src/hardhat/contracts/Misc_AMOs/bunni/IBalancerOracle.sol b/src/hardhat/contracts/Misc_AMOs/bunni/IBalancerOracle.sol new file mode 100644 index 00000000..2021c6ec --- /dev/null +++ b/src/hardhat/contracts/Misc_AMOs/bunni/IBalancerOracle.sol @@ -0,0 +1,14 @@ +// SPDX-License-Identifier: GPL-2.0-or-later +pragma solidity >=0.8.0; + +interface IBalancerOracle { + function ago ( ) external view returns ( uint56 ); + function balancerTwapOracle ( ) external view returns ( address ); + function getPrice ( ) external view returns ( uint256 price ); + function minPrice ( ) external view returns ( uint128 ); + function multiplier ( ) external view returns ( uint16 ); + function owner ( ) external view returns ( address ); + function secs ( ) external view returns ( uint56 ); + function setParams ( uint16 multiplier_, uint56 secs_, uint56 ago_, uint128 minPrice_ ) external; + function transferOwnership ( address newOwner ) external; +} diff --git a/src/hardhat/contracts/Misc_AMOs/bunni/IBunniGauge.sol b/src/hardhat/contracts/Misc_AMOs/bunni/IBunniGauge.sol new file mode 100644 index 00000000..23a57235 --- /dev/null +++ b/src/hardhat/contracts/Misc_AMOs/bunni/IBunniGauge.sol @@ -0,0 +1,72 @@ +// SPDX-License-Identifier: GPL-2.0-or-later +pragma solidity >=0.8.0; + +interface IBunniGauge { + function deposit ( uint256 _value ) external; + function deposit ( uint256 _value, address _addr ) external; + function deposit ( uint256 _value, address _addr, bool _claim_rewards ) external; + function withdraw ( uint256 _value ) external; + function withdraw ( uint256 _value, bool _claim_rewards ) external; + function claim_rewards ( ) external; + function claim_rewards ( address _addr ) external; + function claim_rewards ( address _addr, address _receiver ) external; + function transferFrom ( address _from, address _to, uint256 _value ) external returns ( bool ); + function transfer ( address _to, uint256 _value ) external returns ( bool ); + function approve ( address _spender, uint256 _value ) external returns ( bool ); + function permit ( address _owner, address _spender, uint256 _value, uint256 _deadline, uint8 _v, bytes32 _r, bytes32 _s ) external returns ( bool ); + function increaseAllowance ( address _spender, uint256 _added_value ) external returns ( bool ); + function decreaseAllowance ( address _spender, uint256 _subtracted_value ) external returns ( bool ); + function user_checkpoint ( address addr ) external returns ( bool ); + function set_rewards_receiver ( address _receiver ) external; + function kick ( address addr ) external; + function deposit_reward_token ( address _reward_token, uint256 _amount ) external; + function add_reward ( address _reward_token, address _distributor ) external; + function set_reward_distributor ( address _reward_token, address _distributor ) external; + function makeGaugePermissionless ( ) external; + function killGauge ( ) external; + function unkillGauge ( ) external; + function change_pending_admin ( address new_pending_admin ) external; + function claim_admin ( ) external; + function set_tokenless_production ( uint8 new_tokenless_production ) external; + function claimed_reward ( address _addr, address _token ) external view returns ( uint256 ); + function claimable_reward ( address _user, address _reward_token ) external view returns ( uint256 ); + function claimable_tokens ( address addr ) external returns ( uint256 ); + function integrate_checkpoint ( ) external view returns ( uint256 ); + function future_epoch_time ( ) external view returns ( uint256 ); + function inflation_rate ( ) external view returns ( uint256 ); + function decimals ( ) external view returns ( uint256 ); + function version ( ) external view returns ( string memory ); + function allowance ( address owner, address spender ) external view returns ( uint256 ); + function is_killed ( ) external view returns ( bool ); + function initialize ( address _lp_token, uint256 relative_weight_cap, address _voting_escrow_delegation, address _admin, bytes32 _position_key ) external; + function setRelativeWeightCap ( uint256 relative_weight_cap ) external; + function getRelativeWeightCap ( ) external view returns ( uint256 ); + function getCappedRelativeWeight ( uint256 time ) external view returns ( uint256 ); + function getMaxRelativeWeightCap ( ) external pure returns ( uint256 ); + function tokenless_production ( ) external view returns ( uint8 ); + function pending_admin ( ) external view returns ( address ); + function admin ( ) external view returns ( address ); + function voting_escrow_delegation ( ) external view returns ( address ); + function balanceOf ( address arg0 ) external view returns ( uint256 ); + function totalSupply ( ) external view returns ( uint256 ); + function name ( ) external view returns ( string memory ); + function symbol ( ) external view returns ( string memory ); + function DOMAIN_SEPARATOR ( ) external view returns ( bytes32 ); + function nonces ( address arg0 ) external view returns ( uint256 ); + function lp_token ( ) external view returns ( address ); + function gauge_state ( ) external view returns ( uint8 ); + function position_key ( ) external view returns ( bytes32 ); + function reward_count ( ) external view returns ( uint256 ); +// function reward_data ( address arg0 ) external view returns ( tuple ); + function rewards_receiver ( address arg0 ) external view returns ( address ); + function reward_integral_for ( address arg0, address arg1 ) external view returns ( uint256 ); + function working_balances ( address arg0 ) external view returns ( uint256 ); + function working_supply ( ) external view returns ( uint256 ); + function integrate_inv_supply_of ( address arg0 ) external view returns ( uint256 ); + function integrate_checkpoint_of ( address arg0 ) external view returns ( uint256 ); + function integrate_fraction ( address arg0 ) external view returns ( uint256 ); + function period ( ) external view returns ( int128 ); + function reward_tokens ( uint256 arg0 ) external view returns ( address ); + function period_timestamp ( uint256 arg0 ) external view returns ( uint256 ); + function integrate_inv_supply ( uint256 arg0 ) external view returns ( uint256 ); +} diff --git a/src/hardhat/contracts/Misc_AMOs/bunni/IOptionsToken.sol b/src/hardhat/contracts/Misc_AMOs/bunni/IOptionsToken.sol new file mode 100644 index 00000000..e8bc240f --- /dev/null +++ b/src/hardhat/contracts/Misc_AMOs/bunni/IOptionsToken.sol @@ -0,0 +1,29 @@ +// SPDX-License-Identifier: GPL-2.0-or-later +pragma solidity >=0.8.0; + +interface IOptionsToken { + function DOMAIN_SEPARATOR ( ) external view returns ( bytes32 ); + function allowance ( address, address ) external view returns ( uint256 ); + function approve ( address spender, uint256 amount ) external returns ( bool ); + function balanceOf ( address ) external view returns ( uint256 ); + function decimals ( ) external view returns ( uint8 ); + function exercise ( uint256 amount, uint256 maxPaymentAmount, address recipient, uint256 deadline ) external returns ( uint256 paymentAmount ); + function exercise ( uint256 amount, uint256 maxPaymentAmount, address recipient ) external returns ( uint256 paymentAmount ); + function mint ( address to, uint256 amount ) external; + function name ( ) external view returns ( string memory ); + function nonces ( address ) external view returns ( uint256 ); + function oracle ( ) external view returns ( address ); + function owner ( ) external view returns ( address ); + function paymentToken ( ) external view returns ( address ); + function permit ( address owner, address spender, uint256 value, uint256 deadline, uint8 v, bytes32 r, bytes32 s ) external; + function setOracle ( address oracle_ ) external; + function setTreasury ( address treasury_ ) external; + function symbol ( ) external view returns ( string memory ); + function tokenAdmin ( ) external view returns ( address ); + function totalSupply ( ) external view returns ( uint256 ); + function transfer ( address to, uint256 amount ) external returns ( bool ); + function transferFrom ( address from, address to, uint256 amount ) external returns ( bool ); + function transferOwnership ( address newOwner ) external; + function treasury ( ) external view returns ( address ); + function underlyingToken ( ) external view returns ( address ); +} diff --git a/src/hardhat/contracts/Misc_AMOs/sentiment/ILToken.sol b/src/hardhat/contracts/Misc_AMOs/sentiment/ILToken.sol new file mode 100644 index 00000000..13516e5e --- /dev/null +++ b/src/hardhat/contracts/Misc_AMOs/sentiment/ILToken.sol @@ -0,0 +1,56 @@ +// SPDX-License-Identifier: GPL-2.0-or-later +pragma solidity >=0.8.0; + +interface ILToken { + function DOMAIN_SEPARATOR() external view returns(bytes32); + function accountManager() external view returns(address); + function admin() external view returns(address); + function allowance(address, address) external view returns(uint256); + function approve(address spender, uint256 amount) external returns(bool); + function asset() external view returns(address); + function balanceOf(address) external view returns(uint256); + function borrows() external view returns(uint256); + function borrowsOf(address) external view returns(uint256); + function collectFrom(address account, uint256 amt) external returns(bool); + function convertToAssets(uint256 shares) external view returns(uint256); + function convertToShares(uint256 assets) external view returns(uint256); + function decimals() external view returns(uint8); + function deposit(uint256 assets, address receiver) external returns(uint256 shares); + function getBorrowBalance(address account) external view returns(uint256); + function getBorrows() external view returns(uint256); + function init(address _asset, string memory _name, string memory _symbol, address _registry, uint256 _originationFee, address _treasury, uint256 _reserveShares, uint256 _maxSupply) external; + function initDep(string memory _rateModel) external; + function lastUpdated() external view returns(uint256); + function lendTo(address account, uint256 amt) external returns(bool isFirstBorrow); + function maxDeposit(address) external view returns(uint256); + function maxMint(address) external view returns(uint256); + function maxRedeem(address owner) external view returns(uint256); + function maxSupply() external view returns(uint256); + function maxWithdraw(address owner) external view returns(uint256); + function mint(uint256 shares, address receiver) external returns(uint256 assets); + function name() external view returns(string memory); + function nonces(address) external view returns(uint256); + function originationFee() external view returns(uint256); + function paused() external view returns(bool); + function permit(address owner, address spender, uint256 value, uint256 deadline, uint8 v, bytes32 r, bytes32 s) external; + function previewDeposit(uint256 assets) external view returns(uint256); + function previewMint(uint256 shares) external view returns(uint256); + function previewRedeem(uint256 shares) external view returns(uint256); + function previewWithdraw(uint256 assets) external view returns(uint256); + function rateModel() external view returns(address); + function redeem(uint256 shares, address receiver, address owner) external returns(uint256 assets); + function registry() external view returns(address); + function symbol() external view returns(string memory); + function togglePause() external; + function totalAssets() external view returns(uint256); + function totalBorrowShares() external view returns(uint256); + function totalSupply() external view returns(uint256); + function transfer(address to, uint256 amount) external returns(bool); + function transferFrom(address from, address to, uint256 amount) external returns(bool); + function transferOwnership(address newAdmin) external; + function treasury() external view returns(address); + function updateMaxSupply(uint256 _maxSupply) external; + function updateOriginationFee(uint256 _originationFee) external; + function updateState() external; + function withdraw(uint256 assets, address receiver, address owner) external returns(uint256 shares); +} diff --git a/src/hardhat/contracts/Misc_AMOs/sentiment/ILinearRateModel.sol b/src/hardhat/contracts/Misc_AMOs/sentiment/ILinearRateModel.sol new file mode 100644 index 00000000..d706ead4 --- /dev/null +++ b/src/hardhat/contracts/Misc_AMOs/sentiment/ILinearRateModel.sol @@ -0,0 +1,11 @@ +// SPDX-License-Identifier: GPL-2.0-or-later +pragma solidity >=0.8.0; + +interface ILinearRateModel { + function MAX_EXCESS_USAGE_RATIO ( ) external view returns ( uint256 ); + function OPTIMAL_USAGE_RATIO ( ) external view returns ( uint256 ); + function baseRate ( ) external view returns ( uint256 ); + function getBorrowRatePerSecond ( uint256 liquidity, uint256 totalDebt ) external view returns ( uint256 ); + function slope1 ( ) external view returns ( uint256 ); + function slope2 ( ) external view returns ( uint256 ); +} diff --git a/src/hardhat/contracts/Staking/CommunalFarm.sol b/src/hardhat/contracts/Staking/CommunalFarm.sol index d895fa04..d1d12483 100755 --- a/src/hardhat/contracts/Staking/CommunalFarm.sol +++ b/src/hardhat/contracts/Staking/CommunalFarm.sol @@ -405,7 +405,7 @@ contract CommunalFarm is Owned, ReentrancyGuard { _locked_liquidity[staker_address] = _locked_liquidity[staker_address].add(liquidity); // Need to call to update the combined weights - _updateRewardAndBalance(staker_address, false); + _updateRewardAndBalance(staker_address, true); // Needed for edge case if the staker only claims once, and after the lock expired if (lastRewardClaimTime[staker_address] == 0) lastRewardClaimTime[staker_address] = block.timestamp; diff --git a/src/hardhat/contracts/Staking/FraxCrossChainFarm.sol b/src/hardhat/contracts/Staking/FraxCrossChainFarm.sol index 4d738a4f..43192d9f 100755 --- a/src/hardhat/contracts/Staking/FraxCrossChainFarm.sol +++ b/src/hardhat/contracts/Staking/FraxCrossChainFarm.sol @@ -497,7 +497,7 @@ contract FraxCrossChainFarm is Owned, ReentrancyGuard { _locked_liquidity[staker_address] = _locked_liquidity[staker_address].add(liquidity); // Need to call to update the combined weights - _updateRewardAndBalance(staker_address, false); + _updateRewardAndBalance(staker_address, true); emit StakeLocked(staker_address, liquidity, secs, kek_id, source_address); } diff --git a/src/hardhat/contracts/Staking/FraxCrossChainFarmV2.sol b/src/hardhat/contracts/Staking/FraxCrossChainFarmV2.sol index e498c7bb..aca8571c 100755 --- a/src/hardhat/contracts/Staking/FraxCrossChainFarmV2.sol +++ b/src/hardhat/contracts/Staking/FraxCrossChainFarmV2.sol @@ -121,6 +121,7 @@ contract FraxCrossChainFarmV2 is Owned, ReentrancyGuard { mapping(address => uint256) public rewards1; uint256 public lastRewardPull; mapping(address => uint256) internal lastRewardClaimTime; // staker addr -> timestamp + mapping(address => uint256) internal lastUserInteractionTime; // staker addr -> timestamp // Balance tracking uint256 private _total_liquidity_locked; @@ -502,6 +503,9 @@ contract FraxCrossChainFarmV2 is Owned, ReentrancyGuard { } } + + // Update the last user interaction time + lastUserInteractionTime[account] = block.timestamp; } // Add additional LPs to an existing locked stake @@ -595,7 +599,7 @@ contract FraxCrossChainFarmV2 is Owned, ReentrancyGuard { _locked_liquidity[staker_address] = _locked_liquidity[staker_address].add(liquidity); // Need to call to update the combined weights - _updateRewardAndBalance(staker_address, false); + _updateRewardAndBalance(staker_address, true); emit StakeLocked(staker_address, liquidity, secs, kek_id, source_address); } @@ -627,7 +631,7 @@ contract FraxCrossChainFarmV2 is Owned, ReentrancyGuard { delete lockedStakes[staker_address][theArrayIndex]; // Need to call to update the combined weights - _updateRewardAndBalance(staker_address, false); + _updateRewardAndBalance(staker_address, true); // Give the tokens to the destination_address // Should throw if insufficient balance @@ -664,7 +668,7 @@ contract FraxCrossChainFarmV2 is Owned, ReentrancyGuard { emit RewardPaid(rewardee, reward1, address(rewardsToken1), destination_address); } - // Update the last reward claim time + // Update the last reward claim and interaction time lastRewardClaimTime[rewardee] = block.timestamp; } diff --git a/src/hardhat/contracts/Staking/FraxCrossChainFarmV3.sol b/src/hardhat/contracts/Staking/FraxCrossChainFarmV3_ERC20.sol similarity index 88% rename from src/hardhat/contracts/Staking/FraxCrossChainFarmV3.sol rename to src/hardhat/contracts/Staking/FraxCrossChainFarmV3_ERC20.sol index 122e79cf..33bed557 100755 --- a/src/hardhat/contracts/Staking/FraxCrossChainFarmV3.sol +++ b/src/hardhat/contracts/Staking/FraxCrossChainFarmV3_ERC20.sol @@ -9,7 +9,7 @@ pragma solidity >=0.8.0; // | /_/ /_/ \__,_/_/|_| /_/ /_/_/ /_/\__,_/_/ /_/\___/\___/ | // | | // ==================================================================== -// ======================= FraxCrossChainFarmV3 ======================= +// ==================== FraxCrossChainFarmV3_ERC20 ==================== // ==================================================================== // No veFXS logic // Because of lack of cross-chain reading of the gauge controller's emission rate, @@ -41,13 +41,19 @@ import "../ERC20/ERC20.sol"; import '../Uniswap/TransferHelper.sol'; import "../ERC20/SafeERC20.sol"; + +import '../Misc_AMOs/balancer/IStablePool.sol'; // Balancer frxETH-WETH +import '../Misc_AMOs/balancer/IBalancerVault.sol'; // Balancer frxETH-WETH +import "../Oracle/AggregatorV3Interface.sol"; // Balancer frxETH-WETH + // import '../Misc_AMOs/curve/I2pool.sol'; // Curve 2-token // import '../Misc_AMOs/curve/I3pool.sol'; // Curve 3-token // import '../Misc_AMOs/mstable/IFeederPool.sol'; // mStable // import '../Misc_AMOs/impossible/IStableXPair.sol'; // Impossible // import '../Misc_AMOs/mstable/IFeederPool.sol'; // mStable -import '../Misc_AMOs/saddle/ISaddleLPToken.sol'; // Saddle Arbitrum L2D4 -import '../Misc_AMOs/saddle/ISaddlePermissionlessSwap.sol'; // Saddle Arbitrum L2D4 +// import '../Misc_AMOs/saddle/ISaddleLPToken.sol'; // Saddle Arbitrum L2D4 +// import '../Misc_AMOs/saddle/ISaddlePermissionlessSwap.sol'; // Saddle Arbitrum L2D4 +// import '../Misc_AMOs/sentiment/ILToken.sol'; // Sentiment LFrax // import '../Misc_AMOs/snowball/ILPToken.sol'; // Snowball S4D - [Part 1] // import '../Misc_AMOs/snowball/ISwapFlashLoan.sol'; // Snowball S4D - [Part 2] // import '../Uniswap/Interfaces/IUniswapV2Pair.sol'; // Uniswap V2 @@ -57,7 +63,7 @@ import "../Utils/ReentrancyGuard.sol"; // Inheritance import "./Owned.sol"; -contract FraxCrossChainFarmV3 is Owned, ReentrancyGuard { +contract FraxCrossChainFarmV3_ERC20 is Owned, ReentrancyGuard { using SafeMath for uint256; using SafeERC20 for ERC20; @@ -68,11 +74,27 @@ contract FraxCrossChainFarmV3 is Owned, ReentrancyGuard { CrossChainCanonicalFXS public rewardsToken0; // Assumed to be canFXS ERC20 public rewardsToken1; + IStablePool public stakingToken; // Balancer frxETH-WETH + AggregatorV3Interface internal priceFeedETHUSD = AggregatorV3Interface(0xF9680D99D6C9589e2a93a78A04A279e509205945); // For Balancer frxETH-WETH + function setETHUSDOracle(address _eth_usd_oracle_address) public onlyByOwnGov { + require(_eth_usd_oracle_address != address(0), "Zero address detected"); + + priceFeedETHUSD = AggregatorV3Interface(_eth_usd_oracle_address); + } + function getLatestETHPriceE8() public view returns (int) { + // Returns in E8 + (uint80 roundID, int price, , uint256 updatedAt, uint80 answeredInRound) = priceFeedETHUSD.latestRoundData(); + require(price >= 0 && updatedAt!= 0 && answeredInRound >= roundID, "Invalid chainlink price"); + + return price; + } + // I2pool public stakingToken; // Curve 2-token // I3pool public stakingToken; // Curve 3-token // IStableXPair public stakingToken; // Impossible // IFeederPool public stakingToken; // mStable - ISaddleLPToken public stakingToken; // Saddle L2D4 + // ISaddleLPToken public stakingToken; // Saddle L2D4 + // ILToken public stakingToken; // Sentiment LFrax // ILPToken public stakingToken; // Snowball S4D // IUniswapV2Pair public stakingToken; // Uniswap V2 @@ -147,6 +169,7 @@ contract FraxCrossChainFarmV3 is Owned, ReentrancyGuard { bool public withdrawalsPaused; // For emergencies bool public rewardsCollectionPaused; // For emergencies bool public stakingPaused; // For emergencies + bool public collectRewardsOnWithdrawalPaused; // For emergencies if a token is overemitted bool public isInitialized; /* ========== STRUCTS ========== */ @@ -182,7 +205,7 @@ contract FraxCrossChainFarmV3 is Owned, ReentrancyGuard { } modifier updateRewardAndBalance(address account, bool sync_too) { - _updateRewardAndBalance(account, sync_too); + _updateRewardAndBalance(account, sync_too, false); _; } @@ -201,11 +224,13 @@ contract FraxCrossChainFarmV3 is Owned, ReentrancyGuard { rewardsToken0 = CrossChainCanonicalFXS(_rewardsToken0); rewardsToken1 = ERC20(_rewardsToken1); + stakingToken = IStablePool(_stakingToken); // frxETH-WETH // stakingToken = I2pool(_stakingToken); // stakingToken = I3pool(_stakingToken); // stakingToken = IStableXPair(_stakingToken); // stakingToken = IFeederPool(_stakingToken); - stakingToken = ISaddleLPToken(_stakingToken); + // stakingToken = ISaddleLPToken(_stakingToken); + // stakingToken = ILToken(_stakingToken); // stakingToken = ILPToken(_stakingToken); // stakingToken = IUniswapV2Pair(_stakingToken); @@ -276,9 +301,22 @@ contract FraxCrossChainFarmV3 is Owned, ReentrancyGuard { // Get the amount of FRAX 'inside' of the lp tokens uint256 frax_per_lp_token; + // Balancer frxETH-WETH + // ============================================ + { + IBalancerVault vault = IBalancerVault(0xBA12222222228d8Ba445958a75a0704d566BF2C8); + /** + * `cash` is the number of tokens the Vault currently holds for the Pool. `managed` is the number of tokens + * withdrawn and held outside the Vault by the Pool's token Asset Manager. The Pool's total balance for `token` + * equals the sum of `cash` and `managed`. + */ + (uint256 cash, uint256 managed, , ) = vault.getPoolTokenInfo(0x5dee84ffa2dc27419ba7b3419d7146e53e4f7ded000200000000000000000a4e, 0xEe327F889d5947c1dc1934Bb208a1E792F953E96); + uint256 frxETH_usd_val_per_lp_e8 = ((cash + managed) * uint256(getLatestETHPriceE8())) / stakingToken.totalSupply(); + frax_per_lp_token = frxETH_usd_val_per_lp_e8 * (1e10); // We use USD as "Frax" here. Scale up to E18 + } - // // Curve 2-token - // // ============================================ + // Curve 2-token + // ============================================ // { // address coin0 = stakingToken.coins(0); // uint256 total_frax_reserves; @@ -291,8 +329,8 @@ contract FraxCrossChainFarmV3 is Owned, ReentrancyGuard { // frax_per_lp_token = total_frax_reserves.mul(1e18).div(stakingToken.totalSupply()); // } - // // Curve 3-token - // // ============================================ + // Curve 3-token + // ============================================ // { // address coin0 = stakingToken.coins(0); // address coin1 = stakingToken.coins(1); @@ -320,11 +358,11 @@ contract FraxCrossChainFarmV3 is Owned, ReentrancyGuard { // Saddle L2D4 // ============================================ - { - ISaddlePermissionlessSwap ISPS = ISaddlePermissionlessSwap(0xF2839E0b30B5e96083085F498b14bbc12530b734); - uint256 total_frax = ISPS.getTokenBalance(ISPS.getTokenIndex(frax_address)); - frax_per_lp_token = total_frax.mul(1e18).div(stakingToken.totalSupply()); - } + // { + // ISaddlePermissionlessSwap ISPS = ISaddlePermissionlessSwap(0xF2839E0b30B5e96083085F498b14bbc12530b734); + // uint256 total_frax = ISPS.getTokenBalance(ISPS.getTokenIndex(frax_address)); + // frax_per_lp_token = total_frax.mul(1e18).div(stakingToken.totalSupply()); + // } // Most Saddles / Snowball S4D // ============================================ @@ -334,6 +372,12 @@ contract FraxCrossChainFarmV3 is Owned, ReentrancyGuard { // frax_per_lp_token = total_frax.mul(1e18).div(stakingToken.totalSupply()); // } + // Sentiment LFrax + // ============================================ + // { + // frax_per_lp_token = stakingToken.convertToAssets(1e18); + // } + // Uniswap V2 & Impossible // ============================================ // { @@ -523,11 +567,16 @@ contract FraxCrossChainFarmV3 is Owned, ReentrancyGuard { } - function _updateRewardAndBalance(address account, bool sync_too) internal { + function _updateRewardAndBalance(address account, bool sync_too, bool pre_sync_vemxstored) internal { // Need to retro-adjust some things if the period hasn't been renewed, then start a new one if (sync_too){ sync(); } + + // Used to make sure the veFXS multiplier is correct if a stake is increased, before calcCurCombinedWeight + if (pre_sync_vemxstored){ + _vefxsMultiplierStored[account] = veFXSMultiplier(account); + } if (account != address(0)) { // To keep the math correct, the user's combined weight must be recomputed to account for their @@ -586,7 +635,7 @@ contract FraxCrossChainFarmV3 is Owned, ReentrancyGuard { _locked_liquidity[msg.sender] += addl_liq; // Need to call to update the combined weights - _updateRewardAndBalance(msg.sender, false); + _updateRewardAndBalance(msg.sender, false, true); emit LockedAdditional(msg.sender, kek_id, addl_liq); } @@ -619,7 +668,7 @@ contract FraxCrossChainFarmV3 is Owned, ReentrancyGuard { ); // Need to call to update the combined weights - _updateRewardAndBalance(msg.sender, false); + _updateRewardAndBalance(msg.sender, false, true); emit LockedLonger(msg.sender, kek_id, new_secs, block.timestamp, new_ending_ts); } @@ -684,23 +733,29 @@ contract FraxCrossChainFarmV3 is Owned, ReentrancyGuard { _locked_liquidity[staker_address] = _locked_liquidity[staker_address].add(liquidity); // Need to call to update the combined weights - _updateRewardAndBalance(staker_address, false); + _updateRewardAndBalance(staker_address, false, true); emit StakeLocked(staker_address, liquidity, secs, kek_id, source_address); } // Two different withdrawLocked functions are needed because of delegateCall and msg.sender issues (important for migration) - function withdrawLocked(bytes32 kek_id) nonReentrant public { + function withdrawLocked(bytes32 kek_id, bool claim_rewards) nonReentrant public { require(withdrawalsPaused == false, "Withdrawals paused"); - _withdrawLocked(msg.sender, msg.sender, kek_id); + _withdrawLocked(msg.sender, msg.sender, kek_id, claim_rewards); } // No withdrawer == msg.sender check needed since this is only internally callable and the checks are done in the wrapper // functions like withdraw(), migrator_withdraw_unlocked() and migrator_withdraw_locked() - function _withdrawLocked(address staker_address, address destination_address, bytes32 kek_id) internal { + function _withdrawLocked(address staker_address, address destination_address, bytes32 kek_id, bool claim_rewards) internal { // Collect rewards first and then update the balances - _getReward(staker_address, destination_address); - + // collectRewardsOnWithdrawalPaused to be used in an emergency situation if reward is overemitted or not available + // and the user can forfeit rewards to get their principal back. User can also specify it in withdrawLocked + if (claim_rewards || !collectRewardsOnWithdrawalPaused) _getReward(staker_address, destination_address); + else { + // Sync the rewards at least + _updateRewardAndBalance(staker_address, true, false); + } + (LockedStake memory thisStake, uint256 theArrayIndex) = _getStake(staker_address, kek_id); require(thisStake.kek_id == kek_id, "Stake not found"); require(block.timestamp >= thisStake.ending_timestamp || stakesUnlocked == true || valid_migrators[msg.sender] == true, "Stake is still locked!"); @@ -716,7 +771,7 @@ contract FraxCrossChainFarmV3 is Owned, ReentrancyGuard { delete lockedStakes[staker_address][theArrayIndex]; // Need to call to update the combined weights - _updateRewardAndBalance(staker_address, false); + _updateRewardAndBalance(staker_address, true, true); // Give the tokens to the destination_address // Should throw if insufficient balance @@ -767,7 +822,8 @@ contract FraxCrossChainFarmV3 is Owned, ReentrancyGuard { // Get the current reward token balances uint256 curr_bal_0 = rewardsToken0.balanceOf(address(this)); - uint256 curr_bal_1 = rewardsToken1.balanceOf(address(this)); + uint256 curr_bal_1; + if (address(rewardsToken1) != address(0)) curr_bal_1 = rewardsToken1.balanceOf(address(this)); // Update the owed amounts based off the old reward rates // Anything over a week is zeroed @@ -850,7 +906,7 @@ contract FraxCrossChainFarmV3 is Owned, ReentrancyGuard { // Used for migrations function migrator_withdraw_locked(address staker_address, bytes32 kek_id) external isMigrating { require(staker_allowed_migrators[staker_address][msg.sender] && valid_migrators[msg.sender], "Mig. invalid or unapproved"); - _withdrawLocked(staker_address, msg.sender, kek_id); + _withdrawLocked(staker_address, msg.sender, kek_id, true); } // Adds supported migrator address @@ -910,6 +966,10 @@ contract FraxCrossChainFarmV3 is Owned, ReentrancyGuard { migrationsOn = !migrationsOn; } + function toggleCollectRewardsOnWithdrawal() external onlyByOwnGov { + collectRewardsOnWithdrawalPaused = !collectRewardsOnWithdrawalPaused; + } + function toggleStaking() external onlyByOwnGov { stakingPaused = !stakingPaused; } diff --git a/src/hardhat/contracts/Staking/FraxCrossChainFarmV3_Pos_Rebase.sol b/src/hardhat/contracts/Staking/FraxCrossChainFarmV3_Pos_Rebase.sol new file mode 100755 index 00000000..9f1edc7b --- /dev/null +++ b/src/hardhat/contracts/Staking/FraxCrossChainFarmV3_Pos_Rebase.sol @@ -0,0 +1,949 @@ +// SPDX-License-Identifier: GPL-2.0-or-later +pragma solidity >=0.8.0; + +// ==================================================================== +// | ______ _______ | +// | / _____________ __ __ / ____(_____ ____ _____ ________ | +// | / /_ / ___/ __ `| |/_/ / /_ / / __ \/ __ `/ __ \/ ___/ _ \ | +// | / __/ / / / /_/ _> < / __/ / / / / / /_/ / / / / /__/ __/ | +// | /_/ /_/ \__,_/_/|_| /_/ /_/_/ /_/\__,_/_/ /_/\___/\___/ | +// | | +// ==================================================================== +// ================= FraxCrossChainFarmV3_ERC20_Pos_Rebase ================== +// ==================================================================== +// No veFXS logic +// Because of lack of cross-chain reading of the gauge controller's emission rate, +// the contract sets its reward based on its token balance(s) +// Rolling 7 day reward period idea credit goes to denett +// rewardRate0 and rewardRate1 will look weird as people claim, but if you track the rewards actually emitted, +// the numbers do check out +// V3: Accepts canonicalFXS directly from Fraxferry and does not swap out + +// Frax Finance: https://github.com/FraxFinance + +// Primary Author(s) +// Travis Moore: https://github.com/FortisFortuna + +// Reviewer(s) / Contributor(s) +// Sam Kazemian: https://github.com/samkazemian +// Dennis: github.com/denett + +// Originally inspired by Synthetix.io, but heavily modified by the Frax team +// https://raw.githubusercontent.com/Synthetixio/synthetix/develop/contracts/StakingRewards.sol + +import "../Math/Math.sol"; +import "../Math/SafeMath.sol"; +import "../Curve/IveFXS.sol"; +import "../Curve/FraxCrossChainRewarder.sol"; +import "../ERC20/__CROSSCHAIN/IanyFXS.sol"; +import "../ERC20/__CROSSCHAIN/CrossChainCanonicalFXS.sol"; +import "../ERC20/ERC20.sol"; +import '../Uniswap/TransferHelper.sol'; +import "../ERC20/SafeERC20.sol"; +import "../Utils/ReentrancyGuard.sol"; + +// Inheritance +import "./Owned.sol"; + +// -------------------- VARIES -------------------- + +// Aave V2 +import '../Misc_AMOs/Lending_AMOs/aave/IAToken.sol'; +import '../Misc_AMOs/Lending_AMOs/aave/ILendingPool.sol'; + +// ------------------------------------------------ + + +contract FraxCrossChainFarmV3_ERC20_Pos_Rebase is Owned, ReentrancyGuard { + using SafeMath for uint256; + using SafeERC20 for ERC20; + + /* ========== STATE VARIABLES ========== */ + + // Instances + IveFXS public veFXS; + CrossChainCanonicalFXS public rewardsToken0; // Assumed to be canFXS + ERC20 public rewardsToken1; + + // -------------------- VARIES -------------------- + + // Aave V2 + IAToken public immutable stakingToken; + + // Need to store this when the user stakes. If they lockAdditional, the base value needs to accrue and the + // Stored liquidity index needs to be updated + // https://docs.aave.com/developers/v/2.0/the-core-protocol/atokens#scaledbalanceof + mapping(bytes32 => uint256) public storedStkLiqIdx; // kek_id -> liquidity index. + + // ------------------------------------------------ + + FraxCrossChainRewarder public rewarder; + + // FRAX + address public frax_address; + + // Constant for various precisions + uint256 private constant MULTIPLIER_PRECISION = 1e18; + + // Admin addresses + address public timelock_address; // Governance timelock address + address public controller_address; // Gauge controller + + // Time tracking + uint256 public periodFinish; + uint256 public lastUpdateTime; + + // Lock time and multiplier settings + uint256 public lock_max_multiplier = uint256(3e18); // E18. 1x = e18 + uint256 public lock_time_for_max_multiplier = 3 * 365 * 86400; // 3 years + uint256 public lock_time_min = 86400; // 1 * 86400 (1 day) + + // veFXS related + uint256 public vefxs_per_frax_for_max_boost = uint256(4e18); // E18. 4e18 means 4 veFXS must be held by the staker per 1 FRAX + uint256 public vefxs_max_multiplier = uint256(2e18); // E18. 1x = 1e18 + mapping(address => uint256) private _vefxsMultiplierStored; + + // Max reward per second + uint256 public rewardRate0; + uint256 public rewardRate1; + + // Reward period + uint256 public rewardsDuration = 604800; // 7 * 86400 (7 days). + + // Reward tracking + uint256 public ttlRew0Owed; + uint256 public ttlRew1Owed; + uint256 public ttlRew0Paid; + uint256 public ttlRew1Paid; + uint256 private rewardPerTokenStored0; + uint256 private rewardPerTokenStored1; + mapping(address => uint256) public userRewardPerTokenPaid0; + mapping(address => uint256) public userRewardPerTokenPaid1; + mapping(address => uint256) public rewards0; + mapping(address => uint256) public rewards1; + uint256 public lastRewardPull; + mapping(address => uint256) internal lastRewardClaimTime; // staker addr -> timestamp + + // Balance tracking + uint256 private _total_liquidity_locked; + uint256 private _total_combined_weight; + mapping(address => uint256) private _locked_liquidity; + mapping(address => uint256) private _combined_weights; + + // Uniswap V2 / Impossible ONLY + bool frax_is_token0; + + // Stake tracking + mapping(address => LockedStake[]) public lockedStakes; + + // List of valid migrators (set by governance) + mapping(address => bool) public valid_migrators; + + // Stakers set which migrator(s) they want to use + mapping(address => mapping(address => bool)) public staker_allowed_migrators; + + // Administrative booleans + bool public migrationsOn; // Used for migrations. Prevents new stakes, but allows LP and reward withdrawals + bool public stakesUnlocked; // Release locked stakes in case of system migration or emergency + bool public withdrawalsPaused; // For emergencies + bool public rewardsCollectionPaused; // For emergencies + bool public stakingPaused; // For emergencies + bool public collectRewardsOnWithdrawalPaused; // For emergencies if a token is overemitted + bool public isInitialized; + + /* ========== STRUCTS ========== */ + + struct LockedStake { + bytes32 kek_id; + uint256 start_timestamp; + uint256 liquidity; + uint256 ending_timestamp; + uint256 lock_multiplier; // 6 decimals of precision. 1x = 1000000 + } + + /* ========== MODIFIERS ========== */ + + modifier onlyByOwnGov() { + require(msg.sender == owner || msg.sender == timelock_address, "Not owner or timelock"); + _; + } + + modifier onlyByOwnGovCtrlr() { + require(msg.sender == owner || msg.sender == timelock_address || msg.sender == controller_address, "Not own, tlk, or ctrlr"); + _; + } + + modifier isMigrating() { + require(migrationsOn == true, "Not in migration"); + _; + } + + modifier notStakingPaused() { + require(stakingPaused == false, "Staking paused"); + _; + } + + modifier updateRewardAndBalance(address account, bool sync_too) { + _updateRewardAndBalance(account, sync_too, false); + _; + } + + /* ========== CONSTRUCTOR ========== */ + + constructor ( + address _owner, + address _rewardsToken0, + address _rewardsToken1, + address _stakingToken, + address _frax_address, + address _timelock_address, + address _rewarder_address + ) Owned(_owner){ + frax_address = _frax_address; + rewardsToken0 = CrossChainCanonicalFXS(_rewardsToken0); + rewardsToken1 = ERC20(_rewardsToken1); + + stakingToken = IAToken(_stakingToken); + + + timelock_address = _timelock_address; + rewarder = FraxCrossChainRewarder(_rewarder_address); + + // Uniswap V2 / Impossible ONLY + // Need to know which token FRAX is (0 or 1) + // address token0 = stakingToken.token0(); + // if (token0 == frax_address) frax_is_token0 = true; + // else frax_is_token0 = false; + + // Other booleans + migrationsOn = false; + stakesUnlocked = false; + + // For initialization + lastUpdateTime = block.timestamp; + periodFinish = block.timestamp.add(rewardsDuration); + } + + /* ========== VIEWS ========== */ + + // Total locked liquidity tokens + function totalLiquidityLocked() external view returns (uint256) { + return _total_liquidity_locked; + } + + // Locked liquidity for a given account + function lockedLiquidityOf(address account) external view returns (uint256) { + return _locked_liquidity[account]; + } + + // Total 'balance' used for calculating the percent of the pool the account owns + // Takes into account the locked stake time multiplier and veFXS multiplier + function totalCombinedWeight() external view returns (uint256) { + return _total_combined_weight; + } + + // Combined weight for a specific account + function combinedWeightOf(address account) external view returns (uint256) { + return _combined_weights[account]; + } + + // All the locked stakes for a given account + function lockedStakesOf(address account) external view returns (LockedStake[] memory) { + return lockedStakes[account]; + } + + function lockMultiplier(uint256 secs) public view returns (uint256) { + // return Math.min( + // lock_max_multiplier, + // uint256(MULTIPLIER_PRECISION) + ( + // (secs * (lock_max_multiplier - MULTIPLIER_PRECISION)) / lock_time_for_max_multiplier + // ) + // ) ; + return Math.min( + lock_max_multiplier, + (secs * lock_max_multiplier) / lock_time_for_max_multiplier + ) ; + } + + function lastTimeRewardApplicable() internal view returns (uint256) { + return Math.min(block.timestamp, periodFinish); + } + + // ------ REBASE RELATED ------ + + // Aave V2 + // ============================================ + // Get currentLiquidityIndex from AAVE + function currLiqIdx() public view returns (uint256) { + return ILendingPool(stakingToken.POOL()).getReserveNormalizedIncome(frax_address); + } + + function fraxPerLPToken() public view returns (uint256) { + // Get the amount of FRAX 'inside' of the lp tokens + uint256 frax_per_lp_token; + + + // Aave V2 + // ============================================ + { + // Always 1-to-1, for simplicity. Autocompounding is handled by _accrueInterest + // Users can accrue up their principal by calling lockAdditional with 0 amount. + // Also will accrue at withdrawal time + frax_per_lp_token = 1e18; + } + + return frax_per_lp_token; + } + + function userStakedFrax(address account) public view returns (uint256) { + return (fraxPerLPToken()).mul(_locked_liquidity[account]).div(1e18); + } + + function minVeFXSForMaxBoost(address account) public view returns (uint256) { + return (userStakedFrax(account)).mul(vefxs_per_frax_for_max_boost).div(MULTIPLIER_PRECISION); + } + + function veFXSMultiplier(address account) public view returns (uint256) { + if (address(veFXS) != address(0)){ + // The claimer gets a boost depending on amount of veFXS they have relative to the amount of FRAX 'inside' + // of their locked LP tokens + uint256 veFXS_needed_for_max_boost = minVeFXSForMaxBoost(account); + if (veFXS_needed_for_max_boost > 0){ + uint256 user_vefxs_fraction = (veFXS.balanceOf(account)).mul(MULTIPLIER_PRECISION).div(veFXS_needed_for_max_boost); + + uint256 vefxs_multiplier = ((user_vefxs_fraction).mul(vefxs_max_multiplier)).div(MULTIPLIER_PRECISION); + + // Cap the boost to the vefxs_max_multiplier + if (vefxs_multiplier > vefxs_max_multiplier) vefxs_multiplier = vefxs_max_multiplier; + + return vefxs_multiplier; + } + else return 0; // This will happen with the first stake, when user_staked_frax is 0 + } + else return 0; + } + + function calcCurrLockMultiplier(address account, uint256 stake_idx) public view returns (uint256 midpoint_lock_multiplier) { + // Get the stake + LockedStake memory thisStake = lockedStakes[account][stake_idx]; + + // Handles corner case where user never claims for a new stake + // Don't want the multiplier going above the max + uint256 accrue_start_time; + if (lastRewardClaimTime[account] < thisStake.start_timestamp) { + accrue_start_time = thisStake.start_timestamp; + } + else { + accrue_start_time = lastRewardClaimTime[account]; + } + + // If the lock is expired + if (thisStake.ending_timestamp <= block.timestamp) { + // If the lock expired in the time since the last claim, the weight needs to be proportionately averaged this time + if (lastRewardClaimTime[account] < thisStake.ending_timestamp){ + uint256 time_before_expiry = thisStake.ending_timestamp - accrue_start_time; + uint256 time_after_expiry = block.timestamp - thisStake.ending_timestamp; + + // Average the pre-expiry lock multiplier + uint256 pre_expiry_avg_multiplier = lockMultiplier(time_before_expiry / 2); + + // Get the weighted-average lock_multiplier + // uint256 numerator = (pre_expiry_avg_multiplier * time_before_expiry) + (MULTIPLIER_PRECISION * time_after_expiry); + uint256 numerator = (pre_expiry_avg_multiplier * time_before_expiry) + (0 * time_after_expiry); + midpoint_lock_multiplier = numerator / (time_before_expiry + time_after_expiry); + } + else { + // Otherwise, it needs to just be 1x + // midpoint_lock_multiplier = MULTIPLIER_PRECISION; + + // Otherwise, it needs to just be 0x + midpoint_lock_multiplier = 0; + } + } + // If the lock is not expired + else { + // Decay the lock multiplier based on the time left + uint256 avg_time_left; + { + uint256 time_left_p1 = thisStake.ending_timestamp - accrue_start_time; + uint256 time_left_p2 = thisStake.ending_timestamp - block.timestamp; + avg_time_left = (time_left_p1 + time_left_p2) / 2; + } + midpoint_lock_multiplier = lockMultiplier(avg_time_left); + } + + // Sanity check: make sure it never goes above the initial multiplier + if (midpoint_lock_multiplier > thisStake.lock_multiplier) midpoint_lock_multiplier = thisStake.lock_multiplier; + } + + // Calculate the combined weight for an account + function calcCurCombinedWeight(address account) public view + returns ( + uint256 old_combined_weight, + uint256 new_vefxs_multiplier, + uint256 new_combined_weight + ) + { + // Get the old combined weight + old_combined_weight = _combined_weights[account]; + + // Get the veFXS multipliers + // For the calculations, use the midpoint (analogous to midpoint Riemann sum) + new_vefxs_multiplier = veFXSMultiplier(account); + + uint256 midpoint_vefxs_multiplier; + if ( + (_locked_liquidity[account] == 0 && _combined_weights[account] == 0) || + (new_vefxs_multiplier >= _vefxsMultiplierStored[account]) + ) { + // This is only called for the first stake to make sure the veFXS multiplier is not cut in half + // Also used if the user increased or maintained their position + midpoint_vefxs_multiplier = new_vefxs_multiplier; + } + else { + // Handles natural decay with a non-increased veFXS position + midpoint_vefxs_multiplier = (new_vefxs_multiplier + _vefxsMultiplierStored[account]) / 2; + } + + // Loop through the locked stakes, first by getting the liquidity * lock_multiplier portion + new_combined_weight = 0; + for (uint256 i = 0; i < lockedStakes[account].length; i++) { + LockedStake memory thisStake = lockedStakes[account][i]; + + // Calculate the midpoint lock multiplier + uint256 midpoint_lock_multiplier = calcCurrLockMultiplier(account, i); + + // Calculate the combined boost + uint256 liquidity = thisStake.liquidity; + uint256 combined_boosted_amount = liquidity + ((liquidity * (midpoint_lock_multiplier + midpoint_vefxs_multiplier)) / MULTIPLIER_PRECISION); + new_combined_weight += combined_boosted_amount; + } + } + + function rewardPerToken() public view returns (uint256, uint256) { + if (_total_liquidity_locked == 0 || _total_combined_weight == 0) { + return (rewardPerTokenStored0, rewardPerTokenStored1); + } + else { + return ( + rewardPerTokenStored0.add( + lastTimeRewardApplicable().sub(lastUpdateTime).mul(rewardRate0).mul(1e18).div(_total_combined_weight) + ), + rewardPerTokenStored1.add( + lastTimeRewardApplicable().sub(lastUpdateTime).mul(rewardRate1).mul(1e18).div(_total_combined_weight) + ) + ); + } + } + + function earned(address account) public view returns (uint256, uint256) { + (uint256 rew_per_token0, uint256 rew_per_token1) = rewardPerToken(); + if (_combined_weights[account] == 0){ + return (0, 0); + } + return ( + (_combined_weights[account].mul(rew_per_token0.sub(userRewardPerTokenPaid0[account]))).div(1e18).add(rewards0[account]), + (_combined_weights[account].mul(rew_per_token1.sub(userRewardPerTokenPaid1[account]))).div(1e18).add(rewards1[account]) + ); + } + + function getRewardForDuration() external view returns (uint256, uint256) { + return ( + rewardRate0.mul(rewardsDuration), + rewardRate1.mul(rewardsDuration) + ); + } + + /* ========== MUTATIVE FUNCTIONS ========== */ + + function _getStake(address staker_address, bytes32 kek_id) internal view returns (LockedStake memory locked_stake, uint256 arr_idx) { + for (uint256 i = 0; i < lockedStakes[staker_address].length; i++){ + if (kek_id == lockedStakes[staker_address][i].kek_id){ + locked_stake = lockedStakes[staker_address][i]; + arr_idx = i; + break; + } + } + require(locked_stake.kek_id == kek_id, "Stake not found"); + + } + + function _updateRewardAndBalance(address account, bool sync_too, bool pre_sync_vemxstored) internal { + // Need to retro-adjust some things if the period hasn't been renewed, then start a new one + if (sync_too){ + sync(); + } + + // Used to make sure the veFXS multiplier is correct if a stake is increased, before calcCurCombinedWeight + if (pre_sync_vemxstored){ + _vefxsMultiplierStored[account] = veFXSMultiplier(account); + } + + if (account != address(0)) { + // To keep the math correct, the user's combined weight must be recomputed to account for their + // ever-changing veFXS balance. + ( + uint256 old_combined_weight, + uint256 new_vefxs_multiplier, + uint256 new_combined_weight + ) = calcCurCombinedWeight(account); + + // Calculate the earnings first + _syncEarned(account); + + // Update the user's stored veFXS multipliers + _vefxsMultiplierStored[account] = new_vefxs_multiplier; + + // Update the user's and the global combined weights + if (new_combined_weight >= old_combined_weight) { + uint256 weight_diff = new_combined_weight.sub(old_combined_weight); + _total_combined_weight = _total_combined_weight.add(weight_diff); + _combined_weights[account] = old_combined_weight.add(weight_diff); + } else { + uint256 weight_diff = old_combined_weight.sub(new_combined_weight); + _total_combined_weight = _total_combined_weight.sub(weight_diff); + _combined_weights[account] = old_combined_weight.sub(weight_diff); + } + + } + } + + // Add additional LPs to an existing locked stake + // REBASE: If you simply want to accrue interest, call this with addl_liq = 0 + function lockAdditional(bytes32 kek_id, uint256 addl_liq) updateRewardAndBalance(msg.sender, true) public { + // Get the stake and its index + (LockedStake memory thisStake, uint256 theArrayIndex) = _getStake(msg.sender, kek_id); + + // Accrue the interest and get the updated stake + (thisStake, ) = _accrueInterest(msg.sender, thisStake, theArrayIndex); + + // Return early if only accruing, to save gas + if (addl_liq == 0) return; + + // Calculate the new amount + uint256 new_amt = thisStake.liquidity + addl_liq; + + // Checks + require(addl_liq >= 0, "Must be nonzero"); + + // Pull the tokens from the sender + TransferHelper.safeTransferFrom(address(stakingToken), msg.sender, address(this), addl_liq); + + // Update the stake + lockedStakes[msg.sender][theArrayIndex] = LockedStake( + kek_id, + thisStake.start_timestamp, + new_amt, + thisStake.ending_timestamp, + thisStake.lock_multiplier + ); + + // Update liquidities + _total_liquidity_locked += addl_liq; + _locked_liquidity[msg.sender] += addl_liq; + + // Need to call to update the combined weights + _updateRewardAndBalance(msg.sender, false, true); + + emit LockedAdditional(msg.sender, kek_id, addl_liq); + } + + // Extends the lock of an existing stake + function lockLonger(bytes32 kek_id, uint256 new_ending_ts) nonReentrant updateRewardAndBalance(msg.sender, true) public { + // Get the stake and its index + (LockedStake memory thisStake, uint256 theArrayIndex) = _getStake(msg.sender, kek_id); + + // Check + require(new_ending_ts > block.timestamp, "Must be in the future"); + + // Calculate some times + uint256 time_left = (thisStake.ending_timestamp > block.timestamp) ? thisStake.ending_timestamp - block.timestamp : 0; + uint256 new_secs = new_ending_ts - block.timestamp; + + // Checks + // require(time_left > 0, "Already expired"); + require(new_secs > time_left, "Cannot shorten lock time"); + require(new_secs >= lock_time_min, "Minimum stake time not met"); + require(new_secs <= lock_time_for_max_multiplier, "Trying to lock for too long"); + + // Update the stake + lockedStakes[msg.sender][theArrayIndex] = LockedStake( + kek_id, + block.timestamp, + thisStake.liquidity, + new_ending_ts, + lockMultiplier(new_secs) + ); + + // Need to call to update the combined weights + _updateRewardAndBalance(msg.sender, false, true); + + emit LockedLonger(msg.sender, kek_id, new_secs, block.timestamp, new_ending_ts); + } + + function _syncEarned(address account) internal { + if (account != address(0)) { + // Calculate the earnings + (uint256 earned0, uint256 earned1) = earned(account); + rewards0[account] = earned0; + rewards1[account] = earned1; + userRewardPerTokenPaid0[account] = rewardPerTokenStored0; + userRewardPerTokenPaid1[account] = rewardPerTokenStored1; + } + } + + // Staker can allow a migrator + function stakerAllowMigrator(address migrator_address) external { + require(valid_migrators[migrator_address], "Invalid migrator address"); + staker_allowed_migrators[msg.sender][migrator_address] = true; + } + + // Staker can disallow a previously-allowed migrator + function stakerDisallowMigrator(address migrator_address) external { + // Delete from the mapping + delete staker_allowed_migrators[msg.sender][migrator_address]; + } + + // Two different stake functions are needed because of delegateCall and msg.sender issues (important for migration) + function stakeLocked(uint256 liquidity, uint256 secs) nonReentrant public { + _stakeLocked(msg.sender, msg.sender, liquidity, secs, block.timestamp); + } + + // If this were not internal, and source_address had an infinite approve, this could be exploitable + // (pull funds from source_address and stake for an arbitrary staker_address) + function _stakeLocked( + address staker_address, + address source_address, + uint256 liquidity, + uint256 secs, + uint256 start_timestamp + ) internal updateRewardAndBalance(staker_address, true) { + require(!stakingPaused || valid_migrators[msg.sender] == true, "Staking paused or in migration"); + require(liquidity > 0, "Must stake more than zero"); + require(secs >= lock_time_min, "Minimum stake time not met"); + require(secs <= lock_time_for_max_multiplier,"Trying to lock for too long"); + + uint256 lock_multiplier = lockMultiplier(secs); + bytes32 kek_id = keccak256(abi.encodePacked(staker_address, start_timestamp, liquidity, _locked_liquidity[staker_address])); + lockedStakes[staker_address].push(LockedStake( + kek_id, + start_timestamp, + liquidity, + start_timestamp.add(secs), + lock_multiplier + )); + + // Store the liquidity index. Used later to give back principal + accrued interest + storedStkLiqIdx[kek_id] = currLiqIdx(); + + // Pull the tokens from the source_address + TransferHelper.safeTransferFrom(address(stakingToken), source_address, address(this), liquidity); + + // Update liquidities + _total_liquidity_locked = _total_liquidity_locked.add(liquidity); + _locked_liquidity[staker_address] = _locked_liquidity[staker_address].add(liquidity); + + // Need to call to update the combined weights + _updateRewardAndBalance(staker_address, false, true); + + emit StakeLocked(staker_address, liquidity, secs, kek_id, source_address); + } + + // Two different withdrawLocked functions are needed because of delegateCall and msg.sender issues (important for migration) + function withdrawLocked(bytes32 kek_id, bool claim_rewards) nonReentrant public { + require(withdrawalsPaused == false, "Withdrawals paused"); + _withdrawLocked(msg.sender, msg.sender, kek_id, claim_rewards); + } + + // No withdrawer == msg.sender check needed since this is only internally callable and the checks are done in the wrapper + // functions like withdraw(), migrator_withdraw_unlocked() and migrator_withdraw_locked() + function _withdrawLocked(address staker_address, address destination_address, bytes32 kek_id, bool claim_rewards) internal { + // Collect rewards first and then update the balances + // collectRewardsOnWithdrawalPaused to be used in an emergency situation if reward is overemitted or not available + // and the user can forfeit rewards to get their principal back. User can also specify it in withdrawLocked + if (claim_rewards || !collectRewardsOnWithdrawalPaused) _getReward(staker_address, destination_address); + else { + // Sync the rewards at least + _updateRewardAndBalance(staker_address, true, false); + } + + (LockedStake memory thisStake, uint256 theArrayIndex) = _getStake(staker_address, kek_id); + require(thisStake.kek_id == kek_id, "Stake not found"); + require(block.timestamp >= thisStake.ending_timestamp || stakesUnlocked == true || valid_migrators[msg.sender] == true, "Stake is still locked!"); + + // Accrue the interest and get the updated stake + (thisStake, ) = _accrueInterest(staker_address, thisStake, theArrayIndex); + + uint256 liquidity = thisStake.liquidity; + + if (liquidity > 0) { + // Update liquidities + _total_liquidity_locked = _total_liquidity_locked.sub(liquidity); + _locked_liquidity[staker_address] = _locked_liquidity[staker_address].sub(liquidity); + + // Remove the stake from the array + delete lockedStakes[staker_address][theArrayIndex]; + + // Need to call to update the combined weights + _updateRewardAndBalance(staker_address, true, false); + + // Give the tokens to the destination_address + // Should throw if insufficient balance + stakingToken.transfer(destination_address, liquidity); + + emit WithdrawLocked(staker_address, liquidity, kek_id, destination_address); + } + + } + + // Two different getReward functions are needed because of delegateCall and msg.sender issues (important for migration) + function getReward() external nonReentrant returns (uint256, uint256) { + require(rewardsCollectionPaused == false,"Rewards collection paused"); + return _getReward(msg.sender, msg.sender); + } + + // No withdrawer == msg.sender check needed since this is only internally callable + // This distinction is important for the migrator + function _getReward(address rewardee, address destination_address) internal updateRewardAndBalance(rewardee, true) returns (uint256 reward0, uint256 reward1) { + reward0 = rewards0[rewardee]; + reward1 = rewards1[rewardee]; + + if (reward0 > 0) { + rewards0[rewardee] = 0; + rewardsToken0.transfer(destination_address, reward0); + ttlRew0Paid += reward0; + emit RewardPaid(rewardee, reward0, address(rewardsToken0), destination_address); + } + + if (reward1 > 0) { + rewards1[rewardee] = 0; + rewardsToken1.transfer(destination_address, reward1); + ttlRew1Paid += reward1; + emit RewardPaid(rewardee, reward1, address(rewardsToken1), destination_address); + } + + // Update the last reward claim time + lastRewardClaimTime[rewardee] = block.timestamp; + } + + // REBASE SPECIFIC + // Catches-up the user's accrued interest and sets it as the new principal (liquidity) + function _accrueInterest( + address staker_address, + LockedStake memory thisStake, + uint256 theArrayIndex + ) internal returns (LockedStake memory, uint256) { + // Calculate the new liquidity as well as the diff + // new pricipal = (old principal ∗ currentLiquidityIndex) / (old liquidity index) + uint256 new_liq = (thisStake.liquidity * currLiqIdx()) / storedStkLiqIdx[thisStake.kek_id]; + uint256 liq_diff = new_liq - thisStake.liquidity; + + // Update the new principal + lockedStakes[staker_address][theArrayIndex].liquidity = new_liq; + + // Update the liquidity totals + _total_liquidity_locked += liq_diff; + _locked_liquidity[staker_address] += liq_diff; + + // Store the new liquidity index. Used later to give back principal + accrued interest + storedStkLiqIdx[thisStake.kek_id] = currLiqIdx(); + + return (lockedStakes[staker_address][theArrayIndex], theArrayIndex); + } + + // Quasi-notifyRewardAmount() logic + function syncRewards() internal { + // Bring in rewards, if applicable + if ((address(rewarder) != address(0)) && ((block.timestamp).sub(lastRewardPull) >= rewardsDuration)){ + rewarder.distributeReward(); + lastRewardPull = block.timestamp; + } + + // Get the current reward token balances + uint256 curr_bal_0 = rewardsToken0.balanceOf(address(this)); + uint256 curr_bal_1 = rewardsToken1.balanceOf(address(this)); + + // Update the owed amounts based off the old reward rates + // Anything over a week is zeroed + { + uint256 eligible_elapsed_time = Math.min((block.timestamp).sub(lastUpdateTime), rewardsDuration); + ttlRew0Owed += rewardRate0.mul(eligible_elapsed_time); + ttlRew1Owed += rewardRate1.mul(eligible_elapsed_time); + } + + // Update the stored amounts too + { + (uint256 reward0, uint256 reward1) = rewardPerToken(); + rewardPerTokenStored0 = reward0; + rewardPerTokenStored1 = reward1; + } + + // Set the reward rates based on the free amount of tokens + { + // Don't count unpaid rewards as free + uint256 unpaid0 = ttlRew0Owed.sub(ttlRew0Paid); + uint256 unpaid1 = ttlRew1Owed.sub(ttlRew1Paid); + + // Handle reward token0 + if (curr_bal_0 <= unpaid0){ + // token0 is depleted, so stop emitting + rewardRate0 = 0; + } + else { + uint256 free0 = curr_bal_0.sub(unpaid0); + rewardRate0 = (free0).div(rewardsDuration); + } + + // Handle reward token1 + if (curr_bal_1 <= unpaid1){ + // token1 is depleted, so stop emitting + rewardRate1 = 0; + } + else { + uint256 free1 = curr_bal_1.sub(unpaid1); + rewardRate1 = (free1).div(rewardsDuration); + } + } + } + + function sync() public { + require(isInitialized, "Contract not initialized"); + + // Swap bridge tokens + // Make sure the rewardRates are synced to the current FXS balance + syncRewards(); + + // Rolling 7 days rewards period + lastUpdateTime = block.timestamp; + periodFinish = (block.timestamp).add(rewardsDuration); + } + + /* ========== RESTRICTED FUNCTIONS ========== */ + + // Needed when first deploying the farm + // Make sure rewards are present + function initializeDefault() external onlyByOwnGovCtrlr { + require(!isInitialized, "Already initialized"); + isInitialized = true; + + // Bring in rewards, if applicable + if (address(rewarder) != address(0)){ + rewarder.distributeReward(); + lastRewardPull = block.timestamp; + } + + emit DefaultInitialization(); + } + + // Migrator can stake for someone else (they won't be able to withdraw it back though, only staker_address can). + function migrator_stakeLocked_for(address staker_address, uint256 amount, uint256 secs, uint256 start_timestamp) external isMigrating { + require(staker_allowed_migrators[staker_address][msg.sender] && valid_migrators[msg.sender], "Mig. invalid or unapproved"); + _stakeLocked(staker_address, msg.sender, amount, secs, start_timestamp); + } + + // Used for migrations + function migrator_withdraw_locked(address staker_address, bytes32 kek_id) external isMigrating { + require(staker_allowed_migrators[staker_address][msg.sender] && valid_migrators[msg.sender], "Mig. invalid or unapproved"); + _withdrawLocked(staker_address, msg.sender, kek_id, true); + } + + // Adds supported migrator address + function addMigrator(address migrator_address) external onlyByOwnGov { + valid_migrators[migrator_address] = true; + } + + // Remove a migrator address + function removeMigrator(address migrator_address) external onlyByOwnGov { + require(valid_migrators[migrator_address] == true, "Address nonexistent"); + + // Delete from the mapping + delete valid_migrators[migrator_address]; + } + + // Added to support recovering LP Rewards and other mistaken tokens from other systems to be distributed to holders + function recoverERC20(address tokenAddress, uint256 tokenAmount) external onlyByOwnGov { + // Admin cannot withdraw the staking token from the contract unless currently migrating + if(!migrationsOn){ + require(tokenAddress != address(stakingToken), "Not in migration"); // Only Governance / Timelock can trigger a migration + } + // Only the owner address can ever receive the recovery withdrawal + ERC20(tokenAddress).transfer(owner, tokenAmount); + emit Recovered(tokenAddress, tokenAmount); + } + + function setMultipliers(uint256 _lock_max_multiplier, uint256 _vefxs_max_multiplier, uint256 _vefxs_per_frax_for_max_boost) external onlyByOwnGov { + require(_lock_max_multiplier >= MULTIPLIER_PRECISION, "Mult must be >= MULTIPLIER_PRECISION"); + require(_vefxs_max_multiplier >= 0, "veFXS mul must be >= 0"); + require(_vefxs_per_frax_for_max_boost > 0, "veFXS pct max must be >= 0"); + + lock_max_multiplier = _lock_max_multiplier; + vefxs_max_multiplier = _vefxs_max_multiplier; + vefxs_per_frax_for_max_boost = _vefxs_per_frax_for_max_boost; + + emit MaxVeFXSMultiplier(vefxs_max_multiplier); + emit LockedStakeMaxMultiplierUpdated(lock_max_multiplier); + emit veFXSPerFraxForMaxBoostUpdated(vefxs_per_frax_for_max_boost); + } + + function setLockedStakeTimeForMinAndMaxMultiplier(uint256 _lock_time_for_max_multiplier, uint256 _lock_time_min) external onlyByOwnGov { + require(_lock_time_for_max_multiplier >= 1, "Mul max time must be >= 1"); + require(_lock_time_min >= 1, "Mul min time must be >= 1"); + + lock_time_for_max_multiplier = _lock_time_for_max_multiplier; + lock_time_min = _lock_time_min; + + emit LockedStakeTimeForMaxMultiplier(lock_time_for_max_multiplier); + emit LockedStakeMinTime(_lock_time_min); + } + + function unlockStakes() external onlyByOwnGov { + stakesUnlocked = !stakesUnlocked; + } + + function toggleMigrations() external onlyByOwnGov { + migrationsOn = !migrationsOn; + } + + function toggleCollectRewardsOnWithdrawal() external onlyByOwnGov { + collectRewardsOnWithdrawalPaused = !collectRewardsOnWithdrawalPaused; + } + + function toggleStaking() external onlyByOwnGov { + stakingPaused = !stakingPaused; + } + + function toggleWithdrawals() external onlyByOwnGov { + withdrawalsPaused = !withdrawalsPaused; + } + + function toggleRewardsCollection() external onlyByOwnGov { + rewardsCollectionPaused = !rewardsCollectionPaused; + } + + function setTimelock(address _new_timelock) external onlyByOwnGov { + timelock_address = _new_timelock; + } + + function setController(address _controller_address) external onlyByOwnGov { + controller_address = _controller_address; + } + + function setVeFXS(address _vefxs_address) external onlyByOwnGov { + veFXS = IveFXS(_vefxs_address); + } + + /* ========== EVENTS ========== */ + + event StakeLocked(address indexed user, uint256 amount, uint256 secs, bytes32 kek_id, address source_address); + event WithdrawLocked(address indexed user, uint256 amount, bytes32 kek_id, address destination_address); + event RewardPaid(address indexed user, uint256 reward, address token_address, address destination_address); + event DefaultInitialization(); + event Recovered(address token, uint256 amount); + event LockedStakeMaxMultiplierUpdated(uint256 multiplier); + event LockedStakeTimeForMaxMultiplier(uint256 secs); + event LockedStakeMinTime(uint256 secs); + event LockedAdditional(address indexed user, bytes32 kek_id, uint256 amount); + event LockedLonger(address indexed user, bytes32 kek_id, uint256 new_secs, uint256 new_start_ts, uint256 new_end_ts); + event MaxVeFXSMultiplier(uint256 multiplier); + event veFXSPerFraxForMaxBoostUpdated(uint256 scale_factor); +} diff --git a/src/hardhat/contracts/Staking/FraxFarmRageQuitter_mStable.sol b/src/hardhat/contracts/Staking/FraxFarmRageQuitter_mStable.sol new file mode 100644 index 00000000..55073259 --- /dev/null +++ b/src/hardhat/contracts/Staking/FraxFarmRageQuitter_mStable.sol @@ -0,0 +1,108 @@ +// SPDX-License-Identifier: GPL-2.0-or-later +pragma solidity >=0.8.0; + +// ==================================================================== +// | ______ _______ | +// | / _____________ __ __ / ____(_____ ____ _____ ________ | +// | / /_ / ___/ __ `| |/_/ / /_ / / __ \/ __ `/ __ \/ ___/ _ \ | +// | / __/ / / / /_/ _> < / __/ / / / / / /_/ / / / / /__/ __/ | +// | /_/ /_/ \__,_/_/|_| /_/ /_/_/ /_/\__,_/_/ /_/\___/\___/ | +// | | +// ==================================================================== +// ==================== FraxFarmRageQuitter_mStable =================== +// ==================================================================== +// Exits a Frax farm early, with a penalty. Deployed on a case-by-case basis + +// Frax Finance: https://github.com/FraxFinance + +// Primary Author(s) +// Dennis: https://github.com/denett + +// Reviewer(s) / Contributor(s) +// Travis Moore: https://github.com/FortisFortuna + +import "@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol"; +import "@openzeppelin/contracts/token/ERC20/IERC20.sol"; + +import "../Utils/ReentrancyGuard.sol"; + +contract FraxFarmRageQuitter_mStable is ReentrancyGuard { + IFarm public farm = IFarm(0xc425Fd9Ed3C892d849C9E1a971516da1C1B29696); + IERC20 lp_token = IERC20(0xB30a907084AC8a0d25dDDAB4E364827406Fd09f0); + address fraxTreasuryAddress = 0xDCB5A4b6Ee39447D700F4FA3303B1d1c25Ea9cA7; + uint256 treasuryPercentage = 2000; // 20%; + + // Rewards tokens + IERC20 fxsToken = IERC20(0x3e121107F6F22DA4911079845a470757aF4e1A1b); + IERC20 mtaToken = IERC20(0xF501dd45a1198C2E1b5aEF5314A68B9006D842E0); + + // NOTE + // Make sure to enable this contract as a migrator first on the target farm + + /// @notice Exits stake for a specific kek_id + function ragequitOne(bytes32 _kek_id) nonReentrant external { + uint256 _liquidity; + + // Get all locked stake of the user + IFarm.LockedStake[] memory lockedStakes = farm.lockedStakesOf(msg.sender); + + // Find stake with the correct kek_id + for (uint256 i; i < lockedStakes.length; i++) { + if (lockedStakes[i].kek_id == _kek_id) { + _liquidity = lockedStakes[i].liquidity; + break; + } + } + require(_liquidity > 0, "Stake not found"); + + // Unlock the stake and transfer the LP tokens to this contract + farm.migrator_withdraw_locked(msg.sender, _kek_id); + + // Split the LP tokens between the Frax treasury and the user + uint256 liquidityToTreasury = (_liquidity * treasuryPercentage) / 10000; + SafeERC20.safeTransfer(lp_token, fraxTreasuryAddress, liquidityToTreasury); + SafeERC20.safeTransfer(lp_token, msg.sender, _liquidity - liquidityToTreasury); + + // All rewards collected during the migration are sent to the user. + SafeERC20.safeTransfer(fxsToken, msg.sender, fxsToken.balanceOf(address(this))); + SafeERC20.safeTransfer(mtaToken, msg.sender, mtaToken.balanceOf(address(this))); + } + + /// @notice Exits all stakes + function ragequitAll() nonReentrant external { + uint256 _totalLiquidity; + + // Get all locked stake of the user + IFarm.LockedStake[] memory lockedStakes = farm.lockedStakesOf(msg.sender); + + for (uint256 i; i < lockedStakes.length; i++) { + uint256 _liquidity = lockedStakes[i].liquidity; + if (_liquidity > 0) { + farm.migrator_withdraw_locked(msg.sender, lockedStakes[i].kek_id); // Unlock the stake and transfer the LP tokens to this contract + _totalLiquidity += _liquidity; + } + } + require(_totalLiquidity > 0, "Nothing to unlock"); + + // Split the LP tokens between the Frax treasury and the user + uint256 liquidityToTreasury = (_totalLiquidity * treasuryPercentage) / 10000; + SafeERC20.safeTransfer(lp_token, fraxTreasuryAddress, liquidityToTreasury); + SafeERC20.safeTransfer(lp_token, msg.sender, _totalLiquidity - liquidityToTreasury); + + // All reward tokens collected during the migration are send to the user. + SafeERC20.safeTransfer(fxsToken,msg.sender,fxsToken.balanceOf(address(this))); + SafeERC20.safeTransfer(mtaToken,msg.sender,mtaToken.balanceOf(address(this))); + } +} + +interface IFarm{ + struct LockedStake { + bytes32 kek_id; + uint256 start_timestamp; + uint256 liquidity; + uint256 ending_timestamp; + uint256 lock_multiplier; + } + function migrator_withdraw_locked(address, bytes32) external; + function lockedStakesOf(address) external view returns(LockedStake[] memory); +} \ No newline at end of file diff --git a/src/hardhat/contracts/Staking/FraxUniV3Farm_Stable.sol b/src/hardhat/contracts/Staking/FraxUniV3Farm_Stable.sol index 3621178f..427a5eee 100755 --- a/src/hardhat/contracts/Staking/FraxUniV3Farm_Stable.sol +++ b/src/hardhat/contracts/Staking/FraxUniV3Farm_Stable.sol @@ -554,7 +554,7 @@ contract FraxUniV3Farm_Stable is Owned, ReentrancyGuard { _locked_liquidity[staker_address] = _locked_liquidity[staker_address].add(liquidity); // Need to call again to make sure everything is correct - _updateRewardAndBalance(staker_address, false); + _updateRewardAndBalance(staker_address, true); emit LockNFT(staker_address, liquidity, token_id, secs, source_address); } @@ -599,7 +599,7 @@ contract FraxUniV3Farm_Stable is Owned, ReentrancyGuard { delete lockedNFTs[staker_address][theArrayIndex]; // Need to call again to make sure everything is correct - _updateRewardAndBalance(staker_address, false); + _updateRewardAndBalance(staker_address, true); // Give the tokens to the destination_address stakingTokenNFT.safeTransferFrom(address(this), destination_address, token_id); diff --git a/src/hardhat/contracts/Staking/FraxUnifiedFarmTemplate.sol b/src/hardhat/contracts/Staking/FraxUnifiedFarmTemplate.sol index 3b51c2b5..15e1c26c 100755 --- a/src/hardhat/contracts/Staking/FraxUnifiedFarmTemplate.sol +++ b/src/hardhat/contracts/Staking/FraxUnifiedFarmTemplate.sol @@ -51,17 +51,20 @@ contract FraxUnifiedFarmTemplate is Owned, ReentrancyGuard { /* ========== STATE VARIABLES ========== */ // Instances - IveFXS private immutable veFXS = IveFXS(0xc8418aF6358FFddA74e09Ca9CC3Fe03Ca6aDC5b0); + IveFXS private constant veFXS = IveFXS(0xc8418aF6358FFddA74e09Ca9CC3Fe03Ca6aDC5b0); // Frax related - address internal immutable frax_address = 0x853d955aCEf822Db058eb8505911ED77F175b99e; + address internal constant frax_address = 0x853d955aCEf822Db058eb8505911ED77F175b99e; + /// @notice fraxPerLPToken is a public view function, although doesn't show the stored value uint256 public fraxPerLPStored; // Constant for various precisions uint256 internal constant MULTIPLIER_PRECISION = 1e18; // Time tracking + /// @notice Ending timestamp for the current period uint256 public periodFinish; + /// @notice Timestamp of the last update - when this period started uint256 public lastUpdateTime; // Lock time and multiplier settings @@ -79,12 +82,15 @@ contract FraxUnifiedFarmTemplate is Owned, ReentrancyGuard { mapping(address => mapping(address => bool)) internal proxy_allowed_stakers; // Reward addresses, gauge addresses, reward rates, and reward managers - mapping(address => address) public rewardManagers; // token addr -> manager addr + /// @notice token addr -> manager addr + mapping(address => address) public rewardManagers; address[] internal rewardTokens; address[] internal gaugeControllers; address[] internal rewardDistributors; uint256[] internal rewardRatesManual; - mapping(address => uint256) public rewardTokenAddrToIdx; // token addr -> token index + mapping(address => bool) internal isRewardToken; + /// @notice token addr -> token index + mapping(address => uint256) public rewardTokenAddrToIdx; // Reward period uint256 public constant rewardsDuration = 604800; // 7 * 86400 (7 days) @@ -104,17 +110,20 @@ contract FraxUnifiedFarmTemplate is Owned, ReentrancyGuard { uint256 internal _total_combined_weight; mapping(address => uint256) internal _locked_liquidity; mapping(address => uint256) internal _combined_weights; - mapping(address => uint256) public proxy_lp_balances; // Keeps track of LP balances proxy-wide. Needed to make sure the proxy boost is kept in line + /// @notice Keeps track of LP balances proxy-wide. Needed to make sure the proxy boost is kept in line + mapping(address => uint256) public proxy_lp_balances; - // Stakers set which proxy(s) they want to use - mapping(address => address) public staker_designated_proxies; // Keep public so users can see on the frontend if they have a proxy + /// @notice Stakers set which proxy(s) they want to use + /// @dev Keep public so users can see on the frontend if they have a proxy + mapping(address => address) public staker_designated_proxies; // Admin booleans for emergencies and overrides bool public stakesUnlocked; // Release locked stakes in case of emergency bool internal withdrawalsPaused; // For emergencies bool internal rewardsCollectionPaused; // For emergencies bool internal stakingPaused; // For emergencies + bool internal collectRewardsOnWithdrawalPaused; // For emergencies if a token is overemitted /* ========== STRUCTS ========== */ // In children... @@ -133,7 +142,7 @@ contract FraxUnifiedFarmTemplate is Owned, ReentrancyGuard { } modifier updateRewardAndBalanceMdf(address account, bool sync_too) { - updateRewardAndBalance(account, sync_too); + _updateRewardAndBalance(account, sync_too, false); _; } @@ -158,6 +167,9 @@ contract FraxUnifiedFarmTemplate is Owned, ReentrancyGuard { // For fast token address -> token ID lookups later rewardTokenAddrToIdx[_rewardTokens[i]] = i; + // Add to the mapping + isRewardToken[_rewardTokens[i]] = true; + // Initialize the stored rewards rewardsPerTokenStored.push(0); @@ -176,21 +188,31 @@ contract FraxUnifiedFarmTemplate is Owned, ReentrancyGuard { // Initialization lastUpdateTime = block.timestamp; - periodFinish = block.timestamp + rewardsDuration; + + // Sync the first period finish here with the gauge's + // periodFinish = IFraxGaugeController(gaugeControllers[0]).time_total(); + periodFinish = IFraxGaugeController(0x3669C421b77340B2979d1A00a792CC2ee0FcE737).time_total(); + } /* ============= VIEWS ============= */ // ------ REWARD RELATED ------ - // See if the caller_addr is a manager for the reward token + /// @notice Checks if the caller is a manager for the reward token + /// @param caller_addr The address of the caller + /// @param reward_token_addr The address of the reward token + /// @return bool True if the caller is a manager for the reward token function isTokenManagerFor(address caller_addr, address reward_token_addr) public view returns (bool){ - if (caller_addr == owner) return true; // Contract owner + if (!isRewardToken[reward_token_addr]) return false; + else if (caller_addr == address(0) || reward_token_addr == address(0)) return false; + else if (caller_addr == owner) return true; // Contract owner else if (rewardManagers[reward_token_addr] == caller_addr) return true; // Reward manager return false; } - // All the reward tokens + /// @notice Gets all the reward tokens this contract handles + /// @return rewardTokens_ The reward tokens array function getAllRewardTokens() external view returns (address[] memory) { return rewardTokens; } @@ -200,6 +222,9 @@ contract FraxUnifiedFarmTemplate is Owned, ReentrancyGuard { return Math.min(block.timestamp, periodFinish); } + /// @notice The amount of reward tokens being paid out per second this period + /// @param token_idx The index of the reward token + /// @return rwd_rate The reward rate function rewardRates(uint256 token_idx) public view returns (uint256 rwd_rate) { address gauge_controller_address = gaugeControllers[token_idx]; if (gauge_controller_address != address(0)) { @@ -226,9 +251,10 @@ contract FraxUnifiedFarmTemplate is Owned, ReentrancyGuard { } } - // Amount of reward tokens an account has earned / accrued - // Note: In the edge-case of one of the account's stake expiring since the last claim, this will - // return a slightly inflated number + /// @notice The amount of reward tokens an account has earned / accrued + /// @dev In the edge-case of one of the account's stake expiring since the last claim, this will + /// @param account The account to check + /// @return new_earned Array of reward token amounts earned by the account function earned(address account) public view returns (uint256[] memory new_earned) { uint256[] memory reward_arr = rewardsPerToken(); new_earned = new uint256[](rewardTokens.length); @@ -241,7 +267,8 @@ contract FraxUnifiedFarmTemplate is Owned, ReentrancyGuard { } } - // Total reward tokens emitted in the given period + /// @notice The total reward tokens emitted in the given period + /// @return rewards_per_duration_arr Array of reward token amounts emitted in the current period function getRewardForDuration() external view returns (uint256[] memory rewards_per_duration_arr) { rewards_per_duration_arr = new uint256[](rewardRatesManual.length); @@ -253,28 +280,36 @@ contract FraxUnifiedFarmTemplate is Owned, ReentrancyGuard { // ------ LIQUIDITY AND WEIGHTS ------ - // User locked liquidity / LP tokens + /// @notice The farm's total locked liquidity / LP tokens + /// @return The total locked liquidity function totalLiquidityLocked() external view returns (uint256) { return _total_liquidity_locked; } - // Total locked liquidity / LP tokens + /// @notice A user's locked liquidity / LP tokens + /// @param account The address of the account + /// @return The locked liquidity function lockedLiquidityOf(address account) external view returns (uint256) { return _locked_liquidity[account]; } - // Total combined weight + /// @notice The farm's total combined weight of all users + /// @return The total combined weight function totalCombinedWeight() external view returns (uint256) { return _total_combined_weight; } - // Total 'balance' used for calculating the percent of the pool the account owns - // Takes into account the locked stake time multiplier and veFXS multiplier + /// @notice Total 'balance' used for calculating the percent of the pool the account owns + /// @notice Takes into account the locked stake time multiplier and veFXS multiplier + /// @param account The address of the account + /// @return The combined weight function combinedWeightOf(address account) external view returns (uint256) { return _combined_weights[account]; } - // Calculated the combined weight for an account + /// @notice Calculates the combined weight for an account + /// @notice Must be overriden by the child contract + /// @dev account The address of the account function calcCurCombinedWeight(address account) public virtual view returns ( uint256 old_combined_weight, @@ -287,14 +322,10 @@ contract FraxUnifiedFarmTemplate is Owned, ReentrancyGuard { // ------ LOCK RELATED ------ - // Multiplier amount, given the length of the lock + /// @notice Reads the lock boost multiplier for a given duration + /// @param secs The duration of the lock in seconds + /// @return The multiplier amount function lockMultiplier(uint256 secs) public view returns (uint256) { - // return Math.min( - // lock_max_multiplier, - // uint256(MULTIPLIER_PRECISION) + ( - // (secs * (lock_max_multiplier - MULTIPLIER_PRECISION)) / lock_time_for_max_multiplier - // ) - // ) ; return Math.min( lock_max_multiplier, (secs * lock_max_multiplier) / lock_time_for_max_multiplier @@ -303,34 +334,52 @@ contract FraxUnifiedFarmTemplate is Owned, ReentrancyGuard { // ------ FRAX RELATED ------ + /// @notice The amount of FRAX denominated value being boosted that an address has staked + /// @param account The address to check + /// @return The amount of FRAX value boosted function userStakedFrax(address account) public view returns (uint256) { return (fraxPerLPStored * _locked_liquidity[account]) / MULTIPLIER_PRECISION; } + /// @notice The amount of FRAX denominated value being boosted that a proxy address has staked + /// @param proxy_address The address to check + /// @return The amount of FRAX value boosted function proxyStakedFrax(address proxy_address) public view returns (uint256) { return (fraxPerLPStored * proxy_lp_balances[proxy_address]) / MULTIPLIER_PRECISION; } - // Max LP that can get max veFXS boosted for a given address at its current veFXS balance + /// @notice The maximum LP that can get max veFXS boosted for a given address at its current veFXS balance + /// @param account The address to check + /// @return The maximum LP that can get max veFXS boosted for a given address at its current veFXS balance function maxLPForMaxBoost(address account) external view returns (uint256) { return (veFXS.balanceOf(account) * MULTIPLIER_PRECISION * MULTIPLIER_PRECISION) / (vefxs_per_frax_for_max_boost * fraxPerLPStored); } - // Meant to be overridden + /// @notice Must be overriden to return the current FRAX per LP token + /// @return The current number of FRAX per LP token function fraxPerLPToken() public virtual view returns (uint256) { revert("Need fPLPT logic"); } // ------ veFXS RELATED ------ + /// @notice The minimum veFXS required to get max boost for a given address + /// @param account The address to check + /// @return The minimum veFXS required to get max boost function minVeFXSForMaxBoost(address account) public view returns (uint256) { return (userStakedFrax(account) * vefxs_per_frax_for_max_boost) / MULTIPLIER_PRECISION; } + /// @notice The minimum veFXS required to get max boost for a given proxy + /// @param proxy_address The proxy address + /// @return The minimum veFXS required to get max boost function minVeFXSForMaxBoostProxy(address proxy_address) public view returns (uint256) { return (proxyStakedFrax(proxy_address) * vefxs_per_frax_for_max_boost) / MULTIPLIER_PRECISION; } + /// @notice Looks up a staker's proxy + /// @param addr The address to check + /// @return the_proxy The proxy address, or address(0) function getProxyFor(address addr) public view returns (address){ if (valid_vefxs_proxies[addr]) { // If addr itself is a proxy, return that. @@ -343,6 +392,9 @@ contract FraxUnifiedFarmTemplate is Owned, ReentrancyGuard { } } + /// @notice The multiplier for a given account, based on veFXS + /// @param account The account to check + /// @return vefxs_multiplier The multiplier boost for the account function veFXSMultiplier(address account) public view returns (uint256 vefxs_multiplier) { // Use either the user's or their proxy's veFXS balance uint256 vefxs_bal_to_use = 0; @@ -378,10 +430,8 @@ contract FraxUnifiedFarmTemplate is Owned, ReentrancyGuard { /* =============== MUTATIVE FUNCTIONS =============== */ - - // Proxy can allow a staker to use their veFXS balance (the staker will have to reciprocally toggle them too) - // Must come before stakerSetVeFXSProxy - // CALLED BY PROXY + /// @notice Toggle whether a staker can use the proxy's veFXS balance to boost yields + /// @notice Proxy must call this first, then the staker must call stakerSetVeFXSProxy function proxyToggleStaker(address staker_address) external { require(valid_vefxs_proxies[msg.sender], "Invalid proxy"); proxy_allowed_stakers[msg.sender][staker_address] = !proxy_allowed_stakers[msg.sender][staker_address]; @@ -395,8 +445,8 @@ contract FraxUnifiedFarmTemplate is Owned, ReentrancyGuard { } } - // Staker can allow a veFXS proxy (the proxy will have to toggle them first) - // CALLED BY STAKER + /// @notice After proxy toggles staker to true, staker must call and confirm this + /// @param proxy_address The address of the veFXS proxy function stakerSetVeFXSProxy(address proxy_address) external { require(valid_vefxs_proxies[proxy_address], "Invalid proxy"); require(proxy_allowed_stakers[proxy_address][msg.sender], "Proxy has not allowed you yet"); @@ -425,11 +475,20 @@ contract FraxUnifiedFarmTemplate is Owned, ReentrancyGuard { // ------ REWARDS SYNCING ------ - function updateRewardAndBalance(address account, bool sync_too) public { + function _updateRewardAndBalance(address account, bool sync_too) internal { + _updateRewardAndBalance(account, sync_too, false); + } + + function _updateRewardAndBalance(address account, bool sync_too, bool pre_sync_vemxstored) internal { // Need to retro-adjust some things if the period hasn't been renewed, then start a new one if (sync_too){ sync(); } + + // Used to make sure the veFXS multiplier is correct if a stake is increased, before calcCurCombinedWeight + if (pre_sync_vemxstored){ + _vefxsMultiplierStored[account] = veFXSMultiplier(account); + } if (account != address(0)) { // To keep the math correct, the user's combined weight must be recomputed to account for their @@ -480,6 +539,8 @@ contract FraxUnifiedFarmTemplate is Owned, ReentrancyGuard { // ------ REWARDS CLAIMING ------ + /// @notice A function that can be overridden to add extra logic to the getReward function + /// @param destination_address The address to send the rewards to function getRewardExtraLogic(address destination_address) public nonReentrant { require(rewardsCollectionPaused == false, "Rewards collection paused"); return _getRewardExtraLogic(msg.sender, destination_address); @@ -491,10 +552,17 @@ contract FraxUnifiedFarmTemplate is Owned, ReentrancyGuard { // Two different getReward functions are needed because of delegateCall and msg.sender issues // For backwards-compatibility + /// @notice Claims rewards to destination address + /// @param destination_address The address to send the rewards to + /// @return rewards_before The rewards available before the claim function getReward(address destination_address) external nonReentrant returns (uint256[] memory) { return _getReward(msg.sender, destination_address, true); } + /// @notice Claims rewards to destination address & wether to do extra logic + /// @param destination_address The address to send the rewards to + /// @param claim_extra_too Whether to do extra logic + /// @return rewards_before The rewards available before the claim function getReward2(address destination_address, bool claim_extra_too) external nonReentrant returns (uint256[] memory) { return _getReward(msg.sender, destination_address, claim_extra_too); } @@ -531,6 +599,9 @@ contract FraxUnifiedFarmTemplate is Owned, ReentrancyGuard { // If the period expired, renew it function retroCatchUp() internal { + // Catch up the old rewards first + _updateStoredRewardsAndTime(); + // Pull in rewards from the rewards distributor, if applicable for (uint256 i = 0; i < rewardDistributors.length; i++){ address reward_distributor_address = rewardDistributors[i]; @@ -556,12 +627,6 @@ contract FraxUnifiedFarmTemplate is Owned, ReentrancyGuard { // lastUpdateTime = periodFinish; periodFinish = periodFinish + ((num_periods_elapsed + 1) * rewardsDuration); - // Update the rewards and time - _updateStoredRewardsAndTime(); - - // Update the fraxPerLPStored - fraxPerLPStored = fraxPerLPToken(); - // Pull in rewards and set the reward rate for one week, based off of that // If the rewards get messed up for some reason, set this to 0 and it will skip // if (rewardRatesManual[1] != 0 && rewardRatesManual[2] != 0) { @@ -596,6 +661,8 @@ contract FraxUnifiedFarmTemplate is Owned, ReentrancyGuard { lastUpdateTime = lastTimeRewardApplicable(); } + /// @notice Updates the gauge weights, if applicable + /// @param force_update If true, will update the weights even if the time hasn't elapsed function sync_gauge_weights(bool force_update) public { // Loop through the gauge controllers for (uint256 i = 0; i < gaugeControllers.length; i++){ @@ -610,6 +677,7 @@ contract FraxUnifiedFarmTemplate is Owned, ReentrancyGuard { } } + /// @notice Updates gauge weights, fraxPerLP, pulls in new rewards or updates rewards function sync() public { // Sync the gauge weight, if applicable sync_gauge_weights(false); @@ -632,43 +700,48 @@ contract FraxUnifiedFarmTemplate is Owned, ReentrancyGuard { // ------ PAUSES ------ + /// @notice Owner or governance can pause/unpause staking, withdrawals, rewards collection, and collectRewardsOnWithdrawal + /// @param _stakingPaused Whether staking is paused + /// @param _withdrawalsPaused Whether withdrawals are paused + /// @param _rewardsCollectionPaused Whether rewards collection is paused + /// @param _collectRewardsOnWithdrawalPaused Whether collectRewardsOnWithdrawal is paused function setPauses( bool _stakingPaused, bool _withdrawalsPaused, - bool _rewardsCollectionPaused + bool _rewardsCollectionPaused, + bool _collectRewardsOnWithdrawalPaused ) external onlyByOwnGov { stakingPaused = _stakingPaused; withdrawalsPaused = _withdrawalsPaused; rewardsCollectionPaused = _rewardsCollectionPaused; + collectRewardsOnWithdrawalPaused = _collectRewardsOnWithdrawalPaused; } /* ========== RESTRICTED FUNCTIONS - Owner or timelock only ========== */ + /// @notice Owner or governance can unlock stakes - irreversible! function unlockStakes() external onlyByOwnGov { stakesUnlocked = !stakesUnlocked; } - // Adds a valid veFXS proxy address + /// @notice Owner or governance sets whether an address is a valid veFXS proxy + /// @param _proxy_addr The address to set function toggleValidVeFXSProxy(address _proxy_addr) external onlyByOwnGov { valid_vefxs_proxies[_proxy_addr] = !valid_vefxs_proxies[_proxy_addr]; } - // Added to support recovering LP Rewards and other mistaken tokens from other systems to be distributed to holders + /// @notice Allows owner to recover any ERC20 or token manager to recover their reward token. + /// @param tokenAddress The address of the token to recover + /// @param tokenAmount The amount of the token to recover function recoverERC20(address tokenAddress, uint256 tokenAmount) external onlyTknMgrs(tokenAddress) { // Check if the desired token is a reward token - bool isRewardToken = false; - for (uint256 i = 0; i < rewardTokens.length; i++){ - if (rewardTokens[i] == tokenAddress) { - isRewardToken = true; - break; - } - } + bool isRewTkn = isRewardToken[tokenAddress]; // Only the reward managers can take back their reward tokens // Also, other tokens, like the staking token, airdrops, or accidental deposits, can be withdrawn by the owner if ( - (isRewardToken && rewardManagers[tokenAddress] == msg.sender) - || (!isRewardToken && (msg.sender == owner)) + (isRewTkn && rewardManagers[tokenAddress] == msg.sender) + || (!isRewTkn && (msg.sender == owner)) ) { TransferHelper.safeTransfer(tokenAddress, msg.sender, tokenAmount); return; @@ -679,6 +752,15 @@ contract FraxUnifiedFarmTemplate is Owned, ReentrancyGuard { } } + /// @notice Sets multiple variables at once + /// @param _misc_vars The variables to set: + /// [0]: uint256 _lock_max_multiplier, + /// [1] uint256 _vefxs_max_multiplier, + /// [2] uint256 _vefxs_per_frax_for_max_boost, + /// [3] uint256 _vefxs_boost_scale_factor, + /// [4] uint256 _lock_time_for_max_multiplier, + /// [5] uint256 _lock_time_min + /// [6] uint256 _max_stake_limit (must be at greater or equal to old value) function setMiscVariables( uint256[6] memory _misc_vars // [0]: uint256 _lock_max_multiplier, @@ -701,6 +783,11 @@ contract FraxUnifiedFarmTemplate is Owned, ReentrancyGuard { } // The owner or the reward token managers can set reward rates + /// @notice Allows owner or reward token managers to set the reward rate for a given reward token + /// @param reward_token_address The address of the reward token + /// @param _new_rate The new reward rate (token amount divided by reward period duration) + /// @param _gauge_controller_address The address of the gauge controller for this reward token + /// @param _rewards_distributor_address The address of the rewards distributor for this reward token function setRewardVars(address reward_token_address, uint256 _new_rate, address _gauge_controller_address, address _rewards_distributor_address) external onlyTknMgrs(reward_token_address) { rewardRatesManual[rewardTokenAddrToIdx[reward_token_address]] = _new_rate; gaugeControllers[rewardTokenAddrToIdx[reward_token_address]] = _gauge_controller_address; @@ -708,6 +795,9 @@ contract FraxUnifiedFarmTemplate is Owned, ReentrancyGuard { } // The owner or the reward token managers can change managers + /// @notice Allows owner or reward token managers to change the reward manager for a given reward token + /// @param reward_token_address The address of the reward token + /// @param new_manager_address The new reward manager address function changeTokenManager(address reward_token_address, address new_manager_address) external onlyTknMgrs(reward_token_address) { rewardManagers[reward_token_address] = new_manager_address; } diff --git a/src/hardhat/contracts/Staking/FraxUnifiedFarmTemplate_V2.sol b/src/hardhat/contracts/Staking/FraxUnifiedFarmTemplate_V2.sol index f0a630e1..a8754979 100755 --- a/src/hardhat/contracts/Staking/FraxUnifiedFarmTemplate_V2.sol +++ b/src/hardhat/contracts/Staking/FraxUnifiedFarmTemplate_V2.sol @@ -9,7 +9,7 @@ pragma solidity >=0.8.4; // | /_/ /_/ \__,_/_/|_| /_/ /_/_/ /_/\__,_/_/ /_/\___/\___/ | // | | // ==================================================================== -// ====================== FraxUnifiedFarmTemplate ===================== +// ==================== FraxUnifiedFarmTemplate_V2 ==================== // ==================================================================== // Farming contract that accounts for veFXS // Overrideable for UniV3, ERC20s, etc @@ -57,11 +57,12 @@ contract FraxUnifiedFarmTemplate_V2 is OwnedV2, ReentrancyGuardV2 { error NeedsGRELLogic(); error NoValidTokensToRecover(); error MustBeGEMulPrec(); - error MustBeGEZero(); error MustBeGEOne(); error NotOwnerOrTimelock(); error NotOwnerOrTknMgr(); error NotEnoughRewardTokensAvailable(address); + error TooManyStakes(); + error NotARewardToken(); /* ========== STATE VARIABLES ========== */ @@ -70,13 +71,16 @@ contract FraxUnifiedFarmTemplate_V2 is OwnedV2, ReentrancyGuardV2 { // Frax related address internal constant frax_address = 0x853d955aCEf822Db058eb8505911ED77F175b99e; - uint256 public fraxPerLPStored; // fraxPerLPToken is a public view function, although doesn't show the stored value + /// @notice fraxPerLPToken is a public view function, although doesn't show the stored value + uint256 public fraxPerLPStored; // Constant for various precisions uint256 internal constant MULTIPLIER_PRECISION = 1e18; // Time tracking + /// @notice Ending timestamp for the current period uint256 public periodFinish; + /// @notice Timestamp of the last update - when this period started uint256 public lastUpdateTime; // Lock time and multiplier settings @@ -96,12 +100,15 @@ contract FraxUnifiedFarmTemplate_V2 is OwnedV2, ReentrancyGuardV2 { mapping(address => mapping(address => bool)) internal proxy_allowed_stakers; // Reward addresses, gauge addresses, reward rates, and reward managers - mapping(address => address) public rewardManagers; // token addr -> manager addr + /// @notice token addr -> manager addr + mapping(address => address) public rewardManagers; address[] internal rewardTokens; address[] internal gaugeControllers; address[] internal rewardDistributors; uint256[] internal rewardRatesManual; - mapping(address => uint256) public rewardTokenAddrToIdx; // token addr -> token index + mapping(address => bool) internal isRewardToken; + /// @notice token addr -> token index + mapping(address => uint256) public rewardTokenAddrToIdx; // Reward period uint256 public constant rewardsDuration = 604800; // 7 * 86400 (7 days) @@ -121,11 +128,13 @@ contract FraxUnifiedFarmTemplate_V2 is OwnedV2, ReentrancyGuardV2 { uint256 internal _total_combined_weight; mapping(address => uint256) internal _locked_liquidity; mapping(address => uint256) internal _combined_weights; - mapping(address => uint256) public proxy_lp_balances; // Keeps track of LP balances proxy-wide. Needed to make sure the proxy boost is kept in line + /// @notice Keeps track of LP balances proxy-wide. Needed to make sure the proxy boost is kept in line + mapping(address => uint256) public proxy_lp_balances; - // Stakers set which proxy(s) they want to use - mapping(address => address) public staker_designated_proxies; // Keep public so users can see on the frontend if they have a proxy + /// @notice Stakers set which proxy(s) they want to use + /// @dev Keep public so users can see on the frontend if they have a proxy + mapping(address => address) public staker_designated_proxies; // Admin booleans for emergencies and overrides bool public stakesUnlocked; // Release locked stakes in case of emergency @@ -134,6 +143,11 @@ contract FraxUnifiedFarmTemplate_V2 is OwnedV2, ReentrancyGuardV2 { bool internal stakingPaused; // For emergencies bool internal collectRewardsOnWithdrawalPaused; // For emergencies if a token is overemitted + /// @notice Maximum number of locked stakes allowed per address (prevent dust attacks) + /// @dev In the unlikely event that we need to increase this, we can using `setMiscVars`, but only ever increase (prevent making user's stakes unreachable) + /// @notice default to 5, as that is the most that users tend to have, on average + uint256 public max_locked_stakes; + /* ========== STRUCTS ========== */ // In children... @@ -147,13 +161,12 @@ contract FraxUnifiedFarmTemplate_V2 is OwnedV2, ReentrancyGuardV2 { } modifier onlyTknMgrs(address reward_token_address) { - // require(msg.sender == owner || isTokenManagerFor(msg.sender, reward_token_address), "Not owner or tkn mgr"); - if(msg.sender != owner && !isTokenManagerFor(msg.sender, reward_token_address)) revert NotOwnerOrTknMgr(); + if(!isTokenManagerFor(msg.sender, reward_token_address)) revert NotOwnerOrTknMgr(); _; } modifier updateRewardAndBalanceMdf(address account, bool sync_too) { - updateRewardAndBalance(account, sync_too); + _updateRewardAndBalance(account, sync_too, false); _; } @@ -178,6 +191,9 @@ contract FraxUnifiedFarmTemplate_V2 is OwnedV2, ReentrancyGuardV2 { // For fast token address -> token ID lookups later rewardTokenAddrToIdx[_rewardTokens[i]] = i; + // Add to the mapping + isRewardToken[_rewardTokens[i]] = true; + // Initialize the stored rewards rewardsPerTokenStored.push(0); @@ -191,26 +207,36 @@ contract FraxUnifiedFarmTemplate_V2 is OwnedV2, ReentrancyGuardV2 { last_gauge_time_totals.push(0); } - // Other booleans - // stakesUnlocked = false; - // Initialization lastUpdateTime = block.timestamp; periodFinish = block.timestamp + rewardsDuration; + + // Set the max locked stakes + max_locked_stakes = 12; + + // Sync the first period finish here with the gauge's + // periodFinish = IFraxGaugeController(gaugeControllers[0]).time_total(); + periodFinish = IFraxGaugeController(0x3669C421b77340B2979d1A00a792CC2ee0FcE737).time_total(); } /* ============= VIEWS ============= */ // ------ REWARD RELATED ------ - // See if the caller_addr is a manager for the reward token + /// @notice Checks if the caller is a manager for the reward token + /// @param caller_addr The address of the caller + /// @param reward_token_addr The address of the reward token + /// @return bool True if the caller is a manager for the reward token function isTokenManagerFor(address caller_addr, address reward_token_addr) public view returns (bool){ - if (caller_addr == owner) return true; // Contract owner + if (!isRewardToken[reward_token_addr]) return false; + else if (caller_addr == address(0) || reward_token_addr == address(0)) return false; + else if (caller_addr == owner) return true; // Contract owner else if (rewardManagers[reward_token_addr] == caller_addr) return true; // Reward manager return false; } - // All the reward tokens + /// @notice Gets all the reward tokens this contract handles + /// @return rewardTokens_ The reward tokens array function getAllRewardTokens() external view returns (address[] memory) { return rewardTokens; } @@ -220,6 +246,9 @@ contract FraxUnifiedFarmTemplate_V2 is OwnedV2, ReentrancyGuardV2 { return Math.min(block.timestamp, periodFinish); } + /// @notice The amount of reward tokens being paid out per second this period + /// @param token_idx The index of the reward token + /// @return rwd_rate The reward rate function rewardRates(uint256 token_idx) public view returns (uint256 rwd_rate) { // address gauge_controller_address = gaugeControllers[token_idx]; if (gaugeControllers[token_idx] != address(0)) { @@ -233,7 +262,8 @@ contract FraxUnifiedFarmTemplate_V2 is OwnedV2, ReentrancyGuardV2 { } } - // Amount of reward tokens per LP token / liquidity unit + /// @notice The rate of reward tokens earned per liquidity unit + /// @return newRewardsPerTokenStored The new rewards per token stored array function rewardsPerToken() public view returns (uint256[] memory newRewardsPerTokenStored) { if (_total_liquidity_locked == 0 || _total_combined_weight == 0) { return rewardsPerTokenStored; @@ -249,9 +279,10 @@ contract FraxUnifiedFarmTemplate_V2 is OwnedV2, ReentrancyGuardV2 { } } - // Amount of reward tokens an account has earned / accrued - // Note: In the edge-case of one of the account's stake expiring since the last claim, this will - // return a slightly inflated number + /// @notice The amount of reward tokens an account has earned / accrued + /// @dev In the edge-case of one of the account's stake expiring since the last claim, this will + /// @param account The account to check + /// @return new_earned Array of reward token amounts earned by the account function earned(address account) public view returns (uint256[] memory new_earned) { uint256[] memory reward_arr = rewardsPerToken(); new_earned = new uint256[](rewardTokens.length); @@ -267,7 +298,8 @@ contract FraxUnifiedFarmTemplate_V2 is OwnedV2, ReentrancyGuardV2 { } } - // Total reward tokens emitted in the given period + /// @notice The total reward tokens emitted in the given period + /// @return rewards_per_duration_arr Array of reward token amounts emitted in the current period function getRewardForDuration() external view returns (uint256[] memory rewards_per_duration_arr) { rewards_per_duration_arr = new uint256[](rewardRatesManual.length); @@ -279,23 +311,29 @@ contract FraxUnifiedFarmTemplate_V2 is OwnedV2, ReentrancyGuardV2 { // ------ LIQUIDITY AND WEIGHTS ------ - // User locked liquidity / LP tokens + /// @notice The farm's total locked liquidity / LP tokens + /// @return The total locked liquidity function totalLiquidityLocked() external view returns (uint256) { return _total_liquidity_locked; } - // Total locked liquidity / LP tokens + /// @notice A user's locked liquidity / LP tokens + /// @param account The address of the account + /// @return The locked liquidity function lockedLiquidityOf(address account) external view returns (uint256) { return _locked_liquidity[account]; } - // Total combined weight + /// @notice The farm's total combined weight of all users + /// @return The total combined weight function totalCombinedWeight() external view returns (uint256) { return _total_combined_weight; } - // Total 'balance' used for calculating the percent of the pool the account owns - // Takes into account the locked stake time multiplier and veFXS multiplier + /// @notice Total 'balance' used for calculating the percent of the pool the account owns + /// @notice Takes into account the locked stake time multiplier and veFXS multiplier + /// @param account The address of the account + /// @return The combined weight function combinedWeightOf(address account) external view returns (uint256) { return _combined_weights[account]; } @@ -312,14 +350,10 @@ contract FraxUnifiedFarmTemplate_V2 is OwnedV2, ReentrancyGuardV2 { } // ------ LOCK RELATED ------ - // Multiplier amount, given the length of the lock + /// @notice Reads the lock boost multiplier for a given duration + /// @param secs The duration of the lock in seconds + /// @return The multiplier amount function lockMultiplier(uint256 secs) public view returns (uint256) { - // return Math.min( - // lock_max_multiplier, - // uint256(MULTIPLIER_PRECISION) + ( - // (secs * (lock_max_multiplier - MULTIPLIER_PRECISION)) / lock_time_for_max_multiplier - // ) - // ) ; return Math.min( lock_max_multiplier, (secs * lock_max_multiplier) / lock_time_for_max_multiplier @@ -328,34 +362,52 @@ contract FraxUnifiedFarmTemplate_V2 is OwnedV2, ReentrancyGuardV2 { // ------ FRAX RELATED ------ + /// @notice The amount of FRAX denominated value being boosted that an address has staked + /// @param account The address to check + /// @return The amount of FRAX value boosted function userStakedFrax(address account) public view returns (uint256) { return (fraxPerLPStored * _locked_liquidity[account]) / MULTIPLIER_PRECISION; } + /// @notice The amount of FRAX denominated value being boosted that a proxy address has staked + /// @param proxy_address The address to check + /// @return The amount of FRAX value boosted function proxyStakedFrax(address proxy_address) public view returns (uint256) { return (fraxPerLPStored * proxy_lp_balances[proxy_address]) / MULTIPLIER_PRECISION; } - // Max LP that can get max veFXS boosted for a given address at its current veFXS balance + /// @notice The maximum LP that can get max veFXS boosted for a given address at its current veFXS balance + /// @param account The address to check + /// @return The maximum LP that can get max veFXS boosted for a given address at its current veFXS balance function maxLPForMaxBoost(address account) external view returns (uint256) { return (veFXS.balanceOf(account) * MULTIPLIER_PRECISION * MULTIPLIER_PRECISION) / (vefxs_per_frax_for_max_boost * fraxPerLPStored); } - // Meant to be overridden + /// @notice Must be overriden to return the current FRAX per LP token + /// @return The current number of FRAX per LP token function fraxPerLPToken() public virtual view returns (uint256) { revert NeedsFPLPTLogic(); } // ------ veFXS RELATED ------ + /// @notice The minimum veFXS required to get max boost for a given address + /// @param account The address to check + /// @return The minimum veFXS required to get max boost function minVeFXSForMaxBoost(address account) public view returns (uint256) { return (userStakedFrax(account) * vefxs_per_frax_for_max_boost) / MULTIPLIER_PRECISION; } + /// @notice The minimum veFXS required to get max boost for a given proxy + /// @param proxy_address The proxy address + /// @return The minimum veFXS required to get max boost function minVeFXSForMaxBoostProxy(address proxy_address) public view returns (uint256) { return (proxyStakedFrax(proxy_address) * vefxs_per_frax_for_max_boost) / MULTIPLIER_PRECISION; } + /// @notice Looks up a staker's proxy + /// @param addr The address to check + /// @return the_proxy The proxy address, or address(0) function getProxyFor(address addr) public view returns (address){ if (valid_vefxs_proxies[addr]) { // If addr itself is a proxy, return that. @@ -368,6 +420,9 @@ contract FraxUnifiedFarmTemplate_V2 is OwnedV2, ReentrancyGuardV2 { } } + /// @notice The multiplier for a given account, based on veFXS + /// @param account The account to check + /// @return vefxs_multiplier The multiplier boost for the account function veFXSMultiplier(address account) public view returns (uint256 vefxs_multiplier) { // Use either the user's or their proxy's veFXS balance // uint256 vefxs_bal_to_use = 0; @@ -405,10 +460,8 @@ contract FraxUnifiedFarmTemplate_V2 is OwnedV2, ReentrancyGuardV2 { /* =============== MUTATIVE FUNCTIONS =============== */ - - // Proxy can allow a staker to use their veFXS balance (the staker will have to reciprocally toggle them too) - // Must come before stakerSetVeFXSProxy - // CALLED BY PROXY + /// @notice Toggle whether a staker can use the proxy's veFXS balance to boost yields + /// @notice Proxy must call this first, then the staker must call stakerSetVeFXSProxy function proxyToggleStaker(address staker_address) external { if(!valid_vefxs_proxies[msg.sender]) revert InvalidProxy(); @@ -423,8 +476,8 @@ contract FraxUnifiedFarmTemplate_V2 is OwnedV2, ReentrancyGuardV2 { } } - // Staker can allow a veFXS proxy (the proxy will have to toggle them first) - // CALLED BY STAKER + /// @notice After proxy toggles staker to true, staker must call and confirm this + /// @param proxy_address The address of the veFXS proxy function stakerSetVeFXSProxy(address proxy_address) external { if(!valid_vefxs_proxies[proxy_address]) revert InvalidProxy(); if(!proxy_allowed_stakers[proxy_address][msg.sender]) revert ProxyHasNotApprovedYou(); @@ -453,11 +506,20 @@ contract FraxUnifiedFarmTemplate_V2 is OwnedV2, ReentrancyGuardV2 { // ------ REWARDS SYNCING ------ - function updateRewardAndBalance(address account, bool sync_too) public { + function _updateRewardAndBalance(address account, bool sync_too) internal { + _updateRewardAndBalance(account, sync_too, false); + } + + function _updateRewardAndBalance(address account, bool sync_too, bool pre_sync_vemxstored) internal { // Need to retro-adjust some things if the period hasn't been renewed, then start a new one if (sync_too){ sync(); } + + // Used to make sure the veFXS multiplier is correct if a stake is increased, before calcCurCombinedWeight + if (pre_sync_vemxstored){ + _vefxsMultiplierStored[account] = veFXSMultiplier(account); + } if (account != address(0)) { // To keep the math correct, the user's combined weight must be recomputed to account for their @@ -518,8 +580,10 @@ contract FraxUnifiedFarmTemplate_V2 is OwnedV2, ReentrancyGuardV2 { // ------ REWARDS CLAIMING ------ + /// @notice A function that can be overridden to add extra logic to the getReward function + /// @param destination_address The address to send the rewards to function getRewardExtraLogic(address destination_address) public nonReentrant { - if(rewardsCollectionPaused == true) revert RewardsCollectionPaused(); + if(rewardsCollectionPaused) revert RewardsCollectionPaused(); return _getRewardExtraLogic(msg.sender, destination_address); } @@ -529,16 +593,26 @@ contract FraxUnifiedFarmTemplate_V2 is OwnedV2, ReentrancyGuardV2 { } /// @notice A function that can be overridden to add extra logic to the pre-transfer process to process curve LP rewards + /// @dev param0: from The sender address of the transfer + /// @dev param1: to The recipient address of the transfer + /// @dev Override in children function preTransferProcess(address, address) public virtual { revert NeedsPreTransferProcessLogic(); } // Two different getReward functions are needed because of delegateCall and msg.sender issues // For backwards-compatibility + /// @notice Claims rewards to destination address + /// @param destination_address The address to send the rewards to + /// @return rewards_before The rewards available before the claim function getReward(address destination_address) external nonReentrant returns (uint256[] memory) { return _getReward(msg.sender, destination_address, true); } + /// @notice Claims rewards to destination address & wether to do extra logic + /// @param destination_address The address to send the rewards to + /// @param claim_extra_too Whether to do extra logic + /// @return rewards_before The rewards available before the claim function getReward2(address destination_address, bool claim_extra_too) external nonReentrant returns (uint256[] memory) { return _getReward(msg.sender, destination_address, claim_extra_too); } @@ -553,7 +627,7 @@ contract FraxUnifiedFarmTemplate_V2 is OwnedV2, ReentrancyGuardV2 { lastRewardClaimTime[rewardee] = block.timestamp; // Make sure rewards collection isn't paused - if(rewardsCollectionPaused == true) revert RewardsCollectionPaused(); + if(rewardsCollectionPaused) revert RewardsCollectionPaused(); // Update the rewards array and distribute rewards rewards_before = new uint256[](rewardTokens.length); @@ -611,12 +685,6 @@ contract FraxUnifiedFarmTemplate_V2 is OwnedV2, ReentrancyGuardV2 { // lastUpdateTime = periodFinish; periodFinish = periodFinish + ((num_periods_elapsed + 1) * rewardsDuration); - // Update the rewards and time - _updateStoredRewardsAndTime(); - - // Update the fraxPerLPStored - fraxPerLPStored = fraxPerLPToken(); - // Pull in rewards and set the reward rate for one week, based off of that // If the rewards get messed up for some reason, set this to 0 and it will skip // if (rewardRatesManual[1] != 0 && rewardRatesManual[2] != 0) { @@ -651,6 +719,8 @@ contract FraxUnifiedFarmTemplate_V2 is OwnedV2, ReentrancyGuardV2 { lastUpdateTime = lastTimeRewardApplicable(); } + /// @notice Updates the gauge weights, if applicable + /// @param force_update If true, will update the weights even if the time hasn't elapsed function sync_gauge_weights(bool force_update) public { // Loop through the gauge controllers for (uint256 i; i < gaugeControllers.length; i++){ @@ -668,6 +738,7 @@ contract FraxUnifiedFarmTemplate_V2 is OwnedV2, ReentrancyGuardV2 { } } + /// @notice Updates gauge weights, fraxPerLP, pulls in new rewards or updates rewards function sync() public { // Sync the gauge weight, if applicable sync_gauge_weights(false); @@ -690,6 +761,11 @@ contract FraxUnifiedFarmTemplate_V2 is OwnedV2, ReentrancyGuardV2 { // ------ PAUSES ------ + /// @notice Owner or governance can pause/unpause staking, withdrawals, rewards collection, and collectRewardsOnWithdrawal + /// @param _stakingPaused Whether staking is paused + /// @param _withdrawalsPaused Whether withdrawals are paused + /// @param _rewardsCollectionPaused Whether rewards collection is paused + /// @param _collectRewardsOnWithdrawalPaused Whether collectRewardsOnWithdrawal is paused function setPauses( bool _stakingPaused, bool _withdrawalsPaused, @@ -704,32 +780,30 @@ contract FraxUnifiedFarmTemplate_V2 is OwnedV2, ReentrancyGuardV2 { /* ========== RESTRICTED FUNCTIONS - Owner or timelock only ========== */ + /// @notice Owner or governance can unlock stakes - irreversible! function unlockStakes() external onlyByOwnGov { stakesUnlocked = !stakesUnlocked; } - // Adds a valid veFXS proxy address + /// @notice Owner or governance sets whether an address is a valid veFXS proxy + /// @param _proxy_addr The address to set function toggleValidVeFXSProxy(address _proxy_addr) external onlyByOwnGov { valid_vefxs_proxies[_proxy_addr] = !valid_vefxs_proxies[_proxy_addr]; } - // Added to support recovering LP Rewards and other mistaken tokens from other systems to be distributed to holders + /// @notice Allows owner to recover any ERC20 or token manager to recover their reward token. + /// @param tokenAddress The address of the token to recover + /// @param tokenAmount The amount of the token to recover function recoverERC20(address tokenAddress, uint256 tokenAmount) external onlyTknMgrs(tokenAddress) { // Check if the desired token is a reward token - bool isRewardToken; - for (uint256 i; i < rewardTokens.length; i++){ - if (rewardTokens[i] == tokenAddress) { - isRewardToken = true; - break; - } - } + bool isRewTkn = isRewardToken[tokenAddress]; // Only the reward managers can take back their reward tokens // Also, other tokens, like the staking token, airdrops, or accidental deposits, can be withdrawn by the owner if ( - (isRewardToken && rewardManagers[tokenAddress] == msg.sender) + (isRewTkn && rewardManagers[tokenAddress] == msg.sender) || - (!isRewardToken && (msg.sender == owner)) + (!isRewTkn && (msg.sender == owner)) ) { TransferHelperV2.safeTransfer(tokenAddress, msg.sender, tokenAmount); return; @@ -740,8 +814,17 @@ contract FraxUnifiedFarmTemplate_V2 is OwnedV2, ReentrancyGuardV2 { } } + /// @notice Sets multiple variables at once + /// @param _misc_vars The variables to set: + /// [0]: uint256 _lock_max_multiplier, + /// [1] uint256 _vefxs_max_multiplier, + /// [2] uint256 _vefxs_per_frax_for_max_boost, + /// [3] uint256 _vefxs_boost_scale_factor, + /// [4] uint256 _lock_time_for_max_multiplier, + /// [5] uint256 _lock_time_min + /// [6] uint256 _max_stake_limit (must be at greater or equal to old value) function setMiscVariables( - uint256[6] memory _misc_vars + uint256[7] memory _misc_vars // [0]: uint256 _lock_max_multiplier, // [1] uint256 _vefxs_max_multiplier, // [2] uint256 _vefxs_per_frax_for_max_boost, @@ -754,7 +837,6 @@ contract FraxUnifiedFarmTemplate_V2 is OwnedV2, ReentrancyGuardV2 { // require((_misc_vars[4] >= 1) && (_misc_vars[5] >= 1), "Must be >= 1"); /// TODO check this rewrite if(_misc_vars[4] < _misc_vars[5]) revert MustBeGEMulPrec(); - if((_misc_vars[1] < 0) || (_misc_vars[2] < 0) || (_misc_vars[3] < 0)) revert MustBeGEZero(); if((_misc_vars[4] < 1) || (_misc_vars[5] < 1)) revert MustBeGEOne(); lock_max_multiplier = _misc_vars[0]; @@ -763,21 +845,37 @@ contract FraxUnifiedFarmTemplate_V2 is OwnedV2, ReentrancyGuardV2 { vefxs_boost_scale_factor = _misc_vars[3]; lock_time_for_max_multiplier = _misc_vars[4]; lock_time_min = _misc_vars[5]; + + /// This value can only ever be increased. + /// If it were decreased, user locked stakes would be un-reachable for transfers & management, although they would be withdrawable once unlocked. + /// If we must be able to decrease, stakes above this value could be made immediately withdrawable + if (_misc_vars[6] > max_locked_stakes) { + max_locked_stakes = _misc_vars[6]; + } } // The owner or the reward token managers can set reward rates + /// @notice Allows owner or reward token managers to set the reward rate for a given reward token + /// @param reward_token_address The address of the reward token + /// @param _new_rate The new reward rate (token amount divided by reward period duration) + /// @param _gauge_controller_address The address of the gauge controller for this reward token + /// @param _rewards_distributor_address The address of the rewards distributor for this reward token function setRewardVars( address reward_token_address, uint256 _new_rate, address _gauge_controller_address, address _rewards_distributor_address ) external onlyTknMgrs(reward_token_address) { + if (!isRewardToken[reward_token_address]) revert NotARewardToken(); rewardRatesManual[rewardTokenAddrToIdx[reward_token_address]] = _new_rate; gaugeControllers[rewardTokenAddrToIdx[reward_token_address]] = _gauge_controller_address; rewardDistributors[rewardTokenAddrToIdx[reward_token_address]] = _rewards_distributor_address; } // The owner or the reward token managers can change managers + /// @notice Allows owner or reward token managers to change the reward manager for a given reward token + /// @param reward_token_address The address of the reward token + /// @param new_manager_address The new reward manager address function changeTokenManager(address reward_token_address, address new_manager_address) external onlyTknMgrs(reward_token_address) { rewardManagers[reward_token_address] = new_manager_address; } diff --git a/src/hardhat/contracts/Staking/FraxUnifiedFarm_ERC20.sol b/src/hardhat/contracts/Staking/FraxUnifiedFarm_ERC20.sol index 7f469273..f5b64256 100755 --- a/src/hardhat/contracts/Staking/FraxUnifiedFarm_ERC20.sol +++ b/src/hardhat/contracts/Staking/FraxUnifiedFarm_ERC20.sol @@ -20,16 +20,16 @@ import "./FraxUnifiedFarmTemplate.sol"; // Convex wrappers // import "../Curve/ICurvefrxETHETHPool.sol"; -import "../Misc_AMOs/convex/IConvexStakingWrapperFrax.sol"; -import "../Misc_AMOs/convex/IDepositToken.sol"; -import "../Misc_AMOs/curve/I2pool.sol"; -import "../Misc_AMOs/curve/I2poolToken.sol"; +// import "../Misc_AMOs/convex/IConvexStakingWrapperFrax.sol"; +// import "../Misc_AMOs/convex/IDepositToken.sol"; +// import "../Misc_AMOs/curve/I2pool.sol"; +// import "../Misc_AMOs/curve/I2poolToken.sol"; // Fraxlend // import '../Fraxlend/IFraxlendPair.sol'; // Fraxswap -// import '../Fraxswap/core/interfaces/IFraxswapPair.sol'; +import '../Fraxswap/core/interfaces/IFraxswapPair.sol'; // G-UNI // import "../Misc_AMOs/gelato/IGUniPool.sol"; @@ -61,13 +61,13 @@ contract FraxUnifiedFarm_ERC20 is FraxUnifiedFarmTemplate { // -------------------- VARIES -------------------- // Convex stkcvxFPIFRAX, stkcvxFRAXBP, etc - IConvexStakingWrapperFrax public stakingToken; - I2poolToken public curveToken; - I2pool public curvePool; + // IConvexStakingWrapperFrax public stakingToken; + // I2poolToken public curveToken; + // I2pool public curvePool; // ICurvefrxETHETHPool public curvePool; // Fraxswap - // IFraxswapPair public stakingToken; + IFraxswapPair public stakingToken; // Fraxlend // IFraxlendPair public stakingToken; @@ -391,7 +391,7 @@ contract FraxUnifiedFarm_ERC20 is FraxUnifiedFarmTemplate { } // Need to call to update the combined weights - updateRewardAndBalance(staker_address, false); + _updateRewardAndBalance(staker_address, false, true); } function _getStake(address staker_address, bytes32 kek_id) internal view returns (LockedStake memory locked_stake, uint256 arr_idx) { @@ -463,7 +463,7 @@ contract FraxUnifiedFarm_ERC20 is FraxUnifiedFarmTemplate { ); // Need to call to update the combined weights - updateRewardAndBalance(msg.sender, false); + _updateRewardAndBalance(msg.sender, false, true); emit LockedLonger(msg.sender, kek_id, new_secs, block.timestamp, new_ending_ts); } @@ -516,19 +516,26 @@ contract FraxUnifiedFarm_ERC20 is FraxUnifiedFarmTemplate { // ------ WITHDRAWING ------ // Two different withdrawLocked functions are needed because of delegateCall and msg.sender issues (important for proxies) - function withdrawLocked(bytes32 kek_id, address destination_address) nonReentrant external returns (uint256) { + function withdrawLocked(bytes32 kek_id, address destination_address, bool claim_rewards) nonReentrant external returns (uint256) { require(withdrawalsPaused == false, "Withdrawals paused"); - return _withdrawLocked(msg.sender, destination_address, kek_id); + return _withdrawLocked(msg.sender, destination_address, kek_id, claim_rewards); } // No withdrawer == msg.sender check needed since this is only internally callable and the checks are done in the wrapper function _withdrawLocked( address staker_address, address destination_address, - bytes32 kek_id + bytes32 kek_id, + bool claim_rewards ) internal returns (uint256) { // Collect rewards first and then update the balances - _getReward(staker_address, destination_address, true); + // collectRewardsOnWithdrawalPaused to be used in an emergency situation if reward is overemitted or not available + // and the user can forfeit rewards to get their principal back. User can also specify it in withdrawLocked + if (claim_rewards || !collectRewardsOnWithdrawalPaused) _getReward(staker_address, destination_address, true); + else { + // Sync the rewards at least + _updateRewardAndBalance(staker_address, true, false); + } // Get the stake and its index (LockedStake memory thisStake, uint256 theArrayIndex) = _getStake(staker_address, kek_id); diff --git a/src/hardhat/contracts/Staking/FraxUnifiedFarm_ERC20_V2.sol b/src/hardhat/contracts/Staking/FraxUnifiedFarm_ERC20_V2.sol index d6572d2a..dd0bd3c1 100644 --- a/src/hardhat/contracts/Staking/FraxUnifiedFarm_ERC20_V2.sol +++ b/src/hardhat/contracts/Staking/FraxUnifiedFarm_ERC20_V2.sol @@ -67,10 +67,11 @@ contract FraxUnifiedFarm_ERC20_V2 is FraxUnifiedFarmTemplate_V2 { error MinimumStakeTimeNotMet(); error TryingToLockForTooLong(); error CannotShortenLockTime(); - error MustBeInTheFuture(); - error MustBePositive(); + error BeforeLockTransferFailed(); + error OnLockReceivedFailed(); error CannotBeZero(); error AllowanceIsZero(); + error NoStakeIndexProvided(); /* ========== STATE VARIABLES ========== */ @@ -178,6 +179,8 @@ contract FraxUnifiedFarm_ERC20_V2 is FraxUnifiedFarmTemplate_V2 { // ------ FRAX RELATED ------ + /// @notice Get the amount of FRAX 'inside' an LP token + /// @dev Override if needing to do something special function fraxPerLPToken() public virtual view override returns (uint256) { // Get the amount of FRAX 'inside' of the lp tokens uint256 frax_per_lp_token; @@ -273,6 +276,10 @@ contract FraxUnifiedFarm_ERC20_V2 is FraxUnifiedFarmTemplate_V2 { // ------ LIQUIDITY AND WEIGHTS ------ + /// @notice Calculates the current lock multiplier for a given account's locked stake + /// @param account The account to check + /// @param stake_idx The index of the stake to check + /// @return midpoint_lock_multiplier The midpoint of the user's stake's lock multiplier function calcCurrLockMultiplier(address account, uint256 stake_idx) public view returns (uint256 midpoint_lock_multiplier) { // Get the stake LockedStake memory thisStake = lockedStakes[account][stake_idx]; @@ -328,6 +335,11 @@ contract FraxUnifiedFarm_ERC20_V2 is FraxUnifiedFarmTemplate_V2 { } // Calculate the combined weight for an account + /// @notice Calculates the combined weight for an account + /// @param account The account to check + /// @return old_combined_weight The account's old combined weight + /// @return new_vefxs_multiplier The account's new veFXS multiplier + /// @return new_combined_weight The account's new combined weight function calcCurCombinedWeight(address account) public override view returns ( uint256 old_combined_weight, @@ -373,22 +385,34 @@ contract FraxUnifiedFarm_ERC20_V2 is FraxUnifiedFarmTemplate_V2 { // ------ LOCK RELATED ------ - // All the locked stakes for a given account + /// @notice Returns the locked stakes for a given account + /// @param account The address of the account + /// @return The array of locked stakes for a given account function lockedStakesOf(address account) external view returns (LockedStake[] memory) { return lockedStakes[account]; } - // Returns the length of the locked stakes for a given account + /// @notice Returns the length of the locked stakes for a given account + /// @param account The address of the account + /// @return The length of the locked stakes for a given account function lockedStakesOfLength(address account) external view returns (uint256) { return lockedStakes[account].length; } + /// @notice Returns the locked stake at a given index + /// @param staker The address of the staker + /// @param locked_stake_index The index of the locked stake + /// @return locked_stake The locked stake struct function getLockedStake(address staker, uint256 locked_stake_index) public view returns (LockedStake memory locked_stake) { return(lockedStakes[staker][locked_stake_index]); } /// @notice Returns the liquidity and ending timestamp of a locked stake + /// @param staker The address of the staker + /// @param locked_stake_index The index of the locked stake + /// @return The liquidity of the locked stake + /// @return The ending timestamp of the locked stake function getStakeLiquidityAndEnding(address staker, uint256 locked_stake_index) external view returns (uint256,uint256) { return( lockedStakes[staker][locked_stake_index].liquidity, @@ -400,14 +424,48 @@ contract FraxUnifiedFarm_ERC20_V2 is FraxUnifiedFarmTemplate_V2 { // ------ STAKING ------ + /// @notice Searches for previous used, but currently zeroed out stake positions within the array + /// @param staker The address of the staker + /// @return The index of the unused stake position + /// @return Whether or not an unused stake position was found + function _findUnusedStakeIndex(address staker) internal view returns (uint256,bool) { + uint256 i; + while (i < lockedStakes[staker].length) { + if (lockedStakes[staker][i].ending_timestamp == 0) { + return (i,true); + } + i++; + } + return (i,false); + } + + /// @notice Updates a stake for a given staker + /// @param staker The address of the staker + /// @param index The index of the stake + /// @param start_timestamp The timestamp of when the stake started + /// @param liquidity The amount of liquidity to stake + /// @param ending_timestamp The timestamp of when the stake ends + /// @param lock_multiplier The multiplier of the stake function _updateStake(address staker, uint256 index, uint256 start_timestamp, uint256 liquidity, uint256 ending_timestamp, uint256 lock_multiplier) internal { lockedStakes[staker][index] = LockedStake(start_timestamp, liquidity, ending_timestamp, lock_multiplier); } - function _createNewStake(address staker, uint256 start_timestamp, uint256 liquidity, uint256 ending_timestamp, uint256 lock_multiplier) internal { + /// @notice Creates a new stake for a given staker + /// @param staker The address of the staker + /// @param start_timestamp The timestamp of when the stake started + /// @param liquidity The amount of liquidity to stake + /// @param ending_timestamp The timestamp of when the stake ends + /// @param lock_multiplier The multiplier of the stake + /// @return The index of the new stake + function _createNewStake(address staker, uint256 start_timestamp, uint256 liquidity, uint256 ending_timestamp, uint256 lock_multiplier) internal returns(uint256) { lockedStakes[staker].push(LockedStake(start_timestamp, liquidity, ending_timestamp, lock_multiplier)); + return lockedStakes[staker].length - 1; } + /// @notice Update's the global & proxy liquidity amounts, and checkpoint's user's rewards/balances + /// @param staker_address The address of the staker + /// @param amt The amount of liquidity to add or remove + /// @param is_add Whether to add or remove liquidity function _updateLiqAmts(address staker_address, uint256 amt, bool is_add) internal { // Get the proxy address address the_proxy = staker_designated_proxies[staker_address]; @@ -432,130 +490,218 @@ contract FraxUnifiedFarm_ERC20_V2 is FraxUnifiedFarmTemplate_V2 { } // Need to call to update the combined weights - updateRewardAndBalance(staker_address, false); - } - - // Add additional LPs to an existing locked stake - function lockAdditional(uint256 theArrayIndex, uint256 addl_liq) nonReentrant updateRewardAndBalanceMdf(msg.sender, true) external { - // Get the stake by its index - LockedStake memory thisStake = lockedStakes[msg.sender][theArrayIndex]; - - // Checks - if (addl_liq <= 0) revert MustBePositive(); - - // Pull the tokens from the sender - TransferHelperV2.safeTransferFrom(address(stakingToken), msg.sender, address(this), addl_liq); - - // Update the stake - _updateStake( - msg.sender, - theArrayIndex, - thisStake.start_timestamp, - (thisStake.liquidity + addl_liq), - thisStake.ending_timestamp, - thisStake.lock_multiplier - ); - // Update liquidities - _updateLiqAmts(msg.sender, addl_liq, true); - - emit LockedAdditional(msg.sender, theArrayIndex, addl_liq); + _updateRewardAndBalance(staker_address, false, true); } - // Extends the lock of an existing stake - function lockLonger(uint256 theArrayIndex, uint256 new_ending_ts) nonReentrant updateRewardAndBalanceMdf(msg.sender, true) external { - // Get the stake by its index - LockedStake memory thisStake = lockedStakes[msg.sender][theArrayIndex]; - - // Check - // require(new_ending_ts > block.timestamp, "Must be in the future"); - if (new_ending_ts <= block.timestamp) revert MustBeInTheFuture(); - - // Calculate some times - //uint256 time_left = (thisStake.ending_timestamp > block.timestamp) ? thisStake.ending_timestamp - block.timestamp : 0; - uint256 new_secs = new_ending_ts - block.timestamp; - - // Checks - // require(time_left > 0, "Already expired"); - if (new_secs <= ( - (thisStake.ending_timestamp > block.timestamp) ? - thisStake.ending_timestamp - block.timestamp : 0 - )) revert CannotShortenLockTime(); - if (new_secs < lock_time_min) revert MinimumStakeTimeNotMet(); - if (new_secs > lock_time_for_max_multiplier) revert TryingToLockForTooLong(); - - // Update the stake - _updateStake( - msg.sender, - theArrayIndex, - block.timestamp, - thisStake.liquidity, - new_ending_ts, - lockMultiplier(new_secs) - ); - - // Need to call to update the combined weights - updateRewardAndBalance(msg.sender, false); - - emit LockedLonger(msg.sender, theArrayIndex, new_secs, block.timestamp, new_ending_ts); - } + // // Add additional LPs to an existing locked stake + // function lockAdditional(uint256 theArrayIndex, uint256 addl_liq) nonReentrant updateRewardAndBalanceMdf(msg.sender, true) external { + // // Get the stake by its index + // LockedStake memory thisStake = lockedStakes[msg.sender][theArrayIndex]; + + // // Checks + // if (addl_liq <= 0) revert MustBePositive(); + + // // Pull the tokens from the sender + // TransferHelperV2.safeTransferFrom(address(stakingToken), msg.sender, address(this), addl_liq); + + // // Update the stake + // _updateStake( + // msg.sender, + // theArrayIndex, + // thisStake.start_timestamp, + // (thisStake.liquidity + addl_liq), + // thisStake.ending_timestamp, + // thisStake.lock_multiplier + // ); + // // Update liquidities + // _updateLiqAmts(msg.sender, addl_liq, true); + + // emit LockedAdditional(msg.sender, theArrayIndex, addl_liq); + // } + + // // Extends the lock of an existing stake + // function lockLonger(uint256 theArrayIndex, uint256 new_ending_ts) nonReentrant updateRewardAndBalanceMdf(msg.sender, true) external { + // // Get the stake by its index + // LockedStake memory thisStake = lockedStakes[msg.sender][theArrayIndex]; + + // // Check + // // require(new_ending_ts > block.timestamp, "Must be in the future"); + // if (new_ending_ts <= block.timestamp) revert MustBeInTheFuture(); + + // // Calculate some times + // //uint256 time_left = (thisStake.ending_timestamp > block.timestamp) ? thisStake.ending_timestamp - block.timestamp : 0; + // uint256 new_secs = new_ending_ts - block.timestamp; + + // // Checks + // // require(time_left > 0, "Already expired"); + // if (new_secs <= ( + // (thisStake.ending_timestamp > block.timestamp) ? + // thisStake.ending_timestamp - block.timestamp : 0 + // )) revert CannotShortenLockTime(); + // if (new_secs < lock_time_min) revert MinimumStakeTimeNotMet(); + // if (new_secs > lock_time_for_max_multiplier) revert TryingToLockForTooLong(); + + // // Update the stake + // _updateStake( + // msg.sender, + // theArrayIndex, + // block.timestamp, + // thisStake.liquidity, + // new_ending_ts, + // lockMultiplier(new_secs) + // ); + + // // Need to call to update the combined weights + // updateRewardAndBalance(msg.sender, false); + + // emit LockedLonger(msg.sender, theArrayIndex, new_secs, block.timestamp, new_ending_ts); + // } // Two different stake functions are needed because of delegateCall and msg.sender issues (important for proxies) - function stakeLocked(uint256 liquidity, uint256 secs) nonReentrant external returns (uint256) { - return _stakeLocked(msg.sender, msg.sender, liquidity, secs, block.timestamp); + /// @notice Creation, extension, and addition of liquidity to a locked stake. + /// @notice Combines the functionality of stakeLocked, lockAdditional, and lockLonger into a single function. + /// @dev Note that `secs` is now only ever the amount of time to add to block.timestamp - secs can be 0 if locking additional only. + /// @param liquidity The amount of liquidity to stake. + /// @param secs The number of seconds to lock the liquidity for. + /// @param useTargetStakeIndex If true, alter certain parameters of an existing stake. If false, create a new stake. + /// @param targetIndex The index of the stake to alter, if applicable. + /// @return The index of the stake that was created or altered. + function manageStake(uint256 liquidity, uint256 secs, bool useTargetStakeIndex, uint256 targetIndex) nonReentrant external returns (uint256) { + return _manageStake(msg.sender, msg.sender, liquidity, secs, useTargetStakeIndex, targetIndex);//block.timestamp, } // If this were not internal, and source_address had an infinite approve, this could be exploitable // (pull funds from source_address and stake for an arbitrary staker_address) - function _stakeLocked( + /// @notice Creation, extension, and addition of liquidity to a locked stake. + /// @notice Combines the functionality of stakeLocked, lockAdditional, and lockLonger into a single function. + /// @dev Note that `secs` is now only ever the amount of time to add to block.timestamp - secs can be 0 if locking additional only. + /// @param staker_address The address of the staker. + /// @param source_address The address of the source of the liquidity. + /// @param liquidity The amount of liquidity to stake. + /// @param secs The number of seconds to lock the liquidity for. + /// @param useTargetStakeIndex If true, alter certain parameters of an existing stake. If false, create a new stake. + /// @param targetIndex The index of the stake to alter, if applicable. + function _manageStake( address staker_address, address source_address, uint256 liquidity, uint256 secs, - uint256 start_timestamp - ) internal updateRewardAndBalanceMdf(staker_address, true) returns (uint256) { + bool useTargetStakeIndex, + uint256 targetIndex + ) internal updateRewardAndBalanceMdf(staker_address, true) returns (uint256 stakeIndex) { if (stakingPaused) revert StakingPaused(); if (secs < lock_time_min) revert MinimumStakeTimeNotMet(); if (secs > lock_time_for_max_multiplier) revert TryingToLockForTooLong(); // Pull in the required token(s) // Varies per farm - TransferHelperV2.safeTransferFrom(address(stakingToken), source_address, address(this), liquidity); - - // Create the locked stake - _createNewStake( - staker_address, - start_timestamp, - liquidity, - block.timestamp + secs, - lockMultiplier(secs) - ); + if (liquidity > 0) { + TransferHelperV2.safeTransferFrom(address(stakingToken), source_address, address(this), liquidity); + } + + // If we are not using a target stake index, we are creating a new stake + // AND if there's enough stake space, create a new one, otherwise check for zeroed out stakes + if (!useTargetStakeIndex && lockedStakes[staker_address].length < max_locked_stakes) { + // Create the locked stake + stakeIndex = _createNewStake( + staker_address, + block.timestamp, + liquidity, + block.timestamp + secs, + lockMultiplier(secs) + ); + + // check that the number of this address' stakes are not over the limit + } else if (!useTargetStakeIndex && lockedStakes[staker_address].length == max_locked_stakes) { + // look for unused stakes that were previously used but zeroed out by withdrawals or transfers + (uint256 index, bool success) = _findUnusedStakeIndex(staker_address); + + // if no unused stake was found, revert + if (!success) revert TooManyStakes(); + + // set the index being used + stakeIndex = index; + + // reuse the zeroed out stake to create this new locked stake + _updateStake( + staker_address, + index, + block.timestamp, + liquidity, + block.timestamp + secs, + lockMultiplier(secs) + ); - // Update liquidities - _updateLiqAmts(staker_address, liquidity, true); + } else { + // Otherwise, we are either locking additional or extending lock duration + if (!useTargetStakeIndex) revert NoStakeIndexProvided(); + + // Get the stake by its index + LockedStake memory thisStake = lockedStakes[msg.sender][targetIndex]; + + // calculate the new ending timestamp (can = block.timestamp if secs = 0) + uint256 new_ending_ts = secs + block.timestamp; + + // if `secs` is 0, we are "locking additional" + if (new_ending_ts < thisStake.ending_timestamp) revert CannotShortenLockTime(); + + // Update the stake. If `secs` is 0, we are "locking additional" so don't need to change the time values + _updateStake( + staker_address, + targetIndex, + secs == 0 ? thisStake.start_timestamp : block.timestamp, + thisStake.liquidity + liquidity, // if locking additional, add to existing liquidity + secs == 0 ? thisStake.ending_timestamp : new_ending_ts, + lockMultiplier(secs) + ); + + // set the return value to the index of the stake we altered + stakeIndex = targetIndex; + } + // if altering balances of a stake, update the liquidities + // liquidity can be 0 if we are only extending the lock duration + if (liquidity > 0) { + // Update liquidities if we are creating a new stake or locking additional + // this also runs `_updateRewardAndBalance` for the staker + _updateLiqAmts(staker_address, liquidity, true); + } else { + // otherwise, only update rewards and balances + _updateRewardAndBalance(msg.sender, false); + } emit StakeLocked(staker_address, liquidity, secs, lockedStakes[staker_address].length - 1, source_address); - return lockedStakes[staker_address].length - 1; + return stakeIndex; } // ------ WITHDRAWING ------ - // Two different withdrawLocked functions are needed because of delegateCall and msg.sender issues (important for proxies) - function withdrawLocked(uint256 theArrayIndex, address destination_address) nonReentrant external returns (uint256) { - if (withdrawalsPaused == true) revert WithdrawalsPaused(); - return _withdrawLocked(msg.sender, destination_address, theArrayIndex); + /// @notice Withdraws a locked stake. + /// @notice This function is only callable by the staker. + /// @param theArrayIndex The index of the stake in the staker's array of stakes. + /// @param destination_address The address to send the withdrawn liquidity to. + /// @param claim_rewards Whether to claim rewards or not + /// @return The amount of liquidity withdrawn. + function withdrawLocked(uint256 theArrayIndex, address destination_address, bool claim_rewards) nonReentrant external returns (uint256) { + if (withdrawalsPaused) revert WithdrawalsPaused(); + return _withdrawLocked(msg.sender, destination_address, theArrayIndex, claim_rewards); } // No withdrawer == msg.sender check needed since this is only internally callable and the checks are done in the wrapper function _withdrawLocked( address staker_address, address destination_address, - uint256 theArrayIndex + uint256 theArrayIndex, + bool claim_rewards ) internal returns (uint256) { // Collect rewards first and then update the balances // collectRewardsOnWithdrawalPaused to be used in an emergency situation if reward is overemitted or not available - // and the user can forfeit rewards to get their principal back - if (!collectRewardsOnWithdrawalPaused) _getReward(staker_address, destination_address, true); + // and the user can forfeit rewards to get their principal back. User can also specify it in withdrawLocked + if (claim_rewards || !collectRewardsOnWithdrawalPaused) _getReward(staker_address, destination_address, true); + else { + // Sync the rewards at least + _updateRewardAndBalance(staker_address, true, false); + } // Get the stake by its index LockedStake memory thisStake = lockedStakes[staker_address][theArrayIndex]; @@ -594,6 +740,9 @@ contract FraxUnifiedFarm_ERC20_V2 is FraxUnifiedFarmTemplate_V2 { // Approve `spender` to transfer `lockedStake` on behalf of `owner` /// @notice Used to increase allowance when it is at zero /// @dev separating this from the `increaseAllowance` function to avoid the allowance exploit + /// @param spender The address of the account that is allowed to transfer the tokens + /// @param lockedStakeIndex The index of the locked stake + /// @param amount The amount of tokens to be approved for transfer function setAllowance(address spender, uint256 lockedStakeIndex, uint256 amount) external { if(spenderAllowance[msg.sender][lockedStakeIndex][spender] > 0) revert CannotBeZero(); spenderAllowance[msg.sender][lockedStakeIndex][spender] = amount; @@ -602,6 +751,9 @@ contract FraxUnifiedFarm_ERC20_V2 is FraxUnifiedFarmTemplate_V2 { /// @notice Used to increase allowance when it is not at zero /// @dev separating this from the `setAllowance` function to avoid the allowance exploit + /// @param spender The address of the account that is allowed to transfer the tokens + /// @param lockedStakeIndex The index of the locked stake + /// @param amount The amount of tokens to be approved for transfer function increaseAllowance(address spender, uint256 lockedStakeIndex, uint256 amount) external { if (spenderAllowance[msg.sender][lockedStakeIndex][spender] == 0) revert AllowanceIsZero(); spenderAllowance[msg.sender][lockedStakeIndex][spender] += amount; @@ -609,6 +761,8 @@ contract FraxUnifiedFarm_ERC20_V2 is FraxUnifiedFarmTemplate_V2 { } /// @notice Revoke approval for a single lockedStake + /// @param spender The address of the account that is allowed to transfer the tokens + /// @param lockedStakeIndex The index of the locked stake function removeAllowance(address spender, uint256 lockedStakeIndex) external { spenderAllowance[msg.sender][lockedStakeIndex][spender] = 0; emit Approval(msg.sender, spender, lockedStakeIndex, 0); @@ -616,6 +770,8 @@ contract FraxUnifiedFarm_ERC20_V2 is FraxUnifiedFarmTemplate_V2 { // Approve or revoke `spender` to transfer any/all locks on behalf of the owner /// @notice Set's `spender` approval for all locks: true=approve, false=remove approval + /// @param spender The address of the account that is allowed to transfer the tokens + /// @param approved The approval status function setApprovalForAll(address spender, bool approved) external { spenderApprovalForAllLocks[msg.sender][spender] = approved; emit ApprovalForAll(msg.sender, spender, approved); @@ -643,16 +799,15 @@ contract FraxUnifiedFarm_ERC20_V2 is FraxUnifiedFarmTemplate_V2 { /// @param lockedStakeIndex The index of the locked stake /// @param amount The amount to spend function _spendAllowance(address staker, uint256 lockedStakeIndex, uint256 amount) internal { - // if (spenderApprovalForAllLocks[staker][msg.sender]) { - // return; - // } - if (spenderAllowance[staker][lockedStakeIndex][msg.sender] == amount) { - spenderAllowance[staker][lockedStakeIndex][msg.sender] = 0; - } else if (spenderAllowance[staker][lockedStakeIndex][msg.sender] > amount) { - spenderAllowance[staker][lockedStakeIndex][msg.sender] -= amount; - } else { - revert InsufficientAllowance(); - } + // determine if the allowance is sufficient and spend it accordingly, based on the available allowance + if (spenderAllowance[staker][lockedStakeIndex][msg.sender] == amount) { + spenderAllowance[staker][lockedStakeIndex][msg.sender] = 0; + } else if (spenderAllowance[staker][lockedStakeIndex][msg.sender] > amount) { + spenderAllowance[staker][lockedStakeIndex][msg.sender] -= amount; + } else { + // otherwise, if there's not enough allowance, revert + revert InsufficientAllowance(); + } } // ------ TRANSFERRING LOCKED STAKES ------ @@ -672,9 +827,6 @@ contract FraxUnifiedFarm_ERC20_V2 is FraxUnifiedFarmTemplate_V2 { bool use_receiver_lock_index, uint256 receiver_lock_index ) external nonReentrant returns (uint256,uint256) { - // check approvals NOTE not needed as _spendAllowance does this also - // if (!isApproved(sender_address, sender_lock_index, transfer_amount)) revert TransferLockNotAllowed(msg.sender, sender_lock_index); - /// if spender is not approved for all, spend allowance, otherwise, carry on if(!spenderApprovalForAllLocks[sender_address][msg.sender]) { // adjust the allowance down & performs checks @@ -693,6 +845,9 @@ contract FraxUnifiedFarm_ERC20_V2 is FraxUnifiedFarmTemplate_V2 { /// @param transfer_amount The amount to transfer /// @param use_receiver_lock_index If true, the receiver wants the assets sent to an existing, valid lockedStake they control /// @param receiver_lock_index The index of the receiver's lockedStake to add these assets to + /// @notice @dev Similar to ERC721 `onERC721Received` callbacks, the risk exists for a sender or receiver to grief or censor transactions. + /// @notice @dev This griefing/censoring may warrant off-chain monitoring of transactions and preventing the malicious actor from being involved in transfers. + /// @notice @dev The need for being able to allow senders and receivers that are contracts needing to update user balances necessitates that these two calls remain in place despite these vectors. function transferLocked( address receiver_address, uint256 sender_lock_index, @@ -716,11 +871,11 @@ contract FraxUnifiedFarm_ERC20_V2 is FraxUnifiedFarmTemplate_V2 { // on transfer, call addrs[0] to verify sending is ok if (addrs[0].code.length > 0) { - require( + if ( ILockReceiver(addrs[0]).beforeLockTransfer(addrs[0], addrs[1], sender_lock_index, "") - == + != ILockReceiver.beforeLockTransfer.selector - ); + ) { revert BeforeLockTransferFailed(); } } // Get the stake and its index @@ -733,13 +888,10 @@ contract FraxUnifiedFarm_ERC20_V2 is FraxUnifiedFarmTemplate_V2 { if (block.timestamp >= senderStake.ending_timestamp || stakesUnlocked) { revert StakesUnlocked(); } - if (transfer_amount > senderStake.liquidity || transfer_amount <= 0) { + if (transfer_amount > senderStake.liquidity || transfer_amount == 0) { revert InvalidAmount(); } - // Update the liquidity for sender - _updateLiqAmts(addrs[0], transfer_amount, false); - // if sent amount was all the liquidity, delete the stake, otherwise decrease the balance if (transfer_amount == senderStake.liquidity) { // disable the stake @@ -749,41 +901,57 @@ contract FraxUnifiedFarm_ERC20_V2 is FraxUnifiedFarmTemplate_V2 { lockedStakes[addrs[0]][sender_lock_index].liquidity -= transfer_amount; } + // Update the liquidity for sender + _updateLiqAmts(addrs[0], transfer_amount, false); + /** if use_receiver_lock_index is true & the incoming stake wouldn't extend the receiver's stake - * & the index is valid - * & has liquidity - * & is still locked, update the stake & ending timestamp (longer of the two) - * else, create a new lockedStake - * note using nested if checks to reduce gas costs slightly + * - update the liquidity by transfer_amount + * else: + * - If max stakes is reached: + * - look for an unused stake to update with new values + * - or if none available, revert + * - Otherwise, user has available stake capacity, so create a new lockedStake */ if ( - use_receiver_lock_index == true + use_receiver_lock_index && senderStake.ending_timestamp <= lockedStakes[addrs[1]][receiver_lock_index].ending_timestamp ) { - // Get the stake and its index - LockedStake memory receiverStake = getLockedStake(addrs[1], receiver_lock_index); - - if (receiver_lock_index < lockedStakes[addrs[1]].length) { - if (receiverStake.liquidity > 0) { - if (receiverStake.ending_timestamp > block.timestamp) { - // Update the existing staker's stake liquidity - lockedStakes[addrs[1]][receiver_lock_index].liquidity += transfer_amount; - } - } - } + // Adjust the locked stake's liquidity by transfer_amount + lockedStakes[addrs[1]][receiver_lock_index].liquidity += transfer_amount; } else { - // create the new lockedStake - _createNewStake( - addrs[1], - senderStake.start_timestamp, - transfer_amount, - senderStake.ending_timestamp, - senderStake.lock_multiplier - ); - - // update the return value of the locked index - receiver_lock_index = lockedStakes[addrs[1]].length - 1; + // if receiver would have too many stakes to create a new one, look for zeroed out stakes + if (lockedStakes[addrs[1]].length == max_locked_stakes) { + // look for unused stakes that were previously used but zeroed out by withdrawals or transfers + (uint256 index, bool success) = _findUnusedStakeIndex(addrs[1]); + + // if no unused stake was found, revert + if (!success) revert TooManyStakes(); + + // set the index being used + receiver_lock_index = index; + + // reuse the zeroed out stake to create this new locked stake + _updateStake( + addrs[1], + index, + block.timestamp, + transfer_amount, + senderStake.ending_timestamp, + senderStake.lock_multiplier + ); + + // otherwise, create a new locked stake + } else { + // create the new lockedStake + receiver_lock_index = _createNewStake( + addrs[1], + senderStake.start_timestamp, + transfer_amount, + senderStake.ending_timestamp, + senderStake.lock_multiplier + ); + } } // update liquidity of the receiver @@ -797,13 +965,13 @@ contract FraxUnifiedFarm_ERC20_V2 is FraxUnifiedFarmTemplate_V2 { receiver_lock_index ); - // call the receiver with the destination lockedStake to verify receiving is ok if (addrs[1].code.length > 0) { - require(ILockReceiver(addrs[1]).onLockReceived(addrs[0], addrs[1], receiver_lock_index, "") - == - ILockReceiver.beforeLockTransfer.selector - ); + if ( + ILockReceiver(addrs[1]).onLockReceived(addrs[0], addrs[1], receiver_lock_index, "") + != + ILockReceiver.onLockReceived.selector + ) { revert OnLockReceivedFailed(); } } return (sender_lock_index, receiver_lock_index); @@ -823,4 +991,4 @@ contract FraxUnifiedFarm_ERC20_V2 is FraxUnifiedFarmTemplate_V2 { event ApprovalForAll(address indexed owner, address indexed spender, bool approved); event TransferLockedByIndex(address indexed sender_address, address indexed destination_address, uint256 amount_transferred, uint256 source_stake_index, uint256 destination_stake_index); -} +} \ No newline at end of file diff --git a/src/hardhat/contracts/Staking/FraxUnifiedFarm_KyberSwapElastic.sol b/src/hardhat/contracts/Staking/FraxUnifiedFarm_KyberSwapElastic.sol index 0f76309f..79195225 100755 --- a/src/hardhat/contracts/Staking/FraxUnifiedFarm_KyberSwapElastic.sol +++ b/src/hardhat/contracts/Staking/FraxUnifiedFarm_KyberSwapElastic.sol @@ -275,7 +275,7 @@ contract FraxUnifiedFarm_KyberSwapElastic is FraxUnifiedFarmTemplate { } // Need to call to update the combined weights - updateRewardAndBalance(staker_address, false); + _updateRewardAndBalance(staker_address, true); } function _getStake(address staker_address, uint256 token_id) internal view returns (LockedNFT memory locked_nft, uint256 arr_idx) { @@ -401,22 +401,30 @@ contract FraxUnifiedFarm_KyberSwapElastic is FraxUnifiedFarmTemplate { // ------ WITHDRAWING ------ // Two different withdrawLocked functions are needed because of delegateCall and msg.sender issues (important for proxies) - function withdrawLocked(uint256 token_id, address destination_address) nonReentrant external returns (uint256) { + function withdrawLocked(uint256 token_id, address destination_address, bool claim_rewards) nonReentrant external returns (uint256) { require(withdrawalsPaused == false, "Withdrawals paused"); - return _withdrawLocked(msg.sender, destination_address, token_id); + return _withdrawLocked(msg.sender, destination_address, token_id, claim_rewards); } // No withdrawer == msg.sender check needed since this is only internally callable and the checks are done in the wrapper function _withdrawLocked( address staker_address, address destination_address, - uint256 token_id + uint256 token_id, + bool claim_rewards ) internal returns (uint256) { // Collect rewards first and then update the balances // Ignore the extra rewards (LP fees) here for KyberSwap Elastic NFTs when withdrawing // If it bugs out, the user's NFT could be permanently stuck in this farm // They can always just manually get the LP fees on Kyber's UI once their NFT is withdrawn - _getReward(staker_address, destination_address, false); + // Collect rewards first and then update the balances + // collectRewardsOnWithdrawalPaused to be used in an emergency situation if reward is overemitted or not available + // and the user can forfeit rewards to get their principal back. User can also specify it in withdrawLocked + if (claim_rewards || !collectRewardsOnWithdrawalPaused) _getReward(staker_address, destination_address, true); + else { + // Sync the rewards at least + _updateRewardAndBalance(staker_address, true); + } LockedNFT memory thisNFT; thisNFT.liquidity = 0; diff --git a/src/hardhat/contracts/Staking/FraxUnifiedFarm_PosRebase.sol b/src/hardhat/contracts/Staking/FraxUnifiedFarm_PosRebase.sol index 5f83aa78..d488b145 100755 --- a/src/hardhat/contracts/Staking/FraxUnifiedFarm_PosRebase.sol +++ b/src/hardhat/contracts/Staking/FraxUnifiedFarm_PosRebase.sol @@ -292,7 +292,7 @@ contract FraxUnifiedFarm_PosRebase is FraxUnifiedFarmTemplate { } // Need to call to update the combined weights - updateRewardAndBalance(msg.sender, false); + _updateRewardAndBalance(msg.sender, false); emit LockedAdditional(msg.sender, kek_id, addl_liq); } @@ -325,7 +325,7 @@ contract FraxUnifiedFarm_PosRebase is FraxUnifiedFarmTemplate { ); // Need to call to update the combined weights - updateRewardAndBalance(msg.sender, false); + _updateRewardAndBalance(msg.sender, false); emit LockedLonger(msg.sender, kek_id, new_secs, block.timestamp, new_ending_ts); } @@ -379,7 +379,7 @@ contract FraxUnifiedFarm_PosRebase is FraxUnifiedFarmTemplate { } // Need to call again to make sure everything is correct - updateRewardAndBalance(staker_address, false); + _updateRewardAndBalance(staker_address, true); emit StakeLocked(staker_address, liquidity, secs, kek_id, source_address); @@ -389,19 +389,26 @@ contract FraxUnifiedFarm_PosRebase is FraxUnifiedFarmTemplate { // ------ WITHDRAWING ------ // Two different withdrawLocked functions are needed because of delegateCall and msg.sender issues (important for proxies) - function withdrawLocked(bytes32 kek_id, address destination_address) nonReentrant external returns (uint256) { + function withdrawLocked(bytes32 kek_id, address destination_address, bool claim_rewards) nonReentrant external returns (uint256) { require(withdrawalsPaused == false, "Withdrawals paused"); - return _withdrawLocked(msg.sender, destination_address, kek_id); + return _withdrawLocked(msg.sender, destination_address, kek_id, claim_rewards); } // No withdrawer == msg.sender check needed since this is only internally callable and the checks are done in the wrapper function _withdrawLocked( address staker_address, address destination_address, - bytes32 kek_id + bytes32 kek_id, + bool claim_rewards ) internal returns (uint256) { // Collect rewards first and then update the balances - _getReward(staker_address, destination_address, true); + // collectRewardsOnWithdrawalPaused to be used in an emergency situation if reward is overemitted or not available + // and the user can forfeit rewards to get their principal back. User can also specify it in withdrawLocked + if (claim_rewards || !collectRewardsOnWithdrawalPaused) _getReward(staker_address, destination_address, true); + else { + // Sync the rewards at least + _updateRewardAndBalance(staker_address, true); + } // Get the stake and its index (LockedStake memory thisStake, uint256 theArrayIndex) = _getStake(staker_address, kek_id); @@ -431,7 +438,7 @@ contract FraxUnifiedFarm_PosRebase is FraxUnifiedFarmTemplate { delete lockedStakes[staker_address][theArrayIndex]; // Need to call again to make sure everything is correct - updateRewardAndBalance(staker_address, false); + _updateRewardAndBalance(staker_address, true); // REBASE: leave liquidity in the event tracking alone, not giveBackAmt emit WithdrawLocked(staker_address, liquidity, kek_id, destination_address); diff --git a/src/hardhat/contracts/Staking/FraxUnifiedFarm_UniV3.sol b/src/hardhat/contracts/Staking/FraxUnifiedFarm_UniV3.sol index 1c95fde7..5842b489 100755 --- a/src/hardhat/contracts/Staking/FraxUnifiedFarm_UniV3.sol +++ b/src/hardhat/contracts/Staking/FraxUnifiedFarm_UniV3.sol @@ -395,7 +395,7 @@ contract FraxUnifiedFarm_UniV3 is FraxUnifiedFarmTemplate { } // Need to call to update the combined weights - updateRewardAndBalance(msg.sender, false); + _updateRewardAndBalance(msg.sender, false); } // Two different stake functions are needed because of delegateCall and msg.sender issues (important for proxies) @@ -444,7 +444,7 @@ contract FraxUnifiedFarm_UniV3 is FraxUnifiedFarmTemplate { } // Need to call again to make sure everything is correct - updateRewardAndBalance(staker_address, false); + _updateRewardAndBalance(staker_address, true); emit LockNFT(staker_address, liquidity, token_id, secs, source_address); } @@ -452,19 +452,26 @@ contract FraxUnifiedFarm_UniV3 is FraxUnifiedFarmTemplate { // ------ WITHDRAWING ------ // Two different withdrawLocked functions are needed because of delegateCall and msg.sender issues (important for proxies) - function withdrawLocked(uint256 token_id, address destination_address) nonReentrant external returns (uint256) { + function withdrawLocked(uint256 token_id, address destination_address, bool claim_rewards) nonReentrant external returns (uint256) { require(withdrawalsPaused == false, "Withdrawals paused"); - return _withdrawLocked(msg.sender, destination_address, token_id); + return _withdrawLocked(msg.sender, destination_address, token_id, claim_rewards); } // No withdrawer == msg.sender check needed since this is only internally callable and the checks are done in the wrapper function _withdrawLocked( address staker_address, address destination_address, - uint256 token_id + uint256 token_id, + bool claim_rewards ) internal returns (uint256) { // Collect rewards first and then update the balances - _getReward(staker_address, destination_address, true); + // collectRewardsOnWithdrawalPaused to be used in an emergency situation if reward is overemitted or not available + // and the user can forfeit rewards to get their principal back. User can also specify it in withdrawLocked + if (claim_rewards || !collectRewardsOnWithdrawalPaused) _getReward(staker_address, destination_address, true); + else { + // Sync the rewards at least + _updateRewardAndBalance(staker_address, true); + } LockedNFT memory thisNFT; thisNFT.liquidity = 0; @@ -494,7 +501,7 @@ contract FraxUnifiedFarm_UniV3 is FraxUnifiedFarmTemplate { delete lockedNFTs[staker_address][theArrayIndex]; // Need to call again to make sure everything is correct - updateRewardAndBalance(staker_address, false); + _updateRewardAndBalance(staker_address, true); // Give the tokens to the destination_address stakingTokenNFT.safeTransferFrom(address(this), destination_address, token_id); diff --git a/src/hardhat/contracts/Staking/StakingRewardsDualV5.sol b/src/hardhat/contracts/Staking/StakingRewardsDualV5.sol index 3e6ed9a3..09f5c7d7 100755 --- a/src/hardhat/contracts/Staking/StakingRewardsDualV5.sol +++ b/src/hardhat/contracts/Staking/StakingRewardsDualV5.sol @@ -446,7 +446,7 @@ contract StakingRewardsDualV5 is Owned, ReentrancyGuard { _locked_liquidity[staker_address] = _locked_liquidity[staker_address].add(liquidity); // Need to call to update the combined weights - _updateRewardAndBalance(staker_address, false); + _updateRewardAndBalance(staker_address, true); emit StakeLocked(staker_address, liquidity, secs, kek_id, source_address); } diff --git a/src/hardhat/contracts/Staking/StakingRewardsMultiGauge.sol b/src/hardhat/contracts/Staking/StakingRewardsMultiGauge.sol index bd6bf390..56dcc654 100755 --- a/src/hardhat/contracts/Staking/StakingRewardsMultiGauge.sol +++ b/src/hardhat/contracts/Staking/StakingRewardsMultiGauge.sol @@ -626,7 +626,7 @@ contract StakingRewardsMultiGauge is Owned, ReentrancyGuard { _locked_liquidity[staker_address] = _locked_liquidity[staker_address].add(liquidity); // Need to call to update the combined weights - _updateRewardAndBalance(staker_address, false); + _updateRewardAndBalance(staker_address, true); // Needed for edge case if the staker only claims once, and after the lock expired if (lastRewardClaimTime[staker_address] == 0) lastRewardClaimTime[staker_address] = block.timestamp; diff --git a/src/hardhat/contracts/Staking/Variants/FraxCCFarmV3_ArbiSaddleL2D4.sol b/src/hardhat/contracts/Staking/Variants/FraxCCFarmV3_ArbiSaddleL2D4.sol index 3cb1afe4..f9833892 100755 --- a/src/hardhat/contracts/Staking/Variants/FraxCCFarmV3_ArbiSaddleL2D4.sol +++ b/src/hardhat/contracts/Staking/Variants/FraxCCFarmV3_ArbiSaddleL2D4.sol @@ -1,9 +1,9 @@ // SPDX-License-Identifier: GPL-2.0-or-later pragma solidity >=0.8.0; -import "../FraxCrossChainFarmV3.sol"; +import "../FraxCrossChainFarmV3_ERC20.sol"; -contract FraxCCFarmV3_ArbiSaddleL2D4 is FraxCrossChainFarmV3 { +contract FraxCCFarmV3_ArbiSaddleL2D4 is FraxCrossChainFarmV3_ERC20 { constructor ( address _owner, address _rewardsToken0, @@ -13,6 +13,6 @@ contract FraxCCFarmV3_ArbiSaddleL2D4 is FraxCrossChainFarmV3 { address _timelock_address, address _rewarder_address ) - FraxCrossChainFarmV3(_owner, _rewardsToken0, _rewardsToken1, _stakingToken, _frax_address, _timelock_address, _rewarder_address) + FraxCrossChainFarmV3_ERC20(_owner, _rewardsToken0, _rewardsToken1, _stakingToken, _frax_address, _timelock_address, _rewarder_address) {} } diff --git a/src/hardhat/contracts/Staking/Variants/FraxUnifiedFarm_ERC20_Convex_FRAXBP_Stable.sol b/src/hardhat/contracts/Staking/Variants/FraxUnifiedFarm_ERC20_Convex_FRAXBP_Stable.sol index 8b2876e2..fb0293ed 100755 --- a/src/hardhat/contracts/Staking/Variants/FraxUnifiedFarm_ERC20_Convex_FRAXBP_Stable.sol +++ b/src/hardhat/contracts/Staking/Variants/FraxUnifiedFarm_ERC20_Convex_FRAXBP_Stable.sol @@ -22,28 +22,28 @@ contract FraxUnifiedFarm_ERC20_Convex_FRAXBP_Stable is FraxUnifiedFarm_ERC20 { { // COMMENTED OUT SO COMPILER DOESNT COMPLAIN. UNCOMMENT WHEN DEPLOYING - // Convex stkcvxBUSDBP and other metaFRAXBPs, where the token is also the pool (Convex Stable/FRAXBP) - stakingToken = IConvexStakingWrapperFrax(_stakingToken); - curveToken = I2poolToken(stakingToken.curveToken()); - curvePool = I2pool(address(curveToken)); - frax_is_token0 = false; // Irrelevant here, as token 0 will be FRAXBP + // // Convex stkcvxBUSDBP and other metaFRAXBPs, where the token is also the pool (Convex Stable/FRAXBP) + // stakingToken = IConvexStakingWrapperFrax(_stakingToken); + // curveToken = I2poolToken(stakingToken.curveToken()); + // curvePool = I2pool(address(curveToken)); + // frax_is_token0 = false; // Irrelevant here, as token 0 will be FRAXBP } function fraxPerLPToken() public view override returns (uint256) { // COMMENTED OUT SO COMPILER DOESNT COMPLAIN. UNCOMMENT WHEN DEPLOYING - // Get the amount of FRAX 'inside' of the lp tokens - uint256 frax_per_lp_token; + // // Get the amount of FRAX 'inside' of the lp tokens + // uint256 frax_per_lp_token; - // Convex Stable/FRAXBP - // ============================================ - { - // Half of the LP is FRAXBP. Half of that should be FRAX. - // Using 0.25 * virtual price for gas savings - frax_per_lp_token = curvePool.get_virtual_price() / 4; - } + // // Convex Stable/FRAXBP + // // ============================================ + // { + // // Half of the LP is FRAXBP. Half of that should be FRAX. + // // Using 0.25 * virtual price for gas savings + // frax_per_lp_token = curvePool.get_virtual_price() / 4; + // } - return frax_per_lp_token; + // return frax_per_lp_token; } } diff --git a/src/hardhat/contracts/Staking/Variants/FraxUnifiedFarm_ERC20_Convex_FRAXBP_Volatile.sol b/src/hardhat/contracts/Staking/Variants/FraxUnifiedFarm_ERC20_Convex_FRAXBP_Volatile.sol index 395847fb..69c6462f 100755 --- a/src/hardhat/contracts/Staking/Variants/FraxUnifiedFarm_ERC20_Convex_FRAXBP_Volatile.sol +++ b/src/hardhat/contracts/Staking/Variants/FraxUnifiedFarm_ERC20_Convex_FRAXBP_Volatile.sol @@ -22,28 +22,28 @@ contract FraxUnifiedFarm_ERC20_Convex_FRAXBP_Volatile is FraxUnifiedFarm_ERC20 { { // COMMENTED OUT SO COMPILER DOESNT COMPLAIN. UNCOMMENT WHEN DEPLOYING - // Convex stkcvxFPIFRAX and stkcvxFRAXBP. Also Volatile/FRAXBP - stakingToken = IConvexStakingWrapperFrax(_stakingToken); - curveToken = I2poolToken(stakingToken.curveToken()); - curvePool = I2pool(curveToken.minter()); - address token0 = curvePool.coins(0); - frax_is_token0 = (token0 == frax_address); + // // Convex stkcvxFPIFRAX and stkcvxFRAXBP. Also Volatile/FRAXBP + // stakingToken = IConvexStakingWrapperFrax(_stakingToken); + // curveToken = I2poolToken(stakingToken.curveToken()); + // curvePool = I2pool(curveToken.minter()); + // address token0 = curvePool.coins(0); + // frax_is_token0 = (token0 == frax_address); } function fraxPerLPToken() public view override returns (uint256) { // COMMENTED OUT SO COMPILER DOESNT COMPLAIN. UNCOMMENT WHEN DEPLOYING - // Get the amount of FRAX 'inside' of the lp tokens - uint256 frax_per_lp_token; + // // Get the amount of FRAX 'inside' of the lp tokens + // uint256 frax_per_lp_token; - // Convex Volatile/FRAXBP - // ============================================ - { - // Half of the LP is FRAXBP. Half of that should be FRAX. - // Using 0.25 * lp price for gas savings - frax_per_lp_token = (curvePool.lp_price() * (1e18)) / (4 * curvePool.price_oracle()); - } + // // Convex Volatile/FRAXBP + // // ============================================ + // { + // // Half of the LP is FRAXBP. Half of that should be FRAX. + // // Using 0.25 * lp price for gas savings + // frax_per_lp_token = (curvePool.lp_price() * (1e18)) / (4 * curvePool.price_oracle()); + // } - return frax_per_lp_token; + // return frax_per_lp_token; } } diff --git a/src/hardhat/contracts/Staking/Variants/FraxUnifiedFarm_ERC20_Convex_frxETH_V2.sol b/src/hardhat/contracts/Staking/Variants/FraxUnifiedFarm_ERC20_Convex_frxETH_V2.sol index 1b69c5c3..8e324d65 100755 --- a/src/hardhat/contracts/Staking/Variants/FraxUnifiedFarm_ERC20_Convex_frxETH_V2.sol +++ b/src/hardhat/contracts/Staking/Variants/FraxUnifiedFarm_ERC20_Convex_frxETH_V2.sol @@ -13,6 +13,9 @@ import "../../Oracle/AggregatorV3Interface.sol"; contract FraxUnifiedFarm_ERC20_Convex_frxETH_V2 is FraxUnifiedFarm_ERC20_V2 { AggregatorV3Interface internal priceFeedETHUSD = AggregatorV3Interface(0x5f4eC3Df9cbd43714FE2740f5E3616155c5b8419); + /// Added this as an override to the I2Pool version in FraxFarmERC20 to fix compiler warnings + // ICurvefrxETHETHPool public immutable curvePool; + constructor ( address _owner, address[] memory _rewardTokens, diff --git a/src/hardhat/contracts/Staking/Variants/FraxUnifiedFarm_ERC20_FraxswapV2.sol b/src/hardhat/contracts/Staking/Variants/FraxUnifiedFarm_ERC20_FraxswapV2.sol index dc3a7317..daa17914 100755 --- a/src/hardhat/contracts/Staking/Variants/FraxUnifiedFarm_ERC20_FraxswapV2.sol +++ b/src/hardhat/contracts/Staking/Variants/FraxUnifiedFarm_ERC20_FraxswapV2.sol @@ -19,31 +19,31 @@ contract FraxUnifiedFarm_ERC20_FraxswapV2 is FraxUnifiedFarm_ERC20 { { // COMMENTED OUT SO COMPILER DOESNT COMPLAIN. UNCOMMENT WHEN DEPLOYING - // // Fraxswap - // stakingToken = IFraxswapPair(_stakingToken); - // address token0 = stakingToken.token0(); - // frax_is_token0 = (token0 == frax_address); + // Fraxswap + stakingToken = IFraxswapPair(_stakingToken); + address token0 = stakingToken.token0(); + frax_is_token0 = (token0 == frax_address); } function fraxPerLPToken() public view override returns (uint256) { // COMMENTED OUT SO COMPILER DOESNT COMPLAIN. UNCOMMENT WHEN DEPLOYING - // // Get the amount of FRAX 'inside' of the lp tokens - // uint256 frax_per_lp_token; + // Get the amount of FRAX 'inside' of the lp tokens + uint256 frax_per_lp_token; - // // Fraxswap - // // ============================================ - // { - // uint256 total_frax_reserves; - // // Technically getReserveAfterTwamm is more accurate, but if the TWAMM becomes paused, it will eventually gas out - // // (uint256 _reserve0, uint256 _reserve1, , ,) = (stakingToken.getReserveAfterTwamm(block.timestamp)); - // (uint256 _reserve0, uint256 _reserve1, ) = (stakingToken.getReserves()); - // if (frax_is_token0) total_frax_reserves = _reserve0; - // else total_frax_reserves = _reserve1; + // Fraxswap + // ============================================ + { + uint256 total_frax_reserves; + // Technically getReserveAfterTwamm is more accurate, but if the TWAMM becomes paused, it will eventually gas out + // (uint256 _reserve0, uint256 _reserve1, , ,) = (stakingToken.getReserveAfterTwamm(block.timestamp)); + (uint256 _reserve0, uint256 _reserve1, ) = (stakingToken.getReserves()); + if (frax_is_token0) total_frax_reserves = _reserve0; + else total_frax_reserves = _reserve1; - // frax_per_lp_token = (total_frax_reserves * 1e18) / stakingToken.totalSupply(); - // } + frax_per_lp_token = (total_frax_reserves * 1e18) / stakingToken.totalSupply(); + } - // return frax_per_lp_token; + return frax_per_lp_token; } } diff --git a/src/hardhat/contracts/Utils/ReentrancyGuardV2.sol b/src/hardhat/contracts/Utils/ReentrancyGuardV2.sol old mode 100755 new mode 100644 diff --git a/src/hardhat/contracts/mocks/MockConvexRegistry.sol b/src/hardhat/contracts/mocks/MockConvexRegistry.sol new file mode 100644 index 00000000..4137b123 --- /dev/null +++ b/src/hardhat/contracts/mocks/MockConvexRegistry.sol @@ -0,0 +1,6 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.10; + +contract MockConvexRegistry { + // +} \ No newline at end of file diff --git a/src/hardhat/contracts/mocks/MockConvexVault.sol b/src/hardhat/contracts/mocks/MockConvexVault.sol new file mode 100644 index 00000000..6a0f7b66 --- /dev/null +++ b/src/hardhat/contracts/mocks/MockConvexVault.sol @@ -0,0 +1,6 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.10; + +contract MockConvexVault { + // +} \ No newline at end of file diff --git a/src/hardhat/old_contracts/Staking/FraxUniV3Farm_Volatile.sol b/src/hardhat/old_contracts/Staking/FraxUniV3Farm_Volatile.sol index de14fae3..62a1c970 100755 --- a/src/hardhat/old_contracts/Staking/FraxUniV3Farm_Volatile.sol +++ b/src/hardhat/old_contracts/Staking/FraxUniV3Farm_Volatile.sol @@ -522,7 +522,7 @@ contract FraxUniV3Farm_Volatile is Owned, ReentrancyGuard { _locked_liquidity[staker_address] = _locked_liquidity[staker_address].add(liquidity); // Need to call again to make sure everything is correct - _updateRewardAndBalance(staker_address, false); + _updateRewardAndBalance(staker_address, true); emit LockNFT(staker_address, liquidity, token_id, secs, source_address); } @@ -580,7 +580,7 @@ contract FraxUniV3Farm_Volatile is Owned, ReentrancyGuard { delete lockedNFTs[staker_address][theArrayIndex]; // Need to call again to make sure everything is correct - _updateRewardAndBalance(staker_address, false); + _updateRewardAndBalance(staker_address, true); // Give the tokens to the destination_address stakingTokenNFT.safeTransferFrom(address(this), destination_address, token_id); diff --git a/src/hardhat/old_contracts/__BSC/Staking/FraxFarmBSC_Dual_V5.sol b/src/hardhat/old_contracts/__BSC/Staking/FraxFarmBSC_Dual_V5.sol index a0fd68f9..337b88d9 100755 --- a/src/hardhat/old_contracts/__BSC/Staking/FraxFarmBSC_Dual_V5.sol +++ b/src/hardhat/old_contracts/__BSC/Staking/FraxFarmBSC_Dual_V5.sol @@ -357,7 +357,7 @@ contract FraxFarmBSC_Dual_V5 is Owned, ReentrancyGuard { _locked_liquidity[staker_address] = _locked_liquidity[staker_address].add(liquidity); // Need to call to update the combined weights - _updateRewardAndBalance(staker_address, false); + _updateRewardAndBalance(staker_address, true); emit StakeLocked(staker_address, liquidity, secs, kek_id, source_address); } diff --git a/src/hardhat/test/FraxCrossChainFarmV2-Tests.js b/src/hardhat/test/FraxCrossChainFarmV2-Tests.js deleted file mode 100644 index 48849cdd..00000000 --- a/src/hardhat/test/FraxCrossChainFarmV2-Tests.js +++ /dev/null @@ -1,901 +0,0 @@ -const path = require('path'); -const envPath = path.join(__dirname, '../../.env'); -require('dotenv').config({ path: envPath }); - -const BigNumber = require('bignumber.js'); -const util = require('util'); -const chalk = require('chalk'); -const Contract = require('web3-eth-contract'); -const { expectRevert, time } = require('@openzeppelin/test-helpers'); - -const constants = require(path.join(__dirname, '../../../dist/types/constants')); -const utilities = require(path.join(__dirname, '../../../dist/misc/utilities')); - -// Set provider for all later instances to use -Contract.setProvider('http://127.0.0.1:7545'); - -global.artifacts = artifacts; -global.web3 = web3; - -const hre = require("hardhat"); - -// FRAX core -const CrossChainCanonicalFRAX = artifacts.require("ERC20/__CROSSCHAIN/CrossChainCanonicalFRAX"); -const CrossChainCanonicalFXS = artifacts.require("ERC20/__CROSSCHAIN/CrossChainCanonicalFXS"); -const ERC20 = artifacts.require("contracts/ERC20/ERC20.sol:ERC20"); - -// LP Pairs -const I2pool = artifacts.require("Misc_AMOs/curve/I2pool"); -const ISaddleLPToken = artifacts.require("Misc_AMOs/saddle/ISaddleLPToken"); - -// Staking contracts -const FraxCCFarmV2_ArbiCurveVSTFRAX = artifacts.require("Staking/Variants/FraxCCFarmV2_ArbiCurveVSTFRAX"); -const FraxCCFarmV2_SaddleArbUSDv2 = artifacts.require("Staking/Variants/FraxCCFarmV2_SaddleArbUSDv2"); - -const BIG6 = new BigNumber("1e6"); -const BIG18 = new BigNumber("1e18"); -const TIMELOCK_DELAY = 86400 * 2; // 2 days -const DUMP_ADDRESS = "0x6666666666666666666666666666666666666666"; -const METAMASK_ADDRESS = "0x6666666666666666666666666666666666666666"; - -const REWARDS_DURATION = 7 * 86400; // 7 days - -contract('FraxCrossChainFarmV2-Tests', async (accounts) => { - let CONTRACT_ADDRESSES = constants.CONTRACT_ADDRESSES; - let CHAIN_ADDRESSES = CONTRACT_ADDRESSES.arbitrum; - - // Constants - let ORIGINAL_FRAX_ONE_ADDRESS; - let COLLATERAL_FRAX_AND_FXS_OWNER; - let ORACLE_ADMIN; - let POOL_CREATOR; - let TIMELOCK_ADMIN; - let GOVERNOR_GUARDIAN_ADDRESS; - let STAKING_OWNER; - let STAKING_REWARDS_DISTRIBUTOR; - let INVESTOR_CUSTODIAN_ADDRESS; - let MIGRATOR_ADDRESS; - const ADDRESS_WITH_FXS = '0xbCa9a9Aab13a68d311160D4f997E3D783Da865Fb'; - const ADDRESS_WITH_REW1_TKN = '0xbCa9a9Aab13a68d311160D4f997E3D783Da865Fb'; - const ADDRESS_WITH_LP_TOKENS = '0xbCa9a9Aab13a68d311160D4f997E3D783Da865Fb'; - - // Initialize core contract instances - let canFRAX_instance; - let canFXS_instance; - - // Initialize reward token instance - let rew1_tkn_instance; - - // Initialize pair contracts - let lp_tkn_instance; - - // Initialize staking instances - let staking_instance; - - beforeEach(async() => { - - await hre.network.provider.request({ - method: "hardhat_impersonateAccount", - params: [process.env.FRAX_ONE_ADDRESS] - }); - - // Constants - ORIGINAL_FRAX_ONE_ADDRESS = process.env.FRAX_ONE_ADDRESS; - DEPLOYER_ADDRESS = accounts[0]; - COLLATERAL_FRAX_AND_FXS_OWNER = accounts[1]; - ORACLE_ADMIN = accounts[2]; - POOL_CREATOR = accounts[3]; - TIMELOCK_ADMIN = accounts[4]; - GOVERNOR_GUARDIAN_ADDRESS = accounts[5]; - STAKING_OWNER = accounts[6]; - STAKING_REWARDS_DISTRIBUTOR = accounts[7]; - INVESTOR_CUSTODIAN_ADDRESS = accounts[8]; - MIGRATOR_ADDRESS = accounts[10]; - - // Fill core contract instances - canFRAX_instance = await CrossChainCanonicalFRAX.deployed(); - canFXS_instance = await CrossChainCanonicalFXS.deployed(); - - // Get instances of the Curve pair - lp_tkn_instance = await I2pool.at(CHAIN_ADDRESSES.pair_tokens["Curve VSTFRAX-f"]); - // lp_tkn_instance = await ISaddleLPToken.at(CHAIN_ADDRESSES.bearer_tokens.saddleArbUSDv2); - - // Fill the staking rewards instances - staking_instance = await FraxCCFarmV2_ArbiCurveVSTFRAX.deployed(); - - // Fill reward token instance - const rew1_address = await staking_instance.rewardsToken1.call(); - rew1_tkn_instance = await ERC20.at(rew1_address); - }); - - afterEach(async() => { - await hre.network.provider.request({ - method: "hardhat_stopImpersonatingAccount", - params: [process.env.FRAX_ONE_ADDRESS] - }); - }) - - - it('Initialization related', async () => { - console.log("=========================Initialization=========================") - - console.log("------------------------------------------------"); - console.log("Seed the staking contract with FXS and give COLLATERAL_FRAX_AND_FXS_OWNER some FXS"); - await hre.network.provider.request({ - method: "hardhat_impersonateAccount", - params: [ADDRESS_WITH_FXS] - }); - - await canFXS_instance.transfer(staking_instance.address, new BigNumber("100e18"), { from: ADDRESS_WITH_FXS }); - await canFXS_instance.transfer(COLLATERAL_FRAX_AND_FXS_OWNER, new BigNumber("1000e18"), { from: ADDRESS_WITH_FXS }); - - await hre.network.provider.request({ - method: "hardhat_stopImpersonatingAccount", - params: [ADDRESS_WITH_FXS] - }); - - console.log("------------------------------------------------"); - console.log("Seed the staking contract with REW1 tokens"); - await hre.network.provider.request({ - method: "hardhat_impersonateAccount", - params: [ADDRESS_WITH_REW1_TKN] - }); - - await rew1_tkn_instance.transfer(staking_instance.address, new BigNumber("10e18"), { from: ADDRESS_WITH_REW1_TKN }); - - await hre.network.provider.request({ - method: "hardhat_stopImpersonatingAccount", - params: [ADDRESS_WITH_REW1_TKN] - }); - - console.log("------------------------------------------------"); - console.log("Give LPs to test users"); - await hre.network.provider.request({ - method: "hardhat_impersonateAccount", - params: [ADDRESS_WITH_LP_TOKENS] - }); - - await lp_tkn_instance.transfer(accounts[1], new BigNumber("30e18"), { from: ADDRESS_WITH_LP_TOKENS }); - await lp_tkn_instance.transfer(accounts[9], new BigNumber("30e18"), { from: ADDRESS_WITH_LP_TOKENS }); - - await hre.network.provider.request({ - method: "hardhat_stopImpersonatingAccount", - params: [ADDRESS_WITH_LP_TOKENS] - }); - - - // Add a migrator address - await staking_instance.addMigrator(MIGRATOR_ADDRESS, { from: STAKING_OWNER }); - }); - - it('Locked stakes', async () => { - console.log(chalk.hex("#ff8b3d").bold("====================================================================")); - console.log(chalk.hex("#ff8b3d").bold("TRY TESTS WITH LOCKED STAKES.")); - console.log(chalk.hex("#ff8b3d").bold("====================================================================")); - - // Get FXS balances before everything starts - const fxs_bal_acc_1_time0 = new BigNumber(await canFXS_instance.balanceOf(COLLATERAL_FRAX_AND_FXS_OWNER)).div(BIG18).toNumber(); - const fxs_bal_acc_9_time0 = new BigNumber(await canFXS_instance.balanceOf(accounts[9])).div(BIG18).toNumber(); - - // Print balances - console.log("Farm FXS balance:", new BigNumber(await canFXS_instance.balanceOf(staking_instance.address)).div(BIG18).toNumber()); - console.log("Farm FXS owed:", new BigNumber(await staking_instance.ttlRew0Owed()).div(BIG18).toNumber()); - console.log("Farm FXS paid:", new BigNumber(await staking_instance.ttlRew0Paid()).div(BIG18).toNumber()); - console.log("Farm REW1 balance:", new BigNumber(await rew1_tkn_instance.balanceOf(staking_instance.address)).div(BIG18).toNumber()); - console.log("Farm REW1 owed:", new BigNumber(await staking_instance.ttlRew1Owed()).div(BIG18).toNumber()); - console.log("Farm REW1 paid:", new BigNumber(await staking_instance.ttlRew1Paid()).div(BIG18).toNumber()); - - await utilities.printCalcCurCombinedWeight(staking_instance, COLLATERAL_FRAX_AND_FXS_OWNER); - await utilities.printCalcCurCombinedWeight(staking_instance, accounts[9]); - - // Need to approve first so the staking can use transfer - const uni_pool_locked_1 = new BigNumber("75e17"); - const uni_pool_locked_1_sum = new BigNumber("10e18"); - const uni_pool_locked_9 = new BigNumber("25e17"); - await lp_tkn_instance.approve(staking_instance.address, uni_pool_locked_1_sum, { from: COLLATERAL_FRAX_AND_FXS_OWNER }); - await lp_tkn_instance.approve(staking_instance.address, uni_pool_locked_9, { from: accounts[9] }); - - // // Note the FRAX amounts before - // const frax_before_1_locked = new BigNumber(await canFRAX_instance.balanceOf.call(COLLATERAL_FRAX_AND_FXS_OWNER)).div(BIG18); - // const frax_before_9_locked = new BigNumber(await canFRAX_instance.balanceOf.call(accounts[9])).div(BIG18); - // console.log("FRAX_USDC Uniswap Liquidity Tokens BEFORE [1]: ", frax_before_1_locked.toString()); - // console.log("FRAX_USDC Uniswap Liquidity Tokens BEFORE [9]: ", frax_before_9_locked.toString()); - - console.log("Try to stake before initialization [SHOULD FAIL]"); - await expectRevert( - staking_instance.stakeLocked(uni_pool_locked_1, 6.95 * 86400, { from: COLLATERAL_FRAX_AND_FXS_OWNER }), - "Contract not initialized" - ); - - console.log("Initialize Staking Contract"); - await staking_instance.initializeDefault({ from: STAKING_OWNER }); - - // Stake Locked - // account[1] - await staking_instance.stakeLocked(uni_pool_locked_1, 6.95 * 86400, { from: COLLATERAL_FRAX_AND_FXS_OWNER }); // 7 days - await staking_instance.stakeLocked(new BigNumber ("25e17"), 548 * 86400, { from: COLLATERAL_FRAX_AND_FXS_OWNER }); // 270 days - - // account[9] - await staking_instance.stakeLocked(uni_pool_locked_9, 27.95 * 86400, { from: accounts[9] }); - await time.advanceBlock(); - - // Show the stake structs - const locked_stake_structs_1_0 = await staking_instance.lockedStakesOf.call(COLLATERAL_FRAX_AND_FXS_OWNER); - const locked_stake_structs_9_0 = await staking_instance.lockedStakesOf.call(accounts[9]); - console.log("LOCKED STAKES [1]: ", locked_stake_structs_1_0); - console.log("LOCKED STAKES [9]: ", locked_stake_structs_9_0); - - // Note the UNI POOL and FXS amount after staking - const regular_balance_1 = new BigNumber(await staking_instance.lockedLiquidityOf.call(COLLATERAL_FRAX_AND_FXS_OWNER)).div(BIG18); - const boosted_balance_1 = new BigNumber(await staking_instance.combinedWeightOf.call(COLLATERAL_FRAX_AND_FXS_OWNER)).div(BIG18); - const locked_balance_1 = new BigNumber(await staking_instance.lockedLiquidityOf.call(COLLATERAL_FRAX_AND_FXS_OWNER)).div(BIG18); - const regular_balance_9 = new BigNumber(await staking_instance.lockedLiquidityOf.call(accounts[9])).div(BIG18); - const boosted_balance_9 = new BigNumber(await staking_instance.combinedWeightOf.call(accounts[9])).div(BIG18); - const locked_balance_9 = new BigNumber(await staking_instance.lockedLiquidityOf.call(accounts[9])).div(BIG18); - console.log("LOCKED LIQUIDITY [1]: ", regular_balance_1.toString()); - console.log("COMBINED WEIGHT [1]: ", boosted_balance_1.toString()); - console.log("---- LOCKED [1]: ", locked_balance_1.toString()); - console.log("LOCKED LIQUIDITY [9]: ", regular_balance_9.toString()); - console.log("COMBINED WEIGHT [9]: ", boosted_balance_9.toString()); - console.log("---- LOCKED [9]: ", locked_balance_9.toString()); - - console.log("TRY AN EARLY WITHDRAWAL (SHOULD FAIL)"); - await expectRevert.unspecified(staking_instance.withdrawLocked(locked_stake_structs_1_0[0].kek_id, { from: COLLATERAL_FRAX_AND_FXS_OWNER })); - await expectRevert.unspecified(staking_instance.withdrawLocked(locked_stake_structs_9_0[0].kek_id, { from: accounts[9] })); - await time.advanceBlock(); - - await utilities.printCalcCurCombinedWeight(staking_instance, COLLATERAL_FRAX_AND_FXS_OWNER); - await utilities.printCalcCurCombinedWeight(staking_instance, accounts[9]); - - const user_min_vefxs_for_max_boost_1_0 = new BigNumber(await staking_instance.minVeFXSForMaxBoost.call(COLLATERAL_FRAX_AND_FXS_OWNER)).div(BIG18); - const user_min_vefxs_for_max_boost_9_0 = new BigNumber(await staking_instance.minVeFXSForMaxBoost.call(accounts[9])).div(BIG18); - console.log("user_min_vefxs_for_max_boost_1_0: ", user_min_vefxs_for_max_boost_1_0.toString()); - console.log("user_min_vefxs_for_max_boost_9_0: ", user_min_vefxs_for_max_boost_9_0.toString()); - - const _total_liquidity_locked_0 = new BigNumber(await staking_instance.totalLiquidityLocked.call()).div(BIG18); - const _total_combined_weight_0 = new BigNumber(await staking_instance.totalCombinedWeight.call()).div(BIG18); - const frax_per_lp_token_0 = new BigNumber(await staking_instance.fraxPerLPToken.call()).div(BIG18); - console.log("_total_liquidity_locked GLOBAL: ", _total_liquidity_locked_0.toString()); - console.log("_total_combined_weight GLOBAL: ", _total_combined_weight_0.toString()); - console.log("frax_per_lp_token_0 GLOBAL: ", frax_per_lp_token_0.toString()); - - - console.log(chalk.hex("#ff8b3d")("====================================================================")); - console.log(chalk.hex("#ff8b3d")("MID-WEEK-SYNC AND [9] CLAIMS")); - console.log(chalk.hex("#ff8b3d")("====================================================================")); - await time.increase(2 * 86400); - await time.advanceBlock(); - - // Sync - await staking_instance.sync({ from: COLLATERAL_FRAX_AND_FXS_OWNER }); - - // Print balances - console.log(chalk.yellow("--- Before claim ---")); - console.log("Farm FXS balance:", new BigNumber(await canFXS_instance.balanceOf(staking_instance.address)).div(BIG18).toNumber()); - console.log("Farm FXS owed:", new BigNumber(await staking_instance.ttlRew0Owed()).div(BIG18).toNumber()); - console.log("Farm FXS paid:", new BigNumber(await staking_instance.ttlRew0Paid()).div(BIG18).toNumber()); - console.log("Farm REW1 balance:", new BigNumber(await rew1_tkn_instance.balanceOf(staking_instance.address)).div(BIG18).toNumber()); - console.log("Farm REW1 owed:", new BigNumber(await staking_instance.ttlRew1Owed()).div(BIG18).toNumber()); - console.log("Farm REW1 paid:", new BigNumber(await staking_instance.ttlRew1Paid()).div(BIG18).toNumber()); - - // [9] claims - console.log(chalk.yellow("--- Claim ---")); - const fxs_bal_9_mid0_before = new BigNumber(await canFXS_instance.balanceOf(accounts[9])); - const token1_bal_9_mid0_before = new BigNumber(await rew1_tkn_instance.balanceOf(accounts[9])); - await staking_instance.getReward({ from: accounts[9] }); - const fxs_bal_9_mid0_after = new BigNumber(await canFXS_instance.balanceOf(accounts[9])); - const token1_bal_9_mid0_after = new BigNumber(await rew1_tkn_instance.balanceOf(accounts[9])); - const staking_earned_9_mid0_fxs = (fxs_bal_9_mid0_after).minus(fxs_bal_9_mid0_before); - const staking_earned_9_mid0_token1 = (token1_bal_9_mid0_after).minus(token1_bal_9_mid0_before); - console.log("accounts[9] mid-week part 0 earnings [FXS]: ", (staking_earned_9_mid0_fxs).div(BIG18).toNumber()); - console.log("accounts[9] mid-week part 0 earnings [REW1]: ", staking_earned_9_mid0_token1.div(BIG18).toNumber()); - - // Print balances - console.log(chalk.yellow("--- After claim ---")); - console.log("Farm FXS balance:", new BigNumber(await canFXS_instance.balanceOf(staking_instance.address)).div(BIG18).toNumber()); - console.log("Farm FXS owed:", new BigNumber(await staking_instance.ttlRew0Owed()).div(BIG18).toNumber()); - console.log("Farm FXS paid:", new BigNumber(await staking_instance.ttlRew0Paid()).div(BIG18).toNumber()); - console.log("Farm REW1 balance:", new BigNumber(await rew1_tkn_instance.balanceOf(staking_instance.address)).div(BIG18).toNumber()); - console.log("Farm REW1 owed:", new BigNumber(await staking_instance.ttlRew1Owed()).div(BIG18).toNumber()); - console.log("Farm REW1 paid:", new BigNumber(await staking_instance.ttlRew1Paid()).div(BIG18).toNumber()); - - console.log(chalk.hex("#ff8b3d")("====================================================================")); - console.log(chalk.hex("#ff8b3d")("MID-WEEK-SYNC AGAIN AND [9] CLAIMS AGAIN")); - console.log(chalk.hex("#ff8b3d")("====================================================================")); - await time.increase(2 * 86400); - await time.advanceBlock(); - - // Sync - await staking_instance.sync({ from: COLLATERAL_FRAX_AND_FXS_OWNER }); - - // Print balances - console.log(chalk.yellow("--- Before claim ---")); - console.log("Farm FXS balance:", new BigNumber(await canFXS_instance.balanceOf(staking_instance.address)).div(BIG18).toNumber()); - console.log("Farm FXS owed:", new BigNumber(await staking_instance.ttlRew0Owed()).div(BIG18).toNumber()); - console.log("Farm FXS paid:", new BigNumber(await staking_instance.ttlRew0Paid()).div(BIG18).toNumber()); - console.log("Farm REW1 balance:", new BigNumber(await rew1_tkn_instance.balanceOf(staking_instance.address)).div(BIG18).toNumber()); - console.log("Farm REW1 owed:", new BigNumber(await staking_instance.ttlRew1Owed()).div(BIG18).toNumber()); - console.log("Farm REW1 paid:", new BigNumber(await staking_instance.ttlRew1Paid()).div(BIG18).toNumber()); - - // [9] claims - console.log(chalk.yellow("--- Claim ---")); - const fxs_bal_9_mid1_before = new BigNumber(await canFXS_instance.balanceOf(accounts[9])); - const token1_bal_9_mid1_before = new BigNumber(await rew1_tkn_instance.balanceOf(accounts[9])); - await staking_instance.getReward({ from: accounts[9] }); - const fxs_bal_9_mid1_after = new BigNumber(await canFXS_instance.balanceOf(accounts[9])); - const token1_bal_9_mid1_after = new BigNumber(await rew1_tkn_instance.balanceOf(accounts[9])); - const staking_earned_9_mid1_fxs = (fxs_bal_9_mid1_after).minus(fxs_bal_9_mid1_before); - const staking_earned_9_mid1_token1 = (token1_bal_9_mid1_after).minus(token1_bal_9_mid1_before); - console.log("accounts[9] mid-week part 1 earnings [FXS]: ", (staking_earned_9_mid1_fxs).div(BIG18).toNumber()); - console.log("accounts[9] mid-week part 1 earnings [REW1]: ", staking_earned_9_mid1_token1.div(BIG18).toNumber()); - - // Print balances - console.log(chalk.yellow("--- After claim ---")); - console.log("Farm FXS balance:", new BigNumber(await canFXS_instance.balanceOf(staking_instance.address)).div(BIG18).toNumber()); - console.log("Farm FXS owed:", new BigNumber(await staking_instance.ttlRew0Owed()).div(BIG18).toNumber()); - console.log("Farm FXS paid:", new BigNumber(await staking_instance.ttlRew0Paid()).div(BIG18).toNumber()); - console.log("Farm REW1 balance:", new BigNumber(await rew1_tkn_instance.balanceOf(staking_instance.address)).div(BIG18).toNumber()); - console.log("Farm REW1 owed:", new BigNumber(await staking_instance.ttlRew1Owed()).div(BIG18).toNumber()); - console.log("Farm REW1 paid:", new BigNumber(await staking_instance.ttlRew1Paid()).div(BIG18).toNumber()); - - - console.log(chalk.hex("#ff8b3d")("====================================================================")); - console.log(chalk.hex("#ff8b3d")("WAIT UNTIL THE END OF THE 1st PERIOD")); - console.log(chalk.hex("#ff8b3d")("====================================================================")); - // Sync beforehand - await staking_instance.sync({ from: COLLATERAL_FRAX_AND_FXS_OWNER }); - - const current_timestamp_0 = (new BigNumber(await time.latest())).toNumber(); - const period_end_0 = await staking_instance.periodFinish.call(); - - const increase_time_0 = (period_end_0 - current_timestamp_0); - console.log("increase_time_0 (days): ", increase_time_0 / 86400); - await time.increase(increase_time_0); - await time.advanceBlock(); - - - // Sync afterwards - await staking_instance.sync({ from: COLLATERAL_FRAX_AND_FXS_OWNER }); - - await utilities.printCalcCurCombinedWeight(staking_instance, COLLATERAL_FRAX_AND_FXS_OWNER); - await utilities.printCalcCurCombinedWeight(staking_instance, accounts[9]); - - // Note the UNI POOL and FXS amount after staking - const regular_balance_00_1 = new BigNumber(await staking_instance.lockedLiquidityOf.call(COLLATERAL_FRAX_AND_FXS_OWNER)).div(BIG18); - const boosted_balance_00_1 = new BigNumber(await staking_instance.combinedWeightOf.call(COLLATERAL_FRAX_AND_FXS_OWNER)).div(BIG18); - const locked_balance_00_1 = new BigNumber(await staking_instance.lockedLiquidityOf.call(COLLATERAL_FRAX_AND_FXS_OWNER)).div(BIG18); - const regular_balance_00_9 = new BigNumber(await staking_instance.lockedLiquidityOf.call(accounts[9])).div(BIG18); - const boosted_balance_00_9 = new BigNumber(await staking_instance.combinedWeightOf.call(accounts[9])).div(BIG18); - const locked_balance_00_9 = new BigNumber(await staking_instance.lockedLiquidityOf.call(accounts[9])).div(BIG18); - console.log("LOCKED LIQUIDITY [1]: ", regular_balance_00_1.toString()); - console.log("COMBINED WEIGHT [1]: ", boosted_balance_00_1.toString()); - console.log("---- LOCKED [1]: ", locked_balance_00_1.toString()); - console.log("LOCKED LIQUIDITY [9]: ", regular_balance_00_9.toString()); - console.log("COMBINED WEIGHT [9]: ", boosted_balance_00_9.toString()); - console.log("---- LOCKED [9]: ", locked_balance_00_9.toString()); - - // Print balances - console.log(chalk.yellow("--- Before claim ---")); - console.log("Farm FXS balance:", new BigNumber(await canFXS_instance.balanceOf(staking_instance.address)).div(BIG18).toNumber()); - console.log("Farm FXS owed:", new BigNumber(await staking_instance.ttlRew0Owed()).div(BIG18).toNumber()); - console.log("Farm FXS paid:", new BigNumber(await staking_instance.ttlRew0Paid()).div(BIG18).toNumber()); - console.log("Farm REW1 balance:", new BigNumber(await rew1_tkn_instance.balanceOf(staking_instance.address)).div(BIG18).toNumber()); - console.log("Farm REW1 owed:", new BigNumber(await staking_instance.ttlRew1Owed()).div(BIG18).toNumber()); - console.log("Farm REW1 paid:", new BigNumber(await staking_instance.ttlRew1Paid()).div(BIG18).toNumber()); - - const user_min_vefxs_for_max_boost_1_1 = new BigNumber(await staking_instance.minVeFXSForMaxBoost.call(COLLATERAL_FRAX_AND_FXS_OWNER)).div(BIG18); - const user_min_vefxs_for_max_boost_9_1 = new BigNumber(await staking_instance.minVeFXSForMaxBoost.call(accounts[9])).div(BIG18); - console.log("user_min_vefxs_for_max_boost_1_1: ", user_min_vefxs_for_max_boost_1_1.toString()); - console.log("user_min_vefxs_for_max_boost_9_1: ", user_min_vefxs_for_max_boost_9_1.toString()); - - // Make sure there is a valid period for the contract and sync it - await staking_instance.sync({ from: STAKING_OWNER }); - - const staking_earned_1 = await staking_instance.earned.call(COLLATERAL_FRAX_AND_FXS_OWNER); - const staking_earned_1_fxs = new BigNumber(staking_earned_1[0]).div(BIG18); - const staking_earned_1_token1 = new BigNumber(staking_earned_1[1]).div(BIG18); - console.log("accounts[1] earnings after 1 week [FXS]: ", staking_earned_1_fxs.toString()); - console.log("accounts[1] earnings after 1 week [REW1]: ", staking_earned_1_token1.toString()); - - const staking_earned_9 = await staking_instance.earned.call(accounts[9]); - const staking_earned_9_fxs = (new BigNumber(staking_earned_9[0])).plus(staking_earned_9_mid0_fxs).plus(staking_earned_9_mid1_fxs).div(BIG18); - const staking_earned_9_token1 = (new BigNumber(staking_earned_9[1])).plus(staking_earned_9_mid0_token1).plus(staking_earned_9_mid1_token1).div(BIG18); - console.log("accounts[9] earnings after 1 week [FXS]: ", staking_earned_9_fxs.toString()); - console.log("accounts[9] earnings after 1 week [REW1]: ", staking_earned_9_token1.toString()); - - const reward_week_1_fxs = (staking_earned_1_fxs).plus(staking_earned_9_fxs); - const reward_week_1_token1 = (staking_earned_1_token1).plus(staking_earned_9_token1); - const effective_yearly_reward_at_week_1_fxs = reward_week_1_fxs.multipliedBy(52.1429); - const effective_yearly_reward_at_week_1_token1 = reward_week_1_token1.multipliedBy(52.1429); - console.log("Effective weekly reward at week 1 [FXS]: ", reward_week_1_fxs.toString()); - console.log("Effective weekly reward at week 1 [REW1]: ", reward_week_1_token1.toString()); - console.log("Effective yearly reward at week 1 [FXS]: ", effective_yearly_reward_at_week_1_fxs.toString()); - console.log("Effective yearly reward at week 1 [REW1]: ", effective_yearly_reward_at_week_1_token1.toString()); - - const duration_reward_1 = await staking_instance.getRewardForDuration.call(); - const duration_reward_1_fxs = new BigNumber(duration_reward_1[0]).div(BIG18); - const duration_reward_1_token1 = new BigNumber(duration_reward_1[1]).div(BIG18); - console.log("Expected weekly reward [FXS]: ", duration_reward_1_fxs.toString()); - console.log("Expected weekly reward [REW1]: ", duration_reward_1_token1.toString()); - console.log("Expected yearly reward [FXS]: ", duration_reward_1_fxs.multipliedBy(52.1429).toString()); - console.log("Expected yearly reward [REW1]: ", duration_reward_1_token1.multipliedBy(52.1429).toString()); - - console.log("TRY WITHDRAWING AGAIN"); - console.log("[1] SHOULD SUCCEED, [9] SHOULD FAIL"); - await staking_instance.withdrawLocked(locked_stake_structs_1_0[0].kek_id, { from: COLLATERAL_FRAX_AND_FXS_OWNER }); - await expectRevert.unspecified(staking_instance.withdrawLocked(locked_stake_structs_9_0[0].kek_id, { from: accounts[9] })); - - // Claim [9] - await staking_instance.getReward({ from: accounts[9] }); - - // Print balances - console.log(chalk.yellow("--- After claim ---")); - console.log("Farm FXS balance:", new BigNumber(await canFXS_instance.balanceOf(staking_instance.address)).div(BIG18).toNumber()); - console.log("Farm FXS owed:", new BigNumber(await staking_instance.ttlRew0Owed()).div(BIG18).toNumber()); - console.log("Farm FXS paid:", new BigNumber(await staking_instance.ttlRew0Paid()).div(BIG18).toNumber()); - console.log("Farm REW1 balance:", new BigNumber(await rew1_tkn_instance.balanceOf(staking_instance.address)).div(BIG18).toNumber()); - console.log("Farm REW1 owed:", new BigNumber(await staking_instance.ttlRew1Owed()).div(BIG18).toNumber()); - console.log("Farm REW1 paid:", new BigNumber(await staking_instance.ttlRew1Paid()).div(BIG18).toNumber()); - - const fxs_bal_acc_1_time1 = new BigNumber(await canFXS_instance.balanceOf(COLLATERAL_FRAX_AND_FXS_OWNER)).div(BIG18).toNumber(); - const fxs_bal_acc_9_time1 = new BigNumber(await canFXS_instance.balanceOf(accounts[9])).div(BIG18).toNumber(); - console.log(chalk.green("accounts[1] FXS balance change:", fxs_bal_acc_1_time1 - fxs_bal_acc_1_time0)); - console.log(chalk.green("accounts[9] FXS balance change:", fxs_bal_acc_9_time1 - fxs_bal_acc_9_time0)); - console.log(chalk.green.bold("Total FXS balance change:", (fxs_bal_acc_1_time1 + fxs_bal_acc_9_time1) - (fxs_bal_acc_1_time0 + fxs_bal_acc_9_time0))); - - - console.log(chalk.hex("#ff8b3d")("====================================================================")); - console.log(chalk.hex("#ff8b3d")("ADVANCING 28 DAYS")); - console.log(chalk.hex("#ff8b3d")("====================================================================")); - // Sync beforehand - await staking_instance.sync({ from: COLLATERAL_FRAX_AND_FXS_OWNER }); - - const current_timestamp_1 = (new BigNumber(await time.latest())).toNumber(); - const period_end_1 = await staking_instance.periodFinish.call(); - - const increase_time_1 = (period_end_1 - current_timestamp_1) + ((3 * 7) * 86400); - console.log("increase_time_1 (days): ", increase_time_1 / 86400); - await time.increase(increase_time_1); - await time.advanceBlock(); - - // Sync afterwards - await staking_instance.sync({ from: COLLATERAL_FRAX_AND_FXS_OWNER }); - - await utilities.printCalcCurCombinedWeight(staking_instance, COLLATERAL_FRAX_AND_FXS_OWNER); - await utilities.printCalcCurCombinedWeight(staking_instance, accounts[9]); - - // Print balances - console.log("Farm FXS balance:", new BigNumber(await canFXS_instance.balanceOf(staking_instance.address)).div(BIG18).toNumber()); - console.log("Farm FXS owed:", new BigNumber(await staking_instance.ttlRew0Owed()).div(BIG18).toNumber()); - console.log("Farm FXS paid:", new BigNumber(await staking_instance.ttlRew0Paid()).div(BIG18).toNumber()); - console.log("Farm REW1 balance:", new BigNumber(await rew1_tkn_instance.balanceOf(staking_instance.address)).div(BIG18).toNumber()); - console.log("Farm REW1 owed:", new BigNumber(await staking_instance.ttlRew1Owed()).div(BIG18).toNumber()); - console.log("Farm REW1 paid:", new BigNumber(await staking_instance.ttlRew1Paid()).div(BIG18).toNumber()); - - // Note the UNI POOL and FXS amount after staking - const regular_balance_01_1 = new BigNumber(await staking_instance.lockedLiquidityOf.call(COLLATERAL_FRAX_AND_FXS_OWNER)).div(BIG18); - const boosted_balance_01_1 = new BigNumber(await staking_instance.combinedWeightOf.call(COLLATERAL_FRAX_AND_FXS_OWNER)).div(BIG18); - const locked_balance_01_1 = new BigNumber(await staking_instance.lockedLiquidityOf.call(COLLATERAL_FRAX_AND_FXS_OWNER)).div(BIG18); - const regular_balance_01_9 = new BigNumber(await staking_instance.lockedLiquidityOf.call(accounts[9])).div(BIG18); - const boosted_balance_01_9 = new BigNumber(await staking_instance.combinedWeightOf.call(accounts[9])).div(BIG18); - const locked_balance_01_9 = new BigNumber(await staking_instance.lockedLiquidityOf.call(accounts[9])).div(BIG18); - console.log("LOCKED LIQUIDITY [1]: ", regular_balance_01_1.toString()); - console.log("COMBINED WEIGHT [1]: ", boosted_balance_01_1.toString()); - console.log("---- LOCKED [1]: ", locked_balance_01_1.toString()); - console.log("LOCKED LIQUIDITY [9]: ", regular_balance_01_9.toString()); - console.log("COMBINED WEIGHT [9]: ", boosted_balance_01_9.toString()); - console.log("---- LOCKED [9]: ", locked_balance_01_9.toString()); - - const user_min_vefxs_for_max_boost_1_2 = new BigNumber(await staking_instance.minVeFXSForMaxBoost.call(COLLATERAL_FRAX_AND_FXS_OWNER)).div(BIG18); - const user_min_vefxs_for_max_boost_9_2 = new BigNumber(await staking_instance.minVeFXSForMaxBoost.call(accounts[9])).div(BIG18); - console.log("user_min_vefxs_for_max_boost_1_2: ", user_min_vefxs_for_max_boost_1_2.toString()); - console.log("user_min_vefxs_for_max_boost_9_2: ", user_min_vefxs_for_max_boost_9_2.toString()); - - // Make sure there is a valid period for the contract and sync it - await staking_instance.sync({ from: COLLATERAL_FRAX_AND_FXS_OWNER }); - - const staking_fxs_earned_28_1 = await staking_instance.earned.call(accounts[1]); - const staking_fxs_earned_28_1_fxs = new BigNumber(staking_fxs_earned_28_1[0]).div(BIG18); - const staking_fxs_earned_28_1_token1 = new BigNumber(staking_fxs_earned_28_1[1]).div(BIG18); - console.log("accounts[1] earnings after 5 weeks [FXS]: ", staking_fxs_earned_28_1_fxs.toString()); - console.log("accounts[1] earnings after 5 weeks [REW1]: ", staking_fxs_earned_28_1_token1.toString()); - - const staking_fxs_earned_28_9 = await staking_instance.earned.call(accounts[9]); - const staking_fxs_earned_28_9_fxs = new BigNumber(staking_fxs_earned_28_9[0]).div(BIG18); - const staking_fxs_earned_28_9_token1 = new BigNumber(staking_fxs_earned_28_9[1]).div(BIG18); - console.log("accounts[9] earnings after 5 weeks [FXS]: ", staking_fxs_earned_28_9_fxs.toString()); - console.log("accounts[9] earnings after 5 weeks [REW1]: ", staking_fxs_earned_28_9_token1.toString()); - - const reward_week_5_fxs = (staking_fxs_earned_28_1_fxs).plus(staking_fxs_earned_28_9_fxs); - const reward_week_5_token1 = (staking_fxs_earned_28_1_token1).plus(staking_fxs_earned_28_9_token1); - const effective_yearly_reward_at_week_5_fxs = reward_week_5_fxs.multipliedBy(52.1429 / 4.0); - const effective_yearly_reward_at_week_5_token1 = reward_week_5_token1.multipliedBy(52.1429 / 4.0); // 1 week delay - console.log("Effective weekly reward at week 5 [FXS]: ", reward_week_5_fxs.div(4).toString()); - console.log("Effective weekly reward at week 5 [REW1]: ", reward_week_5_token1.div(4).toString()); // 1 week delay - console.log("Effective yearly reward at week 5 [FXS]: ", effective_yearly_reward_at_week_5_fxs.toString()); - console.log("Effective yearly reward at week 5 [REW1]: ", effective_yearly_reward_at_week_5_token1.toString()); - - const duration_reward_3 = await staking_instance.getRewardForDuration.call(); - const duration_reward_3_fxs = new BigNumber(duration_reward_3[0]).div(BIG18); - const duration_reward_3_token1 = new BigNumber(duration_reward_3[1]).div(BIG18); - console.log("Expected weekly reward [FXS]: ", duration_reward_3_fxs.toString()); - console.log("Expected weekly reward [REW1]: ", duration_reward_3_token1.toString()); - console.log("Expected yearly reward [FXS]: ", duration_reward_3_fxs.multipliedBy(52.1429).toString()); - console.log("Expected yearly reward [REW1]: ", duration_reward_3_token1.multipliedBy(52.1429).toString()); - - console.log(chalk.yellow.bold("====================================================================")); - console.log(chalk.yellow.bold("Add more to a lock")); - - // Print the info for the stake - let add_more_before = await staking_instance.lockedStakes.call(COLLATERAL_FRAX_AND_FXS_OWNER, 1); - console.log("add_more_before: ", utilities.cleanLockedStake(add_more_before)); - - // Add 1 more LP token to the lock - const addl_amt_add = new BigNumber("1e18"); - await lp_tkn_instance.approve(staking_instance.address, addl_amt_add, { from: COLLATERAL_FRAX_AND_FXS_OWNER }); - await staking_instance.lockAdditional(add_more_before.kek_id, addl_amt_add, { from: COLLATERAL_FRAX_AND_FXS_OWNER }); - - // Print the info for the stake - const add_more_after = await staking_instance.lockedStakes.call(COLLATERAL_FRAX_AND_FXS_OWNER, 1); - console.log("add_more_after: ", utilities.cleanLockedStake(add_more_after)); - - // Make sure the liquidity has increased - const add_liq_before = new BigNumber(add_more_before.liquidity); - const add_liq_after = new BigNumber(add_more_after.liquidity); - const add_liq_diff = add_liq_after.minus(add_liq_before); - console.log("Add liq diff: ", add_liq_diff.toString()); - assert(add_liq_after.isGreaterThan(add_liq_before), `Liquidity did not increase`); - - console.log(chalk.hex("#ff8b3d")("====================================================================")); - console.log(chalk.hex("#ff8b3d")("REFILL REWARDS AND SYNC")); - console.log(chalk.hex("#ff8b3d")("====================================================================")); - - console.log("Give the staking contract some FXS"); - await hre.network.provider.request({ - method: "hardhat_impersonateAccount", - params: [ADDRESS_WITH_FXS] - }); - - await canFXS_instance.transfer(staking_instance.address, new BigNumber("1000e18"), { from: ADDRESS_WITH_FXS }); - - await hre.network.provider.request({ - method: "hardhat_stopImpersonatingAccount", - params: [ADDRESS_WITH_FXS] - }); - - console.log("Give the staking contract some REW1"); - await hre.network.provider.request({ - method: "hardhat_impersonateAccount", - params: [ADDRESS_WITH_REW1_TKN] - }); - - await rew1_tkn_instance.transfer(staking_instance.address, new BigNumber("100e18"), { from: ADDRESS_WITH_REW1_TKN }); - - await hre.network.provider.request({ - method: "hardhat_stopImpersonatingAccount", - params: [ADDRESS_WITH_REW1_TKN] - }); - - await staking_instance.sync({ from: COLLATERAL_FRAX_AND_FXS_OWNER }); - - console.log(chalk.hex("#ff8b3d")("====================================================================")); - console.log(chalk.hex("#ff8b3d")("CHECK EARNINGS (SHOULD BE ZERO)")); - console.log(chalk.hex("#ff8b3d")("====================================================================")); - - // Print balances - console.log("Farm FXS balance:", new BigNumber(await canFXS_instance.balanceOf(staking_instance.address)).div(BIG18).toNumber()); - console.log("Farm FXS owed:", new BigNumber(await staking_instance.ttlRew0Owed()).div(BIG18).toNumber()); - console.log("Farm FXS paid:", new BigNumber(await staking_instance.ttlRew0Paid()).div(BIG18).toNumber()); - console.log("Farm REW1 balance:", new BigNumber(await rew1_tkn_instance.balanceOf(staking_instance.address)).div(BIG18).toNumber()); - console.log("Farm REW1 owed:", new BigNumber(await staking_instance.ttlRew1Owed()).div(BIG18).toNumber()); - console.log("Farm REW1 paid:", new BigNumber(await staking_instance.ttlRew1Paid()).div(BIG18).toNumber()); - - const staking_fxs_earned_28PR_1 = await staking_instance.earned.call(accounts[1]); - const staking_fxs_earned_28PR_1_fxs = new BigNumber(staking_fxs_earned_28PR_1[0]).div(BIG18); - const staking_fxs_earned_28PR_1_token1 = new BigNumber(staking_fxs_earned_28PR_1[1]).div(BIG18); - console.log("accounts[1] earnings after 5 weeks (post refill) [FXS]: ", staking_fxs_earned_28PR_1_fxs.toString()); - console.log("accounts[1] earnings after 5 weeks (post refill) [REW1]: ", staking_fxs_earned_28PR_1_token1.toString()); - - const staking_fxs_earned_28PR_9 = await staking_instance.earned.call(accounts[9]); - const staking_fxs_earned_28PR_9_fxs = new BigNumber(staking_fxs_earned_28PR_9[0]).div(BIG18); - const staking_fxs_earned_28PR_9_token1 = new BigNumber(staking_fxs_earned_28PR_9[1]).div(BIG18); - console.log("accounts[9] earnings after 5 weeks (post refill) [FXS]: ", staking_fxs_earned_28PR_9_fxs.toString()); - console.log("accounts[9] earnings after 5 weeks (post refill) [REW1]: ", staking_fxs_earned_28PR_9_token1.toString()); - - const reward_week_5PR_fxs = (staking_fxs_earned_28PR_1_fxs).plus(staking_fxs_earned_28PR_9_fxs); - const reward_week_5PR_token1 = (staking_fxs_earned_28PR_1_token1).plus(staking_fxs_earned_28PR_9_token1); - const effective_yearly_reward_at_week_5PR_fxs = reward_week_5PR_fxs.multipliedBy(52.1429 / 4.0); - const effective_yearly_reward_at_week_5PR_token1 = reward_week_5PR_token1.multipliedBy(52.1429 / 4.0); // 1 week delay - console.log("Effective weekly reward at week 5 (post refill) [FXS]: ", reward_week_5PR_fxs.div(4).toString()); - console.log("Effective weekly reward at week 5 (post refill) [REW1]: ", reward_week_5PR_token1.div(4).toString()); // 1 week delay - console.log("Effective yearly reward at week 5 (post refill) [FXS]: ", effective_yearly_reward_at_week_5PR_fxs.toString()); - console.log("Effective yearly reward at week 5 (post refill) [REW1]: ", effective_yearly_reward_at_week_5PR_token1.toString()); - assert(reward_week_5PR_fxs.isEqualTo(new BigNumber(0)), `Reward should be zero`); - assert(reward_week_5PR_token1.isEqualTo(new BigNumber(0)), `Reward should be zero`); - - const duration_reward_3PR = await staking_instance.getRewardForDuration.call(); - const duration_reward_3PR_fxs = new BigNumber(duration_reward_3PR[0]).div(BIG18); - const duration_reward_3PR_token1 = new BigNumber(duration_reward_3PR[1]).div(BIG18); - console.log("Expected weekly reward [FXS]: ", duration_reward_3PR_fxs.toString()); - console.log("Expected weekly reward [REW1]: ", duration_reward_3PR_token1.toString()); - console.log("Expected yearly reward (post refill) [FXS]: ", duration_reward_3PR_fxs.multipliedBy(52.1429).toString()); - console.log("Expected yearly reward (post refill) [REW1]: ", duration_reward_3PR_token1.multipliedBy(52.1429).toString()); - - - console.log(chalk.hex("#ff8b3d")("====================================================================")); - console.log(chalk.hex("#ff8b3d")("ADVANCE TO DAY 35 (next period)")); - console.log(chalk.hex("#ff8b3d")("====================================================================")); - // Sync beforehand - await staking_instance.sync({ from: COLLATERAL_FRAX_AND_FXS_OWNER }); - - const current_timestamp_2 = (new BigNumber(await time.latest())).toNumber(); - const period_end_2 = await staking_instance.periodFinish.call(); - - // Advance ~7 days - const increase_time_2 = (period_end_2 - current_timestamp_2); - console.log("increase_time_2 (days): ", increase_time_2 / 86400); - await time.increase(increase_time_2); - await time.advanceBlock(); - - // Sync afterwards - await staking_instance.sync({ from: COLLATERAL_FRAX_AND_FXS_OWNER }); - - // Print balances - console.log("Farm FXS balance:", new BigNumber(await canFXS_instance.balanceOf(staking_instance.address)).div(BIG18).toNumber()); - console.log("Farm FXS owed:", new BigNumber(await staking_instance.ttlRew0Owed()).div(BIG18).toNumber()); - console.log("Farm FXS paid:", new BigNumber(await staking_instance.ttlRew0Paid()).div(BIG18).toNumber()); - console.log("Farm REW1 balance:", new BigNumber(await rew1_tkn_instance.balanceOf(staking_instance.address)).div(BIG18).toNumber()); - console.log("Farm REW1 owed:", new BigNumber(await staking_instance.ttlRew1Owed()).div(BIG18).toNumber()); - console.log("Farm REW1 paid:", new BigNumber(await staking_instance.ttlRew1Paid()).div(BIG18).toNumber()); - - const staking_fxs_earned_35_1 = await staking_instance.earned.call(accounts[1]); - const staking_fxs_earned_35_1_fxs = new BigNumber(staking_fxs_earned_35_1[0]).div(BIG18); - const staking_fxs_earned_35_1_token1 = new BigNumber(staking_fxs_earned_35_1[1]).div(BIG18); - console.log("accounts[1] earnings after 6 weeks [FXS]: ", staking_fxs_earned_35_1_fxs.toString()); - console.log("accounts[1] earnings after 6 weeks [REW1]: ", staking_fxs_earned_35_1_token1.toString()); - - const staking_fxs_earned_35_9 = await staking_instance.earned.call(accounts[9]); - const staking_fxs_earned_35_9_fxs = new BigNumber(staking_fxs_earned_35_9[0]).div(BIG18); - const staking_fxs_earned_35_9_token1 = new BigNumber(staking_fxs_earned_35_9[1]).div(BIG18); - console.log("accounts[9] earnings after 6 weeks [FXS]: ", staking_fxs_earned_35_9_fxs.toString()); - console.log("accounts[9] earnings after 6 weeks [REW1]: ", staking_fxs_earned_35_9_token1.toString()); - - const reward_week_6_fxs = (staking_fxs_earned_35_1_fxs).plus(staking_fxs_earned_35_9_fxs); - const reward_week_6_token1 = (staking_fxs_earned_35_1_token1).plus(staking_fxs_earned_35_9_token1); - const effective_yearly_reward_at_week_6_fxs = reward_week_6_fxs.multipliedBy(52.1429); - const effective_yearly_reward_at_week_6_token1 = reward_week_6_token1.multipliedBy(52.1429); // 1 week delay - console.log("Effective weekly reward at week 6 [FXS]: ", reward_week_6_fxs.div(1).toString()); - console.log("Effective weekly reward at week 6 [REW1]: ", reward_week_6_token1.div(1).toString()); // 1 week delay - console.log("Effective yearly reward at week 6 [FXS]: ", effective_yearly_reward_at_week_6_fxs.toString()); - console.log("Effective yearly reward at week 6 [REW1]: ", effective_yearly_reward_at_week_6_token1.toString()); - - const duration_reward_4 = await staking_instance.getRewardForDuration.call(); - const duration_reward_4_fxs = new BigNumber(duration_reward_4[0]).div(BIG18); - const duration_reward_4_token1 = new BigNumber(duration_reward_4[1]).div(BIG18); - console.log("Expected weekly reward [FXS]: ", duration_reward_4_fxs.toString()); - console.log("Expected weekly reward [REW1]: ", duration_reward_4_token1.toString()); - console.log("Expected yearly reward [FXS]: ", duration_reward_4_fxs.multipliedBy(52.1429).toString()); - console.log("Expected yearly reward [REW1]: ", duration_reward_4_token1.multipliedBy(52.1429).toString()); - - console.log(chalk.hex("#ff8b3d")("====================================================================")); - console.log(chalk.hex("#ff8b3d")("WITHDRAW STAKES")); - console.log(chalk.hex("#ff8b3d")("====================================================================")); - - // Account 9 withdraws and claims its locked stake - await staking_instance.withdrawLocked(locked_stake_structs_9_0[0].kek_id, { from: accounts[9] }); - await staking_instance.getReward({ from: accounts[9] }); - await expectRevert.unspecified(staking_instance.withdrawLocked(locked_stake_structs_1_0[1].kek_id, { from: COLLATERAL_FRAX_AND_FXS_OWNER })); - - const _total_liquidity_locked_1 = new BigNumber(await staking_instance.totalLiquidityLocked.call()).div(BIG18); - const _total_combined_weight_1 = new BigNumber(await staking_instance.totalCombinedWeight.call()).div(BIG18); - console.log("_total_liquidity_locked GLOBAL: ", _total_liquidity_locked_1.toString()); - console.log("_total_combined_weight GLOBAL: ", _total_combined_weight_1.toString()); - - console.log("UNLOCKING ALL STAKES"); - await staking_instance.unlockStakes({ from: STAKING_OWNER }); - await staking_instance.withdrawLocked(locked_stake_structs_1_0[1].kek_id, { from: COLLATERAL_FRAX_AND_FXS_OWNER }); - - await utilities.printCalcCurCombinedWeight(staking_instance, COLLATERAL_FRAX_AND_FXS_OWNER); - await utilities.printCalcCurCombinedWeight(staking_instance, accounts[9]); - - const user_min_vefxs_for_max_boost_1_3 = new BigNumber(await staking_instance.minVeFXSForMaxBoost.call(COLLATERAL_FRAX_AND_FXS_OWNER)).div(BIG18); - const user_min_vefxs_for_max_boost_9_3 = new BigNumber(await staking_instance.minVeFXSForMaxBoost.call(accounts[9])).div(BIG18); - console.log("user_min_vefxs_for_max_boost_1_3: ", user_min_vefxs_for_max_boost_1_3.toString()); - console.log("user_min_vefxs_for_max_boost_9_3: ", user_min_vefxs_for_max_boost_9_3.toString()); - - const _total_liquidity_locked_2 = new BigNumber(await staking_instance.totalLiquidityLocked.call()).div(BIG18); - const _total_combined_weight_2 = new BigNumber(await staking_instance.totalCombinedWeight.call()).div(BIG18); - const frax_per_lp_token_2 = new BigNumber(await staking_instance.fraxPerLPToken.call()).div(BIG18); - console.log("_total_liquidity_locked GLOBAL: ", _total_liquidity_locked_2.toString()); - console.log("_total_combined_weight GLOBAL: ", _total_combined_weight_2.toString()); - console.log("frax_per_lp_token_2 GLOBAL: ", frax_per_lp_token_2.toString()); - - // Claim rewards - console.log("Claim rewards"); - await staking_instance.getReward({ from: COLLATERAL_FRAX_AND_FXS_OWNER }); - await staking_instance.getReward({ from: accounts[9] }); - - console.log(chalk.hex("#ff8b3d")("====================================================================")); - console.log(chalk.hex("#ff8b3d")("CHECK EARNINGS AGAIN")); - console.log(chalk.hex("#ff8b3d")("====================================================================")); - - // Sync beforehand - await staking_instance.sync({ from: COLLATERAL_FRAX_AND_FXS_OWNER }); - - const current_timestamp_3 = (new BigNumber(await time.latest())).toNumber(); - const period_end_3 = await staking_instance.periodFinish.call(); - - // Advance to the next period - const increase_time_3 = (period_end_3 - current_timestamp_3); - console.log("increase_time_3 (days): ", increase_time_3 / 86400); - await time.increase(increase_time_3); - await time.advanceBlock(); - - // Sync afterwards - await staking_instance.sync({ from: COLLATERAL_FRAX_AND_FXS_OWNER }); - - // Print balances - console.log("Farm FXS balance:", new BigNumber(await canFXS_instance.balanceOf(staking_instance.address)).div(BIG18).toNumber()); - console.log("Farm FXS owed:", new BigNumber(await staking_instance.ttlRew0Owed()).div(BIG18).toNumber()); - console.log("Farm FXS paid:", new BigNumber(await staking_instance.ttlRew0Paid()).div(BIG18).toNumber()); - console.log("Farm REW1 balance:", new BigNumber(await rew1_tkn_instance.balanceOf(staking_instance.address)).div(BIG18).toNumber()); - console.log("Farm REW1 owed:", new BigNumber(await staking_instance.ttlRew1Owed()).div(BIG18).toNumber()); - console.log("Farm REW1 paid:", new BigNumber(await staking_instance.ttlRew1Paid()).div(BIG18).toNumber()); - - const staking_fxs_earned_PW_1 = await staking_instance.earned.call(accounts[1]); - const staking_fxs_earned_PW_1_fxs = new BigNumber(staking_fxs_earned_PW_1[0]).div(BIG18); - const staking_fxs_earned_PW_1_token1 = new BigNumber(staking_fxs_earned_PW_1[1]).div(BIG18); - console.log("accounts[1] earnings leftover [FXS]: ", staking_fxs_earned_PW_1_fxs.toString()); - console.log("accounts[1] earnings leftover [REW1]: ", staking_fxs_earned_PW_1_token1.toString()); - - const staking_fxs_earned_PW_9 = await staking_instance.earned.call(accounts[9]); - const staking_fxs_earned_PW_9_fxs = new BigNumber(staking_fxs_earned_PW_9[0]).div(BIG18); - const staking_fxs_earned_PW_9_token1 = new BigNumber(staking_fxs_earned_PW_9[1]).div(BIG18); - console.log("accounts[9] earnings leftover [FXS]: ", staking_fxs_earned_PW_9_fxs.toString()); - console.log("accounts[9] earnings leftover [REW1]: ", staking_fxs_earned_PW_9_token1.toString()); - assert(staking_fxs_earned_PW_9_fxs.isEqualTo(new BigNumber(0)), `Reward should be zero`); - assert(staking_fxs_earned_PW_9_token1.isEqualTo(new BigNumber(0)), `Reward should be zero`); - - const duration_reward_5 = await staking_instance.getRewardForDuration.call(); - const duration_reward_5_fxs = new BigNumber(duration_reward_5[0]).div(BIG18); - const duration_reward_5_token1 = new BigNumber(duration_reward_5[1]).div(BIG18); - console.log("Expected weekly reward [FXS]: ", duration_reward_5_fxs.toString()); - console.log("Expected weekly reward [REW1]: ", duration_reward_5_token1.toString()); - - }); - - - it("Migration Staking / Withdrawal Tests", async () => { - - // Advance 1 day - await time.increase((1 * 86400) + 1); - await time.advanceBlock(); - - // Untoggle the stake unlocking - await staking_instance.unlockStakes({ from: STAKING_OWNER }); - - // Stake normally again for next part - // Need to approve first so the staking can use transfer - const stake_amt_unlocked = new BigNumber("5e18"); - const stake_amt_locked = new BigNumber("5e18"); - - // Allow the migrator function to migrate for you - await staking_instance.stakerAllowMigrator(MIGRATOR_ADDRESS, { from: COLLATERAL_FRAX_AND_FXS_OWNER }); - - // Print the balance - console.log("accounts[1] ERC20 balanceOf LP:", (new BigNumber(await lp_tkn_instance.balanceOf(COLLATERAL_FRAX_AND_FXS_OWNER))).div(BIG18).toNumber()); - - // Stake Locked - await lp_tkn_instance.approve(staking_instance.address, stake_amt_locked, { from: COLLATERAL_FRAX_AND_FXS_OWNER }); - await staking_instance.stakeLocked(stake_amt_locked, 7 * 86400, { from: COLLATERAL_FRAX_AND_FXS_OWNER }); - - // Show the stake structs - const locked_stake_structs = await staking_instance.lockedStakesOf.call(COLLATERAL_FRAX_AND_FXS_OWNER); - console.log("LOCKED STAKES [1]: ", locked_stake_structs); - - // Turn on migrations - await staking_instance.toggleMigrations({ from: STAKING_OWNER }); - - // Print balances before - console.log("accounts[1] staked lockedLiquidityOf :", (new BigNumber(await staking_instance.lockedLiquidityOf(COLLATERAL_FRAX_AND_FXS_OWNER))).div(BIG18).toNumber()); - console.log("accounts[1] staked combinedWeightOf :", (new BigNumber(await staking_instance.combinedWeightOf(COLLATERAL_FRAX_AND_FXS_OWNER))).div(BIG18).toNumber()); - - // Have the migrator withdraw locked tokens - const withdraw_locked_amt = new BigNumber ("5e18"); - await staking_instance.migrator_withdraw_locked(COLLATERAL_FRAX_AND_FXS_OWNER, locked_stake_structs[2].kek_id, { from: MIGRATOR_ADDRESS }); - console.log(`Migrator (accounts[10]) withdrew ${withdraw_locked_amt.div(BIG18)} (E18) locked LP tokens from accounts[1]`); - console.log("Migrator (accounts[10]) ERC20 balanceOf:", (new BigNumber(await lp_tkn_instance.balanceOf(MIGRATOR_ADDRESS))).div(BIG18).toNumber()); - console.log("accounts[1] staked lockedLiquidityOf:", (new BigNumber(await staking_instance.lockedLiquidityOf(COLLATERAL_FRAX_AND_FXS_OWNER))).div(BIG18).toNumber()); - console.log("accounts[1] staked combinedWeightOf:", (new BigNumber(await staking_instance.combinedWeightOf(COLLATERAL_FRAX_AND_FXS_OWNER))).div(BIG18).toNumber()); - console.log(""); - - // Proxy locked stake for someone else as the migrator - const proxy_stake_lock_amt = new BigNumber ("5e18"); - await lp_tkn_instance.approve(staking_instance.address, proxy_stake_lock_amt, { from: MIGRATOR_ADDRESS }); - let block_time_current_1 = (await time.latest()).toNumber(); - await staking_instance.migrator_stakeLocked_for(COLLATERAL_FRAX_AND_FXS_OWNER, proxy_stake_lock_amt, 28 * 86400, block_time_current_1, { from: MIGRATOR_ADDRESS }); - console.log(`accounts[1] lock staked ${proxy_stake_lock_amt.div(BIG18)} (E18) LP tokens for account[8]`); - console.log("Migrator (accounts[10]) ERC20 balanceOf:", (new BigNumber(await lp_tkn_instance.balanceOf(MIGRATOR_ADDRESS))).div(BIG18).toNumber()); - console.log("accounts[1] staked lockedLiquidityOf:", (new BigNumber(await staking_instance.lockedLiquidityOf(COLLATERAL_FRAX_AND_FXS_OWNER))).div(BIG18).toNumber()); - console.log("accounts[1] staked combinedWeightOf:", (new BigNumber(await staking_instance.combinedWeightOf(COLLATERAL_FRAX_AND_FXS_OWNER))).div(BIG18).toNumber()); - console.log(""); - - - }); - - it("Fail Tests ", async () => { - - const test_amount_1 = new BigNumber ("1e18"); - const locked_stake_structs = await staking_instance.lockedStakesOf.call(COLLATERAL_FRAX_AND_FXS_OWNER); - - console.log(chalk.blue("=============TEST NOT IN MIGRATION [SHOULD FAIL]=============")); - - // Turn off migrations - await staking_instance.toggleMigrations({ from: STAKING_OWNER }); - - console.log("---------TRY TO migrator_withdraw_locked WHILE NOT IN MIGRATION---------"); - await expectRevert( - staking_instance.migrator_withdraw_locked(COLLATERAL_FRAX_AND_FXS_OWNER, locked_stake_structs[2].kek_id, { from: MIGRATOR_ADDRESS }), - "Not in migration" - ); - - console.log("---------TRY TO migrator_stakeLocked_for WHILE NOT IN MIGRATION---------"); - let block_time_current_2 = (await time.latest()).toNumber(); - await expectRevert( - staking_instance.migrator_stakeLocked_for(COLLATERAL_FRAX_AND_FXS_OWNER, test_amount_1, 28 * 86400, block_time_current_2, { from: MIGRATOR_ADDRESS }), - "Not in migration" - ); - - console.log("---------TRY TO ALLOW A WRONG MIGRATOR---------"); - await expectRevert( - staking_instance.stakerAllowMigrator(INVESTOR_CUSTODIAN_ADDRESS, { from: COLLATERAL_FRAX_AND_FXS_OWNER }), - "Invalid migrator address" - ); - - console.log("---------TRY TO DO EMERGENCY WITHDRAWALS WHILE NOT IN MIGRATION---------"); - await expectRevert( - staking_instance.recoverERC20(lp_tkn_instance.address, test_amount_1, { from: STAKING_OWNER }), - "Not in migration" - ); - - console.log(chalk.blue("=============TEST TRYING TO MIGRATE NOT AS A MIGRATOR [SHOULD FAIL]=============")); - - // Turn on migrations - await staking_instance.toggleMigrations({ from: STAKING_OWNER }); - - console.log("---------TRY TO migrator_withdraw_locked NOT AS THE MIGRATOR---------"); - await expectRevert( - staking_instance.migrator_withdraw_locked(COLLATERAL_FRAX_AND_FXS_OWNER, locked_stake_structs[2].kek_id, { from: INVESTOR_CUSTODIAN_ADDRESS }), - "Mig. invalid or unapproved" - ); - - console.log("---------TRY TO migrator_stakeLocked_for NOT AS THE MIGRATOR---------"); - let block_time_current_3 = (await time.latest()).toNumber(); - await expectRevert( - staking_instance.migrator_stakeLocked_for(COLLATERAL_FRAX_AND_FXS_OWNER, test_amount_1, 28 * 86400, block_time_current_3, { from: INVESTOR_CUSTODIAN_ADDRESS }), - "Mig. invalid or unapproved" - ); - - console.log("---------TRY TO migrator_withdraw_locked AS A NOW NON-APPROVED MIGRATOR ---------"); - // Staker disallows MIGRATOR_ADDRESS - await staking_instance.stakerDisallowMigrator(MIGRATOR_ADDRESS, { from: COLLATERAL_FRAX_AND_FXS_OWNER }) - - await expectRevert( - staking_instance.migrator_withdraw_locked(COLLATERAL_FRAX_AND_FXS_OWNER, locked_stake_structs[2].kek_id, { from: MIGRATOR_ADDRESS }), - "Mig. invalid or unapproved" - ); - - console.log("---------TRY TO migrator_withdraw_unlocked AS A NOW INVALID MIGRATOR ---------"); - // Staker re-allows MIGRATOR_ADDRESS - await staking_instance.stakerAllowMigrator(MIGRATOR_ADDRESS, { from: COLLATERAL_FRAX_AND_FXS_OWNER }) - - // But governance now disallows it - await staking_instance.removeMigrator(MIGRATOR_ADDRESS, { from: STAKING_OWNER }); - - await expectRevert( - staking_instance.migrator_withdraw_locked(COLLATERAL_FRAX_AND_FXS_OWNER, locked_stake_structs[2].kek_id, { from: MIGRATOR_ADDRESS }), - "Mig. invalid or unapproved" - ); - - }); -}); \ No newline at end of file diff --git a/src/hardhat/test/FraxUnifiedFarm_ERC20-Tests.js b/src/hardhat/test/FraxUnifiedFarm_ERC20-Tests.js index 0985eb1d..4922529b 100644 --- a/src/hardhat/test/FraxUnifiedFarm_ERC20-Tests.js +++ b/src/hardhat/test/FraxUnifiedFarm_ERC20-Tests.js @@ -37,16 +37,13 @@ const FRAXStablecoin = artifacts.require("Frax/IFrax"); const FRAXShares = artifacts.require("FXS/FRAXShares"); // Staking contracts -const FraxUnifiedFarm_ERC20_Gelato_FRAX_DAI = artifacts.require("Staking/Variants/FraxUnifiedFarm_ERC20_Gelato_FRAX_DAI"); -const FraxUnifiedFarm_ERC20_Fraxswap_FRAX_IQ = artifacts.require("Staking/Variants/FraxUnifiedFarm_ERC20_Fraxswap_FRAX_IQ"); -const FraxUnifiedFarm_ERC20_Temple_FRAX_TEMPLE = artifacts.require("Staking/Variants/FraxUnifiedFarm_ERC20_Temple_FRAX_TEMPLE"); -const FraxUnifiedFarm_ERC20_Vesper_Orbit_FRAX = artifacts.require("Staking/Variants/FraxUnifiedFarm_ERC20_Vesper_Orbit_FRAX"); +const FraxUnifiedFarm_ERC20_FraxswapV2 = artifacts.require("Staking/Variants/FraxUnifiedFarm_ERC20_FraxswapV2"); + // veFXS and gauge related const veFXS = artifacts.require("Curve/IveFXS"); const veFXSBoost = artifacts.require("Curve/IVotingEscrowDelegation"); const veFXSBoostDelegationProxy = artifacts.require("Curve/IDelegationProxy"); -const FraxGaugeController = artifacts.require("Curve/FraxGaugeController"); const FraxGaugeControllerV2 = artifacts.require("Curve/FraxGaugeControllerV2"); const FraxGaugeFXSRewardsDistributor = artifacts.require("Curve/IFraxGaugeFXSRewardsDistributor"); @@ -134,7 +131,7 @@ contract('FraxUnifiedFarm_ERC20-Tests', async (accounts) => { // Get instances of the Uniswap pairs // pair_instance_FRAX_SUSHI_Sushi = await IUniswapV2Pair.at(CONTRACT_ADDRESSES.ethereum.pair_tokens["Sushi FRAX/SUSHI"]); - pair_instance_Fraxswap_FRAX_IQ = await IFraxswapPair.at(CONTRACT_ADDRESSES.ethereum.pair_tokens["Fraxswap V1 FRAX/IQ"]); + pair_instance_Fraxswap_FRAX_IQ = await IFraxswapPair.at(CONTRACT_ADDRESSES.ethereum.pair_tokens["Fraxswap V2 FRAX/IQ"]); // pair_instance_Gelato_FRAX_DAI = await IGUniPool.at(CONTRACT_ADDRESSES.ethereum.pair_tokens["Gelato Uniswap FRAX/DAI"]); // pair_instance_Temple_FRAX_TEMPLE = await IUniswapV2Pair.at(CONTRACT_ADDRESSES.ethereum.pair_tokens["Temple FRAX/TEMPLE"]); // pair_instance_Vesper_FRAX = await IVPool.at(CONTRACT_ADDRESSES.ethereum.pair_tokens["Vesper Orbit FRAX"]); @@ -146,13 +143,13 @@ contract('FraxUnifiedFarm_ERC20-Tests', async (accounts) => { // Fill the staking rewards instances // fraxUnifiedFarm_Gelato_FRAX_DAI_instance = await FraxUnifiedFarm_ERC20_Gelato_FRAX_DAI.deployed(); - fraxUnifiedFarm_Fraxswap_FRAX_IQ_instance = await FraxUnifiedFarm_ERC20_Fraxswap_FRAX_IQ.deployed(); + fraxUnifiedFarm_Fraxswap_FRAX_IQ_instance = await FraxUnifiedFarm_ERC20_FraxswapV2.deployed(); // fraxUnifiedFarm_Temple_FRAX_TEMPLE_instance = await FraxUnifiedFarm_ERC20_Temple_FRAX_TEMPLE.deployed(); // fraxUnifiedFarm_Vesper_FRAX_instance = await FraxUnifiedFarm_ERC20_Vesper_Orbit_FRAX.deployed(); // veFXS and gauge related veFXS_instance = await veFXS.deployed(); - frax_gauge_controller = await FraxGaugeController.deployed(); + frax_gauge_controller = await FraxGaugeControllerV2.deployed(); gauge_rewards_distributor_instance = await FraxGaugeFXSRewardsDistributor.deployed(); // Set which pairs to test @@ -304,6 +301,9 @@ contract('FraxUnifiedFarm_ERC20-Tests', async (accounts) => { // --------------------------------------------------------------- + console.log(chalk.hex("#ff8b3d")("====================================================================")); + console.log(chalk.hex("#ff8b3d")("WAIT UNTIL THE END OF THE FIRST GAUGE PERIOD")); + console.log(chalk.hex("#ff8b3d")("====================================================================")); console.log("Move to the end of the gauge controller period"); const current_timestamp_00 = (new BigNumber(await time.latest())).toNumber(); @@ -314,14 +314,15 @@ contract('FraxUnifiedFarm_ERC20-Tests', async (accounts) => { await time.increase(increase_time_0); await time.advanceBlock(); - // Move to the end of the staking contract's period - const current_timestamp_0a = (new BigNumber(await time.latest())).toNumber(); - const period_end_0a = await staking_instance.periodFinish.call(); + // // Move to the end of the staking contract's period + // SHOULD NOT HAVE TO DO BECAUSE THIS SHOULD BE SYNCED WITH THE GAUGE TIME IN THE CONSTRUCTOR + // const current_timestamp_0a = (new BigNumber(await time.latest())).toNumber(); + // const period_end_0a = await staking_instance.periodFinish.call(); - const increase_time_0a = (period_end_0a - current_timestamp_0a) + 1; - console.log("increase_time_0a [to staking contract period end] (days): ", increase_time_0a / 86400); - await time.increase(increase_time_0a); - await time.advanceBlock(); + // const increase_time_0a = (period_end_0a - current_timestamp_0a) + 1; + // console.log("increase_time_0a [to staking contract period end] (days): ", increase_time_0a / 86400); + // await time.increase(increase_time_0a); + // await time.advanceBlock(); // Checkpoint the gauges const current_timestamp_0 = (new BigNumber(await time.latest())).toNumber(); @@ -375,8 +376,8 @@ contract('FraxUnifiedFarm_ERC20-Tests', async (accounts) => { console.log("frax_per_lp_token: ", frax_per_lp_token_dec); // Print the reward rate - let reward_amount_check_wk0 = new BigNumber(await staking_instance.rewardRates.call(0)).multipliedBy(604800).div(BIG18).toNumber(); - console.log("reward_amount_check_wk0 per week (FXS): ", reward_amount_check_wk0); + let reward_amount_check_wk1 = new BigNumber(await staking_instance.rewardRates.call(0)).multipliedBy(604800).div(BIG18).toNumber(); + console.log("reward_amount_check_wk1 per week (FXS): ", reward_amount_check_wk1); console.log(chalk.yellow.bold("====================================================================")); console.log(chalk.yellow.bold("Test [4], which has no veFXS and will be locking for very short time")); @@ -384,7 +385,7 @@ contract('FraxUnifiedFarm_ERC20-Tests', async (accounts) => { console.log(chalk.hex("#f3f3f3").bold("------Lock a position for [4]------")); await utilities.printCalcCurCombinedWeight(staking_instance, TIMELOCK_ADMIN); await pair_instance.approve(staking_instance.address, liq_locked_1_sum, { from: TIMELOCK_ADMIN }); - await staking_instance.stakeLocked(liq_locked_1, 6.95 * 86400, { from: TIMELOCK_ADMIN }); // 15 days + await staking_instance.stakeLocked(liq_locked_1, 6.98 * 86400, { from: TIMELOCK_ADMIN }); // 7 days const stake_idx_4_0 = new BigNumber((await staking_instance.lockedStakesOfLength.call(TIMELOCK_ADMIN))).toNumber() - 1; const frax_lp_locked_4 = liq_locked_1_dec * frax_per_lp_token_dec; console.log("Amount LP locked [4]: ", liq_locked_1_dec); @@ -417,22 +418,30 @@ contract('FraxUnifiedFarm_ERC20-Tests', async (accounts) => { await staking_instance.getReward(TIMELOCK_ADMIN, { from: TIMELOCK_ADMIN }); const fxs_bal_4_dy1_post_collect = new BigNumber(await fxs_instance.balanceOf(TIMELOCK_ADMIN)).div(BIG18).toNumber(); console.log("FXS collected [4] (1 day): ", fxs_bal_4_dy1_post_collect - fxs_bal_4_dy1_pre_collect); - assert((fxs_bal_4_dy1_post_collect - fxs_bal_4_dy1_pre_collect) >= .99, '[4] should have earned the daily FXS amount'); + assert((fxs_bal_4_dy1_post_collect - fxs_bal_4_dy1_pre_collect) >= (.99 * (reward_amount_check_wk1 / 7)), '[4] should have earned the daily FXS amount'); console.log(chalk.yellow.bold("====================================================================")); - console.log(chalk.yellow.bold("Advance 6 days and claim")); + console.log(chalk.yellow.bold("Advance 5 days and claim")); // Advance 6 days await time.increase((6 * 86400)); await time.advanceBlock(); + // Sync the contract + await staking_instance.sync_gauge_weights(1, { from: COLLATERAL_FRAX_AND_FXS_OWNER }); + await staking_instance.sync({ from: COLLATERAL_FRAX_AND_FXS_OWNER }); + + // Print the reward rate + let reward_amount_check_wk1_mid = new BigNumber(await staking_instance.rewardRates.call(0)).multipliedBy(604800).div(BIG18).toNumber(); + console.log("reward_amount_check_wk1_mid per week (FXS): ", reward_amount_check_wk1_mid); + await utilities.printCalcCurCombinedWeight(staking_instance, TIMELOCK_ADMIN); const fxs_bal_4_wk1_pre_collect = new BigNumber(await fxs_instance.balanceOf(TIMELOCK_ADMIN)).div(BIG18).toNumber(); await staking_instance.getReward(TIMELOCK_ADMIN, { from: TIMELOCK_ADMIN }); const fxs_bal_4_wk1_post_collect = new BigNumber(await fxs_instance.balanceOf(TIMELOCK_ADMIN)).div(BIG18).toNumber(); console.log("FXS collected [4] (6 days): ", fxs_bal_4_wk1_post_collect - fxs_bal_4_wk1_pre_collect); - assert((fxs_bal_4_wk1_post_collect - fxs_bal_4_wk1_pre_collect) >= 5.99, '[4] should have earned the 6 day FXS amount'); + assert((fxs_bal_4_wk1_post_collect - fxs_bal_4_wk1_pre_collect) >= (5.99 * (reward_amount_check_wk1_mid / 7)), '[4] should have earned the 6 day FXS amount'); console.log(chalk.yellow.bold("====================================================================")); console.log(chalk.yellow.bold("Advance 1 week and claim again. Should still be earning at 1x")); @@ -441,12 +450,20 @@ contract('FraxUnifiedFarm_ERC20-Tests', async (accounts) => { await time.increase((7 * 86400)); await time.advanceBlock(); + // Sync the contract + await staking_instance.sync_gauge_weights(1, { from: COLLATERAL_FRAX_AND_FXS_OWNER }); + await staking_instance.sync({ from: COLLATERAL_FRAX_AND_FXS_OWNER }); + + // Print the reward rate + let reward_amount_check_wk2 = new BigNumber(await staking_instance.rewardRates.call(0)).multipliedBy(604800).div(BIG18).toNumber(); + console.log("reward_amount_check_wk2 per week (FXS): ", reward_amount_check_wk2); + await utilities.printCalcCurCombinedWeight(staking_instance, TIMELOCK_ADMIN); const fxs_bal_4_wk2_pre_collect = new BigNumber(await fxs_instance.balanceOf(TIMELOCK_ADMIN)).div(BIG18).toNumber(); await staking_instance.getReward(TIMELOCK_ADMIN, { from: TIMELOCK_ADMIN }); const fxs_bal_4_wk2_post_collect = new BigNumber(await fxs_instance.balanceOf(TIMELOCK_ADMIN)).div(BIG18).toNumber(); console.log("FXS collected [4] (7 days, post expiry): ", fxs_bal_4_wk2_post_collect - fxs_bal_4_wk2_pre_collect); - assert((fxs_bal_4_wk2_post_collect - fxs_bal_4_wk2_pre_collect) >= 6.99, '[4] should have earned the weekly FXS amount'); + assert((fxs_bal_4_wk2_post_collect - fxs_bal_4_wk2_pre_collect) >= (6.99 * (reward_amount_check_wk2 / 7)), '[4] should have earned the weekly FXS amount'); console.log(chalk.yellow.bold("====================================================================")); @@ -456,16 +473,24 @@ contract('FraxUnifiedFarm_ERC20-Tests', async (accounts) => { await time.increase((7 * 86400)); await time.advanceBlock(); + // Sync the contract + await staking_instance.sync_gauge_weights(1, { from: COLLATERAL_FRAX_AND_FXS_OWNER }); + await staking_instance.sync({ from: COLLATERAL_FRAX_AND_FXS_OWNER }); + + // Print the reward rate + let reward_amount_check_wk3 = new BigNumber(await staking_instance.rewardRates.call(0)).multipliedBy(604800).div(BIG18).toNumber(); + console.log("reward_amount_check_wk3 per week (FXS): ", reward_amount_check_wk3); + await utilities.printCalcCurCombinedWeight(staking_instance, TIMELOCK_ADMIN); const fxs_bal_4_wk3_pre_collect = new BigNumber(await fxs_instance.balanceOf(TIMELOCK_ADMIN)).div(BIG18).toNumber(); await staking_instance.getReward(TIMELOCK_ADMIN, { from: TIMELOCK_ADMIN }); const fxs_bal_4_wk3_post_collect = new BigNumber(await fxs_instance.balanceOf(TIMELOCK_ADMIN)).div(BIG18).toNumber(); console.log("FXS collected [4] (7 days, post expiry): ", fxs_bal_4_wk3_post_collect - fxs_bal_4_wk3_pre_collect); - assert((fxs_bal_4_wk3_post_collect - fxs_bal_4_wk3_pre_collect) >= 6.99, '[4] should have earned the weekly FXS amount'); + assert((fxs_bal_4_wk3_post_collect - fxs_bal_4_wk3_pre_collect) >= (6.99 * (reward_amount_check_wk3 / 7)), '[4] should have earned the weekly FXS amount'); console.log("Withdraw everything now to clean up for the future tests"); let locked_stake_structs_4_wk3_0 = await staking_instance.lockedStakesOf.call(TIMELOCK_ADMIN); - staking_instance.withdrawLocked(locked_stake_structs_4_wk3_0[0].kek_id, TIMELOCK_ADMIN, { from: TIMELOCK_ADMIN }); + staking_instance.withdrawLocked(locked_stake_structs_4_wk3_0[0].kek_id, TIMELOCK_ADMIN, true, { from: TIMELOCK_ADMIN }); console.log(chalk.yellow.bold("============================= MAIN TEST ============================")); @@ -515,7 +540,7 @@ contract('FraxUnifiedFarm_ERC20-Tests', async (accounts) => { console.log(chalk.hex("#f3f3f3").bold("------Lock a position for [1]------")) await pair_instance.approve(staking_instance.address, liq_locked_1_sum, { from: COLLATERAL_FRAX_AND_FXS_OWNER }); - await staking_instance.stakeLocked(liq_locked_1, 6.95 * 86400, { from: COLLATERAL_FRAX_AND_FXS_OWNER }); // 15 days + await staking_instance.stakeLocked(liq_locked_1, 6.98 * 86400, { from: COLLATERAL_FRAX_AND_FXS_OWNER }); // 15 days const stake_idx_1_0 = new BigNumber((await staking_instance.lockedStakesOfLength.call(COLLATERAL_FRAX_AND_FXS_OWNER))).toNumber() - 1; const frax_lp_locked_1 = liq_locked_1_dec * frax_per_lp_token_dec; console.log("Amount LP locked [1]: ", liq_locked_1_dec); @@ -610,8 +635,8 @@ contract('FraxUnifiedFarm_ERC20-Tests', async (accounts) => { console.log("TRY A WITHDRAWAL (SHOULD FAIL)"); - await expectRevert.unspecified(staking_instance.withdrawLocked(locked_stake_structs_1_0[0].kek_id, COLLATERAL_FRAX_AND_FXS_OWNER, { from: COLLATERAL_FRAX_AND_FXS_OWNER })); - await expectRevert.unspecified(staking_instance.withdrawLocked(locked_stake_structs_9_0[0].kek_id, accounts[9], { from: accounts[9] })); + await expectRevert.unspecified(staking_instance.withdrawLocked(locked_stake_structs_1_0[0].kek_id, COLLATERAL_FRAX_AND_FXS_OWNER, true, { from: COLLATERAL_FRAX_AND_FXS_OWNER })); + await expectRevert.unspecified(staking_instance.withdrawLocked(locked_stake_structs_9_0[0].kek_id, accounts[9], true, { from: accounts[9] })); await time.advanceBlock(); await utilities.printCalcCurCombinedWeight(staking_instance, COLLATERAL_FRAX_AND_FXS_OWNER); @@ -635,7 +660,7 @@ contract('FraxUnifiedFarm_ERC20-Tests', async (accounts) => { console.log("Weekly Total FXS Emission: ", weekly_total_emission_check_0); console.log(chalk.hex("#ff8b3d")("====================================================================")); - console.log(chalk.hex("#ff8b3d")("WAIT UNTIL THE END OF THE 1st PERIOD")); + console.log(chalk.hex("#ff8b3d")("WAIT UNTIL THE END OF THE PERIOD")); console.log(chalk.hex("#ff8b3d")("====================================================================")); const current_timestamp_1 = (new BigNumber(await time.latest())).toNumber(); @@ -714,8 +739,8 @@ contract('FraxUnifiedFarm_ERC20-Tests', async (accounts) => { console.log("TRY WITHDRAWING AGAIN"); console.log("[1] SHOULD SUCCEED, [9] SHOULD FAIL"); - await staking_instance.withdrawLocked(locked_stake_structs_1_0[0].kek_id, COLLATERAL_FRAX_AND_FXS_OWNER, { from: COLLATERAL_FRAX_AND_FXS_OWNER }); - await expectRevert.unspecified(staking_instance.withdrawLocked(locked_stake_structs_9_0[0].kek_id, accounts[9], { from: accounts[9] })); + await staking_instance.withdrawLocked(locked_stake_structs_1_0[0].kek_id, COLLATERAL_FRAX_AND_FXS_OWNER, true, { from: COLLATERAL_FRAX_AND_FXS_OWNER }); + await expectRevert.unspecified(staking_instance.withdrawLocked(locked_stake_structs_9_0[0].kek_id, accounts[9], true, { from: accounts[9] })); // Since withdrawLocked does getReward, accounts[9] should collect now as well @@ -873,16 +898,16 @@ contract('FraxUnifiedFarm_ERC20-Tests', async (accounts) => { // First try withdraw somebody else's stake [SHOULD FAIL] await expectRevert( - staking_instance.withdrawLocked(locked_stake_structs_9_0[0].kek_id, accounts[9], { from: INVESTOR_CUSTODIAN_ADDRESS }), + staking_instance.withdrawLocked(locked_stake_structs_9_0[0].kek_id, accounts[9], true, { from: INVESTOR_CUSTODIAN_ADDRESS }), "Stake not found" ); // Actually withdraw the stake - await staking_instance.withdrawLocked(locked_stake_structs_9_0[0].kek_id, accounts[9], { from: accounts[9] }); + await staking_instance.withdrawLocked(locked_stake_structs_9_0[0].kek_id, accounts[9], true, { from: accounts[9] }); // Claim await staking_instance.getReward(accounts[9], { from: accounts[9] }); - await expectRevert.unspecified(staking_instance.withdrawLocked(locked_stake_structs_1_0[1].kek_id, COLLATERAL_FRAX_AND_FXS_OWNER, { from: COLLATERAL_FRAX_AND_FXS_OWNER })); + await expectRevert.unspecified(staking_instance.withdrawLocked(locked_stake_structs_1_0[1].kek_id, COLLATERAL_FRAX_AND_FXS_OWNER, true, { from: COLLATERAL_FRAX_AND_FXS_OWNER })); const _total_liquidity_locked_1 = new BigNumber(await staking_instance.totalLiquidityLocked.call()).div(BIG18); const _total_combined_weight_1 = new BigNumber(await staking_instance.totalCombinedWeight.call()).div(BIG18); @@ -891,7 +916,7 @@ contract('FraxUnifiedFarm_ERC20-Tests', async (accounts) => { console.log(chalk.yellow.bold("UNLOCKING ALL STAKES")); await staking_instance.unlockStakes({ from: STAKING_OWNER }); - await staking_instance.withdrawLocked(locked_stake_structs_1_0[1].kek_id, COLLATERAL_FRAX_AND_FXS_OWNER, { from: COLLATERAL_FRAX_AND_FXS_OWNER }); + await staking_instance.withdrawLocked(locked_stake_structs_1_0[1].kek_id, COLLATERAL_FRAX_AND_FXS_OWNER, true, { from: COLLATERAL_FRAX_AND_FXS_OWNER }); await utilities.printCalcCurCombinedWeight(staking_instance, COLLATERAL_FRAX_AND_FXS_OWNER); await utilities.printCalcCurCombinedWeight(staking_instance, accounts[9]); diff --git a/src/hardhat/test/__ARBITRUM/FraxCrossChainFarmV3-Tests.js b/src/hardhat/test/__ARBITRUM/FraxCrossChainFarmV3_ERC20-Tests.js similarity index 99% rename from src/hardhat/test/__ARBITRUM/FraxCrossChainFarmV3-Tests.js rename to src/hardhat/test/__ARBITRUM/FraxCrossChainFarmV3_ERC20-Tests.js index 58383577..077a3d2b 100644 --- a/src/hardhat/test/__ARBITRUM/FraxCrossChainFarmV3-Tests.js +++ b/src/hardhat/test/__ARBITRUM/FraxCrossChainFarmV3_ERC20-Tests.js @@ -38,7 +38,7 @@ const METAMASK_ADDRESS = "0x6666666666666666666666666666666666666666"; const REWARDS_DURATION = 7 * 86400; // 7 days -contract('FraxCrossChainFarmV3-Tests', async (accounts) => { +contract('FraxCrossChainFarmV3_ERC20-Tests', async (accounts) => { let CONTRACT_ADDRESSES = constants.CONTRACT_ADDRESSES; let CHAIN_ADDRESSES = CONTRACT_ADDRESSES.arbitrum; diff --git a/src/hardhat/test/truffle-fixture.js b/src/hardhat/test/truffle-fixture.js index bb39566e..72407e03 100644 --- a/src/hardhat/test/truffle-fixture.js +++ b/src/hardhat/test/truffle-fixture.js @@ -39,7 +39,7 @@ const CPITrackerOracle = artifacts.require("Oracle/CPITrackerOracle"); const UniV3TWAPOracle = artifacts.require("Oracle/UniV3TWAPOracle"); // Staking contracts -// const FraxUnifiedFarm_ERC20_Fraxswap_FRAX_IQ = artifacts.require("Staking/Variants/FraxUnifiedFarm_ERC20_Fraxswap_FRAX_IQ"); +const FraxUnifiedFarm_ERC20_FraxswapV2 = artifacts.require("Staking/Variants/FraxUnifiedFarm_ERC20_FraxswapV2"); // const FraxUnifiedFarm_ERC20_Fraxswap_FRAX_pitchFXS = artifacts.require("Staking/Variants/FraxUnifiedFarm_ERC20_Fraxswap_FRAX_pitchFXS"); // const FraxUnifiedFarm_ERC20_Temple_FRAX_TEMPLE = artifacts.require("Staking/Variants/FraxUnifiedFarm_ERC20_Temple_FRAX_TEMPLE"); const FraxFarmRageQuitter_Temple = artifacts.require("Staking/FraxFarmRageQuitter_Temple"); @@ -176,7 +176,7 @@ module.exports = async (deployer) => { // Staking middlemanGauge_ARBI_Curve_VSTFRAX = await FraxMiddlemanGauge_ARBI_Curve_VSTFRAX.at(CONTRACT_ADDRESSES.ethereum.middleman_gauges['Curve VSTFRAX-f']); - // fraxUnifiedFarm_Fraxswap_FRAX_IQ_instance = await FraxUnifiedFarm_ERC20_Fraxswap_FRAX_IQ.at(CONTRACT_ADDRESSES.ethereum.staking_contracts['Fraxswap V1 FRAX/IQ']); + // fraxUnifiedFarm_Fraxswap_FRAX_IQ_instance = await FraxUnifiedFarm_ERC20_FraxswapV2.at(CONTRACT_ADDRESSES.ethereum.staking_contracts['Fraxswap V1 FRAX/IQ']); // fraxUnifiedFarm_Temple_FRAX_TEMPLE_instance = await FraxUnifiedFarm_ERC20_Temple_FRAX_TEMPLE.at(CONTRACT_ADDRESSES.ethereum.staking_contracts['Temple FRAX/TEMPLE']); // fraxUnifiedFarm_PosRebase_aFRAX_instance = await FraxUnifiedFarm_PosRebase_aFRAX.at(CONTRACT_ADDRESSES.ethereum.staking_contracts['Aave aFRAX']); @@ -262,21 +262,48 @@ module.exports = async (deployer) => { - // console.log(chalk.yellow("========== FraxUnifiedFarm_ERC20_Fraxswap_FRAX_IQ ==========")); - // // FraxUnifiedFarm_ERC20_Fraxswap_FRAX_IQ - // fraxUnifiedFarm_Fraxswap_FRAX_IQ_instance = await FraxUnifiedFarm_ERC20_Fraxswap_FRAX_IQ.new( + console.log(chalk.yellow("========== FraxUnifiedFarm_ERC20_FraxswapV2 ==========")); + // FraxUnifiedFarm_ERC20_FraxswapV2 + fraxUnifiedFarm_Fraxswap_FRAX_IQ_instance = await FraxUnifiedFarm_ERC20_FraxswapV2.new( + THE_ACCOUNTS[6], + [ + "0x3432B6A60D23Ca0dFCa7761B7ab56459D9C964D0", // FXS + "0x579CEa1889991f68aCc35Ff5c3dd0621fF29b0C9" // IQ + ], + [ + "0xB1748C79709f4Ba2Dd82834B8c82D4a505003f27", // Frax Msig + "0x8aCc50345921b4A635705Ec7f3AC042B3407BD58" // IQ Msig + ], + [ + 11574074074074, // 1 FXS per day + 23148148148148 // 2 IQ per day + ], + [ + "0x0000000000000000000000000000000000000000", // Deploy the gauge controller address empty + "0x0000000000000000000000000000000000000000" + ], + [ + "0x278dC748edA1d8eFEf1aDFB518542612b49Fcd34", // FXS reward distributor + "0x0000000000000000000000000000000000000000" + ], + CONTRACT_ADDRESSES.ethereum.pair_tokens['Fraxswap V2 FRAX/IQ'], + ); + + // console.log(chalk.yellow("========== FraxUnifiedFarm_ERC20_Fraxswap_FRAX_pitchFXS ==========")); + // // FraxUnifiedFarm_ERC20_Fraxswap_FRAX_pitchFXS + // fraxUnifiedFarm_Fraxswap_FRAX_pitchFXS_instance = await FraxUnifiedFarm_ERC20_Fraxswap_FRAX_pitchFXS.new( // THE_ACCOUNTS[6], // [ // "0x3432B6A60D23Ca0dFCa7761B7ab56459D9C964D0", // FXS - // "0x579CEa1889991f68aCc35Ff5c3dd0621fF29b0C9" // IQ + // "0x49d9ef84464c53c04934b8d23d7b1733fdcfd302" // PITCH // ], // [ // "0xB1748C79709f4Ba2Dd82834B8c82D4a505003f27", // Frax Msig - // "0x8aCc50345921b4A635705Ec7f3AC042B3407BD58" // IQ Msig + // "0x8A421C3A25e8158b9aC815aE1319fBCf83F6bD6c" // Pitch Msig // ], // [ - // 11574074074074, // 1 FXS per day - // 23148148148148 // 2 IQ per day + // 11574074074074, + // 0 // ], // [ // "0x0000000000000000000000000000000000000000", // Deploy the gauge controller address empty @@ -286,20 +313,20 @@ module.exports = async (deployer) => { // "0x278dC748edA1d8eFEf1aDFB518542612b49Fcd34", // FXS reward distributor // "0x0000000000000000000000000000000000000000" // ], - // CONTRACT_ADDRESSES.ethereum.pair_tokens['Fraxswap V1 FRAX/IQ'], + // CONTRACT_ADDRESSES.ethereum.pair_tokens['Fraxswap V1 FRAX/pitchFXS'], // ); - // console.log(chalk.yellow("========== FraxUnifiedFarm_ERC20_Fraxswap_FRAX_pitchFXS ==========")); - // // FraxUnifiedFarm_ERC20_Fraxswap_FRAX_pitchFXS - // fraxUnifiedFarm_Fraxswap_FRAX_pitchFXS_instance = await FraxUnifiedFarm_ERC20_Fraxswap_FRAX_pitchFXS.new( + // console.log(chalk.yellow("========== FraxUnifiedFarm_ERC20_Temple_FRAX_TEMPLE ==========")); + // // FraxUnifiedFarm_ERC20_Temple_FRAX_TEMPLE + // fraxUnifiedFarm_Temple_FRAX_TEMPLE_instance = await FraxUnifiedFarm_ERC20_Temple_FRAX_TEMPLE.new( // THE_ACCOUNTS[6], // [ // "0x3432B6A60D23Ca0dFCa7761B7ab56459D9C964D0", // FXS - // "0x49d9ef84464c53c04934b8d23d7b1733fdcfd302" // PITCH + // "0x470EBf5f030Ed85Fc1ed4C2d36B9DD02e77CF1b7" // TEMPLE // ], // [ // "0xB1748C79709f4Ba2Dd82834B8c82D4a505003f27", // Frax Msig - // "0x8A421C3A25e8158b9aC815aE1319fBCf83F6bD6c" // Pitch Msig + // "0x4D6175d58C5AceEf30F546C0d5A557efFa53A950" // Temple DAO Msig // ], // [ // 11574074074074, @@ -313,24 +340,24 @@ module.exports = async (deployer) => { // "0x278dC748edA1d8eFEf1aDFB518542612b49Fcd34", // FXS reward distributor // "0x0000000000000000000000000000000000000000" // ], - // CONTRACT_ADDRESSES.ethereum.pair_tokens['Fraxswap V1 FRAX/pitchFXS'], + // CONTRACT_ADDRESSES.ethereum.pair_tokens['Temple FRAX/TEMPLE'], // ); - // console.log(chalk.yellow("========== FraxUnifiedFarm_ERC20_Temple_FRAX_TEMPLE ==========")); - // // FraxUnifiedFarm_ERC20_Temple_FRAX_TEMPLE - // fraxUnifiedFarm_Temple_FRAX_TEMPLE_instance = await FraxUnifiedFarm_ERC20_Temple_FRAX_TEMPLE.new( + // console.log(chalk.yellow("========== FraxUnifiedFarm_KyberSwapElastic ==========")); + // // FraxUnifiedFarm_KyberSwapElastic + // fraxUnifiedFarm_KyberSwapElastic_instance = await FraxUnifiedFarm_KyberSwapElastic.new( // THE_ACCOUNTS[6], // [ // "0x3432B6A60D23Ca0dFCa7761B7ab56459D9C964D0", // FXS - // "0x470EBf5f030Ed85Fc1ed4C2d36B9DD02e77CF1b7" // TEMPLE + // "0xdeFA4e8a7bcBA345F687a2f1456F5Edd9CE97202" // KNC // ], // [ // "0xB1748C79709f4Ba2Dd82834B8c82D4a505003f27", // Frax Msig - // "0x4D6175d58C5AceEf30F546C0d5A557efFa53A950" // Temple DAO Msig + // "0x5891BE896ed4a79ed928C55B17FbbEcDb46f8A00" // Kyber Network Msig for external projects // ], // [ - // 11574074074074, - // 0 + // 11574074074074, // 1 FXS per day. Connect the gauge later + // 11574074074 // 0.001 KNC per day. Connect the gauge later // ], // [ // "0x0000000000000000000000000000000000000000", // Deploy the gauge controller address empty @@ -340,40 +367,13 @@ module.exports = async (deployer) => { // "0x278dC748edA1d8eFEf1aDFB518542612b49Fcd34", // FXS reward distributor // "0x0000000000000000000000000000000000000000" // ], - // CONTRACT_ADDRESSES.ethereum.pair_tokens['Temple FRAX/TEMPLE'], + // [ + // CONTRACT_ADDRESSES.ethereum.uniswap_v3.kyberswap_elastic_pos_mgr, + // combo_oracle_kyberswap_elastic_instance.address + // ], + // 301 // Template NFT to use for values // ); - console.log(chalk.yellow("========== FraxUnifiedFarm_KyberSwapElastic ==========")); - // FraxUnifiedFarm_KyberSwapElastic - fraxUnifiedFarm_KyberSwapElastic_instance = await FraxUnifiedFarm_KyberSwapElastic.new( - THE_ACCOUNTS[6], - [ - "0x3432B6A60D23Ca0dFCa7761B7ab56459D9C964D0", // FXS - "0xdeFA4e8a7bcBA345F687a2f1456F5Edd9CE97202" // KNC - ], - [ - "0xB1748C79709f4Ba2Dd82834B8c82D4a505003f27", // Frax Msig - "0x5891BE896ed4a79ed928C55B17FbbEcDb46f8A00" // Kyber Network Msig for external projects - ], - [ - 11574074074074, // 1 FXS per day. Connect the gauge later - 11574074074 // 0.001 KNC per day. Connect the gauge later - ], - [ - "0x0000000000000000000000000000000000000000", // Deploy the gauge controller address empty - "0x0000000000000000000000000000000000000000" - ], - [ - "0x278dC748edA1d8eFEf1aDFB518542612b49Fcd34", // FXS reward distributor - "0x0000000000000000000000000000000000000000" - ], - [ - CONTRACT_ADDRESSES.ethereum.uniswap_v3.kyberswap_elastic_pos_mgr, - combo_oracle_kyberswap_elastic_instance.address - ], - 301 // Template NFT to use for values - ); - // console.log(chalk.yellow("========== FraxUnifiedFarm_PosRebase_aFRAX ==========")); // // FraxUnifiedFarm_PosRebase_aFRAX // fraxUnifiedFarm_PosRebase_aFRAX_instance = await FraxUnifiedFarm_PosRebase_aFRAX.new( @@ -570,10 +570,10 @@ module.exports = async (deployer) => { console.log(chalk.yellow("--------DEPLOY STAKING CONTRACTS--------")); FraxFarmRageQuitter_Temple.setAsDeployed(frax_farm_ragequitter_temple_instance); FraxMiddlemanGauge_ARBI_Curve_VSTFRAX.setAsDeployed(middlemanGauge_ARBI_Curve_VSTFRAX); - // FraxUnifiedFarm_ERC20_Fraxswap_FRAX_IQ.setAsDeployed(fraxUnifiedFarm_Fraxswap_FRAX_IQ_instance); + FraxUnifiedFarm_ERC20_FraxswapV2.setAsDeployed(fraxUnifiedFarm_Fraxswap_FRAX_IQ_instance); // FraxUnifiedFarm_ERC20_Fraxswap_FRAX_pitchFXS.setAsDeployed(fraxUnifiedFarm_Fraxswap_FRAX_pitchFXS_instance); // FraxUnifiedFarm_ERC20_Temple_FRAX_TEMPLE.setAsDeployed(fraxUnifiedFarm_Temple_FRAX_TEMPLE_instance); - FraxUnifiedFarm_KyberSwapElastic.setAsDeployed(fraxUnifiedFarm_KyberSwapElastic_instance); + // FraxUnifiedFarm_KyberSwapElastic.setAsDeployed(fraxUnifiedFarm_KyberSwapElastic_instance); // FraxUnifiedFarm_PosRebase_aFRAX.setAsDeployed(fraxUnifiedFarm_PosRebase_aFRAX_instance); console.log(chalk.yellow("--------DEPLOYING TWAMM CONTRACTS--------")); diff --git a/src/types/constants.ts b/src/types/constants.ts old mode 100644 new mode 100755 index 7a41c014..9408c98c --- a/src/types/constants.ts +++ b/src/types/constants.ts @@ -2848,6 +2848,7 @@ export const CONTRACT_ADDRESSES = { "Curve VSTFRAX-f": "0x127963A74c07f72D862F2Bdc225226c3251BD117", // Arbitrum "mStable FRAX/mUSD": "0x3e14f6EEDCC5Bc1d0Fc7B20B45eAE7B1F74a6AeC", // Polygon "Saddle L2D4 [Arbitrum]": "0x9B8AEd182B8A9430C14e97Bf2C02F129f2b36854", // Arbitrum + "Sentiment LFrax": "0x86c0A521807f43A646978e9f302BAF693350eAa3", // Arbitrum // "Snowball S4D": "0x66fD216bCBeb566EF038A116B7270f241005e186", // Avalanche "SpiritSwap FRAX/FXS": "0xebF993690F65B23862E10F489656529ac06A27B8", // Fantom "Sushi FRAX/FXS": "", // Polygon @@ -2942,6 +2943,7 @@ export const CONTRACT_ADDRESSES = { FRAX2pool: "0xf07d553B195080F84F582e88ecdD54bAa122b279", FRAXBP: "0xC9B8a3FDECB9D5b218d02555a8Baf332E5B740d5", // L2 Curve LP Token and Pool are same contract hFRAX: "0xb1c4426C86082D91a6c097fC588E5D5d8dD1f5a8", + LFrax: "0x2E9963ae673A885b6bfeDa2f80132CE28b784C40", // Sentiment saddleArbUSDv2: "0x0a20c2FFa10cD43F67D06170422505b7D6fC0953", saddleL2D4: "0x147D0Af556C6D89640BFa915D2b9619d7b55947a", saddleL2D4_Permissionless_Swap: "0xF2839E0b30B5e96083085F498b14bbc12530b734", @@ -2956,6 +2958,7 @@ export const CONTRACT_ADDRESSES = { "Fraxswap V1 FRAX/WETH": "0xb771410E2b1d892C3469711824c44769528fdc89", "Fraxswap V2 FRAX/WETH": "0x0BB5A573886bbcecf18590b6Cb59E980FAC7d278", "Saddle L2D4 [Arbitrum]": "0x147D0Af556C6D89640BFa915D2b9619d7b55947a", + "Sentiment LFrax": "0x2E9963ae673A885b6bfeDa2f80132CE28b784C40", "Sushi canFRAX/canFXS": "0xfb5DB4f55Bb97A608f6EE50864104457FA04DA4f", "Sushi canFRAX/WETH": "0xaebfda10b251d650126830b952ee74b4a599f71f", "Sushi canFRAX/arbiUSDC": "0x8286a9881CEe20E71ac1215f8D39De6853Dd9A8F", @@ -2964,6 +2967,7 @@ export const CONTRACT_ADDRESSES = { staking_contracts: { "Curve VSTFRAX-f": "0x127963A74c07f72D862F2Bdc225226c3251BD117", "Saddle L2D4 [Arbitrum]": "0xd1dF24e8D225b20F9c8f4912BE88cCCec93f36E5", + "Sentiment LFrax": "0xcdE7054e7a232938CdDe8BF40faf827e6f377f54", "Olympus Pro FRAX Bond [Arbitrum]": "", }, }, @@ -4067,10 +4071,13 @@ export const CONTRACT_ADDRESSES = { // fpi_controller_amo: "0xC03d43d1F3086dB4A1e51fE9d518dd41Dd0a0721", market_xyz_liquidity: "0x2182d5Bcc9110594d49530CA3EDAaBFd3C302E6e", sushiswap_liquidity: "0xBF667807Ff4d431E2aa77c50497434646F190Bfa", // Old: "0x6800EEdB4cEb7bBc092791C9C5B9b480B6950f09" + ragequitter_temple: "0x53f0995a86bd5D349BE693AA99c7F5b78F2dFa0c", }, reward_tokens: { + bal: "0x9a71012b13ca4d3d0cdc72a177df3ef03b0e76a3", mta: "0xF501dd45a1198C2E1b5aEF5314A68B9006D842E0", sushi: "0x0b3f868e0be5597d5db7feb59e1cadbb0fdda50a", + weth: "0x7ceB23fD6bC0adD59E62ac25578270cFf1b9f619", wmatic: "0x0d500B1d8E8eF31E21C99d1Db9A6444d3ADf1270", }, bearer_tokens: { @@ -4082,6 +4089,7 @@ export const CONTRACT_ADDRESSES = { }, vamms: {}, pair_tokens: { + "Balancer frxETH-WETH": "0x5DEe84FfA2DC27419Ba7b3419d7146E53e4F7dEd", "Fraxswap V1 FRAX/FXS": "0x60AC6d228ffeeefF423879baA02091558e6480dc", "Fraxswap V2 FRAX/FXS": "0xd2105fE5f1B631daf2398e918549758Cd181cA7C", "Fraxswap V1 FRAX/WMATIC": "0x4F7267Af6DB7B284dF74BEA9e35402987D8C72a7", @@ -4094,6 +4102,7 @@ export const CONTRACT_ADDRESSES = { "Sushi canFXS/polyUSDC": "0xF850c261AdC576E6713D14af590a40d55936a982", }, staking_contracts: { + "Balancer frxETH-WETH": "0xAD8B9BaF8e537d520D3F25267F5996e1E7CFae7b", "mStable FRAX/mUSD": "0xc425Fd9Ed3C892d849C9E1a971516da1C1B29696", // "Sushi FRAX/FXS": "0x6386a4d52966D864698BF9AdA2cd081ab2F487c4" }, From 0e36c9fe685919059dad252a02ed51614c7d7228 Mon Sep 17 00:00:00 2001 From: Travis Moore <33413876+FortisFortuna@users.noreply.github.com> Date: Tue, 14 Mar 2023 11:46:46 -0700 Subject: [PATCH 19/37] Update FraxUnifiedFarmTemplate_V2.sol --- src/hardhat/contracts/Staking/FraxUnifiedFarmTemplate_V2.sol | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/hardhat/contracts/Staking/FraxUnifiedFarmTemplate_V2.sol b/src/hardhat/contracts/Staking/FraxUnifiedFarmTemplate_V2.sol index a8754979..72ac6cc5 100755 --- a/src/hardhat/contracts/Staking/FraxUnifiedFarmTemplate_V2.sol +++ b/src/hardhat/contracts/Staking/FraxUnifiedFarmTemplate_V2.sol @@ -653,6 +653,9 @@ contract FraxUnifiedFarmTemplate_V2 is OwnedV2, ReentrancyGuardV2 { // If the period expired, renew it function retroCatchUp() internal { + // Catch up the old rewards first + _updateStoredRewardsAndTime(); + // Pull in rewards from the rewards distributor, if applicable for (uint256 i; i < rewardDistributors.length; i++){ address reward_distributor_address = rewardDistributors[i]; @@ -903,4 +906,4 @@ contract FraxUnifiedFarmTemplate_V2 is OwnedV2, ReentrancyGuardV2 { // ,--'/` ' // // [hjw] https://textart.io/art/vw6Sa3iwqIRGkZsN1BC2vweF/chicken -} \ No newline at end of file +} From 952dc17bb8e52d178cf33618c7a18a3adfc2b74a Mon Sep 17 00:00:00 2001 From: travis Date: Mon, 3 Apr 2023 09:35:25 -0700 Subject: [PATCH 20/37] zksync stuff and farms --- .gitignore | 8 + SAMPLE.env | 11 +- package-lock.json | 1134 +++++++++++++++-- package.json | 13 +- .../Staking/FraxUnifiedFarmTemplate_V2.sol | 4 +- .../Staking/FraxUnifiedFarm_ERC20.sol | 20 +- ...UnifiedFarm_ERC20_Convex_FRAXBP_Stable.sol | 30 +- ...FraxUnifiedFarm_ERC20_Convex_frxETH_V2.sol | 36 +- .../FraxUnifiedFarm_ERC20_FraxswapV2.sol | 36 +- src/hardhat/contracts/Utils/Address.sol | 2 +- src/hardhat/hardhat.config.js | 71 +- src/types/constants.ts | 381 +++--- 12 files changed, 1387 insertions(+), 359 deletions(-) diff --git a/.gitignore b/.gitignore index 1e633415..87168965 100755 --- a/.gitignore +++ b/.gitignore @@ -5,10 +5,18 @@ src/hardhat/artifacts/* src/hardhat/artifacts/*/* src/hardhat/artifacts/*/*/* src/hardhat/artifacts/*/*/*/* +src/hardhat/artifacts-zk/* +src/hardhat/artifacts-zk/*/* +src/hardhat/artifacts-zk/*/*/* +src/hardhat/artifacts-zk/*/*/*/* src/hardhat/cache/* src/hardhat/cache/*/* src/hardhat/cache/*/*/* src/hardhat/cache/*/*/*/* +src/hardhat/cache-zk/* +src/hardhat/cache-zk/*/* +src/hardhat/cache-zk/*/*/* +src/hardhat/cache-zk/*/*/*/* src/hardhat/___For_Etherscan/* # Bin diff --git a/SAMPLE.env b/SAMPLE.env index bc384808..44bb69b3 100644 --- a/SAMPLE.env +++ b/SAMPLE.env @@ -2,7 +2,7 @@ #========================== MAINTENANCE_ADDRESS='0xBB437059584e30598b3AF0154472E47E6e2a45B9' MAINTENANCE_PRIVATE_KEY='' -MAINTENANCE_CURRENT_FORK='london' +MAINTENANCE_CURRENT_FORK='paris' # Hardhat #=========================== @@ -120,6 +120,10 @@ OPTIMISM_MNEMONIC_PHRASE='future ahead slight riot brand perfect paddle hammer c # Polygon POLYGON_MNEMONIC_PHRASE='future ahead slight riot brand perfect paddle hammer circle return review behave nasty fiction balcony' +# zkSync +ZKSYNC_MNEMONIC_PHRASE='future ahead slight riot brand perfect paddle hammer circle return review behave nasty fiction balcony' +ZKSYNC_PKEY='' + #INFURA #========================== INFURA_PROJECT_ID='' @@ -232,3 +236,8 @@ OPTIMISM_NETWORK_ENDPOINT_WSS='' # POLYGON #======================== POLYGON_NETWORK_ENDPOINT='https://polygon-mainnet.infura.io/v3/' + +# ZKSYNC +#======================== +ZKSYNC_NETWORK_ENDPOINT='https://mainnet.era.zksync.io' +ZKSYNC_MUMBAI_NETWORK_ENDPOINT='https://mainnet.era.zksync.io' \ No newline at end of file diff --git a/package-lock.json b/package-lock.json index 07a72619..4395e956 100644 --- a/package-lock.json +++ b/package-lock.json @@ -17,7 +17,8 @@ "@maticnetwork/maticjs": "^3.5.0", "@maticnetwork/maticjs-ethers": "^1.0.3", "@maticnetwork/maticjs-web3": "^1.0.4", - "@openzeppelin/contracts": "^4.8.0", + "@matterlabs/hardhat-zksync-chai-matchers": "^0.1.2", + "@openzeppelin/contracts": "^4.8.2", "@openzeppelin/hardhat-upgrades": "^1.22.0", "@poanet/solidity-flattener": "^3.0.8", "@solana/spl-token": "^0.3.6", @@ -56,13 +57,14 @@ "truffle-contract-size": "^2.0.1", "truffle-hdwallet-provider": "^1.0.6", "tslib": "^2.4.1", - "typescript": "^4.9.4", "util": "^0.12.5", "web3-eth-contract": "^1.8.1", "web3-utils": "^1.8.1", "ws": "^8.11.0" }, "devDependencies": { + "@matterlabs/hardhat-zksync-deploy": "^0.6.3", + "@matterlabs/hardhat-zksync-solc": "^0.3.14", "@nomiclabs/hardhat-ethers": "^2.2.1", "@nomiclabs/hardhat-etherscan": "^3.1.4", "@nomiclabs/hardhat-truffle5": "^2.0.7", @@ -74,10 +76,13 @@ "chai": "^4.3.7", "ethereum-waffle": "^3.4.4", "ethers": "^5.7.2", - "hardhat": "^2.12.5", + "hardhat": "^2.13.0", "hardhat-deploy": "^0.11.22", "json-loader": "^0.5.7", - "web3": "^1.8.1" + "ts-node": "^10.9.1", + "typescript": "^5.0.3", + "web3": "^1.8.1", + "zksync-web3": "^0.14.3" } }, "node_modules/@ampproject/remapping": { @@ -710,6 +715,12 @@ "node": ">=6.9.0" } }, + "node_modules/@balena/dockerignore": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@balena/dockerignore/-/dockerignore-1.0.2.tgz", + "integrity": "sha512-wMue2Sy4GAVTk6Ic4tJVcnfdau+gx2EnG7S+uAEe+TWJFqE4YoWN4/H8MSLj4eYJKxGg26lZwboEniNiNwZQ6Q==", + "dev": true + }, "node_modules/@chainlink/contracts": { "version": "0.5.1", "resolved": "https://registry.npmjs.org/@chainlink/contracts/-/contracts-0.5.1.tgz", @@ -729,6 +740,28 @@ "node": ">=0.1.90" } }, + "node_modules/@cspotcode/source-map-support": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz", + "integrity": "sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==", + "devOptional": true, + "dependencies": { + "@jridgewell/trace-mapping": "0.3.9" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/@cspotcode/source-map-support/node_modules/@jridgewell/trace-mapping": { + "version": "0.3.9", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz", + "integrity": "sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==", + "devOptional": true, + "dependencies": { + "@jridgewell/resolve-uri": "^3.0.3", + "@jridgewell/sourcemap-codec": "^1.4.10" + } + }, "node_modules/@ensdomains/address-encoder": { "version": "0.1.9", "resolved": "https://registry.npmjs.org/@ensdomains/address-encoder/-/address-encoder-0.1.9.tgz", @@ -2123,7 +2156,6 @@ "version": "3.1.0", "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz", "integrity": "sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==", - "peer": true, "engines": { "node": ">=6.0.0" } @@ -2140,8 +2172,7 @@ "node_modules/@jridgewell/sourcemap-codec": { "version": "1.4.14", "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz", - "integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==", - "peer": true + "integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==" }, "node_modules/@jridgewell/trace-mapping": { "version": "0.3.17", @@ -2343,6 +2374,42 @@ "@maticnetwork/maticjs": "^3.2.0" } }, + "node_modules/@matterlabs/hardhat-zksync-chai-matchers": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/@matterlabs/hardhat-zksync-chai-matchers/-/hardhat-zksync-chai-matchers-0.1.2.tgz", + "integrity": "sha512-lJWlVgnu4p0QvMucEdeVOWxCpPZogsygntN+RXLMS0R4PnqwslKHfG1ZbcgWRWQ7vgABqCCIF7d1GjieWdlFmQ==", + "peerDependencies": { + "@nomicfoundation/hardhat-chai-matchers": "~1.0.4" + } + }, + "node_modules/@matterlabs/hardhat-zksync-deploy": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/@matterlabs/hardhat-zksync-deploy/-/hardhat-zksync-deploy-0.6.3.tgz", + "integrity": "sha512-FB+2xFL/80JJwlGna+aHA6dk4ONrMFqThTZATYVJUAKooA0Aw5qmpmM8B3qsNB4LLzHSO/EmVrHIcLaPv8hYwQ==", + "dev": true, + "dependencies": { + "chalk": "4.1.2" + }, + "peerDependencies": { + "ethers": "~5.7.2", + "hardhat": "^2.13.0", + "zksync-web3": "^0.14.3" + } + }, + "node_modules/@matterlabs/hardhat-zksync-solc": { + "version": "0.3.14", + "resolved": "https://registry.npmjs.org/@matterlabs/hardhat-zksync-solc/-/hardhat-zksync-solc-0.3.14.tgz", + "integrity": "sha512-iKuQ+vvnpv3K2lkFO41xpJcNWH0KHJ/5JbOboTlPZATVR7F3GJeHfJL+GG4wkxKXnxZczpxyQqC4rAfMKvRaDg==", + "dev": true, + "dependencies": { + "@nomiclabs/hardhat-docker": "^2.0.0", + "chalk": "4.1.2", + "dockerode": "^3.3.4" + }, + "peerDependencies": { + "hardhat": "^2.12.6" + } + }, "node_modules/@metamask/eth-sig-util": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/@metamask/eth-sig-util/-/eth-sig-util-4.0.1.tgz", @@ -2815,6 +2882,25 @@ "setimmediate": "^1.0.5" } }, + "node_modules/@nomicfoundation/hardhat-chai-matchers": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/@nomicfoundation/hardhat-chai-matchers/-/hardhat-chai-matchers-1.0.6.tgz", + "integrity": "sha512-f5ZMNmabZeZegEfuxn/0kW+mm7+yV7VNDxLpMOMGXWFJ2l/Ct3QShujzDRF9cOkK9Ui/hbDeOWGZqyQALDXVCQ==", + "peer": true, + "dependencies": { + "@ethersproject/abi": "^5.1.2", + "@types/chai-as-promised": "^7.1.3", + "chai-as-promised": "^7.1.1", + "deep-eql": "^4.0.1", + "ordinal": "^1.0.3" + }, + "peerDependencies": { + "@nomiclabs/hardhat-ethers": "^2.0.0", + "chai": "^4.2.0", + "ethers": "^5.0.0", + "hardhat": "^2.9.4" + } + }, "node_modules/@nomicfoundation/solidity-analyzer": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/@nomicfoundation/solidity-analyzer/-/solidity-analyzer-0.1.0.tgz", @@ -2985,11 +3071,247 @@ "node": ">= 10" } }, + "node_modules/@nomiclabs/hardhat-docker": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/@nomiclabs/hardhat-docker/-/hardhat-docker-2.0.2.tgz", + "integrity": "sha512-XgGEpRT3wlA1VslyB57zyAHV+oll8KnV1TjwnxxC1tpAL04/lbdwpdO5KxInVN8irMSepqFpsiSkqlcnvbE7Ng==", + "dev": true, + "dependencies": { + "dockerode": "^2.5.8", + "fs-extra": "^7.0.1", + "node-fetch": "^2.6.0" + } + }, + "node_modules/@nomiclabs/hardhat-docker/node_modules/bl": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/bl/-/bl-1.2.3.tgz", + "integrity": "sha512-pvcNpa0UU69UT341rO6AYy4FVAIkUHuZXRIWbq+zHnsVcRzDDjIAhGuuYoi0d//cwIwtt4pkpKycWEfjdV+vww==", + "dev": true, + "dependencies": { + "readable-stream": "^2.3.5", + "safe-buffer": "^5.1.1" + } + }, + "node_modules/@nomiclabs/hardhat-docker/node_modules/bl/node_modules/isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", + "dev": true + }, + "node_modules/@nomiclabs/hardhat-docker/node_modules/bl/node_modules/readable-stream": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", + "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", + "dev": true, + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "node_modules/@nomiclabs/hardhat-docker/node_modules/bl/node_modules/string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dev": true, + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, + "node_modules/@nomiclabs/hardhat-docker/node_modules/debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dev": true, + "dependencies": { + "ms": "^2.1.1" + } + }, + "node_modules/@nomiclabs/hardhat-docker/node_modules/docker-modem": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/docker-modem/-/docker-modem-1.0.9.tgz", + "integrity": "sha512-lVjqCSCIAUDZPAZIeyM125HXfNvOmYYInciphNrLrylUtKyW66meAjSPXWchKVzoIYZx69TPnAepVSSkeawoIw==", + "dev": true, + "dependencies": { + "debug": "^3.2.6", + "JSONStream": "1.3.2", + "readable-stream": "~1.0.26-4", + "split-ca": "^1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/@nomiclabs/hardhat-docker/node_modules/dockerode": { + "version": "2.5.8", + "resolved": "https://registry.npmjs.org/dockerode/-/dockerode-2.5.8.tgz", + "integrity": "sha512-+7iOUYBeDTScmOmQqpUYQaE7F4vvIt6+gIZNHWhqAQEI887tiPFB9OvXI/HzQYqfUNvukMK+9myLW63oTJPZpw==", + "dev": true, + "dependencies": { + "concat-stream": "~1.6.2", + "docker-modem": "^1.0.8", + "tar-fs": "~1.16.3" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/@nomiclabs/hardhat-docker/node_modules/fs-extra": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-7.0.1.tgz", + "integrity": "sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==", + "dev": true, + "dependencies": { + "graceful-fs": "^4.1.2", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" + }, + "engines": { + "node": ">=6 <7 || >=8" + } + }, + "node_modules/@nomiclabs/hardhat-docker/node_modules/isarray": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", + "integrity": "sha512-D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ==", + "dev": true + }, + "node_modules/@nomiclabs/hardhat-docker/node_modules/jsonfile": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", + "integrity": "sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==", + "dev": true, + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/@nomiclabs/hardhat-docker/node_modules/JSONStream": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/JSONStream/-/JSONStream-1.3.2.tgz", + "integrity": "sha512-mn0KSip7N4e0UDPZHnqDsHECo5uGQrixQKnAskOM1BIB8hd7QKbd6il8IPRPudPHOeHiECoCFqhyMaRO9+nWyA==", + "dev": true, + "dependencies": { + "jsonparse": "^1.2.0", + "through": ">=2.2.7 <3" + }, + "bin": { + "JSONStream": "bin.js" + }, + "engines": { + "node": "*" + } + }, + "node_modules/@nomiclabs/hardhat-docker/node_modules/pump": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/pump/-/pump-1.0.3.tgz", + "integrity": "sha512-8k0JupWme55+9tCVE+FS5ULT3K6AbgqrGa58lTT49RpyfwwcGedHqaC5LlQNdEAumn/wFsu6aPwkuPMioy8kqw==", + "dev": true, + "dependencies": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + }, + "node_modules/@nomiclabs/hardhat-docker/node_modules/readable-stream": { + "version": "1.0.34", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz", + "integrity": "sha512-ok1qVCJuRkNmvebYikljxJA/UEsKwLl2nI1OmaqAu4/UE+h0wKCHok4XkL/gvi39OacXvw59RJUOFUkDib2rHg==", + "dev": true, + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.1", + "isarray": "0.0.1", + "string_decoder": "~0.10.x" + } + }, + "node_modules/@nomiclabs/hardhat-docker/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true + }, + "node_modules/@nomiclabs/hardhat-docker/node_modules/string_decoder": { + "version": "0.10.31", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", + "integrity": "sha512-ev2QzSzWPYmy9GuqfIVildA4OdcGLeFZQrq5ys6RtiuF+RQQiZWr8TZNyAcuVXyQRYfEO+MsoB/1BuQVhOJuoQ==", + "dev": true + }, + "node_modules/@nomiclabs/hardhat-docker/node_modules/tar-fs": { + "version": "1.16.3", + "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-1.16.3.tgz", + "integrity": "sha512-NvCeXpYx7OsmOh8zIOP/ebG55zZmxLE0etfWRbWok+q2Qo8x/vOR/IJT1taADXPe+jsiu9axDb3X4B+iIgNlKw==", + "dev": true, + "dependencies": { + "chownr": "^1.0.1", + "mkdirp": "^0.5.1", + "pump": "^1.0.0", + "tar-stream": "^1.1.2" + } + }, + "node_modules/@nomiclabs/hardhat-docker/node_modules/tar-stream": { + "version": "1.6.2", + "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-1.6.2.tgz", + "integrity": "sha512-rzS0heiNf8Xn7/mpdSVVSMAWAoy9bfb1WOTYC78Z0UQKeKa/CWS8FOq0lKGNa8DWKAn9gxjCvMLYc5PGXYlK2A==", + "dev": true, + "dependencies": { + "bl": "^1.0.0", + "buffer-alloc": "^1.2.0", + "end-of-stream": "^1.0.0", + "fs-constants": "^1.0.0", + "readable-stream": "^2.3.0", + "to-buffer": "^1.1.1", + "xtend": "^4.0.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/@nomiclabs/hardhat-docker/node_modules/tar-stream/node_modules/isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", + "dev": true + }, + "node_modules/@nomiclabs/hardhat-docker/node_modules/tar-stream/node_modules/readable-stream": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", + "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", + "dev": true, + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "node_modules/@nomiclabs/hardhat-docker/node_modules/tar-stream/node_modules/string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dev": true, + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, + "node_modules/@nomiclabs/hardhat-docker/node_modules/universalify": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", + "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", + "dev": true, + "engines": { + "node": ">= 4.0.0" + } + }, "node_modules/@nomiclabs/hardhat-ethers": { "version": "2.2.1", "resolved": "https://registry.npmjs.org/@nomiclabs/hardhat-ethers/-/hardhat-ethers-2.2.1.tgz", "integrity": "sha512-RHWYwnxryWR8hzRmU4Jm/q4gzvXpetUOJ4OPlwH2YARcDB+j79+yAYCwO0lN1SUOb4++oOTJEe6AWLEc42LIvg==", - "dev": true, "peerDependencies": { "ethers": "^5.0.0", "hardhat": "^2.0.0" @@ -3430,9 +3752,9 @@ } }, "node_modules/@openzeppelin/contracts": { - "version": "4.8.0", - "resolved": "https://registry.npmjs.org/@openzeppelin/contracts/-/contracts-4.8.0.tgz", - "integrity": "sha512-AGuwhRRL+NaKx73WKRNzeCxOCOCxpaqF+kp8TJ89QzAipSwZy/NoflkWaL9bywXFRhIzXt8j38sfF7KBKCPWLw==" + "version": "4.8.2", + "resolved": "https://registry.npmjs.org/@openzeppelin/contracts/-/contracts-4.8.2.tgz", + "integrity": "sha512-kEUOgPQszC0fSYWpbh2kT94ltOJwj1qfT2DWo+zVttmGmf97JZ99LspePNaeeaLhCImaHVeBbjaQFZQn7+Zc5g==" }, "node_modules/@openzeppelin/contracts-v0.7": { "name": "@openzeppelin/contracts", @@ -4921,6 +5243,30 @@ "node": ">=8" } }, + "node_modules/@tsconfig/node10": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.9.tgz", + "integrity": "sha512-jNsYVVxU8v5g43Erja32laIDHXeoNvFEpX33OK4d6hljo3jDhCBDhx5dhCCTMWUojscpAagGiRkBKxpdl9fxqA==", + "devOptional": true + }, + "node_modules/@tsconfig/node12": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/@tsconfig/node12/-/node12-1.0.11.tgz", + "integrity": "sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==", + "devOptional": true + }, + "node_modules/@tsconfig/node14": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@tsconfig/node14/-/node14-1.0.3.tgz", + "integrity": "sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==", + "devOptional": true + }, + "node_modules/@tsconfig/node16": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.3.tgz", + "integrity": "sha512-yOlFc+7UtL/89t2ZhjPvvB/DeAr3r+Dq58IgzsFkOAvVC6NMJXmCGjbptdXdR9qsX7pKcTL+s87FtYREi2dEEQ==", + "devOptional": true + }, "node_modules/@typechain/ethers-v5": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/@typechain/ethers-v5/-/ethers-v5-2.0.0.tgz", @@ -4994,8 +5340,16 @@ "node_modules/@types/chai": { "version": "4.3.3", "resolved": "https://registry.npmjs.org/@types/chai/-/chai-4.3.3.tgz", - "integrity": "sha512-hC7OMnszpxhZPduX+m+nrx+uFoLkWOMiR4oa/AZF3MuSETYTZmFfJAHqZEM8MVlvfG7BEUcgvtwoCTxBp6hm3g==", - "dev": true + "integrity": "sha512-hC7OMnszpxhZPduX+m+nrx+uFoLkWOMiR4oa/AZF3MuSETYTZmFfJAHqZEM8MVlvfG7BEUcgvtwoCTxBp6hm3g==" + }, + "node_modules/@types/chai-as-promised": { + "version": "7.1.5", + "resolved": "https://registry.npmjs.org/@types/chai-as-promised/-/chai-as-promised-7.1.5.tgz", + "integrity": "sha512-jStwss93SITGBwt/niYrkf2C+/1KTeZCZl1LaeezTlqppAKeoQC7jxyqYuP72sxBGKCIbw7oHgbYssIRzT5FCQ==", + "peer": true, + "dependencies": { + "@types/chai": "*" + } }, "node_modules/@types/concat-stream": { "version": "1.6.1", @@ -5583,6 +5937,27 @@ "node": ">= 0.6" } }, + "node_modules/acorn": { + "version": "8.8.2", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.2.tgz", + "integrity": "sha512-xjIYgE8HBrkpd/sJqOGNspf8uHG+NOHGOw6a/Urj8taM2EXfdNAH2oFcPeIFfsv3+kz/mJrS5VuMqbNLjCa2vw==", + "devOptional": true, + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/acorn-walk": { + "version": "8.2.0", + "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.2.0.tgz", + "integrity": "sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==", + "devOptional": true, + "engines": { + "node": ">=0.4.0" + } + }, "node_modules/adm-zip": { "version": "0.4.16", "resolved": "https://registry.npmjs.org/adm-zip/-/adm-zip-0.4.16.tgz", @@ -6065,8 +6440,7 @@ "version": "4.1.3", "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz", "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==", - "optional": true, - "peer": true + "devOptional": true }, "node_modules/argparse": { "version": "2.0.1", @@ -6474,7 +6848,7 @@ "version": "4.1.0", "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", - "optional": true, + "devOptional": true, "dependencies": { "buffer": "^5.5.0", "inherits": "^2.0.4", @@ -6485,6 +6859,7 @@ "version": "5.7.1", "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", + "devOptional": true, "funding": [ { "type": "github", @@ -6499,7 +6874,6 @@ "url": "https://feross.org/support" } ], - "optional": true, "dependencies": { "base64-js": "^1.3.1", "ieee754": "^1.1.13" @@ -6823,6 +7197,16 @@ "node": ">=8.0.0" } }, + "node_modules/buildcheck": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/buildcheck/-/buildcheck-0.0.3.tgz", + "integrity": "sha512-pziaA+p/wdVImfcbsZLNF32EiWyujlQLwolMqUQE8xpKNOH7KmZQaY8sXN7DGOEzPAElo9QTaeNRfGnf3iOJbA==", + "dev": true, + "optional": true, + "engines": { + "node": ">=10.0.0" + } + }, "node_modules/bunyan": { "version": "1.8.15", "resolved": "https://registry.npmjs.org/bunyan/-/bunyan-1.8.15.tgz", @@ -6993,6 +7377,18 @@ "node": ">=4" } }, + "node_modules/chai-as-promised": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/chai-as-promised/-/chai-as-promised-7.1.1.tgz", + "integrity": "sha512-azL6xMoi+uxu6z4rhWQ1jbdUhOMhis2PvscD/xjLqNMkv3BPPp2JyyuTHOrf9BOosGpNQ11v6BKv/g57RXbiaA==", + "peer": true, + "dependencies": { + "check-error": "^1.0.2" + }, + "peerDependencies": { + "chai": ">= 2.1.2 < 5" + } + }, "node_modules/chalk": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", @@ -7604,6 +8000,21 @@ "node": ">= 0.10" } }, + "node_modules/cpu-features": { + "version": "0.0.4", + "resolved": "https://registry.npmjs.org/cpu-features/-/cpu-features-0.0.4.tgz", + "integrity": "sha512-fKiZ/zp1mUwQbnzb9IghXtHtDoTMtNeb8oYGx6kX2SYfhnG0HNdBEBIzB9b5KlXu5DQPhfy3mInbBxFcgwAr3A==", + "dev": true, + "hasInstallScript": true, + "optional": true, + "dependencies": { + "buildcheck": "0.0.3", + "nan": "^2.15.0" + }, + "engines": { + "node": ">=10.0.0" + } + }, "node_modules/crc-32": { "version": "1.2.2", "resolved": "https://registry.npmjs.org/crc-32/-/crc-32-1.2.2.tgz", @@ -7658,8 +8069,7 @@ "version": "1.1.1", "resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz", "integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==", - "optional": true, - "peer": true + "devOptional": true }, "node_modules/cross-fetch": { "version": "3.1.5", @@ -8256,6 +8666,47 @@ "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==" }, + "node_modules/docker-modem": { + "version": "3.0.8", + "resolved": "https://registry.npmjs.org/docker-modem/-/docker-modem-3.0.8.tgz", + "integrity": "sha512-f0ReSURdM3pcKPNS30mxOHSbaFLcknGmQjwSfmbcdOw1XWKXVhukM3NJHhr7NpY9BIyyWQb0EBo3KQvvuU5egQ==", + "dev": true, + "dependencies": { + "debug": "^4.1.1", + "readable-stream": "^3.5.0", + "split-ca": "^1.0.1", + "ssh2": "^1.11.0" + }, + "engines": { + "node": ">= 8.0" + } + }, + "node_modules/dockerode": { + "version": "3.3.5", + "resolved": "https://registry.npmjs.org/dockerode/-/dockerode-3.3.5.tgz", + "integrity": "sha512-/0YNa3ZDNeLr/tSckmD69+Gq+qVNhvKfAHNeZJBnp7EOP6RGKV8ORrJHkUn20So5wU+xxT7+1n5u8PjHbfjbSA==", + "dev": true, + "dependencies": { + "@balena/dockerignore": "^1.0.2", + "docker-modem": "^3.0.0", + "tar-fs": "~2.0.1" + }, + "engines": { + "node": ">= 8.0" + } + }, + "node_modules/dockerode/node_modules/tar-fs": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-2.0.1.tgz", + "integrity": "sha512-6tzWDMeroL87uF/+lin46k+Q+46rAJ0SyPGz7OW7wTgblI273hsBqk2C1j0/xNadNLKDTUL9BukSjB7cwgmlPA==", + "dev": true, + "dependencies": { + "chownr": "^1.1.1", + "mkdirp-classic": "^0.5.2", + "pump": "^3.0.0", + "tar-stream": "^2.0.0" + } + }, "node_modules/dom-serializer": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-2.0.0.tgz", @@ -20176,9 +20627,9 @@ } }, "node_modules/hardhat": { - "version": "2.12.5", - "resolved": "https://registry.npmjs.org/hardhat/-/hardhat-2.12.5.tgz", - "integrity": "sha512-f/t7+hLlhsnQZ6LDXyV+8rHGRZFZY1sgFvgrwr9fBjMdGp1Bu6hHq1KXS4/VFZfZcVdL1DAWWEkryinZhqce+A==", + "version": "2.13.0", + "resolved": "https://registry.npmjs.org/hardhat/-/hardhat-2.13.0.tgz", + "integrity": "sha512-ZlzBOLML1QGlm6JWyVAG8lVTEAoOaVm1in/RU2zoGAnYEoD1Rp4T+ZMvrLNhHaaeS9hfjJ1gJUBfiDr4cx+htQ==", "dependencies": { "@ethersproject/abi": "^5.1.2", "@metamask/eth-sig-util": "^4.0.0", @@ -20227,15 +20678,15 @@ "source-map-support": "^0.5.13", "stacktrace-parser": "^0.1.10", "tsort": "0.0.1", - "undici": "^5.4.0", + "undici": "^5.14.0", "uuid": "^8.3.2", "ws": "^7.4.6" }, "bin": { - "hardhat": "internal/cli/cli.js" + "hardhat": "internal/cli/bootstrap.js" }, "engines": { - "node": "^14.0.0 || ^16.0.0 || ^18.0.0" + "node": ">=14.0.0" }, "peerDependencies": { "ts-node": "*", @@ -20311,6 +20762,15 @@ "node": ">=12" } }, + "node_modules/hardhat-deploy/node_modules/zksync-web3": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/zksync-web3/-/zksync-web3-0.8.1.tgz", + "integrity": "sha512-1A4aHPQ3MyuGjpv5X/8pVEN+MdZqMjfVmiweQSRjOlklXYu65wT9BGEOtCmMs5d3gIvLp4ssfTeuR5OCKOD2kw==", + "dev": true, + "peerDependencies": { + "ethers": "~5.7.0" + } + }, "node_modules/hardhat-gas-reporter": { "version": "1.0.9", "resolved": "https://registry.npmjs.org/hardhat-gas-reporter/-/hardhat-gas-reporter-1.0.9.tgz", @@ -22289,8 +22749,7 @@ "version": "1.3.6", "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==", - "optional": true, - "peer": true + "devOptional": true }, "node_modules/markdown-table": { "version": "1.1.3", @@ -22619,7 +23078,7 @@ "version": "0.5.3", "resolved": "https://registry.npmjs.org/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz", "integrity": "sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==", - "optional": true + "devOptional": true }, "node_modules/mkdirp-promise": { "version": "5.0.1", @@ -23498,6 +23957,12 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/ordinal": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/ordinal/-/ordinal-1.0.3.tgz", + "integrity": "sha512-cMddMgb2QElm8G7vdaa02jhUNbTSrhsgAGUz1OokD83uJTwSUn+nKoNoKVVaRa08yF6sgfO7Maou1+bgLd9rdQ==", + "peer": true + }, "node_modules/original-require": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/original-require/-/original-require-1.0.1.tgz", @@ -25769,11 +26234,35 @@ "integrity": "sha512-rr+VVSXtRhO4OHbXUiAF7xW3Bo9DuuF6C5jH+q/x15j2jniycgKbxU09Hr0WqlSLUs4i4ltHGXqTe7VHclYWyA==", "dev": true }, + "node_modules/split-ca": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/split-ca/-/split-ca-1.0.1.tgz", + "integrity": "sha512-Q5thBSxp5t8WPTTJQS59LrGqOZqOsrhDGDVm8azCqIBjSBd7nd9o2PM+mDulQQkh8h//4U6hFZnc/mul8t5pWQ==", + "dev": true + }, "node_modules/sprintf-js": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==" }, + "node_modules/ssh2": { + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/ssh2/-/ssh2-1.11.0.tgz", + "integrity": "sha512-nfg0wZWGSsfUe/IBJkXVll3PEZ//YH2guww+mP88gTpuSU4FtZN7zu9JoeTGOyCNx2dTDtT9fOpWwlzyj4uOOw==", + "dev": true, + "hasInstallScript": true, + "dependencies": { + "asn1": "^0.2.4", + "bcrypt-pbkdf": "^1.0.2" + }, + "engines": { + "node": ">=10.16.0" + }, + "optionalDependencies": { + "cpu-features": "~0.0.4", + "nan": "^2.16.0" + } + }, "node_modules/sshpk": { "version": "1.17.0", "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.17.0.tgz", @@ -26336,7 +26825,7 @@ "version": "2.2.0", "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-2.2.0.tgz", "integrity": "sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==", - "optional": true, + "devOptional": true, "dependencies": { "bl": "^4.0.3", "end-of-stream": "^1.4.1", @@ -27676,38 +28165,53 @@ } }, "node_modules/ts-node": { - "version": "9.1.1", - "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-9.1.1.tgz", - "integrity": "sha512-hPlt7ZACERQGf03M253ytLY3dHbGNGrAq9qIHWUY9XHYl1z7wYngSr3OQ5xmui8o2AaxsONxIzjafLUiWBo1Fg==", - "optional": true, - "peer": true, + "version": "10.9.1", + "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.9.1.tgz", + "integrity": "sha512-NtVysVPkxxrwFGUUxGYhfux8k78pQB3JqYBXlLRZgdGUqTO5wU/UyHop5p70iEbGhB7q5KmiZiU0Y3KlJrScEw==", + "devOptional": true, "dependencies": { + "@cspotcode/source-map-support": "^0.8.0", + "@tsconfig/node10": "^1.0.7", + "@tsconfig/node12": "^1.0.7", + "@tsconfig/node14": "^1.0.0", + "@tsconfig/node16": "^1.0.2", + "acorn": "^8.4.1", + "acorn-walk": "^8.1.1", "arg": "^4.1.0", "create-require": "^1.1.0", "diff": "^4.0.1", "make-error": "^1.1.1", - "source-map-support": "^0.5.17", + "v8-compile-cache-lib": "^3.0.1", "yn": "3.1.1" }, "bin": { "ts-node": "dist/bin.js", + "ts-node-cwd": "dist/bin-cwd.js", + "ts-node-esm": "dist/bin-esm.js", "ts-node-script": "dist/bin-script.js", "ts-node-transpile-only": "dist/bin-transpile.js", "ts-script": "dist/bin-script-deprecated.js" }, - "engines": { - "node": ">=10.0.0" - }, "peerDependencies": { + "@swc/core": ">=1.2.50", + "@swc/wasm": ">=1.2.50", + "@types/node": "*", "typescript": ">=2.7" + }, + "peerDependenciesMeta": { + "@swc/core": { + "optional": true + }, + "@swc/wasm": { + "optional": true + } } }, "node_modules/ts-node/node_modules/diff": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", - "optional": true, - "peer": true, + "devOptional": true, "engines": { "node": ">=0.3.1" } @@ -27860,15 +28364,16 @@ } }, "node_modules/typescript": { - "version": "4.9.4", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.9.4.tgz", - "integrity": "sha512-Uz+dTXYzxXXbsFpM86Wh3dKCxrQqUcVMxwU54orwlJjOpO3ao8L7j5lH+dWfTwgCwIuM9GQ2kvVotzYJMXTBZg==", + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.0.3.tgz", + "integrity": "sha512-xv8mOEDnigb/tN9PSMTwSEqAnUvkoXMQlicOb0IUVDBSQCgBSaAAROUZYy2IcUy5qU6XajK5jjjO7TMWqBTKZA==", + "devOptional": true, "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" }, "engines": { - "node": ">=4.2.0" + "node": ">=12.20" } }, "node_modules/typescript-compare": { @@ -27966,9 +28471,9 @@ "dev": true }, "node_modules/undici": { - "version": "5.11.0", - "resolved": "https://registry.npmjs.org/undici/-/undici-5.11.0.tgz", - "integrity": "sha512-oWjWJHzFet0Ow4YZBkyiJwiK5vWqEYoH7BINzJAJOLedZ++JpAlCbUktW2GQ2DS2FpKmxD/JMtWUUWl1BtghGw==", + "version": "5.21.0", + "resolved": "https://registry.npmjs.org/undici/-/undici-5.21.0.tgz", + "integrity": "sha512-HOjK8l6a57b2ZGXOcUsI5NLfoTrfmbOl90ixJDl0AEFG4wgHNDQxtZy15/ZQp7HhjkpaGlp/eneMgtsu1dIlUA==", "dependencies": { "busboy": "^1.6.0" }, @@ -28148,6 +28653,12 @@ "uuid": "dist/bin/uuid" } }, + "node_modules/v8-compile-cache-lib": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz", + "integrity": "sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==", + "devOptional": true + }, "node_modules/validate-npm-package-license": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", @@ -29164,8 +29675,7 @@ "version": "3.1.1", "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz", "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==", - "optional": true, - "peer": true, + "devOptional": true, "engines": { "node": ">=6" } @@ -29182,12 +29692,12 @@ } }, "node_modules/zksync-web3": { - "version": "0.8.1", - "resolved": "https://registry.npmjs.org/zksync-web3/-/zksync-web3-0.8.1.tgz", - "integrity": "sha512-1A4aHPQ3MyuGjpv5X/8pVEN+MdZqMjfVmiweQSRjOlklXYu65wT9BGEOtCmMs5d3gIvLp4ssfTeuR5OCKOD2kw==", + "version": "0.14.3", + "resolved": "https://registry.npmjs.org/zksync-web3/-/zksync-web3-0.14.3.tgz", + "integrity": "sha512-hT72th4AnqyLW1d5Jlv8N2B/qhEnl2NePK2A3org7tAa24niem/UAaHMkEvmWI3SF9waYUPtqAtjpf+yvQ9zvQ==", "dev": true, "peerDependencies": { - "ethers": "~5.7.0" + "ethers": "^5.7.0" } } }, @@ -29669,6 +30179,12 @@ "to-fast-properties": "^2.0.0" } }, + "@balena/dockerignore": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@balena/dockerignore/-/dockerignore-1.0.2.tgz", + "integrity": "sha512-wMue2Sy4GAVTk6Ic4tJVcnfdau+gx2EnG7S+uAEe+TWJFqE4YoWN4/H8MSLj4eYJKxGg26lZwboEniNiNwZQ6Q==", + "dev": true + }, "@chainlink/contracts": { "version": "0.5.1", "resolved": "https://registry.npmjs.org/@chainlink/contracts/-/contracts-0.5.1.tgz", @@ -29685,6 +30201,27 @@ "integrity": "sha512-ooWCrlZP11i8GImSjTHYHLkvFDP48nS4+204nGb1RiX/WXYHmJA2III9/e2DWVabCESdW7hBAEzHRqUn9OUVvQ==", "optional": true }, + "@cspotcode/source-map-support": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz", + "integrity": "sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==", + "devOptional": true, + "requires": { + "@jridgewell/trace-mapping": "0.3.9" + }, + "dependencies": { + "@jridgewell/trace-mapping": { + "version": "0.3.9", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz", + "integrity": "sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==", + "devOptional": true, + "requires": { + "@jridgewell/resolve-uri": "^3.0.3", + "@jridgewell/sourcemap-codec": "^1.4.10" + } + } + } + }, "@ensdomains/address-encoder": { "version": "0.1.9", "resolved": "https://registry.npmjs.org/@ensdomains/address-encoder/-/address-encoder-0.1.9.tgz", @@ -30652,8 +31189,7 @@ "@jridgewell/resolve-uri": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz", - "integrity": "sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==", - "peer": true + "integrity": "sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==" }, "@jridgewell/set-array": { "version": "1.1.2", @@ -30664,8 +31200,7 @@ "@jridgewell/sourcemap-codec": { "version": "1.4.14", "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz", - "integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==", - "peer": true + "integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==" }, "@jridgewell/trace-mapping": { "version": "0.3.17", @@ -30846,6 +31381,32 @@ "web3": "^1.8.0" } }, + "@matterlabs/hardhat-zksync-chai-matchers": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/@matterlabs/hardhat-zksync-chai-matchers/-/hardhat-zksync-chai-matchers-0.1.2.tgz", + "integrity": "sha512-lJWlVgnu4p0QvMucEdeVOWxCpPZogsygntN+RXLMS0R4PnqwslKHfG1ZbcgWRWQ7vgABqCCIF7d1GjieWdlFmQ==", + "requires": {} + }, + "@matterlabs/hardhat-zksync-deploy": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/@matterlabs/hardhat-zksync-deploy/-/hardhat-zksync-deploy-0.6.3.tgz", + "integrity": "sha512-FB+2xFL/80JJwlGna+aHA6dk4ONrMFqThTZATYVJUAKooA0Aw5qmpmM8B3qsNB4LLzHSO/EmVrHIcLaPv8hYwQ==", + "dev": true, + "requires": { + "chalk": "4.1.2" + } + }, + "@matterlabs/hardhat-zksync-solc": { + "version": "0.3.14", + "resolved": "https://registry.npmjs.org/@matterlabs/hardhat-zksync-solc/-/hardhat-zksync-solc-0.3.14.tgz", + "integrity": "sha512-iKuQ+vvnpv3K2lkFO41xpJcNWH0KHJ/5JbOboTlPZATVR7F3GJeHfJL+GG4wkxKXnxZczpxyQqC4rAfMKvRaDg==", + "dev": true, + "requires": { + "@nomiclabs/hardhat-docker": "^2.0.0", + "chalk": "4.1.2", + "dockerode": "^3.3.4" + } + }, "@metamask/eth-sig-util": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/@metamask/eth-sig-util/-/eth-sig-util-4.0.1.tgz", @@ -31287,6 +31848,19 @@ } } }, + "@nomicfoundation/hardhat-chai-matchers": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/@nomicfoundation/hardhat-chai-matchers/-/hardhat-chai-matchers-1.0.6.tgz", + "integrity": "sha512-f5ZMNmabZeZegEfuxn/0kW+mm7+yV7VNDxLpMOMGXWFJ2l/Ct3QShujzDRF9cOkK9Ui/hbDeOWGZqyQALDXVCQ==", + "peer": true, + "requires": { + "@ethersproject/abi": "^5.1.2", + "@types/chai-as-promised": "^7.1.3", + "chai-as-promised": "^7.1.1", + "deep-eql": "^4.0.1", + "ordinal": "^1.0.3" + } + }, "@nomicfoundation/solidity-analyzer": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/@nomicfoundation/solidity-analyzer/-/solidity-analyzer-0.1.0.tgz", @@ -31364,11 +31938,232 @@ "integrity": "sha512-xCuybjY0sLJQnJhupiFAXaek2EqF0AP0eBjgzaalPXSNvCEN6ZYHvUzdA50ENDVeSYFXcUsYf3+FsD3XKaeptA==", "optional": true }, + "@nomiclabs/hardhat-docker": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/@nomiclabs/hardhat-docker/-/hardhat-docker-2.0.2.tgz", + "integrity": "sha512-XgGEpRT3wlA1VslyB57zyAHV+oll8KnV1TjwnxxC1tpAL04/lbdwpdO5KxInVN8irMSepqFpsiSkqlcnvbE7Ng==", + "dev": true, + "requires": { + "dockerode": "^2.5.8", + "fs-extra": "^7.0.1", + "node-fetch": "^2.6.0" + }, + "dependencies": { + "bl": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/bl/-/bl-1.2.3.tgz", + "integrity": "sha512-pvcNpa0UU69UT341rO6AYy4FVAIkUHuZXRIWbq+zHnsVcRzDDjIAhGuuYoi0d//cwIwtt4pkpKycWEfjdV+vww==", + "dev": true, + "requires": { + "readable-stream": "^2.3.5", + "safe-buffer": "^5.1.1" + }, + "dependencies": { + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", + "dev": true + }, + "readable-stream": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", + "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", + "dev": true, + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dev": true, + "requires": { + "safe-buffer": "~5.1.0" + } + } + } + }, + "debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dev": true, + "requires": { + "ms": "^2.1.1" + } + }, + "docker-modem": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/docker-modem/-/docker-modem-1.0.9.tgz", + "integrity": "sha512-lVjqCSCIAUDZPAZIeyM125HXfNvOmYYInciphNrLrylUtKyW66meAjSPXWchKVzoIYZx69TPnAepVSSkeawoIw==", + "dev": true, + "requires": { + "debug": "^3.2.6", + "JSONStream": "1.3.2", + "readable-stream": "~1.0.26-4", + "split-ca": "^1.0.0" + } + }, + "dockerode": { + "version": "2.5.8", + "resolved": "https://registry.npmjs.org/dockerode/-/dockerode-2.5.8.tgz", + "integrity": "sha512-+7iOUYBeDTScmOmQqpUYQaE7F4vvIt6+gIZNHWhqAQEI887tiPFB9OvXI/HzQYqfUNvukMK+9myLW63oTJPZpw==", + "dev": true, + "requires": { + "concat-stream": "~1.6.2", + "docker-modem": "^1.0.8", + "tar-fs": "~1.16.3" + } + }, + "fs-extra": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-7.0.1.tgz", + "integrity": "sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==", + "dev": true, + "requires": { + "graceful-fs": "^4.1.2", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" + } + }, + "isarray": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", + "integrity": "sha512-D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ==", + "dev": true + }, + "jsonfile": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", + "integrity": "sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==", + "dev": true, + "requires": { + "graceful-fs": "^4.1.6" + } + }, + "JSONStream": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/JSONStream/-/JSONStream-1.3.2.tgz", + "integrity": "sha512-mn0KSip7N4e0UDPZHnqDsHECo5uGQrixQKnAskOM1BIB8hd7QKbd6il8IPRPudPHOeHiECoCFqhyMaRO9+nWyA==", + "dev": true, + "requires": { + "jsonparse": "^1.2.0", + "through": ">=2.2.7 <3" + } + }, + "pump": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/pump/-/pump-1.0.3.tgz", + "integrity": "sha512-8k0JupWme55+9tCVE+FS5ULT3K6AbgqrGa58lTT49RpyfwwcGedHqaC5LlQNdEAumn/wFsu6aPwkuPMioy8kqw==", + "dev": true, + "requires": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + }, + "readable-stream": { + "version": "1.0.34", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz", + "integrity": "sha512-ok1qVCJuRkNmvebYikljxJA/UEsKwLl2nI1OmaqAu4/UE+h0wKCHok4XkL/gvi39OacXvw59RJUOFUkDib2rHg==", + "dev": true, + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.1", + "isarray": "0.0.1", + "string_decoder": "~0.10.x" + } + }, + "safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true + }, + "string_decoder": { + "version": "0.10.31", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", + "integrity": "sha512-ev2QzSzWPYmy9GuqfIVildA4OdcGLeFZQrq5ys6RtiuF+RQQiZWr8TZNyAcuVXyQRYfEO+MsoB/1BuQVhOJuoQ==", + "dev": true + }, + "tar-fs": { + "version": "1.16.3", + "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-1.16.3.tgz", + "integrity": "sha512-NvCeXpYx7OsmOh8zIOP/ebG55zZmxLE0etfWRbWok+q2Qo8x/vOR/IJT1taADXPe+jsiu9axDb3X4B+iIgNlKw==", + "dev": true, + "requires": { + "chownr": "^1.0.1", + "mkdirp": "^0.5.1", + "pump": "^1.0.0", + "tar-stream": "^1.1.2" + } + }, + "tar-stream": { + "version": "1.6.2", + "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-1.6.2.tgz", + "integrity": "sha512-rzS0heiNf8Xn7/mpdSVVSMAWAoy9bfb1WOTYC78Z0UQKeKa/CWS8FOq0lKGNa8DWKAn9gxjCvMLYc5PGXYlK2A==", + "dev": true, + "requires": { + "bl": "^1.0.0", + "buffer-alloc": "^1.2.0", + "end-of-stream": "^1.0.0", + "fs-constants": "^1.0.0", + "readable-stream": "^2.3.0", + "to-buffer": "^1.1.1", + "xtend": "^4.0.0" + }, + "dependencies": { + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", + "dev": true + }, + "readable-stream": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", + "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", + "dev": true, + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dev": true, + "requires": { + "safe-buffer": "~5.1.0" + } + } + } + }, + "universalify": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", + "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", + "dev": true + } + } + }, "@nomiclabs/hardhat-ethers": { "version": "2.2.1", "resolved": "https://registry.npmjs.org/@nomiclabs/hardhat-ethers/-/hardhat-ethers-2.2.1.tgz", "integrity": "sha512-RHWYwnxryWR8hzRmU4Jm/q4gzvXpetUOJ4OPlwH2YARcDB+j79+yAYCwO0lN1SUOb4++oOTJEe6AWLEc42LIvg==", - "dev": true, "requires": {} }, "@nomiclabs/hardhat-etherscan": { @@ -31735,9 +32530,9 @@ } }, "@openzeppelin/contracts": { - "version": "4.8.0", - "resolved": "https://registry.npmjs.org/@openzeppelin/contracts/-/contracts-4.8.0.tgz", - "integrity": "sha512-AGuwhRRL+NaKx73WKRNzeCxOCOCxpaqF+kp8TJ89QzAipSwZy/NoflkWaL9bywXFRhIzXt8j38sfF7KBKCPWLw==" + "version": "4.8.2", + "resolved": "https://registry.npmjs.org/@openzeppelin/contracts/-/contracts-4.8.2.tgz", + "integrity": "sha512-kEUOgPQszC0fSYWpbh2kT94ltOJwj1qfT2DWo+zVttmGmf97JZ99LspePNaeeaLhCImaHVeBbjaQFZQn7+Zc5g==" }, "@openzeppelin/contracts-v0.7": { "version": "npm:@openzeppelin/contracts@3.4.2", @@ -33056,6 +33851,30 @@ } } }, + "@tsconfig/node10": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.9.tgz", + "integrity": "sha512-jNsYVVxU8v5g43Erja32laIDHXeoNvFEpX33OK4d6hljo3jDhCBDhx5dhCCTMWUojscpAagGiRkBKxpdl9fxqA==", + "devOptional": true + }, + "@tsconfig/node12": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/@tsconfig/node12/-/node12-1.0.11.tgz", + "integrity": "sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==", + "devOptional": true + }, + "@tsconfig/node14": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@tsconfig/node14/-/node14-1.0.3.tgz", + "integrity": "sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==", + "devOptional": true + }, + "@tsconfig/node16": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.3.tgz", + "integrity": "sha512-yOlFc+7UtL/89t2ZhjPvvB/DeAr3r+Dq58IgzsFkOAvVC6NMJXmCGjbptdXdR9qsX7pKcTL+s87FtYREi2dEEQ==", + "devOptional": true + }, "@typechain/ethers-v5": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/@typechain/ethers-v5/-/ethers-v5-2.0.0.tgz", @@ -33124,8 +33943,16 @@ "@types/chai": { "version": "4.3.3", "resolved": "https://registry.npmjs.org/@types/chai/-/chai-4.3.3.tgz", - "integrity": "sha512-hC7OMnszpxhZPduX+m+nrx+uFoLkWOMiR4oa/AZF3MuSETYTZmFfJAHqZEM8MVlvfG7BEUcgvtwoCTxBp6hm3g==", - "dev": true + "integrity": "sha512-hC7OMnszpxhZPduX+m+nrx+uFoLkWOMiR4oa/AZF3MuSETYTZmFfJAHqZEM8MVlvfG7BEUcgvtwoCTxBp6hm3g==" + }, + "@types/chai-as-promised": { + "version": "7.1.5", + "resolved": "https://registry.npmjs.org/@types/chai-as-promised/-/chai-as-promised-7.1.5.tgz", + "integrity": "sha512-jStwss93SITGBwt/niYrkf2C+/1KTeZCZl1LaeezTlqppAKeoQC7jxyqYuP72sxBGKCIbw7oHgbYssIRzT5FCQ==", + "peer": true, + "requires": { + "@types/chai": "*" + } }, "@types/concat-stream": { "version": "1.6.1", @@ -33633,6 +34460,18 @@ "negotiator": "0.6.3" } }, + "acorn": { + "version": "8.8.2", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.2.tgz", + "integrity": "sha512-xjIYgE8HBrkpd/sJqOGNspf8uHG+NOHGOw6a/Urj8taM2EXfdNAH2oFcPeIFfsv3+kz/mJrS5VuMqbNLjCa2vw==", + "devOptional": true + }, + "acorn-walk": { + "version": "8.2.0", + "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.2.0.tgz", + "integrity": "sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==", + "devOptional": true + }, "adm-zip": { "version": "0.4.16", "resolved": "https://registry.npmjs.org/adm-zip/-/adm-zip-0.4.16.tgz", @@ -34018,8 +34857,7 @@ "version": "4.1.3", "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz", "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==", - "optional": true, - "peer": true + "devOptional": true }, "argparse": { "version": "2.0.1", @@ -34343,7 +35181,7 @@ "version": "4.1.0", "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", - "optional": true, + "devOptional": true, "requires": { "buffer": "^5.5.0", "inherits": "^2.0.4", @@ -34354,7 +35192,7 @@ "version": "5.7.1", "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", - "optional": true, + "devOptional": true, "requires": { "base64-js": "^1.3.1", "ieee754": "^1.1.13" @@ -34629,6 +35467,13 @@ "resolved": "https://registry.npmjs.org/bufio/-/bufio-1.1.3.tgz", "integrity": "sha512-W0ydG8t+ST+drUpEwl1N+dU9Ije06g8+43CLtvEIzfKo9nPFLXbKqDYE2XSg4w6RugsBcCj7pEU7jOpBC6BqrA==" }, + "buildcheck": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/buildcheck/-/buildcheck-0.0.3.tgz", + "integrity": "sha512-pziaA+p/wdVImfcbsZLNF32EiWyujlQLwolMqUQE8xpKNOH7KmZQaY8sXN7DGOEzPAElo9QTaeNRfGnf3iOJbA==", + "dev": true, + "optional": true + }, "bunyan": { "version": "1.8.15", "resolved": "https://registry.npmjs.org/bunyan/-/bunyan-1.8.15.tgz", @@ -34749,6 +35594,15 @@ "type-detect": "^4.0.5" } }, + "chai-as-promised": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/chai-as-promised/-/chai-as-promised-7.1.1.tgz", + "integrity": "sha512-azL6xMoi+uxu6z4rhWQ1jbdUhOMhis2PvscD/xjLqNMkv3BPPp2JyyuTHOrf9BOosGpNQ11v6BKv/g57RXbiaA==", + "peer": true, + "requires": { + "check-error": "^1.0.2" + } + }, "chalk": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", @@ -35230,6 +36084,17 @@ "vary": "^1" } }, + "cpu-features": { + "version": "0.0.4", + "resolved": "https://registry.npmjs.org/cpu-features/-/cpu-features-0.0.4.tgz", + "integrity": "sha512-fKiZ/zp1mUwQbnzb9IghXtHtDoTMtNeb8oYGx6kX2SYfhnG0HNdBEBIzB9b5KlXu5DQPhfy3mInbBxFcgwAr3A==", + "dev": true, + "optional": true, + "requires": { + "buildcheck": "0.0.3", + "nan": "^2.15.0" + } + }, "crc-32": { "version": "1.2.2", "resolved": "https://registry.npmjs.org/crc-32/-/crc-32-1.2.2.tgz", @@ -35280,8 +36145,7 @@ "version": "1.1.1", "resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz", "integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==", - "optional": true, - "peer": true + "devOptional": true }, "cross-fetch": { "version": "3.1.5", @@ -35739,6 +36603,43 @@ } } }, + "docker-modem": { + "version": "3.0.8", + "resolved": "https://registry.npmjs.org/docker-modem/-/docker-modem-3.0.8.tgz", + "integrity": "sha512-f0ReSURdM3pcKPNS30mxOHSbaFLcknGmQjwSfmbcdOw1XWKXVhukM3NJHhr7NpY9BIyyWQb0EBo3KQvvuU5egQ==", + "dev": true, + "requires": { + "debug": "^4.1.1", + "readable-stream": "^3.5.0", + "split-ca": "^1.0.1", + "ssh2": "^1.11.0" + } + }, + "dockerode": { + "version": "3.3.5", + "resolved": "https://registry.npmjs.org/dockerode/-/dockerode-3.3.5.tgz", + "integrity": "sha512-/0YNa3ZDNeLr/tSckmD69+Gq+qVNhvKfAHNeZJBnp7EOP6RGKV8ORrJHkUn20So5wU+xxT7+1n5u8PjHbfjbSA==", + "dev": true, + "requires": { + "@balena/dockerignore": "^1.0.2", + "docker-modem": "^3.0.0", + "tar-fs": "~2.0.1" + }, + "dependencies": { + "tar-fs": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-2.0.1.tgz", + "integrity": "sha512-6tzWDMeroL87uF/+lin46k+Q+46rAJ0SyPGz7OW7wTgblI273hsBqk2C1j0/xNadNLKDTUL9BukSjB7cwgmlPA==", + "dev": true, + "requires": { + "chownr": "^1.1.1", + "mkdirp-classic": "^0.5.2", + "pump": "^3.0.0", + "tar-stream": "^2.0.0" + } + } + } + }, "dom-serializer": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-2.0.0.tgz", @@ -44925,9 +45826,9 @@ } }, "hardhat": { - "version": "2.12.5", - "resolved": "https://registry.npmjs.org/hardhat/-/hardhat-2.12.5.tgz", - "integrity": "sha512-f/t7+hLlhsnQZ6LDXyV+8rHGRZFZY1sgFvgrwr9fBjMdGp1Bu6hHq1KXS4/VFZfZcVdL1DAWWEkryinZhqce+A==", + "version": "2.13.0", + "resolved": "https://registry.npmjs.org/hardhat/-/hardhat-2.13.0.tgz", + "integrity": "sha512-ZlzBOLML1QGlm6JWyVAG8lVTEAoOaVm1in/RU2zoGAnYEoD1Rp4T+ZMvrLNhHaaeS9hfjJ1gJUBfiDr4cx+htQ==", "requires": { "@ethersproject/abi": "^5.1.2", "@metamask/eth-sig-util": "^4.0.0", @@ -44976,7 +45877,7 @@ "source-map-support": "^0.5.13", "stacktrace-parser": "^0.1.10", "tsort": "0.0.1", - "undici": "^5.4.0", + "undici": "^5.14.0", "uuid": "^8.3.2", "ws": "^7.4.6" }, @@ -45238,6 +46139,13 @@ "jsonfile": "^6.0.1", "universalify": "^2.0.0" } + }, + "zksync-web3": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/zksync-web3/-/zksync-web3-0.8.1.tgz", + "integrity": "sha512-1A4aHPQ3MyuGjpv5X/8pVEN+MdZqMjfVmiweQSRjOlklXYu65wT9BGEOtCmMs5d3gIvLp4ssfTeuR5OCKOD2kw==", + "dev": true, + "requires": {} } } }, @@ -46500,8 +47408,7 @@ "version": "1.3.6", "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==", - "optional": true, - "peer": true + "devOptional": true }, "markdown-table": { "version": "1.1.3", @@ -46754,7 +47661,7 @@ "version": "0.5.3", "resolved": "https://registry.npmjs.org/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz", "integrity": "sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==", - "optional": true + "devOptional": true }, "mkdirp-promise": { "version": "5.0.1", @@ -47410,6 +48317,12 @@ "is-wsl": "^2.1.1" } }, + "ordinal": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/ordinal/-/ordinal-1.0.3.tgz", + "integrity": "sha512-cMddMgb2QElm8G7vdaa02jhUNbTSrhsgAGUz1OokD83uJTwSUn+nKoNoKVVaRa08yF6sgfO7Maou1+bgLd9rdQ==", + "peer": true + }, "original-require": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/original-require/-/original-require-1.0.1.tgz", @@ -49247,11 +50160,29 @@ "integrity": "sha512-rr+VVSXtRhO4OHbXUiAF7xW3Bo9DuuF6C5jH+q/x15j2jniycgKbxU09Hr0WqlSLUs4i4ltHGXqTe7VHclYWyA==", "dev": true }, + "split-ca": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/split-ca/-/split-ca-1.0.1.tgz", + "integrity": "sha512-Q5thBSxp5t8WPTTJQS59LrGqOZqOsrhDGDVm8azCqIBjSBd7nd9o2PM+mDulQQkh8h//4U6hFZnc/mul8t5pWQ==", + "dev": true + }, "sprintf-js": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==" }, + "ssh2": { + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/ssh2/-/ssh2-1.11.0.tgz", + "integrity": "sha512-nfg0wZWGSsfUe/IBJkXVll3PEZ//YH2guww+mP88gTpuSU4FtZN7zu9JoeTGOyCNx2dTDtT9fOpWwlzyj4uOOw==", + "dev": true, + "requires": { + "asn1": "^0.2.4", + "bcrypt-pbkdf": "^1.0.2", + "cpu-features": "~0.0.4", + "nan": "^2.16.0" + } + }, "sshpk": { "version": "1.17.0", "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.17.0.tgz", @@ -49691,7 +50622,7 @@ "version": "2.2.0", "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-2.2.0.tgz", "integrity": "sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==", - "optional": true, + "devOptional": true, "requires": { "bl": "^4.0.3", "end-of-stream": "^1.4.1", @@ -50808,17 +51739,23 @@ } }, "ts-node": { - "version": "9.1.1", - "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-9.1.1.tgz", - "integrity": "sha512-hPlt7ZACERQGf03M253ytLY3dHbGNGrAq9qIHWUY9XHYl1z7wYngSr3OQ5xmui8o2AaxsONxIzjafLUiWBo1Fg==", - "optional": true, - "peer": true, + "version": "10.9.1", + "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.9.1.tgz", + "integrity": "sha512-NtVysVPkxxrwFGUUxGYhfux8k78pQB3JqYBXlLRZgdGUqTO5wU/UyHop5p70iEbGhB7q5KmiZiU0Y3KlJrScEw==", + "devOptional": true, "requires": { + "@cspotcode/source-map-support": "^0.8.0", + "@tsconfig/node10": "^1.0.7", + "@tsconfig/node12": "^1.0.7", + "@tsconfig/node14": "^1.0.0", + "@tsconfig/node16": "^1.0.2", + "acorn": "^8.4.1", + "acorn-walk": "^8.1.1", "arg": "^4.1.0", "create-require": "^1.1.0", "diff": "^4.0.1", "make-error": "^1.1.1", - "source-map-support": "^0.5.17", + "v8-compile-cache-lib": "^3.0.1", "yn": "3.1.1" }, "dependencies": { @@ -50826,8 +51763,7 @@ "version": "4.0.2", "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", - "optional": true, - "peer": true + "devOptional": true } } }, @@ -50952,9 +51888,10 @@ } }, "typescript": { - "version": "4.9.4", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.9.4.tgz", - "integrity": "sha512-Uz+dTXYzxXXbsFpM86Wh3dKCxrQqUcVMxwU54orwlJjOpO3ao8L7j5lH+dWfTwgCwIuM9GQ2kvVotzYJMXTBZg==" + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.0.3.tgz", + "integrity": "sha512-xv8mOEDnigb/tN9PSMTwSEqAnUvkoXMQlicOb0IUVDBSQCgBSaAAROUZYy2IcUy5qU6XajK5jjjO7TMWqBTKZA==", + "devOptional": true }, "typescript-compare": { "version": "0.0.2", @@ -51036,9 +51973,9 @@ "dev": true }, "undici": { - "version": "5.11.0", - "resolved": "https://registry.npmjs.org/undici/-/undici-5.11.0.tgz", - "integrity": "sha512-oWjWJHzFet0Ow4YZBkyiJwiK5vWqEYoH7BINzJAJOLedZ++JpAlCbUktW2GQ2DS2FpKmxD/JMtWUUWl1BtghGw==", + "version": "5.21.0", + "resolved": "https://registry.npmjs.org/undici/-/undici-5.21.0.tgz", + "integrity": "sha512-HOjK8l6a57b2ZGXOcUsI5NLfoTrfmbOl90ixJDl0AEFG4wgHNDQxtZy15/ZQp7HhjkpaGlp/eneMgtsu1dIlUA==", "requires": { "busboy": "^1.6.0" } @@ -51177,6 +52114,12 @@ "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==" }, + "v8-compile-cache-lib": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz", + "integrity": "sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==", + "devOptional": true + }, "validate-npm-package-license": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", @@ -52046,8 +52989,7 @@ "version": "3.1.1", "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz", "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==", - "optional": true, - "peer": true + "devOptional": true }, "yocto-queue": { "version": "0.1.0", @@ -52055,9 +52997,9 @@ "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==" }, "zksync-web3": { - "version": "0.8.1", - "resolved": "https://registry.npmjs.org/zksync-web3/-/zksync-web3-0.8.1.tgz", - "integrity": "sha512-1A4aHPQ3MyuGjpv5X/8pVEN+MdZqMjfVmiweQSRjOlklXYu65wT9BGEOtCmMs5d3gIvLp4ssfTeuR5OCKOD2kw==", + "version": "0.14.3", + "resolved": "https://registry.npmjs.org/zksync-web3/-/zksync-web3-0.14.3.tgz", + "integrity": "sha512-hT72th4AnqyLW1d5Jlv8N2B/qhEnl2NePK2A3org7tAa24niem/UAaHMkEvmWI3SF9waYUPtqAtjpf+yvQ9zvQ==", "dev": true, "requires": {} } diff --git a/package.json b/package.json index e5a28615..18500d1b 100644 --- a/package.json +++ b/package.json @@ -24,7 +24,8 @@ "@maticnetwork/maticjs": "^3.5.0", "@maticnetwork/maticjs-ethers": "^1.0.3", "@maticnetwork/maticjs-web3": "^1.0.4", - "@openzeppelin/contracts": "^4.8.0", + "@matterlabs/hardhat-zksync-chai-matchers": "^0.1.2", + "@openzeppelin/contracts": "^4.8.2", "@openzeppelin/hardhat-upgrades": "^1.22.0", "@poanet/solidity-flattener": "^3.0.8", "@solana/spl-token": "^0.3.6", @@ -63,13 +64,14 @@ "truffle-contract-size": "^2.0.1", "truffle-hdwallet-provider": "^1.0.6", "tslib": "^2.4.1", - "typescript": "^4.9.4", "util": "^0.12.5", "web3-eth-contract": "^1.8.1", "web3-utils": "^1.8.1", "ws": "^8.11.0" }, "devDependencies": { + "@matterlabs/hardhat-zksync-deploy": "^0.6.3", + "@matterlabs/hardhat-zksync-solc": "^0.3.14", "@nomiclabs/hardhat-ethers": "^2.2.1", "@nomiclabs/hardhat-etherscan": "^3.1.4", "@nomiclabs/hardhat-truffle5": "^2.0.7", @@ -81,9 +83,12 @@ "chai": "^4.3.7", "ethereum-waffle": "^3.4.4", "ethers": "^5.7.2", - "hardhat": "^2.12.5", + "hardhat": "^2.13.0", "hardhat-deploy": "^0.11.22", "json-loader": "^0.5.7", - "web3": "^1.8.1" + "ts-node": "^10.9.1", + "typescript": "^5.0.3", + "web3": "^1.8.1", + "zksync-web3": "^0.14.3" } } diff --git a/src/hardhat/contracts/Staking/FraxUnifiedFarmTemplate_V2.sol b/src/hardhat/contracts/Staking/FraxUnifiedFarmTemplate_V2.sol index a8754979..695b139c 100755 --- a/src/hardhat/contracts/Staking/FraxUnifiedFarmTemplate_V2.sol +++ b/src/hardhat/contracts/Staking/FraxUnifiedFarmTemplate_V2.sol @@ -209,7 +209,6 @@ contract FraxUnifiedFarmTemplate_V2 is OwnedV2, ReentrancyGuardV2 { // Initialization lastUpdateTime = block.timestamp; - periodFinish = block.timestamp + rewardsDuration; // Set the max locked stakes max_locked_stakes = 12; @@ -653,6 +652,9 @@ contract FraxUnifiedFarmTemplate_V2 is OwnedV2, ReentrancyGuardV2 { // If the period expired, renew it function retroCatchUp() internal { + // Catch up the old rewards first + _updateStoredRewardsAndTime(); + // Pull in rewards from the rewards distributor, if applicable for (uint256 i; i < rewardDistributors.length; i++){ address reward_distributor_address = rewardDistributors[i]; diff --git a/src/hardhat/contracts/Staking/FraxUnifiedFarm_ERC20.sol b/src/hardhat/contracts/Staking/FraxUnifiedFarm_ERC20.sol index f5b64256..a6e56848 100755 --- a/src/hardhat/contracts/Staking/FraxUnifiedFarm_ERC20.sol +++ b/src/hardhat/contracts/Staking/FraxUnifiedFarm_ERC20.sol @@ -19,17 +19,17 @@ import "./FraxUnifiedFarmTemplate.sol"; // -------------------- VARIES -------------------- // Convex wrappers -// import "../Curve/ICurvefrxETHETHPool.sol"; -// import "../Misc_AMOs/convex/IConvexStakingWrapperFrax.sol"; -// import "../Misc_AMOs/convex/IDepositToken.sol"; -// import "../Misc_AMOs/curve/I2pool.sol"; -// import "../Misc_AMOs/curve/I2poolToken.sol"; +import "../Curve/ICurvefrxETHETHPool.sol"; +import "../Misc_AMOs/convex/IConvexStakingWrapperFrax.sol"; +import "../Misc_AMOs/convex/IDepositToken.sol"; +import "../Misc_AMOs/curve/I2pool.sol"; +import "../Misc_AMOs/curve/I2poolToken.sol"; // Fraxlend // import '../Fraxlend/IFraxlendPair.sol'; // Fraxswap -import '../Fraxswap/core/interfaces/IFraxswapPair.sol'; +// import '../Fraxswap/core/interfaces/IFraxswapPair.sol'; // G-UNI // import "../Misc_AMOs/gelato/IGUniPool.sol"; @@ -61,13 +61,13 @@ contract FraxUnifiedFarm_ERC20 is FraxUnifiedFarmTemplate { // -------------------- VARIES -------------------- // Convex stkcvxFPIFRAX, stkcvxFRAXBP, etc - // IConvexStakingWrapperFrax public stakingToken; - // I2poolToken public curveToken; - // I2pool public curvePool; + IConvexStakingWrapperFrax public stakingToken; + I2poolToken public curveToken; + I2pool public curvePool; // ICurvefrxETHETHPool public curvePool; // Fraxswap - IFraxswapPair public stakingToken; + // IFraxswapPair public stakingToken; // Fraxlend // IFraxlendPair public stakingToken; diff --git a/src/hardhat/contracts/Staking/Variants/FraxUnifiedFarm_ERC20_Convex_FRAXBP_Stable.sol b/src/hardhat/contracts/Staking/Variants/FraxUnifiedFarm_ERC20_Convex_FRAXBP_Stable.sol index fb0293ed..4f47920c 100755 --- a/src/hardhat/contracts/Staking/Variants/FraxUnifiedFarm_ERC20_Convex_FRAXBP_Stable.sol +++ b/src/hardhat/contracts/Staking/Variants/FraxUnifiedFarm_ERC20_Convex_FRAXBP_Stable.sol @@ -22,26 +22,26 @@ contract FraxUnifiedFarm_ERC20_Convex_FRAXBP_Stable is FraxUnifiedFarm_ERC20 { { // COMMENTED OUT SO COMPILER DOESNT COMPLAIN. UNCOMMENT WHEN DEPLOYING - // // Convex stkcvxBUSDBP and other metaFRAXBPs, where the token is also the pool (Convex Stable/FRAXBP) - // stakingToken = IConvexStakingWrapperFrax(_stakingToken); - // curveToken = I2poolToken(stakingToken.curveToken()); - // curvePool = I2pool(address(curveToken)); - // frax_is_token0 = false; // Irrelevant here, as token 0 will be FRAXBP + // Convex stkcvxBUSDBP and other metaFRAXBPs, where the token is also the pool (Convex Stable/FRAXBP) + stakingToken = IConvexStakingWrapperFrax(_stakingToken); + curveToken = I2poolToken(stakingToken.curveToken()); + curvePool = I2pool(address(curveToken)); + frax_is_token0 = false; // Irrelevant here, as token 0 will be FRAXBP } function fraxPerLPToken() public view override returns (uint256) { // COMMENTED OUT SO COMPILER DOESNT COMPLAIN. UNCOMMENT WHEN DEPLOYING - // // Get the amount of FRAX 'inside' of the lp tokens - // uint256 frax_per_lp_token; - - // // Convex Stable/FRAXBP - // // ============================================ - // { - // // Half of the LP is FRAXBP. Half of that should be FRAX. - // // Using 0.25 * virtual price for gas savings - // frax_per_lp_token = curvePool.get_virtual_price() / 4; - // } + // Get the amount of FRAX 'inside' of the lp tokens + uint256 frax_per_lp_token; + + // Convex Stable/FRAXBP + // ============================================ + { + // Half of the LP is FRAXBP. Half of that should be FRAX. + // Using 0.25 * virtual price for gas savings + frax_per_lp_token = curvePool.get_virtual_price() / 4; + } // return frax_per_lp_token; diff --git a/src/hardhat/contracts/Staking/Variants/FraxUnifiedFarm_ERC20_Convex_frxETH_V2.sol b/src/hardhat/contracts/Staking/Variants/FraxUnifiedFarm_ERC20_Convex_frxETH_V2.sol index 8e324d65..b2acd9c1 100755 --- a/src/hardhat/contracts/Staking/Variants/FraxUnifiedFarm_ERC20_Convex_frxETH_V2.sol +++ b/src/hardhat/contracts/Staking/Variants/FraxUnifiedFarm_ERC20_Convex_frxETH_V2.sol @@ -29,12 +29,12 @@ contract FraxUnifiedFarm_ERC20_Convex_frxETH_V2 is FraxUnifiedFarm_ERC20_V2 { { // COMMENTED OUT SO COMPILER DOESNT COMPLAIN. UNCOMMENT WHEN DEPLOYING - // Convex frxETHETH only - stakingToken = IConvexStakingWrapperFrax(_stakingToken); - curveToken = I2poolToken(stakingToken.curveToken()); - curvePool = ICurvefrxETHETHPool(curveToken.minter()); - // address token0 = curvePool.coins(0); - // frax_is_token0 = false; // Doesn't matter for frxETH + // // Convex frxETHETH only + // stakingToken = IConvexStakingWrapperFrax(_stakingToken); + // curveToken = I2poolToken(stakingToken.curveToken()); + // curvePool = ICurvefrxETHETHPool(curveToken.minter()); + // // address token0 = curvePool.coins(0); + // // frax_is_token0 = false; // Doesn't matter for frxETH } function getLatestETHPriceE8() public view returns (int) { @@ -56,20 +56,20 @@ contract FraxUnifiedFarm_ERC20_Convex_frxETH_V2 is FraxUnifiedFarm_ERC20_V2 { function fraxPerLPToken() public view override returns (uint256) { // COMMENTED OUT SO COMPILER DOESNT COMPLAIN. UNCOMMENT WHEN DEPLOYING - // Get the amount of FRAX 'inside' of the lp tokens - uint256 frax_per_lp_token; + // // Get the amount of FRAX 'inside' of the lp tokens + // uint256 frax_per_lp_token; - // Convex frxETH/ETH - // ============================================ - { - // Assume frxETH = ETH for pricing purposes - // Get the USD value of the frxETH per LP token - uint256 frxETH_in_pool = IERC20(0x5E8422345238F34275888049021821E8E08CAa1f).balanceOf(address(curvePool)); - uint256 frxETH_usd_val_per_lp_e8 = (frxETH_in_pool * uint256(getLatestETHPriceE8())) / curveToken.totalSupply(); - frax_per_lp_token = frxETH_usd_val_per_lp_e8 * (1e10); // We use USD as "Frax" here - } + // // Convex frxETH/ETH + // // ============================================ + // { + // // Assume frxETH = ETH for pricing purposes + // // Get the USD value of the frxETH per LP token + // uint256 frxETH_in_pool = IERC20(0x5E8422345238F34275888049021821E8E08CAa1f).balanceOf(address(curvePool)); + // uint256 frxETH_usd_val_per_lp_e8 = (frxETH_in_pool * uint256(getLatestETHPriceE8())) / curveToken.totalSupply(); + // frax_per_lp_token = frxETH_usd_val_per_lp_e8 * (1e10); // We use USD as "Frax" here + // } - return frax_per_lp_token; + // return frax_per_lp_token; } function preTransferProcess(address from, address to) public override { diff --git a/src/hardhat/contracts/Staking/Variants/FraxUnifiedFarm_ERC20_FraxswapV2.sol b/src/hardhat/contracts/Staking/Variants/FraxUnifiedFarm_ERC20_FraxswapV2.sol index daa17914..dc3a7317 100755 --- a/src/hardhat/contracts/Staking/Variants/FraxUnifiedFarm_ERC20_FraxswapV2.sol +++ b/src/hardhat/contracts/Staking/Variants/FraxUnifiedFarm_ERC20_FraxswapV2.sol @@ -19,31 +19,31 @@ contract FraxUnifiedFarm_ERC20_FraxswapV2 is FraxUnifiedFarm_ERC20 { { // COMMENTED OUT SO COMPILER DOESNT COMPLAIN. UNCOMMENT WHEN DEPLOYING - // Fraxswap - stakingToken = IFraxswapPair(_stakingToken); - address token0 = stakingToken.token0(); - frax_is_token0 = (token0 == frax_address); + // // Fraxswap + // stakingToken = IFraxswapPair(_stakingToken); + // address token0 = stakingToken.token0(); + // frax_is_token0 = (token0 == frax_address); } function fraxPerLPToken() public view override returns (uint256) { // COMMENTED OUT SO COMPILER DOESNT COMPLAIN. UNCOMMENT WHEN DEPLOYING - // Get the amount of FRAX 'inside' of the lp tokens - uint256 frax_per_lp_token; + // // Get the amount of FRAX 'inside' of the lp tokens + // uint256 frax_per_lp_token; - // Fraxswap - // ============================================ - { - uint256 total_frax_reserves; - // Technically getReserveAfterTwamm is more accurate, but if the TWAMM becomes paused, it will eventually gas out - // (uint256 _reserve0, uint256 _reserve1, , ,) = (stakingToken.getReserveAfterTwamm(block.timestamp)); - (uint256 _reserve0, uint256 _reserve1, ) = (stakingToken.getReserves()); - if (frax_is_token0) total_frax_reserves = _reserve0; - else total_frax_reserves = _reserve1; + // // Fraxswap + // // ============================================ + // { + // uint256 total_frax_reserves; + // // Technically getReserveAfterTwamm is more accurate, but if the TWAMM becomes paused, it will eventually gas out + // // (uint256 _reserve0, uint256 _reserve1, , ,) = (stakingToken.getReserveAfterTwamm(block.timestamp)); + // (uint256 _reserve0, uint256 _reserve1, ) = (stakingToken.getReserves()); + // if (frax_is_token0) total_frax_reserves = _reserve0; + // else total_frax_reserves = _reserve1; - frax_per_lp_token = (total_frax_reserves * 1e18) / stakingToken.totalSupply(); - } + // frax_per_lp_token = (total_frax_reserves * 1e18) / stakingToken.totalSupply(); + // } - return frax_per_lp_token; + // return frax_per_lp_token; } } diff --git a/src/hardhat/contracts/Utils/Address.sol b/src/hardhat/contracts/Utils/Address.sol index ec8c9a7d..e537db3d 100755 --- a/src/hardhat/contracts/Utils/Address.sol +++ b/src/hardhat/contracts/Utils/Address.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: MIT -pragma solidity >=0.6.11 <0.9.0; +pragma solidity >=0.6.11; /** * @dev Collection of functions related to the address type diff --git a/src/hardhat/hardhat.config.js b/src/hardhat/hardhat.config.js index 07c143aa..143f5f94 100644 --- a/src/hardhat/hardhat.config.js +++ b/src/hardhat/hardhat.config.js @@ -5,6 +5,8 @@ require('dotenv').config({ path: envPath }); require('hardhat-deploy'); require('hardhat-contract-sizer'); require('hardhat-gas-reporter'); +require("@matterlabs/hardhat-zksync-deploy"); +require("@matterlabs/hardhat-zksync-solc"); require("@nomiclabs/hardhat-waffle"); require("@nomiclabs/hardhat-truffle5"); require("@nomiclabs/hardhat-web3"); @@ -13,6 +15,7 @@ require('@openzeppelin/hardhat-upgrades'); require("@nomiclabs/hardhat-vyper"); require('hardhat-spdx-license-identifier'); + // This is a sample Hardhat task. To learn how to create your own go to // https://hardhat.org/guides/create-task.html task("accounts", "Prints the list of accounts", async () => { @@ -40,7 +43,7 @@ module.exports = { // url: `${process.env.AVALANCHE_FORKING_NETWORK_ENDPOINT}`, // Avalanche // url: `${process.env.BOBA_NETWORK_ENDPOINT}`, // Boba // url: `${process.env.BSC_NETWORK_ENDPOINT}`, // BSC - url: `${process.env.ETHEREUM_NETWORK_ENDPOINT}`, // Ethereum + // url: `${process.env.ETHEREUM_NETWORK_ENDPOINT}`, // Ethereum // url: `${process.env.EVMOS_NETWORK_ENDPOINT}`, // Evmos // url: `${process.env.FANTOM_FORKING_NETWORK_ENDPOINT}`, // Fantom // url: `${process.env.FUSE_NETWORK_ENDPOINT}`, // Fuse @@ -49,7 +52,8 @@ module.exports = { // url: `${process.env.MOONRIVER_NETWORK_ENDPOINT}`, // Moonriver // url: `${process.env.OPTIMISM_NETWORK_ENDPOINT}`, // Optimism // url: `${process.env.POLYGON_NETWORK_ENDPOINT}`, // Polygon - // url: `${process.env.ZKSYNC_NETWORK_ENDPOINT}`, // zkSync + url: `${process.env.ZKSYNC_NETWORK_ENDPOINT}`, // zkSync + zksync: true // TESTING (npx hardhat node --hostname 0.0.0.0) // Also see src/hardhat/justin-scripts/instructions.txt @@ -118,7 +122,7 @@ module.exports = { }, chainId: 1, gas: "auto", - gasPrice: 30000000000, // 30 Gwei + gasPrice: 40000000000, // 40 Gwei gasMultiplier: 1.2, }, evmos: { @@ -188,7 +192,7 @@ module.exports = { }, chainId: 10, gas: "auto", - gasPrice: 1000000000, // 1 Gwei + gasPrice: 10000000, // 0.01 Gwei gasMultiplier: 1.2 }, polygon: { @@ -198,7 +202,7 @@ module.exports = { }, chainId: 137, gas: "auto", - gasPrice: 75000000000, // 75 Gwei + gasPrice: 150000000000, // 150 Gwei gasMultiplier: 1.2 }, polygon_mumbai: { @@ -231,16 +235,18 @@ module.exports = { gasPrice: "auto", gasMultiplier: 1.2 }, - // zksync: { - // url: process.env.ZKSYNC_NETWORK_ENDPOINT, - // accounts: { - // mnemonic: process.env.ZKSYNC_MNEMONIC_PHRASE - // }, - // chainId: 123456, - // gas: "auto", - // gasPrice: 5000000000, // 5 Gwei - // gasMultiplier: 1.2 - // }, + zksync: { + url: process.env.ZKSYNC_NETWORK_ENDPOINT, + accounts: { + mnemonic: process.env.ZKSYNC_MNEMONIC_PHRASE + }, + chainId: 324, + gas: "auto", + gasPrice: "auto", + // gasPrice: 3000000000, // 3 Gwei + gasMultiplier: 1.2, + zksync: true + }, }, solidity: { compilers: [ @@ -355,25 +361,36 @@ module.exports = { { version: "0.8.17", settings: { - viaIR: true, + // viaIR: true, + // optimizer: { + // enabled: true, + // runs: 200000, + // details: { + // orderLiterals: true, + // deduplicate: true, + // cse: true, + // constantOptimizer: true, + // yul: true, + // yulDetails: { + // stackAllocation: true + // } + // }, + // } optimizer: { enabled: true, - runs: 200000, - details: { - orderLiterals: true, - deduplicate: true, - cse: true, - constantOptimizer: true, - yul: true, - yulDetails: { - stackAllocation: true - } - }, + runs: 100000 } } }, ], }, + zksolc: { + version: "1.3.7", + compilerSource: "binary", + settings: { + // forceEvmla: true // optional. Falls back to EVM legacy assembly if there is a bug with Yul + } + }, paths: { sources: "./contracts", tests: "./test", diff --git a/src/types/constants.ts b/src/types/constants.ts index 9408c98c..1b801888 100755 --- a/src/types/constants.ts +++ b/src/types/constants.ts @@ -2370,6 +2370,7 @@ export const CONTRACT_ADDRESSES = { vefxs_yield_distributor_v3: "0xed2647Bbf875b2936AAF95a3F5bbc82819e3d3FE", vefxs_yield_distributor_v4: "0xc6764e58b36e26b08Fd1d2AeD4538c02171fA872", vefpis_yield_distributor_v4: "0xE6D31C144BA99Af564bE7E81261f7bD951b802F6", // V5 really, but keeping name here for DB compatibility + vefpis_smart_wallet_checker: "0x81903F6f9675f7b500eAFE20681bD2D7BAb7C71b", yieldspace_amo: "0x8971946467a77b798762823434c0f407d20F9df9" }, libraries: { @@ -2411,174 +2412,214 @@ export const CONTRACT_ADDRESSES = { zz: "0xC91a71A1fFA3d8B22ba615BA1B9c01b2BBBf55ad" }, bearer_tokens: { - "3CRV_ERC20": "0x6c3F90f043a72FA612cbac8115EE7e52BDe6E490", - "3CRV_Pool": "0xbEbc44782C7dB0a1A60Cb6fe97d0b483032FF1C7", - "cvxFPIFRAX-f": "0x28ebAb5Ecbc3efB4116205c2D3237d8b16976B06", - "FPIFRAX-f": "0x4704aB1fb693ce163F7c9D3A31b3FF4eaF797714", - "FPIFRAX-f_Pool": "0xf861483fa7E511fbc37487D91B6FAa803aF5d37c", - "FRAX3CRV-f": "0xd632f22692FaC7611d2AA1C0D552930D43CAEd3B", - "fTRIBE-8": "0xFd3300A9a74b3250F1b2AbC12B47611171910b07", - "fUSDC-18": "0x6f95d4d251053483f41c8718C30F4F3C404A8cf2", - "sdFRAX3CRV-f": "0x5af15DA84A4a6EDf2d9FA6720De921E1026E37b7", - aFRAX: "0xd4937682df3C8aEF4FE912A96A74121C0829E664", - agEURFRAXBP_Pool: "0x58257e4291F95165184b4beA7793a1d6F8e7b627", - agEURFRAXBP: "0x22e859Ee894c2068920858A60b51DC03ac5581c1", - ALCXFRAXBP_Pool: "0x4149d1038575CE235E03E03B39487a80FD709D31", - ALCXFRAXBP: "0xf985005a3793DbA4cCe241B3C19ddcd3Fe069ff4", - alUSDFRAXBP_Pool: "0xB30dA2376F63De30b42dC055C93fa474F31330A5", - alUSDFRAXBP: "0xB30dA2376F63De30b42dC055C93fa474F31330A5", - apeUSDFRAXBP_Pool: "0x04b727C7e246CA70d496ecF52E6b6280f3c8077D", - apeUSDFRAXBP: "0x04b727C7e246CA70d496ecF52E6b6280f3c8077D", - aUSDC: "0xBcca60bB61934080951369a648Fb03DF4F96263C", - BADGERFRAXBP_Pool: "0x13B876C26Ad6d21cb87AE459EaF6d7A1b788A113", - BADGERFRAXBP: "0x09b2E090531228d1b8E3d948C73b990Cb6e60720", - BUSDFRAXBP_Pool: "0x8fdb0bB9365a46B145Db80D0B1C5C5e979C84190", - BUSDFRAXBP: "0x8fdb0bB9365a46B145Db80D0B1C5C5e979C84190", - cAAVE: "0xe65cdB6479BaC1e22340E4E755fAE7E509EcD06c", - clevUSDFRAXBP: "0x84c333e94aea4a51a21f6cf0c7f528c50dc7592c", - clevUSDFRAXBP_Pool: "0x84c333e94aea4a51a21f6cf0c7f528c50dc7592c", - crvFRAX: "0x3175Df0976dFA876431C2E9eE6Bc45b65d3473CC", - curve4pool: "0x4e0915c88bc70750d68c481540f081fefaf22273", - cUSDC: "0x39AA39c021dfbaE8faC545936693aC917d5E7563", - cvxCRV_Rewarder: "0x3Fe65692bfCD0e6CF84cB1E7d24108E434A7587e", - cvxagEURFRAXBP_Rewarder: "0x17962aB30c7F291b125A0A38d0ad220ab22F8a5B", - cvxagEURFRAXBP: "0x9e187393cBc76c8Bf8e8a06bD7737a7cabe9d66C", - cvxALCXFRAXBP_Rewarder: "0xC10fD95fd3B56535668426B2c8681AD1E15Be608", - cvxALCXFRAXBP: "0xCf9fC20189755354edDdED66C9ED9DFADAFd7a2E", - cvxalUSDFRAXBP_Rewarder: "0x26598e3E511ADFadefD70ab2C3475Ff741741104", - cvxalUSDFRAXBP: "0x5BcAfc77f19F72bCf1420cC1722c3e06E16Ec29a", - cvxapeUSDFRAXBP_Rewarder: "0x51e6B84968D56a1E5BC93Ee264e95b1Ea577339c", - cvxapeUSDFRAXBP: "0x04b727C7e246CA70d496ecF52E6b6280f3c8077D", - cvxBADGERFRAXBP_Rewarder: "0xe0705A91984b076C250d410A41f615380aF1C2ed", - cvxBADGERFRAXBP: "0x25f0b7c3A7A43b409634a5759526560cC3313d75", - cvxBUSDFRAXBP_Rewarder: "0x9e6Daf019767D5cEAdE416ce77E8d187b5B254F3", - cvxBUSDFRAXBP: "0xf203A94e59d071062a0dd31f396bCb19a38809A4", - cvxclevUSDFRAXBP: "0x84C333e94AEA4a51a21F6cf0C7F528C50Dc7592C", - cvxclevUSDFRAXBP_Rewarder: "0x710e85B2793b3AE88Cb1Da3cb25b3d62D810d180", - cvxcrvFRAX_Rewarder: '0x7e880867363A7e321f5d260Cade2B0Bb2F717B02', + '3CRV_ERC20': '0x6c3F90f043a72FA612cbac8115EE7e52BDe6E490', + '3CRV_Pool': '0xbEbc44782C7dB0a1A60Cb6fe97d0b483032FF1C7', + 'FPIFRAX-f': '0x4704aB1fb693ce163F7c9D3A31b3FF4eaF797714', + 'FPIFRAX-f_Pool': '0xf861483fa7E511fbc37487D91B6FAa803aF5d37c', + 'FRAX3CRV-f': '0xd632f22692FaC7611d2AA1C0D552930D43CAEd3B', + 'cvxFPIFRAX-f': '0x28ebAb5Ecbc3efB4116205c2D3237d8b16976B06', + 'fTRIBE-8': '0xFd3300A9a74b3250F1b2AbC12B47611171910b07', + 'fUSDC-18': '0x6f95d4d251053483f41c8718C30F4F3C404A8cf2', + 'sdFRAX3CRV-f': '0x5af15DA84A4a6EDf2d9FA6720De921E1026E37b7', + ALCXFRAXBP: '0xf985005a3793DbA4cCe241B3C19ddcd3Fe069ff4', + ALCXFRAXBP_Pool: '0x4149d1038575CE235E03E03B39487a80FD709D31', + BADGERFRAXBP: '0x09b2E090531228d1b8E3d948C73b990Cb6e60720', + BADGERFRAXBP_Pool: '0x13B876C26Ad6d21cb87AE459EaF6d7A1b788A113', + BUSDFRAXBP: '0x8fdb0bB9365a46B145Db80D0B1C5C5e979C84190', + BUSDFRAXBP_Pool: '0x8fdb0bB9365a46B145Db80D0B1C5C5e979C84190', + CRVfrxETH: '0xc34993c9adf6a5ab3b4ca27dc71b9c7894a53974', + CRVfrxETH_Pool: '0x442f37cfd85d3f35e576ad7d63bba7bb36fcfe4a', + CVXFRAXBP: '0x7F17A6C77C3938D235b014818092eb6305BdA110', + CVXFRAXBP_Pool: '0xBEc570d92AFB7fFc553bdD9d4B4638121000b10D', + CVXfrxETH: '0xbb2568deeb365b8b89ef7f9b53e86b34cd5d0490', + CVXfrxETH_Pool: '0x6e855d08f2984516c40c4246a385ba4a2edfcd0a', + DOLAFRAXBP: '0xE57180685E3348589E9521aa53Af0BCD497E884d', + DOLAFRAXBP_Pool: '0xE57180685E3348589E9521aa53Af0BCD497E884d', + FRAXBP: '0x3175Df0976dFA876431C2E9eE6Bc45b65d3473CC', + FRAXBP_Pool: '0xDcEF968d416a41Cdac0ED8702fAC8128A64241A2', + FXSfrxETH: '0x970faa9afbc5feb3ec53059ba330dee71e22b55b', + FXSfrxETH_Pool: '0x5133da6ba0474368ad0398d953c8d31c1b75b82b', + GUSDFRAXBP: '0x4e43151b78b5fbb16298C1161fcbF7531d5F8D93', + GUSDFRAXBP_Pool: '0x4e43151b78b5fbb16298C1161fcbF7531d5F8D93', + LUSDFRAXBP: '0x497CE58F34605B9944E6b15EcafE6b001206fd25', + LUSDFRAXBP_Pool: '0x497CE58F34605B9944E6b15EcafE6b001206fd25', + MAIFRAXBP: '0x66E335622ad7a6C9c72c98dbfCCE684996a20Ef9', + MAIFRAXBP_Pool: '0x66E335622ad7a6C9c72c98dbfCCE684996a20Ef9', + OGTemple: '0x654590F810f01B51dc7B86915D4632977e49EA33', + OHMFRAXBP: '0x5271045f7b73c17825a7a7aee6917ee46b0b7520', + OHMFRAXBP_Pool: '0xfc1e8bf3e81383ef07be24c3fd146745719de48d', + RSRFRAXBP: '0x3F436954afb722F5D14D868762a23faB6b0DAbF0', + RSRFRAXBP_Pool: '0x6a6283aB6e31C2AeC3fA08697A8F806b740660b2', + SDTFRAXBP: '0x893DA8A02b487FEF2F7e3F35DF49d7625aE549a3', + SDTFRAXBP_Pool: '0x3e3C6c7db23cdDEF80B694679aaF1bCd9517D0Ae', + TUSDFRAXBP: '0x33baeDa08b8afACc4d3d07cf31d49FC1F1f3E893', + TUSDFRAXBP_Pool: '0x33baeDa08b8afACc4d3d07cf31d49FC1F1f3E893', + USDDFRAXBP: '0x4606326b4Db89373F5377C316d3b0F6e55Bc6A20', + USDDFRAXBP_Pool: '0x4606326b4Db89373F5377C316d3b0F6e55Bc6A20', + XAIFRAXBP: '0x326290A1B0004eeE78fa6ED4F1d8f4b2523ab669', + XAIFRAXBP_Pool: '0x326290A1B0004eeE78fa6ED4F1d8f4b2523ab669', + aFRAX: '0xd4937682df3C8aEF4FE912A96A74121C0829E664', + aUSDC: '0xBcca60bB61934080951369a648Fb03DF4F96263C', + agEURFRAXBP: '0x22e859Ee894c2068920858A60b51DC03ac5581c1', + agEURFRAXBP_Pool: '0x58257e4291F95165184b4beA7793a1d6F8e7b627', + alETHfrxETH: '0x97ba76a574bc5709b944bb1887691301c72337ca', + alETHfrxETH_Pool: '0x97ba76a574bc5709b944bb1887691301c72337ca', + alUSDFRAXBP: '0xB30dA2376F63De30b42dC055C93fa474F31330A5', + alUSDFRAXBP_Pool: '0xB30dA2376F63De30b42dC055C93fa474F31330A5', + ankrETHfrxETH: '0xa8e14f03124ea156a4fc416537c82ff91a647d50', + ankrETHfrxETH_Pool: '0x41ea4045de2676727883aa0b4e43d7e32261f559', + apeUSDFRAXBP: '0x04b727C7e246CA70d496ecF52E6b6280f3c8077D', + apeUSDFRAXBP_Pool: '0x04b727C7e246CA70d496ecF52E6b6280f3c8077D', + cAAVE: '0xe65cdB6479BaC1e22340E4E755fAE7E509EcD06c', + cUSDC: '0x39AA39c021dfbaE8faC545936693aC917d5E7563', + cbETHfrxETH: '0x548e063ce6f3bac31457e4f5b4e2345286274257', + cbETHfrxETH_Pool: '0x73069892f6750ccaaababadc54b6b6b36b3a057d', + clevUSDFRAXBP: '0x84c333e94aea4a51a21f6cf0c7f528c50dc7592c', + clevUSDFRAXBP_Pool: '0x84c333e94aea4a51a21f6cf0c7f528c50dc7592c', + crvFRAX: '0x3175Df0976dFA876431C2E9eE6Bc45b65d3473CC', + crvFRAX_Gauge: '0xcfc25170633581bf896cb6cdee170e3e3aa59503', + curve4pool: '0x4e0915c88bc70750d68c481540f081fefaf22273', + cvxALCXFRAXBP: '0xCf9fC20189755354edDdED66C9ED9DFADAFd7a2E', + cvxALCXFRAXBP_Rewarder: '0xC10fD95fd3B56535668426B2c8681AD1E15Be608', + cvxBADGERFRAXBP: '0x25f0b7c3A7A43b409634a5759526560cC3313d75', + cvxBADGERFRAXBP_Rewarder: '0xe0705A91984b076C250d410A41f615380aF1C2ed', + cvxBUSDFRAXBP: '0xf203A94e59d071062a0dd31f396bCb19a38809A4', + cvxBUSDFRAXBP_Rewarder: '0x9e6Daf019767D5cEAdE416ce77E8d187b5B254F3', + cvxCRVFRAXBP: '0x527331F3F550f6f85ACFEcAB9Cc0889180C6f1d5', + cvxCRVFRAXBP_Pool: '0x31c325A01861c7dBd331a9270296a31296D797A0', + cvxCRV_Rewarder: '0x3Fe65692bfCD0e6CF84cB1E7d24108E434A7587e', + cvxCVXFRAXBP: '0x123dC033d6fF314211F7953eD31bC805f85C13d5', + cvxCVXFRAXBP_Rewarder: '0xf02B3A77b1e7775de10294d78a4c3d77772B484A', + cvxDOLAFRAXBP: '0xf7eCC27CC9DB5d28110AF2d89b176A6623c7E351', + cvxDOLAFRAXBP_Rewarder: '0x0404d05F3992347d2f0dC3a97bdd147D77C85c1c', + cvxeUSDFRAXBP: '0x8e074d44aaBC1b3b4406fE03Da7ceF787ea85938', + cvxeUSDFRAXBP_Rewarder: '0xB468dB2E478885B87D7ce0C8DA1D4373A756C138', + cvxFXSFRAXBP: '0xF57ccaD8122B898A147Cc8601B1ECA88B1662c7E', + cvxFXSFRAXBP_Pool: '0x21d158d95C2e150e144c36FC64E3653B8D6c6267', + cvxGUSDFRAXBP: '0xfbd79471A12929De8379a6CbaF320E150f139ac4', + cvxGUSDFRAXBP_Rewarder: '0x47809eE386D1dEC29c0b13f21ba30F564517538B', + cvxLUSDFRAXBP: '0xE8a371b5D32344033589A2F0a2712dBD12130b18', + cvxLUSDFRAXBP_Rewarder: '0x053e1dad223A206e6BCa24C77786bb69a10e427d', + cvxMAIFRAXBP: '0xe79914274Ea1332222793d7ba931647531E10a5b', + cvxMAIFRAXBP_Rewarder: '0xD3C412C3cEdbEC604425B23DCd79Aa1ac810622f', + cvxOHMFRAXBP: '0x5271045F7B73c17825A7A7aee6917eE46b0B7520', + cvxOHMFRAXBP_Rewarder: '0x27A8c58e3DE84280826d615D80ddb33930383fE9', + cvxRSRFRAXBP: '0x022600684e9492dA82f0da11Bf039c11109d0935', + cvxRSRFRAXBP_Rewarder: '0x28441fb9b8b026487A6174Ff39Be015810611C0F', + cvxSDTFRAXBP: '0x95B051E97957f1D48C622Bf73225E3d4c2B189fb', + cvxSDTFRAXBP_Rewarder: '0xc3df9cC2B8FFdB801E8e6E8FF9C1245E2dEcdA98', + cvxSTGFRAXBP: '0x867fe27fc2462cff8890b54dfd64e6d42a9d1ac8', + cvxSTGFRAXBP_Rewarder: '0xAa57A289Bb22a1A0C583db306F6566AE2c0CAf21', + cvxTUSDFRAXBP: '0x33baeDa08b8afACc4d3d07cf31d49FC1F1f3E893', + cvxTUSDFRAXBP_Rewarder: '0x4a744870fD705971c8c00aC510eAc2206C93d5bb', + cvxUSDDFRAXBP: '0x4606326b4Db89373F5377C316d3b0F6e55Bc6A20', + cvxUSDDFRAXBP_Rewarder: '0x546cd3B917c1d8A6525b4A312bB0014BE031Eb28', + cvxXAIFRAXBP: '0xEbB0Dd1AfE63813AdD4c38EEbd71CE7354dd9b7e', + cvxXAIFRAXBP_Rewarder: '0x4a866fE20A442Dff55FAA010684A5C1379151458', + cvxagEURFRAXBP: '0x9e187393cBc76c8Bf8e8a06bD7737a7cabe9d66C', + cvxagEURFRAXBP_Rewarder: '0x17962aB30c7F291b125A0A38d0ad220ab22F8a5B', + cvxalUSDFRAXBP: '0x5BcAfc77f19F72bCf1420cC1722c3e06E16Ec29a', + cvxalUSDFRAXBP_Rewarder: '0x26598e3E511ADFadefD70ab2C3475Ff741741104', + cvxapeUSDFRAXBP: '0x04b727C7e246CA70d496ecF52E6b6280f3c8077D', + cvxapeUSDFRAXBP_Rewarder: '0x51e6B84968D56a1E5BC93Ee264e95b1Ea577339c', + cvxclevUSDFRAXBP: '0x84C333e94AEA4a51a21F6cf0C7F528C50Dc7592C', + cvxclevUSDFRAXBP_Rewarder: '0x710e85B2793b3AE88Cb1Da3cb25b3d62D810d180', cvxcrvFRAX: '0x117A0bab81F25e60900787d98061cCFae023560c', - cvxCRVFRAXBP: "0x527331F3F550f6f85ACFEcAB9Cc0889180C6f1d5", - cvxCRVFRAXBP_Pool: "0x31c325A01861c7dBd331a9270296a31296D797A0", - cvxcvxCRVFRAXBP_Rewarder: "0xdEbc7B51043b4D0dd4f3310C68A12382b8843ceE", - cvxcvxCRVFRAXBP: "0x2aE739F40Cda5F053F9dbecE7E177Fcbdc4A07D9", - cvxCVXFRAXBP_Rewarder: "0xf02B3A77b1e7775de10294d78a4c3d77772B484A", - cvxCVXFRAXBP: "0x123dC033d6fF314211F7953eD31bC805f85C13d5", - cvxcvxFXSFRAXBP_Rewarder: "0x19eA715F854dB2196C6f45A174541a5Ac884D2f9", - cvxcvxFXSFRAXBP: "0xDad9DB2c7c96a1496493E6D48d131a2667f284f9", - cvxDOLAFRAXBP_Rewarder: "0x0404d05F3992347d2f0dC3a97bdd147D77C85c1c", - cvxDOLAFRAXBP: "0xf7eCC27CC9DB5d28110AF2d89b176A6623c7E351", - CVXFRAXBP_Pool: "0xBEc570d92AFB7fFc553bdD9d4B4638121000b10D", - CVXFRAXBP: "0x7F17A6C77C3938D235b014818092eb6305BdA110", - cvxfrxETHETH_Rewarder: "0xbD5445402B0a287cbC77cb67B2a52e2FC635dce4", - cvxfrxETHETH: "0xC07e540DbFecCF7431EA2478Eb28A03918c1C30E", // Curve calls it cvxfrxETHCRV - cvxFXSFRAXBP_Pool: "0x21d158d95C2e150e144c36FC64E3653B8D6c6267", - cvxFXSFRAXBP: "0xF57ccaD8122B898A147Cc8601B1ECA88B1662c7E", - cvxgusd3CRV_free: "0x15c2471ef46Fa721990730cfa526BcFb45574576", - cvxGUSDFRAXBP_Rewarder: "0x47809eE386D1dEC29c0b13f21ba30F564517538B", - cvxGUSDFRAXBP: "0xfbd79471A12929De8379a6CbaF320E150f139ac4", - cvxLUSDFRAXBP_Rewarder: "0x053e1dad223A206e6BCa24C77786bb69a10e427d", - cvxLUSDFRAXBP: "0xE8a371b5D32344033589A2F0a2712dBD12130b18", - cvxMAIFRAXBP_Rewarder: "0xD3C412C3cEdbEC604425B23DCd79Aa1ac810622f", - cvxMAIFRAXBP: "0xe79914274Ea1332222793d7ba931647531E10a5b", - cvxmsUSDFRAXBP: "0xc3b19502F8c02be75F3f77fd673503520DEB51dD", - cvxmsUSDFRAXBP_Rewarder: "0xF189A4a1E845Fd62944F93De497409798523B397", - cvxOHMFRAXBP: "0x5271045F7B73c17825A7A7aee6917eE46b0B7520", - cvxOHMFRAXBP_Rewarder: "0x27A8c58e3DE84280826d615D80ddb33930383fE9", - cvxpUSDFRAXBP_Rewarder: "0x6d096C99Cc2Ea52490355311b73D86365Acf087f", - cvxpUSDFRAXBP: "0xB17255D92892F1322d023befddaB85f172E36f67", - cvxRSRFRAXBP: "0x022600684e9492dA82f0da11Bf039c11109d0935", - cvxRSRFRAXBP_Rewarder: "0x28441fb9b8b026487A6174Ff39Be015810611C0F", - cvxSDTFRAXBP: "0x95B051E97957f1D48C622Bf73225E3d4c2B189fb", - cvxSDTFRAXBP_Rewarder: "0xc3df9cC2B8FFdB801E8e6E8FF9C1245E2dEcdA98", - cvxsUSDFRAXBP_Rewarder: "0x3fABBDfe05487De1720a9420fE2e16d2c3e79A9D", - cvxsUSDFRAXBP: "0x8E2A6e9390CbD4C3895D07E4Cb171C0527990dF6", - cvxTUSDFRAXBP_Rewarder: "0x4a744870fD705971c8c00aC510eAc2206C93d5bb", - cvxTUSDFRAXBP: "0x33baeDa08b8afACc4d3d07cf31d49FC1F1f3E893", - cvxUSDDFRAXBP_Rewarder: "0x546cd3B917c1d8A6525b4A312bB0014BE031Eb28", - cvxUSDDFRAXBP: "0x4606326b4Db89373F5377C316d3b0F6e55Bc6A20", - cvxXAIFRAXBP: "0xEbB0Dd1AfE63813AdD4c38EEbd71CE7354dd9b7e", - cvxXAIFRAXBP_Rewarder: "0x4a866fE20A442Dff55FAA010684A5C1379151458", - d3pool: "0xBaaa1F5DbA42C3389bDbc2c9D2dE134F5cD0Dc89", - DOLAFRAXBP_Pool: "0xE57180685E3348589E9521aa53Af0BCD497E884d", - DOLAFRAXBP: "0xE57180685E3348589E9521aa53Af0BCD497E884d", - FRAXBP_Pool: "0xDcEF968d416a41Cdac0ED8702fAC8128A64241A2", - FRAXBP: "0x3175Df0976dFA876431C2E9eE6Bc45b65d3473CC", - frxETHETH_Pool: "0xa1F8A6807c402E4A15ef4EBa36528A3FED24E577", - frxETHETH: "0xf43211935C781D5ca1a41d2041F397B8A7366C7A", // Curve calls it frxETHCRV - gOHM: "0x0ab87046fBb341D058F17CBC4c1133F25a20a52f", - gusd3CRV: "0xd2967f45c4f384deea880f807be904762a3dea07", - GUSDFRAXBP_Pool: "0x4e43151b78b5fbb16298C1161fcbF7531d5F8D93", - GUSDFRAXBP: "0x4e43151b78b5fbb16298C1161fcbF7531d5F8D93", - LUSDFRAXBP_Pool: "0x497CE58F34605B9944E6b15EcafE6b001206fd25", - LUSDFRAXBP: "0x497CE58F34605B9944E6b15EcafE6b001206fd25", - MAIFRAXBP_Pool: "0x66E335622ad7a6C9c72c98dbfCCE684996a20Ef9", - MAIFRAXBP: "0x66E335622ad7a6C9c72c98dbfCCE684996a20Ef9", - msUSDFRAXBP: "0xc3b19502f8c02be75f3f77fd673503520deb51dd", - msUSDFRAXBP_Pool: "0xc3b19502f8c02be75f3f77fd673503520deb51dd", - OHMFRAXBP: "0x5271045f7b73c17825a7a7aee6917ee46b0b7520", - OHMFRAXBP_Pool: "0xfc1e8bf3e81383ef07be24c3fd146745719de48d", - OGTemple: "0x654590F810f01B51dc7B86915D4632977e49EA33", - pitchFXS: "0x11EBe21e9d7BF541A18e1E3aC94939018Ce88F0b", - pUSDFRAXBP_Pool: "0xC47EBd6c0f68fD5963005D28D0ba533750E5C11B", - pUSDFRAXBP: "0xC47EBd6c0f68fD5963005D28D0ba533750E5C11B", - RSRFRAXBP_Pool: "0x6a6283aB6e31C2AeC3fA08697A8F806b740660b2", - RSRFRAXBP: "0x3F436954afb722F5D14D868762a23faB6b0DAbF0", - SDTFRAXBP_Pool: "0x3e3C6c7db23cdDEF80B694679aaF1bCd9517D0Ae", - SDTFRAXBP: "0x893DA8A02b487FEF2F7e3F35DF49d7625aE549a3", - saddleD4_Pool: "0xC69DDcd4DFeF25D8a793241834d4cc4b3668EAD6", - saddleD4: "0xd48cF4D7FB0824CC8bAe055dF3092584d0a1726A", - sdl_alUSDFRAXBP_Gauge: "0x953693DCB2E9DDC0c1398C1b540b81b63ceA5e16", - sdl_alUSDFRAXBP_Pool: "0xFB516cF3710fC6901F2266aAEB8834cF5e4E9558", - sdl_alUSDFRAXBP: "0x3cF7b9479a01eeB3bbfC43581fa3bb21cd888e2A", - sdl_FRAXBP_Gauge: "0xB2Ac3382dA625eb41Fc803b57743f941a484e2a6", - sdl_FRAXBP_Pool: "0x13Cc34Aa8037f722405285AD2C82FE570bfa2bdc", - sdl_FRAXBP: "0x927E6f04609A45B107C789aF34BA90Ebbf479f7f", - sdl_sUSDFRAXBP_Gauge: "0x104F44551386d603217450822443456229F73aE4", - sdl_sUSDFRAXBP_Pool: "0x69baA0d7c2e864b74173922Ca069Ac79d3be1556", - sdl_sUSDFRAXBP: "0x6Ac7a4cB3BFa90DC651CD53EB098e23c88d04e77", - sOHM: "0x04F2694C8fcee23e8Fd0dfEA1d4f5Bb8c352111F", - stkAAVE: "0x4da27a545c0c5b758a6ba100e3a049001de870f5", - stkcvxagEURFRAXBP: "0x78b74C93c726B6e29d0Ef5A01764fA19eCCF0C1c", - stkcvxALCXFRAXBP: "0xAF1b82809296E52A42B3452c52e301369Ce20554", - stkcvxalUSDFRAXBP: "0xBE1C919cA137299715e9c929BC7126Af14f76091", - stkcvxapeUSDFRAXBP: "0x6a20FC1654A2167d00614332A5aFbB7EBcD9d414", - stkcvxBADGERFRAXBP: "0xb92e3fD365Fc5E038aa304Afe919FeE158359C88", - stkcvxBUSDFRAXBP: "0x20c5177504A3f9Bad59c430791feA853EeAD4CCE", - stkcvxclevUSDFRAXBP: "0x3199a1ed1Ad4cb1d1b57939809c8ee79eafE9934", - stkcvxcvxCRVFRAXBP: "0xa103a6ca0C4D4072BA59a55FD453BFE4197A095B", - stkcvxCVXFRAXBP: "0x93D1De20eaBB21686CFe716f78F67E51ee578185", - stkcvxcvxFXSFRAXBP: "0xA6A8F315b1a8C9B05433d206b8fECfbF0fC96217", - stkcvxDOLAFRAXBP: "0xF06c8696730cf760619e4fA0eDd0f79ea50531A9", - stkcvxFPIFRAX: "0x7287488F8Df7dddc5f373142D4827aAF92AAC845", - stkcvxFRAXBP: "0x8a53ee42FB458D4897e15cc7dEa3F75D0F1c3475", - stkcvxfrxETHETH: "0x4659d5fF63A1E1EDD6D5DD9CC315e063c95947d0", // Convex calls it stkcvxfrxETHCRV - stkcvxGUSDFRAXBP: "0x16e9eaC2A9e29aF3c53d24ed0F07fc403E098b64", - stkcvxLUSDFRAXBP: "0x8C402989a966D37B96f60401A6158D5D49f1381D", - stkcvxMAIFRAXBP: "0x787eB52b94c4610ABE2C9C5eE95c3a4a16533344", - stkcvxmsUSDFRAXBP: "0x227b7F44468A0EC0FDdfc3FB0cE09b294E62f875", - stkcvxOHMFRAXBP: "0x81b0dCDa53482A2EA9eb496342dC787643323e95", - stkcvxpUSDFRAXBP: "0x7AEF5bDC573dCbfb40EC68b0BAAB03abB846C9c6", - stkcvxRSRFRAXBP: "0xF37007f2b9DE656115e1B977Bb1fd38A99B8a2a6", - stkcvxSDTFRAXBP: "0xE6Aa75F98e6c105b821a2dba9Fbbd886b421F06b", - stkcvxsUSDFRAXBP: "0x9f0C2673a33b7087e367253f196A7E823fBc2341", - stkcvxTUSDFRAXBP: "0x32fA492Ac1F729E0eE9eDdfCBacc3ef72B234e27", - stkcvxUSDDFRAXBP: "0x507e41A64eB7AE47ee303e3B16237ab757F6C06c", - stkcvxXAIFRAXBP: "0x19f0a60f4635d3E2c48647822Eda5332BA094fd3", - stkMTA: "0x8f2326316eC696F6d023E37A9931c2b2C177a3D7", - sUSDFRAXBP_Pool: "0xe3c190c57b5959Ae62EfE3B6797058B76bA2f5eF", - sUSDFRAXBP: "0xe3c190c57b5959Ae62EfE3B6797058B76bA2f5eF", - tFRAX: "0x94671a3cee8c7a12ea72602978d1bb84e920efb2", - tFXS: "0xadf15ec41689fc5b6dca0db7c53c9bfe7981e655", - TUSDFRAXBP_Pool: "0x33baeDa08b8afACc4d3d07cf31d49FC1F1f3E893", - TUSDFRAXBP: "0x33baeDa08b8afACc4d3d07cf31d49FC1F1f3E893", - USDDFRAXBP_Pool: "0x4606326b4Db89373F5377C316d3b0F6e55Bc6A20", - USDDFRAXBP: "0x4606326b4Db89373F5377C316d3b0F6e55Bc6A20", - XAIFRAXBP_Pool: "0x326290A1B0004eeE78fa6ED4F1d8f4b2523ab669", - XAIFRAXBP: "0x326290A1B0004eeE78fa6ED4F1d8f4b2523ab669", - veCRV: "0x5f3b5DfEb7B28CDbD7FAba78963EE202a494e2A2", - vlCVX: "0x72a19342e8F1838460eBFCCEf09F6585e32db86E", - xSDT: "0xaC14864ce5A98aF3248Ffbf549441b04421247D3", - yvUSDC: "0xa354f35829ae975e850e23e9615b11da1b3dc4de", // V2: "0x5f18C75AbDAe578b483E5F43f12a39cF75b973a9" + cvxcrvFRAX_Rewarder: '0x7e880867363A7e321f5d260Cade2B0Bb2F717B02', + cvxcvxCRVFRAXBP: '0x2aE739F40Cda5F053F9dbecE7E177Fcbdc4A07D9', + cvxcvxCRVFRAXBP_Rewarder: '0xdEbc7B51043b4D0dd4f3310C68A12382b8843ceE', + cvxcvxFXSFRAXBP: '0xDad9DB2c7c96a1496493E6D48d131a2667f284f9', + cvxcvxFXSFRAXBP_Rewarder: '0x19eA715F854dB2196C6f45A174541a5Ac884D2f9', + cvxfrxETHETH: '0xC07e540DbFecCF7431EA2478Eb28A03918c1C30E', // Curve calls it cvxfrxETHCRV + cvxfrxETHETH_Rewarder: '0xbD5445402B0a287cbC77cb67B2a52e2FC635dce4', + cvxgusd3CRV_free: '0x15c2471ef46Fa721990730cfa526BcFb45574576', + cvxmsUSDFRAXBP: '0xc3b19502F8c02be75F3f77fd673503520DEB51dD', + cvxmsUSDFRAXBP_Rewarder: '0xF189A4a1E845Fd62944F93De497409798523B397', + cvxpUSDFRAXBP: '0xB17255D92892F1322d023befddaB85f172E36f67', + cvxpUSDFRAXBP_Rewarder: '0x6d096C99Cc2Ea52490355311b73D86365Acf087f', + cvxsUSDFRAXBP: '0x8E2A6e9390CbD4C3895D07E4Cb171C0527990dF6', + cvxsUSDFRAXBP_Rewarder: '0x3fABBDfe05487De1720a9420fE2e16d2c3e79A9D', + d3pool: '0xBaaa1F5DbA42C3389bDbc2c9D2dE134F5cD0Dc89', + eUSDFRAXBP: '0xaeda92e6a3b1028edc139a4ae56ec881f3064d4f', + eUSDFRAXBP_Pool: '0xaeda92e6a3b1028edc139a4ae56ec881f3064d4f', + frxETHETH: '0xf43211935C781D5ca1a41d2041F397B8A7366C7A', // Curve calls it frxETHCRV + frxETHETH_Pool: '0xa1F8A6807c402E4A15ef4EBa36528A3FED24E577', + gOHM: '0x0ab87046fBb341D058F17CBC4c1133F25a20a52f', + gusd3CRV: '0xd2967f45c4f384deea880f807be904762a3dea07', + msUSDFRAXBP: '0xc3b19502f8c02be75f3f77fd673503520deb51dd', + msUSDFRAXBP_Pool: '0xc3b19502f8c02be75f3f77fd673503520deb51dd', + pUSDFRAXBP: '0xC47EBd6c0f68fD5963005D28D0ba533750E5C11B', + pUSDFRAXBP_Pool: '0xC47EBd6c0f68fD5963005D28D0ba533750E5C11B', + pitchFXS: '0x11EBe21e9d7BF541A18e1E3aC94939018Ce88F0b', + rETHfrxETH: '0xba6c373992ad8ec1f7520e5878e5540eb36debf1', + rETHfrxETH_Pool: '0xe7c6e0a739021cdba7aac21b4b728779eef974d9', + sETHfrxETH: '0x663ac72a1c3e1c4186cd3dcb184f216291f4878c', + sETHfrxETH_Pool: '0x663ac72a1c3e1c4186cd3dcb184f216291f4878c', + sOHM: '0x04F2694C8fcee23e8Fd0dfEA1d4f5Bb8c352111F', + sUSDFRAXBP: '0xe3c190c57b5959Ae62EfE3B6797058B76bA2f5eF', + sUSDFRAXBP_Pool: '0xe3c190c57b5959Ae62EfE3B6797058B76bA2f5eF', + saddleD4: '0xd48cF4D7FB0824CC8bAe055dF3092584d0a1726A', + saddleD4_Pool: '0xC69DDcd4DFeF25D8a793241834d4cc4b3668EAD6', + sdl_FRAX3Pool: '0x0785aDDf5F7334aDB7ec40cD785EBF39bfD91520', + sdl_FRAX3Pool_Gauge: '0x13Ba45c2B686c6db7C2E28BD3a9E8EDd24B894eD', + sdl_FRAX3Pool_Pool: '0x8cAEa59f3Bf1F341f89c51607E4919841131e47a', + sdl_FRAXBP: '0x927E6f04609A45B107C789aF34BA90Ebbf479f7f', + sdl_FRAXBP_Gauge: '0xB2Ac3382dA625eb41Fc803b57743f941a484e2a6', + sdl_FRAXBP_Pool: '0x13Cc34Aa8037f722405285AD2C82FE570bfa2bdc', + sdl_USDTFRAXBP: '0x486DFCfdbF9025c062110E8c0344a15279aD0a85', + sdl_USDTFRAXBP_Gauge: '0x6EC5DD7D8E396973588f0dEFD79dCA04F844d57C', + sdl_USDTFRAXBP_Pool: '0xC765Cd3d015626244AD63B5FB63a97c5634643b9', + sdl_alUSDFRAXBP: '0x3cF7b9479a01eeB3bbfC43581fa3bb21cd888e2A', + sdl_alUSDFRAXBP_Gauge: '0x953693DCB2E9DDC0c1398C1b540b81b63ceA5e16', + sdl_alUSDFRAXBP_Pool: '0xFB516cF3710fC6901F2266aAEB8834cF5e4E9558', + sdl_sUSDFRAXBP: '0x6Ac7a4cB3BFa90DC651CD53EB098e23c88d04e77', + sdl_sUSDFRAXBP_Gauge: '0x104F44551386d603217450822443456229F73aE4', + sdl_sUSDFRAXBP_Pool: '0x69baA0d7c2e864b74173922Ca069Ac79d3be1556', + sdl_vesperFRAXEarnPoolFRAXBP: '0xA3beCa25Bd2bDd67272556666A7791d772C36571', + sdl_vesperFRAXEarnPoolFRAXBP_Gauge: '0x9980c9b35844946cf3451cc0b43d9b6501f4a96e', + sdl_vesperFRAXEarnPoolFRAXBP_Pool: '0x9AC17f026f0599F77b3513a0A35f0258B0ec77f3', + stETHfrxETH: '0x4d9f9d15101eec665f77210cb999639f760f831e', + stETHfrxETH_Pool: '0x4d9f9d15101eec665f77210cb999639f760f831e', + STGFRAXBP: '0x9de1c3d446237ab9baff74127eb4f303802a2683', + STGFRAXBP_Pool: '0x867fe27fc2462cff8890b54dfd64e6d42a9d1ac8', + stkAAVE: '0x4da27a545c0c5b758a6ba100e3a049001de870f5', + stkMTA: '0x8f2326316eC696F6d023E37A9931c2b2C177a3D7', + stkcvxALCXFRAXBP: '0xAF1b82809296E52A42B3452c52e301369Ce20554', + stkcvxBADGERFRAXBP: '0xb92e3fD365Fc5E038aa304Afe919FeE158359C88', + stkcvxBUSDFRAXBP: '0x20c5177504A3f9Bad59c430791feA853EeAD4CCE', + stkcvxCRV: '0xaa0c3f5f7dfd688c6e646f66cd2a6b66acdbe434', + stkcvxCVXFRAXBP: '0x93D1De20eaBB21686CFe716f78F67E51ee578185', + stkcvxDOLAFRAXBP: '0xF06c8696730cf760619e4fA0eDd0f79ea50531A9', + stkcvxeUSDFRAXBP: '0x8942B520638A34766AB269f7dE33C78377dAb803', + stkcvxFPIFRAX: '0x7287488F8Df7dddc5f373142D4827aAF92AAC845', + stkcvxFRAXBP: '0x8a53ee42FB458D4897e15cc7dEa3F75D0F1c3475', + stkcvxGUSDFRAXBP: '0x16e9eaC2A9e29aF3c53d24ed0F07fc403E098b64', + stkcvxLUSDFRAXBP: '0x8C402989a966D37B96f60401A6158D5D49f1381D', + stkcvxMAIFRAXBP: '0x787eB52b94c4610ABE2C9C5eE95c3a4a16533344', + stkcvxOHMFRAXBP: '0x81b0dCDa53482A2EA9eb496342dC787643323e95', + stkcvxRSRFRAXBP: '0xF37007f2b9DE656115e1B977Bb1fd38A99B8a2a6', + stkcvxSDTFRAXBP: '0xE6Aa75F98e6c105b821a2dba9Fbbd886b421F06b', + stkcvxSTGFRAXBP: '', + stkcvxTUSDFRAXBP: '0x32fA492Ac1F729E0eE9eDdfCBacc3ef72B234e27', + stkcvxUSDDFRAXBP: '0x507e41A64eB7AE47ee303e3B16237ab757F6C06c', + stkcvxXAIFRAXBP: '0x19f0a60f4635d3E2c48647822Eda5332BA094fd3', + stkcvxagEURFRAXBP: '0x78b74C93c726B6e29d0Ef5A01764fA19eCCF0C1c', + stkcvxalUSDFRAXBP: '0xBE1C919cA137299715e9c929BC7126Af14f76091', + stkcvxapeUSDFRAXBP: '0x6a20FC1654A2167d00614332A5aFbB7EBcD9d414', + stkcvxclevUSDFRAXBP: '0x3199a1ed1Ad4cb1d1b57939809c8ee79eafE9934', + stkcvxcvxCRVFRAXBP: '0xa103a6ca0C4D4072BA59a55FD453BFE4197A095B', + stkcvxcvxFXSFRAXBP: '0xA6A8F315b1a8C9B05433d206b8fECfbF0fC96217', + stkcvxfrxETHETH: '0x4659d5fF63A1E1EDD6D5DD9CC315e063c95947d0', // Convex calls it stkcvxfrxETHCRV + stkcvxmsUSDFRAXBP: '0x227b7F44468A0EC0FDdfc3FB0cE09b294E62f875', + stkcvxpUSDFRAXBP: '0x7AEF5bDC573dCbfb40EC68b0BAAB03abB846C9c6', + stkcvxsUSDFRAXBP: '0x9f0C2673a33b7087e367253f196A7E823fBc2341', + tFRAX: '0x94671a3cee8c7a12ea72602978d1bb84e920efb2', + tFXS: '0xadf15ec41689fc5b6dca0db7c53c9bfe7981e655', + veCRV: '0x5f3b5DfEb7B28CDbD7FAba78963EE202a494e2A2', + veSDL: '0xD2751CdBED54B87777E805be36670D7aeAe73bb2', + vlCVX: '0x72a19342e8F1838460eBFCCEf09F6585e32db86E', + xSDT: '0xaC14864ce5A98aF3248Ffbf549441b04421247D3', + yvUSDC: '0xa354f35829ae975e850e23e9615b11da1b3dc4de', // V2: "0x5f18C75AbDAe578b483E5F43f12a39cF75b973a9" }, saddle_pools: { "Saddle alUSD/FEI/FRAX/LUSD": "0xC69DDcd4DFeF25D8a793241834d4cc4b3668EAD6", @@ -2639,6 +2680,7 @@ export const CONTRACT_ADDRESSES = { 'Convex stkcvxcvxCRVFRAXBP': '0xa103a6ca0C4D4072BA59a55FD453BFE4197A095B', 'Convex stkcvxcvxFXSFRAXBP': '0xA6A8F315b1a8C9B05433d206b8fECfbF0fC96217', 'Convex stkcvxDOLAFRAXBP': '0xF06c8696730cf760619e4fA0eDd0f79ea50531A9', + 'Convex stkcvxeUSDFRAXBP': '0x8942B520638A34766AB269f7dE33C78377dAb803', 'Convex stkcvxGUSDFRAXBP': '0x16e9eaC2A9e29aF3c53d24ed0F07fc403E098b64', 'Convex stkcvxFPIFRAX': '0x7287488F8Df7dddc5f373142D4827aAF92AAC845', 'Convex stkcvxFRAXBP': '0x8a53ee42FB458D4897e15cc7dEa3F75D0F1c3475', @@ -2650,6 +2692,7 @@ export const CONTRACT_ADDRESSES = { 'Convex stkcvxpUSDFRAXBP': '0x7AEF5bDC573dCbfb40EC68b0BAAB03abB846C9c6', 'Convex stkcvxRSRFRAXBP': '0xF37007f2b9DE656115e1B977Bb1fd38A99B8a2a6', 'Convex stkcvxSDTFRAXBP': '0xE6Aa75F98e6c105b821a2dba9Fbbd886b421F06b', + 'Convex stkcvxSTGFRAXBP': '', 'Convex stkcvxsUSDFRAXBP': '0x9f0C2673a33b7087e367253f196A7E823fBc2341', 'Convex stkcvxTUSDFRAXBP': '0x32fA492Ac1F729E0eE9eDdfCBacc3ef72B234e27', 'Convex stkcvxUSDDFRAXBP': '0x507e41A64eB7AE47ee303e3B16237ab757F6C06c', @@ -2725,6 +2768,7 @@ export const CONTRACT_ADDRESSES = { "Convex stkcvxcvxCRVFRAXBP": "0x57c9F019B25AaAF822926f4Cacf0a860f61eDd8D", "Convex stkcvxcvxFXSFRAXBP": "0x2F9504988675c91787E188Ed928D6E042d9052e9", "Convex stkcvxDOLAFRAXBP": "0xE7211E87D60177575846936F2123b5FA6f0ce8Ab", + "Convex stkcvxeUSDFRAXBP": "0x35806103719a5469FD2d140Fc21Fa39d695888a8", "Convex stkcvxFPIFRAX": "0x0a08673E3d7c454E1c6b27acD059C50Df6727FC9", "Convex stkcvxFRAXBP": "0x963f487796d54d2f27bA6F3Fbe91154cA103b199", "Convex stkcvxfrxETHETH": "0xa537d64881b84faffb9Ae43c951EEbF368b71cdA", @@ -2736,6 +2780,7 @@ export const CONTRACT_ADDRESSES = { "Convex stkcvxpUSDFRAXBP": "0x40b42E4ab3c044e67CBFb0bD99C9E975dcB83668", "Convex stkcvxRSRFRAXBP": "0xF22D3C85e41Ef4b5Ac8Cb8B89a14718e290a0561", "Convex stkcvxSDTFRAXBP": "0x9C8d9667d5726aEcA4d24171958BeE9F46861bed", + "Convex stkcvxSTGFRAXBP": "", "Convex stkcvxTUSDFRAXBP": "0xb324b2BD8a3Dc55b04111E84d5cce0c3771F8889", "Convex stkcvxUSDDFRAXBP": "0xF7242A1cE383174802818febB36B6eebb56d5BFb", "Convex stkcvxalUSDFRAXBP": "0x711d650Cd10dF656C2c28D375649689f137005fA", @@ -4137,7 +4182,7 @@ export const CONTRACT_ADDRESSES = { }, }, zksync: { - chain_id: 122, + chain_id: 324, main: { FRAX: '', FXS: '', From dee120ccc55a911a19fc6c9fd809fcd7d1c2dccf Mon Sep 17 00:00:00 2001 From: Travis Moore <33413876+FortisFortuna@users.noreply.github.com> Date: Tue, 11 Apr 2023 08:59:27 -0700 Subject: [PATCH 21/37] Create binance-fxs.txt --- binance-fxs.txt | 3 +++ 1 file changed, 3 insertions(+) create mode 100644 binance-fxs.txt diff --git a/binance-fxs.txt b/binance-fxs.txt new file mode 100644 index 00000000..3e4dc33d --- /dev/null +++ b/binance-fxs.txt @@ -0,0 +1,3 @@ +Hey Fraximalists, +Many users have asked how they can withdraw $FXS from Binance to BSC and get natively issued FXS onchain. If you withdraw FXS from Binance directly to BSC, you can use this handy swap UI to get the native $FXS token on BSC! +https://app.frax.finance/bridge?chain=bsc&from=0xDE2F075f6F14EB9D96755b24E416A53E736Ca363&to=0xe48A3d7d0Bc88d552f730B62c006bC925eadB9eE From 214de073b05a37daadf9cf3895b7c02a47cfa9d1 Mon Sep 17 00:00:00 2001 From: Travis Moore <33413876+FortisFortuna@users.noreply.github.com> Date: Tue, 11 Apr 2023 09:04:06 -0700 Subject: [PATCH 22/37] Delete binance-fxs.txt --- binance-fxs.txt | 3 --- 1 file changed, 3 deletions(-) delete mode 100644 binance-fxs.txt diff --git a/binance-fxs.txt b/binance-fxs.txt deleted file mode 100644 index 3e4dc33d..00000000 --- a/binance-fxs.txt +++ /dev/null @@ -1,3 +0,0 @@ -Hey Fraximalists, -Many users have asked how they can withdraw $FXS from Binance to BSC and get natively issued FXS onchain. If you withdraw FXS from Binance directly to BSC, you can use this handy swap UI to get the native $FXS token on BSC! -https://app.frax.finance/bridge?chain=bsc&from=0xDE2F075f6F14EB9D96755b24E416A53E736Ca363&to=0xe48A3d7d0Bc88d552f730B62c006bC925eadB9eE From 6a8e2382b6fb49ce8316f8497443a6261b708aa1 Mon Sep 17 00:00:00 2001 From: Travis Moore <33413876+FortisFortuna@users.noreply.github.com> Date: Tue, 11 Apr 2023 09:16:25 -0700 Subject: [PATCH 23/37] Create binance-fxs.md --- binance-fxs.md | 11 +++++++++++ 1 file changed, 11 insertions(+) create mode 100644 binance-fxs.md diff --git a/binance-fxs.md b/binance-fxs.md new file mode 100644 index 00000000..1c6570bc --- /dev/null +++ b/binance-fxs.md @@ -0,0 +1,11 @@ +## BSC FXS tokens +Many users have asked how they can withdraw $FXS from Binance to BSC and get natively issued (canonical/official) FXS onchain. If you withdraw FXS from Binance directly to BSC, you can use this handy swap UI to get the native $FXS token on BSC! +Link: https://app.frax.finance/bridge?chain=bsc&from=0xDE2F075f6F14EB9D96755b24E416A53E736Ca363&to=0xe48A3d7d0Bc88d552f730B62c006bC925eadB9eE +
+**Swap Ratio:** 1 to 1 +
+**Binance FXS on BSC:** 0xDE2F075f6F14EB9D96755b24E416A53E736Ca363 +
+**Canonical (official) FXS on BSC:** 0xe48A3d7d0Bc88d552f730B62c006bC925eadB9eE +
+**Rationale**: Fraxferry is now the official bridging solution for moving Frax-related tokens across chains. There are still a number of old bridge tokens that have not been converted to the official / canonical equivalents. The Binance FXS token (0xDE2...363) is one of them. We are working with Binance to gradually retire these to reduce confusion about users sending unsupported tokens to Binance Exchange and having them stranded. From d80df6a0da170e8f8252bd8fc75ed11a625add3e Mon Sep 17 00:00:00 2001 From: Travis Moore <33413876+FortisFortuna@users.noreply.github.com> Date: Tue, 11 Apr 2023 09:17:43 -0700 Subject: [PATCH 24/37] Update binance-fxs.md --- binance-fxs.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/binance-fxs.md b/binance-fxs.md index 1c6570bc..e4779c97 100644 --- a/binance-fxs.md +++ b/binance-fxs.md @@ -8,4 +8,4 @@ Link: https://app.frax.finance/bridge?chain=bsc&from=0xDE2F075f6F14EB9D96755b24E
**Canonical (official) FXS on BSC:** 0xe48A3d7d0Bc88d552f730B62c006bC925eadB9eE
-**Rationale**: Fraxferry is now the official bridging solution for moving Frax-related tokens across chains. There are still a number of old bridge tokens that have not been converted to the official / canonical equivalents. The Binance FXS token (0xDE2...363) is one of them. We are working with Binance to gradually retire these to reduce confusion about users sending unsupported tokens to Binance Exchange and having them stranded. +**Rationale**: Fraxferry is now the official bridging solution for moving Frax-related tokens across chains. There are still a number of old bridge tokens that have not been converted to their official / canonical equivalents. The Binance FXS token (0xDE2...363) is one of them. We are working with Binance to gradually retire these to reduce confusion about users sending unsupported tokens to Binance Exchange and having them stranded. From 2a9e5382a471ac134c1fa9027e553d7577dd1103 Mon Sep 17 00:00:00 2001 From: travis Date: Thu, 25 May 2023 12:13:53 -0700 Subject: [PATCH 25/37] periodic --- .gitignore | 4 + README_TESTS.md | 15 +- SAMPLE.env | 10 +- SAMPLE.env.forge | 2 +- foundry.toml | 6 +- lib/forge-std/.github/workflows/ci.yml | 92 - lib/forge-std/.gitignore | 4 - lib/forge-std/.gitmodules | 3 - lib/forge-std/LICENSE-APACHE | 203 - lib/forge-std/LICENSE-MIT | 25 - lib/forge-std/README.md | 250 - lib/forge-std/foundry.toml | 20 - lib/forge-std/lib/ds-test/.gitignore | 3 - lib/forge-std/lib/ds-test/LICENSE | 674 -- lib/forge-std/lib/ds-test/Makefile | 14 - lib/forge-std/lib/ds-test/default.nix | 4 - lib/forge-std/lib/ds-test/demo/demo.sol | 222 - lib/forge-std/lib/ds-test/package.json | 15 - lib/forge-std/lib/ds-test/src/test.sol | 469 - lib/forge-std/package.json | 16 - lib/forge-std/src/Common.sol | 28 - lib/forge-std/src/Components.sol | 14 - lib/forge-std/src/Script.sol | 14 - lib/forge-std/src/StdAssertions.sol | 209 - lib/forge-std/src/StdChains.sol | 90 - lib/forge-std/src/StdCheats.sol | 565 - lib/forge-std/src/StdError.sol | 15 - lib/forge-std/src/StdJson.sol | 179 - lib/forge-std/src/StdMath.sol | 43 - lib/forge-std/src/StdStorage.sol | 327 - lib/forge-std/src/StdUtils.sol | 85 - lib/forge-std/src/Test.sol | 11 - lib/forge-std/src/Vm.sol | 385 - lib/forge-std/src/console.sol | 1533 --- lib/forge-std/src/console2.sol | 1538 --- lib/forge-std/src/interfaces/IERC1155.sol | 105 - lib/forge-std/src/interfaces/IERC165.sol | 12 - lib/forge-std/src/interfaces/IERC20.sol | 43 - lib/forge-std/src/interfaces/IERC4626.sol | 190 - lib/forge-std/src/interfaces/IERC721.sol | 164 - lib/forge-std/test/StdAssertions.t.sol | 587 - lib/forge-std/test/StdChains.t.sol | 61 - lib/forge-std/test/StdCheats.t.sol | 305 - lib/forge-std/test/StdError.t.sol | 118 - lib/forge-std/test/StdMath.t.sol | 197 - lib/forge-std/test/StdStorage.t.sol | 283 - lib/forge-std/test/StdUtils.t.sol | 107 - .../test/compilation/CompilationScript.sol | 10 - .../compilation/CompilationScriptBase.sol | 10 - .../test/compilation/CompilationTest.sol | 10 - .../test/compilation/CompilationTestBase.sol | 10 - .../test/fixtures/broadcast.log.json | 187 - package-lock.json | 9680 +++++++++++------ package.json | 73 +- remappings.txt | 1 + src/hardhat/contracts/BAMM/BAMM.sol | 882 ++ src/hardhat/contracts/BAMM/BAMMHelper.sol | 366 + src/hardhat/contracts/BAMM/Babylonian.sol | 20 + src/hardhat/contracts/BAMM/FixedPoint.sol | 75 + .../contracts/BAMM/FraxswapDummyRouter.sol | 49 + src/hardhat/contracts/BAMM/FraxswapOracle.sol | 123 + src/hardhat/contracts/Common/Ownable.sol | 2 +- .../FraxferryV2/DummyStateRootOracle.sol | 14 + .../contracts/FraxferryV2/FerryOnL1.sol | 94 + .../contracts/FraxferryV2/FerryOnL2.sol | 143 + .../MerklePatriciaProofVerifier.sol | 255 + .../contracts/FraxferryV2/RLPReader.sol | 354 + .../FraxferryV2/StateProofVerifier.sol | 143 + .../contracts/FraxferryV2/StateProver.sol | 29 + .../interface/IStateRootOracle.sol | 10 + .../periphery/FraxswapRouterMultihop.sol | 2 +- .../interfaces/IFraxswapRouterMultihop.sol | 28 + .../balancer/IBalancerChildLiquidityGauge.sol | 62 + .../balancer/IL2BalancerPseudoMinter.sol | 26 + .../contracts/Misc_AMOs/bunni/IBunniLens.sol | 16 + .../Misc_AMOs/bunni/IBunniMinter.sol | 19 + .../Misc_AMOs/bunni/IBunniTokenLP.sol | 23 + .../Misc_AMOs/testing/OwnerTesting.sol | 1 + .../Staking/FraxCrossChainFarmV3_ERC20.sol | 32 +- .../FraxFarmRageQuitter_StakeDAO_FraxPut.sol | 108 + .../Staking/FraxUnifiedFarmTemplate.sol | 33 +- .../Staking/FraxUnifiedFarmTemplateClone.sol | 844 ++ .../Staking/FraxUnifiedFarm_ERC20.sol | 10 + .../Staking/FraxUnifiedFarm_PosRebase.sol | 6 +- ...UnifiedFarm_ERC20_Convex_FRAXBP_Stable.sol | 7 +- ...arm_ERC20_Convex_FRAXBP_Stable_Factory.sol | 58 + ...ifiedFarm_ERC20_Convex_FRAXBP_Volatile.sol | 32 +- .../FraxUnifiedFarm_ERC20_Other.sol.off | 69 + ...raxUnifiedFarm_ERC20_Other_Oracled.sol.off | 90 + src/hardhat/contracts/Utils/GasHelper.sol | 24 + src/hardhat/hardhat.config.js | 23 +- .../old_contracts/Curve/CurveAMO_V3.sol | 2 +- src/hardhat/test/BAMM/BAMM-Fuzz.js | 366 + src/hardhat/test/BAMM/BAMM.js | 725 ++ src/hardhat/test/BAMM/BAMMHelper.js | 518 + src/hardhat/test/BAMM/FraxswapOracle.js | 274 + src/hardhat/test/FraxferryV2/FerryV2-test.js | 114 + .../test/FraxferryV2/StateProver-test.js | 136 + src/types/constants.ts | 179 +- tsconfig.json | 2 +- 100 files changed, 12889 insertions(+), 12739 deletions(-) delete mode 100644 lib/forge-std/.github/workflows/ci.yml delete mode 100644 lib/forge-std/.gitignore delete mode 100644 lib/forge-std/.gitmodules delete mode 100644 lib/forge-std/LICENSE-APACHE delete mode 100644 lib/forge-std/LICENSE-MIT delete mode 100644 lib/forge-std/README.md delete mode 100644 lib/forge-std/foundry.toml delete mode 100644 lib/forge-std/lib/ds-test/.gitignore delete mode 100644 lib/forge-std/lib/ds-test/LICENSE delete mode 100644 lib/forge-std/lib/ds-test/Makefile delete mode 100644 lib/forge-std/lib/ds-test/default.nix delete mode 100644 lib/forge-std/lib/ds-test/demo/demo.sol delete mode 100644 lib/forge-std/lib/ds-test/package.json delete mode 100644 lib/forge-std/lib/ds-test/src/test.sol delete mode 100644 lib/forge-std/package.json delete mode 100644 lib/forge-std/src/Common.sol delete mode 100644 lib/forge-std/src/Components.sol delete mode 100644 lib/forge-std/src/Script.sol delete mode 100644 lib/forge-std/src/StdAssertions.sol delete mode 100644 lib/forge-std/src/StdChains.sol delete mode 100644 lib/forge-std/src/StdCheats.sol delete mode 100644 lib/forge-std/src/StdError.sol delete mode 100644 lib/forge-std/src/StdJson.sol delete mode 100644 lib/forge-std/src/StdMath.sol delete mode 100644 lib/forge-std/src/StdStorage.sol delete mode 100644 lib/forge-std/src/StdUtils.sol delete mode 100644 lib/forge-std/src/Test.sol delete mode 100644 lib/forge-std/src/Vm.sol delete mode 100644 lib/forge-std/src/console.sol delete mode 100644 lib/forge-std/src/console2.sol delete mode 100644 lib/forge-std/src/interfaces/IERC1155.sol delete mode 100644 lib/forge-std/src/interfaces/IERC165.sol delete mode 100644 lib/forge-std/src/interfaces/IERC20.sol delete mode 100644 lib/forge-std/src/interfaces/IERC4626.sol delete mode 100644 lib/forge-std/src/interfaces/IERC721.sol delete mode 100644 lib/forge-std/test/StdAssertions.t.sol delete mode 100644 lib/forge-std/test/StdChains.t.sol delete mode 100644 lib/forge-std/test/StdCheats.t.sol delete mode 100644 lib/forge-std/test/StdError.t.sol delete mode 100644 lib/forge-std/test/StdMath.t.sol delete mode 100644 lib/forge-std/test/StdStorage.t.sol delete mode 100644 lib/forge-std/test/StdUtils.t.sol delete mode 100644 lib/forge-std/test/compilation/CompilationScript.sol delete mode 100644 lib/forge-std/test/compilation/CompilationScriptBase.sol delete mode 100644 lib/forge-std/test/compilation/CompilationTest.sol delete mode 100644 lib/forge-std/test/compilation/CompilationTestBase.sol delete mode 100644 lib/forge-std/test/fixtures/broadcast.log.json create mode 100644 src/hardhat/contracts/BAMM/BAMM.sol create mode 100644 src/hardhat/contracts/BAMM/BAMMHelper.sol create mode 100644 src/hardhat/contracts/BAMM/Babylonian.sol create mode 100644 src/hardhat/contracts/BAMM/FixedPoint.sol create mode 100644 src/hardhat/contracts/BAMM/FraxswapDummyRouter.sol create mode 100644 src/hardhat/contracts/BAMM/FraxswapOracle.sol create mode 100644 src/hardhat/contracts/FraxferryV2/DummyStateRootOracle.sol create mode 100644 src/hardhat/contracts/FraxferryV2/FerryOnL1.sol create mode 100644 src/hardhat/contracts/FraxferryV2/FerryOnL2.sol create mode 100644 src/hardhat/contracts/FraxferryV2/MerklePatriciaProofVerifier.sol create mode 100644 src/hardhat/contracts/FraxferryV2/RLPReader.sol create mode 100644 src/hardhat/contracts/FraxferryV2/StateProofVerifier.sol create mode 100644 src/hardhat/contracts/FraxferryV2/StateProver.sol create mode 100644 src/hardhat/contracts/FraxferryV2/interface/IStateRootOracle.sol create mode 100644 src/hardhat/contracts/Fraxswap/periphery/interfaces/IFraxswapRouterMultihop.sol create mode 100644 src/hardhat/contracts/Misc_AMOs/balancer/IBalancerChildLiquidityGauge.sol create mode 100644 src/hardhat/contracts/Misc_AMOs/balancer/IL2BalancerPseudoMinter.sol create mode 100644 src/hardhat/contracts/Misc_AMOs/bunni/IBunniLens.sol create mode 100644 src/hardhat/contracts/Misc_AMOs/bunni/IBunniMinter.sol create mode 100644 src/hardhat/contracts/Misc_AMOs/bunni/IBunniTokenLP.sol create mode 100644 src/hardhat/contracts/Staking/FraxFarmRageQuitter_StakeDAO_FraxPut.sol create mode 100755 src/hardhat/contracts/Staking/FraxUnifiedFarmTemplateClone.sol create mode 100755 src/hardhat/contracts/Staking/Variants/FraxUnifiedFarm_ERC20_Convex_FRAXBP_Stable_Factory.sol create mode 100755 src/hardhat/contracts/Staking/Variants/FraxUnifiedFarm_ERC20_Other.sol.off create mode 100755 src/hardhat/contracts/Staking/Variants/FraxUnifiedFarm_ERC20_Other_Oracled.sol.off create mode 100644 src/hardhat/contracts/Utils/GasHelper.sol create mode 100644 src/hardhat/test/BAMM/BAMM-Fuzz.js create mode 100644 src/hardhat/test/BAMM/BAMM.js create mode 100644 src/hardhat/test/BAMM/BAMMHelper.js create mode 100644 src/hardhat/test/BAMM/FraxswapOracle.js create mode 100644 src/hardhat/test/FraxferryV2/FerryV2-test.js create mode 100644 src/hardhat/test/FraxferryV2/StateProver-test.js diff --git a/.gitignore b/.gitignore index 87168965..49bc8eac 100755 --- a/.gitignore +++ b/.gitignore @@ -22,6 +22,10 @@ src/hardhat/___For_Etherscan/* # Bin bin +# Lib +lib +lib/* + # Forge broadcast forge-cache diff --git a/README_TESTS.md b/README_TESTS.md index a2c38674..da6aedf7 100755 --- a/README_TESTS.md +++ b/README_TESTS.md @@ -1,9 +1,3 @@ -# PREP -1) Using SAMPLE.env and SAMPLE.env.forge, make local versions of .env and .env.forge -2) npm install -3) tsc -4) forge b - ## FORGE **------Testing------** Do first @@ -19,11 +13,10 @@ If you need to fork mainnet ```source .env.forge && forge test --fork-url $MAINNET_RPC_URL -vv``` If you need to fork mainnet, single test contract -```source .env.forge && forge test --fork-url $MAINNET_RPC_URL -vv --match-path ./src/foundry/test/veFPISProxy.t.sol``` +```source .env.forge && forge test --fork-url $MAINNET_RPC_URL -vv --match-path ./src/foundry/test/FXS/FXSDisableVoteTracking.t.sol``` Verbosely test a single contract while forking mainnet -or ```source .env.forge && forge test --fork-url $MAINNET_RPC_URL -m veFPISProxy.t.sol -vvvvv``` for single test verbosity level 5 - +or ```source .env && forge test --fork-url $MAINNET_RPC_URL -vvvvv --match-path ./src/foundry/test/XYZ/XYZ.t.sol``` for single test verbosity level 5 ## Hardhat **------Testing------** @@ -34,7 +27,7 @@ npx hardhat compile ARBITRUM npx hardhat test ./test/__ARBITRUM/CrossChainBridgeBacker_ARBI_AnySwap-Tests.js npx hardhat test ./test/__ARBITRUM/FraxCrossChainFarmV2-Tests.js -npx hardhat test ./test/__ARBITRUM/FraxCrossChainFarmV3-Tests.js +npx hardhat test ./test/__ARBITRUM/FraxCrossChainFarmV3_ERC20-Tests.js npx hardhat test ./test/__ARBITRUM/CurveAMO-ARBI-Tests.js AURORA @@ -51,6 +44,7 @@ Todo ETHEREUM npx hardhat test ./test/TWAMM_AMO-Tests.js npx hardhat test --no-compile ./test/AaveAMO-Tests.js +npx hardhat test ./test/BAMM/BAMM.js npx hardhat test ./test/CPITrackerOracle-Tests.js npx hardhat test ./test/ComboOracle_SLP_UniV2_UniV3-Tests.js npx hardhat test ./test/CommunalFarm-Tests.js @@ -65,6 +59,7 @@ npx hardhat test ./test/FraxCrossChainLiquidityTracker-Tests.js npx hardhat test ./test/FraxFarmBSC_Dual_V5.js npx hardhat test ./test/FraxFarmRageQuitter-Tests.js npx hardhat test ./test/Fraxferry/Fraxferry-test.js +npx hardhat test ./test/FraxferryV2/FerryV2-test.js npx hardhat test ./test/FraxGaugeController-Tests.js npx hardhat test ./test/FraxLendingAMO.js npx hardhat test ./test/FraxLiquidityBridger-Tests.js diff --git a/SAMPLE.env b/SAMPLE.env index 44bb69b3..03846b36 100644 --- a/SAMPLE.env +++ b/SAMPLE.env @@ -120,6 +120,9 @@ OPTIMISM_MNEMONIC_PHRASE='future ahead slight riot brand perfect paddle hammer c # Polygon POLYGON_MNEMONIC_PHRASE='future ahead slight riot brand perfect paddle hammer circle return review behave nasty fiction balcony' +# Polygon +POLYGON_ZKEVM_MNEMONIC_PHRASE='future ahead slight riot brand perfect paddle hammer circle return review behave nasty fiction balcony' + # zkSync ZKSYNC_MNEMONIC_PHRASE='future ahead slight riot brand perfect paddle hammer circle return review behave nasty fiction balcony' ZKSYNC_PKEY='' @@ -237,7 +240,10 @@ OPTIMISM_NETWORK_ENDPOINT_WSS='' #======================== POLYGON_NETWORK_ENDPOINT='https://polygon-mainnet.infura.io/v3/' +# POLYGON ZKEVM +#======================== +POLYGON_ZKEVM_NETWORK_ENDPOINT='https://zkevm-rpc.com' + # ZKSYNC #======================== -ZKSYNC_NETWORK_ENDPOINT='https://mainnet.era.zksync.io' -ZKSYNC_MUMBAI_NETWORK_ENDPOINT='https://mainnet.era.zksync.io' \ No newline at end of file +ZKSYNC_NETWORK_ENDPOINT='https://mainnet.era.zksync.io' \ No newline at end of file diff --git a/SAMPLE.env.forge b/SAMPLE.env.forge index d68f7d2c..8782c982 100644 --- a/SAMPLE.env.forge +++ b/SAMPLE.env.forge @@ -1,3 +1,3 @@ # Common # ================================= -MAINNET_RPC_URL="https://mainnet.infura.io/v3/" +MAINNET_RPC_URL="https://mainnet.infura.io/v3/" \ No newline at end of file diff --git a/foundry.toml b/foundry.toml index 4687477c..5aad98c0 100644 --- a/foundry.toml +++ b/foundry.toml @@ -1,5 +1,5 @@ [profile.default] -src = 'src/hardhat/contracts' +src = 'src/hardhat/contracts/BAMM' out = 'out' libs = ['node_modules', 'lib'] test = 'src/foundry/test/' @@ -14,7 +14,7 @@ remappings = [ # See more config options https://github.com/foundry-rs/foundry/tree/master/config -solc_version = "0.8.17" +solc_version = "0.8.19" gas_reports = ["*"] # settings for coverage reports @@ -42,4 +42,4 @@ stackAllocation = true # Have `optimizerSteps = ""` uncommented for faster testing compilation, ### but COMMENT IT out for DEPLOYMENT!### -# optimizerSteps = "" +# optimizerSteps = "" \ No newline at end of file diff --git a/lib/forge-std/.github/workflows/ci.yml b/lib/forge-std/.github/workflows/ci.yml deleted file mode 100644 index 96b23365..00000000 --- a/lib/forge-std/.github/workflows/ci.yml +++ /dev/null @@ -1,92 +0,0 @@ -name: CI - -on: - workflow_dispatch: - pull_request: - push: - branches: - - master - -jobs: - build: - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v3 - - - name: Install Foundry - uses: onbjerg/foundry-toolchain@v1 - with: - version: nightly - - - name: Print forge version - run: forge --version - - # Backwards compatibility checks. - - name: Check compatibility with 0.8.0 - if: always() - run: forge build --skip test --use solc:0.8.0 - - - name: Check compatibility with 0.7.6 - if: always() - run: forge build --skip test --use solc:0.7.6 - - - name: Check compatibility with 0.7.0 - if: always() - run: forge build --skip test --use solc:0.7.0 - - - name: Check compatibility with 0.6.12 - if: always() - run: forge build --skip test --use solc:0.6.12 - - - name: Check compatibility with 0.6.2 - if: always() - run: forge build --skip test --use solc:0.6.2 - - # via-ir compilation time checks. - - name: Measure compilation time of Test with 0.8.17 --via-ir - if: always() - run: forge build --skip test --contracts test/compilation/CompilationTest.sol --use solc:0.8.17 --via-ir - - - name: Measure compilation time of TestBase with 0.8.17 --via-ir - if: always() - run: forge build --skip test --contracts test/compilation/CompilationTestBase.sol --use solc:0.8.17 --via-ir - - - name: Measure compilation time of Script with 0.8.17 --via-ir - if: always() - run: forge build --skip test --contracts test/compilation/CompilationScript.sol --use solc:0.8.17 --via-ir - - - name: Measure compilation time of ScriptBase with 0.8.17 --via-ir - if: always() - run: forge build --skip test --contracts test/compilation/CompilationScriptBase.sol --use solc:0.8.17 --via-ir - - test: - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v3 - - - name: Install Foundry - uses: onbjerg/foundry-toolchain@v1 - with: - version: nightly - - - name: Print forge version - run: forge --version - - - name: Run tests - run: forge test -vvv - - fmt: - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v3 - - - name: Install Foundry - uses: onbjerg/foundry-toolchain@v1 - with: - version: nightly - - - name: Print forge version - run: forge --version - - - name: Check formatting - run: forge fmt --check diff --git a/lib/forge-std/.gitignore b/lib/forge-std/.gitignore deleted file mode 100644 index 756106d3..00000000 --- a/lib/forge-std/.gitignore +++ /dev/null @@ -1,4 +0,0 @@ -cache/ -out/ -.vscode -.idea diff --git a/lib/forge-std/.gitmodules b/lib/forge-std/.gitmodules deleted file mode 100644 index e1247196..00000000 --- a/lib/forge-std/.gitmodules +++ /dev/null @@ -1,3 +0,0 @@ -[submodule "lib/ds-test"] - path = lib/ds-test - url = https://github.com/dapphub/ds-test diff --git a/lib/forge-std/LICENSE-APACHE b/lib/forge-std/LICENSE-APACHE deleted file mode 100644 index cf01a499..00000000 --- a/lib/forge-std/LICENSE-APACHE +++ /dev/null @@ -1,203 +0,0 @@ -Copyright Contributors to Forge Standard Library - - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - -TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - -1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - -2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - -3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - -4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - -5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - -6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - -7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - -8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - -9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - -END OF TERMS AND CONDITIONS - -APPENDIX: How to apply the Apache License to your work. - - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "[]" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. - -Copyright [yyyy] [name of copyright owner] - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. diff --git a/lib/forge-std/LICENSE-MIT b/lib/forge-std/LICENSE-MIT deleted file mode 100644 index 28f98304..00000000 --- a/lib/forge-std/LICENSE-MIT +++ /dev/null @@ -1,25 +0,0 @@ -Copyright Contributors to Forge Standard Library - -Permission is hereby granted, free of charge, to any -person obtaining a copy of this software and associated -documentation files (the "Software"), to deal in the -Software without restriction, including without -limitation the rights to use, copy, modify, merge, -publish, distribute, sublicense, and/or sell copies of -the Software, and to permit persons to whom the Software -is furnished to do so, subject to the following -conditions: - -The above copyright notice and this permission notice -shall be included in all copies or substantial portions -of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF -ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED -TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A -PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT -SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY -CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR -IN CONNECTION WITH THE SOFTWARE O THE USE OR OTHER -DEALINGS IN THE SOFTWARE.R diff --git a/lib/forge-std/README.md b/lib/forge-std/README.md deleted file mode 100644 index 8494a7dd..00000000 --- a/lib/forge-std/README.md +++ /dev/null @@ -1,250 +0,0 @@ -# Forge Standard Library • [![CI status](https://github.com/foundry-rs/forge-std/actions/workflows/ci.yml/badge.svg)](https://github.com/foundry-rs/forge-std/actions/workflows/ci.yml) - -Forge Standard Library is a collection of helpful contracts and libraries for use with [Forge and Foundry](https://github.com/foundry-rs/foundry). It leverages Forge's cheatcodes to make writing tests easier and faster, while improving the UX of cheatcodes. - -**Learn how to use Forge-Std with the [📖 Foundry Book (Forge-Std Guide)](https://book.getfoundry.sh/forge/forge-std.html).** - -## Install - -```bash -forge install foundry-rs/forge-std -``` - -## Contracts -### stdError - -This is a helper contract for errors and reverts. In Forge, this contract is particularly helpful for the `expectRevert` cheatcode, as it provides all compiler builtin errors. - -See the contract itself for all error codes. - -#### Example usage - -```solidity - -import "forge-std/Test.sol"; - -contract TestContract is Test { - ErrorsTest test; - - function setUp() public { - test = new ErrorsTest(); - } - - function testExpectArithmetic() public { - vm.expectRevert(stdError.arithmeticError); - test.arithmeticError(10); - } -} - -contract ErrorsTest { - function arithmeticError(uint256 a) public { - uint256 a = a - 100; - } -} -``` - -### stdStorage - -This is a rather large contract due to all of the overloading to make the UX decent. Primarily, it is a wrapper around the `record` and `accesses` cheatcodes. It can *always* find and write the storage slot(s) associated with a particular variable without knowing the storage layout. The one _major_ caveat to this is while a slot can be found for packed storage variables, we can't write to that variable safely. If a user tries to write to a packed slot, the execution throws an error, unless it is uninitialized (`bytes32(0)`). - -This works by recording all `SLOAD`s and `SSTORE`s during a function call. If there is a single slot read or written to, it immediately returns the slot. Otherwise, behind the scenes, we iterate through and check each one (assuming the user passed in a `depth` parameter). If the variable is a struct, you can pass in a `depth` parameter which is basically the field depth. - -I.e.: -```solidity -struct T { - // depth 0 - uint256 a; - // depth 1 - uint256 b; -} -``` - -#### Example usage - -```solidity -import "forge-std/Test.sol"; - -contract TestContract is Test { - using stdStorage for StdStorage; - - Storage test; - - function setUp() public { - test = new Storage(); - } - - function testFindExists() public { - // Lets say we want to find the slot for the public - // variable `exists`. We just pass in the function selector - // to the `find` command - uint256 slot = stdstore.target(address(test)).sig("exists()").find(); - assertEq(slot, 0); - } - - function testWriteExists() public { - // Lets say we want to write to the slot for the public - // variable `exists`. We just pass in the function selector - // to the `checked_write` command - stdstore.target(address(test)).sig("exists()").checked_write(100); - assertEq(test.exists(), 100); - } - - // It supports arbitrary storage layouts, like assembly based storage locations - function testFindHidden() public { - // `hidden` is a random hash of a bytes, iteration through slots would - // not find it. Our mechanism does - // Also, you can use the selector instead of a string - uint256 slot = stdstore.target(address(test)).sig(test.hidden.selector).find(); - assertEq(slot, uint256(keccak256("my.random.var"))); - } - - // If targeting a mapping, you have to pass in the keys necessary to perform the find - // i.e.: - function testFindMapping() public { - uint256 slot = stdstore - .target(address(test)) - .sig(test.map_addr.selector) - .with_key(address(this)) - .find(); - // in the `Storage` constructor, we wrote that this address' value was 1 in the map - // so when we load the slot, we expect it to be 1 - assertEq(uint(vm.load(address(test), bytes32(slot))), 1); - } - - // If the target is a struct, you can specify the field depth: - function testFindStruct() public { - // NOTE: see the depth parameter - 0 means 0th field, 1 means 1st field, etc. - uint256 slot_for_a_field = stdstore - .target(address(test)) - .sig(test.basicStruct.selector) - .depth(0) - .find(); - - uint256 slot_for_b_field = stdstore - .target(address(test)) - .sig(test.basicStruct.selector) - .depth(1) - .find(); - - assertEq(uint(vm.load(address(test), bytes32(slot_for_a_field))), 1); - assertEq(uint(vm.load(address(test), bytes32(slot_for_b_field))), 2); - } -} - -// A complex storage contract -contract Storage { - struct UnpackedStruct { - uint256 a; - uint256 b; - } - - constructor() { - map_addr[msg.sender] = 1; - } - - uint256 public exists = 1; - mapping(address => uint256) public map_addr; - // mapping(address => Packed) public map_packed; - mapping(address => UnpackedStruct) public map_struct; - mapping(address => mapping(address => uint256)) public deep_map; - mapping(address => mapping(address => UnpackedStruct)) public deep_map_struct; - UnpackedStruct public basicStruct = UnpackedStruct({ - a: 1, - b: 2 - }); - - function hidden() public view returns (bytes32 t) { - // an extremely hidden storage slot - bytes32 slot = keccak256("my.random.var"); - assembly { - t := sload(slot) - } - } -} -``` - -### stdCheats - -This is a wrapper over miscellaneous cheatcodes that need wrappers to be more dev friendly. Currently there are only functions related to `prank`. In general, users may expect ETH to be put into an address on `prank`, but this is not the case for safety reasons. Explicitly this `hoax` function should only be used for address that have expected balances as it will get overwritten. If an address already has ETH, you should just use `prank`. If you want to change that balance explicitly, just use `deal`. If you want to do both, `hoax` is also right for you. - - -#### Example usage: -```solidity - -// SPDX-License-Identifier: MIT -pragma solidity ^0.8.0; - -import "forge-std/Test.sol"; - -// Inherit the stdCheats -contract StdCheatsTest is Test { - Bar test; - function setUp() public { - test = new Bar(); - } - - function testHoax() public { - // we call `hoax`, which gives the target address - // eth and then calls `prank` - hoax(address(1337)); - test.bar{value: 100}(address(1337)); - - // overloaded to allow you to specify how much eth to - // initialize the address with - hoax(address(1337), 1); - test.bar{value: 1}(address(1337)); - } - - function testStartHoax() public { - // we call `startHoax`, which gives the target address - // eth and then calls `startPrank` - // - // it is also overloaded so that you can specify an eth amount - startHoax(address(1337)); - test.bar{value: 100}(address(1337)); - test.bar{value: 100}(address(1337)); - vm.stopPrank(); - test.bar(address(this)); - } -} - -contract Bar { - function bar(address expectedSender) public payable { - require(msg.sender == expectedSender, "!prank"); - } -} -``` - -### Std Assertions - -Expand upon the assertion functions from the `DSTest` library. - -### `console.log` - -Usage follows the same format as [Hardhat](https://hardhat.org/hardhat-network/reference/#console-log). -It's recommended to use `console2.sol` as shown below, as this will show the decoded logs in Forge traces. - -```solidity -// import it indirectly via Test.sol -import "forge-std/Test.sol"; -// or directly import it -import "forge-std/console2.sol"; -... -console2.log(someValue); -``` - -If you need compatibility with Hardhat, you must use the standard `console.sol` instead. -Due to a bug in `console.sol`, logs that use `uint256` or `int256` types will not be properly decoded in Forge traces. - -```solidity -// import it indirectly via Test.sol -import "forge-std/Test.sol"; -// or directly import it -import "forge-std/console.sol"; -... -console.log(someValue); -``` - -## License - -Forge Standard Library is offered under either [MIT](LICENSE-MIT) or [Apache 2.0](LICENSE-APACHE) license. diff --git a/lib/forge-std/foundry.toml b/lib/forge-std/foundry.toml deleted file mode 100644 index 158e487a..00000000 --- a/lib/forge-std/foundry.toml +++ /dev/null @@ -1,20 +0,0 @@ -[profile.default] -fs_permissions = [{ access = "read-write", path = "./"}] - -[rpc_endpoints] -# The RPC URLs are modified versions of the default for testing initialization. -mainnet = "https://mainnet.infura.io/v3/7a8769b798b642f6933f2ed52042bd70" # Different API key. -optimism_goerli = "https://goerli.optimism.io/" # Adds a trailing slash. -arbitrum_one_goerli = "https://goerli-rollup.arbitrum.io/rpc/" # Adds a trailing slash. - -[fmt] -# These are all the `forge fmt` defaults. -line_length = 120 -tab_width = 4 -bracket_spacing = false -int_types = 'long' -multiline_func_header = 'attributes_first' -quote_style = 'double' -number_underscore = 'preserve' -single_line_statement_blocks = 'preserve' -ignore = ["src/console.sol", "src/console2.sol"] \ No newline at end of file diff --git a/lib/forge-std/lib/ds-test/.gitignore b/lib/forge-std/lib/ds-test/.gitignore deleted file mode 100644 index 63f0b2c6..00000000 --- a/lib/forge-std/lib/ds-test/.gitignore +++ /dev/null @@ -1,3 +0,0 @@ -/.dapple -/build -/out diff --git a/lib/forge-std/lib/ds-test/LICENSE b/lib/forge-std/lib/ds-test/LICENSE deleted file mode 100644 index 94a9ed02..00000000 --- a/lib/forge-std/lib/ds-test/LICENSE +++ /dev/null @@ -1,674 +0,0 @@ - GNU GENERAL PUBLIC LICENSE - Version 3, 29 June 2007 - - Copyright (C) 2007 Free Software Foundation, Inc. - Everyone is permitted to copy and distribute verbatim copies - of this license document, but changing it is not allowed. - - Preamble - - The GNU General Public License is a free, copyleft license for -software and other kinds of works. - - The licenses for most software and other practical works are designed -to take away your freedom to share and change the works. By contrast, -the GNU General Public License is intended to guarantee your freedom to -share and change all versions of a program--to make sure it remains free -software for all its users. We, the Free Software Foundation, use the -GNU General Public License for most of our software; it applies also to -any other work released this way by its authors. You can apply it to -your programs, too. - - When we speak of free software, we are referring to freedom, not -price. Our General Public Licenses are designed to make sure that you -have the freedom to distribute copies of free software (and charge for -them if you wish), that you receive source code or can get it if you -want it, that you can change the software or use pieces of it in new -free programs, and that you know you can do these things. - - To protect your rights, we need to prevent others from denying you -these rights or asking you to surrender the rights. Therefore, you have -certain responsibilities if you distribute copies of the software, or if -you modify it: responsibilities to respect the freedom of others. - - For example, if you distribute copies of such a program, whether -gratis or for a fee, you must pass on to the recipients the same -freedoms that you received. You must make sure that they, too, receive -or can get the source code. And you must show them these terms so they -know their rights. - - Developers that use the GNU GPL protect your rights with two steps: -(1) assert copyright on the software, and (2) offer you this License -giving you legal permission to copy, distribute and/or modify it. - - For the developers' and authors' protection, the GPL clearly explains -that there is no warranty for this free software. For both users' and -authors' sake, the GPL requires that modified versions be marked as -changed, so that their problems will not be attributed erroneously to -authors of previous versions. - - Some devices are designed to deny users access to install or run -modified versions of the software inside them, although the manufacturer -can do so. This is fundamentally incompatible with the aim of -protecting users' freedom to change the software. The systematic -pattern of such abuse occurs in the area of products for individuals to -use, which is precisely where it is most unacceptable. Therefore, we -have designed this version of the GPL to prohibit the practice for those -products. If such problems arise substantially in other domains, we -stand ready to extend this provision to those domains in future versions -of the GPL, as needed to protect the freedom of users. - - Finally, every program is threatened constantly by software patents. -States should not allow patents to restrict development and use of -software on general-purpose computers, but in those that do, we wish to -avoid the special danger that patents applied to a free program could -make it effectively proprietary. To prevent this, the GPL assures that -patents cannot be used to render the program non-free. - - The precise terms and conditions for copying, distribution and -modification follow. - - TERMS AND CONDITIONS - - 0. Definitions. - - "This License" refers to version 3 of the GNU General Public License. - - "Copyright" also means copyright-like laws that apply to other kinds of -works, such as semiconductor masks. - - "The Program" refers to any copyrightable work licensed under this -License. Each licensee is addressed as "you". "Licensees" and -"recipients" may be individuals or organizations. - - To "modify" a work means to copy from or adapt all or part of the work -in a fashion requiring copyright permission, other than the making of an -exact copy. The resulting work is called a "modified version" of the -earlier work or a work "based on" the earlier work. - - A "covered work" means either the unmodified Program or a work based -on the Program. - - To "propagate" a work means to do anything with it that, without -permission, would make you directly or secondarily liable for -infringement under applicable copyright law, except executing it on a -computer or modifying a private copy. Propagation includes copying, -distribution (with or without modification), making available to the -public, and in some countries other activities as well. - - To "convey" a work means any kind of propagation that enables other -parties to make or receive copies. Mere interaction with a user through -a computer network, with no transfer of a copy, is not conveying. - - An interactive user interface displays "Appropriate Legal Notices" -to the extent that it includes a convenient and prominently visible -feature that (1) displays an appropriate copyright notice, and (2) -tells the user that there is no warranty for the work (except to the -extent that warranties are provided), that licensees may convey the -work under this License, and how to view a copy of this License. If -the interface presents a list of user commands or options, such as a -menu, a prominent item in the list meets this criterion. - - 1. Source Code. - - The "source code" for a work means the preferred form of the work -for making modifications to it. "Object code" means any non-source -form of a work. - - A "Standard Interface" means an interface that either is an official -standard defined by a recognized standards body, or, in the case of -interfaces specified for a particular programming language, one that -is widely used among developers working in that language. - - The "System Libraries" of an executable work include anything, other -than the work as a whole, that (a) is included in the normal form of -packaging a Major Component, but which is not part of that Major -Component, and (b) serves only to enable use of the work with that -Major Component, or to implement a Standard Interface for which an -implementation is available to the public in source code form. A -"Major Component", in this context, means a major essential component -(kernel, window system, and so on) of the specific operating system -(if any) on which the executable work runs, or a compiler used to -produce the work, or an object code interpreter used to run it. - - The "Corresponding Source" for a work in object code form means all -the source code needed to generate, install, and (for an executable -work) run the object code and to modify the work, including scripts to -control those activities. However, it does not include the work's -System Libraries, or general-purpose tools or generally available free -programs which are used unmodified in performing those activities but -which are not part of the work. For example, Corresponding Source -includes interface definition files associated with source files for -the work, and the source code for shared libraries and dynamically -linked subprograms that the work is specifically designed to require, -such as by intimate data communication or control flow between those -subprograms and other parts of the work. - - The Corresponding Source need not include anything that users -can regenerate automatically from other parts of the Corresponding -Source. - - The Corresponding Source for a work in source code form is that -same work. - - 2. Basic Permissions. - - All rights granted under this License are granted for the term of -copyright on the Program, and are irrevocable provided the stated -conditions are met. This License explicitly affirms your unlimited -permission to run the unmodified Program. The output from running a -covered work is covered by this License only if the output, given its -content, constitutes a covered work. This License acknowledges your -rights of fair use or other equivalent, as provided by copyright law. - - You may make, run and propagate covered works that you do not -convey, without conditions so long as your license otherwise remains -in force. You may convey covered works to others for the sole purpose -of having them make modifications exclusively for you, or provide you -with facilities for running those works, provided that you comply with -the terms of this License in conveying all material for which you do -not control copyright. Those thus making or running the covered works -for you must do so exclusively on your behalf, under your direction -and control, on terms that prohibit them from making any copies of -your copyrighted material outside their relationship with you. - - Conveying under any other circumstances is permitted solely under -the conditions stated below. Sublicensing is not allowed; section 10 -makes it unnecessary. - - 3. Protecting Users' Legal Rights From Anti-Circumvention Law. - - No covered work shall be deemed part of an effective technological -measure under any applicable law fulfilling obligations under article -11 of the WIPO copyright treaty adopted on 20 December 1996, or -similar laws prohibiting or restricting circumvention of such -measures. - - When you convey a covered work, you waive any legal power to forbid -circumvention of technological measures to the extent such circumvention -is effected by exercising rights under this License with respect to -the covered work, and you disclaim any intention to limit operation or -modification of the work as a means of enforcing, against the work's -users, your or third parties' legal rights to forbid circumvention of -technological measures. - - 4. Conveying Verbatim Copies. - - You may convey verbatim copies of the Program's source code as you -receive it, in any medium, provided that you conspicuously and -appropriately publish on each copy an appropriate copyright notice; -keep intact all notices stating that this License and any -non-permissive terms added in accord with section 7 apply to the code; -keep intact all notices of the absence of any warranty; and give all -recipients a copy of this License along with the Program. - - You may charge any price or no price for each copy that you convey, -and you may offer support or warranty protection for a fee. - - 5. Conveying Modified Source Versions. - - You may convey a work based on the Program, or the modifications to -produce it from the Program, in the form of source code under the -terms of section 4, provided that you also meet all of these conditions: - - a) The work must carry prominent notices stating that you modified - it, and giving a relevant date. - - b) The work must carry prominent notices stating that it is - released under this License and any conditions added under section - 7. This requirement modifies the requirement in section 4 to - "keep intact all notices". - - c) You must license the entire work, as a whole, under this - License to anyone who comes into possession of a copy. This - License will therefore apply, along with any applicable section 7 - additional terms, to the whole of the work, and all its parts, - regardless of how they are packaged. This License gives no - permission to license the work in any other way, but it does not - invalidate such permission if you have separately received it. - - d) If the work has interactive user interfaces, each must display - Appropriate Legal Notices; however, if the Program has interactive - interfaces that do not display Appropriate Legal Notices, your - work need not make them do so. - - A compilation of a covered work with other separate and independent -works, which are not by their nature extensions of the covered work, -and which are not combined with it such as to form a larger program, -in or on a volume of a storage or distribution medium, is called an -"aggregate" if the compilation and its resulting copyright are not -used to limit the access or legal rights of the compilation's users -beyond what the individual works permit. Inclusion of a covered work -in an aggregate does not cause this License to apply to the other -parts of the aggregate. - - 6. Conveying Non-Source Forms. - - You may convey a covered work in object code form under the terms -of sections 4 and 5, provided that you also convey the -machine-readable Corresponding Source under the terms of this License, -in one of these ways: - - a) Convey the object code in, or embodied in, a physical product - (including a physical distribution medium), accompanied by the - Corresponding Source fixed on a durable physical medium - customarily used for software interchange. - - b) Convey the object code in, or embodied in, a physical product - (including a physical distribution medium), accompanied by a - written offer, valid for at least three years and valid for as - long as you offer spare parts or customer support for that product - model, to give anyone who possesses the object code either (1) a - copy of the Corresponding Source for all the software in the - product that is covered by this License, on a durable physical - medium customarily used for software interchange, for a price no - more than your reasonable cost of physically performing this - conveying of source, or (2) access to copy the - Corresponding Source from a network server at no charge. - - c) Convey individual copies of the object code with a copy of the - written offer to provide the Corresponding Source. This - alternative is allowed only occasionally and noncommercially, and - only if you received the object code with such an offer, in accord - with subsection 6b. - - d) Convey the object code by offering access from a designated - place (gratis or for a charge), and offer equivalent access to the - Corresponding Source in the same way through the same place at no - further charge. You need not require recipients to copy the - Corresponding Source along with the object code. If the place to - copy the object code is a network server, the Corresponding Source - may be on a different server (operated by you or a third party) - that supports equivalent copying facilities, provided you maintain - clear directions next to the object code saying where to find the - Corresponding Source. Regardless of what server hosts the - Corresponding Source, you remain obligated to ensure that it is - available for as long as needed to satisfy these requirements. - - e) Convey the object code using peer-to-peer transmission, provided - you inform other peers where the object code and Corresponding - Source of the work are being offered to the general public at no - charge under subsection 6d. - - A separable portion of the object code, whose source code is excluded -from the Corresponding Source as a System Library, need not be -included in conveying the object code work. - - A "User Product" is either (1) a "consumer product", which means any -tangible personal property which is normally used for personal, family, -or household purposes, or (2) anything designed or sold for incorporation -into a dwelling. In determining whether a product is a consumer product, -doubtful cases shall be resolved in favor of coverage. For a particular -product received by a particular user, "normally used" refers to a -typical or common use of that class of product, regardless of the status -of the particular user or of the way in which the particular user -actually uses, or expects or is expected to use, the product. A product -is a consumer product regardless of whether the product has substantial -commercial, industrial or non-consumer uses, unless such uses represent -the only significant mode of use of the product. - - "Installation Information" for a User Product means any methods, -procedures, authorization keys, or other information required to install -and execute modified versions of a covered work in that User Product from -a modified version of its Corresponding Source. The information must -suffice to ensure that the continued functioning of the modified object -code is in no case prevented or interfered with solely because -modification has been made. - - If you convey an object code work under this section in, or with, or -specifically for use in, a User Product, and the conveying occurs as -part of a transaction in which the right of possession and use of the -User Product is transferred to the recipient in perpetuity or for a -fixed term (regardless of how the transaction is characterized), the -Corresponding Source conveyed under this section must be accompanied -by the Installation Information. But this requirement does not apply -if neither you nor any third party retains the ability to install -modified object code on the User Product (for example, the work has -been installed in ROM). - - The requirement to provide Installation Information does not include a -requirement to continue to provide support service, warranty, or updates -for a work that has been modified or installed by the recipient, or for -the User Product in which it has been modified or installed. Access to a -network may be denied when the modification itself materially and -adversely affects the operation of the network or violates the rules and -protocols for communication across the network. - - Corresponding Source conveyed, and Installation Information provided, -in accord with this section must be in a format that is publicly -documented (and with an implementation available to the public in -source code form), and must require no special password or key for -unpacking, reading or copying. - - 7. Additional Terms. - - "Additional permissions" are terms that supplement the terms of this -License by making exceptions from one or more of its conditions. -Additional permissions that are applicable to the entire Program shall -be treated as though they were included in this License, to the extent -that they are valid under applicable law. If additional permissions -apply only to part of the Program, that part may be used separately -under those permissions, but the entire Program remains governed by -this License without regard to the additional permissions. - - When you convey a copy of a covered work, you may at your option -remove any additional permissions from that copy, or from any part of -it. (Additional permissions may be written to require their own -removal in certain cases when you modify the work.) You may place -additional permissions on material, added by you to a covered work, -for which you have or can give appropriate copyright permission. - - Notwithstanding any other provision of this License, for material you -add to a covered work, you may (if authorized by the copyright holders of -that material) supplement the terms of this License with terms: - - a) Disclaiming warranty or limiting liability differently from the - terms of sections 15 and 16 of this License; or - - b) Requiring preservation of specified reasonable legal notices or - author attributions in that material or in the Appropriate Legal - Notices displayed by works containing it; or - - c) Prohibiting misrepresentation of the origin of that material, or - requiring that modified versions of such material be marked in - reasonable ways as different from the original version; or - - d) Limiting the use for publicity purposes of names of licensors or - authors of the material; or - - e) Declining to grant rights under trademark law for use of some - trade names, trademarks, or service marks; or - - f) Requiring indemnification of licensors and authors of that - material by anyone who conveys the material (or modified versions of - it) with contractual assumptions of liability to the recipient, for - any liability that these contractual assumptions directly impose on - those licensors and authors. - - All other non-permissive additional terms are considered "further -restrictions" within the meaning of section 10. If the Program as you -received it, or any part of it, contains a notice stating that it is -governed by this License along with a term that is a further -restriction, you may remove that term. If a license document contains -a further restriction but permits relicensing or conveying under this -License, you may add to a covered work material governed by the terms -of that license document, provided that the further restriction does -not survive such relicensing or conveying. - - If you add terms to a covered work in accord with this section, you -must place, in the relevant source files, a statement of the -additional terms that apply to those files, or a notice indicating -where to find the applicable terms. - - Additional terms, permissive or non-permissive, may be stated in the -form of a separately written license, or stated as exceptions; -the above requirements apply either way. - - 8. Termination. - - You may not propagate or modify a covered work except as expressly -provided under this License. Any attempt otherwise to propagate or -modify it is void, and will automatically terminate your rights under -this License (including any patent licenses granted under the third -paragraph of section 11). - - However, if you cease all violation of this License, then your -license from a particular copyright holder is reinstated (a) -provisionally, unless and until the copyright holder explicitly and -finally terminates your license, and (b) permanently, if the copyright -holder fails to notify you of the violation by some reasonable means -prior to 60 days after the cessation. - - Moreover, your license from a particular copyright holder is -reinstated permanently if the copyright holder notifies you of the -violation by some reasonable means, this is the first time you have -received notice of violation of this License (for any work) from that -copyright holder, and you cure the violation prior to 30 days after -your receipt of the notice. - - Termination of your rights under this section does not terminate the -licenses of parties who have received copies or rights from you under -this License. If your rights have been terminated and not permanently -reinstated, you do not qualify to receive new licenses for the same -material under section 10. - - 9. Acceptance Not Required for Having Copies. - - You are not required to accept this License in order to receive or -run a copy of the Program. Ancillary propagation of a covered work -occurring solely as a consequence of using peer-to-peer transmission -to receive a copy likewise does not require acceptance. However, -nothing other than this License grants you permission to propagate or -modify any covered work. These actions infringe copyright if you do -not accept this License. Therefore, by modifying or propagating a -covered work, you indicate your acceptance of this License to do so. - - 10. Automatic Licensing of Downstream Recipients. - - Each time you convey a covered work, the recipient automatically -receives a license from the original licensors, to run, modify and -propagate that work, subject to this License. You are not responsible -for enforcing compliance by third parties with this License. - - An "entity transaction" is a transaction transferring control of an -organization, or substantially all assets of one, or subdividing an -organization, or merging organizations. If propagation of a covered -work results from an entity transaction, each party to that -transaction who receives a copy of the work also receives whatever -licenses to the work the party's predecessor in interest had or could -give under the previous paragraph, plus a right to possession of the -Corresponding Source of the work from the predecessor in interest, if -the predecessor has it or can get it with reasonable efforts. - - You may not impose any further restrictions on the exercise of the -rights granted or affirmed under this License. For example, you may -not impose a license fee, royalty, or other charge for exercise of -rights granted under this License, and you may not initiate litigation -(including a cross-claim or counterclaim in a lawsuit) alleging that -any patent claim is infringed by making, using, selling, offering for -sale, or importing the Program or any portion of it. - - 11. Patents. - - A "contributor" is a copyright holder who authorizes use under this -License of the Program or a work on which the Program is based. The -work thus licensed is called the contributor's "contributor version". - - A contributor's "essential patent claims" are all patent claims -owned or controlled by the contributor, whether already acquired or -hereafter acquired, that would be infringed by some manner, permitted -by this License, of making, using, or selling its contributor version, -but do not include claims that would be infringed only as a -consequence of further modification of the contributor version. For -purposes of this definition, "control" includes the right to grant -patent sublicenses in a manner consistent with the requirements of -this License. - - Each contributor grants you a non-exclusive, worldwide, royalty-free -patent license under the contributor's essential patent claims, to -make, use, sell, offer for sale, import and otherwise run, modify and -propagate the contents of its contributor version. - - In the following three paragraphs, a "patent license" is any express -agreement or commitment, however denominated, not to enforce a patent -(such as an express permission to practice a patent or covenant not to -sue for patent infringement). To "grant" such a patent license to a -party means to make such an agreement or commitment not to enforce a -patent against the party. - - If you convey a covered work, knowingly relying on a patent license, -and the Corresponding Source of the work is not available for anyone -to copy, free of charge and under the terms of this License, through a -publicly available network server or other readily accessible means, -then you must either (1) cause the Corresponding Source to be so -available, or (2) arrange to deprive yourself of the benefit of the -patent license for this particular work, or (3) arrange, in a manner -consistent with the requirements of this License, to extend the patent -license to downstream recipients. "Knowingly relying" means you have -actual knowledge that, but for the patent license, your conveying the -covered work in a country, or your recipient's use of the covered work -in a country, would infringe one or more identifiable patents in that -country that you have reason to believe are valid. - - If, pursuant to or in connection with a single transaction or -arrangement, you convey, or propagate by procuring conveyance of, a -covered work, and grant a patent license to some of the parties -receiving the covered work authorizing them to use, propagate, modify -or convey a specific copy of the covered work, then the patent license -you grant is automatically extended to all recipients of the covered -work and works based on it. - - A patent license is "discriminatory" if it does not include within -the scope of its coverage, prohibits the exercise of, or is -conditioned on the non-exercise of one or more of the rights that are -specifically granted under this License. You may not convey a covered -work if you are a party to an arrangement with a third party that is -in the business of distributing software, under which you make payment -to the third party based on the extent of your activity of conveying -the work, and under which the third party grants, to any of the -parties who would receive the covered work from you, a discriminatory -patent license (a) in connection with copies of the covered work -conveyed by you (or copies made from those copies), or (b) primarily -for and in connection with specific products or compilations that -contain the covered work, unless you entered into that arrangement, -or that patent license was granted, prior to 28 March 2007. - - Nothing in this License shall be construed as excluding or limiting -any implied license or other defenses to infringement that may -otherwise be available to you under applicable patent law. - - 12. No Surrender of Others' Freedom. - - If conditions are imposed on you (whether by court order, agreement or -otherwise) that contradict the conditions of this License, they do not -excuse you from the conditions of this License. If you cannot convey a -covered work so as to satisfy simultaneously your obligations under this -License and any other pertinent obligations, then as a consequence you may -not convey it at all. For example, if you agree to terms that obligate you -to collect a royalty for further conveying from those to whom you convey -the Program, the only way you could satisfy both those terms and this -License would be to refrain entirely from conveying the Program. - - 13. Use with the GNU Affero General Public License. - - Notwithstanding any other provision of this License, you have -permission to link or combine any covered work with a work licensed -under version 3 of the GNU Affero General Public License into a single -combined work, and to convey the resulting work. The terms of this -License will continue to apply to the part which is the covered work, -but the special requirements of the GNU Affero General Public License, -section 13, concerning interaction through a network will apply to the -combination as such. - - 14. Revised Versions of this License. - - The Free Software Foundation may publish revised and/or new versions of -the GNU General Public License from time to time. Such new versions will -be similar in spirit to the present version, but may differ in detail to -address new problems or concerns. - - Each version is given a distinguishing version number. If the -Program specifies that a certain numbered version of the GNU General -Public License "or any later version" applies to it, you have the -option of following the terms and conditions either of that numbered -version or of any later version published by the Free Software -Foundation. If the Program does not specify a version number of the -GNU General Public License, you may choose any version ever published -by the Free Software Foundation. - - If the Program specifies that a proxy can decide which future -versions of the GNU General Public License can be used, that proxy's -public statement of acceptance of a version permanently authorizes you -to choose that version for the Program. - - Later license versions may give you additional or different -permissions. However, no additional obligations are imposed on any -author or copyright holder as a result of your choosing to follow a -later version. - - 15. Disclaimer of Warranty. - - THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY -APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT -HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY -OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, -THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM -IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF -ALL NECESSARY SERVICING, REPAIR OR CORRECTION. - - 16. Limitation of Liability. - - IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING -WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS -THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY -GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE -USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF -DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD -PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), -EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF -SUCH DAMAGES. - - 17. Interpretation of Sections 15 and 16. - - If the disclaimer of warranty and limitation of liability provided -above cannot be given local legal effect according to their terms, -reviewing courts shall apply local law that most closely approximates -an absolute waiver of all civil liability in connection with the -Program, unless a warranty or assumption of liability accompanies a -copy of the Program in return for a fee. - - END OF TERMS AND CONDITIONS - - How to Apply These Terms to Your New Programs - - If you develop a new program, and you want it to be of the greatest -possible use to the public, the best way to achieve this is to make it -free software which everyone can redistribute and change under these terms. - - To do so, attach the following notices to the program. It is safest -to attach them to the start of each source file to most effectively -state the exclusion of warranty; and each file should have at least -the "copyright" line and a pointer to where the full notice is found. - - - Copyright (C) - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - -Also add information on how to contact you by electronic and paper mail. - - If the program does terminal interaction, make it output a short -notice like this when it starts in an interactive mode: - - Copyright (C) - This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. - This is free software, and you are welcome to redistribute it - under certain conditions; type `show c' for details. - -The hypothetical commands `show w' and `show c' should show the appropriate -parts of the General Public License. Of course, your program's commands -might be different; for a GUI interface, you would use an "about box". - - You should also get your employer (if you work as a programmer) or school, -if any, to sign a "copyright disclaimer" for the program, if necessary. -For more information on this, and how to apply and follow the GNU GPL, see -. - - The GNU General Public License does not permit incorporating your program -into proprietary programs. If your program is a subroutine library, you -may consider it more useful to permit linking proprietary applications with -the library. If this is what you want to do, use the GNU Lesser General -Public License instead of this License. But first, please read -. diff --git a/lib/forge-std/lib/ds-test/Makefile b/lib/forge-std/lib/ds-test/Makefile deleted file mode 100644 index 661dac48..00000000 --- a/lib/forge-std/lib/ds-test/Makefile +++ /dev/null @@ -1,14 +0,0 @@ -all:; dapp build - -test: - -dapp --use solc:0.4.23 build - -dapp --use solc:0.4.26 build - -dapp --use solc:0.5.17 build - -dapp --use solc:0.6.12 build - -dapp --use solc:0.7.5 build - -demo: - DAPP_SRC=demo dapp --use solc:0.7.5 build - -hevm dapp-test --verbose 3 - -.PHONY: test demo diff --git a/lib/forge-std/lib/ds-test/default.nix b/lib/forge-std/lib/ds-test/default.nix deleted file mode 100644 index cf65419a..00000000 --- a/lib/forge-std/lib/ds-test/default.nix +++ /dev/null @@ -1,4 +0,0 @@ -{ solidityPackage, dappsys }: solidityPackage { - name = "ds-test"; - src = ./src; -} diff --git a/lib/forge-std/lib/ds-test/demo/demo.sol b/lib/forge-std/lib/ds-test/demo/demo.sol deleted file mode 100644 index f3bb48e7..00000000 --- a/lib/forge-std/lib/ds-test/demo/demo.sol +++ /dev/null @@ -1,222 +0,0 @@ -// SPDX-License-Identifier: GPL-3.0-or-later -pragma solidity >=0.5.0; - -import "../src/test.sol"; - -contract DemoTest is DSTest { - function test_this() public pure { - require(true); - } - function test_logs() public { - emit log("-- log(string)"); - emit log("a string"); - - emit log("-- log_named_uint(string, uint)"); - emit log_named_uint("uint", 512); - - emit log("-- log_named_int(string, int)"); - emit log_named_int("int", -512); - - emit log("-- log_named_address(string, address)"); - emit log_named_address("address", address(this)); - - emit log("-- log_named_bytes32(string, bytes32)"); - emit log_named_bytes32("bytes32", "a string"); - - emit log("-- log_named_bytes(string, bytes)"); - emit log_named_bytes("bytes", hex"cafefe"); - - emit log("-- log_named_string(string, string)"); - emit log_named_string("string", "a string"); - - emit log("-- log_named_decimal_uint(string, uint, uint)"); - emit log_named_decimal_uint("decimal uint", 1.0e18, 18); - - emit log("-- log_named_decimal_int(string, int, uint)"); - emit log_named_decimal_int("decimal int", -1.0e18, 18); - } - event log_old_named_uint(bytes32,uint); - function test_old_logs() public { - emit log_old_named_uint("key", 500); - emit log_named_bytes32("bkey", "val"); - } - function test_trace() public view { - this.echo("string 1", "string 2"); - } - function test_multiline() public { - emit log("a multiline\\nstring"); - emit log("a multiline string"); - emit log_bytes("a string"); - emit log_bytes("a multiline\nstring"); - emit log_bytes("a multiline\\nstring"); - emit logs(hex"0000"); - emit log_named_bytes("0x0000", hex"0000"); - emit logs(hex"ff"); - } - function echo(string memory s1, string memory s2) public pure - returns (string memory, string memory) - { - return (s1, s2); - } - - function prove_this(uint x) public { - emit log_named_uint("sym x", x); - assertGt(x + 1, 0); - } - - function test_logn() public { - assembly { - log0(0x01, 0x02) - log1(0x01, 0x02, 0x03) - log2(0x01, 0x02, 0x03, 0x04) - log3(0x01, 0x02, 0x03, 0x04, 0x05) - } - } - - event MyEvent(uint, uint indexed, uint, uint indexed); - function test_events() public { - emit MyEvent(1, 2, 3, 4); - } - - function test_asserts() public { - string memory err = "this test has failed!"; - emit log("## assertTrue(bool)\n"); - assertTrue(false); - emit log("\n"); - assertTrue(false, err); - - emit log("\n## assertEq(address,address)\n"); - assertEq(address(this), msg.sender); - emit log("\n"); - assertEq(address(this), msg.sender, err); - - emit log("\n## assertEq32(bytes32,bytes32)\n"); - assertEq32("bytes 1", "bytes 2"); - emit log("\n"); - assertEq32("bytes 1", "bytes 2", err); - - emit log("\n## assertEq(bytes32,bytes32)\n"); - assertEq32("bytes 1", "bytes 2"); - emit log("\n"); - assertEq32("bytes 1", "bytes 2", err); - - emit log("\n## assertEq(uint,uint)\n"); - assertEq(uint(0), 1); - emit log("\n"); - assertEq(uint(0), 1, err); - - emit log("\n## assertEq(int,int)\n"); - assertEq(-1, -2); - emit log("\n"); - assertEq(-1, -2, err); - - emit log("\n## assertEqDecimal(int,int,uint)\n"); - assertEqDecimal(-1.0e18, -1.1e18, 18); - emit log("\n"); - assertEqDecimal(-1.0e18, -1.1e18, 18, err); - - emit log("\n## assertEqDecimal(uint,uint,uint)\n"); - assertEqDecimal(uint(1.0e18), 1.1e18, 18); - emit log("\n"); - assertEqDecimal(uint(1.0e18), 1.1e18, 18, err); - - emit log("\n## assertGt(uint,uint)\n"); - assertGt(uint(0), 0); - emit log("\n"); - assertGt(uint(0), 0, err); - - emit log("\n## assertGt(int,int)\n"); - assertGt(-1, -1); - emit log("\n"); - assertGt(-1, -1, err); - - emit log("\n## assertGtDecimal(int,int,uint)\n"); - assertGtDecimal(-2.0e18, -1.1e18, 18); - emit log("\n"); - assertGtDecimal(-2.0e18, -1.1e18, 18, err); - - emit log("\n## assertGtDecimal(uint,uint,uint)\n"); - assertGtDecimal(uint(1.0e18), 1.1e18, 18); - emit log("\n"); - assertGtDecimal(uint(1.0e18), 1.1e18, 18, err); - - emit log("\n## assertGe(uint,uint)\n"); - assertGe(uint(0), 1); - emit log("\n"); - assertGe(uint(0), 1, err); - - emit log("\n## assertGe(int,int)\n"); - assertGe(-1, 0); - emit log("\n"); - assertGe(-1, 0, err); - - emit log("\n## assertGeDecimal(int,int,uint)\n"); - assertGeDecimal(-2.0e18, -1.1e18, 18); - emit log("\n"); - assertGeDecimal(-2.0e18, -1.1e18, 18, err); - - emit log("\n## assertGeDecimal(uint,uint,uint)\n"); - assertGeDecimal(uint(1.0e18), 1.1e18, 18); - emit log("\n"); - assertGeDecimal(uint(1.0e18), 1.1e18, 18, err); - - emit log("\n## assertLt(uint,uint)\n"); - assertLt(uint(0), 0); - emit log("\n"); - assertLt(uint(0), 0, err); - - emit log("\n## assertLt(int,int)\n"); - assertLt(-1, -1); - emit log("\n"); - assertLt(-1, -1, err); - - emit log("\n## assertLtDecimal(int,int,uint)\n"); - assertLtDecimal(-1.0e18, -1.1e18, 18); - emit log("\n"); - assertLtDecimal(-1.0e18, -1.1e18, 18, err); - - emit log("\n## assertLtDecimal(uint,uint,uint)\n"); - assertLtDecimal(uint(2.0e18), 1.1e18, 18); - emit log("\n"); - assertLtDecimal(uint(2.0e18), 1.1e18, 18, err); - - emit log("\n## assertLe(uint,uint)\n"); - assertLe(uint(1), 0); - emit log("\n"); - assertLe(uint(1), 0, err); - - emit log("\n## assertLe(int,int)\n"); - assertLe(0, -1); - emit log("\n"); - assertLe(0, -1, err); - - emit log("\n## assertLeDecimal(int,int,uint)\n"); - assertLeDecimal(-1.0e18, -1.1e18, 18); - emit log("\n"); - assertLeDecimal(-1.0e18, -1.1e18, 18, err); - - emit log("\n## assertLeDecimal(uint,uint,uint)\n"); - assertLeDecimal(uint(2.0e18), 1.1e18, 18); - emit log("\n"); - assertLeDecimal(uint(2.0e18), 1.1e18, 18, err); - - emit log("\n## assertEq(string,string)\n"); - string memory s1 = "string 1"; - string memory s2 = "string 2"; - assertEq(s1, s2); - emit log("\n"); - assertEq(s1, s2, err); - - emit log("\n## assertEq0(bytes,bytes)\n"); - assertEq0(hex"abcdef01", hex"abcdef02"); - emit log("\n"); - assertEq0(hex"abcdef01", hex"abcdef02", err); - } -} - -contract DemoTestWithSetUp { - function setUp() public { - } - function test_pass() public pure { - } -} diff --git a/lib/forge-std/lib/ds-test/package.json b/lib/forge-std/lib/ds-test/package.json deleted file mode 100644 index 4802adaa..00000000 --- a/lib/forge-std/lib/ds-test/package.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "name": "ds-test", - "version": "1.0.0", - "description": "Assertions, equality checks and other test helpers ", - "bugs": "https://github.com/dapphub/ds-test/issues", - "license": "GPL-3.0", - "author": "Contributors to ds-test", - "files": [ - "src/*" - ], - "repository": { - "type": "git", - "url": "https://github.com/dapphub/ds-test.git" - } -} diff --git a/lib/forge-std/lib/ds-test/src/test.sol b/lib/forge-std/lib/ds-test/src/test.sol deleted file mode 100644 index 515a3bd0..00000000 --- a/lib/forge-std/lib/ds-test/src/test.sol +++ /dev/null @@ -1,469 +0,0 @@ -// SPDX-License-Identifier: GPL-3.0-or-later - -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. - -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. - -// You should have received a copy of the GNU General Public License -// along with this program. If not, see . - -pragma solidity >=0.5.0; - -contract DSTest { - event log (string); - event logs (bytes); - - event log_address (address); - event log_bytes32 (bytes32); - event log_int (int); - event log_uint (uint); - event log_bytes (bytes); - event log_string (string); - - event log_named_address (string key, address val); - event log_named_bytes32 (string key, bytes32 val); - event log_named_decimal_int (string key, int val, uint decimals); - event log_named_decimal_uint (string key, uint val, uint decimals); - event log_named_int (string key, int val); - event log_named_uint (string key, uint val); - event log_named_bytes (string key, bytes val); - event log_named_string (string key, string val); - - bool public IS_TEST = true; - bool private _failed; - - address constant HEVM_ADDRESS = - address(bytes20(uint160(uint256(keccak256('hevm cheat code'))))); - - modifier mayRevert() { _; } - modifier testopts(string memory) { _; } - - function failed() public returns (bool) { - if (_failed) { - return _failed; - } else { - bool globalFailed = false; - if (hasHEVMContext()) { - (, bytes memory retdata) = HEVM_ADDRESS.call( - abi.encodePacked( - bytes4(keccak256("load(address,bytes32)")), - abi.encode(HEVM_ADDRESS, bytes32("failed")) - ) - ); - globalFailed = abi.decode(retdata, (bool)); - } - return globalFailed; - } - } - - function fail() internal { - if (hasHEVMContext()) { - (bool status, ) = HEVM_ADDRESS.call( - abi.encodePacked( - bytes4(keccak256("store(address,bytes32,bytes32)")), - abi.encode(HEVM_ADDRESS, bytes32("failed"), bytes32(uint256(0x01))) - ) - ); - status; // Silence compiler warnings - } - _failed = true; - } - - function hasHEVMContext() internal view returns (bool) { - uint256 hevmCodeSize = 0; - assembly { - hevmCodeSize := extcodesize(0x7109709ECfa91a80626fF3989D68f67F5b1DD12D) - } - return hevmCodeSize > 0; - } - - modifier logs_gas() { - uint startGas = gasleft(); - _; - uint endGas = gasleft(); - emit log_named_uint("gas", startGas - endGas); - } - - function assertTrue(bool condition) internal { - if (!condition) { - emit log("Error: Assertion Failed"); - fail(); - } - } - - function assertTrue(bool condition, string memory err) internal { - if (!condition) { - emit log_named_string("Error", err); - assertTrue(condition); - } - } - - function assertEq(address a, address b) internal { - if (a != b) { - emit log("Error: a == b not satisfied [address]"); - emit log_named_address(" Expected", b); - emit log_named_address(" Actual", a); - fail(); - } - } - function assertEq(address a, address b, string memory err) internal { - if (a != b) { - emit log_named_string ("Error", err); - assertEq(a, b); - } - } - - function assertEq(bytes32 a, bytes32 b) internal { - if (a != b) { - emit log("Error: a == b not satisfied [bytes32]"); - emit log_named_bytes32(" Expected", b); - emit log_named_bytes32(" Actual", a); - fail(); - } - } - function assertEq(bytes32 a, bytes32 b, string memory err) internal { - if (a != b) { - emit log_named_string ("Error", err); - assertEq(a, b); - } - } - function assertEq32(bytes32 a, bytes32 b) internal { - assertEq(a, b); - } - function assertEq32(bytes32 a, bytes32 b, string memory err) internal { - assertEq(a, b, err); - } - - function assertEq(int a, int b) internal { - if (a != b) { - emit log("Error: a == b not satisfied [int]"); - emit log_named_int(" Expected", b); - emit log_named_int(" Actual", a); - fail(); - } - } - function assertEq(int a, int b, string memory err) internal { - if (a != b) { - emit log_named_string("Error", err); - assertEq(a, b); - } - } - function assertEq(uint a, uint b) internal { - if (a != b) { - emit log("Error: a == b not satisfied [uint]"); - emit log_named_uint(" Expected", b); - emit log_named_uint(" Actual", a); - fail(); - } - } - function assertEq(uint a, uint b, string memory err) internal { - if (a != b) { - emit log_named_string("Error", err); - assertEq(a, b); - } - } - function assertEqDecimal(int a, int b, uint decimals) internal { - if (a != b) { - emit log("Error: a == b not satisfied [decimal int]"); - emit log_named_decimal_int(" Expected", b, decimals); - emit log_named_decimal_int(" Actual", a, decimals); - fail(); - } - } - function assertEqDecimal(int a, int b, uint decimals, string memory err) internal { - if (a != b) { - emit log_named_string("Error", err); - assertEqDecimal(a, b, decimals); - } - } - function assertEqDecimal(uint a, uint b, uint decimals) internal { - if (a != b) { - emit log("Error: a == b not satisfied [decimal uint]"); - emit log_named_decimal_uint(" Expected", b, decimals); - emit log_named_decimal_uint(" Actual", a, decimals); - fail(); - } - } - function assertEqDecimal(uint a, uint b, uint decimals, string memory err) internal { - if (a != b) { - emit log_named_string("Error", err); - assertEqDecimal(a, b, decimals); - } - } - - function assertGt(uint a, uint b) internal { - if (a <= b) { - emit log("Error: a > b not satisfied [uint]"); - emit log_named_uint(" Value a", a); - emit log_named_uint(" Value b", b); - fail(); - } - } - function assertGt(uint a, uint b, string memory err) internal { - if (a <= b) { - emit log_named_string("Error", err); - assertGt(a, b); - } - } - function assertGt(int a, int b) internal { - if (a <= b) { - emit log("Error: a > b not satisfied [int]"); - emit log_named_int(" Value a", a); - emit log_named_int(" Value b", b); - fail(); - } - } - function assertGt(int a, int b, string memory err) internal { - if (a <= b) { - emit log_named_string("Error", err); - assertGt(a, b); - } - } - function assertGtDecimal(int a, int b, uint decimals) internal { - if (a <= b) { - emit log("Error: a > b not satisfied [decimal int]"); - emit log_named_decimal_int(" Value a", a, decimals); - emit log_named_decimal_int(" Value b", b, decimals); - fail(); - } - } - function assertGtDecimal(int a, int b, uint decimals, string memory err) internal { - if (a <= b) { - emit log_named_string("Error", err); - assertGtDecimal(a, b, decimals); - } - } - function assertGtDecimal(uint a, uint b, uint decimals) internal { - if (a <= b) { - emit log("Error: a > b not satisfied [decimal uint]"); - emit log_named_decimal_uint(" Value a", a, decimals); - emit log_named_decimal_uint(" Value b", b, decimals); - fail(); - } - } - function assertGtDecimal(uint a, uint b, uint decimals, string memory err) internal { - if (a <= b) { - emit log_named_string("Error", err); - assertGtDecimal(a, b, decimals); - } - } - - function assertGe(uint a, uint b) internal { - if (a < b) { - emit log("Error: a >= b not satisfied [uint]"); - emit log_named_uint(" Value a", a); - emit log_named_uint(" Value b", b); - fail(); - } - } - function assertGe(uint a, uint b, string memory err) internal { - if (a < b) { - emit log_named_string("Error", err); - assertGe(a, b); - } - } - function assertGe(int a, int b) internal { - if (a < b) { - emit log("Error: a >= b not satisfied [int]"); - emit log_named_int(" Value a", a); - emit log_named_int(" Value b", b); - fail(); - } - } - function assertGe(int a, int b, string memory err) internal { - if (a < b) { - emit log_named_string("Error", err); - assertGe(a, b); - } - } - function assertGeDecimal(int a, int b, uint decimals) internal { - if (a < b) { - emit log("Error: a >= b not satisfied [decimal int]"); - emit log_named_decimal_int(" Value a", a, decimals); - emit log_named_decimal_int(" Value b", b, decimals); - fail(); - } - } - function assertGeDecimal(int a, int b, uint decimals, string memory err) internal { - if (a < b) { - emit log_named_string("Error", err); - assertGeDecimal(a, b, decimals); - } - } - function assertGeDecimal(uint a, uint b, uint decimals) internal { - if (a < b) { - emit log("Error: a >= b not satisfied [decimal uint]"); - emit log_named_decimal_uint(" Value a", a, decimals); - emit log_named_decimal_uint(" Value b", b, decimals); - fail(); - } - } - function assertGeDecimal(uint a, uint b, uint decimals, string memory err) internal { - if (a < b) { - emit log_named_string("Error", err); - assertGeDecimal(a, b, decimals); - } - } - - function assertLt(uint a, uint b) internal { - if (a >= b) { - emit log("Error: a < b not satisfied [uint]"); - emit log_named_uint(" Value a", a); - emit log_named_uint(" Value b", b); - fail(); - } - } - function assertLt(uint a, uint b, string memory err) internal { - if (a >= b) { - emit log_named_string("Error", err); - assertLt(a, b); - } - } - function assertLt(int a, int b) internal { - if (a >= b) { - emit log("Error: a < b not satisfied [int]"); - emit log_named_int(" Value a", a); - emit log_named_int(" Value b", b); - fail(); - } - } - function assertLt(int a, int b, string memory err) internal { - if (a >= b) { - emit log_named_string("Error", err); - assertLt(a, b); - } - } - function assertLtDecimal(int a, int b, uint decimals) internal { - if (a >= b) { - emit log("Error: a < b not satisfied [decimal int]"); - emit log_named_decimal_int(" Value a", a, decimals); - emit log_named_decimal_int(" Value b", b, decimals); - fail(); - } - } - function assertLtDecimal(int a, int b, uint decimals, string memory err) internal { - if (a >= b) { - emit log_named_string("Error", err); - assertLtDecimal(a, b, decimals); - } - } - function assertLtDecimal(uint a, uint b, uint decimals) internal { - if (a >= b) { - emit log("Error: a < b not satisfied [decimal uint]"); - emit log_named_decimal_uint(" Value a", a, decimals); - emit log_named_decimal_uint(" Value b", b, decimals); - fail(); - } - } - function assertLtDecimal(uint a, uint b, uint decimals, string memory err) internal { - if (a >= b) { - emit log_named_string("Error", err); - assertLtDecimal(a, b, decimals); - } - } - - function assertLe(uint a, uint b) internal { - if (a > b) { - emit log("Error: a <= b not satisfied [uint]"); - emit log_named_uint(" Value a", a); - emit log_named_uint(" Value b", b); - fail(); - } - } - function assertLe(uint a, uint b, string memory err) internal { - if (a > b) { - emit log_named_string("Error", err); - assertLe(a, b); - } - } - function assertLe(int a, int b) internal { - if (a > b) { - emit log("Error: a <= b not satisfied [int]"); - emit log_named_int(" Value a", a); - emit log_named_int(" Value b", b); - fail(); - } - } - function assertLe(int a, int b, string memory err) internal { - if (a > b) { - emit log_named_string("Error", err); - assertLe(a, b); - } - } - function assertLeDecimal(int a, int b, uint decimals) internal { - if (a > b) { - emit log("Error: a <= b not satisfied [decimal int]"); - emit log_named_decimal_int(" Value a", a, decimals); - emit log_named_decimal_int(" Value b", b, decimals); - fail(); - } - } - function assertLeDecimal(int a, int b, uint decimals, string memory err) internal { - if (a > b) { - emit log_named_string("Error", err); - assertLeDecimal(a, b, decimals); - } - } - function assertLeDecimal(uint a, uint b, uint decimals) internal { - if (a > b) { - emit log("Error: a <= b not satisfied [decimal uint]"); - emit log_named_decimal_uint(" Value a", a, decimals); - emit log_named_decimal_uint(" Value b", b, decimals); - fail(); - } - } - function assertLeDecimal(uint a, uint b, uint decimals, string memory err) internal { - if (a > b) { - emit log_named_string("Error", err); - assertGeDecimal(a, b, decimals); - } - } - - function assertEq(string memory a, string memory b) internal { - if (keccak256(abi.encodePacked(a)) != keccak256(abi.encodePacked(b))) { - emit log("Error: a == b not satisfied [string]"); - emit log_named_string(" Expected", b); - emit log_named_string(" Actual", a); - fail(); - } - } - function assertEq(string memory a, string memory b, string memory err) internal { - if (keccak256(abi.encodePacked(a)) != keccak256(abi.encodePacked(b))) { - emit log_named_string("Error", err); - assertEq(a, b); - } - } - - function checkEq0(bytes memory a, bytes memory b) internal pure returns (bool ok) { - ok = true; - if (a.length == b.length) { - for (uint i = 0; i < a.length; i++) { - if (a[i] != b[i]) { - ok = false; - } - } - } else { - ok = false; - } - } - function assertEq0(bytes memory a, bytes memory b) internal { - if (!checkEq0(a, b)) { - emit log("Error: a == b not satisfied [bytes]"); - emit log_named_bytes(" Expected", b); - emit log_named_bytes(" Actual", a); - fail(); - } - } - function assertEq0(bytes memory a, bytes memory b, string memory err) internal { - if (!checkEq0(a, b)) { - emit log_named_string("Error", err); - assertEq0(a, b); - } - } -} diff --git a/lib/forge-std/package.json b/lib/forge-std/package.json deleted file mode 100644 index d86362b6..00000000 --- a/lib/forge-std/package.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "name": "forge-std", - "version": "1.1.1", - "description": "Forge Standard Library is a collection of helpful contracts and libraries for use with Forge and Foundry.", - "homepage": "https://book.getfoundry.sh/forge/forge-std", - "bugs": "https://github.com/foundry-rs/forge-std/issues", - "license": "(Apache-2.0 OR MIT)", - "author": "Contributors to Forge Standard Library", - "files": [ - "src/*" - ], - "repository": { - "type": "git", - "url": "https://github.com/foundry-rs/forge-std.git" - } -} diff --git a/lib/forge-std/src/Common.sol b/lib/forge-std/src/Common.sol deleted file mode 100644 index 2f92d7c3..00000000 --- a/lib/forge-std/src/Common.sol +++ /dev/null @@ -1,28 +0,0 @@ -// SPDX-License-Identifier: MIT -pragma solidity >=0.6.2 <0.9.0; - -import {StdStorage, Vm} from "./Components.sol"; - -abstract contract CommonBase { - // Cheat code address, 0x7109709ECfa91a80626fF3989D68f67F5b1DD12D. - address internal constant VM_ADDRESS = address(uint160(uint256(keccak256("hevm cheat code")))); - - // console.sol and console2.sol work by executing a staticcall to this address. - address internal constant CONSOLE = 0x000000000000000000636F6e736F6c652e6c6f67; - - // Default address for tx.origin and msg.sender, 0x1804c8AB1F12E6bbf3894d4083f33e07309d1f38. - address internal constant DEFAULT_SENDER = address(uint160(uint256(keccak256("foundry default caller")))); - - // Address of the test contract, deployed by the DEFAULT_SENDER. - address internal constant DEFAULT_TEST_CONTRACT = 0x5615dEB798BB3E4dFa0139dFa1b3D433Cc23b72f; - - // Create2 factory used by scripts when deploying with create2, https://github.com/Arachnid/deterministic-deployment-proxy. - address internal constant CREATE2_FACTORY = 0x4e59b44847b379578588920cA78FbF26c0B4956C; - - uint256 internal constant UINT256_MAX = - 115792089237316195423570985008687907853269984665640564039457584007913129639935; - - Vm internal constant vm = Vm(VM_ADDRESS); - - StdStorage internal stdstore; -} diff --git a/lib/forge-std/src/Components.sol b/lib/forge-std/src/Components.sol deleted file mode 100644 index 32e24336..00000000 --- a/lib/forge-std/src/Components.sol +++ /dev/null @@ -1,14 +0,0 @@ -// SPDX-License-Identifier: MIT -pragma solidity >=0.6.2 <0.9.0; - -import "./console.sol"; -import "./console2.sol"; -import "./StdAssertions.sol"; -import "./StdChains.sol"; -import "./StdCheats.sol"; -import "./StdError.sol"; -import "./StdJson.sol"; -import "./StdMath.sol"; -import "./StdStorage.sol"; -import "./StdUtils.sol"; -import "./Vm.sol"; diff --git a/lib/forge-std/src/Script.sol b/lib/forge-std/src/Script.sol deleted file mode 100644 index 6f04f990..00000000 --- a/lib/forge-std/src/Script.sol +++ /dev/null @@ -1,14 +0,0 @@ -// SPDX-License-Identifier: MIT -pragma solidity >=0.6.2 <0.9.0; - -import {CommonBase} from "./Common.sol"; -// forgefmt: disable-next-line -import {console, console2, StdChains, StdCheatsSafe, stdJson, stdMath, StdStorage, stdStorageSafe, StdUtils, VmSafe} from "./Components.sol"; - -abstract contract ScriptBase is CommonBase { - VmSafe internal constant vmSafe = VmSafe(VM_ADDRESS); -} - -abstract contract Script is StdChains, StdCheatsSafe, StdUtils, ScriptBase { - bool public IS_SCRIPT = true; -} diff --git a/lib/forge-std/src/StdAssertions.sol b/lib/forge-std/src/StdAssertions.sol deleted file mode 100644 index 439366e2..00000000 --- a/lib/forge-std/src/StdAssertions.sol +++ /dev/null @@ -1,209 +0,0 @@ -// SPDX-License-Identifier: MIT -pragma solidity >=0.6.2 <0.9.0; - -import "ds-test/test.sol"; -import "./StdMath.sol"; - -abstract contract StdAssertions is DSTest { - event log_array(uint256[] val); - event log_array(int256[] val); - event log_array(address[] val); - event log_named_array(string key, uint256[] val); - event log_named_array(string key, int256[] val); - event log_named_array(string key, address[] val); - - function fail(string memory err) internal virtual { - emit log_named_string("Error", err); - fail(); - } - - function assertFalse(bool data) internal virtual { - assertTrue(!data); - } - - function assertFalse(bool data, string memory err) internal virtual { - assertTrue(!data, err); - } - - function assertEq(bool a, bool b) internal virtual { - if (a != b) { - emit log("Error: a == b not satisfied [bool]"); - emit log_named_string(" Expected", b ? "true" : "false"); - emit log_named_string(" Actual", a ? "true" : "false"); - fail(); - } - } - - function assertEq(bool a, bool b, string memory err) internal virtual { - if (a != b) { - emit log_named_string("Error", err); - assertEq(a, b); - } - } - - function assertEq(bytes memory a, bytes memory b) internal virtual { - assertEq0(a, b); - } - - function assertEq(bytes memory a, bytes memory b, string memory err) internal virtual { - assertEq0(a, b, err); - } - - function assertEq(uint256[] memory a, uint256[] memory b) internal virtual { - if (keccak256(abi.encode(a)) != keccak256(abi.encode(b))) { - emit log("Error: a == b not satisfied [uint[]]"); - emit log_named_array(" Expected", b); - emit log_named_array(" Actual", a); - fail(); - } - } - - function assertEq(int256[] memory a, int256[] memory b) internal virtual { - if (keccak256(abi.encode(a)) != keccak256(abi.encode(b))) { - emit log("Error: a == b not satisfied [int[]]"); - emit log_named_array(" Expected", b); - emit log_named_array(" Actual", a); - fail(); - } - } - - function assertEq(address[] memory a, address[] memory b) internal virtual { - if (keccak256(abi.encode(a)) != keccak256(abi.encode(b))) { - emit log("Error: a == b not satisfied [address[]]"); - emit log_named_array(" Expected", b); - emit log_named_array(" Actual", a); - fail(); - } - } - - function assertEq(uint256[] memory a, uint256[] memory b, string memory err) internal virtual { - if (keccak256(abi.encode(a)) != keccak256(abi.encode(b))) { - emit log_named_string("Error", err); - assertEq(a, b); - } - } - - function assertEq(int256[] memory a, int256[] memory b, string memory err) internal virtual { - if (keccak256(abi.encode(a)) != keccak256(abi.encode(b))) { - emit log_named_string("Error", err); - assertEq(a, b); - } - } - - function assertEq(address[] memory a, address[] memory b, string memory err) internal virtual { - if (keccak256(abi.encode(a)) != keccak256(abi.encode(b))) { - emit log_named_string("Error", err); - assertEq(a, b); - } - } - - // Legacy helper - function assertEqUint(uint256 a, uint256 b) internal virtual { - assertEq(uint256(a), uint256(b)); - } - - function assertApproxEqAbs(uint256 a, uint256 b, uint256 maxDelta) internal virtual { - uint256 delta = stdMath.delta(a, b); - - if (delta > maxDelta) { - emit log("Error: a ~= b not satisfied [uint]"); - emit log_named_uint(" Expected", b); - emit log_named_uint(" Actual", a); - emit log_named_uint(" Max Delta", maxDelta); - emit log_named_uint(" Delta", delta); - fail(); - } - } - - function assertApproxEqAbs(uint256 a, uint256 b, uint256 maxDelta, string memory err) internal virtual { - uint256 delta = stdMath.delta(a, b); - - if (delta > maxDelta) { - emit log_named_string("Error", err); - assertApproxEqAbs(a, b, maxDelta); - } - } - - function assertApproxEqAbs(int256 a, int256 b, uint256 maxDelta) internal virtual { - uint256 delta = stdMath.delta(a, b); - - if (delta > maxDelta) { - emit log("Error: a ~= b not satisfied [int]"); - emit log_named_int(" Expected", b); - emit log_named_int(" Actual", a); - emit log_named_uint(" Max Delta", maxDelta); - emit log_named_uint(" Delta", delta); - fail(); - } - } - - function assertApproxEqAbs(int256 a, int256 b, uint256 maxDelta, string memory err) internal virtual { - uint256 delta = stdMath.delta(a, b); - - if (delta > maxDelta) { - emit log_named_string("Error", err); - assertApproxEqAbs(a, b, maxDelta); - } - } - - function assertApproxEqRel( - uint256 a, - uint256 b, - uint256 maxPercentDelta // An 18 decimal fixed point number, where 1e18 == 100% - ) internal virtual { - if (b == 0) return assertEq(a, b); // If the expected is 0, actual must be too. - - uint256 percentDelta = stdMath.percentDelta(a, b); - - if (percentDelta > maxPercentDelta) { - emit log("Error: a ~= b not satisfied [uint]"); - emit log_named_uint(" Expected", b); - emit log_named_uint(" Actual", a); - emit log_named_decimal_uint(" Max % Delta", maxPercentDelta, 18); - emit log_named_decimal_uint(" % Delta", percentDelta, 18); - fail(); - } - } - - function assertApproxEqRel( - uint256 a, - uint256 b, - uint256 maxPercentDelta, // An 18 decimal fixed point number, where 1e18 == 100% - string memory err - ) internal virtual { - if (b == 0) return assertEq(a, b, err); // If the expected is 0, actual must be too. - - uint256 percentDelta = stdMath.percentDelta(a, b); - - if (percentDelta > maxPercentDelta) { - emit log_named_string("Error", err); - assertApproxEqRel(a, b, maxPercentDelta); - } - } - - function assertApproxEqRel(int256 a, int256 b, uint256 maxPercentDelta) internal virtual { - if (b == 0) return assertEq(a, b); // If the expected is 0, actual must be too. - - uint256 percentDelta = stdMath.percentDelta(a, b); - - if (percentDelta > maxPercentDelta) { - emit log("Error: a ~= b not satisfied [int]"); - emit log_named_int(" Expected", b); - emit log_named_int(" Actual", a); - emit log_named_decimal_uint(" Max % Delta", maxPercentDelta, 18); - emit log_named_decimal_uint(" % Delta", percentDelta, 18); - fail(); - } - } - - function assertApproxEqRel(int256 a, int256 b, uint256 maxPercentDelta, string memory err) internal virtual { - if (b == 0) return assertEq(a, b, err); // If the expected is 0, actual must be too. - - uint256 percentDelta = stdMath.percentDelta(a, b); - - if (percentDelta > maxPercentDelta) { - emit log_named_string("Error", err); - assertApproxEqRel(a, b, maxPercentDelta); - } - } -} diff --git a/lib/forge-std/src/StdChains.sol b/lib/forge-std/src/StdChains.sol deleted file mode 100644 index eead4acd..00000000 --- a/lib/forge-std/src/StdChains.sol +++ /dev/null @@ -1,90 +0,0 @@ -// SPDX-License-Identifier: MIT -pragma solidity >=0.6.2 <0.9.0; - -pragma experimental ABIEncoderV2; - -import "./Vm.sol"; - -abstract contract StdChains { - VmSafe private constant vm = VmSafe(address(uint160(uint256(keccak256("hevm cheat code"))))); - - struct Chain { - // The chain name. - string name; - // The chain's Chain ID. - uint256 chainId; - // A default RPC endpoint for this chain. - // NOTE: This default RPC URL is included for convenience to facilitate quick tests and - // experimentation. Do not use this RPC URL for production test suites, CI, or other heavy - // usage as you will be throttled and this is a disservice to others who need this endpoint. - string rpcUrl; - } - - bool private initialized; - - // Maps from a chain's key (matching the alias in the `foundry.toml` file) to chain data. - mapping(string => Chain) private chains; - // Maps from a chain ID to that chain's key name - mapping(uint256 => string) private idToKey; - - function getChain(string memory key) internal virtual returns (Chain memory) { - initialize(); - return chains[key]; - } - - function getChain(uint256 chainId) internal virtual returns (Chain memory) { - initialize(); - return chains[idToKey[chainId]]; - } - - function setChain(string memory key, string memory name, uint256 chainId, string memory rpcUrl) internal virtual { - require( - keccak256(bytes(idToKey[chainId])) == keccak256(bytes("")) - || keccak256(bytes(idToKey[chainId])) == keccak256(bytes(key)), - string( - abi.encodePacked( - "StdChains setChain(string,string,uint256,string): Chain ID ", - vm.toString(chainId), - " already used by \"", - idToKey[chainId], - "\"." - ) - ) - ); - - uint256 oldChainId = chains[key].chainId; - delete idToKey[oldChainId]; - - chains[key] = Chain(name, chainId, rpcUrl); - idToKey[chainId] = key; - } - - function initialize() private { - if (initialized) return; - - setChain("anvil", "Anvil", 31337, "http://127.0.0.1:8545"); - setChain("mainnet", "Mainnet", 1, "https://mainnet.infura.io/v3/6770454bc6ea42c58aac12978531b93f"); - setChain("goerli", "Goerli", 5, "https://goerli.infura.io/v3/6770454bc6ea42c58aac12978531b93f"); - setChain("sepolia", "Sepolia", 11155111, "https://rpc.sepolia.dev"); - setChain("optimism", "Optimism", 10, "https://mainnet.optimism.io"); - setChain("optimism_goerli", "Optimism Goerli", 420, "https://goerli.optimism.io"); - setChain("arbitrum_one", "Arbitrum One", 42161, "https://arb1.arbitrum.io/rpc"); - setChain("arbitrum_one_goerli", "Arbitrum One Goerli", 421613, "https://goerli-rollup.arbitrum.io/rpc"); - setChain("arbitrum_nova", "Arbitrum Nova", 42170, "https://nova.arbitrum.io/rpc"); - setChain("polygon", "Polygon", 137, "https://polygon-rpc.com"); - setChain("polygon_mumbai", "Polygon Mumbai", 80001, "https://rpc-mumbai.matic.today"); - setChain("avalanche", "Avalanche", 43114, "https://api.avax.network/ext/bc/C/rpc"); - setChain("avalanche_fuji", "Avalanche Fuji", 43113, "https://api.avax-test.network/ext/bc/C/rpc"); - setChain("bnb_smart_chain", "BNB Smart Chain", 56, "https://bsc-dataseed1.binance.org"); - setChain("bnb_smart_chain_testnet", "BNB Smart Chain Testnet", 97, "https://data-seed-prebsc-1-s1.binance.org:8545");// forgefmt: disable-line - setChain("gnosis_chain", "Gnosis Chain", 100, "https://rpc.gnosischain.com"); - - // Loop over RPC URLs in the config file to replace the default RPC URLs - Vm.Rpc[] memory rpcs = vm.rpcUrlStructs(); - for (uint256 i = 0; i < rpcs.length; i++) { - chains[rpcs[i].key].rpcUrl = rpcs[i].url; - } - - initialized = true; - } -} diff --git a/lib/forge-std/src/StdCheats.sol b/lib/forge-std/src/StdCheats.sol deleted file mode 100644 index e3c20b7a..00000000 --- a/lib/forge-std/src/StdCheats.sol +++ /dev/null @@ -1,565 +0,0 @@ -// SPDX-License-Identifier: MIT -pragma solidity >=0.6.2 <0.9.0; - -pragma experimental ABIEncoderV2; - -import "./StdStorage.sol"; -import "./Vm.sol"; - -abstract contract StdCheatsSafe { - VmSafe private constant vm = VmSafe(address(uint160(uint256(keccak256("hevm cheat code"))))); - - // Data structures to parse Transaction objects from the broadcast artifact - // that conform to EIP1559. The Raw structs is what is parsed from the JSON - // and then converted to the one that is used by the user for better UX. - - struct RawTx1559 { - string[] arguments; - address contractAddress; - string contractName; - // json value name = function - string functionSig; - bytes32 hash; - // json value name = tx - RawTx1559Detail txDetail; - // json value name = type - string opcode; - } - - struct RawTx1559Detail { - AccessList[] accessList; - bytes data; - address from; - bytes gas; - bytes nonce; - address to; - bytes txType; - bytes value; - } - - struct Tx1559 { - string[] arguments; - address contractAddress; - string contractName; - string functionSig; - bytes32 hash; - Tx1559Detail txDetail; - string opcode; - } - - struct Tx1559Detail { - AccessList[] accessList; - bytes data; - address from; - uint256 gas; - uint256 nonce; - address to; - uint256 txType; - uint256 value; - } - - // Data structures to parse Transaction objects from the broadcast artifact - // that DO NOT conform to EIP1559. The Raw structs is what is parsed from the JSON - // and then converted to the one that is used by the user for better UX. - - struct TxLegacy { - string[] arguments; - address contractAddress; - string contractName; - string functionSig; - string hash; - string opcode; - TxDetailLegacy transaction; - } - - struct TxDetailLegacy { - AccessList[] accessList; - uint256 chainId; - bytes data; - address from; - uint256 gas; - uint256 gasPrice; - bytes32 hash; - uint256 nonce; - bytes1 opcode; - bytes32 r; - bytes32 s; - uint256 txType; - address to; - uint8 v; - uint256 value; - } - - struct AccessList { - address accessAddress; - bytes32[] storageKeys; - } - - // Data structures to parse Receipt objects from the broadcast artifact. - // The Raw structs is what is parsed from the JSON - // and then converted to the one that is used by the user for better UX. - - struct RawReceipt { - bytes32 blockHash; - bytes blockNumber; - address contractAddress; - bytes cumulativeGasUsed; - bytes effectiveGasPrice; - address from; - bytes gasUsed; - RawReceiptLog[] logs; - bytes logsBloom; - bytes status; - address to; - bytes32 transactionHash; - bytes transactionIndex; - } - - struct Receipt { - bytes32 blockHash; - uint256 blockNumber; - address contractAddress; - uint256 cumulativeGasUsed; - uint256 effectiveGasPrice; - address from; - uint256 gasUsed; - ReceiptLog[] logs; - bytes logsBloom; - uint256 status; - address to; - bytes32 transactionHash; - uint256 transactionIndex; - } - - // Data structures to parse the entire broadcast artifact, assuming the - // transactions conform to EIP1559. - - struct EIP1559ScriptArtifact { - string[] libraries; - string path; - string[] pending; - Receipt[] receipts; - uint256 timestamp; - Tx1559[] transactions; - TxReturn[] txReturns; - } - - struct RawEIP1559ScriptArtifact { - string[] libraries; - string path; - string[] pending; - RawReceipt[] receipts; - TxReturn[] txReturns; - uint256 timestamp; - RawTx1559[] transactions; - } - - struct RawReceiptLog { - // json value = address - address logAddress; - bytes32 blockHash; - bytes blockNumber; - bytes data; - bytes logIndex; - bool removed; - bytes32[] topics; - bytes32 transactionHash; - bytes transactionIndex; - bytes transactionLogIndex; - } - - struct ReceiptLog { - // json value = address - address logAddress; - bytes32 blockHash; - uint256 blockNumber; - bytes data; - uint256 logIndex; - bytes32[] topics; - uint256 transactionIndex; - uint256 transactionLogIndex; - bool removed; - } - - struct TxReturn { - string internalType; - string value; - } - - function assumeNoPrecompiles(address addr) internal virtual { - // Assembly required since `block.chainid` was introduced in 0.8.0. - uint256 chainId; - assembly { - chainId := chainid() - } - assumeNoPrecompiles(addr, chainId); - } - - function assumeNoPrecompiles(address addr, uint256 chainId) internal virtual { - // Note: For some chains like Optimism these are technically predeploys (i.e. bytecode placed at a specific - // address), but the same rationale for excluding them applies so we include those too. - - // These should be present on all EVM-compatible chains. - vm.assume(addr < address(0x1) || addr > address(0x9)); - - // forgefmt: disable-start - if (chainId == 10 || chainId == 420) { - // https://github.com/ethereum-optimism/optimism/blob/eaa371a0184b56b7ca6d9eb9cb0a2b78b2ccd864/op-bindings/predeploys/addresses.go#L6-L21 - vm.assume(addr < address(0x4200000000000000000000000000000000000000) || addr > address(0x4200000000000000000000000000000000000800)); - } else if (chainId == 42161 || chainId == 421613) { - // https://developer.arbitrum.io/useful-addresses#arbitrum-precompiles-l2-same-on-all-arb-chains - vm.assume(addr < address(0x0000000000000000000000000000000000000064) || addr > address(0x0000000000000000000000000000000000000068)); - } else if (chainId == 43114 || chainId == 43113) { - // https://github.com/ava-labs/subnet-evm/blob/47c03fd007ecaa6de2c52ea081596e0a88401f58/precompile/params.go#L18-L59 - vm.assume(addr < address(0x0100000000000000000000000000000000000000) || addr > address(0x01000000000000000000000000000000000000ff)); - vm.assume(addr < address(0x0200000000000000000000000000000000000000) || addr > address(0x02000000000000000000000000000000000000FF)); - vm.assume(addr < address(0x0300000000000000000000000000000000000000) || addr > address(0x03000000000000000000000000000000000000Ff)); - } - // forgefmt: disable-end - } - - function readEIP1559ScriptArtifact(string memory path) - internal - view - virtual - returns (EIP1559ScriptArtifact memory) - { - string memory data = vm.readFile(path); - bytes memory parsedData = vm.parseJson(data); - RawEIP1559ScriptArtifact memory rawArtifact = abi.decode(parsedData, (RawEIP1559ScriptArtifact)); - EIP1559ScriptArtifact memory artifact; - artifact.libraries = rawArtifact.libraries; - artifact.path = rawArtifact.path; - artifact.timestamp = rawArtifact.timestamp; - artifact.pending = rawArtifact.pending; - artifact.txReturns = rawArtifact.txReturns; - artifact.receipts = rawToConvertedReceipts(rawArtifact.receipts); - artifact.transactions = rawToConvertedEIPTx1559s(rawArtifact.transactions); - return artifact; - } - - function rawToConvertedEIPTx1559s(RawTx1559[] memory rawTxs) internal pure virtual returns (Tx1559[] memory) { - Tx1559[] memory txs = new Tx1559[](rawTxs.length); - for (uint256 i; i < rawTxs.length; i++) { - txs[i] = rawToConvertedEIPTx1559(rawTxs[i]); - } - return txs; - } - - function rawToConvertedEIPTx1559(RawTx1559 memory rawTx) internal pure virtual returns (Tx1559 memory) { - Tx1559 memory transaction; - transaction.arguments = rawTx.arguments; - transaction.contractName = rawTx.contractName; - transaction.functionSig = rawTx.functionSig; - transaction.hash = rawTx.hash; - transaction.txDetail = rawToConvertedEIP1559Detail(rawTx.txDetail); - transaction.opcode = rawTx.opcode; - return transaction; - } - - function rawToConvertedEIP1559Detail(RawTx1559Detail memory rawDetail) - internal - pure - virtual - returns (Tx1559Detail memory) - { - Tx1559Detail memory txDetail; - txDetail.data = rawDetail.data; - txDetail.from = rawDetail.from; - txDetail.to = rawDetail.to; - txDetail.nonce = _bytesToUint(rawDetail.nonce); - txDetail.txType = _bytesToUint(rawDetail.txType); - txDetail.value = _bytesToUint(rawDetail.value); - txDetail.gas = _bytesToUint(rawDetail.gas); - txDetail.accessList = rawDetail.accessList; - return txDetail; - } - - function readTx1559s(string memory path) internal view virtual returns (Tx1559[] memory) { - string memory deployData = vm.readFile(path); - bytes memory parsedDeployData = vm.parseJson(deployData, ".transactions"); - RawTx1559[] memory rawTxs = abi.decode(parsedDeployData, (RawTx1559[])); - return rawToConvertedEIPTx1559s(rawTxs); - } - - function readTx1559(string memory path, uint256 index) internal view virtual returns (Tx1559 memory) { - string memory deployData = vm.readFile(path); - string memory key = string(abi.encodePacked(".transactions[", vm.toString(index), "]")); - bytes memory parsedDeployData = vm.parseJson(deployData, key); - RawTx1559 memory rawTx = abi.decode(parsedDeployData, (RawTx1559)); - return rawToConvertedEIPTx1559(rawTx); - } - - // Analogous to readTransactions, but for receipts. - function readReceipts(string memory path) internal view virtual returns (Receipt[] memory) { - string memory deployData = vm.readFile(path); - bytes memory parsedDeployData = vm.parseJson(deployData, ".receipts"); - RawReceipt[] memory rawReceipts = abi.decode(parsedDeployData, (RawReceipt[])); - return rawToConvertedReceipts(rawReceipts); - } - - function readReceipt(string memory path, uint256 index) internal view virtual returns (Receipt memory) { - string memory deployData = vm.readFile(path); - string memory key = string(abi.encodePacked(".receipts[", vm.toString(index), "]")); - bytes memory parsedDeployData = vm.parseJson(deployData, key); - RawReceipt memory rawReceipt = abi.decode(parsedDeployData, (RawReceipt)); - return rawToConvertedReceipt(rawReceipt); - } - - function rawToConvertedReceipts(RawReceipt[] memory rawReceipts) internal pure virtual returns (Receipt[] memory) { - Receipt[] memory receipts = new Receipt[](rawReceipts.length); - for (uint256 i; i < rawReceipts.length; i++) { - receipts[i] = rawToConvertedReceipt(rawReceipts[i]); - } - return receipts; - } - - function rawToConvertedReceipt(RawReceipt memory rawReceipt) internal pure virtual returns (Receipt memory) { - Receipt memory receipt; - receipt.blockHash = rawReceipt.blockHash; - receipt.to = rawReceipt.to; - receipt.from = rawReceipt.from; - receipt.contractAddress = rawReceipt.contractAddress; - receipt.effectiveGasPrice = _bytesToUint(rawReceipt.effectiveGasPrice); - receipt.cumulativeGasUsed = _bytesToUint(rawReceipt.cumulativeGasUsed); - receipt.gasUsed = _bytesToUint(rawReceipt.gasUsed); - receipt.status = _bytesToUint(rawReceipt.status); - receipt.transactionIndex = _bytesToUint(rawReceipt.transactionIndex); - receipt.blockNumber = _bytesToUint(rawReceipt.blockNumber); - receipt.logs = rawToConvertedReceiptLogs(rawReceipt.logs); - receipt.logsBloom = rawReceipt.logsBloom; - receipt.transactionHash = rawReceipt.transactionHash; - return receipt; - } - - function rawToConvertedReceiptLogs(RawReceiptLog[] memory rawLogs) - internal - pure - virtual - returns (ReceiptLog[] memory) - { - ReceiptLog[] memory logs = new ReceiptLog[](rawLogs.length); - for (uint256 i; i < rawLogs.length; i++) { - logs[i].logAddress = rawLogs[i].logAddress; - logs[i].blockHash = rawLogs[i].blockHash; - logs[i].blockNumber = _bytesToUint(rawLogs[i].blockNumber); - logs[i].data = rawLogs[i].data; - logs[i].logIndex = _bytesToUint(rawLogs[i].logIndex); - logs[i].topics = rawLogs[i].topics; - logs[i].transactionIndex = _bytesToUint(rawLogs[i].transactionIndex); - logs[i].transactionLogIndex = _bytesToUint(rawLogs[i].transactionLogIndex); - logs[i].removed = rawLogs[i].removed; - } - return logs; - } - - // Deploy a contract by fetching the contract bytecode from - // the artifacts directory - // e.g. `deployCode(code, abi.encode(arg1,arg2,arg3))` - function deployCode(string memory what, bytes memory args) internal virtual returns (address addr) { - bytes memory bytecode = abi.encodePacked(vm.getCode(what), args); - /// @solidity memory-safe-assembly - assembly { - addr := create(0, add(bytecode, 0x20), mload(bytecode)) - } - - require(addr != address(0), "StdCheats deployCode(string,bytes): Deployment failed."); - } - - function deployCode(string memory what) internal virtual returns (address addr) { - bytes memory bytecode = vm.getCode(what); - /// @solidity memory-safe-assembly - assembly { - addr := create(0, add(bytecode, 0x20), mload(bytecode)) - } - - require(addr != address(0), "StdCheats deployCode(string): Deployment failed."); - } - - /// @dev deploy contract with value on construction - function deployCode(string memory what, bytes memory args, uint256 val) internal virtual returns (address addr) { - bytes memory bytecode = abi.encodePacked(vm.getCode(what), args); - /// @solidity memory-safe-assembly - assembly { - addr := create(val, add(bytecode, 0x20), mload(bytecode)) - } - - require(addr != address(0), "StdCheats deployCode(string,bytes,uint256): Deployment failed."); - } - - function deployCode(string memory what, uint256 val) internal virtual returns (address addr) { - bytes memory bytecode = vm.getCode(what); - /// @solidity memory-safe-assembly - assembly { - addr := create(val, add(bytecode, 0x20), mload(bytecode)) - } - - require(addr != address(0), "StdCheats deployCode(string,uint256): Deployment failed."); - } - - // creates a labeled address and the corresponding private key - function makeAddrAndKey(string memory name) internal virtual returns (address addr, uint256 privateKey) { - privateKey = uint256(keccak256(abi.encodePacked(name))); - addr = vm.addr(privateKey); - vm.label(addr, name); - } - - // creates a labeled address - function makeAddr(string memory name) internal virtual returns (address addr) { - (addr,) = makeAddrAndKey(name); - } - - function deriveRememberKey(string memory mnemonic, uint32 index) - internal - virtual - returns (address who, uint256 privateKey) - { - privateKey = vm.deriveKey(mnemonic, index); - who = vm.rememberKey(privateKey); - } - - function _bytesToUint(bytes memory b) private pure returns (uint256) { - require(b.length <= 32, "StdCheats _bytesToUint(bytes): Bytes length exceeds 32."); - return abi.decode(abi.encodePacked(new bytes(32 - b.length), b), (uint256)); - } -} - -// Wrappers around cheatcodes to avoid footguns -abstract contract StdCheats is StdCheatsSafe { - using stdStorage for StdStorage; - - StdStorage private stdstore; - Vm private constant vm = Vm(address(uint160(uint256(keccak256("hevm cheat code"))))); - - bool private gasMeteringOff; - - // Skip forward or rewind time by the specified number of seconds - function skip(uint256 time) internal virtual { - vm.warp(block.timestamp + time); - } - - function rewind(uint256 time) internal virtual { - vm.warp(block.timestamp - time); - } - - // Setup a prank from an address that has some ether - function hoax(address who) internal virtual { - vm.deal(who, 1 << 128); - vm.prank(who); - } - - function hoax(address who, uint256 give) internal virtual { - vm.deal(who, give); - vm.prank(who); - } - - function hoax(address who, address origin) internal virtual { - vm.deal(who, 1 << 128); - vm.prank(who, origin); - } - - function hoax(address who, address origin, uint256 give) internal virtual { - vm.deal(who, give); - vm.prank(who, origin); - } - - // Start perpetual prank from an address that has some ether - function startHoax(address who) internal virtual { - vm.deal(who, 1 << 128); - vm.startPrank(who); - } - - function startHoax(address who, uint256 give) internal virtual { - vm.deal(who, give); - vm.startPrank(who); - } - - // Start perpetual prank from an address that has some ether - // tx.origin is set to the origin parameter - function startHoax(address who, address origin) internal virtual { - vm.deal(who, 1 << 128); - vm.startPrank(who, origin); - } - - function startHoax(address who, address origin, uint256 give) internal virtual { - vm.deal(who, give); - vm.startPrank(who, origin); - } - - function changePrank(address who) internal virtual { - vm.stopPrank(); - vm.startPrank(who); - } - - // The same as Vm's `deal` - // Use the alternative signature for ERC20 tokens - function deal(address to, uint256 give) internal virtual { - vm.deal(to, give); - } - - // Set the balance of an account for any ERC20 token - // Use the alternative signature to update `totalSupply` - function deal(address token, address to, uint256 give) internal virtual { - deal(token, to, give, false); - } - - function deal(address token, address to, uint256 give, bool adjust) internal virtual { - // get current balance - (, bytes memory balData) = token.call(abi.encodeWithSelector(0x70a08231, to)); - uint256 prevBal = abi.decode(balData, (uint256)); - - // update balance - stdstore.target(token).sig(0x70a08231).with_key(to).checked_write(give); - - // update total supply - if (adjust) { - (, bytes memory totSupData) = token.call(abi.encodeWithSelector(0x18160ddd)); - uint256 totSup = abi.decode(totSupData, (uint256)); - if (give < prevBal) { - totSup -= (prevBal - give); - } else { - totSup += (give - prevBal); - } - stdstore.target(token).sig(0x18160ddd).checked_write(totSup); - } - } - - function isFork() internal virtual returns (bool status) { - try vm.activeFork() { - status = true; - } catch (bytes memory) {} - } - - modifier noGasMetering() { - vm.pauseGasMetering(); - // To prevent turning gas monitoring back on with nested functions that use this modifier, - // we check if gasMetering started in the off position. If it did, we don't want to turn - // it back on until we exit the top level function that used the modifier - // - // i.e. funcA() noGasMetering { funcB() }, where funcB has noGasMetering as well. - // funcA will have `gasStartedOff` as false, funcB will have it as true, - // so we only turn metering back on at the end of the funcA - bool gasStartedOff = gasMeteringOff; - gasMeteringOff = true; - - _; - - // if gas metering was on when this modifier was called, turn it back on at the end - if (!gasStartedOff) { - gasMeteringOff = false; - vm.resumeGasMetering(); - } - } - - modifier skipWhenForking() { - if (!isFork()) { - _; - } - } - - modifier skipWhenNotForking() { - if (isFork()) { - _; - } - } -} diff --git a/lib/forge-std/src/StdError.sol b/lib/forge-std/src/StdError.sol deleted file mode 100644 index a302191f..00000000 --- a/lib/forge-std/src/StdError.sol +++ /dev/null @@ -1,15 +0,0 @@ -// SPDX-License-Identifier: MIT -// Panics work for versions >=0.8.0, but we lowered the pragma to make this compatible with Test -pragma solidity >=0.6.2 <0.9.0; - -library stdError { - bytes public constant assertionError = abi.encodeWithSignature("Panic(uint256)", 0x01); - bytes public constant arithmeticError = abi.encodeWithSignature("Panic(uint256)", 0x11); - bytes public constant divisionError = abi.encodeWithSignature("Panic(uint256)", 0x12); - bytes public constant enumConversionError = abi.encodeWithSignature("Panic(uint256)", 0x21); - bytes public constant encodeStorageError = abi.encodeWithSignature("Panic(uint256)", 0x22); - bytes public constant popError = abi.encodeWithSignature("Panic(uint256)", 0x31); - bytes public constant indexOOBError = abi.encodeWithSignature("Panic(uint256)", 0x32); - bytes public constant memOverflowError = abi.encodeWithSignature("Panic(uint256)", 0x41); - bytes public constant zeroVarError = abi.encodeWithSignature("Panic(uint256)", 0x51); -} diff --git a/lib/forge-std/src/StdJson.sol b/lib/forge-std/src/StdJson.sol deleted file mode 100644 index 6d2b3e24..00000000 --- a/lib/forge-std/src/StdJson.sol +++ /dev/null @@ -1,179 +0,0 @@ -// SPDX-License-Identifier: MIT -pragma solidity >=0.6.0 <0.9.0; - -pragma experimental ABIEncoderV2; - -import "./Vm.sol"; - -// Helpers for parsing and writing JSON files -// To parse: -// ``` -// using stdJson for string; -// string memory json = vm.readFile("some_peth"); -// json.parseUint(""); -// ``` -// To write: -// ``` -// using stdJson for string; -// string memory json = "deploymentArtifact"; -// Contract contract = new Contract(); -// json.serialize("contractAddress", address(contract)); -// json = json.serialize("deploymentTimes", uint(1)); -// // store the stringified JSON to the 'json' variable we have been using as a key -// // as we won't need it any longer -// string memory json2 = "finalArtifact"; -// string memory final = json2.serialize("depArtifact", json); -// final.write(""); -// ``` - -library stdJson { - VmSafe private constant vm = Vm(address(uint160(uint256(keccak256("hevm cheat code"))))); - - function parseRaw(string memory json, string memory key) internal pure returns (bytes memory) { - return vm.parseJson(json, key); - } - - function readUint(string memory json, string memory key) internal pure returns (uint256) { - return abi.decode(vm.parseJson(json, key), (uint256)); - } - - function readUintArray(string memory json, string memory key) internal pure returns (uint256[] memory) { - return abi.decode(vm.parseJson(json, key), (uint256[])); - } - - function readInt(string memory json, string memory key) internal pure returns (int256) { - return abi.decode(vm.parseJson(json, key), (int256)); - } - - function readIntArray(string memory json, string memory key) internal pure returns (int256[] memory) { - return abi.decode(vm.parseJson(json, key), (int256[])); - } - - function readBytes32(string memory json, string memory key) internal pure returns (bytes32) { - return abi.decode(vm.parseJson(json, key), (bytes32)); - } - - function readBytes32Array(string memory json, string memory key) internal pure returns (bytes32[] memory) { - return abi.decode(vm.parseJson(json, key), (bytes32[])); - } - - function readString(string memory json, string memory key) internal pure returns (string memory) { - return abi.decode(vm.parseJson(json, key), (string)); - } - - function readStringArray(string memory json, string memory key) internal pure returns (string[] memory) { - return abi.decode(vm.parseJson(json, key), (string[])); - } - - function readAddress(string memory json, string memory key) internal pure returns (address) { - return abi.decode(vm.parseJson(json, key), (address)); - } - - function readAddressArray(string memory json, string memory key) internal pure returns (address[] memory) { - return abi.decode(vm.parseJson(json, key), (address[])); - } - - function readBool(string memory json, string memory key) internal pure returns (bool) { - return abi.decode(vm.parseJson(json, key), (bool)); - } - - function readBoolArray(string memory json, string memory key) internal pure returns (bool[] memory) { - return abi.decode(vm.parseJson(json, key), (bool[])); - } - - function readBytes(string memory json, string memory key) internal pure returns (bytes memory) { - return abi.decode(vm.parseJson(json, key), (bytes)); - } - - function readBytesArray(string memory json, string memory key) internal pure returns (bytes[] memory) { - return abi.decode(vm.parseJson(json, key), (bytes[])); - } - - function serialize(string memory jsonKey, string memory key, bool value) internal returns (string memory) { - return vm.serializeBool(jsonKey, key, value); - } - - function serialize(string memory jsonKey, string memory key, bool[] memory value) - internal - returns (string memory) - { - return vm.serializeBool(jsonKey, key, value); - } - - function serialize(string memory jsonKey, string memory key, uint256 value) internal returns (string memory) { - return vm.serializeUint(jsonKey, key, value); - } - - function serialize(string memory jsonKey, string memory key, uint256[] memory value) - internal - returns (string memory) - { - return vm.serializeUint(jsonKey, key, value); - } - - function serialize(string memory jsonKey, string memory key, int256 value) internal returns (string memory) { - return vm.serializeInt(jsonKey, key, value); - } - - function serialize(string memory jsonKey, string memory key, int256[] memory value) - internal - returns (string memory) - { - return vm.serializeInt(jsonKey, key, value); - } - - function serialize(string memory jsonKey, string memory key, address value) internal returns (string memory) { - return vm.serializeAddress(jsonKey, key, value); - } - - function serialize(string memory jsonKey, string memory key, address[] memory value) - internal - returns (string memory) - { - return vm.serializeAddress(jsonKey, key, value); - } - - function serialize(string memory jsonKey, string memory key, bytes32 value) internal returns (string memory) { - return vm.serializeBytes32(jsonKey, key, value); - } - - function serialize(string memory jsonKey, string memory key, bytes32[] memory value) - internal - returns (string memory) - { - return vm.serializeBytes32(jsonKey, key, value); - } - - function serialize(string memory jsonKey, string memory key, bytes memory value) internal returns (string memory) { - return vm.serializeBytes(jsonKey, key, value); - } - - function serialize(string memory jsonKey, string memory key, bytes[] memory value) - internal - returns (string memory) - { - return vm.serializeBytes(jsonKey, key, value); - } - - function serialize(string memory jsonKey, string memory key, string memory value) - internal - returns (string memory) - { - return vm.serializeString(jsonKey, key, value); - } - - function serialize(string memory jsonKey, string memory key, string[] memory value) - internal - returns (string memory) - { - return vm.serializeString(jsonKey, key, value); - } - - function write(string memory jsonKey, string memory path) internal { - vm.writeJson(jsonKey, path); - } - - function write(string memory jsonKey, string memory path, string memory valueKey) internal { - vm.writeJson(jsonKey, path, valueKey); - } -} diff --git a/lib/forge-std/src/StdMath.sol b/lib/forge-std/src/StdMath.sol deleted file mode 100644 index 459523bd..00000000 --- a/lib/forge-std/src/StdMath.sol +++ /dev/null @@ -1,43 +0,0 @@ -// SPDX-License-Identifier: MIT -pragma solidity >=0.6.2 <0.9.0; - -library stdMath { - int256 private constant INT256_MIN = -57896044618658097711785492504343953926634992332820282019728792003956564819968; - - function abs(int256 a) internal pure returns (uint256) { - // Required or it will fail when `a = type(int256).min` - if (a == INT256_MIN) { - return 57896044618658097711785492504343953926634992332820282019728792003956564819968; - } - - return uint256(a > 0 ? a : -a); - } - - function delta(uint256 a, uint256 b) internal pure returns (uint256) { - return a > b ? a - b : b - a; - } - - function delta(int256 a, int256 b) internal pure returns (uint256) { - // a and b are of the same sign - // this works thanks to two's complement, the left-most bit is the sign bit - if ((a ^ b) > -1) { - return delta(abs(a), abs(b)); - } - - // a and b are of opposite signs - return abs(a) + abs(b); - } - - function percentDelta(uint256 a, uint256 b) internal pure returns (uint256) { - uint256 absDelta = delta(a, b); - - return absDelta * 1e18 / b; - } - - function percentDelta(int256 a, int256 b) internal pure returns (uint256) { - uint256 absDelta = delta(a, b); - uint256 absB = abs(b); - - return absDelta * 1e18 / absB; - } -} diff --git a/lib/forge-std/src/StdStorage.sol b/lib/forge-std/src/StdStorage.sol deleted file mode 100644 index 89710e8d..00000000 --- a/lib/forge-std/src/StdStorage.sol +++ /dev/null @@ -1,327 +0,0 @@ -// SPDX-License-Identifier: MIT -pragma solidity >=0.6.2 <0.9.0; - -import "./Vm.sol"; - -struct StdStorage { - mapping(address => mapping(bytes4 => mapping(bytes32 => uint256))) slots; - mapping(address => mapping(bytes4 => mapping(bytes32 => bool))) finds; - bytes32[] _keys; - bytes4 _sig; - uint256 _depth; - address _target; - bytes32 _set; -} - -library stdStorageSafe { - event SlotFound(address who, bytes4 fsig, bytes32 keysHash, uint256 slot); - event WARNING_UninitedSlot(address who, uint256 slot); - - Vm private constant vm = Vm(address(uint160(uint256(keccak256("hevm cheat code"))))); - - function sigs(string memory sigStr) internal pure returns (bytes4) { - return bytes4(keccak256(bytes(sigStr))); - } - - /// @notice find an arbitrary storage slot given a function sig, input data, address of the contract and a value to check against - // slot complexity: - // if flat, will be bytes32(uint256(uint)); - // if map, will be keccak256(abi.encode(key, uint(slot))); - // if deep map, will be keccak256(abi.encode(key1, keccak256(abi.encode(key0, uint(slot))))); - // if map struct, will be bytes32(uint256(keccak256(abi.encode(key1, keccak256(abi.encode(key0, uint(slot)))))) + structFieldDepth); - function find(StdStorage storage self) internal returns (uint256) { - address who = self._target; - bytes4 fsig = self._sig; - uint256 field_depth = self._depth; - bytes32[] memory ins = self._keys; - - // calldata to test against - if (self.finds[who][fsig][keccak256(abi.encodePacked(ins, field_depth))]) { - return self.slots[who][fsig][keccak256(abi.encodePacked(ins, field_depth))]; - } - bytes memory cald = abi.encodePacked(fsig, flatten(ins)); - vm.record(); - bytes32 fdat; - { - (, bytes memory rdat) = who.staticcall(cald); - fdat = bytesToBytes32(rdat, 32 * field_depth); - } - - (bytes32[] memory reads,) = vm.accesses(address(who)); - if (reads.length == 1) { - bytes32 curr = vm.load(who, reads[0]); - if (curr == bytes32(0)) { - emit WARNING_UninitedSlot(who, uint256(reads[0])); - } - if (fdat != curr) { - require( - false, - "stdStorage find(StdStorage): Packed slot. This would cause dangerous overwriting and currently isn't supported." - ); - } - emit SlotFound(who, fsig, keccak256(abi.encodePacked(ins, field_depth)), uint256(reads[0])); - self.slots[who][fsig][keccak256(abi.encodePacked(ins, field_depth))] = uint256(reads[0]); - self.finds[who][fsig][keccak256(abi.encodePacked(ins, field_depth))] = true; - } else if (reads.length > 1) { - for (uint256 i = 0; i < reads.length; i++) { - bytes32 prev = vm.load(who, reads[i]); - if (prev == bytes32(0)) { - emit WARNING_UninitedSlot(who, uint256(reads[i])); - } - // store - vm.store(who, reads[i], bytes32(hex"1337")); - bool success; - bytes memory rdat; - { - (success, rdat) = who.staticcall(cald); - fdat = bytesToBytes32(rdat, 32 * field_depth); - } - - if (success && fdat == bytes32(hex"1337")) { - // we found which of the slots is the actual one - emit SlotFound(who, fsig, keccak256(abi.encodePacked(ins, field_depth)), uint256(reads[i])); - self.slots[who][fsig][keccak256(abi.encodePacked(ins, field_depth))] = uint256(reads[i]); - self.finds[who][fsig][keccak256(abi.encodePacked(ins, field_depth))] = true; - vm.store(who, reads[i], prev); - break; - } - vm.store(who, reads[i], prev); - } - } else { - require(false, "stdStorage find(StdStorage): No storage use detected for target."); - } - - require( - self.finds[who][fsig][keccak256(abi.encodePacked(ins, field_depth))], - "stdStorage find(StdStorage): Slot(s) not found." - ); - - delete self._target; - delete self._sig; - delete self._keys; - delete self._depth; - - return self.slots[who][fsig][keccak256(abi.encodePacked(ins, field_depth))]; - } - - function target(StdStorage storage self, address _target) internal returns (StdStorage storage) { - self._target = _target; - return self; - } - - function sig(StdStorage storage self, bytes4 _sig) internal returns (StdStorage storage) { - self._sig = _sig; - return self; - } - - function sig(StdStorage storage self, string memory _sig) internal returns (StdStorage storage) { - self._sig = sigs(_sig); - return self; - } - - function with_key(StdStorage storage self, address who) internal returns (StdStorage storage) { - self._keys.push(bytes32(uint256(uint160(who)))); - return self; - } - - function with_key(StdStorage storage self, uint256 amt) internal returns (StdStorage storage) { - self._keys.push(bytes32(amt)); - return self; - } - - function with_key(StdStorage storage self, bytes32 key) internal returns (StdStorage storage) { - self._keys.push(key); - return self; - } - - function depth(StdStorage storage self, uint256 _depth) internal returns (StdStorage storage) { - self._depth = _depth; - return self; - } - - function read(StdStorage storage self) private returns (bytes memory) { - address t = self._target; - uint256 s = find(self); - return abi.encode(vm.load(t, bytes32(s))); - } - - function read_bytes32(StdStorage storage self) internal returns (bytes32) { - return abi.decode(read(self), (bytes32)); - } - - function read_bool(StdStorage storage self) internal returns (bool) { - int256 v = read_int(self); - if (v == 0) return false; - if (v == 1) return true; - revert("stdStorage read_bool(StdStorage): Cannot decode. Make sure you are reading a bool."); - } - - function read_address(StdStorage storage self) internal returns (address) { - return abi.decode(read(self), (address)); - } - - function read_uint(StdStorage storage self) internal returns (uint256) { - return abi.decode(read(self), (uint256)); - } - - function read_int(StdStorage storage self) internal returns (int256) { - return abi.decode(read(self), (int256)); - } - - function bytesToBytes32(bytes memory b, uint256 offset) private pure returns (bytes32) { - bytes32 out; - - uint256 max = b.length > 32 ? 32 : b.length; - for (uint256 i = 0; i < max; i++) { - out |= bytes32(b[offset + i] & 0xFF) >> (i * 8); - } - return out; - } - - function flatten(bytes32[] memory b) private pure returns (bytes memory) { - bytes memory result = new bytes(b.length * 32); - for (uint256 i = 0; i < b.length; i++) { - bytes32 k = b[i]; - /// @solidity memory-safe-assembly - assembly { - mstore(add(result, add(32, mul(32, i))), k) - } - } - - return result; - } -} - -library stdStorage { - Vm private constant vm = Vm(address(uint160(uint256(keccak256("hevm cheat code"))))); - - function sigs(string memory sigStr) internal pure returns (bytes4) { - return stdStorageSafe.sigs(sigStr); - } - - function find(StdStorage storage self) internal returns (uint256) { - return stdStorageSafe.find(self); - } - - function target(StdStorage storage self, address _target) internal returns (StdStorage storage) { - return stdStorageSafe.target(self, _target); - } - - function sig(StdStorage storage self, bytes4 _sig) internal returns (StdStorage storage) { - return stdStorageSafe.sig(self, _sig); - } - - function sig(StdStorage storage self, string memory _sig) internal returns (StdStorage storage) { - return stdStorageSafe.sig(self, _sig); - } - - function with_key(StdStorage storage self, address who) internal returns (StdStorage storage) { - return stdStorageSafe.with_key(self, who); - } - - function with_key(StdStorage storage self, uint256 amt) internal returns (StdStorage storage) { - return stdStorageSafe.with_key(self, amt); - } - - function with_key(StdStorage storage self, bytes32 key) internal returns (StdStorage storage) { - return stdStorageSafe.with_key(self, key); - } - - function depth(StdStorage storage self, uint256 _depth) internal returns (StdStorage storage) { - return stdStorageSafe.depth(self, _depth); - } - - function checked_write(StdStorage storage self, address who) internal { - checked_write(self, bytes32(uint256(uint160(who)))); - } - - function checked_write(StdStorage storage self, uint256 amt) internal { - checked_write(self, bytes32(amt)); - } - - function checked_write(StdStorage storage self, bool write) internal { - bytes32 t; - /// @solidity memory-safe-assembly - assembly { - t := write - } - checked_write(self, t); - } - - function checked_write(StdStorage storage self, bytes32 set) internal { - address who = self._target; - bytes4 fsig = self._sig; - uint256 field_depth = self._depth; - bytes32[] memory ins = self._keys; - - bytes memory cald = abi.encodePacked(fsig, flatten(ins)); - if (!self.finds[who][fsig][keccak256(abi.encodePacked(ins, field_depth))]) { - find(self); - } - bytes32 slot = bytes32(self.slots[who][fsig][keccak256(abi.encodePacked(ins, field_depth))]); - - bytes32 fdat; - { - (, bytes memory rdat) = who.staticcall(cald); - fdat = bytesToBytes32(rdat, 32 * field_depth); - } - bytes32 curr = vm.load(who, slot); - - if (fdat != curr) { - require( - false, - "stdStorage find(StdStorage): Packed slot. This would cause dangerous overwriting and currently isn't supported." - ); - } - vm.store(who, slot, set); - delete self._target; - delete self._sig; - delete self._keys; - delete self._depth; - } - - function read_bytes32(StdStorage storage self) internal returns (bytes32) { - return stdStorageSafe.read_bytes32(self); - } - - function read_bool(StdStorage storage self) internal returns (bool) { - return stdStorageSafe.read_bool(self); - } - - function read_address(StdStorage storage self) internal returns (address) { - return stdStorageSafe.read_address(self); - } - - function read_uint(StdStorage storage self) internal returns (uint256) { - return stdStorageSafe.read_uint(self); - } - - function read_int(StdStorage storage self) internal returns (int256) { - return stdStorageSafe.read_int(self); - } - - // Private function so needs to be copied over - function bytesToBytes32(bytes memory b, uint256 offset) private pure returns (bytes32) { - bytes32 out; - - uint256 max = b.length > 32 ? 32 : b.length; - for (uint256 i = 0; i < max; i++) { - out |= bytes32(b[offset + i] & 0xFF) >> (i * 8); - } - return out; - } - - // Private function so needs to be copied over - function flatten(bytes32[] memory b) private pure returns (bytes memory) { - bytes memory result = new bytes(b.length * 32); - for (uint256 i = 0; i < b.length; i++) { - bytes32 k = b[i]; - /// @solidity memory-safe-assembly - assembly { - mstore(add(result, add(32, mul(32, i))), k) - } - } - - return result; - } -} diff --git a/lib/forge-std/src/StdUtils.sol b/lib/forge-std/src/StdUtils.sol deleted file mode 100644 index 92ea25d5..00000000 --- a/lib/forge-std/src/StdUtils.sol +++ /dev/null @@ -1,85 +0,0 @@ -// SPDX-License-Identifier: MIT -pragma solidity >=0.6.2 <0.9.0; - -import "./console2.sol"; - -abstract contract StdUtils { - uint256 private constant UINT256_MAX = - 115792089237316195423570985008687907853269984665640564039457584007913129639935; - - function _bound(uint256 x, uint256 min, uint256 max) internal pure virtual returns (uint256 result) { - require(min <= max, "StdUtils bound(uint256,uint256,uint256): Max is less than min."); - - // If x is between min and max, return x directly. This is to ensure that dictionary values - // do not get shifted if the min is nonzero. More info: https://github.com/foundry-rs/forge-std/issues/188 - if (x >= min && x <= max) return x; - - uint256 size = max - min + 1; - - // If the value is 0, 1, 2, 3, warp that to min, min+1, min+2, min+3. Similarly for the UINT256_MAX side. - // This helps ensure coverage of the min/max values. - if (x <= 3 && size > x) return min + x; - if (x >= UINT256_MAX - 3 && size > UINT256_MAX - x) return max - (UINT256_MAX - x); - - // Otherwise, wrap x into the range [min, max], i.e. the range is inclusive. - if (x > max) { - uint256 diff = x - max; - uint256 rem = diff % size; - if (rem == 0) return max; - result = min + rem - 1; - } else if (x < min) { - uint256 diff = min - x; - uint256 rem = diff % size; - if (rem == 0) return min; - result = max - rem + 1; - } - } - - function bound(uint256 x, uint256 min, uint256 max) internal view virtual returns (uint256 result) { - result = _bound(x, min, max); - console2.log("Bound Result", result); - } - - /// @dev Compute the address a contract will be deployed at for a given deployer address and nonce - /// @notice adapated from Solmate implementation (https://github.com/Rari-Capital/solmate/blob/main/src/utils/LibRLP.sol) - function computeCreateAddress(address deployer, uint256 nonce) internal pure virtual returns (address) { - // forgefmt: disable-start - // The integer zero is treated as an empty byte string, and as a result it only has a length prefix, 0x80, computed via 0x80 + 0. - // A one byte integer uses its own value as its length prefix, there is no additional "0x80 + length" prefix that comes before it. - if (nonce == 0x00) return addressFromLast20Bytes(keccak256(abi.encodePacked(bytes1(0xd6), bytes1(0x94), deployer, bytes1(0x80)))); - if (nonce <= 0x7f) return addressFromLast20Bytes(keccak256(abi.encodePacked(bytes1(0xd6), bytes1(0x94), deployer, uint8(nonce)))); - - // Nonces greater than 1 byte all follow a consistent encoding scheme, where each value is preceded by a prefix of 0x80 + length. - if (nonce <= 2**8 - 1) return addressFromLast20Bytes(keccak256(abi.encodePacked(bytes1(0xd7), bytes1(0x94), deployer, bytes1(0x81), uint8(nonce)))); - if (nonce <= 2**16 - 1) return addressFromLast20Bytes(keccak256(abi.encodePacked(bytes1(0xd8), bytes1(0x94), deployer, bytes1(0x82), uint16(nonce)))); - if (nonce <= 2**24 - 1) return addressFromLast20Bytes(keccak256(abi.encodePacked(bytes1(0xd9), bytes1(0x94), deployer, bytes1(0x83), uint24(nonce)))); - // forgefmt: disable-end - - // More details about RLP encoding can be found here: https://eth.wiki/fundamentals/rlp - // 0xda = 0xc0 (short RLP prefix) + 0x16 (length of: 0x94 ++ proxy ++ 0x84 ++ nonce) - // 0x94 = 0x80 + 0x14 (0x14 = the length of an address, 20 bytes, in hex) - // 0x84 = 0x80 + 0x04 (0x04 = the bytes length of the nonce, 4 bytes, in hex) - // We assume nobody can have a nonce large enough to require more than 32 bytes. - return addressFromLast20Bytes( - keccak256(abi.encodePacked(bytes1(0xda), bytes1(0x94), deployer, bytes1(0x84), uint32(nonce))) - ); - } - - function computeCreate2Address(bytes32 salt, bytes32 initcodeHash, address deployer) - internal - pure - virtual - returns (address) - { - return addressFromLast20Bytes(keccak256(abi.encodePacked(bytes1(0xff), deployer, salt, initcodeHash))); - } - - function bytesToUint(bytes memory b) internal pure virtual returns (uint256) { - require(b.length <= 32, "StdUtils bytesToUint(bytes): Bytes length exceeds 32."); - return abi.decode(abi.encodePacked(new bytes(32 - b.length), b), (uint256)); - } - - function addressFromLast20Bytes(bytes32 bytesValue) private pure returns (address) { - return address(uint160(uint256(bytesValue))); - } -} diff --git a/lib/forge-std/src/Test.sol b/lib/forge-std/src/Test.sol deleted file mode 100644 index 9eba14b0..00000000 --- a/lib/forge-std/src/Test.sol +++ /dev/null @@ -1,11 +0,0 @@ -// SPDX-License-Identifier: MIT -pragma solidity >=0.6.2 <0.9.0; - -import {CommonBase} from "./Common.sol"; -import "ds-test/test.sol"; -// forgefmt: disable-next-line -import {console, console2, StdAssertions, StdChains, StdCheats, stdError, stdJson, stdMath, StdStorage, stdStorage, StdUtils, Vm} from "./Components.sol"; - -abstract contract TestBase is CommonBase {} - -abstract contract Test is DSTest, StdAssertions, StdChains, StdCheats, StdUtils, TestBase {} diff --git a/lib/forge-std/src/Vm.sol b/lib/forge-std/src/Vm.sol deleted file mode 100644 index 6ebde701..00000000 --- a/lib/forge-std/src/Vm.sol +++ /dev/null @@ -1,385 +0,0 @@ -// SPDX-License-Identifier: MIT -pragma solidity >=0.6.2 <0.9.0; - -pragma experimental ABIEncoderV2; - -// Cheatcodes are marked as view/pure/none using the following rules: -// 0. A call's observable behaviour includes its return value, logs, reverts and state writes, -// 1. If you can influence a later call's observable behaviour, you're neither `view` nor `pure (you are modifying some state be it the EVM, interpreter, filesystem, etc), -// 2. Otherwise if you can be influenced by an earlier call, or if reading some state, you're `view`, -// 3. Otherwise you're `pure`. - -interface VmSafe { - struct Log { - bytes32[] topics; - bytes data; - address emitter; - } - - struct Rpc { - string key; - string url; - } - - struct FsMetadata { - bool isDir; - bool isSymlink; - uint256 length; - bool readOnly; - uint256 modified; - uint256 accessed; - uint256 created; - } - - // Loads a storage slot from an address - function load(address target, bytes32 slot) external view returns (bytes32 data); - // Signs data - function sign(uint256 privateKey, bytes32 digest) external pure returns (uint8 v, bytes32 r, bytes32 s); - // Gets the address for a given private key - function addr(uint256 privateKey) external pure returns (address addr); - // Gets the nonce of an account - function getNonce(address account) external view returns (uint64 nonce); - // Performs a foreign function call via the terminal - function ffi(string[] calldata commandInput) external returns (bytes memory result); - // Sets environment variables - function setEnv(string calldata name, string calldata value) external; - // Reads environment variables, (name) => (value) - function envBool(string calldata name) external view returns (bool value); - function envUint(string calldata name) external view returns (uint256 value); - function envInt(string calldata name) external view returns (int256 value); - function envAddress(string calldata name) external view returns (address value); - function envBytes32(string calldata name) external view returns (bytes32 value); - function envString(string calldata name) external view returns (string memory value); - function envBytes(string calldata name) external view returns (bytes memory value); - // Reads environment variables as arrays - function envBool(string calldata name, string calldata delim) external view returns (bool[] memory value); - function envUint(string calldata name, string calldata delim) external view returns (uint256[] memory value); - function envInt(string calldata name, string calldata delim) external view returns (int256[] memory value); - function envAddress(string calldata name, string calldata delim) external view returns (address[] memory value); - function envBytes32(string calldata name, string calldata delim) external view returns (bytes32[] memory value); - function envString(string calldata name, string calldata delim) external view returns (string[] memory value); - function envBytes(string calldata name, string calldata delim) external view returns (bytes[] memory value); - // Read environment variables with default value - function envOr(string calldata name, bool defaultValue) external returns (bool value); - function envOr(string calldata name, uint256 defaultValue) external returns (uint256 value); - function envOr(string calldata name, int256 defaultValue) external returns (int256 value); - function envOr(string calldata name, address defaultValue) external returns (address value); - function envOr(string calldata name, bytes32 defaultValue) external returns (bytes32 value); - function envOr(string calldata name, string calldata defaultValue) external returns (string memory value); - function envOr(string calldata name, bytes calldata defaultValue) external returns (bytes memory value); - // Read environment variables as arrays with default value - function envOr(string calldata name, string calldata delim, bool[] calldata defaultValue) - external - returns (bool[] memory value); - function envOr(string calldata name, string calldata delim, uint256[] calldata defaultValue) - external - returns (uint256[] memory value); - function envOr(string calldata name, string calldata delim, int256[] calldata defaultValue) - external - returns (int256[] memory value); - function envOr(string calldata name, string calldata delim, address[] calldata defaultValue) - external - returns (address[] memory value); - function envOr(string calldata name, string calldata delim, bytes32[] calldata defaultValue) - external - returns (bytes32[] memory value); - function envOr(string calldata name, string calldata delim, string[] calldata defaultValue) - external - returns (string[] memory value); - function envOr(string calldata name, string calldata delim, bytes[] calldata defaultValue) - external - returns (bytes[] memory value); - // Records all storage reads and writes - function record() external; - // Gets all accessed reads and write slot from a recording session, for a given address - function accesses(address target) external returns (bytes32[] memory readSlots, bytes32[] memory writeSlots); - // Gets the _creation_ bytecode from an artifact file. Takes in the relative path to the json file - function getCode(string calldata artifactPath) external view returns (bytes memory creationBytecode); - // Gets the _deployed_ bytecode from an artifact file. Takes in the relative path to the json file - function getDeployedCode(string calldata artifactPath) external view returns (bytes memory runtimeBytecode); - // Labels an address in call traces - function label(address account, string calldata newLabel) external; - // Using the address that calls the test contract, has the next call (at this call depth only) create a transaction that can later be signed and sent onchain - function broadcast() external; - // Has the next call (at this call depth only) create a transaction with the address provided as the sender that can later be signed and sent onchain - function broadcast(address signer) external; - // Has the next call (at this call depth only) create a transaction with the private key provided as the sender that can later be signed and sent onchain - function broadcast(uint256 privateKey) external; - // Using the address that calls the test contract, has all subsequent calls (at this call depth only) create transactions that can later be signed and sent onchain - function startBroadcast() external; - // Has all subsequent calls (at this call depth only) create transactions with the address provided that can later be signed and sent onchain - function startBroadcast(address signer) external; - // Has all subsequent calls (at this call depth only) create transactions with the private key provided that can later be signed and sent onchain - function startBroadcast(uint256 privateKey) external; - // Stops collecting onchain transactions - function stopBroadcast() external; - // Reads the entire content of file to string - function readFile(string calldata path) external view returns (string memory data); - // Reads the entire content of file as binary. Path is relative to the project root. - function readFileBinary(string calldata path) external view returns (bytes memory data); - // Get the path of the current project root - function projectRoot() external view returns (string memory path); - // Get the metadata for a file/directory - function fsMetadata(string calldata fileOrDir) external returns (FsMetadata memory metadata); - // Reads next line of file to string - function readLine(string calldata path) external view returns (string memory line); - // Writes data to file, creating a file if it does not exist, and entirely replacing its contents if it does. - function writeFile(string calldata path, string calldata data) external; - // Writes binary data to a file, creating a file if it does not exist, and entirely replacing its contents if it does. - // Path is relative to the project root. - function writeFileBinary(string calldata path, bytes calldata data) external; - // Writes line to file, creating a file if it does not exist. - function writeLine(string calldata path, string calldata data) external; - // Closes file for reading, resetting the offset and allowing to read it from beginning with readLine. - function closeFile(string calldata path) external; - // Removes file. This cheatcode will revert in the following situations, but is not limited to just these cases: - // - Path points to a directory. - // - The file doesn't exist. - // - The user lacks permissions to remove the file. - function removeFile(string calldata path) external; - // Convert values to a string - function toString(address value) external pure returns (string memory stringifiedValue); - function toString(bytes calldata value) external pure returns (string memory stringifiedValue); - function toString(bytes32 value) external pure returns (string memory stringifiedValue); - function toString(bool value) external pure returns (string memory stringifiedValue); - function toString(uint256 value) external pure returns (string memory stringifiedValue); - function toString(int256 value) external pure returns (string memory stringifiedValue); - // Convert values from a string - function parseBytes(string calldata stringifiedValue) external pure returns (bytes memory parsedValue); - function parseAddress(string calldata stringifiedValue) external pure returns (address parsedValue); - function parseUint(string calldata stringifiedValue) external pure returns (uint256 parsedValue); - function parseInt(string calldata stringifiedValue) external pure returns (int256 parsedValue); - function parseBytes32(string calldata stringifiedValue) external pure returns (bytes32 parsedValue); - function parseBool(string calldata stringifiedValue) external pure returns (bool parsedValue); - // Record all the transaction logs - function recordLogs() external; - // Gets all the recorded logs - function getRecordedLogs() external returns (Log[] memory logs); - // Derive a private key from a provided mnenomic string (or mnenomic file path) at the derivation path m/44'/60'/0'/0/{index} - function deriveKey(string calldata mnemonic, uint32 index) external pure returns (uint256 privateKey); - // Derive a private key from a provided mnenomic string (or mnenomic file path) at {derivationPath}{index} - function deriveKey(string calldata mnemonic, string calldata derivationPath, uint32 index) - external - pure - returns (uint256 privateKey); - // Adds a private key to the local forge wallet and returns the address - function rememberKey(uint256 privateKey) external returns (address addr); - // - // parseJson - // - // ---- - // In case the returned value is a JSON object, it's encoded as a ABI-encoded tuple. As JSON objects - // don't have the notion of ordered, but tuples do, they JSON object is encoded with it's fields ordered in - // ALPHABETICAL order. That means that in order to successfully decode the tuple, we need to define a tuple that - // encodes the fields in the same order, which is alphabetical. In the case of Solidity structs, they are encoded - // as tuples, with the attributes in the order in which they are defined. - // For example: json = { 'a': 1, 'b': 0xa4tb......3xs} - // a: uint256 - // b: address - // To decode that json, we need to define a struct or a tuple as follows: - // struct json = { uint256 a; address b; } - // If we defined a json struct with the opposite order, meaning placing the address b first, it would try to - // decode the tuple in that order, and thus fail. - // ---- - // Given a string of JSON, return it as ABI-encoded - function parseJson(string calldata json, string calldata key) external pure returns (bytes memory abiEncodedData); - function parseJson(string calldata json) external pure returns (bytes memory abiEncodedData); - - // Serialize a key and value to a JSON object stored in-memory that can be later written to a file - // It returns the stringified version of the specific JSON file up to that moment. - function serializeBool(string calldata objectKey, string calldata valueKey, bool value) - external - returns (string memory json); - function serializeUint(string calldata objectKey, string calldata valueKey, uint256 value) - external - returns (string memory json); - function serializeInt(string calldata objectKey, string calldata valueKey, int256 value) - external - returns (string memory json); - function serializeAddress(string calldata objectKey, string calldata valueKey, address value) - external - returns (string memory json); - function serializeBytes32(string calldata objectKey, string calldata valueKey, bytes32 value) - external - returns (string memory json); - function serializeString(string calldata objectKey, string calldata valueKey, string calldata value) - external - returns (string memory json); - function serializeBytes(string calldata objectKey, string calldata valueKey, bytes calldata value) - external - returns (string memory json); - - function serializeBool(string calldata objectKey, string calldata valueKey, bool[] calldata values) - external - returns (string memory json); - function serializeUint(string calldata objectKey, string calldata valueKey, uint256[] calldata values) - external - returns (string memory json); - function serializeInt(string calldata objectKey, string calldata valueKey, int256[] calldata values) - external - returns (string memory json); - function serializeAddress(string calldata objectKey, string calldata valueKey, address[] calldata values) - external - returns (string memory json); - function serializeBytes32(string calldata objectKey, string calldata valueKey, bytes32[] calldata values) - external - returns (string memory json); - function serializeString(string calldata objectKey, string calldata valueKey, string[] calldata values) - external - returns (string memory json); - function serializeBytes(string calldata objectKey, string calldata valueKey, bytes[] calldata values) - external - returns (string memory json); - - // - // writeJson - // - // ---- - // Write a serialized JSON object to a file. If the file exists, it will be overwritten. - // Let's assume we want to write the following JSON to a file: - // - // { "boolean": true, "number": 342, "object": { "title": "finally json serialization" } } - // - // ``` - // string memory json1 = "some key"; - // vm.serializeBool(json1, "boolean", true); - // vm.serializeBool(json1, "number", uint256(342)); - // json2 = "some other key"; - // string memory output = vm.serializeString(json2, "title", "finally json serialization"); - // string memory finalJson = vm.serialize(json1, "object", output); - // vm.writeJson(finalJson, "./output/example.json"); - // ``` - // The critical insight is that every invocation of serialization will return the stringified version of the JSON - // up to that point. That means we can construct arbitrary JSON objects and then use the return stringified version - // to serialize them as values to another JSON object. - // - // json1 and json2 are simply keys used by the backend to keep track of the objects. So vm.serializeJson(json1,..) - // will find the object in-memory that is keyed by "some key". - function writeJson(string calldata json, string calldata path) external; - // Write a serialized JSON object to an **existing** JSON file, replacing a value with key = - // This is useful to replace a specific value of a JSON file, without having to parse the entire thing - function writeJson(string calldata json, string calldata path, string calldata valueKey) external; - // Returns the RPC url for the given alias - function rpcUrl(string calldata rpcAlias) external view returns (string memory json); - // Returns all rpc urls and their aliases `[alias, url][]` - function rpcUrls() external view returns (string[2][] memory urls); - // Returns all rpc urls and their aliases as structs. - function rpcUrlStructs() external view returns (Rpc[] memory urls); - // If the condition is false, discard this run's fuzz inputs and generate new ones. - function assume(bool condition) external pure; - // Pauses gas metering (i.e. gas usage is not counted). Noop if already paused. - function pauseGasMetering() external; - // Resumes gas metering (i.e. gas usage is counted again). Noop if already on. - function resumeGasMetering() external; -} - -interface Vm is VmSafe { - // Sets block.timestamp - function warp(uint256 newTimestamp) external; - // Sets block.height - function roll(uint256 newHeight) external; - // Sets block.basefee - function fee(uint256 newBasefee) external; - // Sets block.difficulty - function difficulty(uint256 newDifficulty) external; - // Sets block.chainid - function chainId(uint256 newChainId) external; - // Stores a value to an address' storage slot. - function store(address target, bytes32 slot, bytes32 value) external; - // Sets the nonce of an account; must be higher than the current nonce of the account - function setNonce(address account, uint64 newNonce) external; - // Sets the *next* call's msg.sender to be the input address - function prank(address msgSender) external; - // Sets all subsequent calls' msg.sender to be the input address until `stopPrank` is called - function startPrank(address msgSender) external; - // Sets the *next* call's msg.sender to be the input address, and the tx.origin to be the second input - function prank(address msgSender, address txOrigin) external; - // Sets all subsequent calls' msg.sender to be the input address until `stopPrank` is called, and the tx.origin to be the second input - function startPrank(address msgSender, address txOrigin) external; - // Resets subsequent calls' msg.sender to be `address(this)` - function stopPrank() external; - // Sets an address' balance - function deal(address account, uint256 newBalance) external; - // Sets an address' code - function etch(address target, bytes calldata newRuntimeBytecode) external; - // Expects an error on next call - function expectRevert(bytes calldata revertData) external; - function expectRevert(bytes4 revertData) external; - function expectRevert() external; - // Prepare an expected log with (bool checkTopic1, bool checkTopic2, bool checkTopic3, bool checkData). - // Call this function, then emit an event, then call a function. Internally after the call, we check if - // logs were emitted in the expected order with the expected topics and data (as specified by the booleans) - function expectEmit(bool checkTopic1, bool checkTopic2, bool checkTopic3, bool checkData) external; - function expectEmit(bool checkTopic1, bool checkTopic2, bool checkTopic3, bool checkData, address emitter) - external; - // Mocks a call to an address, returning specified data. - // Calldata can either be strict or a partial match, e.g. if you only - // pass a Solidity selector to the expected calldata, then the entire Solidity - // function will be mocked. - function mockCall(address callee, bytes calldata data, bytes calldata returnData) external; - // Mocks a call to an address with a specific msg.value, returning specified data. - // Calldata match takes precedence over msg.value in case of ambiguity. - function mockCall(address callee, uint256 msgValue, bytes calldata data, bytes calldata returnData) external; - // Clears all mocked calls - function clearMockedCalls() external; - // Expects a call to an address with the specified calldata. - // Calldata can either be a strict or a partial match - function expectCall(address callee, bytes calldata data) external; - // Expects a call to an address with the specified msg.value and calldata - function expectCall(address callee, uint256 msgValue, bytes calldata data) external; - // Sets block.coinbase - function coinbase(address newCoinbase) external; - // Snapshot the current state of the evm. - // Returns the id of the snapshot that was created. - // To revert a snapshot use `revertTo` - function snapshot() external returns (uint256 snapshotId); - // Revert the state of the EVM to a previous snapshot - // Takes the snapshot id to revert to. - // This deletes the snapshot and all snapshots taken after the given snapshot id. - function revertTo(uint256 snapshotId) external returns (bool success); - // Creates a new fork with the given endpoint and block and returns the identifier of the fork - function createFork(string calldata urlOrAlias, uint256 blockNumber) external returns (uint256 forkId); - // Creates a new fork with the given endpoint and the _latest_ block and returns the identifier of the fork - function createFork(string calldata urlOrAlias) external returns (uint256 forkId); - // Creates a new fork with the given endpoint and at the block the given transaction was mined in, replays all transaction mined in the block before the transaction, - // and returns the identifier of the fork - function createFork(string calldata urlOrAlias, bytes32 txHash) external returns (uint256 forkId); - // Creates _and_ also selects a new fork with the given endpoint and block and returns the identifier of the fork - function createSelectFork(string calldata urlOrAlias, uint256 blockNumber) external returns (uint256 forkId); - // Creates _and_ also selects new fork with the given endpoint and at the block the given transaction was mined in, replays all transaction mined in the block before - // the transaction, returns the identifier of the fork - function createSelectFork(string calldata urlOrAlias, bytes32 txHash) external returns (uint256 forkId); - // Creates _and_ also selects a new fork with the given endpoint and the latest block and returns the identifier of the fork - function createSelectFork(string calldata urlOrAlias) external returns (uint256 forkId); - // Takes a fork identifier created by `createFork` and sets the corresponding forked state as active. - function selectFork(uint256 forkId) external; - /// Returns the identifier of the currently active fork. Reverts if no fork is currently active. - function activeFork() external view returns (uint256 forkId); - // Updates the currently active fork to given block number - // This is similar to `roll` but for the currently active fork - function rollFork(uint256 blockNumber) external; - // Updates the currently active fork to given transaction - // this will `rollFork` with the number of the block the transaction was mined in and replays all transaction mined before it in the block - function rollFork(bytes32 txHash) external; - // Updates the given fork to given block number - function rollFork(uint256 forkId, uint256 blockNumber) external; - // Updates the given fork to block number of the given transaction and replays all transaction mined before it in the block - function rollFork(uint256 forkId, bytes32 txHash) external; - // Marks that the account(s) should use persistent storage across fork swaps in a multifork setup - // Meaning, changes made to the state of this account will be kept when switching forks - function makePersistent(address account) external; - function makePersistent(address account0, address account1) external; - function makePersistent(address account0, address account1, address account2) external; - function makePersistent(address[] calldata accounts) external; - // Revokes persistent status from the address, previously added via `makePersistent` - function revokePersistent(address account) external; - function revokePersistent(address[] calldata accounts) external; - // Returns true if the account is marked as persistent - function isPersistent(address account) external view returns (bool persistent); - // In forking mode, explicitly grant the given address cheatcode access - function allowCheatcodes(address account) external; - // Fetches the given transaction from the active fork and executes it on the current state - function transact(bytes32 txHash) external; - // Fetches the given transaction from the given fork and executes it on the current state - function transact(uint256 forkId, bytes32 txHash) external; -} diff --git a/lib/forge-std/src/console.sol b/lib/forge-std/src/console.sol deleted file mode 100644 index ad57e536..00000000 --- a/lib/forge-std/src/console.sol +++ /dev/null @@ -1,1533 +0,0 @@ -// SPDX-License-Identifier: MIT -pragma solidity >=0.4.22 <0.9.0; - -library console { - address constant CONSOLE_ADDRESS = address(0x000000000000000000636F6e736F6c652e6c6f67); - - function _sendLogPayload(bytes memory payload) private view { - uint256 payloadLength = payload.length; - address consoleAddress = CONSOLE_ADDRESS; - /// @solidity memory-safe-assembly - assembly { - let payloadStart := add(payload, 32) - let r := staticcall(gas(), consoleAddress, payloadStart, payloadLength, 0, 0) - } - } - - function log() internal view { - _sendLogPayload(abi.encodeWithSignature("log()")); - } - - function logInt(int p0) internal view { - _sendLogPayload(abi.encodeWithSignature("log(int)", p0)); - } - - function logUint(uint p0) internal view { - _sendLogPayload(abi.encodeWithSignature("log(uint)", p0)); - } - - function logString(string memory p0) internal view { - _sendLogPayload(abi.encodeWithSignature("log(string)", p0)); - } - - function logBool(bool p0) internal view { - _sendLogPayload(abi.encodeWithSignature("log(bool)", p0)); - } - - function logAddress(address p0) internal view { - _sendLogPayload(abi.encodeWithSignature("log(address)", p0)); - } - - function logBytes(bytes memory p0) internal view { - _sendLogPayload(abi.encodeWithSignature("log(bytes)", p0)); - } - - function logBytes1(bytes1 p0) internal view { - _sendLogPayload(abi.encodeWithSignature("log(bytes1)", p0)); - } - - function logBytes2(bytes2 p0) internal view { - _sendLogPayload(abi.encodeWithSignature("log(bytes2)", p0)); - } - - function logBytes3(bytes3 p0) internal view { - _sendLogPayload(abi.encodeWithSignature("log(bytes3)", p0)); - } - - function logBytes4(bytes4 p0) internal view { - _sendLogPayload(abi.encodeWithSignature("log(bytes4)", p0)); - } - - function logBytes5(bytes5 p0) internal view { - _sendLogPayload(abi.encodeWithSignature("log(bytes5)", p0)); - } - - function logBytes6(bytes6 p0) internal view { - _sendLogPayload(abi.encodeWithSignature("log(bytes6)", p0)); - } - - function logBytes7(bytes7 p0) internal view { - _sendLogPayload(abi.encodeWithSignature("log(bytes7)", p0)); - } - - function logBytes8(bytes8 p0) internal view { - _sendLogPayload(abi.encodeWithSignature("log(bytes8)", p0)); - } - - function logBytes9(bytes9 p0) internal view { - _sendLogPayload(abi.encodeWithSignature("log(bytes9)", p0)); - } - - function logBytes10(bytes10 p0) internal view { - _sendLogPayload(abi.encodeWithSignature("log(bytes10)", p0)); - } - - function logBytes11(bytes11 p0) internal view { - _sendLogPayload(abi.encodeWithSignature("log(bytes11)", p0)); - } - - function logBytes12(bytes12 p0) internal view { - _sendLogPayload(abi.encodeWithSignature("log(bytes12)", p0)); - } - - function logBytes13(bytes13 p0) internal view { - _sendLogPayload(abi.encodeWithSignature("log(bytes13)", p0)); - } - - function logBytes14(bytes14 p0) internal view { - _sendLogPayload(abi.encodeWithSignature("log(bytes14)", p0)); - } - - function logBytes15(bytes15 p0) internal view { - _sendLogPayload(abi.encodeWithSignature("log(bytes15)", p0)); - } - - function logBytes16(bytes16 p0) internal view { - _sendLogPayload(abi.encodeWithSignature("log(bytes16)", p0)); - } - - function logBytes17(bytes17 p0) internal view { - _sendLogPayload(abi.encodeWithSignature("log(bytes17)", p0)); - } - - function logBytes18(bytes18 p0) internal view { - _sendLogPayload(abi.encodeWithSignature("log(bytes18)", p0)); - } - - function logBytes19(bytes19 p0) internal view { - _sendLogPayload(abi.encodeWithSignature("log(bytes19)", p0)); - } - - function logBytes20(bytes20 p0) internal view { - _sendLogPayload(abi.encodeWithSignature("log(bytes20)", p0)); - } - - function logBytes21(bytes21 p0) internal view { - _sendLogPayload(abi.encodeWithSignature("log(bytes21)", p0)); - } - - function logBytes22(bytes22 p0) internal view { - _sendLogPayload(abi.encodeWithSignature("log(bytes22)", p0)); - } - - function logBytes23(bytes23 p0) internal view { - _sendLogPayload(abi.encodeWithSignature("log(bytes23)", p0)); - } - - function logBytes24(bytes24 p0) internal view { - _sendLogPayload(abi.encodeWithSignature("log(bytes24)", p0)); - } - - function logBytes25(bytes25 p0) internal view { - _sendLogPayload(abi.encodeWithSignature("log(bytes25)", p0)); - } - - function logBytes26(bytes26 p0) internal view { - _sendLogPayload(abi.encodeWithSignature("log(bytes26)", p0)); - } - - function logBytes27(bytes27 p0) internal view { - _sendLogPayload(abi.encodeWithSignature("log(bytes27)", p0)); - } - - function logBytes28(bytes28 p0) internal view { - _sendLogPayload(abi.encodeWithSignature("log(bytes28)", p0)); - } - - function logBytes29(bytes29 p0) internal view { - _sendLogPayload(abi.encodeWithSignature("log(bytes29)", p0)); - } - - function logBytes30(bytes30 p0) internal view { - _sendLogPayload(abi.encodeWithSignature("log(bytes30)", p0)); - } - - function logBytes31(bytes31 p0) internal view { - _sendLogPayload(abi.encodeWithSignature("log(bytes31)", p0)); - } - - function logBytes32(bytes32 p0) internal view { - _sendLogPayload(abi.encodeWithSignature("log(bytes32)", p0)); - } - - function log(uint p0) internal view { - _sendLogPayload(abi.encodeWithSignature("log(uint)", p0)); - } - - function log(string memory p0) internal view { - _sendLogPayload(abi.encodeWithSignature("log(string)", p0)); - } - - function log(bool p0) internal view { - _sendLogPayload(abi.encodeWithSignature("log(bool)", p0)); - } - - function log(address p0) internal view { - _sendLogPayload(abi.encodeWithSignature("log(address)", p0)); - } - - function log(uint p0, uint p1) internal view { - _sendLogPayload(abi.encodeWithSignature("log(uint,uint)", p0, p1)); - } - - function log(uint p0, string memory p1) internal view { - _sendLogPayload(abi.encodeWithSignature("log(uint,string)", p0, p1)); - } - - function log(uint p0, bool p1) internal view { - _sendLogPayload(abi.encodeWithSignature("log(uint,bool)", p0, p1)); - } - - function log(uint p0, address p1) internal view { - _sendLogPayload(abi.encodeWithSignature("log(uint,address)", p0, p1)); - } - - function log(string memory p0, uint p1) internal view { - _sendLogPayload(abi.encodeWithSignature("log(string,uint)", p0, p1)); - } - - function log(string memory p0, string memory p1) internal view { - _sendLogPayload(abi.encodeWithSignature("log(string,string)", p0, p1)); - } - - function log(string memory p0, bool p1) internal view { - _sendLogPayload(abi.encodeWithSignature("log(string,bool)", p0, p1)); - } - - function log(string memory p0, address p1) internal view { - _sendLogPayload(abi.encodeWithSignature("log(string,address)", p0, p1)); - } - - function log(bool p0, uint p1) internal view { - _sendLogPayload(abi.encodeWithSignature("log(bool,uint)", p0, p1)); - } - - function log(bool p0, string memory p1) internal view { - _sendLogPayload(abi.encodeWithSignature("log(bool,string)", p0, p1)); - } - - function log(bool p0, bool p1) internal view { - _sendLogPayload(abi.encodeWithSignature("log(bool,bool)", p0, p1)); - } - - function log(bool p0, address p1) internal view { - _sendLogPayload(abi.encodeWithSignature("log(bool,address)", p0, p1)); - } - - function log(address p0, uint p1) internal view { - _sendLogPayload(abi.encodeWithSignature("log(address,uint)", p0, p1)); - } - - function log(address p0, string memory p1) internal view { - _sendLogPayload(abi.encodeWithSignature("log(address,string)", p0, p1)); - } - - function log(address p0, bool p1) internal view { - _sendLogPayload(abi.encodeWithSignature("log(address,bool)", p0, p1)); - } - - function log(address p0, address p1) internal view { - _sendLogPayload(abi.encodeWithSignature("log(address,address)", p0, p1)); - } - - function log(uint p0, uint p1, uint p2) internal view { - _sendLogPayload(abi.encodeWithSignature("log(uint,uint,uint)", p0, p1, p2)); - } - - function log(uint p0, uint p1, string memory p2) internal view { - _sendLogPayload(abi.encodeWithSignature("log(uint,uint,string)", p0, p1, p2)); - } - - function log(uint p0, uint p1, bool p2) internal view { - _sendLogPayload(abi.encodeWithSignature("log(uint,uint,bool)", p0, p1, p2)); - } - - function log(uint p0, uint p1, address p2) internal view { - _sendLogPayload(abi.encodeWithSignature("log(uint,uint,address)", p0, p1, p2)); - } - - function log(uint p0, string memory p1, uint p2) internal view { - _sendLogPayload(abi.encodeWithSignature("log(uint,string,uint)", p0, p1, p2)); - } - - function log(uint p0, string memory p1, string memory p2) internal view { - _sendLogPayload(abi.encodeWithSignature("log(uint,string,string)", p0, p1, p2)); - } - - function log(uint p0, string memory p1, bool p2) internal view { - _sendLogPayload(abi.encodeWithSignature("log(uint,string,bool)", p0, p1, p2)); - } - - function log(uint p0, string memory p1, address p2) internal view { - _sendLogPayload(abi.encodeWithSignature("log(uint,string,address)", p0, p1, p2)); - } - - function log(uint p0, bool p1, uint p2) internal view { - _sendLogPayload(abi.encodeWithSignature("log(uint,bool,uint)", p0, p1, p2)); - } - - function log(uint p0, bool p1, string memory p2) internal view { - _sendLogPayload(abi.encodeWithSignature("log(uint,bool,string)", p0, p1, p2)); - } - - function log(uint p0, bool p1, bool p2) internal view { - _sendLogPayload(abi.encodeWithSignature("log(uint,bool,bool)", p0, p1, p2)); - } - - function log(uint p0, bool p1, address p2) internal view { - _sendLogPayload(abi.encodeWithSignature("log(uint,bool,address)", p0, p1, p2)); - } - - function log(uint p0, address p1, uint p2) internal view { - _sendLogPayload(abi.encodeWithSignature("log(uint,address,uint)", p0, p1, p2)); - } - - function log(uint p0, address p1, string memory p2) internal view { - _sendLogPayload(abi.encodeWithSignature("log(uint,address,string)", p0, p1, p2)); - } - - function log(uint p0, address p1, bool p2) internal view { - _sendLogPayload(abi.encodeWithSignature("log(uint,address,bool)", p0, p1, p2)); - } - - function log(uint p0, address p1, address p2) internal view { - _sendLogPayload(abi.encodeWithSignature("log(uint,address,address)", p0, p1, p2)); - } - - function log(string memory p0, uint p1, uint p2) internal view { - _sendLogPayload(abi.encodeWithSignature("log(string,uint,uint)", p0, p1, p2)); - } - - function log(string memory p0, uint p1, string memory p2) internal view { - _sendLogPayload(abi.encodeWithSignature("log(string,uint,string)", p0, p1, p2)); - } - - function log(string memory p0, uint p1, bool p2) internal view { - _sendLogPayload(abi.encodeWithSignature("log(string,uint,bool)", p0, p1, p2)); - } - - function log(string memory p0, uint p1, address p2) internal view { - _sendLogPayload(abi.encodeWithSignature("log(string,uint,address)", p0, p1, p2)); - } - - function log(string memory p0, string memory p1, uint p2) internal view { - _sendLogPayload(abi.encodeWithSignature("log(string,string,uint)", p0, p1, p2)); - } - - function log(string memory p0, string memory p1, string memory p2) internal view { - _sendLogPayload(abi.encodeWithSignature("log(string,string,string)", p0, p1, p2)); - } - - function log(string memory p0, string memory p1, bool p2) internal view { - _sendLogPayload(abi.encodeWithSignature("log(string,string,bool)", p0, p1, p2)); - } - - function log(string memory p0, string memory p1, address p2) internal view { - _sendLogPayload(abi.encodeWithSignature("log(string,string,address)", p0, p1, p2)); - } - - function log(string memory p0, bool p1, uint p2) internal view { - _sendLogPayload(abi.encodeWithSignature("log(string,bool,uint)", p0, p1, p2)); - } - - function log(string memory p0, bool p1, string memory p2) internal view { - _sendLogPayload(abi.encodeWithSignature("log(string,bool,string)", p0, p1, p2)); - } - - function log(string memory p0, bool p1, bool p2) internal view { - _sendLogPayload(abi.encodeWithSignature("log(string,bool,bool)", p0, p1, p2)); - } - - function log(string memory p0, bool p1, address p2) internal view { - _sendLogPayload(abi.encodeWithSignature("log(string,bool,address)", p0, p1, p2)); - } - - function log(string memory p0, address p1, uint p2) internal view { - _sendLogPayload(abi.encodeWithSignature("log(string,address,uint)", p0, p1, p2)); - } - - function log(string memory p0, address p1, string memory p2) internal view { - _sendLogPayload(abi.encodeWithSignature("log(string,address,string)", p0, p1, p2)); - } - - function log(string memory p0, address p1, bool p2) internal view { - _sendLogPayload(abi.encodeWithSignature("log(string,address,bool)", p0, p1, p2)); - } - - function log(string memory p0, address p1, address p2) internal view { - _sendLogPayload(abi.encodeWithSignature("log(string,address,address)", p0, p1, p2)); - } - - function log(bool p0, uint p1, uint p2) internal view { - _sendLogPayload(abi.encodeWithSignature("log(bool,uint,uint)", p0, p1, p2)); - } - - function log(bool p0, uint p1, string memory p2) internal view { - _sendLogPayload(abi.encodeWithSignature("log(bool,uint,string)", p0, p1, p2)); - } - - function log(bool p0, uint p1, bool p2) internal view { - _sendLogPayload(abi.encodeWithSignature("log(bool,uint,bool)", p0, p1, p2)); - } - - function log(bool p0, uint p1, address p2) internal view { - _sendLogPayload(abi.encodeWithSignature("log(bool,uint,address)", p0, p1, p2)); - } - - function log(bool p0, string memory p1, uint p2) internal view { - _sendLogPayload(abi.encodeWithSignature("log(bool,string,uint)", p0, p1, p2)); - } - - function log(bool p0, string memory p1, string memory p2) internal view { - _sendLogPayload(abi.encodeWithSignature("log(bool,string,string)", p0, p1, p2)); - } - - function log(bool p0, string memory p1, bool p2) internal view { - _sendLogPayload(abi.encodeWithSignature("log(bool,string,bool)", p0, p1, p2)); - } - - function log(bool p0, string memory p1, address p2) internal view { - _sendLogPayload(abi.encodeWithSignature("log(bool,string,address)", p0, p1, p2)); - } - - function log(bool p0, bool p1, uint p2) internal view { - _sendLogPayload(abi.encodeWithSignature("log(bool,bool,uint)", p0, p1, p2)); - } - - function log(bool p0, bool p1, string memory p2) internal view { - _sendLogPayload(abi.encodeWithSignature("log(bool,bool,string)", p0, p1, p2)); - } - - function log(bool p0, bool p1, bool p2) internal view { - _sendLogPayload(abi.encodeWithSignature("log(bool,bool,bool)", p0, p1, p2)); - } - - function log(bool p0, bool p1, address p2) internal view { - _sendLogPayload(abi.encodeWithSignature("log(bool,bool,address)", p0, p1, p2)); - } - - function log(bool p0, address p1, uint p2) internal view { - _sendLogPayload(abi.encodeWithSignature("log(bool,address,uint)", p0, p1, p2)); - } - - function log(bool p0, address p1, string memory p2) internal view { - _sendLogPayload(abi.encodeWithSignature("log(bool,address,string)", p0, p1, p2)); - } - - function log(bool p0, address p1, bool p2) internal view { - _sendLogPayload(abi.encodeWithSignature("log(bool,address,bool)", p0, p1, p2)); - } - - function log(bool p0, address p1, address p2) internal view { - _sendLogPayload(abi.encodeWithSignature("log(bool,address,address)", p0, p1, p2)); - } - - function log(address p0, uint p1, uint p2) internal view { - _sendLogPayload(abi.encodeWithSignature("log(address,uint,uint)", p0, p1, p2)); - } - - function log(address p0, uint p1, string memory p2) internal view { - _sendLogPayload(abi.encodeWithSignature("log(address,uint,string)", p0, p1, p2)); - } - - function log(address p0, uint p1, bool p2) internal view { - _sendLogPayload(abi.encodeWithSignature("log(address,uint,bool)", p0, p1, p2)); - } - - function log(address p0, uint p1, address p2) internal view { - _sendLogPayload(abi.encodeWithSignature("log(address,uint,address)", p0, p1, p2)); - } - - function log(address p0, string memory p1, uint p2) internal view { - _sendLogPayload(abi.encodeWithSignature("log(address,string,uint)", p0, p1, p2)); - } - - function log(address p0, string memory p1, string memory p2) internal view { - _sendLogPayload(abi.encodeWithSignature("log(address,string,string)", p0, p1, p2)); - } - - function log(address p0, string memory p1, bool p2) internal view { - _sendLogPayload(abi.encodeWithSignature("log(address,string,bool)", p0, p1, p2)); - } - - function log(address p0, string memory p1, address p2) internal view { - _sendLogPayload(abi.encodeWithSignature("log(address,string,address)", p0, p1, p2)); - } - - function log(address p0, bool p1, uint p2) internal view { - _sendLogPayload(abi.encodeWithSignature("log(address,bool,uint)", p0, p1, p2)); - } - - function log(address p0, bool p1, string memory p2) internal view { - _sendLogPayload(abi.encodeWithSignature("log(address,bool,string)", p0, p1, p2)); - } - - function log(address p0, bool p1, bool p2) internal view { - _sendLogPayload(abi.encodeWithSignature("log(address,bool,bool)", p0, p1, p2)); - } - - function log(address p0, bool p1, address p2) internal view { - _sendLogPayload(abi.encodeWithSignature("log(address,bool,address)", p0, p1, p2)); - } - - function log(address p0, address p1, uint p2) internal view { - _sendLogPayload(abi.encodeWithSignature("log(address,address,uint)", p0, p1, p2)); - } - - function log(address p0, address p1, string memory p2) internal view { - _sendLogPayload(abi.encodeWithSignature("log(address,address,string)", p0, p1, p2)); - } - - function log(address p0, address p1, bool p2) internal view { - _sendLogPayload(abi.encodeWithSignature("log(address,address,bool)", p0, p1, p2)); - } - - function log(address p0, address p1, address p2) internal view { - _sendLogPayload(abi.encodeWithSignature("log(address,address,address)", p0, p1, p2)); - } - - function log(uint p0, uint p1, uint p2, uint p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(uint,uint,uint,uint)", p0, p1, p2, p3)); - } - - function log(uint p0, uint p1, uint p2, string memory p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(uint,uint,uint,string)", p0, p1, p2, p3)); - } - - function log(uint p0, uint p1, uint p2, bool p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(uint,uint,uint,bool)", p0, p1, p2, p3)); - } - - function log(uint p0, uint p1, uint p2, address p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(uint,uint,uint,address)", p0, p1, p2, p3)); - } - - function log(uint p0, uint p1, string memory p2, uint p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(uint,uint,string,uint)", p0, p1, p2, p3)); - } - - function log(uint p0, uint p1, string memory p2, string memory p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(uint,uint,string,string)", p0, p1, p2, p3)); - } - - function log(uint p0, uint p1, string memory p2, bool p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(uint,uint,string,bool)", p0, p1, p2, p3)); - } - - function log(uint p0, uint p1, string memory p2, address p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(uint,uint,string,address)", p0, p1, p2, p3)); - } - - function log(uint p0, uint p1, bool p2, uint p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(uint,uint,bool,uint)", p0, p1, p2, p3)); - } - - function log(uint p0, uint p1, bool p2, string memory p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(uint,uint,bool,string)", p0, p1, p2, p3)); - } - - function log(uint p0, uint p1, bool p2, bool p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(uint,uint,bool,bool)", p0, p1, p2, p3)); - } - - function log(uint p0, uint p1, bool p2, address p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(uint,uint,bool,address)", p0, p1, p2, p3)); - } - - function log(uint p0, uint p1, address p2, uint p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(uint,uint,address,uint)", p0, p1, p2, p3)); - } - - function log(uint p0, uint p1, address p2, string memory p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(uint,uint,address,string)", p0, p1, p2, p3)); - } - - function log(uint p0, uint p1, address p2, bool p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(uint,uint,address,bool)", p0, p1, p2, p3)); - } - - function log(uint p0, uint p1, address p2, address p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(uint,uint,address,address)", p0, p1, p2, p3)); - } - - function log(uint p0, string memory p1, uint p2, uint p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(uint,string,uint,uint)", p0, p1, p2, p3)); - } - - function log(uint p0, string memory p1, uint p2, string memory p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(uint,string,uint,string)", p0, p1, p2, p3)); - } - - function log(uint p0, string memory p1, uint p2, bool p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(uint,string,uint,bool)", p0, p1, p2, p3)); - } - - function log(uint p0, string memory p1, uint p2, address p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(uint,string,uint,address)", p0, p1, p2, p3)); - } - - function log(uint p0, string memory p1, string memory p2, uint p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(uint,string,string,uint)", p0, p1, p2, p3)); - } - - function log(uint p0, string memory p1, string memory p2, string memory p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(uint,string,string,string)", p0, p1, p2, p3)); - } - - function log(uint p0, string memory p1, string memory p2, bool p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(uint,string,string,bool)", p0, p1, p2, p3)); - } - - function log(uint p0, string memory p1, string memory p2, address p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(uint,string,string,address)", p0, p1, p2, p3)); - } - - function log(uint p0, string memory p1, bool p2, uint p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(uint,string,bool,uint)", p0, p1, p2, p3)); - } - - function log(uint p0, string memory p1, bool p2, string memory p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(uint,string,bool,string)", p0, p1, p2, p3)); - } - - function log(uint p0, string memory p1, bool p2, bool p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(uint,string,bool,bool)", p0, p1, p2, p3)); - } - - function log(uint p0, string memory p1, bool p2, address p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(uint,string,bool,address)", p0, p1, p2, p3)); - } - - function log(uint p0, string memory p1, address p2, uint p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(uint,string,address,uint)", p0, p1, p2, p3)); - } - - function log(uint p0, string memory p1, address p2, string memory p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(uint,string,address,string)", p0, p1, p2, p3)); - } - - function log(uint p0, string memory p1, address p2, bool p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(uint,string,address,bool)", p0, p1, p2, p3)); - } - - function log(uint p0, string memory p1, address p2, address p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(uint,string,address,address)", p0, p1, p2, p3)); - } - - function log(uint p0, bool p1, uint p2, uint p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(uint,bool,uint,uint)", p0, p1, p2, p3)); - } - - function log(uint p0, bool p1, uint p2, string memory p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(uint,bool,uint,string)", p0, p1, p2, p3)); - } - - function log(uint p0, bool p1, uint p2, bool p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(uint,bool,uint,bool)", p0, p1, p2, p3)); - } - - function log(uint p0, bool p1, uint p2, address p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(uint,bool,uint,address)", p0, p1, p2, p3)); - } - - function log(uint p0, bool p1, string memory p2, uint p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(uint,bool,string,uint)", p0, p1, p2, p3)); - } - - function log(uint p0, bool p1, string memory p2, string memory p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(uint,bool,string,string)", p0, p1, p2, p3)); - } - - function log(uint p0, bool p1, string memory p2, bool p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(uint,bool,string,bool)", p0, p1, p2, p3)); - } - - function log(uint p0, bool p1, string memory p2, address p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(uint,bool,string,address)", p0, p1, p2, p3)); - } - - function log(uint p0, bool p1, bool p2, uint p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(uint,bool,bool,uint)", p0, p1, p2, p3)); - } - - function log(uint p0, bool p1, bool p2, string memory p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(uint,bool,bool,string)", p0, p1, p2, p3)); - } - - function log(uint p0, bool p1, bool p2, bool p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(uint,bool,bool,bool)", p0, p1, p2, p3)); - } - - function log(uint p0, bool p1, bool p2, address p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(uint,bool,bool,address)", p0, p1, p2, p3)); - } - - function log(uint p0, bool p1, address p2, uint p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(uint,bool,address,uint)", p0, p1, p2, p3)); - } - - function log(uint p0, bool p1, address p2, string memory p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(uint,bool,address,string)", p0, p1, p2, p3)); - } - - function log(uint p0, bool p1, address p2, bool p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(uint,bool,address,bool)", p0, p1, p2, p3)); - } - - function log(uint p0, bool p1, address p2, address p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(uint,bool,address,address)", p0, p1, p2, p3)); - } - - function log(uint p0, address p1, uint p2, uint p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(uint,address,uint,uint)", p0, p1, p2, p3)); - } - - function log(uint p0, address p1, uint p2, string memory p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(uint,address,uint,string)", p0, p1, p2, p3)); - } - - function log(uint p0, address p1, uint p2, bool p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(uint,address,uint,bool)", p0, p1, p2, p3)); - } - - function log(uint p0, address p1, uint p2, address p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(uint,address,uint,address)", p0, p1, p2, p3)); - } - - function log(uint p0, address p1, string memory p2, uint p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(uint,address,string,uint)", p0, p1, p2, p3)); - } - - function log(uint p0, address p1, string memory p2, string memory p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(uint,address,string,string)", p0, p1, p2, p3)); - } - - function log(uint p0, address p1, string memory p2, bool p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(uint,address,string,bool)", p0, p1, p2, p3)); - } - - function log(uint p0, address p1, string memory p2, address p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(uint,address,string,address)", p0, p1, p2, p3)); - } - - function log(uint p0, address p1, bool p2, uint p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(uint,address,bool,uint)", p0, p1, p2, p3)); - } - - function log(uint p0, address p1, bool p2, string memory p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(uint,address,bool,string)", p0, p1, p2, p3)); - } - - function log(uint p0, address p1, bool p2, bool p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(uint,address,bool,bool)", p0, p1, p2, p3)); - } - - function log(uint p0, address p1, bool p2, address p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(uint,address,bool,address)", p0, p1, p2, p3)); - } - - function log(uint p0, address p1, address p2, uint p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(uint,address,address,uint)", p0, p1, p2, p3)); - } - - function log(uint p0, address p1, address p2, string memory p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(uint,address,address,string)", p0, p1, p2, p3)); - } - - function log(uint p0, address p1, address p2, bool p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(uint,address,address,bool)", p0, p1, p2, p3)); - } - - function log(uint p0, address p1, address p2, address p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(uint,address,address,address)", p0, p1, p2, p3)); - } - - function log(string memory p0, uint p1, uint p2, uint p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(string,uint,uint,uint)", p0, p1, p2, p3)); - } - - function log(string memory p0, uint p1, uint p2, string memory p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(string,uint,uint,string)", p0, p1, p2, p3)); - } - - function log(string memory p0, uint p1, uint p2, bool p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(string,uint,uint,bool)", p0, p1, p2, p3)); - } - - function log(string memory p0, uint p1, uint p2, address p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(string,uint,uint,address)", p0, p1, p2, p3)); - } - - function log(string memory p0, uint p1, string memory p2, uint p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(string,uint,string,uint)", p0, p1, p2, p3)); - } - - function log(string memory p0, uint p1, string memory p2, string memory p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(string,uint,string,string)", p0, p1, p2, p3)); - } - - function log(string memory p0, uint p1, string memory p2, bool p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(string,uint,string,bool)", p0, p1, p2, p3)); - } - - function log(string memory p0, uint p1, string memory p2, address p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(string,uint,string,address)", p0, p1, p2, p3)); - } - - function log(string memory p0, uint p1, bool p2, uint p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(string,uint,bool,uint)", p0, p1, p2, p3)); - } - - function log(string memory p0, uint p1, bool p2, string memory p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(string,uint,bool,string)", p0, p1, p2, p3)); - } - - function log(string memory p0, uint p1, bool p2, bool p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(string,uint,bool,bool)", p0, p1, p2, p3)); - } - - function log(string memory p0, uint p1, bool p2, address p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(string,uint,bool,address)", p0, p1, p2, p3)); - } - - function log(string memory p0, uint p1, address p2, uint p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(string,uint,address,uint)", p0, p1, p2, p3)); - } - - function log(string memory p0, uint p1, address p2, string memory p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(string,uint,address,string)", p0, p1, p2, p3)); - } - - function log(string memory p0, uint p1, address p2, bool p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(string,uint,address,bool)", p0, p1, p2, p3)); - } - - function log(string memory p0, uint p1, address p2, address p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(string,uint,address,address)", p0, p1, p2, p3)); - } - - function log(string memory p0, string memory p1, uint p2, uint p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(string,string,uint,uint)", p0, p1, p2, p3)); - } - - function log(string memory p0, string memory p1, uint p2, string memory p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(string,string,uint,string)", p0, p1, p2, p3)); - } - - function log(string memory p0, string memory p1, uint p2, bool p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(string,string,uint,bool)", p0, p1, p2, p3)); - } - - function log(string memory p0, string memory p1, uint p2, address p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(string,string,uint,address)", p0, p1, p2, p3)); - } - - function log(string memory p0, string memory p1, string memory p2, uint p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(string,string,string,uint)", p0, p1, p2, p3)); - } - - function log(string memory p0, string memory p1, string memory p2, string memory p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(string,string,string,string)", p0, p1, p2, p3)); - } - - function log(string memory p0, string memory p1, string memory p2, bool p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(string,string,string,bool)", p0, p1, p2, p3)); - } - - function log(string memory p0, string memory p1, string memory p2, address p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(string,string,string,address)", p0, p1, p2, p3)); - } - - function log(string memory p0, string memory p1, bool p2, uint p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(string,string,bool,uint)", p0, p1, p2, p3)); - } - - function log(string memory p0, string memory p1, bool p2, string memory p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(string,string,bool,string)", p0, p1, p2, p3)); - } - - function log(string memory p0, string memory p1, bool p2, bool p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(string,string,bool,bool)", p0, p1, p2, p3)); - } - - function log(string memory p0, string memory p1, bool p2, address p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(string,string,bool,address)", p0, p1, p2, p3)); - } - - function log(string memory p0, string memory p1, address p2, uint p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(string,string,address,uint)", p0, p1, p2, p3)); - } - - function log(string memory p0, string memory p1, address p2, string memory p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(string,string,address,string)", p0, p1, p2, p3)); - } - - function log(string memory p0, string memory p1, address p2, bool p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(string,string,address,bool)", p0, p1, p2, p3)); - } - - function log(string memory p0, string memory p1, address p2, address p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(string,string,address,address)", p0, p1, p2, p3)); - } - - function log(string memory p0, bool p1, uint p2, uint p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(string,bool,uint,uint)", p0, p1, p2, p3)); - } - - function log(string memory p0, bool p1, uint p2, string memory p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(string,bool,uint,string)", p0, p1, p2, p3)); - } - - function log(string memory p0, bool p1, uint p2, bool p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(string,bool,uint,bool)", p0, p1, p2, p3)); - } - - function log(string memory p0, bool p1, uint p2, address p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(string,bool,uint,address)", p0, p1, p2, p3)); - } - - function log(string memory p0, bool p1, string memory p2, uint p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(string,bool,string,uint)", p0, p1, p2, p3)); - } - - function log(string memory p0, bool p1, string memory p2, string memory p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(string,bool,string,string)", p0, p1, p2, p3)); - } - - function log(string memory p0, bool p1, string memory p2, bool p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(string,bool,string,bool)", p0, p1, p2, p3)); - } - - function log(string memory p0, bool p1, string memory p2, address p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(string,bool,string,address)", p0, p1, p2, p3)); - } - - function log(string memory p0, bool p1, bool p2, uint p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(string,bool,bool,uint)", p0, p1, p2, p3)); - } - - function log(string memory p0, bool p1, bool p2, string memory p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(string,bool,bool,string)", p0, p1, p2, p3)); - } - - function log(string memory p0, bool p1, bool p2, bool p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(string,bool,bool,bool)", p0, p1, p2, p3)); - } - - function log(string memory p0, bool p1, bool p2, address p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(string,bool,bool,address)", p0, p1, p2, p3)); - } - - function log(string memory p0, bool p1, address p2, uint p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(string,bool,address,uint)", p0, p1, p2, p3)); - } - - function log(string memory p0, bool p1, address p2, string memory p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(string,bool,address,string)", p0, p1, p2, p3)); - } - - function log(string memory p0, bool p1, address p2, bool p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(string,bool,address,bool)", p0, p1, p2, p3)); - } - - function log(string memory p0, bool p1, address p2, address p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(string,bool,address,address)", p0, p1, p2, p3)); - } - - function log(string memory p0, address p1, uint p2, uint p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(string,address,uint,uint)", p0, p1, p2, p3)); - } - - function log(string memory p0, address p1, uint p2, string memory p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(string,address,uint,string)", p0, p1, p2, p3)); - } - - function log(string memory p0, address p1, uint p2, bool p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(string,address,uint,bool)", p0, p1, p2, p3)); - } - - function log(string memory p0, address p1, uint p2, address p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(string,address,uint,address)", p0, p1, p2, p3)); - } - - function log(string memory p0, address p1, string memory p2, uint p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(string,address,string,uint)", p0, p1, p2, p3)); - } - - function log(string memory p0, address p1, string memory p2, string memory p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(string,address,string,string)", p0, p1, p2, p3)); - } - - function log(string memory p0, address p1, string memory p2, bool p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(string,address,string,bool)", p0, p1, p2, p3)); - } - - function log(string memory p0, address p1, string memory p2, address p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(string,address,string,address)", p0, p1, p2, p3)); - } - - function log(string memory p0, address p1, bool p2, uint p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(string,address,bool,uint)", p0, p1, p2, p3)); - } - - function log(string memory p0, address p1, bool p2, string memory p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(string,address,bool,string)", p0, p1, p2, p3)); - } - - function log(string memory p0, address p1, bool p2, bool p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(string,address,bool,bool)", p0, p1, p2, p3)); - } - - function log(string memory p0, address p1, bool p2, address p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(string,address,bool,address)", p0, p1, p2, p3)); - } - - function log(string memory p0, address p1, address p2, uint p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(string,address,address,uint)", p0, p1, p2, p3)); - } - - function log(string memory p0, address p1, address p2, string memory p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(string,address,address,string)", p0, p1, p2, p3)); - } - - function log(string memory p0, address p1, address p2, bool p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(string,address,address,bool)", p0, p1, p2, p3)); - } - - function log(string memory p0, address p1, address p2, address p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(string,address,address,address)", p0, p1, p2, p3)); - } - - function log(bool p0, uint p1, uint p2, uint p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(bool,uint,uint,uint)", p0, p1, p2, p3)); - } - - function log(bool p0, uint p1, uint p2, string memory p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(bool,uint,uint,string)", p0, p1, p2, p3)); - } - - function log(bool p0, uint p1, uint p2, bool p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(bool,uint,uint,bool)", p0, p1, p2, p3)); - } - - function log(bool p0, uint p1, uint p2, address p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(bool,uint,uint,address)", p0, p1, p2, p3)); - } - - function log(bool p0, uint p1, string memory p2, uint p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(bool,uint,string,uint)", p0, p1, p2, p3)); - } - - function log(bool p0, uint p1, string memory p2, string memory p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(bool,uint,string,string)", p0, p1, p2, p3)); - } - - function log(bool p0, uint p1, string memory p2, bool p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(bool,uint,string,bool)", p0, p1, p2, p3)); - } - - function log(bool p0, uint p1, string memory p2, address p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(bool,uint,string,address)", p0, p1, p2, p3)); - } - - function log(bool p0, uint p1, bool p2, uint p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(bool,uint,bool,uint)", p0, p1, p2, p3)); - } - - function log(bool p0, uint p1, bool p2, string memory p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(bool,uint,bool,string)", p0, p1, p2, p3)); - } - - function log(bool p0, uint p1, bool p2, bool p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(bool,uint,bool,bool)", p0, p1, p2, p3)); - } - - function log(bool p0, uint p1, bool p2, address p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(bool,uint,bool,address)", p0, p1, p2, p3)); - } - - function log(bool p0, uint p1, address p2, uint p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(bool,uint,address,uint)", p0, p1, p2, p3)); - } - - function log(bool p0, uint p1, address p2, string memory p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(bool,uint,address,string)", p0, p1, p2, p3)); - } - - function log(bool p0, uint p1, address p2, bool p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(bool,uint,address,bool)", p0, p1, p2, p3)); - } - - function log(bool p0, uint p1, address p2, address p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(bool,uint,address,address)", p0, p1, p2, p3)); - } - - function log(bool p0, string memory p1, uint p2, uint p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(bool,string,uint,uint)", p0, p1, p2, p3)); - } - - function log(bool p0, string memory p1, uint p2, string memory p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(bool,string,uint,string)", p0, p1, p2, p3)); - } - - function log(bool p0, string memory p1, uint p2, bool p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(bool,string,uint,bool)", p0, p1, p2, p3)); - } - - function log(bool p0, string memory p1, uint p2, address p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(bool,string,uint,address)", p0, p1, p2, p3)); - } - - function log(bool p0, string memory p1, string memory p2, uint p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(bool,string,string,uint)", p0, p1, p2, p3)); - } - - function log(bool p0, string memory p1, string memory p2, string memory p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(bool,string,string,string)", p0, p1, p2, p3)); - } - - function log(bool p0, string memory p1, string memory p2, bool p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(bool,string,string,bool)", p0, p1, p2, p3)); - } - - function log(bool p0, string memory p1, string memory p2, address p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(bool,string,string,address)", p0, p1, p2, p3)); - } - - function log(bool p0, string memory p1, bool p2, uint p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(bool,string,bool,uint)", p0, p1, p2, p3)); - } - - function log(bool p0, string memory p1, bool p2, string memory p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(bool,string,bool,string)", p0, p1, p2, p3)); - } - - function log(bool p0, string memory p1, bool p2, bool p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(bool,string,bool,bool)", p0, p1, p2, p3)); - } - - function log(bool p0, string memory p1, bool p2, address p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(bool,string,bool,address)", p0, p1, p2, p3)); - } - - function log(bool p0, string memory p1, address p2, uint p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(bool,string,address,uint)", p0, p1, p2, p3)); - } - - function log(bool p0, string memory p1, address p2, string memory p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(bool,string,address,string)", p0, p1, p2, p3)); - } - - function log(bool p0, string memory p1, address p2, bool p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(bool,string,address,bool)", p0, p1, p2, p3)); - } - - function log(bool p0, string memory p1, address p2, address p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(bool,string,address,address)", p0, p1, p2, p3)); - } - - function log(bool p0, bool p1, uint p2, uint p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(bool,bool,uint,uint)", p0, p1, p2, p3)); - } - - function log(bool p0, bool p1, uint p2, string memory p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(bool,bool,uint,string)", p0, p1, p2, p3)); - } - - function log(bool p0, bool p1, uint p2, bool p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(bool,bool,uint,bool)", p0, p1, p2, p3)); - } - - function log(bool p0, bool p1, uint p2, address p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(bool,bool,uint,address)", p0, p1, p2, p3)); - } - - function log(bool p0, bool p1, string memory p2, uint p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(bool,bool,string,uint)", p0, p1, p2, p3)); - } - - function log(bool p0, bool p1, string memory p2, string memory p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(bool,bool,string,string)", p0, p1, p2, p3)); - } - - function log(bool p0, bool p1, string memory p2, bool p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(bool,bool,string,bool)", p0, p1, p2, p3)); - } - - function log(bool p0, bool p1, string memory p2, address p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(bool,bool,string,address)", p0, p1, p2, p3)); - } - - function log(bool p0, bool p1, bool p2, uint p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(bool,bool,bool,uint)", p0, p1, p2, p3)); - } - - function log(bool p0, bool p1, bool p2, string memory p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(bool,bool,bool,string)", p0, p1, p2, p3)); - } - - function log(bool p0, bool p1, bool p2, bool p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(bool,bool,bool,bool)", p0, p1, p2, p3)); - } - - function log(bool p0, bool p1, bool p2, address p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(bool,bool,bool,address)", p0, p1, p2, p3)); - } - - function log(bool p0, bool p1, address p2, uint p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(bool,bool,address,uint)", p0, p1, p2, p3)); - } - - function log(bool p0, bool p1, address p2, string memory p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(bool,bool,address,string)", p0, p1, p2, p3)); - } - - function log(bool p0, bool p1, address p2, bool p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(bool,bool,address,bool)", p0, p1, p2, p3)); - } - - function log(bool p0, bool p1, address p2, address p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(bool,bool,address,address)", p0, p1, p2, p3)); - } - - function log(bool p0, address p1, uint p2, uint p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(bool,address,uint,uint)", p0, p1, p2, p3)); - } - - function log(bool p0, address p1, uint p2, string memory p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(bool,address,uint,string)", p0, p1, p2, p3)); - } - - function log(bool p0, address p1, uint p2, bool p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(bool,address,uint,bool)", p0, p1, p2, p3)); - } - - function log(bool p0, address p1, uint p2, address p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(bool,address,uint,address)", p0, p1, p2, p3)); - } - - function log(bool p0, address p1, string memory p2, uint p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(bool,address,string,uint)", p0, p1, p2, p3)); - } - - function log(bool p0, address p1, string memory p2, string memory p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(bool,address,string,string)", p0, p1, p2, p3)); - } - - function log(bool p0, address p1, string memory p2, bool p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(bool,address,string,bool)", p0, p1, p2, p3)); - } - - function log(bool p0, address p1, string memory p2, address p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(bool,address,string,address)", p0, p1, p2, p3)); - } - - function log(bool p0, address p1, bool p2, uint p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(bool,address,bool,uint)", p0, p1, p2, p3)); - } - - function log(bool p0, address p1, bool p2, string memory p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(bool,address,bool,string)", p0, p1, p2, p3)); - } - - function log(bool p0, address p1, bool p2, bool p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(bool,address,bool,bool)", p0, p1, p2, p3)); - } - - function log(bool p0, address p1, bool p2, address p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(bool,address,bool,address)", p0, p1, p2, p3)); - } - - function log(bool p0, address p1, address p2, uint p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(bool,address,address,uint)", p0, p1, p2, p3)); - } - - function log(bool p0, address p1, address p2, string memory p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(bool,address,address,string)", p0, p1, p2, p3)); - } - - function log(bool p0, address p1, address p2, bool p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(bool,address,address,bool)", p0, p1, p2, p3)); - } - - function log(bool p0, address p1, address p2, address p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(bool,address,address,address)", p0, p1, p2, p3)); - } - - function log(address p0, uint p1, uint p2, uint p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(address,uint,uint,uint)", p0, p1, p2, p3)); - } - - function log(address p0, uint p1, uint p2, string memory p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(address,uint,uint,string)", p0, p1, p2, p3)); - } - - function log(address p0, uint p1, uint p2, bool p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(address,uint,uint,bool)", p0, p1, p2, p3)); - } - - function log(address p0, uint p1, uint p2, address p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(address,uint,uint,address)", p0, p1, p2, p3)); - } - - function log(address p0, uint p1, string memory p2, uint p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(address,uint,string,uint)", p0, p1, p2, p3)); - } - - function log(address p0, uint p1, string memory p2, string memory p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(address,uint,string,string)", p0, p1, p2, p3)); - } - - function log(address p0, uint p1, string memory p2, bool p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(address,uint,string,bool)", p0, p1, p2, p3)); - } - - function log(address p0, uint p1, string memory p2, address p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(address,uint,string,address)", p0, p1, p2, p3)); - } - - function log(address p0, uint p1, bool p2, uint p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(address,uint,bool,uint)", p0, p1, p2, p3)); - } - - function log(address p0, uint p1, bool p2, string memory p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(address,uint,bool,string)", p0, p1, p2, p3)); - } - - function log(address p0, uint p1, bool p2, bool p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(address,uint,bool,bool)", p0, p1, p2, p3)); - } - - function log(address p0, uint p1, bool p2, address p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(address,uint,bool,address)", p0, p1, p2, p3)); - } - - function log(address p0, uint p1, address p2, uint p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(address,uint,address,uint)", p0, p1, p2, p3)); - } - - function log(address p0, uint p1, address p2, string memory p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(address,uint,address,string)", p0, p1, p2, p3)); - } - - function log(address p0, uint p1, address p2, bool p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(address,uint,address,bool)", p0, p1, p2, p3)); - } - - function log(address p0, uint p1, address p2, address p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(address,uint,address,address)", p0, p1, p2, p3)); - } - - function log(address p0, string memory p1, uint p2, uint p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(address,string,uint,uint)", p0, p1, p2, p3)); - } - - function log(address p0, string memory p1, uint p2, string memory p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(address,string,uint,string)", p0, p1, p2, p3)); - } - - function log(address p0, string memory p1, uint p2, bool p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(address,string,uint,bool)", p0, p1, p2, p3)); - } - - function log(address p0, string memory p1, uint p2, address p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(address,string,uint,address)", p0, p1, p2, p3)); - } - - function log(address p0, string memory p1, string memory p2, uint p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(address,string,string,uint)", p0, p1, p2, p3)); - } - - function log(address p0, string memory p1, string memory p2, string memory p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(address,string,string,string)", p0, p1, p2, p3)); - } - - function log(address p0, string memory p1, string memory p2, bool p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(address,string,string,bool)", p0, p1, p2, p3)); - } - - function log(address p0, string memory p1, string memory p2, address p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(address,string,string,address)", p0, p1, p2, p3)); - } - - function log(address p0, string memory p1, bool p2, uint p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(address,string,bool,uint)", p0, p1, p2, p3)); - } - - function log(address p0, string memory p1, bool p2, string memory p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(address,string,bool,string)", p0, p1, p2, p3)); - } - - function log(address p0, string memory p1, bool p2, bool p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(address,string,bool,bool)", p0, p1, p2, p3)); - } - - function log(address p0, string memory p1, bool p2, address p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(address,string,bool,address)", p0, p1, p2, p3)); - } - - function log(address p0, string memory p1, address p2, uint p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(address,string,address,uint)", p0, p1, p2, p3)); - } - - function log(address p0, string memory p1, address p2, string memory p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(address,string,address,string)", p0, p1, p2, p3)); - } - - function log(address p0, string memory p1, address p2, bool p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(address,string,address,bool)", p0, p1, p2, p3)); - } - - function log(address p0, string memory p1, address p2, address p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(address,string,address,address)", p0, p1, p2, p3)); - } - - function log(address p0, bool p1, uint p2, uint p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(address,bool,uint,uint)", p0, p1, p2, p3)); - } - - function log(address p0, bool p1, uint p2, string memory p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(address,bool,uint,string)", p0, p1, p2, p3)); - } - - function log(address p0, bool p1, uint p2, bool p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(address,bool,uint,bool)", p0, p1, p2, p3)); - } - - function log(address p0, bool p1, uint p2, address p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(address,bool,uint,address)", p0, p1, p2, p3)); - } - - function log(address p0, bool p1, string memory p2, uint p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(address,bool,string,uint)", p0, p1, p2, p3)); - } - - function log(address p0, bool p1, string memory p2, string memory p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(address,bool,string,string)", p0, p1, p2, p3)); - } - - function log(address p0, bool p1, string memory p2, bool p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(address,bool,string,bool)", p0, p1, p2, p3)); - } - - function log(address p0, bool p1, string memory p2, address p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(address,bool,string,address)", p0, p1, p2, p3)); - } - - function log(address p0, bool p1, bool p2, uint p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(address,bool,bool,uint)", p0, p1, p2, p3)); - } - - function log(address p0, bool p1, bool p2, string memory p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(address,bool,bool,string)", p0, p1, p2, p3)); - } - - function log(address p0, bool p1, bool p2, bool p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(address,bool,bool,bool)", p0, p1, p2, p3)); - } - - function log(address p0, bool p1, bool p2, address p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(address,bool,bool,address)", p0, p1, p2, p3)); - } - - function log(address p0, bool p1, address p2, uint p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(address,bool,address,uint)", p0, p1, p2, p3)); - } - - function log(address p0, bool p1, address p2, string memory p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(address,bool,address,string)", p0, p1, p2, p3)); - } - - function log(address p0, bool p1, address p2, bool p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(address,bool,address,bool)", p0, p1, p2, p3)); - } - - function log(address p0, bool p1, address p2, address p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(address,bool,address,address)", p0, p1, p2, p3)); - } - - function log(address p0, address p1, uint p2, uint p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(address,address,uint,uint)", p0, p1, p2, p3)); - } - - function log(address p0, address p1, uint p2, string memory p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(address,address,uint,string)", p0, p1, p2, p3)); - } - - function log(address p0, address p1, uint p2, bool p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(address,address,uint,bool)", p0, p1, p2, p3)); - } - - function log(address p0, address p1, uint p2, address p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(address,address,uint,address)", p0, p1, p2, p3)); - } - - function log(address p0, address p1, string memory p2, uint p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(address,address,string,uint)", p0, p1, p2, p3)); - } - - function log(address p0, address p1, string memory p2, string memory p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(address,address,string,string)", p0, p1, p2, p3)); - } - - function log(address p0, address p1, string memory p2, bool p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(address,address,string,bool)", p0, p1, p2, p3)); - } - - function log(address p0, address p1, string memory p2, address p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(address,address,string,address)", p0, p1, p2, p3)); - } - - function log(address p0, address p1, bool p2, uint p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(address,address,bool,uint)", p0, p1, p2, p3)); - } - - function log(address p0, address p1, bool p2, string memory p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(address,address,bool,string)", p0, p1, p2, p3)); - } - - function log(address p0, address p1, bool p2, bool p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(address,address,bool,bool)", p0, p1, p2, p3)); - } - - function log(address p0, address p1, bool p2, address p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(address,address,bool,address)", p0, p1, p2, p3)); - } - - function log(address p0, address p1, address p2, uint p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(address,address,address,uint)", p0, p1, p2, p3)); - } - - function log(address p0, address p1, address p2, string memory p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(address,address,address,string)", p0, p1, p2, p3)); - } - - function log(address p0, address p1, address p2, bool p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(address,address,address,bool)", p0, p1, p2, p3)); - } - - function log(address p0, address p1, address p2, address p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(address,address,address,address)", p0, p1, p2, p3)); - } - -} \ No newline at end of file diff --git a/lib/forge-std/src/console2.sol b/lib/forge-std/src/console2.sol deleted file mode 100644 index 8cd6e219..00000000 --- a/lib/forge-std/src/console2.sol +++ /dev/null @@ -1,1538 +0,0 @@ -// SPDX-License-Identifier: MIT -pragma solidity >=0.4.22 <0.9.0; - -/// @dev The original console.sol uses `int` and `uint` for computing function selectors, but it should -/// use `int256` and `uint256`. This modified version fixes that. This version is recommended -/// over `console.sol` if you don't need compatibility with Hardhat as the logs will show up in -/// forge stack traces. If you do need compatibility with Hardhat, you must use `console.sol`. -/// Reference: https://github.com/NomicFoundation/hardhat/issues/2178 -library console2 { - address constant CONSOLE_ADDRESS = address(0x000000000000000000636F6e736F6c652e6c6f67); - - function _sendLogPayload(bytes memory payload) private view { - uint256 payloadLength = payload.length; - address consoleAddress = CONSOLE_ADDRESS; - /// @solidity memory-safe-assembly - assembly { - let payloadStart := add(payload, 32) - let r := staticcall(gas(), consoleAddress, payloadStart, payloadLength, 0, 0) - } - } - - function log() internal view { - _sendLogPayload(abi.encodeWithSignature("log()")); - } - - function logInt(int256 p0) internal view { - _sendLogPayload(abi.encodeWithSignature("log(int256)", p0)); - } - - function logUint(uint256 p0) internal view { - _sendLogPayload(abi.encodeWithSignature("log(uint256)", p0)); - } - - function logString(string memory p0) internal view { - _sendLogPayload(abi.encodeWithSignature("log(string)", p0)); - } - - function logBool(bool p0) internal view { - _sendLogPayload(abi.encodeWithSignature("log(bool)", p0)); - } - - function logAddress(address p0) internal view { - _sendLogPayload(abi.encodeWithSignature("log(address)", p0)); - } - - function logBytes(bytes memory p0) internal view { - _sendLogPayload(abi.encodeWithSignature("log(bytes)", p0)); - } - - function logBytes1(bytes1 p0) internal view { - _sendLogPayload(abi.encodeWithSignature("log(bytes1)", p0)); - } - - function logBytes2(bytes2 p0) internal view { - _sendLogPayload(abi.encodeWithSignature("log(bytes2)", p0)); - } - - function logBytes3(bytes3 p0) internal view { - _sendLogPayload(abi.encodeWithSignature("log(bytes3)", p0)); - } - - function logBytes4(bytes4 p0) internal view { - _sendLogPayload(abi.encodeWithSignature("log(bytes4)", p0)); - } - - function logBytes5(bytes5 p0) internal view { - _sendLogPayload(abi.encodeWithSignature("log(bytes5)", p0)); - } - - function logBytes6(bytes6 p0) internal view { - _sendLogPayload(abi.encodeWithSignature("log(bytes6)", p0)); - } - - function logBytes7(bytes7 p0) internal view { - _sendLogPayload(abi.encodeWithSignature("log(bytes7)", p0)); - } - - function logBytes8(bytes8 p0) internal view { - _sendLogPayload(abi.encodeWithSignature("log(bytes8)", p0)); - } - - function logBytes9(bytes9 p0) internal view { - _sendLogPayload(abi.encodeWithSignature("log(bytes9)", p0)); - } - - function logBytes10(bytes10 p0) internal view { - _sendLogPayload(abi.encodeWithSignature("log(bytes10)", p0)); - } - - function logBytes11(bytes11 p0) internal view { - _sendLogPayload(abi.encodeWithSignature("log(bytes11)", p0)); - } - - function logBytes12(bytes12 p0) internal view { - _sendLogPayload(abi.encodeWithSignature("log(bytes12)", p0)); - } - - function logBytes13(bytes13 p0) internal view { - _sendLogPayload(abi.encodeWithSignature("log(bytes13)", p0)); - } - - function logBytes14(bytes14 p0) internal view { - _sendLogPayload(abi.encodeWithSignature("log(bytes14)", p0)); - } - - function logBytes15(bytes15 p0) internal view { - _sendLogPayload(abi.encodeWithSignature("log(bytes15)", p0)); - } - - function logBytes16(bytes16 p0) internal view { - _sendLogPayload(abi.encodeWithSignature("log(bytes16)", p0)); - } - - function logBytes17(bytes17 p0) internal view { - _sendLogPayload(abi.encodeWithSignature("log(bytes17)", p0)); - } - - function logBytes18(bytes18 p0) internal view { - _sendLogPayload(abi.encodeWithSignature("log(bytes18)", p0)); - } - - function logBytes19(bytes19 p0) internal view { - _sendLogPayload(abi.encodeWithSignature("log(bytes19)", p0)); - } - - function logBytes20(bytes20 p0) internal view { - _sendLogPayload(abi.encodeWithSignature("log(bytes20)", p0)); - } - - function logBytes21(bytes21 p0) internal view { - _sendLogPayload(abi.encodeWithSignature("log(bytes21)", p0)); - } - - function logBytes22(bytes22 p0) internal view { - _sendLogPayload(abi.encodeWithSignature("log(bytes22)", p0)); - } - - function logBytes23(bytes23 p0) internal view { - _sendLogPayload(abi.encodeWithSignature("log(bytes23)", p0)); - } - - function logBytes24(bytes24 p0) internal view { - _sendLogPayload(abi.encodeWithSignature("log(bytes24)", p0)); - } - - function logBytes25(bytes25 p0) internal view { - _sendLogPayload(abi.encodeWithSignature("log(bytes25)", p0)); - } - - function logBytes26(bytes26 p0) internal view { - _sendLogPayload(abi.encodeWithSignature("log(bytes26)", p0)); - } - - function logBytes27(bytes27 p0) internal view { - _sendLogPayload(abi.encodeWithSignature("log(bytes27)", p0)); - } - - function logBytes28(bytes28 p0) internal view { - _sendLogPayload(abi.encodeWithSignature("log(bytes28)", p0)); - } - - function logBytes29(bytes29 p0) internal view { - _sendLogPayload(abi.encodeWithSignature("log(bytes29)", p0)); - } - - function logBytes30(bytes30 p0) internal view { - _sendLogPayload(abi.encodeWithSignature("log(bytes30)", p0)); - } - - function logBytes31(bytes31 p0) internal view { - _sendLogPayload(abi.encodeWithSignature("log(bytes31)", p0)); - } - - function logBytes32(bytes32 p0) internal view { - _sendLogPayload(abi.encodeWithSignature("log(bytes32)", p0)); - } - - function log(uint256 p0) internal view { - _sendLogPayload(abi.encodeWithSignature("log(uint256)", p0)); - } - - function log(string memory p0) internal view { - _sendLogPayload(abi.encodeWithSignature("log(string)", p0)); - } - - function log(bool p0) internal view { - _sendLogPayload(abi.encodeWithSignature("log(bool)", p0)); - } - - function log(address p0) internal view { - _sendLogPayload(abi.encodeWithSignature("log(address)", p0)); - } - - function log(uint256 p0, uint256 p1) internal view { - _sendLogPayload(abi.encodeWithSignature("log(uint256,uint256)", p0, p1)); - } - - function log(uint256 p0, string memory p1) internal view { - _sendLogPayload(abi.encodeWithSignature("log(uint256,string)", p0, p1)); - } - - function log(uint256 p0, bool p1) internal view { - _sendLogPayload(abi.encodeWithSignature("log(uint256,bool)", p0, p1)); - } - - function log(uint256 p0, address p1) internal view { - _sendLogPayload(abi.encodeWithSignature("log(uint256,address)", p0, p1)); - } - - function log(string memory p0, uint256 p1) internal view { - _sendLogPayload(abi.encodeWithSignature("log(string,uint256)", p0, p1)); - } - - function log(string memory p0, string memory p1) internal view { - _sendLogPayload(abi.encodeWithSignature("log(string,string)", p0, p1)); - } - - function log(string memory p0, bool p1) internal view { - _sendLogPayload(abi.encodeWithSignature("log(string,bool)", p0, p1)); - } - - function log(string memory p0, address p1) internal view { - _sendLogPayload(abi.encodeWithSignature("log(string,address)", p0, p1)); - } - - function log(bool p0, uint256 p1) internal view { - _sendLogPayload(abi.encodeWithSignature("log(bool,uint256)", p0, p1)); - } - - function log(bool p0, string memory p1) internal view { - _sendLogPayload(abi.encodeWithSignature("log(bool,string)", p0, p1)); - } - - function log(bool p0, bool p1) internal view { - _sendLogPayload(abi.encodeWithSignature("log(bool,bool)", p0, p1)); - } - - function log(bool p0, address p1) internal view { - _sendLogPayload(abi.encodeWithSignature("log(bool,address)", p0, p1)); - } - - function log(address p0, uint256 p1) internal view { - _sendLogPayload(abi.encodeWithSignature("log(address,uint256)", p0, p1)); - } - - function log(address p0, string memory p1) internal view { - _sendLogPayload(abi.encodeWithSignature("log(address,string)", p0, p1)); - } - - function log(address p0, bool p1) internal view { - _sendLogPayload(abi.encodeWithSignature("log(address,bool)", p0, p1)); - } - - function log(address p0, address p1) internal view { - _sendLogPayload(abi.encodeWithSignature("log(address,address)", p0, p1)); - } - - function log(uint256 p0, uint256 p1, uint256 p2) internal view { - _sendLogPayload(abi.encodeWithSignature("log(uint256,uint256,uint256)", p0, p1, p2)); - } - - function log(uint256 p0, uint256 p1, string memory p2) internal view { - _sendLogPayload(abi.encodeWithSignature("log(uint256,uint256,string)", p0, p1, p2)); - } - - function log(uint256 p0, uint256 p1, bool p2) internal view { - _sendLogPayload(abi.encodeWithSignature("log(uint256,uint256,bool)", p0, p1, p2)); - } - - function log(uint256 p0, uint256 p1, address p2) internal view { - _sendLogPayload(abi.encodeWithSignature("log(uint256,uint256,address)", p0, p1, p2)); - } - - function log(uint256 p0, string memory p1, uint256 p2) internal view { - _sendLogPayload(abi.encodeWithSignature("log(uint256,string,uint256)", p0, p1, p2)); - } - - function log(uint256 p0, string memory p1, string memory p2) internal view { - _sendLogPayload(abi.encodeWithSignature("log(uint256,string,string)", p0, p1, p2)); - } - - function log(uint256 p0, string memory p1, bool p2) internal view { - _sendLogPayload(abi.encodeWithSignature("log(uint256,string,bool)", p0, p1, p2)); - } - - function log(uint256 p0, string memory p1, address p2) internal view { - _sendLogPayload(abi.encodeWithSignature("log(uint256,string,address)", p0, p1, p2)); - } - - function log(uint256 p0, bool p1, uint256 p2) internal view { - _sendLogPayload(abi.encodeWithSignature("log(uint256,bool,uint256)", p0, p1, p2)); - } - - function log(uint256 p0, bool p1, string memory p2) internal view { - _sendLogPayload(abi.encodeWithSignature("log(uint256,bool,string)", p0, p1, p2)); - } - - function log(uint256 p0, bool p1, bool p2) internal view { - _sendLogPayload(abi.encodeWithSignature("log(uint256,bool,bool)", p0, p1, p2)); - } - - function log(uint256 p0, bool p1, address p2) internal view { - _sendLogPayload(abi.encodeWithSignature("log(uint256,bool,address)", p0, p1, p2)); - } - - function log(uint256 p0, address p1, uint256 p2) internal view { - _sendLogPayload(abi.encodeWithSignature("log(uint256,address,uint256)", p0, p1, p2)); - } - - function log(uint256 p0, address p1, string memory p2) internal view { - _sendLogPayload(abi.encodeWithSignature("log(uint256,address,string)", p0, p1, p2)); - } - - function log(uint256 p0, address p1, bool p2) internal view { - _sendLogPayload(abi.encodeWithSignature("log(uint256,address,bool)", p0, p1, p2)); - } - - function log(uint256 p0, address p1, address p2) internal view { - _sendLogPayload(abi.encodeWithSignature("log(uint256,address,address)", p0, p1, p2)); - } - - function log(string memory p0, uint256 p1, uint256 p2) internal view { - _sendLogPayload(abi.encodeWithSignature("log(string,uint256,uint256)", p0, p1, p2)); - } - - function log(string memory p0, uint256 p1, string memory p2) internal view { - _sendLogPayload(abi.encodeWithSignature("log(string,uint256,string)", p0, p1, p2)); - } - - function log(string memory p0, uint256 p1, bool p2) internal view { - _sendLogPayload(abi.encodeWithSignature("log(string,uint256,bool)", p0, p1, p2)); - } - - function log(string memory p0, uint256 p1, address p2) internal view { - _sendLogPayload(abi.encodeWithSignature("log(string,uint256,address)", p0, p1, p2)); - } - - function log(string memory p0, string memory p1, uint256 p2) internal view { - _sendLogPayload(abi.encodeWithSignature("log(string,string,uint256)", p0, p1, p2)); - } - - function log(string memory p0, string memory p1, string memory p2) internal view { - _sendLogPayload(abi.encodeWithSignature("log(string,string,string)", p0, p1, p2)); - } - - function log(string memory p0, string memory p1, bool p2) internal view { - _sendLogPayload(abi.encodeWithSignature("log(string,string,bool)", p0, p1, p2)); - } - - function log(string memory p0, string memory p1, address p2) internal view { - _sendLogPayload(abi.encodeWithSignature("log(string,string,address)", p0, p1, p2)); - } - - function log(string memory p0, bool p1, uint256 p2) internal view { - _sendLogPayload(abi.encodeWithSignature("log(string,bool,uint256)", p0, p1, p2)); - } - - function log(string memory p0, bool p1, string memory p2) internal view { - _sendLogPayload(abi.encodeWithSignature("log(string,bool,string)", p0, p1, p2)); - } - - function log(string memory p0, bool p1, bool p2) internal view { - _sendLogPayload(abi.encodeWithSignature("log(string,bool,bool)", p0, p1, p2)); - } - - function log(string memory p0, bool p1, address p2) internal view { - _sendLogPayload(abi.encodeWithSignature("log(string,bool,address)", p0, p1, p2)); - } - - function log(string memory p0, address p1, uint256 p2) internal view { - _sendLogPayload(abi.encodeWithSignature("log(string,address,uint256)", p0, p1, p2)); - } - - function log(string memory p0, address p1, string memory p2) internal view { - _sendLogPayload(abi.encodeWithSignature("log(string,address,string)", p0, p1, p2)); - } - - function log(string memory p0, address p1, bool p2) internal view { - _sendLogPayload(abi.encodeWithSignature("log(string,address,bool)", p0, p1, p2)); - } - - function log(string memory p0, address p1, address p2) internal view { - _sendLogPayload(abi.encodeWithSignature("log(string,address,address)", p0, p1, p2)); - } - - function log(bool p0, uint256 p1, uint256 p2) internal view { - _sendLogPayload(abi.encodeWithSignature("log(bool,uint256,uint256)", p0, p1, p2)); - } - - function log(bool p0, uint256 p1, string memory p2) internal view { - _sendLogPayload(abi.encodeWithSignature("log(bool,uint256,string)", p0, p1, p2)); - } - - function log(bool p0, uint256 p1, bool p2) internal view { - _sendLogPayload(abi.encodeWithSignature("log(bool,uint256,bool)", p0, p1, p2)); - } - - function log(bool p0, uint256 p1, address p2) internal view { - _sendLogPayload(abi.encodeWithSignature("log(bool,uint256,address)", p0, p1, p2)); - } - - function log(bool p0, string memory p1, uint256 p2) internal view { - _sendLogPayload(abi.encodeWithSignature("log(bool,string,uint256)", p0, p1, p2)); - } - - function log(bool p0, string memory p1, string memory p2) internal view { - _sendLogPayload(abi.encodeWithSignature("log(bool,string,string)", p0, p1, p2)); - } - - function log(bool p0, string memory p1, bool p2) internal view { - _sendLogPayload(abi.encodeWithSignature("log(bool,string,bool)", p0, p1, p2)); - } - - function log(bool p0, string memory p1, address p2) internal view { - _sendLogPayload(abi.encodeWithSignature("log(bool,string,address)", p0, p1, p2)); - } - - function log(bool p0, bool p1, uint256 p2) internal view { - _sendLogPayload(abi.encodeWithSignature("log(bool,bool,uint256)", p0, p1, p2)); - } - - function log(bool p0, bool p1, string memory p2) internal view { - _sendLogPayload(abi.encodeWithSignature("log(bool,bool,string)", p0, p1, p2)); - } - - function log(bool p0, bool p1, bool p2) internal view { - _sendLogPayload(abi.encodeWithSignature("log(bool,bool,bool)", p0, p1, p2)); - } - - function log(bool p0, bool p1, address p2) internal view { - _sendLogPayload(abi.encodeWithSignature("log(bool,bool,address)", p0, p1, p2)); - } - - function log(bool p0, address p1, uint256 p2) internal view { - _sendLogPayload(abi.encodeWithSignature("log(bool,address,uint256)", p0, p1, p2)); - } - - function log(bool p0, address p1, string memory p2) internal view { - _sendLogPayload(abi.encodeWithSignature("log(bool,address,string)", p0, p1, p2)); - } - - function log(bool p0, address p1, bool p2) internal view { - _sendLogPayload(abi.encodeWithSignature("log(bool,address,bool)", p0, p1, p2)); - } - - function log(bool p0, address p1, address p2) internal view { - _sendLogPayload(abi.encodeWithSignature("log(bool,address,address)", p0, p1, p2)); - } - - function log(address p0, uint256 p1, uint256 p2) internal view { - _sendLogPayload(abi.encodeWithSignature("log(address,uint256,uint256)", p0, p1, p2)); - } - - function log(address p0, uint256 p1, string memory p2) internal view { - _sendLogPayload(abi.encodeWithSignature("log(address,uint256,string)", p0, p1, p2)); - } - - function log(address p0, uint256 p1, bool p2) internal view { - _sendLogPayload(abi.encodeWithSignature("log(address,uint256,bool)", p0, p1, p2)); - } - - function log(address p0, uint256 p1, address p2) internal view { - _sendLogPayload(abi.encodeWithSignature("log(address,uint256,address)", p0, p1, p2)); - } - - function log(address p0, string memory p1, uint256 p2) internal view { - _sendLogPayload(abi.encodeWithSignature("log(address,string,uint256)", p0, p1, p2)); - } - - function log(address p0, string memory p1, string memory p2) internal view { - _sendLogPayload(abi.encodeWithSignature("log(address,string,string)", p0, p1, p2)); - } - - function log(address p0, string memory p1, bool p2) internal view { - _sendLogPayload(abi.encodeWithSignature("log(address,string,bool)", p0, p1, p2)); - } - - function log(address p0, string memory p1, address p2) internal view { - _sendLogPayload(abi.encodeWithSignature("log(address,string,address)", p0, p1, p2)); - } - - function log(address p0, bool p1, uint256 p2) internal view { - _sendLogPayload(abi.encodeWithSignature("log(address,bool,uint256)", p0, p1, p2)); - } - - function log(address p0, bool p1, string memory p2) internal view { - _sendLogPayload(abi.encodeWithSignature("log(address,bool,string)", p0, p1, p2)); - } - - function log(address p0, bool p1, bool p2) internal view { - _sendLogPayload(abi.encodeWithSignature("log(address,bool,bool)", p0, p1, p2)); - } - - function log(address p0, bool p1, address p2) internal view { - _sendLogPayload(abi.encodeWithSignature("log(address,bool,address)", p0, p1, p2)); - } - - function log(address p0, address p1, uint256 p2) internal view { - _sendLogPayload(abi.encodeWithSignature("log(address,address,uint256)", p0, p1, p2)); - } - - function log(address p0, address p1, string memory p2) internal view { - _sendLogPayload(abi.encodeWithSignature("log(address,address,string)", p0, p1, p2)); - } - - function log(address p0, address p1, bool p2) internal view { - _sendLogPayload(abi.encodeWithSignature("log(address,address,bool)", p0, p1, p2)); - } - - function log(address p0, address p1, address p2) internal view { - _sendLogPayload(abi.encodeWithSignature("log(address,address,address)", p0, p1, p2)); - } - - function log(uint256 p0, uint256 p1, uint256 p2, uint256 p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(uint256,uint256,uint256,uint256)", p0, p1, p2, p3)); - } - - function log(uint256 p0, uint256 p1, uint256 p2, string memory p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(uint256,uint256,uint256,string)", p0, p1, p2, p3)); - } - - function log(uint256 p0, uint256 p1, uint256 p2, bool p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(uint256,uint256,uint256,bool)", p0, p1, p2, p3)); - } - - function log(uint256 p0, uint256 p1, uint256 p2, address p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(uint256,uint256,uint256,address)", p0, p1, p2, p3)); - } - - function log(uint256 p0, uint256 p1, string memory p2, uint256 p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(uint256,uint256,string,uint256)", p0, p1, p2, p3)); - } - - function log(uint256 p0, uint256 p1, string memory p2, string memory p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(uint256,uint256,string,string)", p0, p1, p2, p3)); - } - - function log(uint256 p0, uint256 p1, string memory p2, bool p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(uint256,uint256,string,bool)", p0, p1, p2, p3)); - } - - function log(uint256 p0, uint256 p1, string memory p2, address p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(uint256,uint256,string,address)", p0, p1, p2, p3)); - } - - function log(uint256 p0, uint256 p1, bool p2, uint256 p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(uint256,uint256,bool,uint256)", p0, p1, p2, p3)); - } - - function log(uint256 p0, uint256 p1, bool p2, string memory p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(uint256,uint256,bool,string)", p0, p1, p2, p3)); - } - - function log(uint256 p0, uint256 p1, bool p2, bool p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(uint256,uint256,bool,bool)", p0, p1, p2, p3)); - } - - function log(uint256 p0, uint256 p1, bool p2, address p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(uint256,uint256,bool,address)", p0, p1, p2, p3)); - } - - function log(uint256 p0, uint256 p1, address p2, uint256 p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(uint256,uint256,address,uint256)", p0, p1, p2, p3)); - } - - function log(uint256 p0, uint256 p1, address p2, string memory p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(uint256,uint256,address,string)", p0, p1, p2, p3)); - } - - function log(uint256 p0, uint256 p1, address p2, bool p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(uint256,uint256,address,bool)", p0, p1, p2, p3)); - } - - function log(uint256 p0, uint256 p1, address p2, address p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(uint256,uint256,address,address)", p0, p1, p2, p3)); - } - - function log(uint256 p0, string memory p1, uint256 p2, uint256 p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(uint256,string,uint256,uint256)", p0, p1, p2, p3)); - } - - function log(uint256 p0, string memory p1, uint256 p2, string memory p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(uint256,string,uint256,string)", p0, p1, p2, p3)); - } - - function log(uint256 p0, string memory p1, uint256 p2, bool p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(uint256,string,uint256,bool)", p0, p1, p2, p3)); - } - - function log(uint256 p0, string memory p1, uint256 p2, address p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(uint256,string,uint256,address)", p0, p1, p2, p3)); - } - - function log(uint256 p0, string memory p1, string memory p2, uint256 p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(uint256,string,string,uint256)", p0, p1, p2, p3)); - } - - function log(uint256 p0, string memory p1, string memory p2, string memory p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(uint256,string,string,string)", p0, p1, p2, p3)); - } - - function log(uint256 p0, string memory p1, string memory p2, bool p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(uint256,string,string,bool)", p0, p1, p2, p3)); - } - - function log(uint256 p0, string memory p1, string memory p2, address p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(uint256,string,string,address)", p0, p1, p2, p3)); - } - - function log(uint256 p0, string memory p1, bool p2, uint256 p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(uint256,string,bool,uint256)", p0, p1, p2, p3)); - } - - function log(uint256 p0, string memory p1, bool p2, string memory p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(uint256,string,bool,string)", p0, p1, p2, p3)); - } - - function log(uint256 p0, string memory p1, bool p2, bool p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(uint256,string,bool,bool)", p0, p1, p2, p3)); - } - - function log(uint256 p0, string memory p1, bool p2, address p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(uint256,string,bool,address)", p0, p1, p2, p3)); - } - - function log(uint256 p0, string memory p1, address p2, uint256 p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(uint256,string,address,uint256)", p0, p1, p2, p3)); - } - - function log(uint256 p0, string memory p1, address p2, string memory p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(uint256,string,address,string)", p0, p1, p2, p3)); - } - - function log(uint256 p0, string memory p1, address p2, bool p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(uint256,string,address,bool)", p0, p1, p2, p3)); - } - - function log(uint256 p0, string memory p1, address p2, address p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(uint256,string,address,address)", p0, p1, p2, p3)); - } - - function log(uint256 p0, bool p1, uint256 p2, uint256 p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(uint256,bool,uint256,uint256)", p0, p1, p2, p3)); - } - - function log(uint256 p0, bool p1, uint256 p2, string memory p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(uint256,bool,uint256,string)", p0, p1, p2, p3)); - } - - function log(uint256 p0, bool p1, uint256 p2, bool p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(uint256,bool,uint256,bool)", p0, p1, p2, p3)); - } - - function log(uint256 p0, bool p1, uint256 p2, address p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(uint256,bool,uint256,address)", p0, p1, p2, p3)); - } - - function log(uint256 p0, bool p1, string memory p2, uint256 p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(uint256,bool,string,uint256)", p0, p1, p2, p3)); - } - - function log(uint256 p0, bool p1, string memory p2, string memory p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(uint256,bool,string,string)", p0, p1, p2, p3)); - } - - function log(uint256 p0, bool p1, string memory p2, bool p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(uint256,bool,string,bool)", p0, p1, p2, p3)); - } - - function log(uint256 p0, bool p1, string memory p2, address p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(uint256,bool,string,address)", p0, p1, p2, p3)); - } - - function log(uint256 p0, bool p1, bool p2, uint256 p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(uint256,bool,bool,uint256)", p0, p1, p2, p3)); - } - - function log(uint256 p0, bool p1, bool p2, string memory p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(uint256,bool,bool,string)", p0, p1, p2, p3)); - } - - function log(uint256 p0, bool p1, bool p2, bool p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(uint256,bool,bool,bool)", p0, p1, p2, p3)); - } - - function log(uint256 p0, bool p1, bool p2, address p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(uint256,bool,bool,address)", p0, p1, p2, p3)); - } - - function log(uint256 p0, bool p1, address p2, uint256 p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(uint256,bool,address,uint256)", p0, p1, p2, p3)); - } - - function log(uint256 p0, bool p1, address p2, string memory p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(uint256,bool,address,string)", p0, p1, p2, p3)); - } - - function log(uint256 p0, bool p1, address p2, bool p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(uint256,bool,address,bool)", p0, p1, p2, p3)); - } - - function log(uint256 p0, bool p1, address p2, address p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(uint256,bool,address,address)", p0, p1, p2, p3)); - } - - function log(uint256 p0, address p1, uint256 p2, uint256 p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(uint256,address,uint256,uint256)", p0, p1, p2, p3)); - } - - function log(uint256 p0, address p1, uint256 p2, string memory p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(uint256,address,uint256,string)", p0, p1, p2, p3)); - } - - function log(uint256 p0, address p1, uint256 p2, bool p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(uint256,address,uint256,bool)", p0, p1, p2, p3)); - } - - function log(uint256 p0, address p1, uint256 p2, address p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(uint256,address,uint256,address)", p0, p1, p2, p3)); - } - - function log(uint256 p0, address p1, string memory p2, uint256 p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(uint256,address,string,uint256)", p0, p1, p2, p3)); - } - - function log(uint256 p0, address p1, string memory p2, string memory p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(uint256,address,string,string)", p0, p1, p2, p3)); - } - - function log(uint256 p0, address p1, string memory p2, bool p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(uint256,address,string,bool)", p0, p1, p2, p3)); - } - - function log(uint256 p0, address p1, string memory p2, address p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(uint256,address,string,address)", p0, p1, p2, p3)); - } - - function log(uint256 p0, address p1, bool p2, uint256 p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(uint256,address,bool,uint256)", p0, p1, p2, p3)); - } - - function log(uint256 p0, address p1, bool p2, string memory p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(uint256,address,bool,string)", p0, p1, p2, p3)); - } - - function log(uint256 p0, address p1, bool p2, bool p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(uint256,address,bool,bool)", p0, p1, p2, p3)); - } - - function log(uint256 p0, address p1, bool p2, address p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(uint256,address,bool,address)", p0, p1, p2, p3)); - } - - function log(uint256 p0, address p1, address p2, uint256 p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(uint256,address,address,uint256)", p0, p1, p2, p3)); - } - - function log(uint256 p0, address p1, address p2, string memory p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(uint256,address,address,string)", p0, p1, p2, p3)); - } - - function log(uint256 p0, address p1, address p2, bool p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(uint256,address,address,bool)", p0, p1, p2, p3)); - } - - function log(uint256 p0, address p1, address p2, address p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(uint256,address,address,address)", p0, p1, p2, p3)); - } - - function log(string memory p0, uint256 p1, uint256 p2, uint256 p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(string,uint256,uint256,uint256)", p0, p1, p2, p3)); - } - - function log(string memory p0, uint256 p1, uint256 p2, string memory p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(string,uint256,uint256,string)", p0, p1, p2, p3)); - } - - function log(string memory p0, uint256 p1, uint256 p2, bool p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(string,uint256,uint256,bool)", p0, p1, p2, p3)); - } - - function log(string memory p0, uint256 p1, uint256 p2, address p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(string,uint256,uint256,address)", p0, p1, p2, p3)); - } - - function log(string memory p0, uint256 p1, string memory p2, uint256 p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(string,uint256,string,uint256)", p0, p1, p2, p3)); - } - - function log(string memory p0, uint256 p1, string memory p2, string memory p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(string,uint256,string,string)", p0, p1, p2, p3)); - } - - function log(string memory p0, uint256 p1, string memory p2, bool p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(string,uint256,string,bool)", p0, p1, p2, p3)); - } - - function log(string memory p0, uint256 p1, string memory p2, address p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(string,uint256,string,address)", p0, p1, p2, p3)); - } - - function log(string memory p0, uint256 p1, bool p2, uint256 p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(string,uint256,bool,uint256)", p0, p1, p2, p3)); - } - - function log(string memory p0, uint256 p1, bool p2, string memory p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(string,uint256,bool,string)", p0, p1, p2, p3)); - } - - function log(string memory p0, uint256 p1, bool p2, bool p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(string,uint256,bool,bool)", p0, p1, p2, p3)); - } - - function log(string memory p0, uint256 p1, bool p2, address p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(string,uint256,bool,address)", p0, p1, p2, p3)); - } - - function log(string memory p0, uint256 p1, address p2, uint256 p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(string,uint256,address,uint256)", p0, p1, p2, p3)); - } - - function log(string memory p0, uint256 p1, address p2, string memory p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(string,uint256,address,string)", p0, p1, p2, p3)); - } - - function log(string memory p0, uint256 p1, address p2, bool p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(string,uint256,address,bool)", p0, p1, p2, p3)); - } - - function log(string memory p0, uint256 p1, address p2, address p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(string,uint256,address,address)", p0, p1, p2, p3)); - } - - function log(string memory p0, string memory p1, uint256 p2, uint256 p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(string,string,uint256,uint256)", p0, p1, p2, p3)); - } - - function log(string memory p0, string memory p1, uint256 p2, string memory p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(string,string,uint256,string)", p0, p1, p2, p3)); - } - - function log(string memory p0, string memory p1, uint256 p2, bool p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(string,string,uint256,bool)", p0, p1, p2, p3)); - } - - function log(string memory p0, string memory p1, uint256 p2, address p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(string,string,uint256,address)", p0, p1, p2, p3)); - } - - function log(string memory p0, string memory p1, string memory p2, uint256 p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(string,string,string,uint256)", p0, p1, p2, p3)); - } - - function log(string memory p0, string memory p1, string memory p2, string memory p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(string,string,string,string)", p0, p1, p2, p3)); - } - - function log(string memory p0, string memory p1, string memory p2, bool p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(string,string,string,bool)", p0, p1, p2, p3)); - } - - function log(string memory p0, string memory p1, string memory p2, address p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(string,string,string,address)", p0, p1, p2, p3)); - } - - function log(string memory p0, string memory p1, bool p2, uint256 p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(string,string,bool,uint256)", p0, p1, p2, p3)); - } - - function log(string memory p0, string memory p1, bool p2, string memory p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(string,string,bool,string)", p0, p1, p2, p3)); - } - - function log(string memory p0, string memory p1, bool p2, bool p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(string,string,bool,bool)", p0, p1, p2, p3)); - } - - function log(string memory p0, string memory p1, bool p2, address p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(string,string,bool,address)", p0, p1, p2, p3)); - } - - function log(string memory p0, string memory p1, address p2, uint256 p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(string,string,address,uint256)", p0, p1, p2, p3)); - } - - function log(string memory p0, string memory p1, address p2, string memory p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(string,string,address,string)", p0, p1, p2, p3)); - } - - function log(string memory p0, string memory p1, address p2, bool p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(string,string,address,bool)", p0, p1, p2, p3)); - } - - function log(string memory p0, string memory p1, address p2, address p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(string,string,address,address)", p0, p1, p2, p3)); - } - - function log(string memory p0, bool p1, uint256 p2, uint256 p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(string,bool,uint256,uint256)", p0, p1, p2, p3)); - } - - function log(string memory p0, bool p1, uint256 p2, string memory p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(string,bool,uint256,string)", p0, p1, p2, p3)); - } - - function log(string memory p0, bool p1, uint256 p2, bool p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(string,bool,uint256,bool)", p0, p1, p2, p3)); - } - - function log(string memory p0, bool p1, uint256 p2, address p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(string,bool,uint256,address)", p0, p1, p2, p3)); - } - - function log(string memory p0, bool p1, string memory p2, uint256 p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(string,bool,string,uint256)", p0, p1, p2, p3)); - } - - function log(string memory p0, bool p1, string memory p2, string memory p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(string,bool,string,string)", p0, p1, p2, p3)); - } - - function log(string memory p0, bool p1, string memory p2, bool p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(string,bool,string,bool)", p0, p1, p2, p3)); - } - - function log(string memory p0, bool p1, string memory p2, address p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(string,bool,string,address)", p0, p1, p2, p3)); - } - - function log(string memory p0, bool p1, bool p2, uint256 p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(string,bool,bool,uint256)", p0, p1, p2, p3)); - } - - function log(string memory p0, bool p1, bool p2, string memory p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(string,bool,bool,string)", p0, p1, p2, p3)); - } - - function log(string memory p0, bool p1, bool p2, bool p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(string,bool,bool,bool)", p0, p1, p2, p3)); - } - - function log(string memory p0, bool p1, bool p2, address p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(string,bool,bool,address)", p0, p1, p2, p3)); - } - - function log(string memory p0, bool p1, address p2, uint256 p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(string,bool,address,uint256)", p0, p1, p2, p3)); - } - - function log(string memory p0, bool p1, address p2, string memory p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(string,bool,address,string)", p0, p1, p2, p3)); - } - - function log(string memory p0, bool p1, address p2, bool p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(string,bool,address,bool)", p0, p1, p2, p3)); - } - - function log(string memory p0, bool p1, address p2, address p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(string,bool,address,address)", p0, p1, p2, p3)); - } - - function log(string memory p0, address p1, uint256 p2, uint256 p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(string,address,uint256,uint256)", p0, p1, p2, p3)); - } - - function log(string memory p0, address p1, uint256 p2, string memory p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(string,address,uint256,string)", p0, p1, p2, p3)); - } - - function log(string memory p0, address p1, uint256 p2, bool p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(string,address,uint256,bool)", p0, p1, p2, p3)); - } - - function log(string memory p0, address p1, uint256 p2, address p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(string,address,uint256,address)", p0, p1, p2, p3)); - } - - function log(string memory p0, address p1, string memory p2, uint256 p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(string,address,string,uint256)", p0, p1, p2, p3)); - } - - function log(string memory p0, address p1, string memory p2, string memory p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(string,address,string,string)", p0, p1, p2, p3)); - } - - function log(string memory p0, address p1, string memory p2, bool p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(string,address,string,bool)", p0, p1, p2, p3)); - } - - function log(string memory p0, address p1, string memory p2, address p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(string,address,string,address)", p0, p1, p2, p3)); - } - - function log(string memory p0, address p1, bool p2, uint256 p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(string,address,bool,uint256)", p0, p1, p2, p3)); - } - - function log(string memory p0, address p1, bool p2, string memory p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(string,address,bool,string)", p0, p1, p2, p3)); - } - - function log(string memory p0, address p1, bool p2, bool p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(string,address,bool,bool)", p0, p1, p2, p3)); - } - - function log(string memory p0, address p1, bool p2, address p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(string,address,bool,address)", p0, p1, p2, p3)); - } - - function log(string memory p0, address p1, address p2, uint256 p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(string,address,address,uint256)", p0, p1, p2, p3)); - } - - function log(string memory p0, address p1, address p2, string memory p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(string,address,address,string)", p0, p1, p2, p3)); - } - - function log(string memory p0, address p1, address p2, bool p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(string,address,address,bool)", p0, p1, p2, p3)); - } - - function log(string memory p0, address p1, address p2, address p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(string,address,address,address)", p0, p1, p2, p3)); - } - - function log(bool p0, uint256 p1, uint256 p2, uint256 p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(bool,uint256,uint256,uint256)", p0, p1, p2, p3)); - } - - function log(bool p0, uint256 p1, uint256 p2, string memory p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(bool,uint256,uint256,string)", p0, p1, p2, p3)); - } - - function log(bool p0, uint256 p1, uint256 p2, bool p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(bool,uint256,uint256,bool)", p0, p1, p2, p3)); - } - - function log(bool p0, uint256 p1, uint256 p2, address p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(bool,uint256,uint256,address)", p0, p1, p2, p3)); - } - - function log(bool p0, uint256 p1, string memory p2, uint256 p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(bool,uint256,string,uint256)", p0, p1, p2, p3)); - } - - function log(bool p0, uint256 p1, string memory p2, string memory p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(bool,uint256,string,string)", p0, p1, p2, p3)); - } - - function log(bool p0, uint256 p1, string memory p2, bool p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(bool,uint256,string,bool)", p0, p1, p2, p3)); - } - - function log(bool p0, uint256 p1, string memory p2, address p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(bool,uint256,string,address)", p0, p1, p2, p3)); - } - - function log(bool p0, uint256 p1, bool p2, uint256 p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(bool,uint256,bool,uint256)", p0, p1, p2, p3)); - } - - function log(bool p0, uint256 p1, bool p2, string memory p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(bool,uint256,bool,string)", p0, p1, p2, p3)); - } - - function log(bool p0, uint256 p1, bool p2, bool p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(bool,uint256,bool,bool)", p0, p1, p2, p3)); - } - - function log(bool p0, uint256 p1, bool p2, address p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(bool,uint256,bool,address)", p0, p1, p2, p3)); - } - - function log(bool p0, uint256 p1, address p2, uint256 p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(bool,uint256,address,uint256)", p0, p1, p2, p3)); - } - - function log(bool p0, uint256 p1, address p2, string memory p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(bool,uint256,address,string)", p0, p1, p2, p3)); - } - - function log(bool p0, uint256 p1, address p2, bool p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(bool,uint256,address,bool)", p0, p1, p2, p3)); - } - - function log(bool p0, uint256 p1, address p2, address p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(bool,uint256,address,address)", p0, p1, p2, p3)); - } - - function log(bool p0, string memory p1, uint256 p2, uint256 p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(bool,string,uint256,uint256)", p0, p1, p2, p3)); - } - - function log(bool p0, string memory p1, uint256 p2, string memory p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(bool,string,uint256,string)", p0, p1, p2, p3)); - } - - function log(bool p0, string memory p1, uint256 p2, bool p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(bool,string,uint256,bool)", p0, p1, p2, p3)); - } - - function log(bool p0, string memory p1, uint256 p2, address p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(bool,string,uint256,address)", p0, p1, p2, p3)); - } - - function log(bool p0, string memory p1, string memory p2, uint256 p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(bool,string,string,uint256)", p0, p1, p2, p3)); - } - - function log(bool p0, string memory p1, string memory p2, string memory p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(bool,string,string,string)", p0, p1, p2, p3)); - } - - function log(bool p0, string memory p1, string memory p2, bool p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(bool,string,string,bool)", p0, p1, p2, p3)); - } - - function log(bool p0, string memory p1, string memory p2, address p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(bool,string,string,address)", p0, p1, p2, p3)); - } - - function log(bool p0, string memory p1, bool p2, uint256 p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(bool,string,bool,uint256)", p0, p1, p2, p3)); - } - - function log(bool p0, string memory p1, bool p2, string memory p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(bool,string,bool,string)", p0, p1, p2, p3)); - } - - function log(bool p0, string memory p1, bool p2, bool p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(bool,string,bool,bool)", p0, p1, p2, p3)); - } - - function log(bool p0, string memory p1, bool p2, address p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(bool,string,bool,address)", p0, p1, p2, p3)); - } - - function log(bool p0, string memory p1, address p2, uint256 p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(bool,string,address,uint256)", p0, p1, p2, p3)); - } - - function log(bool p0, string memory p1, address p2, string memory p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(bool,string,address,string)", p0, p1, p2, p3)); - } - - function log(bool p0, string memory p1, address p2, bool p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(bool,string,address,bool)", p0, p1, p2, p3)); - } - - function log(bool p0, string memory p1, address p2, address p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(bool,string,address,address)", p0, p1, p2, p3)); - } - - function log(bool p0, bool p1, uint256 p2, uint256 p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(bool,bool,uint256,uint256)", p0, p1, p2, p3)); - } - - function log(bool p0, bool p1, uint256 p2, string memory p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(bool,bool,uint256,string)", p0, p1, p2, p3)); - } - - function log(bool p0, bool p1, uint256 p2, bool p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(bool,bool,uint256,bool)", p0, p1, p2, p3)); - } - - function log(bool p0, bool p1, uint256 p2, address p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(bool,bool,uint256,address)", p0, p1, p2, p3)); - } - - function log(bool p0, bool p1, string memory p2, uint256 p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(bool,bool,string,uint256)", p0, p1, p2, p3)); - } - - function log(bool p0, bool p1, string memory p2, string memory p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(bool,bool,string,string)", p0, p1, p2, p3)); - } - - function log(bool p0, bool p1, string memory p2, bool p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(bool,bool,string,bool)", p0, p1, p2, p3)); - } - - function log(bool p0, bool p1, string memory p2, address p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(bool,bool,string,address)", p0, p1, p2, p3)); - } - - function log(bool p0, bool p1, bool p2, uint256 p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(bool,bool,bool,uint256)", p0, p1, p2, p3)); - } - - function log(bool p0, bool p1, bool p2, string memory p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(bool,bool,bool,string)", p0, p1, p2, p3)); - } - - function log(bool p0, bool p1, bool p2, bool p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(bool,bool,bool,bool)", p0, p1, p2, p3)); - } - - function log(bool p0, bool p1, bool p2, address p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(bool,bool,bool,address)", p0, p1, p2, p3)); - } - - function log(bool p0, bool p1, address p2, uint256 p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(bool,bool,address,uint256)", p0, p1, p2, p3)); - } - - function log(bool p0, bool p1, address p2, string memory p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(bool,bool,address,string)", p0, p1, p2, p3)); - } - - function log(bool p0, bool p1, address p2, bool p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(bool,bool,address,bool)", p0, p1, p2, p3)); - } - - function log(bool p0, bool p1, address p2, address p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(bool,bool,address,address)", p0, p1, p2, p3)); - } - - function log(bool p0, address p1, uint256 p2, uint256 p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(bool,address,uint256,uint256)", p0, p1, p2, p3)); - } - - function log(bool p0, address p1, uint256 p2, string memory p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(bool,address,uint256,string)", p0, p1, p2, p3)); - } - - function log(bool p0, address p1, uint256 p2, bool p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(bool,address,uint256,bool)", p0, p1, p2, p3)); - } - - function log(bool p0, address p1, uint256 p2, address p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(bool,address,uint256,address)", p0, p1, p2, p3)); - } - - function log(bool p0, address p1, string memory p2, uint256 p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(bool,address,string,uint256)", p0, p1, p2, p3)); - } - - function log(bool p0, address p1, string memory p2, string memory p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(bool,address,string,string)", p0, p1, p2, p3)); - } - - function log(bool p0, address p1, string memory p2, bool p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(bool,address,string,bool)", p0, p1, p2, p3)); - } - - function log(bool p0, address p1, string memory p2, address p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(bool,address,string,address)", p0, p1, p2, p3)); - } - - function log(bool p0, address p1, bool p2, uint256 p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(bool,address,bool,uint256)", p0, p1, p2, p3)); - } - - function log(bool p0, address p1, bool p2, string memory p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(bool,address,bool,string)", p0, p1, p2, p3)); - } - - function log(bool p0, address p1, bool p2, bool p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(bool,address,bool,bool)", p0, p1, p2, p3)); - } - - function log(bool p0, address p1, bool p2, address p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(bool,address,bool,address)", p0, p1, p2, p3)); - } - - function log(bool p0, address p1, address p2, uint256 p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(bool,address,address,uint256)", p0, p1, p2, p3)); - } - - function log(bool p0, address p1, address p2, string memory p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(bool,address,address,string)", p0, p1, p2, p3)); - } - - function log(bool p0, address p1, address p2, bool p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(bool,address,address,bool)", p0, p1, p2, p3)); - } - - function log(bool p0, address p1, address p2, address p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(bool,address,address,address)", p0, p1, p2, p3)); - } - - function log(address p0, uint256 p1, uint256 p2, uint256 p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(address,uint256,uint256,uint256)", p0, p1, p2, p3)); - } - - function log(address p0, uint256 p1, uint256 p2, string memory p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(address,uint256,uint256,string)", p0, p1, p2, p3)); - } - - function log(address p0, uint256 p1, uint256 p2, bool p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(address,uint256,uint256,bool)", p0, p1, p2, p3)); - } - - function log(address p0, uint256 p1, uint256 p2, address p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(address,uint256,uint256,address)", p0, p1, p2, p3)); - } - - function log(address p0, uint256 p1, string memory p2, uint256 p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(address,uint256,string,uint256)", p0, p1, p2, p3)); - } - - function log(address p0, uint256 p1, string memory p2, string memory p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(address,uint256,string,string)", p0, p1, p2, p3)); - } - - function log(address p0, uint256 p1, string memory p2, bool p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(address,uint256,string,bool)", p0, p1, p2, p3)); - } - - function log(address p0, uint256 p1, string memory p2, address p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(address,uint256,string,address)", p0, p1, p2, p3)); - } - - function log(address p0, uint256 p1, bool p2, uint256 p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(address,uint256,bool,uint256)", p0, p1, p2, p3)); - } - - function log(address p0, uint256 p1, bool p2, string memory p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(address,uint256,bool,string)", p0, p1, p2, p3)); - } - - function log(address p0, uint256 p1, bool p2, bool p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(address,uint256,bool,bool)", p0, p1, p2, p3)); - } - - function log(address p0, uint256 p1, bool p2, address p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(address,uint256,bool,address)", p0, p1, p2, p3)); - } - - function log(address p0, uint256 p1, address p2, uint256 p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(address,uint256,address,uint256)", p0, p1, p2, p3)); - } - - function log(address p0, uint256 p1, address p2, string memory p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(address,uint256,address,string)", p0, p1, p2, p3)); - } - - function log(address p0, uint256 p1, address p2, bool p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(address,uint256,address,bool)", p0, p1, p2, p3)); - } - - function log(address p0, uint256 p1, address p2, address p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(address,uint256,address,address)", p0, p1, p2, p3)); - } - - function log(address p0, string memory p1, uint256 p2, uint256 p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(address,string,uint256,uint256)", p0, p1, p2, p3)); - } - - function log(address p0, string memory p1, uint256 p2, string memory p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(address,string,uint256,string)", p0, p1, p2, p3)); - } - - function log(address p0, string memory p1, uint256 p2, bool p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(address,string,uint256,bool)", p0, p1, p2, p3)); - } - - function log(address p0, string memory p1, uint256 p2, address p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(address,string,uint256,address)", p0, p1, p2, p3)); - } - - function log(address p0, string memory p1, string memory p2, uint256 p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(address,string,string,uint256)", p0, p1, p2, p3)); - } - - function log(address p0, string memory p1, string memory p2, string memory p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(address,string,string,string)", p0, p1, p2, p3)); - } - - function log(address p0, string memory p1, string memory p2, bool p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(address,string,string,bool)", p0, p1, p2, p3)); - } - - function log(address p0, string memory p1, string memory p2, address p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(address,string,string,address)", p0, p1, p2, p3)); - } - - function log(address p0, string memory p1, bool p2, uint256 p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(address,string,bool,uint256)", p0, p1, p2, p3)); - } - - function log(address p0, string memory p1, bool p2, string memory p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(address,string,bool,string)", p0, p1, p2, p3)); - } - - function log(address p0, string memory p1, bool p2, bool p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(address,string,bool,bool)", p0, p1, p2, p3)); - } - - function log(address p0, string memory p1, bool p2, address p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(address,string,bool,address)", p0, p1, p2, p3)); - } - - function log(address p0, string memory p1, address p2, uint256 p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(address,string,address,uint256)", p0, p1, p2, p3)); - } - - function log(address p0, string memory p1, address p2, string memory p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(address,string,address,string)", p0, p1, p2, p3)); - } - - function log(address p0, string memory p1, address p2, bool p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(address,string,address,bool)", p0, p1, p2, p3)); - } - - function log(address p0, string memory p1, address p2, address p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(address,string,address,address)", p0, p1, p2, p3)); - } - - function log(address p0, bool p1, uint256 p2, uint256 p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(address,bool,uint256,uint256)", p0, p1, p2, p3)); - } - - function log(address p0, bool p1, uint256 p2, string memory p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(address,bool,uint256,string)", p0, p1, p2, p3)); - } - - function log(address p0, bool p1, uint256 p2, bool p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(address,bool,uint256,bool)", p0, p1, p2, p3)); - } - - function log(address p0, bool p1, uint256 p2, address p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(address,bool,uint256,address)", p0, p1, p2, p3)); - } - - function log(address p0, bool p1, string memory p2, uint256 p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(address,bool,string,uint256)", p0, p1, p2, p3)); - } - - function log(address p0, bool p1, string memory p2, string memory p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(address,bool,string,string)", p0, p1, p2, p3)); - } - - function log(address p0, bool p1, string memory p2, bool p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(address,bool,string,bool)", p0, p1, p2, p3)); - } - - function log(address p0, bool p1, string memory p2, address p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(address,bool,string,address)", p0, p1, p2, p3)); - } - - function log(address p0, bool p1, bool p2, uint256 p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(address,bool,bool,uint256)", p0, p1, p2, p3)); - } - - function log(address p0, bool p1, bool p2, string memory p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(address,bool,bool,string)", p0, p1, p2, p3)); - } - - function log(address p0, bool p1, bool p2, bool p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(address,bool,bool,bool)", p0, p1, p2, p3)); - } - - function log(address p0, bool p1, bool p2, address p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(address,bool,bool,address)", p0, p1, p2, p3)); - } - - function log(address p0, bool p1, address p2, uint256 p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(address,bool,address,uint256)", p0, p1, p2, p3)); - } - - function log(address p0, bool p1, address p2, string memory p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(address,bool,address,string)", p0, p1, p2, p3)); - } - - function log(address p0, bool p1, address p2, bool p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(address,bool,address,bool)", p0, p1, p2, p3)); - } - - function log(address p0, bool p1, address p2, address p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(address,bool,address,address)", p0, p1, p2, p3)); - } - - function log(address p0, address p1, uint256 p2, uint256 p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(address,address,uint256,uint256)", p0, p1, p2, p3)); - } - - function log(address p0, address p1, uint256 p2, string memory p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(address,address,uint256,string)", p0, p1, p2, p3)); - } - - function log(address p0, address p1, uint256 p2, bool p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(address,address,uint256,bool)", p0, p1, p2, p3)); - } - - function log(address p0, address p1, uint256 p2, address p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(address,address,uint256,address)", p0, p1, p2, p3)); - } - - function log(address p0, address p1, string memory p2, uint256 p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(address,address,string,uint256)", p0, p1, p2, p3)); - } - - function log(address p0, address p1, string memory p2, string memory p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(address,address,string,string)", p0, p1, p2, p3)); - } - - function log(address p0, address p1, string memory p2, bool p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(address,address,string,bool)", p0, p1, p2, p3)); - } - - function log(address p0, address p1, string memory p2, address p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(address,address,string,address)", p0, p1, p2, p3)); - } - - function log(address p0, address p1, bool p2, uint256 p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(address,address,bool,uint256)", p0, p1, p2, p3)); - } - - function log(address p0, address p1, bool p2, string memory p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(address,address,bool,string)", p0, p1, p2, p3)); - } - - function log(address p0, address p1, bool p2, bool p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(address,address,bool,bool)", p0, p1, p2, p3)); - } - - function log(address p0, address p1, bool p2, address p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(address,address,bool,address)", p0, p1, p2, p3)); - } - - function log(address p0, address p1, address p2, uint256 p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(address,address,address,uint256)", p0, p1, p2, p3)); - } - - function log(address p0, address p1, address p2, string memory p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(address,address,address,string)", p0, p1, p2, p3)); - } - - function log(address p0, address p1, address p2, bool p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(address,address,address,bool)", p0, p1, p2, p3)); - } - - function log(address p0, address p1, address p2, address p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(address,address,address,address)", p0, p1, p2, p3)); - } - -} \ No newline at end of file diff --git a/lib/forge-std/src/interfaces/IERC1155.sol b/lib/forge-std/src/interfaces/IERC1155.sol deleted file mode 100644 index f7dd2b41..00000000 --- a/lib/forge-std/src/interfaces/IERC1155.sol +++ /dev/null @@ -1,105 +0,0 @@ -// SPDX-License-Identifier: MIT -pragma solidity >=0.6.2; - -import "./IERC165.sol"; - -/// @title ERC-1155 Multi Token Standard -/// @dev See https://eips.ethereum.org/EIPS/eip-1155 -/// Note: The ERC-165 identifier for this interface is 0xd9b67a26. -interface IERC1155 is IERC165 { - /// @dev - /// - Either `TransferSingle` or `TransferBatch` MUST emit when tokens are transferred, including zero value transfers as well as minting or burning (see "Safe Transfer Rules" section of the standard). - /// - The `_operator` argument MUST be the address of an account/contract that is approved to make the transfer (SHOULD be msg.sender). - /// - The `_from` argument MUST be the address of the holder whose balance is decreased. - /// - The `_to` argument MUST be the address of the recipient whose balance is increased. - /// - The `_id` argument MUST be the token type being transferred. - /// - The `_value` argument MUST be the number of tokens the holder balance is decreased by and match what the recipient balance is increased by. - /// - When minting/creating tokens, the `_from` argument MUST be set to `0x0` (i.e. zero address). - /// - When burning/destroying tokens, the `_to` argument MUST be set to `0x0` (i.e. zero address). - event TransferSingle( - address indexed _operator, address indexed _from, address indexed _to, uint256 _id, uint256 _value - ); - - /// @dev - /// - Either `TransferSingle` or `TransferBatch` MUST emit when tokens are transferred, including zero value transfers as well as minting or burning (see "Safe Transfer Rules" section of the standard). - /// - The `_operator` argument MUST be the address of an account/contract that is approved to make the transfer (SHOULD be msg.sender). - /// - The `_from` argument MUST be the address of the holder whose balance is decreased. - /// - The `_to` argument MUST be the address of the recipient whose balance is increased. - /// - The `_ids` argument MUST be the list of tokens being transferred. - /// - The `_values` argument MUST be the list of number of tokens (matching the list and order of tokens specified in _ids) the holder balance is decreased by and match what the recipient balance is increased by. - /// - When minting/creating tokens, the `_from` argument MUST be set to `0x0` (i.e. zero address). - /// - When burning/destroying tokens, the `_to` argument MUST be set to `0x0` (i.e. zero address). - event TransferBatch( - address indexed _operator, address indexed _from, address indexed _to, uint256[] _ids, uint256[] _values - ); - - /// @dev MUST emit when approval for a second party/operator address to manage all tokens for an owner address is enabled or disabled (absence of an event assumes disabled). - event ApprovalForAll(address indexed _owner, address indexed _operator, bool _approved); - - /// @dev MUST emit when the URI is updated for a token ID. URIs are defined in RFC 3986. - /// The URI MUST point to a JSON file that conforms to the "ERC-1155 Metadata URI JSON Schema". - event URI(string _value, uint256 indexed _id); - - /// @notice Transfers `_value` amount of an `_id` from the `_from` address to the `_to` address specified (with safety call). - /// @dev Caller must be approved to manage the tokens being transferred out of the `_from` account (see "Approval" section of the standard). - /// - MUST revert if `_to` is the zero address. - /// - MUST revert if balance of holder for token `_id` is lower than the `_value` sent. - /// - MUST revert on any other error. - /// - MUST emit the `TransferSingle` event to reflect the balance change (see "Safe Transfer Rules" section of the standard). - /// - After the above conditions are met, this function MUST check if `_to` is a smart contract (e.g. code size > 0). If so, it MUST call `onERC1155Received` on `_to` and act appropriately (see "Safe Transfer Rules" section of the standard). - /// @param _from Source address - /// @param _to Target address - /// @param _id ID of the token type - /// @param _value Transfer amount - /// @param _data Additional data with no specified format, MUST be sent unaltered in call to `onERC1155Received` on `_to` - function safeTransferFrom(address _from, address _to, uint256 _id, uint256 _value, bytes calldata _data) external; - - /// @notice Transfers `_values` amount(s) of `_ids` from the `_from` address to the `_to` address specified (with safety call). - /// @dev Caller must be approved to manage the tokens being transferred out of the `_from` account (see "Approval" section of the standard). - /// - MUST revert if `_to` is the zero address. - /// - MUST revert if length of `_ids` is not the same as length of `_values`. - /// - MUST revert if any of the balance(s) of the holder(s) for token(s) in `_ids` is lower than the respective amount(s) in `_values` sent to the recipient. - /// - MUST revert on any other error. - /// - MUST emit `TransferSingle` or `TransferBatch` event(s) such that all the balance changes are reflected (see "Safe Transfer Rules" section of the standard). - /// - Balance changes and events MUST follow the ordering of the arrays (_ids[0]/_values[0] before _ids[1]/_values[1], etc). - /// - After the above conditions for the transfer(s) in the batch are met, this function MUST check if `_to` is a smart contract (e.g. code size > 0). If so, it MUST call the relevant `ERC1155TokenReceiver` hook(s) on `_to` and act appropriately (see "Safe Transfer Rules" section of the standard). - /// @param _from Source address - /// @param _to Target address - /// @param _ids IDs of each token type (order and length must match _values array) - /// @param _values Transfer amounts per token type (order and length must match _ids array) - /// @param _data Additional data with no specified format, MUST be sent unaltered in call to the `ERC1155TokenReceiver` hook(s) on `_to` - function safeBatchTransferFrom( - address _from, - address _to, - uint256[] calldata _ids, - uint256[] calldata _values, - bytes calldata _data - ) external; - - /// @notice Get the balance of an account's tokens. - /// @param _owner The address of the token holder - /// @param _id ID of the token - /// @return The _owner's balance of the token type requested - function balanceOf(address _owner, uint256 _id) external view returns (uint256); - - /// @notice Get the balance of multiple account/token pairs - /// @param _owners The addresses of the token holders - /// @param _ids ID of the tokens - /// @return The _owner's balance of the token types requested (i.e. balance for each (owner, id) pair) - function balanceOfBatch(address[] calldata _owners, uint256[] calldata _ids) - external - view - returns (uint256[] memory); - - /// @notice Enable or disable approval for a third party ("operator") to manage all of the caller's tokens. - /// @dev MUST emit the ApprovalForAll event on success. - /// @param _operator Address to add to the set of authorized operators - /// @param _approved True if the operator is approved, false to revoke approval - function setApprovalForAll(address _operator, bool _approved) external; - - /// @notice Queries the approval status of an operator for a given owner. - /// @param _owner The owner of the tokens - /// @param _operator Address of authorized operator - /// @return True if the operator is approved, false if not - function isApprovedForAll(address _owner, address _operator) external view returns (bool); -} diff --git a/lib/forge-std/src/interfaces/IERC165.sol b/lib/forge-std/src/interfaces/IERC165.sol deleted file mode 100644 index 9af4bf80..00000000 --- a/lib/forge-std/src/interfaces/IERC165.sol +++ /dev/null @@ -1,12 +0,0 @@ -// SPDX-License-Identifier: MIT -pragma solidity >=0.6.2; - -interface IERC165 { - /// @notice Query if a contract implements an interface - /// @param interfaceID The interface identifier, as specified in ERC-165 - /// @dev Interface identification is specified in ERC-165. This function - /// uses less than 30,000 gas. - /// @return `true` if the contract implements `interfaceID` and - /// `interfaceID` is not 0xffffffff, `false` otherwise - function supportsInterface(bytes4 interfaceID) external view returns (bool); -} diff --git a/lib/forge-std/src/interfaces/IERC20.sol b/lib/forge-std/src/interfaces/IERC20.sol deleted file mode 100644 index ba40806c..00000000 --- a/lib/forge-std/src/interfaces/IERC20.sol +++ /dev/null @@ -1,43 +0,0 @@ -// SPDX-License-Identifier: MIT -pragma solidity >=0.6.2; - -/// @dev Interface of the ERC20 standard as defined in the EIP. -/// @dev This includes the optional name, symbol, and decimals metadata. -interface IERC20 { - /// @dev Emitted when `value` tokens are moved from one account (`from`) to another (`to`). - event Transfer(address indexed from, address indexed to, uint256 value); - - /// @dev Emitted when the allowance of a `spender` for an `owner` is set, where `value` - /// is the new allowance. - event Approval(address indexed owner, address indexed spender, uint256 value); - - /// @notice Returns the amount of tokens in existence. - function totalSupply() external view returns (uint256); - - /// @notice Returns the amount of tokens owned by `account`. - function balanceOf(address account) external view returns (uint256); - - /// @notice Moves `amount` tokens from the caller's account to `to`. - function transfer(address to, uint256 amount) external returns (bool); - - /// @notice Returns the remaining number of tokens that `spender` is allowed - /// to spend on behalf of `owner` - function allowance(address owner, address spender) external view returns (uint256); - - /// @notice Sets `amount` as the allowance of `spender` over the caller's tokens. - /// @dev Be aware of front-running risks: https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 - function approve(address spender, uint256 amount) external returns (bool); - - /// @notice Moves `amount` tokens from `from` to `to` using the allowance mechanism. - /// `amount` is then deducted from the caller's allowance. - function transferFrom(address from, address to, uint256 amount) external returns (bool); - - /// @notice Returns the name of the token. - function name() external view returns (string memory); - - /// @notice Returns the symbol of the token. - function symbol() external view returns (string memory); - - /// @notice Returns the decimals places of the token. - function decimals() external view returns (uint8); -} diff --git a/lib/forge-std/src/interfaces/IERC4626.sol b/lib/forge-std/src/interfaces/IERC4626.sol deleted file mode 100644 index bfe3a115..00000000 --- a/lib/forge-std/src/interfaces/IERC4626.sol +++ /dev/null @@ -1,190 +0,0 @@ -// SPDX-License-Identifier: MIT -pragma solidity >=0.6.2; - -import "./IERC20.sol"; - -/// @dev Interface of the ERC4626 "Tokenized Vault Standard", as defined in -/// https://eips.ethereum.org/EIPS/eip-4626 -interface IERC4626 is IERC20 { - event Deposit(address indexed sender, address indexed owner, uint256 assets, uint256 shares); - - event Withdraw( - address indexed sender, address indexed receiver, address indexed owner, uint256 assets, uint256 shares - ); - - /// @notice Returns the address of the underlying token used for the Vault for accounting, depositing, and withdrawing. - /// @dev - /// - MUST be an ERC-20 token contract. - /// - MUST NOT revert. - function asset() external view returns (address assetTokenAddress); - - /// @notice Returns the total amount of the underlying asset that is “managed” by Vault. - /// @dev - /// - SHOULD include any compounding that occurs from yield. - /// - MUST be inclusive of any fees that are charged against assets in the Vault. - /// - MUST NOT revert. - function totalAssets() external view returns (uint256 totalManagedAssets); - - /// @notice Returns the amount of shares that the Vault would exchange for the amount of assets provided, in an ideal - /// scenario where all the conditions are met. - /// @dev - /// - MUST NOT be inclusive of any fees that are charged against assets in the Vault. - /// - MUST NOT show any variations depending on the caller. - /// - MUST NOT reflect slippage or other on-chain conditions, when performing the actual exchange. - /// - MUST NOT revert. - /// - /// NOTE: This calculation MAY NOT reflect the “per-user” price-per-share, and instead should reflect the - /// “average-user’s” price-per-share, meaning what the average user should expect to see when exchanging to and - /// from. - function convertToShares(uint256 assets) external view returns (uint256 shares); - - /// @notice Returns the amount of assets that the Vault would exchange for the amount of shares provided, in an ideal - /// scenario where all the conditions are met. - /// @dev - /// - MUST NOT be inclusive of any fees that are charged against assets in the Vault. - /// - MUST NOT show any variations depending on the caller. - /// - MUST NOT reflect slippage or other on-chain conditions, when performing the actual exchange. - /// - MUST NOT revert. - /// - /// NOTE: This calculation MAY NOT reflect the “per-user” price-per-share, and instead should reflect the - /// “average-user’s” price-per-share, meaning what the average user should expect to see when exchanging to and - /// from. - function convertToAssets(uint256 shares) external view returns (uint256 assets); - - /// @notice Returns the maximum amount of the underlying asset that can be deposited into the Vault for the receiver, - /// through a deposit call. - /// @dev - /// - MUST return a limited value if receiver is subject to some deposit limit. - /// - MUST return 2 ** 256 - 1 if there is no limit on the maximum amount of assets that may be deposited. - /// - MUST NOT revert. - function maxDeposit(address receiver) external view returns (uint256 maxAssets); - - /// @notice Allows an on-chain or off-chain user to simulate the effects of their deposit at the current block, given - /// current on-chain conditions. - /// @dev - /// - MUST return as close to and no more than the exact amount of Vault shares that would be minted in a deposit - /// call in the same transaction. I.e. deposit should return the same or more shares as previewDeposit if called - /// in the same transaction. - /// - MUST NOT account for deposit limits like those returned from maxDeposit and should always act as though the - /// deposit would be accepted, regardless if the user has enough tokens approved, etc. - /// - MUST be inclusive of deposit fees. Integrators should be aware of the existence of deposit fees. - /// - MUST NOT revert. - /// - /// NOTE: any unfavorable discrepancy between convertToShares and previewDeposit SHOULD be considered slippage in - /// share price or some other type of condition, meaning the depositor will lose assets by depositing. - function previewDeposit(uint256 assets) external view returns (uint256 shares); - - /// @notice Mints shares Vault shares to receiver by depositing exactly amount of underlying tokens. - /// @dev - /// - MUST emit the Deposit event. - /// - MAY support an additional flow in which the underlying tokens are owned by the Vault contract before the - /// deposit execution, and are accounted for during deposit. - /// - MUST revert if all of assets cannot be deposited (due to deposit limit being reached, slippage, the user not - /// approving enough underlying tokens to the Vault contract, etc). - /// - /// NOTE: most implementations will require pre-approval of the Vault with the Vault’s underlying asset token. - function deposit(uint256 assets, address receiver) external returns (uint256 shares); - - /// @notice Returns the maximum amount of the Vault shares that can be minted for the receiver, through a mint call. - /// @dev - /// - MUST return a limited value if receiver is subject to some mint limit. - /// - MUST return 2 ** 256 - 1 if there is no limit on the maximum amount of shares that may be minted. - /// - MUST NOT revert. - function maxMint(address receiver) external view returns (uint256 maxShares); - - /// @notice Allows an on-chain or off-chain user to simulate the effects of their mint at the current block, given - /// current on-chain conditions. - /// @dev - /// - MUST return as close to and no fewer than the exact amount of assets that would be deposited in a mint call - /// in the same transaction. I.e. mint should return the same or fewer assets as previewMint if called in the - /// same transaction. - /// - MUST NOT account for mint limits like those returned from maxMint and should always act as though the mint - /// would be accepted, regardless if the user has enough tokens approved, etc. - /// - MUST be inclusive of deposit fees. Integrators should be aware of the existence of deposit fees. - /// - MUST NOT revert. - /// - /// NOTE: any unfavorable discrepancy between convertToAssets and previewMint SHOULD be considered slippage in - /// share price or some other type of condition, meaning the depositor will lose assets by minting. - function previewMint(uint256 shares) external view returns (uint256 assets); - - /// @notice Mints exactly shares Vault shares to receiver by depositing amount of underlying tokens. - /// @dev - /// - MUST emit the Deposit event. - /// - MAY support an additional flow in which the underlying tokens are owned by the Vault contract before the mint - /// execution, and are accounted for during mint. - /// - MUST revert if all of shares cannot be minted (due to deposit limit being reached, slippage, the user not - /// approving enough underlying tokens to the Vault contract, etc). - /// - /// NOTE: most implementations will require pre-approval of the Vault with the Vault’s underlying asset token. - function mint(uint256 shares, address receiver) external returns (uint256 assets); - - /// @notice Returns the maximum amount of the underlying asset that can be withdrawn from the owner balance in the - /// Vault, through a withdraw call. - /// @dev - /// - MUST return a limited value if owner is subject to some withdrawal limit or timelock. - /// - MUST NOT revert. - function maxWithdraw(address owner) external view returns (uint256 maxAssets); - - /// @notice Allows an on-chain or off-chain user to simulate the effects of their withdrawal at the current block, - /// given current on-chain conditions. - /// @dev - /// - MUST return as close to and no fewer than the exact amount of Vault shares that would be burned in a withdraw - /// call in the same transaction. I.e. withdraw should return the same or fewer shares as previewWithdraw if - /// called - /// in the same transaction. - /// - MUST NOT account for withdrawal limits like those returned from maxWithdraw and should always act as though - /// the withdrawal would be accepted, regardless if the user has enough shares, etc. - /// - MUST be inclusive of withdrawal fees. Integrators should be aware of the existence of withdrawal fees. - /// - MUST NOT revert. - /// - /// NOTE: any unfavorable discrepancy between convertToShares and previewWithdraw SHOULD be considered slippage in - /// share price or some other type of condition, meaning the depositor will lose assets by depositing. - function previewWithdraw(uint256 assets) external view returns (uint256 shares); - - /// @notice Burns shares from owner and sends exactly assets of underlying tokens to receiver. - /// @dev - /// - MUST emit the Withdraw event. - /// - MAY support an additional flow in which the underlying tokens are owned by the Vault contract before the - /// withdraw execution, and are accounted for during withdraw. - /// - MUST revert if all of assets cannot be withdrawn (due to withdrawal limit being reached, slippage, the owner - /// not having enough shares, etc). - /// - /// Note that some implementations will require pre-requesting to the Vault before a withdrawal may be performed. - /// Those methods should be performed separately. - function withdraw(uint256 assets, address receiver, address owner) external returns (uint256 shares); - - /// @notice Returns the maximum amount of Vault shares that can be redeemed from the owner balance in the Vault, - /// through a redeem call. - /// @dev - /// - MUST return a limited value if owner is subject to some withdrawal limit or timelock. - /// - MUST return balanceOf(owner) if owner is not subject to any withdrawal limit or timelock. - /// - MUST NOT revert. - function maxRedeem(address owner) external view returns (uint256 maxShares); - - /// @notice Allows an on-chain or off-chain user to simulate the effects of their redeemption at the current block, - /// given current on-chain conditions. - /// @dev - /// - MUST return as close to and no more than the exact amount of assets that would be withdrawn in a redeem call - /// in the same transaction. I.e. redeem should return the same or more assets as previewRedeem if called in the - /// same transaction. - /// - MUST NOT account for redemption limits like those returned from maxRedeem and should always act as though the - /// redemption would be accepted, regardless if the user has enough shares, etc. - /// - MUST be inclusive of withdrawal fees. Integrators should be aware of the existence of withdrawal fees. - /// - MUST NOT revert. - /// - /// NOTE: any unfavorable discrepancy between convertToAssets and previewRedeem SHOULD be considered slippage in - /// share price or some other type of condition, meaning the depositor will lose assets by redeeming. - function previewRedeem(uint256 shares) external view returns (uint256 assets); - - /// @notice Burns exactly shares from owner and sends assets of underlying tokens to receiver. - /// @dev - /// - MUST emit the Withdraw event. - /// - MAY support an additional flow in which the underlying tokens are owned by the Vault contract before the - /// redeem execution, and are accounted for during redeem. - /// - MUST revert if all of shares cannot be redeemed (due to withdrawal limit being reached, slippage, the owner - /// not having enough shares, etc). - /// - /// NOTE: some implementations will require pre-requesting to the Vault before a withdrawal may be performed. - /// Those methods should be performed separately. - function redeem(uint256 shares, address receiver, address owner) external returns (uint256 assets); -} diff --git a/lib/forge-std/src/interfaces/IERC721.sol b/lib/forge-std/src/interfaces/IERC721.sol deleted file mode 100644 index 0a16f45c..00000000 --- a/lib/forge-std/src/interfaces/IERC721.sol +++ /dev/null @@ -1,164 +0,0 @@ -// SPDX-License-Identifier: MIT -pragma solidity >=0.6.2; - -import "./IERC165.sol"; - -/// @title ERC-721 Non-Fungible Token Standard -/// @dev See https://eips.ethereum.org/EIPS/eip-721 -/// Note: the ERC-165 identifier for this interface is 0x80ac58cd. -interface IERC721 is IERC165 { - /// @dev This emits when ownership of any NFT changes by any mechanism. - /// This event emits when NFTs are created (`from` == 0) and destroyed - /// (`to` == 0). Exception: during contract creation, any number of NFTs - /// may be created and assigned without emitting Transfer. At the time of - /// any transfer, the approved address for that NFT (if any) is reset to none. - event Transfer(address indexed _from, address indexed _to, uint256 indexed _tokenId); - - /// @dev This emits when the approved address for an NFT is changed or - /// reaffirmed. The zero address indicates there is no approved address. - /// When a Transfer event emits, this also indicates that the approved - /// address for that NFT (if any) is reset to none. - event Approval(address indexed _owner, address indexed _approved, uint256 indexed _tokenId); - - /// @dev This emits when an operator is enabled or disabled for an owner. - /// The operator can manage all NFTs of the owner. - event ApprovalForAll(address indexed _owner, address indexed _operator, bool _approved); - - /// @notice Count all NFTs assigned to an owner - /// @dev NFTs assigned to the zero address are considered invalid, and this - /// function throws for queries about the zero address. - /// @param _owner An address for whom to query the balance - /// @return The number of NFTs owned by `_owner`, possibly zero - function balanceOf(address _owner) external view returns (uint256); - - /// @notice Find the owner of an NFT - /// @dev NFTs assigned to zero address are considered invalid, and queries - /// about them do throw. - /// @param _tokenId The identifier for an NFT - /// @return The address of the owner of the NFT - function ownerOf(uint256 _tokenId) external view returns (address); - - /// @notice Transfers the ownership of an NFT from one address to another address - /// @dev Throws unless `msg.sender` is the current owner, an authorized - /// operator, or the approved address for this NFT. Throws if `_from` is - /// not the current owner. Throws if `_to` is the zero address. Throws if - /// `_tokenId` is not a valid NFT. When transfer is complete, this function - /// checks if `_to` is a smart contract (code size > 0). If so, it calls - /// `onERC721Received` on `_to` and throws if the return value is not - /// `bytes4(keccak256("onERC721Received(address,address,uint256,bytes)"))`. - /// @param _from The current owner of the NFT - /// @param _to The new owner - /// @param _tokenId The NFT to transfer - /// @param data Additional data with no specified format, sent in call to `_to` - function safeTransferFrom(address _from, address _to, uint256 _tokenId, bytes calldata data) external payable; - - /// @notice Transfers the ownership of an NFT from one address to another address - /// @dev This works identically to the other function with an extra data parameter, - /// except this function just sets data to "". - /// @param _from The current owner of the NFT - /// @param _to The new owner - /// @param _tokenId The NFT to transfer - function safeTransferFrom(address _from, address _to, uint256 _tokenId) external payable; - - /// @notice Transfer ownership of an NFT -- THE CALLER IS RESPONSIBLE - /// TO CONFIRM THAT `_to` IS CAPABLE OF RECEIVING NFTS OR ELSE - /// THEY MAY BE PERMANENTLY LOST - /// @dev Throws unless `msg.sender` is the current owner, an authorized - /// operator, or the approved address for this NFT. Throws if `_from` is - /// not the current owner. Throws if `_to` is the zero address. Throws if - /// `_tokenId` is not a valid NFT. - /// @param _from The current owner of the NFT - /// @param _to The new owner - /// @param _tokenId The NFT to transfer - function transferFrom(address _from, address _to, uint256 _tokenId) external payable; - - /// @notice Change or reaffirm the approved address for an NFT - /// @dev The zero address indicates there is no approved address. - /// Throws unless `msg.sender` is the current NFT owner, or an authorized - /// operator of the current owner. - /// @param _approved The new approved NFT controller - /// @param _tokenId The NFT to approve - function approve(address _approved, uint256 _tokenId) external payable; - - /// @notice Enable or disable approval for a third party ("operator") to manage - /// all of `msg.sender`'s assets - /// @dev Emits the ApprovalForAll event. The contract MUST allow - /// multiple operators per owner. - /// @param _operator Address to add to the set of authorized operators - /// @param _approved True if the operator is approved, false to revoke approval - function setApprovalForAll(address _operator, bool _approved) external; - - /// @notice Get the approved address for a single NFT - /// @dev Throws if `_tokenId` is not a valid NFT. - /// @param _tokenId The NFT to find the approved address for - /// @return The approved address for this NFT, or the zero address if there is none - function getApproved(uint256 _tokenId) external view returns (address); - - /// @notice Query if an address is an authorized operator for another address - /// @param _owner The address that owns the NFTs - /// @param _operator The address that acts on behalf of the owner - /// @return True if `_operator` is an approved operator for `_owner`, false otherwise - function isApprovedForAll(address _owner, address _operator) external view returns (bool); -} - -/// @dev Note: the ERC-165 identifier for this interface is 0x150b7a02. -interface IERC721TokenReceiver { - /// @notice Handle the receipt of an NFT - /// @dev The ERC721 smart contract calls this function on the recipient - /// after a `transfer`. This function MAY throw to revert and reject the - /// transfer. Return of other than the magic value MUST result in the - /// transaction being reverted. - /// Note: the contract address is always the message sender. - /// @param _operator The address which called `safeTransferFrom` function - /// @param _from The address which previously owned the token - /// @param _tokenId The NFT identifier which is being transferred - /// @param _data Additional data with no specified format - /// @return `bytes4(keccak256("onERC721Received(address,address,uint256,bytes)"))` - /// unless throwing - function onERC721Received(address _operator, address _from, uint256 _tokenId, bytes calldata _data) - external - returns (bytes4); -} - -/// @title ERC-721 Non-Fungible Token Standard, optional metadata extension -/// @dev See https://eips.ethereum.org/EIPS/eip-721 -/// Note: the ERC-165 identifier for this interface is 0x5b5e139f. -interface IERC721Metadata is IERC721 { - /// @notice A descriptive name for a collection of NFTs in this contract - function name() external view returns (string memory _name); - - /// @notice An abbreviated name for NFTs in this contract - function symbol() external view returns (string memory _symbol); - - /// @notice A distinct Uniform Resource Identifier (URI) for a given asset. - /// @dev Throws if `_tokenId` is not a valid NFT. URIs are defined in RFC - /// 3986. The URI may point to a JSON file that conforms to the "ERC721 - /// Metadata JSON Schema". - function tokenURI(uint256 _tokenId) external view returns (string memory); -} - -/// @title ERC-721 Non-Fungible Token Standard, optional enumeration extension -/// @dev See https://eips.ethereum.org/EIPS/eip-721 -/// Note: the ERC-165 identifier for this interface is 0x780e9d63. -interface IERC721Enumerable is IERC721 { - /// @notice Count NFTs tracked by this contract - /// @return A count of valid NFTs tracked by this contract, where each one of - /// them has an assigned and queryable owner not equal to the zero address - function totalSupply() external view returns (uint256); - - /// @notice Enumerate valid NFTs - /// @dev Throws if `_index` >= `totalSupply()`. - /// @param _index A counter less than `totalSupply()` - /// @return The token identifier for the `_index`th NFT, - /// (sort order not specified) - function tokenByIndex(uint256 _index) external view returns (uint256); - - /// @notice Enumerate NFTs assigned to an owner - /// @dev Throws if `_index` >= `balanceOf(_owner)` or if - /// `_owner` is the zero address, representing invalid NFTs. - /// @param _owner An address where we are interested in NFTs owned by them - /// @param _index A counter less than `balanceOf(_owner)` - /// @return The token identifier for the `_index`th NFT assigned to `_owner`, - /// (sort order not specified) - function tokenOfOwnerByIndex(address _owner, uint256 _index) external view returns (uint256); -} diff --git a/lib/forge-std/test/StdAssertions.t.sol b/lib/forge-std/test/StdAssertions.t.sol deleted file mode 100644 index 4d5827d6..00000000 --- a/lib/forge-std/test/StdAssertions.t.sol +++ /dev/null @@ -1,587 +0,0 @@ -// SPDX-License-Identifier: MIT -pragma solidity >=0.7.0 <0.9.0; - -import "../src/Test.sol"; - -contract StdAssertionsTest is Test { - string constant CUSTOM_ERROR = "guh!"; - - bool constant EXPECT_PASS = false; - bool constant EXPECT_FAIL = true; - - TestTest t = new TestTest(); - - /*////////////////////////////////////////////////////////////////////////// - FAIL(STRING) - //////////////////////////////////////////////////////////////////////////*/ - - function testShouldFail() external { - vm.expectEmit(false, false, false, true); - emit log_named_string("Error", CUSTOM_ERROR); - t._fail(CUSTOM_ERROR); - } - - /*////////////////////////////////////////////////////////////////////////// - ASSERT_FALSE - //////////////////////////////////////////////////////////////////////////*/ - - function testAssertFalse_Pass() external { - t._assertFalse(false, EXPECT_PASS); - } - - function testAssertFalse_Fail() external { - vm.expectEmit(false, false, false, true); - emit log("Error: Assertion Failed"); - t._assertFalse(true, EXPECT_FAIL); - } - - function testAssertFalse_Err_Pass() external { - t._assertFalse(false, CUSTOM_ERROR, EXPECT_PASS); - } - - function testAssertFalse_Err_Fail() external { - vm.expectEmit(false, false, false, true); - emit log_named_string("Error", CUSTOM_ERROR); - t._assertFalse(true, CUSTOM_ERROR, EXPECT_FAIL); - } - - /*////////////////////////////////////////////////////////////////////////// - ASSERT_EQ(BOOL) - //////////////////////////////////////////////////////////////////////////*/ - - function testAssertEq_Bool_Pass(bool a) external { - t._assertEq(a, a, EXPECT_PASS); - } - - function testAssertEq_Bool_Fail(bool a, bool b) external { - vm.assume(a != b); - - vm.expectEmit(false, false, false, true); - emit log("Error: a == b not satisfied [bool]"); - t._assertEq(a, b, EXPECT_FAIL); - } - - function testAssertEq_BoolErr_Pass(bool a) external { - t._assertEq(a, a, CUSTOM_ERROR, EXPECT_PASS); - } - - function testAssertEq_BoolErr_Fail(bool a, bool b) external { - vm.assume(a != b); - - vm.expectEmit(false, false, false, true); - emit log_named_string("Error", CUSTOM_ERROR); - t._assertEq(a, b, CUSTOM_ERROR, EXPECT_FAIL); - } - - /*////////////////////////////////////////////////////////////////////////// - ASSERT_EQ(BYTES) - //////////////////////////////////////////////////////////////////////////*/ - - function testAssertEq_Bytes_Pass(bytes calldata a) external { - t._assertEq(a, a, EXPECT_PASS); - } - - function testAssertEq_Bytes_Fail(bytes calldata a, bytes calldata b) external { - vm.assume(keccak256(a) != keccak256(b)); - - vm.expectEmit(false, false, false, true); - emit log("Error: a == b not satisfied [bytes]"); - t._assertEq(a, b, EXPECT_FAIL); - } - - function testAssertEq_BytesErr_Pass(bytes calldata a) external { - t._assertEq(a, a, CUSTOM_ERROR, EXPECT_PASS); - } - - function testAssertEq_BytesErr_Fail(bytes calldata a, bytes calldata b) external { - vm.assume(keccak256(a) != keccak256(b)); - - vm.expectEmit(false, false, false, true); - emit log_named_string("Error", CUSTOM_ERROR); - t._assertEq(a, b, CUSTOM_ERROR, EXPECT_FAIL); - } - - /*////////////////////////////////////////////////////////////////////////// - ASSERT_EQ(ARRAY) - //////////////////////////////////////////////////////////////////////////*/ - - function testAssertEq_UintArr_Pass(uint256 e0, uint256 e1, uint256 e2) public { - uint256[] memory a = new uint256[](3); - a[0] = e0; - a[1] = e1; - a[2] = e2; - uint256[] memory b = new uint256[](3); - b[0] = e0; - b[1] = e1; - b[2] = e2; - - t._assertEq(a, b, EXPECT_PASS); - } - - function testAssertEq_IntArr_Pass(int256 e0, int256 e1, int256 e2) public { - int256[] memory a = new int256[](3); - a[0] = e0; - a[1] = e1; - a[2] = e2; - int256[] memory b = new int256[](3); - b[0] = e0; - b[1] = e1; - b[2] = e2; - - t._assertEq(a, b, EXPECT_PASS); - } - - function testAssertEq_AddressArr_Pass(address e0, address e1, address e2) public { - address[] memory a = new address[](3); - a[0] = e0; - a[1] = e1; - a[2] = e2; - address[] memory b = new address[](3); - b[0] = e0; - b[1] = e1; - b[2] = e2; - - t._assertEq(a, b, EXPECT_PASS); - } - - function testAssertEq_UintArr_FailEl(uint256 e1) public { - vm.assume(e1 != 0); - uint256[] memory a = new uint256[](3); - uint256[] memory b = new uint256[](3); - b[1] = e1; - - vm.expectEmit(false, false, false, true); - emit log("Error: a == b not satisfied [uint[]]"); - t._assertEq(a, b, EXPECT_FAIL); - } - - function testAssertEq_IntArr_FailEl(int256 e1) public { - vm.assume(e1 != 0); - int256[] memory a = new int256[](3); - int256[] memory b = new int256[](3); - b[1] = e1; - - vm.expectEmit(false, false, false, true); - emit log("Error: a == b not satisfied [int[]]"); - t._assertEq(a, b, EXPECT_FAIL); - } - - function testAssertEq_AddressArr_FailEl(address e1) public { - vm.assume(e1 != address(0)); - address[] memory a = new address[](3); - address[] memory b = new address[](3); - b[1] = e1; - - vm.expectEmit(false, false, false, true); - emit log("Error: a == b not satisfied [address[]]"); - t._assertEq(a, b, EXPECT_FAIL); - } - - function testAssertEq_UintArrErr_FailEl(uint256 e1) public { - vm.assume(e1 != 0); - uint256[] memory a = new uint256[](3); - uint256[] memory b = new uint256[](3); - b[1] = e1; - - vm.expectEmit(false, false, false, true); - emit log_named_string("Error", CUSTOM_ERROR); - vm.expectEmit(false, false, false, true); - emit log("Error: a == b not satisfied [uint[]]"); - t._assertEq(a, b, CUSTOM_ERROR, EXPECT_FAIL); - } - - function testAssertEq_IntArrErr_FailEl(int256 e1) public { - vm.assume(e1 != 0); - int256[] memory a = new int256[](3); - int256[] memory b = new int256[](3); - b[1] = e1; - - vm.expectEmit(false, false, false, true); - emit log_named_string("Error", CUSTOM_ERROR); - vm.expectEmit(false, false, false, true); - emit log("Error: a == b not satisfied [int[]]"); - t._assertEq(a, b, CUSTOM_ERROR, EXPECT_FAIL); - } - - function testAssertEq_AddressArrErr_FailEl(address e1) public { - vm.assume(e1 != address(0)); - address[] memory a = new address[](3); - address[] memory b = new address[](3); - b[1] = e1; - - vm.expectEmit(false, false, false, true); - emit log_named_string("Error", CUSTOM_ERROR); - vm.expectEmit(false, false, false, true); - emit log("Error: a == b not satisfied [address[]]"); - t._assertEq(a, b, CUSTOM_ERROR, EXPECT_FAIL); - } - - function testAssertEq_UintArr_FailLen(uint256 lenA, uint256 lenB) public { - vm.assume(lenA != lenB); - vm.assume(lenA <= 10000); - vm.assume(lenB <= 10000); - uint256[] memory a = new uint256[](lenA); - uint256[] memory b = new uint256[](lenB); - - vm.expectEmit(false, false, false, true); - emit log("Error: a == b not satisfied [uint[]]"); - t._assertEq(a, b, EXPECT_FAIL); - } - - function testAssertEq_IntArr_FailLen(uint256 lenA, uint256 lenB) public { - vm.assume(lenA != lenB); - vm.assume(lenA <= 10000); - vm.assume(lenB <= 10000); - int256[] memory a = new int256[](lenA); - int256[] memory b = new int256[](lenB); - - vm.expectEmit(false, false, false, true); - emit log("Error: a == b not satisfied [int[]]"); - t._assertEq(a, b, EXPECT_FAIL); - } - - function testAssertEq_AddressArr_FailLen(uint256 lenA, uint256 lenB) public { - vm.assume(lenA != lenB); - vm.assume(lenA <= 10000); - vm.assume(lenB <= 10000); - address[] memory a = new address[](lenA); - address[] memory b = new address[](lenB); - - vm.expectEmit(false, false, false, true); - emit log("Error: a == b not satisfied [address[]]"); - t._assertEq(a, b, EXPECT_FAIL); - } - - function testAssertEq_UintArrErr_FailLen(uint256 lenA, uint256 lenB) public { - vm.assume(lenA != lenB); - vm.assume(lenA <= 10000); - vm.assume(lenB <= 10000); - uint256[] memory a = new uint256[](lenA); - uint256[] memory b = new uint256[](lenB); - - vm.expectEmit(false, false, false, true); - emit log_named_string("Error", CUSTOM_ERROR); - vm.expectEmit(false, false, false, true); - emit log("Error: a == b not satisfied [uint[]]"); - t._assertEq(a, b, CUSTOM_ERROR, EXPECT_FAIL); - } - - function testAssertEq_IntArrErr_FailLen(uint256 lenA, uint256 lenB) public { - vm.assume(lenA != lenB); - vm.assume(lenA <= 10000); - vm.assume(lenB <= 10000); - int256[] memory a = new int256[](lenA); - int256[] memory b = new int256[](lenB); - - vm.expectEmit(false, false, false, true); - emit log_named_string("Error", CUSTOM_ERROR); - vm.expectEmit(false, false, false, true); - emit log("Error: a == b not satisfied [int[]]"); - t._assertEq(a, b, CUSTOM_ERROR, EXPECT_FAIL); - } - - function testAssertEq_AddressArrErr_FailLen(uint256 lenA, uint256 lenB) public { - vm.assume(lenA != lenB); - vm.assume(lenA <= 10000); - vm.assume(lenB <= 10000); - address[] memory a = new address[](lenA); - address[] memory b = new address[](lenB); - - vm.expectEmit(false, false, false, true); - emit log_named_string("Error", CUSTOM_ERROR); - vm.expectEmit(false, false, false, true); - emit log("Error: a == b not satisfied [address[]]"); - t._assertEq(a, b, CUSTOM_ERROR, EXPECT_FAIL); - } - - /*////////////////////////////////////////////////////////////////////////// - ASSERT_EQ(UINT) - //////////////////////////////////////////////////////////////////////////*/ - - function testAssertEqUint() public { - assertEqUint(uint8(1), uint128(1)); - assertEqUint(uint64(2), uint64(2)); - } - - function testFailAssertEqUint() public { - assertEqUint(uint64(1), uint96(2)); - assertEqUint(uint160(3), uint160(4)); - } - - /*////////////////////////////////////////////////////////////////////////// - APPROX_EQ_ABS(UINT) - //////////////////////////////////////////////////////////////////////////*/ - - function testAssertApproxEqAbs_Uint_Pass(uint256 a, uint256 b, uint256 maxDelta) external { - vm.assume(stdMath.delta(a, b) <= maxDelta); - - t._assertApproxEqAbs(a, b, maxDelta, EXPECT_PASS); - } - - function testAssertApproxEqAbs_Uint_Fail(uint256 a, uint256 b, uint256 maxDelta) external { - vm.assume(stdMath.delta(a, b) > maxDelta); - - vm.expectEmit(false, false, false, true); - emit log("Error: a ~= b not satisfied [uint]"); - t._assertApproxEqAbs(a, b, maxDelta, EXPECT_FAIL); - } - - function testAssertApproxEqAbs_UintErr_Pass(uint256 a, uint256 b, uint256 maxDelta) external { - vm.assume(stdMath.delta(a, b) <= maxDelta); - - t._assertApproxEqAbs(a, b, maxDelta, CUSTOM_ERROR, EXPECT_PASS); - } - - function testAssertApproxEqAbs_UintErr_Fail(uint256 a, uint256 b, uint256 maxDelta) external { - vm.assume(stdMath.delta(a, b) > maxDelta); - - vm.expectEmit(false, false, false, true); - emit log_named_string("Error", CUSTOM_ERROR); - t._assertApproxEqAbs(a, b, maxDelta, CUSTOM_ERROR, EXPECT_FAIL); - } - - /*////////////////////////////////////////////////////////////////////////// - APPROX_EQ_ABS(INT) - //////////////////////////////////////////////////////////////////////////*/ - - function testAssertApproxEqAbs_Int_Pass(int256 a, int256 b, uint256 maxDelta) external { - vm.assume(stdMath.delta(a, b) <= maxDelta); - - t._assertApproxEqAbs(a, b, maxDelta, EXPECT_PASS); - } - - function testAssertApproxEqAbs_Int_Fail(int256 a, int256 b, uint256 maxDelta) external { - vm.assume(stdMath.delta(a, b) > maxDelta); - - vm.expectEmit(false, false, false, true); - emit log("Error: a ~= b not satisfied [int]"); - t._assertApproxEqAbs(a, b, maxDelta, EXPECT_FAIL); - } - - function testAssertApproxEqAbs_IntErr_Pass(int256 a, int256 b, uint256 maxDelta) external { - vm.assume(stdMath.delta(a, b) <= maxDelta); - - t._assertApproxEqAbs(a, b, maxDelta, CUSTOM_ERROR, EXPECT_PASS); - } - - function testAssertApproxEqAbs_IntErr_Fail(int256 a, int256 b, uint256 maxDelta) external { - vm.assume(stdMath.delta(a, b) > maxDelta); - - vm.expectEmit(false, false, false, true); - emit log_named_string("Error", CUSTOM_ERROR); - t._assertApproxEqAbs(a, b, maxDelta, CUSTOM_ERROR, EXPECT_FAIL); - } - - /*////////////////////////////////////////////////////////////////////////// - APPROX_EQ_REL(UINT) - //////////////////////////////////////////////////////////////////////////*/ - - function testAssertApproxEqRel_Uint_Pass(uint256 a, uint256 b, uint256 maxPercentDelta) external { - vm.assume(a < type(uint128).max && b < type(uint128).max && b != 0); - vm.assume(stdMath.percentDelta(a, b) <= maxPercentDelta); - - t._assertApproxEqRel(a, b, maxPercentDelta, EXPECT_PASS); - } - - function testAssertApproxEqRel_Uint_Fail(uint256 a, uint256 b, uint256 maxPercentDelta) external { - vm.assume(a < type(uint128).max && b < type(uint128).max && b != 0); - vm.assume(stdMath.percentDelta(a, b) > maxPercentDelta); - - vm.expectEmit(false, false, false, true); - emit log("Error: a ~= b not satisfied [uint]"); - t._assertApproxEqRel(a, b, maxPercentDelta, EXPECT_FAIL); - } - - function testAssertApproxEqRel_UintErr_Pass(uint256 a, uint256 b, uint256 maxPercentDelta) external { - vm.assume(a < type(uint128).max && b < type(uint128).max && b != 0); - vm.assume(stdMath.percentDelta(a, b) <= maxPercentDelta); - - t._assertApproxEqRel(a, b, maxPercentDelta, CUSTOM_ERROR, EXPECT_PASS); - } - - function testAssertApproxEqRel_UintErr_Fail(uint256 a, uint256 b, uint256 maxPercentDelta) external { - vm.assume(a < type(uint128).max && b < type(uint128).max && b != 0); - vm.assume(stdMath.percentDelta(a, b) > maxPercentDelta); - - vm.expectEmit(false, false, false, true); - emit log_named_string("Error", CUSTOM_ERROR); - t._assertApproxEqRel(a, b, maxPercentDelta, CUSTOM_ERROR, EXPECT_FAIL); - } - - /*////////////////////////////////////////////////////////////////////////// - APPROX_EQ_REL(INT) - //////////////////////////////////////////////////////////////////////////*/ - - function testAssertApproxEqRel_Int_Pass(int128 a, int128 b, uint128 maxPercentDelta) external { - vm.assume(b != 0); - vm.assume(stdMath.percentDelta(a, b) <= maxPercentDelta); - - t._assertApproxEqRel(a, b, maxPercentDelta, EXPECT_PASS); - } - - function testAssertApproxEqRel_Int_Fail(int128 a, int128 b, uint128 maxPercentDelta) external { - vm.assume(b != 0); - vm.assume(stdMath.percentDelta(a, b) > maxPercentDelta); - - vm.expectEmit(false, false, false, true); - emit log("Error: a ~= b not satisfied [int]"); - t._assertApproxEqRel(a, b, maxPercentDelta, EXPECT_FAIL); - } - - function testAssertApproxEqRel_IntErr_Pass(int128 a, int128 b, uint128 maxPercentDelta) external { - vm.assume(b != 0); - vm.assume(stdMath.percentDelta(a, b) <= maxPercentDelta); - - t._assertApproxEqRel(a, b, maxPercentDelta, CUSTOM_ERROR, EXPECT_PASS); - } - - function testAssertApproxEqRel_IntErr_Fail(int128 a, int128 b, uint128 maxPercentDelta) external { - vm.assume(b != 0); - vm.assume(stdMath.percentDelta(a, b) > maxPercentDelta); - - vm.expectEmit(false, false, false, true); - emit log_named_string("Error", CUSTOM_ERROR); - t._assertApproxEqRel(a, b, maxPercentDelta, CUSTOM_ERROR, EXPECT_FAIL); - } -} - -contract TestTest is Test { - modifier expectFailure(bool expectFail) { - bool preState = vm.load(HEVM_ADDRESS, bytes32("failed")) != bytes32(0x00); - _; - bool postState = vm.load(HEVM_ADDRESS, bytes32("failed")) != bytes32(0x00); - - if (preState == true) { - return; - } - - if (expectFail) { - require(postState == true, "expected failure not triggered"); - - // unwind the expected failure - vm.store(HEVM_ADDRESS, bytes32("failed"), bytes32(uint256(0x00))); - } else { - require(postState == false, "unexpected failure was triggered"); - } - } - - function _fail(string memory err) external expectFailure(true) { - fail(err); - } - - function _assertFalse(bool data, bool expectFail) external expectFailure(expectFail) { - assertFalse(data); - } - - function _assertFalse(bool data, string memory err, bool expectFail) external expectFailure(expectFail) { - assertFalse(data, err); - } - - function _assertEq(bool a, bool b, bool expectFail) external expectFailure(expectFail) { - assertEq(a, b); - } - - function _assertEq(bool a, bool b, string memory err, bool expectFail) external expectFailure(expectFail) { - assertEq(a, b, err); - } - - function _assertEq(bytes memory a, bytes memory b, bool expectFail) external expectFailure(expectFail) { - assertEq(a, b); - } - - function _assertEq(bytes memory a, bytes memory b, string memory err, bool expectFail) - external - expectFailure(expectFail) - { - assertEq(a, b, err); - } - - function _assertEq(uint256[] memory a, uint256[] memory b, bool expectFail) external expectFailure(expectFail) { - assertEq(a, b); - } - - function _assertEq(int256[] memory a, int256[] memory b, bool expectFail) external expectFailure(expectFail) { - assertEq(a, b); - } - - function _assertEq(address[] memory a, address[] memory b, bool expectFail) external expectFailure(expectFail) { - assertEq(a, b); - } - - function _assertEq(uint256[] memory a, uint256[] memory b, string memory err, bool expectFail) - external - expectFailure(expectFail) - { - assertEq(a, b, err); - } - - function _assertEq(int256[] memory a, int256[] memory b, string memory err, bool expectFail) - external - expectFailure(expectFail) - { - assertEq(a, b, err); - } - - function _assertEq(address[] memory a, address[] memory b, string memory err, bool expectFail) - external - expectFailure(expectFail) - { - assertEq(a, b, err); - } - - function _assertApproxEqAbs(uint256 a, uint256 b, uint256 maxDelta, bool expectFail) - external - expectFailure(expectFail) - { - assertApproxEqAbs(a, b, maxDelta); - } - - function _assertApproxEqAbs(uint256 a, uint256 b, uint256 maxDelta, string memory err, bool expectFail) - external - expectFailure(expectFail) - { - assertApproxEqAbs(a, b, maxDelta, err); - } - - function _assertApproxEqAbs(int256 a, int256 b, uint256 maxDelta, bool expectFail) - external - expectFailure(expectFail) - { - assertApproxEqAbs(a, b, maxDelta); - } - - function _assertApproxEqAbs(int256 a, int256 b, uint256 maxDelta, string memory err, bool expectFail) - external - expectFailure(expectFail) - { - assertApproxEqAbs(a, b, maxDelta, err); - } - - function _assertApproxEqRel(uint256 a, uint256 b, uint256 maxPercentDelta, bool expectFail) - external - expectFailure(expectFail) - { - assertApproxEqRel(a, b, maxPercentDelta); - } - - function _assertApproxEqRel(uint256 a, uint256 b, uint256 maxPercentDelta, string memory err, bool expectFail) - external - expectFailure(expectFail) - { - assertApproxEqRel(a, b, maxPercentDelta, err); - } - - function _assertApproxEqRel(int256 a, int256 b, uint256 maxPercentDelta, bool expectFail) - external - expectFailure(expectFail) - { - assertApproxEqRel(a, b, maxPercentDelta); - } - - function _assertApproxEqRel(int256 a, int256 b, uint256 maxPercentDelta, string memory err, bool expectFail) - external - expectFailure(expectFail) - { - assertApproxEqRel(a, b, maxPercentDelta, err); - } -} diff --git a/lib/forge-std/test/StdChains.t.sol b/lib/forge-std/test/StdChains.t.sol deleted file mode 100644 index a9ebaaad..00000000 --- a/lib/forge-std/test/StdChains.t.sol +++ /dev/null @@ -1,61 +0,0 @@ -// SPDX-License-Identifier: MIT -pragma solidity >=0.7.0 <0.9.0; - -import "../src/Test.sol"; - -contract StdChainsTest is Test { - function testChainRpcInitialization() public { - // RPCs specified in `foundry.toml` should be updated. - assertEq(getChain(1).rpcUrl, "https://mainnet.infura.io/v3/7a8769b798b642f6933f2ed52042bd70"); - assertEq(getChain("optimism_goerli").rpcUrl, "https://goerli.optimism.io/"); - assertEq(getChain("arbitrum_one_goerli").rpcUrl, "https://goerli-rollup.arbitrum.io/rpc/"); - - // Other RPCs should remain unchanged. - assertEq(getChain(31337).rpcUrl, "http://127.0.0.1:8545"); - assertEq(getChain("sepolia").rpcUrl, "https://rpc.sepolia.dev"); - } - - // Ensure we can connect to the default RPC URL for each chain. - function testRpcs() public { - (string[2][] memory rpcs) = vm.rpcUrls(); - for (uint256 i = 0; i < rpcs.length; i++) { - ( /* string memory name */ , string memory rpcUrl) = (rpcs[i][0], rpcs[i][1]); - vm.createSelectFork(rpcUrl); - } - } - - function testCannotSetChain_ChainIdExists() public { - setChain({key: "custom_chain", name: "Custom Chain", chainId: 123456789, rpcUrl: "https://custom.chain/"}); - - vm.expectRevert( - 'StdChains setChain(string,string,uint256,string): Chain ID 123456789 already used by "custom_chain".' - ); - - setChain({key: "another_custom_chain", name: "", chainId: 123456789, rpcUrl: ""}); - } - - function testSetChain() public { - setChain({key: "custom_chain", name: "Custom Chain", chainId: 123456789, rpcUrl: "https://custom.chain/"}); - Chain memory customChain = getChain("custom_chain"); - assertEq(customChain.name, "Custom Chain"); - assertEq(customChain.chainId, 123456789); - assertEq(customChain.rpcUrl, "https://custom.chain/"); - Chain memory chainById = getChain(123456789); - assertEq(chainById.name, customChain.name); - assertEq(chainById.chainId, customChain.chainId); - assertEq(chainById.rpcUrl, customChain.rpcUrl); - } - - function testSetChain_ExistingOne() public { - setChain({key: "custom_chain", name: "Custom Chain", chainId: 123456789, rpcUrl: "https://custom.chain/"}); - assertEq(getChain(123456789).chainId, 123456789); - - setChain({key: "custom_chain", name: "Modified Chain", chainId: 999999999, rpcUrl: "https://modified.chain/"}); - assertEq(getChain(123456789).chainId, 0); - - Chain memory modifiedChain = getChain(999999999); - assertEq(modifiedChain.name, "Modified Chain"); - assertEq(modifiedChain.chainId, 999999999); - assertEq(modifiedChain.rpcUrl, "https://modified.chain/"); - } -} diff --git a/lib/forge-std/test/StdCheats.t.sol b/lib/forge-std/test/StdCheats.t.sol deleted file mode 100644 index c11f56c7..00000000 --- a/lib/forge-std/test/StdCheats.t.sol +++ /dev/null @@ -1,305 +0,0 @@ -// SPDX-License-Identifier: MIT -pragma solidity >=0.7.0 <0.9.0; - -import "../src/StdCheats.sol"; -import "../src/Test.sol"; -import "../src/StdJson.sol"; - -contract StdCheatsTest is Test { - Bar test; - - using stdJson for string; - - function setUp() public { - test = new Bar(); - } - - function testSkip() public { - vm.warp(100); - skip(25); - assertEq(block.timestamp, 125); - } - - function testRewind() public { - vm.warp(100); - rewind(25); - assertEq(block.timestamp, 75); - } - - function testHoax() public { - hoax(address(1337)); - test.bar{value: 100}(address(1337)); - } - - function testHoaxOrigin() public { - hoax(address(1337), address(1337)); - test.origin{value: 100}(address(1337)); - } - - function testHoaxDifferentAddresses() public { - hoax(address(1337), address(7331)); - test.origin{value: 100}(address(1337), address(7331)); - } - - function testStartHoax() public { - startHoax(address(1337)); - test.bar{value: 100}(address(1337)); - test.bar{value: 100}(address(1337)); - vm.stopPrank(); - test.bar(address(this)); - } - - function testStartHoaxOrigin() public { - startHoax(address(1337), address(1337)); - test.origin{value: 100}(address(1337)); - test.origin{value: 100}(address(1337)); - vm.stopPrank(); - test.bar(address(this)); - } - - function testChangePrank() public { - vm.startPrank(address(1337)); - test.bar(address(1337)); - changePrank(address(0xdead)); - test.bar(address(0xdead)); - changePrank(address(1337)); - test.bar(address(1337)); - vm.stopPrank(); - } - - function testMakeAddrEquivalence() public { - (address addr,) = makeAddrAndKey("1337"); - assertEq(makeAddr("1337"), addr); - } - - function testMakeAddrSigning() public { - (address addr, uint256 key) = makeAddrAndKey("1337"); - bytes32 hash = keccak256("some_message"); - - (uint8 v, bytes32 r, bytes32 s) = vm.sign(key, hash); - assertEq(ecrecover(hash, v, r, s), addr); - } - - function testDeal() public { - deal(address(this), 1 ether); - assertEq(address(this).balance, 1 ether); - } - - function testDealToken() public { - Bar barToken = new Bar(); - address bar = address(barToken); - deal(bar, address(this), 10000e18); - assertEq(barToken.balanceOf(address(this)), 10000e18); - } - - function testDealTokenAdjustTS() public { - Bar barToken = new Bar(); - address bar = address(barToken); - deal(bar, address(this), 10000e18, true); - assertEq(barToken.balanceOf(address(this)), 10000e18); - assertEq(barToken.totalSupply(), 20000e18); - deal(bar, address(this), 0, true); - assertEq(barToken.balanceOf(address(this)), 0); - assertEq(barToken.totalSupply(), 10000e18); - } - - function testDeployCode() public { - address deployed = deployCode("StdCheats.t.sol:Bar", bytes("")); - assertEq(string(getCode(deployed)), string(getCode(address(test)))); - } - - function testDeployCodeNoArgs() public { - address deployed = deployCode("StdCheats.t.sol:Bar"); - assertEq(string(getCode(deployed)), string(getCode(address(test)))); - } - - function testDeployCodeVal() public { - address deployed = deployCode("StdCheats.t.sol:Bar", bytes(""), 1 ether); - assertEq(string(getCode(deployed)), string(getCode(address(test)))); - assertEq(deployed.balance, 1 ether); - } - - function testDeployCodeValNoArgs() public { - address deployed = deployCode("StdCheats.t.sol:Bar", 1 ether); - assertEq(string(getCode(deployed)), string(getCode(address(test)))); - assertEq(deployed.balance, 1 ether); - } - - // We need this so we can call "this.deployCode" rather than "deployCode" directly - function deployCodeHelper(string memory what) external { - deployCode(what); - } - - function testDeployCodeFail() public { - vm.expectRevert(bytes("StdCheats deployCode(string): Deployment failed.")); - this.deployCodeHelper("StdCheats.t.sol:RevertingContract"); - } - - function getCode(address who) internal view returns (bytes memory o_code) { - /// @solidity memory-safe-assembly - assembly { - // retrieve the size of the code, this needs assembly - let size := extcodesize(who) - // allocate output byte array - this could also be done without assembly - // by using o_code = new bytes(size) - o_code := mload(0x40) - // new "memory end" including padding - mstore(0x40, add(o_code, and(add(add(size, 0x20), 0x1f), not(0x1f)))) - // store length in memory - mstore(o_code, size) - // actually retrieve the code, this needs assembly - extcodecopy(who, add(o_code, 0x20), 0, size) - } - } - - function testDeriveRememberKey() public { - string memory mnemonic = "test test test test test test test test test test test junk"; - - (address deployer, uint256 privateKey) = deriveRememberKey(mnemonic, 0); - assertEq(deployer, 0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266); - assertEq(privateKey, 0xac0974bec39a17e36ba4a6b4d238ff944bacb478cbed5efcae784d7bf4f2ff80); - } - - function testBytesToUint() public { - assertEq(3, bytesToUint_test(hex"03")); - assertEq(2, bytesToUint_test(hex"02")); - assertEq(255, bytesToUint_test(hex"ff")); - assertEq(29625, bytesToUint_test(hex"73b9")); - } - - function testParseJsonTxDetail() public { - string memory root = vm.projectRoot(); - string memory path = string.concat(root, "/test/fixtures/broadcast.log.json"); - string memory json = vm.readFile(path); - bytes memory transactionDetails = json.parseRaw(".transactions[0].tx"); - RawTx1559Detail memory rawTxDetail = abi.decode(transactionDetails, (RawTx1559Detail)); - Tx1559Detail memory txDetail = rawToConvertedEIP1559Detail(rawTxDetail); - assertEq(txDetail.from, 0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266); - assertEq(txDetail.to, 0xe7f1725E7734CE288F8367e1Bb143E90bb3F0512); - assertEq( - txDetail.data, - hex"23e99187000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000013370000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000004" - ); - assertEq(txDetail.nonce, 3); - assertEq(txDetail.txType, 2); - assertEq(txDetail.gas, 29625); - assertEq(txDetail.value, 0); - } - - function testReadEIP1559Transaction() public view { - string memory root = vm.projectRoot(); - string memory path = string.concat(root, "/test/fixtures/broadcast.log.json"); - uint256 index = 0; - Tx1559 memory transaction = readTx1559(path, index); - transaction; - } - - function testReadEIP1559Transactions() public view { - string memory root = vm.projectRoot(); - string memory path = string.concat(root, "/test/fixtures/broadcast.log.json"); - Tx1559[] memory transactions = readTx1559s(path); - transactions; - } - - function testReadReceipt() public { - string memory root = vm.projectRoot(); - string memory path = string.concat(root, "/test/fixtures/broadcast.log.json"); - uint256 index = 5; - Receipt memory receipt = readReceipt(path, index); - assertEq( - receipt.logsBloom, - hex"00000000000800000000000000000010000000000000000000000000000180000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100" - ); - } - - function testReadReceipts() public view { - string memory root = vm.projectRoot(); - string memory path = string.concat(root, "/test/fixtures/broadcast.log.json"); - Receipt[] memory receipts = readReceipts(path); - receipts; - } - - function testGasMeteringModifier() public { - uint256 gas_start_normal = gasleft(); - addInLoop(); - uint256 gas_used_normal = gas_start_normal - gasleft(); - - uint256 gas_start_single = gasleft(); - addInLoopNoGas(); - uint256 gas_used_single = gas_start_single - gasleft(); - - uint256 gas_start_double = gasleft(); - addInLoopNoGasNoGas(); - uint256 gas_used_double = gas_start_double - gasleft(); - - emit log_named_uint("Normal gas", gas_used_normal); - emit log_named_uint("Single modifier gas", gas_used_single); - emit log_named_uint("Double modifier gas", gas_used_double); - assertTrue(gas_used_double + gas_used_single < gas_used_normal); - } - - function addInLoop() internal returns (uint256) { - uint256 b; - for (uint256 i; i < 10000; i++) { - b += i; - } - return b; - } - - function addInLoopNoGas() internal noGasMetering returns (uint256) { - return addInLoop(); - } - - function addInLoopNoGasNoGas() internal noGasMetering returns (uint256) { - return addInLoopNoGas(); - } - - function bytesToUint_test(bytes memory b) private pure returns (uint256) { - uint256 number; - for (uint256 i = 0; i < b.length; i++) { - number = number + uint256(uint8(b[i])) * (2 ** (8 * (b.length - (i + 1)))); - } - return number; - } - - function testAssumeNoPrecompiles(address addr) external { - assumeNoPrecompiles(addr, getChain("optimism_goerli").chainId); - assertTrue( - addr < address(1) || (addr > address(9) && addr < address(0x4200000000000000000000000000000000000000)) - || addr > address(0x4200000000000000000000000000000000000800) - ); - } -} - -contract Bar { - constructor() payable { - /// `DEAL` STDCHEAT - totalSupply = 10000e18; - balanceOf[address(this)] = totalSupply; - } - - /// `HOAX` STDCHEATS - function bar(address expectedSender) public payable { - require(msg.sender == expectedSender, "!prank"); - } - - function origin(address expectedSender) public payable { - require(msg.sender == expectedSender, "!prank"); - require(tx.origin == expectedSender, "!prank"); - } - - function origin(address expectedSender, address expectedOrigin) public payable { - require(msg.sender == expectedSender, "!prank"); - require(tx.origin == expectedOrigin, "!prank"); - } - - /// `DEAL` STDCHEAT - mapping(address => uint256) public balanceOf; - uint256 public totalSupply; -} - -contract RevertingContract { - constructor() { - revert(); - } -} diff --git a/lib/forge-std/test/StdError.t.sol b/lib/forge-std/test/StdError.t.sol deleted file mode 100644 index ccd3efac..00000000 --- a/lib/forge-std/test/StdError.t.sol +++ /dev/null @@ -1,118 +0,0 @@ -// SPDX-License-Identifier: MIT -pragma solidity >=0.8.0 <0.9.0; - -import "../src/StdError.sol"; -import "../src/Test.sol"; - -contract StdErrorsTest is Test { - ErrorsTest test; - - function setUp() public { - test = new ErrorsTest(); - } - - function testExpectAssertion() public { - vm.expectRevert(stdError.assertionError); - test.assertionError(); - } - - function testExpectArithmetic() public { - vm.expectRevert(stdError.arithmeticError); - test.arithmeticError(10); - } - - function testExpectDiv() public { - vm.expectRevert(stdError.divisionError); - test.divError(0); - } - - function testExpectMod() public { - vm.expectRevert(stdError.divisionError); - test.modError(0); - } - - function testExpectEnum() public { - vm.expectRevert(stdError.enumConversionError); - test.enumConversion(1); - } - - function testExpectEncodeStg() public { - vm.expectRevert(stdError.encodeStorageError); - test.encodeStgError(); - } - - function testExpectPop() public { - vm.expectRevert(stdError.popError); - test.pop(); - } - - function testExpectOOB() public { - vm.expectRevert(stdError.indexOOBError); - test.indexOOBError(1); - } - - function testExpectMem() public { - vm.expectRevert(stdError.memOverflowError); - test.mem(); - } - - function testExpectIntern() public { - vm.expectRevert(stdError.zeroVarError); - test.intern(); - } -} - -contract ErrorsTest { - enum T {T1} - - uint256[] public someArr; - bytes someBytes; - - function assertionError() public pure { - assert(false); - } - - function arithmeticError(uint256 a) public pure { - a -= 100; - } - - function divError(uint256 a) public pure { - 100 / a; - } - - function modError(uint256 a) public pure { - 100 % a; - } - - function enumConversion(uint256 a) public pure { - T(a); - } - - function encodeStgError() public { - /// @solidity memory-safe-assembly - assembly { - sstore(someBytes.slot, 1) - } - keccak256(someBytes); - } - - function pop() public { - someArr.pop(); - } - - function indexOOBError(uint256 a) public pure { - uint256[] memory t = new uint256[](0); - t[a]; - } - - function mem() public pure { - uint256 l = 2 ** 256 / 32; - new uint256[](l); - } - - function intern() public returns (uint256) { - function(uint256) internal returns (uint256) x; - x(2); - return 7; - } -} diff --git a/lib/forge-std/test/StdMath.t.sol b/lib/forge-std/test/StdMath.t.sol deleted file mode 100644 index 95037ea5..00000000 --- a/lib/forge-std/test/StdMath.t.sol +++ /dev/null @@ -1,197 +0,0 @@ -// SPDX-License-Identifier: MIT -pragma solidity >=0.8.0 <0.9.0; - -import "../src/StdMath.sol"; -import "../src/Test.sol"; - -contract StdMathTest is Test { - function testGetAbs() external { - assertEq(stdMath.abs(-50), 50); - assertEq(stdMath.abs(50), 50); - assertEq(stdMath.abs(-1337), 1337); - assertEq(stdMath.abs(0), 0); - - assertEq(stdMath.abs(type(int256).min), (type(uint256).max >> 1) + 1); - assertEq(stdMath.abs(type(int256).max), (type(uint256).max >> 1)); - } - - function testGetAbs_Fuzz(int256 a) external { - uint256 manualAbs = getAbs(a); - - uint256 abs = stdMath.abs(a); - - assertEq(abs, manualAbs); - } - - function testGetDelta_Uint() external { - assertEq(stdMath.delta(uint256(0), uint256(0)), 0); - assertEq(stdMath.delta(uint256(0), uint256(1337)), 1337); - assertEq(stdMath.delta(uint256(0), type(uint64).max), type(uint64).max); - assertEq(stdMath.delta(uint256(0), type(uint128).max), type(uint128).max); - assertEq(stdMath.delta(uint256(0), type(uint256).max), type(uint256).max); - - assertEq(stdMath.delta(0, uint256(0)), 0); - assertEq(stdMath.delta(1337, uint256(0)), 1337); - assertEq(stdMath.delta(type(uint64).max, uint256(0)), type(uint64).max); - assertEq(stdMath.delta(type(uint128).max, uint256(0)), type(uint128).max); - assertEq(stdMath.delta(type(uint256).max, uint256(0)), type(uint256).max); - - assertEq(stdMath.delta(1337, uint256(1337)), 0); - assertEq(stdMath.delta(type(uint256).max, type(uint256).max), 0); - assertEq(stdMath.delta(5000, uint256(1250)), 3750); - } - - function testGetDelta_Uint_Fuzz(uint256 a, uint256 b) external { - uint256 manualDelta; - if (a > b) { - manualDelta = a - b; - } else { - manualDelta = b - a; - } - - uint256 delta = stdMath.delta(a, b); - - assertEq(delta, manualDelta); - } - - function testGetDelta_Int() external { - assertEq(stdMath.delta(int256(0), int256(0)), 0); - assertEq(stdMath.delta(int256(0), int256(1337)), 1337); - assertEq(stdMath.delta(int256(0), type(int64).max), type(uint64).max >> 1); - assertEq(stdMath.delta(int256(0), type(int128).max), type(uint128).max >> 1); - assertEq(stdMath.delta(int256(0), type(int256).max), type(uint256).max >> 1); - - assertEq(stdMath.delta(0, int256(0)), 0); - assertEq(stdMath.delta(1337, int256(0)), 1337); - assertEq(stdMath.delta(type(int64).max, int256(0)), type(uint64).max >> 1); - assertEq(stdMath.delta(type(int128).max, int256(0)), type(uint128).max >> 1); - assertEq(stdMath.delta(type(int256).max, int256(0)), type(uint256).max >> 1); - - assertEq(stdMath.delta(-0, int256(0)), 0); - assertEq(stdMath.delta(-1337, int256(0)), 1337); - assertEq(stdMath.delta(type(int64).min, int256(0)), (type(uint64).max >> 1) + 1); - assertEq(stdMath.delta(type(int128).min, int256(0)), (type(uint128).max >> 1) + 1); - assertEq(stdMath.delta(type(int256).min, int256(0)), (type(uint256).max >> 1) + 1); - - assertEq(stdMath.delta(int256(0), -0), 0); - assertEq(stdMath.delta(int256(0), -1337), 1337); - assertEq(stdMath.delta(int256(0), type(int64).min), (type(uint64).max >> 1) + 1); - assertEq(stdMath.delta(int256(0), type(int128).min), (type(uint128).max >> 1) + 1); - assertEq(stdMath.delta(int256(0), type(int256).min), (type(uint256).max >> 1) + 1); - - assertEq(stdMath.delta(1337, int256(1337)), 0); - assertEq(stdMath.delta(type(int256).max, type(int256).max), 0); - assertEq(stdMath.delta(type(int256).min, type(int256).min), 0); - assertEq(stdMath.delta(type(int256).min, type(int256).max), type(uint256).max); - assertEq(stdMath.delta(5000, int256(1250)), 3750); - } - - function testGetDelta_Int_Fuzz(int256 a, int256 b) external { - uint256 absA = getAbs(a); - uint256 absB = getAbs(b); - uint256 absDelta = absA > absB ? absA - absB : absB - absA; - - uint256 manualDelta; - if ((a >= 0 && b >= 0) || (a < 0 && b < 0)) { - manualDelta = absDelta; - } - // (a < 0 && b >= 0) || (a >= 0 && b < 0) - else { - manualDelta = absA + absB; - } - - uint256 delta = stdMath.delta(a, b); - - assertEq(delta, manualDelta); - } - - function testGetPercentDelta_Uint() external { - assertEq(stdMath.percentDelta(uint256(0), uint256(1337)), 1e18); - assertEq(stdMath.percentDelta(uint256(0), type(uint64).max), 1e18); - assertEq(stdMath.percentDelta(uint256(0), type(uint128).max), 1e18); - assertEq(stdMath.percentDelta(uint256(0), type(uint192).max), 1e18); - - assertEq(stdMath.percentDelta(1337, uint256(1337)), 0); - assertEq(stdMath.percentDelta(type(uint192).max, type(uint192).max), 0); - assertEq(stdMath.percentDelta(0, uint256(2500)), 1e18); - assertEq(stdMath.percentDelta(2500, uint256(2500)), 0); - assertEq(stdMath.percentDelta(5000, uint256(2500)), 1e18); - assertEq(stdMath.percentDelta(7500, uint256(2500)), 2e18); - - vm.expectRevert(stdError.divisionError); - stdMath.percentDelta(uint256(1), 0); - } - - function testGetPercentDelta_Uint_Fuzz(uint192 a, uint192 b) external { - vm.assume(b != 0); - uint256 manualDelta; - if (a > b) { - manualDelta = a - b; - } else { - manualDelta = b - a; - } - - uint256 manualPercentDelta = manualDelta * 1e18 / b; - uint256 percentDelta = stdMath.percentDelta(a, b); - - assertEq(percentDelta, manualPercentDelta); - } - - function testGetPercentDelta_Int() external { - assertEq(stdMath.percentDelta(int256(0), int256(1337)), 1e18); - assertEq(stdMath.percentDelta(int256(0), -1337), 1e18); - assertEq(stdMath.percentDelta(int256(0), type(int64).min), 1e18); - assertEq(stdMath.percentDelta(int256(0), type(int128).min), 1e18); - assertEq(stdMath.percentDelta(int256(0), type(int192).min), 1e18); - assertEq(stdMath.percentDelta(int256(0), type(int64).max), 1e18); - assertEq(stdMath.percentDelta(int256(0), type(int128).max), 1e18); - assertEq(stdMath.percentDelta(int256(0), type(int192).max), 1e18); - - assertEq(stdMath.percentDelta(1337, int256(1337)), 0); - assertEq(stdMath.percentDelta(type(int192).max, type(int192).max), 0); - assertEq(stdMath.percentDelta(type(int192).min, type(int192).min), 0); - - assertEq(stdMath.percentDelta(type(int192).min, type(int192).max), 2e18); // rounds the 1 wei diff down - assertEq(stdMath.percentDelta(type(int192).max, type(int192).min), 2e18 - 1); // rounds the 1 wei diff down - assertEq(stdMath.percentDelta(0, int256(2500)), 1e18); - assertEq(stdMath.percentDelta(2500, int256(2500)), 0); - assertEq(stdMath.percentDelta(5000, int256(2500)), 1e18); - assertEq(stdMath.percentDelta(7500, int256(2500)), 2e18); - - vm.expectRevert(stdError.divisionError); - stdMath.percentDelta(int256(1), 0); - } - - function testGetPercentDelta_Int_Fuzz(int192 a, int192 b) external { - vm.assume(b != 0); - uint256 absA = getAbs(a); - uint256 absB = getAbs(b); - uint256 absDelta = absA > absB ? absA - absB : absB - absA; - - uint256 manualDelta; - if ((a >= 0 && b >= 0) || (a < 0 && b < 0)) { - manualDelta = absDelta; - } - // (a < 0 && b >= 0) || (a >= 0 && b < 0) - else { - manualDelta = absA + absB; - } - - uint256 manualPercentDelta = manualDelta * 1e18 / absB; - uint256 percentDelta = stdMath.percentDelta(a, b); - - assertEq(percentDelta, manualPercentDelta); - } - - /*////////////////////////////////////////////////////////////////////////// - HELPERS - //////////////////////////////////////////////////////////////////////////*/ - - function getAbs(int256 a) private pure returns (uint256) { - if (a < 0) { - return a == type(int256).min ? uint256(type(int256).max) + 1 : uint256(-a); - } - - return uint256(a); - } -} diff --git a/lib/forge-std/test/StdStorage.t.sol b/lib/forge-std/test/StdStorage.t.sol deleted file mode 100644 index d4c563a0..00000000 --- a/lib/forge-std/test/StdStorage.t.sol +++ /dev/null @@ -1,283 +0,0 @@ -// SPDX-License-Identifier: MIT -pragma solidity >=0.7.0 <0.9.0; - -import "../src/StdStorage.sol"; -import "../src/Test.sol"; - -contract StdStorageTest is Test { - using stdStorage for StdStorage; - - StorageTest internal test; - - function setUp() public { - test = new StorageTest(); - } - - function testStorageHidden() public { - assertEq(uint256(keccak256("my.random.var")), stdstore.target(address(test)).sig("hidden()").find()); - } - - function testStorageObvious() public { - assertEq(uint256(0), stdstore.target(address(test)).sig("exists()").find()); - } - - function testStorageCheckedWriteHidden() public { - stdstore.target(address(test)).sig(test.hidden.selector).checked_write(100); - assertEq(uint256(test.hidden()), 100); - } - - function testStorageCheckedWriteObvious() public { - stdstore.target(address(test)).sig(test.exists.selector).checked_write(100); - assertEq(test.exists(), 100); - } - - function testStorageMapStructA() public { - uint256 slot = - stdstore.target(address(test)).sig(test.map_struct.selector).with_key(address(this)).depth(0).find(); - assertEq(uint256(keccak256(abi.encode(address(this), 4))), slot); - } - - function testStorageMapStructB() public { - uint256 slot = - stdstore.target(address(test)).sig(test.map_struct.selector).with_key(address(this)).depth(1).find(); - assertEq(uint256(keccak256(abi.encode(address(this), 4))) + 1, slot); - } - - function testStorageDeepMap() public { - uint256 slot = stdstore.target(address(test)).sig(test.deep_map.selector).with_key(address(this)).with_key( - address(this) - ).find(); - assertEq(uint256(keccak256(abi.encode(address(this), keccak256(abi.encode(address(this), uint256(5)))))), slot); - } - - function testStorageCheckedWriteDeepMap() public { - stdstore.target(address(test)).sig(test.deep_map.selector).with_key(address(this)).with_key(address(this)) - .checked_write(100); - assertEq(100, test.deep_map(address(this), address(this))); - } - - function testStorageDeepMapStructA() public { - uint256 slot = stdstore.target(address(test)).sig(test.deep_map_struct.selector).with_key(address(this)) - .with_key(address(this)).depth(0).find(); - assertEq( - bytes32(uint256(keccak256(abi.encode(address(this), keccak256(abi.encode(address(this), uint256(6)))))) + 0), - bytes32(slot) - ); - } - - function testStorageDeepMapStructB() public { - uint256 slot = stdstore.target(address(test)).sig(test.deep_map_struct.selector).with_key(address(this)) - .with_key(address(this)).depth(1).find(); - assertEq( - bytes32(uint256(keccak256(abi.encode(address(this), keccak256(abi.encode(address(this), uint256(6)))))) + 1), - bytes32(slot) - ); - } - - function testStorageCheckedWriteDeepMapStructA() public { - stdstore.target(address(test)).sig(test.deep_map_struct.selector).with_key(address(this)).with_key( - address(this) - ).depth(0).checked_write(100); - (uint256 a, uint256 b) = test.deep_map_struct(address(this), address(this)); - assertEq(100, a); - assertEq(0, b); - } - - function testStorageCheckedWriteDeepMapStructB() public { - stdstore.target(address(test)).sig(test.deep_map_struct.selector).with_key(address(this)).with_key( - address(this) - ).depth(1).checked_write(100); - (uint256 a, uint256 b) = test.deep_map_struct(address(this), address(this)); - assertEq(0, a); - assertEq(100, b); - } - - function testStorageCheckedWriteMapStructA() public { - stdstore.target(address(test)).sig(test.map_struct.selector).with_key(address(this)).depth(0).checked_write(100); - (uint256 a, uint256 b) = test.map_struct(address(this)); - assertEq(a, 100); - assertEq(b, 0); - } - - function testStorageCheckedWriteMapStructB() public { - stdstore.target(address(test)).sig(test.map_struct.selector).with_key(address(this)).depth(1).checked_write(100); - (uint256 a, uint256 b) = test.map_struct(address(this)); - assertEq(a, 0); - assertEq(b, 100); - } - - function testStorageStructA() public { - uint256 slot = stdstore.target(address(test)).sig(test.basic.selector).depth(0).find(); - assertEq(uint256(7), slot); - } - - function testStorageStructB() public { - uint256 slot = stdstore.target(address(test)).sig(test.basic.selector).depth(1).find(); - assertEq(uint256(7) + 1, slot); - } - - function testStorageCheckedWriteStructA() public { - stdstore.target(address(test)).sig(test.basic.selector).depth(0).checked_write(100); - (uint256 a, uint256 b) = test.basic(); - assertEq(a, 100); - assertEq(b, 1337); - } - - function testStorageCheckedWriteStructB() public { - stdstore.target(address(test)).sig(test.basic.selector).depth(1).checked_write(100); - (uint256 a, uint256 b) = test.basic(); - assertEq(a, 1337); - assertEq(b, 100); - } - - function testStorageMapAddrFound() public { - uint256 slot = stdstore.target(address(test)).sig(test.map_addr.selector).with_key(address(this)).find(); - assertEq(uint256(keccak256(abi.encode(address(this), uint256(1)))), slot); - } - - function testStorageMapUintFound() public { - uint256 slot = stdstore.target(address(test)).sig(test.map_uint.selector).with_key(100).find(); - assertEq(uint256(keccak256(abi.encode(100, uint256(2)))), slot); - } - - function testStorageCheckedWriteMapUint() public { - stdstore.target(address(test)).sig(test.map_uint.selector).with_key(100).checked_write(100); - assertEq(100, test.map_uint(100)); - } - - function testStorageCheckedWriteMapAddr() public { - stdstore.target(address(test)).sig(test.map_addr.selector).with_key(address(this)).checked_write(100); - assertEq(100, test.map_addr(address(this))); - } - - function testStorageCheckedWriteMapBool() public { - stdstore.target(address(test)).sig(test.map_bool.selector).with_key(address(this)).checked_write(true); - assertTrue(test.map_bool(address(this))); - } - - function testFailStorageCheckedWriteMapPacked() public { - // expect PackedSlot error but not external call so cant expectRevert - stdstore.target(address(test)).sig(test.read_struct_lower.selector).with_key(address(uint160(1337))) - .checked_write(100); - } - - function testStorageCheckedWriteMapPackedSuccess() public { - uint256 full = test.map_packed(address(1337)); - // keep upper 128, set lower 128 to 1337 - full = (full & (uint256((1 << 128) - 1) << 128)) | 1337; - stdstore.target(address(test)).sig(test.map_packed.selector).with_key(address(uint160(1337))).checked_write( - full - ); - assertEq(1337, test.read_struct_lower(address(1337))); - } - - function testFailStorageConst() public { - // vm.expectRevert(abi.encodeWithSignature("NotStorage(bytes4)", bytes4(keccak256("const()")))); - stdstore.target(address(test)).sig("const()").find(); - } - - function testFailStorageNativePack() public { - stdstore.target(address(test)).sig(test.tA.selector).find(); - stdstore.target(address(test)).sig(test.tB.selector).find(); - - // these both would fail - stdstore.target(address(test)).sig(test.tC.selector).find(); - stdstore.target(address(test)).sig(test.tD.selector).find(); - } - - function testStorageReadBytes32() public { - bytes32 val = stdstore.target(address(test)).sig(test.tE.selector).read_bytes32(); - assertEq(val, hex"1337"); - } - - function testStorageReadBool_False() public { - bool val = stdstore.target(address(test)).sig(test.tB.selector).read_bool(); - assertEq(val, false); - } - - function testStorageReadBool_True() public { - bool val = stdstore.target(address(test)).sig(test.tH.selector).read_bool(); - assertEq(val, true); - } - - function testStorageReadBool_Revert() public { - vm.expectRevert("stdStorage read_bool(StdStorage): Cannot decode. Make sure you are reading a bool."); - this.readNonBoolValue(); - } - - function readNonBoolValue() public { - stdstore.target(address(test)).sig(test.tE.selector).read_bool(); - } - - function testStorageReadAddress() public { - address val = stdstore.target(address(test)).sig(test.tF.selector).read_address(); - assertEq(val, address(1337)); - } - - function testStorageReadUint() public { - uint256 val = stdstore.target(address(test)).sig(test.exists.selector).read_uint(); - assertEq(val, 1); - } - - function testStorageReadInt() public { - int256 val = stdstore.target(address(test)).sig(test.tG.selector).read_int(); - assertEq(val, type(int256).min); - } -} - -contract StorageTest { - uint256 public exists = 1; - mapping(address => uint256) public map_addr; - mapping(uint256 => uint256) public map_uint; - mapping(address => uint256) public map_packed; - mapping(address => UnpackedStruct) public map_struct; - mapping(address => mapping(address => uint256)) public deep_map; - mapping(address => mapping(address => UnpackedStruct)) public deep_map_struct; - UnpackedStruct public basic; - - uint248 public tA; - bool public tB; - - bool public tC = false; - uint248 public tD = 1; - - struct UnpackedStruct { - uint256 a; - uint256 b; - } - - mapping(address => bool) public map_bool; - - bytes32 public tE = hex"1337"; - address public tF = address(1337); - int256 public tG = type(int256).min; - bool public tH = true; - - constructor() { - basic = UnpackedStruct({a: 1337, b: 1337}); - - uint256 two = (1 << 128) | 1; - map_packed[msg.sender] = two; - map_packed[address(uint160(1337))] = 1 << 128; - } - - function read_struct_upper(address who) public view returns (uint256) { - return map_packed[who] >> 128; - } - - function read_struct_lower(address who) public view returns (uint256) { - return map_packed[who] & ((1 << 128) - 1); - } - - function hidden() public view returns (bytes32 t) { - bytes32 slot = keccak256("my.random.var"); - /// @solidity memory-safe-assembly - assembly { - t := sload(slot) - } - } - - function const() public pure returns (bytes32 t) { - t = bytes32(hex"1337"); - } -} diff --git a/lib/forge-std/test/StdUtils.t.sol b/lib/forge-std/test/StdUtils.t.sol deleted file mode 100644 index 7ecd2a96..00000000 --- a/lib/forge-std/test/StdUtils.t.sol +++ /dev/null @@ -1,107 +0,0 @@ -// SPDX-License-Identifier: MIT -pragma solidity >=0.7.0 <0.9.0; - -import "../src/Test.sol"; - -contract StdUtilsTest is Test { - function testBound() public { - assertEq(bound(5, 0, 4), 0); - assertEq(bound(0, 69, 69), 69); - assertEq(bound(0, 68, 69), 68); - assertEq(bound(10, 150, 190), 174); - assertEq(bound(300, 2800, 3200), 3107); - assertEq(bound(9999, 1337, 6666), 4669); - } - - function testBound_WithinRange() public { - assertEq(bound(51, 50, 150), 51); - assertEq(bound(51, 50, 150), bound(bound(51, 50, 150), 50, 150)); - assertEq(bound(149, 50, 150), 149); - assertEq(bound(149, 50, 150), bound(bound(149, 50, 150), 50, 150)); - } - - function testBound_EdgeCoverage() public { - assertEq(bound(0, 50, 150), 50); - assertEq(bound(1, 50, 150), 51); - assertEq(bound(2, 50, 150), 52); - assertEq(bound(3, 50, 150), 53); - assertEq(bound(type(uint256).max, 50, 150), 150); - assertEq(bound(type(uint256).max - 1, 50, 150), 149); - assertEq(bound(type(uint256).max - 2, 50, 150), 148); - assertEq(bound(type(uint256).max - 3, 50, 150), 147); - } - - function testBound_DistributionIsEven(uint256 min, uint256 size) public { - size = size % 100 + 1; - min = bound(min, UINT256_MAX / 2, UINT256_MAX / 2 + size); - uint256 max = min + size - 1; - uint256 result; - - for (uint256 i = 1; i <= size * 4; ++i) { - // x > max - result = bound(max + i, min, max); - assertEq(result, min + (i - 1) % size); - // x < min - result = bound(min - i, min, max); - assertEq(result, max - (i - 1) % size); - } - } - - function testBound(uint256 num, uint256 min, uint256 max) public { - if (min > max) (min, max) = (max, min); - - uint256 result = bound(num, min, max); - - assertGe(result, min); - assertLe(result, max); - assertEq(result, bound(result, min, max)); - if (num >= min && num <= max) assertEq(result, num); - } - - function testBoundUint256Max() public { - assertEq(bound(0, type(uint256).max - 1, type(uint256).max), type(uint256).max - 1); - assertEq(bound(1, type(uint256).max - 1, type(uint256).max), type(uint256).max); - } - - function testCannotBoundMaxLessThanMin() public { - vm.expectRevert(bytes("StdUtils bound(uint256,uint256,uint256): Max is less than min.")); - bound(5, 100, 10); - } - - function testCannotBoundMaxLessThanMin(uint256 num, uint256 min, uint256 max) public { - vm.assume(min > max); - vm.expectRevert(bytes("StdUtils bound(uint256,uint256,uint256): Max is less than min.")); - bound(num, min, max); - } - - function testGenerateCreateAddress() external { - address deployer = 0x6C9FC64A53c1b71FB3f9Af64d1ae3A4931A5f4E9; - uint256 nonce = 14; - address createAddress = computeCreateAddress(deployer, nonce); - assertEq(createAddress, 0x68b3465833fb72A70ecDF485E0e4C7bD8665Fc45); - } - - function testGenerateCreate2Address() external { - bytes32 salt = bytes32(uint256(31415)); - bytes32 initcodeHash = keccak256(abi.encode(0x6080)); - address deployer = 0x6C9FC64A53c1b71FB3f9Af64d1ae3A4931A5f4E9; - address create2Address = computeCreate2Address(salt, initcodeHash, deployer); - assertEq(create2Address, 0xB147a5d25748fda14b463EB04B111027C290f4d3); - } - - function testBytesToUint() external { - bytes memory maxUint = hex"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"; - bytes memory two = hex"02"; - bytes memory millionEther = hex"d3c21bcecceda1000000"; - - assertEq(bytesToUint(maxUint), type(uint256).max); - assertEq(bytesToUint(two), 2); - assertEq(bytesToUint(millionEther), 1_000_000 ether); - } - - function testCannotConvertGT32Bytes() external { - bytes memory thirty3Bytes = hex"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"; - vm.expectRevert("StdUtils bytesToUint(bytes): Bytes length exceeds 32."); - bytesToUint(thirty3Bytes); - } -} diff --git a/lib/forge-std/test/compilation/CompilationScript.sol b/lib/forge-std/test/compilation/CompilationScript.sol deleted file mode 100644 index e205cfff..00000000 --- a/lib/forge-std/test/compilation/CompilationScript.sol +++ /dev/null @@ -1,10 +0,0 @@ -// SPDX-License-Identifier: MIT -pragma solidity >=0.6.2 <0.9.0; - -pragma experimental ABIEncoderV2; - -import "../../src/Script.sol"; - -// The purpose of this contract is to benchmark compilation time to avoid accidentally introducing -// a change that results in very long compilation times with via-ir. See https://github.com/foundry-rs/forge-std/issues/207 -contract CompilationScript is Script {} diff --git a/lib/forge-std/test/compilation/CompilationScriptBase.sol b/lib/forge-std/test/compilation/CompilationScriptBase.sol deleted file mode 100644 index ce8e0e95..00000000 --- a/lib/forge-std/test/compilation/CompilationScriptBase.sol +++ /dev/null @@ -1,10 +0,0 @@ -// SPDX-License-Identifier: MIT -pragma solidity >=0.6.2 <0.9.0; - -pragma experimental ABIEncoderV2; - -import "../../src/Script.sol"; - -// The purpose of this contract is to benchmark compilation time to avoid accidentally introducing -// a change that results in very long compilation times with via-ir. See https://github.com/foundry-rs/forge-std/issues/207 -contract CompilationScriptBase is ScriptBase {} diff --git a/lib/forge-std/test/compilation/CompilationTest.sol b/lib/forge-std/test/compilation/CompilationTest.sol deleted file mode 100644 index 9beeafeb..00000000 --- a/lib/forge-std/test/compilation/CompilationTest.sol +++ /dev/null @@ -1,10 +0,0 @@ -// SPDX-License-Identifier: MIT -pragma solidity >=0.6.2 <0.9.0; - -pragma experimental ABIEncoderV2; - -import "../../src/Test.sol"; - -// The purpose of this contract is to benchmark compilation time to avoid accidentally introducing -// a change that results in very long compilation times with via-ir. See https://github.com/foundry-rs/forge-std/issues/207 -contract CompilationTest is Test {} diff --git a/lib/forge-std/test/compilation/CompilationTestBase.sol b/lib/forge-std/test/compilation/CompilationTestBase.sol deleted file mode 100644 index e993535b..00000000 --- a/lib/forge-std/test/compilation/CompilationTestBase.sol +++ /dev/null @@ -1,10 +0,0 @@ -// SPDX-License-Identifier: MIT -pragma solidity >=0.6.2 <0.9.0; - -pragma experimental ABIEncoderV2; - -import "../../src/Test.sol"; - -// The purpose of this contract is to benchmark compilation time to avoid accidentally introducing -// a change that results in very long compilation times with via-ir. See https://github.com/foundry-rs/forge-std/issues/207 -contract CompilationTestBase is TestBase {} diff --git a/lib/forge-std/test/fixtures/broadcast.log.json b/lib/forge-std/test/fixtures/broadcast.log.json deleted file mode 100644 index 0a0200bc..00000000 --- a/lib/forge-std/test/fixtures/broadcast.log.json +++ /dev/null @@ -1,187 +0,0 @@ -{ - "transactions": [ - { - "hash": "0xc6006863c267735a11476b7f15b15bc718e117e2da114a2be815dd651e1a509f", - "type": "CALL", - "contractName": "Test", - "contractAddress": "0xe7f1725e7734ce288f8367e1bb143e90bb3f0512", - "function": "multiple_arguments(uint256,address,uint256[]):(uint256)", - "arguments": ["1", "0000000000000000000000000000000000001337", "[3,4]"], - "tx": { - "type": "0x02", - "from": "0xf39fd6e51aad88f6f4ce6ab8827279cfffb92266", - "to": "0xe7f1725e7734ce288f8367e1bb143e90bb3f0512", - "gas": "0x73b9", - "value": "0x0", - "data": "0x23e99187000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000013370000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000004", - "nonce": "0x3", - "accessList": [] - } - }, - { - "hash": "0xedf2b38d8d896519a947a1acf720f859bb35c0c5ecb8dd7511995b67b9853298", - "type": "CALL", - "contractName": "Test", - "contractAddress": "0xe7f1725e7734ce288f8367e1bb143e90bb3f0512", - "function": "inc():(uint256)", - "arguments": [], - "tx": { - "type": "0x02", - "from": "0xf39fd6e51aad88f6f4ce6ab8827279cfffb92266", - "to": "0xe7f1725e7734ce288f8367e1bb143e90bb3f0512", - "gas": "0xdcb2", - "value": "0x0", - "data": "0x371303c0", - "nonce": "0x4", - "accessList": [] - } - }, - { - "hash": "0xa57e8e3981a6c861442e46c9471bd19cb3e21f9a8a6c63a72e7b5c47c6675a7c", - "type": "CALL", - "contractName": "Test", - "contractAddress": "0x7c6b4bbe207d642d98d5c537142d85209e585087", - "function": "t(uint256):(uint256)", - "arguments": ["1"], - "tx": { - "type": "0x02", - "from": "0xf39fd6e51aad88f6f4ce6ab8827279cfffb92266", - "to": "0x7c6b4bbe207d642d98d5c537142d85209e585087", - "gas": "0x8599", - "value": "0x0", - "data": "0xafe29f710000000000000000000000000000000000000000000000000000000000000001", - "nonce": "0x5", - "accessList": [] - } - } - ], - "receipts": [ - { - "transactionHash": "0x481dc86e40bba90403c76f8e144aa9ff04c1da2164299d0298573835f0991181", - "transactionIndex": "0x0", - "blockHash": "0xef0730448490304e5403be0fa8f8ce64f118e9adcca60c07a2ae1ab921d748af", - "blockNumber": "0x1", - "from": "0xf39fd6e51aad88f6f4ce6ab8827279cfffb92266", - "to": null, - "cumulativeGasUsed": "0x13f3a", - "gasUsed": "0x13f3a", - "contractAddress": "0x5fbdb2315678afecb367f032d93f642f64180aa3", - "logs": [], - "status": "0x1", - "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "effectiveGasPrice": "0xee6b2800" - }, - { - "transactionHash": "0x6a187183545b8a9e7f1790e847139379bf5622baff2cb43acf3f5c79470af782", - "transactionIndex": "0x0", - "blockHash": "0xf3acb96a90071640c2a8c067ae4e16aad87e634ea8d8bbbb5b352fba86ba0148", - "blockNumber": "0x2", - "from": "0xf39fd6e51aad88f6f4ce6ab8827279cfffb92266", - "to": null, - "cumulativeGasUsed": "0x45d80", - "gasUsed": "0x45d80", - "contractAddress": "0xe7f1725e7734ce288f8367e1bb143e90bb3f0512", - "logs": [], - "status": "0x1", - "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "effectiveGasPrice": "0xee6b2800" - }, - { - "transactionHash": "0x064ad173b4867bdef2fb60060bbdaf01735fbf10414541ea857772974e74ea9d", - "transactionIndex": "0x0", - "blockHash": "0x8373d02109d3ee06a0225f23da4c161c656ccc48fe0fcee931d325508ae73e58", - "blockNumber": "0x3", - "from": "0xf39fd6e51aad88f6f4ce6ab8827279cfffb92266", - "to": "0x4e59b44847b379578588920ca78fbf26c0b4956c", - "cumulativeGasUsed": "0x45feb", - "gasUsed": "0x45feb", - "contractAddress": null, - "logs": [], - "status": "0x1", - "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "effectiveGasPrice": "0xee6b2800" - }, - { - "transactionHash": "0xc6006863c267735a11476b7f15b15bc718e117e2da114a2be815dd651e1a509f", - "transactionIndex": "0x0", - "blockHash": "0x16712fae5c0e18f75045f84363fb6b4d9a9fe25e660c4ce286833a533c97f629", - "blockNumber": "0x4", - "from": "0xf39fd6e51aad88f6f4ce6ab8827279cfffb92266", - "to": "0xe7f1725e7734ce288f8367e1bb143e90bb3f0512", - "cumulativeGasUsed": "0x5905", - "gasUsed": "0x5905", - "contractAddress": null, - "logs": [], - "status": "0x1", - "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "effectiveGasPrice": "0xee6b2800" - }, - { - "transactionHash": "0xedf2b38d8d896519a947a1acf720f859bb35c0c5ecb8dd7511995b67b9853298", - "transactionIndex": "0x0", - "blockHash": "0x156b88c3eb9a1244ba00a1834f3f70de735b39e3e59006dd03af4fe7d5480c11", - "blockNumber": "0x5", - "from": "0xf39fd6e51aad88f6f4ce6ab8827279cfffb92266", - "to": "0xe7f1725e7734ce288f8367e1bb143e90bb3f0512", - "cumulativeGasUsed": "0xa9c4", - "gasUsed": "0xa9c4", - "contractAddress": null, - "logs": [], - "status": "0x1", - "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "effectiveGasPrice": "0xee6b2800" - }, - { - "transactionHash": "0xa57e8e3981a6c861442e46c9471bd19cb3e21f9a8a6c63a72e7b5c47c6675a7c", - "transactionIndex": "0x0", - "blockHash": "0xcf61faca67dbb2c28952b0b8a379e53b1505ae0821e84779679390cb8571cadb", - "blockNumber": "0x6", - "from": "0xf39fd6e51aad88f6f4ce6ab8827279cfffb92266", - "to": "0x7c6b4bbe207d642d98d5c537142d85209e585087", - "cumulativeGasUsed": "0x66c5", - "gasUsed": "0x66c5", - "contractAddress": null, - "logs": [ - { - "address": "0x7c6b4bbe207d642d98d5c537142d85209e585087", - "topics": [ - "0x0b2e13ff20ac7b474198655583edf70dedd2c1dc980e329c4fbb2fc0748b796b" - ], - "data": "0x000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000046865726500000000000000000000000000000000000000000000000000000000", - "blockHash": "0xcf61faca67dbb2c28952b0b8a379e53b1505ae0821e84779679390cb8571cadb", - "blockNumber": "0x6", - "transactionHash": "0xa57e8e3981a6c861442e46c9471bd19cb3e21f9a8a6c63a72e7b5c47c6675a7c", - "transactionIndex": "0x1", - "logIndex": "0x0", - "transactionLogIndex": "0x0", - "removed": false - } - ], - "status": "0x1", - "logsBloom": "0x00000000000800000000000000000010000000000000000000000000000180000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100", - "effectiveGasPrice": "0xee6b2800" - }, - { - "transactionHash": "0x11fbb10230c168ca1e36a7e5c69a6dbcd04fd9e64ede39d10a83e36ee8065c16", - "transactionIndex": "0x0", - "blockHash": "0xf1e0ed2eda4e923626ec74621006ed50b3fc27580dc7b4cf68a07ca77420e29c", - "blockNumber": "0x7", - "from": "0xf39fd6e51aad88f6f4ce6ab8827279cfffb92266", - "to": "0x0000000000000000000000000000000000001337", - "cumulativeGasUsed": "0x5208", - "gasUsed": "0x5208", - "contractAddress": null, - "logs": [], - "status": "0x1", - "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "effectiveGasPrice": "0xee6b2800" - } - ], - "libraries": [ - "src/Broadcast.t.sol:F:0x5fbdb2315678afecb367f032d93f642f64180aa3" - ], - "pending": [], - "path": "broadcast/Broadcast.t.sol/31337/run-latest.json", - "returns": {}, - "timestamp": 1655140035 -} diff --git a/package-lock.json b/package-lock.json index 4395e956..5f652cbd 100644 --- a/package-lock.json +++ b/package-lock.json @@ -9,22 +9,24 @@ "version": "1.0.0", "license": "ISC", "dependencies": { - "@chainlink/contracts": "0.5.1", - "@ethereumjs/common": "^3.0.2", - "@ethereumjs/tx": "^4.0.2", + "@chainlink/contracts": "0.6.1", + "@ethereumjs/common": "^3.1.2", + "@ethereumjs/tx": "^4.1.2", "@ethersproject/hardware-wallets": "^5.7.0", - "@flashbots/ethers-provider-bundle": "^0.6.0", + "@flashbots/ethers-provider-bundle": "^0.6.1", "@maticnetwork/maticjs": "^3.5.0", "@maticnetwork/maticjs-ethers": "^1.0.3", "@maticnetwork/maticjs-web3": "^1.0.4", "@matterlabs/hardhat-zksync-chai-matchers": "^0.1.2", - "@openzeppelin/contracts": "^4.8.2", - "@openzeppelin/hardhat-upgrades": "^1.22.0", + "@matterlabs/hardhat-zksync-deploy": "^0.6.3", + "@matterlabs/hardhat-zksync-solc": "^0.3.16", + "@openzeppelin/contracts": "^4.8.3", + "@openzeppelin/hardhat-upgrades": "^1.26.0", "@poanet/solidity-flattener": "^3.0.8", - "@solana/spl-token": "^0.3.6", - "@solana/web3.js": "^1.73.0", - "@truffle/hdwallet-provider": "^2.1.4", - "@types/express": "^4.17.15", + "@solana/spl-token": "^0.3.7", + "@solana/web3.js": "^1.76.0", + "@truffle/hdwallet-provider": "^2.1.11", + "@types/express": "^4.17.17", "@types/node": "^18.11.18", "@types/web3": "^1.2.2", "@uniswap/sdk-core": "^3.1.0", @@ -33,56 +35,55 @@ "@uniswap/v3-periphery": "^1.4.3", "@uniswap/v3-sdk": "^3.9.0", "bignumber.js": "^9.1.1", - "bnc-sdk": "^4.6.3", + "bnc-sdk": "^4.6.7", "chalk": "^4.1.2", - "cross-fetch": "^3.1.5", + "data-fns": "^1.1.0", + "cross-fetch": "^3.1.6", "dotenv": "^16.0.3", "esm": "^3.2.25", "ethereumjs-tx": "^2.1.2", "flashbots": "^1.0.0", - "fs-extra": "^11.1.0", + "fs-extra": "^11.1.1", "ganache-core": "^2.13.2", - "hardhat-contract-sizer": "^2.6.1", + "hardhat-contract-sizer": "^2.8.0", "hardhat-gas-reporter": "^1.0.9", "hardhat-spdx-license-identifier": "^2.1.0", "https": "^1.0.0", - "mathjs": "^11.5.0", - "nodemon": "^2.0.20", + "mathjs": "^11.8.0", + "nodemon": "^2.0.22", "path": "^0.12.7", "prb-math": "^2.4.3", "require-from-string": "^2.0.2", - "solc": "0.8.17", + "solc": "0.8.20", "to-hex": "0.0.18", - "truffle": "^5.7.1", + "toml": "^3.0.0", + "truffle": "^5.9.0", "truffle-contract-size": "^2.0.1", "truffle-hdwallet-provider": "^1.0.6", - "tslib": "^2.4.1", + "tslib": "^2.5.1", + "typescript": "^5.0.4", "util": "^0.12.5", - "web3-eth-contract": "^1.8.1", - "web3-utils": "^1.8.1", - "ws": "^8.11.0" + "web3-eth-contract": "^1.10.0", + "web3-utils": "^1.10.0", + "ws": "^8.13.0", + "zksync-web3": "^0.14.3" }, "devDependencies": { - "@matterlabs/hardhat-zksync-deploy": "^0.6.3", - "@matterlabs/hardhat-zksync-solc": "^0.3.14", - "@nomiclabs/hardhat-ethers": "^2.2.1", - "@nomiclabs/hardhat-etherscan": "^3.1.4", + "@nomiclabs/hardhat-ethers": "^2.2.3", + "@nomiclabs/hardhat-etherscan": "^3.1.7", "@nomiclabs/hardhat-truffle5": "^2.0.7", - "@nomiclabs/hardhat-vyper": "^3.0.2", - "@nomiclabs/hardhat-waffle": "^2.0.3", + "@nomiclabs/hardhat-vyper": "^3.0.3", + "@nomiclabs/hardhat-waffle": "^2.0.5", "@nomiclabs/hardhat-web3": "^2.0.0", - "@openzeppelin/hardhat-upgrades": "^1.22.0", + "@openzeppelin/hardhat-upgrades": "^1.26.0", "@openzeppelin/test-helpers": "^0.5.16", "chai": "^4.3.7", - "ethereum-waffle": "^3.4.4", + "ethereum-waffle": "^4.0.10", "ethers": "^5.7.2", - "hardhat": "^2.13.0", - "hardhat-deploy": "^0.11.22", + "hardhat": "^2.14.0", + "hardhat-deploy": "^0.11.29", "json-loader": "^0.5.7", - "ts-node": "^10.9.1", - "typescript": "^5.0.3", - "web3": "^1.8.1", - "zksync-web3": "^0.14.3" + "web3": "^1.10.0" } }, "node_modules/@ampproject/remapping": { @@ -124,9 +125,9 @@ } }, "node_modules/@apollo/usage-reporting-protobuf": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/@apollo/usage-reporting-protobuf/-/usage-reporting-protobuf-4.0.2.tgz", - "integrity": "sha512-GfE8aDqi/lAFut95pjH9IRvH0zGsQ5G/2lYL0ZLZfML7ArX+A4UVHFANQcPCcUYGE6bI6OPhLekg4Vsjf6B1cw==", + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/@apollo/usage-reporting-protobuf/-/usage-reporting-protobuf-4.1.0.tgz", + "integrity": "sha512-hXouMuw5pQVkzi8dgMybmr6Y11+eRmMQVoB5TF0HyTwAg9SOq/v3OCuiYqcVUKdBcskU9Msp+XvjAk0GKpWCwQ==", "optional": true, "dependencies": { "@apollo/protobufjs": "1.2.7" @@ -262,6 +263,61 @@ "xss": "^1.0.8" } }, + "node_modules/@aws-crypto/sha256-js": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/@aws-crypto/sha256-js/-/sha256-js-1.2.2.tgz", + "integrity": "sha512-Nr1QJIbW/afYYGzYvrF70LtaHrIRtd4TNAglX8BvlfxJLZ45SAmueIKYl5tWoNBPzp65ymXGFK0Bb1vZUpuc9g==", + "dev": true, + "dependencies": { + "@aws-crypto/util": "^1.2.2", + "@aws-sdk/types": "^3.1.0", + "tslib": "^1.11.1" + } + }, + "node_modules/@aws-crypto/sha256-js/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "dev": true + }, + "node_modules/@aws-crypto/util": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/@aws-crypto/util/-/util-1.2.2.tgz", + "integrity": "sha512-H8PjG5WJ4wz0UXAFXeJjWCW1vkvIJ3qUUD+rGRwJ2/hj+xT58Qle2MTql/2MGzkU+1JLAFuR6aJpLAjHwhmwwg==", + "dev": true, + "dependencies": { + "@aws-sdk/types": "^3.1.0", + "@aws-sdk/util-utf8-browser": "^3.0.0", + "tslib": "^1.11.1" + } + }, + "node_modules/@aws-crypto/util/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "dev": true + }, + "node_modules/@aws-sdk/types": { + "version": "3.329.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.329.0.tgz", + "integrity": "sha512-wFBW4yciDfzQBSFmWNaEvHShnSGLMxSu9Lls6EUf6xDMavxSB36bsrVRX6CyAo/W0NeIIyEOW1LclGPgJV1okg==", + "dev": true, + "dependencies": { + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/util-utf8-browser": { + "version": "3.259.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-utf8-browser/-/util-utf8-browser-3.259.0.tgz", + "integrity": "sha512-UvFa/vR+e19XookZF8RzFZBrw2EUkQWxiBW0yYQAhvk3C+QVGl0H3ouca8LDBlBfQKXwmW3huo/59H8rwb1wJw==", + "dev": true, + "dependencies": { + "tslib": "^2.3.1" + } + }, "node_modules/@babel/code-frame": { "version": "7.18.6", "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.18.6.tgz", @@ -657,9 +713,9 @@ } }, "node_modules/@babel/runtime": { - "version": "7.20.7", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.20.7.tgz", - "integrity": "sha512-UF0tvkUtxwAgZ5W/KrkHf0Rn0fdnLDU9ScxBrEVNUprE/MzirjK4MJUX1/BVDv00Sv8cljtukVK1aky++X1SjQ==", + "version": "7.21.5", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.21.5.tgz", + "integrity": "sha512-8jI69toZqqcsnqGGqwGS4Qb1VwLOEp4hz+CXPywcvjs60u3B4Pom/U/7rm4W8tMOYEB+E9wgD0mW1l3r8qlI9Q==", "dependencies": { "regenerator-runtime": "^0.13.11" }, @@ -718,19 +774,47 @@ "node_modules/@balena/dockerignore": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/@balena/dockerignore/-/dockerignore-1.0.2.tgz", - "integrity": "sha512-wMue2Sy4GAVTk6Ic4tJVcnfdau+gx2EnG7S+uAEe+TWJFqE4YoWN4/H8MSLj4eYJKxGg26lZwboEniNiNwZQ6Q==", - "dev": true + "integrity": "sha512-wMue2Sy4GAVTk6Ic4tJVcnfdau+gx2EnG7S+uAEe+TWJFqE4YoWN4/H8MSLj4eYJKxGg26lZwboEniNiNwZQ6Q==" }, "node_modules/@chainlink/contracts": { - "version": "0.5.1", - "resolved": "https://registry.npmjs.org/@chainlink/contracts/-/contracts-0.5.1.tgz", - "integrity": "sha512-3PDBJ38Sd6Ml9h7FNK/tZQti+kTCdXUq1qzE6E59CnlzycsV9ElPvf2hTvs9Mi9C6pEx2Mmw9yhZMfBktYUInQ==", + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/@chainlink/contracts/-/contracts-0.6.1.tgz", + "integrity": "sha512-EuwijGexttw0UjfrW+HygwhQIrGAbqpf1ue28R55HhWMHBzphEH0PhWm8DQmFfj5OZNy8Io66N4L0nStkZ3QKQ==", "dependencies": { "@eth-optimism/contracts": "^0.5.21", - "@openzeppelin/contracts": "^4.3.3", + "@openzeppelin/contracts": "~4.3.3", + "@openzeppelin/contracts-upgradeable": "^4.7.3", "@openzeppelin/contracts-v0.7": "npm:@openzeppelin/contracts@v3.4.2" } }, + "node_modules/@chainlink/contracts/node_modules/@openzeppelin/contracts": { + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/@openzeppelin/contracts/-/contracts-4.3.3.tgz", + "integrity": "sha512-tDBopO1c98Yk7Cv/PZlHqrvtVjlgK5R4J6jxLwoO7qxK4xqOiZG+zSkIvGFpPZ0ikc3QOED3plgdqjgNTnBc7g==" + }, + "node_modules/@chainsafe/as-sha256": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/@chainsafe/as-sha256/-/as-sha256-0.3.1.tgz", + "integrity": "sha512-hldFFYuf49ed7DAakWVXSJODuq3pzJEguD8tQ7h+sGkM18vja+OFoJI9krnGmgzyuZC2ETX0NOIcCTy31v2Mtg==" + }, + "node_modules/@chainsafe/persistent-merkle-tree": { + "version": "0.4.2", + "resolved": "https://registry.npmjs.org/@chainsafe/persistent-merkle-tree/-/persistent-merkle-tree-0.4.2.tgz", + "integrity": "sha512-lLO3ihKPngXLTus/L7WHKaw9PnNJWizlOF1H9NNzHP6Xvh82vzg9F2bzkXhYIFshMZ2gTCEz8tq6STe7r5NDfQ==", + "dependencies": { + "@chainsafe/as-sha256": "^0.3.1" + } + }, + "node_modules/@chainsafe/ssz": { + "version": "0.9.4", + "resolved": "https://registry.npmjs.org/@chainsafe/ssz/-/ssz-0.9.4.tgz", + "integrity": "sha512-77Qtg2N1ayqs4Bg/wvnWfg5Bta7iy7IRh8XqXh7oNMeP2HBbBwx8m6yTpA8p0EHItWPEBkgZd5S5/LSlp3GXuQ==", + "dependencies": { + "@chainsafe/as-sha256": "^0.3.1", + "@chainsafe/persistent-merkle-tree": "^0.4.2", + "case": "^1.6.3" + } + }, "node_modules/@colors/colors": { "version": "1.5.0", "resolved": "https://registry.npmjs.org/@colors/colors/-/colors-1.5.0.tgz", @@ -740,33 +824,10 @@ "node": ">=0.1.90" } }, - "node_modules/@cspotcode/source-map-support": { - "version": "0.8.1", - "resolved": "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz", - "integrity": "sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==", - "devOptional": true, - "dependencies": { - "@jridgewell/trace-mapping": "0.3.9" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/@cspotcode/source-map-support/node_modules/@jridgewell/trace-mapping": { - "version": "0.3.9", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz", - "integrity": "sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==", - "devOptional": true, - "dependencies": { - "@jridgewell/resolve-uri": "^3.0.3", - "@jridgewell/sourcemap-codec": "^1.4.10" - } - }, "node_modules/@ensdomains/address-encoder": { "version": "0.1.9", "resolved": "https://registry.npmjs.org/@ensdomains/address-encoder/-/address-encoder-0.1.9.tgz", "integrity": "sha512-E2d2gP4uxJQnDu2Kfg1tHNspefzbLT8Tyjrm5sEuim32UkU2sm5xL4VXtgc2X33fmPEw9+jUMpGs4veMbf+PYg==", - "dev": true, "dependencies": { "bech32": "^1.1.3", "blakejs": "^1.1.0", @@ -780,15 +841,13 @@ "node_modules/@ensdomains/address-encoder/node_modules/bn.js": { "version": "4.12.0", "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", - "dev": true + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==" }, "node_modules/@ensdomains/ens": { "version": "0.4.5", "resolved": "https://registry.npmjs.org/@ensdomains/ens/-/ens-0.4.5.tgz", "integrity": "sha512-JSvpj1iNMFjK6K+uVl4unqMoa9rf5jopb8cya5UGBWz23Nw8hSNT7efgUx4BTlAPAgpNlEioUfeTyQ6J9ZvTVw==", "deprecated": "Please use @ensdomains/ens-contracts", - "dev": true, "dependencies": { "bluebird": "^3.5.2", "eth-ens-namehash": "^2.0.8", @@ -801,7 +860,6 @@ "version": "2.1.1", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", "integrity": "sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA==", - "dev": true, "engines": { "node": ">=0.10.0" } @@ -810,7 +868,6 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-3.0.0.tgz", "integrity": "sha512-4nhGqUkc4BqbBBB4Q6zLuD7lzzrHYrjKGeYaEji/3tFR5VdJu9v+LilhGIVe8wxEJPPOeWo7eg8dwY13TZ1BNg==", - "dev": true, "engines": { "node": ">=0.10.0" } @@ -819,7 +876,6 @@ "version": "3.2.0", "resolved": "https://registry.npmjs.org/cliui/-/cliui-3.2.0.tgz", "integrity": "sha512-0yayqDxWQbqk3ojkYqUKqaAQ6AfNKeKWRNA8kR0WXzAsdHpP4BIaOmMAG87JGuO6qcobyW4GjxHd9PmhEd+T9w==", - "dev": true, "dependencies": { "string-width": "^1.0.1", "strip-ansi": "^3.0.1", @@ -830,7 +886,6 @@ "version": "1.2.0", "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", "integrity": "sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==", - "dev": true, "engines": { "node": ">=0.10.0" } @@ -839,7 +894,6 @@ "version": "0.30.0", "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-0.30.0.tgz", "integrity": "sha512-UvSPKyhMn6LEd/WpUaV9C9t3zATuqoqfWc3QdPhPLb58prN9tqYPlPWi8Krxi44loBoUzlobqZ3+8tGpxxSzwA==", - "dev": true, "dependencies": { "graceful-fs": "^4.1.2", "jsonfile": "^2.1.0", @@ -851,14 +905,12 @@ "node_modules/@ensdomains/ens/node_modules/get-caller-file": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-1.0.3.tgz", - "integrity": "sha512-3t6rVToeoZfYSGd8YoLFR2DJkiQrIiUrGcjvFX2mDw3bn6k2OtwHN0TNCLbBO+w8qTvimhDkv+LSscbJY1vE6w==", - "dev": true + "integrity": "sha512-3t6rVToeoZfYSGd8YoLFR2DJkiQrIiUrGcjvFX2mDw3bn6k2OtwHN0TNCLbBO+w8qTvimhDkv+LSscbJY1vE6w==" }, "node_modules/@ensdomains/ens/node_modules/is-fullwidth-code-point": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", "integrity": "sha512-1pqUqRjkhPJ9miNq9SwMfdvi6lBJcd6eFxvfaivQhaH3SgisfiuudvFntdKOmxuee/77l+FPjKrQjWvmPjWrRw==", - "dev": true, "dependencies": { "number-is-nan": "^1.0.0" }, @@ -870,7 +922,6 @@ "version": "2.4.0", "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-2.4.0.tgz", "integrity": "sha512-PKllAqbgLgxHaj8TElYymKCAgrASebJrWpTnEkOaTowt23VKXXN0sUeriJ+eh7y6ufb/CC5ap11pz71/cM0hUw==", - "dev": true, "optionalDependencies": { "graceful-fs": "^4.1.6" } @@ -879,7 +930,6 @@ "version": "1.2.1", "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-1.2.1.tgz", "integrity": "sha512-H7AkJWMobeskkttHyhTVtS0fxpFLjxhbfMa6Bk3wimP7sdPRGL3EyCg3sAQenFfAe+xQ+oAc85Nmtvq0ROM83Q==", - "dev": true, "engines": { "node": ">=0.10.0" } @@ -888,7 +938,6 @@ "version": "5.7.1", "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "dev": true, "bin": { "semver": "bin/semver" } @@ -897,7 +946,6 @@ "version": "0.4.26", "resolved": "https://registry.npmjs.org/solc/-/solc-0.4.26.tgz", "integrity": "sha512-o+c6FpkiHd+HPjmjEVpQgH7fqZ14tJpXhho+/bQXlXbliLIS/xjXb42Vxh+qQY1WCSTMQ0+a5vR9vi0MfhU6mA==", - "dev": true, "dependencies": { "fs-extra": "^0.30.0", "memorystream": "^0.3.1", @@ -913,7 +961,6 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", "integrity": "sha512-0XsVpQLnVCXHJfyEs8tC0zpTVIr5PKKsQtkT29IwupnPTjtPmQ3xT/4yCREF9hYkV/3M3kzcUTSAZT6a6h81tw==", - "dev": true, "dependencies": { "code-point-at": "^1.0.0", "is-fullwidth-code-point": "^1.0.0", @@ -927,7 +974,6 @@ "version": "3.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", "integrity": "sha512-VhumSSbBqDTP8p2ZLKj40UjBCV4+v8bUSEpUb4KjRgWk9pbqGF4REFj6KEagidb2f/M6AzC0EmFyDNGaw9OCzg==", - "dev": true, "dependencies": { "ansi-regex": "^2.0.0" }, @@ -939,7 +985,6 @@ "version": "2.1.0", "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-2.1.0.tgz", "integrity": "sha512-vAaEaDM946gbNpH5pLVNR+vX2ht6n0Bt3GXwVB1AuAqZosOvHNF3P7wDnh8KLkSqgUh0uh77le7Owgoz+Z9XBw==", - "dev": true, "dependencies": { "string-width": "^1.0.1", "strip-ansi": "^3.0.1" @@ -951,14 +996,12 @@ "node_modules/@ensdomains/ens/node_modules/y18n": { "version": "3.2.2", "resolved": "https://registry.npmjs.org/y18n/-/y18n-3.2.2.tgz", - "integrity": "sha512-uGZHXkHnhF0XeeAPgnKfPv1bgKAYyVvmNL1xlKsPYZPaIHxGti2hHqvOCQv71XMsLxu1QjergkqogUnms5D3YQ==", - "dev": true + "integrity": "sha512-uGZHXkHnhF0XeeAPgnKfPv1bgKAYyVvmNL1xlKsPYZPaIHxGti2hHqvOCQv71XMsLxu1QjergkqogUnms5D3YQ==" }, "node_modules/@ensdomains/ens/node_modules/yargs": { "version": "4.8.1", "resolved": "https://registry.npmjs.org/yargs/-/yargs-4.8.1.tgz", "integrity": "sha512-LqodLrnIDM3IFT+Hf/5sxBnEGECrfdC1uIbgZeJmESCSo4HoCAaKEus8MylXHAkdacGc0ye+Qa+dpkuom8uVYA==", - "dev": true, "dependencies": { "cliui": "^3.2.0", "decamelize": "^1.1.1", @@ -980,7 +1023,6 @@ "version": "2.4.1", "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-2.4.1.tgz", "integrity": "sha512-9pIKIJhnI5tonzG6OnCFlz/yln8xHYcGl+pn3xR0Vzff0vzN1PbNRaelgfgRUwZ3s4i3jvxT9WhmUGL4whnasA==", - "dev": true, "dependencies": { "camelcase": "^3.0.0", "lodash.assign": "^4.0.6" @@ -990,7 +1032,6 @@ "version": "2.1.0", "resolved": "https://registry.npmjs.org/@ensdomains/ensjs/-/ensjs-2.1.0.tgz", "integrity": "sha512-GRbGPT8Z/OJMDuxs75U/jUNEC0tbL0aj7/L/QQznGYKm/tiasp+ndLOaoULy9kKJFC0TBByqfFliEHDgoLhyog==", - "dev": true, "dependencies": { "@babel/runtime": "^7.4.4", "@ensdomains/address-encoder": "^0.1.7", @@ -1006,8 +1047,7 @@ "version": "0.2.4", "resolved": "https://registry.npmjs.org/@ensdomains/resolver/-/resolver-0.2.4.tgz", "integrity": "sha512-bvaTH34PMCbv6anRa9I/0zjLJgY4EuznbEMgbV77JBCQ9KNC46rzi0avuxpOfu+xDjPEtSFGqVEOr5GlUSGudA==", - "deprecated": "Please use @ensdomains/ens-contracts", - "dev": true + "deprecated": "Please use @ensdomains/ens-contracts" }, "node_modules/@eth-optimism/contracts": { "version": "0.5.37", @@ -1046,142 +1086,623 @@ } }, "node_modules/@ethereum-waffle/chai": { - "version": "3.4.4", - "resolved": "https://registry.npmjs.org/@ethereum-waffle/chai/-/chai-3.4.4.tgz", - "integrity": "sha512-/K8czydBtXXkcM9X6q29EqEkc5dN3oYenyH2a9hF7rGAApAJUpH8QBtojxOY/xQ2up5W332jqgxwp0yPiYug1g==", + "version": "4.0.10", + "resolved": "https://registry.npmjs.org/@ethereum-waffle/chai/-/chai-4.0.10.tgz", + "integrity": "sha512-X5RepE7Dn8KQLFO7HHAAe+KeGaX/by14hn90wePGBhzL54tq4Y8JscZFu+/LCwCl6TnkAAy5ebiMoqJ37sFtWw==", "dev": true, "dependencies": { - "@ethereum-waffle/provider": "^3.4.4", - "ethers": "^5.5.2" + "@ethereum-waffle/provider": "4.0.5", + "debug": "^4.3.4", + "json-bigint": "^1.0.0" }, "engines": { "node": ">=10.0" + }, + "peerDependencies": { + "ethers": "*" } }, "node_modules/@ethereum-waffle/compiler": { - "version": "3.4.4", - "resolved": "https://registry.npmjs.org/@ethereum-waffle/compiler/-/compiler-3.4.4.tgz", - "integrity": "sha512-RUK3axJ8IkD5xpWjWoJgyHclOeEzDLQFga6gKpeGxiS/zBu+HB0W2FvsrrLalTFIaPw/CGYACRBSIxqiCqwqTQ==", + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/@ethereum-waffle/compiler/-/compiler-4.0.3.tgz", + "integrity": "sha512-5x5U52tSvEVJS6dpCeXXKvRKyf8GICDwiTwUvGD3/WD+DpvgvaoHOL82XqpTSUHgV3bBq6ma5/8gKUJUIAnJCw==", "dev": true, "dependencies": { "@resolver-engine/imports": "^0.3.3", "@resolver-engine/imports-fs": "^0.3.3", - "@typechain/ethers-v5": "^2.0.0", + "@typechain/ethers-v5": "^10.0.0", "@types/mkdirp": "^0.5.2", - "@types/node-fetch": "^2.5.5", - "ethers": "^5.0.1", + "@types/node-fetch": "^2.6.1", "mkdirp": "^0.5.1", - "node-fetch": "^2.6.1", - "solc": "^0.6.3", - "ts-generator": "^0.1.1", - "typechain": "^3.0.0" + "node-fetch": "^2.6.7" }, "engines": { "node": ">=10.0" + }, + "peerDependencies": { + "ethers": "*", + "solc": "*", + "typechain": "^8.0.0" } }, - "node_modules/@ethereum-waffle/compiler/node_modules/commander": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/commander/-/commander-3.0.2.tgz", - "integrity": "sha512-Gar0ASD4BDyKC4hl4DwHqDrmvjoxWKZigVnAbn5H1owvm4CxCPdb0HQDehwNYMJpla5+M2tPmPARzhtYuwpHow==", - "dev": true + "node_modules/@ethereum-waffle/ens": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/@ethereum-waffle/ens/-/ens-4.0.3.tgz", + "integrity": "sha512-PVLcdnTbaTfCrfSOrvtlA9Fih73EeDvFS28JQnT5M5P4JMplqmchhcZB1yg/fCtx4cvgHlZXa0+rOCAk2Jk0Jw==", + "dev": true, + "engines": { + "node": ">=10.0" + }, + "peerDependencies": { + "@ensdomains/ens": "^0.4.4", + "@ensdomains/resolver": "^0.2.4", + "ethers": "*" + } }, - "node_modules/@ethereum-waffle/compiler/node_modules/fs-extra": { - "version": "0.30.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-0.30.0.tgz", - "integrity": "sha512-UvSPKyhMn6LEd/WpUaV9C9t3zATuqoqfWc3QdPhPLb58prN9tqYPlPWi8Krxi44loBoUzlobqZ3+8tGpxxSzwA==", + "node_modules/@ethereum-waffle/mock-contract": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/@ethereum-waffle/mock-contract/-/mock-contract-4.0.4.tgz", + "integrity": "sha512-LwEj5SIuEe9/gnrXgtqIkWbk2g15imM/qcJcxpLyAkOj981tQxXmtV4XmQMZsdedEsZ/D/rbUAOtZbgwqgUwQA==", + "dev": true, + "engines": { + "node": ">=10.0" + }, + "peerDependencies": { + "ethers": "*" + } + }, + "node_modules/@ethereum-waffle/provider": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/@ethereum-waffle/provider/-/provider-4.0.5.tgz", + "integrity": "sha512-40uzfyzcrPh+Gbdzv89JJTMBlZwzya1YLDyim8mVbEqYLP5VRYWoGp0JMyaizgV3hMoUFRqJKVmIUw4v7r3hYw==", "dev": true, "dependencies": { - "graceful-fs": "^4.1.2", - "jsonfile": "^2.1.0", - "klaw": "^1.0.0", - "path-is-absolute": "^1.0.0", - "rimraf": "^2.2.8" + "@ethereum-waffle/ens": "4.0.3", + "@ganache/ethereum-options": "0.1.4", + "debug": "^4.3.4", + "ganache": "7.4.3" + }, + "engines": { + "node": ">=10.0" + }, + "peerDependencies": { + "ethers": "*" } }, - "node_modules/@ethereum-waffle/compiler/node_modules/jsonfile": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-2.4.0.tgz", - "integrity": "sha512-PKllAqbgLgxHaj8TElYymKCAgrASebJrWpTnEkOaTowt23VKXXN0sUeriJ+eh7y6ufb/CC5ap11pz71/cM0hUw==", + "node_modules/@ethereum-waffle/provider/node_modules/ganache": { + "version": "7.4.3", + "resolved": "https://registry.npmjs.org/ganache/-/ganache-7.4.3.tgz", + "integrity": "sha512-RpEDUiCkqbouyE7+NMXG26ynZ+7sGiODU84Kz+FVoXUnQ4qQM4M8wif3Y4qUCt+D/eM1RVeGq0my62FPD6Y1KA==", + "bundleDependencies": [ + "@trufflesuite/bigint-buffer", + "emittery", + "keccak", + "leveldown", + "secp256k1", + "@types/bn.js", + "@types/lru-cache", + "@types/seedrandom" + ], "dev": true, + "hasShrinkwrap": true, + "dependencies": { + "@trufflesuite/bigint-buffer": "1.1.10", + "@types/bn.js": "^5.1.0", + "@types/lru-cache": "5.1.1", + "@types/seedrandom": "3.0.1", + "emittery": "0.10.0", + "keccak": "3.0.2", + "leveldown": "6.1.0", + "secp256k1": "4.0.3" + }, + "bin": { + "ganache": "dist/node/cli.js", + "ganache-cli": "dist/node/cli.js" + }, "optionalDependencies": { - "graceful-fs": "^4.1.6" + "bufferutil": "4.0.5", + "utf-8-validate": "5.0.7" } }, - "node_modules/@ethereum-waffle/compiler/node_modules/semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "node_modules/@ethereum-waffle/provider/node_modules/ganache/node_modules/@trufflesuite/bigint-buffer": { + "version": "1.1.10", + "resolved": "https://registry.npmjs.org/@trufflesuite/bigint-buffer/-/bigint-buffer-1.1.10.tgz", + "integrity": "sha512-pYIQC5EcMmID74t26GCC67946mgTJFiLXOT/BYozgrd4UEY2JHEGLhWi9cMiQCt5BSqFEvKkCHNnoj82SRjiEw==", + "dev": true, + "hasInstallScript": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "node-gyp-build": "4.4.0" + }, + "engines": { + "node": ">= 14.0.0" + } + }, + "node_modules/@ethereum-waffle/provider/node_modules/ganache/node_modules/@trufflesuite/bigint-buffer/node_modules/node-gyp-build": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.4.0.tgz", + "integrity": "sha512-amJnQCcgtRVw9SvoebO3BKGESClrfXGCUTX9hSn1OuGQTQBOZmVd0Z0OlecpuRksKvbsUqALE8jls/ErClAPuQ==", "dev": true, + "inBundle": true, + "license": "MIT", "bin": { - "semver": "bin/semver" + "node-gyp-build": "bin.js", + "node-gyp-build-optional": "optional.js", + "node-gyp-build-test": "build-test.js" } }, - "node_modules/@ethereum-waffle/compiler/node_modules/solc": { - "version": "0.6.12", - "resolved": "https://registry.npmjs.org/solc/-/solc-0.6.12.tgz", - "integrity": "sha512-Lm0Ql2G9Qc7yPP2Ba+WNmzw2jwsrd3u4PobHYlSOxaut3TtUbj9+5ZrT6f4DUpNPEoBaFUOEg9Op9C0mk7ge9g==", + "node_modules/@ethereum-waffle/provider/node_modules/ganache/node_modules/@types/bn.js": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/@types/bn.js/-/bn.js-5.1.0.tgz", + "integrity": "sha512-QSSVYj7pYFN49kW77o2s9xTCwZ8F2xLbjLLSEVh8D2F4JUhZtPAGOFLTD+ffqksBx/u4cE/KImFjyhqCjn/LIA==", "dev": true, + "inBundle": true, + "license": "MIT", "dependencies": { - "command-exists": "^1.2.8", - "commander": "3.0.2", - "fs-extra": "^0.30.0", - "js-sha3": "0.8.0", - "memorystream": "^0.3.1", - "require-from-string": "^2.0.0", - "semver": "^5.5.0", - "tmp": "0.0.33" + "@types/node": "*" + } + }, + "node_modules/@ethereum-waffle/provider/node_modules/ganache/node_modules/@types/lru-cache": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/@types/lru-cache/-/lru-cache-5.1.1.tgz", + "integrity": "sha512-ssE3Vlrys7sdIzs5LOxCzTVMsU7i9oa/IaW92wF32JFb3CVczqOkru2xspuKczHEbG3nvmPY7IFqVmGGHdNbYw==", + "dev": true, + "inBundle": true, + "license": "MIT" + }, + "node_modules/@ethereum-waffle/provider/node_modules/ganache/node_modules/@types/node": { + "version": "17.0.0", + "resolved": "https://registry.npmjs.org/@types/node/-/node-17.0.0.tgz", + "integrity": "sha512-eMhwJXc931Ihh4tkU+Y7GiLzT/y/DBNpNtr4yU9O2w3SYBsr9NaOPhQlLKRmoWtI54uNwuo0IOUFQjVOTZYRvw==", + "dev": true, + "inBundle": true, + "license": "MIT" + }, + "node_modules/@ethereum-waffle/provider/node_modules/ganache/node_modules/@types/seedrandom": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@types/seedrandom/-/seedrandom-3.0.1.tgz", + "integrity": "sha512-giB9gzDeiCeloIXDgzFBCgjj1k4WxcDrZtGl6h1IqmUPlxF+Nx8Ve+96QCyDZ/HseB/uvDsKbpib9hU5cU53pw==", + "dev": true, + "inBundle": true, + "license": "MIT" + }, + "node_modules/@ethereum-waffle/provider/node_modules/ganache/node_modules/base64-js": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", + "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "inBundle": true, + "license": "MIT" + }, + "node_modules/@ethereum-waffle/provider/node_modules/ganache/node_modules/brorand": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz", + "integrity": "sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8=", + "dev": true, + "inBundle": true, + "license": "MIT" + }, + "node_modules/@ethereum-waffle/provider/node_modules/ganache/node_modules/buffer": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz", + "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "inBundle": true, + "license": "MIT", + "dependencies": { + "base64-js": "^1.3.1", + "ieee754": "^1.2.1" + } + }, + "node_modules/@ethereum-waffle/provider/node_modules/ganache/node_modules/bufferutil": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/bufferutil/-/bufferutil-4.0.5.tgz", + "integrity": "sha512-HTm14iMQKK2FjFLRTM5lAVcyaUzOnqbPtesFIvREgXpJHdQm8bWS+GkQgIkfaBYRHuCnea7w8UVNfwiAQhlr9A==", + "dev": true, + "optional": true, + "dependencies": { + "node-gyp-build": "^4.3.0" + } + }, + "node_modules/@ethereum-waffle/provider/node_modules/ganache/node_modules/catering": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/catering/-/catering-2.1.0.tgz", + "integrity": "sha512-M5imwzQn6y+ODBfgi+cfgZv2hIUI6oYU/0f35Mdb1ujGeqeoI5tOnl9Q13DTH7LW+7er+NYq8stNOKZD/Z3U/A==", + "dev": true, + "inBundle": true, + "license": "MIT", + "dependencies": { + "queue-tick": "^1.0.0" }, - "bin": { - "solcjs": "solcjs" + "engines": { + "node": ">=6" + } + }, + "node_modules/@ethereum-waffle/provider/node_modules/ganache/node_modules/elliptic": { + "version": "6.5.4", + "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.4.tgz", + "integrity": "sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ==", + "dev": true, + "inBundle": true, + "license": "MIT", + "dependencies": { + "bn.js": "^4.11.9", + "brorand": "^1.1.0", + "hash.js": "^1.0.0", + "hmac-drbg": "^1.0.1", + "inherits": "^2.0.4", + "minimalistic-assert": "^1.0.1", + "minimalistic-crypto-utils": "^1.0.1" + } + }, + "node_modules/@ethereum-waffle/provider/node_modules/ganache/node_modules/elliptic/node_modules/bn.js": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", + "dev": true, + "inBundle": true, + "license": "MIT" + }, + "node_modules/@ethereum-waffle/provider/node_modules/ganache/node_modules/emittery": { + "version": "0.10.0", + "resolved": "https://registry.npmjs.org/emittery/-/emittery-0.10.0.tgz", + "integrity": "sha512-AGvFfs+d0JKCJQ4o01ASQLGPmSCxgfU9RFXvzPvZdjKK8oscynksuJhWrSTSw7j7Ep/sZct5b5ZhYCi8S/t0HQ==", + "dev": true, + "inBundle": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sindresorhus/emittery?sponsor=1" + } + }, + "node_modules/@ethereum-waffle/provider/node_modules/ganache/node_modules/hash.js": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.7.tgz", + "integrity": "sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==", + "dev": true, + "inBundle": true, + "license": "MIT", + "dependencies": { + "inherits": "^2.0.3", + "minimalistic-assert": "^1.0.1" + } + }, + "node_modules/@ethereum-waffle/provider/node_modules/ganache/node_modules/hmac-drbg": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz", + "integrity": "sha1-0nRXAQJabHdabFRXk+1QL8DGSaE=", + "dev": true, + "inBundle": true, + "license": "MIT", + "dependencies": { + "hash.js": "^1.0.3", + "minimalistic-assert": "^1.0.0", + "minimalistic-crypto-utils": "^1.0.1" + } + }, + "node_modules/@ethereum-waffle/provider/node_modules/ganache/node_modules/ieee754": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", + "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "inBundle": true, + "license": "BSD-3-Clause" + }, + "node_modules/@ethereum-waffle/provider/node_modules/ganache/node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "dev": true, + "inBundle": true, + "license": "ISC" + }, + "node_modules/@ethereum-waffle/provider/node_modules/ganache/node_modules/is-buffer": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-2.0.5.tgz", + "integrity": "sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "inBundle": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/@ethereum-waffle/provider/node_modules/ganache/node_modules/keccak": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/keccak/-/keccak-3.0.2.tgz", + "integrity": "sha512-PyKKjkH53wDMLGrvmRGSNWgmSxZOUqbnXwKL9tmgbFYA1iAYqW21kfR7mZXV0MlESiefxQQE9X9fTa3X+2MPDQ==", + "dev": true, + "hasInstallScript": true, + "inBundle": true, + "license": "MIT", + "dependencies": { + "node-addon-api": "^2.0.0", + "node-gyp-build": "^4.2.0", + "readable-stream": "^3.6.0" }, "engines": { - "node": ">=8.0.0" + "node": ">=10.0.0" } }, - "node_modules/@ethereum-waffle/ens": { - "version": "3.4.4", - "resolved": "https://registry.npmjs.org/@ethereum-waffle/ens/-/ens-3.4.4.tgz", - "integrity": "sha512-0m4NdwWxliy3heBYva1Wr4WbJKLnwXizmy5FfSSr5PMbjI7SIGCdCB59U7/ZzY773/hY3bLnzLwvG5mggVjJWg==", + "node_modules/@ethereum-waffle/provider/node_modules/ganache/node_modules/leveldown": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/leveldown/-/leveldown-6.1.0.tgz", + "integrity": "sha512-8C7oJDT44JXxh04aSSsfcMI8YiaGRhOFI9/pMEL7nWJLVsWajDPTRxsSHTM2WcTVY5nXM+SuRHzPPi0GbnDX+w==", "dev": true, + "hasInstallScript": true, + "inBundle": true, + "license": "MIT", "dependencies": { - "@ensdomains/ens": "^0.4.4", - "@ensdomains/resolver": "^0.2.4", - "ethers": "^5.5.2" + "abstract-leveldown": "^7.2.0", + "napi-macros": "~2.0.0", + "node-gyp-build": "^4.3.0" }, "engines": { - "node": ">=10.0" + "node": ">=10.12.0" } }, - "node_modules/@ethereum-waffle/mock-contract": { - "version": "3.4.4", - "resolved": "https://registry.npmjs.org/@ethereum-waffle/mock-contract/-/mock-contract-3.4.4.tgz", - "integrity": "sha512-Mp0iB2YNWYGUV+VMl5tjPsaXKbKo8MDH9wSJ702l9EBjdxFf/vBvnMBAC1Fub1lLtmD0JHtp1pq+mWzg/xlLnA==", + "node_modules/@ethereum-waffle/provider/node_modules/ganache/node_modules/leveldown/node_modules/abstract-leveldown": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/abstract-leveldown/-/abstract-leveldown-7.2.0.tgz", + "integrity": "sha512-DnhQwcFEaYsvYDnACLZhMmCWd3rkOeEvglpa4q5i/5Jlm3UIsWaxVzuXvDLFCSCWRO3yy2/+V/G7FusFgejnfQ==", "dev": true, + "inBundle": true, + "license": "MIT", "dependencies": { - "@ethersproject/abi": "^5.5.0", - "ethers": "^5.5.2" + "buffer": "^6.0.3", + "catering": "^2.0.0", + "is-buffer": "^2.0.5", + "level-concat-iterator": "^3.0.0", + "level-supports": "^2.0.1", + "queue-microtask": "^1.2.3" }, "engines": { - "node": ">=10.0" + "node": ">=10" } }, - "node_modules/@ethereum-waffle/provider": { - "version": "3.4.4", - "resolved": "https://registry.npmjs.org/@ethereum-waffle/provider/-/provider-3.4.4.tgz", - "integrity": "sha512-GK8oKJAM8+PKy2nK08yDgl4A80mFuI8zBkE0C9GqTRYQqvuxIyXoLmJ5NZU9lIwyWVv5/KsoA11BgAv2jXE82g==", + "node_modules/@ethereum-waffle/provider/node_modules/ganache/node_modules/leveldown/node_modules/level-concat-iterator": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/level-concat-iterator/-/level-concat-iterator-3.1.0.tgz", + "integrity": "sha512-BWRCMHBxbIqPxJ8vHOvKUsaO0v1sLYZtjN3K2iZJsRBYtp+ONsY6Jfi6hy9K3+zolgQRryhIn2NRZjZnWJ9NmQ==", "dev": true, + "inBundle": true, + "license": "MIT", "dependencies": { - "@ethereum-waffle/ens": "^3.4.4", - "ethers": "^5.5.2", - "ganache-core": "^2.13.2", - "patch-package": "^6.2.2", - "postinstall-postinstall": "^2.1.0" + "catering": "^2.1.0" }, "engines": { - "node": ">=10.0" + "node": ">=10" + } + }, + "node_modules/@ethereum-waffle/provider/node_modules/ganache/node_modules/leveldown/node_modules/level-supports": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/level-supports/-/level-supports-2.1.0.tgz", + "integrity": "sha512-E486g1NCjW5cF78KGPrMDRBYzPuueMZ6VBXHT6gC7A8UYWGiM14fGgp+s/L1oFfDWSPV/+SFkYCmZ0SiESkRKA==", + "dev": true, + "inBundle": true, + "license": "MIT", + "engines": { + "node": ">=10" + } + }, + "node_modules/@ethereum-waffle/provider/node_modules/ganache/node_modules/minimalistic-assert": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", + "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==", + "dev": true, + "inBundle": true, + "license": "ISC" + }, + "node_modules/@ethereum-waffle/provider/node_modules/ganache/node_modules/minimalistic-crypto-utils": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz", + "integrity": "sha1-9sAMHAsIIkblxNmd+4x8CDsrWCo=", + "dev": true, + "inBundle": true, + "license": "MIT" + }, + "node_modules/@ethereum-waffle/provider/node_modules/ganache/node_modules/napi-macros": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/napi-macros/-/napi-macros-2.0.0.tgz", + "integrity": "sha512-A0xLykHtARfueITVDernsAWdtIMbOJgKgcluwENp3AlsKN/PloyO10HtmoqnFAQAcxPkgZN7wdfPfEd0zNGxbg==", + "dev": true, + "inBundle": true, + "license": "MIT" + }, + "node_modules/@ethereum-waffle/provider/node_modules/ganache/node_modules/node-addon-api": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-2.0.2.tgz", + "integrity": "sha512-Ntyt4AIXyaLIuMHF6IOoTakB3K+RWxwtsHNRxllEoA6vPwP9o4866g6YWDLUdnucilZhmkxiHwHr11gAENw+QA==", + "dev": true, + "inBundle": true, + "license": "MIT" + }, + "node_modules/@ethereum-waffle/provider/node_modules/ganache/node_modules/node-gyp-build": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.3.0.tgz", + "integrity": "sha512-iWjXZvmboq0ja1pUGULQBexmxq8CV4xBhX7VDOTbL7ZR4FOowwY/VOtRxBN/yKxmdGoIp4j5ysNT4u3S2pDQ3Q==", + "dev": true, + "inBundle": true, + "license": "MIT", + "bin": { + "node-gyp-build": "bin.js", + "node-gyp-build-optional": "optional.js", + "node-gyp-build-test": "build-test.js" + } + }, + "node_modules/@ethereum-waffle/provider/node_modules/ganache/node_modules/queue-microtask": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "inBundle": true, + "license": "MIT" + }, + "node_modules/@ethereum-waffle/provider/node_modules/ganache/node_modules/queue-tick": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/queue-tick/-/queue-tick-1.0.0.tgz", + "integrity": "sha512-ULWhjjE8BmiICGn3G8+1L9wFpERNxkf8ysxkAer4+TFdRefDaXOCV5m92aMB9FtBVmn/8sETXLXY6BfW7hyaWQ==", + "dev": true, + "inBundle": true, + "license": "MIT" + }, + "node_modules/@ethereum-waffle/provider/node_modules/ganache/node_modules/readable-stream": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", + "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "dev": true, + "inBundle": true, + "license": "MIT", + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/@ethereum-waffle/provider/node_modules/ganache/node_modules/safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "inBundle": true, + "license": "MIT" + }, + "node_modules/@ethereum-waffle/provider/node_modules/ganache/node_modules/secp256k1": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/secp256k1/-/secp256k1-4.0.3.tgz", + "integrity": "sha512-NLZVf+ROMxwtEj3Xa562qgv2BK5e2WNmXPiOdVIPLgs6lyTzMvBq0aWTYMI5XCP9jZMVKOcqZLw/Wc4vDkuxhA==", + "dev": true, + "hasInstallScript": true, + "inBundle": true, + "license": "MIT", + "dependencies": { + "elliptic": "^6.5.4", + "node-addon-api": "^2.0.0", + "node-gyp-build": "^4.2.0" + }, + "engines": { + "node": ">=10.0.0" } }, + "node_modules/@ethereum-waffle/provider/node_modules/ganache/node_modules/string_decoder": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", + "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", + "dev": true, + "inBundle": true, + "license": "MIT", + "dependencies": { + "safe-buffer": "~5.2.0" + } + }, + "node_modules/@ethereum-waffle/provider/node_modules/ganache/node_modules/utf-8-validate": { + "version": "5.0.7", + "resolved": "https://registry.npmjs.org/utf-8-validate/-/utf-8-validate-5.0.7.tgz", + "integrity": "sha512-vLt1O5Pp+flcArHGIyKEQq883nBt8nN8tVBcoL0qUXj2XT1n7p70yGIq2VK98I5FdZ1YHc0wk/koOnHjnXWk1Q==", + "dev": true, + "optional": true, + "dependencies": { + "node-gyp-build": "^4.3.0" + } + }, + "node_modules/@ethereum-waffle/provider/node_modules/ganache/node_modules/util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", + "dev": true, + "inBundle": true, + "license": "MIT" + }, "node_modules/@ethereumjs/block": { "version": "3.6.3", "resolved": "https://registry.npmjs.org/@ethereumjs/block/-/block-3.6.3.tgz", @@ -1211,19 +1732,67 @@ "ethereumjs-util": "^7.1.5" } }, + "node_modules/@ethereumjs/blockchain": { + "version": "5.5.3", + "resolved": "https://registry.npmjs.org/@ethereumjs/blockchain/-/blockchain-5.5.3.tgz", + "integrity": "sha512-bi0wuNJ1gw4ByNCV56H0Z4Q7D+SxUbwyG12Wxzbvqc89PXLRNR20LBcSUZRKpN0+YCPo6m0XZL/JLio3B52LTw==", + "dev": true, + "dependencies": { + "@ethereumjs/block": "^3.6.2", + "@ethereumjs/common": "^2.6.4", + "@ethereumjs/ethash": "^1.1.0", + "debug": "^4.3.3", + "ethereumjs-util": "^7.1.5", + "level-mem": "^5.0.1", + "lru-cache": "^5.1.1", + "semaphore-async-await": "^1.5.1" + } + }, + "node_modules/@ethereumjs/blockchain/node_modules/@ethereumjs/common": { + "version": "2.6.5", + "resolved": "https://registry.npmjs.org/@ethereumjs/common/-/common-2.6.5.tgz", + "integrity": "sha512-lRyVQOeCDaIVtgfbowla32pzeDv2Obr8oR8Put5RdUBNRGr1VGPGQNGP6elWIpgK3YdpzqTOh4GyUGOureVeeA==", + "dev": true, + "dependencies": { + "crc-32": "^1.2.0", + "ethereumjs-util": "^7.1.5" + } + }, "node_modules/@ethereumjs/common": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/@ethereumjs/common/-/common-3.0.2.tgz", - "integrity": "sha512-N8fpT5uDvxOE5dIaPQZWzJaBRkRWrCXv63MONEn5ikp/J9mWFc53VUjb3GqtIYHRgg9nP81TXmtnvQJz1IuTiw==", + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/@ethereumjs/common/-/common-3.1.2.tgz", + "integrity": "sha512-YV+bZfRlFhAXg+FfwC5r4UQKVj4OG7vDP5/JvvNXLLbYpNplH5Vca9jD0L+ab8y0YlTYJMQM1ALyHFu3AE3eBA==", "dependencies": { - "@ethereumjs/util": "^8.0.3", + "@ethereumjs/util": "^8.0.6", "crc-32": "^1.2.0" } }, + "node_modules/@ethereumjs/ethash": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@ethereumjs/ethash/-/ethash-1.1.0.tgz", + "integrity": "sha512-/U7UOKW6BzpA+Vt+kISAoeDie1vAvY4Zy2KF5JJb+So7+1yKmJeJEHOGSnQIj330e9Zyl3L5Nae6VZyh2TJnAA==", + "dev": true, + "dependencies": { + "@ethereumjs/block": "^3.5.0", + "@types/levelup": "^4.3.0", + "buffer-xor": "^2.0.1", + "ethereumjs-util": "^7.1.1", + "miller-rabin": "^4.0.0" + } + }, + "node_modules/@ethereumjs/ethash/node_modules/buffer-xor": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/buffer-xor/-/buffer-xor-2.0.2.tgz", + "integrity": "sha512-eHslX0bin3GB+Lx2p7lEYRShRewuNZL3fUl4qlVJGGiwoPGftmt8JQgk2Y9Ji5/01TnVDo33E5b5O3vUB1HdqQ==", + "dev": true, + "dependencies": { + "safe-buffer": "^5.1.1" + } + }, "node_modules/@ethereumjs/rlp": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@ethereumjs/rlp/-/rlp-4.0.0.tgz", - "integrity": "sha512-LM4jS5n33bJN60fM5EC8VeyhUgga6/DjCPBV2vWjnfVtobqtOiNC4SQ1MRFqyBSmJGGdB533JZWewyvlcdJtkQ==", + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@ethereumjs/rlp/-/rlp-4.0.1.tgz", + "integrity": "sha512-tqsQiBQDQdmPWE1xkkBq4rlSW5QZpLOUJ5RJh2/9fug+q9tnUhuZoVLk7s0scUIKTOzEtR72DFBXI4WiZcMpvw==", "bin": { "rlp": "bin/rlp" }, @@ -1232,33 +1801,249 @@ } }, "node_modules/@ethereumjs/tx": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/@ethereumjs/tx/-/tx-4.0.2.tgz", - "integrity": "sha512-6GoKVK3MVcAFFn4qSLIIDZ1vrKSLn7W5L80Pvae1BJFgchu+11R2iOqQyVGUSGbaXllh4xliUy/7+x5pYwRY8Q==", + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/@ethereumjs/tx/-/tx-4.1.2.tgz", + "integrity": "sha512-PWWyO9lAFOiLwk7nB9OQisoJUsuvMz2PN2v4/ILbBpzamC5Ug79OddVq9r4rKvIDLPY+bn4NFerxBJg29+sjaA==", "dependencies": { - "@ethereumjs/common": "^3.0.2", - "@ethereumjs/rlp": "^4.0.0", - "@ethereumjs/util": "^8.0.3", - "ethereum-cryptography": "^1.1.2", - "ethers": "^5.7.1" + "@chainsafe/ssz": "^0.11.1", + "@ethereumjs/common": "^3.1.2", + "@ethereumjs/rlp": "^4.0.1", + "@ethereumjs/util": "^8.0.6", + "ethereum-cryptography": "^2.0.0" }, "engines": { "node": ">=14" + }, + "peerDependencies": { + "c-kzg": "^1.0.8" + }, + "peerDependenciesMeta": { + "c-kzg": { + "optional": true + } + } + }, + "node_modules/@ethereumjs/tx/node_modules/@chainsafe/as-sha256": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/@chainsafe/as-sha256/-/as-sha256-0.4.1.tgz", + "integrity": "sha512-IqeeGwQihK6Y2EYLFofqs2eY2ep1I2MvQXHzOAI+5iQN51OZlUkrLgyAugu2x86xZewDk5xas7lNczkzFzF62w==" + }, + "node_modules/@ethereumjs/tx/node_modules/@chainsafe/persistent-merkle-tree": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/@chainsafe/persistent-merkle-tree/-/persistent-merkle-tree-0.6.1.tgz", + "integrity": "sha512-gcENLemRR13+1MED2NeZBMA7FRS0xQPM7L2vhMqvKkjqtFT4YfjSVADq5U0iLuQLhFUJEMVuA8fbv5v+TN6O9A==", + "dependencies": { + "@chainsafe/as-sha256": "^0.4.1", + "@noble/hashes": "^1.3.0" + } + }, + "node_modules/@ethereumjs/tx/node_modules/@chainsafe/ssz": { + "version": "0.11.1", + "resolved": "https://registry.npmjs.org/@chainsafe/ssz/-/ssz-0.11.1.tgz", + "integrity": "sha512-cB8dBkgGN6ZoeOKuk+rIRHKN0L5i9JLGeC0Lui71QX0TuLcQKwgbfkUexpyJxnGFatWf8yeJxlOjozMn/OTP0g==", + "dependencies": { + "@chainsafe/as-sha256": "^0.4.1", + "@chainsafe/persistent-merkle-tree": "^0.6.1" + } + }, + "node_modules/@ethereumjs/tx/node_modules/@noble/hashes": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.3.0.tgz", + "integrity": "sha512-ilHEACi9DwqJB0pw7kv+Apvh50jiiSyR/cQ3y4W7lOR5mhvn/50FLUfsnfJz0BDZtl/RR16kXvptiv6q1msYZg==", + "funding": [ + { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } + ] + }, + "node_modules/@ethereumjs/tx/node_modules/@scure/bip32": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/@scure/bip32/-/bip32-1.3.0.tgz", + "integrity": "sha512-bcKpo1oj54hGholplGLpqPHRbIsnbixFtc06nwuNM5/dwSXOq/AAYoIBRsBmnZJSdfeNW5rnff7NTAz3ZCqR9Q==", + "funding": [ + { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } + ], + "dependencies": { + "@noble/curves": "~1.0.0", + "@noble/hashes": "~1.3.0", + "@scure/base": "~1.1.0" + } + }, + "node_modules/@ethereumjs/tx/node_modules/@scure/bip39": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@scure/bip39/-/bip39-1.2.0.tgz", + "integrity": "sha512-SX/uKq52cuxm4YFXWFaVByaSHJh2w3BnokVSeUJVCv6K7WulT9u2BuNRBhuFl8vAuYnzx9bEu9WgpcNYTrYieg==", + "funding": [ + { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } + ], + "dependencies": { + "@noble/hashes": "~1.3.0", + "@scure/base": "~1.1.0" + } + }, + "node_modules/@ethereumjs/tx/node_modules/ethereum-cryptography": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-2.0.0.tgz", + "integrity": "sha512-g25m4EtfQGjstWgVE1aIz7XYYjf3kH5kG17ULWVB5dH6uLahsoltOhACzSxyDV+fhn4gbR4xRrOXGe6r2uh4Bg==", + "dependencies": { + "@noble/curves": "1.0.0", + "@noble/hashes": "1.3.0", + "@scure/bip32": "1.3.0", + "@scure/bip39": "1.2.0" } }, "node_modules/@ethereumjs/util": { - "version": "8.0.3", - "resolved": "https://registry.npmjs.org/@ethereumjs/util/-/util-8.0.3.tgz", - "integrity": "sha512-0apCbwc8xAaie6W7q6QyogfyRS2BMU816a8KwpnpRw9Qrc6Bws+l7J3LfCLMt2iL6Wi8CYb0B29AeIr2N4vHnw==", + "version": "8.0.6", + "resolved": "https://registry.npmjs.org/@ethereumjs/util/-/util-8.0.6.tgz", + "integrity": "sha512-zFLG/gXtF3QUC7iKFn4PT6HCr+DEnlCbwUGKGtXoqjA+64T+e0FuqMjlo4bQIY2ngRzk3EtudKdGYC4g31ehhg==", "dependencies": { - "@ethereumjs/rlp": "^4.0.0-beta.2", - "async": "^3.2.4", - "ethereum-cryptography": "^1.1.2" + "@chainsafe/ssz": "^0.11.1", + "@ethereumjs/rlp": "^4.0.1", + "ethereum-cryptography": "^2.0.0", + "micro-ftch": "^0.3.1" }, "engines": { "node": ">=14" } }, + "node_modules/@ethereumjs/util/node_modules/@chainsafe/as-sha256": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/@chainsafe/as-sha256/-/as-sha256-0.4.1.tgz", + "integrity": "sha512-IqeeGwQihK6Y2EYLFofqs2eY2ep1I2MvQXHzOAI+5iQN51OZlUkrLgyAugu2x86xZewDk5xas7lNczkzFzF62w==" + }, + "node_modules/@ethereumjs/util/node_modules/@chainsafe/persistent-merkle-tree": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/@chainsafe/persistent-merkle-tree/-/persistent-merkle-tree-0.6.1.tgz", + "integrity": "sha512-gcENLemRR13+1MED2NeZBMA7FRS0xQPM7L2vhMqvKkjqtFT4YfjSVADq5U0iLuQLhFUJEMVuA8fbv5v+TN6O9A==", + "dependencies": { + "@chainsafe/as-sha256": "^0.4.1", + "@noble/hashes": "^1.3.0" + } + }, + "node_modules/@ethereumjs/util/node_modules/@chainsafe/ssz": { + "version": "0.11.1", + "resolved": "https://registry.npmjs.org/@chainsafe/ssz/-/ssz-0.11.1.tgz", + "integrity": "sha512-cB8dBkgGN6ZoeOKuk+rIRHKN0L5i9JLGeC0Lui71QX0TuLcQKwgbfkUexpyJxnGFatWf8yeJxlOjozMn/OTP0g==", + "dependencies": { + "@chainsafe/as-sha256": "^0.4.1", + "@chainsafe/persistent-merkle-tree": "^0.6.1" + } + }, + "node_modules/@ethereumjs/util/node_modules/@noble/hashes": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.3.0.tgz", + "integrity": "sha512-ilHEACi9DwqJB0pw7kv+Apvh50jiiSyR/cQ3y4W7lOR5mhvn/50FLUfsnfJz0BDZtl/RR16kXvptiv6q1msYZg==", + "funding": [ + { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } + ] + }, + "node_modules/@ethereumjs/util/node_modules/@scure/bip32": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/@scure/bip32/-/bip32-1.3.0.tgz", + "integrity": "sha512-bcKpo1oj54hGholplGLpqPHRbIsnbixFtc06nwuNM5/dwSXOq/AAYoIBRsBmnZJSdfeNW5rnff7NTAz3ZCqR9Q==", + "funding": [ + { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } + ], + "dependencies": { + "@noble/curves": "~1.0.0", + "@noble/hashes": "~1.3.0", + "@scure/base": "~1.1.0" + } + }, + "node_modules/@ethereumjs/util/node_modules/@scure/bip39": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@scure/bip39/-/bip39-1.2.0.tgz", + "integrity": "sha512-SX/uKq52cuxm4YFXWFaVByaSHJh2w3BnokVSeUJVCv6K7WulT9u2BuNRBhuFl8vAuYnzx9bEu9WgpcNYTrYieg==", + "funding": [ + { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } + ], + "dependencies": { + "@noble/hashes": "~1.3.0", + "@scure/base": "~1.1.0" + } + }, + "node_modules/@ethereumjs/util/node_modules/ethereum-cryptography": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-2.0.0.tgz", + "integrity": "sha512-g25m4EtfQGjstWgVE1aIz7XYYjf3kH5kG17ULWVB5dH6uLahsoltOhACzSxyDV+fhn4gbR4xRrOXGe6r2uh4Bg==", + "dependencies": { + "@noble/curves": "1.0.0", + "@noble/hashes": "1.3.0", + "@scure/bip32": "1.3.0", + "@scure/bip39": "1.2.0" + } + }, + "node_modules/@ethereumjs/vm": { + "version": "5.6.0", + "resolved": "https://registry.npmjs.org/@ethereumjs/vm/-/vm-5.6.0.tgz", + "integrity": "sha512-J2m/OgjjiGdWF2P9bj/4LnZQ1zRoZhY8mRNVw/N3tXliGI8ai1sI1mlDPkLpeUUM4vq54gH6n0ZlSpz8U/qlYQ==", + "dev": true, + "dependencies": { + "@ethereumjs/block": "^3.6.0", + "@ethereumjs/blockchain": "^5.5.0", + "@ethereumjs/common": "^2.6.0", + "@ethereumjs/tx": "^3.4.0", + "async-eventemitter": "^0.2.4", + "core-js-pure": "^3.0.1", + "debug": "^2.2.0", + "ethereumjs-util": "^7.1.3", + "functional-red-black-tree": "^1.0.1", + "mcl-wasm": "^0.7.1", + "merkle-patricia-tree": "^4.2.2", + "rustbn.js": "~0.2.0" + } + }, + "node_modules/@ethereumjs/vm/node_modules/@ethereumjs/common": { + "version": "2.6.5", + "resolved": "https://registry.npmjs.org/@ethereumjs/common/-/common-2.6.5.tgz", + "integrity": "sha512-lRyVQOeCDaIVtgfbowla32pzeDv2Obr8oR8Put5RdUBNRGr1VGPGQNGP6elWIpgK3YdpzqTOh4GyUGOureVeeA==", + "dev": true, + "dependencies": { + "crc-32": "^1.2.0", + "ethereumjs-util": "^7.1.5" + } + }, + "node_modules/@ethereumjs/vm/node_modules/@ethereumjs/tx": { + "version": "3.5.2", + "resolved": "https://registry.npmjs.org/@ethereumjs/tx/-/tx-3.5.2.tgz", + "integrity": "sha512-gQDNJWKrSDGu2w7w0PzVXVBNMzb7wwdDOmOqczmhNjqFxFuIbhVJDwiGEnxFNC2/b8ifcZzY7MLcluizohRzNw==", + "dev": true, + "dependencies": { + "@ethereumjs/common": "^2.6.4", + "ethereumjs-util": "^7.1.5" + } + }, + "node_modules/@ethereumjs/vm/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/@ethereumjs/vm/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "dev": true + }, "node_modules/@ethersproject/abi": { "version": "5.7.0", "resolved": "https://registry.npmjs.org/@ethersproject/abi/-/abi-5.7.0.tgz", @@ -1975,35 +2760,201 @@ } }, "node_modules/@flashbots/ethers-provider-bundle": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/@flashbots/ethers-provider-bundle/-/ethers-provider-bundle-0.6.0.tgz", - "integrity": "sha512-+SVzxE7FIHq1mWeXwozfusJDGaDrQxc73SH2fHrRb3hf34SxJwdsBSfcYGQUdfSbw4vXF8ZpWTFigd5naY+vnw==", - "dependencies": { - "typescript": "4.1.2", - "uuid": "9.0.0" - }, + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/@flashbots/ethers-provider-bundle/-/ethers-provider-bundle-0.6.1.tgz", + "integrity": "sha512-W7tSX832mi7XKlbg4dIMzV1HMw5Dg0ox0YOqPxW2nO2JqsAZwWYFrAk4nNZnsqRdexHiPF4JUYez/ELI5VpScA==", "peerDependencies": { "ethers": "5.7.2" } }, - "node_modules/@flashbots/ethers-provider-bundle/node_modules/typescript": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.1.2.tgz", - "integrity": "sha512-thGloWsGH3SOxv1SoY7QojKi0tc+8FnOmiarEGMbd/lar7QOEd3hvlx3Fp5y6FlDUGl9L+pd4n2e+oToGMmhRQ==", - "bin": { - "tsc": "bin/tsc", - "tsserver": "bin/tsserver" + "node_modules/@ganache/ethereum-address": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/@ganache/ethereum-address/-/ethereum-address-0.1.4.tgz", + "integrity": "sha512-sTkU0M9z2nZUzDeHRzzGlW724xhMLXo2LeX1hixbnjHWY1Zg1hkqORywVfl+g5uOO8ht8T0v+34IxNxAhmWlbw==", + "dev": true, + "dependencies": { + "@ganache/utils": "0.1.4" + } + }, + "node_modules/@ganache/ethereum-options": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/@ganache/ethereum-options/-/ethereum-options-0.1.4.tgz", + "integrity": "sha512-i4l46taoK2yC41FPkcoDlEVoqHS52wcbHPqJtYETRWqpOaoj9hAg/EJIHLb1t6Nhva2CdTO84bG+qlzlTxjAHw==", + "dev": true, + "dependencies": { + "@ganache/ethereum-address": "0.1.4", + "@ganache/ethereum-utils": "0.1.4", + "@ganache/options": "0.1.4", + "@ganache/utils": "0.1.4", + "bip39": "3.0.4", + "seedrandom": "3.0.5" + } + }, + "node_modules/@ganache/ethereum-utils": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/@ganache/ethereum-utils/-/ethereum-utils-0.1.4.tgz", + "integrity": "sha512-FKXF3zcdDrIoCqovJmHLKZLrJ43234Em2sde/3urUT/10gSgnwlpFmrv2LUMAmSbX3lgZhW/aSs8krGhDevDAg==", + "dev": true, + "dependencies": { + "@ethereumjs/common": "2.6.0", + "@ethereumjs/tx": "3.4.0", + "@ethereumjs/vm": "5.6.0", + "@ganache/ethereum-address": "0.1.4", + "@ganache/rlp": "0.1.4", + "@ganache/utils": "0.1.4", + "emittery": "0.10.0", + "ethereumjs-abi": "0.6.8", + "ethereumjs-util": "7.1.3" + } + }, + "node_modules/@ganache/ethereum-utils/node_modules/@ethereumjs/common": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/@ethereumjs/common/-/common-2.6.0.tgz", + "integrity": "sha512-Cq2qS0FTu6O2VU1sgg+WyU9Ps0M6j/BEMHN+hRaECXCV/r0aI78u4N6p52QW/BDVhwWZpCdrvG8X7NJdzlpNUA==", + "dev": true, + "dependencies": { + "crc-32": "^1.2.0", + "ethereumjs-util": "^7.1.3" + } + }, + "node_modules/@ganache/ethereum-utils/node_modules/@ethereumjs/tx": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/@ethereumjs/tx/-/tx-3.4.0.tgz", + "integrity": "sha512-WWUwg1PdjHKZZxPPo274ZuPsJCWV3SqATrEKQP1n2DrVYVP1aZIYpo/mFaA0BDoE0tIQmBeimRCEA0Lgil+yYw==", + "dev": true, + "dependencies": { + "@ethereumjs/common": "^2.6.0", + "ethereumjs-util": "^7.1.3" + } + }, + "node_modules/@ganache/ethereum-utils/node_modules/emittery": { + "version": "0.10.0", + "resolved": "https://registry.npmjs.org/emittery/-/emittery-0.10.0.tgz", + "integrity": "sha512-AGvFfs+d0JKCJQ4o01ASQLGPmSCxgfU9RFXvzPvZdjKK8oscynksuJhWrSTSw7j7Ep/sZct5b5ZhYCi8S/t0HQ==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sindresorhus/emittery?sponsor=1" + } + }, + "node_modules/@ganache/ethereum-utils/node_modules/ethereum-cryptography": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-0.1.3.tgz", + "integrity": "sha512-w8/4x1SGGzc+tO97TASLja6SLd3fRIK2tLVcV2Gx4IB21hE19atll5Cq9o3d0ZmAYC/8aw0ipieTSiekAea4SQ==", + "dev": true, + "dependencies": { + "@types/pbkdf2": "^3.0.0", + "@types/secp256k1": "^4.0.1", + "blakejs": "^1.1.0", + "browserify-aes": "^1.2.0", + "bs58check": "^2.1.2", + "create-hash": "^1.2.0", + "create-hmac": "^1.1.7", + "hash.js": "^1.1.7", + "keccak": "^3.0.0", + "pbkdf2": "^3.0.17", + "randombytes": "^2.1.0", + "safe-buffer": "^5.1.2", + "scrypt-js": "^3.0.0", + "secp256k1": "^4.0.1", + "setimmediate": "^1.0.5" + } + }, + "node_modules/@ganache/ethereum-utils/node_modules/ethereumjs-util": { + "version": "7.1.3", + "resolved": "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-7.1.3.tgz", + "integrity": "sha512-y+82tEbyASO0K0X1/SRhbJJoAlfcvq8JbrG4a5cjrOks7HS/36efU/0j2flxCPOUM++HFahk33kr/ZxyC4vNuw==", + "dev": true, + "dependencies": { + "@types/bn.js": "^5.1.0", + "bn.js": "^5.1.2", + "create-hash": "^1.1.2", + "ethereum-cryptography": "^0.1.3", + "rlp": "^2.2.4" }, "engines": { - "node": ">=4.2.0" + "node": ">=10.0.0" } }, - "node_modules/@flashbots/ethers-provider-bundle/node_modules/uuid": { - "version": "9.0.0", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.0.tgz", - "integrity": "sha512-MXcSTerfPa4uqyzStbRoTgt5XIe3x5+42+q1sDuy3R5MDk66URdLMOZe5aPX/SQd+kuYAh0FdP/pO28IkQyTeg==", + "node_modules/@ganache/options": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/@ganache/options/-/options-0.1.4.tgz", + "integrity": "sha512-zAe/craqNuPz512XQY33MOAG6Si1Xp0hCvfzkBfj2qkuPcbJCq6W/eQ5MB6SbXHrICsHrZOaelyqjuhSEmjXRw==", + "dev": true, + "dependencies": { + "@ganache/utils": "0.1.4", + "bip39": "3.0.4", + "seedrandom": "3.0.5" + } + }, + "node_modules/@ganache/rlp": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/@ganache/rlp/-/rlp-0.1.4.tgz", + "integrity": "sha512-Do3D1H6JmhikB+6rHviGqkrNywou/liVeFiKIpOBLynIpvZhRCgn3SEDxyy/JovcaozTo/BynHumfs5R085MFQ==", + "dev": true, + "dependencies": { + "@ganache/utils": "0.1.4", + "rlp": "2.2.6" + } + }, + "node_modules/@ganache/rlp/node_modules/bn.js": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", + "dev": true + }, + "node_modules/@ganache/rlp/node_modules/rlp": { + "version": "2.2.6", + "resolved": "https://registry.npmjs.org/rlp/-/rlp-2.2.6.tgz", + "integrity": "sha512-HAfAmL6SDYNWPUOJNrM500x4Thn4PZsEy5pijPh40U9WfNk0z15hUYzO9xVIMAdIHdFtD8CBDHd75Td1g36Mjg==", + "dev": true, + "dependencies": { + "bn.js": "^4.11.1" + }, "bin": { - "uuid": "dist/bin/uuid" + "rlp": "bin/rlp" + } + }, + "node_modules/@ganache/utils": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/@ganache/utils/-/utils-0.1.4.tgz", + "integrity": "sha512-oatUueU3XuXbUbUlkyxeLLH3LzFZ4y5aSkNbx6tjSIhVTPeh+AuBKYt4eQ73FFcTB3nj/gZoslgAh5CN7O369w==", + "dev": true, + "dependencies": { + "emittery": "0.10.0", + "keccak": "3.0.1", + "seedrandom": "3.0.5" + }, + "optionalDependencies": { + "@trufflesuite/bigint-buffer": "1.1.9" + } + }, + "node_modules/@ganache/utils/node_modules/emittery": { + "version": "0.10.0", + "resolved": "https://registry.npmjs.org/emittery/-/emittery-0.10.0.tgz", + "integrity": "sha512-AGvFfs+d0JKCJQ4o01ASQLGPmSCxgfU9RFXvzPvZdjKK8oscynksuJhWrSTSw7j7Ep/sZct5b5ZhYCi8S/t0HQ==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sindresorhus/emittery?sponsor=1" + } + }, + "node_modules/@ganache/utils/node_modules/keccak": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/keccak/-/keccak-3.0.1.tgz", + "integrity": "sha512-epq90L9jlFWCW7+pQa6JOnKn2Xgl2mtI664seYR6MHskvI9agt7AnDqmAlp9TqU4/caMYbA08Hi5DMZAl5zdkA==", + "dev": true, + "hasInstallScript": true, + "dependencies": { + "node-addon-api": "^2.0.0", + "node-gyp-build": "^4.2.0" + }, + "engines": { + "node": ">=10.0.0" } }, "node_modules/@graphql-tools/batch-execute": { @@ -2038,6 +2989,12 @@ "graphql": "^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0" } }, + "node_modules/@graphql-tools/delegate/node_modules/tslib": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.1.tgz", + "integrity": "sha512-tGyy4dAjRIEwI7BzsB0lynWgOpfqjUdq91XXAlIWD2OwKBH7oCl/GZG/HT4BOHrTlPMOASlMQ7veyTqpmRcrNA==", + "optional": true + }, "node_modules/@graphql-tools/merge": { "version": "8.3.1", "resolved": "https://registry.npmjs.org/@graphql-tools/merge/-/merge-8.3.1.tgz", @@ -2052,13 +3009,13 @@ } }, "node_modules/@graphql-tools/mock": { - "version": "8.7.14", - "resolved": "https://registry.npmjs.org/@graphql-tools/mock/-/mock-8.7.14.tgz", - "integrity": "sha512-kIYirhGqhhSI6p/5qj95U8Lngm4mml5B3Z/r7ShI4+/EACyOOV+wUlql45+Y21b9NRUxJbsNHpztGxzgCSyviQ==", + "version": "8.7.20", + "resolved": "https://registry.npmjs.org/@graphql-tools/mock/-/mock-8.7.20.tgz", + "integrity": "sha512-ljcHSJWjC/ZyzpXd5cfNhPI7YljRVvabKHPzKjEs5ElxWu2cdlLGvyNYepApXDsM/OJG/2xuhGM+9GWu5gEAPQ==", "optional": true, "dependencies": { - "@graphql-tools/schema": "9.0.12", - "@graphql-tools/utils": "9.1.3", + "@graphql-tools/schema": "^9.0.18", + "@graphql-tools/utils": "^9.2.1", "fast-json-stable-stringify": "^2.1.0", "tslib": "^2.4.0" }, @@ -2067,12 +3024,12 @@ } }, "node_modules/@graphql-tools/mock/node_modules/@graphql-tools/merge": { - "version": "8.3.14", - "resolved": "https://registry.npmjs.org/@graphql-tools/merge/-/merge-8.3.14.tgz", - "integrity": "sha512-zV0MU1DnxJLIB0wpL4N3u21agEiYFsjm6DI130jqHpwF0pR9HkF+Ni65BNfts4zQelP0GjkHltG+opaozAJ1NA==", + "version": "8.4.2", + "resolved": "https://registry.npmjs.org/@graphql-tools/merge/-/merge-8.4.2.tgz", + "integrity": "sha512-XbrHAaj8yDuINph+sAfuq3QCZ/tKblrTLOpirK0+CAgNlZUCHs0Fa+xtMUURgwCVThLle1AF7svJCxFizygLsw==", "optional": true, "dependencies": { - "@graphql-tools/utils": "9.1.3", + "@graphql-tools/utils": "^9.2.1", "tslib": "^2.4.0" }, "peerDependencies": { @@ -2080,32 +3037,42 @@ } }, "node_modules/@graphql-tools/mock/node_modules/@graphql-tools/schema": { - "version": "9.0.12", - "resolved": "https://registry.npmjs.org/@graphql-tools/schema/-/schema-9.0.12.tgz", - "integrity": "sha512-DmezcEltQai0V1y96nwm0Kg11FDS/INEFekD4nnVgzBqawvznWqK6D6bujn+cw6kivoIr3Uq//QmU/hBlBzUlQ==", + "version": "9.0.19", + "resolved": "https://registry.npmjs.org/@graphql-tools/schema/-/schema-9.0.19.tgz", + "integrity": "sha512-oBRPoNBtCkk0zbUsyP4GaIzCt8C0aCI4ycIRUL67KK5pOHljKLBBtGT+Jr6hkzA74C8Gco8bpZPe7aWFjiaK2w==", "optional": true, "dependencies": { - "@graphql-tools/merge": "8.3.14", - "@graphql-tools/utils": "9.1.3", + "@graphql-tools/merge": "^8.4.1", + "@graphql-tools/utils": "^9.2.1", "tslib": "^2.4.0", - "value-or-promise": "1.0.11" + "value-or-promise": "^1.0.12" }, "peerDependencies": { "graphql": "^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0" } }, "node_modules/@graphql-tools/mock/node_modules/@graphql-tools/utils": { - "version": "9.1.3", - "resolved": "https://registry.npmjs.org/@graphql-tools/utils/-/utils-9.1.3.tgz", - "integrity": "sha512-bbJyKhs6awp1/OmP+WKA1GOyu9UbgZGkhIj5srmiMGLHohEOKMjW784Sk0BZil1w2x95UPu0WHw6/d/HVCACCg==", + "version": "9.2.1", + "resolved": "https://registry.npmjs.org/@graphql-tools/utils/-/utils-9.2.1.tgz", + "integrity": "sha512-WUw506Ql6xzmOORlriNrD6Ugx+HjVgYxt9KCXD9mHAak+eaXSwuGGPyE60hy9xaDEoXKBsG7SkG69ybitaVl6A==", "optional": true, "dependencies": { + "@graphql-typed-document-node/core": "^3.1.1", "tslib": "^2.4.0" }, "peerDependencies": { "graphql": "^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0" } }, + "node_modules/@graphql-tools/mock/node_modules/value-or-promise": { + "version": "1.0.12", + "resolved": "https://registry.npmjs.org/value-or-promise/-/value-or-promise-1.0.12.tgz", + "integrity": "sha512-Z6Uz+TYwEqE7ZN50gwn+1LCVo9ZVrpxRPOhOLnncYkY1ZzOYtrX8Fwf/rFktZ8R5mJms6EZf5TqNOMeZmnPq9Q==", + "optional": true, + "engines": { + "node": ">=12" + } + }, "node_modules/@graphql-tools/schema": { "version": "8.5.1", "resolved": "https://registry.npmjs.org/@graphql-tools/schema/-/schema-8.5.1.tgz", @@ -2133,6 +3100,15 @@ "graphql": "^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0" } }, + "node_modules/@graphql-typed-document-node/core": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/@graphql-typed-document-node/core/-/core-3.2.0.tgz", + "integrity": "sha512-mB9oAsNCm9aM3/SOv4YtBMqZbYj10R7dkq8byBqxGY/ncFwhf2oQzMV+LCRlWoDSEBJ3COiR1yeDvMtsoOsuFQ==", + "optional": true, + "peerDependencies": { + "graphql": "^0.8.0 || ^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0" + } + }, "node_modules/@josephg/resolvable": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/@josephg/resolvable/-/resolvable-1.0.1.tgz", @@ -2156,6 +3132,7 @@ "version": "3.1.0", "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz", "integrity": "sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==", + "peer": true, "engines": { "node": ">=6.0.0" } @@ -2172,7 +3149,8 @@ "node_modules/@jridgewell/sourcemap-codec": { "version": "1.4.14", "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz", - "integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==" + "integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==", + "peer": true }, "node_modules/@jridgewell/trace-mapping": { "version": "0.3.17", @@ -2386,7 +3364,6 @@ "version": "0.6.3", "resolved": "https://registry.npmjs.org/@matterlabs/hardhat-zksync-deploy/-/hardhat-zksync-deploy-0.6.3.tgz", "integrity": "sha512-FB+2xFL/80JJwlGna+aHA6dk4ONrMFqThTZATYVJUAKooA0Aw5qmpmM8B3qsNB4LLzHSO/EmVrHIcLaPv8hYwQ==", - "dev": true, "dependencies": { "chalk": "4.1.2" }, @@ -2397,17 +3374,16 @@ } }, "node_modules/@matterlabs/hardhat-zksync-solc": { - "version": "0.3.14", - "resolved": "https://registry.npmjs.org/@matterlabs/hardhat-zksync-solc/-/hardhat-zksync-solc-0.3.14.tgz", - "integrity": "sha512-iKuQ+vvnpv3K2lkFO41xpJcNWH0KHJ/5JbOboTlPZATVR7F3GJeHfJL+GG4wkxKXnxZczpxyQqC4rAfMKvRaDg==", - "dev": true, + "version": "0.3.16", + "resolved": "https://registry.npmjs.org/@matterlabs/hardhat-zksync-solc/-/hardhat-zksync-solc-0.3.16.tgz", + "integrity": "sha512-gw46yyiCfj49I/nbUcOlnF5xE80WyeW/i8i9ouHom4KWJNt1kioQIwOPkN7aJURhXpJJxKSdeWBrQHLWTZDnTA==", "dependencies": { "@nomiclabs/hardhat-docker": "^2.0.0", "chalk": "4.1.2", "dockerode": "^3.3.4" }, "peerDependencies": { - "hardhat": "^2.12.6" + "hardhat": "^2.13.0" } }, "node_modules/@metamask/eth-sig-util": { @@ -2479,21 +3455,56 @@ "resolved": "https://registry.npmjs.org/@metamask/safe-event-emitter/-/safe-event-emitter-2.0.0.tgz", "integrity": "sha512-/kSXhY692qiV1MXu6EeOZvg5nECLclxNXcKCxJ3cXQgYuRymRHpdx/t7JXfsK+JLjwA1e1c1/SBrlQYpusC29Q==" }, - "node_modules/@noble/ed25519": { - "version": "1.7.1", - "resolved": "https://registry.npmjs.org/@noble/ed25519/-/ed25519-1.7.1.tgz", - "integrity": "sha512-Rk4SkJFaXZiznFyC/t77Q0NKS4FL7TLJJsVG2V2oiEq3kJVeTdxysEe/yRWSpnWMe808XRDJ+VFh5pt/FN5plw==", + "node_modules/@morgan-stanley/ts-mocking-bird": { + "version": "0.6.4", + "resolved": "https://registry.npmjs.org/@morgan-stanley/ts-mocking-bird/-/ts-mocking-bird-0.6.4.tgz", + "integrity": "sha512-57VJIflP8eR2xXa9cD1LUawh+Gh+BVQfVu0n6GALyg/AqV/Nz25kDRvws3i9kIe1PTrbsZZOYpsYp6bXPd6nVA==", + "dev": true, + "dependencies": { + "lodash": "^4.17.16", + "uuid": "^7.0.3" + }, + "peerDependencies": { + "jasmine": "2.x || 3.x || 4.x", + "jest": "26.x || 27.x || 28.x", + "typescript": ">=4.2" + }, + "peerDependenciesMeta": { + "jasmine": { + "optional": true + }, + "jest": { + "optional": true + } + } + }, + "node_modules/@morgan-stanley/ts-mocking-bird/node_modules/uuid": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-7.0.3.tgz", + "integrity": "sha512-DPSke0pXhTZgoF/d+WSt2QaKMCFSfx7QegxEWT+JOuHF5aWrKEn0G+ztjuJg/gG8/ItK+rbPCD/yNv8yyih6Cg==", + "dev": true, + "bin": { + "uuid": "dist/bin/uuid" + } + }, + "node_modules/@noble/curves": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@noble/curves/-/curves-1.0.0.tgz", + "integrity": "sha512-2upgEu0iLiDVDZkNLeFV2+ht0BAVgQnEmCk6JsOch9Rp8xfkMCbvbAZlA2pBHQc73dbl+vFOXfqkf4uemdn0bw==", "funding": [ { "type": "individual", "url": "https://paulmillr.com/funding/" } - ] + ], + "dependencies": { + "@noble/hashes": "1.3.0" + } }, - "node_modules/@noble/hashes": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.1.3.tgz", - "integrity": "sha512-CE0FCR57H2acVI5UOzIGSSIYxZ6v/HOhDR0Ro9VLyhnzLwx0o8W1mmgaqlEUx4049qJDlIBRztv5k+MM8vbO3A==", + "node_modules/@noble/curves/node_modules/@noble/hashes": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.3.0.tgz", + "integrity": "sha512-ilHEACi9DwqJB0pw7kv+Apvh50jiiSyR/cQ3y4W7lOR5mhvn/50FLUfsnfJz0BDZtl/RR16kXvptiv6q1msYZg==", "funding": [ { "type": "individual", @@ -2501,10 +3512,10 @@ } ] }, - "node_modules/@noble/secp256k1": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/@noble/secp256k1/-/secp256k1-1.7.0.tgz", - "integrity": "sha512-kbacwGSsH/CTout0ZnZWxnW1B+jH/7r/WAAKLBtrRJ/+CUH7lgmQzl3GTrQua3SGKWNSDsS6lmjnDpIJ5Dxyaw==", + "node_modules/@noble/hashes": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.1.3.tgz", + "integrity": "sha512-CE0FCR57H2acVI5UOzIGSSIYxZ6v/HOhDR0Ro9VLyhnzLwx0o8W1mmgaqlEUx4049qJDlIBRztv5k+MM8vbO3A==", "funding": [ { "type": "individual", @@ -2513,16 +3524,17 @@ ] }, "node_modules/@nomicfoundation/ethereumjs-block": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@nomicfoundation/ethereumjs-block/-/ethereumjs-block-4.0.0.tgz", - "integrity": "sha512-bk8uP8VuexLgyIZAHExH1QEovqx0Lzhc9Ntm63nCRKLHXIZkobaFaeCVwTESV7YkPKUk7NiK11s8ryed4CS9yA==", - "dependencies": { - "@nomicfoundation/ethereumjs-common": "^3.0.0", - "@nomicfoundation/ethereumjs-rlp": "^4.0.0", - "@nomicfoundation/ethereumjs-trie": "^5.0.0", - "@nomicfoundation/ethereumjs-tx": "^4.0.0", - "@nomicfoundation/ethereumjs-util": "^8.0.0", - "ethereum-cryptography": "0.1.3" + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/@nomicfoundation/ethereumjs-block/-/ethereumjs-block-5.0.1.tgz", + "integrity": "sha512-u1Yioemi6Ckj3xspygu/SfFvm8vZEO8/Yx5a1QLzi6nVU0jz3Pg2OmHKJ5w+D9Ogk1vhwRiqEBAqcb0GVhCyHw==", + "dependencies": { + "@nomicfoundation/ethereumjs-common": "4.0.1", + "@nomicfoundation/ethereumjs-rlp": "5.0.1", + "@nomicfoundation/ethereumjs-trie": "6.0.1", + "@nomicfoundation/ethereumjs-tx": "5.0.1", + "@nomicfoundation/ethereumjs-util": "9.0.1", + "ethereum-cryptography": "0.1.3", + "ethers": "^5.7.1" }, "engines": { "node": ">=14" @@ -2551,16 +3563,17 @@ } }, "node_modules/@nomicfoundation/ethereumjs-blockchain": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/@nomicfoundation/ethereumjs-blockchain/-/ethereumjs-blockchain-6.0.0.tgz", - "integrity": "sha512-pLFEoea6MWd81QQYSReLlLfH7N9v7lH66JC/NMPN848ySPPQA5renWnE7wPByfQFzNrPBuDDRFFULMDmj1C0xw==", - "dependencies": { - "@nomicfoundation/ethereumjs-block": "^4.0.0", - "@nomicfoundation/ethereumjs-common": "^3.0.0", - "@nomicfoundation/ethereumjs-ethash": "^2.0.0", - "@nomicfoundation/ethereumjs-rlp": "^4.0.0", - "@nomicfoundation/ethereumjs-trie": "^5.0.0", - "@nomicfoundation/ethereumjs-util": "^8.0.0", + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/@nomicfoundation/ethereumjs-blockchain/-/ethereumjs-blockchain-7.0.1.tgz", + "integrity": "sha512-NhzndlGg829XXbqJEYrF1VeZhAwSPgsK/OB7TVrdzft3y918hW5KNd7gIZ85sn6peDZOdjBsAXIpXZ38oBYE5A==", + "dependencies": { + "@nomicfoundation/ethereumjs-block": "5.0.1", + "@nomicfoundation/ethereumjs-common": "4.0.1", + "@nomicfoundation/ethereumjs-ethash": "3.0.1", + "@nomicfoundation/ethereumjs-rlp": "5.0.1", + "@nomicfoundation/ethereumjs-trie": "6.0.1", + "@nomicfoundation/ethereumjs-tx": "5.0.1", + "@nomicfoundation/ethereumjs-util": "9.0.1", "abstract-level": "^1.0.3", "debug": "^4.3.3", "ethereum-cryptography": "0.1.3", @@ -2595,22 +3608,22 @@ } }, "node_modules/@nomicfoundation/ethereumjs-common": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@nomicfoundation/ethereumjs-common/-/ethereumjs-common-3.0.0.tgz", - "integrity": "sha512-WS7qSshQfxoZOpHG/XqlHEGRG1zmyjYrvmATvc4c62+gZXgre1ymYP8ZNgx/3FyZY0TWe9OjFlKOfLqmgOeYwA==", + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@nomicfoundation/ethereumjs-common/-/ethereumjs-common-4.0.1.tgz", + "integrity": "sha512-OBErlkfp54GpeiE06brBW/TTbtbuBJV5YI5Nz/aB2evTDo+KawyEzPjBlSr84z/8MFfj8wS2wxzQX1o32cev5g==", "dependencies": { - "@nomicfoundation/ethereumjs-util": "^8.0.0", + "@nomicfoundation/ethereumjs-util": "9.0.1", "crc-32": "^1.2.0" } }, "node_modules/@nomicfoundation/ethereumjs-ethash": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@nomicfoundation/ethereumjs-ethash/-/ethereumjs-ethash-2.0.0.tgz", - "integrity": "sha512-WpDvnRncfDUuXdsAXlI4lXbqUDOA+adYRQaEezIkxqDkc+LDyYDbd/xairmY98GnQzo1zIqsIL6GB5MoMSJDew==", + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@nomicfoundation/ethereumjs-ethash/-/ethereumjs-ethash-3.0.1.tgz", + "integrity": "sha512-KDjGIB5igzWOp8Ik5I6QiRH5DH+XgILlplsHR7TEuWANZA759G6krQ6o8bvj+tRUz08YygMQu/sGd9mJ1DYT8w==", "dependencies": { - "@nomicfoundation/ethereumjs-block": "^4.0.0", - "@nomicfoundation/ethereumjs-rlp": "^4.0.0", - "@nomicfoundation/ethereumjs-util": "^8.0.0", + "@nomicfoundation/ethereumjs-block": "5.0.1", + "@nomicfoundation/ethereumjs-rlp": "5.0.1", + "@nomicfoundation/ethereumjs-util": "9.0.1", "abstract-level": "^1.0.3", "bigint-crypto-utils": "^3.0.23", "ethereum-cryptography": "0.1.3" @@ -2642,14 +3655,14 @@ } }, "node_modules/@nomicfoundation/ethereumjs-evm": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@nomicfoundation/ethereumjs-evm/-/ethereumjs-evm-1.0.0.tgz", - "integrity": "sha512-hVS6qRo3V1PLKCO210UfcEQHvlG7GqR8iFzp0yyjTg2TmJQizcChKgWo8KFsdMw6AyoLgLhHGHw4HdlP8a4i+Q==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@nomicfoundation/ethereumjs-evm/-/ethereumjs-evm-2.0.1.tgz", + "integrity": "sha512-oL8vJcnk0Bx/onl+TgQOQ1t/534GKFaEG17fZmwtPFeH8S5soiBYPCLUrvANOl4sCp9elYxIMzIiTtMtNNN8EQ==", "dependencies": { - "@nomicfoundation/ethereumjs-common": "^3.0.0", - "@nomicfoundation/ethereumjs-util": "^8.0.0", - "@types/async-eventemitter": "^0.2.1", - "async-eventemitter": "^0.2.4", + "@ethersproject/providers": "^5.7.1", + "@nomicfoundation/ethereumjs-common": "4.0.1", + "@nomicfoundation/ethereumjs-tx": "5.0.1", + "@nomicfoundation/ethereumjs-util": "9.0.1", "debug": "^4.3.3", "ethereum-cryptography": "0.1.3", "mcl-wasm": "^0.7.1", @@ -2682,9 +3695,9 @@ } }, "node_modules/@nomicfoundation/ethereumjs-rlp": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@nomicfoundation/ethereumjs-rlp/-/ethereumjs-rlp-4.0.0.tgz", - "integrity": "sha512-GaSOGk5QbUk4eBP5qFbpXoZoZUj/NrW7MRa0tKY4Ew4c2HAS0GXArEMAamtFrkazp0BO4K5p2ZCG3b2FmbShmw==", + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/@nomicfoundation/ethereumjs-rlp/-/ethereumjs-rlp-5.0.1.tgz", + "integrity": "sha512-xtxrMGa8kP4zF5ApBQBtjlSbN5E2HI8m8FYgVSYAnO6ssUoY5pVPGy2H8+xdf/bmMa22Ce8nWMH3aEW8CcqMeQ==", "bin": { "rlp": "bin/rlp" }, @@ -2693,17 +3706,16 @@ } }, "node_modules/@nomicfoundation/ethereumjs-statemanager": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@nomicfoundation/ethereumjs-statemanager/-/ethereumjs-statemanager-1.0.0.tgz", - "integrity": "sha512-jCtqFjcd2QejtuAMjQzbil/4NHf5aAWxUc+CvS0JclQpl+7M0bxMofR2AJdtz+P3u0ke2euhYREDiE7iSO31vQ==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@nomicfoundation/ethereumjs-statemanager/-/ethereumjs-statemanager-2.0.1.tgz", + "integrity": "sha512-B5ApMOnlruVOR7gisBaYwFX+L/AP7i/2oAahatssjPIBVDF6wTX1K7Qpa39E/nzsH8iYuL3krkYeUFIdO3EMUQ==", "dependencies": { - "@nomicfoundation/ethereumjs-common": "^3.0.0", - "@nomicfoundation/ethereumjs-rlp": "^4.0.0", - "@nomicfoundation/ethereumjs-trie": "^5.0.0", - "@nomicfoundation/ethereumjs-util": "^8.0.0", + "@nomicfoundation/ethereumjs-common": "4.0.1", + "@nomicfoundation/ethereumjs-rlp": "5.0.1", "debug": "^4.3.3", "ethereum-cryptography": "0.1.3", - "functional-red-black-tree": "^1.0.1" + "ethers": "^5.7.1", + "js-sdsl": "^4.1.4" } }, "node_modules/@nomicfoundation/ethereumjs-statemanager/node_modules/ethereum-cryptography": { @@ -2729,12 +3741,13 @@ } }, "node_modules/@nomicfoundation/ethereumjs-trie": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/@nomicfoundation/ethereumjs-trie/-/ethereumjs-trie-5.0.0.tgz", - "integrity": "sha512-LIj5XdE+s+t6WSuq/ttegJzZ1vliwg6wlb+Y9f4RlBpuK35B9K02bO7xU+E6Rgg9RGptkWd6TVLdedTI4eNc2A==", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/@nomicfoundation/ethereumjs-trie/-/ethereumjs-trie-6.0.1.tgz", + "integrity": "sha512-A64It/IMpDVODzCgxDgAAla8jNjNtsoQZIzZUfIV5AY6Coi4nvn7+VReBn5itlxMiL2yaTlQr9TRWp3CSI6VoA==", "dependencies": { - "@nomicfoundation/ethereumjs-rlp": "^4.0.0", - "@nomicfoundation/ethereumjs-util": "^8.0.0", + "@nomicfoundation/ethereumjs-rlp": "5.0.1", + "@nomicfoundation/ethereumjs-util": "9.0.1", + "@types/readable-stream": "^2.3.13", "ethereum-cryptography": "0.1.3", "readable-stream": "^3.6.0" }, @@ -2765,13 +3778,15 @@ } }, "node_modules/@nomicfoundation/ethereumjs-tx": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@nomicfoundation/ethereumjs-tx/-/ethereumjs-tx-4.0.0.tgz", - "integrity": "sha512-Gg3Lir2lNUck43Kp/3x6TfBNwcWC9Z1wYue9Nz3v4xjdcv6oDW9QSMJxqsKw9QEGoBBZ+gqwpW7+F05/rs/g1w==", - "dependencies": { - "@nomicfoundation/ethereumjs-common": "^3.0.0", - "@nomicfoundation/ethereumjs-rlp": "^4.0.0", - "@nomicfoundation/ethereumjs-util": "^8.0.0", + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/@nomicfoundation/ethereumjs-tx/-/ethereumjs-tx-5.0.1.tgz", + "integrity": "sha512-0HwxUF2u2hrsIM1fsasjXvlbDOq1ZHFV2dd1yGq8CA+MEYhaxZr8OTScpVkkxqMwBcc5y83FyPl0J9MZn3kY0w==", + "dependencies": { + "@chainsafe/ssz": "^0.9.2", + "@ethersproject/providers": "^5.7.2", + "@nomicfoundation/ethereumjs-common": "4.0.1", + "@nomicfoundation/ethereumjs-rlp": "5.0.1", + "@nomicfoundation/ethereumjs-util": "9.0.1", "ethereum-cryptography": "0.1.3" }, "engines": { @@ -2801,17 +3816,35 @@ } }, "node_modules/@nomicfoundation/ethereumjs-util": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/@nomicfoundation/ethereumjs-util/-/ethereumjs-util-8.0.0.tgz", - "integrity": "sha512-2emi0NJ/HmTG+CGY58fa+DQuAoroFeSH9gKu9O6JnwTtlzJtgfTixuoOqLEgyyzZVvwfIpRueuePb8TonL1y+A==", + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/@nomicfoundation/ethereumjs-util/-/ethereumjs-util-9.0.1.tgz", + "integrity": "sha512-TwbhOWQ8QoSCFhV/DDfSmyfFIHjPjFBj957219+V3jTZYZ2rf9PmDtNOeZWAE3p3vlp8xb02XGpd0v6nTUPbsA==", "dependencies": { - "@nomicfoundation/ethereumjs-rlp": "^4.0.0-beta.2", + "@chainsafe/ssz": "^0.10.0", + "@nomicfoundation/ethereumjs-rlp": "5.0.1", "ethereum-cryptography": "0.1.3" }, "engines": { "node": ">=14" } }, + "node_modules/@nomicfoundation/ethereumjs-util/node_modules/@chainsafe/persistent-merkle-tree": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/@chainsafe/persistent-merkle-tree/-/persistent-merkle-tree-0.5.0.tgz", + "integrity": "sha512-l0V1b5clxA3iwQLXP40zYjyZYospQLZXzBVIhhr9kDg/1qHZfzzHw0jj4VPBijfYCArZDlPkRi1wZaV2POKeuw==", + "dependencies": { + "@chainsafe/as-sha256": "^0.3.1" + } + }, + "node_modules/@nomicfoundation/ethereumjs-util/node_modules/@chainsafe/ssz": { + "version": "0.10.2", + "resolved": "https://registry.npmjs.org/@chainsafe/ssz/-/ssz-0.10.2.tgz", + "integrity": "sha512-/NL3Lh8K+0q7A3LsiFq09YXS9fPE+ead2rr7vM2QK8PLzrNsw3uqrif9bpRX5UxgeRjM+vYi+boCM3+GM4ovXg==", + "dependencies": { + "@chainsafe/as-sha256": "^0.3.1", + "@chainsafe/persistent-merkle-tree": "^0.5.0" + } + }, "node_modules/@nomicfoundation/ethereumjs-util/node_modules/ethereum-cryptography": { "version": "0.1.3", "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-0.1.3.tgz", @@ -2835,24 +3868,21 @@ } }, "node_modules/@nomicfoundation/ethereumjs-vm": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/@nomicfoundation/ethereumjs-vm/-/ethereumjs-vm-6.0.0.tgz", - "integrity": "sha512-JMPxvPQ3fzD063Sg3Tp+UdwUkVxMoo1uML6KSzFhMH3hoQi/LMuXBoEHAoW83/vyNS9BxEe6jm6LmT5xdeEJ6w==", - "dependencies": { - "@nomicfoundation/ethereumjs-block": "^4.0.0", - "@nomicfoundation/ethereumjs-blockchain": "^6.0.0", - "@nomicfoundation/ethereumjs-common": "^3.0.0", - "@nomicfoundation/ethereumjs-evm": "^1.0.0", - "@nomicfoundation/ethereumjs-rlp": "^4.0.0", - "@nomicfoundation/ethereumjs-statemanager": "^1.0.0", - "@nomicfoundation/ethereumjs-trie": "^5.0.0", - "@nomicfoundation/ethereumjs-tx": "^4.0.0", - "@nomicfoundation/ethereumjs-util": "^8.0.0", - "@types/async-eventemitter": "^0.2.1", - "async-eventemitter": "^0.2.4", + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/@nomicfoundation/ethereumjs-vm/-/ethereumjs-vm-7.0.1.tgz", + "integrity": "sha512-rArhyn0jPsS/D+ApFsz3yVJMQ29+pVzNZ0VJgkzAZ+7FqXSRtThl1C1prhmlVr3YNUlfpZ69Ak+RUT4g7VoOuQ==", + "dependencies": { + "@nomicfoundation/ethereumjs-block": "5.0.1", + "@nomicfoundation/ethereumjs-blockchain": "7.0.1", + "@nomicfoundation/ethereumjs-common": "4.0.1", + "@nomicfoundation/ethereumjs-evm": "2.0.1", + "@nomicfoundation/ethereumjs-rlp": "5.0.1", + "@nomicfoundation/ethereumjs-statemanager": "2.0.1", + "@nomicfoundation/ethereumjs-trie": "6.0.1", + "@nomicfoundation/ethereumjs-tx": "5.0.1", + "@nomicfoundation/ethereumjs-util": "9.0.1", "debug": "^4.3.3", "ethereum-cryptography": "0.1.3", - "functional-red-black-tree": "^1.0.1", "mcl-wasm": "^0.7.1", "rustbn.js": "~0.2.0" }, @@ -3075,7 +4105,6 @@ "version": "2.0.2", "resolved": "https://registry.npmjs.org/@nomiclabs/hardhat-docker/-/hardhat-docker-2.0.2.tgz", "integrity": "sha512-XgGEpRT3wlA1VslyB57zyAHV+oll8KnV1TjwnxxC1tpAL04/lbdwpdO5KxInVN8irMSepqFpsiSkqlcnvbE7Ng==", - "dev": true, "dependencies": { "dockerode": "^2.5.8", "fs-extra": "^7.0.1", @@ -3086,7 +4115,6 @@ "version": "1.2.3", "resolved": "https://registry.npmjs.org/bl/-/bl-1.2.3.tgz", "integrity": "sha512-pvcNpa0UU69UT341rO6AYy4FVAIkUHuZXRIWbq+zHnsVcRzDDjIAhGuuYoi0d//cwIwtt4pkpKycWEfjdV+vww==", - "dev": true, "dependencies": { "readable-stream": "^2.3.5", "safe-buffer": "^5.1.1" @@ -3095,14 +4123,12 @@ "node_modules/@nomiclabs/hardhat-docker/node_modules/bl/node_modules/isarray": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", - "dev": true + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==" }, "node_modules/@nomiclabs/hardhat-docker/node_modules/bl/node_modules/readable-stream": { "version": "2.3.8", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", - "dev": true, "dependencies": { "core-util-is": "~1.0.0", "inherits": "~2.0.3", @@ -3117,7 +4143,6 @@ "version": "1.1.1", "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, "dependencies": { "safe-buffer": "~5.1.0" } @@ -3126,7 +4151,6 @@ "version": "3.2.7", "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", - "dev": true, "dependencies": { "ms": "^2.1.1" } @@ -3135,7 +4159,6 @@ "version": "1.0.9", "resolved": "https://registry.npmjs.org/docker-modem/-/docker-modem-1.0.9.tgz", "integrity": "sha512-lVjqCSCIAUDZPAZIeyM125HXfNvOmYYInciphNrLrylUtKyW66meAjSPXWchKVzoIYZx69TPnAepVSSkeawoIw==", - "dev": true, "dependencies": { "debug": "^3.2.6", "JSONStream": "1.3.2", @@ -3150,7 +4173,6 @@ "version": "2.5.8", "resolved": "https://registry.npmjs.org/dockerode/-/dockerode-2.5.8.tgz", "integrity": "sha512-+7iOUYBeDTScmOmQqpUYQaE7F4vvIt6+gIZNHWhqAQEI887tiPFB9OvXI/HzQYqfUNvukMK+9myLW63oTJPZpw==", - "dev": true, "dependencies": { "concat-stream": "~1.6.2", "docker-modem": "^1.0.8", @@ -3164,7 +4186,6 @@ "version": "7.0.1", "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-7.0.1.tgz", "integrity": "sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==", - "dev": true, "dependencies": { "graceful-fs": "^4.1.2", "jsonfile": "^4.0.0", @@ -3177,14 +4198,12 @@ "node_modules/@nomiclabs/hardhat-docker/node_modules/isarray": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", - "integrity": "sha512-D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ==", - "dev": true + "integrity": "sha512-D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ==" }, "node_modules/@nomiclabs/hardhat-docker/node_modules/jsonfile": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", "integrity": "sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==", - "dev": true, "optionalDependencies": { "graceful-fs": "^4.1.6" } @@ -3193,7 +4212,6 @@ "version": "1.3.2", "resolved": "https://registry.npmjs.org/JSONStream/-/JSONStream-1.3.2.tgz", "integrity": "sha512-mn0KSip7N4e0UDPZHnqDsHECo5uGQrixQKnAskOM1BIB8hd7QKbd6il8IPRPudPHOeHiECoCFqhyMaRO9+nWyA==", - "dev": true, "dependencies": { "jsonparse": "^1.2.0", "through": ">=2.2.7 <3" @@ -3209,7 +4227,6 @@ "version": "1.0.3", "resolved": "https://registry.npmjs.org/pump/-/pump-1.0.3.tgz", "integrity": "sha512-8k0JupWme55+9tCVE+FS5ULT3K6AbgqrGa58lTT49RpyfwwcGedHqaC5LlQNdEAumn/wFsu6aPwkuPMioy8kqw==", - "dev": true, "dependencies": { "end-of-stream": "^1.1.0", "once": "^1.3.1" @@ -3219,7 +4236,6 @@ "version": "1.0.34", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz", "integrity": "sha512-ok1qVCJuRkNmvebYikljxJA/UEsKwLl2nI1OmaqAu4/UE+h0wKCHok4XkL/gvi39OacXvw59RJUOFUkDib2rHg==", - "dev": true, "dependencies": { "core-util-is": "~1.0.0", "inherits": "~2.0.1", @@ -3230,20 +4246,17 @@ "node_modules/@nomiclabs/hardhat-docker/node_modules/safe-buffer": { "version": "5.1.2", "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" }, "node_modules/@nomiclabs/hardhat-docker/node_modules/string_decoder": { "version": "0.10.31", "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", - "integrity": "sha512-ev2QzSzWPYmy9GuqfIVildA4OdcGLeFZQrq5ys6RtiuF+RQQiZWr8TZNyAcuVXyQRYfEO+MsoB/1BuQVhOJuoQ==", - "dev": true + "integrity": "sha512-ev2QzSzWPYmy9GuqfIVildA4OdcGLeFZQrq5ys6RtiuF+RQQiZWr8TZNyAcuVXyQRYfEO+MsoB/1BuQVhOJuoQ==" }, "node_modules/@nomiclabs/hardhat-docker/node_modules/tar-fs": { "version": "1.16.3", "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-1.16.3.tgz", "integrity": "sha512-NvCeXpYx7OsmOh8zIOP/ebG55zZmxLE0etfWRbWok+q2Qo8x/vOR/IJT1taADXPe+jsiu9axDb3X4B+iIgNlKw==", - "dev": true, "dependencies": { "chownr": "^1.0.1", "mkdirp": "^0.5.1", @@ -3255,7 +4268,6 @@ "version": "1.6.2", "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-1.6.2.tgz", "integrity": "sha512-rzS0heiNf8Xn7/mpdSVVSMAWAoy9bfb1WOTYC78Z0UQKeKa/CWS8FOq0lKGNa8DWKAn9gxjCvMLYc5PGXYlK2A==", - "dev": true, "dependencies": { "bl": "^1.0.0", "buffer-alloc": "^1.2.0", @@ -3272,14 +4284,12 @@ "node_modules/@nomiclabs/hardhat-docker/node_modules/tar-stream/node_modules/isarray": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", - "dev": true + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==" }, "node_modules/@nomiclabs/hardhat-docker/node_modules/tar-stream/node_modules/readable-stream": { "version": "2.3.8", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", - "dev": true, "dependencies": { "core-util-is": "~1.0.0", "inherits": "~2.0.3", @@ -3294,7 +4304,6 @@ "version": "1.1.1", "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, "dependencies": { "safe-buffer": "~5.1.0" } @@ -3303,24 +4312,23 @@ "version": "0.1.2", "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", - "dev": true, "engines": { "node": ">= 4.0.0" } }, "node_modules/@nomiclabs/hardhat-ethers": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/@nomiclabs/hardhat-ethers/-/hardhat-ethers-2.2.1.tgz", - "integrity": "sha512-RHWYwnxryWR8hzRmU4Jm/q4gzvXpetUOJ4OPlwH2YARcDB+j79+yAYCwO0lN1SUOb4++oOTJEe6AWLEc42LIvg==", + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/@nomiclabs/hardhat-ethers/-/hardhat-ethers-2.2.3.tgz", + "integrity": "sha512-YhzPdzb612X591FOe68q+qXVXGG2ANZRvDo0RRUtimev85rCrAlv/TLMEZw5c+kq9AbzocLTVX/h2jVIFPL9Xg==", "peerDependencies": { "ethers": "^5.0.0", "hardhat": "^2.0.0" } }, "node_modules/@nomiclabs/hardhat-etherscan": { - "version": "3.1.4", - "resolved": "https://registry.npmjs.org/@nomiclabs/hardhat-etherscan/-/hardhat-etherscan-3.1.4.tgz", - "integrity": "sha512-fw8JCfukf6MdIGoySRmSftlM2wBgoaSbWQZgiYfD/KTeaSFEWCdMpuPZcLSBXtwtnQyyWDs07Lo7fL8HSqtD2Q==", + "version": "3.1.7", + "resolved": "https://registry.npmjs.org/@nomiclabs/hardhat-etherscan/-/hardhat-etherscan-3.1.7.tgz", + "integrity": "sha512-tZ3TvSgpvsQ6B6OGmo1/Au6u8BrAkvs1mIC/eURA3xgIfznUZBhmpne8hv7BXUzw9xNL3fXdpOYgOQlVMTcoHQ==", "dev": true, "dependencies": { "@ethersproject/abi": "^5.1.2", @@ -3332,7 +4340,7 @@ "lodash": "^4.17.11", "semver": "^6.3.0", "table": "^6.8.0", - "undici": "^5.4.0" + "undici": "^5.14.0" }, "peerDependencies": { "hardhat": "^2.0.4" @@ -3522,9 +4530,9 @@ } }, "node_modules/@nomiclabs/hardhat-vyper": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/@nomiclabs/hardhat-vyper/-/hardhat-vyper-3.0.2.tgz", - "integrity": "sha512-xU5N9fiKEYWY5euIt01/bKGZ4WrJUgvPzYWns4BLy4ivFmD7Jd7pbuT2HaGPolNVRXzawIEMQP29s8Cjq86NzQ==", + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@nomiclabs/hardhat-vyper/-/hardhat-vyper-3.0.3.tgz", + "integrity": "sha512-WzpXACy7d1AsEmanAOmEqqxI4wrIvDx6q6k07Xb68Dc4JB/+9gKb6kz6UF0Qviq8vYUVfJ8YRpyAjHVZ2uQFlg==", "dev": true, "dependencies": { "debug": "^4.1.1", @@ -3579,31 +4587,17 @@ } }, "node_modules/@nomiclabs/hardhat-waffle": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/@nomiclabs/hardhat-waffle/-/hardhat-waffle-2.0.3.tgz", - "integrity": "sha512-049PHSnI1CZq6+XTbrMbMv5NaL7cednTfPenx02k3cEh8wBMLa6ys++dBETJa6JjfwgA9nBhhHQ173LJv6k2Pg==", + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@nomiclabs/hardhat-waffle/-/hardhat-waffle-2.0.5.tgz", + "integrity": "sha512-U1RH9OQ1mWYQfb+moX5aTgGjpVVlOcpiFI47wwnaGG4kLhcTy90cNiapoqZenxcRAITVbr0/+QSduINL5EsUIQ==", "dev": true, - "dependencies": { - "@types/sinon-chai": "^3.2.3", - "@types/web3": "1.0.19" - }, "peerDependencies": { "@nomiclabs/hardhat-ethers": "^2.0.0", - "ethereum-waffle": "^3.2.0", + "ethereum-waffle": "*", "ethers": "^5.0.0", "hardhat": "^2.0.0" } }, - "node_modules/@nomiclabs/hardhat-waffle/node_modules/@types/web3": { - "version": "1.0.19", - "resolved": "https://registry.npmjs.org/@types/web3/-/web3-1.0.19.tgz", - "integrity": "sha512-fhZ9DyvDYDwHZUp5/STa9XW2re0E8GxoioYJ4pEUZ13YHpApSagixj7IAdoYH5uAK+UalGq6Ml8LYzmgRA/q+A==", - "dev": true, - "dependencies": { - "@types/bn.js": "*", - "@types/underscore": "*" - } - }, "node_modules/@nomiclabs/hardhat-web3": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/@nomiclabs/hardhat-web3/-/hardhat-web3-2.0.0.tgz", @@ -3752,9 +4746,14 @@ } }, "node_modules/@openzeppelin/contracts": { - "version": "4.8.2", - "resolved": "https://registry.npmjs.org/@openzeppelin/contracts/-/contracts-4.8.2.tgz", - "integrity": "sha512-kEUOgPQszC0fSYWpbh2kT94ltOJwj1qfT2DWo+zVttmGmf97JZ99LspePNaeeaLhCImaHVeBbjaQFZQn7+Zc5g==" + "version": "4.8.3", + "resolved": "https://registry.npmjs.org/@openzeppelin/contracts/-/contracts-4.8.3.tgz", + "integrity": "sha512-bQHV8R9Me8IaJoJ2vPG4rXcL7seB7YVuskr4f+f5RyOStSZetwzkWtoqDMl5erkBJy0lDRUnIR2WIkPiC0GJlg==" + }, + "node_modules/@openzeppelin/contracts-upgradeable": { + "version": "4.8.3", + "resolved": "https://registry.npmjs.org/@openzeppelin/contracts-upgradeable/-/contracts-upgradeable-4.8.3.tgz", + "integrity": "sha512-SXDRl7HKpl2WDoJpn7CK/M9U4Z8gNXDHHChAKh0Iz+Wew3wu6CmFYBeie3je8V0GSXZAIYYwUktSrnW/kwVPtg==" }, "node_modules/@openzeppelin/contracts-v0.7": { "name": "@openzeppelin/contracts", @@ -3763,14 +4762,16 @@ "integrity": "sha512-z0zMCjyhhp4y7XKAcDAi3Vgms4T2PstwBdahiO0+9NaGICQKjynK3wduSRplTgk4LXmoO1yfDGO5RbjKYxtuxA==" }, "node_modules/@openzeppelin/hardhat-upgrades": { - "version": "1.22.0", - "resolved": "https://registry.npmjs.org/@openzeppelin/hardhat-upgrades/-/hardhat-upgrades-1.22.0.tgz", - "integrity": "sha512-1qyZnDaxl0C8tne7ykNRa/fxw3FrNCY2M3fGuCiQW5DDkJoXhLgm3JVsXwl6X7q9mQSrik4vgBbI3ErmxmZTYg==", + "version": "1.26.0", + "resolved": "https://registry.npmjs.org/@openzeppelin/hardhat-upgrades/-/hardhat-upgrades-1.26.0.tgz", + "integrity": "sha512-ggCvdIf7A9QcMedCaswecgt3N7hacx3qYOn+4bNPqMAwslo/SJ9vN4AhV0VWkDcY4CqFFou3RFQmDWNeLMBX9A==", "dev": true, "dependencies": { - "@openzeppelin/upgrades-core": "^1.20.0", + "@openzeppelin/upgrades-core": "^1.26.2", "chalk": "^4.1.0", "debug": "^4.1.1", + "defender-base-client": "^1.44.0", + "platform-deploy-client": "^0.6.0", "proper-lockfile": "^4.1.1" }, "bin": { @@ -3833,9 +4834,9 @@ } }, "node_modules/@openzeppelin/upgrades-core": { - "version": "1.20.1", - "resolved": "https://registry.npmjs.org/@openzeppelin/upgrades-core/-/upgrades-core-1.20.1.tgz", - "integrity": "sha512-GXvqLkMNY1dGj9BAIXiqYjdj/qgpoeTed+pH2OL4UOqMlxIh8yIYdkLE9wOWiUVVr0rhUGqaoaJ9NeFLlVzBQQ==", + "version": "1.26.2", + "resolved": "https://registry.npmjs.org/@openzeppelin/upgrades-core/-/upgrades-core-1.26.2.tgz", + "integrity": "sha512-TJORrgyun5qflPos/47P3j61gDw+7W+tEirSBOYRxfVL1WGjX1n8iaLrijPIqzyeS1MKguN1nckAMspQ4SKrxw==", "dev": true, "dependencies": { "cbor": "^8.0.0", @@ -3950,9 +4951,9 @@ "optional": true }, "node_modules/@redux-saga/core": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/@redux-saga/core/-/core-1.2.2.tgz", - "integrity": "sha512-0qr5oleOAmI5WoZLRA6FEa30M4qKZcvx+ZQOQw+RqFeH8t20bvhE329XSPsNfTVP8C6qyDsXOSjuoV+g3+8zkg==", + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/@redux-saga/core/-/core-1.2.3.tgz", + "integrity": "sha512-U1JO6ncFBAklFTwoQ3mjAeQZ6QGutsJzwNBjgVLSWDpZTRhobUzuVDS1qH3SKGJD8fvqoaYOjp6XJ3gCmeZWgA==", "dependencies": { "@babel/runtime": "^7.6.3", "@redux-saga/deferred": "^1.2.1", @@ -3969,9 +4970,9 @@ } }, "node_modules/@redux-saga/core/node_modules/redux": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/redux/-/redux-4.2.0.tgz", - "integrity": "sha512-oSBmcKKIuIR4ME29/AeNUnl5L+hvBq7OaJWzaptTQJAntaPvxIJqfnjbaEiCzzaIz+XmVILfqAM3Ob0aXLPfjA==", + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/redux/-/redux-4.2.1.tgz", + "integrity": "sha512-LAUYz4lc+Do8/g7aeRa8JkyDErK6ekstQaqWQrNRW//MY1TvCEpMtpTWvlQ+FPbWCx+Xixu/6SHt5N0HR+SB4w==", "dependencies": { "@babel/runtime": "^7.9.2" } @@ -4304,9 +5305,9 @@ } }, "node_modules/@solana/spl-token": { - "version": "0.3.6", - "resolved": "https://registry.npmjs.org/@solana/spl-token/-/spl-token-0.3.6.tgz", - "integrity": "sha512-P9pTXjDIRvVbjr3J0mCnSamYqLnICeds7IoH1/Ro2R9OBuOHdp5pqKZoscfZ3UYrgnCWUc1bc9M2m/YPHjw+1g==", + "version": "0.3.7", + "resolved": "https://registry.npmjs.org/@solana/spl-token/-/spl-token-0.3.7.tgz", + "integrity": "sha512-bKGxWTtIw6VDdCBngjtsGlKGLSmiu/8ghSt/IOYJV24BsymRbgq7r12GToeetpxmPaZYLddKwAz7+EwprLfkfg==", "dependencies": { "@solana/buffer-layout": "^4.0.0", "@solana/buffer-layout-utils": "^0.2.0", @@ -4320,53 +5321,37 @@ } }, "node_modules/@solana/web3.js": { - "version": "1.73.0", - "resolved": "https://registry.npmjs.org/@solana/web3.js/-/web3.js-1.73.0.tgz", - "integrity": "sha512-YrgX3Py7ylh8NYkbanoINUPCj//bWUjYZ5/WPy9nQ9SK3Cl7QWCR+NmbDjmC/fTspZGR+VO9LTQslM++jr5PRw==", + "version": "1.76.0", + "resolved": "https://registry.npmjs.org/@solana/web3.js/-/web3.js-1.76.0.tgz", + "integrity": "sha512-aJtF/nTs+9St+KtTK/wgVJ+SinfjYzn+3w1ygYIPw8ST6LH+qHBn8XkodgDTwlv/xzNkaVz1kkUDOZ8BPXyZWA==", "dependencies": { "@babel/runtime": "^7.12.5", - "@noble/ed25519": "^1.7.0", - "@noble/hashes": "^1.1.2", - "@noble/secp256k1": "^1.6.3", + "@noble/curves": "^1.0.0", + "@noble/hashes": "^1.3.0", "@solana/buffer-layout": "^4.0.0", "agentkeepalive": "^4.2.1", "bigint-buffer": "^1.1.5", "bn.js": "^5.0.0", "borsh": "^0.7.0", "bs58": "^4.0.1", - "buffer": "6.0.1", + "buffer": "6.0.3", "fast-stable-stringify": "^1.0.0", "jayson": "^3.4.4", - "node-fetch": "2", - "rpc-websockets": "^7.5.0", + "node-fetch": "^2.6.7", + "rpc-websockets": "^7.5.1", "superstruct": "^0.14.2" - }, - "engines": { - "node": ">=12.20.0" } }, - "node_modules/@solana/web3.js/node_modules/buffer": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.1.tgz", - "integrity": "sha512-rVAXBwEcEoYtxnHSO5iWyhzV/O1WMtkUYWlfdLS7FjU4PnSJJHEfHXi/uHPI5EwltmOA794gN3bm3/pzuctWjQ==", + "node_modules/@solana/web3.js/node_modules/@noble/hashes": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.3.0.tgz", + "integrity": "sha512-ilHEACi9DwqJB0pw7kv+Apvh50jiiSyR/cQ3y4W7lOR5mhvn/50FLUfsnfJz0BDZtl/RR16kXvptiv6q1msYZg==", "funding": [ { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" + "type": "individual", + "url": "https://paulmillr.com/funding/" } - ], - "dependencies": { - "base64-js": "^1.3.1", - "ieee754": "^1.2.1" - } + ] }, "node_modules/@solidity-parser/parser": { "version": "0.14.3", @@ -4388,36 +5373,37 @@ } }, "node_modules/@truffle/abi-utils": { - "version": "0.3.6", - "resolved": "https://registry.npmjs.org/@truffle/abi-utils/-/abi-utils-0.3.6.tgz", - "integrity": "sha512-61aTH2QmwVA1INaPMufRHTsS6jsEhS+GCkuCDdvBDmwctSnCKGDOr185BGt65QrpMRxYmIoH6WFBSNMYxW9GRw==", + "version": "0.3.10", + "resolved": "https://registry.npmjs.org/@truffle/abi-utils/-/abi-utils-0.3.10.tgz", + "integrity": "sha512-Q3TXsF0NIct3KFLL2giF/alfSoKf5axyw+4wQdDRlihFrG1nbTBzWq+Q0ya6oHffZDida0NSpnJIf5IhFMV+JQ==", "dependencies": { "change-case": "3.0.2", "fast-check": "3.1.1", - "web3-utils": "1.8.1" + "web3-utils": "1.10.0" } }, "node_modules/@truffle/blockchain-utils": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/@truffle/blockchain-utils/-/blockchain-utils-0.1.6.tgz", - "integrity": "sha512-SldoNRIFSm3+HMBnSc2jFsu5TWDkCN4X6vL3wrd0t6DIeF7nD6EoPPjxwbFSoqCnkkRxMuZeL6sUx7UMJS/wSA==", + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/@truffle/blockchain-utils/-/blockchain-utils-0.1.7.tgz", + "integrity": "sha512-1nibqGjEHC7KAyDThEFvbm2+EO8zAHee/VjCtxkYBE3ySwP50joh0QCEBjy7K/9z+icpMoDucfxmgaKToBFUgQ==", "dev": true }, "node_modules/@truffle/code-utils": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/@truffle/code-utils/-/code-utils-3.0.1.tgz", - "integrity": "sha512-6cv318jVAvEvg7u7jFq1G6P6K1CMXKNG2btg2qgpmsTQURp4KrqeVrrZegYgx9l4hocpNZ8UAYc9Qw5ATrDg4g==", + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@truffle/code-utils/-/code-utils-3.0.2.tgz", + "integrity": "sha512-Q4FyYIX9G4GyMa8RJDk19kvgiyGZ1CGEx2RmVcXoCDZqEyiHLzqjvCRp+/fuBz2fv7szO6d+60LO1gLCGS1drQ==", "dependencies": { "cbor": "^5.2.0" } }, "node_modules/@truffle/codec": { - "version": "0.14.11", - "resolved": "https://registry.npmjs.org/@truffle/codec/-/codec-0.14.11.tgz", - "integrity": "sha512-NgfMNYemgMXqoEcJA5ZsEhxChCwq33rSxtNxlececEH/1Nf0r+ryfrfmLlyPmv8f3jorVf1GWa0zI0AedGCGYQ==", + "version": "0.14.17", + "resolved": "https://registry.npmjs.org/@truffle/codec/-/codec-0.14.17.tgz", + "integrity": "sha512-kD4dD86huLeaBEq5R8D1zleJEu6NsXbyYLdXl1V1TKdiO8odw5CBC6Y/+wdu5d3t1dyEYrTbhn1dqknZa52pmw==", + "dev": true, "dependencies": { - "@truffle/abi-utils": "^0.3.6", - "@truffle/compile-common": "^0.9.1", + "@truffle/abi-utils": "^0.3.9", + "@truffle/compile-common": "^0.9.4", "big.js": "^6.0.3", "bn.js": "^5.1.3", "cbor": "^5.2.0", @@ -4425,13 +5411,14 @@ "lodash": "^4.17.21", "semver": "7.3.7", "utf8": "^3.0.0", - "web3-utils": "1.8.1" + "web3-utils": "1.8.2" } }, "node_modules/@truffle/codec/node_modules/lru-cache": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, "dependencies": { "yallist": "^4.0.0" }, @@ -4443,6 +5430,7 @@ "version": "7.3.7", "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz", "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==", + "dev": true, "dependencies": { "lru-cache": "^6.0.0" }, @@ -4453,29 +5441,53 @@ "node": ">=10" } }, + "node_modules/@truffle/codec/node_modules/web3-utils": { + "version": "1.8.2", + "resolved": "https://registry.npmjs.org/web3-utils/-/web3-utils-1.8.2.tgz", + "integrity": "sha512-v7j6xhfLQfY7xQDrUP0BKbaNrmZ2/+egbqP9q3KYmOiPpnvAfol+32slgL0WX/5n8VPvKCK5EZ1HGrAVICSToA==", + "dev": true, + "dependencies": { + "bn.js": "^5.2.1", + "ethereum-bloom-filters": "^1.0.6", + "ethereumjs-util": "^7.1.0", + "ethjs-unit": "0.1.6", + "number-to-bn": "1.7.0", + "randombytes": "^2.1.0", + "utf8": "3.0.0" + }, + "engines": { + "node": ">=8.0.0" + } + }, "node_modules/@truffle/codec/node_modules/yallist": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true }, "node_modules/@truffle/compile-common": { - "version": "0.9.1", - "resolved": "https://registry.npmjs.org/@truffle/compile-common/-/compile-common-0.9.1.tgz", - "integrity": "sha512-mhdkX6ExZImHSBO3jGm6aAn8NpVtMTdjq50jRXY/O59/ZNC0J9WpRapxrAKUVNc+XydMdBlfeEpXoqTJg7cbXw==", + "version": "0.9.4", + "resolved": "https://registry.npmjs.org/@truffle/compile-common/-/compile-common-0.9.4.tgz", + "integrity": "sha512-mnqJB/hLiPHNf+WKwt/2MH6lv34xSG/SFCib7+ckAklutUqVLeFo8EwQxinuHNkU7LY0C+YgZXhK1WTCO5YRJQ==", "dependencies": { - "@truffle/error": "^0.1.1", + "@truffle/error": "^0.2.0", "colors": "1.4.0" } }, + "node_modules/@truffle/compile-common/node_modules/@truffle/error": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/@truffle/error/-/error-0.2.0.tgz", + "integrity": "sha512-Fe0/z4WWb7IP2gBnv3l6zqP87Y0kSMs7oiSLakKJq17q3GUunrHSdioKuNspdggxkXIBhEQLhi8C+LJdwmHKWQ==" + }, "node_modules/@truffle/config": { - "version": "1.3.47", - "resolved": "https://registry.npmjs.org/@truffle/config/-/config-1.3.47.tgz", - "integrity": "sha512-L7Gh+HC7xRVGF/rrZoUnJK7pjrTJpnmnSSo+Dt1wGQXHWSn5eq6pMoRzjmp6OgKovrOe0uyBAjFUOlIgVpZwXQ==", + "version": "1.3.56", + "resolved": "https://registry.npmjs.org/@truffle/config/-/config-1.3.56.tgz", + "integrity": "sha512-2wg6zfaUlP3iZP9jHugx3WsyJ2dbIB+nEBULPK5YVbSkqBfXrzW0b9RJYQvyuk/AyFrp/7ycD4r5LnFLq1IHZA==", "optional": true, "dependencies": { - "@truffle/error": "^0.1.1", - "@truffle/events": "^0.1.20", - "@truffle/provider": "^0.3.1", + "@truffle/error": "^0.2.0", + "@truffle/events": "^0.1.23", + "@truffle/provider": "^0.3.9", "conf": "^10.1.2", "debug": "^4.3.1", "find-up": "^2.1.0", @@ -4483,6 +5495,12 @@ "original-require": "^1.0.1" } }, + "node_modules/@truffle/config/node_modules/@truffle/error": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/@truffle/error/-/error-0.2.0.tgz", + "integrity": "sha512-Fe0/z4WWb7IP2gBnv3l6zqP87Y0kSMs7oiSLakKJq17q3GUunrHSdioKuNspdggxkXIBhEQLhi8C+LJdwmHKWQ==", + "optional": true + }, "node_modules/@truffle/config/node_modules/find-up": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", @@ -4551,37 +5569,69 @@ } }, "node_modules/@truffle/contract": { - "version": "4.6.10", - "resolved": "https://registry.npmjs.org/@truffle/contract/-/contract-4.6.10.tgz", - "integrity": "sha512-69IZSXeQKRP3EutILqe+vLY5A5gUpeXUiZhm/Fy/qHHkP238vMjtOkTZGkY6bonYqmgk+vDY7KSYSYKzDNPdCA==", + "version": "4.6.20", + "resolved": "https://registry.npmjs.org/@truffle/contract/-/contract-4.6.20.tgz", + "integrity": "sha512-s7Mbc37L/CF5Apy/cjPnalkgACmG9tTAmcIW28cIZLRLOUAze18pqhtdHryxAQhEOtKGaDAho6TriqL7/74uHw==", "dev": true, "dependencies": { "@ensdomains/ensjs": "^2.1.0", - "@truffle/blockchain-utils": "^0.1.6", - "@truffle/contract-schema": "^3.4.11", - "@truffle/debug-utils": "^6.0.42", - "@truffle/error": "^0.1.1", - "@truffle/interface-adapter": "^0.5.26", + "@truffle/blockchain-utils": "^0.1.7", + "@truffle/contract-schema": "^3.4.13", + "@truffle/debug-utils": "^6.0.48", + "@truffle/error": "^0.2.0", + "@truffle/interface-adapter": "^0.5.32", "bignumber.js": "^7.2.1", "debug": "^4.3.1", "ethers": "^4.0.32", - "web3": "1.8.1", - "web3-core-helpers": "1.8.1", - "web3-core-promievent": "1.8.1", - "web3-eth-abi": "1.8.1", - "web3-utils": "1.8.1" + "web3": "1.8.2", + "web3-core-helpers": "1.8.2", + "web3-core-promievent": "1.8.2", + "web3-eth-abi": "1.8.2", + "web3-utils": "1.8.2" } }, "node_modules/@truffle/contract-schema": { - "version": "3.4.11", - "resolved": "https://registry.npmjs.org/@truffle/contract-schema/-/contract-schema-3.4.11.tgz", - "integrity": "sha512-wReyVZUPyU9Zy5PSCugBLG1nnruBmRAJ/gmoirQiJ9N2n+s1iGBTY49tkDqFMz3XUUE0kplfdb9YKZJlLkTWzQ==", + "version": "3.4.13", + "resolved": "https://registry.npmjs.org/@truffle/contract-schema/-/contract-schema-3.4.13.tgz", + "integrity": "sha512-emG7upuryYFrsPDbHqeASPWXL824M1tinhQwSPG0phSoa3g+RX9fUNNN/VPmF3tSkXLWUMhRnb7ehxnaCuRbZg==", "dev": true, "dependencies": { "ajv": "^6.10.0", "debug": "^4.3.1" } }, + "node_modules/@truffle/contract/node_modules/@ethereumjs/common": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/@ethereumjs/common/-/common-2.5.0.tgz", + "integrity": "sha512-DEHjW6e38o+JmB/NO3GZBpW4lpaiBpkFgXF6jLcJ6gETBYpEyaA5nTimsWBUJR3Vmtm/didUEbNjajskugZORg==", + "dev": true, + "dependencies": { + "crc-32": "^1.2.0", + "ethereumjs-util": "^7.1.1" + } + }, + "node_modules/@truffle/contract/node_modules/@ethereumjs/tx": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/@ethereumjs/tx/-/tx-3.3.2.tgz", + "integrity": "sha512-6AaJhwg4ucmwTvw/1qLaZUX5miWrwZ4nLOUsKyb/HtzS3BMw/CasKhdi1ims9mBKeK9sOJCH4qGKOBGyJCeeog==", + "dev": true, + "dependencies": { + "@ethereumjs/common": "^2.5.0", + "ethereumjs-util": "^7.1.2" + } + }, + "node_modules/@truffle/contract/node_modules/@truffle/error": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/@truffle/error/-/error-0.2.0.tgz", + "integrity": "sha512-Fe0/z4WWb7IP2gBnv3l6zqP87Y0kSMs7oiSLakKJq17q3GUunrHSdioKuNspdggxkXIBhEQLhi8C+LJdwmHKWQ==", + "dev": true + }, + "node_modules/@truffle/contract/node_modules/@types/node": { + "version": "12.20.55", + "resolved": "https://registry.npmjs.org/@types/node/-/node-12.20.55.tgz", + "integrity": "sha512-J8xLz7q2OFulZ2cyGTLE1TbbZcjpno7FaN6zdJNrgAdrJ+DZzh/uFR6YrTb4C+nXakvud8Q4+rbhoIWlYQbUFQ==", + "dev": true + }, "node_modules/@truffle/contract/node_modules/bignumber.js": { "version": "7.2.1", "resolved": "https://registry.npmjs.org/bignumber.js/-/bignumber.js-7.2.1.tgz", @@ -4591,6 +5641,23 @@ "node": "*" } }, + "node_modules/@truffle/contract/node_modules/eth-lib": { + "version": "0.2.8", + "resolved": "https://registry.npmjs.org/eth-lib/-/eth-lib-0.2.8.tgz", + "integrity": "sha512-ArJ7x1WcWOlSpzdoTBX8vkwlkSQ85CjjifSZtV4co64vWxSV8geWfPI9x4SVYu3DSxnX4yWFVTtGL+j9DUFLNw==", + "dev": true, + "dependencies": { + "bn.js": "^4.11.6", + "elliptic": "^6.4.0", + "xhr-request-promise": "^0.1.2" + } + }, + "node_modules/@truffle/contract/node_modules/eth-lib/node_modules/bn.js": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", + "dev": true + }, "node_modules/@truffle/contract/node_modules/ethers": { "version": "4.0.49", "resolved": "https://registry.npmjs.org/ethers/-/ethers-4.0.49.tgz", @@ -4614,6 +5681,12 @@ "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", "dev": true }, + "node_modules/@truffle/contract/node_modules/eventemitter3": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.4.tgz", + "integrity": "sha512-rlaVLnVxtxvoyLsQQFBx53YmXHDxRIzzTLbdfxqi4yocpSjAxXwkU0cScM5JgSKMqEhrZpnvQ2D9gjylR0AimQ==", + "dev": true + }, "node_modules/@truffle/contract/node_modules/hash.js": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.3.tgz", @@ -4649,15 +5722,325 @@ "deprecated": "Please upgrade to version 7 or higher. Older versions may use Math.random() in certain circumstances, which is known to be problematic. See https://v8.dev/blog/math-random for details.", "dev": true }, + "node_modules/@truffle/contract/node_modules/web3": { + "version": "1.8.2", + "resolved": "https://registry.npmjs.org/web3/-/web3-1.8.2.tgz", + "integrity": "sha512-92h0GdEHW9wqDICQQKyG4foZBYi0OQkyg4CRml2F7XBl/NG+fu9o6J19kzfFXzSBoA4DnJXbyRgj/RHZv5LRiw==", + "dev": true, + "hasInstallScript": true, + "dependencies": { + "web3-bzz": "1.8.2", + "web3-core": "1.8.2", + "web3-eth": "1.8.2", + "web3-eth-personal": "1.8.2", + "web3-net": "1.8.2", + "web3-shh": "1.8.2", + "web3-utils": "1.8.2" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/@truffle/contract/node_modules/web3-bzz": { + "version": "1.8.2", + "resolved": "https://registry.npmjs.org/web3-bzz/-/web3-bzz-1.8.2.tgz", + "integrity": "sha512-1EEnxjPnFnvNWw3XeeKuTR8PBxYd0+XWzvaLK7OJC/Go9O8llLGxrxICbKV+8cgIE0sDRBxiYx02X+6OhoAQ9w==", + "dev": true, + "hasInstallScript": true, + "dependencies": { + "@types/node": "^12.12.6", + "got": "12.1.0", + "swarm-js": "^0.1.40" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/@truffle/contract/node_modules/web3-core": { + "version": "1.8.2", + "resolved": "https://registry.npmjs.org/web3-core/-/web3-core-1.8.2.tgz", + "integrity": "sha512-DJTVEAYcNqxkqruJE+Rxp3CIv0y5AZMwPHQmOkz/cz+MM75SIzMTc0AUdXzGyTS8xMF8h3YWMQGgGEy8SBf1PQ==", + "dev": true, + "dependencies": { + "@types/bn.js": "^5.1.0", + "@types/node": "^12.12.6", + "bignumber.js": "^9.0.0", + "web3-core-helpers": "1.8.2", + "web3-core-method": "1.8.2", + "web3-core-requestmanager": "1.8.2", + "web3-utils": "1.8.2" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/@truffle/contract/node_modules/web3-core-method": { + "version": "1.8.2", + "resolved": "https://registry.npmjs.org/web3-core-method/-/web3-core-method-1.8.2.tgz", + "integrity": "sha512-1qnr5mw5wVyULzLOrk4B+ryO3gfGjGd/fx8NR+J2xCGLf1e6OSjxT9vbfuQ3fErk/NjSTWWreieYWLMhaogcRA==", + "dev": true, + "dependencies": { + "@ethersproject/transactions": "^5.6.2", + "web3-core-helpers": "1.8.2", + "web3-core-promievent": "1.8.2", + "web3-core-subscriptions": "1.8.2", + "web3-utils": "1.8.2" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/@truffle/contract/node_modules/web3-core-requestmanager": { + "version": "1.8.2", + "resolved": "https://registry.npmjs.org/web3-core-requestmanager/-/web3-core-requestmanager-1.8.2.tgz", + "integrity": "sha512-p1d090RYs5Mu7DK1yyc3GCBVZB/03rBtFhYFoS2EruGzOWs/5Q0grgtpwS/DScdRAm8wB8mYEBhY/RKJWF6B2g==", + "dev": true, + "dependencies": { + "util": "^0.12.5", + "web3-core-helpers": "1.8.2", + "web3-providers-http": "1.8.2", + "web3-providers-ipc": "1.8.2", + "web3-providers-ws": "1.8.2" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/@truffle/contract/node_modules/web3-core-subscriptions": { + "version": "1.8.2", + "resolved": "https://registry.npmjs.org/web3-core-subscriptions/-/web3-core-subscriptions-1.8.2.tgz", + "integrity": "sha512-vXQogHDmAIQcKpXvGiMddBUeP9lnKgYF64+yQJhPNE5PnWr1sAibXuIPV7mIPihpFr/n/DORRj6Wh1pUv9zaTw==", + "dev": true, + "dependencies": { + "eventemitter3": "4.0.4", + "web3-core-helpers": "1.8.2" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/@truffle/contract/node_modules/web3-core/node_modules/bignumber.js": { + "version": "9.1.1", + "resolved": "https://registry.npmjs.org/bignumber.js/-/bignumber.js-9.1.1.tgz", + "integrity": "sha512-pHm4LsMJ6lzgNGVfZHjMoO8sdoRhOzOH4MLmY65Jg70bpxCKu5iOHNJyfF6OyvYw7t8Fpf35RuzUyqnQsj8Vig==", + "dev": true, + "engines": { + "node": "*" + } + }, + "node_modules/@truffle/contract/node_modules/web3-eth": { + "version": "1.8.2", + "resolved": "https://registry.npmjs.org/web3-eth/-/web3-eth-1.8.2.tgz", + "integrity": "sha512-JoTiWWc4F4TInpbvDUGb0WgDYJsFhuIjJlinc5ByjWD88Gvh+GKLsRjjFdbqe5YtwIGT4NymwoC5LQd1K6u/QQ==", + "dev": true, + "dependencies": { + "web3-core": "1.8.2", + "web3-core-helpers": "1.8.2", + "web3-core-method": "1.8.2", + "web3-core-subscriptions": "1.8.2", + "web3-eth-abi": "1.8.2", + "web3-eth-accounts": "1.8.2", + "web3-eth-contract": "1.8.2", + "web3-eth-ens": "1.8.2", + "web3-eth-iban": "1.8.2", + "web3-eth-personal": "1.8.2", + "web3-net": "1.8.2", + "web3-utils": "1.8.2" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/@truffle/contract/node_modules/web3-eth-accounts": { + "version": "1.8.2", + "resolved": "https://registry.npmjs.org/web3-eth-accounts/-/web3-eth-accounts-1.8.2.tgz", + "integrity": "sha512-c367Ij63VCz9YdyjiHHWLFtN85l6QghgwMQH2B1eM/p9Y5lTlTX7t/Eg/8+f1yoIStXbk2w/PYM2lk+IkbqdLA==", + "dev": true, + "dependencies": { + "@ethereumjs/common": "2.5.0", + "@ethereumjs/tx": "3.3.2", + "eth-lib": "0.2.8", + "ethereumjs-util": "^7.1.5", + "scrypt-js": "^3.0.1", + "uuid": "^9.0.0", + "web3-core": "1.8.2", + "web3-core-helpers": "1.8.2", + "web3-core-method": "1.8.2", + "web3-utils": "1.8.2" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/@truffle/contract/node_modules/web3-eth-accounts/node_modules/scrypt-js": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/scrypt-js/-/scrypt-js-3.0.1.tgz", + "integrity": "sha512-cdwTTnqPu0Hyvf5in5asVdZocVDTNRmR7XEcJuIzMjJeSHybHl7vpB66AzwTaIg6CLSbtjcxc8fqcySfnTkccA==", + "dev": true + }, + "node_modules/@truffle/contract/node_modules/web3-eth-accounts/node_modules/uuid": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.0.tgz", + "integrity": "sha512-MXcSTerfPa4uqyzStbRoTgt5XIe3x5+42+q1sDuy3R5MDk66URdLMOZe5aPX/SQd+kuYAh0FdP/pO28IkQyTeg==", + "dev": true, + "bin": { + "uuid": "dist/bin/uuid" + } + }, + "node_modules/@truffle/contract/node_modules/web3-eth-contract": { + "version": "1.8.2", + "resolved": "https://registry.npmjs.org/web3-eth-contract/-/web3-eth-contract-1.8.2.tgz", + "integrity": "sha512-ID5A25tHTSBNwOPjiXSVzxruz006ULRIDbzWTYIFTp7NJ7vXu/kynKK2ag/ObuTqBpMbobP8nXcA9b5EDkIdQA==", + "dev": true, + "dependencies": { + "@types/bn.js": "^5.1.0", + "web3-core": "1.8.2", + "web3-core-helpers": "1.8.2", + "web3-core-method": "1.8.2", + "web3-core-promievent": "1.8.2", + "web3-core-subscriptions": "1.8.2", + "web3-eth-abi": "1.8.2", + "web3-utils": "1.8.2" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/@truffle/contract/node_modules/web3-eth-ens": { + "version": "1.8.2", + "resolved": "https://registry.npmjs.org/web3-eth-ens/-/web3-eth-ens-1.8.2.tgz", + "integrity": "sha512-PWph7C/CnqdWuu1+SH4U4zdrK4t2HNt0I4XzPYFdv9ugE8EuojselioPQXsVGvjql+Nt3jDLvQvggPqlMbvwRw==", + "dev": true, + "dependencies": { + "content-hash": "^2.5.2", + "eth-ens-namehash": "2.0.8", + "web3-core": "1.8.2", + "web3-core-helpers": "1.8.2", + "web3-core-promievent": "1.8.2", + "web3-eth-abi": "1.8.2", + "web3-eth-contract": "1.8.2", + "web3-utils": "1.8.2" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/@truffle/contract/node_modules/web3-eth-personal": { + "version": "1.8.2", + "resolved": "https://registry.npmjs.org/web3-eth-personal/-/web3-eth-personal-1.8.2.tgz", + "integrity": "sha512-Vg4HfwCr7doiUF/RC+Jz0wT4+cYaXcOWMAW2AHIjHX6Z7Xwa8nrURIeQgeEE62qcEHAzajyAdB1u6bJyTfuCXw==", + "dev": true, + "dependencies": { + "@types/node": "^12.12.6", + "web3-core": "1.8.2", + "web3-core-helpers": "1.8.2", + "web3-core-method": "1.8.2", + "web3-net": "1.8.2", + "web3-utils": "1.8.2" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/@truffle/contract/node_modules/web3-net": { + "version": "1.8.2", + "resolved": "https://registry.npmjs.org/web3-net/-/web3-net-1.8.2.tgz", + "integrity": "sha512-1itkDMGmbgb83Dg9nporFes9/fxsU7smJ3oRXlFkg4ZHn8YJyP1MSQFPJWWwSc+GrcCFt4O5IrUTvEkHqE3xag==", + "dev": true, + "dependencies": { + "web3-core": "1.8.2", + "web3-core-method": "1.8.2", + "web3-utils": "1.8.2" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/@truffle/contract/node_modules/web3-providers-http": { + "version": "1.8.2", + "resolved": "https://registry.npmjs.org/web3-providers-http/-/web3-providers-http-1.8.2.tgz", + "integrity": "sha512-2xY94IIEQd16+b+vIBF4IC1p7GVaz9q4EUFscvMUjtEq4ru4Atdzjs9GP+jmcoo49p70II0UV3bqQcz0TQfVyQ==", + "dev": true, + "dependencies": { + "abortcontroller-polyfill": "^1.7.3", + "cross-fetch": "^3.1.4", + "es6-promise": "^4.2.8", + "web3-core-helpers": "1.8.2" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/@truffle/contract/node_modules/web3-providers-ipc": { + "version": "1.8.2", + "resolved": "https://registry.npmjs.org/web3-providers-ipc/-/web3-providers-ipc-1.8.2.tgz", + "integrity": "sha512-p6fqKVGFg+WiXGHWnB1hu43PbvPkDHTz4RgoEzbXugv5rtv5zfYLqm8Ba6lrJOS5ks9kGKR21a0y3NzE3u7V4w==", + "dev": true, + "dependencies": { + "oboe": "2.1.5", + "web3-core-helpers": "1.8.2" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/@truffle/contract/node_modules/web3-providers-ws": { + "version": "1.8.2", + "resolved": "https://registry.npmjs.org/web3-providers-ws/-/web3-providers-ws-1.8.2.tgz", + "integrity": "sha512-3s/4K+wHgbiN+Zrp9YjMq2eqAF6QGABw7wFftPdx+m5hWImV27/MoIx57c6HffNRqZXmCHnfWWFCNHHsi7wXnA==", + "dev": true, + "dependencies": { + "eventemitter3": "4.0.4", + "web3-core-helpers": "1.8.2", + "websocket": "^1.0.32" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/@truffle/contract/node_modules/web3-shh": { + "version": "1.8.2", + "resolved": "https://registry.npmjs.org/web3-shh/-/web3-shh-1.8.2.tgz", + "integrity": "sha512-uZ+3MAoNcaJsXXNCDnizKJ5viBNeHOFYsCbFhV755Uu52FswzTOw6DtE7yK9nYXMtIhiSgi7nwl1RYzP8pystw==", + "dev": true, + "hasInstallScript": true, + "dependencies": { + "web3-core": "1.8.2", + "web3-core-method": "1.8.2", + "web3-core-subscriptions": "1.8.2", + "web3-net": "1.8.2" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/@truffle/contract/node_modules/web3-utils": { + "version": "1.8.2", + "resolved": "https://registry.npmjs.org/web3-utils/-/web3-utils-1.8.2.tgz", + "integrity": "sha512-v7j6xhfLQfY7xQDrUP0BKbaNrmZ2/+egbqP9q3KYmOiPpnvAfol+32slgL0WX/5n8VPvKCK5EZ1HGrAVICSToA==", + "dev": true, + "dependencies": { + "bn.js": "^5.2.1", + "ethereum-bloom-filters": "^1.0.6", + "ethereumjs-util": "^7.1.0", + "ethjs-unit": "0.1.6", + "number-to-bn": "1.7.0", + "randombytes": "^2.1.0", + "utf8": "3.0.0" + }, + "engines": { + "node": ">=8.0.0" + } + }, "node_modules/@truffle/dashboard-message-bus-client": { - "version": "0.1.9", - "resolved": "https://registry.npmjs.org/@truffle/dashboard-message-bus-client/-/dashboard-message-bus-client-0.1.9.tgz", - "integrity": "sha512-5tzPkMMkjSrD5POt3odHKTMBCAe2pPNsWi19BtFd4vASLwvqWVd0B2oIjQLqMLe/fSDPnpCmMwb5OK0FR/IzAA==", + "version": "0.1.10", + "resolved": "https://registry.npmjs.org/@truffle/dashboard-message-bus-client/-/dashboard-message-bus-client-0.1.10.tgz", + "integrity": "sha512-r9GpdR96T8xzk2Z3Qq5lowixT6hQwDZ9F3D3oNjOv2AOwBrC7dGkt1Ra1FQRsABn4K7LUVvnjjn6rALlsatAdw==", "optional": true, "dependencies": { "@truffle/dashboard-message-bus-common": "^0.1.5", "@truffle/promise-tracker": "^0.1.5", - "axios": "0.27.2", + "axios": "1.2.4", "debug": "^4.3.1", "delay": "^5.0.0", "isomorphic-ws": "^4.0.1", @@ -4667,13 +6050,14 @@ } }, "node_modules/@truffle/dashboard-message-bus-client/node_modules/axios": { - "version": "0.27.2", - "resolved": "https://registry.npmjs.org/axios/-/axios-0.27.2.tgz", - "integrity": "sha512-t+yRIyySRTp/wua5xEr+z1q60QmLq8ABsS5O9Me1AsE5dfKqgnCFzwiCZZ/cGNd1lq4/7akDWMxdhVlucjmnOQ==", + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/axios/-/axios-1.2.4.tgz", + "integrity": "sha512-lIQuCfBJvZB/Bv7+RWUqEJqNShGOVpk9v7P0ZWx5Ip0qY6u7JBAU6dzQPMLasU9vHL2uD8av/1FDJXj7n6c39w==", "optional": true, "dependencies": { - "follow-redirects": "^1.14.9", - "form-data": "^4.0.0" + "follow-redirects": "^1.15.0", + "form-data": "^4.0.0", + "proxy-from-env": "^1.1.0" } }, "node_modules/@truffle/dashboard-message-bus-client/node_modules/form-data": { @@ -4718,16 +6102,16 @@ "optional": true }, "node_modules/@truffle/db": { - "version": "2.0.10", - "resolved": "https://registry.npmjs.org/@truffle/db/-/db-2.0.10.tgz", - "integrity": "sha512-APlORen3CwilujWZFTNhsX8yRWbNj7ifhuaLckNaWOcQ0knE7nrjHf2pXCdgtgRLP9Ae91jWHm32+7eLYgYpZA==", + "version": "2.0.24", + "resolved": "https://registry.npmjs.org/@truffle/db/-/db-2.0.24.tgz", + "integrity": "sha512-p4UsUKd47/Iv2SJ2m24+ObIalb4Ljt7ysv3mY/gKvEIw3fKxSErPgxDKaC0l3kPOVaz8gfXkbWDGeuLf/f66+Q==", "optional": true, "dependencies": { "@graphql-tools/delegate": "^8.4.3", "@graphql-tools/schema": "^8.3.1", - "@truffle/abi-utils": "^0.3.6", - "@truffle/code-utils": "^3.0.1", - "@truffle/config": "^1.3.47", + "@truffle/abi-utils": "^0.3.10", + "@truffle/code-utils": "^3.0.2", + "@truffle/config": "^1.3.56", "abstract-leveldown": "^7.2.0", "apollo-server": "^3.11.0", "debug": "^4.3.1", @@ -4741,15 +6125,15 @@ "pouchdb-adapter-memory": "^7.1.1", "pouchdb-debug": "^7.1.1", "pouchdb-find": "^7.0.0", - "web3-utils": "1.8.1" + "web3-utils": "1.10.0" } }, "node_modules/@truffle/db-loader": { - "version": "0.2.10", - "resolved": "https://registry.npmjs.org/@truffle/db-loader/-/db-loader-0.2.10.tgz", - "integrity": "sha512-07Vf1yuwJur78K4hgG//MGEvLL4ZAnEu6BBvGK/ZSJ/iIQjj9a4wgQgXrAKMsbPGNEtR7qy+0WpvOslpaDnQZQ==", + "version": "0.2.24", + "resolved": "https://registry.npmjs.org/@truffle/db-loader/-/db-loader-0.2.24.tgz", + "integrity": "sha512-ucnZqVb4Aw9fnsUnqwgKZiaDUcw2n6C4tuGyl2iVOr1Xpl+F5Cgrz1cfjJ1igdZrtZnmKl0tDvymt2YwPeeYgw==", "optionalDependencies": { - "@truffle/db": "^2.0.10" + "@truffle/db": "^2.0.24" } }, "node_modules/@truffle/db/node_modules/abstract-leveldown": { @@ -4806,17 +6190,17 @@ } }, "node_modules/@truffle/debug-utils": { - "version": "6.0.42", - "resolved": "https://registry.npmjs.org/@truffle/debug-utils/-/debug-utils-6.0.42.tgz", - "integrity": "sha512-9v70tj+My0Z2UZJ9OsuUlfo4Dt2AJqAQa/YWtGe28H8zsi+o9Dca0RsKWecuprdllgzrEs7ad8QUtSINhwjIlg==", + "version": "6.0.48", + "resolved": "https://registry.npmjs.org/@truffle/debug-utils/-/debug-utils-6.0.48.tgz", + "integrity": "sha512-HdK/7eH5EFrcTPeZVEgKaKkkzuZ4xsrH8yw+EoLEsScLsOEuQeKynY61NctjuU93voATWrYmV99Sfb/MRq2i2g==", "dev": true, "dependencies": { - "@truffle/codec": "^0.14.11", + "@truffle/codec": "^0.14.17", "@trufflesuite/chromafi": "^3.0.0", "bn.js": "^5.1.3", "chalk": "^2.4.2", "debug": "^4.3.1", - "highlightjs-solidity": "^2.0.5" + "highlightjs-solidity": "^2.0.6" } }, "node_modules/@truffle/debug-utils/node_modules/ansi-styles": { @@ -4891,13 +6275,14 @@ } }, "node_modules/@truffle/debugger": { - "version": "11.0.21", - "resolved": "https://registry.npmjs.org/@truffle/debugger/-/debugger-11.0.21.tgz", - "integrity": "sha512-iYoa01CzFVFhusXrQM34cTRqKT7W2KHoyciYo14IUjPAnUk/i7DwB4zcTqOfgTyz36G2Yd92uYf8Rc2t0Sdv0w==", + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/@truffle/debugger/-/debugger-11.1.0.tgz", + "integrity": "sha512-ws3z3ktvW631W6zi9jd9O6+osF6jh+Z6naumIf9ySfAM1cdV4wTHd8iyYwEEc180pJinlc4oCZGvcr5cE97NVw==", "dependencies": { - "@truffle/abi-utils": "^0.3.6", - "@truffle/codec": "^0.14.11", - "@truffle/source-map-utils": "^1.3.103", + "@ensdomains/ensjs": "^2.1.0", + "@truffle/abi-utils": "^0.3.10", + "@truffle/codec": "^0.15.0", + "@truffle/source-map-utils": "^1.3.111", "bn.js": "^5.1.3", "debug": "^4.3.1", "json-pointer": "^0.6.1", @@ -4907,8 +6292,25 @@ "redux-saga": "1.0.0", "reselect-tree": "^1.3.7", "semver": "7.3.7", - "web3": "1.8.1", - "web3-eth-abi": "1.8.1" + "web3": "1.10.0", + "web3-eth-abi": "1.10.0" + } + }, + "node_modules/@truffle/debugger/node_modules/@truffle/codec": { + "version": "0.15.0", + "resolved": "https://registry.npmjs.org/@truffle/codec/-/codec-0.15.0.tgz", + "integrity": "sha512-FEcwtDUuMr85a9u39eqvNgmUgXDvIkwhJjMCCi/bC4/GmLisOpih8vAidDgdYMJldukMPaOX5XIIgsG5k615YA==", + "dependencies": { + "@truffle/abi-utils": "^0.3.10", + "@truffle/compile-common": "^0.9.4", + "big.js": "^6.0.3", + "bn.js": "^5.1.3", + "cbor": "^5.2.0", + "debug": "^4.3.1", + "lodash": "^4.17.21", + "semver": "7.3.7", + "utf8": "^3.0.0", + "web3-utils": "1.10.0" } }, "node_modules/@truffle/debugger/node_modules/lru-cache": { @@ -4936,6 +6338,18 @@ "node": ">=10" } }, + "node_modules/@truffle/debugger/node_modules/web3-eth-abi": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/web3-eth-abi/-/web3-eth-abi-1.10.0.tgz", + "integrity": "sha512-cwS+qRBWpJ43aI9L3JS88QYPfFcSJJ3XapxOQ4j40v6mk7ATpA8CVK1vGTzpihNlOfMVRBkR95oAj7oL6aiDOg==", + "dependencies": { + "@ethersproject/abi": "^5.6.3", + "web3-utils": "1.10.0" + }, + "engines": { + "node": ">=8.0.0" + } + }, "node_modules/@truffle/debugger/node_modules/yallist": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", @@ -4944,25 +6358,26 @@ "node_modules/@truffle/error": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/@truffle/error/-/error-0.1.1.tgz", - "integrity": "sha512-sE7c9IHIGdbK4YayH4BC8i8qMjoAOeg6nUXUDZZp8wlU21/EMpaG+CLx+KqcIPyR+GSWIW3Dm0PXkr2nlggFDA==" + "integrity": "sha512-sE7c9IHIGdbK4YayH4BC8i8qMjoAOeg6nUXUDZZp8wlU21/EMpaG+CLx+KqcIPyR+GSWIW3Dm0PXkr2nlggFDA==", + "dev": true }, "node_modules/@truffle/events": { - "version": "0.1.20", - "resolved": "https://registry.npmjs.org/@truffle/events/-/events-0.1.20.tgz", - "integrity": "sha512-vqKCgyvYDBm/RmjglTMfGR3ZnVHkFEuhAxgQOsA2uqMOW0FonaMY6/paOddy/kSLfVBwFd8hwG53PyBAAwDhkA==", + "version": "0.1.23", + "resolved": "https://registry.npmjs.org/@truffle/events/-/events-0.1.23.tgz", + "integrity": "sha512-OIcOZXDCJPz9zzK4uTj0HxCqASNKVcs6g3Z9fT6sehGZRD4ubGHpQZoMchLBwXcggoDRApq2svTdghai624pLg==", "optional": true, "dependencies": { - "@truffle/dashboard-message-bus-client": "^0.1.9", + "@truffle/dashboard-message-bus-client": "^0.1.10", "@truffle/spinners": "^0.2.3", "debug": "^4.3.1", "emittery": "^0.4.1", - "web3-utils": "1.8.1" + "web3-utils": "1.10.0" } }, "node_modules/@truffle/hdwallet": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/@truffle/hdwallet/-/hdwallet-0.1.1.tgz", - "integrity": "sha512-hKAZbB6HBo0L4hV/IsulCDiHF5eXCle8TuAhxe1auCIkwS6Dz6Z4BoA3JzekRwcj+dc1bibjdP1A4XOTo2ayqw==", + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/@truffle/hdwallet/-/hdwallet-0.1.2.tgz", + "integrity": "sha512-Q8Q0S+3VpCFOJQ9o/hr5juV4TJQ1bxoMJ+Eq9ZwTuhprxrhoCqimEZ0/A+D8Gcg5Nw7koQyzyrcqIhPmIVeK9A==", "dependencies": { "ethereum-cryptography": "1.1.2", "keccak": "3.0.2", @@ -4970,21 +6385,21 @@ } }, "node_modules/@truffle/hdwallet-provider": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/@truffle/hdwallet-provider/-/hdwallet-provider-2.1.4.tgz", - "integrity": "sha512-oVpiQSu3JtaDuVHKLZ9Is3hxoCVFwlMjflCJyqTBXMhLmPMPpij4paxaUvXTpeUzGZJJGcBl2DVFhnmPshGrJQ==", + "version": "2.1.11", + "resolved": "https://registry.npmjs.org/@truffle/hdwallet-provider/-/hdwallet-provider-2.1.11.tgz", + "integrity": "sha512-niLNFG7JYsXCbZrDjvPs9bDln0ix71f1Xvr6Qm6zHHNr4Of+yKMTAs4lXHrY7ioyEPDLlS5yfOdj+S7RJCVt1w==", "dependencies": { "@ethereumjs/common": "^2.4.0", "@ethereumjs/tx": "^3.3.0", "@metamask/eth-sig-util": "4.0.1", - "@truffle/hdwallet": "^0.1.1", + "@truffle/hdwallet": "^0.1.2", "@types/ethereum-protocol": "^1.0.0", "@types/web3": "1.0.20", "@types/web3-provider-engine": "^14.0.0", "ethereum-cryptography": "1.1.2", "ethereum-protocol": "^1.0.1", "ethereumjs-util": "^7.1.5", - "web3": "1.8.1", + "web3": "1.10.0", "web3-provider-engine": "16.0.3" } }, @@ -5016,14 +6431,14 @@ } }, "node_modules/@truffle/interface-adapter": { - "version": "0.5.26", - "resolved": "https://registry.npmjs.org/@truffle/interface-adapter/-/interface-adapter-0.5.26.tgz", - "integrity": "sha512-fBhoqtT+CT4XKXcOijvw0RIMgyUi3FJg+n5i5PyGBsoRzqbLZd9cZq+oMNjOZPdf3GH68hsOFOaQO5tZH7oZow==", + "version": "0.5.33", + "resolved": "https://registry.npmjs.org/@truffle/interface-adapter/-/interface-adapter-0.5.33.tgz", + "integrity": "sha512-vbVcH2I8hX+wM0Xj9uAjpgxMHqfT+y6m26zSkOVvZ2wo9Ez1slaOJkK1/TZK+7nJitGZSXeJeB4purMDuADvGA==", "devOptional": true, "dependencies": { "bn.js": "^5.1.3", "ethers": "^4.0.32", - "web3": "1.8.1" + "web3": "1.10.0" } }, "node_modules/@truffle/interface-adapter/node_modules/ethers": { @@ -5091,30 +6506,83 @@ "optional": true }, "node_modules/@truffle/provider": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/@truffle/provider/-/provider-0.3.1.tgz", - "integrity": "sha512-qYSRjAprIylgmHl+Lq2Fzn8gevJ5vmCk3Gc3Zlpi7jkjL3SS14eOH0A5BqJWFkzJB43tPBHAXY1KWLYio3/3gg==", + "version": "0.3.9", + "resolved": "https://registry.npmjs.org/@truffle/provider/-/provider-0.3.9.tgz", + "integrity": "sha512-6vVSpbP8b2SuNz1fE1KeeQHMBaQ7oD5Nf4CLikXNWrj3SVyMpN3PxsEnaHMnlslAfHICpLSOHpcIWETGxfOgbg==", "optional": true, "dependencies": { - "@truffle/error": "^0.1.1", - "@truffle/interface-adapter": "^0.5.26", + "@truffle/error": "^0.2.0", + "@truffle/interface-adapter": "^0.5.33", "debug": "^4.3.1", - "web3": "1.8.1" + "web3": "1.10.0" } }, + "node_modules/@truffle/provider/node_modules/@truffle/error": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/@truffle/error/-/error-0.2.0.tgz", + "integrity": "sha512-Fe0/z4WWb7IP2gBnv3l6zqP87Y0kSMs7oiSLakKJq17q3GUunrHSdioKuNspdggxkXIBhEQLhi8C+LJdwmHKWQ==", + "optional": true + }, "node_modules/@truffle/source-map-utils": { - "version": "1.3.103", - "resolved": "https://registry.npmjs.org/@truffle/source-map-utils/-/source-map-utils-1.3.103.tgz", - "integrity": "sha512-zLh8brf4s1MlwrsPABDP2LFY9rv5MtUE8iG5Np7guOtg50mucq2gN6XMAReQXJC4yY0an16YcnHMODpS48XD3Q==", + "version": "1.3.111", + "resolved": "https://registry.npmjs.org/@truffle/source-map-utils/-/source-map-utils-1.3.111.tgz", + "integrity": "sha512-/2kP4muycNMvMwar/QuzRdF8NE8LpQS1cRHF43XLx3b89D/upzqTylQwv3EDx/rcd7u6AQ/7lrUSmKlh0+k40Q==", "dependencies": { - "@truffle/code-utils": "^3.0.1", - "@truffle/codec": "^0.14.11", + "@truffle/code-utils": "^3.0.2", + "@truffle/codec": "^0.15.0", "debug": "^4.3.1", "json-pointer": "^0.6.1", "node-interval-tree": "^1.3.3", - "web3-utils": "1.8.1" + "web3-utils": "1.10.0" + } + }, + "node_modules/@truffle/source-map-utils/node_modules/@truffle/codec": { + "version": "0.15.0", + "resolved": "https://registry.npmjs.org/@truffle/codec/-/codec-0.15.0.tgz", + "integrity": "sha512-FEcwtDUuMr85a9u39eqvNgmUgXDvIkwhJjMCCi/bC4/GmLisOpih8vAidDgdYMJldukMPaOX5XIIgsG5k615YA==", + "dependencies": { + "@truffle/abi-utils": "^0.3.10", + "@truffle/compile-common": "^0.9.4", + "big.js": "^6.0.3", + "bn.js": "^5.1.3", + "cbor": "^5.2.0", + "debug": "^4.3.1", + "lodash": "^4.17.21", + "semver": "7.3.7", + "utf8": "^3.0.0", + "web3-utils": "1.10.0" } }, + "node_modules/@truffle/source-map-utils/node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@truffle/source-map-utils/node_modules/semver": { + "version": "7.3.7", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz", + "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==", + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@truffle/source-map-utils/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" + }, "node_modules/@truffle/spinners": { "version": "0.2.3", "resolved": "https://registry.npmjs.org/@truffle/spinners/-/spinners-0.2.3.tgz", @@ -5124,6 +6592,32 @@ "@trufflesuite/spinnies": "^0.1.1" } }, + "node_modules/@trufflesuite/bigint-buffer": { + "version": "1.1.9", + "resolved": "https://registry.npmjs.org/@trufflesuite/bigint-buffer/-/bigint-buffer-1.1.9.tgz", + "integrity": "sha512-bdM5cEGCOhDSwminryHJbRmXc1x7dPKg6Pqns3qyTwFlxsqUgxE29lsERS3PlIW1HTjoIGMUqsk1zQQwST1Yxw==", + "dev": true, + "hasInstallScript": true, + "optional": true, + "dependencies": { + "node-gyp-build": "4.3.0" + }, + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/@trufflesuite/bigint-buffer/node_modules/node-gyp-build": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.3.0.tgz", + "integrity": "sha512-iWjXZvmboq0ja1pUGULQBexmxq8CV4xBhX7VDOTbL7ZR4FOowwY/VOtRxBN/yKxmdGoIp4j5ysNT4u3S2pDQ3Q==", + "dev": true, + "optional": true, + "bin": { + "node-gyp-build": "bin.js", + "node-gyp-build-optional": "optional.js", + "node-gyp-build-test": "build-test.js" + } + }, "node_modules/@trufflesuite/chromafi": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/@trufflesuite/chromafi/-/chromafi-3.0.0.tgz", @@ -5243,41 +6737,22 @@ "node": ">=8" } }, - "node_modules/@tsconfig/node10": { - "version": "1.0.9", - "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.9.tgz", - "integrity": "sha512-jNsYVVxU8v5g43Erja32laIDHXeoNvFEpX33OK4d6hljo3jDhCBDhx5dhCCTMWUojscpAagGiRkBKxpdl9fxqA==", - "devOptional": true - }, - "node_modules/@tsconfig/node12": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/@tsconfig/node12/-/node12-1.0.11.tgz", - "integrity": "sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==", - "devOptional": true - }, - "node_modules/@tsconfig/node14": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/@tsconfig/node14/-/node14-1.0.3.tgz", - "integrity": "sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==", - "devOptional": true - }, - "node_modules/@tsconfig/node16": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.3.tgz", - "integrity": "sha512-yOlFc+7UtL/89t2ZhjPvvB/DeAr3r+Dq58IgzsFkOAvVC6NMJXmCGjbptdXdR9qsX7pKcTL+s87FtYREi2dEEQ==", - "devOptional": true - }, "node_modules/@typechain/ethers-v5": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@typechain/ethers-v5/-/ethers-v5-2.0.0.tgz", - "integrity": "sha512-0xdCkyGOzdqh4h5JSf+zoWx85IusEjDcPIwNEHP8mrWSnCae4rvrqB+/gtpdNfX7zjlFlZiMeePn2r63EI3Lrw==", + "version": "10.2.0", + "resolved": "https://registry.npmjs.org/@typechain/ethers-v5/-/ethers-v5-10.2.0.tgz", + "integrity": "sha512-ikaq0N/w9fABM+G01OFmU3U3dNnyRwEahkdvi9mqy1a3XwKiPZaF/lu54OcNaEWnpvEYyhhS0N7buCtLQqC92w==", "dev": true, "dependencies": { - "ethers": "^5.0.2" + "lodash": "^4.17.15", + "ts-essentials": "^7.0.1" }, "peerDependencies": { - "ethers": "^5.0.0", - "typechain": "^3.0.0" + "@ethersproject/abi": "^5.0.0", + "@ethersproject/bytes": "^5.0.0", + "@ethersproject/providers": "^5.0.0", + "ethers": "^5.1.3", + "typechain": "^8.1.1", + "typescript": ">=4.3.0" } }, "node_modules/@types/abstract-leveldown": { @@ -5294,11 +6769,6 @@ "@types/node": "*" } }, - "node_modules/@types/async-eventemitter": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/@types/async-eventemitter/-/async-eventemitter-0.2.1.tgz", - "integrity": "sha512-M2P4Ng26QbAeITiH7w1d7OxtldgfAe0wobpyJzVK/XOb0cUGKU2R4pfAhqcJBXAe2ife5ZOhSv4wk7p+ffURtg==" - }, "node_modules/@types/bignumber.js": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/@types/bignumber.js/-/bignumber.js-5.0.0.tgz", @@ -5327,14 +6797,14 @@ } }, "node_modules/@types/cacheable-request": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/@types/cacheable-request/-/cacheable-request-6.0.2.tgz", - "integrity": "sha512-B3xVo+dlKM6nnKTcmm5ZtY/OL8bOAOd2Olee9M1zft65ox50OzjEHW91sDiU9j6cvW8Ejg1/Qkf4xd2kugApUA==", + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/@types/cacheable-request/-/cacheable-request-6.0.3.tgz", + "integrity": "sha512-IQ3EbTzGxIigb1I3qPZc1rWJnH0BmSKv5QYTalEwweFvyBDLSAe24zP0le/hyi7ecGfZVlIVAg4BZqb8WBwKqw==", "dependencies": { "@types/http-cache-semantics": "*", - "@types/keyv": "*", + "@types/keyv": "^3.1.4", "@types/node": "*", - "@types/responselike": "*" + "@types/responselike": "^1.0.0" } }, "node_modules/@types/chai": { @@ -5390,12 +6860,12 @@ } }, "node_modules/@types/express": { - "version": "4.17.15", - "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.15.tgz", - "integrity": "sha512-Yv0k4bXGOH+8a+7bELd2PqHQsuiANB+A8a4gnQrkRWzrkKlb6KHaVvyXhqs04sVW/OWlbPyYxRgYlIXLfrufMQ==", + "version": "4.17.17", + "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.17.tgz", + "integrity": "sha512-Q4FmmuLGBG58btUnfS1c1r/NQdlp3DMfGDGig8WhfpA2YRUtEkxAjkZb0yvplJGYdF1fsQ81iMDcH24sSCNC/Q==", "dependencies": { "@types/body-parser": "*", - "@types/express-serve-static-core": "^4.17.31", + "@types/express-serve-static-core": "^4.17.33", "@types/qs": "*", "@types/serve-static": "*" } @@ -5404,12 +6874,24 @@ "version": "4.17.31", "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.17.31.tgz", "integrity": "sha512-DxMhY+NAsTwMMFHBTtJFNp5qiHKJ7TeqOo23zVEM9alT1Ml27Q3xcTH0xwxn7Q0BbMcVEJOs/7aQtUWupUQN3Q==", + "optional": true, "dependencies": { "@types/node": "*", "@types/qs": "*", "@types/range-parser": "*" } }, + "node_modules/@types/express/node_modules/@types/express-serve-static-core": { + "version": "4.17.35", + "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.17.35.tgz", + "integrity": "sha512-wALWQwrgiB2AWTT91CB62b6Yt0sNHpznUXeZEcnPU3DRdlDIz74x8Qg1UUYKSVFi+va5vKOLYRBI1bRKiLLKIg==", + "dependencies": { + "@types/node": "*", + "@types/qs": "*", + "@types/range-parser": "*", + "@types/send": "*" + } + }, "node_modules/@types/form-data": { "version": "0.0.33", "resolved": "https://registry.npmjs.org/@types/form-data/-/form-data-0.0.33.tgz", @@ -5433,12 +6915,11 @@ "integrity": "sha512-SZs7ekbP8CN0txVG2xVRH6EgKmEm31BOxA07vkFaETzZz1xh+cbt8BcI0slpymvwhx5dlFnQG2rTlPVQn+iRPQ==" }, "node_modules/@types/keyv": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/@types/keyv/-/keyv-4.2.0.tgz", - "integrity": "sha512-xoBtGl5R9jeKUhc8ZqeYaRDx04qqJ10yhhXYGmJ4Jr8qKpvMsDQQrNUvF/wUJ4klOtmJeJM+p2Xo3zp9uaC3tw==", - "deprecated": "This is a stub types definition. keyv provides its own type definitions, so you do not need this installed.", + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/@types/keyv/-/keyv-3.1.4.tgz", + "integrity": "sha512-BQ5aZNSCpj7D6K2ksrRCTmKRLEpnPvWDiLPfoGyhZ++8YtiK9d/3DBKPJgry359X/P1PfruyYwvnvwFjuEiEIg==", "dependencies": { - "keyv": "*" + "@types/node": "*" } }, "node_modules/@types/level-errors": { @@ -5492,9 +6973,9 @@ "integrity": "sha512-DHQpWGjyQKSHj3ebjFI/wRKcqQcdR+MoFBygntYOZytCqNfkd2ZC4ARDJ2DQqhjH5p85Nnd3jhUJIXrszFX/JA==" }, "node_modules/@types/node-fetch": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/@types/node-fetch/-/node-fetch-2.6.2.tgz", - "integrity": "sha512-DHqhlq5jeESLy19TYhLakJ07kNumXWjcDdxXsLUMJZ6ue8VZJj4kLPQVE/2mdHh3xZziNF1xppu5lwmS53HR+A==", + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/@types/node-fetch/-/node-fetch-2.6.3.tgz", + "integrity": "sha512-ETTL1mOEdq/sxUtgtOhKjyB2Irra4cjxksvcMUR5Zr4n+PxVhsCD9WS46oPbHL3et9Zde7CNRr+WUNlcHvsX+w==", "dev": true, "dependencies": { "@types/node": "*", @@ -5510,9 +6991,9 @@ } }, "node_modules/@types/prettier": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/@types/prettier/-/prettier-2.7.1.tgz", - "integrity": "sha512-ri0UmynRRvZiiUJdiz38MmIblKK+oH30MztdBVR95dv/Ubw6neWSb8u1XpRb72L4qsZOhz+L+z9JD40SJmfWow==", + "version": "2.7.2", + "resolved": "https://registry.npmjs.org/@types/prettier/-/prettier-2.7.2.tgz", + "integrity": "sha512-KufADq8uQqo1pYKVIYzfKbJfBAc0sOeXqGbFaSpv8MRmC/zXgowNZmFcbngndGk922QDmOASEXUZCaY48gs4cg==", "dev": true }, "node_modules/@types/qs": { @@ -5525,15 +7006,20 @@ "resolved": "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.4.tgz", "integrity": "sha512-EEhsLsD6UsDM1yFhAvy0Cjr6VwmpMWqFBCb9w07wVugF7w9nfajxLuVmngTIpgS6svCnm6Vaw+MZhoDCKnOfsw==" }, - "node_modules/@types/resolve": { - "version": "0.0.8", - "resolved": "https://registry.npmjs.org/@types/resolve/-/resolve-0.0.8.tgz", - "integrity": "sha512-auApPaJf3NPfe18hSoJkp8EbZzer2ISk7o8mCC3M9he/a04+gbMF97NkpD2S8riMGvm4BMRI59/SZQSaLTKpsQ==", - "dev": true, + "node_modules/@types/readable-stream": { + "version": "2.3.15", + "resolved": "https://registry.npmjs.org/@types/readable-stream/-/readable-stream-2.3.15.tgz", + "integrity": "sha512-oM5JSKQCcICF1wvGgmecmHldZ48OZamtMxcGGVICOJA8o8cahXC1zEVAif8iwoc5j8etxFaRFnf095+CDsuoFQ==", "dependencies": { - "@types/node": "*" + "@types/node": "*", + "safe-buffer": "~5.1.1" } }, + "node_modules/@types/readable-stream/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + }, "node_modules/@types/responselike": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/@types/responselike/-/responselike-1.0.0.tgz", @@ -5550,6 +7036,20 @@ "@types/node": "*" } }, + "node_modules/@types/send": { + "version": "0.17.1", + "resolved": "https://registry.npmjs.org/@types/send/-/send-0.17.1.tgz", + "integrity": "sha512-Cwo8LE/0rnvX7kIIa3QHCkcuF21c05Ayb0ZfxPiv0W8VRiZiNW/WuRupHKpqqGVGf7SUA44QSOUKaEd9lIrd/Q==", + "dependencies": { + "@types/mime": "^1", + "@types/node": "*" + } + }, + "node_modules/@types/send/node_modules/@types/mime": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/@types/mime/-/mime-1.3.2.tgz", + "integrity": "sha512-YATxVxgRqNH6nHEIsvg6k2Boc1JHI9ZbH5iWFFv/MTkchz3b1ieGDa5T0a9RznNdI0KhVbdbWSN+KWWrQZRxTw==" + }, "node_modules/@types/serve-static": { "version": "1.15.0", "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.15.0.tgz", @@ -5559,31 +7059,6 @@ "@types/node": "*" } }, - "node_modules/@types/sinon": { - "version": "10.0.13", - "resolved": "https://registry.npmjs.org/@types/sinon/-/sinon-10.0.13.tgz", - "integrity": "sha512-UVjDqJblVNQYvVNUsj0PuYYw0ELRmgt1Nt5Vk0pT5f16ROGfcKJY8o1HVuMOJOpD727RrGB9EGvoaTQE5tgxZQ==", - "dev": true, - "dependencies": { - "@types/sinonjs__fake-timers": "*" - } - }, - "node_modules/@types/sinon-chai": { - "version": "3.2.8", - "resolved": "https://registry.npmjs.org/@types/sinon-chai/-/sinon-chai-3.2.8.tgz", - "integrity": "sha512-d4ImIQbT/rKMG8+AXpmcan5T2/PNeSjrYhvkwet6z0p8kzYtfgA32xzOBlbU0yqJfq+/0Ml805iFoODO0LP5/g==", - "dev": true, - "dependencies": { - "@types/chai": "*", - "@types/sinon": "*" - } - }, - "node_modules/@types/sinonjs__fake-timers": { - "version": "8.1.2", - "resolved": "https://registry.npmjs.org/@types/sinonjs__fake-timers/-/sinonjs__fake-timers-8.1.2.tgz", - "integrity": "sha512-9GcLXF0/v3t80caGs5p2rRfkB+a8VBGLJZVih6CNFkx8IZ994wiKKLSRs9nuFwk1HevWs/1mnUmkApGrSGsShA==", - "dev": true - }, "node_modules/@types/underscore": { "version": "1.11.4", "resolved": "https://registry.npmjs.org/@types/underscore/-/underscore-1.11.4.tgz", @@ -5832,12 +7307,6 @@ "node": ">=10" } }, - "node_modules/@yarnpkg/lockfile": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@yarnpkg/lockfile/-/lockfile-1.1.0.tgz", - "integrity": "sha512-GpSwvyXOcOOlV70vbnzjj4fW5xW/FdUF6nQEt1ENy7m4ZCczi1+/buVUPAqmGfqznsORNFzUMjctTIp8a9tuCQ==", - "dev": true - }, "node_modules/abbrev": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", @@ -5937,27 +7406,6 @@ "node": ">= 0.6" } }, - "node_modules/acorn": { - "version": "8.8.2", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.2.tgz", - "integrity": "sha512-xjIYgE8HBrkpd/sJqOGNspf8uHG+NOHGOw6a/Urj8taM2EXfdNAH2oFcPeIFfsv3+kz/mJrS5VuMqbNLjCa2vw==", - "devOptional": true, - "bin": { - "acorn": "bin/acorn" - }, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/acorn-walk": { - "version": "8.2.0", - "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.2.0.tgz", - "integrity": "sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==", - "devOptional": true, - "engines": { - "node": ">=0.4.0" - } - }, "node_modules/adm-zip": { "version": "0.4.16", "resolved": "https://registry.npmjs.org/adm-zip/-/adm-zip-0.4.16.tgz", @@ -6048,9 +7496,9 @@ } }, "node_modules/ajv-formats/node_modules/ajv": { - "version": "8.11.2", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.11.2.tgz", - "integrity": "sha512-E4bfmKAhGiSTvMfL1Myyycaub+cUEU2/IvpylXkUu7CHBkBj1f/ikdzbD7YQ6FKUbixDxeYvB/xY4fvyroDlQg==", + "version": "8.12.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz", + "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==", "optional": true, "dependencies": { "fast-deep-equal": "^3.1.1", @@ -6069,6 +7517,30 @@ "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", "optional": true }, + "node_modules/amazon-cognito-identity-js": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/amazon-cognito-identity-js/-/amazon-cognito-identity-js-6.2.0.tgz", + "integrity": "sha512-9Fxrp9+MtLdsJvqOwSaE3ll+pneICeuE3pwj2yDkiyGNWuHx97b8bVLR2bOgfDmDJnY0Hq8QoeXtwdM4aaXJjg==", + "dev": true, + "dependencies": { + "@aws-crypto/sha256-js": "1.2.2", + "buffer": "4.9.2", + "fast-base64-decode": "^1.0.0", + "isomorphic-unfetch": "^3.0.0", + "js-cookie": "^2.2.1" + } + }, + "node_modules/amazon-cognito-identity-js/node_modules/buffer": { + "version": "4.9.2", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-4.9.2.tgz", + "integrity": "sha512-xq+q3SRMOxGivLhBNaUdC64hDTQwejJ+H0T/NB1XMtTVEwNTrfFF3gAxiyW0Bu/xWEGhjVKgUcMhCrUy2+uCWg==", + "dev": true, + "dependencies": { + "base64-js": "^1.0.2", + "ieee754": "^1.1.4", + "isarray": "^1.0.0" + } + }, "node_modules/ansi-colors": { "version": "3.2.4", "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-3.2.4.tgz", @@ -6151,9 +7623,9 @@ } }, "node_modules/apollo-reporting-protobuf": { - "version": "3.3.3", - "resolved": "https://registry.npmjs.org/apollo-reporting-protobuf/-/apollo-reporting-protobuf-3.3.3.tgz", - "integrity": "sha512-L3+DdClhLMaRZWVmMbBcwl4Ic77CnEBPXLW53F7hkYhkaZD88ivbCVB1w/x5gunO6ZHrdzhjq0FHmTsBvPo7aQ==", + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/apollo-reporting-protobuf/-/apollo-reporting-protobuf-3.4.0.tgz", + "integrity": "sha512-h0u3EbC/9RpihWOmcSsvTW2O6RXVaD/mPEjfrPkxRPTEPWqncsgOoRJw+wih4OqfH3PvTJvoEIf4LwKrUaqWog==", "deprecated": "The `apollo-reporting-protobuf` package is part of Apollo Server v2 and v3, which are now deprecated (end-of-life October 22nd 2023). This package's functionality is now found in the `@apollo/usage-reporting-protobuf` package. See https://www.apollographql.com/docs/apollo-server/previous-versions/ for more details.", "optional": true, "dependencies": { @@ -6193,15 +7665,15 @@ "optional": true }, "node_modules/apollo-server": { - "version": "3.11.1", - "resolved": "https://registry.npmjs.org/apollo-server/-/apollo-server-3.11.1.tgz", - "integrity": "sha512-3RZ/veWGbi0zXy2YVaPkYIAavpbHyEVui91DNYvz6UFS0fZmhJwG7f1VmGheeRiqiV8nFa8GuBejI1niTeAYzA==", + "version": "3.12.0", + "resolved": "https://registry.npmjs.org/apollo-server/-/apollo-server-3.12.0.tgz", + "integrity": "sha512-wZHLgBoIdGxr/YpPTG5RwNnS+B2y70T/nCegCnU6Yl+H3PXB92OIguLMhdJIZVjukIOhiQT12dNIehqLQ+1hMQ==", "deprecated": "The `apollo-server` package is part of Apollo Server v2 and v3, which are now deprecated (end-of-life October 22nd 2023). This package's functionality is now found in the `@apollo/server` package. See https://www.apollographql.com/docs/apollo-server/previous-versions/ for more details.", "optional": true, "dependencies": { "@types/express": "4.17.14", - "apollo-server-core": "^3.11.1", - "apollo-server-express": "^3.11.1", + "apollo-server-core": "^3.12.0", + "apollo-server-express": "^3.12.0", "express": "^4.17.1" }, "peerDependencies": { @@ -6209,9 +7681,9 @@ } }, "node_modules/apollo-server-core": { - "version": "3.11.1", - "resolved": "https://registry.npmjs.org/apollo-server-core/-/apollo-server-core-3.11.1.tgz", - "integrity": "sha512-t/eCKrRFK1lYZlc5pHD99iG7Np7CEm3SmbDiONA7fckR3EaB/pdsEdIkIwQ5QBBpT5JLp/nwvrZRVwhaWmaRvw==", + "version": "3.12.0", + "resolved": "https://registry.npmjs.org/apollo-server-core/-/apollo-server-core-3.12.0.tgz", + "integrity": "sha512-hq7iH6Cgldgmnjs9FVSZeKWRpi0/ZR+iJ1arzeD2VXGxxgk1mAm/cz1Tx0TYgegZI+FvvrRl0UhKEx7sLnIxIg==", "deprecated": "The `apollo-server-core` package is part of Apollo Server v2 and v3, which are now deprecated (end-of-life October 22nd 2023). This package's functionality is now found in the `@apollo/server` package. See https://www.apollographql.com/docs/apollo-server/previous-versions/ for more details.", "optional": true, "dependencies": { @@ -6224,11 +7696,11 @@ "@graphql-tools/schema": "^8.0.0", "@josephg/resolvable": "^1.0.0", "apollo-datasource": "^3.3.2", - "apollo-reporting-protobuf": "^3.3.3", + "apollo-reporting-protobuf": "^3.4.0", "apollo-server-env": "^4.2.1", "apollo-server-errors": "^3.3.1", - "apollo-server-plugin-base": "^3.7.1", - "apollo-server-types": "^3.7.1", + "apollo-server-plugin-base": "^3.7.2", + "apollo-server-types": "^3.8.0", "async-retry": "^1.2.1", "fast-json-stable-stringify": "^2.1.0", "graphql-tag": "^2.11.0", @@ -6300,9 +7772,9 @@ } }, "node_modules/apollo-server-express": { - "version": "3.11.1", - "resolved": "https://registry.npmjs.org/apollo-server-express/-/apollo-server-express-3.11.1.tgz", - "integrity": "sha512-x9ngcpXbBlt4naCXTwNtBFb/mOd9OU0wtFXvJkObHF26NsRazu3DxDfEuekA6V1NFOocD+A9jmVMQeQWug5MgA==", + "version": "3.12.0", + "resolved": "https://registry.npmjs.org/apollo-server-express/-/apollo-server-express-3.12.0.tgz", + "integrity": "sha512-m8FaGPUfDOEGSm7QRWRmUUGjG/vqvpQoorkId9/FXkC57fz/A59kEdrzkMt9538Xgsa5AV+X4MEWLJhTvlW3LQ==", "deprecated": "The `apollo-server-express` package is part of Apollo Server v2 and v3, which are now deprecated (end-of-life October 22nd 2023). This package's functionality is now found in the `@apollo/server` package. See https://www.apollographql.com/docs/apollo-server/previous-versions/ for more details.", "optional": true, "dependencies": { @@ -6312,8 +7784,8 @@ "@types/express": "4.17.14", "@types/express-serve-static-core": "4.17.31", "accepts": "^1.3.5", - "apollo-server-core": "^3.11.1", - "apollo-server-types": "^3.7.1", + "apollo-server-core": "^3.12.0", + "apollo-server-types": "^3.8.0", "body-parser": "^1.19.0", "cors": "^2.8.5", "parseurl": "^1.3.3" @@ -6339,13 +7811,13 @@ } }, "node_modules/apollo-server-plugin-base": { - "version": "3.7.1", - "resolved": "https://registry.npmjs.org/apollo-server-plugin-base/-/apollo-server-plugin-base-3.7.1.tgz", - "integrity": "sha512-g3vJStmQtQvjGI289UkLMfThmOEOddpVgHLHT2bNj0sCD/bbisj4xKbBHETqaURokteqSWyyd4RDTUe0wAUDNQ==", + "version": "3.7.2", + "resolved": "https://registry.npmjs.org/apollo-server-plugin-base/-/apollo-server-plugin-base-3.7.2.tgz", + "integrity": "sha512-wE8dwGDvBOGehSsPTRZ8P/33Jan6/PmL0y0aN/1Z5a5GcbFhDaaJCjK5cav6npbbGL2DPKK0r6MPXi3k3N45aw==", "deprecated": "The `apollo-server-plugin-base` package is part of Apollo Server v2 and v3, which are now deprecated (end-of-life October 22nd 2023). This package's functionality is now found in the `@apollo/server` package. See https://www.apollographql.com/docs/apollo-server/previous-versions/ for more details.", "optional": true, "dependencies": { - "apollo-server-types": "^3.7.1" + "apollo-server-types": "^3.8.0" }, "engines": { "node": ">=12.0" @@ -6355,15 +7827,15 @@ } }, "node_modules/apollo-server-types": { - "version": "3.7.1", - "resolved": "https://registry.npmjs.org/apollo-server-types/-/apollo-server-types-3.7.1.tgz", - "integrity": "sha512-aE9RDVplmkaOj/OduNmGa+0a1B5RIWI0o3zC1zLvBTVWMKTpo0ifVf11TyMkLCY+T7cnZqVqwyShziOyC3FyUw==", + "version": "3.8.0", + "resolved": "https://registry.npmjs.org/apollo-server-types/-/apollo-server-types-3.8.0.tgz", + "integrity": "sha512-ZI/8rTE4ww8BHktsVpb91Sdq7Cb71rdSkXELSwdSR0eXu600/sY+1UXhTWdiJvk+Eq5ljqoHLwLbY2+Clq2b9A==", "deprecated": "The `apollo-server-types` package is part of Apollo Server v2 and v3, which are now deprecated (end-of-life October 22nd 2023). This package's functionality is now found in the `@apollo/server` package. See https://www.apollographql.com/docs/apollo-server/previous-versions/ for more details.", "optional": true, "dependencies": { "@apollo/utils.keyvaluecache": "^1.0.1", "@apollo/utils.logger": "^1.0.0", - "apollo-reporting-protobuf": "^3.3.3", + "apollo-reporting-protobuf": "^3.4.0", "apollo-server-env": "^4.2.1" }, "engines": { @@ -6440,7 +7912,8 @@ "version": "4.1.3", "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz", "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==", - "devOptional": true + "optional": true, + "peer": true }, "node_modules/argparse": { "version": "2.0.1", @@ -6454,15 +7927,12 @@ "optional": true }, "node_modules/array-back": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/array-back/-/array-back-2.0.0.tgz", - "integrity": "sha512-eJv4pLLufP3g5kcZry0j6WXpIbzYw9GUB4mVJZno9wfwiBxbizTnHCw3VJb07cBihbFX48Y7oSrW9y+gt4glyw==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/array-back/-/array-back-3.1.0.tgz", + "integrity": "sha512-TkuxA4UCOvxuDK6NZYXCalszEzj+TLszyASooky+i742l9TqsOdYCMJJupxRic61hwquNtppB3hgcuq9SVSH1Q==", "dev": true, - "dependencies": { - "typical": "^2.6.1" - }, "engines": { - "node": ">=4" + "node": ">=6" } }, "node_modules/array-flatten": { @@ -6550,11 +8020,6 @@ "node": ">=8" } }, - "node_modules/async": { - "version": "3.2.4", - "resolved": "https://registry.npmjs.org/async/-/async-3.2.4.tgz", - "integrity": "sha512-iAB+JbDEGXhyIUavoDl9WP/Jj106Kz9DEn1DPgYw5ruDn0e3Wgi3sKFm55sASdGBNOQB8F59d9qQ7deqrHA8wQ==" - }, "node_modules/async-eventemitter": { "version": "0.2.4", "resolved": "https://registry.npmjs.org/async-eventemitter/-/async-eventemitter-0.2.4.tgz", @@ -6588,7 +8053,7 @@ "version": "1.3.3", "resolved": "https://registry.npmjs.org/async-retry/-/async-retry-1.3.3.tgz", "integrity": "sha512-wfr/jstw9xNi/0teMHrRW7dsz3Lt5ARhYNZ2ewpadnhaIp5mbALhOAP+EAdsC7t4Z6wqsDVv9+W6gm1Dk9mEyw==", - "optional": true, + "devOptional": true, "dependencies": { "retry": "0.13.1" } @@ -6597,7 +8062,7 @@ "version": "0.13.1", "resolved": "https://registry.npmjs.org/retry/-/retry-0.13.1.tgz", "integrity": "sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg==", - "optional": true, + "devOptional": true, "engines": { "node": ">= 4" } @@ -6772,7 +8237,6 @@ "version": "1.6.36", "resolved": "https://registry.npmjs.org/big-integer/-/big-integer-1.6.36.tgz", "integrity": "sha512-t70bfa7HYEA1D9idDbmuv7YbsbVkQ+Hp+8KFSul4aE5e/i1bjCNIRYJZlA8Q8p0r9T8cF/RVvwUgRA//FydEyg==", - "dev": true, "engines": { "node": ">=0.6" } @@ -6802,22 +8266,11 @@ } }, "node_modules/bigint-crypto-utils": { - "version": "3.1.7", - "resolved": "https://registry.npmjs.org/bigint-crypto-utils/-/bigint-crypto-utils-3.1.7.tgz", - "integrity": "sha512-zpCQpIE2Oy5WIQpjC9iYZf8Uh9QqoS51ZCooAcNvzv1AQ3VWdT52D0ksr1+/faeK8HVIej1bxXcP75YcqH3KPA==", - "dependencies": { - "bigint-mod-arith": "^3.1.0" - }, - "engines": { - "node": ">=10.4.0" - } - }, - "node_modules/bigint-mod-arith": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/bigint-mod-arith/-/bigint-mod-arith-3.1.2.tgz", - "integrity": "sha512-nx8J8bBeiRR+NlsROFH9jHswW5HO8mgfOSqW0AmjicMMvaONDa8AO+5ViKDUUNytBPWiwfvZP4/Bj4Y3lUfvgQ==", + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/bigint-crypto-utils/-/bigint-crypto-utils-3.2.2.tgz", + "integrity": "sha512-U1RbE3aX9ayCUVcIPHuPDPKcK3SFOXf93J1UK/iHlJuQB7bhagPIX06/CLpLEsDThJ7KA4Dhrnzynl+d2weTiw==", "engines": { - "node": ">=10.4.0" + "node": ">=14.0.0" } }, "node_modules/bignumber.js": { @@ -6844,11 +8297,28 @@ "file-uri-to-path": "1.0.0" } }, + "node_modules/bip39": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/bip39/-/bip39-3.0.4.tgz", + "integrity": "sha512-YZKQlb752TrUWqHWj7XAwCSjYEgGAk+/Aas3V7NyjQeZYsztO8JnQUaCWhcnL4T+jL8nvB8typ2jRPzTlgugNw==", + "dev": true, + "dependencies": { + "@types/node": "11.11.6", + "create-hash": "^1.1.0", + "pbkdf2": "^3.0.9", + "randombytes": "^2.0.1" + } + }, + "node_modules/bip39/node_modules/@types/node": { + "version": "11.11.6", + "resolved": "https://registry.npmjs.org/@types/node/-/node-11.11.6.tgz", + "integrity": "sha512-Exw4yUWMBXM3X+8oqzJNRqZSwUAaS4+7NdvHqQuFi/d+synz++xmX3QIf+BFqneW8N31R8Ky+sikfZUXq07ggQ==", + "dev": true + }, "node_modules/bl": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", - "devOptional": true, "dependencies": { "buffer": "^5.5.0", "inherits": "^2.0.4", @@ -6859,7 +8329,6 @@ "version": "5.7.1", "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", - "devOptional": true, "funding": [ { "type": "github", @@ -6895,9 +8364,9 @@ "integrity": "sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ==" }, "node_modules/bnc-sdk": { - "version": "4.6.3", - "resolved": "https://registry.npmjs.org/bnc-sdk/-/bnc-sdk-4.6.3.tgz", - "integrity": "sha512-rva+LyJuAm+U6xwZYqlsDxKaMy3EpHBqkOL93UDih7iwXDYnUr87n27pnGCw3B8xRBeRhCBC/VZMuzRFeea/Hw==", + "version": "4.6.7", + "resolved": "https://registry.npmjs.org/bnc-sdk/-/bnc-sdk-4.6.7.tgz", + "integrity": "sha512-jIQ6cmeRBgvH/YDLuYRr2+kxDGcAAi0SOvjlO5nQ5cWdbslw+ASWftd1HmxiVLNCiwEH5bSc/t8a0agZ5njTUQ==", "dependencies": { "crypto-es": "^1.2.2", "nanoid": "^3.3.1", @@ -7201,7 +8670,6 @@ "version": "0.0.3", "resolved": "https://registry.npmjs.org/buildcheck/-/buildcheck-0.0.3.tgz", "integrity": "sha512-pziaA+p/wdVImfcbsZLNF32EiWyujlQLwolMqUQE8xpKNOH7KmZQaY8sXN7DGOEzPAElo9QTaeNRfGnf3iOJbA==", - "dev": true, "optional": true, "engines": { "node": ">=10.0.0" @@ -7335,6 +8803,14 @@ } ] }, + "node_modules/case": { + "version": "1.6.3", + "resolved": "https://registry.npmjs.org/case/-/case-1.6.3.tgz", + "integrity": "sha512-mzDSXIPaFwVDvZAHqZ9VlbyF4yyXRuX6IvB06WvPYkqJVO24kX1PPhv9bfpKNFZyxYFmmgo03HUiD8iklmJYRQ==", + "engines": { + "node": ">= 0.8.0" + } + }, "node_modules/caseless": { "version": "0.12.0", "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", @@ -7592,21 +9068,26 @@ "integrity": "sha512-rhjH9AG1fvabIDoGRVH587413LPjTZgmDF9fOFCbFJQV4yuocX1mHxxvXI4g3cGwbVY9wAYIoKlg1N79frJKQw==" }, "node_modules/classic-level": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/classic-level/-/classic-level-1.2.0.tgz", - "integrity": "sha512-qw5B31ANxSluWz9xBzklRWTUAJ1SXIdaVKTVS7HcTGKOAmExx65Wo5BUICW+YGORe2FOUaDghoI9ZDxj82QcFg==", + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/classic-level/-/classic-level-1.3.0.tgz", + "integrity": "sha512-iwFAJQYtqRTRM0F6L8h4JCt00ZSGdOyqh7yVrhhjrOpFhmBjNlRUey64MCiyo6UmQHMJ+No3c81nujPv+n9yrg==", "hasInstallScript": true, "dependencies": { "abstract-level": "^1.0.2", "catering": "^2.1.0", "module-error": "^1.0.1", - "napi-macros": "~2.0.0", + "napi-macros": "^2.2.2", "node-gyp-build": "^4.3.0" }, "engines": { "node": ">=12" } }, + "node_modules/classic-level/node_modules/napi-macros": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/napi-macros/-/napi-macros-2.2.2.tgz", + "integrity": "sha512-hmEVtAGYzVQpCKdbQea4skABsdXW4RUh5t5mJ2zzqowJS2OyXZTU1KhDVFhx+NlWZ4ap9mqR9TcDO3LTTttd+g==" + }, "node_modules/clean-stack": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", @@ -7729,7 +9210,6 @@ "version": "1.1.0", "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz", "integrity": "sha512-RpAVKQA5T63xEj6/giIbUEtZwJ4UFIc3ZtvEkiaUERylqe8xb5IvqcgOurZLahv93CLKfxcw5YI+DZcUBRyLXA==", - "devOptional": true, "engines": { "node": ">=0.10.0" } @@ -7775,17 +9255,122 @@ "integrity": "sha512-LTQ/SGc+s0Xc0Fu5WaKnR0YiygZkm9eKFvyS+fRsU7/ZWFF8ykFM6Pc9aCVf1+xasOOZpO3BAVgVrKvsqKHV7w==" }, "node_modules/command-line-args": { - "version": "4.0.7", - "resolved": "https://registry.npmjs.org/command-line-args/-/command-line-args-4.0.7.tgz", - "integrity": "sha512-aUdPvQRAyBvQd2n7jXcsMDz68ckBJELXNzBybCHOibUWEg0mWTnaYCSRU8h9R+aNRSvDihJtssSRCiDRpLaezA==", + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/command-line-args/-/command-line-args-5.2.1.tgz", + "integrity": "sha512-H4UfQhZyakIjC74I9d34fGYDwk3XpSr17QhEd0Q3I9Xq1CETHo4Hcuo87WyWHpAF1aSLjLRf5lD9ZGX2qStUvg==", "dev": true, "dependencies": { - "array-back": "^2.0.0", - "find-replace": "^1.0.3", - "typical": "^2.6.1" + "array-back": "^3.1.0", + "find-replace": "^3.0.0", + "lodash.camelcase": "^4.3.0", + "typical": "^4.0.0" }, - "bin": { - "command-line-args": "bin/cli.js" + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/command-line-usage": { + "version": "6.1.3", + "resolved": "https://registry.npmjs.org/command-line-usage/-/command-line-usage-6.1.3.tgz", + "integrity": "sha512-sH5ZSPr+7UStsloltmDh7Ce5fb8XPlHyoPzTpyyMuYCtervL65+ubVZ6Q61cFtFl62UyJlc8/JwERRbAFPUqgw==", + "dev": true, + "dependencies": { + "array-back": "^4.0.2", + "chalk": "^2.4.2", + "table-layout": "^1.0.2", + "typical": "^5.2.0" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/command-line-usage/node_modules/ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/command-line-usage/node_modules/array-back": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/array-back/-/array-back-4.0.2.tgz", + "integrity": "sha512-NbdMezxqf94cnNfWLL7V/im0Ub+Anbb0IoZhvzie8+4HJ4nMQuzHuy49FkGYCJK2yAloZ3meiB6AVMClbrI1vg==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/command-line-usage/node_modules/chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/command-line-usage/node_modules/color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/command-line-usage/node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", + "dev": true + }, + "node_modules/command-line-usage/node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "dev": true, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/command-line-usage/node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/command-line-usage/node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/command-line-usage/node_modules/typical": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/typical/-/typical-5.2.0.tgz", + "integrity": "sha512-dvdQgNDNJo+8B2uBQoqdb11eUCE1JQXhvjC/CZtgvZseVd5TYMXnq0+vuUemXbd/Se29cTaUuPX3YIc2xgbvIg==", + "dev": true, + "engines": { + "node": ">=8" } }, "node_modules/commander": { @@ -7794,9 +9379,9 @@ "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==" }, "node_modules/compare-versions": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/compare-versions/-/compare-versions-5.0.1.tgz", - "integrity": "sha512-v8Au3l0b+Nwkp4G142JcgJFh1/TUhdxut7wzD1Nq1dyp5oa3tXaqb03EXOAB6jS4gMlalkjAUPZBMiAfKUixHQ==", + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/compare-versions/-/compare-versions-5.0.3.tgz", + "integrity": "sha512-4UZlZP8Z99MGEY+Ovg/uJxJuvoXuN4M6B3hKaiackiHrgzQFEe3diJi1mf1PNHbFujM7FvLrK2bpgIaImbtZ1A==", "dev": true }, "node_modules/complex.js": { @@ -7882,9 +9467,9 @@ } }, "node_modules/conf/node_modules/ajv": { - "version": "8.11.2", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.11.2.tgz", - "integrity": "sha512-E4bfmKAhGiSTvMfL1Myyycaub+cUEU2/IvpylXkUu7CHBkBj1f/ikdzbD7YQ6FKUbixDxeYvB/xY4fvyroDlQg==", + "version": "8.12.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz", + "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==", "optional": true, "dependencies": { "fast-deep-equal": "^3.1.1", @@ -7967,9 +9552,9 @@ "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==" }, "node_modules/cookiejar": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/cookiejar/-/cookiejar-2.1.3.tgz", - "integrity": "sha512-JxbCBUdrfr6AQjOXrxoTvAMJO4HBTUIlBzslcJPAz+/KT8yk53fXun51u+RenNYvad/+Vc2DIz5o9UxlCDymFQ==" + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/cookiejar/-/cookiejar-2.1.4.tgz", + "integrity": "sha512-LDx6oHrK+PhzLKJU9j5S7/Y3jM/mUHvD/DeI1WQmJn652iPC5Y4TBzC9l+5OMOXlyTTA+SmVUPm0HQUwpD5Jqw==" }, "node_modules/core-js-compat": { "version": "3.25.5", @@ -7983,6 +9568,17 @@ "url": "https://opencollective.com/core-js" } }, + "node_modules/core-js-pure": { + "version": "3.30.1", + "resolved": "https://registry.npmjs.org/core-js-pure/-/core-js-pure-3.30.1.tgz", + "integrity": "sha512-nXBEVpmUnNRhz83cHd9JRQC52cTMcuXAmR56+9dSMpRdpeA4I1PX6yjmhd71Eyc/wXNsdBdUDIj1QTIeZpU5Tg==", + "dev": true, + "hasInstallScript": true, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/core-js" + } + }, "node_modules/core-util-is": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", @@ -8004,7 +9600,6 @@ "version": "0.0.4", "resolved": "https://registry.npmjs.org/cpu-features/-/cpu-features-0.0.4.tgz", "integrity": "sha512-fKiZ/zp1mUwQbnzb9IghXtHtDoTMtNeb8oYGx6kX2SYfhnG0HNdBEBIzB9b5KlXu5DQPhfy3mInbBxFcgwAr3A==", - "dev": true, "hasInstallScript": true, "optional": true, "dependencies": { @@ -8069,39 +9664,34 @@ "version": "1.1.1", "resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz", "integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==", - "devOptional": true + "optional": true, + "peer": true }, "node_modules/cross-fetch": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-3.1.5.tgz", - "integrity": "sha512-lvb1SBsI0Z7GDwmuid+mU3kWVBwTVUbe7S0H52yaaAdQOXq2YktTCZdlAcNKFzE6QtRz0snpw9bNiPeOIkkQvw==", + "version": "3.1.6", + "resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-3.1.6.tgz", + "integrity": "sha512-riRvo06crlE8HiqOwIpQhxwdOk4fOeR7FVM/wXoxchFEqMNUjvbs3bfo4OTgMEMHzppd4DxFBDbyySj8Cv781g==", "dependencies": { - "node-fetch": "2.6.7" + "node-fetch": "^2.6.11" } }, - "node_modules/cross-spawn": { - "version": "6.0.5", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", - "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", - "dev": true, + "node_modules/cross-fetch/node_modules/node-fetch": { + "version": "2.6.11", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.11.tgz", + "integrity": "sha512-4I6pdBY1EthSqDmJkiNk3JIT8cswwR9nfeW/cPdUagJYEQG7R95WRH74wpz7ma8Gh/9dI9FP+OU+0E4FvtA55w==", "dependencies": { - "nice-try": "^1.0.4", - "path-key": "^2.0.1", - "semver": "^5.5.0", - "shebang-command": "^1.2.0", - "which": "^1.2.9" + "whatwg-url": "^5.0.0" }, "engines": { - "node": ">=4.8" - } - }, - "node_modules/cross-spawn/node_modules/semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "dev": true, - "bin": { - "semver": "bin/semver" + "node": "4.x || >=6.0.0" + }, + "peerDependencies": { + "encoding": "^0.1.0" + }, + "peerDependenciesMeta": { + "encoding": { + "optional": true + } } }, "node_modules/crypt": { @@ -8116,7 +9706,6 @@ "version": "0.1.7", "resolved": "https://registry.npmjs.org/crypto-addr-codec/-/crypto-addr-codec-0.1.7.tgz", "integrity": "sha512-X4hzfBzNhy4mAc3UpiXEC/L0jo5E8wAa9unsnA8nNXYzXjCcGk83hfC5avJWCSGT8V91xMnAS9AKMHmjw5+XCg==", - "dev": true, "dependencies": { "base-x": "^3.0.8", "big-integer": "1.6.36", @@ -8207,6 +9796,17 @@ "node": ">=0.10" } }, + "node_modules/data-fns": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/data-fns/-/data-fns-1.1.0.tgz", + "integrity": "sha512-/rJzdbnuY3DVgzqsfEfc+tJLuAKYaHzkUxSMRIU3dxKFeWGD/MGhrgAfuwSOmgfJ8enygztp9DeuvoSxauppIg==", + "dependencies": { + "unit-fns": "^0.1.6" + }, + "engines": { + "node": ">=10" + } + }, "node_modules/dataloader": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/dataloader/-/dataloader-2.1.0.tgz", @@ -8482,11 +10082,24 @@ "version": "0.6.0", "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==", - "optional": true, + "devOptional": true, "engines": { "node": ">=4.0.0" } }, + "node_modules/defender-base-client": { + "version": "1.44.0", + "resolved": "https://registry.npmjs.org/defender-base-client/-/defender-base-client-1.44.0.tgz", + "integrity": "sha512-8ZgGA93+FlxNwG9LN1nu/Au5AyCKwAWJGNf0VLiPmh4GX/Nali/7kv72K+OtZgGxTLtKDKfgN4cnhEZwfrc8dg==", + "dev": true, + "dependencies": { + "amazon-cognito-identity-js": "^6.0.1", + "async-retry": "^1.3.3", + "axios": "^0.21.2", + "lodash": "^4.17.19", + "node-fetch": "^2.6.0" + } + }, "node_modules/defer-to-connect": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-2.0.1.tgz", @@ -8670,7 +10283,6 @@ "version": "3.0.8", "resolved": "https://registry.npmjs.org/docker-modem/-/docker-modem-3.0.8.tgz", "integrity": "sha512-f0ReSURdM3pcKPNS30mxOHSbaFLcknGmQjwSfmbcdOw1XWKXVhukM3NJHhr7NpY9BIyyWQb0EBo3KQvvuU5egQ==", - "dev": true, "dependencies": { "debug": "^4.1.1", "readable-stream": "^3.5.0", @@ -8685,7 +10297,6 @@ "version": "3.3.5", "resolved": "https://registry.npmjs.org/dockerode/-/dockerode-3.3.5.tgz", "integrity": "sha512-/0YNa3ZDNeLr/tSckmD69+Gq+qVNhvKfAHNeZJBnp7EOP6RGKV8ORrJHkUn20So5wU+xxT7+1n5u8PjHbfjbSA==", - "dev": true, "dependencies": { "@balena/dockerignore": "^1.0.2", "docker-modem": "^3.0.0", @@ -8699,7 +10310,6 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-2.0.1.tgz", "integrity": "sha512-6tzWDMeroL87uF/+lin46k+Q+46rAJ0SyPGz7OW7wTgblI273hsBqk2C1j0/xNadNLKDTUL9BukSjB7cwgmlPA==", - "dev": true, "dependencies": { "chownr": "^1.1.1", "mkdirp-classic": "^0.5.2", @@ -8973,7 +10583,6 @@ "version": "1.3.2", "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", - "dev": true, "dependencies": { "is-arrayish": "^0.2.1" } @@ -10098,22 +11707,65 @@ "integrity": "sha512-3KLX1mHuEsBW0dKG+c6EOJS1NBNqdCICvZW9sInmZTt5aY0oxmHVggYRE0lJu1tcnMD1K+AKHdLi6U43Awm1Vg==" }, "node_modules/ethereum-waffle": { - "version": "3.4.4", - "resolved": "https://registry.npmjs.org/ethereum-waffle/-/ethereum-waffle-3.4.4.tgz", - "integrity": "sha512-PA9+jCjw4WC3Oc5ocSMBj5sXvueWQeAbvCA+hUlb6oFgwwKyq5ka3bWQ7QZcjzIX+TdFkxP4IbFmoY2D8Dkj9Q==", + "version": "4.0.10", + "resolved": "https://registry.npmjs.org/ethereum-waffle/-/ethereum-waffle-4.0.10.tgz", + "integrity": "sha512-iw9z1otq7qNkGDNcMoeNeLIATF9yKl1M8AIeu42ElfNBplq0e+5PeasQmm8ybY/elkZ1XyRO0JBQxQdVRb8bqQ==", "dev": true, "dependencies": { - "@ethereum-waffle/chai": "^3.4.4", - "@ethereum-waffle/compiler": "^3.4.4", - "@ethereum-waffle/mock-contract": "^3.4.4", - "@ethereum-waffle/provider": "^3.4.4", - "ethers": "^5.0.1" + "@ethereum-waffle/chai": "4.0.10", + "@ethereum-waffle/compiler": "4.0.3", + "@ethereum-waffle/mock-contract": "4.0.4", + "@ethereum-waffle/provider": "4.0.5", + "solc": "0.8.15", + "typechain": "^8.0.0" }, "bin": { "waffle": "bin/waffle" }, "engines": { "node": ">=10.0" + }, + "peerDependencies": { + "ethers": "*" + } + }, + "node_modules/ethereum-waffle/node_modules/commander": { + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-8.3.0.tgz", + "integrity": "sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==", + "dev": true, + "engines": { + "node": ">= 12" + } + }, + "node_modules/ethereum-waffle/node_modules/semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true, + "bin": { + "semver": "bin/semver" + } + }, + "node_modules/ethereum-waffle/node_modules/solc": { + "version": "0.8.15", + "resolved": "https://registry.npmjs.org/solc/-/solc-0.8.15.tgz", + "integrity": "sha512-Riv0GNHNk/SddN/JyEuFKwbcWcEeho15iyupTSHw5Np6WuXA5D8kEHbyzDHi6sqmvLzu2l+8b1YmL8Ytple+8w==", + "dev": true, + "dependencies": { + "command-exists": "^1.2.8", + "commander": "^8.1.0", + "follow-redirects": "^1.12.1", + "js-sha3": "0.8.0", + "memorystream": "^0.3.1", + "semver": "^5.5.0", + "tmp": "0.0.33" + }, + "bin": { + "solcjs": "solc.js" + }, + "engines": { + "node": ">=10.0.0" } }, "node_modules/ethereumjs-abi": { @@ -11175,6 +12827,12 @@ "checkpoint-store": "^1.1.0" } }, + "node_modules/fast-base64-decode": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fast-base64-decode/-/fast-base64-decode-1.0.0.tgz", + "integrity": "sha512-qwaScUgUGBYeDNRnbc/KyllVU88Jk1pRHPStuF/lO7B0/RTRLj7U0lkdTAutlBblY08rwZDff6tNU9cjv6j//Q==", + "dev": true + }, "node_modules/fast-check": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/fast-check/-/fast-check-3.1.1.tgz", @@ -11285,30 +12943,17 @@ "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" }, "node_modules/find-replace": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/find-replace/-/find-replace-1.0.3.tgz", - "integrity": "sha512-KrUnjzDCD9426YnCP56zGYy/eieTnhtK6Vn++j+JJzmlsWWwEkDnsyVF575spT6HJ6Ow9tlbT3TQTDsa+O4UWA==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/find-replace/-/find-replace-3.0.0.tgz", + "integrity": "sha512-6Tb2myMioCAgv5kfvP5/PkZZ/ntTpVK39fHY7WkWBgvbeE+VHd/tZuZ4mrC+bxh4cfOZeYKVPaJIZtZXV7GNCQ==", "dev": true, "dependencies": { - "array-back": "^1.0.4", - "test-value": "^2.1.0" + "array-back": "^3.0.1" }, "engines": { "node": ">=4.0.0" } }, - "node_modules/find-replace/node_modules/array-back": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/array-back/-/array-back-1.0.4.tgz", - "integrity": "sha512-1WxbZvrmyhkNoeYcizokbmh5oiOCIfyvGtcqbK3Ls1v1fKcquzxnQSceOx6tzq7jmai2kFLWIpGND2cLhH6TPw==", - "dev": true, - "dependencies": { - "typical": "^2.6.0" - }, - "engines": { - "node": ">=0.12.0" - } - }, "node_modules/find-up": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", @@ -11321,15 +12966,6 @@ "node": ">=8" } }, - "node_modules/find-yarn-workspace-root": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/find-yarn-workspace-root/-/find-yarn-workspace-root-2.0.0.tgz", - "integrity": "sha512-1IMnbjt4KzsQfnhnzNd8wUEgXZ44IzZaZmnLYx7D5FZlaHt2gW20Cri8Q+E/t5tIj4+epTBub+2Zxu/vNILzqQ==", - "dev": true, - "dependencies": { - "micromatch": "^4.0.2" - } - }, "node_modules/flashbots": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/flashbots/-/flashbots-1.0.0.tgz", @@ -11455,9 +13091,9 @@ "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==" }, "node_modules/fs-extra": { - "version": "11.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.1.0.tgz", - "integrity": "sha512-0rcTq621PD5jM/e0a3EJoGC/1TC5ZBCERW82LQuwfGnCa1V8w7dpYH1yNu+SLb6E5dkeCBzKEyLGlFrnr+dUyw==", + "version": "11.1.1", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.1.1.tgz", + "integrity": "sha512-MGIE4HOvQCeUCzmlHs0vXpih4ysz4wg9qiSAu6cd42lVwPbTM1TjV7RusoyQqMmk/95gdQZX72u+YW+c3eEpFQ==", "dependencies": { "graceful-fs": "^4.2.0", "jsonfile": "^6.0.1", @@ -11534,25 +13170,25 @@ } }, "node_modules/ganache": { - "version": "7.6.0", - "resolved": "https://registry.npmjs.org/ganache/-/ganache-7.6.0.tgz", - "integrity": "sha512-TVpSHgIKPVCqvehGXOsXTYi5X0VvPeS+KHl0Ph8WQvtvoqxutZ8Ov4PclaAX9htIGmwns8DYJBg+yvola6wdrA==", + "version": "7.8.0", + "resolved": "https://registry.npmjs.org/ganache/-/ganache-7.8.0.tgz", + "integrity": "sha512-IrUYvsaE/m2/NaVIZ7D/gCnsmyU/buechnH6MhUipzG1qJcZIwIp/DoP/LZUcHyhy0Bv0NKZD2pGOjpRhn7l7A==", "bundleDependencies": [ "@trufflesuite/bigint-buffer", - "emittery", "keccak", "leveldown", - "secp256k1", - "@types/bn.js", - "@types/lru-cache", - "@types/seedrandom" + "secp256k1" ], "hasShrinkwrap": true, "dependencies": { "@trufflesuite/bigint-buffer": "1.1.10", + "@trufflesuite/uws-js-unofficial": "20.10.0-unofficial.2", "@types/bn.js": "^5.1.0", "@types/lru-cache": "5.1.1", "@types/seedrandom": "3.0.1", + "abstract-level": "1.0.3", + "abstract-leveldown": "7.2.0", + "async-eventemitter": "0.2.4", "emittery": "0.10.0", "keccak": "3.0.2", "leveldown": "6.1.0", @@ -19870,12 +21506,22 @@ "node-gyp-build-test": "build-test.js" } }, + "node_modules/ganache/node_modules/@trufflesuite/uws-js-unofficial": { + "version": "20.10.0-unofficial.2", + "resolved": "https://registry.npmjs.org/@trufflesuite/uws-js-unofficial/-/uws-js-unofficial-20.10.0-unofficial.2.tgz", + "integrity": "sha512-oQQlnS3oNeGsgS4K3KCSSavJgSb0W9D5ktZs4FacX9VbM7b+NlhjH96d6/G4fMrz+bc5MXRyco419on0X0dvRA==", + "dependencies": { + "ws": "8.2.3" + }, + "optionalDependencies": { + "bufferutil": "4.0.5", + "utf-8-validate": "5.0.7" + } + }, "node_modules/ganache/node_modules/@types/bn.js": { "version": "5.1.0", "resolved": "https://registry.npmjs.org/@types/bn.js/-/bn.js-5.1.0.tgz", "integrity": "sha512-QSSVYj7pYFN49kW77o2s9xTCwZ8F2xLbjLLSEVh8D2F4JUhZtPAGOFLTD+ffqksBx/u4cE/KImFjyhqCjn/LIA==", - "inBundle": true, - "license": "MIT", "dependencies": { "@types/node": "*" } @@ -19883,23 +21529,70 @@ "node_modules/ganache/node_modules/@types/lru-cache": { "version": "5.1.1", "resolved": "https://registry.npmjs.org/@types/lru-cache/-/lru-cache-5.1.1.tgz", - "integrity": "sha512-ssE3Vlrys7sdIzs5LOxCzTVMsU7i9oa/IaW92wF32JFb3CVczqOkru2xspuKczHEbG3nvmPY7IFqVmGGHdNbYw==", - "inBundle": true, - "license": "MIT" + "integrity": "sha512-ssE3Vlrys7sdIzs5LOxCzTVMsU7i9oa/IaW92wF32JFb3CVczqOkru2xspuKczHEbG3nvmPY7IFqVmGGHdNbYw==" }, "node_modules/ganache/node_modules/@types/node": { "version": "17.0.0", "resolved": "https://registry.npmjs.org/@types/node/-/node-17.0.0.tgz", - "integrity": "sha512-eMhwJXc931Ihh4tkU+Y7GiLzT/y/DBNpNtr4yU9O2w3SYBsr9NaOPhQlLKRmoWtI54uNwuo0IOUFQjVOTZYRvw==", - "inBundle": true, - "license": "MIT" + "integrity": "sha512-eMhwJXc931Ihh4tkU+Y7GiLzT/y/DBNpNtr4yU9O2w3SYBsr9NaOPhQlLKRmoWtI54uNwuo0IOUFQjVOTZYRvw==" }, "node_modules/ganache/node_modules/@types/seedrandom": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/@types/seedrandom/-/seedrandom-3.0.1.tgz", - "integrity": "sha512-giB9gzDeiCeloIXDgzFBCgjj1k4WxcDrZtGl6h1IqmUPlxF+Nx8Ve+96QCyDZ/HseB/uvDsKbpib9hU5cU53pw==", + "integrity": "sha512-giB9gzDeiCeloIXDgzFBCgjj1k4WxcDrZtGl6h1IqmUPlxF+Nx8Ve+96QCyDZ/HseB/uvDsKbpib9hU5cU53pw==" + }, + "node_modules/ganache/node_modules/abstract-level": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/abstract-level/-/abstract-level-1.0.3.tgz", + "integrity": "sha512-t6jv+xHy+VYwc4xqZMn2Pa9DjcdzvzZmQGRjTFc8spIbRGHgBrEKbPq+rYXc7CCo0lxgYvSgKVg9qZAhpVQSjA==", + "dependencies": { + "buffer": "^6.0.3", + "catering": "^2.1.0", + "is-buffer": "^2.0.5", + "level-supports": "^4.0.0", + "level-transcoder": "^1.0.1", + "module-error": "^1.0.1", + "queue-microtask": "^1.2.3" + } + }, + "node_modules/ganache/node_modules/abstract-level/node_modules/level-supports": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/level-supports/-/level-supports-4.0.1.tgz", + "integrity": "sha512-PbXpve8rKeNcZ9C1mUicC9auIYFyGpkV9/i6g76tLgANwWhtG2v7I4xNBUlkn3lE2/dZF3Pi0ygYGtLc4RXXdA==" + }, + "node_modules/ganache/node_modules/abstract-leveldown": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/abstract-leveldown/-/abstract-leveldown-7.2.0.tgz", + "integrity": "sha512-DnhQwcFEaYsvYDnACLZhMmCWd3rkOeEvglpa4q5i/5Jlm3UIsWaxVzuXvDLFCSCWRO3yy2/+V/G7FusFgejnfQ==", "inBundle": true, - "license": "MIT" + "license": "MIT", + "dependencies": { + "buffer": "^6.0.3", + "catering": "^2.0.0", + "is-buffer": "^2.0.5", + "level-concat-iterator": "^3.0.0", + "level-supports": "^2.0.1", + "queue-microtask": "^1.2.3" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/ganache/node_modules/async": { + "version": "2.6.4", + "resolved": "https://registry.npmjs.org/async/-/async-2.6.4.tgz", + "integrity": "sha512-mzo5dfJYwAn29PeiJ0zvwTo04zj8HDJj0Mn8TD7sno7q12prdbnasKJHhkm2c1LgrhlJ0teaea8860oxi51mGA==", + "dependencies": { + "lodash": "^4.17.14" + } + }, + "node_modules/ganache/node_modules/async-eventemitter": { + "version": "0.2.4", + "resolved": "https://registry.npmjs.org/async-eventemitter/-/async-eventemitter-0.2.4.tgz", + "integrity": "sha512-pd20BwL7Yt1zwDFy+8MX8F1+WCT8aQeKj0kQnTrH9WaeRETlRamVhD0JtRPmrV4GfOJ2F9CvdQkZeZhnh2TuHw==", + "dependencies": { + "async": "^2.4.0" + } }, "node_modules/ganache/node_modules/base64-js": { "version": "1.5.1", @@ -20002,15 +21695,7 @@ "node_modules/ganache/node_modules/emittery": { "version": "0.10.0", "resolved": "https://registry.npmjs.org/emittery/-/emittery-0.10.0.tgz", - "integrity": "sha512-AGvFfs+d0JKCJQ4o01ASQLGPmSCxgfU9RFXvzPvZdjKK8oscynksuJhWrSTSw7j7Ep/sZct5b5ZhYCi8S/t0HQ==", - "inBundle": true, - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sindresorhus/emittery?sponsor=1" - } + "integrity": "sha512-AGvFfs+d0JKCJQ4o01ASQLGPmSCxgfU9RFXvzPvZdjKK8oscynksuJhWrSTSw7j7Ep/sZct5b5ZhYCi8S/t0HQ==" }, "node_modules/ganache/node_modules/hash.js": { "version": "1.1.7", @@ -20103,41 +21788,7 @@ "node": ">=10.0.0" } }, - "node_modules/ganache/node_modules/leveldown": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/leveldown/-/leveldown-6.1.0.tgz", - "integrity": "sha512-8C7oJDT44JXxh04aSSsfcMI8YiaGRhOFI9/pMEL7nWJLVsWajDPTRxsSHTM2WcTVY5nXM+SuRHzPPi0GbnDX+w==", - "hasInstallScript": true, - "inBundle": true, - "license": "MIT", - "dependencies": { - "abstract-leveldown": "^7.2.0", - "napi-macros": "~2.0.0", - "node-gyp-build": "^4.3.0" - }, - "engines": { - "node": ">=10.12.0" - } - }, - "node_modules/ganache/node_modules/leveldown/node_modules/abstract-leveldown": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/abstract-leveldown/-/abstract-leveldown-7.2.0.tgz", - "integrity": "sha512-DnhQwcFEaYsvYDnACLZhMmCWd3rkOeEvglpa4q5i/5Jlm3UIsWaxVzuXvDLFCSCWRO3yy2/+V/G7FusFgejnfQ==", - "inBundle": true, - "license": "MIT", - "dependencies": { - "buffer": "^6.0.3", - "catering": "^2.0.0", - "is-buffer": "^2.0.5", - "level-concat-iterator": "^3.0.0", - "level-supports": "^2.0.1", - "queue-microtask": "^1.2.3" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/ganache/node_modules/leveldown/node_modules/level-concat-iterator": { + "node_modules/ganache/node_modules/level-concat-iterator": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/level-concat-iterator/-/level-concat-iterator-3.1.0.tgz", "integrity": "sha512-BWRCMHBxbIqPxJ8vHOvKUsaO0v1sLYZtjN3K2iZJsRBYtp+ONsY6Jfi6hy9K3+zolgQRryhIn2NRZjZnWJ9NmQ==", @@ -20150,7 +21801,7 @@ "node": ">=10" } }, - "node_modules/ganache/node_modules/leveldown/node_modules/level-supports": { + "node_modules/ganache/node_modules/level-supports": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/level-supports/-/level-supports-2.1.0.tgz", "integrity": "sha512-E486g1NCjW5cF78KGPrMDRBYzPuueMZ6VBXHT6gC7A8UYWGiM14fGgp+s/L1oFfDWSPV/+SFkYCmZ0SiESkRKA==", @@ -20160,6 +21811,36 @@ "node": ">=10" } }, + "node_modules/ganache/node_modules/level-transcoder": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/level-transcoder/-/level-transcoder-1.0.1.tgz", + "integrity": "sha512-t7bFwFtsQeD8cl8NIoQ2iwxA0CL/9IFw7/9gAjOonH0PWTTiRfY7Hq+Ejbsxh86tXobDQ6IOiddjNYIfOBs06w==", + "dependencies": { + "buffer": "^6.0.3", + "module-error": "^1.0.1" + } + }, + "node_modules/ganache/node_modules/leveldown": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/leveldown/-/leveldown-6.1.0.tgz", + "integrity": "sha512-8C7oJDT44JXxh04aSSsfcMI8YiaGRhOFI9/pMEL7nWJLVsWajDPTRxsSHTM2WcTVY5nXM+SuRHzPPi0GbnDX+w==", + "hasInstallScript": true, + "inBundle": true, + "license": "MIT", + "dependencies": { + "abstract-leveldown": "^7.2.0", + "napi-macros": "~2.0.0", + "node-gyp-build": "^4.3.0" + }, + "engines": { + "node": ">=10.12.0" + } + }, + "node_modules/ganache/node_modules/lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" + }, "node_modules/ganache/node_modules/minimalistic-assert": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", @@ -20174,6 +21855,11 @@ "inBundle": true, "license": "MIT" }, + "node_modules/ganache/node_modules/module-error": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/module-error/-/module-error-1.0.2.tgz", + "integrity": "sha512-0yuvsqSCv8LbaOKhnsQ/T5JhyFlCYLPXK3U2sgV10zoKQwzs/MyfuQUOZQ1V/6OCOJsK/TRgNVrPuPDqtdMFtA==" + }, "node_modules/ganache/node_modules/napi-macros": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/napi-macros/-/napi-macros-2.0.0.tgz", @@ -20306,6 +21992,11 @@ "inBundle": true, "license": "MIT" }, + "node_modules/ganache/node_modules/ws": { + "version": "8.2.3", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.2.3.tgz", + "integrity": "sha512-wBuoj1BDpC6ZQ1B7DWQBYVLphPWkm8i9Y0/3YdHjHKHiohOJ1ws+3OccDWtH+PoC9DZD5WOTrJvNbWvjS6JWaA==" + }, "node_modules/gauge": { "version": "2.7.4", "resolved": "https://registry.npmjs.org/gauge/-/gauge-2.7.4.tgz", @@ -20627,22 +22318,22 @@ } }, "node_modules/hardhat": { - "version": "2.13.0", - "resolved": "https://registry.npmjs.org/hardhat/-/hardhat-2.13.0.tgz", - "integrity": "sha512-ZlzBOLML1QGlm6JWyVAG8lVTEAoOaVm1in/RU2zoGAnYEoD1Rp4T+ZMvrLNhHaaeS9hfjJ1gJUBfiDr4cx+htQ==", + "version": "2.14.0", + "resolved": "https://registry.npmjs.org/hardhat/-/hardhat-2.14.0.tgz", + "integrity": "sha512-73jsInY4zZahMSVFurSK+5TNCJTXMv+vemvGia0Ac34Mm19fYp6vEPVGF3sucbumszsYxiTT2TbS8Ii2dsDSoQ==", "dependencies": { "@ethersproject/abi": "^5.1.2", "@metamask/eth-sig-util": "^4.0.0", - "@nomicfoundation/ethereumjs-block": "^4.0.0", - "@nomicfoundation/ethereumjs-blockchain": "^6.0.0", - "@nomicfoundation/ethereumjs-common": "^3.0.0", - "@nomicfoundation/ethereumjs-evm": "^1.0.0", - "@nomicfoundation/ethereumjs-rlp": "^4.0.0", - "@nomicfoundation/ethereumjs-statemanager": "^1.0.0", - "@nomicfoundation/ethereumjs-trie": "^5.0.0", - "@nomicfoundation/ethereumjs-tx": "^4.0.0", - "@nomicfoundation/ethereumjs-util": "^8.0.0", - "@nomicfoundation/ethereumjs-vm": "^6.0.0", + "@nomicfoundation/ethereumjs-block": "5.0.1", + "@nomicfoundation/ethereumjs-blockchain": "7.0.1", + "@nomicfoundation/ethereumjs-common": "4.0.1", + "@nomicfoundation/ethereumjs-evm": "2.0.1", + "@nomicfoundation/ethereumjs-rlp": "5.0.1", + "@nomicfoundation/ethereumjs-statemanager": "2.0.1", + "@nomicfoundation/ethereumjs-trie": "6.0.1", + "@nomicfoundation/ethereumjs-tx": "5.0.1", + "@nomicfoundation/ethereumjs-util": "9.0.1", + "@nomicfoundation/ethereumjs-vm": "7.0.1", "@nomicfoundation/solidity-analyzer": "^0.1.0", "@sentry/node": "^5.18.1", "@types/bn.js": "^5.1.0", @@ -20702,23 +22393,54 @@ } }, "node_modules/hardhat-contract-sizer": { - "version": "2.6.1", - "resolved": "https://registry.npmjs.org/hardhat-contract-sizer/-/hardhat-contract-sizer-2.6.1.tgz", - "integrity": "sha512-b8wS7DBvyo22kmVwpzstAQTdDCThpl/ySBqZh5ga9Yxjf61/uTL12TEg5nl7lDeWy73ntEUzxMwY6XxbQEc2wA==", + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/hardhat-contract-sizer/-/hardhat-contract-sizer-2.8.0.tgz", + "integrity": "sha512-jXt2Si3uIDx5z99J+gvKa0yvIw156pE4dpH9X/PvTQv652BUd+qGj7WT93PXnHXGh5qhQLkjDYeZMYNOThfjFg==", "dependencies": { "chalk": "^4.0.0", - "cli-table3": "^0.6.0" + "cli-table3": "^0.6.0", + "strip-ansi": "^6.0.0" }, "peerDependencies": { "hardhat": "^2.0.0" } }, + "node_modules/hardhat-contract-sizer/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "engines": { + "node": ">=8" + } + }, + "node_modules/hardhat-contract-sizer/node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/hardhat-deploy": { - "version": "0.11.22", - "resolved": "https://registry.npmjs.org/hardhat-deploy/-/hardhat-deploy-0.11.22.tgz", - "integrity": "sha512-ZhHVNB7Jo2l8Is+KIAk9F8Q3d7pptyiX+nsNbIFXztCz81kaP+6kxNODRBqRCy7SOD3It4+iKCL6tWsPAA/jVQ==", + "version": "0.11.29", + "resolved": "https://registry.npmjs.org/hardhat-deploy/-/hardhat-deploy-0.11.29.tgz", + "integrity": "sha512-9F+MRFkEocelzB8d+SDDCcTL7edBYAj2S63ldknvfIIBSajeB6q1/jm+dlK1GjcWzAzw7EVoxtjJXzxAxZfZcg==", "dev": true, "dependencies": { + "@ethersproject/abi": "^5.7.0", + "@ethersproject/abstract-signer": "^5.7.0", + "@ethersproject/address": "^5.7.0", + "@ethersproject/bignumber": "^5.7.0", + "@ethersproject/bytes": "^5.7.0", + "@ethersproject/constants": "^5.7.0", + "@ethersproject/contracts": "^5.7.0", + "@ethersproject/providers": "^5.7.2", + "@ethersproject/solidity": "^5.7.0", + "@ethersproject/transactions": "^5.7.0", + "@ethersproject/wallet": "^5.7.0", "@types/qs": "^6.9.7", "axios": "^0.21.1", "chalk": "^4.1.2", @@ -20731,7 +22453,7 @@ "match-all": "^1.2.6", "murmur-128": "^0.2.1", "qs": "^6.9.4", - "zksync-web3": "^0.8.1" + "zksync-web3": "^0.14.3" } }, "node_modules/hardhat-deploy/node_modules/form-data": { @@ -20762,15 +22484,6 @@ "node": ">=12" } }, - "node_modules/hardhat-deploy/node_modules/zksync-web3": { - "version": "0.8.1", - "resolved": "https://registry.npmjs.org/zksync-web3/-/zksync-web3-0.8.1.tgz", - "integrity": "sha512-1A4aHPQ3MyuGjpv5X/8pVEN+MdZqMjfVmiweQSRjOlklXYu65wT9BGEOtCmMs5d3gIvLp4ssfTeuR5OCKOD2kw==", - "dev": true, - "peerDependencies": { - "ethers": "~5.7.0" - } - }, "node_modules/hardhat-gas-reporter": { "version": "1.0.9", "resolved": "https://registry.npmjs.org/hardhat-gas-reporter/-/hardhat-gas-reporter-1.0.9.tgz", @@ -21216,9 +22929,9 @@ } }, "node_modules/highlightjs-solidity": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/highlightjs-solidity/-/highlightjs-solidity-2.0.5.tgz", - "integrity": "sha512-ReXxQSGQkODMUgHcWzVSnfDCDrL2HshOYgw3OlIYmfHeRzUPkfJTUIp95pK4CmbiNG2eMTOmNLpfCz9Zq7Cwmg==", + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/highlightjs-solidity/-/highlightjs-solidity-2.0.6.tgz", + "integrity": "sha512-DySXWfQghjm2l6a/flF+cteroJqD4gI8GSdL4PtvxZSsAHie8m3yVe2JFoRg03ROKT6hp2Lc/BxXkqerNmtQYg==", "dev": true }, "node_modules/hmac-drbg": { @@ -21234,8 +22947,7 @@ "node_modules/hosted-git-info": { "version": "2.8.9", "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz", - "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==", - "dev": true + "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==" }, "node_modules/htmlparser2": { "version": "8.0.1", @@ -21271,9 +22983,9 @@ } }, "node_modules/http-cache-semantics": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.0.tgz", - "integrity": "sha512-carPklcUh7ROWRK7Cv27RPtdhYhUsela/ue5/jKzjegVvXDqM2ILE9Q2BGn9JZJh1g87cp56su/FgQSzcWS8cQ==" + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.1.tgz", + "integrity": "sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ==" }, "node_modules/http-errors": { "version": "2.0.0", @@ -21477,7 +23189,6 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/invert-kv/-/invert-kv-1.0.0.tgz", "integrity": "sha512-xgs2NH9AE66ucSq4cNG1nhSFghr5l6tdL15Pk+jl46bmmBapgoaY/AacXyaDznAqmGL99TiLSQgO/XazFSKYeQ==", - "dev": true, "engines": { "node": ">=0.10.0" } @@ -21516,8 +23227,7 @@ "node_modules/is-arrayish": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", - "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==", - "dev": true + "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==" }, "node_modules/is-bigint": { "version": "1.0.4", @@ -21589,18 +23299,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/is-ci": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-2.0.0.tgz", - "integrity": "sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w==", - "dev": true, - "dependencies": { - "ci-info": "^2.0.0" - }, - "bin": { - "is-ci": "bin.js" - } - }, "node_modules/is-date-object": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz", @@ -21615,21 +23313,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/is-docker": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz", - "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==", - "dev": true, - "bin": { - "is-docker": "cli.js" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/is-extglob": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", @@ -21885,8 +23568,7 @@ "node_modules/is-utf8": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/is-utf8/-/is-utf8-0.2.1.tgz", - "integrity": "sha512-rMYPYvCzsXywIsldgLaSoPlw5PfoB/ssr7hY4pLfcodrA5M/eArza1a9VmTiNIBNMjOGr1Ow9mTyU2o69U6U9Q==", - "dev": true + "integrity": "sha512-rMYPYvCzsXywIsldgLaSoPlw5PfoB/ssr7hY4pLfcodrA5M/eArza1a9VmTiNIBNMjOGr1Ow9mTyU2o69U6U9Q==" }, "node_modules/is-weakref": { "version": "1.0.2", @@ -21899,18 +23581,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/is-wsl": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", - "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", - "dev": true, - "dependencies": { - "is-docker": "^2.0.0" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/isarray": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", @@ -21921,6 +23591,16 @@ "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==" }, + "node_modules/isomorphic-unfetch": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/isomorphic-unfetch/-/isomorphic-unfetch-3.1.0.tgz", + "integrity": "sha512-geDJjpoZ8N0kWexiwkX8F9NkTsXhetLPVbZFQ+JTW239QNOwvB0gniuR1Wc6f0AMTn7/mFGyXvHTifrCp/GH8Q==", + "dev": true, + "dependencies": { + "node-fetch": "^2.6.1", + "unfetch": "^4.2.0" + } + }, "node_modules/isomorphic-ws": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/isomorphic-ws/-/isomorphic-ws-4.0.1.tgz", @@ -22002,6 +23682,21 @@ } } }, + "node_modules/js-cookie": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/js-cookie/-/js-cookie-2.2.1.tgz", + "integrity": "sha512-HvdH2LzI/EAZcUwA8+0nKNtWHqS+ZmijLA30RwZA0bo7ToCckjK5MkGhjED9KoRcXO6BaGI3I9UIzSA1FKFPOQ==", + "dev": true + }, + "node_modules/js-sdsl": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/js-sdsl/-/js-sdsl-4.4.0.tgz", + "integrity": "sha512-FfVSdx6pJ41Oa+CF7RDaFmTnCaFhua+SNYQX74riGOpl96x+2jQCqEfQ2bnXu/5DPCqlRuiqyvTJM0Qjz26IVg==", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/js-sdsl" + } + }, "node_modules/js-sha3": { "version": "0.8.0", "resolved": "https://registry.npmjs.org/js-sha3/-/js-sha3-0.8.0.tgz", @@ -22045,6 +23740,15 @@ "node": ">=4" } }, + "node_modules/json-bigint": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-bigint/-/json-bigint-1.0.0.tgz", + "integrity": "sha512-SiPv/8VpZuWbvLSMtTDU8hEfrZWg/mH/nV/b4o0CYbSxu1UIQPLdwKOCIyLQX+VIPO5vrLX3i8qtqFyhdPSUSQ==", + "dev": true, + "dependencies": { + "bignumber.js": "^9.0.0" + } + }, "node_modules/json-buffer": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", @@ -22201,9 +23905,9 @@ } }, "node_modules/keyv": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.0.tgz", - "integrity": "sha512-2YvuMsA+jnFGtBareKqgANOEKe1mk3HKiXu2fRmAfyxG0MJAywNhi5ttWA3PMjl4NmpyjZNbFifR2vNjW1znfA==", + "version": "4.5.2", + "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.2.tgz", + "integrity": "sha512-5MHbFaKn8cNSmVW7BYnijeAVlE4cYA/SVkifVgrh7yotnfhKmjuXpDKjrABLnT0SfHWV21P8ow07OGfRrNDg8g==", "dependencies": { "json-buffer": "3.0.1" } @@ -22216,20 +23920,10 @@ "graceful-fs": "^4.1.9" } }, - "node_modules/klaw-sync": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/klaw-sync/-/klaw-sync-6.0.0.tgz", - "integrity": "sha512-nIeuVSzdCCs6TDPTqI8w1Yre34sSq7AkZ4B3sfOBbI2CgVSB4Du4aLQijFU2+lhAFCwt9+42Hel6lQNIv6AntQ==", - "dev": true, - "dependencies": { - "graceful-fs": "^4.1.11" - } - }, "node_modules/lcid": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/lcid/-/lcid-1.0.0.tgz", "integrity": "sha512-YiGkH6EnGrDGqLMITnGjXtGmNtjoXw9SVUzcaos8RBi7Ps0VBylkq+vOcY9QE5poLasPCR849ucFUkl0UzUyOw==", - "dev": true, "dependencies": { "invert-kv": "^1.0.0" }, @@ -22557,7 +24251,6 @@ "version": "1.1.0", "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz", "integrity": "sha512-cy7ZdNRXdablkXYNI049pthVeXFurRyb9+hA/dZzerZ0pGTx42z+y+ssxBaVV2l70t1muq5IdKhn4UtcoGUY9A==", - "dev": true, "dependencies": { "graceful-fs": "^4.1.2", "parse-json": "^2.2.0", @@ -22573,7 +24266,6 @@ "version": "2.3.0", "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==", - "dev": true, "engines": { "node": ">=0.10.0" } @@ -22602,7 +24294,12 @@ "node_modules/lodash.assign": { "version": "4.2.0", "resolved": "https://registry.npmjs.org/lodash.assign/-/lodash.assign-4.2.0.tgz", - "integrity": "sha512-hFuH8TY+Yji7Eja3mGiuAxBqLagejScbG8GbG0j6o9vzn0YL14My+ktnqtZgFTosKymC9/44wP6s7xyuLfnClw==", + "integrity": "sha512-hFuH8TY+Yji7Eja3mGiuAxBqLagejScbG8GbG0j6o9vzn0YL14My+ktnqtZgFTosKymC9/44wP6s7xyuLfnClw==" + }, + "node_modules/lodash.camelcase": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz", + "integrity": "sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA==", "dev": true }, "node_modules/lodash.debounce": { @@ -22749,7 +24446,8 @@ "version": "1.3.6", "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==", - "devOptional": true + "optional": true, + "peer": true }, "node_modules/markdown-table": { "version": "1.1.3", @@ -22763,11 +24461,11 @@ "dev": true }, "node_modules/mathjs": { - "version": "11.5.0", - "resolved": "https://registry.npmjs.org/mathjs/-/mathjs-11.5.0.tgz", - "integrity": "sha512-vJ/+SqWtxjW6/aeDRt8xL3TlOVKqwN15BIyTGVqGbIWuiqgY4SxZ0yLuna82YH9CB757iFP7uJ4m3KvVBX7Qcg==", + "version": "11.8.0", + "resolved": "https://registry.npmjs.org/mathjs/-/mathjs-11.8.0.tgz", + "integrity": "sha512-I7r8HCoqUGyEiHQdeOCF2m2k9N+tcOHO3cZQ3tyJkMMBQMFqMR7dMQEboBMJAiFW2Um3PEItGPwcOc4P6KRqwg==", "dependencies": { - "@babel/runtime": "^7.20.6", + "@babel/runtime": "^7.21.0", "complex.js": "^2.1.1", "decimal.js": "^10.4.3", "escape-latex": "^1.2.0", @@ -22927,18 +24625,10 @@ "node": ">= 0.6" } }, - "node_modules/micromatch": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", - "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", - "dev": true, - "dependencies": { - "braces": "^3.0.2", - "picomatch": "^2.3.1" - }, - "engines": { - "node": ">=8.6" - } + "node_modules/micro-ftch": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/micro-ftch/-/micro-ftch-0.3.1.tgz", + "integrity": "sha512-/0LLxhzP0tfiR5hcQebtudP56gUurs2CLkGarnCiB/OqEyUFQ6U3paQi/tgLv0hBJYt2rnr9MNpxz4fiiugstg==" }, "node_modules/miller-rabin": { "version": "4.0.1", @@ -23077,8 +24767,7 @@ "node_modules/mkdirp-classic": { "version": "0.5.3", "resolved": "https://registry.npmjs.org/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz", - "integrity": "sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==", - "devOptional": true + "integrity": "sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==" }, "node_modules/mkdirp-promise": { "version": "5.0.1", @@ -23429,8 +25118,7 @@ "node_modules/nano-base32": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/nano-base32/-/nano-base32-1.0.1.tgz", - "integrity": "sha512-sxEtoTqAPdjWVGv71Q17koMFGsOMSiHsIFEvzOM7cNp8BXB4AnEwmDabm5dorusJf/v1z7QxaZYxUorU9RKaAw==", - "dev": true + "integrity": "sha512-sxEtoTqAPdjWVGv71Q17koMFGsOMSiHsIFEvzOM7cNp8BXB4AnEwmDabm5dorusJf/v1z7QxaZYxUorU9RKaAw==" }, "node_modules/nano-json-stream-parser": { "version": "0.1.2", @@ -23457,7 +25145,8 @@ "node_modules/napi-macros": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/napi-macros/-/napi-macros-2.0.0.tgz", - "integrity": "sha512-A0xLykHtARfueITVDernsAWdtIMbOJgKgcluwENp3AlsKN/PloyO10HtmoqnFAQAcxPkgZN7wdfPfEd0zNGxbg==" + "integrity": "sha512-A0xLykHtARfueITVDernsAWdtIMbOJgKgcluwENp3AlsKN/PloyO10HtmoqnFAQAcxPkgZN7wdfPfEd0zNGxbg==", + "optional": true }, "node_modules/ncp": { "version": "2.0.0", @@ -23481,12 +25170,6 @@ "resolved": "https://registry.npmjs.org/next-tick/-/next-tick-1.1.0.tgz", "integrity": "sha512-CXdUiJembsNjuToQvxayPZF9Vqht7hewsvy2sOWafLvi2awflj9mOC6bHIg50orX8IJvWKY9wYQ/zB2kogPslQ==" }, - "node_modules/nice-try": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz", - "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==", - "dev": true - }, "node_modules/no-case": { "version": "2.3.2", "resolved": "https://registry.npmjs.org/no-case/-/no-case-2.3.2.tgz", @@ -23514,9 +25197,9 @@ } }, "node_modules/node-abort-controller": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/node-abort-controller/-/node-abort-controller-3.0.1.tgz", - "integrity": "sha512-/ujIVxthRs+7q6hsdjHMaj8hRG9NuWmwrz+JdRwZ14jdFoKSkm+vDsCbF9PLpnSqjaWQJuTmVtcWHNLr+vrOFw==", + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/node-abort-controller/-/node-abort-controller-3.1.1.tgz", + "integrity": "sha512-AGK2yQKIjRuqnc6VkX2Xj5d+QW8xZ87pa1UK6yA6ouUyuxfHuMP6umE5QK7UmTeOAymo+Zx1Fxiuw9rVx8taHQ==", "optional": true }, "node_modules/node-addon-api": { @@ -23606,9 +25289,9 @@ "integrity": "sha512-PiVXnNuFm5+iYkLBNeq5211hvO38y63T0i2KKh2KnUs3RpzJ+JtODFjkD8yjLwnDkTYF1eKXheUwdssR+NRZdg==" }, "node_modules/nodemon": { - "version": "2.0.20", - "resolved": "https://registry.npmjs.org/nodemon/-/nodemon-2.0.20.tgz", - "integrity": "sha512-Km2mWHKKY5GzRg6i1j5OxOHQtuvVsgskLfigG25yTtbyfRGn/GNvIbRyOf1PSCKJ2aT/58TiuUsuOU5UToVViw==", + "version": "2.0.22", + "resolved": "https://registry.npmjs.org/nodemon/-/nodemon-2.0.22.tgz", + "integrity": "sha512-B8YqaKMmyuCO7BowF1Z1/mkPqLk6cs/l63Ojtd6otKjMx47Dq1utxfRxcavH1I7VSaL8n5BUaoutadnsX3AAVQ==", "dependencies": { "chokidar": "^3.5.2", "debug": "^3.2.7", @@ -23732,7 +25415,6 @@ "version": "2.5.0", "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", - "dev": true, "dependencies": { "hosted-git-info": "^2.1.4", "resolve": "^1.10.0", @@ -23744,7 +25426,6 @@ "version": "5.7.1", "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "dev": true, "bin": { "semver": "bin/semver" } @@ -23796,7 +25477,6 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", "integrity": "sha512-4jbtZXNAsfZbAHiiqjLPBiCl16dES1zI4Hpzzxw61Tk+loF+sBDBKx1ICKKKwIqQ7M0mFn1TmkN7euSncWgHiQ==", - "devOptional": true, "engines": { "node": ">=0.10.0" } @@ -23941,22 +25621,6 @@ "node": ">=6" } }, - "node_modules/open": { - "version": "7.4.2", - "resolved": "https://registry.npmjs.org/open/-/open-7.4.2.tgz", - "integrity": "sha512-MVHddDVweXZF3awtlAS+6pgKLlm/JgxZ90+/NBurBoQctVOOB/zDdVjcyPzQ+0laDGbsWgrRkflI65sQeOgT9Q==", - "dev": true, - "dependencies": { - "is-docker": "^2.0.0", - "is-wsl": "^2.1.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/ordinal": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/ordinal/-/ordinal-1.0.3.tgz", @@ -23972,7 +25636,6 @@ "version": "1.4.0", "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-1.4.0.tgz", "integrity": "sha512-PRT7ZORmwu2MEFt4/fv3Q+mEfN4zetKxufQrkShY2oGvUms9r8otu5HfdyIFHkYXjO7laNsoVGmM2MANfuTA8g==", - "dev": true, "dependencies": { "lcid": "^1.0.0" }, @@ -24102,7 +25765,6 @@ "version": "2.2.0", "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz", "integrity": "sha512-QR/GGaKCkhwk1ePQNYDRKYZ3mwU9ypsKhB0XyFnLQdomyEqk3e8wpW3V5Jp88zbxK4n5ST1nqo+g9juTpownhQ==", - "dev": true, "dependencies": { "error-ex": "^1.2.0" }, @@ -24152,199 +25814,6 @@ "upper-case-first": "^1.1.0" } }, - "node_modules/patch-package": { - "version": "6.4.7", - "resolved": "https://registry.npmjs.org/patch-package/-/patch-package-6.4.7.tgz", - "integrity": "sha512-S0vh/ZEafZ17hbhgqdnpunKDfzHQibQizx9g8yEf5dcVk3KOflOfdufRXQX8CSEkyOQwuM/bNz1GwKvFj54kaQ==", - "dev": true, - "dependencies": { - "@yarnpkg/lockfile": "^1.1.0", - "chalk": "^2.4.2", - "cross-spawn": "^6.0.5", - "find-yarn-workspace-root": "^2.0.0", - "fs-extra": "^7.0.1", - "is-ci": "^2.0.0", - "klaw-sync": "^6.0.0", - "minimist": "^1.2.0", - "open": "^7.4.2", - "rimraf": "^2.6.3", - "semver": "^5.6.0", - "slash": "^2.0.0", - "tmp": "^0.0.33" - }, - "bin": { - "patch-package": "index.js" - }, - "engines": { - "npm": ">5" - } - }, - "node_modules/patch-package/node_modules/ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "dependencies": { - "color-convert": "^1.9.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/patch-package/node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dev": true, - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/patch-package/node_modules/chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/patch-package/node_modules/color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dev": true, - "dependencies": { - "color-name": "1.1.3" - } - }, - "node_modules/patch-package/node_modules/color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", - "dev": true - }, - "node_modules/patch-package/node_modules/escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", - "dev": true, - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/patch-package/node_modules/fs-extra": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-7.0.1.tgz", - "integrity": "sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==", - "dev": true, - "dependencies": { - "graceful-fs": "^4.1.2", - "jsonfile": "^4.0.0", - "universalify": "^0.1.0" - }, - "engines": { - "node": ">=6 <7 || >=8" - } - }, - "node_modules/patch-package/node_modules/glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "dev": true, - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "engines": { - "node": "*" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/patch-package/node_modules/has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/patch-package/node_modules/jsonfile": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", - "integrity": "sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==", - "dev": true, - "optionalDependencies": { - "graceful-fs": "^4.1.6" - } - }, - "node_modules/patch-package/node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dev": true, - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, - "node_modules/patch-package/node_modules/rimraf": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", - "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", - "dev": true, - "dependencies": { - "glob": "^7.1.3" - }, - "bin": { - "rimraf": "bin.js" - } - }, - "node_modules/patch-package/node_modules/semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "dev": true, - "bin": { - "semver": "bin/semver" - } - }, - "node_modules/patch-package/node_modules/supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/patch-package/node_modules/universalify": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", - "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", - "dev": true, - "engines": { - "node": ">= 4.0.0" - } - }, "node_modules/path": { "version": "0.12.7", "resolved": "https://registry.npmjs.org/path/-/path-0.12.7.tgz", @@ -24384,15 +25853,6 @@ "node": ">=0.10.0" } }, - "node_modules/path-key": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", - "integrity": "sha512-fEHGKCSmUSDPv4uoj8AlD+joPlq3peND+HRYyxFz4KPw4z926S/b8rIuFs2FYJg3BwsxJf6A9/3eIdLaYC+9Dw==", - "dev": true, - "engines": { - "node": ">=4" - } - }, "node_modules/path-parse": { "version": "1.0.7", "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", @@ -24407,7 +25867,6 @@ "version": "1.1.0", "resolved": "https://registry.npmjs.org/path-type/-/path-type-1.1.0.tgz", "integrity": "sha512-S4eENJz1pkiQn9Znv33Q+deTOKmbl+jj1Fl+qiP/vYezj+S8x+J3Uo0ISrx/QoEvIlOaDWJhPaRd1flJ9HXZqg==", - "dev": true, "dependencies": { "graceful-fs": "^4.1.2", "pify": "^2.0.0", @@ -24421,7 +25880,6 @@ "version": "2.3.0", "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==", - "dev": true, "engines": { "node": ">=0.10.0" } @@ -24573,6 +26031,19 @@ "node": ">=4" } }, + "node_modules/platform-deploy-client": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/platform-deploy-client/-/platform-deploy-client-0.6.0.tgz", + "integrity": "sha512-mBfnOvF2gb9acGJjlXBQ6VOAkKFRdljsNKHUVY5xKqzKP2PNh/RqCIvi5AR5NqLMrQ3XaMIwRvmwAjtGw7JhYg==", + "dev": true, + "dependencies": { + "@ethersproject/abi": "^5.6.3", + "axios": "^0.21.2", + "defender-base-client": "^1.44.0", + "lodash": "^4.17.19", + "node-fetch": "^2.6.0" + } + }, "node_modules/pluralize": { "version": "8.0.0", "resolved": "https://registry.npmjs.org/pluralize/-/pluralize-8.0.0.tgz", @@ -24582,13 +26053,6 @@ "node": ">=4" } }, - "node_modules/postinstall-postinstall": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/postinstall-postinstall/-/postinstall-postinstall-2.1.0.tgz", - "integrity": "sha512-7hQX6ZlZXIoRiWNrbMQaLzUUfH+sSx39u8EJ9HYuDc1kLo9IXKWjM5RSquZN1ad5GnH8CGFM78fsAAQi3OKEEQ==", - "dev": true, - "hasInstallScript": true - }, "node_modules/pouchdb": { "version": "7.3.0", "resolved": "https://registry.npmjs.org/pouchdb/-/pouchdb-7.3.0.tgz", @@ -24986,9 +26450,9 @@ } }, "node_modules/prettier": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.7.1.tgz", - "integrity": "sha512-ujppO+MkdPqoVINuDFDRLClm7D78qbDt0/NR+wp5FqEZOoTNAjPHWj17QRhu7geIHJfcNhRk1XVQmF8Bp3ye+g==", + "version": "2.8.7", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.8.7.tgz", + "integrity": "sha512-yPngTo3aXUUmyuTjeTUT75txrf+aMh9FiD7q9ZE/i6r0bPb22g4FsE6Y338PQX1bmfy08i9QQCB7/rcUAVntfw==", "dev": true, "bin": { "prettier": "bin-prettier.js" @@ -25056,6 +26520,12 @@ "node": ">= 0.10" } }, + "node_modules/proxy-from-env": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", + "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==", + "optional": true + }, "node_modules/prr": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/prr/-/prr-1.0.1.tgz", @@ -25254,7 +26724,6 @@ "version": "1.1.0", "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-1.1.0.tgz", "integrity": "sha512-7BGwRHqt4s/uVbuyoeejRn4YmFnYZiFl4AuaeXHlgZf3sONF0SOGlxs2Pw8g6hCKupo08RafIO5YXFNOKTfwsQ==", - "dev": true, "dependencies": { "load-json-file": "^1.0.0", "normalize-package-data": "^2.3.2", @@ -25268,7 +26737,6 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-1.0.1.tgz", "integrity": "sha512-WD9MTlNtI55IwYUS27iHh9tK3YoIVhxis8yKhLpTqWtml739uXc9NWTpxoHkfZf3+DkCCsXox94/VWZniuZm6A==", - "dev": true, "dependencies": { "find-up": "^1.0.0", "read-pkg": "^1.0.0" @@ -25281,7 +26749,6 @@ "version": "1.1.2", "resolved": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz", "integrity": "sha512-jvElSjyuo4EMQGoTwo1uJU5pQMwTW5lS1x05zzfJuTIyLR3zwO27LYrxNg+dlvKpGOuGy/MzBdXh80g0ve5+HA==", - "dev": true, "dependencies": { "path-exists": "^2.0.0", "pinkie-promise": "^2.0.0" @@ -25294,7 +26761,6 @@ "version": "2.1.0", "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz", "integrity": "sha512-yTltuKuhtNeFJKa1PiRzfLAU5182q1y4Eb4XCJ3PBqyzEDkAZRzBrKKBct682ls9reBVHf9udYLN5Nd+K1B9BQ==", - "dev": true, "dependencies": { "pinkie-promise": "^2.0.0" }, @@ -25326,6 +26792,15 @@ "node": ">=8.10.0" } }, + "node_modules/reduce-flatten": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/reduce-flatten/-/reduce-flatten-2.0.0.tgz", + "integrity": "sha512-EJ4UNY/U1t2P/2k6oqotuX2Cc3T6nxJwsM0N0asT7dhrtH1ltUxDn4NalSYmPE2rCkVpcf/X6R0wDwcFpzhd4w==", + "dev": true, + "engines": { + "node": ">=6" + } + }, "node_modules/redux": { "version": "3.7.2", "resolved": "https://registry.npmjs.org/redux/-/redux-3.7.2.tgz", @@ -25499,13 +26974,12 @@ "node_modules/require-main-filename": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-1.0.1.tgz", - "integrity": "sha512-IqSUtOVP4ksd1C/ej5zeEh/BIP2ajqpn8c5x+q99gvcIG/Qf0cud5raVnE/Dwd0ua9TXYDoDc0RE5hBSdz22Ug==", - "dev": true + "integrity": "sha512-IqSUtOVP4ksd1C/ej5zeEh/BIP2ajqpn8c5x+q99gvcIG/Qf0cud5raVnE/Dwd0ua9TXYDoDc0RE5hBSdz22Ug==" }, "node_modules/reselect": { - "version": "4.1.7", - "resolved": "https://registry.npmjs.org/reselect/-/reselect-4.1.7.tgz", - "integrity": "sha512-Zu1xbUt3/OPwsXL46hvOOoQrap2azE7ZQbokq61BQfiXvhewsKDwhMeZjTX9sX0nvw1t/U5Audyn1I9P/m9z0A==" + "version": "4.1.8", + "resolved": "https://registry.npmjs.org/reselect/-/reselect-4.1.8.tgz", + "integrity": "sha512-ab9EmR80F/zQTMNeneUr4cv+jSwPJgIlvEmVwLerwrWVbpLlBuls9XHzIeTFy4cegU2NHBp3va0LKOzU5qFEYQ==" }, "node_modules/reselect-tree": { "version": "1.3.7", @@ -25649,7 +27123,6 @@ "version": "0.0.6", "resolved": "https://registry.npmjs.org/ripemd160-min/-/ripemd160-min-0.0.6.tgz", "integrity": "sha512-+GcJgQivhs6S9qvLogusiTcS9kQUfgR75whKuy5jIhuiOfQuJ8fjqxV6EGD5duH1Y/FawFUMtMhyeq3Fbnib8A==", - "dev": true, "engines": { "node": ">=8" } @@ -25666,9 +27139,9 @@ } }, "node_modules/rpc-websockets": { - "version": "7.5.0", - "resolved": "https://registry.npmjs.org/rpc-websockets/-/rpc-websockets-7.5.0.tgz", - "integrity": "sha512-9tIRi1uZGy7YmDjErf1Ax3wtqdSSLIlnmL5OtOzgd5eqPKbsPpwDP5whUDO2LQay3Xp0CcHlcNSGzacNRluBaQ==", + "version": "7.5.1", + "resolved": "https://registry.npmjs.org/rpc-websockets/-/rpc-websockets-7.5.1.tgz", + "integrity": "sha512-kGFkeTsmd37pHPMaHIgN1LVKXMi0JD782v4Ds9ZKtLlwdTKjn+CxM9A9/gLT2LaOuEcEFGL98h1QWQtlOIdW0w==", "dependencies": { "@babel/runtime": "^7.17.2", "eventemitter3": "^4.0.7", @@ -26004,7 +27477,6 @@ "version": "2.1.4", "resolved": "https://registry.npmjs.org/sha3/-/sha3-2.1.4.tgz", "integrity": "sha512-S8cNxbyb0UGUM2VhRD4Poe5N58gJnJsLJ5vC7FYWGUmGhcsj4++WaIOBFVDxlG0W3To6xBuiRh+i0Qp2oNCOtg==", - "dev": true, "dependencies": { "buffer": "6.0.3" } @@ -26014,27 +27486,6 @@ "resolved": "https://registry.npmjs.org/shallowequal/-/shallowequal-1.1.0.tgz", "integrity": "sha512-y0m1JoUZSlPAjXVtPPW70aZWfIL/dSP7AFkRnniLCrK/8MDKog3TySTBmckD+RObVxH0v4Tox67+F14PdED2oQ==" }, - "node_modules/shebang-command": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", - "integrity": "sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg==", - "dev": true, - "dependencies": { - "shebang-regex": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/shebang-regex": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", - "integrity": "sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/side-channel": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", @@ -26103,15 +27554,6 @@ "semver": "bin/semver.js" } }, - "node_modules/slash": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-2.0.0.tgz", - "integrity": "sha512-ZYKh3Wh2z1PpEXWr0MpSBZ0V6mZHAQfYevttO11c51CaWjGTaadiKZ+wVt1PbMlDV5qhMFslpZCemhwOK7C89A==", - "dev": true, - "engines": { - "node": ">=6" - } - }, "node_modules/slice-ansi": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz", @@ -26138,9 +27580,9 @@ } }, "node_modules/solc": { - "version": "0.8.17", - "resolved": "https://registry.npmjs.org/solc/-/solc-0.8.17.tgz", - "integrity": "sha512-Dtidk2XtTTmkB3IKdyeg6wLYopJnBVxdoykN8oP8VY3PQjN16BScYoUJTXFm2OP7P0hXNAqWiJNmmfuELtLf8g==", + "version": "0.8.20", + "resolved": "https://registry.npmjs.org/solc/-/solc-0.8.20.tgz", + "integrity": "sha512-fPRnGspIEqmhu63RFO3pc79sLA7ZmzO0Uy0L5l6hEt2wAsq0o7UV6pXkAp3Mfv9IBhg7Px/oTu3a+y4gs3BWrQ==", "dependencies": { "command-exists": "^1.2.8", "commander": "^8.1.0", @@ -26174,9 +27616,9 @@ } }, "node_modules/solidity-ast": { - "version": "0.4.35", - "resolved": "https://registry.npmjs.org/solidity-ast/-/solidity-ast-0.4.35.tgz", - "integrity": "sha512-F5bTDLh3rmDxRmLSrs3qt3nvxJprWSEkS7h2KmuXDx7XTfJ6ZKVTV1rtPIYCqJAuPsU/qa8YUeFn7jdOAZcTPA==", + "version": "0.4.49", + "resolved": "https://registry.npmjs.org/solidity-ast/-/solidity-ast-0.4.49.tgz", + "integrity": "sha512-Pr5sCAj1SFqzwFZw1HPKSq0PehlQNdM8GwKyAVYh2DOn7/cCK8LUKD1HeHnKtTgBW7hi9h4nnnan7hpAg5RhWQ==", "dev": true }, "node_modules/source-map": { @@ -26206,7 +27648,6 @@ "version": "3.1.1", "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.1.tgz", "integrity": "sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w==", - "dev": true, "dependencies": { "spdx-expression-parse": "^3.0.0", "spdx-license-ids": "^3.0.0" @@ -26215,14 +27656,12 @@ "node_modules/spdx-exceptions": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz", - "integrity": "sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==", - "dev": true + "integrity": "sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==" }, "node_modules/spdx-expression-parse": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz", "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==", - "dev": true, "dependencies": { "spdx-exceptions": "^2.1.0", "spdx-license-ids": "^3.0.0" @@ -26231,14 +27670,12 @@ "node_modules/spdx-license-ids": { "version": "3.0.12", "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.12.tgz", - "integrity": "sha512-rr+VVSXtRhO4OHbXUiAF7xW3Bo9DuuF6C5jH+q/x15j2jniycgKbxU09Hr0WqlSLUs4i4ltHGXqTe7VHclYWyA==", - "dev": true + "integrity": "sha512-rr+VVSXtRhO4OHbXUiAF7xW3Bo9DuuF6C5jH+q/x15j2jniycgKbxU09Hr0WqlSLUs4i4ltHGXqTe7VHclYWyA==" }, "node_modules/split-ca": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/split-ca/-/split-ca-1.0.1.tgz", - "integrity": "sha512-Q5thBSxp5t8WPTTJQS59LrGqOZqOsrhDGDVm8azCqIBjSBd7nd9o2PM+mDulQQkh8h//4U6hFZnc/mul8t5pWQ==", - "dev": true + "integrity": "sha512-Q5thBSxp5t8WPTTJQS59LrGqOZqOsrhDGDVm8azCqIBjSBd7nd9o2PM+mDulQQkh8h//4U6hFZnc/mul8t5pWQ==" }, "node_modules/sprintf-js": { "version": "1.0.3", @@ -26249,7 +27686,6 @@ "version": "1.11.0", "resolved": "https://registry.npmjs.org/ssh2/-/ssh2-1.11.0.tgz", "integrity": "sha512-nfg0wZWGSsfUe/IBJkXVll3PEZ//YH2guww+mP88gTpuSU4FtZN7zu9JoeTGOyCNx2dTDtT9fOpWwlzyj4uOOw==", - "dev": true, "hasInstallScript": true, "dependencies": { "asn1": "^0.2.4", @@ -26351,6 +27787,12 @@ "safe-buffer": "~5.2.0" } }, + "node_modules/string-format": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/string-format/-/string-format-2.0.0.tgz", + "integrity": "sha512-bbEs3scLeYNXLecRRuk6uJxdXUSj6le/8rNPHChIJTn2V79aXVTR1EH2OH5zLKKoz0V02fOUKZZcw01pLUShZA==", + "dev": true + }, "node_modules/string-width": { "version": "4.2.3", "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", @@ -26424,7 +27866,6 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz", "integrity": "sha512-kwrX1y7czp1E69n2ajbG65mIo9dqvJ+8aBQXOGVxqwvNbsXdFM6Lq37dLAY3mknUwru8CfcCbfOLL/gMo+fi3g==", - "dev": true, "dependencies": { "is-utf8": "^0.2.0" }, @@ -26626,9 +28067,9 @@ } }, "node_modules/swarm-js/node_modules/got": { - "version": "11.8.5", - "resolved": "https://registry.npmjs.org/got/-/got-11.8.5.tgz", - "integrity": "sha512-o0Je4NvQObAuZPHLFoRSkdG2lTgtcynqymzg2Vupdx6PorhaT5MCbIyXG6d4D94kk8ZG57QeosgdiqfJWhEhlQ==", + "version": "11.8.6", + "resolved": "https://registry.npmjs.org/got/-/got-11.8.6.tgz", + "integrity": "sha512-6tfZ91bOr7bOXnK7PRDCGBLa1H4U080YHNaAQ2KsMGlLEzRbk44nsZF2E1IeRc3vtJHPVbKCYgdFbaGO2ljd8g==", "dependencies": { "@sindresorhus/is": "^4.0.0", "@szmarczak/http-timer": "^4.0.5", @@ -26749,6 +28190,39 @@ "node": ">=10.0.0" } }, + "node_modules/table-layout": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/table-layout/-/table-layout-1.0.2.tgz", + "integrity": "sha512-qd/R7n5rQTRFi+Zf2sk5XVVd9UQl6ZkduPFC3S7WEGJAmetDTjY3qPN50eSKzwuzEyQKy5TN2TiZdkIjos2L6A==", + "dev": true, + "dependencies": { + "array-back": "^4.0.1", + "deep-extend": "~0.6.0", + "typical": "^5.2.0", + "wordwrapjs": "^4.0.0" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/table-layout/node_modules/array-back": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/array-back/-/array-back-4.0.2.tgz", + "integrity": "sha512-NbdMezxqf94cnNfWLL7V/im0Ub+Anbb0IoZhvzie8+4HJ4nMQuzHuy49FkGYCJK2yAloZ3meiB6AVMClbrI1vg==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/table-layout/node_modules/typical": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/typical/-/typical-5.2.0.tgz", + "integrity": "sha512-dvdQgNDNJo+8B2uBQoqdb11eUCE1JQXhvjC/CZtgvZseVd5TYMXnq0+vuUemXbd/Se29cTaUuPX3YIc2xgbvIg==", + "dev": true, + "engines": { + "node": ">=8" + } + }, "node_modules/table/node_modules/ajv": { "version": "8.11.0", "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.11.0.tgz", @@ -26825,7 +28299,6 @@ "version": "2.2.0", "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-2.2.0.tgz", "integrity": "sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==", - "devOptional": true, "dependencies": { "bl": "^4.0.3", "end-of-stream": "^1.4.1", @@ -26837,37 +28310,11 @@ "node": ">=6" } }, - "node_modules/test-value": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/test-value/-/test-value-2.1.0.tgz", - "integrity": "sha512-+1epbAxtKeXttkGFMTX9H42oqzOTufR1ceCF+GYA5aOmvaPq9wd4PUS8329fn2RRLGNeUkgRLnVpycjx8DsO2w==", - "dev": true, - "dependencies": { - "array-back": "^1.0.3", - "typical": "^2.6.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/test-value/node_modules/array-back": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/array-back/-/array-back-1.0.4.tgz", - "integrity": "sha512-1WxbZvrmyhkNoeYcizokbmh5oiOCIfyvGtcqbK3Ls1v1fKcquzxnQSceOx6tzq7jmai2kFLWIpGND2cLhH6TPw==", - "dev": true, - "dependencies": { - "typical": "^2.6.0" - }, - "engines": { - "node": ">=0.12.0" - } - }, "node_modules/testrpc": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/testrpc/-/testrpc-0.0.1.tgz", "integrity": "sha512-afH1hO+SQ/VPlmaLUFj2636QMeDvPCeQMc/9RBMW0IfjNe9gFD9Ra3ShqYkB7py0do1ZcCna/9acHyzTJ+GcNA==", - "deprecated": "testrpc has been renamed to ganache-cli, please use this package from now on.", - "dev": true + "deprecated": "testrpc has been renamed to ganache-cli, please use this package from now on." }, "node_modules/text-encoding-utf-8": { "version": "1.0.2", @@ -27039,6 +28486,11 @@ "node": ">=0.6" } }, + "node_modules/toml": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/toml/-/toml-3.0.0.tgz", + "integrity": "sha512-y/mWCZinnvxjTKYhJ+pYxwD0mRLVvOtdS2Awbgxln6iEnt4rk0yBxeSBHkGJcPucRiG0e55mwWp+g/05rsrd6w==" + }, "node_modules/touch": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/touch/-/touch-3.1.0.tgz", @@ -27076,15 +28528,15 @@ "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==" }, "node_modules/truffle": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/truffle/-/truffle-5.7.1.tgz", - "integrity": "sha512-6XZfF9xb0J+9O4BdSyIEtMubGCRDJAPXu9a0KhDXXNbsPPMNFzbYfG3oI5W13q4V9mO4PQEtYKeLRD6QyLwFdg==", + "version": "5.9.0", + "resolved": "https://registry.npmjs.org/truffle/-/truffle-5.9.0.tgz", + "integrity": "sha512-XZBlGzU+IA0F3oDpmTWas62TYrNseG3xYh861zR+E09K2A0E0eSuTi1d5k+Uzhv4I6bIlNSWL31iI1J/PiZxcw==", "hasInstallScript": true, "dependencies": { - "@truffle/db-loader": "^0.2.10", - "@truffle/debugger": "^11.0.21", + "@truffle/db-loader": "^0.2.24", + "@truffle/debugger": "^11.1.0", "app-module-path": "^2.2.0", - "ganache": "7.6.0", + "ganache": "7.8.0", "mocha": "10.1.0", "original-require": "^1.0.1" }, @@ -27092,7 +28544,7 @@ "truffle": "build/cli.bundled.js" }, "optionalDependencies": { - "@truffle/db": "^2.0.10" + "@truffle/db": "^2.0.24" } }, "node_modules/truffle-contract-size": { @@ -28025,201 +29477,72 @@ "node": ">=0.10.0" } }, - "node_modules/ts-essentials": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/ts-essentials/-/ts-essentials-1.0.4.tgz", - "integrity": "sha512-q3N1xS4vZpRouhYHDPwO0bDW3EZ6SK9CrrDHxi/D6BPReSjpVgWIOpLS2o0gSBZm+7q/wyKp6RVM1AeeW7uyfQ==", - "dev": true - }, - "node_modules/ts-generator": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/ts-generator/-/ts-generator-0.1.1.tgz", - "integrity": "sha512-N+ahhZxTLYu1HNTQetwWcx3so8hcYbkKBHTr4b4/YgObFTIKkOSSsaa+nal12w8mfrJAyzJfETXawbNjSfP2gQ==", + "node_modules/ts-command-line-args": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/ts-command-line-args/-/ts-command-line-args-2.5.0.tgz", + "integrity": "sha512-Ff7Xt04WWCjj/cmPO9eWTJX3qpBZWuPWyQYG1vnxJao+alWWYjwJBc5aYz3h5p5dE08A6AnpkgiCtP/0KXXBYw==", "dev": true, "dependencies": { - "@types/mkdirp": "^0.5.2", - "@types/prettier": "^2.1.1", - "@types/resolve": "^0.0.8", - "chalk": "^2.4.1", - "glob": "^7.1.2", - "mkdirp": "^0.5.1", - "prettier": "^2.1.2", - "resolve": "^1.8.1", - "ts-essentials": "^1.0.0" + "@morgan-stanley/ts-mocking-bird": "^0.6.2", + "chalk": "^4.1.0", + "command-line-args": "^5.1.1", + "command-line-usage": "^6.1.0", + "string-format": "^2.0.0" }, "bin": { - "ts-generator": "dist/cli/run.js" - } - }, - "node_modules/ts-generator/node_modules/ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "dependencies": { - "color-convert": "^1.9.0" - }, - "engines": { - "node": ">=4" + "write-markdown": "dist/write-markdown.js" } }, - "node_modules/ts-generator/node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dev": true, - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/ts-generator/node_modules/chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/ts-generator/node_modules/color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dev": true, - "dependencies": { - "color-name": "1.1.3" - } - }, - "node_modules/ts-generator/node_modules/color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", - "dev": true - }, - "node_modules/ts-generator/node_modules/escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", - "dev": true, - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/ts-generator/node_modules/glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "dev": true, - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "engines": { - "node": "*" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/ts-generator/node_modules/has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/ts-generator/node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dev": true, - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, - "node_modules/ts-generator/node_modules/supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "node_modules/ts-essentials": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/ts-essentials/-/ts-essentials-7.0.3.tgz", + "integrity": "sha512-8+gr5+lqO3G84KdiTSMRLtuyJ+nTBVRKuCrK4lidMPdVeEp0uqC875uE5NMcaA7YYMN7XsNiFQuMvasF8HT/xQ==", "dev": true, - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=4" + "peerDependencies": { + "typescript": ">=3.7.0" } }, "node_modules/ts-node": { - "version": "10.9.1", - "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.9.1.tgz", - "integrity": "sha512-NtVysVPkxxrwFGUUxGYhfux8k78pQB3JqYBXlLRZgdGUqTO5wU/UyHop5p70iEbGhB7q5KmiZiU0Y3KlJrScEw==", - "devOptional": true, + "version": "9.1.1", + "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-9.1.1.tgz", + "integrity": "sha512-hPlt7ZACERQGf03M253ytLY3dHbGNGrAq9qIHWUY9XHYl1z7wYngSr3OQ5xmui8o2AaxsONxIzjafLUiWBo1Fg==", + "optional": true, + "peer": true, "dependencies": { - "@cspotcode/source-map-support": "^0.8.0", - "@tsconfig/node10": "^1.0.7", - "@tsconfig/node12": "^1.0.7", - "@tsconfig/node14": "^1.0.0", - "@tsconfig/node16": "^1.0.2", - "acorn": "^8.4.1", - "acorn-walk": "^8.1.1", "arg": "^4.1.0", "create-require": "^1.1.0", "diff": "^4.0.1", "make-error": "^1.1.1", - "v8-compile-cache-lib": "^3.0.1", + "source-map-support": "^0.5.17", "yn": "3.1.1" }, "bin": { "ts-node": "dist/bin.js", - "ts-node-cwd": "dist/bin-cwd.js", - "ts-node-esm": "dist/bin-esm.js", "ts-node-script": "dist/bin-script.js", "ts-node-transpile-only": "dist/bin-transpile.js", "ts-script": "dist/bin-script-deprecated.js" }, + "engines": { + "node": ">=10.0.0" + }, "peerDependencies": { - "@swc/core": ">=1.2.50", - "@swc/wasm": ">=1.2.50", - "@types/node": "*", "typescript": ">=2.7" - }, - "peerDependenciesMeta": { - "@swc/core": { - "optional": true - }, - "@swc/wasm": { - "optional": true - } } }, "node_modules/ts-node/node_modules/diff": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", - "devOptional": true, + "optional": true, + "peer": true, "engines": { "node": ">=0.3.1" } }, "node_modules/tslib": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.1.tgz", - "integrity": "sha512-tGyy4dAjRIEwI7BzsB0lynWgOpfqjUdq91XXAlIWD2OwKBH7oCl/GZG/HT4BOHrTlPMOASlMQ7veyTqpmRcrNA==" + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.5.1.tgz", + "integrity": "sha512-KaI6gPil5m9vF7DKaoXxx1ia9fxS4qG5YveErRRVknPDXXriu5M8h48YRjB6h5ZUOKuAKlSJYb0GaDe8I39fRw==" }, "node_modules/tsort": { "version": "0.0.1", @@ -28284,21 +29607,37 @@ } }, "node_modules/typechain": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/typechain/-/typechain-3.0.0.tgz", - "integrity": "sha512-ft4KVmiN3zH4JUFu2WJBrwfHeDf772Tt2d8bssDTo/YcckKW2D+OwFrHXRC6hJvO3mHjFQTihoMV6fJOi0Hngg==", + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/typechain/-/typechain-8.1.1.tgz", + "integrity": "sha512-uF/sUvnXTOVF2FHKhQYnxHk4su4JjZR8vr4mA2mBaRwHTbwh0jIlqARz9XJr1tA0l7afJGvEa1dTSi4zt039LQ==", "dev": true, "dependencies": { - "command-line-args": "^4.0.7", - "debug": "^4.1.1", + "@types/prettier": "^2.1.1", + "debug": "^4.3.1", "fs-extra": "^7.0.0", + "glob": "7.1.7", "js-sha3": "^0.8.0", "lodash": "^4.17.15", - "ts-essentials": "^6.0.3", - "ts-generator": "^0.1.1" + "mkdirp": "^1.0.4", + "prettier": "^2.3.1", + "ts-command-line-args": "^2.2.0", + "ts-essentials": "^7.0.1" }, "bin": { "typechain": "dist/cli/cli.js" + }, + "peerDependencies": { + "typescript": ">=4.3.0" + } + }, + "node_modules/typechain/node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" } }, "node_modules/typechain/node_modules/fs-extra": { @@ -28315,6 +29654,26 @@ "node": ">=6 <7 || >=8" } }, + "node_modules/typechain/node_modules/glob": { + "version": "7.1.7", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.7.tgz", + "integrity": "sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ==", + "dev": true, + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, "node_modules/typechain/node_modules/jsonfile": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", @@ -28324,13 +29683,28 @@ "graceful-fs": "^4.1.6" } }, - "node_modules/typechain/node_modules/ts-essentials": { - "version": "6.0.7", - "resolved": "https://registry.npmjs.org/ts-essentials/-/ts-essentials-6.0.7.tgz", - "integrity": "sha512-2E4HIIj4tQJlIHuATRHayv0EfMGK3ris/GRk1E3CFnsZzeNV+hUmelbaTZHLtXaZppM5oLhHRtO04gINC4Jusw==", + "node_modules/typechain/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", "dev": true, - "peerDependencies": { - "typescript": ">=3.7.0" + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/typechain/node_modules/mkdirp": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", + "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", + "dev": true, + "bin": { + "mkdirp": "bin/cmd.js" + }, + "engines": { + "node": ">=10" } }, "node_modules/typechain/node_modules/universalify": { @@ -28364,10 +29738,9 @@ } }, "node_modules/typescript": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.0.3.tgz", - "integrity": "sha512-xv8mOEDnigb/tN9PSMTwSEqAnUvkoXMQlicOb0IUVDBSQCgBSaAAROUZYy2IcUy5qU6XajK5jjjO7TMWqBTKZA==", - "devOptional": true, + "version": "5.0.4", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.0.4.tgz", + "integrity": "sha512-cW9T5W9xY37cc+jfEnaUvX91foxtHkza3Nw3wkoF4sSlKn0MONdkdEndig/qPBWXNkmplh3NzayQzCiHM4/hqw==", "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" @@ -28398,10 +29771,13 @@ } }, "node_modules/typical": { - "version": "2.6.1", - "resolved": "https://registry.npmjs.org/typical/-/typical-2.6.1.tgz", - "integrity": "sha512-ofhi8kjIje6npGozTip9Fr8iecmYfEbS06i0JnIg+rh51KakryWF4+jX8lLKZVhy6N+ID45WYSFCxPOdTWCzNg==", - "dev": true + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/typical/-/typical-4.0.0.tgz", + "integrity": "sha512-VAH4IvQ7BDFYglMd7BPRDfLgxZZX4O4TFcRDA6EN5X7erNJJq+McIEp8np9aVtxrCJ6qx4GTYVfOWNjcqwZgRw==", + "dev": true, + "engines": { + "node": ">=8" + } }, "node_modules/u2f-api": { "version": "0.2.7", @@ -28481,6 +29857,19 @@ "node": ">=12.18" } }, + "node_modules/unit-fns": { + "version": "0.1.9", + "resolved": "https://registry.npmjs.org/unit-fns/-/unit-fns-0.1.9.tgz", + "integrity": "sha512-bxceIkc7n2icQmgQx8u3vX98ZBIcpL2YJDKIsWDFK7ZX1TTuLvtNWVNd9/oARCDHd7QQRzwc+zxabO0HSK8X0w==", + "engines": { + "node": ">=10" + }, + "node_modules/unfetch": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/unfetch/-/unfetch-4.2.0.tgz", + "integrity": "sha512-F9p7yYCn6cIW9El1zi0HI6vqpeIvBsr3dSuRO6Xuppb1u5rXpCPmMvLSyECLhybr9isec8Ohl0hPekMVrEinDA==", + "dev": true + }, "node_modules/universalify": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", @@ -28653,17 +30042,10 @@ "uuid": "dist/bin/uuid" } }, - "node_modules/v8-compile-cache-lib": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz", - "integrity": "sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==", - "devOptional": true - }, "node_modules/validate-npm-package-license": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", - "dev": true, "dependencies": { "spdx-correct": "^3.0.0", "spdx-expression-parse": "^3.0.0" @@ -28711,27 +30093,27 @@ "optional": true }, "node_modules/web3": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/web3/-/web3-1.8.1.tgz", - "integrity": "sha512-tAqFsQhGv340C9OgRJIuoScN7f7wa1tUvsnnDUMt9YE6J4gcm7TV2Uwv+KERnzvV+xgdeuULYpsioRRNKrUvoQ==", + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/web3/-/web3-1.10.0.tgz", + "integrity": "sha512-YfKY9wSkGcM8seO+daR89oVTcbu18NsVfvOngzqMYGUU0pPSQmE57qQDvQzUeoIOHAnXEBNzrhjQJmm8ER0rng==", "hasInstallScript": true, "dependencies": { - "web3-bzz": "1.8.1", - "web3-core": "1.8.1", - "web3-eth": "1.8.1", - "web3-eth-personal": "1.8.1", - "web3-net": "1.8.1", - "web3-shh": "1.8.1", - "web3-utils": "1.8.1" + "web3-bzz": "1.10.0", + "web3-core": "1.10.0", + "web3-eth": "1.10.0", + "web3-eth-personal": "1.10.0", + "web3-net": "1.10.0", + "web3-shh": "1.10.0", + "web3-utils": "1.10.0" }, "engines": { "node": ">=8.0.0" } }, "node_modules/web3-bzz": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/web3-bzz/-/web3-bzz-1.8.1.tgz", - "integrity": "sha512-dJJHS84nvpoxv6ijTMkdUSlRr5beCXNtx4UZcrFLHBva8dT63QEtKdLyDt2AyMJJdVzTCk78uir/6XtVWrdS6w==", + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/web3-bzz/-/web3-bzz-1.10.0.tgz", + "integrity": "sha512-o9IR59io3pDUsXTsps5pO5hW1D5zBmg46iNc2t4j2DkaYHNdDLwk2IP9ukoM2wg47QILfPEJYzhTfkS/CcX0KA==", "hasInstallScript": true, "dependencies": { "@types/node": "^12.12.6", @@ -28748,53 +30130,113 @@ "integrity": "sha512-J8xLz7q2OFulZ2cyGTLE1TbbZcjpno7FaN6zdJNrgAdrJ+DZzh/uFR6YrTb4C+nXakvud8Q4+rbhoIWlYQbUFQ==" }, "node_modules/web3-core": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/web3-core/-/web3-core-1.8.1.tgz", - "integrity": "sha512-LbRZlJH2N6nS3n3Eo9Y++25IvzMY7WvYnp4NM/Ajhh97dAdglYs6rToQ2DbL2RLvTYmTew4O/y9WmOk4nq9COw==", + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/web3-core/-/web3-core-1.10.0.tgz", + "integrity": "sha512-fWySwqy2hn3TL89w5TM8wXF1Z2Q6frQTKHWmP0ppRQorEK8NcHJRfeMiv/mQlSKoTS1F6n/nv2uyZsixFycjYQ==", "dependencies": { - "@types/bn.js": "^5.1.0", + "@types/bn.js": "^5.1.1", "@types/node": "^12.12.6", "bignumber.js": "^9.0.0", - "web3-core-helpers": "1.8.1", - "web3-core-method": "1.8.1", - "web3-core-requestmanager": "1.8.1", - "web3-utils": "1.8.1" + "web3-core-helpers": "1.10.0", + "web3-core-method": "1.10.0", + "web3-core-requestmanager": "1.10.0", + "web3-utils": "1.10.0" }, "engines": { "node": ">=8.0.0" } }, "node_modules/web3-core-helpers": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/web3-core-helpers/-/web3-core-helpers-1.8.1.tgz", - "integrity": "sha512-ClzNO6T1S1gifC+BThw0+GTfcsjLEY8T1qUp6Ly2+w4PntAdNtKahxWKApWJ0l9idqot/fFIDXwO3Euu7I0Xqw==", + "version": "1.8.2", + "resolved": "https://registry.npmjs.org/web3-core-helpers/-/web3-core-helpers-1.8.2.tgz", + "integrity": "sha512-6B1eLlq9JFrfealZBomd1fmlq1o4A09vrCVQSa51ANoib/jllT3atZrRDr0zt1rfI7TSZTZBXdN/aTdeN99DWw==", + "dev": true, "dependencies": { - "web3-eth-iban": "1.8.1", - "web3-utils": "1.8.1" + "web3-eth-iban": "1.8.2", + "web3-utils": "1.8.2" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/web3-core-helpers/node_modules/web3-utils": { + "version": "1.8.2", + "resolved": "https://registry.npmjs.org/web3-utils/-/web3-utils-1.8.2.tgz", + "integrity": "sha512-v7j6xhfLQfY7xQDrUP0BKbaNrmZ2/+egbqP9q3KYmOiPpnvAfol+32slgL0WX/5n8VPvKCK5EZ1HGrAVICSToA==", + "dev": true, + "dependencies": { + "bn.js": "^5.2.1", + "ethereum-bloom-filters": "^1.0.6", + "ethereumjs-util": "^7.1.0", + "ethjs-unit": "0.1.6", + "number-to-bn": "1.7.0", + "randombytes": "^2.1.0", + "utf8": "3.0.0" }, "engines": { "node": ">=8.0.0" } }, "node_modules/web3-core-method": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/web3-core-method/-/web3-core-method-1.8.1.tgz", - "integrity": "sha512-oYGRodktfs86NrnFwaWTbv2S38JnpPslFwSSARwFv4W9cjbGUW3LDeA5MKD/dRY+ssZ5OaekeMsUCLoGhX68yA==", + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/web3-core-method/-/web3-core-method-1.10.0.tgz", + "integrity": "sha512-4R700jTLAMKDMhQ+nsVfIXvH6IGJlJzGisIfMKWAIswH31h5AZz7uDUW2YctI+HrYd+5uOAlS4OJeeT9bIpvkA==", "dependencies": { "@ethersproject/transactions": "^5.6.2", - "web3-core-helpers": "1.8.1", - "web3-core-promievent": "1.8.1", - "web3-core-subscriptions": "1.8.1", - "web3-utils": "1.8.1" + "web3-core-helpers": "1.10.0", + "web3-core-promievent": "1.10.0", + "web3-core-subscriptions": "1.10.0", + "web3-utils": "1.10.0" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/web3-core-method/node_modules/eventemitter3": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.4.tgz", + "integrity": "sha512-rlaVLnVxtxvoyLsQQFBx53YmXHDxRIzzTLbdfxqi4yocpSjAxXwkU0cScM5JgSKMqEhrZpnvQ2D9gjylR0AimQ==" + }, + "node_modules/web3-core-method/node_modules/web3-core-helpers": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/web3-core-helpers/-/web3-core-helpers-1.10.0.tgz", + "integrity": "sha512-pIxAzFDS5vnbXvfvLSpaA1tfRykAe9adw43YCKsEYQwH0gCLL0kMLkaCX3q+Q8EVmAh+e1jWL/nl9U0de1+++g==", + "dependencies": { + "web3-eth-iban": "1.10.0", + "web3-utils": "1.10.0" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/web3-core-method/node_modules/web3-core-promievent": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/web3-core-promievent/-/web3-core-promievent-1.10.0.tgz", + "integrity": "sha512-68N7k5LWL5R38xRaKFrTFT2pm2jBNFaM4GioS00YjAKXRQ3KjmhijOMG3TICz6Aa5+6GDWYelDNx21YAeZ4YTg==", + "dependencies": { + "eventemitter3": "4.0.4" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/web3-core-method/node_modules/web3-eth-iban": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/web3-eth-iban/-/web3-eth-iban-1.10.0.tgz", + "integrity": "sha512-0l+SP3IGhInw7Q20LY3IVafYEuufo4Dn75jAHT7c2aDJsIolvf2Lc6ugHkBajlwUneGfbRQs/ccYPQ9JeMUbrg==", + "dependencies": { + "bn.js": "^5.2.1", + "web3-utils": "1.10.0" }, "engines": { "node": ">=8.0.0" } }, "node_modules/web3-core-promievent": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/web3-core-promievent/-/web3-core-promievent-1.8.1.tgz", - "integrity": "sha512-9mxqHlgB0MrZI4oUIRFkuoJMNj3E7btjrMv3sMer/Z9rYR1PfoSc1aAokw4rxKIcAh+ylVtd/acaB2HKB7aRPg==", + "version": "1.8.2", + "resolved": "https://registry.npmjs.org/web3-core-promievent/-/web3-core-promievent-1.8.2.tgz", + "integrity": "sha512-nvkJWDVgoOSsolJldN33tKW6bKKRJX3MCPDYMwP5SUFOA/mCzDEoI88N0JFofDTXkh1k7gOqp1pvwi9heuaxGg==", + "dev": true, "dependencies": { "eventemitter3": "4.0.4" }, @@ -28805,30 +30247,55 @@ "node_modules/web3-core-promievent/node_modules/eventemitter3": { "version": "4.0.4", "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.4.tgz", - "integrity": "sha512-rlaVLnVxtxvoyLsQQFBx53YmXHDxRIzzTLbdfxqi4yocpSjAxXwkU0cScM5JgSKMqEhrZpnvQ2D9gjylR0AimQ==" + "integrity": "sha512-rlaVLnVxtxvoyLsQQFBx53YmXHDxRIzzTLbdfxqi4yocpSjAxXwkU0cScM5JgSKMqEhrZpnvQ2D9gjylR0AimQ==", + "dev": true }, "node_modules/web3-core-requestmanager": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/web3-core-requestmanager/-/web3-core-requestmanager-1.8.1.tgz", - "integrity": "sha512-x+VC2YPPwZ1khvqA6TA69LvfFCOZXsoUVOxmTx/vIN22PrY9KzKhxcE7pBSiGhmab1jtmRYXUbcQSVpAXqL8cw==", + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/web3-core-requestmanager/-/web3-core-requestmanager-1.10.0.tgz", + "integrity": "sha512-3z/JKE++Os62APml4dvBM+GAuId4h3L9ckUrj7ebEtS2AR0ixyQPbrBodgL91Sv7j7cQ3Y+hllaluqjguxvSaQ==", + "dependencies": { + "util": "^0.12.5", + "web3-core-helpers": "1.10.0", + "web3-providers-http": "1.10.0", + "web3-providers-ipc": "1.10.0", + "web3-providers-ws": "1.10.0" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/web3-core-requestmanager/node_modules/web3-core-helpers": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/web3-core-helpers/-/web3-core-helpers-1.10.0.tgz", + "integrity": "sha512-pIxAzFDS5vnbXvfvLSpaA1tfRykAe9adw43YCKsEYQwH0gCLL0kMLkaCX3q+Q8EVmAh+e1jWL/nl9U0de1+++g==", "dependencies": { - "util": "^0.12.0", - "web3-core-helpers": "1.8.1", - "web3-providers-http": "1.8.1", - "web3-providers-ipc": "1.8.1", - "web3-providers-ws": "1.8.1" + "web3-eth-iban": "1.10.0", + "web3-utils": "1.10.0" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/web3-core-requestmanager/node_modules/web3-eth-iban": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/web3-eth-iban/-/web3-eth-iban-1.10.0.tgz", + "integrity": "sha512-0l+SP3IGhInw7Q20LY3IVafYEuufo4Dn75jAHT7c2aDJsIolvf2Lc6ugHkBajlwUneGfbRQs/ccYPQ9JeMUbrg==", + "dependencies": { + "bn.js": "^5.2.1", + "web3-utils": "1.10.0" }, "engines": { "node": ">=8.0.0" } }, "node_modules/web3-core-subscriptions": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/web3-core-subscriptions/-/web3-core-subscriptions-1.8.1.tgz", - "integrity": "sha512-bmCMq5OeA3E2vZUh8Js1HcJbhwtsE+yeMqGC4oIZB3XsL5SLqyKLB/pU+qUYqQ9o4GdcrFTDPhPg1bgvf7p1Pw==", + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/web3-core-subscriptions/-/web3-core-subscriptions-1.10.0.tgz", + "integrity": "sha512-HGm1PbDqsxejI075gxBc5OSkwymilRWZufIy9zEpnWKNmfbuv5FfHgW1/chtJP6aP3Uq2vHkvTDl3smQBb8l+g==", "dependencies": { "eventemitter3": "4.0.4", - "web3-core-helpers": "1.8.1" + "web3-core-helpers": "1.10.0" }, "engines": { "node": ">=8.0.0" @@ -28839,61 +30306,127 @@ "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.4.tgz", "integrity": "sha512-rlaVLnVxtxvoyLsQQFBx53YmXHDxRIzzTLbdfxqi4yocpSjAxXwkU0cScM5JgSKMqEhrZpnvQ2D9gjylR0AimQ==" }, + "node_modules/web3-core-subscriptions/node_modules/web3-core-helpers": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/web3-core-helpers/-/web3-core-helpers-1.10.0.tgz", + "integrity": "sha512-pIxAzFDS5vnbXvfvLSpaA1tfRykAe9adw43YCKsEYQwH0gCLL0kMLkaCX3q+Q8EVmAh+e1jWL/nl9U0de1+++g==", + "dependencies": { + "web3-eth-iban": "1.10.0", + "web3-utils": "1.10.0" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/web3-core-subscriptions/node_modules/web3-eth-iban": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/web3-eth-iban/-/web3-eth-iban-1.10.0.tgz", + "integrity": "sha512-0l+SP3IGhInw7Q20LY3IVafYEuufo4Dn75jAHT7c2aDJsIolvf2Lc6ugHkBajlwUneGfbRQs/ccYPQ9JeMUbrg==", + "dependencies": { + "bn.js": "^5.2.1", + "web3-utils": "1.10.0" + }, + "engines": { + "node": ">=8.0.0" + } + }, "node_modules/web3-core/node_modules/@types/node": { "version": "12.20.55", "resolved": "https://registry.npmjs.org/@types/node/-/node-12.20.55.tgz", "integrity": "sha512-J8xLz7q2OFulZ2cyGTLE1TbbZcjpno7FaN6zdJNrgAdrJ+DZzh/uFR6YrTb4C+nXakvud8Q4+rbhoIWlYQbUFQ==" }, + "node_modules/web3-core/node_modules/web3-core-helpers": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/web3-core-helpers/-/web3-core-helpers-1.10.0.tgz", + "integrity": "sha512-pIxAzFDS5vnbXvfvLSpaA1tfRykAe9adw43YCKsEYQwH0gCLL0kMLkaCX3q+Q8EVmAh+e1jWL/nl9U0de1+++g==", + "dependencies": { + "web3-eth-iban": "1.10.0", + "web3-utils": "1.10.0" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/web3-core/node_modules/web3-eth-iban": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/web3-eth-iban/-/web3-eth-iban-1.10.0.tgz", + "integrity": "sha512-0l+SP3IGhInw7Q20LY3IVafYEuufo4Dn75jAHT7c2aDJsIolvf2Lc6ugHkBajlwUneGfbRQs/ccYPQ9JeMUbrg==", + "dependencies": { + "bn.js": "^5.2.1", + "web3-utils": "1.10.0" + }, + "engines": { + "node": ">=8.0.0" + } + }, "node_modules/web3-eth": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/web3-eth/-/web3-eth-1.8.1.tgz", - "integrity": "sha512-LgyzbhFqiFRd8M8sBXoFN4ztzOnkeckl3H/9lH5ek7AdoRMhBg7tYpYRP3E5qkhd/q+yiZmcUgy1AF6NHrC1wg==", - "dependencies": { - "web3-core": "1.8.1", - "web3-core-helpers": "1.8.1", - "web3-core-method": "1.8.1", - "web3-core-subscriptions": "1.8.1", - "web3-eth-abi": "1.8.1", - "web3-eth-accounts": "1.8.1", - "web3-eth-contract": "1.8.1", - "web3-eth-ens": "1.8.1", - "web3-eth-iban": "1.8.1", - "web3-eth-personal": "1.8.1", - "web3-net": "1.8.1", - "web3-utils": "1.8.1" + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/web3-eth/-/web3-eth-1.10.0.tgz", + "integrity": "sha512-Z5vT6slNMLPKuwRyKGbqeGYC87OAy8bOblaqRTgg94CXcn/mmqU7iPIlG4506YdcdK3x6cfEDG7B6w+jRxypKA==", + "dependencies": { + "web3-core": "1.10.0", + "web3-core-helpers": "1.10.0", + "web3-core-method": "1.10.0", + "web3-core-subscriptions": "1.10.0", + "web3-eth-abi": "1.10.0", + "web3-eth-accounts": "1.10.0", + "web3-eth-contract": "1.10.0", + "web3-eth-ens": "1.10.0", + "web3-eth-iban": "1.10.0", + "web3-eth-personal": "1.10.0", + "web3-net": "1.10.0", + "web3-utils": "1.10.0" }, "engines": { "node": ">=8.0.0" } }, "node_modules/web3-eth-abi": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/web3-eth-abi/-/web3-eth-abi-1.8.1.tgz", - "integrity": "sha512-0mZvCRTIG0UhDhJwNQJgJxu4b4DyIpuMA0GTfqxqeuqzX4Q/ZvmoNurw0ExTfXaGPP82UUmmdkRi6FdZOx+C6w==", + "version": "1.8.2", + "resolved": "https://registry.npmjs.org/web3-eth-abi/-/web3-eth-abi-1.8.2.tgz", + "integrity": "sha512-Om9g3kaRNjqiNPAgKwGT16y+ZwtBzRe4ZJFGjLiSs6v5I7TPNF+rRMWuKnR6jq0azQZDj6rblvKFMA49/k48Og==", + "dev": true, "dependencies": { "@ethersproject/abi": "^5.6.3", - "web3-utils": "1.8.1" + "web3-utils": "1.8.2" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/web3-eth-abi/node_modules/web3-utils": { + "version": "1.8.2", + "resolved": "https://registry.npmjs.org/web3-utils/-/web3-utils-1.8.2.tgz", + "integrity": "sha512-v7j6xhfLQfY7xQDrUP0BKbaNrmZ2/+egbqP9q3KYmOiPpnvAfol+32slgL0WX/5n8VPvKCK5EZ1HGrAVICSToA==", + "dev": true, + "dependencies": { + "bn.js": "^5.2.1", + "ethereum-bloom-filters": "^1.0.6", + "ethereumjs-util": "^7.1.0", + "ethjs-unit": "0.1.6", + "number-to-bn": "1.7.0", + "randombytes": "^2.1.0", + "utf8": "3.0.0" }, "engines": { "node": ">=8.0.0" } }, "node_modules/web3-eth-accounts": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/web3-eth-accounts/-/web3-eth-accounts-1.8.1.tgz", - "integrity": "sha512-mgzxSYgN54/NsOFBO1Fq1KkXp1S5KlBvI/DlgvajU72rupoFMq6Cu6Yp9GUaZ/w2ij9PzEJuFJk174XwtfMCmg==", + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/web3-eth-accounts/-/web3-eth-accounts-1.10.0.tgz", + "integrity": "sha512-wiq39Uc3mOI8rw24wE2n15hboLE0E9BsQLdlmsL4Zua9diDS6B5abXG0XhFcoNsXIGMWXVZz4TOq3u4EdpXF/Q==", "dependencies": { "@ethereumjs/common": "2.5.0", "@ethereumjs/tx": "3.3.2", - "crypto-browserify": "3.12.0", "eth-lib": "0.2.8", - "ethereumjs-util": "^7.0.10", + "ethereumjs-util": "^7.1.5", "scrypt-js": "^3.0.1", "uuid": "^9.0.0", - "web3-core": "1.8.1", - "web3-core-helpers": "1.8.1", - "web3-core-method": "1.8.1", - "web3-utils": "1.8.1" + "web3-core": "1.10.0", + "web3-core-helpers": "1.10.0", + "web3-core-method": "1.10.0", + "web3-utils": "1.10.0" }, "engines": { "node": ">=8.0.0" @@ -28940,65 +30473,217 @@ "uuid": "dist/bin/uuid" } }, + "node_modules/web3-eth-accounts/node_modules/web3-core-helpers": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/web3-core-helpers/-/web3-core-helpers-1.10.0.tgz", + "integrity": "sha512-pIxAzFDS5vnbXvfvLSpaA1tfRykAe9adw43YCKsEYQwH0gCLL0kMLkaCX3q+Q8EVmAh+e1jWL/nl9U0de1+++g==", + "dependencies": { + "web3-eth-iban": "1.10.0", + "web3-utils": "1.10.0" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/web3-eth-accounts/node_modules/web3-eth-iban": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/web3-eth-iban/-/web3-eth-iban-1.10.0.tgz", + "integrity": "sha512-0l+SP3IGhInw7Q20LY3IVafYEuufo4Dn75jAHT7c2aDJsIolvf2Lc6ugHkBajlwUneGfbRQs/ccYPQ9JeMUbrg==", + "dependencies": { + "bn.js": "^5.2.1", + "web3-utils": "1.10.0" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/web3-eth-accounts/node_modules/web3-eth-iban/node_modules/bn.js": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.2.1.tgz", + "integrity": "sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ==" + }, "node_modules/web3-eth-contract": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/web3-eth-contract/-/web3-eth-contract-1.8.1.tgz", - "integrity": "sha512-1wphnl+/xwCE2io44JKnN+ti3oa47BKRiVzvWd42icwRbcpFfRxH9QH+aQX3u8VZIISNH7dAkTWpGIIJgGFTmg==", + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/web3-eth-contract/-/web3-eth-contract-1.10.0.tgz", + "integrity": "sha512-MIC5FOzP/+2evDksQQ/dpcXhSqa/2hFNytdl/x61IeWxhh6vlFeSjq0YVTAyIzdjwnL7nEmZpjfI6y6/Ufhy7w==", "dependencies": { - "@types/bn.js": "^5.1.0", - "web3-core": "1.8.1", - "web3-core-helpers": "1.8.1", - "web3-core-method": "1.8.1", - "web3-core-promievent": "1.8.1", - "web3-core-subscriptions": "1.8.1", - "web3-eth-abi": "1.8.1", - "web3-utils": "1.8.1" + "@types/bn.js": "^5.1.1", + "web3-core": "1.10.0", + "web3-core-helpers": "1.10.0", + "web3-core-method": "1.10.0", + "web3-core-promievent": "1.10.0", + "web3-core-subscriptions": "1.10.0", + "web3-eth-abi": "1.10.0", + "web3-utils": "1.10.0" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/web3-eth-contract/node_modules/eventemitter3": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.4.tgz", + "integrity": "sha512-rlaVLnVxtxvoyLsQQFBx53YmXHDxRIzzTLbdfxqi4yocpSjAxXwkU0cScM5JgSKMqEhrZpnvQ2D9gjylR0AimQ==" + }, + "node_modules/web3-eth-contract/node_modules/web3-core-helpers": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/web3-core-helpers/-/web3-core-helpers-1.10.0.tgz", + "integrity": "sha512-pIxAzFDS5vnbXvfvLSpaA1tfRykAe9adw43YCKsEYQwH0gCLL0kMLkaCX3q+Q8EVmAh+e1jWL/nl9U0de1+++g==", + "dependencies": { + "web3-eth-iban": "1.10.0", + "web3-utils": "1.10.0" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/web3-eth-contract/node_modules/web3-core-promievent": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/web3-core-promievent/-/web3-core-promievent-1.10.0.tgz", + "integrity": "sha512-68N7k5LWL5R38xRaKFrTFT2pm2jBNFaM4GioS00YjAKXRQ3KjmhijOMG3TICz6Aa5+6GDWYelDNx21YAeZ4YTg==", + "dependencies": { + "eventemitter3": "4.0.4" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/web3-eth-contract/node_modules/web3-eth-abi": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/web3-eth-abi/-/web3-eth-abi-1.10.0.tgz", + "integrity": "sha512-cwS+qRBWpJ43aI9L3JS88QYPfFcSJJ3XapxOQ4j40v6mk7ATpA8CVK1vGTzpihNlOfMVRBkR95oAj7oL6aiDOg==", + "dependencies": { + "@ethersproject/abi": "^5.6.3", + "web3-utils": "1.10.0" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/web3-eth-contract/node_modules/web3-eth-iban": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/web3-eth-iban/-/web3-eth-iban-1.10.0.tgz", + "integrity": "sha512-0l+SP3IGhInw7Q20LY3IVafYEuufo4Dn75jAHT7c2aDJsIolvf2Lc6ugHkBajlwUneGfbRQs/ccYPQ9JeMUbrg==", + "dependencies": { + "bn.js": "^5.2.1", + "web3-utils": "1.10.0" }, "engines": { "node": ">=8.0.0" } }, "node_modules/web3-eth-ens": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/web3-eth-ens/-/web3-eth-ens-1.8.1.tgz", - "integrity": "sha512-FT8xTI9uN8RxeBQa/W8pLa2aoFh4+EE34w7W2271LICKzla1dtLyb6XSdn48vsUcPmhWsTVk9mO9RTU0l4LGQQ==", + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/web3-eth-ens/-/web3-eth-ens-1.10.0.tgz", + "integrity": "sha512-3hpGgzX3qjgxNAmqdrC2YUQMTfnZbs4GeLEmy8aCWziVwogbuqQZ+Gzdfrym45eOZodk+lmXyLuAdqkNlvkc1g==", "dependencies": { "content-hash": "^2.5.2", "eth-ens-namehash": "2.0.8", - "web3-core": "1.8.1", - "web3-core-helpers": "1.8.1", - "web3-core-promievent": "1.8.1", - "web3-eth-abi": "1.8.1", - "web3-eth-contract": "1.8.1", - "web3-utils": "1.8.1" + "web3-core": "1.10.0", + "web3-core-helpers": "1.10.0", + "web3-core-promievent": "1.10.0", + "web3-eth-abi": "1.10.0", + "web3-eth-contract": "1.10.0", + "web3-utils": "1.10.0" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/web3-eth-ens/node_modules/eventemitter3": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.4.tgz", + "integrity": "sha512-rlaVLnVxtxvoyLsQQFBx53YmXHDxRIzzTLbdfxqi4yocpSjAxXwkU0cScM5JgSKMqEhrZpnvQ2D9gjylR0AimQ==" + }, + "node_modules/web3-eth-ens/node_modules/web3-core-helpers": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/web3-core-helpers/-/web3-core-helpers-1.10.0.tgz", + "integrity": "sha512-pIxAzFDS5vnbXvfvLSpaA1tfRykAe9adw43YCKsEYQwH0gCLL0kMLkaCX3q+Q8EVmAh+e1jWL/nl9U0de1+++g==", + "dependencies": { + "web3-eth-iban": "1.10.0", + "web3-utils": "1.10.0" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/web3-eth-ens/node_modules/web3-core-promievent": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/web3-core-promievent/-/web3-core-promievent-1.10.0.tgz", + "integrity": "sha512-68N7k5LWL5R38xRaKFrTFT2pm2jBNFaM4GioS00YjAKXRQ3KjmhijOMG3TICz6Aa5+6GDWYelDNx21YAeZ4YTg==", + "dependencies": { + "eventemitter3": "4.0.4" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/web3-eth-ens/node_modules/web3-eth-abi": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/web3-eth-abi/-/web3-eth-abi-1.10.0.tgz", + "integrity": "sha512-cwS+qRBWpJ43aI9L3JS88QYPfFcSJJ3XapxOQ4j40v6mk7ATpA8CVK1vGTzpihNlOfMVRBkR95oAj7oL6aiDOg==", + "dependencies": { + "@ethersproject/abi": "^5.6.3", + "web3-utils": "1.10.0" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/web3-eth-ens/node_modules/web3-eth-iban": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/web3-eth-iban/-/web3-eth-iban-1.10.0.tgz", + "integrity": "sha512-0l+SP3IGhInw7Q20LY3IVafYEuufo4Dn75jAHT7c2aDJsIolvf2Lc6ugHkBajlwUneGfbRQs/ccYPQ9JeMUbrg==", + "dependencies": { + "bn.js": "^5.2.1", + "web3-utils": "1.10.0" }, "engines": { "node": ">=8.0.0" } }, "node_modules/web3-eth-iban": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/web3-eth-iban/-/web3-eth-iban-1.8.1.tgz", - "integrity": "sha512-DomoQBfvIdtM08RyMGkMVBOH0vpOIxSSQ+jukWk/EkMLGMWJtXw/K2c2uHAeq3L/VPWNB7zXV2DUEGV/lNE2Dg==", + "version": "1.8.2", + "resolved": "https://registry.npmjs.org/web3-eth-iban/-/web3-eth-iban-1.8.2.tgz", + "integrity": "sha512-h3vNblDWkWMuYx93Q27TAJz6lhzpP93EiC3+45D6xoz983p6si773vntoQ+H+5aZhwglBtoiBzdh7PSSOnP/xQ==", + "dev": true, + "dependencies": { + "bn.js": "^5.2.1", + "web3-utils": "1.8.2" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/web3-eth-iban/node_modules/web3-utils": { + "version": "1.8.2", + "resolved": "https://registry.npmjs.org/web3-utils/-/web3-utils-1.8.2.tgz", + "integrity": "sha512-v7j6xhfLQfY7xQDrUP0BKbaNrmZ2/+egbqP9q3KYmOiPpnvAfol+32slgL0WX/5n8VPvKCK5EZ1HGrAVICSToA==", + "dev": true, "dependencies": { "bn.js": "^5.2.1", - "web3-utils": "1.8.1" + "ethereum-bloom-filters": "^1.0.6", + "ethereumjs-util": "^7.1.0", + "ethjs-unit": "0.1.6", + "number-to-bn": "1.7.0", + "randombytes": "^2.1.0", + "utf8": "3.0.0" }, "engines": { "node": ">=8.0.0" } }, "node_modules/web3-eth-personal": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/web3-eth-personal/-/web3-eth-personal-1.8.1.tgz", - "integrity": "sha512-myIYMvj7SDIoV9vE5BkVdon3pya1WinaXItugoii2VoTcQNPOtBxmYVH+XS5ErzCJlnxzphpQrkywyY64bbbCA==", + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/web3-eth-personal/-/web3-eth-personal-1.10.0.tgz", + "integrity": "sha512-anseKn98w/d703eWq52uNuZi7GhQeVjTC5/svrBWEKob0WZ5kPdo+EZoFN0sp5a5ubbrk/E0xSl1/M5yORMtpg==", "dependencies": { "@types/node": "^12.12.6", - "web3-core": "1.8.1", - "web3-core-helpers": "1.8.1", - "web3-core-method": "1.8.1", - "web3-net": "1.8.1", - "web3-utils": "1.8.1" + "web3-core": "1.10.0", + "web3-core-helpers": "1.10.0", + "web3-core-method": "1.10.0", + "web3-net": "1.10.0", + "web3-utils": "1.10.0" }, "engines": { "node": ">=8.0.0" @@ -29009,14 +30694,74 @@ "resolved": "https://registry.npmjs.org/@types/node/-/node-12.20.55.tgz", "integrity": "sha512-J8xLz7q2OFulZ2cyGTLE1TbbZcjpno7FaN6zdJNrgAdrJ+DZzh/uFR6YrTb4C+nXakvud8Q4+rbhoIWlYQbUFQ==" }, + "node_modules/web3-eth-personal/node_modules/web3-core-helpers": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/web3-core-helpers/-/web3-core-helpers-1.10.0.tgz", + "integrity": "sha512-pIxAzFDS5vnbXvfvLSpaA1tfRykAe9adw43YCKsEYQwH0gCLL0kMLkaCX3q+Q8EVmAh+e1jWL/nl9U0de1+++g==", + "dependencies": { + "web3-eth-iban": "1.10.0", + "web3-utils": "1.10.0" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/web3-eth-personal/node_modules/web3-eth-iban": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/web3-eth-iban/-/web3-eth-iban-1.10.0.tgz", + "integrity": "sha512-0l+SP3IGhInw7Q20LY3IVafYEuufo4Dn75jAHT7c2aDJsIolvf2Lc6ugHkBajlwUneGfbRQs/ccYPQ9JeMUbrg==", + "dependencies": { + "bn.js": "^5.2.1", + "web3-utils": "1.10.0" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/web3-eth/node_modules/web3-core-helpers": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/web3-core-helpers/-/web3-core-helpers-1.10.0.tgz", + "integrity": "sha512-pIxAzFDS5vnbXvfvLSpaA1tfRykAe9adw43YCKsEYQwH0gCLL0kMLkaCX3q+Q8EVmAh+e1jWL/nl9U0de1+++g==", + "dependencies": { + "web3-eth-iban": "1.10.0", + "web3-utils": "1.10.0" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/web3-eth/node_modules/web3-eth-abi": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/web3-eth-abi/-/web3-eth-abi-1.10.0.tgz", + "integrity": "sha512-cwS+qRBWpJ43aI9L3JS88QYPfFcSJJ3XapxOQ4j40v6mk7ATpA8CVK1vGTzpihNlOfMVRBkR95oAj7oL6aiDOg==", + "dependencies": { + "@ethersproject/abi": "^5.6.3", + "web3-utils": "1.10.0" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/web3-eth/node_modules/web3-eth-iban": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/web3-eth-iban/-/web3-eth-iban-1.10.0.tgz", + "integrity": "sha512-0l+SP3IGhInw7Q20LY3IVafYEuufo4Dn75jAHT7c2aDJsIolvf2Lc6ugHkBajlwUneGfbRQs/ccYPQ9JeMUbrg==", + "dependencies": { + "bn.js": "^5.2.1", + "web3-utils": "1.10.0" + }, + "engines": { + "node": ">=8.0.0" + } + }, "node_modules/web3-net": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/web3-net/-/web3-net-1.8.1.tgz", - "integrity": "sha512-LyEJAwogdFo0UAXZqoSJGFjopdt+kLw0P00FSZn2yszbgcoI7EwC+nXiOsEe12xz4LqpYLOtbR7+gxgiTVjjHQ==", + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/web3-net/-/web3-net-1.10.0.tgz", + "integrity": "sha512-NLH/N3IshYWASpxk4/18Ge6n60GEvWBVeM8inx2dmZJVmRI6SJIlUxbL8jySgiTn3MMZlhbdvrGo8fpUW7a1GA==", "dependencies": { - "web3-core": "1.8.1", - "web3-core-method": "1.8.1", - "web3-utils": "1.8.1" + "web3-core": "1.10.0", + "web3-core-method": "1.10.0", + "web3-utils": "1.10.0" }, "engines": { "node": ">=8.0.0" @@ -29196,38 +30941,86 @@ } }, "node_modules/web3-providers-http": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/web3-providers-http/-/web3-providers-http-1.8.1.tgz", - "integrity": "sha512-1Zyts4O9W/UNEPkp+jyL19Jc3D15S4yp8xuLTjVhcUEAlHo24NDWEKxtZGUuHk4HrKL2gp8OlsDbJ7MM+ESDgg==", + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/web3-providers-http/-/web3-providers-http-1.10.0.tgz", + "integrity": "sha512-eNr965YB8a9mLiNrkjAWNAPXgmQWfpBfkkn7tpEFlghfww0u3I0tktMZiaToJVcL2+Xq+81cxbkpeWJ5XQDwOA==", "dependencies": { "abortcontroller-polyfill": "^1.7.3", "cross-fetch": "^3.1.4", "es6-promise": "^4.2.8", - "web3-core-helpers": "1.8.1" + "web3-core-helpers": "1.10.0" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/web3-providers-http/node_modules/web3-core-helpers": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/web3-core-helpers/-/web3-core-helpers-1.10.0.tgz", + "integrity": "sha512-pIxAzFDS5vnbXvfvLSpaA1tfRykAe9adw43YCKsEYQwH0gCLL0kMLkaCX3q+Q8EVmAh+e1jWL/nl9U0de1+++g==", + "dependencies": { + "web3-eth-iban": "1.10.0", + "web3-utils": "1.10.0" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/web3-providers-http/node_modules/web3-eth-iban": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/web3-eth-iban/-/web3-eth-iban-1.10.0.tgz", + "integrity": "sha512-0l+SP3IGhInw7Q20LY3IVafYEuufo4Dn75jAHT7c2aDJsIolvf2Lc6ugHkBajlwUneGfbRQs/ccYPQ9JeMUbrg==", + "dependencies": { + "bn.js": "^5.2.1", + "web3-utils": "1.10.0" }, "engines": { "node": ">=8.0.0" } }, "node_modules/web3-providers-ipc": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/web3-providers-ipc/-/web3-providers-ipc-1.8.1.tgz", - "integrity": "sha512-nw/W5nclvi+P2z2dYkLWReKLnocStflWqFl+qjtv0xn3MrUTyXMzSF0+61i77+16xFsTgzo4wS/NWIOVkR0EFA==", + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/web3-providers-ipc/-/web3-providers-ipc-1.10.0.tgz", + "integrity": "sha512-OfXG1aWN8L1OUqppshzq8YISkWrYHaATW9H8eh0p89TlWMc1KZOL9vttBuaBEi96D/n0eYDn2trzt22bqHWfXA==", "dependencies": { "oboe": "2.1.5", - "web3-core-helpers": "1.8.1" + "web3-core-helpers": "1.10.0" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/web3-providers-ipc/node_modules/web3-core-helpers": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/web3-core-helpers/-/web3-core-helpers-1.10.0.tgz", + "integrity": "sha512-pIxAzFDS5vnbXvfvLSpaA1tfRykAe9adw43YCKsEYQwH0gCLL0kMLkaCX3q+Q8EVmAh+e1jWL/nl9U0de1+++g==", + "dependencies": { + "web3-eth-iban": "1.10.0", + "web3-utils": "1.10.0" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/web3-providers-ipc/node_modules/web3-eth-iban": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/web3-eth-iban/-/web3-eth-iban-1.10.0.tgz", + "integrity": "sha512-0l+SP3IGhInw7Q20LY3IVafYEuufo4Dn75jAHT7c2aDJsIolvf2Lc6ugHkBajlwUneGfbRQs/ccYPQ9JeMUbrg==", + "dependencies": { + "bn.js": "^5.2.1", + "web3-utils": "1.10.0" }, "engines": { "node": ">=8.0.0" } }, "node_modules/web3-providers-ws": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/web3-providers-ws/-/web3-providers-ws-1.8.1.tgz", - "integrity": "sha512-TNefIDAMpdx57+YdWpYZ/xdofS0P+FfKaDYXhn24ie/tH9G+AB+UBSOKnjN0KSadcRSCMBwGPRiEmNHPavZdsA==", + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/web3-providers-ws/-/web3-providers-ws-1.10.0.tgz", + "integrity": "sha512-sK0fNcglW36yD5xjnjtSGBnEtf59cbw4vZzJ+CmOWIKGIR96mP5l684g0WD0Eo+f4NQc2anWWXG74lRc9OVMCQ==", "dependencies": { "eventemitter3": "4.0.4", - "web3-core-helpers": "1.8.1", + "web3-core-helpers": "1.10.0", "websocket": "^1.0.32" }, "engines": { @@ -29239,25 +31032,49 @@ "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.4.tgz", "integrity": "sha512-rlaVLnVxtxvoyLsQQFBx53YmXHDxRIzzTLbdfxqi4yocpSjAxXwkU0cScM5JgSKMqEhrZpnvQ2D9gjylR0AimQ==" }, + "node_modules/web3-providers-ws/node_modules/web3-core-helpers": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/web3-core-helpers/-/web3-core-helpers-1.10.0.tgz", + "integrity": "sha512-pIxAzFDS5vnbXvfvLSpaA1tfRykAe9adw43YCKsEYQwH0gCLL0kMLkaCX3q+Q8EVmAh+e1jWL/nl9U0de1+++g==", + "dependencies": { + "web3-eth-iban": "1.10.0", + "web3-utils": "1.10.0" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/web3-providers-ws/node_modules/web3-eth-iban": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/web3-eth-iban/-/web3-eth-iban-1.10.0.tgz", + "integrity": "sha512-0l+SP3IGhInw7Q20LY3IVafYEuufo4Dn75jAHT7c2aDJsIolvf2Lc6ugHkBajlwUneGfbRQs/ccYPQ9JeMUbrg==", + "dependencies": { + "bn.js": "^5.2.1", + "web3-utils": "1.10.0" + }, + "engines": { + "node": ">=8.0.0" + } + }, "node_modules/web3-shh": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/web3-shh/-/web3-shh-1.8.1.tgz", - "integrity": "sha512-sqHgarnfcY2Qt3PYS4R6YveHrDy7hmL09yeLLHHCI+RKirmjLVqV0rc5LJWUtlbYI+kDoa5gbgde489M9ZAC0g==", + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/web3-shh/-/web3-shh-1.10.0.tgz", + "integrity": "sha512-uNUUuNsO2AjX41GJARV9zJibs11eq6HtOe6Wr0FtRUcj8SN6nHeYIzwstAvJ4fXA53gRqFMTxdntHEt9aXVjpg==", "hasInstallScript": true, "dependencies": { - "web3-core": "1.8.1", - "web3-core-method": "1.8.1", - "web3-core-subscriptions": "1.8.1", - "web3-net": "1.8.1" + "web3-core": "1.10.0", + "web3-core-method": "1.10.0", + "web3-core-subscriptions": "1.10.0", + "web3-net": "1.10.0" }, "engines": { "node": ">=8.0.0" } }, "node_modules/web3-utils": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/web3-utils/-/web3-utils-1.8.1.tgz", - "integrity": "sha512-LgnM9p6V7rHHUGfpMZod+NST8cRfGzJ1BTXAyNo7A9cJX9LczBfSRxJp+U/GInYe9mby40t3v22AJdlELibnsQ==", + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/web3-utils/-/web3-utils-1.10.0.tgz", + "integrity": "sha512-kSaCM0uMcZTNUSmn5vMEhlo02RObGNRRCkdX0V9UTAU0+lrvn0HSaudyCo6CQzuXUsnuY2ERJGCGPfeWmv19Rg==", "dependencies": { "bn.js": "^5.2.1", "ethereum-bloom-filters": "^1.0.6", @@ -29357,8 +31174,7 @@ "node_modules/which-module": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/which-module/-/which-module-1.0.0.tgz", - "integrity": "sha512-F6+WgncZi/mJDrammbTuHe1q0R5hOXv/mBaiNA2TCNT/LTHusX0V+CJnj9XT8ki5ln2UZyyddDgHfCzyrOH7MQ==", - "dev": true + "integrity": "sha512-F6+WgncZi/mJDrammbTuHe1q0R5hOXv/mBaiNA2TCNT/LTHusX0V+CJnj9XT8ki5ln2UZyyddDgHfCzyrOH7MQ==" }, "node_modules/which-pm-runs": { "version": "1.1.0", @@ -29401,7 +31217,6 @@ "version": "0.2.0", "resolved": "https://registry.npmjs.org/window-size/-/window-size-0.2.0.tgz", "integrity": "sha512-UD7d8HFA2+PZsbKyaOCEy8gMh1oDtHgJh1LfgjQ4zVXmYjAT/kvz3PueITKuqDiIXQe7yzpPnxX3lNc+AhQMyw==", - "dev": true, "bin": { "window-size": "cli.js" }, @@ -29409,6 +31224,28 @@ "node": ">= 0.10.0" } }, + "node_modules/wordwrapjs": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/wordwrapjs/-/wordwrapjs-4.0.1.tgz", + "integrity": "sha512-kKlNACbvHrkpIw6oPeYDSmdCTu2hdMHoyXLTcUKala++lx5Y+wjJ/e474Jqv5abnVmwxw08DiTuHmw69lJGksA==", + "dev": true, + "dependencies": { + "reduce-flatten": "^2.0.0", + "typical": "^5.2.0" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/wordwrapjs/node_modules/typical": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/typical/-/typical-5.2.0.tgz", + "integrity": "sha512-dvdQgNDNJo+8B2uBQoqdb11eUCE1JQXhvjC/CZtgvZseVd5TYMXnq0+vuUemXbd/Se29cTaUuPX3YIc2xgbvIg==", + "dev": true, + "engines": { + "node": ">=8" + } + }, "node_modules/workerpool": { "version": "6.2.1", "resolved": "https://registry.npmjs.org/workerpool/-/workerpool-6.2.1.tgz", @@ -29470,15 +31307,15 @@ "optional": true }, "node_modules/ws": { - "version": "8.11.0", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.11.0.tgz", - "integrity": "sha512-HPG3wQd9sNQoT9xHyNCXoDUa+Xw/VevmY9FoHyQ+g+rrMn4j6FB4np7Z0OhdTgjx6MgQLK7jwSy1YecU1+4Asg==", + "version": "8.13.0", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.13.0.tgz", + "integrity": "sha512-x9vcZYTrFPC7aSIbj7sRCYo7L/Xb8Iy+pW0ng0wt2vCJv7M9HOMy0UoN3rr+IFC7hb7vXoqS+P9ktyLLLhO+LA==", "engines": { "node": ">=10.0.0" }, "peerDependencies": { "bufferutil": "^4.0.1", - "utf-8-validate": "^5.0.2" + "utf-8-validate": ">=5.0.2" }, "peerDependenciesMeta": { "bufferutil": { @@ -29675,7 +31512,8 @@ "version": "3.1.1", "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz", "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==", - "devOptional": true, + "optional": true, + "peer": true, "engines": { "node": ">=6" } @@ -29695,7 +31533,6 @@ "version": "0.14.3", "resolved": "https://registry.npmjs.org/zksync-web3/-/zksync-web3-0.14.3.tgz", "integrity": "sha512-hT72th4AnqyLW1d5Jlv8N2B/qhEnl2NePK2A3org7tAa24niem/UAaHMkEvmWI3SF9waYUPtqAtjpf+yvQ9zvQ==", - "dev": true, "peerDependencies": { "ethers": "^5.7.0" } @@ -29733,9 +31570,9 @@ } }, "@apollo/usage-reporting-protobuf": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/@apollo/usage-reporting-protobuf/-/usage-reporting-protobuf-4.0.2.tgz", - "integrity": "sha512-GfE8aDqi/lAFut95pjH9IRvH0zGsQ5G/2lYL0ZLZfML7ArX+A4UVHFANQcPCcUYGE6bI6OPhLekg4Vsjf6B1cw==", + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/@apollo/usage-reporting-protobuf/-/usage-reporting-protobuf-4.1.0.tgz", + "integrity": "sha512-hXouMuw5pQVkzi8dgMybmr6Y11+eRmMQVoB5TF0HyTwAg9SOq/v3OCuiYqcVUKdBcskU9Msp+XvjAk0GKpWCwQ==", "optional": true, "requires": { "@apollo/protobufjs": "1.2.7" @@ -29832,6 +31669,62 @@ "xss": "^1.0.8" } }, + "@aws-crypto/sha256-js": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/@aws-crypto/sha256-js/-/sha256-js-1.2.2.tgz", + "integrity": "sha512-Nr1QJIbW/afYYGzYvrF70LtaHrIRtd4TNAglX8BvlfxJLZ45SAmueIKYl5tWoNBPzp65ymXGFK0Bb1vZUpuc9g==", + "dev": true, + "requires": { + "@aws-crypto/util": "^1.2.2", + "@aws-sdk/types": "^3.1.0", + "tslib": "^1.11.1" + }, + "dependencies": { + "tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "dev": true + } + } + }, + "@aws-crypto/util": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/@aws-crypto/util/-/util-1.2.2.tgz", + "integrity": "sha512-H8PjG5WJ4wz0UXAFXeJjWCW1vkvIJ3qUUD+rGRwJ2/hj+xT58Qle2MTql/2MGzkU+1JLAFuR6aJpLAjHwhmwwg==", + "dev": true, + "requires": { + "@aws-sdk/types": "^3.1.0", + "@aws-sdk/util-utf8-browser": "^3.0.0", + "tslib": "^1.11.1" + }, + "dependencies": { + "tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "dev": true + } + } + }, + "@aws-sdk/types": { + "version": "3.329.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.329.0.tgz", + "integrity": "sha512-wFBW4yciDfzQBSFmWNaEvHShnSGLMxSu9Lls6EUf6xDMavxSB36bsrVRX6CyAo/W0NeIIyEOW1LclGPgJV1okg==", + "dev": true, + "requires": { + "tslib": "^2.5.0" + } + }, + "@aws-sdk/util-utf8-browser": { + "version": "3.259.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-utf8-browser/-/util-utf8-browser-3.259.0.tgz", + "integrity": "sha512-UvFa/vR+e19XookZF8RzFZBrw2EUkQWxiBW0yYQAhvk3C+QVGl0H3ouca8LDBlBfQKXwmW3huo/59H8rwb1wJw==", + "dev": true, + "requires": { + "tslib": "^2.3.1" + } + }, "@babel/code-frame": { "version": "7.18.6", "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.18.6.tgz", @@ -30133,9 +32026,9 @@ } }, "@babel/runtime": { - "version": "7.20.7", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.20.7.tgz", - "integrity": "sha512-UF0tvkUtxwAgZ5W/KrkHf0Rn0fdnLDU9ScxBrEVNUprE/MzirjK4MJUX1/BVDv00Sv8cljtukVK1aky++X1SjQ==", + "version": "7.21.5", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.21.5.tgz", + "integrity": "sha512-8jI69toZqqcsnqGGqwGS4Qb1VwLOEp4hz+CXPywcvjs60u3B4Pom/U/7rm4W8tMOYEB+E9wgD0mW1l3r8qlI9Q==", "requires": { "regenerator-runtime": "^0.13.11" } @@ -30182,17 +32075,47 @@ "@balena/dockerignore": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/@balena/dockerignore/-/dockerignore-1.0.2.tgz", - "integrity": "sha512-wMue2Sy4GAVTk6Ic4tJVcnfdau+gx2EnG7S+uAEe+TWJFqE4YoWN4/H8MSLj4eYJKxGg26lZwboEniNiNwZQ6Q==", - "dev": true + "integrity": "sha512-wMue2Sy4GAVTk6Ic4tJVcnfdau+gx2EnG7S+uAEe+TWJFqE4YoWN4/H8MSLj4eYJKxGg26lZwboEniNiNwZQ6Q==" }, "@chainlink/contracts": { - "version": "0.5.1", - "resolved": "https://registry.npmjs.org/@chainlink/contracts/-/contracts-0.5.1.tgz", - "integrity": "sha512-3PDBJ38Sd6Ml9h7FNK/tZQti+kTCdXUq1qzE6E59CnlzycsV9ElPvf2hTvs9Mi9C6pEx2Mmw9yhZMfBktYUInQ==", + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/@chainlink/contracts/-/contracts-0.6.1.tgz", + "integrity": "sha512-EuwijGexttw0UjfrW+HygwhQIrGAbqpf1ue28R55HhWMHBzphEH0PhWm8DQmFfj5OZNy8Io66N4L0nStkZ3QKQ==", "requires": { "@eth-optimism/contracts": "^0.5.21", - "@openzeppelin/contracts": "^4.3.3", + "@openzeppelin/contracts": "~4.3.3", + "@openzeppelin/contracts-upgradeable": "^4.7.3", "@openzeppelin/contracts-v0.7": "npm:@openzeppelin/contracts@v3.4.2" + }, + "dependencies": { + "@openzeppelin/contracts": { + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/@openzeppelin/contracts/-/contracts-4.3.3.tgz", + "integrity": "sha512-tDBopO1c98Yk7Cv/PZlHqrvtVjlgK5R4J6jxLwoO7qxK4xqOiZG+zSkIvGFpPZ0ikc3QOED3plgdqjgNTnBc7g==" + } + } + }, + "@chainsafe/as-sha256": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/@chainsafe/as-sha256/-/as-sha256-0.3.1.tgz", + "integrity": "sha512-hldFFYuf49ed7DAakWVXSJODuq3pzJEguD8tQ7h+sGkM18vja+OFoJI9krnGmgzyuZC2ETX0NOIcCTy31v2Mtg==" + }, + "@chainsafe/persistent-merkle-tree": { + "version": "0.4.2", + "resolved": "https://registry.npmjs.org/@chainsafe/persistent-merkle-tree/-/persistent-merkle-tree-0.4.2.tgz", + "integrity": "sha512-lLO3ihKPngXLTus/L7WHKaw9PnNJWizlOF1H9NNzHP6Xvh82vzg9F2bzkXhYIFshMZ2gTCEz8tq6STe7r5NDfQ==", + "requires": { + "@chainsafe/as-sha256": "^0.3.1" + } + }, + "@chainsafe/ssz": { + "version": "0.9.4", + "resolved": "https://registry.npmjs.org/@chainsafe/ssz/-/ssz-0.9.4.tgz", + "integrity": "sha512-77Qtg2N1ayqs4Bg/wvnWfg5Bta7iy7IRh8XqXh7oNMeP2HBbBwx8m6yTpA8p0EHItWPEBkgZd5S5/LSlp3GXuQ==", + "requires": { + "@chainsafe/as-sha256": "^0.3.1", + "@chainsafe/persistent-merkle-tree": "^0.4.2", + "case": "^1.6.3" } }, "@colors/colors": { @@ -30201,32 +32124,10 @@ "integrity": "sha512-ooWCrlZP11i8GImSjTHYHLkvFDP48nS4+204nGb1RiX/WXYHmJA2III9/e2DWVabCESdW7hBAEzHRqUn9OUVvQ==", "optional": true }, - "@cspotcode/source-map-support": { - "version": "0.8.1", - "resolved": "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz", - "integrity": "sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==", - "devOptional": true, - "requires": { - "@jridgewell/trace-mapping": "0.3.9" - }, - "dependencies": { - "@jridgewell/trace-mapping": { - "version": "0.3.9", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz", - "integrity": "sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==", - "devOptional": true, - "requires": { - "@jridgewell/resolve-uri": "^3.0.3", - "@jridgewell/sourcemap-codec": "^1.4.10" - } - } - } - }, "@ensdomains/address-encoder": { "version": "0.1.9", "resolved": "https://registry.npmjs.org/@ensdomains/address-encoder/-/address-encoder-0.1.9.tgz", "integrity": "sha512-E2d2gP4uxJQnDu2Kfg1tHNspefzbLT8Tyjrm5sEuim32UkU2sm5xL4VXtgc2X33fmPEw9+jUMpGs4veMbf+PYg==", - "dev": true, "requires": { "bech32": "^1.1.3", "blakejs": "^1.1.0", @@ -30240,8 +32141,7 @@ "bn.js": { "version": "4.12.0", "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", - "dev": true + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==" } } }, @@ -30249,7 +32149,6 @@ "version": "0.4.5", "resolved": "https://registry.npmjs.org/@ensdomains/ens/-/ens-0.4.5.tgz", "integrity": "sha512-JSvpj1iNMFjK6K+uVl4unqMoa9rf5jopb8cya5UGBWz23Nw8hSNT7efgUx4BTlAPAgpNlEioUfeTyQ6J9ZvTVw==", - "dev": true, "requires": { "bluebird": "^3.5.2", "eth-ens-namehash": "^2.0.8", @@ -30261,20 +32160,17 @@ "ansi-regex": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA==", - "dev": true + "integrity": "sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA==" }, "camelcase": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-3.0.0.tgz", - "integrity": "sha512-4nhGqUkc4BqbBBB4Q6zLuD7lzzrHYrjKGeYaEji/3tFR5VdJu9v+LilhGIVe8wxEJPPOeWo7eg8dwY13TZ1BNg==", - "dev": true + "integrity": "sha512-4nhGqUkc4BqbBBB4Q6zLuD7lzzrHYrjKGeYaEji/3tFR5VdJu9v+LilhGIVe8wxEJPPOeWo7eg8dwY13TZ1BNg==" }, "cliui": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/cliui/-/cliui-3.2.0.tgz", "integrity": "sha512-0yayqDxWQbqk3ojkYqUKqaAQ6AfNKeKWRNA8kR0WXzAsdHpP4BIaOmMAG87JGuO6qcobyW4GjxHd9PmhEd+T9w==", - "dev": true, "requires": { "string-width": "^1.0.1", "strip-ansi": "^3.0.1", @@ -30284,14 +32180,12 @@ "decamelize": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", - "integrity": "sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==", - "dev": true + "integrity": "sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==" }, "fs-extra": { "version": "0.30.0", "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-0.30.0.tgz", "integrity": "sha512-UvSPKyhMn6LEd/WpUaV9C9t3zATuqoqfWc3QdPhPLb58prN9tqYPlPWi8Krxi44loBoUzlobqZ3+8tGpxxSzwA==", - "dev": true, "requires": { "graceful-fs": "^4.1.2", "jsonfile": "^2.1.0", @@ -30303,14 +32197,12 @@ "get-caller-file": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-1.0.3.tgz", - "integrity": "sha512-3t6rVToeoZfYSGd8YoLFR2DJkiQrIiUrGcjvFX2mDw3bn6k2OtwHN0TNCLbBO+w8qTvimhDkv+LSscbJY1vE6w==", - "dev": true + "integrity": "sha512-3t6rVToeoZfYSGd8YoLFR2DJkiQrIiUrGcjvFX2mDw3bn6k2OtwHN0TNCLbBO+w8qTvimhDkv+LSscbJY1vE6w==" }, "is-fullwidth-code-point": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", "integrity": "sha512-1pqUqRjkhPJ9miNq9SwMfdvi6lBJcd6eFxvfaivQhaH3SgisfiuudvFntdKOmxuee/77l+FPjKrQjWvmPjWrRw==", - "dev": true, "requires": { "number-is-nan": "^1.0.0" } @@ -30319,7 +32211,6 @@ "version": "2.4.0", "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-2.4.0.tgz", "integrity": "sha512-PKllAqbgLgxHaj8TElYymKCAgrASebJrWpTnEkOaTowt23VKXXN0sUeriJ+eh7y6ufb/CC5ap11pz71/cM0hUw==", - "dev": true, "requires": { "graceful-fs": "^4.1.6" } @@ -30327,20 +32218,17 @@ "require-from-string": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-1.2.1.tgz", - "integrity": "sha512-H7AkJWMobeskkttHyhTVtS0fxpFLjxhbfMa6Bk3wimP7sdPRGL3EyCg3sAQenFfAe+xQ+oAc85Nmtvq0ROM83Q==", - "dev": true + "integrity": "sha512-H7AkJWMobeskkttHyhTVtS0fxpFLjxhbfMa6Bk3wimP7sdPRGL3EyCg3sAQenFfAe+xQ+oAc85Nmtvq0ROM83Q==" }, "semver": { "version": "5.7.1", "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "dev": true + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" }, "solc": { "version": "0.4.26", "resolved": "https://registry.npmjs.org/solc/-/solc-0.4.26.tgz", "integrity": "sha512-o+c6FpkiHd+HPjmjEVpQgH7fqZ14tJpXhho+/bQXlXbliLIS/xjXb42Vxh+qQY1WCSTMQ0+a5vR9vi0MfhU6mA==", - "dev": true, "requires": { "fs-extra": "^0.30.0", "memorystream": "^0.3.1", @@ -30353,7 +32241,6 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", "integrity": "sha512-0XsVpQLnVCXHJfyEs8tC0zpTVIr5PKKsQtkT29IwupnPTjtPmQ3xT/4yCREF9hYkV/3M3kzcUTSAZT6a6h81tw==", - "dev": true, "requires": { "code-point-at": "^1.0.0", "is-fullwidth-code-point": "^1.0.0", @@ -30364,7 +32251,6 @@ "version": "3.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", "integrity": "sha512-VhumSSbBqDTP8p2ZLKj40UjBCV4+v8bUSEpUb4KjRgWk9pbqGF4REFj6KEagidb2f/M6AzC0EmFyDNGaw9OCzg==", - "dev": true, "requires": { "ansi-regex": "^2.0.0" } @@ -30373,7 +32259,6 @@ "version": "2.1.0", "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-2.1.0.tgz", "integrity": "sha512-vAaEaDM946gbNpH5pLVNR+vX2ht6n0Bt3GXwVB1AuAqZosOvHNF3P7wDnh8KLkSqgUh0uh77le7Owgoz+Z9XBw==", - "dev": true, "requires": { "string-width": "^1.0.1", "strip-ansi": "^3.0.1" @@ -30382,14 +32267,12 @@ "y18n": { "version": "3.2.2", "resolved": "https://registry.npmjs.org/y18n/-/y18n-3.2.2.tgz", - "integrity": "sha512-uGZHXkHnhF0XeeAPgnKfPv1bgKAYyVvmNL1xlKsPYZPaIHxGti2hHqvOCQv71XMsLxu1QjergkqogUnms5D3YQ==", - "dev": true + "integrity": "sha512-uGZHXkHnhF0XeeAPgnKfPv1bgKAYyVvmNL1xlKsPYZPaIHxGti2hHqvOCQv71XMsLxu1QjergkqogUnms5D3YQ==" }, "yargs": { "version": "4.8.1", "resolved": "https://registry.npmjs.org/yargs/-/yargs-4.8.1.tgz", "integrity": "sha512-LqodLrnIDM3IFT+Hf/5sxBnEGECrfdC1uIbgZeJmESCSo4HoCAaKEus8MylXHAkdacGc0ye+Qa+dpkuom8uVYA==", - "dev": true, "requires": { "cliui": "^3.2.0", "decamelize": "^1.1.1", @@ -30411,7 +32294,6 @@ "version": "2.4.1", "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-2.4.1.tgz", "integrity": "sha512-9pIKIJhnI5tonzG6OnCFlz/yln8xHYcGl+pn3xR0Vzff0vzN1PbNRaelgfgRUwZ3s4i3jvxT9WhmUGL4whnasA==", - "dev": true, "requires": { "camelcase": "^3.0.0", "lodash.assign": "^4.0.6" @@ -30423,7 +32305,6 @@ "version": "2.1.0", "resolved": "https://registry.npmjs.org/@ensdomains/ensjs/-/ensjs-2.1.0.tgz", "integrity": "sha512-GRbGPT8Z/OJMDuxs75U/jUNEC0tbL0aj7/L/QQznGYKm/tiasp+ndLOaoULy9kKJFC0TBByqfFliEHDgoLhyog==", - "dev": true, "requires": { "@babel/runtime": "^7.4.4", "@ensdomains/address-encoder": "^0.1.7", @@ -30438,8 +32319,7 @@ "@ensdomains/resolver": { "version": "0.2.4", "resolved": "https://registry.npmjs.org/@ensdomains/resolver/-/resolver-0.2.4.tgz", - "integrity": "sha512-bvaTH34PMCbv6anRa9I/0zjLJgY4EuznbEMgbV77JBCQ9KNC46rzi0avuxpOfu+xDjPEtSFGqVEOr5GlUSGudA==", - "dev": true + "integrity": "sha512-bvaTH34PMCbv6anRa9I/0zjLJgY4EuznbEMgbV77JBCQ9KNC46rzi0avuxpOfu+xDjPEtSFGqVEOr5GlUSGudA==" }, "@eth-optimism/contracts": { "version": "0.5.37", @@ -30475,118 +32355,413 @@ } }, "@ethereum-waffle/chai": { - "version": "3.4.4", - "resolved": "https://registry.npmjs.org/@ethereum-waffle/chai/-/chai-3.4.4.tgz", - "integrity": "sha512-/K8czydBtXXkcM9X6q29EqEkc5dN3oYenyH2a9hF7rGAApAJUpH8QBtojxOY/xQ2up5W332jqgxwp0yPiYug1g==", + "version": "4.0.10", + "resolved": "https://registry.npmjs.org/@ethereum-waffle/chai/-/chai-4.0.10.tgz", + "integrity": "sha512-X5RepE7Dn8KQLFO7HHAAe+KeGaX/by14hn90wePGBhzL54tq4Y8JscZFu+/LCwCl6TnkAAy5ebiMoqJ37sFtWw==", "dev": true, "requires": { - "@ethereum-waffle/provider": "^3.4.4", - "ethers": "^5.5.2" + "@ethereum-waffle/provider": "4.0.5", + "debug": "^4.3.4", + "json-bigint": "^1.0.0" } }, "@ethereum-waffle/compiler": { - "version": "3.4.4", - "resolved": "https://registry.npmjs.org/@ethereum-waffle/compiler/-/compiler-3.4.4.tgz", - "integrity": "sha512-RUK3axJ8IkD5xpWjWoJgyHclOeEzDLQFga6gKpeGxiS/zBu+HB0W2FvsrrLalTFIaPw/CGYACRBSIxqiCqwqTQ==", + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/@ethereum-waffle/compiler/-/compiler-4.0.3.tgz", + "integrity": "sha512-5x5U52tSvEVJS6dpCeXXKvRKyf8GICDwiTwUvGD3/WD+DpvgvaoHOL82XqpTSUHgV3bBq6ma5/8gKUJUIAnJCw==", "dev": true, "requires": { "@resolver-engine/imports": "^0.3.3", "@resolver-engine/imports-fs": "^0.3.3", - "@typechain/ethers-v5": "^2.0.0", + "@typechain/ethers-v5": "^10.0.0", "@types/mkdirp": "^0.5.2", - "@types/node-fetch": "^2.5.5", - "ethers": "^5.0.1", + "@types/node-fetch": "^2.6.1", "mkdirp": "^0.5.1", - "node-fetch": "^2.6.1", - "solc": "^0.6.3", - "ts-generator": "^0.1.1", - "typechain": "^3.0.0" - }, - "dependencies": { - "commander": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/commander/-/commander-3.0.2.tgz", - "integrity": "sha512-Gar0ASD4BDyKC4hl4DwHqDrmvjoxWKZigVnAbn5H1owvm4CxCPdb0HQDehwNYMJpla5+M2tPmPARzhtYuwpHow==", - "dev": true - }, - "fs-extra": { - "version": "0.30.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-0.30.0.tgz", - "integrity": "sha512-UvSPKyhMn6LEd/WpUaV9C9t3zATuqoqfWc3QdPhPLb58prN9tqYPlPWi8Krxi44loBoUzlobqZ3+8tGpxxSzwA==", - "dev": true, - "requires": { - "graceful-fs": "^4.1.2", - "jsonfile": "^2.1.0", - "klaw": "^1.0.0", - "path-is-absolute": "^1.0.0", - "rimraf": "^2.2.8" - } - }, - "jsonfile": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-2.4.0.tgz", - "integrity": "sha512-PKllAqbgLgxHaj8TElYymKCAgrASebJrWpTnEkOaTowt23VKXXN0sUeriJ+eh7y6ufb/CC5ap11pz71/cM0hUw==", - "dev": true, - "requires": { - "graceful-fs": "^4.1.6" - } - }, - "semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "dev": true - }, - "solc": { - "version": "0.6.12", - "resolved": "https://registry.npmjs.org/solc/-/solc-0.6.12.tgz", - "integrity": "sha512-Lm0Ql2G9Qc7yPP2Ba+WNmzw2jwsrd3u4PobHYlSOxaut3TtUbj9+5ZrT6f4DUpNPEoBaFUOEg9Op9C0mk7ge9g==", - "dev": true, - "requires": { - "command-exists": "^1.2.8", - "commander": "3.0.2", - "fs-extra": "^0.30.0", - "js-sha3": "0.8.0", - "memorystream": "^0.3.1", - "require-from-string": "^2.0.0", - "semver": "^5.5.0", - "tmp": "0.0.33" - } - } + "node-fetch": "^2.6.7" } }, "@ethereum-waffle/ens": { - "version": "3.4.4", - "resolved": "https://registry.npmjs.org/@ethereum-waffle/ens/-/ens-3.4.4.tgz", - "integrity": "sha512-0m4NdwWxliy3heBYva1Wr4WbJKLnwXizmy5FfSSr5PMbjI7SIGCdCB59U7/ZzY773/hY3bLnzLwvG5mggVjJWg==", + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/@ethereum-waffle/ens/-/ens-4.0.3.tgz", + "integrity": "sha512-PVLcdnTbaTfCrfSOrvtlA9Fih73EeDvFS28JQnT5M5P4JMplqmchhcZB1yg/fCtx4cvgHlZXa0+rOCAk2Jk0Jw==", "dev": true, - "requires": { - "@ensdomains/ens": "^0.4.4", - "@ensdomains/resolver": "^0.2.4", - "ethers": "^5.5.2" - } + "requires": {} }, "@ethereum-waffle/mock-contract": { - "version": "3.4.4", - "resolved": "https://registry.npmjs.org/@ethereum-waffle/mock-contract/-/mock-contract-3.4.4.tgz", - "integrity": "sha512-Mp0iB2YNWYGUV+VMl5tjPsaXKbKo8MDH9wSJ702l9EBjdxFf/vBvnMBAC1Fub1lLtmD0JHtp1pq+mWzg/xlLnA==", + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/@ethereum-waffle/mock-contract/-/mock-contract-4.0.4.tgz", + "integrity": "sha512-LwEj5SIuEe9/gnrXgtqIkWbk2g15imM/qcJcxpLyAkOj981tQxXmtV4XmQMZsdedEsZ/D/rbUAOtZbgwqgUwQA==", "dev": true, - "requires": { - "@ethersproject/abi": "^5.5.0", - "ethers": "^5.5.2" - } + "requires": {} }, "@ethereum-waffle/provider": { - "version": "3.4.4", - "resolved": "https://registry.npmjs.org/@ethereum-waffle/provider/-/provider-3.4.4.tgz", - "integrity": "sha512-GK8oKJAM8+PKy2nK08yDgl4A80mFuI8zBkE0C9GqTRYQqvuxIyXoLmJ5NZU9lIwyWVv5/KsoA11BgAv2jXE82g==", + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/@ethereum-waffle/provider/-/provider-4.0.5.tgz", + "integrity": "sha512-40uzfyzcrPh+Gbdzv89JJTMBlZwzya1YLDyim8mVbEqYLP5VRYWoGp0JMyaizgV3hMoUFRqJKVmIUw4v7r3hYw==", "dev": true, "requires": { - "@ethereum-waffle/ens": "^3.4.4", - "ethers": "^5.5.2", - "ganache-core": "^2.13.2", - "patch-package": "^6.2.2", - "postinstall-postinstall": "^2.1.0" + "@ethereum-waffle/ens": "4.0.3", + "@ganache/ethereum-options": "0.1.4", + "debug": "^4.3.4", + "ganache": "7.4.3" + }, + "dependencies": { + "ganache": { + "version": "7.4.3", + "resolved": "https://registry.npmjs.org/ganache/-/ganache-7.4.3.tgz", + "integrity": "sha512-RpEDUiCkqbouyE7+NMXG26ynZ+7sGiODU84Kz+FVoXUnQ4qQM4M8wif3Y4qUCt+D/eM1RVeGq0my62FPD6Y1KA==", + "dev": true, + "requires": { + "@trufflesuite/bigint-buffer": "1.1.10", + "@types/bn.js": "^5.1.0", + "@types/lru-cache": "5.1.1", + "@types/seedrandom": "3.0.1", + "bufferutil": "4.0.5", + "emittery": "0.10.0", + "keccak": "3.0.2", + "leveldown": "6.1.0", + "secp256k1": "4.0.3", + "utf-8-validate": "5.0.7" + }, + "dependencies": { + "@trufflesuite/bigint-buffer": { + "version": "1.1.10", + "resolved": "https://registry.npmjs.org/@trufflesuite/bigint-buffer/-/bigint-buffer-1.1.10.tgz", + "integrity": "sha512-pYIQC5EcMmID74t26GCC67946mgTJFiLXOT/BYozgrd4UEY2JHEGLhWi9cMiQCt5BSqFEvKkCHNnoj82SRjiEw==", + "bundled": true, + "dev": true, + "requires": { + "node-gyp-build": "4.4.0" + }, + "dependencies": { + "node-gyp-build": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.4.0.tgz", + "integrity": "sha512-amJnQCcgtRVw9SvoebO3BKGESClrfXGCUTX9hSn1OuGQTQBOZmVd0Z0OlecpuRksKvbsUqALE8jls/ErClAPuQ==", + "bundled": true, + "dev": true + } + } + }, + "@types/bn.js": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/@types/bn.js/-/bn.js-5.1.0.tgz", + "integrity": "sha512-QSSVYj7pYFN49kW77o2s9xTCwZ8F2xLbjLLSEVh8D2F4JUhZtPAGOFLTD+ffqksBx/u4cE/KImFjyhqCjn/LIA==", + "bundled": true, + "dev": true, + "requires": { + "@types/node": "*" + } + }, + "@types/lru-cache": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/@types/lru-cache/-/lru-cache-5.1.1.tgz", + "integrity": "sha512-ssE3Vlrys7sdIzs5LOxCzTVMsU7i9oa/IaW92wF32JFb3CVczqOkru2xspuKczHEbG3nvmPY7IFqVmGGHdNbYw==", + "bundled": true, + "dev": true + }, + "@types/node": { + "version": "17.0.0", + "resolved": "https://registry.npmjs.org/@types/node/-/node-17.0.0.tgz", + "integrity": "sha512-eMhwJXc931Ihh4tkU+Y7GiLzT/y/DBNpNtr4yU9O2w3SYBsr9NaOPhQlLKRmoWtI54uNwuo0IOUFQjVOTZYRvw==", + "bundled": true, + "dev": true + }, + "@types/seedrandom": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@types/seedrandom/-/seedrandom-3.0.1.tgz", + "integrity": "sha512-giB9gzDeiCeloIXDgzFBCgjj1k4WxcDrZtGl6h1IqmUPlxF+Nx8Ve+96QCyDZ/HseB/uvDsKbpib9hU5cU53pw==", + "bundled": true, + "dev": true + }, + "base64-js": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", + "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", + "bundled": true, + "dev": true + }, + "brorand": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz", + "integrity": "sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8=", + "bundled": true, + "dev": true + }, + "buffer": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz", + "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==", + "bundled": true, + "dev": true, + "requires": { + "base64-js": "^1.3.1", + "ieee754": "^1.2.1" + } + }, + "bufferutil": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/bufferutil/-/bufferutil-4.0.5.tgz", + "integrity": "sha512-HTm14iMQKK2FjFLRTM5lAVcyaUzOnqbPtesFIvREgXpJHdQm8bWS+GkQgIkfaBYRHuCnea7w8UVNfwiAQhlr9A==", + "dev": true, + "optional": true, + "requires": { + "node-gyp-build": "^4.3.0" + } + }, + "catering": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/catering/-/catering-2.1.0.tgz", + "integrity": "sha512-M5imwzQn6y+ODBfgi+cfgZv2hIUI6oYU/0f35Mdb1ujGeqeoI5tOnl9Q13DTH7LW+7er+NYq8stNOKZD/Z3U/A==", + "bundled": true, + "dev": true, + "requires": { + "queue-tick": "^1.0.0" + } + }, + "elliptic": { + "version": "6.5.4", + "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.4.tgz", + "integrity": "sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ==", + "bundled": true, + "dev": true, + "requires": { + "bn.js": "^4.11.9", + "brorand": "^1.1.0", + "hash.js": "^1.0.0", + "hmac-drbg": "^1.0.1", + "inherits": "^2.0.4", + "minimalistic-assert": "^1.0.1", + "minimalistic-crypto-utils": "^1.0.1" + }, + "dependencies": { + "bn.js": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", + "bundled": true, + "dev": true + } + } + }, + "emittery": { + "version": "0.10.0", + "resolved": "https://registry.npmjs.org/emittery/-/emittery-0.10.0.tgz", + "integrity": "sha512-AGvFfs+d0JKCJQ4o01ASQLGPmSCxgfU9RFXvzPvZdjKK8oscynksuJhWrSTSw7j7Ep/sZct5b5ZhYCi8S/t0HQ==", + "bundled": true, + "dev": true + }, + "hash.js": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.7.tgz", + "integrity": "sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==", + "bundled": true, + "dev": true, + "requires": { + "inherits": "^2.0.3", + "minimalistic-assert": "^1.0.1" + } + }, + "hmac-drbg": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz", + "integrity": "sha1-0nRXAQJabHdabFRXk+1QL8DGSaE=", + "bundled": true, + "dev": true, + "requires": { + "hash.js": "^1.0.3", + "minimalistic-assert": "^1.0.0", + "minimalistic-crypto-utils": "^1.0.1" + } + }, + "ieee754": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", + "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", + "bundled": true, + "dev": true + }, + "inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "bundled": true, + "dev": true + }, + "is-buffer": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-2.0.5.tgz", + "integrity": "sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ==", + "bundled": true, + "dev": true + }, + "keccak": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/keccak/-/keccak-3.0.2.tgz", + "integrity": "sha512-PyKKjkH53wDMLGrvmRGSNWgmSxZOUqbnXwKL9tmgbFYA1iAYqW21kfR7mZXV0MlESiefxQQE9X9fTa3X+2MPDQ==", + "bundled": true, + "dev": true, + "requires": { + "node-addon-api": "^2.0.0", + "node-gyp-build": "^4.2.0", + "readable-stream": "^3.6.0" + } + }, + "leveldown": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/leveldown/-/leveldown-6.1.0.tgz", + "integrity": "sha512-8C7oJDT44JXxh04aSSsfcMI8YiaGRhOFI9/pMEL7nWJLVsWajDPTRxsSHTM2WcTVY5nXM+SuRHzPPi0GbnDX+w==", + "bundled": true, + "dev": true, + "requires": { + "abstract-leveldown": "^7.2.0", + "napi-macros": "~2.0.0", + "node-gyp-build": "^4.3.0" + }, + "dependencies": { + "abstract-leveldown": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/abstract-leveldown/-/abstract-leveldown-7.2.0.tgz", + "integrity": "sha512-DnhQwcFEaYsvYDnACLZhMmCWd3rkOeEvglpa4q5i/5Jlm3UIsWaxVzuXvDLFCSCWRO3yy2/+V/G7FusFgejnfQ==", + "bundled": true, + "dev": true, + "requires": { + "buffer": "^6.0.3", + "catering": "^2.0.0", + "is-buffer": "^2.0.5", + "level-concat-iterator": "^3.0.0", + "level-supports": "^2.0.1", + "queue-microtask": "^1.2.3" + } + }, + "level-concat-iterator": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/level-concat-iterator/-/level-concat-iterator-3.1.0.tgz", + "integrity": "sha512-BWRCMHBxbIqPxJ8vHOvKUsaO0v1sLYZtjN3K2iZJsRBYtp+ONsY6Jfi6hy9K3+zolgQRryhIn2NRZjZnWJ9NmQ==", + "bundled": true, + "dev": true, + "requires": { + "catering": "^2.1.0" + } + }, + "level-supports": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/level-supports/-/level-supports-2.1.0.tgz", + "integrity": "sha512-E486g1NCjW5cF78KGPrMDRBYzPuueMZ6VBXHT6gC7A8UYWGiM14fGgp+s/L1oFfDWSPV/+SFkYCmZ0SiESkRKA==", + "bundled": true, + "dev": true + } + } + }, + "minimalistic-assert": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", + "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==", + "bundled": true, + "dev": true + }, + "minimalistic-crypto-utils": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz", + "integrity": "sha1-9sAMHAsIIkblxNmd+4x8CDsrWCo=", + "bundled": true, + "dev": true + }, + "napi-macros": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/napi-macros/-/napi-macros-2.0.0.tgz", + "integrity": "sha512-A0xLykHtARfueITVDernsAWdtIMbOJgKgcluwENp3AlsKN/PloyO10HtmoqnFAQAcxPkgZN7wdfPfEd0zNGxbg==", + "bundled": true, + "dev": true + }, + "node-addon-api": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-2.0.2.tgz", + "integrity": "sha512-Ntyt4AIXyaLIuMHF6IOoTakB3K+RWxwtsHNRxllEoA6vPwP9o4866g6YWDLUdnucilZhmkxiHwHr11gAENw+QA==", + "bundled": true, + "dev": true + }, + "node-gyp-build": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.3.0.tgz", + "integrity": "sha512-iWjXZvmboq0ja1pUGULQBexmxq8CV4xBhX7VDOTbL7ZR4FOowwY/VOtRxBN/yKxmdGoIp4j5ysNT4u3S2pDQ3Q==", + "bundled": true, + "dev": true + }, + "queue-microtask": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", + "bundled": true, + "dev": true + }, + "queue-tick": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/queue-tick/-/queue-tick-1.0.0.tgz", + "integrity": "sha512-ULWhjjE8BmiICGn3G8+1L9wFpERNxkf8ysxkAer4+TFdRefDaXOCV5m92aMB9FtBVmn/8sETXLXY6BfW7hyaWQ==", + "bundled": true, + "dev": true + }, + "readable-stream": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", + "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "bundled": true, + "dev": true, + "requires": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + } + }, + "safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "bundled": true, + "dev": true + }, + "secp256k1": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/secp256k1/-/secp256k1-4.0.3.tgz", + "integrity": "sha512-NLZVf+ROMxwtEj3Xa562qgv2BK5e2WNmXPiOdVIPLgs6lyTzMvBq0aWTYMI5XCP9jZMVKOcqZLw/Wc4vDkuxhA==", + "bundled": true, + "dev": true, + "requires": { + "elliptic": "^6.5.4", + "node-addon-api": "^2.0.0", + "node-gyp-build": "^4.2.0" + } + }, + "string_decoder": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", + "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", + "bundled": true, + "dev": true, + "requires": { + "safe-buffer": "~5.2.0" + } + }, + "utf-8-validate": { + "version": "5.0.7", + "resolved": "https://registry.npmjs.org/utf-8-validate/-/utf-8-validate-5.0.7.tgz", + "integrity": "sha512-vLt1O5Pp+flcArHGIyKEQq883nBt8nN8tVBcoL0qUXj2XT1n7p70yGIq2VK98I5FdZ1YHc0wk/koOnHjnXWk1Q==", + "dev": true, + "optional": true, + "requires": { + "node-gyp-build": "^4.3.0" + } + }, + "util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", + "bundled": true, + "dev": true + } + } + } } }, "@ethereumjs/block": { @@ -30620,40 +32795,270 @@ } } }, + "@ethereumjs/blockchain": { + "version": "5.5.3", + "resolved": "https://registry.npmjs.org/@ethereumjs/blockchain/-/blockchain-5.5.3.tgz", + "integrity": "sha512-bi0wuNJ1gw4ByNCV56H0Z4Q7D+SxUbwyG12Wxzbvqc89PXLRNR20LBcSUZRKpN0+YCPo6m0XZL/JLio3B52LTw==", + "dev": true, + "requires": { + "@ethereumjs/block": "^3.6.2", + "@ethereumjs/common": "^2.6.4", + "@ethereumjs/ethash": "^1.1.0", + "debug": "^4.3.3", + "ethereumjs-util": "^7.1.5", + "level-mem": "^5.0.1", + "lru-cache": "^5.1.1", + "semaphore-async-await": "^1.5.1" + }, + "dependencies": { + "@ethereumjs/common": { + "version": "2.6.5", + "resolved": "https://registry.npmjs.org/@ethereumjs/common/-/common-2.6.5.tgz", + "integrity": "sha512-lRyVQOeCDaIVtgfbowla32pzeDv2Obr8oR8Put5RdUBNRGr1VGPGQNGP6elWIpgK3YdpzqTOh4GyUGOureVeeA==", + "dev": true, + "requires": { + "crc-32": "^1.2.0", + "ethereumjs-util": "^7.1.5" + } + } + } + }, "@ethereumjs/common": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/@ethereumjs/common/-/common-3.0.2.tgz", - "integrity": "sha512-N8fpT5uDvxOE5dIaPQZWzJaBRkRWrCXv63MONEn5ikp/J9mWFc53VUjb3GqtIYHRgg9nP81TXmtnvQJz1IuTiw==", + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/@ethereumjs/common/-/common-3.1.2.tgz", + "integrity": "sha512-YV+bZfRlFhAXg+FfwC5r4UQKVj4OG7vDP5/JvvNXLLbYpNplH5Vca9jD0L+ab8y0YlTYJMQM1ALyHFu3AE3eBA==", "requires": { - "@ethereumjs/util": "^8.0.3", + "@ethereumjs/util": "^8.0.6", "crc-32": "^1.2.0" } }, + "@ethereumjs/ethash": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@ethereumjs/ethash/-/ethash-1.1.0.tgz", + "integrity": "sha512-/U7UOKW6BzpA+Vt+kISAoeDie1vAvY4Zy2KF5JJb+So7+1yKmJeJEHOGSnQIj330e9Zyl3L5Nae6VZyh2TJnAA==", + "dev": true, + "requires": { + "@ethereumjs/block": "^3.5.0", + "@types/levelup": "^4.3.0", + "buffer-xor": "^2.0.1", + "ethereumjs-util": "^7.1.1", + "miller-rabin": "^4.0.0" + }, + "dependencies": { + "buffer-xor": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/buffer-xor/-/buffer-xor-2.0.2.tgz", + "integrity": "sha512-eHslX0bin3GB+Lx2p7lEYRShRewuNZL3fUl4qlVJGGiwoPGftmt8JQgk2Y9Ji5/01TnVDo33E5b5O3vUB1HdqQ==", + "dev": true, + "requires": { + "safe-buffer": "^5.1.1" + } + } + } + }, "@ethereumjs/rlp": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@ethereumjs/rlp/-/rlp-4.0.0.tgz", - "integrity": "sha512-LM4jS5n33bJN60fM5EC8VeyhUgga6/DjCPBV2vWjnfVtobqtOiNC4SQ1MRFqyBSmJGGdB533JZWewyvlcdJtkQ==" + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@ethereumjs/rlp/-/rlp-4.0.1.tgz", + "integrity": "sha512-tqsQiBQDQdmPWE1xkkBq4rlSW5QZpLOUJ5RJh2/9fug+q9tnUhuZoVLk7s0scUIKTOzEtR72DFBXI4WiZcMpvw==" }, "@ethereumjs/tx": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/@ethereumjs/tx/-/tx-4.0.2.tgz", - "integrity": "sha512-6GoKVK3MVcAFFn4qSLIIDZ1vrKSLn7W5L80Pvae1BJFgchu+11R2iOqQyVGUSGbaXllh4xliUy/7+x5pYwRY8Q==", + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/@ethereumjs/tx/-/tx-4.1.2.tgz", + "integrity": "sha512-PWWyO9lAFOiLwk7nB9OQisoJUsuvMz2PN2v4/ILbBpzamC5Ug79OddVq9r4rKvIDLPY+bn4NFerxBJg29+sjaA==", "requires": { - "@ethereumjs/common": "^3.0.2", - "@ethereumjs/rlp": "^4.0.0", - "@ethereumjs/util": "^8.0.3", - "ethereum-cryptography": "^1.1.2", - "ethers": "^5.7.1" + "@chainsafe/ssz": "^0.11.1", + "@ethereumjs/common": "^3.1.2", + "@ethereumjs/rlp": "^4.0.1", + "@ethereumjs/util": "^8.0.6", + "ethereum-cryptography": "^2.0.0" + }, + "dependencies": { + "@chainsafe/as-sha256": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/@chainsafe/as-sha256/-/as-sha256-0.4.1.tgz", + "integrity": "sha512-IqeeGwQihK6Y2EYLFofqs2eY2ep1I2MvQXHzOAI+5iQN51OZlUkrLgyAugu2x86xZewDk5xas7lNczkzFzF62w==" + }, + "@chainsafe/persistent-merkle-tree": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/@chainsafe/persistent-merkle-tree/-/persistent-merkle-tree-0.6.1.tgz", + "integrity": "sha512-gcENLemRR13+1MED2NeZBMA7FRS0xQPM7L2vhMqvKkjqtFT4YfjSVADq5U0iLuQLhFUJEMVuA8fbv5v+TN6O9A==", + "requires": { + "@chainsafe/as-sha256": "^0.4.1", + "@noble/hashes": "^1.3.0" + } + }, + "@chainsafe/ssz": { + "version": "0.11.1", + "resolved": "https://registry.npmjs.org/@chainsafe/ssz/-/ssz-0.11.1.tgz", + "integrity": "sha512-cB8dBkgGN6ZoeOKuk+rIRHKN0L5i9JLGeC0Lui71QX0TuLcQKwgbfkUexpyJxnGFatWf8yeJxlOjozMn/OTP0g==", + "requires": { + "@chainsafe/as-sha256": "^0.4.1", + "@chainsafe/persistent-merkle-tree": "^0.6.1" + } + }, + "@noble/hashes": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.3.0.tgz", + "integrity": "sha512-ilHEACi9DwqJB0pw7kv+Apvh50jiiSyR/cQ3y4W7lOR5mhvn/50FLUfsnfJz0BDZtl/RR16kXvptiv6q1msYZg==" + }, + "@scure/bip32": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/@scure/bip32/-/bip32-1.3.0.tgz", + "integrity": "sha512-bcKpo1oj54hGholplGLpqPHRbIsnbixFtc06nwuNM5/dwSXOq/AAYoIBRsBmnZJSdfeNW5rnff7NTAz3ZCqR9Q==", + "requires": { + "@noble/curves": "~1.0.0", + "@noble/hashes": "~1.3.0", + "@scure/base": "~1.1.0" + } + }, + "@scure/bip39": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@scure/bip39/-/bip39-1.2.0.tgz", + "integrity": "sha512-SX/uKq52cuxm4YFXWFaVByaSHJh2w3BnokVSeUJVCv6K7WulT9u2BuNRBhuFl8vAuYnzx9bEu9WgpcNYTrYieg==", + "requires": { + "@noble/hashes": "~1.3.0", + "@scure/base": "~1.1.0" + } + }, + "ethereum-cryptography": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-2.0.0.tgz", + "integrity": "sha512-g25m4EtfQGjstWgVE1aIz7XYYjf3kH5kG17ULWVB5dH6uLahsoltOhACzSxyDV+fhn4gbR4xRrOXGe6r2uh4Bg==", + "requires": { + "@noble/curves": "1.0.0", + "@noble/hashes": "1.3.0", + "@scure/bip32": "1.3.0", + "@scure/bip39": "1.2.0" + } + } } }, "@ethereumjs/util": { - "version": "8.0.3", - "resolved": "https://registry.npmjs.org/@ethereumjs/util/-/util-8.0.3.tgz", - "integrity": "sha512-0apCbwc8xAaie6W7q6QyogfyRS2BMU816a8KwpnpRw9Qrc6Bws+l7J3LfCLMt2iL6Wi8CYb0B29AeIr2N4vHnw==", + "version": "8.0.6", + "resolved": "https://registry.npmjs.org/@ethereumjs/util/-/util-8.0.6.tgz", + "integrity": "sha512-zFLG/gXtF3QUC7iKFn4PT6HCr+DEnlCbwUGKGtXoqjA+64T+e0FuqMjlo4bQIY2ngRzk3EtudKdGYC4g31ehhg==", + "requires": { + "@chainsafe/ssz": "^0.11.1", + "@ethereumjs/rlp": "^4.0.1", + "ethereum-cryptography": "^2.0.0", + "micro-ftch": "^0.3.1" + }, + "dependencies": { + "@chainsafe/as-sha256": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/@chainsafe/as-sha256/-/as-sha256-0.4.1.tgz", + "integrity": "sha512-IqeeGwQihK6Y2EYLFofqs2eY2ep1I2MvQXHzOAI+5iQN51OZlUkrLgyAugu2x86xZewDk5xas7lNczkzFzF62w==" + }, + "@chainsafe/persistent-merkle-tree": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/@chainsafe/persistent-merkle-tree/-/persistent-merkle-tree-0.6.1.tgz", + "integrity": "sha512-gcENLemRR13+1MED2NeZBMA7FRS0xQPM7L2vhMqvKkjqtFT4YfjSVADq5U0iLuQLhFUJEMVuA8fbv5v+TN6O9A==", + "requires": { + "@chainsafe/as-sha256": "^0.4.1", + "@noble/hashes": "^1.3.0" + } + }, + "@chainsafe/ssz": { + "version": "0.11.1", + "resolved": "https://registry.npmjs.org/@chainsafe/ssz/-/ssz-0.11.1.tgz", + "integrity": "sha512-cB8dBkgGN6ZoeOKuk+rIRHKN0L5i9JLGeC0Lui71QX0TuLcQKwgbfkUexpyJxnGFatWf8yeJxlOjozMn/OTP0g==", + "requires": { + "@chainsafe/as-sha256": "^0.4.1", + "@chainsafe/persistent-merkle-tree": "^0.6.1" + } + }, + "@noble/hashes": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.3.0.tgz", + "integrity": "sha512-ilHEACi9DwqJB0pw7kv+Apvh50jiiSyR/cQ3y4W7lOR5mhvn/50FLUfsnfJz0BDZtl/RR16kXvptiv6q1msYZg==" + }, + "@scure/bip32": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/@scure/bip32/-/bip32-1.3.0.tgz", + "integrity": "sha512-bcKpo1oj54hGholplGLpqPHRbIsnbixFtc06nwuNM5/dwSXOq/AAYoIBRsBmnZJSdfeNW5rnff7NTAz3ZCqR9Q==", + "requires": { + "@noble/curves": "~1.0.0", + "@noble/hashes": "~1.3.0", + "@scure/base": "~1.1.0" + } + }, + "@scure/bip39": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@scure/bip39/-/bip39-1.2.0.tgz", + "integrity": "sha512-SX/uKq52cuxm4YFXWFaVByaSHJh2w3BnokVSeUJVCv6K7WulT9u2BuNRBhuFl8vAuYnzx9bEu9WgpcNYTrYieg==", + "requires": { + "@noble/hashes": "~1.3.0", + "@scure/base": "~1.1.0" + } + }, + "ethereum-cryptography": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-2.0.0.tgz", + "integrity": "sha512-g25m4EtfQGjstWgVE1aIz7XYYjf3kH5kG17ULWVB5dH6uLahsoltOhACzSxyDV+fhn4gbR4xRrOXGe6r2uh4Bg==", + "requires": { + "@noble/curves": "1.0.0", + "@noble/hashes": "1.3.0", + "@scure/bip32": "1.3.0", + "@scure/bip39": "1.2.0" + } + } + } + }, + "@ethereumjs/vm": { + "version": "5.6.0", + "resolved": "https://registry.npmjs.org/@ethereumjs/vm/-/vm-5.6.0.tgz", + "integrity": "sha512-J2m/OgjjiGdWF2P9bj/4LnZQ1zRoZhY8mRNVw/N3tXliGI8ai1sI1mlDPkLpeUUM4vq54gH6n0ZlSpz8U/qlYQ==", + "dev": true, "requires": { - "@ethereumjs/rlp": "^4.0.0-beta.2", - "async": "^3.2.4", - "ethereum-cryptography": "^1.1.2" + "@ethereumjs/block": "^3.6.0", + "@ethereumjs/blockchain": "^5.5.0", + "@ethereumjs/common": "^2.6.0", + "@ethereumjs/tx": "^3.4.0", + "async-eventemitter": "^0.2.4", + "core-js-pure": "^3.0.1", + "debug": "^2.2.0", + "ethereumjs-util": "^7.1.3", + "functional-red-black-tree": "^1.0.1", + "mcl-wasm": "^0.7.1", + "merkle-patricia-tree": "^4.2.2", + "rustbn.js": "~0.2.0" + }, + "dependencies": { + "@ethereumjs/common": { + "version": "2.6.5", + "resolved": "https://registry.npmjs.org/@ethereumjs/common/-/common-2.6.5.tgz", + "integrity": "sha512-lRyVQOeCDaIVtgfbowla32pzeDv2Obr8oR8Put5RdUBNRGr1VGPGQNGP6elWIpgK3YdpzqTOh4GyUGOureVeeA==", + "dev": true, + "requires": { + "crc-32": "^1.2.0", + "ethereumjs-util": "^7.1.5" + } + }, + "@ethereumjs/tx": { + "version": "3.5.2", + "resolved": "https://registry.npmjs.org/@ethereumjs/tx/-/tx-3.5.2.tgz", + "integrity": "sha512-gQDNJWKrSDGu2w7w0PzVXVBNMzb7wwdDOmOqczmhNjqFxFuIbhVJDwiGEnxFNC2/b8ifcZzY7MLcluizohRzNw==", + "dev": true, + "requires": { + "@ethereumjs/common": "^2.6.4", + "ethereumjs-util": "^7.1.5" + } + }, + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "dev": true + } } }, "@ethersproject/abi": { @@ -31048,23 +33453,180 @@ } }, "@flashbots/ethers-provider-bundle": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/@flashbots/ethers-provider-bundle/-/ethers-provider-bundle-0.6.0.tgz", - "integrity": "sha512-+SVzxE7FIHq1mWeXwozfusJDGaDrQxc73SH2fHrRb3hf34SxJwdsBSfcYGQUdfSbw4vXF8ZpWTFigd5naY+vnw==", + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/@flashbots/ethers-provider-bundle/-/ethers-provider-bundle-0.6.1.tgz", + "integrity": "sha512-W7tSX832mi7XKlbg4dIMzV1HMw5Dg0ox0YOqPxW2nO2JqsAZwWYFrAk4nNZnsqRdexHiPF4JUYez/ELI5VpScA==", + "requires": {} + }, + "@ganache/ethereum-address": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/@ganache/ethereum-address/-/ethereum-address-0.1.4.tgz", + "integrity": "sha512-sTkU0M9z2nZUzDeHRzzGlW724xhMLXo2LeX1hixbnjHWY1Zg1hkqORywVfl+g5uOO8ht8T0v+34IxNxAhmWlbw==", + "dev": true, "requires": { - "typescript": "4.1.2", - "uuid": "9.0.0" + "@ganache/utils": "0.1.4" + } + }, + "@ganache/ethereum-options": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/@ganache/ethereum-options/-/ethereum-options-0.1.4.tgz", + "integrity": "sha512-i4l46taoK2yC41FPkcoDlEVoqHS52wcbHPqJtYETRWqpOaoj9hAg/EJIHLb1t6Nhva2CdTO84bG+qlzlTxjAHw==", + "dev": true, + "requires": { + "@ganache/ethereum-address": "0.1.4", + "@ganache/ethereum-utils": "0.1.4", + "@ganache/options": "0.1.4", + "@ganache/utils": "0.1.4", + "bip39": "3.0.4", + "seedrandom": "3.0.5" + } + }, + "@ganache/ethereum-utils": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/@ganache/ethereum-utils/-/ethereum-utils-0.1.4.tgz", + "integrity": "sha512-FKXF3zcdDrIoCqovJmHLKZLrJ43234Em2sde/3urUT/10gSgnwlpFmrv2LUMAmSbX3lgZhW/aSs8krGhDevDAg==", + "dev": true, + "requires": { + "@ethereumjs/common": "2.6.0", + "@ethereumjs/tx": "3.4.0", + "@ethereumjs/vm": "5.6.0", + "@ganache/ethereum-address": "0.1.4", + "@ganache/rlp": "0.1.4", + "@ganache/utils": "0.1.4", + "emittery": "0.10.0", + "ethereumjs-abi": "0.6.8", + "ethereumjs-util": "7.1.3" }, "dependencies": { - "typescript": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.1.2.tgz", - "integrity": "sha512-thGloWsGH3SOxv1SoY7QojKi0tc+8FnOmiarEGMbd/lar7QOEd3hvlx3Fp5y6FlDUGl9L+pd4n2e+oToGMmhRQ==" + "@ethereumjs/common": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/@ethereumjs/common/-/common-2.6.0.tgz", + "integrity": "sha512-Cq2qS0FTu6O2VU1sgg+WyU9Ps0M6j/BEMHN+hRaECXCV/r0aI78u4N6p52QW/BDVhwWZpCdrvG8X7NJdzlpNUA==", + "dev": true, + "requires": { + "crc-32": "^1.2.0", + "ethereumjs-util": "^7.1.3" + } }, - "uuid": { - "version": "9.0.0", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.0.tgz", - "integrity": "sha512-MXcSTerfPa4uqyzStbRoTgt5XIe3x5+42+q1sDuy3R5MDk66URdLMOZe5aPX/SQd+kuYAh0FdP/pO28IkQyTeg==" + "@ethereumjs/tx": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/@ethereumjs/tx/-/tx-3.4.0.tgz", + "integrity": "sha512-WWUwg1PdjHKZZxPPo274ZuPsJCWV3SqATrEKQP1n2DrVYVP1aZIYpo/mFaA0BDoE0tIQmBeimRCEA0Lgil+yYw==", + "dev": true, + "requires": { + "@ethereumjs/common": "^2.6.0", + "ethereumjs-util": "^7.1.3" + } + }, + "emittery": { + "version": "0.10.0", + "resolved": "https://registry.npmjs.org/emittery/-/emittery-0.10.0.tgz", + "integrity": "sha512-AGvFfs+d0JKCJQ4o01ASQLGPmSCxgfU9RFXvzPvZdjKK8oscynksuJhWrSTSw7j7Ep/sZct5b5ZhYCi8S/t0HQ==", + "dev": true + }, + "ethereum-cryptography": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-0.1.3.tgz", + "integrity": "sha512-w8/4x1SGGzc+tO97TASLja6SLd3fRIK2tLVcV2Gx4IB21hE19atll5Cq9o3d0ZmAYC/8aw0ipieTSiekAea4SQ==", + "dev": true, + "requires": { + "@types/pbkdf2": "^3.0.0", + "@types/secp256k1": "^4.0.1", + "blakejs": "^1.1.0", + "browserify-aes": "^1.2.0", + "bs58check": "^2.1.2", + "create-hash": "^1.2.0", + "create-hmac": "^1.1.7", + "hash.js": "^1.1.7", + "keccak": "^3.0.0", + "pbkdf2": "^3.0.17", + "randombytes": "^2.1.0", + "safe-buffer": "^5.1.2", + "scrypt-js": "^3.0.0", + "secp256k1": "^4.0.1", + "setimmediate": "^1.0.5" + } + }, + "ethereumjs-util": { + "version": "7.1.3", + "resolved": "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-7.1.3.tgz", + "integrity": "sha512-y+82tEbyASO0K0X1/SRhbJJoAlfcvq8JbrG4a5cjrOks7HS/36efU/0j2flxCPOUM++HFahk33kr/ZxyC4vNuw==", + "dev": true, + "requires": { + "@types/bn.js": "^5.1.0", + "bn.js": "^5.1.2", + "create-hash": "^1.1.2", + "ethereum-cryptography": "^0.1.3", + "rlp": "^2.2.4" + } + } + } + }, + "@ganache/options": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/@ganache/options/-/options-0.1.4.tgz", + "integrity": "sha512-zAe/craqNuPz512XQY33MOAG6Si1Xp0hCvfzkBfj2qkuPcbJCq6W/eQ5MB6SbXHrICsHrZOaelyqjuhSEmjXRw==", + "dev": true, + "requires": { + "@ganache/utils": "0.1.4", + "bip39": "3.0.4", + "seedrandom": "3.0.5" + } + }, + "@ganache/rlp": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/@ganache/rlp/-/rlp-0.1.4.tgz", + "integrity": "sha512-Do3D1H6JmhikB+6rHviGqkrNywou/liVeFiKIpOBLynIpvZhRCgn3SEDxyy/JovcaozTo/BynHumfs5R085MFQ==", + "dev": true, + "requires": { + "@ganache/utils": "0.1.4", + "rlp": "2.2.6" + }, + "dependencies": { + "bn.js": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", + "dev": true + }, + "rlp": { + "version": "2.2.6", + "resolved": "https://registry.npmjs.org/rlp/-/rlp-2.2.6.tgz", + "integrity": "sha512-HAfAmL6SDYNWPUOJNrM500x4Thn4PZsEy5pijPh40U9WfNk0z15hUYzO9xVIMAdIHdFtD8CBDHd75Td1g36Mjg==", + "dev": true, + "requires": { + "bn.js": "^4.11.1" + } + } + } + }, + "@ganache/utils": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/@ganache/utils/-/utils-0.1.4.tgz", + "integrity": "sha512-oatUueU3XuXbUbUlkyxeLLH3LzFZ4y5aSkNbx6tjSIhVTPeh+AuBKYt4eQ73FFcTB3nj/gZoslgAh5CN7O369w==", + "dev": true, + "requires": { + "@trufflesuite/bigint-buffer": "1.1.9", + "emittery": "0.10.0", + "keccak": "3.0.1", + "seedrandom": "3.0.5" + }, + "dependencies": { + "emittery": { + "version": "0.10.0", + "resolved": "https://registry.npmjs.org/emittery/-/emittery-0.10.0.tgz", + "integrity": "sha512-AGvFfs+d0JKCJQ4o01ASQLGPmSCxgfU9RFXvzPvZdjKK8oscynksuJhWrSTSw7j7Ep/sZct5b5ZhYCi8S/t0HQ==", + "dev": true + }, + "keccak": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/keccak/-/keccak-3.0.1.tgz", + "integrity": "sha512-epq90L9jlFWCW7+pQa6JOnKn2Xgl2mtI664seYR6MHskvI9agt7AnDqmAlp9TqU4/caMYbA08Hi5DMZAl5zdkA==", + "dev": true, + "requires": { + "node-addon-api": "^2.0.0", + "node-gyp-build": "^4.2.0" + } } } }, @@ -31092,6 +33654,14 @@ "dataloader": "2.1.0", "tslib": "~2.4.0", "value-or-promise": "1.0.11" + }, + "dependencies": { + "tslib": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.1.tgz", + "integrity": "sha512-tGyy4dAjRIEwI7BzsB0lynWgOpfqjUdq91XXAlIWD2OwKBH7oCl/GZG/HT4BOHrTlPMOASlMQ7veyTqpmRcrNA==", + "optional": true + } } }, "@graphql-tools/merge": { @@ -31105,47 +33675,54 @@ } }, "@graphql-tools/mock": { - "version": "8.7.14", - "resolved": "https://registry.npmjs.org/@graphql-tools/mock/-/mock-8.7.14.tgz", - "integrity": "sha512-kIYirhGqhhSI6p/5qj95U8Lngm4mml5B3Z/r7ShI4+/EACyOOV+wUlql45+Y21b9NRUxJbsNHpztGxzgCSyviQ==", + "version": "8.7.20", + "resolved": "https://registry.npmjs.org/@graphql-tools/mock/-/mock-8.7.20.tgz", + "integrity": "sha512-ljcHSJWjC/ZyzpXd5cfNhPI7YljRVvabKHPzKjEs5ElxWu2cdlLGvyNYepApXDsM/OJG/2xuhGM+9GWu5gEAPQ==", "optional": true, "requires": { - "@graphql-tools/schema": "9.0.12", - "@graphql-tools/utils": "9.1.3", + "@graphql-tools/schema": "^9.0.18", + "@graphql-tools/utils": "^9.2.1", "fast-json-stable-stringify": "^2.1.0", "tslib": "^2.4.0" }, "dependencies": { "@graphql-tools/merge": { - "version": "8.3.14", - "resolved": "https://registry.npmjs.org/@graphql-tools/merge/-/merge-8.3.14.tgz", - "integrity": "sha512-zV0MU1DnxJLIB0wpL4N3u21agEiYFsjm6DI130jqHpwF0pR9HkF+Ni65BNfts4zQelP0GjkHltG+opaozAJ1NA==", + "version": "8.4.2", + "resolved": "https://registry.npmjs.org/@graphql-tools/merge/-/merge-8.4.2.tgz", + "integrity": "sha512-XbrHAaj8yDuINph+sAfuq3QCZ/tKblrTLOpirK0+CAgNlZUCHs0Fa+xtMUURgwCVThLle1AF7svJCxFizygLsw==", "optional": true, "requires": { - "@graphql-tools/utils": "9.1.3", + "@graphql-tools/utils": "^9.2.1", "tslib": "^2.4.0" } }, "@graphql-tools/schema": { - "version": "9.0.12", - "resolved": "https://registry.npmjs.org/@graphql-tools/schema/-/schema-9.0.12.tgz", - "integrity": "sha512-DmezcEltQai0V1y96nwm0Kg11FDS/INEFekD4nnVgzBqawvznWqK6D6bujn+cw6kivoIr3Uq//QmU/hBlBzUlQ==", + "version": "9.0.19", + "resolved": "https://registry.npmjs.org/@graphql-tools/schema/-/schema-9.0.19.tgz", + "integrity": "sha512-oBRPoNBtCkk0zbUsyP4GaIzCt8C0aCI4ycIRUL67KK5pOHljKLBBtGT+Jr6hkzA74C8Gco8bpZPe7aWFjiaK2w==", "optional": true, "requires": { - "@graphql-tools/merge": "8.3.14", - "@graphql-tools/utils": "9.1.3", + "@graphql-tools/merge": "^8.4.1", + "@graphql-tools/utils": "^9.2.1", "tslib": "^2.4.0", - "value-or-promise": "1.0.11" + "value-or-promise": "^1.0.12" } }, "@graphql-tools/utils": { - "version": "9.1.3", - "resolved": "https://registry.npmjs.org/@graphql-tools/utils/-/utils-9.1.3.tgz", - "integrity": "sha512-bbJyKhs6awp1/OmP+WKA1GOyu9UbgZGkhIj5srmiMGLHohEOKMjW784Sk0BZil1w2x95UPu0WHw6/d/HVCACCg==", + "version": "9.2.1", + "resolved": "https://registry.npmjs.org/@graphql-tools/utils/-/utils-9.2.1.tgz", + "integrity": "sha512-WUw506Ql6xzmOORlriNrD6Ugx+HjVgYxt9KCXD9mHAak+eaXSwuGGPyE60hy9xaDEoXKBsG7SkG69ybitaVl6A==", "optional": true, "requires": { + "@graphql-typed-document-node/core": "^3.1.1", "tslib": "^2.4.0" } + }, + "value-or-promise": { + "version": "1.0.12", + "resolved": "https://registry.npmjs.org/value-or-promise/-/value-or-promise-1.0.12.tgz", + "integrity": "sha512-Z6Uz+TYwEqE7ZN50gwn+1LCVo9ZVrpxRPOhOLnncYkY1ZzOYtrX8Fwf/rFktZ8R5mJms6EZf5TqNOMeZmnPq9Q==", + "optional": true } } }, @@ -31170,6 +33747,13 @@ "tslib": "^2.4.0" } }, + "@graphql-typed-document-node/core": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/@graphql-typed-document-node/core/-/core-3.2.0.tgz", + "integrity": "sha512-mB9oAsNCm9aM3/SOv4YtBMqZbYj10R7dkq8byBqxGY/ncFwhf2oQzMV+LCRlWoDSEBJ3COiR1yeDvMtsoOsuFQ==", + "optional": true, + "requires": {} + }, "@josephg/resolvable": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/@josephg/resolvable/-/resolvable-1.0.1.tgz", @@ -31189,7 +33773,8 @@ "@jridgewell/resolve-uri": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz", - "integrity": "sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==" + "integrity": "sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==", + "peer": true }, "@jridgewell/set-array": { "version": "1.1.2", @@ -31200,7 +33785,8 @@ "@jridgewell/sourcemap-codec": { "version": "1.4.14", "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz", - "integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==" + "integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==", + "peer": true }, "@jridgewell/trace-mapping": { "version": "0.3.17", @@ -31391,16 +33977,14 @@ "version": "0.6.3", "resolved": "https://registry.npmjs.org/@matterlabs/hardhat-zksync-deploy/-/hardhat-zksync-deploy-0.6.3.tgz", "integrity": "sha512-FB+2xFL/80JJwlGna+aHA6dk4ONrMFqThTZATYVJUAKooA0Aw5qmpmM8B3qsNB4LLzHSO/EmVrHIcLaPv8hYwQ==", - "dev": true, "requires": { "chalk": "4.1.2" } }, "@matterlabs/hardhat-zksync-solc": { - "version": "0.3.14", - "resolved": "https://registry.npmjs.org/@matterlabs/hardhat-zksync-solc/-/hardhat-zksync-solc-0.3.14.tgz", - "integrity": "sha512-iKuQ+vvnpv3K2lkFO41xpJcNWH0KHJ/5JbOboTlPZATVR7F3GJeHfJL+GG4wkxKXnxZczpxyQqC4rAfMKvRaDg==", - "dev": true, + "version": "0.3.16", + "resolved": "https://registry.npmjs.org/@matterlabs/hardhat-zksync-solc/-/hardhat-zksync-solc-0.3.16.tgz", + "integrity": "sha512-gw46yyiCfj49I/nbUcOlnF5xE80WyeW/i8i9ouHom4KWJNt1kioQIwOPkN7aJURhXpJJxKSdeWBrQHLWTZDnTA==", "requires": { "@nomiclabs/hardhat-docker": "^2.0.0", "chalk": "4.1.2", @@ -31475,32 +34059,56 @@ "resolved": "https://registry.npmjs.org/@metamask/safe-event-emitter/-/safe-event-emitter-2.0.0.tgz", "integrity": "sha512-/kSXhY692qiV1MXu6EeOZvg5nECLclxNXcKCxJ3cXQgYuRymRHpdx/t7JXfsK+JLjwA1e1c1/SBrlQYpusC29Q==" }, - "@noble/ed25519": { - "version": "1.7.1", - "resolved": "https://registry.npmjs.org/@noble/ed25519/-/ed25519-1.7.1.tgz", - "integrity": "sha512-Rk4SkJFaXZiznFyC/t77Q0NKS4FL7TLJJsVG2V2oiEq3kJVeTdxysEe/yRWSpnWMe808XRDJ+VFh5pt/FN5plw==" + "@morgan-stanley/ts-mocking-bird": { + "version": "0.6.4", + "resolved": "https://registry.npmjs.org/@morgan-stanley/ts-mocking-bird/-/ts-mocking-bird-0.6.4.tgz", + "integrity": "sha512-57VJIflP8eR2xXa9cD1LUawh+Gh+BVQfVu0n6GALyg/AqV/Nz25kDRvws3i9kIe1PTrbsZZOYpsYp6bXPd6nVA==", + "dev": true, + "requires": { + "lodash": "^4.17.16", + "uuid": "^7.0.3" + }, + "dependencies": { + "uuid": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-7.0.3.tgz", + "integrity": "sha512-DPSke0pXhTZgoF/d+WSt2QaKMCFSfx7QegxEWT+JOuHF5aWrKEn0G+ztjuJg/gG8/ItK+rbPCD/yNv8yyih6Cg==", + "dev": true + } + } + }, + "@noble/curves": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@noble/curves/-/curves-1.0.0.tgz", + "integrity": "sha512-2upgEu0iLiDVDZkNLeFV2+ht0BAVgQnEmCk6JsOch9Rp8xfkMCbvbAZlA2pBHQc73dbl+vFOXfqkf4uemdn0bw==", + "requires": { + "@noble/hashes": "1.3.0" + }, + "dependencies": { + "@noble/hashes": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.3.0.tgz", + "integrity": "sha512-ilHEACi9DwqJB0pw7kv+Apvh50jiiSyR/cQ3y4W7lOR5mhvn/50FLUfsnfJz0BDZtl/RR16kXvptiv6q1msYZg==" + } + } }, "@noble/hashes": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.1.3.tgz", "integrity": "sha512-CE0FCR57H2acVI5UOzIGSSIYxZ6v/HOhDR0Ro9VLyhnzLwx0o8W1mmgaqlEUx4049qJDlIBRztv5k+MM8vbO3A==" }, - "@noble/secp256k1": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/@noble/secp256k1/-/secp256k1-1.7.0.tgz", - "integrity": "sha512-kbacwGSsH/CTout0ZnZWxnW1B+jH/7r/WAAKLBtrRJ/+CUH7lgmQzl3GTrQua3SGKWNSDsS6lmjnDpIJ5Dxyaw==" - }, "@nomicfoundation/ethereumjs-block": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@nomicfoundation/ethereumjs-block/-/ethereumjs-block-4.0.0.tgz", - "integrity": "sha512-bk8uP8VuexLgyIZAHExH1QEovqx0Lzhc9Ntm63nCRKLHXIZkobaFaeCVwTESV7YkPKUk7NiK11s8ryed4CS9yA==", - "requires": { - "@nomicfoundation/ethereumjs-common": "^3.0.0", - "@nomicfoundation/ethereumjs-rlp": "^4.0.0", - "@nomicfoundation/ethereumjs-trie": "^5.0.0", - "@nomicfoundation/ethereumjs-tx": "^4.0.0", - "@nomicfoundation/ethereumjs-util": "^8.0.0", - "ethereum-cryptography": "0.1.3" + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/@nomicfoundation/ethereumjs-block/-/ethereumjs-block-5.0.1.tgz", + "integrity": "sha512-u1Yioemi6Ckj3xspygu/SfFvm8vZEO8/Yx5a1QLzi6nVU0jz3Pg2OmHKJ5w+D9Ogk1vhwRiqEBAqcb0GVhCyHw==", + "requires": { + "@nomicfoundation/ethereumjs-common": "4.0.1", + "@nomicfoundation/ethereumjs-rlp": "5.0.1", + "@nomicfoundation/ethereumjs-trie": "6.0.1", + "@nomicfoundation/ethereumjs-tx": "5.0.1", + "@nomicfoundation/ethereumjs-util": "9.0.1", + "ethereum-cryptography": "0.1.3", + "ethers": "^5.7.1" }, "dependencies": { "ethereum-cryptography": { @@ -31528,16 +34136,17 @@ } }, "@nomicfoundation/ethereumjs-blockchain": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/@nomicfoundation/ethereumjs-blockchain/-/ethereumjs-blockchain-6.0.0.tgz", - "integrity": "sha512-pLFEoea6MWd81QQYSReLlLfH7N9v7lH66JC/NMPN848ySPPQA5renWnE7wPByfQFzNrPBuDDRFFULMDmj1C0xw==", - "requires": { - "@nomicfoundation/ethereumjs-block": "^4.0.0", - "@nomicfoundation/ethereumjs-common": "^3.0.0", - "@nomicfoundation/ethereumjs-ethash": "^2.0.0", - "@nomicfoundation/ethereumjs-rlp": "^4.0.0", - "@nomicfoundation/ethereumjs-trie": "^5.0.0", - "@nomicfoundation/ethereumjs-util": "^8.0.0", + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/@nomicfoundation/ethereumjs-blockchain/-/ethereumjs-blockchain-7.0.1.tgz", + "integrity": "sha512-NhzndlGg829XXbqJEYrF1VeZhAwSPgsK/OB7TVrdzft3y918hW5KNd7gIZ85sn6peDZOdjBsAXIpXZ38oBYE5A==", + "requires": { + "@nomicfoundation/ethereumjs-block": "5.0.1", + "@nomicfoundation/ethereumjs-common": "4.0.1", + "@nomicfoundation/ethereumjs-ethash": "3.0.1", + "@nomicfoundation/ethereumjs-rlp": "5.0.1", + "@nomicfoundation/ethereumjs-trie": "6.0.1", + "@nomicfoundation/ethereumjs-tx": "5.0.1", + "@nomicfoundation/ethereumjs-util": "9.0.1", "abstract-level": "^1.0.3", "debug": "^4.3.3", "ethereum-cryptography": "0.1.3", @@ -31571,22 +34180,22 @@ } }, "@nomicfoundation/ethereumjs-common": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@nomicfoundation/ethereumjs-common/-/ethereumjs-common-3.0.0.tgz", - "integrity": "sha512-WS7qSshQfxoZOpHG/XqlHEGRG1zmyjYrvmATvc4c62+gZXgre1ymYP8ZNgx/3FyZY0TWe9OjFlKOfLqmgOeYwA==", + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@nomicfoundation/ethereumjs-common/-/ethereumjs-common-4.0.1.tgz", + "integrity": "sha512-OBErlkfp54GpeiE06brBW/TTbtbuBJV5YI5Nz/aB2evTDo+KawyEzPjBlSr84z/8MFfj8wS2wxzQX1o32cev5g==", "requires": { - "@nomicfoundation/ethereumjs-util": "^8.0.0", + "@nomicfoundation/ethereumjs-util": "9.0.1", "crc-32": "^1.2.0" } }, "@nomicfoundation/ethereumjs-ethash": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@nomicfoundation/ethereumjs-ethash/-/ethereumjs-ethash-2.0.0.tgz", - "integrity": "sha512-WpDvnRncfDUuXdsAXlI4lXbqUDOA+adYRQaEezIkxqDkc+LDyYDbd/xairmY98GnQzo1zIqsIL6GB5MoMSJDew==", + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@nomicfoundation/ethereumjs-ethash/-/ethereumjs-ethash-3.0.1.tgz", + "integrity": "sha512-KDjGIB5igzWOp8Ik5I6QiRH5DH+XgILlplsHR7TEuWANZA759G6krQ6o8bvj+tRUz08YygMQu/sGd9mJ1DYT8w==", "requires": { - "@nomicfoundation/ethereumjs-block": "^4.0.0", - "@nomicfoundation/ethereumjs-rlp": "^4.0.0", - "@nomicfoundation/ethereumjs-util": "^8.0.0", + "@nomicfoundation/ethereumjs-block": "5.0.1", + "@nomicfoundation/ethereumjs-rlp": "5.0.1", + "@nomicfoundation/ethereumjs-util": "9.0.1", "abstract-level": "^1.0.3", "bigint-crypto-utils": "^3.0.23", "ethereum-cryptography": "0.1.3" @@ -31617,14 +34226,14 @@ } }, "@nomicfoundation/ethereumjs-evm": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@nomicfoundation/ethereumjs-evm/-/ethereumjs-evm-1.0.0.tgz", - "integrity": "sha512-hVS6qRo3V1PLKCO210UfcEQHvlG7GqR8iFzp0yyjTg2TmJQizcChKgWo8KFsdMw6AyoLgLhHGHw4HdlP8a4i+Q==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@nomicfoundation/ethereumjs-evm/-/ethereumjs-evm-2.0.1.tgz", + "integrity": "sha512-oL8vJcnk0Bx/onl+TgQOQ1t/534GKFaEG17fZmwtPFeH8S5soiBYPCLUrvANOl4sCp9elYxIMzIiTtMtNNN8EQ==", "requires": { - "@nomicfoundation/ethereumjs-common": "^3.0.0", - "@nomicfoundation/ethereumjs-util": "^8.0.0", - "@types/async-eventemitter": "^0.2.1", - "async-eventemitter": "^0.2.4", + "@ethersproject/providers": "^5.7.1", + "@nomicfoundation/ethereumjs-common": "4.0.1", + "@nomicfoundation/ethereumjs-tx": "5.0.1", + "@nomicfoundation/ethereumjs-util": "9.0.1", "debug": "^4.3.3", "ethereum-cryptography": "0.1.3", "mcl-wasm": "^0.7.1", @@ -31656,22 +34265,21 @@ } }, "@nomicfoundation/ethereumjs-rlp": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@nomicfoundation/ethereumjs-rlp/-/ethereumjs-rlp-4.0.0.tgz", - "integrity": "sha512-GaSOGk5QbUk4eBP5qFbpXoZoZUj/NrW7MRa0tKY4Ew4c2HAS0GXArEMAamtFrkazp0BO4K5p2ZCG3b2FmbShmw==" + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/@nomicfoundation/ethereumjs-rlp/-/ethereumjs-rlp-5.0.1.tgz", + "integrity": "sha512-xtxrMGa8kP4zF5ApBQBtjlSbN5E2HI8m8FYgVSYAnO6ssUoY5pVPGy2H8+xdf/bmMa22Ce8nWMH3aEW8CcqMeQ==" }, "@nomicfoundation/ethereumjs-statemanager": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@nomicfoundation/ethereumjs-statemanager/-/ethereumjs-statemanager-1.0.0.tgz", - "integrity": "sha512-jCtqFjcd2QejtuAMjQzbil/4NHf5aAWxUc+CvS0JclQpl+7M0bxMofR2AJdtz+P3u0ke2euhYREDiE7iSO31vQ==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@nomicfoundation/ethereumjs-statemanager/-/ethereumjs-statemanager-2.0.1.tgz", + "integrity": "sha512-B5ApMOnlruVOR7gisBaYwFX+L/AP7i/2oAahatssjPIBVDF6wTX1K7Qpa39E/nzsH8iYuL3krkYeUFIdO3EMUQ==", "requires": { - "@nomicfoundation/ethereumjs-common": "^3.0.0", - "@nomicfoundation/ethereumjs-rlp": "^4.0.0", - "@nomicfoundation/ethereumjs-trie": "^5.0.0", - "@nomicfoundation/ethereumjs-util": "^8.0.0", + "@nomicfoundation/ethereumjs-common": "4.0.1", + "@nomicfoundation/ethereumjs-rlp": "5.0.1", "debug": "^4.3.3", "ethereum-cryptography": "0.1.3", - "functional-red-black-tree": "^1.0.1" + "ethers": "^5.7.1", + "js-sdsl": "^4.1.4" }, "dependencies": { "ethereum-cryptography": { @@ -31699,12 +34307,13 @@ } }, "@nomicfoundation/ethereumjs-trie": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/@nomicfoundation/ethereumjs-trie/-/ethereumjs-trie-5.0.0.tgz", - "integrity": "sha512-LIj5XdE+s+t6WSuq/ttegJzZ1vliwg6wlb+Y9f4RlBpuK35B9K02bO7xU+E6Rgg9RGptkWd6TVLdedTI4eNc2A==", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/@nomicfoundation/ethereumjs-trie/-/ethereumjs-trie-6.0.1.tgz", + "integrity": "sha512-A64It/IMpDVODzCgxDgAAla8jNjNtsoQZIzZUfIV5AY6Coi4nvn7+VReBn5itlxMiL2yaTlQr9TRWp3CSI6VoA==", "requires": { - "@nomicfoundation/ethereumjs-rlp": "^4.0.0", - "@nomicfoundation/ethereumjs-util": "^8.0.0", + "@nomicfoundation/ethereumjs-rlp": "5.0.1", + "@nomicfoundation/ethereumjs-util": "9.0.1", + "@types/readable-stream": "^2.3.13", "ethereum-cryptography": "0.1.3", "readable-stream": "^3.6.0" }, @@ -31734,13 +34343,15 @@ } }, "@nomicfoundation/ethereumjs-tx": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@nomicfoundation/ethereumjs-tx/-/ethereumjs-tx-4.0.0.tgz", - "integrity": "sha512-Gg3Lir2lNUck43Kp/3x6TfBNwcWC9Z1wYue9Nz3v4xjdcv6oDW9QSMJxqsKw9QEGoBBZ+gqwpW7+F05/rs/g1w==", - "requires": { - "@nomicfoundation/ethereumjs-common": "^3.0.0", - "@nomicfoundation/ethereumjs-rlp": "^4.0.0", - "@nomicfoundation/ethereumjs-util": "^8.0.0", + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/@nomicfoundation/ethereumjs-tx/-/ethereumjs-tx-5.0.1.tgz", + "integrity": "sha512-0HwxUF2u2hrsIM1fsasjXvlbDOq1ZHFV2dd1yGq8CA+MEYhaxZr8OTScpVkkxqMwBcc5y83FyPl0J9MZn3kY0w==", + "requires": { + "@chainsafe/ssz": "^0.9.2", + "@ethersproject/providers": "^5.7.2", + "@nomicfoundation/ethereumjs-common": "4.0.1", + "@nomicfoundation/ethereumjs-rlp": "5.0.1", + "@nomicfoundation/ethereumjs-util": "9.0.1", "ethereum-cryptography": "0.1.3" }, "dependencies": { @@ -31769,14 +34380,32 @@ } }, "@nomicfoundation/ethereumjs-util": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/@nomicfoundation/ethereumjs-util/-/ethereumjs-util-8.0.0.tgz", - "integrity": "sha512-2emi0NJ/HmTG+CGY58fa+DQuAoroFeSH9gKu9O6JnwTtlzJtgfTixuoOqLEgyyzZVvwfIpRueuePb8TonL1y+A==", + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/@nomicfoundation/ethereumjs-util/-/ethereumjs-util-9.0.1.tgz", + "integrity": "sha512-TwbhOWQ8QoSCFhV/DDfSmyfFIHjPjFBj957219+V3jTZYZ2rf9PmDtNOeZWAE3p3vlp8xb02XGpd0v6nTUPbsA==", "requires": { - "@nomicfoundation/ethereumjs-rlp": "^4.0.0-beta.2", + "@chainsafe/ssz": "^0.10.0", + "@nomicfoundation/ethereumjs-rlp": "5.0.1", "ethereum-cryptography": "0.1.3" }, "dependencies": { + "@chainsafe/persistent-merkle-tree": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/@chainsafe/persistent-merkle-tree/-/persistent-merkle-tree-0.5.0.tgz", + "integrity": "sha512-l0V1b5clxA3iwQLXP40zYjyZYospQLZXzBVIhhr9kDg/1qHZfzzHw0jj4VPBijfYCArZDlPkRi1wZaV2POKeuw==", + "requires": { + "@chainsafe/as-sha256": "^0.3.1" + } + }, + "@chainsafe/ssz": { + "version": "0.10.2", + "resolved": "https://registry.npmjs.org/@chainsafe/ssz/-/ssz-0.10.2.tgz", + "integrity": "sha512-/NL3Lh8K+0q7A3LsiFq09YXS9fPE+ead2rr7vM2QK8PLzrNsw3uqrif9bpRX5UxgeRjM+vYi+boCM3+GM4ovXg==", + "requires": { + "@chainsafe/as-sha256": "^0.3.1", + "@chainsafe/persistent-merkle-tree": "^0.5.0" + } + }, "ethereum-cryptography": { "version": "0.1.3", "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-0.1.3.tgz", @@ -31802,24 +34431,21 @@ } }, "@nomicfoundation/ethereumjs-vm": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/@nomicfoundation/ethereumjs-vm/-/ethereumjs-vm-6.0.0.tgz", - "integrity": "sha512-JMPxvPQ3fzD063Sg3Tp+UdwUkVxMoo1uML6KSzFhMH3hoQi/LMuXBoEHAoW83/vyNS9BxEe6jm6LmT5xdeEJ6w==", - "requires": { - "@nomicfoundation/ethereumjs-block": "^4.0.0", - "@nomicfoundation/ethereumjs-blockchain": "^6.0.0", - "@nomicfoundation/ethereumjs-common": "^3.0.0", - "@nomicfoundation/ethereumjs-evm": "^1.0.0", - "@nomicfoundation/ethereumjs-rlp": "^4.0.0", - "@nomicfoundation/ethereumjs-statemanager": "^1.0.0", - "@nomicfoundation/ethereumjs-trie": "^5.0.0", - "@nomicfoundation/ethereumjs-tx": "^4.0.0", - "@nomicfoundation/ethereumjs-util": "^8.0.0", - "@types/async-eventemitter": "^0.2.1", - "async-eventemitter": "^0.2.4", + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/@nomicfoundation/ethereumjs-vm/-/ethereumjs-vm-7.0.1.tgz", + "integrity": "sha512-rArhyn0jPsS/D+ApFsz3yVJMQ29+pVzNZ0VJgkzAZ+7FqXSRtThl1C1prhmlVr3YNUlfpZ69Ak+RUT4g7VoOuQ==", + "requires": { + "@nomicfoundation/ethereumjs-block": "5.0.1", + "@nomicfoundation/ethereumjs-blockchain": "7.0.1", + "@nomicfoundation/ethereumjs-common": "4.0.1", + "@nomicfoundation/ethereumjs-evm": "2.0.1", + "@nomicfoundation/ethereumjs-rlp": "5.0.1", + "@nomicfoundation/ethereumjs-statemanager": "2.0.1", + "@nomicfoundation/ethereumjs-trie": "6.0.1", + "@nomicfoundation/ethereumjs-tx": "5.0.1", + "@nomicfoundation/ethereumjs-util": "9.0.1", "debug": "^4.3.3", "ethereum-cryptography": "0.1.3", - "functional-red-black-tree": "^1.0.1", "mcl-wasm": "^0.7.1", "rustbn.js": "~0.2.0" }, @@ -31942,7 +34568,6 @@ "version": "2.0.2", "resolved": "https://registry.npmjs.org/@nomiclabs/hardhat-docker/-/hardhat-docker-2.0.2.tgz", "integrity": "sha512-XgGEpRT3wlA1VslyB57zyAHV+oll8KnV1TjwnxxC1tpAL04/lbdwpdO5KxInVN8irMSepqFpsiSkqlcnvbE7Ng==", - "dev": true, "requires": { "dockerode": "^2.5.8", "fs-extra": "^7.0.1", @@ -31953,7 +34578,6 @@ "version": "1.2.3", "resolved": "https://registry.npmjs.org/bl/-/bl-1.2.3.tgz", "integrity": "sha512-pvcNpa0UU69UT341rO6AYy4FVAIkUHuZXRIWbq+zHnsVcRzDDjIAhGuuYoi0d//cwIwtt4pkpKycWEfjdV+vww==", - "dev": true, "requires": { "readable-stream": "^2.3.5", "safe-buffer": "^5.1.1" @@ -31962,14 +34586,12 @@ "isarray": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", - "dev": true + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==" }, "readable-stream": { "version": "2.3.8", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", - "dev": true, "requires": { "core-util-is": "~1.0.0", "inherits": "~2.0.3", @@ -31984,7 +34606,6 @@ "version": "1.1.1", "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, "requires": { "safe-buffer": "~5.1.0" } @@ -31995,7 +34616,6 @@ "version": "3.2.7", "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", - "dev": true, "requires": { "ms": "^2.1.1" } @@ -32004,7 +34624,6 @@ "version": "1.0.9", "resolved": "https://registry.npmjs.org/docker-modem/-/docker-modem-1.0.9.tgz", "integrity": "sha512-lVjqCSCIAUDZPAZIeyM125HXfNvOmYYInciphNrLrylUtKyW66meAjSPXWchKVzoIYZx69TPnAepVSSkeawoIw==", - "dev": true, "requires": { "debug": "^3.2.6", "JSONStream": "1.3.2", @@ -32016,7 +34635,6 @@ "version": "2.5.8", "resolved": "https://registry.npmjs.org/dockerode/-/dockerode-2.5.8.tgz", "integrity": "sha512-+7iOUYBeDTScmOmQqpUYQaE7F4vvIt6+gIZNHWhqAQEI887tiPFB9OvXI/HzQYqfUNvukMK+9myLW63oTJPZpw==", - "dev": true, "requires": { "concat-stream": "~1.6.2", "docker-modem": "^1.0.8", @@ -32027,7 +34645,6 @@ "version": "7.0.1", "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-7.0.1.tgz", "integrity": "sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==", - "dev": true, "requires": { "graceful-fs": "^4.1.2", "jsonfile": "^4.0.0", @@ -32037,14 +34654,12 @@ "isarray": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", - "integrity": "sha512-D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ==", - "dev": true + "integrity": "sha512-D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ==" }, "jsonfile": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", "integrity": "sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==", - "dev": true, "requires": { "graceful-fs": "^4.1.6" } @@ -32053,7 +34668,6 @@ "version": "1.3.2", "resolved": "https://registry.npmjs.org/JSONStream/-/JSONStream-1.3.2.tgz", "integrity": "sha512-mn0KSip7N4e0UDPZHnqDsHECo5uGQrixQKnAskOM1BIB8hd7QKbd6il8IPRPudPHOeHiECoCFqhyMaRO9+nWyA==", - "dev": true, "requires": { "jsonparse": "^1.2.0", "through": ">=2.2.7 <3" @@ -32063,7 +34677,6 @@ "version": "1.0.3", "resolved": "https://registry.npmjs.org/pump/-/pump-1.0.3.tgz", "integrity": "sha512-8k0JupWme55+9tCVE+FS5ULT3K6AbgqrGa58lTT49RpyfwwcGedHqaC5LlQNdEAumn/wFsu6aPwkuPMioy8kqw==", - "dev": true, "requires": { "end-of-stream": "^1.1.0", "once": "^1.3.1" @@ -32073,7 +34686,6 @@ "version": "1.0.34", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz", "integrity": "sha512-ok1qVCJuRkNmvebYikljxJA/UEsKwLl2nI1OmaqAu4/UE+h0wKCHok4XkL/gvi39OacXvw59RJUOFUkDib2rHg==", - "dev": true, "requires": { "core-util-is": "~1.0.0", "inherits": "~2.0.1", @@ -32084,20 +34696,17 @@ "safe-buffer": { "version": "5.1.2", "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" }, "string_decoder": { "version": "0.10.31", "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", - "integrity": "sha512-ev2QzSzWPYmy9GuqfIVildA4OdcGLeFZQrq5ys6RtiuF+RQQiZWr8TZNyAcuVXyQRYfEO+MsoB/1BuQVhOJuoQ==", - "dev": true + "integrity": "sha512-ev2QzSzWPYmy9GuqfIVildA4OdcGLeFZQrq5ys6RtiuF+RQQiZWr8TZNyAcuVXyQRYfEO+MsoB/1BuQVhOJuoQ==" }, "tar-fs": { "version": "1.16.3", "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-1.16.3.tgz", "integrity": "sha512-NvCeXpYx7OsmOh8zIOP/ebG55zZmxLE0etfWRbWok+q2Qo8x/vOR/IJT1taADXPe+jsiu9axDb3X4B+iIgNlKw==", - "dev": true, "requires": { "chownr": "^1.0.1", "mkdirp": "^0.5.1", @@ -32109,7 +34718,6 @@ "version": "1.6.2", "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-1.6.2.tgz", "integrity": "sha512-rzS0heiNf8Xn7/mpdSVVSMAWAoy9bfb1WOTYC78Z0UQKeKa/CWS8FOq0lKGNa8DWKAn9gxjCvMLYc5PGXYlK2A==", - "dev": true, "requires": { "bl": "^1.0.0", "buffer-alloc": "^1.2.0", @@ -32123,14 +34731,12 @@ "isarray": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", - "dev": true + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==" }, "readable-stream": { "version": "2.3.8", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", - "dev": true, "requires": { "core-util-is": "~1.0.0", "inherits": "~2.0.3", @@ -32145,7 +34751,6 @@ "version": "1.1.1", "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, "requires": { "safe-buffer": "~5.1.0" } @@ -32155,21 +34760,20 @@ "universalify": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", - "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", - "dev": true + "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==" } } }, "@nomiclabs/hardhat-ethers": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/@nomiclabs/hardhat-ethers/-/hardhat-ethers-2.2.1.tgz", - "integrity": "sha512-RHWYwnxryWR8hzRmU4Jm/q4gzvXpetUOJ4OPlwH2YARcDB+j79+yAYCwO0lN1SUOb4++oOTJEe6AWLEc42LIvg==", + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/@nomiclabs/hardhat-ethers/-/hardhat-ethers-2.2.3.tgz", + "integrity": "sha512-YhzPdzb612X591FOe68q+qXVXGG2ANZRvDo0RRUtimev85rCrAlv/TLMEZw5c+kq9AbzocLTVX/h2jVIFPL9Xg==", "requires": {} }, "@nomiclabs/hardhat-etherscan": { - "version": "3.1.4", - "resolved": "https://registry.npmjs.org/@nomiclabs/hardhat-etherscan/-/hardhat-etherscan-3.1.4.tgz", - "integrity": "sha512-fw8JCfukf6MdIGoySRmSftlM2wBgoaSbWQZgiYfD/KTeaSFEWCdMpuPZcLSBXtwtnQyyWDs07Lo7fL8HSqtD2Q==", + "version": "3.1.7", + "resolved": "https://registry.npmjs.org/@nomiclabs/hardhat-etherscan/-/hardhat-etherscan-3.1.7.tgz", + "integrity": "sha512-tZ3TvSgpvsQ6B6OGmo1/Au6u8BrAkvs1mIC/eURA3xgIfznUZBhmpne8hv7BXUzw9xNL3fXdpOYgOQlVMTcoHQ==", "dev": true, "requires": { "@ethersproject/abi": "^5.1.2", @@ -32181,7 +34785,7 @@ "lodash": "^4.17.11", "semver": "^6.3.0", "table": "^6.8.0", - "undici": "^5.4.0" + "undici": "^5.14.0" }, "dependencies": { "ansi-styles": { @@ -32331,9 +34935,9 @@ } }, "@nomiclabs/hardhat-vyper": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/@nomiclabs/hardhat-vyper/-/hardhat-vyper-3.0.2.tgz", - "integrity": "sha512-xU5N9fiKEYWY5euIt01/bKGZ4WrJUgvPzYWns4BLy4ivFmD7Jd7pbuT2HaGPolNVRXzawIEMQP29s8Cjq86NzQ==", + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@nomiclabs/hardhat-vyper/-/hardhat-vyper-3.0.3.tgz", + "integrity": "sha512-WzpXACy7d1AsEmanAOmEqqxI4wrIvDx6q6k07Xb68Dc4JB/+9gKb6kz6UF0Qviq8vYUVfJ8YRpyAjHVZ2uQFlg==", "dev": true, "requires": { "debug": "^4.1.1", @@ -32378,26 +34982,11 @@ } }, "@nomiclabs/hardhat-waffle": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/@nomiclabs/hardhat-waffle/-/hardhat-waffle-2.0.3.tgz", - "integrity": "sha512-049PHSnI1CZq6+XTbrMbMv5NaL7cednTfPenx02k3cEh8wBMLa6ys++dBETJa6JjfwgA9nBhhHQ173LJv6k2Pg==", + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@nomiclabs/hardhat-waffle/-/hardhat-waffle-2.0.5.tgz", + "integrity": "sha512-U1RH9OQ1mWYQfb+moX5aTgGjpVVlOcpiFI47wwnaGG4kLhcTy90cNiapoqZenxcRAITVbr0/+QSduINL5EsUIQ==", "dev": true, - "requires": { - "@types/sinon-chai": "^3.2.3", - "@types/web3": "1.0.19" - }, - "dependencies": { - "@types/web3": { - "version": "1.0.19", - "resolved": "https://registry.npmjs.org/@types/web3/-/web3-1.0.19.tgz", - "integrity": "sha512-fhZ9DyvDYDwHZUp5/STa9XW2re0E8GxoioYJ4pEUZ13YHpApSagixj7IAdoYH5uAK+UalGq6Ml8LYzmgRA/q+A==", - "dev": true, - "requires": { - "@types/bn.js": "*", - "@types/underscore": "*" - } - } - } + "requires": {} }, "@nomiclabs/hardhat-web3": { "version": "2.0.0", @@ -32530,9 +35119,14 @@ } }, "@openzeppelin/contracts": { - "version": "4.8.2", - "resolved": "https://registry.npmjs.org/@openzeppelin/contracts/-/contracts-4.8.2.tgz", - "integrity": "sha512-kEUOgPQszC0fSYWpbh2kT94ltOJwj1qfT2DWo+zVttmGmf97JZ99LspePNaeeaLhCImaHVeBbjaQFZQn7+Zc5g==" + "version": "4.8.3", + "resolved": "https://registry.npmjs.org/@openzeppelin/contracts/-/contracts-4.8.3.tgz", + "integrity": "sha512-bQHV8R9Me8IaJoJ2vPG4rXcL7seB7YVuskr4f+f5RyOStSZetwzkWtoqDMl5erkBJy0lDRUnIR2WIkPiC0GJlg==" + }, + "@openzeppelin/contracts-upgradeable": { + "version": "4.8.3", + "resolved": "https://registry.npmjs.org/@openzeppelin/contracts-upgradeable/-/contracts-upgradeable-4.8.3.tgz", + "integrity": "sha512-SXDRl7HKpl2WDoJpn7CK/M9U4Z8gNXDHHChAKh0Iz+Wew3wu6CmFYBeie3je8V0GSXZAIYYwUktSrnW/kwVPtg==" }, "@openzeppelin/contracts-v0.7": { "version": "npm:@openzeppelin/contracts@3.4.2", @@ -32540,14 +35134,16 @@ "integrity": "sha512-z0zMCjyhhp4y7XKAcDAi3Vgms4T2PstwBdahiO0+9NaGICQKjynK3wduSRplTgk4LXmoO1yfDGO5RbjKYxtuxA==" }, "@openzeppelin/hardhat-upgrades": { - "version": "1.22.0", - "resolved": "https://registry.npmjs.org/@openzeppelin/hardhat-upgrades/-/hardhat-upgrades-1.22.0.tgz", - "integrity": "sha512-1qyZnDaxl0C8tne7ykNRa/fxw3FrNCY2M3fGuCiQW5DDkJoXhLgm3JVsXwl6X7q9mQSrik4vgBbI3ErmxmZTYg==", + "version": "1.26.0", + "resolved": "https://registry.npmjs.org/@openzeppelin/hardhat-upgrades/-/hardhat-upgrades-1.26.0.tgz", + "integrity": "sha512-ggCvdIf7A9QcMedCaswecgt3N7hacx3qYOn+4bNPqMAwslo/SJ9vN4AhV0VWkDcY4CqFFou3RFQmDWNeLMBX9A==", "dev": true, "requires": { - "@openzeppelin/upgrades-core": "^1.20.0", + "@openzeppelin/upgrades-core": "^1.26.2", "chalk": "^4.1.0", "debug": "^4.1.1", + "defender-base-client": "^1.44.0", + "platform-deploy-client": "^0.6.0", "proper-lockfile": "^4.1.1" } }, @@ -32592,9 +35188,9 @@ } }, "@openzeppelin/upgrades-core": { - "version": "1.20.1", - "resolved": "https://registry.npmjs.org/@openzeppelin/upgrades-core/-/upgrades-core-1.20.1.tgz", - "integrity": "sha512-GXvqLkMNY1dGj9BAIXiqYjdj/qgpoeTed+pH2OL4UOqMlxIh8yIYdkLE9wOWiUVVr0rhUGqaoaJ9NeFLlVzBQQ==", + "version": "1.26.2", + "resolved": "https://registry.npmjs.org/@openzeppelin/upgrades-core/-/upgrades-core-1.26.2.tgz", + "integrity": "sha512-TJORrgyun5qflPos/47P3j61gDw+7W+tEirSBOYRxfVL1WGjX1n8iaLrijPIqzyeS1MKguN1nckAMspQ4SKrxw==", "dev": true, "requires": { "cbor": "^8.0.0", @@ -32699,9 +35295,9 @@ "optional": true }, "@redux-saga/core": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/@redux-saga/core/-/core-1.2.2.tgz", - "integrity": "sha512-0qr5oleOAmI5WoZLRA6FEa30M4qKZcvx+ZQOQw+RqFeH8t20bvhE329XSPsNfTVP8C6qyDsXOSjuoV+g3+8zkg==", + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/@redux-saga/core/-/core-1.2.3.tgz", + "integrity": "sha512-U1JO6ncFBAklFTwoQ3mjAeQZ6QGutsJzwNBjgVLSWDpZTRhobUzuVDS1qH3SKGJD8fvqoaYOjp6XJ3gCmeZWgA==", "requires": { "@babel/runtime": "^7.6.3", "@redux-saga/deferred": "^1.2.1", @@ -32714,9 +35310,9 @@ }, "dependencies": { "redux": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/redux/-/redux-4.2.0.tgz", - "integrity": "sha512-oSBmcKKIuIR4ME29/AeNUnl5L+hvBq7OaJWzaptTQJAntaPvxIJqfnjbaEiCzzaIz+XmVILfqAM3Ob0aXLPfjA==", + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/redux/-/redux-4.2.1.tgz", + "integrity": "sha512-LAUYz4lc+Do8/g7aeRa8JkyDErK6ekstQaqWQrNRW//MY1TvCEpMtpTWvlQ+FPbWCx+Xixu/6SHt5N0HR+SB4w==", "requires": { "@babel/runtime": "^7.9.2" } @@ -33016,9 +35612,9 @@ } }, "@solana/spl-token": { - "version": "0.3.6", - "resolved": "https://registry.npmjs.org/@solana/spl-token/-/spl-token-0.3.6.tgz", - "integrity": "sha512-P9pTXjDIRvVbjr3J0mCnSamYqLnICeds7IoH1/Ro2R9OBuOHdp5pqKZoscfZ3UYrgnCWUc1bc9M2m/YPHjw+1g==", + "version": "0.3.7", + "resolved": "https://registry.npmjs.org/@solana/spl-token/-/spl-token-0.3.7.tgz", + "integrity": "sha512-bKGxWTtIw6VDdCBngjtsGlKGLSmiu/8ghSt/IOYJV24BsymRbgq7r12GToeetpxmPaZYLddKwAz7+EwprLfkfg==", "requires": { "@solana/buffer-layout": "^4.0.0", "@solana/buffer-layout-utils": "^0.2.0", @@ -33026,36 +35622,31 @@ } }, "@solana/web3.js": { - "version": "1.73.0", - "resolved": "https://registry.npmjs.org/@solana/web3.js/-/web3.js-1.73.0.tgz", - "integrity": "sha512-YrgX3Py7ylh8NYkbanoINUPCj//bWUjYZ5/WPy9nQ9SK3Cl7QWCR+NmbDjmC/fTspZGR+VO9LTQslM++jr5PRw==", + "version": "1.76.0", + "resolved": "https://registry.npmjs.org/@solana/web3.js/-/web3.js-1.76.0.tgz", + "integrity": "sha512-aJtF/nTs+9St+KtTK/wgVJ+SinfjYzn+3w1ygYIPw8ST6LH+qHBn8XkodgDTwlv/xzNkaVz1kkUDOZ8BPXyZWA==", "requires": { "@babel/runtime": "^7.12.5", - "@noble/ed25519": "^1.7.0", - "@noble/hashes": "^1.1.2", - "@noble/secp256k1": "^1.6.3", + "@noble/curves": "^1.0.0", + "@noble/hashes": "^1.3.0", "@solana/buffer-layout": "^4.0.0", "agentkeepalive": "^4.2.1", "bigint-buffer": "^1.1.5", "bn.js": "^5.0.0", "borsh": "^0.7.0", "bs58": "^4.0.1", - "buffer": "6.0.1", + "buffer": "6.0.3", "fast-stable-stringify": "^1.0.0", "jayson": "^3.4.4", - "node-fetch": "2", - "rpc-websockets": "^7.5.0", + "node-fetch": "^2.6.7", + "rpc-websockets": "^7.5.1", "superstruct": "^0.14.2" }, "dependencies": { - "buffer": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.1.tgz", - "integrity": "sha512-rVAXBwEcEoYtxnHSO5iWyhzV/O1WMtkUYWlfdLS7FjU4PnSJJHEfHXi/uHPI5EwltmOA794gN3bm3/pzuctWjQ==", - "requires": { - "base64-js": "^1.3.1", - "ieee754": "^1.2.1" - } + "@noble/hashes": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.3.0.tgz", + "integrity": "sha512-ilHEACi9DwqJB0pw7kv+Apvh50jiiSyR/cQ3y4W7lOR5mhvn/50FLUfsnfJz0BDZtl/RR16kXvptiv6q1msYZg==" } } }, @@ -33076,36 +35667,37 @@ } }, "@truffle/abi-utils": { - "version": "0.3.6", - "resolved": "https://registry.npmjs.org/@truffle/abi-utils/-/abi-utils-0.3.6.tgz", - "integrity": "sha512-61aTH2QmwVA1INaPMufRHTsS6jsEhS+GCkuCDdvBDmwctSnCKGDOr185BGt65QrpMRxYmIoH6WFBSNMYxW9GRw==", + "version": "0.3.10", + "resolved": "https://registry.npmjs.org/@truffle/abi-utils/-/abi-utils-0.3.10.tgz", + "integrity": "sha512-Q3TXsF0NIct3KFLL2giF/alfSoKf5axyw+4wQdDRlihFrG1nbTBzWq+Q0ya6oHffZDida0NSpnJIf5IhFMV+JQ==", "requires": { "change-case": "3.0.2", "fast-check": "3.1.1", - "web3-utils": "1.8.1" + "web3-utils": "1.10.0" } }, "@truffle/blockchain-utils": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/@truffle/blockchain-utils/-/blockchain-utils-0.1.6.tgz", - "integrity": "sha512-SldoNRIFSm3+HMBnSc2jFsu5TWDkCN4X6vL3wrd0t6DIeF7nD6EoPPjxwbFSoqCnkkRxMuZeL6sUx7UMJS/wSA==", + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/@truffle/blockchain-utils/-/blockchain-utils-0.1.7.tgz", + "integrity": "sha512-1nibqGjEHC7KAyDThEFvbm2+EO8zAHee/VjCtxkYBE3ySwP50joh0QCEBjy7K/9z+icpMoDucfxmgaKToBFUgQ==", "dev": true }, "@truffle/code-utils": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/@truffle/code-utils/-/code-utils-3.0.1.tgz", - "integrity": "sha512-6cv318jVAvEvg7u7jFq1G6P6K1CMXKNG2btg2qgpmsTQURp4KrqeVrrZegYgx9l4hocpNZ8UAYc9Qw5ATrDg4g==", + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@truffle/code-utils/-/code-utils-3.0.2.tgz", + "integrity": "sha512-Q4FyYIX9G4GyMa8RJDk19kvgiyGZ1CGEx2RmVcXoCDZqEyiHLzqjvCRp+/fuBz2fv7szO6d+60LO1gLCGS1drQ==", "requires": { "cbor": "^5.2.0" } }, "@truffle/codec": { - "version": "0.14.11", - "resolved": "https://registry.npmjs.org/@truffle/codec/-/codec-0.14.11.tgz", - "integrity": "sha512-NgfMNYemgMXqoEcJA5ZsEhxChCwq33rSxtNxlececEH/1Nf0r+ryfrfmLlyPmv8f3jorVf1GWa0zI0AedGCGYQ==", + "version": "0.14.17", + "resolved": "https://registry.npmjs.org/@truffle/codec/-/codec-0.14.17.tgz", + "integrity": "sha512-kD4dD86huLeaBEq5R8D1zleJEu6NsXbyYLdXl1V1TKdiO8odw5CBC6Y/+wdu5d3t1dyEYrTbhn1dqknZa52pmw==", + "dev": true, "requires": { - "@truffle/abi-utils": "^0.3.6", - "@truffle/compile-common": "^0.9.1", + "@truffle/abi-utils": "^0.3.9", + "@truffle/compile-common": "^0.9.4", "big.js": "^6.0.3", "bn.js": "^5.1.3", "cbor": "^5.2.0", @@ -33113,13 +35705,14 @@ "lodash": "^4.17.21", "semver": "7.3.7", "utf8": "^3.0.0", - "web3-utils": "1.8.1" + "web3-utils": "1.8.2" }, "dependencies": { "lru-cache": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, "requires": { "yallist": "^4.0.0" } @@ -33128,35 +35721,59 @@ "version": "7.3.7", "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz", "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==", + "dev": true, "requires": { "lru-cache": "^6.0.0" } }, + "web3-utils": { + "version": "1.8.2", + "resolved": "https://registry.npmjs.org/web3-utils/-/web3-utils-1.8.2.tgz", + "integrity": "sha512-v7j6xhfLQfY7xQDrUP0BKbaNrmZ2/+egbqP9q3KYmOiPpnvAfol+32slgL0WX/5n8VPvKCK5EZ1HGrAVICSToA==", + "dev": true, + "requires": { + "bn.js": "^5.2.1", + "ethereum-bloom-filters": "^1.0.6", + "ethereumjs-util": "^7.1.0", + "ethjs-unit": "0.1.6", + "number-to-bn": "1.7.0", + "randombytes": "^2.1.0", + "utf8": "3.0.0" + } + }, "yallist": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true } } }, "@truffle/compile-common": { - "version": "0.9.1", - "resolved": "https://registry.npmjs.org/@truffle/compile-common/-/compile-common-0.9.1.tgz", - "integrity": "sha512-mhdkX6ExZImHSBO3jGm6aAn8NpVtMTdjq50jRXY/O59/ZNC0J9WpRapxrAKUVNc+XydMdBlfeEpXoqTJg7cbXw==", + "version": "0.9.4", + "resolved": "https://registry.npmjs.org/@truffle/compile-common/-/compile-common-0.9.4.tgz", + "integrity": "sha512-mnqJB/hLiPHNf+WKwt/2MH6lv34xSG/SFCib7+ckAklutUqVLeFo8EwQxinuHNkU7LY0C+YgZXhK1WTCO5YRJQ==", "requires": { - "@truffle/error": "^0.1.1", + "@truffle/error": "^0.2.0", "colors": "1.4.0" + }, + "dependencies": { + "@truffle/error": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/@truffle/error/-/error-0.2.0.tgz", + "integrity": "sha512-Fe0/z4WWb7IP2gBnv3l6zqP87Y0kSMs7oiSLakKJq17q3GUunrHSdioKuNspdggxkXIBhEQLhi8C+LJdwmHKWQ==" + } } }, "@truffle/config": { - "version": "1.3.47", - "resolved": "https://registry.npmjs.org/@truffle/config/-/config-1.3.47.tgz", - "integrity": "sha512-L7Gh+HC7xRVGF/rrZoUnJK7pjrTJpnmnSSo+Dt1wGQXHWSn5eq6pMoRzjmp6OgKovrOe0uyBAjFUOlIgVpZwXQ==", + "version": "1.3.56", + "resolved": "https://registry.npmjs.org/@truffle/config/-/config-1.3.56.tgz", + "integrity": "sha512-2wg6zfaUlP3iZP9jHugx3WsyJ2dbIB+nEBULPK5YVbSkqBfXrzW0b9RJYQvyuk/AyFrp/7ycD4r5LnFLq1IHZA==", "optional": true, "requires": { - "@truffle/error": "^0.1.1", - "@truffle/events": "^0.1.20", - "@truffle/provider": "^0.3.1", + "@truffle/error": "^0.2.0", + "@truffle/events": "^0.1.23", + "@truffle/provider": "^0.3.9", "conf": "^10.1.2", "debug": "^4.3.1", "find-up": "^2.1.0", @@ -33164,6 +35781,12 @@ "original-require": "^1.0.1" }, "dependencies": { + "@truffle/error": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/@truffle/error/-/error-0.2.0.tgz", + "integrity": "sha512-Fe0/z4WWb7IP2gBnv3l6zqP87Y0kSMs7oiSLakKJq17q3GUunrHSdioKuNspdggxkXIBhEQLhi8C+LJdwmHKWQ==", + "optional": true + }, "find-up": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", @@ -33216,33 +35839,84 @@ } }, "@truffle/contract": { - "version": "4.6.10", - "resolved": "https://registry.npmjs.org/@truffle/contract/-/contract-4.6.10.tgz", - "integrity": "sha512-69IZSXeQKRP3EutILqe+vLY5A5gUpeXUiZhm/Fy/qHHkP238vMjtOkTZGkY6bonYqmgk+vDY7KSYSYKzDNPdCA==", + "version": "4.6.20", + "resolved": "https://registry.npmjs.org/@truffle/contract/-/contract-4.6.20.tgz", + "integrity": "sha512-s7Mbc37L/CF5Apy/cjPnalkgACmG9tTAmcIW28cIZLRLOUAze18pqhtdHryxAQhEOtKGaDAho6TriqL7/74uHw==", "dev": true, "requires": { "@ensdomains/ensjs": "^2.1.0", - "@truffle/blockchain-utils": "^0.1.6", - "@truffle/contract-schema": "^3.4.11", - "@truffle/debug-utils": "^6.0.42", - "@truffle/error": "^0.1.1", - "@truffle/interface-adapter": "^0.5.26", + "@truffle/blockchain-utils": "^0.1.7", + "@truffle/contract-schema": "^3.4.13", + "@truffle/debug-utils": "^6.0.48", + "@truffle/error": "^0.2.0", + "@truffle/interface-adapter": "^0.5.32", "bignumber.js": "^7.2.1", "debug": "^4.3.1", "ethers": "^4.0.32", - "web3": "1.8.1", - "web3-core-helpers": "1.8.1", - "web3-core-promievent": "1.8.1", - "web3-eth-abi": "1.8.1", - "web3-utils": "1.8.1" + "web3": "1.8.2", + "web3-core-helpers": "1.8.2", + "web3-core-promievent": "1.8.2", + "web3-eth-abi": "1.8.2", + "web3-utils": "1.8.2" }, "dependencies": { + "@ethereumjs/common": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/@ethereumjs/common/-/common-2.5.0.tgz", + "integrity": "sha512-DEHjW6e38o+JmB/NO3GZBpW4lpaiBpkFgXF6jLcJ6gETBYpEyaA5nTimsWBUJR3Vmtm/didUEbNjajskugZORg==", + "dev": true, + "requires": { + "crc-32": "^1.2.0", + "ethereumjs-util": "^7.1.1" + } + }, + "@ethereumjs/tx": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/@ethereumjs/tx/-/tx-3.3.2.tgz", + "integrity": "sha512-6AaJhwg4ucmwTvw/1qLaZUX5miWrwZ4nLOUsKyb/HtzS3BMw/CasKhdi1ims9mBKeK9sOJCH4qGKOBGyJCeeog==", + "dev": true, + "requires": { + "@ethereumjs/common": "^2.5.0", + "ethereumjs-util": "^7.1.2" + } + }, + "@truffle/error": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/@truffle/error/-/error-0.2.0.tgz", + "integrity": "sha512-Fe0/z4WWb7IP2gBnv3l6zqP87Y0kSMs7oiSLakKJq17q3GUunrHSdioKuNspdggxkXIBhEQLhi8C+LJdwmHKWQ==", + "dev": true + }, + "@types/node": { + "version": "12.20.55", + "resolved": "https://registry.npmjs.org/@types/node/-/node-12.20.55.tgz", + "integrity": "sha512-J8xLz7q2OFulZ2cyGTLE1TbbZcjpno7FaN6zdJNrgAdrJ+DZzh/uFR6YrTb4C+nXakvud8Q4+rbhoIWlYQbUFQ==", + "dev": true + }, "bignumber.js": { "version": "7.2.1", "resolved": "https://registry.npmjs.org/bignumber.js/-/bignumber.js-7.2.1.tgz", "integrity": "sha512-S4XzBk5sMB+Rcb/LNcpzXr57VRTxgAvaAEDAl1AwRx27j00hT84O6OkteE7u8UB3NuaaygCRrEpqox4uDOrbdQ==", "dev": true }, + "eth-lib": { + "version": "0.2.8", + "resolved": "https://registry.npmjs.org/eth-lib/-/eth-lib-0.2.8.tgz", + "integrity": "sha512-ArJ7x1WcWOlSpzdoTBX8vkwlkSQ85CjjifSZtV4co64vWxSV8geWfPI9x4SVYu3DSxnX4yWFVTtGL+j9DUFLNw==", + "dev": true, + "requires": { + "bn.js": "^4.11.6", + "elliptic": "^6.4.0", + "xhr-request-promise": "^0.1.2" + }, + "dependencies": { + "bn.js": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", + "dev": true + } + } + }, "ethers": { "version": "4.0.49", "resolved": "https://registry.npmjs.org/ethers/-/ethers-4.0.49.tgz", @@ -33268,6 +35942,12 @@ } } }, + "eventemitter3": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.4.tgz", + "integrity": "sha512-rlaVLnVxtxvoyLsQQFBx53YmXHDxRIzzTLbdfxqi4yocpSjAxXwkU0cScM5JgSKMqEhrZpnvQ2D9gjylR0AimQ==", + "dev": true + }, "hash.js": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.3.tgz", @@ -33301,13 +35981,267 @@ "resolved": "https://registry.npmjs.org/uuid/-/uuid-2.0.1.tgz", "integrity": "sha512-nWg9+Oa3qD2CQzHIP4qKUqwNfzKn8P0LtFhotaCTFchsV7ZfDhAybeip/HZVeMIpZi9JgY1E3nUlwaCmZT1sEg==", "dev": true + }, + "web3": { + "version": "1.8.2", + "resolved": "https://registry.npmjs.org/web3/-/web3-1.8.2.tgz", + "integrity": "sha512-92h0GdEHW9wqDICQQKyG4foZBYi0OQkyg4CRml2F7XBl/NG+fu9o6J19kzfFXzSBoA4DnJXbyRgj/RHZv5LRiw==", + "dev": true, + "requires": { + "web3-bzz": "1.8.2", + "web3-core": "1.8.2", + "web3-eth": "1.8.2", + "web3-eth-personal": "1.8.2", + "web3-net": "1.8.2", + "web3-shh": "1.8.2", + "web3-utils": "1.8.2" + } + }, + "web3-bzz": { + "version": "1.8.2", + "resolved": "https://registry.npmjs.org/web3-bzz/-/web3-bzz-1.8.2.tgz", + "integrity": "sha512-1EEnxjPnFnvNWw3XeeKuTR8PBxYd0+XWzvaLK7OJC/Go9O8llLGxrxICbKV+8cgIE0sDRBxiYx02X+6OhoAQ9w==", + "dev": true, + "requires": { + "@types/node": "^12.12.6", + "got": "12.1.0", + "swarm-js": "^0.1.40" + } + }, + "web3-core": { + "version": "1.8.2", + "resolved": "https://registry.npmjs.org/web3-core/-/web3-core-1.8.2.tgz", + "integrity": "sha512-DJTVEAYcNqxkqruJE+Rxp3CIv0y5AZMwPHQmOkz/cz+MM75SIzMTc0AUdXzGyTS8xMF8h3YWMQGgGEy8SBf1PQ==", + "dev": true, + "requires": { + "@types/bn.js": "^5.1.0", + "@types/node": "^12.12.6", + "bignumber.js": "^9.0.0", + "web3-core-helpers": "1.8.2", + "web3-core-method": "1.8.2", + "web3-core-requestmanager": "1.8.2", + "web3-utils": "1.8.2" + }, + "dependencies": { + "bignumber.js": { + "version": "9.1.1", + "resolved": "https://registry.npmjs.org/bignumber.js/-/bignumber.js-9.1.1.tgz", + "integrity": "sha512-pHm4LsMJ6lzgNGVfZHjMoO8sdoRhOzOH4MLmY65Jg70bpxCKu5iOHNJyfF6OyvYw7t8Fpf35RuzUyqnQsj8Vig==", + "dev": true + } + } + }, + "web3-core-method": { + "version": "1.8.2", + "resolved": "https://registry.npmjs.org/web3-core-method/-/web3-core-method-1.8.2.tgz", + "integrity": "sha512-1qnr5mw5wVyULzLOrk4B+ryO3gfGjGd/fx8NR+J2xCGLf1e6OSjxT9vbfuQ3fErk/NjSTWWreieYWLMhaogcRA==", + "dev": true, + "requires": { + "@ethersproject/transactions": "^5.6.2", + "web3-core-helpers": "1.8.2", + "web3-core-promievent": "1.8.2", + "web3-core-subscriptions": "1.8.2", + "web3-utils": "1.8.2" + } + }, + "web3-core-requestmanager": { + "version": "1.8.2", + "resolved": "https://registry.npmjs.org/web3-core-requestmanager/-/web3-core-requestmanager-1.8.2.tgz", + "integrity": "sha512-p1d090RYs5Mu7DK1yyc3GCBVZB/03rBtFhYFoS2EruGzOWs/5Q0grgtpwS/DScdRAm8wB8mYEBhY/RKJWF6B2g==", + "dev": true, + "requires": { + "util": "^0.12.5", + "web3-core-helpers": "1.8.2", + "web3-providers-http": "1.8.2", + "web3-providers-ipc": "1.8.2", + "web3-providers-ws": "1.8.2" + } + }, + "web3-core-subscriptions": { + "version": "1.8.2", + "resolved": "https://registry.npmjs.org/web3-core-subscriptions/-/web3-core-subscriptions-1.8.2.tgz", + "integrity": "sha512-vXQogHDmAIQcKpXvGiMddBUeP9lnKgYF64+yQJhPNE5PnWr1sAibXuIPV7mIPihpFr/n/DORRj6Wh1pUv9zaTw==", + "dev": true, + "requires": { + "eventemitter3": "4.0.4", + "web3-core-helpers": "1.8.2" + } + }, + "web3-eth": { + "version": "1.8.2", + "resolved": "https://registry.npmjs.org/web3-eth/-/web3-eth-1.8.2.tgz", + "integrity": "sha512-JoTiWWc4F4TInpbvDUGb0WgDYJsFhuIjJlinc5ByjWD88Gvh+GKLsRjjFdbqe5YtwIGT4NymwoC5LQd1K6u/QQ==", + "dev": true, + "requires": { + "web3-core": "1.8.2", + "web3-core-helpers": "1.8.2", + "web3-core-method": "1.8.2", + "web3-core-subscriptions": "1.8.2", + "web3-eth-abi": "1.8.2", + "web3-eth-accounts": "1.8.2", + "web3-eth-contract": "1.8.2", + "web3-eth-ens": "1.8.2", + "web3-eth-iban": "1.8.2", + "web3-eth-personal": "1.8.2", + "web3-net": "1.8.2", + "web3-utils": "1.8.2" + } + }, + "web3-eth-accounts": { + "version": "1.8.2", + "resolved": "https://registry.npmjs.org/web3-eth-accounts/-/web3-eth-accounts-1.8.2.tgz", + "integrity": "sha512-c367Ij63VCz9YdyjiHHWLFtN85l6QghgwMQH2B1eM/p9Y5lTlTX7t/Eg/8+f1yoIStXbk2w/PYM2lk+IkbqdLA==", + "dev": true, + "requires": { + "@ethereumjs/common": "2.5.0", + "@ethereumjs/tx": "3.3.2", + "eth-lib": "0.2.8", + "ethereumjs-util": "^7.1.5", + "scrypt-js": "^3.0.1", + "uuid": "^9.0.0", + "web3-core": "1.8.2", + "web3-core-helpers": "1.8.2", + "web3-core-method": "1.8.2", + "web3-utils": "1.8.2" + }, + "dependencies": { + "scrypt-js": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/scrypt-js/-/scrypt-js-3.0.1.tgz", + "integrity": "sha512-cdwTTnqPu0Hyvf5in5asVdZocVDTNRmR7XEcJuIzMjJeSHybHl7vpB66AzwTaIg6CLSbtjcxc8fqcySfnTkccA==", + "dev": true + }, + "uuid": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.0.tgz", + "integrity": "sha512-MXcSTerfPa4uqyzStbRoTgt5XIe3x5+42+q1sDuy3R5MDk66URdLMOZe5aPX/SQd+kuYAh0FdP/pO28IkQyTeg==", + "dev": true + } + } + }, + "web3-eth-contract": { + "version": "1.8.2", + "resolved": "https://registry.npmjs.org/web3-eth-contract/-/web3-eth-contract-1.8.2.tgz", + "integrity": "sha512-ID5A25tHTSBNwOPjiXSVzxruz006ULRIDbzWTYIFTp7NJ7vXu/kynKK2ag/ObuTqBpMbobP8nXcA9b5EDkIdQA==", + "dev": true, + "requires": { + "@types/bn.js": "^5.1.0", + "web3-core": "1.8.2", + "web3-core-helpers": "1.8.2", + "web3-core-method": "1.8.2", + "web3-core-promievent": "1.8.2", + "web3-core-subscriptions": "1.8.2", + "web3-eth-abi": "1.8.2", + "web3-utils": "1.8.2" + } + }, + "web3-eth-ens": { + "version": "1.8.2", + "resolved": "https://registry.npmjs.org/web3-eth-ens/-/web3-eth-ens-1.8.2.tgz", + "integrity": "sha512-PWph7C/CnqdWuu1+SH4U4zdrK4t2HNt0I4XzPYFdv9ugE8EuojselioPQXsVGvjql+Nt3jDLvQvggPqlMbvwRw==", + "dev": true, + "requires": { + "content-hash": "^2.5.2", + "eth-ens-namehash": "2.0.8", + "web3-core": "1.8.2", + "web3-core-helpers": "1.8.2", + "web3-core-promievent": "1.8.2", + "web3-eth-abi": "1.8.2", + "web3-eth-contract": "1.8.2", + "web3-utils": "1.8.2" + } + }, + "web3-eth-personal": { + "version": "1.8.2", + "resolved": "https://registry.npmjs.org/web3-eth-personal/-/web3-eth-personal-1.8.2.tgz", + "integrity": "sha512-Vg4HfwCr7doiUF/RC+Jz0wT4+cYaXcOWMAW2AHIjHX6Z7Xwa8nrURIeQgeEE62qcEHAzajyAdB1u6bJyTfuCXw==", + "dev": true, + "requires": { + "@types/node": "^12.12.6", + "web3-core": "1.8.2", + "web3-core-helpers": "1.8.2", + "web3-core-method": "1.8.2", + "web3-net": "1.8.2", + "web3-utils": "1.8.2" + } + }, + "web3-net": { + "version": "1.8.2", + "resolved": "https://registry.npmjs.org/web3-net/-/web3-net-1.8.2.tgz", + "integrity": "sha512-1itkDMGmbgb83Dg9nporFes9/fxsU7smJ3oRXlFkg4ZHn8YJyP1MSQFPJWWwSc+GrcCFt4O5IrUTvEkHqE3xag==", + "dev": true, + "requires": { + "web3-core": "1.8.2", + "web3-core-method": "1.8.2", + "web3-utils": "1.8.2" + } + }, + "web3-providers-http": { + "version": "1.8.2", + "resolved": "https://registry.npmjs.org/web3-providers-http/-/web3-providers-http-1.8.2.tgz", + "integrity": "sha512-2xY94IIEQd16+b+vIBF4IC1p7GVaz9q4EUFscvMUjtEq4ru4Atdzjs9GP+jmcoo49p70II0UV3bqQcz0TQfVyQ==", + "dev": true, + "requires": { + "abortcontroller-polyfill": "^1.7.3", + "cross-fetch": "^3.1.4", + "es6-promise": "^4.2.8", + "web3-core-helpers": "1.8.2" + } + }, + "web3-providers-ipc": { + "version": "1.8.2", + "resolved": "https://registry.npmjs.org/web3-providers-ipc/-/web3-providers-ipc-1.8.2.tgz", + "integrity": "sha512-p6fqKVGFg+WiXGHWnB1hu43PbvPkDHTz4RgoEzbXugv5rtv5zfYLqm8Ba6lrJOS5ks9kGKR21a0y3NzE3u7V4w==", + "dev": true, + "requires": { + "oboe": "2.1.5", + "web3-core-helpers": "1.8.2" + } + }, + "web3-providers-ws": { + "version": "1.8.2", + "resolved": "https://registry.npmjs.org/web3-providers-ws/-/web3-providers-ws-1.8.2.tgz", + "integrity": "sha512-3s/4K+wHgbiN+Zrp9YjMq2eqAF6QGABw7wFftPdx+m5hWImV27/MoIx57c6HffNRqZXmCHnfWWFCNHHsi7wXnA==", + "dev": true, + "requires": { + "eventemitter3": "4.0.4", + "web3-core-helpers": "1.8.2", + "websocket": "^1.0.32" + } + }, + "web3-shh": { + "version": "1.8.2", + "resolved": "https://registry.npmjs.org/web3-shh/-/web3-shh-1.8.2.tgz", + "integrity": "sha512-uZ+3MAoNcaJsXXNCDnizKJ5viBNeHOFYsCbFhV755Uu52FswzTOw6DtE7yK9nYXMtIhiSgi7nwl1RYzP8pystw==", + "dev": true, + "requires": { + "web3-core": "1.8.2", + "web3-core-method": "1.8.2", + "web3-core-subscriptions": "1.8.2", + "web3-net": "1.8.2" + } + }, + "web3-utils": { + "version": "1.8.2", + "resolved": "https://registry.npmjs.org/web3-utils/-/web3-utils-1.8.2.tgz", + "integrity": "sha512-v7j6xhfLQfY7xQDrUP0BKbaNrmZ2/+egbqP9q3KYmOiPpnvAfol+32slgL0WX/5n8VPvKCK5EZ1HGrAVICSToA==", + "dev": true, + "requires": { + "bn.js": "^5.2.1", + "ethereum-bloom-filters": "^1.0.6", + "ethereumjs-util": "^7.1.0", + "ethjs-unit": "0.1.6", + "number-to-bn": "1.7.0", + "randombytes": "^2.1.0", + "utf8": "3.0.0" + } } } }, "@truffle/contract-schema": { - "version": "3.4.11", - "resolved": "https://registry.npmjs.org/@truffle/contract-schema/-/contract-schema-3.4.11.tgz", - "integrity": "sha512-wReyVZUPyU9Zy5PSCugBLG1nnruBmRAJ/gmoirQiJ9N2n+s1iGBTY49tkDqFMz3XUUE0kplfdb9YKZJlLkTWzQ==", + "version": "3.4.13", + "resolved": "https://registry.npmjs.org/@truffle/contract-schema/-/contract-schema-3.4.13.tgz", + "integrity": "sha512-emG7upuryYFrsPDbHqeASPWXL824M1tinhQwSPG0phSoa3g+RX9fUNNN/VPmF3tSkXLWUMhRnb7ehxnaCuRbZg==", "dev": true, "requires": { "ajv": "^6.10.0", @@ -33315,14 +36249,14 @@ } }, "@truffle/dashboard-message-bus-client": { - "version": "0.1.9", - "resolved": "https://registry.npmjs.org/@truffle/dashboard-message-bus-client/-/dashboard-message-bus-client-0.1.9.tgz", - "integrity": "sha512-5tzPkMMkjSrD5POt3odHKTMBCAe2pPNsWi19BtFd4vASLwvqWVd0B2oIjQLqMLe/fSDPnpCmMwb5OK0FR/IzAA==", + "version": "0.1.10", + "resolved": "https://registry.npmjs.org/@truffle/dashboard-message-bus-client/-/dashboard-message-bus-client-0.1.10.tgz", + "integrity": "sha512-r9GpdR96T8xzk2Z3Qq5lowixT6hQwDZ9F3D3oNjOv2AOwBrC7dGkt1Ra1FQRsABn4K7LUVvnjjn6rALlsatAdw==", "optional": true, "requires": { "@truffle/dashboard-message-bus-common": "^0.1.5", "@truffle/promise-tracker": "^0.1.5", - "axios": "0.27.2", + "axios": "1.2.4", "debug": "^4.3.1", "delay": "^5.0.0", "isomorphic-ws": "^4.0.1", @@ -33332,13 +36266,14 @@ }, "dependencies": { "axios": { - "version": "0.27.2", - "resolved": "https://registry.npmjs.org/axios/-/axios-0.27.2.tgz", - "integrity": "sha512-t+yRIyySRTp/wua5xEr+z1q60QmLq8ABsS5O9Me1AsE5dfKqgnCFzwiCZZ/cGNd1lq4/7akDWMxdhVlucjmnOQ==", + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/axios/-/axios-1.2.4.tgz", + "integrity": "sha512-lIQuCfBJvZB/Bv7+RWUqEJqNShGOVpk9v7P0ZWx5Ip0qY6u7JBAU6dzQPMLasU9vHL2uD8av/1FDJXj7n6c39w==", "optional": true, "requires": { - "follow-redirects": "^1.14.9", - "form-data": "^4.0.0" + "follow-redirects": "^1.15.0", + "form-data": "^4.0.0", + "proxy-from-env": "^1.1.0" } }, "form-data": { @@ -33368,16 +36303,16 @@ "optional": true }, "@truffle/db": { - "version": "2.0.10", - "resolved": "https://registry.npmjs.org/@truffle/db/-/db-2.0.10.tgz", - "integrity": "sha512-APlORen3CwilujWZFTNhsX8yRWbNj7ifhuaLckNaWOcQ0knE7nrjHf2pXCdgtgRLP9Ae91jWHm32+7eLYgYpZA==", + "version": "2.0.24", + "resolved": "https://registry.npmjs.org/@truffle/db/-/db-2.0.24.tgz", + "integrity": "sha512-p4UsUKd47/Iv2SJ2m24+ObIalb4Ljt7ysv3mY/gKvEIw3fKxSErPgxDKaC0l3kPOVaz8gfXkbWDGeuLf/f66+Q==", "optional": true, "requires": { "@graphql-tools/delegate": "^8.4.3", "@graphql-tools/schema": "^8.3.1", - "@truffle/abi-utils": "^0.3.6", - "@truffle/code-utils": "^3.0.1", - "@truffle/config": "^1.3.47", + "@truffle/abi-utils": "^0.3.10", + "@truffle/code-utils": "^3.0.2", + "@truffle/config": "^1.3.56", "abstract-leveldown": "^7.2.0", "apollo-server": "^3.11.0", "debug": "^4.3.1", @@ -33391,7 +36326,7 @@ "pouchdb-adapter-memory": "^7.1.1", "pouchdb-debug": "^7.1.1", "pouchdb-find": "^7.0.0", - "web3-utils": "1.8.1" + "web3-utils": "1.10.0" }, "dependencies": { "abstract-leveldown": { @@ -33438,25 +36373,25 @@ } }, "@truffle/db-loader": { - "version": "0.2.10", - "resolved": "https://registry.npmjs.org/@truffle/db-loader/-/db-loader-0.2.10.tgz", - "integrity": "sha512-07Vf1yuwJur78K4hgG//MGEvLL4ZAnEu6BBvGK/ZSJ/iIQjj9a4wgQgXrAKMsbPGNEtR7qy+0WpvOslpaDnQZQ==", + "version": "0.2.24", + "resolved": "https://registry.npmjs.org/@truffle/db-loader/-/db-loader-0.2.24.tgz", + "integrity": "sha512-ucnZqVb4Aw9fnsUnqwgKZiaDUcw2n6C4tuGyl2iVOr1Xpl+F5Cgrz1cfjJ1igdZrtZnmKl0tDvymt2YwPeeYgw==", "requires": { - "@truffle/db": "^2.0.10" + "@truffle/db": "^2.0.24" } }, "@truffle/debug-utils": { - "version": "6.0.42", - "resolved": "https://registry.npmjs.org/@truffle/debug-utils/-/debug-utils-6.0.42.tgz", - "integrity": "sha512-9v70tj+My0Z2UZJ9OsuUlfo4Dt2AJqAQa/YWtGe28H8zsi+o9Dca0RsKWecuprdllgzrEs7ad8QUtSINhwjIlg==", + "version": "6.0.48", + "resolved": "https://registry.npmjs.org/@truffle/debug-utils/-/debug-utils-6.0.48.tgz", + "integrity": "sha512-HdK/7eH5EFrcTPeZVEgKaKkkzuZ4xsrH8yw+EoLEsScLsOEuQeKynY61NctjuU93voATWrYmV99Sfb/MRq2i2g==", "dev": true, "requires": { - "@truffle/codec": "^0.14.11", + "@truffle/codec": "^0.14.17", "@trufflesuite/chromafi": "^3.0.0", "bn.js": "^5.1.3", "chalk": "^2.4.2", "debug": "^4.3.1", - "highlightjs-solidity": "^2.0.5" + "highlightjs-solidity": "^2.0.6" }, "dependencies": { "ansi-styles": { @@ -33518,13 +36453,14 @@ } }, "@truffle/debugger": { - "version": "11.0.21", - "resolved": "https://registry.npmjs.org/@truffle/debugger/-/debugger-11.0.21.tgz", - "integrity": "sha512-iYoa01CzFVFhusXrQM34cTRqKT7W2KHoyciYo14IUjPAnUk/i7DwB4zcTqOfgTyz36G2Yd92uYf8Rc2t0Sdv0w==", + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/@truffle/debugger/-/debugger-11.1.0.tgz", + "integrity": "sha512-ws3z3ktvW631W6zi9jd9O6+osF6jh+Z6naumIf9ySfAM1cdV4wTHd8iyYwEEc180pJinlc4oCZGvcr5cE97NVw==", "requires": { - "@truffle/abi-utils": "^0.3.6", - "@truffle/codec": "^0.14.11", - "@truffle/source-map-utils": "^1.3.103", + "@ensdomains/ensjs": "^2.1.0", + "@truffle/abi-utils": "^0.3.10", + "@truffle/codec": "^0.15.0", + "@truffle/source-map-utils": "^1.3.111", "bn.js": "^5.1.3", "debug": "^4.3.1", "json-pointer": "^0.6.1", @@ -33534,10 +36470,27 @@ "redux-saga": "1.0.0", "reselect-tree": "^1.3.7", "semver": "7.3.7", - "web3": "1.8.1", - "web3-eth-abi": "1.8.1" - }, - "dependencies": { + "web3": "1.10.0", + "web3-eth-abi": "1.10.0" + }, + "dependencies": { + "@truffle/codec": { + "version": "0.15.0", + "resolved": "https://registry.npmjs.org/@truffle/codec/-/codec-0.15.0.tgz", + "integrity": "sha512-FEcwtDUuMr85a9u39eqvNgmUgXDvIkwhJjMCCi/bC4/GmLisOpih8vAidDgdYMJldukMPaOX5XIIgsG5k615YA==", + "requires": { + "@truffle/abi-utils": "^0.3.10", + "@truffle/compile-common": "^0.9.4", + "big.js": "^6.0.3", + "bn.js": "^5.1.3", + "cbor": "^5.2.0", + "debug": "^4.3.1", + "lodash": "^4.17.21", + "semver": "7.3.7", + "utf8": "^3.0.0", + "web3-utils": "1.10.0" + } + }, "lru-cache": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", @@ -33554,6 +36507,15 @@ "lru-cache": "^6.0.0" } }, + "web3-eth-abi": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/web3-eth-abi/-/web3-eth-abi-1.10.0.tgz", + "integrity": "sha512-cwS+qRBWpJ43aI9L3JS88QYPfFcSJJ3XapxOQ4j40v6mk7ATpA8CVK1vGTzpihNlOfMVRBkR95oAj7oL6aiDOg==", + "requires": { + "@ethersproject/abi": "^5.6.3", + "web3-utils": "1.10.0" + } + }, "yallist": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", @@ -33564,25 +36526,26 @@ "@truffle/error": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/@truffle/error/-/error-0.1.1.tgz", - "integrity": "sha512-sE7c9IHIGdbK4YayH4BC8i8qMjoAOeg6nUXUDZZp8wlU21/EMpaG+CLx+KqcIPyR+GSWIW3Dm0PXkr2nlggFDA==" + "integrity": "sha512-sE7c9IHIGdbK4YayH4BC8i8qMjoAOeg6nUXUDZZp8wlU21/EMpaG+CLx+KqcIPyR+GSWIW3Dm0PXkr2nlggFDA==", + "dev": true }, "@truffle/events": { - "version": "0.1.20", - "resolved": "https://registry.npmjs.org/@truffle/events/-/events-0.1.20.tgz", - "integrity": "sha512-vqKCgyvYDBm/RmjglTMfGR3ZnVHkFEuhAxgQOsA2uqMOW0FonaMY6/paOddy/kSLfVBwFd8hwG53PyBAAwDhkA==", + "version": "0.1.23", + "resolved": "https://registry.npmjs.org/@truffle/events/-/events-0.1.23.tgz", + "integrity": "sha512-OIcOZXDCJPz9zzK4uTj0HxCqASNKVcs6g3Z9fT6sehGZRD4ubGHpQZoMchLBwXcggoDRApq2svTdghai624pLg==", "optional": true, "requires": { - "@truffle/dashboard-message-bus-client": "^0.1.9", + "@truffle/dashboard-message-bus-client": "^0.1.10", "@truffle/spinners": "^0.2.3", "debug": "^4.3.1", "emittery": "^0.4.1", - "web3-utils": "1.8.1" + "web3-utils": "1.10.0" } }, "@truffle/hdwallet": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/@truffle/hdwallet/-/hdwallet-0.1.1.tgz", - "integrity": "sha512-hKAZbB6HBo0L4hV/IsulCDiHF5eXCle8TuAhxe1auCIkwS6Dz6Z4BoA3JzekRwcj+dc1bibjdP1A4XOTo2ayqw==", + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/@truffle/hdwallet/-/hdwallet-0.1.2.tgz", + "integrity": "sha512-Q8Q0S+3VpCFOJQ9o/hr5juV4TJQ1bxoMJ+Eq9ZwTuhprxrhoCqimEZ0/A+D8Gcg5Nw7koQyzyrcqIhPmIVeK9A==", "requires": { "ethereum-cryptography": "1.1.2", "keccak": "3.0.2", @@ -33590,21 +36553,21 @@ } }, "@truffle/hdwallet-provider": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/@truffle/hdwallet-provider/-/hdwallet-provider-2.1.4.tgz", - "integrity": "sha512-oVpiQSu3JtaDuVHKLZ9Is3hxoCVFwlMjflCJyqTBXMhLmPMPpij4paxaUvXTpeUzGZJJGcBl2DVFhnmPshGrJQ==", + "version": "2.1.11", + "resolved": "https://registry.npmjs.org/@truffle/hdwallet-provider/-/hdwallet-provider-2.1.11.tgz", + "integrity": "sha512-niLNFG7JYsXCbZrDjvPs9bDln0ix71f1Xvr6Qm6zHHNr4Of+yKMTAs4lXHrY7ioyEPDLlS5yfOdj+S7RJCVt1w==", "requires": { "@ethereumjs/common": "^2.4.0", "@ethereumjs/tx": "^3.3.0", "@metamask/eth-sig-util": "4.0.1", - "@truffle/hdwallet": "^0.1.1", + "@truffle/hdwallet": "^0.1.2", "@types/ethereum-protocol": "^1.0.0", "@types/web3": "1.0.20", "@types/web3-provider-engine": "^14.0.0", "ethereum-cryptography": "1.1.2", "ethereum-protocol": "^1.0.1", "ethereumjs-util": "^7.1.5", - "web3": "1.8.1", + "web3": "1.10.0", "web3-provider-engine": "16.0.3" }, "dependencies": { @@ -33638,14 +36601,14 @@ } }, "@truffle/interface-adapter": { - "version": "0.5.26", - "resolved": "https://registry.npmjs.org/@truffle/interface-adapter/-/interface-adapter-0.5.26.tgz", - "integrity": "sha512-fBhoqtT+CT4XKXcOijvw0RIMgyUi3FJg+n5i5PyGBsoRzqbLZd9cZq+oMNjOZPdf3GH68hsOFOaQO5tZH7oZow==", + "version": "0.5.33", + "resolved": "https://registry.npmjs.org/@truffle/interface-adapter/-/interface-adapter-0.5.33.tgz", + "integrity": "sha512-vbVcH2I8hX+wM0Xj9uAjpgxMHqfT+y6m26zSkOVvZ2wo9Ez1slaOJkK1/TZK+7nJitGZSXeJeB4purMDuADvGA==", "devOptional": true, "requires": { "bn.js": "^5.1.3", "ethers": "^4.0.32", - "web3": "1.8.1" + "web3": "1.10.0" }, "dependencies": { "ethers": { @@ -33716,28 +36679,76 @@ "optional": true }, "@truffle/provider": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/@truffle/provider/-/provider-0.3.1.tgz", - "integrity": "sha512-qYSRjAprIylgmHl+Lq2Fzn8gevJ5vmCk3Gc3Zlpi7jkjL3SS14eOH0A5BqJWFkzJB43tPBHAXY1KWLYio3/3gg==", + "version": "0.3.9", + "resolved": "https://registry.npmjs.org/@truffle/provider/-/provider-0.3.9.tgz", + "integrity": "sha512-6vVSpbP8b2SuNz1fE1KeeQHMBaQ7oD5Nf4CLikXNWrj3SVyMpN3PxsEnaHMnlslAfHICpLSOHpcIWETGxfOgbg==", "optional": true, "requires": { - "@truffle/error": "^0.1.1", - "@truffle/interface-adapter": "^0.5.26", + "@truffle/error": "^0.2.0", + "@truffle/interface-adapter": "^0.5.33", "debug": "^4.3.1", - "web3": "1.8.1" + "web3": "1.10.0" + }, + "dependencies": { + "@truffle/error": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/@truffle/error/-/error-0.2.0.tgz", + "integrity": "sha512-Fe0/z4WWb7IP2gBnv3l6zqP87Y0kSMs7oiSLakKJq17q3GUunrHSdioKuNspdggxkXIBhEQLhi8C+LJdwmHKWQ==", + "optional": true + } } }, "@truffle/source-map-utils": { - "version": "1.3.103", - "resolved": "https://registry.npmjs.org/@truffle/source-map-utils/-/source-map-utils-1.3.103.tgz", - "integrity": "sha512-zLh8brf4s1MlwrsPABDP2LFY9rv5MtUE8iG5Np7guOtg50mucq2gN6XMAReQXJC4yY0an16YcnHMODpS48XD3Q==", + "version": "1.3.111", + "resolved": "https://registry.npmjs.org/@truffle/source-map-utils/-/source-map-utils-1.3.111.tgz", + "integrity": "sha512-/2kP4muycNMvMwar/QuzRdF8NE8LpQS1cRHF43XLx3b89D/upzqTylQwv3EDx/rcd7u6AQ/7lrUSmKlh0+k40Q==", "requires": { - "@truffle/code-utils": "^3.0.1", - "@truffle/codec": "^0.14.11", + "@truffle/code-utils": "^3.0.2", + "@truffle/codec": "^0.15.0", "debug": "^4.3.1", "json-pointer": "^0.6.1", "node-interval-tree": "^1.3.3", - "web3-utils": "1.8.1" + "web3-utils": "1.10.0" + }, + "dependencies": { + "@truffle/codec": { + "version": "0.15.0", + "resolved": "https://registry.npmjs.org/@truffle/codec/-/codec-0.15.0.tgz", + "integrity": "sha512-FEcwtDUuMr85a9u39eqvNgmUgXDvIkwhJjMCCi/bC4/GmLisOpih8vAidDgdYMJldukMPaOX5XIIgsG5k615YA==", + "requires": { + "@truffle/abi-utils": "^0.3.10", + "@truffle/compile-common": "^0.9.4", + "big.js": "^6.0.3", + "bn.js": "^5.1.3", + "cbor": "^5.2.0", + "debug": "^4.3.1", + "lodash": "^4.17.21", + "semver": "7.3.7", + "utf8": "^3.0.0", + "web3-utils": "1.10.0" + } + }, + "lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "requires": { + "yallist": "^4.0.0" + } + }, + "semver": { + "version": "7.3.7", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz", + "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==", + "requires": { + "lru-cache": "^6.0.0" + } + }, + "yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" + } } }, "@truffle/spinners": { @@ -33749,6 +36760,25 @@ "@trufflesuite/spinnies": "^0.1.1" } }, + "@trufflesuite/bigint-buffer": { + "version": "1.1.9", + "resolved": "https://registry.npmjs.org/@trufflesuite/bigint-buffer/-/bigint-buffer-1.1.9.tgz", + "integrity": "sha512-bdM5cEGCOhDSwminryHJbRmXc1x7dPKg6Pqns3qyTwFlxsqUgxE29lsERS3PlIW1HTjoIGMUqsk1zQQwST1Yxw==", + "dev": true, + "optional": true, + "requires": { + "node-gyp-build": "4.3.0" + }, + "dependencies": { + "node-gyp-build": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.3.0.tgz", + "integrity": "sha512-iWjXZvmboq0ja1pUGULQBexmxq8CV4xBhX7VDOTbL7ZR4FOowwY/VOtRxBN/yKxmdGoIp4j5ysNT4u3S2pDQ3Q==", + "dev": true, + "optional": true + } + } + }, "@trufflesuite/chromafi": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/@trufflesuite/chromafi/-/chromafi-3.0.0.tgz", @@ -33851,37 +36881,14 @@ } } }, - "@tsconfig/node10": { - "version": "1.0.9", - "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.9.tgz", - "integrity": "sha512-jNsYVVxU8v5g43Erja32laIDHXeoNvFEpX33OK4d6hljo3jDhCBDhx5dhCCTMWUojscpAagGiRkBKxpdl9fxqA==", - "devOptional": true - }, - "@tsconfig/node12": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/@tsconfig/node12/-/node12-1.0.11.tgz", - "integrity": "sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==", - "devOptional": true - }, - "@tsconfig/node14": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/@tsconfig/node14/-/node14-1.0.3.tgz", - "integrity": "sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==", - "devOptional": true - }, - "@tsconfig/node16": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.3.tgz", - "integrity": "sha512-yOlFc+7UtL/89t2ZhjPvvB/DeAr3r+Dq58IgzsFkOAvVC6NMJXmCGjbptdXdR9qsX7pKcTL+s87FtYREi2dEEQ==", - "devOptional": true - }, "@typechain/ethers-v5": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@typechain/ethers-v5/-/ethers-v5-2.0.0.tgz", - "integrity": "sha512-0xdCkyGOzdqh4h5JSf+zoWx85IusEjDcPIwNEHP8mrWSnCae4rvrqB+/gtpdNfX7zjlFlZiMeePn2r63EI3Lrw==", + "version": "10.2.0", + "resolved": "https://registry.npmjs.org/@typechain/ethers-v5/-/ethers-v5-10.2.0.tgz", + "integrity": "sha512-ikaq0N/w9fABM+G01OFmU3U3dNnyRwEahkdvi9mqy1a3XwKiPZaF/lu54OcNaEWnpvEYyhhS0N7buCtLQqC92w==", "dev": true, "requires": { - "ethers": "^5.0.2" + "lodash": "^4.17.15", + "ts-essentials": "^7.0.1" } }, "@types/abstract-leveldown": { @@ -33898,11 +36905,6 @@ "@types/node": "*" } }, - "@types/async-eventemitter": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/@types/async-eventemitter/-/async-eventemitter-0.2.1.tgz", - "integrity": "sha512-M2P4Ng26QbAeITiH7w1d7OxtldgfAe0wobpyJzVK/XOb0cUGKU2R4pfAhqcJBXAe2ife5ZOhSv4wk7p+ffURtg==" - }, "@types/bignumber.js": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/@types/bignumber.js/-/bignumber.js-5.0.0.tgz", @@ -33930,14 +36932,14 @@ } }, "@types/cacheable-request": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/@types/cacheable-request/-/cacheable-request-6.0.2.tgz", - "integrity": "sha512-B3xVo+dlKM6nnKTcmm5ZtY/OL8bOAOd2Olee9M1zft65ox50OzjEHW91sDiU9j6cvW8Ejg1/Qkf4xd2kugApUA==", + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/@types/cacheable-request/-/cacheable-request-6.0.3.tgz", + "integrity": "sha512-IQ3EbTzGxIigb1I3qPZc1rWJnH0BmSKv5QYTalEwweFvyBDLSAe24zP0le/hyi7ecGfZVlIVAg4BZqb8WBwKqw==", "requires": { "@types/http-cache-semantics": "*", - "@types/keyv": "*", + "@types/keyv": "^3.1.4", "@types/node": "*", - "@types/responselike": "*" + "@types/responselike": "^1.0.0" } }, "@types/chai": { @@ -33992,20 +36994,34 @@ } }, "@types/express": { - "version": "4.17.15", - "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.15.tgz", - "integrity": "sha512-Yv0k4bXGOH+8a+7bELd2PqHQsuiANB+A8a4gnQrkRWzrkKlb6KHaVvyXhqs04sVW/OWlbPyYxRgYlIXLfrufMQ==", + "version": "4.17.17", + "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.17.tgz", + "integrity": "sha512-Q4FmmuLGBG58btUnfS1c1r/NQdlp3DMfGDGig8WhfpA2YRUtEkxAjkZb0yvplJGYdF1fsQ81iMDcH24sSCNC/Q==", "requires": { "@types/body-parser": "*", - "@types/express-serve-static-core": "^4.17.31", + "@types/express-serve-static-core": "^4.17.33", "@types/qs": "*", "@types/serve-static": "*" + }, + "dependencies": { + "@types/express-serve-static-core": { + "version": "4.17.35", + "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.17.35.tgz", + "integrity": "sha512-wALWQwrgiB2AWTT91CB62b6Yt0sNHpznUXeZEcnPU3DRdlDIz74x8Qg1UUYKSVFi+va5vKOLYRBI1bRKiLLKIg==", + "requires": { + "@types/node": "*", + "@types/qs": "*", + "@types/range-parser": "*", + "@types/send": "*" + } + } } }, "@types/express-serve-static-core": { "version": "4.17.31", "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.17.31.tgz", "integrity": "sha512-DxMhY+NAsTwMMFHBTtJFNp5qiHKJ7TeqOo23zVEM9alT1Ml27Q3xcTH0xwxn7Q0BbMcVEJOs/7aQtUWupUQN3Q==", + "optional": true, "requires": { "@types/node": "*", "@types/qs": "*", @@ -34035,11 +37051,11 @@ "integrity": "sha512-SZs7ekbP8CN0txVG2xVRH6EgKmEm31BOxA07vkFaETzZz1xh+cbt8BcI0slpymvwhx5dlFnQG2rTlPVQn+iRPQ==" }, "@types/keyv": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/@types/keyv/-/keyv-4.2.0.tgz", - "integrity": "sha512-xoBtGl5R9jeKUhc8ZqeYaRDx04qqJ10yhhXYGmJ4Jr8qKpvMsDQQrNUvF/wUJ4klOtmJeJM+p2Xo3zp9uaC3tw==", + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/@types/keyv/-/keyv-3.1.4.tgz", + "integrity": "sha512-BQ5aZNSCpj7D6K2ksrRCTmKRLEpnPvWDiLPfoGyhZ++8YtiK9d/3DBKPJgry359X/P1PfruyYwvnvwFjuEiEIg==", "requires": { - "keyv": "*" + "@types/node": "*" } }, "@types/level-errors": { @@ -34093,9 +37109,9 @@ "integrity": "sha512-DHQpWGjyQKSHj3ebjFI/wRKcqQcdR+MoFBygntYOZytCqNfkd2ZC4ARDJ2DQqhjH5p85Nnd3jhUJIXrszFX/JA==" }, "@types/node-fetch": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/@types/node-fetch/-/node-fetch-2.6.2.tgz", - "integrity": "sha512-DHqhlq5jeESLy19TYhLakJ07kNumXWjcDdxXsLUMJZ6ue8VZJj4kLPQVE/2mdHh3xZziNF1xppu5lwmS53HR+A==", + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/@types/node-fetch/-/node-fetch-2.6.3.tgz", + "integrity": "sha512-ETTL1mOEdq/sxUtgtOhKjyB2Irra4cjxksvcMUR5Zr4n+PxVhsCD9WS46oPbHL3et9Zde7CNRr+WUNlcHvsX+w==", "dev": true, "requires": { "@types/node": "*", @@ -34111,9 +37127,9 @@ } }, "@types/prettier": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/@types/prettier/-/prettier-2.7.1.tgz", - "integrity": "sha512-ri0UmynRRvZiiUJdiz38MmIblKK+oH30MztdBVR95dv/Ubw6neWSb8u1XpRb72L4qsZOhz+L+z9JD40SJmfWow==", + "version": "2.7.2", + "resolved": "https://registry.npmjs.org/@types/prettier/-/prettier-2.7.2.tgz", + "integrity": "sha512-KufADq8uQqo1pYKVIYzfKbJfBAc0sOeXqGbFaSpv8MRmC/zXgowNZmFcbngndGk922QDmOASEXUZCaY48gs4cg==", "dev": true }, "@types/qs": { @@ -34126,13 +37142,20 @@ "resolved": "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.4.tgz", "integrity": "sha512-EEhsLsD6UsDM1yFhAvy0Cjr6VwmpMWqFBCb9w07wVugF7w9nfajxLuVmngTIpgS6svCnm6Vaw+MZhoDCKnOfsw==" }, - "@types/resolve": { - "version": "0.0.8", - "resolved": "https://registry.npmjs.org/@types/resolve/-/resolve-0.0.8.tgz", - "integrity": "sha512-auApPaJf3NPfe18hSoJkp8EbZzer2ISk7o8mCC3M9he/a04+gbMF97NkpD2S8riMGvm4BMRI59/SZQSaLTKpsQ==", - "dev": true, + "@types/readable-stream": { + "version": "2.3.15", + "resolved": "https://registry.npmjs.org/@types/readable-stream/-/readable-stream-2.3.15.tgz", + "integrity": "sha512-oM5JSKQCcICF1wvGgmecmHldZ48OZamtMxcGGVICOJA8o8cahXC1zEVAif8iwoc5j8etxFaRFnf095+CDsuoFQ==", "requires": { - "@types/node": "*" + "@types/node": "*", + "safe-buffer": "~5.1.1" + }, + "dependencies": { + "safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + } } }, "@types/responselike": { @@ -34151,6 +37174,22 @@ "@types/node": "*" } }, + "@types/send": { + "version": "0.17.1", + "resolved": "https://registry.npmjs.org/@types/send/-/send-0.17.1.tgz", + "integrity": "sha512-Cwo8LE/0rnvX7kIIa3QHCkcuF21c05Ayb0ZfxPiv0W8VRiZiNW/WuRupHKpqqGVGf7SUA44QSOUKaEd9lIrd/Q==", + "requires": { + "@types/mime": "^1", + "@types/node": "*" + }, + "dependencies": { + "@types/mime": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/@types/mime/-/mime-1.3.2.tgz", + "integrity": "sha512-YATxVxgRqNH6nHEIsvg6k2Boc1JHI9ZbH5iWFFv/MTkchz3b1ieGDa5T0a9RznNdI0KhVbdbWSN+KWWrQZRxTw==" + } + } + }, "@types/serve-static": { "version": "1.15.0", "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.15.0.tgz", @@ -34160,31 +37199,6 @@ "@types/node": "*" } }, - "@types/sinon": { - "version": "10.0.13", - "resolved": "https://registry.npmjs.org/@types/sinon/-/sinon-10.0.13.tgz", - "integrity": "sha512-UVjDqJblVNQYvVNUsj0PuYYw0ELRmgt1Nt5Vk0pT5f16ROGfcKJY8o1HVuMOJOpD727RrGB9EGvoaTQE5tgxZQ==", - "dev": true, - "requires": { - "@types/sinonjs__fake-timers": "*" - } - }, - "@types/sinon-chai": { - "version": "3.2.8", - "resolved": "https://registry.npmjs.org/@types/sinon-chai/-/sinon-chai-3.2.8.tgz", - "integrity": "sha512-d4ImIQbT/rKMG8+AXpmcan5T2/PNeSjrYhvkwet6z0p8kzYtfgA32xzOBlbU0yqJfq+/0Ml805iFoODO0LP5/g==", - "dev": true, - "requires": { - "@types/chai": "*", - "@types/sinon": "*" - } - }, - "@types/sinonjs__fake-timers": { - "version": "8.1.2", - "resolved": "https://registry.npmjs.org/@types/sinonjs__fake-timers/-/sinonjs__fake-timers-8.1.2.tgz", - "integrity": "sha512-9GcLXF0/v3t80caGs5p2rRfkB+a8VBGLJZVih6CNFkx8IZ994wiKKLSRs9nuFwk1HevWs/1mnUmkApGrSGsShA==", - "dev": true - }, "@types/underscore": { "version": "1.11.4", "resolved": "https://registry.npmjs.org/@types/underscore/-/underscore-1.11.4.tgz", @@ -34382,12 +37396,6 @@ } } }, - "@yarnpkg/lockfile": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@yarnpkg/lockfile/-/lockfile-1.1.0.tgz", - "integrity": "sha512-GpSwvyXOcOOlV70vbnzjj4fW5xW/FdUF6nQEt1ENy7m4ZCczi1+/buVUPAqmGfqznsORNFzUMjctTIp8a9tuCQ==", - "dev": true - }, "abbrev": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", @@ -34460,18 +37468,6 @@ "negotiator": "0.6.3" } }, - "acorn": { - "version": "8.8.2", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.2.tgz", - "integrity": "sha512-xjIYgE8HBrkpd/sJqOGNspf8uHG+NOHGOw6a/Urj8taM2EXfdNAH2oFcPeIFfsv3+kz/mJrS5VuMqbNLjCa2vw==", - "devOptional": true - }, - "acorn-walk": { - "version": "8.2.0", - "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.2.0.tgz", - "integrity": "sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==", - "devOptional": true - }, "adm-zip": { "version": "0.4.16", "resolved": "https://registry.npmjs.org/adm-zip/-/adm-zip-0.4.16.tgz", @@ -34537,9 +37533,9 @@ }, "dependencies": { "ajv": { - "version": "8.11.2", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.11.2.tgz", - "integrity": "sha512-E4bfmKAhGiSTvMfL1Myyycaub+cUEU2/IvpylXkUu7CHBkBj1f/ikdzbD7YQ6FKUbixDxeYvB/xY4fvyroDlQg==", + "version": "8.12.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz", + "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==", "optional": true, "requires": { "fast-deep-equal": "^3.1.1", @@ -34556,6 +37552,32 @@ } } }, + "amazon-cognito-identity-js": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/amazon-cognito-identity-js/-/amazon-cognito-identity-js-6.2.0.tgz", + "integrity": "sha512-9Fxrp9+MtLdsJvqOwSaE3ll+pneICeuE3pwj2yDkiyGNWuHx97b8bVLR2bOgfDmDJnY0Hq8QoeXtwdM4aaXJjg==", + "dev": true, + "requires": { + "@aws-crypto/sha256-js": "1.2.2", + "buffer": "4.9.2", + "fast-base64-decode": "^1.0.0", + "isomorphic-unfetch": "^3.0.0", + "js-cookie": "^2.2.1" + }, + "dependencies": { + "buffer": { + "version": "4.9.2", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-4.9.2.tgz", + "integrity": "sha512-xq+q3SRMOxGivLhBNaUdC64hDTQwejJ+H0T/NB1XMtTVEwNTrfFF3gAxiyW0Bu/xWEGhjVKgUcMhCrUy2+uCWg==", + "dev": true, + "requires": { + "base64-js": "^1.0.2", + "ieee754": "^1.1.4", + "isarray": "^1.0.0" + } + } + } + }, "ansi-colors": { "version": "3.2.4", "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-3.2.4.tgz", @@ -34613,9 +37635,9 @@ } }, "apollo-reporting-protobuf": { - "version": "3.3.3", - "resolved": "https://registry.npmjs.org/apollo-reporting-protobuf/-/apollo-reporting-protobuf-3.3.3.tgz", - "integrity": "sha512-L3+DdClhLMaRZWVmMbBcwl4Ic77CnEBPXLW53F7hkYhkaZD88ivbCVB1w/x5gunO6ZHrdzhjq0FHmTsBvPo7aQ==", + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/apollo-reporting-protobuf/-/apollo-reporting-protobuf-3.4.0.tgz", + "integrity": "sha512-h0u3EbC/9RpihWOmcSsvTW2O6RXVaD/mPEjfrPkxRPTEPWqncsgOoRJw+wih4OqfH3PvTJvoEIf4LwKrUaqWog==", "optional": true, "requires": { "@apollo/protobufjs": "1.2.6" @@ -34651,14 +37673,14 @@ } }, "apollo-server": { - "version": "3.11.1", - "resolved": "https://registry.npmjs.org/apollo-server/-/apollo-server-3.11.1.tgz", - "integrity": "sha512-3RZ/veWGbi0zXy2YVaPkYIAavpbHyEVui91DNYvz6UFS0fZmhJwG7f1VmGheeRiqiV8nFa8GuBejI1niTeAYzA==", + "version": "3.12.0", + "resolved": "https://registry.npmjs.org/apollo-server/-/apollo-server-3.12.0.tgz", + "integrity": "sha512-wZHLgBoIdGxr/YpPTG5RwNnS+B2y70T/nCegCnU6Yl+H3PXB92OIguLMhdJIZVjukIOhiQT12dNIehqLQ+1hMQ==", "optional": true, "requires": { "@types/express": "4.17.14", - "apollo-server-core": "^3.11.1", - "apollo-server-express": "^3.11.1", + "apollo-server-core": "^3.12.0", + "apollo-server-express": "^3.12.0", "express": "^4.17.1" }, "dependencies": { @@ -34677,9 +37699,9 @@ } }, "apollo-server-core": { - "version": "3.11.1", - "resolved": "https://registry.npmjs.org/apollo-server-core/-/apollo-server-core-3.11.1.tgz", - "integrity": "sha512-t/eCKrRFK1lYZlc5pHD99iG7Np7CEm3SmbDiONA7fckR3EaB/pdsEdIkIwQ5QBBpT5JLp/nwvrZRVwhaWmaRvw==", + "version": "3.12.0", + "resolved": "https://registry.npmjs.org/apollo-server-core/-/apollo-server-core-3.12.0.tgz", + "integrity": "sha512-hq7iH6Cgldgmnjs9FVSZeKWRpi0/ZR+iJ1arzeD2VXGxxgk1mAm/cz1Tx0TYgegZI+FvvrRl0UhKEx7sLnIxIg==", "optional": true, "requires": { "@apollo/utils.keyvaluecache": "^1.0.1", @@ -34691,11 +37713,11 @@ "@graphql-tools/schema": "^8.0.0", "@josephg/resolvable": "^1.0.0", "apollo-datasource": "^3.3.2", - "apollo-reporting-protobuf": "^3.3.3", + "apollo-reporting-protobuf": "^3.4.0", "apollo-server-env": "^4.2.1", "apollo-server-errors": "^3.3.1", - "apollo-server-plugin-base": "^3.7.1", - "apollo-server-types": "^3.7.1", + "apollo-server-plugin-base": "^3.7.2", + "apollo-server-types": "^3.8.0", "async-retry": "^1.2.1", "fast-json-stable-stringify": "^2.1.0", "graphql-tag": "^2.11.0", @@ -34747,9 +37769,9 @@ "requires": {} }, "apollo-server-express": { - "version": "3.11.1", - "resolved": "https://registry.npmjs.org/apollo-server-express/-/apollo-server-express-3.11.1.tgz", - "integrity": "sha512-x9ngcpXbBlt4naCXTwNtBFb/mOd9OU0wtFXvJkObHF26NsRazu3DxDfEuekA6V1NFOocD+A9jmVMQeQWug5MgA==", + "version": "3.12.0", + "resolved": "https://registry.npmjs.org/apollo-server-express/-/apollo-server-express-3.12.0.tgz", + "integrity": "sha512-m8FaGPUfDOEGSm7QRWRmUUGjG/vqvpQoorkId9/FXkC57fz/A59kEdrzkMt9538Xgsa5AV+X4MEWLJhTvlW3LQ==", "optional": true, "requires": { "@types/accepts": "^1.3.5", @@ -34758,8 +37780,8 @@ "@types/express": "4.17.14", "@types/express-serve-static-core": "4.17.31", "accepts": "^1.3.5", - "apollo-server-core": "^3.11.1", - "apollo-server-types": "^3.7.1", + "apollo-server-core": "^3.12.0", + "apollo-server-types": "^3.8.0", "body-parser": "^1.19.0", "cors": "^2.8.5", "parseurl": "^1.3.3" @@ -34780,23 +37802,23 @@ } }, "apollo-server-plugin-base": { - "version": "3.7.1", - "resolved": "https://registry.npmjs.org/apollo-server-plugin-base/-/apollo-server-plugin-base-3.7.1.tgz", - "integrity": "sha512-g3vJStmQtQvjGI289UkLMfThmOEOddpVgHLHT2bNj0sCD/bbisj4xKbBHETqaURokteqSWyyd4RDTUe0wAUDNQ==", + "version": "3.7.2", + "resolved": "https://registry.npmjs.org/apollo-server-plugin-base/-/apollo-server-plugin-base-3.7.2.tgz", + "integrity": "sha512-wE8dwGDvBOGehSsPTRZ8P/33Jan6/PmL0y0aN/1Z5a5GcbFhDaaJCjK5cav6npbbGL2DPKK0r6MPXi3k3N45aw==", "optional": true, "requires": { - "apollo-server-types": "^3.7.1" + "apollo-server-types": "^3.8.0" } }, "apollo-server-types": { - "version": "3.7.1", - "resolved": "https://registry.npmjs.org/apollo-server-types/-/apollo-server-types-3.7.1.tgz", - "integrity": "sha512-aE9RDVplmkaOj/OduNmGa+0a1B5RIWI0o3zC1zLvBTVWMKTpo0ifVf11TyMkLCY+T7cnZqVqwyShziOyC3FyUw==", + "version": "3.8.0", + "resolved": "https://registry.npmjs.org/apollo-server-types/-/apollo-server-types-3.8.0.tgz", + "integrity": "sha512-ZI/8rTE4ww8BHktsVpb91Sdq7Cb71rdSkXELSwdSR0eXu600/sY+1UXhTWdiJvk+Eq5ljqoHLwLbY2+Clq2b9A==", "optional": true, "requires": { "@apollo/utils.keyvaluecache": "^1.0.1", "@apollo/utils.logger": "^1.0.0", - "apollo-reporting-protobuf": "^3.3.3", + "apollo-reporting-protobuf": "^3.4.0", "apollo-server-env": "^4.2.1" } }, @@ -34857,7 +37879,8 @@ "version": "4.1.3", "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz", "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==", - "devOptional": true + "optional": true, + "peer": true }, "argparse": { "version": "2.0.1", @@ -34871,13 +37894,10 @@ "optional": true }, "array-back": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/array-back/-/array-back-2.0.0.tgz", - "integrity": "sha512-eJv4pLLufP3g5kcZry0j6WXpIbzYw9GUB4mVJZno9wfwiBxbizTnHCw3VJb07cBihbFX48Y7oSrW9y+gt4glyw==", - "dev": true, - "requires": { - "typical": "^2.6.1" - } + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/array-back/-/array-back-3.1.0.tgz", + "integrity": "sha512-TkuxA4UCOvxuDK6NZYXCalszEzj+TLszyASooky+i742l9TqsOdYCMJJupxRic61hwquNtppB3hgcuq9SVSH1Q==", + "dev": true }, "array-flatten": { "version": "1.1.1", @@ -34948,11 +37968,6 @@ "integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==", "dev": true }, - "async": { - "version": "3.2.4", - "resolved": "https://registry.npmjs.org/async/-/async-3.2.4.tgz", - "integrity": "sha512-iAB+JbDEGXhyIUavoDl9WP/Jj106Kz9DEn1DPgYw5ruDn0e3Wgi3sKFm55sASdGBNOQB8F59d9qQ7deqrHA8wQ==" - }, "async-eventemitter": { "version": "0.2.4", "resolved": "https://registry.npmjs.org/async-eventemitter/-/async-eventemitter-0.2.4.tgz", @@ -34988,7 +38003,7 @@ "version": "1.3.3", "resolved": "https://registry.npmjs.org/async-retry/-/async-retry-1.3.3.tgz", "integrity": "sha512-wfr/jstw9xNi/0teMHrRW7dsz3Lt5ARhYNZ2ewpadnhaIp5mbALhOAP+EAdsC7t4Z6wqsDVv9+W6gm1Dk9mEyw==", - "optional": true, + "devOptional": true, "requires": { "retry": "0.13.1" }, @@ -34997,7 +38012,7 @@ "version": "0.13.1", "resolved": "https://registry.npmjs.org/retry/-/retry-0.13.1.tgz", "integrity": "sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg==", - "optional": true + "devOptional": true } } }, @@ -35130,8 +38145,7 @@ "big-integer": { "version": "1.6.36", "resolved": "https://registry.npmjs.org/big-integer/-/big-integer-1.6.36.tgz", - "integrity": "sha512-t70bfa7HYEA1D9idDbmuv7YbsbVkQ+Hp+8KFSul4aE5e/i1bjCNIRYJZlA8Q8p0r9T8cF/RVvwUgRA//FydEyg==", - "dev": true + "integrity": "sha512-t70bfa7HYEA1D9idDbmuv7YbsbVkQ+Hp+8KFSul4aE5e/i1bjCNIRYJZlA8Q8p0r9T8cF/RVvwUgRA//FydEyg==" }, "big.js": { "version": "6.2.1", @@ -35147,17 +38161,9 @@ } }, "bigint-crypto-utils": { - "version": "3.1.7", - "resolved": "https://registry.npmjs.org/bigint-crypto-utils/-/bigint-crypto-utils-3.1.7.tgz", - "integrity": "sha512-zpCQpIE2Oy5WIQpjC9iYZf8Uh9QqoS51ZCooAcNvzv1AQ3VWdT52D0ksr1+/faeK8HVIej1bxXcP75YcqH3KPA==", - "requires": { - "bigint-mod-arith": "^3.1.0" - } - }, - "bigint-mod-arith": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/bigint-mod-arith/-/bigint-mod-arith-3.1.2.tgz", - "integrity": "sha512-nx8J8bBeiRR+NlsROFH9jHswW5HO8mgfOSqW0AmjicMMvaONDa8AO+5ViKDUUNytBPWiwfvZP4/Bj4Y3lUfvgQ==" + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/bigint-crypto-utils/-/bigint-crypto-utils-3.2.2.tgz", + "integrity": "sha512-U1RbE3aX9ayCUVcIPHuPDPKcK3SFOXf93J1UK/iHlJuQB7bhagPIX06/CLpLEsDThJ7KA4Dhrnzynl+d2weTiw==" }, "bignumber.js": { "version": "9.1.1", @@ -35177,11 +38183,30 @@ "file-uri-to-path": "1.0.0" } }, + "bip39": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/bip39/-/bip39-3.0.4.tgz", + "integrity": "sha512-YZKQlb752TrUWqHWj7XAwCSjYEgGAk+/Aas3V7NyjQeZYsztO8JnQUaCWhcnL4T+jL8nvB8typ2jRPzTlgugNw==", + "dev": true, + "requires": { + "@types/node": "11.11.6", + "create-hash": "^1.1.0", + "pbkdf2": "^3.0.9", + "randombytes": "^2.0.1" + }, + "dependencies": { + "@types/node": { + "version": "11.11.6", + "resolved": "https://registry.npmjs.org/@types/node/-/node-11.11.6.tgz", + "integrity": "sha512-Exw4yUWMBXM3X+8oqzJNRqZSwUAaS4+7NdvHqQuFi/d+synz++xmX3QIf+BFqneW8N31R8Ky+sikfZUXq07ggQ==", + "dev": true + } + } + }, "bl": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", - "devOptional": true, "requires": { "buffer": "^5.5.0", "inherits": "^2.0.4", @@ -35192,7 +38217,6 @@ "version": "5.7.1", "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", - "devOptional": true, "requires": { "base64-js": "^1.3.1", "ieee754": "^1.1.13" @@ -35216,9 +38240,9 @@ "integrity": "sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ==" }, "bnc-sdk": { - "version": "4.6.3", - "resolved": "https://registry.npmjs.org/bnc-sdk/-/bnc-sdk-4.6.3.tgz", - "integrity": "sha512-rva+LyJuAm+U6xwZYqlsDxKaMy3EpHBqkOL93UDih7iwXDYnUr87n27pnGCw3B8xRBeRhCBC/VZMuzRFeea/Hw==", + "version": "4.6.7", + "resolved": "https://registry.npmjs.org/bnc-sdk/-/bnc-sdk-4.6.7.tgz", + "integrity": "sha512-jIQ6cmeRBgvH/YDLuYRr2+kxDGcAAi0SOvjlO5nQ5cWdbslw+ASWftd1HmxiVLNCiwEH5bSc/t8a0agZ5njTUQ==", "requires": { "crypto-es": "^1.2.2", "nanoid": "^3.3.1", @@ -35471,7 +38495,6 @@ "version": "0.0.3", "resolved": "https://registry.npmjs.org/buildcheck/-/buildcheck-0.0.3.tgz", "integrity": "sha512-pziaA+p/wdVImfcbsZLNF32EiWyujlQLwolMqUQE8xpKNOH7KmZQaY8sXN7DGOEzPAElo9QTaeNRfGnf3iOJbA==", - "dev": true, "optional": true }, "bunyan": { @@ -35561,6 +38584,11 @@ "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001423.tgz", "integrity": "sha512-09iwWGOlifvE1XuHokFMP7eR38a0JnajoyL3/i87c8ZjRWRrdKo1fqjNfugfBD0UDBIOz0U+jtNhJ0EPm1VleQ==" }, + "case": { + "version": "1.6.3", + "resolved": "https://registry.npmjs.org/case/-/case-1.6.3.tgz", + "integrity": "sha512-mzDSXIPaFwVDvZAHqZ9VlbyF4yyXRuX6IvB06WvPYkqJVO24kX1PPhv9bfpKNFZyxYFmmgo03HUiD8iklmJYRQ==" + }, "caseless": { "version": "0.12.0", "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", @@ -35756,15 +38784,22 @@ "integrity": "sha512-rhjH9AG1fvabIDoGRVH587413LPjTZgmDF9fOFCbFJQV4yuocX1mHxxvXI4g3cGwbVY9wAYIoKlg1N79frJKQw==" }, "classic-level": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/classic-level/-/classic-level-1.2.0.tgz", - "integrity": "sha512-qw5B31ANxSluWz9xBzklRWTUAJ1SXIdaVKTVS7HcTGKOAmExx65Wo5BUICW+YGORe2FOUaDghoI9ZDxj82QcFg==", + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/classic-level/-/classic-level-1.3.0.tgz", + "integrity": "sha512-iwFAJQYtqRTRM0F6L8h4JCt00ZSGdOyqh7yVrhhjrOpFhmBjNlRUey64MCiyo6UmQHMJ+No3c81nujPv+n9yrg==", "requires": { "abstract-level": "^1.0.2", "catering": "^2.1.0", "module-error": "^1.0.1", - "napi-macros": "~2.0.0", + "napi-macros": "^2.2.2", "node-gyp-build": "^4.3.0" + }, + "dependencies": { + "napi-macros": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/napi-macros/-/napi-macros-2.2.2.tgz", + "integrity": "sha512-hmEVtAGYzVQpCKdbQea4skABsdXW4RUh5t5mJ2zzqowJS2OyXZTU1KhDVFhx+NlWZ4ap9mqR9TcDO3LTTttd+g==" + } } }, "clean-stack": { @@ -35859,8 +38894,7 @@ "code-point-at": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz", - "integrity": "sha512-RpAVKQA5T63xEj6/giIbUEtZwJ4UFIc3ZtvEkiaUERylqe8xb5IvqcgOurZLahv93CLKfxcw5YI+DZcUBRyLXA==", - "devOptional": true + "integrity": "sha512-RpAVKQA5T63xEj6/giIbUEtZwJ4UFIc3ZtvEkiaUERylqe8xb5IvqcgOurZLahv93CLKfxcw5YI+DZcUBRyLXA==" }, "color-convert": { "version": "2.0.1", @@ -35894,14 +38928,97 @@ "integrity": "sha512-LTQ/SGc+s0Xc0Fu5WaKnR0YiygZkm9eKFvyS+fRsU7/ZWFF8ykFM6Pc9aCVf1+xasOOZpO3BAVgVrKvsqKHV7w==" }, "command-line-args": { - "version": "4.0.7", - "resolved": "https://registry.npmjs.org/command-line-args/-/command-line-args-4.0.7.tgz", - "integrity": "sha512-aUdPvQRAyBvQd2n7jXcsMDz68ckBJELXNzBybCHOibUWEg0mWTnaYCSRU8h9R+aNRSvDihJtssSRCiDRpLaezA==", + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/command-line-args/-/command-line-args-5.2.1.tgz", + "integrity": "sha512-H4UfQhZyakIjC74I9d34fGYDwk3XpSr17QhEd0Q3I9Xq1CETHo4Hcuo87WyWHpAF1aSLjLRf5lD9ZGX2qStUvg==", "dev": true, "requires": { - "array-back": "^2.0.0", - "find-replace": "^1.0.3", - "typical": "^2.6.1" + "array-back": "^3.1.0", + "find-replace": "^3.0.0", + "lodash.camelcase": "^4.3.0", + "typical": "^4.0.0" + } + }, + "command-line-usage": { + "version": "6.1.3", + "resolved": "https://registry.npmjs.org/command-line-usage/-/command-line-usage-6.1.3.tgz", + "integrity": "sha512-sH5ZSPr+7UStsloltmDh7Ce5fb8XPlHyoPzTpyyMuYCtervL65+ubVZ6Q61cFtFl62UyJlc8/JwERRbAFPUqgw==", + "dev": true, + "requires": { + "array-back": "^4.0.2", + "chalk": "^2.4.2", + "table-layout": "^1.0.2", + "typical": "^5.2.0" + }, + "dependencies": { + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "requires": { + "color-convert": "^1.9.0" + } + }, + "array-back": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/array-back/-/array-back-4.0.2.tgz", + "integrity": "sha512-NbdMezxqf94cnNfWLL7V/im0Ub+Anbb0IoZhvzie8+4HJ4nMQuzHuy49FkGYCJK2yAloZ3meiB6AVMClbrI1vg==", + "dev": true + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", + "dev": true + }, + "escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "dev": true + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "dev": true + }, + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + }, + "typical": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/typical/-/typical-5.2.0.tgz", + "integrity": "sha512-dvdQgNDNJo+8B2uBQoqdb11eUCE1JQXhvjC/CZtgvZseVd5TYMXnq0+vuUemXbd/Se29cTaUuPX3YIc2xgbvIg==", + "dev": true + } } }, "commander": { @@ -35910,9 +39027,9 @@ "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==" }, "compare-versions": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/compare-versions/-/compare-versions-5.0.1.tgz", - "integrity": "sha512-v8Au3l0b+Nwkp4G142JcgJFh1/TUhdxut7wzD1Nq1dyp5oa3tXaqb03EXOAB6jS4gMlalkjAUPZBMiAfKUixHQ==", + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/compare-versions/-/compare-versions-5.0.3.tgz", + "integrity": "sha512-4UZlZP8Z99MGEY+Ovg/uJxJuvoXuN4M6B3hKaiackiHrgzQFEe3diJi1mf1PNHbFujM7FvLrK2bpgIaImbtZ1A==", "dev": true }, "complex.js": { @@ -35984,9 +39101,9 @@ }, "dependencies": { "ajv": { - "version": "8.11.2", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.11.2.tgz", - "integrity": "sha512-E4bfmKAhGiSTvMfL1Myyycaub+cUEU2/IvpylXkUu7CHBkBj1f/ikdzbD7YQ6FKUbixDxeYvB/xY4fvyroDlQg==", + "version": "8.12.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz", + "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==", "optional": true, "requires": { "fast-deep-equal": "^3.1.1", @@ -36058,9 +39175,9 @@ "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==" }, "cookiejar": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/cookiejar/-/cookiejar-2.1.3.tgz", - "integrity": "sha512-JxbCBUdrfr6AQjOXrxoTvAMJO4HBTUIlBzslcJPAz+/KT8yk53fXun51u+RenNYvad/+Vc2DIz5o9UxlCDymFQ==" + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/cookiejar/-/cookiejar-2.1.4.tgz", + "integrity": "sha512-LDx6oHrK+PhzLKJU9j5S7/Y3jM/mUHvD/DeI1WQmJn652iPC5Y4TBzC9l+5OMOXlyTTA+SmVUPm0HQUwpD5Jqw==" }, "core-js-compat": { "version": "3.25.5", @@ -36070,6 +39187,12 @@ "browserslist": "^4.21.4" } }, + "core-js-pure": { + "version": "3.30.1", + "resolved": "https://registry.npmjs.org/core-js-pure/-/core-js-pure-3.30.1.tgz", + "integrity": "sha512-nXBEVpmUnNRhz83cHd9JRQC52cTMcuXAmR56+9dSMpRdpeA4I1PX6yjmhd71Eyc/wXNsdBdUDIj1QTIeZpU5Tg==", + "dev": true + }, "core-util-is": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", @@ -36088,7 +39211,6 @@ "version": "0.0.4", "resolved": "https://registry.npmjs.org/cpu-features/-/cpu-features-0.0.4.tgz", "integrity": "sha512-fKiZ/zp1mUwQbnzb9IghXtHtDoTMtNeb8oYGx6kX2SYfhnG0HNdBEBIzB9b5KlXu5DQPhfy3mInbBxFcgwAr3A==", - "dev": true, "optional": true, "requires": { "buildcheck": "0.0.3", @@ -36145,34 +39267,24 @@ "version": "1.1.1", "resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz", "integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==", - "devOptional": true + "optional": true, + "peer": true }, "cross-fetch": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-3.1.5.tgz", - "integrity": "sha512-lvb1SBsI0Z7GDwmuid+mU3kWVBwTVUbe7S0H52yaaAdQOXq2YktTCZdlAcNKFzE6QtRz0snpw9bNiPeOIkkQvw==", - "requires": { - "node-fetch": "2.6.7" - } - }, - "cross-spawn": { - "version": "6.0.5", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", - "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", - "dev": true, + "version": "3.1.6", + "resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-3.1.6.tgz", + "integrity": "sha512-riRvo06crlE8HiqOwIpQhxwdOk4fOeR7FVM/wXoxchFEqMNUjvbs3bfo4OTgMEMHzppd4DxFBDbyySj8Cv781g==", "requires": { - "nice-try": "^1.0.4", - "path-key": "^2.0.1", - "semver": "^5.5.0", - "shebang-command": "^1.2.0", - "which": "^1.2.9" + "node-fetch": "^2.6.11" }, "dependencies": { - "semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "dev": true + "node-fetch": { + "version": "2.6.11", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.11.tgz", + "integrity": "sha512-4I6pdBY1EthSqDmJkiNk3JIT8cswwR9nfeW/cPdUagJYEQG7R95WRH74wpz7ma8Gh/9dI9FP+OU+0E4FvtA55w==", + "requires": { + "whatwg-url": "^5.0.0" + } } } }, @@ -36185,7 +39297,6 @@ "version": "0.1.7", "resolved": "https://registry.npmjs.org/crypto-addr-codec/-/crypto-addr-codec-0.1.7.tgz", "integrity": "sha512-X4hzfBzNhy4mAc3UpiXEC/L0jo5E8wAa9unsnA8nNXYzXjCcGk83hfC5avJWCSGT8V91xMnAS9AKMHmjw5+XCg==", - "dev": true, "requires": { "base-x": "^3.0.8", "big-integer": "1.6.36", @@ -36261,6 +39372,14 @@ "assert-plus": "^1.0.0" } }, + "data-fns": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/data-fns/-/data-fns-1.1.0.tgz", + "integrity": "sha512-/rJzdbnuY3DVgzqsfEfc+tJLuAKYaHzkUxSMRIU3dxKFeWGD/MGhrgAfuwSOmgfJ8enygztp9DeuvoSxauppIg==", + "requires": { + "unit-fns": "^0.1.6" + } + }, "dataloader": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/dataloader/-/dataloader-2.1.0.tgz", @@ -36478,7 +39597,20 @@ "version": "0.6.0", "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==", - "optional": true + "devOptional": true + }, + "defender-base-client": { + "version": "1.44.0", + "resolved": "https://registry.npmjs.org/defender-base-client/-/defender-base-client-1.44.0.tgz", + "integrity": "sha512-8ZgGA93+FlxNwG9LN1nu/Au5AyCKwAWJGNf0VLiPmh4GX/Nali/7kv72K+OtZgGxTLtKDKfgN4cnhEZwfrc8dg==", + "dev": true, + "requires": { + "amazon-cognito-identity-js": "^6.0.1", + "async-retry": "^1.3.3", + "axios": "^0.21.2", + "lodash": "^4.17.19", + "node-fetch": "^2.6.0" + } }, "defer-to-connect": { "version": "2.0.1", @@ -36607,7 +39739,6 @@ "version": "3.0.8", "resolved": "https://registry.npmjs.org/docker-modem/-/docker-modem-3.0.8.tgz", "integrity": "sha512-f0ReSURdM3pcKPNS30mxOHSbaFLcknGmQjwSfmbcdOw1XWKXVhukM3NJHhr7NpY9BIyyWQb0EBo3KQvvuU5egQ==", - "dev": true, "requires": { "debug": "^4.1.1", "readable-stream": "^3.5.0", @@ -36619,7 +39750,6 @@ "version": "3.3.5", "resolved": "https://registry.npmjs.org/dockerode/-/dockerode-3.3.5.tgz", "integrity": "sha512-/0YNa3ZDNeLr/tSckmD69+Gq+qVNhvKfAHNeZJBnp7EOP6RGKV8ORrJHkUn20So5wU+xxT7+1n5u8PjHbfjbSA==", - "dev": true, "requires": { "@balena/dockerignore": "^1.0.2", "docker-modem": "^3.0.0", @@ -36630,7 +39760,6 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-2.0.1.tgz", "integrity": "sha512-6tzWDMeroL87uF/+lin46k+Q+46rAJ0SyPGz7OW7wTgblI273hsBqk2C1j0/xNadNLKDTUL9BukSjB7cwgmlPA==", - "dev": true, "requires": { "chownr": "^1.1.1", "mkdirp-classic": "^0.5.2", @@ -36852,7 +39981,6 @@ "version": "1.3.2", "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", - "dev": true, "requires": { "is-arrayish": "^0.2.1" } @@ -37805,21 +40933,51 @@ "integrity": "sha512-3KLX1mHuEsBW0dKG+c6EOJS1NBNqdCICvZW9sInmZTt5aY0oxmHVggYRE0lJu1tcnMD1K+AKHdLi6U43Awm1Vg==" }, "ethereum-waffle": { - "version": "3.4.4", - "resolved": "https://registry.npmjs.org/ethereum-waffle/-/ethereum-waffle-3.4.4.tgz", - "integrity": "sha512-PA9+jCjw4WC3Oc5ocSMBj5sXvueWQeAbvCA+hUlb6oFgwwKyq5ka3bWQ7QZcjzIX+TdFkxP4IbFmoY2D8Dkj9Q==", + "version": "4.0.10", + "resolved": "https://registry.npmjs.org/ethereum-waffle/-/ethereum-waffle-4.0.10.tgz", + "integrity": "sha512-iw9z1otq7qNkGDNcMoeNeLIATF9yKl1M8AIeu42ElfNBplq0e+5PeasQmm8ybY/elkZ1XyRO0JBQxQdVRb8bqQ==", "dev": true, "requires": { - "@ethereum-waffle/chai": "^3.4.4", - "@ethereum-waffle/compiler": "^3.4.4", - "@ethereum-waffle/mock-contract": "^3.4.4", - "@ethereum-waffle/provider": "^3.4.4", - "ethers": "^5.0.1" + "@ethereum-waffle/chai": "4.0.10", + "@ethereum-waffle/compiler": "4.0.3", + "@ethereum-waffle/mock-contract": "4.0.4", + "@ethereum-waffle/provider": "4.0.5", + "solc": "0.8.15", + "typechain": "^8.0.0" + }, + "dependencies": { + "commander": { + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-8.3.0.tgz", + "integrity": "sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==", + "dev": true + }, + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true + }, + "solc": { + "version": "0.8.15", + "resolved": "https://registry.npmjs.org/solc/-/solc-0.8.15.tgz", + "integrity": "sha512-Riv0GNHNk/SddN/JyEuFKwbcWcEeho15iyupTSHw5Np6WuXA5D8kEHbyzDHi6sqmvLzu2l+8b1YmL8Ytple+8w==", + "dev": true, + "requires": { + "command-exists": "^1.2.8", + "commander": "^8.1.0", + "follow-redirects": "^1.12.1", + "js-sha3": "0.8.0", + "memorystream": "^0.3.1", + "semver": "^5.5.0", + "tmp": "0.0.33" + } + } } }, "ethereumjs-abi": { "version": "git+ssh://git@github.com/ethereumjs/ethereumjs-abi.git#ee3994657fa7a427238e6ba92a84d0b529bbcde0", - "from": "ethereumjs-abi@^0.6.8", + "from": "ethereumjs-abi@0.6.8", "requires": { "bn.js": "^4.11.8", "ethereumjs-util": "^6.0.0" @@ -38848,6 +42006,12 @@ "checkpoint-store": "^1.1.0" } }, + "fast-base64-decode": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fast-base64-decode/-/fast-base64-decode-1.0.0.tgz", + "integrity": "sha512-qwaScUgUGBYeDNRnbc/KyllVU88Jk1pRHPStuF/lO7B0/RTRLj7U0lkdTAutlBblY08rwZDff6tNU9cjv6j//Q==", + "dev": true + }, "fast-check": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/fast-check/-/fast-check-3.1.1.tgz", @@ -38941,24 +42105,12 @@ } }, "find-replace": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/find-replace/-/find-replace-1.0.3.tgz", - "integrity": "sha512-KrUnjzDCD9426YnCP56zGYy/eieTnhtK6Vn++j+JJzmlsWWwEkDnsyVF575spT6HJ6Ow9tlbT3TQTDsa+O4UWA==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/find-replace/-/find-replace-3.0.0.tgz", + "integrity": "sha512-6Tb2myMioCAgv5kfvP5/PkZZ/ntTpVK39fHY7WkWBgvbeE+VHd/tZuZ4mrC+bxh4cfOZeYKVPaJIZtZXV7GNCQ==", "dev": true, "requires": { - "array-back": "^1.0.4", - "test-value": "^2.1.0" - }, - "dependencies": { - "array-back": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/array-back/-/array-back-1.0.4.tgz", - "integrity": "sha512-1WxbZvrmyhkNoeYcizokbmh5oiOCIfyvGtcqbK3Ls1v1fKcquzxnQSceOx6tzq7jmai2kFLWIpGND2cLhH6TPw==", - "dev": true, - "requires": { - "typical": "^2.6.0" - } - } + "array-back": "^3.0.1" } }, "find-up": { @@ -38970,15 +42122,6 @@ "path-exists": "^4.0.0" } }, - "find-yarn-workspace-root": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/find-yarn-workspace-root/-/find-yarn-workspace-root-2.0.0.tgz", - "integrity": "sha512-1IMnbjt4KzsQfnhnzNd8wUEgXZ44IzZaZmnLYx7D5FZlaHt2gW20Cri8Q+E/t5tIj4+epTBub+2Zxu/vNILzqQ==", - "dev": true, - "requires": { - "micromatch": "^4.0.2" - } - }, "flashbots": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/flashbots/-/flashbots-1.0.0.tgz", @@ -39068,9 +42211,9 @@ "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==" }, "fs-extra": { - "version": "11.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.1.0.tgz", - "integrity": "sha512-0rcTq621PD5jM/e0a3EJoGC/1TC5ZBCERW82LQuwfGnCa1V8w7dpYH1yNu+SLb6E5dkeCBzKEyLGlFrnr+dUyw==", + "version": "11.1.1", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.1.1.tgz", + "integrity": "sha512-MGIE4HOvQCeUCzmlHs0vXpih4ysz4wg9qiSAu6cd42lVwPbTM1TjV7RusoyQqMmk/95gdQZX72u+YW+c3eEpFQ==", "requires": { "graceful-fs": "^4.2.0", "jsonfile": "^6.0.1", @@ -39128,14 +42271,18 @@ "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==" }, "ganache": { - "version": "7.6.0", - "resolved": "https://registry.npmjs.org/ganache/-/ganache-7.6.0.tgz", - "integrity": "sha512-TVpSHgIKPVCqvehGXOsXTYi5X0VvPeS+KHl0Ph8WQvtvoqxutZ8Ov4PclaAX9htIGmwns8DYJBg+yvola6wdrA==", + "version": "7.8.0", + "resolved": "https://registry.npmjs.org/ganache/-/ganache-7.8.0.tgz", + "integrity": "sha512-IrUYvsaE/m2/NaVIZ7D/gCnsmyU/buechnH6MhUipzG1qJcZIwIp/DoP/LZUcHyhy0Bv0NKZD2pGOjpRhn7l7A==", "requires": { "@trufflesuite/bigint-buffer": "1.1.10", + "@trufflesuite/uws-js-unofficial": "20.10.0-unofficial.2", "@types/bn.js": "^5.1.0", "@types/lru-cache": "5.1.1", "@types/seedrandom": "3.0.1", + "abstract-level": "1.0.3", + "abstract-leveldown": "7.2.0", + "async-eventemitter": "0.2.4", "bufferutil": "4.0.5", "emittery": "0.10.0", "keccak": "3.0.2", @@ -39161,11 +42308,20 @@ } } }, + "@trufflesuite/uws-js-unofficial": { + "version": "20.10.0-unofficial.2", + "resolved": "https://registry.npmjs.org/@trufflesuite/uws-js-unofficial/-/uws-js-unofficial-20.10.0-unofficial.2.tgz", + "integrity": "sha512-oQQlnS3oNeGsgS4K3KCSSavJgSb0W9D5ktZs4FacX9VbM7b+NlhjH96d6/G4fMrz+bc5MXRyco419on0X0dvRA==", + "requires": { + "bufferutil": "4.0.5", + "utf-8-validate": "5.0.7", + "ws": "8.2.3" + } + }, "@types/bn.js": { "version": "5.1.0", "resolved": "https://registry.npmjs.org/@types/bn.js/-/bn.js-5.1.0.tgz", "integrity": "sha512-QSSVYj7pYFN49kW77o2s9xTCwZ8F2xLbjLLSEVh8D2F4JUhZtPAGOFLTD+ffqksBx/u4cE/KImFjyhqCjn/LIA==", - "bundled": true, "requires": { "@types/node": "*" } @@ -39173,20 +42329,68 @@ "@types/lru-cache": { "version": "5.1.1", "resolved": "https://registry.npmjs.org/@types/lru-cache/-/lru-cache-5.1.1.tgz", - "integrity": "sha512-ssE3Vlrys7sdIzs5LOxCzTVMsU7i9oa/IaW92wF32JFb3CVczqOkru2xspuKczHEbG3nvmPY7IFqVmGGHdNbYw==", - "bundled": true + "integrity": "sha512-ssE3Vlrys7sdIzs5LOxCzTVMsU7i9oa/IaW92wF32JFb3CVczqOkru2xspuKczHEbG3nvmPY7IFqVmGGHdNbYw==" }, "@types/node": { "version": "17.0.0", "resolved": "https://registry.npmjs.org/@types/node/-/node-17.0.0.tgz", - "integrity": "sha512-eMhwJXc931Ihh4tkU+Y7GiLzT/y/DBNpNtr4yU9O2w3SYBsr9NaOPhQlLKRmoWtI54uNwuo0IOUFQjVOTZYRvw==", - "bundled": true + "integrity": "sha512-eMhwJXc931Ihh4tkU+Y7GiLzT/y/DBNpNtr4yU9O2w3SYBsr9NaOPhQlLKRmoWtI54uNwuo0IOUFQjVOTZYRvw==" }, "@types/seedrandom": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/@types/seedrandom/-/seedrandom-3.0.1.tgz", - "integrity": "sha512-giB9gzDeiCeloIXDgzFBCgjj1k4WxcDrZtGl6h1IqmUPlxF+Nx8Ve+96QCyDZ/HseB/uvDsKbpib9hU5cU53pw==", - "bundled": true + "integrity": "sha512-giB9gzDeiCeloIXDgzFBCgjj1k4WxcDrZtGl6h1IqmUPlxF+Nx8Ve+96QCyDZ/HseB/uvDsKbpib9hU5cU53pw==" + }, + "abstract-level": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/abstract-level/-/abstract-level-1.0.3.tgz", + "integrity": "sha512-t6jv+xHy+VYwc4xqZMn2Pa9DjcdzvzZmQGRjTFc8spIbRGHgBrEKbPq+rYXc7CCo0lxgYvSgKVg9qZAhpVQSjA==", + "requires": { + "buffer": "^6.0.3", + "catering": "^2.1.0", + "is-buffer": "^2.0.5", + "level-supports": "^4.0.0", + "level-transcoder": "^1.0.1", + "module-error": "^1.0.1", + "queue-microtask": "^1.2.3" + }, + "dependencies": { + "level-supports": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/level-supports/-/level-supports-4.0.1.tgz", + "integrity": "sha512-PbXpve8rKeNcZ9C1mUicC9auIYFyGpkV9/i6g76tLgANwWhtG2v7I4xNBUlkn3lE2/dZF3Pi0ygYGtLc4RXXdA==" + } + } + }, + "abstract-leveldown": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/abstract-leveldown/-/abstract-leveldown-7.2.0.tgz", + "integrity": "sha512-DnhQwcFEaYsvYDnACLZhMmCWd3rkOeEvglpa4q5i/5Jlm3UIsWaxVzuXvDLFCSCWRO3yy2/+V/G7FusFgejnfQ==", + "bundled": true, + "requires": { + "buffer": "^6.0.3", + "catering": "^2.0.0", + "is-buffer": "^2.0.5", + "level-concat-iterator": "^3.0.0", + "level-supports": "^2.0.1", + "queue-microtask": "^1.2.3" + } + }, + "async": { + "version": "2.6.4", + "resolved": "https://registry.npmjs.org/async/-/async-2.6.4.tgz", + "integrity": "sha512-mzo5dfJYwAn29PeiJ0zvwTo04zj8HDJj0Mn8TD7sno7q12prdbnasKJHhkm2c1LgrhlJ0teaea8860oxi51mGA==", + "requires": { + "lodash": "^4.17.14" + } + }, + "async-eventemitter": { + "version": "0.2.4", + "resolved": "https://registry.npmjs.org/async-eventemitter/-/async-eventemitter-0.2.4.tgz", + "integrity": "sha512-pd20BwL7Yt1zwDFy+8MX8F1+WCT8aQeKj0kQnTrH9WaeRETlRamVhD0JtRPmrV4GfOJ2F9CvdQkZeZhnh2TuHw==", + "requires": { + "async": "^2.4.0" + } }, "base64-js": { "version": "1.5.1", @@ -39254,8 +42458,7 @@ "emittery": { "version": "0.10.0", "resolved": "https://registry.npmjs.org/emittery/-/emittery-0.10.0.tgz", - "integrity": "sha512-AGvFfs+d0JKCJQ4o01ASQLGPmSCxgfU9RFXvzPvZdjKK8oscynksuJhWrSTSw7j7Ep/sZct5b5ZhYCi8S/t0HQ==", - "bundled": true + "integrity": "sha512-AGvFfs+d0JKCJQ4o01ASQLGPmSCxgfU9RFXvzPvZdjKK8oscynksuJhWrSTSw7j7Ep/sZct5b5ZhYCi8S/t0HQ==" }, "hash.js": { "version": "1.1.7", @@ -39307,6 +42510,30 @@ "readable-stream": "^3.6.0" } }, + "level-concat-iterator": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/level-concat-iterator/-/level-concat-iterator-3.1.0.tgz", + "integrity": "sha512-BWRCMHBxbIqPxJ8vHOvKUsaO0v1sLYZtjN3K2iZJsRBYtp+ONsY6Jfi6hy9K3+zolgQRryhIn2NRZjZnWJ9NmQ==", + "bundled": true, + "requires": { + "catering": "^2.1.0" + } + }, + "level-supports": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/level-supports/-/level-supports-2.1.0.tgz", + "integrity": "sha512-E486g1NCjW5cF78KGPrMDRBYzPuueMZ6VBXHT6gC7A8UYWGiM14fGgp+s/L1oFfDWSPV/+SFkYCmZ0SiESkRKA==", + "bundled": true + }, + "level-transcoder": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/level-transcoder/-/level-transcoder-1.0.1.tgz", + "integrity": "sha512-t7bFwFtsQeD8cl8NIoQ2iwxA0CL/9IFw7/9gAjOonH0PWTTiRfY7Hq+Ejbsxh86tXobDQ6IOiddjNYIfOBs06w==", + "requires": { + "buffer": "^6.0.3", + "module-error": "^1.0.1" + } + }, "leveldown": { "version": "6.1.0", "resolved": "https://registry.npmjs.org/leveldown/-/leveldown-6.1.0.tgz", @@ -39316,39 +42543,13 @@ "abstract-leveldown": "^7.2.0", "napi-macros": "~2.0.0", "node-gyp-build": "^4.3.0" - }, - "dependencies": { - "abstract-leveldown": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/abstract-leveldown/-/abstract-leveldown-7.2.0.tgz", - "integrity": "sha512-DnhQwcFEaYsvYDnACLZhMmCWd3rkOeEvglpa4q5i/5Jlm3UIsWaxVzuXvDLFCSCWRO3yy2/+V/G7FusFgejnfQ==", - "bundled": true, - "requires": { - "buffer": "^6.0.3", - "catering": "^2.0.0", - "is-buffer": "^2.0.5", - "level-concat-iterator": "^3.0.0", - "level-supports": "^2.0.1", - "queue-microtask": "^1.2.3" - } - }, - "level-concat-iterator": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/level-concat-iterator/-/level-concat-iterator-3.1.0.tgz", - "integrity": "sha512-BWRCMHBxbIqPxJ8vHOvKUsaO0v1sLYZtjN3K2iZJsRBYtp+ONsY6Jfi6hy9K3+zolgQRryhIn2NRZjZnWJ9NmQ==", - "bundled": true, - "requires": { - "catering": "^2.1.0" - } - }, - "level-supports": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/level-supports/-/level-supports-2.1.0.tgz", - "integrity": "sha512-E486g1NCjW5cF78KGPrMDRBYzPuueMZ6VBXHT6gC7A8UYWGiM14fGgp+s/L1oFfDWSPV/+SFkYCmZ0SiESkRKA==", - "bundled": true - } } }, + "lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" + }, "minimalistic-assert": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", @@ -39361,6 +42562,11 @@ "integrity": "sha1-9sAMHAsIIkblxNmd+4x8CDsrWCo=", "bundled": true }, + "module-error": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/module-error/-/module-error-1.0.2.tgz", + "integrity": "sha512-0yuvsqSCv8LbaOKhnsQ/T5JhyFlCYLPXK3U2sgV10zoKQwzs/MyfuQUOZQ1V/6OCOJsK/TRgNVrPuPDqtdMFtA==" + }, "napi-macros": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/napi-macros/-/napi-macros-2.0.0.tgz", @@ -39442,6 +42648,11 @@ "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", "bundled": true + }, + "ws": { + "version": "8.2.3", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.2.3.tgz", + "integrity": "sha512-wBuoj1BDpC6ZQ1B7DWQBYVLphPWkm8i9Y0/3YdHjHKHiohOJ1ws+3OccDWtH+PoC9DZD5WOTrJvNbWvjS6JWaA==" } } }, @@ -45826,22 +49037,22 @@ } }, "hardhat": { - "version": "2.13.0", - "resolved": "https://registry.npmjs.org/hardhat/-/hardhat-2.13.0.tgz", - "integrity": "sha512-ZlzBOLML1QGlm6JWyVAG8lVTEAoOaVm1in/RU2zoGAnYEoD1Rp4T+ZMvrLNhHaaeS9hfjJ1gJUBfiDr4cx+htQ==", + "version": "2.14.0", + "resolved": "https://registry.npmjs.org/hardhat/-/hardhat-2.14.0.tgz", + "integrity": "sha512-73jsInY4zZahMSVFurSK+5TNCJTXMv+vemvGia0Ac34Mm19fYp6vEPVGF3sucbumszsYxiTT2TbS8Ii2dsDSoQ==", "requires": { "@ethersproject/abi": "^5.1.2", "@metamask/eth-sig-util": "^4.0.0", - "@nomicfoundation/ethereumjs-block": "^4.0.0", - "@nomicfoundation/ethereumjs-blockchain": "^6.0.0", - "@nomicfoundation/ethereumjs-common": "^3.0.0", - "@nomicfoundation/ethereumjs-evm": "^1.0.0", - "@nomicfoundation/ethereumjs-rlp": "^4.0.0", - "@nomicfoundation/ethereumjs-statemanager": "^1.0.0", - "@nomicfoundation/ethereumjs-trie": "^5.0.0", - "@nomicfoundation/ethereumjs-tx": "^4.0.0", - "@nomicfoundation/ethereumjs-util": "^8.0.0", - "@nomicfoundation/ethereumjs-vm": "^6.0.0", + "@nomicfoundation/ethereumjs-block": "5.0.1", + "@nomicfoundation/ethereumjs-blockchain": "7.0.1", + "@nomicfoundation/ethereumjs-common": "4.0.1", + "@nomicfoundation/ethereumjs-evm": "2.0.1", + "@nomicfoundation/ethereumjs-rlp": "5.0.1", + "@nomicfoundation/ethereumjs-statemanager": "2.0.1", + "@nomicfoundation/ethereumjs-trie": "6.0.1", + "@nomicfoundation/ethereumjs-tx": "5.0.1", + "@nomicfoundation/ethereumjs-util": "9.0.1", + "@nomicfoundation/ethereumjs-vm": "7.0.1", "@nomicfoundation/solidity-analyzer": "^0.1.0", "@sentry/node": "^5.18.1", "@types/bn.js": "^5.1.0", @@ -46089,20 +49300,47 @@ } }, "hardhat-contract-sizer": { - "version": "2.6.1", - "resolved": "https://registry.npmjs.org/hardhat-contract-sizer/-/hardhat-contract-sizer-2.6.1.tgz", - "integrity": "sha512-b8wS7DBvyo22kmVwpzstAQTdDCThpl/ySBqZh5ga9Yxjf61/uTL12TEg5nl7lDeWy73ntEUzxMwY6XxbQEc2wA==", + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/hardhat-contract-sizer/-/hardhat-contract-sizer-2.8.0.tgz", + "integrity": "sha512-jXt2Si3uIDx5z99J+gvKa0yvIw156pE4dpH9X/PvTQv652BUd+qGj7WT93PXnHXGh5qhQLkjDYeZMYNOThfjFg==", "requires": { "chalk": "^4.0.0", - "cli-table3": "^0.6.0" + "cli-table3": "^0.6.0", + "strip-ansi": "^6.0.0" + }, + "dependencies": { + "ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==" + }, + "strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "requires": { + "ansi-regex": "^5.0.1" + } + } } }, "hardhat-deploy": { - "version": "0.11.22", - "resolved": "https://registry.npmjs.org/hardhat-deploy/-/hardhat-deploy-0.11.22.tgz", - "integrity": "sha512-ZhHVNB7Jo2l8Is+KIAk9F8Q3d7pptyiX+nsNbIFXztCz81kaP+6kxNODRBqRCy7SOD3It4+iKCL6tWsPAA/jVQ==", + "version": "0.11.29", + "resolved": "https://registry.npmjs.org/hardhat-deploy/-/hardhat-deploy-0.11.29.tgz", + "integrity": "sha512-9F+MRFkEocelzB8d+SDDCcTL7edBYAj2S63ldknvfIIBSajeB6q1/jm+dlK1GjcWzAzw7EVoxtjJXzxAxZfZcg==", "dev": true, "requires": { + "@ethersproject/abi": "^5.7.0", + "@ethersproject/abstract-signer": "^5.7.0", + "@ethersproject/address": "^5.7.0", + "@ethersproject/bignumber": "^5.7.0", + "@ethersproject/bytes": "^5.7.0", + "@ethersproject/constants": "^5.7.0", + "@ethersproject/contracts": "^5.7.0", + "@ethersproject/providers": "^5.7.2", + "@ethersproject/solidity": "^5.7.0", + "@ethersproject/transactions": "^5.7.0", + "@ethersproject/wallet": "^5.7.0", "@types/qs": "^6.9.7", "axios": "^0.21.1", "chalk": "^4.1.2", @@ -46115,7 +49353,7 @@ "match-all": "^1.2.6", "murmur-128": "^0.2.1", "qs": "^6.9.4", - "zksync-web3": "^0.8.1" + "zksync-web3": "^0.14.3" }, "dependencies": { "form-data": { @@ -46139,13 +49377,6 @@ "jsonfile": "^6.0.1", "universalify": "^2.0.0" } - }, - "zksync-web3": { - "version": "0.8.1", - "resolved": "https://registry.npmjs.org/zksync-web3/-/zksync-web3-0.8.1.tgz", - "integrity": "sha512-1A4aHPQ3MyuGjpv5X/8pVEN+MdZqMjfVmiweQSRjOlklXYu65wT9BGEOtCmMs5d3gIvLp4ssfTeuR5OCKOD2kw==", - "dev": true, - "requires": {} } } }, @@ -46271,9 +49502,9 @@ "dev": true }, "highlightjs-solidity": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/highlightjs-solidity/-/highlightjs-solidity-2.0.5.tgz", - "integrity": "sha512-ReXxQSGQkODMUgHcWzVSnfDCDrL2HshOYgw3OlIYmfHeRzUPkfJTUIp95pK4CmbiNG2eMTOmNLpfCz9Zq7Cwmg==", + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/highlightjs-solidity/-/highlightjs-solidity-2.0.6.tgz", + "integrity": "sha512-DySXWfQghjm2l6a/flF+cteroJqD4gI8GSdL4PtvxZSsAHie8m3yVe2JFoRg03ROKT6hp2Lc/BxXkqerNmtQYg==", "dev": true }, "hmac-drbg": { @@ -46289,8 +49520,7 @@ "hosted-git-info": { "version": "2.8.9", "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz", - "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==", - "dev": true + "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==" }, "htmlparser2": { "version": "8.0.1", @@ -46316,9 +49546,9 @@ } }, "http-cache-semantics": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.0.tgz", - "integrity": "sha512-carPklcUh7ROWRK7Cv27RPtdhYhUsela/ue5/jKzjegVvXDqM2ILE9Q2BGn9JZJh1g87cp56su/FgQSzcWS8cQ==" + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.1.tgz", + "integrity": "sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ==" }, "http-errors": { "version": "2.0.0", @@ -46481,8 +49711,7 @@ "invert-kv": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/invert-kv/-/invert-kv-1.0.0.tgz", - "integrity": "sha512-xgs2NH9AE66ucSq4cNG1nhSFghr5l6tdL15Pk+jl46bmmBapgoaY/AacXyaDznAqmGL99TiLSQgO/XazFSKYeQ==", - "dev": true + "integrity": "sha512-xgs2NH9AE66ucSq4cNG1nhSFghr5l6tdL15Pk+jl46bmmBapgoaY/AacXyaDznAqmGL99TiLSQgO/XazFSKYeQ==" }, "io-ts": { "version": "1.10.4", @@ -46509,8 +49738,7 @@ "is-arrayish": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", - "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==", - "dev": true + "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==" }, "is-bigint": { "version": "1.0.4", @@ -46547,15 +49775,6 @@ "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz", "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==" }, - "is-ci": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-2.0.0.tgz", - "integrity": "sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w==", - "dev": true, - "requires": { - "ci-info": "^2.0.0" - } - }, "is-date-object": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz", @@ -46564,12 +49783,6 @@ "has-tostringtag": "^1.0.0" } }, - "is-docker": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz", - "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==", - "dev": true - }, "is-extglob": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", @@ -46740,8 +49953,7 @@ "is-utf8": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/is-utf8/-/is-utf8-0.2.1.tgz", - "integrity": "sha512-rMYPYvCzsXywIsldgLaSoPlw5PfoB/ssr7hY4pLfcodrA5M/eArza1a9VmTiNIBNMjOGr1Ow9mTyU2o69U6U9Q==", - "dev": true + "integrity": "sha512-rMYPYvCzsXywIsldgLaSoPlw5PfoB/ssr7hY4pLfcodrA5M/eArza1a9VmTiNIBNMjOGr1Ow9mTyU2o69U6U9Q==" }, "is-weakref": { "version": "1.0.2", @@ -46751,15 +49963,6 @@ "call-bind": "^1.0.2" } }, - "is-wsl": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", - "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", - "dev": true, - "requires": { - "is-docker": "^2.0.0" - } - }, "isarray": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", @@ -46770,6 +49973,16 @@ "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==" }, + "isomorphic-unfetch": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/isomorphic-unfetch/-/isomorphic-unfetch-3.1.0.tgz", + "integrity": "sha512-geDJjpoZ8N0kWexiwkX8F9NkTsXhetLPVbZFQ+JTW239QNOwvB0gniuR1Wc6f0AMTn7/mFGyXvHTifrCp/GH8Q==", + "dev": true, + "requires": { + "node-fetch": "^2.6.1", + "unfetch": "^4.2.0" + } + }, "isomorphic-ws": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/isomorphic-ws/-/isomorphic-ws-4.0.1.tgz", @@ -46828,6 +50041,17 @@ } } }, + "js-cookie": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/js-cookie/-/js-cookie-2.2.1.tgz", + "integrity": "sha512-HvdH2LzI/EAZcUwA8+0nKNtWHqS+ZmijLA30RwZA0bo7ToCckjK5MkGhjED9KoRcXO6BaGI3I9UIzSA1FKFPOQ==", + "dev": true + }, + "js-sdsl": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/js-sdsl/-/js-sdsl-4.4.0.tgz", + "integrity": "sha512-FfVSdx6pJ41Oa+CF7RDaFmTnCaFhua+SNYQX74riGOpl96x+2jQCqEfQ2bnXu/5DPCqlRuiqyvTJM0Qjz26IVg==" + }, "js-sha3": { "version": "0.8.0", "resolved": "https://registry.npmjs.org/js-sha3/-/js-sha3-0.8.0.tgz", @@ -46862,6 +50086,15 @@ "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", "peer": true }, + "json-bigint": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-bigint/-/json-bigint-1.0.0.tgz", + "integrity": "sha512-SiPv/8VpZuWbvLSMtTDU8hEfrZWg/mH/nV/b4o0CYbSxu1UIQPLdwKOCIyLQX+VIPO5vrLX3i8qtqFyhdPSUSQ==", + "dev": true, + "requires": { + "bignumber.js": "^9.0.0" + } + }, "json-buffer": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", @@ -46990,9 +50223,9 @@ } }, "keyv": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.0.tgz", - "integrity": "sha512-2YvuMsA+jnFGtBareKqgANOEKe1mk3HKiXu2fRmAfyxG0MJAywNhi5ttWA3PMjl4NmpyjZNbFifR2vNjW1znfA==", + "version": "4.5.2", + "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.2.tgz", + "integrity": "sha512-5MHbFaKn8cNSmVW7BYnijeAVlE4cYA/SVkifVgrh7yotnfhKmjuXpDKjrABLnT0SfHWV21P8ow07OGfRrNDg8g==", "requires": { "json-buffer": "3.0.1" } @@ -47005,20 +50238,10 @@ "graceful-fs": "^4.1.9" } }, - "klaw-sync": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/klaw-sync/-/klaw-sync-6.0.0.tgz", - "integrity": "sha512-nIeuVSzdCCs6TDPTqI8w1Yre34sSq7AkZ4B3sfOBbI2CgVSB4Du4aLQijFU2+lhAFCwt9+42Hel6lQNIv6AntQ==", - "dev": true, - "requires": { - "graceful-fs": "^4.1.11" - } - }, "lcid": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/lcid/-/lcid-1.0.0.tgz", "integrity": "sha512-YiGkH6EnGrDGqLMITnGjXtGmNtjoXw9SVUzcaos8RBi7Ps0VBylkq+vOcY9QE5poLasPCR849ucFUkl0UzUyOw==", - "dev": true, "requires": { "invert-kv": "^1.0.0" } @@ -47248,7 +50471,6 @@ "version": "1.1.0", "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz", "integrity": "sha512-cy7ZdNRXdablkXYNI049pthVeXFurRyb9+hA/dZzerZ0pGTx42z+y+ssxBaVV2l70t1muq5IdKhn4UtcoGUY9A==", - "dev": true, "requires": { "graceful-fs": "^4.1.2", "parse-json": "^2.2.0", @@ -47260,8 +50482,7 @@ "pify": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", - "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==", - "dev": true + "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==" } } }, @@ -47286,7 +50507,12 @@ "lodash.assign": { "version": "4.2.0", "resolved": "https://registry.npmjs.org/lodash.assign/-/lodash.assign-4.2.0.tgz", - "integrity": "sha512-hFuH8TY+Yji7Eja3mGiuAxBqLagejScbG8GbG0j6o9vzn0YL14My+ktnqtZgFTosKymC9/44wP6s7xyuLfnClw==", + "integrity": "sha512-hFuH8TY+Yji7Eja3mGiuAxBqLagejScbG8GbG0j6o9vzn0YL14My+ktnqtZgFTosKymC9/44wP6s7xyuLfnClw==" + }, + "lodash.camelcase": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz", + "integrity": "sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA==", "dev": true }, "lodash.debounce": { @@ -47408,7 +50634,8 @@ "version": "1.3.6", "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==", - "devOptional": true + "optional": true, + "peer": true }, "markdown-table": { "version": "1.1.3", @@ -47422,11 +50649,11 @@ "dev": true }, "mathjs": { - "version": "11.5.0", - "resolved": "https://registry.npmjs.org/mathjs/-/mathjs-11.5.0.tgz", - "integrity": "sha512-vJ/+SqWtxjW6/aeDRt8xL3TlOVKqwN15BIyTGVqGbIWuiqgY4SxZ0yLuna82YH9CB757iFP7uJ4m3KvVBX7Qcg==", + "version": "11.8.0", + "resolved": "https://registry.npmjs.org/mathjs/-/mathjs-11.8.0.tgz", + "integrity": "sha512-I7r8HCoqUGyEiHQdeOCF2m2k9N+tcOHO3cZQ3tyJkMMBQMFqMR7dMQEboBMJAiFW2Um3PEItGPwcOc4P6KRqwg==", "requires": { - "@babel/runtime": "^7.20.6", + "@babel/runtime": "^7.21.0", "complex.js": "^2.1.1", "decimal.js": "^10.4.3", "escape-latex": "^1.2.0", @@ -47544,15 +50771,10 @@ "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==" }, - "micromatch": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", - "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", - "dev": true, - "requires": { - "braces": "^3.0.2", - "picomatch": "^2.3.1" - } + "micro-ftch": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/micro-ftch/-/micro-ftch-0.3.1.tgz", + "integrity": "sha512-/0LLxhzP0tfiR5hcQebtudP56gUurs2CLkGarnCiB/OqEyUFQ6U3paQi/tgLv0hBJYt2rnr9MNpxz4fiiugstg==" }, "miller-rabin": { "version": "4.0.1", @@ -47660,8 +50882,7 @@ "mkdirp-classic": { "version": "0.5.3", "resolved": "https://registry.npmjs.org/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz", - "integrity": "sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==", - "devOptional": true + "integrity": "sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==" }, "mkdirp-promise": { "version": "5.0.1", @@ -47914,8 +51135,7 @@ "nano-base32": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/nano-base32/-/nano-base32-1.0.1.tgz", - "integrity": "sha512-sxEtoTqAPdjWVGv71Q17koMFGsOMSiHsIFEvzOM7cNp8BXB4AnEwmDabm5dorusJf/v1z7QxaZYxUorU9RKaAw==", - "dev": true + "integrity": "sha512-sxEtoTqAPdjWVGv71Q17koMFGsOMSiHsIFEvzOM7cNp8BXB4AnEwmDabm5dorusJf/v1z7QxaZYxUorU9RKaAw==" }, "nano-json-stream-parser": { "version": "0.1.2", @@ -47936,7 +51156,8 @@ "napi-macros": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/napi-macros/-/napi-macros-2.0.0.tgz", - "integrity": "sha512-A0xLykHtARfueITVDernsAWdtIMbOJgKgcluwENp3AlsKN/PloyO10HtmoqnFAQAcxPkgZN7wdfPfEd0zNGxbg==" + "integrity": "sha512-A0xLykHtARfueITVDernsAWdtIMbOJgKgcluwENp3AlsKN/PloyO10HtmoqnFAQAcxPkgZN7wdfPfEd0zNGxbg==", + "optional": true }, "ncp": { "version": "2.0.0", @@ -47954,12 +51175,6 @@ "resolved": "https://registry.npmjs.org/next-tick/-/next-tick-1.1.0.tgz", "integrity": "sha512-CXdUiJembsNjuToQvxayPZF9Vqht7hewsvy2sOWafLvi2awflj9mOC6bHIg50orX8IJvWKY9wYQ/zB2kogPslQ==" }, - "nice-try": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz", - "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==", - "dev": true - }, "no-case": { "version": "2.3.2", "resolved": "https://registry.npmjs.org/no-case/-/no-case-2.3.2.tgz", @@ -47986,9 +51201,9 @@ } }, "node-abort-controller": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/node-abort-controller/-/node-abort-controller-3.0.1.tgz", - "integrity": "sha512-/ujIVxthRs+7q6hsdjHMaj8hRG9NuWmwrz+JdRwZ14jdFoKSkm+vDsCbF9PLpnSqjaWQJuTmVtcWHNLr+vrOFw==", + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/node-abort-controller/-/node-abort-controller-3.1.1.tgz", + "integrity": "sha512-AGK2yQKIjRuqnc6VkX2Xj5d+QW8xZ87pa1UK6yA6ouUyuxfHuMP6umE5QK7UmTeOAymo+Zx1Fxiuw9rVx8taHQ==", "optional": true }, "node-addon-api": { @@ -48051,9 +51266,9 @@ "integrity": "sha512-PiVXnNuFm5+iYkLBNeq5211hvO38y63T0i2KKh2KnUs3RpzJ+JtODFjkD8yjLwnDkTYF1eKXheUwdssR+NRZdg==" }, "nodemon": { - "version": "2.0.20", - "resolved": "https://registry.npmjs.org/nodemon/-/nodemon-2.0.20.tgz", - "integrity": "sha512-Km2mWHKKY5GzRg6i1j5OxOHQtuvVsgskLfigG25yTtbyfRGn/GNvIbRyOf1PSCKJ2aT/58TiuUsuOU5UToVViw==", + "version": "2.0.22", + "resolved": "https://registry.npmjs.org/nodemon/-/nodemon-2.0.22.tgz", + "integrity": "sha512-B8YqaKMmyuCO7BowF1Z1/mkPqLk6cs/l63Ojtd6otKjMx47Dq1utxfRxcavH1I7VSaL8n5BUaoutadnsX3AAVQ==", "requires": { "chokidar": "^3.5.2", "debug": "^3.2.7", @@ -48150,7 +51365,6 @@ "version": "2.5.0", "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", - "dev": true, "requires": { "hosted-git-info": "^2.1.4", "resolve": "^1.10.0", @@ -48161,8 +51375,7 @@ "semver": { "version": "5.7.1", "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "dev": true + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" } } }, @@ -48200,8 +51413,7 @@ "number-is-nan": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", - "integrity": "sha512-4jbtZXNAsfZbAHiiqjLPBiCl16dES1zI4Hpzzxw61Tk+loF+sBDBKx1ICKKKwIqQ7M0mFn1TmkN7euSncWgHiQ==", - "devOptional": true + "integrity": "sha512-4jbtZXNAsfZbAHiiqjLPBiCl16dES1zI4Hpzzxw61Tk+loF+sBDBKx1ICKKKwIqQ7M0mFn1TmkN7euSncWgHiQ==" }, "number-to-bn": { "version": "1.7.0", @@ -48307,16 +51519,6 @@ } } }, - "open": { - "version": "7.4.2", - "resolved": "https://registry.npmjs.org/open/-/open-7.4.2.tgz", - "integrity": "sha512-MVHddDVweXZF3awtlAS+6pgKLlm/JgxZ90+/NBurBoQctVOOB/zDdVjcyPzQ+0laDGbsWgrRkflI65sQeOgT9Q==", - "dev": true, - "requires": { - "is-docker": "^2.0.0", - "is-wsl": "^2.1.1" - } - }, "ordinal": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/ordinal/-/ordinal-1.0.3.tgz", @@ -48332,7 +51534,6 @@ "version": "1.4.0", "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-1.4.0.tgz", "integrity": "sha512-PRT7ZORmwu2MEFt4/fv3Q+mEfN4zetKxufQrkShY2oGvUms9r8otu5HfdyIFHkYXjO7laNsoVGmM2MANfuTA8g==", - "dev": true, "requires": { "lcid": "^1.0.0" } @@ -48429,7 +51630,6 @@ "version": "2.2.0", "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz", "integrity": "sha512-QR/GGaKCkhwk1ePQNYDRKYZ3mwU9ypsKhB0XyFnLQdomyEqk3e8wpW3V5Jp88zbxK4n5ST1nqo+g9juTpownhQ==", - "dev": true, "requires": { "error-ex": "^1.2.0" } @@ -48467,159 +51667,6 @@ "upper-case-first": "^1.1.0" } }, - "patch-package": { - "version": "6.4.7", - "resolved": "https://registry.npmjs.org/patch-package/-/patch-package-6.4.7.tgz", - "integrity": "sha512-S0vh/ZEafZ17hbhgqdnpunKDfzHQibQizx9g8yEf5dcVk3KOflOfdufRXQX8CSEkyOQwuM/bNz1GwKvFj54kaQ==", - "dev": true, - "requires": { - "@yarnpkg/lockfile": "^1.1.0", - "chalk": "^2.4.2", - "cross-spawn": "^6.0.5", - "find-yarn-workspace-root": "^2.0.0", - "fs-extra": "^7.0.1", - "is-ci": "^2.0.0", - "klaw-sync": "^6.0.0", - "minimist": "^1.2.0", - "open": "^7.4.2", - "rimraf": "^2.6.3", - "semver": "^5.6.0", - "slash": "^2.0.0", - "tmp": "^0.0.33" - }, - "dependencies": { - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "requires": { - "color-convert": "^1.9.0" - } - }, - "brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dev": true, - "requires": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - } - }, - "color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dev": true, - "requires": { - "color-name": "1.1.3" - } - }, - "color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", - "dev": true - }, - "escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", - "dev": true - }, - "fs-extra": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-7.0.1.tgz", - "integrity": "sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==", - "dev": true, - "requires": { - "graceful-fs": "^4.1.2", - "jsonfile": "^4.0.0", - "universalify": "^0.1.0" - } - }, - "glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "dev": true, - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - }, - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", - "dev": true - }, - "jsonfile": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", - "integrity": "sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==", - "dev": true, - "requires": { - "graceful-fs": "^4.1.6" - } - }, - "minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dev": true, - "requires": { - "brace-expansion": "^1.1.7" - } - }, - "rimraf": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", - "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", - "dev": true, - "requires": { - "glob": "^7.1.3" - } - }, - "semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "dev": true - }, - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - }, - "universalify": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", - "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", - "dev": true - } - } - }, "path": { "version": "0.12.7", "resolved": "https://registry.npmjs.org/path/-/path-0.12.7.tgz", @@ -48668,12 +51715,6 @@ "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==" }, - "path-key": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", - "integrity": "sha512-fEHGKCSmUSDPv4uoj8AlD+joPlq3peND+HRYyxFz4KPw4z926S/b8rIuFs2FYJg3BwsxJf6A9/3eIdLaYC+9Dw==", - "dev": true - }, "path-parse": { "version": "1.0.7", "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", @@ -48688,7 +51729,6 @@ "version": "1.1.0", "resolved": "https://registry.npmjs.org/path-type/-/path-type-1.1.0.tgz", "integrity": "sha512-S4eENJz1pkiQn9Znv33Q+deTOKmbl+jj1Fl+qiP/vYezj+S8x+J3Uo0ISrx/QoEvIlOaDWJhPaRd1flJ9HXZqg==", - "dev": true, "requires": { "graceful-fs": "^4.1.2", "pify": "^2.0.0", @@ -48698,8 +51738,7 @@ "pify": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", - "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==", - "dev": true + "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==" } } }, @@ -48803,18 +51842,25 @@ } } }, + "platform-deploy-client": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/platform-deploy-client/-/platform-deploy-client-0.6.0.tgz", + "integrity": "sha512-mBfnOvF2gb9acGJjlXBQ6VOAkKFRdljsNKHUVY5xKqzKP2PNh/RqCIvi5AR5NqLMrQ3XaMIwRvmwAjtGw7JhYg==", + "dev": true, + "requires": { + "@ethersproject/abi": "^5.6.3", + "axios": "^0.21.2", + "defender-base-client": "^1.44.0", + "lodash": "^4.17.19", + "node-fetch": "^2.6.0" + } + }, "pluralize": { "version": "8.0.0", "resolved": "https://registry.npmjs.org/pluralize/-/pluralize-8.0.0.tgz", "integrity": "sha512-Nc3IT5yHzflTfbjgqWcCPpo7DaKy4FnpB0l/zCAW0Tc7jxAiuqSxHasntB3D7887LSrA93kDJ9IXovxJYxyLCA==", "optional": true }, - "postinstall-postinstall": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/postinstall-postinstall/-/postinstall-postinstall-2.1.0.tgz", - "integrity": "sha512-7hQX6ZlZXIoRiWNrbMQaLzUUfH+sSx39u8EJ9HYuDc1kLo9IXKWjM5RSquZN1ad5GnH8CGFM78fsAAQi3OKEEQ==", - "dev": true - }, "pouchdb": { "version": "7.3.0", "resolved": "https://registry.npmjs.org/pouchdb/-/pouchdb-7.3.0.tgz", @@ -49187,9 +52233,9 @@ "integrity": "sha512-ravE6m9Atw9Z/jjttRUZ+clIXogdghyZAuWJ3qEzjT+jI/dL1ifAqhZeC5VHzQp1MSt1+jxKkFNemj/iO7tVUA==" }, "prettier": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.7.1.tgz", - "integrity": "sha512-ujppO+MkdPqoVINuDFDRLClm7D78qbDt0/NR+wp5FqEZOoTNAjPHWj17QRhu7geIHJfcNhRk1XVQmF8Bp3ye+g==", + "version": "2.8.7", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.8.7.tgz", + "integrity": "sha512-yPngTo3aXUUmyuTjeTUT75txrf+aMh9FiD7q9ZE/i6r0bPb22g4FsE6Y338PQX1bmfy08i9QQCB7/rcUAVntfw==", "dev": true }, "process": { @@ -49239,6 +52285,12 @@ "ipaddr.js": "1.9.1" } }, + "proxy-from-env": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", + "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==", + "optional": true + }, "prr": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/prr/-/prr-1.0.1.tgz", @@ -49389,7 +52441,6 @@ "version": "1.1.0", "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-1.1.0.tgz", "integrity": "sha512-7BGwRHqt4s/uVbuyoeejRn4YmFnYZiFl4AuaeXHlgZf3sONF0SOGlxs2Pw8g6hCKupo08RafIO5YXFNOKTfwsQ==", - "dev": true, "requires": { "load-json-file": "^1.0.0", "normalize-package-data": "^2.3.2", @@ -49400,7 +52451,6 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-1.0.1.tgz", "integrity": "sha512-WD9MTlNtI55IwYUS27iHh9tK3YoIVhxis8yKhLpTqWtml739uXc9NWTpxoHkfZf3+DkCCsXox94/VWZniuZm6A==", - "dev": true, "requires": { "find-up": "^1.0.0", "read-pkg": "^1.0.0" @@ -49410,7 +52460,6 @@ "version": "1.1.2", "resolved": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz", "integrity": "sha512-jvElSjyuo4EMQGoTwo1uJU5pQMwTW5lS1x05zzfJuTIyLR3zwO27LYrxNg+dlvKpGOuGy/MzBdXh80g0ve5+HA==", - "dev": true, "requires": { "path-exists": "^2.0.0", "pinkie-promise": "^2.0.0" @@ -49420,7 +52469,6 @@ "version": "2.1.0", "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz", "integrity": "sha512-yTltuKuhtNeFJKa1PiRzfLAU5182q1y4Eb4XCJ3PBqyzEDkAZRzBrKKBct682ls9reBVHf9udYLN5Nd+K1B9BQ==", - "dev": true, "requires": { "pinkie-promise": "^2.0.0" } @@ -49445,6 +52493,12 @@ "picomatch": "^2.2.1" } }, + "reduce-flatten": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/reduce-flatten/-/reduce-flatten-2.0.0.tgz", + "integrity": "sha512-EJ4UNY/U1t2P/2k6oqotuX2Cc3T6nxJwsM0N0asT7dhrtH1ltUxDn4NalSYmPE2rCkVpcf/X6R0wDwcFpzhd4w==", + "dev": true + }, "redux": { "version": "3.7.2", "resolved": "https://registry.npmjs.org/redux/-/redux-3.7.2.tgz", @@ -49575,13 +52629,12 @@ "require-main-filename": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-1.0.1.tgz", - "integrity": "sha512-IqSUtOVP4ksd1C/ej5zeEh/BIP2ajqpn8c5x+q99gvcIG/Qf0cud5raVnE/Dwd0ua9TXYDoDc0RE5hBSdz22Ug==", - "dev": true + "integrity": "sha512-IqSUtOVP4ksd1C/ej5zeEh/BIP2ajqpn8c5x+q99gvcIG/Qf0cud5raVnE/Dwd0ua9TXYDoDc0RE5hBSdz22Ug==" }, "reselect": { - "version": "4.1.7", - "resolved": "https://registry.npmjs.org/reselect/-/reselect-4.1.7.tgz", - "integrity": "sha512-Zu1xbUt3/OPwsXL46hvOOoQrap2azE7ZQbokq61BQfiXvhewsKDwhMeZjTX9sX0nvw1t/U5Audyn1I9P/m9z0A==" + "version": "4.1.8", + "resolved": "https://registry.npmjs.org/reselect/-/reselect-4.1.8.tgz", + "integrity": "sha512-ab9EmR80F/zQTMNeneUr4cv+jSwPJgIlvEmVwLerwrWVbpLlBuls9XHzIeTFy4cegU2NHBp3va0LKOzU5qFEYQ==" }, "reselect-tree": { "version": "1.3.7", @@ -49703,8 +52756,7 @@ "ripemd160-min": { "version": "0.0.6", "resolved": "https://registry.npmjs.org/ripemd160-min/-/ripemd160-min-0.0.6.tgz", - "integrity": "sha512-+GcJgQivhs6S9qvLogusiTcS9kQUfgR75whKuy5jIhuiOfQuJ8fjqxV6EGD5duH1Y/FawFUMtMhyeq3Fbnib8A==", - "dev": true + "integrity": "sha512-+GcJgQivhs6S9qvLogusiTcS9kQUfgR75whKuy5jIhuiOfQuJ8fjqxV6EGD5duH1Y/FawFUMtMhyeq3Fbnib8A==" }, "rlp": { "version": "2.2.7", @@ -49715,9 +52767,9 @@ } }, "rpc-websockets": { - "version": "7.5.0", - "resolved": "https://registry.npmjs.org/rpc-websockets/-/rpc-websockets-7.5.0.tgz", - "integrity": "sha512-9tIRi1uZGy7YmDjErf1Ax3wtqdSSLIlnmL5OtOzgd5eqPKbsPpwDP5whUDO2LQay3Xp0CcHlcNSGzacNRluBaQ==", + "version": "7.5.1", + "resolved": "https://registry.npmjs.org/rpc-websockets/-/rpc-websockets-7.5.1.tgz", + "integrity": "sha512-kGFkeTsmd37pHPMaHIgN1LVKXMi0JD782v4Ds9ZKtLlwdTKjn+CxM9A9/gLT2LaOuEcEFGL98h1QWQtlOIdW0w==", "requires": { "@babel/runtime": "^7.17.2", "bufferutil": "^4.0.1", @@ -49979,7 +53031,6 @@ "version": "2.1.4", "resolved": "https://registry.npmjs.org/sha3/-/sha3-2.1.4.tgz", "integrity": "sha512-S8cNxbyb0UGUM2VhRD4Poe5N58gJnJsLJ5vC7FYWGUmGhcsj4++WaIOBFVDxlG0W3To6xBuiRh+i0Qp2oNCOtg==", - "dev": true, "requires": { "buffer": "6.0.3" } @@ -49989,21 +53040,6 @@ "resolved": "https://registry.npmjs.org/shallowequal/-/shallowequal-1.1.0.tgz", "integrity": "sha512-y0m1JoUZSlPAjXVtPPW70aZWfIL/dSP7AFkRnniLCrK/8MDKog3TySTBmckD+RObVxH0v4Tox67+F14PdED2oQ==" }, - "shebang-command": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", - "integrity": "sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg==", - "dev": true, - "requires": { - "shebang-regex": "^1.0.0" - } - }, - "shebang-regex": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", - "integrity": "sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ==", - "dev": true - }, "side-channel": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", @@ -50051,12 +53087,6 @@ } } }, - "slash": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-2.0.0.tgz", - "integrity": "sha512-ZYKh3Wh2z1PpEXWr0MpSBZ0V6mZHAQfYevttO11c51CaWjGTaadiKZ+wVt1PbMlDV5qhMFslpZCemhwOK7C89A==", - "dev": true - }, "slice-ansi": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz", @@ -50077,9 +53107,9 @@ } }, "solc": { - "version": "0.8.17", - "resolved": "https://registry.npmjs.org/solc/-/solc-0.8.17.tgz", - "integrity": "sha512-Dtidk2XtTTmkB3IKdyeg6wLYopJnBVxdoykN8oP8VY3PQjN16BScYoUJTXFm2OP7P0hXNAqWiJNmmfuELtLf8g==", + "version": "0.8.20", + "resolved": "https://registry.npmjs.org/solc/-/solc-0.8.20.tgz", + "integrity": "sha512-fPRnGspIEqmhu63RFO3pc79sLA7ZmzO0Uy0L5l6hEt2wAsq0o7UV6pXkAp3Mfv9IBhg7Px/oTu3a+y4gs3BWrQ==", "requires": { "command-exists": "^1.2.8", "commander": "^8.1.0", @@ -50103,9 +53133,9 @@ } }, "solidity-ast": { - "version": "0.4.35", - "resolved": "https://registry.npmjs.org/solidity-ast/-/solidity-ast-0.4.35.tgz", - "integrity": "sha512-F5bTDLh3rmDxRmLSrs3qt3nvxJprWSEkS7h2KmuXDx7XTfJ6ZKVTV1rtPIYCqJAuPsU/qa8YUeFn7jdOAZcTPA==", + "version": "0.4.49", + "resolved": "https://registry.npmjs.org/solidity-ast/-/solidity-ast-0.4.49.tgz", + "integrity": "sha512-Pr5sCAj1SFqzwFZw1HPKSq0PehlQNdM8GwKyAVYh2DOn7/cCK8LUKD1HeHnKtTgBW7hi9h4nnnan7hpAg5RhWQ==", "dev": true }, "source-map": { @@ -50132,7 +53162,6 @@ "version": "3.1.1", "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.1.tgz", "integrity": "sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w==", - "dev": true, "requires": { "spdx-expression-parse": "^3.0.0", "spdx-license-ids": "^3.0.0" @@ -50141,14 +53170,12 @@ "spdx-exceptions": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz", - "integrity": "sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==", - "dev": true + "integrity": "sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==" }, "spdx-expression-parse": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz", "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==", - "dev": true, "requires": { "spdx-exceptions": "^2.1.0", "spdx-license-ids": "^3.0.0" @@ -50157,14 +53184,12 @@ "spdx-license-ids": { "version": "3.0.12", "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.12.tgz", - "integrity": "sha512-rr+VVSXtRhO4OHbXUiAF7xW3Bo9DuuF6C5jH+q/x15j2jniycgKbxU09Hr0WqlSLUs4i4ltHGXqTe7VHclYWyA==", - "dev": true + "integrity": "sha512-rr+VVSXtRhO4OHbXUiAF7xW3Bo9DuuF6C5jH+q/x15j2jniycgKbxU09Hr0WqlSLUs4i4ltHGXqTe7VHclYWyA==" }, "split-ca": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/split-ca/-/split-ca-1.0.1.tgz", - "integrity": "sha512-Q5thBSxp5t8WPTTJQS59LrGqOZqOsrhDGDVm8azCqIBjSBd7nd9o2PM+mDulQQkh8h//4U6hFZnc/mul8t5pWQ==", - "dev": true + "integrity": "sha512-Q5thBSxp5t8WPTTJQS59LrGqOZqOsrhDGDVm8azCqIBjSBd7nd9o2PM+mDulQQkh8h//4U6hFZnc/mul8t5pWQ==" }, "sprintf-js": { "version": "1.0.3", @@ -50175,7 +53200,6 @@ "version": "1.11.0", "resolved": "https://registry.npmjs.org/ssh2/-/ssh2-1.11.0.tgz", "integrity": "sha512-nfg0wZWGSsfUe/IBJkXVll3PEZ//YH2guww+mP88gTpuSU4FtZN7zu9JoeTGOyCNx2dTDtT9fOpWwlzyj4uOOw==", - "dev": true, "requires": { "asn1": "^0.2.4", "bcrypt-pbkdf": "^1.0.2", @@ -50249,6 +53273,12 @@ "safe-buffer": "~5.2.0" } }, + "string-format": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/string-format/-/string-format-2.0.0.tgz", + "integrity": "sha512-bbEs3scLeYNXLecRRuk6uJxdXUSj6le/8rNPHChIJTn2V79aXVTR1EH2OH5zLKKoz0V02fOUKZZcw01pLUShZA==", + "dev": true + }, "string-width": { "version": "4.2.3", "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", @@ -50306,7 +53336,6 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz", "integrity": "sha512-kwrX1y7czp1E69n2ajbG65mIo9dqvJ+8aBQXOGVxqwvNbsXdFM6Lq37dLAY3mknUwru8CfcCbfOLL/gMo+fi3g==", - "dev": true, "requires": { "is-utf8": "^0.2.0" } @@ -50465,9 +53494,9 @@ } }, "got": { - "version": "11.8.5", - "resolved": "https://registry.npmjs.org/got/-/got-11.8.5.tgz", - "integrity": "sha512-o0Je4NvQObAuZPHLFoRSkdG2lTgtcynqymzg2Vupdx6PorhaT5MCbIyXG6d4D94kk8ZG57QeosgdiqfJWhEhlQ==", + "version": "11.8.6", + "resolved": "https://registry.npmjs.org/got/-/got-11.8.6.tgz", + "integrity": "sha512-6tfZ91bOr7bOXnK7PRDCGBLa1H4U080YHNaAQ2KsMGlLEzRbk44nsZF2E1IeRc3vtJHPVbKCYgdFbaGO2ljd8g==", "requires": { "@sindresorhus/is": "^4.0.0", "@szmarczak/http-timer": "^4.0.5", @@ -50592,6 +53621,32 @@ } } }, + "table-layout": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/table-layout/-/table-layout-1.0.2.tgz", + "integrity": "sha512-qd/R7n5rQTRFi+Zf2sk5XVVd9UQl6ZkduPFC3S7WEGJAmetDTjY3qPN50eSKzwuzEyQKy5TN2TiZdkIjos2L6A==", + "dev": true, + "requires": { + "array-back": "^4.0.1", + "deep-extend": "~0.6.0", + "typical": "^5.2.0", + "wordwrapjs": "^4.0.0" + }, + "dependencies": { + "array-back": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/array-back/-/array-back-4.0.2.tgz", + "integrity": "sha512-NbdMezxqf94cnNfWLL7V/im0Ub+Anbb0IoZhvzie8+4HJ4nMQuzHuy49FkGYCJK2yAloZ3meiB6AVMClbrI1vg==", + "dev": true + }, + "typical": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/typical/-/typical-5.2.0.tgz", + "integrity": "sha512-dvdQgNDNJo+8B2uBQoqdb11eUCE1JQXhvjC/CZtgvZseVd5TYMXnq0+vuUemXbd/Se29cTaUuPX3YIc2xgbvIg==", + "dev": true + } + } + }, "tar": { "version": "4.4.19", "resolved": "https://registry.npmjs.org/tar/-/tar-4.4.19.tgz", @@ -50622,7 +53677,6 @@ "version": "2.2.0", "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-2.2.0.tgz", "integrity": "sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==", - "devOptional": true, "requires": { "bl": "^4.0.3", "end-of-stream": "^1.4.1", @@ -50631,32 +53685,10 @@ "readable-stream": "^3.1.1" } }, - "test-value": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/test-value/-/test-value-2.1.0.tgz", - "integrity": "sha512-+1epbAxtKeXttkGFMTX9H42oqzOTufR1ceCF+GYA5aOmvaPq9wd4PUS8329fn2RRLGNeUkgRLnVpycjx8DsO2w==", - "dev": true, - "requires": { - "array-back": "^1.0.3", - "typical": "^2.6.0" - }, - "dependencies": { - "array-back": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/array-back/-/array-back-1.0.4.tgz", - "integrity": "sha512-1WxbZvrmyhkNoeYcizokbmh5oiOCIfyvGtcqbK3Ls1v1fKcquzxnQSceOx6tzq7jmai2kFLWIpGND2cLhH6TPw==", - "dev": true, - "requires": { - "typical": "^2.6.0" - } - } - } - }, "testrpc": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/testrpc/-/testrpc-0.0.1.tgz", - "integrity": "sha512-afH1hO+SQ/VPlmaLUFj2636QMeDvPCeQMc/9RBMW0IfjNe9gFD9Ra3ShqYkB7py0do1ZcCna/9acHyzTJ+GcNA==", - "dev": true + "integrity": "sha512-afH1hO+SQ/VPlmaLUFj2636QMeDvPCeQMc/9RBMW0IfjNe9gFD9Ra3ShqYkB7py0do1ZcCna/9acHyzTJ+GcNA==" }, "text-encoding-utf-8": { "version": "1.0.2", @@ -50805,6 +53837,11 @@ "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==" }, + "toml": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/toml/-/toml-3.0.0.tgz", + "integrity": "sha512-y/mWCZinnvxjTKYhJ+pYxwD0mRLVvOtdS2Awbgxln6iEnt4rk0yBxeSBHkGJcPucRiG0e55mwWp+g/05rsrd6w==" + }, "touch": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/touch/-/touch-3.1.0.tgz", @@ -50835,15 +53872,15 @@ "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==" }, "truffle": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/truffle/-/truffle-5.7.1.tgz", - "integrity": "sha512-6XZfF9xb0J+9O4BdSyIEtMubGCRDJAPXu9a0KhDXXNbsPPMNFzbYfG3oI5W13q4V9mO4PQEtYKeLRD6QyLwFdg==", + "version": "5.9.0", + "resolved": "https://registry.npmjs.org/truffle/-/truffle-5.9.0.tgz", + "integrity": "sha512-XZBlGzU+IA0F3oDpmTWas62TYrNseG3xYh861zR+E09K2A0E0eSuTi1d5k+Uzhv4I6bIlNSWL31iI1J/PiZxcw==", "requires": { - "@truffle/db": "^2.0.10", - "@truffle/db-loader": "^0.2.10", - "@truffle/debugger": "^11.0.21", + "@truffle/db": "^2.0.24", + "@truffle/db-loader": "^0.2.24", + "@truffle/debugger": "^11.1.0", "app-module-path": "^2.2.0", - "ganache": "7.6.0", + "ganache": "7.8.0", "mocha": "10.1.0", "original-require": "^1.0.1" } @@ -51624,138 +54661,38 @@ } } }, - "ts-essentials": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/ts-essentials/-/ts-essentials-1.0.4.tgz", - "integrity": "sha512-q3N1xS4vZpRouhYHDPwO0bDW3EZ6SK9CrrDHxi/D6BPReSjpVgWIOpLS2o0gSBZm+7q/wyKp6RVM1AeeW7uyfQ==", - "dev": true - }, - "ts-generator": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/ts-generator/-/ts-generator-0.1.1.tgz", - "integrity": "sha512-N+ahhZxTLYu1HNTQetwWcx3so8hcYbkKBHTr4b4/YgObFTIKkOSSsaa+nal12w8mfrJAyzJfETXawbNjSfP2gQ==", + "ts-command-line-args": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/ts-command-line-args/-/ts-command-line-args-2.5.0.tgz", + "integrity": "sha512-Ff7Xt04WWCjj/cmPO9eWTJX3qpBZWuPWyQYG1vnxJao+alWWYjwJBc5aYz3h5p5dE08A6AnpkgiCtP/0KXXBYw==", "dev": true, "requires": { - "@types/mkdirp": "^0.5.2", - "@types/prettier": "^2.1.1", - "@types/resolve": "^0.0.8", - "chalk": "^2.4.1", - "glob": "^7.1.2", - "mkdirp": "^0.5.1", - "prettier": "^2.1.2", - "resolve": "^1.8.1", - "ts-essentials": "^1.0.0" - }, - "dependencies": { - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "requires": { - "color-convert": "^1.9.0" - } - }, - "brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dev": true, - "requires": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - } - }, - "color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dev": true, - "requires": { - "color-name": "1.1.3" - } - }, - "color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", - "dev": true - }, - "escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", - "dev": true - }, - "glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "dev": true, - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - }, - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", - "dev": true - }, - "minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dev": true, - "requires": { - "brace-expansion": "^1.1.7" - } - }, - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - } + "@morgan-stanley/ts-mocking-bird": "^0.6.2", + "chalk": "^4.1.0", + "command-line-args": "^5.1.1", + "command-line-usage": "^6.1.0", + "string-format": "^2.0.0" } }, + "ts-essentials": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/ts-essentials/-/ts-essentials-7.0.3.tgz", + "integrity": "sha512-8+gr5+lqO3G84KdiTSMRLtuyJ+nTBVRKuCrK4lidMPdVeEp0uqC875uE5NMcaA7YYMN7XsNiFQuMvasF8HT/xQ==", + "dev": true, + "requires": {} + }, "ts-node": { - "version": "10.9.1", - "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.9.1.tgz", - "integrity": "sha512-NtVysVPkxxrwFGUUxGYhfux8k78pQB3JqYBXlLRZgdGUqTO5wU/UyHop5p70iEbGhB7q5KmiZiU0Y3KlJrScEw==", - "devOptional": true, + "version": "9.1.1", + "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-9.1.1.tgz", + "integrity": "sha512-hPlt7ZACERQGf03M253ytLY3dHbGNGrAq9qIHWUY9XHYl1z7wYngSr3OQ5xmui8o2AaxsONxIzjafLUiWBo1Fg==", + "optional": true, + "peer": true, "requires": { - "@cspotcode/source-map-support": "^0.8.0", - "@tsconfig/node10": "^1.0.7", - "@tsconfig/node12": "^1.0.7", - "@tsconfig/node14": "^1.0.0", - "@tsconfig/node16": "^1.0.2", - "acorn": "^8.4.1", - "acorn-walk": "^8.1.1", "arg": "^4.1.0", "create-require": "^1.1.0", "diff": "^4.0.1", "make-error": "^1.1.1", - "v8-compile-cache-lib": "^3.0.1", + "source-map-support": "^0.5.17", "yn": "3.1.1" }, "dependencies": { @@ -51763,14 +54700,15 @@ "version": "4.0.2", "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", - "devOptional": true + "optional": true, + "peer": true } } }, "tslib": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.1.tgz", - "integrity": "sha512-tGyy4dAjRIEwI7BzsB0lynWgOpfqjUdq91XXAlIWD2OwKBH7oCl/GZG/HT4BOHrTlPMOASlMQ7veyTqpmRcrNA==" + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.5.1.tgz", + "integrity": "sha512-KaI6gPil5m9vF7DKaoXxx1ia9fxS4qG5YveErRRVknPDXXriu5M8h48YRjB6h5ZUOKuAKlSJYb0GaDe8I39fRw==" }, "tsort": { "version": "0.0.1", @@ -51820,20 +54758,33 @@ } }, "typechain": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/typechain/-/typechain-3.0.0.tgz", - "integrity": "sha512-ft4KVmiN3zH4JUFu2WJBrwfHeDf772Tt2d8bssDTo/YcckKW2D+OwFrHXRC6hJvO3mHjFQTihoMV6fJOi0Hngg==", + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/typechain/-/typechain-8.1.1.tgz", + "integrity": "sha512-uF/sUvnXTOVF2FHKhQYnxHk4su4JjZR8vr4mA2mBaRwHTbwh0jIlqARz9XJr1tA0l7afJGvEa1dTSi4zt039LQ==", "dev": true, "requires": { - "command-line-args": "^4.0.7", - "debug": "^4.1.1", + "@types/prettier": "^2.1.1", + "debug": "^4.3.1", "fs-extra": "^7.0.0", + "glob": "7.1.7", "js-sha3": "^0.8.0", "lodash": "^4.17.15", - "ts-essentials": "^6.0.3", - "ts-generator": "^0.1.1" + "mkdirp": "^1.0.4", + "prettier": "^2.3.1", + "ts-command-line-args": "^2.2.0", + "ts-essentials": "^7.0.1" }, "dependencies": { + "brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "requires": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, "fs-extra": { "version": "7.0.1", "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-7.0.1.tgz", @@ -51845,6 +54796,20 @@ "universalify": "^0.1.0" } }, + "glob": { + "version": "7.1.7", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.7.tgz", + "integrity": "sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ==", + "dev": true, + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + }, "jsonfile": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", @@ -51854,12 +54819,20 @@ "graceful-fs": "^4.1.6" } }, - "ts-essentials": { - "version": "6.0.7", - "resolved": "https://registry.npmjs.org/ts-essentials/-/ts-essentials-6.0.7.tgz", - "integrity": "sha512-2E4HIIj4tQJlIHuATRHayv0EfMGK3ris/GRk1E3CFnsZzeNV+hUmelbaTZHLtXaZppM5oLhHRtO04gINC4Jusw==", + "minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", "dev": true, - "requires": {} + "requires": { + "brace-expansion": "^1.1.7" + } + }, + "mkdirp": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", + "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", + "dev": true }, "universalify": { "version": "0.1.2", @@ -51888,10 +54861,9 @@ } }, "typescript": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.0.3.tgz", - "integrity": "sha512-xv8mOEDnigb/tN9PSMTwSEqAnUvkoXMQlicOb0IUVDBSQCgBSaAAROUZYy2IcUy5qU6XajK5jjjO7TMWqBTKZA==", - "devOptional": true + "version": "5.0.4", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.0.4.tgz", + "integrity": "sha512-cW9T5W9xY37cc+jfEnaUvX91foxtHkza3Nw3wkoF4sSlKn0MONdkdEndig/qPBWXNkmplh3NzayQzCiHM4/hqw==" }, "typescript-compare": { "version": "0.0.2", @@ -51915,9 +54887,9 @@ } }, "typical": { - "version": "2.6.1", - "resolved": "https://registry.npmjs.org/typical/-/typical-2.6.1.tgz", - "integrity": "sha512-ofhi8kjIje6npGozTip9Fr8iecmYfEbS06i0JnIg+rh51KakryWF4+jX8lLKZVhy6N+ID45WYSFCxPOdTWCzNg==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/typical/-/typical-4.0.0.tgz", + "integrity": "sha512-VAH4IvQ7BDFYglMd7BPRDfLgxZZX4O4TFcRDA6EN5X7erNJJq+McIEp8np9aVtxrCJ6qx4GTYVfOWNjcqwZgRw==", "dev": true }, "u2f-api": { @@ -51980,6 +54952,19 @@ "busboy": "^1.6.0" } }, +<<<<<<< HEAD + "unit-fns": { + "version": "0.1.9", + "resolved": "https://registry.npmjs.org/unit-fns/-/unit-fns-0.1.9.tgz", + "integrity": "sha512-bxceIkc7n2icQmgQx8u3vX98ZBIcpL2YJDKIsWDFK7ZX1TTuLvtNWVNd9/oARCDHd7QQRzwc+zxabO0HSK8X0w==" +======= + "unfetch": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/unfetch/-/unfetch-4.2.0.tgz", + "integrity": "sha512-F9p7yYCn6cIW9El1zi0HI6vqpeIvBsr3dSuRO6Xuppb1u5rXpCPmMvLSyECLhybr9isec8Ohl0hPekMVrEinDA==", + "dev": true +>>>>>>> 59dae2c (package upgrades 4) + }, "universalify": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", @@ -52114,17 +55099,10 @@ "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==" }, - "v8-compile-cache-lib": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz", - "integrity": "sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==", - "devOptional": true - }, "validate-npm-package-license": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", - "dev": true, "requires": { "spdx-correct": "^3.0.0", "spdx-expression-parse": "^3.0.0" @@ -52163,23 +55141,23 @@ "optional": true }, "web3": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/web3/-/web3-1.8.1.tgz", - "integrity": "sha512-tAqFsQhGv340C9OgRJIuoScN7f7wa1tUvsnnDUMt9YE6J4gcm7TV2Uwv+KERnzvV+xgdeuULYpsioRRNKrUvoQ==", + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/web3/-/web3-1.10.0.tgz", + "integrity": "sha512-YfKY9wSkGcM8seO+daR89oVTcbu18NsVfvOngzqMYGUU0pPSQmE57qQDvQzUeoIOHAnXEBNzrhjQJmm8ER0rng==", "requires": { - "web3-bzz": "1.8.1", - "web3-core": "1.8.1", - "web3-eth": "1.8.1", - "web3-eth-personal": "1.8.1", - "web3-net": "1.8.1", - "web3-shh": "1.8.1", - "web3-utils": "1.8.1" + "web3-bzz": "1.10.0", + "web3-core": "1.10.0", + "web3-eth": "1.10.0", + "web3-eth-personal": "1.10.0", + "web3-net": "1.10.0", + "web3-shh": "1.10.0", + "web3-utils": "1.10.0" } }, "web3-bzz": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/web3-bzz/-/web3-bzz-1.8.1.tgz", - "integrity": "sha512-dJJHS84nvpoxv6ijTMkdUSlRr5beCXNtx4UZcrFLHBva8dT63QEtKdLyDt2AyMJJdVzTCk78uir/6XtVWrdS6w==", + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/web3-bzz/-/web3-bzz-1.10.0.tgz", + "integrity": "sha512-o9IR59io3pDUsXTsps5pO5hW1D5zBmg46iNc2t4j2DkaYHNdDLwk2IP9ukoM2wg47QILfPEJYzhTfkS/CcX0KA==", "requires": { "@types/node": "^12.12.6", "got": "12.1.0", @@ -52194,51 +55172,121 @@ } }, "web3-core": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/web3-core/-/web3-core-1.8.1.tgz", - "integrity": "sha512-LbRZlJH2N6nS3n3Eo9Y++25IvzMY7WvYnp4NM/Ajhh97dAdglYs6rToQ2DbL2RLvTYmTew4O/y9WmOk4nq9COw==", + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/web3-core/-/web3-core-1.10.0.tgz", + "integrity": "sha512-fWySwqy2hn3TL89w5TM8wXF1Z2Q6frQTKHWmP0ppRQorEK8NcHJRfeMiv/mQlSKoTS1F6n/nv2uyZsixFycjYQ==", "requires": { - "@types/bn.js": "^5.1.0", + "@types/bn.js": "^5.1.1", "@types/node": "^12.12.6", "bignumber.js": "^9.0.0", - "web3-core-helpers": "1.8.1", - "web3-core-method": "1.8.1", - "web3-core-requestmanager": "1.8.1", - "web3-utils": "1.8.1" + "web3-core-helpers": "1.10.0", + "web3-core-method": "1.10.0", + "web3-core-requestmanager": "1.10.0", + "web3-utils": "1.10.0" }, "dependencies": { "@types/node": { "version": "12.20.55", "resolved": "https://registry.npmjs.org/@types/node/-/node-12.20.55.tgz", "integrity": "sha512-J8xLz7q2OFulZ2cyGTLE1TbbZcjpno7FaN6zdJNrgAdrJ+DZzh/uFR6YrTb4C+nXakvud8Q4+rbhoIWlYQbUFQ==" + }, + "web3-core-helpers": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/web3-core-helpers/-/web3-core-helpers-1.10.0.tgz", + "integrity": "sha512-pIxAzFDS5vnbXvfvLSpaA1tfRykAe9adw43YCKsEYQwH0gCLL0kMLkaCX3q+Q8EVmAh+e1jWL/nl9U0de1+++g==", + "requires": { + "web3-eth-iban": "1.10.0", + "web3-utils": "1.10.0" + } + }, + "web3-eth-iban": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/web3-eth-iban/-/web3-eth-iban-1.10.0.tgz", + "integrity": "sha512-0l+SP3IGhInw7Q20LY3IVafYEuufo4Dn75jAHT7c2aDJsIolvf2Lc6ugHkBajlwUneGfbRQs/ccYPQ9JeMUbrg==", + "requires": { + "bn.js": "^5.2.1", + "web3-utils": "1.10.0" + } } } }, "web3-core-helpers": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/web3-core-helpers/-/web3-core-helpers-1.8.1.tgz", - "integrity": "sha512-ClzNO6T1S1gifC+BThw0+GTfcsjLEY8T1qUp6Ly2+w4PntAdNtKahxWKApWJ0l9idqot/fFIDXwO3Euu7I0Xqw==", + "version": "1.8.2", + "resolved": "https://registry.npmjs.org/web3-core-helpers/-/web3-core-helpers-1.8.2.tgz", + "integrity": "sha512-6B1eLlq9JFrfealZBomd1fmlq1o4A09vrCVQSa51ANoib/jllT3atZrRDr0zt1rfI7TSZTZBXdN/aTdeN99DWw==", + "dev": true, "requires": { - "web3-eth-iban": "1.8.1", - "web3-utils": "1.8.1" + "web3-eth-iban": "1.8.2", + "web3-utils": "1.8.2" + }, + "dependencies": { + "web3-utils": { + "version": "1.8.2", + "resolved": "https://registry.npmjs.org/web3-utils/-/web3-utils-1.8.2.tgz", + "integrity": "sha512-v7j6xhfLQfY7xQDrUP0BKbaNrmZ2/+egbqP9q3KYmOiPpnvAfol+32slgL0WX/5n8VPvKCK5EZ1HGrAVICSToA==", + "dev": true, + "requires": { + "bn.js": "^5.2.1", + "ethereum-bloom-filters": "^1.0.6", + "ethereumjs-util": "^7.1.0", + "ethjs-unit": "0.1.6", + "number-to-bn": "1.7.0", + "randombytes": "^2.1.0", + "utf8": "3.0.0" + } + } } }, "web3-core-method": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/web3-core-method/-/web3-core-method-1.8.1.tgz", - "integrity": "sha512-oYGRodktfs86NrnFwaWTbv2S38JnpPslFwSSARwFv4W9cjbGUW3LDeA5MKD/dRY+ssZ5OaekeMsUCLoGhX68yA==", + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/web3-core-method/-/web3-core-method-1.10.0.tgz", + "integrity": "sha512-4R700jTLAMKDMhQ+nsVfIXvH6IGJlJzGisIfMKWAIswH31h5AZz7uDUW2YctI+HrYd+5uOAlS4OJeeT9bIpvkA==", "requires": { "@ethersproject/transactions": "^5.6.2", - "web3-core-helpers": "1.8.1", - "web3-core-promievent": "1.8.1", - "web3-core-subscriptions": "1.8.1", - "web3-utils": "1.8.1" + "web3-core-helpers": "1.10.0", + "web3-core-promievent": "1.10.0", + "web3-core-subscriptions": "1.10.0", + "web3-utils": "1.10.0" + }, + "dependencies": { + "eventemitter3": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.4.tgz", + "integrity": "sha512-rlaVLnVxtxvoyLsQQFBx53YmXHDxRIzzTLbdfxqi4yocpSjAxXwkU0cScM5JgSKMqEhrZpnvQ2D9gjylR0AimQ==" + }, + "web3-core-helpers": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/web3-core-helpers/-/web3-core-helpers-1.10.0.tgz", + "integrity": "sha512-pIxAzFDS5vnbXvfvLSpaA1tfRykAe9adw43YCKsEYQwH0gCLL0kMLkaCX3q+Q8EVmAh+e1jWL/nl9U0de1+++g==", + "requires": { + "web3-eth-iban": "1.10.0", + "web3-utils": "1.10.0" + } + }, + "web3-core-promievent": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/web3-core-promievent/-/web3-core-promievent-1.10.0.tgz", + "integrity": "sha512-68N7k5LWL5R38xRaKFrTFT2pm2jBNFaM4GioS00YjAKXRQ3KjmhijOMG3TICz6Aa5+6GDWYelDNx21YAeZ4YTg==", + "requires": { + "eventemitter3": "4.0.4" + } + }, + "web3-eth-iban": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/web3-eth-iban/-/web3-eth-iban-1.10.0.tgz", + "integrity": "sha512-0l+SP3IGhInw7Q20LY3IVafYEuufo4Dn75jAHT7c2aDJsIolvf2Lc6ugHkBajlwUneGfbRQs/ccYPQ9JeMUbrg==", + "requires": { + "bn.js": "^5.2.1", + "web3-utils": "1.10.0" + } + } } }, "web3-core-promievent": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/web3-core-promievent/-/web3-core-promievent-1.8.1.tgz", - "integrity": "sha512-9mxqHlgB0MrZI4oUIRFkuoJMNj3E7btjrMv3sMer/Z9rYR1PfoSc1aAokw4rxKIcAh+ylVtd/acaB2HKB7aRPg==", + "version": "1.8.2", + "resolved": "https://registry.npmjs.org/web3-core-promievent/-/web3-core-promievent-1.8.2.tgz", + "integrity": "sha512-nvkJWDVgoOSsolJldN33tKW6bKKRJX3MCPDYMwP5SUFOA/mCzDEoI88N0JFofDTXkh1k7gOqp1pvwi9heuaxGg==", + "dev": true, "requires": { "eventemitter3": "4.0.4" }, @@ -52246,82 +55294,167 @@ "eventemitter3": { "version": "4.0.4", "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.4.tgz", - "integrity": "sha512-rlaVLnVxtxvoyLsQQFBx53YmXHDxRIzzTLbdfxqi4yocpSjAxXwkU0cScM5JgSKMqEhrZpnvQ2D9gjylR0AimQ==" + "integrity": "sha512-rlaVLnVxtxvoyLsQQFBx53YmXHDxRIzzTLbdfxqi4yocpSjAxXwkU0cScM5JgSKMqEhrZpnvQ2D9gjylR0AimQ==", + "dev": true } } }, "web3-core-requestmanager": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/web3-core-requestmanager/-/web3-core-requestmanager-1.8.1.tgz", - "integrity": "sha512-x+VC2YPPwZ1khvqA6TA69LvfFCOZXsoUVOxmTx/vIN22PrY9KzKhxcE7pBSiGhmab1jtmRYXUbcQSVpAXqL8cw==", + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/web3-core-requestmanager/-/web3-core-requestmanager-1.10.0.tgz", + "integrity": "sha512-3z/JKE++Os62APml4dvBM+GAuId4h3L9ckUrj7ebEtS2AR0ixyQPbrBodgL91Sv7j7cQ3Y+hllaluqjguxvSaQ==", "requires": { - "util": "^0.12.0", - "web3-core-helpers": "1.8.1", - "web3-providers-http": "1.8.1", - "web3-providers-ipc": "1.8.1", - "web3-providers-ws": "1.8.1" + "util": "^0.12.5", + "web3-core-helpers": "1.10.0", + "web3-providers-http": "1.10.0", + "web3-providers-ipc": "1.10.0", + "web3-providers-ws": "1.10.0" + }, + "dependencies": { + "web3-core-helpers": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/web3-core-helpers/-/web3-core-helpers-1.10.0.tgz", + "integrity": "sha512-pIxAzFDS5vnbXvfvLSpaA1tfRykAe9adw43YCKsEYQwH0gCLL0kMLkaCX3q+Q8EVmAh+e1jWL/nl9U0de1+++g==", + "requires": { + "web3-eth-iban": "1.10.0", + "web3-utils": "1.10.0" + } + }, + "web3-eth-iban": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/web3-eth-iban/-/web3-eth-iban-1.10.0.tgz", + "integrity": "sha512-0l+SP3IGhInw7Q20LY3IVafYEuufo4Dn75jAHT7c2aDJsIolvf2Lc6ugHkBajlwUneGfbRQs/ccYPQ9JeMUbrg==", + "requires": { + "bn.js": "^5.2.1", + "web3-utils": "1.10.0" + } + } } }, "web3-core-subscriptions": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/web3-core-subscriptions/-/web3-core-subscriptions-1.8.1.tgz", - "integrity": "sha512-bmCMq5OeA3E2vZUh8Js1HcJbhwtsE+yeMqGC4oIZB3XsL5SLqyKLB/pU+qUYqQ9o4GdcrFTDPhPg1bgvf7p1Pw==", + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/web3-core-subscriptions/-/web3-core-subscriptions-1.10.0.tgz", + "integrity": "sha512-HGm1PbDqsxejI075gxBc5OSkwymilRWZufIy9zEpnWKNmfbuv5FfHgW1/chtJP6aP3Uq2vHkvTDl3smQBb8l+g==", "requires": { "eventemitter3": "4.0.4", - "web3-core-helpers": "1.8.1" + "web3-core-helpers": "1.10.0" }, "dependencies": { "eventemitter3": { "version": "4.0.4", "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.4.tgz", "integrity": "sha512-rlaVLnVxtxvoyLsQQFBx53YmXHDxRIzzTLbdfxqi4yocpSjAxXwkU0cScM5JgSKMqEhrZpnvQ2D9gjylR0AimQ==" + }, + "web3-core-helpers": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/web3-core-helpers/-/web3-core-helpers-1.10.0.tgz", + "integrity": "sha512-pIxAzFDS5vnbXvfvLSpaA1tfRykAe9adw43YCKsEYQwH0gCLL0kMLkaCX3q+Q8EVmAh+e1jWL/nl9U0de1+++g==", + "requires": { + "web3-eth-iban": "1.10.0", + "web3-utils": "1.10.0" + } + }, + "web3-eth-iban": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/web3-eth-iban/-/web3-eth-iban-1.10.0.tgz", + "integrity": "sha512-0l+SP3IGhInw7Q20LY3IVafYEuufo4Dn75jAHT7c2aDJsIolvf2Lc6ugHkBajlwUneGfbRQs/ccYPQ9JeMUbrg==", + "requires": { + "bn.js": "^5.2.1", + "web3-utils": "1.10.0" + } } } }, "web3-eth": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/web3-eth/-/web3-eth-1.8.1.tgz", - "integrity": "sha512-LgyzbhFqiFRd8M8sBXoFN4ztzOnkeckl3H/9lH5ek7AdoRMhBg7tYpYRP3E5qkhd/q+yiZmcUgy1AF6NHrC1wg==", - "requires": { - "web3-core": "1.8.1", - "web3-core-helpers": "1.8.1", - "web3-core-method": "1.8.1", - "web3-core-subscriptions": "1.8.1", - "web3-eth-abi": "1.8.1", - "web3-eth-accounts": "1.8.1", - "web3-eth-contract": "1.8.1", - "web3-eth-ens": "1.8.1", - "web3-eth-iban": "1.8.1", - "web3-eth-personal": "1.8.1", - "web3-net": "1.8.1", - "web3-utils": "1.8.1" + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/web3-eth/-/web3-eth-1.10.0.tgz", + "integrity": "sha512-Z5vT6slNMLPKuwRyKGbqeGYC87OAy8bOblaqRTgg94CXcn/mmqU7iPIlG4506YdcdK3x6cfEDG7B6w+jRxypKA==", + "requires": { + "web3-core": "1.10.0", + "web3-core-helpers": "1.10.0", + "web3-core-method": "1.10.0", + "web3-core-subscriptions": "1.10.0", + "web3-eth-abi": "1.10.0", + "web3-eth-accounts": "1.10.0", + "web3-eth-contract": "1.10.0", + "web3-eth-ens": "1.10.0", + "web3-eth-iban": "1.10.0", + "web3-eth-personal": "1.10.0", + "web3-net": "1.10.0", + "web3-utils": "1.10.0" + }, + "dependencies": { + "web3-core-helpers": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/web3-core-helpers/-/web3-core-helpers-1.10.0.tgz", + "integrity": "sha512-pIxAzFDS5vnbXvfvLSpaA1tfRykAe9adw43YCKsEYQwH0gCLL0kMLkaCX3q+Q8EVmAh+e1jWL/nl9U0de1+++g==", + "requires": { + "web3-eth-iban": "1.10.0", + "web3-utils": "1.10.0" + } + }, + "web3-eth-abi": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/web3-eth-abi/-/web3-eth-abi-1.10.0.tgz", + "integrity": "sha512-cwS+qRBWpJ43aI9L3JS88QYPfFcSJJ3XapxOQ4j40v6mk7ATpA8CVK1vGTzpihNlOfMVRBkR95oAj7oL6aiDOg==", + "requires": { + "@ethersproject/abi": "^5.6.3", + "web3-utils": "1.10.0" + } + }, + "web3-eth-iban": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/web3-eth-iban/-/web3-eth-iban-1.10.0.tgz", + "integrity": "sha512-0l+SP3IGhInw7Q20LY3IVafYEuufo4Dn75jAHT7c2aDJsIolvf2Lc6ugHkBajlwUneGfbRQs/ccYPQ9JeMUbrg==", + "requires": { + "bn.js": "^5.2.1", + "web3-utils": "1.10.0" + } + } } }, "web3-eth-abi": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/web3-eth-abi/-/web3-eth-abi-1.8.1.tgz", - "integrity": "sha512-0mZvCRTIG0UhDhJwNQJgJxu4b4DyIpuMA0GTfqxqeuqzX4Q/ZvmoNurw0ExTfXaGPP82UUmmdkRi6FdZOx+C6w==", + "version": "1.8.2", + "resolved": "https://registry.npmjs.org/web3-eth-abi/-/web3-eth-abi-1.8.2.tgz", + "integrity": "sha512-Om9g3kaRNjqiNPAgKwGT16y+ZwtBzRe4ZJFGjLiSs6v5I7TPNF+rRMWuKnR6jq0azQZDj6rblvKFMA49/k48Og==", + "dev": true, "requires": { "@ethersproject/abi": "^5.6.3", - "web3-utils": "1.8.1" + "web3-utils": "1.8.2" + }, + "dependencies": { + "web3-utils": { + "version": "1.8.2", + "resolved": "https://registry.npmjs.org/web3-utils/-/web3-utils-1.8.2.tgz", + "integrity": "sha512-v7j6xhfLQfY7xQDrUP0BKbaNrmZ2/+egbqP9q3KYmOiPpnvAfol+32slgL0WX/5n8VPvKCK5EZ1HGrAVICSToA==", + "dev": true, + "requires": { + "bn.js": "^5.2.1", + "ethereum-bloom-filters": "^1.0.6", + "ethereumjs-util": "^7.1.0", + "ethjs-unit": "0.1.6", + "number-to-bn": "1.7.0", + "randombytes": "^2.1.0", + "utf8": "3.0.0" + } + } } }, "web3-eth-accounts": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/web3-eth-accounts/-/web3-eth-accounts-1.8.1.tgz", - "integrity": "sha512-mgzxSYgN54/NsOFBO1Fq1KkXp1S5KlBvI/DlgvajU72rupoFMq6Cu6Yp9GUaZ/w2ij9PzEJuFJk174XwtfMCmg==", + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/web3-eth-accounts/-/web3-eth-accounts-1.10.0.tgz", + "integrity": "sha512-wiq39Uc3mOI8rw24wE2n15hboLE0E9BsQLdlmsL4Zua9diDS6B5abXG0XhFcoNsXIGMWXVZz4TOq3u4EdpXF/Q==", "requires": { "@ethereumjs/common": "2.5.0", "@ethereumjs/tx": "3.3.2", - "crypto-browserify": "3.12.0", "eth-lib": "0.2.8", - "ethereumjs-util": "^7.0.10", + "ethereumjs-util": "^7.1.5", "scrypt-js": "^3.0.1", "uuid": "^9.0.0", - "web3-core": "1.8.1", - "web3-core-helpers": "1.8.1", - "web3-core-method": "1.8.1", - "web3-utils": "1.8.1" + "web3-core": "1.10.0", + "web3-core-helpers": "1.10.0", + "web3-core-method": "1.10.0", + "web3-utils": "1.10.0" }, "dependencies": { "@ethereumjs/common": { @@ -52361,76 +55494,221 @@ "version": "9.0.0", "resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.0.tgz", "integrity": "sha512-MXcSTerfPa4uqyzStbRoTgt5XIe3x5+42+q1sDuy3R5MDk66URdLMOZe5aPX/SQd+kuYAh0FdP/pO28IkQyTeg==" + }, + "web3-core-helpers": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/web3-core-helpers/-/web3-core-helpers-1.10.0.tgz", + "integrity": "sha512-pIxAzFDS5vnbXvfvLSpaA1tfRykAe9adw43YCKsEYQwH0gCLL0kMLkaCX3q+Q8EVmAh+e1jWL/nl9U0de1+++g==", + "requires": { + "web3-eth-iban": "1.10.0", + "web3-utils": "1.10.0" + } + }, + "web3-eth-iban": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/web3-eth-iban/-/web3-eth-iban-1.10.0.tgz", + "integrity": "sha512-0l+SP3IGhInw7Q20LY3IVafYEuufo4Dn75jAHT7c2aDJsIolvf2Lc6ugHkBajlwUneGfbRQs/ccYPQ9JeMUbrg==", + "requires": { + "bn.js": "^5.2.1", + "web3-utils": "1.10.0" + }, + "dependencies": { + "bn.js": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.2.1.tgz", + "integrity": "sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ==" + } + } } } }, "web3-eth-contract": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/web3-eth-contract/-/web3-eth-contract-1.8.1.tgz", - "integrity": "sha512-1wphnl+/xwCE2io44JKnN+ti3oa47BKRiVzvWd42icwRbcpFfRxH9QH+aQX3u8VZIISNH7dAkTWpGIIJgGFTmg==", + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/web3-eth-contract/-/web3-eth-contract-1.10.0.tgz", + "integrity": "sha512-MIC5FOzP/+2evDksQQ/dpcXhSqa/2hFNytdl/x61IeWxhh6vlFeSjq0YVTAyIzdjwnL7nEmZpjfI6y6/Ufhy7w==", "requires": { - "@types/bn.js": "^5.1.0", - "web3-core": "1.8.1", - "web3-core-helpers": "1.8.1", - "web3-core-method": "1.8.1", - "web3-core-promievent": "1.8.1", - "web3-core-subscriptions": "1.8.1", - "web3-eth-abi": "1.8.1", - "web3-utils": "1.8.1" + "@types/bn.js": "^5.1.1", + "web3-core": "1.10.0", + "web3-core-helpers": "1.10.0", + "web3-core-method": "1.10.0", + "web3-core-promievent": "1.10.0", + "web3-core-subscriptions": "1.10.0", + "web3-eth-abi": "1.10.0", + "web3-utils": "1.10.0" + }, + "dependencies": { + "eventemitter3": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.4.tgz", + "integrity": "sha512-rlaVLnVxtxvoyLsQQFBx53YmXHDxRIzzTLbdfxqi4yocpSjAxXwkU0cScM5JgSKMqEhrZpnvQ2D9gjylR0AimQ==" + }, + "web3-core-helpers": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/web3-core-helpers/-/web3-core-helpers-1.10.0.tgz", + "integrity": "sha512-pIxAzFDS5vnbXvfvLSpaA1tfRykAe9adw43YCKsEYQwH0gCLL0kMLkaCX3q+Q8EVmAh+e1jWL/nl9U0de1+++g==", + "requires": { + "web3-eth-iban": "1.10.0", + "web3-utils": "1.10.0" + } + }, + "web3-core-promievent": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/web3-core-promievent/-/web3-core-promievent-1.10.0.tgz", + "integrity": "sha512-68N7k5LWL5R38xRaKFrTFT2pm2jBNFaM4GioS00YjAKXRQ3KjmhijOMG3TICz6Aa5+6GDWYelDNx21YAeZ4YTg==", + "requires": { + "eventemitter3": "4.0.4" + } + }, + "web3-eth-abi": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/web3-eth-abi/-/web3-eth-abi-1.10.0.tgz", + "integrity": "sha512-cwS+qRBWpJ43aI9L3JS88QYPfFcSJJ3XapxOQ4j40v6mk7ATpA8CVK1vGTzpihNlOfMVRBkR95oAj7oL6aiDOg==", + "requires": { + "@ethersproject/abi": "^5.6.3", + "web3-utils": "1.10.0" + } + }, + "web3-eth-iban": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/web3-eth-iban/-/web3-eth-iban-1.10.0.tgz", + "integrity": "sha512-0l+SP3IGhInw7Q20LY3IVafYEuufo4Dn75jAHT7c2aDJsIolvf2Lc6ugHkBajlwUneGfbRQs/ccYPQ9JeMUbrg==", + "requires": { + "bn.js": "^5.2.1", + "web3-utils": "1.10.0" + } + } } }, "web3-eth-ens": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/web3-eth-ens/-/web3-eth-ens-1.8.1.tgz", - "integrity": "sha512-FT8xTI9uN8RxeBQa/W8pLa2aoFh4+EE34w7W2271LICKzla1dtLyb6XSdn48vsUcPmhWsTVk9mO9RTU0l4LGQQ==", + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/web3-eth-ens/-/web3-eth-ens-1.10.0.tgz", + "integrity": "sha512-3hpGgzX3qjgxNAmqdrC2YUQMTfnZbs4GeLEmy8aCWziVwogbuqQZ+Gzdfrym45eOZodk+lmXyLuAdqkNlvkc1g==", "requires": { "content-hash": "^2.5.2", "eth-ens-namehash": "2.0.8", - "web3-core": "1.8.1", - "web3-core-helpers": "1.8.1", - "web3-core-promievent": "1.8.1", - "web3-eth-abi": "1.8.1", - "web3-eth-contract": "1.8.1", - "web3-utils": "1.8.1" + "web3-core": "1.10.0", + "web3-core-helpers": "1.10.0", + "web3-core-promievent": "1.10.0", + "web3-eth-abi": "1.10.0", + "web3-eth-contract": "1.10.0", + "web3-utils": "1.10.0" + }, + "dependencies": { + "eventemitter3": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.4.tgz", + "integrity": "sha512-rlaVLnVxtxvoyLsQQFBx53YmXHDxRIzzTLbdfxqi4yocpSjAxXwkU0cScM5JgSKMqEhrZpnvQ2D9gjylR0AimQ==" + }, + "web3-core-helpers": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/web3-core-helpers/-/web3-core-helpers-1.10.0.tgz", + "integrity": "sha512-pIxAzFDS5vnbXvfvLSpaA1tfRykAe9adw43YCKsEYQwH0gCLL0kMLkaCX3q+Q8EVmAh+e1jWL/nl9U0de1+++g==", + "requires": { + "web3-eth-iban": "1.10.0", + "web3-utils": "1.10.0" + } + }, + "web3-core-promievent": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/web3-core-promievent/-/web3-core-promievent-1.10.0.tgz", + "integrity": "sha512-68N7k5LWL5R38xRaKFrTFT2pm2jBNFaM4GioS00YjAKXRQ3KjmhijOMG3TICz6Aa5+6GDWYelDNx21YAeZ4YTg==", + "requires": { + "eventemitter3": "4.0.4" + } + }, + "web3-eth-abi": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/web3-eth-abi/-/web3-eth-abi-1.10.0.tgz", + "integrity": "sha512-cwS+qRBWpJ43aI9L3JS88QYPfFcSJJ3XapxOQ4j40v6mk7ATpA8CVK1vGTzpihNlOfMVRBkR95oAj7oL6aiDOg==", + "requires": { + "@ethersproject/abi": "^5.6.3", + "web3-utils": "1.10.0" + } + }, + "web3-eth-iban": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/web3-eth-iban/-/web3-eth-iban-1.10.0.tgz", + "integrity": "sha512-0l+SP3IGhInw7Q20LY3IVafYEuufo4Dn75jAHT7c2aDJsIolvf2Lc6ugHkBajlwUneGfbRQs/ccYPQ9JeMUbrg==", + "requires": { + "bn.js": "^5.2.1", + "web3-utils": "1.10.0" + } + } } }, "web3-eth-iban": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/web3-eth-iban/-/web3-eth-iban-1.8.1.tgz", - "integrity": "sha512-DomoQBfvIdtM08RyMGkMVBOH0vpOIxSSQ+jukWk/EkMLGMWJtXw/K2c2uHAeq3L/VPWNB7zXV2DUEGV/lNE2Dg==", + "version": "1.8.2", + "resolved": "https://registry.npmjs.org/web3-eth-iban/-/web3-eth-iban-1.8.2.tgz", + "integrity": "sha512-h3vNblDWkWMuYx93Q27TAJz6lhzpP93EiC3+45D6xoz983p6si773vntoQ+H+5aZhwglBtoiBzdh7PSSOnP/xQ==", + "dev": true, "requires": { "bn.js": "^5.2.1", - "web3-utils": "1.8.1" + "web3-utils": "1.8.2" + }, + "dependencies": { + "web3-utils": { + "version": "1.8.2", + "resolved": "https://registry.npmjs.org/web3-utils/-/web3-utils-1.8.2.tgz", + "integrity": "sha512-v7j6xhfLQfY7xQDrUP0BKbaNrmZ2/+egbqP9q3KYmOiPpnvAfol+32slgL0WX/5n8VPvKCK5EZ1HGrAVICSToA==", + "dev": true, + "requires": { + "bn.js": "^5.2.1", + "ethereum-bloom-filters": "^1.0.6", + "ethereumjs-util": "^7.1.0", + "ethjs-unit": "0.1.6", + "number-to-bn": "1.7.0", + "randombytes": "^2.1.0", + "utf8": "3.0.0" + } + } } }, "web3-eth-personal": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/web3-eth-personal/-/web3-eth-personal-1.8.1.tgz", - "integrity": "sha512-myIYMvj7SDIoV9vE5BkVdon3pya1WinaXItugoii2VoTcQNPOtBxmYVH+XS5ErzCJlnxzphpQrkywyY64bbbCA==", + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/web3-eth-personal/-/web3-eth-personal-1.10.0.tgz", + "integrity": "sha512-anseKn98w/d703eWq52uNuZi7GhQeVjTC5/svrBWEKob0WZ5kPdo+EZoFN0sp5a5ubbrk/E0xSl1/M5yORMtpg==", "requires": { "@types/node": "^12.12.6", - "web3-core": "1.8.1", - "web3-core-helpers": "1.8.1", - "web3-core-method": "1.8.1", - "web3-net": "1.8.1", - "web3-utils": "1.8.1" + "web3-core": "1.10.0", + "web3-core-helpers": "1.10.0", + "web3-core-method": "1.10.0", + "web3-net": "1.10.0", + "web3-utils": "1.10.0" }, "dependencies": { "@types/node": { "version": "12.20.55", "resolved": "https://registry.npmjs.org/@types/node/-/node-12.20.55.tgz", "integrity": "sha512-J8xLz7q2OFulZ2cyGTLE1TbbZcjpno7FaN6zdJNrgAdrJ+DZzh/uFR6YrTb4C+nXakvud8Q4+rbhoIWlYQbUFQ==" + }, + "web3-core-helpers": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/web3-core-helpers/-/web3-core-helpers-1.10.0.tgz", + "integrity": "sha512-pIxAzFDS5vnbXvfvLSpaA1tfRykAe9adw43YCKsEYQwH0gCLL0kMLkaCX3q+Q8EVmAh+e1jWL/nl9U0de1+++g==", + "requires": { + "web3-eth-iban": "1.10.0", + "web3-utils": "1.10.0" + } + }, + "web3-eth-iban": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/web3-eth-iban/-/web3-eth-iban-1.10.0.tgz", + "integrity": "sha512-0l+SP3IGhInw7Q20LY3IVafYEuufo4Dn75jAHT7c2aDJsIolvf2Lc6ugHkBajlwUneGfbRQs/ccYPQ9JeMUbrg==", + "requires": { + "bn.js": "^5.2.1", + "web3-utils": "1.10.0" + } } } }, "web3-net": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/web3-net/-/web3-net-1.8.1.tgz", - "integrity": "sha512-LyEJAwogdFo0UAXZqoSJGFjopdt+kLw0P00FSZn2yszbgcoI7EwC+nXiOsEe12xz4LqpYLOtbR7+gxgiTVjjHQ==", + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/web3-net/-/web3-net-1.10.0.tgz", + "integrity": "sha512-NLH/N3IshYWASpxk4/18Ge6n60GEvWBVeM8inx2dmZJVmRI6SJIlUxbL8jySgiTn3MMZlhbdvrGo8fpUW7a1GA==", "requires": { - "web3-core": "1.8.1", - "web3-core-method": "1.8.1", - "web3-utils": "1.8.1" + "web3-core": "1.10.0", + "web3-core-method": "1.10.0", + "web3-utils": "1.10.0" } }, "web3-provider-engine": { @@ -52606,32 +55884,72 @@ } }, "web3-providers-http": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/web3-providers-http/-/web3-providers-http-1.8.1.tgz", - "integrity": "sha512-1Zyts4O9W/UNEPkp+jyL19Jc3D15S4yp8xuLTjVhcUEAlHo24NDWEKxtZGUuHk4HrKL2gp8OlsDbJ7MM+ESDgg==", + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/web3-providers-http/-/web3-providers-http-1.10.0.tgz", + "integrity": "sha512-eNr965YB8a9mLiNrkjAWNAPXgmQWfpBfkkn7tpEFlghfww0u3I0tktMZiaToJVcL2+Xq+81cxbkpeWJ5XQDwOA==", "requires": { "abortcontroller-polyfill": "^1.7.3", "cross-fetch": "^3.1.4", "es6-promise": "^4.2.8", - "web3-core-helpers": "1.8.1" + "web3-core-helpers": "1.10.0" + }, + "dependencies": { + "web3-core-helpers": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/web3-core-helpers/-/web3-core-helpers-1.10.0.tgz", + "integrity": "sha512-pIxAzFDS5vnbXvfvLSpaA1tfRykAe9adw43YCKsEYQwH0gCLL0kMLkaCX3q+Q8EVmAh+e1jWL/nl9U0de1+++g==", + "requires": { + "web3-eth-iban": "1.10.0", + "web3-utils": "1.10.0" + } + }, + "web3-eth-iban": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/web3-eth-iban/-/web3-eth-iban-1.10.0.tgz", + "integrity": "sha512-0l+SP3IGhInw7Q20LY3IVafYEuufo4Dn75jAHT7c2aDJsIolvf2Lc6ugHkBajlwUneGfbRQs/ccYPQ9JeMUbrg==", + "requires": { + "bn.js": "^5.2.1", + "web3-utils": "1.10.0" + } + } } }, "web3-providers-ipc": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/web3-providers-ipc/-/web3-providers-ipc-1.8.1.tgz", - "integrity": "sha512-nw/W5nclvi+P2z2dYkLWReKLnocStflWqFl+qjtv0xn3MrUTyXMzSF0+61i77+16xFsTgzo4wS/NWIOVkR0EFA==", + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/web3-providers-ipc/-/web3-providers-ipc-1.10.0.tgz", + "integrity": "sha512-OfXG1aWN8L1OUqppshzq8YISkWrYHaATW9H8eh0p89TlWMc1KZOL9vttBuaBEi96D/n0eYDn2trzt22bqHWfXA==", "requires": { "oboe": "2.1.5", - "web3-core-helpers": "1.8.1" + "web3-core-helpers": "1.10.0" + }, + "dependencies": { + "web3-core-helpers": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/web3-core-helpers/-/web3-core-helpers-1.10.0.tgz", + "integrity": "sha512-pIxAzFDS5vnbXvfvLSpaA1tfRykAe9adw43YCKsEYQwH0gCLL0kMLkaCX3q+Q8EVmAh+e1jWL/nl9U0de1+++g==", + "requires": { + "web3-eth-iban": "1.10.0", + "web3-utils": "1.10.0" + } + }, + "web3-eth-iban": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/web3-eth-iban/-/web3-eth-iban-1.10.0.tgz", + "integrity": "sha512-0l+SP3IGhInw7Q20LY3IVafYEuufo4Dn75jAHT7c2aDJsIolvf2Lc6ugHkBajlwUneGfbRQs/ccYPQ9JeMUbrg==", + "requires": { + "bn.js": "^5.2.1", + "web3-utils": "1.10.0" + } + } } }, "web3-providers-ws": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/web3-providers-ws/-/web3-providers-ws-1.8.1.tgz", - "integrity": "sha512-TNefIDAMpdx57+YdWpYZ/xdofS0P+FfKaDYXhn24ie/tH9G+AB+UBSOKnjN0KSadcRSCMBwGPRiEmNHPavZdsA==", + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/web3-providers-ws/-/web3-providers-ws-1.10.0.tgz", + "integrity": "sha512-sK0fNcglW36yD5xjnjtSGBnEtf59cbw4vZzJ+CmOWIKGIR96mP5l684g0WD0Eo+f4NQc2anWWXG74lRc9OVMCQ==", "requires": { "eventemitter3": "4.0.4", - "web3-core-helpers": "1.8.1", + "web3-core-helpers": "1.10.0", "websocket": "^1.0.32" }, "dependencies": { @@ -52639,24 +55957,42 @@ "version": "4.0.4", "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.4.tgz", "integrity": "sha512-rlaVLnVxtxvoyLsQQFBx53YmXHDxRIzzTLbdfxqi4yocpSjAxXwkU0cScM5JgSKMqEhrZpnvQ2D9gjylR0AimQ==" + }, + "web3-core-helpers": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/web3-core-helpers/-/web3-core-helpers-1.10.0.tgz", + "integrity": "sha512-pIxAzFDS5vnbXvfvLSpaA1tfRykAe9adw43YCKsEYQwH0gCLL0kMLkaCX3q+Q8EVmAh+e1jWL/nl9U0de1+++g==", + "requires": { + "web3-eth-iban": "1.10.0", + "web3-utils": "1.10.0" + } + }, + "web3-eth-iban": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/web3-eth-iban/-/web3-eth-iban-1.10.0.tgz", + "integrity": "sha512-0l+SP3IGhInw7Q20LY3IVafYEuufo4Dn75jAHT7c2aDJsIolvf2Lc6ugHkBajlwUneGfbRQs/ccYPQ9JeMUbrg==", + "requires": { + "bn.js": "^5.2.1", + "web3-utils": "1.10.0" + } } } }, "web3-shh": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/web3-shh/-/web3-shh-1.8.1.tgz", - "integrity": "sha512-sqHgarnfcY2Qt3PYS4R6YveHrDy7hmL09yeLLHHCI+RKirmjLVqV0rc5LJWUtlbYI+kDoa5gbgde489M9ZAC0g==", + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/web3-shh/-/web3-shh-1.10.0.tgz", + "integrity": "sha512-uNUUuNsO2AjX41GJARV9zJibs11eq6HtOe6Wr0FtRUcj8SN6nHeYIzwstAvJ4fXA53gRqFMTxdntHEt9aXVjpg==", "requires": { - "web3-core": "1.8.1", - "web3-core-method": "1.8.1", - "web3-core-subscriptions": "1.8.1", - "web3-net": "1.8.1" + "web3-core": "1.10.0", + "web3-core-method": "1.10.0", + "web3-core-subscriptions": "1.10.0", + "web3-net": "1.10.0" } }, "web3-utils": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/web3-utils/-/web3-utils-1.8.1.tgz", - "integrity": "sha512-LgnM9p6V7rHHUGfpMZod+NST8cRfGzJ1BTXAyNo7A9cJX9LczBfSRxJp+U/GInYe9mby40t3v22AJdlELibnsQ==", + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/web3-utils/-/web3-utils-1.10.0.tgz", + "integrity": "sha512-kSaCM0uMcZTNUSmn5vMEhlo02RObGNRRCkdX0V9UTAU0+lrvn0HSaudyCo6CQzuXUsnuY2ERJGCGPfeWmv19Rg==", "requires": { "bn.js": "^5.2.1", "ethereum-bloom-filters": "^1.0.6", @@ -52743,8 +56079,7 @@ "which-module": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/which-module/-/which-module-1.0.0.tgz", - "integrity": "sha512-F6+WgncZi/mJDrammbTuHe1q0R5hOXv/mBaiNA2TCNT/LTHusX0V+CJnj9XT8ki5ln2UZyyddDgHfCzyrOH7MQ==", - "dev": true + "integrity": "sha512-F6+WgncZi/mJDrammbTuHe1q0R5hOXv/mBaiNA2TCNT/LTHusX0V+CJnj9XT8ki5ln2UZyyddDgHfCzyrOH7MQ==" }, "which-pm-runs": { "version": "1.1.0", @@ -52777,8 +56112,25 @@ "window-size": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/window-size/-/window-size-0.2.0.tgz", - "integrity": "sha512-UD7d8HFA2+PZsbKyaOCEy8gMh1oDtHgJh1LfgjQ4zVXmYjAT/kvz3PueITKuqDiIXQe7yzpPnxX3lNc+AhQMyw==", - "dev": true + "integrity": "sha512-UD7d8HFA2+PZsbKyaOCEy8gMh1oDtHgJh1LfgjQ4zVXmYjAT/kvz3PueITKuqDiIXQe7yzpPnxX3lNc+AhQMyw==" + }, + "wordwrapjs": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/wordwrapjs/-/wordwrapjs-4.0.1.tgz", + "integrity": "sha512-kKlNACbvHrkpIw6oPeYDSmdCTu2hdMHoyXLTcUKala++lx5Y+wjJ/e474Jqv5abnVmwxw08DiTuHmw69lJGksA==", + "dev": true, + "requires": { + "reduce-flatten": "^2.0.0", + "typical": "^5.2.0" + }, + "dependencies": { + "typical": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/typical/-/typical-5.2.0.tgz", + "integrity": "sha512-dvdQgNDNJo+8B2uBQoqdb11eUCE1JQXhvjC/CZtgvZseVd5TYMXnq0+vuUemXbd/Se29cTaUuPX3YIc2xgbvIg==", + "dev": true + } + } }, "workerpool": { "version": "6.2.1", @@ -52833,9 +56185,9 @@ } }, "ws": { - "version": "8.11.0", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.11.0.tgz", - "integrity": "sha512-HPG3wQd9sNQoT9xHyNCXoDUa+Xw/VevmY9FoHyQ+g+rrMn4j6FB4np7Z0OhdTgjx6MgQLK7jwSy1YecU1+4Asg==", + "version": "8.13.0", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.13.0.tgz", + "integrity": "sha512-x9vcZYTrFPC7aSIbj7sRCYo7L/Xb8Iy+pW0ng0wt2vCJv7M9HOMy0UoN3rr+IFC7hb7vXoqS+P9ktyLLLhO+LA==", "requires": {} }, "xhr": { @@ -52989,7 +56341,8 @@ "version": "3.1.1", "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz", "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==", - "devOptional": true + "optional": true, + "peer": true }, "yocto-queue": { "version": "0.1.0", @@ -53000,7 +56353,6 @@ "version": "0.14.3", "resolved": "https://registry.npmjs.org/zksync-web3/-/zksync-web3-0.14.3.tgz", "integrity": "sha512-hT72th4AnqyLW1d5Jlv8N2B/qhEnl2NePK2A3org7tAa24niem/UAaHMkEvmWI3SF9waYUPtqAtjpf+yvQ9zvQ==", - "dev": true, "requires": {} } } diff --git a/package.json b/package.json index 18500d1b..a0581abd 100644 --- a/package.json +++ b/package.json @@ -16,22 +16,24 @@ "author": "Frax Finance Team (https://github.com/orgs/FraxFinance)", "license": "ISC", "dependencies": { - "@chainlink/contracts": "0.5.1", - "@ethereumjs/common": "^3.0.2", - "@ethereumjs/tx": "^4.0.2", + "@chainlink/contracts": "0.6.1", + "@ethereumjs/common": "^3.1.2", + "@ethereumjs/tx": "^4.1.2", "@ethersproject/hardware-wallets": "^5.7.0", - "@flashbots/ethers-provider-bundle": "^0.6.0", + "@flashbots/ethers-provider-bundle": "^0.6.1", "@maticnetwork/maticjs": "^3.5.0", "@maticnetwork/maticjs-ethers": "^1.0.3", "@maticnetwork/maticjs-web3": "^1.0.4", "@matterlabs/hardhat-zksync-chai-matchers": "^0.1.2", - "@openzeppelin/contracts": "^4.8.2", - "@openzeppelin/hardhat-upgrades": "^1.22.0", + "@matterlabs/hardhat-zksync-deploy": "^0.6.3", + "@matterlabs/hardhat-zksync-solc": "^0.3.16", + "@openzeppelin/contracts": "^4.8.3", + "@openzeppelin/hardhat-upgrades": "^1.26.0", "@poanet/solidity-flattener": "^3.0.8", - "@solana/spl-token": "^0.3.6", - "@solana/web3.js": "^1.73.0", - "@truffle/hdwallet-provider": "^2.1.4", - "@types/express": "^4.17.15", + "@solana/spl-token": "^0.3.7", + "@solana/web3.js": "^1.76.0", + "@truffle/hdwallet-provider": "^2.1.11", + "@types/express": "^4.17.17", "@types/node": "^18.11.18", "@types/web3": "^1.2.2", "@uniswap/sdk-core": "^3.1.0", @@ -40,55 +42,54 @@ "@uniswap/v3-periphery": "^1.4.3", "@uniswap/v3-sdk": "^3.9.0", "bignumber.js": "^9.1.1", - "bnc-sdk": "^4.6.3", + "bnc-sdk": "^4.6.7", "chalk": "^4.1.2", - "cross-fetch": "^3.1.5", + "data-fns": "^1.1.0", + "cross-fetch": "^3.1.6", "dotenv": "^16.0.3", "esm": "^3.2.25", "ethereumjs-tx": "^2.1.2", "flashbots": "^1.0.0", - "fs-extra": "^11.1.0", + "fs-extra": "^11.1.1", "ganache-core": "^2.13.2", - "hardhat-contract-sizer": "^2.6.1", + "hardhat-contract-sizer": "^2.8.0", "hardhat-gas-reporter": "^1.0.9", "hardhat-spdx-license-identifier": "^2.1.0", "https": "^1.0.0", - "mathjs": "^11.5.0", - "nodemon": "^2.0.20", + "mathjs": "^11.8.0", + "nodemon": "^2.0.22", "path": "^0.12.7", "prb-math": "^2.4.3", "require-from-string": "^2.0.2", - "solc": "0.8.17", + "solc": "0.8.20", "to-hex": "0.0.18", - "truffle": "^5.7.1", + "toml": "^3.0.0", + "truffle": "^5.9.0", "truffle-contract-size": "^2.0.1", "truffle-hdwallet-provider": "^1.0.6", - "tslib": "^2.4.1", + "tslib": "^2.5.1", + "typescript": "^5.0.4", "util": "^0.12.5", - "web3-eth-contract": "^1.8.1", - "web3-utils": "^1.8.1", - "ws": "^8.11.0" + "web3-eth-contract": "^1.10.0", + "web3-utils": "^1.10.0", + "ws": "^8.13.0", + "zksync-web3": "^0.14.3" }, "devDependencies": { - "@matterlabs/hardhat-zksync-deploy": "^0.6.3", - "@matterlabs/hardhat-zksync-solc": "^0.3.14", - "@nomiclabs/hardhat-ethers": "^2.2.1", - "@nomiclabs/hardhat-etherscan": "^3.1.4", + "@nomiclabs/hardhat-ethers": "^2.2.3", + "@nomiclabs/hardhat-etherscan": "^3.1.7", "@nomiclabs/hardhat-truffle5": "^2.0.7", - "@nomiclabs/hardhat-vyper": "^3.0.2", - "@nomiclabs/hardhat-waffle": "^2.0.3", + "@nomiclabs/hardhat-vyper": "^3.0.3", + "@nomiclabs/hardhat-waffle": "^2.0.5", "@nomiclabs/hardhat-web3": "^2.0.0", - "@openzeppelin/hardhat-upgrades": "^1.22.0", + "@openzeppelin/hardhat-upgrades": "^1.26.0", "@openzeppelin/test-helpers": "^0.5.16", "chai": "^4.3.7", - "ethereum-waffle": "^3.4.4", + "ethereum-waffle": "^4.0.10", "ethers": "^5.7.2", - "hardhat": "^2.13.0", - "hardhat-deploy": "^0.11.22", + "hardhat": "^2.14.0", + "hardhat-deploy": "^0.11.29", "json-loader": "^0.5.7", - "ts-node": "^10.9.1", - "typescript": "^5.0.3", - "web3": "^1.8.1", - "zksync-web3": "^0.14.3" + "web3": "^1.10.0" } } diff --git a/remappings.txt b/remappings.txt index 27410281..90c5d91e 100644 --- a/remappings.txt +++ b/remappings.txt @@ -10,6 +10,7 @@ base64-sol/=node_modules/base64-sol/ ds-test/=lib/forge-std/lib/ds-test/src/ eth-gas-reporter/=node_modules/eth-gas-reporter/ forge-std/=lib/forge-std/src/ +frax-std/=lib/frax-standard-solidity/src/ hardhat-deploy/=node_modules/hardhat-deploy/ hardhat/=node_modules/hardhat/ prb-math/=node_modules/prb-math/ diff --git a/src/hardhat/contracts/BAMM/BAMM.sol b/src/hardhat/contracts/BAMM/BAMM.sol new file mode 100644 index 00000000..b320a5d1 --- /dev/null +++ b/src/hardhat/contracts/BAMM/BAMM.sol @@ -0,0 +1,882 @@ +// SPDX-License-Identifier: GPL-2.0-or-later +pragma solidity >=0.8.0; + +// ==================================================================== +// | ______ _______ | +// | / _____________ __ __ / ____(_____ ____ _____ ________ | +// | / /_ / ___/ __ `| |/_/ / /_ / / __ \/ __ `/ __ \/ ___/ _ \ | +// | / __/ / / / /_/ _> < / __/ / / / / / /_/ / / / / /__/ __/ | +// | /_/ /_/ \__,_/_/|_| /_/ /_/_/ /_/\__,_/_/ /_/\___/\___/ | +// | | +// ==================================================================== +// =============================== BAMM =============================== +// ==================================================================== +/* +** BAMM (Borrow AMM) +** - The BAMM wraps Uniswap/Fraxswap like LP tokens (#token0 * #token1 = K), giving out an ERC-20 wrapper token in return +** - Users have a personal vault where they can add / remove token0 and token1. +** - Users can rent the LP constituent token0s and token1s, the liquidity from which will be removed and stored in the users vault. +** - Rented LP constituent token0s and token1s are accounted as SQRT(#token0 * #token1) +** - The user can remove tokens from their personal vault as long as the SQRT(#token0 * #token1) is more than the rented value +** - Borrowers pay an interest rate based on the utility factor +** - Borrowers can only be liquidated due to interest rate payments, not due to price movements. +** - No price oracle needed! +*/ + +/* + ----------------------------------------------------------- + -------------------- EXAMPLE SCENARIOS -------------------- + ----------------------------------------------------------- + + Assume Fraxswap FRAX/FXS LP @ 0x03B59Bd1c8B9F6C265bA0c3421923B93f15036Fa. + token0 = FXS, token1 = FRAX + + Scenario 1: User wants to rent some FXS using FRAX as collateral + =================================== + 1) User obtains some FRAX, which will be used as collateral + 2) User calls executeActionsAndSwap() with + a) Positive token1Amount (add FRAX to vault) + b) Negative token0Amount (withdraw FXS from vault) + c) Positive rent (renting) + d) The swapParams to swap SOME of the excess FRAX for FXS (they need to remain solvent at the end of the day) + e) (Optional) v,r,s for a permit (token1 to this contract) for the vault add + 3) The internal call flow will be: + i) BAMM-owned LP is unwound into BOTH FRAX and FXS, according to the supplied rent parameter. Both tokens are added to the user's vault. + ii) User supplied FRAX is added to their vault to increase their collateral + iii) Some of the excess FRAX from the LP unwind is swapped for FXS (according to swapParams) + iv) FXS is sent to the user + v) Contract will revert if the user is insolvent or the LP utility is above MAX_UTILITY_RATE + + + Scenario 2: User from Scenario 1 wants to repay SOME of their rented FXS and get SOME FRAX back + =================================== + 1) User calls executeActionsAndSwap() with + a) Negative token1Amount (withdraw FRAX from vault) + b) Positive token0Amount (add FXS to vault) + c) Negative rent (repaying) + d) minToken0Amount to prevent sandwiches from the LP add + e) minToken1Amount to prevent sandwiches from the LP add + f) The swapParams to swap SOME of the FXS for FRAX. LP will be added at the current ratio so this is helpful. + g) (Optional) v,r,s for a permit (token0 to this contract) for the vault add + 2) The internal call flow will be: + i) Interest accrues so the user owes a little bit more FXS (and/or FRAX) now. + ii) User-supplied FXS is added to the vault + iii) Some of the FXS is swapped for FRAX (according to swapParams). + iv) FRAX and FXS are added (at current LP ratio) to make the Fraxswap LP, which becomes BAMM-owned, according to the supplied rent parameter. + v) Accounting updated to lower rent and vaulted tokens. + vi) FRAX is sent to the user + vii) Contract will revert if the user is insolvent or the LP utility is above MAX_UTILITY_RATE + + + Scenario 3: User from Scenario 1 wants to repay the remaining rented FXS, get their FRAX back, and close the position + =================================== + 1) User calls executeActionsAndSwap() with + a) Negative token1Amount (withdraw FRAX from vault) + b) Positive token0Amount (add FXS to vault) + c) closePosition as true. No need to supply rent as the function will override it anyways + d) minToken0Amount to prevent sandwiches from the LP add + e) minToken1Amount to prevent sandwiches from the LP add + f) The swapParams to swap SOME of the FXS for FRAX. LP will be added at the current ratio so this is helpful. + g) (Optional) v,r,s for a permit (token0 to this contract) for the vault add + 2) The internal call flow will be: + i) Interest accrues so the user owes a little bit more FXS (and/or FRAX) now. + ii) User-supplied FXS is added to the vault + iii) Some of the FXS is swapped for FRAX (according to swapParams). + iv) Accounting updated to lower rent and vaulted tokens. + v) Any remaining FRAX or FXS needed is safeTransferFrom'd the user + vi) FRAX and FXS are added (at current LP ratio) to make the Fraxswap LP, which becomes BAMM-owned, according to the supplied rent parameter + vii) FRAX is sent back to the user + viii) Contract will revert if the user is insolvent or the LP utility is above MAX_UTILITY_RATE + + + Scenario 4: User wants to loan some LP and earn interest + =================================== + 1) Approve LP to this BAMM contract + 2) Call mint(), which will give you BAMM tokens as a "receipt" + 3) Wait some time, and assume some other people borrow. Interest accrues + 4) Call redeem(), which burns your BAMM tokens and gives you your LP back, plus some extra LP as interest. + +*/ + +// Frax Finance: https://github.com/FraxFinance + +// Primary Author +// Dennis: https://github.com/denett + +// Reviewer(s) / Contributor(s) +// Travis Moore: https://github.com/FortisFortuna + + +import "@openzeppelin/contracts/token/ERC20/IERC20.sol"; +import "@openzeppelin/contracts/token/ERC20/ERC20.sol"; +import "@openzeppelin/contracts/token/ERC20/extensions/ERC20Burnable.sol"; +import "@openzeppelin/contracts/security/ReentrancyGuard.sol"; +import "@openzeppelin/contracts/utils/math/SafeCast.sol"; +import "@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol"; +import "../Fraxswap/core/FraxswapPair.sol"; +import { FraxswapRouterMultihop } from "../Fraxswap/periphery/FraxswapRouterMultihop.sol"; +import "./BAMMHelper.sol"; +import "./FraxswapOracle.sol"; +import "hardhat/console.sol"; + +contract BAMM is ERC20, ERC20Burnable, ReentrancyGuard { + using SafeCast for *; + + // ############################################ + // ############## STATE VARIABLES ############# + // ############################################ + + /// @notice Token 0 in the UniV2-like LP + IERC20 public immutable token0; + + /// @notice Token 1 in the UniV2-like LP + IERC20 public immutable token1; + + /// @notice Address of the UniV2-like pair + FraxswapPair public immutable pair; + + /// @notice Whether the wrapped LP is Fraxswap or another UniV2 derivative + bool public immutable isFraxswapPair; + + /// @notice The swap fee for the LP. E.g for 1%, use 9900. (10000 - 9900) / 100 = 1% + uint public immutable pairFee; + + /// @notice The Fraxswap router + FraxswapRouterMultihop public immutable fraxswapRouter; + + /// @notice Has helper functions, especially for unbalanced liquidity calculations + BAMMHelper public immutable bammHelper; + + /// @notice Price oracle for the Fraxswap pair + FraxswapOracle public immutable fraxswapOracle; + + /// @notice Tracks the amount of rented liquidity + uint public sqrtRented; + + /// @notice Multiplier used in interest rate and rent amount calculations. Never decreases and acts like an accumulator of sorts. + uint public rentedMultiplier = PRECISION; // Initialized at PRECISION, but will change + + /// @notice The last time an interest payment was made + uint public timeSinceLastInterestPayment = block.timestamp; + + /// @notice Vault information for a given user + mapping(address => Vault) public userVaults; + + /// @notice Nominated new owner. They still need to call acceptOwnership() + address public nominatedOwner; + + /// @notice Current owner of this contract + address public owner; + + + // ####################################### + // ############## CONSTANTS ############## + // ####################################### + + /// @notice The precision to use and conform to + uint constant PRECISION = 1E18; + + /// @notice The minimum interest rate + uint public constant MIN_RATE = 1 * PRECISION; // 1% + + /// @notice Interest rate after the first kink (70% utility) + uint public constant KINK1_RATE = 10 * PRECISION; // 10% + + /// @notice Interest rate after the second kink (80% utility) + uint public constant KINK2_RATE = 100 * PRECISION; // 100% + + /// @notice The maximum interest rate + uint public constant MAX_RATE = 730 * PRECISION; // 730% = 2% per day + + /// @notice Percent above which the position is considered insolvent + uint public constant SOLVENCY_THRESHOLD = (98 * PRECISION) / 100; // 98% + + /// @notice Protocol's cut of the interest rate + uint public constant FEE_SHARE = (10 * 10000) / 100; // 10% + + /// @notice The fee when a liquidation occurs + uint public constant LIQUIDATION_FEE = 100; // 1% + + /// @notice The maximum utility rate for an LP + uint public constant MAX_UTILITY_RATE = (PRECISION * 9) / 10; // 90% + + + // ##################################### + // ############## Structs ############## + // ##################################### + + /// @notice Details for a user's vault + struct Vault { + int token0; // Token 0 in the LP + int token1; // Token 1 in the LP + int rented; // SQRT(#token0 * #token1) that is rented + } + + /// @notice Function parameter pack for various actions. Different parts may be empty for different actions. + struct Action { + int256 token0Amount; // Amount of token 0. Positive = add to vault. Negative = remove from vault + int256 token1Amount; // Amount of token 1. Positive = add to vault. Negative = remove from vault + int256 rent; // SQRT(#token0 * #token1). Positive if borrowing, negative if repaying + address to; // A destination address + uint minToken0Amount; // Minimum amount of token 0 expected + uint minToken1Amount; // Minimum amount of token 1 expected + bool closePosition; // Whether to close the position or not + bool approveMax; // Whether to approve max (e.g. uint256(-1) or similar) + uint8 v; // Part of a signature + bytes32 r; // Part of a signature + bytes32 s; // Part of a signature + uint256 deadline; // Deadline of this action + } + + + // #################################### + // ############## Events ############## + // #################################### + + /// @notice Emitted when BAMM tokens get minted by a user directly + /// @param sender The person sending in the LP + /// @param recipient The recipient of the minted BAMM tokens + /// @param lp_in The amount of LP being sent in + /// @param bamm_out The amount of BAMM tokens minted + event BAMMMinted(address indexed sender, address indexed recipient, uint256 lp_in, uint256 bamm_out); + + /// @notice Emitted when BAMM tokens get redeemed by a user directly + /// @param sender The person sending in the BAMM tokens + /// @param recipient The recipient of the LP tokens + /// @param bamm_in The amount of BAMM tokens being sent in + /// @param lp_out The amount of LP sent out + event BAMMRedeemed(address indexed sender, address indexed recipient, uint256 bamm_in, uint256 lp_out); + + /// @notice Emitted when a borrower pays back a loan + /// @param borrower The borrower + /// @param rent The rent change + /// @param token0ToAddToLP Token0 paid back + /// @param token1ToAddToLP Token1 paid back + /// @param closePosition Whether the position was closed or not + event LoanRepaid(address indexed borrower, int256 rent, uint256 token0ToAddToLP, uint256 token1ToAddToLP, bool closePosition); + + /// @notice Emitted when a borrower takes a loan + /// @param borrower The borrower + /// @param rent The rent change + /// @param token0Amount Token0 credited to borrower's vault + /// @param token1Amount Token1 credited to borrower's vault + event LoanTaken(address indexed borrower, int256 rent, uint256 token0Amount, uint256 token1Amount); + + /// @notice Emitted when a new owner is nominated + /// @param newOwner The address nominated to be the new owner + event OwnerNominated(address indexed newOwner); + + /// @notice Emitted when the nominated new owner accepts ownership + /// @param previousOwner The old owner + /// @param newOwner The new owner + event OwnerChanged(address indexed previousOwner, address indexed newOwner); + + /// @notice Emitted when the borrower deposits tokens to their vault + /// @param borrower The borrower + /// @param token0_amt Amount of token0 deposited + /// @param token1_amt Amount of token1 deposited + event TokensDepositedToVault(address indexed borrower, uint256 token0_amt, uint256 token1_amt); + + /// @notice Emitted when the borrower withdraws tokens from their vault + /// @param borrower The borrower + /// @param token0_amt Amount of token0 withdrawn + /// @param token1_amt Amount of token1 withdrawn + event TokensWithdrawnFromVault(address indexed borrower, uint256 token0_amt, uint256 token1_amt); + + /// @notice Emitted when a user gets liquidated + /// @param user The user being liquidated + /// @param liquidator The person doing the liquidating + /// @param liquidity The total amount of liquidity in question + /// @param liquidity_out Liquidity sent back to the user + /// @param liquidation_fee Liquidity fee sent to the liquidator + event UserLiquidated(address indexed user, address indexed liquidator, uint liquidity, uint liquidity_out, uint liquidation_fee); + + + // ####################################### + // ############## Modifiers ############## + // ####################################### + + /// @notice Whether msg.sender is the owner + modifier isOwner() { + require (msg.sender == owner, "Not owner"); + _; + } + + + // ######################################### + // ############## Constructor ############## + // ######################################### + + /// @notice Constructor for this contract + /// @param _pair Address of the UniV2-like pair + /// @param _isFraxswapPair Whether the wrapped LP is Fraxswap or another UniV2 derivative + /// @param _pairFee The swap fee for the LP. E.g for 1%, use 9900. (10000 - 9900) / 100 = 1% + /// @param _fraxswapRouter The Fraxswap router + /// @param _bammHelper Helper contract for the BAMM + /// @param _fraxswapOracle Price oracle for the Fraxswap pair + constructor( + FraxswapPair _pair, + bool _isFraxswapPair, + uint _pairFee, + FraxswapRouterMultihop _fraxswapRouter, + BAMMHelper _bammHelper, + FraxswapOracle _fraxswapOracle + ) ERC20("BAMM", "BAMM") { + // Fill in the state variables + token0 = IERC20(_pair.token0()); + token1 = IERC20(_pair.token1()); + pair = _pair; + isFraxswapPair = _isFraxswapPair; + pairFee = _pairFee; + fraxswapRouter = _fraxswapRouter; + bammHelper = _bammHelper; + fraxswapOracle = _fraxswapOracle; + owner = msg.sender; + } + + + // ############################################ + // ############## Lender actions ############## + // ############################################ + + /// @notice Mint BAMM wrapper tokens + /// @param to Destination address for the wrapper tokens + /// @param amount The amount of UniV2-like LP to wrap + /// @return bamm_out The amount of BAMM tokens generated + /// @dev Make sure to approve first + function mint(address to, uint256 amount) external nonReentrant returns (uint256 bamm_out) { + // Sync the LP, then add the interest + (uint112 reserve0, uint112 reserve1, uint256 pairTotalSupply) = _addInterest(); + + // Calculate the LP to BAMM conversion + uint256 sqrtReserve = Math.sqrt(uint256(reserve0) * reserve1); + uint256 sqrtAmount = (amount * sqrtReserve) / pairTotalSupply; + uint256 balance = pair.balanceOf(address(this)); + uint256 sqrtBalance = (balance * sqrtReserve) / pairTotalSupply; + uint sqrtRentedReal = (sqrtRented * rentedMultiplier) / PRECISION; + + // Take the LP from the sender and mint them BAMM wrapper tokens + bamm_out = ((sqrtBalance + sqrtRentedReal) == 0) ? sqrtAmount : ((sqrtAmount * totalSupply()) / (sqrtBalance + sqrtRentedReal)); + if (amount > 0) SafeERC20.safeTransferFrom(IERC20(address(pair)), msg.sender, address(this), amount); + _mint(((to == address(0)) ? msg.sender : to), bamm_out); + + emit BAMMMinted(msg.sender, to, amount, bamm_out); + } + + /// @notice Redeem BAMM wrapper tokens + /// @param to Destination address for the LP tokens + /// @param amount The amount of BAMM tokens to redeem for UniV2-like LP + /// @return lp_out The amount of LP tokens generated + function redeem(address to, uint256 amount) external nonReentrant returns (uint256 lp_out) { + // Sync the LP, then add the interest + (uint112 reserve0, uint112 reserve1, uint256 pairTotalSupply) = _addInterest(); + + // Calculate the BAMM to LP conversion + uint256 sqrtToRedeem; + uint256 sqrtReserve; + { + uint256 balance = pair.balanceOf(address(this)); + sqrtReserve = Math.sqrt(uint256(reserve0) * reserve1); + uint256 sqrtBalance = (balance * sqrtReserve) / pairTotalSupply; + uint sqrtRentedReal = (sqrtRented * rentedMultiplier) / PRECISION; + sqrtToRedeem = (amount * (sqrtBalance + sqrtRentedReal)) / totalSupply(); + } + + // Burn the BAMM wrapper tokens from the sender and give them LP + // lp_out = 0; + if (sqrtToRedeem > 0) { + lp_out = (sqrtToRedeem * pairTotalSupply) / sqrtReserve; + SafeERC20.safeTransfer(IERC20(address(pair)), (to == address(0) ? msg.sender : to), lp_out); + } + _burn(msg.sender, amount); + + // Max sure the max utility would not be exceeded + _checkMaxUtility(reserve0, reserve1, pairTotalSupply); + + emit BAMMRedeemed(msg.sender, to, amount, lp_out); + } + + + // ############################################ + // ############# Borrower actions ############# + // ############################################ + + /// @notice Execute actions + /// @param action The details of the action to be executed + function executeActions(Action memory action) public { + FraxswapRouterMultihop.FraxswapParams memory swapParams; + executeActionsAndSwap(action, swapParams); + } + + /// @notice Execute actions and also do a swap + /// @param action The details of the action to be executed + /// @param swapParams The details of the swap to be executed + function executeActionsAndSwap(Action memory action, FraxswapRouterMultihop.FraxswapParams memory swapParams) public nonReentrant { + // Get the existing vault info for the user + Vault memory vault = userVaults[msg.sender]; + + // Sync the LP, then add the interest + (uint112 reserve0, uint112 reserve1, uint256 pairTotalSupply) = _addInterest(); + + // Note if the user is closing the position + if (action.closePosition) action.rent = -vault.rented; + + // Rent LP constituent tokens (if specified). Positive rent means borrowing + if (action.rent > 0) { + // Calculate the amount of LP, token0, and token1 + uint sqrtAmountRented = (uint256(action.rent > 0 ? action.rent : -action.rent) * rentedMultiplier) / 1e18; + uint lpTokenAmount = (sqrtAmountRented * pairTotalSupply) / Math.sqrt(uint256(reserve0) * reserve1); + uint token0Amount = (reserve0 * lpTokenAmount) / pairTotalSupply; + uint token1Amount = (reserve1 * lpTokenAmount) / pairTotalSupply; + + // Transfer LP to the LP contract, then optimistically burn it there to release token0 and token1 to this contract + // The tokens will be given to the borrower later, assuming action.token0Amount and/or action.token1Amount is positive + SafeERC20.safeTransfer(IERC20(address(pair)), address(pair), lpTokenAmount); + pair.burn(address(this)); + + // Update the rent and credit the user some token0 and token1 + vault.rented += action.rent; + vault.token0 += token0Amount.toInt256(); + vault.token1 += token1Amount.toInt256(); + + // Update the total rented liquidity + sqrtRented += uint(action.rent); + + emit LoanTaken(msg.sender, action.rent, token0Amount, token1Amount); + } + + // If specified in the action, add tokens to the vault (vault is modified by reference) + // Positive token0Amount and/or token1Amount means add from vault + if (action.token0Amount > 0 || action.token1Amount > 0) _addTokensToVault(vault, action); + + // Execute the swap if there are swapParams + if (swapParams.amountIn != 0) { + // Do the swap + _executeSwap(vault, swapParams); + + // Swap might have changed the reserves of the pair. + if (action.rent != 0) { + (reserve0, reserve1, pairTotalSupply) = _addInterest(); + } + } + + // Return rented LP constituent tokens (if specified) to this contract. + // Negative rent means repaying but not closing. + uint token0ToAddToLP; + uint token1ToAddToLP; + if (action.rent < 0) { + // Calculate some values + uint sqrtAmountRented = (uint256(-action.rent) * rentedMultiplier) / 1e18; + uint lpTokenAmount = (sqrtAmountRented * pairTotalSupply) / Math.sqrt(uint256(reserve0) * reserve1); + token0ToAddToLP = (reserve0 * lpTokenAmount) / pairTotalSupply; + token1ToAddToLP = (reserve1 * lpTokenAmount) / pairTotalSupply; + + // Avoid sandwich attacks + require ((token0ToAddToLP > action.minToken0Amount) && (token1ToAddToLP > action.minToken1Amount), "Min amount used"); + + // Update the working copy of the user's vault + vault.rented -= (-action.rent); // For clarity + vault.token0 -= token0ToAddToLP.toInt256(); + vault.token1 -= token1ToAddToLP.toInt256(); + + // Update the total rented liquidity + sqrtRented -= uint(-action.rent); + } + //console.log("vault.rented", uint(vault.rented)); + //console.log("sqrtRented", sqrtRented); + + // Close the position (if specified) + if (action.closePosition) { + // You might have some leftover tokens you can withdraw later if you over-collateralized + action.token0Amount = -vault.token0; + action.token1Amount = -vault.token1; + _addTokensToVault(vault, action); + } + + // Return rented LP constituent tokens (continued from above) + // This portion recovers the LP and gives it to this BAMM contract + if (token0ToAddToLP > 0) { + // Send token0 and token1 directly to the LP address + SafeERC20.safeTransfer(IERC20(address(token0)), address(pair), token0ToAddToLP); + SafeERC20.safeTransfer(IERC20(address(token1)), address(pair), token1ToAddToLP); + + // Mint repayed LP last, so we know we have enough tokens in the contract + pair.mint(address(this)); + + emit LoanRepaid(msg.sender, -action.rent, token0ToAddToLP, token1ToAddToLP, action.closePosition); + } + + // Remove token0 from the vault and give to the user (if specified) + // Negative token0Amount means remove from vault + if (action.token0Amount < 0) { + vault.token0 += action.token0Amount; + SafeERC20.safeTransfer(IERC20(address(token0)), (action.to == address(0) ? msg.sender : action.to), uint256(-action.token0Amount)); + + emit TokensWithdrawnFromVault(msg.sender, uint256(-action.token0Amount), 0); + } + + // Remove token1 from the vault and give to the user (if specified) + // Negative token1Amount means remove from vault + if (action.token1Amount < 0) { + vault.token1 += action.token1Amount; + SafeERC20.safeTransfer(IERC20(address(token1)), (action.to == address(0) ? msg.sender : action.to), uint256(-action.token1Amount)); + + emit TokensWithdrawnFromVault(msg.sender, 0, uint256(-action.token1Amount)); + } + + + + // Write the final vault state to storage after all the above operations are completed + userVaults[msg.sender] = vault; + + // Make sure the user is still solvent + if (!_solvent(vault)) revert("Not solvent"); + + // Check max utility after a rent + if (action.rent > 0) _checkMaxUtility(reserve0, reserve1, pairTotalSupply); + } + + + // ############################################ + // ############ Liquidator actions ############ + // ############################################ + + /// @notice Liquidate an underwater user by adding the liquidity back to the pool + /// @param user The user to be liquidated + function liquidate(address user) external nonReentrant returns (uint liq_out, uint liq_fee) { + // Sync the LP, then add the interest + (uint112 reserve0, uint112 reserve1, uint256 pairTotalSupply) = _addInterest(); + + // Compare the spot price from the reserves to the oracle price. Revert if they are off by too much. + ammPriceCheck(reserve0, reserve1); + + // Make sure the user is NOT solvent + if (solvent(user)) revert("User solvent"); + + // Get the existing vault info for the user + Vault memory vault = userVaults[user]; + + // Calculate the number of LP tokens rented + uint sqrtAmountRented = (uint256(vault.rented) * rentedMultiplier) / 1e18; + uint lpTokenAmount = (sqrtAmountRented * pairTotalSupply) / Math.sqrt(uint256(reserve0) * reserve1); + + // Approve the bammHelper contract to take token0 and token1 from this contract + SafeERC20.safeApprove(token0, address(bammHelper), uint(vault.token0)); + SafeERC20.safeApprove(token1, address(bammHelper), uint(vault.token1)); + + // Give token0 and token1 to bammHelper, which will interact with the LP and mint LP to this contract + uint liquidity = bammHelper.addLiquidityUnbalanced(uint(vault.token0), uint(vault.token1), 0, pair, (isFraxswapPair ? pair.fee(): pairFee), isFraxswapPair); + + // Give the liquidation fee to msg.sender + liq_fee = (liquidity * LIQUIDATION_FEE) / 10000; + SafeERC20.safeTransfer(IERC20(address(pair)), msg.sender, liq_fee); + + // Give the vault user their LP back, minus the liquidation fee and swap fee(s). + if ((liquidity - liq_fee) > lpTokenAmount) { + liq_out = liquidity - liq_fee - lpTokenAmount; + SafeERC20.safeTransfer(IERC20(address(pair)), user, liq_out); + } + + // Update the total rented liquidity + sqrtRented -= uint(vault.rented); + + // Update the user's vault + vault.token0 = 0; + vault.token1 = 0; + vault.rented = 0; + userVaults[user] = vault; + + emit UserLiquidated(user, msg.sender, liquidity, liq_out, liq_fee); + } + + + // ############################################ + // ############# External utility ############# + // ############################################ + + /// @notice Accrue interest payments + function addInterest() external nonReentrant { + _addInterest(); + } + + /// @notice Is a user solvent? + /// @param user The user to check + /// @return bool If the user is solvent + function solvent(address user) public view returns (bool) { + Vault memory vault = userVaults[user]; + return _solvent(vault); + } + + /// @notice Get the interest rate at the specified utilityRate + /// @param utilityRate The utility rate where you want to check the interest rate + /// @return uint The interest rate at the specified utilityRate + function getInterestRate(uint utilityRate) public pure returns (uint) { + if (utilityRate < 7e17) return MIN_RATE + ((utilityRate * (KINK1_RATE - MIN_RATE)) / 7e17); + if (utilityRate < 8e17) return KINK1_RATE + (((utilityRate - 7e17) * (KINK2_RATE - KINK1_RATE)) / 1e17); + else if (utilityRate < 9e17) return KINK2_RATE + (((utilityRate - 8e17)*(MAX_RATE - KINK2_RATE)) / 1e17); + else return MAX_RATE; + } + + /// @notice Given a token you want to borrow, how much rent do you need. + /// @notice Modifies state because the TWAMMs and interest need to be synced. + /// @param tkn_desired_addr Address of the token you want to borrow + /// @param amt_tkn_desired How much of the token you want to borrow + /// @return rent The value of "rent" you should use in executeActions's Action + /// @return lp_unwound Informational: the amount of BAMM LP that was unwound to release your desired token + /// @return amt_tkn_other How much of the other token was also released in the LP unwinding. + /// You can swap it out for even more of your desired token if you want with executeActionsAndSwap's swapParams + function calcRent( + address tkn_desired_addr, + uint256 amt_tkn_desired + ) external returns ( + int256 rent, + uint256 lp_unwound, + uint256 amt_tkn_other + ) { + // Sync the LP, then add the interest + (uint112 reserve0, uint112 reserve1, uint256 pairTotalSupply) = _addInterest(); + + // Get the price (in terms of the other token) of your desired token + { + uint256 desired_reserve; + uint256 other_reserve; + if (tkn_desired_addr == address(token0)) { + desired_reserve = reserve0; + other_reserve = reserve1; + } else { + desired_reserve = reserve1; + other_reserve = reserve0; + } + + // Calculate the amount of the other token, as well as the LP + // Use substitution to avoid rounding errors + amt_tkn_other = (amt_tkn_desired * other_reserve) / desired_reserve; + lp_unwound = (amt_tkn_desired * pairTotalSupply) / desired_reserve; + + } + uint256 sqrtAmountRented = (amt_tkn_desired * Math.sqrt(uint256(reserve0) * reserve1)) / reserve0; + rent = int256((sqrtAmountRented * 1e18) / uint256(rentedMultiplier)); + } + + + // ############################################ + // ################# Internal ################# + // ############################################ + + /// @notice Transfers LP constituent tokens from the user to this contract, and marks it as part of their vault. + /// @param vault The vault you are modifying + /// @param action The action + /// @dev vault is passed by reference, so it modified in the caller + function _addTokensToVault(Vault memory vault, Action memory action) internal { + // // Make sure only one token is being added + // require(!(action.token0Amount > 0 && action.token1Amount > 0), 'Can only add one token'); + + // Approve via permit + if (action.v != 0 && (action.token0Amount > 0 || action.token1Amount > 0)) { + // Determine the token of the permit + IERC20 token = action.token0Amount > 0 ? token0 : token1; + + // Do the permit + uint256 amount = action.approveMax ? type(uint256).max : uint256(action.token0Amount > 0 ? action.token0Amount : action.token1Amount); + IERC20Permit(address(token)).permit(msg.sender, address(this), amount, action.deadline, action.v, action.r, action.s); + } + + // Add token0 to the vault + if (action.token0Amount > 0) { + vault.token0 += action.token0Amount; + SafeERC20.safeTransferFrom(IERC20(address(token0)), msg.sender, address(this), uint256(action.token0Amount)); + + emit TokensDepositedToVault(msg.sender, uint256(action.token0Amount), 0); + } + // Add token1 to the vault + if (action.token1Amount > 0) { + vault.token1 += action.token1Amount; + SafeERC20.safeTransferFrom(IERC20(address(token1)), msg.sender, address(this), uint256(action.token1Amount)); + + emit TokensDepositedToVault(msg.sender, 0, uint256(action.token1Amount)); + } + + + } + + /// @notice Swaps tokens in the users vault + /// @param vault The vault you are modifying + /// @param swapParams Info about the swap. Is modified + /// @dev vault and swapParams are passed by reference, so they modified in the caller + function _executeSwap(Vault memory vault, FraxswapRouterMultihop.FraxswapParams memory swapParams) internal { + // Make sure the order of the swap is one of two directions + require((swapParams.tokenIn == address(token0) && swapParams.tokenOut == address(token1)) + || (swapParams.tokenIn == address(token1) && swapParams.tokenOut == address(token0)), + "Wrong swap tokens"); + + // Approve the input token to the router + SafeERC20.safeApprove(IERC20(swapParams.tokenIn), address(fraxswapRouter), swapParams.amountIn); + + // Set the recipient to this address + swapParams.recipient = address(this); + + // Router checks the minAmountOut + uint256 amountOut = fraxswapRouter.swap(swapParams); + if (swapParams.tokenIn == address(token0)) { + vault.token0 -= swapParams.amountIn.toInt256(); + vault.token1 += amountOut.toInt256(); + } else { + vault.token1 -= swapParams.amountIn.toInt256(); + vault.token0 += amountOut.toInt256(); + } + } + + /// @notice Sync the LP and accrue interest + /// @return reserve0 The LP's reserve0 + /// @return reserve1 The LP's reserve1 + /// @return pairTotalSupply The LP's totalSupply() + function _addInterest() internal returns (uint112 reserve0, uint112 reserve1, uint256 pairTotalSupply) { + // We need to call sync for Fraxswap pairs first to execute TWAMMs + pair.sync(); + + // Get the total supply and the updated reserves + (reserve0, reserve1, ) = pair.getReserves(); + pairTotalSupply = pair.totalSupply(); + + + // Calculate and accumulate interest if time has passed + uint period = block.timestamp - timeSinceLastInterestPayment; + if (period > 0) { + // If there are outstanding rents, proceed + if (sqrtRented > 0) { + // Do the interest calculations + uint256 balance = pair.balanceOf(address(this)); + uint256 sqrtBalance = Math.sqrt(((balance * reserve0) / pairTotalSupply) * ((balance * reserve1) / pairTotalSupply)); + uint sqrtRentedReal = (sqrtRented * rentedMultiplier) / PRECISION; + uint256 utilityRate = (sqrtRented * PRECISION) / (sqrtBalance + sqrtRentedReal); + uint256 interestRate = getInterestRate(utilityRate); + uint256 sqrtInterest = (interestRate * period * sqrtRented) / (PRECISION * 3153600000); + + // Update the rentedMultiplier + // The original lender will get more LP back as their "earnings" when they redeem their BAMM tokens + rentedMultiplier = (rentedMultiplier * (sqrtInterest + sqrtRented)) / sqrtRented; + + // Give the contract owner their cut of the fee, directly as BAMM tokens + uint256 fee = (sqrtInterest * FEE_SHARE) / 10000; + uint feeMintAmount = (fee * totalSupply()) / (sqrtBalance + ((sqrtRented * rentedMultiplier) / PRECISION)); + _mint(owner, feeMintAmount); + } + + // Update the timeSinceLastInterestPayment + timeSinceLastInterestPayment = block.timestamp; + } + } + + /// @notice Is the vault solvent? + /// @param vault The vault to check + /// @return bool If the vault is solvent + function _solvent(Vault memory vault) internal view returns (bool) { + require(vault.rented >= 0 && vault.token0 >= 0 && vault.token1 >= 0, "Negative positions not allowed"); + if (vault.rented == 0) return true; + else { + // Check the LTV + uint ltv = (uint256(vault.rented) * rentedMultiplier) / Math.sqrt(uint256(vault.token0 * vault.token1)); + return ltv < SOLVENCY_THRESHOLD; + } + } + + /// @notice Reverts if the max utility has been reached + /// @param reserve0 The LP's reserve0 + /// @param reserve1 The LP's reserve1 + /// @param pairTotalSupply The LP's totalSupply + function _checkMaxUtility(uint112 reserve0, uint112 reserve1, uint256 pairTotalSupply) internal { + //console.log("sqrtRented", sqrtRented); + if (sqrtRented > 0) { + uint256 balance = pair.balanceOf(address(this)); + uint256 sqrtBalance = Math.sqrt(((balance * reserve0) / pairTotalSupply) * ((balance * reserve1) / pairTotalSupply)); + uint256 utilityRate = (sqrtRented * PRECISION) / (sqrtBalance + sqrtRented); + if (utilityRate > MAX_UTILITY_RATE) revert("MAX_UTILITY_RATE"); + } + } + + + /// @notice Compare the spot price from the reserves to the oracle price. Revert if they are off by too much. + /// @param reserve0 The LP's reserve0 + /// @param reserve1 The LP's reserve1 + function ammPriceCheck(uint112 reserve0, uint112 reserve1) internal { + // 30 minutes and max 1024 blocks + (uint result0, uint result1) = fraxswapOracle.getPrice(IFraxswapPair(address(pair)), 60 * 30, 10, 10000); + result0 = 1e36 / result0; + uint spotPrice = (uint256(reserve0) * 1e18) / reserve1; + + // Check the price differences and revert if they are too much + uint diff = (spotPrice > result0 ? spotPrice - result0 : result0 - spotPrice); + if ((diff * 10000) / result0 > 500) revert("ammPriceCheck"); + diff = (spotPrice > result1 ? spotPrice - result1 : result1 - spotPrice); + if ((diff * 10000) / result1 > 500) revert("ammPriceCheck"); + } + + + // ############################################ + // ############# Roles management ############# + // ############################################ + + /// @notice Nominate a new owner for this contract + /// @param newOwner The new nominated owner. They still need to acceptOwnership + function nominateNewOwner(address newOwner) external isOwner { + nominatedOwner = newOwner; + emit OwnerNominated(newOwner); + } + + /// @notice Accept ownership for this contract. Needs to be called by the nominatedOwner + function acceptOwnership() external { + if (msg.sender != nominatedOwner) revert(); + emit OwnerChanged(owner, nominatedOwner); + owner = nominatedOwner; + } +} + +// .,,. +// ,;;;``, +// ,zcc;$$c`'!!!!!!!!!,;` +// . $$$;F?b`!'!!!!!!!, ;!!!!> +// ;!; `",,,`"b " ;!!!!!!!! .!!!!!!; +// ;!>>;; r' :;!>; ""):!```.,,,nmMMb`'!!!!!!!!!!!!!!!!!!!!!'''`,,,,;;; +// $$$b 4 c$$>4MMMMMMM?MMMMM"MMM4M",M +// 4MMMMMMM>$$$P "?$>,MMMMMP,dMMM",;M",",nMM +// 'MMMMMMM $$Ez$$$$$$>JMMM",MMMP .' .c nMMMMM +// 4Mf4MMP $$$$$$$$P"uP",uP"",zdc,'$$F;MMMfP +// "M'MM d$$",="=,cccccc$$$$$$$$$$$P MMM" +// \/\"f.$$$cb ,b$$$$$$$" -."?$$$$ dP)" +// `$c, $$$$$$$$$$",,,,"$$ "J$$$'J" ,c +// `"$ $$$$$$P)3$ccd$,,$$$$$$$$$'',z$$F +// `$$$$$$$`?$$$$$$"$$$$$$$P,c$P" +// "?$$$$;=,""',c$$$$$$$" +// `"??bc,,z$$$$PF"" +// .,,,,,,,,. 4c,,,,, +// 4$$$$$$$$$$$??$bd$$$$$P";!' ccd$$PF" c, +// 4$$$$$$$$$P.d$$$$$?$P"`; +// "C": \'MMM ";!!!!!'<$$$$$ !! <; +// <`.dMMT4bn`.!';! ???$$F !!! <> +// !!>;`T",;- !! emudMMb.?? +// ! !!!!!.`! +// !!!!!!!!!>.`'!`:MMM.`!; +// !!!!!!` +// '!'' +// cbccc$$$$c$$$bd$$bcd `!!! <;'!;`!! !!> +// <$$$$$$$$$$$$$?)$$P" `!!! `!! +// d$$$$$$P$$?????"" `!!> !> ,!!',!! +// .$$$$$$ cccc$$$ `!!>`!!!!! !!! +// "$C" ",d$$$$$$$$ `!!:`!!!! !!! +// ` `,c$$$$"" =0.8.0; + +// ==================================================================== +// | ______ _______ | +// | / _____________ __ __ / ____(_____ ____ _____ ________ | +// | / /_ / ___/ __ `| |/_/ / /_ / / __ \/ __ `/ __ \/ ___/ _ \ | +// | / __/ / / / /_/ _> < / __/ / / / / / /_/ / / / / /__/ __/ | +// | /_/ /_/ \__,_/_/|_| /_/ /_/_/ /_/\__,_/_/ /_/\___/\___/ | +// | | +// ==================================================================== +// ============================ BAMMHelper ============================ +// ==================================================================== +// Has helper functions for the BAMM, especially for unbalanced liquidity calculations + +// Frax Finance: https://github.com/FraxFinance + +// Primary Author +// Dennis: https://github.com/denett + +// Reviewer(s) / Contributor(s) +// Travis Moore: https://github.com/FortisFortuna + +import "@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol"; +import "../Fraxswap/core/FraxswapPair.sol"; +import "hardhat/console.sol"; + +contract BAMMHelper { + + /// @notice Mints LP from token0 and token1. Swaps to balance the pool first if token0 and token1 are not at the current pool ratio. + /// @param token0Amount Amount of token0 being sent + /// @param token1Amount Amount of token1 being sent + /// @param minLiquidity Minimum amount of LP output expected + /// @param pool The LP contract + /// @param fee The swap fee for the LP + /// @param isFraxswapPool Whether the LP is Fraxswap or just another UniV2-like variant + function addLiquidityUnbalanced( + uint token0Amount, + uint token1Amount, + uint minLiquidity, + FraxswapPair pool, + uint fee, + bool isFraxswapPool + ) external returns (uint liquidity) { + // Make sure TWAMM orders are executed first + if (isFraxswapPool) pool.executeVirtualOrders(block.timestamp); + + // Get the new reserves + (uint112 reserve0, uint112 reserve1,) = pool.getReserves(); + + // Get the amount to swap. Can be negative. + IERC20 token0 = IERC20(pool.token0()); + IERC20 token1 = IERC20(pool.token1()); + int256 swapAmount = getSwapAmount(int256(uint(reserve0)), int256(uint(reserve1)), int256(token0Amount), int256(token1Amount), int256(fee)); + + // Positive = token0 --> token1, Negative = token1 --> token0; + // Swap to make the pool balanced + if (swapAmount > 0) { + // Swap token0 for token1 + // xy = k + uint amountOut = getAmountOut(reserve0, reserve1, fee, uint(swapAmount)); + + if (amountOut > 0) { + // Take token0 from the sender and give it to the pool + SafeERC20.safeTransferFrom(token0, msg.sender, address(pool), uint(swapAmount)); + + // Swap token0 (excess sitting in the pool) for token1 + pool.swap(0, amountOut, address(this), ""); + + // Give the received token1 to the LP for later minting + SafeERC20.safeTransfer(token1, address(pool), amountOut); + + // Subtract the amount of token0 sent in for the swap + token0Amount -= uint(swapAmount); + } + } else { + // Swap token1 for token0 + // xy = k + uint amountOut = getAmountOut(reserve1, reserve0, fee, uint(-swapAmount)); + + if (amountOut > 0) { + // Take token1 from the sender and give it to the pool + SafeERC20.safeTransferFrom(token1, msg.sender, address(pool), uint(-swapAmount)); + + // Swap token1 (excess sitting in the pool) for token0 + pool.swap(amountOut, 0, address(this), ""); + + // Give the received token0 to the LP for later minting + SafeERC20.safeTransfer(token0, address(pool), amountOut); + + // Subtract the amount of token1 sent in for the swap + token1Amount -= uint(-swapAmount); + } + } + + // Take the token0 and token1 from the sender and give it to the LP + SafeERC20.safeTransferFrom(token0, msg.sender, address(pool), token0Amount); + SafeERC20.safeTransferFrom(token1, msg.sender, address(pool), token1Amount); + + // Mint() sees the new tokens and will mint LP to msg.sender + // It also executes long term orders, updates the reserves and price accumulators + liquidity = pool.mint(msg.sender); + + // Revert if the generated liquidity was not enough + if (liquidity < minLiquidity) revert("minLiquidity"); + } + + + /// @notice Estimates the amount of LP minted from sending a possibly imbalanced amount of token0 and token1 + /// @param token0Amount Amount of token0 being sent + /// @param token1Amount Amount of token1 being sent + /// @param pool The LP contract + /// @param fee The swap fee for the LP + /// @param isFraxswapPool Whether the LP is Fraxswap or just another UniV2-like variant + /// @return liquidity Amount of LP tokens expected + function estimateLiquidityUnbalanced( + uint token0Amount, + uint token1Amount, + FraxswapPair pool, + uint fee, + bool isFraxswapPool + ) public view returns (uint liquidity, int256 swapAmount) { + // Get the pool reserves + uint112 reserve0; + uint112 reserve1; + if (isFraxswapPool) (reserve0, reserve1, , , ) = pool.getReserveAfterTwamm(block.timestamp); + else (reserve0, reserve1,) = pool.getReserves(); + + // Get the amount to swap. Can be negative. + IERC20 token0 = IERC20(pool.token0()); + IERC20 token1 = IERC20(pool.token1()); + swapAmount = getSwapAmount(int256(uint(reserve0)), int256(uint(reserve1)), int256(token0Amount), int256(token1Amount), int256(fee)); + + // Positive = token0 --> token1, Negative = token1 --> token0; + if (swapAmount > 0) { + // xy = k + uint amountOut = getAmountOut(reserve0, reserve1, fee, uint(swapAmount)); + + // Update local vars + token0Amount -= uint(swapAmount); + token1Amount += amountOut; + reserve0 += uint112(uint(swapAmount)); + reserve1 -= uint112(amountOut); + } else { + // xy = k + uint amountOut = getAmountOut(reserve1, reserve0, fee, uint(-swapAmount)); + + // Update local vars + token1Amount -= uint(-swapAmount); + token0Amount += amountOut; + reserve1 += uint112(uint(-swapAmount)); + reserve0 -= uint112(amountOut); + } + + // Estimate the amount of LP that would be generated + uint _totalSupply = pool.totalSupply(); + liquidity = Math.min((token0Amount * _totalSupply) / reserve0, (token1Amount * _totalSupply) / reserve1); + } + + /// @notice Use xy = k to get the amount of output tokens from a swap + /// @param reserveIn Reserves of the input token + /// @param reserveOut Reserves of the output token + /// @param fee The swap fee for the LP + /// @param amountIn Amount of input token + /// @return uint Amount other token expected to be outputted + function getAmountOut(uint112 reserveIn, uint112 reserveOut, uint fee, uint amountIn) internal pure returns (uint) { + uint amountInWithFee = amountIn * fee; + uint numerator = amountInWithFee * reserveOut; + uint denominator = (uint(reserveIn) * 10000) + amountInWithFee; + return numerator / denominator; + } + + /// @notice Uses xy = k. Calculates which token, and how much of it, need to be swapped to balance the pool. + /// @param RES_A Reserves of token A (not necessarily token0) + /// @param RES_B Reserves of token B (not necessarily token1) + /// @param TKN_A_AMT Amount of token A coming in + /// @param TKN_B_AMT Amount of token B coming in + /// @return result The amount that needs to be swapped. Positive = tokenA, Negative = tokenB; + function getSwapAmount(int256 RES_A, int256 RES_B, int256 TKN_A_AMT, int256 TKN_B_AMT, int256 fee) public view returns (int256 result) { + // Check to see if you need to re-call the function with the inputs swapped + if (TKN_A_AMT * RES_B >= TKN_B_AMT * RES_A) { + // Inputs are ok as-is + int resultOld; + int resultOutOld; + int resultAfterFee; + int XA = RES_A + TKN_A_AMT; + int YB = RES_B + TKN_B_AMT; + int resultOut; + int diffResult; + + // Magical math + // TODO: Dennis add comments and re-check math + for (uint i = 0; i < 100; i++) { + result = (result + (TKN_A_AMT - (resultOutOld + TKN_B_AMT) * XA / YB)) >> 1; + + // Stop when result converges + if (result != 0 && (((result - resultOld) * 10000000) / result) != 0) { + resultAfterFee = (result * fee) / 10000; + resultOut = (resultAfterFee * RES_B) / (RES_A + resultAfterFee); + diffResult = resultOut - resultOutOld; + + // Stop when resultsOut converges + if (diffResult > -2 && diffResult < 2) break; + + // Otherwise keep looping + resultOld = result; + resultOutOld = resultOut; + } else break; + } + } + else { + // Swap the inputs and try this function again + result = -getSwapAmount(RES_B, RES_A, TKN_B_AMT, TKN_A_AMT, fee); + } + } + + /// @notice Solve getSwapAmount + /// @param RES_A Reserves of token A (not necessarily token0) + /// @param RES_B Reserves of token B (not necessarily token1) + /// @param TKN_A_AMT Amount of token A coming in + /// @param TKN_B_AMT Amount of token B coming in + /// @return result The amount that needs to be swapped. Positive = tokenA is swapped out, Negative = tokenB is swapped out. + function getSwapAmountSolve(int256 RES_A, int256 RES_B, int256 TKN_A_AMT, int256 TKN_B_AMT, int256 fee) public view returns (int256 result) { + if ((TKN_A_AMT * RES_B) > (TKN_B_AMT * RES_A)) { + result = _getSwapAmountSolve(RES_A, RES_B, TKN_A_AMT, TKN_B_AMT, fee); + if (result < 0) revert("getSwapAmount 1"); + } else { + result = -_getSwapAmountSolve(RES_B, RES_A, TKN_B_AMT, TKN_A_AMT, fee); + if (result > 0) revert("getSwapAmount 2"); + } + } + + /// @notice Solve getSwapAmount (internal) + /// @param RES_A Reserves of token A (not necessarily token0) + /// @param RES_B Reserves of token B (not necessarily token1) + /// @param TKN_A_AMT Amount of token A coming in + /// @param TKN_B_AMT Amount of token B coming in + /// @return result The amount that needs to be swapped. Positive = tokenA is swapped out, Negative = tokenB is swapped out. + function _getSwapAmountSolve(int256 RES_A, int256 RES_B, int256 TKN_A_AMT, int256 TKN_B_AMT, int256 fee) internal pure returns (int256 result) { + // Magical math + // TODO: Dennis add comments and re-check math + int256 a = (fee * (RES_B + TKN_B_AMT)) / 10000; + int256 b = (((fee + 10000) * (RES_A * (RES_B + TKN_B_AMT))) / 10000); + int256 c; + uint div_c; + { + (int256 c1, uint div_c1) = mul(RES_A * RES_A, TKN_B_AMT); + (int256 c2, uint div_c2) = mul(RES_A * RES_B, TKN_A_AMT); + if (div_c1 > div_c2) { + c = (c1-c2) / int256(2 ** (div_c1 - div_c2)); + div_c = div_c1; + } else if (div_c1 < div_c2) { + c = c1 / int256(2 ** (div_c2 - div_c1)) - c2; + div_c = div_c2; + } else { + c = c1 - c2; + div_c = div_c1; + } + } + (int256 b2, uint div_b2) = mul(b, b); + (int256 ac4, uint div_ac4) = mul(4 * a, c); + div_ac4 += div_c; + int s; + uint div_s; + if (div_b2 > div_ac4) { + s = (b2 - ac4) / int256(2 ** (div_b2 - div_ac4)); + div_s = div_b2; + } else if (div_b2 < div_ac4) { + s = (b2 / int256(2 ** (div_ac4 - div_b2))) - ac4; + div_s = div_ac4; + } else { + s = b2 - ac4; + div_s = div_b2; + } + + if (div_s % 2 == 1) { + s = s / 2; + div_s++; + } + result = (sqrtInt(s) * int256(2 ** (div_s / 2)) - b) / (2 * a); + } + + /// @notice Return the log in base 2 + /// @param val The number to log + /// @return result The resulting logarithm + function log2(int256 val) internal pure returns (uint result) { + result = 1; + if (val < 0) val =- val; + if (val > 2 ** 128) { + result += 128; + val = val / (2 ** 128); + } + if (val > 2 ** 64) { + result += 64; + val = val / (2 ** 64); + } + if (val > 2 ** 32) { + result += 32; + val = val / (2 ** 32); + } + if (val > 2 ** 16) { + result += 16; + val = val / (2 ** 16); + } + if (val > 2 ** 8) { + result += 8; + val = val / (2 ** 8); + } + if (val > 2 ** 4) { + result += 4; + val = val / (2 ** 4); + } + if (val > 2 ** 2) { + result += 2; + val = val / (2 ** 2); + } + if (val > 2) { + result += 1; + } + } + + /// @notice Computes square roots using the Babylonian method. Casts an int to a uint + /// @param y The number to root + /// @return int The resulting root + // https://en.wikipedia.org/wiki/Methods_of_computing_square_roots#Babylonian_method + function sqrtInt(int y) internal pure returns (int) { + return int(sqrt(uint(y))); + } + + /// @notice Computes square roots using the Babylonian method + /// @param y The number to root + /// @return z The resulting root + // https://en.wikipedia.org/wiki/Methods_of_computing_square_roots#Babylonian_method + function sqrt(uint y) internal pure returns (uint z) { + if (y > 3) { + z = y; + uint x = y / 2 + 1; + while (x < z) { + z = x; + x = (y / x + x) / 2; + } + } else if (y != 0) { + z = 1; + } + } + + /// @notice Multiply some numbers using log2 + /// @param a Multiplier + /// @param b Multiplicand + /// @return result The multiplication result + /// @return div TODO: ??? + function mul(int a, int b) internal pure returns (int result, uint div) { + uint log_a = log2(a); + uint log_b = log2(b); + if ((log_a + log_b) > 252) { + div = log_a + log_b - 252; + uint div_a = (log_a * div) / (log_a + log_b); + uint div_b = div - div_a; + result = (a / int256(2 ** div_a)) * (b / int256(2 ** div_b)); + } else { + result = a * b; + } + } + + +} diff --git a/src/hardhat/contracts/BAMM/Babylonian.sol b/src/hardhat/contracts/BAMM/Babylonian.sol new file mode 100644 index 00000000..84158395 --- /dev/null +++ b/src/hardhat/contracts/BAMM/Babylonian.sol @@ -0,0 +1,20 @@ +// SPDX-License-Identifier: MIT +pragma solidity >=0.6.11; + +// computes square roots using the babylonian method +// https://en.wikipedia.org/wiki/Methods_of_computing_square_roots#Babylonian_method +library Babylonian { + function sqrt(uint y) internal pure returns (uint z) { + if (y > 3) { + z = y; + uint x = y / 2 + 1; + while (x < z) { + z = x; + x = (y / x + x) / 2; + } + } else if (y != 0) { + z = 1; + } + // else z = 0 + } +} \ No newline at end of file diff --git a/src/hardhat/contracts/BAMM/FixedPoint.sol b/src/hardhat/contracts/BAMM/FixedPoint.sol new file mode 100644 index 00000000..df21670f --- /dev/null +++ b/src/hardhat/contracts/BAMM/FixedPoint.sol @@ -0,0 +1,75 @@ +// SPDX-License-Identifier: MIT +pragma solidity >=0.6.11; + +import './Babylonian.sol'; + +// a library for handling binary fixed point numbers (https://en.wikipedia.org/wiki/Q_(number_format)) +library FixedPoint { + // range: [0, 2**112 - 1] + // resolution: 1 / 2**112 + struct uq112x112 { + uint224 _x; + } + + // range: [0, 2**144 - 1] + // resolution: 1 / 2**112 + struct uq144x112 { + uint _x; + } + + uint8 private constant RESOLUTION = 112; + uint private constant Q112 = uint(1) << RESOLUTION; + uint private constant Q224 = Q112 << RESOLUTION; + + // encode a uint112 as a UQ112x112 + function encode(uint112 x) internal pure returns (uq112x112 memory) { + return uq112x112(uint224(x) << RESOLUTION); + } + + // encodes a uint144 as a UQ144x112 + function encode144(uint144 x) internal pure returns (uq144x112 memory) { + return uq144x112(uint256(x) << RESOLUTION); + } + + // divide a UQ112x112 by a uint112, returning a UQ112x112 + function div(uq112x112 memory self, uint112 x) internal pure returns (uq112x112 memory) { + require(x != 0, 'FixedPoint: DIV_BY_ZERO'); + return uq112x112(self._x / uint224(x)); + } + + // multiply a UQ112x112 by a uint, returning a UQ144x112 + // reverts on overflow + function mul(uq112x112 memory self, uint y) internal pure returns (uq144x112 memory) { + uint z; + require(y == 0 || (z = uint(self._x) * y) / y == uint(self._x), "FixedPoint: MULTIPLICATION_OVERFLOW"); + return uq144x112(z); + } + + // returns a UQ112x112 which represents the ratio of the numerator to the denominator + // equivalent to encode(numerator).div(denominator) + function fraction(uint112 numerator, uint112 denominator) internal pure returns (uq112x112 memory) { + require(denominator > 0, "FixedPoint: DIV_BY_ZERO"); + return uq112x112((uint224(numerator) << RESOLUTION) / denominator); + } + + // decode a UQ112x112 into a uint112 by truncating after the radix point + function decode(uq112x112 memory self) internal pure returns (uint112) { + return uint112(self._x >> RESOLUTION); + } + + // decode a UQ144x112 into a uint144 by truncating after the radix point + function decode144(uq144x112 memory self) internal pure returns (uint144) { + return uint144(self._x >> RESOLUTION); + } + + // take the reciprocal of a UQ112x112 + function reciprocal(uq112x112 memory self) internal pure returns (uq112x112 memory) { + require(self._x != 0, 'FixedPoint: ZERO_RECIPROCAL'); + return uq112x112(uint224(Q224 / self._x)); + } + + // square root of a UQ112x112 + function sqrt(uq112x112 memory self) internal pure returns (uq112x112 memory) { + return uq112x112(uint224(Babylonian.sqrt(uint256(self._x)) << 56)); + } +} \ No newline at end of file diff --git a/src/hardhat/contracts/BAMM/FraxswapDummyRouter.sol b/src/hardhat/contracts/BAMM/FraxswapDummyRouter.sol new file mode 100644 index 00000000..9bfd9f9f --- /dev/null +++ b/src/hardhat/contracts/BAMM/FraxswapDummyRouter.sol @@ -0,0 +1,49 @@ +// SPDX-License-Identifier: BUSL-1.1 +pragma solidity >=0.8.0; +pragma abicoder v2; + +// ==================================================================== +// | ______ _______ | +// | / _____________ __ __ / ____(_____ ____ _____ ________ | +// | / /_ / ___/ __ `| |/_/ / /_ / / __ \/ __ `/ __ \/ ___/ _ \ | +// | / __/ / / / /_/ _> < / __/ / / / / / /_/ / / / / /__/ __/ | +// | /_/ /_/ \__,_/_/|_| /_/ /_/_/ /_/\__,_/_/ /_/\___/\___/ | +// | | +// ==================================================================== +// ======================== FraxswapDummyRouter ======================= +// ==================================================================== +// A dummy router that takes in the input tokens and transfers out the amountOutMinimum + +// Frax Finance: https://github.com/FraxFinance + +// Primary Author +// Dennis: https://github.com/denett + +// Reviewer(s) / Contributor(s) +// Travis Moore: https://github.com/FortisFortuna + +import "@openzeppelin/contracts/token/ERC20/IERC20.sol"; +import "@uniswap/v3-periphery/contracts/libraries/TransferHelper.sol"; + +contract FraxswapDummyRouter { + struct FraxswapParams { + address tokenIn; + uint256 amountIn; + address tokenOut; + uint256 amountOutMinimum; + address recipient; + uint256 deadline; + bool approveMax; + uint8 v; + bytes32 r; + bytes32 s; + bytes route; + } + function swap(FraxswapParams memory params) external payable returns (uint256) { + TransferHelper.safeTransferFrom(params.tokenIn, msg.sender , address(this), params.amountIn); + TransferHelper.safeTransfer(params.tokenOut, params.recipient, params.amountOutMinimum); + return params.amountOutMinimum; + } +} + + \ No newline at end of file diff --git a/src/hardhat/contracts/BAMM/FraxswapOracle.sol b/src/hardhat/contracts/BAMM/FraxswapOracle.sol new file mode 100644 index 00000000..cece5822 --- /dev/null +++ b/src/hardhat/contracts/BAMM/FraxswapOracle.sol @@ -0,0 +1,123 @@ +// SPDX-License-Identifier: BUSL-1.1 +pragma solidity >=0.8.0; + +// ==================================================================== +// | ______ _______ | +// | / _____________ __ __ / ____(_____ ____ _____ ________ | +// | / /_ / ___/ __ `| |/_/ / /_ / / __ \/ __ `/ __ \/ ___/ _ \ | +// | / __/ / / / /_/ _> < / __/ / / / / / /_/ / / / / /__/ __/ | +// | /_/ /_/ \__,_/_/|_| /_/ /_/_/ /_/\__,_/_/ /_/\___/\___/ | +// | | +// ==================================================================== +// =========================== FraxswapOracle ========================= +// ==================================================================== +// Gets token0 and token1 prices from a Fraxswap pair + +// Frax Finance: https://github.com/FraxFinance + +// Primary Author +// Dennis: https://github.com/denett + +// Reviewer(s) / Contributor(s) +// Travis Moore: https://github.com/FortisFortuna + + +import './FixedPoint.sol'; +import '../Fraxswap/core/libraries/UQ112x112.sol'; +import "hardhat/console.sol"; + +contract FraxswapOracle { + using UQ112x112 for uint224; + using FixedPoint for *; + + /// @notice Gets the prices for token0 and token1 from a Fraxswap pool + /// @param pool The LP contract + /// @param period The minimum size of the period between observations, in seconds + /// @param rounds 2 ^ rounds # of blocks to search + /// @param maxDiffPerc Max price change from last value + /// @return result0 The price for token0 + /// @return result1 The price for token1 + function getPrice( + IFraxswapPair pool, + uint period, + uint rounds, + uint maxDiffPerc + ) public view returns (uint result0, uint result1) { + uint lastObservationIndex = pool.getTWAPHistoryLength() - 1; + IFraxswapPair.TWAPObservation memory lastObservation = pool.TWAPObservationHistory(lastObservationIndex); + + // Update last observation up to the current block + if (lastObservation.timestamp < block.timestamp) { + // Update the reserves + (uint112 _reserve0, uint112 _reserve1, ) = pool.getReserves(); + + // Get the latest observed prices + uint timeElapsed = block.timestamp - lastObservation.timestamp; + lastObservation.price0CumulativeLast += uint(UQ112x112.encode(_reserve1).uqdiv(_reserve0)) * timeElapsed; + lastObservation.price1CumulativeLast += uint(UQ112x112.encode(_reserve0).uqdiv(_reserve1)) * timeElapsed; + lastObservation.timestamp = block.timestamp; + } + + // Search for an observation + // TODO: Dennis explain math + IFraxswapPair.TWAPObservation memory foundObservation; + uint step = 2 ** rounds; + uint min = (lastObservationIndex + 2 > step) ? (lastObservationIndex + 2 - step) : 0; + while (step > 1) { + step = step >> 1; + uint pos = min + step - 1; + if (pos <= lastObservationIndex) { + IFraxswapPair.TWAPObservation memory observation = pool.TWAPObservationHistory(pos); + if (lastObservation.timestamp - observation.timestamp > period) { + foundObservation = observation; + min = pos + 1; + } + } + } + + // Reverts when a matching period can not be found + require (foundObservation.timestamp > 0, "Period too long"); + + // Get the price results + result0 = FixedPoint.uq112x112(uint224((lastObservation.price0CumulativeLast - foundObservation.price0CumulativeLast) / (lastObservation.timestamp - foundObservation.timestamp))).mul(1e18).decode144(); + result1 = FixedPoint.uq112x112(uint224((lastObservation.price1CumulativeLast - foundObservation.price1CumulativeLast) / (lastObservation.timestamp - foundObservation.timestamp))).mul(1e18).decode144(); + + // Revert if the price changed too much + uint checkResult0 = 1e36 / result1; + uint diff = (checkResult0 > result0 ? checkResult0 - result0 : result0 - checkResult0); + uint diffPerc = (diff * 10000) / result0; + if (diffPerc > maxDiffPerc) revert("Max diff"); + } + + /// @notice Gets the prices for token0 from a Fraxswap pool + /// @param pool The LP contract + /// @param period The minimum size of the period between observations, in seconds + /// @param rounds 2 ^ rounds # of blocks to search + /// @param maxDiffPerc Max price change from last value + /// @return result0 The price for token0 + function getPrice0(IFraxswapPair pool, uint period, uint rounds, uint maxDiffPerc) external view returns (uint result0) { + (result0, ) = getPrice(pool, period, rounds, maxDiffPerc); + } + + /// @notice Gets the price for token1 from a Fraxswap pool + /// @param pool The LP contract + /// @param period The minimum size of the period between observations, in seconds + /// @param rounds 2 ^ rounds # of blocks to search + /// @param maxDiffPerc Max price change from last value + /// @return result1 The price for token1 + function getPrice1(IFraxswapPair pool, uint period, uint rounds, uint maxDiffPerc) external view returns (uint result1) { + (, result1) = getPrice(pool, period, rounds, maxDiffPerc); + } +} + +// Interface used to call FraxswapPair +interface IFraxswapPair { + function getTWAPHistoryLength() external view returns (uint); + function TWAPObservationHistory(uint index) external view returns(TWAPObservation memory); + struct TWAPObservation { + uint timestamp; + uint price0CumulativeLast; + uint price1CumulativeLast; + } + function getReserves() external view returns (uint112 _reserve0, uint112 _reserve1, uint32 _blockTimestampLast); +} \ No newline at end of file diff --git a/src/hardhat/contracts/Common/Ownable.sol b/src/hardhat/contracts/Common/Ownable.sol index 4734e442..f3d668d6 100644 --- a/src/hardhat/contracts/Common/Ownable.sol +++ b/src/hardhat/contracts/Common/Ownable.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: MIT -pragma solidity 0.6.11; +pragma solidity >=0.6.11; import "./Context.sol"; /** diff --git a/src/hardhat/contracts/FraxferryV2/DummyStateRootOracle.sol b/src/hardhat/contracts/FraxferryV2/DummyStateRootOracle.sol new file mode 100644 index 00000000..d660b8d1 --- /dev/null +++ b/src/hardhat/contracts/FraxferryV2/DummyStateRootOracle.sol @@ -0,0 +1,14 @@ +// SPDX-License-Identifier: BUSL-1.1 +pragma solidity ^0.8.0; + +import "./interface/IStateRootOracle.sol"; + +contract DummyStateRootOracle is IStateRootOracle { + mapping (uint => BlockInfo) public blocks; + function getBlockInfo(uint blockNumber) external view returns (BlockInfo memory) { + return blocks[blockNumber]; + } + function setStateRoot(uint blockNumber,bytes32 stateRoot, uint32 timestamp) external { + blocks[blockNumber]=BlockInfo(stateRoot,timestamp); + } +} \ No newline at end of file diff --git a/src/hardhat/contracts/FraxferryV2/FerryOnL1.sol b/src/hardhat/contracts/FraxferryV2/FerryOnL1.sol new file mode 100644 index 00000000..623707c3 --- /dev/null +++ b/src/hardhat/contracts/FraxferryV2/FerryOnL1.sol @@ -0,0 +1,94 @@ +//SPDX-License-Identifier: Unlicense +pragma solidity ^0.8.4; + +import "@uniswap/v3-periphery/contracts/libraries/TransferHelper.sol"; +import "@openzeppelin/contracts/utils/math/Math.sol"; +import "hardhat/console.sol"; + +contract FerryOnL1 { + mapping(address => TransactionIn[]) public transactionsIn; + mapping(bytes32 => address) public transactionsOut; + + mapping(address => CaptainInfo) public captains; + IERC20 immutable public token; + uint constant public REDUCED_DECIMALS=1e10; + + struct TransactionIn { + address recipient; + uint64 amount; + uint32 timestamp; + } + struct CaptainInfo { + uint256 balance; + uint256 cummulativeAmount; + uint32 minFee; + uint32 maxFee; + uint32 feeRate; + uint32 newFeeActiveTimestamp; + uint32 newMinFee; + uint32 newMaxFee; + uint32 newFeeRate; + } + mapping(address => mapping(address => bool)) fee_exempt_addrs; + + event Embark(address indexed sender, uint index, uint amount, uint amountAfterFee, uint timestamp, address indexed captain); + event Disembark(address indexed captain, uint32 indexed index, address indexed recipient, uint amount); + + constructor(address _token) { + token = IERC20(_token); + } + + // ************* L1 => L2 + function embarkWithRecipient(uint amount, address recipient, address _captain, uint maxCummulativeAmount) public { + CaptainInfo memory captain = captains[_captain]; + if (captain.cummulativeAmount>maxCummulativeAmount) revert("maxCummulativeAmount"); + if (captain.newFeeActiveTimestamp==0) revert("Captain not active"); + amount = (amount/REDUCED_DECIMALS)*REDUCED_DECIMALS; // Round amount to fit in data structure + uint fee; + if (fee_exempt_addrs[_captain][msg.sender]) fee = 0; + else { + if (block.timestamp>captain.newFeeActiveTimestamp) fee = Math.min(Math.max(captain.newMinFee,amount*captain.newFeeRate/10000),captain.newMaxFee); + else fee = Math.min(Math.max(captain.minFee,amount*captain.feeRate/10000),captain.maxFee); + } + require (amount>fee,"Amount too low"); + require (amount/REDUCED_DECIMALS<=type(uint64).max,"Amount too high"); + TransferHelper.safeTransferFrom(address(token),msg.sender,address(this),amount); + uint64 amountAfterFee = uint64((amount-fee)/REDUCED_DECIMALS); + emit Embark(recipient,transactionsIn[_captain].length,amount,amountAfterFee*REDUCED_DECIMALS,block.timestamp,_captain); + transactionsIn[_captain].push(TransactionIn(recipient,amountAfterFee,uint32(block.timestamp))); + captains[_captain].cummulativeAmount+=amountAfterFee; + captains[_captain].balance+=amount; + + } + + function initCaptain(uint32 _newMinFee, uint32 _newMaxFee, uint32 _newFeeRate) external { + CaptainInfo storage captain = captains[msg.sender]; + if (captain.newFeeActiveTimestamp>0 && block.timestamp>captain.newFeeActiveTimestamp) { + captain.minFee=captain.newMinFee; + captain.maxFee=captain.newMaxFee; + captain.feeRate=captain.newFeeRate; + } + captain.newMinFee = _newMinFee; + captain.newMaxFee = _newMaxFee; + captain.newFeeRate = _newFeeRate; + captain.newFeeActiveTimestamp = uint32(block.timestamp+(captain.newFeeActiveTimestamp==0?0:60*60)); // Updated fee starts in 1 hour, to avoid frontrunning. + } + + function withdraw() external { + CaptainInfo storage captain = captains[msg.sender]; + uint withdrawAmount=captain.balance; + captain.balance=0; + TransferHelper.safeTransfer(address(token),msg.sender,withdrawAmount); + } + + // ************* L2 => L1 + function disembark(uint amount, address recipient,uint32 index, address captain, uint32 deadline) public { + if (block.timestamp>=deadline) revert("Deadline"); + bytes32 hash = keccak256(abi.encodePacked(amount,recipient,index)); + if (transactionsOut[hash]!=address(0)) revert("Already disembarked"); + TransferHelper.safeTransferFrom(address(token),msg.sender,recipient,amount); + emit Disembark(captain,index,recipient,amount); + transactionsOut[hash]=captain; + } +} + diff --git a/src/hardhat/contracts/FraxferryV2/FerryOnL2.sol b/src/hardhat/contracts/FraxferryV2/FerryOnL2.sol new file mode 100644 index 00000000..f8a74eb1 --- /dev/null +++ b/src/hardhat/contracts/FraxferryV2/FerryOnL2.sol @@ -0,0 +1,143 @@ +//SPDX-License-Identifier: Unlicense +pragma solidity ^0.8.4; + +/* +- A captain makes a FRAX deposit on L2 +- The captain can withdraw the FRAX, but only after a time delay of 48 hours +- User sends FRAX to the contract on L1 and can specify the max cummulative FRAX. This way they can be sure there is enough FRAX on L2 +- User provides proofs of the L1 payment on L2 and gets the FRAX. +*/ + +import {RLPReader} from "./RLPReader.sol"; +import {StateProofVerifier as Verifier} from "./StateProofVerifier.sol"; +import "@uniswap/v3-periphery/contracts/libraries/TransferHelper.sol"; +import "./interface/IStateRootOracle.sol"; +import "hardhat/console.sol"; + +contract FerryOnL2 { + using RLPReader for bytes; + using RLPReader for RLPReader.RLPItem; + + IERC20 immutable public token; + address immutable public L1_ADDRESS; + IStateRootOracle immutable public stateRootOracle; + uint constant public EXIT_WAIT_TIME=60*60*24*2; // 48 hours + mapping(address => CaptainData) public captainData; + mapping(address => uint32) public captainDisembarked; + + uint constant public REDUCED_DECIMALS=1e10; + + Transaction[] public transactions; + struct Transaction { + address recipient; + uint amount; + uint tip; + uint32 deadline; + bool done; + } + + struct CaptainData { + uint balance; + uint cummAmount; + uint withdrawAmount; + uint withdrawTime; + uint32 index; + } + + event Embark(address indexed sender, uint32 indexed index, uint amount, uint tip, uint timestamp); + event IncreaseTip(uint32 indexed index,uint tip); + event Disembark(address indexed captain, uint32 index, address indexed recipient, uint amount); + + constructor(address _token, address _L1_ADDRESS, IStateRootOracle _stateRootOracle) { + token = IERC20(_token); + L1_ADDRESS = _L1_ADDRESS; + stateRootOracle = _stateRootOracle; + } + + // ************* L1 => L2 + + function captainDeposit(uint amount) external { + CaptainData storage data = captainData[msg.sender]; + TransferHelper.safeTransferFrom(address(token),msg.sender,address(this),amount); + data.balance+=amount; + } + + function captainInitiateWithdraw(uint amount) external { + CaptainData storage data = captainData[msg.sender]; + data.withdrawAmount=amount; + data.withdrawTime=block.timestamp+EXIT_WAIT_TIME; + } + + function captainWithdraw() external { + CaptainData storage data = captainData[msg.sender]; + if (block.timestampdata.balance?data.balance:data.withdrawAmount; + data.balance-=toWithdraw; + data.withdrawAmount=0; + TransferHelper.safeTransfer(address(token),msg.sender,toWithdraw); + } + + function disembark(address captain, uint32 index, uint blockNumber, bytes[] memory _proofAccount,bytes[][] memory _proofValue) external { + IStateRootOracle.BlockInfo memory blockInfo = stateRootOracle.getBlockInfo(blockNumber); + Verifier.Account memory accountPool = proofStorageRoot(blockInfo.stateRoot, L1_ADDRESS, _proofAccount); + CaptainData storage data = captainData[captain]; + if (data.index!=index) revert("Wrong index"); + data.index+=uint32(_proofValue.length); + for (uint i=0;i<_proofValue.length;i++) { + bytes32 slot = bytes32(uint(keccak256(abi.encodePacked(keccak256(abi.encodePacked(abi.encode(captain),bytes32(0))))))+index+i); + uint value = uint(proofStorageSlotValue(accountPool.storageRoot, slot, _proofValue[i]).value); + if (value==0) revert("Empty slot"); + uint amount = uint64(value>>160)*REDUCED_DECIMALS; + address recipient = address(uint160(value)); + data.balance-=amount; + data.cummAmount+=amount; + emit Disembark(captain,index,recipient,amount); + TransferHelper.safeTransfer(address(token),recipient,amount); + } + } + + + // ************* L2 => L1 + + function embarkWithRecipient(uint amount, uint tip, address recipient, uint32 deadline) public { + TransferHelper.safeTransferFrom(address(token),msg.sender,address(this),amount+tip); + emit Embark(recipient,uint32(transactions.length),amount,tip,block.timestamp); + transactions.push(Transaction(recipient,amount,tip,deadline,false)); + } + + function increaseTip(uint32 index, uint tip) external { + TransferHelper.safeTransferFrom(address(token),msg.sender,address(this),tip); + emit IncreaseTip(index,tip); + transactions[index].tip+=tip; + } + + function collect(uint32 index, uint blockNumber, bytes[] memory _proofAccount,bytes[] memory _proofValue) external { + Transaction storage transaction = transactions[index]; + if (transaction.done) revert("Already collected"); + transaction.done=true; + IStateRootOracle.BlockInfo memory blockInfo = stateRootOracle.getBlockInfo(blockNumber); + Verifier.Account memory accountPool = proofStorageRoot(blockInfo.stateRoot, L1_ADDRESS, _proofAccount); + bytes32 hash = keccak256(abi.encodePacked(transaction.amount,transaction.recipient,index)); + bytes32 slot = keccak256(abi.encodePacked(hash,bytes32(uint(1)))); + uint256 value = proofStorageSlotValue(accountPool.storageRoot, slot, _proofValue).value; + if (value==0) { // Not disembarked, return the funds + if (blockInfo.timestamp= 16) { + // each element of the path has to be a nibble + revert(); + } + + if (_isEmptyBytesequence(node[nibble])) { + // Sanity + if (i != stack.length - 1) { + // leaf node should be at last level + revert(); + } + + return new bytes(0); + } else if (!node[nibble].isList()) { + nodeHashHash = node[nibble].payloadKeccak256(); + } else { + nodeHashHash = node[nibble].rlpBytesKeccak256(); + } + } else { + // we have consumed the entire mptKey, so we need to look at what's contained in this node. + + // Sanity + if (i != stack.length - 1) { + // should be at last level + revert(); + } + + return node[16].toBytes(); + } + } + } + } + + + /// @dev Computes the hash of the Merkle-Patricia-Trie hash of the RLP item. + /// Merkle-Patricia-Tries use a weird "hash function" that outputs + /// *variable-length* hashes: If the item is shorter than 32 bytes, + /// the MPT hash is the item. Otherwise, the MPT hash is the + /// Keccak-256 hash of the item. + /// The easiest way to compare variable-length byte sequences is + /// to compare their Keccak-256 hashes. + /// @param item The RLP item to be hashed. + /// @return Keccak-256(MPT-hash(item)) + function _mptHashHash(RLPReader.RLPItem memory item) private pure returns (bytes32) { + if (item.len < 32) { + return item.rlpBytesKeccak256(); + } else { + return keccak256(abi.encodePacked(item.rlpBytesKeccak256())); + } + } + + function _isEmptyBytesequence(RLPReader.RLPItem memory item) private pure returns (bool) { + if (item.len != 1) { + return false; + } + uint8 b; + uint256 memPtr = item.memPtr; + assembly { + b := byte(0, mload(memPtr)) + } + return b == 0x80 /* empty byte string */; + } + + + function _merklePatriciaCompactDecode(bytes memory compact) private pure returns (bool isLeaf, bytes memory nibbles) { + require(compact.length > 0); + uint256 first_nibble = uint8(compact[0]) >> 4 & 0xF; + uint256 skipNibbles; + if (first_nibble == 0) { + skipNibbles = 2; + isLeaf = false; + } else if (first_nibble == 1) { + skipNibbles = 1; + isLeaf = false; + } else if (first_nibble == 2) { + skipNibbles = 2; + isLeaf = true; + } else if (first_nibble == 3) { + skipNibbles = 1; + isLeaf = true; + } else { + // Not supposed to happen! + revert(); + } + return (isLeaf, _decodeNibbles(compact, skipNibbles)); + } + + + function _decodeNibbles(bytes memory compact, uint256 skipNibbles) private pure returns (bytes memory nibbles) { + require(compact.length > 0); + + uint256 length = compact.length * 2; + require(skipNibbles <= length); + length -= skipNibbles; + + nibbles = new bytes(length); + uint256 nibblesLength = 0; + + for (uint256 i = skipNibbles; i < skipNibbles + length; i += 1) { + if (i % 2 == 0) { + nibbles[nibblesLength] = bytes1((uint8(compact[i/2]) >> 4) & 0xF); + } else { + nibbles[nibblesLength] = bytes1((uint8(compact[i/2]) >> 0) & 0xF); + } + nibblesLength += 1; + } + + assert(nibblesLength == nibbles.length); + } + + + function _sharedPrefixLength(uint256 xsOffset, bytes memory xs, bytes memory ys) private pure returns (uint256) { + uint256 i; + for (i = 0; i + xsOffset < xs.length && i < ys.length; i++) { + if (xs[i + xsOffset] != ys[i]) { + return i; + } + } + return i; + } +} diff --git a/src/hardhat/contracts/FraxferryV2/RLPReader.sol b/src/hardhat/contracts/FraxferryV2/RLPReader.sol new file mode 100644 index 00000000..41ec8a6b --- /dev/null +++ b/src/hardhat/contracts/FraxferryV2/RLPReader.sol @@ -0,0 +1,354 @@ +// SPDX-License-Identifier: Apache-2.0 + +/* + * @author Hamdi Allam hamdi.allam97@gmail.com + * Please reach out with any questions or concerns + */ +pragma solidity >=0.5.10 <=0.8.18; + +library RLPReader { + uint8 constant STRING_SHORT_START = 0x80; + uint8 constant STRING_LONG_START = 0xb8; + uint8 constant LIST_SHORT_START = 0xc0; + uint8 constant LIST_LONG_START = 0xf8; + uint8 constant WORD_SIZE = 32; + + struct RLPItem { + uint256 len; + uint256 memPtr; + } + + struct Iterator { + RLPItem item; // Item that's being iterated over. + uint256 nextPtr; // Position of the next item in the list. + } + + /* + * @dev Returns the next element in the iteration. Reverts if it has not next element. + * @param self The iterator. + * @return The next element in the iteration. + */ + function next(Iterator memory self) internal pure returns (RLPItem memory) { + require(hasNext(self)); + + uint256 ptr = self.nextPtr; + uint256 itemLength = _itemLength(ptr); + self.nextPtr = ptr + itemLength; + + return RLPItem(itemLength, ptr); + } + + /* + * @dev Returns true if the iteration has more elements. + * @param self The iterator. + * @return true if the iteration has more elements. + */ + function hasNext(Iterator memory self) internal pure returns (bool) { + RLPItem memory item = self.item; + return self.nextPtr < item.memPtr + item.len; + } + + /* + * @param item RLP encoded bytes + */ + function toRlpItem(bytes memory item) internal pure returns (RLPItem memory) { + uint256 memPtr; + assembly { + memPtr := add(item, 0x20) + } + + return RLPItem(item.length, memPtr); + } + + /* + * @dev Create an iterator. Reverts if item is not a list. + * @param self The RLP item. + * @return An 'Iterator' over the item. + */ + function iterator(RLPItem memory self) internal pure returns (Iterator memory) { + require(isList(self)); + + uint256 ptr = self.memPtr + _payloadOffset(self.memPtr); + return Iterator(self, ptr); + } + + /* + * @param the RLP item. + */ + function rlpLen(RLPItem memory item) internal pure returns (uint256) { + return item.len; + } + + /* + * @param the RLP item. + * @return (memPtr, len) pair: location of the item's payload in memory. + */ + function payloadLocation(RLPItem memory item) internal pure returns (uint256, uint256) { + uint256 offset = _payloadOffset(item.memPtr); + uint256 memPtr = item.memPtr + offset; + uint256 len = item.len - offset; // data length + return (memPtr, len); + } + + /* + * @param the RLP item. + */ + function payloadLen(RLPItem memory item) internal pure returns (uint256) { + (, uint256 len) = payloadLocation(item); + return len; + } + + /* + * @param the RLP item containing the encoded list. + */ + function toList(RLPItem memory item) internal pure returns (RLPItem[] memory) { + require(isList(item)); + + uint256 items = numItems(item); + RLPItem[] memory result = new RLPItem[](items); + + uint256 memPtr = item.memPtr + _payloadOffset(item.memPtr); + uint256 dataLen; + for (uint256 i = 0; i < items; i++) { + dataLen = _itemLength(memPtr); + result[i] = RLPItem(dataLen, memPtr); + memPtr = memPtr + dataLen; + } + + return result; + } + + // @return indicator whether encoded payload is a list. negate this function call for isData. + function isList(RLPItem memory item) internal pure returns (bool) { + if (item.len == 0) return false; + + uint8 byte0; + uint256 memPtr = item.memPtr; + assembly { + byte0 := byte(0, mload(memPtr)) + } + + if (byte0 < LIST_SHORT_START) return false; + return true; + } + + /* + * @dev A cheaper version of keccak256(toRlpBytes(item)) that avoids copying memory. + * @return keccak256 hash of RLP encoded bytes. + */ + function rlpBytesKeccak256(RLPItem memory item) internal pure returns (bytes32) { + uint256 ptr = item.memPtr; + uint256 len = item.len; + bytes32 result; + assembly { + result := keccak256(ptr, len) + } + return result; + } + + /* + * @dev A cheaper version of keccak256(toBytes(item)) that avoids copying memory. + * @return keccak256 hash of the item payload. + */ + function payloadKeccak256(RLPItem memory item) internal pure returns (bytes32) { + (uint256 memPtr, uint256 len) = payloadLocation(item); + bytes32 result; + assembly { + result := keccak256(memPtr, len) + } + return result; + } + + /** RLPItem conversions into data types **/ + + // @returns raw rlp encoding in bytes + function toRlpBytes(RLPItem memory item) internal pure returns (bytes memory) { + bytes memory result = new bytes(item.len); + if (result.length == 0) return result; + + uint256 ptr; + assembly { + ptr := add(0x20, result) + } + + copy(item.memPtr, ptr, item.len); + return result; + } + + // any non-zero byte except "0x80" is considered true + function toBoolean(RLPItem memory item) internal pure returns (bool) { + require(item.len == 1); + uint256 result; + uint256 memPtr = item.memPtr; + assembly { + result := byte(0, mload(memPtr)) + } + + // SEE Github Issue #5. + // Summary: Most commonly used RLP libraries (i.e Geth) will encode + // "0" as "0x80" instead of as "0". We handle this edge case explicitly + // here. + if (result == 0 || result == STRING_SHORT_START) { + return false; + } else { + return true; + } + } + + function toAddress(RLPItem memory item) internal pure returns (address) { + // 1 byte for the length prefix + require(item.len == 21); + + return address(uint160(toUint(item))); + } + + function toUint(RLPItem memory item) internal pure returns (uint256) { + require(item.len > 0 && item.len <= 33); + + (uint256 memPtr, uint256 len) = payloadLocation(item); + + uint256 result; + assembly { + result := mload(memPtr) + + // shift to the correct location if neccesary + if lt(len, 32) { + result := div(result, exp(256, sub(32, len))) + } + } + + return result; + } + + // enforces 32 byte length + function toUintStrict(RLPItem memory item) internal pure returns (uint256) { + // one byte prefix + require(item.len == 33); + + uint256 result; + uint256 memPtr = item.memPtr + 1; + assembly { + result := mload(memPtr) + } + + return result; + } + + function toBytes(RLPItem memory item) internal pure returns (bytes memory) { + require(item.len > 0); + + (uint256 memPtr, uint256 len) = payloadLocation(item); + bytes memory result = new bytes(len); + + uint256 destPtr; + assembly { + destPtr := add(0x20, result) + } + + copy(memPtr, destPtr, len); + return result; + } + + /* + * Private Helpers + */ + + // @return number of payload items inside an encoded list. + function numItems(RLPItem memory item) private pure returns (uint256) { + if (item.len == 0) return 0; + + uint256 count = 0; + uint256 currPtr = item.memPtr + _payloadOffset(item.memPtr); + uint256 endPtr = item.memPtr + item.len; + while (currPtr < endPtr) { + currPtr = currPtr + _itemLength(currPtr); // skip over an item + count++; + } + + return count; + } + + // @return entire rlp item byte length + function _itemLength(uint256 memPtr) private pure returns (uint256) { + uint256 itemLen; + uint256 byte0; + assembly { + byte0 := byte(0, mload(memPtr)) + } + + if (byte0 < STRING_SHORT_START) { + itemLen = 1; + } else if (byte0 < STRING_LONG_START) { + itemLen = byte0 - STRING_SHORT_START + 1; + } else if (byte0 < LIST_SHORT_START) { + assembly { + let byteLen := sub(byte0, 0xb7) // # of bytes the actual length is + memPtr := add(memPtr, 1) // skip over the first byte + + /* 32 byte word size */ + let dataLen := div(mload(memPtr), exp(256, sub(32, byteLen))) // right shifting to get the len + itemLen := add(dataLen, add(byteLen, 1)) + } + } else if (byte0 < LIST_LONG_START) { + itemLen = byte0 - LIST_SHORT_START + 1; + } else { + assembly { + let byteLen := sub(byte0, 0xf7) + memPtr := add(memPtr, 1) + + let dataLen := div(mload(memPtr), exp(256, sub(32, byteLen))) // right shifting to the correct length + itemLen := add(dataLen, add(byteLen, 1)) + } + } + + return itemLen; + } + + // @return number of bytes until the data + function _payloadOffset(uint256 memPtr) private pure returns (uint256) { + uint256 byte0; + assembly { + byte0 := byte(0, mload(memPtr)) + } + + if (byte0 < STRING_SHORT_START) { + return 0; + } else if (byte0 < STRING_LONG_START || (byte0 >= LIST_SHORT_START && byte0 < LIST_LONG_START)) { + return 1; + } else if (byte0 < LIST_SHORT_START) { + // being explicit + return byte0 - (STRING_LONG_START - 1) + 1; + } else { + return byte0 - (LIST_LONG_START - 1) + 1; + } + } + + /* + * @param src Pointer to source + * @param dest Pointer to destination + * @param len Amount of memory to copy from the source + */ + function copy(uint256 src, uint256 dest, uint256 len) private pure { + if (len == 0) return; + + // copy as many word sizes as possible + for (; len >= WORD_SIZE; len -= WORD_SIZE) { + assembly { + mstore(dest, mload(src)) + } + + src += WORD_SIZE; + dest += WORD_SIZE; + } + + if (len > 0) { + // left over bytes. Mask is used to remove unwanted bytes from the word + uint256 mask = 256**(WORD_SIZE - len) - 1; + assembly { + let srcpart := and(mload(src), not(mask)) // zero out src + let destpart := and(mload(dest), mask) // retrieve the bytes + mstore(dest, or(destpart, srcpart)) + } + } + } +} diff --git a/src/hardhat/contracts/FraxferryV2/StateProofVerifier.sol b/src/hardhat/contracts/FraxferryV2/StateProofVerifier.sol new file mode 100644 index 00000000..9532ca5f --- /dev/null +++ b/src/hardhat/contracts/FraxferryV2/StateProofVerifier.sol @@ -0,0 +1,143 @@ +// SPDX-License-Identifier: MIT + +pragma solidity ^0.8.4; + +import {RLPReader} from "./RLPReader.sol"; +import {MerklePatriciaProofVerifier} from "./MerklePatriciaProofVerifier.sol"; + + +/** + * @title A helper library for verification of Merkle Patricia account and state proofs. + */ +library StateProofVerifier { + using RLPReader for RLPReader.RLPItem; + using RLPReader for bytes; + + uint256 constant HEADER_STATE_ROOT_INDEX = 3; + uint256 constant HEADER_NUMBER_INDEX = 8; + uint256 constant HEADER_TIMESTAMP_INDEX = 11; + + struct BlockHeader { + bytes32 hash; + bytes32 stateRootHash; + uint256 number; + uint256 timestamp; + } + + struct Account { + bool exists; + uint256 nonce; + uint256 balance; + bytes32 storageRoot; + bytes32 codeHash; + } + + struct SlotValue { + bool exists; + uint256 value; + } + + + /** + * @notice Parses block header and verifies its presence onchain within the latest 256 blocks. + * @param _headerRlpBytes RLP-encoded block header. + */ + function verifyBlockHeader(bytes memory _headerRlpBytes) + internal view returns (BlockHeader memory) + { + BlockHeader memory header = parseBlockHeader(_headerRlpBytes); + // ensure that the block is actually in the blockchain + require(header.hash == blockhash(header.number), "blockhash mismatch"); + return header; + } + + + /** + * @notice Parses RLP-encoded block header. + * @param _headerRlpBytes RLP-encoded block header. + */ + function parseBlockHeader(bytes memory _headerRlpBytes) + internal pure returns (BlockHeader memory) + { + BlockHeader memory result; + RLPReader.RLPItem[] memory headerFields = _headerRlpBytes.toRlpItem().toList(); + + require(headerFields.length > HEADER_TIMESTAMP_INDEX); + + result.stateRootHash = bytes32(headerFields[HEADER_STATE_ROOT_INDEX].toUint()); + result.number = headerFields[HEADER_NUMBER_INDEX].toUint(); + result.timestamp = headerFields[HEADER_TIMESTAMP_INDEX].toUint(); + result.hash = keccak256(_headerRlpBytes); + + return result; + } + + + /** + * @notice Verifies Merkle Patricia proof of an account and extracts the account fields. + * + * @param _addressHash Keccak256 hash of the address corresponding to the account. + * @param _stateRootHash MPT root hash of the Ethereum state trie. + */ + function extractAccountFromProof( + bytes32 _addressHash, // keccak256(abi.encodePacked(address)) + bytes32 _stateRootHash, + RLPReader.RLPItem[] memory _proof + ) + internal pure returns (Account memory) + { + bytes memory acctRlpBytes = MerklePatriciaProofVerifier.extractProofValue( + _stateRootHash, + abi.encodePacked(_addressHash), + _proof + ); + + Account memory account; + + if (acctRlpBytes.length == 0) { + return account; + } + + RLPReader.RLPItem[] memory acctFields = acctRlpBytes.toRlpItem().toList(); + require(acctFields.length == 4); + + account.exists = true; + account.nonce = acctFields[0].toUint(); + account.balance = acctFields[1].toUint(); + account.storageRoot = bytes32(acctFields[2].toUint()); + account.codeHash = bytes32(acctFields[3].toUint()); + + return account; + } + + + /** + * @notice Verifies Merkle Patricia proof of a slot and extracts the slot's value. + * + * @param _slotHash Keccak256 hash of the slot position. + * @param _storageRootHash MPT root hash of the account's storage trie. + */ + function extractSlotValueFromProof( + bytes32 _slotHash, + bytes32 _storageRootHash, + RLPReader.RLPItem[] memory _proof + ) + internal pure returns (SlotValue memory) + { + bytes memory valueRlpBytes = MerklePatriciaProofVerifier.extractProofValue( + _storageRootHash, + abi.encodePacked(_slotHash), + _proof + ); + + SlotValue memory value; + + if (valueRlpBytes.length != 0) { + value.exists = true; + value.value = valueRlpBytes.toRlpItem().toUint(); + } + + return value; + } + +} diff --git a/src/hardhat/contracts/FraxferryV2/StateProver.sol b/src/hardhat/contracts/FraxferryV2/StateProver.sol new file mode 100644 index 00000000..58334b58 --- /dev/null +++ b/src/hardhat/contracts/FraxferryV2/StateProver.sol @@ -0,0 +1,29 @@ +//SPDX-License-Identifier: Unlicense +pragma solidity ^0.8.4; + +import {RLPReader} from "./RLPReader.sol"; +import {StateProofVerifier as Verifier} from "./StateProofVerifier.sol"; +import "hardhat/console.sol"; + +contract StateProver { + using RLPReader for bytes; + using RLPReader for RLPReader.RLPItem; + + function logHash(bytes memory _proofRlpBytes) public { + console.logBytes(_proofRlpBytes); + RLPReader.RLPItem memory item = _proofRlpBytes.toRlpItem(); + console.logBytes32(item.rlpBytesKeccak256()); + } + + function proofStorageRoot(bytes32 stateRootHash, address proofAddress, bytes[] memory _proofBytesArray) public view returns (Verifier.Account memory accountPool) { + RLPReader.RLPItem[] memory proof = new RLPReader.RLPItem[](_proofBytesArray.length); + for (uint i=0;i<_proofBytesArray.length;i++) proof[i] = _proofBytesArray[i].toRlpItem(); + accountPool = Verifier.extractAccountFromProof(keccak256(abi.encodePacked(proofAddress)), stateRootHash, proof); + } + + function proofStorageSlotValue(bytes32 storageRoot, bytes32 slot, bytes[] memory _proofBytesArray) public view returns (Verifier.SlotValue memory slotValue) { + RLPReader.RLPItem[] memory proof = new RLPReader.RLPItem[](_proofBytesArray.length); + for (uint i=0;i<_proofBytesArray.length;i++) proof[i] = _proofBytesArray[i].toRlpItem(); + slotValue = Verifier.extractSlotValueFromProof(keccak256(abi.encodePacked(slot)),storageRoot,proof); + } +} diff --git a/src/hardhat/contracts/FraxferryV2/interface/IStateRootOracle.sol b/src/hardhat/contracts/FraxferryV2/interface/IStateRootOracle.sol new file mode 100644 index 00000000..ea4559c5 --- /dev/null +++ b/src/hardhat/contracts/FraxferryV2/interface/IStateRootOracle.sol @@ -0,0 +1,10 @@ +// SPDX-License-Identifier: BUSL-1.1 +pragma solidity ^0.8.0; + +interface IStateRootOracle { + struct BlockInfo { + bytes32 stateRoot; + uint32 timestamp; + } + function getBlockInfo(uint blockNumber) external view returns (BlockInfo memory); +} \ No newline at end of file diff --git a/src/hardhat/contracts/Fraxswap/periphery/FraxswapRouterMultihop.sol b/src/hardhat/contracts/Fraxswap/periphery/FraxswapRouterMultihop.sol index dec76c38..108e8bbd 100644 --- a/src/hardhat/contracts/Fraxswap/periphery/FraxswapRouterMultihop.sol +++ b/src/hardhat/contracts/Fraxswap/periphery/FraxswapRouterMultihop.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: BUSL-1.1 -pragma solidity 0.8.16; +pragma solidity >=0.8.0; pragma abicoder v2; // ==================================================================== diff --git a/src/hardhat/contracts/Fraxswap/periphery/interfaces/IFraxswapRouterMultihop.sol b/src/hardhat/contracts/Fraxswap/periphery/interfaces/IFraxswapRouterMultihop.sol new file mode 100644 index 00000000..a6c8135c --- /dev/null +++ b/src/hardhat/contracts/Fraxswap/periphery/interfaces/IFraxswapRouterMultihop.sol @@ -0,0 +1,28 @@ +// SPDX-License-Identifier: MIT +pragma solidity >=0.8.0; + + +interface IFraxswapRouterMultihop { + + struct FraxswapParams { + address tokenIn; + uint256 amountIn; + address tokenOut; + uint256 amountOutMinimum; + address recipient; + uint256 deadline; + bool approveMax; + uint8 v; + bytes32 r; + bytes32 s; + bytes route; + } + + function encodeRoute ( address tokenOut, uint256 percentOfHop, bytes[] memory steps, bytes[] memory nextHops ) external pure returns ( bytes memory out ); + function encodeStep ( uint8 swapType, uint8 directFundNextPool, uint8 directFundThisPool, address tokenOut, address pool, uint256 extraParam1, uint256 extraParam2, uint256 percentOfHop ) external pure returns ( bytes memory out ); + function owner ( ) external view returns ( address ); + function renounceOwnership ( ) external; + function swap ( FraxswapParams memory params ) external returns ( uint256 amountOut ); + function transferOwnership ( address newOwner ) external; + function uniswapV3SwapCallback ( int256 amount0Delta, int256 amount1Delta, bytes memory _data ) external; +} diff --git a/src/hardhat/contracts/Misc_AMOs/balancer/IBalancerChildLiquidityGauge.sol b/src/hardhat/contracts/Misc_AMOs/balancer/IBalancerChildLiquidityGauge.sol new file mode 100644 index 00000000..8c75be2f --- /dev/null +++ b/src/hardhat/contracts/Misc_AMOs/balancer/IBalancerChildLiquidityGauge.sol @@ -0,0 +1,62 @@ +// SPDX-License-Identifier: GPL-2.0-or-later +pragma solidity >=0.8.0; + + +interface IBalancerChildLiquidityGauge { + function deposit (uint256 _value) external; + function deposit (uint256 _value, address _user) external; + function withdraw (uint256 _value) external; + function withdraw (uint256 _value, address _user) external; + function transferFrom (address _from, address _to, uint256 _value) external returns (bool); + function approve (address _spender, uint256 _value) external returns (bool); + function permit (address _owner, address _spender, uint256 _value, uint256 _deadline, uint8 _v, bytes32 _r, bytes32 _s) external returns (bool); + function transfer (address _to, uint256 _value) external returns (bool); + function increaseAllowance (address _spender, uint256 _added_value) external returns (bool); + function decreaseAllowance (address _spender, uint256 _subtracted_value) external returns (bool); + function user_checkpoint (address addr) external returns (bool); + function claimable_tokens (address addr) external returns (uint256); + function claimed_reward (address _addr, address _token) external view returns (uint256); + function claimable_reward (address _user, address _reward_token) external view returns (uint256); + function set_rewards_receiver (address _receiver) external; + function claim_rewards () external; + function claim_rewards (address _addr) external; + function claim_rewards (address _addr, address _receiver) external; + function claim_rewards (address _addr, address _receiver, uint256[] memory _reward_indexes) external; + function add_reward (address _reward_token, address _distributor) external; + function set_reward_distributor (address _reward_token, address _distributor) external; + function deposit_reward_token (address _reward_token, uint256 _amount) external; + function killGauge () external; + function unkillGauge () external; + function decimals () external view returns (uint256); + function allowance (address owner, address spender) external view returns (uint256); + function integrate_checkpoint () external view returns (uint256); + function bal_token () external view returns (address); + function bal_pseudo_minter () external view returns (address); + function voting_escrow_delegation_proxy () external view returns (address); + function authorizer_adaptor () external view returns (address); + function initialize (address _lp_token, string memory _version) external; + function DOMAIN_SEPARATOR () external view returns (bytes32); + function nonces (address arg0) external view returns (uint256); + function name () external view returns (string memory); + function symbol () external view returns (string memory); + function balanceOf (address arg0) external view returns (uint256); + function totalSupply () external view returns (uint256); + function lp_token () external view returns (address); + function version () external view returns (string memory); + function factory () external view returns (address); + function working_balances (address arg0) external view returns (uint256); + function working_supply () external view returns (uint256); + function period () external view returns (uint256); + function period_timestamp (uint256 arg0) external view returns (uint256); + function integrate_checkpoint_of (address arg0) external view returns (uint256); + function integrate_fraction (address arg0) external view returns (uint256); + function integrate_inv_supply (uint256 arg0) external view returns (uint256); + function integrate_inv_supply_of (address arg0) external view returns (uint256); + function reward_count () external view returns (uint256); + function reward_tokens (uint256 arg0) external view returns (address); +// function reward_data (address arg0) external view returns (tuple); + function rewards_receiver (address arg0) external view returns (address); + function reward_integral_for (address arg0, address arg1) external view returns (uint256); + function is_killed () external view returns (bool); + function inflation_rate (uint256 arg0) external view returns (uint256); +} diff --git a/src/hardhat/contracts/Misc_AMOs/balancer/IL2BalancerPseudoMinter.sol b/src/hardhat/contracts/Misc_AMOs/balancer/IL2BalancerPseudoMinter.sol new file mode 100644 index 00000000..4e342dd5 --- /dev/null +++ b/src/hardhat/contracts/Misc_AMOs/balancer/IL2BalancerPseudoMinter.sol @@ -0,0 +1,26 @@ +// SPDX-License-Identifier: GPL-2.0-or-later +pragma solidity >=0.8.0; + +interface IL2BalancerPseudoMinter { + function addGaugeFactory (address factory) external; + function allowed_to_mint_for (address minter, address user) external view returns (bool); + function getActionId (bytes4 selector) external view returns (bytes32); + function getAuthorizer () external view returns (address); + function getBalancerToken () external view returns (address); + function getDomainSeparator () external view returns (bytes32); + function getMinterApproval (address minter, address user) external view returns (bool); + function getNextNonce (address account) external view returns (uint256); + function getVault () external view returns (address); + function isValidGaugeFactory (address factory) external view returns (bool); + function mint (address gauge) external returns (uint256); + function mintFor (address gauge, address user) external returns (uint256); + function mintMany (address[] memory gauges) external returns (uint256); + function mintManyFor (address[] memory gauges, address user) external returns (uint256); + function mint_for (address gauge, address user) external; + function mint_many (address[8] memory gauges) external; + function minted (address user, address gauge) external view returns (uint256); + function removeGaugeFactory (address factory) external; + function setMinterApproval (address minter, bool approval) external; + function setMinterApprovalWithSignature (address minter, bool approval, address user, uint256 deadline, uint8 v, bytes32 r, bytes32 s) external; + function toggle_approve_mint (address minter) external; +} diff --git a/src/hardhat/contracts/Misc_AMOs/bunni/IBunniLens.sol b/src/hardhat/contracts/Misc_AMOs/bunni/IBunniLens.sol new file mode 100644 index 00000000..fbdd8b95 --- /dev/null +++ b/src/hardhat/contracts/Misc_AMOs/bunni/IBunniLens.sol @@ -0,0 +1,16 @@ +// SPDX-License-Identifier: GPL-2.0-or-later +pragma solidity >=0.8.0; + +import "../../Uniswap_V3/IUniswapV3Pool.sol"; + +interface IBunniLens { + struct BunniKey { + IUniswapV3Pool pool; + int24 tickLower; + int24 tickUpper; + } + + function getReserves (BunniKey calldata key) external view returns (uint112 reserve0, uint112 reserve1); + function hub () external view returns (address); + function pricePerFullShare (BunniKey calldata key) external view returns (uint128 liquidity, uint256 amount0, uint256 amount1); +} diff --git a/src/hardhat/contracts/Misc_AMOs/bunni/IBunniMinter.sol b/src/hardhat/contracts/Misc_AMOs/bunni/IBunniMinter.sol new file mode 100644 index 00000000..562fcdb8 --- /dev/null +++ b/src/hardhat/contracts/Misc_AMOs/bunni/IBunniMinter.sol @@ -0,0 +1,19 @@ +// SPDX-License-Identifier: GPL-2.0-or-later +pragma solidity >=0.8.0; + +interface IBunniMinter { + function allowed_to_mint_for ( address minter, address user ) external view returns ( bool ); + function getGaugeController ( ) external view returns ( address ); + function getMinterApproval ( address minter, address user ) external view returns ( bool ); + function getToken ( ) external view returns ( address ); + function getTokenAdmin ( ) external view returns ( address ); + function mint ( address gauge ) external returns ( uint256 ); + function mintFor ( address gauge, address user ) external returns ( uint256 ); + function mintMany ( address[] memory gauges ) external returns ( uint256 ); + function mintManyFor ( address[] memory gauges, address user ) external returns ( uint256 ); + function mint_for ( address gauge, address user ) external; + function mint_many ( address[8] memory gauges ) external; + function minted ( address user, address gauge ) external view returns ( uint256 ); + function setMinterApproval ( address minter, bool approval ) external; + function toggle_approve_mint ( address minter ) external; +} diff --git a/src/hardhat/contracts/Misc_AMOs/bunni/IBunniTokenLP.sol b/src/hardhat/contracts/Misc_AMOs/bunni/IBunniTokenLP.sol new file mode 100644 index 00000000..9f84bcb9 --- /dev/null +++ b/src/hardhat/contracts/Misc_AMOs/bunni/IBunniTokenLP.sol @@ -0,0 +1,23 @@ +// SPDX-License-Identifier: GPL-2.0-or-later +pragma solidity >=0.8.0; + +interface IBunniTokenLP { + function DOMAIN_SEPARATOR () external view returns (bytes32); + function allowance (address, address) external view returns (uint256); + function approve (address spender, uint256 amount) external returns (bool); + function balanceOf (address) external view returns (uint256); + function burn (address from, uint256 amount) external; + function decimals () external view returns (uint8); + function hub () external view returns (address); + function mint (address to, uint256 amount) external; + function name () external view returns (string memory); + function nonces (address) external view returns (uint256); + function permit (address owner, address spender, uint256 value, uint256 deadline, uint8 v, bytes32 r, bytes32 s) external; + function pool () external view returns (address); + function symbol () external view returns (string memory); + function tickLower () external view returns (int24); + function tickUpper () external view returns (int24); + function totalSupply () external view returns (uint256); + function transfer (address to, uint256 amount) external returns (bool); + function transferFrom (address from, address to, uint256 amount) external returns (bool); +} diff --git a/src/hardhat/contracts/Misc_AMOs/testing/OwnerTesting.sol b/src/hardhat/contracts/Misc_AMOs/testing/OwnerTesting.sol index 13606227..2fa97ab6 100644 --- a/src/hardhat/contracts/Misc_AMOs/testing/OwnerTesting.sol +++ b/src/hardhat/contracts/Misc_AMOs/testing/OwnerTesting.sol @@ -12,4 +12,5 @@ contract OwnerTesting { function timelock_address() external view returns(address) {} function custodian() external view returns(address) {} function custodian_address() external view returns(address) {} + function rewardManagers(address tkn_addr) external view returns(address) {} } \ No newline at end of file diff --git a/src/hardhat/contracts/Staking/FraxCrossChainFarmV3_ERC20.sol b/src/hardhat/contracts/Staking/FraxCrossChainFarmV3_ERC20.sol index 33bed557..bb5bfac3 100755 --- a/src/hardhat/contracts/Staking/FraxCrossChainFarmV3_ERC20.sol +++ b/src/hardhat/contracts/Staking/FraxCrossChainFarmV3_ERC20.sol @@ -41,10 +41,11 @@ import "../ERC20/ERC20.sol"; import '../Uniswap/TransferHelper.sol'; import "../ERC20/SafeERC20.sol"; - -import '../Misc_AMOs/balancer/IStablePool.sol'; // Balancer frxETH-WETH -import '../Misc_AMOs/balancer/IBalancerVault.sol'; // Balancer frxETH-WETH -import "../Oracle/AggregatorV3Interface.sol"; // Balancer frxETH-WETH +import '../Misc_AMOs/balancer/IBalancerVault.sol'; // Balancer frxETH-bb-a-WETH Gauge +import '../Misc_AMOs/balancer/IBalancerChildLiquidityGauge.sol'; // Balancer frxETH-bb-a-WETH Gauge +import '../Misc_AMOs/balancer/IL2BalancerPseudoMinter.sol'; // Balancer frxETH-bb-a-WETH Gauge +import '../Misc_AMOs/balancer/IStablePool.sol'; // Balancer frxETH-bb-a-WETH Gauge +import "../Oracle/AggregatorV3Interface.sol"; // Balancer frxETH-bb-a-WETH Gauge // import '../Misc_AMOs/curve/I2pool.sol'; // Curve 2-token // import '../Misc_AMOs/curve/I3pool.sol'; // Curve 3-token @@ -74,8 +75,8 @@ contract FraxCrossChainFarmV3_ERC20 is Owned, ReentrancyGuard { CrossChainCanonicalFXS public rewardsToken0; // Assumed to be canFXS ERC20 public rewardsToken1; - IStablePool public stakingToken; // Balancer frxETH-WETH - AggregatorV3Interface internal priceFeedETHUSD = AggregatorV3Interface(0xF9680D99D6C9589e2a93a78A04A279e509205945); // For Balancer frxETH-WETH + IBalancerChildLiquidityGauge public stakingToken; // Balancer frxETH-bb-a-WETH Gauge + AggregatorV3Interface internal priceFeedETHUSD = AggregatorV3Interface(0xF9680D99D6C9589e2a93a78A04A279e509205945); // For Balancer frxETH-bb-a-WETH Gauge function setETHUSDOracle(address _eth_usd_oracle_address) public onlyByOwnGov { require(_eth_usd_oracle_address != address(0), "Zero address detected"); @@ -224,7 +225,7 @@ contract FraxCrossChainFarmV3_ERC20 is Owned, ReentrancyGuard { rewardsToken0 = CrossChainCanonicalFXS(_rewardsToken0); rewardsToken1 = ERC20(_rewardsToken1); - stakingToken = IStablePool(_stakingToken); // frxETH-WETH + stakingToken = IBalancerChildLiquidityGauge(_stakingToken); // Balancer frxETH-bb-a-WETH Gauge // stakingToken = I2pool(_stakingToken); // stakingToken = I3pool(_stakingToken); // stakingToken = IStableXPair(_stakingToken); @@ -301,7 +302,7 @@ contract FraxCrossChainFarmV3_ERC20 is Owned, ReentrancyGuard { // Get the amount of FRAX 'inside' of the lp tokens uint256 frax_per_lp_token; - // Balancer frxETH-WETH + // Balancer frxETH-bb-a-WETH Gauge // ============================================ { IBalancerVault vault = IBalancerVault(0xBA12222222228d8Ba445958a75a0704d566BF2C8); @@ -310,7 +311,8 @@ contract FraxCrossChainFarmV3_ERC20 is Owned, ReentrancyGuard { * withdrawn and held outside the Vault by the Pool's token Asset Manager. The Pool's total balance for `token` * equals the sum of `cash` and `managed`. */ - (uint256 cash, uint256 managed, , ) = vault.getPoolTokenInfo(0x5dee84ffa2dc27419ba7b3419d7146e53e4f7ded000200000000000000000a4e, 0xEe327F889d5947c1dc1934Bb208a1E792F953E96); + + (uint256 cash, uint256 managed, , ) = vault.getPoolTokenInfo(0xd00f9ca46ce0e4a63067c4657986f0167b0de1e5000000000000000000000b42, 0xEe327F889d5947c1dc1934Bb208a1E792F953E96); uint256 frxETH_usd_val_per_lp_e8 = ((cash + managed) * uint256(getLatestETHPriceE8())) / stakingToken.totalSupply(); frax_per_lp_token = frxETH_usd_val_per_lp_e8 * (1e10); // We use USD as "Frax" here. Scale up to E18 } @@ -815,8 +817,16 @@ contract FraxCrossChainFarmV3_ERC20 is Owned, ReentrancyGuard { // Quasi-notifyRewardAmount() logic function syncRewards() internal { // Bring in rewards, if applicable - if ((address(rewarder) != address(0)) && ((block.timestamp).sub(lastRewardPull) >= rewardsDuration)){ - rewarder.distributeReward(); + if ((block.timestamp).sub(lastRewardPull) >= rewardsDuration) { + if (address(rewarder) != address(0)) { + rewarder.distributeReward(); + } + + // Pull in reward1 tokens, if possible + if (address(rewardsToken1) != address(0)) { + IL2BalancerPseudoMinter(0x47B489bf5836f83ABD928C316F8e39bC0587B020).mint(address(stakingToken)); + } + lastRewardPull = block.timestamp; } diff --git a/src/hardhat/contracts/Staking/FraxFarmRageQuitter_StakeDAO_FraxPut.sol b/src/hardhat/contracts/Staking/FraxFarmRageQuitter_StakeDAO_FraxPut.sol new file mode 100644 index 00000000..b442a45a --- /dev/null +++ b/src/hardhat/contracts/Staking/FraxFarmRageQuitter_StakeDAO_FraxPut.sol @@ -0,0 +1,108 @@ +// SPDX-License-Identifier: GPL-2.0-or-later +pragma solidity >=0.8.0; + +// ==================================================================== +// | ______ _______ | +// | / _____________ __ __ / ____(_____ ____ _____ ________ | +// | / /_ / ___/ __ `| |/_/ / /_ / / __ \/ __ `/ __ \/ ___/ _ \ | +// | / __/ / / / /_/ _> < / __/ / / / / / /_/ / / / / /__/ __/ | +// | /_/ /_/ \__,_/_/|_| /_/ /_/_/ /_/\__,_/_/ /_/\___/\___/ | +// | | +// ==================================================================== +// =============== FraxFarmRageQuitter_StakeDAO_FraxPut =============== +// ==================================================================== +// Exits a Frax farm early, with a penalty. Deployed on a case-by-case basis + +// Frax Finance: https://github.com/FraxFinance + +// Primary Author(s) +// Dennis: https://github.com/denett + +// Reviewer(s) / Contributor(s) +// Travis Moore: https://github.com/FortisFortuna + +import "@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol"; +import "@openzeppelin/contracts/token/ERC20/IERC20.sol"; + +import "../Utils/ReentrancyGuard.sol"; + +contract FraxFarmRageQuitter_StakeDAO_FraxPut is ReentrancyGuard { + IFarm public farm = IFarm(0x0A53544b2194Dd8Ebc62c779043fc0624705BB56); + IERC20 lp_token = IERC20(0x839A989bE40f2D60f00beEB648903732c041CBd7); + address fraxTreasuryAddress = 0xB1748C79709f4Ba2Dd82834B8c82D4a505003f27; + uint256 treasuryPercentage = 1000; // 10%; + + // Rewards tokens + IERC20 fxsToken = IERC20(0x3432B6A60D23Ca0dFCa7761B7ab56459D9C964D0); + IERC20 sdtToken = IERC20(0x73968b9a57c6E53d41345FD57a6E6ae27d6CDB2F); + + // NOTE + // Make sure to enable this contract as a migrator first on the target farm + + /// @notice Exits stake for a specific kek_id + function ragequitOne(bytes32 _kek_id) nonReentrant external { + uint256 _liquidity; + + // Get all locked stake of the user + IFarm.LockedStake[] memory lockedStakes = farm.lockedStakesOf(msg.sender); + + // Find stake with the correct kek_id + for (uint256 i; i < lockedStakes.length; i++) { + if (lockedStakes[i].kek_id == _kek_id) { + _liquidity = lockedStakes[i].liquidity; + break; + } + } + require(_liquidity > 0, "Stake not found"); + + // Unlock the stake and transfer the LP tokens to this contract + farm.migrator_withdraw_locked(msg.sender, _kek_id); + + // Split the LP tokens between the Frax treasury and the user + uint256 liquidityToTreasury = (_liquidity * treasuryPercentage) / 10000; + SafeERC20.safeTransfer(lp_token, fraxTreasuryAddress, liquidityToTreasury); + SafeERC20.safeTransfer(lp_token, msg.sender, _liquidity - liquidityToTreasury); + + // All rewards collected during the migration are sent to the user. + SafeERC20.safeTransfer(fxsToken, msg.sender, fxsToken.balanceOf(address(this))); + SafeERC20.safeTransfer(sdtToken, msg.sender, sdtToken.balanceOf(address(this))); + } + + /// @notice Exits all stakes + function ragequitAll() nonReentrant external { + uint256 _totalLiquidity; + + // Get all locked stake of the user + IFarm.LockedStake[] memory lockedStakes = farm.lockedStakesOf(msg.sender); + + for (uint256 i; i < lockedStakes.length; i++) { + uint256 _liquidity = lockedStakes[i].liquidity; + if (_liquidity > 0) { + farm.migrator_withdraw_locked(msg.sender, lockedStakes[i].kek_id); // Unlock the stake and transfer the LP tokens to this contract + _totalLiquidity += _liquidity; + } + } + require(_totalLiquidity > 0, "Nothing to unlock"); + + // Split the LP tokens between the Frax treasury and the user + uint256 liquidityToTreasury = (_totalLiquidity * treasuryPercentage) / 10000; + SafeERC20.safeTransfer(lp_token, fraxTreasuryAddress, liquidityToTreasury); + SafeERC20.safeTransfer(lp_token, msg.sender, _totalLiquidity - liquidityToTreasury); + + // All reward tokens collected during the migration are send to the user. + SafeERC20.safeTransfer(fxsToken,msg.sender,fxsToken.balanceOf(address(this))); + SafeERC20.safeTransfer(sdtToken,msg.sender,sdtToken.balanceOf(address(this))); + } +} + +interface IFarm{ + struct LockedStake { + bytes32 kek_id; + uint256 start_timestamp; + uint256 liquidity; + uint256 ending_timestamp; + uint256 lock_multiplier; + } + function migrator_withdraw_locked(address, bytes32) external; + function lockedStakesOf(address) external view returns(LockedStake[] memory); +} \ No newline at end of file diff --git a/src/hardhat/contracts/Staking/FraxUnifiedFarmTemplate.sol b/src/hardhat/contracts/Staking/FraxUnifiedFarmTemplate.sol index 15e1c26c..4a70644e 100755 --- a/src/hardhat/contracts/Staking/FraxUnifiedFarmTemplate.sol +++ b/src/hardhat/contracts/Staking/FraxUnifiedFarmTemplate.sol @@ -44,10 +44,21 @@ import "../Utils/ReentrancyGuard.sol"; import "./Owned.sol"; // Extra rewards -import "../Misc_AMOs/convex/IConvexBaseRewardPool.sol"; +import "../Misc_AMOs/bunni/IBunniGauge.sol"; +import "../Misc_AMOs/bunni/IBunniLens.sol"; +import "../Misc_AMOs/bunni/IBunniMinter.sol"; +// import "../Misc_AMOs/convex/IConvexBaseRewardPool.sol"; contract FraxUnifiedFarmTemplate is Owned, ReentrancyGuard { + + // -------------------- VARIES -------------------- + + // // Bunni + // IBunniGauge public stakingToken; + // IBunniLens public lens = IBunniLens(0xb73F303472C4fD4FF3B9f59ce0F9b13E47fbfD19); + // IBunniMinter public minter = IBunniMinter(0xF087521Ffca0Fa8A43F5C445773aB37C5f574DA0); + /* ========== STATE VARIABLES ========== */ // Instances @@ -627,6 +638,24 @@ contract FraxUnifiedFarmTemplate is Owned, ReentrancyGuard { // lastUpdateTime = periodFinish; periodFinish = periodFinish + ((num_periods_elapsed + 1) * rewardsDuration); + // // Bunni oLIT rewards + // // ========================================== + // // Pull in rewards and set the reward rate for one week, based off of that + // // If the rewards get messed up for some reason, set this to 0 and it will skip + // // Should only be called once per week max + // if (rewardRatesManual[1] != 0) { + // // oLIT + // // ==================================== + // uint256 olit_before = IERC20(rewardTokens[1]).balanceOf(address(this)); + // minter.mint(address(stakingToken)); + // uint256 olit_after = IERC20(rewardTokens[1]).balanceOf(address(this)); + + // // Set the new reward rate + // rewardRatesManual[1] = (olit_after - olit_before) / rewardsDuration; + // } + + // CONVEX EXTRA REWARDS (OLD METHOD) + // ========================================== // Pull in rewards and set the reward rate for one week, based off of that // If the rewards get messed up for some reason, set this to 0 and it will skip // if (rewardRatesManual[1] != 0 && rewardRatesManual[2] != 0) { @@ -646,6 +675,8 @@ contract FraxUnifiedFarmTemplate is Owned, ReentrancyGuard { // rewardRatesManual[2] = (cvx_after - cvx_before) / rewardsDuration; // } + // Make sure everything is caught up again + _updateStoredRewardsAndTime(); } function _updateStoredRewardsAndTime() internal { diff --git a/src/hardhat/contracts/Staking/FraxUnifiedFarmTemplateClone.sol b/src/hardhat/contracts/Staking/FraxUnifiedFarmTemplateClone.sol new file mode 100755 index 00000000..6495f86b --- /dev/null +++ b/src/hardhat/contracts/Staking/FraxUnifiedFarmTemplateClone.sol @@ -0,0 +1,844 @@ +// SPDX-License-Identifier: GPL-2.0-or-later +pragma solidity >=0.8.0; + +// ==================================================================== +// | ______ _______ | +// | / _____________ __ __ / ____(_____ ____ _____ ________ | +// | / /_ / ___/ __ `| |/_/ / /_ / / __ \/ __ `/ __ \/ ___/ _ \ | +// | / __/ / / / /_/ _> < / __/ / / / / / /_/ / / / / /__/ __/ | +// | /_/ /_/ \__,_/_/|_| /_/ /_/_/ /_/\__,_/_/ /_/\___/\___/ | +// | | +// ==================================================================== +// ====================== FraxUnifiedFarmTemplateClone ===================== +// ==================================================================== +// Farming contract that accounts for veFXS +// Overrideable for UniV3, ERC20s, etc +// New for V2 +// - Multiple reward tokens possible +// - Can add to existing locked stakes +// - Contract is aware of proxied veFXS +// - veFXS multiplier formula changed +// Apes together strong + +// Frax Finance: https://github.com/FraxFinance + +// Primary Author(s) +// Travis Moore: https://github.com/FortisFortuna + +// Reviewer(s) / Contributor(s) +// Jason Huan: https://github.com/jasonhuan +// Sam Kazemian: https://github.com/samkazemian +// Dennis: github.com/denett + +// Originally inspired by Synthetix.io, but heavily modified by the Frax team +// (Locked, veFXS, and UniV3 portions are new) +// https://raw.githubusercontent.com/Synthetixio/synthetix/develop/contracts/StakingRewards.sol + +import "../Math/Math.sol"; +import "../Curve/IveFXS.sol"; +import "../Curve/IFraxGaugeController.sol"; +import "../Curve/IFraxGaugeFXSRewardsDistributor.sol"; +import "../ERC20/IERC20.sol"; +import '../Uniswap/TransferHelper.sol'; +import "../Utils/ReentrancyGuard.sol"; +import "./Owned.sol"; + +// Extra rewards +import "../Misc_AMOs/bunni/IBunniGauge.sol"; +import "../Misc_AMOs/bunni/IBunniLens.sol"; +import "../Misc_AMOs/bunni/IBunniMinter.sol"; +// import "../Misc_AMOs/convex/IConvexBaseRewardPool.sol"; + +contract FraxUnifiedFarmTemplateClone is Owned, ReentrancyGuard { + + + // -------------------- VARIES -------------------- + + // // Bunni + // IBunniGauge public stakingToken; + // IBunniLens public lens = IBunniLens(0xb73F303472C4fD4FF3B9f59ce0F9b13E47fbfD19); + // IBunniMinter public minter = IBunniMinter(0xF087521Ffca0Fa8A43F5C445773aB37C5f574DA0); + + /* ========== STATE VARIABLES ========== */ + + // Instances + IveFXS private constant veFXS = IveFXS(0xc8418aF6358FFddA74e09Ca9CC3Fe03Ca6aDC5b0); + + // Frax related + address internal constant frax_address = 0x853d955aCEf822Db058eb8505911ED77F175b99e; + /// @notice fraxPerLPToken is a public view function, although doesn't show the stored value + uint256 public fraxPerLPStored; + + // Constant for various precisions + uint256 internal constant MULTIPLIER_PRECISION = 1e18; + + // Time tracking + /// @notice Ending timestamp for the current period + uint256 public periodFinish; + /// @notice Timestamp of the last update - when this period started + uint256 public lastUpdateTime; + + // Lock time and multiplier settings + uint256 public lock_max_multiplier = uint256(2e18); // E18. 1x = e18 + uint256 public lock_time_for_max_multiplier = 1 * 1095 * 86400; // 3 years + // uint256 public lock_time_for_max_multiplier = 2 * 86400; // 2 days + uint256 public lock_time_min = 594000; // 6.875 * 86400 (~7 day) + + // veFXS related + uint256 public vefxs_boost_scale_factor = uint256(4e18); // E18. 4x = 4e18; 100 / scale_factor = % vefxs supply needed for max boost + uint256 public vefxs_max_multiplier = uint256(2e18); // E18. 1x = 1e18 + uint256 public vefxs_per_frax_for_max_boost = uint256(4e18); // E18. 2e18 means 2 veFXS must be held by the staker per 1 FRAX + mapping(address => uint256) internal _vefxsMultiplierStored; + mapping(address => bool) internal valid_vefxs_proxies; + mapping(address => mapping(address => bool)) internal proxy_allowed_stakers; + + // Reward addresses, gauge addresses, reward rates, and reward managers + /// @notice token addr -> manager addr + mapping(address => address) public rewardManagers; + address[] internal rewardTokens; + address[] internal gaugeControllers; + address[] internal rewardDistributors; + uint256[] internal rewardRatesManual; + mapping(address => bool) internal isRewardToken; + /// @notice token addr -> token index + mapping(address => uint256) public rewardTokenAddrToIdx; + + // Reward period + uint256 public constant rewardsDuration = 604800; // 7 * 86400 (7 days) + + // Reward tracking + uint256[] private rewardsPerTokenStored; + mapping(address => mapping(uint256 => uint256)) private userRewardsPerTokenPaid; // staker addr -> token id -> paid amount + mapping(address => mapping(uint256 => uint256)) private rewards; // staker addr -> token id -> reward amount + mapping(address => uint256) public lastRewardClaimTime; // staker addr -> timestamp + + // Gauge tracking + uint256[] private last_gauge_relative_weights; + uint256[] private last_gauge_time_totals; + + // Balance tracking + uint256 internal _total_liquidity_locked; + uint256 internal _total_combined_weight; + mapping(address => uint256) internal _locked_liquidity; + mapping(address => uint256) internal _combined_weights; + /// @notice Keeps track of LP balances proxy-wide. Needed to make sure the proxy boost is kept in line + mapping(address => uint256) public proxy_lp_balances; + + + /// @notice Stakers set which proxy(s) they want to use + /// @dev Keep public so users can see on the frontend if they have a proxy + mapping(address => address) public staker_designated_proxies; + + // Admin booleans for emergencies and overrides + bool public stakesUnlocked; // Release locked stakes in case of emergency + bool internal withdrawalsPaused; // For emergencies + bool internal rewardsCollectionPaused; // For emergencies + bool internal stakingPaused; // For emergencies + bool internal collectRewardsOnWithdrawalPaused; // For emergencies if a token is overemitted + + /* ========== STRUCTS ========== */ + // In children... + + + /* ========== MODIFIERS ========== */ + + modifier onlyByOwnGov() { + require(msg.sender == owner || msg.sender == 0x8412ebf45bAC1B340BbE8F318b928C466c4E39CA, "Not owner or timelock"); + _; + } + + modifier onlyTknMgrs(address reward_token_address) { + require(msg.sender == owner || isTokenManagerFor(msg.sender, reward_token_address), "Not owner or tkn mgr"); + _; + } + + modifier updateRewardAndBalanceMdf(address account, bool sync_too) { + _updateRewardAndBalance(account, sync_too, false); + _; + } + + /* ========== CONSTRUCTOR ========== */ + + constructor ( + address _owner, + address[] memory _rewardTokens, + address[] memory _rewardManagers, + uint256[] memory _rewardRatesManual, + address[] memory _gaugeControllers, + address[] memory _rewardDistributors + ) Owned(_owner) { + + // Address arrays + rewardTokens = _rewardTokens; + gaugeControllers = _gaugeControllers; + rewardDistributors = _rewardDistributors; + rewardRatesManual = _rewardRatesManual; + + for (uint256 i = 0; i < _rewardTokens.length; i++){ + // For fast token address -> token ID lookups later + rewardTokenAddrToIdx[_rewardTokens[i]] = i; + + // Add to the mapping + isRewardToken[_rewardTokens[i]] = true; + + // Initialize the stored rewards + rewardsPerTokenStored.push(0); + + // Initialize the reward managers + rewardManagers[_rewardTokens[i]] = _rewardManagers[i]; + + // Push in empty relative weights to initialize the array + last_gauge_relative_weights.push(0); + + // Push in empty time totals to initialize the array + last_gauge_time_totals.push(0); + } + + // Other booleans + stakesUnlocked = false; + + // Initialization + lastUpdateTime = block.timestamp; + + // Sync the first period finish here with the gauge's + // periodFinish = IFraxGaugeController(gaugeControllers[0]).time_total(); + periodFinish = IFraxGaugeController(0x3669C421b77340B2979d1A00a792CC2ee0FcE737).time_total(); + + } + + /* ============= VIEWS ============= */ + + // ------ REWARD RELATED ------ + + /// @notice Checks if the caller is a manager for the reward token + /// @param caller_addr The address of the caller + /// @param reward_token_addr The address of the reward token + /// @return bool True if the caller is a manager for the reward token + function isTokenManagerFor(address caller_addr, address reward_token_addr) public view returns (bool){ + if (!isRewardToken[reward_token_addr]) return false; + else if (caller_addr == address(0) || reward_token_addr == address(0)) return false; + else if (caller_addr == owner) return true; // Contract owner + else if (rewardManagers[reward_token_addr] == caller_addr) return true; // Reward manager + return false; + } + + /// @notice Gets all the reward tokens this contract handles + /// @return rewardTokens_ The reward tokens array + function getAllRewardTokens() external view returns (address[] memory) { + return rewardTokens; + } + + // Last time the reward was applicable + function lastTimeRewardApplicable() internal view returns (uint256) { + return Math.min(block.timestamp, periodFinish); + } + + /// @notice The amount of reward tokens being paid out per second this period + /// @param token_idx The index of the reward token + /// @return rwd_rate The reward rate + function rewardRates(uint256 token_idx) public view returns (uint256 rwd_rate) { + address gauge_controller_address = gaugeControllers[token_idx]; + if (gauge_controller_address != address(0)) { + rwd_rate = (IFraxGaugeController(gauge_controller_address).global_emission_rate() * last_gauge_relative_weights[token_idx]) / 1e18; + } + else { + rwd_rate = rewardRatesManual[token_idx]; + } + } + + // Amount of reward tokens per LP token / liquidity unit + function rewardsPerToken() public view returns (uint256[] memory newRewardsPerTokenStored) { + if (_total_liquidity_locked == 0 || _total_combined_weight == 0) { + return rewardsPerTokenStored; + } + else { + newRewardsPerTokenStored = new uint256[](rewardTokens.length); + for (uint256 i = 0; i < rewardsPerTokenStored.length; i++){ + newRewardsPerTokenStored[i] = rewardsPerTokenStored[i] + ( + ((lastTimeRewardApplicable() - lastUpdateTime) * rewardRates(i) * 1e18) / _total_combined_weight + ); + } + return newRewardsPerTokenStored; + } + } + + /// @notice The amount of reward tokens an account has earned / accrued + /// @dev In the edge-case of one of the account's stake expiring since the last claim, this will + /// @param account The account to check + /// @return new_earned Array of reward token amounts earned by the account + function earned(address account) public view returns (uint256[] memory new_earned) { + uint256[] memory reward_arr = rewardsPerToken(); + new_earned = new uint256[](rewardTokens.length); + + if (_combined_weights[account] > 0){ + for (uint256 i = 0; i < rewardTokens.length; i++){ + new_earned[i] = ((_combined_weights[account] * (reward_arr[i] - userRewardsPerTokenPaid[account][i])) / 1e18) + + rewards[account][i]; + } + } + } + + /// @notice The total reward tokens emitted in the given period + /// @return rewards_per_duration_arr Array of reward token amounts emitted in the current period + function getRewardForDuration() external view returns (uint256[] memory rewards_per_duration_arr) { + rewards_per_duration_arr = new uint256[](rewardRatesManual.length); + + for (uint256 i = 0; i < rewardRatesManual.length; i++){ + rewards_per_duration_arr[i] = rewardRates(i) * rewardsDuration; + } + } + + + // ------ LIQUIDITY AND WEIGHTS ------ + + /// @notice The farm's total locked liquidity / LP tokens + /// @return The total locked liquidity + function totalLiquidityLocked() external view returns (uint256) { + return _total_liquidity_locked; + } + + /// @notice A user's locked liquidity / LP tokens + /// @param account The address of the account + /// @return The locked liquidity + function lockedLiquidityOf(address account) external view returns (uint256) { + return _locked_liquidity[account]; + } + + /// @notice The farm's total combined weight of all users + /// @return The total combined weight + function totalCombinedWeight() external view returns (uint256) { + return _total_combined_weight; + } + + /// @notice Total 'balance' used for calculating the percent of the pool the account owns + /// @notice Takes into account the locked stake time multiplier and veFXS multiplier + /// @param account The address of the account + /// @return The combined weight + function combinedWeightOf(address account) external view returns (uint256) { + return _combined_weights[account]; + } + + /// @notice Calculates the combined weight for an account + /// @notice Must be overriden by the child contract + /// @dev account The address of the account + function calcCurCombinedWeight(address account) public virtual view + returns ( + uint256 old_combined_weight, + uint256 new_vefxs_multiplier, + uint256 new_combined_weight + ) + { + revert("Need cCCW logic"); + } + + // ------ LOCK RELATED ------ + + /// @notice Reads the lock boost multiplier for a given duration + /// @param secs The duration of the lock in seconds + /// @return The multiplier amount + function lockMultiplier(uint256 secs) public view returns (uint256) { + return Math.min( + lock_max_multiplier, + (secs * lock_max_multiplier) / lock_time_for_max_multiplier + ) ; + } + + // ------ FRAX RELATED ------ + + /// @notice The amount of FRAX denominated value being boosted that an address has staked + /// @param account The address to check + /// @return The amount of FRAX value boosted + function userStakedFrax(address account) public view returns (uint256) { + return (fraxPerLPStored * _locked_liquidity[account]) / MULTIPLIER_PRECISION; + } + + /// @notice The amount of FRAX denominated value being boosted that a proxy address has staked + /// @param proxy_address The address to check + /// @return The amount of FRAX value boosted + function proxyStakedFrax(address proxy_address) public view returns (uint256) { + return (fraxPerLPStored * proxy_lp_balances[proxy_address]) / MULTIPLIER_PRECISION; + } + + /// @notice The maximum LP that can get max veFXS boosted for a given address at its current veFXS balance + /// @param account The address to check + /// @return The maximum LP that can get max veFXS boosted for a given address at its current veFXS balance + function maxLPForMaxBoost(address account) external view returns (uint256) { + return (veFXS.balanceOf(account) * MULTIPLIER_PRECISION * MULTIPLIER_PRECISION) / (vefxs_per_frax_for_max_boost * fraxPerLPStored); + } + + /// @notice Must be overriden to return the current FRAX per LP token + /// @return The current number of FRAX per LP token + function fraxPerLPToken() public virtual view returns (uint256) { + revert("Need fPLPT logic"); + } + + // ------ veFXS RELATED ------ + + /// @notice The minimum veFXS required to get max boost for a given address + /// @param account The address to check + /// @return The minimum veFXS required to get max boost + function minVeFXSForMaxBoost(address account) public view returns (uint256) { + return (userStakedFrax(account) * vefxs_per_frax_for_max_boost) / MULTIPLIER_PRECISION; + } + + /// @notice The minimum veFXS required to get max boost for a given proxy + /// @param proxy_address The proxy address + /// @return The minimum veFXS required to get max boost + function minVeFXSForMaxBoostProxy(address proxy_address) public view returns (uint256) { + return (proxyStakedFrax(proxy_address) * vefxs_per_frax_for_max_boost) / MULTIPLIER_PRECISION; + } + + /// @notice Looks up a staker's proxy + /// @param addr The address to check + /// @return the_proxy The proxy address, or address(0) + function getProxyFor(address addr) public view returns (address){ + if (valid_vefxs_proxies[addr]) { + // If addr itself is a proxy, return that. + // If it farms itself directly, it should use the shared LP tally in proxyStakedFrax + return addr; + } + else { + // Otherwise, return the proxy, or address(0) + return staker_designated_proxies[addr]; + } + } + + /// @notice The multiplier for a given account, based on veFXS + /// @param account The account to check + /// @return vefxs_multiplier The multiplier boost for the account + function veFXSMultiplier(address account) public view returns (uint256 vefxs_multiplier) { + // Use either the user's or their proxy's veFXS balance + uint256 vefxs_bal_to_use = 0; + address the_proxy = getProxyFor(account); + vefxs_bal_to_use = (the_proxy == address(0)) ? veFXS.balanceOf(account) : veFXS.balanceOf(the_proxy); + + // First option based on fraction of total veFXS supply, with an added scale factor + uint256 mult_optn_1 = (vefxs_bal_to_use * vefxs_max_multiplier * vefxs_boost_scale_factor) + / (veFXS.totalSupply() * MULTIPLIER_PRECISION); + + // Second based on old method, where the amount of FRAX staked comes into play + uint256 mult_optn_2; + { + uint256 veFXS_needed_for_max_boost; + + // Need to use proxy-wide FRAX balance if applicable, to prevent exploiting + veFXS_needed_for_max_boost = (the_proxy == address(0)) ? minVeFXSForMaxBoost(account) : minVeFXSForMaxBoostProxy(the_proxy); + + if (veFXS_needed_for_max_boost > 0){ + uint256 user_vefxs_fraction = (vefxs_bal_to_use * MULTIPLIER_PRECISION) / veFXS_needed_for_max_boost; + + mult_optn_2 = (user_vefxs_fraction * vefxs_max_multiplier) / MULTIPLIER_PRECISION; + } + else mult_optn_2 = 0; // This will happen with the first stake, when user_staked_frax is 0 + } + + // Select the higher of the two + vefxs_multiplier = (mult_optn_1 > mult_optn_2 ? mult_optn_1 : mult_optn_2); + + // Cap the boost to the vefxs_max_multiplier + if (vefxs_multiplier > vefxs_max_multiplier) vefxs_multiplier = vefxs_max_multiplier; + } + + /* =============== MUTATIVE FUNCTIONS =============== */ + + /// @notice Toggle whether a staker can use the proxy's veFXS balance to boost yields + /// @notice Proxy must call this first, then the staker must call stakerSetVeFXSProxy + function proxyToggleStaker(address staker_address) external { + require(valid_vefxs_proxies[msg.sender], "Invalid proxy"); + proxy_allowed_stakers[msg.sender][staker_address] = !proxy_allowed_stakers[msg.sender][staker_address]; + + // Disable the staker's set proxy if it was the toggler and is currently on + if (staker_designated_proxies[staker_address] == msg.sender){ + staker_designated_proxies[staker_address] = address(0); + + // Remove the LP as well + proxy_lp_balances[msg.sender] -= _locked_liquidity[staker_address]; + } + } + + /// @notice After proxy toggles staker to true, staker must call and confirm this + /// @param proxy_address The address of the veFXS proxy + function stakerSetVeFXSProxy(address proxy_address) external { + require(valid_vefxs_proxies[proxy_address], "Invalid proxy"); + require(proxy_allowed_stakers[proxy_address][msg.sender], "Proxy has not allowed you yet"); + + // Corner case sanity check to make sure LP isn't double counted + address old_proxy_addr = staker_designated_proxies[msg.sender]; + if (old_proxy_addr != address(0)) { + // Remove the LP count from the old proxy + proxy_lp_balances[old_proxy_addr] -= _locked_liquidity[msg.sender]; + } + + // Set the new proxy + staker_designated_proxies[msg.sender] = proxy_address; + + // Add the the LP as well + proxy_lp_balances[proxy_address] += _locked_liquidity[msg.sender]; + } + + // ------ STAKING ------ + // In children... + + + // ------ WITHDRAWING ------ + // In children... + + + // ------ REWARDS SYNCING ------ + + function _updateRewardAndBalance(address account, bool sync_too) internal { + _updateRewardAndBalance(account, sync_too, false); + } + + function _updateRewardAndBalance(address account, bool sync_too, bool pre_sync_vemxstored) internal { + // Need to retro-adjust some things if the period hasn't been renewed, then start a new one + if (sync_too){ + sync(); + } + + // Used to make sure the veFXS multiplier is correct if a stake is increased, before calcCurCombinedWeight + if (pre_sync_vemxstored){ + _vefxsMultiplierStored[account] = veFXSMultiplier(account); + } + + if (account != address(0)) { + // To keep the math correct, the user's combined weight must be recomputed to account for their + // ever-changing veFXS balance. + ( + uint256 old_combined_weight, + uint256 new_vefxs_multiplier, + uint256 new_combined_weight + ) = calcCurCombinedWeight(account); + + // Calculate the earnings first + _syncEarned(account); + + // Update the user's stored veFXS multipliers + _vefxsMultiplierStored[account] = new_vefxs_multiplier; + + // Update the user's and the global combined weights + if (new_combined_weight >= old_combined_weight) { + uint256 weight_diff = new_combined_weight - old_combined_weight; + _total_combined_weight = _total_combined_weight + weight_diff; + _combined_weights[account] = old_combined_weight + weight_diff; + } else { + uint256 weight_diff = old_combined_weight - new_combined_weight; + _total_combined_weight = _total_combined_weight - weight_diff; + _combined_weights[account] = old_combined_weight - weight_diff; + } + + } + } + + function _syncEarned(address account) internal { + if (account != address(0)) { + // Calculate the earnings + uint256[] memory earned_arr = earned(account); + + // Update the rewards array + for (uint256 i = 0; i < earned_arr.length; i++){ + rewards[account][i] = earned_arr[i]; + } + + // Update the rewards paid array + for (uint256 i = 0; i < earned_arr.length; i++){ + userRewardsPerTokenPaid[account][i] = rewardsPerTokenStored[i]; + } + } + } + + + // ------ REWARDS CLAIMING ------ + + /// @notice A function that can be overridden to add extra logic to the getReward function + /// @param destination_address The address to send the rewards to + function getRewardExtraLogic(address destination_address) public nonReentrant { + require(rewardsCollectionPaused == false, "Rewards collection paused"); + return _getRewardExtraLogic(msg.sender, destination_address); + } + + function _getRewardExtraLogic(address rewardee, address destination_address) internal virtual { + revert("Need gREL logic"); + } + + // Two different getReward functions are needed because of delegateCall and msg.sender issues + // For backwards-compatibility + /// @notice Claims rewards to destination address + /// @param destination_address The address to send the rewards to + /// @return rewards_before The rewards available before the claim + function getReward(address destination_address) external nonReentrant returns (uint256[] memory) { + return _getReward(msg.sender, destination_address, true); + } + + /// @notice Claims rewards to destination address & wether to do extra logic + /// @param destination_address The address to send the rewards to + /// @param claim_extra_too Whether to do extra logic + /// @return rewards_before The rewards available before the claim + function getReward2(address destination_address, bool claim_extra_too) external nonReentrant returns (uint256[] memory) { + return _getReward(msg.sender, destination_address, claim_extra_too); + } + + // No withdrawer == msg.sender check needed since this is only internally callable + function _getReward(address rewardee, address destination_address, bool do_extra_logic) internal updateRewardAndBalanceMdf(rewardee, true) returns (uint256[] memory rewards_before) { + // Update the last reward claim time first, as an extra reentrancy safeguard + lastRewardClaimTime[rewardee] = block.timestamp; + + // Make sure rewards collection isn't paused + require(rewardsCollectionPaused == false, "Rewards collection paused"); + + // Update the rewards array and distribute rewards + rewards_before = new uint256[](rewardTokens.length); + + for (uint256 i = 0; i < rewardTokens.length; i++){ + rewards_before[i] = rewards[rewardee][i]; + rewards[rewardee][i] = 0; + if (rewards_before[i] > 0) { + TransferHelper.safeTransfer(rewardTokens[i], destination_address, rewards_before[i]); + + emit RewardPaid(rewardee, rewards_before[i], rewardTokens[i], destination_address); + } + } + + // Handle additional reward logic + if (do_extra_logic) { + _getRewardExtraLogic(rewardee, destination_address); + } + } + + + // ------ FARM SYNCING ------ + + // If the period expired, renew it + function retroCatchUp() internal { + // Catch up the old rewards first + _updateStoredRewardsAndTime(); + + // Pull in rewards from the rewards distributor, if applicable + for (uint256 i = 0; i < rewardDistributors.length; i++){ + address reward_distributor_address = rewardDistributors[i]; + if (reward_distributor_address != address(0)) { + IFraxGaugeFXSRewardsDistributor(reward_distributor_address).distributeReward(address(this)); + } + } + + // Ensure the provided reward amount is not more than the balance in the contract. + // This keeps the reward rate in the right range, preventing overflows due to + // very high values of rewardRate in the earned and rewardsPerToken functions; + // Reward + leftover must be less than 2^256 / 10^18 to avoid overflow. + uint256 num_periods_elapsed = uint256(block.timestamp - periodFinish) / rewardsDuration; // Floor division to the nearest period + + // Make sure there are enough tokens to renew the reward period + for (uint256 i = 0; i < rewardTokens.length; i++){ + require((rewardRates(i) * rewardsDuration * (num_periods_elapsed + 1)) <= IERC20(rewardTokens[i]).balanceOf(address(this)), string(abi.encodePacked("Not enough reward tokens available: ", rewardTokens[i])) ); + } + + // uint256 old_lastUpdateTime = lastUpdateTime; + // uint256 new_lastUpdateTime = block.timestamp; + + // lastUpdateTime = periodFinish; + periodFinish = periodFinish + ((num_periods_elapsed + 1) * rewardsDuration); + + + // CONVEX EXTRA REWARDS + // ========================================== + // Pull in rewards and set the reward rate for one week, based off of that + // If the rewards get messed up for some reason, set this to 0 and it will skip + // if (rewardRatesManual[1] != 0 && rewardRatesManual[2] != 0) { + // // CRV & CVX + // // ==================================== + // uint256 crv_before = ERC20(rewardTokens[1]).balanceOf(address(this)); + // uint256 cvx_before = ERC20(rewardTokens[2]).balanceOf(address(this)); + // IConvexBaseRewardPool(0x329cb014b562d5d42927cfF0dEdF4c13ab0442EF).getReward( + // address(this), + // true + // ); + // uint256 crv_after = ERC20(rewardTokens[1]).balanceOf(address(this)); + // uint256 cvx_after = ERC20(rewardTokens[2]).balanceOf(address(this)); + + // // Set the new reward rate + // rewardRatesManual[1] = (crv_after - crv_before) / rewardsDuration; + // rewardRatesManual[2] = (cvx_after - cvx_before) / rewardsDuration; + // } + + // Make sure everything is caught up again + _updateStoredRewardsAndTime(); + } + + function _updateStoredRewardsAndTime() internal { + // Get the rewards + uint256[] memory rewards_per_token = rewardsPerToken(); + + // Update the rewardsPerTokenStored + for (uint256 i = 0; i < rewardsPerTokenStored.length; i++){ + rewardsPerTokenStored[i] = rewards_per_token[i]; + } + + // Update the last stored time + lastUpdateTime = lastTimeRewardApplicable(); + } + + /// @notice Updates the gauge weights, if applicable + /// @param force_update If true, will update the weights even if the time hasn't elapsed + function sync_gauge_weights(bool force_update) public { + // Loop through the gauge controllers + for (uint256 i = 0; i < gaugeControllers.length; i++){ + address gauge_controller_address = gaugeControllers[i]; + if (gauge_controller_address != address(0)) { + if (force_update || (block.timestamp > last_gauge_time_totals[i])){ + // Update the gauge_relative_weight + last_gauge_relative_weights[i] = IFraxGaugeController(gauge_controller_address).gauge_relative_weight_write(address(this), block.timestamp); + last_gauge_time_totals[i] = IFraxGaugeController(gauge_controller_address).time_total(); + } + } + } + } + + /// @notice Updates gauge weights, fraxPerLP, pulls in new rewards or updates rewards + function sync() public { + // Sync the gauge weight, if applicable + sync_gauge_weights(false); + + // Update the fraxPerLPStored + fraxPerLPStored = fraxPerLPToken(); + + if (block.timestamp >= periodFinish) { + retroCatchUp(); + } + else { + _updateStoredRewardsAndTime(); + } + } + + /* ========== RESTRICTED FUNCTIONS - Curator callable ========== */ + + // ------ FARM SYNCING ------ + // In children... + + // ------ PAUSES ------ + + /// @notice Owner or governance can pause/unpause staking, withdrawals, rewards collection, and collectRewardsOnWithdrawal + /// @param _stakingPaused Whether staking is paused + /// @param _withdrawalsPaused Whether withdrawals are paused + /// @param _rewardsCollectionPaused Whether rewards collection is paused + /// @param _collectRewardsOnWithdrawalPaused Whether collectRewardsOnWithdrawal is paused + function setPauses( + bool _stakingPaused, + bool _withdrawalsPaused, + bool _rewardsCollectionPaused, + bool _collectRewardsOnWithdrawalPaused + ) external onlyByOwnGov { + stakingPaused = _stakingPaused; + withdrawalsPaused = _withdrawalsPaused; + rewardsCollectionPaused = _rewardsCollectionPaused; + collectRewardsOnWithdrawalPaused = _collectRewardsOnWithdrawalPaused; + } + + /* ========== RESTRICTED FUNCTIONS - Owner or timelock only ========== */ + + /// @notice Owner or governance can unlock stakes - irreversible! + function unlockStakes() external onlyByOwnGov { + stakesUnlocked = !stakesUnlocked; + } + + /// @notice Owner or governance sets whether an address is a valid veFXS proxy + /// @param _proxy_addr The address to set + function toggleValidVeFXSProxy(address _proxy_addr) external onlyByOwnGov { + valid_vefxs_proxies[_proxy_addr] = !valid_vefxs_proxies[_proxy_addr]; + } + + /// @notice Allows owner to recover any ERC20 or token manager to recover their reward token. + /// @param tokenAddress The address of the token to recover + /// @param tokenAmount The amount of the token to recover + function recoverERC20(address tokenAddress, uint256 tokenAmount) external onlyTknMgrs(tokenAddress) { + // Check if the desired token is a reward token + bool isRewTkn = isRewardToken[tokenAddress]; + + // Only the reward managers can take back their reward tokens + // Also, other tokens, like the staking token, airdrops, or accidental deposits, can be withdrawn by the owner + if ( + (isRewTkn && rewardManagers[tokenAddress] == msg.sender) + || (!isRewTkn && (msg.sender == owner)) + ) { + TransferHelper.safeTransfer(tokenAddress, msg.sender, tokenAmount); + return; + } + // If none of the above conditions are true + else { + revert("No valid tokens to recover"); + } + } + + /// @notice Sets multiple variables at once + /// @param _misc_vars The variables to set: + /// [0]: uint256 _lock_max_multiplier, + /// [1] uint256 _vefxs_max_multiplier, + /// [2] uint256 _vefxs_per_frax_for_max_boost, + /// [3] uint256 _vefxs_boost_scale_factor, + /// [4] uint256 _lock_time_for_max_multiplier, + /// [5] uint256 _lock_time_min + /// [6] uint256 _max_stake_limit (must be at greater or equal to old value) + function setMiscVariables( + uint256[6] memory _misc_vars + // [0]: uint256 _lock_max_multiplier, + // [1] uint256 _vefxs_max_multiplier, + // [2] uint256 _vefxs_per_frax_for_max_boost, + // [3] uint256 _vefxs_boost_scale_factor, + // [4] uint256 _lock_time_for_max_multiplier, + // [5] uint256 _lock_time_min + ) external onlyByOwnGov { + require(_misc_vars[0] >= MULTIPLIER_PRECISION, "Must be >= MUL PREC"); + require((_misc_vars[1] >= 0) && (_misc_vars[2] >= 0) && (_misc_vars[3] >= 0), "Must be >= 0"); + require((_misc_vars[4] >= 1) && (_misc_vars[5] >= 1), "Must be >= 1"); + + lock_max_multiplier = _misc_vars[0]; + vefxs_max_multiplier = _misc_vars[1]; + vefxs_per_frax_for_max_boost = _misc_vars[2]; + vefxs_boost_scale_factor = _misc_vars[3]; + lock_time_for_max_multiplier = _misc_vars[4]; + lock_time_min = _misc_vars[5]; + } + + // The owner or the reward token managers can set reward rates + /// @notice Allows owner or reward token managers to set the reward rate for a given reward token + /// @param reward_token_address The address of the reward token + /// @param _new_rate The new reward rate (token amount divided by reward period duration) + /// @param _gauge_controller_address The address of the gauge controller for this reward token + /// @param _rewards_distributor_address The address of the rewards distributor for this reward token + function setRewardVars(address reward_token_address, uint256 _new_rate, address _gauge_controller_address, address _rewards_distributor_address) external onlyTknMgrs(reward_token_address) { + rewardRatesManual[rewardTokenAddrToIdx[reward_token_address]] = _new_rate; + gaugeControllers[rewardTokenAddrToIdx[reward_token_address]] = _gauge_controller_address; + rewardDistributors[rewardTokenAddrToIdx[reward_token_address]] = _rewards_distributor_address; + } + + // The owner or the reward token managers can change managers + /// @notice Allows owner or reward token managers to change the reward manager for a given reward token + /// @param reward_token_address The address of the reward token + /// @param new_manager_address The new reward manager address + function changeTokenManager(address reward_token_address, address new_manager_address) external onlyTknMgrs(reward_token_address) { + rewardManagers[reward_token_address] = new_manager_address; + } + + /* ========== EVENTS ========== */ + event RewardPaid(address indexed user, uint256 amount, address token_address, address destination_address); + + /* ========== A CHICKEN ========== */ + // + // ,~. + // ,-'__ `-, + // {,-' `. } ,') + // ,( a ) `-.__ ,',')~, + // <=.) ( `-.__,==' ' ' '} + // ( ) /) + // `-'\ , ) + // | \ `~. / + // \ `._ \ / + // \ `._____,' ,' + // `-. ,' + // `-._ _,-' + // 77jj' + // //_|| + // __//--'/` + // ,--'/` ' + // + // [hjw] https://textart.io/art/vw6Sa3iwqIRGkZsN1BC2vweF/chicken +} \ No newline at end of file diff --git a/src/hardhat/contracts/Staking/FraxUnifiedFarm_ERC20.sol b/src/hardhat/contracts/Staking/FraxUnifiedFarm_ERC20.sol index a6e56848..4ca87ba3 100755 --- a/src/hardhat/contracts/Staking/FraxUnifiedFarm_ERC20.sol +++ b/src/hardhat/contracts/Staking/FraxUnifiedFarm_ERC20.sol @@ -18,6 +18,9 @@ import "./FraxUnifiedFarmTemplate.sol"; // -------------------- VARIES -------------------- +// Bunni +import "../Misc_AMOs/bunni/IBunniGauge.sol"; + // Convex wrappers import "../Curve/ICurvefrxETHETHPool.sol"; import "../Misc_AMOs/convex/IConvexStakingWrapperFrax.sol"; @@ -122,6 +125,9 @@ contract FraxUnifiedFarm_ERC20 is FraxUnifiedFarmTemplate { // -------------------- VARIES (USE CHILD FOR LOGIC) -------------------- + // Bunni + // USE CHILD + // Convex stkcvxFPIFRAX, stkcvxFRAXBP, etc // USE CHILD @@ -163,6 +169,10 @@ contract FraxUnifiedFarm_ERC20 is FraxUnifiedFarmTemplate { // Get the amount of FRAX 'inside' of the lp tokens uint256 frax_per_lp_token; + // Bunni + // ============================================ + // USE CHILD + // Convex stkcvxFPIFRAX and stkcvxFRAXBP only // ============================================ // USE CHILD diff --git a/src/hardhat/contracts/Staking/FraxUnifiedFarm_PosRebase.sol b/src/hardhat/contracts/Staking/FraxUnifiedFarm_PosRebase.sol index d488b145..ea51c6ee 100755 --- a/src/hardhat/contracts/Staking/FraxUnifiedFarm_PosRebase.sol +++ b/src/hardhat/contracts/Staking/FraxUnifiedFarm_PosRebase.sol @@ -14,7 +14,7 @@ pragma solidity >=0.8.0; // For positive rebase ERC20 Tokens like Aave's aToken and Compound's cToken // Uses FraxUnifiedFarmTemplate.sol -import "./FraxUnifiedFarmTemplate.sol"; +import "./FraxUnifiedFarmTemplateClone.sol"; // -------------------- VARIES -------------------- @@ -24,7 +24,7 @@ import '../Misc_AMOs/Lending_AMOs/aave/ILendingPool.sol'; // ------------------------------------------------ -contract FraxUnifiedFarm_PosRebase is FraxUnifiedFarmTemplate { +contract FraxUnifiedFarm_PosRebase is FraxUnifiedFarmTemplateClone { /* ========== STATE VARIABLES ========== */ @@ -68,7 +68,7 @@ contract FraxUnifiedFarm_PosRebase is FraxUnifiedFarmTemplate { address[] memory _rewardDistributors, address _stakingToken ) - FraxUnifiedFarmTemplate(_owner, _rewardTokens, _rewardManagers, _rewardRatesManual, _gaugeControllers, _rewardDistributors) + FraxUnifiedFarmTemplateClone(_owner, _rewardTokens, _rewardManagers, _rewardRatesManual, _gaugeControllers, _rewardDistributors) { frax_is_token0 = true; diff --git a/src/hardhat/contracts/Staking/Variants/FraxUnifiedFarm_ERC20_Convex_FRAXBP_Stable.sol b/src/hardhat/contracts/Staking/Variants/FraxUnifiedFarm_ERC20_Convex_FRAXBP_Stable.sol index 4f47920c..2f396d70 100755 --- a/src/hardhat/contracts/Staking/Variants/FraxUnifiedFarm_ERC20_Convex_FRAXBP_Stable.sol +++ b/src/hardhat/contracts/Staking/Variants/FraxUnifiedFarm_ERC20_Convex_FRAXBP_Stable.sol @@ -29,12 +29,9 @@ contract FraxUnifiedFarm_ERC20_Convex_FRAXBP_Stable is FraxUnifiedFarm_ERC20 { frax_is_token0 = false; // Irrelevant here, as token 0 will be FRAXBP } - function fraxPerLPToken() public view override returns (uint256) { + function fraxPerLPToken() public view override returns (uint256 frax_per_lp_token) { // COMMENTED OUT SO COMPILER DOESNT COMPLAIN. UNCOMMENT WHEN DEPLOYING - // Get the amount of FRAX 'inside' of the lp tokens - uint256 frax_per_lp_token; - // Convex Stable/FRAXBP // ============================================ { @@ -43,7 +40,5 @@ contract FraxUnifiedFarm_ERC20_Convex_FRAXBP_Stable is FraxUnifiedFarm_ERC20 { frax_per_lp_token = curvePool.get_virtual_price() / 4; } - - // return frax_per_lp_token; } } diff --git a/src/hardhat/contracts/Staking/Variants/FraxUnifiedFarm_ERC20_Convex_FRAXBP_Stable_Factory.sol b/src/hardhat/contracts/Staking/Variants/FraxUnifiedFarm_ERC20_Convex_FRAXBP_Stable_Factory.sol new file mode 100755 index 00000000..92d81d86 --- /dev/null +++ b/src/hardhat/contracts/Staking/Variants/FraxUnifiedFarm_ERC20_Convex_FRAXBP_Stable_Factory.sol @@ -0,0 +1,58 @@ +// SPDX-License-Identifier: GPL-2.0-or-later +pragma solidity >=0.8.0; + +import "./FraxUnifiedFarm_ERC20_Convex_FRAXBP_Stable.sol"; +import "./FraxUnifiedFarm_ERC20_Convex_FRAXBP_Volatile.sol"; +import "../Owned.sol"; + +contract FraxUnifiedFarm_ERC20_Convex_FRAXBP_Stable_Factory { + + constructor() {} + + /// @notice Creates a Stable FraxBP farm + /// @param _owner Eventual owner of the farm + /// @param _rewardTokens List of reward tokens. Usually FXS, CRV, then CVX + /// @param _rewardManagers Addresses that can manually set reward rates + /// @param _rewardRates Override reward rates. In tokens per second + /// @param _gaugeControllers Addresses of gauge controllers for each reward token + /// @param _rewardDistributors Addresses of reward distributors for each reward token + /// @param _stakingToken The stkcvxFRAXBP token that will be the LP + function createFXBPStableFarm( + address _owner, + address[] memory _rewardTokens, + address[] memory _rewardManagers, + uint256[] memory _rewardRates, + address[] memory _gaugeControllers, + address[] memory _rewardDistributors, + address _stakingToken + ) external returns (address farm_address) { + // Get a salt + bytes32 salt = keccak256(abi.encodePacked( + _owner, + _rewardTokens, + _rewardManagers, + _rewardRates, + _gaugeControllers, + _rewardDistributors, + _stakingToken + )); + + // Deploy the contract + farm_address = address(new FraxUnifiedFarm_ERC20_Convex_FRAXBP_Stable{salt: salt}( + _owner, + _rewardTokens, + _rewardManagers, + _rewardRates, + _gaugeControllers, + _rewardDistributors, + _stakingToken + )); + + emit FXBPStableFarmCreated(msg.sender, _owner, farm_address); + + } + + + /* ========== EVENTS ========== */ + event FXBPStableFarmCreated(address indexed deployer, address indexed farm_owner, address indexed farm_address); +} diff --git a/src/hardhat/contracts/Staking/Variants/FraxUnifiedFarm_ERC20_Convex_FRAXBP_Volatile.sol b/src/hardhat/contracts/Staking/Variants/FraxUnifiedFarm_ERC20_Convex_FRAXBP_Volatile.sol index 69c6462f..80651599 100755 --- a/src/hardhat/contracts/Staking/Variants/FraxUnifiedFarm_ERC20_Convex_FRAXBP_Volatile.sol +++ b/src/hardhat/contracts/Staking/Variants/FraxUnifiedFarm_ERC20_Convex_FRAXBP_Volatile.sol @@ -22,28 +22,24 @@ contract FraxUnifiedFarm_ERC20_Convex_FRAXBP_Volatile is FraxUnifiedFarm_ERC20 { { // COMMENTED OUT SO COMPILER DOESNT COMPLAIN. UNCOMMENT WHEN DEPLOYING - // // Convex stkcvxFPIFRAX and stkcvxFRAXBP. Also Volatile/FRAXBP - // stakingToken = IConvexStakingWrapperFrax(_stakingToken); - // curveToken = I2poolToken(stakingToken.curveToken()); - // curvePool = I2pool(curveToken.minter()); - // address token0 = curvePool.coins(0); - // frax_is_token0 = (token0 == frax_address); + // Convex stkcvxFPIFRAX and stkcvxFRAXBP. Also Volatile/FRAXBP + stakingToken = IConvexStakingWrapperFrax(_stakingToken); + curveToken = I2poolToken(stakingToken.curveToken()); + curvePool = I2pool(curveToken.minter()); + address token0 = curvePool.coins(0); + frax_is_token0 = (token0 == frax_address); } - function fraxPerLPToken() public view override returns (uint256) { + function fraxPerLPToken() public view override returns (uint256 frax_per_lp_token) { // COMMENTED OUT SO COMPILER DOESNT COMPLAIN. UNCOMMENT WHEN DEPLOYING - // // Get the amount of FRAX 'inside' of the lp tokens - // uint256 frax_per_lp_token; + // Convex Volatile/FRAXBP + // ============================================ + { + // Half of the LP is FRAXBP. Half of that should be FRAX. + // Using 0.25 * lp price for gas savings + frax_per_lp_token = (curvePool.lp_price() * (1e18)) / (4 * curvePool.price_oracle()); + } - // // Convex Volatile/FRAXBP - // // ============================================ - // { - // // Half of the LP is FRAXBP. Half of that should be FRAX. - // // Using 0.25 * lp price for gas savings - // frax_per_lp_token = (curvePool.lp_price() * (1e18)) / (4 * curvePool.price_oracle()); - // } - - // return frax_per_lp_token; } } diff --git a/src/hardhat/contracts/Staking/Variants/FraxUnifiedFarm_ERC20_Other.sol.off b/src/hardhat/contracts/Staking/Variants/FraxUnifiedFarm_ERC20_Other.sol.off new file mode 100755 index 00000000..b0e5657b --- /dev/null +++ b/src/hardhat/contracts/Staking/Variants/FraxUnifiedFarm_ERC20_Other.sol.off @@ -0,0 +1,69 @@ +// SPDX-License-Identifier: GPL-2.0-or-later +pragma solidity >=0.8.0; + +import "../FraxUnifiedFarm_ERC20.sol"; +import "../../Misc_AMOs/bunni/IBunniTokenLP.sol"; +import "../../Misc_AMOs/bunni/IBunniGauge.sol"; +import "../../Misc_AMOs/bunni/IBunniLens.sol"; +import "../../Misc_AMOs/bunni/IBunniMinter.sol"; +import "../../Oracle/AggregatorV3Interface.sol"; +import "../../Uniswap_V3/IUniswapV3Pool.sol"; + +contract FraxUnifiedFarm_ERC20_Other is FraxUnifiedFarm_ERC20 { + + // Bunni + IBunniTokenLP public lp_tkn; + IUniswapV3Pool public univ3_pool; + + constructor ( + address _owner, + address[] memory _rewardTokens, + address[] memory _rewardManagers, + uint256[] memory _rewardRates, + address[] memory _gaugeControllers, + address[] memory _rewardDistributors, + address _stakingToken + ) + FraxUnifiedFarm_ERC20(_owner , _rewardTokens, _rewardManagers, _rewardRates, _gaugeControllers, _rewardDistributors, _stakingToken) + { + // COMMENTED OUT SO COMPILER DOESNT COMPLAIN. UNCOMMENT WHEN DEPLOYING + + // Bunni + stakingToken = IBunniGauge(_stakingToken); + lp_tkn = IBunniTokenLP(stakingToken.lp_token()); + univ3_pool = IUniswapV3Pool(lp_tkn.pool()); + address token0 = univ3_pool.token0(); + frax_is_token0 = (token0 == frax_address); + } + + function setBunniAddrs(address _lens, address _minter) public onlyByOwnGov { + lens = IBunniLens(_lens); + minter = IBunniMinter(_minter); + } + + // In case the rewards get screwed up + function toggleBunni3rdPartyOLITClaimer(address _claimer) public onlyByOwnGov { + minter.toggle_approve_mint(_claimer); + } + + function fraxPerLPToken() public view override returns (uint256 frax_per_lp_token) { + // COMMENTED OUT SO COMPILER DOESNT COMPLAIN. UNCOMMENT WHEN DEPLOYING + + // Bunni FRAX/USDC Gauge + // ============================================ + { + // Get the BunniKey so you can query the lens + IBunniLens.BunniKey memory bkey = IBunniLens.BunniKey({ + pool: univ3_pool, + tickLower: lp_tkn.tickLower(), + tickUpper: lp_tkn.tickUpper() + }); + (, uint256 amt0, uint256 amt1) = lens.pricePerFullShare(bkey); + + // Calc FRAX per LP + if (frax_is_token0) frax_per_lp_token = amt0; + else frax_per_lp_token = amt1; + } + + } +} diff --git a/src/hardhat/contracts/Staking/Variants/FraxUnifiedFarm_ERC20_Other_Oracled.sol.off b/src/hardhat/contracts/Staking/Variants/FraxUnifiedFarm_ERC20_Other_Oracled.sol.off new file mode 100755 index 00000000..eb93d1e2 --- /dev/null +++ b/src/hardhat/contracts/Staking/Variants/FraxUnifiedFarm_ERC20_Other_Oracled.sol.off @@ -0,0 +1,90 @@ +// SPDX-License-Identifier: GPL-2.0-or-later +pragma solidity >=0.8.0; + +import "../FraxUnifiedFarm_ERC20.sol"; +import "../../Misc_AMOs/bunni/IBunniGauge.sol"; +import "../../Misc_AMOs/bunni/IBunniTokenLP.sol"; +import "../../Oracle/AggregatorV3Interface.sol"; +import "../../Uniswap_V3/IUniswapV3Pool.sol"; + +contract FraxUnifiedFarm_ERC20_Other_Oracled is FraxUnifiedFarm_ERC20 { + + // Bunni + IBunniTokenLP public lp_tkn; + IUniswapV3Pool public univ3_pool; + + // Oracles + AggregatorV3Interface internal priceFeedETHUSD = AggregatorV3Interface(0x5f4eC3Df9cbd43714FE2740f5E3616155c5b8419); + + constructor ( + address _owner, + address[] memory _rewardTokens, + address[] memory _rewardManagers, + uint256[] memory _rewardRates, + address[] memory _gaugeControllers, + address[] memory _rewardDistributors, + address _stakingToken + ) + FraxUnifiedFarm_ERC20(_owner , _rewardTokens, _rewardManagers, _rewardRates, _gaugeControllers, _rewardDistributors, _stakingToken) + { + // COMMENTED OUT SO COMPILER DOESNT COMPLAIN. UNCOMMENT WHEN DEPLOYING + + // Bunni + stakingToken = IBunniGauge(_stakingToken); + lp_tkn = IBunniTokenLP(stakingToken.lp_token()); + univ3_pool = IUniswapV3Pool(lp_tkn.pool()); + address token0 = univ3_pool.token0(); + frax_is_token0 = (token0 == 0x5E8422345238F34275888049021821E8E08CAa1f); // frxETH here + } + + function getLatestETHPriceE8() public view returns (int) { + // Returns in E8 + (uint80 roundID, int price, , uint256 updatedAt, uint80 answeredInRound) = priceFeedETHUSD.latestRoundData(); + require(price >= 0 && updatedAt!= 0 && answeredInRound >= roundID, "Invalid chainlink price"); + + return price; + } + + function setBunniAddrs(address _lens, address _minter) public onlyByOwnGov { + lens = IBunniLens(_lens); + minter = IBunniMinter(_minter); + } + + // In case the rewards get screwed up + function toggleBunni3rdPartyOLITClaimer(address _claimer) public onlyByOwnGov { + minter.toggle_approve_mint(_claimer); + } + + function setETHUSDOracleAddrs(address _eth_usd_oracle_address) public onlyByOwnGov { + require(_eth_usd_oracle_address != address(0), "Zero address detected"); + + priceFeedETHUSD = AggregatorV3Interface(_eth_usd_oracle_address); + } + + function fraxPerLPToken() public view override returns (uint256 frax_per_lp_token) { + // COMMENTED OUT SO COMPILER DOESNT COMPLAIN. UNCOMMENT WHEN DEPLOYING + + // Bunni frxETH/WETH Gauge + // ============================================ + { + // Get the BunniKey so you can query the lens + IBunniLens.BunniKey memory bkey = IBunniLens.BunniKey({ + pool: univ3_pool, + tickLower: lp_tkn.tickLower(), + tickUpper: lp_tkn.tickUpper() + }); + (, uint256 amt0, uint256 amt1) = lens.pricePerFullShare(bkey); + + // Assume frxETH = ETH for pricing purposes + // Get the USD value of the frxETH per LP token so it becomes "FRAX" + if (frax_is_token0) { + // frxETH as token0 actually + frax_per_lp_token = (amt0 * uint256(getLatestETHPriceE8())) / (1e8); + } + else { + frax_per_lp_token = (amt1 * uint256(getLatestETHPriceE8())) / (1e8); + } + } + + } +} diff --git a/src/hardhat/contracts/Utils/GasHelper.sol b/src/hardhat/contracts/Utils/GasHelper.sol new file mode 100644 index 00000000..3df62b61 --- /dev/null +++ b/src/hardhat/contracts/Utils/GasHelper.sol @@ -0,0 +1,24 @@ +// SPDX-License-Identifier: MIT +pragma solidity >=0.8.0; + +contract GasHelper { + string private checkpointLabel; + uint256 private checkpointGasLeft = 1; // Start the slot warm. + + function startMeasuringGas(string memory label) internal virtual { + checkpointLabel = label; + + checkpointGasLeft = gasleft(); + } + + function stopMeasuringGas() internal virtual returns (uint256 gasDelta) { + uint256 checkpointGasLeft2 = gasleft(); + + // Subtract 100 to account for the warm SLOAD in startMeasuringGas. + gasDelta = checkpointGasLeft - checkpointGasLeft2 - 100; + + emit GasUsed(string(abi.encodePacked(checkpointLabel, " Gas")), gasDelta); + } + + event GasUsed(string key, uint val); +} \ No newline at end of file diff --git a/src/hardhat/hardhat.config.js b/src/hardhat/hardhat.config.js index 143f5f94..5cd42ea8 100644 --- a/src/hardhat/hardhat.config.js +++ b/src/hardhat/hardhat.config.js @@ -43,7 +43,7 @@ module.exports = { // url: `${process.env.AVALANCHE_FORKING_NETWORK_ENDPOINT}`, // Avalanche // url: `${process.env.BOBA_NETWORK_ENDPOINT}`, // Boba // url: `${process.env.BSC_NETWORK_ENDPOINT}`, // BSC - // url: `${process.env.ETHEREUM_NETWORK_ENDPOINT}`, // Ethereum + url: `${process.env.ETHEREUM_NETWORK_ENDPOINT}`, // Ethereum // url: `${process.env.EVMOS_NETWORK_ENDPOINT}`, // Evmos // url: `${process.env.FANTOM_FORKING_NETWORK_ENDPOINT}`, // Fantom // url: `${process.env.FUSE_NETWORK_ENDPOINT}`, // Fuse @@ -52,13 +52,14 @@ module.exports = { // url: `${process.env.MOONRIVER_NETWORK_ENDPOINT}`, // Moonriver // url: `${process.env.OPTIMISM_NETWORK_ENDPOINT}`, // Optimism // url: `${process.env.POLYGON_NETWORK_ENDPOINT}`, // Polygon - url: `${process.env.ZKSYNC_NETWORK_ENDPOINT}`, // zkSync - zksync: true + // url: `${process.env.ZKSYNC_NETWORK_ENDPOINT}`, // zkSync + // zksync: true // TESTING (npx hardhat node --hostname 0.0.0.0) // Also see src/hardhat/justin-scripts/instructions.txt // url: `https://eth-mainnet.alchemyapi.io/v2/${process.env.ALCHEMY_KEY}`, // Ethereum (alternate) - // blockNumber: 14806990 // Ethereum (alternate) + + // blockNumber: 17203211 // Pin the block to allow caching }, accounts: { @@ -122,7 +123,7 @@ module.exports = { }, chainId: 1, gas: "auto", - gasPrice: 40000000000, // 40 Gwei + gasPrice: 50000000000, // 50 Gwei gasMultiplier: 1.2, }, evmos: { @@ -205,6 +206,16 @@ module.exports = { gasPrice: 150000000000, // 150 Gwei gasMultiplier: 1.2 }, + polygon_zkevm: { + url: `${process.env.POLYGON_ZKEVM_NETWORK_ENDPOINT}`, + accounts: { + mnemonic: process.env.POLYGON_ZKEVM_MNEMONIC_PHRASE + }, + chainId: 1101, + gas: "auto", + gasPrice: 10000000000, // 10 Gwei + gasMultiplier: 1.2 + }, polygon_mumbai: { url: `${process.env.POLYGON_MUMBAI_NETWORK_ENDPOINT}`, accounts: { @@ -385,7 +396,7 @@ module.exports = { ], }, zksolc: { - version: "1.3.7", + version: "1.3.9", compilerSource: "binary", settings: { // forceEvmla: true // optional. Falls back to EVM legacy assembly if there is a bug with Yul diff --git a/src/hardhat/old_contracts/Curve/CurveAMO_V3.sol b/src/hardhat/old_contracts/Curve/CurveAMO_V3.sol index 5cee56e6..5434cb17 100644 --- a/src/hardhat/old_contracts/Curve/CurveAMO_V3.sol +++ b/src/hardhat/old_contracts/Curve/CurveAMO_V3.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: GPL-2.0-or-later -pragma solidity 0.6.11; +pragma solidity >=0.6.11; pragma experimental ABIEncoderV2; // ==================================================================== diff --git a/src/hardhat/test/BAMM/BAMM-Fuzz.js b/src/hardhat/test/BAMM/BAMM-Fuzz.js new file mode 100644 index 00000000..1ac216b8 --- /dev/null +++ b/src/hardhat/test/BAMM/BAMM-Fuzz.js @@ -0,0 +1,366 @@ +const { BN, expectRevert, time } = require('@openzeppelin/test-helpers'); +const BigNumber = require("bignumber.js"); +const { expect } = require("chai"); +const { ethers } = require("hardhat"); +const chalk = require('chalk'); + +describe("BAMM! (Fuzzing)", function () { + var PRECISION = BigInt(1e18); + var BIG18 = new BigNumber("1e18"); + + it("setupContracts", async function () { + var contracts = await setupContracts(9970,1e18); + }); + + it("PnL Fuzz", async function () { + const [owner, user1, user2, user3, user4] = await ethers.getSigners(); + var MINT_AMOUNT = BigInt(10e18); + var COLLATERAL0_AMOUNT = BigInt(10e16); + var COLLATERAL1_AMOUNT = BigInt(10e16); + + // Generate a bunch of multipliers to be used in the fuzzing + var pow10 = [BigInt(1)]; + for (var i = 1; i < 100; i++) { + pow10[i] = pow10[i - 1] * BigInt(10); + } + + // Do the fuzzing + var SWAP_AMOUNT_BASE = (MINT_AMOUNT * BigInt(25)); + for (var i = 1; i < 91; i++) { + console.log(`--------- PnL Fuzz - [${i}] ---------`); + var RENT_AMOUNT = BigInt(1e17); + var SWAP_AMOUNT = (i < 50) ? ((MINT_AMOUNT * BigInt(50) / BigInt(i)) - MINT_AMOUNT) : (MINT_AMOUNT - MINT_AMOUNT * BigInt(50) / BigInt(i - 40)); + + // Setup the contracts and get the initial balances + // console.log("SWAP_AMOUNT, " + SWAP_AMOUNT); + var contracts = await setupContracts(9970, MINT_AMOUNT * BigInt(2)); + var startToken0 = BigInt(await contracts.token0.balanceOf(user1.address)); + var startToken1 = BigInt(await contracts.token1.balanceOf(user1.address)); + var startLPOwner = await contracts.pair.balanceOf(owner.address); + console.log("startToken0 (user1): ", startToken0); + console.log("startToken1 (user1): ", startToken1); + console.log("startLPOwner: ", startLPOwner); + + // Mint some BAMM with the LP + await contracts.pair.approve(contracts.bamm.address, MINT_AMOUNT); + var bamm_minted = await contracts.bamm.callStatic.mint(owner.address, MINT_AMOUNT); + await contracts.bamm.mint(owner.address, MINT_AMOUNT); + console.log("bamm_minted: ", bamm_minted); + + // User1 deposits some tokens, then rents + await contracts.token0.connect(user1).approve(contracts.bamm.address, COLLATERAL0_AMOUNT); + await contracts.token1.connect(user1).approve(contracts.bamm.address, COLLATERAL1_AMOUNT); + await contracts.bamm.connect(user1).executeActions(createAction({ + token0Amount: COLLATERAL0_AMOUNT, + token1Amount: COLLATERAL1_AMOUNT + })); + await contracts.bamm.connect(user1).executeActions(createAction({ + rent: RENT_AMOUNT + })); + + // Wait some time to accrue interest. + // wait(60 * 60 * 24 * 200); + + // Change the price + // Positive = token0 is swapped out, Negative = token1 is swapped out + if (SWAP_AMOUNT > BigInt(0)) { + // Swap token0 for token1 + var amount1Out = BigInt(await contracts.pair.getAmountOut(SWAP_AMOUNT, contracts.token0.address)); + await contracts.token0.connect(owner).transfer(contracts.pair.address, SWAP_AMOUNT); + contracts.pair.swap(0, amount1Out, owner.address, []); + + // Owner deposits tokens, so the close position for user1 can flash borrow them. + await contracts.token0.connect(owner).approve(contracts.bamm.address, SWAP_AMOUNT); + await contracts.bamm.connect(owner).executeActions(createAction({ + token0Amount: SWAP_AMOUNT + })); + + // Owner gives some tokens to user1, who then closes their position + startToken0 += SWAP_AMOUNT; + await contracts.token0.connect(owner).transfer(user1.address, SWAP_AMOUNT); + await contracts.token0.connect(user1).approve(contracts.bamm.address,SWAP_AMOUNT); + await contracts.bamm.connect(user1).executeActions(createAction({ + closePosition: true + })); + + // Owner gets flashtokens back + await contracts.bamm.connect(owner).executeActions(createAction({ + token0Amount: -SWAP_AMOUNT + })); + } else if (SWAP_AMOUNT < BigInt(0)) { + // Swap token1 for token0 + var amount0Out = BigInt(await contracts.pair.getAmountOut(-SWAP_AMOUNT, contracts.token1.address)); + await contracts.token1.connect(owner).transfer(contracts.pair.address, -SWAP_AMOUNT); + contracts.pair.swap(amount0Out, 0, owner.address, []); + + // Owner deposits tokens, so the close position for user1 can flash borrow them. + await contracts.token1.connect(owner).approve(contracts.bamm.address, -SWAP_AMOUNT); + await contracts.bamm.connect(owner).executeActions(createAction({ + token1Amount: -SWAP_AMOUNT + })); + + // Owner gives some tokens to user1, who then closes their position + startToken1 -= SWAP_AMOUNT; + await contracts.token1.connect(owner).transfer(user1.address, -SWAP_AMOUNT); + await contracts.token1.connect(user1).approve(contracts.bamm.address, -SWAP_AMOUNT); + await contracts.bamm.connect(user1).executeActions(createAction({ + closePosition: true + })); + + // Owner gets flashtokens back + await contracts.bamm.connect(owner).executeActions(createAction({ + token1Amount: SWAP_AMOUNT + })); + } else { + await contracts.bamm.connect(user1).executeActions(createAction({ + closePosition: true + })); + } + + // Owner redeems their BAMM for LP. Should have a profit too + await contracts.bamm.redeem(owner.address, bamm_minted); + var endLPOwner = await contracts.pair.balanceOf(owner.address); + var endToken0 = BigInt(await contracts.token0.balanceOf(user1.address)); + var endToken1 = BigInt(await contracts.token1.balanceOf(user1.address)); + console.log(`endLPOwner: ${endLPOwner} (change: ${endLPOwner - startLPOwner})`, ); + console.log(`endToken0 (user1): ${endToken0} (change: ${endToken0 - startToken0})`); + console.log(`endToken1 (user1): ${endToken1} (change: ${endToken1 - startToken1})`); + console.log("contracts.token0.balanceOf: ", await contracts.token0.balanceOf(contracts.pair.address)); + console.log("contracts.token1.balanceOf: ", await contracts.token1.balanceOf(contracts.pair.address)); + + if (endLPOwner <= startLPOwner) { + if (true) { + console.log(chalk.yellow.bold('TODO: WARNING: SHOULD HAVE EARNED AN LP PROFIT???')); + } + else { + throw "ERROR: SHOULD HAVE EARNED AN LP PROFIT"; + } + } + console.log(); + + } + }).timeout(100000000); + + it("Fuzz 1", async function () { + const [owner, user1, user2, user3, user4] = await ethers.getSigners(); + var MINT_AMOUNT = BigInt(1e18); + var COLLATERAL0_AMOUNT = BigInt(10e16); + var COLLATERAL1_AMOUNT = BigInt(10e16); + + var pow10 = [BigInt(1)]; + for (var i = 1; i < 100; i++) { + pow10[i] = pow10[i - 1] * BigInt(10); + } + for (var i = 0; i < 100; i++) { + // Randomize the rent and swap amounts + var RENT_AMOUNT = MINT_AMOUNT * BigInt(rnd(899)) / BigInt(1000); + var SWAP_AMOUNT = BigInt(rnd(9) + 1) * BigInt(pow10[rnd(33) + 1]); + //RENT_AMOUNT = BigInt("460000000000000000"); + //SWAP_AMOUNT = BigInt("9000000000000000000000000000000"); + + console.log(`--------- Fuzz #1 - [${i}] ---------`, ); + if ((SWAP_AMOUNT + (MINT_AMOUNT * BigInt(2))) < BigInt(2.1923E33)) { + console.log("RENT_AMOUNT, " + RENT_AMOUNT + ", SWAP_AMOUNT, " + SWAP_AMOUNT); + + // Setup the contracts and get the initial balances + var contracts = await setupContracts(9970, MINT_AMOUNT * BigInt(2)); + var startToken0 = BigInt(await contracts.token0.balanceOf(user1.address)); + var startToken1 = BigInt(await contracts.token1.balanceOf(user1.address)); + var startLPOwner = await contracts.pair.balanceOf(owner.address); + console.log("startToken0 (user1): ", startToken0); + console.log("startToken1 (user1): ", startToken1); + console.log("startLPOwner: ", startLPOwner); + + // Mint some BAMM with the LP + await contracts.pair.approve(contracts.bamm.address, MINT_AMOUNT); + var bamm_minted = await contracts.bamm.callStatic.mint(owner.address, MINT_AMOUNT); + await contracts.bamm.mint(owner.address, MINT_AMOUNT); + console.log("bamm_minted: ", bamm_minted); + + // User1 deposits some tokens, then rents + await contracts.token0.connect(user1).approve(contracts.bamm.address, COLLATERAL0_AMOUNT); + await contracts.token1.connect(user1).approve(contracts.bamm.address, COLLATERAL1_AMOUNT); + await contracts.bamm.connect(user1).executeActions(createAction({ + token0Amount: COLLATERAL0_AMOUNT, + token1Amount: COLLATERAL1_AMOUNT + })); + await contracts.bamm.connect(user1).executeActions(createAction({ + rent: RENT_AMOUNT + })); + + //wait(6*60*60*24); + + // Change the price + var amount1Out = BigInt(await contracts.pair.getAmountOut(SWAP_AMOUNT, contracts.token0.address)); + await contracts.token0.connect(owner).transfer(contracts.pair.address,SWAP_AMOUNT); + contracts.pair.swap(0, amount1Out, owner.address, []); + + // Owner deposits tokens, so the close position for user1 can flash borrow them. + await contracts.token0.connect(owner).approve(contracts.bamm.address, SWAP_AMOUNT); + await contracts.bamm.connect(owner).executeActions(createAction({ + token0Amount: SWAP_AMOUNT + })); + + // Owner gives some tokens to user1, who then closes their position + await contracts.token0.connect(owner).transfer(user1.address, SWAP_AMOUNT); + await contracts.token0.connect(user1).approve(contracts.bamm.address,SWAP_AMOUNT); + await contracts.bamm.connect(user1).executeActions(createAction({ + closePosition: true + })); + + // Owner gets flashtokens back + await contracts.bamm.connect(owner).executeActions(createAction({ + token0Amount: -SWAP_AMOUNT + })); + + + // Owner redeems their BAMM for LP. Should have a profit too + await contracts.bamm.redeem(owner.address, bamm_minted); + var endLPOwner = await contracts.pair.balanceOf(owner.address); + var endToken0 = BigInt(await contracts.token0.balanceOf(user1.address)); + var endToken1 = BigInt(await contracts.token1.balanceOf(user1.address)); + console.log(`endLPOwner: ${endLPOwner} (change: ${endLPOwner - startLPOwner})`, ); + console.log(`endToken0 (user1): ${endToken0} (change: ${endToken0 - startToken0})`); + console.log(`endToken1 (user1): ${endToken1} (change: ${endToken1 - startToken1})`); + console.log("contracts.token0.balanceOf: ", await contracts.token0.balanceOf(contracts.pair.address)); + console.log("contracts.token1.balanceOf: ", await contracts.token1.balanceOf(contracts.pair.address)); + + if (endLPOwner <= startLPOwner) { + if (true) { + console.log(chalk.yellow.bold('TODO: WARNING: SHOULD HAVE EARNED AN LP PROFIT???')); + } + else { + throw "ERROR: SHOULD HAVE EARNED AN LP PROFIT"; + } + } + } + console.log(); + } + }).timeout(100000000); + +}); + +function createSwapParams(values) { + var nullBytes = "0x0000000000000000000000000000000000000000000000000000000000000000"; + var swapParams = { + tokenIn: "0x0000000000000000000000000000000000000000", + amountIn: 0, + tokenOut: "0x0000000000000000000000000000000000000000", + amountOutMinimum: 0, + recipient: "0x0000000000000000000000000000000000000000", + deadline: 4102441200, + approveMax: false, + v: 0, + r: "0x0000000000000000000000000000000000000000000000000000000000000000", + s: "0x0000000000000000000000000000000000000000000000000000000000000000", + route: "0x0000000000000000000000000000000000000000000000000000000000000000" + }; + return Object.assign(swapParams, values); +} + +function createAction(values) { + var nullBytes = "0x0000000000000000000000000000000000000000000000000000000000000000"; + var result = { + token0Amount: 0, + token1Amount: 0, + rent: 0, + to: "0x0000000000000000000000000000000000000000", + minToken0Amount: 0, + minToken1Amount: 0, + closePosition: false, + approveMax: false, + v: 0, + r: nullBytes, + s: nullBytes, + deadline: 0 + }; + return Object.assign(result, values); +} + +function rnd(noValues) { + return Math.floor(Math.random() * noValues); +} + +async function waitTill(time) { + var currentblock = await ethers.provider.getBlock(await ethers.provider.getBlockNumber()); + var waitPeriod = time-currentblock.timestamp; + if (waitPeriod > 0) { + ethers.provider.send("evm_increaseTime", [waitPeriod]); // wait waitPeriod + ethers.provider.send("evm_mine"); // mine the next block + } +} +async function wait(waitPeriod) { + if (waitPeriod > 0) { + ethers.provider.send("evm_increaseTime", [waitPeriod]); // wait waitPeriod + ethers.provider.send("evm_mine"); // mine the next block + } +} + +async function setupContracts(fee,mintAmount) { + const [owner, user1, user2, user3, user4] = await ethers.getSigners(); + if (!fee) fee = 9970; + + // Deploy token0/token1 token and distribute + const DummyToken = await ethers.getContractFactory("DummyToken"); + var token0 = await DummyToken.deploy(); + await token0.mint(owner.address,ethers.constants.MaxUint256); + var token1 = await DummyToken.deploy(); + await token1.mint(owner.address,ethers.constants.MaxUint256); + + const weth9 = await (await ethers.getContractFactory("WETH9")).deploy(); + if (token1.address.toUpperCase() < token0.address.toUpperCase()) { + var temp = token1; + token1 = token0; + token0 = temp; + } + + await token0.transfer(user1.address, "1000000000000000000000"); + await token1.transfer(user1.address, "1000000000000000000000"); + await token0.transfer(user2.address, "1000000000000000000000"); + await token1.transfer(user2.address, "1000000000000000000000"); + await token0.transfer(user3.address, "1000000000000000000000"); + await token1.transfer(user3.address, "1000000000000000000000"); + await token0.transfer(user4.address, "1000000000000000000000"); + await token1.transfer(user4.address, "1000000000000000000000"); + + + const FraxswapFactory = await ethers.getContractFactory("FraxswapFactory"); + const factory = await FraxswapFactory.deploy(owner.address); + await factory.deployed(); + + await factory["createPair(address,address,uint256)"](token0.address, token1.address, BigInt(10000) - BigInt(fee)); + const pairAddress = await factory.getPair(token0.address, token1.address); + const FraxswapPair = await ethers.getContractFactory("FraxswapPair"); + var pair = FraxswapPair.attach(pairAddress); + await token0.transfer(pair.address, BigInt(mintAmount)); + await token1.transfer(pair.address, BigInt(mintAmount)); + await pair.mint(owner.address); + + // Deploy Dummy router + const FraxswapDummyRouter = await ethers.getContractFactory("FraxswapDummyRouter"); + var router = await FraxswapDummyRouter.deploy(); + await token0.transfer(router.address, "1000000000000000000000"); + await token1.transfer(router.address, "1000000000000000000000"); + + // Deploy BAMMHelper + const BAMMHelper = await ethers.getContractFactory("BAMMHelper"); + var bammHelper = await BAMMHelper.deploy(); + + // Deploy FraxswapOracle + const FraxswapOracle = await ethers.getContractFactory("FraxswapOracle"); + var fraxswapOracle = await FraxswapOracle.deploy(); + + // Deploy pool + const BAMM = await ethers.getContractFactory("BAMM"); + var bamm = await BAMM.deploy(pair.address, true, fee, router.address, bammHelper.address, fraxswapOracle.address); + + // Pack contracts in an object + var result = {}; + result.token0 = token0; + result.token1 = token1; + result.pair = pair; + result.bamm = bamm; + result.weth = weth9; + result.router=router; + return result; +} diff --git a/src/hardhat/test/BAMM/BAMM.js b/src/hardhat/test/BAMM/BAMM.js new file mode 100644 index 00000000..b3bddd53 --- /dev/null +++ b/src/hardhat/test/BAMM/BAMM.js @@ -0,0 +1,725 @@ +const { expect } = require("chai"); +const { ethers } = require("hardhat"); + +describe("BAMM! (Normal)", function () { + var PRECISION = BigInt(1e18); + + it("Setup contracts", async function () { + var contracts = await setupContracts(9970, 1e18); + }); + + it("Mint", async function () { + const [owner, user1, user2, user3, user4] = await ethers.getSigners(); + var contracts = await setupContracts(9970, 100e18); + var beforeBalance = BigInt(await contracts.pair.balanceOf(owner.address)); + + // Mint once + await contracts.pair.approve(contracts.bamm.address, BigInt(100e18)); + await contracts.bamm.mint(owner.address, BigInt(1e18)); + expect(await contracts.bamm.balanceOf(owner.address)).to.equals(BigInt(1e18)); + expect(await contracts.pair.balanceOf(owner.address)).to.equals(beforeBalance - BigInt(1e18)); + + // Mint again + await contracts.pair.approve(contracts.bamm.address, BigInt(100e18)); + await contracts.bamm.mint(owner.address, BigInt(1e18)); + expect(await contracts.bamm.balanceOf(owner.address)).to.equals(BigInt(2e18)); + expect(await contracts.pair.balanceOf(owner.address)).to.equals(beforeBalance - BigInt(2e18)); + }); + + it("Redeem", async function () { + const [owner, user1, user2, user3, user4] = await ethers.getSigners(); + var contracts = await setupContracts(9970, 100e18); + var beforeBalance = BigInt(await contracts.pair.balanceOf(owner.address)); + + // Mint once, then redeem half + await contracts.pair.approve(contracts.bamm.address, BigInt(100e18)); + await contracts.bamm.mint(owner.address, BigInt(2e18)); + await contracts.bamm.redeem(owner.address, BigInt(1e18)); + expect(await contracts.bamm.balanceOf(owner.address)).to.equals(BigInt(1e18)); + expect(await contracts.pair.balanceOf(owner.address)).to.equals(beforeBalance - BigInt(1e18)); + expect(await contracts.pair.balanceOf(contracts.bamm.address)).to.equals(BigInt(1e18)); + + // Redeem the other half + await contracts.bamm.redeem(owner.address, BigInt(1e18)); + expect(await contracts.bamm.balanceOf(owner.address)).to.equals(0); + expect(await contracts.pair.balanceOf(owner.address)).to.equals(beforeBalance); + expect(await contracts.pair.balanceOf(contracts.bamm.address)).to.equals(0); + }); + + it("Redeem failure checks", async function () { + const [owner, user1, user2, user3, user4] = await ethers.getSigners(); + var contracts = await setupContracts(9970, 100e18); + var beforeBalance = BigInt(await contracts.pair.balanceOf(owner.address)); + + // Mint with the owner, then have a second user with nothing try to redeem (fails) + await contracts.pair.approve(contracts.bamm.address, BigInt(100e18)); + await contracts.bamm.mint(owner.address, BigInt(1e18)); + await expect(contracts.bamm.connect(user1).redeem(owner.address, BigInt(1e18))).to.be.revertedWith("ERC20: burn amount exceeds balance"); + + // Give the second user 1 LP, they mint BAMM with it successfully, then try to redeem twice the amount (fails) + await contracts.pair.transfer(user1.address, BigInt(1e18)); + await contracts.pair.connect(user1).approve(contracts.bamm.address, BigInt(100e18)); + await contracts.bamm.connect(user1).mint(user1.address, BigInt(1e18)); + await expect(contracts.bamm.connect(user1).redeem(user1.address, BigInt(2e18))).to.be.revertedWith("ERC20: burn amount exceeds balance"); + + // Check that the BAMM has the correct amount of LP, then have both users redeem. + // Afterwards, the BAMM should have no LP + expect(await contracts.pair.balanceOf(contracts.bamm.address)).to.equals(BigInt(2e18)); + await contracts.bamm.connect(user1).redeem(user1.address, BigInt(1e18)); + await contracts.bamm.connect(owner).redeem(owner.address, BigInt(1e18)); + expect(await contracts.pair.balanceOf(contracts.bamm.address)).to.equals(0); + }); + + it("Deposit", async function () { + const [owner, user1, user2, user3, user4] = await ethers.getSigners(); + var contracts = await setupContracts(9970, 100e18); + + // User deposts 1 token0 to the BAMM + await contracts.token0.connect(user1).approve(contracts.bamm.address, BigInt(100e18)); + expect(await contracts.token0.balanceOf(contracts.bamm.address)).to.equals(BigInt(0)); + await contracts.bamm.connect(user1).executeActions( + createAction({ + token0Amount: BigInt(1e18) + }) + ); + expect(await contracts.token0.balanceOf(contracts.bamm.address)).to.equals(BigInt(1e18)); + + // Make sure the user's vault was correctly updated for token0 + var vault = await contracts.bamm.userVaults(user1.address); + expect(vault.token0).to.equals(BigInt(1e18)); + expect(vault.token1).to.equals(BigInt(0)); + expect(vault.rented).to.equals(BigInt(0)); + + // User deposts 1 token1 to the BAMM + await contracts.token1.connect(user1).approve(contracts.bamm.address, BigInt(100e18)); + expect(await contracts.token1.balanceOf(contracts.bamm.address)).to.equals(BigInt(0)); + await contracts.bamm.connect(user1).executeActions( + createAction({ + token1Amount: BigInt(1e18) + }) + ); + expect(await contracts.token1.balanceOf(contracts.bamm.address)).to.equals(BigInt(1e18)); + + // Make sure the user's vault was correctly updated for token1 + vault = await contracts.bamm.userVaults(user1.address); + expect(vault.token0).to.equals(BigInt(1e18)); + expect(vault.token1).to.equals(BigInt(1e18)); + expect(vault.rented).to.equals(BigInt(0)); + }); + + it("Withdraw", async function () { + const [owner, user1, user2, user3, user4] = await ethers.getSigners(); + var contracts = await setupContracts(9970, 100e18); + var beforeBalance0 = BigInt(await contracts.token0.balanceOf(user1.address)); + var beforeBalance1 = BigInt(await contracts.token1.balanceOf(user1.address)); + + // User deposits 1 token0 and 1 token1 to their vault + await contracts.token0.connect(user1).approve(contracts.bamm.address, BigInt(100e18)); + await contracts.bamm.connect(user1).executeActions( + createAction({ + token0Amount: BigInt(1e18) + }) + ); + await contracts.token1.connect(user1).approve(contracts.bamm.address, BigInt(100e18)); + await contracts.bamm.connect(user1).executeActions( + createAction({ + token1Amount: BigInt(1e18) + }) + ); + + // Make sure the user's vault was correctly updated for the two tokens + var vault = await contracts.bamm.userVaults(user1.address); + expect(vault.token0).to.equals(BigInt(1e18)); + expect(vault.token1).to.equals(BigInt(1e18)); + expect(vault.rented).to.equals(BigInt(0)); + + // User withdraws token0 from their vault + await contracts.bamm.connect(user1).executeActions( + createAction({ + token0Amount: BigInt(-1e18) + }) + ); + expect(await contracts.token0.balanceOf(contracts.bamm.address)).to.equals(BigInt(0)); + expect(await contracts.token0.balanceOf(user1.address)).to.equals(beforeBalance0); + vault = await contracts.bamm.userVaults(user1.address); + expect(vault.token0).to.equals(BigInt(0)); + expect(vault.token1).to.equals(BigInt(1e18)); + expect(vault.rented).to.equals(BigInt(0)); + + // User withdraws token1 from their vault + await contracts.bamm.connect(user1).executeActions( + createAction({ + token1Amount: BigInt(-1e18) + }) + ); + expect(await contracts.token1.balanceOf(contracts.bamm.address)).to.equals(BigInt(0)); + expect(await contracts.token1.balanceOf(user1.address)).to.equals(beforeBalance1); + vault = await contracts.bamm.userVaults(user1.address); + expect(vault.token0).to.equals(BigInt(0)); + expect(vault.token1).to.equals(BigInt(0)); + expect(vault.rented).to.equals(BigInt(0)); + }); + + it("Withdraw failure checks", async function () { + const [owner, user1, user2, user3, user4] = await ethers.getSigners(); + var contracts = await setupContracts(9970, 100e18); + var beforeBalance0 = BigInt(await contracts.token0.balanceOf(user1.address)); + var beforeBalance1 = BigInt(await contracts.token1.balanceOf(user1.address)); + + // User deposits 1 token0 and 1 token1 to their vault + await contracts.token0.connect(user1).approve(contracts.bamm.address, BigInt(100e18)); + await contracts.bamm.connect(user1).executeActions( + createAction({ + token0Amount: BigInt(1e18) + }) + ); + await contracts.token1.connect(user1).approve(contracts.bamm.address, BigInt(100e18)); + await contracts.bamm.connect(user1).executeActions( + createAction({ + token1Amount: BigInt(1e18) + }) + ); + + // User tries (and fails) to withdraw more tokens than they have in their vault + await expect(contracts.bamm.connect(user1).executeActions( + createAction({ + token0Amount: BigInt(-2e18) + }) + )).to.be.revertedWith("ERC20: transfer amount exceeds balance"); + await expect(contracts.bamm.connect(user1).executeActions( + createAction({ + token1Amount: BigInt(-2e18) + }) + )).to.be.revertedWith("ERC20: transfer amount exceeds balance"); + + // Owner (NOT the user before) deposits both tokens to his vault + await contracts.token0.connect(owner).approve(contracts.bamm.address, BigInt(100e18)); + await contracts.bamm.connect(owner).executeActions( + createAction({ + token0Amount: BigInt(10e18) + }) + ); + await contracts.token1.connect(owner).approve(contracts.bamm.address, BigInt(100e18)); + await contracts.bamm.connect(owner).executeActions( + createAction({ + token1Amount: BigInt(10e18) + }) + ); + + // Original user should not be able to withdraw more tokens just because OWNER made a deposit + await expect(contracts.bamm.connect(user1).executeActions( + createAction({ + token0Amount: BigInt(-2e18) + }) + )).to.be.revertedWith("Negative positions not allowed"); + await expect(contracts.bamm.connect(user1).executeActions( + createAction({ + token1Amount: BigInt(-2e18) + }) + )).to.be.revertedWith("Negative positions not allowed"); + + // User successfully removes both of their tokens from his vault + await contracts.bamm.connect(user1).executeActions( + createAction({ + token0Amount: BigInt(-1e18), + token1Amount: BigInt(-1e18) + }) + ); + }); + + it("Rent", async function () { + const [owner, user1, user2, user3, user4] = await ethers.getSigners(); + var contracts = await setupContracts(9970, 100e18); + + // Owner provides LP to the BAMM and gets BAMM tokens back. + // BAMM now has some liquidity + await contracts.pair.approve(contracts.bamm.address, BigInt(100e18)); + await contracts.bamm.mint(owner.address, BigInt(10e18)); + + // User (not Owner) deposits token0 as collateral, then rents 1 unit + // Since the pair is 1-to-1 and rentMultiplier is still 1: rent = sqrt(tk0 * tk1) -> 1 of each token + await contracts.token0.connect(user1).approve(contracts.bamm.address, BigInt(100e18)); + await contracts.bamm.connect(user1).executeActions( + createAction({ + token0Amount: BigInt(1e18) + }) + ); + await contracts.bamm.connect(user1).executeActions( + createAction({ + rent: BigInt(1e18) + }) + ); + expect(await contracts.token0.balanceOf(contracts.bamm.address)).to.equals(BigInt(2e18)); + expect(await contracts.token1.balanceOf(contracts.bamm.address)).to.equals(BigInt(1e18)); + var vault = await contracts.bamm.userVaults(user1.address); + expect(vault.token0).to.equals(BigInt(2e18)); + expect(vault.token1).to.equals(BigInt(1e18)); + expect(vault.rented).to.equals(BigInt(1e18)); + + // User rents another 1 unit. rentMultiplier is no longer 1 (tiny amount of interest) + // so it will only be approximately 1 token each now instead of exactly 1-to-1 + await contracts.bamm.connect(user1).executeActions( + createAction({ + rent: BigInt(1e18) + }) + ); + vault = await contracts.bamm.userVaults(user1.address); + expect(Number(BigInt(vault.token0) - BigInt(3e18))).to.be.closeTo(0, 1e12); + expect(Number(BigInt(vault.token1) - BigInt(2e18))).to.be.closeTo(0, 1e12); + expect(vault.rented).to.equals(BigInt(2e18)); + }); + + it("Rent failure checks", async function () { + const [owner, user1, user2, user3, user4] = await ethers.getSigners(); + var contracts = await setupContracts(9970, 100e18); + + // Owner provides LP to the BAMM and gets BAMM tokens back. + // BAMM now has some liquidity + await contracts.pair.approve(contracts.bamm.address, BigInt(100e18)); + await contracts.bamm.mint(owner.address, BigInt(10e18)); + + // User deposits some tokens as collateral, but then tries (and fails) to rent + // over the max utility for the pair + await contracts.token0.connect(user1).approve(contracts.bamm.address, BigInt(100e18)); + await contracts.token1.connect(user1).approve(contracts.bamm.address, BigInt(100e18)); + await contracts.bamm.connect(user1).executeActions( + createAction({ + token0Amount: BigInt(1e18), + token1Amount: BigInt(1e18) + }) + ); + await expect(contracts.bamm.connect(user1).executeActions( + createAction({ + rent: BigInt(91e17) // Max utility is (10 LP (from owner's mint)) * 90% = 9 + }) + )).to.be.revertedWith("MAX_UTILITY_RATE"); + + // User rents near the max utility, but still under it + await contracts.bamm.connect(user1).executeActions( + createAction({ + rent: BigInt(9e18) + }) + ); + + // User tries to pull out rented tokens, but fails as that would leave him insolvent + await expect(contracts.bamm.connect(user1).executeActions( + createAction({ + token0Amount: BigInt(-8164e14), + token1Amount: BigInt(-8164e14) + }) + )).to.be.revertedWith("Not solvent"); + + // User successfully pulls out fewer rented tokens then he originally wanted + await contracts.bamm.connect(user1).executeActions( + createAction({ + token0Amount: BigInt(-8163e14), + token1Amount: BigInt(-8163e14) + }) + ); + }); + + it("Return rented LP tokens with interest", async function () { + const [owner, user1, user2, user3, user4] = await ethers.getSigners(); + var contracts = await setupContracts(9970, 100e18); + + // Set User2 as owner to get the protocol FEE_SHARE + await contracts.bamm.nominateNewOwner(user2.address); + await contracts.bamm.connect(user2).acceptOwnership(); + + // Owner provides LP to the BAMM and gets BAMM tokens back. + // BAMM now has some liquidity + await contracts.pair.approve(contracts.bamm.address, BigInt(100e18)); + var lpTokensStart = BigInt(await contracts.pair.balanceOf(owner.address)); + await contracts.bamm.mint(owner.address, BigInt(10e18)); + + // User1 deposits some tokens and also rents, in the same transaction + // User1 keeps the rented tokens in the vault and doesn't do anything with them + await contracts.token0.connect(user1).approve(contracts.bamm.address, BigInt(100e18)); + await contracts.token1.connect(user1).approve(contracts.bamm.address, BigInt(100e18)); + await contracts.bamm.connect(user1).executeActions( + createAction({ + token0Amount: BigInt(1e18), + token1Amount: BigInt(1e18), + rent: BigInt(1e18) + }) + ); + + // Wait some time to accrue interest. Sync in the middle to avoid a gas limit + wait(60 * 60 * 24 * 200); + await contracts.pair.sync(); + wait(60 * 60 * 24 * 165); + + // User1 repays the rent with tokens from his vault + await contracts.bamm.connect(user1).executeActions( + createAction({ + rent: BigInt(-1e18) + }) + ); + + // User1 should have fewer tokens than he started with because he had to pay interest + var vault = await contracts.bamm.userVaults(user1.address); + var expectedTokens = BigInt(2e18) - (BigInt(101e16) + (BigInt(9e16) / BigInt(7))); + var paidInterest = BigInt(1e18) - BigInt(vault.token0); + expect(Number(expectedTokens - BigInt(vault.token0))).to.be.closeTo(0, 1e12); + expect(Number(expectedTokens - BigInt(vault.token1))).to.be.closeTo(0, 1e12); + expect(vault.rented).to.equals(BigInt(0)); + + // User2 redeems the BAMM they recieved as fees and gets LP back + await contracts.bamm.connect(user2).redeem(user2.address, await contracts.bamm.balanceOf(user2.address)); + var fee = BigInt(await contracts.pair.balanceOf(user2.address)); + + // When Owner redeems his BAMM tokens, he should get more LP back than he put in because of interest + await contracts.bamm.redeem(owner.address, BigInt(10e18)); + var lpTokensEnd = BigInt(await contracts.pair.balanceOf(owner.address)); + var earned = lpTokensEnd - lpTokensStart; + expect(paidInterest).to.equals(earned + fee); + expect(Number(fee - (paidInterest / BigInt(10)))).to.be.closeTo(0, 1e12); + }); + + it("One call borrow", async function () { + const [owner, user1, user2, user3, user4] = await ethers.getSigners(); + var contracts = await setupContracts(9970, 100e18); + + // Owner provides LP to the BAMM and gets BAMM tokens back. + // BAMM now has some liquidity + await contracts.pair.approve(contracts.bamm.address, BigInt(100e18)); + await contracts.bamm.mint(owner.address, BigInt(10e18)); + + // User1 deposits some token0, rents, then pulls out token1. All in a single transaction + await contracts.token0.connect(user1).approve(contracts.bamm.address, BigInt(100e18)); + await contracts.bamm.connect(user1).executeActions( + createAction({ + token0Amount: BigInt(1e18), + rent: BigInt(1e18), + token1Amount: BigInt(-4e17) + }) + ); + wait(60 * 60 * 24); + }); + + it("One call close", async function () { + const [owner, user1, user2, user3, user4] = await ethers.getSigners(); + var contracts = await setupContracts(9970, 100e18); + + // Owner provides LP to the BAMM and gets BAMM tokens back. + // BAMM now has some liquidity + await contracts.pair.approve(contracts.bamm.address, BigInt(100e18)); + await contracts.bamm.mint(owner.address, BigInt(10e18)); + + // User1 deposits some token0, rents, then pulls out token1. All in a single transaction + await contracts.token0.connect(user1).approve(contracts.bamm.address, BigInt(100e18)); + await contracts.bamm.connect(user1).executeActions( + createAction({ + token0Amount: BigInt(1e18), + rent: BigInt(1e18), + token1Amount: BigInt(-4e17) + }) + ); + + // Wait some time and accrue interest + wait(60 * 60 * 24); + + // User1 closes out their position. + // token1 is pre-approved to be pulled in to make up for any deficiencies + await contracts.token1.connect(user1).approve(contracts.bamm.address, BigInt(100e18)); + await contracts.bamm.connect(user1).executeActions( + createAction({ + closePosition: true + }) + ); + }); + + it("Swap", async function () { + const [owner, user1, user2, user3, user4] = await ethers.getSigners(); + var contracts = await setupContracts(9970, 100e18); + + // Owner provides LP to the BAMM and gets BAMM tokens back. + // BAMM now has some liquidity + await contracts.pair.approve(contracts.bamm.address, BigInt(100e18)); + await contracts.bamm.mint(owner.address, BigInt(10e18)); + + // User1 deposits some token1 and then rents, in a single transaction + await contracts.token1.connect(user1).approve(contracts.bamm.address, BigInt(100e18)); + await contracts.bamm.connect(user1).executeActions( + createAction({ + token1Amount: BigInt(1e18), + rent: BigInt(1e18) + }) + ); + + // User1 swaps some token0 in their vault for some more token1 + var swapParams = createSwapParams({ + tokenIn: contracts.token0.address, + amountIn: BigInt(45e16), + tokenOut: contracts.token1.address, + amountOutMinimum: BigInt(45e16) + }); + await contracts.bamm.connect(user1).executeActionsAndSwap( + createAction({}), + swapParams + ); + }); + + it("One call leverage", async function () { + const [owner, user1, user2, user3, user4] = await ethers.getSigners(); + var contracts = await setupContracts(9970, 100e18); + + // Owner provides LP to the BAMM and gets BAMM tokens back. + // BAMM now has some liquidity + await contracts.pair.approve(contracts.bamm.address, BigInt(100e18)); + await contracts.bamm.mint(owner.address, BigInt(10e18)); + + // User1 deposits some token1, rents, and swaps token0 for token1. In a single transaction + await contracts.token1.connect(user1).approve(contracts.bamm.address, BigInt(100e18)); + var swapParams = createSwapParams({ + tokenIn: contracts.token0.address, + amountIn: BigInt(45e16), + tokenOut: contracts.token1.address, + amountOutMinimum: BigInt(45e16) + }); + await contracts.bamm.connect(user1).executeActionsAndSwap( + createAction({ + token1Amount: BigInt(1e18), + rent: BigInt(1e18) + }), + swapParams + ); + }); + + it("One call deleverage", async function () { + const [owner, user1, user2, user3, user4] = await ethers.getSigners(); + var contracts = await setupContracts(9970, 100e18); + await contracts.pair.approve(contracts.bamm.address, BigInt(100e18)); + await contracts.bamm.mint(owner.address, BigInt(10e18)); + await contracts.token1.connect(user1).approve(contracts.bamm.address, BigInt(100e18)); + var swapParams1 = createSwapParams({ + tokenIn: contracts.token0.address, + amountIn: BigInt(45e16), + tokenOut: contracts.token1.address, + amountOutMinimum: BigInt(45e16) + }); + await contracts.bamm.connect(user1).executeActionsAndSwap( + createAction({ + token1Amount: BigInt(1e18), + rent:BigInt(1e18) + }), + swapParams1 + ); + var swapParams2 = createSwapParams({ + tokenIn:contracts.token1.address, + amountIn:BigInt(44e16), + tokenOut:contracts.token0.address, + amountOutMinimum:BigInt(46e16) + }); + await contracts.bamm.connect(user1).executeActionsAndSwap( + createAction({ + closePosition:true + }), + swapParams2 + ); + }); + + it("Liquidate", async function () { + const [owner, user1, user2, user3, user4] = await ethers.getSigners(); + var contracts = await setupContracts(9970, 100e18); + await contracts.pair.approve(contracts.bamm.address, BigInt(100e18)); + await contracts.bamm.mint(owner.address, BigInt(1e18)); + await contracts.token1.connect(user1).approve(contracts.bamm.address, BigInt(100e18)); + var swapParams = createSwapParams({ + tokenIn: contracts.token0.address, + amountIn: BigInt(49e16), + tokenOut: contracts.token1.address, + amountOutMinimum: BigInt(49e16) + }); + await contracts.bamm.connect(user1).executeActionsAndSwap( + createAction({ + token1Amount: BigInt(1e18), + rent: BigInt(90e16) + }), + swapParams + ); + await simulateSwaps(contracts, 1, 1e10, 60); // Do a swap and wait, because the oracle needs at least one price + wait(30 * 60); + await expect(contracts.bamm.connect(user2).liquidate(user1.address)).to.be.revertedWith("User solvent"); + wait(6 * 60 * 60 * 24); + await contracts.bamm.connect(user2).liquidate(user1.address); + }); + + it("Liquidate ammPriceCheck", async function () { + const [owner, user1, user2, user3, user4] = await ethers.getSigners(); + var contracts = await setupContracts(9999, 100e18); + await contracts.pair.approve(contracts.bamm.address, BigInt(100e18)); + await contracts.bamm.mint(owner.address, BigInt(1e18)); + await contracts.token1.connect(user1).approve(contracts.bamm.address, BigInt(100e18)); + var swapParams = createSwapParams({ + tokenIn: contracts.token0.address, + amountIn: BigInt(49e16), + tokenOut: contracts.token1.address, + amountOutMinimum: BigInt(49e16) + }); + await contracts.bamm.connect(user1).executeActionsAndSwap( + createAction({ + token1Amount: BigInt(1e18), + rent: BigInt(90e16) + }), + swapParams + ); + await simulateSwaps(contracts, 1, 1e10, 60); // Do a swap and wait, because the oracle needs at least one price + wait(30 * 60); + await expect(contracts.bamm.connect(user2).liquidate(user1.address)).to.be.revertedWith("User solvent"); + + wait(6 * 60 * 60 * 24); + await simulateSwaps(contracts, 25, 1e18,60); + await simulateSwaps(contracts, 25, -1e18,60); + await expect(contracts.bamm.connect(user2).liquidate(user1.address)).to.be.revertedWith("ammPriceCheck"); // Oracle price differs too much + wait(30 * 60); + await contracts.bamm.connect(user2).liquidate(user1.address); // Liquidation now works + }); +}); + +function createSwapParams(values) { + var nullBytes = "0x0000000000000000000000000000000000000000000000000000000000000000"; + var swapParams = { + tokenIn: "0x0000000000000000000000000000000000000000", + amountIn: 0, + tokenOut: "0x0000000000000000000000000000000000000000", + amountOutMinimum: 0, + recipient: "0x0000000000000000000000000000000000000000", + deadline: 4102441200, + approveMax: false, + v: 0, + r: "0x0000000000000000000000000000000000000000000000000000000000000000", + s: "0x0000000000000000000000000000000000000000000000000000000000000000", + route: "0x0000000000000000000000000000000000000000000000000000000000000000" + }; + return Object.assign(swapParams, values); +} + +function createAction(values) { + var nullBytes = "0x0000000000000000000000000000000000000000000000000000000000000000"; + var result = { + token0Amount: 0, + token1Amount: 0, + rent: 0, + to: "0x0000000000000000000000000000000000000000", + minToken0Amount: 0, + minToken1Amount: 0, + closePosition: false, + approveMax: false, + v: 0, + r: nullBytes, + s: nullBytes, + deadline: 0 + }; + return Object.assign(result, values); +} + +async function simulateSwaps(contracts, no, amount, waitPeriod) { + const [owner, user1, user2, user3, user4] = await ethers.getSigners(); + for (var i = 0; i < no; i++) { + wait(waitPeriod); + await swap(contracts,owner, BigInt(amount)); + } +} + +async function swap(contracts, user, swapAmount) { + if (swapAmount > 0) { + var amount1Out = BigInt(await contracts.pair.getAmountOut(swapAmount, contracts.token0.address)); + //console.log("amount1Out: " + amount1Out); + await contracts.token0.connect(user).transfer(contracts.pair.address, swapAmount); + await contracts.pair.swap(0, amount1Out, user.address, []); + } else if (swapAmount < 0) { + var amount0Out = BigInt(await contracts.pair.getAmountOut(-swapAmount, contracts.token1.address)); + //console.log("amount0Out: " + amount0Out); + await contracts.token1.connect(user).transfer(contracts.pair.address, -swapAmount); + await contracts.pair.swap(amount0Out, 0, user.address, []); + } +} + +function rnd(noValues) { + return Math.floor(Math.random() * noValues); +} + +async function waitTill(time) { + var currentblock = await ethers.provider.getBlock(await ethers.provider.getBlockNumber()); + var waitPeriod = time-currentblock.timestamp; + if (waitPeriod > 0) { + ethers.provider.send("evm_increaseTime", [waitPeriod]); // wait waitPeriod + ethers.provider.send("evm_mine"); // mine the next block + } +} +async function wait(waitPeriod) { + if (waitPeriod > 0) { + ethers.provider.send("evm_increaseTime", [waitPeriod]); // wait waitPeriod + ethers.provider.send("evm_mine"); // mine the next block + } +} + +async function setupContracts(fee, mintAmount) { + const [owner, user1, user2, user3, user4] = await ethers.getSigners(); + if (!fee) fee = 9970; + + // Deploy token0/token1 token and distribute + const DummyToken = await ethers.getContractFactory("DummyToken"); + var token0 = await DummyToken.deploy(); + await token0.mint(owner.address,ethers.constants.MaxUint256); + var token1 = await DummyToken.deploy(); + await token1.mint(owner.address,ethers.constants.MaxUint256); + + const weth9 = await (await ethers.getContractFactory("WETH9")).deploy(); + if (token1.address.toUpperCase() < token0.address.toUpperCase()) { + var temp = token1; + token1 = token0; + token0 = temp; + } + + await token0.transfer(user1.address, "1000000000000000000000"); + await token1.transfer(user1.address, "1000000000000000000000"); + await token0.transfer(user2.address, "1000000000000000000000"); + await token1.transfer(user2.address, "1000000000000000000000"); + await token0.transfer(user3.address, "1000000000000000000000"); + await token1.transfer(user3.address, "1000000000000000000000"); + await token0.transfer(user4.address, "1000000000000000000000"); + await token1.transfer(user4.address, "1000000000000000000000"); + + + const FraxswapFactory = await ethers.getContractFactory("FraxswapFactory"); + const factory = await FraxswapFactory.deploy(owner.address); + await factory.deployed(); + + await factory["createPair(address,address,uint256)"](token0.address, token1.address, BigInt(10000) - BigInt(fee)); + const pairAddress = await factory.getPair(token0.address, token1.address); + const FraxswapPair = await ethers.getContractFactory("FraxswapPair"); + var pair = FraxswapPair.attach(pairAddress); + await token0.transfer(pair.address, BigInt(mintAmount)); + await token1.transfer(pair.address, BigInt(mintAmount)); + await pair.mint(owner.address); + + // Deploy Dummy router + const FraxswapDummyRouter = await ethers.getContractFactory("FraxswapDummyRouter"); + var router = await FraxswapDummyRouter.deploy(); + await token0.transfer(router.address, "1000000000000000000000"); + await token1.transfer(router.address, "1000000000000000000000"); + + // Deploy BAMMHelper + const BAMMHelper = await ethers.getContractFactory("BAMMHelper"); + var bammHelper = await BAMMHelper.deploy(); + + // Deploy FraxswapOracle + const FraxswapOracle = await ethers.getContractFactory("FraxswapOracle"); + var fraxswapOracle = await FraxswapOracle.deploy(); + + // Deploy pool + const BAMM = await ethers.getContractFactory("BAMM"); + var bamm = await BAMM.deploy(pair.address, true, fee, router.address, bammHelper.address, fraxswapOracle.address); + + // Pack contracts in an object + var result = {}; + result.token0 = token0; + result.token1 = token1; + result.pair = pair; + result.bamm = bamm; + result.weth = weth9; + result.router=router; + return result; +} diff --git a/src/hardhat/test/BAMM/BAMMHelper.js b/src/hardhat/test/BAMM/BAMMHelper.js new file mode 100644 index 00000000..bd67cad4 --- /dev/null +++ b/src/hardhat/test/BAMM/BAMMHelper.js @@ -0,0 +1,518 @@ +const { expect } = require("chai"); +const { ethers } = require("hardhat"); + +describe("BAMMHelper", function () { + var PRECISION = BigInt(1e18); + + it("setupContracts", async function () { + var contracts = await setupContracts(9970); + }); + + it("estimateGas for some functions", async function () { + console.log("======================================="); + const [owner, user1, user2, user3, user4] = await ethers.getSigners(); + + // Randomize the reserve, token swap/add amounts, and fee + var RES_A = BigInt("50000000000000"); + var RES_B = BigInt("100000000000000000000000000"); + var TKN_A_AMT = BigInt("8000000000000"); + var TKN_B_AMT = BigInt("700000000000000000000000000000"); + var fee = BigInt("9908"); + + if ((RES_A + TKN_A_AMT < BigInt(2.1923E33)) && (RES_B + TKN_B_AMT < BigInt(2.1923E33))) { + console.log("RES_A: " + RES_A + "\nRES_B: " + RES_B + "\nTKN_A_AMT: " + TKN_A_AMT + "\nTKN_B_AMT: " + TKN_B_AMT + "\nfee: " + fee); + + // Setup the contracts and mint some LP to the owner + var contracts = await setupContracts(fee); + await contracts.token0.transfer(contracts.pair.address, RES_A); + await contracts.token1.transfer(contracts.pair.address, RES_B); + await contracts.pair.mint(owner.address); + + // Calculate which token, and how much of it, need to be swapped to balance the pool + // Also estimate gas + console.log("estimateGas getSwapAmount: " + (await contracts.bammHelper.estimateGas.getSwapAmount(RES_A, RES_B, TKN_A_AMT, TKN_B_AMT, fee))); + console.log("estimateGas getSwapAmountSolve: " + (await contracts.bammHelper.estimateGas.getSwapAmountSolve(RES_A, RES_B, TKN_A_AMT, TKN_B_AMT, fee))); + var swapAmount = BigInt(await contracts.bammHelper.getSwapAmount(RES_A, RES_B, TKN_A_AMT, TKN_B_AMT, fee)); + var getSwapAmountSolve = BigInt(await contracts.bammHelper.getSwapAmountSolve(RES_A, RES_B, TKN_A_AMT, TKN_B_AMT, fee)); + console.log("getSwapAmount: " + swapAmount); + console.log("getSwapAmountSolve: " + getSwapAmountSolve); + + // Give user1 some A and B tokens. User1 also approves them to the BAMM Helper. + await contracts.token0.connect(user1).approve(contracts.bammHelper.address, TKN_A_AMT); + await contracts.token1.connect(user1).approve(contracts.bammHelper.address, TKN_B_AMT); + await contracts.token0.transfer(user1.address, TKN_A_AMT); + await contracts.token1.transfer(user1.address, TKN_B_AMT); + + // Estimate gas for adding the unbalanced liquidity + console.log("estimateGas estimateLiquidityUnbalanced: " + (await contracts.bammHelper.estimateGas.estimateLiquidityUnbalanced(TKN_A_AMT, TKN_B_AMT, contracts.pair.address, fee, true))); + var [estimateLiquidity, swappedAmt] = await contracts.bammHelper.estimateLiquidityUnbalanced(TKN_A_AMT, TKN_B_AMT, contracts.pair.address, fee, true); + console.log("estimateGas addLiquidityUnbalanced: " + (await contracts.bammHelper.connect(user1).estimateGas.addLiquidityUnbalanced(TKN_A_AMT, TKN_B_AMT, 0, contracts.pair.address, fee, true))); + await contracts.bammHelper.connect(user1).addLiquidityUnbalanced(TKN_A_AMT, TKN_B_AMT, 0, contracts.pair.address, fee, true); + var liquidity = await contracts.pair.balanceOf(user1.address); + expect(liquidity).to.equal(estimateLiquidity); + PRECISION = PRECISION * BigInt(10); + } + }); + + it("Test getSwapAmount, estimateLiquidityUnbalanced and addLiquidityUnbalanced", async function () { + console.log("======================================="); + const [owner, user1, user2, user3, user4] = await ethers.getSigners(); + + // Randomize the reserve, token swap/add amounts, and fee + var RES_A = BigInt("800000000000"); + var RES_B = BigInt("4000000000000000000000000"); + var TKN_A_AMT = BigInt("80000000000000"); + var TKN_B_AMT = BigInt("400000000000000000000000000"); + var fee = BigInt("9985"); + + if (RES_A + TKN_A_AMT < BigInt(2.1923E33) && RES_B + TKN_B_AMT < BigInt(2.1923E33)) { + console.log("RES_A: " + RES_A + "\nRES_B: " + RES_B + "\nTKN_A_AMT: " + TKN_A_AMT + "\nTKN_B_AMT: " + TKN_B_AMT + "\nfee: " + fee); + + // Setup the contracts and mint some LP to the owner + var contracts = await setupContracts(fee); + await contracts.token0.transfer(contracts.pair.address, RES_A); + await contracts.token1.transfer(contracts.pair.address, RES_B); + await contracts.pair.mint(owner.address); + + // Calculate which token, and how much of it, need to be swapped to balance the pool + var swapAmount = BigInt(await contracts.bammHelper.getSwapAmount(RES_A, RES_B, TKN_A_AMT, TKN_B_AMT, fee)); + console.log("swapAmount: " + swapAmount); + + // Give user1 some A and B tokens. User1 also approves them to the BAMM Helper. + await contracts.token0.connect(user1).approve(contracts.bammHelper.address, TKN_A_AMT); + await contracts.token1.connect(user1).approve(contracts.bammHelper.address, TKN_B_AMT); + await contracts.token0.transfer(user1.address, TKN_A_AMT); + await contracts.token1.transfer(user1.address, TKN_B_AMT); + + // Test adding the liquidity + var [estimateLiquidity, swappedAmt] = await contracts.bammHelper.estimateLiquidityUnbalanced(TKN_A_AMT, TKN_B_AMT, contracts.pair.address, fee, true); + console.log("estimateLiquidity: " + estimateLiquidity); + console.log("swappedAmt: " + swappedAmt); + await contracts.bammHelper.connect(user1).addLiquidityUnbalanced(TKN_A_AMT, TKN_B_AMT, 0, contracts.pair.address, fee, true); + var liquidity = await contracts.pair.balanceOf(user1.address); + console.log("liquidity: " + liquidity); + expect(liquidity).to.equal(estimateLiquidity); + PRECISION = PRECISION * BigInt(10); + } + }); + + it("Test getSwapAmount and direct swap more deeply", async function () { + console.log("======================================="); + const [owner, user1, user2, user3, user4] = await ethers.getSigners(); + + // Randomize the reserve, token swap/add amounts, and fee + var RES_A = BigInt("800000000000000000000000000"); + var RES_B = BigInt("40000000000000000000000000000"); + var TKN_A_AMT = BigInt("1000000000000000000000000000000000"); + var TKN_B_AMT = BigInt("40000000000000000000000"); + var fee = BigInt("9906"); + + + if (RES_A + TKN_A_AMT < BigInt(2.1923E33) && RES_B + TKN_B_AMT < BigInt(2.1923E33)) { + console.log("RES_A: " + RES_A + "\nRES_B: " + RES_B + "\nTKN_A_AMT: " + TKN_A_AMT + "\nTKN_B_AMT: " + TKN_B_AMT + "\nfee: " + fee); + + // Setup the contracts and mint some LP to the owner + var contracts = await setupContracts(fee); + await contracts.token0.transfer(contracts.pair.address, RES_A); + await contracts.token1.transfer(contracts.pair.address, RES_B); + await contracts.pair.mint(owner.address); + + // Calculate which token, and how much of it, need to be swapped to balance the pool + var swapAmount = BigInt(await contracts.bammHelper.getSwapAmount(RES_A, RES_B, TKN_A_AMT, TKN_B_AMT, fee)); + console.log("swapAmount: " + swapAmount); + + // Positive = tokenA is swapped out, Negative = tokenB is swapped out + if (swapAmount >= 0) { + // Calculate the estimated amount of tokenB that will be generated + var amountOut = getAmountOut(RES_A, RES_B, fee, BigInt(swapAmount)); + //console.log("amountOut: " + amountOut); + + // Give some token0 (tokenA) to the LP and swap with it. Should give token1 (tokenB) to the sender + await contracts.token0.transfer(contracts.pair.address, swapAmount); + if (amountOut > 0) await contracts.pair.swap(0, amountOut, owner.address, []); + + // Print the reserves and balances + var reserves = await contracts.pair.getReserves(); + console.log("reserve0 (A): ", reserves._reserve0); + console.log("reserve1 (B): ", reserves._reserve1); + console.log("balance tkn0 (A): ", TKN_A_AMT - swapAmount); + console.log("balance tkn1 (B): ", TKN_B_AMT + amountOut); + + // Make sure the expected amount of token1 (B) matches the actual + var expectedTknB = ((TKN_A_AMT - swapAmount) * BigInt(reserves._reserve1)) / BigInt(reserves._reserve0); + console.log("expectedTknB : " + expectedTknB); + console.log("TKN_B_AMT + amountOut: " + (TKN_B_AMT + amountOut)); + var PRECISION = minBigInt(BigInt(10000000), BigInt(reserves._reserve0), BigInt(reserves._reserve1), (TKN_A_AMT - swapAmount), (TKN_B_AMT + amountOut)) / BigInt(10); + var diff = ((expectedTknB - (TKN_B_AMT + amountOut)) * PRECISION) / expectedTknB; // Truncate to PRECISION + expect(diff).to.equal(BigInt(0)); + } else { + // Calculate the estimated amount of tokenA that will be generated + swapAmount = -swapAmount; + var amountOut = getAmountOut(RES_B, RES_A, fee, BigInt(swapAmount)); + //console.log("amountOut: " + amountOut); + + // Give some token1 (tokenB) to the LP and swap with it. Should give token0 (tokenA) to the sender + await contracts.token1.transfer(contracts.pair.address, swapAmount); + if (amountOut > 0) await contracts.pair.swap(amountOut,0, owner.address, []); + + // Print the reserves and balances + var reserves = await contracts.pair.getReserves(); + console.log("reserve0 (A): ", reserves._reserve0); + console.log("reserve1 (B): ", reserves._reserve1); + console.log("balance tkn0 (A): ", TKN_A_AMT + amountOut); + console.log("balance tkn1 (B): ", TKN_B_AMT - swapAmount); + + // Make sure the expected amount of token1 (B) matches the actual + var expectedTknB = ((TKN_A_AMT + amountOut) * BigInt(reserves._reserve1)) / BigInt(reserves._reserve0); + console.log("expectedTknB : " + expectedTknB); + console.log("TKN_B_AMT - swapAmount: " + (TKN_B_AMT - swapAmount)); + var PRECISION = minBigInt(BigInt(10000000), BigInt(reserves._reserve0), BigInt(reserves._reserve1), (TKN_A_AMT + amountOut), (TKN_B_AMT - swapAmount)) / BigInt(10); + var diff = ((expectedTknB - (TKN_B_AMT - swapAmount)) * PRECISION) / expectedTknB; // Truncate to PRECISION + expect(diff).to.equal(BigInt(0)); + } + } + }); + + it("Fuzz getSwapAmount", async function () { + const [owner, user1, user2, user3, user4] = await ethers.getSigners(); + + // Generate a bunch of multipliers to be used in the fuzzing + var PRECISION = BigInt(1e6); + var pow10 = [BigInt(1)]; + for (var i = 1; i < 100; i++) { + pow10[i] = pow10[i - 1] * BigInt(10); + } + + // Fuzz 100 times + for (var i = 0; i < 100; i++) { + // Randomize the reserve, token swap/add amounts, and fee + var RES_A = BigInt(rnd(9) + 1) * pow10[rnd(33) + 1]; + var RES_B = BigInt(rnd(9) + 1) * pow10[rnd(33) + 1]; + var TKN_A_AMT = BigInt(rnd(9) + 1) * pow10[rnd(33) + 1]; + var TKN_B_AMT = BigInt(rnd(9) + 1) * pow10[rnd(33) + 1]; + var fee = BigInt(9999) - BigInt(rnd(100)); + + if (RES_A + TKN_A_AMT < BigInt(2.1923E33) && RES_B + TKN_B_AMT < BigInt(2.1923E33) && RES_A * RES_B > 1000000) { + // Setup the contracts and mint some LP to the owner + var contracts = await setupContracts(fee); + console.log(`------ [Fuzz GtSwpAmt ${i}] ------`); + console.log("RES_A: " + RES_A + "\nRES_B: " + RES_B + "\nTKN_A_AMT: " + TKN_A_AMT + "\nTKN_B_AMT: " + TKN_B_AMT + "\nfee: " + fee + "\ngas: " + (await contracts.bammHelper.estimateGas.getSwapAmount(RES_A, RES_B, TKN_A_AMT, TKN_B_AMT, fee))); + await contracts.token0.transfer(contracts.pair.address, RES_A); + await contracts.token1.transfer(contracts.pair.address, RES_B); + await contracts.pair.mint(owner.address); + + // Calculate which token, and how much of it, need to be swapped to balance the pool + var swapAmount = BigInt(await contracts.bammHelper.getSwapAmount(RES_A, RES_B, TKN_A_AMT, TKN_B_AMT, fee)); + + // Positive = tokenA is swapped out, Negative = tokenB is swapped out + if (swapAmount >= 0) { + // Calculate the estimated amount of tokenB that will be generated + var amountOut = getAmountOut(RES_A, RES_B, fee, BigInt(swapAmount)); + //console.log("amountOut: " + amountOut); + + // Give some token0 (tokenA) to the LP and swap with it. Should give token1 (tokenB) to the sender + await contracts.token0.transfer(contracts.pair.address, swapAmount); + if (amountOut > 0) await contracts.pair.swap(0, amountOut, owner.address, []); + + // Check reserves and balances + var reserves = await contracts.pair.getReserves(); + //console.log("reserves: " + reserves._reserve0 + ", " + reserves._reserve1); + //console.log("balance: " + (TKN_A_AMT - swapAmount) + ", " + (TKN_B_AMT + amountOut)); + var expectedTknB = (TKN_A_AMT - swapAmount) * BigInt(reserves._reserve1) / BigInt(reserves._reserve0); + var PRECISION = minBigInt(BigInt(10000000), BigInt(reserves._reserve0), BigInt(reserves._reserve1), (TKN_A_AMT - swapAmount), (TKN_B_AMT + amountOut)) / BigInt(10); + var diff = (expectedTknB - (TKN_B_AMT + amountOut)) * PRECISION / expectedTknB; + expect(diff).to.equal(BigInt(0)); + } else { + // Calculate the estimated amount of tokenA that will be generated + swapAmount = -swapAmount; + var amountOut = getAmountOut(RES_B, RES_A, fee, swapAmount); + //console.log("amountOut: " + amountOut); + + // Give some token1 (tokenB) to the LP and swap with it. Should give token0 (tokenA) to the sender + await contracts.token1.transfer(contracts.pair.address, swapAmount); + if (amountOut > 0) await contracts.pair.swap(amountOut,0, owner.address, []); + + // Check reserves and balances + var reserves = await contracts.pair.getReserves(); + //console.log("reserves: " + reserves._reserve0 + ", " + reserves._reserve1); + //console.log("balance: " + (TKN_A_AMT + amountOut) + ", " + (TKN_B_AMT - swapAmount)); + var expectedTknB = (TKN_A_AMT + amountOut) * BigInt(reserves._reserve1) / BigInt(reserves._reserve0); + var PRECISION = minBigInt(BigInt(10000000), BigInt(reserves._reserve0), BigInt(reserves._reserve1), (TKN_A_AMT + amountOut),(TKN_B_AMT - swapAmount))/BigInt(10); + var diff = (expectedTknB - (TKN_B_AMT - swapAmount)) * PRECISION / expectedTknB; + expect(diff).to.equal(BigInt(0)); + } + } + } + }).timeout(10000000); + + it("Fuzz estimateLiquidity", async function () { + const [owner, user1, user2, user3, user4] = await ethers.getSigners(); + + // Generate a bunch of multipliers to be used in the fuzzing + var PRECISION = BigInt(1e6); + var pow10 = [BigInt(1)]; + for (var i = 1; i < 100; i++) { + pow10[i] = pow10[i - 1] * BigInt(10); + } + + // Fuzz 100 times + for (var i = 0; i < 100; i++) { + // Randomize the reserve, token swap/add amounts, and fee. + var RES_A = BigInt(rnd(9) + 1) * pow10[rnd(33) + 1]; + var RES_B = BigInt(rnd(9) + 1) * pow10[rnd(33) + 1]; + var TKN_A_AMT = BigInt(rnd(9) + 1) * pow10[rnd(33) + 1]; + var TKN_B_AMT = BigInt(rnd(9) + 1) * pow10[rnd(33) + 1]; + var fee = BigInt(9999) - BigInt(rnd(100)); + + + if (RES_A + TKN_A_AMT < BigInt(2.1923E33) && RES_B + TKN_B_AMT < BigInt(2.1923E33) && RES_A * RES_B > 1000000) { + // Setup the contracts and mint some LP to the owner + console.log(`------ [Fuzz EstLiq ${i}] ------`); + console.log("RES_A: " + RES_A + "\nRES_B: " + RES_B + "\nTKN_A_AMT: " + TKN_A_AMT + "\nTKN_B_AMT: " + TKN_B_AMT + "\nfee: " + fee); + var contracts = await setupContracts(fee); + await contracts.token0.transfer(contracts.pair.address, RES_A); + await contracts.token1.transfer(contracts.pair.address, RES_B); + await contracts.pair.mint(owner.address); + + // Give user1 some A and B tokens. User1 also approves them to the BAMM Helper. + await contracts.token0.connect(user1).approve(contracts.bammHelper.address, TKN_A_AMT); + await contracts.token1.connect(user1).approve(contracts.bammHelper.address, TKN_B_AMT); + + await contracts.token0.transfer(user1.address, TKN_A_AMT); + await contracts.token1.transfer(user1.address, TKN_B_AMT); + + // Add liquidity + var [estimateLiquidity, swappedAmt] = await contracts.bammHelper.estimateLiquidityUnbalanced(TKN_A_AMT, TKN_B_AMT, contracts.pair.address, fee, true); + await contracts.bammHelper.connect(user1).addLiquidityUnbalanced(TKN_A_AMT, TKN_B_AMT, 0, contracts.pair.address, fee, true); + var liquidity = await contracts.pair.balanceOf(user1.address); + // console.log("liquidity: " + liquidity); + // console.log("estimateLiquidity: " + estimateLiquidity); + expect(liquidity).to.equal(estimateLiquidity); + PRECISION = PRECISION * BigInt(10); + } + } + }).timeout(10000000); + return; + + + + + + + + + + + + it("getSwapAmount 1", async function () { + const [owner, user1, user2, user3, user4] = await ethers.getSigners(); + var contracts = await setupContracts(9970); + var PRECISION = BigInt(1e6); + for (var i=0;i<32;i++) { + var RES_A = BigInt(1000)*PRECISION; + var RES_B = BigInt(1000)*PRECISION; + var TKN_A_AMT = BigInt(51)*PRECISION; + var TKN_B_AMT = BigInt(50)*PRECISION; + var fee = BigInt(9970); + if (RES_A + TKN_A_AMT < BigInt(2.1923E33) && RES_B + TKN_B_AMT < BigInt(2.1923E33)) { + //console.log("RES_A: " + RES_A + " RES_B: " + RES_B + " TKN_A_AMT: " + TKN_A_AMT + " TKN_B_AMT: " + TKN_B_AMT + " fee: " + fee); + var swapAmount = await contracts.bammHelper.getSwapAmount(RES_A, RES_B, TKN_A_AMT, TKN_B_AMT, fee); + console.log("swapAmount: " + swapAmount); + expect(BigInt(swapAmount) * BigInt(1e5)/PRECISION).to.equal(BigInt(47679)); + PRECISION = PRECISION * BigInt(10); + } + } + }); + + + //return; + + it("getSwapAmount 2", async function () { + const [owner, user1, user2, user3, user4] = await ethers.getSigners(); + var contracts = await setupContracts(9970); + var PRECISION = BigInt(1e6); + for (var i=0;i<32;i++) { + + var RES_A = BigInt(1000)*PRECISION; + var RES_B = BigInt(1000)*PRECISION; + var TKN_A_AMT = BigInt(50)*PRECISION; + var TKN_B_AMT = BigInt(51)*PRECISION; + var fee = BigInt(9970); + if (RES_A + TKN_A_AMT < BigInt(2.1923E33) && RES_B + TKN_B_AMT < BigInt(2.1923E33)) { + var swapAmount = await contracts.bammHelper.getSwapAmount(RES_A, RES_B, TKN_A_AMT, TKN_B_AMT, fee); + console.log("swapAmount: " + swapAmount); + expect(BigInt(swapAmount) * BigInt(1e5)/PRECISION).to.equal(BigInt(-47679)); + PRECISION = PRECISION * BigInt(10); + } + } + }); + + it("getSwapAmount 3", async function () { + const [owner, user1, user2, user3, user4] = await ethers.getSigners(); + var PRECISION = BigInt(1e6); + for (var i=0;i<32;i++) { + var RES_A = BigInt(1000)*PRECISION; + var RES_B = BigInt(1000)*PRECISION; + var TKN_A_AMT = BigInt(51)*PRECISION; + var TKN_B_AMT = BigInt(50)*PRECISION; + var fee = BigInt(9970); + if (RES_A + TKN_A_AMT < BigInt(2.1923E33) && RES_B + TKN_B_AMT < BigInt(2.1923E33)) { + var contracts = await setupContracts(f); + await contracts.token0.transfer(contracts.pair.address, RES_A); + await contracts.token1.transfer(contracts.pair.address, RES_B); + await contracts.pair.mint(owner.address); + var swapAmount = BigInt(await contracts.bammHelper.getSwapAmount(RES_A, RES_B, TKN_A_AMT, TKN_B_AMT, fee)); + var amountOut = getAmountOut(RES_A, RES_B, fee, BigInt(swapAmount)); + await contracts.token0.transfer(contracts.pair.address, swapAmount); + await contracts.pair.swap(0, amountOut, owner.address, []); + var reserves = await contracts.pair.getReserves(); + var expectedBy = (TKN_A_AMT - swapAmount) * BigInt(reserves._reserve1) / BigInt(reserves._reserve0); + var diff = (expectedBy - (TKN_B_AMT + amountOut))*BigInt(10000000)/expectedBy; + expect(diff).to.equal(BigInt(0)); + PRECISION = PRECISION * BigInt(10); + } + } + }); + it("addLiquidityUnbalanced 1", async function () { + const [owner, user1, user2, user3, user4] = await ethers.getSigners(); + var PRECISION = BigInt(1e6); + for (var i=0;i<32;i++) { + var RES_A = BigInt(1000)*PRECISION; + var RES_B = BigInt(1000)*PRECISION; + var TKN_A_AMT = BigInt(51)*PRECISION; + var TKN_B_AMT = BigInt(50)*PRECISION; + var fee = BigInt(9970); + if (RES_A + TKN_A_AMT < BigInt(2.1923E33) && RES_B + TKN_B_AMT < BigInt(2.1923E33)) { + var contracts = await setupContracts(f); + await contracts.token0.transfer(contracts.pair.address, RES_A); + await contracts.token1.transfer(contracts.pair.address, RES_B); + await contracts.pair.mint(owner.address); + + await contracts.token0.connect(user1).approve(contracts.bammHelper.address, TKN_A_AMT); + await contracts.token1.connect(user1).approve(contracts.bammHelper.address, TKN_B_AMT); + await contracts.token0.transfer(user1.address, TKN_A_AMT); + await contracts.token1.transfer(user1.address, TKN_B_AMT); + + var [estimateLiquidity, swappedAmt] = await contracts.bammHelper.estimateLiquidityUnbalanced(TKN_A_AMT, TKN_B_AMT, contracts.pair.address, fee, true); + console.log("estimateLiquidity: " + estimateLiquidity); + await contracts.bammHelper.connect(user1).addLiquidityUnbalanced(TKN_A_AMT, TKN_B_AMT, 0, contracts.pair.address, fee, true); + var liquidity = await contracts.pair.balanceOf(user1.address); + console.log("liquidity: " + liquidity); + expect(liquidity).to.equal(estimateLiquidity); + PRECISION = PRECISION * BigInt(10); + } + } + }); + it("addLiquidityUnbalanced 2", async function () { + const [owner, user1, user2, user3, user4] = await ethers.getSigners(); + var PRECISION = BigInt(1e6); + for (var i=0;i<32;i++) { + var RES_A = BigInt(1000)*PRECISION; + var RES_B = BigInt(1000)*PRECISION; + var TKN_A_AMT = BigInt(50)*PRECISION; + var TKN_B_AMT = BigInt(51)*PRECISION; + var fee = BigInt(9970); + if (RES_A + TKN_A_AMT < BigInt(2.1923E33) && RES_B + TKN_B_AMT < BigInt(2.1923E33)) { + var contracts = await setupContracts(f); + await contracts.token0.transfer(contracts.pair.address, RES_A); + await contracts.token1.transfer(contracts.pair.address, RES_B); + await contracts.pair.mint(owner.address); + + await contracts.token0.connect(user1).approve(contracts.bammHelper.address, TKN_A_AMT); + await contracts.token1.connect(user1).approve(contracts.bammHelper.address, TKN_B_AMT); + await contracts.token0.transfer(user1.address, TKN_A_AMT); + await contracts.token1.transfer(user1.address, TKN_B_AMT); + + var [estimateLiquidity, swappedAmt] = await contracts.bammHelper.estimateLiquidityUnbalanced(TKN_A_AMT, TKN_B_AMT, contracts.pair.address, fee, true); + console.log("estimateLiquidity: " + estimateLiquidity); + await contracts.bammHelper.connect(user1).addLiquidityUnbalanced(TKN_A_AMT, TKN_B_AMT, 0, contracts.pair.address, fee, true); + var liquidity = await contracts.pair.balanceOf(user1.address); + console.log("liquidity: " + liquidity); + expect(liquidity).to.equal(estimateLiquidity); + PRECISION = PRECISION * BigInt(10); + } + } + }); +}); + +function rnd(noValues) { + return Math.floor(Math.random() * noValues); +} + +function minBigInt(a,b,c,d,e) { + var result = a; + if (b < result) result = b; + if (c < result) result = c; + if (d < result) result = d; + if (e < result) result = e; + return result; +} + +function getAmountOut(reserveIn, reserveOut,fee,amountIn) { + var amountInWithFee = amountIn * fee; + var numerator = amountInWithFee * reserveOut; + var denominator = (reserveIn * BigInt(10000)) + amountInWithFee; + return numerator / denominator; +} + +async function waitTill(time) { + var currentblock = await ethers.provider.getBlock(await ethers.provider.getBlockNumber()); + var waitPeriod = time-currentblock.timestamp; + if (waitPeriod > 0) { + ethers.provider.send("evm_increaseTime", [waitPeriod]); // wait waitPeriod + ethers.provider.send("evm_mine"); // mine the next block + } +} +async function wait(waitPeriod) { + if (waitPeriod > 0) { + ethers.provider.send("evm_increaseTime", [waitPeriod]); // wait waitPeriod + ethers.provider.send("evm_mine"); // mine the next block + } +} + +async function setupContracts(fee) { + const [owner, user1, user2, user3, user4] = await ethers.getSigners(); + + // Deploy token0/token1 token and distribute + const DummyToken = await ethers.getContractFactory("ERC20PeriTest"); + var token0 = await DummyToken.deploy(ethers.constants.MaxUint256); + var token1 = await DummyToken.deploy(ethers.constants.MaxUint256); + const weth9 = await (await ethers.getContractFactory("WETH9")).deploy(); + if (token1.address.toUpperCase() 0) { + var amount1Out = BigInt(await contracts.pair.getAmountOut(swapAmount, contracts.token0.address)); + if (amount1Out > BigInt(0)) { + //console.log("amount1Out:"+amount1Out); + await contracts.token0.connect(user).transfer(contracts.pair.address, swapAmount); + await contracts.pair.swap(0, amount1Out, user.address, []); + } + } else if (swapAmount < 0) { + var amount0Out = BigInt(await contracts.pair.getAmountOut(-swapAmount, contracts.token1.address)); + if (amount0Out > BigInt(0)) { + //console.log("amount0Out:"+amount0Out); + await contracts.token1.connect(user).transfer(contracts.pair.address, -swapAmount); + await contracts.pair.swap(amount0Out, 0, user.address, []); + } + } +} + +function rnd(noValues) { + return Math.floor(Math.random() * noValues); +} + +async function waitTill(time) { + var currentblock = await ethers.provider.getBlock(await ethers.provider.getBlockNumber()); + var waitPeriod = time - currentblock.timestamp; + if (waitPeriod > 0) { + ethers.provider.send("evm_increaseTime", [waitPeriod]); // wait waitPeriod + ethers.provider.send("evm_mine"); // mine the next block + } +} +async function wait(waitPeriod) { + if (waitPeriod > 0) { + ethers.provider.send("evm_increaseTime", [waitPeriod]); // wait waitPeriod + ethers.provider.send("evm_mine"); // mine the next block + } +} + +async function setupContracts(fee,mintAmount) { + const [owner, user1, user2, user3, user4] = await ethers.getSigners(); + if (!fee) fee = 9970; + + // Deploy token0/token1 token and distribute + const DummyToken = await ethers.getContractFactory("DummyToken"); + var token0 = await DummyToken.deploy(); + await token0.mint(owner.address, ethers.constants.MaxUint256); + var token1 = await DummyToken.deploy(); + await token1.mint(owner.address, ethers.constants.MaxUint256); + + const weth9 = await (await ethers.getContractFactory("WETH9")).deploy(); + if (token1.address.toUpperCase() < token0.address.toUpperCase()) { + var temp = token1; + token1 = token0; + token0 = temp; + } + + await token0.transfer(user1.address, "1000000000000000000000"); + await token1.transfer(user1.address, "1000000000000000000000"); + await token0.transfer(user2.address, "1000000000000000000000"); + await token1.transfer(user2.address, "1000000000000000000000"); + await token0.transfer(user3.address, "1000000000000000000000"); + await token1.transfer(user3.address, "1000000000000000000000"); + await token0.transfer(user4.address, "1000000000000000000000"); + await token1.transfer(user4.address, "1000000000000000000000"); + + + const FraxswapFactory = await ethers.getContractFactory("FraxswapFactory"); + const factory = await FraxswapFactory.deploy(owner.address); + await factory.deployed(); + + await factory["createPair(address,address,uint256)"](token0.address, token1.address,BigInt(10000) - BigInt(fee)); + const pairAddress = await factory.getPair(token0.address, token1.address); + const FraxswapPair = await ethers.getContractFactory("FraxswapPair"); + var pair = FraxswapPair.attach(pairAddress); + await token0.transfer(pair.address, BigInt(mintAmount)); + await token1.transfer(pair.address, BigInt(mintAmount)); + await pair.mint(owner.address); + + // Deploy FraxswapOracle + const FraxswapOracle = await ethers.getContractFactory("FraxswapOracle"); + var fraxswapOracle = await FraxswapOracle.deploy(); + + // Pack contracts in an object + var result = {}; + result.token0 = token0; + result.token1 = token1; + result.pair = pair; + result.fraxswapOracle = fraxswapOracle; + return result; +} diff --git a/src/hardhat/test/FraxferryV2/FerryV2-test.js b/src/hardhat/test/FraxferryV2/FerryV2-test.js new file mode 100644 index 00000000..fd5c50fd --- /dev/null +++ b/src/hardhat/test/FraxferryV2/FerryV2-test.js @@ -0,0 +1,114 @@ +const { expect } = require("chai"); +const { ethers } = require("hardhat"); +const { rlp } = require("ethereumjs-util"); +const { keccak256 } = require("@ethersproject/keccak256"); +const { toUtf8Bytes } = require("@ethersproject/strings"); + + +describe("FerryV2", function () { + it("setupContracts", async function () { + var contracts = await setupContracts(); + }); + + it("L1 -> L2", async function () { + const [owner,user1,user2,user3,user4] = await ethers.getSigners(); + var contracts = await setupContracts(); + // Init captain + await contracts.ferryOnL1.connect(owner).initCaptain(0, 1000, 0); + await contracts.tokenL2.connect(owner).approve(contracts.ferryOnL2.address,BigInt(100e18)); + await contracts.ferryOnL2.connect(owner).captainDeposit(BigInt(100e18)); + + await contracts.tokenL1.connect(user1).approve(contracts.ferryOnL1.address, BigInt(100e18)); + await contracts.ferryOnL1.connect(user1).embarkWithRecipient(BigInt(10e18), user1.address, owner.address, 0); + await contracts.ferryOnL1.connect(user1).embarkWithRecipient(BigInt(20e18), user1.address, owner.address, BigInt(10e18)); + + //var blockOld = await network.provider.request({"method": "eth_getBlockByNumber","params": [BigInt(17280000).toString(),false]}); + //console.log("stateRoot 17280000:"+blockOld.stateRoot); + + var blockNumber = await ethers.provider.getBlockNumber(); + console.log("blockNumber:"+blockNumber); + var blockNumber2 = await network.provider.request({"method": "eth_blockNumber","params": []}); + console.log("blockNumber2:"+blockNumber2); + + var block = await network.provider.request({"method": "eth_getBlockByNumber","params": ["0x"+BigInt(blockNumber).toString(16),false]}); + console.log("block:"+block); + console.log("stateRoot:"+block.stateRoot); + + await contracts.dummyStateRootOracle.setStateRoot(blockNumber,block.stateRoot); + + var slotPos ="0x000000000000000000000000"+owner.address.substring(2)+"0000000000000000000000000000000000000000000000000000000000000000"; + var slot = keccak256(slotPos); + console.log("slot:"+slot); + var result = await network.provider.request({ + "method": "eth_getProof", + "params": [ + // the address to query and generate proof for + contracts.ferryOnL1.address, + // storage keys to generate proofs for + ["0x"+(BigInt(keccak256(slot))+BigInt(0)).toString(16)], + // the block at which to generate the proof + "0x"+BigInt(blockNumber).toString(16) + ] + }); + console.log(result); + var proof = eval(result); + console.log(proof.storageProof[0].proof); + + await contracts.ferryOnL2.connect(user1).disembark(owner.address, 0, blockNumber, proof.accountProof,proof.storageProof[0].proof); + + }); + +}); + +async function waitTill(time) { + var currentblock = await ethers.provider.getBlock(await ethers.provider.getBlockNumber()); + var waitPeriod = time-currentblock.timestamp; + if (waitPeriod>0) { + ethers.provider.send("evm_increaseTime", [waitPeriod]); // wait waitPeriod + ethers.provider.send("evm_mine"); // mine the next block + } +} +async function wait(waitPeriod) { + if (waitPeriod>0) { + ethers.provider.send("evm_increaseTime", [waitPeriod]); // wait waitPeriod + ethers.provider.send("evm_mine"); // mine the next block + } +} + +async function setupContracts() { + const [owner,user1,user2,user3,user4] = await ethers.getSigners(); + + // Deploy token0/token1 token and distribute + const DummyToken = await ethers.getContractFactory("DummyToken"); + var tokenL1 = await DummyToken.deploy(); + await tokenL1.mint(owner.address,ethers.constants.MaxUint256); + var tokenL2 = await DummyToken.deploy(); + await tokenL2.mint(owner.address,ethers.constants.MaxUint256); + + await tokenL1.transfer(user1.address, "1000000000000000000000"); + await tokenL2.transfer(user1.address, "1000000000000000000000"); + await tokenL1.transfer(user2.address, "1000000000000000000000"); + await tokenL2.transfer(user2.address, "1000000000000000000000"); + await tokenL1.transfer(user3.address, "1000000000000000000000"); + await tokenL2.transfer(user3.address, "1000000000000000000000"); + await tokenL1.transfer(user4.address, "1000000000000000000000"); + await tokenL2.transfer(user4.address, "1000000000000000000000"); + + const DummyStateRootOracle = await ethers.getContractFactory("DummyStateRootOracle"); + var dummyStateRootOracle = await DummyStateRootOracle.deploy(); + + const FerryOnL1 = await ethers.getContractFactory("FerryOnL1"); + var ferryOnL1 = await FerryOnL1.deploy(tokenL1.address); + + const FerryOnL2 = await ethers.getContractFactory("FerryOnL2"); + var ferryOnL2 = await FerryOnL2.deploy(tokenL2.address,ferryOnL1.address,dummyStateRootOracle.address); + + // Pack contracts in an object + var result = {}; + result.tokenL1 = tokenL1; + result.tokenL2 = tokenL2; + result.dummyStateRootOracle = dummyStateRootOracle + result.ferryOnL1 = ferryOnL1; + result.ferryOnL2 = ferryOnL2; + return result; +} diff --git a/src/hardhat/test/FraxferryV2/StateProver-test.js b/src/hardhat/test/FraxferryV2/StateProver-test.js new file mode 100644 index 00000000..7e1c2a7f --- /dev/null +++ b/src/hardhat/test/FraxferryV2/StateProver-test.js @@ -0,0 +1,136 @@ +const { expect } = require("chai"); +const { ethers } = require("hardhat"); +const { rlp } = require("ethereumjs-util"); + + +describe("StateProver", function () { + it("setupContracts", async function () { + var contracts = await setupContracts(); + }); + + it("proofStorageRoot", async function () { + const [owner,user1,user2,user3,user4] = await ethers.getSigners(); + var contracts = await setupContracts(); + var stateRootHash = "0x74433d8ccc5fef51a0e5861484fed9684ccbd1e3bc0c544bc7365ea95cd653c1"; + var proofAddress = "0x85c5f05ae4cb68190c695a22b292c3ba90696128"; + var storageHash = "0xddedd31b9fb085bdf1d7ec9d85a393890f7d9afa03b581267386020f9be2f7b2"; + var accountProofArray = [ + "0xf90211a0063f8a6816ae01d23f14be8a17de346d31f4855eacb4a45521296f09b542b308a0778fee35ee79d05a9b4451208cae6bfbcf03287a3350c985f8adb7d471a22f68a0d95327f260d936494f00f592adb18b9d5493c6e01a265d34ac63b3821dcfe282a09fa3ef0d0801520f2aae91fb92942db312ddc8024ff965e494652d14b14cbfe9a0490aaf01e5ffe4a21169008b4dddc345d063267cce1b2f22da326011985ff4b1a0ab6d25ca52c1e3d6c5cb482a81208c6e02bc7d924be24c69e22ad7a7131e671ba0200c1a5c61d3e7303ad893c187d5d6dfff4657f1bbc75e2194edae77dbac12c3a08dfcc87d296f1026402794b8c60d02f8b41c99524c963d9f11360a7e90051ae0a04aa5189e82b139efb697def42fff870f733f22b57852db99a337912323091820a0ca659961c67b973d3791c790a50cbf2581536ebd11857755893a0dcc453446aea0e43af1ca44adbe7d83e670b9e0aa2f3f2cfc91b1bbd38c968b38f91832aa0f08a0c0e508a8491258c65bd88797d52229d3dc0d03c165274bfbdf82c140f2c32687a010542fa2e9b9834195c40cb9f07a2b363b814d146f8454e3a0a346de36d0cde8a0f0c75426c75b0200e44d54d6a4b783ebc276967f96b27e50a57bd74e015e3b07a02b251744e88d3ecbfa90f28d3b4a5c68f639066270386dfdac0ba08f808b134ba09fa814f13c9cdd69ba58202359a08b24ecafeaf4edcc69e7fa0d82ed41a3692480", + "0xf90211a06f97a33107bb4a62032f19b7dc2c0ab36787d16acc25fa983cafe0961363bcb5a015c31d94fa31349972daac5c38681beefaf83a99aec56dddc55dbace5564966ba0606c8541fe69a7bfab945671713a925497e214af46436326ae795620c95b4452a006b436d546b1c482787656ba86c247de2038a961e3edb670675e897bcd56aeb6a01a1d3169c1cc141103558af4243bedd5f41478dcab22d172afc3ca3c6f539f10a026b71d118e0902815a4d5345a2fd0d2bb79d349deb59ef7ded92bce80c6ce428a04349e18eb6372e48cbe87bfef827457e4159935fdbfcdc479636e11b6a5d21c4a04a4c5f29420dc24ab3efe2d246f1bc5087fe172eec4c0dd4d950438dbeafd25ca0313269d386000b827137929bbb0181bedb0e70cdedaee1c7e909ed6e4e9d051da03ab7215cdf11ad4805f4789c75113159f950aeec5a3d79ae0d27543e94ba0f56a0579eeac9edffc586db0b4741787875a7a34b66def0b1037444151d7a64699928a0449cf916f6c7f3f7c652458db4d5c9f3a117bddb32baacf3a77eece641ea078ca0b968a9766c35b0f497683206eb26d232ed4590e91aebd110f23161f1aa4b2119a0bca560604adf865750bf18d65aaadb467b489ff30f7c07e25bf767ef0d10ed18a008e9b2b2f283e8408dcf7e2bf6715298898085a18ab4e05126d426c088b4d023a02ba440a7d55a231e49b4aef3f76947ebb1a5d8ebabcdcd7d284cd92e96d69a7a80", + "0xf90211a0da553e35d03aba17a0683b37e282d060ad027770a31fa7ed37e5e887abd12df6a0b06cc8e42ccb0a548e27e47097b0335d42c6d2afab7dab2708af569974fc0bfca0d9fa88fe7fd1ce8b215462397c1f972dcf0580728abf1dab87c31599020b84c8a06156aa908a3c42a7680400e1c6290894801a6823da5e433e7e285307f60cc5e1a0b993b54e3b902bdbee65eba4d70d0c6535d52d165530100b55bf66afa9139d8ea051b7cd178ea4adfec0a30f1decf8104a5f4ed173a62cc9b1ac60e9d6c429e499a0b60ffcb53922da988121c7ecaaf5995371f34c5f51d32a6460d25282c021edd6a0fd08b8446e23b416d85e297cd980dbfcce447c48925cffbfb8ae08fcd4049553a002b1d92024e304bb3a878e742cc043682f62df13689a451e66144fb4f00f363ea0422ab6ba2234a7a79020ebbd3d28ef22979a665f071f1c099110effbac6b624ba048d48912c773a99ed6a532090b9dfc25b548dadc0d88f9ec22f05814f40e5924a0f2d9b177d9b0f42b9b49438a7abcba987db7b00a6a1ed5494bfd2cf95a52ce63a0a2c6f6183f361c756bbae3aac9343edcb20aece1aabc44583595fb4fd8f1796aa06b8fb48388706280b138ed14acdae6fb9f4538ee238da235aaf6ab5749ef58a9a02b0700222cebbe61c891f1f8b2164ebb278677d66283ee25fb50fac5d5523d5fa0b67ceae835fefd178c903c2c591fbfdd36d20646c7d2a5d84d165e3cbf4d7daf80", + "0xf90211a0c9aae40babe8471d670d0a822a190c09c9350b908551a284781428ed0b71a0bca087bf08d8ad78ef68d91ba45e4c47a35a67e7fe0621136be52e2795952d755846a052f6c5ea886a91c15d76ce27e050c13c72dea1940f400a022135cc5cb36859e5a05f48be17d9c2e492dbe22900391926f48159d7bf9ab34399319375b8183e2469a01bc28f3d8b73be5b09ae4f63970ce9152c67471dd6e58c554edb27c83028e59ea0dcd74142ebdb097453cbc6ba3582dc432047ab13aca52de5b1c247936d6fbabda073105bc08b2902de52466ad08bba60550fccfc41a8f75fa1a6ef6dcbd89f1fbba018479082da79a1cb09fb21f080eb8478d7a67d34b30e9c1d86af4e8a4585dcbba0f3b72286347674398ed9caca19868c3d55c430df4a01a7ee645abd4d6754da59a0460b8525a52e36ea1f04fa012b4016661648d50213b8f199a82b89080badf510a0056f44ff899f32d6121c55e80c3c4f1145b5bb179c86136145dd253ff9d216aca07b1410570b6665fd4d49e32c62bda40f57b96dc1f298adbd795b840159b15f18a0b7107c06301735eb1c3ffe9ebfa884b651e2e8bb78e36f8472829c5d41223043a044b8138eb9c6c69498264c3523d4274f2607dcccd0db8c525cb44bcae549579fa02d21c87ab0d9f71a289e524736a81c107305c03f565f54d2ed6cb11bb65d6012a04581814a9c51d618822b6ab11d168850ab84c06ec26f92fcc736cf551e0d116780", + "0xf90211a0629b867903b4d24aed612fb32d9236339873a7977bfd349221e302eaac6542eda0a495863ecff66c300343defb19003ca28a9a8ee7a2fe0c6577910d16283b9caba0db4728bbf8ccf6f76fc07725a2a56238d3b5839b5110a795628eb98490e46f10a028759ced9179311ab6804b194152a6f711ad91baa752f8d7a5604ab830430dfda072e8d388711fac65292ed4b2303c73c7a1b133e897ec4c1baa5d5c0d3b051bfda08d89ba8286abbcf303cb66c5930d257bfd93f3d87b8f9ad3ba812fdb16a8aa94a09f250305bd6163c57d0009d50641f7d8209e91ec6639191c53cdebf7773cd3a6a0bd5262135f4c68ddf1642ab36082bd6d9aa8bf21379a653eed8e7869be7023bea0764d2a5b78cf2925191441cce813eb5aad293efb6ca18579051b6d1809d73593a0a843da34246057e2115a89c724a53d2faab808622086f7ab446cd3603a36b5b9a05c25bfeb91cc5d5a77fb0fb5ad14d6e26304bc0074dd5b757ff59d0b344c8c7aa0aa105640241362530496dd3b0357ad153e22c8a58f6ee3b3284813deac0c3f81a036691d0235be05a85fbd4bdfe3b8bbae2c2f04b2e363497507e0b049c75d763ea04341000eb9e0e40f47970f29fc3231fcf57e52898289a90ae94d41521c74377ea05ed52680cefbbbd3edf4f5bfde430d59b10ea3a7153c12c265aa887289a23e86a07c657573ed0c04927fcbc42fe0e1be7026d6d1c10c95f23d3d2dae85d036279080", + "0xf90211a065131819a3e39145dba4fa16ac87519eb3a42eeb041d8bebdbe5a90f3d452e80a0773aae9ce303d4c4bbe254b31af5ec6d192572c4a8f26acf9d8fb9efaa009c41a041ae7381c1756ed985efaceab11eca33ffafd5d72e93f40d63fa75bade415a59a03ef6ec059d25add4c39faf2f077aafeea91d570e6e3bbf9886176431f37f5d3da02588af7bc65d49f54dfd926af32ae31c989edfb3a7a0dc0b7e7128caf5059c7aa0548100a716ad9d14b28f03624cf723ad1ed2cca3c1476ef3ebb87e456a799feba0a9e4ddc5a90accdb75651d2811623009cb3a80192c47af40fdd0fe468dc88a7da0a332ab0186bbc98f956f4244294294d5bacebe530d9db1fa0952f1232085c362a05cc40b2c536522bffe82f6a93a8c1eabd608b4a6b12a293d647e3aac47748ec1a09ee425aff866e7dfd884dd4f45e678d97064fe876353a81b9fca555668eb9b99a02877e617b639e00821d19175aa4cca9b0402cccdf6a7a1124d5e020150a9e77aa06ea9e19dbef3f8a1606248ab2228c4f841d4e63b6513a28edd71d28ea038efd4a07c4312858fa557eb322ea31df889104aaee9107d0455d2519d79dfcf31420677a02ceba86bb4752f353716be28e99ebce6892d1bddc938ed1651ebf10384360050a0882832dd1ee079f8284c59c64abc0600709350babef75844a0c77f4d662162a9a0f29d9936a6aa8c93093c7ccba46001829912979965a1d6bbb24ef595790c506d80", + "0xf8f18080a0297dcc9399042b589677674c1f97a41e6f8a6423d602a5859fa9b6c3c3171c86808080a0ae3152af019c003fb39690b10c554d531b4420ab24ee14f74c1a3a09d03f0e2480a0d0d30507c7d9402fda853d63ba3eae9977b3e414525c5cc400e4477a71bf861aa09ab2683ff9aaf6480505e9e0b12fd5558ead186e49bdb0bd0c7b45ed264f25288080a03359d9ebd768f90ab01a4542424ea3215fcb1db7fb8c4f0d4b410647f371501280a0abc480a6cd07dbd11cb08eff42fe667b54db45d54ef30d9adba065b4f8b4ac63a07523eb39343bcf3922db11596a61cd8a42b4b44fc3972b26990fe39d421da96b80", + "0xf85180808080808080808080808080a0a706cd8b6c24919150405dafe0b258106cae6382878108fac63d536b220d350ea020a7cb6b464e5dc824ad2b31a4eba33d702c48b88c6c5bb91764c7536a07427a8080", + "0xf8669d209fe5f91669d7be4dc0788a7a6e9a6ebb74a71b10c51eb752612d24c4b846f8440180a0ddedd31b9fb085bdf1d7ec9d85a393890f7d9afa03b581267386020f9be2f7b2a09a166ea7efe7b7421ba941a74582753882727c67009fd1e26c9521a43ab4f6fd" + ]; + var accountInfo = await contracts.stateProver.proofStorageRoot(stateRootHash, proofAddress, accountProofArray); + expect(accountInfo.storageRoot).to.equals(storageHash); + }); + + it("proofStorageSlotValue", async function () { + const [owner,user1,user2,user3,user4] = await ethers.getSigners(); + var contracts = await setupContracts(); + var stateRootHash = "0x74433d8ccc5fef51a0e5861484fed9684ccbd1e3bc0c544bc7365ea95cd653c1"; + var proofAddress = "0x85c5f05ae4cb68190c695a22b292c3ba90696128"; + var storageHash = "0xddedd31b9fb085bdf1d7ec9d85a393890f7d9afa03b581267386020f9be2f7b2"; + var storageKey = "0x6e1540171b6c0c960b71a7020d9f60077f6af931a8bbf590da0223dacf75c7af"; + var value = "0x6372efe7000000003b9aca005180db0237291a6449dda9ed33ad90a38787621c"; + var slotProofArray = [ + "0xf90211a096e646b6f52e5b2c8bd41dc8515c2be4b4af57372c6577fc0405503814fbd1e9a0b06562dc8e323a118e1dbf55fd2a4c80790e25ab38aee857e39a5231721dbefca0d694f42e8a997284fabe91d5ed51f9c8e2b04b5c700f7be74c1d25947c168ac3a0aa2f82c61e73a8bda11437d802b0e0444bb780a309707ed7ab01898dd2f559c5a07429d025d44c00879122dc2f1b795398df59d4e9a418c10d26ab62a89ec5032aa013c99041a859cba7bb6f7657b538dc25e3ec4a5b672dd9e5e608dff71f8b2ce7a0fa4a510450bcfd4a4e95a406ccf367f2743286483f39fd4fa8262c261025d96da0ae2761011f1d32fc69cd17f481a7f8c8004b8728623060eae441a2e017e50080a0cb52aef1a30c6da20abba6456d7618e502c15b57ca0e157585278c62ac0a0387a0100051d0e4dabd2a99866af3f5945aa8fbb82fcc0d1096acce805e5cd7b11f6aa05d53871a3e2d1865f90882d6fd62ca27e52823daf4aa4176ea069321c94d4059a02ebd718c4dd1fd6bd02abe130b17b559a2c4e30869f2483a1d2d07e0395ee3a8a0a2d5a57bebe1269668860c87c1336285f3036e31f7536bd30add90b68254ef6ba061865cab2e64dd97ed5c1cb43a7ab0f8d727e73c19cc89b8d63e0cfea6ecd3aaa07f77f30f9c94f5ed4b12eb092d8c5780883d2821c84eccf8e8ea829c883fe01da0040986bf9f6befdf513d9dd047957f04366fa1bd42f280111b79126812ff899d80", + "0xf90111a02db9d465a1e9a24e985a1932817dd8ea2e3a964edcd111a7f127c7847fe9c2a0808080a09a9ec0fcf0bae7cee4522a375ab1c1ad919bd1c9d2c505fdcf0477be79c07b9da03326b59010213a80d161e1cd0759fe812b84370d0161c74f398c0c258b4a063aa0ffeb7927787ed063c5a765511c3089c25baad8ba2a40cf6c6afecff43d73f516808080a0ba7ca69e8ea2d28bd11ef8eddd9b60dbd834d8b967258dd4ba37592971ea07618080a0ff05650c5fd25fe3be7a20d4f813864f17c6a9c7e10748f5367bf9546fea6519a050d54829b7734c77c85c1c1d7fb42872bb561cada3dcc7d4fdc819234c38d04da0c1bf290ceeacf7d0d2981cf284ea1ac75e0e6895ea2b612d52d2617aeeb643d080", + "0xf85180808080808080808080808080a0e844b59ff5a9e45748fa3df9b3a3eeb713b84296a02f9ba9684abb0f2999050b80a099f2df66a4924bd666f26e484e08155ff5fbba23fd96eafcff9f315d60a0af6980", + "0xf85180808080808080a03820e741e78e7d5d24e5c261e018219455d36d5980a2f4a4c7d0a5b811c311c480a05ebc1d1b04c9a9fd05460c746c431e5dc6899b14822335743b9334b5fbbbcdcc80808080808080", + "0xf8429f2023aaf2a9471d0444688035cd22ee9e9408f4d3390ce0a2a80b76aeab390aa1a06372efe7000000003b9aca005180db0237291a6449dda9ed33ad90a38787621c" + ]; + var slotValue = await contracts.stateProver.proofStorageSlotValue(storageHash, storageKey, slotProofArray); + expect(slotValue.value).to.equals(value); + }); + + it("proofStorageRoot 2", async function () { + const [owner,user1,user2,user3,user4] = await ethers.getSigners(); + var contracts = await setupContracts(); + var stateRootHash = "0xb2106bb97488c9c3cdf983bce5254fb71ac3d5d8f277e49509e54c7c68e81699"; + var proofAddress = "0x85c5f05ae4cb68190c695a22b292c3ba90696128"; + var storageHash = "0x25182d7f7a22bc53c57418f96d7aeb97043420a38dfb495bac70c0bc61e27c73"; + var accountProofArray = [ "0xf90211a01a723d5eed878070b60b01601a9e049ad49e3bb5828da41e43a7f0010e255e61a0d252b888f72e1eda5f162bd06d2c53eeaea776f0568b4a72670cebd12806171aa0817a410e142a5eb939bfd8828c57f62daaa2ca4a9536c44b84ae2897a87eeaf9a084aa10803584ecd756aef5d0dfae4988ca44f35913a1d8b2a7760550a3a398e0a05ef172dc39a15b6e2a050660af37437fbb00bcccc3f7a65d02a58e169d9399eda0f0e12f9586e7e86fa17b55d5e1bce783f5b8edef530dcebf68a210bcdb6612b1a0a1545cfbd048c81b1eca2059099b499776f872bab3a669c43a50ed01008c540ca08473e04d6da725a51c21187234b0399e38b4035d1be4c1dd23ac257925c20518a0cc420730113f20f8c4eeaf0f4f8c2ca77a7ab982253c3e776c465cc70c7262c7a0619efb16bde458239f020bf061c49d547acd9909bb4459bb0e060ab50049e08ba063dd61b4d8d421177c6b188f08d1dfd5b85dac5eadecc23a9e766a358a7a4703a05ae021e15ec6ccc882796e9672e3d8ab33d39da694ffbceb4a6844d695056b3da0ada792974fc206aa398fee4d20d166a860c98527c02103183617dc8bf1151c16a00b1bfbd573af88d94858cce35fb347c4cc904d40305155c2eeabbd5d31a3b550a01452ab125da5bf0bfbc8517ac295c3dd7017203173089a0ee8a3a99c13761845a0abefb011714826751a88423ac2dcd1859e81e44a68ec51de6c9080bab40f6f1980", "0xf90211a09f3731718b095ac1e5a58fc4c86cf3d6df3ce5f845b7690da7500a800bf4d912a0cdcc6968c59d293ca42eef22ec4be1d5366dc5277508e9e65638a5f6d5b70052a0f34946e87913878ff1106bb2a372ea1a7c1ac2c7dfee8df1ec3b58cc2ef90d50a0a2d8baa9a18cb25b3c75bda6ea5de04b04fded6e1f7c1e8a258da0fd7b08fe95a01ff1b77e403b932f33ada57982dcc15eded603fa88d230fb9b664b524a9fec97a08fc04ecd37d3bc802dcfe5402113a3f8fce9aba7600c3ff45c5b6d7a0abaa888a0a8232263d1424153622bef01c310b5d083958e0684918d4133ddec7daf096c2ca0de2f467ad091d97b89159f88bb896a39843f9ce13adc34ea4befe73dbb1d3dcda0bd13dea02ada52e239ecf4653398567d0761128fe5be0837cefe413c897581fba0a439b63a65c286c8c9caeff6d10ea7541dc703115e218f95dd8a8d04c8f1d1bca0e00612ec677aa0e5381f1293af0c02cd27e6284c072807a3d221e78612cca825a01a2ea32b35b792c26e7fcfce0897b74aa2d9912caf33e38c6b9505ca3a8aedbba0786ee7120646452498d7b982cc963ff665c7adf4e45cd3a085af577bd18d1156a0d202b8adc39f5c6f9fefce00abb5ee3ec4e5391ba96c8fb05ae1734f1e860e19a083470ef744160bb6dfc135cb0859c0e26cf3c5d00b8f8d9696ae1decc658533ba08f97ea9d0f29e83f62983b29a512957638dc0bc2181b3eb925ad2b22bf42fd0180", "0xf90211a0cb3a88cb8befd461692c7a068db1643bcef2dc9be12f213faf8fad7cde0f38e8a05158ea34ff783d7d7e9fe6a0d0b305d9cf43adcff3434bdf562c019ba7c9a8bfa0e7d7db595d6c9ad52058bdef748885927a74628ef67eef702fa84eaed55dc6e2a03682b17c55bdcc18e6178a437da05a497a3d1090e702250aef6574279fdd0ceca00e776cca9597266bff62754d8a8573f482ca8b8c1f3164b3a4a1ad50d4c7e37ca044caaff44b706f483bde2eebb914725fdda453376a195d28246a65e1908672c9a0dc1d85b1b2e6d11acb2d30d95c94809feea969c41d0eeca234d68fe1c0e75036a0b07e599ee4911f920ea7b7d32d38dd604f3709fe3d7ba8b16af48f7fa540184ea075c97851fafecada309f1d58cccf2aba43921291eaff3a4fcf0376af9c798adea0f8c1ab47a6d41a39b447bb874157f069065625f350464cef6721f9a90e2b508ca05f481e5de9e07e74d239684fe9412e7121d3bc2506b1bf1bfbf1949d0c46725ca070793c94f198367dd3938d368988e635eb833c50e9b946809606af72f066b545a0b7d30bf578d5930c85c29c4a9b06bed6bd2a9e6da7b16b4a93d089367fc9467ba02bc5da04f2871d2c2d6da086a0e7a71d93ed33e39614ca8d21199be5543a4095a01493ac4af57316083a0df85e1f56fda4fe19d1e047d93e068d892bc2eafc787aa042196633a7c74333a8d89e7bc04859c937cd37b129ccb7ec29064556c439e73c80", "0xf90211a0410c7d5d72e5debc114f2db3e6218105bd83ebae749c85d2a1a6793924713553a0b63154e30f0f73e8bc2711670ce277fb44cd64e8b698d850b0b0257a293084dea0bbd2adfbc55e066ca42962938bb01605f5789870838720b64c242b084c105648a0a15fcd8eb5b3265db5f9f855a08ea3e54bbd6a9ffb6fd606c48af61482b3d430a01368cad8ff2076f20398c6f29ccbac4bc67021eff7231e309b81421a0c3fa668a0a15a5269d4658de9dfe4057ace10e11d3f734b6d1051b0cd7af8818c7b3187c6a0eed90de03c636c5ccc20e4eb3abbda4ac93d21e138d5a712669e0cdf8513dbeba069ea9afda593114899a03953e20fe4b44306be365749e3f68991137eaaa46e0aa0817c1ef68da819c8986a9e04c6bedccb2f76c45bf13f0af701b0b72337854d47a093d8d6dfd52f3b091ab269916ff29ef474b191ae26814393ebf0d0b6dd5134a0a068a9eb54750b87b7326375353b2eb7f137aaae51e285a4f5dc2025a780964c21a0218ccba6bd92e458f9e44a41e37007329e4db5c5ff0cbe0e8b4342656c473831a024b5caa8ba9d94b7b42fbbd939de0a5c10c25ce66b8d1a5cfde78940001b93fca0e46d58277634e4a5fb7d58bfef1790b7692862da4da8fca4ae01ed0343703aeea08275d7fb9195e8fce9d0ca736efc85b25ab03c566ad9626e39ba6384040de7aba0bd5b05d7399a1e4ec62914386ac6cbeac8ea8120aae5a9b2ae0446f1ed8851c580", "0xf90211a04fe0a67d9ad490e4cc75a24f69b3b2e4d43a8793004abee3a5e2538a76fe5fb6a00f4271f399cf7733abd5063ef3966252ecae74db766b74d5a6b6e5b98553c69ea055db680a371980533c72f85c68894cd99b0ec43be597bba9754ee8794a2a9167a0bfcc7cbf12dd3bbd8710bac2517216683f8fdecb818c52c517a51082e4c019ffa0759e4ea06da2d572cb9625eef982ffb9feb8349760dec68ac7752a420e40a7f0a087f8576953aae939b3ba206cd8c57e7125cbc95a9fc99fa99bbb8e32879e14b7a075957b8b65435e9834b8ce99d1ba0ddef93dafd14f298c2a245e3e47e087a4e6a0ab015acd8b103f6dd8f29f6f22f9a9a461cf0938743e3aebffdb0009b9692cd7a03fe24d3b83fe715a22cba19f0abad7113c1757a177abfce239388caad79be2cba0dac2cc8c83f26b07a690dd70d6aff2e11b9e205ff28ac5cd6d28be8e7fc04443a0243b47ec8ad079878303aeb7c97e2f74e7549eecf149c1b7fdd2059b46b114bba06535f8ab578bcf6df58429e23aca146da24ab42790e795b9c44728c4f21bdb31a07b422c62217ac8c24274b0f7742445b6965cbf22bd17b1752bf84e3a55c8a3a5a0ded49559d87cd7b2d2f7b63fcdecbe6a40e53b4a72433e94ed30f3887352b5f2a05da68f26ecb75a1b6f4cc0a6b90cae46ed2a431465d5c9cf61a539bae234c915a0f09713c84743d5329a4b2b1faa7a938a5c4e6dc761405d0b8ee2532d0a2cdd2c80", "0xf90211a028181f4abd0b94bb57ea4c0be29e9b0807813a9f3fc68f9674106c5727ee1f56a04ec527211f2d469d72a71ad3fafd7fe1d87b902d6032da15d939c9c84a4883a0a041ae7381c1756ed985efaceab11eca33ffafd5d72e93f40d63fa75bade415a59a03ef6ec059d25add4c39faf2f077aafeea91d570e6e3bbf9886176431f37f5d3da02588af7bc65d49f54dfd926af32ae31c989edfb3a7a0dc0b7e7128caf5059c7aa0548100a716ad9d14b28f03624cf723ad1ed2cca3c1476ef3ebb87e456a799feba0ae8a008245cbb4f5c8f3f9228802008374bc79fb699e871552980ad8e4278ce4a0a332ab0186bbc98f956f4244294294d5bacebe530d9db1fa0952f1232085c362a05cc40b2c536522bffe82f6a93a8c1eabd608b4a6b12a293d647e3aac47748ec1a0823d98ca54c107ea7b3f5e06a40b9f98d374e515217ff34ff1e66d1312e1350da02877e617b639e00821d19175aa4cca9b0402cccdf6a7a1124d5e020150a9e77aa06ea9e19dbef3f8a1606248ab2228c4f841d4e63b6513a28edd71d28ea038efd4a000050c00eb495b2c854d2fdada6c04f1364911be7a7957b54d37d8ad3bf9eba7a06171b02c500f449771bcd08ee54aeec1f07811a4874f7efde2ada3e3bb0dc4f5a0882832dd1ee079f8284c59c64abc0600709350babef75844a0c77f4d662162a9a0f29d9936a6aa8c93093c7ccba46001829912979965a1d6bbb24ef595790c506d80", "0xf8f18080a0297dcc9399042b589677674c1f97a41e6f8a6423d602a5859fa9b6c3c3171c86808080a0ae3152af019c003fb39690b10c554d531b4420ab24ee14f74c1a3a09d03f0e2480a02ae62257593460496ed713af14228969391b246bda782e922f0da537f40ad2ada09ab2683ff9aaf6480505e9e0b12fd5558ead186e49bdb0bd0c7b45ed264f25288080a03359d9ebd768f90ab01a4542424ea3215fcb1db7fb8c4f0d4b410647f371501280a0abc480a6cd07dbd11cb08eff42fe667b54db45d54ef30d9adba065b4f8b4ac63a07523eb39343bcf3922db11596a61cd8a42b4b44fc3972b26990fe39d421da96b80", "0xf85180808080808080808080808080a0a706cd8b6c24919150405dafe0b258106cae6382878108fac63d536b220d350ea0eb4c2a8a5aed6d30971c2c73651095f82177de1fed6711ac3b83f3431934e54a8080", "0xf8669d209fe5f91669d7be4dc0788a7a6e9a6ebb74a71b10c51eb752612d24c4b846f8440180a025182d7f7a22bc53c57418f96d7aeb97043420a38dfb495bac70c0bc61e27c73a09a166ea7efe7b7421ba941a74582753882727c67009fd1e26c9521a43ab4f6fd" ]; + var accountInfo = await contracts.stateProver.proofStorageRoot(stateRootHash, proofAddress, accountProofArray); + expect(accountInfo.storageRoot).to.equals(storageHash); + }); + it("proofStorageRoot 3", async function () { + const [owner,user1,user2,user3,user4] = await ethers.getSigners(); + var contracts = await setupContracts(); + var stateRootHash = "0xd59674eab1addd5f37d716ee0eaa8bb7c40a0cfb2d982556eb85b71ebb3f5b1d"; + var proofAddress = "0xc91b651f770ed996a223a16da9ccd6f7df56c987"; + var storageHash = "0x2dd32c16cf2eec73b85319ff65527c16176333dd1c7c042d678ab48019ff6965"; + var accountProofArray = [ + "0xfeffff80d8e0328926b84bf4ec9d0a2816e0b38f5cda3348a280e821fa765529f27973c780a960d038dedc80bbbbe042af4e8970bf98c8bfffb9b5921eb020507afa0e01b2807242c96ca4413626aa7266926037dae7754109c7e422c9899eb9c42b4189a8828005294d398c4ef9a86d752ba5568e1d01de30a76e2c705dc56b6708af69fccdb880cfb872a9e47fe946d8a5eb47d9a9140655217ce0020b819c1b98dad218131ced80d485da2638be45506378830886bea5f626f3cc12a9c77a0fde7c118c8e78b92c8008c8f48f2f6b69aba1e65dd9438c54bf307df846651d9a1bb9497e2756b217318081d80f45fc1c6e6400976d7349ebe03b8cfa4ab6953c7ceef72c9778e17a54df800358a2314ad6728f57c13b593c7d0291629984739b36b2b9d5c4e461025c3f268054523197a9fd381368b9d6c6ebeda2bc5c72c6ee2254f724397d7027eacaa4d580875f5fe38fd6d4a0c379d34a03b787f42310422122391821edfff3a734a3190f80b03781c9d808d136b86166a223f4ddddd0359bec2f7f9e971a532465a3074d9380a3d521c266bf8bd9ceb8c08a2835cc2f48006b65390fa010566c9d4b8b75771d8065bd0796b3e050743f27e7f009e8f525305566066cd2c0a62089ce5c40e9b5af80f5f0f6858e4e0f18c6e7c6934fed592d5a4a020ad443049c8e2b4002108126aa80bd6d89f9b999939648e3d5c6da8970c4772c6bf1d9389e351580a381878556fa", + "0xfefebf803ad5158a6c6fa16fd45daa51b4047ecedb4dd6c2255027aea623ab048cd3b00b809dd1c62107c413e54c1502e1bf6f966b9dbb71518e48cd7d4fc86330ad351f6880e61bcc4d033b87a7483b0271abb30bc143801e0a4812b68fc35a88432a3200148007816f99ba92aa3692d75cc9faa69ce7ddc78800526103f076f10f25ef830f0b809a27fa1ec6b5f5245162860762c543f7380000d2f9ac01a88ed07cbc6c4b51708007317849dd41fba8c16d73eb304225aa092ba895374787d0f44169f66c65a1a88065343752d0fbe3466e2dd202837b2e15e34ce41da3ec6aa2fa1aeb00354ee54c80b276d017a91f3ba9ddc07b86456724783159b517ed98795b79d61ae2d5c8bd5a803429809a88fc650fbdfffe7396821325f053d288a0af2d1b423b1726d9db2ad680c20b73831cc68854b721454ba81e6b63c83f1369821ecfaea5f549af8e1d518080e90cc596a5920d8ff40de53cc6db9097562754542e03b59b605eaafc5aab818a80fe48be3ddfb88840c98da7ddc1b88af1a9322b2a98751f41880aa8f60e94c62480da0b68c297ad660d29d6ab0280a99bfbd4aa36a584c15e491cf879c623ae6a0a8091f6bd240eb2b2ed5014462b0a73764f1477031a7228798f9f57ea3b12f57d28", + "0x3f1ef32dcb5bbd7f64fd77ab13fcfeb8979d8ffd1acb9fd91597872966cd390c1901f8440180a02dd32c16cf2eec73b85319ff65527c16176333dd1c7c042d678ab48019ff6965a09b6963e45338401d733c3be4fbe3c7d5a87bdfe972c90e5594e4d20fdb70cf40" + ]; + var accountInfo = await contracts.stateProver.proofStorageRoot(stateRootHash, proofAddress, accountProofArray); + expect(accountInfo.storageRoot).to.equals(storageHash); + }); + + + /*it("proofStorageRoot n", async function () { + const [owner,user1,user2,user3,user4] = await ethers.getSigners(); + var contracts = await setupContracts(); + var stateRootHash = "0xf3ac1098a73159e693da20a16e26deb723d8c80ee0816995c5195fa8f02de71c"; + var proofAddress = "0xe9cd84fe4ddfb0f016e3264791923902906753bd"; + var storageHash = "0x28a46df05dae7001342b4d474915e4a7d763b242f7cff7bdbd59fbef44f7262e"; + var accountProofArray = [ + "0xfeffff80846c91f816985cdb8f7631b3ee2a9de2b91c2172f1413f913645cb8a680919a380a960d038dedc80bbbbe042af4e8970bf98c8bfffb9b5921eb020507afa0e01b2807242c96ca4413626aa7266926037dae7754109c7e422c9899eb9c42b4189a88280be0f7a3464035ab96e60cdc18b929b7dfd3a10a40dfefbc143e986de16810d7380cfb872a9e47fe946d8a5eb47d9a9140655217ce0020b819c1b98dad218131ced806042ad42800c6970a529353dafd0760d0a4a7036c70e5b6bdfb09dfb65d22d32804f8d7f9db44e9fe03185824d7bff6c5501579380056420600b39b1d8a5a1c5b1804a0cfc062996d319cbb63ac0bb18eae94072e97f6fadf21368aef86622b1775480a4adbc6dfbb2836cf73c10931d02904ff0cb1b2b70bd9b53c3ae67efa57793898054523197a9fd381368b9d6c6ebeda2bc5c72c6ee2254f724397d7027eacaa4d580875f5fe38fd6d4a0c379d34a03b787f42310422122391821edfff3a734a3190f80b03781c9d808d136b86166a223f4ddddd0359bec2f7f9e971a532465a3074d9380a3d521c266bf8bd9ceb8c08a2835cc2f48006b65390fa010566c9d4b8b75771d80f542607e29ea3c228a4b4e438853297dcb39f1b9d79311d3c164f7aa628354318034825e14cc59a1a298fdd9f34c94e25afc14445b90cc5f8923e4a6f16a86bc16801e0247c0ce9e08d1e28734f9b2b5ce145ab0d80bf290456b29045d82ef3ecba3", + "0xfedac380116944d5a67d185b4105c6f4431e8a996bbce87bd82696b8bc537551a61b873180fa181a919891236cfd76c6a01b06a0a5cfa3be5a32ab72eb527789912b6465b38087c99c879ccfd5a27532a2f1e61be2dd2e76a5c5b89241783e8772156a40218480c1d29d3b692e1cfcbcb2b15457e1f3d5ab7b8f3d8b1e7dfffcf278645dbabdab803401a421911ceb374814d04e4327a1ade73e5451e7c49b47fb91dadc8e01e69f806f92d61a9f46ed485396eff2aacda334b0d4c7182da719e004827b45f32639b480f4b2600beb514ab160b22d7a4aa48396e5d8539e0ebe0952a830e5414d48609f8008f05792771f990115a92c04aebe2f24c87bcb6825b3083e9a3ef63b4f9c404280b44845aaae49f9f79a9420e4221668bf4b311db8dcf59f29a802228e7033c3da", + "0xfe4020806457eb02b999c5d5b098073f14e5504490075aabc3ba0998cf6bdd88c8d1c2f1804356608047570bc264ab86aa2dcf81a2a156857b5c5d33c3106a771d32283cd5", + "0x3e0594389115e580c41e27acb64350ad3f331d30ff3d3a4e2f7d499cb1c2ea3e1901f8440180a028a46df05dae7001342b4d474915e4a7d763b242f7cff7bdbd59fbef44f7262ea07be1152a720967c3bfb57c7fa5a7291b4db5d0a3a2c4bd766808fbba741ef502" + ]; + var accountInfo = await contracts.stateProver.proofStorageRoot(stateRootHash, proofAddress, accountProofArray); + expect(accountInfo.storageRoot).to.equals(storageHash); + }); + + it("proofStorageSlotValue n", async function () { + const [owner,user1,user2,user3,user4] = await ethers.getSigners(); + var contracts = await setupContracts(); + var stateRootHash = "0xf3ac1098a73159e693da20a16e26deb723d8c80ee0816995c5195fa8f02de71c"; + var proofAddress = "0xe9cd84fe4ddfb0f016e3264791923902906753bd"; + var storageHash = "0x28a46df05dae7001342b4d474915e4a7d763b242f7cff7bdbd59fbef44f7262e"; + var storageKey = "0xc22eeaef610a001ad1d2cd9ce6fcb791121be56dcbe56d8c8fd3211a879dc0ef"; + var value = "0x64662934000000003b9aca0070997970c51812dc3a010c7d01b50e0d17dc79c8"; + var slotProofArray = [ + "0xfe811a8016c8e862af0badecdf181f0aa52074f9059826bec66bad984587f44a8ba89b56804a69612ebce2e9a49bcc72e5ed02244301f67985d12a2f4d876e4f6d949c7b3080aed0ce2f1d4b9680b7cd3a9202ae36fd4f9c621a7b2aea3750a0e60075c9af888049ea285bee7d5585f5a730f0594fdcccc8c788544e7f9ab6791c9503d759f9888058526d1f656e5e19afcf20b52cca9bc3b77c71177113761133f2731ba1a473a4", + "0xfe048080491e99274c729474c6ff34fcee201706f3d639b35065f040715edd526688f66080ef4277bf6b66a8688407b83c684749af27f9634785219c4846dd4b58d8943eae", + "0x3f2eeaef610a001ad1d2cd9ce6fcb791121be56dcbe56d8c8fd3211a879dc0ef84a064662934000000003b9aca0070997970c51812dc3a010c7d01b50e0d17dc79c8" + ]; + var slotValue = await contracts.stateProver.proofStorageSlotValue(storageHash, storageKey, slotProofArray); + expect(slotValue.value).to.equals(value); + });*/ +}); + +async function waitTill(time) { + var currentblock = await ethers.provider.getBlock(await ethers.provider.getBlockNumber()); + var waitPeriod = time-currentblock.timestamp; + if (waitPeriod>0) { + ethers.provider.send("evm_increaseTime", [waitPeriod]); // wait waitPeriod + ethers.provider.send("evm_mine"); // mine the next block + } +} +async function wait(waitPeriod) { + if (waitPeriod>0) { + ethers.provider.send("evm_increaseTime", [waitPeriod]); // wait waitPeriod + ethers.provider.send("evm_mine"); // mine the next block + } +} + +async function setupContracts() { + const [owner,user1,user2,user3,user4] = await ethers.getSigners(); + + const StateProver = await ethers.getContractFactory("StateProver"); + var stateProver = await StateProver.deploy(); + + // Pack contracts in an object + var result = {}; + result.stateProver = stateProver; + return result; +} diff --git a/src/types/constants.ts b/src/types/constants.ts index 1b801888..0eac76b0 100755 --- a/src/types/constants.ts +++ b/src/types/constants.ts @@ -2272,7 +2272,11 @@ export const CONTRACT_ADDRESSES = { fraxferry_v2__ethereum_arbitrum__sfrxETH__ETH_SIDE: "0x8afd5082E0C24dEcEA39A9eFb14e4ACF4373D7D6", fraxferry_v1__ethereum_aurora__FRAX__ETH_SIDE: "0x6ac96F65156281a9383455D704b58A74ea9C9eC4", fraxferry_v1__ethereum_avalanche__FRAX__ETH_SIDE: "0xA381d58e96eC3818c825E1fb264099448945CF8b", - fraxferry_v2__ethereum_avalanche__FXS__ETH_SIDE: "0x9Ab224996D25bfDCB91d838F7f1902698Ac0a742", + fraxferry_v2__ethereum_avalanche__FXS__ETH_SIDE: "0x9Ab224996D25bfDCB91d838F7f1902698Ac0a742", + fraxferry_v2__ethereum_avalanche__FPI__ETH_SIDE: "0xbb6b54F8969a4711527fdF6AB852B6D6cdF368d1", + fraxferry_v2__ethereum_avalanche__FPIS__ETH_SIDE: "0x18A5ca670dC42D0551f00E11A730074f6787f17F", + fraxferry_v2__ethereum_avalanche__frxETH__ETH_SIDE: "0x94ddd112C9ea0fb534e376BE09A50d310F0612b4", + fraxferry_v2__ethereum_avalanche__sfrxETH__ETH_SIDE: "0xF380200B115Caa22D49e6C115b758d6130377620", fraxferry_v1__ethereum_boba__FRAX__ETH_SIDE: "0x3eF1d856EA62A2292B8690855042095a7aC48B4b", fraxferry_v1__ethereum_bsc__FRAX__ETH_SIDE: "0xDAe210BfB0cF8c81EDB4b459e2e0bA14D553e2D9", fraxferry_v2__ethereum_bsc__FXS__ETH_SIDE: "0x9B62402Eb9A755677dEbdaE3639CB531c0Af0E5d", @@ -2293,12 +2297,26 @@ export const CONTRACT_ADDRESSES = { fraxferry_v2__ethereum_moonriver__FXS__ETH_SIDE: "0xFe7ebA20c20C8FF12A337F940Ce7A97c6e2594DE", fraxferry_v1__ethereum_optimism__FRAX__ETH_SIDE: "0x06Fa869caa1160754C6a0B744Da6454c5EA325d4", fraxferry_v2__ethereum_optimism__FXS__ETH_SIDE: "0x6650D5183C4Cd294a81B1F724c365b0c42f8270a", + fraxferry_v2__ethereum_optimism__FPI__ETH_SIDE: "0xC05DE1CB258bAdc152d8EAd3F573CA9A2E812B2a", + fraxferry_v2__ethereum_optimism__FPIS__ETH_SIDE: "0x8Bf7Af56bB721BC3d015111508593Fcb301546F0", fraxferry_v2__ethereum_optimism__frxETH__ETH_SIDE: "0x2F08F4645d2fA1fB12D2db8531c0c2EA0268BdE2", fraxferry_v2__ethereum_optimism__sfrxETH__ETH_SIDE: "0x04ba20D2Cc47C63bce1166C2864F0241e4D0a0CC", fraxferry_v1__ethereum_polygon__FRAX__ETH_SIDE: "0x43959A388603DCb6B02Ca084A55d4c7f3b442c57", fraxferry_v2__ethereum_polygon__FXS__ETH_SIDE: "0xCa026e80F1E9e44da7ce3eD6aC2E9630260B9276", fraxferry_v2__ethereum_polygon__frxETH__ETH_SIDE: "0x98f5E4b7D9eDF57A6ED41b334bD40B2eAa6B6e26", fraxferry_v2__ethereum_polygon__sfrxETH__ETH_SIDE: "0x91Ff54EffF7564BA3884A91d0E293502D8E6fF90", + fraxferry_v2__ethereum_polygon_zkevm__FRAX__ETH_SIDE: "0x86E71075e55F0aaD27D700017E0783458310c98a", + fraxferry_v2__ethereum_polygon_zkevm__FXS__ETH_SIDE: "0xBa32Df0b78b1A68F7FA304BbD4Ed7a56A74c525a", + fraxferry_v2__ethereum_polygon_zkevm__FPI__ETH_SIDE: "0x45D2d8e4aB0F5af1D29305301A1b31D5d41b3349", + fraxferry_v2__ethereum_polygon_zkevm__FPIS__ETH_SIDE: "0xF887C4cFAAfB43d1AA7De204344895591016772c", + fraxferry_v2__ethereum_polygon_zkevm__frxETH__ETH_SIDE: "0x3aaB5C43D4e47f71DEea94a7d541E6C07e21B137", + fraxferry_v2__ethereum_polygon_zkevm__sfrxETH__ETH_SIDE: "0xb8686Ef9B7ee9e73dE5d1721E4Da580278F8F4d2", + fraxferry_v2__ethereum_zksync__FRAX__ETH_SIDE: "0x32dDf80508cfD8feD8ABe375582FC7cfD20372C4", + fraxferry_v2__ethereum_zksync__FXS__ETH_SIDE: "0x27E97F35D80514D5DD1Caa730e22a292E912a214", + fraxferry_v2__ethereum_zksync__FPI__ETH_SIDE: "0x0F6136F9aBB7A0c21FbE076771625b39C544BDf5", + fraxferry_v2__ethereum_zksync__FPIS__ETH_SIDE: "0xFBC512849D4dcEeeFAa1bfce08B3dC9daD755482", + fraxferry_v2__ethereum_zksync__frxETH__ETH_SIDE: "0x9f76b097Cd95627bFbD8052A583127FF6e7b3Fa9", + fraxferry_v2__ethereum_zksync__sfrxETH__ETH_SIDE: "0x29396AaE6198130A15F6Ff982C44BC4a7353Ef37", captain: "0xBB437059584e30598b3AF0154472E47E6e2a45B9", first_officer: "0xBB437059584e30598b3AF0154472E47E6e2a45B9", crewmember: "0xBB437059584e30598b3AF0154472E47E6e2a45B9", @@ -2427,6 +2445,8 @@ export const CONTRACT_ADDRESSES = { BADGERFRAXBP_Pool: '0x13B876C26Ad6d21cb87AE459EaF6d7A1b788A113', BUSDFRAXBP: '0x8fdb0bB9365a46B145Db80D0B1C5C5e979C84190', BUSDFRAXBP_Pool: '0x8fdb0bB9365a46B145Db80D0B1C5C5e979C84190', + COILFRAXBP: '0xb85010193FD15aF8390dbD62790Da70F46c1126B', + COILFRAXBP_Pool: '0xAF4264916B467e2c9C8aCF07Acc22b9EDdDaDF33', CRVfrxETH: '0xc34993c9adf6a5ab3b4ca27dc71b9c7894a53974', CRVfrxETH_Pool: '0x442f37cfd85d3f35e576ad7d63bba7bb36fcfe4a', CVXFRAXBP: '0x7F17A6C77C3938D235b014818092eb6305BdA110', @@ -2435,6 +2455,8 @@ export const CONTRACT_ADDRESSES = { CVXfrxETH_Pool: '0x6e855d08f2984516c40c4246a385ba4a2edfcd0a', DOLAFRAXBP: '0xE57180685E3348589E9521aa53Af0BCD497E884d', DOLAFRAXBP_Pool: '0xE57180685E3348589E9521aa53Af0BCD497E884d', + eUSDFRAXBP: '0xaeda92e6a3b1028edc139a4ae56ec881f3064d4f', + eUSDFRAXBP_Pool: '0xaeda92e6a3b1028edc139a4ae56ec881f3064d4f', FRAXBP: '0x3175Df0976dFA876431C2E9eE6Bc45b65d3473CC', FRAXBP_Pool: '0xDcEF968d416a41Cdac0ED8702fAC8128A64241A2', FXSfrxETH: '0x970faa9afbc5feb3ec53059ba330dee71e22b55b', @@ -2452,10 +2474,14 @@ export const CONTRACT_ADDRESSES = { RSRFRAXBP_Pool: '0x6a6283aB6e31C2AeC3fA08697A8F806b740660b2', SDTFRAXBP: '0x893DA8A02b487FEF2F7e3F35DF49d7625aE549a3', SDTFRAXBP_Pool: '0x3e3C6c7db23cdDEF80B694679aaF1bCd9517D0Ae', + STGFRAXBP: '0x9de1c3d446237ab9baff74127eb4f303802a2683', + STGFRAXBP_Pool: '0x867fe27fc2462cff8890b54dfd64e6d42a9d1ac8', TUSDFRAXBP: '0x33baeDa08b8afACc4d3d07cf31d49FC1F1f3E893', TUSDFRAXBP_Pool: '0x33baeDa08b8afACc4d3d07cf31d49FC1F1f3E893', USDDFRAXBP: '0x4606326b4Db89373F5377C316d3b0F6e55Bc6A20', USDDFRAXBP_Pool: '0x4606326b4Db89373F5377C316d3b0F6e55Bc6A20', + UZDFRAXBP: '0x68934F60758243eafAf4D2cFeD27BF8010bede3a', + UZDFRAXBP_Pool: '0x68934f60758243eafaf4d2cfed27bf8010bede3a', XAIFRAXBP: '0x326290A1B0004eeE78fa6ED4F1d8f4b2523ab669', XAIFRAXBP_Pool: '0x326290A1B0004eeE78fa6ED4F1d8f4b2523ab669', aFRAX: '0xd4937682df3C8aEF4FE912A96A74121C0829E664', @@ -2485,6 +2511,8 @@ export const CONTRACT_ADDRESSES = { cvxBADGERFRAXBP_Rewarder: '0xe0705A91984b076C250d410A41f615380aF1C2ed', cvxBUSDFRAXBP: '0xf203A94e59d071062a0dd31f396bCb19a38809A4', cvxBUSDFRAXBP_Rewarder: '0x9e6Daf019767D5cEAdE416ce77E8d187b5B254F3', + cvxCOILFRAXBP: '0x624cEFdBe30507EEAc71882C9e42Ca0900D5B6a1', + cvxCOILFRAXBP_Rewarder: '0xAE0b6b66378C7DEFc0514D7cBc6E4e92Cf56b0af', cvxCRVFRAXBP: '0x527331F3F550f6f85ACFEcAB9Cc0889180C6f1d5', cvxCRVFRAXBP_Pool: '0x31c325A01861c7dBd331a9270296a31296D797A0', cvxCRV_Rewarder: '0x3Fe65692bfCD0e6CF84cB1E7d24108E434A7587e', @@ -2508,12 +2536,14 @@ export const CONTRACT_ADDRESSES = { cvxRSRFRAXBP_Rewarder: '0x28441fb9b8b026487A6174Ff39Be015810611C0F', cvxSDTFRAXBP: '0x95B051E97957f1D48C622Bf73225E3d4c2B189fb', cvxSDTFRAXBP_Rewarder: '0xc3df9cC2B8FFdB801E8e6E8FF9C1245E2dEcdA98', - cvxSTGFRAXBP: '0x867fe27fc2462cff8890b54dfd64e6d42a9d1ac8', + cvxSTGFRAXBP: '0x61ff639743EE7e0c7319fC639D2B92F8B49dDd3f', cvxSTGFRAXBP_Rewarder: '0xAa57A289Bb22a1A0C583db306F6566AE2c0CAf21', cvxTUSDFRAXBP: '0x33baeDa08b8afACc4d3d07cf31d49FC1F1f3E893', cvxTUSDFRAXBP_Rewarder: '0x4a744870fD705971c8c00aC510eAc2206C93d5bb', cvxUSDDFRAXBP: '0x4606326b4Db89373F5377C316d3b0F6e55Bc6A20', cvxUSDDFRAXBP_Rewarder: '0x546cd3B917c1d8A6525b4A312bB0014BE031Eb28', + cvxUZDFRAXBP: '0xe6c0fAA19A7fB6A0a2C01e0BBC1a782b9e4a7B48', + cvxUZDFRAXBP_Rewarder: '0x820Fad75512c8C3E57Ad021d016846CEEB5F7105', cvxXAIFRAXBP: '0xEbB0Dd1AfE63813AdD4c38EEbd71CE7354dd9b7e', cvxXAIFRAXBP_Rewarder: '0x4a866fE20A442Dff55FAA010684A5C1379151458', cvxagEURFRAXBP: '0x9e187393cBc76c8Bf8e8a06bD7737a7cabe9d66C', @@ -2540,8 +2570,6 @@ export const CONTRACT_ADDRESSES = { cvxsUSDFRAXBP: '0x8E2A6e9390CbD4C3895D07E4Cb171C0527990dF6', cvxsUSDFRAXBP_Rewarder: '0x3fABBDfe05487De1720a9420fE2e16d2c3e79A9D', d3pool: '0xBaaa1F5DbA42C3389bDbc2c9D2dE134F5cD0Dc89', - eUSDFRAXBP: '0xaeda92e6a3b1028edc139a4ae56ec881f3064d4f', - eUSDFRAXBP_Pool: '0xaeda92e6a3b1028edc139a4ae56ec881f3064d4f', frxETHETH: '0xf43211935C781D5ca1a41d2041F397B8A7366C7A', // Curve calls it frxETHCRV frxETHETH_Pool: '0xa1F8A6807c402E4A15ef4EBa36528A3FED24E577', gOHM: '0x0ab87046fBb341D058F17CBC4c1133F25a20a52f', @@ -2580,17 +2608,16 @@ export const CONTRACT_ADDRESSES = { sdl_vesperFRAXEarnPoolFRAXBP_Pool: '0x9AC17f026f0599F77b3513a0A35f0258B0ec77f3', stETHfrxETH: '0x4d9f9d15101eec665f77210cb999639f760f831e', stETHfrxETH_Pool: '0x4d9f9d15101eec665f77210cb999639f760f831e', - STGFRAXBP: '0x9de1c3d446237ab9baff74127eb4f303802a2683', - STGFRAXBP_Pool: '0x867fe27fc2462cff8890b54dfd64e6d42a9d1ac8', stkAAVE: '0x4da27a545c0c5b758a6ba100e3a049001de870f5', stkMTA: '0x8f2326316eC696F6d023E37A9931c2b2C177a3D7', stkcvxALCXFRAXBP: '0xAF1b82809296E52A42B3452c52e301369Ce20554', stkcvxBADGERFRAXBP: '0xb92e3fD365Fc5E038aa304Afe919FeE158359C88', stkcvxBUSDFRAXBP: '0x20c5177504A3f9Bad59c430791feA853EeAD4CCE', + stkcvxCOILFRAXBP: '0xa5B6f8Ec4122c5Fe0dBc4Ead8Bfe66A412aE427C', stkcvxCRV: '0xaa0c3f5f7dfd688c6e646f66cd2a6b66acdbe434', stkcvxCVXFRAXBP: '0x93D1De20eaBB21686CFe716f78F67E51ee578185', stkcvxDOLAFRAXBP: '0xF06c8696730cf760619e4fA0eDd0f79ea50531A9', - stkcvxeUSDFRAXBP: '0x8942B520638A34766AB269f7dE33C78377dAb803', + stkcvxeUSDFRAXBP: '0x49BF6f9B860fAF73B0b515c06Be1Bcbf4A0db3dF', stkcvxFPIFRAX: '0x7287488F8Df7dddc5f373142D4827aAF92AAC845', stkcvxFRAXBP: '0x8a53ee42FB458D4897e15cc7dEa3F75D0F1c3475', stkcvxGUSDFRAXBP: '0x16e9eaC2A9e29aF3c53d24ed0F07fc403E098b64', @@ -2599,9 +2626,10 @@ export const CONTRACT_ADDRESSES = { stkcvxOHMFRAXBP: '0x81b0dCDa53482A2EA9eb496342dC787643323e95', stkcvxRSRFRAXBP: '0xF37007f2b9DE656115e1B977Bb1fd38A99B8a2a6', stkcvxSDTFRAXBP: '0xE6Aa75F98e6c105b821a2dba9Fbbd886b421F06b', - stkcvxSTGFRAXBP: '', + stkcvxSTGFRAXBP: '0xAe1bA2Cf0eBF00C5052309992d7B6c94e3EfcBEf', stkcvxTUSDFRAXBP: '0x32fA492Ac1F729E0eE9eDdfCBacc3ef72B234e27', stkcvxUSDDFRAXBP: '0x507e41A64eB7AE47ee303e3B16237ab757F6C06c', + stkcvxUZDFRAXBP: '0xaa236bd1302755937Aa46D6f3423655BbC654B02', stkcvxXAIFRAXBP: '0x19f0a60f4635d3E2c48647822Eda5332BA094fd3', stkcvxagEURFRAXBP: '0x78b74C93c726B6e29d0Ef5A01764fA19eCCF0C1c', stkcvxalUSDFRAXBP: '0xBE1C919cA137299715e9c929BC7126Af14f76091', @@ -2669,6 +2697,8 @@ export const CONTRACT_ADDRESSES = { vamms: {}, pair_tokens: { "Aave aFRAX": "0xd4937682df3C8aEF4FE912A96A74121C0829E664", + "Bunni FRAX/USDC Gauge": "0x471A34823DDd9506fe8dFD6BC5c2890e4114Fafe", + "Bunni frxETH/WETH Gauge": "0x4Bf0082080d937897330BAB735c2Baa99FF16F19", 'Convex stkcvxagEURFRAXBP': '0x78b74C93c726B6e29d0Ef5A01764fA19eCCF0C1c', 'Convex stkcvxALCXFRAXBP': '0xAF1b82809296E52A42B3452c52e301369Ce20554', 'Convex stkcvxalUSDFRAXBP': '0xBE1C919cA137299715e9c929BC7126Af14f76091', @@ -2676,11 +2706,12 @@ export const CONTRACT_ADDRESSES = { 'Convex stkcvxBADGERFRAXBP': '0xb92e3fD365Fc5E038aa304Afe919FeE158359C88', 'Convex stkcvxBUSDFRAXBP': '0x20c5177504A3f9Bad59c430791feA853EeAD4CCE', 'Convex stkcvxclevUSDFRAXBP': '0x3199a1ed1Ad4cb1d1b57939809c8ee79eafE9934', + 'Convex stkcvxCOILFRAXBP': '0xa5B6f8Ec4122c5Fe0dBc4Ead8Bfe66A412aE427C', 'Convex stkcvxCVXFRAXBP': '0x93D1De20eaBB21686CFe716f78F67E51ee578185', 'Convex stkcvxcvxCRVFRAXBP': '0xa103a6ca0C4D4072BA59a55FD453BFE4197A095B', 'Convex stkcvxcvxFXSFRAXBP': '0xA6A8F315b1a8C9B05433d206b8fECfbF0fC96217', 'Convex stkcvxDOLAFRAXBP': '0xF06c8696730cf760619e4fA0eDd0f79ea50531A9', - 'Convex stkcvxeUSDFRAXBP': '0x8942B520638A34766AB269f7dE33C78377dAb803', + 'Convex stkcvxeUSDFRAXBP': '0x49BF6f9B860fAF73B0b515c06Be1Bcbf4A0db3dF', 'Convex stkcvxGUSDFRAXBP': '0x16e9eaC2A9e29aF3c53d24ed0F07fc403E098b64', 'Convex stkcvxFPIFRAX': '0x7287488F8Df7dddc5f373142D4827aAF92AAC845', 'Convex stkcvxFRAXBP': '0x8a53ee42FB458D4897e15cc7dEa3F75D0F1c3475', @@ -2692,10 +2723,11 @@ export const CONTRACT_ADDRESSES = { 'Convex stkcvxpUSDFRAXBP': '0x7AEF5bDC573dCbfb40EC68b0BAAB03abB846C9c6', 'Convex stkcvxRSRFRAXBP': '0xF37007f2b9DE656115e1B977Bb1fd38A99B8a2a6', 'Convex stkcvxSDTFRAXBP': '0xE6Aa75F98e6c105b821a2dba9Fbbd886b421F06b', - 'Convex stkcvxSTGFRAXBP': '', + 'Convex stkcvxSTGFRAXBP': '0xAe1bA2Cf0eBF00C5052309992d7B6c94e3EfcBEf', 'Convex stkcvxsUSDFRAXBP': '0x9f0C2673a33b7087e367253f196A7E823fBc2341', 'Convex stkcvxTUSDFRAXBP': '0x32fA492Ac1F729E0eE9eDdfCBacc3ef72B234e27', 'Convex stkcvxUSDDFRAXBP': '0x507e41A64eB7AE47ee303e3B16237ab757F6C06c', + 'Convex stkcvxUZDFRAXBP': '0xaa236bd1302755937Aa46D6f3423655BbC654B02', 'Convex stkcvxXAIFRAXBP': '0x19f0a60f4635d3E2c48647822Eda5332BA094fd3', "Curve FRAX/FPI": "0xf861483fa7E511fbc37487D91B6FAa803aF5d37c", "Curve FRAX/SILO": "0x9a22CDB1CA1cdd2371cD5BB5199564C4E89465eb", @@ -2738,9 +2770,8 @@ export const CONTRACT_ADDRESSES = { "StakeDAO sdETH-FraxPut": "0x839A989bE40f2D60f00beEB648903732c041CBd7", "StakeDAO sdFRAX3CRV-f": "0x5af15DA84A4a6EDf2d9FA6720De921E1026E37b7", "Sushi FRAX/SUSHI": "0xe06F8d30AC334c857Fc8c380C85969C150f38A6A", - "Sushi FXS/WETH": "0xeC8C342bc3E07F05B9a782bc34e7f04fB9B44502", + // "Sushi FXS/WETH": "0xeC8C342bc3E07F05B9a782bc34e7f04fB9B44502", "Temple FRAX/TEMPLE": "0x6021444f1706f15465bEe85463BCc7d7cC17Fc03", - "Uniswap FEI/TRIBE": "0x9928e4046d7c6513326cCeA028cD3e7a91c7590A", "Uniswap FRAX/FXS": "0xE1573B9D29e2183B1AF0e743Dc2754979A40D237", "Uniswap FRAX/IQ": "0xd6c783b257e662ca949b441a4fcb08a53fc49914", "Uniswap FRAX/OHM": "0x2dce0dda1c2f98e0f171de8333c3c6fe1bbf4877", @@ -2759,16 +2790,19 @@ export const CONTRACT_ADDRESSES = { }, staking_contracts: { "Aave aFRAX": "0x02577b426F223A6B4f2351315A19ecD6F357d65c", + "Bunni FRAX/USDC Gauge": "0x50B4cDb17D3e10C9BC88b3744F3fD7c25695EEE7", + "Bunni frxETH/WETH Gauge": "0xcbcCBA2FA84606Df153B593dD01c37a50ac8427C", "Convex stkcvxagEURFRAXBP": "0xd1f21322bBDd3586dC1151ADCcaA2684641c2b31", "Convex stkcvxALCXFRAXBP": "0xA0657642224Fc53dAB4a3d2069430afe157BEc5D", "Convex stkcvxBADGERFRAXBP": "0x5a92EF27f4baA7C766aee6d751f754EBdEBd9fae", "Convex stkcvxBUSDFRAXBP": "0xaCf54f101B86f9e55d35C0674Ebd8C854E5f80e4", "Convex stkcvxclevUSDFRAXBP": "0x5745506D56b0088f800085b1227B3f1F7d419c89", + 'Convex stkcvxCOILFRAXBP': "0x39cd4db6460d8B5961F73E997E86DdbB7Ca4D5F6", "Convex stkcvxCVXFRAXBP": "0xeC670c5e0A8A8d5ae5639158565D840DE44CA03f", "Convex stkcvxcvxCRVFRAXBP": "0x57c9F019B25AaAF822926f4Cacf0a860f61eDd8D", "Convex stkcvxcvxFXSFRAXBP": "0x2F9504988675c91787E188Ed928D6E042d9052e9", "Convex stkcvxDOLAFRAXBP": "0xE7211E87D60177575846936F2123b5FA6f0ce8Ab", - "Convex stkcvxeUSDFRAXBP": "0x35806103719a5469FD2d140Fc21Fa39d695888a8", + "Convex stkcvxeUSDFRAXBP": "0x4c9AD8c53d0a001E7fF08a3E5E26dE6795bEA5ac", "Convex stkcvxFPIFRAX": "0x0a08673E3d7c454E1c6b27acD059C50Df6727FC9", "Convex stkcvxFRAXBP": "0x963f487796d54d2f27bA6F3Fbe91154cA103b199", "Convex stkcvxfrxETHETH": "0xa537d64881b84faffb9Ae43c951EEbF368b71cdA", @@ -2780,9 +2814,10 @@ export const CONTRACT_ADDRESSES = { "Convex stkcvxpUSDFRAXBP": "0x40b42E4ab3c044e67CBFb0bD99C9E975dcB83668", "Convex stkcvxRSRFRAXBP": "0xF22D3C85e41Ef4b5Ac8Cb8B89a14718e290a0561", "Convex stkcvxSDTFRAXBP": "0x9C8d9667d5726aEcA4d24171958BeE9F46861bed", - "Convex stkcvxSTGFRAXBP": "", + "Convex stkcvxSTGFRAXBP": "0xd600A3E4F57E718A7ad6A0cbb10c2A92c57827e6", "Convex stkcvxTUSDFRAXBP": "0xb324b2BD8a3Dc55b04111E84d5cce0c3771F8889", "Convex stkcvxUSDDFRAXBP": "0xF7242A1cE383174802818febB36B6eebb56d5BFb", + "Convex stkcvxUZDFRAXBP": "0xb8ebc210BCF78be8Ef3F09Dd0d8e85Fa5e252e86", "Convex stkcvxalUSDFRAXBP": "0x711d650Cd10dF656C2c28D375649689f137005fA", "Convex stkcvxapeUSDFRAXBP": "0xa810D1268cEF398EC26095c27094596374262826", "Convex stkcvxsUSDFRAXBP": "0x560c7668459221e33ED515D1D17c09ECda1996f5", @@ -2809,9 +2844,8 @@ export const CONTRACT_ADDRESSES = { "StakeDAO sdETH-FraxPut": "0x0A53544b2194Dd8Ebc62c779043fc0624705BB56", "StakeDAO sdFRAX3CRV-f": "0xEB81b86248d3C2b618CcB071ADB122109DA96Da2", "Sushi FRAX/SUSHI": "0xb4Ab0dE6581FBD3A02cF8f9f265138691c3A7d5D", - "Sushi FXS/WETH": "", // Pre-gauge: "0x74C370990C1181303D20e9f0252437a97518B95B", + "Sushi FXS/WETH": "0x74C370990C1181303D20e9f0252437a97518B95B", // Pre-gauge: "0x74C370990C1181303D20e9f0252437a97518B95B", "Temple FRAX/TEMPLE": "0x10460d02226d6ef7B2419aE150E6377BdbB7Ef16", // Old1: "0x016563F5EB22cF84fA0Ff8B593DdC5343ca15856", - "Uniswap FEI/TRIBE": "0x9928e4046d7c6513326cCeA028cD3e7a91c7590A", "Uniswap FRAX/FXS": "0xda2c338350a0E59Ce71CDCED9679A3A590Dd9BEC", "Uniswap FRAX/IQ": "0xF37057823910653a554d996B49E3399DC87fAE1b", // V1: "0x35fc5Fd90e06c47c0D9dEBfEDB1daF55bCE14E6d", "Uniswap FRAX/OHM": "0xfC77A420f56Dec53e3b91D7FC936902e132335FF", @@ -2890,6 +2924,7 @@ export const CONTRACT_ADDRESSES = { "Zenlink FRAX/FXS": "", }, middleman_gauges: { + "Balancer frxETH-bb-a-WETH Gauge": "0xE3f4e2b79f1a8bf3b14d9100323Fca24D923f796", "Curve VSTFRAX-f": "0x127963A74c07f72D862F2Bdc225226c3251BD117", // Arbitrum "mStable FRAX/mUSD": "0x3e14f6EEDCC5Bc1d0Fc7B20B45eAE7B1F74a6AeC", // Polygon "Saddle L2D4 [Arbitrum]": "0x9B8AEd182B8A9430C14e97Bf2C02F129f2b36854", // Arbitrum @@ -3105,6 +3140,10 @@ export const CONTRACT_ADDRESSES = { canonicals: { FRAX: "0xD24C2Ad096400B6FBcd2ad8B24E7acBc21A1da64", // Old: "0x2809004266F5194A9bE81EC3F0962C7E16e1A623", FXS: "0x214DB107654fF987AD859F34125307783fC8e387", // Old: "0x0882a168d6c966E4679E288368C2A8d8bc8B3f8a" + FPI: "0xF530904FD8F9ce55F40b7cc78382A13B0cd5C48c", + FPIS: "0xee7cBa1403A2B0C53181B3980D52f9C5EdEEcC9e", + frxETH: '0x2018B0CA0eDcE80800851958bD094dD4a8DA1fc4', + sfrxETH: '0x6D3B126ae28f3E39894070148B377624F6Ab4a45', }, bridge_tokens: { anyFRAX: "0xDC42728B0eA910349ed3c6e1c9Dc06b5FB591f98", // Swapout @@ -3131,6 +3170,10 @@ export const CONTRACT_ADDRESSES = { dummy_tkn: "", // for testing fraxferry_v1__ethereum_avalanche__FRAX__AVAX_SIDE: "0x5dfF474Cea8A1FA929AC9A3cE2550376aF11d2A8", fraxferry_v2__ethereum_avalanche__FXS__AVAX_SIDE: "0xC311b600bc926a3a8aC39945471427DFd9196930", + fraxferry_v2__ethereum_avalanche__FPI__AVAX_SIDE: "0x5E2Ba6a55a5A031d4eCdbAf5691316b7779A6dD4", + fraxferry_v2__ethereum_avalanche__FPIS__AVAX_SIDE: "0xb3F6A473b875d74b0E2a86ba9F8a2A935241BaE7", + fraxferry_v2__ethereum_avalanche__frxETH__AVAX_SIDE: "0x8f4312DAB71BaAaF64917556333B004db5f3D7DA", + fraxferry_v2__ethereum_avalanche__sfrxETH__AVAX_SIDE: "0xaf45B8fbde0e0aCbeB5Acf2faE28A34701b1eF01", captain: "0xBB437059584e30598b3AF0154472E47E6e2a45B9", first_officer: "0xBB437059584e30598b3AF0154472E47E6e2a45B9", crewmember: "0xBB437059584e30598b3AF0154472E47E6e2a45B9", @@ -3936,12 +3979,14 @@ export const CONTRACT_ADDRESSES = { optimism: { chain_id: 10, main: { - FRAX: "", - FXS: "", + FRAX: "0x2E3D870790dC77A83DD1d18184Acc7439A53f475", + FXS: "0x67CCEA5bb16181E7b4109c9c2143c24a1c2205Be", }, canonicals: { FRAX: "0x2E3D870790dC77A83DD1d18184Acc7439A53f475", FXS: "0x67CCEA5bb16181E7b4109c9c2143c24a1c2205Be", + FPI: "0xC5d43A94e26fCa47A9b21CF547ae4AA0268670E1", + FPIS: "0x8368Dca5CE2a4Db530c0F6e535d90B6826428Dee", frxETH: '0x6806411765Af15Bddd26f8f544A34cC40cb9838B', sfrxETH: '0x484c2D6e3cDd945a8B2DF735e079178C1036578c', }, @@ -3966,6 +4011,8 @@ export const CONTRACT_ADDRESSES = { dummy_tkn: "", // for testing fraxferry_v1__ethereum_optimism__FRAX__OPTI_SIDE: "0xb781FCaC4B8eF06891F9baD7dB9C178B1cE67967", fraxferry_v2__ethereum_optimism__FXS__OPTI_SIDE: "0xdF6B3b56B1668dA507Db58C64b7153756cfE8e67", + fraxferry_v2__ethereum_optimism__FPI__OPTI_SIDE: "0x053F082f3bC0C48B8409970c017b4F2a6f673e16", + fraxferry_v2__ethereum_optimism__FPIS__OPTI_SIDE: "0xB84E29042Bfb489439949a79aed8a0e156169Ae5", fraxferry_v2__ethereum_optimism__frxETH__OPTI_SIDE: "0xA4EFC2d768C9b9b0f97DD91a1555B345f69b39C0", fraxferry_v2__ethereum_optimism__sfrxETH__OPTI_SIDE: "0x59b99CF08C01a6ADa0e0D819520719CA41B35c7C", captain: "0xBB437059584e30598b3AF0154472E47E6e2a45B9", @@ -3985,8 +4032,9 @@ export const CONTRACT_ADDRESSES = { combo_oracle_univ2_univ3: "0xeba66661Afc03aB95ec37383b1BfB724abe14a0F", // Old: "0xD3cEa6c44F745eAA584b836f92FAF15FAfe826a0", }, multisigs: { - Comptrollers: "0x0dF840dCbf1229262A4125C1fc559bd338eC9491", Address1: "0x11978D32619cFefC2E7C75A70ef8BeB077b503Ca", + Comptrollers: "0x0dF840dCbf1229262A4125C1fc559bd338eC9491", + FPI_Comptroller: "0x8Acc8819cBB632dE4a8E732f08b9E578D2A8F635", }, uniswap: { v2_router: "0x68b3465833fb72A70ecDF485E0e4C7bD8665Fc45", @@ -4134,7 +4182,7 @@ export const CONTRACT_ADDRESSES = { }, vamms: {}, pair_tokens: { - "Balancer frxETH-WETH": "0x5DEe84FfA2DC27419Ba7b3419d7146E53e4F7dEd", + "Balancer frxETH-bb-a-WETH Gauge": "0x83Ed440E7122FE3EFA28d3BC9d9eFca1952Ccb4b", "Fraxswap V1 FRAX/FXS": "0x60AC6d228ffeeefF423879baA02091558e6480dc", "Fraxswap V2 FRAX/FXS": "0xd2105fE5f1B631daf2398e918549758Cd181cA7C", "Fraxswap V1 FRAX/WMATIC": "0x4F7267Af6DB7B284dF74BEA9e35402987D8C72a7", @@ -4147,11 +4195,77 @@ export const CONTRACT_ADDRESSES = { "Sushi canFXS/polyUSDC": "0xF850c261AdC576E6713D14af590a40d55936a982", }, staking_contracts: { - "Balancer frxETH-WETH": "0xAD8B9BaF8e537d520D3F25267F5996e1E7CFae7b", + "Balancer frxETH-bb-a-WETH Gauge": "0x617430FF1C74faff0378726627F26a8704d03c8d", "mStable FRAX/mUSD": "0xc425Fd9Ed3C892d849C9E1a971516da1C1B29696", // "Sushi FRAX/FXS": "0x6386a4d52966D864698BF9AdA2cd081ab2F487c4" }, }, + polygon_zkevm: { + chain_id: 1101, + main: { + FRAX: '0xFf8544feD5379D9ffa8D47a74cE6b91e632AC44D', + FXS: '0x6b856a14CeA1d7dCfaF80fA6936c0b75972cCacE', + }, + canonicals: { + FRAX: '0xFf8544feD5379D9ffa8D47a74cE6b91e632AC44D', + FXS: '0x6b856a14CeA1d7dCfaF80fA6936c0b75972cCacE', + FPI: '0x7E5845b1bFc9e6620893e48346bdB8541995a8D9', + FPIS: '0xdE7df9036801676aF0cB73661d93a098c0085fba', + frxETH: '0xCf7eceE185f19e2E970a301eE37F93536ed66179', + sfrxETH: '0x7c2aF1Fb79D0b1c67d4eb802d44C673D0A1D2C04', + }, + bridge_tokens: {}, + collaterals: { + USDC: '', + }, + bridges: {}, + bridge_backers: {}, + fraxferry: { + fraxferry_v2__ethereum_polygon_zkevm__FRAX__POLYZKEVM_SIDE: "0xEaBd7625056bbD2c260f90D0B08759C69d971a5B", + fraxferry_v2__ethereum_polygon_zkevm__FXS__POLYZKEVM_SIDE: "0x96720C1E893bB69C14291d8a85475ED9BC484b26", + fraxferry_v2__ethereum_polygon_zkevm__FPI__POLYZKEVM_SIDE: "0xA31001fbe938C520C27204b984817d998bAeA885", + fraxferry_v2__ethereum_polygon_zkevm__FPIS__POLYZKEVM_SIDE: "0x3d1bc21F8991091538FfEf535Fe96A449794461C", + fraxferry_v2__ethereum_polygon_zkevm__frxETH__POLYZKEVM_SIDE: "0xA711F85672899331900359e5b89848A30BeEBDBe", + fraxferry_v2__ethereum_polygon_zkevm__sfrxETH__POLYZKEVM_SIDE: "0x4DB406906835ca0B28bFbef344c7d2C707BC4947", + captain: "0xBB437059584e30598b3AF0154472E47E6e2a45B9", + first_officer: "0xBB437059584e30598b3AF0154472E47E6e2a45B9", + crewmember: "0xBB437059584e30598b3AF0154472E47E6e2a45B9", + }, + oracles: { + single_assets: { + FRAX: '', + FXS: '', + USDC: '', + }, + cross_chain_oracle: '', + }, + oracles_other: { + combo_oracle: '', + combo_oracle_univ2_univ3: '', + }, + multisigs: { + Comptrollers: '0x030BD43af99cb72B51dA233A73F7697Cd2461C0b', + FPI_Comptroller: '0x967d0c5f7362A54b156cf2831Fb17dA8681FAD7D' // EOA FOR NOW + }, + uniswap: { + v2_router: "", + v3_factory: "0x0000000000000000000000000000000000000000", + v3_nft_manager: "0x0000000000000000000000000000000000000000", + v3_router: "0x0000000000000000000000000000000000000000", + fraxswap_factory_v1: "0x0000000000000000000000000000000000000000", + fraxswap_router_v1: "0x0000000000000000000000000000000000000000", + fraxswap_factory_v2: "0x0000000000000000000000000000000000000000", + fraxswap_router_v2: "0x0000000000000000000000000000000000000000", + fraxswap_router_multi_hop: '0x0000000000000000000000000000000000000000', + }, + amos: {}, + reward_tokens: { + WETH: '', + }, + vamms: {}, + pair_tokens: {}, + staking_contracts: {}, + }, solana: { chain_id: 0, canonicals: { @@ -4184,12 +4298,16 @@ export const CONTRACT_ADDRESSES = { zksync: { chain_id: 324, main: { - FRAX: '', - FXS: '', + FRAX: '0xb4C1544cb4163f4C2ECa1aE9Ce999F63892d912A', + FXS: '0x19BC97D3C223fC8a0fF0541D260f4f438d5FaF99', }, canonicals: { - FRAX: '', - FXS: '', + FRAX: '0xb4C1544cb4163f4C2ECa1aE9Ce999F63892d912A', + FXS: '0x19BC97D3C223fC8a0fF0541D260f4f438d5FaF99', + FPI: '0xD405617DB7473b0A3158356Be7bC9EbEc6D88b85', + FPIS: '0x36711BA13B461f1998EC9f9B36A410799560f206', + frxETH: '0xB54aAE4A0743aeEc1d584F2b2abC1EBDC12f1b0F', + sfrxETH: '0x22F91E9436C220af83fb0Ce27a08918dD1d27D32', }, bridge_tokens: {}, collaterals: { @@ -4197,6 +4315,17 @@ export const CONTRACT_ADDRESSES = { }, bridges: {}, bridge_backers: {}, + fraxferry: { + fraxferry_v2__ethereum_zksync__FRAX__ZKSYNC_SIDE: "0x31CdA619b96C96bD7Ed8463418E0f65c1fFC8D0a", + fraxferry_v2__ethereum_zksync__FXS__ZKSYNC_SIDE: "0xB2a11cd70e3Cd99165653D6C8BA3D7B73B1dB23E", + fraxferry_v2__ethereum_zksync__FPI__ZKSYNC_SIDE: "0x585ceEB764255A034f371f484b1B73d1F3C01dcE", + fraxferry_v2__ethereum_zksync__FPIS__ZKSYNC_SIDE: "0xB5439229749ce7b62DdA4138571fC29a932593cc", + fraxferry_v2__ethereum_zksync__frxETH__ZKSYNC_SIDE: "0xA3e684feCb4Cf018f9fc75bD02EeB9C53D4d700E", + fraxferry_v2__ethereum_zksync__sfrxETH__ZKSYNC_SIDE: "0x192973EAFE0720b74B74138edA1540EEbcd5494F", + captain: "0xBB437059584e30598b3AF0154472E47E6e2a45B9", + first_officer: "0xBB437059584e30598b3AF0154472E47E6e2a45B9", + crewmember: "0xBB437059584e30598b3AF0154472E47E6e2a45B9", + }, oracles: { single_assets: { FRAX: '', diff --git a/tsconfig.json b/tsconfig.json index c13b2f72..7359c43f 100755 --- a/tsconfig.json +++ b/tsconfig.json @@ -24,6 +24,6 @@ "resolveJsonModule": true, "sourceMap": true }, - "exclude": ["dist", "out", "node_modules"], + "exclude": ["dist", "out", "node_modules", "lib"], "include": ["**/*.ts", "**/*.tsx"] } From 75de289019f832820eddf8a8e79bfc5a375f424b Mon Sep 17 00:00:00 2001 From: travis Date: Tue, 6 Jun 2023 10:40:12 -0700 Subject: [PATCH 26/37] misc updates --- .../contracts/FraxferryV2/FerryOnL2.sol | 17 +- .../contracts/Fraxoracle/DummyPriceOracle.sol | 22 + .../DummyStateRootOracle.sol | 0 .../contracts/Fraxoracle/Fraxoracle.sol | 88 ++ .../Fraxoracle/FraxoraclePriceSource.sol | 22 + .../Fraxoracle/MerkleProofPriceSource.sol | 37 + .../StateProver.sol | 4 +- .../contracts/Fraxoracle/StateRootOracle.sol | 59 + .../interface/IBlockhashProvider.sol | 7 + .../contracts/Fraxoracle/interface/IInbox.sol | 91 ++ .../Fraxoracle/interface/IMessageProvider.sol | 25 + .../Fraxoracle/interface/IPriceOracle.sol | 7 + .../interface/IStateRootOracle.sol | 0 .../Fraxoracle/interface/ITelepathyRouter.sol | 7 + .../library}/MerklePatriciaProofVerifier.sol | 0 .../Fraxoracle/library/MerkleTreeProver.sol | 22 + .../library}/RLPReader.sol | 0 .../library}/StateProofVerifier.sol | 0 .../provider/ArbitrumBlockhashProvider.sol | 26 + .../provider/ArbitrumBlockhashRelay.sol | 33 + .../provider/OperatorBlockhashProvider.sol | 25 + .../provider/TelepathyBlockhashProvider.sol | 39 + .../provider/TelepathyBlockhashRelay.sol | 24 + .../contracts/Misc_AMOs/IConvexAMO_Old.sol | 72 ++ .../Misc_AMOs/convex/ICvxLockerV2.sol | 83 ++ .../Misc_AMOs/convex/IStakingProxyConvex.sol | 40 + .../Misc_AMOs/curve/I2PoolcvxCRVCRV.sol | 60 + .../Staking/FraxUnifiedFarmTemplate_V2.sol | 2 +- .../BSC/BSC_Rewards_Collection.json | 1 + .../Bribe_Related/BSC/Reward_Collections.js | 244 ++++ .../Bribe_Related/test-abi.json | 829 +++++++++++++ .../Frax_Comptroller_Routine/Sunday_Part_1.js | 1073 +++++++++++++++++ src/hardhat/test/FraxferryV2/FerryV2-test.js | 156 ++- .../test/Fraxoracle/Fraxoracle-test.js | 186 +++ .../StateProver-test.js | 121 +- src/types/constants.ts | 3 + 36 files changed, 3336 insertions(+), 89 deletions(-) create mode 100644 src/hardhat/contracts/Fraxoracle/DummyPriceOracle.sol rename src/hardhat/contracts/{FraxferryV2 => Fraxoracle}/DummyStateRootOracle.sol (100%) create mode 100644 src/hardhat/contracts/Fraxoracle/Fraxoracle.sol create mode 100644 src/hardhat/contracts/Fraxoracle/FraxoraclePriceSource.sol create mode 100644 src/hardhat/contracts/Fraxoracle/MerkleProofPriceSource.sol rename src/hardhat/contracts/{FraxferryV2 => Fraxoracle}/StateProver.sol (91%) create mode 100644 src/hardhat/contracts/Fraxoracle/StateRootOracle.sol create mode 100644 src/hardhat/contracts/Fraxoracle/interface/IBlockhashProvider.sol create mode 100644 src/hardhat/contracts/Fraxoracle/interface/IInbox.sol create mode 100644 src/hardhat/contracts/Fraxoracle/interface/IMessageProvider.sol create mode 100644 src/hardhat/contracts/Fraxoracle/interface/IPriceOracle.sol rename src/hardhat/contracts/{FraxferryV2 => Fraxoracle}/interface/IStateRootOracle.sol (100%) create mode 100644 src/hardhat/contracts/Fraxoracle/interface/ITelepathyRouter.sol rename src/hardhat/contracts/{FraxferryV2 => Fraxoracle/library}/MerklePatriciaProofVerifier.sol (100%) create mode 100644 src/hardhat/contracts/Fraxoracle/library/MerkleTreeProver.sol rename src/hardhat/contracts/{FraxferryV2 => Fraxoracle/library}/RLPReader.sol (100%) rename src/hardhat/contracts/{FraxferryV2 => Fraxoracle/library}/StateProofVerifier.sol (100%) create mode 100644 src/hardhat/contracts/Fraxoracle/provider/ArbitrumBlockhashProvider.sol create mode 100644 src/hardhat/contracts/Fraxoracle/provider/ArbitrumBlockhashRelay.sol create mode 100644 src/hardhat/contracts/Fraxoracle/provider/OperatorBlockhashProvider.sol create mode 100644 src/hardhat/contracts/Fraxoracle/provider/TelepathyBlockhashProvider.sol create mode 100644 src/hardhat/contracts/Fraxoracle/provider/TelepathyBlockhashRelay.sol create mode 100644 src/hardhat/contracts/Misc_AMOs/IConvexAMO_Old.sol create mode 100644 src/hardhat/contracts/Misc_AMOs/convex/ICvxLockerV2.sol create mode 100644 src/hardhat/contracts/Misc_AMOs/convex/IStakingProxyConvex.sol create mode 100644 src/hardhat/contracts/Misc_AMOs/curve/I2PoolcvxCRVCRV.sol create mode 100644 src/hardhat/gnosis-safe-scripts/Bribe_Related/BSC/BSC_Rewards_Collection.json create mode 100644 src/hardhat/gnosis-safe-scripts/Bribe_Related/BSC/Reward_Collections.js create mode 100644 src/hardhat/gnosis-safe-scripts/Bribe_Related/test-abi.json create mode 100644 src/hardhat/gnosis-safe-scripts/Frax_Comptroller_Routine/Sunday_Part_1.js create mode 100644 src/hardhat/test/Fraxoracle/Fraxoracle-test.js rename src/hardhat/test/{FraxferryV2 => Fraxoracle}/StateProver-test.js (72%) diff --git a/src/hardhat/contracts/FraxferryV2/FerryOnL2.sol b/src/hardhat/contracts/FraxferryV2/FerryOnL2.sol index f8a74eb1..b9982884 100644 --- a/src/hardhat/contracts/FraxferryV2/FerryOnL2.sol +++ b/src/hardhat/contracts/FraxferryV2/FerryOnL2.sol @@ -8,10 +8,9 @@ pragma solidity ^0.8.4; - User provides proofs of the L1 payment on L2 and gets the FRAX. */ -import {RLPReader} from "./RLPReader.sol"; -import {StateProofVerifier as Verifier} from "./StateProofVerifier.sol"; import "@uniswap/v3-periphery/contracts/libraries/TransferHelper.sol"; -import "./interface/IStateRootOracle.sol"; +import "../Fraxoracle/interface/IStateRootOracle.sol"; +import "../Fraxoracle/library/MerkleTreeProver.sol"; import "hardhat/console.sol"; contract FerryOnL2 { @@ -79,13 +78,13 @@ contract FerryOnL2 { function disembark(address captain, uint32 index, uint blockNumber, bytes[] memory _proofAccount,bytes[][] memory _proofValue) external { IStateRootOracle.BlockInfo memory blockInfo = stateRootOracle.getBlockInfo(blockNumber); - Verifier.Account memory accountPool = proofStorageRoot(blockInfo.stateRoot, L1_ADDRESS, _proofAccount); + Verifier.Account memory accountPool = MerkleTreeProver.proofStorageRoot(blockInfo.stateRoot, L1_ADDRESS, _proofAccount); CaptainData storage data = captainData[captain]; if (data.index!=index) revert("Wrong index"); data.index+=uint32(_proofValue.length); for (uint i=0;i<_proofValue.length;i++) { bytes32 slot = bytes32(uint(keccak256(abi.encodePacked(keccak256(abi.encodePacked(abi.encode(captain),bytes32(0))))))+index+i); - uint value = uint(proofStorageSlotValue(accountPool.storageRoot, slot, _proofValue[i]).value); + uint value = uint(MerkleTreeProver.proofStorageSlotValue(accountPool.storageRoot, slot, _proofValue[i]).value); if (value==0) revert("Empty slot"); uint amount = uint64(value>>160)*REDUCED_DECIMALS; address recipient = address(uint160(value)); @@ -116,10 +115,10 @@ contract FerryOnL2 { if (transaction.done) revert("Already collected"); transaction.done=true; IStateRootOracle.BlockInfo memory blockInfo = stateRootOracle.getBlockInfo(blockNumber); - Verifier.Account memory accountPool = proofStorageRoot(blockInfo.stateRoot, L1_ADDRESS, _proofAccount); + Verifier.Account memory accountPool = MerkleTreeProver.proofStorageRoot(blockInfo.stateRoot, L1_ADDRESS, _proofAccount); bytes32 hash = keccak256(abi.encodePacked(transaction.amount,transaction.recipient,index)); bytes32 slot = keccak256(abi.encodePacked(hash,bytes32(uint(1)))); - uint256 value = proofStorageSlotValue(accountPool.storageRoot, slot, _proofValue).value; + uint256 value = MerkleTreeProver.proofStorageSlotValue(accountPool.storageRoot, slot, _proofValue).value; if (value==0) { // Not disembarked, return the funds if (blockInfo.timestampblock.timestamp) revert("Too soon"); + if (roundData.length>0 && _timestamp<=roundData[roundData.length-1].timestamp) revert("Too late"); + + if (!_isBadData && (1E18*(_priceHigh-_priceLow))/_priceHigh>32)==1; + uint32 timestamp = uint32(value3); + fraxoracle.addRoundData(isBadData, priceLow, priceHigh, timestamp); + } + } +} + diff --git a/src/hardhat/contracts/FraxferryV2/StateProver.sol b/src/hardhat/contracts/Fraxoracle/StateProver.sol similarity index 91% rename from src/hardhat/contracts/FraxferryV2/StateProver.sol rename to src/hardhat/contracts/Fraxoracle/StateProver.sol index 58334b58..1c3c6d27 100644 --- a/src/hardhat/contracts/FraxferryV2/StateProver.sol +++ b/src/hardhat/contracts/Fraxoracle/StateProver.sol @@ -1,8 +1,8 @@ //SPDX-License-Identifier: Unlicense pragma solidity ^0.8.4; -import {RLPReader} from "./RLPReader.sol"; -import {StateProofVerifier as Verifier} from "./StateProofVerifier.sol"; +import {RLPReader} from "./library/RLPReader.sol"; +import {StateProofVerifier as Verifier} from "./library/StateProofVerifier.sol"; import "hardhat/console.sol"; contract StateProver { diff --git a/src/hardhat/contracts/Fraxoracle/StateRootOracle.sol b/src/hardhat/contracts/Fraxoracle/StateRootOracle.sol new file mode 100644 index 00000000..8046814b --- /dev/null +++ b/src/hardhat/contracts/Fraxoracle/StateRootOracle.sol @@ -0,0 +1,59 @@ +// SPDX-License-Identifier: BUSL-1.1 +pragma solidity ^0.8.0; + +import "./interface/IBlockhashProvider.sol"; +import "./interface/IStateRootOracle.sol"; +import {StateProofVerifier as Verifier} from "./library/StateProofVerifier.sol"; + +contract StateRootOracle is IStateRootOracle { + mapping (uint => BlockInfo) public blocks; + uint public minProviders; + IBlockhashProvider[] public providers; + address public owner; + + event BlockVerified(uint32 blockNumber, uint32 timestamp, bytes32 stateRoot); + + constructor(IBlockhashProvider[] memory _providers, uint _minProviders) { + owner = msg.sender; + for (uint i=0;i<_providers.length;i++) { + providers.push(_providers[i]); + } + minProviders = _minProviders; + } + + function proofStateRoot(bytes memory _header) external { + Verifier.BlockHeader memory blockHeader = Verifier.verifyBlockHeader(_header); + uint count=0; + for (uint i=0;i bool) storedHashes; + + event BlockhashReceived(bytes32 hash); + + constructor(address _l1Source) { + l1Source = _l1Source; + } + + function receiveBlockHash(bytes32 hash) external { + if (msg.sender!=AddressAliasHelper.applyL1ToL2Alias(l1Source)) revert("Wrong source"); + storedHashes[hash]=true; + emit BlockhashReceived(hash); + } + + function hashStored(bytes32 hash) external view returns (bool result) { + return storedHashes[hash]; + } +} diff --git a/src/hardhat/contracts/Fraxoracle/provider/ArbitrumBlockhashRelay.sol b/src/hardhat/contracts/Fraxoracle/provider/ArbitrumBlockhashRelay.sol new file mode 100644 index 00000000..05ac2d16 --- /dev/null +++ b/src/hardhat/contracts/Fraxoracle/provider/ArbitrumBlockhashRelay.sol @@ -0,0 +1,33 @@ +//SPDX-License-Identifier: Unlicense +pragma solidity ^0.8.4; + +import "../interface/IInbox.sol"; +import "./ArbitrumBlockhashProvider.sol"; + +contract ArbitrumBlockhashRelay { + address immutable public l2Target; + IInbox immutable public inbox; + + event BlockhashRelayed(uint indexed blockNo); + + constructor(address _l2Target, IInbox _inbox) { + l2Target = _l2Target; + inbox = _inbox; + } + + function relayHash(uint blockNo, uint256 maxSubmissionCost, uint256 maxGas, uint256 gasPriceBid) external payable returns (uint256 ticketID) { + bytes32 hash = blockhash(blockNo); + bytes memory data = abi.encodeWithSelector(ArbitrumBlockhashProvider.receiveBlockHash.selector, hash); + ticketID = inbox.createRetryableTicket{ value: msg.value }( + l2Target, + 0, + maxSubmissionCost, + msg.sender, + msg.sender, + maxGas, + gasPriceBid, + data + ); + emit BlockhashRelayed(blockNo); + } +} \ No newline at end of file diff --git a/src/hardhat/contracts/Fraxoracle/provider/OperatorBlockhashProvider.sol b/src/hardhat/contracts/Fraxoracle/provider/OperatorBlockhashProvider.sol new file mode 100644 index 00000000..751b6696 --- /dev/null +++ b/src/hardhat/contracts/Fraxoracle/provider/OperatorBlockhashProvider.sol @@ -0,0 +1,25 @@ +//SPDX-License-Identifier: Unlicense +pragma solidity ^0.8.4; + +import "../interface/IBlockhashProvider.sol"; + +contract OperatorBlockhashProvider is IBlockhashProvider { + address immutable public operator; + mapping(bytes32 => bool) storedHashes; + + event BlockhashReceived(bytes32 hash); + + constructor(address _operator) { + operator = _operator; + } + + function receiveBlockHash(bytes32 hash) external { + if (msg.sender!=operator) revert("Wrong operator"); + storedHashes[hash]=true; + emit BlockhashReceived(hash); + } + + function hashStored(bytes32 hash) external view returns (bool result) { + return storedHashes[hash]; + } +} diff --git a/src/hardhat/contracts/Fraxoracle/provider/TelepathyBlockhashProvider.sol b/src/hardhat/contracts/Fraxoracle/provider/TelepathyBlockhashProvider.sol new file mode 100644 index 00000000..8df8d0af --- /dev/null +++ b/src/hardhat/contracts/Fraxoracle/provider/TelepathyBlockhashProvider.sol @@ -0,0 +1,39 @@ +//SPDX-License-Identifier: Unlicense +pragma solidity ^0.8.4; + +import "../interface/IBlockhashProvider.sol"; + +contract TelepathyBlockhashProvider is IBlockhashProvider { + address public l1Source; + address deployer; + address immutable public telepathyRouter; + mapping(bytes32 => bool) storedHashes; + + event BlockhashReceived(bytes32 hash); + + constructor(address _telepathyRouter) { + telepathyRouter = _telepathyRouter; + deployer = msg.sender; + } + + function init(address _l1Source) external { + require (msg.sender==deployer); + require(l1Source==address(0)); + l1Source = _l1Source; + } + + function handleTelepathy(uint32 _sourceChainId, address _senderAddress, bytes calldata _data) external returns (bytes4) { + require(msg.sender == telepathyRouter); + require(_senderAddress == l1Source); + require(_sourceChainId == 1); + require(_data.length == 32); + bytes32 hash = bytes32(_data[:32]); + storedHashes[hash]=true; + emit BlockhashReceived(hash); + return TelepathyBlockhashProvider.handleTelepathy.selector; + } + + function hashStored(bytes32 hash) external view returns (bool result) { + return storedHashes[hash]; + } +} diff --git a/src/hardhat/contracts/Fraxoracle/provider/TelepathyBlockhashRelay.sol b/src/hardhat/contracts/Fraxoracle/provider/TelepathyBlockhashRelay.sol new file mode 100644 index 00000000..fecb170a --- /dev/null +++ b/src/hardhat/contracts/Fraxoracle/provider/TelepathyBlockhashRelay.sol @@ -0,0 +1,24 @@ +//SPDX-License-Identifier: Unlicense +pragma solidity ^0.8.4; + +import "../interface/IInbox.sol"; +import "../interface/ITelepathyRouter.sol"; + +contract TelepathyBlockhashRelay { + ITelepathyRouter constant public telepathyRouter = ITelepathyRouter(0x41EA857C32c8Cb42EEFa00AF67862eCFf4eB795a); + address immutable public l2Target; + uint32 immutable public destinationChainId; + + event BlockhashRelayed(uint indexed blockNo); + + constructor(address _l2Target,uint32 _destinationChainId) { + l2Target = _l2Target; + destinationChainId = _destinationChainId; + } + + function relayHash(uint blockNo) external payable returns (uint256 ticketID) { + bytes32 hash = blockhash(blockNo); + ticketID = uint(telepathyRouter.send(destinationChainId,l2Target,abi.encodePacked(hash))); + emit BlockhashRelayed(blockNo); + } +} \ No newline at end of file diff --git a/src/hardhat/contracts/Misc_AMOs/IConvexAMO_Old.sol b/src/hardhat/contracts/Misc_AMOs/IConvexAMO_Old.sol new file mode 100644 index 00000000..95dc9274 --- /dev/null +++ b/src/hardhat/contracts/Misc_AMOs/IConvexAMO_Old.sol @@ -0,0 +1,72 @@ +// SPDX-License-Identifier: GPL-2.0-or-later +pragma solidity >=0.8.0; + +interface IConvexAMO_Old { + function DEFAULT_ADMIN_ROLE ( ) external view returns ( bytes32 ); + function FRAX3CRVInVault ( ) external view returns ( uint256 ); + function acceptOwnership ( ) external; + function borrowedCollatBalance ( ) external view returns ( int256 ); + function borrowed_collat_historical ( ) external view returns ( int256 ); + function burnFRAX ( uint256 frax_amount ) external; + function burnFXS ( uint256 amount ) external; + function burned_frax_historical ( ) external view returns ( int256 ); + function claimRewardsFRAX3CRV ( ) external; + function claimRewards_cvxCRV ( bool stake ) external; + function collatDollarBalance ( ) external view returns ( uint256 ); + function collat_borrow_cap ( ) external view returns ( int256 ); + function convergence_window ( ) external view returns ( uint256 ); + function custodian_address ( ) external view returns ( address ); + function custom_floor ( ) external view returns ( bool ); + function depositFRAX3CRV ( uint256 _metapool_lp_in ) external; + function discount_rate ( ) external view returns ( uint256 ); + function fraxDiscountRate ( ) external view returns ( uint256 ); + function fraxFloor ( ) external view returns ( uint256 ); + function frax_floor ( ) external view returns ( uint256 ); + function getRoleAdmin ( bytes32 role ) external view returns ( bytes32 ); + function getRoleMember ( bytes32 role, uint256 index ) external view returns ( address ); + function getRoleMemberCount ( bytes32 role ) external view returns ( uint256 ); + function giveCollatBack ( uint256 amount ) external; + function grantRole ( bytes32 role, address account ) external; + function hasRole ( bytes32 role, address account ) external view returns ( bool ); + function initialize ( address _frax_contract_address, address _fxs_address, address _collateral_address, address _creator_address, address _custodian_address, address _timelock_address, address _frax3crv_metapool_address, address _pool_address ) external; + function iterate ( ) external view returns ( uint256, uint256, uint256, uint256 ); + function liq_slippage_3crv ( ) external view returns ( uint256 ); + function max_frax_outstanding ( ) external view returns ( int256 ); + function metapoolDeposit ( uint256 _frax_amount, uint256 _collateral_amount ) external returns ( uint256 metapool_LP_received ); + function metapoolWithdrawAndConvert3pool ( uint256 _metapool_lp_in ) external; + function metapoolWithdrawFrax ( uint256 _metapool_lp_in, bool burn_the_frax ) external returns ( uint256 frax_received ); + function min_cr ( ) external view returns ( uint256 ); + function mintRedeemPart1 ( uint256 frax_amount ) external; + function mintRedeemPart2 ( ) external; + function mintedBalance ( ) external view returns ( int256 ); + function minted_frax_historical ( ) external view returns ( int256 ); + function nominateNewOwner ( address _owner ) external; + function nominatedOwner ( ) external view returns ( address ); + function override_collat_balance ( ) external view returns ( bool ); + function override_collat_balance_amount ( ) external view returns ( uint256 ); + function owner ( ) external view returns ( address ); + function recoverERC20 ( address tokenAddress, uint256 tokenAmount ) external; + function renounceRole ( bytes32 role, address account ) external; + function returned_collat_historical ( ) external view returns ( int256 ); + function revokeRole ( bytes32 role, address account ) external; + function setCollatBorrowCap ( int256 _collat_borrow_cap ) external; + function setConvergenceWindow ( uint256 _window ) external; + function setCustodian ( address _custodian_address ) external; + function setCustomFloor ( bool _state, uint256 _floor_price ) external; + function setDiscountRate ( bool _state, uint256 _discount_rate ) external; + function setMaxFraxOutstanding ( int256 _max_frax_outstanding ) external; + function setMinimumCollateralRatio ( uint256 _min_cr ) external; + function setOverrideCollatBalance ( bool _state, uint256 _balance ) external; + function setSlippages ( uint256 _liq_slippage_3crv, uint256 _slippage_metapool ) external; + function setTimelock ( address new_timelock ) external; + function set_discount ( ) external view returns ( bool ); + function showAllocations ( ) external view returns ( uint256[11] memory return_arr ); + function showRewards ( ) external view returns ( uint256[8] memory return_arr ); + function slippage_metapool ( ) external view returns ( uint256 ); + function stakeCVX ( uint256 _cvx_in ) external; + function timelock_address ( ) external view returns ( address ); + function totalInvested ( ) external view returns ( int256 ); + function withdrawAndUnwrapFRAX3CRV ( uint256 amount, bool claim ) external; + function withdrawCVX ( uint256 cvx_amt, bool claim ) external; + function withdrawRewards ( uint256 crv_amt, uint256 cvx_amt, uint256 cvxCRV_amt, uint256 fxs_amt ) external; +} diff --git a/src/hardhat/contracts/Misc_AMOs/convex/ICvxLockerV2.sol b/src/hardhat/contracts/Misc_AMOs/convex/ICvxLockerV2.sol new file mode 100644 index 00000000..a6f9106d --- /dev/null +++ b/src/hardhat/contracts/Misc_AMOs/convex/ICvxLockerV2.sol @@ -0,0 +1,83 @@ +// SPDX-License-Identifier: GPL-2.0-or-later +pragma solidity >=0.8.0; + +interface ICvxLockerV2 { +struct EarnedData { + address token; + uint256 amount; +} + +struct LockedBalance { + uint112 amount; + uint112 boosted; + uint32 unlockTime; +} + + function addReward ( address _rewardsToken, address _distributor, bool _useBoost ) external; + function approveRewardDistributor ( address _rewardsToken, address _distributor, bool _approved ) external; + function balanceAtEpochOf ( uint256 _epoch, address _user ) external view returns ( uint256 amount ); + function balanceOf ( address _user ) external view returns ( uint256 amount ); + function balances ( address ) external view returns ( uint112 locked, uint112 boosted, uint32 nextUnlockIndex ); + function boostPayment ( ) external view returns ( address ); + function boostRate ( ) external view returns ( uint256 ); + function boostedSupply ( ) external view returns ( uint256 ); + function checkpointEpoch ( ) external; + function claimableRewards ( address _account ) external view returns ( EarnedData[] memory userRewards ); + function cvxCrv ( ) external view returns ( address ); + function cvxcrvStaking ( ) external view returns ( address ); + function decimals ( ) external view returns ( uint8 ); + function denominator ( ) external view returns ( uint256 ); + function epochCount ( ) external view returns ( uint256 ); + function epochs ( uint256 ) external view returns ( uint224 supply, uint32 date ); + function findEpochId ( uint256 _time ) external view returns ( uint256 epoch ); + function getReward ( address _account, bool _stake ) external; + function getReward ( address _account ) external; + function getRewardForDuration ( address _rewardsToken ) external view returns ( uint256 ); + function isShutdown ( ) external view returns ( bool ); + function kickExpiredLocks ( address _account ) external; + function kickRewardEpochDelay ( ) external view returns ( uint256 ); + function kickRewardPerEpoch ( ) external view returns ( uint256 ); + function lastTimeRewardApplicable ( address _rewardsToken ) external view returns ( uint256 ); + function lock ( address _account, uint256 _amount, uint256 _spendRatio ) external; + function lockDuration ( ) external view returns ( uint256 ); + function lockedBalanceOf ( address _user ) external view returns ( uint256 amount ); + function lockedBalances ( address _user ) external view returns ( uint256 total, uint256 unlockable, uint256 locked, LockedBalance[] memory lockData ); + function lockedSupply ( ) external view returns ( uint256 ); + function maximumBoostPayment ( ) external view returns ( uint256 ); + function maximumStake ( ) external view returns ( uint256 ); + function minimumStake ( ) external view returns ( uint256 ); + function name ( ) external view returns ( string memory ); + function nextBoostRate ( ) external view returns ( uint256 ); + function nextMaximumBoostPayment ( ) external view returns ( uint256 ); + function notifyRewardAmount ( address _rewardsToken, uint256 _reward ) external; + function owner ( ) external view returns ( address ); + function pendingLockAtEpochOf ( uint256 _epoch, address _user ) external view returns ( uint256 amount ); + function pendingLockOf ( address _user ) external view returns ( uint256 amount ); + function processExpiredLocks ( bool _relock ) external; + function recoverERC20 ( address _tokenAddress, uint256 _tokenAmount ) external; + function renounceOwnership ( ) external; + function rewardData ( address ) external view returns ( bool useBoost, uint40 periodFinish, uint208 rewardRate, uint40 lastUpdateTime, uint208 rewardPerTokenStored ); + function rewardDistributors ( address, address ) external view returns ( bool ); + function rewardPerToken ( address _rewardsToken ) external view returns ( uint256 ); + function rewardTokens ( uint256 ) external view returns ( address ); + function rewardWeightOf ( address _user ) external view returns ( uint256 amount ); + function rewards ( address, address ) external view returns ( uint256 ); + function rewardsDuration ( ) external view returns ( uint256 ); + function setApprovals ( ) external; + function setBoost ( uint256 _max, uint256 _rate, address _receivingAddress ) external; + function setKickIncentive ( uint256 _rate, uint256 _delay ) external; + function setStakeLimits ( uint256 _minimum, uint256 _maximum ) external; + function setStakingContract ( address _staking ) external; + function shutdown ( ) external; + function stakeOffsetOnLock ( ) external view returns ( uint256 ); + function stakingProxy ( ) external view returns ( address ); + function stakingToken ( ) external view returns ( address ); + function symbol ( ) external view returns ( string memory ); + function totalSupply ( ) external view returns ( uint256 supply ); + function totalSupplyAtEpoch ( uint256 _epoch ) external view returns ( uint256 supply ); + function transferOwnership ( address newOwner ) external; + function userLocks ( address, uint256 ) external view returns ( uint112 amount, uint112 boosted, uint32 unlockTime ); + function userRewardPerTokenPaid ( address, address ) external view returns ( uint256 ); + function version ( ) external view returns ( uint256 ); + function withdrawExpiredLocksTo ( address _withdrawTo ) external; +} diff --git a/src/hardhat/contracts/Misc_AMOs/convex/IStakingProxyConvex.sol b/src/hardhat/contracts/Misc_AMOs/convex/IStakingProxyConvex.sol new file mode 100644 index 00000000..fd2298e1 --- /dev/null +++ b/src/hardhat/contracts/Misc_AMOs/convex/IStakingProxyConvex.sol @@ -0,0 +1,40 @@ +// SPDX-License-Identifier: GPL-2.0-or-later +pragma solidity >=0.8.0; + + +interface IStakingProxyConvex { + function FEE_DENOMINATOR ( ) external view returns ( uint256 ); + function changeRewards ( address _rewardsAddress ) external; + function checkpointRewards ( ) external; + function convexCurveBooster ( ) external view returns ( address ); + function convexDepositToken ( ) external view returns ( address ); + function crv ( ) external view returns ( address ); + function curveLpToken ( ) external view returns ( address ); + function cvx ( ) external view returns ( address ); + function earned ( ) external view returns ( address[] memory token_addresses, uint256[] memory total_earned ); + function feeRegistry ( ) external view returns ( address ); + function fxs ( ) external view returns ( address ); + function getReward ( ) external; + function getReward ( bool _claim, address[] memory _rewardTokenList ) external; + function getReward ( bool _claim ) external; + function initialize ( address _owner, address _stakingAddress, address _stakingToken, address _rewardsAddress ) external; + function lockAdditional ( bytes32 _kek_id, uint256 _addl_liq ) external; + function lockAdditionalConvexToken ( bytes32 _kek_id, uint256 _addl_liq ) external; + function lockAdditionalCurveLp ( bytes32 _kek_id, uint256 _addl_liq ) external; + function lockLonger ( bytes32 _kek_id, uint256 new_ending_ts ) external; + function owner ( ) external view returns ( address ); + function poolRegistry ( ) external view returns ( address ); + function rewards ( ) external view returns ( address ); + function setVeFXSProxy ( address _proxy ) external; + function stakeLocked ( uint256 _liquidity, uint256 _secs ) external returns ( bytes32 kek_id ); + function stakeLockedConvexToken ( uint256 _liquidity, uint256 _secs ) external returns ( bytes32 kek_id ); + function stakeLockedCurveLp ( uint256 _liquidity, uint256 _secs ) external returns ( bytes32 kek_id ); + function stakingAddress ( ) external view returns ( address ); + function stakingToken ( ) external view returns ( address ); + function usingProxy ( ) external view returns ( address ); + function vaultType ( ) external pure returns ( uint8 ); + function vaultVersion ( ) external pure returns ( uint256 ); + function vefxsProxy ( ) external view returns ( address ); + function withdrawLocked ( bytes32 _kek_id ) external; + function withdrawLockedAndUnwrap ( bytes32 _kek_id ) external; +} diff --git a/src/hardhat/contracts/Misc_AMOs/curve/I2PoolcvxCRVCRV.sol b/src/hardhat/contracts/Misc_AMOs/curve/I2PoolcvxCRVCRV.sol new file mode 100644 index 00000000..288ed9d5 --- /dev/null +++ b/src/hardhat/contracts/Misc_AMOs/curve/I2PoolcvxCRVCRV.sol @@ -0,0 +1,60 @@ +// SPDX-License-Identifier: GPL-2.0-or-later +pragma solidity ^0.8.0; + + +interface I2PoolcvxCRVCRV { + function initialize ( string memory _name, string memory _symbol, address[4] memory _coins, uint256[4] memory _rate_multipliers, uint256 _A, uint256 _fee ) external; + function decimals ( ) external view returns ( uint8 ); + function transfer ( address _to, uint256 _value ) external returns ( bool ); + function transferFrom ( address _from, address _to, uint256 _value ) external returns ( bool ); + function approve ( address _spender, uint256 _value ) external returns ( bool ); + function permit ( address _owner, address _spender, uint256 _value, uint256 _deadline, uint8 _v, bytes32 _r, bytes32 _s ) external returns ( bool ); + function last_price ( ) external view returns ( uint256 ); + function ema_price ( ) external view returns ( uint256 ); + function get_balances ( ) external view returns ( uint256[2] memory ); + function admin_fee ( ) external view returns ( uint256 ); + function A ( ) external view returns ( uint256 ); + function A_precise ( ) external view returns ( uint256 ); + function get_p ( ) external view returns ( uint256 ); + function price_oracle ( ) external view returns ( uint256 ); + function get_virtual_price ( ) external view returns ( uint256 ); + function calc_token_amount ( uint256[2] memory _amounts, bool _is_deposit ) external view returns ( uint256 ); + function add_liquidity ( uint256[2] memory _amounts, uint256 _min_mint_amount ) external returns ( uint256 ); + function add_liquidity ( uint256[2] memory _amounts, uint256 _min_mint_amount, address _receiver ) external returns ( uint256 ); + function get_dy ( int128 i, int128 j, uint256 dx ) external view returns ( uint256 ); + function exchange ( int128 i, int128 j, uint256 _dx, uint256 _min_dy ) external returns ( uint256 ); + // function exchange ( int128 i, int128 j, uint256 _dx, uint256 _min_dy, address _receiver ) external returns ( uint256 ); + function remove_liquidity ( uint256 _burn_amount, uint256[2] memory _min_amounts ) external returns ( uint256[2] memory ); + function remove_liquidity ( uint256 _burn_amount, uint256[2] memory _min_amounts, address _receiver ) external returns ( uint256[2] memory ); + function remove_liquidity_imbalance ( uint256[2] memory _amounts, uint256 _max_burn_amount ) external returns ( uint256 ); + function remove_liquidity_imbalance ( uint256[2] memory _amounts, uint256 _max_burn_amount, address _receiver ) external returns ( uint256 ); + function calc_withdraw_one_coin ( uint256 _burn_amount, int128 i ) external view returns ( uint256 ); + function remove_liquidity_one_coin ( uint256 _burn_amount, int128 i, uint256 _min_received ) external returns ( uint256 ); + function remove_liquidity_one_coin ( uint256 _burn_amount, int128 i, uint256 _min_received, address _receiver ) external returns ( uint256 ); + function ramp_A ( uint256 _future_A, uint256 _future_time ) external; + function stop_ramp_A ( ) external; + function set_ma_exp_time ( uint256 _ma_exp_time ) external; + function admin_balances ( uint256 i ) external view returns ( uint256 ); + function commit_new_fee ( uint256 _new_fee ) external; + function apply_new_fee ( ) external; + function withdraw_admin_fees ( ) external; + function version ( ) external pure returns ( string memory ); + function coins ( uint256 arg0 ) external view returns ( address ); + function balances ( uint256 arg0 ) external view returns ( uint256 ); + function fee ( ) external view returns ( uint256 ); + function future_fee ( ) external view returns ( uint256 ); + function admin_action_deadline ( ) external view returns ( uint256 ); + function initial_A ( ) external view returns ( uint256 ); + function future_A ( ) external view returns ( uint256 ); + function initial_A_time ( ) external view returns ( uint256 ); + function future_A_time ( ) external view returns ( uint256 ); + function name ( ) external view returns ( string memory ); + function symbol ( ) external view returns ( string memory ); + function balanceOf ( address arg0 ) external view returns ( uint256 ); + function allowance ( address arg0, address arg1 ) external view returns ( uint256 ); + function totalSupply ( ) external view returns ( uint256 ); + function DOMAIN_SEPARATOR ( ) external view returns ( bytes32 ); + function nonces ( address arg0 ) external view returns ( uint256 ); + function ma_exp_time ( ) external view returns ( uint256 ); + function ma_last_time ( ) external view returns ( uint256 ); +} diff --git a/src/hardhat/contracts/Staking/FraxUnifiedFarmTemplate_V2.sol b/src/hardhat/contracts/Staking/FraxUnifiedFarmTemplate_V2.sol index d513143b..695b139c 100755 --- a/src/hardhat/contracts/Staking/FraxUnifiedFarmTemplate_V2.sol +++ b/src/hardhat/contracts/Staking/FraxUnifiedFarmTemplate_V2.sol @@ -905,4 +905,4 @@ contract FraxUnifiedFarmTemplate_V2 is OwnedV2, ReentrancyGuardV2 { // ,--'/` ' // // [hjw] https://textart.io/art/vw6Sa3iwqIRGkZsN1BC2vweF/chicken -} +} \ No newline at end of file diff --git a/src/hardhat/gnosis-safe-scripts/Bribe_Related/BSC/BSC_Rewards_Collection.json b/src/hardhat/gnosis-safe-scripts/Bribe_Related/BSC/BSC_Rewards_Collection.json new file mode 100644 index 00000000..ecc23de1 --- /dev/null +++ b/src/hardhat/gnosis-safe-scripts/Bribe_Related/BSC/BSC_Rewards_Collection.json @@ -0,0 +1 @@ +{"version":"1.0","chainId":"56","createdAt":1686071070000,"meta":{"name":"Transactions Batch","description":"","txBuilderVersion":"1.14.1","createdFromOwnerAddress":"","checksum":"0xe66490bd7505f02b0c3251509b7ade1449247dab698ebecde4a4d4bf2bda6aac"},"transactions":[{"to":"0xC6bE40f6a14D4C2F3AAdf9b02294b003e3967779","value":"0","data":null,"contractMethod":{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"claim","payable":false},"contractInputsValues":{"_tokenId":"16"}},{"to":"0x3a007F34B10A8C7af73af7Bd6e4F833dadc5225D","value":"0","data":null,"contractMethod":{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"address[]","name":"tokens","type":"address[]"}],"name":"getReward","payable":false},"contractInputsValues":{"tokenId":"16","tokens":"[\"0xe48A3d7d0Bc88d552f730B62c006bC925eadB9eE\"]"}},{"to":"0x5c2c0E71FdaFF857A9E5eF20548D043bfCC72F1b","value":"0","data":null,"contractMethod":{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"address[]","name":"tokens","type":"address[]"}],"name":"getReward","payable":false},"contractInputsValues":{"tokenId":"16","tokens":"[\"0xe48A3d7d0Bc88d552f730B62c006bC925eadB9eE\", \"0xdDC3D26BAA9D2d979F5E2e42515478bf18F354D5\"]"}},{"to":"0x1E0d61C4072f8DeE0C6E1666Bc87d38EAEBe9332","value":"0","data":null,"contractMethod":{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"address[]","name":"tokens","type":"address[]"}],"name":"getReward","payable":false},"contractInputsValues":{"tokenId":"16","tokens":"[\"0x2F29Bc0FFAF9bff337b31CBe6CB5Fb3bf12e5840\", \"0xe48A3d7d0Bc88d552f730B62c006bC925eadB9eE\"]"}}]} \ No newline at end of file diff --git a/src/hardhat/gnosis-safe-scripts/Bribe_Related/BSC/Reward_Collections.js b/src/hardhat/gnosis-safe-scripts/Bribe_Related/BSC/Reward_Collections.js new file mode 100644 index 00000000..6d18793d --- /dev/null +++ b/src/hardhat/gnosis-safe-scripts/Bribe_Related/BSC/Reward_Collections.js @@ -0,0 +1,244 @@ +const path = require("path"); +const envPath = path.join(process.cwd(), "../../../../../.env"); +require("dotenv").config({ path: envPath }); +const { ethers } = require("hardhat"); + +const { BigNumber } = require("@ethersproject/bignumber"); +const util = require("util"); +const chalk = require("chalk"); +const fse = require("fs-extra"); +const { formatUnits } = require("ethers/lib/utils"); +const constants = require(path.join(__dirname, '../../../../../dist/types/constants')); + +global.artifacts = artifacts; +global.web3 = web3; + +const BIG6 = BigNumber.from(10).pow(6); +const BIG18 = BigNumber.from(10).pow(18); + +const hre = require("hardhat"); + +const CONTRACT_ADDRESSES = constants.CONTRACT_ADDRESSES; +let CHAIN_ID = CONTRACT_ADDRESSES.bsc.chain_id.toString(); +let MSIG_ADDRESS = CONTRACT_ADDRESSES.bsc.Comptrollers; + +const batch_json = { + "version": "1.0", + "chainId": CHAIN_ID, + "createdAt": 1685556909304, + "meta": { + "name": "Transactions Batch", + "description": "", + "txBuilderVersion": "1.14.1", + "createdFromSafeAddress": MSIG_ADDRESS, + "createdFromOwnerAddress": "", + "checksum": "0x" + }, + "transactions": [ + ] +} + +async function main() { + // Set up the provider for some future calls + [owner, addr1, addr2] = await ethers.getSigners(); + + + console.log(`Using env file from ${envPath}`); + const thisBlock = await ethers.provider.getBlock(await ethers.provider.getBlockNumber()); + + + // =============================================================== + // ===================== REWARDS COLLECTION ====================== + // =============================================================== + + // THENA #1 + // ===================================== + batch_json.transactions.push({ + "to": "0xC6bE40f6a14D4C2F3AAdf9b02294b003e3967779", + "value": "0", + "data": null, + "contractMethod": { + "inputs": [ + { + "internalType": "uint256", + "name": "_tokenId", + "type": "uint256" + } + ], + "name": "claim", + "payable": false + }, + "contractInputsValues": { + "_tokenId": "16" + } + }); + + // THENA #2 + // ===================================== + batch_json.transactions.push({ + "to": "0x3a007F34B10A8C7af73af7Bd6e4F833dadc5225D", + "value": "0", + "data": null, + "contractMethod": { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "internalType": "address[]", + "name": "tokens", + "type": "address[]" + } + ], + "name": "getReward", + "payable": false + }, + "contractInputsValues": { + "tokenId": "16", + "tokens": "[\"0xe48A3d7d0Bc88d552f730B62c006bC925eadB9eE\"]" + } + }); + + // THENA #3 + // ===================================== + batch_json.transactions.push({ + "to": "0x5c2c0E71FdaFF857A9E5eF20548D043bfCC72F1b", + "value": "0", + "data": null, + "contractMethod": { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "internalType": "address[]", + "name": "tokens", + "type": "address[]" + } + ], + "name": "getReward", + "payable": false + }, + "contractInputsValues": { + "tokenId": "16", + "tokens": "[\"0xe48A3d7d0Bc88d552f730B62c006bC925eadB9eE\", \"0xdDC3D26BAA9D2d979F5E2e42515478bf18F354D5\"]" + } + }); + + // THENA #4 + // ===================================== + batch_json.transactions.push({ + "to": "0x1E0d61C4072f8DeE0C6E1666Bc87d38EAEBe9332", + "value": "0", + "data": null, + "contractMethod": { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "internalType": "address[]", + "name": "tokens", + "type": "address[]" + } + ], + "name": "getReward", + "payable": false + }, + "contractInputsValues": { + "tokenId": "16", + "tokens": "[\"0x2F29Bc0FFAF9bff337b31CBe6CB5Fb3bf12e5840\", \"0xe48A3d7d0Bc88d552f730B62c006bC925eadB9eE\"]" + } + }); + + + // =============================================================== + // ======================= CREATE THE JSON ======================= + // =============================================================== + + // Insert the checksum and the timestamp + batch_json.createdAt = thisBlock.timestamp * 1000; + batch_json.meta.checksum = calculateChecksum(batch_json); + + // console.log(JSON.stringify(batch_json)); + fse.writeFileSync( + path.join(__dirname, 'BSC_Rewards_Collection.json'), + JSON.stringify(batch_json), + "utf8" + ); + +} + +const stringifyReplacer = (_, value) => (value === undefined ? null : value) + +const serializeJSONObject = (json) => { + if (Array.isArray(json)) { + return `[${json.map((el) => serializeJSONObject(el)).join(',')}]` + } + + if (typeof json === 'object' && json !== null) { + let acc = '' + const keys = Object.keys(json).sort() + acc += `{${JSON.stringify(keys, stringifyReplacer)}` + + for (let i = 0; i < keys.length; i++) { + acc += `${serializeJSONObject(json[keys[i]])},` + } + + return `${acc}}` + } + + return `${JSON.stringify(json, stringifyReplacer)}` +} + +const calculateChecksum = (batchFile) => { + const serialized = serializeJSONObject({ + ...batchFile, + meta: { ...batchFile.meta, name: null }, + }) + const sha = web3.utils.sha3(serialized) + + return sha || undefined +} + + +// From https://docs.convexfinance.com/convexfinanceintegration/cvx-minting +const GetCVXMintAmount = ( crvEarned, cvxTotalSupply ) => { + // Constants + let cliffSize = BigNumber.from("1000000000000000000").mul(100000); // New cliff every 100000 tokens + let cliffCount = BigNumber.from("1000"); // 1,000 cliffs + let maxSupply = BigNumber.from("1000000000000000000").mul(100000000); // 100 mil max supply + + // Get current cliff + let currentCliff = cvxTotalSupply.div(cliffSize); + + // If current cliff is under the max + if(currentCliff.lt(cliffCount)){ + // Get remaining cliffs + let remaining = cliffCount.sub(currentCliff); + + // Multiply ratio of remaining cliffs to total cliffs against amount CRV received + var cvxEarned = (crvEarned.mul(remaining)).div(cliffCount); + + // Double check we have not gone over the max supply + var amountTillMax = maxSupply.sub(cvxTotalSupply); + if(cvxEarned.gt(amountTillMax)){ + cvxEarned = amountTillMax; + } + return cvxEarned; + } + return BigNumber.from(0); +} + +main() + .then(() => process.exit(0)) + .catch((error) => { + console.error(error); + process.exit(1); + }); diff --git a/src/hardhat/gnosis-safe-scripts/Bribe_Related/test-abi.json b/src/hardhat/gnosis-safe-scripts/Bribe_Related/test-abi.json new file mode 100644 index 00000000..96b717aa --- /dev/null +++ b/src/hardhat/gnosis-safe-scripts/Bribe_Related/test-abi.json @@ -0,0 +1,829 @@ +[ + { + "inputs": [ + { + "internalType": "address", + "name": "_owner", + "type": "address" + }, + { + "internalType": "address", + "name": "_voter", + "type": "address" + }, + { + "internalType": "address", + "name": "_bribeFactory", + "type": "address" + }, + { + "internalType": "string", + "name": "_type", + "type": "string" + } + ], + "stateMutability": "nonpayable", + "type": "constructor" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "token", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "Recovered", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "rewardToken", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "reward", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "startTimestamp", + "type": "uint256" + } + ], + "name": "RewardAdded", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "user", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "rewardsToken", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "reward", + "type": "uint256" + } + ], + "name": "RewardPaid", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "Staked", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "Withdrawn", + "type": "event" + }, + { + "inputs": [], + "name": "TYPE", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "WEEK", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + } + ], + "name": "_deposit", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "name": "_totalSupply", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + } + ], + "name": "_withdraw", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_rewardsToken", + "type": "address" + } + ], + "name": "addReward", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address[]", + "name": "_rewardsToken", + "type": "address[]" + } + ], + "name": "addRewards", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + } + ], + "name": "balanceOf", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "_timestamp", + "type": "uint256" + } + ], + "name": "balanceOfAt", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_owner", + "type": "address" + } + ], + "name": "balanceOfOwner", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_owner", + "type": "address" + }, + { + "internalType": "uint256", + "name": "_timestamp", + "type": "uint256" + } + ], + "name": "balanceOfOwnerAt", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "bribeFactory", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_owner", + "type": "address" + }, + { + "internalType": "address", + "name": "_rewardToken", + "type": "address" + } + ], + "name": "earned", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "internalType": "address", + "name": "_rewardToken", + "type": "address" + } + ], + "name": "earned", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "tokenAddress", + "type": "address" + }, + { + "internalType": "uint256", + "name": "tokenAmount", + "type": "uint256" + } + ], + "name": "emergencyRecoverERC20", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "firstBribeTimestamp", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getEpochStart", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getNextEpochStart", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address[]", + "name": "tokens", + "type": "address[]" + } + ], + "name": "getReward", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "internalType": "address[]", + "name": "tokens", + "type": "address[]" + } + ], + "name": "getReward", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_owner", + "type": "address" + }, + { + "internalType": "address[]", + "name": "tokens", + "type": "address[]" + } + ], + "name": "getRewardForAddress", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "internalType": "address[]", + "name": "tokens", + "type": "address[]" + } + ], + "name": "getRewardForOwner", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "name": "isRewardToken", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "minter", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_rewardsToken", + "type": "address" + }, + { + "internalType": "uint256", + "name": "reward", + "type": "uint256" + } + ], + "name": "notifyRewardAmount", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "owner", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "tokenAddress", + "type": "address" + }, + { + "internalType": "uint256", + "name": "tokenAmount", + "type": "uint256" + } + ], + "name": "recoverERC20AndUpdateData", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + }, + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "name": "rewardData", + "outputs": [ + { + "internalType": "uint256", + "name": "periodFinish", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "rewardsPerEpoch", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "lastUpdateTime", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_rewardsToken", + "type": "address" + }, + { + "internalType": "uint256", + "name": "_timestmap", + "type": "uint256" + } + ], + "name": "rewardPerToken", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "name": "rewardTokens", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "rewardsListLength", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_minter", + "type": "address" + } + ], + "name": "setMinter", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_owner", + "type": "address" + } + ], + "name": "setOwner", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_Voter", + "type": "address" + } + ], + "name": "setVoter", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "totalSupply", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "_timestamp", + "type": "uint256" + } + ], + "name": "totalSupplyAt", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + }, + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "name": "userRewardPerTokenPaid", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + }, + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "name": "userTimestamp", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "ve", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "voter", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + } +] \ No newline at end of file diff --git a/src/hardhat/gnosis-safe-scripts/Frax_Comptroller_Routine/Sunday_Part_1.js b/src/hardhat/gnosis-safe-scripts/Frax_Comptroller_Routine/Sunday_Part_1.js new file mode 100644 index 00000000..d277e584 --- /dev/null +++ b/src/hardhat/gnosis-safe-scripts/Frax_Comptroller_Routine/Sunday_Part_1.js @@ -0,0 +1,1073 @@ +const path = require("path"); +const envPath = path.join(process.cwd(), "../../../.env"); +require("dotenv").config({ path: envPath }); +const { ethers } = require("hardhat"); + +const { BigNumber } = require("@ethersproject/bignumber"); +const util = require("util"); +const chalk = require("chalk"); +const fse = require("fs-extra"); +const { formatUnits } = require("ethers/lib/utils"); + +global.artifacts = artifacts; +global.web3 = web3; + +const BIG6 = BigNumber.from(10).pow(6); +const BIG18 = BigNumber.from(10).pow(18); + +const hre = require("hardhat"); + +const batch_json = { + "version": "1.0", + "chainId": "1", + "createdAt": 1685556909304, + "meta": { + "name": "Transactions Batch", + "description": "", + "txBuilderVersion": "1.14.1", + "createdFromSafeAddress": "0xB1748C79709f4Ba2Dd82834B8c82D4a505003f27", + "createdFromOwnerAddress": "", + "checksum": "0x" + }, + "transactions": [ + ] +} + +async function main() { + // Set up the provider for some future calls + [owner, addr1, addr2] = await ethers.getSigners(); + + // Useful info to use later + const summary_info = { + crv_to_save: BigNumber.from(0), + crv_to_convert_to_cvxcrv: BigNumber.from(0), + crv_to_send_to_curve_voter_proxy: BigNumber.from(0), + crv_new_voter_proxy_add_done: false, + crv_to_sell: BigNumber.from(0), + cvx_to_lock: BigNumber.from(0), + cvx_new_lock_done: false, + cvx_to_sell: BigNumber.from(0), + "3crv_direct_collected": BigNumber.from(0), + cvxcrv_direct_collected: BigNumber.from(0), + } + + console.log(`Using env file from ${envPath}`); + const thisBlock = await ethers.provider.getBlock(await ethers.provider.getBlockNumber()); + + + // =============================================================== + // ===================== WEEKLY veFXS YIELD ====================== + // =============================================================== + + // Approve for weekly veFXS rewards + // ===================================== + batch_json.transactions.push({ + "to": "0x3432B6A60D23Ca0dFCa7761B7ab56459D9C964D0", + "value": "0", + "data": null, + "contractMethod": { + "inputs": [ + { + "internalType": "address", + "name": "spender", + "type": "address" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "approve", + "payable": false + }, + "contractInputsValues": { + "spender": "0xc6764e58b36e26b08Fd1d2AeD4538c02171fA872", + "amount": "7500000000000000000000" + } + }); + + // NotifyRewardAmount for weekly veFXS rewards + // ===================================== + batch_json.transactions.push({ + "to": "0xc6764e58b36e26b08Fd1d2AeD4538c02171fA872", + "value": "0", + "data": null, + "contractMethod": { + "inputs": [ + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + }, + ], + "name": "notifyRewardAmount", + "payable": false + }, + "contractInputsValues": { + "amount": "7500000000000000000000" + } + }); + + + // =============================================================== + // =========================== CONVEX ============================ + // =============================================================== + + // Convex AMO rewards (collect) + // ===================================== + // Record the amount of CRV and CVX earned first + // Get CVX total supply + const ERC20_json_path = path.join(__dirname, '../../artifacts/contracts/ERC20/ERC20.sol/ERC20.json'); + const { abi: ERC20_ABI } = JSON.parse( await fse.readFileSync(ERC20_json_path, 'utf-8')); + const cvx = new ethers.Contract("0x4e3fbd56cd56c3e72c1403e103b45db9da5b9d2b", ERC20_ABI).connect(owner); + const cvx_total_supply = BigNumber.from(await cvx.totalSupply()); + // console.log(cvx_total_supply.toString()); + + // Get CRV rewards + const IConvexAMO_Old_json_path = path.join(__dirname, '../../artifacts/contracts/Misc_AMOs/IConvexAMO_Old.sol/IConvexAMO_Old.json'); + const { abi: IConvexAMO_Old_ABI } = JSON.parse( await fse.readFileSync(IConvexAMO_Old_json_path, 'utf-8')); + const convex_amo = new ethers.Contract("0x49ee75278820f409ecd67063D8D717B38d66bd71", IConvexAMO_Old_ABI).connect(owner); + const convex_amo_rewards = await convex_amo.showRewards(); + const crv_from_convex_amo = BigNumber.from(convex_amo_rewards[0]); + const cvx_from_convex_amo = GetCVXMintAmount(crv_from_convex_amo, cvx_total_supply); + console.log(`----------- Convex AMO (FRAX3CRV) -----------`); + console.log(`CRV: ${formatUnits(crv_from_convex_amo, 18)}`); + console.log(`CVX: ${formatUnits(cvx_from_convex_amo, 18)}`); + summary_info.crv_to_sell = summary_info.crv_to_sell.add(crv_from_convex_amo); + summary_info.cvx_to_lock = summary_info.cvx_to_lock.add(cvx_from_convex_amo); + + batch_json.transactions.push({ + "to": "0x49ee75278820f409ecd67063D8D717B38d66bd71", + "value": "0", + "data": null, + "contractMethod": { + "inputs": [], + "name": "claimRewardsFRAX3CRV", + "payable": false + }, + "contractInputsValues": null + }); + + // Convex AMO rewards (withdraw) + // ===================================== + batch_json.transactions.push({ + "to": "0x49ee75278820f409ecd67063D8D717B38d66bd71", + "value": "0", + "data": null, + "contractMethod": { + "inputs": [ + { + "internalType": "uint256", + "name": "crv_amt", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "cvx_amt", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "cvxCRV_amt", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "fxs_amt", + "type": "uint256" + } + ], + "name": "withdrawRewards", + "payable": false + }, + "contractInputsValues": { + "crv_amt": crv_from_convex_amo.toString(), + "cvx_amt": cvx_from_convex_amo.toString(), + "cvxCRV_amt": "0", + "fxs_amt": "0", + } + }); + + // Curve Voter Proxy (withdraw 3CRV rewards) + // TODO + + // Curve Voter Proxy rewards (claim rewards) + // ===================================== + // batch_json.transactions.push({ + // "to": "0x847FA1A5337C7f24D7066E467F2e2A0f969Ca79F", + // "value": "0", + // "data": null, + // "contractMethod": { + // "inputs": [ + // { + // "internalType": "address[]", + // "name": "_gauges", + // "type": "address[]" + // } + // ], + // "name": "claimEverything", + // "payable": false + // }, + // "contractInputsValues": { + // "_gauges": "[\"0x2932a86df44Fe8D2A706d8e9c5d51c24883423F5\", \"0xCFc25170633581Bf896CB6CDeE170e3E3Aa59503\"]" + // } + // }); + + // Convex Frax FRAX/USDC rewards + const IStakingProxyConvex = path.join(__dirname, '../../artifacts/contracts/Misc_AMOs/convex/IStakingProxyConvex.sol/IStakingProxyConvex.json'); + const { abi: IStakingProxyConvex_ABI } = JSON.parse( await fse.readFileSync(IStakingProxyConvex, 'utf-8')); + const convex_frax_usdc_staking_proxy = new ethers.Contract("0x2AA609715488B09EFA93883759e8B089FBa11296", IStakingProxyConvex_ABI).connect(owner); + const convex_frax_usdc_rewards = await convex_frax_usdc_staking_proxy.earned(); + const crv_from_convex_frax_usdc = BigNumber.from(convex_frax_usdc_rewards[1][1]); + const cvx_from_convex_frax_usdc = BigNumber.from(convex_frax_usdc_rewards[1][2]); + // FRAXBP rewards get saved/reinvested + summary_info.crv_to_save = summary_info.crv_to_save.add(crv_from_convex_frax_usdc); + summary_info.cvx_to_lock = summary_info.cvx_to_lock.add(cvx_from_convex_frax_usdc); + console.log(`----------- Convex Frax FRAX/USDC -----------`); + console.log(`CRV: ${formatUnits(crv_from_convex_frax_usdc, 18)}`); + console.log(`CVX: ${formatUnits(cvx_from_convex_frax_usdc, 18)}`); + + // ===================================== + batch_json.transactions.push({ + "to": "0x2AA609715488B09EFA93883759e8B089FBa11296", + "value": "0", + "data": null, + "contractMethod": { + "inputs": [], + "name": "getReward", + "payable": false + }, + "contractInputsValues": null + }); + + // Convex Frax Frax/FPI rewards + const convex_frax_fpi_staking_proxy = new ethers.Contract("0x2df2378103baB456457329D4C603440B92b9c0bd", IStakingProxyConvex_ABI).connect(owner); + const convex_frax_fpi_rewards = await convex_frax_fpi_staking_proxy.earned(); + const crv_from_convex_frax_fpi = BigNumber.from(convex_frax_fpi_rewards[1][1]); + const cvx_from_convex_frax_fpi = BigNumber.from(convex_frax_fpi_rewards[1][2]); + summary_info.crv_to_sell = summary_info.crv_to_sell.add(crv_from_convex_frax_fpi); + summary_info.cvx_to_sell = summary_info.cvx_to_sell.add(cvx_from_convex_frax_fpi); + console.log(`----------- Convex Frax FRAX/FPI -----------`); + console.log(`CRV: ${formatUnits(crv_from_convex_frax_fpi, 18)}`); + console.log(`CVX: ${formatUnits(cvx_from_convex_frax_fpi, 18)}`); + // ===================================== + batch_json.transactions.push({ + "to": "0x2df2378103baB456457329D4C603440B92b9c0bd", + "value": "0", + "data": null, + "contractMethod": { + "inputs": [], + "name": "getReward", + "payable": false + }, + "contractInputsValues": null + }); + + // Convex Curve Claim All (excluding cvxCRV and locked CVX) + // ===================================== + const IConvexBaseRewardPool = path.join(__dirname, '../../artifacts/contracts/Misc_AMOs/convex/IConvexBaseRewardPool.sol/IConvexBaseRewardPool.json'); + const { abi: IConvexBaseRewardPool_ABI } = JSON.parse( await fse.readFileSync(IConvexBaseRewardPool, 'utf-8')); + const convex_cvxcrvfrax_brp = new ethers.Contract("0x7e880867363A7e321f5d260Cade2B0Bb2F717B02", IConvexBaseRewardPool_ABI).connect(owner); + const convex_cvxcrvfrax_usdp_brp = new ethers.Contract("0x6991C1CD588c4e6f6f1de3A0bac5B8BbAb7aAF6d", IConvexBaseRewardPool_ABI).connect(owner); + const convex_cvxalusd_frax3CRV = new ethers.Contract("0x26598e3E511ADFadefD70ab2C3475Ff741741104", IConvexBaseRewardPool_ABI).connect(owner); + const convex_cvxgusd_frax3CRV = new ethers.Contract("0x47809eE386D1dEC29c0b13f21ba30F564517538B", IConvexBaseRewardPool_ABI).connect(owner); + const convex_cvxlusd_frax3CRV = new ethers.Contract("0x053e1dad223A206e6BCa24C77786bb69a10e427d", IConvexBaseRewardPool_ABI).connect(owner); + + // Get earned CRV + const cvx_crv_claim_all_rews = await Promise.all([ + convex_cvxcrvfrax_brp.earned("0xB1748C79709f4Ba2Dd82834B8c82D4a505003f27"), + convex_cvxcrvfrax_usdp_brp.earned("0xB1748C79709f4Ba2Dd82834B8c82D4a505003f27"), + convex_cvxalusd_frax3CRV.earned("0xB1748C79709f4Ba2Dd82834B8c82D4a505003f27"), + convex_cvxgusd_frax3CRV.earned("0xB1748C79709f4Ba2Dd82834B8c82D4a505003f27"), + convex_cvxlusd_frax3CRV.earned("0xB1748C79709f4Ba2Dd82834B8c82D4a505003f27"), + ]) + // FRAXBP rewards get saved/reinvested, everything else is selled. + // CRV + summary_info.crv_to_save = summary_info.crv_to_save.add(cvx_crv_claim_all_rews[0]); + summary_info.crv_to_sell = summary_info.crv_to_sell + .add(cvx_crv_claim_all_rews[1]) + .add(cvx_crv_claim_all_rews[2]) + .add(cvx_crv_claim_all_rews[3]) + .add(cvx_crv_claim_all_rews[4]); + + // CVX + summary_info.cvx_to_lock = summary_info.cvx_to_lock.add(GetCVXMintAmount(cvx_crv_claim_all_rews[0], cvx_total_supply)) + summary_info.cvx_to_sell = summary_info.cvx_to_sell + .add(GetCVXMintAmount(cvx_crv_claim_all_rews[1], cvx_total_supply)) + .add(GetCVXMintAmount(cvx_crv_claim_all_rews[2], cvx_total_supply)) + .add(GetCVXMintAmount(cvx_crv_claim_all_rews[3], cvx_total_supply)) + .add(GetCVXMintAmount(cvx_crv_claim_all_rews[4], cvx_total_supply)); + + console.log(`----------- Convex Curve Others -----------`); + console.log(`convex_cvxcrvfrax_brp: ${formatUnits(cvx_crv_claim_all_rews[0], 18)} CRV, ${formatUnits(GetCVXMintAmount(cvx_crv_claim_all_rews[0], cvx_total_supply), 18)} CVX`); + console.log(`convex_cvxcrvfrax_usdp_brp: ${formatUnits(cvx_crv_claim_all_rews[1], 18)} CRV, ${formatUnits(GetCVXMintAmount(cvx_crv_claim_all_rews[1], cvx_total_supply), 18)} CVX`); + console.log(`convex_cvxalusd_frax3CRV: ${formatUnits(cvx_crv_claim_all_rews[2], 18)} CRV, ${formatUnits(GetCVXMintAmount(cvx_crv_claim_all_rews[2], cvx_total_supply), 18)} CVX`); + console.log(`convex_cvxgusd_frax3CRV: ${formatUnits(cvx_crv_claim_all_rews[3], 18)} CRV, ${formatUnits(GetCVXMintAmount(cvx_crv_claim_all_rews[3], cvx_total_supply), 18)} CVX`); + console.log(`convex_cvxlusd_frax3CRV: ${formatUnits(cvx_crv_claim_all_rews[4], 18)} CRV, ${formatUnits(GetCVXMintAmount(cvx_crv_claim_all_rews[4], cvx_total_supply), 18)} CVX`); + + batch_json.transactions.push({ + "to": "0x3f29cB4111CbdA8081642DA1f75B3c12DECf2516", + "value": "0", + "data": null, + "contractMethod": { + "inputs": [ + { + "internalType": "address[]", + "name": "rewardContracts", + "type": "address[]" + }, + { + "internalType": "address[]", + "name": "extraRewardContracts", + "type": "address[]" + }, + { + "internalType": "address[]", + "name": "tokenRewardContracts", + "type": "address[]" + }, + { + "internalType": "address[]", + "name": "tokenRewardTokens", + "type": "address[]" + }, + { + "internalType": "uint256", + "name": "depositCrvMaxAmount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "minAmountOut", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "depositCvxMaxAmount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "spendCvxAmount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "options", + "type": "uint256" + } + ], + "name": "claimRewards", + "payable": false + }, + "contractInputsValues": { + "rewardContracts": "[\"0x7e880867363A7e321f5d260Cade2B0Bb2F717B02\", \"0x6991C1CD588c4e6f6f1de3A0bac5B8BbAb7aAF6d\", \"0x26598e3E511ADFadefD70ab2C3475Ff741741104\", \"0x47809eE386D1dEC29c0b13f21ba30F564517538B\", \"0x053e1dad223A206e6BCa24C77786bb69a10e427d\"]", + "extraRewardContracts": "[]", + "tokenRewardContracts": "[]", + "tokenRewardTokens": "[]", + "depositCrvMaxAmount": "0", + "minAmountOut": "0", + "depositCvxMaxAmount": "0", + "spendCvxAmount": "0", + "options": "0", + } + }); + + // Convex Staked cvxCRV rewards (in 3CRV) + // TODO: 3CRV in. Seems complex + // ===================================== + batch_json.transactions.push({ + "to": "0xaa0C3f5F7DFD688C6E646F66CD2a6B66ACdbE434", + "value": "0", + "data": null, + "contractMethod": { + "inputs": [ + { + "internalType": "address", + "name": "_account", + "type": "address" + } + ], + "name": "getReward", + "payable": false + }, + "contractInputsValues": { + "_account": "0xB1748C79709f4Ba2Dd82834B8c82D4a505003f27", + } + }); + + // Convex Locked CVX rewards + // ===================================== + const ICvxLockerV2_json_path = path.join(__dirname, '../../artifacts/contracts/Misc_AMOs/convex/ICvxLockerV2.sol/ICvxLockerV2.json'); + const { abi: ICvxLockerV2_ABI } = JSON.parse( await fse.readFileSync(ICvxLockerV2_json_path, 'utf-8')); + let cvx_locker = new ethers.Contract("0x72a19342e8F1838460eBFCCEf09F6585e32db86E", ICvxLockerV2_ABI).connect(owner);; + const locked_cvx_rewards = await cvx_locker.claimableRewards("0xB1748C79709f4Ba2Dd82834B8c82D4a505003f27"); + summary_info.cvxcrv_direct_collected = summary_info.cvxcrv_direct_collected.add(locked_cvx_rewards[0][1]); + console.log(`----------- Convex Curve Others -----------`); + console.log(`cvxcrv_direct_collected: ${formatUnits(locked_cvx_rewards[0][1], 18)} cvxCRV`); + + batch_json.transactions.push({ + "to": "0x72a19342e8F1838460eBFCCEf09F6585e32db86E", + "value": "0", + "data": null, + "contractMethod": { + "inputs": [ + { + "internalType": "address", + "name": "_account", + "type": "address" + }, + ], + "name": "getReward", + "payable": false + }, + "contractInputsValues": { + "_account": "0xB1748C79709f4Ba2Dd82834B8c82D4a505003f27", + } + }); + + // Relock expired locked CVX + // ===================================== + // Determine if you need to process expired locks + const cvx_lock_status = await cvx_locker.lockedBalances("0xB1748C79709f4Ba2Dd82834B8c82D4a505003f27"); + const PROCESS_EXPIRED_LOCKS = (BigNumber.from(cvx_lock_status.unlockable).gt(0)); + if (PROCESS_EXPIRED_LOCKS) { + batch_json.transactions.push({ + "to": "0x72a19342e8F1838460eBFCCEf09F6585e32db86E", + "value": "0", + "data": null, + "contractMethod": { + "inputs": [ + { + "internalType": "bool", + "name": "_relock", + "type": "bool" + } + ], + "name": "processExpiredLocks", + "payable": false + }, + "contractInputsValues": { + "_relock": true, + } + }); + } + else { + console.log("No expired locks to process") + } + + + // =============================================================== + // ===================== frxETH --> sfrxETH ====================== + // =============================================================== + + // frxETH to sfrxETH approve + // ===================================== + const frxETH = new ethers.Contract("0x5E8422345238F34275888049021821E8E08CAa1f", ERC20_ABI).connect(owner); + const frxETH_balance = await frxETH.balanceOf("0xB1748C79709f4Ba2Dd82834B8c82D4a505003f27"); + batch_json.transactions.push({ + "to": "0x5E8422345238F34275888049021821E8E08CAa1f", + "value": "0", + "data": null, + "contractMethod": { + "inputs": [ + { + "internalType": "address", + "name": "spender", + "type": "address" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "approve", + "payable": false + }, + "contractInputsValues": { + "spender": "0xac3E018457B222d93114458476f3E3416Abbe38F", + "amount": frxETH_balance.toString(), + } + }); + + // frxETH to sfrxETH deposit + // ===================================== + batch_json.transactions.push({ + "to": "0xac3E018457B222d93114458476f3E3416Abbe38F", + "value": "0", + "data": null, + "contractMethod": { + "inputs": [ + { + "internalType": "uint256", + "name": "assets", + "type": "uint256" + }, + { + "internalType": "address", + "name": "receiver", + "type": "address" + } + ], + "name": "deposit", + "payable": false + }, + "contractInputsValues": { + "assets": frxETH_balance.toString(), + "receiver": "0xB1748C79709f4Ba2Dd82834B8c82D4a505003f27", + } + }); + + + // =============================================================== + // ============================ SADDLE =========================== + // =============================================================== + + // Saddle rewards + // ===================================== + batch_json.transactions.push({ + "to": "0x358fE82370a1B9aDaE2E3ad69D6cF9e503c96018", + "value": "0", + "data": null, + "contractMethod": { + "inputs": [ + { + "internalType": "address", + "name": "gauge_addr", + "type": "address" + } + ], + "name": "mint", + "payable": false + }, + "contractInputsValues": { + "gauge_addr": "0xB2Ac3382dA625eb41Fc803b57743f941a484e2a6", + } + }); + + // =============================================================== + // ============================ TOKEMAK =========================== + // =============================================================== + // TODO, but very complicated + + + // =============================================================== + // ============================ UniV3 ============================ + // =============================================================== + + // UniV3 AMO Fees + // ===================================== + batch_json.transactions.push({ + "to": "0x3814307b86b54b1d8e7B2Ac34662De9125F8f4E6", + "value": "0", + "data": null, + "contractMethod": { + "inputs": [], + "name": "collectFees", + "payable": false + }, + "contractInputsValues": null + }); + + // UniV3 NFTs + // ===================================== + // Claim once every 4 weeks to save gas + if ((Math.floor(Date.now() / 604800000) % 4) == 0) { + // FRAX / FPI 0.3% + batch_json.transactions.push({ + "to": "0xC36442b4a4522E871399CD717aBDD847Ab11FE88", + "value": "0", + "data": null, + "contractMethod": { + "inputs": [ + { + "components": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "internalType": "address", + "name": "recipient", + "type": "address" + }, + { + "internalType": "uint128", + "name": "amount0Max", + "type": "uint128" + }, + { + "internalType": "uint128", + "name": "amount1Max", + "type": "uint128" + } + ], + "internalType": "struct INonfungiblePositionManager.CollectParams", + "name": "params", + "type": "tuple" + } + ], + "name": "collect", + "payable": true + }, + "contractInputsValues": { + "params": "[\"215775\",\"0xB1748C79709f4Ba2Dd82834B8c82D4a505003f27\",\"340282366920938463463374607431768211455\",\"340282366920938463463374607431768211455\"]" + } + }); + + // FRAX / FPIS 1% + batch_json.transactions.push({ + "to": "0xC36442b4a4522E871399CD717aBDD847Ab11FE88", + "value": "0", + "data": null, + "contractMethod": { + "inputs": [ + { + "components": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "internalType": "address", + "name": "recipient", + "type": "address" + }, + { + "internalType": "uint128", + "name": "amount0Max", + "type": "uint128" + }, + { + "internalType": "uint128", + "name": "amount1Max", + "type": "uint128" + } + ], + "internalType": "struct INonfungiblePositionManager.CollectParams", + "name": "params", + "type": "tuple" + } + ], + "name": "collect", + "payable": true + }, + "contractInputsValues": { + "params": "[\"219036\",\"0xB1748C79709f4Ba2Dd82834B8c82D4a505003f27\",\"340282366920938463463374607431768211455\",\"340282366920938463463374607431768211455\"]" + } + }); + + // FPIS / ETH 1% + batch_json.transactions.push({ + "to": "0xC36442b4a4522E871399CD717aBDD847Ab11FE88", + "value": "0", + "data": null, + "contractMethod": { + "inputs": [ + { + "components": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "internalType": "address", + "name": "recipient", + "type": "address" + }, + { + "internalType": "uint128", + "name": "amount0Max", + "type": "uint128" + }, + { + "internalType": "uint128", + "name": "amount1Max", + "type": "uint128" + } + ], + "internalType": "struct INonfungiblePositionManager.CollectParams", + "name": "params", + "type": "tuple" + } + ], + "name": "collect", + "payable": true + }, + "contractInputsValues": { + "params": "[\"219099\",\"0xB1748C79709f4Ba2Dd82834B8c82D4a505003f27\",\"340282366920938463463374607431768211455\",\"340282366920938463463374607431768211455\"]" + } + }); + + // FRAX / FXS 1% + batch_json.transactions.push({ + "to": "0xC36442b4a4522E871399CD717aBDD847Ab11FE88", + "value": "0", + "data": null, + "contractMethod": { + "inputs": [ + { + "components": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "internalType": "address", + "name": "recipient", + "type": "address" + }, + { + "internalType": "uint128", + "name": "amount0Max", + "type": "uint128" + }, + { + "internalType": "uint128", + "name": "amount1Max", + "type": "uint128" + } + ], + "internalType": "struct INonfungiblePositionManager.CollectParams", + "name": "params", + "type": "tuple" + } + ], + "name": "collect", + "payable": true + }, + "contractInputsValues": { + "params": "[\"304636\",\"0xB1748C79709f4Ba2Dd82834B8c82D4a505003f27\",\"340282366920938463463374607431768211455\",\"340282366920938463463374607431768211455\"]" + } + }); + + // FRAX / frxETH 1% + batch_json.transactions.push({ + "to": "0xC36442b4a4522E871399CD717aBDD847Ab11FE88", + "value": "0", + "data": null, + "contractMethod": { + "inputs": [ + { + "components": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "internalType": "address", + "name": "recipient", + "type": "address" + }, + { + "internalType": "uint128", + "name": "amount0Max", + "type": "uint128" + }, + { + "internalType": "uint128", + "name": "amount1Max", + "type": "uint128" + } + ], + "internalType": "struct INonfungiblePositionManager.CollectParams", + "name": "params", + "type": "tuple" + } + ], + "name": "collect", + "payable": true + }, + "contractInputsValues": { + "params": "[\"419023\",\"0xB1748C79709f4Ba2Dd82834B8c82D4a505003f27\",\"340282366920938463463374607431768211455\",\"340282366920938463463374607431768211455\"]" + } + }); + } + + + // =============================================================================== + // ============================= CALCULATE SELL STUFF ============================ + // =============================================================================== + // CRV + summary_info.crv_to_convert_to_cvxcrv = summary_info.crv_to_save.mul(90).div(100); // 90% + summary_info.crv_to_send_to_curve_voter_proxy = summary_info.crv_to_save.mul(10).div(100); // 10% + summary_info.crv_to_save = BigNumber.from(0); + + console.log(`\n----------- Post Reward Collection Status -----------`); + console.log(summary_info); + + // =============================================================== + // =================== RENEW CRV AND CVX LOCKS =================== + // =============================================================== + + // Curve Voter Proxy (transfer CRV to proxy) + // ===================================== + batch_json.transactions.push({ + "to": "0xD533a949740bb3306d119CC777fa900bA034cd52", + "value": "0", + "data": null, + "contractMethod": { + "inputs": [ + { + "name": "_to", + "type": "address" + }, + { + "name": "_value", + "type": "uint256" + } + ], + "name": "transfer", + "payable": false + }, + "contractInputsValues": { + "_to": "0x847FA1A5337C7f24D7066E467F2e2A0f969Ca79F", + "_value": summary_info.crv_to_send_to_curve_voter_proxy.toString(), + } + }); + + // Curve Voter Proxy Lock + // ===================================== + batch_json.transactions.push({ + "to": "0x847FA1A5337C7f24D7066E467F2e2A0f969Ca79F", + "value": "0", + "data": null, + "contractMethod": { + "inputs": [ + { + "internalType": "uint256", + "name": "_value", + "type": "uint256" + } + ], + "name": "increaseAmount", + "payable": false + }, + "contractInputsValues": { + "_value": summary_info.crv_to_send_to_curve_voter_proxy.toString(), + } + }); + summary_info.crv_to_send_to_curve_voter_proxy = BigNumber.from(0); + summary_info.crv_new_voter_proxy_add_done = true; + + // Convex Re-lock (should already be approved) + // ===================================== + batch_json.transactions.push({ + "to": "0x72a19342e8F1838460eBFCCEf09F6585e32db86E", + "value": "0", + "data": null, + "contractMethod": { + "inputs": [ + { + "internalType": "address", + "name": "_account", + "type": "address" + }, + { + "internalType": "uint256", + "name": "_amount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "_spendRatio", + "type": "uint256" + } + ], + "name": "lock", + "payable": false + }, + "contractInputsValues": { + "_account": "0xB1748C79709f4Ba2Dd82834B8c82D4a505003f27", + "_amount": summary_info.cvx_to_lock.toString(), + "_spendRatio": "0", + } + }); + summary_info.cvx_to_lock = BigNumber.from(0); + summary_info.cvx_new_lock_done = true; + + + console.log(`\n----------- Post CRV and CVX relock Status -----------`); + console.log(summary_info); + + + // =============================================================== + // ======================== HANDLE CVXCRV ======================== + // =============================================================== + + // Swap CRV for cvxCRV + // ===================================== + const I2PoolcvxCRVCRV_json_path = path.join(__dirname, '../../artifacts/contracts/Misc_AMOs/curve/I2PoolcvxCRVCRV.sol/I2PoolcvxCRVCRV.json'); + const { abi: I2PoolcvxCRVCRV_ABI } = JSON.parse( await fse.readFileSync(I2PoolcvxCRVCRV_json_path, 'utf-8')); + let cvxcrvcrv = new ethers.Contract("0x971add32ea87f10bd192671630be3be8a11b8623", I2PoolcvxCRVCRV_ABI).connect(owner); + const est_cvxcrv_out = await cvxcrvcrv.get_dy(0, 1, summary_info.crv_to_convert_to_cvxcrv); + const slipped_cvxcrv_out = est_cvxcrv_out.mul(9997).div(10000); // 0.03% slippage + batch_json.transactions.push({ + "to": "0x971add32ea87f10bd192671630be3be8a11b8623", + "value": "0", + "data": null, + "contractMethod": { + "inputs": [ + { + "name": "i", + "type": "int128" + }, + { + "name": "j", + "type": "int128" + }, + { + "name": "_dx", + "type": "uint256" + }, + { + "name": "_min_dy", + "type": "uint256" + } + ], + "name": "exchange", + "payable": false + }, + "contractInputsValues": { + "i": "0", + "j": "1", + "_dx": summary_info.crv_to_convert_to_cvxcrv.toString(), + "_min_dy": slipped_cvxcrv_out.toString(), + } + }); + summary_info.crv_to_convert_to_cvxcrv = BigNumber.from(0); + summary_info.cvxcrv_direct_collected = summary_info.cvxcrv_direct_collected.add(slipped_cvxcrv_out); + + // Lock the cvxCRV in Convex + // ===================================== + batch_json.transactions.push({ + "to": "0xaa0C3f5F7DFD688C6E646F66CD2a6B66ACdbE434", + "value": "0", + "data": null, + "contractMethod": { + "inputs": [ + { + "internalType": "uint256", + "name": "_amount", + "type": "uint256" + }, + { + "internalType": "address", + "name": "_to", + "type": "address" + } + ], + "name": "stake", + "payable": false + }, + "contractInputsValues": { + "_amount": summary_info.cvxcrv_direct_collected.toString(), + "_to": "0xB1748C79709f4Ba2Dd82834B8c82D4a505003f27", + } + }); + summary_info.crv_to_convert_to_cvxcrv = BigNumber.from(0); + summary_info.cvxcrv_direct_collected = BigNumber.from(0); + + console.log(`\n----------- Post cvxCRV Handling Status -----------`); + console.log(summary_info); + + + // =============================================================== + // ===================== SELL THE CVX AND CRV ==================== + // =============================================================== + // TODO + + + + + // =============================================================== + // ======================= CREATE THE JSON ======================= + // =============================================================== + + // Insert the checksum and the timestamp + batch_json.createdAt = thisBlock.timestamp * 1000; + batch_json.meta.checksum = calculateChecksum(batch_json); + + // console.log(JSON.stringify(batch_json)); + fse.writeFileSync( + path.join(__dirname, 'Sunday_Part_1.json'), + JSON.stringify(batch_json), + "utf8" + ); + +} + +const stringifyReplacer = (_, value) => (value === undefined ? null : value) + +const serializeJSONObject = (json) => { + if (Array.isArray(json)) { + return `[${json.map((el) => serializeJSONObject(el)).join(',')}]` + } + + if (typeof json === 'object' && json !== null) { + let acc = '' + const keys = Object.keys(json).sort() + acc += `{${JSON.stringify(keys, stringifyReplacer)}` + + for (let i = 0; i < keys.length; i++) { + acc += `${serializeJSONObject(json[keys[i]])},` + } + + return `${acc}}` + } + + return `${JSON.stringify(json, stringifyReplacer)}` +} + +const calculateChecksum = (batchFile) => { + const serialized = serializeJSONObject({ + ...batchFile, + meta: { ...batchFile.meta, name: null }, + }) + const sha = web3.utils.sha3(serialized) + + return sha || undefined +} + + +// From https://docs.convexfinance.com/convexfinanceintegration/cvx-minting +const GetCVXMintAmount = ( crvEarned, cvxTotalSupply ) => { + // Constants + let cliffSize = BigNumber.from("1000000000000000000").mul(100000); // New cliff every 100000 tokens + let cliffCount = BigNumber.from("1000"); // 1,000 cliffs + let maxSupply = BigNumber.from("1000000000000000000").mul(100000000); // 100 mil max supply + + // Get current cliff + let currentCliff = cvxTotalSupply.div(cliffSize); + + // If current cliff is under the max + if(currentCliff.lt(cliffCount)){ + // Get remaining cliffs + let remaining = cliffCount.sub(currentCliff); + + // Multiply ratio of remaining cliffs to total cliffs against amount CRV received + var cvxEarned = (crvEarned.mul(remaining)).div(cliffCount); + + // Double check we have not gone over the max supply + var amountTillMax = maxSupply.sub(cvxTotalSupply); + if(cvxEarned.gt(amountTillMax)){ + cvxEarned = amountTillMax; + } + return cvxEarned; + } + return BigNumber.from(0); +} + +main() + .then(() => process.exit(0)) + .catch((error) => { + console.error(error); + process.exit(1); + }); diff --git a/src/hardhat/test/FraxferryV2/FerryV2-test.js b/src/hardhat/test/FraxferryV2/FerryV2-test.js index fd5c50fd..5444ca28 100644 --- a/src/hardhat/test/FraxferryV2/FerryV2-test.js +++ b/src/hardhat/test/FraxferryV2/FerryV2-test.js @@ -15,63 +15,169 @@ describe("FerryV2", function () { var contracts = await setupContracts(); // Init captain await contracts.ferryOnL1.connect(owner).initCaptain(0, 1000, 0); + + // Captain deposit on L2 await contracts.tokenL2.connect(owner).approve(contracts.ferryOnL2.address,BigInt(100e18)); await contracts.ferryOnL2.connect(owner).captainDeposit(BigInt(100e18)); + // User embarks twice on L1 await contracts.tokenL1.connect(user1).approve(contracts.ferryOnL1.address, BigInt(100e18)); await contracts.ferryOnL1.connect(user1).embarkWithRecipient(BigInt(10e18), user1.address, owner.address, 0); await contracts.ferryOnL1.connect(user1).embarkWithRecipient(BigInt(20e18), user1.address, owner.address, BigInt(10e18)); - //var blockOld = await network.provider.request({"method": "eth_getBlockByNumber","params": [BigInt(17280000).toString(),false]}); - //console.log("stateRoot 17280000:"+blockOld.stateRoot); - + // Store state root in the dummyStateRootOracle var blockNumber = await ethers.provider.getBlockNumber(); - console.log("blockNumber:"+blockNumber); - var blockNumber2 = await network.provider.request({"method": "eth_blockNumber","params": []}); - console.log("blockNumber2:"+blockNumber2); - var block = await network.provider.request({"method": "eth_getBlockByNumber","params": ["0x"+BigInt(blockNumber).toString(16),false]}); - console.log("block:"+block); - console.log("stateRoot:"+block.stateRoot); - - await contracts.dummyStateRootOracle.setStateRoot(blockNumber,block.stateRoot); + await contracts.dummyStateRootOracle.setStateRoot(blockNumber,block.stateRoot,block.timestamp); + // Generate Merkle proof var slotPos ="0x000000000000000000000000"+owner.address.substring(2)+"0000000000000000000000000000000000000000000000000000000000000000"; var slot = keccak256(slotPos); - console.log("slot:"+slot); var result = await network.provider.request({ "method": "eth_getProof", "params": [ // the address to query and generate proof for contracts.ferryOnL1.address, // storage keys to generate proofs for - ["0x"+(BigInt(keccak256(slot))+BigInt(0)).toString(16)], + ["0x"+(BigInt(keccak256(slot))+BigInt(0)).toString(16),"0x"+(BigInt(keccak256(slot))+BigInt(1)).toString(16)], // the block at which to generate the proof "0x"+BigInt(blockNumber).toString(16) ] }); - console.log(result); + //console.log(result); var proof = eval(result); - console.log(proof.storageProof[0].proof); - - await contracts.ferryOnL2.connect(user1).disembark(owner.address, 0, blockNumber, proof.accountProof,proof.storageProof[0].proof); + // Disembark on L2 + var user1BalanceBefore = BigInt(await contracts.tokenL2.balanceOf(user1.address)); + var proofs = []; + for (var i=0;i L1", async function () { + const [owner,user1,user2,user3,user4] = await ethers.getSigners(); + var contracts = await setupContracts(); + + // User embarks on L2 + var now = (await ethers.provider.getBlock(await ethers.provider.getBlockNumber())).timestamp; + var deadline = now+(60*60); + await contracts.tokenL2.connect(user1).approve(contracts.ferryOnL2.address,BigInt(10e18)); + await contracts.ferryOnL2.connect(user1).embarkWithRecipient(BigInt(10e18), BigInt(0), user1.address,deadline); + + // Captain disembarks on L1 + await contracts.tokenL1.connect(owner).approve(contracts.ferryOnL1.address,BigInt(10e18)); + var user1BalanceBefore = BigInt(await contracts.tokenL1.balanceOf(user1.address)); + await contracts.ferryOnL1.connect(owner).disembark(BigInt(10e18), user1.address,0, owner.address,deadline); + var user1TokenL1Received = BigInt(await contracts.tokenL1.balanceOf(user1.address))-user1BalanceBefore; + expect(user1TokenL1Received).to.equal(BigInt(10e18)); + + + // Generate Merkle proof + var blockNumber = await ethers.provider.getBlockNumber(); + var block = await network.provider.request({"method": "eth_getBlockByNumber","params": ["0x"+BigInt(blockNumber).toString(16),false]}); + await contracts.dummyStateRootOracle.setStateRoot(blockNumber,block.stateRoot,block.timestamp); + var toHash = "0x"+toUint256Hex(BigInt(10e18))+user1.address.substring(2)+toUint32Hex(0); + var hash = keccak256(toHash); + var slotPos ="0x"+hash.substring(2)+"0000000000000000000000000000000000000000000000000000000000000001"; + var slot = keccak256(slotPos); + var result = await network.provider.request({ + "method": "eth_getProof", + "params": [ + // the address to query and generate proof for + contracts.ferryOnL1.address, + // storage keys to generate proofs for + [slot], + // the block at which to generate the proof + "0x"+BigInt(blockNumber).toString(16) + ] + }); + var proof = eval(result); + //console.log(proof); + + // Collect captains tokens on L2 + var ownerBalanceBefore = BigInt(await contracts.tokenL2.balanceOf(owner.address)); + await contracts.ferryOnL2.connect(owner).collect(0, blockNumber, proof.accountProof,proof.storageProof[0].proof); + var ownerTokenL2Received = BigInt(await contracts.tokenL2.balanceOf(owner.address))-ownerBalanceBefore; + expect(ownerTokenL2Received).to.equal(BigInt(10e18)); + }); + + it("L2 -> L1 no disembark", async function () { + const [owner,user1,user2,user3,user4] = await ethers.getSigners(); + var contracts = await setupContracts(); + + // User embarks on L2 + var now = (await ethers.provider.getBlock(await ethers.provider.getBlockNumber())).timestamp; + var deadline = now+(60*60); + await contracts.tokenL2.connect(user1).approve(contracts.ferryOnL2.address,BigInt(10e18)); + await contracts.ferryOnL2.connect(user1).embarkWithRecipient(BigInt(10e18), BigInt(0), user1.address,deadline); + + // Wait till deadline + await waitTill(deadline); + await ethers.provider.send("evm_mine"); + + // Generate Merkle proof + var blockNumber = await ethers.provider.getBlockNumber(); + var block = await network.provider.request({"method": "eth_getBlockByNumber","params": ["0x"+BigInt(blockNumber).toString(16),false]}); + await contracts.dummyStateRootOracle.setStateRoot(blockNumber,block.stateRoot,block.timestamp); + var toHash = "0x"+toUint256Hex(BigInt(10e18))+user1.address.substring(2)+toUint32Hex(0); + var hash = keccak256(toHash); + var slotPos ="0x"+hash.substring(2)+"0000000000000000000000000000000000000000000000000000000000000001"; + var slot = keccak256(slotPos); + var result = await network.provider.request({ + "method": "eth_getProof", + "params": [ + // the address to query and generate proof for + contracts.ferryOnL1.address, + // storage keys to generate proofs for + [slot], + // the block at which to generate the proof + "0x"+BigInt(blockNumber).toString(16) + ] + }); + var proof = eval(result); + //console.log(proof); + + // Collect users tokens on L2, because there was no disembark + var user1BalanceBefore = BigInt(await contracts.tokenL2.balanceOf(user1.address)); + await contracts.ferryOnL2.connect(owner).collect(0, blockNumber, proof.accountProof,proof.storageProof[0].proof); + var user1TokenL2Received = BigInt(await contracts.tokenL2.balanceOf(user1.address))-user1BalanceBefore; + expect(user1TokenL2Received).to.equal(BigInt(10e18)); + }); }); +function toUint256Hex(value) { + var result = "0000000000000000000000000000000000000000000000000000000000000000"+BigInt(value).toString(16); + return result.substring(result.length-64); +} + +function toUint32Hex(value) { + var result = "00000000"+BigInt(value).toString(16); + return result.substring(result.length-8); +} + async function waitTill(time) { - var currentblock = await ethers.provider.getBlock(await ethers.provider.getBlockNumber()); - var waitPeriod = time-currentblock.timestamp; - if (waitPeriod>0) { - ethers.provider.send("evm_increaseTime", [waitPeriod]); // wait waitPeriod - ethers.provider.send("evm_mine"); // mine the next block - } + await ethers.provider.send("evm_mine"); // mine the next block + do { + var currentblock = await ethers.provider.getBlock(await ethers.provider.getBlockNumber()); + var waitPeriod = time-currentblock.timestamp; + if (waitPeriod>0) { + await ethers.provider.send("evm_increaseTime", [waitPeriod]); // wait waitPeriod + await ethers.provider.send("evm_mine"); // mine the next block + } + } while (waitPeriod>0); } async function wait(waitPeriod) { if (waitPeriod>0) { - ethers.provider.send("evm_increaseTime", [waitPeriod]); // wait waitPeriod - ethers.provider.send("evm_mine"); // mine the next block + await ethers.provider.send("evm_increaseTime", [waitPeriod]); // wait waitPeriod + await ethers.provider.send("evm_mine"); // mine the next block } } diff --git a/src/hardhat/test/Fraxoracle/Fraxoracle-test.js b/src/hardhat/test/Fraxoracle/Fraxoracle-test.js new file mode 100644 index 00000000..14801dc7 --- /dev/null +++ b/src/hardhat/test/Fraxoracle/Fraxoracle-test.js @@ -0,0 +1,186 @@ +/* +** Run test while genache is running on localhost: npx hardhat --network localhost test test/Fraxoracle-test.js +*/ + +const { expect } = require("chai"); +const { ethers } = require("hardhat"); +const { rlp } = require("ethereumjs-util"); +const { keccak256 } = require("@ethersproject/keccak256"); +const { toUtf8Bytes } = require("@ethersproject/strings"); + + +describe("Fraxoracle", function () { + it("setupContracts", async function () { + var contracts = await setupContracts(); + }); + + it("addRoundData", async function () { + var contracts = await setupContracts(); + var lowPrice = BigInt(100E18); + var highPrice = BigInt(101E18); + + /// Set dummy price to Fraxoracle + await contracts.dummyPriceOracle.setPrices(false, lowPrice, highPrice); + var blockNumber = (await contracts.fraxoraclePriceSource.addRoundData()).blockNumber; + var block = await ethers.provider.getBlock(blockNumber);//await network.provider.request({"method": "eth_getBlockByNumber","params": ["0x"+BigInt(blockNumber).toString(16),false]}); + //console.log("block:"+JSON.stringify(block)); + var timestamp = Number(BigInt(block.timestamp)); + + // Get prices and check if correct + var prices = await contracts.fraxoracle.getPrices(); + expect(prices._isBadData).to.equal(false); + expect(prices._priceLow).to.equal(lowPrice); + expect(prices._priceHigh).to.equal(highPrice); + + // Get latestRoundData and check if correct + var latestRoundData = await contracts.fraxoracle.latestRoundData(); + expect(latestRoundData.roundId).to.equal(0); + expect(latestRoundData.answer).to.equal((lowPrice+highPrice)/BigInt(2)); + expect(latestRoundData.startedAt).to.equal(timestamp); + expect(latestRoundData.updatedAt).to.equal(timestamp); + expect(latestRoundData.answeredInRound).to.equal(0); + + // Get roundData and check if correct + var roundData = await contracts.fraxoracle.getRoundData(0); + expect(roundData.roundId).to.equal(0); + expect(roundData.answer).to.equal((lowPrice+highPrice)/BigInt(2)); + expect(roundData.startedAt).to.equal(timestamp); + expect(roundData.updatedAt).to.equal(timestamp); + expect(roundData.answeredInRound).to.equal(0); + + // Get prices after MAX_DELAY and check if data is bad + await waitTill(timestamp+24*60*60+1); + + var prices2 = await contracts.fraxoracle.getPrices(); + expect(prices2._isBadData).to.equal(true); + expect(prices2._priceLow).to.equal(lowPrice); + expect(prices2._priceHigh).to.equal(highPrice); + }); + + it("MerkleProofPriceSource", async function () { + var contracts = await setupContracts(); + var lowPrice = BigInt(100E18); + var highPrice = BigInt(101E18); + + /// Set dummy price to fraxoracle + await contracts.dummyPriceOracle.setPrices(false, lowPrice, highPrice); + var blockNumber = (await contracts.fraxoraclePriceSource.addRoundData()).blockNumber; + var block = await network.provider.request({"method": "eth_getBlockByNumber","params": ["0x"+BigInt(blockNumber).toString(16),false]}); + var timestamp = Number(BigInt(block.timestamp)); + //console.log("block:"+JSON.stringify(block)); + await contracts.dummyStateRootOracle.setStateRoot(blockNumber,block.stateRoot,block.timestamp); + + // Generate Merkle proof + var slot = keccak256("0x0000000000000000000000000000000000000000000000000000000000000000"); + var result = await network.provider.request({ + "method": "eth_getProof", + "params": [ + // the address to query and generate proof for + contracts.fraxoracle.address, + // storage keys to generate proofs for + ["0x"+(BigInt(slot)+BigInt(0)).toString(16),"0x"+(BigInt(slot)+BigInt(1)).toString(16),"0x"+(BigInt(slot)+BigInt(2)).toString(16)], + // the block at which to generate the proof + "0x"+BigInt(blockNumber).toString(16) + ] + }); + //console.log(result); + var proof = eval(result); + var proofs = []; + for (var i=0;i0) { + await ethers.provider.send("evm_increaseTime", [waitPeriod]); // wait waitPeriod + await ethers.provider.send("evm_mine"); // mine the next block + } + } while (waitPeriod>0); +} + +async function wait(waitPeriod) { + if (waitPeriod>0) { + await ethers.provider.send("evm_increaseTime", [waitPeriod]); // wait waitPeriod + await ethers.provider.send("evm_mine"); // mine the next block + } +} + +async function setupContracts() { + const [owner,user1,user2,user3,user4] = await ethers.getSigners(); + + const DummyStateRootOracle = await ethers.getContractFactory("DummyStateRootOracle"); + var dummyStateRootOracle = await DummyStateRootOracle.deploy(); + + const DummyPriceOracle = await ethers.getContractFactory("DummyPriceOracle"); + var dummyPriceOracle = await DummyPriceOracle.deploy(); + + const Fraxoracle = await ethers.getContractFactory("Fraxoracle"); + var fraxoracle = await Fraxoracle.deploy(18, "TestFraxoracle", 1, 24*60*60, BigInt(2e16)); + var fraxoracleL2 = await Fraxoracle.deploy(18, "TestFraxoracleL2", 1, 24*60*60, BigInt(2e16)); + + const FraxoraclePriceSource = await ethers.getContractFactory("FraxoraclePriceSource"); + var fraxoraclePriceSource = await FraxoraclePriceSource.deploy(fraxoracle.address,dummyPriceOracle.address); + await fraxoracle.setPriceSource(fraxoraclePriceSource.address); + + const MerkleProofPriceSource = await ethers.getContractFactory("MerkleProofPriceSource"); + var merkleProofPriceSource = await MerkleProofPriceSource.deploy(fraxoracleL2.address,dummyStateRootOracle.address,fraxoracle.address); + await fraxoracleL2.setPriceSource(merkleProofPriceSource.address); + + + // Pack contracts in an object + var result = {}; + result.fraxoracle = fraxoracle; + result.fraxoracleL2 = fraxoracleL2; + result.fraxoraclePriceSource = fraxoraclePriceSource; + result.merkleProofPriceSource = merkleProofPriceSource; + result.dummyStateRootOracle = dummyStateRootOracle + result.dummyPriceOracle = dummyPriceOracle; + return result; +} diff --git a/src/hardhat/test/FraxferryV2/StateProver-test.js b/src/hardhat/test/Fraxoracle/StateProver-test.js similarity index 72% rename from src/hardhat/test/FraxferryV2/StateProver-test.js rename to src/hardhat/test/Fraxoracle/StateProver-test.js index 7e1c2a7f..0c14af97 100644 --- a/src/hardhat/test/FraxferryV2/StateProver-test.js +++ b/src/hardhat/test/Fraxoracle/StateProver-test.js @@ -1,6 +1,7 @@ const { expect } = require("chai"); const { ethers } = require("hardhat"); const { rlp } = require("ethereumjs-util"); +const { keccak256 } = require("@ethersproject/keccak256"); describe("StateProver", function () { @@ -58,68 +59,84 @@ describe("StateProver", function () { var accountInfo = await contracts.stateProver.proofStorageRoot(stateRootHash, proofAddress, accountProofArray); expect(accountInfo.storageRoot).to.equals(storageHash); }); - it("proofStorageRoot 3", async function () { - const [owner,user1,user2,user3,user4] = await ethers.getSigners(); - var contracts = await setupContracts(); - var stateRootHash = "0xd59674eab1addd5f37d716ee0eaa8bb7c40a0cfb2d982556eb85b71ebb3f5b1d"; - var proofAddress = "0xc91b651f770ed996a223a16da9ccd6f7df56c987"; - var storageHash = "0x2dd32c16cf2eec73b85319ff65527c16176333dd1c7c042d678ab48019ff6965"; - var accountProofArray = [ - "0xfeffff80d8e0328926b84bf4ec9d0a2816e0b38f5cda3348a280e821fa765529f27973c780a960d038dedc80bbbbe042af4e8970bf98c8bfffb9b5921eb020507afa0e01b2807242c96ca4413626aa7266926037dae7754109c7e422c9899eb9c42b4189a8828005294d398c4ef9a86d752ba5568e1d01de30a76e2c705dc56b6708af69fccdb880cfb872a9e47fe946d8a5eb47d9a9140655217ce0020b819c1b98dad218131ced80d485da2638be45506378830886bea5f626f3cc12a9c77a0fde7c118c8e78b92c8008c8f48f2f6b69aba1e65dd9438c54bf307df846651d9a1bb9497e2756b217318081d80f45fc1c6e6400976d7349ebe03b8cfa4ab6953c7ceef72c9778e17a54df800358a2314ad6728f57c13b593c7d0291629984739b36b2b9d5c4e461025c3f268054523197a9fd381368b9d6c6ebeda2bc5c72c6ee2254f724397d7027eacaa4d580875f5fe38fd6d4a0c379d34a03b787f42310422122391821edfff3a734a3190f80b03781c9d808d136b86166a223f4ddddd0359bec2f7f9e971a532465a3074d9380a3d521c266bf8bd9ceb8c08a2835cc2f48006b65390fa010566c9d4b8b75771d8065bd0796b3e050743f27e7f009e8f525305566066cd2c0a62089ce5c40e9b5af80f5f0f6858e4e0f18c6e7c6934fed592d5a4a020ad443049c8e2b4002108126aa80bd6d89f9b999939648e3d5c6da8970c4772c6bf1d9389e351580a381878556fa", - "0xfefebf803ad5158a6c6fa16fd45daa51b4047ecedb4dd6c2255027aea623ab048cd3b00b809dd1c62107c413e54c1502e1bf6f966b9dbb71518e48cd7d4fc86330ad351f6880e61bcc4d033b87a7483b0271abb30bc143801e0a4812b68fc35a88432a3200148007816f99ba92aa3692d75cc9faa69ce7ddc78800526103f076f10f25ef830f0b809a27fa1ec6b5f5245162860762c543f7380000d2f9ac01a88ed07cbc6c4b51708007317849dd41fba8c16d73eb304225aa092ba895374787d0f44169f66c65a1a88065343752d0fbe3466e2dd202837b2e15e34ce41da3ec6aa2fa1aeb00354ee54c80b276d017a91f3ba9ddc07b86456724783159b517ed98795b79d61ae2d5c8bd5a803429809a88fc650fbdfffe7396821325f053d288a0af2d1b423b1726d9db2ad680c20b73831cc68854b721454ba81e6b63c83f1369821ecfaea5f549af8e1d518080e90cc596a5920d8ff40de53cc6db9097562754542e03b59b605eaafc5aab818a80fe48be3ddfb88840c98da7ddc1b88af1a9322b2a98751f41880aa8f60e94c62480da0b68c297ad660d29d6ab0280a99bfbd4aa36a584c15e491cf879c623ae6a0a8091f6bd240eb2b2ed5014462b0a73764f1477031a7228798f9f57ea3b12f57d28", - "0x3f1ef32dcb5bbd7f64fd77ab13fcfeb8979d8ffd1acb9fd91597872966cd390c1901f8440180a02dd32c16cf2eec73b85319ff65527c16176333dd1c7c042d678ab48019ff6965a09b6963e45338401d733c3be4fbe3c7d5a87bdfe972c90e5594e4d20fdb70cf40" - ]; - var accountInfo = await contracts.stateProver.proofStorageRoot(stateRootHash, proofAddress, accountProofArray); - expect(accountInfo.storageRoot).to.equals(storageHash); - }); + + it("Create block header", async function () { + var blockNumber = await ethers.provider.getBlockNumber() + var block = await network.provider.request({"method": "eth_getBlockByNumber","params": ["0x"+BigInt(blockNumber).toString(16),false]}); + //console.log("block:"+JSON.stringify(block,null,2)); + var headerFields=[]; + headerFields.push(block.parentHash); + headerFields.push(block.sha3Uncles); + headerFields.push(block.miner); + headerFields.push(block.stateRoot); + headerFields.push(block.transactionsRoot); + headerFields.push(block.receiptsRoot); + headerFields.push(block.logsBloom); + headerFields.push(block.difficulty); + headerFields.push(block.number); + headerFields.push(block.gasLimit); + headerFields.push(block.gasUsed); + headerFields.push(block.timestamp); + headerFields.push(block.extraData); + headerFields.push(block.mixHash); + headerFields.push(block.nonce); + headerFields.push(block.baseFeePerGas); + headerFields.push(block.withdrawalsRoot); + //headerFields.push(block.excessDataGas); + convertHeaderFields(headerFields); + var header = rlp.encode(headerFields); + var hash = keccak256(header); + //console.log("hash:"+hash); + expect(block.hash).to.equals(hash); + + + +/* +[['ParentHash','0x1e77d8f1267348b516ebc4f4da1e2aa59f85f0cbd853949500ffac8bfc38ba14'], +['UncleHash','0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347'], +['Coinbase','0x2a65Aca4D5fC5B5C859090a6c34d164135398226'], +['Root','0x0b5e4386680f43c224c5c037efc0b645c8e1c3f6b30da0eec07272b4e6f8cd89'], +['TxHash','0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421'], +['ReceiptHash','0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421'], +['Bloom','0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000'], +['Difficulty',6022643743806], +['Number','0x400000'], +['GasLimit',3141592], +['GasUsed',0], +['Time',1445130204], +['Extra','0xd583010202844765746885676f312e35856c696e7578'], +['MixDigest','0x3fbea7af642a4e20cd93a945a1f5e23bd72fc5261153e09102cf718980aeff38'], +['Nonce','0x6af23caae95692ef']] */ - /*it("proofStorageRoot n", async function () { - const [owner,user1,user2,user3,user4] = await ethers.getSigners(); - var contracts = await setupContracts(); - var stateRootHash = "0xf3ac1098a73159e693da20a16e26deb723d8c80ee0816995c5195fa8f02de71c"; - var proofAddress = "0xe9cd84fe4ddfb0f016e3264791923902906753bd"; - var storageHash = "0x28a46df05dae7001342b4d474915e4a7d763b242f7cff7bdbd59fbef44f7262e"; - var accountProofArray = [ - "0xfeffff80846c91f816985cdb8f7631b3ee2a9de2b91c2172f1413f913645cb8a680919a380a960d038dedc80bbbbe042af4e8970bf98c8bfffb9b5921eb020507afa0e01b2807242c96ca4413626aa7266926037dae7754109c7e422c9899eb9c42b4189a88280be0f7a3464035ab96e60cdc18b929b7dfd3a10a40dfefbc143e986de16810d7380cfb872a9e47fe946d8a5eb47d9a9140655217ce0020b819c1b98dad218131ced806042ad42800c6970a529353dafd0760d0a4a7036c70e5b6bdfb09dfb65d22d32804f8d7f9db44e9fe03185824d7bff6c5501579380056420600b39b1d8a5a1c5b1804a0cfc062996d319cbb63ac0bb18eae94072e97f6fadf21368aef86622b1775480a4adbc6dfbb2836cf73c10931d02904ff0cb1b2b70bd9b53c3ae67efa57793898054523197a9fd381368b9d6c6ebeda2bc5c72c6ee2254f724397d7027eacaa4d580875f5fe38fd6d4a0c379d34a03b787f42310422122391821edfff3a734a3190f80b03781c9d808d136b86166a223f4ddddd0359bec2f7f9e971a532465a3074d9380a3d521c266bf8bd9ceb8c08a2835cc2f48006b65390fa010566c9d4b8b75771d80f542607e29ea3c228a4b4e438853297dcb39f1b9d79311d3c164f7aa628354318034825e14cc59a1a298fdd9f34c94e25afc14445b90cc5f8923e4a6f16a86bc16801e0247c0ce9e08d1e28734f9b2b5ce145ab0d80bf290456b29045d82ef3ecba3", - "0xfedac380116944d5a67d185b4105c6f4431e8a996bbce87bd82696b8bc537551a61b873180fa181a919891236cfd76c6a01b06a0a5cfa3be5a32ab72eb527789912b6465b38087c99c879ccfd5a27532a2f1e61be2dd2e76a5c5b89241783e8772156a40218480c1d29d3b692e1cfcbcb2b15457e1f3d5ab7b8f3d8b1e7dfffcf278645dbabdab803401a421911ceb374814d04e4327a1ade73e5451e7c49b47fb91dadc8e01e69f806f92d61a9f46ed485396eff2aacda334b0d4c7182da719e004827b45f32639b480f4b2600beb514ab160b22d7a4aa48396e5d8539e0ebe0952a830e5414d48609f8008f05792771f990115a92c04aebe2f24c87bcb6825b3083e9a3ef63b4f9c404280b44845aaae49f9f79a9420e4221668bf4b311db8dcf59f29a802228e7033c3da", - "0xfe4020806457eb02b999c5d5b098073f14e5504490075aabc3ba0998cf6bdd88c8d1c2f1804356608047570bc264ab86aa2dcf81a2a156857b5c5d33c3106a771d32283cd5", - "0x3e0594389115e580c41e27acb64350ad3f331d30ff3d3a4e2f7d499cb1c2ea3e1901f8440180a028a46df05dae7001342b4d474915e4a7d763b242f7cff7bdbd59fbef44f7262ea07be1152a720967c3bfb57c7fa5a7291b4db5d0a3a2c4bd766808fbba741ef502" - ]; - var accountInfo = await contracts.stateProver.proofStorageRoot(stateRootHash, proofAddress, accountProofArray); - expect(accountInfo.storageRoot).to.equals(storageHash); }); - it("proofStorageSlotValue n", async function () { - const [owner,user1,user2,user3,user4] = await ethers.getSigners(); - var contracts = await setupContracts(); - var stateRootHash = "0xf3ac1098a73159e693da20a16e26deb723d8c80ee0816995c5195fa8f02de71c"; - var proofAddress = "0xe9cd84fe4ddfb0f016e3264791923902906753bd"; - var storageHash = "0x28a46df05dae7001342b4d474915e4a7d763b242f7cff7bdbd59fbef44f7262e"; - var storageKey = "0xc22eeaef610a001ad1d2cd9ce6fcb791121be56dcbe56d8c8fd3211a879dc0ef"; - var value = "0x64662934000000003b9aca0070997970c51812dc3a010c7d01b50e0d17dc79c8"; - var slotProofArray = [ - "0xfe811a8016c8e862af0badecdf181f0aa52074f9059826bec66bad984587f44a8ba89b56804a69612ebce2e9a49bcc72e5ed02244301f67985d12a2f4d876e4f6d949c7b3080aed0ce2f1d4b9680b7cd3a9202ae36fd4f9c621a7b2aea3750a0e60075c9af888049ea285bee7d5585f5a730f0594fdcccc8c788544e7f9ab6791c9503d759f9888058526d1f656e5e19afcf20b52cca9bc3b77c71177113761133f2731ba1a473a4", - "0xfe048080491e99274c729474c6ff34fcee201706f3d639b35065f040715edd526688f66080ef4277bf6b66a8688407b83c684749af27f9634785219c4846dd4b58d8943eae", - "0x3f2eeaef610a001ad1d2cd9ce6fcb791121be56dcbe56d8c8fd3211a879dc0ef84a064662934000000003b9aca0070997970c51812dc3a010c7d01b50e0d17dc79c8" - ]; - var slotValue = await contracts.stateProver.proofStorageSlotValue(storageHash, storageKey, slotProofArray); - expect(slotValue.value).to.equals(value); - });*/ }); -async function waitTill(time) { - var currentblock = await ethers.provider.getBlock(await ethers.provider.getBlockNumber()); - var waitPeriod = time-currentblock.timestamp; - if (waitPeriod>0) { - ethers.provider.send("evm_increaseTime", [waitPeriod]); // wait waitPeriod - ethers.provider.send("evm_mine"); // mine the next block +function convertHeaderFields(headeFields) { + for (var i=0;i0) { + await ethers.provider.send("evm_increaseTime", [waitPeriod]); // wait waitPeriod + await ethers.provider.send("evm_mine"); // mine the next block + } + } while (waitPeriod>0); +} async function wait(waitPeriod) { if (waitPeriod>0) { - ethers.provider.send("evm_increaseTime", [waitPeriod]); // wait waitPeriod - ethers.provider.send("evm_mine"); // mine the next block + await ethers.provider.send("evm_increaseTime", [waitPeriod]); // wait waitPeriod + await ethers.provider.send("evm_mine"); // mine the next block } } diff --git a/src/types/constants.ts b/src/types/constants.ts index 0eac76b0..602b2149 100755 --- a/src/types/constants.ts +++ b/src/types/constants.ts @@ -2334,6 +2334,7 @@ export const CONTRACT_ADDRESSES = { curve_amo_impl: "0x5840db064e17480f8e8e74fd6714c9c316f7ddfe", // Old2: 0xbd061885260F176e05699fED9C5a4604fc7F2BDC", Old1: 0x77746DC37Deae008c7149EDc1b1A8D6d63e08Be5, Old2: 0x25e9702359bAf56E505F0BA981eeBFA23ceB030A, Old3: 0x19a47F38D39692617C9D9012eC0176C9ead00a5e curve_amo_V1: "0xbd061885260F176e05699fED9C5a4604fc7F2BDC", curve_amo_V2: "0xD103FEf74D05FbC20B5184FE85c7187735355DB3", //0xeF8c0b4902b985bF64B8cfF6BbCD0AC1FDc8d5d3", // Proxy: "0x7e983e4f98b16cee76f8f9a6a1e87b5861de8769" + curve_amo_V5: "0xf8a4ffe7C980fD50B160b7B86dCd5e9eb7E281a9", curve_amo_admin: "0x900909C07c2761d84C5d863FF5905102916DF69C", curve_metapool_locker: "0x70F55767B11c047C8397285E852919F5f6c8DC60", curve_metapool_locker_2: "0xE4BD0461AE7fdc76c61CE286a80c9B55d83B204a", @@ -2349,6 +2350,7 @@ export const CONTRACT_ADDRESSES = { frax_gauge_noop_rewards_distributor: "0x48D9A9e67e9deCfD493efE2B3D3B5291fc802e5F", frax_gauge_v2: "0x72e158d38dbd50a483501c24f792bdaaa3e7d55c", fraxlend_amo: "0x0Ed8fA7FC63A8eb5487E7F87CAF1aB3914eA4eCa", + fraxlend_amo_v3: "0xf6E697e95D4008f81044337A749ECF4d15C30Ea6", frxeth_minter: '0xbAFA44EFE7901E04E39Dad13167D089C559c1138', fxs_1559_amo: "0x9C6a04871D11b33645ab592f68C41bb2B41F51EE", // Old1: "0xaf02be5968D8Fe9536e24E4c7e888C59A58Bc077" fxs_1559_amo_v2: "0xC80C48862E4254F37047235298eDb6AA35717C24", // Proxy @@ -2382,6 +2384,7 @@ export const CONTRACT_ADDRESSES = { twamm_amo_v2: "0x629C473e0E698FD101496E5fbDA4bcB58DA78dC4", uniV2_to_uniV3_migrator_address: "0x7b50137E8996A1717a6D97a0527e4c5D2D133405", uniV3_liquidity_amo: "0x3814307b86b54b1d8e7B2Ac34662De9125F8f4E6", // Old: "0xef2b0895f986Afd7Eb7939B65E2883C5e199751f", + uniV3_liquidity_amo_v2: "0xc91Bb4b0696e3b48c0C501B4ce8E7244Fc363A79", vefxs_smart_wallet_checker: "0x53c13BA8834a1567474b19822aAD85c6F90D9f9F", vefxs_yield_distributor: "0x19a0a70a68fbC604Bf20A03b787df8f7AC1d50f0", vefxs_yield_distributor_v2: "0x62C4cf364078C98fA08AfDB4D3d8D87e780Ebd45", From 12bdd2c43506c7845c211c34345cb377ce34c98a Mon Sep 17 00:00:00 2001 From: travis Date: Fri, 21 Jul 2023 07:56:35 -0700 Subject: [PATCH 27/37] periodic update --- .../Curve/FraxMiddlemanGaugeFerryHelper.sol | 121 +++ .../__CROSSCHAIN/ICrossChainCanonical.sol | 54 ++ src/hardhat/contracts/FXB/FXB.sol | 144 ++++ src/hardhat/contracts/FXB/FXBFactory.sol | 236 ++++++ .../contracts/FXB/FXBMintRedeemerAMO.sol | 180 +++++ .../contracts/Frax/FraxAMOMinterLayer2.sol | 288 ++++++++ .../contracts/FraxETH/FrxETHMiniRouter.sol | 107 +++ src/hardhat/contracts/FraxETH/IfrxETH.sol | 33 + .../contracts/FraxETH/IfrxETHMinter.sol | 47 ++ src/hardhat/contracts/FraxETH/IsfrxETH.sol | 40 + src/hardhat/contracts/Fraxbonds/FXB.sol | 25 + .../contracts/Fraxbonds/FraxFPIBond.sol | 57 ++ .../contracts/Fraxbonds/FraxFPIBondYield.sol | 22 + .../contracts/Fraxbonds/Fraxauction.sol | 61 ++ .../contracts/Fraxbonds/SlippageAuction.sol | 239 ++++++ .../interface/IFPIControllerPool.sol | 7 + .../provider/ArbitrumBlockhashProvider.sol | 11 +- .../provider/TelepathyBlockhashProvider.sol | 2 +- .../convex/IConvexStakingWrapperFrax.sol | 96 +-- .../Misc_AMOs/curve/I2poolNoLending.sol | 61 ++ .../kyberswap/elastic/IKSElasticLMV2.sol | 87 +++ .../elastic/IKSReinvestmentTokenPool.sol | 39 + .../elastic/IKyberSwapFarmingToken.sol | 24 + .../Staking/FraxCrossChainFarmV3_ERC20.sol | 98 ++- .../FraxFarmRageQuitter_Gelato_FRAX_DAI.sol | 108 +++ .../Staking/FraxUnifiedFarmTemplate.sol | 6 +- .../Staking/FraxUnifiedFarm_ERC20.sol | 37 +- ...UnifiedFarm_ERC20_Convex_FRAXBP_Stable.sol | 24 +- ...ifiedFarm_ERC20_Convex_FRAXBP_Volatile.sol | 26 +- .../FraxUnifiedFarm_ERC20_Convex_Generic.sol | 49 ++ .../FraxUnifiedFarm_ERC20_Convex_frxETH.sol | 19 +- ...nifiedFarm_ERC20_KyberERC20Mainnet.sol.off | 69 ++ ...raxUnifiedFarm_KyberSwapElasticGeneric.sol | 47 +- .../Step_1_Vault_Gauge_Proxy.js | 232 ++++++ .../Step_1_Vault_Gauge_Proxy.json | 1 + .../Step_2_CRVCVXDistro_Contracts.js | 264 +++++++ .../Step_2_CRVCVXDistro_Contracts.json | 1 + .../Step_3_RewDist_Seeding_Sync.js | 185 +++++ .../Step_3_RewDist_Seeding_Sync.json | 1 + .../Frax_Comptroller_Routine/Sunday_Part_1.js | 213 +++--- .../Sunday_Part_1.json | 1 + .../gnosis-safe-scripts/utils/utils.js | 85 +++ .../old_contracts/FXB/ERC-1155/FXB.sol | 250 +++++++ .../Staking/FraxUnifiedFarmTemplate_V2.sol | 0 .../Staking/FraxUnifiedFarm_ERC20_V2.sol | 0 ...dFarm_ERC20_V2_BEFORE_MANUAL_MERGE.sol.old | 0 ...FraxUnifiedFarm_ERC20_Convex_frxETH_V2.sol | 9 +- src/hardhat/test/Fraxbonds/SlippageAuction.js | 115 +++ .../test/FrxETH/FrxETHMiniRouter-Tests.js | 119 +++ ...ComboOracle_KyberSwapElastic-Tests_ARBI.js | 192 +++++ src/hardhat/test/truffle-fixture-Arbitrum.js | 258 ------- src/hardhat/test/truffle-fixture-Ethereum.js | 593 +++++++++++++++ src/hardhat/test/truffle-fixture.js | 695 +++++------------- src/types/constants.ts | 458 ++++++++---- 54 files changed, 4977 insertions(+), 1159 deletions(-) create mode 100755 src/hardhat/contracts/Curve/FraxMiddlemanGaugeFerryHelper.sol create mode 100644 src/hardhat/contracts/ERC20/__CROSSCHAIN/ICrossChainCanonical.sol create mode 100644 src/hardhat/contracts/FXB/FXB.sol create mode 100644 src/hardhat/contracts/FXB/FXBFactory.sol create mode 100644 src/hardhat/contracts/FXB/FXBMintRedeemerAMO.sol create mode 100755 src/hardhat/contracts/Frax/FraxAMOMinterLayer2.sol create mode 100644 src/hardhat/contracts/FraxETH/FrxETHMiniRouter.sol create mode 100644 src/hardhat/contracts/FraxETH/IfrxETH.sol create mode 100644 src/hardhat/contracts/FraxETH/IfrxETHMinter.sol create mode 100644 src/hardhat/contracts/FraxETH/IsfrxETH.sol create mode 100644 src/hardhat/contracts/Fraxbonds/FXB.sol create mode 100644 src/hardhat/contracts/Fraxbonds/FraxFPIBond.sol create mode 100644 src/hardhat/contracts/Fraxbonds/FraxFPIBondYield.sol create mode 100644 src/hardhat/contracts/Fraxbonds/Fraxauction.sol create mode 100644 src/hardhat/contracts/Fraxbonds/SlippageAuction.sol create mode 100644 src/hardhat/contracts/Fraxbonds/interface/IFPIControllerPool.sol create mode 100644 src/hardhat/contracts/Misc_AMOs/curve/I2poolNoLending.sol create mode 100644 src/hardhat/contracts/Misc_AMOs/kyberswap/elastic/IKSElasticLMV2.sol create mode 100644 src/hardhat/contracts/Misc_AMOs/kyberswap/elastic/IKSReinvestmentTokenPool.sol create mode 100644 src/hardhat/contracts/Misc_AMOs/kyberswap/elastic/IKyberSwapFarmingToken.sol create mode 100644 src/hardhat/contracts/Staking/FraxFarmRageQuitter_Gelato_FRAX_DAI.sol create mode 100755 src/hardhat/contracts/Staking/Variants/FraxUnifiedFarm_ERC20_Convex_Generic.sol create mode 100755 src/hardhat/contracts/Staking/Variants/FraxUnifiedFarm_ERC20_KyberERC20Mainnet.sol.off create mode 100644 src/hardhat/gnosis-safe-scripts/Convex_Farm_Deployments/Step_1_Vault_Gauge_Proxy.js create mode 100644 src/hardhat/gnosis-safe-scripts/Convex_Farm_Deployments/Step_1_Vault_Gauge_Proxy.json create mode 100644 src/hardhat/gnosis-safe-scripts/Convex_Farm_Deployments/Step_2_CRVCVXDistro_Contracts.js create mode 100644 src/hardhat/gnosis-safe-scripts/Convex_Farm_Deployments/Step_2_CRVCVXDistro_Contracts.json create mode 100644 src/hardhat/gnosis-safe-scripts/Convex_Farm_Deployments/Step_3_RewDist_Seeding_Sync.js create mode 100644 src/hardhat/gnosis-safe-scripts/Convex_Farm_Deployments/Step_3_RewDist_Seeding_Sync.json create mode 100644 src/hardhat/gnosis-safe-scripts/Frax_Comptroller_Routine/Sunday_Part_1.json create mode 100644 src/hardhat/gnosis-safe-scripts/utils/utils.js create mode 100644 src/hardhat/old_contracts/FXB/ERC-1155/FXB.sol rename src/hardhat/{contracts => old_contracts}/Staking/FraxUnifiedFarmTemplate_V2.sol (100%) rename src/hardhat/{contracts => old_contracts}/Staking/FraxUnifiedFarm_ERC20_V2.sol (100%) rename src/hardhat/{contracts => old_contracts}/Staking/FraxUnifiedFarm_ERC20_V2_BEFORE_MANUAL_MERGE.sol.old (100%) rename src/hardhat/{contracts => old_contracts}/Staking/Variants/FraxUnifiedFarm_ERC20_Convex_frxETH_V2.sol (90%) create mode 100644 src/hardhat/test/Fraxbonds/SlippageAuction.js create mode 100644 src/hardhat/test/FrxETH/FrxETHMiniRouter-Tests.js create mode 100644 src/hardhat/test/__ARBITRUM/ComboOracle_KyberSwapElastic-Tests_ARBI.js delete mode 100644 src/hardhat/test/truffle-fixture-Arbitrum.js create mode 100644 src/hardhat/test/truffle-fixture-Ethereum.js diff --git a/src/hardhat/contracts/Curve/FraxMiddlemanGaugeFerryHelper.sol b/src/hardhat/contracts/Curve/FraxMiddlemanGaugeFerryHelper.sol new file mode 100755 index 00000000..9f10ac00 --- /dev/null +++ b/src/hardhat/contracts/Curve/FraxMiddlemanGaugeFerryHelper.sol @@ -0,0 +1,121 @@ +// SPDX-License-Identifier: GPL-2.0-or-later +pragma solidity >=0.6.11; + +// ==================================================================== +// | ______ _______ | +// | / _____________ __ __ / ____(_____ ____ _____ ________ | +// | / /_ / ___/ __ `| |/_/ / /_ / / __ \/ __ `/ __ \/ ___/ _ \ | +// | / __/ / / / /_/ _> < / __/ / / / / / /_/ / / / / /__/ __/ | +// | /_/ /_/ \__,_/_/|_| /_/ /_/_/ /_/\__,_/_/ /_/\___/\___/ | +// | | +// ==================================================================== +// ================== FraxMiddlemanGaugeFerryHelper =================== +// ==================================================================== +// Helps a V1 FraxMiddlemanGauge that was deployed before Fraxferry + +// Frax Finance: https://github.com/FraxFinance + +// Primary Author(s) +// Travis Moore: https://github.com/FortisFortuna + +// Reviewer(s) / Contributor(s) +// Sam Kazemian: https://github.com/samkazemian + +import "../Math/Math.sol"; +import "../Math/SafeMath.sol"; +import "../ERC20/ERC20.sol"; +import "../ERC20/SafeERC20.sol"; +import "./IFraxGaugeFXSRewardsDistributor.sol"; +import "../Fraxferry/IFraxferry.sol"; +import '../Uniswap/TransferHelper.sol'; +import "../Staking/Owned.sol"; +import "../Utils/ReentrancyGuard.sol"; + +contract FraxMiddlemanGaugeFerryHelper is Owned { + using SafeMath for uint256; + using SafeERC20 for ERC20; + + /* ========== STATE VARIABLES ========== */ + + // Admin addresses + address public timelock_address; + + // Gauge-related + IFraxferry public ferry; + address public middleman_address; + + + /* ========== MODIFIERS ========== */ + + modifier onlyByOwnGov() { + require(msg.sender == owner || msg.sender == timelock_address, "Not owner or timelock"); + _; + } + + + /* ========== CONSTRUCTOR ========== */ + + constructor ( + address _owner, + address _timelock_address, + address _ferry_address, + address _middleman_address + ) Owned(_owner) { + timelock_address = _timelock_address; + ferry = IFraxferry(_ferry_address); + middleman_address = _middleman_address; + } + + /* ========== MUTATIVE FUNCTIONS ========== */ + + // Backwards compatibility to mock Harmony bridge's ABI + function lockToken(address reward_token_address, uint256 reward_amount, address destination_address) external { + require(msg.sender == middleman_address, "Only the middleman can call"); + + // Pull in the rewards from the middleman + TransferHelper.safeTransferFrom(reward_token_address, msg.sender, address(this), reward_amount); + + // Ferry logic here + ERC20(reward_token_address).approve(address(ferry), reward_amount); + ferry.embarkWithRecipient(reward_amount, destination_address); + + } + + /* ========== RESTRICTED FUNCTIONS - Owner or timelock only ========== */ + + // Added to support recovering LP Rewards and other mistaken tokens from other systems to be distributed to holders + function recoverERC20(address tokenAddress, uint256 tokenAmount) external onlyByOwnGov { + // Only the owner address can ever receive the recovery withdrawal + TransferHelper.safeTransfer(tokenAddress, owner, tokenAmount); + emit RecoveredERC20(tokenAddress, tokenAmount); + } + + // Generic proxy + function execute( + address _to, + uint256 _value, + bytes calldata _data + ) external onlyByOwnGov returns (bool, bytes memory) { + (bool success, bytes memory result) = _to.call{value:_value}(_data); + return (success, result); + } + + function setTimelock(address _new_timelock) external onlyByOwnGov { + timelock_address = _new_timelock; + } + + function setMiddleman(address _new_middleman) external onlyByOwnGov { + middleman_address = _new_middleman; + } + + function setFerry(address _ferry_address) external onlyByOwnGov { + ferry = IFraxferry(_ferry_address); + + emit FerryChanged(_ferry_address); + } + + /* ========== EVENTS ========== */ + + event RecoveredERC20(address token, uint256 amount); + event FerryChanged(address ferry_address); +} diff --git a/src/hardhat/contracts/ERC20/__CROSSCHAIN/ICrossChainCanonical.sol b/src/hardhat/contracts/ERC20/__CROSSCHAIN/ICrossChainCanonical.sol new file mode 100644 index 00000000..e1210bb0 --- /dev/null +++ b/src/hardhat/contracts/ERC20/__CROSSCHAIN/ICrossChainCanonical.sol @@ -0,0 +1,54 @@ +// SPDX-License-Identifier: GPL-2.0-or-later +pragma solidity >=0.8.0; + +interface ICrossChainCanonical { + function DOMAIN_SEPARATOR ( ) external view returns ( bytes32 ); + function PERMIT_TYPEHASH ( ) external view returns ( bytes32 ); + function acceptOwnership ( ) external; + function addBridgeToken ( address bridge_token_address ) external; + function addMinter ( address minter_address ) external; + function allBridgeTokens ( ) external view returns ( address[] memory ); + function allowance ( address owner, address spender ) external view returns ( uint256 ); + function approve ( address spender, uint256 amount ) external returns ( bool ); + function balanceOf ( address account ) external view returns ( uint256 ); + function bridge_tokens ( address ) external view returns ( bool ); + function bridge_tokens_array ( uint256 ) external view returns ( address ); + function burn ( uint256 amount ) external; + function burnFrom ( address account, uint256 amount ) external; + function canSwap ( address ) external view returns ( bool ); + function custodian_address ( ) external view returns ( address ); + function decimals ( ) external view returns ( uint8 ); + function decreaseAllowance ( address spender, uint256 subtractedValue ) external returns ( bool ); + function exchangeCanonicalForOld ( address bridge_token_address, uint256 token_amount ) external returns ( uint256 bridge_tokens_out ); + function exchangeOldForCanonical ( address bridge_token_address, uint256 token_amount ) external returns ( uint256 canonical_tokens_out ); + function exchangesPaused ( ) external view returns ( bool ); + function fee_exempt_list ( address ) external view returns ( bool ); + function increaseAllowance ( address spender, uint256 addedValue ) external returns ( bool ); + function mint_cap ( ) external view returns ( uint256 ); + function minter_burn ( uint256 amount ) external; + function minter_mint ( address m_address, uint256 m_amount ) external; + function minters ( address ) external view returns ( bool ); + function minters_array ( uint256 ) external view returns ( address ); + function name ( ) external view returns ( string memory ); + function nominateNewOwner ( address _owner ) external; + function nominatedOwner ( ) external view returns ( address ); + function nonces ( address owner ) external view returns ( uint256 ); + function owner ( ) external view returns ( address ); + function permit ( address owner, address spender, uint256 value, uint256 deadline, uint8 v, bytes32 r, bytes32 s ) external; + function recoverERC20 ( address tokenAddress, uint256 tokenAmount ) external; + function removeMinter ( address minter_address ) external; + function setCustodian ( address _custodian_address ) external; + function setMintCap ( uint256 _mint_cap ) external; + function setSwapFees ( address bridge_token_address, uint256 _bridge_to_canonical, uint256 _canonical_to_old ) external; + function setTimelock ( address new_timelock ) external; + function swap_fees ( address, uint256 ) external view returns ( uint256 ); + function symbol ( ) external view returns ( string memory ); + function timelock_address ( ) external view returns ( address ); + function toggleBridgeToken ( address bridge_token_address ) external; + function toggleExchanges ( ) external; + function toggleFeesForAddress ( address the_address ) external; + function totalSupply ( ) external view returns ( uint256 ); + function transfer ( address recipient, uint256 amount ) external returns ( bool ); + function transferFrom ( address sender, address recipient, uint256 amount ) external returns ( bool ); + function withdrawBridgeTokens ( address bridge_token_address, uint256 bridge_token_amount ) external; +} diff --git a/src/hardhat/contracts/FXB/FXB.sol b/src/hardhat/contracts/FXB/FXB.sol new file mode 100644 index 00000000..7907592e --- /dev/null +++ b/src/hardhat/contracts/FXB/FXB.sol @@ -0,0 +1,144 @@ +// SPDX-License-Identifier: MIT +pragma solidity >=0.8.0; + +// ==================================================================== +// | ______ _______ | +// | / _____________ __ __ / ____(_____ ____ _____ ________ | +// | / /_ / ___/ __ `| |/_/ / /_ / / __ \/ __ `/ __ \/ ___/ _ \ | +// | / __/ / / / /_/ _> < / __/ / / / / / /_/ / / / / /__/ __/ | +// | /_/ /_/ \__,_/_/|_| /_/ /_/_/ /_/\__,_/_/ /_/\___/\___/ | +// | | +// ==================================================================== +// =============================== FXB ================================ +// ==================================================================== +// Frax Bonds. After maturity, they can be redeemed for FRAX + +// Frax Finance: https://github.com/FraxFinance + +// Primary Author(s) +// Travis Moore: https://github.com/FortisFortuna + +// Reviewer(s) / Contributor(s) +// Dennis: https://github.com/denett +// Sam Kazemian: https://github.com/samkazemian + +import "@openzeppelin/contracts/token/ERC20/ERC20.sol"; +import "@openzeppelin/contracts/token/ERC20/extensions/ERC20Burnable.sol"; +import "@openzeppelin/contracts/security/Pausable.sol"; +import "@openzeppelin/contracts/token/ERC20/extensions/draft-ERC20Permit.sol"; +import "./FXBFactory.sol"; + + +contract FXB is ERC20, ERC20Burnable, ERC20Permit { + + /* ========== STATE VARIABLES ========== */ + + // Core + FXBFactory public factory; + + // Bond information + uint256 public issue_timestamp; + uint256 public maturity_timestamp; + uint256 public mint_cap; + + + /* ========== STRUCTS ========== */ + + + struct BondInfo { + string symbol; + string name; + uint256 issueTimestamp; + uint256 maturityTimestamp; + uint256 mintCap; + } + + + /* ========== CONSTRUCTOR ========== */ + + /// @notice Called by the factory + /// @param __symbol The symbol of the bond. Will be like FXB1_JUL012023_JAN012024 + /// @param __name Date the bond can start being minted + /// @param _issue_timestamp Date the bond can start being minted + /// @param _maturity_timestamp Date the bond will mature and be redeemable + constructor( + string memory __symbol, + string memory __name, + uint256 _issue_timestamp, + uint256 _maturity_timestamp + ) + ERC20(__symbol, __name) + ERC20Permit(__symbol) + { + // Set the factory + factory = FXBFactory(msg.sender); + + // Set the bond info + issue_timestamp = _issue_timestamp; + maturity_timestamp = _maturity_timestamp; + } + + + /* ========== MODIFIERS ========== */ + + /// @notice Makes sure only the factory owner can call + modifier onlyFactoryOwner() { + require(msg.sender == factory.owner(), "Only factory owner"); + _; + } + + /// @notice Makes sure only minters specified by the factory can call + modifier onlyFactoryMinters() { + require(factory.minters(msg.sender) == true, "Only factory minters"); + _; + } + + + /* ========== VIEW FUNCTIONS ========== */ + + /// @notice Returns summary information about the bond + /// @return BondInfo Summary of the bond + function bondInfo() external view returns (BondInfo memory) { + return BondInfo( + symbol(), + name(), + issue_timestamp, + maturity_timestamp, + mint_cap + ); + } + + + /* ========== MINTER FUNCTIONS ========== */ + + /// @notice Mints a specified amount of tokens to the account. + /// @param to The account to receive minted tokens + /// @param amount The amount of the token to mint + function mint(address to, uint256 amount) public onlyFactoryMinters { + require(block.timestamp >= issue_timestamp, "Bond not issueable yet"); + require(block.timestamp < maturity_timestamp, "Bond expired"); + require(!factory.mints_paused(address(this)), "Bond minting paused"); + require((totalSupply() + amount) <= mint_cap, "Mint cap"); + _mint(to, amount); + } + + + /* ========== INTERNAL FUNCTIONS ========== */ + + + + /* ========== OWNER / GOVERNANCE FUNCTIONS ONLY ========== */ + + /// @notice Sets the bond's mint cap + /// @param _mint_cap The mint cap + function setMintCap(uint256 _mint_cap) external onlyFactoryOwner { + mint_cap = _mint_cap; + emit MintCapSet(_mint_cap); + } + + /* ========== EVENTS ========== */ + + /// @dev Emits when mint cap is set + event MintCapSet(uint256 new_mint_cap); + +} \ No newline at end of file diff --git a/src/hardhat/contracts/FXB/FXBFactory.sol b/src/hardhat/contracts/FXB/FXBFactory.sol new file mode 100644 index 00000000..b8842540 --- /dev/null +++ b/src/hardhat/contracts/FXB/FXBFactory.sol @@ -0,0 +1,236 @@ +// SPDX-License-Identifier: BUSL-1.1 +pragma solidity ^0.8.0; + +// ==================================================================== +// | ______ _______ | +// | / _____________ __ __ / ____(_____ ____ _____ ________ | +// | / /_ / ___/ __ `| |/_/ / /_ / / __ \/ __ `/ __ \/ ___/ _ \ | +// | / __/ / / / /_/ _> < / __/ / / / / / /_/ / / / / /__/ __/ | +// | /_/ /_/ \__,_/_/|_| /_/ /_/_/ /_/\__,_/_/ /_/\___/\___/ | +// | | +// ==================================================================== +// ============================ FXBFactory ============================ +// ==================================================================== +// Factory for Frax Bonds (FXB) + +// Frax Finance: https://github.com/FraxFinance + +// Primary Author(s) +// Travis Moore: https://github.com/FortisFortuna + +// Reviewer(s) / Contributor(s) +// Dennis: https://github.com/denett +// Sam Kazemian: https://github.com/samkazemian + +import "@openzeppelin/contracts/utils/Strings.sol"; +import "../Math/BokkyPooBahsDateTimeContract.sol"; +import "./FXB.sol"; +import "../Staking/Owned.sol"; + +contract FXBFactory is Owned { + + /* ========== STATE VARIABLES ========== */ + + // Core + BokkyPooBahsDateTimeContract private time_contract = BokkyPooBahsDateTimeContract(0x90503D86E120B3B309CEBf00C2CA013aB3624736); + + // Bond tracking + address[] public allBonds; // Array of bond addresses + mapping(address => bool) public mints_paused; // Whether minting for the bond is paused + mapping(address => bool) public redeems_paused; // Whether redeeming for the bond is paused + + // Minter related + address[] public minters_array; + mapping(address => bool) public minters; // Mapping is also used for faster verification + + // Misc + string[13] public month_names; // English names of the 12 months + + + /* ========== CONSTRUCTOR ========== */ + + /// @notice Constructor + /// @param _owner The owner of this contract + constructor(address _owner) Owned(_owner) { + + // Set the month names + month_names = [ + '', + 'JAN', + 'FEB', + 'MAR', + 'APR', + 'MAY', + 'JUN', + 'JUL', + 'AUG', + 'SEP', + 'OCT', + 'NOV', + 'DEC' + ]; + } + + + /* ========== VIEW FUNCTIONS ========== */ + + /// @notice Returns the total number of bonds created + /// @return uint Number of bonds created + function allBondsLength() public view returns (uint) { + return allBonds.length; + } + + /// @notice Generates the bond name in the format (e.g. FXB4_JAN012023) + /// @param bond_id The id of the bond + /// @param maturity_timestamp Date the bond will mature and be redeemable + function generateBondName( + uint256 bond_id, + uint256 issue_timestamp, + uint256 maturity_timestamp + ) public view returns (string memory bond_name) { + // Issue date + uint256 issue_month = time_contract.getMonth(issue_timestamp); + uint256 issue_day = time_contract.getDay(issue_timestamp); + uint256 issue_year = time_contract.getYear(issue_timestamp); + + // Maturity date + uint256 maturity_month = time_contract.getMonth(maturity_timestamp); + uint256 maturity_day = time_contract.getDay(maturity_timestamp); + uint256 maturity_year = time_contract.getYear(maturity_timestamp); + + string memory issue_day_string; + if (issue_day > 9) { + issue_day_string = Strings.toString(issue_day); + } + else { + issue_day_string = string(abi.encodePacked( + "0", + Strings.toString(issue_day) + )); + } + + string memory maturity_day_string; + if (maturity_day > 9) { + maturity_day_string = Strings.toString(maturity_day); + } + else { + maturity_day_string = string(abi.encodePacked( + "0", + Strings.toString(maturity_day) + )); + } + + // Assemble all the strings into one + // Example: FXB2_JUL012023_JUL012024 + bond_name = string(abi.encodePacked( + "FXB", + Strings.toString(bond_id), + "_", + month_names[issue_month], + issue_day_string, + Strings.toString(issue_year), + "_", + month_names[maturity_month], + maturity_day_string, + Strings.toString(maturity_year) + )); + } + + + /* ========== OWNER / GOVERNANCE FUNCTIONS ONLY ========== */ + + /// @notice Adds a minter + /// @param minter_address Address of minter to add + function addMinter(address minter_address) external onlyOwner() { + require(minter_address != address(0), "Zero address detected"); + + require(minters[minter_address] == false, "Address already exists"); + minters[minter_address] = true; + minters_array.push(minter_address); + + emit MinterAdded(minter_address); + } + + /// @notice Removes a minter + /// @param minter_address Address of minter to remove + function removeMinter(address minter_address) external onlyOwner() { + require(minter_address != address(0), "Zero address detected"); + require(minters[minter_address] == true, "Address nonexistent"); + + // Delete from the mapping + delete minters[minter_address]; + + // 'Delete' from the array by setting the address to 0x0 + for (uint i = 0; i < minters_array.length; i++){ + if (minters_array[i] == minter_address) { + minters_array[i] = address(0); // This will leave a null in the array and keep the indices the same + break; + } + } + + emit MinterRemoved(minter_address); + } + + /// @notice Generates a new bond contract + /// @param issue_timestamp Date the bond can start being minted + /// @param maturity_timestamp Date the bond will mature and be redeemable + function createBond( + uint256 issue_timestamp, + uint256 maturity_timestamp + ) public onlyOwner returns (address bond_address, uint256 bond_id) { + // Set the bond id + bond_id = allBondsLength(); + + // Get the new symbol and name + string memory bond_symbol = string(abi.encodePacked("FXB", Strings.toString(bond_id))); + string memory bond_name = generateBondName(bond_id, issue_timestamp, maturity_timestamp); + + // Create the new contract + FXB fxb = new FXB( + bond_symbol, + bond_name, + issue_timestamp, + maturity_timestamp + ); + + // Add the new bond address to the array + allBonds.push(address(fxb)); + + emit BondCreated(bond_address, bond_id, bond_symbol, bond_name, issue_timestamp, maturity_timestamp); + } + + /// @notice Sets whether a bond's minting is paused or not + /// @param bond_address Address of the bond + /// @param is_paused Whether a bond's minting is paused + function setBondMintPaused(address bond_address, bool is_paused) external onlyOwner() { + mints_paused[bond_address] = is_paused; + + emit BondMintingPaused(bond_address, is_paused); + } + + /// @notice Sets whether a bond's redemption is paused or not + /// @param bond_address Address of the bond + /// @param is_paused Whether a bond's redemption is paused + function setBondRedemptionPaused(address bond_address, bool is_paused) external onlyOwner() { + redeems_paused[bond_address] = is_paused; + + emit BondRedemptionPaused(bond_address, is_paused); + } + + /* ========== EVENTS ========== */ + + /// @dev Emits when a new bond is created + event BondCreated(address new_address, uint256 new_id, string new_symbol, string new_name, uint256 issue_timestamp, uint256 maturity_timestamp); + + /// @dev Emits when a bond's minting is paused + event BondMintingPaused(address bond_address, bool is_paused); + + /// @dev Emits when a bond's redeeming is paused + event BondRedemptionPaused(address bond_address, bool is_paused); + + /// @dev Emits when a new minter is added + event MinterAdded(address pool_address); + + /// @dev Emits when an existing minter is removed + event MinterRemoved(address pool_address); +} diff --git a/src/hardhat/contracts/FXB/FXBMintRedeemerAMO.sol b/src/hardhat/contracts/FXB/FXBMintRedeemerAMO.sol new file mode 100644 index 00000000..8892e470 --- /dev/null +++ b/src/hardhat/contracts/FXB/FXBMintRedeemerAMO.sol @@ -0,0 +1,180 @@ +// SPDX-License-Identifier: BUSL-1.1 +pragma solidity ^0.8.0; + +// ==================================================================== +// | ______ _______ | +// | / _____________ __ __ / ____(_____ ____ _____ ________ | +// | / /_ / ___/ __ `| |/_/ / /_ / / __ \/ __ `/ __ \/ ___/ _ \ | +// | / __/ / / / /_/ _> < / __/ / / / / / /_/ / / / / /__/ __/ | +// | /_/ /_/ \__,_/_/|_| /_/ /_/_/ /_/\__,_/_/ /_/\___/\___/ | +// | | +// ==================================================================== +// ======================== FXBMintRedeemerAMO ======================== +// ==================================================================== +// Mints and redeems Frax Bonds (FXB) + +// Frax Finance: https://github.com/FraxFinance + +// Primary Author(s) +// Travis Moore: https://github.com/FortisFortuna + +// Reviewer(s) / Contributor(s) +// Dennis: https://github.com/denett +// Sam Kazemian: https://github.com/samkazemian + +import "@uniswap/v3-periphery/contracts/libraries/TransferHelper.sol"; +import "../Frax/IFrax.sol"; +import "./FXB.sol"; +import "./FXBFactory.sol"; +import "../Staking/Owned.sol"; +import "../Utils/ReentrancyGuard.sol"; + +contract FXBMintRedeemerAMO is Owned, ReentrancyGuard { + + /* ========== STATE VARIABLES ========== */ + + // Core + FXBFactory public factory; + IFrax private frax = IFrax(0x853d955aCEf822Db058eb8505911ED77F175b99e); + + // Mint and redeem tracking + uint256 public total_fxb_minted; // Total amount of FXB minted by this AMO + uint256 public total_fxb_redeemed; // Total amount of FXB redeemed by this AMO + mapping(address => uint256) public bond_mints; // Total amount of a specific bond minted by this AMO + mapping(address => uint256) public bond_redeems; // Total amount of a specific bond redeemed by this AMO + + /* ========== CONSTRUCTOR ========== */ + + /// @notice Constructor + /// @param _owner The owner of this contract + /// @param _factory The factory address + constructor( + address _owner, + address _factory + ) Owned(_owner) { + // Set the factory + factory = FXBFactory(_factory); + } + + + /* ========== VIEW FUNCTIONS ========== */ + + /// @notice Determines if a bond can be redeemed + /// @return is_redeemable If the bond is redeemable + function isBondRedeemable(address bond_address) public view returns (bool is_redeemable) { + is_redeemable = !factory.redeems_paused(bond_address) && (block.timestamp >= FXB(bond_address).maturity_timestamp()); + } + + + /* ========== PUBLIC FUNCTIONS ========== */ + + /// @notice Redeems FXB 1-to-1 for FRAX, without the need to approve first (EIP-712 / EIP-2612) + /// @param bond_address Address of the bond + /// @param recipient Recipient of the FRAX + /// @param redeem_amt Amount to redeem + function redeemFXBWithPermit( + address bond_address, + address recipient, + uint256 redeem_amt, + uint256 deadline, + bool approveMax, + uint8 v, + bytes32 r, + bytes32 s + ) external { + // See which approval amount to use + uint256 amount = approveMax ? type(uint256).max : redeem_amt; + + // Call the permit + FXB(bond_address).permit(msg.sender, address(this), amount, deadline, v, r, s); + + // Do the redemption + redeemFXB(bond_address, recipient, redeem_amt); + } + + /// @notice Redeems FXB 1-to-1 for FRAX + /// @param bond_address Address of the bond + /// @param recipient Recipient of the FRAX + /// @param redeem_amt Amount to redeem + function redeemFXB(address bond_address, address recipient, uint256 redeem_amt) public nonReentrant { + // Make sure the bond has matured and is not paused + require(isBondRedeemable(bond_address), "Bond not redeemable"); + + // Take the FXB from the user + TransferHelper.safeTransferFrom(bond_address, msg.sender, address(this), redeem_amt); + + // Burn the FXB + FXB(bond_address).burn(redeem_amt); + + // Update redeem tracking + total_fxb_redeemed += redeem_amt; + bond_redeems[bond_address] += redeem_amt; + + // Give FRAX to the recipient + TransferHelper.safeTransfer(address(frax), recipient, redeem_amt); + + emit BondsRedeemed(bond_address, recipient, redeem_amt); + } + + + /* ========== OWNER / GOVERNANCE FUNCTIONS ONLY ========== */ + + /// @notice Mints FXB to this address + /// @param bond_address Address of the bond + /// @param mint_amt Amount to mint + function mintFXB(address bond_address, uint256 mint_amt) external onlyOwner() { + // Make sure there is enough FRAX in this contract to pay for the FXB you are minting + require(frax.balanceOf(address(this)) >= ((total_fxb_minted + mint_amt) - total_fxb_redeemed)); + + // Mint the FXB + FXB(bond_address).mint(address(this), mint_amt); + + // Update mint tracking + total_fxb_minted += mint_amt; + bond_mints[bond_address] += mint_amt; + + emit BondsMinted(bond_address, mint_amt); + } + + /// @notice Burn FRAX. Need to make sure you have enough to redeem all outstanding FXB first though. + /// @param burn_amt Amount to burn + function burnFrax(uint256 burn_amt) external onlyOwner() { + // Make sure there is enough FRAX in this contract to pay for the outstanding FXB + require((frax.balanceOf(address(this)) - burn_amt) >= (total_fxb_minted - total_fxb_redeemed)); + + // Burn the FRAX + frax.burn(burn_amt); + + emit FraxBurned(burn_amt); + } + + /// @notice Auctions a specified amount of FXB at a certain price + /// @param bond_address Address of the bond + /// @param price_e18 How much FRAX per FXB + /// @param auction_amt Amount to auction + function auctionFXB(address bond_address, address price_e18, uint256 auction_amt) external onlyOwner() { + // TODO + + emit BondsAuctionInitiated(); + } + + function setFactory(address new_factory) external onlyOwner { + require(new_factory != address(0), "Zero address detected"); + + factory = FXBFactory(new_factory); + } + + /* ========== EVENTS ========== */ + + /// @dev Emits when new bonds are auctioned off + event BondsAuctionInitiated(); + + /// @dev Emits when new bonds are minted + event BondsMinted(address bond_address, uint256 mint_amt); + + /// @dev Emits when bonds are redeemed + event BondsRedeemed(address bond_address, address recipient, uint256 amount); + + /// @dev Emits when FRAX is burned + event FraxBurned(uint256 burn_amt); +} diff --git a/src/hardhat/contracts/Frax/FraxAMOMinterLayer2.sol b/src/hardhat/contracts/Frax/FraxAMOMinterLayer2.sol new file mode 100755 index 00000000..479ca5ac --- /dev/null +++ b/src/hardhat/contracts/Frax/FraxAMOMinterLayer2.sol @@ -0,0 +1,288 @@ +// SPDX-License-Identifier: GPL-2.0-or-later +pragma solidity >=0.8.0; + +// ==================================================================== +// | ______ _______ | +// | / _____________ __ __ / ____(_____ ____ _____ ________ | +// | / /_ / ___/ __ `| |/_/ / /_ / / __ \/ __ `/ __ \/ ___/ _ \ | +// | / __/ / / / /_/ _> < / __/ / / / / / /_/ / / / / /__/ __/ | +// | /_/ /_/ \__,_/_/|_| /_/ /_/_/ /_/\__,_/_/ /_/\___/\___/ | +// | | +// ==================================================================== +// ======================= FraxAMOMinterLayer2 ======================== +// ==================================================================== +// Basically the same version on Ethereum, but some unneeded functions are removed +// Frax Finance: https://github.com/FraxFinance + +// Primary Author(s) +// Travis Moore: https://github.com/FortisFortuna + +// Reviewer(s) / Contributor(s) +// Amirnader Aghayeghazvini: https://github.com/amirnader-ghazvini +// Drake Evans: https://github.com/DrakeEvans +// Sam Kazemian: https://github.com/samkazemian +// Dennis: github.com/denett + +import "../Math/SafeMath.sol"; +import "../ERC20/__CROSSCHAIN/ICrossChainCanonical.sol"; +import "../Frax/Pools/FraxPoolV3.sol"; +import "../Frax/Pools/IFraxPool.sol"; +import "../ERC20/ERC20.sol"; +import "../Staking/Owned.sol"; +import '../Uniswap/TransferHelper.sol'; +import '../Misc_AMOs/IAMO.sol'; + +contract FraxAMOMinterLayer2 is Owned { + /* ========== STATE VARIABLES ========== */ + + // Core + ICrossChainCanonical public FRAX; + ICrossChainCanonical public FXS; + + // AMO addresses + address[] public amos_array; + mapping(address => bool) public amos; // Mapping is also used for faster verification + + // Max amount of FRAX and FXS this contract can mint + int256 public frax_mint_cap = int256(10000000e18); + int256 public fxs_mint_cap = int256(10000000e18); + + // Frax mint balances + mapping(address => int256) public frax_mint_balances; // Amount of FRAX the contract minted, by AMO + int256 public frax_mint_sum = 0; // Across all AMOs + + // Fxs mint balances + mapping(address => int256) public fxs_mint_balances; // Amount of FXS the contract minted, by AMO + int256 public fxs_mint_sum = 0; // Across all AMOs + + // FRAX balance related + uint256 public fraxDollarBalanceStored = 0; + + // AMO balance corrections + mapping(address => int256[2]) public correction_offsets_amos; + + + /* ========== DEPRECATED STATE VARIABLES ========== */ + + // Collateral borrowed balances + mapping(address => int256) public collat_borrowed_balances; // Amount of collateral the contract borrowed, by AMO + int256 public collat_borrowed_sum = 0; // Across all AMOs + + // Collateral balance related + uint256 public missing_decimals; + uint256 public collatDollarBalanceStored = 0; + + /* ========== CONSTRUCTOR ========== */ + + constructor ( + address _owner_address, + address _frax_address, + address _fxs_address + ) Owned(_owner_address) { + FRAX = ICrossChainCanonical(_frax_address); + FXS = ICrossChainCanonical(_fxs_address); + } + + /* ========== MODIFIERS ========== */ + + modifier onlyByOwner() { + require(msg.sender == owner, "Not owner or timelock"); + _; + } + + modifier validAMO(address amo_address) { + require(amos[amo_address], "Invalid AMO"); + _; + } + + + /* ========== VIEWS ========== */ + + function allAMOAddresses() external view returns (address[] memory) { + return amos_array; + } + + function allAMOsLength() external view returns (uint256) { + return amos_array.length; + } + + function fraxTrackedAMO(address amo_address) external view returns (int256) { + return frax_mint_balances[amo_address] + correction_offsets_amos[amo_address][0]; + } + + function fxsTrackedAMO(address amo_address) external view returns (int256) { + return fxs_mint_balances[amo_address] + correction_offsets_amos[amo_address][1]; + } + + + /* ========== PUBLIC FUNCTIONS ========== */ + + // Callable by anyone willing to pay the gas + function syncDollarBalances() public { + uint256 total_frax_value_d18 = 0; + for (uint i = 0; i < amos_array.length; i++){ + // Exclude null addresses + address amo_address = amos_array[i]; + if (amo_address != address(0)) { + (uint256 frax_val_e18, ) = IAMO(amo_address).dollarBalances(); + total_frax_value_d18 += uint256(int256(frax_val_e18) + correction_offsets_amos[amo_address][0]); + } + } + fraxDollarBalanceStored = total_frax_value_d18; + } + + + /* ==================== OWNER / GOVERNANCE FUNCTIONS ONLY ==================== */ + // Only owner or timelock can call, to limit risk + + // ------------------------------------------------------------------ + // ------------------------------ FRAX ------------------------------ + // ------------------------------------------------------------------ + + // This contract is essentially marked as a 'pool' so it can call OnlyPools functions like pool_mint and pool_burn_from + // on the main FRAX contract + function mintFraxForAMO(address destination_amo, uint256 frax_amount) external onlyByOwner validAMO(destination_amo) { + int256 frax_amt_i256 = int256(frax_amount); + + // Make sure you aren't minting more than the minter's mint cap + require((frax_mint_sum + frax_amt_i256) <= frax_mint_cap, "Mint cap reached"); + frax_mint_balances[destination_amo] += frax_amt_i256; + frax_mint_sum += frax_amt_i256; + + // Mint the FRAX to the AMO + FRAX.minter_mint(destination_amo, frax_amount); + + // Sync + syncDollarBalances(); + } + + function burnFraxFromAMO(uint256 frax_amount) external validAMO(msg.sender) { + int256 frax_amt_i256 = int256(frax_amount); + + // Burn first + FRAX.burnFrom(msg.sender, frax_amount); + + // Then update the balances + frax_mint_balances[msg.sender] -= frax_amt_i256; + frax_mint_sum -= frax_amt_i256; + + // Sync + syncDollarBalances(); + } + + // ------------------------------------------------------------------ + // ------------------------------- FXS ------------------------------ + // ------------------------------------------------------------------ + + function mintFxsForAMO(address destination_amo, uint256 fxs_amount) external onlyByOwner validAMO(destination_amo) { + int256 fxs_amt_i256 = int256(fxs_amount); + + // Make sure you aren't minting more than the mint cap + require((fxs_mint_sum + fxs_amt_i256) <= fxs_mint_cap, "Mint cap reached"); + fxs_mint_balances[destination_amo] += fxs_amt_i256; + fxs_mint_sum += fxs_amt_i256; + + // Mint the FXS to the AMO + FXS.minter_mint(destination_amo, fxs_amount); + + // Sync + syncDollarBalances(); + } + + function burnFxsFromAMO(uint256 fxs_amount) external validAMO(msg.sender) { + int256 fxs_amt_i256 = int256(fxs_amount); + + // Burn first + FXS.burnFrom(msg.sender, fxs_amount); + + // Then update the balances + fxs_mint_balances[msg.sender] -= fxs_amt_i256; + fxs_mint_sum -= fxs_amt_i256; + + // Sync + syncDollarBalances(); + } + + /* ========== RESTRICTED GOVERNANCE FUNCTIONS ========== */ + + // Adds an AMO + function addAMO(address amo_address, bool sync_too) public onlyByOwner { + require(amo_address != address(0), "Zero address detected"); + + (uint256 frax_val_e18, ) = IAMO(amo_address).dollarBalances(); + require(frax_val_e18 >= 0, "Invalid AMO"); + + require(amos[amo_address] == false, "Address already exists"); + amos[amo_address] = true; + amos_array.push(amo_address); + + // Mint balances + frax_mint_balances[amo_address] = 0; + fxs_mint_balances[amo_address] = 0; + + // Offsets + correction_offsets_amos[amo_address][0] = 0; + correction_offsets_amos[amo_address][1] = 0; + + if (sync_too) syncDollarBalances(); + + emit AMOAdded(amo_address); + } + + // Removes an AMO + function removeAMO(address amo_address, bool sync_too) public onlyByOwner { + require(amo_address != address(0), "Zero address detected"); + require(amos[amo_address] == true, "Address nonexistent"); + + // Delete from the mapping + delete amos[amo_address]; + + // 'Delete' from the array by setting the address to 0x0 + for (uint i = 0; i < amos_array.length; i++){ + if (amos_array[i] == amo_address) { + amos_array[i] = address(0); // This will leave a null in the array and keep the indices the same + break; + } + } + + if (sync_too) syncDollarBalances(); + + emit AMORemoved(amo_address); + } + + function setFraxMintCap(uint256 _frax_mint_cap) external onlyByOwner { + frax_mint_cap = int256(_frax_mint_cap); + } + + function setFxsMintCap(uint256 _fxs_mint_cap) external onlyByOwner { + fxs_mint_cap = int256(_fxs_mint_cap); + } + + function setAMOCorrectionOffsets(address amo_address, int256 frax_e18_correction, int256 fxs_e18_correction) external onlyByOwner { + correction_offsets_amos[amo_address][0] = frax_e18_correction; + correction_offsets_amos[amo_address][1] = fxs_e18_correction; + } + + function recoverERC20(address tokenAddress, uint256 tokenAmount) external onlyByOwner { + // Can only be triggered by owner or governance + TransferHelper.safeTransfer(tokenAddress, owner, tokenAmount); + + emit Recovered(tokenAddress, tokenAmount); + } + + // Generic proxy + function execute( + address _to, + uint256 _value, + bytes calldata _data + ) external onlyByOwner returns (bool, bytes memory) { + (bool success, bytes memory result) = _to.call{value:_value}(_data); + return (success, result); + } + + /* ========== EVENTS ========== */ + + event AMOAdded(address amo_address); + event AMORemoved(address amo_address); + event Recovered(address token, uint256 amount); +} \ No newline at end of file diff --git a/src/hardhat/contracts/FraxETH/FrxETHMiniRouter.sol b/src/hardhat/contracts/FraxETH/FrxETHMiniRouter.sol new file mode 100644 index 00000000..845d7863 --- /dev/null +++ b/src/hardhat/contracts/FraxETH/FrxETHMiniRouter.sol @@ -0,0 +1,107 @@ +pragma solidity >=0.8.0; + +import "./IfrxETH.sol"; +import "./IfrxETHMinter.sol"; +import "./IsfrxETH.sol"; +import "./IsfrxETH.sol"; +import "../Curve/ICurvefrxETHETHPool.sol"; + +// ==================================================================== +// | ______ _______ | +// | / _____________ __ __ / ____(_____ ____ _____ ________ | +// | / /_ / ___/ __ `| |/_/ / /_ / / __ \/ __ `/ __ \/ ___/ _ \ | +// | / __/ / / / /_/ _> < / __/ / / / / / /_/ / / / / /__/ __/ | +// | /_/ /_/ \__,_/_/|_| /_/ /_/_/ /_/\__,_/_/ /_/\___/\___/ | +// | | +// ==================================================================== +// ========================= FrxETHMiniRouter ========================= +// ==================================================================== +// Routes ETH -> frxETH and ETH -> sfrxETH via the minter or via Curve, depending on pricing + +// Frax Finance: https://github.com/FraxFinance + +// Primary Author(s) +// Travis Moore: https://github.com/FortisFortuna + + +contract FrxETHMiniRouter { + /* ========== STATE VARIABLES ========== */ + IfrxETH public frxETH = IfrxETH(0x5E8422345238F34275888049021821E8E08CAa1f); + IfrxETHMinter public minter = IfrxETHMinter(0xbAFA44EFE7901E04E39Dad13167D089C559c1138); + IsfrxETH public sfrxETH = IsfrxETH(0xac3E018457B222d93114458476f3E3416Abbe38F); + ICurvefrxETHETHPool public pool = ICurvefrxETHETHPool(0xa1F8A6807c402E4A15ef4EBa36528A3FED24E577); + + /* ========== CONSTRUCTOR ========== */ + constructor() { + // Nothing + } + + /* ========== VIEWS ========== */ + + // Get the prices and estimated frxETH out amounts + function getFrxETHRoutePricesAndOuts(uint256 eth_in) public view returns ( + uint256 minter_price, + uint256 minter_out, + uint256 curve_price, + uint256 curve_out, + bool use_curve // false: Minter, true: Curve + ) { + // Minter prices are fixed + minter_price = 1e18; + minter_out = eth_in; + + // Get the Curve info + curve_price = pool.price_oracle(); + curve_out = pool.get_dy(0, 1, eth_in); + + // Use Curve if you get more frxEth out + use_curve = (curve_out >= minter_out); + } + + // Get the prices and estimated frxETH out amounts + function sendETH( + address recipient, + bool get_sfrxeth_instead, + uint256 min_frxeth_out + ) external payable returns ( + uint256 frxeth_used, + uint256 frxeth_out, + uint256 sfrxeth_out + ) { + // First see which route to take + (, , , , bool use_curve) = getFrxETHRoutePricesAndOuts(msg.value); + + // Take different routes for frxETH depending on pricing + if (use_curve) { + frxeth_used = pool.exchange{ value: msg.value }(0, 1, msg.value, min_frxeth_out); + } + else { + minter.submit{ value: msg.value }(); + frxeth_used = msg.value; + } + + // Convert the frxETH to sfrxETH if the user specified it + if (get_sfrxeth_instead) { + // Approve frxETH to sfrxETH for staking + frxETH.approve(address(sfrxETH), msg.value); + + // Deposit the frxETH and give the generated sfrxETH to the final recipient + sfrxeth_out = sfrxETH.deposit(msg.value, recipient); + require(sfrxeth_out > 0, 'No sfrxETH was returned'); + + emit ETHToSfrxETH(msg.sender, recipient, use_curve, msg.value, frxeth_used, sfrxeth_out); + } else { + // Set the frxETH out to the frxETH used + frxeth_out = frxeth_used; + + // Give the frxETH to the recipient + frxETH.transfer(recipient, frxeth_out); + + emit ETHToFrxETH(msg.sender, recipient, use_curve, msg.value, frxeth_out); + } + } + + /* ========== EVENTS ========== */ + event ETHToFrxETH(address indexed from, address indexed recipient, bool curve_used, uint256 eth_in, uint256 frxeth_out); + event ETHToSfrxETH(address indexed from, address indexed recipient, bool curve_used, uint256 amt_in, uint256 frxeth_used, uint256 sfrxeth_out); +} \ No newline at end of file diff --git a/src/hardhat/contracts/FraxETH/IfrxETH.sol b/src/hardhat/contracts/FraxETH/IfrxETH.sol new file mode 100644 index 00000000..1bf68ff5 --- /dev/null +++ b/src/hardhat/contracts/FraxETH/IfrxETH.sol @@ -0,0 +1,33 @@ +// SPDX-License-Identifier: GPL-2.0-or-later +pragma solidity >=0.8.0; + +interface IfrxETH { + function DOMAIN_SEPARATOR ( ) external view returns ( bytes32 ); + function acceptOwnership ( ) external; + function addMinter ( address minter_address ) external; + function allowance ( address owner, address spender ) external view returns ( uint256 ); + function approve ( address spender, uint256 amount ) external returns ( bool ); + function balanceOf ( address account ) external view returns ( uint256 ); + function burn ( uint256 amount ) external; + function burnFrom ( address account, uint256 amount ) external; + function decimals ( ) external view returns ( uint8 ); + function decreaseAllowance ( address spender, uint256 subtractedValue ) external returns ( bool ); + function increaseAllowance ( address spender, uint256 addedValue ) external returns ( bool ); + function minter_burn_from ( address b_address, uint256 b_amount ) external; + function minter_mint ( address m_address, uint256 m_amount ) external; + function minters ( address ) external view returns ( bool ); + function minters_array ( uint256 ) external view returns ( address ); + function name ( ) external view returns ( string memory ); + function nominateNewOwner ( address _owner ) external; + function nominatedOwner ( ) external view returns ( address ); + function nonces ( address owner ) external view returns ( uint256 ); + function owner ( ) external view returns ( address ); + function permit ( address owner, address spender, uint256 value, uint256 deadline, uint8 v, bytes32 r, bytes32 s ) external; + function removeMinter ( address minter_address ) external; + function setTimelock ( address _timelock_address ) external; + function symbol ( ) external view returns ( string memory ); + function timelock_address ( ) external view returns ( address ); + function totalSupply ( ) external view returns ( uint256 ); + function transfer ( address to, uint256 amount ) external returns ( bool ); + function transferFrom ( address from, address to, uint256 amount ) external returns ( bool ); +} diff --git a/src/hardhat/contracts/FraxETH/IfrxETHMinter.sol b/src/hardhat/contracts/FraxETH/IfrxETHMinter.sol new file mode 100644 index 00000000..33cdb761 --- /dev/null +++ b/src/hardhat/contracts/FraxETH/IfrxETHMinter.sol @@ -0,0 +1,47 @@ +// SPDX-License-Identifier: GPL-2.0-or-later +pragma solidity >=0.8.0; + +interface IfrxETHMinter { +struct Validator { + bytes pubKey; + bytes signature; + bytes32 depositDataRoot; +} + + function DEPOSIT_SIZE ( ) external view returns ( uint256 ); + function RATIO_PRECISION ( ) external view returns ( uint256 ); + function acceptOwnership ( ) external; + function activeValidators ( bytes memory ) external view returns ( bool ); + function addValidator ( Validator memory validator ) external; + function addValidators ( Validator[] memory validatorArray ) external; + function clearValidatorArray ( ) external; + function currentWithheldETH ( ) external view returns ( uint256 ); + function depositContract ( ) external view returns ( address ); + function depositEther ( uint256 max_deposits ) external; + function depositEtherPaused ( ) external view returns ( bool ); + function frxETHToken ( ) external view returns ( address ); + function getValidator ( uint256 i ) external view returns ( bytes memory pubKey, bytes memory withdrawalCredentials, bytes memory signature, bytes32 depositDataRoot ); + function getValidatorStruct ( bytes memory pubKey, bytes memory signature, bytes32 depositDataRoot ) external pure returns ( Validator memory ); + function moveWithheldETH ( address to, uint256 amount ) external; + function nominateNewOwner ( address _owner ) external; + function nominatedOwner ( ) external view returns ( address ); + function numValidators ( ) external view returns ( uint256 ); + function owner ( ) external view returns ( address ); + function popValidators ( uint256 times ) external; + function recoverERC20 ( address tokenAddress, uint256 tokenAmount ) external; + function recoverEther ( uint256 amount ) external; + function removeValidator ( uint256 remove_idx, bool dont_care_about_ordering ) external; + function setTimelock ( address _timelock_address ) external; + function setWithdrawalCredential ( bytes memory _new_withdrawal_pubkey ) external; + function setWithholdRatio ( uint256 newRatio ) external; + function sfrxETHToken ( ) external view returns ( address ); + function submit ( ) external payable; + function submitAndDeposit ( address recipient ) external payable returns ( uint256 shares ); + function submitAndGive ( address recipient ) external payable; + function submitPaused ( ) external view returns ( bool ); + function swapValidator ( uint256 from_idx, uint256 to_idx ) external; + function timelock_address ( ) external view returns ( address ); + function togglePauseDepositEther ( ) external; + function togglePauseSubmits ( ) external; + function withholdRatio ( ) external view returns ( uint256 ); +} diff --git a/src/hardhat/contracts/FraxETH/IsfrxETH.sol b/src/hardhat/contracts/FraxETH/IsfrxETH.sol new file mode 100644 index 00000000..ef6ece69 --- /dev/null +++ b/src/hardhat/contracts/FraxETH/IsfrxETH.sol @@ -0,0 +1,40 @@ +// SPDX-License-Identifier: GPL-2.0-or-later +pragma solidity >=0.8.0; + +// Primarily added to prevent ERC20 name collisions in frxETHMinter.sol +interface IsfrxETH { + function DOMAIN_SEPARATOR() external view returns (bytes32); + function allowance(address, address) external view returns (uint256); + function approve(address spender, uint256 amount) external returns (bool); + function asset() external view returns (address); + function balanceOf(address) external view returns (uint256); + function convertToAssets(uint256 shares) external view returns (uint256); + function convertToShares(uint256 assets) external view returns (uint256); + function decimals() external view returns (uint8); + function deposit(uint256 assets, address receiver) external returns (uint256 shares); + function depositWithSignature(uint256 assets, address receiver, uint256 deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s) external returns (uint256 shares); + function lastRewardAmount() external view returns (uint192); + function lastSync() external view returns (uint32); + function maxDeposit(address) external view returns (uint256); + function maxMint(address) external view returns (uint256); + function maxRedeem(address owner) external view returns (uint256); + function maxWithdraw(address owner) external view returns (uint256); + function mint(uint256 shares, address receiver) external returns (uint256 assets); + function name() external view returns (string memory); + function nonces(address) external view returns (uint256); + function permit(address owner, address spender, uint256 value, uint256 deadline, uint8 v, bytes32 r, bytes32 s) external; + function previewDeposit(uint256 assets) external view returns (uint256); + function previewMint(uint256 shares) external view returns (uint256); + function previewRedeem(uint256 shares) external view returns (uint256); + function previewWithdraw(uint256 assets) external view returns (uint256); + function redeem(uint256 shares, address receiver, address owner) external returns (uint256 assets); + function rewardsCycleEnd() external view returns (uint32); + function rewardsCycleLength() external view returns (uint32); + function symbol() external view returns (string memory); + function syncRewards() external; + function totalAssets() external view returns (uint256); + function totalSupply() external view returns (uint256); + function transfer(address to, uint256 amount) external returns (bool); + function transferFrom(address from, address to, uint256 amount) external returns (bool); + function withdraw(uint256 assets, address receiver, address owner) external returns (uint256 shares); +} diff --git a/src/hardhat/contracts/Fraxbonds/FXB.sol b/src/hardhat/contracts/Fraxbonds/FXB.sol new file mode 100644 index 00000000..f154aa12 --- /dev/null +++ b/src/hardhat/contracts/Fraxbonds/FXB.sol @@ -0,0 +1,25 @@ +//SPDX-License-Identifier: Unlicense +pragma solidity ^0.8.4; + +import "@openzeppelin/contracts/token/ERC20/extensions/draft-ERC20Permit.sol"; +import "@uniswap/v3-periphery/contracts/libraries/TransferHelper.sol"; + +contract FXB is ERC20Permit { + address constant public FRAX = 0x853d955aCEf822Db058eb8505911ED77F175b99e; + uint immutable public expiry; + + constructor(string memory _name, string memory _symbol, uint _expiry) ERC20(_name, _symbol) ERC20Permit(_name) { + expiry = _expiry; + } + + function mint(address to, uint256 amount) external { + TransferHelper.safeTransferFrom(FRAX, msg.sender, address(this), amount); + _mint(to, amount); + } + + function redeem(address to, uint256 amount) external { + if (block.timestamp=totalSupply()) { + fraxPerBond = 1e18; + fraxPerYieldToken = fraxBalance/totalSupply(); + } else { + fraxPerBond = fraxBalance/totalSupply(); + } + } + + function redeem(address to, uint256 amount) external { + if (fraxPerBond==0) revert("Too soon"); + _burn(msg.sender, amount); + TransferHelper.safeTransfer(address(FRAX), to, amount*fraxPerBond/1e18); + } + + function redeemYieldToken(address to, uint256 amount) external { + if (fraxPerBond==0) revert("Too soon"); + yieldToken.burnFrom(msg.sender, amount); + TransferHelper.safeTransfer(address(FRAX), to, amount*fraxPerYieldToken/1e18); + } +} diff --git a/src/hardhat/contracts/Fraxbonds/FraxFPIBondYield.sol b/src/hardhat/contracts/Fraxbonds/FraxFPIBondYield.sol new file mode 100644 index 00000000..b770fbe4 --- /dev/null +++ b/src/hardhat/contracts/Fraxbonds/FraxFPIBondYield.sol @@ -0,0 +1,22 @@ +//SPDX-License-Identifier: Unlicense +pragma solidity ^0.8.4; + +import "@openzeppelin/contracts/token/ERC20/extensions/draft-ERC20Permit.sol"; + +contract FraxFPIBondYield is ERC20Permit { + address immutable bond; + + constructor(string memory _name, string memory _symbol) ERC20(_name, _symbol) ERC20Permit(_name) { + bond = msg.sender; + } + + function mint(address to, uint256 amount) external { + if (msg.sender!=bond) revert("Can not mint"); + _mint(to, amount); + } + + function burnFrom(address from, uint256 amount) external { + if (msg.sender!=bond) revert("Can not burn"); + _burn(from, amount); + } +} diff --git a/src/hardhat/contracts/Fraxbonds/Fraxauction.sol b/src/hardhat/contracts/Fraxbonds/Fraxauction.sol new file mode 100644 index 00000000..51a40ba8 --- /dev/null +++ b/src/hardhat/contracts/Fraxbonds/Fraxauction.sol @@ -0,0 +1,61 @@ +//SPDX-License-Identifier: Unlicense +pragma solidity ^0.8.4; + +import "@uniswap/v3-periphery/contracts/libraries/TransferHelper.sol"; + +contract Fraxauction { + Auction[] public auctions; + struct Auction { + address owner; + address buyToken; + address sellToken; + uint sellAmount; + uint pricePrecision; + uint startPrice; + uint endPrice; + uint startTime; + uint endTime; + uint soldAmount; + uint earnings; + bool exited; + } + + constructor() { + } + + function createAuction(address _buyToken, address _sellToken, uint _sellAmount, uint _pricePrecision, uint _startPrice, uint _endPrice, uint _duration) external { + if (_startPrice<_endPrice) revert("Wrong price"); + TransferHelper.safeTransferFrom(_sellToken, msg.sender, address(this), _sellAmount); + auctions.push(Auction(msg.sender,_buyToken, _sellToken, _sellAmount, _pricePrecision, _startPrice, _endPrice, block.timestamp, block.timestamp+_duration,0,0,false)); + } + + function buy(uint _auctionNo, uint _amountIn, uint _maxPrice) external returns (uint _in, uint _out){ + Auction memory auction = auctions[_auctionNo]; + if (auction.endTime_maxPrice) revert("maxPrice"); + uint amountOut = _amountIn*auction.pricePrecision/price; + if (auction.soldAmount+amountOut>auction.sellAmount) { + amountOut = auction.sellAmount-auction.soldAmount; + _amountIn = _amountIn*price/auction.pricePrecision; + } + + auctions[_auctionNo].soldAmount+=amountOut; + auctions[_auctionNo].earnings+=_amountIn; + + TransferHelper.safeTransferFrom(auction.buyToken, msg.sender, address(this), _amountIn); + TransferHelper.safeTransfer(auction.sellToken, msg.sender, amountOut); + return (_amountIn,amountOut); + } + + function exit(uint _auctionNo) external { + Auction memory auction = auctions[_auctionNo]; + if (auction.owner!=msg.sender) revert("Not owner"); + if (auction.exited) revert("Already exited"); + + auctions[_auctionNo].exited=true; + + TransferHelper.safeTransferFrom(auction.buyToken, msg.sender, address(this), auction.earnings); + TransferHelper.safeTransfer(auction.sellToken, msg.sender, auction.sellAmount-auction.soldAmount); + } +} diff --git a/src/hardhat/contracts/Fraxbonds/SlippageAuction.sol b/src/hardhat/contracts/Fraxbonds/SlippageAuction.sol new file mode 100644 index 00000000..0d305a6f --- /dev/null +++ b/src/hardhat/contracts/Fraxbonds/SlippageAuction.sol @@ -0,0 +1,239 @@ +// SPDX-License-Identifier: Unilicense +pragma solidity >=0.8.0; + +// ==================================================================== +// | ______ _______ | +// | / _____________ __ __ / ____(_____ ____ _____ ________ | +// | / /_ / ___/ __ `| |/_/ / /_ / / __ \/ __ `/ __ \/ ___/ _ \ | +// | / __/ / / / /_/ _> < / __/ / / / / / /_/ / / / / /__/ __/ | +// | /_/ /_/ \__,_/_/|_| /_/ /_/_/ /_/\__,_/_/ /_/\___/\___/ | +// | | +// ==================================================================== +// ========================= SlippageAuction ========================== +// ==================================================================== +// Slippage auction to sell tokens over time. +// It has 3 parameters: +// - amount to auction +// - slippage per token bought +// - price decrease per day. +// For this we can calculate the time the auction will operate at the market price. +// Example: +// - We auction 10M +// - We pick a slippage such that a 100k buy will result in 0.1% slippage +// => 10M = 100x100k, so total price impact during the auction will be 20% (price impact is twice the slippage) +// - We lower the price 1% per day +// => the auction will be at the market price for at least 20 days. + +// Frax Finance: https://github.com/FraxFinance + +// Primary Author(s) +// Dennis: https://github.com/denett + +// Reviewer(s) / Contributor(s) +// Travis Moore: https://github.com/FortisFortuna +// Drake Evans: https://github.com/DrakeEvans +// Sam Kazemian: https://github.com/samkazemian + +import "@uniswap/v3-periphery/contracts/libraries/TransferHelper.sol"; + +contract SlippageAuction { + + // ============================================================================== + // Storage + // ============================================================================== + + /// @notice Slippage precision + uint128 constant PRECISION = 1e18; + + /// @notice Stored information about ongoing auctions + Auction[] public auctions; + + + // ============================================================================== + // Structs + // ============================================================================== + + /// @notice Auction information + /// @param owner Owner / creator of the auction + /// @param buyToken The token used to buy the sellToken being auctioned off + /// @param sellToken The token being auctioned off + /// @param priceDecay Price decay, per day, using PRECISION + /// @param priceSlippage Slippage fraction. E.g (0.01 * PRECISION) = 1% + /// @param amountLeft Amount of sellToken remaining to buy + /// @param amountOut Amount to sellToken already bought + /// @param lastPrice Price of the last sale, in buyToken amt per sellToken + /// @param lastBuyTime Time of the last sale + /// @param exited If the auction ended + struct Auction { + address owner; + address buyToken; + address sellToken; + uint128 priceDecay; + uint128 priceSlippage; + uint128 amountLeft; + uint128 amountOut; + uint128 lastPrice; + uint32 lastBuyTime; + bool exited; + } + + + // ============================================================================== + // Constructor + // ============================================================================== + + constructor() { + + } + + // ============================================================================== + // Public Functions + // ============================================================================== + + /// @notice Creates a new auction + /// @param _buyToken The token used to buy the sellToken being auctioned off + /// @param _sellToken The token being auctioned off + /// @param _sellAmount Amount of sellToken being sold + /// @param _startPrice Starting price of the sellToken, in buyToken + /// @param _priceDecay Price decay, per day, using PRECISION + /// @param _priceSlippage Slippage fraction. E.g (0.01 * PRECISION) = 1% + function createAuction(address _buyToken, address _sellToken, uint128 _sellAmount, uint128 _startPrice, uint128 _priceDecay, uint128 _priceSlippage) external returns (uint _auctionNo) { + // Take the sellTokens from the sender + TransferHelper.safeTransferFrom(_sellToken, msg.sender, address(this), _sellAmount); + + // Create the auction + _auctionNo = auctions.length; + auctions.push(Auction( + msg.sender, + _buyToken, + _sellToken, + _priceDecay, + _priceSlippage, + _sellAmount, + 0, + _startPrice, + uint32(block.timestamp), + false + )); + + emit AuctionCreated(_auctionNo, _buyToken, _sellToken, _sellAmount, _startPrice, _priceDecay, _priceSlippage); + } + + /// @notice Buy tokens from an auction + /// @param _auctionNo Auction ID + /// @param _amountIn Amount of buyToken in + /// @param _minAmountOut Minimum amount of sellToken out, otherwise reverts + function buy(uint _auctionNo, uint128 _amountIn, uint _minAmountOut) external returns (uint128 amountOut) { + // Get the auction info + Auction memory auction = auctions[_auctionNo]; + if (auction.exited) revert AuctionAlreadyExited(); + + // Calculate the sale price (in buyToken per sellToken), factoring in the time decay + uint128 price = uint128(auction.lastPrice - (auction.priceDecay * (block.timestamp - auction.lastBuyTime))); + + // Calculate the slippage component of the price (in buyToken per sellToken) + uint128 slippagePerSellTkn = (auction.priceSlippage *_amountIn) / PRECISION; + + // Calculate the output amount of sellToken + amountOut = uint128((_amountIn * PRECISION) / (price + slippagePerSellTkn)); + if (_minAmountOut > amountOut) revert MinAmountOut(_minAmountOut, amountOut); + if (amountOut > auction.amountLeft) revert NotEnoughLeftInAuction(); + + // Update storage + Auction storage auctionStorage = auctions[_auctionNo]; + auctionStorage.amountLeft -= amountOut; + auctionStorage.amountOut +=_amountIn; + auctionStorage.lastPrice = price + (2 * slippagePerSellTkn); // Price impact is twice the slippage + auctionStorage.lastBuyTime = uint32(block.timestamp); + + // Transfer tokens + TransferHelper.safeTransferFrom(auction.buyToken, msg.sender, address(this), _amountIn); + TransferHelper.safeTransfer(auction.sellToken, msg.sender, amountOut); + + emit Buy(_auctionNo, auction.buyToken, auction.sellToken, _amountIn, amountOut); + + return amountOut; + } + + + // ============================================================================== + // Views + // ============================================================================== + + /// @notice Calculate the amount of sellTokens out for a given auction and buyToken amount + /// @param _auctionNo Auction ID + /// @param _amountIn Amount of buyToken in + /// @return amountOut Minimum amount of sellToken out, otherwise reverts + function getAmountOut(uint _auctionNo, uint128 _amountIn) external view returns (uint128 amountOut) { + // Get the auction info + Auction memory auction = auctions[_auctionNo]; + if (auction.exited) revert AuctionAlreadyExited(); + + // Calculate the sale price (in buyToken per sellToken), factoring in the time decay + uint128 price = uint128(auction.lastPrice - (auction.priceDecay * (block.timestamp - auction.lastBuyTime))); + + // Calculate the slippage component of the price (in buyToken per sellToken) + uint128 slippage = (auction.priceSlippage * _amountIn) / PRECISION; + + // Calculate the output amount of sellToken + amountOut = uint128(_amountIn * (PRECISION / (price + slippage))); + if (amountOut > auction.amountLeft) revert NotEnoughLeftInAuction(); + } + + // ============================================================================== + // Owner-only Functions + // ============================================================================== + + /// @notice End the auction. Only callable by the auction owner + /// @param _auctionNo Auction ID + function exit(uint _auctionNo) external { + // Get the auction info and perform checks + Auction memory auction = auctions[_auctionNo]; + if (auction.owner != msg.sender) revert NotAuctionOwner(); + if (auction.exited) revert AuctionAlreadyExited(); + + // Set the auction as exited + auctions[_auctionNo].exited = true; + + // Return buyToken proceeds from the auction to the sender + TransferHelper.safeTransfer(auction.buyToken, msg.sender, auction.amountOut); + + // Return any unsold sellToken to the sender + TransferHelper.safeTransfer(auction.sellToken, msg.sender, auction.amountLeft); + + emit AuctionExited(_auctionNo); + } + + // ============================================================================== + // Errors + // ============================================================================== + + /// @notice If the auction already exited + error AuctionAlreadyExited(); + + /// @notice If the expected amount of output tokens is too low + /// @param _min_out Minimum out that the user expects + /// @param _actual_out Actual amount out that would occur + error MinAmountOut(uint _min_out, uint128 _actual_out); + + /// @notice If msg.sender is not the auction owner + error NotAuctionOwner(); + + /// @notice If there are not enough tokens left to sell in the auction + error NotEnoughLeftInAuction(); + + + // ============================================================================== + // Events + // ============================================================================== + + /// @dev When an auction is exited by the owner + event AuctionExited(uint auctionNo); + + /// @dev When someone buys from an auction + event Buy(uint auctionNo, address buyToken, address sellToken, uint128 amountIn, uint128 amountOut); + + /// @dev When an auction is created + event AuctionCreated(uint auctionNo, address buyToken, address sellToken, uint128 sellAmount, uint128 startPrice, uint128 priceDecay, uint128 priceSlippage); + +} diff --git a/src/hardhat/contracts/Fraxbonds/interface/IFPIControllerPool.sol b/src/hardhat/contracts/Fraxbonds/interface/IFPIControllerPool.sol new file mode 100644 index 00000000..6469bdef --- /dev/null +++ b/src/hardhat/contracts/Fraxbonds/interface/IFPIControllerPool.sol @@ -0,0 +1,7 @@ +//SPDX-License-Identifier: Unlicense +pragma solidity ^0.8.4; + +interface IFPIControllerPool { + function redeemFPI(uint256 fpi_in, uint256 min_frax_out) external returns (uint256 frax_out); +} + diff --git a/src/hardhat/contracts/Fraxoracle/provider/ArbitrumBlockhashProvider.sol b/src/hardhat/contracts/Fraxoracle/provider/ArbitrumBlockhashProvider.sol index 61ea6944..e920d0cc 100644 --- a/src/hardhat/contracts/Fraxoracle/provider/ArbitrumBlockhashProvider.sol +++ b/src/hardhat/contracts/Fraxoracle/provider/ArbitrumBlockhashProvider.sol @@ -5,12 +5,19 @@ import "../interface/IBlockhashProvider.sol"; import "@arbitrum/nitro-contracts/src/libraries/AddressAliasHelper.sol"; contract ArbitrumBlockhashProvider is IBlockhashProvider { - address immutable public l1Source; + address public l1Source; + address immutable deployer; mapping(bytes32 => bool) storedHashes; event BlockhashReceived(bytes32 hash); - constructor(address _l1Source) { + constructor() { + deployer = msg.sender; + } + + function init(address _l1Source) external { + require (msg.sender==deployer); + require(l1Source==address(0)); l1Source = _l1Source; } diff --git a/src/hardhat/contracts/Fraxoracle/provider/TelepathyBlockhashProvider.sol b/src/hardhat/contracts/Fraxoracle/provider/TelepathyBlockhashProvider.sol index 8df8d0af..2c618266 100644 --- a/src/hardhat/contracts/Fraxoracle/provider/TelepathyBlockhashProvider.sol +++ b/src/hardhat/contracts/Fraxoracle/provider/TelepathyBlockhashProvider.sol @@ -5,7 +5,7 @@ import "../interface/IBlockhashProvider.sol"; contract TelepathyBlockhashProvider is IBlockhashProvider { address public l1Source; - address deployer; + address immutable deployer; address immutable public telepathyRouter; mapping(bytes32 => bool) storedHashes; diff --git a/src/hardhat/contracts/Misc_AMOs/convex/IConvexStakingWrapperFrax.sol b/src/hardhat/contracts/Misc_AMOs/convex/IConvexStakingWrapperFrax.sol index 0b71e800..9be9fa3a 100644 --- a/src/hardhat/contracts/Misc_AMOs/convex/IConvexStakingWrapperFrax.sol +++ b/src/hardhat/contracts/Misc_AMOs/convex/IConvexStakingWrapperFrax.sol @@ -2,48 +2,60 @@ pragma solidity >=0.8.0; interface IConvexStakingWrapperFrax { - function addRewards() external; - function allowance(address owner, address spender) external view returns (uint256); - function approve(address spender, uint256 amount) external returns (bool); - function balanceOf(address account) external view returns (uint256); - function collateralVault() external view returns (address); - function convexBooster() external view returns (address); - function convexPool() external view returns (address); - function convexPoolId() external view returns (uint256); - function convexToken() external view returns (address); - function crv() external view returns (address); - function curveToken() external view returns (address); - function cvx() external view returns (address); - function decimals() external view returns (uint8); - function decreaseAllowance(address spender, uint256 subtractedValue) external returns (bool); - function deposit(uint256 _amount, address _to) external; -// function earned(address _account) external view returns (tuple[] memory claimable); - function getReward(address _account, address _forwardTo) external; - function getReward(address _account) external; - function increaseAllowance(address spender, uint256 addedValue) external returns (bool); - function initialize(address _curveToken, address _convexToken, address _convexPool, uint256 _poolId, address _vault) external; - function isInit() external view returns (bool); - function isShutdown() external view returns (bool); - function name() external view returns (string memory); - function owner() external view returns (address); - function registeredRewards(address) external view returns (uint256); - function renounceOwnership() external; - function rewardLength() external view returns (uint256); - function rewards(uint256) external view returns (address reward_token, address reward_pool, uint128 reward_integral, uint128 reward_remaining); - function setApprovals() external; - function setVault(address _vault) external; - function shutdown() external; - function stake(uint256 _amount, address _to) external; - function symbol() external view returns (string memory); - function totalBalanceOf(address _account) external view returns (uint256); - function totalSupply() external view returns (uint256); - function transfer(address recipient, uint256 amount) external returns (bool); - function transferFrom(address sender, address recipient, uint256 amount) external returns (bool); - function transferOwnership(address newOwner) external; - function user_checkpoint(address _account) external returns (bool); - function user_checkpoint(address[2] memory _accounts) external returns (bool); - function withdraw(uint256 _amount) external; - function withdrawAndUnwrap(uint256 _amount) external; + function addRewards ( ) external; + function addTokenReward ( address _token ) external; + function allowance ( address owner, address spender ) external view returns ( uint256 ); + function approve ( address spender, uint256 amount ) external returns ( bool ); + function balanceOf ( address account ) external view returns ( uint256 ); + function collateralVault ( ) external view returns ( address ); + function convexBooster ( ) external view returns ( address ); + function convexPool ( ) external view returns ( address ); + function convexPoolId ( ) external view returns ( uint256 ); + function convexToken ( ) external view returns ( address ); + function crv ( ) external view returns ( address ); + function curveToken ( ) external view returns ( address ); + function cvx ( ) external view returns ( address ); + function decimals ( ) external view returns ( uint8 ); + function decreaseAllowance ( address spender, uint256 subtractedValue ) external returns ( bool ); + function deposit ( uint256 _amount, address _to ) external; + function distroContract ( ) external view returns ( address ); + function distroImplementation ( ) external view returns ( address ); + function distroSealed ( ) external view returns ( bool ); + function earmarkRewards ( ) external returns ( bool ); + function factory ( ) external view returns ( address ); + function getReward ( address _account, address _forwardTo ) external; + function getReward ( address _account ) external; + function increaseAllowance ( address spender, uint256 addedValue ) external returns ( bool ); + function initialize ( uint256 _poolId ) external; + function invalidateReward ( address _token ) external; + function isInit ( ) external view returns ( bool ); + function isShutdown ( ) external view returns ( bool ); + function name ( ) external view returns ( string memory ); + function owner ( ) external view returns ( address ); + function proxyFactory ( ) external view returns ( address ); + function registeredRewards ( address ) external view returns ( uint256 ); + function renounceOwnership ( ) external; + function rewardHook ( ) external view returns ( address ); + function rewardLength ( ) external view returns ( uint256 ); + function rewardRedirect ( address ) external view returns ( address ); + function rewards ( uint256 ) external view returns ( address reward_token, address reward_pool, uint256 reward_integral, uint256 reward_remaining ); + function sealDistributor ( ) external; + function setApprovals ( ) external; + function setDistributor ( address _distro ) external; + function setHook ( address _hook ) external; + function setRewardRedirect ( address _to ) external; + function setVault ( address _vault ) external; + function shutdown ( ) external; + function stake ( uint256 _amount, address _to ) external; + function symbol ( ) external view returns ( string memory ); + function totalBalanceOf ( address _account ) external view returns ( uint256 ); + function totalSupply ( ) external view returns ( uint256 ); + function transfer ( address recipient, uint256 amount ) external returns ( bool ); + function transferFrom ( address sender, address recipient, uint256 amount ) external returns ( bool ); + function transferOwnership ( address newOwner ) external; + function user_checkpoint ( address _account ) external returns ( bool ); + function withdraw ( uint256 _amount ) external; + function withdrawAndUnwrap ( uint256 _amount ) external; } diff --git a/src/hardhat/contracts/Misc_AMOs/curve/I2poolNoLending.sol b/src/hardhat/contracts/Misc_AMOs/curve/I2poolNoLending.sol new file mode 100644 index 00000000..72a20f60 --- /dev/null +++ b/src/hardhat/contracts/Misc_AMOs/curve/I2poolNoLending.sol @@ -0,0 +1,61 @@ +// SPDX-License-Identifier: GPL-2.0-or-later +pragma solidity >=0.8.0; + +interface I2poolTokenNoLending { + function initialize ( string memory _name, string memory _symbol, address[4] memory _coins, uint256[4] memory _rate_multipliers, uint256 _A, uint256 _fee ) external; + function decimals ( ) external view returns ( uint8 ); + function transfer ( address _to, uint256 _value ) external returns ( bool ); + function transferFrom ( address _from, address _to, uint256 _value ) external returns ( bool ); + function approve ( address _spender, uint256 _value ) external returns ( bool ); + function permit ( address _owner, address _spender, uint256 _value, uint256 _deadline, uint8 _v, bytes32 _r, bytes32 _s ) external returns ( bool ); + function last_price ( ) external view returns ( uint256 ); + function ema_price ( ) external view returns ( uint256 ); + function get_balances ( ) external view returns ( uint256[2] memory ); + function admin_fee ( ) external view returns ( uint256 ); + function A ( ) external view returns ( uint256 ); + function A_precise ( ) external view returns ( uint256 ); + function get_p ( ) external view returns ( uint256 ); + function price_oracle ( ) external view returns ( uint256 ); + function get_virtual_price ( ) external view returns ( uint256 ); + function calc_token_amount ( uint256[2] memory _amounts, bool _is_deposit ) external view returns ( uint256 ); + function add_liquidity ( uint256[2] memory _amounts, uint256 _min_mint_amount ) external returns ( uint256 ); + function add_liquidity ( uint256[2] memory _amounts, uint256 _min_mint_amount, address _receiver ) external returns ( uint256 ); + function get_dy ( int128 i, int128 j, uint256 dx ) external view returns ( uint256 ); + function get_dx ( int128 i, int128 j, uint256 dy ) external view returns ( uint256 ); + function exchange ( int128 i, int128 j, uint256 _dx, uint256 _min_dy ) external returns ( uint256 ); + function exchange ( int128 i, int128 j, uint256 _dx, uint256 _min_dy, address _receiver ) external returns ( uint256 ); + function remove_liquidity ( uint256 _burn_amount, uint256[2] memory _min_amounts ) external returns ( uint256[2] memory ); + function remove_liquidity ( uint256 _burn_amount, uint256[2] memory _min_amounts, address _receiver ) external returns ( uint256[2] memory ); + function remove_liquidity_imbalance ( uint256[2] memory _amounts, uint256 _max_burn_amount ) external returns ( uint256 ); + function remove_liquidity_imbalance ( uint256[2] memory _amounts, uint256 _max_burn_amount, address _receiver ) external returns ( uint256 ); + function calc_withdraw_one_coin ( uint256 _burn_amount, int128 i ) external view returns ( uint256 ); + function remove_liquidity_one_coin ( uint256 _burn_amount, int128 i, uint256 _min_received ) external returns ( uint256 ); + function remove_liquidity_one_coin ( uint256 _burn_amount, int128 i, uint256 _min_received, address _receiver ) external returns ( uint256 ); + function ramp_A ( uint256 _future_A, uint256 _future_time ) external; + function stop_ramp_A ( ) external; + function set_ma_exp_time ( uint256 _ma_exp_time ) external; + function admin_balances ( uint256 i ) external view returns ( uint256 ); + function commit_new_fee ( uint256 _new_fee ) external; + function apply_new_fee ( ) external; + function withdraw_admin_fees ( ) external; + function version ( ) external pure returns ( string memory ); + function factory ( ) external view returns ( address ); + function coins ( uint256 arg0 ) external view returns ( address ); + function balances ( uint256 arg0 ) external view returns ( uint256 ); + function fee ( ) external view returns ( uint256 ); + function future_fee ( ) external view returns ( uint256 ); + function admin_action_deadline ( ) external view returns ( uint256 ); + function initial_A ( ) external view returns ( uint256 ); + function future_A ( ) external view returns ( uint256 ); + function initial_A_time ( ) external view returns ( uint256 ); + function future_A_time ( ) external view returns ( uint256 ); + function name ( ) external view returns ( string memory ); + function symbol ( ) external view returns ( string memory ); + function balanceOf ( address arg0 ) external view returns ( uint256 ); + function allowance ( address arg0, address arg1 ) external view returns ( uint256 ); + function totalSupply ( ) external view returns ( uint256 ); + function DOMAIN_SEPARATOR ( ) external view returns ( bytes32 ); + function nonces ( address arg0 ) external view returns ( uint256 ); + function ma_exp_time ( ) external view returns ( uint256 ); + function ma_last_time ( ) external view returns ( uint256 ); +} diff --git a/src/hardhat/contracts/Misc_AMOs/kyberswap/elastic/IKSElasticLMV2.sol b/src/hardhat/contracts/Misc_AMOs/kyberswap/elastic/IKSElasticLMV2.sol new file mode 100644 index 00000000..621a9f67 --- /dev/null +++ b/src/hardhat/contracts/Misc_AMOs/kyberswap/elastic/IKSElasticLMV2.sol @@ -0,0 +1,87 @@ +// SPDX-License-Identifier: GPL-2.0-or-later +pragma solidity >=0.8.0; + +interface IKSElasticLMV2 { + struct RangeInput { + int24 tickLower; + int24 tickUpper; + uint32 weight; + } + + struct RewardInput { + address rewardToken; + uint256 rewardAmount; + } + + struct PhaseInput { + uint32 startTime; + uint32 endTime; + RewardInput[] rewards; + } + + struct RemoveLiquidityInput { + uint256 nftId; + uint128 liquidity; + } + + struct RangeInfo { + int24 tickLower; + int24 tickUpper; + uint32 weight; + bool isRemoved; + } + + struct PhaseInfo { + uint32 startTime; + uint32 endTime; + bool isSettled; + RewardInput[] rewards; + } + + struct FarmInfo { + address poolAddress; + RangeInfo[] ranges; + PhaseInfo phase; + uint256 liquidity; + address farmingToken; + uint256[] sumRewardPerLiquidity; + uint32 lastTouchedTime; + } + + struct StakeInfo { + address owner; + uint256 fId; + uint256 rangeId; + uint256 liquidity; + uint256[] lastSumRewardPerLiquidity; + uint256[] rewardUnclaimed; + } + + function addFarm ( address poolAddress, RangeInput[] memory ranges, PhaseInput memory phase, bool isUsingToken ) external returns ( uint256 fId ); + function addLiquidity ( uint256 fId, uint256 rangeId, uint256[] memory nftIds ) external; + function addPhase ( uint256 fId, PhaseInput memory phaseInput ) external; + function addRange ( uint256 fId, RangeInput memory range ) external; + function admin ( ) external view returns ( address ); + function claimFee ( uint256 fId, uint256[] memory nftIds, uint256 amount0Min, uint256 amount1Min, uint256 deadline, bool isReceiveNative ) external; + function claimReward ( uint256 fId, uint256[] memory nftIds ) external; + function deposit ( uint256 fId, uint256 rangeId, uint256[] memory nftIds, address receiver ) external; + function emergencyEnabled ( ) external view returns ( bool ); + function farmCount ( ) external view returns ( uint256 ); + function forceClosePhase ( uint256 fId ) external; + function getDepositedNFTs ( address user ) external view returns ( uint256[] memory listNFTs ); + function getFarm ( uint256 fId ) external view returns ( address poolAddress, RangeInput[] memory ranges, PhaseInput memory phase, uint256 liquidity, address farmingToken, uint256[] memory sumRewardPerLiquidity, uint32 lastTouchedTime ); + function getNft ( ) external view returns ( address ); + function getStake ( uint256 nftId ) external view returns ( address owner, uint256 fId, uint256 rangeId, uint256 liquidity, uint256[] memory lastSumRewardPerLiquidity, uint256[] memory rewardUnclaimed ); + function operators ( address ) external view returns ( bool ); + function removeLiquidity ( uint256 nftId, uint128 liquidity, uint256 amount0Min, uint256 amount1Min, uint256 deadline, bool isClaimFee, bool isReceiveNative ) external; + function removeRange ( uint256 fId, uint256 rangeId ) external; + function transferAdmin ( address _admin ) external; + function updateEmergency ( bool enableOrDisable ) external; + function updateHelper ( address _helper ) external; + function updateOperator ( address user, bool grantOrRevoke ) external; + function updateTokenCode ( bytes memory _farmingTokenCreationCode ) external; + function weth ( ) external view returns ( address ); + function withdraw ( uint256 fId, uint256[] memory nftIds ) external; + function withdrawEmergency ( uint256[] memory nftIds ) external; + function withdrawUnusedRewards ( address[] memory tokens, uint256[] memory amounts ) external; +} diff --git a/src/hardhat/contracts/Misc_AMOs/kyberswap/elastic/IKSReinvestmentTokenPool.sol b/src/hardhat/contracts/Misc_AMOs/kyberswap/elastic/IKSReinvestmentTokenPool.sol new file mode 100644 index 00000000..4b68e0c0 --- /dev/null +++ b/src/hardhat/contracts/Misc_AMOs/kyberswap/elastic/IKSReinvestmentTokenPool.sol @@ -0,0 +1,39 @@ +// SPDX-License-Identifier: GPL-2.0-or-later +pragma solidity >=0.8.0; + + +interface IKSReinvestmentTokenPool { + function allowance ( address owner, address spender ) external view returns ( uint256 ); + function approve ( address spender, uint256 amount ) external returns ( bool ); + function balanceOf ( address account ) external view returns ( uint256 ); + function burn ( int24 tickLower, int24 tickUpper, uint128 qty ) external returns ( uint256 qty0, uint256 qty1, uint256 feeGrowthInsideLast ); + function burnRTokens ( uint256 _qty, bool isLogicalBurn ) external returns ( uint256 qty0, uint256 qty1 ); + function decimals ( ) external view returns ( uint8 ); + function decreaseAllowance ( address spender, uint256 subtractedValue ) external returns ( bool ); + function factory ( ) external view returns ( address ); + function flash ( address recipient, uint256 qty0, uint256 qty1, bytes memory data ) external; + function getFeeGrowthGlobal ( ) external view returns ( uint256 ); + function getLiquidityState ( ) external view returns ( uint128 baseL, uint128 reinvestL, uint128 reinvestLLast ); + function getPoolState ( ) external view returns ( uint160 sqrtP, int24 currentTick, int24 nearestCurrentTick, bool locked ); + function getPositions ( address owner, int24 tickLower, int24 tickUpper ) external view returns ( uint128 liquidity, uint256 feeGrowthInsideLast ); + function getSecondsPerLiquidityData ( ) external view returns ( uint128 secondsPerLiquidityGlobal, uint32 lastUpdateTime ); + function getSecondsPerLiquidityInside ( int24 tickLower, int24 tickUpper ) external view returns ( uint128 secondsPerLiquidityInside ); + function increaseAllowance ( address spender, uint256 addedValue ) external returns ( bool ); + function initializedTicks ( int24 ) external view returns ( int24 previous, int24 next ); + function maxTickLiquidity ( ) external view returns ( uint128 ); + function mint ( address recipient, int24 tickLower, int24 tickUpper, int24[2] memory ticksPrevious, uint128 qty, bytes memory data ) external returns ( uint256 qty0, uint256 qty1, uint256 feeGrowthInsideLast ); + function name ( ) external view returns ( string memory ); + function poolOracle ( ) external view returns ( address ); + function swap ( address recipient, int256 swapQty, bool isToken0, uint160 limitSqrtP, bytes memory data ) external returns ( int256 deltaQty0, int256 deltaQty1 ); + function swapFeeUnits ( ) external view returns ( uint24 ); + function symbol ( ) external view returns ( string memory ); + function tickDistance ( ) external view returns ( int24 ); + function ticks ( int24 ) external view returns ( uint128 liquidityGross, int128 liquidityNet, uint256 feeGrowthOutside, uint128 secondsPerLiquidityOutside ); + function token0 ( ) external view returns ( address ); + function token1 ( ) external view returns ( address ); + function totalSupply ( ) external view returns ( uint256 ); + function transfer ( address recipient, uint256 amount ) external returns ( bool ); + function transferFrom ( address sender, address recipient, uint256 amount ) external returns ( bool ); + function tweakPosZeroLiq ( int24 tickLower, int24 tickUpper ) external returns ( uint256 feeGrowthInsideLast ); + function unlockPool ( uint160 initialSqrtP ) external returns ( uint256 qty0, uint256 qty1 ); +} diff --git a/src/hardhat/contracts/Misc_AMOs/kyberswap/elastic/IKyberSwapFarmingToken.sol b/src/hardhat/contracts/Misc_AMOs/kyberswap/elastic/IKyberSwapFarmingToken.sol new file mode 100644 index 00000000..b69b1cae --- /dev/null +++ b/src/hardhat/contracts/Misc_AMOs/kyberswap/elastic/IKyberSwapFarmingToken.sol @@ -0,0 +1,24 @@ +// SPDX-License-Identifier: GPL-2.0-or-later +pragma solidity >=0.8.0; + +interface IKyberSwapFarmingToken { + function DOMAIN_SEPARATOR ( ) external view returns ( bytes32 ); + function allowance ( address owner, address spender ) external view returns ( uint256 ); + function approve ( address spender, uint256 amount ) external returns ( bool ); + function balanceOf ( address account ) external view returns ( uint256 ); + function burn ( uint256 amount ) external; + function burn ( address account, uint256 amount ) external; + function burnFrom ( address account, uint256 amount ) external; + function decimals ( ) external view returns ( uint8 ); + function decreaseAllowance ( address spender, uint256 subtractedValue ) external returns ( bool ); + function increaseAllowance ( address spender, uint256 addedValue ) external returns ( bool ); + function mint ( address account, uint256 amount ) external; + function name ( ) external view returns ( string memory ); + function nonces ( address owner ) external view returns ( uint256 ); + function operator ( ) external view returns ( address ); + function permit ( address owner, address spender, uint256 value, uint256 deadline, uint8 v, bytes32 r, bytes32 s ) external; + function symbol ( ) external view returns ( string memory ); + function totalSupply ( ) external view returns ( uint256 ); + function transfer ( address recipient, uint256 amount ) external returns ( bool ); + function transferFrom ( address sender, address recipient, uint256 amount ) external returns ( bool ); +} diff --git a/src/hardhat/contracts/Staking/FraxCrossChainFarmV3_ERC20.sol b/src/hardhat/contracts/Staking/FraxCrossChainFarmV3_ERC20.sol index bb5bfac3..840b6bb6 100755 --- a/src/hardhat/contracts/Staking/FraxCrossChainFarmV3_ERC20.sol +++ b/src/hardhat/contracts/Staking/FraxCrossChainFarmV3_ERC20.sol @@ -41,14 +41,16 @@ import "../ERC20/ERC20.sol"; import '../Uniswap/TransferHelper.sol'; import "../ERC20/SafeERC20.sol"; -import '../Misc_AMOs/balancer/IBalancerVault.sol'; // Balancer frxETH-bb-a-WETH Gauge -import '../Misc_AMOs/balancer/IBalancerChildLiquidityGauge.sol'; // Balancer frxETH-bb-a-WETH Gauge -import '../Misc_AMOs/balancer/IL2BalancerPseudoMinter.sol'; // Balancer frxETH-bb-a-WETH Gauge -import '../Misc_AMOs/balancer/IStablePool.sol'; // Balancer frxETH-bb-a-WETH Gauge -import "../Oracle/AggregatorV3Interface.sol"; // Balancer frxETH-bb-a-WETH Gauge - +// import '../Misc_AMOs/balancer/IBalancerVault.sol'; // Balancer frxETH-bb-a-WETH Gauge +// import '../Misc_AMOs/balancer/IBalancerChildLiquidityGauge.sol'; // Balancer frxETH-bb-a-WETH Gauge +// import '../Misc_AMOs/balancer/IL2BalancerPseudoMinter.sol'; // Balancer frxETH-bb-a-WETH Gauge +// import '../Misc_AMOs/balancer/IStablePool.sol'; // Balancer frxETH-bb-a-WETH Gauge +// import "../Oracle/AggregatorV3Interface.sol"; // Balancer frxETH-bb-a-WETH Gauge // import '../Misc_AMOs/curve/I2pool.sol'; // Curve 2-token // import '../Misc_AMOs/curve/I3pool.sol'; // Curve 3-token +import '../Misc_AMOs/kyberswap/elastic/IKSElasticLMV2.sol'; // KyberSwap Elastic +import '../Misc_AMOs/kyberswap/elastic/IKyberSwapFarmingToken.sol'; // KyberSwap Elastic +import '../Misc_AMOs/kyberswap/elastic/IKSReinvestmentTokenPool.sol'; // KyberSwap Elastic // import '../Misc_AMOs/mstable/IFeederPool.sol'; // mStable // import '../Misc_AMOs/impossible/IStableXPair.sol'; // Impossible // import '../Misc_AMOs/mstable/IFeederPool.sol'; // mStable @@ -75,20 +77,24 @@ contract FraxCrossChainFarmV3_ERC20 is Owned, ReentrancyGuard { CrossChainCanonicalFXS public rewardsToken0; // Assumed to be canFXS ERC20 public rewardsToken1; - IBalancerChildLiquidityGauge public stakingToken; // Balancer frxETH-bb-a-WETH Gauge - AggregatorV3Interface internal priceFeedETHUSD = AggregatorV3Interface(0xF9680D99D6C9589e2a93a78A04A279e509205945); // For Balancer frxETH-bb-a-WETH Gauge - function setETHUSDOracle(address _eth_usd_oracle_address) public onlyByOwnGov { - require(_eth_usd_oracle_address != address(0), "Zero address detected"); - - priceFeedETHUSD = AggregatorV3Interface(_eth_usd_oracle_address); - } - function getLatestETHPriceE8() public view returns (int) { - // Returns in E8 - (uint80 roundID, int price, , uint256 updatedAt, uint80 answeredInRound) = priceFeedETHUSD.latestRoundData(); - require(price >= 0 && updatedAt!= 0 && answeredInRound >= roundID, "Invalid chainlink price"); + // KyberSwap Elastic + IKyberSwapFarmingToken public stakingToken; // KyberSwap Elastic + + // Balancer frxETH-bb-a-WETH Gauge + // IBalancerChildLiquidityGauge public stakingToken; // Balancer frxETH-bb-a-WETH Gauge + // AggregatorV3Interface internal priceFeedETHUSD = AggregatorV3Interface(0xF9680D99D6C9589e2a93a78A04A279e509205945); // For Balancer frxETH-bb-a-WETH Gauge + // function setETHUSDOracle(address _eth_usd_oracle_address) public onlyByOwnGov { + // require(_eth_usd_oracle_address != address(0), "Zero address detected"); + + // priceFeedETHUSD = AggregatorV3Interface(_eth_usd_oracle_address); + // } + // function getLatestETHPriceE8() public view returns (int) { + // // Returns in E8 + // (uint80 roundID, int price, , uint256 updatedAt, uint80 answeredInRound) = priceFeedETHUSD.latestRoundData(); + // require(price >= 0 && updatedAt!= 0 && answeredInRound >= roundID, "Invalid chainlink price"); - return price; - } + // return price; + // } // I2pool public stakingToken; // Curve 2-token // I3pool public stakingToken; // Curve 3-token @@ -225,7 +231,7 @@ contract FraxCrossChainFarmV3_ERC20 is Owned, ReentrancyGuard { rewardsToken0 = CrossChainCanonicalFXS(_rewardsToken0); rewardsToken1 = ERC20(_rewardsToken1); - stakingToken = IBalancerChildLiquidityGauge(_stakingToken); // Balancer frxETH-bb-a-WETH Gauge + // stakingToken = IBalancerChildLiquidityGauge(_stakingToken); // Balancer frxETH-bb-a-WETH Gauge // stakingToken = I2pool(_stakingToken); // stakingToken = I3pool(_stakingToken); // stakingToken = IStableXPair(_stakingToken); @@ -234,6 +240,7 @@ contract FraxCrossChainFarmV3_ERC20 is Owned, ReentrancyGuard { // stakingToken = ILToken(_stakingToken); // stakingToken = ILPToken(_stakingToken); // stakingToken = IUniswapV2Pair(_stakingToken); + stakingToken = IKyberSwapFarmingToken(_stakingToken); // KyberSwap Elastic timelock_address = _timelock_address; rewarder = FraxCrossChainRewarder(_rewarder_address); @@ -304,18 +311,18 @@ contract FraxCrossChainFarmV3_ERC20 is Owned, ReentrancyGuard { // Balancer frxETH-bb-a-WETH Gauge // ============================================ - { - IBalancerVault vault = IBalancerVault(0xBA12222222228d8Ba445958a75a0704d566BF2C8); - /** - * `cash` is the number of tokens the Vault currently holds for the Pool. `managed` is the number of tokens - * withdrawn and held outside the Vault by the Pool's token Asset Manager. The Pool's total balance for `token` - * equals the sum of `cash` and `managed`. - */ + // { + // IBalancerVault vault = IBalancerVault(0xBA12222222228d8Ba445958a75a0704d566BF2C8); + // /** + // * `cash` is the number of tokens the Vault currently holds for the Pool. `managed` is the number of tokens + // * withdrawn and held outside the Vault by the Pool's token Asset Manager. The Pool's total balance for `token` + // * equals the sum of `cash` and `managed`. + // */ - (uint256 cash, uint256 managed, , ) = vault.getPoolTokenInfo(0xd00f9ca46ce0e4a63067c4657986f0167b0de1e5000000000000000000000b42, 0xEe327F889d5947c1dc1934Bb208a1E792F953E96); - uint256 frxETH_usd_val_per_lp_e8 = ((cash + managed) * uint256(getLatestETHPriceE8())) / stakingToken.totalSupply(); - frax_per_lp_token = frxETH_usd_val_per_lp_e8 * (1e10); // We use USD as "Frax" here. Scale up to E18 - } + // (uint256 cash, uint256 managed, , ) = vault.getPoolTokenInfo(0xd00f9ca46ce0e4a63067c4657986f0167b0de1e5000000000000000000000b42, 0xEe327F889d5947c1dc1934Bb208a1E792F953E96); + // uint256 frxETH_usd_val_per_lp_e8 = ((cash + managed) * uint256(getLatestETHPriceE8())) / stakingToken.totalSupply(); + // frax_per_lp_token = frxETH_usd_val_per_lp_e8 * (1e10); // We use USD as "Frax" here. Scale up to E18 + // } // Curve 2-token // ============================================ @@ -349,6 +356,32 @@ contract FraxCrossChainFarmV3_ERC20 is Owned, ReentrancyGuard { // frax_per_lp_token = total_frax_reserves.mul(1e18).div(stakingToken.totalSupply()); // } + // KyberSwap Elastic + // ============================================ + // { + // IKSReinvestmentTokenPool memory pool = IKSReinvestmentTokenPool(0xA852DDD69C13d42669840A692f6bBf94245ac54A); + // address coin0 = pool.token0(); + // address coin1 = pool.token1(); + // uint256 total_frax_reserves; + // if (coin0 == frax_address) { + // total_frax_reserves = ERC20(coin0).balanceOf(address(pool)); + // } + // // INCOMPLETE + // // INCOMPLETE + // // INCOMPLETE + // // INCOMPLETE + // // INCOMPLETE + // // INCOMPLETE + // // INCOMPLETE + // else { + // total_frax_reserves = ERC20(coin1).balanceOf(address(pool)); + // } + // frax_per_lp_token = total_frax_reserves.mul(1e18).div(stakingToken.totalSupply()); + + // // INCOMPLETE + + // } + // mStable // ============================================ // { @@ -824,7 +857,8 @@ contract FraxCrossChainFarmV3_ERC20 is Owned, ReentrancyGuard { // Pull in reward1 tokens, if possible if (address(rewardsToken1) != address(0)) { - IL2BalancerPseudoMinter(0x47B489bf5836f83ABD928C316F8e39bC0587B020).mint(address(stakingToken)); + // Balancer + // IL2BalancerPseudoMinter(0x47B489bf5836f83ABD928C316F8e39bC0587B020).mint(address(stakingToken)); } lastRewardPull = block.timestamp; diff --git a/src/hardhat/contracts/Staking/FraxFarmRageQuitter_Gelato_FRAX_DAI.sol b/src/hardhat/contracts/Staking/FraxFarmRageQuitter_Gelato_FRAX_DAI.sol new file mode 100644 index 00000000..edc7ac87 --- /dev/null +++ b/src/hardhat/contracts/Staking/FraxFarmRageQuitter_Gelato_FRAX_DAI.sol @@ -0,0 +1,108 @@ +// SPDX-License-Identifier: GPL-2.0-or-later +pragma solidity >=0.8.0; + +// ==================================================================== +// | ______ _______ | +// | / _____________ __ __ / ____(_____ ____ _____ ________ | +// | / /_ / ___/ __ `| |/_/ / /_ / / __ \/ __ `/ __ \/ ___/ _ \ | +// | / __/ / / / /_/ _> < / __/ / / / / / /_/ / / / / /__/ __/ | +// | /_/ /_/ \__,_/_/|_| /_/ /_/_/ /_/\__,_/_/ /_/\___/\___/ | +// | | +// ==================================================================== +// =============== FraxFarmRageQuitter_Gelato_FRAX_DAI =============== +// ==================================================================== +// Exits a Frax farm early, with a penalty. Deployed on a case-by-case basis + +// Frax Finance: https://github.com/FraxFinance + +// Primary Author(s) +// Dennis: https://github.com/denett + +// Reviewer(s) / Contributor(s) +// Travis Moore: https://github.com/FortisFortuna + +import "@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol"; +import "@openzeppelin/contracts/token/ERC20/IERC20.sol"; + +import "../Utils/ReentrancyGuard.sol"; + +contract FraxFarmRageQuitter_Gelato_FRAX_DAI is ReentrancyGuard { + IFarm public farm = IFarm(0xcdfc491804A420b677f8e788B5157856910E2F6f); + IERC20 lp_token = IERC20(0xb1Cfdc7370550f5e421E1bf0BF3CADFaDF3C4141); + address fraxTreasuryAddress = 0xB1748C79709f4Ba2Dd82834B8c82D4a505003f27; + uint256 treasuryPercentage = 2000; // 20%; + + // Rewards tokens + IERC20 fxsToken = IERC20(0x3432B6A60D23Ca0dFCa7761B7ab56459D9C964D0); + IERC20 gelToken = IERC20(0x15b7c0c907e4C6b9AdaAaabC300C08991D6CEA05); + + // NOTE + // Make sure to enable this contract as a migrator first on the target farm + + /// @notice Exits stake for a specific kek_id + function ragequitOne(bytes32 _kek_id) nonReentrant external { + uint256 _liquidity; + + // Get all locked stake of the user + IFarm.LockedStake[] memory lockedStakes = farm.lockedStakesOf(msg.sender); + + // Find stake with the correct kek_id + for (uint256 i; i < lockedStakes.length; i++) { + if (lockedStakes[i].kek_id == _kek_id) { + _liquidity = lockedStakes[i].liquidity; + break; + } + } + require(_liquidity > 0, "Stake not found"); + + // Unlock the stake and transfer the LP tokens to this contract + farm.migrator_withdraw_locked(msg.sender, _kek_id); + + // Split the LP tokens between the Frax treasury and the user + uint256 liquidityToTreasury = (_liquidity * treasuryPercentage) / 10000; + SafeERC20.safeTransfer(lp_token, fraxTreasuryAddress, liquidityToTreasury); + SafeERC20.safeTransfer(lp_token, msg.sender, _liquidity - liquidityToTreasury); + + // All rewards collected during the migration are sent to the user. + SafeERC20.safeTransfer(fxsToken, msg.sender, fxsToken.balanceOf(address(this))); + SafeERC20.safeTransfer(gelToken, msg.sender, gelToken.balanceOf(address(this))); + } + + /// @notice Exits all stakes + function ragequitAll() nonReentrant external { + uint256 _totalLiquidity; + + // Get all locked stake of the user + IFarm.LockedStake[] memory lockedStakes = farm.lockedStakesOf(msg.sender); + + for (uint256 i; i < lockedStakes.length; i++) { + uint256 _liquidity = lockedStakes[i].liquidity; + if (_liquidity > 0) { + farm.migrator_withdraw_locked(msg.sender, lockedStakes[i].kek_id); // Unlock the stake and transfer the LP tokens to this contract + _totalLiquidity += _liquidity; + } + } + require(_totalLiquidity > 0, "Nothing to unlock"); + + // Split the LP tokens between the Frax treasury and the user + uint256 liquidityToTreasury = (_totalLiquidity * treasuryPercentage) / 10000; + SafeERC20.safeTransfer(lp_token, fraxTreasuryAddress, liquidityToTreasury); + SafeERC20.safeTransfer(lp_token, msg.sender, _totalLiquidity - liquidityToTreasury); + + // All reward tokens collected during the migration are send to the user. + SafeERC20.safeTransfer(fxsToken,msg.sender,fxsToken.balanceOf(address(this))); + SafeERC20.safeTransfer(gelToken,msg.sender,gelToken.balanceOf(address(this))); + } +} + +interface IFarm{ + struct LockedStake { + bytes32 kek_id; + uint256 start_timestamp; + uint256 liquidity; + uint256 ending_timestamp; + uint256 lock_multiplier; + } + function migrator_withdraw_locked(address, bytes32) external; + function lockedStakesOf(address) external view returns(LockedStake[] memory); +} \ No newline at end of file diff --git a/src/hardhat/contracts/Staking/FraxUnifiedFarmTemplate.sol b/src/hardhat/contracts/Staking/FraxUnifiedFarmTemplate.sol index 4a70644e..86e96772 100755 --- a/src/hardhat/contracts/Staking/FraxUnifiedFarmTemplate.sol +++ b/src/hardhat/contracts/Staking/FraxUnifiedFarmTemplate.sol @@ -82,7 +82,7 @@ contract FraxUnifiedFarmTemplate is Owned, ReentrancyGuard { uint256 public lock_max_multiplier = uint256(2e18); // E18. 1x = e18 uint256 public lock_time_for_max_multiplier = 1 * 1095 * 86400; // 3 years // uint256 public lock_time_for_max_multiplier = 2 * 86400; // 2 days - uint256 public lock_time_min = 594000; // 6.875 * 86400 (~7 day) + uint256 public lock_time_min = 0; // 0 sec // veFXS related uint256 public vefxs_boost_scale_factor = uint256(4e18); // E18. 4x = 4e18; 100 / scale_factor = % vefxs supply needed for max boost @@ -802,8 +802,8 @@ contract FraxUnifiedFarmTemplate is Owned, ReentrancyGuard { // [5] uint256 _lock_time_min ) external onlyByOwnGov { require(_misc_vars[0] >= MULTIPLIER_PRECISION, "Must be >= MUL PREC"); - require((_misc_vars[1] >= 0) && (_misc_vars[2] >= 0) && (_misc_vars[3] >= 0), "Must be >= 0"); - require((_misc_vars[4] >= 1) && (_misc_vars[5] >= 1), "Must be >= 1"); + require((_misc_vars[1] >= 0) && (_misc_vars[2] >= 0) && (_misc_vars[3] >= 0) && (_misc_vars[5] >= 0), "Must be >= 0"); + require((_misc_vars[4] >= 1), "Must be >= 1"); lock_max_multiplier = _misc_vars[0]; vefxs_max_multiplier = _misc_vars[1]; diff --git a/src/hardhat/contracts/Staking/FraxUnifiedFarm_ERC20.sol b/src/hardhat/contracts/Staking/FraxUnifiedFarm_ERC20.sol index 4ca87ba3..a9778996 100755 --- a/src/hardhat/contracts/Staking/FraxUnifiedFarm_ERC20.sol +++ b/src/hardhat/contracts/Staking/FraxUnifiedFarm_ERC20.sol @@ -19,14 +19,15 @@ import "./FraxUnifiedFarmTemplate.sol"; // -------------------- VARIES -------------------- // Bunni -import "../Misc_AMOs/bunni/IBunniGauge.sol"; +// import "../Misc_AMOs/bunni/IBunniGauge.sol"; // Convex wrappers -import "../Curve/ICurvefrxETHETHPool.sol"; -import "../Misc_AMOs/convex/IConvexStakingWrapperFrax.sol"; -import "../Misc_AMOs/convex/IDepositToken.sol"; -import "../Misc_AMOs/curve/I2pool.sol"; -import "../Misc_AMOs/curve/I2poolToken.sol"; +// import "../Curve/ICurvefrxETHETHPool.sol"; +// import "../Misc_AMOs/convex/IConvexStakingWrapperFrax.sol"; +// import "../Misc_AMOs/convex/IDepositToken.sol"; +// import "../Misc_AMOs/curve/I2pool.sol"; +// import "../Misc_AMOs/curve/I2poolToken.sol"; +// import "../Misc_AMOs/curve/I2poolTokenNoLending.sol"; // Fraxlend // import '../Fraxlend/IFraxlendPair.sol'; @@ -37,6 +38,9 @@ import "../Misc_AMOs/curve/I2poolToken.sol"; // G-UNI // import "../Misc_AMOs/gelato/IGUniPool.sol"; +// KyberSwap Elastic KyberSwapFarmingToken (KS-FT) +import "../Misc_AMOs/kyberswap/elastic/IKyberSwapFarmingToken.sol"; + // mStable // import '../Misc_AMOs/mstable/IFeederPool.sol'; @@ -63,10 +67,15 @@ contract FraxUnifiedFarm_ERC20 is FraxUnifiedFarmTemplate { // -------------------- VARIES -------------------- + // Convex crvUSD/FRAX + // IConvexStakingWrapperFrax public stakingToken; + // I2poolTokenNoLending public curveToken; + // ICurvefrxETHETHPool public curvePool; + // Convex stkcvxFPIFRAX, stkcvxFRAXBP, etc - IConvexStakingWrapperFrax public stakingToken; - I2poolToken public curveToken; - I2pool public curvePool; + // IConvexStakingWrapperFrax public stakingToken; + // I2poolToken public curveToken; + // I2pool public curvePool; // ICurvefrxETHETHPool public curvePool; // Fraxswap @@ -77,6 +86,9 @@ contract FraxUnifiedFarm_ERC20 is FraxUnifiedFarmTemplate { // G-UNI // IGUniPool public stakingToken; + + // KyberSwap Elastic KyberSwapFarmingToken (KS-FT) + IKyberSwapFarmingToken public stakingToken; // mStable // IFeederPool public stakingToken; @@ -142,6 +154,9 @@ contract FraxUnifiedFarm_ERC20 is FraxUnifiedFarmTemplate { // address token0 = address(stakingToken.token0()); // frax_is_token0 = (token0 == frax_address); + // KyberSwap Elastic KyberSwapFarmingToken (KS-FT) + stakingToken = IKyberSwapFarmingToken(_stakingToken); + // mStable // stakingToken = IFeederPool(_stakingToken); @@ -202,6 +217,10 @@ contract FraxUnifiedFarm_ERC20 is FraxUnifiedFarmTemplate { // frax_per_lp_token = (total_frax_reserves * 1e18) / stakingToken.totalSupply(); // } + // KyberSwap Elastic KyberSwapFarmingToken (KS-FT) + // ============================================ + // USE CHILD + // mStable // ============================================ // { diff --git a/src/hardhat/contracts/Staking/Variants/FraxUnifiedFarm_ERC20_Convex_FRAXBP_Stable.sol b/src/hardhat/contracts/Staking/Variants/FraxUnifiedFarm_ERC20_Convex_FRAXBP_Stable.sol index 2f396d70..306c9eca 100755 --- a/src/hardhat/contracts/Staking/Variants/FraxUnifiedFarm_ERC20_Convex_FRAXBP_Stable.sol +++ b/src/hardhat/contracts/Staking/Variants/FraxUnifiedFarm_ERC20_Convex_FRAXBP_Stable.sol @@ -22,23 +22,23 @@ contract FraxUnifiedFarm_ERC20_Convex_FRAXBP_Stable is FraxUnifiedFarm_ERC20 { { // COMMENTED OUT SO COMPILER DOESNT COMPLAIN. UNCOMMENT WHEN DEPLOYING - // Convex stkcvxBUSDBP and other metaFRAXBPs, where the token is also the pool (Convex Stable/FRAXBP) - stakingToken = IConvexStakingWrapperFrax(_stakingToken); - curveToken = I2poolToken(stakingToken.curveToken()); - curvePool = I2pool(address(curveToken)); - frax_is_token0 = false; // Irrelevant here, as token 0 will be FRAXBP + // // Convex stkcvxBUSDBP and other metaFRAXBPs, where the token is also the pool (Convex Stable/FRAXBP) + // stakingToken = IConvexStakingWrapperFrax(_stakingToken); + // curveToken = I2poolToken(stakingToken.curveToken()); + // curvePool = I2pool(address(curveToken)); + // frax_is_token0 = false; // Irrelevant here, as token 0 will be FRAXBP } function fraxPerLPToken() public view override returns (uint256 frax_per_lp_token) { // COMMENTED OUT SO COMPILER DOESNT COMPLAIN. UNCOMMENT WHEN DEPLOYING - // Convex Stable/FRAXBP - // ============================================ - { - // Half of the LP is FRAXBP. Half of that should be FRAX. - // Using 0.25 * virtual price for gas savings - frax_per_lp_token = curvePool.get_virtual_price() / 4; - } + // // Convex Stable/FRAXBP + // // ============================================ + // { + // // Half of the LP is FRAXBP. Half of that should be FRAX. + // // Using 0.25 * virtual price for gas savings + // frax_per_lp_token = curvePool.get_virtual_price() / 4; + // } } } diff --git a/src/hardhat/contracts/Staking/Variants/FraxUnifiedFarm_ERC20_Convex_FRAXBP_Volatile.sol b/src/hardhat/contracts/Staking/Variants/FraxUnifiedFarm_ERC20_Convex_FRAXBP_Volatile.sol index 80651599..f63df3e0 100755 --- a/src/hardhat/contracts/Staking/Variants/FraxUnifiedFarm_ERC20_Convex_FRAXBP_Volatile.sol +++ b/src/hardhat/contracts/Staking/Variants/FraxUnifiedFarm_ERC20_Convex_FRAXBP_Volatile.sol @@ -22,24 +22,24 @@ contract FraxUnifiedFarm_ERC20_Convex_FRAXBP_Volatile is FraxUnifiedFarm_ERC20 { { // COMMENTED OUT SO COMPILER DOESNT COMPLAIN. UNCOMMENT WHEN DEPLOYING - // Convex stkcvxFPIFRAX and stkcvxFRAXBP. Also Volatile/FRAXBP - stakingToken = IConvexStakingWrapperFrax(_stakingToken); - curveToken = I2poolToken(stakingToken.curveToken()); - curvePool = I2pool(curveToken.minter()); - address token0 = curvePool.coins(0); - frax_is_token0 = (token0 == frax_address); + // // Convex stkcvxFPIFRAX and stkcvxFRAXBP. Also Volatile/FRAXBP + // stakingToken = IConvexStakingWrapperFrax(_stakingToken); + // curveToken = I2poolToken(stakingToken.curveToken()); + // curvePool = I2pool(curveToken.minter()); + // address token0 = curvePool.coins(0); + // frax_is_token0 = (token0 == frax_address); } function fraxPerLPToken() public view override returns (uint256 frax_per_lp_token) { // COMMENTED OUT SO COMPILER DOESNT COMPLAIN. UNCOMMENT WHEN DEPLOYING - // Convex Volatile/FRAXBP - // ============================================ - { - // Half of the LP is FRAXBP. Half of that should be FRAX. - // Using 0.25 * lp price for gas savings - frax_per_lp_token = (curvePool.lp_price() * (1e18)) / (4 * curvePool.price_oracle()); - } + // // Convex Volatile/FRAXBP + // // ============================================ + // { + // // Half of the LP is FRAXBP. Half of that should be FRAX. + // // Using 0.25 * lp price for gas savings + // frax_per_lp_token = (curvePool.lp_price() * (1e18)) / (4 * curvePool.price_oracle()); + // } } } diff --git a/src/hardhat/contracts/Staking/Variants/FraxUnifiedFarm_ERC20_Convex_Generic.sol b/src/hardhat/contracts/Staking/Variants/FraxUnifiedFarm_ERC20_Convex_Generic.sol new file mode 100755 index 00000000..2215d00c --- /dev/null +++ b/src/hardhat/contracts/Staking/Variants/FraxUnifiedFarm_ERC20_Convex_Generic.sol @@ -0,0 +1,49 @@ +// SPDX-License-Identifier: GPL-2.0-or-later +pragma solidity >=0.8.0; + +import "../FraxUnifiedFarm_ERC20.sol"; +import "../../Misc_AMOs/convex/IConvexStakingWrapperFrax.sol"; +import "../../Misc_AMOs/convex/IDepositToken.sol"; +import "../../Misc_AMOs/curve/I2poolToken.sol"; +import "../../Misc_AMOs/curve/I2pool.sol"; + +contract FraxUnifiedFarm_ERC20_Convex_Generic is FraxUnifiedFarm_ERC20 { + + constructor ( + address _owner, + address[] memory _rewardTokens, + address[] memory _rewardManagers, + uint256[] memory _rewardRates, + address[] memory _gaugeControllers, + address[] memory _rewardDistributors, + address _stakingToken + ) + FraxUnifiedFarm_ERC20(_owner , _rewardTokens, _rewardManagers, _rewardRates, _gaugeControllers, _rewardDistributors, _stakingToken) + { + // COMMENTED OUT SO COMPILER DOESNT COMPLAIN. UNCOMMENT WHEN DEPLOYING + + // // Convex crvUSD/FRAX + // stakingToken = IConvexStakingWrapperFrax(_stakingToken); + // curveToken = I2poolTokenNoLending(stakingToken.curveToken()); + // frax_is_token0 = true; + + // // Convex FRAX/USDP + // stakingToken = IConvexStakingWrapperFrax(_stakingToken); + // curveToken = I2poolToken(stakingToken.curveToken()); + // curvePool = I2pool(curveToken.minter()); + // frax_is_token0 = true; + } + + function fraxPerLPToken() public view override returns (uint256 frax_per_lp_token) { + // COMMENTED OUT SO COMPILER DOESNT COMPLAIN. UNCOMMENT WHEN DEPLOYING + + // Convex crvUSD/FRAX + // ============================================ + // { + // // Half of the LP should be FRAX + // // Using 0.50 * virtual price for gas savings + // frax_per_lp_token = curvePool.get_virtual_price() / 2; + // } + + } +} diff --git a/src/hardhat/contracts/Staking/Variants/FraxUnifiedFarm_ERC20_Convex_frxETH.sol b/src/hardhat/contracts/Staking/Variants/FraxUnifiedFarm_ERC20_Convex_frxETH.sol index 4754416d..83963aec 100755 --- a/src/hardhat/contracts/Staking/Variants/FraxUnifiedFarm_ERC20_Convex_frxETH.sol +++ b/src/hardhat/contracts/Staking/Variants/FraxUnifiedFarm_ERC20_Convex_frxETH.sol @@ -27,12 +27,15 @@ contract FraxUnifiedFarm_ERC20_Convex_frxETH is FraxUnifiedFarm_ERC20 { { // COMMENTED OUT SO COMPILER DOESNT COMPLAIN. UNCOMMENT WHEN DEPLOYING - // // Convex frxETHETH only + // Most Convex frxETH/XYZ (TOKEN != MINTER) // stakingToken = IConvexStakingWrapperFrax(_stakingToken); // curveToken = I2poolToken(stakingToken.curveToken()); // curvePool = ICurvefrxETHETHPool(curveToken.minter()); - // // address token0 = curvePool.coins(0); - // // frax_is_token0 = false; // Doesn't matter for frxETH + + // Some Convex frxETH/XYZ (TOKEN = MINTER)) + // stakingToken = IConvexStakingWrapperFrax(_stakingToken); + // curveToken = I2poolToken(stakingToken.curveToken()); + // curvePool = ICurvefrxETHETHPool(stakingToken.curveToken()); } function getLatestETHPriceE8() public view returns (int) { @@ -52,11 +55,11 @@ contract FraxUnifiedFarm_ERC20_Convex_frxETH is FraxUnifiedFarm_ERC20 { function fraxPerLPToken() public view override returns (uint256) { // COMMENTED OUT SO COMPILER DOESNT COMPLAIN. UNCOMMENT WHEN DEPLOYING - // // Get the amount of FRAX 'inside' of the lp tokens - // uint256 frax_per_lp_token; + // Get the amount of FRAX 'inside' of the lp tokens + uint256 frax_per_lp_token; - // // Convex frxETH/ETH - // // ============================================ + // Convex frxETH/XYZ + // ============================================ // { // // Assume frxETH = ETH for pricing purposes // // Get the USD value of the frxETH per LP token @@ -65,6 +68,6 @@ contract FraxUnifiedFarm_ERC20_Convex_frxETH is FraxUnifiedFarm_ERC20 { // frax_per_lp_token = frxETH_usd_val_per_lp_e8 * (1e10); // We use USD as "Frax" here // } - // return frax_per_lp_token; + return frax_per_lp_token; } } \ No newline at end of file diff --git a/src/hardhat/contracts/Staking/Variants/FraxUnifiedFarm_ERC20_KyberERC20Mainnet.sol.off b/src/hardhat/contracts/Staking/Variants/FraxUnifiedFarm_ERC20_KyberERC20Mainnet.sol.off new file mode 100755 index 00000000..b0e5657b --- /dev/null +++ b/src/hardhat/contracts/Staking/Variants/FraxUnifiedFarm_ERC20_KyberERC20Mainnet.sol.off @@ -0,0 +1,69 @@ +// SPDX-License-Identifier: GPL-2.0-or-later +pragma solidity >=0.8.0; + +import "../FraxUnifiedFarm_ERC20.sol"; +import "../../Misc_AMOs/bunni/IBunniTokenLP.sol"; +import "../../Misc_AMOs/bunni/IBunniGauge.sol"; +import "../../Misc_AMOs/bunni/IBunniLens.sol"; +import "../../Misc_AMOs/bunni/IBunniMinter.sol"; +import "../../Oracle/AggregatorV3Interface.sol"; +import "../../Uniswap_V3/IUniswapV3Pool.sol"; + +contract FraxUnifiedFarm_ERC20_Other is FraxUnifiedFarm_ERC20 { + + // Bunni + IBunniTokenLP public lp_tkn; + IUniswapV3Pool public univ3_pool; + + constructor ( + address _owner, + address[] memory _rewardTokens, + address[] memory _rewardManagers, + uint256[] memory _rewardRates, + address[] memory _gaugeControllers, + address[] memory _rewardDistributors, + address _stakingToken + ) + FraxUnifiedFarm_ERC20(_owner , _rewardTokens, _rewardManagers, _rewardRates, _gaugeControllers, _rewardDistributors, _stakingToken) + { + // COMMENTED OUT SO COMPILER DOESNT COMPLAIN. UNCOMMENT WHEN DEPLOYING + + // Bunni + stakingToken = IBunniGauge(_stakingToken); + lp_tkn = IBunniTokenLP(stakingToken.lp_token()); + univ3_pool = IUniswapV3Pool(lp_tkn.pool()); + address token0 = univ3_pool.token0(); + frax_is_token0 = (token0 == frax_address); + } + + function setBunniAddrs(address _lens, address _minter) public onlyByOwnGov { + lens = IBunniLens(_lens); + minter = IBunniMinter(_minter); + } + + // In case the rewards get screwed up + function toggleBunni3rdPartyOLITClaimer(address _claimer) public onlyByOwnGov { + minter.toggle_approve_mint(_claimer); + } + + function fraxPerLPToken() public view override returns (uint256 frax_per_lp_token) { + // COMMENTED OUT SO COMPILER DOESNT COMPLAIN. UNCOMMENT WHEN DEPLOYING + + // Bunni FRAX/USDC Gauge + // ============================================ + { + // Get the BunniKey so you can query the lens + IBunniLens.BunniKey memory bkey = IBunniLens.BunniKey({ + pool: univ3_pool, + tickLower: lp_tkn.tickLower(), + tickUpper: lp_tkn.tickUpper() + }); + (, uint256 amt0, uint256 amt1) = lens.pricePerFullShare(bkey); + + // Calc FRAX per LP + if (frax_is_token0) frax_per_lp_token = amt0; + else frax_per_lp_token = amt1; + } + + } +} diff --git a/src/hardhat/contracts/Staking/Variants/FraxUnifiedFarm_KyberSwapElasticGeneric.sol b/src/hardhat/contracts/Staking/Variants/FraxUnifiedFarm_KyberSwapElasticGeneric.sol index e956924c..e828b5b4 100755 --- a/src/hardhat/contracts/Staking/Variants/FraxUnifiedFarm_KyberSwapElasticGeneric.sol +++ b/src/hardhat/contracts/Staking/Variants/FraxUnifiedFarm_KyberSwapElasticGeneric.sol @@ -1,9 +1,18 @@ // SPDX-License-Identifier: GPL-2.0-or-later pragma solidity >=0.8.0; -import "../FraxUnifiedFarm_KyberSwapElastic.sol"; +import "../FraxUnifiedFarm_ERC20.sol"; +import "../../Misc_AMOs/kyberswap/elastic/IKyberSwapFarmingToken.sol"; +import "../../Oracle/ComboOracle_KyberSwapElastic.sol"; -contract FraxUnifiedFarm_KyberSwapElasticGeneric is FraxUnifiedFarm_KyberSwapElastic { +contract FraxUnifiedFarm_KyberSwapElasticGeneric is FraxUnifiedFarm_ERC20 { + + // Need to seed a starting token to use both as a basis for fraxPerLPToken + // as well as getting ticks, etc + uint256 public seed_token_id; + + // For KS-FT pricing + ComboOracle_KyberSwapElastic public KSE_ComboOracle; constructor ( address _owner, @@ -12,13 +21,41 @@ contract FraxUnifiedFarm_KyberSwapElasticGeneric is FraxUnifiedFarm_KyberSwapEla uint256[] memory _rewardRates, address[] memory _gaugeControllers, address[] memory _rewardDistributors, - address[] memory _coreAddresses, // 0: NFT Manager, 1: ComboOracle - uint256 seed_token_id + address _kse_combo_oracle, + address _stakingToken, + uint256 _seed_token_id ) - FraxUnifiedFarm_KyberSwapElastic(_owner, _rewardTokens, _rewardManagers, _rewardRates, _gaugeControllers, _rewardDistributors, _coreAddresses, seed_token_id ) + FraxUnifiedFarm_ERC20(_owner , _rewardTokens, _rewardManagers, _rewardRates, _gaugeControllers, _rewardDistributors, _stakingToken) { // COMMENTED OUT SO COMPILER DOESNT COMPLAIN. UNCOMMENT WHEN DEPLOYING + stakingToken = IKyberSwapFarmingToken(_stakingToken); + frax_is_token0 = false; // Doesn't really matter here + + seed_token_id = _seed_token_id; + KSE_ComboOracle = ComboOracle_KyberSwapElastic(_kse_combo_oracle); + } + + function setSeedTokenID(uint256 _seed_token_id) public onlyByOwnGov { + seed_token_id = _seed_token_id; + } + function setKyberSwapElasticComboOracle(address _kse_combo_oracle_address) public onlyByOwnGov { + KSE_ComboOracle = ComboOracle_KyberSwapElastic(_kse_combo_oracle_address); } + + function fraxPerLPToken() public view override returns (uint256 frax_per_lp_token) { + // COMMENTED OUT SO COMPILER DOESNT COMPLAIN. UNCOMMENT WHEN DEPLOYING + + // KyberSwap Elastic KyberSwapFarmingToken (KS-FT) + // ============================================ + { + // Fetch liquidity info from the seed token id + ComboOracle_KyberSwapElastic.NFTBasicInfo memory nft_basic_info = KSE_ComboOracle.getNFTBasicInfo(seed_token_id); + ComboOracle_KyberSwapElastic.NFTValueInfo memory nft_value_info = KSE_ComboOracle.getNFTValueInfo(seed_token_id); + + // Assume half of the liquidity is FRAX or FRAX-related, even if it is not. + frax_per_lp_token = (nft_value_info.total_value * MULTIPLIER_PRECISION) / (nft_basic_info.liquidity * 2); + } + } } diff --git a/src/hardhat/gnosis-safe-scripts/Convex_Farm_Deployments/Step_1_Vault_Gauge_Proxy.js b/src/hardhat/gnosis-safe-scripts/Convex_Farm_Deployments/Step_1_Vault_Gauge_Proxy.js new file mode 100644 index 00000000..c1f24164 --- /dev/null +++ b/src/hardhat/gnosis-safe-scripts/Convex_Farm_Deployments/Step_1_Vault_Gauge_Proxy.js @@ -0,0 +1,232 @@ +const path = require("path"); +const envPath = path.join(process.cwd(), "../../../.env"); +require("dotenv").config({ path: envPath }); +const { ethers } = require("hardhat"); + +const { BigNumber } = require("@ethersproject/bignumber"); +const util = require("util"); +const chalk = require("chalk"); +const fse = require("fs-extra"); +const { formatUnits } = require("ethers/lib/utils"); +const { BIG6, BIG18, stringifyReplacer, serializeJSONObject, calculateChecksum } = require("../utils/utils"); +const constants = require(path.join(__dirname, '../../../../dist/types/constants')); +const CONTRACT_ADDRESSES = constants.CONTRACT_ADDRESSES; +let ADDRS_ETH = CONTRACT_ADDRESSES.ethereum; +let ADDRS_ETH_LPS = ADDRS_ETH.pair_tokens; +let ADDRS_ETH_FARMS = ADDRS_ETH.staking_contracts; + +global.artifacts = artifacts; +global.web3 = web3; + + +const hre = require("hardhat"); + +const batch_json = { + "version": "1.0", + "chainId": "1", + "createdAt": 1685556909304, + "meta": { + "name": "Transactions Batch", + "description": "", + "txBuilderVersion": "1.14.1", + "createdFromSafeAddress": "0xB1748C79709f4Ba2Dd82834B8c82D4a505003f27", + "createdFromOwnerAddress": "", + "checksum": "0x" + }, + "transactions": [ + ] +} + +async function main() { + // Set up the provider for some future informational calls + [owner, addr1, addr2] = await ethers.getSigners(); + + console.log(`Using env file from ${envPath}`); + const thisBlock = await ethers.provider.getBlock(await ethers.provider.getBlockNumber()); + + const wrapperAddrs = [ + // ADDRS_ETH_LPS['Convex stkcvxfrxETHCRV_New'], + // ADDRS_ETH_LPS['Convex stkcvxfrxETHCVX_New'], + // ADDRS_ETH_LPS['Convex stkcvxfrxETHalETH_New'], + // ADDRS_ETH_LPS['Convex stkcvxfrxETHankrETH_New'], + // ADDRS_ETH_LPS['Convex stkcvxfrxETHcbETH_New'], + // ADDRS_ETH_LPS['Convex stkcvxfrxETHrETH_New'], + // ADDRS_ETH_LPS['Convex stkcvxfrxETHsETH_New'], + // ADDRS_ETH_LPS['Convex stkcvxfrxETHstETH_New'] + ADDRS_ETH_LPS['Convex stkcvxZUSDFRAXBP'] + ]; + + const farmAddrs = [ + // ADDRS_ETH_FARMS['Convex stkcvxfrxETHCRV_New'], + // ADDRS_ETH_FARMS['Convex stkcvxfrxETHCVX_New'], + // ADDRS_ETH_FARMS['Convex stkcvxfrxETHalETH_New'], + // ADDRS_ETH_FARMS['Convex stkcvxfrxETHankrETH_New'], + // ADDRS_ETH_FARMS['Convex stkcvxfrxETHcbETH_New'], + // ADDRS_ETH_FARMS['Convex stkcvxfrxETHrETH_New'], + // ADDRS_ETH_FARMS['Convex stkcvxfrxETHsETH_New'], + // ADDRS_ETH_FARMS['Convex stkcvxfrxETHstETH_New'] + ADDRS_ETH_FARMS['Convex stkcvxZUSDFRAXBP'] + ]; + + + // =============================================================== + // ==================== SET VAULTS ON WRAPPERS =================== + // =============================================================== + // This will generate the distro contracts to be used in step 2 + + for (let i = 0; i < wrapperAddrs.length; i++) { + batch_json.transactions.push({ + "to": wrapperAddrs[i], + "value": "0", + "data": null, + "contractMethod": { + "inputs": [ + { + "internalType": "address", + "name": "_vault", + "type": "address" + } + ], + "name": "setVault", + "payable": false + }, + "contractInputsValues": { + "_vault": farmAddrs[i], + } + }); + } + + + // =============================================================== + // ================ ADD GAUGES TO GAUGE CONTROLLER =============== + // =============================================================== + + for (let i = 0; i < farmAddrs.length; i++) { + batch_json.transactions.push({ + "to": ADDRS_ETH.misc.frax_gauge_controller_v2, + "value": "0", + "data": null, + "contractMethod": { + "inputs": [ + { + "name": "addr", + "type": "address" + }, + { + "name": "gauge_type", + "type": "int128" + }, + { + "name": "weight", + "type": "uint256" + } + ], + "name": "add_gauge", + "payable": false + }, + "contractInputsValues": { + "addr": farmAddrs[i], + "gauge_type": "0", + "weight": "1000", + } + }); + } + + + + + // =============================================================== + // ============ SET FXS GAUGE AND REWARD DIST ON FARM ============ + // =============================================================== + + for (let i = 0; i < farmAddrs.length; i++) { + batch_json.transactions.push({ + "to": farmAddrs[i], + "value": "0", + "data": null, + "contractMethod": { + "inputs": [ + { + "internalType": "address", + "name": "reward_token_address", + "type": "address" + }, + { + "internalType": "uint256", + "name": "_new_rate", + "type": "uint256" + }, + { + "internalType": "address", + "name": "_gauge_controller_address", + "type": "address" + }, + { + "internalType": "address", + "name": "_rewards_distributor_address", + "type": "address" + } + ], + "name": "setRewardVars", + "payable": false + }, + "contractInputsValues": { + "reward_token_address": ADDRS_ETH.main.FXS, + "_new_rate": "0", + "_gauge_controller_address": ADDRS_ETH.misc.frax_gauge_controller_v2, + "_rewards_distributor_address": ADDRS_ETH.misc.frax_gauge_rewards_distributor, + } + }); + } + + // =============================================================== + // ============== SET CONVEX AS ALLOWED VEFXS PROXY ============== + // =============================================================== + + for (let i = 0; i < farmAddrs.length; i++) { + batch_json.transactions.push({ + "to": farmAddrs[i], + "value": "0", + "data": null, + "contractMethod": { + "inputs": [ + { + "internalType": "address", + "name": "_proxy_addr", + "type": "address" + } + ], + "name": "toggleValidVeFXSProxy", + "payable": false + }, + "contractInputsValues": { + "_proxy_addr": "0x59CFCD384746ec3035299D90782Be065e466800B", + } + }); + } + + + // =============================================================== + // ======================= CREATE THE JSON ======================= + // =============================================================== + + // Insert the checksum and the timestamp + batch_json.createdAt = thisBlock.timestamp * 1000; + batch_json.meta.checksum = calculateChecksum(batch_json); + + // console.log(JSON.stringify(batch_json)); + fse.writeFileSync( + path.join(__dirname, 'Step_1_Vault_Gauge_Proxy.json'), + JSON.stringify(batch_json), + "utf8" + ); + +} + + +main() + .then(() => process.exit(0)) + .catch((error) => { + console.error(error); + process.exit(1); + }); diff --git a/src/hardhat/gnosis-safe-scripts/Convex_Farm_Deployments/Step_1_Vault_Gauge_Proxy.json b/src/hardhat/gnosis-safe-scripts/Convex_Farm_Deployments/Step_1_Vault_Gauge_Proxy.json new file mode 100644 index 00000000..108710a3 --- /dev/null +++ b/src/hardhat/gnosis-safe-scripts/Convex_Farm_Deployments/Step_1_Vault_Gauge_Proxy.json @@ -0,0 +1 @@ +{"version":"1.0","chainId":"1","createdAt":1688313875000,"meta":{"name":"Transactions Batch","description":"","txBuilderVersion":"1.14.1","createdFromSafeAddress":"0xB1748C79709f4Ba2Dd82834B8c82D4a505003f27","createdFromOwnerAddress":"","checksum":"0xbbf186fa91d91b65372cd9e95914ebf1677d56ee89a57add93ec7647da05c7e1"},"transactions":[{"to":"0xFD2d7847E0f450d8B00d3D697D720C687E622a7B","value":"0","data":null,"contractMethod":{"inputs":[{"internalType":"address","name":"_vault","type":"address"}],"name":"setVault","payable":false},"contractInputsValues":{"_vault":"0x107a33019910E57533Ad4F75762d6A958630cA3d"}},{"to":"0x3669C421b77340B2979d1A00a792CC2ee0FcE737","value":"0","data":null,"contractMethod":{"inputs":[{"name":"addr","type":"address"},{"name":"gauge_type","type":"int128"},{"name":"weight","type":"uint256"}],"name":"add_gauge","payable":false},"contractInputsValues":{"addr":"0x107a33019910E57533Ad4F75762d6A958630cA3d","gauge_type":"0","weight":"1000"}},{"to":"0x107a33019910E57533Ad4F75762d6A958630cA3d","value":"0","data":null,"contractMethod":{"inputs":[{"internalType":"address","name":"reward_token_address","type":"address"},{"internalType":"uint256","name":"_new_rate","type":"uint256"},{"internalType":"address","name":"_gauge_controller_address","type":"address"},{"internalType":"address","name":"_rewards_distributor_address","type":"address"}],"name":"setRewardVars","payable":false},"contractInputsValues":{"reward_token_address":"0x3432B6A60D23Ca0dFCa7761B7ab56459D9C964D0","_new_rate":"0","_gauge_controller_address":"0x3669C421b77340B2979d1A00a792CC2ee0FcE737","_rewards_distributor_address":"0x278dC748edA1d8eFEf1aDFB518542612b49Fcd34"}},{"to":"0x107a33019910E57533Ad4F75762d6A958630cA3d","value":"0","data":null,"contractMethod":{"inputs":[{"internalType":"address","name":"_proxy_addr","type":"address"}],"name":"toggleValidVeFXSProxy","payable":false},"contractInputsValues":{"_proxy_addr":"0x59CFCD384746ec3035299D90782Be065e466800B"}}]} \ No newline at end of file diff --git a/src/hardhat/gnosis-safe-scripts/Convex_Farm_Deployments/Step_2_CRVCVXDistro_Contracts.js b/src/hardhat/gnosis-safe-scripts/Convex_Farm_Deployments/Step_2_CRVCVXDistro_Contracts.js new file mode 100644 index 00000000..e1df6189 --- /dev/null +++ b/src/hardhat/gnosis-safe-scripts/Convex_Farm_Deployments/Step_2_CRVCVXDistro_Contracts.js @@ -0,0 +1,264 @@ +const path = require("path"); +const envPath = path.join(process.cwd(), "../../../.env"); +require("dotenv").config({ path: envPath }); +const { ethers } = require("hardhat"); + +const { BigNumber } = require("@ethersproject/bignumber"); +const util = require("util"); +const chalk = require("chalk"); +const fse = require("fs-extra"); +const { formatUnits } = require("ethers/lib/utils"); +const { BIG6, BIG18, stringifyReplacer, serializeJSONObject, calculateChecksum } = require("../utils/utils"); +const constants = require(path.join(__dirname, '../../../../dist/types/constants')); +const CONTRACT_ADDRESSES = constants.CONTRACT_ADDRESSES; +let ADDRS_ETH = CONTRACT_ADDRESSES.ethereum; +let ADDRS_ETH_LPS = ADDRS_ETH.pair_tokens; +let ADDRS_ETH_FARMS = ADDRS_ETH.staking_contracts; + +global.artifacts = artifacts; +global.web3 = web3; + + +const hre = require("hardhat"); + +const batch_json = { + "version": "1.0", + "chainId": "1", + "createdAt": 1685556909304, + "meta": { + "name": "Transactions Batch", + "description": "", + "txBuilderVersion": "1.14.1", + "createdFromSafeAddress": "0xB1748C79709f4Ba2Dd82834B8c82D4a505003f27", + "createdFromOwnerAddress": "", + "checksum": "0x" + }, + "transactions": [ + ] +} + +async function main() { + // Set up the provider for some future informational calls + [owner, addr1, addr2] = await ethers.getSigners(); + + console.log(`Using env file from ${envPath}`); + const thisBlock = await ethers.provider.getBlock(await ethers.provider.getBlockNumber()); + + const wrapperAddrs = [ + // ADDRS_ETH_LPS['Convex stkcvxfrxETHCRV_New'], + // ADDRS_ETH_LPS['Convex stkcvxfrxETHCVX_New'], + // ADDRS_ETH_LPS['Convex stkcvxfrxETHalETH_New'], + // ADDRS_ETH_LPS['Convex stkcvxfrxETHankrETH_New'], + // ADDRS_ETH_LPS['Convex stkcvxfrxETHcbETH_New'], + // ADDRS_ETH_LPS['Convex stkcvxfrxETHrETH_New'], + // ADDRS_ETH_LPS['Convex stkcvxfrxETHsETH_New'], + // ADDRS_ETH_LPS['Convex stkcvxfrxETHstETH_New'] + ADDRS_ETH_LPS['Convex stkcvxZUSDFRAXBP'] + ]; + + const farmAddrs = [ + // ADDRS_ETH_FARMS['Convex stkcvxfrxETHCRV_New'], + // ADDRS_ETH_FARMS['Convex stkcvxfrxETHCVX_New'], + // ADDRS_ETH_FARMS['Convex stkcvxfrxETHalETH_New'], + // ADDRS_ETH_FARMS['Convex stkcvxfrxETHankrETH_New'], + // ADDRS_ETH_FARMS['Convex stkcvxfrxETHcbETH_New'], + // ADDRS_ETH_FARMS['Convex stkcvxfrxETHrETH_New'], + // ADDRS_ETH_FARMS['Convex stkcvxfrxETHsETH_New'], + // ADDRS_ETH_FARMS['Convex stkcvxfrxETHstETH_New'] + ADDRS_ETH_FARMS['Convex stkcvxZUSDFRAXBP'] + ]; + + // =============================================================== + // ============== GET THE DISTRO CONTRACT ADDRESSES ============== + // =============================================================== + const IConvexStakingWrapperFrax_json_path = path.join(__dirname, '../../artifacts/contracts/Misc_AMOs/convex/IConvexStakingWrapperFrax.sol/IConvexStakingWrapperFrax.json'); + const { abi: IConvexStakingWrapperFrax_ABI } = JSON.parse( await fse.readFileSync(IConvexStakingWrapperFrax_json_path, 'utf-8')); + + const distroAddrs = []; + for (let i = 0; i < wrapperAddrs.length; i++) { + const wrapper_contract = new ethers.Contract(wrapperAddrs[i], IConvexStakingWrapperFrax_ABI).connect(owner); + distroAddrs.push(await wrapper_contract.distroContract()); + } + + + + // =============================================================== + // =============== SET CRV TOKEN MANAGER TO DISTRO =============== + // =============================================================== + + for (let i = 0; i < farmAddrs.length; i++) { + batch_json.transactions.push({ + "to": farmAddrs[i], + "value": "0", + "data": null, + "contractMethod": { + "inputs": [ + { + "internalType": "address", + "name": "reward_token_address", + "type": "address" + }, + { + "internalType": "address", + "name": "new_manager_address", + "type": "address" + } + ], + "name": "changeTokenManager", + "payable": false + }, + "contractInputsValues": { + "reward_token_address": ADDRS_ETH.reward_tokens.curve_dao, + "new_manager_address": distroAddrs[i], + } + }); + } + + // =============================================================== + // =================== SET CRV REWARD VARIABLES ================== + // =============================================================== + + for (let i = 0; i < farmAddrs.length; i++) { + batch_json.transactions.push({ + "to": farmAddrs[i], + "value": "0", + "data": null, + "contractMethod": { + "inputs": [ + { + "internalType": "address", + "name": "reward_token_address", + "type": "address" + }, + { + "internalType": "uint256", + "name": "_new_rate", + "type": "uint256" + }, + { + "internalType": "address", + "name": "_gauge_controller_address", + "type": "address" + }, + { + "internalType": "address", + "name": "_rewards_distributor_address", + "type": "address" + } + ], + "name": "setRewardVars", + "payable": false + }, + "contractInputsValues": { + "reward_token_address": ADDRS_ETH.reward_tokens.curve_dao, + "_new_rate": "0", + "_gauge_controller_address": "0x0000000000000000000000000000000000000000", + "_rewards_distributor_address": distroAddrs[i], + } + }); + } + + + // =============================================================== + // =============== SET CVX TOKEN MANAGER TO DISTRO =============== + // =============================================================== + + for (let i = 0; i < farmAddrs.length; i++) { + batch_json.transactions.push({ + "to": farmAddrs[i], + "value": "0", + "data": null, + "contractMethod": { + "inputs": [ + { + "internalType": "address", + "name": "reward_token_address", + "type": "address" + }, + { + "internalType": "address", + "name": "new_manager_address", + "type": "address" + } + ], + "name": "changeTokenManager", + "payable": false + }, + "contractInputsValues": { + "reward_token_address": ADDRS_ETH.reward_tokens.cvx, + "new_manager_address": distroAddrs[i], + } + }); + } + + // =============================================================== + // =================== SET CVX REWARD VARIABLES ================== + // =============================================================== + + for (let i = 0; i < farmAddrs.length; i++) { + batch_json.transactions.push({ + "to": farmAddrs[i], + "value": "0", + "data": null, + "contractMethod": { + "inputs": [ + { + "internalType": "address", + "name": "reward_token_address", + "type": "address" + }, + { + "internalType": "uint256", + "name": "_new_rate", + "type": "uint256" + }, + { + "internalType": "address", + "name": "_gauge_controller_address", + "type": "address" + }, + { + "internalType": "address", + "name": "_rewards_distributor_address", + "type": "address" + } + ], + "name": "setRewardVars", + "payable": false + }, + "contractInputsValues": { + "reward_token_address": ADDRS_ETH.reward_tokens.cvx, + "_new_rate": "0", + "_gauge_controller_address": "0x0000000000000000000000000000000000000000", + "_rewards_distributor_address": distroAddrs[i], + } + }); + } + + + + + // =============================================================== + // ======================= CREATE THE JSON ======================= + // =============================================================== + + // Insert the checksum and the timestamp + batch_json.createdAt = thisBlock.timestamp * 1000; + batch_json.meta.checksum = calculateChecksum(batch_json); + + // console.log(JSON.stringify(batch_json)); + fse.writeFileSync( + path.join(__dirname, 'Step_2_CRVCVXDistro_Contracts.json'), + JSON.stringify(batch_json), + "utf8" + ); + +} + + +main() + .then(() => process.exit(0)) + .catch((error) => { + console.error(error); + process.exit(1); + }); diff --git a/src/hardhat/gnosis-safe-scripts/Convex_Farm_Deployments/Step_2_CRVCVXDistro_Contracts.json b/src/hardhat/gnosis-safe-scripts/Convex_Farm_Deployments/Step_2_CRVCVXDistro_Contracts.json new file mode 100644 index 00000000..65cfb996 --- /dev/null +++ b/src/hardhat/gnosis-safe-scripts/Convex_Farm_Deployments/Step_2_CRVCVXDistro_Contracts.json @@ -0,0 +1 @@ +{"version":"1.0","chainId":"1","createdAt":1687986623000,"meta":{"name":"Transactions Batch","description":"","txBuilderVersion":"1.14.1","createdFromSafeAddress":"0xB1748C79709f4Ba2Dd82834B8c82D4a505003f27","createdFromOwnerAddress":"","checksum":"0x742709982f4931f115c6851afd0ddf848a68f2a815a8c277ee559ded39ac3257"},"transactions":[{"to":"0x107a33019910E57533Ad4F75762d6A958630cA3d","value":"0","data":null,"contractMethod":{"inputs":[{"internalType":"address","name":"reward_token_address","type":"address"},{"internalType":"address","name":"new_manager_address","type":"address"}],"name":"changeTokenManager","payable":false},"contractInputsValues":{"reward_token_address":"0xd533a949740bb3306d119cc777fa900ba034cd52","new_manager_address":"0x587e432E1503a10D18B85E9De63590a8E5cFef40"}},{"to":"0x107a33019910E57533Ad4F75762d6A958630cA3d","value":"0","data":null,"contractMethod":{"inputs":[{"internalType":"address","name":"reward_token_address","type":"address"},{"internalType":"uint256","name":"_new_rate","type":"uint256"},{"internalType":"address","name":"_gauge_controller_address","type":"address"},{"internalType":"address","name":"_rewards_distributor_address","type":"address"}],"name":"setRewardVars","payable":false},"contractInputsValues":{"reward_token_address":"0xd533a949740bb3306d119cc777fa900ba034cd52","_new_rate":"0","_gauge_controller_address":"0x0000000000000000000000000000000000000000","_rewards_distributor_address":"0x587e432E1503a10D18B85E9De63590a8E5cFef40"}},{"to":"0x107a33019910E57533Ad4F75762d6A958630cA3d","value":"0","data":null,"contractMethod":{"inputs":[{"internalType":"address","name":"reward_token_address","type":"address"},{"internalType":"address","name":"new_manager_address","type":"address"}],"name":"changeTokenManager","payable":false},"contractInputsValues":{"reward_token_address":"0x4e3fbd56cd56c3e72c1403e103b45db9da5b9d2b","new_manager_address":"0x587e432E1503a10D18B85E9De63590a8E5cFef40"}},{"to":"0x107a33019910E57533Ad4F75762d6A958630cA3d","value":"0","data":null,"contractMethod":{"inputs":[{"internalType":"address","name":"reward_token_address","type":"address"},{"internalType":"uint256","name":"_new_rate","type":"uint256"},{"internalType":"address","name":"_gauge_controller_address","type":"address"},{"internalType":"address","name":"_rewards_distributor_address","type":"address"}],"name":"setRewardVars","payable":false},"contractInputsValues":{"reward_token_address":"0x4e3fbd56cd56c3e72c1403e103b45db9da5b9d2b","_new_rate":"0","_gauge_controller_address":"0x0000000000000000000000000000000000000000","_rewards_distributor_address":"0x587e432E1503a10D18B85E9De63590a8E5cFef40"}}]} \ No newline at end of file diff --git a/src/hardhat/gnosis-safe-scripts/Convex_Farm_Deployments/Step_3_RewDist_Seeding_Sync.js b/src/hardhat/gnosis-safe-scripts/Convex_Farm_Deployments/Step_3_RewDist_Seeding_Sync.js new file mode 100644 index 00000000..595fb03f --- /dev/null +++ b/src/hardhat/gnosis-safe-scripts/Convex_Farm_Deployments/Step_3_RewDist_Seeding_Sync.js @@ -0,0 +1,185 @@ +const path = require("path"); +const envPath = path.join(process.cwd(), "../../../.env"); +require("dotenv").config({ path: envPath }); +const { ethers } = require("hardhat"); + +const { BigNumber } = require("@ethersproject/bignumber"); +const util = require("util"); +const chalk = require("chalk"); +const fse = require("fs-extra"); +const { formatUnits } = require("ethers/lib/utils"); +const { BIG6, BIG18, stringifyReplacer, serializeJSONObject, calculateChecksum } = require("../utils/utils"); +const constants = require(path.join(__dirname, '../../../../dist/types/constants')); +const CONTRACT_ADDRESSES = constants.CONTRACT_ADDRESSES; +let ADDRS_ETH = CONTRACT_ADDRESSES.ethereum; +let ADDRS_ETH_LPS = ADDRS_ETH.pair_tokens; +let ADDRS_ETH_FARMS = ADDRS_ETH.staking_contracts; + +global.artifacts = artifacts; +global.web3 = web3; + + +const hre = require("hardhat"); + +const batch_json = { + "version": "1.0", + "chainId": "1", + "createdAt": 1685556909304, + "meta": { + "name": "Transactions Batch", + "description": "", + "txBuilderVersion": "1.14.1", + "createdFromSafeAddress": "0xB1748C79709f4Ba2Dd82834B8c82D4a505003f27", + "createdFromOwnerAddress": "", + "checksum": "0x" + }, + "transactions": [ + ] +} + +async function main() { + // Set up the provider for some future informational calls + [owner, addr1, addr2] = await ethers.getSigners(); + + console.log(`Using env file from ${envPath}`); + const thisBlock = await ethers.provider.getBlock(await ethers.provider.getBlockNumber()); + + const wrapperAddrs = [ + // ADDRS_ETH_LPS['Convex stkcvxfrxETHCRV_New'], + // ADDRS_ETH_LPS['Convex stkcvxfrxETHCVX_New'], + // ADDRS_ETH_LPS['Convex stkcvxfrxETHalETH_New'], + // ADDRS_ETH_LPS['Convex stkcvxfrxETHankrETH_New'], + // ADDRS_ETH_LPS['Convex stkcvxfrxETHcbETH_New'], + // ADDRS_ETH_LPS['Convex stkcvxfrxETHrETH_New'], + // ADDRS_ETH_LPS['Convex stkcvxfrxETHsETH_New'], + // ADDRS_ETH_LPS['Convex stkcvxfrxETHstETH_New'] + ADDRS_ETH_LPS['Convex stkcvxZUSDFRAXBP'] + ]; + + const farmAddrs = [ + // ADDRS_ETH_FARMS['Convex stkcvxfrxETHCRV_New'], + // ADDRS_ETH_FARMS['Convex stkcvxfrxETHCVX_New'], + // ADDRS_ETH_FARMS['Convex stkcvxfrxETHalETH_New'], + // ADDRS_ETH_FARMS['Convex stkcvxfrxETHankrETH_New'], + // ADDRS_ETH_FARMS['Convex stkcvxfrxETHcbETH_New'], + // ADDRS_ETH_FARMS['Convex stkcvxfrxETHrETH_New'], + // ADDRS_ETH_FARMS['Convex stkcvxfrxETHsETH_New'], + // ADDRS_ETH_FARMS['Convex stkcvxfrxETHstETH_New'] + ADDRS_ETH_FARMS['Convex stkcvxZUSDFRAXBP'] + ]; + + // =============================================================== + // =============== ADD GAUGES TO REWARD DISTRIBUTOR ============== + // =============================================================== + + for (let i = 0; i < farmAddrs.length; i++) { + batch_json.transactions.push({ + "to": ADDRS_ETH.misc.frax_gauge_rewards_distributor, + "value": "0", + "data": null, + "contractMethod": { + "inputs": [ + { + "internalType": "address", + "name": "_gauge_address", + "type": "address" + }, + { + "internalType": "bool", + "name": "_is_middleman", + "type": "bool" + }, + { + "internalType": "bool", + "name": "_is_active", + "type": "bool" + } + ], + "name": "setGaugeState", + "payable": false + }, + "contractInputsValues": { + "_gauge_address": farmAddrs[i], + "_is_middleman": "false", + "_is_active": "true", + } + }); + } + + + // =============================================================== + // ======================= FARM FXS SEEDING ====================== + // =============================================================== + + for (let i = 0; i < farmAddrs.length; i++) { + batch_json.transactions.push({ + "to": ADDRS_ETH.main.FXS, + "value": "0", + "data": null, + "contractMethod": { + "inputs": [ + { + "internalType": "address", + "name": "recipient", + "type": "address" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "transfer", + "payable": false + }, + "contractInputsValues": { + "recipient": farmAddrs[i], + "amount": "1000000000000000000", + } + }); + } + + + // =============================================================== + // ============================= SYNC ============================ + // =============================================================== + + for (let i = 0; i < farmAddrs.length; i++) { + batch_json.transactions.push({ + "to": farmAddrs[i], + "value": "0", + "data": null, + "contractMethod": { + "inputs": [], + "name": "sync", + "payable": false + }, + "contractInputsValues": {} + }); + } + + + // =============================================================== + // ======================= CREATE THE JSON ======================= + // =============================================================== + + // Insert the checksum and the timestamp + batch_json.createdAt = thisBlock.timestamp * 1000; + batch_json.meta.checksum = calculateChecksum(batch_json); + + // console.log(JSON.stringify(batch_json)); + fse.writeFileSync( + path.join(__dirname, 'Step_3_RewDist_Seeding_Sync.json'), + JSON.stringify(batch_json), + "utf8" + ); + +} + + +main() + .then(() => process.exit(0)) + .catch((error) => { + console.error(error); + process.exit(1); + }); diff --git a/src/hardhat/gnosis-safe-scripts/Convex_Farm_Deployments/Step_3_RewDist_Seeding_Sync.json b/src/hardhat/gnosis-safe-scripts/Convex_Farm_Deployments/Step_3_RewDist_Seeding_Sync.json new file mode 100644 index 00000000..bbd77d74 --- /dev/null +++ b/src/hardhat/gnosis-safe-scripts/Convex_Farm_Deployments/Step_3_RewDist_Seeding_Sync.json @@ -0,0 +1 @@ +{"version":"1.0","chainId":"1","createdAt":1687986623000,"meta":{"name":"Transactions Batch","description":"","txBuilderVersion":"1.14.1","createdFromSafeAddress":"0xB1748C79709f4Ba2Dd82834B8c82D4a505003f27","createdFromOwnerAddress":"","checksum":"0x02fb2bf93ef6b5c0dd7a1a126d4860391ad307bc39ea66adb6b748f39ae05960"},"transactions":[{"to":"0x278dC748edA1d8eFEf1aDFB518542612b49Fcd34","value":"0","data":null,"contractMethod":{"inputs":[{"internalType":"address","name":"_gauge_address","type":"address"},{"internalType":"bool","name":"_is_middleman","type":"bool"},{"internalType":"bool","name":"_is_active","type":"bool"}],"name":"setGaugeState","payable":false},"contractInputsValues":{"_gauge_address":"0x107a33019910E57533Ad4F75762d6A958630cA3d","_is_middleman":"false","_is_active":"true"}},{"to":"0x3432B6A60D23Ca0dFCa7761B7ab56459D9C964D0","value":"0","data":null,"contractMethod":{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","payable":false},"contractInputsValues":{"recipient":"0x107a33019910E57533Ad4F75762d6A958630cA3d","amount":"1000000000000000000"}},{"to":"0x107a33019910E57533Ad4F75762d6A958630cA3d","value":"0","data":null,"contractMethod":{"inputs":[],"name":"sync","payable":false},"contractInputsValues":{}}]} \ No newline at end of file diff --git a/src/hardhat/gnosis-safe-scripts/Frax_Comptroller_Routine/Sunday_Part_1.js b/src/hardhat/gnosis-safe-scripts/Frax_Comptroller_Routine/Sunday_Part_1.js index d277e584..449ae02e 100644 --- a/src/hardhat/gnosis-safe-scripts/Frax_Comptroller_Routine/Sunday_Part_1.js +++ b/src/hardhat/gnosis-safe-scripts/Frax_Comptroller_Routine/Sunday_Part_1.js @@ -8,13 +8,10 @@ const util = require("util"); const chalk = require("chalk"); const fse = require("fs-extra"); const { formatUnits } = require("ethers/lib/utils"); - +const { BIG6, BIG18, stringifyReplacer, serializeJSONObject, calculateChecksum, GetCVXMintAmount } = require("../utils/utils"); global.artifacts = artifacts; global.web3 = web3; -const BIG6 = BigNumber.from(10).pow(6); -const BIG18 = BigNumber.from(10).pow(18); - const hre = require("hardhat"); const batch_json = { @@ -34,7 +31,7 @@ const batch_json = { } async function main() { - // Set up the provider for some future calls + // Set up the provider for some future informational calls [owner, addr1, addr2] = await ethers.getSigners(); // Useful info to use later @@ -55,59 +52,59 @@ async function main() { const thisBlock = await ethers.provider.getBlock(await ethers.provider.getBlockNumber()); - // =============================================================== - // ===================== WEEKLY veFXS YIELD ====================== - // =============================================================== + // // =============================================================== + // // ===================== WEEKLY veFXS YIELD ====================== + // // =============================================================== - // Approve for weekly veFXS rewards - // ===================================== - batch_json.transactions.push({ - "to": "0x3432B6A60D23Ca0dFCa7761B7ab56459D9C964D0", - "value": "0", - "data": null, - "contractMethod": { - "inputs": [ - { - "internalType": "address", - "name": "spender", - "type": "address" - }, - { - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "name": "approve", - "payable": false - }, - "contractInputsValues": { - "spender": "0xc6764e58b36e26b08Fd1d2AeD4538c02171fA872", - "amount": "7500000000000000000000" - } - }); + // // Approve for weekly veFXS rewards + // // ===================================== + // batch_json.transactions.push({ + // "to": "0x3432B6A60D23Ca0dFCa7761B7ab56459D9C964D0", + // "value": "0", + // "data": null, + // "contractMethod": { + // "inputs": [ + // { + // "internalType": "address", + // "name": "spender", + // "type": "address" + // }, + // { + // "internalType": "uint256", + // "name": "amount", + // "type": "uint256" + // } + // ], + // "name": "approve", + // "payable": false + // }, + // "contractInputsValues": { + // "spender": "0xc6764e58b36e26b08Fd1d2AeD4538c02171fA872", + // "amount": "3250000000000000000000" + // } + // }); - // NotifyRewardAmount for weekly veFXS rewards - // ===================================== - batch_json.transactions.push({ - "to": "0xc6764e58b36e26b08Fd1d2AeD4538c02171fA872", - "value": "0", - "data": null, - "contractMethod": { - "inputs": [ - { - "internalType": "uint256", - "name": "amount", - "type": "uint256" - }, - ], - "name": "notifyRewardAmount", - "payable": false - }, - "contractInputsValues": { - "amount": "7500000000000000000000" - } - }); + // // NotifyRewardAmount for weekly veFXS rewards + // // ===================================== + // batch_json.transactions.push({ + // "to": "0xc6764e58b36e26b08Fd1d2AeD4538c02171fA872", + // "value": "0", + // "data": null, + // "contractMethod": { + // "inputs": [ + // { + // "internalType": "uint256", + // "name": "amount", + // "type": "uint256" + // }, + // ], + // "name": "notifyRewardAmount", + // "payable": false + // }, + // "contractInputsValues": { + // "amount": "3250000000000000000000" + // } + // }); // =============================================================== @@ -214,17 +211,18 @@ async function main() { // } // }); - // Convex Frax FRAX/USDC rewards + // Convex Frax FRAX/USDC (stkcvxFRAXBP) rewards const IStakingProxyConvex = path.join(__dirname, '../../artifacts/contracts/Misc_AMOs/convex/IStakingProxyConvex.sol/IStakingProxyConvex.json'); const { abi: IStakingProxyConvex_ABI } = JSON.parse( await fse.readFileSync(IStakingProxyConvex, 'utf-8')); const convex_frax_usdc_staking_proxy = new ethers.Contract("0x2AA609715488B09EFA93883759e8B089FBa11296", IStakingProxyConvex_ABI).connect(owner); const convex_frax_usdc_rewards = await convex_frax_usdc_staking_proxy.earned(); const crv_from_convex_frax_usdc = BigNumber.from(convex_frax_usdc_rewards[1][1]); const cvx_from_convex_frax_usdc = BigNumber.from(convex_frax_usdc_rewards[1][2]); - // FRAXBP rewards get saved/reinvested - summary_info.crv_to_save = summary_info.crv_to_save.add(crv_from_convex_frax_usdc); + // FRAXBP rewards: 50% of CRV and 100% of CVX is saved/reinvested + summary_info.crv_to_save = summary_info.crv_to_save.add(crv_from_convex_frax_usdc.mul(50).div(100)); + summary_info.crv_to_sell = summary_info.crv_to_sell.add(crv_from_convex_frax_usdc.mul(50).div(100)); summary_info.cvx_to_lock = summary_info.cvx_to_lock.add(cvx_from_convex_frax_usdc); - console.log(`----------- Convex Frax FRAX/USDC -----------`); + console.log(`----------- Convex Frax FRAX/USDC (stkcvxFRAXBP) -----------`); console.log(`CRV: ${formatUnits(crv_from_convex_frax_usdc, 18)}`); console.log(`CVX: ${formatUnits(cvx_from_convex_frax_usdc, 18)}`); @@ -241,14 +239,14 @@ async function main() { "contractInputsValues": null }); - // Convex Frax Frax/FPI rewards + // Convex Frax Frax/FPI (stkcvxFPIFRAX) rewards const convex_frax_fpi_staking_proxy = new ethers.Contract("0x2df2378103baB456457329D4C603440B92b9c0bd", IStakingProxyConvex_ABI).connect(owner); const convex_frax_fpi_rewards = await convex_frax_fpi_staking_proxy.earned(); const crv_from_convex_frax_fpi = BigNumber.from(convex_frax_fpi_rewards[1][1]); const cvx_from_convex_frax_fpi = BigNumber.from(convex_frax_fpi_rewards[1][2]); summary_info.crv_to_sell = summary_info.crv_to_sell.add(crv_from_convex_frax_fpi); summary_info.cvx_to_sell = summary_info.cvx_to_sell.add(cvx_from_convex_frax_fpi); - console.log(`----------- Convex Frax FRAX/FPI -----------`); + console.log(`----------- Convex Frax FRAX/FPI (stkcvxFPIFRAX) -----------`); console.log(`CRV: ${formatUnits(crv_from_convex_frax_fpi, 18)}`); console.log(`CVX: ${formatUnits(cvx_from_convex_frax_fpi, 18)}`); // ===================================== @@ -945,7 +943,35 @@ async function main() { summary_info.crv_to_convert_to_cvxcrv = BigNumber.from(0); summary_info.cvxcrv_direct_collected = summary_info.cvxcrv_direct_collected.add(slipped_cvxcrv_out); - // Lock the cvxCRV in Convex + // Lock the cvxCRV in Convex (approve) + // ===================================== + batch_json.transactions.push({ + "to": "0x62B9c7356A2Dc64a1969e19C23e4f579F9810Aa7", + "value": "0", + "data": null, + "contractMethod": { + "inputs": [ + { + "internalType": "address", + "name": "spender", + "type": "address" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "approve", + "payable": false + }, + "contractInputsValues": { + "spender": "0xaa0C3f5F7DFD688C6E646F66CD2a6B66ACdbE434", + "amount": summary_info.cvxcrv_direct_collected.toString() + } + }); + + // Lock the cvxCRV in Convex (stake) // ===================================== batch_json.transactions.push({ "to": "0xaa0C3f5F7DFD688C6E646F66CD2a6B66ACdbE434", @@ -1004,67 +1030,6 @@ async function main() { } -const stringifyReplacer = (_, value) => (value === undefined ? null : value) - -const serializeJSONObject = (json) => { - if (Array.isArray(json)) { - return `[${json.map((el) => serializeJSONObject(el)).join(',')}]` - } - - if (typeof json === 'object' && json !== null) { - let acc = '' - const keys = Object.keys(json).sort() - acc += `{${JSON.stringify(keys, stringifyReplacer)}` - - for (let i = 0; i < keys.length; i++) { - acc += `${serializeJSONObject(json[keys[i]])},` - } - - return `${acc}}` - } - - return `${JSON.stringify(json, stringifyReplacer)}` -} - -const calculateChecksum = (batchFile) => { - const serialized = serializeJSONObject({ - ...batchFile, - meta: { ...batchFile.meta, name: null }, - }) - const sha = web3.utils.sha3(serialized) - - return sha || undefined -} - - -// From https://docs.convexfinance.com/convexfinanceintegration/cvx-minting -const GetCVXMintAmount = ( crvEarned, cvxTotalSupply ) => { - // Constants - let cliffSize = BigNumber.from("1000000000000000000").mul(100000); // New cliff every 100000 tokens - let cliffCount = BigNumber.from("1000"); // 1,000 cliffs - let maxSupply = BigNumber.from("1000000000000000000").mul(100000000); // 100 mil max supply - - // Get current cliff - let currentCliff = cvxTotalSupply.div(cliffSize); - - // If current cliff is under the max - if(currentCliff.lt(cliffCount)){ - // Get remaining cliffs - let remaining = cliffCount.sub(currentCliff); - - // Multiply ratio of remaining cliffs to total cliffs against amount CRV received - var cvxEarned = (crvEarned.mul(remaining)).div(cliffCount); - - // Double check we have not gone over the max supply - var amountTillMax = maxSupply.sub(cvxTotalSupply); - if(cvxEarned.gt(amountTillMax)){ - cvxEarned = amountTillMax; - } - return cvxEarned; - } - return BigNumber.from(0); -} - main() .then(() => process.exit(0)) .catch((error) => { diff --git a/src/hardhat/gnosis-safe-scripts/Frax_Comptroller_Routine/Sunday_Part_1.json b/src/hardhat/gnosis-safe-scripts/Frax_Comptroller_Routine/Sunday_Part_1.json new file mode 100644 index 00000000..03e053bc --- /dev/null +++ b/src/hardhat/gnosis-safe-scripts/Frax_Comptroller_Routine/Sunday_Part_1.json @@ -0,0 +1 @@ +{"version":"1.0","chainId":"1","createdAt":1689622811000,"meta":{"name":"Transactions Batch","description":"","txBuilderVersion":"1.14.1","createdFromSafeAddress":"0xB1748C79709f4Ba2Dd82834B8c82D4a505003f27","createdFromOwnerAddress":"","checksum":"0xfe9dc9634a1002523c79a956b8a743386d17c8f88b97ebc7d1b78ba5bea3d394"},"transactions":[{"to":"0x49ee75278820f409ecd67063D8D717B38d66bd71","value":"0","data":null,"contractMethod":{"inputs":[],"name":"claimRewardsFRAX3CRV","payable":false},"contractInputsValues":null},{"to":"0x49ee75278820f409ecd67063D8D717B38d66bd71","value":"0","data":null,"contractMethod":{"inputs":[{"internalType":"uint256","name":"crv_amt","type":"uint256"},{"internalType":"uint256","name":"cvx_amt","type":"uint256"},{"internalType":"uint256","name":"cvxCRV_amt","type":"uint256"},{"internalType":"uint256","name":"fxs_amt","type":"uint256"}],"name":"withdrawRewards","payable":false},"contractInputsValues":{"crv_amt":"28831671402902644089391","cvx_amt":"432475071043539661340","cvxCRV_amt":"0","fxs_amt":"0"}},{"to":"0x2AA609715488B09EFA93883759e8B089FBa11296","value":"0","data":null,"contractMethod":{"inputs":[],"name":"getReward","payable":false},"contractInputsValues":null},{"to":"0x2df2378103baB456457329D4C603440B92b9c0bd","value":"0","data":null,"contractMethod":{"inputs":[],"name":"getReward","payable":false},"contractInputsValues":null},{"to":"0x3f29cB4111CbdA8081642DA1f75B3c12DECf2516","value":"0","data":null,"contractMethod":{"inputs":[{"internalType":"address[]","name":"rewardContracts","type":"address[]"},{"internalType":"address[]","name":"extraRewardContracts","type":"address[]"},{"internalType":"address[]","name":"tokenRewardContracts","type":"address[]"},{"internalType":"address[]","name":"tokenRewardTokens","type":"address[]"},{"internalType":"uint256","name":"depositCrvMaxAmount","type":"uint256"},{"internalType":"uint256","name":"minAmountOut","type":"uint256"},{"internalType":"uint256","name":"depositCvxMaxAmount","type":"uint256"},{"internalType":"uint256","name":"spendCvxAmount","type":"uint256"},{"internalType":"uint256","name":"options","type":"uint256"}],"name":"claimRewards","payable":false},"contractInputsValues":{"rewardContracts":"[\"0x7e880867363A7e321f5d260Cade2B0Bb2F717B02\", \"0x6991C1CD588c4e6f6f1de3A0bac5B8BbAb7aAF6d\", \"0x26598e3E511ADFadefD70ab2C3475Ff741741104\", \"0x47809eE386D1dEC29c0b13f21ba30F564517538B\", \"0x053e1dad223A206e6BCa24C77786bb69a10e427d\"]","extraRewardContracts":"[]","tokenRewardContracts":"[]","tokenRewardTokens":"[]","depositCrvMaxAmount":"0","minAmountOut":"0","depositCvxMaxAmount":"0","spendCvxAmount":"0","options":"0"}},{"to":"0xaa0C3f5F7DFD688C6E646F66CD2a6B66ACdbE434","value":"0","data":null,"contractMethod":{"inputs":[{"internalType":"address","name":"_account","type":"address"}],"name":"getReward","payable":false},"contractInputsValues":{"_account":"0xB1748C79709f4Ba2Dd82834B8c82D4a505003f27"}},{"to":"0x72a19342e8F1838460eBFCCEf09F6585e32db86E","value":"0","data":null,"contractMethod":{"inputs":[{"internalType":"address","name":"_account","type":"address"}],"name":"getReward","payable":false},"contractInputsValues":{"_account":"0xB1748C79709f4Ba2Dd82834B8c82D4a505003f27"}},{"to":"0x72a19342e8F1838460eBFCCEf09F6585e32db86E","value":"0","data":null,"contractMethod":{"inputs":[{"internalType":"bool","name":"_relock","type":"bool"}],"name":"processExpiredLocks","payable":false},"contractInputsValues":{"_relock":true}},{"to":"0x5E8422345238F34275888049021821E8E08CAa1f","value":"0","data":null,"contractMethod":{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","payable":false},"contractInputsValues":{"spender":"0xac3E018457B222d93114458476f3E3416Abbe38F","amount":"18430091742544040154"}},{"to":"0xac3E018457B222d93114458476f3E3416Abbe38F","value":"0","data":null,"contractMethod":{"inputs":[{"internalType":"uint256","name":"assets","type":"uint256"},{"internalType":"address","name":"receiver","type":"address"}],"name":"deposit","payable":false},"contractInputsValues":{"assets":"18430091742544040154","receiver":"0xB1748C79709f4Ba2Dd82834B8c82D4a505003f27"}},{"to":"0x358fE82370a1B9aDaE2E3ad69D6cF9e503c96018","value":"0","data":null,"contractMethod":{"inputs":[{"internalType":"address","name":"gauge_addr","type":"address"}],"name":"mint","payable":false},"contractInputsValues":{"gauge_addr":"0xB2Ac3382dA625eb41Fc803b57743f941a484e2a6"}},{"to":"0x3814307b86b54b1d8e7B2Ac34662De9125F8f4E6","value":"0","data":null,"contractMethod":{"inputs":[],"name":"collectFees","payable":false},"contractInputsValues":null},{"to":"0xD533a949740bb3306d119CC777fa900bA034cd52","value":"0","data":null,"contractMethod":{"inputs":[{"name":"_to","type":"address"},{"name":"_value","type":"uint256"}],"name":"transfer","payable":false},"contractInputsValues":{"_to":"0x847FA1A5337C7f24D7066E467F2e2A0f969Ca79F","_value":"9855243415995992946329"}},{"to":"0x847FA1A5337C7f24D7066E467F2e2A0f969Ca79F","value":"0","data":null,"contractMethod":{"inputs":[{"internalType":"uint256","name":"_value","type":"uint256"}],"name":"increaseAmount","payable":false},"contractInputsValues":{"_value":"9855243415995992946329"}},{"to":"0x72a19342e8F1838460eBFCCEf09F6585e32db86E","value":"0","data":null,"contractMethod":{"inputs":[{"internalType":"address","name":"_account","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"},{"internalType":"uint256","name":"_spendRatio","type":"uint256"}],"name":"lock","payable":false},"contractInputsValues":{"_account":"0xB1748C79709f4Ba2Dd82834B8c82D4a505003f27","_amount":"3389048095842337545238","_spendRatio":"0"}},{"to":"0x971add32ea87f10bd192671630be3be8a11b8623","value":"0","data":null,"contractMethod":{"inputs":[{"name":"i","type":"int128"},{"name":"j","type":"int128"},{"name":"_dx","type":"uint256"},{"name":"_min_dy","type":"uint256"}],"name":"exchange","payable":false},"contractInputsValues":{"i":"0","j":"1","_dx":"88697190743963936516965","_min_dy":"90641041283212669344076"}},{"to":"0x62B9c7356A2Dc64a1969e19C23e4f579F9810Aa7","value":"0","data":null,"contractMethod":{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","payable":false},"contractInputsValues":{"spender":"0xaa0C3f5F7DFD688C6E646F66CD2a6B66ACdbE434","amount":"101100450192064931506281"}},{"to":"0xaa0C3f5F7DFD688C6E646F66CD2a6B66ACdbE434","value":"0","data":null,"contractMethod":{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"},{"internalType":"address","name":"_to","type":"address"}],"name":"stake","payable":false},"contractInputsValues":{"_amount":"101100450192064931506281","_to":"0xB1748C79709f4Ba2Dd82834B8c82D4a505003f27"}}]} \ No newline at end of file diff --git a/src/hardhat/gnosis-safe-scripts/utils/utils.js b/src/hardhat/gnosis-safe-scripts/utils/utils.js new file mode 100644 index 00000000..d98ea7d8 --- /dev/null +++ b/src/hardhat/gnosis-safe-scripts/utils/utils.js @@ -0,0 +1,85 @@ +const path = require("path"); +const envPath = path.join(process.cwd(), "../../../.env"); +require("dotenv").config({ path: envPath }); +const { ethers } = require("hardhat"); + +const { BigNumber } = require("@ethersproject/bignumber"); +const util = require("util"); +const chalk = require("chalk"); +const fse = require("fs-extra"); +const { formatUnits } = require("ethers/lib/utils"); +const constants = require(path.join(__dirname, '../../../../dist/types/constants')); +const CONTRACT_ADDRESSES = constants.CONTRACT_ADDRESSES; +let ADDRS_ETH = CONTRACT_ADDRESSES.ethereum; +let ADDRS_ETH_LPS = ADDRS_ETH.pair_tokens; +let ADDRS_ETH_FARMS = ADDRS_ETH.staking_contracts; + +global.artifacts = artifacts; +global.web3 = web3; + +const BIG6 = BigNumber.from(10).pow(6); +const BIG18 = BigNumber.from(10).pow(18); + +const stringifyReplacer = (_, value) => (value === undefined ? null : value) + +const serializeJSONObject = (json) => { + if (Array.isArray(json)) { + return `[${json.map((el) => serializeJSONObject(el)).join(',')}]` + } + + if (typeof json === 'object' && json !== null) { + let acc = '' + const keys = Object.keys(json).sort() + acc += `{${JSON.stringify(keys, stringifyReplacer)}` + + for (let i = 0; i < keys.length; i++) { + acc += `${serializeJSONObject(json[keys[i]])},` + } + + return `${acc}}` + } + + return `${JSON.stringify(json, stringifyReplacer)}` +} + +const calculateChecksum = (batchFile) => { + const serialized = serializeJSONObject({ + ...batchFile, + meta: { ...batchFile.meta, name: null }, + }) + const sha = web3.utils.sha3(serialized) + + return sha || undefined +} + +// From https://docs.convexfinance.com/convexfinanceintegration/cvx-minting +const GetCVXMintAmount = ( crvEarned, cvxTotalSupply ) => { + // Constants + let cliffSize = BigNumber.from("1000000000000000000").mul(100000); // New cliff every 100000 tokens + let cliffCount = BigNumber.from("1000"); // 1,000 cliffs + let maxSupply = BigNumber.from("1000000000000000000").mul(100000000); // 100 mil max supply + + // Get current cliff + let currentCliff = cvxTotalSupply.div(cliffSize); + + // If current cliff is under the max + if(currentCliff.lt(cliffCount)){ + // Get remaining cliffs + let remaining = cliffCount.sub(currentCliff); + + // Multiply ratio of remaining cliffs to total cliffs against amount CRV received + var cvxEarned = (crvEarned.mul(remaining)).div(cliffCount); + + // Double check we have not gone over the max supply + var amountTillMax = maxSupply.sub(cvxTotalSupply); + if(cvxEarned.gt(amountTillMax)){ + cvxEarned = amountTillMax; + } + return cvxEarned; + } + return BigNumber.from(0); +} + +module.exports = { + BIG6, BIG18, stringifyReplacer, serializeJSONObject, calculateChecksum, GetCVXMintAmount +}; \ No newline at end of file diff --git a/src/hardhat/old_contracts/FXB/ERC-1155/FXB.sol b/src/hardhat/old_contracts/FXB/ERC-1155/FXB.sol new file mode 100644 index 00000000..2b0f8fb6 --- /dev/null +++ b/src/hardhat/old_contracts/FXB/ERC-1155/FXB.sol @@ -0,0 +1,250 @@ +// SPDX-License-Identifier: MIT +pragma solidity >=0.8.0; + +// ==================================================================== +// | ______ _______ | +// | / _____________ __ __ / ____(_____ ____ _____ ________ | +// | / /_ / ___/ __ `| |/_/ / /_ / / __ \/ __ `/ __ \/ ___/ _ \ | +// | / __/ / / / /_/ _> < / __/ / / / / / /_/ / / / / /__/ __/ | +// | /_/ /_/ \__,_/_/|_| /_/ /_/_/ /_/\__,_/_/ /_/\___/\___/ | +// | | +// ==================================================================== +// =============================== FXB ================================ +// ==================================================================== +// Allows issuing multiple bonds with multiple maturity dates. +// The tokens will be semi-fungible, tradable only with other tokens with matching issue and maturity dates +// Using ERC1155 to allow flexibility for multiple issues and maturities +// After maturity, they can be redeemed for FRAX + +// Frax Finance: https://github.com/FraxFinance + +// Primary Author(s) +// Travis Moore: https://github.com/FortisFortuna + +// Reviewer(s) / Contributor(s) +// Dennis: https://github.com/denett +// Sam Kazemian: https://github.com/samkazemian + +import "@openzeppelin/contracts/token/ERC1155/ERC1155.sol"; +import "@openzeppelin/contracts/access/Ownable.sol"; +import "@openzeppelin/contracts/security/Pausable.sol"; +import "@openzeppelin/contracts/utils/Strings.sol"; +import "@openzeppelin/contracts/token/ERC1155/extensions/ERC1155Burnable.sol"; +import "@openzeppelin/contracts/token/ERC1155/extensions/ERC1155Supply.sol"; +import "../Math/BokkyPooBahsDateTimeContract.sol"; +import "./FXBHelper.sol"; + +/// @custom:security-contact webmaster@frax.finance +contract FXB is ERC1155, Ownable, Pausable, ERC1155Burnable, ERC1155Supply { + + // Core + FXBHelper private fxb_helper; + + // Bond information + uint256 current_id; // Incremented as new bonds are created + mapping(uint256 => BondInfo) public bond_info; // bond id -> bond info + + // Minter related + address[] public minters_array; + mapping(address => bool) public minters; // Mapping is also used for faster verification + + + + /* ========== STRUCTS ========== */ + + struct BondInfo { + uint256 id; + string name; + uint256 issueTimestamp; + uint256 maturityTimestamp; + uint256 mintCap; + } + + + /* ========== CONSTRUCTOR ========== */ + + constructor( + address _fxb_helper + ) ERC1155("PLACEHOLDER_URI") { + fxb_helper = FXBHelper(_fxb_helper); + } + + /* ========== MODIFIERS ========== */ + + /// @notice Makes sure only minter can call + modifier onlyMinters() { + require(minters[msg.sender] == true, "Only minters"); + _; + } + + + /* ========== MINTER FUNCTIONS ========== */ + + /// @notice Mints a specified amount of one token id to an account + /// @param account The account to receive minted tokens + /// @param id The id of the token to mint + /// @param amount The amount of the token to mint + /// @param data Arbitrary data to include + function mint( + address account, + uint256 id, + uint256 amount, + bytes memory data + ) public onlyMinters { + require(block.timestamp >= bond_info[id].issueTimestamp, "Bond not issueable yet"); + require(block.timestamp < bond_info[id].maturityTimestamp, "Bond expired"); + _mint(account, id, amount, data); + } + + /// @notice Mints a specified amount of tokens for each token id to an account + /// @param to The account to receive minted tokens + /// @param ids Ids of the tokens being minted + /// @param amounts Amounts of the tokens being minted + /// @param data Arbitrary data to include + function mintBatch( + address to, + uint256[] memory ids, + uint256[] memory amounts, + bytes memory data + ) public onlyMinters { + for (uint i = 0; i < ids.length; i++){ + require(block.timestamp >= bond_info[ids[i]].issueTimestamp, + string(abi.encodePacked( + "Bond not issueable yet: #", + Strings.toString(ids[i]) + )) + ); + require(block.timestamp < bond_info[ids[i]].maturityTimestamp, + string(abi.encodePacked( + "Bond expired: #", + Strings.toString(ids[i]) + )) + ); + } + + + _mintBatch(to, ids, amounts, data); + } + + + /* ========== INTERNAL FUNCTIONS ========== */ + + /// @notice Hook that is called before any token transfer. Here it is used to track total supply of each id + /// @param operator The caller of the function + /// @param from Address of the token sender + /// @param to Address of the token recipient + /// @param ids Ids of the tokens being transferred + /// @param amounts Amounts of the tokens being transferred + /// @param data Arbitrary data to include + function _beforeTokenTransfer( + address operator, + address from, + address to, + uint256[] memory ids, + uint256[] memory amounts, + bytes memory data + ) internal override(ERC1155, ERC1155Supply) whenNotPaused { + super._beforeTokenTransfer(operator, from, to, ids, amounts, data); + } + + + /* ========== OWNER / GOVERNANCE FUNCTIONS ONLY ========== */ + + /// @notice Creates a new bond id. Will only be fungible with other bonds of the same id + /// @param issue_timestamp Date the bond can start being minted + /// @param maturity_timestamp Date the bond will mature and be redeemable + /// @param mint_cap Max amount of bonds that can be minted. Can be altered later + function createBondId(uint256 issue_timestamp, uint256 maturity_timestamp, uint256 mint_cap) external onlyOwner { + // Find the new id + uint256 bond_id = current_id + 1; + + // Generate the bond name + string memory bond_name = fxb_helper.generateBondName(bond_id, issue_timestamp, maturity_timestamp); + + // Insert the new bond information + bond_info[bond_id] = BondInfo( + bond_id, + bond_name, + issue_timestamp, + maturity_timestamp, + mint_cap + ); + + // Increment current_id + current_id++; + + emit BondIdCreated(bond_id, bond_name, issue_timestamp, maturity_timestamp, mint_cap); + } + + /// @notice Adds a minter + /// @param minter_address Address of minter to add + function addMinter(address minter_address) external onlyOwner { + require(minter_address != address(0), "Zero address detected"); + + require(minters[minter_address] == false, "Address already exists"); + minters[minter_address] = true; + minters_array.push(minter_address); + + emit MinterAdded(minter_address); + } + + /// @notice Removes a minter + /// @param minter_address Address of minter to remove + function removeMinter(address minter_address) external onlyOwner { + require(minter_address != address(0), "Zero address detected"); + require(minters[minter_address] == true, "Address nonexistent"); + + // Delete from the mapping + delete minters[minter_address]; + + // 'Delete' from the array by setting the address to 0x0 + for (uint i = 0; i < minters_array.length; i++){ + if (minters_array[i] == minter_address) { + minters_array[i] = address(0); // This will leave a null in the array and keep the indices the same + break; + } + } + + emit MinterRemoved(minter_address); + } + + /// @notice Sets mint cap(s) for token id(s) + /// @param ids The token ids whose mint caps will change + /// @param _mint_caps The mint caps + function setMintCapBatch(uint256[] memory ids, uint256[] memory _mint_caps) external onlyOwner { + for (uint i = 0; i < ids.length; i++){ + bond_info[ids[i]].mintCap = _mint_caps[ids[i]]; + emit MintCapsSet(ids[i], _mint_caps); + } + } + + /// @notice Sets the metadata URI + /// @param newuri The new metadata URI + /// @dev https://eips.ethereum.org/EIPS/eip-1155#metadata + function setURI(string memory newuri) public onlyOwner { + _setURI(newuri); + } + + /// @notice Pauses token transfers + function pause() public onlyOwner { + _pause(); + } + + /// @notice Unpauses token transfers + function unpause() public onlyOwner { + _unpause(); + } + + /* ========== EVENTS ========== */ + /// @dev Emits when a new bond is added + event BondIdCreated(uint256 new_id, string bond_name, uint256 issue_timestamp, uint256 maturity_timestamp, uint256 mint_cap); + + /// @dev Emits when a new minter is added + event MinterAdded(address pool_address); + + /// @dev Emits when mint cap(s) are set for token id(s) + event MintCapsSet(uint256 id, uint256[] new_mint_caps); + + /// @dev Emits when an existing minter is removed + event MinterRemoved(address pool_address); +} diff --git a/src/hardhat/contracts/Staking/FraxUnifiedFarmTemplate_V2.sol b/src/hardhat/old_contracts/Staking/FraxUnifiedFarmTemplate_V2.sol similarity index 100% rename from src/hardhat/contracts/Staking/FraxUnifiedFarmTemplate_V2.sol rename to src/hardhat/old_contracts/Staking/FraxUnifiedFarmTemplate_V2.sol diff --git a/src/hardhat/contracts/Staking/FraxUnifiedFarm_ERC20_V2.sol b/src/hardhat/old_contracts/Staking/FraxUnifiedFarm_ERC20_V2.sol similarity index 100% rename from src/hardhat/contracts/Staking/FraxUnifiedFarm_ERC20_V2.sol rename to src/hardhat/old_contracts/Staking/FraxUnifiedFarm_ERC20_V2.sol diff --git a/src/hardhat/contracts/Staking/FraxUnifiedFarm_ERC20_V2_BEFORE_MANUAL_MERGE.sol.old b/src/hardhat/old_contracts/Staking/FraxUnifiedFarm_ERC20_V2_BEFORE_MANUAL_MERGE.sol.old similarity index 100% rename from src/hardhat/contracts/Staking/FraxUnifiedFarm_ERC20_V2_BEFORE_MANUAL_MERGE.sol.old rename to src/hardhat/old_contracts/Staking/FraxUnifiedFarm_ERC20_V2_BEFORE_MANUAL_MERGE.sol.old diff --git a/src/hardhat/contracts/Staking/Variants/FraxUnifiedFarm_ERC20_Convex_frxETH_V2.sol b/src/hardhat/old_contracts/Staking/Variants/FraxUnifiedFarm_ERC20_Convex_frxETH_V2.sol similarity index 90% rename from src/hardhat/contracts/Staking/Variants/FraxUnifiedFarm_ERC20_Convex_frxETH_V2.sol rename to src/hardhat/old_contracts/Staking/Variants/FraxUnifiedFarm_ERC20_Convex_frxETH_V2.sol index b2acd9c1..e75e7eb3 100755 --- a/src/hardhat/contracts/Staking/Variants/FraxUnifiedFarm_ERC20_Convex_frxETH_V2.sol +++ b/src/hardhat/old_contracts/Staking/Variants/FraxUnifiedFarm_ERC20_Convex_frxETH_V2.sol @@ -35,6 +35,13 @@ contract FraxUnifiedFarm_ERC20_Convex_frxETH_V2 is FraxUnifiedFarm_ERC20_V2 { // curvePool = ICurvefrxETHETHPool(curveToken.minter()); // // address token0 = curvePool.coins(0); // // frax_is_token0 = false; // Doesn't matter for frxETH + + // Convex swETHfrxETH + stakingToken = IConvexStakingWrapperFrax(_stakingToken); + curveToken = I2poolToken(stakingToken.curveToken()); + curvePool = ICurvefrxETHETHPool(curveToken.minter()); + // address token0 = curvePool.coins(0); + // frax_is_token0 = false; // Doesn't matter for frxETH } function getLatestETHPriceE8() public view returns (int) { @@ -59,7 +66,7 @@ contract FraxUnifiedFarm_ERC20_Convex_frxETH_V2 is FraxUnifiedFarm_ERC20_V2 { // // Get the amount of FRAX 'inside' of the lp tokens // uint256 frax_per_lp_token; - // // Convex frxETH/ETH + // // Convex frxETH/ETH and Convex swETH/frxETH // // ============================================ // { // // Assume frxETH = ETH for pricing purposes diff --git a/src/hardhat/test/Fraxbonds/SlippageAuction.js b/src/hardhat/test/Fraxbonds/SlippageAuction.js new file mode 100644 index 00000000..3c6060f3 --- /dev/null +++ b/src/hardhat/test/Fraxbonds/SlippageAuction.js @@ -0,0 +1,115 @@ +/* +** Run test while genache is running on localhost: npx hardhat --network localhost test test/Fraxoracle-test.js +*/ + +const { expect } = require("chai"); +const { ethers } = require("hardhat"); +const { rlp } = require("ethereumjs-util"); +const { keccak256 } = require("@ethersproject/keccak256"); +const { toUtf8Bytes } = require("@ethersproject/strings"); + + +describe("SlippageAuction", function () { + it("setupContracts", async function () { + var contracts = await setupContracts(); + }); + + it("createAuction", async function () { + var contracts = await setupContracts(); + await contracts.token2.approve(contracts.auction.address,BigInt(1e18)); + await contracts.auction.createAuction(contracts.token1.address, contracts.token2.address, BigInt(1e18), BigInt(1e18), BigInt(1e14), BigInt(1e16)); + }); + + it("buy", async function () { + const [owner,user1,user2,user3,user4] = await ethers.getSigners(); + var contracts = await setupContracts(); + await contracts.token2.approve(contracts.auction.address,BigInt(1e18)); + await contracts.auction.createAuction(contracts.token1.address, contracts.token2.address, BigInt(1e18), BigInt(1e18), BigInt(1e14), BigInt(1e16)); + + for (var i=0;i<20;i++) { + console.log(await contracts.auction.getAmountOut(0,BigInt(1e16))); + await wait(10); + } + + await contracts.token1.connect(user1).approve(contracts.auction.address,BigInt(1e16)); + await contracts.auction.connect(user1).buy(0, BigInt(1e16),BigInt(1e16)); + }); + + it("exit", async function () { + const [owner,user1,user2,user3,user4] = await ethers.getSigners(); + var contracts = await setupContracts(); + var ownerBalance1Before = BigInt(await contracts.token1.balanceOf(owner.address)); + var ownerBalance2Before = BigInt(await contracts.token2.balanceOf(owner.address)); + var user1Balance1Before = BigInt(await contracts.token1.balanceOf(user1.address)); + var user1Balance2Before = BigInt(await contracts.token2.balanceOf(user1.address)); + await contracts.token2.approve(contracts.auction.address,BigInt(1e18)); + await contracts.auction.createAuction(contracts.token1.address, contracts.token2.address, BigInt(1e18), BigInt(1e18), BigInt(1e14), BigInt(1e16)); + + await wait(10); + + await contracts.token1.connect(user1).approve(contracts.auction.address,BigInt(1e16)); + await contracts.auction.connect(user1).buy(0, BigInt(1e16),BigInt(1e16)); + + await contracts.auction.connect(owner).exit(0); + + var ownerBalance1After = BigInt(await contracts.token1.balanceOf(owner.address)); + var ownerBalance2After = BigInt(await contracts.token2.balanceOf(owner.address)); + var user1Balance1After = BigInt(await contracts.token1.balanceOf(user1.address)); + var user1Balance2After = BigInt(await contracts.token2.balanceOf(user1.address)); + + expect(BigInt(ownerBalance1After)-BigInt(ownerBalance1Before)).to.equal(BigInt(user1Balance1Before)-BigInt(user1Balance1After)); + expect(BigInt(ownerBalance1After)-BigInt(ownerBalance1Before)).to.equal(BigInt(1e16)); + expect(BigInt(ownerBalance2Before)-BigInt(ownerBalance2After)).to.equal(BigInt(user1Balance2After)-BigInt(user1Balance1Before)); + expect(await contracts.token1.balanceOf(contracts.auction.address)).to.equal(0); + expect(await contracts.token2.balanceOf(contracts.auction.address)).to.equal(0); + }); +}); + +async function waitTill(time) { + await ethers.provider.send("evm_mine"); // mine the next block + do { + var currentblock = await ethers.provider.getBlock(await ethers.provider.getBlockNumber()); + var waitPeriod = time-currentblock.timestamp; + if (waitPeriod>0) { + await ethers.provider.send("evm_increaseTime", [waitPeriod]); // wait waitPeriod + await ethers.provider.send("evm_mine"); // mine the next block + } + } while (waitPeriod>0); +} + +async function wait(waitPeriod) { + if (waitPeriod>0) { + await ethers.provider.send("evm_increaseTime", [waitPeriod]); // wait waitPeriod + await ethers.provider.send("evm_mine"); // mine the next block + } +} + +async function setupContracts() { + const [owner,user1,user2,user3,user4] = await ethers.getSigners(); + + // Deploy token0/token1 token and distribute + const DummyToken = await ethers.getContractFactory("DummyToken"); + var token1 = await DummyToken.deploy(); + await token1.mint(owner.address,ethers.constants.MaxUint256); + var token2 = await DummyToken.deploy(); + await token2.mint(owner.address,ethers.constants.MaxUint256); + + await token1.transfer(user1.address, "1000000000000000000000"); + await token2.transfer(user1.address, "1000000000000000000000"); + await token1.transfer(user2.address, "1000000000000000000000"); + await token2.transfer(user2.address, "1000000000000000000000"); + await token1.transfer(user3.address, "1000000000000000000000"); + await token2.transfer(user3.address, "1000000000000000000000"); + await token1.transfer(user4.address, "1000000000000000000000"); + await token2.transfer(user4.address, "1000000000000000000000"); + + const SlippageAuction = await ethers.getContractFactory("SlippageAuction"); + var auction = await SlippageAuction.deploy(); + + // Pack contracts in an object + var result = {}; + result.token1 = token1; + result.token2 = token2; + result.auction = auction; + return result; +} diff --git a/src/hardhat/test/FrxETH/FrxETHMiniRouter-Tests.js b/src/hardhat/test/FrxETH/FrxETHMiniRouter-Tests.js new file mode 100644 index 00000000..43ab5d74 --- /dev/null +++ b/src/hardhat/test/FrxETH/FrxETHMiniRouter-Tests.js @@ -0,0 +1,119 @@ +/* +** Run test while genache is running on localhost: npx hardhat --network localhost test test/Fraxoracle-test.js +*/ + +const { expect } = require("chai"); +const { ethers } = require("hardhat"); +const { BigNumber } = require("@ethersproject/bignumber"); + +describe("FrxETHMiniRouter-Tests", function () { + it("setupContracts", async function () { + var contracts = await setupContracts(); + }); + + it("ETH -> frxETH", async function () { + const [owner] = await ethers.getSigners(); + const provider = ethers.provider; + const { mini_router, frxeth, sfrxeth } = await setupContracts(); + + // Get ETH, frxETH, and sfrxETH balances before + const eth_before = BigNumber.from(await provider.getBalance(owner.address)); + const frxeth_before = BigNumber.from(await frxeth.balanceOf(owner.address)); + const sfrxeth_before = BigNumber.from(await sfrxeth.balanceOf(owner.address)); + + // Get some frxETH + const params = [ + owner.address, + false, + 0, + { value: ethers.utils.parseEther("0.1") } + ]; + + const expected_out = await mini_router.connect(owner).callStatic.sendETH(...params); + await mini_router.connect(owner).sendETH(...params); + + // Get ETH, frxETH, and sfrxETH balances after + const eth_after = BigNumber.from(await provider.getBalance(owner.address)); + const frxeth_after = BigNumber.from(await frxeth.balanceOf(owner.address)); + const sfrxeth_after = BigNumber.from(await sfrxeth.balanceOf(owner.address)); + + // Calculate changes + const eth_delta = eth_before.sub(eth_after); + const frxeth_delta = frxeth_after.sub(frxeth_before); + const sfrxeth_delta = sfrxeth_after.sub(sfrxeth_before); + + // Print deltas + console.log("ETH Used: ", eth_delta.toString()); // Will have gas too + console.log("frxETH Generated: ", frxeth_delta.toString()); + console.log("sfrxETH Generated: ", sfrxeth_delta.toString()); + + // Do checks + expect(frxeth_delta).to.be.closeTo(ethers.utils.parseEther("0.1"), ethers.utils.parseEther("0.005")); + expect(sfrxeth_delta).to.be.equal(BigNumber.from(0)); + }); + + it("ETH -> sfrxETH", async function () { + const [owner] = await ethers.getSigners(); + const provider = ethers.provider; + const { mini_router, frxeth, sfrxeth } = await setupContracts(); + + // Get ETH, frxETH, and sfrxETH balances before + const eth_before = BigNumber.from(await provider.getBalance(owner.address)); + const sfrxeth_before = BigNumber.from(await sfrxeth.balanceOf(owner.address)); + + // Get some sfrxETH + const params = [ + owner.address, + true, + 0, + { value: ethers.utils.parseEther("0.1") } + ]; + + const expected_out = await mini_router.connect(owner).callStatic.sendETH(...params); + await mini_router.connect(owner).sendETH(...params); + + // Get ETH, frxETH, and sfrxETH balances after + const eth_after = BigNumber.from(await provider.getBalance(owner.address)); + const sfrxeth_after = BigNumber.from(await sfrxeth.balanceOf(owner.address)); + + // Calculate changes + const eth_delta = eth_before.sub(eth_after); + const frxeth_delta = expected_out.frxeth_used; + const sfrxeth_delta = sfrxeth_after.sub(sfrxeth_before); + + // Print deltas + console.log("ETH Used: ", eth_delta.toString()); // Will have gas too + console.log("frxETH Used: ", frxeth_delta.toString()); + console.log("sfrxETH Generated: ", sfrxeth_delta.toString()); + + // Do checks + expect(frxeth_delta).to.be.closeTo(ethers.utils.parseEther("0.1"), ethers.utils.parseEther("0.005")); + expect(sfrxeth_delta.gt("0")); + + // Do checks + console.log("ETH Used: ", eth_before.sub(eth_after).toString()); // Will have gas too + }); + + +}); + + +async function setupContracts() { + const [owner,user1,user2,user3,user4] = await ethers.getSigners(); + + const ERC20 = await ethers.getContractFactory("contracts/ERC20/ERC20.sol:ERC20"); + const frxeth = await ERC20.attach("0x5E8422345238F34275888049021821E8E08CAa1f"); + const sfrxeth = await ERC20.attach("0xac3E018457B222d93114458476f3E3416Abbe38F"); + + const FrxETHMiniRouter = await ethers.getContractFactory("FrxETHMiniRouter"); + const mini_router = await FrxETHMiniRouter.deploy(); + + // Pack contracts in an object + var result = { + mini_router, + frxeth, + sfrxeth + }; + + return result; +} diff --git a/src/hardhat/test/__ARBITRUM/ComboOracle_KyberSwapElastic-Tests_ARBI.js b/src/hardhat/test/__ARBITRUM/ComboOracle_KyberSwapElastic-Tests_ARBI.js new file mode 100644 index 00000000..671dd7da --- /dev/null +++ b/src/hardhat/test/__ARBITRUM/ComboOracle_KyberSwapElastic-Tests_ARBI.js @@ -0,0 +1,192 @@ +const path = require('path'); +const envPath = path.join(__dirname, '../../../.env'); +require('dotenv').config({ path: envPath }); + +const BigNumber = require('bignumber.js'); +const util = require('util'); +const chalk = require('chalk'); +const Contract = require('web3-eth-contract'); +const { expectRevert, time } = require('@openzeppelin/test-helpers'); + +const constants = require(path.join(__dirname, '../../../../dist/types/constants')); +const utilities = require(path.join(__dirname, '../../../../dist/misc/utilities')); + +// Set provider for all later instances to use +Contract.setProvider('http://127.0.0.1:7545'); + +global.artifacts = artifacts; +global.web3 = web3; + +const hre = require("hardhat"); + +// Core +const CrossChainCanonicalFRAX = artifacts.require("ERC20/__CROSSCHAIN/CrossChainCanonicalFRAX"); +const CrossChainCanonicalFXS = artifacts.require("ERC20/__CROSSCHAIN/CrossChainCanonicalFXS"); + +// Misc +const IAntiSnipAttackPositionManager = artifacts.require("Misc_AMOs/kyberswap/IAntiSnipAttackPositionManager"); + +// Oracles +const ComboOracle = artifacts.require("contracts/Oracle/ComboOracle"); +const ComboOracle_KyberSwapElastic = artifacts.require("Oracle/ComboOracle_KyberSwapElastic"); + + +// Staking + +// Constants +const BIG2 = new BigNumber("1e2"); +const BIG6 = new BigNumber("1e6"); +const BIG9 = new BigNumber("1e9"); +const BIG12 = new BigNumber("1e12"); +const BIG18 = new BigNumber("1e18"); +const TIMELOCK_DELAY = 86400 * 2; // 2 days +const DUMP_ADDRESS = "0x6666666666666666666666666666666666666666"; +const METAMASK_ADDRESS = "0x6A24A4EcA5Ed225CeaE6895e071a74344E2853F5"; +const METAPOOL_ADDRESS = "0xC7E0ABfe4e0278af66F69C93CD3fD6810198b15B"; // hard-coded from deployment, can break + +contract('CrossChainBridgeBacker_ARBI_AnySwap-Tests', async (accounts) => { + CONTRACT_ADDRESSES = constants.CONTRACT_ADDRESSES; + + // Account addresses + let ORIGINAL_ARBITRUM_ONE_ADDRESS; + let COLLATERAL_FRAX_AND_FXS_OWNER; + let ORACLE_ADMIN; + let POOL_CREATOR; + let TIMELOCK_ADMIN; + let GOVERNOR_GUARDIAN_ADDRESS; + let STAKING_OWNER; + let STAKING_REWARDS_DISTRIBUTOR; + let INVESTOR_CUSTODIAN_ADDRESS; + let CROSS_CHAIN_CUSTODIAN_ADDRESS; + let AMO_CUSTODIAN_ADDRESS; + + // Useful addresses + + // Initialize core instances + let canFRAX_instance; + let canFXS_instance; + + // Initialize misc instances + let kyberNFTPositionMgr; + + // Initialize oracle instances + let combo_oracle_instance; + let combo_oracle_kyberswap_elastic_instance; + + + beforeEach(async() => { + + await hre.network.provider.request({ + method: "hardhat_impersonateAccount", + params: [process.env.ARBITRUM_ONE_ADDRESS]} + ); + + // Constants + ORIGINAL_ARBITRUM_ONE_ADDRESS = process.env.ARBITRUM_ONE_ADDRESS; + DEPLOYER_ADDRESS = accounts[0]; + COLLATERAL_FRAX_AND_FXS_OWNER = accounts[1]; + ORACLE_ADMIN = accounts[2]; + POOL_CREATOR = accounts[3]; + TIMELOCK_ADMIN = accounts[4]; + GOVERNOR_GUARDIAN_ADDRESS = accounts[5]; + STAKING_OWNER = accounts[6]; + STAKING_REWARDS_DISTRIBUTOR = accounts[7]; + INVESTOR_CUSTODIAN_ADDRESS = accounts[8]; + CROSS_CHAIN_CUSTODIAN_ADDRESS = accounts[9]; + AMO_CUSTODIAN_ADDRESS = accounts[10]; + + // Fill core contract instances + canFRAX_instance = await CrossChainCanonicalFRAX.deployed(); + canFXS_instance = await CrossChainCanonicalFXS.deployed(); + + // Fill misc instances + kyberNFTPositionMgr = await IAntiSnipAttackPositionManager.at("0xe222fBE074A436145b255442D919E4E3A6c6a480"); + + // Fill oracle instances + combo_oracle_instance = await ComboOracle.at("0xfD9FA9b80BFEc955bB042ea4D75A50537D8d54fe"); + combo_oracle_kyberswap_elastic_instance = await ComboOracle_KyberSwapElastic.new( + COLLATERAL_FRAX_AND_FXS_OWNER, + [ + combo_oracle_instance.address, + "0xC7a590291e07B9fe9E64b86c58fD8fC764308C4A", + "0xe222fBE074A436145b255442D919E4E3A6c6a480", + "0xF9c2b5746c946EF883ab2660BbbB1f10A5bdeAb4", + "0x8Fd8Cb948965d9305999D767A02bf79833EADbB3" + ] + ); + }); + + afterEach(async() => { + await hre.network.provider.request({ + method: "hardhat_stopImpersonatingAccount", + params: [process.env.ARBITRUM_ONE_ADDRESS]} + ); + }) + + // MAIN TEST + // ================================================================ + it("Main test", async () => { + + // **************************************************************************************** + // **************************************************************************************** + console.log(chalk.green("***********************Initialization*************************")); + // **************************************************************************************** + // **************************************************************************************** + + console.log("------------------------------------------------"); + console.log("Add MAI to the ComboOracle"); + await hre.network.provider.request({ + method: "hardhat_impersonateAccount", + params: ["0xe61D9ed1e5Dc261D1e90a99304fADCef2c76FD10"] + }); + + await combo_oracle_instance.batchSetOracleInfoDirect( + [ + [ + "0x3F56e0c36d275367b8C502090EDF38289b3dEa0d", + "0x59644ec622243878d1464A9504F9e9a31294128a", + 0, + "0x0000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000", + "0x00000000", + 0 + ] + ], + { from: "0xe61D9ed1e5Dc261D1e90a99304fADCef2c76FD10" } + ); + + await hre.network.provider.request({ + method: "hardhat_stopImpersonatingAccount", + params: ["0xe61D9ed1e5Dc261D1e90a99304fADCef2c76FD10"] + }); + + + + console.log("------------------------------------------------"); + console.log("Check the NFT info"); + + const nft_basic_info = await combo_oracle_kyberswap_elastic_instance.getNFTBasicInfo.call(6946); + console.log(nft_basic_info); + + const nft_value_info = await combo_oracle_kyberswap_elastic_instance.getNFTValueInfo.call(6946); + console.log(nft_value_info); + + // **************************************************************************************** + // **************************************************************************************** + console.log(chalk.green("**************************MAIN CODE***************************")); + // **************************************************************************************** + // **************************************************************************************** + console.log("----------------------------"); + + + console.log(chalk.hex("#ff8b3d").bold("=================INITIALIZE================")); + + + + console.log(chalk.hex("#ff8b3d").bold("=================MINT canFRAX AND canFXS================")); + + + + }); + +}); \ No newline at end of file diff --git a/src/hardhat/test/truffle-fixture-Arbitrum.js b/src/hardhat/test/truffle-fixture-Arbitrum.js deleted file mode 100644 index 6ce46dc1..00000000 --- a/src/hardhat/test/truffle-fixture-Arbitrum.js +++ /dev/null @@ -1,258 +0,0 @@ -const { ethers, upgrades } = require("hardhat"); -const path = require('path'); -const envPath = path.join(__dirname, '../../.env'); -require('dotenv').config({ path: envPath }); -const hre = require("hardhat"); -const BigNumber = require('bignumber.js'); -const chalk = require('chalk'); -const constants = require(path.join(__dirname, '../../../dist/types/constants')); - -// Core -const anyFRAX = artifacts.require("ERC20/__CROSSCHAIN/anyFRAX"); -const anyFXS = artifacts.require("ERC20/__CROSSCHAIN/anyFXS"); -const arbiUSDC = artifacts.require("ERC20/__CROSSCHAIN/IArbFiatToken"); -const arbiUSDT = artifacts.require("ERC20/__CROSSCHAIN/IArbFiatToken"); -const CrossChainCanonicalFRAX = artifacts.require("ERC20/__CROSSCHAIN/CrossChainCanonicalFRAX"); -const CrossChainCanonicalFXS = artifacts.require("ERC20/__CROSSCHAIN/CrossChainCanonicalFXS"); - -// Bridges -const CrossChainBridgeBacker_ARBI_AnySwap = artifacts.require("Bridges/Arbitrum/CrossChainBridgeBacker_ARBI_AnySwap"); - -// Oracles -const CrossChainOracle = artifacts.require("Oracle/CrossChainOracle"); - -// Staking contracts -const FraxCCFarmV2_ArbiCurveVSTFRAX = artifacts.require("Staking/Variants/FraxCCFarmV2_ArbiCurveVSTFRAX"); -const FraxCCFarmV2_SaddleArbUSDv2 = artifacts.require("Staking/Variants/FraxCCFarmV2_SaddleArbUSDv2"); -const FraxCCFarmV3_ArbiSaddleL2D4 = artifacts.require("Staking/Variants/FraxCCFarmV3_ArbiSaddleL2D4"); - -// AMOs -const SushiSwapLiquidityAMO_ARBI = artifacts.require("Misc_AMOs/__CROSSCHAIN/Arbitrum/SushiSwapLiquidityAMO_ARBI.sol"); -const CurveAMO_ARBI = artifacts.require("Misc_AMOs/__CROSSCHAIN/Arbitrum/CurveAMO_ARBI.sol"); - -module.exports = async (deployer) => { - const THE_ACCOUNTS = await hre.web3.eth.getAccounts(); - console.log("THE_ACCOUNTS[0] in truffle-fixture: ", THE_ACCOUNTS[0]); - - // Get the necessary instances - let CONTRACT_ADDRESSES; - - // Core - let anyFRAX_instance; - let anyFXS_instance; - let arbiUSDC_instance; - let arbiUSDT_instance; - let cross_chain_canonical_frax_instance; - let cross_chain_canonical_fxs_instance; - - // Bridges - let cross_chain_bridge_backer_instance; - - // Oracles - let cross_chain_oracle_instance; - - // Staking - let FraxCCFarmV2_ArbiCurveVSTFRAX_instance; - let FraxCCFarmV2_SaddleArbUSDv2_instance; - let FraxCCFarmV3_ArbiSaddleL2D4_instance; - - // AMOs - let curve_amo_arbi_instance; - let sushiswap_liquidity_amo_arbi_instance; - - // Assign live contract addresses - CONTRACT_ADDRESSES = constants.CONTRACT_ADDRESSES; - - // Core - anyFRAX_instance = await anyFRAX.at(CONTRACT_ADDRESSES.arbitrum.bridge_tokens.anyFRAX); - anyFXS_instance = await anyFXS.at(CONTRACT_ADDRESSES.arbitrum.bridge_tokens.anyFXS); - arbiUSDC_instance = await arbiUSDC.at(CONTRACT_ADDRESSES.arbitrum.collaterals.arbiUSDC); - arbiUSDT_instance = await arbiUSDT.at(CONTRACT_ADDRESSES.arbitrum.collaterals.arbiUSDT); - cross_chain_canonical_frax_instance = await CrossChainCanonicalFRAX.at(CONTRACT_ADDRESSES.arbitrum.canonicals.FRAX); - cross_chain_canonical_fxs_instance = await CrossChainCanonicalFXS.at(CONTRACT_ADDRESSES.arbitrum.canonicals.FXS); - - // Bridges - cross_chain_bridge_backer_instance = await CrossChainBridgeBacker_ARBI_AnySwap.at(CONTRACT_ADDRESSES.arbitrum.bridge_backers.anySwap); - - // Oracles - cross_chain_oracle_instance = await CrossChainOracle.at(CONTRACT_ADDRESSES.arbitrum.oracles.cross_chain_oracle); - - // Staking - - // AMOs - sushiswap_liquidity_amo_arbi_instance = await SushiSwapLiquidityAMO_ARBI.at(CONTRACT_ADDRESSES.arbitrum.amos.sushiswap_liquidity); - curve_amo_arbi_instance = await CurveAMO_ARBI.at(CONTRACT_ADDRESSES.arbitrum.amos.curve); - - // ANY NEW CONTRACTS, PUT BELOW HERE - // .new() calls and deployments - // ========================================================================== - - // console.log(chalk.yellow('========== CrossChainCanonicalFRAX ==========')); - // // CrossChainCanonicalFRAX - // cross_chain_canonical_frax_instance = await CrossChainCanonicalFRAX.new( - // "Frax", - // "FRAX", - // THE_ACCOUNTS[1], - // "100000000000000000000000", - // "0x36A87d1E3200225f881488E4AEedF25303FebcAe", - // [ - // anyFRAX_instance.address - // ] - // ); - - // console.log(chalk.yellow('========== CrossChainCanonicalFXS ==========')); - // // CrossChainCanonicalFXS - // cross_chain_canonical_fxs_instance = await CrossChainCanonicalFXS.new( - // "Frax Share", - // "FXS", - // THE_ACCOUNTS[1], - // "100000000000000000000000", - // "0x36A87d1E3200225f881488E4AEedF25303FebcAe", - // [ - // anyFXS_instance.address - // ] - // ); - - // // Set some starting prices - // await cross_chain_oracle_instance.setPrice(anyFRAX_instance.address, new BigNumber("1e6"), { from: THE_ACCOUNTS[1] }); - // await cross_chain_oracle_instance.setPrice(cross_chain_canonical_frax_instance.address, new BigNumber("1e6"), { from: THE_ACCOUNTS[1] }); - // await cross_chain_oracle_instance.setPrice(anyFXS_instance.address, new BigNumber("5110000"), { from: THE_ACCOUNTS[1] }); - // await cross_chain_oracle_instance.setPrice(cross_chain_canonical_fxs_instance.address, new BigNumber("5110000"), { from: THE_ACCOUNTS[1] }); - - // console.log(chalk.yellow('========== CrossChainBridgeBacker_ARBI_AnySwap ==========')); - // // CrossChainBridgeBacker_ARBI_AnySwap - // cross_chain_bridge_backer_instance = await CrossChainBridgeBacker_ARBI_AnySwap.new( - // THE_ACCOUNTS[1], - // CONTRACT_ADDRESSES.ethereum.misc.timelock, - // cross_chain_oracle_instance.address, - // [ - // anyFRAX_instance.address, // anyFRAX - // cross_chain_canonical_frax_instance.address, // canFRAX - // anyFXS_instance.address, // anyFXS - // cross_chain_canonical_fxs_instance.address, // canFXS - // CONTRACT_ADDRESSES.arbitrum.collaterals.arbiUSDC - // ], - // [ - // anyFRAX_instance.address, // Swapout - // anyFXS_instance.address, // Swapout - // CONTRACT_ADDRESSES.arbitrum.collaterals.arbiUSDC // DISABLED - // ], - // "0x0000000000000000000000000000000000000000", // Arbitrum goes to same address on other side - // "", - // "FRAX Arbitrum AnySwap CrossChainBridgeBacker", - // ); - - // console.log(chalk.yellow("========== ScreamAMO ==========")); - // scream_amo_instance = await ScreamAMO.new( - // THE_ACCOUNTS[1], - // THE_ACCOUNTS[10], - // cross_chain_canonical_frax_instance.address, - // "0x4E6854EA84884330207fB557D1555961D85Fc17E", - // cross_chain_bridge_backer_instance.address, - // ); - // console.log(CONTRACT_ADDRESSES.arbitrum.pair_tokens["Sushi canFRAX/canFXS"]); - // console.log(CONTRACT_ADDRESSES.arbitrum.pair_tokens["Sushi canFRAX/arbiUSDC"]); - // console.log(CONTRACT_ADDRESSES.arbitrum.pair_tokens["Sushi canFXS/arbiUSDC"]); - - // console.log(chalk.yellow("========== SushiSwapLiquidityAMO_ARBI ==========")); - // sushiswap_liquidity_amo_arbi_instance = await SushiSwapLiquidityAMO_ARBI.new( - // THE_ACCOUNTS[1], - // THE_ACCOUNTS[10], - // cross_chain_canonical_frax_instance.address, - // cross_chain_canonical_fxs_instance.address, - // CONTRACT_ADDRESSES.arbitrum.collaterals.arbiUSDC, - // cross_chain_bridge_backer_instance.address, - // [ - // CONTRACT_ADDRESSES.arbitrum.pair_tokens["Sushi canFRAX/canFXS"], - // CONTRACT_ADDRESSES.arbitrum.pair_tokens["Sushi canFRAX/arbiUSDC"], - // CONTRACT_ADDRESSES.arbitrum.pair_tokens["Sushi canFXS/arbiUSDC"] - // ] - // ); - - console.log(chalk.yellow("========== FraxCCFarmV2_ArbiCurveVSTFRAX ==========")); - // FraxCCFarmV2_ArbiCurveVSTFRAX - FraxCCFarmV2_ArbiCurveVSTFRAX_instance = await FraxCCFarmV2_ArbiCurveVSTFRAX.new( - THE_ACCOUNTS[6], - CONTRACT_ADDRESSES.arbitrum.bridge_tokens.anyFXS, // anyFXS - CONTRACT_ADDRESSES.arbitrum.canonicals.FXS, // canFXS - CONTRACT_ADDRESSES.arbitrum.reward_tokens.VSTA, - CONTRACT_ADDRESSES.arbitrum.pair_tokens["Curve VSTFRAX-f"], - CONTRACT_ADDRESSES.arbitrum.canonicals.FRAX, // canFRAX - "0x0000000000000000000000000000000000000000", // Timelock - "0x0000000000000000000000000000000000000000", // Rewarder - ); - - console.log(chalk.yellow("========== FraxCCFarmV2_SaddleArbUSDv2 ==========")); - // FraxCCFarmV2_SaddleArbUSDv2 - FraxCCFarmV2_SaddleArbUSDv2_instance = await FraxCCFarmV2_SaddleArbUSDv2.new( - THE_ACCOUNTS[6], - CONTRACT_ADDRESSES.arbitrum.bridge_tokens.anyFXS, // anyFXS - CONTRACT_ADDRESSES.arbitrum.canonicals.FXS, // canFXS - CONTRACT_ADDRESSES.arbitrum.reward_tokens.SPELL, // Should be SDL, but run tests with SPELL - CONTRACT_ADDRESSES.arbitrum.bearer_tokens.saddleArbUSDv2, - CONTRACT_ADDRESSES.arbitrum.canonicals.FRAX, // canFRAX - "0x0000000000000000000000000000000000000000", // Timelock - "0x0000000000000000000000000000000000000000", // Rewarder - ); - - console.log(chalk.yellow("========== FraxCCFarmV3_ArbiSaddleL2D4 ==========")); - // FraxCCFarmV3_ArbiSaddleL2D4 - FraxCCFarmV3_ArbiSaddleL2D4_instance = await FraxCCFarmV3_ArbiSaddleL2D4.new( - THE_ACCOUNTS[6], - CONTRACT_ADDRESSES.arbitrum.canonicals.FXS, // canFXS - CONTRACT_ADDRESSES.arbitrum.reward_tokens.SDL, - CONTRACT_ADDRESSES.arbitrum.bearer_tokens.saddleL2D4, - CONTRACT_ADDRESSES.arbitrum.canonicals.FRAX, // canFRAX - CONTRACT_ADDRESSES.arbitrum.multisigs.Comptrollers, // Timelock - "0x0000000000000000000000000000000000000000", // Rewarder - ); - - // console.log(chalk.yellow("========== CurveAMO_ARBI ==========")); - // curve_amo_arbi_instance = await CurveAMO_ARBI.new( - // THE_ACCOUNTS[1], - // THE_ACCOUNTS[10], - // [ - // CONTRACT_ADDRESSES.arbitrum.canonicals.FRAX, - // CONTRACT_ADDRESSES.arbitrum.collaterals.arbiUSDC, - // CONTRACT_ADDRESSES.arbitrum.collaterals.arbiUSDT, - // CONTRACT_ADDRESSES.arbitrum.bridge_backers.anySwap, - // ], - // [ - // "0xf07d553B195080F84F582e88ecdD54bAa122b279", - // "0xbF7E49483881C76487b0989CD7d9A8239B20CA41", - // "0x7f90122BF0700F9E7e1F688fe926940E8839F353", - // "0x7544Fe3d184b6B55D6B36c3FCA1157eE0Ba30287" - // ] - // ); - - // ---------------------------------------------- - await hre.network.provider.request({ - method: "hardhat_impersonateAccount", - params: [process.env.ARBITRUM_ONE_ADDRESS] - }); - - console.log(chalk.yellow('========== WHITELIST AMOS FOR CrossChainBridgeBacker_ARBI_AnySwap ==========')); - // await cross_chain_bridge_backer_instance.addAMO(scream_amo_instance.address, false, { from: process.env.ARBITRUM_ONE_ADDRESS }); - // await cross_chain_bridge_backer_instance.addAMO(sushiswap_liquidity_amo_arbi_instance.address, false, { from: process.env.ARBITRUM_ONE_ADDRESS }); - // await cross_chain_bridge_backer_instance.addAMO(curve_amo_arbi_instance.address, false, { from: process.env.ARBITRUM_ONE_ADDRESS }); - - await hre.network.provider.request({ - method: "hardhat_stopImpersonatingAccount", - params: [process.env.ARBITRUM_ONE_ADDRESS] - }); - - // ---------------------------------------------- - CrossChainCanonicalFRAX.setAsDeployed(cross_chain_canonical_frax_instance); - CrossChainCanonicalFXS.setAsDeployed(cross_chain_canonical_fxs_instance); - anyFRAX.setAsDeployed(anyFRAX_instance); - anyFXS.setAsDeployed(anyFXS_instance); - arbiUSDC.setAsDeployed(arbiUSDC_instance); - arbiUSDT.setAsDeployed(arbiUSDT_instance); - CrossChainBridgeBacker_ARBI_AnySwap.setAsDeployed(cross_chain_bridge_backer_instance); - CrossChainOracle.setAsDeployed(cross_chain_oracle_instance); - FraxCCFarmV2_ArbiCurveVSTFRAX.setAsDeployed(FraxCCFarmV2_ArbiCurveVSTFRAX_instance); - FraxCCFarmV2_SaddleArbUSDv2.setAsDeployed(FraxCCFarmV2_SaddleArbUSDv2_instance); - FraxCCFarmV3_ArbiSaddleL2D4.setAsDeployed(FraxCCFarmV3_ArbiSaddleL2D4_instance); - SushiSwapLiquidityAMO_ARBI.setAsDeployed(sushiswap_liquidity_amo_arbi_instance); - CurveAMO_ARBI.setAsDeployed(curve_amo_arbi_instance); -} \ No newline at end of file diff --git a/src/hardhat/test/truffle-fixture-Ethereum.js b/src/hardhat/test/truffle-fixture-Ethereum.js new file mode 100644 index 00000000..72407e03 --- /dev/null +++ b/src/hardhat/test/truffle-fixture-Ethereum.js @@ -0,0 +1,593 @@ +const { ethers, upgrades } = require("hardhat"); +const path = require('path'); +const envPath = path.join(__dirname, '../../.env'); +require('dotenv').config({ path: envPath }); +const hre = require("hardhat"); +const BigNumber = require('bignumber.js'); +const chalk = require('chalk'); +const constants = require(path.join(__dirname, '../../../dist/types/constants')); + +// FPI Core +const FPI = artifacts.require("FPI/FPI"); +const FPIS = artifacts.require("FPI/FPIS"); +const FPIControllerPool = artifacts.require("FPI/FPIControllerPool.sol"); + +// FRAX Core +const FRAXStablecoin = artifacts.require("Frax/IFrax"); +const FRAXShares = artifacts.require("FXS/FRAXShares"); +const GovernorAlpha = artifacts.require("Governance/GovernorAlpha"); +const Timelock = artifacts.require("Governance/Timelock"); +const FraxPoolV3 = artifacts.require("Frax/Pools/FraxPoolV3"); + +// Gauge +const LiquidityGaugeV2 = artifacts.require("Curve/ILiquidityGaugeV2"); +// const FraxGaugeController = artifacts.require("Curve/FraxGaugeController"); +const FraxGaugeControllerV2 = artifacts.require("Curve/FraxGaugeControllerV2"); +const FraxGaugeFXSRewardsDistributor = artifacts.require("Curve/IFraxGaugeFXSRewardsDistributor"); + +// Misc +const ERC20 = artifacts.require("contracts/ERC20/ERC20.sol:ERC20"); + +// Misc AMOs +const FraxAMOMinter = artifacts.require("Frax/FraxAMOMinter"); +// const FraxLiquidityBridger_AUR_Rainbow = artifacts.require("Bridges/Aurora/FraxLiquidityBridger_AUR_Rainbow"); +const TWAMM_AMO = artifacts.require("Misc_AMOs/TWAMM_AMO"); + +// Oracles +const ComboOracle_KyberSwapElastic = artifacts.require("Oracle/ComboOracle_KyberSwapElastic"); +const CPITrackerOracle = artifacts.require("Oracle/CPITrackerOracle"); +const UniV3TWAPOracle = artifacts.require("Oracle/UniV3TWAPOracle"); + +// Staking contracts +const FraxUnifiedFarm_ERC20_FraxswapV2 = artifacts.require("Staking/Variants/FraxUnifiedFarm_ERC20_FraxswapV2"); +// const FraxUnifiedFarm_ERC20_Fraxswap_FRAX_pitchFXS = artifacts.require("Staking/Variants/FraxUnifiedFarm_ERC20_Fraxswap_FRAX_pitchFXS"); +// const FraxUnifiedFarm_ERC20_Temple_FRAX_TEMPLE = artifacts.require("Staking/Variants/FraxUnifiedFarm_ERC20_Temple_FRAX_TEMPLE"); +const FraxFarmRageQuitter_Temple = artifacts.require("Staking/FraxFarmRageQuitter_Temple"); +const FraxMiddlemanGauge_ARBI_Curve_VSTFRAX = artifacts.require("Curve/Middleman_Gauges/FraxMiddlemanGauge_ARBI_Curve_VSTFRAX"); +const FraxUnifiedFarm_KyberSwapElastic = artifacts.require("Staking/Variants/FraxUnifiedFarm_KyberSwapElastic"); +const FraxUnifiedFarm_PosRebase_aFRAX = artifacts.require("Staking/Variants/FraxUnifiedFarm_PosRebase_aFRAX"); + +// TWAMM +const UniV2TWAMMFactory = artifacts.require("Fraxswap/core/FraxswapFactory"); +const UniV2TWAMMPair = artifacts.require("Fraxswap/core/FraxswapPair"); +const UniV2TWAMMRouter = artifacts.require("Fraxswap/periphery/FraxswapRouter"); + +// Uniswap related +const IUniswapV2Factory = artifacts.require("Uniswap/Interfaces/IUniswapV2Factory"); +const IUniswapV2Pair = artifacts.require("contracts/Uniswap/Interfaces/IUniswapV2Pair.sol:IUniswapV2Pair"); +const IUniswapV2Router02 = artifacts.require("Uniswap/Interfaces/IUniswapV2Router02"); + +// Uniswap V3 related +const IUniswapV3PositionsNFT = artifacts.require("Uniswap_V3/IUniswapV3PositionsNFT"); + +// veFPIS +const veFPIS = artifacts.require("Curve/veFPIS"); +const veFPISYieldDistributorV5 = artifacts.require("Staking/veFPISYieldDistributorV5"); + +// veFXS +const veFXS = artifacts.require("Curve/IveFXS"); +const veFXSYieldDistributorV4 = artifacts.require("Staking/veFXSYieldDistributorV4"); +const veFXSBoost = artifacts.require("Curve/IVotingEscrowDelegation"); +const veFXSBoostDelegationProxy = artifacts.require("Curve/IDelegationProxy"); + + +module.exports = async (deployer) => { + const THE_ACCOUNTS = await hre.web3.eth.getAccounts(); + console.log("THE_ACCOUNTS[0] in truffle-fixture: ", THE_ACCOUNTS[0]); + let CONTRACT_ADDRESSES; + + // Get the necessary instances + // ====================================================== + + // FPI Core + let fpi_instance; + let fpis_instance; + let fpi_controller_pool_instance; + + // FRAX Core + let frax_instance; + let fxs_instance; + let governance_instance; + let timelock_instance; + let pool_instance_v3; + + // Gauge + let frax_gauge_controller; + let frax_gauge_controller_v2; + let gauge_rewards_distributor_instance; + let liquidity_gauge_v2_instance; + + // Misc AMOs + let frax_amo_minter_instance; + let frax_liquidity_bridger_aur_rainbow_instance; + let twamm_amo_instance; + + // Oracles + let combo_oracle_kyberswap_elastic_instance; + let cpi_tracker_oracle_instance; + let univ3_twap_oracle_instance; + + // Staking + let fraxUnifiedFarm_Fraxswap_FRAX_IQ_instance; + let fraxUnifiedFarm_Fraxswap_FRAX_pitchFXS_instance; + let fraxUnifiedFarm_Temple_FRAX_TEMPLE_instance; + let middlemanGauge_ARBI_Curve_VSTFRAX; + let fraxUnifiedFarm_PosRebase_aFRAX_instance; + let fraxUnifiedFarm_KyberSwapElastic_instance; + let frax_farm_ragequitter_temple_instance; + + // TWAMM + let fraxswap_factory_instance; + let twamm_pair_instance; + let fraxswap_router_instance; + + // Uniswap + let routerInstance; + let uniswapFactoryInstance; + let uniswapV3PositionsNFTInstance; + + // veFPIS + let veFPIS_instance; + let veFPISYieldDistributorV5_instance; + + // veFXS + let veFXS_instance; + let veFXSYieldDistributorV4_instance; + let vefxs_boost_instance; + let vefxs_boost_deleg_proxy_instance; + + + // Assign live contract addresses + // ====================================================== + CONTRACT_ADDRESSES = constants.CONTRACT_ADDRESSES; + const ADDRS_ETH = CONTRACT_ADDRESSES.ethereum; + const COMPTROLLER_ADDRESS = CONTRACT_ADDRESSES.ethereum.multisigs["Comptrollers"]; + + // FPI + fpi_instance = await FPI.at(CONTRACT_ADDRESSES.ethereum.canonicals.FPI); + fpis_instance = await FPIS.at(CONTRACT_ADDRESSES.ethereum.canonicals.FPIS); + fpi_controller_pool_instance = await FPIControllerPool.at(CONTRACT_ADDRESSES.ethereum.misc.fpi_controller_amo); + + // FRAX Core + frax_instance = await FRAXStablecoin.at(CONTRACT_ADDRESSES.ethereum.main.FRAX); + fxs_instance = await FRAXShares.at(CONTRACT_ADDRESSES.ethereum.main.FXS); + timelock_instance = await Timelock.at(CONTRACT_ADDRESSES.ethereum.misc.timelock); + governance_instance = await GovernorAlpha.at(CONTRACT_ADDRESSES.ethereum.governance); + pool_instance_v3 = await FraxPoolV3.at(CONTRACT_ADDRESSES.ethereum.pools.V3); + + // Gauge + liquidity_gauge_v2_instance = await LiquidityGaugeV2.at(CONTRACT_ADDRESSES.ethereum.misc.frax_gauge_v2); + veFXSYieldDistributorV4_instance = await veFXSYieldDistributorV4.at(CONTRACT_ADDRESSES.ethereum.misc.vefxs_yield_distributor_v4); + // frax_gauge_controller = await FraxGaugeController.at(CONTRACT_ADDRESSES.ethereum.misc.frax_gauge_controller); + frax_gauge_controller_v2 = await FraxGaugeControllerV2.at(CONTRACT_ADDRESSES.ethereum.misc.frax_gauge_controller_v2); + gauge_rewards_distributor_instance = await FraxGaugeFXSRewardsDistributor.at(CONTRACT_ADDRESSES.ethereum.misc.frax_gauge_rewards_distributor); + + // Misc + usdc_instance = await ERC20.at(CONTRACT_ADDRESSES.ethereum.collaterals.USDC); + frax_farm_ragequitter_temple_instance = await FraxFarmRageQuitter_Temple.at(CONTRACT_ADDRESSES.ethereum.misc.ragequitter_temple); + + // Misc AMOS + frax_amo_minter_instance = await FraxAMOMinter.at(CONTRACT_ADDRESSES.ethereum.misc.amo_minter); + twamm_amo_instance = await TWAMM_AMO.at(CONTRACT_ADDRESSES.ethereum.misc.twamm_amo); + + // Oracles + cpi_tracker_oracle_instance = await CPITrackerOracle.at(CONTRACT_ADDRESSES.ethereum.oracles_other.cpi_tracker_oracle); + univ3_twap_oracle_instance = await UniV3TWAPOracle.at(CONTRACT_ADDRESSES.ethereum.oracles["FRAX/FPI 0.30%"]); + + // Staking + middlemanGauge_ARBI_Curve_VSTFRAX = await FraxMiddlemanGauge_ARBI_Curve_VSTFRAX.at(CONTRACT_ADDRESSES.ethereum.middleman_gauges['Curve VSTFRAX-f']); + // fraxUnifiedFarm_Fraxswap_FRAX_IQ_instance = await FraxUnifiedFarm_ERC20_FraxswapV2.at(CONTRACT_ADDRESSES.ethereum.staking_contracts['Fraxswap V1 FRAX/IQ']); + // fraxUnifiedFarm_Temple_FRAX_TEMPLE_instance = await FraxUnifiedFarm_ERC20_Temple_FRAX_TEMPLE.at(CONTRACT_ADDRESSES.ethereum.staking_contracts['Temple FRAX/TEMPLE']); + // fraxUnifiedFarm_PosRebase_aFRAX_instance = await FraxUnifiedFarm_PosRebase_aFRAX.at(CONTRACT_ADDRESSES.ethereum.staking_contracts['Aave aFRAX']); + + // TWAMM + fraxswap_factory_instance = await UniV2TWAMMFactory.at(CONTRACT_ADDRESSES.ethereum.uniswap.fraxswap_factory_v2); + twamm_pair_instance = await UniV2TWAMMPair.at(CONTRACT_ADDRESSES.ethereum.pair_tokens["Fraxswap V2 FRAX/FPI"]); + fraxswap_router_instance = await UniV2TWAMMRouter.at(CONTRACT_ADDRESSES.ethereum.uniswap.fraxswap_router_v2); + + // Uniswap + routerInstance = await IUniswapV2Router02.at(CONTRACT_ADDRESSES.ethereum.uniswap.router); + uniswapFactoryInstance = await IUniswapV2Factory.at(CONTRACT_ADDRESSES.ethereum.uniswap.factory); + uniswapV3PositionsNFTInstance = await IUniswapV3PositionsNFT.at(CONTRACT_ADDRESSES.ethereum.uniswap_v3.NonfungiblePositionManager); + + // veFXS + veFXS_instance = await veFXS.at(CONTRACT_ADDRESSES.ethereum.main.veFXS); + + + + // ANY NEW CONTRACTS, PUT BELOW HERE + // .new() calls and deployments + // ========================================================================== + + // // Overrides live deploy, for testing purposes + // console.log(chalk.yellow('========== FraxGaugeController ==========')); + // // FraxGaugeController + // frax_gauge_controller = await FraxGaugeController.new( + // fxs_instance.address, + // veFXS_instance.address + // ); + + console.log(chalk.yellow('========== ComboOracle_KyberSwapElastic ==========')); + // ComboOracle_KyberSwapElastic + combo_oracle_kyberswap_elastic_instance = await ComboOracle_KyberSwapElastic.new( + THE_ACCOUNTS[1], + [ + CONTRACT_ADDRESSES.ethereum.oracles_other.combo_oracle, + CONTRACT_ADDRESSES.ethereum.uniswap_v3.kyberswap_elastic_factory, + CONTRACT_ADDRESSES.ethereum.uniswap_v3.kyberswap_elastic_pos_mgr, + CONTRACT_ADDRESSES.ethereum.uniswap_v3.kyberswap_elastic_router, + CONTRACT_ADDRESSES.ethereum.uniswap_v3.kyberswap_elastic_tick_fees_reader + ] + ); + + + // // Add in a gauge type + // await frax_gauge_controller.add_type("Ethereum Mainnet", "1000000000000000000", { from: THE_ACCOUNTS[0] }); + + // console.log(chalk.yellow('========== FraxGaugeControllerV2 ==========')); + // // FraxGaugeControllerV2 + // frax_gauge_controller_v2 = await FraxGaugeControllerV2.new( + // fxs_instance.address, + // veFXS_instance.address + // ); + + console.log(chalk.yellow('========== veFPIS ==========')); + // veFPIS + veFPIS_instance = await veFPIS.new(); + + // // Add in a gauge type + // await frax_gauge_controller_v2.add_type("Ethereum Mainnet", "1000000000000000000", { from: THE_ACCOUNTS[0] }); + + console.log(chalk.yellow('========== veFPISYieldDistributorV5 ==========')); + // veFPISYieldDistributorV5 + veFPISYieldDistributorV5_instance = await veFPISYieldDistributorV5.new( + THE_ACCOUNTS[6], + CONTRACT_ADDRESSES.ethereum.canonicals.FPIS, + CONTRACT_ADDRESSES.ethereum.misc.timelock, + veFPIS_instance.address + ); + + // console.log(chalk.yellow("========== FraxMiddlemanGauge_ARBI_Curve_VSTFRAX ==========")); + // middlemanGauge_ARBI_Curve_VSTFRAX = await FraxMiddlemanGauge_ARBI_Curve_VSTFRAX.new( + // THE_ACCOUNTS[1], + // CONTRACT_ADDRESSES.ethereum.misc.timelock, + // CONTRACT_ADDRESSES.ethereum.misc.frax_gauge_rewards_distributor, + // CONTRACT_ADDRESSES.ethereum.bridges.fxs.arbitrum, + // 6, + // CONTRACT_ADDRESSES.arbitrum.staking_contracts['Curve VSTFRAX-f'], + // "", + // "Arbitrum Curve VSTFRAX-f Middleman Gauge", + // ); + + + + + console.log(chalk.yellow("========== FraxUnifiedFarm_ERC20_FraxswapV2 ==========")); + // FraxUnifiedFarm_ERC20_FraxswapV2 + fraxUnifiedFarm_Fraxswap_FRAX_IQ_instance = await FraxUnifiedFarm_ERC20_FraxswapV2.new( + THE_ACCOUNTS[6], + [ + "0x3432B6A60D23Ca0dFCa7761B7ab56459D9C964D0", // FXS + "0x579CEa1889991f68aCc35Ff5c3dd0621fF29b0C9" // IQ + ], + [ + "0xB1748C79709f4Ba2Dd82834B8c82D4a505003f27", // Frax Msig + "0x8aCc50345921b4A635705Ec7f3AC042B3407BD58" // IQ Msig + ], + [ + 11574074074074, // 1 FXS per day + 23148148148148 // 2 IQ per day + ], + [ + "0x0000000000000000000000000000000000000000", // Deploy the gauge controller address empty + "0x0000000000000000000000000000000000000000" + ], + [ + "0x278dC748edA1d8eFEf1aDFB518542612b49Fcd34", // FXS reward distributor + "0x0000000000000000000000000000000000000000" + ], + CONTRACT_ADDRESSES.ethereum.pair_tokens['Fraxswap V2 FRAX/IQ'], + ); + + // console.log(chalk.yellow("========== FraxUnifiedFarm_ERC20_Fraxswap_FRAX_pitchFXS ==========")); + // // FraxUnifiedFarm_ERC20_Fraxswap_FRAX_pitchFXS + // fraxUnifiedFarm_Fraxswap_FRAX_pitchFXS_instance = await FraxUnifiedFarm_ERC20_Fraxswap_FRAX_pitchFXS.new( + // THE_ACCOUNTS[6], + // [ + // "0x3432B6A60D23Ca0dFCa7761B7ab56459D9C964D0", // FXS + // "0x49d9ef84464c53c04934b8d23d7b1733fdcfd302" // PITCH + // ], + // [ + // "0xB1748C79709f4Ba2Dd82834B8c82D4a505003f27", // Frax Msig + // "0x8A421C3A25e8158b9aC815aE1319fBCf83F6bD6c" // Pitch Msig + // ], + // [ + // 11574074074074, + // 0 + // ], + // [ + // "0x0000000000000000000000000000000000000000", // Deploy the gauge controller address empty + // "0x0000000000000000000000000000000000000000" + // ], + // [ + // "0x278dC748edA1d8eFEf1aDFB518542612b49Fcd34", // FXS reward distributor + // "0x0000000000000000000000000000000000000000" + // ], + // CONTRACT_ADDRESSES.ethereum.pair_tokens['Fraxswap V1 FRAX/pitchFXS'], + // ); + + // console.log(chalk.yellow("========== FraxUnifiedFarm_ERC20_Temple_FRAX_TEMPLE ==========")); + // // FraxUnifiedFarm_ERC20_Temple_FRAX_TEMPLE + // fraxUnifiedFarm_Temple_FRAX_TEMPLE_instance = await FraxUnifiedFarm_ERC20_Temple_FRAX_TEMPLE.new( + // THE_ACCOUNTS[6], + // [ + // "0x3432B6A60D23Ca0dFCa7761B7ab56459D9C964D0", // FXS + // "0x470EBf5f030Ed85Fc1ed4C2d36B9DD02e77CF1b7" // TEMPLE + // ], + // [ + // "0xB1748C79709f4Ba2Dd82834B8c82D4a505003f27", // Frax Msig + // "0x4D6175d58C5AceEf30F546C0d5A557efFa53A950" // Temple DAO Msig + // ], + // [ + // 11574074074074, + // 0 + // ], + // [ + // "0x0000000000000000000000000000000000000000", // Deploy the gauge controller address empty + // "0x0000000000000000000000000000000000000000" + // ], + // [ + // "0x278dC748edA1d8eFEf1aDFB518542612b49Fcd34", // FXS reward distributor + // "0x0000000000000000000000000000000000000000" + // ], + // CONTRACT_ADDRESSES.ethereum.pair_tokens['Temple FRAX/TEMPLE'], + // ); + + // console.log(chalk.yellow("========== FraxUnifiedFarm_KyberSwapElastic ==========")); + // // FraxUnifiedFarm_KyberSwapElastic + // fraxUnifiedFarm_KyberSwapElastic_instance = await FraxUnifiedFarm_KyberSwapElastic.new( + // THE_ACCOUNTS[6], + // [ + // "0x3432B6A60D23Ca0dFCa7761B7ab56459D9C964D0", // FXS + // "0xdeFA4e8a7bcBA345F687a2f1456F5Edd9CE97202" // KNC + // ], + // [ + // "0xB1748C79709f4Ba2Dd82834B8c82D4a505003f27", // Frax Msig + // "0x5891BE896ed4a79ed928C55B17FbbEcDb46f8A00" // Kyber Network Msig for external projects + // ], + // [ + // 11574074074074, // 1 FXS per day. Connect the gauge later + // 11574074074 // 0.001 KNC per day. Connect the gauge later + // ], + // [ + // "0x0000000000000000000000000000000000000000", // Deploy the gauge controller address empty + // "0x0000000000000000000000000000000000000000" + // ], + // [ + // "0x278dC748edA1d8eFEf1aDFB518542612b49Fcd34", // FXS reward distributor + // "0x0000000000000000000000000000000000000000" + // ], + // [ + // CONTRACT_ADDRESSES.ethereum.uniswap_v3.kyberswap_elastic_pos_mgr, + // combo_oracle_kyberswap_elastic_instance.address + // ], + // 301 // Template NFT to use for values + // ); + + // console.log(chalk.yellow("========== FraxUnifiedFarm_PosRebase_aFRAX ==========")); + // // FraxUnifiedFarm_PosRebase_aFRAX + // fraxUnifiedFarm_PosRebase_aFRAX_instance = await FraxUnifiedFarm_PosRebase_aFRAX.new( + // THE_ACCOUNTS[6], + // [ + // "0x3432B6A60D23Ca0dFCa7761B7ab56459D9C964D0", // FXS + // "0x4da27a545c0c5B758a6BA100e3a049001de870f5" // stkAAVE + // ], + // [ + // "0xB1748C79709f4Ba2Dd82834B8c82D4a505003f27", // Frax Msig + // "0xB1748C79709f4Ba2Dd82834B8c82D4a505003f27" // Frax Msig (stkAAVE is auto-claimed and the rate is set once per week) + // ], + // [ + // 11574074074074, // 1 FXS per day. Connect the gauge later + // 11574074074 // 0.001 stkAAVE per day. Connect the gauge later + // ], + // [ + // "0x0000000000000000000000000000000000000000", // Deploy the gauge controller address empty + // "0x0000000000000000000000000000000000000000" + // ], + // [ + // "0x278dC748edA1d8eFEf1aDFB518542612b49Fcd34", // FXS reward distributor + // "0x0000000000000000000000000000000000000000" + // ], + // CONTRACT_ADDRESSES.ethereum.bearer_tokens.aFRAX, + // ); + + // console.log(chalk.yellow('========== FPI ==========')); + // // FPI + // fpi_instance = await FPI.new( + // THE_ACCOUNTS[1], + // CONTRACT_ADDRESSES.ethereum.misc.timelock + // ); + + // console.log(chalk.yellow('========== FPIS ==========')); + // // FPIS + // fpis_instance = await FPIS.new( + // THE_ACCOUNTS[1], + // CONTRACT_ADDRESSES.ethereum.misc.timelock, + // fpi_instance.address + // ); + + // console.log(chalk.yellow('========== CPITrackerOracle ==========')); + // // CPITrackerOracle + // cpi_tracker_oracle_instance = await CPITrackerOracle.new( + // THE_ACCOUNTS[1], + // CONTRACT_ADDRESSES.ethereum.misc.timelock + // ); + + // console.log(chalk.yellow('========== UniV3TWAPOracle ==========')); + // // UniV3TWAPOracle + // univ3_twap_oracle_instance = await UniV3TWAPOracle.new( + // THE_ACCOUNTS[1], + // CONTRACT_ADDRESSES.ethereum.misc.timelock, + // CONTRACT_ADDRESSES.ethereum.uni_v3_pools["FRAX/FPI 0.30%"], + // 18, + // "FRAX/FPI 0.30%" + // ); + + // console.log(chalk.yellow("========== FPIControllerPool ==========")); + // fpi_controller_pool_instance = await FPIControllerPool.new( + // THE_ACCOUNTS[1], + // CONTRACT_ADDRESSES.ethereum.misc.timelock, + // [ + // frax_instance.address, + // fpi_instance.address, + // CONTRACT_ADDRESSES.ethereum.pair_tokens["Fraxswap FRAX/FPI"], + // "0xB9E1E3A9feFf48998E45Fa90847ed4D467E8BcfD", // Ethereum CHAINLINK FRAX + // CONTRACT_ADDRESSES.ethereum.oracles["FRAX/FPI 0.30%"], // Ethereum UniV3TWAPOracle FPI [PLACEHOLDER UNTIL REAL CHAINLINK ORACLE IS UP] + // cpi_tracker_oracle_instance.address, + // ] + // ); + + // console.log(chalk.yellow("========== TWAMM_AMO ==========")); + // twamm_amo_instance = await TWAMM_AMO.new( + // THE_ACCOUNTS[1], + // CONTRACT_ADDRESSES.ethereum.misc.timelock, + // [ + // frax_instance.address, + // fxs_instance.address, + // CONTRACT_ADDRESSES.ethereum.pair_tokens["Fraxswap V2 FRAX/FXS"], + // "0xB9E1E3A9feFf48998E45Fa90847ed4D467E8BcfD", // Ethereum CHAINLINK FRAX + // "0x6Ebc52C8C1089be9eB3945C4350B68B8E4C2233f", // Ethereum CHAINLINK FXS + // CONTRACT_ADDRESSES.ethereum.multisigs.Comptrollers, + // CONTRACT_ADDRESSES.ethereum.misc.amo_minter, + // CONTRACT_ADDRESSES.ethereum.misc.vefxs_yield_distributor_v4 + // ] + // ); + + + // console.log(chalk.yellow('========== FraxLiquidityBridger_AUR_Rainbow ==========')); + // // FraxLiquidityBridger_AUR_Rainbow + // frax_liquidity_bridger_aur_rainbow_instance = await FraxLiquidityBridger_AUR_Rainbow.new( + // THE_ACCOUNTS[1], + // CONTRACT_ADDRESSES.ethereum.misc.timelock, + // frax_amo_minter_instance.address, + // [ + // CONTRACT_ADDRESSES.ethereum.bridges.frax.aurora, + // CONTRACT_ADDRESSES.ethereum.bridges.fxs.aurora, + // CONTRACT_ADDRESSES.ethereum.bridges.collateral.aurora + // ], + // "0x0000000000000000000000000000000000000000", // Aurora goes to same address on other side + // "", + // "FRAX Aurora Rainbow Liquidity Bridger", + // ); + // const account_id = (`aurora:${frax_liquidity_bridger_aur_rainbow_instance.address.replace("0x", "")}`).toLowerCase(); + // console.log("account_id: ", account_id); + // await frax_liquidity_bridger_aur_rainbow_instance.setAccountID(account_id, false, { from: THE_ACCOUNTS[1] }); + + + // ---------------------------------------------- + await hre.network.provider.request({ + method: "hardhat_impersonateAccount", + params: [COMPTROLLER_ADDRESS] + }); + + console.log(chalk.yellow('========== WHITELIST AMOS FOR MINTER ==========')); + // await frax_amo_minter_instance.addAMO(convex_amo_instance.address, 0, { from: COMPTROLLER_ADDRESS }); + await frax_amo_minter_instance.addAMO(twamm_amo_instance.address, 0, { from: COMPTROLLER_ADDRESS }); + + + // console.log("Add the liquidity bridgers to the AMO Minter"); + // await frax_amo_minter_instance.addAMO(frax_liquidity_bridger_aur_rainbow_instance.address, 0, { from: COMPTROLLER_ADDRESS }); + + console.log("Add the TWAMM AMO as a notifier to the yield distributor"); + await veFXSYieldDistributorV4_instance.toggleRewardNotifier(twamm_amo_instance.address, { from: COMPTROLLER_ADDRESS }); + + await hre.network.provider.request({ + method: "hardhat_stopImpersonatingAccount", + params: [COMPTROLLER_ADDRESS] + }); + + // await hre.network.provider.request({ + // method: "hardhat_impersonateAccount", + // params: [process.env.STAKING_OWNER_ADDRESS] + // }); + + // console.log("Add the FXS1559 AMO as a notifier to the yield distributor"); + // await veFXSYieldDistributorV4_instance.toggleRewardNotifier(fxs_1559_amo_instance.address, { from: process.env.STAKING_OWNER_ADDRESS }); + + // await hre.network.provider.request({ + // method: "hardhat_stopImpersonatingAccount", + // params: [process.env.STAKING_OWNER_ADDRESS] + // }); + + // ---------------------------------------------- + console.log(chalk.yellow('========== syncDollarBalances ==========')); + console.log(chalk.red("SKIPPING FOR NOW TO SAVE TIME!!!")); + console.log(chalk.red("SKIPPING FOR NOW TO SAVE TIME!!!")); + console.log(chalk.red("SKIPPING FOR NOW TO SAVE TIME!!!")); + + // Sync the AMO Minter + // await frax_amo_minter_instance.syncDollarBalances({ from: THE_ACCOUNTS[3] }); + + // ---------------------------------------------- + console.log(chalk.yellow('========== DEPLOY CONTRACTS ==========')); + + console.log(chalk.yellow("--------DEPLOYING FPI CORE CONTRACTS--------")); + FPI.setAsDeployed(fpi_instance); + FPIS.setAsDeployed(fpis_instance); + FPIControllerPool.setAsDeployed(fpi_controller_pool_instance); + + console.log(chalk.yellow("--------DEPLOYING FRAX CORE CONTRACTS--------")); + FRAXStablecoin.setAsDeployed(frax_instance); + FRAXShares.setAsDeployed(fxs_instance); + GovernorAlpha.setAsDeployed(governance_instance); + Timelock.setAsDeployed(timelock_instance); + FraxPoolV3.setAsDeployed(pool_instance_v3); + + console.log(chalk.yellow("--------DEPLOYING GAUGE CONTRACTS--------")); + LiquidityGaugeV2.setAsDeployed(liquidity_gauge_v2_instance); + // FraxGaugeController.setAsDeployed(frax_gauge_controller); + FraxGaugeControllerV2.setAsDeployed(frax_gauge_controller_v2); + FraxGaugeFXSRewardsDistributor.setAsDeployed(gauge_rewards_distributor_instance); + + console.log(chalk.yellow("--------DEPLOYING KYBERSWAP CONTRACTS--------")); + IUniswapV3PositionsNFT.setAsDeployed(uniswapV3PositionsNFTInstance); + + console.log(chalk.yellow("--------DEPLOY MISC AMO CONTRACTS--------")); + FraxAMOMinter.setAsDeployed(frax_amo_minter_instance); + // FraxLiquidityBridger_AUR_Rainbow.setAsDeployed(frax_liquidity_bridger_aur_rainbow_instance); + TWAMM_AMO.setAsDeployed(twamm_amo_instance); + + console.log(chalk.yellow("--------DEPLOY ORACLE CONTRACTS--------")); + CPITrackerOracle.setAsDeployed(cpi_tracker_oracle_instance); + ComboOracle_KyberSwapElastic.setAsDeployed(combo_oracle_kyberswap_elastic_instance); + UniV3TWAPOracle.setAsDeployed(univ3_twap_oracle_instance); + + console.log(chalk.yellow("--------DEPLOYING UNISWAP CONTRACTS--------")); + IUniswapV2Router02.setAsDeployed(routerInstance); + IUniswapV2Factory.setAsDeployed(uniswapFactoryInstance); + IUniswapV3PositionsNFT.setAsDeployed(uniswapV3PositionsNFTInstance); + + console.log(chalk.yellow("--------DEPLOY STAKING CONTRACTS--------")); + FraxFarmRageQuitter_Temple.setAsDeployed(frax_farm_ragequitter_temple_instance); + FraxMiddlemanGauge_ARBI_Curve_VSTFRAX.setAsDeployed(middlemanGauge_ARBI_Curve_VSTFRAX); + FraxUnifiedFarm_ERC20_FraxswapV2.setAsDeployed(fraxUnifiedFarm_Fraxswap_FRAX_IQ_instance); + // FraxUnifiedFarm_ERC20_Fraxswap_FRAX_pitchFXS.setAsDeployed(fraxUnifiedFarm_Fraxswap_FRAX_pitchFXS_instance); + // FraxUnifiedFarm_ERC20_Temple_FRAX_TEMPLE.setAsDeployed(fraxUnifiedFarm_Temple_FRAX_TEMPLE_instance); + // FraxUnifiedFarm_KyberSwapElastic.setAsDeployed(fraxUnifiedFarm_KyberSwapElastic_instance); + // FraxUnifiedFarm_PosRebase_aFRAX.setAsDeployed(fraxUnifiedFarm_PosRebase_aFRAX_instance); + + console.log(chalk.yellow("--------DEPLOYING TWAMM CONTRACTS--------")); + UniV2TWAMMFactory.setAsDeployed(fraxswap_factory_instance); + UniV2TWAMMPair.setAsDeployed(twamm_pair_instance); + UniV2TWAMMRouter.setAsDeployed(fraxswap_router_instance); + + console.log(chalk.yellow("--------DEPLOYING veFPIS CONTRACTS--------")); + veFPIS.setAsDeployed(veFPIS_instance); + veFPISYieldDistributorV5.setAsDeployed(veFPISYieldDistributorV5_instance); + + console.log(chalk.yellow("--------DEPLOYING veFXS CONTRACTS--------")); + veFXS.setAsDeployed(veFXS_instance); + veFXSYieldDistributorV4.setAsDeployed(veFXSYieldDistributorV4_instance); + veFXSBoost.setAsDeployed(vefxs_boost_instance); + veFXSBoostDelegationProxy.setAsDeployed(vefxs_boost_deleg_proxy_instance); +} \ No newline at end of file diff --git a/src/hardhat/test/truffle-fixture.js b/src/hardhat/test/truffle-fixture.js index 72407e03..6ce46dc1 100644 --- a/src/hardhat/test/truffle-fixture.js +++ b/src/hardhat/test/truffle-fixture.js @@ -7,587 +7,252 @@ const BigNumber = require('bignumber.js'); const chalk = require('chalk'); const constants = require(path.join(__dirname, '../../../dist/types/constants')); -// FPI Core -const FPI = artifacts.require("FPI/FPI"); -const FPIS = artifacts.require("FPI/FPIS"); -const FPIControllerPool = artifacts.require("FPI/FPIControllerPool.sol"); +// Core +const anyFRAX = artifacts.require("ERC20/__CROSSCHAIN/anyFRAX"); +const anyFXS = artifacts.require("ERC20/__CROSSCHAIN/anyFXS"); +const arbiUSDC = artifacts.require("ERC20/__CROSSCHAIN/IArbFiatToken"); +const arbiUSDT = artifacts.require("ERC20/__CROSSCHAIN/IArbFiatToken"); +const CrossChainCanonicalFRAX = artifacts.require("ERC20/__CROSSCHAIN/CrossChainCanonicalFRAX"); +const CrossChainCanonicalFXS = artifacts.require("ERC20/__CROSSCHAIN/CrossChainCanonicalFXS"); -// FRAX Core -const FRAXStablecoin = artifacts.require("Frax/IFrax"); -const FRAXShares = artifacts.require("FXS/FRAXShares"); -const GovernorAlpha = artifacts.require("Governance/GovernorAlpha"); -const Timelock = artifacts.require("Governance/Timelock"); -const FraxPoolV3 = artifacts.require("Frax/Pools/FraxPoolV3"); - -// Gauge -const LiquidityGaugeV2 = artifacts.require("Curve/ILiquidityGaugeV2"); -// const FraxGaugeController = artifacts.require("Curve/FraxGaugeController"); -const FraxGaugeControllerV2 = artifacts.require("Curve/FraxGaugeControllerV2"); -const FraxGaugeFXSRewardsDistributor = artifacts.require("Curve/IFraxGaugeFXSRewardsDistributor"); - -// Misc -const ERC20 = artifacts.require("contracts/ERC20/ERC20.sol:ERC20"); - -// Misc AMOs -const FraxAMOMinter = artifacts.require("Frax/FraxAMOMinter"); -// const FraxLiquidityBridger_AUR_Rainbow = artifacts.require("Bridges/Aurora/FraxLiquidityBridger_AUR_Rainbow"); -const TWAMM_AMO = artifacts.require("Misc_AMOs/TWAMM_AMO"); +// Bridges +const CrossChainBridgeBacker_ARBI_AnySwap = artifacts.require("Bridges/Arbitrum/CrossChainBridgeBacker_ARBI_AnySwap"); // Oracles -const ComboOracle_KyberSwapElastic = artifacts.require("Oracle/ComboOracle_KyberSwapElastic"); -const CPITrackerOracle = artifacts.require("Oracle/CPITrackerOracle"); -const UniV3TWAPOracle = artifacts.require("Oracle/UniV3TWAPOracle"); +const CrossChainOracle = artifacts.require("Oracle/CrossChainOracle"); // Staking contracts -const FraxUnifiedFarm_ERC20_FraxswapV2 = artifacts.require("Staking/Variants/FraxUnifiedFarm_ERC20_FraxswapV2"); -// const FraxUnifiedFarm_ERC20_Fraxswap_FRAX_pitchFXS = artifacts.require("Staking/Variants/FraxUnifiedFarm_ERC20_Fraxswap_FRAX_pitchFXS"); -// const FraxUnifiedFarm_ERC20_Temple_FRAX_TEMPLE = artifacts.require("Staking/Variants/FraxUnifiedFarm_ERC20_Temple_FRAX_TEMPLE"); -const FraxFarmRageQuitter_Temple = artifacts.require("Staking/FraxFarmRageQuitter_Temple"); -const FraxMiddlemanGauge_ARBI_Curve_VSTFRAX = artifacts.require("Curve/Middleman_Gauges/FraxMiddlemanGauge_ARBI_Curve_VSTFRAX"); -const FraxUnifiedFarm_KyberSwapElastic = artifacts.require("Staking/Variants/FraxUnifiedFarm_KyberSwapElastic"); -const FraxUnifiedFarm_PosRebase_aFRAX = artifacts.require("Staking/Variants/FraxUnifiedFarm_PosRebase_aFRAX"); - -// TWAMM -const UniV2TWAMMFactory = artifacts.require("Fraxswap/core/FraxswapFactory"); -const UniV2TWAMMPair = artifacts.require("Fraxswap/core/FraxswapPair"); -const UniV2TWAMMRouter = artifacts.require("Fraxswap/periphery/FraxswapRouter"); - -// Uniswap related -const IUniswapV2Factory = artifacts.require("Uniswap/Interfaces/IUniswapV2Factory"); -const IUniswapV2Pair = artifacts.require("contracts/Uniswap/Interfaces/IUniswapV2Pair.sol:IUniswapV2Pair"); -const IUniswapV2Router02 = artifacts.require("Uniswap/Interfaces/IUniswapV2Router02"); - -// Uniswap V3 related -const IUniswapV3PositionsNFT = artifacts.require("Uniswap_V3/IUniswapV3PositionsNFT"); - -// veFPIS -const veFPIS = artifacts.require("Curve/veFPIS"); -const veFPISYieldDistributorV5 = artifacts.require("Staking/veFPISYieldDistributorV5"); - -// veFXS -const veFXS = artifacts.require("Curve/IveFXS"); -const veFXSYieldDistributorV4 = artifacts.require("Staking/veFXSYieldDistributorV4"); -const veFXSBoost = artifacts.require("Curve/IVotingEscrowDelegation"); -const veFXSBoostDelegationProxy = artifacts.require("Curve/IDelegationProxy"); +const FraxCCFarmV2_ArbiCurveVSTFRAX = artifacts.require("Staking/Variants/FraxCCFarmV2_ArbiCurveVSTFRAX"); +const FraxCCFarmV2_SaddleArbUSDv2 = artifacts.require("Staking/Variants/FraxCCFarmV2_SaddleArbUSDv2"); +const FraxCCFarmV3_ArbiSaddleL2D4 = artifacts.require("Staking/Variants/FraxCCFarmV3_ArbiSaddleL2D4"); +// AMOs +const SushiSwapLiquidityAMO_ARBI = artifacts.require("Misc_AMOs/__CROSSCHAIN/Arbitrum/SushiSwapLiquidityAMO_ARBI.sol"); +const CurveAMO_ARBI = artifacts.require("Misc_AMOs/__CROSSCHAIN/Arbitrum/CurveAMO_ARBI.sol"); module.exports = async (deployer) => { const THE_ACCOUNTS = await hre.web3.eth.getAccounts(); console.log("THE_ACCOUNTS[0] in truffle-fixture: ", THE_ACCOUNTS[0]); - let CONTRACT_ADDRESSES; // Get the necessary instances - // ====================================================== - - // FPI Core - let fpi_instance; - let fpis_instance; - let fpi_controller_pool_instance; - - // FRAX Core - let frax_instance; - let fxs_instance; - let governance_instance; - let timelock_instance; - let pool_instance_v3; + let CONTRACT_ADDRESSES; - // Gauge - let frax_gauge_controller; - let frax_gauge_controller_v2; - let gauge_rewards_distributor_instance; - let liquidity_gauge_v2_instance; + // Core + let anyFRAX_instance; + let anyFXS_instance; + let arbiUSDC_instance; + let arbiUSDT_instance; + let cross_chain_canonical_frax_instance; + let cross_chain_canonical_fxs_instance; - // Misc AMOs - let frax_amo_minter_instance; - let frax_liquidity_bridger_aur_rainbow_instance; - let twamm_amo_instance; + // Bridges + let cross_chain_bridge_backer_instance; // Oracles - let combo_oracle_kyberswap_elastic_instance; - let cpi_tracker_oracle_instance; - let univ3_twap_oracle_instance; - - // Staking - let fraxUnifiedFarm_Fraxswap_FRAX_IQ_instance; - let fraxUnifiedFarm_Fraxswap_FRAX_pitchFXS_instance; - let fraxUnifiedFarm_Temple_FRAX_TEMPLE_instance; - let middlemanGauge_ARBI_Curve_VSTFRAX; - let fraxUnifiedFarm_PosRebase_aFRAX_instance; - let fraxUnifiedFarm_KyberSwapElastic_instance; - let frax_farm_ragequitter_temple_instance; - - // TWAMM - let fraxswap_factory_instance; - let twamm_pair_instance; - let fraxswap_router_instance; + let cross_chain_oracle_instance; - // Uniswap - let routerInstance; - let uniswapFactoryInstance; - let uniswapV3PositionsNFTInstance; - - // veFPIS - let veFPIS_instance; - let veFPISYieldDistributorV5_instance; - - // veFXS - let veFXS_instance; - let veFXSYieldDistributorV4_instance; - let vefxs_boost_instance; - let vefxs_boost_deleg_proxy_instance; - + // Staking + let FraxCCFarmV2_ArbiCurveVSTFRAX_instance; + let FraxCCFarmV2_SaddleArbUSDv2_instance; + let FraxCCFarmV3_ArbiSaddleL2D4_instance; + + // AMOs + let curve_amo_arbi_instance; + let sushiswap_liquidity_amo_arbi_instance; // Assign live contract addresses - // ====================================================== CONTRACT_ADDRESSES = constants.CONTRACT_ADDRESSES; - const ADDRS_ETH = CONTRACT_ADDRESSES.ethereum; - const COMPTROLLER_ADDRESS = CONTRACT_ADDRESSES.ethereum.multisigs["Comptrollers"]; - - // FPI - fpi_instance = await FPI.at(CONTRACT_ADDRESSES.ethereum.canonicals.FPI); - fpis_instance = await FPIS.at(CONTRACT_ADDRESSES.ethereum.canonicals.FPIS); - fpi_controller_pool_instance = await FPIControllerPool.at(CONTRACT_ADDRESSES.ethereum.misc.fpi_controller_amo); - - // FRAX Core - frax_instance = await FRAXStablecoin.at(CONTRACT_ADDRESSES.ethereum.main.FRAX); - fxs_instance = await FRAXShares.at(CONTRACT_ADDRESSES.ethereum.main.FXS); - timelock_instance = await Timelock.at(CONTRACT_ADDRESSES.ethereum.misc.timelock); - governance_instance = await GovernorAlpha.at(CONTRACT_ADDRESSES.ethereum.governance); - pool_instance_v3 = await FraxPoolV3.at(CONTRACT_ADDRESSES.ethereum.pools.V3); - // Gauge - liquidity_gauge_v2_instance = await LiquidityGaugeV2.at(CONTRACT_ADDRESSES.ethereum.misc.frax_gauge_v2); - veFXSYieldDistributorV4_instance = await veFXSYieldDistributorV4.at(CONTRACT_ADDRESSES.ethereum.misc.vefxs_yield_distributor_v4); - // frax_gauge_controller = await FraxGaugeController.at(CONTRACT_ADDRESSES.ethereum.misc.frax_gauge_controller); - frax_gauge_controller_v2 = await FraxGaugeControllerV2.at(CONTRACT_ADDRESSES.ethereum.misc.frax_gauge_controller_v2); - gauge_rewards_distributor_instance = await FraxGaugeFXSRewardsDistributor.at(CONTRACT_ADDRESSES.ethereum.misc.frax_gauge_rewards_distributor); + // Core + anyFRAX_instance = await anyFRAX.at(CONTRACT_ADDRESSES.arbitrum.bridge_tokens.anyFRAX); + anyFXS_instance = await anyFXS.at(CONTRACT_ADDRESSES.arbitrum.bridge_tokens.anyFXS); + arbiUSDC_instance = await arbiUSDC.at(CONTRACT_ADDRESSES.arbitrum.collaterals.arbiUSDC); + arbiUSDT_instance = await arbiUSDT.at(CONTRACT_ADDRESSES.arbitrum.collaterals.arbiUSDT); + cross_chain_canonical_frax_instance = await CrossChainCanonicalFRAX.at(CONTRACT_ADDRESSES.arbitrum.canonicals.FRAX); + cross_chain_canonical_fxs_instance = await CrossChainCanonicalFXS.at(CONTRACT_ADDRESSES.arbitrum.canonicals.FXS); - // Misc - usdc_instance = await ERC20.at(CONTRACT_ADDRESSES.ethereum.collaterals.USDC); - frax_farm_ragequitter_temple_instance = await FraxFarmRageQuitter_Temple.at(CONTRACT_ADDRESSES.ethereum.misc.ragequitter_temple); - - // Misc AMOS - frax_amo_minter_instance = await FraxAMOMinter.at(CONTRACT_ADDRESSES.ethereum.misc.amo_minter); - twamm_amo_instance = await TWAMM_AMO.at(CONTRACT_ADDRESSES.ethereum.misc.twamm_amo); + // Bridges + cross_chain_bridge_backer_instance = await CrossChainBridgeBacker_ARBI_AnySwap.at(CONTRACT_ADDRESSES.arbitrum.bridge_backers.anySwap); // Oracles - cpi_tracker_oracle_instance = await CPITrackerOracle.at(CONTRACT_ADDRESSES.ethereum.oracles_other.cpi_tracker_oracle); - univ3_twap_oracle_instance = await UniV3TWAPOracle.at(CONTRACT_ADDRESSES.ethereum.oracles["FRAX/FPI 0.30%"]); - + cross_chain_oracle_instance = await CrossChainOracle.at(CONTRACT_ADDRESSES.arbitrum.oracles.cross_chain_oracle); + // Staking - middlemanGauge_ARBI_Curve_VSTFRAX = await FraxMiddlemanGauge_ARBI_Curve_VSTFRAX.at(CONTRACT_ADDRESSES.ethereum.middleman_gauges['Curve VSTFRAX-f']); - // fraxUnifiedFarm_Fraxswap_FRAX_IQ_instance = await FraxUnifiedFarm_ERC20_FraxswapV2.at(CONTRACT_ADDRESSES.ethereum.staking_contracts['Fraxswap V1 FRAX/IQ']); - // fraxUnifiedFarm_Temple_FRAX_TEMPLE_instance = await FraxUnifiedFarm_ERC20_Temple_FRAX_TEMPLE.at(CONTRACT_ADDRESSES.ethereum.staking_contracts['Temple FRAX/TEMPLE']); - // fraxUnifiedFarm_PosRebase_aFRAX_instance = await FraxUnifiedFarm_PosRebase_aFRAX.at(CONTRACT_ADDRESSES.ethereum.staking_contracts['Aave aFRAX']); - - // TWAMM - fraxswap_factory_instance = await UniV2TWAMMFactory.at(CONTRACT_ADDRESSES.ethereum.uniswap.fraxswap_factory_v2); - twamm_pair_instance = await UniV2TWAMMPair.at(CONTRACT_ADDRESSES.ethereum.pair_tokens["Fraxswap V2 FRAX/FPI"]); - fraxswap_router_instance = await UniV2TWAMMRouter.at(CONTRACT_ADDRESSES.ethereum.uniswap.fraxswap_router_v2); - - // Uniswap - routerInstance = await IUniswapV2Router02.at(CONTRACT_ADDRESSES.ethereum.uniswap.router); - uniswapFactoryInstance = await IUniswapV2Factory.at(CONTRACT_ADDRESSES.ethereum.uniswap.factory); - uniswapV3PositionsNFTInstance = await IUniswapV3PositionsNFT.at(CONTRACT_ADDRESSES.ethereum.uniswap_v3.NonfungiblePositionManager); - - // veFXS - veFXS_instance = await veFXS.at(CONTRACT_ADDRESSES.ethereum.main.veFXS); + // AMOs + sushiswap_liquidity_amo_arbi_instance = await SushiSwapLiquidityAMO_ARBI.at(CONTRACT_ADDRESSES.arbitrum.amos.sushiswap_liquidity); + curve_amo_arbi_instance = await CurveAMO_ARBI.at(CONTRACT_ADDRESSES.arbitrum.amos.curve); - // ANY NEW CONTRACTS, PUT BELOW HERE // .new() calls and deployments // ========================================================================== - // // Overrides live deploy, for testing purposes - // console.log(chalk.yellow('========== FraxGaugeController ==========')); - // // FraxGaugeController - // frax_gauge_controller = await FraxGaugeController.new( - // fxs_instance.address, - // veFXS_instance.address + // console.log(chalk.yellow('========== CrossChainCanonicalFRAX ==========')); + // // CrossChainCanonicalFRAX + // cross_chain_canonical_frax_instance = await CrossChainCanonicalFRAX.new( + // "Frax", + // "FRAX", + // THE_ACCOUNTS[1], + // "100000000000000000000000", + // "0x36A87d1E3200225f881488E4AEedF25303FebcAe", + // [ + // anyFRAX_instance.address + // ] // ); - console.log(chalk.yellow('========== ComboOracle_KyberSwapElastic ==========')); - // ComboOracle_KyberSwapElastic - combo_oracle_kyberswap_elastic_instance = await ComboOracle_KyberSwapElastic.new( - THE_ACCOUNTS[1], - [ - CONTRACT_ADDRESSES.ethereum.oracles_other.combo_oracle, - CONTRACT_ADDRESSES.ethereum.uniswap_v3.kyberswap_elastic_factory, - CONTRACT_ADDRESSES.ethereum.uniswap_v3.kyberswap_elastic_pos_mgr, - CONTRACT_ADDRESSES.ethereum.uniswap_v3.kyberswap_elastic_router, - CONTRACT_ADDRESSES.ethereum.uniswap_v3.kyberswap_elastic_tick_fees_reader - ] - ); - - - // // Add in a gauge type - // await frax_gauge_controller.add_type("Ethereum Mainnet", "1000000000000000000", { from: THE_ACCOUNTS[0] }); - - // console.log(chalk.yellow('========== FraxGaugeControllerV2 ==========')); - // // FraxGaugeControllerV2 - // frax_gauge_controller_v2 = await FraxGaugeControllerV2.new( - // fxs_instance.address, - // veFXS_instance.address + // console.log(chalk.yellow('========== CrossChainCanonicalFXS ==========')); + // // CrossChainCanonicalFXS + // cross_chain_canonical_fxs_instance = await CrossChainCanonicalFXS.new( + // "Frax Share", + // "FXS", + // THE_ACCOUNTS[1], + // "100000000000000000000000", + // "0x36A87d1E3200225f881488E4AEedF25303FebcAe", + // [ + // anyFXS_instance.address + // ] // ); - console.log(chalk.yellow('========== veFPIS ==========')); - // veFPIS - veFPIS_instance = await veFPIS.new(); - - // // Add in a gauge type - // await frax_gauge_controller_v2.add_type("Ethereum Mainnet", "1000000000000000000", { from: THE_ACCOUNTS[0] }); + // // Set some starting prices + // await cross_chain_oracle_instance.setPrice(anyFRAX_instance.address, new BigNumber("1e6"), { from: THE_ACCOUNTS[1] }); + // await cross_chain_oracle_instance.setPrice(cross_chain_canonical_frax_instance.address, new BigNumber("1e6"), { from: THE_ACCOUNTS[1] }); + // await cross_chain_oracle_instance.setPrice(anyFXS_instance.address, new BigNumber("5110000"), { from: THE_ACCOUNTS[1] }); + // await cross_chain_oracle_instance.setPrice(cross_chain_canonical_fxs_instance.address, new BigNumber("5110000"), { from: THE_ACCOUNTS[1] }); - console.log(chalk.yellow('========== veFPISYieldDistributorV5 ==========')); - // veFPISYieldDistributorV5 - veFPISYieldDistributorV5_instance = await veFPISYieldDistributorV5.new( - THE_ACCOUNTS[6], - CONTRACT_ADDRESSES.ethereum.canonicals.FPIS, - CONTRACT_ADDRESSES.ethereum.misc.timelock, - veFPIS_instance.address - ); - - // console.log(chalk.yellow("========== FraxMiddlemanGauge_ARBI_Curve_VSTFRAX ==========")); - // middlemanGauge_ARBI_Curve_VSTFRAX = await FraxMiddlemanGauge_ARBI_Curve_VSTFRAX.new( - // THE_ACCOUNTS[1], + // console.log(chalk.yellow('========== CrossChainBridgeBacker_ARBI_AnySwap ==========')); + // // CrossChainBridgeBacker_ARBI_AnySwap + // cross_chain_bridge_backer_instance = await CrossChainBridgeBacker_ARBI_AnySwap.new( + // THE_ACCOUNTS[1], // CONTRACT_ADDRESSES.ethereum.misc.timelock, - // CONTRACT_ADDRESSES.ethereum.misc.frax_gauge_rewards_distributor, - // CONTRACT_ADDRESSES.ethereum.bridges.fxs.arbitrum, - // 6, - // CONTRACT_ADDRESSES.arbitrum.staking_contracts['Curve VSTFRAX-f'], - // "", - // "Arbitrum Curve VSTFRAX-f Middleman Gauge", - // ); - - - - - console.log(chalk.yellow("========== FraxUnifiedFarm_ERC20_FraxswapV2 ==========")); - // FraxUnifiedFarm_ERC20_FraxswapV2 - fraxUnifiedFarm_Fraxswap_FRAX_IQ_instance = await FraxUnifiedFarm_ERC20_FraxswapV2.new( - THE_ACCOUNTS[6], - [ - "0x3432B6A60D23Ca0dFCa7761B7ab56459D9C964D0", // FXS - "0x579CEa1889991f68aCc35Ff5c3dd0621fF29b0C9" // IQ - ], - [ - "0xB1748C79709f4Ba2Dd82834B8c82D4a505003f27", // Frax Msig - "0x8aCc50345921b4A635705Ec7f3AC042B3407BD58" // IQ Msig - ], - [ - 11574074074074, // 1 FXS per day - 23148148148148 // 2 IQ per day - ], - [ - "0x0000000000000000000000000000000000000000", // Deploy the gauge controller address empty - "0x0000000000000000000000000000000000000000" - ], - [ - "0x278dC748edA1d8eFEf1aDFB518542612b49Fcd34", // FXS reward distributor - "0x0000000000000000000000000000000000000000" - ], - CONTRACT_ADDRESSES.ethereum.pair_tokens['Fraxswap V2 FRAX/IQ'], - ); - - // console.log(chalk.yellow("========== FraxUnifiedFarm_ERC20_Fraxswap_FRAX_pitchFXS ==========")); - // // FraxUnifiedFarm_ERC20_Fraxswap_FRAX_pitchFXS - // fraxUnifiedFarm_Fraxswap_FRAX_pitchFXS_instance = await FraxUnifiedFarm_ERC20_Fraxswap_FRAX_pitchFXS.new( - // THE_ACCOUNTS[6], - // [ - // "0x3432B6A60D23Ca0dFCa7761B7ab56459D9C964D0", // FXS - // "0x49d9ef84464c53c04934b8d23d7b1733fdcfd302" // PITCH - // ], - // [ - // "0xB1748C79709f4Ba2Dd82834B8c82D4a505003f27", // Frax Msig - // "0x8A421C3A25e8158b9aC815aE1319fBCf83F6bD6c" // Pitch Msig - // ], - // [ - // 11574074074074, - // 0 - // ], + // cross_chain_oracle_instance.address, // [ - // "0x0000000000000000000000000000000000000000", // Deploy the gauge controller address empty - // "0x0000000000000000000000000000000000000000" + // anyFRAX_instance.address, // anyFRAX + // cross_chain_canonical_frax_instance.address, // canFRAX + // anyFXS_instance.address, // anyFXS + // cross_chain_canonical_fxs_instance.address, // canFXS + // CONTRACT_ADDRESSES.arbitrum.collaterals.arbiUSDC // ], // [ - // "0x278dC748edA1d8eFEf1aDFB518542612b49Fcd34", // FXS reward distributor - // "0x0000000000000000000000000000000000000000" + // anyFRAX_instance.address, // Swapout + // anyFXS_instance.address, // Swapout + // CONTRACT_ADDRESSES.arbitrum.collaterals.arbiUSDC // DISABLED // ], - // CONTRACT_ADDRESSES.ethereum.pair_tokens['Fraxswap V1 FRAX/pitchFXS'], - // ); - - // console.log(chalk.yellow("========== FraxUnifiedFarm_ERC20_Temple_FRAX_TEMPLE ==========")); - // // FraxUnifiedFarm_ERC20_Temple_FRAX_TEMPLE - // fraxUnifiedFarm_Temple_FRAX_TEMPLE_instance = await FraxUnifiedFarm_ERC20_Temple_FRAX_TEMPLE.new( - // THE_ACCOUNTS[6], - // [ - // "0x3432B6A60D23Ca0dFCa7761B7ab56459D9C964D0", // FXS - // "0x470EBf5f030Ed85Fc1ed4C2d36B9DD02e77CF1b7" // TEMPLE - // ], - // [ - // "0xB1748C79709f4Ba2Dd82834B8c82D4a505003f27", // Frax Msig - // "0x4D6175d58C5AceEf30F546C0d5A557efFa53A950" // Temple DAO Msig - // ], - // [ - // 11574074074074, - // 0 - // ], - // [ - // "0x0000000000000000000000000000000000000000", // Deploy the gauge controller address empty - // "0x0000000000000000000000000000000000000000" - // ], - // [ - // "0x278dC748edA1d8eFEf1aDFB518542612b49Fcd34", // FXS reward distributor - // "0x0000000000000000000000000000000000000000" - // ], - // CONTRACT_ADDRESSES.ethereum.pair_tokens['Temple FRAX/TEMPLE'], + // "0x0000000000000000000000000000000000000000", // Arbitrum goes to same address on other side + // "", + // "FRAX Arbitrum AnySwap CrossChainBridgeBacker", // ); - // console.log(chalk.yellow("========== FraxUnifiedFarm_KyberSwapElastic ==========")); - // // FraxUnifiedFarm_KyberSwapElastic - // fraxUnifiedFarm_KyberSwapElastic_instance = await FraxUnifiedFarm_KyberSwapElastic.new( - // THE_ACCOUNTS[6], - // [ - // "0x3432B6A60D23Ca0dFCa7761B7ab56459D9C964D0", // FXS - // "0xdeFA4e8a7bcBA345F687a2f1456F5Edd9CE97202" // KNC - // ], - // [ - // "0xB1748C79709f4Ba2Dd82834B8c82D4a505003f27", // Frax Msig - // "0x5891BE896ed4a79ed928C55B17FbbEcDb46f8A00" // Kyber Network Msig for external projects - // ], - // [ - // 11574074074074, // 1 FXS per day. Connect the gauge later - // 11574074074 // 0.001 KNC per day. Connect the gauge later - // ], - // [ - // "0x0000000000000000000000000000000000000000", // Deploy the gauge controller address empty - // "0x0000000000000000000000000000000000000000" - // ], - // [ - // "0x278dC748edA1d8eFEf1aDFB518542612b49Fcd34", // FXS reward distributor - // "0x0000000000000000000000000000000000000000" - // ], - // [ - // CONTRACT_ADDRESSES.ethereum.uniswap_v3.kyberswap_elastic_pos_mgr, - // combo_oracle_kyberswap_elastic_instance.address - // ], - // 301 // Template NFT to use for values + // console.log(chalk.yellow("========== ScreamAMO ==========")); + // scream_amo_instance = await ScreamAMO.new( + // THE_ACCOUNTS[1], + // THE_ACCOUNTS[10], + // cross_chain_canonical_frax_instance.address, + // "0x4E6854EA84884330207fB557D1555961D85Fc17E", + // cross_chain_bridge_backer_instance.address, // ); + // console.log(CONTRACT_ADDRESSES.arbitrum.pair_tokens["Sushi canFRAX/canFXS"]); + // console.log(CONTRACT_ADDRESSES.arbitrum.pair_tokens["Sushi canFRAX/arbiUSDC"]); + // console.log(CONTRACT_ADDRESSES.arbitrum.pair_tokens["Sushi canFXS/arbiUSDC"]); - // console.log(chalk.yellow("========== FraxUnifiedFarm_PosRebase_aFRAX ==========")); - // // FraxUnifiedFarm_PosRebase_aFRAX - // fraxUnifiedFarm_PosRebase_aFRAX_instance = await FraxUnifiedFarm_PosRebase_aFRAX.new( - // THE_ACCOUNTS[6], - // [ - // "0x3432B6A60D23Ca0dFCa7761B7ab56459D9C964D0", // FXS - // "0x4da27a545c0c5B758a6BA100e3a049001de870f5" // stkAAVE - // ], - // [ - // "0xB1748C79709f4Ba2Dd82834B8c82D4a505003f27", // Frax Msig - // "0xB1748C79709f4Ba2Dd82834B8c82D4a505003f27" // Frax Msig (stkAAVE is auto-claimed and the rate is set once per week) - // ], - // [ - // 11574074074074, // 1 FXS per day. Connect the gauge later - // 11574074074 // 0.001 stkAAVE per day. Connect the gauge later - // ], - // [ - // "0x0000000000000000000000000000000000000000", // Deploy the gauge controller address empty - // "0x0000000000000000000000000000000000000000" - // ], + // console.log(chalk.yellow("========== SushiSwapLiquidityAMO_ARBI ==========")); + // sushiswap_liquidity_amo_arbi_instance = await SushiSwapLiquidityAMO_ARBI.new( + // THE_ACCOUNTS[1], + // THE_ACCOUNTS[10], + // cross_chain_canonical_frax_instance.address, + // cross_chain_canonical_fxs_instance.address, + // CONTRACT_ADDRESSES.arbitrum.collaterals.arbiUSDC, + // cross_chain_bridge_backer_instance.address, // [ - // "0x278dC748edA1d8eFEf1aDFB518542612b49Fcd34", // FXS reward distributor - // "0x0000000000000000000000000000000000000000" - // ], - // CONTRACT_ADDRESSES.ethereum.bearer_tokens.aFRAX, + // CONTRACT_ADDRESSES.arbitrum.pair_tokens["Sushi canFRAX/canFXS"], + // CONTRACT_ADDRESSES.arbitrum.pair_tokens["Sushi canFRAX/arbiUSDC"], + // CONTRACT_ADDRESSES.arbitrum.pair_tokens["Sushi canFXS/arbiUSDC"] + // ] // ); - // console.log(chalk.yellow('========== FPI ==========')); - // // FPI - // fpi_instance = await FPI.new( - // THE_ACCOUNTS[1], - // CONTRACT_ADDRESSES.ethereum.misc.timelock - // ); + console.log(chalk.yellow("========== FraxCCFarmV2_ArbiCurveVSTFRAX ==========")); + // FraxCCFarmV2_ArbiCurveVSTFRAX + FraxCCFarmV2_ArbiCurveVSTFRAX_instance = await FraxCCFarmV2_ArbiCurveVSTFRAX.new( + THE_ACCOUNTS[6], + CONTRACT_ADDRESSES.arbitrum.bridge_tokens.anyFXS, // anyFXS + CONTRACT_ADDRESSES.arbitrum.canonicals.FXS, // canFXS + CONTRACT_ADDRESSES.arbitrum.reward_tokens.VSTA, + CONTRACT_ADDRESSES.arbitrum.pair_tokens["Curve VSTFRAX-f"], + CONTRACT_ADDRESSES.arbitrum.canonicals.FRAX, // canFRAX + "0x0000000000000000000000000000000000000000", // Timelock + "0x0000000000000000000000000000000000000000", // Rewarder + ); - // console.log(chalk.yellow('========== FPIS ==========')); - // // FPIS - // fpis_instance = await FPIS.new( - // THE_ACCOUNTS[1], - // CONTRACT_ADDRESSES.ethereum.misc.timelock, - // fpi_instance.address - // ); + console.log(chalk.yellow("========== FraxCCFarmV2_SaddleArbUSDv2 ==========")); + // FraxCCFarmV2_SaddleArbUSDv2 + FraxCCFarmV2_SaddleArbUSDv2_instance = await FraxCCFarmV2_SaddleArbUSDv2.new( + THE_ACCOUNTS[6], + CONTRACT_ADDRESSES.arbitrum.bridge_tokens.anyFXS, // anyFXS + CONTRACT_ADDRESSES.arbitrum.canonicals.FXS, // canFXS + CONTRACT_ADDRESSES.arbitrum.reward_tokens.SPELL, // Should be SDL, but run tests with SPELL + CONTRACT_ADDRESSES.arbitrum.bearer_tokens.saddleArbUSDv2, + CONTRACT_ADDRESSES.arbitrum.canonicals.FRAX, // canFRAX + "0x0000000000000000000000000000000000000000", // Timelock + "0x0000000000000000000000000000000000000000", // Rewarder + ); - // console.log(chalk.yellow('========== CPITrackerOracle ==========')); - // // CPITrackerOracle - // cpi_tracker_oracle_instance = await CPITrackerOracle.new( - // THE_ACCOUNTS[1], - // CONTRACT_ADDRESSES.ethereum.misc.timelock - // ); + console.log(chalk.yellow("========== FraxCCFarmV3_ArbiSaddleL2D4 ==========")); + // FraxCCFarmV3_ArbiSaddleL2D4 + FraxCCFarmV3_ArbiSaddleL2D4_instance = await FraxCCFarmV3_ArbiSaddleL2D4.new( + THE_ACCOUNTS[6], + CONTRACT_ADDRESSES.arbitrum.canonicals.FXS, // canFXS + CONTRACT_ADDRESSES.arbitrum.reward_tokens.SDL, + CONTRACT_ADDRESSES.arbitrum.bearer_tokens.saddleL2D4, + CONTRACT_ADDRESSES.arbitrum.canonicals.FRAX, // canFRAX + CONTRACT_ADDRESSES.arbitrum.multisigs.Comptrollers, // Timelock + "0x0000000000000000000000000000000000000000", // Rewarder + ); - // console.log(chalk.yellow('========== UniV3TWAPOracle ==========')); - // // UniV3TWAPOracle - // univ3_twap_oracle_instance = await UniV3TWAPOracle.new( + // console.log(chalk.yellow("========== CurveAMO_ARBI ==========")); + // curve_amo_arbi_instance = await CurveAMO_ARBI.new( // THE_ACCOUNTS[1], - // CONTRACT_ADDRESSES.ethereum.misc.timelock, - // CONTRACT_ADDRESSES.ethereum.uni_v3_pools["FRAX/FPI 0.30%"], - // 18, - // "FRAX/FPI 0.30%" - // ); - - // console.log(chalk.yellow("========== FPIControllerPool ==========")); - // fpi_controller_pool_instance = await FPIControllerPool.new( - // THE_ACCOUNTS[1], - // CONTRACT_ADDRESSES.ethereum.misc.timelock, + // THE_ACCOUNTS[10], // [ - // frax_instance.address, - // fpi_instance.address, - // CONTRACT_ADDRESSES.ethereum.pair_tokens["Fraxswap FRAX/FPI"], - // "0xB9E1E3A9feFf48998E45Fa90847ed4D467E8BcfD", // Ethereum CHAINLINK FRAX - // CONTRACT_ADDRESSES.ethereum.oracles["FRAX/FPI 0.30%"], // Ethereum UniV3TWAPOracle FPI [PLACEHOLDER UNTIL REAL CHAINLINK ORACLE IS UP] - // cpi_tracker_oracle_instance.address, - // ] - // ); - - // console.log(chalk.yellow("========== TWAMM_AMO ==========")); - // twamm_amo_instance = await TWAMM_AMO.new( - // THE_ACCOUNTS[1], - // CONTRACT_ADDRESSES.ethereum.misc.timelock, + // CONTRACT_ADDRESSES.arbitrum.canonicals.FRAX, + // CONTRACT_ADDRESSES.arbitrum.collaterals.arbiUSDC, + // CONTRACT_ADDRESSES.arbitrum.collaterals.arbiUSDT, + // CONTRACT_ADDRESSES.arbitrum.bridge_backers.anySwap, + // ], // [ - // frax_instance.address, - // fxs_instance.address, - // CONTRACT_ADDRESSES.ethereum.pair_tokens["Fraxswap V2 FRAX/FXS"], - // "0xB9E1E3A9feFf48998E45Fa90847ed4D467E8BcfD", // Ethereum CHAINLINK FRAX - // "0x6Ebc52C8C1089be9eB3945C4350B68B8E4C2233f", // Ethereum CHAINLINK FXS - // CONTRACT_ADDRESSES.ethereum.multisigs.Comptrollers, - // CONTRACT_ADDRESSES.ethereum.misc.amo_minter, - // CONTRACT_ADDRESSES.ethereum.misc.vefxs_yield_distributor_v4 + // "0xf07d553B195080F84F582e88ecdD54bAa122b279", + // "0xbF7E49483881C76487b0989CD7d9A8239B20CA41", + // "0x7f90122BF0700F9E7e1F688fe926940E8839F353", + // "0x7544Fe3d184b6B55D6B36c3FCA1157eE0Ba30287" // ] // ); - - // console.log(chalk.yellow('========== FraxLiquidityBridger_AUR_Rainbow ==========')); - // // FraxLiquidityBridger_AUR_Rainbow - // frax_liquidity_bridger_aur_rainbow_instance = await FraxLiquidityBridger_AUR_Rainbow.new( - // THE_ACCOUNTS[1], - // CONTRACT_ADDRESSES.ethereum.misc.timelock, - // frax_amo_minter_instance.address, - // [ - // CONTRACT_ADDRESSES.ethereum.bridges.frax.aurora, - // CONTRACT_ADDRESSES.ethereum.bridges.fxs.aurora, - // CONTRACT_ADDRESSES.ethereum.bridges.collateral.aurora - // ], - // "0x0000000000000000000000000000000000000000", // Aurora goes to same address on other side - // "", - // "FRAX Aurora Rainbow Liquidity Bridger", - // ); - // const account_id = (`aurora:${frax_liquidity_bridger_aur_rainbow_instance.address.replace("0x", "")}`).toLowerCase(); - // console.log("account_id: ", account_id); - // await frax_liquidity_bridger_aur_rainbow_instance.setAccountID(account_id, false, { from: THE_ACCOUNTS[1] }); - - // ---------------------------------------------- await hre.network.provider.request({ method: "hardhat_impersonateAccount", - params: [COMPTROLLER_ADDRESS] + params: [process.env.ARBITRUM_ONE_ADDRESS] }); - console.log(chalk.yellow('========== WHITELIST AMOS FOR MINTER ==========')); - // await frax_amo_minter_instance.addAMO(convex_amo_instance.address, 0, { from: COMPTROLLER_ADDRESS }); - await frax_amo_minter_instance.addAMO(twamm_amo_instance.address, 0, { from: COMPTROLLER_ADDRESS }); - - - // console.log("Add the liquidity bridgers to the AMO Minter"); - // await frax_amo_minter_instance.addAMO(frax_liquidity_bridger_aur_rainbow_instance.address, 0, { from: COMPTROLLER_ADDRESS }); - - console.log("Add the TWAMM AMO as a notifier to the yield distributor"); - await veFXSYieldDistributorV4_instance.toggleRewardNotifier(twamm_amo_instance.address, { from: COMPTROLLER_ADDRESS }); + console.log(chalk.yellow('========== WHITELIST AMOS FOR CrossChainBridgeBacker_ARBI_AnySwap ==========')); + // await cross_chain_bridge_backer_instance.addAMO(scream_amo_instance.address, false, { from: process.env.ARBITRUM_ONE_ADDRESS }); + // await cross_chain_bridge_backer_instance.addAMO(sushiswap_liquidity_amo_arbi_instance.address, false, { from: process.env.ARBITRUM_ONE_ADDRESS }); + // await cross_chain_bridge_backer_instance.addAMO(curve_amo_arbi_instance.address, false, { from: process.env.ARBITRUM_ONE_ADDRESS }); await hre.network.provider.request({ method: "hardhat_stopImpersonatingAccount", - params: [COMPTROLLER_ADDRESS] + params: [process.env.ARBITRUM_ONE_ADDRESS] }); - // await hre.network.provider.request({ - // method: "hardhat_impersonateAccount", - // params: [process.env.STAKING_OWNER_ADDRESS] - // }); - - // console.log("Add the FXS1559 AMO as a notifier to the yield distributor"); - // await veFXSYieldDistributorV4_instance.toggleRewardNotifier(fxs_1559_amo_instance.address, { from: process.env.STAKING_OWNER_ADDRESS }); - - // await hre.network.provider.request({ - // method: "hardhat_stopImpersonatingAccount", - // params: [process.env.STAKING_OWNER_ADDRESS] - // }); - - // ---------------------------------------------- - console.log(chalk.yellow('========== syncDollarBalances ==========')); - console.log(chalk.red("SKIPPING FOR NOW TO SAVE TIME!!!")); - console.log(chalk.red("SKIPPING FOR NOW TO SAVE TIME!!!")); - console.log(chalk.red("SKIPPING FOR NOW TO SAVE TIME!!!")); - - // Sync the AMO Minter - // await frax_amo_minter_instance.syncDollarBalances({ from: THE_ACCOUNTS[3] }); - // ---------------------------------------------- - console.log(chalk.yellow('========== DEPLOY CONTRACTS ==========')); - - console.log(chalk.yellow("--------DEPLOYING FPI CORE CONTRACTS--------")); - FPI.setAsDeployed(fpi_instance); - FPIS.setAsDeployed(fpis_instance); - FPIControllerPool.setAsDeployed(fpi_controller_pool_instance); - - console.log(chalk.yellow("--------DEPLOYING FRAX CORE CONTRACTS--------")); - FRAXStablecoin.setAsDeployed(frax_instance); - FRAXShares.setAsDeployed(fxs_instance); - GovernorAlpha.setAsDeployed(governance_instance); - Timelock.setAsDeployed(timelock_instance); - FraxPoolV3.setAsDeployed(pool_instance_v3); - - console.log(chalk.yellow("--------DEPLOYING GAUGE CONTRACTS--------")); - LiquidityGaugeV2.setAsDeployed(liquidity_gauge_v2_instance); - // FraxGaugeController.setAsDeployed(frax_gauge_controller); - FraxGaugeControllerV2.setAsDeployed(frax_gauge_controller_v2); - FraxGaugeFXSRewardsDistributor.setAsDeployed(gauge_rewards_distributor_instance); - - console.log(chalk.yellow("--------DEPLOYING KYBERSWAP CONTRACTS--------")); - IUniswapV3PositionsNFT.setAsDeployed(uniswapV3PositionsNFTInstance); - - console.log(chalk.yellow("--------DEPLOY MISC AMO CONTRACTS--------")); - FraxAMOMinter.setAsDeployed(frax_amo_minter_instance); - // FraxLiquidityBridger_AUR_Rainbow.setAsDeployed(frax_liquidity_bridger_aur_rainbow_instance); - TWAMM_AMO.setAsDeployed(twamm_amo_instance); - - console.log(chalk.yellow("--------DEPLOY ORACLE CONTRACTS--------")); - CPITrackerOracle.setAsDeployed(cpi_tracker_oracle_instance); - ComboOracle_KyberSwapElastic.setAsDeployed(combo_oracle_kyberswap_elastic_instance); - UniV3TWAPOracle.setAsDeployed(univ3_twap_oracle_instance); - - console.log(chalk.yellow("--------DEPLOYING UNISWAP CONTRACTS--------")); - IUniswapV2Router02.setAsDeployed(routerInstance); - IUniswapV2Factory.setAsDeployed(uniswapFactoryInstance); - IUniswapV3PositionsNFT.setAsDeployed(uniswapV3PositionsNFTInstance); - - console.log(chalk.yellow("--------DEPLOY STAKING CONTRACTS--------")); - FraxFarmRageQuitter_Temple.setAsDeployed(frax_farm_ragequitter_temple_instance); - FraxMiddlemanGauge_ARBI_Curve_VSTFRAX.setAsDeployed(middlemanGauge_ARBI_Curve_VSTFRAX); - FraxUnifiedFarm_ERC20_FraxswapV2.setAsDeployed(fraxUnifiedFarm_Fraxswap_FRAX_IQ_instance); - // FraxUnifiedFarm_ERC20_Fraxswap_FRAX_pitchFXS.setAsDeployed(fraxUnifiedFarm_Fraxswap_FRAX_pitchFXS_instance); - // FraxUnifiedFarm_ERC20_Temple_FRAX_TEMPLE.setAsDeployed(fraxUnifiedFarm_Temple_FRAX_TEMPLE_instance); - // FraxUnifiedFarm_KyberSwapElastic.setAsDeployed(fraxUnifiedFarm_KyberSwapElastic_instance); - // FraxUnifiedFarm_PosRebase_aFRAX.setAsDeployed(fraxUnifiedFarm_PosRebase_aFRAX_instance); - - console.log(chalk.yellow("--------DEPLOYING TWAMM CONTRACTS--------")); - UniV2TWAMMFactory.setAsDeployed(fraxswap_factory_instance); - UniV2TWAMMPair.setAsDeployed(twamm_pair_instance); - UniV2TWAMMRouter.setAsDeployed(fraxswap_router_instance); - - console.log(chalk.yellow("--------DEPLOYING veFPIS CONTRACTS--------")); - veFPIS.setAsDeployed(veFPIS_instance); - veFPISYieldDistributorV5.setAsDeployed(veFPISYieldDistributorV5_instance); - - console.log(chalk.yellow("--------DEPLOYING veFXS CONTRACTS--------")); - veFXS.setAsDeployed(veFXS_instance); - veFXSYieldDistributorV4.setAsDeployed(veFXSYieldDistributorV4_instance); - veFXSBoost.setAsDeployed(vefxs_boost_instance); - veFXSBoostDelegationProxy.setAsDeployed(vefxs_boost_deleg_proxy_instance); + CrossChainCanonicalFRAX.setAsDeployed(cross_chain_canonical_frax_instance); + CrossChainCanonicalFXS.setAsDeployed(cross_chain_canonical_fxs_instance); + anyFRAX.setAsDeployed(anyFRAX_instance); + anyFXS.setAsDeployed(anyFXS_instance); + arbiUSDC.setAsDeployed(arbiUSDC_instance); + arbiUSDT.setAsDeployed(arbiUSDT_instance); + CrossChainBridgeBacker_ARBI_AnySwap.setAsDeployed(cross_chain_bridge_backer_instance); + CrossChainOracle.setAsDeployed(cross_chain_oracle_instance); + FraxCCFarmV2_ArbiCurveVSTFRAX.setAsDeployed(FraxCCFarmV2_ArbiCurveVSTFRAX_instance); + FraxCCFarmV2_SaddleArbUSDv2.setAsDeployed(FraxCCFarmV2_SaddleArbUSDv2_instance); + FraxCCFarmV3_ArbiSaddleL2D4.setAsDeployed(FraxCCFarmV3_ArbiSaddleL2D4_instance); + SushiSwapLiquidityAMO_ARBI.setAsDeployed(sushiswap_liquidity_amo_arbi_instance); + CurveAMO_ARBI.setAsDeployed(curve_amo_arbi_instance); } \ No newline at end of file diff --git a/src/types/constants.ts b/src/types/constants.ts index 602b2149..322bc0e6 100755 --- a/src/types/constants.ts +++ b/src/types/constants.ts @@ -2458,12 +2458,14 @@ export const CONTRACT_ADDRESSES = { CVXfrxETH_Pool: '0x6e855d08f2984516c40c4246a385ba4a2edfcd0a', DOLAFRAXBP: '0xE57180685E3348589E9521aa53Af0BCD497E884d', DOLAFRAXBP_Pool: '0xE57180685E3348589E9521aa53Af0BCD497E884d', - eUSDFRAXBP: '0xaeda92e6a3b1028edc139a4ae56ec881f3064d4f', - eUSDFRAXBP_Pool: '0xaeda92e6a3b1028edc139a4ae56ec881f3064d4f', FRAXBP: '0x3175Df0976dFA876431C2E9eE6Bc45b65d3473CC', FRAXBP_Pool: '0xDcEF968d416a41Cdac0ED8702fAC8128A64241A2', + FRAXUSDP: '0xFC2838a17D8e8B1D5456E0a351B0708a09211147', + FRAXUSDP_Pool: '0xaE34574AC03A15cd58A92DC79De7B1A0800F1CE3', FXSfrxETH: '0x970faa9afbc5feb3ec53059ba330dee71e22b55b', FXSfrxETH_Pool: '0x5133da6ba0474368ad0398d953c8d31c1b75b82b', + GRAIFRAXBP: '', + GRAIFRAXBP_Pool: '', GUSDFRAXBP: '0x4e43151b78b5fbb16298C1161fcbF7531d5F8D93', GUSDFRAXBP_Pool: '0x4e43151b78b5fbb16298C1161fcbF7531d5F8D93', LUSDFRAXBP: '0x497CE58F34605B9944E6b15EcafE6b001206fd25', @@ -2487,6 +2489,9 @@ export const CONTRACT_ADDRESSES = { UZDFRAXBP_Pool: '0x68934f60758243eafaf4d2cfed27bf8010bede3a', XAIFRAXBP: '0x326290A1B0004eeE78fa6ED4F1d8f4b2523ab669', XAIFRAXBP_Pool: '0x326290A1B0004eeE78fa6ED4F1d8f4b2523ab669', + ZUSDFRAXBP: '0x400d4c984779a747462e88373c3fe369ef9f5b50', + ZUSDFRAXBP_Pool: '0x400d4c984779a747462e88373c3fe369ef9f5b50', + ZUSDFRAXBP_Gauge: '0x218e4678318ab5527e41135713193e5ead73337f', aFRAX: '0xd4937682df3C8aEF4FE912A96A74121C0829E664', aUSDC: '0xBcca60bB61934080951369a648Fb03DF4F96263C', agEURFRAXBP: '0x22e859Ee894c2068920858A60b51DC03ac5581c1', @@ -2507,6 +2512,9 @@ export const CONTRACT_ADDRESSES = { clevUSDFRAXBP_Pool: '0x84c333e94aea4a51a21f6cf0c7f528c50dc7592c', crvFRAX: '0x3175Df0976dFA876431C2E9eE6Bc45b65d3473CC', crvFRAX_Gauge: '0xcfc25170633581bf896cb6cdee170e3e3aa59503', + crvUSDFRAX: '0x0cd6f267b2086bea681e922e19d40512511be538', + crvUSDFRAX_Gauge: '0x96424e6b5eaafe0c3b36ca82068d574d44be4e3c', + crvUSDFRAX_Pool: '0x0cd6f267b2086bea681e922e19d40512511be538', curve4pool: '0x4e0915c88bc70750d68c481540f081fefaf22273', cvxALCXFRAXBP: '0xCf9fC20189755354edDdED66C9ED9DFADAFd7a2E', cvxALCXFRAXBP_Rewarder: '0xC10fD95fd3B56535668426B2c8681AD1E15Be608', @@ -2523,10 +2531,12 @@ export const CONTRACT_ADDRESSES = { cvxCVXFRAXBP_Rewarder: '0xf02B3A77b1e7775de10294d78a4c3d77772B484A', cvxDOLAFRAXBP: '0xf7eCC27CC9DB5d28110AF2d89b176A6623c7E351', cvxDOLAFRAXBP_Rewarder: '0x0404d05F3992347d2f0dC3a97bdd147D77C85c1c', - cvxeUSDFRAXBP: '0x8e074d44aaBC1b3b4406fE03Da7ceF787ea85938', - cvxeUSDFRAXBP_Rewarder: '0xB468dB2E478885B87D7ce0C8DA1D4373A756C138', + cvxFRAXUSDP: '0x29c22337E3ce362Ce4ad8ecc9CE11fE5A08DBA3c', + cvxFRAXUSDP_Rewarder: '0x6991C1CD588c4e6f6f1de3A0bac5B8BbAb7aAF6d', cvxFXSFRAXBP: '0xF57ccaD8122B898A147Cc8601B1ECA88B1662c7E', cvxFXSFRAXBP_Pool: '0x21d158d95C2e150e144c36FC64E3653B8D6c6267', + cvxGRAIFRAXBP: '', + cvxGRAIFRAXBP_Rewarder: '', cvxGUSDFRAXBP: '0xfbd79471A12929De8379a6CbaF320E150f139ac4', cvxGUSDFRAXBP_Rewarder: '0x47809eE386D1dEC29c0b13f21ba30F564517538B', cvxLUSDFRAXBP: '0xE8a371b5D32344033589A2F0a2712dBD12130b18', @@ -2539,7 +2549,7 @@ export const CONTRACT_ADDRESSES = { cvxRSRFRAXBP_Rewarder: '0x28441fb9b8b026487A6174Ff39Be015810611C0F', cvxSDTFRAXBP: '0x95B051E97957f1D48C622Bf73225E3d4c2B189fb', cvxSDTFRAXBP_Rewarder: '0xc3df9cC2B8FFdB801E8e6E8FF9C1245E2dEcdA98', - cvxSTGFRAXBP: '0x61ff639743EE7e0c7319fC639D2B92F8B49dDd3f', + cvxSTGFRAXBP: '0x867fe27fc2462cff8890b54dfd64e6d42a9d1ac8', cvxSTGFRAXBP_Rewarder: '0xAa57A289Bb22a1A0C583db306F6566AE2c0CAf21', cvxTUSDFRAXBP: '0x33baeDa08b8afACc4d3d07cf31d49FC1F1f3E893', cvxTUSDFRAXBP_Rewarder: '0x4a744870fD705971c8c00aC510eAc2206C93d5bb', @@ -2549,6 +2559,8 @@ export const CONTRACT_ADDRESSES = { cvxUZDFRAXBP_Rewarder: '0x820Fad75512c8C3E57Ad021d016846CEEB5F7105', cvxXAIFRAXBP: '0xEbB0Dd1AfE63813AdD4c38EEbd71CE7354dd9b7e', cvxXAIFRAXBP_Rewarder: '0x4a866fE20A442Dff55FAA010684A5C1379151458', + cvxZUSDFRAXBP: '0xd48494c36F98BE491f6Cfd6841617e847C819806', + cvxZUSDFRAXBP_Rewarder: '0xFd3A7636694259b32B3896f59436997AD25380cA', cvxagEURFRAXBP: '0x9e187393cBc76c8Bf8e8a06bD7737a7cabe9d66C', cvxagEURFRAXBP_Rewarder: '0x17962aB30c7F291b125A0A38d0ad220ab22F8a5B', cvxalUSDFRAXBP: '0x5BcAfc77f19F72bCf1420cC1722c3e06E16Ec29a', @@ -2559,12 +2571,34 @@ export const CONTRACT_ADDRESSES = { cvxclevUSDFRAXBP_Rewarder: '0x710e85B2793b3AE88Cb1Da3cb25b3d62D810d180', cvxcrvFRAX: '0x117A0bab81F25e60900787d98061cCFae023560c', cvxcrvFRAX_Rewarder: '0x7e880867363A7e321f5d260Cade2B0Bb2F717B02', + cvxcrvUSDFRAX: '0x01CcDe1dFb6c84e1Cc13a6Bf777aa2160ABd11BA', + cvxcrvUSDFRAX_Rewarder: '0x3CfB4B26dc96B124D15A6f360503d028cF2a3c00', cvxcvxCRVFRAXBP: '0x2aE739F40Cda5F053F9dbecE7E177Fcbdc4A07D9', cvxcvxCRVFRAXBP_Rewarder: '0xdEbc7B51043b4D0dd4f3310C68A12382b8843ceE', cvxcvxFXSFRAXBP: '0xDad9DB2c7c96a1496493E6D48d131a2667f284f9', cvxcvxFXSFRAXBP_Rewarder: '0x19eA715F854dB2196C6f45A174541a5Ac884D2f9', + cvxeUSDFRAXBP: '0x8e074d44aaBC1b3b4406fE03Da7ceF787ea85938', + cvxeUSDFRAXBP_Rewarder: '0xB468dB2E478885B87D7ce0C8DA1D4373A756C138', + cvxfrxETHCRV_New: "0x41603dA2DD26E6fe29CAe074fC6772053A39C2A9", + cvxfrxETHCRV_New_Rewarder: "0xd5dC65ec6948845C1C428fb60BE38FE59B50BD13", + cvxfrxETHCVX_New: "0xAc4b1295F9Aeb1DB29acB37902bE349a79a66403", + cvxfrxETHCVX_New_Rewarder: "0xA064C1EeEbECD1DF41432f4B7264F508F005aF0C", cvxfrxETHETH: '0xC07e540DbFecCF7431EA2478Eb28A03918c1C30E', // Curve calls it cvxfrxETHCRV cvxfrxETHETH_Rewarder: '0xbD5445402B0a287cbC77cb67B2a52e2FC635dce4', + cvxfrxETHalETH_New: "0x112E8f4b685475CcEd5C38142Cd7A2aE41ef6737", + cvxfrxETHalETH_New_Rewarder: "0xe0DbbCF08A5465db7c7401C86cce89030e11aB67", + cvxfrxETHankrETH_New: "0xc18695D5824C49cF50E054953B3A5910c45597A0", + cvxfrxETHankrETH_New_Rewarder: "0xc18695D5824C49cF50E054953B3A5910c45597A0", + cvxfrxETHcbETH_New: "0x39E1Ea9CB87a352CfFd43e0b19D573d12cf110CC", + cvxfrxETHcbETH_New_Rewarder: "0x0080d49D4a4921dF0F3853c5e4533462A51fbb29", + cvxfrxETHrETH_New: "0xeEC515BE690BF445c8C4d1625FD82FA75Bc38bf6", + cvxfrxETHrETH_New_Rewarder: "0x84754821b5484A69DB3164eF4eDC5A5657318039", + cvxfrxETHrETH_StaFi: "", + cvxfrxETHrETH_StaFi_Rewarder: "", + cvxfrxETHsETH_New: "0xf67FEC3D0A32418813bE2BcdD78e058BCFa33AE8", + cvxfrxETHsETH_New_Rewarder: "0x55cdF6c7E6d04b83835E4702ed395D0263237DA2", + cvxfrxETHstETH_New: "0x01492A2cB0Bd14034710475197B4169501B49Ead", + cvxfrxETHstETH_New_Rewarder: "0xC3D0B8170E105d6476fE407934492930CAc3BDAC", cvxgusd3CRV_free: '0x15c2471ef46Fa721990730cfa526BcFb45574576', cvxmsUSDFRAXBP: '0xc3b19502F8c02be75F3f77fd673503520DEB51dD', cvxmsUSDFRAXBP_Rewarder: '0xF189A4a1E845Fd62944F93De497409798523B397', @@ -2572,9 +2606,40 @@ export const CONTRACT_ADDRESSES = { cvxpUSDFRAXBP_Rewarder: '0x6d096C99Cc2Ea52490355311b73D86365Acf087f', cvxsUSDFRAXBP: '0x8E2A6e9390CbD4C3895D07E4Cb171C0527990dF6', cvxsUSDFRAXBP_Rewarder: '0x3fABBDfe05487De1720a9420fE2e16d2c3e79A9D', + cvxswETHfrxETH: '0x1fb9115929b32D4456C37B80536a2C9434061296', + cvxswETHfrxETH_Rewarder: '0x91362eBf6DbFA5c0FD45CE4cF46DfFd4A8899c7C', d3pool: '0xBaaa1F5DbA42C3389bDbc2c9D2dE134F5cD0Dc89', + eUSDFRAXBP: '0xaeda92e6a3b1028edc139a4ae56ec881f3064d4f', + eUSDFRAXBP_Pool: '0xaeda92e6a3b1028edc139a4ae56ec881f3064d4f', + frxETHCRV_New: "0xc34993c9adf6a5ab3b4ca27dc71b9c7894a53974", + frxETHCRV_New_Gauge: "0x266ce172a1180134cf6c7836c516bd6a58b1f619", + frxETHCRV_New_Pool: "0x442f37cfd85d3f35e576ad7d63bba7bb36fcfe4a", + frxETHCVX_New: "0x6e52cce4eafdf77091dd1c82183b2d97b776b397", + frxETHCVX_New_Gauge: "0xc2075702490f0426e84e00d8b328119027813ac5", + frxETHCVX_New_Pool: "0x47d5e1679fe5f0d9f0a657c6715924e33ce05093", frxETHETH: '0xf43211935C781D5ca1a41d2041F397B8A7366C7A', // Curve calls it frxETHCRV frxETHETH_Pool: '0xa1F8A6807c402E4A15ef4EBa36528A3FED24E577', + frxETHalETH_New: "0xb657b895b265c38c53fff00166cf7f6a3c70587d", + frxETHalETH_New_Gauge: "0x415f30505368fa1db82feea02eb778be04e75907", + frxETHalETH_New_Pool: "0xb657b895b265c38c53fff00166cf7f6a3c70587d", + frxETHankrETH_New: "0xa8e14f03124ea156a4fc416537c82ff91a647d50", + frxETHankrETH_New_Gauge: "0x86f8d7ced9a8f5563c1198466968b02238e05917", + frxETHankrETH_New_Pool: "0x41ea4045de2676727883aa0b4e43d7e32261f559", + frxETHcbETH_New: "0x548e063ce6f3bac31457e4f5b4e2345286274257", + frxETHcbETH_New_Gauge: "0xd10c17d82053dd0ab65851a9a93a0abe0c4f4794", + frxETHcbETH_New_Pool: "0x73069892f6750ccaaababadc54b6b6b36b3a057d", + frxETHrETH_New: "0xba6c373992ad8ec1f7520e5878e5540eb36debf1", + frxETHrETH_New_Gauge: "0xf20bd4d5a4112d5f9c64adf53726f3ef1b7d0d61", + frxETHrETH_New_Pool: "0xe7c6e0a739021cdba7aac21b4b728779eef974d9", + frxETHrETH_StaFi: "", + frxETHrETH_StaFi_Gauge: "", + frxETHrETH_StaFi_Pool: "", + frxETHsETH_New: "0x663ac72a1c3e1c4186cd3dcb184f216291f4878c", + frxETHsETH_New_Gauge: "0x77ef5d544ff6c739e7e10a549f64dd08055538d1", + frxETHsETH_New_Pool: "0x663ac72a1c3e1c4186cd3dcb184f216291f4878c", + frxETHstETH_New: "0x4d9f9d15101eec665f77210cb999639f760f831e", + frxETHstETH_New_Gauge: "0x821529bb07c83803c9cc7763e5974386e9efedc7", + frxETHstETH_New_Pool: "0x4d9f9d15101eec665f77210cb999639f760f831e", gOHM: '0x0ab87046fBb341D058F17CBC4c1133F25a20a52f', gusd3CRV: '0xd2967f45c4f384deea880f807be904762a3dea07', msUSDFRAXBP: '0xc3b19502f8c02be75f3f77fd673503520deb51dd', @@ -2618,11 +2683,13 @@ export const CONTRACT_ADDRESSES = { stkcvxBUSDFRAXBP: '0x20c5177504A3f9Bad59c430791feA853EeAD4CCE', stkcvxCOILFRAXBP: '0xa5B6f8Ec4122c5Fe0dBc4Ead8Bfe66A412aE427C', stkcvxCRV: '0xaa0c3f5f7dfd688c6e646f66cd2a6b66acdbe434', + stkcvxCRVUSDFRAX: '0xb6F63cc2066e7626fA47fCC37E78Df9fe89F1663', stkcvxCVXFRAXBP: '0x93D1De20eaBB21686CFe716f78F67E51ee578185', stkcvxDOLAFRAXBP: '0xF06c8696730cf760619e4fA0eDd0f79ea50531A9', - stkcvxeUSDFRAXBP: '0x49BF6f9B860fAF73B0b515c06Be1Bcbf4A0db3dF', stkcvxFPIFRAX: '0x7287488F8Df7dddc5f373142D4827aAF92AAC845', stkcvxFRAXBP: '0x8a53ee42FB458D4897e15cc7dEa3F75D0F1c3475', + stkcvxFRAXUSDP: '0x5385AE7dC08F5C3799691E5b387cB01108B76627', + stkcvxGRAIFRAXBP: '', stkcvxGUSDFRAXBP: '0x16e9eaC2A9e29aF3c53d24ed0F07fc403E098b64', stkcvxLUSDFRAXBP: '0x8C402989a966D37B96f60401A6158D5D49f1381D', stkcvxMAIFRAXBP: '0x787eB52b94c4610ABE2C9C5eE95c3a4a16533344', @@ -2634,16 +2701,30 @@ export const CONTRACT_ADDRESSES = { stkcvxUSDDFRAXBP: '0x507e41A64eB7AE47ee303e3B16237ab757F6C06c', stkcvxUZDFRAXBP: '0xaa236bd1302755937Aa46D6f3423655BbC654B02', stkcvxXAIFRAXBP: '0x19f0a60f4635d3E2c48647822Eda5332BA094fd3', + stkcvxZUSDFRAXBP: '0xFD2d7847E0f450d8B00d3D697D720C687E622a7B', stkcvxagEURFRAXBP: '0x78b74C93c726B6e29d0Ef5A01764fA19eCCF0C1c', stkcvxalUSDFRAXBP: '0xBE1C919cA137299715e9c929BC7126Af14f76091', stkcvxapeUSDFRAXBP: '0x6a20FC1654A2167d00614332A5aFbB7EBcD9d414', stkcvxclevUSDFRAXBP: '0x3199a1ed1Ad4cb1d1b57939809c8ee79eafE9934', stkcvxcvxCRVFRAXBP: '0xa103a6ca0C4D4072BA59a55FD453BFE4197A095B', stkcvxcvxFXSFRAXBP: '0xA6A8F315b1a8C9B05433d206b8fECfbF0fC96217', + stkcvxeUSDFRAXBP: '0x49BF6f9B860fAF73B0b515c06Be1Bcbf4A0db3dF', + stkcvxfrxETHCRV_New: "0x194aA54376886dAd3d08e71F47D189A88251D8Da", + stkcvxfrxETHCVX_New: "0x5B31bf2988E5388Edae2960504d96Bc142742dCb", stkcvxfrxETHETH: '0x4659d5fF63A1E1EDD6D5DD9CC315e063c95947d0', // Convex calls it stkcvxfrxETHCRV + stkcvxfrxETHalETH_New: "0x8A59781B415288f9E633b948618726CB6E47e980", + stkcvxfrxETHankrETH_New: "0x75A439b3F8106428b86198D8c306c57E9e7Bb3dC", + stkcvxfrxETHcbETH_New: "0x4e9D8323603E69c1310E5e04Db172bD5aB07df95", + stkcvxfrxETHrETH_New: "0xE0c65F74728Ff26219C6adddCEfB215484bb08DF", + stkcvxfrxETHrETH_StaFi: "", + stkcvxfrxETHsETH_New: "0x44b51F7F92D761Cf2FC46011AD6b74Ce56447924", + stkcvxfrxETHstETH_New: "0xc2eC3d1209FD1Fc512950825f34281EaF9aB13A2", stkcvxmsUSDFRAXBP: '0x227b7F44468A0EC0FDdfc3FB0cE09b294E62f875', stkcvxpUSDFRAXBP: '0x7AEF5bDC573dCbfb40EC68b0BAAB03abB846C9c6', stkcvxsUSDFRAXBP: '0x9f0C2673a33b7087e367253f196A7E823fBc2341', + stkcvxswETHfrxETH: '0xa3ae006Cc863423F690ca01C2a8F692B97c93c3b', + swETHfrxETH: '0xe49addc2d1a131c6b8145f0eba1c946b7198e0ba', + swETHfrxETH_Pool: '0x67e0bdbe0a2c5999a60d048f50e794218056b767', tFRAX: '0x94671a3cee8c7a12ea72602978d1bb84e920efb2', tFXS: '0xadf15ec41689fc5b6dca0db7c53c9bfe7981e655', veCRV: '0x5f3b5DfEb7B28CDbD7FAba78963EE202a494e2A2', @@ -2699,9 +2780,11 @@ export const CONTRACT_ADDRESSES = { }, vamms: {}, pair_tokens: { - "Aave aFRAX": "0xd4937682df3C8aEF4FE912A96A74121C0829E664", - "Bunni FRAX/USDC Gauge": "0x471A34823DDd9506fe8dFD6BC5c2890e4114Fafe", - "Bunni frxETH/WETH Gauge": "0x4Bf0082080d937897330BAB735c2Baa99FF16F19", + 'Aave aFRAX': '0xd4937682df3C8aEF4FE912A96A74121C0829E664', + 'Angle FRAX/agEUR Staking': '0xb3b209bb213a5da5b947c56f2c770b3e1015f1fe', + 'Balancer sfrxETH-stETH-rETH-BPT': '0x8e85e97ed19C0fa13B2549309965291fbbc0048b', + 'Bunni FRAX/USDC Gauge': '0x471A34823DDd9506fe8dFD6BC5c2890e4114Fafe', + 'Bunni frxETH/WETH Gauge': '0x4Bf0082080d937897330BAB735c2Baa99FF16F19', 'Convex stkcvxagEURFRAXBP': '0x78b74C93c726B6e29d0Ef5A01764fA19eCCF0C1c', 'Convex stkcvxALCXFRAXBP': '0xAF1b82809296E52A42B3452c52e301369Ce20554', 'Convex stkcvxalUSDFRAXBP': '0xBE1C919cA137299715e9c929BC7126Af14f76091', @@ -2709,15 +2792,28 @@ export const CONTRACT_ADDRESSES = { 'Convex stkcvxBADGERFRAXBP': '0xb92e3fD365Fc5E038aa304Afe919FeE158359C88', 'Convex stkcvxBUSDFRAXBP': '0x20c5177504A3f9Bad59c430791feA853EeAD4CCE', 'Convex stkcvxclevUSDFRAXBP': '0x3199a1ed1Ad4cb1d1b57939809c8ee79eafE9934', + 'Convex stkcvxCOILFRAXBP (Deprecated)': '0xa5B6f8Ec4122c5Fe0dBc4Ead8Bfe66A412aE427C', 'Convex stkcvxCOILFRAXBP': '0xa5B6f8Ec4122c5Fe0dBc4Ead8Bfe66A412aE427C', + 'Convex stkcvxcrvUSDFRAX' : '0xb6F63cc2066e7626fA47fCC37E78Df9fe89F1663', 'Convex stkcvxCVXFRAXBP': '0x93D1De20eaBB21686CFe716f78F67E51ee578185', 'Convex stkcvxcvxCRVFRAXBP': '0xa103a6ca0C4D4072BA59a55FD453BFE4197A095B', 'Convex stkcvxcvxFXSFRAXBP': '0xA6A8F315b1a8C9B05433d206b8fECfbF0fC96217', 'Convex stkcvxDOLAFRAXBP': '0xF06c8696730cf760619e4fA0eDd0f79ea50531A9', 'Convex stkcvxeUSDFRAXBP': '0x49BF6f9B860fAF73B0b515c06Be1Bcbf4A0db3dF', + 'Convex stkcvxGRAIFRAXBP': '', 'Convex stkcvxGUSDFRAXBP': '0x16e9eaC2A9e29aF3c53d24ed0F07fc403E098b64', 'Convex stkcvxFPIFRAX': '0x7287488F8Df7dddc5f373142D4827aAF92AAC845', 'Convex stkcvxFRAXBP': '0x8a53ee42FB458D4897e15cc7dEa3F75D0F1c3475', + 'Convex stkcvxFRAXUSDP' : '0x5385AE7dC08F5C3799691E5b387cB01108B76627', + 'Convex stkcvxfrxETHCRV_New': '0x194aA54376886dAd3d08e71F47D189A88251D8Da', + 'Convex stkcvxfrxETHCVX_New': '0x5B31bf2988E5388Edae2960504d96Bc142742dCb', + 'Convex stkcvxfrxETHalETH_New': '0x8A59781B415288f9E633b948618726CB6E47e980', + 'Convex stkcvxfrxETHankrETH_New': '0x75A439b3F8106428b86198D8c306c57E9e7Bb3dC', + 'Convex stkcvxfrxETHcbETH_New': '0x4e9D8323603E69c1310E5e04Db172bD5aB07df95', + 'Convex stkcvxfrxETHrETH_New': '0xE0c65F74728Ff26219C6adddCEfB215484bb08DF', + 'Convex stkcvxfrxETHrETH_StaFi': '', + 'Convex stkcvxfrxETHsETH_New': '0x44b51F7F92D761Cf2FC46011AD6b74Ce56447924', + 'Convex stkcvxfrxETHstETH_New': '0xc2eC3d1209FD1Fc512950825f34281EaF9aB13A2', 'Convex stkcvxfrxETHETH': '0x4659d5fF63A1E1EDD6D5DD9CC315e063c95947d0', 'Convex stkcvxLUSDFRAXBP': '0x8C402989a966D37B96f60401A6158D5D49f1381D', 'Convex stkcvxMAIFRAXBP': '0x787eB52b94c4610ABE2C9C5eE95c3a4a16533344', @@ -2728,137 +2824,231 @@ export const CONTRACT_ADDRESSES = { 'Convex stkcvxSDTFRAXBP': '0xE6Aa75F98e6c105b821a2dba9Fbbd886b421F06b', 'Convex stkcvxSTGFRAXBP': '0xAe1bA2Cf0eBF00C5052309992d7B6c94e3EfcBEf', 'Convex stkcvxsUSDFRAXBP': '0x9f0C2673a33b7087e367253f196A7E823fBc2341', + 'Convex stkcvxswETHfrxETH' : '0xa3ae006Cc863423F690ca01C2a8F692B97c93c3b', 'Convex stkcvxTUSDFRAXBP': '0x32fA492Ac1F729E0eE9eDdfCBacc3ef72B234e27', 'Convex stkcvxUSDDFRAXBP': '0x507e41A64eB7AE47ee303e3B16237ab757F6C06c', + 'Convex stkcvxUZDFRAXBP (Deprecated)': '0xaa236bd1302755937Aa46D6f3423655BbC654B02', 'Convex stkcvxUZDFRAXBP': '0xaa236bd1302755937Aa46D6f3423655BbC654B02', 'Convex stkcvxXAIFRAXBP': '0x19f0a60f4635d3E2c48647822Eda5332BA094fd3', - "Curve FRAX/FPI": "0xf861483fa7E511fbc37487D91B6FAa803aF5d37c", - "Curve FRAX/SILO": "0x9a22CDB1CA1cdd2371cD5BB5199564C4E89465eb", - "Curve FRAX3CRV-f-2": "0xd632f22692fac7611d2aa1c0d552930d43caed3b", // Proxied For: https://etherscan.io/address/0x5f890841f657d90e081babdb532a05996af79fe6 - "Curve FXS/ETH": "0x941Eb6F616114e4Ecaa85377945EA306002612FE", - "Curve FXS/cvxFXS": "0xd658A338613198204DCa1143Ac3F01A722b5d94A", - "Curve MIM3CRV": "0x5a6A4D54456819380173272A5E8E9B9904BdF41B", - "Curve d3pool": "0xBaaa1F5DbA42C3389bDbc2c9D2dE134F5cD0Dc89", - "Fraxlend V1 FRAX/FXS": '0xDbe88DBAc39263c47629ebbA02b3eF4cf0752A72', - "Fraxswap V1 FPI/FPIS": "0xD3542ec999ceA6C79f09483fF88833f154a5e92f", // Old: "0x04BBDA16ed5C9dB488B47d128bC2A43a2dC53303", - "Fraxswap V1 FPI/FXS": "0x843B5Ae5861362F20A3aC185A2dD2393D7526C65", // Old: "0xdc95403d54a7BB182e9AAb861c1c3a74d9fB9E57", - "Fraxswap V1 FRAX/FPI": "0x5A1eA0130Dc4DC38420AA77929f992f1FBd482Bb", // Old: "0x7d95b33cbEC441917d4f617482d4b5c7e6c35902", - "Fraxswap V1 FRAX/FPIS": "0x99887AC15eBCcbad52FA2c9ceDc9D91A91e36051", // Old: "0x25be6ce04a504D4BCEcb6ba7f5967F7aae6Af579", - "Fraxswap V1 FRAX/FXS": "0x8206412c107eF1aDb70B9277974f5163760E128E", // Old "0x122F21a89a0A7197FF18C6e2995322ac29f42873", - "Fraxswap V1 FRAX/IQ V2": "0xcB0bC7C879bb3E9CFEB9d8EFef653F33B3d242e9", - "Fraxswap V1 FRAX/IQ V3": "0xcB0bC7C879bb3E9CFEB9d8EFef653F33B3d242e9", - "Fraxswap V1 FRAX/IQ": "0xcB0bC7C879bb3E9CFEB9d8EFef653F33B3d242e9", - "Fraxswap V1 FRAX/SYN": "0x750Bb20608601e4C44aCbE774fAC8F37dab67c86", - "Fraxswap V1 FRAX/WETH": "0x8300f0528e00Ad33b218bb05D396F61A9FDd68Cd", // Old: "0xf2E9fda1fE6a21E519174852A5c752Bd9FBA05A4", - "Fraxswap V1 FRAX/pitchFXS V2": "0x0a92aC70B5A187fB509947916a8F63DD31600F80", - "Fraxswap V1 FRAX/pitchFXS V3": "0x0a92aC70B5A187fB509947916a8F63DD31600F80", - "Fraxswap V1 FRAX/pitchFXS": "0x0a92aC70B5A187fB509947916a8F63DD31600F80", - "Fraxswap V1 FXS/FPIS": "0x1306b420B4B5f99cBeE938E369f06863a0f419A5", // Old: "0xfCCDE09b708115246174DAAFCB13a63332Fc22f0", - "Fraxswap V2 FPI/FPIS": "0xF14766a7C44EFb7F71441B7114d5Dd295B637175", - "Fraxswap V2 FPI/FXS": "0x3ECfdA4EfF6184cD8563772D6d024cB0Fb9cBf80", - "Fraxswap V2 FRAX/FPI": "0xd79886841026a39cFF99321140B3c4D31314782B", - "Fraxswap V2 FRAX/FPIS": "0x56695c26b3Cdb528815cd22fF7B47510ab821EFd", - "Fraxswap V2 FRAX/FXS": "0x03B59Bd1c8B9F6C265bA0c3421923B93f15036Fa", - "Fraxswap V2 FRAX/IQ": "0x07AF6BB51d6Ad0Cf126E3eD2DeE6EaC34BF094F8", - "Fraxswap V2 FRAX/OHM": "0x5769071665eb8Db80e7e9226F92336Bb2897DCFA", - "Fraxswap V2 FRAX/pitchFXS": "0x2bac101F9769AEfF63c63EFfB4189152e833649F", - "Fraxswap V2 FRAX/SDL": "0xCCB26b5CC4e1Ce29521DA281a0107A6672bfe099", - "Fraxswap V2 FRAX/SYN": "0x832c6f546Bf34A552DeB8773216a93bf6801028c", - "Fraxswap V2 FRAX/WETH": "0x31351Bf3fba544863FBff44DDC27bA880916A199", - "Fraxswap V2 FRAX/ZZ": "0x5E8c1aD4c3D04f059d5c1A2Ce4593e53be270bca", - "Fraxswap V2 FXS/FPIS": "0x7a9Bd205B55cCB1Cc1c5B99FF5Db87a6e7B2C38b", - "Gelato Uniswap FRAX/DAI": "0xb1Cfdc7370550f5e421E1bf0BF3CADFaDF3C4141", - "KyberSwap Elastic FRAX/USDC 0.04%": "0x2B1c7b41f6A8F2b2bc45C3233a5d5FB3cD6dC9A8", // KyberSwap: Anti Snipping (sic) Attack Position Manager - "Saddle alUSD/FEI/FRAX/LUSD": "0xd48cF4D7FB0824CC8bAe055dF3092584d0a1726A", - "StakeDAO sdETH-FraxPut": "0x839A989bE40f2D60f00beEB648903732c041CBd7", - "StakeDAO sdFRAX3CRV-f": "0x5af15DA84A4a6EDf2d9FA6720De921E1026E37b7", - "Sushi FRAX/SUSHI": "0xe06F8d30AC334c857Fc8c380C85969C150f38A6A", - // "Sushi FXS/WETH": "0xeC8C342bc3E07F05B9a782bc34e7f04fB9B44502", - "Temple FRAX/TEMPLE": "0x6021444f1706f15465bEe85463BCc7d7cC17Fc03", - "Uniswap FRAX/FXS": "0xE1573B9D29e2183B1AF0e743Dc2754979A40D237", - "Uniswap FRAX/IQ": "0xd6c783b257e662ca949b441a4fcb08a53fc49914", - "Uniswap FRAX/OHM": "0x2dce0dda1c2f98e0f171de8333c3c6fe1bbf4877", - "Uniswap FRAX/TEMPLE": "0x6021444f1706f15465bEe85463BCc7d7cC17Fc03", // THEIR CUSTOM AMM, NOT EXACT - "Uniswap FRAX/USDC": "0x97C4adc5d28A86f9470C70DD91Dc6CC2f20d2d4D", - "Uniswap FRAX/WETH": "0xFD0A40Bc83C5faE4203DEc7e5929B446b07d1C76", - "Uniswap FXS/WETH": "0xecBa967D84fCF0405F6b32Bc45F4d36BfDBB2E81", - "Uniswap V3 FRAX/DAI": "0xC36442b4a4522E871399CD717aBDD847Ab11FE88", // Uniswap V3 Positions NFT - "Uniswap V3 FRAX/USDC": "0xC36442b4a4522E871399CD717aBDD847Ab11FE88", // Uniswap V3 Positions NFT - "Uniswap V3 FRAX/WETH": "0xC36442b4a4522E871399CD717aBDD847Ab11FE88", // Uniswap V3 Positions NFT - "Uniswap V3 FRAX/agEUR": "0xC36442b4a4522E871399CD717aBDD847Ab11FE88", // Uniswap V3 Positions NFT - "Vesper Orbit FRAX": "0xc14900dFB1Aa54e7674e1eCf9ce02b3b35157ba5", - // "Curve FRAX-DAI-USDC-USDT": "0x83D2944d5fC10A064451Dc5852f4F47759F249B6", // Proxied Implementation: https://etherscan.io/address/0x2c7796c0590cc100d70af473993890d457cb2ac9#code - // "Sushi FRAX/FXS": "0xc218001e3D102e3d1De9bf2c0F7D9626d76C6f30", - // "Sushi FXS/WETH": "0x61eB53ee427aB4E007d78A9134AaCb3101A2DC23", + 'Convex stkcvxZUSDFRAXBP': '0xFD2d7847E0f450d8B00d3D697D720C687E622a7B', + 'Curve FRAX/FPI': '0xf861483fa7E511fbc37487D91B6FAa803aF5d37c', + 'Curve FRAX/SILO': '0x9a22CDB1CA1cdd2371cD5BB5199564C4E89465eb', + 'Curve FRAX3CRV-f-2': '0xd632f22692fac7611d2aa1c0d552930d43caed3b', // Proxied For: https://etherscan.io/address/0x5f890841f657d90e081babdb532a05996af79fe6 + 'Curve FXS/ETH': '0x941Eb6F616114e4Ecaa85377945EA306002612FE', + 'Curve FXS/cvxFXS': '0xd658A338613198204DCa1143Ac3F01A722b5d94A', + 'Curve MIM3CRV': '0x5a6A4D54456819380173272A5E8E9B9904BdF41B', + 'Curve d3pool': '0xBaaa1F5DbA42C3389bDbc2c9D2dE134F5cD0Dc89', + 'dForce FRAX Lending [Ethereum]': '0x71173e3c6999c2C72ccf363f4Ae7b67BCc7E8F63', + 'Flux Finance fFRAX': '0x1c9a2d6b33b4826757273d47ebee0e2dddcd978b', + 'Fraxlend V1 FRAX/FXS': '0xDbe88DBAc39263c47629ebbA02b3eF4cf0752A72', + 'Fraxswap V1 FPI/FPIS': '0xD3542ec999ceA6C79f09483fF88833f154a5e92f', // Old: "0x04BBDA16ed5C9dB488B47d128bC2A43a2dC53303", + 'Fraxswap V1 FPI/FXS': '0x843B5Ae5861362F20A3aC185A2dD2393D7526C65', // Old: "0xdc95403d54a7BB182e9AAb861c1c3a74d9fB9E57", + 'Fraxswap V1 FRAX/FPI': '0x5A1eA0130Dc4DC38420AA77929f992f1FBd482Bb', // Old: "0x7d95b33cbEC441917d4f617482d4b5c7e6c35902", + 'Fraxswap V1 FRAX/FPIS': '0x99887AC15eBCcbad52FA2c9ceDc9D91A91e36051', // Old: "0x25be6ce04a504D4BCEcb6ba7f5967F7aae6Af579", + 'Fraxswap V1 FRAX/FXS': '0x8206412c107eF1aDb70B9277974f5163760E128E', // Old "0x122F21a89a0A7197FF18C6e2995322ac29f42873", + 'Fraxswap V1 FRAX/IQ V2': '0xcB0bC7C879bb3E9CFEB9d8EFef653F33B3d242e9', + 'Fraxswap V1 FRAX/IQ V3': '0xcB0bC7C879bb3E9CFEB9d8EFef653F33B3d242e9', + 'Fraxswap V1 FRAX/IQ': '0xcB0bC7C879bb3E9CFEB9d8EFef653F33B3d242e9', + 'Fraxswap V1 FRAX/SYN': '0x750Bb20608601e4C44aCbE774fAC8F37dab67c86', + 'Fraxswap V1 FRAX/WETH': '0x8300f0528e00Ad33b218bb05D396F61A9FDd68Cd', // Old: "0xf2E9fda1fE6a21E519174852A5c752Bd9FBA05A4", + 'Fraxswap V1 FRAX/pitchFXS V2': '0x0a92aC70B5A187fB509947916a8F63DD31600F80', + 'Fraxswap V1 FRAX/pitchFXS V3': '0x0a92aC70B5A187fB509947916a8F63DD31600F80', + 'Fraxswap V1 FRAX/pitchFXS': '0x0a92aC70B5A187fB509947916a8F63DD31600F80', + 'Fraxswap V1 FXS/FPIS': '0x1306b420B4B5f99cBeE938E369f06863a0f419A5', // Old: "0xfCCDE09b708115246174DAAFCB13a63332Fc22f0", + 'Fraxswap V2 FXS/frxETH': '0x49FD21C5C8813B1bAE4e5507C556391D6Dd9e9f1', + 'Fraxswap V2 FPI/FPIS': '0xF14766a7C44EFb7F71441B7114d5Dd295B637175', + 'Fraxswap V2 FPI/FXS': '0x3ECfdA4EfF6184cD8563772D6d024cB0Fb9cBf80', + 'Fraxswap V2 FRAX/FPI': '0xd79886841026a39cFF99321140B3c4D31314782B', + 'Fraxswap V2 FRAX/FPIS': '0x56695c26b3Cdb528815cd22fF7B47510ab821EFd', + 'Fraxswap V2 FRAX/FXS': '0x03B59Bd1c8B9F6C265bA0c3421923B93f15036Fa', + 'Fraxswap V2 FRAX/IQ': '0x07AF6BB51d6Ad0Cf126E3eD2DeE6EaC34BF094F8', + 'Fraxswap V2 FRAX/OHM': '0x5769071665eb8Db80e7e9226F92336Bb2897DCFA', + 'Fraxswap V2 FRAX/pitchFXS': '0x2bac101F9769AEfF63c63EFfB4189152e833649F', + 'Fraxswap V2 FRAX/SDL': '0xCCB26b5CC4e1Ce29521DA281a0107A6672bfe099', + 'Fraxswap V2 FRAX/SYN': '0x832c6f546Bf34A552DeB8773216a93bf6801028c', + 'Fraxswap V2 FRAX/WETH': '0x31351Bf3fba544863FBff44DDC27bA880916A199', + 'Fraxswap V2 FRAX/ZZ': '0x5E8c1aD4c3D04f059d5c1A2Ce4593e53be270bca', + 'Fraxswap V2 FXS/FPIS': '0x7a9Bd205B55cCB1Cc1c5B99FF5Db87a6e7B2C38b', + 'Gearbox dFRAX': '0x8A1112AFef7F4FC7c066a77AABBc01b3Fff31D47', + 'Gelato Uniswap FRAX/DAI': '0xb1Cfdc7370550f5e421E1bf0BF3CADFaDF3C4141', + 'Monolith mo-sAMM-FRAX/USDT': '0xC983fdb96ceB4A787E9F07e7e4135A75f75ccCb1', + 'Monolith mo-sAMM-frxETH/WETH': '0x73c229785ADe094d090A72146Bd4C24C4655EFbB', + 'Monolith mo-vAMM-FXS/frxETH': '0xcD0E1867C775d703458C5478830E9Ab8195DC5Cd', + 'Pickle Finance pveFXS (Brinery)': '0x62826760CC53AE076a7523Fd9dCF4f8Dbb1dA140', + 'Pickle Finance Curve cvxFXS/FXS': '0x5da34d322a4b29488e711419fea36da0d0114d5c', + 'Pickle Finance Saddle D4': '0xe6487033f5c8e2b4726af54ca1449fec18bd1484', + 'Pickle Finance UniV3 FRAX/DAI': '0xe7b69a17b3531d01fcead66faf7d9f7655469267', + 'Pickle Finance UniV3 FRAX/USDC': '0x7f3514cbc6825410ca3fa4dea41d46964a953afb', + 'Rari FRAX Lending': '', + 'Saddle alUSD/FEI/FRAX/LUSD': '0xd48cF4D7FB0824CC8bAe055dF3092584d0a1726A', + 'Saddle FRAX 3Pool [Ethereum]': '0x0785aDDf5F7334aDB7ec40cD785EBF39bfD91520', + 'Saddle FRAX/USDC BP [Ethereum]': '0x927E6f04609A45B107C789aF34BA90Ebbf479f7f', + 'Saddle FRAXBP/USDT [Ethereum]': '0x486DFCfdbF9025c062110E8c0344a15279aD0a85', + 'Saddle FRAXBP/alUSD [Ethereum]': '0x3cF7b9479a01eeB3bbfC43581fa3bb21cd888e2A', + 'Saddle FRAXBP/sUSD [Ethereum]': '0x6Ac7a4cB3BFa90DC651CD53EB098e23c88d04e77', + 'Saddle FRAXBP/vesperFRAXEarnPool [Ethereum]': '0xA3beCa25Bd2bDd67272556666A7791d772C36571', + 'Solidly sAMM-FRAX/USDC': '0x7d8311f7e0c1d19c1096e43e8b6c17b67fb6aa2e', + 'Solidly sAMM-FRAX/USDT': '0x97F088b0175A7319059d8e705286aA035077d624', + 'Solidly sAMM-frxETH/WETH': '0x4E30fc7ccD2dF3ddCA39a69d2085334Ee63b9c96', + 'Solidly vAMM-FRAX/frxETH': '0xcd0ce74619e46a2ea116d58e3022afb18356a924', + 'Solidly vAMM-FXS/frxETH': '0x1eD37b848BA777451dF41f5bd6c2EE9ffda0BaD4', + 'StakeDAO cvxFXS/FXS': '0xF3A43307DcAFa93275993862Aae628fCB50dC768', + 'StakeDAO FRAX3CRV': '0xd632f22692FaC7611d2AA1C0D552930D43CAEd3B', + 'StakeDAO FRAX/USDC': '0x3175df0976dfa876431c2e9ee6bc45b65d3473cc', + 'StakeDAO frxETHCRV': '0xf43211935C781D5ca1a41d2041F397B8A7366C7A', + 'StakeDAO sanFRAX': '0x853d955aCEf822Db058eb8505911ED77F175b99e', + 'StakeDAO sdETH-FraxPut': '0x839A989bE40f2D60f00beEB648903732c041CBd7', + 'StakeDAO sdFRAX3CRV-f': '0x5af15DA84A4a6EDf2d9FA6720De921E1026E37b7', + 'StakeDAO sdFXS': '0x402F878BDd1f5C66FdAF0fabaBcF74741B68ac36', + 'StakeDAO sdFXS/FXS': '0x8c524635d52bd7b1Bd55E062303177a7d916C046', + 'StakeDAO sfrxETH-stETH-rETH-BPT': '0x8e85e97ed19C0fa13B2549309965291fbbc0048b', + 'Stargate Bridge Liquidity FRAX [Ethereum]': '0xfA0F307783AC21C39E939ACFF795e27b650F6e68', + 'Sushi FRAX/SUSHI': '0xe06F8d30AC334c857Fc8c380C85969C150f38A6A', + 'Sushi FXS/WETH': '0xeC8C342bc3E07F05B9a782bc34e7f04fB9B44502', + 'Temple FRAX/TEMPLE': '0x6021444f1706f15465bEe85463BCc7d7cC17Fc03', + 'Tokemak FRAX Staking': '0x94671a3cee8c7a12ea72602978d1bb84e920efb2', + 'Tokemak FXS Staking': '0xadf15ec41689fc5b6dca0db7c53c9bfe7981e655', + 'Uniswap FEI/TRIBE': '0x9928e4046d7c6513326cCeA028cD3e7a91c7590A', + 'Uniswap FRAX/FXS': '0xE1573B9D29e2183B1AF0e743Dc2754979A40D237', + 'Uniswap FRAX/IQ': '0xd6c783b257e662ca949b441a4fcb08a53fc49914', + 'Uniswap FRAX/OHM': '0x2dce0dda1c2f98e0f171de8333c3c6fe1bbf4877', + 'Uniswap FRAX/TEMPLE': '0x6021444f1706f15465bEe85463BCc7d7cC17Fc03', // THEIR CUSTOM AMM, NOT EXACT + 'Uniswap FRAX/USDC': '0x97C4adc5d28A86f9470C70DD91Dc6CC2f20d2d4D', + 'Uniswap FRAX/WETH': '0xFD0A40Bc83C5faE4203DEc7e5929B446b07d1C76', + 'Uniswap FXS/WETH': '0xecBa967D84fCF0405F6b32Bc45F4d36BfDBB2E81', + 'Uniswap V3 FRAX/DAI': '0xC36442b4a4522E871399CD717aBDD847Ab11FE88', // Uniswap V3 Positions NFT + 'Uniswap V3 FRAX/USDC': '0xC36442b4a4522E871399CD717aBDD847Ab11FE88', // Uniswap V3 Positions NFT + 'Uniswap V3 FRAX/WETH': '0xC36442b4a4522E871399CD717aBDD847Ab11FE88', // Uniswap V3 Positions NFT + 'Uniswap V3 FRAX/agEUR': '0xC36442b4a4522E871399CD717aBDD847Ab11FE88', // Uniswap V3 Positions NFT + 'veFPIS FPIS Staking': '0x574C154C83432B0A45BA3ad2429C3fA242eD7359', + 'veFXS FXS Staking': '0xc8418aF6358FFddA74e09Ca9CC3Fe03Ca6aDC5b0', + 'Vesper Orbit FRAX': '0xc14900dFB1Aa54e7674e1eCf9ce02b3b35157ba5', + 'Yearn crvFRAX Vault (V3)': '0x1A5ebfF0E881Aec34837845e4D0EB430a1B4b737', }, staking_contracts: { - "Aave aFRAX": "0x02577b426F223A6B4f2351315A19ecD6F357d65c", - "Bunni FRAX/USDC Gauge": "0x50B4cDb17D3e10C9BC88b3744F3fD7c25695EEE7", - "Bunni frxETH/WETH Gauge": "0xcbcCBA2FA84606Df153B593dD01c37a50ac8427C", - "Convex stkcvxagEURFRAXBP": "0xd1f21322bBDd3586dC1151ADCcaA2684641c2b31", - "Convex stkcvxALCXFRAXBP": "0xA0657642224Fc53dAB4a3d2069430afe157BEc5D", - "Convex stkcvxBADGERFRAXBP": "0x5a92EF27f4baA7C766aee6d751f754EBdEBd9fae", - "Convex stkcvxBUSDFRAXBP": "0xaCf54f101B86f9e55d35C0674Ebd8C854E5f80e4", - "Convex stkcvxclevUSDFRAXBP": "0x5745506D56b0088f800085b1227B3f1F7d419c89", - 'Convex stkcvxCOILFRAXBP': "0x39cd4db6460d8B5961F73E997E86DdbB7Ca4D5F6", - "Convex stkcvxCVXFRAXBP": "0xeC670c5e0A8A8d5ae5639158565D840DE44CA03f", - "Convex stkcvxcvxCRVFRAXBP": "0x57c9F019B25AaAF822926f4Cacf0a860f61eDd8D", - "Convex stkcvxcvxFXSFRAXBP": "0x2F9504988675c91787E188Ed928D6E042d9052e9", - "Convex stkcvxDOLAFRAXBP": "0xE7211E87D60177575846936F2123b5FA6f0ce8Ab", - "Convex stkcvxeUSDFRAXBP": "0x4c9AD8c53d0a001E7fF08a3E5E26dE6795bEA5ac", - "Convex stkcvxFPIFRAX": "0x0a08673E3d7c454E1c6b27acD059C50Df6727FC9", - "Convex stkcvxFRAXBP": "0x963f487796d54d2f27bA6F3Fbe91154cA103b199", - "Convex stkcvxfrxETHETH": "0xa537d64881b84faffb9Ae43c951EEbF368b71cdA", - "Convex stkcvxGUSDFRAXBP": "0xF0Ffe16810B7f412c52C1610e3BC9819A7Dcb366", - "Convex stkcvxLUSDFRAXBP": "0xF0A9b6F6593b4Bf96E1Ab13921A8a3FbFd9d4F16", - "Convex stkcvxMAIFRAXBP": "0xdE5684F85a78F6CcCFFB4b9301ad0944eb5CE3eE", - "Convex stkcvxmsUSDFRAXBP": "0xfB2CCc82755A734C53C8B45f260fFc2df026fe87", - "Convex stkcvxOHMFRAXBP": "0xc96e1a26264D965078bd01eaceB129A65C09FFE7", - "Convex stkcvxpUSDFRAXBP": "0x40b42E4ab3c044e67CBFb0bD99C9E975dcB83668", - "Convex stkcvxRSRFRAXBP": "0xF22D3C85e41Ef4b5Ac8Cb8B89a14718e290a0561", - "Convex stkcvxSDTFRAXBP": "0x9C8d9667d5726aEcA4d24171958BeE9F46861bed", - "Convex stkcvxSTGFRAXBP": "0xd600A3E4F57E718A7ad6A0cbb10c2A92c57827e6", - "Convex stkcvxTUSDFRAXBP": "0xb324b2BD8a3Dc55b04111E84d5cce0c3771F8889", - "Convex stkcvxUSDDFRAXBP": "0xF7242A1cE383174802818febB36B6eebb56d5BFb", - "Convex stkcvxUZDFRAXBP": "0xb8ebc210BCF78be8Ef3F09Dd0d8e85Fa5e252e86", - "Convex stkcvxalUSDFRAXBP": "0x711d650Cd10dF656C2c28D375649689f137005fA", - "Convex stkcvxapeUSDFRAXBP": "0xa810D1268cEF398EC26095c27094596374262826", - "Convex stkcvxsUSDFRAXBP": "0x560c7668459221e33ED515D1D17c09ECda1996f5", - "Convex stkcvxXAIFRAXBP": "0x4edF7C64dAD8c256f6843AcFe56876024b54A1b6", - "Fraxlend V1 FRAX/FXS": "0x73e1e624C6d3E027b8674e6C72F104F1429FC17E", - "Fraxswap V1 FRAX/IQ V2": "0xBF33B67F243a4DAbED494Ff5840f113B2E202a0d", - "Fraxswap V1 FRAX/IQ V3": "0x35678017e1D252dA1CdD6745b147E3e75d1f9C27", - "Fraxswap V1 FRAX/IQ": "0x5e15E40A3AA06bECA711EdE9F3F76E1d80C34490", - "Fraxswap V1 FRAX/SYN": "0xE8453a2e8E97cba69365A1d727Fde3768b18d814", // Old2: "0xb8e49724a342c5F4C02918a1cDa6B3b25632d04b", // Old: "0xe679312C16200Bc42B7a05eddE8B0162b340a1f3", - "Fraxswap V1 FRAX/pitchFXS V2": "0x899Aa575E0e46344D18471f69337663C48b76e35", - "Fraxswap V1 FRAX/pitchFXS V3": "0x24C66Ba25ca2A53bB97B452B9F45DD075b07Cf55", - "Fraxswap V1 FRAX/pitchFXS": "0x9E66E7811fEacf5402B65021475d1A293f7ea797", - "Fraxswap V2 FRAX/FPIS": "0x9d46C0584C5C89e14fb1143e2414712feF36f00F", - "Fraxswap V2 FRAX/FXS": "0x3F2E53B1A3036Fd33F3c2f3cC49daB26A88DF2e0", - "Fraxswap V2 FRAX/IQ": "0x7af00CF8D3a8A75210a5Ed74f2254E2EC43B5B5b", - "Fraxswap V2 FRAX/OHM": "0xf562B2f33b3c90d5D273f88Cdf0CeD866E17092e", - "Fraxswap V2 FRAX/pitchFXS": "0xa632Fab76Fe013199c8271Ac22b466b9D11BFe88", - "Fraxswap V2 FRAX/SDL": "0x8875A328EaDb1e142f4021Fc2098096796a30cf8", - "Fraxswap V2 FRAX/SYN": "0x788E44b6424A0e4160Ae4766E86640EC5a6baD5b", - "Fraxswap V2 FRAX/ZZ": "0x38950D42CD549842B3Fc862a45F00eB24331F462", - "Gelato Uniswap FRAX/DAI": "0xcdfc491804A420b677f8e788B5157856910E2F6f", - "KyberSwap Elastic FRAX/USDC 0.04%": "0x59f91AA50DfB3e4aC6d3580e5A2fC22A7C24f505", - "Saddle alUSD/FEI/FRAX/LUSD": "0x0639076265e9f88542C91DCdEda65127974A5CA5", - "StakeDAO sdETH-FraxPut": "0x0A53544b2194Dd8Ebc62c779043fc0624705BB56", - "StakeDAO sdFRAX3CRV-f": "0xEB81b86248d3C2b618CcB071ADB122109DA96Da2", - "Sushi FRAX/SUSHI": "0xb4Ab0dE6581FBD3A02cF8f9f265138691c3A7d5D", - "Sushi FXS/WETH": "0x74C370990C1181303D20e9f0252437a97518B95B", // Pre-gauge: "0x74C370990C1181303D20e9f0252437a97518B95B", - "Temple FRAX/TEMPLE": "0x10460d02226d6ef7B2419aE150E6377BdbB7Ef16", // Old1: "0x016563F5EB22cF84fA0Ff8B593DdC5343ca15856", - "Uniswap FRAX/FXS": "0xda2c338350a0E59Ce71CDCED9679A3A590Dd9BEC", - "Uniswap FRAX/IQ": "0xF37057823910653a554d996B49E3399DC87fAE1b", // V1: "0x35fc5Fd90e06c47c0D9dEBfEDB1daF55bCE14E6d", - "Uniswap FRAX/OHM": "0xfC77A420f56Dec53e3b91D7FC936902e132335FF", - "Uniswap FRAX/USDC": "0xa29367a3f057F3191b62bd4055845a33411892b6", - "Uniswap FRAX/WETH": "0xD875628B942f8970De3CcEaf6417005F68540d4f", - "Uniswap FXS/WETH": "0xDc65f3514725206Dd83A8843AAE2aC3D99771C88", - "Uniswap V3 FRAX/DAI": "0xF22471AC2156B489CC4a59092c56713F813ff53e", // "0xD922cD347eb367FC4FB4bbcb68A84C6CDD3bA4ba", - "Uniswap V3 FRAX/USDC": "0x3EF26504dbc8Dd7B7aa3E97Bc9f3813a9FC0B4B0", // Old4: "0x1e1356Eb81a56daEcfAdA456E007b26C86c56670", // Old3: "0xCbe6ea4725e4ba34aa215B95239DfA6E8854B49a", // Old2: "0x1C21Dd0cE3bA89375Fc39F1B134AD15671022660", // Old1: "0xF397Abd7495EB6FE4697F45b5BA17166f03533b9" - "Uniswap V3 FRAX/agEUR": "0xf8caEd1943B15B877D7105B9906a618c154f69E8", - "Vesper Orbit FRAX": "0x698137C473bc1F0Ea9b85adE45Caf64ef2DF48d6", + 'Aave aFRAX': '0x02577b426F223A6B4f2351315A19ecD6F357d65c', + 'Angle FRAX/agEUR Staking': '0xb40432243E4F317cE287398e72Ab8f0312fc2FE8', + 'Balancer sfrxETH-stETH-rETH-BPT': '0x3F0FB52648Eb3981EA598716b7320081d1c8Ba1a', + 'Bunni FRAX/USDC Gauge': '0x50B4cDb17D3e10C9BC88b3744F3fD7c25695EEE7', + 'Bunni frxETH/WETH Gauge': '0xcbcCBA2FA84606Df153B593dD01c37a50ac8427C', + 'Convex stkcvxagEURFRAXBP': '0xd1f21322bBDd3586dC1151ADCcaA2684641c2b31', + 'Convex stkcvxALCXFRAXBP': '0xA0657642224Fc53dAB4a3d2069430afe157BEc5D', + 'Convex stkcvxBADGERFRAXBP': '0x5a92EF27f4baA7C766aee6d751f754EBdEBd9fae', + 'Convex stkcvxBUSDFRAXBP': '0xaCf54f101B86f9e55d35C0674Ebd8C854E5f80e4', + 'Convex stkcvxclevUSDFRAXBP': '0x5745506D56b0088f800085b1227B3f1F7d419c89', + 'Convex stkcvxCOILFRAXBP (Deprecated)': '0x94c491e298625b1226a89DDA091B3932c59FAbc1', + 'Convex stkcvxCOILFRAXBP': '0x39cd4db6460d8B5961F73E997E86DdbB7Ca4D5F6', + 'Convex stkcvxcrvUSDFRAX' : '0x67CC47cF82785728DD5E3AE9900873a074328658', + 'Convex stkcvxCVXFRAXBP': '0xeC670c5e0A8A8d5ae5639158565D840DE44CA03f', + 'Convex stkcvxcvxCRVFRAXBP': '0x57c9F019B25AaAF822926f4Cacf0a860f61eDd8D', + 'Convex stkcvxcvxFXSFRAXBP': '0x2F9504988675c91787E188Ed928D6E042d9052e9', + 'Convex stkcvxDOLAFRAXBP': '0xE7211E87D60177575846936F2123b5FA6f0ce8Ab', + 'Convex stkcvxeUSDFRAXBP': '0x4c9AD8c53d0a001E7fF08a3E5E26dE6795bEA5ac', + 'Convex stkcvxFPIFRAX': '0x0a08673E3d7c454E1c6b27acD059C50Df6727FC9', + 'Convex stkcvxFRAXBP': '0x963f487796d54d2f27bA6F3Fbe91154cA103b199', + 'Convex stkcvxFRAXUSDP' : '0x2A5b8C7DFE489CeB00ec80524C0bA0C1b78433A9', + 'Convex stkcvxfrxETHCRV_New': '0xDA0622cBa8cC821ee0d4AfA366Df95E948b43297', + 'Convex stkcvxfrxETHCVX_New': '0xb01BaB994b52A37a231551f00a1B7cAcd43bc8C9', + 'Convex stkcvxfrxETHalETH_New': '0x56790e4A08eD17aa3b7b4B1b23A6a84D731Fd77e', + 'Convex stkcvxfrxETHankrETH_New': '0x854B98dC1F76c92b22F75d1f33D23FEb64D8087F', + 'Convex stkcvxfrxETHcbETH_New': '0x16e55917849aC7fA4341470FA3A22bB503D5cACD', + 'Convex stkcvxfrxETHrETH_New': '0x719505cB97DF15565255eb1bDe65586271dB873C', + 'Convex stkcvxfrxETHrETH_StaFi': '', + 'Convex stkcvxfrxETHsETH_New': '0xd79Ae34eD6D11A235629A48aeA9F661a241faD4f', + 'Convex stkcvxfrxETHstETH_New': '0x68921998fbc43B360D3cF14a03aF4273CB0cFA44', + 'Convex stkcvxfrxETHETH': '0xa537d64881b84faffb9Ae43c951EEbF368b71cdA', + 'Convex stkcvxGRAIFRAXBP': '', + 'Convex stkcvxGUSDFRAXBP': '0xF0Ffe16810B7f412c52C1610e3BC9819A7Dcb366', + 'Convex stkcvxLUSDFRAXBP': '0xF0A9b6F6593b4Bf96E1Ab13921A8a3FbFd9d4F16', + 'Convex stkcvxMAIFRAXBP': '0xdE5684F85a78F6CcCFFB4b9301ad0944eb5CE3eE', + 'Convex stkcvxmsUSDFRAXBP': '0xfB2CCc82755A734C53C8B45f260fFc2df026fe87', + 'Convex stkcvxOHMFRAXBP': '0xc96e1a26264D965078bd01eaceB129A65C09FFE7', + 'Convex stkcvxpUSDFRAXBP': '0x40b42E4ab3c044e67CBFb0bD99C9E975dcB83668', + 'Convex stkcvxRSRFRAXBP': '0xF22D3C85e41Ef4b5Ac8Cb8B89a14718e290a0561', + 'Convex stkcvxSDTFRAXBP': '0x9C8d9667d5726aEcA4d24171958BeE9F46861bed', + 'Convex stkcvxSTGFRAXBP': '0xd600A3E4F57E718A7ad6A0cbb10c2A92c57827e6', + 'Convex stkcvxswETHfrxETH' : '0x7b8848f10A016341c9B2427e8541C19F31C2D243', + 'Convex stkcvxTUSDFRAXBP': '0xb324b2BD8a3Dc55b04111E84d5cce0c3771F8889', + 'Convex stkcvxUSDDFRAXBP': '0xF7242A1cE383174802818febB36B6eebb56d5BFb', + 'Convex stkcvxUZDFRAXBP (Deprecated)': '0x7838d18AD75372061a1e71e1499b7E90832c1508', + 'Convex stkcvxUZDFRAXBP': '0xb8ebc210BCF78be8Ef3F09Dd0d8e85Fa5e252e86', + 'Convex stkcvxalUSDFRAXBP': '0x711d650Cd10dF656C2c28D375649689f137005fA', + 'Convex stkcvxapeUSDFRAXBP': '0xa810D1268cEF398EC26095c27094596374262826', + 'Convex stkcvxsUSDFRAXBP': '0x560c7668459221e33ED515D1D17c09ECda1996f5', + 'Convex stkcvxXAIFRAXBP': '0x4edF7C64dAD8c256f6843AcFe56876024b54A1b6', + 'Convex stkcvxZUSDFRAXBP': '0x107a33019910E57533Ad4F75762d6A958630cA3d', + 'Curve FRAX3CRV-f-2': '0xBBbAf1adf4d39B2843928CCa1E65564e5ce99ccC', + 'dForce FRAX Lending [Ethereum]': '0x71173e3c6999c2C72ccf363f4Ae7b67BCc7E8F63', + 'Flux Finance fFRAX': '0x1c9a2d6b33b4826757273d47ebee0e2dddcd978b', + 'Fraxlend V1 FRAX/FXS': '0x73e1e624C6d3E027b8674e6C72F104F1429FC17E', + 'Fraxswap V1 FRAX/IQ V2': '0xBF33B67F243a4DAbED494Ff5840f113B2E202a0d', + 'Fraxswap V1 FRAX/IQ V3': '0x35678017e1D252dA1CdD6745b147E3e75d1f9C27', + 'Fraxswap V1 FRAX/IQ': '0x5e15E40A3AA06bECA711EdE9F3F76E1d80C34490', + 'Fraxswap V1 FRAX/SYN': '0xE8453a2e8E97cba69365A1d727Fde3768b18d814', // Old2: "0xb8e49724a342c5F4C02918a1cDa6B3b25632d04b", // Old: "0xe679312C16200Bc42B7a05eddE8B0162b340a1f3", + 'Fraxswap V1 FRAX/pitchFXS V2': '0x899Aa575E0e46344D18471f69337663C48b76e35', + 'Fraxswap V1 FRAX/pitchFXS V3': '0x24C66Ba25ca2A53bB97B452B9F45DD075b07Cf55', + 'Fraxswap V1 FRAX/pitchFXS': '0x9E66E7811fEacf5402B65021475d1A293f7ea797', + 'Fraxswap V2 FRAX/FPIS': '0x9d46C0584C5C89e14fb1143e2414712feF36f00F', + 'Fraxswap V2 FRAX/FXS': '0x3F2E53B1A3036Fd33F3c2f3cC49daB26A88DF2e0', + 'Fraxswap V2 FRAX/IQ': '0x7af00CF8D3a8A75210a5Ed74f2254E2EC43B5B5b', + 'Fraxswap V2 FRAX/OHM': '0xf562B2f33b3c90d5D273f88Cdf0CeD866E17092e', + 'Fraxswap V2 FRAX/pitchFXS': '0xa632Fab76Fe013199c8271Ac22b466b9D11BFe88', + 'Fraxswap V2 FRAX/SDL': '0x8875A328EaDb1e142f4021Fc2098096796a30cf8', + 'Fraxswap V2 FRAX/SYN': '0x788E44b6424A0e4160Ae4766E86640EC5a6baD5b', + 'Fraxswap V2 FRAX/ZZ': '0x38950D42CD549842B3Fc862a45F00eB24331F462', + 'Gearbox dFRAX': '0x8A1112AFef7F4FC7c066a77AABBc01b3Fff31D47', + 'Gelato Uniswap FRAX/DAI': '0xcdfc491804A420b677f8e788B5157856910E2F6f', + 'Monolith mo-sAMM-FRAX/USDT': '0x9972F7c292Deae7759a3831b1aDFF54dD43Dc264', + 'Monolith mo-sAMM-frxETH/WETH': '0x4E30fc7ccD2dF3ddCA39a69d2085334Ee63b9c96', + 'Monolith mo-vAMM-FXS/frxETH': '0x520b8e754768EEed9a37d78de76Cd5d75456b92F', + 'Pickle Finance pveFXS (Brinery)': '0x62826760CC53AE076a7523Fd9dCF4f8Dbb1dA140', + 'Pickle Finance Curve cvxFXS/FXS': '0x6667c53D631410649B1826D21cFdf41E7a7aE6b1', + 'Pickle Finance Saddle D4': '0x08cb0a0ba8e4f143e4e6f7bed65e02b6dfb9a16c', + 'Pickle Finance UniV3 FRAX/DAI': '0xa50e005c3f2f3cd1f56b09df558816cfce25e934', + 'Pickle Finance UniV3 FRAX/USDC': '0x6092cdE5762FA9F5c8D081fb0c5eD23601f0F400', + 'Rari FRAX Lending': '', + 'Saddle alUSD/FEI/FRAX/LUSD': '0x0639076265e9f88542C91DCdEda65127974A5CA5', + 'Saddle FRAX 3Pool [Ethereum]': '', + 'Saddle FRAX/USDC BP [Ethereum]': '', + 'Saddle FRAXBP/alUSD [Ethereum]': '', + 'Saddle FRAXBP/sUSD [Ethereum]': '', + 'Saddle FRAXBP/USDT [Ethereum]': '', + 'Saddle FRAXBP/vesperFRAXEarnPool [Ethereum]': '', + 'Solidly sAMM-FRAX/USDC': '0x810E190Be9592615D75c514C0f9D8c9b79eB8056', + 'Solidly sAMM-FRAX/USDT': '0x9972F7c292Deae7759a3831b1aDFF54dD43Dc264', + 'Solidly sAMM-frxETH/WETH': '0x4E30fc7ccD2dF3ddCA39a69d2085334Ee63b9c96', + 'Solidly vAMM-FRAX/frxETH': '0xFae2B6Cac80635Cf768c9B68A4f453DB00BC79F0', + 'Solidly vAMM-FXS/frxETH': '0x520b8e754768EEed9a37d78de76Cd5d75456b92F', + 'StakeDAO cvxFXS/FXS': '0xAB1927160EC7414C6Fa71763E2a9f3D107c126dd', + 'StakeDAO FRAX3CRV': '0x72E158d38dbd50A483501c24f792bDAAA3e7D55C', + 'StakeDAO FRAX/USDC': '0xcfc25170633581bf896cb6cdee170e3e3aa59503', + 'StakeDAO frxETHCRV': '0x2932a86df44Fe8D2A706d8e9c5d51c24883423F5', + 'StakeDAO sanFRAX': '0xb40432243E4F317cE287398e72Ab8f0312fc2FE8', + 'StakeDAO sdETH-FraxPut': '0x0A53544b2194Dd8Ebc62c779043fc0624705BB56', + 'StakeDAO sdFRAX3CRV-f': '0xEB81b86248d3C2b618CcB071ADB122109DA96Da2', + 'StakeDAO sdFXS': '0xF3C6e8fbB946260e8c2a55d48a5e01C82fD63106', + 'StakeDAO sdFXS/FXS': '0xa9A9BC60fc80478059A83f516D5215185eeC2fc0', + 'StakeDAO sfrxETH-stETH-rETH-BPT': '0x3f0fb52648eb3981ea598716b7320081d1c8ba1a', + 'Stargate Bridge Liquidity FRAX [Ethereum]': '0xB0D502E938ed5f4df2E681fE6E419ff29631d62b', + 'Sushi FRAX/SUSHI': '0xb4Ab0dE6581FBD3A02cF8f9f265138691c3A7d5D', + 'Sushi FXS/WETH': '', // Pre-gauge: "0x74C370990C1181303D20e9f0252437a97518B95B", + 'Temple FRAX/TEMPLE': '0x10460d02226d6ef7B2419aE150E6377BdbB7Ef16', // Old1: "0x016563F5EB22cF84fA0Ff8B593DdC5343ca15856", + 'Tokemak FRAX Staking': '0x94671a3cee8c7a12ea72602978d1bb84e920efb2', + 'Tokemak FXS Staking': '0xadf15ec41689fc5b6dca0db7c53c9bfe7981e655', + 'Uniswap FEI/TRIBE': '0x9928e4046d7c6513326cCeA028cD3e7a91c7590A', + 'Uniswap FRAX/FXS': '0xda2c338350a0E59Ce71CDCED9679A3A590Dd9BEC', + 'Uniswap FRAX/IQ': '0xF37057823910653a554d996B49E3399DC87fAE1b', // V1: "0x35fc5Fd90e06c47c0D9dEBfEDB1daF55bCE14E6d", + 'Uniswap FRAX/OHM': '0xfC77A420f56Dec53e3b91D7FC936902e132335FF', + 'Uniswap FRAX/USDC': '0xa29367a3f057F3191b62bd4055845a33411892b6', + 'Uniswap FRAX/WETH': '0xD875628B942f8970De3CcEaf6417005F68540d4f', + 'Uniswap FXS/WETH': '0xDc65f3514725206Dd83A8843AAE2aC3D99771C88', + 'Uniswap V3 FRAX/DAI': '0xF22471AC2156B489CC4a59092c56713F813ff53e', // "0xD922cD347eb367FC4FB4bbcb68A84C6CDD3bA4ba", + 'Uniswap V3 FRAX/USDC': '0x3EF26504dbc8Dd7B7aa3E97Bc9f3813a9FC0B4B0', // Old4: "0x1e1356Eb81a56daEcfAdA456E007b26C86c56670", // Old3: "0xCbe6ea4725e4ba34aa215B95239DfA6E8854B49a", // Old2: "0x1C21Dd0cE3bA89375Fc39F1B134AD15671022660", // Old1: "0xF397Abd7495EB6FE4697F45b5BA17166f03533b9" + 'Uniswap V3 FRAX/agEUR': '0xf8caEd1943B15B877D7105B9906a618c154f69E8', + 'veFPIS FPIS Staking': '0x574C154C83432B0A45BA3ad2429C3fA242eD7359', + 'veFXS FXS Staking': '0xc8418aF6358FFddA74e09Ca9CC3Fe03Ca6aDC5b0', + 'Vesper Orbit FRAX': '0x698137C473bc1F0Ea9b85adE45Caf64ef2DF48d6', + 'Yearn crvFRAX Vault (V3)': '0x1A5ebfF0E881Aec34837845e4D0EB430a1B4b737', }, external_farm_tokens: { "0xDAO FRAX/FXS": "", From d3516d0467b87d92a43fa5198201c996398932a7 Mon Sep 17 00:00:00 2001 From: travis Date: Wed, 6 Sep 2023 18:54:33 -1000 Subject: [PATCH 28/37] periodic update --- .../Misc_AMOs/kyberswap_v2/IFactory.sol | 165 ++++++++ .../Misc_AMOs/kyberswap_v2/IPool.sol | 8 + .../kyberswap_v2/ITickFeesReader.sol | 10 + .../Misc_AMOs/kyberswap_v2/IWETHV2.sol | 13 + .../Misc_AMOs/kyberswap_v2/TickMath.sol | 219 ++++++++++ .../kyberswap_v2/callback/IFlashCallback.sol | 18 + .../kyberswap_v2/callback/IMintCallback.sol | 18 + .../kyberswap_v2/callback/ISwapCallback.sol | 21 + .../libraries/BaseSplitCodeFactory.sol | 222 ++++++++++ .../kyberswap_v2/libraries/CodeDeployer.sol | 81 ++++ .../kyberswap_v2/libraries/FullMath.sol | 127 ++++++ .../kyberswap_v2/libraries/Linkedlist.sol | 55 +++ .../kyberswap_v2/libraries/LiqDeltaMath.sol | 13 + .../kyberswap_v2/libraries/LiquidityMath.sol | 70 ++++ .../kyberswap_v2/libraries/MathConstants.sol | 15 + .../kyberswap_v2/libraries/Oracle.sol | 309 ++++++++++++++ .../kyberswap_v2/libraries/QtyDeltaMath.sol | 112 +++++ .../kyberswap_v2/libraries/QuadMath.sol | 31 ++ .../libraries/ReinvestmentMath.sol | 26 ++ .../kyberswap_v2/libraries/SafeCast.sol | 69 +++ .../kyberswap_v2/libraries/SwapMath.sol | 321 ++++++++++++++ .../kyberswap_v2/libraries/TickMath.sol | 219 ++++++++++ .../kyberswap_v2/oracle/IPoolOracle.sol | 107 +++++ .../periphery/IBasePositionManager.sol | 189 +++++++++ .../kyberswap_v2/periphery/IERC721Permit.sol | 43 ++ .../kyberswap_v2/periphery/IMulticall.sol | 13 + .../INonfungibleTokenPositionDescriptor.sol | 17 + .../kyberswap_v2/periphery/IQuoterV2.sol | 88 ++++ .../kyberswap_v2/periphery/IRouter.sol | 113 +++++ .../periphery/IRouterTokenHelper.sol | 26 ++ .../periphery/IRouterTokenHelperWithFee.sol | 27 ++ .../IBasePositionManagerEvents.sol | 60 +++ .../kyberswap_v2/pool/IPoolActions.sol | 116 +++++ .../kyberswap_v2/pool/IPoolEvents.sol | 87 ++++ .../kyberswap_v2/pool/IPoolStorage.sol | 120 ++++++ .../Oracle/ComboOracle_KyberSwapElasticV2.sol | 324 ++++++++++++++ .../Staking/FraxCrossChainFarmV3_ERC20.sol | 51 ++- .../FraxFarmRageQuitter_Saddle_L2D4.sol | 108 +++++ .../Staking/FraxUnifiedFarm_ERC20.sol | 4 +- .../IFraxCrossChainFarmV3_ERC20_Mod7.sol | 96 +++++ .../Staking/IFraxUnifiedFarm_ERC20_V105.sol | 79 ++++ ...UnifiedFarm_ERC20_Convex_FRAXBP_Stable.sol | 4 +- .../FraxUnifiedFarm_ERC20_Convex_frxETH.sol | 4 +- ...axUnifiedFarm_ERC20_KyberSwapElasticV2.sol | 64 +++ .../Step_1_Vault_Gauge_Proxy.js | 26 +- .../Step_1_Vault_Gauge_Proxy.json | 2 +- .../Step_2_CRVCVXDistro_Contracts.js | 26 +- .../Step_2_CRVCVXDistro_Contracts.json | 2 +- .../Step_3_RewDist_Seeding_Sync.js | 26 +- .../Step_3_RewDist_Seeding_Sync.json | 2 +- .../Frax_Comptroller_Routine/Sunday_Part_1.js | 395 +++++++++--------- .../Sunday_Part_1.json | 2 +- .../test/Fraxoracle/StateRootOracle.js | 123 ++++++ src/types/constants.ts | 242 +++++++---- 54 files changed, 4362 insertions(+), 366 deletions(-) create mode 100644 src/hardhat/contracts/Misc_AMOs/kyberswap_v2/IFactory.sol create mode 100644 src/hardhat/contracts/Misc_AMOs/kyberswap_v2/IPool.sol create mode 100644 src/hardhat/contracts/Misc_AMOs/kyberswap_v2/ITickFeesReader.sol create mode 100644 src/hardhat/contracts/Misc_AMOs/kyberswap_v2/IWETHV2.sol create mode 100644 src/hardhat/contracts/Misc_AMOs/kyberswap_v2/TickMath.sol create mode 100644 src/hardhat/contracts/Misc_AMOs/kyberswap_v2/callback/IFlashCallback.sol create mode 100644 src/hardhat/contracts/Misc_AMOs/kyberswap_v2/callback/IMintCallback.sol create mode 100644 src/hardhat/contracts/Misc_AMOs/kyberswap_v2/callback/ISwapCallback.sol create mode 100644 src/hardhat/contracts/Misc_AMOs/kyberswap_v2/libraries/BaseSplitCodeFactory.sol create mode 100644 src/hardhat/contracts/Misc_AMOs/kyberswap_v2/libraries/CodeDeployer.sol create mode 100644 src/hardhat/contracts/Misc_AMOs/kyberswap_v2/libraries/FullMath.sol create mode 100644 src/hardhat/contracts/Misc_AMOs/kyberswap_v2/libraries/Linkedlist.sol create mode 100644 src/hardhat/contracts/Misc_AMOs/kyberswap_v2/libraries/LiqDeltaMath.sol create mode 100644 src/hardhat/contracts/Misc_AMOs/kyberswap_v2/libraries/LiquidityMath.sol create mode 100644 src/hardhat/contracts/Misc_AMOs/kyberswap_v2/libraries/MathConstants.sol create mode 100644 src/hardhat/contracts/Misc_AMOs/kyberswap_v2/libraries/Oracle.sol create mode 100644 src/hardhat/contracts/Misc_AMOs/kyberswap_v2/libraries/QtyDeltaMath.sol create mode 100644 src/hardhat/contracts/Misc_AMOs/kyberswap_v2/libraries/QuadMath.sol create mode 100644 src/hardhat/contracts/Misc_AMOs/kyberswap_v2/libraries/ReinvestmentMath.sol create mode 100644 src/hardhat/contracts/Misc_AMOs/kyberswap_v2/libraries/SafeCast.sol create mode 100644 src/hardhat/contracts/Misc_AMOs/kyberswap_v2/libraries/SwapMath.sol create mode 100644 src/hardhat/contracts/Misc_AMOs/kyberswap_v2/libraries/TickMath.sol create mode 100644 src/hardhat/contracts/Misc_AMOs/kyberswap_v2/oracle/IPoolOracle.sol create mode 100644 src/hardhat/contracts/Misc_AMOs/kyberswap_v2/periphery/IBasePositionManager.sol create mode 100644 src/hardhat/contracts/Misc_AMOs/kyberswap_v2/periphery/IERC721Permit.sol create mode 100644 src/hardhat/contracts/Misc_AMOs/kyberswap_v2/periphery/IMulticall.sol create mode 100644 src/hardhat/contracts/Misc_AMOs/kyberswap_v2/periphery/INonfungibleTokenPositionDescriptor.sol create mode 100644 src/hardhat/contracts/Misc_AMOs/kyberswap_v2/periphery/IQuoterV2.sol create mode 100644 src/hardhat/contracts/Misc_AMOs/kyberswap_v2/periphery/IRouter.sol create mode 100644 src/hardhat/contracts/Misc_AMOs/kyberswap_v2/periphery/IRouterTokenHelper.sol create mode 100644 src/hardhat/contracts/Misc_AMOs/kyberswap_v2/periphery/IRouterTokenHelperWithFee.sol create mode 100644 src/hardhat/contracts/Misc_AMOs/kyberswap_v2/periphery/base_position_manager/IBasePositionManagerEvents.sol create mode 100644 src/hardhat/contracts/Misc_AMOs/kyberswap_v2/pool/IPoolActions.sol create mode 100644 src/hardhat/contracts/Misc_AMOs/kyberswap_v2/pool/IPoolEvents.sol create mode 100644 src/hardhat/contracts/Misc_AMOs/kyberswap_v2/pool/IPoolStorage.sol create mode 100755 src/hardhat/contracts/Oracle/ComboOracle_KyberSwapElasticV2.sol create mode 100644 src/hardhat/contracts/Staking/FraxFarmRageQuitter_Saddle_L2D4.sol create mode 100644 src/hardhat/contracts/Staking/IFraxCrossChainFarmV3_ERC20_Mod7.sol create mode 100644 src/hardhat/contracts/Staking/IFraxUnifiedFarm_ERC20_V105.sol create mode 100755 src/hardhat/contracts/Staking/Variants/FraxUnifiedFarm_ERC20_KyberSwapElasticV2.sol create mode 100644 src/hardhat/test/Fraxoracle/StateRootOracle.js diff --git a/src/hardhat/contracts/Misc_AMOs/kyberswap_v2/IFactory.sol b/src/hardhat/contracts/Misc_AMOs/kyberswap_v2/IFactory.sol new file mode 100644 index 00000000..13f59b8d --- /dev/null +++ b/src/hardhat/contracts/Misc_AMOs/kyberswap_v2/IFactory.sol @@ -0,0 +1,165 @@ +// SPDX-License-Identifier: MIT +pragma solidity >=0.8.0; + +/// @title KyberSwap v2 factory +/// @notice Deploys KyberSwap v2 pools and manages control over government fees +interface IFactory { + /// @notice Emitted when a pool is created + /// @param token0 First pool token by address sort order + /// @param token1 Second pool token by address sort order + /// @param swapFeeUnits Fee to be collected upon every swap in the pool, in fee units + /// @param tickDistance Minimum number of ticks between initialized ticks + /// @param pool The address of the created pool + event PoolCreated( + address indexed token0, + address indexed token1, + uint24 indexed swapFeeUnits, + int24 tickDistance, + address pool + ); + + /// @notice Emitted when a new fee is enabled for pool creation via the factory + /// @param swapFeeUnits Fee to be collected upon every swap in the pool, in fee units + /// @param tickDistance Minimum number of ticks between initialized ticks for pools created with the given fee + event SwapFeeEnabled(uint24 indexed swapFeeUnits, int24 indexed tickDistance); + + /// @notice Emitted when vesting period changes + /// @param vestingPeriod The maximum time duration for which LP fees + /// are proportionally burnt upon LP removals + event VestingPeriodUpdated(uint32 vestingPeriod); + + /// @notice Emitted when configMaster changes + /// @param oldConfigMaster configMaster before the update + /// @param newConfigMaster configMaster after the update + event ConfigMasterUpdated(address oldConfigMaster, address newConfigMaster); + + /// @notice Emitted when fee configuration changes + /// @param feeTo Recipient of government fees + /// @param governmentFeeUnits Fee amount, in fee units, + /// to be collected out of the fee charged for a pool swap + event FeeConfigurationUpdated(address feeTo, uint24 governmentFeeUnits); + + /// @notice Emitted when whitelist feature is enabled + event WhitelistEnabled(); + + /// @notice Emitted when whitelist feature is disabled + event WhitelistDisabled(); + + /// @notice Returns the maximum time duration for which LP fees + /// are proportionally burnt upon LP removals + function vestingPeriod() external view returns (uint32); + + /// @notice Returns the tick distance for a specified fee. + /// @dev Once added, cannot be updated or removed. + /// @param swapFeeUnits Swap fee, in fee units. + /// @return The tick distance. Returns 0 if fee has not been added. + function feeAmountTickDistance(uint24 swapFeeUnits) external view returns (int24); + + /// @notice Returns the address which can update the fee configuration + function configMaster() external view returns (address); + + /// @notice Returns the keccak256 hash of the Pool creation code + /// This is used for pre-computation of pool addresses + function poolInitHash() external view returns (bytes32); + + /// @notice Returns the pool oracle contract for twap + function poolOracle() external view returns (address); + + /// @notice Fetches the recipient of government fees + /// and current government fee charged in fee units + function feeConfiguration() external view returns (address _feeTo, uint24 _governmentFeeUnits); + + /// @notice Returns the status of whitelisting feature of NFT managers + /// If true, anyone can mint liquidity tokens + /// Otherwise, only whitelisted NFT manager(s) are allowed to mint liquidity tokens + function whitelistDisabled() external view returns (bool); + + //// @notice Returns all whitelisted NFT managers + /// If the whitelisting feature is turned on, + /// only whitelisted NFT manager(s) are allowed to mint liquidity tokens + function getWhitelistedNFTManagers() external view returns (address[] memory); + + /// @notice Checks if sender is a whitelisted NFT manager + /// If the whitelisting feature is turned on, + /// only whitelisted NFT manager(s) are allowed to mint liquidity tokens + /// @param sender address to be checked + /// @return true if sender is a whistelisted NFT manager, false otherwise + function isWhitelistedNFTManager(address sender) external view returns (bool); + + /// @notice Returns the pool address for a given pair of tokens and a swap fee + /// @dev Token order does not matter + /// @param tokenA Contract address of either token0 or token1 + /// @param tokenB Contract address of the other token + /// @param swapFeeUnits Fee to be collected upon every swap in the pool, in fee units + /// @return pool The pool address. Returns null address if it does not exist + function getPool( + address tokenA, + address tokenB, + uint24 swapFeeUnits + ) external view returns (address pool); + + /// @notice Fetch parameters to be used for pool creation + /// @dev Called by the pool constructor to fetch the parameters of the pool + /// @return factory The factory address + /// @return poolOracle The pool oracle for twap + /// @return token0 First pool token by address sort order + /// @return token1 Second pool token by address sort order + /// @return swapFeeUnits Fee to be collected upon every swap in the pool, in fee units + /// @return tickDistance Minimum number of ticks between initialized ticks + function parameters() + external + view + returns ( + address factory, + address poolOracle, + address token0, + address token1, + uint24 swapFeeUnits, + int24 tickDistance + ); + + /// @notice Creates a pool for the given two tokens and fee + /// @param tokenA One of the two tokens in the desired pool + /// @param tokenB The other of the two tokens in the desired pool + /// @param swapFeeUnits Desired swap fee for the pool, in fee units + /// @dev Token order does not matter. tickDistance is determined from the fee. + /// Call will revert under any of these conditions: + /// 1) pool already exists + /// 2) invalid swap fee + /// 3) invalid token arguments + /// @return pool The address of the newly created pool + function createPool( + address tokenA, + address tokenB, + uint24 swapFeeUnits + ) external returns (address pool); + + /// @notice Enables a fee amount with the given tickDistance + /// @dev Fee amounts may never be removed once enabled + /// @param swapFeeUnits The fee amount to enable, in fee units + /// @param tickDistance The distance between ticks to be enforced for all pools created with the given fee amount + function enableSwapFee(uint24 swapFeeUnits, int24 tickDistance) external; + + /// @notice Updates the address which can update the fee configuration + /// @dev Must be called by the current configMaster + function updateConfigMaster(address) external; + + /// @notice Updates the vesting period + /// @dev Must be called by the current configMaster + function updateVestingPeriod(uint32) external; + + /// @notice Updates the address receiving government fees and fee quantity + /// @dev Only configMaster is able to perform the update + /// @param feeTo Address to receive government fees collected from pools + /// @param governmentFeeUnits Fee amount, in fee units, + /// to be collected out of the fee charged for a pool swap + function updateFeeConfiguration(address feeTo, uint24 governmentFeeUnits) external; + + /// @notice Enables the whitelisting feature + /// @dev Only configMaster is able to perform the update + function enableWhitelist() external; + + /// @notice Disables the whitelisting feature + /// @dev Only configMaster is able to perform the update + function disableWhitelist() external; +} diff --git a/src/hardhat/contracts/Misc_AMOs/kyberswap_v2/IPool.sol b/src/hardhat/contracts/Misc_AMOs/kyberswap_v2/IPool.sol new file mode 100644 index 00000000..b1b1289c --- /dev/null +++ b/src/hardhat/contracts/Misc_AMOs/kyberswap_v2/IPool.sol @@ -0,0 +1,8 @@ +// SPDX-License-Identifier: MIT +pragma solidity >=0.8.0; + +import {IPoolActions} from './pool/IPoolActions.sol'; +import {IPoolEvents} from './pool/IPoolEvents.sol'; +import {IPoolStorage} from './pool/IPoolStorage.sol'; + +interface IPool is IPoolActions, IPoolEvents, IPoolStorage {} diff --git a/src/hardhat/contracts/Misc_AMOs/kyberswap_v2/ITickFeesReader.sol b/src/hardhat/contracts/Misc_AMOs/kyberswap_v2/ITickFeesReader.sol new file mode 100644 index 00000000..4e42100c --- /dev/null +++ b/src/hardhat/contracts/Misc_AMOs/kyberswap_v2/ITickFeesReader.sol @@ -0,0 +1,10 @@ +// SPDX-License-Identifier: GPL-2.0-or-later +pragma solidity >=0.8.0; + +interface ITickFeesReader { + function getAllTicks ( address pool ) external view returns ( int24[] memory allTicks ); + function getNearestInitializedTicks ( address pool, int24 tick ) external view returns ( int24 previous, int24 next ); + function getTicksInRange ( address pool, int24 startTick, uint32 length ) external view returns ( int24[] memory allTicks ); + function getTotalFeesOwedToPosition ( address posManager, address pool, uint256 tokenId ) external view returns ( uint256 token0Owed, uint256 token1Owed ); + function getTotalRTokensOwedToPosition ( address posManager, address pool, uint256 tokenId ) external view returns ( uint256 rTokenOwed ); +} diff --git a/src/hardhat/contracts/Misc_AMOs/kyberswap_v2/IWETHV2.sol b/src/hardhat/contracts/Misc_AMOs/kyberswap_v2/IWETHV2.sol new file mode 100644 index 00000000..b093ff32 --- /dev/null +++ b/src/hardhat/contracts/Misc_AMOs/kyberswap_v2/IWETHV2.sol @@ -0,0 +1,13 @@ +// SPDX-License-Identifier: GPL-2.0-or-later +pragma solidity >=0.8.0; + +import {IERC20 as IERC20Duplicate} from '@openzeppelin/contracts/token/ERC20/IERC20.sol'; + +/// @title Interface for WETH +interface IWETH is IERC20Duplicate { + /// @notice Deposit ether to get wrapped ether + function deposit() external payable; + + /// @notice Withdraw wrapped ether to get ether + function withdraw(uint256) external; +} diff --git a/src/hardhat/contracts/Misc_AMOs/kyberswap_v2/TickMath.sol b/src/hardhat/contracts/Misc_AMOs/kyberswap_v2/TickMath.sol new file mode 100644 index 00000000..2c0eb518 --- /dev/null +++ b/src/hardhat/contracts/Misc_AMOs/kyberswap_v2/TickMath.sol @@ -0,0 +1,219 @@ +// SPDX-License-Identifier: GPL-2.0-or-later +pragma solidity >=0.8.0; + +/// @title Math library for computing sqrt prices from ticks and vice versa +/// @notice Computes sqrt price for ticks of size 1.0001, i.e. sqrt(1.0001^tick) as fixed point Q64.96 numbers. Supports +/// prices between 2**-128 and 2**128 +library TickMath { + /// @dev The minimum tick that may be passed to #getSqrtRatioAtTick computed from log base 1.0001 of 2**-128 + int24 internal constant MIN_TICK = -887272; + /// @dev The maximum tick that may be passed to #getSqrtRatioAtTick computed from log base 1.0001 of 2**128 + int24 internal constant MAX_TICK = -MIN_TICK; + + /// @dev The minimum value that can be returned from #getSqrtRatioAtTick. Equivalent to getSqrtRatioAtTick(MIN_TICK) + uint160 internal constant MIN_SQRT_RATIO = 4295128739; + /// @dev The maximum value that can be returned from #getSqrtRatioAtTick. Equivalent to getSqrtRatioAtTick(MAX_TICK) + uint160 internal constant MAX_SQRT_RATIO = 1461446703485210103287273052203988822378723970342; + + /// @notice Calculates sqrt(1.0001^tick) * 2^96 + /// @dev Throws if |tick| > max tick + /// @param tick The input tick for the above formula + /// @return sqrtP A Fixed point Q64.96 number representing the sqrt of the ratio of the two assets (token1/token0) + /// at the given tick + function getSqrtRatioAtTick(int24 tick) internal pure returns (uint160 sqrtP) { + unchecked { + uint256 absTick = uint256(tick < 0 ? -int256(tick) : int256(tick)); + require(absTick <= uint256(int256(MAX_TICK)), 'T'); + + // do bitwise comparison, if i-th bit is turned on, + // multiply ratio by hardcoded values of sqrt(1.0001^-(2^i)) * 2^128 + // where 0 <= i <= 19 + uint256 ratio = (absTick & 0x1 != 0) + ? 0xfffcb933bd6fad37aa2d162d1a594001 + : 0x100000000000000000000000000000000; + if (absTick & 0x2 != 0) ratio = (ratio * 0xfff97272373d413259a46990580e213a) >> 128; + if (absTick & 0x4 != 0) ratio = (ratio * 0xfff2e50f5f656932ef12357cf3c7fdcc) >> 128; + if (absTick & 0x8 != 0) ratio = (ratio * 0xffe5caca7e10e4e61c3624eaa0941cd0) >> 128; + if (absTick & 0x10 != 0) ratio = (ratio * 0xffcb9843d60f6159c9db58835c926644) >> 128; + if (absTick & 0x20 != 0) ratio = (ratio * 0xff973b41fa98c081472e6896dfb254c0) >> 128; + if (absTick & 0x40 != 0) ratio = (ratio * 0xff2ea16466c96a3843ec78b326b52861) >> 128; + if (absTick & 0x80 != 0) ratio = (ratio * 0xfe5dee046a99a2a811c461f1969c3053) >> 128; + if (absTick & 0x100 != 0) ratio = (ratio * 0xfcbe86c7900a88aedcffc83b479aa3a4) >> 128; + if (absTick & 0x200 != 0) ratio = (ratio * 0xf987a7253ac413176f2b074cf7815e54) >> 128; + if (absTick & 0x400 != 0) ratio = (ratio * 0xf3392b0822b70005940c7a398e4b70f3) >> 128; + if (absTick & 0x800 != 0) ratio = (ratio * 0xe7159475a2c29b7443b29c7fa6e889d9) >> 128; + if (absTick & 0x1000 != 0) ratio = (ratio * 0xd097f3bdfd2022b8845ad8f792aa5825) >> 128; + if (absTick & 0x2000 != 0) ratio = (ratio * 0xa9f746462d870fdf8a65dc1f90e061e5) >> 128; + if (absTick & 0x4000 != 0) ratio = (ratio * 0x70d869a156d2a1b890bb3df62baf32f7) >> 128; + if (absTick & 0x8000 != 0) ratio = (ratio * 0x31be135f97d08fd981231505542fcfa6) >> 128; + if (absTick & 0x10000 != 0) ratio = (ratio * 0x9aa508b5b7a84e1c677de54f3e99bc9) >> 128; + if (absTick & 0x20000 != 0) ratio = (ratio * 0x5d6af8dedb81196699c329225ee604) >> 128; + if (absTick & 0x40000 != 0) ratio = (ratio * 0x2216e584f5fa1ea926041bedfe98) >> 128; + if (absTick & 0x80000 != 0) ratio = (ratio * 0x48a170391f7dc42444e8fa2) >> 128; + + // take reciprocal for positive tick values + if (tick > 0) ratio = type(uint256).max / ratio; + + // this divides by 1<<32 rounding up to go from a Q128.128 to a Q128.96. + // we then downcast because we know the result always fits within 160 bits due to our tick input constraint + // we round up in the division so getTickAtSqrtRatio of the output price is always consistent + sqrtP = uint160((ratio >> 32) + (ratio % (1 << 32) == 0 ? 0 : 1)); + } + } + + /// @notice Calculates the greatest tick value such that getRatioAtTick(tick) <= ratio + /// @dev Throws in case sqrtP < MIN_SQRT_RATIO, as MIN_SQRT_RATIO is the lowest value getRatioAtTick may + /// ever return. + /// @param sqrtP The sqrt ratio for which to compute the tick as a Q64.96 + /// @return tick The greatest tick for which the ratio is less than or equal to the input ratio + function getTickAtSqrtRatio(uint160 sqrtP) internal pure returns (int24 tick) { + // second inequality must be < because the price can never reach the price at the max tick + require(sqrtP >= MIN_SQRT_RATIO && sqrtP < MAX_SQRT_RATIO, 'R'); + uint256 ratio = uint256(sqrtP) << 32; + + uint256 r = ratio; + uint256 msb = 0; + + unchecked { + assembly { + let f := shl(7, gt(r, 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF)) + msb := or(msb, f) + r := shr(f, r) + } + assembly { + let f := shl(6, gt(r, 0xFFFFFFFFFFFFFFFF)) + msb := or(msb, f) + r := shr(f, r) + } + assembly { + let f := shl(5, gt(r, 0xFFFFFFFF)) + msb := or(msb, f) + r := shr(f, r) + } + assembly { + let f := shl(4, gt(r, 0xFFFF)) + msb := or(msb, f) + r := shr(f, r) + } + assembly { + let f := shl(3, gt(r, 0xFF)) + msb := or(msb, f) + r := shr(f, r) + } + assembly { + let f := shl(2, gt(r, 0xF)) + msb := or(msb, f) + r := shr(f, r) + } + assembly { + let f := shl(1, gt(r, 0x3)) + msb := or(msb, f) + r := shr(f, r) + } + assembly { + let f := gt(r, 0x1) + msb := or(msb, f) + } + + if (msb >= 128) r = ratio >> (msb - 127); + else r = ratio << (127 - msb); + + int256 log_2 = (int256(msb) - 128) << 64; + + assembly { + r := shr(127, mul(r, r)) + let f := shr(128, r) + log_2 := or(log_2, shl(63, f)) + r := shr(f, r) + } + assembly { + r := shr(127, mul(r, r)) + let f := shr(128, r) + log_2 := or(log_2, shl(62, f)) + r := shr(f, r) + } + assembly { + r := shr(127, mul(r, r)) + let f := shr(128, r) + log_2 := or(log_2, shl(61, f)) + r := shr(f, r) + } + assembly { + r := shr(127, mul(r, r)) + let f := shr(128, r) + log_2 := or(log_2, shl(60, f)) + r := shr(f, r) + } + assembly { + r := shr(127, mul(r, r)) + let f := shr(128, r) + log_2 := or(log_2, shl(59, f)) + r := shr(f, r) + } + assembly { + r := shr(127, mul(r, r)) + let f := shr(128, r) + log_2 := or(log_2, shl(58, f)) + r := shr(f, r) + } + assembly { + r := shr(127, mul(r, r)) + let f := shr(128, r) + log_2 := or(log_2, shl(57, f)) + r := shr(f, r) + } + assembly { + r := shr(127, mul(r, r)) + let f := shr(128, r) + log_2 := or(log_2, shl(56, f)) + r := shr(f, r) + } + assembly { + r := shr(127, mul(r, r)) + let f := shr(128, r) + log_2 := or(log_2, shl(55, f)) + r := shr(f, r) + } + assembly { + r := shr(127, mul(r, r)) + let f := shr(128, r) + log_2 := or(log_2, shl(54, f)) + r := shr(f, r) + } + assembly { + r := shr(127, mul(r, r)) + let f := shr(128, r) + log_2 := or(log_2, shl(53, f)) + r := shr(f, r) + } + assembly { + r := shr(127, mul(r, r)) + let f := shr(128, r) + log_2 := or(log_2, shl(52, f)) + r := shr(f, r) + } + assembly { + r := shr(127, mul(r, r)) + let f := shr(128, r) + log_2 := or(log_2, shl(51, f)) + r := shr(f, r) + } + assembly { + r := shr(127, mul(r, r)) + let f := shr(128, r) + log_2 := or(log_2, shl(50, f)) + } + + int256 log_sqrt10001 = log_2 * 255738958999603826347141; // 128.128 number + + int24 tickLow = int24((log_sqrt10001 - 3402992956809132418596140100660247210) >> 128); + int24 tickHi = int24((log_sqrt10001 + 291339464771989622907027621153398088495) >> 128); + + tick = tickLow == tickHi ? tickLow : getSqrtRatioAtTick(tickHi) <= sqrtP ? tickHi : tickLow; + } + } + + function getMaxNumberTicks(int24 _tickDistance) internal pure returns (uint24 numTicks) { + return uint24(TickMath.MAX_TICK / _tickDistance) * 2; + } +} \ No newline at end of file diff --git a/src/hardhat/contracts/Misc_AMOs/kyberswap_v2/callback/IFlashCallback.sol b/src/hardhat/contracts/Misc_AMOs/kyberswap_v2/callback/IFlashCallback.sol new file mode 100644 index 00000000..10810c31 --- /dev/null +++ b/src/hardhat/contracts/Misc_AMOs/kyberswap_v2/callback/IFlashCallback.sol @@ -0,0 +1,18 @@ +// SPDX-License-Identifier: MIT +pragma solidity >=0.8.0; + +/// @title Callback for IPool#flash +/// @notice Any contract that calls IPool#flash must implement this interface +interface IFlashCallback { + /// @notice Called to `msg.sender` after flash loaning to the recipient from IPool#flash. + /// @dev This function's implementation must send the loaned amounts with computed fee amounts + /// The caller of this method must be checked to be a Pool deployed by the canonical Factory. + /// @param feeQty0 The token0 fee to be sent to the pool. + /// @param feeQty1 The token1 fee to be sent to the pool. + /// @param data Data passed through by the caller via the IPool#flash call + function flashCallback( + uint256 feeQty0, + uint256 feeQty1, + bytes calldata data + ) external; +} diff --git a/src/hardhat/contracts/Misc_AMOs/kyberswap_v2/callback/IMintCallback.sol b/src/hardhat/contracts/Misc_AMOs/kyberswap_v2/callback/IMintCallback.sol new file mode 100644 index 00000000..36bd06e5 --- /dev/null +++ b/src/hardhat/contracts/Misc_AMOs/kyberswap_v2/callback/IMintCallback.sol @@ -0,0 +1,18 @@ +// SPDX-License-Identifier: MIT +pragma solidity >=0.8.0; + +/// @title Callback for IPool#mint +/// @notice Any contract that calls IPool#mint must implement this interface +interface IMintCallback { + /// @notice Called to `msg.sender` after minting liquidity via IPool#mint. + /// @dev This function's implementation must send pool tokens to the pool for the minted LP tokens. + /// The caller of this method must be checked to be a Pool deployed by the canonical Factory. + /// @param deltaQty0 The token0 quantity to be sent to the pool. + /// @param deltaQty1 The token1 quantity to be sent to the pool. + /// @param data Data passed through by the caller via the IPool#mint call + function mintCallback( + uint256 deltaQty0, + uint256 deltaQty1, + bytes calldata data + ) external; +} diff --git a/src/hardhat/contracts/Misc_AMOs/kyberswap_v2/callback/ISwapCallback.sol b/src/hardhat/contracts/Misc_AMOs/kyberswap_v2/callback/ISwapCallback.sol new file mode 100644 index 00000000..54fee9e5 --- /dev/null +++ b/src/hardhat/contracts/Misc_AMOs/kyberswap_v2/callback/ISwapCallback.sol @@ -0,0 +1,21 @@ +// SPDX-License-Identifier: MIT +pragma solidity >=0.8.0; + +/// @title Callback for IPool#swap +/// @notice Any contract that calls IPool#swap must implement this interface +interface ISwapCallback { + /// @notice Called to `msg.sender` after swap execution of IPool#swap. + /// @dev This function's implementation must pay tokens owed to the pool for the swap. + /// The caller of this method must be checked to be a Pool deployed by the canonical Factory. + /// deltaQty0 and deltaQty1 can both be 0 if no tokens were swapped. + /// @param deltaQty0 The token0 quantity that was sent (negative) or must be received (positive) by the pool by + /// the end of the swap. If positive, the callback must send deltaQty0 of token0 to the pool. + /// @param deltaQty1 The token1 quantity that was sent (negative) or must be received (positive) by the pool by + /// the end of the swap. If positive, the callback must send deltaQty1 of token1 to the pool. + /// @param data Data passed through by the caller via the IPool#swap call + function swapCallback( + int256 deltaQty0, + int256 deltaQty1, + bytes calldata data + ) external; +} diff --git a/src/hardhat/contracts/Misc_AMOs/kyberswap_v2/libraries/BaseSplitCodeFactory.sol b/src/hardhat/contracts/Misc_AMOs/kyberswap_v2/libraries/BaseSplitCodeFactory.sol new file mode 100644 index 00000000..bf67eb6d --- /dev/null +++ b/src/hardhat/contracts/Misc_AMOs/kyberswap_v2/libraries/BaseSplitCodeFactory.sol @@ -0,0 +1,222 @@ +// SPDX-License-Identifier: GPL-3.0-or-later +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License +// along with this program. If not, see . + +pragma solidity >=0.8.0; + +import './CodeDeployer.sol'; + +/** + * @dev Base factory for contracts whose creation code is so large that the factory cannot hold it. This happens when + * the contract's creation code grows close to 24kB. + * + * Note that this factory cannot help with contracts that have a *runtime* (deployed) bytecode larger than 24kB. + * Taken from BalancerV2. Only modification made was to add unchecked block for sol 0.8 compatibility + */ +abstract contract BaseSplitCodeFactory { + // The contract's creation code is stored as code in two separate addresses, and retrieved via `extcodecopy`. This + // means this factory supports contracts with creation code of up to 48kB. + // We rely on inline-assembly to achieve this, both to make the entire operation highly gas efficient, and because + // `extcodecopy` is not available in Solidity. + + // solhint-disable no-inline-assembly + + address private immutable _creationCodeContractA; + uint256 private immutable _creationCodeSizeA; + + address private immutable _creationCodeContractB; + uint256 private immutable _creationCodeSizeB; + + /** + * @dev The creation code of a contract Foo can be obtained inside Solidity with `type(Foo).creationCode`. + */ + constructor(bytes memory creationCode) { + uint256 creationCodeSize = creationCode.length; + + // We are going to deploy two contracts: one with approximately the first half of `creationCode`'s contents + // (A), and another with the remaining half (B). + // We store the lengths in both immutable and stack variables, since immutable variables cannot be read during + // construction. + uint256 creationCodeSizeA = creationCodeSize / 2; + _creationCodeSizeA = creationCodeSizeA; + + uint256 creationCodeSizeB = creationCodeSize - creationCodeSizeA; + _creationCodeSizeB = creationCodeSizeB; + + // To deploy the contracts, we're going to use `CodeDeployer.deploy()`, which expects a memory array with + // the code to deploy. Note that we cannot simply create arrays for A and B's code by copying or moving + // `creationCode`'s contents as they are expected to be very large (> 24kB), so we must operate in-place. + + // Memory: [ code length ] [ A.data ] [ B.data ] + + // Creating A's array is simple: we simply replace `creationCode`'s length with A's length. We'll later restore + // the original length. + + bytes memory creationCodeA; + assembly { + creationCodeA := creationCode + mstore(creationCodeA, creationCodeSizeA) + } + + // Memory: [ A.length ] [ A.data ] [ B.data ] + // ^ creationCodeA + + _creationCodeContractA = CodeDeployer.deploy(creationCodeA); + + // Creating B's array is a bit more involved: since we cannot move B's contents, we are going to create a 'new' + // memory array starting at A's last 32 bytes, which will be replaced with B's length. We'll back-up this last + // byte to later restore it. + + bytes memory creationCodeB; + bytes32 lastByteA; + + assembly { + // `creationCode` points to the array's length, not data, so by adding A's length to it we arrive at A's + // last 32 bytes. + creationCodeB := add(creationCode, creationCodeSizeA) + lastByteA := mload(creationCodeB) + mstore(creationCodeB, creationCodeSizeB) + } + + // Memory: [ A.length ] [ A.data[ : -1] ] [ B.length ][ B.data ] + // ^ creationCodeA ^ creationCodeB + + _creationCodeContractB = CodeDeployer.deploy(creationCodeB); + + // We now restore the original contents of `creationCode` by writing back the original length and A's last byte. + assembly { + mstore(creationCodeA, creationCodeSize) + mstore(creationCodeB, lastByteA) + } + } + + /** + * @dev Returns the two addresses where the creation code of the contract crated by this factory is stored. + */ + function getCreationCodeContracts() public view returns (address contractA, address contractB) { + return (_creationCodeContractA, _creationCodeContractB); + } + + /** + * @dev Returns the creation code of the contract this factory creates. + */ + function getCreationCode() public view returns (bytes memory) { + return _getCreationCodeWithArgs(''); + } + + /** + * @dev Returns the creation code that will result in a contract being deployed with `constructorArgs`. + */ + function _getCreationCodeWithArgs(bytes memory constructorArgs) + private + view + returns (bytes memory code) + { + // This function exists because `abi.encode()` cannot be instructed to place its result at a specific address. + // We need for the ABI-encoded constructor arguments to be located immediately after the creation code, but + // cannot rely on `abi.encodePacked()` to perform concatenation as that would involve copying the creation code, + // which would be prohibitively expensive. + // Instead, we compute the creation code in a pre-allocated array that is large enough to hold *both* the + // creation code and the constructor arguments, and then copy the ABI-encoded arguments (which should not be + // overly long) right after the end of the creation code. + + // Immutable variables cannot be used in assembly, so we store them in the stack first. + address creationCodeContractA = _creationCodeContractA; + uint256 creationCodeSizeA = _creationCodeSizeA; + address creationCodeContractB = _creationCodeContractB; + uint256 creationCodeSizeB = _creationCodeSizeB; + + uint256 creationCodeSize = creationCodeSizeA + creationCodeSizeB; + uint256 constructorArgsSize = constructorArgs.length; + + uint256 codeSize = creationCodeSize + constructorArgsSize; + + assembly { + // First, we allocate memory for `code` by retrieving the free memory pointer and then moving it ahead of + // `code` by the size of the creation code plus constructor arguments, and 32 bytes for the array length. + code := mload(0x40) + mstore(0x40, add(code, add(codeSize, 32))) + + // We now store the length of the code plus constructor arguments. + mstore(code, codeSize) + + // Next, we concatenate the creation code stored in A and B. + let dataStart := add(code, 32) + extcodecopy(creationCodeContractA, dataStart, 0, creationCodeSizeA) + extcodecopy(creationCodeContractB, add(dataStart, creationCodeSizeA), 0, creationCodeSizeB) + } + + // Finally, we copy the constructorArgs to the end of the array. Unfortunately there is no way to avoid this + // copy, as it is not possible to tell Solidity where to store the result of `abi.encode()`. + uint256 constructorArgsDataPtr; + uint256 constructorArgsCodeDataPtr; + assembly { + constructorArgsDataPtr := add(constructorArgs, 32) + constructorArgsCodeDataPtr := add(add(code, 32), creationCodeSize) + } + + _memcpy(constructorArgsCodeDataPtr, constructorArgsDataPtr, constructorArgsSize); + } + + /** + * @dev Deploys a contract with constructor arguments. To create `constructorArgs`, call `abi.encode()` with the + * contract's constructor arguments, in order. + */ + function _create(bytes memory constructorArgs, bytes32 salt) internal virtual returns (address) { + bytes memory creationCode = _getCreationCodeWithArgs(constructorArgs); + + address destination; + assembly { + destination := create2(0, add(creationCode, 32), mload(creationCode), salt) + } + + if (destination == address(0)) { + // Bubble up inner revert reason + // solhint-disable-next-line no-inline-assembly + assembly { + returndatacopy(0, 0, returndatasize()) + revert(0, returndatasize()) + } + } + + return destination; + } + + // From + // https://github.com/Arachnid/solidity-stringutils/blob/b9a6f6615cf18a87a823cbc461ce9e140a61c305/src/strings.sol + function _memcpy( + uint256 dest, + uint256 src, + uint256 len + ) private pure { + // Copy word-length chunks while possible + for (; len >= 32; len -= 32) { + assembly { + mstore(dest, mload(src)) + } + dest += 32; + src += 32; + } + + // Copy remaining bytes + uint256 mask; + unchecked { + mask = 256**(32 - len) - 1; + } + assembly { + let srcpart := and(mload(src), not(mask)) + let destpart := and(mload(dest), mask) + mstore(dest, or(destpart, srcpart)) + } + } +} diff --git a/src/hardhat/contracts/Misc_AMOs/kyberswap_v2/libraries/CodeDeployer.sol b/src/hardhat/contracts/Misc_AMOs/kyberswap_v2/libraries/CodeDeployer.sol new file mode 100644 index 00000000..323a17f9 --- /dev/null +++ b/src/hardhat/contracts/Misc_AMOs/kyberswap_v2/libraries/CodeDeployer.sol @@ -0,0 +1,81 @@ +// SPDX-License-Identifier: GPL-3.0-or-later +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License +// along with this program. If not, see . +pragma solidity >=0.8.0; + +// Taken from BalancerV2. Only modification made is changing the require statement +// for a failed deployment to an assert statement +library CodeDeployer { + // During contract construction, the full code supplied exists as code, and can be accessed via `codesize` and + // `codecopy`. This is not the contract's final code however: whatever the constructor returns is what will be + // stored as its code. + // + // We use this mechanism to have a simple constructor that stores whatever is appended to it. The following opcode + // sequence corresponds to the creation code of the following equivalent Solidity contract, plus padding to make the + // full code 32 bytes long: + // + // contract CodeDeployer { + // constructor() payable { + // uint256 size; + // assembly { + // size := sub(codesize(), 32) // size of appended data, as constructor is 32 bytes long + // codecopy(0, 32, size) // copy all appended data to memory at position 0 + // return(0, size) // return appended data for it to be stored as code + // } + // } + // } + // + // More specifically, it is composed of the following opcodes (plus padding): + // + // [1] PUSH1 0x20 + // [2] CODESIZE + // [3] SUB + // [4] DUP1 + // [6] PUSH1 0x20 + // [8] PUSH1 0x00 + // [9] CODECOPY + // [11] PUSH1 0x00 + // [12] RETURN + // + // The padding is just the 0xfe sequence (invalid opcode). + bytes32 private constant _DEPLOYER_CREATION_CODE = + 0x602038038060206000396000f3fefefefefefefefefefefefefefefefefefefe; + + /** + * @dev Deploys a contract with `code` as its code, returning the destination address. + * Asserts that contract deployment is successful + */ + function deploy(bytes memory code) internal returns (address destination) { + bytes32 deployerCreationCode = _DEPLOYER_CREATION_CODE; + + // solhint-disable-next-line no-inline-assembly + assembly { + let codeLength := mload(code) + + // `code` is composed of length and data. We've already stored its length in `codeLength`, so we simply + // replace it with the deployer creation code (which is exactly 32 bytes long). + mstore(code, deployerCreationCode) + + // At this point, `code` now points to the deployer creation code immediately followed by `code`'s data + // contents. This is exactly what the deployer expects to receive when created. + destination := create(0, code, add(codeLength, 32)) + + // Finally, we restore the original length in order to not mutate `code`. + mstore(code, codeLength) + } + + // create opcode returns null address for failed contract creation instances + // hence, assert that the resulting address is not null + assert(destination != address(0)); + } +} diff --git a/src/hardhat/contracts/Misc_AMOs/kyberswap_v2/libraries/FullMath.sol b/src/hardhat/contracts/Misc_AMOs/kyberswap_v2/libraries/FullMath.sol new file mode 100644 index 00000000..8760966c --- /dev/null +++ b/src/hardhat/contracts/Misc_AMOs/kyberswap_v2/libraries/FullMath.sol @@ -0,0 +1,127 @@ +// SPDX-License-Identifier: MIT +pragma solidity >=0.8.0; + +/// @title Contains 512-bit math functions +/// @notice Facilitates multiplication and division that can have overflow of an intermediate value without any loss of precision +/// @dev Handles "phantom overflow" i.e., allows multiplication and division where an intermediate value overflows 256 bits +/// @dev Code has been modified to be compatible with sol 0.8 +library FullMath { + /// @notice Calculates floor(a×b÷denominator) with full precision. Throws if result overflows a uint256 or denominator == 0 + /// @param a The multiplicand + /// @param b The multiplier + /// @param denominator The divisor + /// @return result The 256-bit result + /// @dev Credit to Remco Bloemen under MIT license https://xn--2-umb.com/21/muldiv + function mulDivFloor( + uint256 a, + uint256 b, + uint256 denominator + ) internal pure returns (uint256 result) { + // 512-bit multiply [prod1 prod0] = a * b + // Compute the product mod 2**256 and mod 2**256 - 1 + // then use the Chinese Remainder Theorem to reconstruct + // the 512 bit result. The result is stored in two 256 + // variables such that product = prod1 * 2**256 + prod0 + uint256 prod0; // Least significant 256 bits of the product + uint256 prod1; // Most significant 256 bits of the product + assembly { + let mm := mulmod(a, b, not(0)) + prod0 := mul(a, b) + prod1 := sub(sub(mm, prod0), lt(mm, prod0)) + } + + // Handle non-overflow cases, 256 by 256 division + if (prod1 == 0) { + require(denominator > 0, '0 denom'); + assembly { + result := div(prod0, denominator) + } + return result; + } + + // Make sure the result is less than 2**256. + // Also prevents denominator == 0 + require(denominator > prod1, 'denom <= prod1'); + + /////////////////////////////////////////////// + // 512 by 256 division. + /////////////////////////////////////////////// + + // Make division exact by subtracting the remainder from [prod1 prod0] + // Compute remainder using mulmod + uint256 remainder; + assembly { + remainder := mulmod(a, b, denominator) + } + // Subtract 256 bit number from 512 bit number + assembly { + prod1 := sub(prod1, gt(remainder, prod0)) + prod0 := sub(prod0, remainder) + } + + // Factor powers of two out of denominator + // Compute largest power of two divisor of denominator. + // Always >= 1. + uint256 twos = denominator & (~denominator + 1); + // Divide denominator by power of two + assembly { + denominator := div(denominator, twos) + } + + // Divide [prod1 prod0] by the factors of two + assembly { + prod0 := div(prod0, twos) + } + // Shift in bits from prod1 into prod0. For this we need + // to flip `twos` such that it is 2**256 / twos. + // If twos is zero, then it becomes one + assembly { + twos := add(div(sub(0, twos), twos), 1) + } + unchecked { + prod0 |= prod1 * twos; + + // Invert denominator mod 2**256 + // Now that denominator is an odd number, it has an inverse + // modulo 2**256 such that denominator * inv = 1 mod 2**256. + // Compute the inverse by starting with a seed that is correct + // correct for four bits. That is, denominator * inv = 1 mod 2**4 + uint256 inv = (3 * denominator) ^ 2; + + // Now use Newton-Raphson iteration to improve the precision. + // Thanks to Hensel's lifting lemma, this also works in modular + // arithmetic, doubling the correct bits in each step. + inv *= 2 - denominator * inv; // inverse mod 2**8 + inv *= 2 - denominator * inv; // inverse mod 2**16 + inv *= 2 - denominator * inv; // inverse mod 2**32 + inv *= 2 - denominator * inv; // inverse mod 2**64 + inv *= 2 - denominator * inv; // inverse mod 2**128 + inv *= 2 - denominator * inv; // inverse mod 2**256 + + // Because the division is now exact we can divide by multiplying + // with the modular inverse of denominator. This will give us the + // correct result modulo 2**256. Since the precoditions guarantee + // that the outcome is less than 2**256, this is the final result. + // We don't need to compute the high bits of the result and prod1 + // is no longer required. + result = prod0 * inv; + } + return result; + } + + /// @notice Calculates ceil(a×b÷denominator) with full precision. Throws if result overflows a uint256 or denominator == 0 + /// @param a The multiplicand + /// @param b The multiplier + /// @param denominator The divisor + /// @return result The 256-bit result + function mulDivCeiling( + uint256 a, + uint256 b, + uint256 denominator + ) internal pure returns (uint256 result) { + result = mulDivFloor(a, b, denominator); + if (mulmod(a, b, denominator) > 0) { + result++; + } + } +} diff --git a/src/hardhat/contracts/Misc_AMOs/kyberswap_v2/libraries/Linkedlist.sol b/src/hardhat/contracts/Misc_AMOs/kyberswap_v2/libraries/Linkedlist.sol new file mode 100644 index 00000000..1f291d8e --- /dev/null +++ b/src/hardhat/contracts/Misc_AMOs/kyberswap_v2/libraries/Linkedlist.sol @@ -0,0 +1,55 @@ +// SPDX-License-Identifier: MIT +pragma solidity >=0.8.0; + +/// @title The implementation for a LinkedList +library Linkedlist { + struct Data { + int24 previous; + int24 next; + } + + /// @dev init data with the lowest and highest value of the LinkedList + /// @param lowestValue the lowest and also the HEAD of LinkedList + /// @param highestValue the highest and also the TAIL of the LinkedList + function init( + mapping(int24 => Linkedlist.Data) storage self, + int24 lowestValue, + int24 highestValue + ) internal { + (self[lowestValue].previous, self[lowestValue].next) = (lowestValue, highestValue); + (self[highestValue].previous, self[highestValue].next) = (lowestValue, highestValue); + } + + /// @dev Remove a value from the linked list, return the lower value + /// Return the lower value after removing, in case removedValue is the lowest/highest, no removing is done + function remove(mapping(int24 => Linkedlist.Data) storage self, int24 removedValue) + internal + returns (int24 lowerValue) + { + Data memory removedValueData = self[removedValue]; + require(removedValueData.next != removedValueData.previous, 'remove non-existent value'); + if (removedValueData.previous == removedValue) return removedValue; // remove the lowest value, nothing is done + lowerValue = removedValueData.previous; + if (removedValueData.next == removedValue) return lowerValue; // remove the highest value, nothing is done + self[removedValueData.previous].next = removedValueData.next; + self[removedValueData.next].previous = removedValueData.previous; + delete self[removedValue]; + } + + /// @dev Insert a new value to the linked list given its lower value that is inside the linked list + /// @param newValue the new value to insert, it must not exist in the LinkedList + /// @param lowerValue the nearest value which is <= newValue and is in the LinkedList + function insert( + mapping(int24 => Linkedlist.Data) storage self, + int24 newValue, + int24 lowerValue, + int24 nextValue + ) internal { + require(nextValue != self[lowerValue].previous, 'lower value is not initialized'); + require(lowerValue < newValue && nextValue > newValue, 'invalid lower value'); + self[newValue].next = nextValue; + self[newValue].previous = lowerValue; + self[nextValue].previous = newValue; + self[lowerValue].next = newValue; + } +} diff --git a/src/hardhat/contracts/Misc_AMOs/kyberswap_v2/libraries/LiqDeltaMath.sol b/src/hardhat/contracts/Misc_AMOs/kyberswap_v2/libraries/LiqDeltaMath.sol new file mode 100644 index 00000000..d0998bbb --- /dev/null +++ b/src/hardhat/contracts/Misc_AMOs/kyberswap_v2/libraries/LiqDeltaMath.sol @@ -0,0 +1,13 @@ +// SPDX-License-Identifier: MIT +pragma solidity >=0.8.0; + +/// @title Contains helper function to add or remove uint128 liquidityDelta to uint128 liquidity +library LiqDeltaMath { + function applyLiquidityDelta( + uint128 liquidity, + uint128 liquidityDelta, + bool isAddLiquidity + ) internal pure returns (uint128) { + return isAddLiquidity ? liquidity + liquidityDelta : liquidity - liquidityDelta; + } +} diff --git a/src/hardhat/contracts/Misc_AMOs/kyberswap_v2/libraries/LiquidityMath.sol b/src/hardhat/contracts/Misc_AMOs/kyberswap_v2/libraries/LiquidityMath.sol new file mode 100644 index 00000000..6a284f0e --- /dev/null +++ b/src/hardhat/contracts/Misc_AMOs/kyberswap_v2/libraries/LiquidityMath.sol @@ -0,0 +1,70 @@ +// SPDX-License-Identifier: MIT +pragma solidity >=0.8.0; + +import {MathConstants} from './MathConstants.sol'; +import {FullMath} from './FullMath.sol'; +import {SafeCast} from './SafeCast.sol'; + +library LiquidityMath { + using SafeCast for uint256; + + /// @notice Gets liquidity from qty 0 and the price range + /// qty0 = liquidity * (sqrt(upper) - sqrt(lower)) / (sqrt(upper) * sqrt(lower)) + /// => liquidity = qty0 * (sqrt(upper) * sqrt(lower)) / (sqrt(upper) - sqrt(lower)) + /// @param lowerSqrtP A lower sqrt price + /// @param upperSqrtP An upper sqrt price + /// @param qty0 amount of token0 + /// @return liquidity amount of returned liquidity to not exceed the qty0 + function getLiquidityFromQty0( + uint160 lowerSqrtP, + uint160 upperSqrtP, + uint256 qty0 + ) internal pure returns (uint128) { + uint256 liq = FullMath.mulDivFloor(lowerSqrtP, upperSqrtP, MathConstants.TWO_POW_96); + unchecked { + return FullMath.mulDivFloor(liq, qty0, upperSqrtP - lowerSqrtP).toUint128(); + } + } + + /// @notice Gets liquidity from qty 1 and the price range + /// @dev qty1 = liquidity * (sqrt(upper) - sqrt(lower)) + /// thus, liquidity = qty1 / (sqrt(upper) - sqrt(lower)) + /// @param lowerSqrtP A lower sqrt price + /// @param upperSqrtP An upper sqrt price + /// @param qty1 amount of token1 + /// @return liquidity amount of returned liquidity to not exceed to qty1 + function getLiquidityFromQty1( + uint160 lowerSqrtP, + uint160 upperSqrtP, + uint256 qty1 + ) internal pure returns (uint128) { + unchecked { + return FullMath.mulDivFloor(qty1, MathConstants.TWO_POW_96, upperSqrtP - lowerSqrtP).toUint128(); + } + } + + /// @notice Gets liquidity given price range and 2 qties of token0 and token1 + /// @param currentSqrtP current price + /// @param lowerSqrtP A lower sqrt price + /// @param upperSqrtP An upper sqrt price + /// @param qty0 amount of token0 - at most + /// @param qty1 amount of token1 - at most + /// @return liquidity amount of returned liquidity to not exceed the given qties + function getLiquidityFromQties( + uint160 currentSqrtP, + uint160 lowerSqrtP, + uint160 upperSqrtP, + uint256 qty0, + uint256 qty1 + ) internal pure returns (uint128) { + if (currentSqrtP <= lowerSqrtP) { + return getLiquidityFromQty0(lowerSqrtP, upperSqrtP, qty0); + } + if (currentSqrtP >= upperSqrtP) { + return getLiquidityFromQty1(lowerSqrtP, upperSqrtP, qty1); + } + uint128 liq0 = getLiquidityFromQty0(currentSqrtP, upperSqrtP, qty0); + uint128 liq1 = getLiquidityFromQty1(lowerSqrtP, currentSqrtP, qty1); + return liq0 < liq1 ? liq0 : liq1; + } +} \ No newline at end of file diff --git a/src/hardhat/contracts/Misc_AMOs/kyberswap_v2/libraries/MathConstants.sol b/src/hardhat/contracts/Misc_AMOs/kyberswap_v2/libraries/MathConstants.sol new file mode 100644 index 00000000..55122778 --- /dev/null +++ b/src/hardhat/contracts/Misc_AMOs/kyberswap_v2/libraries/MathConstants.sol @@ -0,0 +1,15 @@ +// SPDX-License-Identifier: MIT +pragma solidity >=0.8.0; + +/// @title Contains constants needed for math libraries +library MathConstants { + uint256 internal constant TWO_FEE_UNITS = 200_000; + uint256 internal constant TWO_POW_96 = 2 ** 96; + uint128 internal constant MIN_LIQUIDITY = 100; + uint8 internal constant RES_96 = 96; + uint24 internal constant FEE_UNITS = 100000; + // it is strictly less than 5% price movement if jumping MAX_TICK_DISTANCE ticks + int24 internal constant MAX_TICK_DISTANCE = 480; + // max number of tick travel when inserting if data changes + uint256 internal constant MAX_TICK_TRAVEL = 10; +} diff --git a/src/hardhat/contracts/Misc_AMOs/kyberswap_v2/libraries/Oracle.sol b/src/hardhat/contracts/Misc_AMOs/kyberswap_v2/libraries/Oracle.sol new file mode 100644 index 00000000..1b3b54a5 --- /dev/null +++ b/src/hardhat/contracts/Misc_AMOs/kyberswap_v2/libraries/Oracle.sol @@ -0,0 +1,309 @@ +// SPDX-License-Identifier: BUSL-1.1 +pragma solidity >=0.8.0; + +/// @title Oracle +/// @notice Provides price data useful for a wide variety of system designs +/// @dev Instances of stored oracle data, "observations", are collected in the oracle array +/// Every pool is initialized with an oracle array length of 1. Anyone can pay the SSTOREs to increase the +/// maximum length of the oracle array. New slots will be added when the array is fully populated. +/// Observations are overwritten when the full length of the oracle array is populated. +/// The most recent observation is available, independent of the length of the oracle array, by passing 0 to observe() +library Oracle { + struct Observation { + // the block timestamp of the observation + uint32 blockTimestamp; + // the tick accumulator, i.e. tick * time elapsed since the pool was first initialized + int56 tickCumulative; + // whether or not the observation is initialized + bool initialized; + } + + /// @notice Transforms a previous observation into a new observation, given the passage of time and the current tick + /// @dev blockTimestamp _must_ be chronologically equal to or greater than last.blockTimestamp, safe for 0 or 1 overflows + /// @param last The specified observation to be transformed + /// @param blockTimestamp The timestamp of the new observation + /// @param tick The active tick at the time of the new observation + /// @return Observation The newly populated observation + function transform( + Observation memory last, + uint32 blockTimestamp, + int24 tick + ) private pure returns (Observation memory) { + unchecked { + uint32 delta = blockTimestamp - last.blockTimestamp; + return + Observation({ + blockTimestamp: blockTimestamp, + tickCumulative: last.tickCumulative + int56(tick) * int32(delta), + initialized: true + }); + } + } + + /// @notice Initialize the oracle array by writing the first slot. Called once for the lifecycle of the observations array + /// @param self The stored oracle array + /// @param time The time of the oracle initialization, via block.timestamp truncated to uint32 + /// @return cardinality The number of populated elements in the oracle array + /// @return cardinalityNext The new length of the oracle array, independent of population + function initialize(Observation[65535] storage self, uint32 time) + internal + returns (uint16 cardinality, uint16 cardinalityNext) + { + self[0] = Observation({ + blockTimestamp: time, + tickCumulative: 0, + initialized: true + }); + return (1, 1); + } + + /// @notice Writes an oracle observation to the array + /// @dev Writable at most once per block. Index represents the most recently written element. cardinality and index must be tracked externally. + /// If the index is at the end of the allowable array length (according to cardinality), and the next cardinality + /// is greater than the current one, cardinality may be increased. This restriction is created to preserve ordering. + /// @param self The stored oracle array + /// @param index The index of the observation that was most recently written to the observations array + /// @param blockTimestamp The timestamp of the new observation + /// @param tick The active tick at the time of the new observation + /// @param cardinality The number of populated elements in the oracle array + /// @param cardinalityNext The new length of the oracle array, independent of population + /// @return indexUpdated The new index of the most recently written element in the oracle array + /// @return cardinalityUpdated The new cardinality of the oracle array + function write( + Observation[65535] storage self, + uint16 index, + uint32 blockTimestamp, + int24 tick, + uint16 cardinality, + uint16 cardinalityNext + ) internal returns (uint16 indexUpdated, uint16 cardinalityUpdated) { + Observation memory last = self[index]; + + // early return if we've already written an observation this block + if (last.blockTimestamp == blockTimestamp) return (index, cardinality); + + unchecked { + // if the conditions are right, we can bump the cardinality + if (cardinalityNext > cardinality && index == (cardinality - 1)) { + cardinalityUpdated = cardinalityNext; + } else { + cardinalityUpdated = cardinality; + } + + indexUpdated = (index + 1) % cardinalityUpdated; + } + self[indexUpdated] = transform(last, blockTimestamp, tick); + } + + /// @notice Prepares the oracle array to store up to `next` observations + /// @param self The stored oracle array + /// @param current The current next cardinality of the oracle array + /// @param next The proposed next cardinality which will be populated in the oracle array + /// @return next The next cardinality which will be populated in the oracle array + function grow( + Observation[65535] storage self, + uint16 current, + uint16 next + ) internal returns (uint16) { + require(current > 0, 'I'); + // no-op if the passed next value isn't greater than the current next value + if (next <= current) return current; + // store in each slot to prevent fresh SSTOREs in swaps + // this data will not be used because the initialized boolean is still false + for (uint16 i = current; i < next; i++) self[i].blockTimestamp = 1; + return next; + } + + /// @notice comparator for 32-bit timestamps + /// @dev safe for 0 or 1 overflows, a and b _must_ be chronologically before or equal to time + /// @param time A timestamp truncated to 32 bits + /// @param a A comparison timestamp from which to determine the relative position of `time` + /// @param b From which to determine the relative position of `time` + /// @return bool Whether `a` is chronologically <= `b` + function lte( + uint32 time, + uint32 a, + uint32 b + ) private pure returns (bool) { + unchecked { + // if there hasn't been overflow, no need to adjust + if (a <= time && b <= time) return a <= b; + + uint256 aAdjusted = a > time ? a : a + 2**32; + uint256 bAdjusted = b > time ? b : b + 2**32; + + return aAdjusted <= bAdjusted; + } + } + + /// @notice Fetches the observations beforeOrAt and atOrAfter a target, i.e. where [beforeOrAt, atOrAfter] is satisfied. + /// The result may be the same observation, or adjacent observations. + /// @dev The answer must be contained in the array, used when the target is located within the stored observation + /// boundaries: older than the most recent observation and younger, or the same age as, the oldest observation + /// @param self The stored oracle array + /// @param time The current block.timestamp + /// @param target The timestamp at which the reserved observation should be for + /// @param index The index of the observation that was most recently written to the observations array + /// @param cardinality The number of populated elements in the oracle array + /// @return beforeOrAt The observation recorded before, or at, the target + /// @return atOrAfter The observation recorded at, or after, the target + function binarySearch( + Observation[65535] storage self, + uint32 time, + uint32 target, + uint16 index, + uint16 cardinality + ) private view returns (Observation memory beforeOrAt, Observation memory atOrAfter) { + unchecked { + uint256 l = (index + 1) % cardinality; // oldest observation + uint256 r = l + cardinality - 1; // newest observation + uint256 i; + while (true) { + i = (l + r) / 2; + + beforeOrAt = self[i % cardinality]; + + // we've landed on an uninitialized tick, keep searching higher (more recently) + if (!beforeOrAt.initialized) { + l = i + 1; + continue; + } + + atOrAfter = self[(i + 1) % cardinality]; + + bool targetAtOrAfter = lte(time, beforeOrAt.blockTimestamp, target); + + // check if we've found the answer! + if (targetAtOrAfter && lte(time, target, atOrAfter.blockTimestamp)) break; + + if (!targetAtOrAfter) r = i - 1; + else l = i + 1; + } + } + } + + /// @notice Fetches the observations beforeOrAt and atOrAfter a given target, i.e. where [beforeOrAt, atOrAfter] is satisfied + /// @dev Assumes there is at least 1 initialized observation. + /// Used by observeSingle() to compute the counterfactual accumulator values as of a given block timestamp. + /// @param self The stored oracle array + /// @param time The current block.timestamp + /// @param target The timestamp at which the reserved observation should be for + /// @param tick The active tick at the time of the returned or simulated observation + /// @param index The index of the observation that was most recently written to the observations array + /// @param cardinality The number of populated elements in the oracle array + /// @return beforeOrAt The observation which occurred at, or before, the given timestamp + /// @return atOrAfter The observation which occurred at, or after, the given timestamp + function getSurroundingObservations( + Observation[65535] storage self, + uint32 time, + uint32 target, + int24 tick, + uint16 index, + uint16 cardinality + ) private view returns (Observation memory beforeOrAt, Observation memory atOrAfter) { + // optimistically set before to the newest observation + beforeOrAt = self[index]; + + // if the target is chronologically at or after the newest observation, we can early return + if (lte(time, beforeOrAt.blockTimestamp, target)) { + if (beforeOrAt.blockTimestamp == target) { + // if newest observation equals target, we're in the same block, so we can ignore atOrAfter + return (beforeOrAt, atOrAfter); + } else { + // otherwise, we need to transform + return (beforeOrAt, transform(beforeOrAt, target, tick)); + } + } + unchecked { + // now, set before to the oldest observation + beforeOrAt = self[(index + 1) % cardinality]; + } + if (!beforeOrAt.initialized) beforeOrAt = self[0]; + + // ensure that the target is chronologically at or after the oldest observation + require(lte(time, beforeOrAt.blockTimestamp, target), 'OLD'); + + // if we've reached this point, we have to binary search + return binarySearch(self, time, target, index, cardinality); + } + + /// @dev Reverts if an observation at or before the desired observation timestamp does not exist. + /// 0 may be passed as `secondsAgo' to return the current cumulative values. + /// If called with a timestamp falling between two observations, returns the counterfactual accumulator values + /// at exactly the timestamp between the two observations. + /// @param self The stored oracle array + /// @param time The current block timestamp + /// @param secondsAgo The amount of time to look back, in seconds, at which point to return an observation + /// @param tick The current tick + /// @param index The index of the observation that was most recently written to the observations array + /// @param cardinality The number of populated elements in the oracle array + /// @return tickCumulative The tick * time elapsed since the pool was first initialized, as of `secondsAgo` + function observeSingle( + Observation[65535] storage self, + uint32 time, + uint32 secondsAgo, + int24 tick, + uint16 index, + uint16 cardinality + ) internal view returns (int56 tickCumulative) { + unchecked { + if (secondsAgo == 0) { + Observation memory last = self[index]; + if (last.blockTimestamp != time) last = transform(last, time, tick); + return last.tickCumulative; + } + + uint32 target = time - secondsAgo; + + (Observation memory beforeOrAt, Observation memory atOrAfter) = + getSurroundingObservations(self, time, target, tick, index, cardinality); + + if (target == beforeOrAt.blockTimestamp) { + // we're at the left boundary + return beforeOrAt.tickCumulative; + } else if (target == atOrAfter.blockTimestamp) { + // we're at the right boundary + return atOrAfter.tickCumulative; + } else { + // we're in the middle + uint32 observationTimeDelta = atOrAfter.blockTimestamp - beforeOrAt.blockTimestamp; + uint32 targetDelta = target - beforeOrAt.blockTimestamp; + return beforeOrAt.tickCumulative + + ((atOrAfter.tickCumulative - beforeOrAt.tickCumulative) / int32(observationTimeDelta)) * + int32(targetDelta); + } + } + } + + /// @notice Returns the accumulator values as of each time seconds ago from the given time in the array of `secondsAgos` + /// @dev Reverts if `secondsAgos` > oldest observation + /// @param self The stored oracle array + /// @param time The current block.timestamp + /// @param secondsAgos Each amount of time to look back, in seconds, at which point to return an observation + /// @param tick The current tick + /// @param index The index of the observation that was most recently written to the observations array + /// @param cardinality The number of populated elements in the oracle array + /// @return tickCumulatives The tick * time elapsed since the pool was first initialized, as of each `secondsAgo` + function observe( + Observation[65535] storage self, + uint32 time, + uint32[] memory secondsAgos, + int24 tick, + uint16 index, + uint16 cardinality + ) internal view returns (int56[] memory tickCumulatives) { + require(cardinality > 0, 'I'); + + tickCumulatives = new int56[](secondsAgos.length); + for (uint256 i = 0; i < secondsAgos.length; i++) { + tickCumulatives[i] = observeSingle( + self, + time, + secondsAgos[i], + tick, + index, + cardinality + ); + } + } +} diff --git a/src/hardhat/contracts/Misc_AMOs/kyberswap_v2/libraries/QtyDeltaMath.sol b/src/hardhat/contracts/Misc_AMOs/kyberswap_v2/libraries/QtyDeltaMath.sol new file mode 100644 index 00000000..75bf4fed --- /dev/null +++ b/src/hardhat/contracts/Misc_AMOs/kyberswap_v2/libraries/QtyDeltaMath.sol @@ -0,0 +1,112 @@ +// SPDX-License-Identifier: MIT +pragma solidity >=0.8.0; + +import {MathConstants} from './MathConstants.sol'; +import {TickMath} from './TickMath.sol'; +import {FullMath} from './FullMath.sol'; +import {SafeCast} from './SafeCast.sol'; + +/// @title Contains helper functions for calculating +/// token0 and token1 quantites from differences in prices +/// or from burning reinvestment tokens +library QtyDeltaMath { + using SafeCast for uint256; + using SafeCast for int128; + + function calcUnlockQtys(uint160 initialSqrtP) + internal + pure + returns (uint256 qty0, uint256 qty1) + { + qty0 = FullMath.mulDivCeiling(MathConstants.MIN_LIQUIDITY, MathConstants.TWO_POW_96, initialSqrtP); + qty1 = FullMath.mulDivCeiling(MathConstants.MIN_LIQUIDITY, initialSqrtP, MathConstants.TWO_POW_96); + } + + /// @notice Gets the qty0 delta between two prices + /// @dev Calculates liquidity / sqrt(lower) - liquidity / sqrt(upper), + /// i.e. liquidity * (sqrt(upper) - sqrt(lower)) / (sqrt(upper) * sqrt(lower)) + /// rounds up if adding liquidity, rounds down if removing liquidity + /// @param lowerSqrtP The lower sqrt price. + /// @param upperSqrtP The upper sqrt price. Should be >= lowerSqrtP + /// @param liquidity Liquidity quantity + /// @param isAddLiquidity true = add liquidity, false = remove liquidity + /// @return token0 qty required for position with liquidity between the 2 sqrt prices + function calcRequiredQty0( + uint160 lowerSqrtP, + uint160 upperSqrtP, + uint128 liquidity, + bool isAddLiquidity + ) internal pure returns (int256) { + uint256 numerator1 = uint256(liquidity) << MathConstants.RES_96; + uint256 numerator2; + unchecked { + numerator2 = upperSqrtP - lowerSqrtP; + } + return + isAddLiquidity + ? (divCeiling(FullMath.mulDivCeiling(numerator1, numerator2, upperSqrtP), lowerSqrtP)) + .toInt256() + : (FullMath.mulDivFloor(numerator1, numerator2, upperSqrtP) / lowerSqrtP).revToInt256(); + } + + /// @notice Gets the token1 delta quantity between two prices + /// @dev Calculates liquidity * (sqrt(upper) - sqrt(lower)) + /// rounds up if adding liquidity, rounds down if removing liquidity + /// @param lowerSqrtP The lower sqrt price. + /// @param upperSqrtP The upper sqrt price. Should be >= lowerSqrtP + /// @param liquidity Liquidity quantity + /// @param isAddLiquidity true = add liquidity, false = remove liquidity + /// @return token1 qty required for position with liquidity between the 2 sqrt prices + function calcRequiredQty1( + uint160 lowerSqrtP, + uint160 upperSqrtP, + uint128 liquidity, + bool isAddLiquidity + ) internal pure returns (int256) { + unchecked { + return + isAddLiquidity + ? (FullMath.mulDivCeiling(liquidity, upperSqrtP - lowerSqrtP, MathConstants.TWO_POW_96)).toInt256() + : (FullMath.mulDivFloor(liquidity, upperSqrtP - lowerSqrtP, MathConstants.TWO_POW_96)).revToInt256(); + } + } + + /// @notice Calculates the token0 quantity proportion to be sent to the user + /// for burning reinvestment tokens + /// @param sqrtP Current pool sqrt price + /// @param liquidity Difference in reinvestment liquidity due to reinvestment token burn + /// @return token0 quantity to be sent to the user + function getQty0FromBurnRTokens(uint160 sqrtP, uint256 liquidity) + internal + pure + returns (uint256) + { + return FullMath.mulDivFloor(liquidity, MathConstants.TWO_POW_96, sqrtP); + } + + /// @notice Calculates the token1 quantity proportion to be sent to the user + /// for burning reinvestment tokens + /// @param sqrtP Current pool sqrt price + /// @param liquidity Difference in reinvestment liquidity due to reinvestment token burn + /// @return token1 quantity to be sent to the user + function getQty1FromBurnRTokens(uint160 sqrtP, uint256 liquidity) + internal + pure + returns (uint256) + { + return FullMath.mulDivFloor(liquidity, sqrtP, MathConstants.TWO_POW_96); + } + + /// @notice Returns ceil(x / y) + /// @dev division by 0 has unspecified behavior, and must be checked externally + /// @param x The dividend + /// @param y The divisor + /// @return z The quotient, ceil(x / y) + function divCeiling(uint256 x, uint256 y) internal pure returns (uint256 z) { + // return x / y + ((x % y == 0) ? 0 : 1); + require(y > 0); + assembly { + z := add(div(x, y), gt(mod(x, y), 0)) + } + } +} diff --git a/src/hardhat/contracts/Misc_AMOs/kyberswap_v2/libraries/QuadMath.sol b/src/hardhat/contracts/Misc_AMOs/kyberswap_v2/libraries/QuadMath.sol new file mode 100644 index 00000000..1f88e986 --- /dev/null +++ b/src/hardhat/contracts/Misc_AMOs/kyberswap_v2/libraries/QuadMath.sol @@ -0,0 +1,31 @@ +// SPDX-License-Identifier: MIT +pragma solidity >=0.8.0; + +library QuadMath { + // our equation is ax^2 - 2bx + c = 0, where a, b and c > 0 + // the qudratic formula to obtain the smaller root is (2b - sqrt((2*b)^2 - 4ac)) / 2a + // which can be simplified to (b - sqrt(b^2 - ac)) / a + function getSmallerRootOfQuadEqn( + uint256 a, + uint256 b, + uint256 c + ) internal pure returns (uint256 smallerRoot) { + smallerRoot = (b - sqrt(b * b - a * c)) / a; + } + + // babylonian method (https://en.wikipedia.org/wiki/Methods_of_computing_square_roots#Babylonian_method) + function sqrt(uint256 y) internal pure returns (uint256 z) { + unchecked { + if (y > 3) { + z = y; + uint256 x = y / 2 + 1; + while (x < z) { + z = x; + x = (y / x + x) / 2; + } + } else if (y != 0) { + z = 1; + } + } + } +} diff --git a/src/hardhat/contracts/Misc_AMOs/kyberswap_v2/libraries/ReinvestmentMath.sol b/src/hardhat/contracts/Misc_AMOs/kyberswap_v2/libraries/ReinvestmentMath.sol new file mode 100644 index 00000000..28bf38a1 --- /dev/null +++ b/src/hardhat/contracts/Misc_AMOs/kyberswap_v2/libraries/ReinvestmentMath.sol @@ -0,0 +1,26 @@ +// SPDX-License-Identifier: MIT +pragma solidity >=0.8.0; + +import {MathConstants as C} from './MathConstants.sol'; +import {FullMath} from './FullMath.sol'; + +/// @title Contains helper function to calculate the number of reinvestment tokens to be minted +library ReinvestmentMath { + /// @dev calculate the mint amount with given reinvestL, reinvestLLast, baseL and rTotalSupply + /// contribution of lp to the increment is calculated by the proportion of baseL with reinvestL + baseL + /// then rMintQty is calculated by mutiplying this with the liquidity per reinvestment token + /// rMintQty = rTotalSupply * (reinvestL - reinvestLLast) / reinvestLLast * baseL / (baseL + reinvestL) + function calcrMintQty( + uint256 reinvestL, + uint256 reinvestLLast, + uint128 baseL, + uint256 rTotalSupply + ) internal pure returns (uint256 rMintQty) { + uint256 lpContribution = FullMath.mulDivFloor( + baseL, + reinvestL - reinvestLLast, + baseL + reinvestL + ); + rMintQty = FullMath.mulDivFloor(rTotalSupply, lpContribution, reinvestLLast); + } +} diff --git a/src/hardhat/contracts/Misc_AMOs/kyberswap_v2/libraries/SafeCast.sol b/src/hardhat/contracts/Misc_AMOs/kyberswap_v2/libraries/SafeCast.sol new file mode 100644 index 00000000..e2af2243 --- /dev/null +++ b/src/hardhat/contracts/Misc_AMOs/kyberswap_v2/libraries/SafeCast.sol @@ -0,0 +1,69 @@ +// SPDX-License-Identifier: GPL-2.0-or-later +pragma solidity >=0.8.0; + +/// @title Safe casting methods +/// @notice Contains methods for safely casting between types +library SafeCast { + /// @notice Cast a uint256 to uint32, revert on overflow + /// @param y The uint256 to be downcasted + /// @return z The downcasted integer, now type uint32 + function toUint32(uint256 y) internal pure returns (uint32 z) { + require((z = uint32(y)) == y); + } + + /// @notice Cast a uint128 to a int128, revert on overflow + /// @param y The uint256 to be casted + /// @return z The casted integer, now type int256 + function toInt128(uint128 y) internal pure returns (int128 z) { + require(y < 2**127); + z = int128(y); + } + + /// @notice Cast a uint256 to a uint128, revert on overflow + /// @param y the uint256 to be downcasted + /// @return z The downcasted integer, now type uint128 + function toUint128(uint256 y) internal pure returns (uint128 z) { + require((z = uint128(y)) == y); + } + + /// @notice Cast a int128 to a uint128 and reverses the sign. + /// @param y The int128 to be casted + /// @return z = -y, now type uint128 + function revToUint128(int128 y) internal pure returns (uint128 z) { + unchecked { + return type(uint128).max - uint128(y) + 1; + } + } + + /// @notice Cast a uint256 to a uint160, revert on overflow + /// @param y The uint256 to be downcasted + /// @return z The downcasted integer, now type uint160 + function toUint160(uint256 y) internal pure returns (uint160 z) { + require((z = uint160(y)) == y); + } + + /// @notice Cast a uint256 to a int256, revert on overflow + /// @param y The uint256 to be casted + /// @return z The casted integer, now type int256 + function toInt256(uint256 y) internal pure returns (int256 z) { + require(y < 2**255); + z = int256(y); + } + + /// @notice Cast a uint256 to a int256 and reverses the sign, revert on overflow + /// @param y The uint256 to be casted + /// @return z = -y, now type int256 + function revToInt256(uint256 y) internal pure returns (int256 z) { + require(y < 2**255); + z = -int256(y); + } + + /// @notice Cast a int256 to a uint256 and reverses the sign. + /// @param y The int256 to be casted + /// @return z = -y, now type uint256 + function revToUint256(int256 y) internal pure returns (uint256 z) { + unchecked { + return type(uint256).max - uint256(y) + 1; + } + } +} diff --git a/src/hardhat/contracts/Misc_AMOs/kyberswap_v2/libraries/SwapMath.sol b/src/hardhat/contracts/Misc_AMOs/kyberswap_v2/libraries/SwapMath.sol new file mode 100644 index 00000000..5574bb2a --- /dev/null +++ b/src/hardhat/contracts/Misc_AMOs/kyberswap_v2/libraries/SwapMath.sol @@ -0,0 +1,321 @@ +// SPDX-License-Identifier: MIT +pragma solidity >=0.8.0; + +import {MathConstants as C} from './MathConstants.sol'; +import {FullMath} from './FullMath.sol'; +import {QuadMath} from './QuadMath.sol'; +import {SafeCast} from './SafeCast.sol'; + +/// @title Contains helper functions for swaps +library SwapMath { + using SafeCast for uint256; + using SafeCast for int256; + + /// @dev Computes the actual swap input / output amounts to be deducted or added, + /// the swap fee to be collected and the resulting sqrtP. + /// @notice nextSqrtP should not exceed targetSqrtP. + /// @param liquidity active base liquidity + reinvest liquidity + /// @param currentSqrtP current sqrt price + /// @param targetSqrtP sqrt price limit the new sqrt price can take + /// @param feeInFeeUnits swap fee in basis points + /// @param specifiedAmount the amount remaining to be used for the swap + /// @param isExactInput true if specifiedAmount refers to input amount, false if specifiedAmount refers to output amount + /// @param isToken0 true if specifiedAmount is in token0, false if specifiedAmount is in token1 + /// @return usedAmount actual amount to be used for the swap + /// @return returnedAmount output qty to be accumulated if isExactInput = true, input qty if isExactInput = false + /// @return deltaL collected swap fee, to be incremented to reinvest liquidity + /// @return nextSqrtP the new sqrt price after the computed swap step + function computeSwapStep( + uint256 liquidity, + uint160 currentSqrtP, + uint160 targetSqrtP, + uint256 feeInFeeUnits, + int256 specifiedAmount, + bool isExactInput, + bool isToken0 + ) + internal + pure + returns ( + int256 usedAmount, + int256 returnedAmount, + uint256 deltaL, + uint160 nextSqrtP + ) + { + // in the event currentSqrtP == targetSqrtP because of tick movements, return + // eg. swapped up tick where specified price limit is on an initialised tick + // then swapping down tick will cause next tick to be the same as the current tick + if (currentSqrtP == targetSqrtP) return (0, 0, 0, currentSqrtP); + usedAmount = calcReachAmount( + liquidity, + currentSqrtP, + targetSqrtP, + feeInFeeUnits, + isExactInput, + isToken0 + ); + + if ( + (isExactInput && usedAmount > specifiedAmount) || + (!isExactInput && usedAmount <= specifiedAmount) + ) { + usedAmount = specifiedAmount; + } else { + nextSqrtP = targetSqrtP; + } + + uint256 absDelta = usedAmount >= 0 ? uint256(usedAmount) : usedAmount.revToUint256(); + if (nextSqrtP == 0) { + deltaL = estimateIncrementalLiquidity( + absDelta, + liquidity, + currentSqrtP, + feeInFeeUnits, + isExactInput, + isToken0 + ); + nextSqrtP = calcFinalPrice(absDelta, liquidity, deltaL, currentSqrtP, isExactInput, isToken0) + .toUint160(); + } else { + deltaL = calcIncrementalLiquidity( + absDelta, + liquidity, + currentSqrtP, + nextSqrtP, + isExactInput, + isToken0 + ); + } + returnedAmount = calcReturnedAmount( + liquidity, + currentSqrtP, + nextSqrtP, + deltaL, + isExactInput, + isToken0 + ); + } + + /// @dev calculates the amount needed to reach targetSqrtP from currentSqrtP + /// @dev we cast currentSqrtP and targetSqrtP to uint256 as they are multiplied by TWO_FEE_UNITS or feeInFeeUnits + function calcReachAmount( + uint256 liquidity, + uint256 currentSqrtP, + uint256 targetSqrtP, + uint256 feeInFeeUnits, + bool isExactInput, + bool isToken0 + ) internal pure returns (int256 reachAmount) { + uint256 absPriceDiff; + unchecked { + absPriceDiff = (currentSqrtP >= targetSqrtP) + ? (currentSqrtP - targetSqrtP) + : (targetSqrtP - currentSqrtP); + } + if (isExactInput) { + // we round down so that we avoid taking giving away too much for the specified input + // ie. require less input qty to move ticks + if (isToken0) { + // numerator = 2 * liquidity * absPriceDiff + // denominator = currentSqrtP * (2 * targetSqrtP - currentSqrtP * feeInFeeUnits / FEE_UNITS) + // overflow should not happen because the absPriceDiff is capped to ~5% + uint256 denominator = C.TWO_FEE_UNITS * targetSqrtP - feeInFeeUnits * currentSqrtP; + uint256 numerator = FullMath.mulDivFloor( + liquidity, + C.TWO_FEE_UNITS * absPriceDiff, + denominator + ); + reachAmount = FullMath.mulDivFloor(numerator, C.TWO_POW_96, currentSqrtP).toInt256(); + } else { + // numerator = 2 * liquidity * absPriceDiff * currentSqrtP + // denominator = 2 * currentSqrtP - targetSqrtP * feeInFeeUnits / FEE_UNITS + // overflow should not happen because the absPriceDiff is capped to ~5% + uint256 denominator = C.TWO_FEE_UNITS * currentSqrtP - feeInFeeUnits * targetSqrtP; + uint256 numerator = FullMath.mulDivFloor( + liquidity, + C.TWO_FEE_UNITS * absPriceDiff, + denominator + ); + reachAmount = FullMath.mulDivFloor(numerator, currentSqrtP, C.TWO_POW_96).toInt256(); + } + } else { + // we will perform negation as the last step + // we round down so that we require less output qty to move ticks + if (isToken0) { + // numerator: (liquidity)(absPriceDiff)(2 * currentSqrtP - deltaL * (currentSqrtP + targetSqrtP)) + // denominator: (currentSqrtP * targetSqrtP) * (2 * currentSqrtP - deltaL * targetSqrtP) + // overflow should not happen because the absPriceDiff is capped to ~5% + uint256 denominator = C.TWO_FEE_UNITS * currentSqrtP - feeInFeeUnits * targetSqrtP; + uint256 numerator = denominator - feeInFeeUnits * currentSqrtP; + numerator = FullMath.mulDivFloor(liquidity << C.RES_96, numerator, denominator); + reachAmount = (FullMath.mulDivFloor(numerator, absPriceDiff, currentSqrtP) / targetSqrtP) + .revToInt256(); + } else { + // numerator: liquidity * absPriceDiff * (TWO_FEE_UNITS * targetSqrtP - feeInFeeUnits * (targetSqrtP + currentSqrtP)) + // denominator: (TWO_FEE_UNITS * targetSqrtP - feeInFeeUnits * currentSqrtP) + // overflow should not happen because the absPriceDiff is capped to ~5% + uint256 denominator = C.TWO_FEE_UNITS * targetSqrtP - feeInFeeUnits * currentSqrtP; + uint256 numerator = denominator - feeInFeeUnits * targetSqrtP; + numerator = FullMath.mulDivFloor(liquidity, numerator, denominator); + reachAmount = FullMath.mulDivFloor(numerator, absPriceDiff, C.TWO_POW_96).revToInt256(); + } + } + } + + /// @dev estimates deltaL, the swap fee to be collected based on amount specified + /// for the final swap step to be performed, + /// where the next (temporary) tick will not be crossed + function estimateIncrementalLiquidity( + uint256 absDelta, + uint256 liquidity, + uint160 currentSqrtP, + uint256 feeInFeeUnits, + bool isExactInput, + bool isToken0 + ) internal pure returns (uint256 deltaL) { + if (isExactInput) { + if (isToken0) { + // deltaL = feeInFeeUnits * absDelta * currentSqrtP / 2 + deltaL = FullMath.mulDivFloor( + currentSqrtP, + absDelta * feeInFeeUnits, + C.TWO_FEE_UNITS << C.RES_96 + ); + } else { + // deltaL = feeInFeeUnits * absDelta * / (currentSqrtP * 2) + // Because nextSqrtP = (liquidity + absDelta / currentSqrtP) * currentSqrtP / (liquidity + deltaL) + // so we round up deltaL, to round down nextSqrtP + deltaL = FullMath.mulDivFloor( + C.TWO_POW_96, + absDelta * feeInFeeUnits, + C.TWO_FEE_UNITS * currentSqrtP + ); + } + } else { + // obtain the smaller root of the quadratic equation + // ax^2 - 2bx + c = 0 such that b > 0, and x denotes deltaL + uint256 a = feeInFeeUnits; + uint256 b = (C.FEE_UNITS - feeInFeeUnits) * liquidity; + uint256 c = feeInFeeUnits * liquidity * absDelta; + if (isToken0) { + // a = feeInFeeUnits + // b = (FEE_UNITS - feeInFeeUnits) * liquidity - FEE_UNITS * absDelta * currentSqrtP + // c = feeInFeeUnits * liquidity * absDelta * currentSqrtP + b -= FullMath.mulDivFloor(C.FEE_UNITS * absDelta, currentSqrtP, C.TWO_POW_96); + c = FullMath.mulDivFloor(c, currentSqrtP, C.TWO_POW_96); + } else { + // a = feeInFeeUnits + // b = (FEE_UNITS - feeInFeeUnits) * liquidity - FEE_UNITS * absDelta / currentSqrtP + // c = liquidity * feeInFeeUnits * absDelta / currentSqrtP + b -= FullMath.mulDivFloor(C.FEE_UNITS * absDelta, C.TWO_POW_96, currentSqrtP); + c = FullMath.mulDivFloor(c, C.TWO_POW_96, currentSqrtP); + } + deltaL = QuadMath.getSmallerRootOfQuadEqn(a, b, c); + } + } + + /// @dev calculates deltaL, the swap fee to be collected for an intermediate swap step, + /// where the next (temporary) tick will be crossed + function calcIncrementalLiquidity( + uint256 absDelta, + uint256 liquidity, + uint160 currentSqrtP, + uint160 nextSqrtP, + bool isExactInput, + bool isToken0 + ) internal pure returns (uint256 deltaL) { + if (isToken0) { + // deltaL = nextSqrtP * (liquidity / currentSqrtP +/- absDelta)) - liquidity + // needs to be minimum + uint256 tmp1 = FullMath.mulDivFloor(liquidity, C.TWO_POW_96, currentSqrtP); + uint256 tmp2 = isExactInput ? tmp1 + absDelta : tmp1 - absDelta; + uint256 tmp3 = FullMath.mulDivFloor(nextSqrtP, tmp2, C.TWO_POW_96); + // in edge cases where liquidity or absDelta is small + // liquidity might be greater than nextSqrtP * ((liquidity / currentSqrtP) +/- absDelta)) + // due to rounding + deltaL = (tmp3 > liquidity) ? tmp3 - liquidity : 0; + } else { + // deltaL = (liquidity * currentSqrtP +/- absDelta) / nextSqrtP - liquidity + // needs to be minimum + uint256 tmp1 = FullMath.mulDivFloor(liquidity, currentSqrtP, C.TWO_POW_96); + uint256 tmp2 = isExactInput ? tmp1 + absDelta : tmp1 - absDelta; + uint256 tmp3 = FullMath.mulDivFloor(tmp2, C.TWO_POW_96, nextSqrtP); + // in edge cases where liquidity or absDelta is small + // liquidity might be greater than nextSqrtP * ((liquidity / currentSqrtP) +/- absDelta)) + // due to rounding + deltaL = (tmp3 > liquidity) ? tmp3 - liquidity : 0; + } + } + + /// @dev calculates the sqrt price of the final swap step + /// where the next (temporary) tick will not be crossed + function calcFinalPrice( + uint256 absDelta, + uint256 liquidity, + uint256 deltaL, + uint160 currentSqrtP, + bool isExactInput, + bool isToken0 + ) internal pure returns (uint256) { + if (isToken0) { + // if isExactInput: swap 0 -> 1, sqrtP decreases, we round up + // else swap: 1 -> 0, sqrtP increases, we round down + uint256 tmp = FullMath.mulDivFloor(absDelta, currentSqrtP, C.TWO_POW_96); + if (isExactInput) { + return FullMath.mulDivCeiling(liquidity + deltaL, currentSqrtP, liquidity + tmp); + } else { + return FullMath.mulDivFloor(liquidity + deltaL, currentSqrtP, liquidity - tmp); + } + } else { + // if isExactInput: swap 1 -> 0, sqrtP increases, we round down + // else swap: 0 -> 1, sqrtP decreases, we round up + uint256 tmp = FullMath.mulDivFloor(absDelta, C.TWO_POW_96, currentSqrtP); + if (isExactInput) { + return FullMath.mulDivFloor(liquidity + tmp, currentSqrtP, liquidity + deltaL); + } else { + return FullMath.mulDivCeiling(liquidity - tmp, currentSqrtP, liquidity + deltaL); + } + } + } + + /// @dev calculates returned output | input tokens in exchange for specified amount + /// @dev round down when calculating returned output (isExactInput) so we avoid sending too much + /// @dev round up when calculating returned input (!isExactInput) so we get desired output amount + function calcReturnedAmount( + uint256 liquidity, + uint160 currentSqrtP, + uint160 nextSqrtP, + uint256 deltaL, + bool isExactInput, + bool isToken0 + ) internal pure returns (int256 returnedAmount) { + if (isToken0) { + if (isExactInput) { + // minimise actual output (<0, make less negative) so we avoid sending too much + // returnedAmount = deltaL * nextSqrtP - liquidity * (currentSqrtP - nextSqrtP) + returnedAmount = + FullMath.mulDivCeiling(deltaL, nextSqrtP, C.TWO_POW_96).toInt256() + + FullMath.mulDivFloor(liquidity, currentSqrtP - nextSqrtP, C.TWO_POW_96).revToInt256(); + } else { + // maximise actual input (>0) so we get desired output amount + // returnedAmount = deltaL * nextSqrtP + liquidity * (nextSqrtP - currentSqrtP) + returnedAmount = + FullMath.mulDivCeiling(deltaL, nextSqrtP, C.TWO_POW_96).toInt256() + + FullMath.mulDivCeiling(liquidity, nextSqrtP - currentSqrtP, C.TWO_POW_96).toInt256(); + } + } else { + // returnedAmount = (liquidity + deltaL)/nextSqrtP - (liquidity)/currentSqrtP + // if exactInput, minimise actual output (<0, make less negative) so we avoid sending too much + // if exactOutput, maximise actual input (>0) so we get desired output amount + returnedAmount = + FullMath.mulDivCeiling(liquidity + deltaL, C.TWO_POW_96, nextSqrtP).toInt256() + + FullMath.mulDivFloor(liquidity, C.TWO_POW_96, currentSqrtP).revToInt256(); + } + + if (isExactInput && returnedAmount == 1) { + // rounding make returnedAmount == 1 + returnedAmount = 0; + } + } +} diff --git a/src/hardhat/contracts/Misc_AMOs/kyberswap_v2/libraries/TickMath.sol b/src/hardhat/contracts/Misc_AMOs/kyberswap_v2/libraries/TickMath.sol new file mode 100644 index 00000000..e0391a42 --- /dev/null +++ b/src/hardhat/contracts/Misc_AMOs/kyberswap_v2/libraries/TickMath.sol @@ -0,0 +1,219 @@ +// SPDX-License-Identifier: GPL-2.0-or-later +pragma solidity >=0.8.0; + +/// @title Math library for computing sqrt prices from ticks and vice versa +/// @notice Computes sqrt price for ticks of size 1.0001, i.e. sqrt(1.0001^tick) as fixed point Q64.96 numbers. Supports +/// prices between 2**-128 and 2**128 +library TickMath { + /// @dev The minimum tick that may be passed to #getSqrtRatioAtTick computed from log base 1.0001 of 2**-128 + int24 internal constant MIN_TICK = -887272; + /// @dev The maximum tick that may be passed to #getSqrtRatioAtTick computed from log base 1.0001 of 2**128 + int24 internal constant MAX_TICK = -MIN_TICK; + + /// @dev The minimum value that can be returned from #getSqrtRatioAtTick. Equivalent to getSqrtRatioAtTick(MIN_TICK) + uint160 internal constant MIN_SQRT_RATIO = 4295128739; + /// @dev The maximum value that can be returned from #getSqrtRatioAtTick. Equivalent to getSqrtRatioAtTick(MAX_TICK) + uint160 internal constant MAX_SQRT_RATIO = 1461446703485210103287273052203988822378723970342; + + /// @notice Calculates sqrt(1.0001^tick) * 2^96 + /// @dev Throws if |tick| > max tick + /// @param tick The input tick for the above formula + /// @return sqrtP A Fixed point Q64.96 number representing the sqrt of the ratio of the two assets (token1/token0) + /// at the given tick + function getSqrtRatioAtTick(int24 tick) internal pure returns (uint160 sqrtP) { + unchecked { + uint256 absTick = uint256(tick < 0 ? -int256(tick) : int256(tick)); + require(absTick <= uint256(int256(MAX_TICK)), 'T'); + + // do bitwise comparison, if i-th bit is turned on, + // multiply ratio by hardcoded values of sqrt(1.0001^-(2^i)) * 2^128 + // where 0 <= i <= 19 + uint256 ratio = (absTick & 0x1 != 0) + ? 0xfffcb933bd6fad37aa2d162d1a594001 + : 0x100000000000000000000000000000000; + if (absTick & 0x2 != 0) ratio = (ratio * 0xfff97272373d413259a46990580e213a) >> 128; + if (absTick & 0x4 != 0) ratio = (ratio * 0xfff2e50f5f656932ef12357cf3c7fdcc) >> 128; + if (absTick & 0x8 != 0) ratio = (ratio * 0xffe5caca7e10e4e61c3624eaa0941cd0) >> 128; + if (absTick & 0x10 != 0) ratio = (ratio * 0xffcb9843d60f6159c9db58835c926644) >> 128; + if (absTick & 0x20 != 0) ratio = (ratio * 0xff973b41fa98c081472e6896dfb254c0) >> 128; + if (absTick & 0x40 != 0) ratio = (ratio * 0xff2ea16466c96a3843ec78b326b52861) >> 128; + if (absTick & 0x80 != 0) ratio = (ratio * 0xfe5dee046a99a2a811c461f1969c3053) >> 128; + if (absTick & 0x100 != 0) ratio = (ratio * 0xfcbe86c7900a88aedcffc83b479aa3a4) >> 128; + if (absTick & 0x200 != 0) ratio = (ratio * 0xf987a7253ac413176f2b074cf7815e54) >> 128; + if (absTick & 0x400 != 0) ratio = (ratio * 0xf3392b0822b70005940c7a398e4b70f3) >> 128; + if (absTick & 0x800 != 0) ratio = (ratio * 0xe7159475a2c29b7443b29c7fa6e889d9) >> 128; + if (absTick & 0x1000 != 0) ratio = (ratio * 0xd097f3bdfd2022b8845ad8f792aa5825) >> 128; + if (absTick & 0x2000 != 0) ratio = (ratio * 0xa9f746462d870fdf8a65dc1f90e061e5) >> 128; + if (absTick & 0x4000 != 0) ratio = (ratio * 0x70d869a156d2a1b890bb3df62baf32f7) >> 128; + if (absTick & 0x8000 != 0) ratio = (ratio * 0x31be135f97d08fd981231505542fcfa6) >> 128; + if (absTick & 0x10000 != 0) ratio = (ratio * 0x9aa508b5b7a84e1c677de54f3e99bc9) >> 128; + if (absTick & 0x20000 != 0) ratio = (ratio * 0x5d6af8dedb81196699c329225ee604) >> 128; + if (absTick & 0x40000 != 0) ratio = (ratio * 0x2216e584f5fa1ea926041bedfe98) >> 128; + if (absTick & 0x80000 != 0) ratio = (ratio * 0x48a170391f7dc42444e8fa2) >> 128; + + // take reciprocal for positive tick values + if (tick > 0) ratio = type(uint256).max / ratio; + + // this divides by 1<<32 rounding up to go from a Q128.128 to a Q128.96. + // we then downcast because we know the result always fits within 160 bits due to our tick input constraint + // we round up in the division so getTickAtSqrtRatio of the output price is always consistent + sqrtP = uint160((ratio >> 32) + (ratio % (1 << 32) == 0 ? 0 : 1)); + } + } + + /// @notice Calculates the greatest tick value such that getRatioAtTick(tick) <= ratio + /// @dev Throws in case sqrtP < MIN_SQRT_RATIO, as MIN_SQRT_RATIO is the lowest value getRatioAtTick may + /// ever return. + /// @param sqrtP The sqrt ratio for which to compute the tick as a Q64.96 + /// @return tick The greatest tick for which the ratio is less than or equal to the input ratio + function getTickAtSqrtRatio(uint160 sqrtP) internal pure returns (int24 tick) { + // second inequality must be < because the price can never reach the price at the max tick + require(sqrtP >= MIN_SQRT_RATIO && sqrtP < MAX_SQRT_RATIO, 'R'); + uint256 ratio = uint256(sqrtP) << 32; + + uint256 r = ratio; + uint256 msb = 0; + + unchecked { + assembly { + let f := shl(7, gt(r, 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF)) + msb := or(msb, f) + r := shr(f, r) + } + assembly { + let f := shl(6, gt(r, 0xFFFFFFFFFFFFFFFF)) + msb := or(msb, f) + r := shr(f, r) + } + assembly { + let f := shl(5, gt(r, 0xFFFFFFFF)) + msb := or(msb, f) + r := shr(f, r) + } + assembly { + let f := shl(4, gt(r, 0xFFFF)) + msb := or(msb, f) + r := shr(f, r) + } + assembly { + let f := shl(3, gt(r, 0xFF)) + msb := or(msb, f) + r := shr(f, r) + } + assembly { + let f := shl(2, gt(r, 0xF)) + msb := or(msb, f) + r := shr(f, r) + } + assembly { + let f := shl(1, gt(r, 0x3)) + msb := or(msb, f) + r := shr(f, r) + } + assembly { + let f := gt(r, 0x1) + msb := or(msb, f) + } + + if (msb >= 128) r = ratio >> (msb - 127); + else r = ratio << (127 - msb); + + int256 log_2 = (int256(msb) - 128) << 64; + + assembly { + r := shr(127, mul(r, r)) + let f := shr(128, r) + log_2 := or(log_2, shl(63, f)) + r := shr(f, r) + } + assembly { + r := shr(127, mul(r, r)) + let f := shr(128, r) + log_2 := or(log_2, shl(62, f)) + r := shr(f, r) + } + assembly { + r := shr(127, mul(r, r)) + let f := shr(128, r) + log_2 := or(log_2, shl(61, f)) + r := shr(f, r) + } + assembly { + r := shr(127, mul(r, r)) + let f := shr(128, r) + log_2 := or(log_2, shl(60, f)) + r := shr(f, r) + } + assembly { + r := shr(127, mul(r, r)) + let f := shr(128, r) + log_2 := or(log_2, shl(59, f)) + r := shr(f, r) + } + assembly { + r := shr(127, mul(r, r)) + let f := shr(128, r) + log_2 := or(log_2, shl(58, f)) + r := shr(f, r) + } + assembly { + r := shr(127, mul(r, r)) + let f := shr(128, r) + log_2 := or(log_2, shl(57, f)) + r := shr(f, r) + } + assembly { + r := shr(127, mul(r, r)) + let f := shr(128, r) + log_2 := or(log_2, shl(56, f)) + r := shr(f, r) + } + assembly { + r := shr(127, mul(r, r)) + let f := shr(128, r) + log_2 := or(log_2, shl(55, f)) + r := shr(f, r) + } + assembly { + r := shr(127, mul(r, r)) + let f := shr(128, r) + log_2 := or(log_2, shl(54, f)) + r := shr(f, r) + } + assembly { + r := shr(127, mul(r, r)) + let f := shr(128, r) + log_2 := or(log_2, shl(53, f)) + r := shr(f, r) + } + assembly { + r := shr(127, mul(r, r)) + let f := shr(128, r) + log_2 := or(log_2, shl(52, f)) + r := shr(f, r) + } + assembly { + r := shr(127, mul(r, r)) + let f := shr(128, r) + log_2 := or(log_2, shl(51, f)) + r := shr(f, r) + } + assembly { + r := shr(127, mul(r, r)) + let f := shr(128, r) + log_2 := or(log_2, shl(50, f)) + } + + int256 log_sqrt10001 = log_2 * 255738958999603826347141; // 128.128 number + + int24 tickLow = int24((log_sqrt10001 - 3402992956809132418596140100660247210) >> 128); + int24 tickHi = int24((log_sqrt10001 + 291339464771989622907027621153398088495) >> 128); + + tick = tickLow == tickHi ? tickLow : getSqrtRatioAtTick(tickHi) <= sqrtP ? tickHi : tickLow; + } + } + + function getMaxNumberTicks(int24 _tickDistance) internal pure returns (uint24 numTicks) { + return uint24(TickMath.MAX_TICK / _tickDistance) * 2; + } +} diff --git a/src/hardhat/contracts/Misc_AMOs/kyberswap_v2/oracle/IPoolOracle.sol b/src/hardhat/contracts/Misc_AMOs/kyberswap_v2/oracle/IPoolOracle.sol new file mode 100644 index 00000000..e243b952 --- /dev/null +++ b/src/hardhat/contracts/Misc_AMOs/kyberswap_v2/oracle/IPoolOracle.sol @@ -0,0 +1,107 @@ +// SPDX-License-Identifier: MIT +pragma solidity >=0.8.0; + +interface IPoolOracle { + /// @notice Owner withdrew funds in the pool oracle in case some funds are stuck there + event OwnerWithdrew( + address indexed owner, + address indexed token, + uint256 indexed amount + ); + + /// @notice Emitted by the Pool Oracle for increases to the number of observations that can be stored + /// @dev observationCardinalityNext is not the observation cardinality until an observation is written at the index + /// just before a mint/swap/burn. + /// @param pool The pool address to update + /// @param observationCardinalityNextOld The previous value of the next observation cardinality + /// @param observationCardinalityNextNew The updated value of the next observation cardinality + event IncreaseObservationCardinalityNext( + address pool, + uint16 observationCardinalityNextOld, + uint16 observationCardinalityNextNew + ); + + /// @notice Initalize observation data for the caller. + function initializeOracle(uint32 time) + external + returns (uint16 cardinality, uint16 cardinalityNext); + + /// @notice Write a new oracle entry into the array + /// and update the observation index and cardinality + /// Read the Oralce.write function for more details + function writeNewEntry( + uint16 index, + uint32 blockTimestamp, + int24 tick, + uint128 liquidity, + uint16 cardinality, + uint16 cardinalityNext + ) + external + returns (uint16 indexUpdated, uint16 cardinalityUpdated); + + /// @notice Write a new oracle entry into the array, take the latest observaion data as inputs + /// and update the observation index and cardinality + /// Read the Oralce.write function for more details + function write( + uint32 blockTimestamp, + int24 tick, + uint128 liquidity + ) + external + returns (uint16 indexUpdated, uint16 cardinalityUpdated); + + /// @notice Increase the maximum number of price observations that this pool will store + /// @dev This method is no-op if the pool already has an observationCardinalityNext greater than or equal to + /// the input observationCardinalityNext. + /// @param pool The pool address to be updated + /// @param observationCardinalityNext The desired minimum number of observations for the pool to store + function increaseObservationCardinalityNext( + address pool, + uint16 observationCardinalityNext + ) + external; + + /// @notice Returns the accumulator values as of each time seconds ago from the latest block time in the array of `secondsAgos` + /// @dev Reverts if `secondsAgos` > oldest observation + /// @dev It fetches the latest current tick data from the pool + /// Read the Oracle.observe function for more details + function observeFromPool( + address pool, + uint32[] memory secondsAgos + ) + external view + returns (int56[] memory tickCumulatives); + + /// @notice Returns the accumulator values as the time seconds ago from the latest block time of secondsAgo + /// @dev Reverts if `secondsAgo` > oldest observation + /// @dev It fetches the latest current tick data from the pool + /// Read the Oracle.observeSingle function for more details + function observeSingleFromPool( + address pool, + uint32 secondsAgo + ) + external view + returns (int56 tickCumulative); + + /// @notice Return the latest pool observation data given the pool address + function getPoolObservation(address pool) + external view + returns (bool initialized, uint16 index, uint16 cardinality, uint16 cardinalityNext); + + /// @notice Returns data about a specific observation index + /// @param pool The pool address of the observations array to fetch + /// @param index The element of the observations array to fetch + /// @dev You most likely want to use #observe() instead of this method to get an observation as of some amount of time + /// ago, rather than at a specific index in the array. + /// @return blockTimestamp The timestamp of the observation, + /// Returns tickCumulative the tick multiplied by seconds elapsed for the life of the pool as of the observation timestamp, + /// Returns initialized whether the observation has been initialized and the values are safe to use + function getObservationAt(address pool, uint256 index) + external view + returns ( + uint32 blockTimestamp, + int56 tickCumulative, + bool initialized + ); +} diff --git a/src/hardhat/contracts/Misc_AMOs/kyberswap_v2/periphery/IBasePositionManager.sol b/src/hardhat/contracts/Misc_AMOs/kyberswap_v2/periphery/IBasePositionManager.sol new file mode 100644 index 00000000..7c42622a --- /dev/null +++ b/src/hardhat/contracts/Misc_AMOs/kyberswap_v2/periphery/IBasePositionManager.sol @@ -0,0 +1,189 @@ +// SPDX-License-Identifier: GPL-2.0-or-later +pragma solidity >=0.8.0; + +import {IERC721Metadata} from '@openzeppelin/contracts/token/ERC721/extensions/IERC721Metadata.sol'; +import {IRouterTokenHelper} from './IRouterTokenHelper.sol'; +import {IBasePositionManagerEvents} from './base_position_manager/IBasePositionManagerEvents.sol'; +import {IERC721Permit} from './IERC721Permit.sol'; + +interface IBasePositionManager is IRouterTokenHelper, IBasePositionManagerEvents { + struct Position { + // the nonce for permits + uint96 nonce; + // the address that is approved for spending this token + address operator; + // the ID of the pool with which this token is connected + uint80 poolId; + // the tick range of the position + int24 tickLower; + int24 tickUpper; + // the liquidity of the position + uint128 liquidity; + // the current rToken that the position owed + uint256 rTokenOwed; + // fee growth per unit of liquidity as of the last update to liquidity + uint256 feeGrowthInsideLast; + } + + struct PoolInfo { + address token0; + uint24 fee; + address token1; + } + + /// @notice Params for the first time adding liquidity, mint new nft to sender + /// @param token0 the token0 of the pool + /// @param token1 the token1 of the pool + /// - must make sure that token0 < token1 + /// @param fee the pool's fee in fee units + /// @param tickLower the position's lower tick + /// @param tickUpper the position's upper tick + /// - must make sure tickLower < tickUpper, and both are in tick distance + /// @param ticksPrevious the nearest tick that has been initialized and lower than or equal to + /// the tickLower and tickUpper, use to help insert the tickLower and tickUpper if haven't initialized + /// @param amount0Desired the desired amount for token0 + /// @param amount1Desired the desired amount for token1 + /// @param amount0Min min amount of token 0 to add + /// @param amount1Min min amount of token 1 to add + /// @param recipient the owner of the position + /// @param deadline time that the transaction will be expired + struct MintParams { + address token0; + address token1; + uint24 fee; + int24 tickLower; + int24 tickUpper; + int24[2] ticksPrevious; + uint256 amount0Desired; + uint256 amount1Desired; + uint256 amount0Min; + uint256 amount1Min; + address recipient; + uint256 deadline; + } + + /// @notice Params for adding liquidity to the existing position + /// @param tokenId id of the position to increase its liquidity + /// @param ticksPrevious the nearest tick that has been initialized and lower than or equal to + /// the tickLower and tickUpper, use to help insert the tickLower and tickUpper if haven't initialized + /// only needed if the position has been closed and the owner wants to add more liquidity + /// @param amount0Desired the desired amount for token0 + /// @param amount1Desired the desired amount for token1 + /// @param amount0Min min amount of token 0 to add + /// @param amount1Min min amount of token 1 to add + /// @param deadline time that the transaction will be expired + struct IncreaseLiquidityParams { + uint256 tokenId; + int24[2] ticksPrevious; + uint256 amount0Desired; + uint256 amount1Desired; + uint256 amount0Min; + uint256 amount1Min; + uint256 deadline; + } + + /// @notice Params for remove liquidity from the existing position + /// @param tokenId id of the position to remove its liquidity + /// @param amount0Min min amount of token 0 to receive + /// @param amount1Min min amount of token 1 to receive + /// @param deadline time that the transaction will be expired + struct RemoveLiquidityParams { + uint256 tokenId; + uint128 liquidity; + uint256 amount0Min; + uint256 amount1Min; + uint256 deadline; + } + + /// @notice Burn the rTokens to get back token0 + token1 as fees + /// @param tokenId id of the position to burn r token + /// @param amount0Min min amount of token 0 to receive + /// @param amount1Min min amount of token 1 to receive + /// @param deadline time that the transaction will be expired + struct BurnRTokenParams { + uint256 tokenId; + uint256 amount0Min; + uint256 amount1Min; + uint256 deadline; + } + + /// @notice Creates a new pool if it does not exist, then unlocks if it has not been unlocked + /// @param token0 the token0 of the pool + /// @param token1 the token1 of the pool + /// @param fee the fee for the pool + /// @param currentSqrtP the initial price of the pool + /// @return pool returns the pool address + function createAndUnlockPoolIfNecessary( + address token0, + address token1, + uint24 fee, + uint160 currentSqrtP + ) external payable returns (address pool); + + function mint(MintParams calldata params) + external + payable + returns ( + uint256 tokenId, + uint128 liquidity, + uint256 amount0, + uint256 amount1 + ); + + function addLiquidity(IncreaseLiquidityParams calldata params) + external + payable + returns ( + uint128 liquidity, + uint256 amount0, + uint256 amount1, + uint256 additionalRTokenOwed + ); + + function removeLiquidity(RemoveLiquidityParams calldata params) + external + returns ( + uint256 amount0, + uint256 amount1, + uint256 additionalRTokenOwed + ); + + function burnRTokens(BurnRTokenParams calldata params) + external + returns ( + uint256 rTokenQty, + uint256 amount0, + uint256 amount1 + ); + + /** + * @dev Burn the token by its owner + * @notice All liquidity should be removed before burning + */ + function burn(uint256 tokenId) external payable; + + function syncFeeGrowth(uint256 tokenId) external returns (uint256 additionalRTokenOwed); + + function positions(uint256 tokenId) + external + view + returns (Position memory pos, PoolInfo memory info); + + function addressToPoolId(address pool) external view returns (uint80); + + function isRToken(address token) external view returns (bool); + + function nextPoolId() external view returns (uint80); + + function nextTokenId() external view returns (uint256); + + /** + * @dev Returns true if this contract implements the interface defined by + * `interfaceId`. See the corresponding + * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section] + * to learn more about how these ids are created. + * + * This function call must use less than 30 000 gas. + */ + function supportsInterface(bytes4 interfaceId) external view returns (bool); +} diff --git a/src/hardhat/contracts/Misc_AMOs/kyberswap_v2/periphery/IERC721Permit.sol b/src/hardhat/contracts/Misc_AMOs/kyberswap_v2/periphery/IERC721Permit.sol new file mode 100644 index 00000000..9d6d7914 --- /dev/null +++ b/src/hardhat/contracts/Misc_AMOs/kyberswap_v2/periphery/IERC721Permit.sol @@ -0,0 +1,43 @@ +// SPDX-License-Identifier: GPL-2.0-or-later +pragma solidity >=0.8.0; + +import {IERC721} from '@openzeppelin/contracts/token/ERC721/IERC721.sol'; +import {IERC721Enumerable} from '@openzeppelin/contracts/token/ERC721/extensions/IERC721Enumerable.sol'; + +/// @title ERC721 with permit +/// @notice Extension to ERC721 that includes a permit function for signature based approvals +interface IERC721Permit is IERC721, IERC721Enumerable { + /// @notice The permit typehash used in the permit signature + /// @return The typehash for the permit + function PERMIT_TYPEHASH() external pure returns (bytes32); + + /// @notice The domain separator used in the permit signature + /// @return The domain seperator used in encoding of permit signature + function DOMAIN_SEPARATOR() external view returns (bytes32); + + /// @notice Approve of a specific token ID for spending by spender via signature + /// @param spender The account that is being approved + /// @param tokenId The ID of the token that is being approved for spending + /// @param deadline The deadline timestamp by which the call must be mined for the approve to work + /// @param v Must produce valid secp256k1 signature from the holder along with `r` and `s` + /// @param r Must produce valid secp256k1 signature from the holder along with `v` and `s` + /// @param s Must produce valid secp256k1 signature from the holder along with `r` and `v` + function permit( + address spender, + uint256 tokenId, + uint256 deadline, + uint8 v, + bytes32 r, + bytes32 s + ) external; + + /** + * @dev Returns true if this contract implements the interface defined by + * `interfaceId`. See the corresponding + * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section] + * to learn more about how these ids are created. + * + * This function call must use less than 30 000 gas. + */ + function supportsInterface(bytes4 interfaceId) external view returns (bool); +} diff --git a/src/hardhat/contracts/Misc_AMOs/kyberswap_v2/periphery/IMulticall.sol b/src/hardhat/contracts/Misc_AMOs/kyberswap_v2/periphery/IMulticall.sol new file mode 100644 index 00000000..23eaf8f4 --- /dev/null +++ b/src/hardhat/contracts/Misc_AMOs/kyberswap_v2/periphery/IMulticall.sol @@ -0,0 +1,13 @@ +// SPDX-License-Identifier: GPL-2.0-or-later +pragma solidity >=0.8.0; +pragma abicoder v2; + +/// @title Multicall interface +/// @notice Enables calling multiple methods in a single call to the contract +interface IMulticall { + /// @notice Call multiple functions in the current contract and return the data from all of them if they all succeed + /// @dev The `msg.value` should not be trusted for any method callable from multicall. + /// @param data The encoded function data for each of the calls to make to this contract + /// @return results The results from each of the calls passed in via data + function multicall(bytes[] calldata data) external payable returns (bytes[] memory results); +} diff --git a/src/hardhat/contracts/Misc_AMOs/kyberswap_v2/periphery/INonfungibleTokenPositionDescriptor.sol b/src/hardhat/contracts/Misc_AMOs/kyberswap_v2/periphery/INonfungibleTokenPositionDescriptor.sol new file mode 100644 index 00000000..1116e046 --- /dev/null +++ b/src/hardhat/contracts/Misc_AMOs/kyberswap_v2/periphery/INonfungibleTokenPositionDescriptor.sol @@ -0,0 +1,17 @@ +// SPDX-License-Identifier: GPL-2.0-or-later +pragma solidity >=0.8.0; + +import './IBasePositionManager.sol'; + +/// @title Describes position NFT tokens via URI +interface INonfungibleTokenPositionDescriptor { + /// @notice Produces the URI describing a particular token ID for a position manager + /// @dev Note this URI may be a data: URI with the JSON contents directly inlined + /// @param positionManager The position manager for which to describe the token + /// @param tokenId The ID of the token for which to produce a description, which may not be valid + /// @return The URI of the ERC721-compliant metadata + function tokenURI(IBasePositionManager positionManager, uint256 tokenId) + external + view + returns (string memory); +} diff --git a/src/hardhat/contracts/Misc_AMOs/kyberswap_v2/periphery/IQuoterV2.sol b/src/hardhat/contracts/Misc_AMOs/kyberswap_v2/periphery/IQuoterV2.sol new file mode 100644 index 00000000..2db950c2 --- /dev/null +++ b/src/hardhat/contracts/Misc_AMOs/kyberswap_v2/periphery/IQuoterV2.sol @@ -0,0 +1,88 @@ +// SPDX-License-Identifier: GPL-2.0-or-later +pragma solidity >=0.8.0; +pragma abicoder v2; + +/// @title QuoterV2 Interface +/// @notice Supports quoting the calculated amounts from exact input or exact output swaps. +/// @notice For each pool also tells you the number of initialized ticks crossed and the sqrt price of the pool after the swap. +/// @dev These functions are not marked view because they rely on calling non-view functions and reverting +/// to compute the result. They are also not gas efficient and should not be called on-chain. +interface IQuoterV2 { + struct QuoteOutput { + uint256 usedAmount; + uint256 returnedAmount; + uint160 afterSqrtP; + uint32 initializedTicksCrossed; + uint256 gasEstimate; + } + + /// @notice Returns the amount out received for a given exact input swap without executing the swap + /// @param path The path of the swap, i.e. each token pair and the pool fee + /// @param amountIn The amount of the first token to swap + /// @return amountOut The amount of the last token that would be received + /// @return afterSqrtPList List of the sqrt price after the swap for each pool in the path + /// @return initializedTicksCrossedList List of the initialized ticks that the swap crossed for each pool in the path + /// @return gasEstimate The estimate of the gas that the swap consumes + function quoteExactInput(bytes memory path, uint256 amountIn) + external + returns ( + uint256 amountOut, + uint160[] memory afterSqrtPList, + uint32[] memory initializedTicksCrossedList, + uint256 gasEstimate + ); + + struct QuoteExactInputSingleParams { + address tokenIn; + address tokenOut; + uint256 amountIn; + uint24 feeUnits; + uint160 limitSqrtP; + } + + /// @notice Returns the amount out received for a given exact input but for a swap of a single pool + /// @param params The params for the quote, encoded as `QuoteExactInputSingleParams` + /// tokenIn The token being swapped in + /// tokenOut The token being swapped out + /// fee The fee of the token pool to consider for the pair + /// amountIn The desired input amount + /// limitSqrtP The price limit of the pool that cannot be exceeded by the swap + function quoteExactInputSingle(QuoteExactInputSingleParams memory params) + external + returns (QuoteOutput memory); + + /// @notice Returns the amount in required for a given exact output swap without executing the swap + /// @param path The path of the swap, i.e. each token pair and the pool fee. Path must be provided in reverse order + /// @param amountOut The amount of the last token to receive + /// @return amountIn The amount of first token required to be paid + /// @return afterSqrtPList List of the sqrt price after the swap for each pool in the path + /// @return initializedTicksCrossedList List of the initialized ticks that the swap crossed for each pool in the path + /// @return gasEstimate The estimate of the gas that the swap consumes + function quoteExactOutput(bytes memory path, uint256 amountOut) + external + returns ( + uint256 amountIn, + uint160[] memory afterSqrtPList, + uint32[] memory initializedTicksCrossedList, + uint256 gasEstimate + ); + + struct QuoteExactOutputSingleParams { + address tokenIn; + address tokenOut; + uint256 amount; + uint24 feeUnits; + uint160 limitSqrtP; + } + + /// @notice Returns the amount in required to receive the given exact output amount but for a swap of a single pool + /// @param params The params for the quote, encoded as `QuoteExactOutputSingleParams` + /// tokenIn The token being swapped in + /// tokenOut The token being swapped out + /// fee The fee of the token pool to consider for the pair + /// amountOut The desired output amount + /// limitSqrtP The price limit of the pool that cannot be exceeded by the swap + function quoteExactOutputSingle(QuoteExactOutputSingleParams memory params) + external + returns (QuoteOutput memory); +} diff --git a/src/hardhat/contracts/Misc_AMOs/kyberswap_v2/periphery/IRouter.sol b/src/hardhat/contracts/Misc_AMOs/kyberswap_v2/periphery/IRouter.sol new file mode 100644 index 00000000..c5c8e251 --- /dev/null +++ b/src/hardhat/contracts/Misc_AMOs/kyberswap_v2/periphery/IRouter.sol @@ -0,0 +1,113 @@ +// SPDX-License-Identifier: GPL-2.0-or-later +pragma solidity >=0.8.0; +pragma abicoder v2; + +import '../callback/ISwapCallback.sol'; + +/// @notice Functions for swapping tokens via KyberSwap v2 +/// - Support swap with exact input or exact output +/// - Support swap with a price limit +/// - Support swap within a single pool and between multiple pools +interface IRouter is ISwapCallback { + /// @dev Params for swapping exact input amount + /// @param tokenIn the token to swap + /// @param tokenOut the token to receive + /// @param fee the pool's fee + /// @param recipient address to receive tokenOut + /// @param deadline time that the transaction will be expired + /// @param amountIn the tokenIn amount to swap + /// @param amountOutMinimum the minimum receive amount + /// @param limitSqrtP the price limit, if reached, stop swapping + struct ExactInputSingleParams { + address tokenIn; + address tokenOut; + uint24 fee; + address recipient; + uint256 deadline; + uint256 amountIn; + uint256 minAmountOut; + uint160 limitSqrtP; + } + + /// @notice Swaps `amountIn` of one token for as much as possible of another token + /// @param params The parameters necessary for the swap, encoded as `ExactInputSingleParams` in calldata + /// @return amountOut The amount of the received token + function swapExactInputSingle(ExactInputSingleParams calldata params) + external + payable + returns (uint256 amountOut); + + /// @dev Params for swapping exact input using multiple pools + /// @param path the encoded path to swap from tokenIn to tokenOut + /// If the swap is from token0 -> token1 -> token2, then path is encoded as [token0, fee01, token1, fee12, token2] + /// @param recipient address to receive tokenOut + /// @param deadline time that the transaction will be expired + /// @param amountIn the tokenIn amount to swap + /// @param amountOutMinimum the minimum receive amount + struct ExactInputParams { + bytes path; + address recipient; + uint256 deadline; + uint256 amountIn; + uint256 minAmountOut; + } + + /// @notice Swaps `amountIn` of one token for as much as possible of another along the specified path + /// @param params The parameters necessary for the multi-hop swap, encoded as `ExactInputParams` in calldata + /// @return amountOut The amount of the received token + function swapExactInput(ExactInputParams calldata params) + external + payable + returns (uint256 amountOut); + + /// @dev Params for swapping exact output amount + /// @param tokenIn the token to swap + /// @param tokenOut the token to receive + /// @param fee the pool's fee + /// @param recipient address to receive tokenOut + /// @param deadline time that the transaction will be expired + /// @param amountOut the tokenOut amount of tokenOut + /// @param amountInMaximum the minimum input amount + /// @param limitSqrtP the price limit, if reached, stop swapping + struct ExactOutputSingleParams { + address tokenIn; + address tokenOut; + uint24 fee; + address recipient; + uint256 deadline; + uint256 amountOut; + uint256 maxAmountIn; + uint160 limitSqrtP; + } + + /// @notice Swaps as little as possible of one token for `amountOut` of another token + /// @param params The parameters necessary for the swap, encoded as `ExactOutputSingleParams` in calldata + /// @return amountIn The amount of the input token + function swapExactOutputSingle(ExactOutputSingleParams calldata params) + external + payable + returns (uint256 amountIn); + + /// @dev Params for swapping exact output using multiple pools + /// @param path the encoded path to swap from tokenIn to tokenOut + /// If the swap is from token0 -> token1 -> token2, then path is encoded as [token2, fee12, token1, fee01, token0] + /// @param recipient address to receive tokenOut + /// @param deadline time that the transaction will be expired + /// @param amountOut the tokenOut amount of tokenOut + /// @param amountInMaximum the minimum input amount + struct ExactOutputParams { + bytes path; + address recipient; + uint256 deadline; + uint256 amountOut; + uint256 maxAmountIn; + } + + /// @notice Swaps as little as possible of one token for `amountOut` of another along the specified path (reversed) + /// @param params The parameters necessary for the multi-hop swap, encoded as `ExactOutputParams` in calldata + /// @return amountIn The amount of the input token + function swapExactOutput(ExactOutputParams calldata params) + external + payable + returns (uint256 amountIn); +} diff --git a/src/hardhat/contracts/Misc_AMOs/kyberswap_v2/periphery/IRouterTokenHelper.sol b/src/hardhat/contracts/Misc_AMOs/kyberswap_v2/periphery/IRouterTokenHelper.sol new file mode 100644 index 00000000..66832dec --- /dev/null +++ b/src/hardhat/contracts/Misc_AMOs/kyberswap_v2/periphery/IRouterTokenHelper.sol @@ -0,0 +1,26 @@ +// SPDX-License-Identifier: GPL-2.0-or-later +pragma solidity >=0.8.0; + +interface IRouterTokenHelper { + /// @notice Unwraps the contract's WETH balance and sends it to recipient as ETH. + /// @dev The minAmount parameter prevents malicious contracts from stealing WETH from users. + /// @param minAmount The minimum amount of WETH to unwrap + /// @param recipient The address receiving ETH + function unwrapWeth(uint256 minAmount, address recipient) external payable; + + /// @notice Refunds any ETH balance held by this contract to the `msg.sender` + /// @dev Useful for bundling with mint or increase liquidity that uses ether, or exact output swaps + /// that use ether for the input amount + function refundEth() external payable; + + /// @notice Transfers the full amount of a token held by this contract to recipient + /// @dev The minAmount parameter prevents malicious contracts from stealing the token from users + /// @param token The contract address of the token which will be transferred to `recipient` + /// @param minAmount The minimum amount of token required for a transfer + /// @param recipient The destination address of the token + function transferAllTokens( + address token, + uint256 minAmount, + address recipient + ) external payable; +} diff --git a/src/hardhat/contracts/Misc_AMOs/kyberswap_v2/periphery/IRouterTokenHelperWithFee.sol b/src/hardhat/contracts/Misc_AMOs/kyberswap_v2/periphery/IRouterTokenHelperWithFee.sol new file mode 100644 index 00000000..76874736 --- /dev/null +++ b/src/hardhat/contracts/Misc_AMOs/kyberswap_v2/periphery/IRouterTokenHelperWithFee.sol @@ -0,0 +1,27 @@ +// SPDX-License-Identifier: GPL-2.0-or-later +pragma solidity >=0.8.0; + +import './IRouterTokenHelper.sol'; + +interface IRouterTokenHelperWithFee is IRouterTokenHelper { + /// @notice Unwraps the contract's WETH balance and sends it to recipient as ETH, with a percentage between + /// 0 (exclusive), and 1 (inclusive) going to feeRecipient + /// @dev The minAmount parameter prevents malicious contracts from stealing WETH from users. + function unwrapWethWithFee( + uint256 minAmount, + address recipient, + uint256 feeUnits, + address feeRecipient + ) external payable; + + /// @notice Transfers the full amount of a token held by this contract to recipient, with a percentage between + /// 0 (exclusive) and 1 (inclusive) going to feeRecipient + /// @dev The minAmount parameter prevents malicious contracts from stealing the token from users + function transferAllTokensWithFee( + address token, + uint256 minAmount, + address recipient, + uint256 feeBips, + address feeRecipient + ) external payable; +} diff --git a/src/hardhat/contracts/Misc_AMOs/kyberswap_v2/periphery/base_position_manager/IBasePositionManagerEvents.sol b/src/hardhat/contracts/Misc_AMOs/kyberswap_v2/periphery/base_position_manager/IBasePositionManagerEvents.sol new file mode 100644 index 00000000..1331fec4 --- /dev/null +++ b/src/hardhat/contracts/Misc_AMOs/kyberswap_v2/periphery/base_position_manager/IBasePositionManagerEvents.sol @@ -0,0 +1,60 @@ +// SPDX-License-Identifier: MIT +pragma solidity >=0.8.0; + +interface IBasePositionManagerEvents { + /// @notice Emitted when a token is minted for a given position + /// @param tokenId the newly minted tokenId + /// @param poolId poolId of the token + /// @param liquidity liquidity minted to the position range + /// @param amount0 token0 quantity needed to mint the liquidity + /// @param amount1 token1 quantity needed to mint the liquidity + event MintPosition( + uint256 indexed tokenId, + uint80 indexed poolId, + uint128 liquidity, + uint256 amount0, + uint256 amount1 + ); + + /// @notice Emitted when a token is burned + /// @param tokenId id of the token + event BurnPosition(uint256 indexed tokenId); + + /// @notice Emitted when add liquidity + /// @param tokenId id of the token + /// @param liquidity the increase amount of liquidity + /// @param amount0 token0 quantity needed to increase liquidity + /// @param amount1 token1 quantity needed to increase liquidity + /// @param additionalRTokenOwed additional rToken earned + event AddLiquidity( + uint256 indexed tokenId, + uint128 liquidity, + uint256 amount0, + uint256 amount1, + uint256 additionalRTokenOwed + ); + + /// @notice Emitted when remove liquidity + /// @param tokenId id of the token + /// @param liquidity the decease amount of liquidity + /// @param amount0 token0 quantity returned when remove liquidity + /// @param amount1 token1 quantity returned when remove liquidity + /// @param additionalRTokenOwed additional rToken earned + event RemoveLiquidity( + uint256 indexed tokenId, + uint128 liquidity, + uint256 amount0, + uint256 amount1, + uint256 additionalRTokenOwed + ); + + /// @notice Emitted when burn position's RToken + /// @param tokenId id of the token + /// @param rTokenBurn amount of position's RToken burnt + event BurnRToken(uint256 indexed tokenId, uint256 rTokenBurn); + + /// @notice Emitted when sync fee growth + /// @param tokenId id of the token + /// @param additionalRTokenOwed additional rToken earned + event SyncFeeGrowth(uint256 indexed tokenId, uint256 additionalRTokenOwed); +} diff --git a/src/hardhat/contracts/Misc_AMOs/kyberswap_v2/pool/IPoolActions.sol b/src/hardhat/contracts/Misc_AMOs/kyberswap_v2/pool/IPoolActions.sol new file mode 100644 index 00000000..b2c246e4 --- /dev/null +++ b/src/hardhat/contracts/Misc_AMOs/kyberswap_v2/pool/IPoolActions.sol @@ -0,0 +1,116 @@ +// SPDX-License-Identifier: MIT +pragma solidity >=0.8.0; + +interface IPoolActions { + /// @notice Sets the initial price for the pool and seeds reinvestment liquidity + /// @dev Assumes the caller has sent the necessary token amounts + /// required for initializing reinvestment liquidity prior to calling this function + /// @param initialSqrtP the initial sqrt price of the pool + /// @param qty0 token0 quantity sent to and locked permanently in the pool + /// @param qty1 token1 quantity sent to and locked permanently in the pool + function unlockPool(uint160 initialSqrtP) external returns (uint256 qty0, uint256 qty1); + + /// @notice Adds liquidity for the specified recipient/tickLower/tickUpper position + /// @dev Any token0 or token1 owed for the liquidity provision have to be paid for when + /// the IMintCallback#mintCallback is called to this method's caller + /// The quantity of token0/token1 to be sent depends on + /// tickLower, tickUpper, the amount of liquidity, and the current price of the pool. + /// Also sends reinvestment tokens (fees) to the recipient for any fees collected + /// while the position is in range + /// Reinvestment tokens have to be burnt via #burnRTokens in exchange for token0 and token1 + /// @param recipient Address for which the added liquidity is credited to + /// @param tickLower Recipient position's lower tick + /// @param tickUpper Recipient position's upper tick + /// @param ticksPrevious The nearest tick that is initialized and <= the lower & upper ticks + /// @param qty Liquidity quantity to mint + /// @param data Data (if any) to be passed through to the callback + /// @return qty0 token0 quantity sent to the pool in exchange for the minted liquidity + /// @return qty1 token1 quantity sent to the pool in exchange for the minted liquidity + /// @return feeGrowthInside position's updated feeGrowthInside value + function mint( + address recipient, + int24 tickLower, + int24 tickUpper, + int24[2] calldata ticksPrevious, + uint128 qty, + bytes calldata data + ) + external + returns ( + uint256 qty0, + uint256 qty1, + uint256 feeGrowthInside + ); + + /// @notice Remove liquidity from the caller + /// Also sends reinvestment tokens (fees) to the caller for any fees collected + /// while the position is in range + /// Reinvestment tokens have to be burnt via #burnRTokens in exchange for token0 and token1 + /// @param tickLower Position's lower tick for which to burn liquidity + /// @param tickUpper Position's upper tick for which to burn liquidity + /// @param qty Liquidity quantity to burn + /// @return qty0 token0 quantity sent to the caller + /// @return qty1 token1 quantity sent to the caller + /// @return feeGrowthInside position's updated feeGrowthInside value + function burn( + int24 tickLower, + int24 tickUpper, + uint128 qty + ) + external + returns ( + uint256 qty0, + uint256 qty1, + uint256 feeGrowthInside + ); + + /// @notice Burns reinvestment tokens in exchange to receive the fees collected in token0 and token1 + /// @param qty Reinvestment token quantity to burn + /// @param isLogicalBurn true if burning rTokens without returning any token0/token1 + /// otherwise should transfer token0/token1 to sender + /// @return qty0 token0 quantity sent to the caller for burnt reinvestment tokens + /// @return qty1 token1 quantity sent to the caller for burnt reinvestment tokens + function burnRTokens(uint256 qty, bool isLogicalBurn) + external + returns (uint256 qty0, uint256 qty1); + + /// @notice Swap token0 -> token1, or vice versa + /// @dev This method's caller receives a callback in the form of ISwapCallback#swapCallback + /// @dev swaps will execute up to limitSqrtP or swapQty is fully used + /// @param recipient The address to receive the swap output + /// @param swapQty The swap quantity, which implicitly configures the swap as exact input (>0), or exact output (<0) + /// @param isToken0 Whether the swapQty is specified in token0 (true) or token1 (false) + /// @param limitSqrtP the limit of sqrt price after swapping + /// could be MAX_SQRT_RATIO-1 when swapping 1 -> 0 and MIN_SQRT_RATIO+1 when swapping 0 -> 1 for no limit swap + /// @param data Any data to be passed through to the callback + /// @return qty0 Exact token0 qty sent to recipient if < 0. Minimally received quantity if > 0. + /// @return qty1 Exact token1 qty sent to recipient if < 0. Minimally received quantity if > 0. + function swap( + address recipient, + int256 swapQty, + bool isToken0, + uint160 limitSqrtP, + bytes calldata data + ) external returns (int256 qty0, int256 qty1); + + /// @notice Receive token0 and/or token1 and pay it back, plus a fee, in the callback + /// @dev The caller of this method receives a callback in the form of IFlashCallback#flashCallback + /// @dev Fees collected are sent to the feeTo address if it is set in Factory + /// @param recipient The address which will receive the token0 and token1 quantities + /// @param qty0 token0 quantity to be loaned to the recipient + /// @param qty1 token1 quantity to be loaned to the recipient + /// @param data Any data to be passed through to the callback + function flash( + address recipient, + uint256 qty0, + uint256 qty1, + bytes calldata data + ) external; + + + /// @notice sync fee of position + /// @param tickLower Position's lower tick + /// @param tickUpper Position's upper tick + function tweakPosZeroLiq(int24 tickLower, int24 tickUpper) + external returns(uint256 feeGrowthInsideLast); +} diff --git a/src/hardhat/contracts/Misc_AMOs/kyberswap_v2/pool/IPoolEvents.sol b/src/hardhat/contracts/Misc_AMOs/kyberswap_v2/pool/IPoolEvents.sol new file mode 100644 index 00000000..0177e2a9 --- /dev/null +++ b/src/hardhat/contracts/Misc_AMOs/kyberswap_v2/pool/IPoolEvents.sol @@ -0,0 +1,87 @@ +// SPDX-License-Identifier: MIT +pragma solidity >=0.8.0; + +interface IPoolEvents { + /// @notice Emitted only once per pool when #initialize is first called + /// @dev Mint/Burn/Swap cannot be emitted by the pool before Initialize + /// @param sqrtP The initial price of the pool + /// @param tick The initial tick of the pool + event Initialize(uint160 sqrtP, int24 tick); + + /// @notice Emitted when liquidity is minted for a given position + /// @dev transfers reinvestment tokens for any collected fees earned by the position + /// @param sender address that minted the liquidity + /// @param owner address of owner of the position + /// @param tickLower position's lower tick + /// @param tickUpper position's upper tick + /// @param qty liquidity minted to the position range + /// @param qty0 token0 quantity needed to mint the liquidity + /// @param qty1 token1 quantity needed to mint the liquidity + event Mint( + address sender, + address indexed owner, + int24 indexed tickLower, + int24 indexed tickUpper, + uint128 qty, + uint256 qty0, + uint256 qty1 + ); + + /// @notice Emitted when a position's liquidity is removed + /// @dev transfers reinvestment tokens for any collected fees earned by the position + /// @param owner address of owner of the position + /// @param tickLower position's lower tick + /// @param tickUpper position's upper tick + /// @param qty liquidity removed + /// @param qty0 token0 quantity withdrawn from removal of liquidity + /// @param qty1 token1 quantity withdrawn from removal of liquidity + event Burn( + address indexed owner, + int24 indexed tickLower, + int24 indexed tickUpper, + uint128 qty, + uint256 qty0, + uint256 qty1 + ); + + /// @notice Emitted when reinvestment tokens are burnt + /// @param owner address which burnt the reinvestment tokens + /// @param qty reinvestment token quantity burnt + /// @param qty0 token0 quantity sent to owner for burning reinvestment tokens + /// @param qty1 token1 quantity sent to owner for burning reinvestment tokens + event BurnRTokens(address indexed owner, uint256 qty, uint256 qty0, uint256 qty1); + + /// @notice Emitted for swaps by the pool between token0 and token1 + /// @param sender Address that initiated the swap call, and that received the callback + /// @param recipient Address that received the swap output + /// @param deltaQty0 Change in pool's token0 balance + /// @param deltaQty1 Change in pool's token1 balance + /// @param sqrtP Pool's sqrt price after the swap + /// @param liquidity Pool's liquidity after the swap + /// @param currentTick Log base 1.0001 of pool's price after the swap + event Swap( + address indexed sender, + address indexed recipient, + int256 deltaQty0, + int256 deltaQty1, + uint160 sqrtP, + uint128 liquidity, + int24 currentTick + ); + + /// @notice Emitted by the pool for any flash loans of token0/token1 + /// @param sender The address that initiated the flash loan, and that received the callback + /// @param recipient The address that received the flash loan quantities + /// @param qty0 token0 quantity loaned to the recipient + /// @param qty1 token1 quantity loaned to the recipient + /// @param paid0 token0 quantity paid for the flash, which can exceed qty0 + fee + /// @param paid1 token1 quantity paid for the flash, which can exceed qty0 + fee + event Flash( + address indexed sender, + address indexed recipient, + uint256 qty0, + uint256 qty1, + uint256 paid0, + uint256 paid1 + ); +} diff --git a/src/hardhat/contracts/Misc_AMOs/kyberswap_v2/pool/IPoolStorage.sol b/src/hardhat/contracts/Misc_AMOs/kyberswap_v2/pool/IPoolStorage.sol new file mode 100644 index 00000000..e34d1593 --- /dev/null +++ b/src/hardhat/contracts/Misc_AMOs/kyberswap_v2/pool/IPoolStorage.sol @@ -0,0 +1,120 @@ +// SPDX-License-Identifier: MIT +pragma solidity >=0.8.0; + +import {IERC20} from '@openzeppelin/contracts/token/ERC20/IERC20.sol'; + +import {IFactory} from '../IFactory.sol'; +import {IPoolOracle} from '../oracle/IPoolOracle.sol'; + +interface IPoolStorage { + /// @notice The contract that deployed the pool, which must adhere to the IFactory interface + /// @return The contract address + function factory() external view returns (IFactory); + + /// @notice The oracle contract that stores necessary data for price oracle + /// @return The contract address + function poolOracle() external view returns (IPoolOracle); + + /// @notice The first of the two tokens of the pool, sorted by address + /// @return The token contract address + function token0() external view returns (IERC20); + + /// @notice The second of the two tokens of the pool, sorted by address + /// @return The token contract address + function token1() external view returns (IERC20); + + /// @notice The fee to be charged for a swap in basis points + /// @return The swap fee in basis points + function swapFeeUnits() external view returns (uint24); + + /// @notice The pool tick distance + /// @dev Ticks can only be initialized and used at multiples of this value + /// It remains an int24 to avoid casting even though it is >= 1. + /// e.g: a tickDistance of 5 means ticks can be initialized every 5th tick, i.e., ..., -10, -5, 0, 5, 10, ... + /// @return The tick distance + function tickDistance() external view returns (int24); + + /// @notice Maximum gross liquidity that an initialized tick can have + /// @dev This is to prevent overflow the pool's active base liquidity (uint128) + /// also prevents out-of-range liquidity from being used to prevent adding in-range liquidity to a pool + /// @return The max amount of liquidity per tick + function maxTickLiquidity() external view returns (uint128); + + /// @notice Look up information about a specific tick in the pool + /// @param tick The tick to look up + /// @return liquidityGross total liquidity amount from positions that uses this tick as a lower or upper tick + /// liquidityNet how much liquidity changes when the pool tick crosses above the tick + /// feeGrowthOutside the fee growth on the other side of the tick relative to the current tick + /// secondsPerLiquidityOutside the seconds per unit of liquidity spent on the other side of the tick relative to the current tick + function ticks(int24 tick) + external + view + returns ( + uint128 liquidityGross, + int128 liquidityNet, + uint256 feeGrowthOutside, + uint128 secondsPerLiquidityOutside + ); + + /// @notice Returns the previous and next initialized ticks of a specific tick + /// @dev If specified tick is uninitialized, the returned values are zero. + /// @param tick The tick to look up + function initializedTicks(int24 tick) external view returns (int24 previous, int24 next); + + /// @notice Returns the information about a position by the position's key + /// @return liquidity the liquidity quantity of the position + /// @return feeGrowthInsideLast fee growth inside the tick range as of the last mint / burn action performed + function getPositions( + address owner, + int24 tickLower, + int24 tickUpper + ) external view returns (uint128 liquidity, uint256 feeGrowthInsideLast); + + /// @notice Fetches the pool's prices, ticks and lock status + /// @return sqrtP sqrt of current price: sqrt(token1/token0) + /// @return currentTick pool's current tick + /// @return nearestCurrentTick pool's nearest initialized tick that is <= currentTick + /// @return locked true if pool is locked, false otherwise + function getPoolState() + external + view + returns ( + uint160 sqrtP, + int24 currentTick, + int24 nearestCurrentTick, + bool locked + ); + + /// @notice Fetches the pool's liquidity values + /// @return baseL pool's base liquidity without reinvest liqudity + /// @return reinvestL the liquidity is reinvested into the pool + /// @return reinvestLLast last cached value of reinvestL, used for calculating reinvestment token qty + function getLiquidityState() + external + view + returns ( + uint128 baseL, + uint128 reinvestL, + uint128 reinvestLLast + ); + + /// @return feeGrowthGlobal All-time fee growth per unit of liquidity of the pool + function getFeeGrowthGlobal() external view returns (uint256); + + /// @return secondsPerLiquidityGlobal All-time seconds per unit of liquidity of the pool + /// @return lastUpdateTime The timestamp in which secondsPerLiquidityGlobal was last updated + function getSecondsPerLiquidityData() + external + view + returns (uint128 secondsPerLiquidityGlobal, uint32 lastUpdateTime); + + /// @notice Calculates and returns the active time per unit of liquidity until current block.timestamp + /// @param tickLower The lower tick (of a position) + /// @param tickUpper The upper tick (of a position) + /// @return secondsPerLiquidityInside active time (multiplied by 2^96) + /// between the 2 ticks, per unit of liquidity. + function getSecondsPerLiquidityInside(int24 tickLower, int24 tickUpper) + external + view + returns (uint128 secondsPerLiquidityInside); +} diff --git a/src/hardhat/contracts/Oracle/ComboOracle_KyberSwapElasticV2.sol b/src/hardhat/contracts/Oracle/ComboOracle_KyberSwapElasticV2.sol new file mode 100755 index 00000000..daa8b9d0 --- /dev/null +++ b/src/hardhat/contracts/Oracle/ComboOracle_KyberSwapElasticV2.sol @@ -0,0 +1,324 @@ +// SPDX-License-Identifier: MIT +pragma solidity >=0.8.0; + +// ==================================================================== +// | ______ _______ | +// | / _____________ __ __ / ____(_____ ____ _____ ________ | +// | / /_ / ___/ __ `| |/_/ / /_ / / __ \/ __ `/ __ \/ ___/ _ \ | +// | / __/ / / / /_/ _> < / __/ / / / / / /_/ / / / / /__/ __/ | +// | /_/ /_/ \__,_/_/|_| /_/ /_/_/ /_/\__,_/_/ /_/\___/\___/ | +// | | +// ==================================================================== +// ================ ComboOracle_KyberSwapElasticV2 ================ +// ==================================================================== +// Aggregates KyberSwapElastic V2 NFTs (similar to UniV3) +// Unofficial repo: https://github.com/0xamogh/kyberswap_elastic + +// Frax Finance: https://github.com/FraxFinance + +// Primary Author(s) +// Travis Moore: https://github.com/FortisFortuna + +// Reviewer(s) / Contributor(s) +// Sam Kazemian: https://github.com/samkazemian + +import "./AggregatorV3Interface.sol"; +import "../ERC20/ERC20.sol"; +import "../Staking/Owned.sol"; + +// ComboOracle +import "../Oracle/ComboOracle.sol"; + +// KyberSwap Elastic (similar to UniV3) +import "../Misc_AMOs/kyberswap_v2/IFactory.sol"; +import { TickMath } from "../Misc_AMOs/kyberswap_v2/TickMath.sol"; +import { LiquidityAmounts } from "../Uniswap_V3/libraries/LiquidityAmounts.sol"; +import "../Misc_AMOs/kyberswap_v2/periphery/IBasePositionManager.sol"; +import "../Misc_AMOs/kyberswap_v2/IPool.sol"; +import "../Misc_AMOs/kyberswap_v2/periphery/IRouter.sol"; +import "../Misc_AMOs/kyberswap_v2/ITickFeesReader.sol"; + +contract ComboOracle_KyberSwapElasticV2 is Owned { + using SafeMath for uint256; + + /* ========== STATE VARIABLES ========== */ + + // Core addresses + address timelock_address; + + // Oracle info + ComboOracle public combo_oracle; + + // KyberSwap Elastic + IFactory public kyber_factory; + IBasePositionManager public kyber_positions_mgr; + IRouter public kyber_router; + ITickFeesReader public kyber_tick_fees_reader; + + // Precision + uint256 public PRECISE_PRICE_PRECISION = 1e18; + uint256 public PRICE_PRECISION = 1e6; + uint256 public PRICE_MISSING_MULTIPLIER = 1e12; + + /* ========== STRUCTS ========== */ + + // ------------ KyberSwap Elastic ------------ + + struct NFTBasicInfo { + address token0; + address token1; + uint24 fee; + int24 tickLower; + int24 tickUpper; + uint128 liquidity; + uint256 token0_decimals; + uint256 token1_decimals; + uint256 lowest_decimals; + } + + struct NFTValuationMiddleInputs { + uint160 sqrtPriceX96; + uint160 sqrtRatioAX96; + uint160 sqrtRatioBX96; + uint256 liq_pricing_divisor; + uint128 liq_in_with_divisor; + } + + struct NFTValueInfo { + uint256 token0_val_usd; + uint256 token1_val_usd; + uint256 total_value_usd; + string token0_symbol; + string token1_symbol; + uint256 usd_per_liq; + uint256 pool_tvl_usd; + } + + /* ========== CONSTRUCTOR ========== */ + + constructor ( + address _owner_address, + address[] memory _starting_addresses + ) Owned(_owner_address) { + // Oracle info + combo_oracle = ComboOracle(_starting_addresses[0]); + + // KyberSwap Elastic + // https://docs.kyberswap.com/contract/deployment + kyber_factory = IFactory(_starting_addresses[1]); + kyber_positions_mgr = IBasePositionManager(_starting_addresses[2]); + kyber_router = IRouter(_starting_addresses[3]); + kyber_tick_fees_reader = ITickFeesReader(_starting_addresses[4]); + } + + /* ========== MODIFIERS ========== */ + + modifier onlyByOwnGov() { + require(msg.sender == owner || msg.sender == timelock_address, "You are not an owner or the governance timelock"); + _; + } + + /* ========== VIEWS ========== */ + + function getNFTBasicInfo(uint256 token_id) public view returns (NFTBasicInfo memory) { + // Get the position information + ( + IBasePositionManager.Position memory pos, + IBasePositionManager.PoolInfo memory info + ) = kyber_positions_mgr.positions(token_id); + + // Get decimals + uint256 tkn0_dec = ERC20(info.token0).decimals(); + uint256 tkn1_dec = ERC20(info.token1).decimals(); + + return NFTBasicInfo( + info.token0, // [0] + info.token1, // [1] + info.fee, // [2] + pos.tickLower, // [3] + pos.tickUpper, // [4] + pos.liquidity, // [5] + tkn0_dec, // [6] + tkn1_dec, // [7] + (tkn0_dec < tkn1_dec) ? tkn0_dec : tkn1_dec // [8] + ); + } + + // Get stats about a particular NFT + function getNFTValuationMiddleInputs(uint256 token_id) public view returns (NFTValuationMiddleInputs memory midInputs) { + NFTBasicInfo memory lp_basic_info = getNFTBasicInfo(token_id); + + // Get pool price info + { + address pool_address = kyber_factory.getPool(lp_basic_info.token0, lp_basic_info.token1, lp_basic_info.fee); + IPool the_pool = IPool(pool_address); + (midInputs.sqrtPriceX96, , , ) = the_pool.getPoolState(); + } + + // Get the amount of each underlying token in each NFT + midInputs.sqrtRatioAX96 = TickMath.getSqrtRatioAtTick(lp_basic_info.tickLower); + midInputs.sqrtRatioBX96 = TickMath.getSqrtRatioAtTick(lp_basic_info.tickUpper); + + // Get amount of each token for 0.01% liquidity movement in each direction + // midInputs.liq_pricing_divisor = (10 ** lp_basic_info.lowest_decimals); + midInputs.liq_pricing_divisor = 10000; + midInputs.liq_in_with_divisor = uint128(lp_basic_info.liquidity / midInputs.liq_pricing_divisor); + + } + + // Get stats about a particular NFT + function getNFTValueInfo(uint256 token_id) public view returns (NFTValueInfo memory nftvi) { + NFTBasicInfo memory lp_basic_info = getNFTBasicInfo(token_id); + + // Get pool price info + uint160 sqrtPriceX96; + address pool_address; + { + pool_address = kyber_factory.getPool(lp_basic_info.token0, lp_basic_info.token1, lp_basic_info.fee); + IPool the_pool = IPool(pool_address); + (sqrtPriceX96, , , ) = the_pool.getPoolState(); + } + require((sqrtPriceX96) > 0, "getPoolState sqrtPriceX96 is 0"); + + // Tick math + { + // Get the amount of each underlying token in each NFT + uint160 sqrtRatioAX96 = TickMath.getSqrtRatioAtTick(lp_basic_info.tickLower); + uint160 sqrtRatioBX96 = TickMath.getSqrtRatioAtTick(lp_basic_info.tickUpper); + + // Get amount of each token for 0.01% liquidity movement in each direction + // uint256 liq_pricing_divisor = (10 ** lp_basic_info.lowest_decimals); + uint256 liq_pricing_divisor = 10000; + (uint256 token0_1pm_amt, uint256 token1_1pm_amt) = LiquidityAmounts.getAmountsForLiquidity(sqrtPriceX96, sqrtRatioAX96, sqrtRatioBX96, uint128(lp_basic_info.liquidity / liq_pricing_divisor)); + require((token0_1pm_amt + token1_1pm_amt) > 0, "getAmountsForLiquidity was 0"); + + // Get missing decimals + uint256 token0_miss_dec_mult = 10 ** (uint(18) - lp_basic_info.token0_decimals); + uint256 token1_miss_dec_mult = 10 ** (uint(18) - lp_basic_info.token1_decimals); + + // Get token prices + // Will revert if ComboOracle doesn't have a price for both token0 and token1 + (uint256 token0_precise_price, , ) = combo_oracle.getTokenPrice(lp_basic_info.token0); + (uint256 token1_precise_price, , ) = combo_oracle.getTokenPrice(lp_basic_info.token1); + + // Get the value of each portion + // Multiply by liq_pricing_divisor as well + nftvi.token0_val_usd = (token0_1pm_amt * liq_pricing_divisor * token0_precise_price * token0_miss_dec_mult) / PRECISE_PRICE_PRECISION; + nftvi.token1_val_usd = (token1_1pm_amt * liq_pricing_divisor * token1_precise_price * token1_miss_dec_mult) / PRECISE_PRICE_PRECISION; + + // Get the pool TVL + nftvi.pool_tvl_usd = (ERC20(lp_basic_info.token0).balanceOf(pool_address) * token0_precise_price * token0_miss_dec_mult) / PRECISE_PRICE_PRECISION; + nftvi.pool_tvl_usd += (ERC20(lp_basic_info.token1).balanceOf(pool_address) * token1_precise_price * token1_miss_dec_mult) / PRECISE_PRICE_PRECISION; + } + + // Remaining values + nftvi.total_value_usd = (nftvi.token0_val_usd + nftvi.token1_val_usd); + nftvi.token0_symbol = ERC20(lp_basic_info.token0).symbol(); + nftvi.token1_symbol = ERC20(lp_basic_info.token1).symbol(); + nftvi.usd_per_liq = (nftvi.total_value_usd * PRECISE_PRICE_PRECISION) / uint256(lp_basic_info.liquidity); + + } + + function getFeeCollectionMulticallPayload( + uint256 token_id, + address tkn0_addr, + address tkn1_addr, + uint24 fee, + address dest_addr + ) external view returns (bytes[] memory multicall_payloads, uint256 tk0_owed, uint256 tk1_owed, bool has_rewards) { + address pool_address = kyber_factory.getPool(tkn0_addr, tkn1_addr, fee); + (tk0_owed, tk1_owed) = kyber_tick_fees_reader.getTotalFeesOwedToPosition(address(kyber_positions_mgr), pool_address, token_id); + + // Will return an empty payload array unless there is actually something to collect + has_rewards = ((tk0_owed + tk1_owed) > 0); + if (has_rewards) { + multicall_payloads = new bytes[](4); + multicall_payloads[0] = abi.encodeWithSignature( + "removeLiquidity(uint256,uint128,uint256,uint256,uint256)", + token_id, + 1, + 0, + 0, + 7289575165 // Year 2200 + ); + multicall_payloads[1] = abi.encodeWithSignature( + "burnRTokens(uint256,uint256,uint256,uint256)", + token_id, + 0, + 0, + 7289575165 // Year 2200 + ); + multicall_payloads[2] = abi.encodeWithSignature( + "transferAllTokens(address,uint256,address)", + tkn0_addr, + tk0_owed, + dest_addr + ); + multicall_payloads[3] = abi.encodeWithSignature( + "transferAllTokens(address,uint256,address)", + tkn1_addr, + tk1_owed, + dest_addr + ); + } + else { + multicall_payloads = new bytes[](0); + } + } + + function checkKyberElasticNFT(uint256 seed_nft_id, uint256 test_nft_id) external view returns (uint256 liquidity, int24 tick_lower, int24 tick_upper) { + // Get the seed NFT info + ( + IBasePositionManager.Position memory pos_seed, + IBasePositionManager.PoolInfo memory info_seed + ) = kyber_positions_mgr.positions(seed_nft_id); + + // Get the test NFT info + ( + IBasePositionManager.Position memory pos_test, + IBasePositionManager.PoolInfo memory info_test + ) = kyber_positions_mgr.positions(test_nft_id); + + // Set initially + liquidity = pos_test.liquidity; + + // Do the checks + if ( + (info_test.token0 == info_seed.token0) && + (info_test.token1 == info_seed.token1) && + (info_test.fee == info_seed.fee) && + (pos_test.tickLower == pos_seed.tickLower) && + (pos_test.tickUpper == pos_seed.tickUpper) + ) { + // Do nothing + } + else { + revert("Wrong token characteristics"); + } + return (liquidity, pos_test.tickLower, pos_test.tickUpper); + } + + + /* ========== RESTRICTED GOVERNANCE FUNCTIONS ========== */ + + function setTimelock(address _timelock_address) external onlyByOwnGov { + timelock_address = _timelock_address; + } + + function setComboOracle(address _combo_oracle) external onlyByOwnGov { + combo_oracle = ComboOracle(_combo_oracle); + } + + function setMiscAddrs( + address _factory, + address _positions_nft_manager, + address _router, + address _tick_fees_reader + ) external onlyByOwnGov { + // KyberSwap Elastic + kyber_factory = IFactory(_factory); + kyber_positions_mgr = IBasePositionManager(_positions_nft_manager); + kyber_router = IRouter(_router); + kyber_tick_fees_reader = ITickFeesReader(_tick_fees_reader); + } +} diff --git a/src/hardhat/contracts/Staking/FraxCrossChainFarmV3_ERC20.sol b/src/hardhat/contracts/Staking/FraxCrossChainFarmV3_ERC20.sol index 840b6bb6..aaced3b7 100755 --- a/src/hardhat/contracts/Staking/FraxCrossChainFarmV3_ERC20.sol +++ b/src/hardhat/contracts/Staking/FraxCrossChainFarmV3_ERC20.sol @@ -51,6 +51,9 @@ import "../ERC20/SafeERC20.sol"; import '../Misc_AMOs/kyberswap/elastic/IKSElasticLMV2.sol'; // KyberSwap Elastic import '../Misc_AMOs/kyberswap/elastic/IKyberSwapFarmingToken.sol'; // KyberSwap Elastic import '../Misc_AMOs/kyberswap/elastic/IKSReinvestmentTokenPool.sol'; // KyberSwap Elastic +import "../Misc_AMOs/kyberswap/factory/IKyberFactory.sol"; // KyberSwap Elastic +import "../Misc_AMOs/kyberswap/elastic/IKyberSwapFarmingToken.sol"; // KyberSwap Elastic +import "../Oracle/ComboOracle_KyberSwapElasticV2.sol"; // KyberSwap Elastic // import '../Misc_AMOs/mstable/IFeederPool.sol'; // mStable // import '../Misc_AMOs/impossible/IStableXPair.sol'; // Impossible // import '../Misc_AMOs/mstable/IFeederPool.sol'; // mStable @@ -78,7 +81,25 @@ contract FraxCrossChainFarmV3_ERC20 is Owned, ReentrancyGuard { ERC20 public rewardsToken1; // KyberSwap Elastic + // Manually set during deploy + // =================================================================== + // <>KYBERSWAP<>KYBERSWAP<>KYBERSWAP<>KYBERSWAP<>KYBERSWAP<>KYBERSWAP<>KYBERSWAP<> IKyberSwapFarmingToken public stakingToken; // KyberSwap Elastic + ComboOracle_KyberSwapElasticV2 public KSE_ComboOracleV2 = ComboOracle_KyberSwapElasticV2(0xfBCB0F967817c924f83e26e04F0FB28ED4d6276F); // KyberSwap Elastic + IKyberFactory public immutable kyber_factory = IKyberFactory(0xC7a590291e07B9fe9E64b86c58fD8fC764308C4A); // KyberSwap Elastic + // Need to seed a starting token to use both as a basis for fraxPerLPToken + // as well as getting ticks, etc + uint256 public seed_token_id = 7366; + + function setSeedTokenID(uint256 _seed_token_id) public onlyByOwnGov { + seed_token_id = _seed_token_id; + } + + function setKyberSwapElasticComboOracle(address _kse_combo_oracle_address) public onlyByOwnGov { + KSE_ComboOracleV2 = ComboOracle_KyberSwapElasticV2(_kse_combo_oracle_address); + } + // <>KYBERSWAP<>KYBERSWAP<>KYBERSWAP<>KYBERSWAP<>KYBERSWAP<>KYBERSWAP<>KYBERSWAP<> + // Balancer frxETH-bb-a-WETH Gauge // IBalancerChildLiquidityGauge public stakingToken; // Balancer frxETH-bb-a-WETH Gauge @@ -124,7 +145,7 @@ contract FraxCrossChainFarmV3_ERC20 is Owned, ReentrancyGuard { // Lock time and multiplier settings uint256 public lock_max_multiplier = uint256(3e18); // E18. 1x = e18 uint256 public lock_time_for_max_multiplier = 3 * 365 * 86400; // 3 years - uint256 public lock_time_min = 86400; // 1 * 86400 (1 day) + uint256 public lock_time_min = 1; // 1 second // veFXS related uint256 public vefxs_per_frax_for_max_boost = uint256(4e18); // E18. 4e18 means 4 veFXS must be held by the staker per 1 FRAX @@ -358,29 +379,13 @@ contract FraxCrossChainFarmV3_ERC20 is Owned, ReentrancyGuard { // KyberSwap Elastic // ============================================ - // { - // IKSReinvestmentTokenPool memory pool = IKSReinvestmentTokenPool(0xA852DDD69C13d42669840A692f6bBf94245ac54A); - // address coin0 = pool.token0(); - // address coin1 = pool.token1(); - // uint256 total_frax_reserves; - // if (coin0 == frax_address) { - // total_frax_reserves = ERC20(coin0).balanceOf(address(pool)); - // } - // // INCOMPLETE - // // INCOMPLETE - // // INCOMPLETE - // // INCOMPLETE - // // INCOMPLETE - // // INCOMPLETE - // // INCOMPLETE - // else { - // total_frax_reserves = ERC20(coin1).balanceOf(address(pool)); - // } - // frax_per_lp_token = total_frax_reserves.mul(1e18).div(stakingToken.totalSupply()); - - // // INCOMPLETE + { + // Fetch total pool TVL using the seed token id + ComboOracle_KyberSwapElasticV2.NFTValueInfo memory nft_value_info = KSE_ComboOracleV2.getNFTValueInfo(seed_token_id); - // } + // Assume half of the liquidity is FRAX or FRAX-related, even if it is not. + frax_per_lp_token = (nft_value_info.pool_tvl_usd * MULTIPLIER_PRECISION) / (stakingToken.totalSupply() * 2); + } // mStable // ============================================ diff --git a/src/hardhat/contracts/Staking/FraxFarmRageQuitter_Saddle_L2D4.sol b/src/hardhat/contracts/Staking/FraxFarmRageQuitter_Saddle_L2D4.sol new file mode 100644 index 00000000..1c739ecc --- /dev/null +++ b/src/hardhat/contracts/Staking/FraxFarmRageQuitter_Saddle_L2D4.sol @@ -0,0 +1,108 @@ +// SPDX-License-Identifier: GPL-2.0-or-later +pragma solidity >=0.8.0; + +// ==================================================================== +// | ______ _______ | +// | / _____________ __ __ / ____(_____ ____ _____ ________ | +// | / /_ / ___/ __ `| |/_/ / /_ / / __ \/ __ `/ __ \/ ___/ _ \ | +// | / __/ / / / /_/ _> < / __/ / / / / / /_/ / / / / /__/ __/ | +// | /_/ /_/ \__,_/_/|_| /_/ /_/_/ /_/\__,_/_/ /_/\___/\___/ | +// | | +// ==================================================================== +// ==================== FraxFarmRageQuitter_Saddle_L2D4 =================== +// ==================================================================== +// Exits a Frax farm early, with a penalty. Deployed on a case-by-case basis + +// Frax Finance: https://github.com/FraxFinance + +// Primary Author(s) +// Dennis: https://github.com/denett + +// Reviewer(s) / Contributor(s) +// Travis Moore: https://github.com/FortisFortuna + +import "@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol"; +import "@openzeppelin/contracts/token/ERC20/IERC20.sol"; + +import "../Utils/ReentrancyGuard.sol"; + +contract FraxFarmRageQuitter_Saddle_L2D4 is ReentrancyGuard { + IFarm public farm = IFarm(0xd1dF24e8D225b20F9c8f4912BE88cCCec93f36E5); + IERC20 public lp_token = IERC20(0x147D0Af556C6D89640BFa915D2b9619d7b55947a); + address public fraxTreasuryAddress = 0xe61D9ed1e5Dc261D1e90a99304fADCef2c76FD10; + uint256 treasuryPercentage = 2000; // 20%; + + // Rewards tokens + IERC20 public fxsToken = IERC20(0x9d2F299715D94d8A7E6F5eaa8E654E8c74a988A7); + IERC20 public sdlToken = IERC20(0x75C9bC761d88f70156DAf83aa010E84680baF131); + + // NOTE + // Make sure to enable this contract as a migrator first on the target farm + + /// @notice Exits stake for a specific kek_id + function ragequitOne(bytes32 _kek_id) nonReentrant external { + uint256 _liquidity; + + // Get all locked stake of the user + IFarm.LockedStake[] memory lockedStakes = farm.lockedStakesOf(msg.sender); + + // Find stake with the correct kek_id + for (uint256 i; i < lockedStakes.length; i++) { + if (lockedStakes[i].kek_id == _kek_id) { + _liquidity = lockedStakes[i].liquidity; + break; + } + } + require(_liquidity > 0, "Stake not found"); + + // Unlock the stake and transfer the LP tokens to this contract + farm.migrator_withdraw_locked(msg.sender, _kek_id); + + // Split the LP tokens between the Frax treasury and the user + uint256 liquidityToTreasury = (_liquidity * treasuryPercentage) / 10000; + SafeERC20.safeTransfer(lp_token, fraxTreasuryAddress, liquidityToTreasury); + SafeERC20.safeTransfer(lp_token, msg.sender, _liquidity - liquidityToTreasury); + + // All rewards collected during the migration are sent to the user. + SafeERC20.safeTransfer(fxsToken, msg.sender, fxsToken.balanceOf(address(this))); + SafeERC20.safeTransfer(sdlToken, msg.sender, sdlToken.balanceOf(address(this))); + } + + /// @notice Exits all stakes + function ragequitAll() nonReentrant external { + uint256 _totalLiquidity; + + // Get all locked stake of the user + IFarm.LockedStake[] memory lockedStakes = farm.lockedStakesOf(msg.sender); + + for (uint256 i; i < lockedStakes.length; i++) { + uint256 _liquidity = lockedStakes[i].liquidity; + if (_liquidity > 0) { + farm.migrator_withdraw_locked(msg.sender, lockedStakes[i].kek_id); // Unlock the stake and transfer the LP tokens to this contract + _totalLiquidity += _liquidity; + } + } + require(_totalLiquidity > 0, "Nothing to unlock"); + + // Split the LP tokens between the Frax treasury and the user + uint256 liquidityToTreasury = (_totalLiquidity * treasuryPercentage) / 10000; + SafeERC20.safeTransfer(lp_token, fraxTreasuryAddress, liquidityToTreasury); + SafeERC20.safeTransfer(lp_token, msg.sender, _totalLiquidity - liquidityToTreasury); + + // All reward tokens collected during the migration are send to the user. + SafeERC20.safeTransfer(fxsToken,msg.sender,fxsToken.balanceOf(address(this))); + SafeERC20.safeTransfer(sdlToken,msg.sender,sdlToken.balanceOf(address(this))); + } +} + +interface IFarm{ + struct LockedStake { + bytes32 kek_id; + uint256 start_timestamp; + uint256 liquidity; + uint256 ending_timestamp; + uint256 lock_multiplier; + } + function migrator_withdraw_locked(address, bytes32) external; + function lockedStakesOf(address) external view returns(LockedStake[] memory); +} \ No newline at end of file diff --git a/src/hardhat/contracts/Staking/FraxUnifiedFarm_ERC20.sol b/src/hardhat/contracts/Staking/FraxUnifiedFarm_ERC20.sol index a9778996..bd4d9707 100755 --- a/src/hardhat/contracts/Staking/FraxUnifiedFarm_ERC20.sol +++ b/src/hardhat/contracts/Staking/FraxUnifiedFarm_ERC20.sol @@ -28,7 +28,7 @@ import "./FraxUnifiedFarmTemplate.sol"; // import "../Misc_AMOs/curve/I2pool.sol"; // import "../Misc_AMOs/curve/I2poolToken.sol"; // import "../Misc_AMOs/curve/I2poolTokenNoLending.sol"; - +// // Fraxlend // import '../Fraxlend/IFraxlendPair.sol'; @@ -155,7 +155,7 @@ contract FraxUnifiedFarm_ERC20 is FraxUnifiedFarmTemplate { // frax_is_token0 = (token0 == frax_address); // KyberSwap Elastic KyberSwapFarmingToken (KS-FT) - stakingToken = IKyberSwapFarmingToken(_stakingToken); + // stakingToken = IKyberSwapFarmingToken(_stakingToken); // mStable // stakingToken = IFeederPool(_stakingToken); diff --git a/src/hardhat/contracts/Staking/IFraxCrossChainFarmV3_ERC20_Mod7.sol b/src/hardhat/contracts/Staking/IFraxCrossChainFarmV3_ERC20_Mod7.sol new file mode 100644 index 00000000..f9722be3 --- /dev/null +++ b/src/hardhat/contracts/Staking/IFraxCrossChainFarmV3_ERC20_Mod7.sol @@ -0,0 +1,96 @@ +// SPDX-License-Identifier: GPL-2.0-or-later +pragma solidity >=0.8.0; + +interface IFraxCrossChainFarmV3_ERC20_Mod7 { + struct LockedStake { + bytes32 kek_id; + uint256 start_timestamp; + uint256 liquidity; + uint256 ending_timestamp; + uint256 lock_multiplier; // 6 decimals of precision. 1x = 1000000 + } + + function acceptOwnership ( ) external; + function addMigrator ( address migrator_address ) external; + function calcCurCombinedWeight ( address account ) external view returns ( uint256 old_combined_weight, uint256 new_vefxs_multiplier, uint256 new_combined_weight ); + function calcCurrLockMultiplier ( address account, uint256 stake_idx ) external view returns ( uint256 midpoint_lock_multiplier ); + function collectRewardsOnWithdrawalPaused ( ) external view returns ( bool ); + function combinedWeightOf ( address account ) external view returns ( uint256 ); + function controller_address ( ) external view returns ( address ); + function earned ( address account ) external view returns ( uint256, uint256 ); + function fraxPerLPToken ( ) external view returns ( uint256 ); + function frax_address ( ) external view returns ( address ); + function getLatestETHPriceE8 ( ) external view returns ( int256 ); + function getReward ( ) external returns ( uint256, uint256 ); + function getRewardForDuration ( ) external view returns ( uint256, uint256 ); + function initializeDefault ( ) external; + function isInitialized ( ) external view returns ( bool ); + function lastRewardPull ( ) external view returns ( uint256 ); + function lastUpdateTime ( ) external view returns ( uint256 ); + function lockAdditional ( bytes32 kek_id, uint256 addl_liq ) external; + function lockLonger ( bytes32 kek_id, uint256 new_ending_ts ) external; + function lockMultiplier ( uint256 secs ) external view returns ( uint256 ); + function lock_max_multiplier ( ) external view returns ( uint256 ); + function lock_time_for_max_multiplier ( ) external view returns ( uint256 ); + function lock_time_min ( ) external view returns ( uint256 ); + function lockedLiquidityOf ( address account ) external view returns ( uint256 ); + function lockedStakes ( address, uint256 ) external view returns ( bytes32 kek_id, uint256 start_timestamp, uint256 liquidity, uint256 ending_timestamp, uint256 lock_multiplier ); + function lockedStakesOf ( address account ) external view returns ( LockedStake[] memory); + function migrationsOn ( ) external view returns ( bool ); + function migrator_stakeLocked_for ( address staker_address, uint256 amount, uint256 secs, uint256 start_timestamp ) external; + function migrator_withdraw_locked ( address staker_address, bytes32 kek_id ) external; + function minVeFXSForMaxBoost ( address account ) external view returns ( uint256 ); + function nominateNewOwner ( address _owner ) external; + function nominatedOwner ( ) external view returns ( address ); + function owner ( ) external view returns ( address ); + function periodFinish ( ) external view returns ( uint256 ); + function recoverERC20 ( address tokenAddress, uint256 tokenAmount ) external; + function removeMigrator ( address migrator_address ) external; + function rewardPerToken ( ) external view returns ( uint256, uint256 ); + function rewardRate0 ( ) external view returns ( uint256 ); + function rewardRate1 ( ) external view returns ( uint256 ); + function rewarder ( ) external view returns ( address ); + function rewards0 ( address ) external view returns ( uint256 ); + function rewards1 ( address ) external view returns ( uint256 ); + function rewardsCollectionPaused ( ) external view returns ( bool ); + function rewardsDuration ( ) external view returns ( uint256 ); + function rewardsToken0 ( ) external view returns ( address ); + function rewardsToken1 ( ) external view returns ( address ); + function setController ( address _controller_address ) external; + function setETHUSDOracle ( address _eth_usd_oracle_address ) external; + function setLockedStakeTimeForMinAndMaxMultiplier ( uint256 _lock_time_for_max_multiplier, uint256 _lock_time_min ) external; + function setMultipliers ( uint256 _lock_max_multiplier, uint256 _vefxs_max_multiplier, uint256 _vefxs_per_frax_for_max_boost ) external; + function setTimelock ( address _new_timelock ) external; + function setVeFXS ( address _vefxs_address ) external; + function stakeLocked ( uint256 liquidity, uint256 secs ) external; + function stakerAllowMigrator ( address migrator_address ) external; + function stakerDisallowMigrator ( address migrator_address ) external; + function staker_allowed_migrators ( address, address ) external view returns ( bool ); + function stakesUnlocked ( ) external view returns ( bool ); + function stakingPaused ( ) external view returns ( bool ); + function stakingToken ( ) external view returns ( address ); + function sync ( ) external; + function timelock_address ( ) external view returns ( address ); + function toggleCollectRewardsOnWithdrawal ( ) external; + function toggleMigrations ( ) external; + function toggleRewardsCollection ( ) external; + function toggleStaking ( ) external; + function toggleWithdrawals ( ) external; + function totalCombinedWeight ( ) external view returns ( uint256 ); + function totalLiquidityLocked ( ) external view returns ( uint256 ); + function ttlRew0Owed ( ) external view returns ( uint256 ); + function ttlRew0Paid ( ) external view returns ( uint256 ); + function ttlRew1Owed ( ) external view returns ( uint256 ); + function ttlRew1Paid ( ) external view returns ( uint256 ); + function unlockStakes ( ) external; + function userRewardPerTokenPaid0 ( address ) external view returns ( uint256 ); + function userRewardPerTokenPaid1 ( address ) external view returns ( uint256 ); + function userStakedFrax ( address account ) external view returns ( uint256 ); + function valid_migrators ( address ) external view returns ( bool ); + function veFXS ( ) external view returns ( address ); + function veFXSMultiplier ( address account ) external view returns ( uint256 ); + function vefxs_max_multiplier ( ) external view returns ( uint256 ); + function vefxs_per_frax_for_max_boost ( ) external view returns ( uint256 ); + function withdrawLocked ( bytes32 kek_id, bool claim_rewards ) external; + function withdrawalsPaused ( ) external view returns ( bool ); +} diff --git a/src/hardhat/contracts/Staking/IFraxUnifiedFarm_ERC20_V105.sol b/src/hardhat/contracts/Staking/IFraxUnifiedFarm_ERC20_V105.sol new file mode 100644 index 00000000..172d4840 --- /dev/null +++ b/src/hardhat/contracts/Staking/IFraxUnifiedFarm_ERC20_V105.sol @@ -0,0 +1,79 @@ +// SPDX-License-Identifier: MIT +pragma solidity >=0.8.0; + +interface IFraxUnifiedFarm_ERC20_V105 { +struct LockedStake { + uint256 start_timestamp; + uint256 liquidity; + uint256 ending_timestamp; + uint256 lock_multiplier; // 6 decimals of precision. 1x = 1000000 +} + + function acceptOwnership ( ) external; + function calcCurCombinedWeight ( address account ) external view returns ( uint256 old_combined_weight, uint256 new_vefxs_multiplier, uint256 new_combined_weight ); + function calcCurrLockMultiplier ( address account, uint256 stake_idx ) external view returns ( uint256 midpoint_lock_multiplier ); + function changeTokenManager ( address reward_token_address, address new_manager_address ) external; + function combinedWeightOf ( address account ) external view returns ( uint256 ); + function curvePool ( ) external view returns ( address ); + function curveToken ( ) external view returns ( address ); + function earned ( address account ) external view returns ( uint256[] memory new_earned ); + function fraxPerLPStored ( ) external view returns ( uint256 ); + function fraxPerLPToken ( ) external view returns ( uint256 ); + function getAllRewardTokens ( ) external view returns ( address[] memory ); + function getLatestETHPriceE8 ( ) external view returns ( int256 ); + function getProxyFor ( address addr ) external view returns ( address ); + function getReward ( address destination_address ) external returns ( uint256[] memory ); + function getReward2 ( address destination_address, bool claim_extra_too ) external returns ( uint256[] memory ); + function getRewardExtraLogic ( address destination_address ) external; + function getRewardForDuration ( ) external view returns ( uint256[] memory rewards_per_duration_arr ); + function isTokenManagerFor ( address caller_addr, address reward_token_addr ) external view returns ( bool ); + function lastRewardClaimTime ( address ) external view returns ( uint256 ); + function lastUpdateTime ( ) external view returns ( uint256 ); + function lockAdditional ( bytes32 kek_id, uint256 addl_liq ) external; + function lockLonger ( bytes32 kek_id, uint256 new_ending_ts ) external; + function lockMultiplier ( uint256 secs ) external view returns ( uint256 ); + function lock_max_multiplier ( ) external view returns ( uint256 ); + function lock_time_for_max_multiplier ( ) external view returns ( uint256 ); + function lock_time_min ( ) external view returns ( uint256 ); + function lockedLiquidityOf ( address account ) external view returns ( uint256 ); + function lockedStakes ( address, uint256 ) external view returns ( bytes32 kek_id, uint256 start_timestamp, uint256 liquidity, uint256 ending_timestamp, uint256 lock_multiplier ); + function lockedStakesOf ( address account ) external view returns ( LockedStake[] memory ); + function lockedStakesOfLength ( address account ) external view returns ( uint256 ); + function maxLPForMaxBoost ( address account ) external view returns ( uint256 ); + function minVeFXSForMaxBoost ( address account ) external view returns ( uint256 ); + function minVeFXSForMaxBoostProxy ( address proxy_address ) external view returns ( uint256 ); + function nominateNewOwner ( address _owner ) external; + function nominatedOwner ( ) external view returns ( address ); + function owner ( ) external view returns ( address ); + function periodFinish ( ) external view returns ( uint256 ); + function proxyStakedFrax ( address proxy_address ) external view returns ( uint256 ); + function proxyToggleStaker ( address staker_address ) external; + function proxy_lp_balances ( address ) external view returns ( uint256 ); + function recoverERC20 ( address tokenAddress, uint256 tokenAmount ) external; + function rewardManagers ( address ) external view returns ( address ); + function rewardRates ( uint256 token_idx ) external view returns ( uint256 rwd_rate ); + function rewardTokenAddrToIdx ( address ) external view returns ( uint256 ); + function rewardsDuration ( ) external view returns ( uint256 ); + function rewardsPerToken ( ) external view returns ( uint256[] memory newRewardsPerTokenStored ); + function setETHUSDOracle ( address _eth_usd_oracle_address ) external; + function setMiscVariables ( uint256[6] memory _misc_vars ) external; + function setPauses ( bool _stakingPaused, bool _withdrawalsPaused, bool _rewardsCollectionPaused, bool _collectRewardsOnWithdrawalPaused ) external; + function setRewardVars ( address reward_token_address, uint256 _new_rate, address _gauge_controller_address, address _rewards_distributor_address ) external; + function stakeLocked ( uint256 liquidity, uint256 secs ) external returns ( bytes32 ); + function stakerSetVeFXSProxy ( address proxy_address ) external; + function staker_designated_proxies ( address ) external view returns ( address ); + function stakesUnlocked ( ) external view returns ( bool ); + function stakingToken ( ) external view returns ( address ); + function sync ( ) external; + function sync_gauge_weights ( bool force_update ) external; + function toggleValidVeFXSProxy ( address _proxy_addr ) external; + function totalCombinedWeight ( ) external view returns ( uint256 ); + function totalLiquidityLocked ( ) external view returns ( uint256 ); + function unlockStakes ( ) external; + function userStakedFrax ( address account ) external view returns ( uint256 ); + function veFXSMultiplier ( address account ) external view returns ( uint256 vefxs_multiplier ); + function vefxs_boost_scale_factor ( ) external view returns ( uint256 ); + function vefxs_max_multiplier ( ) external view returns ( uint256 ); + function vefxs_per_frax_for_max_boost ( ) external view returns ( uint256 ); + function withdrawLocked ( bytes32 kek_id, address destination_address, bool claim_rewards ) external returns ( uint256 ); +} diff --git a/src/hardhat/contracts/Staking/Variants/FraxUnifiedFarm_ERC20_Convex_FRAXBP_Stable.sol b/src/hardhat/contracts/Staking/Variants/FraxUnifiedFarm_ERC20_Convex_FRAXBP_Stable.sol index 306c9eca..e87bd61e 100755 --- a/src/hardhat/contracts/Staking/Variants/FraxUnifiedFarm_ERC20_Convex_FRAXBP_Stable.sol +++ b/src/hardhat/contracts/Staking/Variants/FraxUnifiedFarm_ERC20_Convex_FRAXBP_Stable.sol @@ -32,8 +32,8 @@ contract FraxUnifiedFarm_ERC20_Convex_FRAXBP_Stable is FraxUnifiedFarm_ERC20 { function fraxPerLPToken() public view override returns (uint256 frax_per_lp_token) { // COMMENTED OUT SO COMPILER DOESNT COMPLAIN. UNCOMMENT WHEN DEPLOYING - // // Convex Stable/FRAXBP - // // ============================================ + // Convex Stable/FRAXBP + // ============================================ // { // // Half of the LP is FRAXBP. Half of that should be FRAX. // // Using 0.25 * virtual price for gas savings diff --git a/src/hardhat/contracts/Staking/Variants/FraxUnifiedFarm_ERC20_Convex_frxETH.sol b/src/hardhat/contracts/Staking/Variants/FraxUnifiedFarm_ERC20_Convex_frxETH.sol index 83963aec..83baaa17 100755 --- a/src/hardhat/contracts/Staking/Variants/FraxUnifiedFarm_ERC20_Convex_frxETH.sol +++ b/src/hardhat/contracts/Staking/Variants/FraxUnifiedFarm_ERC20_Convex_frxETH.sol @@ -27,12 +27,12 @@ contract FraxUnifiedFarm_ERC20_Convex_frxETH is FraxUnifiedFarm_ERC20 { { // COMMENTED OUT SO COMPILER DOESNT COMPLAIN. UNCOMMENT WHEN DEPLOYING - // Most Convex frxETH/XYZ (TOKEN != MINTER) + // Most Convex frxETH/XYZ (TOKEN != MINTER / POOL) // stakingToken = IConvexStakingWrapperFrax(_stakingToken); // curveToken = I2poolToken(stakingToken.curveToken()); // curvePool = ICurvefrxETHETHPool(curveToken.minter()); - // Some Convex frxETH/XYZ (TOKEN = MINTER)) + // Some Convex frxETH/XYZ (TOKEN = MINTER / POOL)) // stakingToken = IConvexStakingWrapperFrax(_stakingToken); // curveToken = I2poolToken(stakingToken.curveToken()); // curvePool = ICurvefrxETHETHPool(stakingToken.curveToken()); diff --git a/src/hardhat/contracts/Staking/Variants/FraxUnifiedFarm_ERC20_KyberSwapElasticV2.sol b/src/hardhat/contracts/Staking/Variants/FraxUnifiedFarm_ERC20_KyberSwapElasticV2.sol new file mode 100755 index 00000000..0250e766 --- /dev/null +++ b/src/hardhat/contracts/Staking/Variants/FraxUnifiedFarm_ERC20_KyberSwapElasticV2.sol @@ -0,0 +1,64 @@ +// SPDX-License-Identifier: GPL-2.0-or-later +pragma solidity >=0.8.0; + +import "../FraxUnifiedFarm_ERC20.sol"; +import "../../Misc_AMOs/kyberswap/factory/IKyberFactory.sol"; +import "../../Misc_AMOs/kyberswap/elastic/IKyberSwapFarmingToken.sol"; +import "../../Oracle/ComboOracle_KyberSwapElasticV2.sol"; + +contract FraxUnifiedFarm_ERC20_KyberSwapElasticV2 is FraxUnifiedFarm_ERC20 { + + // Need to seed a starting token to use both as a basis for fraxPerLPToken + // as well as getting ticks, etc + uint256 public seed_token_id; + + // For KS-FT pricing + ComboOracle_KyberSwapElasticV2 public KSE_ComboOracleV2; + IKyberFactory public immutable kyber_factory = IKyberFactory(0xC7a590291e07B9fe9E64b86c58fD8fC764308C4A); + + constructor ( + address _owner, + address[] memory _rewardTokens, + address[] memory _rewardManagers, + uint256[] memory _rewardRates, + address[] memory _gaugeControllers, + address[] memory _rewardDistributors, + address _kse_combo_oracle, + address _stakingToken, + uint256 _seed_token_id + ) + FraxUnifiedFarm_ERC20(_owner , _rewardTokens, _rewardManagers, _rewardRates, _gaugeControllers, _rewardDistributors, _stakingToken) + { + // COMMENTED OUT SO COMPILER DOESNT COMPLAIN. UNCOMMENT WHEN DEPLOYING + stakingToken = IKyberSwapFarmingToken(_stakingToken); + frax_is_token0 = false; // Doesn't really matter here + + seed_token_id = _seed_token_id; + KSE_ComboOracleV2 = ComboOracle_KyberSwapElasticV2(_kse_combo_oracle); + + } + + function setSeedTokenID(uint256 _seed_token_id) public onlyByOwnGov { + seed_token_id = _seed_token_id; + } + + function setKyberSwapElasticComboOracle(address _kse_combo_oracle_address) public onlyByOwnGov { + KSE_ComboOracleV2 = ComboOracle_KyberSwapElasticV2(_kse_combo_oracle_address); + } + + + function fraxPerLPToken() public view override returns (uint256 frax_per_lp_token) { + // COMMENTED OUT SO COMPILER DOESNT COMPLAIN. UNCOMMENT WHEN DEPLOYING + + // KyberSwap Elastic KyberSwapFarmingToken (KS-FT) + // ============================================ + { + // Fetch liquidity info from the seed token id + // ComboOracle_KyberSwapElasticV2.NFTBasicInfo memory nft_basic_info = KSE_ComboOracleV2.getNFTBasicInfo(seed_token_id); + ComboOracle_KyberSwapElasticV2.NFTValueInfo memory nft_value_info = KSE_ComboOracleV2.getNFTValueInfo(seed_token_id); + + // Assume half of the liquidity is FRAX or FRAX-related, even if it is not. + frax_per_lp_token = (nft_value_info.pool_tvl_usd * MULTIPLIER_PRECISION) / (stakingToken.totalSupply() * 2); + } + } +} diff --git a/src/hardhat/gnosis-safe-scripts/Convex_Farm_Deployments/Step_1_Vault_Gauge_Proxy.js b/src/hardhat/gnosis-safe-scripts/Convex_Farm_Deployments/Step_1_Vault_Gauge_Proxy.js index c1f24164..e22780c5 100644 --- a/src/hardhat/gnosis-safe-scripts/Convex_Farm_Deployments/Step_1_Vault_Gauge_Proxy.js +++ b/src/hardhat/gnosis-safe-scripts/Convex_Farm_Deployments/Step_1_Vault_Gauge_Proxy.js @@ -45,27 +45,17 @@ async function main() { const thisBlock = await ethers.provider.getBlock(await ethers.provider.getBlockNumber()); const wrapperAddrs = [ - // ADDRS_ETH_LPS['Convex stkcvxfrxETHCRV_New'], - // ADDRS_ETH_LPS['Convex stkcvxfrxETHCVX_New'], - // ADDRS_ETH_LPS['Convex stkcvxfrxETHalETH_New'], - // ADDRS_ETH_LPS['Convex stkcvxfrxETHankrETH_New'], - // ADDRS_ETH_LPS['Convex stkcvxfrxETHcbETH_New'], - // ADDRS_ETH_LPS['Convex stkcvxfrxETHrETH_New'], - // ADDRS_ETH_LPS['Convex stkcvxfrxETHsETH_New'], - // ADDRS_ETH_LPS['Convex stkcvxfrxETHstETH_New'] - ADDRS_ETH_LPS['Convex stkcvxZUSDFRAXBP'] + ADDRS_ETH_LPS['Convex stkcvxfrxETHmsETH'], + ADDRS_ETH_LPS['Convex stkcvxfrxETHrETH_StaFi'], + ADDRS_ETH_LPS['Convex stkcvxfrxETHzETH'], + ADDRS_ETH_LPS['Convex stkcvxGRAIFRAXBP'] ]; const farmAddrs = [ - // ADDRS_ETH_FARMS['Convex stkcvxfrxETHCRV_New'], - // ADDRS_ETH_FARMS['Convex stkcvxfrxETHCVX_New'], - // ADDRS_ETH_FARMS['Convex stkcvxfrxETHalETH_New'], - // ADDRS_ETH_FARMS['Convex stkcvxfrxETHankrETH_New'], - // ADDRS_ETH_FARMS['Convex stkcvxfrxETHcbETH_New'], - // ADDRS_ETH_FARMS['Convex stkcvxfrxETHrETH_New'], - // ADDRS_ETH_FARMS['Convex stkcvxfrxETHsETH_New'], - // ADDRS_ETH_FARMS['Convex stkcvxfrxETHstETH_New'] - ADDRS_ETH_FARMS['Convex stkcvxZUSDFRAXBP'] + ADDRS_ETH_FARMS['Convex stkcvxfrxETHmsETH'], + ADDRS_ETH_FARMS['Convex stkcvxfrxETHrETH_StaFi'], + ADDRS_ETH_FARMS['Convex stkcvxfrxETHzETH'], + ADDRS_ETH_FARMS['Convex stkcvxGRAIFRAXBP'] ]; diff --git a/src/hardhat/gnosis-safe-scripts/Convex_Farm_Deployments/Step_1_Vault_Gauge_Proxy.json b/src/hardhat/gnosis-safe-scripts/Convex_Farm_Deployments/Step_1_Vault_Gauge_Proxy.json index 108710a3..53a555d0 100644 --- a/src/hardhat/gnosis-safe-scripts/Convex_Farm_Deployments/Step_1_Vault_Gauge_Proxy.json +++ b/src/hardhat/gnosis-safe-scripts/Convex_Farm_Deployments/Step_1_Vault_Gauge_Proxy.json @@ -1 +1 @@ -{"version":"1.0","chainId":"1","createdAt":1688313875000,"meta":{"name":"Transactions Batch","description":"","txBuilderVersion":"1.14.1","createdFromSafeAddress":"0xB1748C79709f4Ba2Dd82834B8c82D4a505003f27","createdFromOwnerAddress":"","checksum":"0xbbf186fa91d91b65372cd9e95914ebf1677d56ee89a57add93ec7647da05c7e1"},"transactions":[{"to":"0xFD2d7847E0f450d8B00d3D697D720C687E622a7B","value":"0","data":null,"contractMethod":{"inputs":[{"internalType":"address","name":"_vault","type":"address"}],"name":"setVault","payable":false},"contractInputsValues":{"_vault":"0x107a33019910E57533Ad4F75762d6A958630cA3d"}},{"to":"0x3669C421b77340B2979d1A00a792CC2ee0FcE737","value":"0","data":null,"contractMethod":{"inputs":[{"name":"addr","type":"address"},{"name":"gauge_type","type":"int128"},{"name":"weight","type":"uint256"}],"name":"add_gauge","payable":false},"contractInputsValues":{"addr":"0x107a33019910E57533Ad4F75762d6A958630cA3d","gauge_type":"0","weight":"1000"}},{"to":"0x107a33019910E57533Ad4F75762d6A958630cA3d","value":"0","data":null,"contractMethod":{"inputs":[{"internalType":"address","name":"reward_token_address","type":"address"},{"internalType":"uint256","name":"_new_rate","type":"uint256"},{"internalType":"address","name":"_gauge_controller_address","type":"address"},{"internalType":"address","name":"_rewards_distributor_address","type":"address"}],"name":"setRewardVars","payable":false},"contractInputsValues":{"reward_token_address":"0x3432B6A60D23Ca0dFCa7761B7ab56459D9C964D0","_new_rate":"0","_gauge_controller_address":"0x3669C421b77340B2979d1A00a792CC2ee0FcE737","_rewards_distributor_address":"0x278dC748edA1d8eFEf1aDFB518542612b49Fcd34"}},{"to":"0x107a33019910E57533Ad4F75762d6A958630cA3d","value":"0","data":null,"contractMethod":{"inputs":[{"internalType":"address","name":"_proxy_addr","type":"address"}],"name":"toggleValidVeFXSProxy","payable":false},"contractInputsValues":{"_proxy_addr":"0x59CFCD384746ec3035299D90782Be065e466800B"}}]} \ No newline at end of file +{"version":"1.0","chainId":"1","createdAt":1691611691000,"meta":{"name":"Transactions Batch","description":"","txBuilderVersion":"1.14.1","createdFromSafeAddress":"0xB1748C79709f4Ba2Dd82834B8c82D4a505003f27","createdFromOwnerAddress":"","checksum":"0xd1e73adf881d06613e31f74ef1539f6827c83063f7b386d678ff9041f8b1ff8a"},"transactions":[{"to":"0x09bFD0c760E4a1bFc970cdaAAD240307C917Aa6c","value":"0","data":null,"contractMethod":{"inputs":[{"internalType":"address","name":"_vault","type":"address"}],"name":"setVault","payable":false},"contractInputsValues":{"_vault":"0x2816Ab1F4Db656602b6B0041c006652A4F5D0437"}},{"to":"0xffAFA5aA5b0a9C0C8e05ec8b89056F018EE2Bad6","value":"0","data":null,"contractMethod":{"inputs":[{"internalType":"address","name":"_vault","type":"address"}],"name":"setVault","payable":false},"contractInputsValues":{"_vault":"0x76CF35aB1450D3A6c84EdDB8A960A5F65B76e706"}},{"to":"0xd69068777d1b2dc74522117efA75AA195c0b57DB","value":"0","data":null,"contractMethod":{"inputs":[{"internalType":"address","name":"_vault","type":"address"}],"name":"setVault","payable":false},"contractInputsValues":{"_vault":"0x882B9fad02D1a7436449dcdE9934Eeb9E287909c"}},{"to":"0xDf9BB26ba5a05fcFc2637dC763AA4eb735911568","value":"0","data":null,"contractMethod":{"inputs":[{"internalType":"address","name":"_vault","type":"address"}],"name":"setVault","payable":false},"contractInputsValues":{"_vault":"0x5684d5566bb438D8Ef7B3C1E5da9450cD19C1b9f"}},{"to":"0x3669C421b77340B2979d1A00a792CC2ee0FcE737","value":"0","data":null,"contractMethod":{"inputs":[{"name":"addr","type":"address"},{"name":"gauge_type","type":"int128"},{"name":"weight","type":"uint256"}],"name":"add_gauge","payable":false},"contractInputsValues":{"addr":"0x2816Ab1F4Db656602b6B0041c006652A4F5D0437","gauge_type":"0","weight":"1000"}},{"to":"0x3669C421b77340B2979d1A00a792CC2ee0FcE737","value":"0","data":null,"contractMethod":{"inputs":[{"name":"addr","type":"address"},{"name":"gauge_type","type":"int128"},{"name":"weight","type":"uint256"}],"name":"add_gauge","payable":false},"contractInputsValues":{"addr":"0x76CF35aB1450D3A6c84EdDB8A960A5F65B76e706","gauge_type":"0","weight":"1000"}},{"to":"0x3669C421b77340B2979d1A00a792CC2ee0FcE737","value":"0","data":null,"contractMethod":{"inputs":[{"name":"addr","type":"address"},{"name":"gauge_type","type":"int128"},{"name":"weight","type":"uint256"}],"name":"add_gauge","payable":false},"contractInputsValues":{"addr":"0x882B9fad02D1a7436449dcdE9934Eeb9E287909c","gauge_type":"0","weight":"1000"}},{"to":"0x3669C421b77340B2979d1A00a792CC2ee0FcE737","value":"0","data":null,"contractMethod":{"inputs":[{"name":"addr","type":"address"},{"name":"gauge_type","type":"int128"},{"name":"weight","type":"uint256"}],"name":"add_gauge","payable":false},"contractInputsValues":{"addr":"0x5684d5566bb438D8Ef7B3C1E5da9450cD19C1b9f","gauge_type":"0","weight":"1000"}},{"to":"0x2816Ab1F4Db656602b6B0041c006652A4F5D0437","value":"0","data":null,"contractMethod":{"inputs":[{"internalType":"address","name":"reward_token_address","type":"address"},{"internalType":"uint256","name":"_new_rate","type":"uint256"},{"internalType":"address","name":"_gauge_controller_address","type":"address"},{"internalType":"address","name":"_rewards_distributor_address","type":"address"}],"name":"setRewardVars","payable":false},"contractInputsValues":{"reward_token_address":"0x3432B6A60D23Ca0dFCa7761B7ab56459D9C964D0","_new_rate":"0","_gauge_controller_address":"0x3669C421b77340B2979d1A00a792CC2ee0FcE737","_rewards_distributor_address":"0x278dC748edA1d8eFEf1aDFB518542612b49Fcd34"}},{"to":"0x76CF35aB1450D3A6c84EdDB8A960A5F65B76e706","value":"0","data":null,"contractMethod":{"inputs":[{"internalType":"address","name":"reward_token_address","type":"address"},{"internalType":"uint256","name":"_new_rate","type":"uint256"},{"internalType":"address","name":"_gauge_controller_address","type":"address"},{"internalType":"address","name":"_rewards_distributor_address","type":"address"}],"name":"setRewardVars","payable":false},"contractInputsValues":{"reward_token_address":"0x3432B6A60D23Ca0dFCa7761B7ab56459D9C964D0","_new_rate":"0","_gauge_controller_address":"0x3669C421b77340B2979d1A00a792CC2ee0FcE737","_rewards_distributor_address":"0x278dC748edA1d8eFEf1aDFB518542612b49Fcd34"}},{"to":"0x882B9fad02D1a7436449dcdE9934Eeb9E287909c","value":"0","data":null,"contractMethod":{"inputs":[{"internalType":"address","name":"reward_token_address","type":"address"},{"internalType":"uint256","name":"_new_rate","type":"uint256"},{"internalType":"address","name":"_gauge_controller_address","type":"address"},{"internalType":"address","name":"_rewards_distributor_address","type":"address"}],"name":"setRewardVars","payable":false},"contractInputsValues":{"reward_token_address":"0x3432B6A60D23Ca0dFCa7761B7ab56459D9C964D0","_new_rate":"0","_gauge_controller_address":"0x3669C421b77340B2979d1A00a792CC2ee0FcE737","_rewards_distributor_address":"0x278dC748edA1d8eFEf1aDFB518542612b49Fcd34"}},{"to":"0x5684d5566bb438D8Ef7B3C1E5da9450cD19C1b9f","value":"0","data":null,"contractMethod":{"inputs":[{"internalType":"address","name":"reward_token_address","type":"address"},{"internalType":"uint256","name":"_new_rate","type":"uint256"},{"internalType":"address","name":"_gauge_controller_address","type":"address"},{"internalType":"address","name":"_rewards_distributor_address","type":"address"}],"name":"setRewardVars","payable":false},"contractInputsValues":{"reward_token_address":"0x3432B6A60D23Ca0dFCa7761B7ab56459D9C964D0","_new_rate":"0","_gauge_controller_address":"0x3669C421b77340B2979d1A00a792CC2ee0FcE737","_rewards_distributor_address":"0x278dC748edA1d8eFEf1aDFB518542612b49Fcd34"}},{"to":"0x2816Ab1F4Db656602b6B0041c006652A4F5D0437","value":"0","data":null,"contractMethod":{"inputs":[{"internalType":"address","name":"_proxy_addr","type":"address"}],"name":"toggleValidVeFXSProxy","payable":false},"contractInputsValues":{"_proxy_addr":"0x59CFCD384746ec3035299D90782Be065e466800B"}},{"to":"0x76CF35aB1450D3A6c84EdDB8A960A5F65B76e706","value":"0","data":null,"contractMethod":{"inputs":[{"internalType":"address","name":"_proxy_addr","type":"address"}],"name":"toggleValidVeFXSProxy","payable":false},"contractInputsValues":{"_proxy_addr":"0x59CFCD384746ec3035299D90782Be065e466800B"}},{"to":"0x882B9fad02D1a7436449dcdE9934Eeb9E287909c","value":"0","data":null,"contractMethod":{"inputs":[{"internalType":"address","name":"_proxy_addr","type":"address"}],"name":"toggleValidVeFXSProxy","payable":false},"contractInputsValues":{"_proxy_addr":"0x59CFCD384746ec3035299D90782Be065e466800B"}},{"to":"0x5684d5566bb438D8Ef7B3C1E5da9450cD19C1b9f","value":"0","data":null,"contractMethod":{"inputs":[{"internalType":"address","name":"_proxy_addr","type":"address"}],"name":"toggleValidVeFXSProxy","payable":false},"contractInputsValues":{"_proxy_addr":"0x59CFCD384746ec3035299D90782Be065e466800B"}}]} \ No newline at end of file diff --git a/src/hardhat/gnosis-safe-scripts/Convex_Farm_Deployments/Step_2_CRVCVXDistro_Contracts.js b/src/hardhat/gnosis-safe-scripts/Convex_Farm_Deployments/Step_2_CRVCVXDistro_Contracts.js index e1df6189..e05c964d 100644 --- a/src/hardhat/gnosis-safe-scripts/Convex_Farm_Deployments/Step_2_CRVCVXDistro_Contracts.js +++ b/src/hardhat/gnosis-safe-scripts/Convex_Farm_Deployments/Step_2_CRVCVXDistro_Contracts.js @@ -45,27 +45,17 @@ async function main() { const thisBlock = await ethers.provider.getBlock(await ethers.provider.getBlockNumber()); const wrapperAddrs = [ - // ADDRS_ETH_LPS['Convex stkcvxfrxETHCRV_New'], - // ADDRS_ETH_LPS['Convex stkcvxfrxETHCVX_New'], - // ADDRS_ETH_LPS['Convex stkcvxfrxETHalETH_New'], - // ADDRS_ETH_LPS['Convex stkcvxfrxETHankrETH_New'], - // ADDRS_ETH_LPS['Convex stkcvxfrxETHcbETH_New'], - // ADDRS_ETH_LPS['Convex stkcvxfrxETHrETH_New'], - // ADDRS_ETH_LPS['Convex stkcvxfrxETHsETH_New'], - // ADDRS_ETH_LPS['Convex stkcvxfrxETHstETH_New'] - ADDRS_ETH_LPS['Convex stkcvxZUSDFRAXBP'] + ADDRS_ETH_LPS['Convex stkcvxfrxETHmsETH'], + ADDRS_ETH_LPS['Convex stkcvxfrxETHrETH_StaFi'], + ADDRS_ETH_LPS['Convex stkcvxfrxETHzETH'], + ADDRS_ETH_LPS['Convex stkcvxGRAIFRAXBP'] ]; const farmAddrs = [ - // ADDRS_ETH_FARMS['Convex stkcvxfrxETHCRV_New'], - // ADDRS_ETH_FARMS['Convex stkcvxfrxETHCVX_New'], - // ADDRS_ETH_FARMS['Convex stkcvxfrxETHalETH_New'], - // ADDRS_ETH_FARMS['Convex stkcvxfrxETHankrETH_New'], - // ADDRS_ETH_FARMS['Convex stkcvxfrxETHcbETH_New'], - // ADDRS_ETH_FARMS['Convex stkcvxfrxETHrETH_New'], - // ADDRS_ETH_FARMS['Convex stkcvxfrxETHsETH_New'], - // ADDRS_ETH_FARMS['Convex stkcvxfrxETHstETH_New'] - ADDRS_ETH_FARMS['Convex stkcvxZUSDFRAXBP'] + ADDRS_ETH_FARMS['Convex stkcvxfrxETHmsETH'], + ADDRS_ETH_FARMS['Convex stkcvxfrxETHrETH_StaFi'], + ADDRS_ETH_FARMS['Convex stkcvxfrxETHzETH'], + ADDRS_ETH_FARMS['Convex stkcvxGRAIFRAXBP'] ]; // =============================================================== diff --git a/src/hardhat/gnosis-safe-scripts/Convex_Farm_Deployments/Step_2_CRVCVXDistro_Contracts.json b/src/hardhat/gnosis-safe-scripts/Convex_Farm_Deployments/Step_2_CRVCVXDistro_Contracts.json index 65cfb996..b342abae 100644 --- a/src/hardhat/gnosis-safe-scripts/Convex_Farm_Deployments/Step_2_CRVCVXDistro_Contracts.json +++ b/src/hardhat/gnosis-safe-scripts/Convex_Farm_Deployments/Step_2_CRVCVXDistro_Contracts.json @@ -1 +1 @@ -{"version":"1.0","chainId":"1","createdAt":1687986623000,"meta":{"name":"Transactions Batch","description":"","txBuilderVersion":"1.14.1","createdFromSafeAddress":"0xB1748C79709f4Ba2Dd82834B8c82D4a505003f27","createdFromOwnerAddress":"","checksum":"0x742709982f4931f115c6851afd0ddf848a68f2a815a8c277ee559ded39ac3257"},"transactions":[{"to":"0x107a33019910E57533Ad4F75762d6A958630cA3d","value":"0","data":null,"contractMethod":{"inputs":[{"internalType":"address","name":"reward_token_address","type":"address"},{"internalType":"address","name":"new_manager_address","type":"address"}],"name":"changeTokenManager","payable":false},"contractInputsValues":{"reward_token_address":"0xd533a949740bb3306d119cc777fa900ba034cd52","new_manager_address":"0x587e432E1503a10D18B85E9De63590a8E5cFef40"}},{"to":"0x107a33019910E57533Ad4F75762d6A958630cA3d","value":"0","data":null,"contractMethod":{"inputs":[{"internalType":"address","name":"reward_token_address","type":"address"},{"internalType":"uint256","name":"_new_rate","type":"uint256"},{"internalType":"address","name":"_gauge_controller_address","type":"address"},{"internalType":"address","name":"_rewards_distributor_address","type":"address"}],"name":"setRewardVars","payable":false},"contractInputsValues":{"reward_token_address":"0xd533a949740bb3306d119cc777fa900ba034cd52","_new_rate":"0","_gauge_controller_address":"0x0000000000000000000000000000000000000000","_rewards_distributor_address":"0x587e432E1503a10D18B85E9De63590a8E5cFef40"}},{"to":"0x107a33019910E57533Ad4F75762d6A958630cA3d","value":"0","data":null,"contractMethod":{"inputs":[{"internalType":"address","name":"reward_token_address","type":"address"},{"internalType":"address","name":"new_manager_address","type":"address"}],"name":"changeTokenManager","payable":false},"contractInputsValues":{"reward_token_address":"0x4e3fbd56cd56c3e72c1403e103b45db9da5b9d2b","new_manager_address":"0x587e432E1503a10D18B85E9De63590a8E5cFef40"}},{"to":"0x107a33019910E57533Ad4F75762d6A958630cA3d","value":"0","data":null,"contractMethod":{"inputs":[{"internalType":"address","name":"reward_token_address","type":"address"},{"internalType":"uint256","name":"_new_rate","type":"uint256"},{"internalType":"address","name":"_gauge_controller_address","type":"address"},{"internalType":"address","name":"_rewards_distributor_address","type":"address"}],"name":"setRewardVars","payable":false},"contractInputsValues":{"reward_token_address":"0x4e3fbd56cd56c3e72c1403e103b45db9da5b9d2b","_new_rate":"0","_gauge_controller_address":"0x0000000000000000000000000000000000000000","_rewards_distributor_address":"0x587e432E1503a10D18B85E9De63590a8E5cFef40"}}]} \ No newline at end of file +{"version":"1.0","chainId":"1","createdAt":1691683895000,"meta":{"name":"Transactions Batch","description":"","txBuilderVersion":"1.14.1","createdFromSafeAddress":"0xB1748C79709f4Ba2Dd82834B8c82D4a505003f27","createdFromOwnerAddress":"","checksum":"0xd02ebaabb0909b6b951b61615b30c6a5ade10d4c66631502848b543288cf64e7"},"transactions":[{"to":"0x2816Ab1F4Db656602b6B0041c006652A4F5D0437","value":"0","data":null,"contractMethod":{"inputs":[{"internalType":"address","name":"reward_token_address","type":"address"},{"internalType":"address","name":"new_manager_address","type":"address"}],"name":"changeTokenManager","payable":false},"contractInputsValues":{"reward_token_address":"0xd533a949740bb3306d119cc777fa900ba034cd52","new_manager_address":"0xfec4856273EE044f0cdDE84EE5Ddd9d7715782c6"}},{"to":"0x76CF35aB1450D3A6c84EdDB8A960A5F65B76e706","value":"0","data":null,"contractMethod":{"inputs":[{"internalType":"address","name":"reward_token_address","type":"address"},{"internalType":"address","name":"new_manager_address","type":"address"}],"name":"changeTokenManager","payable":false},"contractInputsValues":{"reward_token_address":"0xd533a949740bb3306d119cc777fa900ba034cd52","new_manager_address":"0xB757E648aC047e0c64bcD9352dcD0bC054528F29"}},{"to":"0x882B9fad02D1a7436449dcdE9934Eeb9E287909c","value":"0","data":null,"contractMethod":{"inputs":[{"internalType":"address","name":"reward_token_address","type":"address"},{"internalType":"address","name":"new_manager_address","type":"address"}],"name":"changeTokenManager","payable":false},"contractInputsValues":{"reward_token_address":"0xd533a949740bb3306d119cc777fa900ba034cd52","new_manager_address":"0xF415B5B139Cf0f6e7dF5451F84c1481281481AB9"}},{"to":"0x5684d5566bb438D8Ef7B3C1E5da9450cD19C1b9f","value":"0","data":null,"contractMethod":{"inputs":[{"internalType":"address","name":"reward_token_address","type":"address"},{"internalType":"address","name":"new_manager_address","type":"address"}],"name":"changeTokenManager","payable":false},"contractInputsValues":{"reward_token_address":"0xd533a949740bb3306d119cc777fa900ba034cd52","new_manager_address":"0x737bF1D5Be1ff9807e94BC6E4Af4D32eFFa7FA8e"}},{"to":"0x2816Ab1F4Db656602b6B0041c006652A4F5D0437","value":"0","data":null,"contractMethod":{"inputs":[{"internalType":"address","name":"reward_token_address","type":"address"},{"internalType":"uint256","name":"_new_rate","type":"uint256"},{"internalType":"address","name":"_gauge_controller_address","type":"address"},{"internalType":"address","name":"_rewards_distributor_address","type":"address"}],"name":"setRewardVars","payable":false},"contractInputsValues":{"reward_token_address":"0xd533a949740bb3306d119cc777fa900ba034cd52","_new_rate":"0","_gauge_controller_address":"0x0000000000000000000000000000000000000000","_rewards_distributor_address":"0xfec4856273EE044f0cdDE84EE5Ddd9d7715782c6"}},{"to":"0x76CF35aB1450D3A6c84EdDB8A960A5F65B76e706","value":"0","data":null,"contractMethod":{"inputs":[{"internalType":"address","name":"reward_token_address","type":"address"},{"internalType":"uint256","name":"_new_rate","type":"uint256"},{"internalType":"address","name":"_gauge_controller_address","type":"address"},{"internalType":"address","name":"_rewards_distributor_address","type":"address"}],"name":"setRewardVars","payable":false},"contractInputsValues":{"reward_token_address":"0xd533a949740bb3306d119cc777fa900ba034cd52","_new_rate":"0","_gauge_controller_address":"0x0000000000000000000000000000000000000000","_rewards_distributor_address":"0xB757E648aC047e0c64bcD9352dcD0bC054528F29"}},{"to":"0x882B9fad02D1a7436449dcdE9934Eeb9E287909c","value":"0","data":null,"contractMethod":{"inputs":[{"internalType":"address","name":"reward_token_address","type":"address"},{"internalType":"uint256","name":"_new_rate","type":"uint256"},{"internalType":"address","name":"_gauge_controller_address","type":"address"},{"internalType":"address","name":"_rewards_distributor_address","type":"address"}],"name":"setRewardVars","payable":false},"contractInputsValues":{"reward_token_address":"0xd533a949740bb3306d119cc777fa900ba034cd52","_new_rate":"0","_gauge_controller_address":"0x0000000000000000000000000000000000000000","_rewards_distributor_address":"0xF415B5B139Cf0f6e7dF5451F84c1481281481AB9"}},{"to":"0x5684d5566bb438D8Ef7B3C1E5da9450cD19C1b9f","value":"0","data":null,"contractMethod":{"inputs":[{"internalType":"address","name":"reward_token_address","type":"address"},{"internalType":"uint256","name":"_new_rate","type":"uint256"},{"internalType":"address","name":"_gauge_controller_address","type":"address"},{"internalType":"address","name":"_rewards_distributor_address","type":"address"}],"name":"setRewardVars","payable":false},"contractInputsValues":{"reward_token_address":"0xd533a949740bb3306d119cc777fa900ba034cd52","_new_rate":"0","_gauge_controller_address":"0x0000000000000000000000000000000000000000","_rewards_distributor_address":"0x737bF1D5Be1ff9807e94BC6E4Af4D32eFFa7FA8e"}},{"to":"0x2816Ab1F4Db656602b6B0041c006652A4F5D0437","value":"0","data":null,"contractMethod":{"inputs":[{"internalType":"address","name":"reward_token_address","type":"address"},{"internalType":"address","name":"new_manager_address","type":"address"}],"name":"changeTokenManager","payable":false},"contractInputsValues":{"reward_token_address":"0x4e3fbd56cd56c3e72c1403e103b45db9da5b9d2b","new_manager_address":"0xfec4856273EE044f0cdDE84EE5Ddd9d7715782c6"}},{"to":"0x76CF35aB1450D3A6c84EdDB8A960A5F65B76e706","value":"0","data":null,"contractMethod":{"inputs":[{"internalType":"address","name":"reward_token_address","type":"address"},{"internalType":"address","name":"new_manager_address","type":"address"}],"name":"changeTokenManager","payable":false},"contractInputsValues":{"reward_token_address":"0x4e3fbd56cd56c3e72c1403e103b45db9da5b9d2b","new_manager_address":"0xB757E648aC047e0c64bcD9352dcD0bC054528F29"}},{"to":"0x882B9fad02D1a7436449dcdE9934Eeb9E287909c","value":"0","data":null,"contractMethod":{"inputs":[{"internalType":"address","name":"reward_token_address","type":"address"},{"internalType":"address","name":"new_manager_address","type":"address"}],"name":"changeTokenManager","payable":false},"contractInputsValues":{"reward_token_address":"0x4e3fbd56cd56c3e72c1403e103b45db9da5b9d2b","new_manager_address":"0xF415B5B139Cf0f6e7dF5451F84c1481281481AB9"}},{"to":"0x5684d5566bb438D8Ef7B3C1E5da9450cD19C1b9f","value":"0","data":null,"contractMethod":{"inputs":[{"internalType":"address","name":"reward_token_address","type":"address"},{"internalType":"address","name":"new_manager_address","type":"address"}],"name":"changeTokenManager","payable":false},"contractInputsValues":{"reward_token_address":"0x4e3fbd56cd56c3e72c1403e103b45db9da5b9d2b","new_manager_address":"0x737bF1D5Be1ff9807e94BC6E4Af4D32eFFa7FA8e"}},{"to":"0x2816Ab1F4Db656602b6B0041c006652A4F5D0437","value":"0","data":null,"contractMethod":{"inputs":[{"internalType":"address","name":"reward_token_address","type":"address"},{"internalType":"uint256","name":"_new_rate","type":"uint256"},{"internalType":"address","name":"_gauge_controller_address","type":"address"},{"internalType":"address","name":"_rewards_distributor_address","type":"address"}],"name":"setRewardVars","payable":false},"contractInputsValues":{"reward_token_address":"0x4e3fbd56cd56c3e72c1403e103b45db9da5b9d2b","_new_rate":"0","_gauge_controller_address":"0x0000000000000000000000000000000000000000","_rewards_distributor_address":"0xfec4856273EE044f0cdDE84EE5Ddd9d7715782c6"}},{"to":"0x76CF35aB1450D3A6c84EdDB8A960A5F65B76e706","value":"0","data":null,"contractMethod":{"inputs":[{"internalType":"address","name":"reward_token_address","type":"address"},{"internalType":"uint256","name":"_new_rate","type":"uint256"},{"internalType":"address","name":"_gauge_controller_address","type":"address"},{"internalType":"address","name":"_rewards_distributor_address","type":"address"}],"name":"setRewardVars","payable":false},"contractInputsValues":{"reward_token_address":"0x4e3fbd56cd56c3e72c1403e103b45db9da5b9d2b","_new_rate":"0","_gauge_controller_address":"0x0000000000000000000000000000000000000000","_rewards_distributor_address":"0xB757E648aC047e0c64bcD9352dcD0bC054528F29"}},{"to":"0x882B9fad02D1a7436449dcdE9934Eeb9E287909c","value":"0","data":null,"contractMethod":{"inputs":[{"internalType":"address","name":"reward_token_address","type":"address"},{"internalType":"uint256","name":"_new_rate","type":"uint256"},{"internalType":"address","name":"_gauge_controller_address","type":"address"},{"internalType":"address","name":"_rewards_distributor_address","type":"address"}],"name":"setRewardVars","payable":false},"contractInputsValues":{"reward_token_address":"0x4e3fbd56cd56c3e72c1403e103b45db9da5b9d2b","_new_rate":"0","_gauge_controller_address":"0x0000000000000000000000000000000000000000","_rewards_distributor_address":"0xF415B5B139Cf0f6e7dF5451F84c1481281481AB9"}},{"to":"0x5684d5566bb438D8Ef7B3C1E5da9450cD19C1b9f","value":"0","data":null,"contractMethod":{"inputs":[{"internalType":"address","name":"reward_token_address","type":"address"},{"internalType":"uint256","name":"_new_rate","type":"uint256"},{"internalType":"address","name":"_gauge_controller_address","type":"address"},{"internalType":"address","name":"_rewards_distributor_address","type":"address"}],"name":"setRewardVars","payable":false},"contractInputsValues":{"reward_token_address":"0x4e3fbd56cd56c3e72c1403e103b45db9da5b9d2b","_new_rate":"0","_gauge_controller_address":"0x0000000000000000000000000000000000000000","_rewards_distributor_address":"0x737bF1D5Be1ff9807e94BC6E4Af4D32eFFa7FA8e"}}]} \ No newline at end of file diff --git a/src/hardhat/gnosis-safe-scripts/Convex_Farm_Deployments/Step_3_RewDist_Seeding_Sync.js b/src/hardhat/gnosis-safe-scripts/Convex_Farm_Deployments/Step_3_RewDist_Seeding_Sync.js index 595fb03f..adf2448f 100644 --- a/src/hardhat/gnosis-safe-scripts/Convex_Farm_Deployments/Step_3_RewDist_Seeding_Sync.js +++ b/src/hardhat/gnosis-safe-scripts/Convex_Farm_Deployments/Step_3_RewDist_Seeding_Sync.js @@ -45,27 +45,17 @@ async function main() { const thisBlock = await ethers.provider.getBlock(await ethers.provider.getBlockNumber()); const wrapperAddrs = [ - // ADDRS_ETH_LPS['Convex stkcvxfrxETHCRV_New'], - // ADDRS_ETH_LPS['Convex stkcvxfrxETHCVX_New'], - // ADDRS_ETH_LPS['Convex stkcvxfrxETHalETH_New'], - // ADDRS_ETH_LPS['Convex stkcvxfrxETHankrETH_New'], - // ADDRS_ETH_LPS['Convex stkcvxfrxETHcbETH_New'], - // ADDRS_ETH_LPS['Convex stkcvxfrxETHrETH_New'], - // ADDRS_ETH_LPS['Convex stkcvxfrxETHsETH_New'], - // ADDRS_ETH_LPS['Convex stkcvxfrxETHstETH_New'] - ADDRS_ETH_LPS['Convex stkcvxZUSDFRAXBP'] + ADDRS_ETH_LPS['Convex stkcvxfrxETHmsETH'], + ADDRS_ETH_LPS['Convex stkcvxfrxETHrETH_StaFi'], + ADDRS_ETH_LPS['Convex stkcvxfrxETHzETH'], + ADDRS_ETH_LPS['Convex stkcvxGRAIFRAXBP'] ]; const farmAddrs = [ - // ADDRS_ETH_FARMS['Convex stkcvxfrxETHCRV_New'], - // ADDRS_ETH_FARMS['Convex stkcvxfrxETHCVX_New'], - // ADDRS_ETH_FARMS['Convex stkcvxfrxETHalETH_New'], - // ADDRS_ETH_FARMS['Convex stkcvxfrxETHankrETH_New'], - // ADDRS_ETH_FARMS['Convex stkcvxfrxETHcbETH_New'], - // ADDRS_ETH_FARMS['Convex stkcvxfrxETHrETH_New'], - // ADDRS_ETH_FARMS['Convex stkcvxfrxETHsETH_New'], - // ADDRS_ETH_FARMS['Convex stkcvxfrxETHstETH_New'] - ADDRS_ETH_FARMS['Convex stkcvxZUSDFRAXBP'] + ADDRS_ETH_FARMS['Convex stkcvxfrxETHmsETH'], + ADDRS_ETH_FARMS['Convex stkcvxfrxETHrETH_StaFi'], + ADDRS_ETH_FARMS['Convex stkcvxfrxETHzETH'], + ADDRS_ETH_FARMS['Convex stkcvxGRAIFRAXBP'] ]; // =============================================================== diff --git a/src/hardhat/gnosis-safe-scripts/Convex_Farm_Deployments/Step_3_RewDist_Seeding_Sync.json b/src/hardhat/gnosis-safe-scripts/Convex_Farm_Deployments/Step_3_RewDist_Seeding_Sync.json index bbd77d74..c3f2b4cc 100644 --- a/src/hardhat/gnosis-safe-scripts/Convex_Farm_Deployments/Step_3_RewDist_Seeding_Sync.json +++ b/src/hardhat/gnosis-safe-scripts/Convex_Farm_Deployments/Step_3_RewDist_Seeding_Sync.json @@ -1 +1 @@ -{"version":"1.0","chainId":"1","createdAt":1687986623000,"meta":{"name":"Transactions Batch","description":"","txBuilderVersion":"1.14.1","createdFromSafeAddress":"0xB1748C79709f4Ba2Dd82834B8c82D4a505003f27","createdFromOwnerAddress":"","checksum":"0x02fb2bf93ef6b5c0dd7a1a126d4860391ad307bc39ea66adb6b748f39ae05960"},"transactions":[{"to":"0x278dC748edA1d8eFEf1aDFB518542612b49Fcd34","value":"0","data":null,"contractMethod":{"inputs":[{"internalType":"address","name":"_gauge_address","type":"address"},{"internalType":"bool","name":"_is_middleman","type":"bool"},{"internalType":"bool","name":"_is_active","type":"bool"}],"name":"setGaugeState","payable":false},"contractInputsValues":{"_gauge_address":"0x107a33019910E57533Ad4F75762d6A958630cA3d","_is_middleman":"false","_is_active":"true"}},{"to":"0x3432B6A60D23Ca0dFCa7761B7ab56459D9C964D0","value":"0","data":null,"contractMethod":{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","payable":false},"contractInputsValues":{"recipient":"0x107a33019910E57533Ad4F75762d6A958630cA3d","amount":"1000000000000000000"}},{"to":"0x107a33019910E57533Ad4F75762d6A958630cA3d","value":"0","data":null,"contractMethod":{"inputs":[],"name":"sync","payable":false},"contractInputsValues":{}}]} \ No newline at end of file +{"version":"1.0","chainId":"1","createdAt":1691684867000,"meta":{"name":"Transactions Batch","description":"","txBuilderVersion":"1.14.1","createdFromSafeAddress":"0xB1748C79709f4Ba2Dd82834B8c82D4a505003f27","createdFromOwnerAddress":"","checksum":"0x359f88ce43be9e5f2727bb432a7c776c64a90fc5047cb61f379a4b0c1d518bea"},"transactions":[{"to":"0x278dC748edA1d8eFEf1aDFB518542612b49Fcd34","value":"0","data":null,"contractMethod":{"inputs":[{"internalType":"address","name":"_gauge_address","type":"address"},{"internalType":"bool","name":"_is_middleman","type":"bool"},{"internalType":"bool","name":"_is_active","type":"bool"}],"name":"setGaugeState","payable":false},"contractInputsValues":{"_gauge_address":"0x2816Ab1F4Db656602b6B0041c006652A4F5D0437","_is_middleman":"false","_is_active":"true"}},{"to":"0x278dC748edA1d8eFEf1aDFB518542612b49Fcd34","value":"0","data":null,"contractMethod":{"inputs":[{"internalType":"address","name":"_gauge_address","type":"address"},{"internalType":"bool","name":"_is_middleman","type":"bool"},{"internalType":"bool","name":"_is_active","type":"bool"}],"name":"setGaugeState","payable":false},"contractInputsValues":{"_gauge_address":"0x76CF35aB1450D3A6c84EdDB8A960A5F65B76e706","_is_middleman":"false","_is_active":"true"}},{"to":"0x278dC748edA1d8eFEf1aDFB518542612b49Fcd34","value":"0","data":null,"contractMethod":{"inputs":[{"internalType":"address","name":"_gauge_address","type":"address"},{"internalType":"bool","name":"_is_middleman","type":"bool"},{"internalType":"bool","name":"_is_active","type":"bool"}],"name":"setGaugeState","payable":false},"contractInputsValues":{"_gauge_address":"0x882B9fad02D1a7436449dcdE9934Eeb9E287909c","_is_middleman":"false","_is_active":"true"}},{"to":"0x278dC748edA1d8eFEf1aDFB518542612b49Fcd34","value":"0","data":null,"contractMethod":{"inputs":[{"internalType":"address","name":"_gauge_address","type":"address"},{"internalType":"bool","name":"_is_middleman","type":"bool"},{"internalType":"bool","name":"_is_active","type":"bool"}],"name":"setGaugeState","payable":false},"contractInputsValues":{"_gauge_address":"0x5684d5566bb438D8Ef7B3C1E5da9450cD19C1b9f","_is_middleman":"false","_is_active":"true"}},{"to":"0x3432B6A60D23Ca0dFCa7761B7ab56459D9C964D0","value":"0","data":null,"contractMethod":{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","payable":false},"contractInputsValues":{"recipient":"0x2816Ab1F4Db656602b6B0041c006652A4F5D0437","amount":"1000000000000000000"}},{"to":"0x3432B6A60D23Ca0dFCa7761B7ab56459D9C964D0","value":"0","data":null,"contractMethod":{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","payable":false},"contractInputsValues":{"recipient":"0x76CF35aB1450D3A6c84EdDB8A960A5F65B76e706","amount":"1000000000000000000"}},{"to":"0x3432B6A60D23Ca0dFCa7761B7ab56459D9C964D0","value":"0","data":null,"contractMethod":{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","payable":false},"contractInputsValues":{"recipient":"0x882B9fad02D1a7436449dcdE9934Eeb9E287909c","amount":"1000000000000000000"}},{"to":"0x3432B6A60D23Ca0dFCa7761B7ab56459D9C964D0","value":"0","data":null,"contractMethod":{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","payable":false},"contractInputsValues":{"recipient":"0x5684d5566bb438D8Ef7B3C1E5da9450cD19C1b9f","amount":"1000000000000000000"}},{"to":"0x2816Ab1F4Db656602b6B0041c006652A4F5D0437","value":"0","data":null,"contractMethod":{"inputs":[],"name":"sync","payable":false},"contractInputsValues":{}},{"to":"0x76CF35aB1450D3A6c84EdDB8A960A5F65B76e706","value":"0","data":null,"contractMethod":{"inputs":[],"name":"sync","payable":false},"contractInputsValues":{}},{"to":"0x882B9fad02D1a7436449dcdE9934Eeb9E287909c","value":"0","data":null,"contractMethod":{"inputs":[],"name":"sync","payable":false},"contractInputsValues":{}},{"to":"0x5684d5566bb438D8Ef7B3C1E5da9450cD19C1b9f","value":"0","data":null,"contractMethod":{"inputs":[],"name":"sync","payable":false},"contractInputsValues":{}}]} \ No newline at end of file diff --git a/src/hardhat/gnosis-safe-scripts/Frax_Comptroller_Routine/Sunday_Part_1.js b/src/hardhat/gnosis-safe-scripts/Frax_Comptroller_Routine/Sunday_Part_1.js index 449ae02e..a2dfd108 100644 --- a/src/hardhat/gnosis-safe-scripts/Frax_Comptroller_Routine/Sunday_Part_1.js +++ b/src/hardhat/gnosis-safe-scripts/Frax_Comptroller_Routine/Sunday_Part_1.js @@ -121,70 +121,70 @@ async function main() { const cvx_total_supply = BigNumber.from(await cvx.totalSupply()); // console.log(cvx_total_supply.toString()); - // Get CRV rewards - const IConvexAMO_Old_json_path = path.join(__dirname, '../../artifacts/contracts/Misc_AMOs/IConvexAMO_Old.sol/IConvexAMO_Old.json'); - const { abi: IConvexAMO_Old_ABI } = JSON.parse( await fse.readFileSync(IConvexAMO_Old_json_path, 'utf-8')); - const convex_amo = new ethers.Contract("0x49ee75278820f409ecd67063D8D717B38d66bd71", IConvexAMO_Old_ABI).connect(owner); - const convex_amo_rewards = await convex_amo.showRewards(); - const crv_from_convex_amo = BigNumber.from(convex_amo_rewards[0]); - const cvx_from_convex_amo = GetCVXMintAmount(crv_from_convex_amo, cvx_total_supply); - console.log(`----------- Convex AMO (FRAX3CRV) -----------`); - console.log(`CRV: ${formatUnits(crv_from_convex_amo, 18)}`); - console.log(`CVX: ${formatUnits(cvx_from_convex_amo, 18)}`); - summary_info.crv_to_sell = summary_info.crv_to_sell.add(crv_from_convex_amo); - summary_info.cvx_to_lock = summary_info.cvx_to_lock.add(cvx_from_convex_amo); + // // Get CRV rewards + // const IConvexAMO_Old_json_path = path.join(__dirname, '../../artifacts/contracts/Misc_AMOs/IConvexAMO_Old.sol/IConvexAMO_Old.json'); + // const { abi: IConvexAMO_Old_ABI } = JSON.parse( await fse.readFileSync(IConvexAMO_Old_json_path, 'utf-8')); + // const convex_amo = new ethers.Contract("0x49ee75278820f409ecd67063D8D717B38d66bd71", IConvexAMO_Old_ABI).connect(owner); + // const convex_amo_rewards = await convex_amo.showRewards(); + // const crv_from_convex_amo = BigNumber.from(convex_amo_rewards[0]); + // const cvx_from_convex_amo = GetCVXMintAmount(crv_from_convex_amo, cvx_total_supply); + // console.log(`----------- Convex AMO (FRAX3CRV) -----------`); + // console.log(`CRV: ${formatUnits(crv_from_convex_amo, 18)}`); + // console.log(`CVX: ${formatUnits(cvx_from_convex_amo, 18)}`); + // summary_info.crv_to_sell = summary_info.crv_to_sell.add(crv_from_convex_amo); + // summary_info.cvx_to_lock = summary_info.cvx_to_lock.add(cvx_from_convex_amo); - batch_json.transactions.push({ - "to": "0x49ee75278820f409ecd67063D8D717B38d66bd71", - "value": "0", - "data": null, - "contractMethod": { - "inputs": [], - "name": "claimRewardsFRAX3CRV", - "payable": false - }, - "contractInputsValues": null - }); + // batch_json.transactions.push({ + // "to": "0x49ee75278820f409ecd67063D8D717B38d66bd71", + // "value": "0", + // "data": null, + // "contractMethod": { + // "inputs": [], + // "name": "claimRewardsFRAX3CRV", + // "payable": false + // }, + // "contractInputsValues": null + // }); - // Convex AMO rewards (withdraw) - // ===================================== - batch_json.transactions.push({ - "to": "0x49ee75278820f409ecd67063D8D717B38d66bd71", - "value": "0", - "data": null, - "contractMethod": { - "inputs": [ - { - "internalType": "uint256", - "name": "crv_amt", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "cvx_amt", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "cvxCRV_amt", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "fxs_amt", - "type": "uint256" - } - ], - "name": "withdrawRewards", - "payable": false - }, - "contractInputsValues": { - "crv_amt": crv_from_convex_amo.toString(), - "cvx_amt": cvx_from_convex_amo.toString(), - "cvxCRV_amt": "0", - "fxs_amt": "0", - } - }); + // // Convex AMO rewards (withdraw) + // // ===================================== + // batch_json.transactions.push({ + // "to": "0x49ee75278820f409ecd67063D8D717B38d66bd71", + // "value": "0", + // "data": null, + // "contractMethod": { + // "inputs": [ + // { + // "internalType": "uint256", + // "name": "crv_amt", + // "type": "uint256" + // }, + // { + // "internalType": "uint256", + // "name": "cvx_amt", + // "type": "uint256" + // }, + // { + // "internalType": "uint256", + // "name": "cvxCRV_amt", + // "type": "uint256" + // }, + // { + // "internalType": "uint256", + // "name": "fxs_amt", + // "type": "uint256" + // } + // ], + // "name": "withdrawRewards", + // "payable": false + // }, + // "contractInputsValues": { + // "crv_amt": crv_from_convex_amo.toString(), + // "cvx_amt": cvx_from_convex_amo.toString(), + // "cvxCRV_amt": "0", + // "fxs_amt": "0", + // } + // }); // Curve Voter Proxy (withdraw 3CRV rewards) // TODO @@ -218,9 +218,10 @@ async function main() { const convex_frax_usdc_rewards = await convex_frax_usdc_staking_proxy.earned(); const crv_from_convex_frax_usdc = BigNumber.from(convex_frax_usdc_rewards[1][1]); const cvx_from_convex_frax_usdc = BigNumber.from(convex_frax_usdc_rewards[1][2]); - // FRAXBP rewards: 50% of CRV and 100% of CVX is saved/reinvested - summary_info.crv_to_save = summary_info.crv_to_save.add(crv_from_convex_frax_usdc.mul(50).div(100)); - summary_info.crv_to_sell = summary_info.crv_to_sell.add(crv_from_convex_frax_usdc.mul(50).div(100)); + + // FRAXBP rewards: 33.3% of CRV and 100% of CVX is saved/reinvested + summary_info.crv_to_save = summary_info.crv_to_save.add(crv_from_convex_frax_usdc.mul(333).div(1000)); + summary_info.crv_to_sell = summary_info.crv_to_sell.add(crv_from_convex_frax_usdc.mul(666).div(1000)); summary_info.cvx_to_lock = summary_info.cvx_to_lock.add(cvx_from_convex_frax_usdc); console.log(`----------- Convex Frax FRAX/USDC (stkcvxFRAXBP) -----------`); console.log(`CRV: ${formatUnits(crv_from_convex_frax_usdc, 18)}`); @@ -239,30 +240,30 @@ async function main() { "contractInputsValues": null }); - // Convex Frax Frax/FPI (stkcvxFPIFRAX) rewards - const convex_frax_fpi_staking_proxy = new ethers.Contract("0x2df2378103baB456457329D4C603440B92b9c0bd", IStakingProxyConvex_ABI).connect(owner); - const convex_frax_fpi_rewards = await convex_frax_fpi_staking_proxy.earned(); - const crv_from_convex_frax_fpi = BigNumber.from(convex_frax_fpi_rewards[1][1]); - const cvx_from_convex_frax_fpi = BigNumber.from(convex_frax_fpi_rewards[1][2]); - summary_info.crv_to_sell = summary_info.crv_to_sell.add(crv_from_convex_frax_fpi); - summary_info.cvx_to_sell = summary_info.cvx_to_sell.add(cvx_from_convex_frax_fpi); - console.log(`----------- Convex Frax FRAX/FPI (stkcvxFPIFRAX) -----------`); - console.log(`CRV: ${formatUnits(crv_from_convex_frax_fpi, 18)}`); - console.log(`CVX: ${formatUnits(cvx_from_convex_frax_fpi, 18)}`); - // ===================================== - batch_json.transactions.push({ - "to": "0x2df2378103baB456457329D4C603440B92b9c0bd", - "value": "0", - "data": null, - "contractMethod": { - "inputs": [], - "name": "getReward", - "payable": false - }, - "contractInputsValues": null - }); + // // Convex Frax Frax/FPI (stkcvxFPIFRAX) rewards + // const convex_frax_fpi_staking_proxy = new ethers.Contract("0x2df2378103baB456457329D4C603440B92b9c0bd", IStakingProxyConvex_ABI).connect(owner); + // const convex_frax_fpi_rewards = await convex_frax_fpi_staking_proxy.earned(); + // const crv_from_convex_frax_fpi = BigNumber.from(convex_frax_fpi_rewards[1][1]); + // const cvx_from_convex_frax_fpi = BigNumber.from(convex_frax_fpi_rewards[1][2]); + // summary_info.crv_to_sell = summary_info.crv_to_sell.add(crv_from_convex_frax_fpi); + // summary_info.cvx_to_sell = summary_info.cvx_to_sell.add(cvx_from_convex_frax_fpi); + // console.log(`----------- Convex Frax FRAX/FPI (stkcvxFPIFRAX) -----------`); + // console.log(`CRV: ${formatUnits(crv_from_convex_frax_fpi, 18)}`); + // console.log(`CVX: ${formatUnits(cvx_from_convex_frax_fpi, 18)}`); + // // ===================================== + // batch_json.transactions.push({ + // "to": "0x2df2378103baB456457329D4C603440B92b9c0bd", + // "value": "0", + // "data": null, + // "contractMethod": { + // "inputs": [], + // "name": "getReward", + // "payable": false + // }, + // "contractInputsValues": null + // }); - // Convex Curve Claim All (excluding cvxCRV and locked CVX) + // Convex Curve (cvxLP) Claim All (excluding cvxCRV and locked CVX) // ===================================== const IConvexBaseRewardPool = path.join(__dirname, '../../artifacts/contracts/Misc_AMOs/convex/IConvexBaseRewardPool.sol/IConvexBaseRewardPool.json'); const { abi: IConvexBaseRewardPool_ABI } = JSON.parse( await fse.readFileSync(IConvexBaseRewardPool, 'utf-8')); @@ -280,7 +281,8 @@ async function main() { convex_cvxgusd_frax3CRV.earned("0xB1748C79709f4Ba2Dd82834B8c82D4a505003f27"), convex_cvxlusd_frax3CRV.earned("0xB1748C79709f4Ba2Dd82834B8c82D4a505003f27"), ]) - // FRAXBP rewards get saved/reinvested, everything else is selled. + + // FRAXBP rewards get saved/reinvested, everything else is sold. // CRV summary_info.crv_to_save = summary_info.crv_to_save.add(cvx_crv_claim_all_rews[0]); summary_info.crv_to_sell = summary_info.crv_to_sell @@ -793,9 +795,9 @@ async function main() { // =============================================================================== // ============================= CALCULATE SELL STUFF ============================ // =============================================================================== - // CRV - summary_info.crv_to_convert_to_cvxcrv = summary_info.crv_to_save.mul(90).div(100); // 90% - summary_info.crv_to_send_to_curve_voter_proxy = summary_info.crv_to_save.mul(10).div(100); // 10% + // CRV (For SAVED CRV, 100% goes to voter proxy for now. We are not adding to our cvxCRV stake) + summary_info.crv_to_convert_to_cvxcrv = summary_info.crv_to_save.mul(0).div(100); // 0% + summary_info.crv_to_send_to_curve_voter_proxy = summary_info.crv_to_save.mul(100).div(100); // 100% summary_info.crv_to_save = BigNumber.from(0); console.log(`\n----------- Post Reward Collection Status -----------`); @@ -900,109 +902,112 @@ async function main() { // ======================== HANDLE CVXCRV ======================== // =============================================================== - // Swap CRV for cvxCRV - // ===================================== - const I2PoolcvxCRVCRV_json_path = path.join(__dirname, '../../artifacts/contracts/Misc_AMOs/curve/I2PoolcvxCRVCRV.sol/I2PoolcvxCRVCRV.json'); - const { abi: I2PoolcvxCRVCRV_ABI } = JSON.parse( await fse.readFileSync(I2PoolcvxCRVCRV_json_path, 'utf-8')); - let cvxcrvcrv = new ethers.Contract("0x971add32ea87f10bd192671630be3be8a11b8623", I2PoolcvxCRVCRV_ABI).connect(owner); - const est_cvxcrv_out = await cvxcrvcrv.get_dy(0, 1, summary_info.crv_to_convert_to_cvxcrv); - const slipped_cvxcrv_out = est_cvxcrv_out.mul(9997).div(10000); // 0.03% slippage - batch_json.transactions.push({ - "to": "0x971add32ea87f10bd192671630be3be8a11b8623", - "value": "0", - "data": null, - "contractMethod": { - "inputs": [ - { - "name": "i", - "type": "int128" - }, - { - "name": "j", - "type": "int128" - }, - { - "name": "_dx", - "type": "uint256" - }, - { - "name": "_min_dy", - "type": "uint256" - } - ], - "name": "exchange", - "payable": false - }, - "contractInputsValues": { - "i": "0", - "j": "1", - "_dx": summary_info.crv_to_convert_to_cvxcrv.toString(), - "_min_dy": slipped_cvxcrv_out.toString(), - } - }); - summary_info.crv_to_convert_to_cvxcrv = BigNumber.from(0); - summary_info.cvxcrv_direct_collected = summary_info.cvxcrv_direct_collected.add(slipped_cvxcrv_out); - - // Lock the cvxCRV in Convex (approve) - // ===================================== - batch_json.transactions.push({ - "to": "0x62B9c7356A2Dc64a1969e19C23e4f579F9810Aa7", - "value": "0", - "data": null, - "contractMethod": { - "inputs": [ - { - "internalType": "address", - "name": "spender", - "type": "address" - }, - { - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "name": "approve", - "payable": false - }, - "contractInputsValues": { - "spender": "0xaa0C3f5F7DFD688C6E646F66CD2a6B66ACdbE434", - "amount": summary_info.cvxcrv_direct_collected.toString() - } - }); - - // Lock the cvxCRV in Convex (stake) - // ===================================== - batch_json.transactions.push({ - "to": "0xaa0C3f5F7DFD688C6E646F66CD2a6B66ACdbE434", - "value": "0", - "data": null, - "contractMethod": { - "inputs": [ - { - "internalType": "uint256", - "name": "_amount", - "type": "uint256" - }, - { - "internalType": "address", - "name": "_to", - "type": "address" - } - ], - "name": "stake", - "payable": false - }, - "contractInputsValues": { - "_amount": summary_info.cvxcrv_direct_collected.toString(), - "_to": "0xB1748C79709f4Ba2Dd82834B8c82D4a505003f27", - } - }); - summary_info.crv_to_convert_to_cvxcrv = BigNumber.from(0); - summary_info.cvxcrv_direct_collected = BigNumber.from(0); - - console.log(`\n----------- Post cvxCRV Handling Status -----------`); - console.log(summary_info); + // // Swap CRV for cvxCRV + // // ===================================== + // if (summary_info.crv_to_convert_to_cvxcrv.gt(BigNumber.from(0))) { + // const I2PoolcvxCRVCRV_json_path = path.join(__dirname, '../../artifacts/contracts/Misc_AMOs/curve/I2PoolcvxCRVCRV.sol/I2PoolcvxCRVCRV.json'); + // const { abi: I2PoolcvxCRVCRV_ABI } = JSON.parse( await fse.readFileSync(I2PoolcvxCRVCRV_json_path, 'utf-8')); + // let cvxcrvcrv = new ethers.Contract("0x971add32ea87f10bd192671630be3be8a11b8623", I2PoolcvxCRVCRV_ABI).connect(owner); + // const est_cvxcrv_out = await cvxcrvcrv.get_dy(0, 1, summary_info.crv_to_convert_to_cvxcrv); + // const slipped_cvxcrv_out = est_cvxcrv_out.mul(9997).div(10000); // 0.03% slippage + // batch_json.transactions.push({ + // "to": "0x971add32ea87f10bd192671630be3be8a11b8623", + // "value": "0", + // "data": null, + // "contractMethod": { + // "inputs": [ + // { + // "name": "i", + // "type": "int128" + // }, + // { + // "name": "j", + // "type": "int128" + // }, + // { + // "name": "_dx", + // "type": "uint256" + // }, + // { + // "name": "_min_dy", + // "type": "uint256" + // } + // ], + // "name": "exchange", + // "payable": false + // }, + // "contractInputsValues": { + // "i": "0", + // "j": "1", + // "_dx": summary_info.crv_to_convert_to_cvxcrv.toString(), + // "_min_dy": slipped_cvxcrv_out.toString(), + // } + // }); + // summary_info.crv_to_convert_to_cvxcrv = BigNumber.from(0); + // summary_info.cvxcrv_direct_collected = summary_info.cvxcrv_direct_collected.add(slipped_cvxcrv_out); + + // // Lock the cvxCRV in Convex (approve) + // // ===================================== + // batch_json.transactions.push({ + // "to": "0x62B9c7356A2Dc64a1969e19C23e4f579F9810Aa7", + // "value": "0", + // "data": null, + // "contractMethod": { + // "inputs": [ + // { + // "internalType": "address", + // "name": "spender", + // "type": "address" + // }, + // { + // "internalType": "uint256", + // "name": "amount", + // "type": "uint256" + // } + // ], + // "name": "approve", + // "payable": false + // }, + // "contractInputsValues": { + // "spender": "0xaa0C3f5F7DFD688C6E646F66CD2a6B66ACdbE434", + // "amount": summary_info.cvxcrv_direct_collected.toString() + // } + // }); + + // // Lock the cvxCRV in Convex (stake) + // // ===================================== + // batch_json.transactions.push({ + // "to": "0xaa0C3f5F7DFD688C6E646F66CD2a6B66ACdbE434", + // "value": "0", + // "data": null, + // "contractMethod": { + // "inputs": [ + // { + // "internalType": "uint256", + // "name": "_amount", + // "type": "uint256" + // }, + // { + // "internalType": "address", + // "name": "_to", + // "type": "address" + // } + // ], + // "name": "stake", + // "payable": false + // }, + // "contractInputsValues": { + // "_amount": summary_info.cvxcrv_direct_collected.toString(), + // "_to": "0xB1748C79709f4Ba2Dd82834B8c82D4a505003f27", + // } + // }); + // summary_info.crv_to_convert_to_cvxcrv = BigNumber.from(0); + // summary_info.cvxcrv_direct_collected = BigNumber.from(0); + + // console.log(`\n----------- Post cvxCRV Handling Status -----------`); + // console.log(summary_info); + // } + // =============================================================== diff --git a/src/hardhat/gnosis-safe-scripts/Frax_Comptroller_Routine/Sunday_Part_1.json b/src/hardhat/gnosis-safe-scripts/Frax_Comptroller_Routine/Sunday_Part_1.json index 03e053bc..5af39765 100644 --- a/src/hardhat/gnosis-safe-scripts/Frax_Comptroller_Routine/Sunday_Part_1.json +++ b/src/hardhat/gnosis-safe-scripts/Frax_Comptroller_Routine/Sunday_Part_1.json @@ -1 +1 @@ -{"version":"1.0","chainId":"1","createdAt":1689622811000,"meta":{"name":"Transactions Batch","description":"","txBuilderVersion":"1.14.1","createdFromSafeAddress":"0xB1748C79709f4Ba2Dd82834B8c82D4a505003f27","createdFromOwnerAddress":"","checksum":"0xfe9dc9634a1002523c79a956b8a743386d17c8f88b97ebc7d1b78ba5bea3d394"},"transactions":[{"to":"0x49ee75278820f409ecd67063D8D717B38d66bd71","value":"0","data":null,"contractMethod":{"inputs":[],"name":"claimRewardsFRAX3CRV","payable":false},"contractInputsValues":null},{"to":"0x49ee75278820f409ecd67063D8D717B38d66bd71","value":"0","data":null,"contractMethod":{"inputs":[{"internalType":"uint256","name":"crv_amt","type":"uint256"},{"internalType":"uint256","name":"cvx_amt","type":"uint256"},{"internalType":"uint256","name":"cvxCRV_amt","type":"uint256"},{"internalType":"uint256","name":"fxs_amt","type":"uint256"}],"name":"withdrawRewards","payable":false},"contractInputsValues":{"crv_amt":"28831671402902644089391","cvx_amt":"432475071043539661340","cvxCRV_amt":"0","fxs_amt":"0"}},{"to":"0x2AA609715488B09EFA93883759e8B089FBa11296","value":"0","data":null,"contractMethod":{"inputs":[],"name":"getReward","payable":false},"contractInputsValues":null},{"to":"0x2df2378103baB456457329D4C603440B92b9c0bd","value":"0","data":null,"contractMethod":{"inputs":[],"name":"getReward","payable":false},"contractInputsValues":null},{"to":"0x3f29cB4111CbdA8081642DA1f75B3c12DECf2516","value":"0","data":null,"contractMethod":{"inputs":[{"internalType":"address[]","name":"rewardContracts","type":"address[]"},{"internalType":"address[]","name":"extraRewardContracts","type":"address[]"},{"internalType":"address[]","name":"tokenRewardContracts","type":"address[]"},{"internalType":"address[]","name":"tokenRewardTokens","type":"address[]"},{"internalType":"uint256","name":"depositCrvMaxAmount","type":"uint256"},{"internalType":"uint256","name":"minAmountOut","type":"uint256"},{"internalType":"uint256","name":"depositCvxMaxAmount","type":"uint256"},{"internalType":"uint256","name":"spendCvxAmount","type":"uint256"},{"internalType":"uint256","name":"options","type":"uint256"}],"name":"claimRewards","payable":false},"contractInputsValues":{"rewardContracts":"[\"0x7e880867363A7e321f5d260Cade2B0Bb2F717B02\", \"0x6991C1CD588c4e6f6f1de3A0bac5B8BbAb7aAF6d\", \"0x26598e3E511ADFadefD70ab2C3475Ff741741104\", \"0x47809eE386D1dEC29c0b13f21ba30F564517538B\", \"0x053e1dad223A206e6BCa24C77786bb69a10e427d\"]","extraRewardContracts":"[]","tokenRewardContracts":"[]","tokenRewardTokens":"[]","depositCrvMaxAmount":"0","minAmountOut":"0","depositCvxMaxAmount":"0","spendCvxAmount":"0","options":"0"}},{"to":"0xaa0C3f5F7DFD688C6E646F66CD2a6B66ACdbE434","value":"0","data":null,"contractMethod":{"inputs":[{"internalType":"address","name":"_account","type":"address"}],"name":"getReward","payable":false},"contractInputsValues":{"_account":"0xB1748C79709f4Ba2Dd82834B8c82D4a505003f27"}},{"to":"0x72a19342e8F1838460eBFCCEf09F6585e32db86E","value":"0","data":null,"contractMethod":{"inputs":[{"internalType":"address","name":"_account","type":"address"}],"name":"getReward","payable":false},"contractInputsValues":{"_account":"0xB1748C79709f4Ba2Dd82834B8c82D4a505003f27"}},{"to":"0x72a19342e8F1838460eBFCCEf09F6585e32db86E","value":"0","data":null,"contractMethod":{"inputs":[{"internalType":"bool","name":"_relock","type":"bool"}],"name":"processExpiredLocks","payable":false},"contractInputsValues":{"_relock":true}},{"to":"0x5E8422345238F34275888049021821E8E08CAa1f","value":"0","data":null,"contractMethod":{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","payable":false},"contractInputsValues":{"spender":"0xac3E018457B222d93114458476f3E3416Abbe38F","amount":"18430091742544040154"}},{"to":"0xac3E018457B222d93114458476f3E3416Abbe38F","value":"0","data":null,"contractMethod":{"inputs":[{"internalType":"uint256","name":"assets","type":"uint256"},{"internalType":"address","name":"receiver","type":"address"}],"name":"deposit","payable":false},"contractInputsValues":{"assets":"18430091742544040154","receiver":"0xB1748C79709f4Ba2Dd82834B8c82D4a505003f27"}},{"to":"0x358fE82370a1B9aDaE2E3ad69D6cF9e503c96018","value":"0","data":null,"contractMethod":{"inputs":[{"internalType":"address","name":"gauge_addr","type":"address"}],"name":"mint","payable":false},"contractInputsValues":{"gauge_addr":"0xB2Ac3382dA625eb41Fc803b57743f941a484e2a6"}},{"to":"0x3814307b86b54b1d8e7B2Ac34662De9125F8f4E6","value":"0","data":null,"contractMethod":{"inputs":[],"name":"collectFees","payable":false},"contractInputsValues":null},{"to":"0xD533a949740bb3306d119CC777fa900bA034cd52","value":"0","data":null,"contractMethod":{"inputs":[{"name":"_to","type":"address"},{"name":"_value","type":"uint256"}],"name":"transfer","payable":false},"contractInputsValues":{"_to":"0x847FA1A5337C7f24D7066E467F2e2A0f969Ca79F","_value":"9855243415995992946329"}},{"to":"0x847FA1A5337C7f24D7066E467F2e2A0f969Ca79F","value":"0","data":null,"contractMethod":{"inputs":[{"internalType":"uint256","name":"_value","type":"uint256"}],"name":"increaseAmount","payable":false},"contractInputsValues":{"_value":"9855243415995992946329"}},{"to":"0x72a19342e8F1838460eBFCCEf09F6585e32db86E","value":"0","data":null,"contractMethod":{"inputs":[{"internalType":"address","name":"_account","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"},{"internalType":"uint256","name":"_spendRatio","type":"uint256"}],"name":"lock","payable":false},"contractInputsValues":{"_account":"0xB1748C79709f4Ba2Dd82834B8c82D4a505003f27","_amount":"3389048095842337545238","_spendRatio":"0"}},{"to":"0x971add32ea87f10bd192671630be3be8a11b8623","value":"0","data":null,"contractMethod":{"inputs":[{"name":"i","type":"int128"},{"name":"j","type":"int128"},{"name":"_dx","type":"uint256"},{"name":"_min_dy","type":"uint256"}],"name":"exchange","payable":false},"contractInputsValues":{"i":"0","j":"1","_dx":"88697190743963936516965","_min_dy":"90641041283212669344076"}},{"to":"0x62B9c7356A2Dc64a1969e19C23e4f579F9810Aa7","value":"0","data":null,"contractMethod":{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","payable":false},"contractInputsValues":{"spender":"0xaa0C3f5F7DFD688C6E646F66CD2a6B66ACdbE434","amount":"101100450192064931506281"}},{"to":"0xaa0C3f5F7DFD688C6E646F66CD2a6B66ACdbE434","value":"0","data":null,"contractMethod":{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"},{"internalType":"address","name":"_to","type":"address"}],"name":"stake","payable":false},"contractInputsValues":{"_amount":"101100450192064931506281","_to":"0xB1748C79709f4Ba2Dd82834B8c82D4a505003f27"}}]} \ No newline at end of file +{"version":"1.0","chainId":"1","createdAt":1693775939000,"meta":{"name":"Transactions Batch","description":"","txBuilderVersion":"1.14.1","createdFromSafeAddress":"0xB1748C79709f4Ba2Dd82834B8c82D4a505003f27","createdFromOwnerAddress":"","checksum":"0xe2535b158543e63b5f29a7b86f77643e538dad5e2c9677d982e22f2ee236d72c"},"transactions":[{"to":"0x2AA609715488B09EFA93883759e8B089FBa11296","value":"0","data":null,"contractMethod":{"inputs":[],"name":"getReward","payable":false},"contractInputsValues":null},{"to":"0x3f29cB4111CbdA8081642DA1f75B3c12DECf2516","value":"0","data":null,"contractMethod":{"inputs":[{"internalType":"address[]","name":"rewardContracts","type":"address[]"},{"internalType":"address[]","name":"extraRewardContracts","type":"address[]"},{"internalType":"address[]","name":"tokenRewardContracts","type":"address[]"},{"internalType":"address[]","name":"tokenRewardTokens","type":"address[]"},{"internalType":"uint256","name":"depositCrvMaxAmount","type":"uint256"},{"internalType":"uint256","name":"minAmountOut","type":"uint256"},{"internalType":"uint256","name":"depositCvxMaxAmount","type":"uint256"},{"internalType":"uint256","name":"spendCvxAmount","type":"uint256"},{"internalType":"uint256","name":"options","type":"uint256"}],"name":"claimRewards","payable":false},"contractInputsValues":{"rewardContracts":"[\"0x7e880867363A7e321f5d260Cade2B0Bb2F717B02\", \"0x6991C1CD588c4e6f6f1de3A0bac5B8BbAb7aAF6d\", \"0x26598e3E511ADFadefD70ab2C3475Ff741741104\", \"0x47809eE386D1dEC29c0b13f21ba30F564517538B\", \"0x053e1dad223A206e6BCa24C77786bb69a10e427d\"]","extraRewardContracts":"[]","tokenRewardContracts":"[]","tokenRewardTokens":"[]","depositCrvMaxAmount":"0","minAmountOut":"0","depositCvxMaxAmount":"0","spendCvxAmount":"0","options":"0"}},{"to":"0xaa0C3f5F7DFD688C6E646F66CD2a6B66ACdbE434","value":"0","data":null,"contractMethod":{"inputs":[{"internalType":"address","name":"_account","type":"address"}],"name":"getReward","payable":false},"contractInputsValues":{"_account":"0xB1748C79709f4Ba2Dd82834B8c82D4a505003f27"}},{"to":"0x72a19342e8F1838460eBFCCEf09F6585e32db86E","value":"0","data":null,"contractMethod":{"inputs":[{"internalType":"address","name":"_account","type":"address"}],"name":"getReward","payable":false},"contractInputsValues":{"_account":"0xB1748C79709f4Ba2Dd82834B8c82D4a505003f27"}},{"to":"0x72a19342e8F1838460eBFCCEf09F6585e32db86E","value":"0","data":null,"contractMethod":{"inputs":[{"internalType":"bool","name":"_relock","type":"bool"}],"name":"processExpiredLocks","payable":false},"contractInputsValues":{"_relock":true}},{"to":"0x5E8422345238F34275888049021821E8E08CAa1f","value":"0","data":null,"contractMethod":{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","payable":false},"contractInputsValues":{"spender":"0xac3E018457B222d93114458476f3E3416Abbe38F","amount":"17574000000000000000"}},{"to":"0xac3E018457B222d93114458476f3E3416Abbe38F","value":"0","data":null,"contractMethod":{"inputs":[{"internalType":"uint256","name":"assets","type":"uint256"},{"internalType":"address","name":"receiver","type":"address"}],"name":"deposit","payable":false},"contractInputsValues":{"assets":"17574000000000000000","receiver":"0xB1748C79709f4Ba2Dd82834B8c82D4a505003f27"}},{"to":"0x358fE82370a1B9aDaE2E3ad69D6cF9e503c96018","value":"0","data":null,"contractMethod":{"inputs":[{"internalType":"address","name":"gauge_addr","type":"address"}],"name":"mint","payable":false},"contractInputsValues":{"gauge_addr":"0xB2Ac3382dA625eb41Fc803b57743f941a484e2a6"}},{"to":"0x3814307b86b54b1d8e7B2Ac34662De9125F8f4E6","value":"0","data":null,"contractMethod":{"inputs":[],"name":"collectFees","payable":false},"contractInputsValues":null},{"to":"0xC36442b4a4522E871399CD717aBDD847Ab11FE88","value":"0","data":null,"contractMethod":{"inputs":[{"components":[{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint128","name":"amount0Max","type":"uint128"},{"internalType":"uint128","name":"amount1Max","type":"uint128"}],"internalType":"struct INonfungiblePositionManager.CollectParams","name":"params","type":"tuple"}],"name":"collect","payable":true},"contractInputsValues":{"params":"[\"215775\",\"0xB1748C79709f4Ba2Dd82834B8c82D4a505003f27\",\"340282366920938463463374607431768211455\",\"340282366920938463463374607431768211455\"]"}},{"to":"0xC36442b4a4522E871399CD717aBDD847Ab11FE88","value":"0","data":null,"contractMethod":{"inputs":[{"components":[{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint128","name":"amount0Max","type":"uint128"},{"internalType":"uint128","name":"amount1Max","type":"uint128"}],"internalType":"struct INonfungiblePositionManager.CollectParams","name":"params","type":"tuple"}],"name":"collect","payable":true},"contractInputsValues":{"params":"[\"219036\",\"0xB1748C79709f4Ba2Dd82834B8c82D4a505003f27\",\"340282366920938463463374607431768211455\",\"340282366920938463463374607431768211455\"]"}},{"to":"0xC36442b4a4522E871399CD717aBDD847Ab11FE88","value":"0","data":null,"contractMethod":{"inputs":[{"components":[{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint128","name":"amount0Max","type":"uint128"},{"internalType":"uint128","name":"amount1Max","type":"uint128"}],"internalType":"struct INonfungiblePositionManager.CollectParams","name":"params","type":"tuple"}],"name":"collect","payable":true},"contractInputsValues":{"params":"[\"219099\",\"0xB1748C79709f4Ba2Dd82834B8c82D4a505003f27\",\"340282366920938463463374607431768211455\",\"340282366920938463463374607431768211455\"]"}},{"to":"0xC36442b4a4522E871399CD717aBDD847Ab11FE88","value":"0","data":null,"contractMethod":{"inputs":[{"components":[{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint128","name":"amount0Max","type":"uint128"},{"internalType":"uint128","name":"amount1Max","type":"uint128"}],"internalType":"struct INonfungiblePositionManager.CollectParams","name":"params","type":"tuple"}],"name":"collect","payable":true},"contractInputsValues":{"params":"[\"304636\",\"0xB1748C79709f4Ba2Dd82834B8c82D4a505003f27\",\"340282366920938463463374607431768211455\",\"340282366920938463463374607431768211455\"]"}},{"to":"0xC36442b4a4522E871399CD717aBDD847Ab11FE88","value":"0","data":null,"contractMethod":{"inputs":[{"components":[{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint128","name":"amount0Max","type":"uint128"},{"internalType":"uint128","name":"amount1Max","type":"uint128"}],"internalType":"struct INonfungiblePositionManager.CollectParams","name":"params","type":"tuple"}],"name":"collect","payable":true},"contractInputsValues":{"params":"[\"419023\",\"0xB1748C79709f4Ba2Dd82834B8c82D4a505003f27\",\"340282366920938463463374607431768211455\",\"340282366920938463463374607431768211455\"]"}},{"to":"0xD533a949740bb3306d119CC777fa900bA034cd52","value":"0","data":null,"contractMethod":{"inputs":[{"name":"_to","type":"address"},{"name":"_value","type":"uint256"}],"name":"transfer","payable":false},"contractInputsValues":{"_to":"0x847FA1A5337C7f24D7066E467F2e2A0f969Ca79F","_value":"79498209620365216679983"}},{"to":"0x847FA1A5337C7f24D7066E467F2e2A0f969Ca79F","value":"0","data":null,"contractMethod":{"inputs":[{"internalType":"uint256","name":"_value","type":"uint256"}],"name":"increaseAmount","payable":false},"contractInputsValues":{"_value":"79498209620365216679983"}},{"to":"0x72a19342e8F1838460eBFCCEf09F6585e32db86E","value":"0","data":null,"contractMethod":{"inputs":[{"internalType":"address","name":"_account","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"},{"internalType":"uint256","name":"_spendRatio","type":"uint256"}],"name":"lock","payable":false},"contractInputsValues":{"_account":"0xB1748C79709f4Ba2Dd82834B8c82D4a505003f27","_amount":"2864800346679820912049","_spendRatio":"0"}}]} \ No newline at end of file diff --git a/src/hardhat/test/Fraxoracle/StateRootOracle.js b/src/hardhat/test/Fraxoracle/StateRootOracle.js new file mode 100644 index 00000000..edb1c9d0 --- /dev/null +++ b/src/hardhat/test/Fraxoracle/StateRootOracle.js @@ -0,0 +1,123 @@ +/* +** Run test while genache is running on localhost: npx hardhat --network localhost test test/Fraxoracle-test.js +*/ + +const { expect } = require("chai"); +const { ethers } = require("hardhat"); +const { rlp } = require("ethereumjs-util"); +const { keccak256 } = require("@ethersproject/keccak256"); +const { toUtf8Bytes } = require("@ethersproject/strings"); + + +describe("StateRootOracle", function () { + it("setupContracts", async function () { + var contracts = await setupContracts(); + }); + + it("proofStateRoot", async function () { + const [owner,user1,user2,user3,user4] = await ethers.getSigners(); + var contracts = await setupContracts(); + + var blockNumber = await ethers.provider.getBlockNumber() + var block = await network.provider.request({"method": "eth_getBlockByNumber","params": ["0x"+BigInt(blockNumber).toString(16),false]}); + + await contracts.operatorBlockhashProvider1.connect(user1).receiveBlockHash(block.hash); + await contracts.operatorBlockhashProvider2.connect(user2).receiveBlockHash(block.hash); + await contracts.operatorBlockhashProvider3.connect(user3).receiveBlockHash(block.hash); + + + //console.log("block:"+JSON.stringify(block,null,2)); + var headerFields=[]; + headerFields.push(block.parentHash); + headerFields.push(block.sha3Uncles); + headerFields.push(block.miner); + headerFields.push(block.stateRoot); + headerFields.push(block.transactionsRoot); + headerFields.push(block.receiptsRoot); + headerFields.push(block.logsBloom); + headerFields.push(block.difficulty); + headerFields.push(block.number); + headerFields.push(block.gasLimit); + headerFields.push(block.gasUsed); + headerFields.push(block.timestamp); + headerFields.push(block.extraData); + headerFields.push(block.mixHash); + headerFields.push(block.nonce); + headerFields.push(block.baseFeePerGas); + headerFields.push(block.withdrawalsRoot); + //headerFields.push(block.excessDataGas); + convertHeaderFields(headerFields); + var header = rlp.encode(headerFields); + var hash = keccak256(header); + //console.log("hash:"+hash); + expect(block.hash).to.equals(hash); + + await contracts.stateRootOracle.proofStateRoot(header); + + var blockInfo = await contracts.stateRootOracle.getBlockInfo(blockNumber); + console.log("blockInfo:"+blockInfo); + }); + +}); + +function convertHeaderFields(headeFields) { + for (var i=0;i0) { + await ethers.provider.send("evm_increaseTime", [waitPeriod]); // wait waitPeriod + await ethers.provider.send("evm_mine"); // mine the next block + } + } while (waitPeriod>0); +} + +async function wait(waitPeriod) { + if (waitPeriod>0) { + await ethers.provider.send("evm_increaseTime", [waitPeriod]); // wait waitPeriod + await ethers.provider.send("evm_mine"); // mine the next block + } +} + +async function setupContracts() { + const [owner,user1,user2,user3,user4] = await ethers.getSigners(); + + const OperatorBlockhashProvider = await ethers.getContractFactory("OperatorBlockhashProvider"); + var operatorBlockhashProvider1 = await OperatorBlockhashProvider.deploy(user1.address); + var operatorBlockhashProvider2 = await OperatorBlockhashProvider.deploy(user2.address); + var operatorBlockhashProvider3 = await OperatorBlockhashProvider.deploy(user3.address); + var providers=[]; + providers.push(operatorBlockhashProvider1.address); + providers.push(operatorBlockhashProvider2.address); + providers.push(operatorBlockhashProvider2.address); + + const StateRootOracle = await ethers.getContractFactory("StateRootOracle"); + var stateRootOracle = await StateRootOracle.deploy(providers,2); + + // Pack contracts in an object + var result = {}; + result.operatorBlockhashProvider1 = operatorBlockhashProvider1; + result.operatorBlockhashProvider2 = operatorBlockhashProvider2; + result.operatorBlockhashProvider3 = operatorBlockhashProvider3; + result.stateRootOracle = stateRootOracle; + return result; +} diff --git a/src/types/constants.ts b/src/types/constants.ts index 322bc0e6..68b39eb1 100755 --- a/src/types/constants.ts +++ b/src/types/constants.ts @@ -2063,6 +2063,7 @@ export const CONTRACT_ADDRESSES = { oracles_other: { combo_oracle: "0x878f2059435a19C79c20318ee57657bF4543B6d4", // "0xbdCB57c9d35e8D41babCBcA67416ee6622274caf", combo_oracle_kyberswap_elastic: "0x734fd1fD1f3720379f52cB9d8168d76Cd1ca4A73", + combo_oracle_kyberswap_elastic_v2: "0xc3a483Bb5F96bC4E6104325aa1A229A8E29166B3", combo_oracle_univ2_univ3: "0x1cBE07F3b3bf3BDe44d363cecAecfe9a98EC2dff", // "0xD13c9a29eF6c5ADc7b43BBd5854B07bB9b099862", cpi_tracker_oracle: "0x66B7DFF2Ac66dc4d6FBB3Db1CB627BBb01fF3146", // V1: "0x7086F2aCB5558043fF9cE3df346D8E3FB4F4f452", // old: "0x04BaF30115D7bAC714709910Dd286718CfAd8808" }, @@ -2464,8 +2465,12 @@ export const CONTRACT_ADDRESSES = { FRAXUSDP_Pool: '0xaE34574AC03A15cd58A92DC79De7B1A0800F1CE3', FXSfrxETH: '0x970faa9afbc5feb3ec53059ba330dee71e22b55b', FXSfrxETH_Pool: '0x5133da6ba0474368ad0398d953c8d31c1b75b82b', - GRAIFRAXBP: '', - GRAIFRAXBP_Pool: '', + GHOFRAXBP: '', + GHOFRAXBP_Pool: '', + GHOFRAXBP_Gauge: '', + GRAIFRAXBP: '0x3175f54a354c83e8ade950c14fa3e32fc794c0dc', + GRAIFRAXBP_Pool: '0x3175f54a354c83e8ade950c14fa3e32fc794c0dc', + GRAIFRAXBP_Gauge: '0x8d5af1f5dd3dc4b73e3a9af682adc3641fade9a5', GUSDFRAXBP: '0x4e43151b78b5fbb16298C1161fcbF7531d5F8D93', GUSDFRAXBP_Pool: '0x4e43151b78b5fbb16298C1161fcbF7531d5F8D93', LUSDFRAXBP: '0x497CE58F34605B9944E6b15EcafE6b001206fd25', @@ -2535,8 +2540,10 @@ export const CONTRACT_ADDRESSES = { cvxFRAXUSDP_Rewarder: '0x6991C1CD588c4e6f6f1de3A0bac5B8BbAb7aAF6d', cvxFXSFRAXBP: '0xF57ccaD8122B898A147Cc8601B1ECA88B1662c7E', cvxFXSFRAXBP_Pool: '0x21d158d95C2e150e144c36FC64E3653B8D6c6267', - cvxGRAIFRAXBP: '', - cvxGRAIFRAXBP_Rewarder: '', + cvxGHOFRAXBP: '', + cvxGHOFRAXBP_Rewarder: '', + cvxGRAIFRAXBP: '0x6CceedbC3551B619da21e552623Dc7C64Ae15168', + cvxGRAIFRAXBP_Rewarder: '0xC4581E043F676b95Eb1430474C69f3559a758086', cvxGUSDFRAXBP: '0xfbd79471A12929De8379a6CbaF320E150f139ac4', cvxGUSDFRAXBP_Rewarder: '0x47809eE386D1dEC29c0b13f21ba30F564517538B', cvxLUSDFRAXBP: '0xE8a371b5D32344033589A2F0a2712dBD12130b18', @@ -2579,26 +2586,30 @@ export const CONTRACT_ADDRESSES = { cvxcvxFXSFRAXBP_Rewarder: '0x19eA715F854dB2196C6f45A174541a5Ac884D2f9', cvxeUSDFRAXBP: '0x8e074d44aaBC1b3b4406fE03Da7ceF787ea85938', cvxeUSDFRAXBP_Rewarder: '0xB468dB2E478885B87D7ce0C8DA1D4373A756C138', - cvxfrxETHCRV_New: "0x41603dA2DD26E6fe29CAe074fC6772053A39C2A9", - cvxfrxETHCRV_New_Rewarder: "0xd5dC65ec6948845C1C428fb60BE38FE59B50BD13", - cvxfrxETHCVX_New: "0xAc4b1295F9Aeb1DB29acB37902bE349a79a66403", - cvxfrxETHCVX_New_Rewarder: "0xA064C1EeEbECD1DF41432f4B7264F508F005aF0C", + cvxfrxETHCRV: '0x41603dA2DD26E6fe29CAe074fC6772053A39C2A9', + cvxfrxETHCRV_Rewarder: '0xd5dC65ec6948845C1C428fb60BE38FE59B50BD13', + cvxfrxETHCVX: '0xAc4b1295F9Aeb1DB29acB37902bE349a79a66403', + cvxfrxETHCVX_Rewarder: '0xA064C1EeEbECD1DF41432f4B7264F508F005aF0C', cvxfrxETHETH: '0xC07e540DbFecCF7431EA2478Eb28A03918c1C30E', // Curve calls it cvxfrxETHCRV cvxfrxETHETH_Rewarder: '0xbD5445402B0a287cbC77cb67B2a52e2FC635dce4', - cvxfrxETHalETH_New: "0x112E8f4b685475CcEd5C38142Cd7A2aE41ef6737", - cvxfrxETHalETH_New_Rewarder: "0xe0DbbCF08A5465db7c7401C86cce89030e11aB67", - cvxfrxETHankrETH_New: "0xc18695D5824C49cF50E054953B3A5910c45597A0", - cvxfrxETHankrETH_New_Rewarder: "0xc18695D5824C49cF50E054953B3A5910c45597A0", - cvxfrxETHcbETH_New: "0x39E1Ea9CB87a352CfFd43e0b19D573d12cf110CC", - cvxfrxETHcbETH_New_Rewarder: "0x0080d49D4a4921dF0F3853c5e4533462A51fbb29", - cvxfrxETHrETH_New: "0xeEC515BE690BF445c8C4d1625FD82FA75Bc38bf6", - cvxfrxETHrETH_New_Rewarder: "0x84754821b5484A69DB3164eF4eDC5A5657318039", - cvxfrxETHrETH_StaFi: "", - cvxfrxETHrETH_StaFi_Rewarder: "", - cvxfrxETHsETH_New: "0xf67FEC3D0A32418813bE2BcdD78e058BCFa33AE8", - cvxfrxETHsETH_New_Rewarder: "0x55cdF6c7E6d04b83835E4702ed395D0263237DA2", - cvxfrxETHstETH_New: "0x01492A2cB0Bd14034710475197B4169501B49Ead", - cvxfrxETHstETH_New_Rewarder: "0xC3D0B8170E105d6476fE407934492930CAc3BDAC", + cvxfrxETHalETH: '0x112E8f4b685475CcEd5C38142Cd7A2aE41ef6737', + cvxfrxETHalETH_Rewarder: '0xe0DbbCF08A5465db7c7401C86cce89030e11aB67', + cvxfrxETHankrETH: '0xc18695D5824C49cF50E054953B3A5910c45597A0', + cvxfrxETHankrETH_Rewarder: '0xc18695D5824C49cF50E054953B3A5910c45597A0', + cvxfrxETHcbETH: '0x39E1Ea9CB87a352CfFd43e0b19D573d12cf110CC', + cvxfrxETHcbETH_Rewarder: '0x0080d49D4a4921dF0F3853c5e4533462A51fbb29', + cvxfrxETHmsETH: "0x29889a5fE8e467da8af697C5f1eB901F4911Ab50", + cvxfrxETHmsETH_Rewarder: "0x15507737f44446EB0A86147E2C72Aa6A111A64B2", + cvxfrxETHrETH: '0xeEC515BE690BF445c8C4d1625FD82FA75Bc38bf6', + cvxfrxETHrETH_Rewarder: '0x84754821b5484A69DB3164eF4eDC5A5657318039', + cvxfrxETHrETH_StaFi: "0x02a2206268b49A9b3ee5DD51577E5bDa0072d5F1", + cvxfrxETHrETH_StaFi_Rewarder: "0xf011aD8E91D1dc8625e5548755AEa1F6Fff81089", + cvxfrxETHsETH: '0xf67FEC3D0A32418813bE2BcdD78e058BCFa33AE8', + cvxfrxETHsETH_Rewarder: '0x55cdF6c7E6d04b83835E4702ed395D0263237DA2', + cvxfrxETHstETH: '0x01492A2cB0Bd14034710475197B4169501B49Ead', + cvxfrxETHstETH_Rewarder: '0xC3D0B8170E105d6476fE407934492930CAc3BDAC', + cvxfrxETHzETH: "0x52EdB08ab81e4Cc32cf318aed17dB11c09C3E8B9", + cvxfrxETHzETH_Rewarder: "0x98B662443695f7328F6A7fDe9894CC0E88630269", cvxgusd3CRV_free: '0x15c2471ef46Fa721990730cfa526BcFb45574576', cvxmsUSDFRAXBP: '0xc3b19502F8c02be75F3f77fd673503520DEB51dD', cvxmsUSDFRAXBP_Rewarder: '0xF189A4a1E845Fd62944F93De497409798523B397', @@ -2611,35 +2622,41 @@ export const CONTRACT_ADDRESSES = { d3pool: '0xBaaa1F5DbA42C3389bDbc2c9D2dE134F5cD0Dc89', eUSDFRAXBP: '0xaeda92e6a3b1028edc139a4ae56ec881f3064d4f', eUSDFRAXBP_Pool: '0xaeda92e6a3b1028edc139a4ae56ec881f3064d4f', - frxETHCRV_New: "0xc34993c9adf6a5ab3b4ca27dc71b9c7894a53974", - frxETHCRV_New_Gauge: "0x266ce172a1180134cf6c7836c516bd6a58b1f619", - frxETHCRV_New_Pool: "0x442f37cfd85d3f35e576ad7d63bba7bb36fcfe4a", - frxETHCVX_New: "0x6e52cce4eafdf77091dd1c82183b2d97b776b397", - frxETHCVX_New_Gauge: "0xc2075702490f0426e84e00d8b328119027813ac5", - frxETHCVX_New_Pool: "0x47d5e1679fe5f0d9f0a657c6715924e33ce05093", + frxETHCRV: '0xc34993c9adf6a5ab3b4ca27dc71b9c7894a53974', + frxETHCRV_Gauge: '0x266ce172a1180134cf6c7836c516bd6a58b1f619', + frxETHCRV_Pool: '0x442f37cfd85d3f35e576ad7d63bba7bb36fcfe4a', + frxETHCVX: '0x6e52cce4eafdf77091dd1c82183b2d97b776b397', + frxETHCVX_Gauge: '0xc2075702490f0426e84e00d8b328119027813ac5', + frxETHCVX_Pool: '0x47d5e1679fe5f0d9f0a657c6715924e33ce05093', frxETHETH: '0xf43211935C781D5ca1a41d2041F397B8A7366C7A', // Curve calls it frxETHCRV frxETHETH_Pool: '0xa1F8A6807c402E4A15ef4EBa36528A3FED24E577', - frxETHalETH_New: "0xb657b895b265c38c53fff00166cf7f6a3c70587d", - frxETHalETH_New_Gauge: "0x415f30505368fa1db82feea02eb778be04e75907", - frxETHalETH_New_Pool: "0xb657b895b265c38c53fff00166cf7f6a3c70587d", - frxETHankrETH_New: "0xa8e14f03124ea156a4fc416537c82ff91a647d50", - frxETHankrETH_New_Gauge: "0x86f8d7ced9a8f5563c1198466968b02238e05917", - frxETHankrETH_New_Pool: "0x41ea4045de2676727883aa0b4e43d7e32261f559", - frxETHcbETH_New: "0x548e063ce6f3bac31457e4f5b4e2345286274257", - frxETHcbETH_New_Gauge: "0xd10c17d82053dd0ab65851a9a93a0abe0c4f4794", - frxETHcbETH_New_Pool: "0x73069892f6750ccaaababadc54b6b6b36b3a057d", - frxETHrETH_New: "0xba6c373992ad8ec1f7520e5878e5540eb36debf1", - frxETHrETH_New_Gauge: "0xf20bd4d5a4112d5f9c64adf53726f3ef1b7d0d61", - frxETHrETH_New_Pool: "0xe7c6e0a739021cdba7aac21b4b728779eef974d9", - frxETHrETH_StaFi: "", - frxETHrETH_StaFi_Gauge: "", - frxETHrETH_StaFi_Pool: "", - frxETHsETH_New: "0x663ac72a1c3e1c4186cd3dcb184f216291f4878c", - frxETHsETH_New_Gauge: "0x77ef5d544ff6c739e7e10a549f64dd08055538d1", - frxETHsETH_New_Pool: "0x663ac72a1c3e1c4186cd3dcb184f216291f4878c", - frxETHstETH_New: "0x4d9f9d15101eec665f77210cb999639f760f831e", - frxETHstETH_New_Gauge: "0x821529bb07c83803c9cc7763e5974386e9efedc7", - frxETHstETH_New_Pool: "0x4d9f9d15101eec665f77210cb999639f760f831e", + frxETHalETH: '0xb657b895b265c38c53fff00166cf7f6a3c70587d', + frxETHalETH_Gauge: '0x415f30505368fa1db82feea02eb778be04e75907', + frxETHalETH_Pool: '0xb657b895b265c38c53fff00166cf7f6a3c70587d', + frxETHankrETH: '0xa8e14f03124ea156a4fc416537c82ff91a647d50', + frxETHankrETH_Gauge: '0x86f8d7ced9a8f5563c1198466968b02238e05917', + frxETHankrETH_Pool: '0x41ea4045de2676727883aa0b4e43d7e32261f559', + frxETHcbETH: '0x548e063ce6f3bac31457e4f5b4e2345286274257', + frxETHcbETH_Gauge: '0xd10c17d82053dd0ab65851a9a93a0abe0c4f4794', + frxETHcbETH_Pool: '0x73069892f6750ccaaababadc54b6b6b36b3a057d', + frxETHmsETH: "0x2d600bbbcc3f1b6cb9910a70bab59ec9d5f81b9a", + frxETHmsETH_Gauge: "0xb7a3c519889a916c5ecb54101e69ecf11de60d0b", + frxETHmsETH_Pool: "0x2d600bbbcc3f1b6cb9910a70bab59ec9d5f81b9a", + frxETHrETH: '0xba6c373992ad8ec1f7520e5878e5540eb36debf1', + frxETHrETH_Gauge: '0xf20bd4d5a4112d5f9c64adf53726f3ef1b7d0d61', + frxETHrETH_Pool: '0xe7c6e0a739021cdba7aac21b4b728779eef974d9', + frxETHrETH_StaFi: "0xfcc067efb7be2eebd32615f14fc22195abb68e9b", + frxETHrETH_StaFi_Gauge: "0xb0549599d8446a196541de11008ef5e79fa14f57", + frxETHrETH_StaFi_Pool: "0xfcc067efb7be2eebd32615f14fc22195abb68e9b", + frxETHsETH: '0x663ac72a1c3e1c4186cd3dcb184f216291f4878c', + frxETHsETH_Gauge: '0x77ef5d544ff6c739e7e10a549f64dd08055538d1', + frxETHsETH_Pool: '0x663ac72a1c3e1c4186cd3dcb184f216291f4878c', + frxETHstETH: '0x4d9f9d15101eec665f77210cb999639f760f831e', + frxETHstETH_Gauge: '0x821529bb07c83803c9cc7763e5974386e9efedc7', + frxETHstETH_Pool: '0x4d9f9d15101eec665f77210cb999639f760f831e', + frxETHzETH: "0xfc89b519658967fcbe1f525f1b8f4bf62d9b9018", + frxETHzETH_Gauge: "0xb3627140beacb97f9ca52b34090352fdafc77d72", + frxETHzETH_Pool: "0xfc89b519658967fcbe1f525f1b8f4bf62d9b9018", gOHM: '0x0ab87046fBb341D058F17CBC4c1133F25a20a52f', gusd3CRV: '0xd2967f45c4f384deea880f807be904762a3dea07', msUSDFRAXBP: '0xc3b19502f8c02be75f3f77fd673503520deb51dd', @@ -2682,6 +2699,7 @@ export const CONTRACT_ADDRESSES = { stkcvxBADGERFRAXBP: '0xb92e3fD365Fc5E038aa304Afe919FeE158359C88', stkcvxBUSDFRAXBP: '0x20c5177504A3f9Bad59c430791feA853EeAD4CCE', stkcvxCOILFRAXBP: '0xa5B6f8Ec4122c5Fe0dBc4Ead8Bfe66A412aE427C', + 'stkcvxCOILFRAXBP (Deprecated)': '0xdA69CeC36AE581C1b2a2EEb77C527Fb7c1331310', stkcvxCRV: '0xaa0c3f5f7dfd688c6e646f66cd2a6b66acdbe434', stkcvxCRVUSDFRAX: '0xb6F63cc2066e7626fA47fCC37E78Df9fe89F1663', stkcvxCVXFRAXBP: '0x93D1De20eaBB21686CFe716f78F67E51ee578185', @@ -2689,7 +2707,8 @@ export const CONTRACT_ADDRESSES = { stkcvxFPIFRAX: '0x7287488F8Df7dddc5f373142D4827aAF92AAC845', stkcvxFRAXBP: '0x8a53ee42FB458D4897e15cc7dEa3F75D0F1c3475', stkcvxFRAXUSDP: '0x5385AE7dC08F5C3799691E5b387cB01108B76627', - stkcvxGRAIFRAXBP: '', + stkcvxGHOFRAXBP: '', + stkcvxGRAIFRAXBP: '0xDf9BB26ba5a05fcFc2637dC763AA4eb735911568', stkcvxGUSDFRAXBP: '0x16e9eaC2A9e29aF3c53d24ed0F07fc403E098b64', stkcvxLUSDFRAXBP: '0x8C402989a966D37B96f60401A6158D5D49f1381D', stkcvxMAIFRAXBP: '0x787eB52b94c4610ABE2C9C5eE95c3a4a16533344', @@ -2699,6 +2718,7 @@ export const CONTRACT_ADDRESSES = { stkcvxSTGFRAXBP: '0xAe1bA2Cf0eBF00C5052309992d7B6c94e3EfcBEf', stkcvxTUSDFRAXBP: '0x32fA492Ac1F729E0eE9eDdfCBacc3ef72B234e27', stkcvxUSDDFRAXBP: '0x507e41A64eB7AE47ee303e3B16237ab757F6C06c', + 'stkcvxUZDFRAXBP (Deprecated)': '0x57Fb068BDa27351EF0913113264Ce3EF4EeA3316', stkcvxUZDFRAXBP: '0xaa236bd1302755937Aa46D6f3423655BbC654B02', stkcvxXAIFRAXBP: '0x19f0a60f4635d3E2c48647822Eda5332BA094fd3', stkcvxZUSDFRAXBP: '0xFD2d7847E0f450d8B00d3D697D720C687E622a7B', @@ -2709,16 +2729,18 @@ export const CONTRACT_ADDRESSES = { stkcvxcvxCRVFRAXBP: '0xa103a6ca0C4D4072BA59a55FD453BFE4197A095B', stkcvxcvxFXSFRAXBP: '0xA6A8F315b1a8C9B05433d206b8fECfbF0fC96217', stkcvxeUSDFRAXBP: '0x49BF6f9B860fAF73B0b515c06Be1Bcbf4A0db3dF', - stkcvxfrxETHCRV_New: "0x194aA54376886dAd3d08e71F47D189A88251D8Da", - stkcvxfrxETHCVX_New: "0x5B31bf2988E5388Edae2960504d96Bc142742dCb", + stkcvxfrxETHCRV: '0x194aA54376886dAd3d08e71F47D189A88251D8Da', + stkcvxfrxETHCVX: '0x5B31bf2988E5388Edae2960504d96Bc142742dCb', stkcvxfrxETHETH: '0x4659d5fF63A1E1EDD6D5DD9CC315e063c95947d0', // Convex calls it stkcvxfrxETHCRV - stkcvxfrxETHalETH_New: "0x8A59781B415288f9E633b948618726CB6E47e980", - stkcvxfrxETHankrETH_New: "0x75A439b3F8106428b86198D8c306c57E9e7Bb3dC", - stkcvxfrxETHcbETH_New: "0x4e9D8323603E69c1310E5e04Db172bD5aB07df95", - stkcvxfrxETHrETH_New: "0xE0c65F74728Ff26219C6adddCEfB215484bb08DF", - stkcvxfrxETHrETH_StaFi: "", - stkcvxfrxETHsETH_New: "0x44b51F7F92D761Cf2FC46011AD6b74Ce56447924", - stkcvxfrxETHstETH_New: "0xc2eC3d1209FD1Fc512950825f34281EaF9aB13A2", + stkcvxfrxETHalETH: '0x8A59781B415288f9E633b948618726CB6E47e980', + stkcvxfrxETHankrETH: '0x75A439b3F8106428b86198D8c306c57E9e7Bb3dC', + stkcvxfrxETHcbETH: '0x4e9D8323603E69c1310E5e04Db172bD5aB07df95', + stkcvxfrxETHmsETH: "0x09bFD0c760E4a1bFc970cdaAAD240307C917Aa6c", + stkcvxfrxETHrETH: '0xE0c65F74728Ff26219C6adddCEfB215484bb08DF', + stkcvxfrxETHrETH_StaFi: "0xffAFA5aA5b0a9C0C8e05ec8b89056F018EE2Bad6", + stkcvxfrxETHsETH: '0x44b51F7F92D761Cf2FC46011AD6b74Ce56447924', + stkcvxfrxETHstETH: '0xc2eC3d1209FD1Fc512950825f34281EaF9aB13A2', + stkcvxfrxETHzETH: "0xd69068777d1b2dc74522117efA75AA195c0b57DB", stkcvxmsUSDFRAXBP: '0x227b7F44468A0EC0FDdfc3FB0cE09b294E62f875', stkcvxpUSDFRAXBP: '0x7AEF5bDC573dCbfb40EC68b0BAAB03abB846C9c6', stkcvxsUSDFRAXBP: '0x9f0C2673a33b7087e367253f196A7E823fBc2341', @@ -2752,9 +2774,13 @@ export const CONTRACT_ADDRESSES = { // https://docs.kyberswap.com/contract/deployment kyberswap_elastic_factory: "0x5F1dddbf348aC2fbe22a163e30F99F9ECE3DD50a", + kyberswap_elastic_factory_v2: "0xC7a590291e07B9fe9E64b86c58fD8fC764308C4A", kyberswap_elastic_pos_mgr: "0x2B1c7b41f6A8F2b2bc45C3233a5d5FB3cD6dC9A8", + kyberswap_elastic_pos_mgr_v2: "0xe222fBE074A436145b255442D919E4E3A6c6a480", kyberswap_elastic_router: "0xC1e7dFE73E1598E3910EF4C7845B68A9Ab6F4c83", + kyberswap_elastic_router_v2: "0xF9c2b5746c946EF883ab2660BbbB1f10A5bdeAb4", kyberswap_elastic_tick_fees_reader: "0xD7ab1699280980E756C446769B4c0F04550f88c9", + kyberswap_elastic_tick_fees_reader_v2: "0x8Fd8Cb948965d9305999D767A02bf79833EADbB3", }, uni_v3_pools: { NOTE: "Call getPool here (Factory) to find it: 0x1F98431c8aD98523631AE4a59f267346ea31F984", @@ -2792,7 +2818,7 @@ export const CONTRACT_ADDRESSES = { 'Convex stkcvxBADGERFRAXBP': '0xb92e3fD365Fc5E038aa304Afe919FeE158359C88', 'Convex stkcvxBUSDFRAXBP': '0x20c5177504A3f9Bad59c430791feA853EeAD4CCE', 'Convex stkcvxclevUSDFRAXBP': '0x3199a1ed1Ad4cb1d1b57939809c8ee79eafE9934', - 'Convex stkcvxCOILFRAXBP (Deprecated)': '0xa5B6f8Ec4122c5Fe0dBc4Ead8Bfe66A412aE427C', + 'Convex stkcvxCOILFRAXBP (Deprecated)': '0xdA69CeC36AE581C1b2a2EEb77C527Fb7c1331310', 'Convex stkcvxCOILFRAXBP': '0xa5B6f8Ec4122c5Fe0dBc4Ead8Bfe66A412aE427C', 'Convex stkcvxcrvUSDFRAX' : '0xb6F63cc2066e7626fA47fCC37E78Df9fe89F1663', 'Convex stkcvxCVXFRAXBP': '0x93D1De20eaBB21686CFe716f78F67E51ee578185', @@ -2800,21 +2826,25 @@ export const CONTRACT_ADDRESSES = { 'Convex stkcvxcvxFXSFRAXBP': '0xA6A8F315b1a8C9B05433d206b8fECfbF0fC96217', 'Convex stkcvxDOLAFRAXBP': '0xF06c8696730cf760619e4fA0eDd0f79ea50531A9', 'Convex stkcvxeUSDFRAXBP': '0x49BF6f9B860fAF73B0b515c06Be1Bcbf4A0db3dF', - 'Convex stkcvxGRAIFRAXBP': '', + 'Convex stkcvxGHOFRAXBP': '', + 'Convex stkcvxGRAIFRAXBP': '0xDf9BB26ba5a05fcFc2637dC763AA4eb735911568', 'Convex stkcvxGUSDFRAXBP': '0x16e9eaC2A9e29aF3c53d24ed0F07fc403E098b64', 'Convex stkcvxFPIFRAX': '0x7287488F8Df7dddc5f373142D4827aAF92AAC845', 'Convex stkcvxFRAXBP': '0x8a53ee42FB458D4897e15cc7dEa3F75D0F1c3475', 'Convex stkcvxFRAXUSDP' : '0x5385AE7dC08F5C3799691E5b387cB01108B76627', - 'Convex stkcvxfrxETHCRV_New': '0x194aA54376886dAd3d08e71F47D189A88251D8Da', - 'Convex stkcvxfrxETHCVX_New': '0x5B31bf2988E5388Edae2960504d96Bc142742dCb', - 'Convex stkcvxfrxETHalETH_New': '0x8A59781B415288f9E633b948618726CB6E47e980', - 'Convex stkcvxfrxETHankrETH_New': '0x75A439b3F8106428b86198D8c306c57E9e7Bb3dC', - 'Convex stkcvxfrxETHcbETH_New': '0x4e9D8323603E69c1310E5e04Db172bD5aB07df95', - 'Convex stkcvxfrxETHrETH_New': '0xE0c65F74728Ff26219C6adddCEfB215484bb08DF', - 'Convex stkcvxfrxETHrETH_StaFi': '', - 'Convex stkcvxfrxETHsETH_New': '0x44b51F7F92D761Cf2FC46011AD6b74Ce56447924', - 'Convex stkcvxfrxETHstETH_New': '0xc2eC3d1209FD1Fc512950825f34281EaF9aB13A2', + 'Convex stkcvxfrxETHCRV': '0x194aA54376886dAd3d08e71F47D189A88251D8Da', + 'Convex stkcvxfrxETHCVX': '0x5B31bf2988E5388Edae2960504d96Bc142742dCb', + 'Convex stkcvxfrxETHalETH': '0x8A59781B415288f9E633b948618726CB6E47e980', + 'Convex stkcvxfrxETHankrETH': '0x75A439b3F8106428b86198D8c306c57E9e7Bb3dC', + 'Convex stkcvxfrxETHcbETH': '0x4e9D8323603E69c1310E5e04Db172bD5aB07df95', + + 'Convex stkcvxfrxETHmsETH': '0x09bFD0c760E4a1bFc970cdaAAD240307C917Aa6c', 'Convex stkcvxfrxETHETH': '0x4659d5fF63A1E1EDD6D5DD9CC315e063c95947d0', + 'Convex stkcvxfrxETHrETH': '0xE0c65F74728Ff26219C6adddCEfB215484bb08DF', + 'Convex stkcvxfrxETHrETH_StaFi': '0xffAFA5aA5b0a9C0C8e05ec8b89056F018EE2Bad6', + 'Convex stkcvxfrxETHsETH': '0x44b51F7F92D761Cf2FC46011AD6b74Ce56447924', + 'Convex stkcvxfrxETHstETH': '0xc2eC3d1209FD1Fc512950825f34281EaF9aB13A2', + 'Convex stkcvxfrxETHzETH': '0xd69068777d1b2dc74522117efA75AA195c0b57DB', 'Convex stkcvxLUSDFRAXBP': '0x8C402989a966D37B96f60401A6158D5D49f1381D', 'Convex stkcvxMAIFRAXBP': '0x787eB52b94c4610ABE2C9C5eE95c3a4a16533344', 'Convex stkcvxmsUSDFRAXBP': '0x227b7F44468A0EC0FDdfc3FB0cE09b294E62f875', @@ -2827,7 +2857,7 @@ export const CONTRACT_ADDRESSES = { 'Convex stkcvxswETHfrxETH' : '0xa3ae006Cc863423F690ca01C2a8F692B97c93c3b', 'Convex stkcvxTUSDFRAXBP': '0x32fA492Ac1F729E0eE9eDdfCBacc3ef72B234e27', 'Convex stkcvxUSDDFRAXBP': '0x507e41A64eB7AE47ee303e3B16237ab757F6C06c', - 'Convex stkcvxUZDFRAXBP (Deprecated)': '0xaa236bd1302755937Aa46D6f3423655BbC654B02', + 'Convex stkcvxUZDFRAXBP (Deprecated)': '0x57Fb068BDa27351EF0913113264Ce3EF4EeA3316', 'Convex stkcvxUZDFRAXBP': '0xaa236bd1302755937Aa46D6f3423655BbC654B02', 'Convex stkcvxXAIFRAXBP': '0x19f0a60f4635d3E2c48647822Eda5332BA094fd3', 'Convex stkcvxZUSDFRAXBP': '0xFD2d7847E0f450d8B00d3D697D720C687E622a7B', @@ -2871,6 +2901,11 @@ export const CONTRACT_ADDRESSES = { 'Fraxswap V2 FXS/FPIS': '0x7a9Bd205B55cCB1Cc1c5B99FF5Db87a6e7B2C38b', 'Gearbox dFRAX': '0x8A1112AFef7F4FC7c066a77AABBc01b3Fff31D47', 'Gelato Uniswap FRAX/DAI': '0xb1Cfdc7370550f5e421E1bf0BF3CADFaDF3C4141', + 'KyberSwap Elastic FRAX/USDC (Deprecated)': '0xe784ca79a38160FE9819bB273b0d0D6cb3a1d8d7', + 'KyberSwap Elastic FRAX/USDC': '0x029145D747CF9e0376bb9b133E127B7f8AAe9Eb5', + 'KyberSwap Elastic frxETH/ETH (Deprecated)': '0x1Bc14986bf9F002D876B7cE645C4b91Af79B3C3F', + 'KyberSwap Elastic frxETH/ETH': '0x97cB76cbb84Aa35deaF1dAC3101a506588B6c197', + 'KyberSwap Elastic frxETH/FRAX': '0x049b423f0cBcc28c1bB96b51f977f9D1229F5868', 'Monolith mo-sAMM-FRAX/USDT': '0xC983fdb96ceB4A787E9F07e7e4135A75f75ccCb1', 'Monolith mo-sAMM-frxETH/WETH': '0x73c229785ADe094d090A72146Bd4C24C4655EFbB', 'Monolith mo-vAMM-FXS/frxETH': '0xcD0E1867C775d703458C5478830E9Ab8195DC5Cd', @@ -2947,17 +2982,20 @@ export const CONTRACT_ADDRESSES = { 'Convex stkcvxFPIFRAX': '0x0a08673E3d7c454E1c6b27acD059C50Df6727FC9', 'Convex stkcvxFRAXBP': '0x963f487796d54d2f27bA6F3Fbe91154cA103b199', 'Convex stkcvxFRAXUSDP' : '0x2A5b8C7DFE489CeB00ec80524C0bA0C1b78433A9', - 'Convex stkcvxfrxETHCRV_New': '0xDA0622cBa8cC821ee0d4AfA366Df95E948b43297', - 'Convex stkcvxfrxETHCVX_New': '0xb01BaB994b52A37a231551f00a1B7cAcd43bc8C9', - 'Convex stkcvxfrxETHalETH_New': '0x56790e4A08eD17aa3b7b4B1b23A6a84D731Fd77e', - 'Convex stkcvxfrxETHankrETH_New': '0x854B98dC1F76c92b22F75d1f33D23FEb64D8087F', - 'Convex stkcvxfrxETHcbETH_New': '0x16e55917849aC7fA4341470FA3A22bB503D5cACD', - 'Convex stkcvxfrxETHrETH_New': '0x719505cB97DF15565255eb1bDe65586271dB873C', - 'Convex stkcvxfrxETHrETH_StaFi': '', - 'Convex stkcvxfrxETHsETH_New': '0xd79Ae34eD6D11A235629A48aeA9F661a241faD4f', - 'Convex stkcvxfrxETHstETH_New': '0x68921998fbc43B360D3cF14a03aF4273CB0cFA44', + 'Convex stkcvxfrxETHCRV': '0xDA0622cBa8cC821ee0d4AfA366Df95E948b43297', + 'Convex stkcvxfrxETHCVX': '0xb01BaB994b52A37a231551f00a1B7cAcd43bc8C9', + 'Convex stkcvxfrxETHalETH': '0x56790e4A08eD17aa3b7b4B1b23A6a84D731Fd77e', + 'Convex stkcvxfrxETHankrETH': '0x854B98dC1F76c92b22F75d1f33D23FEb64D8087F', + 'Convex stkcvxfrxETHcbETH': '0x16e55917849aC7fA4341470FA3A22bB503D5cACD', + 'Convex stkcvxfrxETHmsETH': '0x2816Ab1F4Db656602b6B0041c006652A4F5D0437', 'Convex stkcvxfrxETHETH': '0xa537d64881b84faffb9Ae43c951EEbF368b71cdA', - 'Convex stkcvxGRAIFRAXBP': '', + 'Convex stkcvxfrxETHrETH': '0x719505cB97DF15565255eb1bDe65586271dB873C', + 'Convex stkcvxfrxETHrETH_StaFi': '0x76CF35aB1450D3A6c84EdDB8A960A5F65B76e706', + 'Convex stkcvxfrxETHsETH': '0xd79Ae34eD6D11A235629A48aeA9F661a241faD4f', + 'Convex stkcvxfrxETHstETH': '0x68921998fbc43B360D3cF14a03aF4273CB0cFA44', + 'Convex stkcvxfrxETHzETH': '0x882B9fad02D1a7436449dcdE9934Eeb9E287909c', + 'Convex stkcvxGHOFRAXBP': '', + 'Convex stkcvxGRAIFRAXBP': '0x5684d5566bb438D8Ef7B3C1E5da9450cD19C1b9f', 'Convex stkcvxGUSDFRAXBP': '0xF0Ffe16810B7f412c52C1610e3BC9819A7Dcb366', 'Convex stkcvxLUSDFRAXBP': '0xF0A9b6F6593b4Bf96E1Ab13921A8a3FbFd9d4F16', 'Convex stkcvxMAIFRAXBP': '0xdE5684F85a78F6CcCFFB4b9301ad0944eb5CE3eE', @@ -2998,6 +3036,11 @@ export const CONTRACT_ADDRESSES = { 'Fraxswap V2 FRAX/ZZ': '0x38950D42CD549842B3Fc862a45F00eB24331F462', 'Gearbox dFRAX': '0x8A1112AFef7F4FC7c066a77AABBc01b3Fff31D47', 'Gelato Uniswap FRAX/DAI': '0xcdfc491804A420b677f8e788B5157856910E2F6f', + 'KyberSwap Elastic FRAX/USDC (Deprecated)': '0x90d52cdc60B7FF7994095Aa184694225035E8A60', + 'KyberSwap Elastic FRAX/USDC': '0x21AF9DBa45989512468B08d13978e9040cc0cEF6', + 'KyberSwap Elastic frxETH/ETH (Deprecated)': '0x0cF99bbc8794e09e713769c4352eB3318e25c975', + 'KyberSwap Elastic frxETH/ETH': '0x6b96465F5e51C01134e0e64bff19f922fA7337C7', + 'KyberSwap Elastic frxETH/FRAX': '0xaDf48a504b7E7262FE9BFC62Ab11894187590BB7', 'Monolith mo-sAMM-FRAX/USDT': '0x9972F7c292Deae7759a3831b1aDFF54dD43Dc264', 'Monolith mo-sAMM-frxETH/WETH': '0x4E30fc7ccD2dF3ddCA39a69d2085334Ee63b9c96', 'Monolith mo-vAMM-FXS/frxETH': '0x520b8e754768EEed9a37d78de76Cd5d75456b92F', @@ -3119,6 +3162,9 @@ export const CONTRACT_ADDRESSES = { middleman_gauges: { "Balancer frxETH-bb-a-WETH Gauge": "0xE3f4e2b79f1a8bf3b14d9100323Fca24D923f796", "Curve VSTFRAX-f": "0x127963A74c07f72D862F2Bdc225226c3251BD117", // Arbitrum + "KyberSwap Elastic FRAX/USDC [Arbitrum]": "0x0884c9Bb52348fa76d4e1c6Ea042A2EaF0b72c6C", // Arbitrum + "KyberSwap Elastic FRAX/USDC [Optimism]": "0x9c9e8E8ccD7dAF6AfAB436829992B3Cf408319B4", // Optimism + "KyberSwap Elastic FRAX/USDC [Polygon]": "0x11c9C6F9e983bf6E10296A9ce09D4572F664FF25", // Polygon "mStable FRAX/mUSD": "0x3e14f6EEDCC5Bc1d0Fc7B20B45eAE7B1F74a6AeC", // Polygon "Saddle L2D4 [Arbitrum]": "0x9B8AEd182B8A9430C14e97Bf2C02F129f2b36854", // Arbitrum "Sentiment LFrax": "0x86c0A521807f43A646978e9f302BAF693350eAa3", // Arbitrum @@ -3152,6 +3198,7 @@ export const CONTRACT_ADDRESSES = { collaterals: { arbiUSDC: "0xFF970A61A04b1cA14834A43f5dE4533eBDDB5CC8", arbiUSDT: "0xFd086bC7CD5C481DCC9C85ebE478A1C0b69FCbb9", + circleUSDC: "0xaf88d065e77c8cC2239327C5EDb3A432268e5831", }, bridges: { anyFRAX: "0x667fd83e24ca1d935d36717d305d54fa0cac991c", @@ -3184,10 +3231,12 @@ export const CONTRACT_ADDRESSES = { FXS: "0x6a0Fc220D129F4D21e40764ed0BeA4ec777f3D03", // Old: "0xdb9e3464a27fd3A36C0DedD8A1841dEC7cd0151D" }, cross_chain_oracle: "0xe5fd90e47EF7CbBD92139a22a7041071E2B9a474", + }, oracles_other: { combo_oracle: "0xfD9FA9b80BFEc955bB042ea4D75A50537D8d54fe", // "0xd85884908F6477c90147936AAa130Aa3B284Efd6", combo_oracle_univ2_univ3: "0xdcC922886e9F6FeCE599d94c82e9d0B52893350d", // "0x37F7865568d9cb30791583cA404E0B23eF05CF21", + combo_oracle_kyberswap_elastic_v2: "0xac3E018457B222d93114458476f3E3416Abbe38F", }, uniswap: { v2_router: "0x1b02dA8Cb0d097eB8D57A175b88c7D8b47997506", @@ -3199,6 +3248,10 @@ export const CONTRACT_ADDRESSES = { fraxswap_router_v1: '0xc2544A32872A91F4A553b404C6950e89De901fdb', fraxswap_router_v2: '0xCAAaB0A72f781B92bA63Af27477aA46aB8F653E7', fraxswap_router_multi_hop: '0x0000000000000000000000000000000000000000', + kyberswap_elastic_factory_v2: "0xC7a590291e07B9fe9E64b86c58fD8fC764308C4A", + kyberswap_elastic_pos_mgr_v2: "0xe222fBE074A436145b255442D919E4E3A6c6a480", + kyberswap_elastic_router_v2: "0xF9c2b5746c946EF883ab2660BbbB1f10A5bdeAb4", + kyberswap_elastic_tick_fees_reader_v2: "0x8Fd8Cb948965d9305999D767A02bf79833EADbB3", }, amos: { curve: "0x62544Bd5da87F51934C09cD6464757ACecaf8e49", @@ -3206,6 +3259,7 @@ export const CONTRACT_ADDRESSES = { sushiswap_liquidity: "0x5D83f657959F916D72a33DDF53BFb7EcD7Ef1507", // Old: "0xFB5Bb0AE6f9f0a153E59d7EB7C993eb293b7d713" }, reward_tokens: { + KNC: "0xe4DDDfe67E7164b0FE14E218d80dC4C08eDC01cB", weth: "0x82aF49447D8a07e3bd95BD0d56f35241523fBab1", SPELL: "0x3E6648C5a70A150A88bCE65F4aD4d506Fe15d2AF", SDL: "0x75c9bc761d88f70156daf83aa010e84680baf131", @@ -3230,6 +3284,7 @@ export const CONTRACT_ADDRESSES = { "Fraxswap V2 FRAX/FXS": "0x90FF2b6b6a2eb3C68D883bc276F6736b1262fa50", "Fraxswap V1 FRAX/WETH": "0xb771410E2b1d892C3469711824c44769528fdc89", "Fraxswap V2 FRAX/WETH": "0x0BB5A573886bbcecf18590b6Cb59E980FAC7d278", + "KyberSwap Elastic FRAX/USDC [Arbitrum]": "0x97cb76cbb84aa35deaf1dac3101a506588b6c197", "Saddle L2D4 [Arbitrum]": "0x147D0Af556C6D89640BFa915D2b9619d7b55947a", "Sentiment LFrax": "0x2E9963ae673A885b6bfeDa2f80132CE28b784C40", "Sushi canFRAX/canFXS": "0xfb5DB4f55Bb97A608f6EE50864104457FA04DA4f", @@ -3239,6 +3294,7 @@ export const CONTRACT_ADDRESSES = { }, staking_contracts: { "Curve VSTFRAX-f": "0x127963A74c07f72D862F2Bdc225226c3251BD117", + "KyberSwap Elastic FRAX/USDC [Arbitrum]": "0xbAFA44EFE7901E04E39Dad13167D089C559c1138", "Saddle L2D4 [Arbitrum]": "0xd1dF24e8D225b20F9c8f4912BE88cCCec93f36E5", "Sentiment LFrax": "0xcdE7054e7a232938CdDe8BF40faf827e6f377f54", "Olympus Pro FRAX Bond [Arbitrum]": "", @@ -4219,10 +4275,12 @@ export const CONTRACT_ADDRESSES = { // USDC: "0x35c6962c221E4E8c17E2b4D59c8De79457EA66DE", }, cross_chain_oracle: "0x31aA22d69270148Ec63Baf53fde846b45dB86509", + }, oracles_other: { combo_oracle: "0x626eFc448227d794dC8C02ffea6a932bB360f72a", // Old: "0x7ef2a9AA33AB926a42F0e4F259Da225a5BEBdA73", combo_oracle_univ2_univ3: "0xeba66661Afc03aB95ec37383b1BfB724abe14a0F", // Old: "0xD3cEa6c44F745eAA584b836f92FAF15FAfe826a0", + combo_oracle_kyberswap_elastic_v2: "0x2C37fb628b35dfdFD515d41B0cAAe11B542773C3", }, multisigs: { Address1: "0x11978D32619cFefC2E7C75A70ef8BeB077b503Ca", @@ -4238,7 +4296,11 @@ export const CONTRACT_ADDRESSES = { fraxswap_factory_v2: '0x67a1412d2D6CbF211bb71F8e851b4393b491B10f', fraxswap_router_v1: '0xffE66A866B249f5d7C97b4a4c84742A393bC9354', fraxswap_router_v2: '0xB9A55F455e46e8D717eEA5E47D2c449416A0437F', - fraxswap_router_multi_hop: "0x0000000000000000000000000000000000000000" + fraxswap_router_multi_hop: "0x0000000000000000000000000000000000000000", + kyberswap_elastic_factory_v2: "0xC7a590291e07B9fe9E64b86c58fD8fC764308C4A", + kyberswap_elastic_pos_mgr_v2: "0xe222fBE074A436145b255442D919E4E3A6c6a480", + kyberswap_elastic_router_v2: "0xF9c2b5746c946EF883ab2660BbbB1f10A5bdeAb4", + kyberswap_elastic_tick_fees_reader_v2: "0x8Fd8Cb948965d9305999D767A02bf79833EADbB3", }, uni_v3_pools: { 'Uniswap V3 FRAX/USDC': '0x98D9aE198f2018503791D1cAf23c6807C135bB6b', // 0.05% Fee @@ -4247,6 +4309,7 @@ export const CONTRACT_ADDRESSES = { }, amos: {}, reward_tokens: { + KNC: "0xa00E3A3511aAC35cA78530c85007AFCd31753819", WETH: "0x4200000000000000000000000000000000000006", }, bearer_tokens: { @@ -4260,13 +4323,16 @@ export const CONTRACT_ADDRESSES = { USDC: "0xF47b8b1daF12c3058b757A1446dADfa8E4B33535", // Saddle FRAX/USDC }, pair_tokens: { + "Curve 4pool": "0x3da3153E26A230d918bb9F9428A8d60349B73379", "Fraxswap V1 FRAX/FXS": "0x25e2222Bc50E3B2dc945E1b9430F5498107FD3A5", "Fraxswap V2 FRAX/FXS": "0x9456c020D3A05b159dAB4557535083fBA836c49A", "Fraxswap V1 FRAX/WETH": "0x0BC2D9B4c3f599BD85789EC3649774076A7D9264", "Fraxswap V2 FRAX/WETH": "0xCc4Dd8Bc7967D46060bA3fAAA8e525A35625F8b4", - "Curve 4pool": "0x3da3153E26A230d918bb9F9428A8d60349B73379", + "KyberSwap Elastic FRAX/USDC [Optimism]": "0x97cb76cbb84aa35deaf1dac3101a506588b6c197", + }, + staking_contracts: { + "KyberSwap Elastic FRAX/USDC [Optimism]": "0xE30521fe7f3bEB6Ad556887b50739d6C7CA667E6", }, - staking_contracts: {}, }, polygon: { chain_id: 137, @@ -4327,6 +4393,7 @@ export const CONTRACT_ADDRESSES = { oracles_other: { combo_oracle: "0xAfe0C8318B67Ea8461350ABf7Bc82E5ce9Cf11D3", // "0x932aac463081dA5b2D5904E55c1F984bDC884048", combo_oracle_univ2_univ3: "0x86Cffe1fE0C09A0815Fe4Fd21956D24Af5ba4020", // "0x0D6EeBE86bF972Cb3e18A3D9126dF0Bfb52e7C66", + combo_oracle_kyberswap_elastic_v2: "0xfBCB0F967817c924f83e26e04F0FB28ED4d6276F", cpi_tracker_oracle: "0x7086F2aCB5558043fF9cE3df346D8E3FB4F4f452", // MUMBAI: "0x0304A365C0fbb4b1Ad423887861b9b69a5f0c00E", MUMBAI OLD: "0x1B01514A2B3CdEf16fD3c680a818A0Ab97Da8a09" dystopia: { 'Dystopia StableV1 AMM - USDC/FRAX': "0x80F5cEeE40d3af832405A9034fbb0976B369C004", @@ -4347,6 +4414,10 @@ export const CONTRACT_ADDRESSES = { fraxswap_factory_v2: "0x54F454D747e037Da288dB568D4121117EAb34e79", fraxswap_router_v2: "0xE52D0337904D4D0519EF7487e707268E1DB6495F", fraxswap_router_multi_hop: '0x0000000000000000000000000000000000000000', + kyberswap_elastic_factory_v2: "0xC7a590291e07B9fe9E64b86c58fD8fC764308C4A", + kyberswap_elastic_pos_mgr_v2: "0xe222fBE074A436145b255442D919E4E3A6c6a480", + kyberswap_elastic_router_v2: "0xF9c2b5746c946EF883ab2660BbbB1f10A5bdeAb4", + kyberswap_elastic_tick_fees_reader_v2: "0x8Fd8Cb948965d9305999D767A02bf79833EADbB3", }, rari_pools: { "Index Coop Pool (#2)": "0x164835016E1590EE91Eb479c4Eeb1249779856aa", @@ -4361,6 +4432,7 @@ export const CONTRACT_ADDRESSES = { }, reward_tokens: { bal: "0x9a71012b13ca4d3d0cdc72a177df3ef03b0e76a3", + KNC: "0x1C954E8fe737F99f68Fa1CCda3e51ebDB291948C", mta: "0xF501dd45a1198C2E1b5aEF5314A68B9006D842E0", sushi: "0x0b3f868e0be5597d5db7feb59e1cadbb0fdda50a", weth: "0x7ceB23fD6bC0adD59E62ac25578270cFf1b9f619", @@ -4380,6 +4452,7 @@ export const CONTRACT_ADDRESSES = { "Fraxswap V2 FRAX/FXS": "0xd2105fE5f1B631daf2398e918549758Cd181cA7C", "Fraxswap V1 FRAX/WMATIC": "0x4F7267Af6DB7B284dF74BEA9e35402987D8C72a7", "Fraxswap V2 FRAX/WMATIC": "0xA964b92C690f0B8efad5B46a278A84bD0EF8AC01", + "KyberSwap Elastic FRAX/USDC [Polygon]": "0x1Bc14986bf9F002D876B7cE645C4b91Af79B3C3F", "mStable FRAX/mUSD": "0xB30a907084AC8a0d25dDDAB4E364827406Fd09f0", // "Sushi FRAX/FXS": "0xd53a56ae0f48c9a03660cd36c2e4ae20493a1eca" "Sushi canFRAX/canFXS": "0xDf45B5B68d9dC84173DD963c763AeA8CAD3E24A6", @@ -4389,6 +4462,7 @@ export const CONTRACT_ADDRESSES = { }, staking_contracts: { "Balancer frxETH-bb-a-WETH Gauge": "0x617430FF1C74faff0378726627F26a8704d03c8d", + "KyberSwap Elastic FRAX/USDC [Polygon]": "0x0363a32D18c25a3FD19a0d00B02106C03d8b8182", "mStable FRAX/mUSD": "0xc425Fd9Ed3C892d849C9E1a971516da1C1B29696", // "Sushi FRAX/FXS": "0x6386a4d52966D864698BF9AdA2cd081ab2F487c4" }, From 090ab4ae0d355f65f2804e31c9d8731989111003 Mon Sep 17 00:00:00 2001 From: travis Date: Mon, 13 Nov 2023 17:27:25 -0800 Subject: [PATCH 29/37] periodic update --- README_TESTS.md | 4 + SAMPLE.env | 8 + package-lock.json | 31979 ++++++++++------ package.json | 48 +- .../Fraxchain/FraxchainFrxEthMinter.sol | 115 + .../Bridges/Fraxchain/FraxchainPortal.sol | 509 + .../ERC20PermitPermissionedOptiMintable.sol | 250 + .../CrossChainCanonicalV2OptiMintable.sol | 47 + src/hardhat/contracts/ERC20/wfrxETH.sol | 879 + .../contracts/FraxETH/frxETHMinter.sol.old | 2321 ++ src/hardhat/contracts/FraxETH/sfrxETH.sol.old | 1140 + .../convex/IConvexCvxLPRewardPoolCombo.sol | 47 + .../Misc_AMOs/curve/I3poolAndToken.sol | 51 + .../curve/ICurveChildLiquidityGauge.sol | 71 + .../curve/ICurveTricryptoOptimizedWETH.sol | 83 + .../Staking/FraxCrossChainFarmV3_ERC20.sol | 8 +- .../FraxCrossChainFarmV3_Pos_Rebase.sol | 8 +- .../Staking/FraxCrossChainFarmV4_ERC20.sol | 1326 + .../Staking/FraxUnifiedFarmTemplate.sol | 3 + .../Staking/FraxUnifiedFarm_ERC20.sol | 27 +- .../FraxUnifiedFarm_KyberSwapElastic.sol | 5 +- .../Staking/FraxUnifiedFarm_PosRebase.sol | 6 + .../FraxCCFarmV4_cvxUSDPlusFRAXBP.sol | 19 + ...UnifiedFarm_ERC20_Convex_FRAXBP_Stable.sol | 4 +- ...ifiedFarm_ERC20_Convex_FRAXBP_Volatile.sol | 2 + .../FraxUnifiedFarm_ERC20_Convex_Generic.sol | 17 + .../FraxUnifiedFarm_ERC20_Convex_frxETH.sol | 28 +- .../FraxUnifiedFarm_ERC20_Fraxlend.sol | 2 + .../FraxUnifiedFarm_ERC20_FraxswapV2.sol | 2 + ...axUnifiedFarm_ERC20_KyberSwapElasticV2.sol | 24 +- ...raxUnifiedFarm_KyberSwapElasticGeneric.sol | 61 - .../Script_Constants.js | 36 + .../Step_1_Vault_Gauge_Proxy.js | 17 +- .../Step_1_Vault_Gauge_Proxy.json | 2 +- .../Step_2_CRVCVXDistro_Contracts.js | 15 +- .../Step_2_CRVCVXDistro_Contracts.json | 2 +- .../Step_3_RewDist_Seeding_Sync.js | 15 +- .../Step_3_RewDist_Seeding_Sync.json | 2 +- .../Frax_Comptroller_Routine/Sunday_Part_1.js | 30 + .../Sunday_Part_1.json | 2 +- src/hardhat/hardhat.config.js | 98 +- .../FraxCrossChainFarmV4_ERC20-Tests.js | 947 + src/hardhat/test/truffle-fixture.js | 103 +- src/misc/utilities.ts | 11 + src/types/constants.ts | 308 +- 45 files changed, 28053 insertions(+), 12629 deletions(-) create mode 100644 src/hardhat/contracts/Bridges/Fraxchain/FraxchainFrxEthMinter.sol create mode 100644 src/hardhat/contracts/Bridges/Fraxchain/FraxchainPortal.sol create mode 100644 src/hardhat/contracts/ERC20/ERC20PermitPermissionedOptiMintable.sol create mode 100755 src/hardhat/contracts/ERC20/__CROSSCHAIN/CrossChainCanonicalV2OptiMintable.sol create mode 100644 src/hardhat/contracts/ERC20/wfrxETH.sol create mode 100644 src/hardhat/contracts/FraxETH/frxETHMinter.sol.old create mode 100644 src/hardhat/contracts/FraxETH/sfrxETH.sol.old create mode 100644 src/hardhat/contracts/Misc_AMOs/convex/IConvexCvxLPRewardPoolCombo.sol create mode 100644 src/hardhat/contracts/Misc_AMOs/curve/I3poolAndToken.sol create mode 100644 src/hardhat/contracts/Misc_AMOs/curve/ICurveChildLiquidityGauge.sol create mode 100644 src/hardhat/contracts/Misc_AMOs/curve/ICurveTricryptoOptimizedWETH.sol create mode 100755 src/hardhat/contracts/Staking/FraxCrossChainFarmV4_ERC20.sol create mode 100755 src/hardhat/contracts/Staking/Variants/FraxCCFarmV4_cvxUSDPlusFRAXBP.sol delete mode 100755 src/hardhat/contracts/Staking/Variants/FraxUnifiedFarm_KyberSwapElasticGeneric.sol create mode 100644 src/hardhat/gnosis-safe-scripts/Convex_Farm_Deployments/Script_Constants.js create mode 100644 src/hardhat/test/__ARBITRUM/FraxCrossChainFarmV4_ERC20-Tests.js diff --git a/README_TESTS.md b/README_TESTS.md index da6aedf7..c5048ab4 100755 --- a/README_TESTS.md +++ b/README_TESTS.md @@ -25,9 +25,11 @@ cd ./src/hardhat npx hardhat compile ARBITRUM +npx hardhat test ./test/__ARBITRUM/ComboOracle_KyberSwapElastic-Tests_ARBI.js --vv npx hardhat test ./test/__ARBITRUM/CrossChainBridgeBacker_ARBI_AnySwap-Tests.js npx hardhat test ./test/__ARBITRUM/FraxCrossChainFarmV2-Tests.js npx hardhat test ./test/__ARBITRUM/FraxCrossChainFarmV3_ERC20-Tests.js +npx hardhat test ./test/__ARBITRUM/FraxCrossChainFarmV4_ERC20-Tests.js --no-compile --full-trace-error npx hardhat test ./test/__ARBITRUM/CurveAMO-ARBI-Tests.js AURORA @@ -58,6 +60,7 @@ npx hardhat test ./test/FXS1559AMO-Tests.js npx hardhat test ./test/FraxCrossChainLiquidityTracker-Tests.js npx hardhat test ./test/FraxFarmBSC_Dual_V5.js npx hardhat test ./test/FraxFarmRageQuitter-Tests.js +npx hardhat test ./test/Fraxbonds/SlippageAuction.js npx hardhat test ./test/Fraxferry/Fraxferry-test.js npx hardhat test ./test/FraxferryV2/FerryV2-test.js npx hardhat test ./test/FraxGaugeController-Tests.js @@ -73,6 +76,7 @@ npx hardhat test ./test/FraxUnifiedFarm_PosRebase-Tests.js npx hardhat test ./test/FraxUnifiedFarm_UniV3-Tests.js npx hardhat test ./test/Fraxswap/fraxswap-twamm-test.js npx hardhat test ./test/Fraxswap/fraxswap-uniV2-test.js +npx hardhat test ./test/FrxETH/FrxETHMiniRouter-Tests.js npx hardhat test ./test/Governance_Slap_2.js npx hardhat test ./test/IFraxGaugeFXSRewardsDistributor-Tests.js npx hardhat test ./test/InvestorAMO_V3-Tests.js diff --git a/SAMPLE.env b/SAMPLE.env index 03846b36..024dbdd2 100644 --- a/SAMPLE.env +++ b/SAMPLE.env @@ -210,6 +210,14 @@ FANTOM_NETWORK_ENDPOINT_WSS='wss://apis.ankr.com/wss//fantom/f #FANTOM_NETWORK_ENDPOINT='https://lingering-old-bird.fantom.quiknode.pro//' #FANTOM_NETWORK_ENDPOINT_WSS='wss://lingering-old-bird.fantom.quiknode.pro//' +# FRAXCHAIN DEVNET +#======================== +FRAXCHAIN_DEVNET_L1_NETWORK_ENDPOINT='' +FRAXCHAIN_DEVNET_L2_NETWORK_ENDPOINT='' +FRAXCHAIN_DEVNET_COOKIE='' +FRAXCHAIN_DEVNET_ADMIN_ADDRESS='' +FRAXCHAIN_DEVNET_ADMIN_PKEY='' + # HARMONY #======================== # NOTE 0x vs dec format https://docs.harmony.one/home/developers/api diff --git a/package-lock.json b/package-lock.json index 5f652cbd..5a57e2ed 100644 --- a/package-lock.json +++ b/package-lock.json @@ -9,23 +9,25 @@ "version": "1.0.0", "license": "ISC", "dependencies": { + "@arbitrum/nitro-contracts": "^1.0.2", "@chainlink/contracts": "0.6.1", + "@eth-optimism/contracts-bedrock": "^0.16.0", "@ethereumjs/common": "^3.1.2", "@ethereumjs/tx": "^4.1.2", "@ethersproject/hardware-wallets": "^5.7.0", "@flashbots/ethers-provider-bundle": "^0.6.1", - "@maticnetwork/maticjs": "^3.5.0", + "@maticnetwork/maticjs": "^3.6.6", "@maticnetwork/maticjs-ethers": "^1.0.3", "@maticnetwork/maticjs-web3": "^1.0.4", "@matterlabs/hardhat-zksync-chai-matchers": "^0.1.2", "@matterlabs/hardhat-zksync-deploy": "^0.6.3", "@matterlabs/hardhat-zksync-solc": "^0.3.16", - "@openzeppelin/contracts": "^4.8.3", + "@openzeppelin/contracts": "^4.9.3", "@openzeppelin/hardhat-upgrades": "^1.26.0", - "@poanet/solidity-flattener": "^3.0.8", + "@poanet/solidity-flattener": "^3.0.9", "@solana/spl-token": "^0.3.7", - "@solana/web3.js": "^1.76.0", - "@truffle/hdwallet-provider": "^2.1.11", + "@solana/web3.js": "^1.78.4", + "@truffle/hdwallet-provider": "^2.1.15", "@types/express": "^4.17.17", "@types/node": "^18.11.18", "@types/web3": "^1.2.2", @@ -33,59 +35,69 @@ "@uniswap/v2-periphery": "^1.1.0-beta.0", "@uniswap/v3-core": "^1.0.1", "@uniswap/v3-periphery": "^1.4.3", - "@uniswap/v3-sdk": "^3.9.0", - "bignumber.js": "^9.1.1", + "@uniswap/v3-sdk": "^3.10.0", + "bignumber.js": "^9.1.2", "bnc-sdk": "^4.6.7", "chalk": "^4.1.2", - "data-fns": "^1.1.0", "cross-fetch": "^3.1.6", - "dotenv": "^16.0.3", + "data-fns": "^1.1.0", + "dotenv": "^16.3.1", "esm": "^3.2.25", "ethereumjs-tx": "^2.1.2", "flashbots": "^1.0.0", "fs-extra": "^11.1.1", "ganache-core": "^2.13.2", - "hardhat-contract-sizer": "^2.8.0", + "hardhat-contract-sizer": "^2.10.0", "hardhat-gas-reporter": "^1.0.9", "hardhat-spdx-license-identifier": "^2.1.0", + "hardhat-tracer": "^2.6.0", "https": "^1.0.0", - "mathjs": "^11.8.0", + "mathjs": "^11.11.0", "nodemon": "^2.0.22", "path": "^0.12.7", "prb-math": "^2.4.3", "require-from-string": "^2.0.2", - "solc": "0.8.20", + "sol-merger": "^4.4.0", + "solc": "0.8.21", "to-hex": "0.0.18", "toml": "^3.0.0", - "truffle": "^5.9.0", + "truffle": "^5.11.4", "truffle-contract-size": "^2.0.1", + "truffle-flattener": "^1.6.0", "truffle-hdwallet-provider": "^1.0.6", - "tslib": "^2.5.1", - "typescript": "^5.0.4", + "tslib": "^2.6.2", + "typescript": "^5.2.2", "util": "^0.12.5", "web3-eth-contract": "^1.10.0", "web3-utils": "^1.10.0", - "ws": "^8.13.0", + "ws": "^8.14.1", "zksync-web3": "^0.14.3" }, "devDependencies": { "@nomiclabs/hardhat-ethers": "^2.2.3", "@nomiclabs/hardhat-etherscan": "^3.1.7", "@nomiclabs/hardhat-truffle5": "^2.0.7", - "@nomiclabs/hardhat-vyper": "^3.0.3", - "@nomiclabs/hardhat-waffle": "^2.0.5", + "@nomiclabs/hardhat-vyper": "^3.0.4", + "@nomiclabs/hardhat-waffle": "^2.0.6", "@nomiclabs/hardhat-web3": "^2.0.0", "@openzeppelin/hardhat-upgrades": "^1.26.0", "@openzeppelin/test-helpers": "^0.5.16", - "chai": "^4.3.7", + "chai": "^4.3.8", + "chai-almost": "^1.0.1", "ethereum-waffle": "^4.0.10", "ethers": "^5.7.2", - "hardhat": "^2.14.0", - "hardhat-deploy": "^0.11.29", + "hardhat": "^2.17.3", + "hardhat-deploy": "^0.11.37", "json-loader": "^0.5.7", "web3": "^1.10.0" } }, + "node_modules/@aduh95/viz.js": { + "version": "3.7.0", + "resolved": "https://registry.npmjs.org/@aduh95/viz.js/-/viz.js-3.7.0.tgz", + "integrity": "sha512-20Pk2Z98fbPLkECcrZSJszKos/OgtvJJR3NcbVfgCJ6EQjDNzW2P1BKqImOz3tJ952dvO2DWEhcLhQ1Wz1e9ng==", + "optional": true + }, "node_modules/@ampproject/remapping": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.0.tgz", @@ -125,9 +137,9 @@ } }, "node_modules/@apollo/usage-reporting-protobuf": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/@apollo/usage-reporting-protobuf/-/usage-reporting-protobuf-4.1.0.tgz", - "integrity": "sha512-hXouMuw5pQVkzi8dgMybmr6Y11+eRmMQVoB5TF0HyTwAg9SOq/v3OCuiYqcVUKdBcskU9Msp+XvjAk0GKpWCwQ==", + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/@apollo/usage-reporting-protobuf/-/usage-reporting-protobuf-4.1.1.tgz", + "integrity": "sha512-u40dIUePHaSKVshcedO7Wp+mPiZsaU6xjv9J+VyxpoU/zL6Jle+9zWeG98tr/+SZ0nZ4OXhrbb8SNr0rAPpIDA==", "optional": true, "dependencies": { "@apollo/protobufjs": "1.2.7" @@ -263,6 +275,30 @@ "xss": "^1.0.8" } }, + "node_modules/@arbitrum/nitro-contracts": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@arbitrum/nitro-contracts/-/nitro-contracts-1.0.2.tgz", + "integrity": "sha512-Y+cXIQNsy9UNANnFrDGKhHzNmOWttxpXP0/uJFTRmS+rgS4ozlr81/UmBo3tX6uWjziDtquhYRuG3wx17talOQ==", + "hasInstallScript": true, + "dependencies": { + "@openzeppelin/contracts": "4.5.0", + "@openzeppelin/contracts-upgradeable": "4.5.2", + "patch-package": "^6.4.7" + }, + "optionalDependencies": { + "sol2uml": "2.2.0" + } + }, + "node_modules/@arbitrum/nitro-contracts/node_modules/@openzeppelin/contracts": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/@openzeppelin/contracts/-/contracts-4.5.0.tgz", + "integrity": "sha512-fdkzKPYMjrRiPK6K4y64e6GzULR7R7RwxSigHS8DDp7aWDeoReqsQI+cxHV1UuhAqX69L1lAaWDxenfP+xiqzA==" + }, + "node_modules/@arbitrum/nitro-contracts/node_modules/@openzeppelin/contracts-upgradeable": { + "version": "4.5.2", + "resolved": "https://registry.npmjs.org/@openzeppelin/contracts-upgradeable/-/contracts-upgradeable-4.5.2.tgz", + "integrity": "sha512-xgWZYaPlrEOQo3cBj97Ufiuv79SPd8Brh4GcFYhPgb6WvAq4ppz8dWKL6h+jLAK01rUqMRp/TS9AdXgAeNvCLA==" + }, "node_modules/@aws-crypto/sha256-js": { "version": "1.2.2", "resolved": "https://registry.npmjs.org/@aws-crypto/sha256-js/-/sha256-js-1.2.2.tgz", @@ -298,9 +334,9 @@ "dev": true }, "node_modules/@aws-sdk/types": { - "version": "3.329.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.329.0.tgz", - "integrity": "sha512-wFBW4yciDfzQBSFmWNaEvHShnSGLMxSu9Lls6EUf6xDMavxSB36bsrVRX6CyAo/W0NeIIyEOW1LclGPgJV1okg==", + "version": "3.342.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.342.0.tgz", + "integrity": "sha512-5uyXVda/AgUpdZNJ9JPHxwyxr08miPiZ/CKSMcRdQVjcNnrdzY9m/iM9LvnQT44sQO+IEEkF2IoZIWvZcq199A==", "dev": true, "dependencies": { "tslib": "^2.5.0" @@ -713,11 +749,11 @@ } }, "node_modules/@babel/runtime": { - "version": "7.21.5", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.21.5.tgz", - "integrity": "sha512-8jI69toZqqcsnqGGqwGS4Qb1VwLOEp4hz+CXPywcvjs60u3B4Pom/U/7rm4W8tMOYEB+E9wgD0mW1l3r8qlI9Q==", + "version": "7.22.15", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.22.15.tgz", + "integrity": "sha512-T0O+aa+4w0u06iNmapipJXMV4HoUir03hpx3/YqXXhu9xim3w+dVphjFWl1OH8NbZHw5Lbm9k45drDkgq2VNNA==", "dependencies": { - "regenerator-runtime": "^0.13.11" + "regenerator-runtime": "^0.14.0" }, "engines": { "node": ">=6.9.0" @@ -1062,6 +1098,27 @@ "ethers": "^5" } }, + "node_modules/@eth-optimism/contracts-bedrock": { + "version": "0.16.0", + "resolved": "https://registry.npmjs.org/@eth-optimism/contracts-bedrock/-/contracts-bedrock-0.16.0.tgz", + "integrity": "sha512-MfHJdeQ/BzHgkoHnA+NGb1hU8CH0OFsp4ylmFi0uwYh3xPJxcHt9qhy1g4MGGMUGAPIUmlBPaqhwbBlQkaeFrA==", + "dependencies": { + "@openzeppelin/contracts": "4.7.3", + "@openzeppelin/contracts-upgradeable": "4.7.3", + "@rari-capital/solmate": "github:transmissions11/solmate#8f9b23f8838670afda0fd8983f2c41e8037ae6bc", + "clones-with-immutable-args": "github:Saw-mon-and-Natalie/clones-with-immutable-args#105efee1b9127ed7f6fedf139e1fc796ce8791f2" + } + }, + "node_modules/@eth-optimism/contracts-bedrock/node_modules/@openzeppelin/contracts": { + "version": "4.7.3", + "resolved": "https://registry.npmjs.org/@openzeppelin/contracts/-/contracts-4.7.3.tgz", + "integrity": "sha512-dGRS0agJzu8ybo44pCIf3xBaPQN/65AIXNgK8+4gzKd5kbvlqyxryUYVLJv7fK98Seyd2hDZzVEHSWAh0Bt1Yw==" + }, + "node_modules/@eth-optimism/contracts-bedrock/node_modules/@openzeppelin/contracts-upgradeable": { + "version": "4.7.3", + "resolved": "https://registry.npmjs.org/@openzeppelin/contracts-upgradeable/-/contracts-upgradeable-4.7.3.tgz", + "integrity": "sha512-+wuegAMaLcZnLCJIvrVUDzA9z/Wp93f0Dla/4jJvIhijRrPabjQbZe6fWiECLaJyfn5ci9fqf9vTw3xpQOad2A==" + }, "node_modules/@eth-optimism/core-utils": { "version": "0.10.1", "resolved": "https://registry.npmjs.org/@eth-optimism/core-utils/-/core-utils-0.10.1.tgz", @@ -1846,7 +1903,21 @@ "@chainsafe/persistent-merkle-tree": "^0.6.1" } }, - "node_modules/@ethereumjs/tx/node_modules/@noble/hashes": { + "node_modules/@ethereumjs/tx/node_modules/@noble/curves": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@noble/curves/-/curves-1.0.0.tgz", + "integrity": "sha512-2upgEu0iLiDVDZkNLeFV2+ht0BAVgQnEmCk6JsOch9Rp8xfkMCbvbAZlA2pBHQc73dbl+vFOXfqkf4uemdn0bw==", + "funding": [ + { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } + ], + "dependencies": { + "@noble/hashes": "1.3.0" + } + }, + "node_modules/@ethereumjs/tx/node_modules/@noble/curves/node_modules/@noble/hashes": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.3.0.tgz", "integrity": "sha512-ilHEACi9DwqJB0pw7kv+Apvh50jiiSyR/cQ3y4W7lOR5mhvn/50FLUfsnfJz0BDZtl/RR16kXvptiv6q1msYZg==", @@ -1857,6 +1928,17 @@ } ] }, + "node_modules/@ethereumjs/tx/node_modules/@noble/hashes": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.3.1.tgz", + "integrity": "sha512-EbqwksQwz9xDRGfDST86whPBgM65E0OH/pCgqW0GBVzO22bNE+NuIbeTb714+IfSjU3aRk47EUvXIb5bTsenKA==", + "engines": { + "node": ">= 16" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, "node_modules/@ethereumjs/tx/node_modules/@scure/bip32": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/@scure/bip32/-/bip32-1.3.0.tgz", @@ -1899,6 +1981,17 @@ "@scure/bip39": "1.2.0" } }, + "node_modules/@ethereumjs/tx/node_modules/ethereum-cryptography/node_modules/@noble/hashes": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.3.0.tgz", + "integrity": "sha512-ilHEACi9DwqJB0pw7kv+Apvh50jiiSyR/cQ3y4W7lOR5mhvn/50FLUfsnfJz0BDZtl/RR16kXvptiv6q1msYZg==", + "funding": [ + { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } + ] + }, "node_modules/@ethereumjs/util": { "version": "8.0.6", "resolved": "https://registry.npmjs.org/@ethereumjs/util/-/util-8.0.6.tgz", @@ -1936,7 +2029,21 @@ "@chainsafe/persistent-merkle-tree": "^0.6.1" } }, - "node_modules/@ethereumjs/util/node_modules/@noble/hashes": { + "node_modules/@ethereumjs/util/node_modules/@noble/curves": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@noble/curves/-/curves-1.0.0.tgz", + "integrity": "sha512-2upgEu0iLiDVDZkNLeFV2+ht0BAVgQnEmCk6JsOch9Rp8xfkMCbvbAZlA2pBHQc73dbl+vFOXfqkf4uemdn0bw==", + "funding": [ + { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } + ], + "dependencies": { + "@noble/hashes": "1.3.0" + } + }, + "node_modules/@ethereumjs/util/node_modules/@noble/curves/node_modules/@noble/hashes": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.3.0.tgz", "integrity": "sha512-ilHEACi9DwqJB0pw7kv+Apvh50jiiSyR/cQ3y4W7lOR5mhvn/50FLUfsnfJz0BDZtl/RR16kXvptiv6q1msYZg==", @@ -1947,6 +2054,17 @@ } ] }, + "node_modules/@ethereumjs/util/node_modules/@noble/hashes": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.3.1.tgz", + "integrity": "sha512-EbqwksQwz9xDRGfDST86whPBgM65E0OH/pCgqW0GBVzO22bNE+NuIbeTb714+IfSjU3aRk47EUvXIb5bTsenKA==", + "engines": { + "node": ">= 16" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, "node_modules/@ethereumjs/util/node_modules/@scure/bip32": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/@scure/bip32/-/bip32-1.3.0.tgz", @@ -1989,6 +2107,17 @@ "@scure/bip39": "1.2.0" } }, + "node_modules/@ethereumjs/util/node_modules/ethereum-cryptography/node_modules/@noble/hashes": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.3.0.tgz", + "integrity": "sha512-ilHEACi9DwqJB0pw7kv+Apvh50jiiSyR/cQ3y4W7lOR5mhvn/50FLUfsnfJz0BDZtl/RR16kXvptiv6q1msYZg==", + "funding": [ + { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } + ] + }, "node_modules/@ethereumjs/vm": { "version": "5.6.0", "resolved": "https://registry.npmjs.org/@ethereumjs/vm/-/vm-5.6.0.tgz", @@ -2760,9 +2889,9 @@ } }, "node_modules/@flashbots/ethers-provider-bundle": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/@flashbots/ethers-provider-bundle/-/ethers-provider-bundle-0.6.1.tgz", - "integrity": "sha512-W7tSX832mi7XKlbg4dIMzV1HMw5Dg0ox0YOqPxW2nO2JqsAZwWYFrAk4nNZnsqRdexHiPF4JUYez/ELI5VpScA==", + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/@flashbots/ethers-provider-bundle/-/ethers-provider-bundle-0.6.2.tgz", + "integrity": "sha512-W4Hi47zWggWgLBwhoxH3qaojudAjcbBU+ldEYi5o06UQm/25Hk/AUvCLiN+9nvy1g3xxpF9QBdMniUwjC4cpBw==", "peerDependencies": { "ethers": "5.7.2" } @@ -3208,97 +3337,6 @@ "events": "^3.2.0" } }, - "node_modules/@ledgerhq/hw-transport-node-hid": { - "version": "5.26.0", - "resolved": "https://registry.npmjs.org/@ledgerhq/hw-transport-node-hid/-/hw-transport-node-hid-5.26.0.tgz", - "integrity": "sha512-qhaefZVZatJ6UuK8Wb6WSFNOLWc2mxcv/xgsfKi5HJCIr4bPF/ecIeN+7fRcEaycxj4XykY6Z4A7zDVulfFH4w==", - "optional": true, - "dependencies": { - "@ledgerhq/devices": "^5.26.0", - "@ledgerhq/errors": "^5.26.0", - "@ledgerhq/hw-transport": "^5.26.0", - "@ledgerhq/hw-transport-node-hid-noevents": "^5.26.0", - "@ledgerhq/logs": "^5.26.0", - "lodash": "^4.17.20", - "node-hid": "1.3.0", - "usb": "^1.6.3" - } - }, - "node_modules/@ledgerhq/hw-transport-node-hid-noevents": { - "version": "5.51.1", - "resolved": "https://registry.npmjs.org/@ledgerhq/hw-transport-node-hid-noevents/-/hw-transport-node-hid-noevents-5.51.1.tgz", - "integrity": "sha512-9wFf1L8ZQplF7XOY2sQGEeOhpmBRzrn+4X43kghZ7FBDoltrcK+s/D7S+7ffg3j2OySyP6vIIIgloXylao5Scg==", - "optional": true, - "dependencies": { - "@ledgerhq/devices": "^5.51.1", - "@ledgerhq/errors": "^5.50.0", - "@ledgerhq/hw-transport": "^5.51.1", - "@ledgerhq/logs": "^5.50.0", - "node-hid": "2.1.1" - } - }, - "node_modules/@ledgerhq/hw-transport-node-hid-noevents/node_modules/@ledgerhq/hw-transport": { - "version": "5.51.1", - "resolved": "https://registry.npmjs.org/@ledgerhq/hw-transport/-/hw-transport-5.51.1.tgz", - "integrity": "sha512-6wDYdbWrw9VwHIcoDnqWBaDFyviyjZWv6H9vz9Vyhe4Qd7TIFmbTl/eWs6hZvtZBza9K8y7zD8ChHwRI4s9tSw==", - "optional": true, - "dependencies": { - "@ledgerhq/devices": "^5.51.1", - "@ledgerhq/errors": "^5.50.0", - "events": "^3.3.0" - } - }, - "node_modules/@ledgerhq/hw-transport-node-hid-noevents/node_modules/node-addon-api": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-3.2.1.tgz", - "integrity": "sha512-mmcei9JghVNDYydghQmeDX8KoAm0FAiYyIcUt/N4nhyAipB17pllZQDOJD2fotxABnt4Mdz+dKTO7eftLg4d0A==", - "optional": true - }, - "node_modules/@ledgerhq/hw-transport-node-hid-noevents/node_modules/node-hid": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/node-hid/-/node-hid-2.1.1.tgz", - "integrity": "sha512-Skzhqow7hyLZU93eIPthM9yjot9lszg9xrKxESleEs05V2NcbUptZc5HFqzjOkSmL0sFlZFr3kmvaYebx06wrw==", - "hasInstallScript": true, - "optional": true, - "dependencies": { - "bindings": "^1.5.0", - "node-addon-api": "^3.0.2", - "prebuild-install": "^6.0.0" - }, - "bin": { - "hid-showdevices": "src/show-devices.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/@ledgerhq/hw-transport-node-hid-noevents/node_modules/prebuild-install": { - "version": "6.1.4", - "resolved": "https://registry.npmjs.org/prebuild-install/-/prebuild-install-6.1.4.tgz", - "integrity": "sha512-Z4vpywnK1lBg+zdPCVCsKq0xO66eEV9rWo2zrROGGiRS4JtueBOdlB1FnY8lcy7JsUud/Q3ijUxyWN26Ika0vQ==", - "optional": true, - "dependencies": { - "detect-libc": "^1.0.3", - "expand-template": "^2.0.3", - "github-from-package": "0.0.0", - "minimist": "^1.2.3", - "mkdirp-classic": "^0.5.3", - "napi-build-utils": "^1.0.1", - "node-abi": "^2.21.0", - "npmlog": "^4.0.1", - "pump": "^3.0.0", - "rc": "^1.2.7", - "simple-get": "^3.0.3", - "tar-fs": "^2.0.0", - "tunnel-agent": "^0.6.0" - }, - "bin": { - "prebuild-install": "bin.js" - }, - "engines": { - "node": ">=6" - } - }, "node_modules/@ledgerhq/hw-transport-u2f": { "version": "5.26.0", "resolved": "https://registry.npmjs.org/@ledgerhq/hw-transport-u2f/-/hw-transport-u2f-5.26.0.tgz", @@ -3317,9 +3355,9 @@ "integrity": "sha512-swKHYCOZUGyVt4ge0u8a7AwNcA//h4nx5wIi0sruGye1IJ5Cva0GyK9L2/WdX+kWVTKp92ZiEo1df31lrWGPgA==" }, "node_modules/@maticnetwork/maticjs": { - "version": "3.5.0", - "resolved": "https://registry.npmjs.org/@maticnetwork/maticjs/-/maticjs-3.5.0.tgz", - "integrity": "sha512-f7wZucF38Ii/nIBV9qqQzlEE33/IWCVaToSXIhGC3DaZZME9VlUf4cgt/n43hQouwYpmkpgEoTDDs3QzTr5UcQ==", + "version": "3.6.6", + "resolved": "https://registry.npmjs.org/@maticnetwork/maticjs/-/maticjs-3.6.6.tgz", + "integrity": "sha512-VhbK9yHdRgQl9GWt1XwasHTDEImd0ApmHFG0yCN8xjPz0YvXgsSPb+p+M5JzQYEgLQGZ3L/K3nnVYHBTiRIhPA==", "dependencies": { "@ethereumjs/block": "^3.6.2", "ethereumjs-util": "^7.1.4", @@ -3488,29 +3526,26 @@ } }, "node_modules/@noble/curves": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@noble/curves/-/curves-1.0.0.tgz", - "integrity": "sha512-2upgEu0iLiDVDZkNLeFV2+ht0BAVgQnEmCk6JsOch9Rp8xfkMCbvbAZlA2pBHQc73dbl+vFOXfqkf4uemdn0bw==", - "funding": [ - { - "type": "individual", - "url": "https://paulmillr.com/funding/" - } - ], + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@noble/curves/-/curves-1.1.0.tgz", + "integrity": "sha512-091oBExgENk/kGj3AZmtBDMpxQPDtxQABR2B9lb1JbVTs6ytdzZNwvhxQ4MWasRNEzlbEH8jCWFCwhF/Obj5AA==", "dependencies": { - "@noble/hashes": "1.3.0" + "@noble/hashes": "1.3.1" + }, + "funding": { + "url": "https://paulmillr.com/funding/" } }, "node_modules/@noble/curves/node_modules/@noble/hashes": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.3.0.tgz", - "integrity": "sha512-ilHEACi9DwqJB0pw7kv+Apvh50jiiSyR/cQ3y4W7lOR5mhvn/50FLUfsnfJz0BDZtl/RR16kXvptiv6q1msYZg==", - "funding": [ - { - "type": "individual", - "url": "https://paulmillr.com/funding/" - } - ] + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.3.1.tgz", + "integrity": "sha512-EbqwksQwz9xDRGfDST86whPBgM65E0OH/pCgqW0GBVzO22bNE+NuIbeTb714+IfSjU3aRk47EUvXIb5bTsenKA==", + "engines": { + "node": ">= 16" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } }, "node_modules/@noble/hashes": { "version": "1.1.3", @@ -3524,15 +3559,15 @@ ] }, "node_modules/@nomicfoundation/ethereumjs-block": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/@nomicfoundation/ethereumjs-block/-/ethereumjs-block-5.0.1.tgz", - "integrity": "sha512-u1Yioemi6Ckj3xspygu/SfFvm8vZEO8/Yx5a1QLzi6nVU0jz3Pg2OmHKJ5w+D9Ogk1vhwRiqEBAqcb0GVhCyHw==", - "dependencies": { - "@nomicfoundation/ethereumjs-common": "4.0.1", - "@nomicfoundation/ethereumjs-rlp": "5.0.1", - "@nomicfoundation/ethereumjs-trie": "6.0.1", - "@nomicfoundation/ethereumjs-tx": "5.0.1", - "@nomicfoundation/ethereumjs-util": "9.0.1", + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/@nomicfoundation/ethereumjs-block/-/ethereumjs-block-5.0.2.tgz", + "integrity": "sha512-hSe6CuHI4SsSiWWjHDIzWhSiAVpzMUcDRpWYzN0T9l8/Rz7xNn3elwVOJ/tAyS0LqL6vitUD78Uk7lQDXZun7Q==", + "dependencies": { + "@nomicfoundation/ethereumjs-common": "4.0.2", + "@nomicfoundation/ethereumjs-rlp": "5.0.2", + "@nomicfoundation/ethereumjs-trie": "6.0.2", + "@nomicfoundation/ethereumjs-tx": "5.0.2", + "@nomicfoundation/ethereumjs-util": "9.0.2", "ethereum-cryptography": "0.1.3", "ethers": "^5.7.1" }, @@ -3563,17 +3598,17 @@ } }, "node_modules/@nomicfoundation/ethereumjs-blockchain": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/@nomicfoundation/ethereumjs-blockchain/-/ethereumjs-blockchain-7.0.1.tgz", - "integrity": "sha512-NhzndlGg829XXbqJEYrF1VeZhAwSPgsK/OB7TVrdzft3y918hW5KNd7gIZ85sn6peDZOdjBsAXIpXZ38oBYE5A==", - "dependencies": { - "@nomicfoundation/ethereumjs-block": "5.0.1", - "@nomicfoundation/ethereumjs-common": "4.0.1", - "@nomicfoundation/ethereumjs-ethash": "3.0.1", - "@nomicfoundation/ethereumjs-rlp": "5.0.1", - "@nomicfoundation/ethereumjs-trie": "6.0.1", - "@nomicfoundation/ethereumjs-tx": "5.0.1", - "@nomicfoundation/ethereumjs-util": "9.0.1", + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/@nomicfoundation/ethereumjs-blockchain/-/ethereumjs-blockchain-7.0.2.tgz", + "integrity": "sha512-8UUsSXJs+MFfIIAKdh3cG16iNmWzWC/91P40sazNvrqhhdR/RtGDlFk2iFTGbBAZPs2+klZVzhRX8m2wvuvz3w==", + "dependencies": { + "@nomicfoundation/ethereumjs-block": "5.0.2", + "@nomicfoundation/ethereumjs-common": "4.0.2", + "@nomicfoundation/ethereumjs-ethash": "3.0.2", + "@nomicfoundation/ethereumjs-rlp": "5.0.2", + "@nomicfoundation/ethereumjs-trie": "6.0.2", + "@nomicfoundation/ethereumjs-tx": "5.0.2", + "@nomicfoundation/ethereumjs-util": "9.0.2", "abstract-level": "^1.0.3", "debug": "^4.3.3", "ethereum-cryptography": "0.1.3", @@ -3608,22 +3643,22 @@ } }, "node_modules/@nomicfoundation/ethereumjs-common": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/@nomicfoundation/ethereumjs-common/-/ethereumjs-common-4.0.1.tgz", - "integrity": "sha512-OBErlkfp54GpeiE06brBW/TTbtbuBJV5YI5Nz/aB2evTDo+KawyEzPjBlSr84z/8MFfj8wS2wxzQX1o32cev5g==", + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/@nomicfoundation/ethereumjs-common/-/ethereumjs-common-4.0.2.tgz", + "integrity": "sha512-I2WGP3HMGsOoycSdOTSqIaES0ughQTueOsddJ36aYVpI3SN8YSusgRFLwzDJwRFVIYDKx/iJz0sQ5kBHVgdDwg==", "dependencies": { - "@nomicfoundation/ethereumjs-util": "9.0.1", + "@nomicfoundation/ethereumjs-util": "9.0.2", "crc-32": "^1.2.0" } }, "node_modules/@nomicfoundation/ethereumjs-ethash": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/@nomicfoundation/ethereumjs-ethash/-/ethereumjs-ethash-3.0.1.tgz", - "integrity": "sha512-KDjGIB5igzWOp8Ik5I6QiRH5DH+XgILlplsHR7TEuWANZA759G6krQ6o8bvj+tRUz08YygMQu/sGd9mJ1DYT8w==", + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@nomicfoundation/ethereumjs-ethash/-/ethereumjs-ethash-3.0.2.tgz", + "integrity": "sha512-8PfoOQCcIcO9Pylq0Buijuq/O73tmMVURK0OqdjhwqcGHYC2PwhbajDh7GZ55ekB0Px197ajK3PQhpKoiI/UPg==", "dependencies": { - "@nomicfoundation/ethereumjs-block": "5.0.1", - "@nomicfoundation/ethereumjs-rlp": "5.0.1", - "@nomicfoundation/ethereumjs-util": "9.0.1", + "@nomicfoundation/ethereumjs-block": "5.0.2", + "@nomicfoundation/ethereumjs-rlp": "5.0.2", + "@nomicfoundation/ethereumjs-util": "9.0.2", "abstract-level": "^1.0.3", "bigint-crypto-utils": "^3.0.23", "ethereum-cryptography": "0.1.3" @@ -3655,14 +3690,14 @@ } }, "node_modules/@nomicfoundation/ethereumjs-evm": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/@nomicfoundation/ethereumjs-evm/-/ethereumjs-evm-2.0.1.tgz", - "integrity": "sha512-oL8vJcnk0Bx/onl+TgQOQ1t/534GKFaEG17fZmwtPFeH8S5soiBYPCLUrvANOl4sCp9elYxIMzIiTtMtNNN8EQ==", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/@nomicfoundation/ethereumjs-evm/-/ethereumjs-evm-2.0.2.tgz", + "integrity": "sha512-rBLcUaUfANJxyOx9HIdMX6uXGin6lANCulIm/pjMgRqfiCRMZie3WKYxTSd8ZE/d+qT+zTedBF4+VHTdTSePmQ==", "dependencies": { "@ethersproject/providers": "^5.7.1", - "@nomicfoundation/ethereumjs-common": "4.0.1", - "@nomicfoundation/ethereumjs-tx": "5.0.1", - "@nomicfoundation/ethereumjs-util": "9.0.1", + "@nomicfoundation/ethereumjs-common": "4.0.2", + "@nomicfoundation/ethereumjs-tx": "5.0.2", + "@nomicfoundation/ethereumjs-util": "9.0.2", "debug": "^4.3.3", "ethereum-cryptography": "0.1.3", "mcl-wasm": "^0.7.1", @@ -3695,9 +3730,9 @@ } }, "node_modules/@nomicfoundation/ethereumjs-rlp": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/@nomicfoundation/ethereumjs-rlp/-/ethereumjs-rlp-5.0.1.tgz", - "integrity": "sha512-xtxrMGa8kP4zF5ApBQBtjlSbN5E2HI8m8FYgVSYAnO6ssUoY5pVPGy2H8+xdf/bmMa22Ce8nWMH3aEW8CcqMeQ==", + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/@nomicfoundation/ethereumjs-rlp/-/ethereumjs-rlp-5.0.2.tgz", + "integrity": "sha512-QwmemBc+MMsHJ1P1QvPl8R8p2aPvvVcKBbvHnQOKBpBztEo0omN0eaob6FeZS/e3y9NSe+mfu3nNFBHszqkjTA==", "bin": { "rlp": "bin/rlp" }, @@ -3706,12 +3741,12 @@ } }, "node_modules/@nomicfoundation/ethereumjs-statemanager": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/@nomicfoundation/ethereumjs-statemanager/-/ethereumjs-statemanager-2.0.1.tgz", - "integrity": "sha512-B5ApMOnlruVOR7gisBaYwFX+L/AP7i/2oAahatssjPIBVDF6wTX1K7Qpa39E/nzsH8iYuL3krkYeUFIdO3EMUQ==", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/@nomicfoundation/ethereumjs-statemanager/-/ethereumjs-statemanager-2.0.2.tgz", + "integrity": "sha512-dlKy5dIXLuDubx8Z74sipciZnJTRSV/uHG48RSijhgm1V7eXYFC567xgKtsKiVZB1ViTP9iFL4B6Je0xD6X2OA==", "dependencies": { - "@nomicfoundation/ethereumjs-common": "4.0.1", - "@nomicfoundation/ethereumjs-rlp": "5.0.1", + "@nomicfoundation/ethereumjs-common": "4.0.2", + "@nomicfoundation/ethereumjs-rlp": "5.0.2", "debug": "^4.3.3", "ethereum-cryptography": "0.1.3", "ethers": "^5.7.1", @@ -3741,12 +3776,12 @@ } }, "node_modules/@nomicfoundation/ethereumjs-trie": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/@nomicfoundation/ethereumjs-trie/-/ethereumjs-trie-6.0.1.tgz", - "integrity": "sha512-A64It/IMpDVODzCgxDgAAla8jNjNtsoQZIzZUfIV5AY6Coi4nvn7+VReBn5itlxMiL2yaTlQr9TRWp3CSI6VoA==", + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/@nomicfoundation/ethereumjs-trie/-/ethereumjs-trie-6.0.2.tgz", + "integrity": "sha512-yw8vg9hBeLYk4YNg5MrSJ5H55TLOv2FSWUTROtDtTMMmDGROsAu+0tBjiNGTnKRi400M6cEzoFfa89Fc5k8NTQ==", "dependencies": { - "@nomicfoundation/ethereumjs-rlp": "5.0.1", - "@nomicfoundation/ethereumjs-util": "9.0.1", + "@nomicfoundation/ethereumjs-rlp": "5.0.2", + "@nomicfoundation/ethereumjs-util": "9.0.2", "@types/readable-stream": "^2.3.13", "ethereum-cryptography": "0.1.3", "readable-stream": "^3.6.0" @@ -3778,15 +3813,15 @@ } }, "node_modules/@nomicfoundation/ethereumjs-tx": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/@nomicfoundation/ethereumjs-tx/-/ethereumjs-tx-5.0.1.tgz", - "integrity": "sha512-0HwxUF2u2hrsIM1fsasjXvlbDOq1ZHFV2dd1yGq8CA+MEYhaxZr8OTScpVkkxqMwBcc5y83FyPl0J9MZn3kY0w==", + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/@nomicfoundation/ethereumjs-tx/-/ethereumjs-tx-5.0.2.tgz", + "integrity": "sha512-T+l4/MmTp7VhJeNloMkM+lPU3YMUaXdcXgTGCf8+ZFvV9NYZTRLFekRwlG6/JMmVfIfbrW+dRRJ9A6H5Q/Z64g==", "dependencies": { "@chainsafe/ssz": "^0.9.2", "@ethersproject/providers": "^5.7.2", - "@nomicfoundation/ethereumjs-common": "4.0.1", - "@nomicfoundation/ethereumjs-rlp": "5.0.1", - "@nomicfoundation/ethereumjs-util": "9.0.1", + "@nomicfoundation/ethereumjs-common": "4.0.2", + "@nomicfoundation/ethereumjs-rlp": "5.0.2", + "@nomicfoundation/ethereumjs-util": "9.0.2", "ethereum-cryptography": "0.1.3" }, "engines": { @@ -3816,12 +3851,12 @@ } }, "node_modules/@nomicfoundation/ethereumjs-util": { - "version": "9.0.1", - "resolved": "https://registry.npmjs.org/@nomicfoundation/ethereumjs-util/-/ethereumjs-util-9.0.1.tgz", - "integrity": "sha512-TwbhOWQ8QoSCFhV/DDfSmyfFIHjPjFBj957219+V3jTZYZ2rf9PmDtNOeZWAE3p3vlp8xb02XGpd0v6nTUPbsA==", + "version": "9.0.2", + "resolved": "https://registry.npmjs.org/@nomicfoundation/ethereumjs-util/-/ethereumjs-util-9.0.2.tgz", + "integrity": "sha512-4Wu9D3LykbSBWZo8nJCnzVIYGvGCuyiYLIJa9XXNVt1q1jUzHdB+sJvx95VGCpPkCT+IbLecW6yfzy3E1bQrwQ==", "dependencies": { "@chainsafe/ssz": "^0.10.0", - "@nomicfoundation/ethereumjs-rlp": "5.0.1", + "@nomicfoundation/ethereumjs-rlp": "5.0.2", "ethereum-cryptography": "0.1.3" }, "engines": { @@ -3868,19 +3903,19 @@ } }, "node_modules/@nomicfoundation/ethereumjs-vm": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/@nomicfoundation/ethereumjs-vm/-/ethereumjs-vm-7.0.1.tgz", - "integrity": "sha512-rArhyn0jPsS/D+ApFsz3yVJMQ29+pVzNZ0VJgkzAZ+7FqXSRtThl1C1prhmlVr3YNUlfpZ69Ak+RUT4g7VoOuQ==", - "dependencies": { - "@nomicfoundation/ethereumjs-block": "5.0.1", - "@nomicfoundation/ethereumjs-blockchain": "7.0.1", - "@nomicfoundation/ethereumjs-common": "4.0.1", - "@nomicfoundation/ethereumjs-evm": "2.0.1", - "@nomicfoundation/ethereumjs-rlp": "5.0.1", - "@nomicfoundation/ethereumjs-statemanager": "2.0.1", - "@nomicfoundation/ethereumjs-trie": "6.0.1", - "@nomicfoundation/ethereumjs-tx": "5.0.1", - "@nomicfoundation/ethereumjs-util": "9.0.1", + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/@nomicfoundation/ethereumjs-vm/-/ethereumjs-vm-7.0.2.tgz", + "integrity": "sha512-Bj3KZT64j54Tcwr7Qm/0jkeZXJMfdcAtRBedou+Hx0dPOSIgqaIr0vvLwP65TpHbak2DmAq+KJbW2KNtIoFwvA==", + "dependencies": { + "@nomicfoundation/ethereumjs-block": "5.0.2", + "@nomicfoundation/ethereumjs-blockchain": "7.0.2", + "@nomicfoundation/ethereumjs-common": "4.0.2", + "@nomicfoundation/ethereumjs-evm": "2.0.2", + "@nomicfoundation/ethereumjs-rlp": "5.0.2", + "@nomicfoundation/ethereumjs-statemanager": "2.0.2", + "@nomicfoundation/ethereumjs-trie": "6.0.2", + "@nomicfoundation/ethereumjs-tx": "5.0.2", + "@nomicfoundation/ethereumjs-util": "9.0.2", "debug": "^4.3.3", "ethereum-cryptography": "0.1.3", "mcl-wasm": "^0.7.1", @@ -3951,81 +3986,6 @@ "@nomicfoundation/solidity-analyzer-win32-x64-msvc": "0.1.0" } }, - "node_modules/@nomicfoundation/solidity-analyzer-darwin-arm64": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/@nomicfoundation/solidity-analyzer-darwin-arm64/-/solidity-analyzer-darwin-arm64-0.1.0.tgz", - "integrity": "sha512-vEF3yKuuzfMHsZecHQcnkUrqm8mnTWfJeEVFHpg+cO+le96xQA4lAJYdUan8pXZohQxv1fSReQsn4QGNuBNuCw==", - "cpu": [ - "arm64" - ], - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@nomicfoundation/solidity-analyzer-darwin-x64": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/@nomicfoundation/solidity-analyzer-darwin-x64/-/solidity-analyzer-darwin-x64-0.1.0.tgz", - "integrity": "sha512-dlHeIg0pTL4dB1l9JDwbi/JG6dHQaU1xpDK+ugYO8eJ1kxx9Dh2isEUtA4d02cQAl22cjOHTvifAk96A+ItEHA==", - "cpu": [ - "x64" - ], - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@nomicfoundation/solidity-analyzer-freebsd-x64": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/@nomicfoundation/solidity-analyzer-freebsd-x64/-/solidity-analyzer-freebsd-x64-0.1.0.tgz", - "integrity": "sha512-WFCZYMv86WowDA4GiJKnebMQRt3kCcFqHeIomW6NMyqiKqhK1kIZCxSLDYsxqlx396kKLPN1713Q1S8tu68GKg==", - "cpu": [ - "x64" - ], - "optional": true, - "os": [ - "freebsd" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@nomicfoundation/solidity-analyzer-linux-arm64-gnu": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/@nomicfoundation/solidity-analyzer-linux-arm64-gnu/-/solidity-analyzer-linux-arm64-gnu-0.1.0.tgz", - "integrity": "sha512-DTw6MNQWWlCgc71Pq7CEhEqkb7fZnS7oly13pujs4cMH1sR0JzNk90Mp1zpSCsCs4oKan2ClhMlLKtNat/XRKQ==", - "cpu": [ - "arm64" - ], - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@nomicfoundation/solidity-analyzer-linux-arm64-musl": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/@nomicfoundation/solidity-analyzer-linux-arm64-musl/-/solidity-analyzer-linux-arm64-musl-0.1.0.tgz", - "integrity": "sha512-wUpUnR/3GV5Da88MhrxXh/lhb9kxh9V3Jya2NpBEhKDIRCDmtXMSqPMXHZmOR9DfCwCvG6vLFPr/+YrPCnUN0w==", - "cpu": [ - "arm64" - ], - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 10" - } - }, "node_modules/@nomicfoundation/solidity-analyzer-linux-x64-gnu": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/@nomicfoundation/solidity-analyzer-linux-x64-gnu/-/solidity-analyzer-linux-x64-gnu-0.1.0.tgz", @@ -4056,51 +4016,6 @@ "node": ">= 10" } }, - "node_modules/@nomicfoundation/solidity-analyzer-win32-arm64-msvc": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/@nomicfoundation/solidity-analyzer-win32-arm64-msvc/-/solidity-analyzer-win32-arm64-msvc-0.1.0.tgz", - "integrity": "sha512-7x5SXZ9R9H4SluJZZP8XPN+ju7Mx+XeUMWZw7ZAqkdhP5mK19I4vz3x0zIWygmfE8RT7uQ5xMap0/9NPsO+ykw==", - "cpu": [ - "arm64" - ], - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@nomicfoundation/solidity-analyzer-win32-ia32-msvc": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/@nomicfoundation/solidity-analyzer-win32-ia32-msvc/-/solidity-analyzer-win32-ia32-msvc-0.1.0.tgz", - "integrity": "sha512-m7w3xf+hnE774YRXu+2mGV7RiF3QJtUoiYU61FascCkQhX3QMQavh7saH/vzb2jN5D24nT/jwvaHYX/MAM9zUw==", - "cpu": [ - "ia32" - ], - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@nomicfoundation/solidity-analyzer-win32-x64-msvc": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/@nomicfoundation/solidity-analyzer-win32-x64-msvc/-/solidity-analyzer-win32-x64-msvc-0.1.0.tgz", - "integrity": "sha512-xCuybjY0sLJQnJhupiFAXaek2EqF0AP0eBjgzaalPXSNvCEN6ZYHvUzdA50ENDVeSYFXcUsYf3+FsD3XKaeptA==", - "cpu": [ - "x64" - ], - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">= 10" - } - }, "node_modules/@nomiclabs/hardhat-docker": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/@nomiclabs/hardhat-docker/-/hardhat-docker-2.0.2.tgz", @@ -4530,9 +4445,9 @@ } }, "node_modules/@nomiclabs/hardhat-vyper": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/@nomiclabs/hardhat-vyper/-/hardhat-vyper-3.0.3.tgz", - "integrity": "sha512-WzpXACy7d1AsEmanAOmEqqxI4wrIvDx6q6k07Xb68Dc4JB/+9gKb6kz6UF0Qviq8vYUVfJ8YRpyAjHVZ2uQFlg==", + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@nomiclabs/hardhat-vyper/-/hardhat-vyper-3.0.4.tgz", + "integrity": "sha512-VSmNCs0MQCn7qgWubfSkJkFEJmsTvbimPsbxknM5jLFi7pNeDVB5eO00GaoweuZiWKBVTHYJsylVK5686GoPrQ==", "dev": true, "dependencies": { "debug": "^4.1.1", @@ -4587,12 +4502,13 @@ } }, "node_modules/@nomiclabs/hardhat-waffle": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@nomiclabs/hardhat-waffle/-/hardhat-waffle-2.0.5.tgz", - "integrity": "sha512-U1RH9OQ1mWYQfb+moX5aTgGjpVVlOcpiFI47wwnaGG4kLhcTy90cNiapoqZenxcRAITVbr0/+QSduINL5EsUIQ==", + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/@nomiclabs/hardhat-waffle/-/hardhat-waffle-2.0.6.tgz", + "integrity": "sha512-+Wz0hwmJGSI17B+BhU/qFRZ1l6/xMW82QGXE/Gi+WTmwgJrQefuBs1lIf7hzQ1hLk6hpkvb/zwcNkpVKRYTQYg==", "dev": true, "peerDependencies": { "@nomiclabs/hardhat-ethers": "^2.0.0", + "@types/sinon-chai": "^3.2.3", "ethereum-waffle": "*", "ethers": "^5.0.0", "hardhat": "^2.0.0" @@ -4746,9 +4662,9 @@ } }, "node_modules/@openzeppelin/contracts": { - "version": "4.8.3", - "resolved": "https://registry.npmjs.org/@openzeppelin/contracts/-/contracts-4.8.3.tgz", - "integrity": "sha512-bQHV8R9Me8IaJoJ2vPG4rXcL7seB7YVuskr4f+f5RyOStSZetwzkWtoqDMl5erkBJy0lDRUnIR2WIkPiC0GJlg==" + "version": "4.9.3", + "resolved": "https://registry.npmjs.org/@openzeppelin/contracts/-/contracts-4.9.3.tgz", + "integrity": "sha512-He3LieZ1pP2TNt5JbkPA4PNT9WC3gOTOlDcFGJW4Le4QKqwmiNJCRt44APfxMxvq7OugU/cqYuPcSBzOw38DAg==" }, "node_modules/@openzeppelin/contracts-upgradeable": { "version": "4.8.3", @@ -4762,9 +4678,9 @@ "integrity": "sha512-z0zMCjyhhp4y7XKAcDAi3Vgms4T2PstwBdahiO0+9NaGICQKjynK3wduSRplTgk4LXmoO1yfDGO5RbjKYxtuxA==" }, "node_modules/@openzeppelin/hardhat-upgrades": { - "version": "1.26.0", - "resolved": "https://registry.npmjs.org/@openzeppelin/hardhat-upgrades/-/hardhat-upgrades-1.26.0.tgz", - "integrity": "sha512-ggCvdIf7A9QcMedCaswecgt3N7hacx3qYOn+4bNPqMAwslo/SJ9vN4AhV0VWkDcY4CqFFou3RFQmDWNeLMBX9A==", + "version": "1.27.0", + "resolved": "https://registry.npmjs.org/@openzeppelin/hardhat-upgrades/-/hardhat-upgrades-1.27.0.tgz", + "integrity": "sha512-+OwrHWDz9tzpmBev6t2CtZM2tRpy/ybhg5e3GIgyeqTxK2vUV40dxIxO6lie+qKeJHZ2RIdDwvSTSiCEJif+fA==", "dev": true, "dependencies": { "@openzeppelin/upgrades-core": "^1.26.2", @@ -4870,9 +4786,9 @@ } }, "node_modules/@poanet/solidity-flattener": { - "version": "3.0.8", - "resolved": "https://registry.npmjs.org/@poanet/solidity-flattener/-/solidity-flattener-3.0.8.tgz", - "integrity": "sha512-WS6sUXfvNRwybGKKpA8MznjbP1Qf/ViWW79dqXKE1w+mosSHizNxdNfsdeKfZJfFEYFyJDvqT16prBGFMrlxUQ==", + "version": "3.0.9", + "resolved": "https://registry.npmjs.org/@poanet/solidity-flattener/-/solidity-flattener-3.0.9.tgz", + "integrity": "sha512-3vTJ05uRGJqP0t81963Ed99uijjXSyqgXfdrBD04su1auBU9enOGzUP6H2H7SyWBAmwUPmBb/z9Qy96ytyvtDw==", "dependencies": { "bunyan": "^1.8.12", "decomment": "^0.9.1", @@ -4883,7 +4799,7 @@ "poa-solidity-flattener": "index.js" }, "engines": { - "node": "^16" + "node": ">=16 <=18" } }, "node_modules/@protobufjs/aspromise": { @@ -4950,6 +4866,12 @@ "integrity": "sha512-Vvn3zZrhQZkkBE8LSuW3em98c0FwgO4nxzv6OdSxPKJIEKY2bGbHn+mhGIPerzI4twdxaP8/0+06HBpwf345Lw==", "optional": true }, + "node_modules/@rari-capital/solmate": { + "version": "7.0.0-alpha.3", + "resolved": "git+ssh://git@github.com/transmissions11/solmate.git#8f9b23f8838670afda0fd8983f2c41e8037ae6bc", + "integrity": "sha512-cW0PouqpoiEDhhkOxkqQKcjG4oMJ1Qb+kY6aiwBlgOjpfnhmXK7lkU5ZkHKC22ypQj6lvSc6CaHmXXaPywPsYg==", + "license": "MIT" + }, "node_modules/@redux-saga/core": { "version": "1.2.3", "resolved": "https://registry.npmjs.org/@redux-saga/core/-/core-1.2.3.tgz", @@ -5321,37 +5243,37 @@ } }, "node_modules/@solana/web3.js": { - "version": "1.76.0", - "resolved": "https://registry.npmjs.org/@solana/web3.js/-/web3.js-1.76.0.tgz", - "integrity": "sha512-aJtF/nTs+9St+KtTK/wgVJ+SinfjYzn+3w1ygYIPw8ST6LH+qHBn8XkodgDTwlv/xzNkaVz1kkUDOZ8BPXyZWA==", + "version": "1.78.4", + "resolved": "https://registry.npmjs.org/@solana/web3.js/-/web3.js-1.78.4.tgz", + "integrity": "sha512-up5VG1dK+GPhykmuMIozJZBbVqpm77vbOG6/r5dS7NBGZonwHfTLdBbsYc3rjmaQ4DpCXUa3tUc4RZHRORvZrw==", "dependencies": { - "@babel/runtime": "^7.12.5", + "@babel/runtime": "^7.22.6", "@noble/curves": "^1.0.0", - "@noble/hashes": "^1.3.0", + "@noble/hashes": "^1.3.1", "@solana/buffer-layout": "^4.0.0", - "agentkeepalive": "^4.2.1", + "agentkeepalive": "^4.3.0", "bigint-buffer": "^1.1.5", - "bn.js": "^5.0.0", + "bn.js": "^5.2.1", "borsh": "^0.7.0", "bs58": "^4.0.1", "buffer": "6.0.3", "fast-stable-stringify": "^1.0.0", - "jayson": "^3.4.4", - "node-fetch": "^2.6.7", + "jayson": "^4.1.0", + "node-fetch": "^2.6.12", "rpc-websockets": "^7.5.1", "superstruct": "^0.14.2" } }, "node_modules/@solana/web3.js/node_modules/@noble/hashes": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.3.0.tgz", - "integrity": "sha512-ilHEACi9DwqJB0pw7kv+Apvh50jiiSyR/cQ3y4W7lOR5mhvn/50FLUfsnfJz0BDZtl/RR16kXvptiv6q1msYZg==", - "funding": [ - { - "type": "individual", - "url": "https://paulmillr.com/funding/" - } - ] + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.3.1.tgz", + "integrity": "sha512-EbqwksQwz9xDRGfDST86whPBgM65E0OH/pCgqW0GBVzO22bNE+NuIbeTb714+IfSjU3aRk47EUvXIb5bTsenKA==", + "engines": { + "node": ">= 16" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } }, "node_modules/@solidity-parser/parser": { "version": "0.14.3", @@ -5373,13 +5295,32 @@ } }, "node_modules/@truffle/abi-utils": { - "version": "0.3.10", - "resolved": "https://registry.npmjs.org/@truffle/abi-utils/-/abi-utils-0.3.10.tgz", - "integrity": "sha512-Q3TXsF0NIct3KFLL2giF/alfSoKf5axyw+4wQdDRlihFrG1nbTBzWq+Q0ya6oHffZDida0NSpnJIf5IhFMV+JQ==", + "version": "0.3.9", + "resolved": "https://registry.npmjs.org/@truffle/abi-utils/-/abi-utils-0.3.9.tgz", + "integrity": "sha512-G5dqgwRHx5zwlXjz3QT8OJVfB2cOqWwD6DwKso0KttUt/zejhCjnkKq72rSgyeLMkz7wBB9ERLOsupLBILM8MA==", + "dev": true, "dependencies": { "change-case": "3.0.2", "fast-check": "3.1.1", - "web3-utils": "1.10.0" + "web3-utils": "1.8.2" + } + }, + "node_modules/@truffle/abi-utils/node_modules/web3-utils": { + "version": "1.8.2", + "resolved": "https://registry.npmjs.org/web3-utils/-/web3-utils-1.8.2.tgz", + "integrity": "sha512-v7j6xhfLQfY7xQDrUP0BKbaNrmZ2/+egbqP9q3KYmOiPpnvAfol+32slgL0WX/5n8VPvKCK5EZ1HGrAVICSToA==", + "dev": true, + "dependencies": { + "bn.js": "^5.2.1", + "ethereum-bloom-filters": "^1.0.6", + "ethereumjs-util": "^7.1.0", + "ethjs-unit": "0.1.6", + "number-to-bn": "1.7.0", + "randombytes": "^2.1.0", + "utf8": "3.0.0" + }, + "engines": { + "node": ">=8.0.0" } }, "node_modules/@truffle/blockchain-utils": { @@ -5389,11 +5330,14 @@ "dev": true }, "node_modules/@truffle/code-utils": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/@truffle/code-utils/-/code-utils-3.0.2.tgz", - "integrity": "sha512-Q4FyYIX9G4GyMa8RJDk19kvgiyGZ1CGEx2RmVcXoCDZqEyiHLzqjvCRp+/fuBz2fv7szO6d+60LO1gLCGS1drQ==", + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@truffle/code-utils/-/code-utils-3.0.4.tgz", + "integrity": "sha512-MWK3TMisIFaBpSjK7tt1GoQan7DQDBqT2iSsdQOGD74C7r9NMwsIdnL2EYoB/DPcEJ7B8yP4grlG2fQTrPF96g==", "dependencies": { "cbor": "^5.2.0" + }, + "engines": { + "node": "^16.20 || ^18.16 || >=20" } }, "node_modules/@truffle/codec": { @@ -5466,40 +5410,52 @@ "dev": true }, "node_modules/@truffle/compile-common": { - "version": "0.9.4", - "resolved": "https://registry.npmjs.org/@truffle/compile-common/-/compile-common-0.9.4.tgz", - "integrity": "sha512-mnqJB/hLiPHNf+WKwt/2MH6lv34xSG/SFCib7+ckAklutUqVLeFo8EwQxinuHNkU7LY0C+YgZXhK1WTCO5YRJQ==", + "version": "0.9.8", + "resolved": "https://registry.npmjs.org/@truffle/compile-common/-/compile-common-0.9.8.tgz", + "integrity": "sha512-DTpiyo32t/YhLI1spn84D3MHYHrnoVqO+Gp7ZHrYNwDs86mAxtNiH5lsVzSb8cPgiqlvNsRCU9nm9R0YmKMTBQ==", "dependencies": { - "@truffle/error": "^0.2.0", + "@truffle/error": "^0.2.2", "colors": "1.4.0" + }, + "engines": { + "node": "^16.20 || ^18.16 || >=20" } }, "node_modules/@truffle/compile-common/node_modules/@truffle/error": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/@truffle/error/-/error-0.2.0.tgz", - "integrity": "sha512-Fe0/z4WWb7IP2gBnv3l6zqP87Y0kSMs7oiSLakKJq17q3GUunrHSdioKuNspdggxkXIBhEQLhi8C+LJdwmHKWQ==" + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/@truffle/error/-/error-0.2.2.tgz", + "integrity": "sha512-TqbzJ0O8DHh34cu8gDujnYl4dUl6o2DE4PR6iokbybvnIm/L2xl6+Gv1VC+YJS45xfH83Yo3/Zyg/9Oq8/xZWg==", + "engines": { + "node": "^16.20 || ^18.16 || >=20" + } }, "node_modules/@truffle/config": { - "version": "1.3.56", - "resolved": "https://registry.npmjs.org/@truffle/config/-/config-1.3.56.tgz", - "integrity": "sha512-2wg6zfaUlP3iZP9jHugx3WsyJ2dbIB+nEBULPK5YVbSkqBfXrzW0b9RJYQvyuk/AyFrp/7ycD4r5LnFLq1IHZA==", + "version": "1.3.61", + "resolved": "https://registry.npmjs.org/@truffle/config/-/config-1.3.61.tgz", + "integrity": "sha512-L4uyG47V+k0NrSoVJ9D+hp2jcMstihW1QlNuXiu5g3mU24BjrozlJT34DFkczh/TtRceLjdrQJKA8WJCMICutw==", "optional": true, "dependencies": { - "@truffle/error": "^0.2.0", - "@truffle/events": "^0.1.23", - "@truffle/provider": "^0.3.9", + "@truffle/error": "^0.2.2", + "@truffle/events": "^0.1.25", + "@truffle/provider": "^0.3.13", "conf": "^10.1.2", "debug": "^4.3.1", "find-up": "^2.1.0", "lodash": "^4.17.21", "original-require": "^1.0.1" + }, + "engines": { + "node": "^16.20 || ^18.16 || >=20" } }, "node_modules/@truffle/config/node_modules/@truffle/error": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/@truffle/error/-/error-0.2.0.tgz", - "integrity": "sha512-Fe0/z4WWb7IP2gBnv3l6zqP87Y0kSMs7oiSLakKJq17q3GUunrHSdioKuNspdggxkXIBhEQLhi8C+LJdwmHKWQ==", - "optional": true + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/@truffle/error/-/error-0.2.2.tgz", + "integrity": "sha512-TqbzJ0O8DHh34cu8gDujnYl4dUl6o2DE4PR6iokbybvnIm/L2xl6+Gv1VC+YJS45xfH83Yo3/Zyg/9Oq8/xZWg==", + "optional": true, + "engines": { + "node": "^16.20 || ^18.16 || >=20" + } }, "node_modules/@truffle/config/node_modules/find-up": { "version": "2.1.0", @@ -6033,26 +5989,29 @@ } }, "node_modules/@truffle/dashboard-message-bus-client": { - "version": "0.1.10", - "resolved": "https://registry.npmjs.org/@truffle/dashboard-message-bus-client/-/dashboard-message-bus-client-0.1.10.tgz", - "integrity": "sha512-r9GpdR96T8xzk2Z3Qq5lowixT6hQwDZ9F3D3oNjOv2AOwBrC7dGkt1Ra1FQRsABn4K7LUVvnjjn6rALlsatAdw==", + "version": "0.1.12", + "resolved": "https://registry.npmjs.org/@truffle/dashboard-message-bus-client/-/dashboard-message-bus-client-0.1.12.tgz", + "integrity": "sha512-pI9G0La9tTstb2J2wxUZIMx6H+ZF0XBlsGN3HBkffr4edT0oT12WMCK9GxmKE22Q5VnpXl7wGjatRSEx0C9qDQ==", "optional": true, "dependencies": { - "@truffle/dashboard-message-bus-common": "^0.1.5", - "@truffle/promise-tracker": "^0.1.5", - "axios": "1.2.4", + "@truffle/dashboard-message-bus-common": "^0.1.7", + "@truffle/promise-tracker": "^0.1.7", + "axios": "1.5.0", "debug": "^4.3.1", "delay": "^5.0.0", "isomorphic-ws": "^4.0.1", "node-abort-controller": "^3.0.1", "tiny-typed-emitter": "^2.1.0", "ws": "^7.2.0" + }, + "engines": { + "node": "^16.20 || ^18.16 || >=20" } }, "node_modules/@truffle/dashboard-message-bus-client/node_modules/axios": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/axios/-/axios-1.2.4.tgz", - "integrity": "sha512-lIQuCfBJvZB/Bv7+RWUqEJqNShGOVpk9v7P0ZWx5Ip0qY6u7JBAU6dzQPMLasU9vHL2uD8av/1FDJXj7n6c39w==", + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/axios/-/axios-1.5.0.tgz", + "integrity": "sha512-D4DdjDo5CY50Qms0qGQTTw6Q44jl7zRwY7bthds06pUGfChBCTcQs+N743eFWGEd6pRTMd6A+I87aWyFV5wiZQ==", "optional": true, "dependencies": { "follow-redirects": "^1.15.0", @@ -6096,22 +6055,25 @@ } }, "node_modules/@truffle/dashboard-message-bus-common": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/@truffle/dashboard-message-bus-common/-/dashboard-message-bus-common-0.1.5.tgz", - "integrity": "sha512-F4RfXi7ymNA3HFOlaujRJxAb3I8ciErCRQq+MZVaqjSPF9LSw23IizZsGpLaY43K2bGoBSxyNQRZWxsUEBujPQ==", - "optional": true + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/@truffle/dashboard-message-bus-common/-/dashboard-message-bus-common-0.1.7.tgz", + "integrity": "sha512-jN7q8LBmwQRldSzT/YJE33mnDLrp3EFFDuZyLwtQGInlfcRTXcr5yPY42jxr3Ln19dQe2Chx3I6dWtDByeKLIQ==", + "optional": true, + "engines": { + "node": "^16.20 || ^18.16 || >=20" + } }, "node_modules/@truffle/db": { - "version": "2.0.24", - "resolved": "https://registry.npmjs.org/@truffle/db/-/db-2.0.24.tgz", - "integrity": "sha512-p4UsUKd47/Iv2SJ2m24+ObIalb4Ljt7ysv3mY/gKvEIw3fKxSErPgxDKaC0l3kPOVaz8gfXkbWDGeuLf/f66+Q==", + "version": "2.0.35", + "resolved": "https://registry.npmjs.org/@truffle/db/-/db-2.0.35.tgz", + "integrity": "sha512-PVlNvh7whkTtvI8S5DWTu5O0RqkFV5EmzljEauSjRi8wI1SGYOlRdHWFhH/nxmuCAbyg/JtvC/J0EaXzyssd7w==", "optional": true, "dependencies": { "@graphql-tools/delegate": "^8.4.3", "@graphql-tools/schema": "^8.3.1", - "@truffle/abi-utils": "^0.3.10", - "@truffle/code-utils": "^3.0.2", - "@truffle/config": "^1.3.56", + "@truffle/abi-utils": "^1.0.3", + "@truffle/code-utils": "^3.0.4", + "@truffle/config": "^1.3.61", "abstract-leveldown": "^7.2.0", "apollo-server": "^3.11.0", "debug": "^4.3.1", @@ -6126,14 +6088,34 @@ "pouchdb-debug": "^7.1.1", "pouchdb-find": "^7.0.0", "web3-utils": "1.10.0" + }, + "engines": { + "node": "^16.20 || ^18.16 || >=20" } }, "node_modules/@truffle/db-loader": { - "version": "0.2.24", - "resolved": "https://registry.npmjs.org/@truffle/db-loader/-/db-loader-0.2.24.tgz", - "integrity": "sha512-ucnZqVb4Aw9fnsUnqwgKZiaDUcw2n6C4tuGyl2iVOr1Xpl+F5Cgrz1cfjJ1igdZrtZnmKl0tDvymt2YwPeeYgw==", + "version": "0.2.35", + "resolved": "https://registry.npmjs.org/@truffle/db-loader/-/db-loader-0.2.35.tgz", + "integrity": "sha512-LMi7ADY1mjgLaJSCNOKg6amnxM3IIw3l/KtT6zVIK9rSZdzhTyRUjoK/cSAtjera1KnRwYaEip5p5lQpvGmivg==", + "engines": { + "node": "^16.20 || ^18.16 || >=20" + }, "optionalDependencies": { - "@truffle/db": "^2.0.24" + "@truffle/db": "^2.0.35" + } + }, + "node_modules/@truffle/db/node_modules/@truffle/abi-utils": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@truffle/abi-utils/-/abi-utils-1.0.3.tgz", + "integrity": "sha512-AWhs01HCShaVKjml7Z4AbVREr/u4oiWxCcoR7Cktm0mEvtT04pvnxW5xB/cI4znRkrbPdFQlFt67kgrAjesYkw==", + "optional": true, + "dependencies": { + "change-case": "3.0.2", + "fast-check": "3.1.1", + "web3-utils": "1.10.0" + }, + "engines": { + "node": "^16.20 || ^18.16 || >=20" } }, "node_modules/@truffle/db/node_modules/abstract-leveldown": { @@ -6275,14 +6257,14 @@ } }, "node_modules/@truffle/debugger": { - "version": "11.1.0", - "resolved": "https://registry.npmjs.org/@truffle/debugger/-/debugger-11.1.0.tgz", - "integrity": "sha512-ws3z3ktvW631W6zi9jd9O6+osF6jh+Z6naumIf9ySfAM1cdV4wTHd8iyYwEEc180pJinlc4oCZGvcr5cE97NVw==", + "version": "12.1.4", + "resolved": "https://registry.npmjs.org/@truffle/debugger/-/debugger-12.1.4.tgz", + "integrity": "sha512-yAWvLIaIDpaSALdm/Sas09FPXx38MTZ+NTnI9QhrptpocHAeEFsWpm5JklrjeD7QD+oCSbJ/IS62xrLTS/4Pgg==", "dependencies": { "@ensdomains/ensjs": "^2.1.0", - "@truffle/abi-utils": "^0.3.10", - "@truffle/codec": "^0.15.0", - "@truffle/source-map-utils": "^1.3.111", + "@truffle/abi-utils": "^1.0.3", + "@truffle/codec": "^0.17.3", + "@truffle/source-map-utils": "^1.3.119", "bn.js": "^5.1.3", "debug": "^4.3.1", "json-pointer": "^0.6.1", @@ -6291,51 +6273,45 @@ "redux": "^3.7.2", "redux-saga": "1.0.0", "reselect-tree": "^1.3.7", - "semver": "7.3.7", + "semver": "^7.5.4", "web3": "1.10.0", "web3-eth-abi": "1.10.0" + }, + "engines": { + "node": "^16.20 || ^18.16 || >=20" + } + }, + "node_modules/@truffle/debugger/node_modules/@truffle/abi-utils": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@truffle/abi-utils/-/abi-utils-1.0.3.tgz", + "integrity": "sha512-AWhs01HCShaVKjml7Z4AbVREr/u4oiWxCcoR7Cktm0mEvtT04pvnxW5xB/cI4znRkrbPdFQlFt67kgrAjesYkw==", + "dependencies": { + "change-case": "3.0.2", + "fast-check": "3.1.1", + "web3-utils": "1.10.0" + }, + "engines": { + "node": "^16.20 || ^18.16 || >=20" } }, "node_modules/@truffle/debugger/node_modules/@truffle/codec": { - "version": "0.15.0", - "resolved": "https://registry.npmjs.org/@truffle/codec/-/codec-0.15.0.tgz", - "integrity": "sha512-FEcwtDUuMr85a9u39eqvNgmUgXDvIkwhJjMCCi/bC4/GmLisOpih8vAidDgdYMJldukMPaOX5XIIgsG5k615YA==", + "version": "0.17.3", + "resolved": "https://registry.npmjs.org/@truffle/codec/-/codec-0.17.3.tgz", + "integrity": "sha512-Ko/+dsnntNyrJa57jUD9u4qx9nQby+H4GsUO6yjiCPSX0TQnEHK08XWqBSg0WdmCH2+h0y1nr2CXSx8gbZapxg==", "dependencies": { - "@truffle/abi-utils": "^0.3.10", - "@truffle/compile-common": "^0.9.4", + "@truffle/abi-utils": "^1.0.3", + "@truffle/compile-common": "^0.9.8", "big.js": "^6.0.3", "bn.js": "^5.1.3", "cbor": "^5.2.0", "debug": "^4.3.1", "lodash": "^4.17.21", - "semver": "7.3.7", + "semver": "^7.5.4", "utf8": "^3.0.0", "web3-utils": "1.10.0" - } - }, - "node_modules/@truffle/debugger/node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dependencies": { - "yallist": "^4.0.0" }, "engines": { - "node": ">=10" - } - }, - "node_modules/@truffle/debugger/node_modules/semver": { - "version": "7.3.7", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz", - "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==", - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" + "node": "^16.20 || ^18.16 || >=20" } }, "node_modules/@truffle/debugger/node_modules/web3-eth-abi": { @@ -6350,11 +6326,6 @@ "node": ">=8.0.0" } }, - "node_modules/@truffle/debugger/node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" - }, "node_modules/@truffle/error": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/@truffle/error/-/error-0.1.1.tgz", @@ -6362,37 +6333,43 @@ "dev": true }, "node_modules/@truffle/events": { - "version": "0.1.23", - "resolved": "https://registry.npmjs.org/@truffle/events/-/events-0.1.23.tgz", - "integrity": "sha512-OIcOZXDCJPz9zzK4uTj0HxCqASNKVcs6g3Z9fT6sehGZRD4ubGHpQZoMchLBwXcggoDRApq2svTdghai624pLg==", + "version": "0.1.25", + "resolved": "https://registry.npmjs.org/@truffle/events/-/events-0.1.25.tgz", + "integrity": "sha512-5elJxNXPVuXDMOoIcCVox0sz95ovRhRbte/H9ht18vyOvtualb4bTjwYyRoWw6Y7j0pom0tPI3OLZWqCdKQNdA==", "optional": true, "dependencies": { - "@truffle/dashboard-message-bus-client": "^0.1.10", - "@truffle/spinners": "^0.2.3", + "@truffle/dashboard-message-bus-client": "^0.1.12", + "@truffle/spinners": "^0.2.5", "debug": "^4.3.1", "emittery": "^0.4.1", "web3-utils": "1.10.0" + }, + "engines": { + "node": "^16.20 || ^18.16 || >=20" } }, "node_modules/@truffle/hdwallet": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/@truffle/hdwallet/-/hdwallet-0.1.2.tgz", - "integrity": "sha512-Q8Q0S+3VpCFOJQ9o/hr5juV4TJQ1bxoMJ+Eq9ZwTuhprxrhoCqimEZ0/A+D8Gcg5Nw7koQyzyrcqIhPmIVeK9A==", + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/@truffle/hdwallet/-/hdwallet-0.1.4.tgz", + "integrity": "sha512-D3SN0iw3sMWUXjWAedP6RJtopo9qQXYi80inzbtcsoso4VhxFxCwFvCErCl4b27AEJ9pkAtgnxEFRaSKdMmi1Q==", "dependencies": { "ethereum-cryptography": "1.1.2", "keccak": "3.0.2", "secp256k1": "4.0.3" + }, + "engines": { + "node": "^16.20 || ^18.16 || >=20" } }, "node_modules/@truffle/hdwallet-provider": { - "version": "2.1.11", - "resolved": "https://registry.npmjs.org/@truffle/hdwallet-provider/-/hdwallet-provider-2.1.11.tgz", - "integrity": "sha512-niLNFG7JYsXCbZrDjvPs9bDln0ix71f1Xvr6Qm6zHHNr4Of+yKMTAs4lXHrY7ioyEPDLlS5yfOdj+S7RJCVt1w==", + "version": "2.1.15", + "resolved": "https://registry.npmjs.org/@truffle/hdwallet-provider/-/hdwallet-provider-2.1.15.tgz", + "integrity": "sha512-I5cSS+5LygA3WFzru9aC5+yDXVowEEbLCx0ckl/RqJ2/SCiYXkzYlR5/DjjDJuCtYhivhrn2RP9AheeFlRF+qw==", "dependencies": { "@ethereumjs/common": "^2.4.0", "@ethereumjs/tx": "^3.3.0", "@metamask/eth-sig-util": "4.0.1", - "@truffle/hdwallet": "^0.1.2", + "@truffle/hdwallet": "^0.1.4", "@types/ethereum-protocol": "^1.0.0", "@types/web3": "1.0.20", "@types/web3-provider-engine": "^14.0.0", @@ -6401,6 +6378,9 @@ "ethereumjs-util": "^7.1.5", "web3": "1.10.0", "web3-provider-engine": "16.0.3" + }, + "engines": { + "node": "^16.20 || ^18.16 || >=20" } }, "node_modules/@truffle/hdwallet-provider/node_modules/@ethereumjs/common": { @@ -6431,14 +6411,17 @@ } }, "node_modules/@truffle/interface-adapter": { - "version": "0.5.33", - "resolved": "https://registry.npmjs.org/@truffle/interface-adapter/-/interface-adapter-0.5.33.tgz", - "integrity": "sha512-vbVcH2I8hX+wM0Xj9uAjpgxMHqfT+y6m26zSkOVvZ2wo9Ez1slaOJkK1/TZK+7nJitGZSXeJeB4purMDuADvGA==", + "version": "0.5.37", + "resolved": "https://registry.npmjs.org/@truffle/interface-adapter/-/interface-adapter-0.5.37.tgz", + "integrity": "sha512-lPH9MDgU+7sNDlJSClwyOwPCfuOimqsCx0HfGkznL3mcFRymc1pukAR1k17zn7ErHqBwJjiKAZ6Ri72KkS+IWw==", "devOptional": true, "dependencies": { "bn.js": "^5.1.3", "ethers": "^4.0.32", "web3": "1.10.0" + }, + "engines": { + "node": "^16.20 || ^18.16 || >=20" } }, "node_modules/@truffle/interface-adapter/node_modules/ethers": { @@ -6500,96 +6483,97 @@ "devOptional": true }, "node_modules/@truffle/promise-tracker": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/@truffle/promise-tracker/-/promise-tracker-0.1.5.tgz", - "integrity": "sha512-wZx8eeu/6rcwwkmRF0Y832/NSQR9A9u6pyhTozv+j77jklnd/KZvu2JlACaAjP30eL5SOtSrSOzAMcSh/trJjg==", - "optional": true + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/@truffle/promise-tracker/-/promise-tracker-0.1.7.tgz", + "integrity": "sha512-NiPXNJvdei8MRZRUjEZoL0Y7TPDR1TaeCfGUgB3md6Q7TBiqSKo2p5OT36JO106B2j57SLmXOiDn8fLb+u2sjA==", + "optional": true, + "engines": { + "node": "^16.20 || ^18.16 || >=20" + } }, "node_modules/@truffle/provider": { - "version": "0.3.9", - "resolved": "https://registry.npmjs.org/@truffle/provider/-/provider-0.3.9.tgz", - "integrity": "sha512-6vVSpbP8b2SuNz1fE1KeeQHMBaQ7oD5Nf4CLikXNWrj3SVyMpN3PxsEnaHMnlslAfHICpLSOHpcIWETGxfOgbg==", + "version": "0.3.13", + "resolved": "https://registry.npmjs.org/@truffle/provider/-/provider-0.3.13.tgz", + "integrity": "sha512-W9yZO0ZUwA0LhFvf7+NNNXVSCOd4x5pTbFiXUVURjyqp7f4YooLAqnlLPSpV+6qwIwThc+86CeLlOiFslYdDIA==", "optional": true, "dependencies": { - "@truffle/error": "^0.2.0", - "@truffle/interface-adapter": "^0.5.33", + "@truffle/error": "^0.2.2", + "@truffle/interface-adapter": "^0.5.37", "debug": "^4.3.1", "web3": "1.10.0" + }, + "engines": { + "node": "^16.20 || ^18.16 || >=20" } }, "node_modules/@truffle/provider/node_modules/@truffle/error": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/@truffle/error/-/error-0.2.0.tgz", - "integrity": "sha512-Fe0/z4WWb7IP2gBnv3l6zqP87Y0kSMs7oiSLakKJq17q3GUunrHSdioKuNspdggxkXIBhEQLhi8C+LJdwmHKWQ==", - "optional": true + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/@truffle/error/-/error-0.2.2.tgz", + "integrity": "sha512-TqbzJ0O8DHh34cu8gDujnYl4dUl6o2DE4PR6iokbybvnIm/L2xl6+Gv1VC+YJS45xfH83Yo3/Zyg/9Oq8/xZWg==", + "optional": true, + "engines": { + "node": "^16.20 || ^18.16 || >=20" + } }, "node_modules/@truffle/source-map-utils": { - "version": "1.3.111", - "resolved": "https://registry.npmjs.org/@truffle/source-map-utils/-/source-map-utils-1.3.111.tgz", - "integrity": "sha512-/2kP4muycNMvMwar/QuzRdF8NE8LpQS1cRHF43XLx3b89D/upzqTylQwv3EDx/rcd7u6AQ/7lrUSmKlh0+k40Q==", + "version": "1.3.119", + "resolved": "https://registry.npmjs.org/@truffle/source-map-utils/-/source-map-utils-1.3.119.tgz", + "integrity": "sha512-TFYi3XvanY8WZBOfBwDHQe9HfZUXJ2ejnmFNjsq1//sbM4fUNWjeNshGqkWGxfKPh3OAzXgD4iTnPG3YeXM8YQ==", "dependencies": { - "@truffle/code-utils": "^3.0.2", - "@truffle/codec": "^0.15.0", + "@truffle/code-utils": "^3.0.4", + "@truffle/codec": "^0.17.3", "debug": "^4.3.1", "json-pointer": "^0.6.1", "node-interval-tree": "^1.3.3", "web3-utils": "1.10.0" + }, + "engines": { + "node": "^16.20 || ^18.16 || >=20" + } + }, + "node_modules/@truffle/source-map-utils/node_modules/@truffle/abi-utils": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@truffle/abi-utils/-/abi-utils-1.0.3.tgz", + "integrity": "sha512-AWhs01HCShaVKjml7Z4AbVREr/u4oiWxCcoR7Cktm0mEvtT04pvnxW5xB/cI4znRkrbPdFQlFt67kgrAjesYkw==", + "dependencies": { + "change-case": "3.0.2", + "fast-check": "3.1.1", + "web3-utils": "1.10.0" + }, + "engines": { + "node": "^16.20 || ^18.16 || >=20" } }, "node_modules/@truffle/source-map-utils/node_modules/@truffle/codec": { - "version": "0.15.0", - "resolved": "https://registry.npmjs.org/@truffle/codec/-/codec-0.15.0.tgz", - "integrity": "sha512-FEcwtDUuMr85a9u39eqvNgmUgXDvIkwhJjMCCi/bC4/GmLisOpih8vAidDgdYMJldukMPaOX5XIIgsG5k615YA==", + "version": "0.17.3", + "resolved": "https://registry.npmjs.org/@truffle/codec/-/codec-0.17.3.tgz", + "integrity": "sha512-Ko/+dsnntNyrJa57jUD9u4qx9nQby+H4GsUO6yjiCPSX0TQnEHK08XWqBSg0WdmCH2+h0y1nr2CXSx8gbZapxg==", "dependencies": { - "@truffle/abi-utils": "^0.3.10", - "@truffle/compile-common": "^0.9.4", + "@truffle/abi-utils": "^1.0.3", + "@truffle/compile-common": "^0.9.8", "big.js": "^6.0.3", "bn.js": "^5.1.3", "cbor": "^5.2.0", "debug": "^4.3.1", "lodash": "^4.17.21", - "semver": "7.3.7", + "semver": "^7.5.4", "utf8": "^3.0.0", "web3-utils": "1.10.0" - } - }, - "node_modules/@truffle/source-map-utils/node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dependencies": { - "yallist": "^4.0.0" }, "engines": { - "node": ">=10" + "node": "^16.20 || ^18.16 || >=20" } }, - "node_modules/@truffle/source-map-utils/node_modules/semver": { - "version": "7.3.7", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz", - "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==", - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/@truffle/source-map-utils/node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" - }, "node_modules/@truffle/spinners": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/@truffle/spinners/-/spinners-0.2.3.tgz", - "integrity": "sha512-YnaQ+oBRQ1I1+/P18i8oSW4orUYi6vwpZQxauEZ5X0L8atjKq+RWdiNaza6J6L+KOLunXM4+pWxnNzuUmxlJZw==", + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/@truffle/spinners/-/spinners-0.2.5.tgz", + "integrity": "sha512-emYyLEuoY62MQV/RNjyVIuTPEjMyIA0WiYMG2N3yfh8OSjD/TC0HRc2oyDWtVkNNox/5D2tH2m5fFB8HOt80FQ==", "optional": true, "dependencies": { "@trufflesuite/spinnies": "^0.1.1" + }, + "engines": { + "node": "^16.20 || ^18.16 || >=20" } }, "node_modules/@trufflesuite/bigint-buffer": { @@ -6871,17 +6855,6 @@ } }, "node_modules/@types/express-serve-static-core": { - "version": "4.17.31", - "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.17.31.tgz", - "integrity": "sha512-DxMhY+NAsTwMMFHBTtJFNp5qiHKJ7TeqOo23zVEM9alT1Ml27Q3xcTH0xwxn7Q0BbMcVEJOs/7aQtUWupUQN3Q==", - "optional": true, - "dependencies": { - "@types/node": "*", - "@types/qs": "*", - "@types/range-parser": "*" - } - }, - "node_modules/@types/express/node_modules/@types/express-serve-static-core": { "version": "4.17.35", "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.17.35.tgz", "integrity": "sha512-wALWQwrgiB2AWTT91CB62b6Yt0sNHpznUXeZEcnPU3DRdlDIz74x8Qg1UUYKSVFi+va5vKOLYRBI1bRKiLLKIg==", @@ -7059,6 +7032,34 @@ "@types/node": "*" } }, + "node_modules/@types/sinon": { + "version": "10.0.16", + "resolved": "https://registry.npmjs.org/@types/sinon/-/sinon-10.0.16.tgz", + "integrity": "sha512-j2Du5SYpXZjJVJtXBokASpPRj+e2z+VUhCPHmM6WMfe3dpHu6iVKJMU6AiBcMp/XTAYnEj6Wc1trJUWwZ0QaAQ==", + "dev": true, + "peer": true, + "dependencies": { + "@types/sinonjs__fake-timers": "*" + } + }, + "node_modules/@types/sinon-chai": { + "version": "3.2.9", + "resolved": "https://registry.npmjs.org/@types/sinon-chai/-/sinon-chai-3.2.9.tgz", + "integrity": "sha512-/19t63pFYU0ikrdbXKBWj9PCdnKyTd0Qkz0X91Ta081cYsq90OxYdcWwK/dwEoDa6dtXgj2HJfmzgq+QZTHdmQ==", + "dev": true, + "peer": true, + "dependencies": { + "@types/chai": "*", + "@types/sinon": "*" + } + }, + "node_modules/@types/sinonjs__fake-timers": { + "version": "8.1.2", + "resolved": "https://registry.npmjs.org/@types/sinonjs__fake-timers/-/sinonjs__fake-timers-8.1.2.tgz", + "integrity": "sha512-9GcLXF0/v3t80caGs5p2rRfkB+a8VBGLJZVih6CNFkx8IZ994wiKKLSRs9nuFwk1HevWs/1mnUmkApGrSGsShA==", + "dev": true, + "peer": true + }, "node_modules/@types/underscore": { "version": "1.11.4", "resolved": "https://registry.npmjs.org/@types/underscore/-/underscore-1.11.4.tgz", @@ -7089,6 +7090,15 @@ "@types/node": "*" } }, + "node_modules/@types/yauzl": { + "version": "2.10.0", + "resolved": "https://registry.npmjs.org/@types/yauzl/-/yauzl-2.10.0.tgz", + "integrity": "sha512-Cn6WYCm0tXv8p6k+A8PvbDG763EDpBoTzHdA+Q/MF6H3sapGjCm9NzoaJncJS9tUKSuCoDs9XHxYYsQDgxR6kw==", + "optional": true, + "dependencies": { + "@types/node": "*" + } + }, "node_modules/@uniswap/lib": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/@uniswap/lib/-/lib-1.1.1.tgz", @@ -7263,13 +7273,13 @@ } }, "node_modules/@uniswap/v3-sdk": { - "version": "3.9.0", - "resolved": "https://registry.npmjs.org/@uniswap/v3-sdk/-/v3-sdk-3.9.0.tgz", - "integrity": "sha512-LuoF3UcY1DxSAQKJ3E4/1Eq4HaNp+x+7q9mvbpiu+/PBj+O1DjLforAMrKxu+RsA0aarmZtz7yBnAPy+akgfgQ==", + "version": "3.10.0", + "resolved": "https://registry.npmjs.org/@uniswap/v3-sdk/-/v3-sdk-3.10.0.tgz", + "integrity": "sha512-sbmSA1O+Ct960r66Ie/c1rOmVadpwRu8nQ79pGICv0pZJdnFIQ/SReG3F+iC2C2UNNjNP6aC2WDUggXrjyrgnA==", "dependencies": { "@ethersproject/abi": "^5.0.12", "@ethersproject/solidity": "^5.0.9", - "@uniswap/sdk-core": "^3.0.1", + "@uniswap/sdk-core": "^4", "@uniswap/swap-router-contracts": "^1.2.1", "@uniswap/v3-periphery": "^1.1.1", "@uniswap/v3-staker": "1.0.0", @@ -7280,6 +7290,30 @@ "node": ">=10" } }, + "node_modules/@uniswap/v3-sdk/node_modules/@uniswap/sdk-core": { + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/@uniswap/sdk-core/-/sdk-core-4.0.7.tgz", + "integrity": "sha512-jscx7KUIWzQatcL5PHY6xy0gEL9IGQcL5h/obxzX9foP2KoNk9cq66Ia8I2Kvpa7zBcPOeW1hU0hJNBq6CzcIQ==", + "dependencies": { + "@ethersproject/address": "^5.0.2", + "big.js": "^5.2.2", + "decimal.js-light": "^2.5.0", + "jsbi": "^3.1.4", + "tiny-invariant": "^1.1.0", + "toformat": "^2.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@uniswap/v3-sdk/node_modules/big.js": { + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz", + "integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==", + "engines": { + "node": "*" + } + }, "node_modules/@uniswap/v3-staker": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/@uniswap/v3-staker/-/v3-staker-1.0.0.tgz", @@ -7307,6 +7341,11 @@ "node": ">=10" } }, + "node_modules/@yarnpkg/lockfile": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@yarnpkg/lockfile/-/lockfile-1.1.0.tgz", + "integrity": "sha512-GpSwvyXOcOOlV70vbnzjj4fW5xW/FdUF6nQEt1ENy7m4ZCczi1+/buVUPAqmGfqznsORNFzUMjctTIp8a9tuCQ==" + }, "node_modules/abbrev": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", @@ -7316,6 +7355,7 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/abort-controller/-/abort-controller-3.0.0.tgz", "integrity": "sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==", + "optional": true, "dependencies": { "event-target-shim": "^5.0.0" }, @@ -7431,26 +7471,16 @@ } }, "node_modules/agentkeepalive": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/agentkeepalive/-/agentkeepalive-4.2.1.tgz", - "integrity": "sha512-Zn4cw2NEqd+9fiSVWMscnjyQ1a8Yfoc5oBajLeo5w+YBHgDUcEBY2hS4YpTz6iN5f/2zQiktcuM6tS8x1p9dpA==", + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/agentkeepalive/-/agentkeepalive-4.5.0.tgz", + "integrity": "sha512-5GG/5IbQQpC9FpkRGsSvZI5QYeSCzlJHdpBQntCsuTOxhKD8lqKhrleg2Yi7yvMIf82Ycmmqln9U8V9qwEiJew==", "dependencies": { - "debug": "^4.1.0", - "depd": "^1.1.2", "humanize-ms": "^1.2.1" }, "engines": { "node": ">= 8.0.0" } }, - "node_modules/agentkeepalive/node_modules/depd": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", - "integrity": "sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==", - "engines": { - "node": ">= 0.6" - } - }, "node_modules/aggregate-error": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", @@ -7612,7 +7642,7 @@ "version": "3.3.2", "resolved": "https://registry.npmjs.org/apollo-datasource/-/apollo-datasource-3.3.2.tgz", "integrity": "sha512-L5TiS8E2Hn/Yz7SSnWIVbZw0ZfEIXZCa5VUiVxD9P53JvSrf4aStvsFDlGWPvpIdCR+aly2CfoB79B9/JjKFqg==", - "deprecated": "The `apollo-datasource` package is part of Apollo Server v2 and v3, which are now deprecated (end-of-life October 22nd 2023). See https://www.apollographql.com/docs/apollo-server/previous-versions/ for more details.", + "deprecated": "The `apollo-datasource` package is part of Apollo Server v2 and v3, which are now deprecated (end-of-life October 22nd 2023 and October 22nd 2024, respectively). See https://www.apollographql.com/docs/apollo-server/previous-versions/ for more details.", "optional": true, "dependencies": { "@apollo/utils.keyvaluecache": "^1.0.1", @@ -7626,7 +7656,7 @@ "version": "3.4.0", "resolved": "https://registry.npmjs.org/apollo-reporting-protobuf/-/apollo-reporting-protobuf-3.4.0.tgz", "integrity": "sha512-h0u3EbC/9RpihWOmcSsvTW2O6RXVaD/mPEjfrPkxRPTEPWqncsgOoRJw+wih4OqfH3PvTJvoEIf4LwKrUaqWog==", - "deprecated": "The `apollo-reporting-protobuf` package is part of Apollo Server v2 and v3, which are now deprecated (end-of-life October 22nd 2023). This package's functionality is now found in the `@apollo/usage-reporting-protobuf` package. See https://www.apollographql.com/docs/apollo-server/previous-versions/ for more details.", + "deprecated": "The `apollo-reporting-protobuf` package is part of Apollo Server v2 and v3, which are now deprecated (end-of-life October 22nd 2023 and October 22nd 2024, respectively). This package's functionality is now found in the `@apollo/usage-reporting-protobuf` package. See https://www.apollographql.com/docs/apollo-server/previous-versions/ for more details.", "optional": true, "dependencies": { "@apollo/protobufjs": "1.2.6" @@ -7665,15 +7695,15 @@ "optional": true }, "node_modules/apollo-server": { - "version": "3.12.0", - "resolved": "https://registry.npmjs.org/apollo-server/-/apollo-server-3.12.0.tgz", - "integrity": "sha512-wZHLgBoIdGxr/YpPTG5RwNnS+B2y70T/nCegCnU6Yl+H3PXB92OIguLMhdJIZVjukIOhiQT12dNIehqLQ+1hMQ==", - "deprecated": "The `apollo-server` package is part of Apollo Server v2 and v3, which are now deprecated (end-of-life October 22nd 2023). This package's functionality is now found in the `@apollo/server` package. See https://www.apollographql.com/docs/apollo-server/previous-versions/ for more details.", + "version": "3.12.1", + "resolved": "https://registry.npmjs.org/apollo-server/-/apollo-server-3.12.1.tgz", + "integrity": "sha512-wgxx+J8KPTkhepi4qI9qY1xNoYzJfmvRKVUdFmFCZ3lyPO2j/+oOnAnyEVruAIQU5gquK10B0jdwVyvese9J/g==", + "deprecated": "The `apollo-server` package is part of Apollo Server v2 and v3, which are now deprecated (end-of-life October 22nd 2023 and October 22nd 2024, respectively). This package's functionality is now found in the `@apollo/server` package. See https://www.apollographql.com/docs/apollo-server/previous-versions/ for more details.", "optional": true, "dependencies": { "@types/express": "4.17.14", - "apollo-server-core": "^3.12.0", - "apollo-server-express": "^3.12.0", + "apollo-server-core": "^3.12.1", + "apollo-server-express": "^3.12.1", "express": "^4.17.1" }, "peerDependencies": { @@ -7681,10 +7711,10 @@ } }, "node_modules/apollo-server-core": { - "version": "3.12.0", - "resolved": "https://registry.npmjs.org/apollo-server-core/-/apollo-server-core-3.12.0.tgz", - "integrity": "sha512-hq7iH6Cgldgmnjs9FVSZeKWRpi0/ZR+iJ1arzeD2VXGxxgk1mAm/cz1Tx0TYgegZI+FvvrRl0UhKEx7sLnIxIg==", - "deprecated": "The `apollo-server-core` package is part of Apollo Server v2 and v3, which are now deprecated (end-of-life October 22nd 2023). This package's functionality is now found in the `@apollo/server` package. See https://www.apollographql.com/docs/apollo-server/previous-versions/ for more details.", + "version": "3.12.1", + "resolved": "https://registry.npmjs.org/apollo-server-core/-/apollo-server-core-3.12.1.tgz", + "integrity": "sha512-9SF5WAkkV0FZQ2HVUWI9Jada1U0jg7e8NCN9EklbtvaCeUlOLyXyM+KCWuZ7+dqHxjshbtcwylPHutt3uzoNkw==", + "deprecated": "The `apollo-server-core` package is part of Apollo Server v2 and v3, which are now deprecated (end-of-life October 22nd 2023 and October 22nd 2024, respectively). This package's functionality is now found in the `@apollo/server` package. See https://www.apollographql.com/docs/apollo-server/previous-versions/ for more details.", "optional": true, "dependencies": { "@apollo/utils.keyvaluecache": "^1.0.1", @@ -7749,7 +7779,7 @@ "version": "4.2.1", "resolved": "https://registry.npmjs.org/apollo-server-env/-/apollo-server-env-4.2.1.tgz", "integrity": "sha512-vm/7c7ld+zFMxibzqZ7SSa5tBENc4B0uye9LTfjJwGoQFY5xsUPH5FpO5j0bMUDZ8YYNbrF9SNtzc5Cngcr90g==", - "deprecated": "The `apollo-server-env` package is part of Apollo Server v2 and v3, which are now deprecated (end-of-life October 22nd 2023). This package's functionality is now found in the `@apollo/utils.fetcher` package. See https://www.apollographql.com/docs/apollo-server/previous-versions/ for more details.", + "deprecated": "The `apollo-server-env` package is part of Apollo Server v2 and v3, which are now deprecated (end-of-life October 22nd 2023 and October 22nd 2024, respectively). This package's functionality is now found in the `@apollo/utils.fetcher` package. See https://www.apollographql.com/docs/apollo-server/previous-versions/ for more details.", "optional": true, "dependencies": { "node-fetch": "^2.6.7" @@ -7762,7 +7792,7 @@ "version": "3.3.1", "resolved": "https://registry.npmjs.org/apollo-server-errors/-/apollo-server-errors-3.3.1.tgz", "integrity": "sha512-xnZJ5QWs6FixHICXHxUfm+ZWqqxrNuPlQ+kj5m6RtEgIpekOPssH/SD9gf2B4HuWV0QozorrygwZnux8POvyPA==", - "deprecated": "The `apollo-server-errors` package is part of Apollo Server v2 and v3, which are now deprecated (end-of-life October 22nd 2023). This package's functionality is now found in the `@apollo/server` package. See https://www.apollographql.com/docs/apollo-server/previous-versions/ for more details.", + "deprecated": "The `apollo-server-errors` package is part of Apollo Server v2 and v3, which are now deprecated (end-of-life October 22nd 2023 and October 22nd 2024, respectively). This package's functionality is now found in the `@apollo/server` package. See https://www.apollographql.com/docs/apollo-server/previous-versions/ for more details.", "optional": true, "engines": { "node": ">=12.0" @@ -7772,10 +7802,10 @@ } }, "node_modules/apollo-server-express": { - "version": "3.12.0", - "resolved": "https://registry.npmjs.org/apollo-server-express/-/apollo-server-express-3.12.0.tgz", - "integrity": "sha512-m8FaGPUfDOEGSm7QRWRmUUGjG/vqvpQoorkId9/FXkC57fz/A59kEdrzkMt9538Xgsa5AV+X4MEWLJhTvlW3LQ==", - "deprecated": "The `apollo-server-express` package is part of Apollo Server v2 and v3, which are now deprecated (end-of-life October 22nd 2023). This package's functionality is now found in the `@apollo/server` package. See https://www.apollographql.com/docs/apollo-server/previous-versions/ for more details.", + "version": "3.12.1", + "resolved": "https://registry.npmjs.org/apollo-server-express/-/apollo-server-express-3.12.1.tgz", + "integrity": "sha512-5A9efrhEXqDx08BnORWf0zPYCABENqur47VZZW8osQpSSnMINqzJiV5RMrzz8wIznecRRhEcz+BqLdiexqZdgg==", + "deprecated": "The `apollo-server-express` package is part of Apollo Server v2 and v3, which are now deprecated (end-of-life October 22nd 2023 and October 22nd 2024, respectively). This package's functionality is now found in the `@apollo/server` package. See https://www.apollographql.com/docs/apollo-server/previous-versions/ for more details.", "optional": true, "dependencies": { "@types/accepts": "^1.3.5", @@ -7784,7 +7814,7 @@ "@types/express": "4.17.14", "@types/express-serve-static-core": "4.17.31", "accepts": "^1.3.5", - "apollo-server-core": "^3.12.0", + "apollo-server-core": "^3.12.1", "apollo-server-types": "^3.8.0", "body-parser": "^1.19.0", "cors": "^2.8.5", @@ -7810,11 +7840,22 @@ "@types/serve-static": "*" } }, + "node_modules/apollo-server-express/node_modules/@types/express-serve-static-core": { + "version": "4.17.31", + "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.17.31.tgz", + "integrity": "sha512-DxMhY+NAsTwMMFHBTtJFNp5qiHKJ7TeqOo23zVEM9alT1Ml27Q3xcTH0xwxn7Q0BbMcVEJOs/7aQtUWupUQN3Q==", + "optional": true, + "dependencies": { + "@types/node": "*", + "@types/qs": "*", + "@types/range-parser": "*" + } + }, "node_modules/apollo-server-plugin-base": { "version": "3.7.2", "resolved": "https://registry.npmjs.org/apollo-server-plugin-base/-/apollo-server-plugin-base-3.7.2.tgz", "integrity": "sha512-wE8dwGDvBOGehSsPTRZ8P/33Jan6/PmL0y0aN/1Z5a5GcbFhDaaJCjK5cav6npbbGL2DPKK0r6MPXi3k3N45aw==", - "deprecated": "The `apollo-server-plugin-base` package is part of Apollo Server v2 and v3, which are now deprecated (end-of-life October 22nd 2023). This package's functionality is now found in the `@apollo/server` package. See https://www.apollographql.com/docs/apollo-server/previous-versions/ for more details.", + "deprecated": "The `apollo-server-plugin-base` package is part of Apollo Server v2 and v3, which are now deprecated (end-of-life October 22nd 2023 and October 22nd 2024, respectively). This package's functionality is now found in the `@apollo/server` package. See https://www.apollographql.com/docs/apollo-server/previous-versions/ for more details.", "optional": true, "dependencies": { "apollo-server-types": "^3.8.0" @@ -7830,7 +7871,7 @@ "version": "3.8.0", "resolved": "https://registry.npmjs.org/apollo-server-types/-/apollo-server-types-3.8.0.tgz", "integrity": "sha512-ZI/8rTE4ww8BHktsVpb91Sdq7Cb71rdSkXELSwdSR0eXu600/sY+1UXhTWdiJvk+Eq5ljqoHLwLbY2+Clq2b9A==", - "deprecated": "The `apollo-server-types` package is part of Apollo Server v2 and v3, which are now deprecated (end-of-life October 22nd 2023). This package's functionality is now found in the `@apollo/server` package. See https://www.apollographql.com/docs/apollo-server/previous-versions/ for more details.", + "deprecated": "The `apollo-server-types` package is part of Apollo Server v2 and v3, which are now deprecated (end-of-life October 22nd 2023 and October 22nd 2024, respectively). This package's functionality is now found in the `@apollo/server` package. See https://www.apollographql.com/docs/apollo-server/previous-versions/ for more details.", "optional": true, "dependencies": { "@apollo/utils.keyvaluecache": "^1.0.1", @@ -7862,52 +7903,6 @@ "resolved": "https://registry.npmjs.org/app-module-path/-/app-module-path-2.2.0.tgz", "integrity": "sha512-gkco+qxENJV+8vFcDiiFhuoSvRXb2a/QPqpSoWhVz829VNJfOTnELbBmPmNKFxf3xdNnw4DWCkzkDaavcX/1YQ==" }, - "node_modules/aproba": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz", - "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==", - "optional": true - }, - "node_modules/are-we-there-yet": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-1.1.7.tgz", - "integrity": "sha512-nxwy40TuMiUGqMyRHgCSWZ9FM4VAoRP4xUYSTv5ImRog+h9yISPbVH7H8fASCIzYn9wlEv4zvFL7uKDMCFQm3g==", - "optional": true, - "dependencies": { - "delegates": "^1.0.0", - "readable-stream": "^2.0.6" - } - }, - "node_modules/are-we-there-yet/node_modules/readable-stream": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", - "optional": true, - "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "node_modules/are-we-there-yet/node_modules/safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "optional": true - }, - "node_modules/are-we-there-yet/node_modules/string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "optional": true, - "dependencies": { - "safe-buffer": "~5.1.0" - } - }, "node_modules/arg": { "version": "4.1.3", "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz", @@ -8058,15 +8053,6 @@ "retry": "0.13.1" } }, - "node_modules/async-retry/node_modules/retry": { - "version": "0.13.1", - "resolved": "https://registry.npmjs.org/retry/-/retry-0.13.1.tgz", - "integrity": "sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg==", - "devOptional": true, - "engines": { - "node": ">= 4" - } - }, "node_modules/asynckit": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", @@ -8076,7 +8062,6 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/at-least-node/-/at-least-node-1.0.0.tgz", "integrity": "sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==", - "optional": true, "engines": { "node": ">= 4.0.0" } @@ -8266,17 +8251,17 @@ } }, "node_modules/bigint-crypto-utils": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/bigint-crypto-utils/-/bigint-crypto-utils-3.2.2.tgz", - "integrity": "sha512-U1RbE3aX9ayCUVcIPHuPDPKcK3SFOXf93J1UK/iHlJuQB7bhagPIX06/CLpLEsDThJ7KA4Dhrnzynl+d2weTiw==", + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/bigint-crypto-utils/-/bigint-crypto-utils-3.3.0.tgz", + "integrity": "sha512-jOTSb+drvEDxEq6OuUybOAv/xxoh3cuYRUIPyu8sSHQNKM303UQ2R1DAo45o1AkcIXw6fzbaFI1+xGGdaXs2lg==", "engines": { "node": ">=14.0.0" } }, "node_modules/bignumber.js": { - "version": "9.1.1", - "resolved": "https://registry.npmjs.org/bignumber.js/-/bignumber.js-9.1.1.tgz", - "integrity": "sha512-pHm4LsMJ6lzgNGVfZHjMoO8sdoRhOzOH4MLmY65Jg70bpxCKu5iOHNJyfF6OyvYw7t8Fpf35RuzUyqnQsj8Vig==", + "version": "9.1.2", + "resolved": "https://registry.npmjs.org/bignumber.js/-/bignumber.js-9.1.2.tgz", + "integrity": "sha512-2/mKyZH9K85bzOEfhXDBFZTGd1CTs+5IHpeFQo9luiBG7hghdC851Pj2WAhb6E3R6b9tZj/XKhbg4fum+Kepug==", "engines": { "node": "*" } @@ -8414,7 +8399,7 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", "integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==", - "dev": true + "devOptional": true }, "node_modules/borsh": { "version": "0.7.0", @@ -8837,9 +8822,9 @@ } }, "node_modules/chai": { - "version": "4.3.7", - "resolved": "https://registry.npmjs.org/chai/-/chai-4.3.7.tgz", - "integrity": "sha512-HLnAzZ2iupm25PlN0xFreAlBA5zaBSv3og0DdeGA4Ar6h6rJ3A0rolRUKJhSF2V10GZKDgWF/VmAEsNWjCRB+A==", + "version": "4.3.8", + "resolved": "https://registry.npmjs.org/chai/-/chai-4.3.8.tgz", + "integrity": "sha512-vX4YvVVtxlfSZ2VecZgFUTU5qPCYsobVI2O9FmwEXBhDigYGQA6jRXCycIs1yJnnWbZ6/+a2zNIF5DfVCcJBFQ==", "dependencies": { "assertion-error": "^1.1.0", "check-error": "^1.0.2", @@ -8853,6 +8838,37 @@ "node": ">=4" } }, + "node_modules/chai-almost": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/chai-almost/-/chai-almost-1.0.1.tgz", + "integrity": "sha512-UrNSx5f2B1/ESrOz0a4iLpDnQvDnK/3O0ZE/KGYQ+NcndKy0VQkMkv8yoGIHNSbjzKBid3EAMdDMA5wb9CxvSA==", + "dev": true, + "dependencies": { + "deep-eql": "^2.0.2", + "type-detect": "^4.0.3" + } + }, + "node_modules/chai-almost/node_modules/deep-eql": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-2.0.2.tgz", + "integrity": "sha512-uts3fF4HnV1bcNx8K5c9NMjXXKtLOf1obUMq04uEuMaF8i1m0SfugbpDMd59cYfodQcMqeUISvL4Pmx5NZ7lcw==", + "dev": true, + "dependencies": { + "type-detect": "^3.0.0" + }, + "engines": { + "node": ">=0.12" + } + }, + "node_modules/chai-almost/node_modules/deep-eql/node_modules/type-detect": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-3.0.0.tgz", + "integrity": "sha512-pwZo7l1T0a8wmTMDc4FtXuHseRaqa9nyaUArp4xHaBMUlRzr72PvgF6ouXIIj5rjbVWqo8pZu6vw74jDKg4Dvw==", + "dev": true, + "engines": { + "node": "*" + } + }, "node_modules/chai-as-promised": { "version": "7.1.1", "resolved": "https://registry.npmjs.org/chai-as-promised/-/chai-as-promised-7.1.1.tgz", @@ -8933,7 +8949,7 @@ "version": "1.0.0-rc.12", "resolved": "https://registry.npmjs.org/cheerio/-/cheerio-1.0.0-rc.12.tgz", "integrity": "sha512-VqR8m68vM46BNnuZ5NtnGBKIE/DfN0cRIzg9n40EIq9NOv90ayxLBXA8fXC5gquFRGJSTRqBq25Jt2ECLR431Q==", - "dev": true, + "devOptional": true, "dependencies": { "cheerio-select": "^2.1.0", "dom-serializer": "^2.0.0", @@ -8954,7 +8970,7 @@ "version": "2.1.0", "resolved": "https://registry.npmjs.org/cheerio-select/-/cheerio-select-2.1.0.tgz", "integrity": "sha512-9v9kG0LvzrlcungtnJtpGNxY+fzECQKhK4EGJX2vByejiMX84MFNQw4UxPJl3bFbTMw+Dfs37XaIkCwTZfLh4g==", - "dev": true, + "devOptional": true, "dependencies": { "boolbase": "^1.0.0", "css-select": "^5.1.0", @@ -9096,6 +9112,21 @@ "node": ">=6" } }, + "node_modules/cli-color": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/cli-color/-/cli-color-2.0.3.tgz", + "integrity": "sha512-OkoZnxyC4ERN3zLzZaY9Emb7f/MhBOIpePv0Ycok0fJYT+Ouo00UBEIwsVsr0yoow++n5YWlSUgST9GKhNHiRQ==", + "dependencies": { + "d": "^1.0.1", + "es5-ext": "^0.10.61", + "es6-iterator": "^2.0.3", + "memoizee": "^0.4.15", + "timers-ext": "^0.1.7" + }, + "engines": { + "node": ">=0.10" + } + }, "node_modules/cli-cursor": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz", @@ -9206,6 +9237,12 @@ "node": ">=4" } }, + "node_modules/clones-with-immutable-args": { + "version": "2.0.0", + "resolved": "git+ssh://git@github.com/Saw-mon-and-Natalie/clones-with-immutable-args.git#105efee1b9127ed7f6fedf139e1fc796ce8791f2", + "integrity": "sha512-k3pqgVlL6sTgySZG8eN+spNdokeM/J7kgBVn0xJeZIg+cv1vA1ert1jFDuHX1Vfz1uTTqfZbmWHhvCCdy0VpNA==", + "license": "BSD" + }, "node_modules/code-point-at": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz", @@ -9488,12 +9525,6 @@ "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", "optional": true }, - "node_modules/console-control-strings": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz", - "integrity": "sha512-ty/fTekppD2fIwRvnZAVdeOiGd1c7YXEixbgJTNzqcxJWKQnjJ/V1bNEEE6hygpM3WjwHFUVK6HTjWSzV4a8sQ==", - "optional": true - }, "node_modules/constant-case": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/constant-case/-/constant-case-2.0.0.tgz", @@ -9538,6 +9569,141 @@ "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==", "peer": true }, + "node_modules/convert-svg-core": { + "version": "0.6.4", + "resolved": "https://registry.npmjs.org/convert-svg-core/-/convert-svg-core-0.6.4.tgz", + "integrity": "sha512-8mS0n7otc1lljTte4z7nDhihEakKCRq4w5ivMnIGeOZuD/OV/eDZNNEgGLV1ET3p+rMbnrZnX4lAcsf14WzD5w==", + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/neocotic" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/neocotic" + } + ], + "optional": true, + "dependencies": { + "chalk": "^4.1.2", + "cheerio": "^1.0.0-rc.11", + "commander": "^9.2.0", + "file-url": "^3.0.0", + "get-stdin": "^8.0.0", + "glob": "^8.0.1", + "lodash.omit": "^4.5.0", + "lodash.pick": "^4.4.0", + "pollock": "^0.2.0", + "puppeteer": "^13.7.0", + "tmp": "^0.2.1" + }, + "engines": { + "node": "^12.20.0 || >=14" + } + }, + "node_modules/convert-svg-core/node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "optional": true, + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/convert-svg-core/node_modules/commander": { + "version": "9.5.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-9.5.0.tgz", + "integrity": "sha512-KRs7WVDKg86PWiuAqhDrAQnTXZKraVcCc6vFdL14qrZ/DcWwuRo7VoiYXalXO7S5GKpqYiVEwCbgFDfxNHKJBQ==", + "optional": true, + "engines": { + "node": "^12.20.0 || >=14" + } + }, + "node_modules/convert-svg-core/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "optional": true, + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/convert-svg-core/node_modules/rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "optional": true, + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/convert-svg-core/node_modules/rimraf/node_modules/glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "optional": true, + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/convert-svg-core/node_modules/tmp": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.1.tgz", + "integrity": "sha512-76SUhtfqR2Ijn+xllcI5P1oyannHNHByD80W1q447gU3mp9G9PSpGdWmjUOHRDPiHYacIk66W7ubDTuPF3BEtQ==", + "optional": true, + "dependencies": { + "rimraf": "^3.0.0" + }, + "engines": { + "node": ">=8.17.0" + } + }, + "node_modules/convert-svg-to-png": { + "version": "0.6.4", + "resolved": "https://registry.npmjs.org/convert-svg-to-png/-/convert-svg-to-png-0.6.4.tgz", + "integrity": "sha512-zHNTuVedkyuhMl+f+HMm2L7+TKDYCKFAqAmDqUr0dN7/xtgYe76PPAydjlFzeLbzEpGtEfhaA15q+ejpLaVo3g==", + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/neocotic" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/neocotic" + } + ], + "optional": true, + "dependencies": { + "convert-svg-core": "^0.6.4" + }, + "bin": { + "convert-svg-to-png": "bin/convert-svg-to-png" + }, + "engines": { + "node": "^12.20.0 || >=14" + } + }, "node_modules/cookie": { "version": "0.4.2", "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.2.tgz", @@ -9675,23 +9841,27 @@ "node-fetch": "^2.6.11" } }, - "node_modules/cross-fetch/node_modules/node-fetch": { - "version": "2.6.11", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.11.tgz", - "integrity": "sha512-4I6pdBY1EthSqDmJkiNk3JIT8cswwR9nfeW/cPdUagJYEQG7R95WRH74wpz7ma8Gh/9dI9FP+OU+0E4FvtA55w==", + "node_modules/cross-spawn": { + "version": "6.0.5", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", + "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", "dependencies": { - "whatwg-url": "^5.0.0" + "nice-try": "^1.0.4", + "path-key": "^2.0.1", + "semver": "^5.5.0", + "shebang-command": "^1.2.0", + "which": "^1.2.9" }, "engines": { - "node": "4.x || >=6.0.0" - }, - "peerDependencies": { - "encoding": "^0.1.0" - }, - "peerDependenciesMeta": { - "encoding": { - "optional": true - } + "node": ">=4.8" + } + }, + "node_modules/cross-spawn/node_modules/semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "bin": { + "semver": "bin/semver" } }, "node_modules/crypt": { @@ -9746,7 +9916,7 @@ "version": "5.1.0", "resolved": "https://registry.npmjs.org/css-select/-/css-select-5.1.0.tgz", "integrity": "sha512-nwoRF1rvRRnnCqqY7updORDsuqKzqYJ28+oSMaJMMgOauh3fvwHqMS7EZpIPqK8GL+g9mKxF1vP/ZjSeNjEVHg==", - "dev": true, + "devOptional": true, "dependencies": { "boolbase": "^1.0.0", "css-what": "^6.1.0", @@ -9762,7 +9932,7 @@ "version": "6.1.0", "resolved": "https://registry.npmjs.org/css-what/-/css-what-6.1.0.tgz", "integrity": "sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==", - "dev": true, + "devOptional": true, "engines": { "node": ">= 6" }, @@ -9903,18 +10073,6 @@ "node": ">=4" } }, - "node_modules/decompress-response": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-4.2.1.tgz", - "integrity": "sha512-jOSne2qbyE+/r8G1VU+G/82LBs2Fs4LAsTiLSHOCOMZQl2OKZ6i8i4IyHemTe+/yIXOtTcRQMzPcgyhoFlqPkw==", - "optional": true, - "dependencies": { - "mimic-response": "^2.0.0" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/decompress-tar": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/decompress-tar/-/decompress-tar-4.1.1.tgz", @@ -10082,7 +10240,7 @@ "version": "0.6.0", "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==", - "devOptional": true, + "dev": true, "engines": { "node": ">=4.0.0" } @@ -10203,12 +10361,6 @@ "node": ">=0.4.0" } }, - "node_modules/delegates": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", - "integrity": "sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ==", - "optional": true - }, "node_modules/depd": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", @@ -10244,17 +10396,11 @@ "node": ">=4" } }, - "node_modules/detect-libc": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-1.0.3.tgz", - "integrity": "sha512-pGjwhsmsp4kL2RTz08wcOlGN83otlqHeD/Z5T8GXZB+/YcpQ/dgo+lbU8ZsGxV0HIvqqxo9l7mqYwyYMD9bKDg==", - "optional": true, - "bin": { - "detect-libc": "bin/detect-libc.js" - }, - "engines": { - "node": ">=0.10" - } + "node_modules/devtools-protocol": { + "version": "0.0.981744", + "resolved": "https://registry.npmjs.org/devtools-protocol/-/devtools-protocol-0.0.981744.tgz", + "integrity": "sha512-0cuGS8+jhR67Fy7qG3i3Pc7Aw494sb9yG9QgpG97SFVWwolgYjlhJg7n+UaHxOQT30d1TYu/EYe9k01ivLErIg==", + "optional": true }, "node_modules/diff": { "version": "5.0.0", @@ -10321,7 +10467,7 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-2.0.0.tgz", "integrity": "sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==", - "dev": true, + "devOptional": true, "dependencies": { "domelementtype": "^2.3.0", "domhandler": "^5.0.2", @@ -10340,7 +10486,7 @@ "version": "2.3.0", "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz", "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==", - "dev": true, + "devOptional": true, "funding": [ { "type": "github", @@ -10352,7 +10498,7 @@ "version": "5.0.3", "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-5.0.3.tgz", "integrity": "sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==", - "dev": true, + "devOptional": true, "dependencies": { "domelementtype": "^2.3.0" }, @@ -10367,7 +10513,7 @@ "version": "3.0.1", "resolved": "https://registry.npmjs.org/domutils/-/domutils-3.0.1.tgz", "integrity": "sha512-z08c1l761iKhDFtfXO04C7kTdPBLi41zwOZl00WS8b5eiaebNpY00HKbztwBq+e3vyqWNwWF3mP9YLUeqIrF+Q==", - "dev": true, + "devOptional": true, "dependencies": { "dom-serializer": "^2.0.0", "domelementtype": "^2.3.0", @@ -10401,11 +10547,14 @@ } }, "node_modules/dotenv": { - "version": "16.0.3", - "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.0.3.tgz", - "integrity": "sha512-7GO6HghkA5fYG9TYnNxi14/7K9f5occMlp3zXAuSxn7CKCxt9xbNWG7yF8hTCSUchlfWSe3uLmlPfigevRItzQ==", + "version": "16.3.1", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.3.1.tgz", + "integrity": "sha512-IPzF4w4/Rd94bA9imS68tZBaYyBWSCE47V1RGuMrB94iyTOIEwRmVL2x/4An+6mETpLrKJ5hQkB8W4kFAadeIQ==", "engines": { "node": ">=12" + }, + "funding": { + "url": "https://github.com/motdotla/dotenv?sponsor=1" } }, "node_modules/double-ended-queue": { @@ -10552,7 +10701,7 @@ "version": "4.4.0", "resolved": "https://registry.npmjs.org/entities/-/entities-4.4.0.tgz", "integrity": "sha512-oYp7156SP8LkeGD0GF85ad1X9Ai79WtRsZ2gxJqtBuzH+98YUV6jkHEKlZkMbcrjJjIVJNIDP/3WL9wQkoPbWA==", - "dev": true, + "devOptional": true, "engines": { "node": ">=0.12" }, @@ -10691,6 +10840,17 @@ "ext": "^1.1.2" } }, + "node_modules/es6-weak-map": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/es6-weak-map/-/es6-weak-map-2.0.3.tgz", + "integrity": "sha512-p5um32HOTO1kP+w7PRnB+5lQ43Z6muuMuIMffvDN8ZB4GcnjLBV6zGStpbASIMk4DCAvEaamhe2zhyCb/QXXsA==", + "dependencies": { + "d": "1", + "es5-ext": "^0.10.46", + "es6-iterator": "^2.0.3", + "es6-symbol": "^3.1.1" + } + }, "node_modules/escalade": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", @@ -11044,20 +11204,6 @@ "flat": "cli.js" } }, - "node_modules/eth-gas-reporter/node_modules/fsevents": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.1.3.tgz", - "integrity": "sha512-Auw9a4AxqWpa9GUfj370BMPzzyncfBABW8Mab7BGWBYDj4Isgq+cDKtx0i6u9jcX9pQDnswsaaOTgTmA5pEjuQ==", - "deprecated": "\"Please update to latest v2.3 or v2.2\"", - "hasInstallScript": true, - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": "^8.16.0 || ^10.6.0 || >=11.0.0" - } - }, "node_modules/eth-gas-reporter/node_modules/glob": { "version": "7.1.3", "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.3.tgz", @@ -12672,10 +12818,20 @@ "npm": ">=3" } }, + "node_modules/event-emitter": { + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/event-emitter/-/event-emitter-0.3.5.tgz", + "integrity": "sha512-D9rRn9y7kLPnJ+hMq7S/nhvoKwwvVJahBi2BPmx3bvbsEdK3W9ii8cBSGjP+72/LnM4n6fo3+dkCX5FeTQruXA==", + "dependencies": { + "d": "1", + "es5-ext": "~0.10.14" + } + }, "node_modules/event-target-shim": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/event-target-shim/-/event-target-shim-5.0.1.tgz", "integrity": "sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==", + "optional": true, "engines": { "node": ">=6" } @@ -12714,15 +12870,6 @@ "safe-buffer": "^5.1.1" } }, - "node_modules/expand-template": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/expand-template/-/expand-template-2.0.3.tgz", - "integrity": "sha512-XYfuKMvj4O35f/pOXLObndIRvyQ+/+6AhODh+OKWj9S9498pHHn/IMszH+gt0fBCRWMNfk1ZSp5x3AifmnI2vg==", - "optional": true, - "engines": { - "node": ">=6" - } - }, "node_modules/express": { "version": "4.18.2", "resolved": "https://registry.npmjs.org/express/-/express-4.18.2.tgz", @@ -12803,6 +12950,41 @@ "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==" }, + "node_modules/extract-zip": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extract-zip/-/extract-zip-2.0.1.tgz", + "integrity": "sha512-GDhU9ntwuKyGXdZBUgTIe+vXnWj0fppUEtMDL0+idd5Sta8TGpHssn/eusA9mrPr9qNDym6SxAYZjNvCn/9RBg==", + "optional": true, + "dependencies": { + "debug": "^4.1.1", + "get-stream": "^5.1.0", + "yauzl": "^2.10.0" + }, + "bin": { + "extract-zip": "cli.js" + }, + "engines": { + "node": ">= 10.17.0" + }, + "optionalDependencies": { + "@types/yauzl": "^2.9.1" + } + }, + "node_modules/extract-zip/node_modules/get-stream": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", + "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", + "optional": true, + "dependencies": { + "pump": "^3.0.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/extsprintf": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", @@ -12901,6 +13083,15 @@ "resolved": "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz", "integrity": "sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==" }, + "node_modules/file-url": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/file-url/-/file-url-3.0.0.tgz", + "integrity": "sha512-g872QGsHexznxkIAdK8UiZRe7SkE6kvylShU4Nsj8NvfvZag7S0QuQ4IgvPDkk75HxgjIVDwycFTDAgIiO4nDA==", + "optional": true, + "engines": { + "node": ">=8" + } + }, "node_modules/fill-range": { "version": "7.0.1", "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", @@ -12966,6 +13157,14 @@ "node": ">=8" } }, + "node_modules/find-yarn-workspace-root": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/find-yarn-workspace-root/-/find-yarn-workspace-root-2.0.0.tgz", + "integrity": "sha512-1IMnbjt4KzsQfnhnzNd8wUEgXZ44IzZaZmnLYx7D5FZlaHt2gW20Cri8Q+E/t5tIj4+epTBub+2Zxu/vNILzqQ==", + "dependencies": { + "micromatch": "^4.0.2" + } + }, "node_modules/flashbots": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/flashbots/-/flashbots-1.0.0.tgz", @@ -13061,15 +13260,15 @@ "integrity": "sha512-H5KQDspykdHuztLTg+ajGN0Z2qUjcEf3Ybxc6hLt0k7/zPkn29XnKnxlBPyW2XIddWrGaJBzBl4VLYOtk39yZg==" }, "node_modules/fraction.js": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.2.0.tgz", - "integrity": "sha512-MhLuK+2gUcnZe8ZHlaaINnQLl0xRIGRfcGk2yl8xoQAfHrSsL3rYu6FCmBdkdbhc9EPlwyGHewaRsvwRMJtAlA==", + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.3.4.tgz", + "integrity": "sha512-pwiTgt0Q7t+GHZA4yaLjObx4vXmmdcS0iSJ19o8d/goUGgItX9UZWKWNnLHehxviD8wU2IWRsnR8cD5+yOJP2Q==", "engines": { "node": "*" }, "funding": { "type": "patreon", - "url": "https://www.patreon.com/infusion" + "url": "https://github.com/sponsors/rawify" } }, "node_modules/fresh": { @@ -13121,19 +13320,6 @@ "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==" }, - "node_modules/fsevents": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", - "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", - "hasInstallScript": true, - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": "^8.16.0 || ^10.6.0 || >=11.0.0" - } - }, "node_modules/function-bind": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", @@ -13170,9 +13356,9 @@ } }, "node_modules/ganache": { - "version": "7.8.0", - "resolved": "https://registry.npmjs.org/ganache/-/ganache-7.8.0.tgz", - "integrity": "sha512-IrUYvsaE/m2/NaVIZ7D/gCnsmyU/buechnH6MhUipzG1qJcZIwIp/DoP/LZUcHyhy0Bv0NKZD2pGOjpRhn7l7A==", + "version": "7.9.1", + "resolved": "https://registry.npmjs.org/ganache/-/ganache-7.9.1.tgz", + "integrity": "sha512-Tqhd4J3cpiLeYTD6ek/zlchSB107IVPMIm4ypyg+xz1sdkeALUnYYZnmY4Bdjqj3i6QwtlZPCu7U4qKy7HlWTA==", "bundleDependencies": [ "@trufflesuite/bigint-buffer", "keccak", @@ -13182,7 +13368,7 @@ "hasShrinkwrap": true, "dependencies": { "@trufflesuite/bigint-buffer": "1.1.10", - "@trufflesuite/uws-js-unofficial": "20.10.0-unofficial.2", + "@trufflesuite/uws-js-unofficial": "20.30.0-unofficial.0", "@types/bn.js": "^5.1.0", "@types/lru-cache": "5.1.1", "@types/seedrandom": "3.0.1", @@ -21480,6 +21666,215 @@ "version": "3.1.1", "license": "ISC" }, + "node_modules/ganache/node_modules/@cspotcode/source-map-support": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz", + "integrity": "sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==", + "extraneous": true, + "dependencies": { + "@jridgewell/trace-mapping": "0.3.9" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/ganache/node_modules/@cspotcode/source-map-support/node_modules/@jridgewell/trace-mapping": { + "version": "0.3.9", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz", + "integrity": "sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==", + "extraneous": true, + "dependencies": { + "@jridgewell/resolve-uri": "^3.0.3", + "@jridgewell/sourcemap-codec": "^1.4.10" + } + }, + "node_modules/ganache/node_modules/@discoveryjs/json-ext": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/@discoveryjs/json-ext/-/json-ext-0.5.7.tgz", + "integrity": "sha512-dBVuXR082gk3jsFp7Rd/JI4kytwGHecnCoTtXFb7DB6CNHp4rg5k1bhg0nWdLGLnOV71lmDzGQaLMy8iPLY0pw==", + "extraneous": true, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/ganache/node_modules/@jridgewell/gen-mapping": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.2.tgz", + "integrity": "sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A==", + "extraneous": true, + "dependencies": { + "@jridgewell/set-array": "^1.0.1", + "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/trace-mapping": "^0.3.9" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/ganache/node_modules/@jridgewell/resolve-uri": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz", + "integrity": "sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==", + "extraneous": true, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/ganache/node_modules/@jridgewell/set-array": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz", + "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==", + "extraneous": true, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/ganache/node_modules/@jridgewell/source-map": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.2.tgz", + "integrity": "sha512-m7O9o2uR8k2ObDysZYzdfhb08VuEml5oWGiosa1VdaPZ/A6QyPkAJuwN0Q1lhULOf6B7MtQmHENS743hWtCrgw==", + "extraneous": true, + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.0", + "@jridgewell/trace-mapping": "^0.3.9" + } + }, + "node_modules/ganache/node_modules/@jridgewell/sourcemap-codec": { + "version": "1.4.14", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz", + "integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==", + "extraneous": true + }, + "node_modules/ganache/node_modules/@jridgewell/trace-mapping": { + "version": "0.3.17", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.17.tgz", + "integrity": "sha512-MCNzAp77qzKca9+W/+I0+sEpaUnZoeasnghNeVc41VZCEKaCH73Vq3BZZ/SzWIgrqE4H4ceI+p+b6C0mHf9T4g==", + "extraneous": true, + "dependencies": { + "@jridgewell/resolve-uri": "3.1.0", + "@jridgewell/sourcemap-codec": "1.4.14" + } + }, + "node_modules/ganache/node_modules/@microsoft/api-extractor": { + "version": "7.20.1", + "resolved": "https://registry.npmjs.org/@microsoft/api-extractor/-/api-extractor-7.20.1.tgz", + "integrity": "sha512-T7cqcK+JpvHGOj7cD2ZCCWS7Xgru1uOqZwrV/FSUdyKVs5fopZcbBSuetwD/akst3O7Ypryg3UOLP54S/vnVmA==", + "extraneous": true, + "dependencies": { + "@microsoft/api-extractor-model": "7.16.0", + "@microsoft/tsdoc": "0.13.2", + "@microsoft/tsdoc-config": "~0.15.2", + "@rushstack/node-core-library": "3.45.1", + "@rushstack/rig-package": "0.3.8", + "@rushstack/ts-command-line": "4.10.7", + "colors": "~1.2.1", + "lodash": "~4.17.15", + "resolve": "~1.17.0", + "semver": "~7.3.0", + "source-map": "~0.6.1", + "typescript": "~4.5.2" + }, + "bin": { + "api-extractor": "bin/api-extractor" + } + }, + "node_modules/ganache/node_modules/@microsoft/api-extractor-model": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@microsoft/api-extractor-model/-/api-extractor-model-7.16.0.tgz", + "integrity": "sha512-0FOrbNIny8mzBrzQnSIkEjAXk0JMSnPmWYxt3ZDTPVg9S8xIPzB6lfgTg9+Mimu0RKCpGKBpd+v2WcR5vGzyUQ==", + "extraneous": true, + "dependencies": { + "@microsoft/tsdoc": "0.13.2", + "@microsoft/tsdoc-config": "~0.15.2", + "@rushstack/node-core-library": "3.45.1" + } + }, + "node_modules/ganache/node_modules/@microsoft/api-extractor/node_modules/typescript": { + "version": "4.5.5", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.5.5.tgz", + "integrity": "sha512-TCTIul70LyWe6IJWT8QSYeA54WQe8EjQFU4wY52Fasj5UKx88LNYKCgBEHcOMOrFF1rKGbD8v/xcNWVUq9SymA==", + "extraneous": true, + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=4.2.0" + } + }, + "node_modules/ganache/node_modules/@microsoft/tsdoc": { + "version": "0.13.2", + "resolved": "https://registry.npmjs.org/@microsoft/tsdoc/-/tsdoc-0.13.2.tgz", + "integrity": "sha512-WrHvO8PDL8wd8T2+zBGKrMwVL5IyzR3ryWUsl0PXgEV0QHup4mTLi0QcATefGI6Gx9Anu7vthPyyyLpY0EpiQg==", + "extraneous": true + }, + "node_modules/ganache/node_modules/@microsoft/tsdoc-config": { + "version": "0.15.2", + "resolved": "https://registry.npmjs.org/@microsoft/tsdoc-config/-/tsdoc-config-0.15.2.tgz", + "integrity": "sha512-mK19b2wJHSdNf8znXSMYVShAHktVr/ib0Ck2FA3lsVBSEhSI/TfXT7DJQkAYgcztTuwazGcg58ZjYdk0hTCVrA==", + "extraneous": true, + "dependencies": { + "@microsoft/tsdoc": "0.13.2", + "ajv": "~6.12.6", + "jju": "~1.4.0", + "resolve": "~1.19.0" + } + }, + "node_modules/ganache/node_modules/@microsoft/tsdoc-config/node_modules/resolve": { + "version": "1.19.0", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.19.0.tgz", + "integrity": "sha512-rArEXAgsBG4UgRGcynxWIWKFvh/XZCcS8UJdHhwy91zwAvCZIbcs+vAbflgBnNjYMs/i/i+/Ux6IZhML1yPvxg==", + "extraneous": true, + "dependencies": { + "is-core-module": "^2.1.0", + "path-parse": "^1.0.6" + } + }, + "node_modules/ganache/node_modules/@rushstack/node-core-library": { + "version": "3.45.1", + "resolved": "https://registry.npmjs.org/@rushstack/node-core-library/-/node-core-library-3.45.1.tgz", + "integrity": "sha512-BwdssTNe007DNjDBxJgInHg8ePytIPyT0La7ZZSQZF9+rSkT42AygXPGvbGsyFfEntjr4X37zZSJI7yGzL16cQ==", + "extraneous": true, + "dependencies": { + "@types/node": "12.20.24", + "colors": "~1.2.1", + "fs-extra": "~7.0.1", + "import-lazy": "~4.0.0", + "jju": "~1.4.0", + "resolve": "~1.17.0", + "semver": "~7.3.0", + "timsort": "~0.3.0", + "z-schema": "~5.0.2" + } + }, + "node_modules/ganache/node_modules/@rushstack/node-core-library/node_modules/@types/node": { + "version": "12.20.24", + "resolved": "https://registry.npmjs.org/@types/node/-/node-12.20.24.tgz", + "integrity": "sha512-yxDeaQIAJlMav7fH5AQqPH1u8YIuhYJXYBzxaQ4PifsU0GDO38MSdmEDeRlIxrKbC6NbEaaEHDanWb+y30U8SQ==", + "extraneous": true + }, + "node_modules/ganache/node_modules/@rushstack/rig-package": { + "version": "0.3.8", + "resolved": "https://registry.npmjs.org/@rushstack/rig-package/-/rig-package-0.3.8.tgz", + "integrity": "sha512-MDWg1xovea99PWloSiYMjFcCLsrdjFtYt6aOyHNs5ojn5mxrzR6U9F83hvbQjTWnKPMvZtr0vcek+4n+OQOp3Q==", + "extraneous": true, + "dependencies": { + "resolve": "~1.17.0", + "strip-json-comments": "~3.1.1" + } + }, + "node_modules/ganache/node_modules/@rushstack/ts-command-line": { + "version": "4.10.7", + "resolved": "https://registry.npmjs.org/@rushstack/ts-command-line/-/ts-command-line-4.10.7.tgz", + "integrity": "sha512-CjS+DfNXUSO5Ab2wD1GBGtUTnB02OglRWGqfaTcac9Jn45V5MeUOsq/wA8wEeS5Y/3TZ2P1k+IWdVDiuOFP9Og==", + "extraneous": true, + "dependencies": { + "@types/argparse": "1.0.38", + "argparse": "~1.0.9", + "colors": "~1.2.1", + "string-argv": "~0.3.1" + } + }, "node_modules/ganache/node_modules/@trufflesuite/bigint-buffer": { "version": "1.1.10", "resolved": "https://registry.npmjs.org/@trufflesuite/bigint-buffer/-/bigint-buffer-1.1.10.tgz", @@ -21507,17 +21902,99 @@ } }, "node_modules/ganache/node_modules/@trufflesuite/uws-js-unofficial": { - "version": "20.10.0-unofficial.2", - "resolved": "https://registry.npmjs.org/@trufflesuite/uws-js-unofficial/-/uws-js-unofficial-20.10.0-unofficial.2.tgz", - "integrity": "sha512-oQQlnS3oNeGsgS4K3KCSSavJgSb0W9D5ktZs4FacX9VbM7b+NlhjH96d6/G4fMrz+bc5MXRyco419on0X0dvRA==", + "version": "20.30.0-unofficial.0", + "resolved": "https://registry.npmjs.org/@trufflesuite/uws-js-unofficial/-/uws-js-unofficial-20.30.0-unofficial.0.tgz", + "integrity": "sha512-r5X0aOQcuT6pLwTRLD+mPnAM/nlKtvIK4Z+My++A8tTOR0qTjNRx8UB8jzRj3D+p9PMAp5LnpCUUGmz7/TppwA==", "dependencies": { - "ws": "8.2.3" + "ws": "8.13.0" }, "optionalDependencies": { - "bufferutil": "4.0.5", - "utf-8-validate": "5.0.7" + "bufferutil": "4.0.7", + "utf-8-validate": "6.0.3" + } + }, + "node_modules/ganache/node_modules/@trufflesuite/uws-js-unofficial/node_modules/bufferutil": { + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/bufferutil/-/bufferutil-4.0.7.tgz", + "integrity": "sha512-kukuqc39WOHtdxtw4UScxF/WVnMFVSQVKhtx3AjZJzhd0RGZZldcrfSEbVsWWe6KNH253574cq5F+wpv0G9pJw==", + "hasInstallScript": true, + "optional": true, + "dependencies": { + "node-gyp-build": "^4.3.0" + }, + "engines": { + "node": ">=6.14.2" + } + }, + "node_modules/ganache/node_modules/@trufflesuite/uws-js-unofficial/node_modules/utf-8-validate": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/utf-8-validate/-/utf-8-validate-6.0.3.tgz", + "integrity": "sha512-uIuGf9TWQ/y+0Lp+KGZCMuJWc3N9BHA+l/UmHd/oUHwJJDeysyTRxNQVkbzsIWfGFbRe3OcgML/i0mvVRPOyDA==", + "hasInstallScript": true, + "optional": true, + "dependencies": { + "node-gyp-build": "^4.3.0" + }, + "engines": { + "node": ">=6.14.2" } }, + "node_modules/ganache/node_modules/@trufflesuite/uws-js-unofficial/node_modules/ws": { + "version": "8.13.0", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.13.0.tgz", + "integrity": "sha512-x9vcZYTrFPC7aSIbj7sRCYo7L/Xb8Iy+pW0ng0wt2vCJv7M9HOMy0UoN3rr+IFC7hb7vXoqS+P9ktyLLLhO+LA==", + "engines": { + "node": ">=10.0.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": ">=5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } + } + }, + "node_modules/ganache/node_modules/@tsconfig/node10": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.9.tgz", + "integrity": "sha512-jNsYVVxU8v5g43Erja32laIDHXeoNvFEpX33OK4d6hljo3jDhCBDhx5dhCCTMWUojscpAagGiRkBKxpdl9fxqA==", + "extraneous": true + }, + "node_modules/ganache/node_modules/@tsconfig/node12": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/@tsconfig/node12/-/node12-1.0.11.tgz", + "integrity": "sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==", + "extraneous": true + }, + "node_modules/ganache/node_modules/@tsconfig/node14": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@tsconfig/node14/-/node14-1.0.3.tgz", + "integrity": "sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==", + "extraneous": true + }, + "node_modules/ganache/node_modules/@tsconfig/node16": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.3.tgz", + "integrity": "sha512-yOlFc+7UtL/89t2ZhjPvvB/DeAr3r+Dq58IgzsFkOAvVC6NMJXmCGjbptdXdR9qsX7pKcTL+s87FtYREi2dEEQ==", + "extraneous": true + }, + "node_modules/ganache/node_modules/@types/abstract-leveldown": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@types/abstract-leveldown/-/abstract-leveldown-7.2.0.tgz", + "integrity": "sha512-q5veSX6zjUy/DlDhR4Y4cU0k2Ar+DT2LUraP00T19WLmTO6Se1djepCCaqU6nQrwcJ5Hyo/CWqxTzrrFg8eqbQ==", + "extraneous": true + }, + "node_modules/ganache/node_modules/@types/argparse": { + "version": "1.0.38", + "resolved": "https://registry.npmjs.org/@types/argparse/-/argparse-1.0.38.tgz", + "integrity": "sha512-ebDJ9b0e702Yr7pWgB0jzm+CX4Srzz8RcXtLJDJB+BSccqMa36uyH/zUsSYao5+BD1ytv3k3rPYCq4mAE1hsXA==", + "extraneous": true + }, "node_modules/ganache/node_modules/@types/bn.js": { "version": "5.1.0", "resolved": "https://registry.npmjs.org/@types/bn.js/-/bn.js-5.1.0.tgz", @@ -21526,11 +22003,49 @@ "@types/node": "*" } }, + "node_modules/ganache/node_modules/@types/eslint": { + "version": "8.4.10", + "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-8.4.10.tgz", + "integrity": "sha512-Sl/HOqN8NKPmhWo2VBEPm0nvHnu2LL3v9vKo8MEq0EtbJ4eVzGPl41VNPvn5E1i5poMk4/XD8UriLHpJvEP/Nw==", + "extraneous": true, + "dependencies": { + "@types/estree": "*", + "@types/json-schema": "*" + } + }, + "node_modules/ganache/node_modules/@types/eslint-scope": { + "version": "3.7.4", + "resolved": "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.4.tgz", + "integrity": "sha512-9K4zoImiZc3HlIp6AVUDE4CWYx22a+lhSZMYNpbjW04+YF0KWj4pJXnEMjdnFTiQibFFmElcsasJXDbdI/EPhA==", + "extraneous": true, + "dependencies": { + "@types/eslint": "*", + "@types/estree": "*" + } + }, + "node_modules/ganache/node_modules/@types/estree": { + "version": "0.0.50", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.50.tgz", + "integrity": "sha512-C6N5s2ZFtuZRj54k2/zyRhNDjJwwcViAM3Nbm8zjBpbqAdZ00mr0CFxvSKeO8Y/e03WVFLpQMdHYVfUd6SB+Hw==", + "extraneous": true + }, + "node_modules/ganache/node_modules/@types/json-schema": { + "version": "7.0.11", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.11.tgz", + "integrity": "sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ==", + "extraneous": true + }, "node_modules/ganache/node_modules/@types/lru-cache": { "version": "5.1.1", "resolved": "https://registry.npmjs.org/@types/lru-cache/-/lru-cache-5.1.1.tgz", "integrity": "sha512-ssE3Vlrys7sdIzs5LOxCzTVMsU7i9oa/IaW92wF32JFb3CVczqOkru2xspuKczHEbG3nvmPY7IFqVmGGHdNbYw==" }, + "node_modules/ganache/node_modules/@types/mocha": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/@types/mocha/-/mocha-9.0.0.tgz", + "integrity": "sha512-scN0hAWyLVAvLR9AyW7HoFF5sJZglyBsbPuHO4fv7JRvfmPBMfp1ozWqOf/e4wwPNxezBZXRfWzMb6iFLgEVRA==", + "extraneous": true + }, "node_modules/ganache/node_modules/@types/node": { "version": "17.0.0", "resolved": "https://registry.npmjs.org/@types/node/-/node-17.0.0.tgz", @@ -21541,6 +22056,191 @@ "resolved": "https://registry.npmjs.org/@types/seedrandom/-/seedrandom-3.0.1.tgz", "integrity": "sha512-giB9gzDeiCeloIXDgzFBCgjj1k4WxcDrZtGl6h1IqmUPlxF+Nx8Ve+96QCyDZ/HseB/uvDsKbpib9hU5cU53pw==" }, + "node_modules/ganache/node_modules/@ungap/promise-all-settled": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@ungap/promise-all-settled/-/promise-all-settled-1.1.2.tgz", + "integrity": "sha512-sL/cEvJWAnClXw0wHk85/2L0G6Sj8UB0Ctc1TEMbKSsmpRosqhwj9gWgFRZSrBr2f9tiXISwNhCPmlfqUqyb9Q==", + "extraneous": true + }, + "node_modules/ganache/node_modules/@webassemblyjs/ast": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.11.1.tgz", + "integrity": "sha512-ukBh14qFLjxTQNTXocdyksN5QdM28S1CxHt2rdskFyL+xFV7VremuBLVbmCePj+URalXBENx/9Lm7lnhihtCSw==", + "extraneous": true, + "dependencies": { + "@webassemblyjs/helper-numbers": "1.11.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.1" + } + }, + "node_modules/ganache/node_modules/@webassemblyjs/floating-point-hex-parser": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.1.tgz", + "integrity": "sha512-iGRfyc5Bq+NnNuX8b5hwBrRjzf0ocrJPI6GWFodBFzmFnyvrQ83SHKhmilCU/8Jv67i4GJZBMhEzltxzcNagtQ==", + "extraneous": true + }, + "node_modules/ganache/node_modules/@webassemblyjs/helper-api-error": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.1.tgz", + "integrity": "sha512-RlhS8CBCXfRUR/cwo2ho9bkheSXG0+NwooXcc3PAILALf2QLdFyj7KGsKRbVc95hZnhnERon4kW/D3SZpp6Tcg==", + "extraneous": true + }, + "node_modules/ganache/node_modules/@webassemblyjs/helper-buffer": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.11.1.tgz", + "integrity": "sha512-gwikF65aDNeeXa8JxXa2BAk+REjSyhrNC9ZwdT0f8jc4dQQeDQ7G4m0f2QCLPJiMTTO6wfDmRmj/pW0PsUvIcA==", + "extraneous": true + }, + "node_modules/ganache/node_modules/@webassemblyjs/helper-numbers": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.1.tgz", + "integrity": "sha512-vDkbxiB8zfnPdNK9Rajcey5C0w+QJugEglN0of+kmO8l7lDb77AnlKYQF7aarZuCrv+l0UvqL+68gSDr3k9LPQ==", + "extraneous": true, + "dependencies": { + "@webassemblyjs/floating-point-hex-parser": "1.11.1", + "@webassemblyjs/helper-api-error": "1.11.1", + "@xtuc/long": "4.2.2" + } + }, + "node_modules/ganache/node_modules/@webassemblyjs/helper-wasm-bytecode": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.1.tgz", + "integrity": "sha512-PvpoOGiJwXeTrSf/qfudJhwlvDQxFgelbMqtq52WWiXC6Xgg1IREdngmPN3bs4RoO83PnL/nFrxucXj1+BX62Q==", + "extraneous": true + }, + "node_modules/ganache/node_modules/@webassemblyjs/helper-wasm-section": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.11.1.tgz", + "integrity": "sha512-10P9No29rYX1j7F3EVPX3JvGPQPae+AomuSTPiF9eBQeChHI6iqjMIwR9JmOJXwpnn/oVGDk7I5IlskuMwU/pg==", + "extraneous": true, + "dependencies": { + "@webassemblyjs/ast": "1.11.1", + "@webassemblyjs/helper-buffer": "1.11.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.1", + "@webassemblyjs/wasm-gen": "1.11.1" + } + }, + "node_modules/ganache/node_modules/@webassemblyjs/ieee754": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.11.1.tgz", + "integrity": "sha512-hJ87QIPtAMKbFq6CGTkZYJivEwZDbQUgYd3qKSadTNOhVY7p+gfP6Sr0lLRVTaG1JjFj+r3YchoqRYxNH3M0GQ==", + "extraneous": true, + "dependencies": { + "@xtuc/ieee754": "^1.2.0" + } + }, + "node_modules/ganache/node_modules/@webassemblyjs/leb128": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.11.1.tgz", + "integrity": "sha512-BJ2P0hNZ0u+Th1YZXJpzW6miwqQUGcIHT1G/sf72gLVD9DZ5AdYTqPNbHZh6K1M5VmKvFXwGSWZADz+qBWxeRw==", + "extraneous": true, + "dependencies": { + "@xtuc/long": "4.2.2" + } + }, + "node_modules/ganache/node_modules/@webassemblyjs/utf8": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.11.1.tgz", + "integrity": "sha512-9kqcxAEdMhiwQkHpkNiorZzqpGrodQQ2IGrHHxCy+Ozng0ofyMA0lTqiLkVs1uzTRejX+/O0EOT7KxqVPuXosQ==", + "extraneous": true + }, + "node_modules/ganache/node_modules/@webassemblyjs/wasm-edit": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.11.1.tgz", + "integrity": "sha512-g+RsupUC1aTHfR8CDgnsVRVZFJqdkFHpsHMfJuWQzWU3tvnLC07UqHICfP+4XyL2tnr1amvl1Sdp06TnYCmVkA==", + "extraneous": true, + "dependencies": { + "@webassemblyjs/ast": "1.11.1", + "@webassemblyjs/helper-buffer": "1.11.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.1", + "@webassemblyjs/helper-wasm-section": "1.11.1", + "@webassemblyjs/wasm-gen": "1.11.1", + "@webassemblyjs/wasm-opt": "1.11.1", + "@webassemblyjs/wasm-parser": "1.11.1", + "@webassemblyjs/wast-printer": "1.11.1" + } + }, + "node_modules/ganache/node_modules/@webassemblyjs/wasm-gen": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.11.1.tgz", + "integrity": "sha512-F7QqKXwwNlMmsulj6+O7r4mmtAlCWfO/0HdgOxSklZfQcDu0TpLiD1mRt/zF25Bk59FIjEuGAIyn5ei4yMfLhA==", + "extraneous": true, + "dependencies": { + "@webassemblyjs/ast": "1.11.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.1", + "@webassemblyjs/ieee754": "1.11.1", + "@webassemblyjs/leb128": "1.11.1", + "@webassemblyjs/utf8": "1.11.1" + } + }, + "node_modules/ganache/node_modules/@webassemblyjs/wasm-opt": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.11.1.tgz", + "integrity": "sha512-VqnkNqnZlU5EB64pp1l7hdm3hmQw7Vgqa0KF/KCNO9sIpI6Fk6brDEiX+iCOYrvMuBWDws0NkTOxYEb85XQHHw==", + "extraneous": true, + "dependencies": { + "@webassemblyjs/ast": "1.11.1", + "@webassemblyjs/helper-buffer": "1.11.1", + "@webassemblyjs/wasm-gen": "1.11.1", + "@webassemblyjs/wasm-parser": "1.11.1" + } + }, + "node_modules/ganache/node_modules/@webassemblyjs/wasm-parser": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.11.1.tgz", + "integrity": "sha512-rrBujw+dJu32gYB7/Lup6UhdkPx9S9SnobZzRVL7VcBH9Bt9bCBLEuX/YXOOtBsOZ4NQrRykKhffRWHvigQvOA==", + "extraneous": true, + "dependencies": { + "@webassemblyjs/ast": "1.11.1", + "@webassemblyjs/helper-api-error": "1.11.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.1", + "@webassemblyjs/ieee754": "1.11.1", + "@webassemblyjs/leb128": "1.11.1", + "@webassemblyjs/utf8": "1.11.1" + } + }, + "node_modules/ganache/node_modules/@webassemblyjs/wast-printer": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.11.1.tgz", + "integrity": "sha512-IQboUWM4eKzWW+N/jij2sRatKMh99QEelo3Eb2q0qXkvPRISAj8Qxtmw5itwqK+TTkBuUIE45AxYPToqPtL5gg==", + "extraneous": true, + "dependencies": { + "@webassemblyjs/ast": "1.11.1", + "@xtuc/long": "4.2.2" + } + }, + "node_modules/ganache/node_modules/@webpack-cli/configtest": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@webpack-cli/configtest/-/configtest-1.2.0.tgz", + "integrity": "sha512-4FB8Tj6xyVkyqjj1OaTqCjXYULB9FMkqQ8yGrZjRDrYh0nOE+7Lhs45WioWQQMV+ceFlE368Ukhe6xdvJM9Egg==", + "extraneous": true + }, + "node_modules/ganache/node_modules/@webpack-cli/info": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@webpack-cli/info/-/info-1.5.0.tgz", + "integrity": "sha512-e8tSXZpw2hPl2uMJY6fsMswaok5FdlGNRTktvFk2sD8RjH0hE2+XistawJx1vmKteh4NmGmNUrp+Tb2w+udPcQ==", + "extraneous": true, + "dependencies": { + "envinfo": "^7.7.3" + } + }, + "node_modules/ganache/node_modules/@webpack-cli/serve": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/@webpack-cli/serve/-/serve-1.7.0.tgz", + "integrity": "sha512-oxnCNGj88fL+xzV+dacXs44HcDwf1ovs3AuEzvP7mqXw7fQntqIhQ1BRmynh4qEKQSSSRSWVyXRjmTbZIX9V2Q==", + "extraneous": true + }, + "node_modules/ganache/node_modules/@xtuc/ieee754": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz", + "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==", + "extraneous": true + }, + "node_modules/ganache/node_modules/@xtuc/long": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/@xtuc/long/-/long-4.2.2.tgz", + "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==", + "extraneous": true + }, "node_modules/ganache/node_modules/abstract-level": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/abstract-level/-/abstract-level-1.0.3.tgz", @@ -21553,12 +22253,18 @@ "level-transcoder": "^1.0.1", "module-error": "^1.0.1", "queue-microtask": "^1.2.3" + }, + "engines": { + "node": ">=12" } }, "node_modules/ganache/node_modules/abstract-level/node_modules/level-supports": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/level-supports/-/level-supports-4.0.1.tgz", - "integrity": "sha512-PbXpve8rKeNcZ9C1mUicC9auIYFyGpkV9/i6g76tLgANwWhtG2v7I4xNBUlkn3lE2/dZF3Pi0ygYGtLc4RXXdA==" + "integrity": "sha512-PbXpve8rKeNcZ9C1mUicC9auIYFyGpkV9/i6g76tLgANwWhtG2v7I4xNBUlkn3lE2/dZF3Pi0ygYGtLc4RXXdA==", + "engines": { + "node": ">=12" + } }, "node_modules/ganache/node_modules/abstract-leveldown": { "version": "7.2.0", @@ -21578,6 +22284,139 @@ "node": ">=10" } }, + "node_modules/ganache/node_modules/acorn": { + "version": "8.8.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.1.tgz", + "integrity": "sha512-7zFpHzhnqYKrkYdUjF1HI1bzd0VygEGX8lFk4k5zVMqHEoES+P+7TKI+EvLO9WVMJ8eekdO0aDEK044xTXwPPA==", + "extraneous": true, + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/ganache/node_modules/acorn-import-assertions": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/acorn-import-assertions/-/acorn-import-assertions-1.8.0.tgz", + "integrity": "sha512-m7VZ3jwz4eK6A4Vtt8Ew1/mNbP24u0FhdyfA7fSvnJR6LMdfOYnmuIrrJAgrYfYJ10F/otaHTtrtrtmHdMNzEw==", + "extraneous": true + }, + "node_modules/ganache/node_modules/acorn-walk": { + "version": "8.2.0", + "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.2.0.tgz", + "integrity": "sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==", + "extraneous": true, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/ganache/node_modules/ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "extraneous": true, + "dependencies": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + } + }, + "node_modules/ganache/node_modules/ajv-keywords": { + "version": "3.5.2", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", + "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", + "extraneous": true + }, + "node_modules/ganache/node_modules/ansi-colors": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz", + "integrity": "sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==", + "extraneous": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/ganache/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "extraneous": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/ganache/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "extraneous": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/ganache/node_modules/anymatch": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", + "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", + "extraneous": true, + "dependencies": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/ganache/node_modules/arg": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz", + "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==", + "extraneous": true + }, + "node_modules/ganache/node_modules/argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "extraneous": true, + "dependencies": { + "sprintf-js": "~1.0.2" + } + }, + "node_modules/ganache/node_modules/asn1.js": { + "version": "5.4.1", + "resolved": "https://registry.npmjs.org/asn1.js/-/asn1.js-5.4.1.tgz", + "integrity": "sha512-+I//4cYPccV8LdmBLiX8CYvf9Sp3vQsrqu2QNXRcrbiWvcx/UdlFiqUJJzxRQxgsZmvhXhn4cSKeSmoFjVdupA==", + "extraneous": true, + "dependencies": { + "bn.js": "^4.0.0", + "inherits": "^2.0.1", + "minimalistic-assert": "^1.0.0", + "safer-buffer": "^2.1.0" + } + }, + "node_modules/ganache/node_modules/asn1.js/node_modules/bn.js": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", + "extraneous": true + }, + "node_modules/ganache/node_modules/assert": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/assert/-/assert-2.0.0.tgz", + "integrity": "sha512-se5Cd+js9dXJnu6Ag2JFc00t+HmHOen+8Q+L7O9zI0PqQXr20uk2J0XQqMxZEeo5U50o8Nvmmx7dZrl+Ufr35A==", + "extraneous": true, + "dependencies": { + "es6-object-assign": "^1.1.0", + "is-nan": "^1.2.1", + "object-is": "^1.0.1", + "util": "^0.12.0" + } + }, "node_modules/ganache/node_modules/async": { "version": "2.6.4", "resolved": "https://registry.npmjs.org/async/-/async-2.6.4.tgz", @@ -21594,6 +22433,21 @@ "async": "^2.4.0" } }, + "node_modules/ganache/node_modules/available-typed-arrays": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz", + "integrity": "sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==", + "extraneous": true, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/ganache/node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "extraneous": true + }, "node_modules/ganache/node_modules/base64-js": { "version": "1.5.1", "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", @@ -21615,6 +22469,52 @@ "inBundle": true, "license": "MIT" }, + "node_modules/ganache/node_modules/big.js": { + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz", + "integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==", + "extraneous": true, + "engines": { + "node": "*" + } + }, + "node_modules/ganache/node_modules/binary-extensions": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", + "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", + "extraneous": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/ganache/node_modules/bn.js": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.2.1.tgz", + "integrity": "sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ==", + "extraneous": true + }, + "node_modules/ganache/node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "extraneous": true, + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/ganache/node_modules/braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "extraneous": true, + "dependencies": { + "fill-range": "^7.0.1" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/ganache/node_modules/brorand": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz", @@ -21622,6 +22522,94 @@ "inBundle": true, "license": "MIT" }, + "node_modules/ganache/node_modules/browser-stdout": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.1.tgz", + "integrity": "sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==", + "extraneous": true + }, + "node_modules/ganache/node_modules/browserify-aes": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/browserify-aes/-/browserify-aes-1.2.0.tgz", + "integrity": "sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==", + "extraneous": true, + "dependencies": { + "buffer-xor": "^1.0.3", + "cipher-base": "^1.0.0", + "create-hash": "^1.1.0", + "evp_bytestokey": "^1.0.3", + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" + } + }, + "node_modules/ganache/node_modules/browserify-cipher": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/browserify-cipher/-/browserify-cipher-1.0.1.tgz", + "integrity": "sha512-sPhkz0ARKbf4rRQt2hTpAHqn47X3llLkUGn+xEJzLjwY8LRs2p0v7ljvI5EyoRO/mexrNunNECisZs+gw2zz1w==", + "extraneous": true, + "dependencies": { + "browserify-aes": "^1.0.4", + "browserify-des": "^1.0.0", + "evp_bytestokey": "^1.0.0" + } + }, + "node_modules/ganache/node_modules/browserify-des": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/browserify-des/-/browserify-des-1.0.2.tgz", + "integrity": "sha512-BioO1xf3hFwz4kc6iBhI3ieDFompMhrMlnDFC4/0/vd5MokpuAc3R+LYbwTA9A5Yc9pq9UYPqffKpW2ObuwX5A==", + "extraneous": true, + "dependencies": { + "cipher-base": "^1.0.1", + "des.js": "^1.0.0", + "inherits": "^2.0.1", + "safe-buffer": "^5.1.2" + } + }, + "node_modules/ganache/node_modules/browserify-rsa": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/browserify-rsa/-/browserify-rsa-4.1.0.tgz", + "integrity": "sha512-AdEER0Hkspgno2aR97SAf6vi0y0k8NuOpGnVH3O99rcA5Q6sh8QxcngtHuJ6uXwnfAXNM4Gn1Gb7/MV1+Ymbog==", + "extraneous": true, + "dependencies": { + "bn.js": "^5.0.0", + "randombytes": "^2.0.1" + } + }, + "node_modules/ganache/node_modules/browserify-sign": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/browserify-sign/-/browserify-sign-4.2.1.tgz", + "integrity": "sha512-/vrA5fguVAKKAVTNJjgSm1tRQDHUU6DbwO9IROu/0WAzC8PKhucDSh18J0RMvVeHAn5puMd+QHC2erPRNf8lmg==", + "extraneous": true, + "dependencies": { + "bn.js": "^5.1.1", + "browserify-rsa": "^4.0.1", + "create-hash": "^1.2.0", + "create-hmac": "^1.1.7", + "elliptic": "^6.5.3", + "inherits": "^2.0.4", + "parse-asn1": "^5.1.5", + "readable-stream": "^3.6.0", + "safe-buffer": "^5.2.0" + } + }, + "node_modules/ganache/node_modules/browserslist": { + "version": "4.21.4", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.4.tgz", + "integrity": "sha512-CBHJJdDmgjl3daYjN5Cp5kbTf1mUhZoS+beLklHIvkOWscs83YAhLlF3Wsh/lciQYAcbBJgTOD44VtG31ZM4Hw==", + "extraneous": true, + "dependencies": { + "caniuse-lite": "^1.0.30001400", + "electron-to-chromium": "^1.4.251", + "node-releases": "^2.0.6", + "update-browserslist-db": "^1.0.9" + }, + "bin": { + "browserslist": "cli.js" + }, + "engines": { + "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" + } + }, "node_modules/ganache/node_modules/buffer": { "version": "6.0.3", "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz", @@ -21647,28 +22635,392 @@ "ieee754": "^1.2.1" } }, + "node_modules/ganache/node_modules/buffer-from": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", + "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", + "extraneous": true + }, + "node_modules/ganache/node_modules/buffer-xor": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/buffer-xor/-/buffer-xor-1.0.3.tgz", + "integrity": "sha512-571s0T7nZWK6vB67HI5dyUF7wXiNcfaPPPTl6zYCNApANjIvYJTg7hlud/+cJpdAhS7dVzqMLmfhfHR3rAcOjQ==", + "extraneous": true + }, "node_modules/ganache/node_modules/bufferutil": { "version": "4.0.5", "resolved": "https://registry.npmjs.org/bufferutil/-/bufferutil-4.0.5.tgz", "integrity": "sha512-HTm14iMQKK2FjFLRTM5lAVcyaUzOnqbPtesFIvREgXpJHdQm8bWS+GkQgIkfaBYRHuCnea7w8UVNfwiAQhlr9A==", + "hasInstallScript": true, "optional": true, "dependencies": { "node-gyp-build": "^4.3.0" + }, + "engines": { + "node": ">=6.14.2" + } + }, + "node_modules/ganache/node_modules/builtin-status-codes": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz", + "integrity": "sha512-HpGFw18DgFWlncDfjTa2rcQ4W88O1mC8e8yZ2AvQY5KDaktSTwo+KRf6nHK6FRI5FyRyb/5T6+TSxfP7QyGsmQ==", + "extraneous": true + }, + "node_modules/ganache/node_modules/call-bind": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", + "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", + "extraneous": true, + "dependencies": { + "function-bind": "^1.1.1", + "get-intrinsic": "^1.0.2" } }, + "node_modules/ganache/node_modules/camelcase": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", + "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", + "extraneous": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/ganache/node_modules/caniuse-lite": { + "version": "1.0.30001435", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001435.tgz", + "integrity": "sha512-kdCkUTjR+v4YAJelyiDTqiu82BDr4W4CP5sgTA0ZBmqn30XfS2ZghPLMowik9TPhS+psWJiUNxsqLyurDbmutA==", + "extraneous": true + }, "node_modules/ganache/node_modules/catering": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/catering/-/catering-2.1.0.tgz", - "integrity": "sha512-M5imwzQn6y+ODBfgi+cfgZv2hIUI6oYU/0f35Mdb1ujGeqeoI5tOnl9Q13DTH7LW+7er+NYq8stNOKZD/Z3U/A==", + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/catering/-/catering-2.1.1.tgz", + "integrity": "sha512-K7Qy8O9p76sL3/3m7/zLKbRkyOlSZAgzEaLhyj2mXS8PsCud2Eo4hAb8aLtZqHh0QGqLcb9dlJSu6lHRVENm1w==", "inBundle": true, "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/ganache/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "extraneous": true, "dependencies": { - "queue-tick": "^1.0.0" + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/ganache/node_modules/chalk/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "extraneous": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/ganache/node_modules/chokidar": { + "version": "3.5.2", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.2.tgz", + "integrity": "sha512-ekGhOnNVPgT77r4K/U3GDhu+FQ2S8TnK/s2KbIGXi0SZWuwkZ2QNyfWdZW+TVfn84DpEP7rLeCt2UI6bJ8GwbQ==", + "extraneous": true, + "dependencies": { + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "glob-parent": "~5.1.2", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.6.0" + }, + "engines": { + "node": ">= 8.10.0" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + } + }, + "node_modules/ganache/node_modules/chrome-trace-event": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.3.tgz", + "integrity": "sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg==", + "extraneous": true, + "engines": { + "node": ">=6.0" + } + }, + "node_modules/ganache/node_modules/cipher-base": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.4.tgz", + "integrity": "sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==", + "extraneous": true, + "dependencies": { + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" + } + }, + "node_modules/ganache/node_modules/cliui": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", + "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", + "extraneous": true, + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^7.0.0" + } + }, + "node_modules/ganache/node_modules/clone-deep": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-4.0.1.tgz", + "integrity": "sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==", + "extraneous": true, + "dependencies": { + "is-plain-object": "^2.0.4", + "kind-of": "^6.0.2", + "shallow-clone": "^3.0.0" }, "engines": { "node": ">=6" } }, + "node_modules/ganache/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "extraneous": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/ganache/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "extraneous": true + }, + "node_modules/ganache/node_modules/colorette": { + "version": "2.0.19", + "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.19.tgz", + "integrity": "sha512-3tlv/dIP7FWvj3BsbHrGLJ6l/oKh1O3TcgBqMn+yyCagOxc23fyzDS6HypQbgxWbkpDnf52p1LuR4eWDQ/K9WQ==", + "extraneous": true + }, + "node_modules/ganache/node_modules/colors": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/colors/-/colors-1.2.5.tgz", + "integrity": "sha512-erNRLao/Y3Fv54qUa0LBB+//Uf3YwMUmdJinN20yMXm9zdKKqH9wt7R9IIVZ+K7ShzfpLV/Zg8+VyrBJYB4lpg==", + "extraneous": true, + "engines": { + "node": ">=0.1.90" + } + }, + "node_modules/ganache/node_modules/commander": { + "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", + "extraneous": true + }, + "node_modules/ganache/node_modules/concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", + "extraneous": true + }, + "node_modules/ganache/node_modules/create-ecdh": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/create-ecdh/-/create-ecdh-4.0.4.tgz", + "integrity": "sha512-mf+TCx8wWc9VpuxfP2ht0iSISLZnt0JgWlrOKZiNqyUZWnjIaCIVNQArMHnCZKfEYRg6IM7A+NeJoN8gf/Ws0A==", + "extraneous": true, + "dependencies": { + "bn.js": "^4.1.0", + "elliptic": "^6.5.3" + } + }, + "node_modules/ganache/node_modules/create-ecdh/node_modules/bn.js": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", + "extraneous": true + }, + "node_modules/ganache/node_modules/create-hash": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/create-hash/-/create-hash-1.2.0.tgz", + "integrity": "sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==", + "extraneous": true, + "dependencies": { + "cipher-base": "^1.0.1", + "inherits": "^2.0.1", + "md5.js": "^1.3.4", + "ripemd160": "^2.0.1", + "sha.js": "^2.4.0" + } + }, + "node_modules/ganache/node_modules/create-hmac": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/create-hmac/-/create-hmac-1.1.7.tgz", + "integrity": "sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==", + "extraneous": true, + "dependencies": { + "cipher-base": "^1.0.3", + "create-hash": "^1.1.0", + "inherits": "^2.0.1", + "ripemd160": "^2.0.0", + "safe-buffer": "^5.0.1", + "sha.js": "^2.4.8" + } + }, + "node_modules/ganache/node_modules/create-require": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz", + "integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==", + "extraneous": true + }, + "node_modules/ganache/node_modules/cross-env": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-env/-/cross-env-7.0.3.tgz", + "integrity": "sha512-+/HKd6EgcQCJGh2PSjZuUitQBQynKor4wrFbRg4DtAgS1aWO+gU52xpH7M9ScGgXSYmAVS9bIJ8EzuaGw0oNAw==", + "extraneous": true, + "dependencies": { + "cross-spawn": "^7.0.1" + }, + "bin": { + "cross-env": "src/bin/cross-env.js", + "cross-env-shell": "src/bin/cross-env-shell.js" + }, + "engines": { + "node": ">=10.14", + "npm": ">=6", + "yarn": ">=1" + } + }, + "node_modules/ganache/node_modules/cross-spawn": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "extraneous": true, + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/ganache/node_modules/crypto-browserify": { + "version": "3.12.0", + "resolved": "https://registry.npmjs.org/crypto-browserify/-/crypto-browserify-3.12.0.tgz", + "integrity": "sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg==", + "extraneous": true, + "dependencies": { + "browserify-cipher": "^1.0.0", + "browserify-sign": "^4.0.0", + "create-ecdh": "^4.0.0", + "create-hash": "^1.1.0", + "create-hmac": "^1.1.0", + "diffie-hellman": "^5.0.0", + "inherits": "^2.0.1", + "pbkdf2": "^3.0.3", + "public-encrypt": "^4.0.0", + "randombytes": "^2.0.0", + "randomfill": "^1.0.3" + }, + "engines": { + "node": "*" + } + }, + "node_modules/ganache/node_modules/debug": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.2.tgz", + "integrity": "sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==", + "extraneous": true, + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + } + }, + "node_modules/ganache/node_modules/debug/node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "extraneous": true + }, + "node_modules/ganache/node_modules/decamelize": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-4.0.0.tgz", + "integrity": "sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ==", + "extraneous": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/ganache/node_modules/define-properties": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.4.tgz", + "integrity": "sha512-uckOqKcfaVvtBdsVkdPv3XjveQJsNQqmhXgRi8uhvWWuPYZCNlzT8qAyblUgNoXdHdjMTzAqeGjAoli8f+bzPA==", + "extraneous": true, + "dependencies": { + "has-property-descriptors": "^1.0.0", + "object-keys": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/ganache/node_modules/des.js": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/des.js/-/des.js-1.0.1.tgz", + "integrity": "sha512-Q0I4pfFrv2VPd34/vfLrFOoRmlYj3OV50i7fskps1jZWK1kApMWWT9G6RRUeYedLcBDIhnSDaUvJMb3AhUlaEA==", + "extraneous": true, + "dependencies": { + "inherits": "^2.0.1", + "minimalistic-assert": "^1.0.0" + } + }, + "node_modules/ganache/node_modules/diff": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/diff/-/diff-5.0.0.tgz", + "integrity": "sha512-/VTCrvm5Z0JGty/BWHljh+BAiw3IK+2j87NGMu8Nwc/f48WoDAC395uomO9ZD117ZOBaHmkX1oyLvkVM/aIT3w==", + "extraneous": true, + "engines": { + "node": ">=0.3.1" + } + }, + "node_modules/ganache/node_modules/diffie-hellman": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/diffie-hellman/-/diffie-hellman-5.0.3.tgz", + "integrity": "sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg==", + "extraneous": true, + "dependencies": { + "bn.js": "^4.1.0", + "miller-rabin": "^4.0.0", + "randombytes": "^2.0.0" + } + }, + "node_modules/ganache/node_modules/diffie-hellman/node_modules/bn.js": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", + "extraneous": true + }, + "node_modules/ganache/node_modules/electron-to-chromium": { + "version": "1.4.284", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.284.tgz", + "integrity": "sha512-M8WEXFuKXMYMVr45fo8mq0wUrrJHheiKZf6BArTKk9ZBYCKJEOU5H8cdWgDT+qCVZf7Na4lVUaZsA+h6uA9+PA==", + "extraneous": true + }, "node_modules/ganache/node_modules/elliptic": { "version": "6.5.4", "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.4.tgz", @@ -21695,480 +23047,316 @@ "node_modules/ganache/node_modules/emittery": { "version": "0.10.0", "resolved": "https://registry.npmjs.org/emittery/-/emittery-0.10.0.tgz", - "integrity": "sha512-AGvFfs+d0JKCJQ4o01ASQLGPmSCxgfU9RFXvzPvZdjKK8oscynksuJhWrSTSw7j7Ep/sZct5b5ZhYCi8S/t0HQ==" - }, - "node_modules/ganache/node_modules/hash.js": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.7.tgz", - "integrity": "sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==", - "inBundle": true, - "license": "MIT", - "dependencies": { - "inherits": "^2.0.3", - "minimalistic-assert": "^1.0.1" - } - }, - "node_modules/ganache/node_modules/hmac-drbg": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz", - "integrity": "sha1-0nRXAQJabHdabFRXk+1QL8DGSaE=", - "inBundle": true, - "license": "MIT", - "dependencies": { - "hash.js": "^1.0.3", - "minimalistic-assert": "^1.0.0", - "minimalistic-crypto-utils": "^1.0.1" + "integrity": "sha512-AGvFfs+d0JKCJQ4o01ASQLGPmSCxgfU9RFXvzPvZdjKK8oscynksuJhWrSTSw7j7Ep/sZct5b5ZhYCi8S/t0HQ==", + "engines": { + "node": ">=12" } }, - "node_modules/ganache/node_modules/ieee754": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", - "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "inBundle": true, - "license": "BSD-3-Clause" - }, - "node_modules/ganache/node_modules/inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", - "inBundle": true, - "license": "ISC" + "node_modules/ganache/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "extraneous": true }, - "node_modules/ganache/node_modules/is-buffer": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-2.0.5.tgz", - "integrity": "sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "inBundle": true, - "license": "MIT", + "node_modules/ganache/node_modules/emojis-list": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-3.0.0.tgz", + "integrity": "sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==", + "extraneous": true, "engines": { - "node": ">=4" + "node": ">= 4" } }, - "node_modules/ganache/node_modules/keccak": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/keccak/-/keccak-3.0.2.tgz", - "integrity": "sha512-PyKKjkH53wDMLGrvmRGSNWgmSxZOUqbnXwKL9tmgbFYA1iAYqW21kfR7mZXV0MlESiefxQQE9X9fTa3X+2MPDQ==", - "hasInstallScript": true, - "inBundle": true, - "license": "MIT", + "node_modules/ganache/node_modules/enhanced-resolve": { + "version": "5.12.0", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.12.0.tgz", + "integrity": "sha512-QHTXI/sZQmko1cbDoNAa3mJ5qhWUUNAq3vR0/YiD379fWQrcfuoX1+HW2S0MTt7XmoPLapdaDKUtelUSPic7hQ==", + "extraneous": true, "dependencies": { - "node-addon-api": "^2.0.0", - "node-gyp-build": "^4.2.0", - "readable-stream": "^3.6.0" + "graceful-fs": "^4.2.4", + "tapable": "^2.2.0" }, "engines": { - "node": ">=10.0.0" + "node": ">=10.13.0" } }, - "node_modules/ganache/node_modules/level-concat-iterator": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/level-concat-iterator/-/level-concat-iterator-3.1.0.tgz", - "integrity": "sha512-BWRCMHBxbIqPxJ8vHOvKUsaO0v1sLYZtjN3K2iZJsRBYtp+ONsY6Jfi6hy9K3+zolgQRryhIn2NRZjZnWJ9NmQ==", - "inBundle": true, - "license": "MIT", - "dependencies": { - "catering": "^2.1.0" + "node_modules/ganache/node_modules/envinfo": { + "version": "7.8.1", + "resolved": "https://registry.npmjs.org/envinfo/-/envinfo-7.8.1.tgz", + "integrity": "sha512-/o+BXHmB7ocbHEAs6F2EnG0ogybVVUdkRunTT2glZU9XAaGmhqskrvKwqXuDfNjEO0LZKWdejEEpnq8aM0tOaw==", + "extraneous": true, + "bin": { + "envinfo": "dist/cli.js" }, "engines": { - "node": ">=10" + "node": ">=4" } }, - "node_modules/ganache/node_modules/level-supports": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/level-supports/-/level-supports-2.1.0.tgz", - "integrity": "sha512-E486g1NCjW5cF78KGPrMDRBYzPuueMZ6VBXHT6gC7A8UYWGiM14fGgp+s/L1oFfDWSPV/+SFkYCmZ0SiESkRKA==", - "inBundle": true, - "license": "MIT", + "node_modules/ganache/node_modules/es-module-lexer": { + "version": "0.9.3", + "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-0.9.3.tgz", + "integrity": "sha512-1HQ2M2sPtxwnvOvT1ZClHyQDiggdNjURWpY2we6aMKCQiUVxTmVs2UYPLIrD84sS+kMdUwfBSylbJPwNnBrnHQ==", + "extraneous": true + }, + "node_modules/ganache/node_modules/es6-object-assign": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/es6-object-assign/-/es6-object-assign-1.1.0.tgz", + "integrity": "sha512-MEl9uirslVwqQU369iHNWZXsI8yaZYGg/D65aOgZkeyFJwHYSxilf7rQzXKI7DdDuBPrBXbfk3sl9hJhmd5AUw==", + "extraneous": true + }, + "node_modules/ganache/node_modules/escalade": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", + "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", + "extraneous": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/ganache/node_modules/escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "extraneous": true, "engines": { "node": ">=10" } }, - "node_modules/ganache/node_modules/level-transcoder": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/level-transcoder/-/level-transcoder-1.0.1.tgz", - "integrity": "sha512-t7bFwFtsQeD8cl8NIoQ2iwxA0CL/9IFw7/9gAjOonH0PWTTiRfY7Hq+Ejbsxh86tXobDQ6IOiddjNYIfOBs06w==", + "node_modules/ganache/node_modules/eslint-scope": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", + "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", + "extraneous": true, "dependencies": { - "buffer": "^6.0.3", - "module-error": "^1.0.1" + "esrecurse": "^4.3.0", + "estraverse": "^4.1.1" + }, + "engines": { + "node": ">=8.0.0" } }, - "node_modules/ganache/node_modules/leveldown": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/leveldown/-/leveldown-6.1.0.tgz", - "integrity": "sha512-8C7oJDT44JXxh04aSSsfcMI8YiaGRhOFI9/pMEL7nWJLVsWajDPTRxsSHTM2WcTVY5nXM+SuRHzPPi0GbnDX+w==", - "hasInstallScript": true, - "inBundle": true, - "license": "MIT", + "node_modules/ganache/node_modules/esrecurse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", + "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", + "extraneous": true, "dependencies": { - "abstract-leveldown": "^7.2.0", - "napi-macros": "~2.0.0", - "node-gyp-build": "^4.3.0" + "estraverse": "^5.2.0" }, "engines": { - "node": ">=10.12.0" + "node": ">=4.0" } }, - "node_modules/ganache/node_modules/lodash": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" - }, - "node_modules/ganache/node_modules/minimalistic-assert": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", - "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==", - "inBundle": true, - "license": "ISC" - }, - "node_modules/ganache/node_modules/minimalistic-crypto-utils": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz", - "integrity": "sha1-9sAMHAsIIkblxNmd+4x8CDsrWCo=", - "inBundle": true, - "license": "MIT" - }, - "node_modules/ganache/node_modules/module-error": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/module-error/-/module-error-1.0.2.tgz", - "integrity": "sha512-0yuvsqSCv8LbaOKhnsQ/T5JhyFlCYLPXK3U2sgV10zoKQwzs/MyfuQUOZQ1V/6OCOJsK/TRgNVrPuPDqtdMFtA==" - }, - "node_modules/ganache/node_modules/napi-macros": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/napi-macros/-/napi-macros-2.0.0.tgz", - "integrity": "sha512-A0xLykHtARfueITVDernsAWdtIMbOJgKgcluwENp3AlsKN/PloyO10HtmoqnFAQAcxPkgZN7wdfPfEd0zNGxbg==", - "inBundle": true, - "license": "MIT" - }, - "node_modules/ganache/node_modules/node-addon-api": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-2.0.2.tgz", - "integrity": "sha512-Ntyt4AIXyaLIuMHF6IOoTakB3K+RWxwtsHNRxllEoA6vPwP9o4866g6YWDLUdnucilZhmkxiHwHr11gAENw+QA==", - "inBundle": true, - "license": "MIT" - }, - "node_modules/ganache/node_modules/node-gyp-build": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.3.0.tgz", - "integrity": "sha512-iWjXZvmboq0ja1pUGULQBexmxq8CV4xBhX7VDOTbL7ZR4FOowwY/VOtRxBN/yKxmdGoIp4j5ysNT4u3S2pDQ3Q==", - "inBundle": true, - "license": "MIT", - "bin": { - "node-gyp-build": "bin.js", - "node-gyp-build-optional": "optional.js", - "node-gyp-build-test": "build-test.js" + "node_modules/ganache/node_modules/esrecurse/node_modules/estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "extraneous": true, + "engines": { + "node": ">=4.0" } }, - "node_modules/ganache/node_modules/queue-microtask": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", - "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "inBundle": true, - "license": "MIT" - }, - "node_modules/ganache/node_modules/queue-tick": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/queue-tick/-/queue-tick-1.0.0.tgz", - "integrity": "sha512-ULWhjjE8BmiICGn3G8+1L9wFpERNxkf8ysxkAer4+TFdRefDaXOCV5m92aMB9FtBVmn/8sETXLXY6BfW7hyaWQ==", - "inBundle": true, - "license": "MIT" - }, - "node_modules/ganache/node_modules/readable-stream": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", - "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", - "inBundle": true, - "license": "MIT", - "dependencies": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - }, + "node_modules/ganache/node_modules/estraverse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", + "extraneous": true, "engines": { - "node": ">= 6" + "node": ">=4.0" } }, - "node_modules/ganache/node_modules/safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "inBundle": true, - "license": "MIT" - }, - "node_modules/ganache/node_modules/secp256k1": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/secp256k1/-/secp256k1-4.0.3.tgz", - "integrity": "sha512-NLZVf+ROMxwtEj3Xa562qgv2BK5e2WNmXPiOdVIPLgs6lyTzMvBq0aWTYMI5XCP9jZMVKOcqZLw/Wc4vDkuxhA==", - "hasInstallScript": true, - "inBundle": true, - "license": "MIT", - "dependencies": { - "elliptic": "^6.5.4", - "node-addon-api": "^2.0.0", - "node-gyp-build": "^4.2.0" - }, + "node_modules/ganache/node_modules/events": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", + "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", + "extraneous": true, "engines": { - "node": ">=10.0.0" + "node": ">=0.8.x" } }, - "node_modules/ganache/node_modules/string_decoder": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", - "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", - "inBundle": true, - "license": "MIT", + "node_modules/ganache/node_modules/evp_bytestokey": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz", + "integrity": "sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==", + "extraneous": true, "dependencies": { - "safe-buffer": "~5.2.0" + "md5.js": "^1.3.4", + "safe-buffer": "^5.1.1" } }, - "node_modules/ganache/node_modules/utf-8-validate": { - "version": "5.0.7", - "resolved": "https://registry.npmjs.org/utf-8-validate/-/utf-8-validate-5.0.7.tgz", - "integrity": "sha512-vLt1O5Pp+flcArHGIyKEQq883nBt8nN8tVBcoL0qUXj2XT1n7p70yGIq2VK98I5FdZ1YHc0wk/koOnHjnXWk1Q==", - "optional": true, - "dependencies": { - "node-gyp-build": "^4.3.0" + "node_modules/ganache/node_modules/execa": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", + "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", + "extraneous": true, + "dependencies": { + "cross-spawn": "^7.0.3", + "get-stream": "^6.0.0", + "human-signals": "^2.1.0", + "is-stream": "^2.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^4.0.1", + "onetime": "^5.1.2", + "signal-exit": "^3.0.3", + "strip-final-newline": "^2.0.0" + }, + "engines": { + "node": ">=10" } }, - "node_modules/ganache/node_modules/util-deprecate": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", - "inBundle": true, - "license": "MIT" - }, - "node_modules/ganache/node_modules/ws": { - "version": "8.2.3", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.2.3.tgz", - "integrity": "sha512-wBuoj1BDpC6ZQ1B7DWQBYVLphPWkm8i9Y0/3YdHjHKHiohOJ1ws+3OccDWtH+PoC9DZD5WOTrJvNbWvjS6JWaA==" + "node_modules/ganache/node_modules/fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", + "extraneous": true }, - "node_modules/gauge": { - "version": "2.7.4", - "resolved": "https://registry.npmjs.org/gauge/-/gauge-2.7.4.tgz", - "integrity": "sha512-14x4kjc6lkD3ltw589k0NrPD6cCNTD6CWoVUNpB85+DrtONoZn+Rug6xZU5RvSC4+TZPxA5AnBibQYAvZn41Hg==", - "optional": true, - "dependencies": { - "aproba": "^1.0.3", - "console-control-strings": "^1.0.0", - "has-unicode": "^2.0.0", - "object-assign": "^4.1.0", - "signal-exit": "^3.0.0", - "string-width": "^1.0.1", - "strip-ansi": "^3.0.1", - "wide-align": "^1.1.0" - } + "node_modules/ganache/node_modules/fast-json-stable-stringify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", + "extraneous": true }, - "node_modules/gauge/node_modules/ansi-regex": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA==", - "optional": true, + "node_modules/ganache/node_modules/fastest-levenshtein": { + "version": "1.0.16", + "resolved": "https://registry.npmjs.org/fastest-levenshtein/-/fastest-levenshtein-1.0.16.tgz", + "integrity": "sha512-eRnCtTTtGZFpQCwhJiUOuxPQWRXVKYDn0b2PeHfXL6/Zi53SLAzAHfVhVWK2AryC/WH05kGfxhFIPvTF0SXQzg==", + "extraneous": true, "engines": { - "node": ">=0.10.0" + "node": ">= 4.9.1" } }, - "node_modules/gauge/node_modules/is-fullwidth-code-point": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", - "integrity": "sha512-1pqUqRjkhPJ9miNq9SwMfdvi6lBJcd6eFxvfaivQhaH3SgisfiuudvFntdKOmxuee/77l+FPjKrQjWvmPjWrRw==", - "optional": true, + "node_modules/ganache/node_modules/fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "extraneous": true, "dependencies": { - "number-is-nan": "^1.0.0" + "to-regex-range": "^5.0.1" }, "engines": { - "node": ">=0.10.0" + "node": ">=8" } }, - "node_modules/gauge/node_modules/string-width": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", - "integrity": "sha512-0XsVpQLnVCXHJfyEs8tC0zpTVIr5PKKsQtkT29IwupnPTjtPmQ3xT/4yCREF9hYkV/3M3kzcUTSAZT6a6h81tw==", - "optional": true, + "node_modules/ganache/node_modules/find-up": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "extraneous": true, "dependencies": { - "code-point-at": "^1.0.0", - "is-fullwidth-code-point": "^1.0.0", - "strip-ansi": "^3.0.0" + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" }, "engines": { - "node": ">=0.10.0" + "node": ">=10" } }, - "node_modules/gauge/node_modules/strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha512-VhumSSbBqDTP8p2ZLKj40UjBCV4+v8bUSEpUb4KjRgWk9pbqGF4REFj6KEagidb2f/M6AzC0EmFyDNGaw9OCzg==", - "optional": true, + "node_modules/ganache/node_modules/flat": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz", + "integrity": "sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==", + "extraneous": true, + "bin": { + "flat": "cli.js" + } + }, + "node_modules/ganache/node_modules/for-each": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz", + "integrity": "sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==", + "extraneous": true, "dependencies": { - "ansi-regex": "^2.0.0" + "is-callable": "^1.1.3" + } + }, + "node_modules/ganache/node_modules/fs-extra": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-7.0.1.tgz", + "integrity": "sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==", + "extraneous": true, + "dependencies": { + "graceful-fs": "^4.1.2", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" }, "engines": { - "node": ">=0.10.0" + "node": ">=6 <7 || >=8" } }, - "node_modules/gensync": { - "version": "1.0.0-beta.2", - "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", - "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", - "peer": true, + "node_modules/ganache/node_modules/fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", + "extraneous": true + }, + "node_modules/ganache/node_modules/fsevents": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", + "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", + "extraneous": true, + "os": [ + "darwin" + ], "engines": { - "node": ">=6.9.0" + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" } }, - "node_modules/get-caller-file": { + "node_modules/ganache/node_modules/function-bind": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", + "extraneous": true + }, + "node_modules/ganache/node_modules/get-caller-file": { "version": "2.0.5", "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "extraneous": true, "engines": { "node": "6.* || 8.* || >= 10.*" } }, - "node_modules/get-func-name": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/get-func-name/-/get-func-name-2.0.0.tgz", - "integrity": "sha512-Hm0ixYtaSZ/V7C8FJrtZIuBBI+iSgL+1Aq82zSu8VQNB4S3Gk8e7Qs3VwBDJAhmRZcFqkl3tQu36g/Foh5I5ig==", - "engines": { - "node": "*" - } - }, - "node_modules/get-intrinsic": { + "node_modules/ganache/node_modules/get-intrinsic": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.3.tgz", "integrity": "sha512-QJVz1Tj7MS099PevUG5jvnt9tSkXN8K14dxQlikJuPt4uD9hHAHjLyLBiLR5zELelBdD9QNRAXZzsJx0WaDL9A==", + "extraneous": true, "dependencies": { "function-bind": "^1.1.1", "has": "^1.0.3", "has-symbols": "^1.0.3" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/get-port": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/get-port/-/get-port-3.2.0.tgz", - "integrity": "sha512-x5UJKlgeUiNT8nyo/AcnwLnZuZNcSjSw0kogRB+Whd1fjjFq4B1hySFxSFWWSn4mIBzg3sRNUDFYc4g5gjPoLg==", - "engines": { - "node": ">=4" } }, - "node_modules/get-stream": { + "node_modules/ganache/node_modules/get-stream": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", + "extraneous": true, "engines": { "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/get-symbol-description": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.0.tgz", - "integrity": "sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==", - "dependencies": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.1.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/getpass": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", - "integrity": "sha512-0fzj9JxOLfJ+XGLhR8ze3unN0KZCgZwiSSDz168VERjK8Wl8kVSdcu2kspd4s4wtAa1y/qrVRiAA0WclVsu0ng==", - "dependencies": { - "assert-plus": "^1.0.0" } }, - "node_modules/github-from-package": { - "version": "0.0.0", - "resolved": "https://registry.npmjs.org/github-from-package/-/github-from-package-0.0.0.tgz", - "integrity": "sha512-SyHy3T1v2NUXn29OsWdxmK6RwHD+vkj3v8en8AOBZ1wBQ/hCAQ5bAQTD02kW4W9tUp/3Qh6J8r9EvntiyCmOOw==", - "optional": true - }, - "node_modules/glob": { - "version": "8.0.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-8.0.3.tgz", - "integrity": "sha512-ull455NHSHI/Y1FqGaaYFaLGkNMMJbavMrEGFXG/PGrg6y7sutWHUHrz6gy6WEBH6akM1M414dWKCNs+IhKdiQ==", - "peer": true, + "node_modules/ganache/node_modules/glob": { + "version": "7.1.7", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.7.tgz", + "integrity": "sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ==", + "extraneous": true, "dependencies": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", "inherits": "2", - "minimatch": "^5.0.1", - "once": "^1.3.0" + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" }, "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" + "node": "*" } }, - "node_modules/glob-parent": { + "node_modules/ganache/node_modules/glob-parent": { "version": "5.1.2", "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "extraneous": true, "dependencies": { "is-glob": "^4.0.1" }, @@ -22176,928 +23364,1196 @@ "node": ">= 6" } }, - "node_modules/glob-promise": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/glob-promise/-/glob-promise-3.4.0.tgz", - "integrity": "sha512-q08RJ6O+eJn+dVanerAndJwIcumgbDdYiUT7zFQl3Wm1xD6fBKtah7H8ZJChj4wP+8C+QfeVy8xautR7rdmKEw==", + "node_modules/ganache/node_modules/glob-to-regexp": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz", + "integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==", + "extraneous": true + }, + "node_modules/ganache/node_modules/gopd": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", + "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", + "extraneous": true, "dependencies": { - "@types/glob": "*" - }, + "get-intrinsic": "^1.1.3" + } + }, + "node_modules/ganache/node_modules/graceful-fs": { + "version": "4.2.10", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz", + "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==", + "extraneous": true + }, + "node_modules/ganache/node_modules/growl": { + "version": "1.10.5", + "resolved": "https://registry.npmjs.org/growl/-/growl-1.10.5.tgz", + "integrity": "sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA==", + "extraneous": true, "engines": { - "node": ">=4" - }, - "peerDependencies": { - "glob": "*" + "node": ">=4.x" } }, - "node_modules/global": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/global/-/global-4.4.0.tgz", - "integrity": "sha512-wv/LAoHdRE3BeTGz53FAamhGlPLhlssK45usmGFThIi4XqnBmjKQ16u+RNbP7WvigRZDxUsM0J3gcQ5yicaL0w==", + "node_modules/ganache/node_modules/has": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", + "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "extraneous": true, "dependencies": { - "min-document": "^2.19.0", - "process": "^0.11.10" + "function-bind": "^1.1.1" + }, + "engines": { + "node": ">= 0.4.0" } }, - "node_modules/globals": { - "version": "11.12.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", - "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", - "peer": true, + "node_modules/ganache/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "extraneous": true, "engines": { - "node": ">=4" + "node": ">=8" } }, - "node_modules/got": { - "version": "12.1.0", - "resolved": "https://registry.npmjs.org/got/-/got-12.1.0.tgz", - "integrity": "sha512-hBv2ty9QN2RdbJJMK3hesmSkFTjVIHyIDDbssCKnSmq62edGgImJWD10Eb1k77TiV1bxloxqcFAVK8+9pkhOig==", + "node_modules/ganache/node_modules/has-property-descriptors": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz", + "integrity": "sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==", + "extraneous": true, "dependencies": { - "@sindresorhus/is": "^4.6.0", - "@szmarczak/http-timer": "^5.0.1", - "@types/cacheable-request": "^6.0.2", - "@types/responselike": "^1.0.0", - "cacheable-lookup": "^6.0.4", - "cacheable-request": "^7.0.2", - "decompress-response": "^6.0.0", - "form-data-encoder": "1.7.1", - "get-stream": "^6.0.1", - "http2-wrapper": "^2.1.10", - "lowercase-keys": "^3.0.0", - "p-cancelable": "^3.0.0", - "responselike": "^2.0.0" - }, + "get-intrinsic": "^1.1.1" + } + }, + "node_modules/ganache/node_modules/has-symbols": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", + "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", + "extraneous": true, "engines": { - "node": ">=14.16" - }, - "funding": { - "url": "https://github.com/sindresorhus/got?sponsor=1" + "node": ">= 0.4" } }, - "node_modules/got/node_modules/decompress-response": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-6.0.0.tgz", - "integrity": "sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==", + "node_modules/ganache/node_modules/has-tostringtag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz", + "integrity": "sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==", + "extraneous": true, "dependencies": { - "mimic-response": "^3.1.0" + "has-symbols": "^1.0.2" }, "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">= 0.4" } }, - "node_modules/got/node_modules/mimic-response": { + "node_modules/ganache/node_modules/hash-base": { "version": "3.1.0", - "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-3.1.0.tgz", - "integrity": "sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==", - "engines": { - "node": ">=10" + "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.1.0.tgz", + "integrity": "sha512-1nmYp/rhMDiE7AYkDw+lLwlAzz0AntGIe51F3RfFfEqyQ3feY2eI/NcwC6umIQVOASPMsWJLJScWKSSvzL9IVA==", + "extraneous": true, + "dependencies": { + "inherits": "^2.0.4", + "readable-stream": "^3.6.0", + "safe-buffer": "^5.2.0" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "engines": { + "node": ">=4" } }, - "node_modules/graceful-fs": { - "version": "4.2.10", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz", - "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==" + "node_modules/ganache/node_modules/hash.js": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.7.tgz", + "integrity": "sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==", + "inBundle": true, + "license": "MIT", + "dependencies": { + "inherits": "^2.0.3", + "minimalistic-assert": "^1.0.1" + } }, - "node_modules/graphql": { - "version": "15.8.0", - "resolved": "https://registry.npmjs.org/graphql/-/graphql-15.8.0.tgz", - "integrity": "sha512-5gghUc24tP9HRznNpV2+FIoq3xKkj5dTQqf4v0CpdPbFVwFkWoxOM+o+2OC9ZSvjEMTjfmG9QT+gcvggTwW1zw==", - "optional": true, - "engines": { - "node": ">= 10.x" + "node_modules/ganache/node_modules/he": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", + "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", + "extraneous": true, + "bin": { + "he": "bin/he" } }, - "node_modules/graphql-tag": { - "version": "2.12.6", - "resolved": "https://registry.npmjs.org/graphql-tag/-/graphql-tag-2.12.6.tgz", - "integrity": "sha512-FdSNcu2QQcWnM2VNvSCCDCVS5PpPqpzgFT8+GXzqJuoDd0CBncxCY278u4mhRO7tMgo2JjgJA5aZ+nWSQ/Z+xg==", - "optional": true, + "node_modules/ganache/node_modules/hmac-drbg": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz", + "integrity": "sha1-0nRXAQJabHdabFRXk+1QL8DGSaE=", + "inBundle": true, + "license": "MIT", "dependencies": { - "tslib": "^2.1.0" - }, - "engines": { - "node": ">=10" - }, - "peerDependencies": { - "graphql": "^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0" + "hash.js": "^1.0.3", + "minimalistic-assert": "^1.0.0", + "minimalistic-crypto-utils": "^1.0.1" } }, - "node_modules/growl": { - "version": "1.10.5", - "resolved": "https://registry.npmjs.org/growl/-/growl-1.10.5.tgz", - "integrity": "sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA==", + "node_modules/ganache/node_modules/https-browserify": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/https-browserify/-/https-browserify-1.0.0.tgz", + "integrity": "sha512-J+FkSdyD+0mA0N+81tMotaRMfSL9SGi+xpD3T6YApKsc3bGSXJlfXri3VyFOeYkfLRQisDk1W+jIFFKBeUBbBg==", + "extraneous": true + }, + "node_modules/ganache/node_modules/human-signals": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", + "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", + "extraneous": true, "engines": { - "node": ">=4.x" + "node": ">=10.17.0" } }, - "node_modules/har-schema": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz", - "integrity": "sha512-Oqluz6zhGX8cyRaTQlFMPw80bSJVG2x/cFb8ZPhUILGgHka9SsokCCOQgpveePerqidZOrT14ipqfJb7ILcW5Q==", + "node_modules/ganache/node_modules/ieee754": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", + "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "inBundle": true, + "license": "BSD-3-Clause" + }, + "node_modules/ganache/node_modules/import-lazy": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/import-lazy/-/import-lazy-4.0.0.tgz", + "integrity": "sha512-rKtvo6a868b5Hu3heneU+L4yEQ4jYKLtjpnPeUdK7h0yzXGmyBTypknlkCvHFBqfX9YlorEiMM6Dnq/5atfHkw==", + "extraneous": true, "engines": { - "node": ">=4" + "node": ">=8" } }, - "node_modules/har-validator": { - "version": "5.1.5", - "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.5.tgz", - "integrity": "sha512-nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w==", - "deprecated": "this library is no longer supported", + "node_modules/ganache/node_modules/import-local": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.1.0.tgz", + "integrity": "sha512-ASB07uLtnDs1o6EHjKpX34BKYDSqnFerfTOJL2HvMqF70LnxpjkzDB8J44oT9pu4AMPkQwf8jl6szgvNd2tRIg==", + "extraneous": true, "dependencies": { - "ajv": "^6.12.3", - "har-schema": "^2.0.0" + "pkg-dir": "^4.2.0", + "resolve-cwd": "^3.0.0" + }, + "bin": { + "import-local-fixture": "fixtures/cli.js" }, "engines": { - "node": ">=6" + "node": ">=8" } }, - "node_modules/hardhat": { - "version": "2.14.0", - "resolved": "https://registry.npmjs.org/hardhat/-/hardhat-2.14.0.tgz", - "integrity": "sha512-73jsInY4zZahMSVFurSK+5TNCJTXMv+vemvGia0Ac34Mm19fYp6vEPVGF3sucbumszsYxiTT2TbS8Ii2dsDSoQ==", + "node_modules/ganache/node_modules/inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", + "extraneous": true, "dependencies": { - "@ethersproject/abi": "^5.1.2", - "@metamask/eth-sig-util": "^4.0.0", - "@nomicfoundation/ethereumjs-block": "5.0.1", - "@nomicfoundation/ethereumjs-blockchain": "7.0.1", - "@nomicfoundation/ethereumjs-common": "4.0.1", - "@nomicfoundation/ethereumjs-evm": "2.0.1", - "@nomicfoundation/ethereumjs-rlp": "5.0.1", - "@nomicfoundation/ethereumjs-statemanager": "2.0.1", - "@nomicfoundation/ethereumjs-trie": "6.0.1", - "@nomicfoundation/ethereumjs-tx": "5.0.1", - "@nomicfoundation/ethereumjs-util": "9.0.1", - "@nomicfoundation/ethereumjs-vm": "7.0.1", - "@nomicfoundation/solidity-analyzer": "^0.1.0", - "@sentry/node": "^5.18.1", - "@types/bn.js": "^5.1.0", - "@types/lru-cache": "^5.1.0", - "abort-controller": "^3.0.0", - "adm-zip": "^0.4.16", - "aggregate-error": "^3.0.0", - "ansi-escapes": "^4.3.0", - "chalk": "^2.4.2", - "chokidar": "^3.4.0", - "ci-info": "^2.0.0", - "debug": "^4.1.1", - "enquirer": "^2.3.0", - "env-paths": "^2.2.0", - "ethereum-cryptography": "^1.0.3", - "ethereumjs-abi": "^0.6.8", - "find-up": "^2.1.0", - "fp-ts": "1.19.3", - "fs-extra": "^7.0.1", - "glob": "7.2.0", - "immutable": "^4.0.0-rc.12", - "io-ts": "1.10.4", - "keccak": "^3.0.2", - "lodash": "^4.17.11", - "mnemonist": "^0.38.0", - "mocha": "^10.0.0", - "p-map": "^4.0.0", - "qs": "^6.7.0", - "raw-body": "^2.4.1", - "resolve": "1.17.0", - "semver": "^6.3.0", - "solc": "0.7.3", - "source-map-support": "^0.5.13", - "stacktrace-parser": "^0.1.10", - "tsort": "0.0.1", - "undici": "^5.14.0", - "uuid": "^8.3.2", - "ws": "^7.4.6" - }, - "bin": { - "hardhat": "internal/cli/bootstrap.js" - }, + "once": "^1.3.0", + "wrappy": "1" + } + }, + "node_modules/ganache/node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "inBundle": true, + "license": "ISC" + }, + "node_modules/ganache/node_modules/interpret": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.4.0.tgz", + "integrity": "sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA==", + "extraneous": true, "engines": { - "node": ">=14.0.0" - }, - "peerDependencies": { - "ts-node": "*", - "typescript": "*" - }, - "peerDependenciesMeta": { - "ts-node": { - "optional": true - }, - "typescript": { - "optional": true - } + "node": ">= 0.10" } }, - "node_modules/hardhat-contract-sizer": { - "version": "2.8.0", - "resolved": "https://registry.npmjs.org/hardhat-contract-sizer/-/hardhat-contract-sizer-2.8.0.tgz", - "integrity": "sha512-jXt2Si3uIDx5z99J+gvKa0yvIw156pE4dpH9X/PvTQv652BUd+qGj7WT93PXnHXGh5qhQLkjDYeZMYNOThfjFg==", + "node_modules/ganache/node_modules/is-arguments": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.1.1.tgz", + "integrity": "sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==", + "extraneous": true, "dependencies": { - "chalk": "^4.0.0", - "cli-table3": "^0.6.0", - "strip-ansi": "^6.0.0" + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" }, - "peerDependencies": { - "hardhat": "^2.0.0" - } - }, - "node_modules/hardhat-contract-sizer/node_modules/ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", "engines": { - "node": ">=8" + "node": ">= 0.4" } }, - "node_modules/hardhat-contract-sizer/node_modules/strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "node_modules/ganache/node_modules/is-binary-path": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "extraneous": true, "dependencies": { - "ansi-regex": "^5.0.1" + "binary-extensions": "^2.0.0" }, "engines": { "node": ">=8" } }, - "node_modules/hardhat-deploy": { - "version": "0.11.29", - "resolved": "https://registry.npmjs.org/hardhat-deploy/-/hardhat-deploy-0.11.29.tgz", - "integrity": "sha512-9F+MRFkEocelzB8d+SDDCcTL7edBYAj2S63ldknvfIIBSajeB6q1/jm+dlK1GjcWzAzw7EVoxtjJXzxAxZfZcg==", - "dev": true, + "node_modules/ganache/node_modules/is-buffer": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-2.0.5.tgz", + "integrity": "sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "inBundle": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/ganache/node_modules/is-callable": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz", + "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==", + "extraneous": true, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/ganache/node_modules/is-core-module": { + "version": "2.11.0", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.11.0.tgz", + "integrity": "sha512-RRjxlvLDkD1YJwDbroBHMb+cukurkDWNyHx7D3oNB5x9rb5ogcksMC5wHCadcXoo67gVr/+3GFySh3134zi6rw==", + "extraneous": true, "dependencies": { - "@ethersproject/abi": "^5.7.0", - "@ethersproject/abstract-signer": "^5.7.0", - "@ethersproject/address": "^5.7.0", - "@ethersproject/bignumber": "^5.7.0", - "@ethersproject/bytes": "^5.7.0", - "@ethersproject/constants": "^5.7.0", - "@ethersproject/contracts": "^5.7.0", - "@ethersproject/providers": "^5.7.2", - "@ethersproject/solidity": "^5.7.0", - "@ethersproject/transactions": "^5.7.0", - "@ethersproject/wallet": "^5.7.0", - "@types/qs": "^6.9.7", - "axios": "^0.21.1", - "chalk": "^4.1.2", - "chokidar": "^3.5.2", - "debug": "^4.3.2", - "enquirer": "^2.3.6", - "ethers": "^5.5.3", - "form-data": "^4.0.0", - "fs-extra": "^10.0.0", - "match-all": "^1.2.6", - "murmur-128": "^0.2.1", - "qs": "^6.9.4", - "zksync-web3": "^0.14.3" + "has": "^1.0.3" } }, - "node_modules/hardhat-deploy/node_modules/form-data": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz", - "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==", - "dev": true, + "node_modules/ganache/node_modules/is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "extraneous": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ganache/node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "extraneous": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/ganache/node_modules/is-generator-function": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.0.10.tgz", + "integrity": "sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A==", + "extraneous": true, "dependencies": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.8", - "mime-types": "^2.1.12" + "has-tostringtag": "^1.0.0" }, "engines": { - "node": ">= 6" + "node": ">= 0.4" } }, - "node_modules/hardhat-deploy/node_modules/fs-extra": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz", - "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==", - "dev": true, + "node_modules/ganache/node_modules/is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "extraneous": true, "dependencies": { - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" + "is-extglob": "^2.1.1" }, "engines": { - "node": ">=12" + "node": ">=0.10.0" } }, - "node_modules/hardhat-gas-reporter": { - "version": "1.0.9", - "resolved": "https://registry.npmjs.org/hardhat-gas-reporter/-/hardhat-gas-reporter-1.0.9.tgz", - "integrity": "sha512-INN26G3EW43adGKBNzYWOlI3+rlLnasXTwW79YNnUhXPDa+yHESgt639dJEs37gCjhkbNKcRRJnomXEuMFBXJg==", + "node_modules/ganache/node_modules/is-nan": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/is-nan/-/is-nan-1.3.2.tgz", + "integrity": "sha512-E+zBKpQ2t6MEo1VsonYmluk9NxGrbzpeeLC2xIViuO2EjU2xsXsBPwTr3Ykv9l08UYEVEdWeRZNouaZqF6RN0w==", + "extraneous": true, "dependencies": { - "array-uniq": "1.0.3", - "eth-gas-reporter": "^0.2.25", - "sha1": "^1.1.1" + "call-bind": "^1.0.0", + "define-properties": "^1.1.3" }, - "peerDependencies": { - "hardhat": "^2.0.2" + "engines": { + "node": ">= 0.4" } }, - "node_modules/hardhat-spdx-license-identifier": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/hardhat-spdx-license-identifier/-/hardhat-spdx-license-identifier-2.1.0.tgz", - "integrity": "sha512-Z3Avr/v6lfDfa7qkriF/h40X8wmuy8qZfS4HgbINkDdmCiKAxQUi5Y5TgsJBZFYN1MvYzLTIbD/fo1dxZ4gsng==", - "peerDependencies": { - "hardhat": "^2.0.0" + "node_modules/ganache/node_modules/is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "extraneous": true, + "engines": { + "node": ">=0.12.0" } }, - "node_modules/hardhat-watcher": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/hardhat-watcher/-/hardhat-watcher-2.5.0.tgz", - "integrity": "sha512-Su2qcSMIo2YO2PrmJ0/tdkf+6pSt8zf9+4URR5edMVti6+ShI8T3xhPrwugdyTOFuyj8lKHrcTZNKUFYowYiyA==", - "dependencies": { - "chokidar": "^3.5.3" - }, - "peerDependencies": { - "hardhat": "^2.0.0" + "node_modules/ganache/node_modules/is-plain-obj": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz", + "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==", + "extraneous": true, + "engines": { + "node": ">=8" } }, - "node_modules/hardhat/node_modules/ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "node_modules/ganache/node_modules/is-plain-object": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", + "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", + "extraneous": true, "dependencies": { - "color-convert": "^1.9.0" + "isobject": "^3.0.1" }, "engines": { - "node": ">=4" + "node": ">=0.10.0" } }, - "node_modules/hardhat/node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" + "node_modules/ganache/node_modules/is-stream": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", + "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", + "extraneous": true, + "engines": { + "node": ">=8" } }, - "node_modules/hardhat/node_modules/chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "node_modules/ganache/node_modules/is-typed-array": { + "version": "1.1.10", + "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.10.tgz", + "integrity": "sha512-PJqgEHiWZvMpaFZ3uTc8kHPM4+4ADTlDniuQL7cU/UDA0Ql7F70yGfHph3cLNe+c9toaigv+DFzTJKhc2CtO6A==", + "extraneous": true, "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" + "available-typed-arrays": "^1.0.5", + "call-bind": "^1.0.2", + "for-each": "^0.3.3", + "gopd": "^1.0.1", + "has-tostringtag": "^1.0.0" }, "engines": { - "node": ">=4" + "node": ">= 0.4" } }, - "node_modules/hardhat/node_modules/color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dependencies": { - "color-name": "1.1.3" + "node_modules/ganache/node_modules/is-unicode-supported": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", + "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==", + "extraneous": true, + "engines": { + "node": ">=10" } }, - "node_modules/hardhat/node_modules/color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==" - }, - "node_modules/hardhat/node_modules/commander": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/commander/-/commander-3.0.2.tgz", - "integrity": "sha512-Gar0ASD4BDyKC4hl4DwHqDrmvjoxWKZigVnAbn5H1owvm4CxCPdb0HQDehwNYMJpla5+M2tPmPARzhtYuwpHow==" + "node_modules/ganache/node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "extraneous": true }, - "node_modules/hardhat/node_modules/escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "node_modules/ganache/node_modules/isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==", + "extraneous": true, "engines": { - "node": ">=0.8.0" + "node": ">=0.10.0" } }, - "node_modules/hardhat/node_modules/find-up": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", - "integrity": "sha512-NWzkk0jSJtTt08+FBFMvXoeZnOJD+jTtsRmBYbAIzJdX6l7dLgR7CTubCM5/eDdPUBvLCeVasP1brfVR/9/EZQ==", + "node_modules/ganache/node_modules/jest-worker": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.5.1.tgz", + "integrity": "sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==", + "extraneous": true, "dependencies": { - "locate-path": "^2.0.0" + "@types/node": "*", + "merge-stream": "^2.0.0", + "supports-color": "^8.0.0" }, "engines": { - "node": ">=4" + "node": ">= 10.13.0" } }, - "node_modules/hardhat/node_modules/fs-extra": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-7.0.1.tgz", - "integrity": "sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==", - "dependencies": { - "graceful-fs": "^4.1.2", - "jsonfile": "^4.0.0", - "universalify": "^0.1.0" - }, - "engines": { - "node": ">=6 <7 || >=8" - } + "node_modules/ganache/node_modules/jju": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/jju/-/jju-1.4.0.tgz", + "integrity": "sha512-8wb9Yw966OSxApiCt0K3yNJL8pnNeIv+OEq2YMidz4FKP6nonSRoOXc80iXY4JaN2FC11B9qsNmDsm+ZOfMROA==", + "extraneous": true }, - "node_modules/hardhat/node_modules/glob": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz", - "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==", + "node_modules/ganache/node_modules/js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "extraneous": true, "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "engines": { - "node": "*" + "argparse": "^2.0.1" }, - "funding": { - "url": "https://github.com/sponsors/isaacs" + "bin": { + "js-yaml": "bin/js-yaml.js" } }, - "node_modules/hardhat/node_modules/has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "node_modules/ganache/node_modules/js-yaml/node_modules/argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "extraneous": true + }, + "node_modules/ganache/node_modules/json-parse-better-errors": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz", + "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==", + "extraneous": true + }, + "node_modules/ganache/node_modules/json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "extraneous": true + }, + "node_modules/ganache/node_modules/json5": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.1.tgz", + "integrity": "sha512-1hqLFMSrGHRHxav9q9gNjJ5EXznIxGVO09xQRrwplcS8qs28pZ8s8hupZAmqDwZUmVZ2Qb2jnyPOWcDH8m8dlA==", + "extraneous": true, + "bin": { + "json5": "lib/cli.js" + }, "engines": { - "node": ">=4" + "node": ">=6" } }, - "node_modules/hardhat/node_modules/jsonfile": { + "node_modules/ganache/node_modules/jsonfile": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", "integrity": "sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==", - "optionalDependencies": { + "extraneous": true, + "dependencies": { "graceful-fs": "^4.1.6" } }, - "node_modules/hardhat/node_modules/locate-path": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", - "integrity": "sha512-NCI2kiDkyR7VeEKm27Kda/iQHyKJe1Bu0FlTbYp3CqJu+9IFe9bLyAjMxf5ZDDbEg+iMPzB5zYyUTSm8wVTKmA==", + "node_modules/ganache/node_modules/keccak": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/keccak/-/keccak-3.0.2.tgz", + "integrity": "sha512-PyKKjkH53wDMLGrvmRGSNWgmSxZOUqbnXwKL9tmgbFYA1iAYqW21kfR7mZXV0MlESiefxQQE9X9fTa3X+2MPDQ==", + "hasInstallScript": true, + "inBundle": true, + "license": "MIT", "dependencies": { - "p-locate": "^2.0.0", - "path-exists": "^3.0.0" + "node-addon-api": "^2.0.0", + "node-gyp-build": "^4.2.0", + "readable-stream": "^3.6.0" }, "engines": { - "node": ">=4" + "node": ">=10.0.0" } }, - "node_modules/hardhat/node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dependencies": { - "brace-expansion": "^1.1.7" - }, + "node_modules/ganache/node_modules/kind-of": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", + "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", + "extraneous": true, "engines": { - "node": "*" + "node": ">=0.10.0" } }, - "node_modules/hardhat/node_modules/p-limit": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz", - "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==", + "node_modules/ganache/node_modules/level-concat-iterator": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/level-concat-iterator/-/level-concat-iterator-3.1.0.tgz", + "integrity": "sha512-BWRCMHBxbIqPxJ8vHOvKUsaO0v1sLYZtjN3K2iZJsRBYtp+ONsY6Jfi6hy9K3+zolgQRryhIn2NRZjZnWJ9NmQ==", + "inBundle": true, + "license": "MIT", "dependencies": { - "p-try": "^1.0.0" + "catering": "^2.1.0" }, "engines": { - "node": ">=4" + "node": ">=10" } }, - "node_modules/hardhat/node_modules/p-locate": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz", - "integrity": "sha512-nQja7m7gSKuewoVRen45CtVfODR3crN3goVQ0DDZ9N3yHxgpkuBhZqsaiotSQRrADUrne346peY7kT3TSACykg==", + "node_modules/ganache/node_modules/level-js": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/level-js/-/level-js-6.1.0.tgz", + "integrity": "sha512-i7mPtkZm68aewfv0FnIUWvFUFfoyzIvVKnUmuQGrelEkP72vSPTaA1SGneWWoCV5KZJG4wlzbJLp1WxVNGuc6A==", + "extraneous": true, "dependencies": { - "p-limit": "^1.1.0" - }, + "abstract-leveldown": "^7.2.0", + "buffer": "^6.0.3", + "inherits": "^2.0.3", + "ltgt": "^2.1.2", + "run-parallel-limit": "^1.1.0" + } + }, + "node_modules/ganache/node_modules/level-supports": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/level-supports/-/level-supports-2.1.0.tgz", + "integrity": "sha512-E486g1NCjW5cF78KGPrMDRBYzPuueMZ6VBXHT6gC7A8UYWGiM14fGgp+s/L1oFfDWSPV/+SFkYCmZ0SiESkRKA==", + "inBundle": true, + "license": "MIT", "engines": { - "node": ">=4" + "node": ">=10" } }, - "node_modules/hardhat/node_modules/p-try": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz", - "integrity": "sha512-U1etNYuMJoIz3ZXSrrySFjsXQTWOx2/jdi86L+2pRvph/qMKL6sbcCYdH23fqsbm8TH2Gn0OybpT4eSFlCVHww==", + "node_modules/ganache/node_modules/level-transcoder": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/level-transcoder/-/level-transcoder-1.0.1.tgz", + "integrity": "sha512-t7bFwFtsQeD8cl8NIoQ2iwxA0CL/9IFw7/9gAjOonH0PWTTiRfY7Hq+Ejbsxh86tXobDQ6IOiddjNYIfOBs06w==", + "dependencies": { + "buffer": "^6.0.3", + "module-error": "^1.0.1" + }, "engines": { - "node": ">=4" + "node": ">=12" } }, - "node_modules/hardhat/node_modules/path-exists": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", - "integrity": "sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==", + "node_modules/ganache/node_modules/leveldown": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/leveldown/-/leveldown-6.1.0.tgz", + "integrity": "sha512-8C7oJDT44JXxh04aSSsfcMI8YiaGRhOFI9/pMEL7nWJLVsWajDPTRxsSHTM2WcTVY5nXM+SuRHzPPi0GbnDX+w==", + "hasInstallScript": true, + "inBundle": true, + "license": "MIT", + "dependencies": { + "abstract-leveldown": "^7.2.0", + "napi-macros": "~2.0.0", + "node-gyp-build": "^4.3.0" + }, "engines": { - "node": ">=4" + "node": ">=10.12.0" } }, - "node_modules/hardhat/node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "bin": { - "semver": "bin/semver.js" + "node_modules/ganache/node_modules/loader-runner": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-4.3.0.tgz", + "integrity": "sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg==", + "extraneous": true, + "engines": { + "node": ">=6.11.5" } }, - "node_modules/hardhat/node_modules/solc": { - "version": "0.7.3", - "resolved": "https://registry.npmjs.org/solc/-/solc-0.7.3.tgz", - "integrity": "sha512-GAsWNAjGzIDg7VxzP6mPjdurby3IkGCjQcM8GFYZT6RyaoUZKmMU6Y7YwG+tFGhv7dwZ8rmR4iwFDrrD99JwqA==", + "node_modules/ganache/node_modules/loader-utils": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.4.tgz", + "integrity": "sha512-xXqpXoINfFhgua9xiqD8fPFHgkoq1mmmpE92WlDbm9rNRd/EbRb+Gqf908T2DMfuHjjJlksiK2RbHVOdD/MqSw==", + "extraneous": true, "dependencies": { - "command-exists": "^1.2.8", - "commander": "3.0.2", - "follow-redirects": "^1.12.1", - "fs-extra": "^0.30.0", - "js-sha3": "0.8.0", - "memorystream": "^0.3.1", - "require-from-string": "^2.0.0", - "semver": "^5.5.0", - "tmp": "0.0.33" - }, - "bin": { - "solcjs": "solcjs" + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^2.1.2" }, "engines": { - "node": ">=8.0.0" + "node": ">=8.9.0" } }, - "node_modules/hardhat/node_modules/solc/node_modules/fs-extra": { - "version": "0.30.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-0.30.0.tgz", - "integrity": "sha512-UvSPKyhMn6LEd/WpUaV9C9t3zATuqoqfWc3QdPhPLb58prN9tqYPlPWi8Krxi44loBoUzlobqZ3+8tGpxxSzwA==", + "node_modules/ganache/node_modules/locate-path": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", + "extraneous": true, "dependencies": { - "graceful-fs": "^4.1.2", - "jsonfile": "^2.1.0", - "klaw": "^1.0.0", - "path-is-absolute": "^1.0.0", - "rimraf": "^2.2.8" + "p-locate": "^5.0.0" + }, + "engines": { + "node": ">=10" } }, - "node_modules/hardhat/node_modules/solc/node_modules/jsonfile": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-2.4.0.tgz", - "integrity": "sha512-PKllAqbgLgxHaj8TElYymKCAgrASebJrWpTnEkOaTowt23VKXXN0sUeriJ+eh7y6ufb/CC5ap11pz71/cM0hUw==", - "optionalDependencies": { - "graceful-fs": "^4.1.6" - } + "node_modules/ganache/node_modules/lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" }, - "node_modules/hardhat/node_modules/solc/node_modules/semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "bin": { - "semver": "bin/semver" - } + "node_modules/ganache/node_modules/lodash.get": { + "version": "4.4.2", + "resolved": "https://registry.npmjs.org/lodash.get/-/lodash.get-4.4.2.tgz", + "integrity": "sha512-z+Uw/vLuy6gQe8cfaFWD7p0wVv8fJl3mbzXh33RS+0oW2wvUqiRXiQ69gLWSLpgB5/6sU+r6BlQR0MBILadqTQ==", + "extraneous": true }, - "node_modules/hardhat/node_modules/supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "node_modules/ganache/node_modules/lodash.isequal": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.isequal/-/lodash.isequal-4.5.0.tgz", + "integrity": "sha512-pDo3lu8Jhfjqls6GkMgpahsF9kCyayhgykjyLMNFTKWrpVdAQtYyB4muAMWozBB4ig/dtWAmsMxLEI8wuz+DYQ==", + "extraneous": true + }, + "node_modules/ganache/node_modules/log-symbols": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", + "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", + "extraneous": true, "dependencies": { - "has-flag": "^3.0.0" + "chalk": "^4.1.0", + "is-unicode-supported": "^0.1.0" }, "engines": { - "node": ">=4" + "node": ">=10" } }, - "node_modules/hardhat/node_modules/universalify": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", - "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", + "node_modules/ganache/node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "extraneous": true, + "dependencies": { + "yallist": "^4.0.0" + }, "engines": { - "node": ">= 4.0.0" + "node": ">=10" } }, - "node_modules/hardhat/node_modules/ws": { - "version": "7.5.9", - "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.9.tgz", - "integrity": "sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q==", + "node_modules/ganache/node_modules/ltgt": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ltgt/-/ltgt-2.2.1.tgz", + "integrity": "sha512-AI2r85+4MquTw9ZYqabu4nMwy9Oftlfa/e/52t9IjtfG+mGBbTNdAoZ3RQKLHR6r0wQnwZnPIEh/Ya6XTWAKNA==", + "extraneous": true + }, + "node_modules/ganache/node_modules/make-error": { + "version": "1.3.6", + "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", + "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==", + "extraneous": true + }, + "node_modules/ganache/node_modules/mcl-wasm": { + "version": "0.9.0", + "resolved": "https://registry.npmjs.org/mcl-wasm/-/mcl-wasm-0.9.0.tgz", + "integrity": "sha512-rvU7L/68ZrDk4dpPZteiEqvK9nB/1XbbHmuLK6qIvc4xuuJb/iv1p5X3KEyq6AYatLnc+zbdSlLXTlKgTnCRZQ==", + "extraneous": true, "engines": { - "node": ">=8.3.0" - }, - "peerDependencies": { - "bufferutil": "^4.0.1", - "utf-8-validate": "^5.0.2" - }, - "peerDependenciesMeta": { - "bufferutil": { - "optional": true - }, - "utf-8-validate": { - "optional": true - } + "node": ">=8.9.0" } }, - "node_modules/has": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", - "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "node_modules/ganache/node_modules/md5.js": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/md5.js/-/md5.js-1.3.5.tgz", + "integrity": "sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==", + "extraneous": true, "dependencies": { - "function-bind": "^1.1.1" + "hash-base": "^3.0.0", + "inherits": "^2.0.1", + "safe-buffer": "^5.1.2" + } + }, + "node_modules/ganache/node_modules/merge-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", + "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", + "extraneous": true + }, + "node_modules/ganache/node_modules/micromatch": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", + "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", + "extraneous": true, + "dependencies": { + "braces": "^3.0.2", + "picomatch": "^2.3.1" }, "engines": { - "node": ">= 0.4.0" + "node": ">=8.6" } }, - "node_modules/has-bigints": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.2.tgz", - "integrity": "sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==", - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node_modules/ganache/node_modules/miller-rabin": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/miller-rabin/-/miller-rabin-4.0.1.tgz", + "integrity": "sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA==", + "extraneous": true, + "dependencies": { + "bn.js": "^4.0.0", + "brorand": "^1.0.1" + }, + "bin": { + "miller-rabin": "bin/miller-rabin" } }, - "node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "node_modules/ganache/node_modules/miller-rabin/node_modules/bn.js": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", + "extraneous": true + }, + "node_modules/ganache/node_modules/mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "extraneous": true, "engines": { - "node": ">=8" + "node": ">= 0.6" } }, - "node_modules/has-property-descriptors": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz", - "integrity": "sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==", + "node_modules/ganache/node_modules/mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "extraneous": true, "dependencies": { - "get-intrinsic": "^1.1.1" + "mime-db": "1.52.0" }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has-symbol-support-x": { - "version": "1.4.2", - "resolved": "https://registry.npmjs.org/has-symbol-support-x/-/has-symbol-support-x-1.4.2.tgz", - "integrity": "sha512-3ToOva++HaW+eCpgqZrCfN51IPB+7bJNVT6CUATzueB5Heb8o6Nam0V3HG5dlDvZU1Gn5QLcbahiKw/XVk5JJw==", "engines": { - "node": "*" + "node": ">= 0.6" } }, - "node_modules/has-symbols": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", - "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", + "node_modules/ganache/node_modules/mimic-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", + "extraneous": true, "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": ">=6" } }, - "node_modules/has-to-string-tag-x": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/has-to-string-tag-x/-/has-to-string-tag-x-1.4.1.tgz", - "integrity": "sha512-vdbKfmw+3LoOYVr+mtxHaX5a96+0f3DljYd8JOqvOLsf5mw2Otda2qCDT9qRqLAhrjyQ0h7ual5nOiASpsGNFw==", + "node_modules/ganache/node_modules/minimalistic-assert": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", + "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==", + "inBundle": true, + "license": "ISC" + }, + "node_modules/ganache/node_modules/minimalistic-crypto-utils": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz", + "integrity": "sha1-9sAMHAsIIkblxNmd+4x8CDsrWCo=", + "inBundle": true, + "license": "MIT" + }, + "node_modules/ganache/node_modules/minimatch": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", + "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "extraneous": true, "dependencies": { - "has-symbol-support-x": "^1.4.1" + "brace-expansion": "^1.1.7" }, "engines": { "node": "*" } }, - "node_modules/has-tostringtag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz", - "integrity": "sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==", + "node_modules/ganache/node_modules/minimist": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.7.tgz", + "integrity": "sha512-bzfL1YUZsP41gmu/qjrEk0Q6i2ix/cVeAhbCbqH9u3zYutS1cLg00qhrD0M2MVdCcx4Sc0UpP2eBWo9rotpq6g==", + "extraneous": true + }, + "node_modules/ganache/node_modules/mocha": { + "version": "9.1.3", + "resolved": "https://registry.npmjs.org/mocha/-/mocha-9.1.3.tgz", + "integrity": "sha512-Xcpl9FqXOAYqI3j79pEtHBBnQgVXIhpULjGQa7DVb0Po+VzmSIK9kanAiWLHoRR/dbZ2qpdPshuXr8l1VaHCzw==", + "extraneous": true, "dependencies": { - "has-symbols": "^1.0.2" + "@ungap/promise-all-settled": "1.1.2", + "ansi-colors": "4.1.1", + "browser-stdout": "1.3.1", + "chokidar": "3.5.2", + "debug": "4.3.2", + "diff": "5.0.0", + "escape-string-regexp": "4.0.0", + "find-up": "5.0.0", + "glob": "7.1.7", + "growl": "1.10.5", + "he": "1.2.0", + "js-yaml": "4.1.0", + "log-symbols": "4.1.0", + "minimatch": "3.0.4", + "ms": "2.1.3", + "nanoid": "3.1.25", + "serialize-javascript": "6.0.0", + "strip-json-comments": "3.1.1", + "supports-color": "8.1.1", + "which": "2.0.2", + "workerpool": "6.1.5", + "yargs": "16.2.0", + "yargs-parser": "20.2.4", + "yargs-unparser": "2.0.0" }, - "engines": { - "node": ">= 0.4" + "bin": { + "_mocha": "bin/_mocha", + "mocha": "bin/mocha" }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "engines": { + "node": ">= 12.0.0" } }, - "node_modules/has-unicode": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", - "integrity": "sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ==", - "optional": true + "node_modules/ganache/node_modules/module-error": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/module-error/-/module-error-1.0.2.tgz", + "integrity": "sha512-0yuvsqSCv8LbaOKhnsQ/T5JhyFlCYLPXK3U2sgV10zoKQwzs/MyfuQUOZQ1V/6OCOJsK/TRgNVrPuPDqtdMFtA==", + "engines": { + "node": ">=10" + } }, - "node_modules/hash-base": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.1.0.tgz", - "integrity": "sha512-1nmYp/rhMDiE7AYkDw+lLwlAzz0AntGIe51F3RfFfEqyQ3feY2eI/NcwC6umIQVOASPMsWJLJScWKSSvzL9IVA==", - "dependencies": { - "inherits": "^2.0.4", - "readable-stream": "^3.6.0", - "safe-buffer": "^5.2.0" + "node_modules/ganache/node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "extraneous": true + }, + "node_modules/ganache/node_modules/nanoid": { + "version": "3.1.25", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.1.25.tgz", + "integrity": "sha512-rdwtIXaXCLFAQbnfqDRnI6jaRHp9fTcYBjtFKE8eezcZ7LuLjhUaQGNeMXf1HmRoCH32CLz6XwX0TtxEOS/A3Q==", + "extraneous": true, + "bin": { + "nanoid": "bin/nanoid.cjs" }, "engines": { - "node": ">=4" + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" } }, - "node_modules/hash.js": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.7.tgz", - "integrity": "sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==", - "dependencies": { - "inherits": "^2.0.3", - "minimalistic-assert": "^1.0.1" - } + "node_modules/ganache/node_modules/napi-macros": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/napi-macros/-/napi-macros-2.0.0.tgz", + "integrity": "sha512-A0xLykHtARfueITVDernsAWdtIMbOJgKgcluwENp3AlsKN/PloyO10HtmoqnFAQAcxPkgZN7wdfPfEd0zNGxbg==", + "inBundle": true, + "license": "MIT" }, - "node_modules/he": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", - "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", + "node_modules/ganache/node_modules/neo-async": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", + "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==", + "extraneous": true + }, + "node_modules/ganache/node_modules/node-addon-api": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-2.0.2.tgz", + "integrity": "sha512-Ntyt4AIXyaLIuMHF6IOoTakB3K+RWxwtsHNRxllEoA6vPwP9o4866g6YWDLUdnucilZhmkxiHwHr11gAENw+QA==", + "inBundle": true, + "license": "MIT" + }, + "node_modules/ganache/node_modules/node-gyp-build": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.5.0.tgz", + "integrity": "sha512-2iGbaQBV+ITgCz76ZEjmhUKAKVf7xfY1sRl4UiKQspfZMH2h06SyhNsnSVy50cwkFQDGLyif6m/6uFXHkOZ6rg==", + "inBundle": true, + "license": "MIT", "bin": { - "he": "bin/he" + "node-gyp-build": "bin.js", + "node-gyp-build-optional": "optional.js", + "node-gyp-build-test": "build-test.js" } }, - "node_modules/header-case": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/header-case/-/header-case-1.0.1.tgz", - "integrity": "sha512-i0q9mkOeSuhXw6bGgiQCCBgY/jlZuV/7dZXyZ9c6LcBrqwvT8eT719E9uxE5LiZftdl+z81Ugbg/VvXV4OJOeQ==", + "node_modules/ganache/node_modules/node-loader": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/node-loader/-/node-loader-1.0.2.tgz", + "integrity": "sha512-myxAxpyMR7knjA4Uzwf3gjxaMtxSWj2vpm9o6AYWWxQ1S3XMBNeG2vzYcp/5eW03cBGfgSxyP+wntP8qhBJNhQ==", + "extraneous": true, "dependencies": { - "no-case": "^2.2.0", - "upper-case": "^1.1.3" + "loader-utils": "^2.0.0", + "schema-utils": "^3.0.0" + }, + "engines": { + "node": ">= 10.13.0" } }, - "node_modules/highlight.js": { - "version": "10.7.3", - "resolved": "https://registry.npmjs.org/highlight.js/-/highlight.js-10.7.3.tgz", - "integrity": "sha512-tzcUFauisWKNHaRkN4Wjl/ZA07gENAjFl3J/c480dprkGTg5EQstgaNFqBfUqCq54kZRIEcreTsAgF/m2quD7A==", - "dev": true, + "node_modules/ganache/node_modules/node-releases": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.6.tgz", + "integrity": "sha512-PiVXnNuFm5+iYkLBNeq5211hvO38y63T0i2KKh2KnUs3RpzJ+JtODFjkD8yjLwnDkTYF1eKXheUwdssR+NRZdg==", + "extraneous": true + }, + "node_modules/ganache/node_modules/normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "extraneous": true, "engines": { - "node": "*" + "node": ">=0.10.0" } }, - "node_modules/highlightjs-solidity": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/highlightjs-solidity/-/highlightjs-solidity-2.0.6.tgz", - "integrity": "sha512-DySXWfQghjm2l6a/flF+cteroJqD4gI8GSdL4PtvxZSsAHie8m3yVe2JFoRg03ROKT6hp2Lc/BxXkqerNmtQYg==", - "dev": true + "node_modules/ganache/node_modules/npm-run-path": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", + "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", + "extraneous": true, + "dependencies": { + "path-key": "^3.0.0" + }, + "engines": { + "node": ">=8" + } }, - "node_modules/hmac-drbg": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz", - "integrity": "sha512-Tti3gMqLdZfhOQY1Mzf/AanLiqh1WTiJgEj26ZuYQ9fbkLomzGchCws4FyrSd4VkpBfiNhaE1On+lOz894jvXg==", + "node_modules/ganache/node_modules/object-is": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/object-is/-/object-is-1.1.5.tgz", + "integrity": "sha512-3cyDsyHgtmi7I7DfSSI2LDp6SK2lwvtbg0p0R1e0RvTqF5ceGx+K2dfSjm1bKDMVCFEDAQvy+o8c6a7VujOddw==", + "extraneous": true, "dependencies": { - "hash.js": "^1.0.3", - "minimalistic-assert": "^1.0.0", - "minimalistic-crypto-utils": "^1.0.1" + "call-bind": "^1.0.2", + "define-properties": "^1.1.3" + }, + "engines": { + "node": ">= 0.4" } }, - "node_modules/hosted-git-info": { - "version": "2.8.9", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz", - "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==" + "node_modules/ganache/node_modules/object-keys": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", + "extraneous": true, + "engines": { + "node": ">= 0.4" + } }, - "node_modules/htmlparser2": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-8.0.1.tgz", - "integrity": "sha512-4lVbmc1diZC7GUJQtRQ5yBAeUCL1exyMwmForWkRLnwyzWBFxN633SALPMGYaWZvKe9j1pRZJpauvmxENSp/EA==", - "dev": true, - "funding": [ - "https://github.com/fb55/htmlparser2?sponsor=1", - { - "type": "github", - "url": "https://github.com/sponsors/fb55" - } - ], + "node_modules/ganache/node_modules/once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", + "extraneous": true, "dependencies": { - "domelementtype": "^2.3.0", - "domhandler": "^5.0.2", - "domutils": "^3.0.1", - "entities": "^4.3.0" + "wrappy": "1" } }, - "node_modules/http-basic": { - "version": "8.1.3", - "resolved": "https://registry.npmjs.org/http-basic/-/http-basic-8.1.3.tgz", - "integrity": "sha512-/EcDMwJZh3mABI2NhGfHOGOeOZITqfkEO4p/xK+l3NpyncIHUQBoMvCSF/b5GqvKtySC2srL/GGG3+EtlqlmCw==", + "node_modules/ganache/node_modules/onetime": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", + "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", + "extraneous": true, "dependencies": { - "caseless": "^0.12.0", - "concat-stream": "^1.6.2", - "http-response-object": "^3.0.1", - "parse-cache-control": "^1.0.1" + "mimic-fn": "^2.1.0" }, "engines": { - "node": ">=6.0.0" + "node": ">=6" } }, - "node_modules/http-cache-semantics": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.1.tgz", - "integrity": "sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ==" + "node_modules/ganache/node_modules/os-browserify": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/os-browserify/-/os-browserify-0.3.0.tgz", + "integrity": "sha512-gjcpUc3clBf9+210TRaDWbf+rZZZEshZ+DlXMRCeAjp0xhTrnQsKHypIy1J3d5hKdUzj69t708EHtU8P6bUn0A==", + "extraneous": true }, - "node_modules/http-errors": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", - "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", + "node_modules/ganache/node_modules/p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "extraneous": true, "dependencies": { - "depd": "2.0.0", - "inherits": "2.0.4", - "setprototypeof": "1.2.0", - "statuses": "2.0.1", - "toidentifier": "1.0.1" + "yocto-queue": "^0.1.0" }, "engines": { - "node": ">= 0.8" + "node": ">=10" } }, - "node_modules/http-https": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/http-https/-/http-https-1.0.0.tgz", - "integrity": "sha512-o0PWwVCSp3O0wS6FvNr6xfBCHgt0m1tvPLFOCc2iFDKTRAXhB7m8klDf7ErowFH8POa6dVdGatKU5I1YYwzUyg==" - }, - "node_modules/http-response-object": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/http-response-object/-/http-response-object-3.0.2.tgz", - "integrity": "sha512-bqX0XTF6fnXSQcEJ2Iuyr75yVakyjIDCqroJQ/aHfSdlM743Cwqoi2nDYMzLGWUcuTWGWy8AAvOKXTfiv6q9RA==", + "node_modules/ganache/node_modules/p-locate": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "extraneous": true, "dependencies": { - "@types/node": "^10.0.3" + "p-limit": "^3.0.2" + }, + "engines": { + "node": ">=10" } }, - "node_modules/http-response-object/node_modules/@types/node": { - "version": "10.17.60", - "resolved": "https://registry.npmjs.org/@types/node/-/node-10.17.60.tgz", - "integrity": "sha512-F0KIgDJfy2nA3zMLmWGKxcH2ZVEtCZXHHdOQs2gSaQ27+lNeEfGxzkIw90aXswATX7AZ33tahPbzy6KAfUreVw==" + "node_modules/ganache/node_modules/p-try": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", + "extraneous": true, + "engines": { + "node": ">=6" + } }, - "node_modules/http-signature": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", - "integrity": "sha512-CAbnr6Rz4CYQkLYUtSNXxQPUH2gK8f3iWexVlsnMeD+GjlsQ0Xsy1cOX+mN3dtxYomRy21CiOzU8Uhw6OwncEQ==", + "node_modules/ganache/node_modules/parse-asn1": { + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/parse-asn1/-/parse-asn1-5.1.6.tgz", + "integrity": "sha512-RnZRo1EPU6JBnra2vGHj0yhp6ebyjBZpmUCLHWiFhxlzvBCCpAuZ7elsBp1PVAbQN0/04VD/19rfzlBSwLstMw==", + "extraneous": true, "dependencies": { - "assert-plus": "^1.0.0", - "jsprim": "^1.2.2", - "sshpk": "^1.7.0" - }, + "asn1.js": "^5.2.0", + "browserify-aes": "^1.0.0", + "evp_bytestokey": "^1.0.0", + "pbkdf2": "^3.0.3", + "safe-buffer": "^5.1.1" + } + }, + "node_modules/ganache/node_modules/path-browserify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-1.0.1.tgz", + "integrity": "sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g==", + "extraneous": true + }, + "node_modules/ganache/node_modules/path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "extraneous": true, "engines": { - "node": ">=0.8", - "npm": ">=1.3.7" + "node": ">=8" } }, - "node_modules/http2-wrapper": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/http2-wrapper/-/http2-wrapper-2.2.0.tgz", - "integrity": "sha512-kZB0wxMo0sh1PehyjJUWRFEd99KC5TLjZ2cULC4f9iqJBAmKQQXEICjxl5iPJRwP40dpeHFqqhm7tYCvODpqpQ==", + "node_modules/ganache/node_modules/path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", + "extraneous": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ganache/node_modules/path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "extraneous": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/ganache/node_modules/path-parse": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", + "extraneous": true + }, + "node_modules/ganache/node_modules/pbkdf2": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.1.2.tgz", + "integrity": "sha512-iuh7L6jA7JEGu2WxDwtQP1ddOpaJNC4KlDEFfdQajSGgGPNi4OyDc2R7QnbY2bR9QjBVGwgvTdNJZoE7RaxUMA==", + "extraneous": true, "dependencies": { - "quick-lru": "^5.1.1", - "resolve-alpn": "^1.2.0" + "create-hash": "^1.1.2", + "create-hmac": "^1.1.4", + "ripemd160": "^2.0.1", + "safe-buffer": "^5.0.1", + "sha.js": "^2.4.8" }, "engines": { - "node": ">=10.19.0" + "node": ">=0.12" } }, - "node_modules/https": { + "node_modules/ganache/node_modules/picocolors": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/https/-/https-1.0.0.tgz", - "integrity": "sha512-4EC57ddXrkaF0x83Oj8sM6SLQHAWXw90Skqu2M4AEWENZ3F02dFJE/GARA8igO79tcgYqGrD7ae4f5L3um2lgg==" + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", + "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", + "extraneous": true }, - "node_modules/https-proxy-agent": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", - "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==", - "dependencies": { - "agent-base": "6", - "debug": "4" - }, + "node_modules/ganache/node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "extraneous": true, "engines": { - "node": ">= 6" + "node": ">=8.6" } }, - "node_modules/humanize-ms": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/humanize-ms/-/humanize-ms-1.2.1.tgz", - "integrity": "sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ==", + "node_modules/ganache/node_modules/pkg-dir": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", + "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", + "extraneous": true, "dependencies": { - "ms": "^2.0.0" + "find-up": "^4.0.0" + }, + "engines": { + "node": ">=8" } }, - "node_modules/iconv-lite": { - "version": "0.4.24", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", - "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "node_modules/ganache/node_modules/pkg-dir/node_modules/find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "extraneous": true, "dependencies": { - "safer-buffer": ">= 2.1.2 < 3" + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" }, "engines": { - "node": ">=0.10.0" + "node": ">=8" } }, - "node_modules/idna-uts46-hx": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/idna-uts46-hx/-/idna-uts46-hx-2.3.1.tgz", - "integrity": "sha512-PWoF9Keq6laYdIRwwCdhTPl60xRqAloYNMQLiyUnG42VjT53oW07BXIRM+NK7eQjzXjAk2gUvX9caRxlnF9TAA==", + "node_modules/ganache/node_modules/pkg-dir/node_modules/locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "extraneous": true, "dependencies": { - "punycode": "2.1.0" + "p-locate": "^4.1.0" }, "engines": { - "node": ">=4.0.0" + "node": ">=8" } }, - "node_modules/ieee754": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", - "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", - "funding": [ + "node_modules/ganache/node_modules/pkg-dir/node_modules/p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "extraneous": true, + "dependencies": { + "p-try": "^2.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/ganache/node_modules/pkg-dir/node_modules/p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "extraneous": true, + "dependencies": { + "p-limit": "^2.2.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/ganache/node_modules/process": { + "version": "0.11.10", + "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", + "integrity": "sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==", + "extraneous": true, + "engines": { + "node": ">= 0.6.0" + } + }, + "node_modules/ganache/node_modules/public-encrypt": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/public-encrypt/-/public-encrypt-4.0.3.tgz", + "integrity": "sha512-zVpa8oKZSz5bTMTFClc1fQOnyyEzpl5ozpi1B5YcvBrdohMjH2rfsBtyXcuNuwjsDIXmBYlF2N5FlJYhR29t8Q==", + "extraneous": true, + "dependencies": { + "bn.js": "^4.1.0", + "browserify-rsa": "^4.0.0", + "create-hash": "^1.1.0", + "parse-asn1": "^5.0.0", + "randombytes": "^2.0.1", + "safe-buffer": "^5.1.2" + } + }, + "node_modules/ganache/node_modules/public-encrypt/node_modules/bn.js": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", + "extraneous": true + }, + "node_modules/ganache/node_modules/punycode": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", + "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", + "extraneous": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/ganache/node_modules/queue-microtask": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", + "funding": [ { "type": "github", "url": "https://github.com/sponsors/feross" @@ -23110,166 +24566,130 @@ "type": "consulting", "url": "https://feross.org/support" } - ] - }, - "node_modules/ignore-by-default": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/ignore-by-default/-/ignore-by-default-1.0.1.tgz", - "integrity": "sha512-Ius2VYcGNk7T90CppJqcIkS5ooHUZyIQK+ClZfMfMNFEF9VSE73Fq+906u/CWu92x4gzZMWOwfFYckPObzdEbA==" - }, - "node_modules/immediate": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/immediate/-/immediate-3.3.0.tgz", - "integrity": "sha512-HR7EVodfFUdQCTIeySw+WDRFJlPcLOJbXfwwZ7Oom6tjsvZ3bOkCDJHehQC3nxJrv7+f9XecwazynjU8e4Vw3Q==" - }, - "node_modules/immutable": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/immutable/-/immutable-4.1.0.tgz", - "integrity": "sha512-oNkuqVTA8jqG1Q6c+UglTOD1xhC1BtjKI7XkCXRkZHrN5m18/XsnUp8Q89GkQO/z+0WjonSvl0FLhDYftp46nQ==" + ], + "inBundle": true, + "license": "MIT" }, - "node_modules/imul": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/imul/-/imul-1.0.1.tgz", - "integrity": "sha512-WFAgfwPLAjU66EKt6vRdTlKj4nAgIDQzh29JonLa4Bqtl6D8JrIMvWjCnx7xEjVNmP3U0fM5o8ZObk7d0f62bA==", - "dev": true, - "engines": { - "node": ">=0.10.0" + "node_modules/ganache/node_modules/randombytes": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", + "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", + "extraneous": true, + "dependencies": { + "safe-buffer": "^5.1.0" } }, - "node_modules/indent-string": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", - "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", - "engines": { - "node": ">=8" + "node_modules/ganache/node_modules/randomfill": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/randomfill/-/randomfill-1.0.4.tgz", + "integrity": "sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw==", + "extraneous": true, + "dependencies": { + "randombytes": "^2.0.5", + "safe-buffer": "^5.1.0" } }, - "node_modules/inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", + "node_modules/ganache/node_modules/readable-stream": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", + "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "inBundle": true, + "license": "MIT", "dependencies": { - "once": "^1.3.0", - "wrappy": "1" + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" } }, - "node_modules/inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" - }, - "node_modules/ini": { - "version": "1.3.8", - "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", - "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", - "optional": true - }, - "node_modules/internal-slot": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.3.tgz", - "integrity": "sha512-O0DB1JC/sPyZl7cIo78n5dR7eUSwwpYPiXRhTzNxZVAMUuB8vlnRFyLxdrVToks6XPLVnFfbzaVd5WLjhgg+vA==", + "node_modules/ganache/node_modules/readdirp": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "extraneous": true, "dependencies": { - "get-intrinsic": "^1.1.0", - "has": "^1.0.3", - "side-channel": "^1.0.4" + "picomatch": "^2.2.1" }, "engines": { - "node": ">= 0.4" + "node": ">=8.10.0" } }, - "node_modules/invariant": { - "version": "2.2.4", - "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz", - "integrity": "sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==", + "node_modules/ganache/node_modules/rechoir": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.6.2.tgz", + "integrity": "sha512-HFM8rkZ+i3zrV+4LQjwQ0W+ez98pApMGM3HUrN04j3CqzPOzl9nmP15Y8YXNm8QHGv/eacOVEjqhmWpkRV0NAw==", + "extraneous": true, "dependencies": { - "loose-envify": "^1.0.0" + "resolve": "^1.1.6" + }, + "engines": { + "node": ">= 0.10" } }, - "node_modules/invert-kv": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/invert-kv/-/invert-kv-1.0.0.tgz", - "integrity": "sha512-xgs2NH9AE66ucSq4cNG1nhSFghr5l6tdL15Pk+jl46bmmBapgoaY/AacXyaDznAqmGL99TiLSQgO/XazFSKYeQ==", + "node_modules/ganache/node_modules/require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", + "extraneous": true, "engines": { "node": ">=0.10.0" } }, - "node_modules/io-ts": { - "version": "1.10.4", - "resolved": "https://registry.npmjs.org/io-ts/-/io-ts-1.10.4.tgz", - "integrity": "sha512-b23PteSnYXSONJ6JQXRAlvJhuw8KOtkqa87W4wDtvMrud/DTJd5X+NpOOI+O/zZwVq6v0VLAaJ+1EDViKEuN9g==", + "node_modules/ganache/node_modules/resolve": { + "version": "1.17.0", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.17.0.tgz", + "integrity": "sha512-ic+7JYiV8Vi2yzQGFWOkiZD5Z9z7O2Zhm9XMaTxdJExKasieFCr+yXZ/WmXsckHiKl12ar0y6XiXDx3m4RHn1w==", + "extraneous": true, "dependencies": { - "fp-ts": "^1.0.0" - } - }, - "node_modules/ipaddr.js": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", - "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", - "engines": { - "node": ">= 0.10" + "path-parse": "^1.0.6" } }, - "node_modules/is-arguments": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.1.1.tgz", - "integrity": "sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==", + "node_modules/ganache/node_modules/resolve-cwd": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-3.0.0.tgz", + "integrity": "sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==", + "extraneous": true, "dependencies": { - "call-bind": "^1.0.2", - "has-tostringtag": "^1.0.0" + "resolve-from": "^5.0.0" }, "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": ">=8" } }, - "node_modules/is-arrayish": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", - "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==" - }, - "node_modules/is-bigint": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz", - "integrity": "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==", - "dependencies": { - "has-bigints": "^1.0.1" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node_modules/ganache/node_modules/resolve-from": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", + "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", + "extraneous": true, + "engines": { + "node": ">=8" } }, - "node_modules/is-binary-path": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", - "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "node_modules/ganache/node_modules/ripemd160": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.2.tgz", + "integrity": "sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==", + "extraneous": true, "dependencies": { - "binary-extensions": "^2.0.0" - }, - "engines": { - "node": ">=8" + "hash-base": "^3.0.0", + "inherits": "^2.0.1" } }, - "node_modules/is-boolean-object": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz", - "integrity": "sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==", + "node_modules/ganache/node_modules/run-parallel-limit": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/run-parallel-limit/-/run-parallel-limit-1.1.0.tgz", + "integrity": "sha512-jJA7irRNM91jaKc3Hcl1npHsFLOXOoTkPCUL1JEa1R82O2miplXXRaGdjW/KM/98YQWDhJLiSs793CnXfblJUw==", + "extraneous": true, "dependencies": { - "call-bind": "^1.0.2", - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "queue-microtask": "^1.2.2" } }, - "node_modules/is-buffer": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-2.0.5.tgz", - "integrity": "sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ==", + "node_modules/ganache/node_modules/safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", "funding": [ { "type": "github", @@ -23284,2263 +24704,2156 @@ "url": "https://feross.org/support" } ], + "inBundle": true, + "license": "MIT" + }, + "node_modules/ganache/node_modules/safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", + "extraneous": true + }, + "node_modules/ganache/node_modules/schema-utils": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.1.tgz", + "integrity": "sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw==", + "extraneous": true, + "dependencies": { + "@types/json-schema": "^7.0.8", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" + }, "engines": { - "node": ">=4" + "node": ">= 10.13.0" } }, - "node_modules/is-callable": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz", - "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==", - "engines": { - "node": ">= 0.4" + "node_modules/ganache/node_modules/scrypt-js": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/scrypt-js/-/scrypt-js-3.0.1.tgz", + "integrity": "sha512-cdwTTnqPu0Hyvf5in5asVdZocVDTNRmR7XEcJuIzMjJeSHybHl7vpB66AzwTaIg6CLSbtjcxc8fqcySfnTkccA==", + "extraneous": true + }, + "node_modules/ganache/node_modules/secp256k1": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/secp256k1/-/secp256k1-4.0.3.tgz", + "integrity": "sha512-NLZVf+ROMxwtEj3Xa562qgv2BK5e2WNmXPiOdVIPLgs6lyTzMvBq0aWTYMI5XCP9jZMVKOcqZLw/Wc4vDkuxhA==", + "hasInstallScript": true, + "inBundle": true, + "license": "MIT", + "dependencies": { + "elliptic": "^6.5.4", + "node-addon-api": "^2.0.0", + "node-gyp-build": "^4.2.0" }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "engines": { + "node": ">=10.0.0" } }, - "node_modules/is-date-object": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz", - "integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==", + "node_modules/ganache/node_modules/semver": { + "version": "7.3.8", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", + "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", + "extraneous": true, "dependencies": { - "has-tostringtag": "^1.0.0" + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" }, "engines": { - "node": ">= 0.4" + "node": ">=10" + } + }, + "node_modules/ganache/node_modules/serialize-javascript": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.0.tgz", + "integrity": "sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag==", + "extraneous": true, + "dependencies": { + "randombytes": "^2.1.0" + } + }, + "node_modules/ganache/node_modules/setimmediate": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", + "integrity": "sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA==", + "extraneous": true + }, + "node_modules/ganache/node_modules/sha.js": { + "version": "2.4.11", + "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz", + "integrity": "sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==", + "extraneous": true, + "dependencies": { + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "bin": { + "sha.js": "bin.js" } }, - "node_modules/is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "node_modules/ganache/node_modules/shallow-clone": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/shallow-clone/-/shallow-clone-3.0.1.tgz", + "integrity": "sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA==", + "extraneous": true, + "dependencies": { + "kind-of": "^6.0.2" + }, "engines": { - "node": ">=0.10.0" + "node": ">=8" } }, - "node_modules/is-fn": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-fn/-/is-fn-1.0.0.tgz", - "integrity": "sha512-XoFPJQmsAShb3jEQRfzf2rqXavq7fIqF/jOekp308JlThqrODnMpweVSGilKTCXELfLhltGP2AGgbQGVP8F1dg==", + "node_modules/ganache/node_modules/shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "extraneous": true, + "dependencies": { + "shebang-regex": "^3.0.0" + }, "engines": { - "node": ">=0.10.0" + "node": ">=8" } }, - "node_modules/is-fullwidth-code-point": { + "node_modules/ganache/node_modules/shebang-loader": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/shebang-loader/-/shebang-loader-0.0.1.tgz", + "integrity": "sha512-nQvhUHvKyzGK5aqPxHfHB5nlAN2EZ2U61S2G0YrxAuCRU5iGhFcxxRiaAdb18UoRS1zVMhRz4gdQ1xFEg3AOyA==", + "extraneous": true + }, + "node_modules/ganache/node_modules/shebang-regex": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "extraneous": true, "engines": { "node": ">=8" } }, - "node_modules/is-function": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-function/-/is-function-1.0.2.tgz", - "integrity": "sha512-lw7DUp0aWXYg+CBCN+JKkcE0Q2RayZnSvnZBlwgxHBQhqt5pZNVy4Ri7H9GmmXkdu7LUthszM+Tor1u/2iBcpQ==" - }, - "node_modules/is-generator-function": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.0.10.tgz", - "integrity": "sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A==", + "node_modules/ganache/node_modules/shelljs": { + "version": "0.8.5", + "resolved": "https://registry.npmjs.org/shelljs/-/shelljs-0.8.5.tgz", + "integrity": "sha512-TiwcRcrkhHvbrZbnRcFYMLl30Dfov3HKqzp5tO5b4pt6G/SezKcYhmDg15zXVBswHmctSAQKznqNW2LO5tTDow==", + "extraneous": true, "dependencies": { - "has-tostringtag": "^1.0.0" + "glob": "^7.0.0", + "interpret": "^1.0.0", + "rechoir": "^0.6.2" }, - "engines": { - "node": ">= 0.4" + "bin": { + "shjs": "bin/shjs" }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "engines": { + "node": ">=4" } }, - "node_modules/is-glob": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", - "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "node_modules/ganache/node_modules/shx": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/shx/-/shx-0.3.3.tgz", + "integrity": "sha512-nZJ3HFWVoTSyyB+evEKjJ1STiixGztlqwKLTUNV5KqMWtGey9fTd4KU1gdZ1X9BV6215pswQ/Jew9NsuS/fNDA==", + "extraneous": true, "dependencies": { - "is-extglob": "^2.1.1" + "minimist": "^1.2.3", + "shelljs": "^0.8.4" + }, + "bin": { + "shx": "lib/cli.js" }, "engines": { - "node": ">=0.10.0" + "node": ">=6" } }, - "node_modules/is-hex-prefixed": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-hex-prefixed/-/is-hex-prefixed-1.0.0.tgz", - "integrity": "sha512-WvtOiug1VFrE9v1Cydwm+FnXd3+w9GaeVUss5W4v/SLy3UW00vP+6iNF2SdnfiBoLy4bTqVdkftNGTUeOFVsbA==", + "node_modules/ganache/node_modules/signal-exit": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", + "extraneous": true + }, + "node_modules/ganache/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "extraneous": true, "engines": { - "node": ">=6.5.0", - "npm": ">=3" + "node": ">=0.10.0" } }, - "node_modules/is-lower-case": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/is-lower-case/-/is-lower-case-1.1.3.tgz", - "integrity": "sha512-+5A1e/WJpLLXZEDlgz4G//WYSHyQBD32qa4Jd3Lw06qQlv3fJHnp3YIHjTQSGzHMgzmVKz2ZP3rBxTHkPw/lxA==", + "node_modules/ganache/node_modules/source-map-support": { + "version": "0.5.21", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", + "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", + "extraneous": true, "dependencies": { - "lower-case": "^1.1.0" + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" } }, - "node_modules/is-natural-number": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/is-natural-number/-/is-natural-number-4.0.1.tgz", - "integrity": "sha512-Y4LTamMe0DDQIIAlaer9eKebAlDSV6huy+TWhJVPlzZh2o4tRP5SQWFlLn5N0To4mDD22/qdOq+veo1cSISLgQ==" + "node_modules/ganache/node_modules/sprintf-js": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", + "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==", + "extraneous": true }, - "node_modules/is-negative-zero": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.2.tgz", - "integrity": "sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node_modules/ganache/node_modules/stream-browserify": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/stream-browserify/-/stream-browserify-3.0.0.tgz", + "integrity": "sha512-H73RAHsVBapbim0tU2JwwOiXUj+fikfiaoYAKHF3VJfA0pe2BCzkhAHBlLG6REzE+2WNZcxOXjK7lkso+9euLA==", + "extraneous": true, + "dependencies": { + "inherits": "~2.0.4", + "readable-stream": "^3.5.0" } }, - "node_modules/is-number": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "node_modules/ganache/node_modules/stream-http": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/stream-http/-/stream-http-3.2.0.tgz", + "integrity": "sha512-Oq1bLqisTyK3TSCXpPbT4sdeYNdmyZJv1LxpEm2vu1ZhK89kSE5YXwZc3cWk0MagGaKriBh9mCFbVGtO+vY29A==", + "extraneous": true, + "dependencies": { + "builtin-status-codes": "^3.0.0", + "inherits": "^2.0.4", + "readable-stream": "^3.6.0", + "xtend": "^4.0.2" + } + }, + "node_modules/ganache/node_modules/string_decoder": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", + "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", + "inBundle": true, + "license": "MIT", + "dependencies": { + "safe-buffer": "~5.2.0" + } + }, + "node_modules/ganache/node_modules/string-argv": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/string-argv/-/string-argv-0.3.1.tgz", + "integrity": "sha512-a1uQGz7IyVy9YwhqjZIZu1c8JO8dNIe20xBmSS6qu9kv++k3JGzCVmprbNN5Kn+BgzD5E7YYwg1CcjuJMRNsvg==", + "extraneous": true, "engines": { - "node": ">=0.12.0" + "node": ">=0.6.19" } }, - "node_modules/is-number-object": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.7.tgz", - "integrity": "sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==", + "node_modules/ganache/node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "extraneous": true, "dependencies": { - "has-tostringtag": "^1.0.0" + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" }, "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": ">=8" } }, - "node_modules/is-obj": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-2.0.0.tgz", - "integrity": "sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==", - "optional": true, + "node_modules/ganache/node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "extraneous": true, + "dependencies": { + "ansi-regex": "^5.0.1" + }, "engines": { "node": ">=8" } }, - "node_modules/is-object": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-object/-/is-object-1.0.2.tgz", - "integrity": "sha512-2rRIahhZr2UWb45fIOuvZGpFtz0TyOZLf32KxBbSoUCeZR495zCKlWUKKUByk3geS2eAs7ZAABt0Y/Rx0GiQGA==", - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node_modules/ganache/node_modules/strip-final-newline": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", + "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", + "extraneous": true, + "engines": { + "node": ">=6" } }, - "node_modules/is-plain-obj": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz", - "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==", + "node_modules/ganache/node_modules/strip-json-comments": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", + "extraneous": true, "engines": { "node": ">=8" } }, - "node_modules/is-regex": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", - "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==", + "node_modules/ganache/node_modules/supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "extraneous": true, "dependencies": { - "call-bind": "^1.0.2", - "has-tostringtag": "^1.0.0" + "has-flag": "^4.0.0" }, "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": ">=10" } }, - "node_modules/is-retry-allowed": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/is-retry-allowed/-/is-retry-allowed-1.2.0.tgz", - "integrity": "sha512-RUbUeKwvm3XG2VYamhJL1xFktgjvPzL0Hq8C+6yrWIswDy3BIXGqCxhxkc30N9jqK311gVU137K8Ei55/zVJRg==", + "node_modules/ganache/node_modules/tapable": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz", + "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==", + "extraneous": true, "engines": { - "node": ">=0.10.0" + "node": ">=6" } }, - "node_modules/is-shared-array-buffer": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz", - "integrity": "sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==", + "node_modules/ganache/node_modules/terser": { + "version": "5.16.1", + "resolved": "https://registry.npmjs.org/terser/-/terser-5.16.1.tgz", + "integrity": "sha512-xvQfyfA1ayT0qdK47zskQgRZeWLoOQ8JQ6mIgRGVNwZKdQMU+5FkCBjmv4QjcrTzyZquRw2FVtlJSRUmMKQslw==", + "extraneous": true, "dependencies": { - "call-bind": "^1.0.2" + "@jridgewell/source-map": "^0.3.2", + "acorn": "^8.5.0", + "commander": "^2.20.0", + "source-map-support": "~0.5.20" + }, + "bin": { + "terser": "bin/terser" }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-stream": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", - "integrity": "sha512-uQPm8kcs47jx38atAcWTVxyltQYoPT68y9aWYdV6yWXSyW8mzSat0TL6CiWdZeCdF3KrAvpVtnHbTv4RN+rqdQ==", "engines": { - "node": ">=0.10.0" + "node": ">=10" } }, - "node_modules/is-string": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz", - "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==", + "node_modules/ganache/node_modules/terser-webpack-plugin": { + "version": "5.2.5", + "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.2.5.tgz", + "integrity": "sha512-3luOVHku5l0QBeYS8r4CdHYWEGMmIj3H1U64jgkdZzECcSOJAyJ9TjuqcQZvw1Y+4AOBN9SeYJPJmFn2cM4/2g==", + "extraneous": true, "dependencies": { - "has-tostringtag": "^1.0.0" + "jest-worker": "^27.0.6", + "schema-utils": "^3.1.1", + "serialize-javascript": "^6.0.0", + "source-map": "^0.6.1", + "terser": "^5.7.2" }, "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": ">= 10.13.0" } }, - "node_modules/is-symbol": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz", - "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==", + "node_modules/ganache/node_modules/timsort": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/timsort/-/timsort-0.3.0.tgz", + "integrity": "sha512-qsdtZH+vMoCARQtyod4imc2nIJwg9Cc7lPRrw9CzF8ZKR0khdr8+2nX80PBhET3tcyTtJDxAffGh2rXH4tyU8A==", + "extraneous": true + }, + "node_modules/ganache/node_modules/to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "extraneous": true, "dependencies": { - "has-symbols": "^1.0.2" + "is-number": "^7.0.0" }, "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": ">=8.0" } }, - "node_modules/is-typed-array": { - "version": "1.1.9", - "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.9.tgz", - "integrity": "sha512-kfrlnTTn8pZkfpJMUgYD7YZ3qzeJgWUn8XfVYBARc4wnmNOmLbmuuaAs3q5fvB0UJOn6yHAKaGTPM7d6ezoD/A==", + "node_modules/ganache/node_modules/ts-loader": { + "version": "9.3.1", + "resolved": "https://registry.npmjs.org/ts-loader/-/ts-loader-9.3.1.tgz", + "integrity": "sha512-OkyShkcZTsTwyS3Kt7a4rsT/t2qvEVQuKCTg4LJmpj9fhFR7ukGdZwV6Qq3tRUkqcXtfGpPR7+hFKHCG/0d3Lw==", + "extraneous": true, "dependencies": { - "available-typed-arrays": "^1.0.5", - "call-bind": "^1.0.2", - "es-abstract": "^1.20.0", - "for-each": "^0.3.3", - "has-tostringtag": "^1.0.0" + "chalk": "^4.1.0", + "enhanced-resolve": "^5.0.0", + "micromatch": "^4.0.0", + "semver": "^7.3.4" }, "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": ">=12.0.0" } }, - "node_modules/is-typedarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", - "integrity": "sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==" - }, - "node_modules/is-unicode-supported": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", - "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==", - "engines": { - "node": ">=10" + "node_modules/ganache/node_modules/ts-node": { + "version": "10.9.1", + "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.9.1.tgz", + "integrity": "sha512-NtVysVPkxxrwFGUUxGYhfux8k78pQB3JqYBXlLRZgdGUqTO5wU/UyHop5p70iEbGhB7q5KmiZiU0Y3KlJrScEw==", + "extraneous": true, + "dependencies": { + "@cspotcode/source-map-support": "^0.8.0", + "@tsconfig/node10": "^1.0.7", + "@tsconfig/node12": "^1.0.7", + "@tsconfig/node14": "^1.0.0", + "@tsconfig/node16": "^1.0.2", + "acorn": "^8.4.1", + "acorn-walk": "^8.1.1", + "arg": "^4.1.0", + "create-require": "^1.1.0", + "diff": "^4.0.1", + "make-error": "^1.1.1", + "v8-compile-cache-lib": "^3.0.1", + "yn": "3.1.1" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "bin": { + "ts-node": "dist/bin.js", + "ts-node-cwd": "dist/bin-cwd.js", + "ts-node-esm": "dist/bin-esm.js", + "ts-node-script": "dist/bin-script.js", + "ts-node-transpile-only": "dist/bin-transpile.js", + "ts-script": "dist/bin-script-deprecated.js" } }, - "node_modules/is-upper-case": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/is-upper-case/-/is-upper-case-1.1.2.tgz", - "integrity": "sha512-GQYSJMgfeAmVwh9ixyk888l7OIhNAGKtY6QA+IrWlu9MDTCaXmeozOZ2S9Knj7bQwBO/H6J2kb+pbyTUiMNbsw==", - "dependencies": { - "upper-case": "^1.1.0" + "node_modules/ganache/node_modules/ts-node/node_modules/diff": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", + "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", + "extraneous": true, + "engines": { + "node": ">=0.3.1" } }, - "node_modules/is-url": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/is-url/-/is-url-1.2.4.tgz", - "integrity": "sha512-ITvGim8FhRiYe4IQ5uHSkj7pVaPDrCTkNd3yq3cV7iZAcJdHTUMPMEHcqSOy9xZ9qFenQCvi+2wjH9a1nXqHww==", - "dev": true + "node_modules/ganache/node_modules/typescript": { + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.1.6.tgz", + "integrity": "sha512-zaWCozRZ6DLEWAWFrVDz1H6FVXzUSfTy5FUMWsQlU8Ym5JP9eO4xkTIROFCQvhQf61z6O/G6ugw3SgAnvvm+HA==", + "extraneous": true, + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=14.17" + } }, - "node_modules/is-utf8": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/is-utf8/-/is-utf8-0.2.1.tgz", - "integrity": "sha512-rMYPYvCzsXywIsldgLaSoPlw5PfoB/ssr7hY4pLfcodrA5M/eArza1a9VmTiNIBNMjOGr1Ow9mTyU2o69U6U9Q==" + "node_modules/ganache/node_modules/universalify": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", + "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", + "extraneous": true, + "engines": { + "node": ">= 4.0.0" + } }, - "node_modules/is-weakref": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz", - "integrity": "sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==", + "node_modules/ganache/node_modules/update-browserslist-db": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.10.tgz", + "integrity": "sha512-OztqDenkfFkbSG+tRxBeAnCVPckDBcvibKd35yDONx6OU8N7sqgwc7rCbkJ/WcYtVRZ4ba68d6byhC21GFh7sQ==", + "extraneous": true, "dependencies": { - "call-bind": "^1.0.2" + "escalade": "^3.1.1", + "picocolors": "^1.0.0" }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "bin": { + "browserslist-lint": "cli.js" } }, - "node_modules/isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==" - }, - "node_modules/isexe": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==" + "node_modules/ganache/node_modules/uri-js": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", + "extraneous": true, + "dependencies": { + "punycode": "^2.1.0" + } }, - "node_modules/isomorphic-unfetch": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/isomorphic-unfetch/-/isomorphic-unfetch-3.1.0.tgz", - "integrity": "sha512-geDJjpoZ8N0kWexiwkX8F9NkTsXhetLPVbZFQ+JTW239QNOwvB0gniuR1Wc6f0AMTn7/mFGyXvHTifrCp/GH8Q==", - "dev": true, + "node_modules/ganache/node_modules/utf-8-validate": { + "version": "5.0.7", + "resolved": "https://registry.npmjs.org/utf-8-validate/-/utf-8-validate-5.0.7.tgz", + "integrity": "sha512-vLt1O5Pp+flcArHGIyKEQq883nBt8nN8tVBcoL0qUXj2XT1n7p70yGIq2VK98I5FdZ1YHc0wk/koOnHjnXWk1Q==", + "hasInstallScript": true, + "optional": true, "dependencies": { - "node-fetch": "^2.6.1", - "unfetch": "^4.2.0" + "node-gyp-build": "^4.3.0" + }, + "engines": { + "node": ">=6.14.2" } }, - "node_modules/isomorphic-ws": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/isomorphic-ws/-/isomorphic-ws-4.0.1.tgz", - "integrity": "sha512-BhBvN2MBpWTaSHdWRb/bwdZJ1WaehQ2L1KngkCkfLUGF0mAWAT1sQUQacEmQ0jXkFw/czDXPNQSL5u2/Krsz1w==", - "peerDependencies": { - "ws": "*" + "node_modules/ganache/node_modules/util": { + "version": "0.12.4", + "resolved": "https://registry.npmjs.org/util/-/util-0.12.4.tgz", + "integrity": "sha512-bxZ9qtSlGUWSOy9Qa9Xgk11kSslpuZwaxCg4sNIDj6FLucDab2JxnHwyNTCpHMtK1MjoQiWQ6DiUMZYbSrO+Sw==", + "extraneous": true, + "dependencies": { + "inherits": "^2.0.3", + "is-arguments": "^1.0.4", + "is-generator-function": "^1.0.7", + "is-typed-array": "^1.1.3", + "safe-buffer": "^5.1.2", + "which-typed-array": "^1.1.2" } }, - "node_modules/isstream": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", - "integrity": "sha512-Yljz7ffyPbrLpLngrMtZ7NduUgVvi6wG9RJ9IUcyCd59YQ911PBJphODUcbOVbqYfxe1wuYf/LJ8PauMRwsM/g==" + "node_modules/ganache/node_modules/util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", + "inBundle": true, + "license": "MIT" }, - "node_modules/isurl": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isurl/-/isurl-1.0.0.tgz", - "integrity": "sha512-1P/yWsxPlDtn7QeRD+ULKQPaIaN6yF368GZ2vDfv0AL0NwpStafjWCDDdn0k8wgFMWpVAqG7oJhxHnlud42i9w==", + "node_modules/ganache/node_modules/v8-compile-cache-lib": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz", + "integrity": "sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==", + "extraneous": true + }, + "node_modules/ganache/node_modules/validator": { + "version": "13.7.0", + "resolved": "https://registry.npmjs.org/validator/-/validator-13.7.0.tgz", + "integrity": "sha512-nYXQLCBkpJ8X6ltALua9dRrZDHVYxjJ1wgskNt1lH9fzGjs3tgojGSCBjmEPwkWS1y29+DrizMTW19Pr9uB2nw==", + "extraneous": true, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/ganache/node_modules/watchpack": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.4.0.tgz", + "integrity": "sha512-Lcvm7MGST/4fup+ifyKi2hjyIAwcdI4HRgtvTpIUxBRhB+RFtUh8XtDOxUfctVCnhVi+QQj49i91OyvzkJl6cg==", + "extraneous": true, "dependencies": { - "has-to-string-tag-x": "^1.2.0", - "is-object": "^1.0.1" + "glob-to-regexp": "^0.4.1", + "graceful-fs": "^4.1.2" }, "engines": { - "node": ">= 4" + "node": ">=10.13.0" } }, - "node_modules/javascript-natural-sort": { - "version": "0.7.1", - "resolved": "https://registry.npmjs.org/javascript-natural-sort/-/javascript-natural-sort-0.7.1.tgz", - "integrity": "sha512-nO6jcEfZWQXDhOiBtG2KvKyEptz7RVbpGP4vTD2hLBdmNQSsCiicO2Ioinv6UI4y9ukqnBpy+XZ9H6uLNgJTlw==" - }, - "node_modules/jayson": { - "version": "3.7.0", - "resolved": "https://registry.npmjs.org/jayson/-/jayson-3.7.0.tgz", - "integrity": "sha512-tfy39KJMrrXJ+mFcMpxwBvFDetS8LAID93+rycFglIQM4kl3uNR3W4lBLE/FFhsoUCEox5Dt2adVpDm/XtebbQ==", - "dependencies": { - "@types/connect": "^3.4.33", - "@types/node": "^12.12.54", - "@types/ws": "^7.4.4", - "commander": "^2.20.3", - "delay": "^5.0.0", - "es6-promisify": "^5.0.0", - "eyes": "^0.1.8", - "isomorphic-ws": "^4.0.1", - "json-stringify-safe": "^5.0.1", - "JSONStream": "^1.3.5", - "lodash": "^4.17.20", - "uuid": "^8.3.2", - "ws": "^7.4.5" + "node_modules/ganache/node_modules/webpack": { + "version": "5.65.0", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.65.0.tgz", + "integrity": "sha512-Q5or2o6EKs7+oKmJo7LaqZaMOlDWQse9Tm5l1WAfU/ujLGN5Pb0SqGeVkN/4bpPmEqEP5RnVhiqsOtWtUVwGRw==", + "extraneous": true, + "dependencies": { + "@types/eslint-scope": "^3.7.0", + "@types/estree": "^0.0.50", + "@webassemblyjs/ast": "1.11.1", + "@webassemblyjs/wasm-edit": "1.11.1", + "@webassemblyjs/wasm-parser": "1.11.1", + "acorn": "^8.4.1", + "acorn-import-assertions": "^1.7.6", + "browserslist": "^4.14.5", + "chrome-trace-event": "^1.0.2", + "enhanced-resolve": "^5.8.3", + "es-module-lexer": "^0.9.0", + "eslint-scope": "5.1.1", + "events": "^3.2.0", + "glob-to-regexp": "^0.4.1", + "graceful-fs": "^4.2.4", + "json-parse-better-errors": "^1.0.2", + "loader-runner": "^4.2.0", + "mime-types": "^2.1.27", + "neo-async": "^2.6.2", + "schema-utils": "^3.1.0", + "tapable": "^2.1.1", + "terser-webpack-plugin": "^5.1.3", + "watchpack": "^2.3.1", + "webpack-sources": "^3.2.2" }, "bin": { - "jayson": "bin/jayson.js" + "webpack": "bin/webpack.js" }, "engines": { - "node": ">=8" + "node": ">=10.13.0" } }, - "node_modules/jayson/node_modules/@types/node": { - "version": "12.20.55", - "resolved": "https://registry.npmjs.org/@types/node/-/node-12.20.55.tgz", - "integrity": "sha512-J8xLz7q2OFulZ2cyGTLE1TbbZcjpno7FaN6zdJNrgAdrJ+DZzh/uFR6YrTb4C+nXakvud8Q4+rbhoIWlYQbUFQ==" - }, - "node_modules/jayson/node_modules/ws": { - "version": "7.5.9", - "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.9.tgz", - "integrity": "sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q==", - "engines": { - "node": ">=8.3.0" + "node_modules/ganache/node_modules/webpack-cli": { + "version": "4.9.1", + "resolved": "https://registry.npmjs.org/webpack-cli/-/webpack-cli-4.9.1.tgz", + "integrity": "sha512-JYRFVuyFpzDxMDB+v/nanUdQYcZtqFPGzmlW4s+UkPMFhSpfRNmf1z4AwYcHJVdvEFAM7FFCQdNTpsBYhDLusQ==", + "extraneous": true, + "dependencies": { + "@discoveryjs/json-ext": "^0.5.0", + "@webpack-cli/configtest": "^1.1.0", + "@webpack-cli/info": "^1.4.0", + "@webpack-cli/serve": "^1.6.0", + "colorette": "^2.0.14", + "commander": "^7.0.0", + "execa": "^5.0.0", + "fastest-levenshtein": "^1.0.12", + "import-local": "^3.0.2", + "interpret": "^2.2.0", + "rechoir": "^0.7.0", + "webpack-merge": "^5.7.3" }, - "peerDependencies": { - "bufferutil": "^4.0.1", - "utf-8-validate": "^5.0.2" + "bin": { + "webpack-cli": "bin/cli.js" }, - "peerDependenciesMeta": { - "bufferutil": { - "optional": true - }, - "utf-8-validate": { - "optional": true - } + "engines": { + "node": ">=10.13.0" } }, - "node_modules/js-cookie": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/js-cookie/-/js-cookie-2.2.1.tgz", - "integrity": "sha512-HvdH2LzI/EAZcUwA8+0nKNtWHqS+ZmijLA30RwZA0bo7ToCckjK5MkGhjED9KoRcXO6BaGI3I9UIzSA1FKFPOQ==", - "dev": true - }, - "node_modules/js-sdsl": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/js-sdsl/-/js-sdsl-4.4.0.tgz", - "integrity": "sha512-FfVSdx6pJ41Oa+CF7RDaFmTnCaFhua+SNYQX74riGOpl96x+2jQCqEfQ2bnXu/5DPCqlRuiqyvTJM0Qjz26IVg==", - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/js-sdsl" + "node_modules/ganache/node_modules/webpack-cli/node_modules/commander": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", + "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==", + "extraneous": true, + "engines": { + "node": ">= 10" } }, - "node_modules/js-sha3": { - "version": "0.8.0", - "resolved": "https://registry.npmjs.org/js-sha3/-/js-sha3-0.8.0.tgz", - "integrity": "sha512-gF1cRrHhIzNfToc802P800N8PpXS+evLLXfsVpowqmAFR9uwbi89WvXg2QspOmXL8QL86J4T1EpFu+yUkwJY3Q==" - }, - "node_modules/js-tokens": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", - "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==" + "node_modules/ganache/node_modules/webpack-cli/node_modules/interpret": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/interpret/-/interpret-2.2.0.tgz", + "integrity": "sha512-Ju0Bz/cEia55xDwUWEa8+olFpCiQoypjnQySseKtmjNrnps3P+xfpUmGr90T7yjlVJmOtybRvPXhKMbHr+fWnw==", + "extraneous": true, + "engines": { + "node": ">= 0.10" + } }, - "node_modules/js-yaml": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", - "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "node_modules/ganache/node_modules/webpack-cli/node_modules/rechoir": { + "version": "0.7.1", + "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.7.1.tgz", + "integrity": "sha512-/njmZ8s1wVeR6pjTZ+0nCnv8SpZNRMT2D1RLOJQESlYFDBvwpTA4KWJpZ+sBJ4+vhjILRcK7JIFdGCdxEAAitg==", + "extraneous": true, "dependencies": { - "argparse": "^2.0.1" + "resolve": "^1.9.0" }, - "bin": { - "js-yaml": "bin/js-yaml.js" + "engines": { + "node": ">= 0.10" } }, - "node_modules/jsbi": { - "version": "3.2.5", - "resolved": "https://registry.npmjs.org/jsbi/-/jsbi-3.2.5.tgz", - "integrity": "sha512-aBE4n43IPvjaddScbvWRA2YlTzKEynHzu7MqOyTipdHucf/VxS63ViCjxYRg86M8Rxwbt/GfzHl1kKERkt45fQ==" - }, - "node_modules/jsbn": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", - "integrity": "sha512-UVU9dibq2JcFWxQPA6KCqj5O42VOmAY3zQUfEKxU0KpTGXwNoCjkX1e13eHNvw/xPynt6pU0rZ1htjWTNTSXsg==" - }, - "node_modules/jsesc": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", - "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", - "peer": true, - "bin": { - "jsesc": "bin/jsesc" + "node_modules/ganache/node_modules/webpack-merge": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/webpack-merge/-/webpack-merge-5.8.0.tgz", + "integrity": "sha512-/SaI7xY0831XwP6kzuwhKWVKDP9t1QY1h65lAFLbZqMPIuYcD9QAW4u9STIbU9kaJbPBB/geU/gLr1wDjOhQ+Q==", + "extraneous": true, + "dependencies": { + "clone-deep": "^4.0.1", + "wildcard": "^2.0.0" }, "engines": { - "node": ">=4" + "node": ">=10.0.0" } }, - "node_modules/json-bigint": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/json-bigint/-/json-bigint-1.0.0.tgz", - "integrity": "sha512-SiPv/8VpZuWbvLSMtTDU8hEfrZWg/mH/nV/b4o0CYbSxu1UIQPLdwKOCIyLQX+VIPO5vrLX3i8qtqFyhdPSUSQ==", - "dev": true, - "dependencies": { - "bignumber.js": "^9.0.0" + "node_modules/ganache/node_modules/webpack-sources": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-3.2.3.tgz", + "integrity": "sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==", + "extraneous": true, + "engines": { + "node": ">=10.13.0" } }, - "node_modules/json-buffer": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", - "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==" - }, - "node_modules/json-loader": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/json-loader/-/json-loader-0.5.7.tgz", - "integrity": "sha512-QLPs8Dj7lnf3e3QYS1zkCo+4ZwqOiF9d/nZnYozTISxXWCfNs9yuky5rJw4/W34s7POaNlbZmQGaB5NiXCbP4w==", - "dev": true - }, - "node_modules/json-pointer": { - "version": "0.6.2", - "resolved": "https://registry.npmjs.org/json-pointer/-/json-pointer-0.6.2.tgz", - "integrity": "sha512-vLWcKbOaXlO+jvRy4qNd+TI1QUPZzfJj1tpJ3vAXDych5XJf93ftpUKe5pKCrzyIIwgBJcOcCVRUfqQP25afBw==", + "node_modules/ganache/node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "extraneous": true, "dependencies": { - "foreach": "^2.0.4" + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" } }, - "node_modules/json-rpc-engine": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/json-rpc-engine/-/json-rpc-engine-6.1.0.tgz", - "integrity": "sha512-NEdLrtrq1jUZyfjkr9OCz9EzCNhnRyWtt1PAnvnhwy6e8XETS0Dtc+ZNCO2gvuAoKsIn2+vCSowXTYE4CkgnAQ==", + "node_modules/ganache/node_modules/which-typed-array": { + "version": "1.1.9", + "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.9.tgz", + "integrity": "sha512-w9c4xkx6mPidwp7180ckYWfMmvxpjlZuIudNtDf4N/tTAUB8VJbX25qZoAsrtGuYNnGw3pa0AXgbGKRB8/EceA==", + "extraneous": true, "dependencies": { - "@metamask/safe-event-emitter": "^2.0.0", - "eth-rpc-errors": "^4.0.2" + "available-typed-arrays": "^1.0.5", + "call-bind": "^1.0.2", + "for-each": "^0.3.3", + "gopd": "^1.0.1", + "has-tostringtag": "^1.0.0", + "is-typed-array": "^1.1.10" }, "engines": { - "node": ">=10.0.0" + "node": ">= 0.4" } }, - "node_modules/json-rpc-engine/node_modules/eth-rpc-errors": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/eth-rpc-errors/-/eth-rpc-errors-4.0.3.tgz", - "integrity": "sha512-Z3ymjopaoft7JDoxZcEb3pwdGh7yiYMhOwm2doUt6ASXlMavpNlK6Cre0+IMl2VSGyEU9rkiperQhp5iRxn5Pg==", + "node_modules/ganache/node_modules/wildcard": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/wildcard/-/wildcard-2.0.0.tgz", + "integrity": "sha512-JcKqAHLPxcdb9KM49dufGXn2x3ssnfjbcaQdLlfZsL9rH9wgDQjUtDxbo8NE0F6SFvydeu1VhZe7hZuHsB2/pw==", + "extraneous": true + }, + "node_modules/ganache/node_modules/workerpool": { + "version": "6.1.5", + "resolved": "https://registry.npmjs.org/workerpool/-/workerpool-6.1.5.tgz", + "integrity": "sha512-XdKkCK0Zqc6w3iTxLckiuJ81tiD/o5rBE/m+nXpRCB+/Sq4DqkfXZ/x0jW02DG1tGsfUGXbTJyZDP+eu67haSw==", + "extraneous": true + }, + "node_modules/ganache/node_modules/wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "extraneous": true, "dependencies": { - "fast-safe-stringify": "^2.0.6" + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" } }, - "node_modules/json-rpc-random-id": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json-rpc-random-id/-/json-rpc-random-id-1.0.1.tgz", - "integrity": "sha512-RJ9YYNCkhVDBuP4zN5BBtYAzEl03yq/jIIsyif0JY9qyJuQQZNeDK7anAPKKlyEtLSj2s8h6hNh2F8zO5q7ScA==" + "node_modules/ganache/node_modules/wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", + "extraneous": true }, - "node_modules/json-schema": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.4.0.tgz", - "integrity": "sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA==" + "node_modules/ganache/node_modules/xtend": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", + "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", + "extraneous": true, + "engines": { + "node": ">=0.4" + } }, - "node_modules/json-schema-traverse": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==" + "node_modules/ganache/node_modules/y18n": { + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", + "extraneous": true, + "engines": { + "node": ">=10" + } }, - "node_modules/json-schema-typed": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/json-schema-typed/-/json-schema-typed-7.0.3.tgz", - "integrity": "sha512-7DE8mpG+/fVw+dTpjbxnx47TaMnDfOI1jwft9g1VybltZCduyRQPJPvc+zzKY9WPHxhPWczyFuYa6I8Mw4iU5A==", - "optional": true + "node_modules/ganache/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "extraneous": true }, - "node_modules/json-stable-stringify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json-stable-stringify/-/json-stable-stringify-1.0.1.tgz", - "integrity": "sha512-i/J297TW6xyj7sDFa7AmBPkQvLIxWr2kKPWI26tXydnZrzVAocNqn5DMNT1Mzk0vit1V5UkRM7C1KdVNp7Lmcg==", + "node_modules/ganache/node_modules/yargs": { + "version": "16.2.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", + "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", + "extraneous": true, "dependencies": { - "jsonify": "~0.0.0" + "cliui": "^7.0.2", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.0", + "y18n": "^5.0.5", + "yargs-parser": "^20.2.2" + }, + "engines": { + "node": ">=10" } }, - "node_modules/json-stringify-safe": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", - "integrity": "sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==" - }, - "node_modules/json5": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.2.tgz", - "integrity": "sha512-46Tk9JiOL2z7ytNQWFLpj99RZkVgeHf87yGQKsIkaPz1qSH9UczKH1rO7K3wgRselo0tYMUNfecYpm/p1vC7tQ==", - "peer": true, - "bin": { - "json5": "lib/cli.js" - }, + "node_modules/ganache/node_modules/yargs-parser": { + "version": "20.2.4", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.4.tgz", + "integrity": "sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA==", + "extraneous": true, "engines": { - "node": ">=6" + "node": ">=10" } }, - "node_modules/jsonfile": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", - "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", + "node_modules/ganache/node_modules/yargs-unparser": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/yargs-unparser/-/yargs-unparser-2.0.0.tgz", + "integrity": "sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA==", + "extraneous": true, "dependencies": { - "universalify": "^2.0.0" + "camelcase": "^6.0.0", + "decamelize": "^4.0.0", + "flat": "^5.0.2", + "is-plain-obj": "^2.1.0" }, - "optionalDependencies": { - "graceful-fs": "^4.1.6" + "engines": { + "node": ">=10" } }, - "node_modules/jsonify": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/jsonify/-/jsonify-0.0.1.tgz", - "integrity": "sha512-2/Ki0GcmuqSrgFyelQq9M05y7PS0mEwuIzrf3f1fPqkVDVRvZrPZtVSMHxdgo8Aq0sxAOb/cr2aqqA3LeWHVPg==", - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node_modules/ganache/node_modules/yn": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz", + "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==", + "extraneous": true, + "engines": { + "node": ">=6" } }, - "node_modules/jsonparse": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/jsonparse/-/jsonparse-1.3.1.tgz", - "integrity": "sha512-POQXvpdL69+CluYsillJ7SUhKvytYjW9vG/GKpnf+xP8UWgYEM/RaMzHHofbALDiKbbP1W8UEYmgGl39WkPZsg==", - "engines": [ - "node >= 0.2.0" - ] + "node_modules/ganache/node_modules/yocto-queue": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", + "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", + "extraneous": true, + "engines": { + "node": ">=10" + } }, - "node_modules/JSONStream": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/JSONStream/-/JSONStream-1.3.5.tgz", - "integrity": "sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ==", + "node_modules/ganache/node_modules/z-schema": { + "version": "5.0.4", + "resolved": "https://registry.npmjs.org/z-schema/-/z-schema-5.0.4.tgz", + "integrity": "sha512-gm/lx3hDzJNcLwseIeQVm1UcwhWIKpSB4NqH89pTBtFns4k/HDHudsICtvG05Bvw/Mv3jMyk700y5dadueLHdA==", + "extraneous": true, "dependencies": { - "jsonparse": "^1.2.0", - "through": ">=2.2.7 <3" + "commander": "^2.20.3", + "lodash.get": "^4.4.2", + "lodash.isequal": "^4.5.0", + "validator": "^13.7.0" }, "bin": { - "JSONStream": "bin.js" + "z-schema": "bin/z-schema" }, "engines": { - "node": "*" + "node": ">=8.0.0" } }, - "node_modules/jsprim": { - "version": "1.4.2", - "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.2.tgz", - "integrity": "sha512-P2bSOMAc/ciLz6DzgjVlGJP9+BrJWu5UDGK70C2iweC5QBIeFf0ZXRvGjEj2uYgrY2MkAAhsSWHDWlFtEroZWw==", - "dependencies": { - "assert-plus": "1.0.0", - "extsprintf": "1.3.0", - "json-schema": "0.4.0", - "verror": "1.10.0" - }, + "node_modules/gensync": { + "version": "1.0.0-beta.2", + "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", + "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", + "peer": true, "engines": { - "node": ">=0.6.0" + "node": ">=6.9.0" } }, - "node_modules/keccak": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/keccak/-/keccak-3.0.2.tgz", - "integrity": "sha512-PyKKjkH53wDMLGrvmRGSNWgmSxZOUqbnXwKL9tmgbFYA1iAYqW21kfR7mZXV0MlESiefxQQE9X9fTa3X+2MPDQ==", - "hasInstallScript": true, - "dependencies": { - "node-addon-api": "^2.0.0", - "node-gyp-build": "^4.2.0", - "readable-stream": "^3.6.0" - }, + "node_modules/get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", "engines": { - "node": ">=10.0.0" + "node": "6.* || 8.* || >= 10.*" } }, - "node_modules/keyv": { - "version": "4.5.2", - "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.2.tgz", - "integrity": "sha512-5MHbFaKn8cNSmVW7BYnijeAVlE4cYA/SVkifVgrh7yotnfhKmjuXpDKjrABLnT0SfHWV21P8ow07OGfRrNDg8g==", - "dependencies": { - "json-buffer": "3.0.1" + "node_modules/get-func-name": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/get-func-name/-/get-func-name-2.0.0.tgz", + "integrity": "sha512-Hm0ixYtaSZ/V7C8FJrtZIuBBI+iSgL+1Aq82zSu8VQNB4S3Gk8e7Qs3VwBDJAhmRZcFqkl3tQu36g/Foh5I5ig==", + "engines": { + "node": "*" } }, - "node_modules/klaw": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/klaw/-/klaw-1.3.1.tgz", - "integrity": "sha512-TED5xi9gGQjGpNnvRWknrwAB1eL5GciPfVFOt3Vk1OJCVDQbzuSfrF3hkUQKlsgKrG1F+0t5W0m+Fje1jIt8rw==", - "optionalDependencies": { - "graceful-fs": "^4.1.9" - } - }, - "node_modules/lcid": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/lcid/-/lcid-1.0.0.tgz", - "integrity": "sha512-YiGkH6EnGrDGqLMITnGjXtGmNtjoXw9SVUzcaos8RBi7Ps0VBylkq+vOcY9QE5poLasPCR849ucFUkl0UzUyOw==", + "node_modules/get-intrinsic": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.3.tgz", + "integrity": "sha512-QJVz1Tj7MS099PevUG5jvnt9tSkXN8K14dxQlikJuPt4uD9hHAHjLyLBiLR5zELelBdD9QNRAXZzsJx0WaDL9A==", "dependencies": { - "invert-kv": "^1.0.0" + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.3" }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-port": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/get-port/-/get-port-3.2.0.tgz", + "integrity": "sha512-x5UJKlgeUiNT8nyo/AcnwLnZuZNcSjSw0kogRB+Whd1fjjFq4B1hySFxSFWWSn4mIBzg3sRNUDFYc4g5gjPoLg==", "engines": { - "node": ">=0.10.0" + "node": ">=4" } }, - "node_modules/level": { + "node_modules/get-stdin": { "version": "8.0.0", - "resolved": "https://registry.npmjs.org/level/-/level-8.0.0.tgz", - "integrity": "sha512-ypf0jjAk2BWI33yzEaaotpq7fkOPALKAgDBxggO6Q9HGX2MRXn0wbP1Jn/tJv1gtL867+YOjOB49WaUF3UoJNQ==", - "dependencies": { - "browser-level": "^1.0.1", - "classic-level": "^1.2.0" + "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-8.0.0.tgz", + "integrity": "sha512-sY22aA6xchAzprjyqmSEQv4UbAAzRN0L2dQB0NlN5acTTK9Don6nhoc3eAbUnpZiCANAMfd/+40kVdKfFygohg==", + "optional": true, + "engines": { + "node": ">=10" }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/get-stream": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", + "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", "engines": { - "node": ">=12" + "node": ">=10" }, "funding": { - "type": "opencollective", - "url": "https://opencollective.com/level" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/level-codec": { - "version": "9.0.2", - "resolved": "https://registry.npmjs.org/level-codec/-/level-codec-9.0.2.tgz", - "integrity": "sha512-UyIwNb1lJBChJnGfjmO0OR+ezh2iVu1Kas3nvBS/BzGnx79dv6g7unpKIDNPMhfdTEGoc7mC8uAu51XEtX+FHQ==", + "node_modules/get-symbol-description": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.0.tgz", + "integrity": "sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==", "dependencies": { - "buffer": "^5.6.0" + "call-bind": "^1.0.2", + "get-intrinsic": "^1.1.1" }, "engines": { - "node": ">=6" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/level-codec/node_modules/buffer": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", - "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], + "node_modules/getpass": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", + "integrity": "sha512-0fzj9JxOLfJ+XGLhR8ze3unN0KZCgZwiSSDz168VERjK8Wl8kVSdcu2kspd4s4wtAa1y/qrVRiAA0WclVsu0ng==", "dependencies": { - "base64-js": "^1.3.1", - "ieee754": "^1.1.13" - } - }, - "node_modules/level-concat-iterator": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/level-concat-iterator/-/level-concat-iterator-2.0.1.tgz", - "integrity": "sha512-OTKKOqeav2QWcERMJR7IS9CUo1sHnke2C0gkSmcR7QuEtFNLLzHQAvnMw8ykvEcv0Qtkg0p7FOwP1v9e5Smdcw==", - "engines": { - "node": ">=6" + "assert-plus": "^1.0.0" } }, - "node_modules/level-errors": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/level-errors/-/level-errors-2.0.1.tgz", - "integrity": "sha512-UVprBJXite4gPS+3VznfgDSU8PTRuVX0NXwoWW50KLxd2yw4Y1t2JUR5In1itQnudZqRMT9DlAM3Q//9NCjCFw==", + "node_modules/glob": { + "version": "8.0.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-8.0.3.tgz", + "integrity": "sha512-ull455NHSHI/Y1FqGaaYFaLGkNMMJbavMrEGFXG/PGrg6y7sutWHUHrz6gy6WEBH6akM1M414dWKCNs+IhKdiQ==", "dependencies": { - "errno": "~0.1.1" + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^5.0.1", + "once": "^1.3.0" }, "engines": { - "node": ">=6" + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/level-iterator-stream": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/level-iterator-stream/-/level-iterator-stream-4.0.2.tgz", - "integrity": "sha512-ZSthfEqzGSOMWoUGhTXdX9jv26d32XJuHz/5YnuHZzH6wldfWMOVwI9TBtKcya4BKTyTt3XVA0A3cF3q5CY30Q==", + "node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", "dependencies": { - "inherits": "^2.0.4", - "readable-stream": "^3.4.0", - "xtend": "^4.0.2" + "is-glob": "^4.0.1" }, "engines": { - "node": ">=6" - } - }, - "node_modules/level-js": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/level-js/-/level-js-5.0.2.tgz", - "integrity": "sha512-SnBIDo2pdO5VXh02ZmtAyPP6/+6YTJg2ibLtl9C34pWvmtMEmRTWpra+qO/hifkUtBTOtfx6S9vLDjBsBK4gRg==", - "optional": true, - "dependencies": { - "abstract-leveldown": "~6.2.3", - "buffer": "^5.5.0", - "inherits": "^2.0.3", - "ltgt": "^2.1.2" + "node": ">= 6" } }, - "node_modules/level-js/node_modules/abstract-leveldown": { - "version": "6.2.3", - "resolved": "https://registry.npmjs.org/abstract-leveldown/-/abstract-leveldown-6.2.3.tgz", - "integrity": "sha512-BsLm5vFMRUrrLeCcRc+G0t2qOaTzpoJQLOubq2XM72eNpjF5UdU5o/5NvlNhx95XHcAvcl8OMXr4mlg/fRgUXQ==", - "optional": true, + "node_modules/glob-promise": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/glob-promise/-/glob-promise-3.4.0.tgz", + "integrity": "sha512-q08RJ6O+eJn+dVanerAndJwIcumgbDdYiUT7zFQl3Wm1xD6fBKtah7H8ZJChj4wP+8C+QfeVy8xautR7rdmKEw==", "dependencies": { - "buffer": "^5.5.0", - "immediate": "^3.2.3", - "level-concat-iterator": "~2.0.0", - "level-supports": "~1.0.0", - "xtend": "~4.0.0" + "@types/glob": "*" }, "engines": { - "node": ">=6" + "node": ">=4" + }, + "peerDependencies": { + "glob": "*" } }, - "node_modules/level-js/node_modules/buffer": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", - "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "optional": true, + "node_modules/global": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/global/-/global-4.4.0.tgz", + "integrity": "sha512-wv/LAoHdRE3BeTGz53FAamhGlPLhlssK45usmGFThIi4XqnBmjKQ16u+RNbP7WvigRZDxUsM0J3gcQ5yicaL0w==", "dependencies": { - "base64-js": "^1.3.1", - "ieee754": "^1.1.13" + "min-document": "^2.19.0", + "process": "^0.11.10" } }, - "node_modules/level-js/node_modules/level-supports": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/level-supports/-/level-supports-1.0.1.tgz", - "integrity": "sha512-rXM7GYnW8gsl1vedTJIbzOrRv85c/2uCMpiiCzO2fndd06U/kUXEEU9evYn4zFggBOg36IsBW8LzqIpETwwQzg==", - "optional": true, - "dependencies": { - "xtend": "^4.0.2" - }, + "node_modules/globals": { + "version": "11.12.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", + "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", + "peer": true, "engines": { - "node": ">=6" + "node": ">=4" } }, - "node_modules/level-mem": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/level-mem/-/level-mem-5.0.1.tgz", - "integrity": "sha512-qd+qUJHXsGSFoHTziptAKXoLX87QjR7v2KMbqncDXPxQuCdsQlzmyX+gwrEHhlzn08vkf8TyipYyMmiC6Gobzg==", + "node_modules/got": { + "version": "12.1.0", + "resolved": "https://registry.npmjs.org/got/-/got-12.1.0.tgz", + "integrity": "sha512-hBv2ty9QN2RdbJJMK3hesmSkFTjVIHyIDDbssCKnSmq62edGgImJWD10Eb1k77TiV1bxloxqcFAVK8+9pkhOig==", "dependencies": { - "level-packager": "^5.0.3", - "memdown": "^5.0.0" + "@sindresorhus/is": "^4.6.0", + "@szmarczak/http-timer": "^5.0.1", + "@types/cacheable-request": "^6.0.2", + "@types/responselike": "^1.0.0", + "cacheable-lookup": "^6.0.4", + "cacheable-request": "^7.0.2", + "decompress-response": "^6.0.0", + "form-data-encoder": "1.7.1", + "get-stream": "^6.0.1", + "http2-wrapper": "^2.1.10", + "lowercase-keys": "^3.0.0", + "p-cancelable": "^3.0.0", + "responselike": "^2.0.0" }, "engines": { - "node": ">=6" + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sindresorhus/got?sponsor=1" } }, - "node_modules/level-packager": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/level-packager/-/level-packager-5.1.1.tgz", - "integrity": "sha512-HMwMaQPlTC1IlcwT3+swhqf/NUO+ZhXVz6TY1zZIIZlIR0YSn8GtAAWmIvKjNY16ZkEg/JcpAuQskxsXqC0yOQ==", + "node_modules/got/node_modules/decompress-response": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-6.0.0.tgz", + "integrity": "sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==", "dependencies": { - "encoding-down": "^6.3.0", - "levelup": "^4.3.2" + "mimic-response": "^3.1.0" }, "engines": { - "node": ">=6" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/level-supports": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/level-supports/-/level-supports-4.0.1.tgz", - "integrity": "sha512-PbXpve8rKeNcZ9C1mUicC9auIYFyGpkV9/i6g76tLgANwWhtG2v7I4xNBUlkn3lE2/dZF3Pi0ygYGtLc4RXXdA==", + "node_modules/got/node_modules/mimic-response": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-3.1.0.tgz", + "integrity": "sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==", "engines": { - "node": ">=12" - } - }, - "node_modules/level-transcoder": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/level-transcoder/-/level-transcoder-1.0.1.tgz", - "integrity": "sha512-t7bFwFtsQeD8cl8NIoQ2iwxA0CL/9IFw7/9gAjOonH0PWTTiRfY7Hq+Ejbsxh86tXobDQ6IOiddjNYIfOBs06w==", - "dependencies": { - "buffer": "^6.0.3", - "module-error": "^1.0.1" + "node": ">=10" }, - "engines": { - "node": ">=12" - } - }, - "node_modules/level-write-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/level-write-stream/-/level-write-stream-1.0.0.tgz", - "integrity": "sha512-bBNKOEOMl8msO+uIM9YX/gUO6ckokZ/4pCwTm/lwvs46x6Xs8Zy0sn3Vh37eDqse4mhy4fOMIb/JsSM2nyQFtw==", - "optional": true, - "dependencies": { - "end-stream": "~0.1.0" + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/level-ws": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/level-ws/-/level-ws-2.0.0.tgz", - "integrity": "sha512-1iv7VXx0G9ec1isqQZ7y5LmoZo/ewAsyDHNA8EFDW5hqH2Kqovm33nSFkSdnLLAK+I5FlT+lo5Cw9itGe+CpQA==", - "dependencies": { - "inherits": "^2.0.3", - "readable-stream": "^3.1.0", - "xtend": "^4.0.1" - }, - "engines": { - "node": ">=6" - } + "node_modules/graceful-fs": { + "version": "4.2.10", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz", + "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==" }, - "node_modules/leveldown": { - "version": "5.6.0", - "resolved": "https://registry.npmjs.org/leveldown/-/leveldown-5.6.0.tgz", - "integrity": "sha512-iB8O/7Db9lPaITU1aA2txU/cBEXAt4vWwKQRrrWuS6XDgbP4QZGj9BL2aNbwb002atoQ/lIotJkfyzz+ygQnUQ==", - "hasInstallScript": true, + "node_modules/graphql": { + "version": "15.8.0", + "resolved": "https://registry.npmjs.org/graphql/-/graphql-15.8.0.tgz", + "integrity": "sha512-5gghUc24tP9HRznNpV2+FIoq3xKkj5dTQqf4v0CpdPbFVwFkWoxOM+o+2OC9ZSvjEMTjfmG9QT+gcvggTwW1zw==", "optional": true, - "dependencies": { - "abstract-leveldown": "~6.2.1", - "napi-macros": "~2.0.0", - "node-gyp-build": "~4.1.0" - }, "engines": { - "node": ">=8.6.0" + "node": ">= 10.x" } }, - "node_modules/leveldown/node_modules/abstract-leveldown": { - "version": "6.2.3", - "resolved": "https://registry.npmjs.org/abstract-leveldown/-/abstract-leveldown-6.2.3.tgz", - "integrity": "sha512-BsLm5vFMRUrrLeCcRc+G0t2qOaTzpoJQLOubq2XM72eNpjF5UdU5o/5NvlNhx95XHcAvcl8OMXr4mlg/fRgUXQ==", + "node_modules/graphql-tag": { + "version": "2.12.6", + "resolved": "https://registry.npmjs.org/graphql-tag/-/graphql-tag-2.12.6.tgz", + "integrity": "sha512-FdSNcu2QQcWnM2VNvSCCDCVS5PpPqpzgFT8+GXzqJuoDd0CBncxCY278u4mhRO7tMgo2JjgJA5aZ+nWSQ/Z+xg==", "optional": true, "dependencies": { - "buffer": "^5.5.0", - "immediate": "^3.2.3", - "level-concat-iterator": "~2.0.0", - "level-supports": "~1.0.0", - "xtend": "~4.0.0" + "tslib": "^2.1.0" }, "engines": { - "node": ">=6" - } - }, - "node_modules/leveldown/node_modules/buffer": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", - "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "optional": true, - "dependencies": { - "base64-js": "^1.3.1", - "ieee754": "^1.1.13" + "node": ">=10" + }, + "peerDependencies": { + "graphql": "^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0" } }, - "node_modules/leveldown/node_modules/level-supports": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/level-supports/-/level-supports-1.0.1.tgz", - "integrity": "sha512-rXM7GYnW8gsl1vedTJIbzOrRv85c/2uCMpiiCzO2fndd06U/kUXEEU9evYn4zFggBOg36IsBW8LzqIpETwwQzg==", - "optional": true, - "dependencies": { - "xtend": "^4.0.2" - }, + "node_modules/growl": { + "version": "1.10.5", + "resolved": "https://registry.npmjs.org/growl/-/growl-1.10.5.tgz", + "integrity": "sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA==", "engines": { - "node": ">=6" + "node": ">=4.x" } }, - "node_modules/leveldown/node_modules/node-gyp-build": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.1.1.tgz", - "integrity": "sha512-dSq1xmcPDKPZ2EED2S6zw/b9NKsqzXRE6dVr8TVQnI3FJOTteUMuqF3Qqs6LZg+mLGYJWqQzMbIjMtJqTv87nQ==", - "optional": true, - "bin": { - "node-gyp-build": "bin.js", - "node-gyp-build-optional": "optional.js", - "node-gyp-build-test": "build-test.js" + "node_modules/har-schema": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz", + "integrity": "sha512-Oqluz6zhGX8cyRaTQlFMPw80bSJVG2x/cFb8ZPhUILGgHka9SsokCCOQgpveePerqidZOrT14ipqfJb7ILcW5Q==", + "engines": { + "node": ">=4" } }, - "node_modules/levelup": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/levelup/-/levelup-4.4.0.tgz", - "integrity": "sha512-94++VFO3qN95cM/d6eBXvd894oJE0w3cInq9USsyQzzoJxmiYzPAocNcuGCPGGjoXqDVJcr3C1jzt1TSjyaiLQ==", + "node_modules/har-validator": { + "version": "5.1.5", + "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.5.tgz", + "integrity": "sha512-nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w==", + "deprecated": "this library is no longer supported", "dependencies": { - "deferred-leveldown": "~5.3.0", - "level-errors": "~2.0.0", - "level-iterator-stream": "~4.0.0", - "level-supports": "~1.0.0", - "xtend": "~4.0.0" + "ajv": "^6.12.3", + "har-schema": "^2.0.0" }, "engines": { "node": ">=6" } }, - "node_modules/levelup/node_modules/level-supports": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/level-supports/-/level-supports-1.0.1.tgz", - "integrity": "sha512-rXM7GYnW8gsl1vedTJIbzOrRv85c/2uCMpiiCzO2fndd06U/kUXEEU9evYn4zFggBOg36IsBW8LzqIpETwwQzg==", + "node_modules/hardhat": { + "version": "2.17.3", + "resolved": "https://registry.npmjs.org/hardhat/-/hardhat-2.17.3.tgz", + "integrity": "sha512-SFZoYVXW1bWJZrIIKXOA+IgcctfuKXDwENywiYNT2dM3YQc4fXNaTbuk/vpPzHIF50upByx4zW5EqczKYQubsA==", "dependencies": { - "xtend": "^4.0.2" + "@ethersproject/abi": "^5.1.2", + "@metamask/eth-sig-util": "^4.0.0", + "@nomicfoundation/ethereumjs-block": "5.0.2", + "@nomicfoundation/ethereumjs-blockchain": "7.0.2", + "@nomicfoundation/ethereumjs-common": "4.0.2", + "@nomicfoundation/ethereumjs-evm": "2.0.2", + "@nomicfoundation/ethereumjs-rlp": "5.0.2", + "@nomicfoundation/ethereumjs-statemanager": "2.0.2", + "@nomicfoundation/ethereumjs-trie": "6.0.2", + "@nomicfoundation/ethereumjs-tx": "5.0.2", + "@nomicfoundation/ethereumjs-util": "9.0.2", + "@nomicfoundation/ethereumjs-vm": "7.0.2", + "@nomicfoundation/solidity-analyzer": "^0.1.0", + "@sentry/node": "^5.18.1", + "@types/bn.js": "^5.1.0", + "@types/lru-cache": "^5.1.0", + "adm-zip": "^0.4.16", + "aggregate-error": "^3.0.0", + "ansi-escapes": "^4.3.0", + "chalk": "^2.4.2", + "chokidar": "^3.4.0", + "ci-info": "^2.0.0", + "debug": "^4.1.1", + "enquirer": "^2.3.0", + "env-paths": "^2.2.0", + "ethereum-cryptography": "^1.0.3", + "ethereumjs-abi": "^0.6.8", + "find-up": "^2.1.0", + "fp-ts": "1.19.3", + "fs-extra": "^7.0.1", + "glob": "7.2.0", + "immutable": "^4.0.0-rc.12", + "io-ts": "1.10.4", + "keccak": "^3.0.2", + "lodash": "^4.17.11", + "mnemonist": "^0.38.0", + "mocha": "^10.0.0", + "p-map": "^4.0.0", + "raw-body": "^2.4.1", + "resolve": "1.17.0", + "semver": "^6.3.0", + "solc": "0.7.3", + "source-map-support": "^0.5.13", + "stacktrace-parser": "^0.1.10", + "tsort": "0.0.1", + "undici": "^5.14.0", + "uuid": "^8.3.2", + "ws": "^7.4.6" }, - "engines": { - "node": ">=6" + "bin": { + "hardhat": "internal/cli/bootstrap.js" + }, + "peerDependencies": { + "ts-node": "*", + "typescript": "*" + }, + "peerDependenciesMeta": { + "ts-node": { + "optional": true + }, + "typescript": { + "optional": true + } } }, - "node_modules/load-json-file": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz", - "integrity": "sha512-cy7ZdNRXdablkXYNI049pthVeXFurRyb9+hA/dZzerZ0pGTx42z+y+ssxBaVV2l70t1muq5IdKhn4UtcoGUY9A==", + "node_modules/hardhat-contract-sizer": { + "version": "2.10.0", + "resolved": "https://registry.npmjs.org/hardhat-contract-sizer/-/hardhat-contract-sizer-2.10.0.tgz", + "integrity": "sha512-QiinUgBD5MqJZJh1hl1jc9dNnpJg7eE/w4/4GEnrcmZJJTDbVFNe3+/3Ep24XqISSkYxRz36czcPHKHd/a0dwA==", "dependencies": { - "graceful-fs": "^4.1.2", - "parse-json": "^2.2.0", - "pify": "^2.0.0", - "pinkie-promise": "^2.0.0", - "strip-bom": "^2.0.0" + "chalk": "^4.0.0", + "cli-table3": "^0.6.0", + "strip-ansi": "^6.0.0" }, - "engines": { - "node": ">=0.10.0" + "peerDependencies": { + "hardhat": "^2.0.0" } }, - "node_modules/load-json-file/node_modules/pify": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", - "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==", + "node_modules/hardhat-contract-sizer/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", "engines": { - "node": ">=0.10.0" + "node": ">=8" } }, - "node_modules/locate-path": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "node_modules/hardhat-contract-sizer/node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", "dependencies": { - "p-locate": "^4.1.0" + "ansi-regex": "^5.0.1" }, "engines": { "node": ">=8" } }, - "node_modules/lodash": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" - }, - "node_modules/lodash-es": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash-es/-/lodash-es-4.17.21.tgz", - "integrity": "sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw==" - }, - "node_modules/lodash.assign": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/lodash.assign/-/lodash.assign-4.2.0.tgz", - "integrity": "sha512-hFuH8TY+Yji7Eja3mGiuAxBqLagejScbG8GbG0j6o9vzn0YL14My+ktnqtZgFTosKymC9/44wP6s7xyuLfnClw==" - }, - "node_modules/lodash.camelcase": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz", - "integrity": "sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA==", - "dev": true - }, - "node_modules/lodash.debounce": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz", - "integrity": "sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==" - }, - "node_modules/lodash.defaults": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/lodash.defaults/-/lodash.defaults-4.2.0.tgz", - "integrity": "sha512-qjxPLHd3r5DnsdGacqOMU6pb/avJzdh9tFX2ymgoZE27BmjXrNy/y4LoaiTeAb+O3gL8AfpJGtqfX/ae2leYYQ==" - }, - "node_modules/lodash.flatten": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/lodash.flatten/-/lodash.flatten-4.4.0.tgz", - "integrity": "sha512-C5N2Z3DgnnKr0LOpv/hKCgKdb7ZZwafIrsesve6lmzvZIRZRGaZ/l6Q8+2W7NaT+ZwO3fFlSCzCzrDCFdJfZ4g==", - "dev": true - }, - "node_modules/lodash.merge": { - "version": "4.6.2", - "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", - "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", - "dev": true - }, - "node_modules/lodash.sortby": { - "version": "4.7.0", - "resolved": "https://registry.npmjs.org/lodash.sortby/-/lodash.sortby-4.7.0.tgz", - "integrity": "sha512-HDWXG8isMntAyRF5vZ7xKuEvOhT4AhlRt/3czTSjvGUxjYCBVRQY48ViDHyfYz9VIoBkW4TMGQNapx+l3RUwdA==", - "optional": true - }, - "node_modules/lodash.truncate": { - "version": "4.4.2", - "resolved": "https://registry.npmjs.org/lodash.truncate/-/lodash.truncate-4.4.2.tgz", - "integrity": "sha512-jttmRe7bRse52OsWIMDLaXxWqRAmtIUccAQ3garviCqJjafXOfNMO0yMfNpdD6zbGaTU0P5Nz7e7gAT6cKmJRw==", - "dev": true + "node_modules/hardhat-deploy": { + "version": "0.11.37", + "resolved": "https://registry.npmjs.org/hardhat-deploy/-/hardhat-deploy-0.11.37.tgz", + "integrity": "sha512-pohPSEEo/X9Yfv0Fc0kXBQW6JO0LNOILBGCP69Ci1COJvLht1hLjAtXt/hccyvD9qY/uwJAM75fmsf41Y9N7lg==", + "dev": true, + "dependencies": { + "@ethersproject/abi": "^5.7.0", + "@ethersproject/abstract-signer": "^5.7.0", + "@ethersproject/address": "^5.7.0", + "@ethersproject/bignumber": "^5.7.0", + "@ethersproject/bytes": "^5.7.0", + "@ethersproject/constants": "^5.7.0", + "@ethersproject/contracts": "^5.7.0", + "@ethersproject/providers": "^5.7.2", + "@ethersproject/solidity": "^5.7.0", + "@ethersproject/transactions": "^5.7.0", + "@ethersproject/wallet": "^5.7.0", + "@types/qs": "^6.9.7", + "axios": "^0.21.1", + "chalk": "^4.1.2", + "chokidar": "^3.5.2", + "debug": "^4.3.2", + "enquirer": "^2.3.6", + "ethers": "^5.5.3", + "form-data": "^4.0.0", + "fs-extra": "^10.0.0", + "match-all": "^1.2.6", + "murmur-128": "^0.2.1", + "qs": "^6.9.4", + "zksync-web3": "^0.14.3" + } }, - "node_modules/log-symbols": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", - "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", + "node_modules/hardhat-deploy/node_modules/form-data": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz", + "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==", + "dev": true, "dependencies": { - "chalk": "^4.1.0", - "is-unicode-supported": "^0.1.0" + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "mime-types": "^2.1.12" }, "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">= 6" } }, - "node_modules/loglevel": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/loglevel/-/loglevel-1.8.1.tgz", - "integrity": "sha512-tCRIJM51SHjAayKwC+QAg8hT8vg6z7GSgLJKGvzuPb1Wc+hLzqtuVLxp6/HzSPOozuK+8ErAhy7U/sVzw8Dgfg==", - "optional": true, - "engines": { - "node": ">= 0.6.0" + "node_modules/hardhat-deploy/node_modules/fs-extra": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz", + "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==", + "dev": true, + "dependencies": { + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" }, - "funding": { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/loglevel" + "engines": { + "node": ">=12" } }, - "node_modules/long": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/long/-/long-4.0.0.tgz", - "integrity": "sha512-XsP+KhQif4bjX1kbuSiySJFNAehNxgLb6hPRGJ9QsUr8ajHkuXGdrHmFUTUUXhDwVX2R5bY4JNZEwbUiMhV+MA==", - "optional": true - }, - "node_modules/loose-envify": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", - "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", + "node_modules/hardhat-gas-reporter": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/hardhat-gas-reporter/-/hardhat-gas-reporter-1.0.9.tgz", + "integrity": "sha512-INN26G3EW43adGKBNzYWOlI3+rlLnasXTwW79YNnUhXPDa+yHESgt639dJEs37gCjhkbNKcRRJnomXEuMFBXJg==", "dependencies": { - "js-tokens": "^3.0.0 || ^4.0.0" + "array-uniq": "1.0.3", + "eth-gas-reporter": "^0.2.25", + "sha1": "^1.1.1" }, - "bin": { - "loose-envify": "cli.js" + "peerDependencies": { + "hardhat": "^2.0.2" } }, - "node_modules/loupe": { - "version": "2.3.4", - "resolved": "https://registry.npmjs.org/loupe/-/loupe-2.3.4.tgz", - "integrity": "sha512-OvKfgCC2Ndby6aSTREl5aCCPTNIzlDfQZvZxNUrBrihDhL3xcrYegTblhmEiCrg2kKQz4XsFIaemE5BF4ybSaQ==", - "dependencies": { - "get-func-name": "^2.0.0" + "node_modules/hardhat-spdx-license-identifier": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/hardhat-spdx-license-identifier/-/hardhat-spdx-license-identifier-2.1.0.tgz", + "integrity": "sha512-Z3Avr/v6lfDfa7qkriF/h40X8wmuy8qZfS4HgbINkDdmCiKAxQUi5Y5TgsJBZFYN1MvYzLTIbD/fo1dxZ4gsng==", + "peerDependencies": { + "hardhat": "^2.0.0" } }, - "node_modules/lower-case": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/lower-case/-/lower-case-1.1.4.tgz", - "integrity": "sha512-2Fgx1Ycm599x+WGpIYwJOvsjmXFzTSc34IwDWALRA/8AopUKAVPwfJ+h5+f85BCp0PWmmJcWzEpxOpoXycMpdA==" - }, - "node_modules/lower-case-first": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/lower-case-first/-/lower-case-first-1.0.2.tgz", - "integrity": "sha512-UuxaYakO7XeONbKrZf5FEgkantPf5DUqDayzP5VXZrtRPdH86s4kN47I8B3TW10S4QKiE3ziHNf3kRN//okHjA==", + "node_modules/hardhat-tracer": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/hardhat-tracer/-/hardhat-tracer-2.6.0.tgz", + "integrity": "sha512-omsGd9NN5i0WmIFuEVZIxULfu5v6zU4/Vx+6oIVmziIJdQgZacmP5VmtVhnJEQd7IPDZNQAa+iBbW827g/ErFQ==", "dependencies": { - "lower-case": "^1.1.2" - } - }, - "node_modules/lowercase-keys": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-3.0.0.tgz", - "integrity": "sha512-ozCC6gdQ+glXOQsveKD0YsDy8DSQFjDTz4zyzEHNV5+JP5D62LmfDZ6o1cycFx9ouG940M5dE8C8CTewdj2YWQ==", - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + "chalk": "^4.1.2", + "debug": "^4.3.4", + "ethers": "^5.6.1" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "peerDependencies": { + "chai": "4.x", + "hardhat": ">=2.16 <3.x" } }, - "node_modules/lru_map": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/lru_map/-/lru_map-0.3.3.tgz", - "integrity": "sha512-Pn9cox5CsMYngeDbmChANltQl+5pi6XmTrraMSzhPmMBbmgcxmqWry0U3PGapCU1yB4/LqCcom7qhHZiF/jGfQ==" - }, - "node_modules/lru-cache": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", - "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", + "node_modules/hardhat-watcher": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/hardhat-watcher/-/hardhat-watcher-2.5.0.tgz", + "integrity": "sha512-Su2qcSMIo2YO2PrmJ0/tdkf+6pSt8zf9+4URR5edMVti6+ShI8T3xhPrwugdyTOFuyj8lKHrcTZNKUFYowYiyA==", "dependencies": { - "yallist": "^3.0.2" + "chokidar": "^3.5.3" + }, + "peerDependencies": { + "hardhat": "^2.0.0" } }, - "node_modules/ltgt": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/ltgt/-/ltgt-2.2.1.tgz", - "integrity": "sha512-AI2r85+4MquTw9ZYqabu4nMwy9Oftlfa/e/52t9IjtfG+mGBbTNdAoZ3RQKLHR6r0wQnwZnPIEh/Ya6XTWAKNA==" - }, - "node_modules/make-dir": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-1.3.0.tgz", - "integrity": "sha512-2w31R7SJtieJJnQtGc7RVL2StM2vGYVfqUOvUDxH6bC6aJTxPxTF0GnIgCyu7tjockiUWAYQRbxa7vKn34s5sQ==", + "node_modules/hardhat/node_modules/ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", "dependencies": { - "pify": "^3.0.0" + "color-convert": "^1.9.0" }, "engines": { "node": ">=4" } }, - "node_modules/make-error": { - "version": "1.3.6", - "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", - "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==", - "optional": true, - "peer": true - }, - "node_modules/markdown-table": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/markdown-table/-/markdown-table-1.1.3.tgz", - "integrity": "sha512-1RUZVgQlpJSPWYbFSpmudq5nHY1doEIv89gBtF0s4gW1GF2XorxcA/70M5vq7rLv0a6mhOUccRsqkwhwLCIQ2Q==" - }, - "node_modules/match-all": { - "version": "1.2.6", - "resolved": "https://registry.npmjs.org/match-all/-/match-all-1.2.6.tgz", - "integrity": "sha512-0EESkXiTkWzrQQntBu2uzKvLu6vVkUGz40nGPbSZuegcfE5UuSzNjLaIu76zJWuaT/2I3Z/8M06OlUOZLGwLlQ==", - "dev": true - }, - "node_modules/mathjs": { - "version": "11.8.0", - "resolved": "https://registry.npmjs.org/mathjs/-/mathjs-11.8.0.tgz", - "integrity": "sha512-I7r8HCoqUGyEiHQdeOCF2m2k9N+tcOHO3cZQ3tyJkMMBQMFqMR7dMQEboBMJAiFW2Um3PEItGPwcOc4P6KRqwg==", + "node_modules/hardhat/node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", "dependencies": { - "@babel/runtime": "^7.21.0", - "complex.js": "^2.1.1", - "decimal.js": "^10.4.3", - "escape-latex": "^1.2.0", - "fraction.js": "^4.2.0", - "javascript-natural-sort": "^0.7.1", - "seedrandom": "^3.0.5", - "tiny-emitter": "^2.1.0", - "typed-function": "^4.1.0" - }, - "bin": { - "mathjs": "bin/cli.js" - }, - "engines": { - "node": ">= 14" + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" } }, - "node_modules/mcl-wasm": { - "version": "0.7.9", - "resolved": "https://registry.npmjs.org/mcl-wasm/-/mcl-wasm-0.7.9.tgz", - "integrity": "sha512-iJIUcQWA88IJB/5L15GnJVnSQJmf/YaxxV6zRavv83HILHaJQb6y0iFyDMdDO0gN8X37tdxmAOrH/P8B6RB8sQ==", + "node_modules/hardhat/node_modules/chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, "engines": { - "node": ">=8.9.0" + "node": ">=4" } }, - "node_modules/md5.js": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/md5.js/-/md5.js-1.3.5.tgz", - "integrity": "sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==", + "node_modules/hardhat/node_modules/color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", "dependencies": { - "hash-base": "^3.0.0", - "inherits": "^2.0.1", - "safe-buffer": "^5.1.2" + "color-name": "1.1.3" } }, - "node_modules/media-typer": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", - "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==", - "engines": { - "node": ">= 0.6" - } + "node_modules/hardhat/node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==" }, - "node_modules/memdown": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/memdown/-/memdown-5.1.0.tgz", - "integrity": "sha512-B3J+UizMRAlEArDjWHTMmadet+UKwHd3UjMgGBkZcKAxAYVPS9o0Yeiha4qvz7iGiL2Sb3igUft6p7nbFWctpw==", - "dependencies": { - "abstract-leveldown": "~6.2.1", - "functional-red-black-tree": "~1.0.1", - "immediate": "~3.2.3", - "inherits": "~2.0.1", - "ltgt": "~2.2.0", - "safe-buffer": "~5.2.0" - }, + "node_modules/hardhat/node_modules/commander": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/commander/-/commander-3.0.2.tgz", + "integrity": "sha512-Gar0ASD4BDyKC4hl4DwHqDrmvjoxWKZigVnAbn5H1owvm4CxCPdb0HQDehwNYMJpla5+M2tPmPARzhtYuwpHow==" + }, + "node_modules/hardhat/node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", "engines": { - "node": ">=6" + "node": ">=0.8.0" } }, - "node_modules/memdown/node_modules/abstract-leveldown": { - "version": "6.2.3", - "resolved": "https://registry.npmjs.org/abstract-leveldown/-/abstract-leveldown-6.2.3.tgz", - "integrity": "sha512-BsLm5vFMRUrrLeCcRc+G0t2qOaTzpoJQLOubq2XM72eNpjF5UdU5o/5NvlNhx95XHcAvcl8OMXr4mlg/fRgUXQ==", + "node_modules/hardhat/node_modules/find-up": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", + "integrity": "sha512-NWzkk0jSJtTt08+FBFMvXoeZnOJD+jTtsRmBYbAIzJdX6l7dLgR7CTubCM5/eDdPUBvLCeVasP1brfVR/9/EZQ==", "dependencies": { - "buffer": "^5.5.0", - "immediate": "^3.2.3", - "level-concat-iterator": "~2.0.0", - "level-supports": "~1.0.0", - "xtend": "~4.0.0" + "locate-path": "^2.0.0" }, "engines": { - "node": ">=6" - } - }, - "node_modules/memdown/node_modules/buffer": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", - "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "dependencies": { - "base64-js": "^1.3.1", - "ieee754": "^1.1.13" + "node": ">=4" } }, - "node_modules/memdown/node_modules/immediate": { - "version": "3.2.3", - "resolved": "https://registry.npmjs.org/immediate/-/immediate-3.2.3.tgz", - "integrity": "sha512-RrGCXRm/fRVqMIhqXrGEX9rRADavPiDFSoMb/k64i9XMk8uH4r/Omi5Ctierj6XzNecwDbO4WuFbDD1zmpl3Tg==" - }, - "node_modules/memdown/node_modules/level-supports": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/level-supports/-/level-supports-1.0.1.tgz", - "integrity": "sha512-rXM7GYnW8gsl1vedTJIbzOrRv85c/2uCMpiiCzO2fndd06U/kUXEEU9evYn4zFggBOg36IsBW8LzqIpETwwQzg==", + "node_modules/hardhat/node_modules/fs-extra": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-7.0.1.tgz", + "integrity": "sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==", "dependencies": { - "xtend": "^4.0.2" + "graceful-fs": "^4.1.2", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" }, "engines": { - "node": ">=6" + "node": ">=6 <7 || >=8" } }, - "node_modules/memory-level": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/memory-level/-/memory-level-1.0.0.tgz", - "integrity": "sha512-UXzwewuWeHBz5krr7EvehKcmLFNoXxGcvuYhC41tRnkrTbJohtS7kVn9akmgirtRygg+f7Yjsfi8Uu5SGSQ4Og==", + "node_modules/hardhat/node_modules/glob": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz", + "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==", "dependencies": { - "abstract-level": "^1.0.0", - "functional-red-black-tree": "^1.0.1", - "module-error": "^1.0.1" + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" }, "engines": { - "node": ">=12" + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/memorystream": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/memorystream/-/memorystream-0.3.1.tgz", - "integrity": "sha512-S3UwM3yj5mtUSEfP41UZmt/0SCoVYUcU1rkXv+BQ5Ig8ndL4sPoJNBUJERafdPb5jjHJGuMgytgKvKIf58XNBw==", + "node_modules/hardhat/node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", "engines": { - "node": ">= 0.10.0" + "node": ">=4" } }, - "node_modules/merge-descriptors": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", - "integrity": "sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w==" - }, - "node_modules/merkle-patricia-tree": { - "version": "4.2.4", - "resolved": "https://registry.npmjs.org/merkle-patricia-tree/-/merkle-patricia-tree-4.2.4.tgz", - "integrity": "sha512-eHbf/BG6eGNsqqfbLED9rIqbsF4+sykEaBn6OLNs71tjclbMcMOk1tEPmJKcNcNCLkvbpY/lwyOlizWsqPNo8w==", - "dependencies": { - "@types/levelup": "^4.3.0", - "ethereumjs-util": "^7.1.4", - "level-mem": "^5.0.1", - "level-ws": "^2.0.0", - "readable-stream": "^3.6.0", - "semaphore-async-await": "^1.5.1" + "node_modules/hardhat/node_modules/jsonfile": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", + "integrity": "sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==", + "optionalDependencies": { + "graceful-fs": "^4.1.6" } }, - "node_modules/methods": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", - "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==", + "node_modules/hardhat/node_modules/locate-path": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", + "integrity": "sha512-NCI2kiDkyR7VeEKm27Kda/iQHyKJe1Bu0FlTbYp3CqJu+9IFe9bLyAjMxf5ZDDbEg+iMPzB5zYyUTSm8wVTKmA==", + "dependencies": { + "p-locate": "^2.0.0", + "path-exists": "^3.0.0" + }, "engines": { - "node": ">= 0.6" + "node": ">=4" } }, - "node_modules/micro-ftch": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/micro-ftch/-/micro-ftch-0.3.1.tgz", - "integrity": "sha512-/0LLxhzP0tfiR5hcQebtudP56gUurs2CLkGarnCiB/OqEyUFQ6U3paQi/tgLv0hBJYt2rnr9MNpxz4fiiugstg==" - }, - "node_modules/miller-rabin": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/miller-rabin/-/miller-rabin-4.0.1.tgz", - "integrity": "sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA==", + "node_modules/hardhat/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", "dependencies": { - "bn.js": "^4.0.0", - "brorand": "^1.0.1" + "brace-expansion": "^1.1.7" }, - "bin": { - "miller-rabin": "bin/miller-rabin" + "engines": { + "node": "*" } }, - "node_modules/miller-rabin/node_modules/bn.js": { - "version": "4.12.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==" - }, - "node_modules/mime": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", - "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", - "bin": { - "mime": "cli.js" + "node_modules/hardhat/node_modules/p-limit": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz", + "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==", + "dependencies": { + "p-try": "^1.0.0" }, "engines": { "node": ">=4" } }, - "node_modules/mime-db": { - "version": "1.52.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", - "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/mime-types": { - "version": "2.1.35", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", - "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "node_modules/hardhat/node_modules/p-locate": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz", + "integrity": "sha512-nQja7m7gSKuewoVRen45CtVfODR3crN3goVQ0DDZ9N3yHxgpkuBhZqsaiotSQRrADUrne346peY7kT3TSACykg==", "dependencies": { - "mime-db": "1.52.0" + "p-limit": "^1.1.0" }, "engines": { - "node": ">= 0.6" + "node": ">=4" } }, - "node_modules/mimic-fn": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-3.1.0.tgz", - "integrity": "sha512-Ysbi9uYW9hFyfrThdDEQuykN4Ey6BuwPD2kpI5ES/nFTDn/98yxYNLZJcgUAKPT/mcrLLKaGzJR9YVxJrIdASQ==", - "optional": true, + "node_modules/hardhat/node_modules/p-try": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz", + "integrity": "sha512-U1etNYuMJoIz3ZXSrrySFjsXQTWOx2/jdi86L+2pRvph/qMKL6sbcCYdH23fqsbm8TH2Gn0OybpT4eSFlCVHww==", "engines": { - "node": ">=8" + "node": ">=4" } }, - "node_modules/mimic-response": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-2.1.0.tgz", - "integrity": "sha512-wXqjST+SLt7R009ySCglWBCFpjUygmCIfD790/kVbiGmUgfYGuB14PiTd5DwVxSV4NcYHjzMkoj5LjQZwTQLEA==", - "optional": true, + "node_modules/hardhat/node_modules/path-exists": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", + "integrity": "sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==", "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=4" } }, - "node_modules/min-document": { - "version": "2.19.0", - "resolved": "https://registry.npmjs.org/min-document/-/min-document-2.19.0.tgz", - "integrity": "sha512-9Wy1B3m3f66bPPmU5hdA4DR4PB2OfDU/+GS3yAB7IQozE3tqXaVv2zOjgla7MEGSRv95+ILmOuvhLkOK6wJtCQ==", - "dependencies": { - "dom-walk": "^0.1.0" - } - }, - "node_modules/minimalistic-assert": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", - "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==" - }, - "node_modules/minimalistic-crypto-utils": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz", - "integrity": "sha512-JIYlbt6g8i5jKfJ3xz7rF0LXmv2TkDxBLUkiBeZ7bAx4GnnNMr8xFpGnOxn6GhTEHx3SjRrZEoU+j04prX1ktg==" + "node_modules/hardhat/node_modules/semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "bin": { + "semver": "bin/semver.js" + } }, - "node_modules/minimatch": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.0.tgz", - "integrity": "sha512-9TPBGGak4nHfGZsPBohm9AWg6NoT7QTCehS3BIJABslyZbzxfV78QM2Y6+i741OPZIafFAaiiEMh5OyIrJPgtg==", - "peer": true, + "node_modules/hardhat/node_modules/solc": { + "version": "0.7.3", + "resolved": "https://registry.npmjs.org/solc/-/solc-0.7.3.tgz", + "integrity": "sha512-GAsWNAjGzIDg7VxzP6mPjdurby3IkGCjQcM8GFYZT6RyaoUZKmMU6Y7YwG+tFGhv7dwZ8rmR4iwFDrrD99JwqA==", "dependencies": { - "brace-expansion": "^2.0.1" + "command-exists": "^1.2.8", + "commander": "3.0.2", + "follow-redirects": "^1.12.1", + "fs-extra": "^0.30.0", + "js-sha3": "0.8.0", + "memorystream": "^0.3.1", + "require-from-string": "^2.0.0", + "semver": "^5.5.0", + "tmp": "0.0.33" + }, + "bin": { + "solcjs": "solcjs" }, "engines": { - "node": ">=10" - } - }, - "node_modules/minimist": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.7.tgz", - "integrity": "sha512-bzfL1YUZsP41gmu/qjrEk0Q6i2ix/cVeAhbCbqH9u3zYutS1cLg00qhrD0M2MVdCcx4Sc0UpP2eBWo9rotpq6g==", - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": ">=8.0.0" } }, - "node_modules/minipass": { - "version": "2.9.0", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-2.9.0.tgz", - "integrity": "sha512-wxfUjg9WebH+CUDX/CdbRlh5SmfZiy/hpkxaRI16Y9W56Pa75sWgd/rvFilSgrauD9NyFymP/+JFV3KwzIsJeg==", + "node_modules/hardhat/node_modules/solc/node_modules/fs-extra": { + "version": "0.30.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-0.30.0.tgz", + "integrity": "sha512-UvSPKyhMn6LEd/WpUaV9C9t3zATuqoqfWc3QdPhPLb58prN9tqYPlPWi8Krxi44loBoUzlobqZ3+8tGpxxSzwA==", "dependencies": { - "safe-buffer": "^5.1.2", - "yallist": "^3.0.0" + "graceful-fs": "^4.1.2", + "jsonfile": "^2.1.0", + "klaw": "^1.0.0", + "path-is-absolute": "^1.0.0", + "rimraf": "^2.2.8" } }, - "node_modules/minizlib": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-1.3.3.tgz", - "integrity": "sha512-6ZYMOEnmVsdCeTJVE0W9ZD+pVnE8h9Hma/iOwwRDsdQoePpoX56/8B6z3P9VNwppJuBKNRuFDRNRqRWexT9G9Q==", - "dependencies": { - "minipass": "^2.9.0" + "node_modules/hardhat/node_modules/solc/node_modules/jsonfile": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-2.4.0.tgz", + "integrity": "sha512-PKllAqbgLgxHaj8TElYymKCAgrASebJrWpTnEkOaTowt23VKXXN0sUeriJ+eh7y6ufb/CC5ap11pz71/cM0hUw==", + "optionalDependencies": { + "graceful-fs": "^4.1.6" } }, - "node_modules/mkdirp": { - "version": "0.5.6", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", - "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", - "dependencies": { - "minimist": "^1.2.6" - }, + "node_modules/hardhat/node_modules/solc/node_modules/semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", "bin": { - "mkdirp": "bin/cmd.js" + "semver": "bin/semver" } }, - "node_modules/mkdirp-classic": { - "version": "0.5.3", - "resolved": "https://registry.npmjs.org/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz", - "integrity": "sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==" - }, - "node_modules/mkdirp-promise": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/mkdirp-promise/-/mkdirp-promise-5.0.1.tgz", - "integrity": "sha512-Hepn5kb1lJPtVW84RFT40YG1OddBNTOVUZR2bzQUHc+Z03en8/3uX0+060JDhcEzyO08HmipsN9DcnFMxhIL9w==", - "deprecated": "This package is broken and no longer maintained. 'mkdirp' itself supports promises now, please switch to that.", + "node_modules/hardhat/node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", "dependencies": { - "mkdirp": "*" + "has-flag": "^3.0.0" }, "engines": { "node": ">=4" } }, - "node_modules/mnemonist": { - "version": "0.38.5", - "resolved": "https://registry.npmjs.org/mnemonist/-/mnemonist-0.38.5.tgz", - "integrity": "sha512-bZTFT5rrPKtPJxj8KSV0WkPyNxl72vQepqqVUAW2ARUpUSF2qXMB6jZj7hW5/k7C1rtpzqbD/IIbJwLXUjCHeg==", - "dependencies": { - "obliterator": "^2.0.0" - } - }, - "node_modules/mocha": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/mocha/-/mocha-10.1.0.tgz", - "integrity": "sha512-vUF7IYxEoN7XhQpFLxQAEMtE4W91acW4B6En9l97MwE9stL1A9gusXfoHZCLVHDUJ/7V5+lbCM6yMqzo5vNymg==", - "dependencies": { - "ansi-colors": "4.1.1", - "browser-stdout": "1.3.1", - "chokidar": "3.5.3", - "debug": "4.3.4", - "diff": "5.0.0", - "escape-string-regexp": "4.0.0", - "find-up": "5.0.0", - "glob": "7.2.0", - "he": "1.2.0", - "js-yaml": "4.1.0", - "log-symbols": "4.1.0", - "minimatch": "5.0.1", - "ms": "2.1.3", - "nanoid": "3.3.3", - "serialize-javascript": "6.0.0", - "strip-json-comments": "3.1.1", - "supports-color": "8.1.1", - "workerpool": "6.2.1", - "yargs": "16.2.0", - "yargs-parser": "20.2.4", - "yargs-unparser": "2.0.0" - }, - "bin": { - "_mocha": "bin/_mocha", - "mocha": "bin/mocha.js" - }, + "node_modules/hardhat/node_modules/universalify": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", + "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", "engines": { - "node": ">= 14.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/mochajs" + "node": ">= 4.0.0" } }, - "node_modules/mocha/node_modules/ansi-colors": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz", - "integrity": "sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==", + "node_modules/hardhat/node_modules/ws": { + "version": "7.5.9", + "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.9.tgz", + "integrity": "sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q==", "engines": { - "node": ">=6" - } - }, - "node_modules/mocha/node_modules/find-up": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", - "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", - "dependencies": { - "locate-path": "^6.0.0", - "path-exists": "^4.0.0" + "node": ">=8.3.0" }, - "engines": { - "node": ">=10" + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": "^5.0.2" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } } }, - "node_modules/mocha/node_modules/glob": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz", - "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==", + "node_modules/has": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", + "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" + "function-bind": "^1.1.1" }, "engines": { - "node": "*" - }, + "node": ">= 0.4.0" + } + }, + "node_modules/has-bigints": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.2.tgz", + "integrity": "sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==", "funding": { - "url": "https://github.com/sponsors/isaacs" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/mocha/node_modules/glob/node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" + "node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "engines": { + "node": ">=8" } }, - "node_modules/mocha/node_modules/glob/node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "node_modules/has-property-descriptors": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz", + "integrity": "sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==", "dependencies": { - "brace-expansion": "^1.1.7" + "get-intrinsic": "^1.1.1" }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-symbol-support-x": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/has-symbol-support-x/-/has-symbol-support-x-1.4.2.tgz", + "integrity": "sha512-3ToOva++HaW+eCpgqZrCfN51IPB+7bJNVT6CUATzueB5Heb8o6Nam0V3HG5dlDvZU1Gn5QLcbahiKw/XVk5JJw==", "engines": { "node": "*" } }, - "node_modules/mocha/node_modules/locate-path": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", - "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", - "dependencies": { - "p-locate": "^5.0.0" - }, + "node_modules/has-symbols": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", + "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", "engines": { - "node": ">=10" + "node": ">= 0.4" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/mocha/node_modules/minimatch": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.0.1.tgz", - "integrity": "sha512-nLDxIFRyhDblz3qMuq+SoRZED4+miJ/G+tdDrjkkkRnjAsBexeGpgjLEQ0blJy7rHhR2b93rhQY4SvyWu9v03g==", + "node_modules/has-to-string-tag-x": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/has-to-string-tag-x/-/has-to-string-tag-x-1.4.1.tgz", + "integrity": "sha512-vdbKfmw+3LoOYVr+mtxHaX5a96+0f3DljYd8JOqvOLsf5mw2Otda2qCDT9qRqLAhrjyQ0h7ual5nOiASpsGNFw==", "dependencies": { - "brace-expansion": "^2.0.1" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/mocha/node_modules/ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" - }, - "node_modules/mocha/node_modules/nanoid": { - "version": "3.3.3", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.3.tgz", - "integrity": "sha512-p1sjXuopFs0xg+fPASzQ28agW1oHD7xDsd9Xkf3T15H3c/cifrFHVwrh74PdoklAPi+i7MdRsE47vm2r6JoB+w==", - "bin": { - "nanoid": "bin/nanoid.cjs" + "has-symbol-support-x": "^1.4.1" }, "engines": { - "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + "node": "*" } }, - "node_modules/mocha/node_modules/p-limit": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", - "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "node_modules/has-tostringtag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz", + "integrity": "sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==", "dependencies": { - "yocto-queue": "^0.1.0" + "has-symbols": "^1.0.2" }, "engines": { - "node": ">=10" + "node": ">= 0.4" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/mocha/node_modules/p-locate": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", - "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "node_modules/hash-base": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.1.0.tgz", + "integrity": "sha512-1nmYp/rhMDiE7AYkDw+lLwlAzz0AntGIe51F3RfFfEqyQ3feY2eI/NcwC6umIQVOASPMsWJLJScWKSSvzL9IVA==", "dependencies": { - "p-limit": "^3.0.2" + "inherits": "^2.0.4", + "readable-stream": "^3.6.0", + "safe-buffer": "^5.2.0" }, "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=4" } }, - "node_modules/mocha/node_modules/supports-color": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", - "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "node_modules/hash.js": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.7.tgz", + "integrity": "sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==", "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/supports-color?sponsor=1" + "inherits": "^2.0.3", + "minimalistic-assert": "^1.0.1" } }, - "node_modules/mock-fs": { - "version": "4.14.0", - "resolved": "https://registry.npmjs.org/mock-fs/-/mock-fs-4.14.0.tgz", - "integrity": "sha512-qYvlv/exQ4+svI3UOvPUpLDF0OMX5euvUH0Ny4N5QyRyhNdgAgUrVH3iUINSzEPLvx0kbo/Bp28GJKIqvE7URw==" + "node_modules/he": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", + "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", + "bin": { + "he": "bin/he" + } }, - "node_modules/module-error": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/module-error/-/module-error-1.0.2.tgz", - "integrity": "sha512-0yuvsqSCv8LbaOKhnsQ/T5JhyFlCYLPXK3U2sgV10zoKQwzs/MyfuQUOZQ1V/6OCOJsK/TRgNVrPuPDqtdMFtA==", - "engines": { - "node": ">=10" + "node_modules/header-case": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/header-case/-/header-case-1.0.1.tgz", + "integrity": "sha512-i0q9mkOeSuhXw6bGgiQCCBgY/jlZuV/7dZXyZ9c6LcBrqwvT8eT719E9uxE5LiZftdl+z81Ugbg/VvXV4OJOeQ==", + "dependencies": { + "no-case": "^2.2.0", + "upper-case": "^1.1.3" } }, - "node_modules/moment": { - "version": "2.29.4", - "resolved": "https://registry.npmjs.org/moment/-/moment-2.29.4.tgz", - "integrity": "sha512-5LC9SOxjSc2HF6vO2CyuTDNivEdoz2IvyJJGj6X8DJ0eFyfszE0QiEd+iXmBvUP3WHxSjFH/vIsA0EN00cgr8w==", - "optional": true, + "node_modules/highlight.js": { + "version": "10.7.3", + "resolved": "https://registry.npmjs.org/highlight.js/-/highlight.js-10.7.3.tgz", + "integrity": "sha512-tzcUFauisWKNHaRkN4Wjl/ZA07gENAjFl3J/c480dprkGTg5EQstgaNFqBfUqCq54kZRIEcreTsAgF/m2quD7A==", + "dev": true, "engines": { "node": "*" } }, - "node_modules/ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + "node_modules/highlightjs-solidity": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/highlightjs-solidity/-/highlightjs-solidity-2.0.6.tgz", + "integrity": "sha512-DySXWfQghjm2l6a/flF+cteroJqD4gI8GSdL4PtvxZSsAHie8m3yVe2JFoRg03ROKT6hp2Lc/BxXkqerNmtQYg==", + "dev": true }, - "node_modules/multibase": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/multibase/-/multibase-0.6.1.tgz", - "integrity": "sha512-pFfAwyTjbbQgNc3G7D48JkJxWtoJoBMaR4xQUOuB8RnCgRqaYmWNFeJTTvrJ2w51bjLq2zTby6Rqj9TQ9elSUw==", - "deprecated": "This module has been superseded by the multiformats module", + "node_modules/hmac-drbg": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz", + "integrity": "sha512-Tti3gMqLdZfhOQY1Mzf/AanLiqh1WTiJgEj26ZuYQ9fbkLomzGchCws4FyrSd4VkpBfiNhaE1On+lOz894jvXg==", "dependencies": { - "base-x": "^3.0.8", - "buffer": "^5.5.0" + "hash.js": "^1.0.3", + "minimalistic-assert": "^1.0.0", + "minimalistic-crypto-utils": "^1.0.1" } }, - "node_modules/multibase/node_modules/buffer": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", - "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", + "node_modules/hosted-git-info": { + "version": "2.8.9", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz", + "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==" + }, + "node_modules/htmlparser2": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-8.0.1.tgz", + "integrity": "sha512-4lVbmc1diZC7GUJQtRQ5yBAeUCL1exyMwmForWkRLnwyzWBFxN633SALPMGYaWZvKe9j1pRZJpauvmxENSp/EA==", + "devOptional": true, "funding": [ + "https://github.com/fb55/htmlparser2?sponsor=1", { "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" + "url": "https://github.com/sponsors/fb55" } ], "dependencies": { - "base64-js": "^1.3.1", - "ieee754": "^1.1.13" + "domelementtype": "^2.3.0", + "domhandler": "^5.0.2", + "domutils": "^3.0.1", + "entities": "^4.3.0" } }, - "node_modules/multicodec": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/multicodec/-/multicodec-0.5.7.tgz", - "integrity": "sha512-PscoRxm3f+88fAtELwUnZxGDkduE2HD9Q6GHUOywQLjOGT/HAdhjLDYNZ1e7VR0s0TP0EwZ16LNUTFpoBGivOA==", - "deprecated": "This module has been superseded by the multiformats module", + "node_modules/http-basic": { + "version": "8.1.3", + "resolved": "https://registry.npmjs.org/http-basic/-/http-basic-8.1.3.tgz", + "integrity": "sha512-/EcDMwJZh3mABI2NhGfHOGOeOZITqfkEO4p/xK+l3NpyncIHUQBoMvCSF/b5GqvKtySC2srL/GGG3+EtlqlmCw==", "dependencies": { - "varint": "^5.0.0" + "caseless": "^0.12.0", + "concat-stream": "^1.6.2", + "http-response-object": "^3.0.1", + "parse-cache-control": "^1.0.1" + }, + "engines": { + "node": ">=6.0.0" } }, - "node_modules/multihashes": { - "version": "0.4.21", - "resolved": "https://registry.npmjs.org/multihashes/-/multihashes-0.4.21.tgz", - "integrity": "sha512-uVSvmeCWf36pU2nB4/1kzYZjsXD9vofZKpgudqkceYY5g2aZZXJ5r9lxuzoRLl1OAp28XljXsEJ/X/85ZsKmKw==", - "dependencies": { - "buffer": "^5.5.0", - "multibase": "^0.7.0", - "varint": "^5.0.0" - } + "node_modules/http-cache-semantics": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.1.tgz", + "integrity": "sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ==" }, - "node_modules/multihashes/node_modules/buffer": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", - "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], + "node_modules/http-errors": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", + "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", "dependencies": { - "base64-js": "^1.3.1", - "ieee754": "^1.1.13" + "depd": "2.0.0", + "inherits": "2.0.4", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "toidentifier": "1.0.1" + }, + "engines": { + "node": ">= 0.8" } }, - "node_modules/multihashes/node_modules/multibase": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/multibase/-/multibase-0.7.0.tgz", - "integrity": "sha512-TW8q03O0f6PNFTQDvh3xxH03c8CjGaaYrjkl9UQPG6rz53TQzzxJVCIWVjzcbN/Q5Y53Zd0IBQBMVktVgNx4Fg==", - "deprecated": "This module has been superseded by the multiformats module", - "dependencies": { - "base-x": "^3.0.8", - "buffer": "^5.5.0" - } + "node_modules/http-https": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/http-https/-/http-https-1.0.0.tgz", + "integrity": "sha512-o0PWwVCSp3O0wS6FvNr6xfBCHgt0m1tvPLFOCc2iFDKTRAXhB7m8klDf7ErowFH8POa6dVdGatKU5I1YYwzUyg==" }, - "node_modules/murmur-128": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/murmur-128/-/murmur-128-0.2.1.tgz", - "integrity": "sha512-WseEgiRkI6aMFBbj8Cg9yBj/y+OdipwVC7zUo3W2W1JAJITwouUOtpqsmGSg67EQmwwSyod7hsVsWY5LsrfQVg==", - "dev": true, + "node_modules/http-response-object": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/http-response-object/-/http-response-object-3.0.2.tgz", + "integrity": "sha512-bqX0XTF6fnXSQcEJ2Iuyr75yVakyjIDCqroJQ/aHfSdlM743Cwqoi2nDYMzLGWUcuTWGWy8AAvOKXTfiv6q9RA==", "dependencies": { - "encode-utf8": "^1.0.2", - "fmix": "^0.1.0", - "imul": "^1.0.0" + "@types/node": "^10.0.3" } }, - "node_modules/mv": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/mv/-/mv-2.1.1.tgz", - "integrity": "sha512-at/ZndSy3xEGJ8i0ygALh8ru9qy7gWW1cmkaqBN29JmMlIvM//MEO9y1sk/avxuwnPcfhkejkLsuPxH81BrkSg==", - "optional": true, + "node_modules/http-response-object/node_modules/@types/node": { + "version": "10.17.60", + "resolved": "https://registry.npmjs.org/@types/node/-/node-10.17.60.tgz", + "integrity": "sha512-F0KIgDJfy2nA3zMLmWGKxcH2ZVEtCZXHHdOQs2gSaQ27+lNeEfGxzkIw90aXswATX7AZ33tahPbzy6KAfUreVw==" + }, + "node_modules/http-signature": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", + "integrity": "sha512-CAbnr6Rz4CYQkLYUtSNXxQPUH2gK8f3iWexVlsnMeD+GjlsQ0Xsy1cOX+mN3dtxYomRy21CiOzU8Uhw6OwncEQ==", "dependencies": { - "mkdirp": "~0.5.1", - "ncp": "~2.0.0", - "rimraf": "~2.4.0" + "assert-plus": "^1.0.0", + "jsprim": "^1.2.2", + "sshpk": "^1.7.0" }, "engines": { - "node": ">=0.8.0" + "node": ">=0.8", + "npm": ">=1.3.7" } }, - "node_modules/nan": { - "version": "2.17.0", - "resolved": "https://registry.npmjs.org/nan/-/nan-2.17.0.tgz", - "integrity": "sha512-2ZTgtl0nJsO0KQCjEpxcIr5D+Yv90plTitZt9JBfQvVJDS5seMl3FOvsh3+9CoYWXf/1l5OaZzzF6nDm4cagaQ==" - }, - "node_modules/nano-base32": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/nano-base32/-/nano-base32-1.0.1.tgz", - "integrity": "sha512-sxEtoTqAPdjWVGv71Q17koMFGsOMSiHsIFEvzOM7cNp8BXB4AnEwmDabm5dorusJf/v1z7QxaZYxUorU9RKaAw==" - }, - "node_modules/nano-json-stream-parser": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/nano-json-stream-parser/-/nano-json-stream-parser-0.1.2.tgz", - "integrity": "sha512-9MqxMH/BSJC7dnLsEMPyfN5Dvoo49IsPFYMcHw3Bcfc2kN0lpHRBSzlMSVx4HGyJ7s9B31CyBTVehWJoQ8Ctew==" - }, - "node_modules/nanoid": { - "version": "3.3.4", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.4.tgz", - "integrity": "sha512-MqBkQh/OHTS2egovRtLk45wEyNXwF+cokD+1YPf9u5VfJiRdAiRwB2froX5Co9Rh20xs4siNPm8naNotSD6RBw==", - "bin": { - "nanoid": "bin/nanoid.cjs" + "node_modules/http2-wrapper": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/http2-wrapper/-/http2-wrapper-2.2.0.tgz", + "integrity": "sha512-kZB0wxMo0sh1PehyjJUWRFEd99KC5TLjZ2cULC4f9iqJBAmKQQXEICjxl5iPJRwP40dpeHFqqhm7tYCvODpqpQ==", + "dependencies": { + "quick-lru": "^5.1.1", + "resolve-alpn": "^1.2.0" }, "engines": { - "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + "node": ">=10.19.0" } }, - "node_modules/napi-build-utils": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/napi-build-utils/-/napi-build-utils-1.0.2.tgz", - "integrity": "sha512-ONmRUqK7zj7DWX0D9ADe03wbwOBZxNAfF20PlGfCWQcD3+/MakShIHrMqx9YwPTfxDdF1zLeL+RGZiR9kGMLdg==", - "optional": true - }, - "node_modules/napi-macros": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/napi-macros/-/napi-macros-2.0.0.tgz", - "integrity": "sha512-A0xLykHtARfueITVDernsAWdtIMbOJgKgcluwENp3AlsKN/PloyO10HtmoqnFAQAcxPkgZN7wdfPfEd0zNGxbg==", - "optional": true - }, - "node_modules/ncp": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ncp/-/ncp-2.0.0.tgz", - "integrity": "sha512-zIdGUrPRFTUELUvr3Gmc7KZ2Sw/h1PiVM0Af/oHB6zgnV1ikqSfRk+TOufi79aHYCW3NiOXmr1BP5nWbzojLaA==", - "optional": true, - "bin": { - "ncp": "bin/ncp" - } + "node_modules/https": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/https/-/https-1.0.0.tgz", + "integrity": "sha512-4EC57ddXrkaF0x83Oj8sM6SLQHAWXw90Skqu2M4AEWENZ3F02dFJE/GARA8igO79tcgYqGrD7ae4f5L3um2lgg==" }, - "node_modules/negotiator": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", - "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", + "node_modules/https-proxy-agent": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", + "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==", + "dependencies": { + "agent-base": "6", + "debug": "4" + }, "engines": { - "node": ">= 0.6" + "node": ">= 6" } }, - "node_modules/next-tick": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/next-tick/-/next-tick-1.1.0.tgz", - "integrity": "sha512-CXdUiJembsNjuToQvxayPZF9Vqht7hewsvy2sOWafLvi2awflj9mOC6bHIg50orX8IJvWKY9wYQ/zB2kogPslQ==" - }, - "node_modules/no-case": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/no-case/-/no-case-2.3.2.tgz", - "integrity": "sha512-rmTZ9kz+f3rCvK2TD1Ue/oZlns7OGoIWP4fc3llxxRXlOkHKoWPPWJOfFYpITabSow43QJbRIoHQXtt10VldyQ==", + "node_modules/humanize-ms": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/humanize-ms/-/humanize-ms-1.2.1.tgz", + "integrity": "sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ==", "dependencies": { - "lower-case": "^1.1.1" + "ms": "^2.0.0" } }, - "node_modules/node-abi": { - "version": "2.30.1", - "resolved": "https://registry.npmjs.org/node-abi/-/node-abi-2.30.1.tgz", - "integrity": "sha512-/2D0wOQPgaUWzVSVgRMx+trKJRC2UG4SUc4oCJoXx9Uxjtp0Vy3/kt7zcbxHF8+Z/pK3UloLWzBISg72brfy1w==", - "optional": true, + "node_modules/iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", "dependencies": { - "semver": "^5.4.1" + "safer-buffer": ">= 2.1.2 < 3" + }, + "engines": { + "node": ">=0.10.0" } }, - "node_modules/node-abi/node_modules/semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "optional": true, - "bin": { - "semver": "bin/semver" + "node_modules/idna-uts46-hx": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/idna-uts46-hx/-/idna-uts46-hx-2.3.1.tgz", + "integrity": "sha512-PWoF9Keq6laYdIRwwCdhTPl60xRqAloYNMQLiyUnG42VjT53oW07BXIRM+NK7eQjzXjAk2gUvX9caRxlnF9TAA==", + "dependencies": { + "punycode": "2.1.0" + }, + "engines": { + "node": ">=4.0.0" } }, - "node_modules/node-abort-controller": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/node-abort-controller/-/node-abort-controller-3.1.1.tgz", - "integrity": "sha512-AGK2yQKIjRuqnc6VkX2Xj5d+QW8xZ87pa1UK6yA6ouUyuxfHuMP6umE5QK7UmTeOAymo+Zx1Fxiuw9rVx8taHQ==", - "optional": true + "node_modules/ieee754": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", + "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] }, - "node_modules/node-addon-api": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-2.0.2.tgz", - "integrity": "sha512-Ntyt4AIXyaLIuMHF6IOoTakB3K+RWxwtsHNRxllEoA6vPwP9o4866g6YWDLUdnucilZhmkxiHwHr11gAENw+QA==" + "node_modules/ignore-by-default": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/ignore-by-default/-/ignore-by-default-1.0.1.tgz", + "integrity": "sha512-Ius2VYcGNk7T90CppJqcIkS5ooHUZyIQK+ClZfMfMNFEF9VSE73Fq+906u/CWu92x4gzZMWOwfFYckPObzdEbA==" }, - "node_modules/node-environment-flags": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/node-environment-flags/-/node-environment-flags-1.0.6.tgz", - "integrity": "sha512-5Evy2epuL+6TM0lCQGpFIj6KwiEsGh1SrHUhTbNX+sLbBtjidPZFAnVK9y5yU1+h//RitLbRHTIMyxQPtxMdHw==", - "dependencies": { - "object.getownpropertydescriptors": "^2.0.3", - "semver": "^5.7.0" - } + "node_modules/immediate": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/immediate/-/immediate-3.3.0.tgz", + "integrity": "sha512-HR7EVodfFUdQCTIeySw+WDRFJlPcLOJbXfwwZ7Oom6tjsvZ3bOkCDJHehQC3nxJrv7+f9XecwazynjU8e4Vw3Q==" }, - "node_modules/node-environment-flags/node_modules/semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "bin": { - "semver": "bin/semver" - } + "node_modules/immutable": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/immutable/-/immutable-4.1.0.tgz", + "integrity": "sha512-oNkuqVTA8jqG1Q6c+UglTOD1xhC1BtjKI7XkCXRkZHrN5m18/XsnUp8Q89GkQO/z+0WjonSvl0FLhDYftp46nQ==" }, - "node_modules/node-fetch": { - "version": "2.6.7", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz", - "integrity": "sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==", - "dependencies": { - "whatwg-url": "^5.0.0" - }, + "node_modules/imul": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/imul/-/imul-1.0.1.tgz", + "integrity": "sha512-WFAgfwPLAjU66EKt6vRdTlKj4nAgIDQzh29JonLa4Bqtl6D8JrIMvWjCnx7xEjVNmP3U0fM5o8ZObk7d0f62bA==", + "dev": true, "engines": { - "node": "4.x || >=6.0.0" - }, - "peerDependencies": { - "encoding": "^0.1.0" - }, - "peerDependenciesMeta": { - "encoding": { - "optional": true - } - } - }, - "node_modules/node-gyp-build": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.5.0.tgz", - "integrity": "sha512-2iGbaQBV+ITgCz76ZEjmhUKAKVf7xfY1sRl4UiKQspfZMH2h06SyhNsnSVy50cwkFQDGLyif6m/6uFXHkOZ6rg==", - "bin": { - "node-gyp-build": "bin.js", - "node-gyp-build-optional": "optional.js", - "node-gyp-build-test": "build-test.js" + "node": ">=0.10.0" } }, - "node_modules/node-hid": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/node-hid/-/node-hid-1.3.0.tgz", - "integrity": "sha512-BA6G4V84kiNd1uAChub/Z/5s/xS3EHBCxotQ0nyYrUG65mXewUDHE1tWOSqA2dp3N+mV0Ffq9wo2AW9t4p/G7g==", - "hasInstallScript": true, - "optional": true, - "dependencies": { - "bindings": "^1.5.0", - "nan": "^2.14.0", - "node-abi": "^2.18.0", - "prebuild-install": "^5.3.4" - }, - "bin": { - "hid-showdevices": "src/show-devices.js" - }, + "node_modules/indent-string": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", + "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", "engines": { - "node": ">=6.0.0" + "node": ">=8" } }, - "node_modules/node-interval-tree": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/node-interval-tree/-/node-interval-tree-1.3.3.tgz", - "integrity": "sha512-K9vk96HdTK5fEipJwxSvIIqwTqr4e3HRJeJrNxBSeVMNSC/JWARRaX7etOLOuTmrRMeOI/K5TCJu3aWIwZiNTw==", + "node_modules/inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", "dependencies": { - "shallowequal": "^1.0.2" - }, - "engines": { - "node": ">= 7.6.0" + "once": "^1.3.0", + "wrappy": "1" } }, - "node_modules/node-releases": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.6.tgz", - "integrity": "sha512-PiVXnNuFm5+iYkLBNeq5211hvO38y63T0i2KKh2KnUs3RpzJ+JtODFjkD8yjLwnDkTYF1eKXheUwdssR+NRZdg==" + "node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" }, - "node_modules/nodemon": { - "version": "2.0.22", - "resolved": "https://registry.npmjs.org/nodemon/-/nodemon-2.0.22.tgz", - "integrity": "sha512-B8YqaKMmyuCO7BowF1Z1/mkPqLk6cs/l63Ojtd6otKjMx47Dq1utxfRxcavH1I7VSaL8n5BUaoutadnsX3AAVQ==", + "node_modules/internal-slot": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.3.tgz", + "integrity": "sha512-O0DB1JC/sPyZl7cIo78n5dR7eUSwwpYPiXRhTzNxZVAMUuB8vlnRFyLxdrVToks6XPLVnFfbzaVd5WLjhgg+vA==", "dependencies": { - "chokidar": "^3.5.2", - "debug": "^3.2.7", - "ignore-by-default": "^1.0.1", - "minimatch": "^3.1.2", - "pstree.remy": "^1.1.8", - "semver": "^5.7.1", - "simple-update-notifier": "^1.0.7", - "supports-color": "^5.5.0", - "touch": "^3.1.0", - "undefsafe": "^2.0.5" - }, - "bin": { - "nodemon": "bin/nodemon.js" + "get-intrinsic": "^1.1.0", + "has": "^1.0.3", + "side-channel": "^1.0.4" }, "engines": { - "node": ">=8.10.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/nodemon" + "node": ">= 0.4" } }, - "node_modules/nodemon/node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "node_modules/invariant": { + "version": "2.2.4", + "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz", + "integrity": "sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==", "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" + "loose-envify": "^1.0.0" } }, - "node_modules/nodemon/node_modules/debug": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "node_modules/invert-kv": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/invert-kv/-/invert-kv-1.0.0.tgz", + "integrity": "sha512-xgs2NH9AE66ucSq4cNG1nhSFghr5l6tdL15Pk+jl46bmmBapgoaY/AacXyaDznAqmGL99TiLSQgO/XazFSKYeQ==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/io-ts": { + "version": "1.10.4", + "resolved": "https://registry.npmjs.org/io-ts/-/io-ts-1.10.4.tgz", + "integrity": "sha512-b23PteSnYXSONJ6JQXRAlvJhuw8KOtkqa87W4wDtvMrud/DTJd5X+NpOOI+O/zZwVq6v0VLAaJ+1EDViKEuN9g==", "dependencies": { - "ms": "^2.1.1" + "fp-ts": "^1.0.0" } }, - "node_modules/nodemon/node_modules/has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "node_modules/ipaddr.js": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", + "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", "engines": { - "node": ">=4" + "node": ">= 0.10" } }, - "node_modules/nodemon/node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "node_modules/is-arguments": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.1.1.tgz", + "integrity": "sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==", "dependencies": { - "brace-expansion": "^1.1.7" + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" }, "engines": { - "node": "*" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/nodemon/node_modules/semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "bin": { - "semver": "bin/semver" - } + "node_modules/is-arrayish": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", + "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==" }, - "node_modules/nodemon/node_modules/supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "node_modules/is-bigint": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz", + "integrity": "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==", "dependencies": { - "has-flag": "^3.0.0" + "has-bigints": "^1.0.1" }, - "engines": { - "node": ">=4" + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/nofilter": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/nofilter/-/nofilter-1.0.4.tgz", - "integrity": "sha512-N8lidFp+fCz+TD51+haYdbDGrcBWwuHX40F5+z0qkUjMJ5Tp+rdSuAkMJ9N9eoolDlEVTf6u5icM+cNKkKW2mA==", + "node_modules/is-binary-path": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "dependencies": { + "binary-extensions": "^2.0.0" + }, "engines": { "node": ">=8" } }, - "node_modules/noop-logger": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/noop-logger/-/noop-logger-0.1.1.tgz", - "integrity": "sha512-6kM8CLXvuW5crTxsAtva2YLrRrDaiTIkIePWs9moLHqbFWT94WpNFjwS/5dfLfECg5i/lkmw3aoqVidxt23TEQ==", - "optional": true - }, - "node_modules/nopt": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/nopt/-/nopt-1.0.10.tgz", - "integrity": "sha512-NWmpvLSqUrgrAC9HCuxEvb+PSloHpqVu+FqcO4eeF2h5qYRhA7ev6KvelyQAKtegUbC6RypJnlEOhd8vloNKYg==", + "node_modules/is-boolean-object": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz", + "integrity": "sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==", "dependencies": { - "abbrev": "1" - }, - "bin": { - "nopt": "bin/nopt.js" + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" }, "engines": { - "node": "*" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/normalize-hex": { - "version": "0.0.2", - "resolved": "https://registry.npmjs.org/normalize-hex/-/normalize-hex-0.0.2.tgz", - "integrity": "sha512-E2dx7XJQnjsm6SkS4G6GGvIXRHaLeWAZE2D2N3aia+OpIif2UT8y4S0KCjrX3WmFDSeFnlNOp0FSHFjLeJ4SJw==", - "dependencies": { - "bn.js": "^4.11.8" + "node_modules/is-buffer": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-2.0.5.tgz", + "integrity": "sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "engines": { + "node": ">=4" } }, - "node_modules/normalize-hex/node_modules/bn.js": { - "version": "4.12.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==" - }, - "node_modules/normalize-package-data": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", - "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", - "dependencies": { - "hosted-git-info": "^2.1.4", - "resolve": "^1.10.0", - "semver": "2 || 3 || 4 || 5", - "validate-npm-package-license": "^3.0.1" + "node_modules/is-callable": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz", + "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/normalize-package-data/node_modules/semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "node_modules/is-ci": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-2.0.0.tgz", + "integrity": "sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w==", + "dependencies": { + "ci-info": "^2.0.0" + }, "bin": { - "semver": "bin/semver" + "is-ci": "bin.js" } }, - "node_modules/normalize-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", - "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "node_modules/is-date-object": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz", + "integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==", + "dependencies": { + "has-tostringtag": "^1.0.0" + }, "engines": { - "node": ">=0.10.0" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/normalize-url": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-6.1.0.tgz", - "integrity": "sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A==", + "node_modules/is-docker": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz", + "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==", + "bin": { + "is-docker": "cli.js" + }, "engines": { - "node": ">=10" + "node": ">=8" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/npmlog": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-4.1.2.tgz", - "integrity": "sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg==", - "optional": true, - "dependencies": { - "are-we-there-yet": "~1.1.2", - "console-control-strings": "~1.1.0", - "gauge": "~2.7.3", - "set-blocking": "~2.0.0" - } - }, - "node_modules/nth-check": { + "node_modules/is-extglob": { "version": "2.1.1", - "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.1.1.tgz", - "integrity": "sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==", - "dev": true, - "dependencies": { - "boolbase": "^1.0.0" - }, - "funding": { - "url": "https://github.com/fb55/nth-check?sponsor=1" + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "engines": { + "node": ">=0.10.0" } }, - "node_modules/number-is-nan": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", - "integrity": "sha512-4jbtZXNAsfZbAHiiqjLPBiCl16dES1zI4Hpzzxw61Tk+loF+sBDBKx1ICKKKwIqQ7M0mFn1TmkN7euSncWgHiQ==", + "node_modules/is-fn": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-fn/-/is-fn-1.0.0.tgz", + "integrity": "sha512-XoFPJQmsAShb3jEQRfzf2rqXavq7fIqF/jOekp308JlThqrODnMpweVSGilKTCXELfLhltGP2AGgbQGVP8F1dg==", "engines": { "node": ">=0.10.0" } }, - "node_modules/number-to-bn": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/number-to-bn/-/number-to-bn-1.7.0.tgz", - "integrity": "sha512-wsJ9gfSz1/s4ZsJN01lyonwuxA1tml6X1yBDnfpMglypcBRFZZkus26EdPSlqS5GJfYddVZa22p3VNb3z5m5Ig==", - "dependencies": { - "bn.js": "4.11.6", - "strip-hex-prefix": "1.0.0" - }, - "engines": { - "node": ">=6.5.0", - "npm": ">=3" + "node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "engines": { + "node": ">=8" } }, - "node_modules/number-to-bn/node_modules/bn.js": { - "version": "4.11.6", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.6.tgz", - "integrity": "sha512-XWwnNNFCuuSQ0m3r3C4LE3EiORltHd9M05pq6FOlVeiophzRbMo50Sbz1ehl8K3Z+jw9+vmgnXefY1hz8X+2wA==" + "node_modules/is-function": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-function/-/is-function-1.0.2.tgz", + "integrity": "sha512-lw7DUp0aWXYg+CBCN+JKkcE0Q2RayZnSvnZBlwgxHBQhqt5pZNVy4Ri7H9GmmXkdu7LUthszM+Tor1u/2iBcpQ==" }, - "node_modules/oauth-sign": { - "version": "0.9.0", - "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz", - "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==", + "node_modules/is-generator-function": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.0.10.tgz", + "integrity": "sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A==", + "dependencies": { + "has-tostringtag": "^1.0.0" + }, "engines": { - "node": "*" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/object-assign": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", - "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", + "node_modules/is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "dependencies": { + "is-extglob": "^2.1.1" + }, "engines": { "node": ">=0.10.0" } }, - "node_modules/object-inspect": { - "version": "1.12.2", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.2.tgz", - "integrity": "sha512-z+cPxW0QGUp0mcqcsgQyLVRDoXFQbXOwBaqyF7VIgI4TWNQsDHrBpUQslRmIfAoYWdYzs6UlKJtB2XJpTaNSpQ==", - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/object-keys": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", - "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", + "node_modules/is-hex-prefixed": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-hex-prefixed/-/is-hex-prefixed-1.0.0.tgz", + "integrity": "sha512-WvtOiug1VFrE9v1Cydwm+FnXd3+w9GaeVUss5W4v/SLy3UW00vP+6iNF2SdnfiBoLy4bTqVdkftNGTUeOFVsbA==", "engines": { - "node": ">= 0.4" + "node": ">=6.5.0", + "npm": ">=3" } }, - "node_modules/object.assign": { - "version": "4.1.4", - "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.4.tgz", - "integrity": "sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ==", + "node_modules/is-lower-case": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/is-lower-case/-/is-lower-case-1.1.3.tgz", + "integrity": "sha512-+5A1e/WJpLLXZEDlgz4G//WYSHyQBD32qa4Jd3Lw06qQlv3fJHnp3YIHjTQSGzHMgzmVKz2ZP3rBxTHkPw/lxA==", "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "has-symbols": "^1.0.3", - "object-keys": "^1.1.1" - }, + "lower-case": "^1.1.0" + } + }, + "node_modules/is-natural-number": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/is-natural-number/-/is-natural-number-4.0.1.tgz", + "integrity": "sha512-Y4LTamMe0DDQIIAlaer9eKebAlDSV6huy+TWhJVPlzZh2o4tRP5SQWFlLn5N0To4mDD22/qdOq+veo1cSISLgQ==" + }, + "node_modules/is-negative-zero": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.2.tgz", + "integrity": "sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==", "engines": { "node": ">= 0.4" }, @@ -25548,157 +26861,155 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/object.getownpropertydescriptors": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.4.tgz", - "integrity": "sha512-sccv3L/pMModT6dJAYF3fzGMVcb38ysQ0tEE6ixv2yXJDtEIPph268OlAdJj5/qZMZDq2g/jqvwppt36uS/uQQ==", + "node_modules/is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/is-number-object": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.7.tgz", + "integrity": "sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==", "dependencies": { - "array.prototype.reduce": "^1.0.4", - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.1" + "has-tostringtag": "^1.0.0" }, "engines": { - "node": ">= 0.8" + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/obliterator": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/obliterator/-/obliterator-2.0.4.tgz", - "integrity": "sha512-lgHwxlxV1qIg1Eap7LgIeoBWIMFibOjbrYPIPJZcI1mmGAI2m3lNYpK12Y+GBdPQ0U1hRwSord7GIaawz962qQ==" + "node_modules/is-obj": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-2.0.0.tgz", + "integrity": "sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==", + "optional": true, + "engines": { + "node": ">=8" + } }, - "node_modules/oboe": { - "version": "2.1.5", - "resolved": "https://registry.npmjs.org/oboe/-/oboe-2.1.5.tgz", - "integrity": "sha512-zRFWiF+FoicxEs3jNI/WYUrVEgA7DeET/InK0XQuudGHRg8iIob3cNPrJTKaz4004uaA9Pbe+Dwa8iluhjLZWA==", - "dependencies": { - "http-https": "^1.0.0" + "node_modules/is-object": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-object/-/is-object-1.0.2.tgz", + "integrity": "sha512-2rRIahhZr2UWb45fIOuvZGpFtz0TyOZLf32KxBbSoUCeZR495zCKlWUKKUByk3geS2eAs7ZAABt0Y/Rx0GiQGA==", + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/on-finished": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", - "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", - "dependencies": { - "ee-first": "1.1.1" - }, + "node_modules/is-plain-obj": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz", + "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==", "engines": { - "node": ">= 0.8" + "node": ">=8" } }, - "node_modules/once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", - "dependencies": { - "wrappy": "1" - } + "node_modules/is-promise": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-2.2.2.tgz", + "integrity": "sha512-+lP4/6lKUBfQjZ2pdxThZvLUAafmZb8OAxFb8XXtiQmS35INgr85hdOGoEs124ez1FCnZJt6jau/T+alh58QFQ==" }, - "node_modules/onetime": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", - "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", - "optional": true, + "node_modules/is-regex": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", + "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==", "dependencies": { - "mimic-fn": "^2.1.0" + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" }, "engines": { - "node": ">=6" + "node": ">= 0.4" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/onetime/node_modules/mimic-fn": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", - "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", - "optional": true, + "node_modules/is-retry-allowed": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/is-retry-allowed/-/is-retry-allowed-1.2.0.tgz", + "integrity": "sha512-RUbUeKwvm3XG2VYamhJL1xFktgjvPzL0Hq8C+6yrWIswDy3BIXGqCxhxkc30N9jqK311gVU137K8Ei55/zVJRg==", "engines": { - "node": ">=6" + "node": ">=0.10.0" } }, - "node_modules/ordinal": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/ordinal/-/ordinal-1.0.3.tgz", - "integrity": "sha512-cMddMgb2QElm8G7vdaa02jhUNbTSrhsgAGUz1OokD83uJTwSUn+nKoNoKVVaRa08yF6sgfO7Maou1+bgLd9rdQ==", - "peer": true - }, - "node_modules/original-require": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/original-require/-/original-require-1.0.1.tgz", - "integrity": "sha512-5vdKMbE58WaE61uVD+PKyh8xdM398UnjPBLotW2sjG5MzHARwta/+NtMBCBA0t2WQblGYBvq5vsiZpWokwno+A==" - }, - "node_modules/os-locale": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-1.4.0.tgz", - "integrity": "sha512-PRT7ZORmwu2MEFt4/fv3Q+mEfN4zetKxufQrkShY2oGvUms9r8otu5HfdyIFHkYXjO7laNsoVGmM2MANfuTA8g==", + "node_modules/is-shared-array-buffer": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz", + "integrity": "sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==", "dependencies": { - "lcid": "^1.0.0" + "call-bind": "^1.0.2" }, - "engines": { - "node": ">=0.10.0" + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/os-tmpdir": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", - "integrity": "sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==", + "node_modules/is-stream": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", + "integrity": "sha512-uQPm8kcs47jx38atAcWTVxyltQYoPT68y9aWYdV6yWXSyW8mzSat0TL6CiWdZeCdF3KrAvpVtnHbTv4RN+rqdQ==", "engines": { "node": ">=0.10.0" } }, - "node_modules/p-cancelable": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-3.0.0.tgz", - "integrity": "sha512-mlVgR3PGuzlo0MmTdk4cXqXWlwQDLnONTAg6sm62XkMJEiRxN3GL3SffkYvqwonbkJBcrI7Uvv5Zh9yjvn2iUw==", - "engines": { - "node": ">=12.20" - } - }, - "node_modules/p-finally": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", - "integrity": "sha512-LICb2p9CB7FS+0eR1oqWnHhp0FljGLZCWBE9aix0Uye9W8LTQPwMTYVGWQWIw9RdQiDg4+epXQODwIYJtSJaow==", + "node_modules/is-string": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz", + "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==", + "dependencies": { + "has-tostringtag": "^1.0.0" + }, "engines": { - "node": ">=4" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "node_modules/is-symbol": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz", + "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==", "dependencies": { - "p-try": "^2.0.0" + "has-symbols": "^1.0.2" }, "engines": { - "node": ">=6" + "node": ">= 0.4" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/p-locate": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", - "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "node_modules/is-typed-array": { + "version": "1.1.9", + "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.9.tgz", + "integrity": "sha512-kfrlnTTn8pZkfpJMUgYD7YZ3qzeJgWUn8XfVYBARc4wnmNOmLbmuuaAs3q5fvB0UJOn6yHAKaGTPM7d6ezoD/A==", "dependencies": { - "p-limit": "^2.2.0" + "available-typed-arrays": "^1.0.5", + "call-bind": "^1.0.2", + "es-abstract": "^1.20.0", + "for-each": "^0.3.3", + "has-tostringtag": "^1.0.0" }, "engines": { - "node": ">=8" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/p-map": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz", - "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==", - "dependencies": { - "aggregate-error": "^3.0.0" - }, + "node_modules/is-typedarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", + "integrity": "sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==" + }, + "node_modules/is-unicode-supported": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", + "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==", "engines": { "node": ">=10" }, @@ -25706,926 +27017,1045 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/p-timeout": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/p-timeout/-/p-timeout-1.2.1.tgz", - "integrity": "sha512-gb0ryzr+K2qFqFv6qi3khoeqMZF/+ajxQipEF6NteZVnvz9tzdsfAVj3lYtn1gAXvH5lfLwfxEII799gt/mRIA==", + "node_modules/is-upper-case": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/is-upper-case/-/is-upper-case-1.1.2.tgz", + "integrity": "sha512-GQYSJMgfeAmVwh9ixyk888l7OIhNAGKtY6QA+IrWlu9MDTCaXmeozOZ2S9Knj7bQwBO/H6J2kb+pbyTUiMNbsw==", "dependencies": { - "p-finally": "^1.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/p-try": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", - "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", - "engines": { - "node": ">=6" + "upper-case": "^1.1.0" } }, - "node_modules/pako": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.11.tgz", - "integrity": "sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==", + "node_modules/is-url": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/is-url/-/is-url-1.2.4.tgz", + "integrity": "sha512-ITvGim8FhRiYe4IQ5uHSkj7pVaPDrCTkNd3yq3cV7iZAcJdHTUMPMEHcqSOy9xZ9qFenQCvi+2wjH9a1nXqHww==", "dev": true }, - "node_modules/param-case": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/param-case/-/param-case-2.1.1.tgz", - "integrity": "sha512-eQE845L6ot89sk2N8liD8HAuH4ca6Vvr7VWAWwt7+kvvG5aBcPmmphQ68JsEG2qa9n1TykS2DLeMt363AAH8/w==", - "dependencies": { - "no-case": "^2.2.0" - } + "node_modules/is-utf8": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-utf8/-/is-utf8-0.2.1.tgz", + "integrity": "sha512-rMYPYvCzsXywIsldgLaSoPlw5PfoB/ssr7hY4pLfcodrA5M/eArza1a9VmTiNIBNMjOGr1Ow9mTyU2o69U6U9Q==" }, - "node_modules/parse-asn1": { - "version": "5.1.6", - "resolved": "https://registry.npmjs.org/parse-asn1/-/parse-asn1-5.1.6.tgz", - "integrity": "sha512-RnZRo1EPU6JBnra2vGHj0yhp6ebyjBZpmUCLHWiFhxlzvBCCpAuZ7elsBp1PVAbQN0/04VD/19rfzlBSwLstMw==", + "node_modules/is-weakref": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz", + "integrity": "sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==", "dependencies": { - "asn1.js": "^5.2.0", - "browserify-aes": "^1.0.0", - "evp_bytestokey": "^1.0.0", - "pbkdf2": "^3.0.3", - "safe-buffer": "^5.1.1" + "call-bind": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/parse-cache-control": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/parse-cache-control/-/parse-cache-control-1.0.1.tgz", - "integrity": "sha512-60zvsJReQPX5/QP0Kzfd/VrpjScIQ7SHBW6bFCYfEP+fp0Eppr1SHhIO5nd1PjZtvclzSzES9D/p5nFJurwfWg==" - }, - "node_modules/parse-headers": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/parse-headers/-/parse-headers-2.0.5.tgz", - "integrity": "sha512-ft3iAoLOB/MlwbNXgzy43SWGP6sQki2jQvAyBg/zDFAgr9bfNWZIUj42Kw2eJIl8kEi4PbgE6U1Zau/HwI75HA==" - }, - "node_modules/parse-json": { + "node_modules/is-wsl": { "version": "2.2.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz", - "integrity": "sha512-QR/GGaKCkhwk1ePQNYDRKYZ3mwU9ypsKhB0XyFnLQdomyEqk3e8wpW3V5Jp88zbxK4n5ST1nqo+g9juTpownhQ==", + "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", + "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", "dependencies": { - "error-ex": "^1.2.0" + "is-docker": "^2.0.0" }, "engines": { - "node": ">=0.10.0" + "node": ">=8" } }, - "node_modules/parse5": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/parse5/-/parse5-7.1.1.tgz", - "integrity": "sha512-kwpuwzB+px5WUg9pyK0IcK/shltJN5/OVhQagxhCQNtT9Y9QRZqNY2e1cmbu/paRh5LMnz/oVTVLBpjFmMZhSg==", - "dev": true, - "dependencies": { - "entities": "^4.4.0" - }, - "funding": { - "url": "https://github.com/inikulin/parse5?sponsor=1" - } + "node_modules/isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==" }, - "node_modules/parse5-htmlparser2-tree-adapter": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/parse5-htmlparser2-tree-adapter/-/parse5-htmlparser2-tree-adapter-7.0.0.tgz", - "integrity": "sha512-B77tOZrqqfUfnVcOrUvfdLbz4pu4RopLD/4vmu3HUPswwTA8OH0EMW9BlWR2B0RCoiZRAHEUu7IxeP1Pd1UU+g==", + "node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==" + }, + "node_modules/isomorphic-unfetch": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/isomorphic-unfetch/-/isomorphic-unfetch-3.1.0.tgz", + "integrity": "sha512-geDJjpoZ8N0kWexiwkX8F9NkTsXhetLPVbZFQ+JTW239QNOwvB0gniuR1Wc6f0AMTn7/mFGyXvHTifrCp/GH8Q==", "dev": true, "dependencies": { - "domhandler": "^5.0.2", - "parse5": "^7.0.0" - }, - "funding": { - "url": "https://github.com/inikulin/parse5?sponsor=1" + "node-fetch": "^2.6.1", + "unfetch": "^4.2.0" } }, - "node_modules/parseurl": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", - "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", - "engines": { - "node": ">= 0.8" + "node_modules/isomorphic-ws": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/isomorphic-ws/-/isomorphic-ws-4.0.1.tgz", + "integrity": "sha512-BhBvN2MBpWTaSHdWRb/bwdZJ1WaehQ2L1KngkCkfLUGF0mAWAT1sQUQacEmQ0jXkFw/czDXPNQSL5u2/Krsz1w==", + "peerDependencies": { + "ws": "*" } }, - "node_modules/pascal-case": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/pascal-case/-/pascal-case-2.0.1.tgz", - "integrity": "sha512-qjS4s8rBOJa2Xm0jmxXiyh1+OFf6ekCWOvUaRgAQSktzlTbMotS0nmG9gyYAybCWBcuP4fsBeRCKNwGBnMe2OQ==", - "dependencies": { - "camel-case": "^3.0.0", - "upper-case-first": "^1.1.0" - } + "node_modules/isstream": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", + "integrity": "sha512-Yljz7ffyPbrLpLngrMtZ7NduUgVvi6wG9RJ9IUcyCd59YQ911PBJphODUcbOVbqYfxe1wuYf/LJ8PauMRwsM/g==" }, - "node_modules/path": { - "version": "0.12.7", - "resolved": "https://registry.npmjs.org/path/-/path-0.12.7.tgz", - "integrity": "sha512-aXXC6s+1w7otVF9UletFkFcDsJeO7lSZBPUQhtb5O0xJe8LtYhj/GxldoL09bBj9+ZmE2hNoHqQSFMN5fikh4Q==", + "node_modules/isurl": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isurl/-/isurl-1.0.0.tgz", + "integrity": "sha512-1P/yWsxPlDtn7QeRD+ULKQPaIaN6yF368GZ2vDfv0AL0NwpStafjWCDDdn0k8wgFMWpVAqG7oJhxHnlud42i9w==", "dependencies": { - "process": "^0.11.1", - "util": "^0.10.3" + "has-to-string-tag-x": "^1.2.0", + "is-object": "^1.0.1" + }, + "engines": { + "node": ">= 4" } }, - "node_modules/path-browserify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-1.0.1.tgz", - "integrity": "sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g==", - "dev": true + "node_modules/javascript-natural-sort": { + "version": "0.7.1", + "resolved": "https://registry.npmjs.org/javascript-natural-sort/-/javascript-natural-sort-0.7.1.tgz", + "integrity": "sha512-nO6jcEfZWQXDhOiBtG2KvKyEptz7RVbpGP4vTD2hLBdmNQSsCiicO2Ioinv6UI4y9ukqnBpy+XZ9H6uLNgJTlw==" }, - "node_modules/path-case": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/path-case/-/path-case-2.1.1.tgz", - "integrity": "sha512-Ou0N05MioItesaLr9q8TtHVWmJ6fxWdqKB2RohFmNWVyJ+2zeKIeDNWAN6B/Pe7wpzWChhZX6nONYmOnMeJQ/Q==", + "node_modules/jayson": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/jayson/-/jayson-4.1.0.tgz", + "integrity": "sha512-R6JlbyLN53Mjku329XoRT2zJAE6ZgOQ8f91ucYdMCD4nkGCF9kZSrcGXpHIU4jeKj58zUZke2p+cdQchU7Ly7A==", "dependencies": { - "no-case": "^2.2.0" - } - }, - "node_modules/path-exists": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "@types/connect": "^3.4.33", + "@types/node": "^12.12.54", + "@types/ws": "^7.4.4", + "commander": "^2.20.3", + "delay": "^5.0.0", + "es6-promisify": "^5.0.0", + "eyes": "^0.1.8", + "isomorphic-ws": "^4.0.1", + "json-stringify-safe": "^5.0.1", + "JSONStream": "^1.3.5", + "uuid": "^8.3.2", + "ws": "^7.4.5" + }, + "bin": { + "jayson": "bin/jayson.js" + }, "engines": { "node": ">=8" } }, - "node_modules/path-is-absolute": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", + "node_modules/jayson/node_modules/@types/node": { + "version": "12.20.55", + "resolved": "https://registry.npmjs.org/@types/node/-/node-12.20.55.tgz", + "integrity": "sha512-J8xLz7q2OFulZ2cyGTLE1TbbZcjpno7FaN6zdJNrgAdrJ+DZzh/uFR6YrTb4C+nXakvud8Q4+rbhoIWlYQbUFQ==" + }, + "node_modules/jayson/node_modules/ws": { + "version": "7.5.9", + "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.9.tgz", + "integrity": "sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q==", "engines": { - "node": ">=0.10.0" + "node": ">=8.3.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": "^5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } } }, - "node_modules/path-parse": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", - "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==" + "node_modules/js-cookie": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/js-cookie/-/js-cookie-2.2.1.tgz", + "integrity": "sha512-HvdH2LzI/EAZcUwA8+0nKNtWHqS+ZmijLA30RwZA0bo7ToCckjK5MkGhjED9KoRcXO6BaGI3I9UIzSA1FKFPOQ==", + "dev": true }, - "node_modules/path-to-regexp": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", - "integrity": "sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==" + "node_modules/js-graph-algorithms": { + "version": "1.0.18", + "resolved": "https://registry.npmjs.org/js-graph-algorithms/-/js-graph-algorithms-1.0.18.tgz", + "integrity": "sha512-Gu1wtWzXBzGeye/j9BuyplGHscwqKRZodp/0M1vyBc19RJpblSwKGu099KwwaTx9cRIV+Qupk8xUMfEiGfFqSA==", + "optional": true, + "bin": { + "js-graphs": "src/jsgraphs.js" + } }, - "node_modules/path-type": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-1.1.0.tgz", - "integrity": "sha512-S4eENJz1pkiQn9Znv33Q+deTOKmbl+jj1Fl+qiP/vYezj+S8x+J3Uo0ISrx/QoEvIlOaDWJhPaRd1flJ9HXZqg==", + "node_modules/js-sdsl": { + "version": "4.4.2", + "resolved": "https://registry.npmjs.org/js-sdsl/-/js-sdsl-4.4.2.tgz", + "integrity": "sha512-dwXFwByc/ajSV6m5bcKAPwe4yDDF6D614pxmIi5odytzxRlwqF6nwoiCek80Ixc7Cvma5awClxrzFtxCQvcM8w==", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/js-sdsl" + } + }, + "node_modules/js-sha3": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/js-sha3/-/js-sha3-0.8.0.tgz", + "integrity": "sha512-gF1cRrHhIzNfToc802P800N8PpXS+evLLXfsVpowqmAFR9uwbi89WvXg2QspOmXL8QL86J4T1EpFu+yUkwJY3Q==" + }, + "node_modules/js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==" + }, + "node_modules/js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", "dependencies": { - "graceful-fs": "^4.1.2", - "pify": "^2.0.0", - "pinkie-promise": "^2.0.0" + "argparse": "^2.0.1" }, - "engines": { - "node": ">=0.10.0" + "bin": { + "js-yaml": "bin/js-yaml.js" } }, - "node_modules/path-type/node_modules/pify": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", - "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==", + "node_modules/jsbi": { + "version": "3.2.5", + "resolved": "https://registry.npmjs.org/jsbi/-/jsbi-3.2.5.tgz", + "integrity": "sha512-aBE4n43IPvjaddScbvWRA2YlTzKEynHzu7MqOyTipdHucf/VxS63ViCjxYRg86M8Rxwbt/GfzHl1kKERkt45fQ==" + }, + "node_modules/jsbn": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", + "integrity": "sha512-UVU9dibq2JcFWxQPA6KCqj5O42VOmAY3zQUfEKxU0KpTGXwNoCjkX1e13eHNvw/xPynt6pU0rZ1htjWTNTSXsg==" + }, + "node_modules/jsesc": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", + "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", + "peer": true, + "bin": { + "jsesc": "bin/jsesc" + }, "engines": { - "node": ">=0.10.0" + "node": ">=4" } }, - "node_modules/path/node_modules/inherits": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "integrity": "sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw==" - }, - "node_modules/path/node_modules/util": { - "version": "0.10.4", - "resolved": "https://registry.npmjs.org/util/-/util-0.10.4.tgz", - "integrity": "sha512-0Pm9hTQ3se5ll1XihRic3FDIku70C+iHUdT/W926rSgHV5QgXsYbKZN8MSC3tJtSkhuROzvsQjAaFENRXr+19A==", + "node_modules/json-bigint": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-bigint/-/json-bigint-1.0.0.tgz", + "integrity": "sha512-SiPv/8VpZuWbvLSMtTDU8hEfrZWg/mH/nV/b4o0CYbSxu1UIQPLdwKOCIyLQX+VIPO5vrLX3i8qtqFyhdPSUSQ==", + "dev": true, "dependencies": { - "inherits": "2.0.3" + "bignumber.js": "^9.0.0" } }, - "node_modules/pathval": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/pathval/-/pathval-1.1.1.tgz", - "integrity": "sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ==", - "engines": { - "node": "*" + "node_modules/json-buffer": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", + "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==" + }, + "node_modules/json-loader": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/json-loader/-/json-loader-0.5.7.tgz", + "integrity": "sha512-QLPs8Dj7lnf3e3QYS1zkCo+4ZwqOiF9d/nZnYozTISxXWCfNs9yuky5rJw4/W34s7POaNlbZmQGaB5NiXCbP4w==", + "dev": true + }, + "node_modules/json-pointer": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/json-pointer/-/json-pointer-0.6.2.tgz", + "integrity": "sha512-vLWcKbOaXlO+jvRy4qNd+TI1QUPZzfJj1tpJ3vAXDych5XJf93ftpUKe5pKCrzyIIwgBJcOcCVRUfqQP25afBw==", + "dependencies": { + "foreach": "^2.0.4" } }, - "node_modules/pbkdf2": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.1.2.tgz", - "integrity": "sha512-iuh7L6jA7JEGu2WxDwtQP1ddOpaJNC4KlDEFfdQajSGgGPNi4OyDc2R7QnbY2bR9QjBVGwgvTdNJZoE7RaxUMA==", + "node_modules/json-rpc-engine": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/json-rpc-engine/-/json-rpc-engine-6.1.0.tgz", + "integrity": "sha512-NEdLrtrq1jUZyfjkr9OCz9EzCNhnRyWtt1PAnvnhwy6e8XETS0Dtc+ZNCO2gvuAoKsIn2+vCSowXTYE4CkgnAQ==", "dependencies": { - "create-hash": "^1.1.2", - "create-hmac": "^1.1.4", - "ripemd160": "^2.0.1", - "safe-buffer": "^5.0.1", - "sha.js": "^2.4.8" + "@metamask/safe-event-emitter": "^2.0.0", + "eth-rpc-errors": "^4.0.2" }, "engines": { - "node": ">=0.12" + "node": ">=10.0.0" } }, - "node_modules/pend": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz", - "integrity": "sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg==" + "node_modules/json-rpc-engine/node_modules/eth-rpc-errors": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/eth-rpc-errors/-/eth-rpc-errors-4.0.3.tgz", + "integrity": "sha512-Z3ymjopaoft7JDoxZcEb3pwdGh7yiYMhOwm2doUt6ASXlMavpNlK6Cre0+IMl2VSGyEU9rkiperQhp5iRxn5Pg==", + "dependencies": { + "fast-safe-stringify": "^2.0.6" + } }, - "node_modules/performance-now": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", - "integrity": "sha512-7EAHlyLHI56VEIdK57uwHdHKIaAGbnXPiw0yWbarQZOKaKpvUIgW0jWRVLiatnM+XXlSwsanIBH/hzGMJulMow==" + "node_modules/json-rpc-random-id": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json-rpc-random-id/-/json-rpc-random-id-1.0.1.tgz", + "integrity": "sha512-RJ9YYNCkhVDBuP4zN5BBtYAzEl03yq/jIIsyif0JY9qyJuQQZNeDK7anAPKKlyEtLSj2s8h6hNh2F8zO5q7ScA==" }, - "node_modules/picocolors": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", - "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==" + "node_modules/json-schema": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.4.0.tgz", + "integrity": "sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA==" }, - "node_modules/picomatch": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", - "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", - "engines": { - "node": ">=8.6" - }, - "funding": { - "url": "https://github.com/sponsors/jonschlinkert" + "node_modules/json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==" + }, + "node_modules/json-schema-typed": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/json-schema-typed/-/json-schema-typed-7.0.3.tgz", + "integrity": "sha512-7DE8mpG+/fVw+dTpjbxnx47TaMnDfOI1jwft9g1VybltZCduyRQPJPvc+zzKY9WPHxhPWczyFuYa6I8Mw4iU5A==", + "optional": true + }, + "node_modules/json-stable-stringify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json-stable-stringify/-/json-stable-stringify-1.0.1.tgz", + "integrity": "sha512-i/J297TW6xyj7sDFa7AmBPkQvLIxWr2kKPWI26tXydnZrzVAocNqn5DMNT1Mzk0vit1V5UkRM7C1KdVNp7Lmcg==", + "dependencies": { + "jsonify": "~0.0.0" } }, - "node_modules/pify": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", - "integrity": "sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg==", + "node_modules/json-stringify-safe": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", + "integrity": "sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==" + }, + "node_modules/json5": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.2.tgz", + "integrity": "sha512-46Tk9JiOL2z7ytNQWFLpj99RZkVgeHf87yGQKsIkaPz1qSH9UczKH1rO7K3wgRselo0tYMUNfecYpm/p1vC7tQ==", + "peer": true, + "bin": { + "json5": "lib/cli.js" + }, "engines": { - "node": ">=4" + "node": ">=6" } }, - "node_modules/pinkie": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz", - "integrity": "sha512-MnUuEycAemtSaeFSjXKW/aroV7akBbY+Sv+RkyqFjgAe73F+MR0TBWKBRDkmfWq/HiFmdavfZ1G7h4SPZXaCSg==", - "engines": { - "node": ">=0.10.0" + "node_modules/jsonfile": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", + "dependencies": { + "universalify": "^2.0.0" + }, + "optionalDependencies": { + "graceful-fs": "^4.1.6" } }, - "node_modules/pinkie-promise": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz", - "integrity": "sha512-0Gni6D4UcLTbv9c57DfxDGdr41XfgUjqWZu492f0cIGr16zDU06BWP/RAEvOuo7CQ0CNjHaLlM59YJJFm3NWlw==", + "node_modules/jsonify": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/jsonify/-/jsonify-0.0.1.tgz", + "integrity": "sha512-2/Ki0GcmuqSrgFyelQq9M05y7PS0mEwuIzrf3f1fPqkVDVRvZrPZtVSMHxdgo8Aq0sxAOb/cr2aqqA3LeWHVPg==", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/jsonparse": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/jsonparse/-/jsonparse-1.3.1.tgz", + "integrity": "sha512-POQXvpdL69+CluYsillJ7SUhKvytYjW9vG/GKpnf+xP8UWgYEM/RaMzHHofbALDiKbbP1W8UEYmgGl39WkPZsg==", + "engines": [ + "node >= 0.2.0" + ] + }, + "node_modules/JSONStream": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/JSONStream/-/JSONStream-1.3.5.tgz", + "integrity": "sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ==", "dependencies": { - "pinkie": "^2.0.0" + "jsonparse": "^1.2.0", + "through": ">=2.2.7 <3" + }, + "bin": { + "JSONStream": "bin.js" }, "engines": { - "node": ">=0.10.0" + "node": "*" } }, - "node_modules/pkg-up": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/pkg-up/-/pkg-up-3.1.0.tgz", - "integrity": "sha512-nDywThFk1i4BQK4twPQ6TA4RT8bDY96yeuCVBWL3ePARCiEKDRSrNGbFIgUJpLp+XeIR65v8ra7WuJOFUBtkMA==", - "optional": true, + "node_modules/jsprim": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.2.tgz", + "integrity": "sha512-P2bSOMAc/ciLz6DzgjVlGJP9+BrJWu5UDGK70C2iweC5QBIeFf0ZXRvGjEj2uYgrY2MkAAhsSWHDWlFtEroZWw==", "dependencies": { - "find-up": "^3.0.0" + "assert-plus": "1.0.0", + "extsprintf": "1.3.0", + "json-schema": "0.4.0", + "verror": "1.10.0" }, "engines": { - "node": ">=8" + "node": ">=0.6.0" } }, - "node_modules/pkg-up/node_modules/find-up": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", - "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", - "optional": true, + "node_modules/keccak": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/keccak/-/keccak-3.0.2.tgz", + "integrity": "sha512-PyKKjkH53wDMLGrvmRGSNWgmSxZOUqbnXwKL9tmgbFYA1iAYqW21kfR7mZXV0MlESiefxQQE9X9fTa3X+2MPDQ==", + "hasInstallScript": true, "dependencies": { - "locate-path": "^3.0.0" + "node-addon-api": "^2.0.0", + "node-gyp-build": "^4.2.0", + "readable-stream": "^3.6.0" }, "engines": { - "node": ">=6" + "node": ">=10.0.0" } }, - "node_modules/pkg-up/node_modules/locate-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", - "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", - "optional": true, + "node_modules/keyv": { + "version": "4.5.2", + "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.2.tgz", + "integrity": "sha512-5MHbFaKn8cNSmVW7BYnijeAVlE4cYA/SVkifVgrh7yotnfhKmjuXpDKjrABLnT0SfHWV21P8ow07OGfRrNDg8g==", "dependencies": { - "p-locate": "^3.0.0", - "path-exists": "^3.0.0" + "json-buffer": "3.0.1" + } + }, + "node_modules/klaw": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/klaw/-/klaw-1.3.1.tgz", + "integrity": "sha512-TED5xi9gGQjGpNnvRWknrwAB1eL5GciPfVFOt3Vk1OJCVDQbzuSfrF3hkUQKlsgKrG1F+0t5W0m+Fje1jIt8rw==", + "optionalDependencies": { + "graceful-fs": "^4.1.9" + } + }, + "node_modules/klaw-sync": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/klaw-sync/-/klaw-sync-6.0.0.tgz", + "integrity": "sha512-nIeuVSzdCCs6TDPTqI8w1Yre34sSq7AkZ4B3sfOBbI2CgVSB4Du4aLQijFU2+lhAFCwt9+42Hel6lQNIv6AntQ==", + "dependencies": { + "graceful-fs": "^4.1.11" + } + }, + "node_modules/lcid": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/lcid/-/lcid-1.0.0.tgz", + "integrity": "sha512-YiGkH6EnGrDGqLMITnGjXtGmNtjoXw9SVUzcaos8RBi7Ps0VBylkq+vOcY9QE5poLasPCR849ucFUkl0UzUyOw==", + "dependencies": { + "invert-kv": "^1.0.0" }, "engines": { - "node": ">=6" + "node": ">=0.10.0" } }, - "node_modules/pkg-up/node_modules/p-locate": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", - "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", - "optional": true, + "node_modules/level": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/level/-/level-8.0.0.tgz", + "integrity": "sha512-ypf0jjAk2BWI33yzEaaotpq7fkOPALKAgDBxggO6Q9HGX2MRXn0wbP1Jn/tJv1gtL867+YOjOB49WaUF3UoJNQ==", "dependencies": { - "p-limit": "^2.0.0" + "browser-level": "^1.0.1", + "classic-level": "^1.2.0" }, "engines": { - "node": ">=6" + "node": ">=12" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/level" } }, - "node_modules/pkg-up/node_modules/path-exists": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", - "integrity": "sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==", - "optional": true, + "node_modules/level-codec": { + "version": "9.0.2", + "resolved": "https://registry.npmjs.org/level-codec/-/level-codec-9.0.2.tgz", + "integrity": "sha512-UyIwNb1lJBChJnGfjmO0OR+ezh2iVu1Kas3nvBS/BzGnx79dv6g7unpKIDNPMhfdTEGoc7mC8uAu51XEtX+FHQ==", + "dependencies": { + "buffer": "^5.6.0" + }, "engines": { - "node": ">=4" + "node": ">=6" } }, - "node_modules/platform-deploy-client": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/platform-deploy-client/-/platform-deploy-client-0.6.0.tgz", - "integrity": "sha512-mBfnOvF2gb9acGJjlXBQ6VOAkKFRdljsNKHUVY5xKqzKP2PNh/RqCIvi5AR5NqLMrQ3XaMIwRvmwAjtGw7JhYg==", - "dev": true, + "node_modules/level-codec/node_modules/buffer": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", + "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], "dependencies": { - "@ethersproject/abi": "^5.6.3", - "axios": "^0.21.2", - "defender-base-client": "^1.44.0", - "lodash": "^4.17.19", - "node-fetch": "^2.6.0" + "base64-js": "^1.3.1", + "ieee754": "^1.1.13" } }, - "node_modules/pluralize": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/pluralize/-/pluralize-8.0.0.tgz", - "integrity": "sha512-Nc3IT5yHzflTfbjgqWcCPpo7DaKy4FnpB0l/zCAW0Tc7jxAiuqSxHasntB3D7887LSrA93kDJ9IXovxJYxyLCA==", - "optional": true, + "node_modules/level-concat-iterator": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/level-concat-iterator/-/level-concat-iterator-2.0.1.tgz", + "integrity": "sha512-OTKKOqeav2QWcERMJR7IS9CUo1sHnke2C0gkSmcR7QuEtFNLLzHQAvnMw8ykvEcv0Qtkg0p7FOwP1v9e5Smdcw==", "engines": { - "node": ">=4" + "node": ">=6" } }, - "node_modules/pouchdb": { - "version": "7.3.0", - "resolved": "https://registry.npmjs.org/pouchdb/-/pouchdb-7.3.0.tgz", - "integrity": "sha512-OwsIQGXsfx3TrU1pLruj6PGSwFH+h5k4hGNxFkZ76Um7/ZI8F5TzUHFrpldVVIhfXYi2vP31q0q7ot1FSLFYOw==", - "optional": true, + "node_modules/level-errors": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/level-errors/-/level-errors-2.0.1.tgz", + "integrity": "sha512-UVprBJXite4gPS+3VznfgDSU8PTRuVX0NXwoWW50KLxd2yw4Y1t2JUR5In1itQnudZqRMT9DlAM3Q//9NCjCFw==", "dependencies": { - "abort-controller": "3.0.0", - "argsarray": "0.0.1", - "buffer-from": "1.1.2", - "clone-buffer": "1.0.0", - "double-ended-queue": "2.1.0-0", - "fetch-cookie": "0.11.0", - "immediate": "3.3.0", - "inherits": "2.0.4", - "level": "6.0.1", - "level-codec": "9.0.2", - "level-write-stream": "1.0.0", - "leveldown": "5.6.0", - "levelup": "4.4.0", - "ltgt": "2.2.1", - "node-fetch": "2.6.7", - "readable-stream": "1.1.14", - "spark-md5": "3.0.2", - "through2": "3.0.2", - "uuid": "8.3.2", - "vuvuzela": "1.0.3" + "errno": "~0.1.1" + }, + "engines": { + "node": ">=6" } }, - "node_modules/pouchdb-abstract-mapreduce": { - "version": "7.3.1", - "resolved": "https://registry.npmjs.org/pouchdb-abstract-mapreduce/-/pouchdb-abstract-mapreduce-7.3.1.tgz", - "integrity": "sha512-0zKXVFBvrfc1KnN0ggrB762JDmZnUpePHywo9Bq3Jy+L1FnoG7fXM5luFfvv5/T0gEw+ZTIwoocZECMnESBI9w==", - "optional": true, + "node_modules/level-iterator-stream": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/level-iterator-stream/-/level-iterator-stream-4.0.2.tgz", + "integrity": "sha512-ZSthfEqzGSOMWoUGhTXdX9jv26d32XJuHz/5YnuHZzH6wldfWMOVwI9TBtKcya4BKTyTt3XVA0A3cF3q5CY30Q==", "dependencies": { - "pouchdb-binary-utils": "7.3.1", - "pouchdb-collate": "7.3.1", - "pouchdb-collections": "7.3.1", - "pouchdb-errors": "7.3.1", - "pouchdb-fetch": "7.3.1", - "pouchdb-mapreduce-utils": "7.3.1", - "pouchdb-md5": "7.3.1", - "pouchdb-utils": "7.3.1" + "inherits": "^2.0.4", + "readable-stream": "^3.4.0", + "xtend": "^4.0.2" + }, + "engines": { + "node": ">=6" } }, - "node_modules/pouchdb-adapter-leveldb-core": { - "version": "7.3.1", - "resolved": "https://registry.npmjs.org/pouchdb-adapter-leveldb-core/-/pouchdb-adapter-leveldb-core-7.3.1.tgz", - "integrity": "sha512-mxShHlqLMPz2gChrgtA9okV1ogFmQrRAoM/O4EN0CrQWPLXqYtpL1f7sI2asIvFe7SmpnvbLx7kkZyFmLTfwjA==", + "node_modules/level-js": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/level-js/-/level-js-5.0.2.tgz", + "integrity": "sha512-SnBIDo2pdO5VXh02ZmtAyPP6/+6YTJg2ibLtl9C34pWvmtMEmRTWpra+qO/hifkUtBTOtfx6S9vLDjBsBK4gRg==", "optional": true, "dependencies": { - "argsarray": "0.0.1", - "buffer-from": "1.1.2", - "double-ended-queue": "2.1.0-0", - "levelup": "4.4.0", - "pouchdb-adapter-utils": "7.3.1", - "pouchdb-binary-utils": "7.3.1", - "pouchdb-collections": "7.3.1", - "pouchdb-errors": "7.3.1", - "pouchdb-json": "7.3.1", - "pouchdb-md5": "7.3.1", - "pouchdb-merge": "7.3.1", - "pouchdb-utils": "7.3.1", - "sublevel-pouchdb": "7.3.1", - "through2": "3.0.2" + "abstract-leveldown": "~6.2.3", + "buffer": "^5.5.0", + "inherits": "^2.0.3", + "ltgt": "^2.1.2" } }, - "node_modules/pouchdb-adapter-memory": { - "version": "7.3.1", - "resolved": "https://registry.npmjs.org/pouchdb-adapter-memory/-/pouchdb-adapter-memory-7.3.1.tgz", - "integrity": "sha512-iHdWGJAHONqQv0we3Oi1MYen69ZS8McLW9wUyaAYcWTJnAIIAr2ZM0/TeTDVSHfMUwYqEYk7X8jRtJZEMwLnwg==", + "node_modules/level-js/node_modules/abstract-leveldown": { + "version": "6.2.3", + "resolved": "https://registry.npmjs.org/abstract-leveldown/-/abstract-leveldown-6.2.3.tgz", + "integrity": "sha512-BsLm5vFMRUrrLeCcRc+G0t2qOaTzpoJQLOubq2XM72eNpjF5UdU5o/5NvlNhx95XHcAvcl8OMXr4mlg/fRgUXQ==", "optional": true, "dependencies": { - "memdown": "1.4.1", - "pouchdb-adapter-leveldb-core": "7.3.1", - "pouchdb-utils": "7.3.1" + "buffer": "^5.5.0", + "immediate": "^3.2.3", + "level-concat-iterator": "~2.0.0", + "level-supports": "~1.0.0", + "xtend": "~4.0.0" + }, + "engines": { + "node": ">=6" } }, - "node_modules/pouchdb-adapter-memory/node_modules/abstract-leveldown": { - "version": "2.7.2", - "resolved": "https://registry.npmjs.org/abstract-leveldown/-/abstract-leveldown-2.7.2.tgz", - "integrity": "sha512-+OVvxH2rHVEhWLdbudP6p0+dNMXu8JA1CbhP19T8paTYAcX7oJ4OVjT+ZUVpv7mITxXHqDMej+GdqXBmXkw09w==", + "node_modules/level-js/node_modules/buffer": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", + "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], "optional": true, "dependencies": { - "xtend": "~4.0.0" + "base64-js": "^1.3.1", + "ieee754": "^1.1.13" } }, - "node_modules/pouchdb-adapter-memory/node_modules/memdown": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/memdown/-/memdown-1.4.1.tgz", - "integrity": "sha512-iVrGHZB8i4OQfM155xx8akvG9FIj+ht14DX5CQkCTG4EHzZ3d3sgckIf/Lm9ivZalEsFuEVnWv2B2WZvbrro2w==", + "node_modules/level-js/node_modules/level-supports": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/level-supports/-/level-supports-1.0.1.tgz", + "integrity": "sha512-rXM7GYnW8gsl1vedTJIbzOrRv85c/2uCMpiiCzO2fndd06U/kUXEEU9evYn4zFggBOg36IsBW8LzqIpETwwQzg==", "optional": true, "dependencies": { - "abstract-leveldown": "~2.7.1", - "functional-red-black-tree": "^1.0.1", - "immediate": "^3.2.3", - "inherits": "~2.0.1", - "ltgt": "~2.2.0", - "safe-buffer": "~5.1.1" - } - }, - "node_modules/pouchdb-adapter-memory/node_modules/safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "optional": true - }, - "node_modules/pouchdb-adapter-utils": { - "version": "7.3.1", - "resolved": "https://registry.npmjs.org/pouchdb-adapter-utils/-/pouchdb-adapter-utils-7.3.1.tgz", - "integrity": "sha512-uKLG6dClwTs/sLIJ4WkLAi9wlnDBpOnfyhpeAgOjlOGN/XLz5nKHrA4UJRnURDyc+uv79S9r/Unc4hVpmbSPUw==", - "optional": true, - "dependencies": { - "pouchdb-binary-utils": "7.3.1", - "pouchdb-collections": "7.3.1", - "pouchdb-errors": "7.3.1", - "pouchdb-md5": "7.3.1", - "pouchdb-merge": "7.3.1", - "pouchdb-utils": "7.3.1" + "xtend": "^4.0.2" + }, + "engines": { + "node": ">=6" } }, - "node_modules/pouchdb-binary-utils": { - "version": "7.3.1", - "resolved": "https://registry.npmjs.org/pouchdb-binary-utils/-/pouchdb-binary-utils-7.3.1.tgz", - "integrity": "sha512-crZJNfAEOnUoRk977Qtmk4cxEv6sNKllQ6vDDKgQrQLFjMUXma35EHzNyIJr1s76J77Q4sqKQAmxz9Y40yHGtw==", - "optional": true, + "node_modules/level-mem": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/level-mem/-/level-mem-5.0.1.tgz", + "integrity": "sha512-qd+qUJHXsGSFoHTziptAKXoLX87QjR7v2KMbqncDXPxQuCdsQlzmyX+gwrEHhlzn08vkf8TyipYyMmiC6Gobzg==", "dependencies": { - "buffer-from": "1.1.2" + "level-packager": "^5.0.3", + "memdown": "^5.0.0" + }, + "engines": { + "node": ">=6" } }, - "node_modules/pouchdb-collate": { - "version": "7.3.1", - "resolved": "https://registry.npmjs.org/pouchdb-collate/-/pouchdb-collate-7.3.1.tgz", - "integrity": "sha512-o4gyGqDMLMSNzf6EDTr3eHaH/JRMoqRhdc+eV+oA8u00nTBtr9wD+jypVe2LbgKLJ4NWqx2qVkXiTiQdUFtsLQ==", - "optional": true - }, - "node_modules/pouchdb-collections": { - "version": "7.3.1", - "resolved": "https://registry.npmjs.org/pouchdb-collections/-/pouchdb-collections-7.3.1.tgz", - "integrity": "sha512-yUyDqR+OJmtwgExOSJegpBJXDLAEC84TWnbAYycyh+DZoA51Yw0+XVQF5Vh8Ii90/Ut2xo88fmrmp0t6kqom8w==", - "optional": true - }, - "node_modules/pouchdb-debug": { - "version": "7.2.1", - "resolved": "https://registry.npmjs.org/pouchdb-debug/-/pouchdb-debug-7.2.1.tgz", - "integrity": "sha512-eP3ht/AKavLF2RjTzBM6S9gaI2/apcW6xvaKRQhEdOfiANqerFuksFqHCal3aikVQuDO+cB/cw+a4RyJn/glBw==", - "optional": true, + "node_modules/level-packager": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/level-packager/-/level-packager-5.1.1.tgz", + "integrity": "sha512-HMwMaQPlTC1IlcwT3+swhqf/NUO+ZhXVz6TY1zZIIZlIR0YSn8GtAAWmIvKjNY16ZkEg/JcpAuQskxsXqC0yOQ==", "dependencies": { - "debug": "3.1.0" + "encoding-down": "^6.3.0", + "levelup": "^4.3.2" + }, + "engines": { + "node": ">=6" } }, - "node_modules/pouchdb-debug/node_modules/debug": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", - "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", - "optional": true, - "dependencies": { - "ms": "2.0.0" + "node_modules/level-supports": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/level-supports/-/level-supports-4.0.1.tgz", + "integrity": "sha512-PbXpve8rKeNcZ9C1mUicC9auIYFyGpkV9/i6g76tLgANwWhtG2v7I4xNBUlkn3lE2/dZF3Pi0ygYGtLc4RXXdA==", + "engines": { + "node": ">=12" } }, - "node_modules/pouchdb-debug/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "optional": true - }, - "node_modules/pouchdb-errors": { - "version": "7.3.1", - "resolved": "https://registry.npmjs.org/pouchdb-errors/-/pouchdb-errors-7.3.1.tgz", - "integrity": "sha512-Zktz4gnXEUcZcty8FmyvtYUYsHskoST05m6H5/E2gg/0mCfEXq/XeyyLkZHaZmqD0ZPS9yNmASB1VaFWEKEaDw==", - "optional": true, + "node_modules/level-transcoder": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/level-transcoder/-/level-transcoder-1.0.1.tgz", + "integrity": "sha512-t7bFwFtsQeD8cl8NIoQ2iwxA0CL/9IFw7/9gAjOonH0PWTTiRfY7Hq+Ejbsxh86tXobDQ6IOiddjNYIfOBs06w==", "dependencies": { - "inherits": "2.0.4" + "buffer": "^6.0.3", + "module-error": "^1.0.1" + }, + "engines": { + "node": ">=12" } }, - "node_modules/pouchdb-fetch": { - "version": "7.3.1", - "resolved": "https://registry.npmjs.org/pouchdb-fetch/-/pouchdb-fetch-7.3.1.tgz", - "integrity": "sha512-205xAtvdHRPQ4fp1h9+RmT9oQabo9gafuPmWsS9aEl3ER54WbY8Vaj1JHZGbU4KtMTYvW7H5088zLS7Nrusuag==", + "node_modules/level-write-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/level-write-stream/-/level-write-stream-1.0.0.tgz", + "integrity": "sha512-bBNKOEOMl8msO+uIM9YX/gUO6ckokZ/4pCwTm/lwvs46x6Xs8Zy0sn3Vh37eDqse4mhy4fOMIb/JsSM2nyQFtw==", "optional": true, "dependencies": { - "abort-controller": "3.0.0", - "fetch-cookie": "0.11.0", - "node-fetch": "2.6.7" + "end-stream": "~0.1.0" } }, - "node_modules/pouchdb-find": { - "version": "7.3.1", - "resolved": "https://registry.npmjs.org/pouchdb-find/-/pouchdb-find-7.3.1.tgz", - "integrity": "sha512-AeqUfAVY1c7IFaY36BRT0vIz9r4VTKq/YOWTmiqndOZUQ/pDGxyO2fNFal6NN3PyYww0JijlD377cPvhnrhJVA==", - "optional": true, + "node_modules/level-ws": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/level-ws/-/level-ws-2.0.0.tgz", + "integrity": "sha512-1iv7VXx0G9ec1isqQZ7y5LmoZo/ewAsyDHNA8EFDW5hqH2Kqovm33nSFkSdnLLAK+I5FlT+lo5Cw9itGe+CpQA==", "dependencies": { - "pouchdb-abstract-mapreduce": "7.3.1", - "pouchdb-collate": "7.3.1", - "pouchdb-errors": "7.3.1", - "pouchdb-fetch": "7.3.1", - "pouchdb-md5": "7.3.1", - "pouchdb-selector-core": "7.3.1", - "pouchdb-utils": "7.3.1" + "inherits": "^2.0.3", + "readable-stream": "^3.1.0", + "xtend": "^4.0.1" + }, + "engines": { + "node": ">=6" } }, - "node_modules/pouchdb-json": { - "version": "7.3.1", - "resolved": "https://registry.npmjs.org/pouchdb-json/-/pouchdb-json-7.3.1.tgz", - "integrity": "sha512-AyOKsmc85/GtHjMZyEacqzja8qLVfycS1hh1oskR+Bm5PIITX52Fb8zyi0hEetV6VC0yuGbn0RqiLjJxQePeqQ==", + "node_modules/leveldown": { + "version": "5.6.0", + "resolved": "https://registry.npmjs.org/leveldown/-/leveldown-5.6.0.tgz", + "integrity": "sha512-iB8O/7Db9lPaITU1aA2txU/cBEXAt4vWwKQRrrWuS6XDgbP4QZGj9BL2aNbwb002atoQ/lIotJkfyzz+ygQnUQ==", + "hasInstallScript": true, "optional": true, "dependencies": { - "vuvuzela": "1.0.3" + "abstract-leveldown": "~6.2.1", + "napi-macros": "~2.0.0", + "node-gyp-build": "~4.1.0" + }, + "engines": { + "node": ">=8.6.0" } }, - "node_modules/pouchdb-mapreduce-utils": { - "version": "7.3.1", - "resolved": "https://registry.npmjs.org/pouchdb-mapreduce-utils/-/pouchdb-mapreduce-utils-7.3.1.tgz", - "integrity": "sha512-oUMcq82+4pTGQ6dtrhgORHOVHZSr6w/5tFIUGlv7RABIDvJarL4snMawADjlpiEwPdiQ/ESG8Fqt8cxqvqsIgg==", + "node_modules/leveldown/node_modules/abstract-leveldown": { + "version": "6.2.3", + "resolved": "https://registry.npmjs.org/abstract-leveldown/-/abstract-leveldown-6.2.3.tgz", + "integrity": "sha512-BsLm5vFMRUrrLeCcRc+G0t2qOaTzpoJQLOubq2XM72eNpjF5UdU5o/5NvlNhx95XHcAvcl8OMXr4mlg/fRgUXQ==", "optional": true, "dependencies": { - "argsarray": "0.0.1", - "inherits": "2.0.4", - "pouchdb-collections": "7.3.1", - "pouchdb-utils": "7.3.1" + "buffer": "^5.5.0", + "immediate": "^3.2.3", + "level-concat-iterator": "~2.0.0", + "level-supports": "~1.0.0", + "xtend": "~4.0.0" + }, + "engines": { + "node": ">=6" } }, - "node_modules/pouchdb-md5": { - "version": "7.3.1", - "resolved": "https://registry.npmjs.org/pouchdb-md5/-/pouchdb-md5-7.3.1.tgz", - "integrity": "sha512-aDV8ui/mprnL3xmt0gT/81DFtTtJiKyn+OxIAbwKPMfz/rDFdPYvF0BmDC9QxMMzGfkV+JJUjU6at0PPs2mRLg==", + "node_modules/leveldown/node_modules/buffer": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", + "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], "optional": true, "dependencies": { - "pouchdb-binary-utils": "7.3.1", - "spark-md5": "3.0.2" + "base64-js": "^1.3.1", + "ieee754": "^1.1.13" } }, - "node_modules/pouchdb-merge": { - "version": "7.3.1", - "resolved": "https://registry.npmjs.org/pouchdb-merge/-/pouchdb-merge-7.3.1.tgz", - "integrity": "sha512-FeK3r35mKimokf2PQ2tUI523QWyZ4lYZ0Yd75FfSch/SPY6wIokz5XBZZ6PHdu5aOJsEKzoLUxr8CpSg9DhcAw==", - "optional": true - }, - "node_modules/pouchdb-selector-core": { - "version": "7.3.1", - "resolved": "https://registry.npmjs.org/pouchdb-selector-core/-/pouchdb-selector-core-7.3.1.tgz", - "integrity": "sha512-HBX+nNGXcaL9z0uNpwSMRq2GNZd3EZXW+fe9rJHS0hvJohjZL7aRJLoaXfEdHPRTNW+CpjM3Rny60eGekQdI/w==", + "node_modules/leveldown/node_modules/level-supports": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/level-supports/-/level-supports-1.0.1.tgz", + "integrity": "sha512-rXM7GYnW8gsl1vedTJIbzOrRv85c/2uCMpiiCzO2fndd06U/kUXEEU9evYn4zFggBOg36IsBW8LzqIpETwwQzg==", "optional": true, "dependencies": { - "pouchdb-collate": "7.3.1", - "pouchdb-utils": "7.3.1" + "xtend": "^4.0.2" + }, + "engines": { + "node": ">=6" } }, - "node_modules/pouchdb-utils": { - "version": "7.3.1", - "resolved": "https://registry.npmjs.org/pouchdb-utils/-/pouchdb-utils-7.3.1.tgz", - "integrity": "sha512-R3hHBo1zTdTu/NFs3iqkcaQAPwhIH0gMIdfVKd5lbDYlmP26rCG5pdS+v7NuoSSFLJ4xxnaGV+Gjf4duYsJ8wQ==", + "node_modules/leveldown/node_modules/node-gyp-build": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.1.1.tgz", + "integrity": "sha512-dSq1xmcPDKPZ2EED2S6zw/b9NKsqzXRE6dVr8TVQnI3FJOTteUMuqF3Qqs6LZg+mLGYJWqQzMbIjMtJqTv87nQ==", "optional": true, - "dependencies": { - "argsarray": "0.0.1", - "clone-buffer": "1.0.0", - "immediate": "3.3.0", - "inherits": "2.0.4", - "pouchdb-collections": "7.3.1", - "pouchdb-errors": "7.3.1", - "pouchdb-md5": "7.3.1", - "uuid": "8.3.2" + "bin": { + "node-gyp-build": "bin.js", + "node-gyp-build-optional": "optional.js", + "node-gyp-build-test": "build-test.js" } }, - "node_modules/pouchdb/node_modules/isarray": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", - "integrity": "sha512-D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ==", - "optional": true - }, - "node_modules/pouchdb/node_modules/level": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/level/-/level-6.0.1.tgz", - "integrity": "sha512-psRSqJZCsC/irNhfHzrVZbmPYXDcEYhA5TVNwr+V92jF44rbf86hqGp8fiT702FyiArScYIlPSBTDUASCVNSpw==", - "optional": true, + "node_modules/levelup": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/levelup/-/levelup-4.4.0.tgz", + "integrity": "sha512-94++VFO3qN95cM/d6eBXvd894oJE0w3cInq9USsyQzzoJxmiYzPAocNcuGCPGGjoXqDVJcr3C1jzt1TSjyaiLQ==", "dependencies": { - "level-js": "^5.0.0", - "level-packager": "^5.1.0", - "leveldown": "^5.4.0" + "deferred-leveldown": "~5.3.0", + "level-errors": "~2.0.0", + "level-iterator-stream": "~4.0.0", + "level-supports": "~1.0.0", + "xtend": "~4.0.0" }, "engines": { - "node": ">=8.6.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/level" - } - }, - "node_modules/pouchdb/node_modules/readable-stream": { - "version": "1.1.14", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz", - "integrity": "sha512-+MeVjFf4L44XUkhM1eYbD8fyEsxcV81pqMSR5gblfcLCHfZvbrqy4/qYHE+/R5HoBUT11WV5O08Cr1n3YXkWVQ==", - "optional": true, - "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.1", - "isarray": "0.0.1", - "string_decoder": "~0.10.x" + "node": ">=6" } }, - "node_modules/pouchdb/node_modules/string_decoder": { - "version": "0.10.31", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", - "integrity": "sha512-ev2QzSzWPYmy9GuqfIVildA4OdcGLeFZQrq5ys6RtiuF+RQQiZWr8TZNyAcuVXyQRYfEO+MsoB/1BuQVhOJuoQ==", - "optional": true - }, - "node_modules/prb-math": { - "version": "2.4.3", - "resolved": "https://registry.npmjs.org/prb-math/-/prb-math-2.4.3.tgz", - "integrity": "sha512-t5jncEscKmWg7COkMkmbXXxSeDI6Xl21rxx5e+oxUCqskNvsu6Q9RqdVfGY6y+sMwyMQE8DJ/OOyQ9ExH1yfbw==", + "node_modules/levelup/node_modules/level-supports": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/level-supports/-/level-supports-1.0.1.tgz", + "integrity": "sha512-rXM7GYnW8gsl1vedTJIbzOrRv85c/2uCMpiiCzO2fndd06U/kUXEEU9evYn4zFggBOg36IsBW8LzqIpETwwQzg==", "dependencies": { - "@ethersproject/bignumber": "^5.5.0", - "decimal.js": "^10.3.1", - "evm-bn": "^1.1.1", - "mathjs": "^10.1.1" + "xtend": "^4.0.2" }, - "peerDependencies": { - "@ethersproject/bignumber": "5.x", - "evm-bn": "1.x", - "mathjs": "10.x" + "engines": { + "node": ">=6" } }, - "node_modules/prb-math/node_modules/mathjs": { - "version": "10.6.4", - "resolved": "https://registry.npmjs.org/mathjs/-/mathjs-10.6.4.tgz", - "integrity": "sha512-omQyvRE1jIy+3k2qsqkWASOcd45aZguXZDckr3HtnTYyXk5+2xpVfC3kATgbO2Srjxlqww3TVdhD0oUdZ/hiFA==", + "node_modules/load-json-file": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz", + "integrity": "sha512-cy7ZdNRXdablkXYNI049pthVeXFurRyb9+hA/dZzerZ0pGTx42z+y+ssxBaVV2l70t1muq5IdKhn4UtcoGUY9A==", "dependencies": { - "@babel/runtime": "^7.18.6", - "complex.js": "^2.1.1", - "decimal.js": "^10.3.1", - "escape-latex": "^1.2.0", - "fraction.js": "^4.2.0", - "javascript-natural-sort": "^0.7.1", - "seedrandom": "^3.0.5", - "tiny-emitter": "^2.1.0", - "typed-function": "^2.1.0" - }, - "bin": { - "mathjs": "bin/cli.js" + "graceful-fs": "^4.1.2", + "parse-json": "^2.2.0", + "pify": "^2.0.0", + "pinkie-promise": "^2.0.0", + "strip-bom": "^2.0.0" }, "engines": { - "node": ">= 14" + "node": ">=0.10.0" } }, - "node_modules/prb-math/node_modules/typed-function": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/typed-function/-/typed-function-2.1.0.tgz", - "integrity": "sha512-bctQIOqx2iVbWGDGPWwIm18QScpu2XRmkC19D8rQGFsjKSgteq/o1hTZvIG/wuDq8fanpBDrLkLq+aEN/6y5XQ==", + "node_modules/load-json-file/node_modules/pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==", "engines": { - "node": ">= 10" + "node": ">=0.10.0" } }, - "node_modules/prebuild-install": { - "version": "5.3.6", - "resolved": "https://registry.npmjs.org/prebuild-install/-/prebuild-install-5.3.6.tgz", - "integrity": "sha512-s8Aai8++QQGi4sSbs/M1Qku62PFK49Jm1CbgXklGz4nmHveDq0wzJkg7Na5QbnO1uNH8K7iqx2EQ/mV0MZEmOg==", - "optional": true, + "node_modules/locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", "dependencies": { - "detect-libc": "^1.0.3", - "expand-template": "^2.0.3", - "github-from-package": "0.0.0", - "minimist": "^1.2.3", - "mkdirp-classic": "^0.5.3", - "napi-build-utils": "^1.0.1", - "node-abi": "^2.7.0", - "noop-logger": "^0.1.1", - "npmlog": "^4.0.1", - "pump": "^3.0.0", - "rc": "^1.2.7", - "simple-get": "^3.0.3", - "tar-fs": "^2.0.0", - "tunnel-agent": "^0.6.0", - "which-pm-runs": "^1.0.0" - }, - "bin": { - "prebuild-install": "bin.js" + "p-locate": "^4.1.0" }, "engines": { - "node": ">=6" + "node": ">=8" } }, - "node_modules/precond": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/precond/-/precond-0.2.3.tgz", - "integrity": "sha512-QCYG84SgGyGzqJ/vlMsxeXd/pgL/I94ixdNFyh1PusWmTCyVfPJjZ1K1jvHtsbfnXQs2TSkEP2fR7QiMZAnKFQ==", - "engines": { - "node": ">= 0.6" - } + "node_modules/lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" }, - "node_modules/prepend-http": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-2.0.0.tgz", - "integrity": "sha512-ravE6m9Atw9Z/jjttRUZ+clIXogdghyZAuWJ3qEzjT+jI/dL1ifAqhZeC5VHzQp1MSt1+jxKkFNemj/iO7tVUA==", - "engines": { - "node": ">=4" - } + "node_modules/lodash-es": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash-es/-/lodash-es-4.17.21.tgz", + "integrity": "sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw==" }, - "node_modules/prettier": { - "version": "2.8.7", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.8.7.tgz", - "integrity": "sha512-yPngTo3aXUUmyuTjeTUT75txrf+aMh9FiD7q9ZE/i6r0bPb22g4FsE6Y338PQX1bmfy08i9QQCB7/rcUAVntfw==", - "dev": true, - "bin": { - "prettier": "bin-prettier.js" + "node_modules/lodash.assign": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/lodash.assign/-/lodash.assign-4.2.0.tgz", + "integrity": "sha512-hFuH8TY+Yji7Eja3mGiuAxBqLagejScbG8GbG0j6o9vzn0YL14My+ktnqtZgFTosKymC9/44wP6s7xyuLfnClw==" + }, + "node_modules/lodash.camelcase": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz", + "integrity": "sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA==", + "dev": true + }, + "node_modules/lodash.debounce": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz", + "integrity": "sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==" + }, + "node_modules/lodash.defaults": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/lodash.defaults/-/lodash.defaults-4.2.0.tgz", + "integrity": "sha512-qjxPLHd3r5DnsdGacqOMU6pb/avJzdh9tFX2ymgoZE27BmjXrNy/y4LoaiTeAb+O3gL8AfpJGtqfX/ae2leYYQ==" + }, + "node_modules/lodash.flatten": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/lodash.flatten/-/lodash.flatten-4.4.0.tgz", + "integrity": "sha512-C5N2Z3DgnnKr0LOpv/hKCgKdb7ZZwafIrsesve6lmzvZIRZRGaZ/l6Q8+2W7NaT+ZwO3fFlSCzCzrDCFdJfZ4g==", + "dev": true + }, + "node_modules/lodash.merge": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", + "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", + "dev": true + }, + "node_modules/lodash.omit": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.omit/-/lodash.omit-4.5.0.tgz", + "integrity": "sha512-XeqSp49hNGmlkj2EJlfrQFIzQ6lXdNro9sddtQzcJY8QaoC2GO0DT7xaIokHeyM+mIT0mPMlPvkYzg2xCuHdZg==", + "optional": true + }, + "node_modules/lodash.pick": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/lodash.pick/-/lodash.pick-4.4.0.tgz", + "integrity": "sha512-hXt6Ul/5yWjfklSGvLQl8vM//l3FtyHZeuelpzK6mm99pNvN9yTDruNZPEJZD1oWrqo+izBmB7oUfWgcCX7s4Q==", + "optional": true + }, + "node_modules/lodash.sortby": { + "version": "4.7.0", + "resolved": "https://registry.npmjs.org/lodash.sortby/-/lodash.sortby-4.7.0.tgz", + "integrity": "sha512-HDWXG8isMntAyRF5vZ7xKuEvOhT4AhlRt/3czTSjvGUxjYCBVRQY48ViDHyfYz9VIoBkW4TMGQNapx+l3RUwdA==", + "optional": true + }, + "node_modules/lodash.truncate": { + "version": "4.4.2", + "resolved": "https://registry.npmjs.org/lodash.truncate/-/lodash.truncate-4.4.2.tgz", + "integrity": "sha512-jttmRe7bRse52OsWIMDLaXxWqRAmtIUccAQ3garviCqJjafXOfNMO0yMfNpdD6zbGaTU0P5Nz7e7gAT6cKmJRw==", + "dev": true + }, + "node_modules/log-symbols": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", + "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", + "dependencies": { + "chalk": "^4.1.0", + "is-unicode-supported": "^0.1.0" }, "engines": { - "node": ">=10.13.0" + "node": ">=10" }, "funding": { - "url": "https://github.com/prettier/prettier?sponsor=1" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/process": { - "version": "0.11.10", - "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", - "integrity": "sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==", + "node_modules/loglevel": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/loglevel/-/loglevel-1.8.1.tgz", + "integrity": "sha512-tCRIJM51SHjAayKwC+QAg8hT8vg6z7GSgLJKGvzuPb1Wc+hLzqtuVLxp6/HzSPOozuK+8ErAhy7U/sVzw8Dgfg==", + "optional": true, "engines": { "node": ">= 0.6.0" + }, + "funding": { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/loglevel" } }, - "node_modules/process-nextick-args": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", - "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==" - }, - "node_modules/promise": { - "version": "8.2.0", - "resolved": "https://registry.npmjs.org/promise/-/promise-8.2.0.tgz", - "integrity": "sha512-+CMAlLHqwRYwBMXKCP+o8ns7DN+xHDUiI+0nArsiJ9y+kJVPLFxEaSw6Ha9s9H0tftxg2Yzl25wqj9G7m5wLZg==", - "dependencies": { - "asap": "~2.0.6" - } + "node_modules/long": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/long/-/long-4.0.0.tgz", + "integrity": "sha512-XsP+KhQif4bjX1kbuSiySJFNAehNxgLb6hPRGJ9QsUr8ajHkuXGdrHmFUTUUXhDwVX2R5bY4JNZEwbUiMhV+MA==", + "optional": true }, - "node_modules/promise-to-callback": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/promise-to-callback/-/promise-to-callback-1.0.0.tgz", - "integrity": "sha512-uhMIZmKM5ZteDMfLgJnoSq9GCwsNKrYau73Awf1jIy6/eUcuuZ3P+CD9zUv0kJsIUbU+x6uLNIhXhLHDs1pNPA==", + "node_modules/loose-envify": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", + "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", "dependencies": { - "is-fn": "^1.0.0", - "set-immediate-shim": "^1.0.1" + "js-tokens": "^3.0.0 || ^4.0.0" }, - "engines": { - "node": ">=0.10.0" + "bin": { + "loose-envify": "cli.js" } }, - "node_modules/proper-lockfile": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/proper-lockfile/-/proper-lockfile-4.1.2.tgz", - "integrity": "sha512-TjNPblN4BwAWMXU8s9AEz4JmQxnD1NNL7bNOY/AKUzyamc379FWASUhc/K1pL2noVb+XmZKLL68cjzLsiOAMaA==", - "dev": true, + "node_modules/loupe": { + "version": "2.3.4", + "resolved": "https://registry.npmjs.org/loupe/-/loupe-2.3.4.tgz", + "integrity": "sha512-OvKfgCC2Ndby6aSTREl5aCCPTNIzlDfQZvZxNUrBrihDhL3xcrYegTblhmEiCrg2kKQz4XsFIaemE5BF4ybSaQ==", "dependencies": { - "graceful-fs": "^4.2.4", - "retry": "^0.12.0", - "signal-exit": "^3.0.2" + "get-func-name": "^2.0.0" } }, - "node_modules/proxy-addr": { - "version": "2.0.7", - "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", - "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", - "dependencies": { - "forwarded": "0.2.0", - "ipaddr.js": "1.9.1" - }, + "node_modules/lower-case": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/lower-case/-/lower-case-1.1.4.tgz", + "integrity": "sha512-2Fgx1Ycm599x+WGpIYwJOvsjmXFzTSc34IwDWALRA/8AopUKAVPwfJ+h5+f85BCp0PWmmJcWzEpxOpoXycMpdA==" + }, + "node_modules/lower-case-first": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/lower-case-first/-/lower-case-first-1.0.2.tgz", + "integrity": "sha512-UuxaYakO7XeONbKrZf5FEgkantPf5DUqDayzP5VXZrtRPdH86s4kN47I8B3TW10S4QKiE3ziHNf3kRN//okHjA==", + "dependencies": { + "lower-case": "^1.1.2" + } + }, + "node_modules/lowercase-keys": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-3.0.0.tgz", + "integrity": "sha512-ozCC6gdQ+glXOQsveKD0YsDy8DSQFjDTz4zyzEHNV5+JP5D62LmfDZ6o1cycFx9ouG940M5dE8C8CTewdj2YWQ==", "engines": { - "node": ">= 0.10" + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/proxy-from-env": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", - "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==", - "optional": true + "node_modules/lru_map": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/lru_map/-/lru_map-0.3.3.tgz", + "integrity": "sha512-Pn9cox5CsMYngeDbmChANltQl+5pi6XmTrraMSzhPmMBbmgcxmqWry0U3PGapCU1yB4/LqCcom7qhHZiF/jGfQ==" }, - "node_modules/prr": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/prr/-/prr-1.0.1.tgz", - "integrity": "sha512-yPw4Sng1gWghHQWj0B3ZggWUm4qVbPwPFcRG8KyxiU7J2OHFSoEHKS+EZ3fv5l1t9CyCiop6l/ZYeWbrgoQejw==" + "node_modules/lru-cache": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", + "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", + "dependencies": { + "yallist": "^3.0.2" + } }, - "node_modules/psl": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/psl/-/psl-1.9.0.tgz", - "integrity": "sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag==" + "node_modules/lru-queue": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/lru-queue/-/lru-queue-0.1.0.tgz", + "integrity": "sha512-BpdYkt9EvGl8OfWHDQPISVpcl5xZthb+XPsbELj5AQXxIC8IriDZIQYjBJPEm5rS420sjZ0TLEzRcq5KdBhYrQ==", + "dependencies": { + "es5-ext": "~0.10.2" + } }, - "node_modules/pstree.remy": { - "version": "1.1.8", - "resolved": "https://registry.npmjs.org/pstree.remy/-/pstree.remy-1.1.8.tgz", - "integrity": "sha512-77DZwxQmxKnu3aR542U+X8FypNzbfJ+C5XQDk3uWjWxn6151aIMGthWYRXTqT1E5oJvg+ljaa2OJi+VfvCOQ8w==" + "node_modules/ltgt": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ltgt/-/ltgt-2.2.1.tgz", + "integrity": "sha512-AI2r85+4MquTw9ZYqabu4nMwy9Oftlfa/e/52t9IjtfG+mGBbTNdAoZ3RQKLHR6r0wQnwZnPIEh/Ya6XTWAKNA==" }, - "node_modules/public-encrypt": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/public-encrypt/-/public-encrypt-4.0.3.tgz", - "integrity": "sha512-zVpa8oKZSz5bTMTFClc1fQOnyyEzpl5ozpi1B5YcvBrdohMjH2rfsBtyXcuNuwjsDIXmBYlF2N5FlJYhR29t8Q==", + "node_modules/make-dir": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-1.3.0.tgz", + "integrity": "sha512-2w31R7SJtieJJnQtGc7RVL2StM2vGYVfqUOvUDxH6bC6aJTxPxTF0GnIgCyu7tjockiUWAYQRbxa7vKn34s5sQ==", "dependencies": { - "bn.js": "^4.1.0", - "browserify-rsa": "^4.0.0", - "create-hash": "^1.1.0", - "parse-asn1": "^5.0.0", - "randombytes": "^2.0.1", - "safe-buffer": "^5.1.2" + "pify": "^3.0.0" + }, + "engines": { + "node": ">=4" } }, - "node_modules/public-encrypt/node_modules/bn.js": { - "version": "4.12.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==" + "node_modules/make-error": { + "version": "1.3.6", + "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", + "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==", + "optional": true, + "peer": true }, - "node_modules/pump": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", - "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", + "node_modules/markdown-table": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/markdown-table/-/markdown-table-1.1.3.tgz", + "integrity": "sha512-1RUZVgQlpJSPWYbFSpmudq5nHY1doEIv89gBtF0s4gW1GF2XorxcA/70M5vq7rLv0a6mhOUccRsqkwhwLCIQ2Q==" + }, + "node_modules/match-all": { + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/match-all/-/match-all-1.2.6.tgz", + "integrity": "sha512-0EESkXiTkWzrQQntBu2uzKvLu6vVkUGz40nGPbSZuegcfE5UuSzNjLaIu76zJWuaT/2I3Z/8M06OlUOZLGwLlQ==", + "dev": true + }, + "node_modules/mathjs": { + "version": "11.11.0", + "resolved": "https://registry.npmjs.org/mathjs/-/mathjs-11.11.0.tgz", + "integrity": "sha512-i1Ao/tv1mlNd09XlOMOUu3KMySX3S0jhHNfDPzh0sCnPf1i62x6RjxhLwZ9ytmVSs0OdhF3moI4O84VSEjmUFw==", "dependencies": { - "end-of-stream": "^1.1.0", - "once": "^1.3.1" + "@babel/runtime": "^7.22.6", + "complex.js": "^2.1.1", + "decimal.js": "^10.4.3", + "escape-latex": "^1.2.0", + "fraction.js": "4.3.4", + "javascript-natural-sort": "^0.7.1", + "seedrandom": "^3.0.5", + "tiny-emitter": "^2.1.0", + "typed-function": "^4.1.0" + }, + "bin": { + "mathjs": "bin/cli.js" + }, + "engines": { + "node": ">= 14" } }, - "node_modules/punycode": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.0.tgz", - "integrity": "sha512-Yxz2kRwT90aPiWEMHVYnEf4+rhwF1tBmmZ4KepCP+Wkium9JxtWnUm1nqGwpiAHr/tnTSeHqr3wb++jgSkXjhA==", + "node_modules/mcl-wasm": { + "version": "0.7.9", + "resolved": "https://registry.npmjs.org/mcl-wasm/-/mcl-wasm-0.7.9.tgz", + "integrity": "sha512-iJIUcQWA88IJB/5L15GnJVnSQJmf/YaxxV6zRavv83HILHaJQb6y0iFyDMdDO0gN8X37tdxmAOrH/P8B6RB8sQ==", "engines": { - "node": ">=6" + "node": ">=8.9.0" } }, - "node_modules/pure-rand": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/pure-rand/-/pure-rand-5.0.3.tgz", - "integrity": "sha512-9N8x1h8dptBQpHyC7aZMS+iNOAm97WMGY0AFrguU1cpfW3I5jINkWe5BIY5md0ofy+1TCIELsVcm/GJXZSaPbw==", - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/fast-check" + "node_modules/md5.js": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/md5.js/-/md5.js-1.3.5.tgz", + "integrity": "sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==", + "dependencies": { + "hash-base": "^3.0.0", + "inherits": "^2.0.1", + "safe-buffer": "^5.1.2" } }, - "node_modules/qs": { - "version": "6.11.0", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz", - "integrity": "sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==", - "dependencies": { - "side-channel": "^1.0.4" - }, + "node_modules/media-typer": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", + "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==", "engines": { - "node": ">=0.6" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": ">= 0.6" } }, - "node_modules/query-string": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/query-string/-/query-string-5.1.1.tgz", - "integrity": "sha512-gjWOsm2SoGlgLEdAGt7a6slVOk9mGiXmPFMqrEhLQ68rhQuBnpfs3+EmlvqKyxnCo9/PPlF+9MtY02S1aFg+Jw==", + "node_modules/memdown": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/memdown/-/memdown-5.1.0.tgz", + "integrity": "sha512-B3J+UizMRAlEArDjWHTMmadet+UKwHd3UjMgGBkZcKAxAYVPS9o0Yeiha4qvz7iGiL2Sb3igUft6p7nbFWctpw==", "dependencies": { - "decode-uri-component": "^0.2.0", - "object-assign": "^4.1.0", - "strict-uri-encode": "^1.0.0" + "abstract-leveldown": "~6.2.1", + "functional-red-black-tree": "~1.0.1", + "immediate": "~3.2.3", + "inherits": "~2.0.1", + "ltgt": "~2.2.0", + "safe-buffer": "~5.2.0" }, "engines": { - "node": ">=0.10.0" + "node": ">=6" } }, - "node_modules/querystring": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/querystring/-/querystring-0.2.0.tgz", - "integrity": "sha512-X/xY82scca2tau62i9mDyU9K+I+djTMUsvwf7xnUX5GLvVzgJybOJf4Y6o9Zx3oJK/LSXg5tTZBjwzqVPaPO2g==", - "deprecated": "The querystring API is considered Legacy. new code should use the URLSearchParams API instead.", - "dev": true, + "node_modules/memdown/node_modules/abstract-leveldown": { + "version": "6.2.3", + "resolved": "https://registry.npmjs.org/abstract-leveldown/-/abstract-leveldown-6.2.3.tgz", + "integrity": "sha512-BsLm5vFMRUrrLeCcRc+G0t2qOaTzpoJQLOubq2XM72eNpjF5UdU5o/5NvlNhx95XHcAvcl8OMXr4mlg/fRgUXQ==", + "dependencies": { + "buffer": "^5.5.0", + "immediate": "^3.2.3", + "level-concat-iterator": "~2.0.0", + "level-supports": "~1.0.0", + "xtend": "~4.0.0" + }, "engines": { - "node": ">=0.4.x" + "node": ">=6" } }, - "node_modules/queue-microtask": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", - "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", + "node_modules/memdown/node_modules/buffer": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", + "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", "funding": [ { "type": "github", @@ -26639,528 +28069,478 @@ "type": "consulting", "url": "https://feross.org/support" } - ] + ], + "dependencies": { + "base64-js": "^1.3.1", + "ieee754": "^1.1.13" + } }, - "node_modules/quick-lru": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-5.1.1.tgz", - "integrity": "sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==", - "engines": { - "node": ">=10" + "node_modules/memdown/node_modules/immediate": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/immediate/-/immediate-3.2.3.tgz", + "integrity": "sha512-RrGCXRm/fRVqMIhqXrGEX9rRADavPiDFSoMb/k64i9XMk8uH4r/Omi5Ctierj6XzNecwDbO4WuFbDD1zmpl3Tg==" + }, + "node_modules/memdown/node_modules/level-supports": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/level-supports/-/level-supports-1.0.1.tgz", + "integrity": "sha512-rXM7GYnW8gsl1vedTJIbzOrRv85c/2uCMpiiCzO2fndd06U/kUXEEU9evYn4zFggBOg36IsBW8LzqIpETwwQzg==", + "dependencies": { + "xtend": "^4.0.2" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "engines": { + "node": ">=6" } }, - "node_modules/randombytes": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", - "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", + "node_modules/memoizee": { + "version": "0.4.15", + "resolved": "https://registry.npmjs.org/memoizee/-/memoizee-0.4.15.tgz", + "integrity": "sha512-UBWmJpLZd5STPm7PMUlOw/TSy972M+z8gcyQ5veOnSDRREz/0bmpyTfKt3/51DhEBqCZQn1udM/5flcSPYhkdQ==", "dependencies": { - "safe-buffer": "^5.1.0" + "d": "^1.0.1", + "es5-ext": "^0.10.53", + "es6-weak-map": "^2.0.3", + "event-emitter": "^0.3.5", + "is-promise": "^2.2.2", + "lru-queue": "^0.1.0", + "next-tick": "^1.1.0", + "timers-ext": "^0.1.7" } }, - "node_modules/randomfill": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/randomfill/-/randomfill-1.0.4.tgz", - "integrity": "sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw==", + "node_modules/memory-level": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/memory-level/-/memory-level-1.0.0.tgz", + "integrity": "sha512-UXzwewuWeHBz5krr7EvehKcmLFNoXxGcvuYhC41tRnkrTbJohtS7kVn9akmgirtRygg+f7Yjsfi8Uu5SGSQ4Og==", "dependencies": { - "randombytes": "^2.0.5", - "safe-buffer": "^5.1.0" + "abstract-level": "^1.0.0", + "functional-red-black-tree": "^1.0.1", + "module-error": "^1.0.1" + }, + "engines": { + "node": ">=12" } }, - "node_modules/randomhex": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/randomhex/-/randomhex-0.1.5.tgz", - "integrity": "sha512-2+Kkw7UiZGQWOz7rw8hPW44utkBYMEciQfziaZ71RcyDu+refQWzS/0DgfUSa5MwclrOD3sf3vI5vmrTYjwpjQ==" + "node_modules/memorystream": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/memorystream/-/memorystream-0.3.1.tgz", + "integrity": "sha512-S3UwM3yj5mtUSEfP41UZmt/0SCoVYUcU1rkXv+BQ5Ig8ndL4sPoJNBUJERafdPb5jjHJGuMgytgKvKIf58XNBw==", + "engines": { + "node": ">= 0.10.0" + } }, - "node_modules/range-parser": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", - "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", + "node_modules/merge-descriptors": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", + "integrity": "sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w==" + }, + "node_modules/merkle-patricia-tree": { + "version": "4.2.4", + "resolved": "https://registry.npmjs.org/merkle-patricia-tree/-/merkle-patricia-tree-4.2.4.tgz", + "integrity": "sha512-eHbf/BG6eGNsqqfbLED9rIqbsF4+sykEaBn6OLNs71tjclbMcMOk1tEPmJKcNcNCLkvbpY/lwyOlizWsqPNo8w==", + "dependencies": { + "@types/levelup": "^4.3.0", + "ethereumjs-util": "^7.1.4", + "level-mem": "^5.0.1", + "level-ws": "^2.0.0", + "readable-stream": "^3.6.0", + "semaphore-async-await": "^1.5.1" + } + }, + "node_modules/methods": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", + "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==", "engines": { "node": ">= 0.6" } }, - "node_modules/raw-body": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.1.tgz", - "integrity": "sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig==", + "node_modules/micro-ftch": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/micro-ftch/-/micro-ftch-0.3.1.tgz", + "integrity": "sha512-/0LLxhzP0tfiR5hcQebtudP56gUurs2CLkGarnCiB/OqEyUFQ6U3paQi/tgLv0hBJYt2rnr9MNpxz4fiiugstg==" + }, + "node_modules/micromatch": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", + "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", "dependencies": { - "bytes": "3.1.2", - "http-errors": "2.0.0", - "iconv-lite": "0.4.24", - "unpipe": "1.0.0" + "braces": "^3.0.2", + "picomatch": "^2.3.1" }, "engines": { - "node": ">= 0.8" + "node": ">=8.6" } }, - "node_modules/rc": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", - "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", - "optional": true, + "node_modules/miller-rabin": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/miller-rabin/-/miller-rabin-4.0.1.tgz", + "integrity": "sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA==", "dependencies": { - "deep-extend": "^0.6.0", - "ini": "~1.3.0", - "minimist": "^1.2.0", - "strip-json-comments": "~2.0.1" + "bn.js": "^4.0.0", + "brorand": "^1.0.1" }, "bin": { - "rc": "cli.js" + "miller-rabin": "bin/miller-rabin" } }, - "node_modules/rc/node_modules/strip-json-comments": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", - "integrity": "sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==", - "optional": true, - "engines": { - "node": ">=0.10.0" - } + "node_modules/miller-rabin/node_modules/bn.js": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==" }, - "node_modules/read-pkg": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-1.1.0.tgz", - "integrity": "sha512-7BGwRHqt4s/uVbuyoeejRn4YmFnYZiFl4AuaeXHlgZf3sONF0SOGlxs2Pw8g6hCKupo08RafIO5YXFNOKTfwsQ==", - "dependencies": { - "load-json-file": "^1.0.0", - "normalize-package-data": "^2.3.2", - "path-type": "^1.0.0" + "node_modules/mime": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", + "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", + "bin": { + "mime": "cli.js" }, "engines": { - "node": ">=0.10.0" + "node": ">=4" } }, - "node_modules/read-pkg-up": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-1.0.1.tgz", - "integrity": "sha512-WD9MTlNtI55IwYUS27iHh9tK3YoIVhxis8yKhLpTqWtml739uXc9NWTpxoHkfZf3+DkCCsXox94/VWZniuZm6A==", - "dependencies": { - "find-up": "^1.0.0", - "read-pkg": "^1.0.0" - }, + "node_modules/mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", "engines": { - "node": ">=0.10.0" + "node": ">= 0.6" } }, - "node_modules/read-pkg-up/node_modules/find-up": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz", - "integrity": "sha512-jvElSjyuo4EMQGoTwo1uJU5pQMwTW5lS1x05zzfJuTIyLR3zwO27LYrxNg+dlvKpGOuGy/MzBdXh80g0ve5+HA==", + "node_modules/mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", "dependencies": { - "path-exists": "^2.0.0", - "pinkie-promise": "^2.0.0" + "mime-db": "1.52.0" }, "engines": { - "node": ">=0.10.0" + "node": ">= 0.6" } }, - "node_modules/read-pkg-up/node_modules/path-exists": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz", - "integrity": "sha512-yTltuKuhtNeFJKa1PiRzfLAU5182q1y4Eb4XCJ3PBqyzEDkAZRzBrKKBct682ls9reBVHf9udYLN5Nd+K1B9BQ==", - "dependencies": { - "pinkie-promise": "^2.0.0" - }, + "node_modules/mimic-fn": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-3.1.0.tgz", + "integrity": "sha512-Ysbi9uYW9hFyfrThdDEQuykN4Ey6BuwPD2kpI5ES/nFTDn/98yxYNLZJcgUAKPT/mcrLLKaGzJR9YVxJrIdASQ==", + "optional": true, "engines": { - "node": ">=0.10.0" + "node": ">=8" } }, - "node_modules/readable-stream": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", - "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "node_modules/min-document": { + "version": "2.19.0", + "resolved": "https://registry.npmjs.org/min-document/-/min-document-2.19.0.tgz", + "integrity": "sha512-9Wy1B3m3f66bPPmU5hdA4DR4PB2OfDU/+GS3yAB7IQozE3tqXaVv2zOjgla7MEGSRv95+ILmOuvhLkOK6wJtCQ==", "dependencies": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - }, - "engines": { - "node": ">= 6" + "dom-walk": "^0.1.0" } }, - "node_modules/readdirp": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", - "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "node_modules/minimalistic-assert": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", + "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==" + }, + "node_modules/minimalistic-crypto-utils": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz", + "integrity": "sha512-JIYlbt6g8i5jKfJ3xz7rF0LXmv2TkDxBLUkiBeZ7bAx4GnnNMr8xFpGnOxn6GhTEHx3SjRrZEoU+j04prX1ktg==" + }, + "node_modules/minimatch": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.0.tgz", + "integrity": "sha512-9TPBGGak4nHfGZsPBohm9AWg6NoT7QTCehS3BIJABslyZbzxfV78QM2Y6+i741OPZIafFAaiiEMh5OyIrJPgtg==", "dependencies": { - "picomatch": "^2.2.1" + "brace-expansion": "^2.0.1" }, "engines": { - "node": ">=8.10.0" + "node": ">=10" } }, - "node_modules/reduce-flatten": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/reduce-flatten/-/reduce-flatten-2.0.0.tgz", - "integrity": "sha512-EJ4UNY/U1t2P/2k6oqotuX2Cc3T6nxJwsM0N0asT7dhrtH1ltUxDn4NalSYmPE2rCkVpcf/X6R0wDwcFpzhd4w==", - "dev": true, - "engines": { - "node": ">=6" + "node_modules/minimist": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.7.tgz", + "integrity": "sha512-bzfL1YUZsP41gmu/qjrEk0Q6i2ix/cVeAhbCbqH9u3zYutS1cLg00qhrD0M2MVdCcx4Sc0UpP2eBWo9rotpq6g==", + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/redux": { - "version": "3.7.2", - "resolved": "https://registry.npmjs.org/redux/-/redux-3.7.2.tgz", - "integrity": "sha512-pNqnf9q1hI5HHZRBkj3bAngGZW/JMCmexDlOxw4XagXY2o1327nHH54LoTjiPJ0gizoqPDRqWyX/00g0hD6w+A==", + "node_modules/minipass": { + "version": "2.9.0", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-2.9.0.tgz", + "integrity": "sha512-wxfUjg9WebH+CUDX/CdbRlh5SmfZiy/hpkxaRI16Y9W56Pa75sWgd/rvFilSgrauD9NyFymP/+JFV3KwzIsJeg==", "dependencies": { - "lodash": "^4.2.1", - "lodash-es": "^4.2.1", - "loose-envify": "^1.1.0", - "symbol-observable": "^1.0.3" + "safe-buffer": "^5.1.2", + "yallist": "^3.0.0" } }, - "node_modules/redux-saga": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/redux-saga/-/redux-saga-1.0.0.tgz", - "integrity": "sha512-GvJWs/SzMvEQgeaw6sRMXnS2FghlvEGsHiEtTLpJqc/FHF3I5EE/B+Hq5lyHZ8LSoT2r/X/46uWvkdCnK9WgHA==", + "node_modules/minizlib": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-1.3.3.tgz", + "integrity": "sha512-6ZYMOEnmVsdCeTJVE0W9ZD+pVnE8h9Hma/iOwwRDsdQoePpoX56/8B6z3P9VNwppJuBKNRuFDRNRqRWexT9G9Q==", "dependencies": { - "@redux-saga/core": "^1.0.0" + "minipass": "^2.9.0" } }, - "node_modules/regenerator-runtime": { - "version": "0.13.11", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz", - "integrity": "sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==" - }, - "node_modules/regexp.prototype.flags": { - "version": "1.4.3", - "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.4.3.tgz", - "integrity": "sha512-fjggEOO3slI6Wvgjwflkc4NFRCTZAu5CnNfBd5qOMYhWdn67nJBBu34/TkD++eeFmd8C9r9jfXJ27+nSiRkSUA==", + "node_modules/mkdirp": { + "version": "0.5.6", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", + "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "functions-have-names": "^1.2.2" - }, - "engines": { - "node": ">= 0.4" + "minimist": "^1.2.6" }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "bin": { + "mkdirp": "bin/cmd.js" } }, - "node_modules/req-cwd": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/req-cwd/-/req-cwd-2.0.0.tgz", - "integrity": "sha512-ueoIoLo1OfB6b05COxAA9UpeoscNpYyM+BqYlA7H6LVF4hKGPXQQSSaD2YmvDVJMkk4UDpAHIeU1zG53IqjvlQ==", + "node_modules/mkdirp-classic": { + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz", + "integrity": "sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==" + }, + "node_modules/mkdirp-promise": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/mkdirp-promise/-/mkdirp-promise-5.0.1.tgz", + "integrity": "sha512-Hepn5kb1lJPtVW84RFT40YG1OddBNTOVUZR2bzQUHc+Z03en8/3uX0+060JDhcEzyO08HmipsN9DcnFMxhIL9w==", + "deprecated": "This package is broken and no longer maintained. 'mkdirp' itself supports promises now, please switch to that.", "dependencies": { - "req-from": "^2.0.0" + "mkdirp": "*" }, "engines": { "node": ">=4" } }, - "node_modules/req-from": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/req-from/-/req-from-2.0.0.tgz", - "integrity": "sha512-LzTfEVDVQHBRfjOUMgNBA+V6DWsSnoeKzf42J7l0xa/B4jyPOuuF5MlNSmomLNGemWTnV2TIdjSSLnEn95fOQA==", + "node_modules/mnemonist": { + "version": "0.38.5", + "resolved": "https://registry.npmjs.org/mnemonist/-/mnemonist-0.38.5.tgz", + "integrity": "sha512-bZTFT5rrPKtPJxj8KSV0WkPyNxl72vQepqqVUAW2ARUpUSF2qXMB6jZj7hW5/k7C1rtpzqbD/IIbJwLXUjCHeg==", "dependencies": { - "resolve-from": "^3.0.0" - }, - "engines": { - "node": ">=4" + "obliterator": "^2.0.0" } }, - "node_modules/request": { - "version": "2.88.2", - "resolved": "https://registry.npmjs.org/request/-/request-2.88.2.tgz", - "integrity": "sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw==", - "deprecated": "request has been deprecated, see https://github.com/request/request/issues/3142", + "node_modules/mocha": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/mocha/-/mocha-10.1.0.tgz", + "integrity": "sha512-vUF7IYxEoN7XhQpFLxQAEMtE4W91acW4B6En9l97MwE9stL1A9gusXfoHZCLVHDUJ/7V5+lbCM6yMqzo5vNymg==", "dependencies": { - "aws-sign2": "~0.7.0", - "aws4": "^1.8.0", - "caseless": "~0.12.0", - "combined-stream": "~1.0.6", - "extend": "~3.0.2", - "forever-agent": "~0.6.1", - "form-data": "~2.3.2", - "har-validator": "~5.1.3", - "http-signature": "~1.2.0", - "is-typedarray": "~1.0.0", - "isstream": "~0.1.2", - "json-stringify-safe": "~5.0.1", - "mime-types": "~2.1.19", - "oauth-sign": "~0.9.0", - "performance-now": "^2.1.0", - "qs": "~6.5.2", - "safe-buffer": "^5.1.2", - "tough-cookie": "~2.5.0", - "tunnel-agent": "^0.6.0", - "uuid": "^3.3.2" + "ansi-colors": "4.1.1", + "browser-stdout": "1.3.1", + "chokidar": "3.5.3", + "debug": "4.3.4", + "diff": "5.0.0", + "escape-string-regexp": "4.0.0", + "find-up": "5.0.0", + "glob": "7.2.0", + "he": "1.2.0", + "js-yaml": "4.1.0", + "log-symbols": "4.1.0", + "minimatch": "5.0.1", + "ms": "2.1.3", + "nanoid": "3.3.3", + "serialize-javascript": "6.0.0", + "strip-json-comments": "3.1.1", + "supports-color": "8.1.1", + "workerpool": "6.2.1", + "yargs": "16.2.0", + "yargs-parser": "20.2.4", + "yargs-unparser": "2.0.0" + }, + "bin": { + "_mocha": "bin/_mocha", + "mocha": "bin/mocha.js" }, "engines": { - "node": ">= 6" + "node": ">= 14.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/mochajs" } }, - "node_modules/request-promise-core": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/request-promise-core/-/request-promise-core-1.1.4.tgz", - "integrity": "sha512-TTbAfBBRdWD7aNNOoVOBH4pN/KigV6LyapYNNlAPA8JwbovRti1E88m3sYAwsLi5ryhPKsE9APwnjFTgdUjTpw==", - "dependencies": { - "lodash": "^4.17.19" - }, + "node_modules/mocha/node_modules/ansi-colors": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz", + "integrity": "sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==", "engines": { - "node": ">=0.10.0" - }, - "peerDependencies": { - "request": "^2.34" + "node": ">=6" } }, - "node_modules/request-promise-native": { - "version": "1.0.9", - "resolved": "https://registry.npmjs.org/request-promise-native/-/request-promise-native-1.0.9.tgz", - "integrity": "sha512-wcW+sIUiWnKgNY0dqCpOZkUbF/I+YPi+f09JZIDa39Ec+q82CpSYniDp+ISgTTbKmnpJWASeJBPZmoxH84wt3g==", - "deprecated": "request-promise-native has been deprecated because it extends the now deprecated request package, see https://github.com/request/request/issues/3142", + "node_modules/mocha/node_modules/find-up": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", "dependencies": { - "request-promise-core": "1.1.4", - "stealthy-require": "^1.1.1", - "tough-cookie": "^2.3.3" + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" }, "engines": { - "node": ">=0.12.0" + "node": ">=10" }, - "peerDependencies": { - "request": "^2.34" + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/request/node_modules/form-data": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz", - "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==", + "node_modules/mocha/node_modules/glob": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz", + "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==", "dependencies": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.6", - "mime-types": "^2.1.12" + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" }, "engines": { - "node": ">= 0.12" - } - }, - "node_modules/request/node_modules/qs": { - "version": "6.5.3", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.3.tgz", - "integrity": "sha512-qxXIEh4pCGfHICj1mAJQ2/2XVZkjCDTcEgfoSQxc/fYivUZxTkk7L3bDBJSoNrEzXI17oUO5Dp07ktqE5KzczA==", - "engines": { - "node": ">=0.6" - } - }, - "node_modules/request/node_modules/uuid": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", - "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==", - "deprecated": "Please upgrade to version 7 or higher. Older versions may use Math.random() in certain circumstances, which is known to be problematic. See https://v8.dev/blog/math-random for details.", - "bin": { - "uuid": "bin/uuid" - } - }, - "node_modules/require-directory": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", - "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/require-from-string": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", - "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/require-main-filename": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-1.0.1.tgz", - "integrity": "sha512-IqSUtOVP4ksd1C/ej5zeEh/BIP2ajqpn8c5x+q99gvcIG/Qf0cud5raVnE/Dwd0ua9TXYDoDc0RE5hBSdz22Ug==" - }, - "node_modules/reselect": { - "version": "4.1.8", - "resolved": "https://registry.npmjs.org/reselect/-/reselect-4.1.8.tgz", - "integrity": "sha512-ab9EmR80F/zQTMNeneUr4cv+jSwPJgIlvEmVwLerwrWVbpLlBuls9XHzIeTFy4cegU2NHBp3va0LKOzU5qFEYQ==" - }, - "node_modules/reselect-tree": { - "version": "1.3.7", - "resolved": "https://registry.npmjs.org/reselect-tree/-/reselect-tree-1.3.7.tgz", - "integrity": "sha512-kZN+C1cVJ6fFN2smSb0l4UvYZlRzttgnu183svH4NrU22cBY++ikgr2QT75Uuk4MYpv5gXSVijw4c5U6cx6GKg==", - "dependencies": { - "debug": "^3.1.0", - "json-pointer": "^0.6.1", - "reselect": "^4.0.0" + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/reselect-tree/node_modules/debug": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "node_modules/mocha/node_modules/glob/node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", "dependencies": { - "ms": "^2.1.1" + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" } }, - "node_modules/resolve": { - "version": "1.17.0", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.17.0.tgz", - "integrity": "sha512-ic+7JYiV8Vi2yzQGFWOkiZD5Z9z7O2Zhm9XMaTxdJExKasieFCr+yXZ/WmXsckHiKl12ar0y6XiXDx3m4RHn1w==", + "node_modules/mocha/node_modules/glob/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", "dependencies": { - "path-parse": "^1.0.6" + "brace-expansion": "^1.1.7" }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/resolve-alpn": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/resolve-alpn/-/resolve-alpn-1.2.1.tgz", - "integrity": "sha512-0a1F4l73/ZFZOakJnQ3FvkJ2+gSTQWz/r2KE5OdDY0TxPm5h4GkqkWWfM47T7HsbnOtcJVEF4epCVy6u7Q3K+g==" - }, - "node_modules/resolve-from": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-3.0.0.tgz", - "integrity": "sha512-GnlH6vxLymXJNMBo7XP1fJIzBFbdYt49CuTwmB/6N53t+kMPRMFKz783LlQ4tv28XoQfMWinAJX6WCGf2IlaIw==", "engines": { - "node": ">=4" + "node": "*" } }, - "node_modules/responselike": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/responselike/-/responselike-2.0.1.tgz", - "integrity": "sha512-4gl03wn3hj1HP3yzgdI7d3lCkF95F21Pz4BPGvKHinyQzALR5CapwC8yIi0Rh58DEMQ/SguC03wFj2k0M/mHhw==", + "node_modules/mocha/node_modules/locate-path": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", "dependencies": { - "lowercase-keys": "^2.0.0" + "p-locate": "^5.0.0" + }, + "engines": { + "node": ">=10" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/responselike/node_modules/lowercase-keys": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-2.0.0.tgz", - "integrity": "sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==", - "engines": { - "node": ">=8" - } - }, - "node_modules/restore-cursor": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz", - "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==", - "optional": true, + "node_modules/mocha/node_modules/minimatch": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.0.1.tgz", + "integrity": "sha512-nLDxIFRyhDblz3qMuq+SoRZED4+miJ/G+tdDrjkkkRnjAsBexeGpgjLEQ0blJy7rHhR2b93rhQY4SvyWu9v03g==", "dependencies": { - "onetime": "^5.1.0", - "signal-exit": "^3.0.2" + "brace-expansion": "^2.0.1" }, "engines": { - "node": ">=8" + "node": ">=10" } }, - "node_modules/retry": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/retry/-/retry-0.12.0.tgz", - "integrity": "sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow==", - "dev": true, - "engines": { - "node": ">= 4" - } + "node_modules/mocha/node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" }, - "node_modules/rimraf": { - "version": "2.4.5", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.4.5.tgz", - "integrity": "sha512-J5xnxTyqaiw06JjMftq7L9ouA448dw/E7dKghkP9WpKNuwmARNNg+Gk8/u5ryb9N/Yo2+z3MCwuqFK/+qPOPfQ==", - "dependencies": { - "glob": "^6.0.1" - }, + "node_modules/mocha/node_modules/nanoid": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.3.tgz", + "integrity": "sha512-p1sjXuopFs0xg+fPASzQ28agW1oHD7xDsd9Xkf3T15H3c/cifrFHVwrh74PdoklAPi+i7MdRsE47vm2r6JoB+w==", "bin": { - "rimraf": "bin.js" + "nanoid": "bin/nanoid.cjs" + }, + "engines": { + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" } }, - "node_modules/rimraf/node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "node_modules/mocha/node_modules/p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" + "yocto-queue": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/rimraf/node_modules/glob": { - "version": "6.0.4", - "resolved": "https://registry.npmjs.org/glob/-/glob-6.0.4.tgz", - "integrity": "sha512-MKZeRNyYZAVVVG1oZeLaWie1uweH40m9AZwIwxyPbTSX4hHrVYSzLg0Ro5Z5R7XKkIX+Cc6oD1rqeDJnwsB8/A==", + "node_modules/mocha/node_modules/p-locate": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", "dependencies": { - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "2 || 3", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" + "p-limit": "^3.0.2" }, "engines": { - "node": "*" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/rimraf/node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "node_modules/mocha/node_modules/supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", "dependencies": { - "brace-expansion": "^1.1.7" + "has-flag": "^4.0.0" }, "engines": { - "node": "*" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" } }, - "node_modules/ripemd160": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.2.tgz", - "integrity": "sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==", - "dependencies": { - "hash-base": "^3.0.0", - "inherits": "^2.0.1" - } + "node_modules/mock-fs": { + "version": "4.14.0", + "resolved": "https://registry.npmjs.org/mock-fs/-/mock-fs-4.14.0.tgz", + "integrity": "sha512-qYvlv/exQ4+svI3UOvPUpLDF0OMX5euvUH0Ny4N5QyRyhNdgAgUrVH3iUINSzEPLvx0kbo/Bp28GJKIqvE7URw==" }, - "node_modules/ripemd160-min": { - "version": "0.0.6", - "resolved": "https://registry.npmjs.org/ripemd160-min/-/ripemd160-min-0.0.6.tgz", - "integrity": "sha512-+GcJgQivhs6S9qvLogusiTcS9kQUfgR75whKuy5jIhuiOfQuJ8fjqxV6EGD5duH1Y/FawFUMtMhyeq3Fbnib8A==", + "node_modules/module-error": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/module-error/-/module-error-1.0.2.tgz", + "integrity": "sha512-0yuvsqSCv8LbaOKhnsQ/T5JhyFlCYLPXK3U2sgV10zoKQwzs/MyfuQUOZQ1V/6OCOJsK/TRgNVrPuPDqtdMFtA==", "engines": { - "node": ">=8" + "node": ">=10" } }, - "node_modules/rlp": { - "version": "2.2.7", - "resolved": "https://registry.npmjs.org/rlp/-/rlp-2.2.7.tgz", - "integrity": "sha512-d5gdPmgQ0Z+AklL2NVXr/IoSjNZFfTVvQWzL/AM2AOcSzYP2xjlb0AC8YyCLc41MSNf6P6QVtjgPdmVtzb+4lQ==", - "dependencies": { - "bn.js": "^5.2.0" - }, - "bin": { - "rlp": "bin/rlp" + "node_modules/moment": { + "version": "2.29.4", + "resolved": "https://registry.npmjs.org/moment/-/moment-2.29.4.tgz", + "integrity": "sha512-5LC9SOxjSc2HF6vO2CyuTDNivEdoz2IvyJJGj6X8DJ0eFyfszE0QiEd+iXmBvUP3WHxSjFH/vIsA0EN00cgr8w==", + "optional": true, + "engines": { + "node": "*" } }, - "node_modules/rpc-websockets": { - "version": "7.5.1", - "resolved": "https://registry.npmjs.org/rpc-websockets/-/rpc-websockets-7.5.1.tgz", - "integrity": "sha512-kGFkeTsmd37pHPMaHIgN1LVKXMi0JD782v4Ds9ZKtLlwdTKjn+CxM9A9/gLT2LaOuEcEFGL98h1QWQtlOIdW0w==", + "node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + }, + "node_modules/multibase": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/multibase/-/multibase-0.6.1.tgz", + "integrity": "sha512-pFfAwyTjbbQgNc3G7D48JkJxWtoJoBMaR4xQUOuB8RnCgRqaYmWNFeJTTvrJ2w51bjLq2zTby6Rqj9TQ9elSUw==", + "deprecated": "This module has been superseded by the multiformats module", "dependencies": { - "@babel/runtime": "^7.17.2", - "eventemitter3": "^4.0.7", - "uuid": "^8.3.2", - "ws": "^8.5.0" - }, - "funding": { - "type": "paypal", - "url": "https://paypal.me/kozjak" - }, - "optionalDependencies": { - "bufferutil": "^4.0.1", - "utf-8-validate": "^5.0.2" + "base-x": "^3.0.8", + "buffer": "^5.5.0" } }, - "node_modules/run-parallel-limit": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/run-parallel-limit/-/run-parallel-limit-1.1.0.tgz", - "integrity": "sha512-jJA7irRNM91jaKc3Hcl1npHsFLOXOoTkPCUL1JEa1R82O2miplXXRaGdjW/KM/98YQWDhJLiSs793CnXfblJUw==", + "node_modules/multibase/node_modules/buffer": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", + "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", "funding": [ { "type": "github", @@ -27176,34 +28556,33 @@ } ], "dependencies": { - "queue-microtask": "^1.2.2" + "base64-js": "^1.3.1", + "ieee754": "^1.1.13" } }, - "node_modules/rustbn.js": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/rustbn.js/-/rustbn.js-0.2.0.tgz", - "integrity": "sha512-4VlvkRUuCJvr2J6Y0ImW7NvTCriMi7ErOAqWk1y69vAdoNIzCF3yPmgeNzx+RQTLEDFq5sHfscn1MwHxP9hNfA==" - }, - "node_modules/rxjs": { - "version": "6.6.7", - "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.7.tgz", - "integrity": "sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ==", + "node_modules/multicodec": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/multicodec/-/multicodec-0.5.7.tgz", + "integrity": "sha512-PscoRxm3f+88fAtELwUnZxGDkduE2HD9Q6GHUOywQLjOGT/HAdhjLDYNZ1e7VR0s0TP0EwZ16LNUTFpoBGivOA==", + "deprecated": "This module has been superseded by the multiformats module", "dependencies": { - "tslib": "^1.9.0" - }, - "engines": { - "npm": ">=2.0.0" + "varint": "^5.0.0" } }, - "node_modules/rxjs/node_modules/tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + "node_modules/multihashes": { + "version": "0.4.21", + "resolved": "https://registry.npmjs.org/multihashes/-/multihashes-0.4.21.tgz", + "integrity": "sha512-uVSvmeCWf36pU2nB4/1kzYZjsXD9vofZKpgudqkceYY5g2aZZXJ5r9lxuzoRLl1OAp28XljXsEJ/X/85ZsKmKw==", + "dependencies": { + "buffer": "^5.5.0", + "multibase": "^0.7.0", + "varint": "^5.0.0" + } }, - "node_modules/safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "node_modules/multihashes/node_modules/buffer": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", + "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", "funding": [ { "type": "github", @@ -27217,397 +28596,316 @@ "type": "consulting", "url": "https://feross.org/support" } - ] - }, - "node_modules/safe-event-emitter": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/safe-event-emitter/-/safe-event-emitter-1.0.1.tgz", - "integrity": "sha512-e1wFe99A91XYYxoQbcq2ZJUWurxEyP8vfz7A7vuUe1s95q8r5ebraVaA1BukYJcpM6V16ugWoD9vngi8Ccu5fg==", - "deprecated": "Renamed to @metamask/safe-event-emitter", + ], "dependencies": { - "events": "^3.0.0" + "base64-js": "^1.3.1", + "ieee754": "^1.1.13" } }, - "node_modules/safe-json-stringify": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/safe-json-stringify/-/safe-json-stringify-1.2.0.tgz", - "integrity": "sha512-gH8eh2nZudPQO6TytOvbxnuhYBOvDBBLW52tz5q6X58lJcd/tkmqFR+5Z9adS8aJtURSXWThWy/xJtJwixErvg==", - "optional": true - }, - "node_modules/safe-regex-test": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.0.0.tgz", - "integrity": "sha512-JBUUzyOgEwXQY1NuPtvcj/qcBDbDmEvWufhlnXZIm75DEHp+afM1r1ujJpJsV/gSM4t59tpDyPi1sd6ZaPFfsA==", + "node_modules/multihashes/node_modules/multibase": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/multibase/-/multibase-0.7.0.tgz", + "integrity": "sha512-TW8q03O0f6PNFTQDvh3xxH03c8CjGaaYrjkl9UQPG6rz53TQzzxJVCIWVjzcbN/Q5Y53Zd0IBQBMVktVgNx4Fg==", + "deprecated": "This module has been superseded by the multiformats module", "dependencies": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.1.3", - "is-regex": "^1.1.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "base-x": "^3.0.8", + "buffer": "^5.5.0" } }, - "node_modules/safer-buffer": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" - }, - "node_modules/scrypt-js": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/scrypt-js/-/scrypt-js-3.0.1.tgz", - "integrity": "sha512-cdwTTnqPu0Hyvf5in5asVdZocVDTNRmR7XEcJuIzMjJeSHybHl7vpB66AzwTaIg6CLSbtjcxc8fqcySfnTkccA==" - }, - "node_modules/scryptsy": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/scryptsy/-/scryptsy-2.1.0.tgz", - "integrity": "sha512-1CdSqHQowJBnMAFyPEBRfqag/YP9OF394FV+4YREIJX4ljD7OxvQRDayyoyyCk+senRjSkP6VnUNQmVQqB6g7w==" + "node_modules/murmur-128": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/murmur-128/-/murmur-128-0.2.1.tgz", + "integrity": "sha512-WseEgiRkI6aMFBbj8Cg9yBj/y+OdipwVC7zUo3W2W1JAJITwouUOtpqsmGSg67EQmwwSyod7hsVsWY5LsrfQVg==", + "dev": true, + "dependencies": { + "encode-utf8": "^1.0.2", + "fmix": "^0.1.0", + "imul": "^1.0.0" + } }, - "node_modules/secp256k1": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/secp256k1/-/secp256k1-4.0.3.tgz", - "integrity": "sha512-NLZVf+ROMxwtEj3Xa562qgv2BK5e2WNmXPiOdVIPLgs6lyTzMvBq0aWTYMI5XCP9jZMVKOcqZLw/Wc4vDkuxhA==", - "hasInstallScript": true, + "node_modules/mv": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/mv/-/mv-2.1.1.tgz", + "integrity": "sha512-at/ZndSy3xEGJ8i0ygALh8ru9qy7gWW1cmkaqBN29JmMlIvM//MEO9y1sk/avxuwnPcfhkejkLsuPxH81BrkSg==", + "optional": true, "dependencies": { - "elliptic": "^6.5.4", - "node-addon-api": "^2.0.0", - "node-gyp-build": "^4.2.0" + "mkdirp": "~0.5.1", + "ncp": "~2.0.0", + "rimraf": "~2.4.0" }, "engines": { - "node": ">=10.0.0" + "node": ">=0.8.0" } }, - "node_modules/seedrandom": { - "version": "3.0.5", - "resolved": "https://registry.npmjs.org/seedrandom/-/seedrandom-3.0.5.tgz", - "integrity": "sha512-8OwmbklUNzwezjGInmZ+2clQmExQPvomqjL7LFqOYqtmuxRgQYqOD3mHaU+MvZn5FLUeVxVfQjwLZW/n/JFuqg==" + "node_modules/nan": { + "version": "2.17.0", + "resolved": "https://registry.npmjs.org/nan/-/nan-2.17.0.tgz", + "integrity": "sha512-2ZTgtl0nJsO0KQCjEpxcIr5D+Yv90plTitZt9JBfQvVJDS5seMl3FOvsh3+9CoYWXf/1l5OaZzzF6nDm4cagaQ==" }, - "node_modules/seek-bzip": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/seek-bzip/-/seek-bzip-1.0.6.tgz", - "integrity": "sha512-e1QtP3YL5tWww8uKaOCQ18UxIT2laNBXHjV/S2WYCiK4udiv8lkG89KRIoCjUagnAmCBurjF4zEVX2ByBbnCjQ==", - "dependencies": { - "commander": "^2.8.1" - }, - "bin": { - "seek-bunzip": "bin/seek-bunzip", - "seek-table": "bin/seek-bzip-table" - } + "node_modules/nano-base32": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/nano-base32/-/nano-base32-1.0.1.tgz", + "integrity": "sha512-sxEtoTqAPdjWVGv71Q17koMFGsOMSiHsIFEvzOM7cNp8BXB4AnEwmDabm5dorusJf/v1z7QxaZYxUorU9RKaAw==" }, - "node_modules/semaphore": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/semaphore/-/semaphore-1.1.0.tgz", - "integrity": "sha512-O4OZEaNtkMd/K0i6js9SL+gqy0ZCBMgUvlSqHKi4IBdjhe7wB8pwztUk1BbZ1fmrvpwFrPbHzqd2w5pTcJH6LA==", - "engines": { - "node": ">=0.8.0" - } + "node_modules/nano-json-stream-parser": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/nano-json-stream-parser/-/nano-json-stream-parser-0.1.2.tgz", + "integrity": "sha512-9MqxMH/BSJC7dnLsEMPyfN5Dvoo49IsPFYMcHw3Bcfc2kN0lpHRBSzlMSVx4HGyJ7s9B31CyBTVehWJoQ8Ctew==" }, - "node_modules/semaphore-async-await": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/semaphore-async-await/-/semaphore-async-await-1.5.1.tgz", - "integrity": "sha512-b/ptP11hETwYWpeilHXXQiV5UJNJl7ZWWooKRE5eBIYWoom6dZ0SluCIdCtKycsMtZgKWE01/qAw6jblw1YVhg==", + "node_modules/nanoid": { + "version": "3.3.4", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.4.tgz", + "integrity": "sha512-MqBkQh/OHTS2egovRtLk45wEyNXwF+cokD+1YPf9u5VfJiRdAiRwB2froX5Co9Rh20xs4siNPm8naNotSD6RBw==", + "bin": { + "nanoid": "bin/nanoid.cjs" + }, "engines": { - "node": ">=4.1" + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" } }, - "node_modules/semver": { - "version": "7.3.8", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", - "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", - "dependencies": { - "lru-cache": "^6.0.0" - }, + "node_modules/napi-macros": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/napi-macros/-/napi-macros-2.0.0.tgz", + "integrity": "sha512-A0xLykHtARfueITVDernsAWdtIMbOJgKgcluwENp3AlsKN/PloyO10HtmoqnFAQAcxPkgZN7wdfPfEd0zNGxbg==", + "optional": true + }, + "node_modules/ncp": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ncp/-/ncp-2.0.0.tgz", + "integrity": "sha512-zIdGUrPRFTUELUvr3Gmc7KZ2Sw/h1PiVM0Af/oHB6zgnV1ikqSfRk+TOufi79aHYCW3NiOXmr1BP5nWbzojLaA==", + "optional": true, "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" + "ncp": "bin/ncp" } }, - "node_modules/semver/node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dependencies": { - "yallist": "^4.0.0" - }, + "node_modules/negotiator": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", + "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", "engines": { - "node": ">=10" + "node": ">= 0.6" } }, - "node_modules/semver/node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" + "node_modules/next-tick": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/next-tick/-/next-tick-1.1.0.tgz", + "integrity": "sha512-CXdUiJembsNjuToQvxayPZF9Vqht7hewsvy2sOWafLvi2awflj9mOC6bHIg50orX8IJvWKY9wYQ/zB2kogPslQ==" }, - "node_modules/send": { - "version": "0.18.0", - "resolved": "https://registry.npmjs.org/send/-/send-0.18.0.tgz", - "integrity": "sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==", - "dependencies": { - "debug": "2.6.9", - "depd": "2.0.0", - "destroy": "1.2.0", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "etag": "~1.8.1", - "fresh": "0.5.2", - "http-errors": "2.0.0", - "mime": "1.6.0", - "ms": "2.1.3", - "on-finished": "2.4.1", - "range-parser": "~1.2.1", - "statuses": "2.0.1" - }, - "engines": { - "node": ">= 0.8.0" - } + "node_modules/nice-try": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz", + "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==" }, - "node_modules/send/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "node_modules/no-case": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/no-case/-/no-case-2.3.2.tgz", + "integrity": "sha512-rmTZ9kz+f3rCvK2TD1Ue/oZlns7OGoIWP4fc3llxxRXlOkHKoWPPWJOfFYpITabSow43QJbRIoHQXtt10VldyQ==", "dependencies": { - "ms": "2.0.0" + "lower-case": "^1.1.1" } }, - "node_modules/send/node_modules/debug/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" + "node_modules/node-abort-controller": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/node-abort-controller/-/node-abort-controller-3.1.1.tgz", + "integrity": "sha512-AGK2yQKIjRuqnc6VkX2Xj5d+QW8xZ87pa1UK6yA6ouUyuxfHuMP6umE5QK7UmTeOAymo+Zx1Fxiuw9rVx8taHQ==", + "optional": true }, - "node_modules/send/node_modules/ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" + "node_modules/node-addon-api": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-2.0.2.tgz", + "integrity": "sha512-Ntyt4AIXyaLIuMHF6IOoTakB3K+RWxwtsHNRxllEoA6vPwP9o4866g6YWDLUdnucilZhmkxiHwHr11gAENw+QA==" }, - "node_modules/sentence-case": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/sentence-case/-/sentence-case-2.1.1.tgz", - "integrity": "sha512-ENl7cYHaK/Ktwk5OTD+aDbQ3uC8IByu/6Bkg+HDv8Mm+XnBnppVNalcfJTNsp1ibstKh030/JKQQWglDvtKwEQ==", + "node_modules/node-environment-flags": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/node-environment-flags/-/node-environment-flags-1.0.6.tgz", + "integrity": "sha512-5Evy2epuL+6TM0lCQGpFIj6KwiEsGh1SrHUhTbNX+sLbBtjidPZFAnVK9y5yU1+h//RitLbRHTIMyxQPtxMdHw==", "dependencies": { - "no-case": "^2.2.0", - "upper-case-first": "^1.1.2" + "object.getownpropertydescriptors": "^2.0.3", + "semver": "^5.7.0" } }, - "node_modules/serialize-javascript": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.0.tgz", - "integrity": "sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag==", - "dependencies": { - "randombytes": "^2.1.0" + "node_modules/node-environment-flags/node_modules/semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "bin": { + "semver": "bin/semver" } }, - "node_modules/serve-static": { - "version": "1.15.0", - "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.15.0.tgz", - "integrity": "sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==", + "node_modules/node-fetch": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz", + "integrity": "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==", "dependencies": { - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "parseurl": "~1.3.3", - "send": "0.18.0" + "whatwg-url": "^5.0.0" }, "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/servify": { - "version": "0.1.12", - "resolved": "https://registry.npmjs.org/servify/-/servify-0.1.12.tgz", - "integrity": "sha512-/xE6GvsKKqyo1BAY+KxOWXcLpPsUUyji7Qg3bVD7hh1eRze5bR1uYiuDA/k3Gof1s9BTzQZEJK8sNcNGFIzeWw==", - "dependencies": { - "body-parser": "^1.16.0", - "cors": "^2.8.1", - "express": "^4.14.0", - "request": "^2.79.0", - "xhr": "^2.3.3" + "node": "4.x || >=6.0.0" }, - "engines": { - "node": ">=6" + "peerDependencies": { + "encoding": "^0.1.0" + }, + "peerDependenciesMeta": { + "encoding": { + "optional": true + } } }, - "node_modules/set-blocking": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", - "integrity": "sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==" + "node_modules/node-gyp-build": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.5.0.tgz", + "integrity": "sha512-2iGbaQBV+ITgCz76ZEjmhUKAKVf7xfY1sRl4UiKQspfZMH2h06SyhNsnSVy50cwkFQDGLyif6m/6uFXHkOZ6rg==", + "bin": { + "node-gyp-build": "bin.js", + "node-gyp-build-optional": "optional.js", + "node-gyp-build-test": "build-test.js" + } }, - "node_modules/set-immediate-shim": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/set-immediate-shim/-/set-immediate-shim-1.0.1.tgz", - "integrity": "sha512-Li5AOqrZWCVA2n5kryzEmqai6bKSIvpz5oUJHPVj6+dsbD3X1ixtsY5tEnsaNpH3pFAHmG8eIHUrtEtohrg+UQ==", + "node_modules/node-interval-tree": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/node-interval-tree/-/node-interval-tree-1.3.3.tgz", + "integrity": "sha512-K9vk96HdTK5fEipJwxSvIIqwTqr4e3HRJeJrNxBSeVMNSC/JWARRaX7etOLOuTmrRMeOI/K5TCJu3aWIwZiNTw==", + "dependencies": { + "shallowequal": "^1.0.2" + }, "engines": { - "node": ">=0.10.0" + "node": ">= 7.6.0" } }, - "node_modules/setimmediate": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", - "integrity": "sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA==" - }, - "node_modules/setprototypeof": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", - "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==" + "node_modules/node-releases": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.6.tgz", + "integrity": "sha512-PiVXnNuFm5+iYkLBNeq5211hvO38y63T0i2KKh2KnUs3RpzJ+JtODFjkD8yjLwnDkTYF1eKXheUwdssR+NRZdg==" }, - "node_modules/sha.js": { - "version": "2.4.11", - "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz", - "integrity": "sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==", + "node_modules/nodemon": { + "version": "2.0.22", + "resolved": "https://registry.npmjs.org/nodemon/-/nodemon-2.0.22.tgz", + "integrity": "sha512-B8YqaKMmyuCO7BowF1Z1/mkPqLk6cs/l63Ojtd6otKjMx47Dq1utxfRxcavH1I7VSaL8n5BUaoutadnsX3AAVQ==", "dependencies": { - "inherits": "^2.0.1", - "safe-buffer": "^5.0.1" + "chokidar": "^3.5.2", + "debug": "^3.2.7", + "ignore-by-default": "^1.0.1", + "minimatch": "^3.1.2", + "pstree.remy": "^1.1.8", + "semver": "^5.7.1", + "simple-update-notifier": "^1.0.7", + "supports-color": "^5.5.0", + "touch": "^3.1.0", + "undefsafe": "^2.0.5" }, "bin": { - "sha.js": "bin.js" - } - }, - "node_modules/sha1": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/sha1/-/sha1-1.1.1.tgz", - "integrity": "sha512-dZBS6OrMjtgVkopB1Gmo4RQCDKiZsqcpAQpkV/aaj+FCrCg8r4I4qMkDPQjBgLIxlmu9k4nUbWq6ohXahOneYA==", - "dependencies": { - "charenc": ">= 0.0.1", - "crypt": ">= 0.0.1" + "nodemon": "bin/nodemon.js" }, "engines": { - "node": "*" + "node": ">=8.10.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/nodemon" } }, - "node_modules/sha3": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/sha3/-/sha3-2.1.4.tgz", - "integrity": "sha512-S8cNxbyb0UGUM2VhRD4Poe5N58gJnJsLJ5vC7FYWGUmGhcsj4++WaIOBFVDxlG0W3To6xBuiRh+i0Qp2oNCOtg==", + "node_modules/nodemon/node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", "dependencies": { - "buffer": "6.0.3" + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" } }, - "node_modules/shallowequal": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/shallowequal/-/shallowequal-1.1.0.tgz", - "integrity": "sha512-y0m1JoUZSlPAjXVtPPW70aZWfIL/dSP7AFkRnniLCrK/8MDKog3TySTBmckD+RObVxH0v4Tox67+F14PdED2oQ==" - }, - "node_modules/side-channel": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", - "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", + "node_modules/nodemon/node_modules/debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", "dependencies": { - "call-bind": "^1.0.0", - "get-intrinsic": "^1.0.2", - "object-inspect": "^1.9.0" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "ms": "^2.1.1" } }, - "node_modules/signal-exit": { - "version": "3.0.7", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", - "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", - "devOptional": true - }, - "node_modules/simple-concat": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/simple-concat/-/simple-concat-1.0.1.tgz", - "integrity": "sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] - }, - "node_modules/simple-get": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/simple-get/-/simple-get-3.1.1.tgz", - "integrity": "sha512-CQ5LTKGfCpvE1K0n2us+kuMPbk/q0EKl82s4aheV9oXjFEz6W/Y7oQFVJuU6QG77hRT4Ghb5RURteF5vnWjupA==", - "optional": true, - "dependencies": { - "decompress-response": "^4.2.0", - "once": "^1.3.1", - "simple-concat": "^1.0.0" + "node_modules/nodemon/node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "engines": { + "node": ">=4" } }, - "node_modules/simple-update-notifier": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/simple-update-notifier/-/simple-update-notifier-1.0.7.tgz", - "integrity": "sha512-BBKgR84BJQJm6WjWFMHgLVuo61FBDSj1z/xSFUIozqO6wO7ii0JxCqlIud7Enr/+LhlbNI0whErq96P2qHNWew==", + "node_modules/nodemon/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", "dependencies": { - "semver": "~7.0.0" + "brace-expansion": "^1.1.7" }, "engines": { - "node": ">=8.10.0" + "node": "*" } }, - "node_modules/simple-update-notifier/node_modules/semver": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.0.0.tgz", - "integrity": "sha512-+GB6zVA9LWh6zovYQLALHwv5rb2PHGlJi3lfiqIHxR0uuwCgefcOJc59v9fv1w8GbStwxuuqqAjI9NMAOOgq1A==", + "node_modules/nodemon/node_modules/semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", "bin": { - "semver": "bin/semver.js" + "semver": "bin/semver" } }, - "node_modules/slice-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz", - "integrity": "sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==", - "dev": true, + "node_modules/nodemon/node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", "dependencies": { - "ansi-styles": "^4.0.0", - "astral-regex": "^2.0.0", - "is-fullwidth-code-point": "^3.0.0" + "has-flag": "^3.0.0" }, "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/slice-ansi?sponsor=1" + "node": ">=4" } }, - "node_modules/snake-case": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/snake-case/-/snake-case-2.1.0.tgz", - "integrity": "sha512-FMR5YoPFwOLuh4rRz92dywJjyKYZNLpMn1R5ujVpIYkbA9p01fq8RMg0FkO4M+Yobt4MjHeLTJVm5xFFBHSV2Q==", - "dependencies": { - "no-case": "^2.2.0" + "node_modules/nofilter": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/nofilter/-/nofilter-1.0.4.tgz", + "integrity": "sha512-N8lidFp+fCz+TD51+haYdbDGrcBWwuHX40F5+z0qkUjMJ5Tp+rdSuAkMJ9N9eoolDlEVTf6u5icM+cNKkKW2mA==", + "engines": { + "node": ">=8" } }, - "node_modules/solc": { - "version": "0.8.20", - "resolved": "https://registry.npmjs.org/solc/-/solc-0.8.20.tgz", - "integrity": "sha512-fPRnGspIEqmhu63RFO3pc79sLA7ZmzO0Uy0L5l6hEt2wAsq0o7UV6pXkAp3Mfv9IBhg7Px/oTu3a+y4gs3BWrQ==", + "node_modules/nopt": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-1.0.10.tgz", + "integrity": "sha512-NWmpvLSqUrgrAC9HCuxEvb+PSloHpqVu+FqcO4eeF2h5qYRhA7ev6KvelyQAKtegUbC6RypJnlEOhd8vloNKYg==", "dependencies": { - "command-exists": "^1.2.8", - "commander": "^8.1.0", - "follow-redirects": "^1.12.1", - "js-sha3": "0.8.0", - "memorystream": "^0.3.1", - "semver": "^5.5.0", - "tmp": "0.0.33" + "abbrev": "1" }, "bin": { - "solcjs": "solc.js" + "nopt": "bin/nopt.js" }, "engines": { - "node": ">=10.0.0" + "node": "*" } }, - "node_modules/solc/node_modules/commander": { - "version": "8.3.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-8.3.0.tgz", - "integrity": "sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==", - "engines": { - "node": ">= 12" + "node_modules/normalize-hex": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/normalize-hex/-/normalize-hex-0.0.2.tgz", + "integrity": "sha512-E2dx7XJQnjsm6SkS4G6GGvIXRHaLeWAZE2D2N3aia+OpIif2UT8y4S0KCjrX3WmFDSeFnlNOp0FSHFjLeJ4SJw==", + "dependencies": { + "bn.js": "^4.11.8" } }, - "node_modules/solc/node_modules/semver": { + "node_modules/normalize-hex/node_modules/bn.js": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==" + }, + "node_modules/normalize-package-data": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", + "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", + "dependencies": { + "hosted-git-info": "^2.1.4", + "resolve": "^1.10.0", + "semver": "2 || 3 || 4 || 5", + "validate-npm-package-license": "^3.0.1" + } + }, + "node_modules/normalize-package-data/node_modules/semver": { "version": "5.7.1", "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", @@ -27615,297 +28913,193 @@ "semver": "bin/semver" } }, - "node_modules/solidity-ast": { - "version": "0.4.49", - "resolved": "https://registry.npmjs.org/solidity-ast/-/solidity-ast-0.4.49.tgz", - "integrity": "sha512-Pr5sCAj1SFqzwFZw1HPKSq0PehlQNdM8GwKyAVYh2DOn7/cCK8LUKD1HeHnKtTgBW7hi9h4nnnan7hpAg5RhWQ==", - "dev": true - }, - "node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "node_modules/normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", "engines": { "node": ">=0.10.0" } }, - "node_modules/source-map-support": { - "version": "0.5.21", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", - "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", - "dependencies": { - "buffer-from": "^1.0.0", - "source-map": "^0.6.0" + "node_modules/normalize-url": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-6.1.0.tgz", + "integrity": "sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A==", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/spark-md5": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/spark-md5/-/spark-md5-3.0.2.tgz", - "integrity": "sha512-wcFzz9cDfbuqe0FZzfi2or1sgyIrsDwmPwfZC4hiNidPdPINjeUwNfv5kldczoEAcjl9Y1L3SM7Uz2PUEQzxQw==", - "optional": true - }, - "node_modules/spdx-correct": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.1.tgz", - "integrity": "sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w==", + "node_modules/nth-check": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.1.1.tgz", + "integrity": "sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==", + "devOptional": true, "dependencies": { - "spdx-expression-parse": "^3.0.0", - "spdx-license-ids": "^3.0.0" + "boolbase": "^1.0.0" + }, + "funding": { + "url": "https://github.com/fb55/nth-check?sponsor=1" } }, - "node_modules/spdx-exceptions": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz", - "integrity": "sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==" - }, - "node_modules/spdx-expression-parse": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz", - "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==", - "dependencies": { - "spdx-exceptions": "^2.1.0", - "spdx-license-ids": "^3.0.0" + "node_modules/number-is-nan": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", + "integrity": "sha512-4jbtZXNAsfZbAHiiqjLPBiCl16dES1zI4Hpzzxw61Tk+loF+sBDBKx1ICKKKwIqQ7M0mFn1TmkN7euSncWgHiQ==", + "engines": { + "node": ">=0.10.0" } }, - "node_modules/spdx-license-ids": { - "version": "3.0.12", - "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.12.tgz", - "integrity": "sha512-rr+VVSXtRhO4OHbXUiAF7xW3Bo9DuuF6C5jH+q/x15j2jniycgKbxU09Hr0WqlSLUs4i4ltHGXqTe7VHclYWyA==" - }, - "node_modules/split-ca": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/split-ca/-/split-ca-1.0.1.tgz", - "integrity": "sha512-Q5thBSxp5t8WPTTJQS59LrGqOZqOsrhDGDVm8azCqIBjSBd7nd9o2PM+mDulQQkh8h//4U6hFZnc/mul8t5pWQ==" - }, - "node_modules/sprintf-js": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", - "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==" - }, - "node_modules/ssh2": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/ssh2/-/ssh2-1.11.0.tgz", - "integrity": "sha512-nfg0wZWGSsfUe/IBJkXVll3PEZ//YH2guww+mP88gTpuSU4FtZN7zu9JoeTGOyCNx2dTDtT9fOpWwlzyj4uOOw==", - "hasInstallScript": true, - "dependencies": { - "asn1": "^0.2.4", - "bcrypt-pbkdf": "^1.0.2" - }, - "engines": { - "node": ">=10.16.0" - }, - "optionalDependencies": { - "cpu-features": "~0.0.4", - "nan": "^2.16.0" - } - }, - "node_modules/sshpk": { - "version": "1.17.0", - "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.17.0.tgz", - "integrity": "sha512-/9HIEs1ZXGhSPE8X6Ccm7Nam1z8KcoCqPdI7ecm1N33EzAetWahvQWVqLZtaZQ+IDKX4IyA2o0gBzqIMkAagHQ==", - "dependencies": { - "asn1": "~0.2.3", - "assert-plus": "^1.0.0", - "bcrypt-pbkdf": "^1.0.0", - "dashdash": "^1.12.0", - "ecc-jsbn": "~0.1.1", - "getpass": "^0.1.1", - "jsbn": "~0.1.0", - "safer-buffer": "^2.0.2", - "tweetnacl": "~0.14.0" - }, - "bin": { - "sshpk-conv": "bin/sshpk-conv", - "sshpk-sign": "bin/sshpk-sign", - "sshpk-verify": "bin/sshpk-verify" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/sshpk/node_modules/tweetnacl": { - "version": "0.14.5", - "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", - "integrity": "sha512-KXXFFdAbFXY4geFIwoyNK+f5Z1b7swfXABfL7HXCmoIWMKU3dmS26672A4EeQtDzLKy7SXmfBu51JolvEKwtGA==" - }, - "node_modules/stacktrace-parser": { - "version": "0.1.10", - "resolved": "https://registry.npmjs.org/stacktrace-parser/-/stacktrace-parser-0.1.10.tgz", - "integrity": "sha512-KJP1OCML99+8fhOHxwwzyWrlUuVX5GQ0ZpJTd1DFXhdkrvg1szxfHhawXUZ3g9TkXORQd4/WG68jMlQZ2p8wlg==", + "node_modules/number-to-bn": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/number-to-bn/-/number-to-bn-1.7.0.tgz", + "integrity": "sha512-wsJ9gfSz1/s4ZsJN01lyonwuxA1tml6X1yBDnfpMglypcBRFZZkus26EdPSlqS5GJfYddVZa22p3VNb3z5m5Ig==", "dependencies": { - "type-fest": "^0.7.1" + "bn.js": "4.11.6", + "strip-hex-prefix": "1.0.0" }, "engines": { - "node": ">=6" - } - }, - "node_modules/stacktrace-parser/node_modules/type-fest": { - "version": "0.7.1", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.7.1.tgz", - "integrity": "sha512-Ne2YiiGN8bmrmJJEuTWTLJR32nh/JdL1+PSicowtNb0WFpn59GK8/lfD61bVtzguz7b3PBt74nxpv/Pw5po5Rg==", - "engines": { - "node": ">=8" - } - }, - "node_modules/statuses": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", - "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", - "engines": { - "node": ">= 0.8" + "node": ">=6.5.0", + "npm": ">=3" } }, - "node_modules/stealthy-require": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/stealthy-require/-/stealthy-require-1.1.1.tgz", - "integrity": "sha512-ZnWpYnYugiOVEY5GkcuJK1io5V8QmNYChG62gSit9pQVGErXtrKuPC55ITaVSukmMta5qpMU7vqLt2Lnni4f/g==", - "engines": { - "node": ">=0.10.0" - } + "node_modules/number-to-bn/node_modules/bn.js": { + "version": "4.11.6", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.6.tgz", + "integrity": "sha512-XWwnNNFCuuSQ0m3r3C4LE3EiORltHd9M05pq6FOlVeiophzRbMo50Sbz1ehl8K3Z+jw9+vmgnXefY1hz8X+2wA==" }, - "node_modules/streamsearch": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/streamsearch/-/streamsearch-1.1.0.tgz", - "integrity": "sha512-Mcc5wHehp9aXz1ax6bZUyY5afg9u2rv5cqQI3mRrYkGC8rW2hM02jWuwjtL++LS5qinSyhj2QfLyNsuc+VsExg==", + "node_modules/oauth-sign": { + "version": "0.9.0", + "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz", + "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==", "engines": { - "node": ">=10.0.0" + "node": "*" } }, - "node_modules/strict-uri-encode": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/strict-uri-encode/-/strict-uri-encode-1.1.0.tgz", - "integrity": "sha512-R3f198pcvnB+5IpnBlRkphuE9n46WyVl8I39W/ZUTZLz4nqSP/oLYUrcnJrw462Ds8he4YKMov2efsTIw1BDGQ==", + "node_modules/object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", "engines": { "node": ">=0.10.0" } }, - "node_modules/string_decoder": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", - "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", - "dependencies": { - "safe-buffer": "~5.2.0" - } - }, - "node_modules/string-format": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/string-format/-/string-format-2.0.0.tgz", - "integrity": "sha512-bbEs3scLeYNXLecRRuk6uJxdXUSj6le/8rNPHChIJTn2V79aXVTR1EH2OH5zLKKoz0V02fOUKZZcw01pLUShZA==", - "dev": true - }, - "node_modules/string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/string-width/node_modules/ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "engines": { - "node": ">=8" + "node_modules/object-inspect": { + "version": "1.12.2", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.2.tgz", + "integrity": "sha512-z+cPxW0QGUp0mcqcsgQyLVRDoXFQbXOwBaqyF7VIgI4TWNQsDHrBpUQslRmIfAoYWdYzs6UlKJtB2XJpTaNSpQ==", + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/string-width/node_modules/strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dependencies": { - "ansi-regex": "^5.0.1" - }, + "node_modules/object-keys": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", "engines": { - "node": ">=8" + "node": ">= 0.4" } }, - "node_modules/string.prototype.trimend": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.5.tgz", - "integrity": "sha512-I7RGvmjV4pJ7O3kdf+LXFpVfdNOxtCW/2C8f6jNiW4+PQchwxkCDzlk1/7p+Wl4bqFIZeF47qAHXLuHHWKAxog==", + "node_modules/object.assign": { + "version": "4.1.4", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.4.tgz", + "integrity": "sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ==", "dependencies": { "call-bind": "^1.0.2", "define-properties": "^1.1.4", - "es-abstract": "^1.19.5" + "has-symbols": "^1.0.3", + "object-keys": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/string.prototype.trimstart": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.5.tgz", - "integrity": "sha512-THx16TJCGlsN0o6dl2o6ncWUsdgnLRSA23rRE5pyGBw/mLr3Ej/R2LaqCtgP8VNMGZsvMWnf9ooZPyY2bHvUFg==", + "node_modules/object.getownpropertydescriptors": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.4.tgz", + "integrity": "sha512-sccv3L/pMModT6dJAYF3fzGMVcb38ysQ0tEE6ixv2yXJDtEIPph268OlAdJj5/qZMZDq2g/jqvwppt36uS/uQQ==", "dependencies": { + "array.prototype.reduce": "^1.0.4", "call-bind": "^1.0.2", "define-properties": "^1.1.4", - "es-abstract": "^1.19.5" + "es-abstract": "^1.20.1" + }, + "engines": { + "node": ">= 0.8" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/strip-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", - "integrity": "sha512-4XaJ2zQdCzROZDivEVIDPkcQn8LMFSa8kj8Gxb/Lnwzv9A8VctNZ+lfivC/sV3ivW8ElJTERXZoPBRrZKkNKow==", + "node_modules/obliterator": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/obliterator/-/obliterator-2.0.4.tgz", + "integrity": "sha512-lgHwxlxV1qIg1Eap7LgIeoBWIMFibOjbrYPIPJZcI1mmGAI2m3lNYpK12Y+GBdPQ0U1hRwSord7GIaawz962qQ==" + }, + "node_modules/oboe": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/oboe/-/oboe-2.1.5.tgz", + "integrity": "sha512-zRFWiF+FoicxEs3jNI/WYUrVEgA7DeET/InK0XQuudGHRg8iIob3cNPrJTKaz4004uaA9Pbe+Dwa8iluhjLZWA==", "dependencies": { - "ansi-regex": "^3.0.0" - }, - "engines": { - "node": ">=4" + "http-https": "^1.0.0" } }, - "node_modules/strip-bom": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz", - "integrity": "sha512-kwrX1y7czp1E69n2ajbG65mIo9dqvJ+8aBQXOGVxqwvNbsXdFM6Lq37dLAY3mknUwru8CfcCbfOLL/gMo+fi3g==", + "node_modules/on-finished": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", + "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", "dependencies": { - "is-utf8": "^0.2.0" + "ee-first": "1.1.1" }, "engines": { - "node": ">=0.10.0" + "node": ">= 0.8" } }, - "node_modules/strip-dirs": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/strip-dirs/-/strip-dirs-2.1.0.tgz", - "integrity": "sha512-JOCxOeKLm2CAS73y/U4ZeZPTkE+gNVCzKt7Eox84Iej1LT/2pTWYpZKJuxwQpvX1LiZb1xokNR7RLfuBAa7T3g==", + "node_modules/once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", "dependencies": { - "is-natural-number": "^4.0.1" + "wrappy": "1" } }, - "node_modules/strip-hex-prefix": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/strip-hex-prefix/-/strip-hex-prefix-1.0.0.tgz", - "integrity": "sha512-q8d4ue7JGEiVcypji1bALTos+0pWtyGlivAWyPuTkHzuTCJqrK9sWxYQZUq6Nq3cuyv3bm734IhHvHtGGURU6A==", + "node_modules/onetime": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", + "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", + "optional": true, "dependencies": { - "is-hex-prefixed": "1.0.0" + "mimic-fn": "^2.1.0" }, "engines": { - "node": ">=6.5.0", - "npm": ">=3" + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/strip-indent": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-2.0.0.tgz", - "integrity": "sha512-RsSNPLpq6YUL7QYy44RnPVTn/lcVZtb48Uof3X5JLbF4zD/Gs7ZFDv2HWol+leoQN2mT86LAzSshGfkTlSOpsA==", - "dev": true, + "node_modules/onetime/node_modules/mimic-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", + "optional": true, "engines": { - "node": ">=4" + "node": ">=6" } }, - "node_modules/strip-json-comments": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", - "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", + "node_modules/open": { + "version": "7.4.2", + "resolved": "https://registry.npmjs.org/open/-/open-7.4.2.tgz", + "integrity": "sha512-MVHddDVweXZF3awtlAS+6pgKLlm/JgxZ90+/NBurBoQctVOOB/zDdVjcyPzQ+0laDGbsWgrRkflI65sQeOgT9Q==", + "dependencies": { + "is-docker": "^2.0.0", + "is-wsl": "^2.1.1" + }, "engines": { "node": ">=8" }, @@ -27913,1909 +29107,1809 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/sturdy-websocket": { - "version": "0.1.12", - "resolved": "https://registry.npmjs.org/sturdy-websocket/-/sturdy-websocket-0.1.12.tgz", - "integrity": "sha512-PA7h8LdjaMoIlC5HAwLVzae4raGWgyroscV4oUpEiTtEFINcNa47/CKYT3e98o+FfsJgrclI2pYpaJrz0aaoew==", - "dependencies": { - "lodash.defaults": "^4.2.0" - } - }, - "node_modules/sublevel-pouchdb": { - "version": "7.3.1", - "resolved": "https://registry.npmjs.org/sublevel-pouchdb/-/sublevel-pouchdb-7.3.1.tgz", - "integrity": "sha512-n+4fK72F/ORdqPwoGgMGYeOrW2HaPpW9o9k80bT1B3Cim5BSvkKkr9WbWOWynni/GHkbCEdvLVFJL1ktosAdhQ==", - "optional": true, - "dependencies": { - "inherits": "2.0.4", - "level-codec": "9.0.2", - "ltgt": "2.2.1", - "readable-stream": "1.1.14" - } - }, - "node_modules/sublevel-pouchdb/node_modules/isarray": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", - "integrity": "sha512-D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ==", - "optional": true - }, - "node_modules/sublevel-pouchdb/node_modules/readable-stream": { - "version": "1.1.14", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz", - "integrity": "sha512-+MeVjFf4L44XUkhM1eYbD8fyEsxcV81pqMSR5gblfcLCHfZvbrqy4/qYHE+/R5HoBUT11WV5O08Cr1n3YXkWVQ==", - "optional": true, - "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.1", - "isarray": "0.0.1", - "string_decoder": "~0.10.x" - } - }, - "node_modules/sublevel-pouchdb/node_modules/string_decoder": { - "version": "0.10.31", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", - "integrity": "sha512-ev2QzSzWPYmy9GuqfIVildA4OdcGLeFZQrq5ys6RtiuF+RQQiZWr8TZNyAcuVXyQRYfEO+MsoB/1BuQVhOJuoQ==", - "optional": true + "node_modules/ordinal": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/ordinal/-/ordinal-1.0.3.tgz", + "integrity": "sha512-cMddMgb2QElm8G7vdaa02jhUNbTSrhsgAGUz1OokD83uJTwSUn+nKoNoKVVaRa08yF6sgfO7Maou1+bgLd9rdQ==", + "peer": true }, - "node_modules/superstruct": { - "version": "0.14.2", - "resolved": "https://registry.npmjs.org/superstruct/-/superstruct-0.14.2.tgz", - "integrity": "sha512-nPewA6m9mR3d6k7WkZ8N8zpTWfenFH3q9pA2PkuiZxINr9DKB2+40wEQf0ixn8VaGuJ78AB6iWOtStI+/4FKZQ==" + "node_modules/original-require": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/original-require/-/original-require-1.0.1.tgz", + "integrity": "sha512-5vdKMbE58WaE61uVD+PKyh8xdM398UnjPBLotW2sjG5MzHARwta/+NtMBCBA0t2WQblGYBvq5vsiZpWokwno+A==" }, - "node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "node_modules/os-locale": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-1.4.0.tgz", + "integrity": "sha512-PRT7ZORmwu2MEFt4/fv3Q+mEfN4zetKxufQrkShY2oGvUms9r8otu5HfdyIFHkYXjO7laNsoVGmM2MANfuTA8g==", "dependencies": { - "has-flag": "^4.0.0" + "lcid": "^1.0.0" }, "engines": { - "node": ">=8" - } - }, - "node_modules/swap-case": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/swap-case/-/swap-case-1.1.2.tgz", - "integrity": "sha512-BAmWG6/bx8syfc6qXPprof3Mn5vQgf5dwdUNJhsNqU9WdPt5P+ES/wQ5bxfijy8zwZgZZHslC3iAsxsuQMCzJQ==", - "dependencies": { - "lower-case": "^1.1.1", - "upper-case": "^1.1.1" - } - }, - "node_modules/swarm-js": { - "version": "0.1.42", - "resolved": "https://registry.npmjs.org/swarm-js/-/swarm-js-0.1.42.tgz", - "integrity": "sha512-BV7c/dVlA3R6ya1lMlSSNPLYrntt0LUq4YMgy3iwpCIc6rZnS5W2wUoctarZ5pXlpKtxDDf9hNziEkcfrxdhqQ==", - "dependencies": { - "bluebird": "^3.5.0", - "buffer": "^5.0.5", - "eth-lib": "^0.1.26", - "fs-extra": "^4.0.2", - "got": "^11.8.5", - "mime-types": "^2.1.16", - "mkdirp-promise": "^5.0.1", - "mock-fs": "^4.1.0", - "setimmediate": "^1.0.5", - "tar": "^4.0.2", - "xhr-request": "^1.0.1" + "node": ">=0.10.0" } }, - "node_modules/swarm-js/node_modules/@szmarczak/http-timer": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-4.0.6.tgz", - "integrity": "sha512-4BAffykYOgO+5nzBWYwE3W90sBgLJoUPRWWcL8wlyiM8IB8ipJz3UMJ9KXQd1RKQXpKp8Tutn80HZtWsu2u76w==", - "dependencies": { - "defer-to-connect": "^2.0.0" - }, + "node_modules/os-tmpdir": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", + "integrity": "sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==", "engines": { - "node": ">=10" + "node": ">=0.10.0" } }, - "node_modules/swarm-js/node_modules/buffer": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", - "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "dependencies": { - "base64-js": "^1.3.1", - "ieee754": "^1.1.13" + "node_modules/p-cancelable": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-3.0.0.tgz", + "integrity": "sha512-mlVgR3PGuzlo0MmTdk4cXqXWlwQDLnONTAg6sm62XkMJEiRxN3GL3SffkYvqwonbkJBcrI7Uvv5Zh9yjvn2iUw==", + "engines": { + "node": ">=12.20" } }, - "node_modules/swarm-js/node_modules/cacheable-lookup": { - "version": "5.0.4", - "resolved": "https://registry.npmjs.org/cacheable-lookup/-/cacheable-lookup-5.0.4.tgz", - "integrity": "sha512-2/kNscPhpcxrOigMZzbiWF7dz8ilhb/nIHU3EyZiXWXpeq/au8qJ8VhdftMkty3n7Gj6HIGalQG8oiBNB3AJgA==", + "node_modules/p-finally": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", + "integrity": "sha512-LICb2p9CB7FS+0eR1oqWnHhp0FljGLZCWBE9aix0Uye9W8LTQPwMTYVGWQWIw9RdQiDg4+epXQODwIYJtSJaow==", "engines": { - "node": ">=10.6.0" + "node": ">=4" } }, - "node_modules/swarm-js/node_modules/decompress-response": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-6.0.0.tgz", - "integrity": "sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==", + "node_modules/p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", "dependencies": { - "mimic-response": "^3.1.0" + "p-try": "^2.0.0" }, "engines": { - "node": ">=10" + "node": ">=6" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/swarm-js/node_modules/fs-extra": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-4.0.3.tgz", - "integrity": "sha512-q6rbdDd1o2mAnQreO7YADIxf/Whx4AHBiRf6d+/cVT8h44ss+lHgxf1FemcqDnQt9X3ct4McHr+JMGlYSsK7Cg==", + "node_modules/p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", "dependencies": { - "graceful-fs": "^4.1.2", - "jsonfile": "^4.0.0", - "universalify": "^0.1.0" + "p-limit": "^2.2.0" + }, + "engines": { + "node": ">=8" } }, - "node_modules/swarm-js/node_modules/got": { - "version": "11.8.6", - "resolved": "https://registry.npmjs.org/got/-/got-11.8.6.tgz", - "integrity": "sha512-6tfZ91bOr7bOXnK7PRDCGBLa1H4U080YHNaAQ2KsMGlLEzRbk44nsZF2E1IeRc3vtJHPVbKCYgdFbaGO2ljd8g==", + "node_modules/p-map": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz", + "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==", "dependencies": { - "@sindresorhus/is": "^4.0.0", - "@szmarczak/http-timer": "^4.0.5", - "@types/cacheable-request": "^6.0.1", - "@types/responselike": "^1.0.0", - "cacheable-lookup": "^5.0.3", - "cacheable-request": "^7.0.2", - "decompress-response": "^6.0.0", - "http2-wrapper": "^1.0.0-beta.5.2", - "lowercase-keys": "^2.0.0", - "p-cancelable": "^2.0.0", - "responselike": "^2.0.0" + "aggregate-error": "^3.0.0" }, "engines": { - "node": ">=10.19.0" + "node": ">=10" }, "funding": { - "url": "https://github.com/sindresorhus/got?sponsor=1" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/swarm-js/node_modules/http2-wrapper": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/http2-wrapper/-/http2-wrapper-1.0.3.tgz", - "integrity": "sha512-V+23sDMr12Wnz7iTcDeJr3O6AIxlnvT/bmaAAAP/Xda35C90p9599p0F1eHR/N1KILWSoWVAiOMFjBBXaXSMxg==", + "node_modules/p-timeout": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/p-timeout/-/p-timeout-1.2.1.tgz", + "integrity": "sha512-gb0ryzr+K2qFqFv6qi3khoeqMZF/+ajxQipEF6NteZVnvz9tzdsfAVj3lYtn1gAXvH5lfLwfxEII799gt/mRIA==", "dependencies": { - "quick-lru": "^5.1.1", - "resolve-alpn": "^1.0.0" + "p-finally": "^1.0.0" }, "engines": { - "node": ">=10.19.0" - } - }, - "node_modules/swarm-js/node_modules/jsonfile": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", - "integrity": "sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==", - "optionalDependencies": { - "graceful-fs": "^4.1.6" + "node": ">=4" } }, - "node_modules/swarm-js/node_modules/lowercase-keys": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-2.0.0.tgz", - "integrity": "sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==", + "node_modules/p-try": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", "engines": { - "node": ">=8" + "node": ">=6" } }, - "node_modules/swarm-js/node_modules/mimic-response": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-3.1.0.tgz", - "integrity": "sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } + "node_modules/pako": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.11.tgz", + "integrity": "sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==", + "dev": true }, - "node_modules/swarm-js/node_modules/p-cancelable": { + "node_modules/param-case": { "version": "2.1.1", - "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-2.1.1.tgz", - "integrity": "sha512-BZOr3nRQHOntUjTrH8+Lh54smKHoHyur8We1V8DSMVrl5A2malOOwuJRnKRDjSnkoeBh4at6BwEnb5I7Jl31wg==", - "engines": { - "node": ">=8" + "resolved": "https://registry.npmjs.org/param-case/-/param-case-2.1.1.tgz", + "integrity": "sha512-eQE845L6ot89sk2N8liD8HAuH4ca6Vvr7VWAWwt7+kvvG5aBcPmmphQ68JsEG2qa9n1TykS2DLeMt363AAH8/w==", + "dependencies": { + "no-case": "^2.2.0" } }, - "node_modules/swarm-js/node_modules/universalify": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", - "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", - "engines": { - "node": ">= 4.0.0" + "node_modules/parse-asn1": { + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/parse-asn1/-/parse-asn1-5.1.6.tgz", + "integrity": "sha512-RnZRo1EPU6JBnra2vGHj0yhp6ebyjBZpmUCLHWiFhxlzvBCCpAuZ7elsBp1PVAbQN0/04VD/19rfzlBSwLstMw==", + "dependencies": { + "asn1.js": "^5.2.0", + "browserify-aes": "^1.0.0", + "evp_bytestokey": "^1.0.0", + "pbkdf2": "^3.0.3", + "safe-buffer": "^5.1.1" } }, - "node_modules/symbol-observable": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/symbol-observable/-/symbol-observable-1.2.0.tgz", - "integrity": "sha512-e900nM8RRtGhlV36KGEU9k65K3mPb1WV70OdjfxlG2EAuM1noi/E/BaW/uMhL7bPEssK8QV57vN3esixjUvcXQ==", - "engines": { - "node": ">=0.10.0" - } + "node_modules/parse-cache-control": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parse-cache-control/-/parse-cache-control-1.0.1.tgz", + "integrity": "sha512-60zvsJReQPX5/QP0Kzfd/VrpjScIQ7SHBW6bFCYfEP+fp0Eppr1SHhIO5nd1PjZtvclzSzES9D/p5nFJurwfWg==" }, - "node_modules/sync-request": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/sync-request/-/sync-request-6.1.0.tgz", - "integrity": "sha512-8fjNkrNlNCrVc/av+Jn+xxqfCjYaBoHqCsDz6mt030UMxJGr+GSfCV1dQt2gRtlL63+VPidwDVLr7V2OcTSdRw==", + "node_modules/parse-headers": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/parse-headers/-/parse-headers-2.0.5.tgz", + "integrity": "sha512-ft3iAoLOB/MlwbNXgzy43SWGP6sQki2jQvAyBg/zDFAgr9bfNWZIUj42Kw2eJIl8kEi4PbgE6U1Zau/HwI75HA==" + }, + "node_modules/parse-json": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz", + "integrity": "sha512-QR/GGaKCkhwk1ePQNYDRKYZ3mwU9ypsKhB0XyFnLQdomyEqk3e8wpW3V5Jp88zbxK4n5ST1nqo+g9juTpownhQ==", "dependencies": { - "http-response-object": "^3.0.1", - "sync-rpc": "^1.2.1", - "then-request": "^6.0.0" + "error-ex": "^1.2.0" }, "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/sync-rpc": { - "version": "1.3.6", - "resolved": "https://registry.npmjs.org/sync-rpc/-/sync-rpc-1.3.6.tgz", - "integrity": "sha512-J8jTXuZzRlvU7HemDgHi3pGnh/rkoqR/OZSjhTyyZrEkkYQbk7Z33AXp37mkPfPpfdOuj7Ex3H/TJM1z48uPQw==", - "dependencies": { - "get-port": "^3.1.0" + "node": ">=0.10.0" } }, - "node_modules/table": { - "version": "6.8.0", - "resolved": "https://registry.npmjs.org/table/-/table-6.8.0.tgz", - "integrity": "sha512-s/fitrbVeEyHKFa7mFdkuQMWlH1Wgw/yEXMt5xACT4ZpzWFluehAxRtUUQKPuWhaLAWhFcVx6w3oC8VKaUfPGA==", - "dev": true, + "node_modules/parse5": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-7.1.1.tgz", + "integrity": "sha512-kwpuwzB+px5WUg9pyK0IcK/shltJN5/OVhQagxhCQNtT9Y9QRZqNY2e1cmbu/paRh5LMnz/oVTVLBpjFmMZhSg==", + "devOptional": true, "dependencies": { - "ajv": "^8.0.1", - "lodash.truncate": "^4.4.2", - "slice-ansi": "^4.0.0", - "string-width": "^4.2.3", - "strip-ansi": "^6.0.1" + "entities": "^4.4.0" }, - "engines": { - "node": ">=10.0.0" + "funding": { + "url": "https://github.com/inikulin/parse5?sponsor=1" } }, - "node_modules/table-layout": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/table-layout/-/table-layout-1.0.2.tgz", - "integrity": "sha512-qd/R7n5rQTRFi+Zf2sk5XVVd9UQl6ZkduPFC3S7WEGJAmetDTjY3qPN50eSKzwuzEyQKy5TN2TiZdkIjos2L6A==", - "dev": true, + "node_modules/parse5-htmlparser2-tree-adapter": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/parse5-htmlparser2-tree-adapter/-/parse5-htmlparser2-tree-adapter-7.0.0.tgz", + "integrity": "sha512-B77tOZrqqfUfnVcOrUvfdLbz4pu4RopLD/4vmu3HUPswwTA8OH0EMW9BlWR2B0RCoiZRAHEUu7IxeP1Pd1UU+g==", + "devOptional": true, "dependencies": { - "array-back": "^4.0.1", - "deep-extend": "~0.6.0", - "typical": "^5.2.0", - "wordwrapjs": "^4.0.0" + "domhandler": "^5.0.2", + "parse5": "^7.0.0" }, - "engines": { - "node": ">=8.0.0" + "funding": { + "url": "https://github.com/inikulin/parse5?sponsor=1" } }, - "node_modules/table-layout/node_modules/array-back": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/array-back/-/array-back-4.0.2.tgz", - "integrity": "sha512-NbdMezxqf94cnNfWLL7V/im0Ub+Anbb0IoZhvzie8+4HJ4nMQuzHuy49FkGYCJK2yAloZ3meiB6AVMClbrI1vg==", - "dev": true, + "node_modules/parseurl": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", + "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", "engines": { - "node": ">=8" + "node": ">= 0.8" } }, - "node_modules/table-layout/node_modules/typical": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/typical/-/typical-5.2.0.tgz", - "integrity": "sha512-dvdQgNDNJo+8B2uBQoqdb11eUCE1JQXhvjC/CZtgvZseVd5TYMXnq0+vuUemXbd/Se29cTaUuPX3YIc2xgbvIg==", - "dev": true, - "engines": { - "node": ">=8" + "node_modules/pascal-case": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/pascal-case/-/pascal-case-2.0.1.tgz", + "integrity": "sha512-qjS4s8rBOJa2Xm0jmxXiyh1+OFf6ekCWOvUaRgAQSktzlTbMotS0nmG9gyYAybCWBcuP4fsBeRCKNwGBnMe2OQ==", + "dependencies": { + "camel-case": "^3.0.0", + "upper-case-first": "^1.1.0" } }, - "node_modules/table/node_modules/ajv": { - "version": "8.11.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.11.0.tgz", - "integrity": "sha512-wGgprdCvMalC0BztXvitD2hC04YffAvtsUn93JbGXYLAtCUO4xd17mCCZQxUOItiBwZvJScWo8NIvQMQ71rdpg==", - "dev": true, + "node_modules/patch-package": { + "version": "6.5.1", + "resolved": "https://registry.npmjs.org/patch-package/-/patch-package-6.5.1.tgz", + "integrity": "sha512-I/4Zsalfhc6bphmJTlrLoOcAF87jcxko4q0qsv4bGcurbr8IskEOtdnt9iCmsQVGL1B+iUhSQqweyTLJfCF9rA==", "dependencies": { - "fast-deep-equal": "^3.1.1", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2", - "uri-js": "^4.2.2" + "@yarnpkg/lockfile": "^1.1.0", + "chalk": "^4.1.2", + "cross-spawn": "^6.0.5", + "find-yarn-workspace-root": "^2.0.0", + "fs-extra": "^9.0.0", + "is-ci": "^2.0.0", + "klaw-sync": "^6.0.0", + "minimist": "^1.2.6", + "open": "^7.4.2", + "rimraf": "^2.6.3", + "semver": "^5.6.0", + "slash": "^2.0.0", + "tmp": "^0.0.33", + "yaml": "^1.10.2" + }, + "bin": { + "patch-package": "index.js" }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "node_modules/table/node_modules/ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "dev": true, "engines": { - "node": ">=8" + "node": ">=10", + "npm": ">5" } }, - "node_modules/table/node_modules/json-schema-traverse": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", - "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", - "dev": true - }, - "node_modules/table/node_modules/strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, + "node_modules/patch-package/node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" } }, - "node_modules/tar": { - "version": "4.4.19", - "resolved": "https://registry.npmjs.org/tar/-/tar-4.4.19.tgz", - "integrity": "sha512-a20gEsvHnWe0ygBY8JbxoM4w3SJdhc7ZAuxkLqh+nvNQN2IOt0B5lLgM490X5Hl8FF0dl0tOf2ewFYAlIFgzVA==", + "node_modules/patch-package/node_modules/fs-extra": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", + "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", "dependencies": { - "chownr": "^1.1.4", - "fs-minipass": "^1.2.7", - "minipass": "^2.9.0", - "minizlib": "^1.3.3", - "mkdirp": "^0.5.5", - "safe-buffer": "^5.2.1", - "yallist": "^3.1.1" + "at-least-node": "^1.0.0", + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" }, "engines": { - "node": ">=4.5" + "node": ">=10" } }, - "node_modules/tar-fs": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-2.1.1.tgz", - "integrity": "sha512-V0r2Y9scmbDRLCNex/+hYzvp/zyYjvFbHPNgVTKfQvVrb6guiE/fxP+XblDNR011utopbkex2nM4dHNV6GDsng==", - "optional": true, + "node_modules/patch-package/node_modules/glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", "dependencies": { - "chownr": "^1.1.1", - "mkdirp-classic": "^0.5.2", - "pump": "^3.0.0", - "tar-stream": "^2.1.4" + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/tar-stream": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-2.2.0.tgz", - "integrity": "sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==", + "node_modules/patch-package/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", "dependencies": { - "bl": "^4.0.3", - "end-of-stream": "^1.4.1", - "fs-constants": "^1.0.0", - "inherits": "^2.0.3", - "readable-stream": "^3.1.1" + "brace-expansion": "^1.1.7" }, "engines": { - "node": ">=6" + "node": "*" } }, - "node_modules/testrpc": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/testrpc/-/testrpc-0.0.1.tgz", - "integrity": "sha512-afH1hO+SQ/VPlmaLUFj2636QMeDvPCeQMc/9RBMW0IfjNe9gFD9Ra3ShqYkB7py0do1ZcCna/9acHyzTJ+GcNA==", - "deprecated": "testrpc has been renamed to ganache-cli, please use this package from now on." - }, - "node_modules/text-encoding-utf-8": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/text-encoding-utf-8/-/text-encoding-utf-8-1.0.2.tgz", - "integrity": "sha512-8bw4MY9WjdsD2aMtO0OzOCY3pXGYNx2d2FfHRVUKkiCPDWjKuOlhLVASS+pD7VkLTVjW268LYJHwsnPFlBpbAg==" - }, - "node_modules/then-request": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/then-request/-/then-request-6.0.2.tgz", - "integrity": "sha512-3ZBiG7JvP3wbDzA9iNY5zJQcHL4jn/0BWtXIkagfz7QgOL/LqjCEOBQuJNZfu0XYnv5JhKh+cDxCPM4ILrqruA==", + "node_modules/patch-package/node_modules/rimraf": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", + "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", "dependencies": { - "@types/concat-stream": "^1.6.0", - "@types/form-data": "0.0.33", - "@types/node": "^8.0.0", - "@types/qs": "^6.2.31", - "caseless": "~0.12.0", - "concat-stream": "^1.6.0", - "form-data": "^2.2.0", - "http-basic": "^8.1.1", - "http-response-object": "^3.0.1", - "promise": "^8.0.0", - "qs": "^6.4.0" + "glob": "^7.1.3" }, - "engines": { - "node": ">=6.0.0" + "bin": { + "rimraf": "bin.js" } }, - "node_modules/then-request/node_modules/@types/node": { - "version": "8.10.66", - "resolved": "https://registry.npmjs.org/@types/node/-/node-8.10.66.tgz", - "integrity": "sha512-tktOkFUA4kXx2hhhrB8bIFb5TbwzS4uOhKEmwiD+NoiL0qtP2OQ9mFldbgD4dV1djrlBYP6eBuQZiWjuHUpqFw==" + "node_modules/patch-package/node_modules/semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "bin": { + "semver": "bin/semver" + } }, - "node_modules/then-request/node_modules/form-data": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.5.1.tgz", - "integrity": "sha512-m21N3WOmEEURgk6B9GLOE4RuWOFf28Lhh9qGYeNlGq4VDXUlJy2th2slBNU8Gp8EzloYZOibZJ7t5ecIrFSjVA==", + "node_modules/path": { + "version": "0.12.7", + "resolved": "https://registry.npmjs.org/path/-/path-0.12.7.tgz", + "integrity": "sha512-aXXC6s+1w7otVF9UletFkFcDsJeO7lSZBPUQhtb5O0xJe8LtYhj/GxldoL09bBj9+ZmE2hNoHqQSFMN5fikh4Q==", "dependencies": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.6", - "mime-types": "^2.1.12" - }, - "engines": { - "node": ">= 0.12" + "process": "^0.11.1", + "util": "^0.10.3" } }, - "node_modules/through": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", - "integrity": "sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==" + "node_modules/path-browserify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-1.0.1.tgz", + "integrity": "sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g==", + "dev": true }, - "node_modules/through2": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/through2/-/through2-3.0.2.tgz", - "integrity": "sha512-enaDQ4MUyP2W6ZyT6EsMzqBPZaM/avg8iuo+l2d3QCs0J+6RaqkHV/2/lOwDTueBHeJ/2LG9lrLW3d5rWPucuQ==", - "optional": true, + "node_modules/path-case": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/path-case/-/path-case-2.1.1.tgz", + "integrity": "sha512-Ou0N05MioItesaLr9q8TtHVWmJ6fxWdqKB2RohFmNWVyJ+2zeKIeDNWAN6B/Pe7wpzWChhZX6nONYmOnMeJQ/Q==", "dependencies": { - "inherits": "^2.0.4", - "readable-stream": "2 || 3" + "no-case": "^2.2.0" } }, - "node_modules/timed-out": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/timed-out/-/timed-out-4.0.1.tgz", - "integrity": "sha512-G7r3AhovYtr5YKOWQkta8RKAPb+J9IsO4uVmzjl8AZwfhs8UcUwTiD6gcJYSgOtzyjvQKrKYn41syHbUWMkafA==", + "node_modules/path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", "engines": { - "node": ">=0.10.0" + "node": ">=8" } }, - "node_modules/tiny-emitter": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/tiny-emitter/-/tiny-emitter-2.1.0.tgz", - "integrity": "sha512-NB6Dk1A9xgQPMoGqC5CVXn123gWyte215ONT5Pp5a0yt4nlEoO1ZWeCwpncaekPHXO60i47ihFnZPiRPjRMq4Q==" - }, - "node_modules/tiny-invariant": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/tiny-invariant/-/tiny-invariant-1.3.1.tgz", - "integrity": "sha512-AD5ih2NlSssTCwsMznbvwMZpJ1cbhkGd2uueNxzv2jDlEeZdU04JQfRnggJQ8DrcVBGjAsCKwFBbDlVNtEMlzw==" + "node_modules/path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", + "engines": { + "node": ">=0.10.0" + } }, - "node_modules/tiny-typed-emitter": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/tiny-typed-emitter/-/tiny-typed-emitter-2.1.0.tgz", - "integrity": "sha512-qVtvMxeXbVej0cQWKqVSSAHmKZEHAvxdF8HEUBFWts8h+xEo5m/lEiPakuyZ3BnCBjOD8i24kzNOiOLLgsSxhA==", - "optional": true + "node_modules/path-key": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", + "integrity": "sha512-fEHGKCSmUSDPv4uoj8AlD+joPlq3peND+HRYyxFz4KPw4z926S/b8rIuFs2FYJg3BwsxJf6A9/3eIdLaYC+9Dw==", + "engines": { + "node": ">=4" + } }, - "node_modules/tiny-warning": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/tiny-warning/-/tiny-warning-1.0.3.tgz", - "integrity": "sha512-lBN9zLN/oAf68o3zNXYrdCt1kP8WsiGW8Oo2ka41b2IM5JL/S1CTyX1rW0mb/zSuJun0ZUrDxx4sqvYS2FWzPA==" + "node_modules/path-parse": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==" }, - "node_modules/title-case": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/title-case/-/title-case-2.1.1.tgz", - "integrity": "sha512-EkJoZ2O3zdCz3zJsYCsxyq2OC5hrxR9mfdd5I+w8h/tmFfeOxJ+vvkxsKxdmN0WtS9zLdHEgfgVOiMVgv+Po4Q==", - "dependencies": { - "no-case": "^2.2.0", - "upper-case": "^1.0.3" - } + "node_modules/path-to-regexp": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", + "integrity": "sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==" }, - "node_modules/tmp": { - "version": "0.0.33", - "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", - "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", + "node_modules/path-type": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-1.1.0.tgz", + "integrity": "sha512-S4eENJz1pkiQn9Znv33Q+deTOKmbl+jj1Fl+qiP/vYezj+S8x+J3Uo0ISrx/QoEvIlOaDWJhPaRd1flJ9HXZqg==", "dependencies": { - "os-tmpdir": "~1.0.2" + "graceful-fs": "^4.1.2", + "pify": "^2.0.0", + "pinkie-promise": "^2.0.0" }, "engines": { - "node": ">=0.6.0" + "node": ">=0.10.0" } }, - "node_modules/to-buffer": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/to-buffer/-/to-buffer-1.1.1.tgz", - "integrity": "sha512-lx9B5iv7msuFYE3dytT+KE5tap+rNYw+K4jVkb9R/asAb+pbBSM17jtunHplhBe6RRJdZx3Pn2Jph24O32mOVg==" - }, - "node_modules/to-fast-properties": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", - "integrity": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==", + "node_modules/path-type/node_modules/pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==", "engines": { - "node": ">=4" + "node": ">=0.10.0" } }, - "node_modules/to-hex": { - "version": "0.0.18", - "resolved": "https://registry.npmjs.org/to-hex/-/to-hex-0.0.18.tgz", - "integrity": "sha512-twjjF944fl3eUQBpO7bETUhUyCtUFHWJkSLq9+K/Aw+yh3l/xIYaNUmybRqmxsYoZyv9au4aikDiWoJEOMKBDQ==", + "node_modules/path/node_modules/inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw==" + }, + "node_modules/path/node_modules/util": { + "version": "0.10.4", + "resolved": "https://registry.npmjs.org/util/-/util-0.10.4.tgz", + "integrity": "sha512-0Pm9hTQ3se5ll1XihRic3FDIku70C+iHUdT/W926rSgHV5QgXsYbKZN8MSC3tJtSkhuROzvsQjAaFENRXr+19A==", "dependencies": { - "bignumber.js": "9.0.0", - "normalize-hex": "0.0.2" + "inherits": "2.0.3" } }, - "node_modules/to-hex/node_modules/bignumber.js": { - "version": "9.0.0", - "resolved": "https://registry.npmjs.org/bignumber.js/-/bignumber.js-9.0.0.tgz", - "integrity": "sha512-t/OYhhJ2SD+YGBQcjY8GzzDHEk9f3nerxjtfa6tlMXfe7frs/WozhvCNoGvpM0P3bNf3Gq5ZRMlGr5f3r4/N8A==", + "node_modules/pathval": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/pathval/-/pathval-1.1.1.tgz", + "integrity": "sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ==", "engines": { "node": "*" } }, - "node_modules/to-readable-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/to-readable-stream/-/to-readable-stream-1.0.0.tgz", - "integrity": "sha512-Iq25XBt6zD5npPhlLVXGFN3/gyR2/qODcKNNyTMd4vbm39HUaOiAM4PMq0eMVC/Tkxz+Zjdsc55g9yyz+Yq00Q==", - "engines": { - "node": ">=6" - } - }, - "node_modules/to-regex-range": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", - "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "node_modules/pbkdf2": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.1.2.tgz", + "integrity": "sha512-iuh7L6jA7JEGu2WxDwtQP1ddOpaJNC4KlDEFfdQajSGgGPNi4OyDc2R7QnbY2bR9QjBVGwgvTdNJZoE7RaxUMA==", "dependencies": { - "is-number": "^7.0.0" + "create-hash": "^1.1.2", + "create-hmac": "^1.1.4", + "ripemd160": "^2.0.1", + "safe-buffer": "^5.0.1", + "sha.js": "^2.4.8" }, "engines": { - "node": ">=8.0" + "node": ">=0.12" } }, - "node_modules/toformat": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/toformat/-/toformat-2.0.0.tgz", - "integrity": "sha512-03SWBVop6nU8bpyZCx7SodpYznbZF5R4ljwNLBcTQzKOD9xuihRo/psX58llS1BMFhhAI08H3luot5GoXJz2pQ==" + "node_modules/pend": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz", + "integrity": "sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg==" }, - "node_modules/toidentifier": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", - "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", - "engines": { - "node": ">=0.6" - } + "node_modules/performance-now": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", + "integrity": "sha512-7EAHlyLHI56VEIdK57uwHdHKIaAGbnXPiw0yWbarQZOKaKpvUIgW0jWRVLiatnM+XXlSwsanIBH/hzGMJulMow==" }, - "node_modules/toml": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/toml/-/toml-3.0.0.tgz", - "integrity": "sha512-y/mWCZinnvxjTKYhJ+pYxwD0mRLVvOtdS2Awbgxln6iEnt4rk0yBxeSBHkGJcPucRiG0e55mwWp+g/05rsrd6w==" + "node_modules/picocolors": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", + "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==" }, - "node_modules/touch": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/touch/-/touch-3.1.0.tgz", - "integrity": "sha512-WBx8Uy5TLtOSRtIq+M03/sKDrXCLHxwDcquSP2c43Le03/9serjQBIztjRz6FkJez9D/hleyAXTBGLwwZUw9lA==", - "dependencies": { - "nopt": "~1.0.10" + "node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "engines": { + "node": ">=8.6" }, - "bin": { - "nodetouch": "bin/nodetouch.js" + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" } }, - "node_modules/tough-cookie": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz", - "integrity": "sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==", - "dependencies": { - "psl": "^1.1.28", - "punycode": "^2.1.1" - }, + "node_modules/pify": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", + "integrity": "sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg==", "engines": { - "node": ">=0.8" + "node": ">=4" } }, - "node_modules/tough-cookie/node_modules/punycode": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", - "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", + "node_modules/pinkie": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz", + "integrity": "sha512-MnUuEycAemtSaeFSjXKW/aroV7akBbY+Sv+RkyqFjgAe73F+MR0TBWKBRDkmfWq/HiFmdavfZ1G7h4SPZXaCSg==", "engines": { - "node": ">=6" + "node": ">=0.10.0" } }, - "node_modules/tr46": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", - "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==" - }, - "node_modules/truffle": { - "version": "5.9.0", - "resolved": "https://registry.npmjs.org/truffle/-/truffle-5.9.0.tgz", - "integrity": "sha512-XZBlGzU+IA0F3oDpmTWas62TYrNseG3xYh861zR+E09K2A0E0eSuTi1d5k+Uzhv4I6bIlNSWL31iI1J/PiZxcw==", - "hasInstallScript": true, - "dependencies": { - "@truffle/db-loader": "^0.2.24", - "@truffle/debugger": "^11.1.0", - "app-module-path": "^2.2.0", - "ganache": "7.8.0", - "mocha": "10.1.0", - "original-require": "^1.0.1" - }, - "bin": { - "truffle": "build/cli.bundled.js" - }, - "optionalDependencies": { - "@truffle/db": "^2.0.24" - } - }, - "node_modules/truffle-contract-size": { + "node_modules/pinkie-promise": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/truffle-contract-size/-/truffle-contract-size-2.0.1.tgz", - "integrity": "sha512-AIKPwHPC/1pZwtVjgUcgcK23k6gWxKhn4ZnKLr339uieb94UgAUeIwGUkfc87T+0lqgC6ePY7YhsFeoZK2YEsA==", - "dependencies": { - "cli-table": "^0.3.1", - "yargs": "^15.3.1" - } - }, - "node_modules/truffle-contract-size/node_modules/ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "engines": { - "node": ">=8" - } - }, - "node_modules/truffle-contract-size/node_modules/camelcase": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", - "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", - "engines": { - "node": ">=6" - } - }, - "node_modules/truffle-contract-size/node_modules/cliui": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-6.0.0.tgz", - "integrity": "sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==", + "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz", + "integrity": "sha512-0Gni6D4UcLTbv9c57DfxDGdr41XfgUjqWZu492f0cIGr16zDU06BWP/RAEvOuo7CQ0CNjHaLlM59YJJFm3NWlw==", "dependencies": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.0", - "wrap-ansi": "^6.2.0" - } - }, - "node_modules/truffle-contract-size/node_modules/decamelize": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", - "integrity": "sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==", + "pinkie": "^2.0.0" + }, "engines": { "node": ">=0.10.0" } }, - "node_modules/truffle-contract-size/node_modules/require-main-filename": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz", - "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==" - }, - "node_modules/truffle-contract-size/node_modules/strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "node_modules/pkg-dir": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", + "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", + "optional": true, "dependencies": { - "ansi-regex": "^5.0.1" + "find-up": "^4.0.0" }, "engines": { "node": ">=8" } }, - "node_modules/truffle-contract-size/node_modules/which-module": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz", - "integrity": "sha512-B+enWhmw6cjfVC7kS8Pj9pCrKSc5txArRyaYGe088shv/FGWH+0Rjx/xPgtsWfsUtS27FkP697E4DDhgrgoc0Q==" - }, - "node_modules/truffle-contract-size/node_modules/wrap-ansi": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", - "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", + "node_modules/pkg-up": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/pkg-up/-/pkg-up-3.1.0.tgz", + "integrity": "sha512-nDywThFk1i4BQK4twPQ6TA4RT8bDY96yeuCVBWL3ePARCiEKDRSrNGbFIgUJpLp+XeIR65v8ra7WuJOFUBtkMA==", + "optional": true, "dependencies": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" + "find-up": "^3.0.0" }, "engines": { "node": ">=8" } }, - "node_modules/truffle-contract-size/node_modules/y18n": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.3.tgz", - "integrity": "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==" - }, - "node_modules/truffle-contract-size/node_modules/yargs": { - "version": "15.4.1", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-15.4.1.tgz", - "integrity": "sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==", + "node_modules/pkg-up/node_modules/find-up": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", + "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", + "optional": true, "dependencies": { - "cliui": "^6.0.0", - "decamelize": "^1.2.0", - "find-up": "^4.1.0", - "get-caller-file": "^2.0.1", - "require-directory": "^2.1.1", - "require-main-filename": "^2.0.0", - "set-blocking": "^2.0.0", - "string-width": "^4.2.0", - "which-module": "^2.0.0", - "y18n": "^4.0.0", - "yargs-parser": "^18.1.2" + "locate-path": "^3.0.0" }, "engines": { - "node": ">=8" + "node": ">=6" } }, - "node_modules/truffle-contract-size/node_modules/yargs-parser": { - "version": "18.1.3", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz", - "integrity": "sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==", + "node_modules/pkg-up/node_modules/locate-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", + "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", + "optional": true, "dependencies": { - "camelcase": "^5.0.0", - "decamelize": "^1.2.0" + "p-locate": "^3.0.0", + "path-exists": "^3.0.0" }, "engines": { "node": ">=6" } }, - "node_modules/truffle-hdwallet-provider": { - "version": "1.0.17", - "resolved": "https://registry.npmjs.org/truffle-hdwallet-provider/-/truffle-hdwallet-provider-1.0.17.tgz", - "integrity": "sha512-s6DvSP83jiIAc6TUcpr7Uqnja1+sLGJ8og3X7n41vfyC4OCaKmBtXL5HOHf+SsU3iblOvnbFDgmN6Y1VBL/fsg==", - "deprecated": "WARNING: This package has been renamed to @truffle/hdwallet-provider.", + "node_modules/pkg-up/node_modules/p-locate": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", + "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", + "optional": true, "dependencies": { - "any-promise": "^1.3.0", - "bindings": "^1.3.1", - "web3": "1.2.1", - "websocket": "^1.0.28" + "p-limit": "^2.0.0" + }, + "engines": { + "node": ">=6" } }, - "node_modules/truffle-hdwallet-provider/node_modules/@sindresorhus/is": { - "version": "0.14.0", - "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-0.14.0.tgz", - "integrity": "sha512-9NET910DNaIPngYnLLPeg+Ogzqsi9uM4mSboU5y6p8S5DzMTVEsJZrawi+BoDNUVBa2DhJqQYUFvMDfgU062LQ==", + "node_modules/pkg-up/node_modules/path-exists": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", + "integrity": "sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==", + "optional": true, "engines": { - "node": ">=6" + "node": ">=4" } }, - "node_modules/truffle-hdwallet-provider/node_modules/@szmarczak/http-timer": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-1.1.2.tgz", - "integrity": "sha512-XIB2XbzHTN6ieIjfIMV9hlVcfPU26s2vafYWQcZHWXHOxiaRZYEDKEwdl129Zyg50+foYV2jCgtrqSA6qNuNSA==", + "node_modules/platform-deploy-client": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/platform-deploy-client/-/platform-deploy-client-0.6.0.tgz", + "integrity": "sha512-mBfnOvF2gb9acGJjlXBQ6VOAkKFRdljsNKHUVY5xKqzKP2PNh/RqCIvi5AR5NqLMrQ3XaMIwRvmwAjtGw7JhYg==", + "dev": true, "dependencies": { - "defer-to-connect": "^1.0.1" - }, - "engines": { - "node": ">=6" + "@ethersproject/abi": "^5.6.3", + "axios": "^0.21.2", + "defender-base-client": "^1.44.0", + "lodash": "^4.17.19", + "node-fetch": "^2.6.0" } }, - "node_modules/truffle-hdwallet-provider/node_modules/@types/node": { - "version": "10.17.60", - "resolved": "https://registry.npmjs.org/@types/node/-/node-10.17.60.tgz", - "integrity": "sha512-F0KIgDJfy2nA3zMLmWGKxcH2ZVEtCZXHHdOQs2gSaQ27+lNeEfGxzkIw90aXswATX7AZ33tahPbzy6KAfUreVw==" + "node_modules/pluralize": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/pluralize/-/pluralize-8.0.0.tgz", + "integrity": "sha512-Nc3IT5yHzflTfbjgqWcCPpo7DaKy4FnpB0l/zCAW0Tc7jxAiuqSxHasntB3D7887LSrA93kDJ9IXovxJYxyLCA==", + "optional": true, + "engines": { + "node": ">=4" + } }, - "node_modules/truffle-hdwallet-provider/node_modules/bn.js": { - "version": "4.12.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==" + "node_modules/pollock": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/pollock/-/pollock-0.2.1.tgz", + "integrity": "sha512-2Xy6LImSXm0ANKv9BKSVuCa6Z4ACbK7oUrl9gtUgqLkekL7n9C0mlWsOGYYuGbCG8xT0x3Q4F31C3ZMyVQjwsg==", + "optional": true }, - "node_modules/truffle-hdwallet-provider/node_modules/buffer": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", - "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], + "node_modules/pouchdb": { + "version": "7.3.0", + "resolved": "https://registry.npmjs.org/pouchdb/-/pouchdb-7.3.0.tgz", + "integrity": "sha512-OwsIQGXsfx3TrU1pLruj6PGSwFH+h5k4hGNxFkZ76Um7/ZI8F5TzUHFrpldVVIhfXYi2vP31q0q7ot1FSLFYOw==", + "optional": true, "dependencies": { - "base64-js": "^1.3.1", - "ieee754": "^1.1.13" + "abort-controller": "3.0.0", + "argsarray": "0.0.1", + "buffer-from": "1.1.2", + "clone-buffer": "1.0.0", + "double-ended-queue": "2.1.0-0", + "fetch-cookie": "0.11.0", + "immediate": "3.3.0", + "inherits": "2.0.4", + "level": "6.0.1", + "level-codec": "9.0.2", + "level-write-stream": "1.0.0", + "leveldown": "5.6.0", + "levelup": "4.4.0", + "ltgt": "2.2.1", + "node-fetch": "2.6.7", + "readable-stream": "1.1.14", + "spark-md5": "3.0.2", + "through2": "3.0.2", + "uuid": "8.3.2", + "vuvuzela": "1.0.3" } }, - "node_modules/truffle-hdwallet-provider/node_modules/cacheable-request": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-6.1.0.tgz", - "integrity": "sha512-Oj3cAGPCqOZX7Rz64Uny2GYAZNliQSqfbePrgAQ1wKAihYmCUnraBtJtKcGR4xz7wF+LoJC+ssFZvv5BgF9Igg==", + "node_modules/pouchdb-abstract-mapreduce": { + "version": "7.3.1", + "resolved": "https://registry.npmjs.org/pouchdb-abstract-mapreduce/-/pouchdb-abstract-mapreduce-7.3.1.tgz", + "integrity": "sha512-0zKXVFBvrfc1KnN0ggrB762JDmZnUpePHywo9Bq3Jy+L1FnoG7fXM5luFfvv5/T0gEw+ZTIwoocZECMnESBI9w==", + "optional": true, "dependencies": { - "clone-response": "^1.0.2", - "get-stream": "^5.1.0", - "http-cache-semantics": "^4.0.0", - "keyv": "^3.0.0", - "lowercase-keys": "^2.0.0", - "normalize-url": "^4.1.0", - "responselike": "^1.0.2" - }, - "engines": { - "node": ">=8" + "pouchdb-binary-utils": "7.3.1", + "pouchdb-collate": "7.3.1", + "pouchdb-collections": "7.3.1", + "pouchdb-errors": "7.3.1", + "pouchdb-fetch": "7.3.1", + "pouchdb-mapreduce-utils": "7.3.1", + "pouchdb-md5": "7.3.1", + "pouchdb-utils": "7.3.1" } }, - "node_modules/truffle-hdwallet-provider/node_modules/cacheable-request/node_modules/get-stream": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", - "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", + "node_modules/pouchdb-adapter-leveldb-core": { + "version": "7.3.1", + "resolved": "https://registry.npmjs.org/pouchdb-adapter-leveldb-core/-/pouchdb-adapter-leveldb-core-7.3.1.tgz", + "integrity": "sha512-mxShHlqLMPz2gChrgtA9okV1ogFmQrRAoM/O4EN0CrQWPLXqYtpL1f7sI2asIvFe7SmpnvbLx7kkZyFmLTfwjA==", + "optional": true, "dependencies": { - "pump": "^3.0.0" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "argsarray": "0.0.1", + "buffer-from": "1.1.2", + "double-ended-queue": "2.1.0-0", + "levelup": "4.4.0", + "pouchdb-adapter-utils": "7.3.1", + "pouchdb-binary-utils": "7.3.1", + "pouchdb-collections": "7.3.1", + "pouchdb-errors": "7.3.1", + "pouchdb-json": "7.3.1", + "pouchdb-md5": "7.3.1", + "pouchdb-merge": "7.3.1", + "pouchdb-utils": "7.3.1", + "sublevel-pouchdb": "7.3.1", + "through2": "3.0.2" } }, - "node_modules/truffle-hdwallet-provider/node_modules/cacheable-request/node_modules/lowercase-keys": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-2.0.0.tgz", - "integrity": "sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==", - "engines": { - "node": ">=8" + "node_modules/pouchdb-adapter-memory": { + "version": "7.3.1", + "resolved": "https://registry.npmjs.org/pouchdb-adapter-memory/-/pouchdb-adapter-memory-7.3.1.tgz", + "integrity": "sha512-iHdWGJAHONqQv0we3Oi1MYen69ZS8McLW9wUyaAYcWTJnAIIAr2ZM0/TeTDVSHfMUwYqEYk7X8jRtJZEMwLnwg==", + "optional": true, + "dependencies": { + "memdown": "1.4.1", + "pouchdb-adapter-leveldb-core": "7.3.1", + "pouchdb-utils": "7.3.1" } }, - "node_modules/truffle-hdwallet-provider/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "node_modules/pouchdb-adapter-memory/node_modules/abstract-leveldown": { + "version": "2.7.2", + "resolved": "https://registry.npmjs.org/abstract-leveldown/-/abstract-leveldown-2.7.2.tgz", + "integrity": "sha512-+OVvxH2rHVEhWLdbudP6p0+dNMXu8JA1CbhP19T8paTYAcX7oJ4OVjT+ZUVpv7mITxXHqDMej+GdqXBmXkw09w==", + "optional": true, "dependencies": { - "ms": "2.0.0" + "xtend": "~4.0.0" } }, - "node_modules/truffle-hdwallet-provider/node_modules/decompress-response": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-3.3.0.tgz", - "integrity": "sha512-BzRPQuY1ip+qDonAOz42gRm/pg9F768C+npV/4JOsxRC2sq+Rlk+Q4ZCAsOhnIaMrgarILY+RMUIvMmmX1qAEA==", + "node_modules/pouchdb-adapter-memory/node_modules/memdown": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/memdown/-/memdown-1.4.1.tgz", + "integrity": "sha512-iVrGHZB8i4OQfM155xx8akvG9FIj+ht14DX5CQkCTG4EHzZ3d3sgckIf/Lm9ivZalEsFuEVnWv2B2WZvbrro2w==", + "optional": true, "dependencies": { - "mimic-response": "^1.0.0" - }, - "engines": { - "node": ">=4" + "abstract-leveldown": "~2.7.1", + "functional-red-black-tree": "^1.0.1", + "immediate": "^3.2.3", + "inherits": "~2.0.1", + "ltgt": "~2.2.0", + "safe-buffer": "~5.1.1" } }, - "node_modules/truffle-hdwallet-provider/node_modules/defer-to-connect": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-1.1.3.tgz", - "integrity": "sha512-0ISdNousHvZT2EiFlZeZAHBUvSxmKswVCEf8hW7KWgG4a8MVEu/3Vb6uWYozkjylyCxe0JBIiRB1jV45S70WVQ==" + "node_modules/pouchdb-adapter-memory/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "optional": true }, - "node_modules/truffle-hdwallet-provider/node_modules/elliptic": { - "version": "6.3.3", - "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.3.3.tgz", - "integrity": "sha512-cIky9SO2H8W2eU1NOLySnhOYJnuEWCq9ZJeHvHd/lXzEL9vyraIMfilZSn57X3aVX+wkfYmqkch2LvmTzkjFpA==", + "node_modules/pouchdb-adapter-utils": { + "version": "7.3.1", + "resolved": "https://registry.npmjs.org/pouchdb-adapter-utils/-/pouchdb-adapter-utils-7.3.1.tgz", + "integrity": "sha512-uKLG6dClwTs/sLIJ4WkLAi9wlnDBpOnfyhpeAgOjlOGN/XLz5nKHrA4UJRnURDyc+uv79S9r/Unc4hVpmbSPUw==", + "optional": true, "dependencies": { - "bn.js": "^4.4.0", - "brorand": "^1.0.1", - "hash.js": "^1.0.0", - "inherits": "^2.0.1" + "pouchdb-binary-utils": "7.3.1", + "pouchdb-collections": "7.3.1", + "pouchdb-errors": "7.3.1", + "pouchdb-md5": "7.3.1", + "pouchdb-merge": "7.3.1", + "pouchdb-utils": "7.3.1" } }, - "node_modules/truffle-hdwallet-provider/node_modules/ethers": { - "version": "4.0.0-beta.3", - "resolved": "https://registry.npmjs.org/ethers/-/ethers-4.0.0-beta.3.tgz", - "integrity": "sha512-YYPogooSknTwvHg3+Mv71gM/3Wcrx+ZpCzarBj3mqs9njjRkrOo2/eufzhHloOCo3JSoNI4TQJJ6yU5ABm3Uog==", + "node_modules/pouchdb-binary-utils": { + "version": "7.3.1", + "resolved": "https://registry.npmjs.org/pouchdb-binary-utils/-/pouchdb-binary-utils-7.3.1.tgz", + "integrity": "sha512-crZJNfAEOnUoRk977Qtmk4cxEv6sNKllQ6vDDKgQrQLFjMUXma35EHzNyIJr1s76J77Q4sqKQAmxz9Y40yHGtw==", + "optional": true, "dependencies": { - "@types/node": "^10.3.2", - "aes-js": "3.0.0", - "bn.js": "^4.4.0", - "elliptic": "6.3.3", - "hash.js": "1.1.3", - "js-sha3": "0.5.7", - "scrypt-js": "2.0.3", - "setimmediate": "1.0.4", - "uuid": "2.0.1", - "xmlhttprequest": "1.8.0" + "buffer-from": "1.1.2" } }, - "node_modules/truffle-hdwallet-provider/node_modules/ethers/node_modules/setimmediate": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.4.tgz", - "integrity": "sha512-/TjEmXQVEzdod/FFskf3o7oOAsGhHf2j1dZqRFbDzq4F3mvvxflIIi4Hd3bLQE9y/CpwqfSQam5JakI/mi3Pog==" + "node_modules/pouchdb-collate": { + "version": "7.3.1", + "resolved": "https://registry.npmjs.org/pouchdb-collate/-/pouchdb-collate-7.3.1.tgz", + "integrity": "sha512-o4gyGqDMLMSNzf6EDTr3eHaH/JRMoqRhdc+eV+oA8u00nTBtr9wD+jypVe2LbgKLJ4NWqx2qVkXiTiQdUFtsLQ==", + "optional": true }, - "node_modules/truffle-hdwallet-provider/node_modules/eventemitter3": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-3.1.2.tgz", - "integrity": "sha512-tvtQIeLVHjDkJYnzf2dgVMxfuSGJeM/7UCG17TT4EumTfNtF+0nebF/4zWOIkCreAbtNqhGEboB6BWrwqNaw4Q==" + "node_modules/pouchdb-collections": { + "version": "7.3.1", + "resolved": "https://registry.npmjs.org/pouchdb-collections/-/pouchdb-collections-7.3.1.tgz", + "integrity": "sha512-yUyDqR+OJmtwgExOSJegpBJXDLAEC84TWnbAYycyh+DZoA51Yw0+XVQF5Vh8Ii90/Ut2xo88fmrmp0t6kqom8w==", + "optional": true }, - "node_modules/truffle-hdwallet-provider/node_modules/fs-extra": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-4.0.3.tgz", - "integrity": "sha512-q6rbdDd1o2mAnQreO7YADIxf/Whx4AHBiRf6d+/cVT8h44ss+lHgxf1FemcqDnQt9X3ct4McHr+JMGlYSsK7Cg==", + "node_modules/pouchdb-debug": { + "version": "7.2.1", + "resolved": "https://registry.npmjs.org/pouchdb-debug/-/pouchdb-debug-7.2.1.tgz", + "integrity": "sha512-eP3ht/AKavLF2RjTzBM6S9gaI2/apcW6xvaKRQhEdOfiANqerFuksFqHCal3aikVQuDO+cB/cw+a4RyJn/glBw==", + "optional": true, "dependencies": { - "graceful-fs": "^4.1.2", - "jsonfile": "^4.0.0", - "universalify": "^0.1.0" + "debug": "3.1.0" } }, - "node_modules/truffle-hdwallet-provider/node_modules/get-stream": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", - "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", + "node_modules/pouchdb-debug/node_modules/debug": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", + "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", + "optional": true, "dependencies": { - "pump": "^3.0.0" - }, - "engines": { - "node": ">=6" + "ms": "2.0.0" } }, - "node_modules/truffle-hdwallet-provider/node_modules/got": { - "version": "9.6.0", - "resolved": "https://registry.npmjs.org/got/-/got-9.6.0.tgz", - "integrity": "sha512-R7eWptXuGYxwijs0eV+v3o6+XH1IqVK8dJOEecQfTmkncw9AV4dcw/Dhxi8MdlqPthxxpZyizMzyg8RTmEsG+Q==", + "node_modules/pouchdb-debug/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "optional": true + }, + "node_modules/pouchdb-errors": { + "version": "7.3.1", + "resolved": "https://registry.npmjs.org/pouchdb-errors/-/pouchdb-errors-7.3.1.tgz", + "integrity": "sha512-Zktz4gnXEUcZcty8FmyvtYUYsHskoST05m6H5/E2gg/0mCfEXq/XeyyLkZHaZmqD0ZPS9yNmASB1VaFWEKEaDw==", + "optional": true, "dependencies": { - "@sindresorhus/is": "^0.14.0", - "@szmarczak/http-timer": "^1.1.2", - "cacheable-request": "^6.0.0", - "decompress-response": "^3.3.0", - "duplexer3": "^0.1.4", - "get-stream": "^4.1.0", - "lowercase-keys": "^1.0.1", - "mimic-response": "^1.0.1", - "p-cancelable": "^1.0.0", - "to-readable-stream": "^1.0.0", - "url-parse-lax": "^3.0.0" - }, - "engines": { - "node": ">=8.6" + "inherits": "2.0.4" } }, - "node_modules/truffle-hdwallet-provider/node_modules/hash.js": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.3.tgz", - "integrity": "sha512-/UETyP0W22QILqS+6HowevwhEFJ3MBJnwTf75Qob9Wz9t0DPuisL8kW8YZMK62dHAKE1c1p+gY1TtOLY+USEHA==", + "node_modules/pouchdb-fetch": { + "version": "7.3.1", + "resolved": "https://registry.npmjs.org/pouchdb-fetch/-/pouchdb-fetch-7.3.1.tgz", + "integrity": "sha512-205xAtvdHRPQ4fp1h9+RmT9oQabo9gafuPmWsS9aEl3ER54WbY8Vaj1JHZGbU4KtMTYvW7H5088zLS7Nrusuag==", + "optional": true, "dependencies": { - "inherits": "^2.0.3", - "minimalistic-assert": "^1.0.0" + "abort-controller": "3.0.0", + "fetch-cookie": "0.11.0", + "node-fetch": "2.6.7" } }, - "node_modules/truffle-hdwallet-provider/node_modules/is-plain-obj": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz", - "integrity": "sha512-yvkRyxmFKEOQ4pNXCmJG5AEQNlXJS5LaONXo5/cLdTZdWvsZ1ioJEonLGAosKlMWE8lwUy/bJzMjcw8az73+Fg==", + "node_modules/pouchdb-fetch/node_modules/node-fetch": { + "version": "2.6.7", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz", + "integrity": "sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==", + "optional": true, + "dependencies": { + "whatwg-url": "^5.0.0" + }, "engines": { - "node": ">=0.10.0" + "node": "4.x || >=6.0.0" + }, + "peerDependencies": { + "encoding": "^0.1.0" + }, + "peerDependenciesMeta": { + "encoding": { + "optional": true + } } }, - "node_modules/truffle-hdwallet-provider/node_modules/js-sha3": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/js-sha3/-/js-sha3-0.5.7.tgz", - "integrity": "sha512-GII20kjaPX0zJ8wzkTbNDYMY7msuZcTWk8S5UOh6806Jq/wz1J8/bnr8uGU0DAUmYDjj2Mr4X1cW8v/GLYnR+g==" - }, - "node_modules/truffle-hdwallet-provider/node_modules/json-buffer": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.0.tgz", - "integrity": "sha512-CuUqjv0FUZIdXkHPI8MezCnFCdaTAacej1TZYulLoAg1h/PhwkdXFN4V/gzY4g+fMBCOV2xF+rp7t2XD2ns/NQ==" - }, - "node_modules/truffle-hdwallet-provider/node_modules/jsonfile": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", - "integrity": "sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==", - "optionalDependencies": { - "graceful-fs": "^4.1.6" + "node_modules/pouchdb-find": { + "version": "7.3.1", + "resolved": "https://registry.npmjs.org/pouchdb-find/-/pouchdb-find-7.3.1.tgz", + "integrity": "sha512-AeqUfAVY1c7IFaY36BRT0vIz9r4VTKq/YOWTmiqndOZUQ/pDGxyO2fNFal6NN3PyYww0JijlD377cPvhnrhJVA==", + "optional": true, + "dependencies": { + "pouchdb-abstract-mapreduce": "7.3.1", + "pouchdb-collate": "7.3.1", + "pouchdb-errors": "7.3.1", + "pouchdb-fetch": "7.3.1", + "pouchdb-md5": "7.3.1", + "pouchdb-selector-core": "7.3.1", + "pouchdb-utils": "7.3.1" } }, - "node_modules/truffle-hdwallet-provider/node_modules/keyv": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/keyv/-/keyv-3.1.0.tgz", - "integrity": "sha512-9ykJ/46SN/9KPM/sichzQ7OvXyGDYKGTaDlKMGCAlg2UK8KRy4jb0d8sFc+0Tt0YYnThq8X2RZgCg74RPxgcVA==", + "node_modules/pouchdb-json": { + "version": "7.3.1", + "resolved": "https://registry.npmjs.org/pouchdb-json/-/pouchdb-json-7.3.1.tgz", + "integrity": "sha512-AyOKsmc85/GtHjMZyEacqzja8qLVfycS1hh1oskR+Bm5PIITX52Fb8zyi0hEetV6VC0yuGbn0RqiLjJxQePeqQ==", + "optional": true, "dependencies": { - "json-buffer": "3.0.0" + "vuvuzela": "1.0.3" } }, - "node_modules/truffle-hdwallet-provider/node_modules/lowercase-keys": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.1.tgz", - "integrity": "sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA==", - "engines": { - "node": ">=0.10.0" + "node_modules/pouchdb-mapreduce-utils": { + "version": "7.3.1", + "resolved": "https://registry.npmjs.org/pouchdb-mapreduce-utils/-/pouchdb-mapreduce-utils-7.3.1.tgz", + "integrity": "sha512-oUMcq82+4pTGQ6dtrhgORHOVHZSr6w/5tFIUGlv7RABIDvJarL4snMawADjlpiEwPdiQ/ESG8Fqt8cxqvqsIgg==", + "optional": true, + "dependencies": { + "argsarray": "0.0.1", + "inherits": "2.0.4", + "pouchdb-collections": "7.3.1", + "pouchdb-utils": "7.3.1" } }, - "node_modules/truffle-hdwallet-provider/node_modules/mimic-response": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz", - "integrity": "sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==", - "engines": { - "node": ">=4" + "node_modules/pouchdb-md5": { + "version": "7.3.1", + "resolved": "https://registry.npmjs.org/pouchdb-md5/-/pouchdb-md5-7.3.1.tgz", + "integrity": "sha512-aDV8ui/mprnL3xmt0gT/81DFtTtJiKyn+OxIAbwKPMfz/rDFdPYvF0BmDC9QxMMzGfkV+JJUjU6at0PPs2mRLg==", + "optional": true, + "dependencies": { + "pouchdb-binary-utils": "7.3.1", + "spark-md5": "3.0.2" } }, - "node_modules/truffle-hdwallet-provider/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" + "node_modules/pouchdb-merge": { + "version": "7.3.1", + "resolved": "https://registry.npmjs.org/pouchdb-merge/-/pouchdb-merge-7.3.1.tgz", + "integrity": "sha512-FeK3r35mKimokf2PQ2tUI523QWyZ4lYZ0Yd75FfSch/SPY6wIokz5XBZZ6PHdu5aOJsEKzoLUxr8CpSg9DhcAw==", + "optional": true }, - "node_modules/truffle-hdwallet-provider/node_modules/normalize-url": { - "version": "4.5.1", - "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-4.5.1.tgz", - "integrity": "sha512-9UZCFRHQdNrfTpGg8+1INIg93B6zE0aXMVFkw1WFwvO4SlZywU6aLg5Of0Ap/PgcbSw4LNxvMWXMeugwMCX0AA==", - "engines": { - "node": ">=8" + "node_modules/pouchdb-selector-core": { + "version": "7.3.1", + "resolved": "https://registry.npmjs.org/pouchdb-selector-core/-/pouchdb-selector-core-7.3.1.tgz", + "integrity": "sha512-HBX+nNGXcaL9z0uNpwSMRq2GNZd3EZXW+fe9rJHS0hvJohjZL7aRJLoaXfEdHPRTNW+CpjM3Rny60eGekQdI/w==", + "optional": true, + "dependencies": { + "pouchdb-collate": "7.3.1", + "pouchdb-utils": "7.3.1" } }, - "node_modules/truffle-hdwallet-provider/node_modules/oboe": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/oboe/-/oboe-2.1.4.tgz", - "integrity": "sha512-ymBJ4xSC6GBXLT9Y7lirj+xbqBLa+jADGJldGEYG7u8sZbS9GyG+u1Xk9c5cbriKwSpCg41qUhPjvU5xOpvIyQ==", + "node_modules/pouchdb-utils": { + "version": "7.3.1", + "resolved": "https://registry.npmjs.org/pouchdb-utils/-/pouchdb-utils-7.3.1.tgz", + "integrity": "sha512-R3hHBo1zTdTu/NFs3iqkcaQAPwhIH0gMIdfVKd5lbDYlmP26rCG5pdS+v7NuoSSFLJ4xxnaGV+Gjf4duYsJ8wQ==", + "optional": true, "dependencies": { - "http-https": "^1.0.0" + "argsarray": "0.0.1", + "clone-buffer": "1.0.0", + "immediate": "3.3.0", + "inherits": "2.0.4", + "pouchdb-collections": "7.3.1", + "pouchdb-errors": "7.3.1", + "pouchdb-md5": "7.3.1", + "uuid": "8.3.2" } }, - "node_modules/truffle-hdwallet-provider/node_modules/p-cancelable": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-1.1.0.tgz", - "integrity": "sha512-s73XxOZ4zpt1edZYZzvhqFa6uvQc1vwUa0K0BdtIZgQMAJj9IbebH+JkgKZc9h+B05PKHLOTl4ajG1BmNrVZlw==", + "node_modules/pouchdb/node_modules/isarray": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", + "integrity": "sha512-D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ==", + "optional": true + }, + "node_modules/pouchdb/node_modules/level": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/level/-/level-6.0.1.tgz", + "integrity": "sha512-psRSqJZCsC/irNhfHzrVZbmPYXDcEYhA5TVNwr+V92jF44rbf86hqGp8fiT702FyiArScYIlPSBTDUASCVNSpw==", + "optional": true, + "dependencies": { + "level-js": "^5.0.0", + "level-packager": "^5.1.0", + "leveldown": "^5.4.0" + }, "engines": { - "node": ">=6" + "node": ">=8.6.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/level" } }, - "node_modules/truffle-hdwallet-provider/node_modules/prepend-http": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-1.0.4.tgz", - "integrity": "sha512-PhmXi5XmoyKw1Un4E+opM2KcsJInDvKyuOumcjjw3waw86ZNjHwVUOOWLc4bCzLdcKNaWBH9e99sbWzDQsVaYg==", + "node_modules/pouchdb/node_modules/node-fetch": { + "version": "2.6.7", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz", + "integrity": "sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==", + "optional": true, + "dependencies": { + "whatwg-url": "^5.0.0" + }, "engines": { - "node": ">=0.10.0" + "node": "4.x || >=6.0.0" + }, + "peerDependencies": { + "encoding": "^0.1.0" + }, + "peerDependenciesMeta": { + "encoding": { + "optional": true + } } }, - "node_modules/truffle-hdwallet-provider/node_modules/responselike": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/responselike/-/responselike-1.0.2.tgz", - "integrity": "sha512-/Fpe5guzJk1gPqdJLJR5u7eG/gNY4nImjbRDaVWVMRhne55TCmj2i9Q+54PBRfatRC8v/rIiv9BN0pMd9OV5EQ==", + "node_modules/pouchdb/node_modules/readable-stream": { + "version": "1.1.14", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz", + "integrity": "sha512-+MeVjFf4L44XUkhM1eYbD8fyEsxcV81pqMSR5gblfcLCHfZvbrqy4/qYHE+/R5HoBUT11WV5O08Cr1n3YXkWVQ==", + "optional": true, "dependencies": { - "lowercase-keys": "^1.0.0" + "core-util-is": "~1.0.0", + "inherits": "~2.0.1", + "isarray": "0.0.1", + "string_decoder": "~0.10.x" } }, - "node_modules/truffle-hdwallet-provider/node_modules/scrypt-js": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/scrypt-js/-/scrypt-js-2.0.3.tgz", - "integrity": "sha512-d8DzQxNivoNDogyYmb/9RD5mEQE/Q7vG2dLDUgvfPmKL9xCVzgqUntOdS0me9Cq9Sh9VxIZuoNEFcsfyXRnyUw==" + "node_modules/pouchdb/node_modules/string_decoder": { + "version": "0.10.31", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", + "integrity": "sha512-ev2QzSzWPYmy9GuqfIVildA4OdcGLeFZQrq5ys6RtiuF+RQQiZWr8TZNyAcuVXyQRYfEO+MsoB/1BuQVhOJuoQ==", + "optional": true }, - "node_modules/truffle-hdwallet-provider/node_modules/semver": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.2.0.tgz", - "integrity": "sha512-jdFC1VdUGT/2Scgbimf7FSx9iJLXoqfglSF+gJeuNWVpiE37OIbc1jywR/GJyFdz3mnkz2/id0L0J/cr0izR5A==", - "bin": { - "semver": "bin/semver.js" + "node_modules/prb-math": { + "version": "2.4.3", + "resolved": "https://registry.npmjs.org/prb-math/-/prb-math-2.4.3.tgz", + "integrity": "sha512-t5jncEscKmWg7COkMkmbXXxSeDI6Xl21rxx5e+oxUCqskNvsu6Q9RqdVfGY6y+sMwyMQE8DJ/OOyQ9ExH1yfbw==", + "dependencies": { + "@ethersproject/bignumber": "^5.5.0", + "decimal.js": "^10.3.1", + "evm-bn": "^1.1.1", + "mathjs": "^10.1.1" + }, + "peerDependencies": { + "@ethersproject/bignumber": "5.x", + "evm-bn": "1.x", + "mathjs": "10.x" } }, - "node_modules/truffle-hdwallet-provider/node_modules/swarm-js": { - "version": "0.1.39", - "resolved": "https://registry.npmjs.org/swarm-js/-/swarm-js-0.1.39.tgz", - "integrity": "sha512-QLMqL2rzF6n5s50BptyD6Oi0R1aWlJC5Y17SRIVXRj6OR1DRIPM7nepvrxxkjA1zNzFz6mUOMjfeqeDaWB7OOg==", + "node_modules/prb-math/node_modules/mathjs": { + "version": "10.6.4", + "resolved": "https://registry.npmjs.org/mathjs/-/mathjs-10.6.4.tgz", + "integrity": "sha512-omQyvRE1jIy+3k2qsqkWASOcd45aZguXZDckr3HtnTYyXk5+2xpVfC3kATgbO2Srjxlqww3TVdhD0oUdZ/hiFA==", "dependencies": { - "bluebird": "^3.5.0", - "buffer": "^5.0.5", - "decompress": "^4.0.0", - "eth-lib": "^0.1.26", - "fs-extra": "^4.0.2", - "got": "^7.1.0", - "mime-types": "^2.1.16", - "mkdirp-promise": "^5.0.1", - "mock-fs": "^4.1.0", - "setimmediate": "^1.0.5", - "tar": "^4.0.2", - "xhr-request-promise": "^0.1.2" + "@babel/runtime": "^7.18.6", + "complex.js": "^2.1.1", + "decimal.js": "^10.3.1", + "escape-latex": "^1.2.0", + "fraction.js": "^4.2.0", + "javascript-natural-sort": "^0.7.1", + "seedrandom": "^3.0.5", + "tiny-emitter": "^2.1.0", + "typed-function": "^2.1.0" + }, + "bin": { + "mathjs": "bin/cli.js" + }, + "engines": { + "node": ">= 14" } }, - "node_modules/truffle-hdwallet-provider/node_modules/swarm-js/node_modules/get-stream": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz", - "integrity": "sha512-GlhdIUuVakc8SJ6kK0zAFbiGzRFzNnY4jUuEbV9UROo4Y+0Ny4fjvcZFVTeDA4odpFyOQzaw6hXukJSq/f28sQ==", + "node_modules/prb-math/node_modules/typed-function": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/typed-function/-/typed-function-2.1.0.tgz", + "integrity": "sha512-bctQIOqx2iVbWGDGPWwIm18QScpu2XRmkC19D8rQGFsjKSgteq/o1hTZvIG/wuDq8fanpBDrLkLq+aEN/6y5XQ==", "engines": { - "node": ">=4" + "node": ">= 10" } }, - "node_modules/truffle-hdwallet-provider/node_modules/swarm-js/node_modules/got": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/got/-/got-7.1.0.tgz", - "integrity": "sha512-Y5WMo7xKKq1muPsxD+KmrR8DH5auG7fBdDVueZwETwV6VytKyU9OX/ddpq2/1hp1vIPvVb4T81dKQz3BivkNLw==", - "dependencies": { - "decompress-response": "^3.2.0", - "duplexer3": "^0.1.4", - "get-stream": "^3.0.0", - "is-plain-obj": "^1.1.0", - "is-retry-allowed": "^1.0.0", - "is-stream": "^1.0.0", - "isurl": "^1.0.0-alpha5", - "lowercase-keys": "^1.0.0", - "p-cancelable": "^0.3.0", - "p-timeout": "^1.1.1", - "safe-buffer": "^5.0.1", - "timed-out": "^4.0.0", - "url-parse-lax": "^1.0.0", - "url-to-options": "^1.0.1" - }, + "node_modules/precond": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/precond/-/precond-0.2.3.tgz", + "integrity": "sha512-QCYG84SgGyGzqJ/vlMsxeXd/pgL/I94ixdNFyh1PusWmTCyVfPJjZ1K1jvHtsbfnXQs2TSkEP2fR7QiMZAnKFQ==", "engines": { - "node": ">=4" + "node": ">= 0.6" } }, - "node_modules/truffle-hdwallet-provider/node_modules/swarm-js/node_modules/p-cancelable": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-0.3.0.tgz", - "integrity": "sha512-RVbZPLso8+jFeq1MfNvgXtCRED2raz/dKpacfTNxsx6pLEpEomM7gah6VeHSYV3+vo0OAi4MkArtQcWWXuQoyw==", + "node_modules/prepend-http": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-2.0.0.tgz", + "integrity": "sha512-ravE6m9Atw9Z/jjttRUZ+clIXogdghyZAuWJ3qEzjT+jI/dL1ifAqhZeC5VHzQp1MSt1+jxKkFNemj/iO7tVUA==", "engines": { "node": ">=4" } }, - "node_modules/truffle-hdwallet-provider/node_modules/swarm-js/node_modules/url-parse-lax": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-1.0.0.tgz", - "integrity": "sha512-BVA4lR5PIviy2PMseNd2jbFQ+jwSwQGdJejf5ctd1rEXt0Ypd7yanUK9+lYechVlN5VaTJGsu2U/3MDDu6KgBA==", - "dependencies": { - "prepend-http": "^1.0.1" + "node_modules/prettier": { + "version": "2.8.7", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.8.7.tgz", + "integrity": "sha512-yPngTo3aXUUmyuTjeTUT75txrf+aMh9FiD7q9ZE/i6r0bPb22g4FsE6Y338PQX1bmfy08i9QQCB7/rcUAVntfw==", + "dev": true, + "bin": { + "prettier": "bin-prettier.js" }, "engines": { - "node": ">=0.10.0" + "node": ">=10.13.0" + }, + "funding": { + "url": "https://github.com/prettier/prettier?sponsor=1" } }, - "node_modules/truffle-hdwallet-provider/node_modules/underscore": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.9.1.tgz", - "integrity": "sha512-5/4etnCkd9c8gwgowi5/om/mYO5ajCaOgdzj/oW+0eQV9WxKBDZw5+ycmKmeaTXjInS/W0BzpGLo2xR2aBwZdg==" - }, - "node_modules/truffle-hdwallet-provider/node_modules/universalify": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", - "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", + "node_modules/process": { + "version": "0.11.10", + "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", + "integrity": "sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==", "engines": { - "node": ">= 4.0.0" + "node": ">= 0.6.0" } }, - "node_modules/truffle-hdwallet-provider/node_modules/uuid": { + "node_modules/process-nextick-args": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-2.0.1.tgz", - "integrity": "sha512-nWg9+Oa3qD2CQzHIP4qKUqwNfzKn8P0LtFhotaCTFchsV7ZfDhAybeip/HZVeMIpZi9JgY1E3nUlwaCmZT1sEg==", - "deprecated": "Please upgrade to version 7 or higher. Older versions may use Math.random() in certain circumstances, which is known to be problematic. See https://v8.dev/blog/math-random for details." + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", + "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==" }, - "node_modules/truffle-hdwallet-provider/node_modules/web3": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/web3/-/web3-1.2.1.tgz", - "integrity": "sha512-nNMzeCK0agb5i/oTWNdQ1aGtwYfXzHottFP2Dz0oGIzavPMGSKyVlr8ibVb1yK5sJBjrWVnTdGaOC2zKDFuFRw==", - "dependencies": { - "web3-bzz": "1.2.1", - "web3-core": "1.2.1", - "web3-eth": "1.2.1", - "web3-eth-personal": "1.2.1", - "web3-net": "1.2.1", - "web3-shh": "1.2.1", - "web3-utils": "1.2.1" - }, + "node_modules/progress": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", + "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==", + "optional": true, "engines": { - "node": ">=8.0.0" + "node": ">=0.4.0" } }, - "node_modules/truffle-hdwallet-provider/node_modules/web3-bzz": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/web3-bzz/-/web3-bzz-1.2.1.tgz", - "integrity": "sha512-LdOO44TuYbGIPfL4ilkuS89GQovxUpmLz6C1UC7VYVVRILeZS740FVB3j9V4P4FHUk1RenaDfKhcntqgVCHtjw==", + "node_modules/promise": { + "version": "8.2.0", + "resolved": "https://registry.npmjs.org/promise/-/promise-8.2.0.tgz", + "integrity": "sha512-+CMAlLHqwRYwBMXKCP+o8ns7DN+xHDUiI+0nArsiJ9y+kJVPLFxEaSw6Ha9s9H0tftxg2Yzl25wqj9G7m5wLZg==", "dependencies": { - "got": "9.6.0", - "swarm-js": "0.1.39", - "underscore": "1.9.1" - }, - "engines": { - "node": ">=8.0.0" + "asap": "~2.0.6" } }, - "node_modules/truffle-hdwallet-provider/node_modules/web3-core": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/web3-core/-/web3-core-1.2.1.tgz", - "integrity": "sha512-5ODwIqgl8oIg/0+Ai4jsLxkKFWJYE0uLuE1yUKHNVCL4zL6n3rFjRMpKPokd6id6nJCNgeA64KdWQ4XfpnjdMg==", + "node_modules/promise-to-callback": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/promise-to-callback/-/promise-to-callback-1.0.0.tgz", + "integrity": "sha512-uhMIZmKM5ZteDMfLgJnoSq9GCwsNKrYau73Awf1jIy6/eUcuuZ3P+CD9zUv0kJsIUbU+x6uLNIhXhLHDs1pNPA==", "dependencies": { - "web3-core-helpers": "1.2.1", - "web3-core-method": "1.2.1", - "web3-core-requestmanager": "1.2.1", - "web3-utils": "1.2.1" + "is-fn": "^1.0.0", + "set-immediate-shim": "^1.0.1" }, "engines": { - "node": ">=8.0.0" + "node": ">=0.10.0" } }, - "node_modules/truffle-hdwallet-provider/node_modules/web3-core-helpers": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/web3-core-helpers/-/web3-core-helpers-1.2.1.tgz", - "integrity": "sha512-Gx3sTEajD5r96bJgfuW377PZVFmXIH4TdqDhgGwd2lZQCcMi+DA4TgxJNJGxn0R3aUVzyyE76j4LBrh412mXrw==", + "node_modules/proper-lockfile": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/proper-lockfile/-/proper-lockfile-4.1.2.tgz", + "integrity": "sha512-TjNPblN4BwAWMXU8s9AEz4JmQxnD1NNL7bNOY/AKUzyamc379FWASUhc/K1pL2noVb+XmZKLL68cjzLsiOAMaA==", + "dev": true, "dependencies": { - "underscore": "1.9.1", - "web3-eth-iban": "1.2.1", - "web3-utils": "1.2.1" - }, - "engines": { - "node": ">=8.0.0" + "graceful-fs": "^4.2.4", + "retry": "^0.12.0", + "signal-exit": "^3.0.2" } }, - "node_modules/truffle-hdwallet-provider/node_modules/web3-core-method": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/web3-core-method/-/web3-core-method-1.2.1.tgz", - "integrity": "sha512-Ghg2WS23qi6Xj8Od3VCzaImLHseEA7/usvnOItluiIc5cKs00WYWsNy2YRStzU9a2+z8lwQywPYp0nTzR/QXdQ==", - "dependencies": { - "underscore": "1.9.1", - "web3-core-helpers": "1.2.1", - "web3-core-promievent": "1.2.1", - "web3-core-subscriptions": "1.2.1", - "web3-utils": "1.2.1" - }, + "node_modules/proper-lockfile/node_modules/retry": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/retry/-/retry-0.12.0.tgz", + "integrity": "sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow==", + "dev": true, "engines": { - "node": ">=8.0.0" + "node": ">= 4" } }, - "node_modules/truffle-hdwallet-provider/node_modules/web3-core-promievent": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/web3-core-promievent/-/web3-core-promievent-1.2.1.tgz", - "integrity": "sha512-IVUqgpIKoeOYblwpex4Hye6npM0aMR+kU49VP06secPeN0rHMyhGF0ZGveWBrGvf8WDPI7jhqPBFIC6Jf3Q3zw==", + "node_modules/proxy-addr": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", + "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", "dependencies": { - "any-promise": "1.3.0", - "eventemitter3": "3.1.2" + "forwarded": "0.2.0", + "ipaddr.js": "1.9.1" }, "engines": { - "node": ">=8.0.0" + "node": ">= 0.10" } }, - "node_modules/truffle-hdwallet-provider/node_modules/web3-core-requestmanager": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/web3-core-requestmanager/-/web3-core-requestmanager-1.2.1.tgz", - "integrity": "sha512-xfknTC69RfYmLKC+83Jz73IC3/sS2ZLhGtX33D4Q5nQ8yc39ElyAolxr9sJQS8kihOcM6u4J+8gyGMqsLcpIBg==", + "node_modules/proxy-from-env": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", + "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==", + "optional": true + }, + "node_modules/prr": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/prr/-/prr-1.0.1.tgz", + "integrity": "sha512-yPw4Sng1gWghHQWj0B3ZggWUm4qVbPwPFcRG8KyxiU7J2OHFSoEHKS+EZ3fv5l1t9CyCiop6l/ZYeWbrgoQejw==" + }, + "node_modules/psl": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/psl/-/psl-1.9.0.tgz", + "integrity": "sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag==" + }, + "node_modules/pstree.remy": { + "version": "1.1.8", + "resolved": "https://registry.npmjs.org/pstree.remy/-/pstree.remy-1.1.8.tgz", + "integrity": "sha512-77DZwxQmxKnu3aR542U+X8FypNzbfJ+C5XQDk3uWjWxn6151aIMGthWYRXTqT1E5oJvg+ljaa2OJi+VfvCOQ8w==" + }, + "node_modules/public-encrypt": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/public-encrypt/-/public-encrypt-4.0.3.tgz", + "integrity": "sha512-zVpa8oKZSz5bTMTFClc1fQOnyyEzpl5ozpi1B5YcvBrdohMjH2rfsBtyXcuNuwjsDIXmBYlF2N5FlJYhR29t8Q==", "dependencies": { - "underscore": "1.9.1", - "web3-core-helpers": "1.2.1", - "web3-providers-http": "1.2.1", - "web3-providers-ipc": "1.2.1", - "web3-providers-ws": "1.2.1" - }, - "engines": { - "node": ">=8.0.0" + "bn.js": "^4.1.0", + "browserify-rsa": "^4.0.0", + "create-hash": "^1.1.0", + "parse-asn1": "^5.0.0", + "randombytes": "^2.0.1", + "safe-buffer": "^5.1.2" } }, - "node_modules/truffle-hdwallet-provider/node_modules/web3-core-subscriptions": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/web3-core-subscriptions/-/web3-core-subscriptions-1.2.1.tgz", - "integrity": "sha512-nmOwe3NsB8V8UFsY1r+sW6KjdOS68h8nuh7NzlWxBQT/19QSUGiERRTaZXWu5BYvo1EoZRMxCKyCQpSSXLc08g==", + "node_modules/public-encrypt/node_modules/bn.js": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==" + }, + "node_modules/pump": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", + "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", "dependencies": { - "eventemitter3": "3.1.2", - "underscore": "1.9.1", - "web3-core-helpers": "1.2.1" - }, - "engines": { - "node": ">=8.0.0" + "end-of-stream": "^1.1.0", + "once": "^1.3.1" } }, - "node_modules/truffle-hdwallet-provider/node_modules/web3-eth": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/web3-eth/-/web3-eth-1.2.1.tgz", - "integrity": "sha512-/2xly4Yry5FW1i+uygPjhfvgUP/MS/Dk+PDqmzp5M88tS86A+j8BzKc23GrlA8sgGs0645cpZK/999LpEF5UdA==", - "dependencies": { - "underscore": "1.9.1", - "web3-core": "1.2.1", - "web3-core-helpers": "1.2.1", - "web3-core-method": "1.2.1", - "web3-core-subscriptions": "1.2.1", - "web3-eth-abi": "1.2.1", - "web3-eth-accounts": "1.2.1", - "web3-eth-contract": "1.2.1", - "web3-eth-ens": "1.2.1", - "web3-eth-iban": "1.2.1", - "web3-eth-personal": "1.2.1", - "web3-net": "1.2.1", - "web3-utils": "1.2.1" - }, + "node_modules/punycode": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.0.tgz", + "integrity": "sha512-Yxz2kRwT90aPiWEMHVYnEf4+rhwF1tBmmZ4KepCP+Wkium9JxtWnUm1nqGwpiAHr/tnTSeHqr3wb++jgSkXjhA==", "engines": { - "node": ">=8.0.0" + "node": ">=6" } }, - "node_modules/truffle-hdwallet-provider/node_modules/web3-eth-abi": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/web3-eth-abi/-/web3-eth-abi-1.2.1.tgz", - "integrity": "sha512-jI/KhU2a/DQPZXHjo2GW0myEljzfiKOn+h1qxK1+Y9OQfTcBMxrQJyH5AP89O6l6NZ1QvNdq99ThAxBFoy5L+g==", + "node_modules/puppeteer": { + "version": "13.7.0", + "resolved": "https://registry.npmjs.org/puppeteer/-/puppeteer-13.7.0.tgz", + "integrity": "sha512-U1uufzBjz3+PkpCxFrWzh4OrMIdIb2ztzCu0YEPfRHjHswcSwHZswnK+WdsOQJsRV8WeTg3jLhJR4D867+fjsA==", + "deprecated": "< 19.4.0 is no longer supported", + "hasInstallScript": true, + "optional": true, "dependencies": { - "ethers": "4.0.0-beta.3", - "underscore": "1.9.1", - "web3-utils": "1.2.1" + "cross-fetch": "3.1.5", + "debug": "4.3.4", + "devtools-protocol": "0.0.981744", + "extract-zip": "2.0.1", + "https-proxy-agent": "5.0.1", + "pkg-dir": "4.2.0", + "progress": "2.0.3", + "proxy-from-env": "1.1.0", + "rimraf": "3.0.2", + "tar-fs": "2.1.1", + "unbzip2-stream": "1.4.3", + "ws": "8.5.0" }, "engines": { - "node": ">=8.0.0" + "node": ">=10.18.1" } }, - "node_modules/truffle-hdwallet-provider/node_modules/web3-eth-accounts": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/web3-eth-accounts/-/web3-eth-accounts-1.2.1.tgz", - "integrity": "sha512-26I4qq42STQ8IeKUyur3MdQ1NzrzCqPsmzqpux0j6X/XBD7EjZ+Cs0lhGNkSKH5dI3V8CJasnQ5T1mNKeWB7nQ==", - "dependencies": { - "any-promise": "1.3.0", - "crypto-browserify": "3.12.0", - "eth-lib": "0.2.7", - "scryptsy": "2.1.0", - "semver": "6.2.0", - "underscore": "1.9.1", - "uuid": "3.3.2", - "web3-core": "1.2.1", - "web3-core-helpers": "1.2.1", - "web3-core-method": "1.2.1", - "web3-utils": "1.2.1" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/truffle-hdwallet-provider/node_modules/web3-eth-accounts/node_modules/elliptic": { - "version": "6.5.4", - "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.4.tgz", - "integrity": "sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ==", + "node_modules/puppeteer/node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "optional": true, "dependencies": { - "bn.js": "^4.11.9", - "brorand": "^1.1.0", - "hash.js": "^1.0.0", - "hmac-drbg": "^1.0.1", - "inherits": "^2.0.4", - "minimalistic-assert": "^1.0.1", - "minimalistic-crypto-utils": "^1.0.1" + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" } }, - "node_modules/truffle-hdwallet-provider/node_modules/web3-eth-accounts/node_modules/eth-lib": { - "version": "0.2.7", - "resolved": "https://registry.npmjs.org/eth-lib/-/eth-lib-0.2.7.tgz", - "integrity": "sha512-VqEBQKH92jNsaE8lG9CTq8M/bc12gdAfb5MY8Ro1hVyXkh7rOtY3m5tRHK3Hus5HqIAAwU2ivcUjTLVwsvf/kw==", + "node_modules/puppeteer/node_modules/cross-fetch": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-3.1.5.tgz", + "integrity": "sha512-lvb1SBsI0Z7GDwmuid+mU3kWVBwTVUbe7S0H52yaaAdQOXq2YktTCZdlAcNKFzE6QtRz0snpw9bNiPeOIkkQvw==", + "optional": true, "dependencies": { - "bn.js": "^4.11.6", - "elliptic": "^6.4.0", - "xhr-request-promise": "^0.1.2" + "node-fetch": "2.6.7" } }, - "node_modules/truffle-hdwallet-provider/node_modules/web3-eth-accounts/node_modules/uuid": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.3.2.tgz", - "integrity": "sha512-yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA==", - "deprecated": "Please upgrade to version 7 or higher. Older versions may use Math.random() in certain circumstances, which is known to be problematic. See https://v8.dev/blog/math-random for details.", - "bin": { - "uuid": "bin/uuid" + "node_modules/puppeteer/node_modules/glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "optional": true, + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/truffle-hdwallet-provider/node_modules/web3-eth-contract": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/web3-eth-contract/-/web3-eth-contract-1.2.1.tgz", - "integrity": "sha512-kYFESbQ3boC9bl2rYVghj7O8UKMiuKaiMkxvRH5cEDHil8V7MGEGZNH0slSdoyeftZVlaWSMqkRP/chfnKND0g==", + "node_modules/puppeteer/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "optional": true, "dependencies": { - "underscore": "1.9.1", - "web3-core": "1.2.1", - "web3-core-helpers": "1.2.1", - "web3-core-method": "1.2.1", - "web3-core-promievent": "1.2.1", - "web3-core-subscriptions": "1.2.1", - "web3-eth-abi": "1.2.1", - "web3-utils": "1.2.1" + "brace-expansion": "^1.1.7" }, "engines": { - "node": ">=8.0.0" + "node": "*" } }, - "node_modules/truffle-hdwallet-provider/node_modules/web3-eth-ens": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/web3-eth-ens/-/web3-eth-ens-1.2.1.tgz", - "integrity": "sha512-lhP1kFhqZr2nnbu3CGIFFrAnNxk2veXpOXBY48Tub37RtobDyHijHgrj+xTh+mFiPokyrapVjpFsbGa+Xzye4Q==", + "node_modules/puppeteer/node_modules/node-fetch": { + "version": "2.6.7", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz", + "integrity": "sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==", + "optional": true, "dependencies": { - "eth-ens-namehash": "2.0.8", - "underscore": "1.9.1", - "web3-core": "1.2.1", - "web3-core-helpers": "1.2.1", - "web3-core-promievent": "1.2.1", - "web3-eth-abi": "1.2.1", - "web3-eth-contract": "1.2.1", - "web3-utils": "1.2.1" + "whatwg-url": "^5.0.0" }, "engines": { - "node": ">=8.0.0" + "node": "4.x || >=6.0.0" + }, + "peerDependencies": { + "encoding": "^0.1.0" + }, + "peerDependenciesMeta": { + "encoding": { + "optional": true + } } }, - "node_modules/truffle-hdwallet-provider/node_modules/web3-eth-iban": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/web3-eth-iban/-/web3-eth-iban-1.2.1.tgz", - "integrity": "sha512-9gkr4QPl1jCU+wkgmZ8EwODVO3ovVj6d6JKMos52ggdT2YCmlfvFVF6wlGLwi0VvNa/p+0BjJzaqxnnG/JewjQ==", + "node_modules/puppeteer/node_modules/rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "optional": true, "dependencies": { - "bn.js": "4.11.8", - "web3-utils": "1.2.1" + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/puppeteer/node_modules/ws": { + "version": "8.5.0", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.5.0.tgz", + "integrity": "sha512-BWX0SWVgLPzYwF8lTzEy1egjhS4S4OEAHfsO8o65WOVsrnSRGaSiUaa9e0ggGlkMTtBlmOpEXiie9RUcBO86qg==", + "optional": true, "engines": { - "node": ">=8.0.0" + "node": ">=10.0.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": "^5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } } }, - "node_modules/truffle-hdwallet-provider/node_modules/web3-eth-iban/node_modules/bn.js": { - "version": "4.11.8", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.8.tgz", - "integrity": "sha512-ItfYfPLkWHUjckQCk8xC+LwxgK8NYcXywGigJgSwOP8Y2iyWT4f2vsZnoOXTTbo+o5yXmIUJ4gn5538SO5S3gA==" + "node_modules/pure-rand": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/pure-rand/-/pure-rand-5.0.3.tgz", + "integrity": "sha512-9N8x1h8dptBQpHyC7aZMS+iNOAm97WMGY0AFrguU1cpfW3I5jINkWe5BIY5md0ofy+1TCIELsVcm/GJXZSaPbw==", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/fast-check" + } }, - "node_modules/truffle-hdwallet-provider/node_modules/web3-eth-personal": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/web3-eth-personal/-/web3-eth-personal-1.2.1.tgz", - "integrity": "sha512-RNDVSiaSoY4aIp8+Hc7z+X72H7lMb3fmAChuSBADoEc7DsJrY/d0R5qQDK9g9t2BO8oxgLrLNyBP/9ub2Hc6Bg==", + "node_modules/qs": { + "version": "6.11.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz", + "integrity": "sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==", "dependencies": { - "web3-core": "1.2.1", - "web3-core-helpers": "1.2.1", - "web3-core-method": "1.2.1", - "web3-net": "1.2.1", - "web3-utils": "1.2.1" + "side-channel": "^1.0.4" }, "engines": { - "node": ">=8.0.0" + "node": ">=0.6" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/truffle-hdwallet-provider/node_modules/web3-net": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/web3-net/-/web3-net-1.2.1.tgz", - "integrity": "sha512-Yt1Bs7WgnLESPe0rri/ZoPWzSy55ovioaP35w1KZydrNtQ5Yq4WcrAdhBzcOW7vAkIwrsLQsvA+hrOCy7mNauw==", + "node_modules/query-string": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/query-string/-/query-string-5.1.1.tgz", + "integrity": "sha512-gjWOsm2SoGlgLEdAGt7a6slVOk9mGiXmPFMqrEhLQ68rhQuBnpfs3+EmlvqKyxnCo9/PPlF+9MtY02S1aFg+Jw==", "dependencies": { - "web3-core": "1.2.1", - "web3-core-method": "1.2.1", - "web3-utils": "1.2.1" + "decode-uri-component": "^0.2.0", + "object-assign": "^4.1.0", + "strict-uri-encode": "^1.0.0" }, "engines": { - "node": ">=8.0.0" + "node": ">=0.10.0" } }, - "node_modules/truffle-hdwallet-provider/node_modules/web3-providers-http": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/web3-providers-http/-/web3-providers-http-1.2.1.tgz", - "integrity": "sha512-BDtVUVolT9b3CAzeGVA/np1hhn7RPUZ6YYGB/sYky+GjeO311Yoq8SRDUSezU92x8yImSC2B+SMReGhd1zL+bQ==", - "dependencies": { - "web3-core-helpers": "1.2.1", - "xhr2-cookies": "1.1.0" - }, + "node_modules/querystring": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/querystring/-/querystring-0.2.0.tgz", + "integrity": "sha512-X/xY82scca2tau62i9mDyU9K+I+djTMUsvwf7xnUX5GLvVzgJybOJf4Y6o9Zx3oJK/LSXg5tTZBjwzqVPaPO2g==", + "deprecated": "The querystring API is considered Legacy. new code should use the URLSearchParams API instead.", + "dev": true, "engines": { - "node": ">=8.0.0" + "node": ">=0.4.x" } }, - "node_modules/truffle-hdwallet-provider/node_modules/web3-providers-ipc": { + "node_modules/queue-microtask": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/quick-lru": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-5.1.1.tgz", + "integrity": "sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/randombytes": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", + "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", + "dependencies": { + "safe-buffer": "^5.1.0" + } + }, + "node_modules/randomfill": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/randomfill/-/randomfill-1.0.4.tgz", + "integrity": "sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw==", + "dependencies": { + "randombytes": "^2.0.5", + "safe-buffer": "^5.1.0" + } + }, + "node_modules/randomhex": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/randomhex/-/randomhex-0.1.5.tgz", + "integrity": "sha512-2+Kkw7UiZGQWOz7rw8hPW44utkBYMEciQfziaZ71RcyDu+refQWzS/0DgfUSa5MwclrOD3sf3vI5vmrTYjwpjQ==" + }, + "node_modules/range-parser": { "version": "1.2.1", - "resolved": "https://registry.npmjs.org/web3-providers-ipc/-/web3-providers-ipc-1.2.1.tgz", - "integrity": "sha512-oPEuOCwxVx8L4CPD0TUdnlOUZwGBSRKScCz/Ws2YHdr9Ium+whm+0NLmOZjkjQp5wovQbyBzNa6zJz1noFRvFA==", + "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", + "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/raw-body": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.1.tgz", + "integrity": "sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig==", "dependencies": { - "oboe": "2.1.4", - "underscore": "1.9.1", - "web3-core-helpers": "1.2.1" + "bytes": "3.1.2", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", + "unpipe": "1.0.0" }, "engines": { - "node": ">=8.0.0" + "node": ">= 0.8" } }, - "node_modules/truffle-hdwallet-provider/node_modules/web3-providers-ws": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/web3-providers-ws/-/web3-providers-ws-1.2.1.tgz", - "integrity": "sha512-oqsQXzu+ejJACVHy864WwIyw+oB21nw/pI65/sD95Zi98+/HQzFfNcIFneF1NC4bVF3VNX4YHTNq2I2o97LAiA==", + "node_modules/read-pkg": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-1.1.0.tgz", + "integrity": "sha512-7BGwRHqt4s/uVbuyoeejRn4YmFnYZiFl4AuaeXHlgZf3sONF0SOGlxs2Pw8g6hCKupo08RafIO5YXFNOKTfwsQ==", "dependencies": { - "underscore": "1.9.1", - "web3-core-helpers": "1.2.1", - "websocket": "github:web3-js/WebSocket-Node#polyfill/globalThis" + "load-json-file": "^1.0.0", + "normalize-package-data": "^2.3.2", + "path-type": "^1.0.0" }, "engines": { - "node": ">=8.0.0" + "node": ">=0.10.0" } }, - "node_modules/truffle-hdwallet-provider/node_modules/web3-shh": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/web3-shh/-/web3-shh-1.2.1.tgz", - "integrity": "sha512-/3Cl04nza5kuFn25bV3FJWa0s3Vafr5BlT933h26xovQ6HIIz61LmvNQlvX1AhFL+SNJOTcQmK1SM59vcyC8bA==", + "node_modules/read-pkg-up": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-1.0.1.tgz", + "integrity": "sha512-WD9MTlNtI55IwYUS27iHh9tK3YoIVhxis8yKhLpTqWtml739uXc9NWTpxoHkfZf3+DkCCsXox94/VWZniuZm6A==", "dependencies": { - "web3-core": "1.2.1", - "web3-core-method": "1.2.1", - "web3-core-subscriptions": "1.2.1", - "web3-net": "1.2.1" + "find-up": "^1.0.0", + "read-pkg": "^1.0.0" }, "engines": { - "node": ">=8.0.0" + "node": ">=0.10.0" } }, - "node_modules/truffle-hdwallet-provider/node_modules/web3-utils": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/web3-utils/-/web3-utils-1.2.1.tgz", - "integrity": "sha512-Mrcn3l58L+yCKz3zBryM6JZpNruWuT0OCbag8w+reeNROSGVlXzUQkU+gtAwc9JCZ7tKUyg67+2YUGqUjVcyBA==", + "node_modules/read-pkg-up/node_modules/find-up": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz", + "integrity": "sha512-jvElSjyuo4EMQGoTwo1uJU5pQMwTW5lS1x05zzfJuTIyLR3zwO27LYrxNg+dlvKpGOuGy/MzBdXh80g0ve5+HA==", "dependencies": { - "bn.js": "4.11.8", - "eth-lib": "0.2.7", - "ethjs-unit": "0.1.6", - "number-to-bn": "1.7.0", - "randomhex": "0.1.5", - "underscore": "1.9.1", - "utf8": "3.0.0" + "path-exists": "^2.0.0", + "pinkie-promise": "^2.0.0" }, "engines": { - "node": ">=8.0.0" + "node": ">=0.10.0" } }, - "node_modules/truffle-hdwallet-provider/node_modules/web3-utils/node_modules/bn.js": { - "version": "4.11.8", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.8.tgz", - "integrity": "sha512-ItfYfPLkWHUjckQCk8xC+LwxgK8NYcXywGigJgSwOP8Y2iyWT4f2vsZnoOXTTbo+o5yXmIUJ4gn5538SO5S3gA==" - }, - "node_modules/truffle-hdwallet-provider/node_modules/web3-utils/node_modules/elliptic": { - "version": "6.5.4", - "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.4.tgz", - "integrity": "sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ==", + "node_modules/read-pkg-up/node_modules/path-exists": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz", + "integrity": "sha512-yTltuKuhtNeFJKa1PiRzfLAU5182q1y4Eb4XCJ3PBqyzEDkAZRzBrKKBct682ls9reBVHf9udYLN5Nd+K1B9BQ==", "dependencies": { - "bn.js": "^4.11.9", - "brorand": "^1.1.0", - "hash.js": "^1.0.0", - "hmac-drbg": "^1.0.1", - "inherits": "^2.0.4", - "minimalistic-assert": "^1.0.1", - "minimalistic-crypto-utils": "^1.0.1" + "pinkie-promise": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" } }, - "node_modules/truffle-hdwallet-provider/node_modules/web3-utils/node_modules/elliptic/node_modules/bn.js": { - "version": "4.12.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==" - }, - "node_modules/truffle-hdwallet-provider/node_modules/web3-utils/node_modules/eth-lib": { - "version": "0.2.7", - "resolved": "https://registry.npmjs.org/eth-lib/-/eth-lib-0.2.7.tgz", - "integrity": "sha512-VqEBQKH92jNsaE8lG9CTq8M/bc12gdAfb5MY8Ro1hVyXkh7rOtY3m5tRHK3Hus5HqIAAwU2ivcUjTLVwsvf/kw==", + "node_modules/readable-stream": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", + "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", "dependencies": { - "bn.js": "^4.11.6", - "elliptic": "^6.4.0", - "xhr-request-promise": "^0.1.2" + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" } }, - "node_modules/truffle-hdwallet-provider/node_modules/websocket": { - "version": "1.0.29", - "resolved": "git+ssh://git@github.com/web3-js/WebSocket-Node.git#ef5ea2f41daf4a2113b80c9223df884b4d56c400", - "hasInstallScript": true, - "license": "Apache-2.0", + "node_modules/readdirp": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", "dependencies": { - "debug": "^2.2.0", - "es5-ext": "^0.10.50", - "nan": "^2.14.0", - "typedarray-to-buffer": "^3.1.5", - "yaeti": "^0.0.6" + "picomatch": "^2.2.1" }, "engines": { - "node": ">=0.10.0" + "node": ">=8.10.0" } }, - "node_modules/ts-command-line-args": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/ts-command-line-args/-/ts-command-line-args-2.5.0.tgz", - "integrity": "sha512-Ff7Xt04WWCjj/cmPO9eWTJX3qpBZWuPWyQYG1vnxJao+alWWYjwJBc5aYz3h5p5dE08A6AnpkgiCtP/0KXXBYw==", + "node_modules/reduce-flatten": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/reduce-flatten/-/reduce-flatten-2.0.0.tgz", + "integrity": "sha512-EJ4UNY/U1t2P/2k6oqotuX2Cc3T6nxJwsM0N0asT7dhrtH1ltUxDn4NalSYmPE2rCkVpcf/X6R0wDwcFpzhd4w==", "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/redux": { + "version": "3.7.2", + "resolved": "https://registry.npmjs.org/redux/-/redux-3.7.2.tgz", + "integrity": "sha512-pNqnf9q1hI5HHZRBkj3bAngGZW/JMCmexDlOxw4XagXY2o1327nHH54LoTjiPJ0gizoqPDRqWyX/00g0hD6w+A==", "dependencies": { - "@morgan-stanley/ts-mocking-bird": "^0.6.2", - "chalk": "^4.1.0", - "command-line-args": "^5.1.1", - "command-line-usage": "^6.1.0", - "string-format": "^2.0.0" - }, - "bin": { - "write-markdown": "dist/write-markdown.js" + "lodash": "^4.2.1", + "lodash-es": "^4.2.1", + "loose-envify": "^1.1.0", + "symbol-observable": "^1.0.3" } }, - "node_modules/ts-essentials": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/ts-essentials/-/ts-essentials-7.0.3.tgz", - "integrity": "sha512-8+gr5+lqO3G84KdiTSMRLtuyJ+nTBVRKuCrK4lidMPdVeEp0uqC875uE5NMcaA7YYMN7XsNiFQuMvasF8HT/xQ==", - "dev": true, - "peerDependencies": { - "typescript": ">=3.7.0" + "node_modules/redux-saga": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/redux-saga/-/redux-saga-1.0.0.tgz", + "integrity": "sha512-GvJWs/SzMvEQgeaw6sRMXnS2FghlvEGsHiEtTLpJqc/FHF3I5EE/B+Hq5lyHZ8LSoT2r/X/46uWvkdCnK9WgHA==", + "dependencies": { + "@redux-saga/core": "^1.0.0" } }, - "node_modules/ts-node": { - "version": "9.1.1", - "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-9.1.1.tgz", - "integrity": "sha512-hPlt7ZACERQGf03M253ytLY3dHbGNGrAq9qIHWUY9XHYl1z7wYngSr3OQ5xmui8o2AaxsONxIzjafLUiWBo1Fg==", - "optional": true, - "peer": true, + "node_modules/regenerator-runtime": { + "version": "0.14.0", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.14.0.tgz", + "integrity": "sha512-srw17NI0TUWHuGa5CFGGmhfNIeja30WMBfbslPNhf6JrqQlLN5gcrvig1oqPxiVaXb0oW0XRKtH6Nngs5lKCIA==" + }, + "node_modules/regexp.prototype.flags": { + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.4.3.tgz", + "integrity": "sha512-fjggEOO3slI6Wvgjwflkc4NFRCTZAu5CnNfBd5qOMYhWdn67nJBBu34/TkD++eeFmd8C9r9jfXJ27+nSiRkSUA==", "dependencies": { - "arg": "^4.1.0", - "create-require": "^1.1.0", - "diff": "^4.0.1", - "make-error": "^1.1.1", - "source-map-support": "^0.5.17", - "yn": "3.1.1" - }, - "bin": { - "ts-node": "dist/bin.js", - "ts-node-script": "dist/bin-script.js", - "ts-node-transpile-only": "dist/bin-transpile.js", - "ts-script": "dist/bin-script-deprecated.js" + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "functions-have-names": "^1.2.2" }, "engines": { - "node": ">=10.0.0" + "node": ">= 0.4" }, - "peerDependencies": { - "typescript": ">=2.7" + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/ts-node/node_modules/diff": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", - "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", - "optional": true, - "peer": true, + "node_modules/req-cwd": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/req-cwd/-/req-cwd-2.0.0.tgz", + "integrity": "sha512-ueoIoLo1OfB6b05COxAA9UpeoscNpYyM+BqYlA7H6LVF4hKGPXQQSSaD2YmvDVJMkk4UDpAHIeU1zG53IqjvlQ==", + "dependencies": { + "req-from": "^2.0.0" + }, "engines": { - "node": ">=0.3.1" + "node": ">=4" } }, - "node_modules/tslib": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.5.1.tgz", - "integrity": "sha512-KaI6gPil5m9vF7DKaoXxx1ia9fxS4qG5YveErRRVknPDXXriu5M8h48YRjB6h5ZUOKuAKlSJYb0GaDe8I39fRw==" - }, - "node_modules/tsort": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/tsort/-/tsort-0.0.1.tgz", - "integrity": "sha512-Tyrf5mxF8Ofs1tNoxA13lFeZ2Zrbd6cKbuH3V+MQ5sb6DtBj5FjrXVsRWT8YvNAQTqNoz66dz1WsbigI22aEnw==" - }, - "node_modules/tunnel-agent": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", - "integrity": "sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==", + "node_modules/req-from": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/req-from/-/req-from-2.0.0.tgz", + "integrity": "sha512-LzTfEVDVQHBRfjOUMgNBA+V6DWsSnoeKzf42J7l0xa/B4jyPOuuF5MlNSmomLNGemWTnV2TIdjSSLnEn95fOQA==", "dependencies": { - "safe-buffer": "^5.0.1" + "resolve-from": "^3.0.0" }, "engines": { - "node": "*" + "node": ">=4" } }, - "node_modules/tweetnacl": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-1.0.3.tgz", - "integrity": "sha512-6rt+RN7aOi1nGMyC4Xa5DdYiukl2UWCbcJft7YhxReBGQD7OAM8Pbxw6YMo4r2diNEA8FEmu32YOn9rhaiE5yw==" - }, - "node_modules/tweetnacl-util": { - "version": "0.15.1", - "resolved": "https://registry.npmjs.org/tweetnacl-util/-/tweetnacl-util-0.15.1.tgz", - "integrity": "sha512-RKJBIj8lySrShN4w6i/BonWp2Z/uxwC3h4y7xsRrpP59ZboCd0GpEVsOnMDYLMmKBpYhb5TgHzZXy7wTfYFBRw==" - }, - "node_modules/type": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/type/-/type-1.2.0.tgz", - "integrity": "sha512-+5nt5AAniqsCnu2cEQQdpzCAh33kVx8n0VoFidKpB1dVVLAN/F+bgVOqOJqOnEnrhp222clB5p3vUlD+1QAnfg==" - }, - "node_modules/type-detect": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", - "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==", + "node_modules/request": { + "version": "2.88.2", + "resolved": "https://registry.npmjs.org/request/-/request-2.88.2.tgz", + "integrity": "sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw==", + "deprecated": "request has been deprecated, see https://github.com/request/request/issues/3142", + "dependencies": { + "aws-sign2": "~0.7.0", + "aws4": "^1.8.0", + "caseless": "~0.12.0", + "combined-stream": "~1.0.6", + "extend": "~3.0.2", + "forever-agent": "~0.6.1", + "form-data": "~2.3.2", + "har-validator": "~5.1.3", + "http-signature": "~1.2.0", + "is-typedarray": "~1.0.0", + "isstream": "~0.1.2", + "json-stringify-safe": "~5.0.1", + "mime-types": "~2.1.19", + "oauth-sign": "~0.9.0", + "performance-now": "^2.1.0", + "qs": "~6.5.2", + "safe-buffer": "^5.1.2", + "tough-cookie": "~2.5.0", + "tunnel-agent": "^0.6.0", + "uuid": "^3.3.2" + }, "engines": { - "node": ">=4" + "node": ">= 6" } }, - "node_modules/type-fest": { - "version": "0.21.3", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", - "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", + "node_modules/request-promise-core": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/request-promise-core/-/request-promise-core-1.1.4.tgz", + "integrity": "sha512-TTbAfBBRdWD7aNNOoVOBH4pN/KigV6LyapYNNlAPA8JwbovRti1E88m3sYAwsLi5ryhPKsE9APwnjFTgdUjTpw==", + "dependencies": { + "lodash": "^4.17.19" + }, "engines": { - "node": ">=10" + "node": ">=0.10.0" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "peerDependencies": { + "request": "^2.34" } }, - "node_modules/type-is": { - "version": "1.6.18", - "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", - "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", + "node_modules/request-promise-native": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/request-promise-native/-/request-promise-native-1.0.9.tgz", + "integrity": "sha512-wcW+sIUiWnKgNY0dqCpOZkUbF/I+YPi+f09JZIDa39Ec+q82CpSYniDp+ISgTTbKmnpJWASeJBPZmoxH84wt3g==", + "deprecated": "request-promise-native has been deprecated because it extends the now deprecated request package, see https://github.com/request/request/issues/3142", "dependencies": { - "media-typer": "0.3.0", - "mime-types": "~2.1.24" + "request-promise-core": "1.1.4", + "stealthy-require": "^1.1.1", + "tough-cookie": "^2.3.3" }, "engines": { - "node": ">= 0.6" + "node": ">=0.12.0" + }, + "peerDependencies": { + "request": "^2.34" } }, - "node_modules/typechain": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/typechain/-/typechain-8.1.1.tgz", - "integrity": "sha512-uF/sUvnXTOVF2FHKhQYnxHk4su4JjZR8vr4mA2mBaRwHTbwh0jIlqARz9XJr1tA0l7afJGvEa1dTSi4zt039LQ==", - "dev": true, + "node_modules/request/node_modules/form-data": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz", + "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==", "dependencies": { - "@types/prettier": "^2.1.1", - "debug": "^4.3.1", - "fs-extra": "^7.0.0", - "glob": "7.1.7", - "js-sha3": "^0.8.0", - "lodash": "^4.17.15", - "mkdirp": "^1.0.4", - "prettier": "^2.3.1", - "ts-command-line-args": "^2.2.0", - "ts-essentials": "^7.0.1" + "asynckit": "^0.4.0", + "combined-stream": "^1.0.6", + "mime-types": "^2.1.12" }, + "engines": { + "node": ">= 0.12" + } + }, + "node_modules/request/node_modules/qs": { + "version": "6.5.3", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.3.tgz", + "integrity": "sha512-qxXIEh4pCGfHICj1mAJQ2/2XVZkjCDTcEgfoSQxc/fYivUZxTkk7L3bDBJSoNrEzXI17oUO5Dp07ktqE5KzczA==", + "engines": { + "node": ">=0.6" + } + }, + "node_modules/request/node_modules/uuid": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", + "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==", + "deprecated": "Please upgrade to version 7 or higher. Older versions may use Math.random() in certain circumstances, which is known to be problematic. See https://v8.dev/blog/math-random for details.", "bin": { - "typechain": "dist/cli/cli.js" - }, - "peerDependencies": { - "typescript": ">=4.3.0" + "uuid": "bin/uuid" } }, - "node_modules/typechain/node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dev": true, + "node_modules/require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/require-from-string": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", + "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/require-main-filename": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-1.0.1.tgz", + "integrity": "sha512-IqSUtOVP4ksd1C/ej5zeEh/BIP2ajqpn8c5x+q99gvcIG/Qf0cud5raVnE/Dwd0ua9TXYDoDc0RE5hBSdz22Ug==" + }, + "node_modules/reselect": { + "version": "4.1.8", + "resolved": "https://registry.npmjs.org/reselect/-/reselect-4.1.8.tgz", + "integrity": "sha512-ab9EmR80F/zQTMNeneUr4cv+jSwPJgIlvEmVwLerwrWVbpLlBuls9XHzIeTFy4cegU2NHBp3va0LKOzU5qFEYQ==" + }, + "node_modules/reselect-tree": { + "version": "1.3.7", + "resolved": "https://registry.npmjs.org/reselect-tree/-/reselect-tree-1.3.7.tgz", + "integrity": "sha512-kZN+C1cVJ6fFN2smSb0l4UvYZlRzttgnu183svH4NrU22cBY++ikgr2QT75Uuk4MYpv5gXSVijw4c5U6cx6GKg==", "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" + "debug": "^3.1.0", + "json-pointer": "^0.6.1", + "reselect": "^4.0.0" } }, - "node_modules/typechain/node_modules/fs-extra": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-7.0.1.tgz", - "integrity": "sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==", - "dev": true, + "node_modules/reselect-tree/node_modules/debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", "dependencies": { - "graceful-fs": "^4.1.2", - "jsonfile": "^4.0.0", - "universalify": "^0.1.0" - }, - "engines": { - "node": ">=6 <7 || >=8" + "ms": "^2.1.1" } }, - "node_modules/typechain/node_modules/glob": { - "version": "7.1.7", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.7.tgz", - "integrity": "sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ==", - "dev": true, + "node_modules/resolve": { + "version": "1.17.0", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.17.0.tgz", + "integrity": "sha512-ic+7JYiV8Vi2yzQGFWOkiZD5Z9z7O2Zhm9XMaTxdJExKasieFCr+yXZ/WmXsckHiKl12ar0y6XiXDx3m4RHn1w==", "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "engines": { - "node": "*" + "path-parse": "^1.0.6" }, "funding": { - "url": "https://github.com/sponsors/isaacs" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/typechain/node_modules/jsonfile": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", - "integrity": "sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==", - "dev": true, - "optionalDependencies": { - "graceful-fs": "^4.1.6" + "node_modules/resolve-alpn": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/resolve-alpn/-/resolve-alpn-1.2.1.tgz", + "integrity": "sha512-0a1F4l73/ZFZOakJnQ3FvkJ2+gSTQWz/r2KE5OdDY0TxPm5h4GkqkWWfM47T7HsbnOtcJVEF4epCVy6u7Q3K+g==" + }, + "node_modules/resolve-from": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-3.0.0.tgz", + "integrity": "sha512-GnlH6vxLymXJNMBo7XP1fJIzBFbdYt49CuTwmB/6N53t+kMPRMFKz783LlQ4tv28XoQfMWinAJX6WCGf2IlaIw==", + "engines": { + "node": ">=4" } }, - "node_modules/typechain/node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dev": true, + "node_modules/responselike": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/responselike/-/responselike-2.0.1.tgz", + "integrity": "sha512-4gl03wn3hj1HP3yzgdI7d3lCkF95F21Pz4BPGvKHinyQzALR5CapwC8yIi0Rh58DEMQ/SguC03wFj2k0M/mHhw==", "dependencies": { - "brace-expansion": "^1.1.7" + "lowercase-keys": "^2.0.0" }, - "engines": { - "node": "*" + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/typechain/node_modules/mkdirp": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", - "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", - "dev": true, - "bin": { - "mkdirp": "bin/cmd.js" - }, + "node_modules/responselike/node_modules/lowercase-keys": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-2.0.0.tgz", + "integrity": "sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==", "engines": { - "node": ">=10" + "node": ">=8" } }, - "node_modules/typechain/node_modules/universalify": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", - "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", - "dev": true, + "node_modules/restore-cursor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz", + "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==", + "optional": true, + "dependencies": { + "onetime": "^5.1.0", + "signal-exit": "^3.0.2" + }, "engines": { - "node": ">= 4.0.0" + "node": ">=8" } }, - "node_modules/typed-function": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/typed-function/-/typed-function-4.1.0.tgz", - "integrity": "sha512-DGwUl6cioBW5gw2L+6SMupGwH/kZOqivy17E4nsh1JI9fKF87orMmlQx3KISQPmg3sfnOUGlwVkroosvgddrlg==", + "node_modules/retry": { + "version": "0.13.1", + "resolved": "https://registry.npmjs.org/retry/-/retry-0.13.1.tgz", + "integrity": "sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg==", + "devOptional": true, "engines": { - "node": ">= 14" + "node": ">= 4" } }, - "node_modules/typedarray": { - "version": "0.0.6", - "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", - "integrity": "sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA==" + "node_modules/rimraf": { + "version": "2.4.5", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.4.5.tgz", + "integrity": "sha512-J5xnxTyqaiw06JjMftq7L9ouA448dw/E7dKghkP9WpKNuwmARNNg+Gk8/u5ryb9N/Yo2+z3MCwuqFK/+qPOPfQ==", + "dependencies": { + "glob": "^6.0.1" + }, + "bin": { + "rimraf": "bin.js" + } }, - "node_modules/typedarray-to-buffer": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz", - "integrity": "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==", + "node_modules/rimraf/node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", "dependencies": { - "is-typedarray": "^1.0.0" + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" } }, - "node_modules/typescript": { - "version": "5.0.4", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.0.4.tgz", - "integrity": "sha512-cW9T5W9xY37cc+jfEnaUvX91foxtHkza3Nw3wkoF4sSlKn0MONdkdEndig/qPBWXNkmplh3NzayQzCiHM4/hqw==", - "bin": { - "tsc": "bin/tsc", - "tsserver": "bin/tsserver" + "node_modules/rimraf/node_modules/glob": { + "version": "6.0.4", + "resolved": "https://registry.npmjs.org/glob/-/glob-6.0.4.tgz", + "integrity": "sha512-MKZeRNyYZAVVVG1oZeLaWie1uweH40m9AZwIwxyPbTSX4hHrVYSzLg0Ro5Z5R7XKkIX+Cc6oD1rqeDJnwsB8/A==", + "dependencies": { + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "2 || 3", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" }, "engines": { - "node": ">=12.20" + "node": "*" } }, - "node_modules/typescript-compare": { - "version": "0.0.2", - "resolved": "https://registry.npmjs.org/typescript-compare/-/typescript-compare-0.0.2.tgz", - "integrity": "sha512-8ja4j7pMHkfLJQO2/8tut7ub+J3Lw2S3061eJLFQcvs3tsmJKp8KG5NtpLn7KcY2w08edF74BSVN7qJS0U6oHA==", + "node_modules/rimraf/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", "dependencies": { - "typescript-logic": "^0.0.0" + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" } }, - "node_modules/typescript-logic": { - "version": "0.0.0", - "resolved": "https://registry.npmjs.org/typescript-logic/-/typescript-logic-0.0.0.tgz", - "integrity": "sha512-zXFars5LUkI3zP492ls0VskH3TtdeHCqu0i7/duGt60i5IGPIpAHE/DWo5FqJ6EjQ15YKXrt+AETjv60Dat34Q==" - }, - "node_modules/typescript-tuple": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/typescript-tuple/-/typescript-tuple-2.2.1.tgz", - "integrity": "sha512-Zcr0lbt8z5ZdEzERHAMAniTiIKerFCMgd7yjq1fPnDJ43et/k9twIFQMUYff9k5oXcsQ0WpvFcgzK2ZKASoW6Q==", + "node_modules/ripemd160": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.2.tgz", + "integrity": "sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==", "dependencies": { - "typescript-compare": "^0.0.2" + "hash-base": "^3.0.0", + "inherits": "^2.0.1" } }, - "node_modules/typical": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/typical/-/typical-4.0.0.tgz", - "integrity": "sha512-VAH4IvQ7BDFYglMd7BPRDfLgxZZX4O4TFcRDA6EN5X7erNJJq+McIEp8np9aVtxrCJ6qx4GTYVfOWNjcqwZgRw==", - "dev": true, + "node_modules/ripemd160-min": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/ripemd160-min/-/ripemd160-min-0.0.6.tgz", + "integrity": "sha512-+GcJgQivhs6S9qvLogusiTcS9kQUfgR75whKuy5jIhuiOfQuJ8fjqxV6EGD5duH1Y/FawFUMtMhyeq3Fbnib8A==", "engines": { "node": ">=8" } }, - "node_modules/u2f-api": { - "version": "0.2.7", - "resolved": "https://registry.npmjs.org/u2f-api/-/u2f-api-0.2.7.tgz", - "integrity": "sha512-fqLNg8vpvLOD5J/z4B6wpPg4Lvowz1nJ9xdHcCzdUPKcFE/qNCceV2gNZxSJd5vhAZemHr/K/hbzVA0zxB5mkg==" - }, - "node_modules/ultron": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/ultron/-/ultron-1.1.1.tgz", - "integrity": "sha512-UIEXBNeYmKptWH6z8ZnqTeS8fV74zG0/eRU9VGkpzz+LIJNs8W/zM/L+7ctCkRrgbNnnR0xxw4bKOr0cW0N0Og==" - }, - "node_modules/unbox-primitive": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.2.tgz", - "integrity": "sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==", + "node_modules/rlp": { + "version": "2.2.7", + "resolved": "https://registry.npmjs.org/rlp/-/rlp-2.2.7.tgz", + "integrity": "sha512-d5gdPmgQ0Z+AklL2NVXr/IoSjNZFfTVvQWzL/AM2AOcSzYP2xjlb0AC8YyCLc41MSNf6P6QVtjgPdmVtzb+4lQ==", "dependencies": { - "call-bind": "^1.0.2", - "has-bigints": "^1.0.2", - "has-symbols": "^1.0.3", - "which-boxed-primitive": "^1.0.2" + "bn.js": "^5.2.0" }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "bin": { + "rlp": "bin/rlp" } }, - "node_modules/unbzip2-stream": { - "version": "1.4.3", - "resolved": "https://registry.npmjs.org/unbzip2-stream/-/unbzip2-stream-1.4.3.tgz", - "integrity": "sha512-mlExGW4w71ebDJviH16lQLtZS32VKqsSfk80GCfUlwT/4/hNRFsoscrF/c++9xinkMzECL1uL9DDwXqFWkruPg==", + "node_modules/rpc-websockets": { + "version": "7.5.1", + "resolved": "https://registry.npmjs.org/rpc-websockets/-/rpc-websockets-7.5.1.tgz", + "integrity": "sha512-kGFkeTsmd37pHPMaHIgN1LVKXMi0JD782v4Ds9ZKtLlwdTKjn+CxM9A9/gLT2LaOuEcEFGL98h1QWQtlOIdW0w==", "dependencies": { - "buffer": "^5.2.1", - "through": "^2.3.8" + "@babel/runtime": "^7.17.2", + "eventemitter3": "^4.0.7", + "uuid": "^8.3.2", + "ws": "^8.5.0" + }, + "funding": { + "type": "paypal", + "url": "https://paypal.me/kozjak" + }, + "optionalDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": "^5.0.2" } }, - "node_modules/unbzip2-stream/node_modules/buffer": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", - "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", + "node_modules/run-parallel-limit": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/run-parallel-limit/-/run-parallel-limit-1.1.0.tgz", + "integrity": "sha512-jJA7irRNM91jaKc3Hcl1npHsFLOXOoTkPCUL1JEa1R82O2miplXXRaGdjW/KM/98YQWDhJLiSs793CnXfblJUw==", "funding": [ { "type": "github", @@ -29831,1443 +30925,1557 @@ } ], "dependencies": { - "base64-js": "^1.3.1", - "ieee754": "^1.1.13" + "queue-microtask": "^1.2.2" } }, - "node_modules/undefsafe": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/undefsafe/-/undefsafe-2.0.5.tgz", - "integrity": "sha512-WxONCrssBM8TSPRqN5EmsjVrsv4A8X12J4ArBiiayv3DyyG3ZlIg6yysuuSYdZsVz3TKcTg2fd//Ujd4CHV1iA==" - }, - "node_modules/underscore": { - "version": "1.13.6", - "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.13.6.tgz", - "integrity": "sha512-+A5Sja4HP1M08MaXya7p5LvjuM7K6q/2EaC0+iovj/wOcMsTzMvDFbasi/oSapiwOlt252IqsKqPjCl7huKS0A==", - "dev": true + "node_modules/rustbn.js": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/rustbn.js/-/rustbn.js-0.2.0.tgz", + "integrity": "sha512-4VlvkRUuCJvr2J6Y0ImW7NvTCriMi7ErOAqWk1y69vAdoNIzCF3yPmgeNzx+RQTLEDFq5sHfscn1MwHxP9hNfA==" }, - "node_modules/undici": { - "version": "5.21.0", - "resolved": "https://registry.npmjs.org/undici/-/undici-5.21.0.tgz", - "integrity": "sha512-HOjK8l6a57b2ZGXOcUsI5NLfoTrfmbOl90ixJDl0AEFG4wgHNDQxtZy15/ZQp7HhjkpaGlp/eneMgtsu1dIlUA==", + "node_modules/rxjs": { + "version": "6.6.7", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.7.tgz", + "integrity": "sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ==", "dependencies": { - "busboy": "^1.6.0" - }, - "engines": { - "node": ">=12.18" - } - }, - "node_modules/unit-fns": { - "version": "0.1.9", - "resolved": "https://registry.npmjs.org/unit-fns/-/unit-fns-0.1.9.tgz", - "integrity": "sha512-bxceIkc7n2icQmgQx8u3vX98ZBIcpL2YJDKIsWDFK7ZX1TTuLvtNWVNd9/oARCDHd7QQRzwc+zxabO0HSK8X0w==", - "engines": { - "node": ">=10" + "tslib": "^1.9.0" }, - "node_modules/unfetch": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/unfetch/-/unfetch-4.2.0.tgz", - "integrity": "sha512-F9p7yYCn6cIW9El1zi0HI6vqpeIvBsr3dSuRO6Xuppb1u5rXpCPmMvLSyECLhybr9isec8Ohl0hPekMVrEinDA==", - "dev": true - }, - "node_modules/universalify": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", - "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", "engines": { - "node": ">= 10.0.0" + "npm": ">=2.0.0" } }, - "node_modules/unpipe": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", - "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==", - "engines": { - "node": ">= 0.8" - } + "node_modules/rxjs/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" }, - "node_modules/update-browserslist-db": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.10.tgz", - "integrity": "sha512-OztqDenkfFkbSG+tRxBeAnCVPckDBcvibKd35yDONx6OU8N7sqgwc7rCbkJ/WcYtVRZ4ba68d6byhC21GFh7sQ==", + "node_modules/safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", "funding": [ { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" + "type": "github", + "url": "https://github.com/sponsors/feross" }, { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/browserslist" + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" } - ], + ] + }, + "node_modules/safe-event-emitter": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/safe-event-emitter/-/safe-event-emitter-1.0.1.tgz", + "integrity": "sha512-e1wFe99A91XYYxoQbcq2ZJUWurxEyP8vfz7A7vuUe1s95q8r5ebraVaA1BukYJcpM6V16ugWoD9vngi8Ccu5fg==", + "deprecated": "Renamed to @metamask/safe-event-emitter", "dependencies": { - "escalade": "^3.1.1", - "picocolors": "^1.0.0" - }, - "bin": { - "browserslist-lint": "cli.js" - }, - "peerDependencies": { - "browserslist": ">= 4.21.0" + "events": "^3.0.0" } }, - "node_modules/upper-case": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/upper-case/-/upper-case-1.1.3.tgz", - "integrity": "sha512-WRbjgmYzgXkCV7zNVpy5YgrHgbBv126rMALQQMrmzOVC4GM2waQ9x7xtm8VU+1yF2kWyPzI9zbZ48n4vSxwfSA==" + "node_modules/safe-json-stringify": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/safe-json-stringify/-/safe-json-stringify-1.2.0.tgz", + "integrity": "sha512-gH8eh2nZudPQO6TytOvbxnuhYBOvDBBLW52tz5q6X58lJcd/tkmqFR+5Z9adS8aJtURSXWThWy/xJtJwixErvg==", + "optional": true }, - "node_modules/upper-case-first": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/upper-case-first/-/upper-case-first-1.1.2.tgz", - "integrity": "sha512-wINKYvI3Db8dtjikdAqoBbZoP6Q+PZUyfMR7pmwHzjC2quzSkUq5DmPrTtPEqHaz8AGtmsB4TqwapMTM1QAQOQ==", + "node_modules/safe-regex-test": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.0.0.tgz", + "integrity": "sha512-JBUUzyOgEwXQY1NuPtvcj/qcBDbDmEvWufhlnXZIm75DEHp+afM1r1ujJpJsV/gSM4t59tpDyPi1sd6ZaPFfsA==", "dependencies": { - "upper-case": "^1.1.1" + "call-bind": "^1.0.2", + "get-intrinsic": "^1.1.3", + "is-regex": "^1.1.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/uri-js": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", - "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", - "dependencies": { - "punycode": "^2.1.0" - } + "node_modules/safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" }, - "node_modules/url": { - "version": "0.11.0", - "resolved": "https://registry.npmjs.org/url/-/url-0.11.0.tgz", - "integrity": "sha512-kbailJa29QrtXnxgq+DdCEGlbTeYM2eJUxsz6vjZavrCYPMIFHMKQmSKYAIuUK2i7hgPm28a8piX5NTUtM/LKQ==", - "dev": true, - "dependencies": { - "punycode": "1.3.2", - "querystring": "0.2.0" - } + "node_modules/scrypt-js": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/scrypt-js/-/scrypt-js-3.0.1.tgz", + "integrity": "sha512-cdwTTnqPu0Hyvf5in5asVdZocVDTNRmR7XEcJuIzMjJeSHybHl7vpB66AzwTaIg6CLSbtjcxc8fqcySfnTkccA==" }, - "node_modules/url-parse-lax": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-3.0.0.tgz", - "integrity": "sha512-NjFKA0DidqPa5ciFcSrXnAltTtzz84ogy+NebPvfEgAck0+TNg4UJ4IN+fB7zRZfbgUf0syOo9MDxFkDSMuFaQ==", + "node_modules/scryptsy": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/scryptsy/-/scryptsy-2.1.0.tgz", + "integrity": "sha512-1CdSqHQowJBnMAFyPEBRfqag/YP9OF394FV+4YREIJX4ljD7OxvQRDayyoyyCk+senRjSkP6VnUNQmVQqB6g7w==" + }, + "node_modules/secp256k1": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/secp256k1/-/secp256k1-4.0.3.tgz", + "integrity": "sha512-NLZVf+ROMxwtEj3Xa562qgv2BK5e2WNmXPiOdVIPLgs6lyTzMvBq0aWTYMI5XCP9jZMVKOcqZLw/Wc4vDkuxhA==", + "hasInstallScript": true, "dependencies": { - "prepend-http": "^2.0.0" + "elliptic": "^6.5.4", + "node-addon-api": "^2.0.0", + "node-gyp-build": "^4.2.0" }, "engines": { - "node": ">=4" + "node": ">=10.0.0" } }, - "node_modules/url-set-query": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/url-set-query/-/url-set-query-1.0.0.tgz", - "integrity": "sha512-3AChu4NiXquPfeckE5R5cGdiHCMWJx1dwCWOmWIL4KHAziJNOFIYJlpGFeKDvwLPHovZRCxK3cYlwzqI9Vp+Gg==" + "node_modules/seedrandom": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/seedrandom/-/seedrandom-3.0.5.tgz", + "integrity": "sha512-8OwmbklUNzwezjGInmZ+2clQmExQPvomqjL7LFqOYqtmuxRgQYqOD3mHaU+MvZn5FLUeVxVfQjwLZW/n/JFuqg==" }, - "node_modules/url-to-options": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/url-to-options/-/url-to-options-1.0.1.tgz", - "integrity": "sha512-0kQLIzG4fdk/G5NONku64rSH/x32NOA39LVQqlK8Le6lvTF6GGRJpqaQFGgU+CLwySIqBSMdwYM0sYcW9f6P4A==", + "node_modules/seek-bzip": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/seek-bzip/-/seek-bzip-1.0.6.tgz", + "integrity": "sha512-e1QtP3YL5tWww8uKaOCQ18UxIT2laNBXHjV/S2WYCiK4udiv8lkG89KRIoCjUagnAmCBurjF4zEVX2ByBbnCjQ==", + "dependencies": { + "commander": "^2.8.1" + }, + "bin": { + "seek-bunzip": "bin/seek-bunzip", + "seek-table": "bin/seek-bzip-table" + } + }, + "node_modules/semaphore": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/semaphore/-/semaphore-1.1.0.tgz", + "integrity": "sha512-O4OZEaNtkMd/K0i6js9SL+gqy0ZCBMgUvlSqHKi4IBdjhe7wB8pwztUk1BbZ1fmrvpwFrPbHzqd2w5pTcJH6LA==", "engines": { - "node": ">= 4" + "node": ">=0.8.0" } }, - "node_modules/url/node_modules/punycode": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.3.2.tgz", - "integrity": "sha512-RofWgt/7fL5wP1Y7fxE7/EmTLzQVnB0ycyibJ0OOHIlJqTNzglYFxVwETOcIoJqJmpDXJ9xImDv+Fq34F/d4Dw==", - "dev": true + "node_modules/semaphore-async-await": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/semaphore-async-await/-/semaphore-async-await-1.5.1.tgz", + "integrity": "sha512-b/ptP11hETwYWpeilHXXQiV5UJNJl7ZWWooKRE5eBIYWoom6dZ0SluCIdCtKycsMtZgKWE01/qAw6jblw1YVhg==", + "engines": { + "node": ">=4.1" + } }, - "node_modules/usb": { - "version": "1.9.2", - "resolved": "https://registry.npmjs.org/usb/-/usb-1.9.2.tgz", - "integrity": "sha512-dryNz030LWBPAf6gj8vyq0Iev3vPbCLHCT8dBw3gQRXRzVNsIdeuU+VjPp3ksmSPkeMAl1k+kQ14Ij0QHyeiAg==", - "hasInstallScript": true, - "optional": true, + "node_modules/semver": { + "version": "7.5.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", + "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", "dependencies": { - "node-addon-api": "^4.2.0", - "node-gyp-build": "^4.3.0" + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" }, "engines": { - "node": ">=10.16.0" + "node": ">=10" } }, - "node_modules/usb/node_modules/node-addon-api": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-4.3.0.tgz", - "integrity": "sha512-73sE9+3UaLYYFmDsFZnqCInzPyh3MqIwZO9cw58yIqAZhONrrabrYyYe3TuIqtIiOuTXVhsGau8hcrhhwSsDIQ==", - "optional": true - }, - "node_modules/utf-8-validate": { - "version": "5.0.10", - "resolved": "https://registry.npmjs.org/utf-8-validate/-/utf-8-validate-5.0.10.tgz", - "integrity": "sha512-Z6czzLq4u8fPOyx7TU6X3dvUZVvoJmxSQ+IcrlmagKhilxlhZgxPK6C5Jqbkw1IDUmFTM+cz9QDnnLTwDz/2gQ==", - "hasInstallScript": true, + "node_modules/semver/node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", "dependencies": { - "node-gyp-build": "^4.3.0" + "yallist": "^4.0.0" }, "engines": { - "node": ">=6.14.2" + "node": ">=10" } }, - "node_modules/utf8": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/utf8/-/utf8-3.0.0.tgz", - "integrity": "sha512-E8VjFIQ/TyQgp+TZfS6l8yp/xWppSAHzidGiRrqe4bK4XP9pTRyKFgGJpO3SN7zdX4DeomTrwaseCHovfpFcqQ==" + "node_modules/semver/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" }, - "node_modules/util": { - "version": "0.12.5", - "resolved": "https://registry.npmjs.org/util/-/util-0.12.5.tgz", - "integrity": "sha512-kZf/K6hEIrWHI6XqOFUiiMa+79wE/D8Q+NCNAWclkyg3b4d2k7s0QGepNjiABc+aR3N1PAyHL7p6UcLY6LmrnA==", + "node_modules/send": { + "version": "0.18.0", + "resolved": "https://registry.npmjs.org/send/-/send-0.18.0.tgz", + "integrity": "sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==", "dependencies": { - "inherits": "^2.0.3", - "is-arguments": "^1.0.4", - "is-generator-function": "^1.0.7", - "is-typed-array": "^1.1.3", - "which-typed-array": "^1.1.2" - } - }, - "node_modules/util-deprecate": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==" - }, - "node_modules/utils-merge": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", - "integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==", + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "1.2.0", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "fresh": "0.5.2", + "http-errors": "2.0.0", + "mime": "1.6.0", + "ms": "2.1.3", + "on-finished": "2.4.1", + "range-parser": "~1.2.1", + "statuses": "2.0.1" + }, "engines": { - "node": ">= 0.4.0" - } - }, - "node_modules/uuid": { - "version": "8.3.2", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", - "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", - "bin": { - "uuid": "dist/bin/uuid" + "node": ">= 0.8.0" } }, - "node_modules/validate-npm-package-license": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", - "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", + "node_modules/send/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", "dependencies": { - "spdx-correct": "^3.0.0", - "spdx-expression-parse": "^3.0.0" + "ms": "2.0.0" } }, - "node_modules/value-or-promise": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/value-or-promise/-/value-or-promise-1.0.11.tgz", - "integrity": "sha512-41BrgH+dIbCFXClcSapVs5M6GkENd3gQOJpEfPDNa71LsUGMXDL0jMWpI/Rh7WhX+Aalfz2TTS3Zt5pUsbnhLg==", - "optional": true, - "engines": { - "node": ">=12" - } + "node_modules/send/node_modules/debug/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" }, - "node_modules/varint": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/varint/-/varint-5.0.2.tgz", - "integrity": "sha512-lKxKYG6H03yCZUpAGOPOsMcGxd1RHCu1iKvEHYDPmTyq2HueGhD73ssNBqqQWfvYs04G9iUFRvmAVLW20Jw6ow==" + "node_modules/send/node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" }, - "node_modules/vary": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", - "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==", - "engines": { - "node": ">= 0.8" + "node_modules/sentence-case": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/sentence-case/-/sentence-case-2.1.1.tgz", + "integrity": "sha512-ENl7cYHaK/Ktwk5OTD+aDbQ3uC8IByu/6Bkg+HDv8Mm+XnBnppVNalcfJTNsp1ibstKh030/JKQQWglDvtKwEQ==", + "dependencies": { + "no-case": "^2.2.0", + "upper-case-first": "^1.1.2" } }, - "node_modules/verror": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", - "integrity": "sha512-ZZKSmDAEFOijERBLkmYfJ+vmk3w+7hOLYDNkRCuRuMJGEmqYNCNLyBBFwWKVMhfwaEF3WOd0Zlw86U/WC/+nYw==", - "engines": [ - "node >=0.6.0" - ], + "node_modules/serialize-javascript": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.0.tgz", + "integrity": "sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag==", "dependencies": { - "assert-plus": "^1.0.0", - "core-util-is": "1.0.2", - "extsprintf": "^1.2.0" + "randombytes": "^2.1.0" } }, - "node_modules/vuvuzela": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/vuvuzela/-/vuvuzela-1.0.3.tgz", - "integrity": "sha512-Tm7jR1xTzBbPW+6y1tknKiEhz04Wf/1iZkcTJjSFcpNko43+dFW6+OOeQe9taJIug3NdfUAjFKgUSyQrIKaDvQ==", - "optional": true - }, - "node_modules/web3": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/web3/-/web3-1.10.0.tgz", - "integrity": "sha512-YfKY9wSkGcM8seO+daR89oVTcbu18NsVfvOngzqMYGUU0pPSQmE57qQDvQzUeoIOHAnXEBNzrhjQJmm8ER0rng==", - "hasInstallScript": true, + "node_modules/serve-static": { + "version": "1.15.0", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.15.0.tgz", + "integrity": "sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==", "dependencies": { - "web3-bzz": "1.10.0", - "web3-core": "1.10.0", - "web3-eth": "1.10.0", - "web3-eth-personal": "1.10.0", - "web3-net": "1.10.0", - "web3-shh": "1.10.0", - "web3-utils": "1.10.0" + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "parseurl": "~1.3.3", + "send": "0.18.0" }, "engines": { - "node": ">=8.0.0" + "node": ">= 0.8.0" } }, - "node_modules/web3-bzz": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/web3-bzz/-/web3-bzz-1.10.0.tgz", - "integrity": "sha512-o9IR59io3pDUsXTsps5pO5hW1D5zBmg46iNc2t4j2DkaYHNdDLwk2IP9ukoM2wg47QILfPEJYzhTfkS/CcX0KA==", - "hasInstallScript": true, + "node_modules/servify": { + "version": "0.1.12", + "resolved": "https://registry.npmjs.org/servify/-/servify-0.1.12.tgz", + "integrity": "sha512-/xE6GvsKKqyo1BAY+KxOWXcLpPsUUyji7Qg3bVD7hh1eRze5bR1uYiuDA/k3Gof1s9BTzQZEJK8sNcNGFIzeWw==", "dependencies": { - "@types/node": "^12.12.6", - "got": "12.1.0", - "swarm-js": "^0.1.40" + "body-parser": "^1.16.0", + "cors": "^2.8.1", + "express": "^4.14.0", + "request": "^2.79.0", + "xhr": "^2.3.3" }, "engines": { - "node": ">=8.0.0" + "node": ">=6" } }, - "node_modules/web3-bzz/node_modules/@types/node": { - "version": "12.20.55", - "resolved": "https://registry.npmjs.org/@types/node/-/node-12.20.55.tgz", - "integrity": "sha512-J8xLz7q2OFulZ2cyGTLE1TbbZcjpno7FaN6zdJNrgAdrJ+DZzh/uFR6YrTb4C+nXakvud8Q4+rbhoIWlYQbUFQ==" + "node_modules/set-blocking": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", + "integrity": "sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==" }, - "node_modules/web3-core": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/web3-core/-/web3-core-1.10.0.tgz", - "integrity": "sha512-fWySwqy2hn3TL89w5TM8wXF1Z2Q6frQTKHWmP0ppRQorEK8NcHJRfeMiv/mQlSKoTS1F6n/nv2uyZsixFycjYQ==", - "dependencies": { - "@types/bn.js": "^5.1.1", - "@types/node": "^12.12.6", - "bignumber.js": "^9.0.0", - "web3-core-helpers": "1.10.0", - "web3-core-method": "1.10.0", - "web3-core-requestmanager": "1.10.0", - "web3-utils": "1.10.0" - }, + "node_modules/set-immediate-shim": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/set-immediate-shim/-/set-immediate-shim-1.0.1.tgz", + "integrity": "sha512-Li5AOqrZWCVA2n5kryzEmqai6bKSIvpz5oUJHPVj6+dsbD3X1ixtsY5tEnsaNpH3pFAHmG8eIHUrtEtohrg+UQ==", "engines": { - "node": ">=8.0.0" + "node": ">=0.10.0" } }, - "node_modules/web3-core-helpers": { - "version": "1.8.2", - "resolved": "https://registry.npmjs.org/web3-core-helpers/-/web3-core-helpers-1.8.2.tgz", - "integrity": "sha512-6B1eLlq9JFrfealZBomd1fmlq1o4A09vrCVQSa51ANoib/jllT3atZrRDr0zt1rfI7TSZTZBXdN/aTdeN99DWw==", - "dev": true, + "node_modules/setimmediate": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", + "integrity": "sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA==" + }, + "node_modules/setprototypeof": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", + "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==" + }, + "node_modules/sha.js": { + "version": "2.4.11", + "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz", + "integrity": "sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==", "dependencies": { - "web3-eth-iban": "1.8.2", - "web3-utils": "1.8.2" + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" }, - "engines": { - "node": ">=8.0.0" + "bin": { + "sha.js": "bin.js" } }, - "node_modules/web3-core-helpers/node_modules/web3-utils": { - "version": "1.8.2", - "resolved": "https://registry.npmjs.org/web3-utils/-/web3-utils-1.8.2.tgz", - "integrity": "sha512-v7j6xhfLQfY7xQDrUP0BKbaNrmZ2/+egbqP9q3KYmOiPpnvAfol+32slgL0WX/5n8VPvKCK5EZ1HGrAVICSToA==", - "dev": true, + "node_modules/sha1": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/sha1/-/sha1-1.1.1.tgz", + "integrity": "sha512-dZBS6OrMjtgVkopB1Gmo4RQCDKiZsqcpAQpkV/aaj+FCrCg8r4I4qMkDPQjBgLIxlmu9k4nUbWq6ohXahOneYA==", "dependencies": { - "bn.js": "^5.2.1", - "ethereum-bloom-filters": "^1.0.6", - "ethereumjs-util": "^7.1.0", - "ethjs-unit": "0.1.6", - "number-to-bn": "1.7.0", - "randombytes": "^2.1.0", - "utf8": "3.0.0" + "charenc": ">= 0.0.1", + "crypt": ">= 0.0.1" }, "engines": { - "node": ">=8.0.0" + "node": "*" } }, - "node_modules/web3-core-method": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/web3-core-method/-/web3-core-method-1.10.0.tgz", - "integrity": "sha512-4R700jTLAMKDMhQ+nsVfIXvH6IGJlJzGisIfMKWAIswH31h5AZz7uDUW2YctI+HrYd+5uOAlS4OJeeT9bIpvkA==", + "node_modules/sha3": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/sha3/-/sha3-2.1.4.tgz", + "integrity": "sha512-S8cNxbyb0UGUM2VhRD4Poe5N58gJnJsLJ5vC7FYWGUmGhcsj4++WaIOBFVDxlG0W3To6xBuiRh+i0Qp2oNCOtg==", "dependencies": { - "@ethersproject/transactions": "^5.6.2", - "web3-core-helpers": "1.10.0", - "web3-core-promievent": "1.10.0", - "web3-core-subscriptions": "1.10.0", - "web3-utils": "1.10.0" - }, - "engines": { - "node": ">=8.0.0" + "buffer": "6.0.3" } }, - "node_modules/web3-core-method/node_modules/eventemitter3": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.4.tgz", - "integrity": "sha512-rlaVLnVxtxvoyLsQQFBx53YmXHDxRIzzTLbdfxqi4yocpSjAxXwkU0cScM5JgSKMqEhrZpnvQ2D9gjylR0AimQ==" + "node_modules/shallowequal": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/shallowequal/-/shallowequal-1.1.0.tgz", + "integrity": "sha512-y0m1JoUZSlPAjXVtPPW70aZWfIL/dSP7AFkRnniLCrK/8MDKog3TySTBmckD+RObVxH0v4Tox67+F14PdED2oQ==" }, - "node_modules/web3-core-method/node_modules/web3-core-helpers": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/web3-core-helpers/-/web3-core-helpers-1.10.0.tgz", - "integrity": "sha512-pIxAzFDS5vnbXvfvLSpaA1tfRykAe9adw43YCKsEYQwH0gCLL0kMLkaCX3q+Q8EVmAh+e1jWL/nl9U0de1+++g==", + "node_modules/shebang-command": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", + "integrity": "sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg==", "dependencies": { - "web3-eth-iban": "1.10.0", - "web3-utils": "1.10.0" + "shebang-regex": "^1.0.0" }, "engines": { - "node": ">=8.0.0" + "node": ">=0.10.0" } }, - "node_modules/web3-core-method/node_modules/web3-core-promievent": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/web3-core-promievent/-/web3-core-promievent-1.10.0.tgz", - "integrity": "sha512-68N7k5LWL5R38xRaKFrTFT2pm2jBNFaM4GioS00YjAKXRQ3KjmhijOMG3TICz6Aa5+6GDWYelDNx21YAeZ4YTg==", - "dependencies": { - "eventemitter3": "4.0.4" - }, + "node_modules/shebang-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", + "integrity": "sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ==", "engines": { - "node": ">=8.0.0" + "node": ">=0.10.0" } }, - "node_modules/web3-core-method/node_modules/web3-eth-iban": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/web3-eth-iban/-/web3-eth-iban-1.10.0.tgz", - "integrity": "sha512-0l+SP3IGhInw7Q20LY3IVafYEuufo4Dn75jAHT7c2aDJsIolvf2Lc6ugHkBajlwUneGfbRQs/ccYPQ9JeMUbrg==", + "node_modules/side-channel": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", + "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", "dependencies": { - "bn.js": "^5.2.1", - "web3-utils": "1.10.0" + "call-bind": "^1.0.0", + "get-intrinsic": "^1.0.2", + "object-inspect": "^1.9.0" }, - "engines": { - "node": ">=8.0.0" + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/web3-core-promievent": { - "version": "1.8.2", - "resolved": "https://registry.npmjs.org/web3-core-promievent/-/web3-core-promievent-1.8.2.tgz", - "integrity": "sha512-nvkJWDVgoOSsolJldN33tKW6bKKRJX3MCPDYMwP5SUFOA/mCzDEoI88N0JFofDTXkh1k7gOqp1pvwi9heuaxGg==", - "dev": true, + "node_modules/signal-exit": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", + "devOptional": true + }, + "node_modules/simple-concat": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/simple-concat/-/simple-concat-1.0.1.tgz", + "integrity": "sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/simple-update-notifier": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/simple-update-notifier/-/simple-update-notifier-1.0.7.tgz", + "integrity": "sha512-BBKgR84BJQJm6WjWFMHgLVuo61FBDSj1z/xSFUIozqO6wO7ii0JxCqlIud7Enr/+LhlbNI0whErq96P2qHNWew==", "dependencies": { - "eventemitter3": "4.0.4" + "semver": "~7.0.0" }, "engines": { - "node": ">=8.0.0" + "node": ">=8.10.0" } }, - "node_modules/web3-core-promievent/node_modules/eventemitter3": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.4.tgz", - "integrity": "sha512-rlaVLnVxtxvoyLsQQFBx53YmXHDxRIzzTLbdfxqi4yocpSjAxXwkU0cScM5JgSKMqEhrZpnvQ2D9gjylR0AimQ==", - "dev": true + "node_modules/simple-update-notifier/node_modules/semver": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.0.0.tgz", + "integrity": "sha512-+GB6zVA9LWh6zovYQLALHwv5rb2PHGlJi3lfiqIHxR0uuwCgefcOJc59v9fv1w8GbStwxuuqqAjI9NMAOOgq1A==", + "bin": { + "semver": "bin/semver.js" + } }, - "node_modules/web3-core-requestmanager": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/web3-core-requestmanager/-/web3-core-requestmanager-1.10.0.tgz", - "integrity": "sha512-3z/JKE++Os62APml4dvBM+GAuId4h3L9ckUrj7ebEtS2AR0ixyQPbrBodgL91Sv7j7cQ3Y+hllaluqjguxvSaQ==", - "dependencies": { - "util": "^0.12.5", - "web3-core-helpers": "1.10.0", - "web3-providers-http": "1.10.0", - "web3-providers-ipc": "1.10.0", - "web3-providers-ws": "1.10.0" - }, + "node_modules/slash": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-2.0.0.tgz", + "integrity": "sha512-ZYKh3Wh2z1PpEXWr0MpSBZ0V6mZHAQfYevttO11c51CaWjGTaadiKZ+wVt1PbMlDV5qhMFslpZCemhwOK7C89A==", "engines": { - "node": ">=8.0.0" + "node": ">=6" } }, - "node_modules/web3-core-requestmanager/node_modules/web3-core-helpers": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/web3-core-helpers/-/web3-core-helpers-1.10.0.tgz", - "integrity": "sha512-pIxAzFDS5vnbXvfvLSpaA1tfRykAe9adw43YCKsEYQwH0gCLL0kMLkaCX3q+Q8EVmAh+e1jWL/nl9U0de1+++g==", + "node_modules/slice-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz", + "integrity": "sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==", + "dev": true, "dependencies": { - "web3-eth-iban": "1.10.0", - "web3-utils": "1.10.0" + "ansi-styles": "^4.0.0", + "astral-regex": "^2.0.0", + "is-fullwidth-code-point": "^3.0.0" }, "engines": { - "node": ">=8.0.0" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/slice-ansi?sponsor=1" } }, - "node_modules/web3-core-requestmanager/node_modules/web3-eth-iban": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/web3-eth-iban/-/web3-eth-iban-1.10.0.tgz", - "integrity": "sha512-0l+SP3IGhInw7Q20LY3IVafYEuufo4Dn75jAHT7c2aDJsIolvf2Lc6ugHkBajlwUneGfbRQs/ccYPQ9JeMUbrg==", + "node_modules/snake-case": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/snake-case/-/snake-case-2.1.0.tgz", + "integrity": "sha512-FMR5YoPFwOLuh4rRz92dywJjyKYZNLpMn1R5ujVpIYkbA9p01fq8RMg0FkO4M+Yobt4MjHeLTJVm5xFFBHSV2Q==", "dependencies": { - "bn.js": "^5.2.1", - "web3-utils": "1.10.0" - }, - "engines": { - "node": ">=8.0.0" + "no-case": "^2.2.0" } }, - "node_modules/web3-core-subscriptions": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/web3-core-subscriptions/-/web3-core-subscriptions-1.10.0.tgz", - "integrity": "sha512-HGm1PbDqsxejI075gxBc5OSkwymilRWZufIy9zEpnWKNmfbuv5FfHgW1/chtJP6aP3Uq2vHkvTDl3smQBb8l+g==", + "node_modules/sol-merger": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/sol-merger/-/sol-merger-4.4.0.tgz", + "integrity": "sha512-eYlgsVAeTPiIpLwRCnu8vdhAI40mt8I9BAnwdHazF+8ggWd0EuucQYxs4v+GyjC/5cmCfPMJ55T37tgk/zXqSg==", "dependencies": { - "eventemitter3": "4.0.4", - "web3-core-helpers": "1.10.0" + "antlr4ts": "^0.5.0-alpha.4", + "cli-color": "^2.0.3", + "commander": "^4.0.1", + "debug": "^4.3.4", + "fs-extra": "^10.0.0", + "glob": "^7.1.7", + "strip-json-comments": "^3.0.1" + }, + "bin": { + "sol-merger": "dist/bin/sol-merger.js" }, "engines": { - "node": ">=8.0.0" + "node": ">=14.0.0" } }, - "node_modules/web3-core-subscriptions/node_modules/eventemitter3": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.4.tgz", - "integrity": "sha512-rlaVLnVxtxvoyLsQQFBx53YmXHDxRIzzTLbdfxqi4yocpSjAxXwkU0cScM5JgSKMqEhrZpnvQ2D9gjylR0AimQ==" - }, - "node_modules/web3-core-subscriptions/node_modules/web3-core-helpers": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/web3-core-helpers/-/web3-core-helpers-1.10.0.tgz", - "integrity": "sha512-pIxAzFDS5vnbXvfvLSpaA1tfRykAe9adw43YCKsEYQwH0gCLL0kMLkaCX3q+Q8EVmAh+e1jWL/nl9U0de1+++g==", + "node_modules/sol-merger/node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", "dependencies": { - "web3-eth-iban": "1.10.0", - "web3-utils": "1.10.0" - }, + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/sol-merger/node_modules/commander": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz", + "integrity": "sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==", "engines": { - "node": ">=8.0.0" + "node": ">= 6" } }, - "node_modules/web3-core-subscriptions/node_modules/web3-eth-iban": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/web3-eth-iban/-/web3-eth-iban-1.10.0.tgz", - "integrity": "sha512-0l+SP3IGhInw7Q20LY3IVafYEuufo4Dn75jAHT7c2aDJsIolvf2Lc6ugHkBajlwUneGfbRQs/ccYPQ9JeMUbrg==", + "node_modules/sol-merger/node_modules/fs-extra": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz", + "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==", "dependencies": { - "bn.js": "^5.2.1", - "web3-utils": "1.10.0" + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" }, "engines": { - "node": ">=8.0.0" + "node": ">=12" } }, - "node_modules/web3-core/node_modules/@types/node": { - "version": "12.20.55", - "resolved": "https://registry.npmjs.org/@types/node/-/node-12.20.55.tgz", - "integrity": "sha512-J8xLz7q2OFulZ2cyGTLE1TbbZcjpno7FaN6zdJNrgAdrJ+DZzh/uFR6YrTb4C+nXakvud8Q4+rbhoIWlYQbUFQ==" - }, - "node_modules/web3-core/node_modules/web3-core-helpers": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/web3-core-helpers/-/web3-core-helpers-1.10.0.tgz", - "integrity": "sha512-pIxAzFDS5vnbXvfvLSpaA1tfRykAe9adw43YCKsEYQwH0gCLL0kMLkaCX3q+Q8EVmAh+e1jWL/nl9U0de1+++g==", + "node_modules/sol-merger/node_modules/glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", "dependencies": { - "web3-eth-iban": "1.10.0", - "web3-utils": "1.10.0" + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" }, "engines": { - "node": ">=8.0.0" + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/web3-core/node_modules/web3-eth-iban": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/web3-eth-iban/-/web3-eth-iban-1.10.0.tgz", - "integrity": "sha512-0l+SP3IGhInw7Q20LY3IVafYEuufo4Dn75jAHT7c2aDJsIolvf2Lc6ugHkBajlwUneGfbRQs/ccYPQ9JeMUbrg==", + "node_modules/sol-merger/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", "dependencies": { - "bn.js": "^5.2.1", - "web3-utils": "1.10.0" + "brace-expansion": "^1.1.7" }, "engines": { - "node": ">=8.0.0" + "node": "*" } }, - "node_modules/web3-eth": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/web3-eth/-/web3-eth-1.10.0.tgz", - "integrity": "sha512-Z5vT6slNMLPKuwRyKGbqeGYC87OAy8bOblaqRTgg94CXcn/mmqU7iPIlG4506YdcdK3x6cfEDG7B6w+jRxypKA==", + "node_modules/sol2uml": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/sol2uml/-/sol2uml-2.2.0.tgz", + "integrity": "sha512-JMBvn3ZMT/1egoZjheM4Mh9gQudrlVjFZ1VS0gjQ/eluITT08U6V438Jyku28OuXz42aXNbGS80JuRZo0J7pLg==", + "optional": true, "dependencies": { - "web3-core": "1.10.0", - "web3-core-helpers": "1.10.0", - "web3-core-method": "1.10.0", - "web3-core-subscriptions": "1.10.0", - "web3-eth-abi": "1.10.0", - "web3-eth-accounts": "1.10.0", - "web3-eth-contract": "1.10.0", - "web3-eth-ens": "1.10.0", - "web3-eth-iban": "1.10.0", - "web3-eth-personal": "1.10.0", - "web3-net": "1.10.0", - "web3-utils": "1.10.0" + "@aduh95/viz.js": "^3.7.0", + "@solidity-parser/parser": "^0.14.3", + "axios": "^0.27.2", + "commander": "^9.4.0", + "convert-svg-to-png": "^0.6.4", + "debug": "^4.3.4", + "ethers": "^5.6.9", + "js-graph-algorithms": "^1.0.18", + "klaw": "^4.0.1" }, - "engines": { - "node": ">=8.0.0" + "bin": { + "sol2uml": "lib/sol2uml.js" } }, - "node_modules/web3-eth-abi": { - "version": "1.8.2", - "resolved": "https://registry.npmjs.org/web3-eth-abi/-/web3-eth-abi-1.8.2.tgz", - "integrity": "sha512-Om9g3kaRNjqiNPAgKwGT16y+ZwtBzRe4ZJFGjLiSs6v5I7TPNF+rRMWuKnR6jq0azQZDj6rblvKFMA49/k48Og==", - "dev": true, + "node_modules/sol2uml/node_modules/axios": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/axios/-/axios-0.27.2.tgz", + "integrity": "sha512-t+yRIyySRTp/wua5xEr+z1q60QmLq8ABsS5O9Me1AsE5dfKqgnCFzwiCZZ/cGNd1lq4/7akDWMxdhVlucjmnOQ==", + "optional": true, "dependencies": { - "@ethersproject/abi": "^5.6.3", - "web3-utils": "1.8.2" - }, + "follow-redirects": "^1.14.9", + "form-data": "^4.0.0" + } + }, + "node_modules/sol2uml/node_modules/commander": { + "version": "9.5.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-9.5.0.tgz", + "integrity": "sha512-KRs7WVDKg86PWiuAqhDrAQnTXZKraVcCc6vFdL14qrZ/DcWwuRo7VoiYXalXO7S5GKpqYiVEwCbgFDfxNHKJBQ==", + "optional": true, "engines": { - "node": ">=8.0.0" + "node": "^12.20.0 || >=14" } }, - "node_modules/web3-eth-abi/node_modules/web3-utils": { - "version": "1.8.2", - "resolved": "https://registry.npmjs.org/web3-utils/-/web3-utils-1.8.2.tgz", - "integrity": "sha512-v7j6xhfLQfY7xQDrUP0BKbaNrmZ2/+egbqP9q3KYmOiPpnvAfol+32slgL0WX/5n8VPvKCK5EZ1HGrAVICSToA==", - "dev": true, + "node_modules/sol2uml/node_modules/form-data": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz", + "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==", + "optional": true, "dependencies": { - "bn.js": "^5.2.1", - "ethereum-bloom-filters": "^1.0.6", - "ethereumjs-util": "^7.1.0", - "ethjs-unit": "0.1.6", - "number-to-bn": "1.7.0", - "randombytes": "^2.1.0", - "utf8": "3.0.0" + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "mime-types": "^2.1.12" }, "engines": { - "node": ">=8.0.0" + "node": ">= 6" } }, - "node_modules/web3-eth-accounts": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/web3-eth-accounts/-/web3-eth-accounts-1.10.0.tgz", - "integrity": "sha512-wiq39Uc3mOI8rw24wE2n15hboLE0E9BsQLdlmsL4Zua9diDS6B5abXG0XhFcoNsXIGMWXVZz4TOq3u4EdpXF/Q==", + "node_modules/sol2uml/node_modules/klaw": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/klaw/-/klaw-4.1.0.tgz", + "integrity": "sha512-1zGZ9MF9H22UnkpVeuaGKOjfA2t6WrfdrJmGjy16ykcjnKQDmHVX+KI477rpbGevz/5FD4MC3xf1oxylBgcaQw==", + "optional": true, + "engines": { + "node": ">=14.14.0" + } + }, + "node_modules/solc": { + "version": "0.8.21", + "resolved": "https://registry.npmjs.org/solc/-/solc-0.8.21.tgz", + "integrity": "sha512-N55ogy2dkTRwiONbj4e6wMZqUNaLZkiRcjGyeafjLYzo/tf/IvhHY5P5wpe+H3Fubh9idu071i8eOGO31s1ylg==", "dependencies": { - "@ethereumjs/common": "2.5.0", - "@ethereumjs/tx": "3.3.2", - "eth-lib": "0.2.8", - "ethereumjs-util": "^7.1.5", - "scrypt-js": "^3.0.1", - "uuid": "^9.0.0", - "web3-core": "1.10.0", - "web3-core-helpers": "1.10.0", - "web3-core-method": "1.10.0", - "web3-utils": "1.10.0" + "command-exists": "^1.2.8", + "commander": "^8.1.0", + "follow-redirects": "^1.12.1", + "js-sha3": "0.8.0", + "memorystream": "^0.3.1", + "semver": "^5.5.0", + "tmp": "0.0.33" + }, + "bin": { + "solcjs": "solc.js" }, "engines": { - "node": ">=8.0.0" + "node": ">=10.0.0" } }, - "node_modules/web3-eth-accounts/node_modules/@ethereumjs/common": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/@ethereumjs/common/-/common-2.5.0.tgz", - "integrity": "sha512-DEHjW6e38o+JmB/NO3GZBpW4lpaiBpkFgXF6jLcJ6gETBYpEyaA5nTimsWBUJR3Vmtm/didUEbNjajskugZORg==", - "dependencies": { - "crc-32": "^1.2.0", - "ethereumjs-util": "^7.1.1" + "node_modules/solc/node_modules/commander": { + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-8.3.0.tgz", + "integrity": "sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==", + "engines": { + "node": ">= 12" } }, - "node_modules/web3-eth-accounts/node_modules/@ethereumjs/tx": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/@ethereumjs/tx/-/tx-3.3.2.tgz", - "integrity": "sha512-6AaJhwg4ucmwTvw/1qLaZUX5miWrwZ4nLOUsKyb/HtzS3BMw/CasKhdi1ims9mBKeK9sOJCH4qGKOBGyJCeeog==", + "node_modules/solc/node_modules/semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "bin": { + "semver": "bin/semver" + } + }, + "node_modules/solidity-ast": { + "version": "0.4.49", + "resolved": "https://registry.npmjs.org/solidity-ast/-/solidity-ast-0.4.49.tgz", + "integrity": "sha512-Pr5sCAj1SFqzwFZw1HPKSq0PehlQNdM8GwKyAVYh2DOn7/cCK8LUKD1HeHnKtTgBW7hi9h4nnnan7hpAg5RhWQ==", + "dev": true + }, + "node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/source-map-support": { + "version": "0.5.21", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", + "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", "dependencies": { - "@ethereumjs/common": "^2.5.0", - "ethereumjs-util": "^7.1.2" + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" } }, - "node_modules/web3-eth-accounts/node_modules/bn.js": { - "version": "4.12.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==" + "node_modules/spark-md5": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/spark-md5/-/spark-md5-3.0.2.tgz", + "integrity": "sha512-wcFzz9cDfbuqe0FZzfi2or1sgyIrsDwmPwfZC4hiNidPdPINjeUwNfv5kldczoEAcjl9Y1L3SM7Uz2PUEQzxQw==", + "optional": true }, - "node_modules/web3-eth-accounts/node_modules/eth-lib": { - "version": "0.2.8", - "resolved": "https://registry.npmjs.org/eth-lib/-/eth-lib-0.2.8.tgz", - "integrity": "sha512-ArJ7x1WcWOlSpzdoTBX8vkwlkSQ85CjjifSZtV4co64vWxSV8geWfPI9x4SVYu3DSxnX4yWFVTtGL+j9DUFLNw==", + "node_modules/spdx-correct": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.1.tgz", + "integrity": "sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w==", "dependencies": { - "bn.js": "^4.11.6", - "elliptic": "^6.4.0", - "xhr-request-promise": "^0.1.2" + "spdx-expression-parse": "^3.0.0", + "spdx-license-ids": "^3.0.0" } }, - "node_modules/web3-eth-accounts/node_modules/uuid": { - "version": "9.0.0", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.0.tgz", - "integrity": "sha512-MXcSTerfPa4uqyzStbRoTgt5XIe3x5+42+q1sDuy3R5MDk66URdLMOZe5aPX/SQd+kuYAh0FdP/pO28IkQyTeg==", - "bin": { - "uuid": "dist/bin/uuid" + "node_modules/spdx-exceptions": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz", + "integrity": "sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==" + }, + "node_modules/spdx-expression-parse": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz", + "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==", + "dependencies": { + "spdx-exceptions": "^2.1.0", + "spdx-license-ids": "^3.0.0" } }, - "node_modules/web3-eth-accounts/node_modules/web3-core-helpers": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/web3-core-helpers/-/web3-core-helpers-1.10.0.tgz", - "integrity": "sha512-pIxAzFDS5vnbXvfvLSpaA1tfRykAe9adw43YCKsEYQwH0gCLL0kMLkaCX3q+Q8EVmAh+e1jWL/nl9U0de1+++g==", + "node_modules/spdx-license-ids": { + "version": "3.0.12", + "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.12.tgz", + "integrity": "sha512-rr+VVSXtRhO4OHbXUiAF7xW3Bo9DuuF6C5jH+q/x15j2jniycgKbxU09Hr0WqlSLUs4i4ltHGXqTe7VHclYWyA==" + }, + "node_modules/split-ca": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/split-ca/-/split-ca-1.0.1.tgz", + "integrity": "sha512-Q5thBSxp5t8WPTTJQS59LrGqOZqOsrhDGDVm8azCqIBjSBd7nd9o2PM+mDulQQkh8h//4U6hFZnc/mul8t5pWQ==" + }, + "node_modules/sprintf-js": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", + "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==" + }, + "node_modules/ssh2": { + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/ssh2/-/ssh2-1.11.0.tgz", + "integrity": "sha512-nfg0wZWGSsfUe/IBJkXVll3PEZ//YH2guww+mP88gTpuSU4FtZN7zu9JoeTGOyCNx2dTDtT9fOpWwlzyj4uOOw==", + "hasInstallScript": true, "dependencies": { - "web3-eth-iban": "1.10.0", - "web3-utils": "1.10.0" + "asn1": "^0.2.4", + "bcrypt-pbkdf": "^1.0.2" }, "engines": { - "node": ">=8.0.0" + "node": ">=10.16.0" + }, + "optionalDependencies": { + "cpu-features": "~0.0.4", + "nan": "^2.16.0" } }, - "node_modules/web3-eth-accounts/node_modules/web3-eth-iban": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/web3-eth-iban/-/web3-eth-iban-1.10.0.tgz", - "integrity": "sha512-0l+SP3IGhInw7Q20LY3IVafYEuufo4Dn75jAHT7c2aDJsIolvf2Lc6ugHkBajlwUneGfbRQs/ccYPQ9JeMUbrg==", + "node_modules/sshpk": { + "version": "1.17.0", + "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.17.0.tgz", + "integrity": "sha512-/9HIEs1ZXGhSPE8X6Ccm7Nam1z8KcoCqPdI7ecm1N33EzAetWahvQWVqLZtaZQ+IDKX4IyA2o0gBzqIMkAagHQ==", "dependencies": { - "bn.js": "^5.2.1", - "web3-utils": "1.10.0" + "asn1": "~0.2.3", + "assert-plus": "^1.0.0", + "bcrypt-pbkdf": "^1.0.0", + "dashdash": "^1.12.0", + "ecc-jsbn": "~0.1.1", + "getpass": "^0.1.1", + "jsbn": "~0.1.0", + "safer-buffer": "^2.0.2", + "tweetnacl": "~0.14.0" + }, + "bin": { + "sshpk-conv": "bin/sshpk-conv", + "sshpk-sign": "bin/sshpk-sign", + "sshpk-verify": "bin/sshpk-verify" }, "engines": { - "node": ">=8.0.0" + "node": ">=0.10.0" } }, - "node_modules/web3-eth-accounts/node_modules/web3-eth-iban/node_modules/bn.js": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.2.1.tgz", - "integrity": "sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ==" + "node_modules/sshpk/node_modules/tweetnacl": { + "version": "0.14.5", + "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", + "integrity": "sha512-KXXFFdAbFXY4geFIwoyNK+f5Z1b7swfXABfL7HXCmoIWMKU3dmS26672A4EeQtDzLKy7SXmfBu51JolvEKwtGA==" }, - "node_modules/web3-eth-contract": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/web3-eth-contract/-/web3-eth-contract-1.10.0.tgz", - "integrity": "sha512-MIC5FOzP/+2evDksQQ/dpcXhSqa/2hFNytdl/x61IeWxhh6vlFeSjq0YVTAyIzdjwnL7nEmZpjfI6y6/Ufhy7w==", + "node_modules/stacktrace-parser": { + "version": "0.1.10", + "resolved": "https://registry.npmjs.org/stacktrace-parser/-/stacktrace-parser-0.1.10.tgz", + "integrity": "sha512-KJP1OCML99+8fhOHxwwzyWrlUuVX5GQ0ZpJTd1DFXhdkrvg1szxfHhawXUZ3g9TkXORQd4/WG68jMlQZ2p8wlg==", "dependencies": { - "@types/bn.js": "^5.1.1", - "web3-core": "1.10.0", - "web3-core-helpers": "1.10.0", - "web3-core-method": "1.10.0", - "web3-core-promievent": "1.10.0", - "web3-core-subscriptions": "1.10.0", - "web3-eth-abi": "1.10.0", - "web3-utils": "1.10.0" + "type-fest": "^0.7.1" }, "engines": { - "node": ">=8.0.0" + "node": ">=6" } }, - "node_modules/web3-eth-contract/node_modules/eventemitter3": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.4.tgz", - "integrity": "sha512-rlaVLnVxtxvoyLsQQFBx53YmXHDxRIzzTLbdfxqi4yocpSjAxXwkU0cScM5JgSKMqEhrZpnvQ2D9gjylR0AimQ==" + "node_modules/stacktrace-parser/node_modules/type-fest": { + "version": "0.7.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.7.1.tgz", + "integrity": "sha512-Ne2YiiGN8bmrmJJEuTWTLJR32nh/JdL1+PSicowtNb0WFpn59GK8/lfD61bVtzguz7b3PBt74nxpv/Pw5po5Rg==", + "engines": { + "node": ">=8" + } }, - "node_modules/web3-eth-contract/node_modules/web3-core-helpers": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/web3-core-helpers/-/web3-core-helpers-1.10.0.tgz", - "integrity": "sha512-pIxAzFDS5vnbXvfvLSpaA1tfRykAe9adw43YCKsEYQwH0gCLL0kMLkaCX3q+Q8EVmAh+e1jWL/nl9U0de1+++g==", - "dependencies": { - "web3-eth-iban": "1.10.0", - "web3-utils": "1.10.0" - }, + "node_modules/statuses": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", + "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", "engines": { - "node": ">=8.0.0" + "node": ">= 0.8" } }, - "node_modules/web3-eth-contract/node_modules/web3-core-promievent": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/web3-core-promievent/-/web3-core-promievent-1.10.0.tgz", - "integrity": "sha512-68N7k5LWL5R38xRaKFrTFT2pm2jBNFaM4GioS00YjAKXRQ3KjmhijOMG3TICz6Aa5+6GDWYelDNx21YAeZ4YTg==", - "dependencies": { - "eventemitter3": "4.0.4" - }, + "node_modules/stealthy-require": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/stealthy-require/-/stealthy-require-1.1.1.tgz", + "integrity": "sha512-ZnWpYnYugiOVEY5GkcuJK1io5V8QmNYChG62gSit9pQVGErXtrKuPC55ITaVSukmMta5qpMU7vqLt2Lnni4f/g==", "engines": { - "node": ">=8.0.0" + "node": ">=0.10.0" } }, - "node_modules/web3-eth-contract/node_modules/web3-eth-abi": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/web3-eth-abi/-/web3-eth-abi-1.10.0.tgz", - "integrity": "sha512-cwS+qRBWpJ43aI9L3JS88QYPfFcSJJ3XapxOQ4j40v6mk7ATpA8CVK1vGTzpihNlOfMVRBkR95oAj7oL6aiDOg==", - "dependencies": { - "@ethersproject/abi": "^5.6.3", - "web3-utils": "1.10.0" - }, + "node_modules/streamsearch": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/streamsearch/-/streamsearch-1.1.0.tgz", + "integrity": "sha512-Mcc5wHehp9aXz1ax6bZUyY5afg9u2rv5cqQI3mRrYkGC8rW2hM02jWuwjtL++LS5qinSyhj2QfLyNsuc+VsExg==", "engines": { - "node": ">=8.0.0" + "node": ">=10.0.0" } }, - "node_modules/web3-eth-contract/node_modules/web3-eth-iban": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/web3-eth-iban/-/web3-eth-iban-1.10.0.tgz", - "integrity": "sha512-0l+SP3IGhInw7Q20LY3IVafYEuufo4Dn75jAHT7c2aDJsIolvf2Lc6ugHkBajlwUneGfbRQs/ccYPQ9JeMUbrg==", - "dependencies": { - "bn.js": "^5.2.1", - "web3-utils": "1.10.0" - }, + "node_modules/strict-uri-encode": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/strict-uri-encode/-/strict-uri-encode-1.1.0.tgz", + "integrity": "sha512-R3f198pcvnB+5IpnBlRkphuE9n46WyVl8I39W/ZUTZLz4nqSP/oLYUrcnJrw462Ds8he4YKMov2efsTIw1BDGQ==", "engines": { - "node": ">=8.0.0" + "node": ">=0.10.0" } }, - "node_modules/web3-eth-ens": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/web3-eth-ens/-/web3-eth-ens-1.10.0.tgz", - "integrity": "sha512-3hpGgzX3qjgxNAmqdrC2YUQMTfnZbs4GeLEmy8aCWziVwogbuqQZ+Gzdfrym45eOZodk+lmXyLuAdqkNlvkc1g==", + "node_modules/string_decoder": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", + "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", "dependencies": { - "content-hash": "^2.5.2", - "eth-ens-namehash": "2.0.8", - "web3-core": "1.10.0", - "web3-core-helpers": "1.10.0", - "web3-core-promievent": "1.10.0", - "web3-eth-abi": "1.10.0", - "web3-eth-contract": "1.10.0", - "web3-utils": "1.10.0" - }, - "engines": { - "node": ">=8.0.0" + "safe-buffer": "~5.2.0" } }, - "node_modules/web3-eth-ens/node_modules/eventemitter3": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.4.tgz", - "integrity": "sha512-rlaVLnVxtxvoyLsQQFBx53YmXHDxRIzzTLbdfxqi4yocpSjAxXwkU0cScM5JgSKMqEhrZpnvQ2D9gjylR0AimQ==" + "node_modules/string-format": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/string-format/-/string-format-2.0.0.tgz", + "integrity": "sha512-bbEs3scLeYNXLecRRuk6uJxdXUSj6le/8rNPHChIJTn2V79aXVTR1EH2OH5zLKKoz0V02fOUKZZcw01pLUShZA==", + "dev": true }, - "node_modules/web3-eth-ens/node_modules/web3-core-helpers": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/web3-core-helpers/-/web3-core-helpers-1.10.0.tgz", - "integrity": "sha512-pIxAzFDS5vnbXvfvLSpaA1tfRykAe9adw43YCKsEYQwH0gCLL0kMLkaCX3q+Q8EVmAh+e1jWL/nl9U0de1+++g==", + "node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", "dependencies": { - "web3-eth-iban": "1.10.0", - "web3-utils": "1.10.0" + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" }, "engines": { - "node": ">=8.0.0" + "node": ">=8" } }, - "node_modules/web3-eth-ens/node_modules/web3-core-promievent": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/web3-core-promievent/-/web3-core-promievent-1.10.0.tgz", - "integrity": "sha512-68N7k5LWL5R38xRaKFrTFT2pm2jBNFaM4GioS00YjAKXRQ3KjmhijOMG3TICz6Aa5+6GDWYelDNx21YAeZ4YTg==", - "dependencies": { - "eventemitter3": "4.0.4" - }, + "node_modules/string-width/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", "engines": { - "node": ">=8.0.0" + "node": ">=8" } }, - "node_modules/web3-eth-ens/node_modules/web3-eth-abi": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/web3-eth-abi/-/web3-eth-abi-1.10.0.tgz", - "integrity": "sha512-cwS+qRBWpJ43aI9L3JS88QYPfFcSJJ3XapxOQ4j40v6mk7ATpA8CVK1vGTzpihNlOfMVRBkR95oAj7oL6aiDOg==", + "node_modules/string-width/node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", "dependencies": { - "@ethersproject/abi": "^5.6.3", - "web3-utils": "1.10.0" + "ansi-regex": "^5.0.1" }, "engines": { - "node": ">=8.0.0" + "node": ">=8" } }, - "node_modules/web3-eth-ens/node_modules/web3-eth-iban": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/web3-eth-iban/-/web3-eth-iban-1.10.0.tgz", - "integrity": "sha512-0l+SP3IGhInw7Q20LY3IVafYEuufo4Dn75jAHT7c2aDJsIolvf2Lc6ugHkBajlwUneGfbRQs/ccYPQ9JeMUbrg==", + "node_modules/string.prototype.trimend": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.5.tgz", + "integrity": "sha512-I7RGvmjV4pJ7O3kdf+LXFpVfdNOxtCW/2C8f6jNiW4+PQchwxkCDzlk1/7p+Wl4bqFIZeF47qAHXLuHHWKAxog==", "dependencies": { - "bn.js": "^5.2.1", - "web3-utils": "1.10.0" + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.19.5" }, - "engines": { - "node": ">=8.0.0" + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/web3-eth-iban": { - "version": "1.8.2", - "resolved": "https://registry.npmjs.org/web3-eth-iban/-/web3-eth-iban-1.8.2.tgz", - "integrity": "sha512-h3vNblDWkWMuYx93Q27TAJz6lhzpP93EiC3+45D6xoz983p6si773vntoQ+H+5aZhwglBtoiBzdh7PSSOnP/xQ==", - "dev": true, + "node_modules/string.prototype.trimstart": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.5.tgz", + "integrity": "sha512-THx16TJCGlsN0o6dl2o6ncWUsdgnLRSA23rRE5pyGBw/mLr3Ej/R2LaqCtgP8VNMGZsvMWnf9ooZPyY2bHvUFg==", "dependencies": { - "bn.js": "^5.2.1", - "web3-utils": "1.8.2" + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.19.5" }, - "engines": { - "node": ">=8.0.0" + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/web3-eth-iban/node_modules/web3-utils": { - "version": "1.8.2", - "resolved": "https://registry.npmjs.org/web3-utils/-/web3-utils-1.8.2.tgz", - "integrity": "sha512-v7j6xhfLQfY7xQDrUP0BKbaNrmZ2/+egbqP9q3KYmOiPpnvAfol+32slgL0WX/5n8VPvKCK5EZ1HGrAVICSToA==", - "dev": true, + "node_modules/strip-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", + "integrity": "sha512-4XaJ2zQdCzROZDivEVIDPkcQn8LMFSa8kj8Gxb/Lnwzv9A8VctNZ+lfivC/sV3ivW8ElJTERXZoPBRrZKkNKow==", "dependencies": { - "bn.js": "^5.2.1", - "ethereum-bloom-filters": "^1.0.6", - "ethereumjs-util": "^7.1.0", - "ethjs-unit": "0.1.6", - "number-to-bn": "1.7.0", - "randombytes": "^2.1.0", - "utf8": "3.0.0" + "ansi-regex": "^3.0.0" }, "engines": { - "node": ">=8.0.0" + "node": ">=4" } }, - "node_modules/web3-eth-personal": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/web3-eth-personal/-/web3-eth-personal-1.10.0.tgz", - "integrity": "sha512-anseKn98w/d703eWq52uNuZi7GhQeVjTC5/svrBWEKob0WZ5kPdo+EZoFN0sp5a5ubbrk/E0xSl1/M5yORMtpg==", + "node_modules/strip-bom": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz", + "integrity": "sha512-kwrX1y7czp1E69n2ajbG65mIo9dqvJ+8aBQXOGVxqwvNbsXdFM6Lq37dLAY3mknUwru8CfcCbfOLL/gMo+fi3g==", "dependencies": { - "@types/node": "^12.12.6", - "web3-core": "1.10.0", - "web3-core-helpers": "1.10.0", - "web3-core-method": "1.10.0", - "web3-net": "1.10.0", - "web3-utils": "1.10.0" + "is-utf8": "^0.2.0" }, "engines": { - "node": ">=8.0.0" + "node": ">=0.10.0" } }, - "node_modules/web3-eth-personal/node_modules/@types/node": { - "version": "12.20.55", - "resolved": "https://registry.npmjs.org/@types/node/-/node-12.20.55.tgz", - "integrity": "sha512-J8xLz7q2OFulZ2cyGTLE1TbbZcjpno7FaN6zdJNrgAdrJ+DZzh/uFR6YrTb4C+nXakvud8Q4+rbhoIWlYQbUFQ==" + "node_modules/strip-dirs": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/strip-dirs/-/strip-dirs-2.1.0.tgz", + "integrity": "sha512-JOCxOeKLm2CAS73y/U4ZeZPTkE+gNVCzKt7Eox84Iej1LT/2pTWYpZKJuxwQpvX1LiZb1xokNR7RLfuBAa7T3g==", + "dependencies": { + "is-natural-number": "^4.0.1" + } }, - "node_modules/web3-eth-personal/node_modules/web3-core-helpers": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/web3-core-helpers/-/web3-core-helpers-1.10.0.tgz", - "integrity": "sha512-pIxAzFDS5vnbXvfvLSpaA1tfRykAe9adw43YCKsEYQwH0gCLL0kMLkaCX3q+Q8EVmAh+e1jWL/nl9U0de1+++g==", + "node_modules/strip-hex-prefix": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/strip-hex-prefix/-/strip-hex-prefix-1.0.0.tgz", + "integrity": "sha512-q8d4ue7JGEiVcypji1bALTos+0pWtyGlivAWyPuTkHzuTCJqrK9sWxYQZUq6Nq3cuyv3bm734IhHvHtGGURU6A==", "dependencies": { - "web3-eth-iban": "1.10.0", - "web3-utils": "1.10.0" + "is-hex-prefixed": "1.0.0" }, "engines": { - "node": ">=8.0.0" + "node": ">=6.5.0", + "npm": ">=3" } }, - "node_modules/web3-eth-personal/node_modules/web3-eth-iban": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/web3-eth-iban/-/web3-eth-iban-1.10.0.tgz", - "integrity": "sha512-0l+SP3IGhInw7Q20LY3IVafYEuufo4Dn75jAHT7c2aDJsIolvf2Lc6ugHkBajlwUneGfbRQs/ccYPQ9JeMUbrg==", - "dependencies": { - "bn.js": "^5.2.1", - "web3-utils": "1.10.0" - }, + "node_modules/strip-indent": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-2.0.0.tgz", + "integrity": "sha512-RsSNPLpq6YUL7QYy44RnPVTn/lcVZtb48Uof3X5JLbF4zD/Gs7ZFDv2HWol+leoQN2mT86LAzSshGfkTlSOpsA==", + "dev": true, "engines": { - "node": ">=8.0.0" + "node": ">=4" } }, - "node_modules/web3-eth/node_modules/web3-core-helpers": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/web3-core-helpers/-/web3-core-helpers-1.10.0.tgz", - "integrity": "sha512-pIxAzFDS5vnbXvfvLSpaA1tfRykAe9adw43YCKsEYQwH0gCLL0kMLkaCX3q+Q8EVmAh+e1jWL/nl9U0de1+++g==", - "dependencies": { - "web3-eth-iban": "1.10.0", - "web3-utils": "1.10.0" - }, + "node_modules/strip-json-comments": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", "engines": { - "node": ">=8.0.0" + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/web3-eth/node_modules/web3-eth-abi": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/web3-eth-abi/-/web3-eth-abi-1.10.0.tgz", - "integrity": "sha512-cwS+qRBWpJ43aI9L3JS88QYPfFcSJJ3XapxOQ4j40v6mk7ATpA8CVK1vGTzpihNlOfMVRBkR95oAj7oL6aiDOg==", + "node_modules/sturdy-websocket": { + "version": "0.1.12", + "resolved": "https://registry.npmjs.org/sturdy-websocket/-/sturdy-websocket-0.1.12.tgz", + "integrity": "sha512-PA7h8LdjaMoIlC5HAwLVzae4raGWgyroscV4oUpEiTtEFINcNa47/CKYT3e98o+FfsJgrclI2pYpaJrz0aaoew==", "dependencies": { - "@ethersproject/abi": "^5.6.3", - "web3-utils": "1.10.0" - }, - "engines": { - "node": ">=8.0.0" + "lodash.defaults": "^4.2.0" } }, - "node_modules/web3-eth/node_modules/web3-eth-iban": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/web3-eth-iban/-/web3-eth-iban-1.10.0.tgz", - "integrity": "sha512-0l+SP3IGhInw7Q20LY3IVafYEuufo4Dn75jAHT7c2aDJsIolvf2Lc6ugHkBajlwUneGfbRQs/ccYPQ9JeMUbrg==", + "node_modules/sublevel-pouchdb": { + "version": "7.3.1", + "resolved": "https://registry.npmjs.org/sublevel-pouchdb/-/sublevel-pouchdb-7.3.1.tgz", + "integrity": "sha512-n+4fK72F/ORdqPwoGgMGYeOrW2HaPpW9o9k80bT1B3Cim5BSvkKkr9WbWOWynni/GHkbCEdvLVFJL1ktosAdhQ==", + "optional": true, "dependencies": { - "bn.js": "^5.2.1", - "web3-utils": "1.10.0" - }, - "engines": { - "node": ">=8.0.0" + "inherits": "2.0.4", + "level-codec": "9.0.2", + "ltgt": "2.2.1", + "readable-stream": "1.1.14" } }, - "node_modules/web3-net": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/web3-net/-/web3-net-1.10.0.tgz", - "integrity": "sha512-NLH/N3IshYWASpxk4/18Ge6n60GEvWBVeM8inx2dmZJVmRI6SJIlUxbL8jySgiTn3MMZlhbdvrGo8fpUW7a1GA==", + "node_modules/sublevel-pouchdb/node_modules/isarray": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", + "integrity": "sha512-D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ==", + "optional": true + }, + "node_modules/sublevel-pouchdb/node_modules/readable-stream": { + "version": "1.1.14", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz", + "integrity": "sha512-+MeVjFf4L44XUkhM1eYbD8fyEsxcV81pqMSR5gblfcLCHfZvbrqy4/qYHE+/R5HoBUT11WV5O08Cr1n3YXkWVQ==", + "optional": true, "dependencies": { - "web3-core": "1.10.0", - "web3-core-method": "1.10.0", - "web3-utils": "1.10.0" - }, - "engines": { - "node": ">=8.0.0" + "core-util-is": "~1.0.0", + "inherits": "~2.0.1", + "isarray": "0.0.1", + "string_decoder": "~0.10.x" } }, - "node_modules/web3-provider-engine": { - "version": "16.0.3", - "resolved": "https://registry.npmjs.org/web3-provider-engine/-/web3-provider-engine-16.0.3.tgz", - "integrity": "sha512-Q3bKhGqLfMTdLvkd4TtkGYJHcoVQ82D1l8jTIwwuJp/sAp7VHnRYb9YJ14SW/69VMWoOhSpPLZV2tWb9V0WJoA==", + "node_modules/sublevel-pouchdb/node_modules/string_decoder": { + "version": "0.10.31", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", + "integrity": "sha512-ev2QzSzWPYmy9GuqfIVildA4OdcGLeFZQrq5ys6RtiuF+RQQiZWr8TZNyAcuVXyQRYfEO+MsoB/1BuQVhOJuoQ==", + "optional": true + }, + "node_modules/superstruct": { + "version": "0.14.2", + "resolved": "https://registry.npmjs.org/superstruct/-/superstruct-0.14.2.tgz", + "integrity": "sha512-nPewA6m9mR3d6k7WkZ8N8zpTWfenFH3q9pA2PkuiZxINr9DKB2+40wEQf0ixn8VaGuJ78AB6iWOtStI+/4FKZQ==" + }, + "node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dependencies": { - "@ethereumjs/tx": "^3.3.0", - "async": "^2.5.0", - "backoff": "^2.5.0", - "clone": "^2.0.0", - "cross-fetch": "^2.1.0", - "eth-block-tracker": "^4.4.2", - "eth-json-rpc-filters": "^4.2.1", - "eth-json-rpc-infura": "^5.1.0", - "eth-json-rpc-middleware": "^6.0.0", - "eth-rpc-errors": "^3.0.0", - "eth-sig-util": "^1.4.2", - "ethereumjs-block": "^1.2.2", - "ethereumjs-util": "^5.1.5", - "ethereumjs-vm": "^2.3.4", - "json-stable-stringify": "^1.0.1", - "promise-to-callback": "^1.0.0", - "readable-stream": "^2.2.9", - "request": "^2.85.0", - "semaphore": "^1.0.3", - "ws": "^5.1.1", - "xhr": "^2.2.0", - "xtend": "^4.0.1" + "has-flag": "^4.0.0" }, "engines": { - "node": ">=12.0.0" + "node": ">=8" } }, - "node_modules/web3-provider-engine/node_modules/@ethereumjs/common": { - "version": "2.6.5", - "resolved": "https://registry.npmjs.org/@ethereumjs/common/-/common-2.6.5.tgz", - "integrity": "sha512-lRyVQOeCDaIVtgfbowla32pzeDv2Obr8oR8Put5RdUBNRGr1VGPGQNGP6elWIpgK3YdpzqTOh4GyUGOureVeeA==", + "node_modules/swap-case": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/swap-case/-/swap-case-1.1.2.tgz", + "integrity": "sha512-BAmWG6/bx8syfc6qXPprof3Mn5vQgf5dwdUNJhsNqU9WdPt5P+ES/wQ5bxfijy8zwZgZZHslC3iAsxsuQMCzJQ==", "dependencies": { - "crc-32": "^1.2.0", - "ethereumjs-util": "^7.1.5" + "lower-case": "^1.1.1", + "upper-case": "^1.1.1" } }, - "node_modules/web3-provider-engine/node_modules/@ethereumjs/common/node_modules/ethereumjs-util": { - "version": "7.1.5", - "resolved": "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-7.1.5.tgz", - "integrity": "sha512-SDl5kKrQAudFBUe5OJM9Ac6WmMyYmXX/6sTmLZ3ffG2eY6ZIGBes3pEDxNN6V72WyOw4CPD5RomKdsa8DAAwLg==", + "node_modules/swarm-js": { + "version": "0.1.42", + "resolved": "https://registry.npmjs.org/swarm-js/-/swarm-js-0.1.42.tgz", + "integrity": "sha512-BV7c/dVlA3R6ya1lMlSSNPLYrntt0LUq4YMgy3iwpCIc6rZnS5W2wUoctarZ5pXlpKtxDDf9hNziEkcfrxdhqQ==", "dependencies": { - "@types/bn.js": "^5.1.0", - "bn.js": "^5.1.2", - "create-hash": "^1.1.2", - "ethereum-cryptography": "^0.1.3", - "rlp": "^2.2.4" + "bluebird": "^3.5.0", + "buffer": "^5.0.5", + "eth-lib": "^0.1.26", + "fs-extra": "^4.0.2", + "got": "^11.8.5", + "mime-types": "^2.1.16", + "mkdirp-promise": "^5.0.1", + "mock-fs": "^4.1.0", + "setimmediate": "^1.0.5", + "tar": "^4.0.2", + "xhr-request": "^1.0.1" + } + }, + "node_modules/swarm-js/node_modules/@szmarczak/http-timer": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-4.0.6.tgz", + "integrity": "sha512-4BAffykYOgO+5nzBWYwE3W90sBgLJoUPRWWcL8wlyiM8IB8ipJz3UMJ9KXQd1RKQXpKp8Tutn80HZtWsu2u76w==", + "dependencies": { + "defer-to-connect": "^2.0.0" }, "engines": { - "node": ">=10.0.0" + "node": ">=10" } }, - "node_modules/web3-provider-engine/node_modules/@ethereumjs/tx": { - "version": "3.5.2", - "resolved": "https://registry.npmjs.org/@ethereumjs/tx/-/tx-3.5.2.tgz", - "integrity": "sha512-gQDNJWKrSDGu2w7w0PzVXVBNMzb7wwdDOmOqczmhNjqFxFuIbhVJDwiGEnxFNC2/b8ifcZzY7MLcluizohRzNw==", + "node_modules/swarm-js/node_modules/buffer": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", + "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], "dependencies": { - "@ethereumjs/common": "^2.6.4", - "ethereumjs-util": "^7.1.5" + "base64-js": "^1.3.1", + "ieee754": "^1.1.13" } }, - "node_modules/web3-provider-engine/node_modules/@ethereumjs/tx/node_modules/ethereumjs-util": { - "version": "7.1.5", - "resolved": "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-7.1.5.tgz", - "integrity": "sha512-SDl5kKrQAudFBUe5OJM9Ac6WmMyYmXX/6sTmLZ3ffG2eY6ZIGBes3pEDxNN6V72WyOw4CPD5RomKdsa8DAAwLg==", - "dependencies": { - "@types/bn.js": "^5.1.0", - "bn.js": "^5.1.2", - "create-hash": "^1.1.2", - "ethereum-cryptography": "^0.1.3", - "rlp": "^2.2.4" - }, + "node_modules/swarm-js/node_modules/cacheable-lookup": { + "version": "5.0.4", + "resolved": "https://registry.npmjs.org/cacheable-lookup/-/cacheable-lookup-5.0.4.tgz", + "integrity": "sha512-2/kNscPhpcxrOigMZzbiWF7dz8ilhb/nIHU3EyZiXWXpeq/au8qJ8VhdftMkty3n7Gj6HIGalQG8oiBNB3AJgA==", "engines": { - "node": ">=10.0.0" + "node": ">=10.6.0" } }, - "node_modules/web3-provider-engine/node_modules/async": { - "version": "2.6.4", - "resolved": "https://registry.npmjs.org/async/-/async-2.6.4.tgz", - "integrity": "sha512-mzo5dfJYwAn29PeiJ0zvwTo04zj8HDJj0Mn8TD7sno7q12prdbnasKJHhkm2c1LgrhlJ0teaea8860oxi51mGA==", + "node_modules/swarm-js/node_modules/decompress-response": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-6.0.0.tgz", + "integrity": "sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==", "dependencies": { - "lodash": "^4.17.14" + "mimic-response": "^3.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/web3-provider-engine/node_modules/cross-fetch": { - "version": "2.2.6", - "resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-2.2.6.tgz", - "integrity": "sha512-9JZz+vXCmfKUZ68zAptS7k4Nu8e2qcibe7WVZYps7sAgk5R8GYTc+T1WR0v1rlP9HxgARmOX1UTIJZFytajpNA==", + "node_modules/swarm-js/node_modules/fs-extra": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-4.0.3.tgz", + "integrity": "sha512-q6rbdDd1o2mAnQreO7YADIxf/Whx4AHBiRf6d+/cVT8h44ss+lHgxf1FemcqDnQt9X3ct4McHr+JMGlYSsK7Cg==", "dependencies": { - "node-fetch": "^2.6.7", - "whatwg-fetch": "^2.0.4" + "graceful-fs": "^4.1.2", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" } }, - "node_modules/web3-provider-engine/node_modules/ethereum-cryptography": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-0.1.3.tgz", - "integrity": "sha512-w8/4x1SGGzc+tO97TASLja6SLd3fRIK2tLVcV2Gx4IB21hE19atll5Cq9o3d0ZmAYC/8aw0ipieTSiekAea4SQ==", + "node_modules/swarm-js/node_modules/got": { + "version": "11.8.6", + "resolved": "https://registry.npmjs.org/got/-/got-11.8.6.tgz", + "integrity": "sha512-6tfZ91bOr7bOXnK7PRDCGBLa1H4U080YHNaAQ2KsMGlLEzRbk44nsZF2E1IeRc3vtJHPVbKCYgdFbaGO2ljd8g==", "dependencies": { - "@types/pbkdf2": "^3.0.0", - "@types/secp256k1": "^4.0.1", - "blakejs": "^1.1.0", - "browserify-aes": "^1.2.0", - "bs58check": "^2.1.2", - "create-hash": "^1.2.0", - "create-hmac": "^1.1.7", - "hash.js": "^1.1.7", - "keccak": "^3.0.0", - "pbkdf2": "^3.0.17", - "randombytes": "^2.1.0", - "safe-buffer": "^5.1.2", - "scrypt-js": "^3.0.0", - "secp256k1": "^4.0.1", - "setimmediate": "^1.0.5" + "@sindresorhus/is": "^4.0.0", + "@szmarczak/http-timer": "^4.0.5", + "@types/cacheable-request": "^6.0.1", + "@types/responselike": "^1.0.0", + "cacheable-lookup": "^5.0.3", + "cacheable-request": "^7.0.2", + "decompress-response": "^6.0.0", + "http2-wrapper": "^1.0.0-beta.5.2", + "lowercase-keys": "^2.0.0", + "p-cancelable": "^2.0.0", + "responselike": "^2.0.0" + }, + "engines": { + "node": ">=10.19.0" + }, + "funding": { + "url": "https://github.com/sindresorhus/got?sponsor=1" } }, - "node_modules/web3-provider-engine/node_modules/ethereumjs-util": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-5.2.1.tgz", - "integrity": "sha512-v3kT+7zdyCm1HIqWlLNrHGqHGLpGYIhjeHxQjnDXjLT2FyGJDsd3LWMYUo7pAFRrk86CR3nUJfhC81CCoJNNGQ==", + "node_modules/swarm-js/node_modules/http2-wrapper": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/http2-wrapper/-/http2-wrapper-1.0.3.tgz", + "integrity": "sha512-V+23sDMr12Wnz7iTcDeJr3O6AIxlnvT/bmaAAAP/Xda35C90p9599p0F1eHR/N1KILWSoWVAiOMFjBBXaXSMxg==", "dependencies": { - "bn.js": "^4.11.0", - "create-hash": "^1.1.2", - "elliptic": "^6.5.2", - "ethereum-cryptography": "^0.1.3", - "ethjs-util": "^0.1.3", - "rlp": "^2.0.0", - "safe-buffer": "^5.1.1" + "quick-lru": "^5.1.1", + "resolve-alpn": "^1.0.0" + }, + "engines": { + "node": ">=10.19.0" } }, - "node_modules/web3-provider-engine/node_modules/ethereumjs-util/node_modules/bn.js": { - "version": "4.12.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==" - }, - "node_modules/web3-provider-engine/node_modules/readable-stream": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", - "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" + "node_modules/swarm-js/node_modules/jsonfile": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", + "integrity": "sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==", + "optionalDependencies": { + "graceful-fs": "^4.1.6" } }, - "node_modules/web3-provider-engine/node_modules/safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" - }, - "node_modules/web3-provider-engine/node_modules/string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dependencies": { - "safe-buffer": "~5.1.0" + "node_modules/swarm-js/node_modules/lowercase-keys": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-2.0.0.tgz", + "integrity": "sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==", + "engines": { + "node": ">=8" } }, - "node_modules/web3-provider-engine/node_modules/ws": { - "version": "5.2.3", - "resolved": "https://registry.npmjs.org/ws/-/ws-5.2.3.tgz", - "integrity": "sha512-jZArVERrMsKUatIdnLzqvcfydI85dvd/Fp1u/VOpfdDWQ4c9qWXe+VIeAbQ5FrDwciAkr+lzofXLz3Kuf26AOA==", - "dependencies": { - "async-limiter": "~1.0.0" + "node_modules/swarm-js/node_modules/mimic-response": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-3.1.0.tgz", + "integrity": "sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/web3-providers-http": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/web3-providers-http/-/web3-providers-http-1.10.0.tgz", - "integrity": "sha512-eNr965YB8a9mLiNrkjAWNAPXgmQWfpBfkkn7tpEFlghfww0u3I0tktMZiaToJVcL2+Xq+81cxbkpeWJ5XQDwOA==", - "dependencies": { - "abortcontroller-polyfill": "^1.7.3", - "cross-fetch": "^3.1.4", - "es6-promise": "^4.2.8", - "web3-core-helpers": "1.10.0" - }, + "node_modules/swarm-js/node_modules/p-cancelable": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-2.1.1.tgz", + "integrity": "sha512-BZOr3nRQHOntUjTrH8+Lh54smKHoHyur8We1V8DSMVrl5A2malOOwuJRnKRDjSnkoeBh4at6BwEnb5I7Jl31wg==", "engines": { - "node": ">=8.0.0" + "node": ">=8" } }, - "node_modules/web3-providers-http/node_modules/web3-core-helpers": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/web3-core-helpers/-/web3-core-helpers-1.10.0.tgz", - "integrity": "sha512-pIxAzFDS5vnbXvfvLSpaA1tfRykAe9adw43YCKsEYQwH0gCLL0kMLkaCX3q+Q8EVmAh+e1jWL/nl9U0de1+++g==", - "dependencies": { - "web3-eth-iban": "1.10.0", - "web3-utils": "1.10.0" - }, + "node_modules/swarm-js/node_modules/universalify": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", + "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", "engines": { - "node": ">=8.0.0" + "node": ">= 4.0.0" } }, - "node_modules/web3-providers-http/node_modules/web3-eth-iban": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/web3-eth-iban/-/web3-eth-iban-1.10.0.tgz", - "integrity": "sha512-0l+SP3IGhInw7Q20LY3IVafYEuufo4Dn75jAHT7c2aDJsIolvf2Lc6ugHkBajlwUneGfbRQs/ccYPQ9JeMUbrg==", - "dependencies": { - "bn.js": "^5.2.1", - "web3-utils": "1.10.0" - }, + "node_modules/symbol-observable": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/symbol-observable/-/symbol-observable-1.2.0.tgz", + "integrity": "sha512-e900nM8RRtGhlV36KGEU9k65K3mPb1WV70OdjfxlG2EAuM1noi/E/BaW/uMhL7bPEssK8QV57vN3esixjUvcXQ==", "engines": { - "node": ">=8.0.0" + "node": ">=0.10.0" } }, - "node_modules/web3-providers-ipc": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/web3-providers-ipc/-/web3-providers-ipc-1.10.0.tgz", - "integrity": "sha512-OfXG1aWN8L1OUqppshzq8YISkWrYHaATW9H8eh0p89TlWMc1KZOL9vttBuaBEi96D/n0eYDn2trzt22bqHWfXA==", + "node_modules/sync-request": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/sync-request/-/sync-request-6.1.0.tgz", + "integrity": "sha512-8fjNkrNlNCrVc/av+Jn+xxqfCjYaBoHqCsDz6mt030UMxJGr+GSfCV1dQt2gRtlL63+VPidwDVLr7V2OcTSdRw==", "dependencies": { - "oboe": "2.1.5", - "web3-core-helpers": "1.10.0" + "http-response-object": "^3.0.1", + "sync-rpc": "^1.2.1", + "then-request": "^6.0.0" }, "engines": { "node": ">=8.0.0" } }, - "node_modules/web3-providers-ipc/node_modules/web3-core-helpers": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/web3-core-helpers/-/web3-core-helpers-1.10.0.tgz", - "integrity": "sha512-pIxAzFDS5vnbXvfvLSpaA1tfRykAe9adw43YCKsEYQwH0gCLL0kMLkaCX3q+Q8EVmAh+e1jWL/nl9U0de1+++g==", + "node_modules/sync-rpc": { + "version": "1.3.6", + "resolved": "https://registry.npmjs.org/sync-rpc/-/sync-rpc-1.3.6.tgz", + "integrity": "sha512-J8jTXuZzRlvU7HemDgHi3pGnh/rkoqR/OZSjhTyyZrEkkYQbk7Z33AXp37mkPfPpfdOuj7Ex3H/TJM1z48uPQw==", "dependencies": { - "web3-eth-iban": "1.10.0", - "web3-utils": "1.10.0" - }, - "engines": { - "node": ">=8.0.0" + "get-port": "^3.1.0" } }, - "node_modules/web3-providers-ipc/node_modules/web3-eth-iban": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/web3-eth-iban/-/web3-eth-iban-1.10.0.tgz", - "integrity": "sha512-0l+SP3IGhInw7Q20LY3IVafYEuufo4Dn75jAHT7c2aDJsIolvf2Lc6ugHkBajlwUneGfbRQs/ccYPQ9JeMUbrg==", + "node_modules/table": { + "version": "6.8.0", + "resolved": "https://registry.npmjs.org/table/-/table-6.8.0.tgz", + "integrity": "sha512-s/fitrbVeEyHKFa7mFdkuQMWlH1Wgw/yEXMt5xACT4ZpzWFluehAxRtUUQKPuWhaLAWhFcVx6w3oC8VKaUfPGA==", + "dev": true, "dependencies": { - "bn.js": "^5.2.1", - "web3-utils": "1.10.0" + "ajv": "^8.0.1", + "lodash.truncate": "^4.4.2", + "slice-ansi": "^4.0.0", + "string-width": "^4.2.3", + "strip-ansi": "^6.0.1" }, "engines": { - "node": ">=8.0.0" + "node": ">=10.0.0" } }, - "node_modules/web3-providers-ws": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/web3-providers-ws/-/web3-providers-ws-1.10.0.tgz", - "integrity": "sha512-sK0fNcglW36yD5xjnjtSGBnEtf59cbw4vZzJ+CmOWIKGIR96mP5l684g0WD0Eo+f4NQc2anWWXG74lRc9OVMCQ==", + "node_modules/table-layout": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/table-layout/-/table-layout-1.0.2.tgz", + "integrity": "sha512-qd/R7n5rQTRFi+Zf2sk5XVVd9UQl6ZkduPFC3S7WEGJAmetDTjY3qPN50eSKzwuzEyQKy5TN2TiZdkIjos2L6A==", + "dev": true, "dependencies": { - "eventemitter3": "4.0.4", - "web3-core-helpers": "1.10.0", - "websocket": "^1.0.32" + "array-back": "^4.0.1", + "deep-extend": "~0.6.0", + "typical": "^5.2.0", + "wordwrapjs": "^4.0.0" }, "engines": { "node": ">=8.0.0" } }, - "node_modules/web3-providers-ws/node_modules/eventemitter3": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.4.tgz", - "integrity": "sha512-rlaVLnVxtxvoyLsQQFBx53YmXHDxRIzzTLbdfxqi4yocpSjAxXwkU0cScM5JgSKMqEhrZpnvQ2D9gjylR0AimQ==" + "node_modules/table-layout/node_modules/array-back": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/array-back/-/array-back-4.0.2.tgz", + "integrity": "sha512-NbdMezxqf94cnNfWLL7V/im0Ub+Anbb0IoZhvzie8+4HJ4nMQuzHuy49FkGYCJK2yAloZ3meiB6AVMClbrI1vg==", + "dev": true, + "engines": { + "node": ">=8" + } }, - "node_modules/web3-providers-ws/node_modules/web3-core-helpers": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/web3-core-helpers/-/web3-core-helpers-1.10.0.tgz", - "integrity": "sha512-pIxAzFDS5vnbXvfvLSpaA1tfRykAe9adw43YCKsEYQwH0gCLL0kMLkaCX3q+Q8EVmAh+e1jWL/nl9U0de1+++g==", + "node_modules/table-layout/node_modules/typical": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/typical/-/typical-5.2.0.tgz", + "integrity": "sha512-dvdQgNDNJo+8B2uBQoqdb11eUCE1JQXhvjC/CZtgvZseVd5TYMXnq0+vuUemXbd/Se29cTaUuPX3YIc2xgbvIg==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/table/node_modules/ajv": { + "version": "8.11.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.11.0.tgz", + "integrity": "sha512-wGgprdCvMalC0BztXvitD2hC04YffAvtsUn93JbGXYLAtCUO4xd17mCCZQxUOItiBwZvJScWo8NIvQMQ71rdpg==", + "dev": true, "dependencies": { - "web3-eth-iban": "1.10.0", - "web3-utils": "1.10.0" + "fast-deep-equal": "^3.1.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.2.2" }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/table/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, "engines": { - "node": ">=8.0.0" + "node": ">=8" } }, - "node_modules/web3-providers-ws/node_modules/web3-eth-iban": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/web3-eth-iban/-/web3-eth-iban-1.10.0.tgz", - "integrity": "sha512-0l+SP3IGhInw7Q20LY3IVafYEuufo4Dn75jAHT7c2aDJsIolvf2Lc6ugHkBajlwUneGfbRQs/ccYPQ9JeMUbrg==", + "node_modules/table/node_modules/json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", + "dev": true + }, + "node_modules/table/node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, "dependencies": { - "bn.js": "^5.2.1", - "web3-utils": "1.10.0" + "ansi-regex": "^5.0.1" }, "engines": { - "node": ">=8.0.0" + "node": ">=8" } }, - "node_modules/web3-shh": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/web3-shh/-/web3-shh-1.10.0.tgz", - "integrity": "sha512-uNUUuNsO2AjX41GJARV9zJibs11eq6HtOe6Wr0FtRUcj8SN6nHeYIzwstAvJ4fXA53gRqFMTxdntHEt9aXVjpg==", - "hasInstallScript": true, + "node_modules/tar": { + "version": "4.4.19", + "resolved": "https://registry.npmjs.org/tar/-/tar-4.4.19.tgz", + "integrity": "sha512-a20gEsvHnWe0ygBY8JbxoM4w3SJdhc7ZAuxkLqh+nvNQN2IOt0B5lLgM490X5Hl8FF0dl0tOf2ewFYAlIFgzVA==", "dependencies": { - "web3-core": "1.10.0", - "web3-core-method": "1.10.0", - "web3-core-subscriptions": "1.10.0", - "web3-net": "1.10.0" + "chownr": "^1.1.4", + "fs-minipass": "^1.2.7", + "minipass": "^2.9.0", + "minizlib": "^1.3.3", + "mkdirp": "^0.5.5", + "safe-buffer": "^5.2.1", + "yallist": "^3.1.1" }, "engines": { - "node": ">=8.0.0" + "node": ">=4.5" } }, - "node_modules/web3-utils": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/web3-utils/-/web3-utils-1.10.0.tgz", - "integrity": "sha512-kSaCM0uMcZTNUSmn5vMEhlo02RObGNRRCkdX0V9UTAU0+lrvn0HSaudyCo6CQzuXUsnuY2ERJGCGPfeWmv19Rg==", + "node_modules/tar-fs": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-2.1.1.tgz", + "integrity": "sha512-V0r2Y9scmbDRLCNex/+hYzvp/zyYjvFbHPNgVTKfQvVrb6guiE/fxP+XblDNR011utopbkex2nM4dHNV6GDsng==", + "optional": true, "dependencies": { - "bn.js": "^5.2.1", - "ethereum-bloom-filters": "^1.0.6", - "ethereumjs-util": "^7.1.0", - "ethjs-unit": "0.1.6", - "number-to-bn": "1.7.0", - "randombytes": "^2.1.0", - "utf8": "3.0.0" + "chownr": "^1.1.1", + "mkdirp-classic": "^0.5.2", + "pump": "^3.0.0", + "tar-stream": "^2.1.4" + } + }, + "node_modules/tar-stream": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-2.2.0.tgz", + "integrity": "sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==", + "dependencies": { + "bl": "^4.0.3", + "end-of-stream": "^1.4.1", + "fs-constants": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^3.1.1" }, "engines": { - "node": ">=8.0.0" + "node": ">=6" } }, - "node_modules/webidl-conversions": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", - "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==" + "node_modules/testrpc": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/testrpc/-/testrpc-0.0.1.tgz", + "integrity": "sha512-afH1hO+SQ/VPlmaLUFj2636QMeDvPCeQMc/9RBMW0IfjNe9gFD9Ra3ShqYkB7py0do1ZcCna/9acHyzTJ+GcNA==", + "deprecated": "testrpc has been renamed to ganache-cli, please use this package from now on." }, - "node_modules/websocket": { - "version": "1.0.34", - "resolved": "https://registry.npmjs.org/websocket/-/websocket-1.0.34.tgz", - "integrity": "sha512-PRDso2sGwF6kM75QykIesBijKSVceR6jL2G8NGYyq2XrItNC2P5/qL5XeR056GhA+Ly7JMFvJb9I312mJfmqnQ==", + "node_modules/text-encoding-utf-8": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/text-encoding-utf-8/-/text-encoding-utf-8-1.0.2.tgz", + "integrity": "sha512-8bw4MY9WjdsD2aMtO0OzOCY3pXGYNx2d2FfHRVUKkiCPDWjKuOlhLVASS+pD7VkLTVjW268LYJHwsnPFlBpbAg==" + }, + "node_modules/then-request": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/then-request/-/then-request-6.0.2.tgz", + "integrity": "sha512-3ZBiG7JvP3wbDzA9iNY5zJQcHL4jn/0BWtXIkagfz7QgOL/LqjCEOBQuJNZfu0XYnv5JhKh+cDxCPM4ILrqruA==", "dependencies": { - "bufferutil": "^4.0.1", - "debug": "^2.2.0", - "es5-ext": "^0.10.50", - "typedarray-to-buffer": "^3.1.5", - "utf-8-validate": "^5.0.2", - "yaeti": "^0.0.6" + "@types/concat-stream": "^1.6.0", + "@types/form-data": "0.0.33", + "@types/node": "^8.0.0", + "@types/qs": "^6.2.31", + "caseless": "~0.12.0", + "concat-stream": "^1.6.0", + "form-data": "^2.2.0", + "http-basic": "^8.1.1", + "http-response-object": "^3.0.1", + "promise": "^8.0.0", + "qs": "^6.4.0" }, "engines": { - "node": ">=4.0.0" + "node": ">=6.0.0" } }, - "node_modules/websocket/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "node_modules/then-request/node_modules/@types/node": { + "version": "8.10.66", + "resolved": "https://registry.npmjs.org/@types/node/-/node-8.10.66.tgz", + "integrity": "sha512-tktOkFUA4kXx2hhhrB8bIFb5TbwzS4uOhKEmwiD+NoiL0qtP2OQ9mFldbgD4dV1djrlBYP6eBuQZiWjuHUpqFw==" + }, + "node_modules/then-request/node_modules/form-data": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.5.1.tgz", + "integrity": "sha512-m21N3WOmEEURgk6B9GLOE4RuWOFf28Lhh9qGYeNlGq4VDXUlJy2th2slBNU8Gp8EzloYZOibZJ7t5ecIrFSjVA==", "dependencies": { - "ms": "2.0.0" + "asynckit": "^0.4.0", + "combined-stream": "^1.0.6", + "mime-types": "^2.1.12" + }, + "engines": { + "node": ">= 0.12" } }, - "node_modules/websocket/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" - }, - "node_modules/whatwg-fetch": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/whatwg-fetch/-/whatwg-fetch-2.0.4.tgz", - "integrity": "sha512-dcQ1GWpOD/eEQ97k66aiEVpNnapVj90/+R+SXTPYGHpYBBypfKJEQjLrvMZ7YXbKm21gXd4NcuxUTjiv1YtLng==" + "node_modules/through": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", + "integrity": "sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==" }, - "node_modules/whatwg-mimetype": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-3.0.0.tgz", - "integrity": "sha512-nt+N2dzIutVRxARx1nghPKGv1xHikU7HKdfafKkLNLindmPU/ch3U31NOCGGA/dmPcmb1VlofO0vnKAcsm0o/Q==", + "node_modules/through2": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/through2/-/through2-3.0.2.tgz", + "integrity": "sha512-enaDQ4MUyP2W6ZyT6EsMzqBPZaM/avg8iuo+l2d3QCs0J+6RaqkHV/2/lOwDTueBHeJ/2LG9lrLW3d5rWPucuQ==", "optional": true, + "dependencies": { + "inherits": "^2.0.4", + "readable-stream": "2 || 3" + } + }, + "node_modules/timed-out": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/timed-out/-/timed-out-4.0.1.tgz", + "integrity": "sha512-G7r3AhovYtr5YKOWQkta8RKAPb+J9IsO4uVmzjl8AZwfhs8UcUwTiD6gcJYSgOtzyjvQKrKYn41syHbUWMkafA==", "engines": { - "node": ">=12" + "node": ">=0.10.0" } }, - "node_modules/whatwg-url": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", - "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", + "node_modules/timers-ext": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/timers-ext/-/timers-ext-0.1.7.tgz", + "integrity": "sha512-b85NUNzTSdodShTIbky6ZF02e8STtVVfD+fu4aXXShEELpozH+bCpJLYMPZbsABN2wDH7fJpqIoXxJpzbf0NqQ==", "dependencies": { - "tr46": "~0.0.3", - "webidl-conversions": "^3.0.0" + "es5-ext": "~0.10.46", + "next-tick": "1" } }, - "node_modules/which": { + "node_modules/tiny-emitter": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/tiny-emitter/-/tiny-emitter-2.1.0.tgz", + "integrity": "sha512-NB6Dk1A9xgQPMoGqC5CVXn123gWyte215ONT5Pp5a0yt4nlEoO1ZWeCwpncaekPHXO60i47ihFnZPiRPjRMq4Q==" + }, + "node_modules/tiny-invariant": { "version": "1.3.1", - "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", - "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "resolved": "https://registry.npmjs.org/tiny-invariant/-/tiny-invariant-1.3.1.tgz", + "integrity": "sha512-AD5ih2NlSssTCwsMznbvwMZpJ1cbhkGd2uueNxzv2jDlEeZdU04JQfRnggJQ8DrcVBGjAsCKwFBbDlVNtEMlzw==" + }, + "node_modules/tiny-typed-emitter": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/tiny-typed-emitter/-/tiny-typed-emitter-2.1.0.tgz", + "integrity": "sha512-qVtvMxeXbVej0cQWKqVSSAHmKZEHAvxdF8HEUBFWts8h+xEo5m/lEiPakuyZ3BnCBjOD8i24kzNOiOLLgsSxhA==", + "optional": true + }, + "node_modules/tiny-warning": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/tiny-warning/-/tiny-warning-1.0.3.tgz", + "integrity": "sha512-lBN9zLN/oAf68o3zNXYrdCt1kP8WsiGW8Oo2ka41b2IM5JL/S1CTyX1rW0mb/zSuJun0ZUrDxx4sqvYS2FWzPA==" + }, + "node_modules/title-case": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/title-case/-/title-case-2.1.1.tgz", + "integrity": "sha512-EkJoZ2O3zdCz3zJsYCsxyq2OC5hrxR9mfdd5I+w8h/tmFfeOxJ+vvkxsKxdmN0WtS9zLdHEgfgVOiMVgv+Po4Q==", "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "which": "bin/which" + "no-case": "^2.2.0", + "upper-case": "^1.0.3" } }, - "node_modules/which-boxed-primitive": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz", - "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==", + "node_modules/tmp": { + "version": "0.0.33", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", + "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", "dependencies": { - "is-bigint": "^1.0.1", - "is-boolean-object": "^1.1.0", - "is-number-object": "^1.0.4", - "is-string": "^1.0.5", - "is-symbol": "^1.0.3" + "os-tmpdir": "~1.0.2" }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "engines": { + "node": ">=0.6.0" } }, - "node_modules/which-module": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/which-module/-/which-module-1.0.0.tgz", - "integrity": "sha512-F6+WgncZi/mJDrammbTuHe1q0R5hOXv/mBaiNA2TCNT/LTHusX0V+CJnj9XT8ki5ln2UZyyddDgHfCzyrOH7MQ==" + "node_modules/to-buffer": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/to-buffer/-/to-buffer-1.1.1.tgz", + "integrity": "sha512-lx9B5iv7msuFYE3dytT+KE5tap+rNYw+K4jVkb9R/asAb+pbBSM17jtunHplhBe6RRJdZx3Pn2Jph24O32mOVg==" }, - "node_modules/which-pm-runs": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/which-pm-runs/-/which-pm-runs-1.1.0.tgz", - "integrity": "sha512-n1brCuqClxfFfq/Rb0ICg9giSZqCS+pLtccdag6C2HyufBrh3fBOiy9nb6ggRMvWOVH5GrdJskj5iGTZNxd7SA==", - "optional": true, + "node_modules/to-fast-properties": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", + "integrity": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==", "engines": { "node": ">=4" } }, - "node_modules/which-typed-array": { - "version": "1.1.8", - "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.8.tgz", - "integrity": "sha512-Jn4e5PItbcAHyLoRDwvPj1ypu27DJbtdYXUa5zsinrUx77Uvfb0cXwwnGMTn7cjUfhhqgVQnVJCwF+7cgU7tpw==", + "node_modules/to-hex": { + "version": "0.0.18", + "resolved": "https://registry.npmjs.org/to-hex/-/to-hex-0.0.18.tgz", + "integrity": "sha512-twjjF944fl3eUQBpO7bETUhUyCtUFHWJkSLq9+K/Aw+yh3l/xIYaNUmybRqmxsYoZyv9au4aikDiWoJEOMKBDQ==", "dependencies": { - "available-typed-arrays": "^1.0.5", - "call-bind": "^1.0.2", - "es-abstract": "^1.20.0", - "for-each": "^0.3.3", - "has-tostringtag": "^1.0.0", - "is-typed-array": "^1.1.9" - }, + "bignumber.js": "9.0.0", + "normalize-hex": "0.0.2" + } + }, + "node_modules/to-hex/node_modules/bignumber.js": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/bignumber.js/-/bignumber.js-9.0.0.tgz", + "integrity": "sha512-t/OYhhJ2SD+YGBQcjY8GzzDHEk9f3nerxjtfa6tlMXfe7frs/WozhvCNoGvpM0P3bNf3Gq5ZRMlGr5f3r4/N8A==", "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": "*" } }, - "node_modules/wide-align": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.5.tgz", - "integrity": "sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg==", - "optional": true, - "dependencies": { - "string-width": "^1.0.2 || 2 || 3 || 4" + "node_modules/to-readable-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/to-readable-stream/-/to-readable-stream-1.0.0.tgz", + "integrity": "sha512-Iq25XBt6zD5npPhlLVXGFN3/gyR2/qODcKNNyTMd4vbm39HUaOiAM4PMq0eMVC/Tkxz+Zjdsc55g9yyz+Yq00Q==", + "engines": { + "node": ">=6" } }, - "node_modules/window-size": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/window-size/-/window-size-0.2.0.tgz", - "integrity": "sha512-UD7d8HFA2+PZsbKyaOCEy8gMh1oDtHgJh1LfgjQ4zVXmYjAT/kvz3PueITKuqDiIXQe7yzpPnxX3lNc+AhQMyw==", - "bin": { - "window-size": "cli.js" + "node_modules/to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dependencies": { + "is-number": "^7.0.0" }, "engines": { - "node": ">= 0.10.0" + "node": ">=8.0" } }, - "node_modules/wordwrapjs": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/wordwrapjs/-/wordwrapjs-4.0.1.tgz", - "integrity": "sha512-kKlNACbvHrkpIw6oPeYDSmdCTu2hdMHoyXLTcUKala++lx5Y+wjJ/e474Jqv5abnVmwxw08DiTuHmw69lJGksA==", - "dev": true, + "node_modules/toformat": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/toformat/-/toformat-2.0.0.tgz", + "integrity": "sha512-03SWBVop6nU8bpyZCx7SodpYznbZF5R4ljwNLBcTQzKOD9xuihRo/psX58llS1BMFhhAI08H3luot5GoXJz2pQ==" + }, + "node_modules/toidentifier": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", + "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", + "engines": { + "node": ">=0.6" + } + }, + "node_modules/toml": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/toml/-/toml-3.0.0.tgz", + "integrity": "sha512-y/mWCZinnvxjTKYhJ+pYxwD0mRLVvOtdS2Awbgxln6iEnt4rk0yBxeSBHkGJcPucRiG0e55mwWp+g/05rsrd6w==" + }, + "node_modules/touch": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/touch/-/touch-3.1.0.tgz", + "integrity": "sha512-WBx8Uy5TLtOSRtIq+M03/sKDrXCLHxwDcquSP2c43Le03/9serjQBIztjRz6FkJez9D/hleyAXTBGLwwZUw9lA==", "dependencies": { - "reduce-flatten": "^2.0.0", - "typical": "^5.2.0" + "nopt": "~1.0.10" + }, + "bin": { + "nodetouch": "bin/nodetouch.js" + } + }, + "node_modules/tough-cookie": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz", + "integrity": "sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==", + "dependencies": { + "psl": "^1.1.28", + "punycode": "^2.1.1" }, "engines": { - "node": ">=8.0.0" + "node": ">=0.8" } }, - "node_modules/wordwrapjs/node_modules/typical": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/typical/-/typical-5.2.0.tgz", - "integrity": "sha512-dvdQgNDNJo+8B2uBQoqdb11eUCE1JQXhvjC/CZtgvZseVd5TYMXnq0+vuUemXbd/Se29cTaUuPX3YIc2xgbvIg==", - "dev": true, + "node_modules/tough-cookie/node_modules/punycode": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", + "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", "engines": { - "node": ">=8" + "node": ">=6" } }, - "node_modules/workerpool": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/workerpool/-/workerpool-6.2.1.tgz", - "integrity": "sha512-ILEIE97kDZvF9Wb9f6h5aXK4swSlKGUcOEGiIYb2OOu/IrDU9iwj0fD//SsA6E5ibwJxpEvhullJY4Sl4GcpAw==" + "node_modules/tr46": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", + "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==" }, - "node_modules/wrap-ansi": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", - "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "node_modules/truffle": { + "version": "5.11.4", + "resolved": "https://registry.npmjs.org/truffle/-/truffle-5.11.4.tgz", + "integrity": "sha512-Oc7HpNQ1ViJhE0Gx1HJ6i915k5pfw89o1rhhyFKXiOZLYuXUkiyyxBdPRt+/IO5PjtXt33Me67Dy3vvoJjeyUQ==", + "hasInstallScript": true, "dependencies": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" + "@truffle/db-loader": "^0.2.35", + "@truffle/debugger": "^12.1.4", + "app-module-path": "^2.2.0", + "ganache": "7.9.1", + "mocha": "10.1.0", + "original-require": "^1.0.1" + }, + "bin": { + "truffle": "build/cli.bundled.js" }, "engines": { - "node": ">=10" + "node": "^16.20 || ^18.16 || >=20" }, - "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + "optionalDependencies": { + "@truffle/db": "^2.0.35" } }, - "node_modules/wrap-ansi/node_modules/ansi-regex": { + "node_modules/truffle-contract-size": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/truffle-contract-size/-/truffle-contract-size-2.0.1.tgz", + "integrity": "sha512-AIKPwHPC/1pZwtVjgUcgcK23k6gWxKhn4ZnKLr339uieb94UgAUeIwGUkfc87T+0lqgC6ePY7YhsFeoZK2YEsA==", + "dependencies": { + "cli-table": "^0.3.1", + "yargs": "^15.3.1" + } + }, + "node_modules/truffle-contract-size/node_modules/ansi-regex": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", @@ -31275,7 +32483,38 @@ "node": ">=8" } }, - "node_modules/wrap-ansi/node_modules/strip-ansi": { + "node_modules/truffle-contract-size/node_modules/camelcase": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", + "engines": { + "node": ">=6" + } + }, + "node_modules/truffle-contract-size/node_modules/cliui": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-6.0.0.tgz", + "integrity": "sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==", + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^6.2.0" + } + }, + "node_modules/truffle-contract-size/node_modules/decamelize": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", + "integrity": "sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/truffle-contract-size/node_modules/require-main-filename": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz", + "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==" + }, + "node_modules/truffle-contract-size/node_modules/strip-ansi": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", @@ -31286,1058 +32525,3894 @@ "node": ">=8" } }, - "node_modules/wrappy": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==" + "node_modules/truffle-contract-size/node_modules/which-module": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz", + "integrity": "sha512-B+enWhmw6cjfVC7kS8Pj9pCrKSc5txArRyaYGe088shv/FGWH+0Rjx/xPgtsWfsUtS27FkP697E4DDhgrgoc0Q==" }, - "node_modules/write-stream": { - "version": "0.4.3", - "resolved": "https://registry.npmjs.org/write-stream/-/write-stream-0.4.3.tgz", - "integrity": "sha512-IJrvkhbAnj89W/GAVdVgbnPiVw5Ntg/B4tc/MUCIEwj/g6JIww1DWJyB/yBMT3yw2/TkT6IUZ0+IYef3flEw8A==", - "optional": true, + "node_modules/truffle-contract-size/node_modules/wrap-ansi": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", + "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", "dependencies": { - "readable-stream": "~0.0.2" + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=8" } }, - "node_modules/write-stream/node_modules/readable-stream": { - "version": "0.0.4", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-0.0.4.tgz", - "integrity": "sha512-azrivNydKRYt7zwLV5wWUK7YzKTWs3q87xSmY6DlHapPrCvaT6ZrukvM5erV+yCSSPmZT8zkSdttOHQpWWm9zw==", - "optional": true + "node_modules/truffle-contract-size/node_modules/y18n": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.3.tgz", + "integrity": "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==" }, - "node_modules/ws": { - "version": "8.13.0", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.13.0.tgz", - "integrity": "sha512-x9vcZYTrFPC7aSIbj7sRCYo7L/Xb8Iy+pW0ng0wt2vCJv7M9HOMy0UoN3rr+IFC7hb7vXoqS+P9ktyLLLhO+LA==", - "engines": { - "node": ">=10.0.0" - }, - "peerDependencies": { - "bufferutil": "^4.0.1", - "utf-8-validate": ">=5.0.2" + "node_modules/truffle-contract-size/node_modules/yargs": { + "version": "15.4.1", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-15.4.1.tgz", + "integrity": "sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==", + "dependencies": { + "cliui": "^6.0.0", + "decamelize": "^1.2.0", + "find-up": "^4.1.0", + "get-caller-file": "^2.0.1", + "require-directory": "^2.1.1", + "require-main-filename": "^2.0.0", + "set-blocking": "^2.0.0", + "string-width": "^4.2.0", + "which-module": "^2.0.0", + "y18n": "^4.0.0", + "yargs-parser": "^18.1.2" }, - "peerDependenciesMeta": { - "bufferutil": { - "optional": true - }, - "utf-8-validate": { - "optional": true - } + "engines": { + "node": ">=8" } }, - "node_modules/xhr": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/xhr/-/xhr-2.6.0.tgz", - "integrity": "sha512-/eCGLb5rxjx5e3mF1A7s+pLlR6CGyqWN91fv1JgER5mVWg1MZmlhBvy9kjcsOdRk8RrIujotWyJamfyrp+WIcA==", + "node_modules/truffle-contract-size/node_modules/yargs-parser": { + "version": "18.1.3", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz", + "integrity": "sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==", "dependencies": { - "global": "~4.4.0", - "is-function": "^1.0.1", - "parse-headers": "^2.0.0", - "xtend": "^4.0.0" + "camelcase": "^5.0.0", + "decamelize": "^1.2.0" + }, + "engines": { + "node": ">=6" } }, - "node_modules/xhr-request": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/xhr-request/-/xhr-request-1.1.0.tgz", - "integrity": "sha512-Y7qzEaR3FDtL3fP30k9wO/e+FBnBByZeybKOhASsGP30NIkRAAkKD/sCnLvgEfAIEC1rcmK7YG8f4oEnIrrWzA==", + "node_modules/truffle-flattener": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/truffle-flattener/-/truffle-flattener-1.6.0.tgz", + "integrity": "sha512-scS5Bsi4CZyvlrmD4iQcLHTiG2RQFUXVheTgWeH6PuafmI+Lk5U87Es98loM3w3ImqC9/fPHq+3QIXbcPuoJ1Q==", "dependencies": { - "buffer-to-arraybuffer": "^0.0.5", - "object-assign": "^4.1.1", - "query-string": "^5.0.1", - "simple-get": "^2.7.0", - "timed-out": "^4.0.1", - "url-set-query": "^1.0.0", - "xhr": "^2.0.4" + "@resolver-engine/imports-fs": "^0.2.2", + "@solidity-parser/parser": "^0.14.1", + "find-up": "^2.1.0", + "mkdirp": "^1.0.4", + "tsort": "0.0.1" + }, + "bin": { + "truffle-flattener": "index.js" } }, - "node_modules/xhr-request-promise": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/xhr-request-promise/-/xhr-request-promise-0.1.3.tgz", - "integrity": "sha512-YUBytBsuwgitWtdRzXDDkWAXzhdGB8bYm0sSzMPZT7Z2MBjMSTHFsyCT1yCRATY+XC69DUrQraRAEgcoCRaIPg==", + "node_modules/truffle-flattener/node_modules/@resolver-engine/core": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/@resolver-engine/core/-/core-0.2.1.tgz", + "integrity": "sha512-nsLQHmPJ77QuifqsIvqjaF5B9aHnDzJjp73Q1z6apY3e9nqYrx4Dtowhpsf7Jwftg/XzVDEMQC+OzUBNTS+S1A==", "dependencies": { - "xhr-request": "^1.1.0" + "debug": "^3.1.0", + "request": "^2.85.0" } }, - "node_modules/xhr-request/node_modules/decompress-response": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-3.3.0.tgz", - "integrity": "sha512-BzRPQuY1ip+qDonAOz42gRm/pg9F768C+npV/4JOsxRC2sq+Rlk+Q4ZCAsOhnIaMrgarILY+RMUIvMmmX1qAEA==", + "node_modules/truffle-flattener/node_modules/@resolver-engine/fs": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/@resolver-engine/fs/-/fs-0.2.1.tgz", + "integrity": "sha512-7kJInM1Qo2LJcKyDhuYzh9ZWd+mal/fynfL9BNjWOiTcOpX+jNfqb/UmGUqros5pceBITlWGqS4lU709yHFUbg==", "dependencies": { - "mimic-response": "^1.0.0" - }, - "engines": { - "node": ">=4" + "@resolver-engine/core": "^0.2.1", + "debug": "^3.1.0" } }, - "node_modules/xhr-request/node_modules/mimic-response": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz", - "integrity": "sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==", - "engines": { - "node": ">=4" + "node_modules/truffle-flattener/node_modules/@resolver-engine/imports": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/@resolver-engine/imports/-/imports-0.2.2.tgz", + "integrity": "sha512-u5/HUkvo8q34AA+hnxxqqXGfby5swnH0Myw91o3Sm2TETJlNKXibFGSKBavAH+wvWdBi4Z5gS2Odu0PowgVOUg==", + "dependencies": { + "@resolver-engine/core": "^0.2.1", + "debug": "^3.1.0", + "hosted-git-info": "^2.6.0" } }, - "node_modules/xhr-request/node_modules/simple-get": { - "version": "2.8.2", - "resolved": "https://registry.npmjs.org/simple-get/-/simple-get-2.8.2.tgz", - "integrity": "sha512-Ijd/rV5o+mSBBs4F/x9oDPtTx9Zb6X9brmnXvMW4J7IR15ngi9q5xxqWBKU744jTZiaXtxaPL7uHG6vtN8kUkw==", + "node_modules/truffle-flattener/node_modules/@resolver-engine/imports-fs": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/@resolver-engine/imports-fs/-/imports-fs-0.2.2.tgz", + "integrity": "sha512-gFCgMvCwyppjwq0UzIjde/WI+yDs3oatJhozG9xdjJdewwtd7LiF0T5i9lrHAUtqrQbqoFE4E+ZMRVHWpWHpKQ==", "dependencies": { - "decompress-response": "^3.3.0", - "once": "^1.3.1", - "simple-concat": "^1.0.0" + "@resolver-engine/fs": "^0.2.1", + "@resolver-engine/imports": "^0.2.2", + "debug": "^3.1.0" } }, - "node_modules/xhr2-cookies": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/xhr2-cookies/-/xhr2-cookies-1.1.0.tgz", - "integrity": "sha512-hjXUA6q+jl/bd8ADHcVfFsSPIf+tyLIjuO9TwJC9WI6JP2zKcS7C+p56I9kCLLsaCiNT035iYvEUUzdEFj/8+g==", + "node_modules/truffle-flattener/node_modules/debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", "dependencies": { - "cookiejar": "^2.1.1" + "ms": "^2.1.1" } }, - "node_modules/xmlhttprequest": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/xmlhttprequest/-/xmlhttprequest-1.8.0.tgz", - "integrity": "sha512-58Im/U0mlVBLM38NdZjHyhuMtCqa61469k2YP/AaPbvCoV9aQGUpbJBj1QRm2ytRiVQBD/fsw7L2bJGDVQswBA==", + "node_modules/truffle-flattener/node_modules/find-up": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", + "integrity": "sha512-NWzkk0jSJtTt08+FBFMvXoeZnOJD+jTtsRmBYbAIzJdX6l7dLgR7CTubCM5/eDdPUBvLCeVasP1brfVR/9/EZQ==", + "dependencies": { + "locate-path": "^2.0.0" + }, "engines": { - "node": ">=0.4.0" + "node": ">=4" } }, - "node_modules/xss": { - "version": "1.0.14", - "resolved": "https://registry.npmjs.org/xss/-/xss-1.0.14.tgz", - "integrity": "sha512-og7TEJhXvn1a7kzZGQ7ETjdQVS2UfZyTlsEdDOqvQF7GoxNfY+0YLCzBy1kPdsDDx4QuNAonQPddpsn6Xl/7sw==", - "optional": true, + "node_modules/truffle-flattener/node_modules/locate-path": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", + "integrity": "sha512-NCI2kiDkyR7VeEKm27Kda/iQHyKJe1Bu0FlTbYp3CqJu+9IFe9bLyAjMxf5ZDDbEg+iMPzB5zYyUTSm8wVTKmA==", "dependencies": { - "commander": "^2.20.3", - "cssfilter": "0.0.10" + "p-locate": "^2.0.0", + "path-exists": "^3.0.0" }, + "engines": { + "node": ">=4" + } + }, + "node_modules/truffle-flattener/node_modules/mkdirp": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", + "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", "bin": { - "xss": "bin/xss" + "mkdirp": "bin/cmd.js" }, "engines": { - "node": ">= 0.10.0" + "node": ">=10" } }, - "node_modules/xtend": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", - "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", + "node_modules/truffle-flattener/node_modules/p-limit": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz", + "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==", + "dependencies": { + "p-try": "^1.0.0" + }, "engines": { - "node": ">=0.4" + "node": ">=4" } }, - "node_modules/y18n": { - "version": "5.0.8", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", - "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", + "node_modules/truffle-flattener/node_modules/p-locate": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz", + "integrity": "sha512-nQja7m7gSKuewoVRen45CtVfODR3crN3goVQ0DDZ9N3yHxgpkuBhZqsaiotSQRrADUrne346peY7kT3TSACykg==", + "dependencies": { + "p-limit": "^1.1.0" + }, "engines": { - "node": ">=10" + "node": ">=4" } }, - "node_modules/yaeti": { - "version": "0.0.6", - "resolved": "https://registry.npmjs.org/yaeti/-/yaeti-0.0.6.tgz", - "integrity": "sha512-MvQa//+KcZCUkBTIC9blM+CU9J2GzuTytsOUwf2lidtvkx/6gnEp1QvJv34t9vdjhFmha/mUiNDbN0D0mJWdug==", + "node_modules/truffle-flattener/node_modules/p-try": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz", + "integrity": "sha512-U1etNYuMJoIz3ZXSrrySFjsXQTWOx2/jdi86L+2pRvph/qMKL6sbcCYdH23fqsbm8TH2Gn0OybpT4eSFlCVHww==", "engines": { - "node": ">=0.10.32" + "node": ">=4" } }, - "node_modules/yallist": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", - "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==" + "node_modules/truffle-flattener/node_modules/path-exists": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", + "integrity": "sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==", + "engines": { + "node": ">=4" + } }, - "node_modules/yargs": { - "version": "16.2.0", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", - "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", + "node_modules/truffle-hdwallet-provider": { + "version": "1.0.17", + "resolved": "https://registry.npmjs.org/truffle-hdwallet-provider/-/truffle-hdwallet-provider-1.0.17.tgz", + "integrity": "sha512-s6DvSP83jiIAc6TUcpr7Uqnja1+sLGJ8og3X7n41vfyC4OCaKmBtXL5HOHf+SsU3iblOvnbFDgmN6Y1VBL/fsg==", + "deprecated": "WARNING: This package has been renamed to @truffle/hdwallet-provider.", "dependencies": { - "cliui": "^7.0.2", - "escalade": "^3.1.1", - "get-caller-file": "^2.0.5", - "require-directory": "^2.1.1", - "string-width": "^4.2.0", - "y18n": "^5.0.5", - "yargs-parser": "^20.2.2" - }, - "engines": { - "node": ">=10" + "any-promise": "^1.3.0", + "bindings": "^1.3.1", + "web3": "1.2.1", + "websocket": "^1.0.28" } }, - "node_modules/yargs-parser": { - "version": "20.2.4", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.4.tgz", - "integrity": "sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA==", + "node_modules/truffle-hdwallet-provider/node_modules/@sindresorhus/is": { + "version": "0.14.0", + "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-0.14.0.tgz", + "integrity": "sha512-9NET910DNaIPngYnLLPeg+Ogzqsi9uM4mSboU5y6p8S5DzMTVEsJZrawi+BoDNUVBa2DhJqQYUFvMDfgU062LQ==", "engines": { - "node": ">=10" + "node": ">=6" } }, - "node_modules/yargs-unparser": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/yargs-unparser/-/yargs-unparser-2.0.0.tgz", - "integrity": "sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA==", + "node_modules/truffle-hdwallet-provider/node_modules/@szmarczak/http-timer": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-1.1.2.tgz", + "integrity": "sha512-XIB2XbzHTN6ieIjfIMV9hlVcfPU26s2vafYWQcZHWXHOxiaRZYEDKEwdl129Zyg50+foYV2jCgtrqSA6qNuNSA==", "dependencies": { - "camelcase": "^6.0.0", - "decamelize": "^4.0.0", - "flat": "^5.0.2", - "is-plain-obj": "^2.1.0" + "defer-to-connect": "^1.0.1" }, "engines": { - "node": ">=10" + "node": ">=6" } }, - "node_modules/yargs-unparser/node_modules/camelcase": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", - "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } + "node_modules/truffle-hdwallet-provider/node_modules/@types/node": { + "version": "10.17.60", + "resolved": "https://registry.npmjs.org/@types/node/-/node-10.17.60.tgz", + "integrity": "sha512-F0KIgDJfy2nA3zMLmWGKxcH2ZVEtCZXHHdOQs2gSaQ27+lNeEfGxzkIw90aXswATX7AZ33tahPbzy6KAfUreVw==" }, - "node_modules/yauzl": { - "version": "2.10.0", - "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.10.0.tgz", - "integrity": "sha512-p4a9I6X6nu6IhoGmBqAcbJy1mlC4j27vEPZX9F4L4/vZT3Lyq1VkFHw/V/PUcB9Buo+DG3iHkT0x3Qya58zc3g==", + "node_modules/truffle-hdwallet-provider/node_modules/bn.js": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==" + }, + "node_modules/truffle-hdwallet-provider/node_modules/buffer": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", + "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], "dependencies": { - "buffer-crc32": "~0.2.3", - "fd-slicer": "~1.1.0" + "base64-js": "^1.3.1", + "ieee754": "^1.1.13" } }, - "node_modules/yn": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz", - "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==", - "optional": true, - "peer": true, + "node_modules/truffle-hdwallet-provider/node_modules/cacheable-request": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-6.1.0.tgz", + "integrity": "sha512-Oj3cAGPCqOZX7Rz64Uny2GYAZNliQSqfbePrgAQ1wKAihYmCUnraBtJtKcGR4xz7wF+LoJC+ssFZvv5BgF9Igg==", + "dependencies": { + "clone-response": "^1.0.2", + "get-stream": "^5.1.0", + "http-cache-semantics": "^4.0.0", + "keyv": "^3.0.0", + "lowercase-keys": "^2.0.0", + "normalize-url": "^4.1.0", + "responselike": "^1.0.2" + }, "engines": { - "node": ">=6" + "node": ">=8" } }, - "node_modules/yocto-queue": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", - "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", + "node_modules/truffle-hdwallet-provider/node_modules/cacheable-request/node_modules/get-stream": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", + "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", + "dependencies": { + "pump": "^3.0.0" + }, "engines": { - "node": ">=10" + "node": ">=8" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/zksync-web3": { - "version": "0.14.3", - "resolved": "https://registry.npmjs.org/zksync-web3/-/zksync-web3-0.14.3.tgz", - "integrity": "sha512-hT72th4AnqyLW1d5Jlv8N2B/qhEnl2NePK2A3org7tAa24niem/UAaHMkEvmWI3SF9waYUPtqAtjpf+yvQ9zvQ==", - "peerDependencies": { - "ethers": "^5.7.0" - } - } - }, - "dependencies": { - "@ampproject/remapping": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.0.tgz", - "integrity": "sha512-qRmjj8nj9qmLTQXXmaR1cck3UXSRMPrbsLJAasZpF+t3riI71BXed5ebIOYwQntykeZuhjsdweEc9BxH5Jc26w==", - "peer": true, - "requires": { - "@jridgewell/gen-mapping": "^0.1.0", - "@jridgewell/trace-mapping": "^0.3.9" + "node_modules/truffle-hdwallet-provider/node_modules/cacheable-request/node_modules/lowercase-keys": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-2.0.0.tgz", + "integrity": "sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==", + "engines": { + "node": ">=8" } }, - "@apollo/protobufjs": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/@apollo/protobufjs/-/protobufjs-1.2.7.tgz", - "integrity": "sha512-Lahx5zntHPZia35myYDBRuF58tlwPskwHc5CWBZC/4bMKB6siTBWwtMrkqXcsNwQiFSzSx5hKdRPUmemrEp3Gg==", - "optional": true, - "requires": { - "@protobufjs/aspromise": "^1.1.2", - "@protobufjs/base64": "^1.1.2", - "@protobufjs/codegen": "^2.0.4", - "@protobufjs/eventemitter": "^1.1.0", - "@protobufjs/fetch": "^1.1.0", - "@protobufjs/float": "^1.0.2", - "@protobufjs/inquire": "^1.1.0", - "@protobufjs/path": "^1.1.2", - "@protobufjs/pool": "^1.1.0", - "@protobufjs/utf8": "^1.1.0", - "@types/long": "^4.0.0", - "long": "^4.0.0" + "node_modules/truffle-hdwallet-provider/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dependencies": { + "ms": "2.0.0" } }, - "@apollo/usage-reporting-protobuf": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/@apollo/usage-reporting-protobuf/-/usage-reporting-protobuf-4.1.0.tgz", - "integrity": "sha512-hXouMuw5pQVkzi8dgMybmr6Y11+eRmMQVoB5TF0HyTwAg9SOq/v3OCuiYqcVUKdBcskU9Msp+XvjAk0GKpWCwQ==", - "optional": true, - "requires": { - "@apollo/protobufjs": "1.2.7" + "node_modules/truffle-hdwallet-provider/node_modules/decompress-response": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-3.3.0.tgz", + "integrity": "sha512-BzRPQuY1ip+qDonAOz42gRm/pg9F768C+npV/4JOsxRC2sq+Rlk+Q4ZCAsOhnIaMrgarILY+RMUIvMmmX1qAEA==", + "dependencies": { + "mimic-response": "^1.0.0" + }, + "engines": { + "node": ">=4" } }, - "@apollo/utils.dropunuseddefinitions": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@apollo/utils.dropunuseddefinitions/-/utils.dropunuseddefinitions-1.1.0.tgz", - "integrity": "sha512-jU1XjMr6ec9pPoL+BFWzEPW7VHHulVdGKMkPAMiCigpVIT11VmCbnij0bWob8uS3ODJ65tZLYKAh/55vLw2rbg==", - "optional": true, - "requires": {} + "node_modules/truffle-hdwallet-provider/node_modules/defer-to-connect": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-1.1.3.tgz", + "integrity": "sha512-0ISdNousHvZT2EiFlZeZAHBUvSxmKswVCEf8hW7KWgG4a8MVEu/3Vb6uWYozkjylyCxe0JBIiRB1jV45S70WVQ==" }, - "@apollo/utils.keyvaluecache": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@apollo/utils.keyvaluecache/-/utils.keyvaluecache-1.0.2.tgz", - "integrity": "sha512-p7PVdLPMnPzmXSQVEsy27cYEjVON+SH/Wb7COyW3rQN8+wJgT1nv9jZouYtztWW8ZgTkii5T6tC9qfoDREd4mg==", - "optional": true, - "requires": { - "@apollo/utils.logger": "^1.0.0", - "lru-cache": "7.10.1 - 7.13.1" - }, + "node_modules/truffle-hdwallet-provider/node_modules/elliptic": { + "version": "6.3.3", + "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.3.3.tgz", + "integrity": "sha512-cIky9SO2H8W2eU1NOLySnhOYJnuEWCq9ZJeHvHd/lXzEL9vyraIMfilZSn57X3aVX+wkfYmqkch2LvmTzkjFpA==", "dependencies": { - "lru-cache": { - "version": "7.13.1", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.13.1.tgz", - "integrity": "sha512-CHqbAq7NFlW3RSnoWXLJBxCWaZVBrfa9UEHId2M3AW8iEBurbqduNexEUCGc3SHc6iCYXNJCDi903LajSVAEPQ==", - "optional": true - } + "bn.js": "^4.4.0", + "brorand": "^1.0.1", + "hash.js": "^1.0.0", + "inherits": "^2.0.1" } }, - "@apollo/utils.logger": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@apollo/utils.logger/-/utils.logger-1.0.1.tgz", - "integrity": "sha512-XdlzoY7fYNK4OIcvMD2G94RoFZbzTQaNP0jozmqqMudmaGo2I/2Jx71xlDJ801mWA/mbYRihyaw6KJii7k5RVA==", - "optional": true + "node_modules/truffle-hdwallet-provider/node_modules/ethers": { + "version": "4.0.0-beta.3", + "resolved": "https://registry.npmjs.org/ethers/-/ethers-4.0.0-beta.3.tgz", + "integrity": "sha512-YYPogooSknTwvHg3+Mv71gM/3Wcrx+ZpCzarBj3mqs9njjRkrOo2/eufzhHloOCo3JSoNI4TQJJ6yU5ABm3Uog==", + "dependencies": { + "@types/node": "^10.3.2", + "aes-js": "3.0.0", + "bn.js": "^4.4.0", + "elliptic": "6.3.3", + "hash.js": "1.1.3", + "js-sha3": "0.5.7", + "scrypt-js": "2.0.3", + "setimmediate": "1.0.4", + "uuid": "2.0.1", + "xmlhttprequest": "1.8.0" + } }, - "@apollo/utils.printwithreducedwhitespace": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@apollo/utils.printwithreducedwhitespace/-/utils.printwithreducedwhitespace-1.1.0.tgz", - "integrity": "sha512-GfFSkAv3n1toDZ4V6u2d7L4xMwLA+lv+6hqXicMN9KELSJ9yy9RzuEXaX73c/Ry+GzRsBy/fdSUGayGqdHfT2Q==", - "optional": true, - "requires": {} + "node_modules/truffle-hdwallet-provider/node_modules/ethers/node_modules/setimmediate": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.4.tgz", + "integrity": "sha512-/TjEmXQVEzdod/FFskf3o7oOAsGhHf2j1dZqRFbDzq4F3mvvxflIIi4Hd3bLQE9y/CpwqfSQam5JakI/mi3Pog==" }, - "@apollo/utils.removealiases": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@apollo/utils.removealiases/-/utils.removealiases-1.0.0.tgz", - "integrity": "sha512-6cM8sEOJW2LaGjL/0vHV0GtRaSekrPQR4DiywaApQlL9EdROASZU5PsQibe2MWeZCOhNrPRuHh4wDMwPsWTn8A==", - "optional": true, - "requires": {} + "node_modules/truffle-hdwallet-provider/node_modules/eventemitter3": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-3.1.2.tgz", + "integrity": "sha512-tvtQIeLVHjDkJYnzf2dgVMxfuSGJeM/7UCG17TT4EumTfNtF+0nebF/4zWOIkCreAbtNqhGEboB6BWrwqNaw4Q==" }, - "@apollo/utils.sortast": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@apollo/utils.sortast/-/utils.sortast-1.1.0.tgz", - "integrity": "sha512-VPlTsmUnOwzPK5yGZENN069y6uUHgeiSlpEhRnLFYwYNoJHsuJq2vXVwIaSmts015WTPa2fpz1inkLYByeuRQA==", - "optional": true, - "requires": { - "lodash.sortby": "^4.7.0" + "node_modules/truffle-hdwallet-provider/node_modules/fs-extra": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-4.0.3.tgz", + "integrity": "sha512-q6rbdDd1o2mAnQreO7YADIxf/Whx4AHBiRf6d+/cVT8h44ss+lHgxf1FemcqDnQt9X3ct4McHr+JMGlYSsK7Cg==", + "dependencies": { + "graceful-fs": "^4.1.2", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" } }, - "@apollo/utils.stripsensitiveliterals": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@apollo/utils.stripsensitiveliterals/-/utils.stripsensitiveliterals-1.2.0.tgz", - "integrity": "sha512-E41rDUzkz/cdikM5147d8nfCFVKovXxKBcjvLEQ7bjZm/cg9zEcXvS6vFY8ugTubI3fn6zoqo0CyU8zT+BGP9w==", - "optional": true, - "requires": {} + "node_modules/truffle-hdwallet-provider/node_modules/get-stream": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", + "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", + "dependencies": { + "pump": "^3.0.0" + }, + "engines": { + "node": ">=6" + } }, - "@apollo/utils.usagereporting": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@apollo/utils.usagereporting/-/utils.usagereporting-1.0.1.tgz", - "integrity": "sha512-6dk+0hZlnDbahDBB2mP/PZ5ybrtCJdLMbeNJD+TJpKyZmSY6bA3SjI8Cr2EM9QA+AdziywuWg+SgbWUF3/zQqQ==", - "optional": true, - "requires": { - "@apollo/usage-reporting-protobuf": "^4.0.0", - "@apollo/utils.dropunuseddefinitions": "^1.1.0", - "@apollo/utils.printwithreducedwhitespace": "^1.1.0", - "@apollo/utils.removealiases": "1.0.0", - "@apollo/utils.sortast": "^1.1.0", - "@apollo/utils.stripsensitiveliterals": "^1.2.0" + "node_modules/truffle-hdwallet-provider/node_modules/got": { + "version": "9.6.0", + "resolved": "https://registry.npmjs.org/got/-/got-9.6.0.tgz", + "integrity": "sha512-R7eWptXuGYxwijs0eV+v3o6+XH1IqVK8dJOEecQfTmkncw9AV4dcw/Dhxi8MdlqPthxxpZyizMzyg8RTmEsG+Q==", + "dependencies": { + "@sindresorhus/is": "^0.14.0", + "@szmarczak/http-timer": "^1.1.2", + "cacheable-request": "^6.0.0", + "decompress-response": "^3.3.0", + "duplexer3": "^0.1.4", + "get-stream": "^4.1.0", + "lowercase-keys": "^1.0.1", + "mimic-response": "^1.0.1", + "p-cancelable": "^1.0.0", + "to-readable-stream": "^1.0.0", + "url-parse-lax": "^3.0.0" + }, + "engines": { + "node": ">=8.6" } }, - "@apollographql/apollo-tools": { - "version": "0.5.4", - "resolved": "https://registry.npmjs.org/@apollographql/apollo-tools/-/apollo-tools-0.5.4.tgz", - "integrity": "sha512-shM3q7rUbNyXVVRkQJQseXv6bnYM3BUma/eZhwXR4xsuM+bqWnJKvW7SAfRjP7LuSCocrexa5AXhjjawNHrIlw==", - "optional": true, - "requires": {} + "node_modules/truffle-hdwallet-provider/node_modules/hash.js": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.3.tgz", + "integrity": "sha512-/UETyP0W22QILqS+6HowevwhEFJ3MBJnwTf75Qob9Wz9t0DPuisL8kW8YZMK62dHAKE1c1p+gY1TtOLY+USEHA==", + "dependencies": { + "inherits": "^2.0.3", + "minimalistic-assert": "^1.0.0" + } }, - "@apollographql/graphql-playground-html": { - "version": "1.6.29", - "resolved": "https://registry.npmjs.org/@apollographql/graphql-playground-html/-/graphql-playground-html-1.6.29.tgz", - "integrity": "sha512-xCcXpoz52rI4ksJSdOCxeOCn2DLocxwHf9dVT/Q90Pte1LX+LY+91SFtJF3KXVHH8kEin+g1KKCQPKBjZJfWNA==", - "optional": true, - "requires": { - "xss": "^1.0.8" + "node_modules/truffle-hdwallet-provider/node_modules/is-plain-obj": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz", + "integrity": "sha512-yvkRyxmFKEOQ4pNXCmJG5AEQNlXJS5LaONXo5/cLdTZdWvsZ1ioJEonLGAosKlMWE8lwUy/bJzMjcw8az73+Fg==", + "engines": { + "node": ">=0.10.0" } }, - "@aws-crypto/sha256-js": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/@aws-crypto/sha256-js/-/sha256-js-1.2.2.tgz", - "integrity": "sha512-Nr1QJIbW/afYYGzYvrF70LtaHrIRtd4TNAglX8BvlfxJLZ45SAmueIKYl5tWoNBPzp65ymXGFK0Bb1vZUpuc9g==", - "dev": true, - "requires": { - "@aws-crypto/util": "^1.2.2", - "@aws-sdk/types": "^3.1.0", - "tslib": "^1.11.1" - }, - "dependencies": { - "tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", - "dev": true - } + "node_modules/truffle-hdwallet-provider/node_modules/js-sha3": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/js-sha3/-/js-sha3-0.5.7.tgz", + "integrity": "sha512-GII20kjaPX0zJ8wzkTbNDYMY7msuZcTWk8S5UOh6806Jq/wz1J8/bnr8uGU0DAUmYDjj2Mr4X1cW8v/GLYnR+g==" + }, + "node_modules/truffle-hdwallet-provider/node_modules/json-buffer": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.0.tgz", + "integrity": "sha512-CuUqjv0FUZIdXkHPI8MezCnFCdaTAacej1TZYulLoAg1h/PhwkdXFN4V/gzY4g+fMBCOV2xF+rp7t2XD2ns/NQ==" + }, + "node_modules/truffle-hdwallet-provider/node_modules/jsonfile": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", + "integrity": "sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==", + "optionalDependencies": { + "graceful-fs": "^4.1.6" } }, - "@aws-crypto/util": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/@aws-crypto/util/-/util-1.2.2.tgz", - "integrity": "sha512-H8PjG5WJ4wz0UXAFXeJjWCW1vkvIJ3qUUD+rGRwJ2/hj+xT58Qle2MTql/2MGzkU+1JLAFuR6aJpLAjHwhmwwg==", - "dev": true, - "requires": { - "@aws-sdk/types": "^3.1.0", - "@aws-sdk/util-utf8-browser": "^3.0.0", - "tslib": "^1.11.1" - }, + "node_modules/truffle-hdwallet-provider/node_modules/keyv": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/keyv/-/keyv-3.1.0.tgz", + "integrity": "sha512-9ykJ/46SN/9KPM/sichzQ7OvXyGDYKGTaDlKMGCAlg2UK8KRy4jb0d8sFc+0Tt0YYnThq8X2RZgCg74RPxgcVA==", "dependencies": { - "tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", - "dev": true - } + "json-buffer": "3.0.0" } }, - "@aws-sdk/types": { - "version": "3.329.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.329.0.tgz", - "integrity": "sha512-wFBW4yciDfzQBSFmWNaEvHShnSGLMxSu9Lls6EUf6xDMavxSB36bsrVRX6CyAo/W0NeIIyEOW1LclGPgJV1okg==", - "dev": true, - "requires": { - "tslib": "^2.5.0" + "node_modules/truffle-hdwallet-provider/node_modules/lowercase-keys": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.1.tgz", + "integrity": "sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA==", + "engines": { + "node": ">=0.10.0" } }, - "@aws-sdk/util-utf8-browser": { - "version": "3.259.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-utf8-browser/-/util-utf8-browser-3.259.0.tgz", - "integrity": "sha512-UvFa/vR+e19XookZF8RzFZBrw2EUkQWxiBW0yYQAhvk3C+QVGl0H3ouca8LDBlBfQKXwmW3huo/59H8rwb1wJw==", - "dev": true, - "requires": { - "tslib": "^2.3.1" + "node_modules/truffle-hdwallet-provider/node_modules/mimic-response": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz", + "integrity": "sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==", + "engines": { + "node": ">=4" } }, - "@babel/code-frame": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.18.6.tgz", - "integrity": "sha512-TDCmlK5eOvH+eH7cdAFlNXeVJqWIQ7gW9tY1GJIpUtFb6CmjVyq2VM3u71bOyR8CRihcCgMUYoDNyLXao3+70Q==", - "peer": true, - "requires": { - "@babel/highlight": "^7.18.6" - } + "node_modules/truffle-hdwallet-provider/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" }, - "@babel/compat-data": { - "version": "7.19.4", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.19.4.tgz", - "integrity": "sha512-CHIGpJcUQ5lU9KrPHTjBMhVwQG6CQjxfg36fGXl3qk/Gik1WwWachaXFuo0uCWJT/mStOKtcbFJCaVLihC1CMw==" + "node_modules/truffle-hdwallet-provider/node_modules/normalize-url": { + "version": "4.5.1", + "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-4.5.1.tgz", + "integrity": "sha512-9UZCFRHQdNrfTpGg8+1INIg93B6zE0aXMVFkw1WFwvO4SlZywU6aLg5Of0Ap/PgcbSw4LNxvMWXMeugwMCX0AA==", + "engines": { + "node": ">=8" + } }, - "@babel/core": { - "version": "7.19.6", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.19.6.tgz", - "integrity": "sha512-D2Ue4KHpc6Ys2+AxpIx1BZ8+UegLLLE2p3KJEuJRKmokHOtl49jQ5ny1773KsGLZs8MQvBidAF6yWUJxRqtKtg==", - "peer": true, - "requires": { - "@ampproject/remapping": "^2.1.0", - "@babel/code-frame": "^7.18.6", - "@babel/generator": "^7.19.6", - "@babel/helper-compilation-targets": "^7.19.3", - "@babel/helper-module-transforms": "^7.19.6", - "@babel/helpers": "^7.19.4", - "@babel/parser": "^7.19.6", - "@babel/template": "^7.18.10", - "@babel/traverse": "^7.19.6", - "@babel/types": "^7.19.4", - "convert-source-map": "^1.7.0", - "debug": "^4.1.0", - "gensync": "^1.0.0-beta.2", - "json5": "^2.2.1", - "semver": "^6.3.0" - }, + "node_modules/truffle-hdwallet-provider/node_modules/oboe": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/oboe/-/oboe-2.1.4.tgz", + "integrity": "sha512-ymBJ4xSC6GBXLT9Y7lirj+xbqBLa+jADGJldGEYG7u8sZbS9GyG+u1Xk9c5cbriKwSpCg41qUhPjvU5xOpvIyQ==", "dependencies": { - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "peer": true - } + "http-https": "^1.0.0" } }, - "@babel/generator": { - "version": "7.19.6", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.19.6.tgz", - "integrity": "sha512-oHGRUQeoX1QrKeJIKVe0hwjGqNnVYsM5Nep5zo0uE0m42sLH+Fsd2pStJ5sRM1bNyTUUoz0pe2lTeMJrb/taTA==", - "peer": true, - "requires": { - "@babel/types": "^7.19.4", - "@jridgewell/gen-mapping": "^0.3.2", - "jsesc": "^2.5.1" - }, - "dependencies": { - "@jridgewell/gen-mapping": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.2.tgz", - "integrity": "sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A==", - "peer": true, - "requires": { - "@jridgewell/set-array": "^1.0.1", - "@jridgewell/sourcemap-codec": "^1.4.10", - "@jridgewell/trace-mapping": "^0.3.9" - } - } + "node_modules/truffle-hdwallet-provider/node_modules/p-cancelable": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-1.1.0.tgz", + "integrity": "sha512-s73XxOZ4zpt1edZYZzvhqFa6uvQc1vwUa0K0BdtIZgQMAJj9IbebH+JkgKZc9h+B05PKHLOTl4ajG1BmNrVZlw==", + "engines": { + "node": ">=6" } }, - "@babel/helper-compilation-targets": { - "version": "7.19.3", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.19.3.tgz", - "integrity": "sha512-65ESqLGyGmLvgR0mst5AdW1FkNlj9rQsCKduzEoEPhBCDFGXvz2jW6bXFG6i0/MrV2s7hhXjjb2yAzcPuQlLwg==", - "requires": { - "@babel/compat-data": "^7.19.3", - "@babel/helper-validator-option": "^7.18.6", - "browserslist": "^4.21.3", - "semver": "^6.3.0" - }, - "dependencies": { - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" - } + "node_modules/truffle-hdwallet-provider/node_modules/prepend-http": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-1.0.4.tgz", + "integrity": "sha512-PhmXi5XmoyKw1Un4E+opM2KcsJInDvKyuOumcjjw3waw86ZNjHwVUOOWLc4bCzLdcKNaWBH9e99sbWzDQsVaYg==", + "engines": { + "node": ">=0.10.0" } }, - "@babel/helper-define-polyfill-provider": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.3.3.tgz", - "integrity": "sha512-z5aQKU4IzbqCC1XH0nAqfsFLMVSo22SBKUc0BxGrLkolTdPTructy0ToNnlO2zA4j9Q/7pjMZf0DSY+DSTYzww==", - "requires": { - "@babel/helper-compilation-targets": "^7.17.7", - "@babel/helper-plugin-utils": "^7.16.7", - "debug": "^4.1.1", - "lodash.debounce": "^4.0.8", - "resolve": "^1.14.2", - "semver": "^6.1.2" - }, + "node_modules/truffle-hdwallet-provider/node_modules/responselike": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/responselike/-/responselike-1.0.2.tgz", + "integrity": "sha512-/Fpe5guzJk1gPqdJLJR5u7eG/gNY4nImjbRDaVWVMRhne55TCmj2i9Q+54PBRfatRC8v/rIiv9BN0pMd9OV5EQ==", "dependencies": { - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" - } + "lowercase-keys": "^1.0.0" } }, - "@babel/helper-environment-visitor": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.18.9.tgz", - "integrity": "sha512-3r/aACDJ3fhQ/EVgFy0hpj8oHyHpQc+LPtJoY9SzTThAsStm4Ptegq92vqKoE3vD706ZVFWITnMnxucw+S9Ipg==", - "peer": true + "node_modules/truffle-hdwallet-provider/node_modules/scrypt-js": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/scrypt-js/-/scrypt-js-2.0.3.tgz", + "integrity": "sha512-d8DzQxNivoNDogyYmb/9RD5mEQE/Q7vG2dLDUgvfPmKL9xCVzgqUntOdS0me9Cq9Sh9VxIZuoNEFcsfyXRnyUw==" }, - "@babel/helper-function-name": { - "version": "7.19.0", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.19.0.tgz", - "integrity": "sha512-WAwHBINyrpqywkUH0nTnNgI5ina5TFn85HKS0pbPDfxFfhyR/aNQEn4hGi1P1JyT//I0t4OgXUlofzWILRvS5w==", - "peer": true, - "requires": { - "@babel/template": "^7.18.10", - "@babel/types": "^7.19.0" + "node_modules/truffle-hdwallet-provider/node_modules/semver": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.2.0.tgz", + "integrity": "sha512-jdFC1VdUGT/2Scgbimf7FSx9iJLXoqfglSF+gJeuNWVpiE37OIbc1jywR/GJyFdz3mnkz2/id0L0J/cr0izR5A==", + "bin": { + "semver": "bin/semver.js" } }, - "@babel/helper-hoist-variables": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.18.6.tgz", - "integrity": "sha512-UlJQPkFqFULIcyW5sbzgbkxn2FKRgwWiRexcuaR8RNJRy8+LLveqPjwZV/bwrLZCN0eUHD/x8D0heK1ozuoo6Q==", - "peer": true, - "requires": { - "@babel/types": "^7.18.6" + "node_modules/truffle-hdwallet-provider/node_modules/swarm-js": { + "version": "0.1.39", + "resolved": "https://registry.npmjs.org/swarm-js/-/swarm-js-0.1.39.tgz", + "integrity": "sha512-QLMqL2rzF6n5s50BptyD6Oi0R1aWlJC5Y17SRIVXRj6OR1DRIPM7nepvrxxkjA1zNzFz6mUOMjfeqeDaWB7OOg==", + "dependencies": { + "bluebird": "^3.5.0", + "buffer": "^5.0.5", + "decompress": "^4.0.0", + "eth-lib": "^0.1.26", + "fs-extra": "^4.0.2", + "got": "^7.1.0", + "mime-types": "^2.1.16", + "mkdirp-promise": "^5.0.1", + "mock-fs": "^4.1.0", + "setimmediate": "^1.0.5", + "tar": "^4.0.2", + "xhr-request-promise": "^0.1.2" } }, - "@babel/helper-module-imports": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.18.6.tgz", - "integrity": "sha512-0NFvs3VkuSYbFi1x2Vd6tKrywq+z/cLeYC/RJNFrIX/30Bf5aiGYbtvGXolEktzJH8o5E5KJ3tT+nkxuuZFVlA==", - "requires": { - "@babel/types": "^7.18.6" + "node_modules/truffle-hdwallet-provider/node_modules/swarm-js/node_modules/get-stream": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz", + "integrity": "sha512-GlhdIUuVakc8SJ6kK0zAFbiGzRFzNnY4jUuEbV9UROo4Y+0Ny4fjvcZFVTeDA4odpFyOQzaw6hXukJSq/f28sQ==", + "engines": { + "node": ">=4" } }, - "@babel/helper-module-transforms": { - "version": "7.19.6", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.19.6.tgz", - "integrity": "sha512-fCmcfQo/KYr/VXXDIyd3CBGZ6AFhPFy1TfSEJ+PilGVlQT6jcbqtHAM4C1EciRqMza7/TpOUZliuSH+U6HAhJw==", - "peer": true, - "requires": { - "@babel/helper-environment-visitor": "^7.18.9", - "@babel/helper-module-imports": "^7.18.6", - "@babel/helper-simple-access": "^7.19.4", - "@babel/helper-split-export-declaration": "^7.18.6", - "@babel/helper-validator-identifier": "^7.19.1", - "@babel/template": "^7.18.10", - "@babel/traverse": "^7.19.6", - "@babel/types": "^7.19.4" + "node_modules/truffle-hdwallet-provider/node_modules/swarm-js/node_modules/got": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/got/-/got-7.1.0.tgz", + "integrity": "sha512-Y5WMo7xKKq1muPsxD+KmrR8DH5auG7fBdDVueZwETwV6VytKyU9OX/ddpq2/1hp1vIPvVb4T81dKQz3BivkNLw==", + "dependencies": { + "decompress-response": "^3.2.0", + "duplexer3": "^0.1.4", + "get-stream": "^3.0.0", + "is-plain-obj": "^1.1.0", + "is-retry-allowed": "^1.0.0", + "is-stream": "^1.0.0", + "isurl": "^1.0.0-alpha5", + "lowercase-keys": "^1.0.0", + "p-cancelable": "^0.3.0", + "p-timeout": "^1.1.1", + "safe-buffer": "^5.0.1", + "timed-out": "^4.0.0", + "url-parse-lax": "^1.0.0", + "url-to-options": "^1.0.1" + }, + "engines": { + "node": ">=4" } }, - "@babel/helper-plugin-utils": { - "version": "7.19.0", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.19.0.tgz", - "integrity": "sha512-40Ryx7I8mT+0gaNxm8JGTZFUITNqdLAgdg0hXzeVZxVD6nFsdhQvip6v8dqkRHzsz1VFpFAaOCHNn0vKBL7Czw==" + "node_modules/truffle-hdwallet-provider/node_modules/swarm-js/node_modules/p-cancelable": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-0.3.0.tgz", + "integrity": "sha512-RVbZPLso8+jFeq1MfNvgXtCRED2raz/dKpacfTNxsx6pLEpEomM7gah6VeHSYV3+vo0OAi4MkArtQcWWXuQoyw==", + "engines": { + "node": ">=4" + } }, - "@babel/helper-simple-access": { - "version": "7.19.4", - "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.19.4.tgz", - "integrity": "sha512-f9Xq6WqBFqaDfbCzn2w85hwklswz5qsKlh7f08w4Y9yhJHpnNC0QemtSkK5YyOY8kPGvyiwdzZksGUhnGdaUIg==", - "peer": true, - "requires": { - "@babel/types": "^7.19.4" + "node_modules/truffle-hdwallet-provider/node_modules/swarm-js/node_modules/url-parse-lax": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-1.0.0.tgz", + "integrity": "sha512-BVA4lR5PIviy2PMseNd2jbFQ+jwSwQGdJejf5ctd1rEXt0Ypd7yanUK9+lYechVlN5VaTJGsu2U/3MDDu6KgBA==", + "dependencies": { + "prepend-http": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" } }, - "@babel/helper-split-export-declaration": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.18.6.tgz", - "integrity": "sha512-bde1etTx6ZyTmobl9LLMMQsaizFVZrquTEHOqKeQESMKo4PlObf+8+JA25ZsIpZhT/WEd39+vOdLXAFG/nELpA==", - "peer": true, - "requires": { - "@babel/types": "^7.18.6" + "node_modules/truffle-hdwallet-provider/node_modules/underscore": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.9.1.tgz", + "integrity": "sha512-5/4etnCkd9c8gwgowi5/om/mYO5ajCaOgdzj/oW+0eQV9WxKBDZw5+ycmKmeaTXjInS/W0BzpGLo2xR2aBwZdg==" + }, + "node_modules/truffle-hdwallet-provider/node_modules/universalify": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", + "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", + "engines": { + "node": ">= 4.0.0" } }, - "@babel/helper-string-parser": { - "version": "7.19.4", - "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.19.4.tgz", - "integrity": "sha512-nHtDoQcuqFmwYNYPz3Rah5ph2p8PFeFCsZk9A/48dPc/rGocJ5J3hAAZ7pb76VWX3fZKu+uEr/FhH5jLx7umrw==" + "node_modules/truffle-hdwallet-provider/node_modules/uuid": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-2.0.1.tgz", + "integrity": "sha512-nWg9+Oa3qD2CQzHIP4qKUqwNfzKn8P0LtFhotaCTFchsV7ZfDhAybeip/HZVeMIpZi9JgY1E3nUlwaCmZT1sEg==", + "deprecated": "Please upgrade to version 7 or higher. Older versions may use Math.random() in certain circumstances, which is known to be problematic. See https://v8.dev/blog/math-random for details." }, - "@babel/helper-validator-identifier": { - "version": "7.19.1", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.19.1.tgz", - "integrity": "sha512-awrNfaMtnHUr653GgGEs++LlAvW6w+DcPrOliSMXWCKo597CwL5Acf/wWdNkf/tfEQE3mjkeD1YOVZOUV/od1w==" + "node_modules/truffle-hdwallet-provider/node_modules/web3": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/web3/-/web3-1.2.1.tgz", + "integrity": "sha512-nNMzeCK0agb5i/oTWNdQ1aGtwYfXzHottFP2Dz0oGIzavPMGSKyVlr8ibVb1yK5sJBjrWVnTdGaOC2zKDFuFRw==", + "dependencies": { + "web3-bzz": "1.2.1", + "web3-core": "1.2.1", + "web3-eth": "1.2.1", + "web3-eth-personal": "1.2.1", + "web3-net": "1.2.1", + "web3-shh": "1.2.1", + "web3-utils": "1.2.1" + }, + "engines": { + "node": ">=8.0.0" + } }, - "@babel/helper-validator-option": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.18.6.tgz", - "integrity": "sha512-XO7gESt5ouv/LRJdrVjkShckw6STTaB7l9BrpBaAHDeF5YZT+01PCwmR0SJHnkW6i8OwW/EVWRShfi4j2x+KQw==" + "node_modules/truffle-hdwallet-provider/node_modules/web3-bzz": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/web3-bzz/-/web3-bzz-1.2.1.tgz", + "integrity": "sha512-LdOO44TuYbGIPfL4ilkuS89GQovxUpmLz6C1UC7VYVVRILeZS740FVB3j9V4P4FHUk1RenaDfKhcntqgVCHtjw==", + "dependencies": { + "got": "9.6.0", + "swarm-js": "0.1.39", + "underscore": "1.9.1" + }, + "engines": { + "node": ">=8.0.0" + } }, - "@babel/helpers": { - "version": "7.19.4", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.19.4.tgz", - "integrity": "sha512-G+z3aOx2nfDHwX/kyVii5fJq+bgscg89/dJNWpYeKeBv3v9xX8EIabmx1k6u9LS04H7nROFVRVK+e3k0VHp+sw==", - "peer": true, - "requires": { - "@babel/template": "^7.18.10", - "@babel/traverse": "^7.19.4", - "@babel/types": "^7.19.4" + "node_modules/truffle-hdwallet-provider/node_modules/web3-core": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/web3-core/-/web3-core-1.2.1.tgz", + "integrity": "sha512-5ODwIqgl8oIg/0+Ai4jsLxkKFWJYE0uLuE1yUKHNVCL4zL6n3rFjRMpKPokd6id6nJCNgeA64KdWQ4XfpnjdMg==", + "dependencies": { + "web3-core-helpers": "1.2.1", + "web3-core-method": "1.2.1", + "web3-core-requestmanager": "1.2.1", + "web3-utils": "1.2.1" + }, + "engines": { + "node": ">=8.0.0" } }, - "@babel/highlight": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.18.6.tgz", - "integrity": "sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g==", - "peer": true, - "requires": { - "@babel/helper-validator-identifier": "^7.18.6", - "chalk": "^2.0.0", - "js-tokens": "^4.0.0" + "node_modules/truffle-hdwallet-provider/node_modules/web3-core-helpers": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/web3-core-helpers/-/web3-core-helpers-1.2.1.tgz", + "integrity": "sha512-Gx3sTEajD5r96bJgfuW377PZVFmXIH4TdqDhgGwd2lZQCcMi+DA4TgxJNJGxn0R3aUVzyyE76j4LBrh412mXrw==", + "dependencies": { + "underscore": "1.9.1", + "web3-eth-iban": "1.2.1", + "web3-utils": "1.2.1" }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/truffle-hdwallet-provider/node_modules/web3-core-method": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/web3-core-method/-/web3-core-method-1.2.1.tgz", + "integrity": "sha512-Ghg2WS23qi6Xj8Od3VCzaImLHseEA7/usvnOItluiIc5cKs00WYWsNy2YRStzU9a2+z8lwQywPYp0nTzR/QXdQ==", "dependencies": { - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "peer": true, - "requires": { - "color-convert": "^1.9.0" - } - }, - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "peer": true, - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - } - }, - "color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "peer": true, - "requires": { - "color-name": "1.1.3" - } - }, - "color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", - "peer": true - }, - "escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", - "peer": true - }, - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", - "peer": true - }, - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "peer": true, - "requires": { - "has-flag": "^3.0.0" - } - } + "underscore": "1.9.1", + "web3-core-helpers": "1.2.1", + "web3-core-promievent": "1.2.1", + "web3-core-subscriptions": "1.2.1", + "web3-utils": "1.2.1" + }, + "engines": { + "node": ">=8.0.0" } }, - "@babel/parser": { - "version": "7.19.6", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.19.6.tgz", - "integrity": "sha512-h1IUp81s2JYJ3mRkdxJgs4UvmSsRvDrx5ICSJbPvtWYv5i1nTBGcBpnog+89rAFMwvvru6E5NUHdBe01UeSzYA==", - "peer": true - }, - "@babel/plugin-transform-runtime": { - "version": "7.19.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.19.6.tgz", - "integrity": "sha512-PRH37lz4JU156lYFW1p8OxE5i7d6Sl/zV58ooyr+q1J1lnQPyg5tIiXlIwNVhJaY4W3TmOtdc8jqdXQcB1v5Yw==", - "requires": { - "@babel/helper-module-imports": "^7.18.6", - "@babel/helper-plugin-utils": "^7.19.0", - "babel-plugin-polyfill-corejs2": "^0.3.3", - "babel-plugin-polyfill-corejs3": "^0.6.0", - "babel-plugin-polyfill-regenerator": "^0.4.1", - "semver": "^6.3.0" - }, + "node_modules/truffle-hdwallet-provider/node_modules/web3-core-promievent": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/web3-core-promievent/-/web3-core-promievent-1.2.1.tgz", + "integrity": "sha512-IVUqgpIKoeOYblwpex4Hye6npM0aMR+kU49VP06secPeN0rHMyhGF0ZGveWBrGvf8WDPI7jhqPBFIC6Jf3Q3zw==", "dependencies": { - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" - } + "any-promise": "1.3.0", + "eventemitter3": "3.1.2" + }, + "engines": { + "node": ">=8.0.0" } }, - "@babel/runtime": { - "version": "7.21.5", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.21.5.tgz", - "integrity": "sha512-8jI69toZqqcsnqGGqwGS4Qb1VwLOEp4hz+CXPywcvjs60u3B4Pom/U/7rm4W8tMOYEB+E9wgD0mW1l3r8qlI9Q==", - "requires": { - "regenerator-runtime": "^0.13.11" + "node_modules/truffle-hdwallet-provider/node_modules/web3-core-requestmanager": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/web3-core-requestmanager/-/web3-core-requestmanager-1.2.1.tgz", + "integrity": "sha512-xfknTC69RfYmLKC+83Jz73IC3/sS2ZLhGtX33D4Q5nQ8yc39ElyAolxr9sJQS8kihOcM6u4J+8gyGMqsLcpIBg==", + "dependencies": { + "underscore": "1.9.1", + "web3-core-helpers": "1.2.1", + "web3-providers-http": "1.2.1", + "web3-providers-ipc": "1.2.1", + "web3-providers-ws": "1.2.1" + }, + "engines": { + "node": ">=8.0.0" } }, - "@babel/template": { - "version": "7.18.10", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.18.10.tgz", - "integrity": "sha512-TI+rCtooWHr3QJ27kJxfjutghu44DLnasDMwpDqCXVTal9RLp3RSYNh4NdBrRP2cQAoG9A8juOQl6P6oZG4JxA==", - "peer": true, - "requires": { - "@babel/code-frame": "^7.18.6", - "@babel/parser": "^7.18.10", - "@babel/types": "^7.18.10" + "node_modules/truffle-hdwallet-provider/node_modules/web3-core-subscriptions": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/web3-core-subscriptions/-/web3-core-subscriptions-1.2.1.tgz", + "integrity": "sha512-nmOwe3NsB8V8UFsY1r+sW6KjdOS68h8nuh7NzlWxBQT/19QSUGiERRTaZXWu5BYvo1EoZRMxCKyCQpSSXLc08g==", + "dependencies": { + "eventemitter3": "3.1.2", + "underscore": "1.9.1", + "web3-core-helpers": "1.2.1" + }, + "engines": { + "node": ">=8.0.0" } }, - "@babel/traverse": { - "version": "7.19.6", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.19.6.tgz", - "integrity": "sha512-6l5HrUCzFM04mfbG09AagtYyR2P0B71B1wN7PfSPiksDPz2k5H9CBC1tcZpz2M8OxbKTPccByoOJ22rUKbpmQQ==", - "peer": true, - "requires": { - "@babel/code-frame": "^7.18.6", - "@babel/generator": "^7.19.6", - "@babel/helper-environment-visitor": "^7.18.9", - "@babel/helper-function-name": "^7.19.0", - "@babel/helper-hoist-variables": "^7.18.6", - "@babel/helper-split-export-declaration": "^7.18.6", - "@babel/parser": "^7.19.6", - "@babel/types": "^7.19.4", - "debug": "^4.1.0", - "globals": "^11.1.0" + "node_modules/truffle-hdwallet-provider/node_modules/web3-eth": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/web3-eth/-/web3-eth-1.2.1.tgz", + "integrity": "sha512-/2xly4Yry5FW1i+uygPjhfvgUP/MS/Dk+PDqmzp5M88tS86A+j8BzKc23GrlA8sgGs0645cpZK/999LpEF5UdA==", + "dependencies": { + "underscore": "1.9.1", + "web3-core": "1.2.1", + "web3-core-helpers": "1.2.1", + "web3-core-method": "1.2.1", + "web3-core-subscriptions": "1.2.1", + "web3-eth-abi": "1.2.1", + "web3-eth-accounts": "1.2.1", + "web3-eth-contract": "1.2.1", + "web3-eth-ens": "1.2.1", + "web3-eth-iban": "1.2.1", + "web3-eth-personal": "1.2.1", + "web3-net": "1.2.1", + "web3-utils": "1.2.1" + }, + "engines": { + "node": ">=8.0.0" } }, - "@babel/types": { - "version": "7.19.4", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.19.4.tgz", - "integrity": "sha512-M5LK7nAeS6+9j7hAq+b3fQs+pNfUtTGq+yFFfHnauFA8zQtLRfmuipmsKDKKLuyG+wC8ABW43A153YNawNTEtw==", - "requires": { - "@babel/helper-string-parser": "^7.19.4", - "@babel/helper-validator-identifier": "^7.19.1", - "to-fast-properties": "^2.0.0" + "node_modules/truffle-hdwallet-provider/node_modules/web3-eth-abi": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/web3-eth-abi/-/web3-eth-abi-1.2.1.tgz", + "integrity": "sha512-jI/KhU2a/DQPZXHjo2GW0myEljzfiKOn+h1qxK1+Y9OQfTcBMxrQJyH5AP89O6l6NZ1QvNdq99ThAxBFoy5L+g==", + "dependencies": { + "ethers": "4.0.0-beta.3", + "underscore": "1.9.1", + "web3-utils": "1.2.1" + }, + "engines": { + "node": ">=8.0.0" } }, - "@balena/dockerignore": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@balena/dockerignore/-/dockerignore-1.0.2.tgz", - "integrity": "sha512-wMue2Sy4GAVTk6Ic4tJVcnfdau+gx2EnG7S+uAEe+TWJFqE4YoWN4/H8MSLj4eYJKxGg26lZwboEniNiNwZQ6Q==" - }, - "@chainlink/contracts": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/@chainlink/contracts/-/contracts-0.6.1.tgz", - "integrity": "sha512-EuwijGexttw0UjfrW+HygwhQIrGAbqpf1ue28R55HhWMHBzphEH0PhWm8DQmFfj5OZNy8Io66N4L0nStkZ3QKQ==", - "requires": { - "@eth-optimism/contracts": "^0.5.21", - "@openzeppelin/contracts": "~4.3.3", - "@openzeppelin/contracts-upgradeable": "^4.7.3", - "@openzeppelin/contracts-v0.7": "npm:@openzeppelin/contracts@v3.4.2" - }, + "node_modules/truffle-hdwallet-provider/node_modules/web3-eth-accounts": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/web3-eth-accounts/-/web3-eth-accounts-1.2.1.tgz", + "integrity": "sha512-26I4qq42STQ8IeKUyur3MdQ1NzrzCqPsmzqpux0j6X/XBD7EjZ+Cs0lhGNkSKH5dI3V8CJasnQ5T1mNKeWB7nQ==", "dependencies": { - "@openzeppelin/contracts": { - "version": "4.3.3", - "resolved": "https://registry.npmjs.org/@openzeppelin/contracts/-/contracts-4.3.3.tgz", - "integrity": "sha512-tDBopO1c98Yk7Cv/PZlHqrvtVjlgK5R4J6jxLwoO7qxK4xqOiZG+zSkIvGFpPZ0ikc3QOED3plgdqjgNTnBc7g==" - } + "any-promise": "1.3.0", + "crypto-browserify": "3.12.0", + "eth-lib": "0.2.7", + "scryptsy": "2.1.0", + "semver": "6.2.0", + "underscore": "1.9.1", + "uuid": "3.3.2", + "web3-core": "1.2.1", + "web3-core-helpers": "1.2.1", + "web3-core-method": "1.2.1", + "web3-utils": "1.2.1" + }, + "engines": { + "node": ">=8.0.0" } }, - "@chainsafe/as-sha256": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/@chainsafe/as-sha256/-/as-sha256-0.3.1.tgz", - "integrity": "sha512-hldFFYuf49ed7DAakWVXSJODuq3pzJEguD8tQ7h+sGkM18vja+OFoJI9krnGmgzyuZC2ETX0NOIcCTy31v2Mtg==" - }, - "@chainsafe/persistent-merkle-tree": { - "version": "0.4.2", - "resolved": "https://registry.npmjs.org/@chainsafe/persistent-merkle-tree/-/persistent-merkle-tree-0.4.2.tgz", - "integrity": "sha512-lLO3ihKPngXLTus/L7WHKaw9PnNJWizlOF1H9NNzHP6Xvh82vzg9F2bzkXhYIFshMZ2gTCEz8tq6STe7r5NDfQ==", - "requires": { - "@chainsafe/as-sha256": "^0.3.1" + "node_modules/truffle-hdwallet-provider/node_modules/web3-eth-accounts/node_modules/elliptic": { + "version": "6.5.4", + "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.4.tgz", + "integrity": "sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ==", + "dependencies": { + "bn.js": "^4.11.9", + "brorand": "^1.1.0", + "hash.js": "^1.0.0", + "hmac-drbg": "^1.0.1", + "inherits": "^2.0.4", + "minimalistic-assert": "^1.0.1", + "minimalistic-crypto-utils": "^1.0.1" } }, - "@chainsafe/ssz": { - "version": "0.9.4", - "resolved": "https://registry.npmjs.org/@chainsafe/ssz/-/ssz-0.9.4.tgz", - "integrity": "sha512-77Qtg2N1ayqs4Bg/wvnWfg5Bta7iy7IRh8XqXh7oNMeP2HBbBwx8m6yTpA8p0EHItWPEBkgZd5S5/LSlp3GXuQ==", - "requires": { - "@chainsafe/as-sha256": "^0.3.1", - "@chainsafe/persistent-merkle-tree": "^0.4.2", - "case": "^1.6.3" + "node_modules/truffle-hdwallet-provider/node_modules/web3-eth-accounts/node_modules/eth-lib": { + "version": "0.2.7", + "resolved": "https://registry.npmjs.org/eth-lib/-/eth-lib-0.2.7.tgz", + "integrity": "sha512-VqEBQKH92jNsaE8lG9CTq8M/bc12gdAfb5MY8Ro1hVyXkh7rOtY3m5tRHK3Hus5HqIAAwU2ivcUjTLVwsvf/kw==", + "dependencies": { + "bn.js": "^4.11.6", + "elliptic": "^6.4.0", + "xhr-request-promise": "^0.1.2" } }, - "@colors/colors": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/@colors/colors/-/colors-1.5.0.tgz", - "integrity": "sha512-ooWCrlZP11i8GImSjTHYHLkvFDP48nS4+204nGb1RiX/WXYHmJA2III9/e2DWVabCESdW7hBAEzHRqUn9OUVvQ==", - "optional": true + "node_modules/truffle-hdwallet-provider/node_modules/web3-eth-accounts/node_modules/uuid": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.3.2.tgz", + "integrity": "sha512-yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA==", + "deprecated": "Please upgrade to version 7 or higher. Older versions may use Math.random() in certain circumstances, which is known to be problematic. See https://v8.dev/blog/math-random for details.", + "bin": { + "uuid": "bin/uuid" + } }, - "@ensdomains/address-encoder": { - "version": "0.1.9", - "resolved": "https://registry.npmjs.org/@ensdomains/address-encoder/-/address-encoder-0.1.9.tgz", - "integrity": "sha512-E2d2gP4uxJQnDu2Kfg1tHNspefzbLT8Tyjrm5sEuim32UkU2sm5xL4VXtgc2X33fmPEw9+jUMpGs4veMbf+PYg==", - "requires": { - "bech32": "^1.1.3", - "blakejs": "^1.1.0", - "bn.js": "^4.11.8", - "bs58": "^4.0.1", - "crypto-addr-codec": "^0.1.7", - "nano-base32": "^1.0.1", - "ripemd160": "^2.0.2" - }, + "node_modules/truffle-hdwallet-provider/node_modules/web3-eth-contract": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/web3-eth-contract/-/web3-eth-contract-1.2.1.tgz", + "integrity": "sha512-kYFESbQ3boC9bl2rYVghj7O8UKMiuKaiMkxvRH5cEDHil8V7MGEGZNH0slSdoyeftZVlaWSMqkRP/chfnKND0g==", "dependencies": { - "bn.js": { - "version": "4.12.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==" - } + "underscore": "1.9.1", + "web3-core": "1.2.1", + "web3-core-helpers": "1.2.1", + "web3-core-method": "1.2.1", + "web3-core-promievent": "1.2.1", + "web3-core-subscriptions": "1.2.1", + "web3-eth-abi": "1.2.1", + "web3-utils": "1.2.1" + }, + "engines": { + "node": ">=8.0.0" } }, - "@ensdomains/ens": { - "version": "0.4.5", - "resolved": "https://registry.npmjs.org/@ensdomains/ens/-/ens-0.4.5.tgz", - "integrity": "sha512-JSvpj1iNMFjK6K+uVl4unqMoa9rf5jopb8cya5UGBWz23Nw8hSNT7efgUx4BTlAPAgpNlEioUfeTyQ6J9ZvTVw==", - "requires": { - "bluebird": "^3.5.2", - "eth-ens-namehash": "^2.0.8", - "solc": "^0.4.20", - "testrpc": "0.0.1", - "web3-utils": "^1.0.0-beta.31" - }, + "node_modules/truffle-hdwallet-provider/node_modules/web3-eth-ens": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/web3-eth-ens/-/web3-eth-ens-1.2.1.tgz", + "integrity": "sha512-lhP1kFhqZr2nnbu3CGIFFrAnNxk2veXpOXBY48Tub37RtobDyHijHgrj+xTh+mFiPokyrapVjpFsbGa+Xzye4Q==", "dependencies": { - "ansi-regex": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA==" - }, - "camelcase": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-3.0.0.tgz", - "integrity": "sha512-4nhGqUkc4BqbBBB4Q6zLuD7lzzrHYrjKGeYaEji/3tFR5VdJu9v+LilhGIVe8wxEJPPOeWo7eg8dwY13TZ1BNg==" - }, - "cliui": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-3.2.0.tgz", - "integrity": "sha512-0yayqDxWQbqk3ojkYqUKqaAQ6AfNKeKWRNA8kR0WXzAsdHpP4BIaOmMAG87JGuO6qcobyW4GjxHd9PmhEd+T9w==", - "requires": { - "string-width": "^1.0.1", - "strip-ansi": "^3.0.1", - "wrap-ansi": "^2.0.0" - } - }, - "decamelize": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", - "integrity": "sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==" - }, - "fs-extra": { - "version": "0.30.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-0.30.0.tgz", - "integrity": "sha512-UvSPKyhMn6LEd/WpUaV9C9t3zATuqoqfWc3QdPhPLb58prN9tqYPlPWi8Krxi44loBoUzlobqZ3+8tGpxxSzwA==", - "requires": { - "graceful-fs": "^4.1.2", - "jsonfile": "^2.1.0", - "klaw": "^1.0.0", - "path-is-absolute": "^1.0.0", - "rimraf": "^2.2.8" - } - }, - "get-caller-file": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-1.0.3.tgz", - "integrity": "sha512-3t6rVToeoZfYSGd8YoLFR2DJkiQrIiUrGcjvFX2mDw3bn6k2OtwHN0TNCLbBO+w8qTvimhDkv+LSscbJY1vE6w==" - }, - "is-fullwidth-code-point": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", - "integrity": "sha512-1pqUqRjkhPJ9miNq9SwMfdvi6lBJcd6eFxvfaivQhaH3SgisfiuudvFntdKOmxuee/77l+FPjKrQjWvmPjWrRw==", - "requires": { - "number-is-nan": "^1.0.0" - } - }, - "jsonfile": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-2.4.0.tgz", - "integrity": "sha512-PKllAqbgLgxHaj8TElYymKCAgrASebJrWpTnEkOaTowt23VKXXN0sUeriJ+eh7y6ufb/CC5ap11pz71/cM0hUw==", - "requires": { - "graceful-fs": "^4.1.6" - } - }, - "require-from-string": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-1.2.1.tgz", - "integrity": "sha512-H7AkJWMobeskkttHyhTVtS0fxpFLjxhbfMa6Bk3wimP7sdPRGL3EyCg3sAQenFfAe+xQ+oAc85Nmtvq0ROM83Q==" - }, - "semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" - }, - "solc": { - "version": "0.4.26", - "resolved": "https://registry.npmjs.org/solc/-/solc-0.4.26.tgz", - "integrity": "sha512-o+c6FpkiHd+HPjmjEVpQgH7fqZ14tJpXhho+/bQXlXbliLIS/xjXb42Vxh+qQY1WCSTMQ0+a5vR9vi0MfhU6mA==", - "requires": { - "fs-extra": "^0.30.0", - "memorystream": "^0.3.1", - "require-from-string": "^1.1.0", - "semver": "^5.3.0", - "yargs": "^4.7.1" - } - }, - "string-width": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", - "integrity": "sha512-0XsVpQLnVCXHJfyEs8tC0zpTVIr5PKKsQtkT29IwupnPTjtPmQ3xT/4yCREF9hYkV/3M3kzcUTSAZT6a6h81tw==", - "requires": { - "code-point-at": "^1.0.0", - "is-fullwidth-code-point": "^1.0.0", - "strip-ansi": "^3.0.0" - } - }, - "strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha512-VhumSSbBqDTP8p2ZLKj40UjBCV4+v8bUSEpUb4KjRgWk9pbqGF4REFj6KEagidb2f/M6AzC0EmFyDNGaw9OCzg==", - "requires": { - "ansi-regex": "^2.0.0" - } - }, - "wrap-ansi": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-2.1.0.tgz", - "integrity": "sha512-vAaEaDM946gbNpH5pLVNR+vX2ht6n0Bt3GXwVB1AuAqZosOvHNF3P7wDnh8KLkSqgUh0uh77le7Owgoz+Z9XBw==", - "requires": { - "string-width": "^1.0.1", - "strip-ansi": "^3.0.1" - } - }, - "y18n": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-3.2.2.tgz", - "integrity": "sha512-uGZHXkHnhF0XeeAPgnKfPv1bgKAYyVvmNL1xlKsPYZPaIHxGti2hHqvOCQv71XMsLxu1QjergkqogUnms5D3YQ==" - }, - "yargs": { - "version": "4.8.1", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-4.8.1.tgz", - "integrity": "sha512-LqodLrnIDM3IFT+Hf/5sxBnEGECrfdC1uIbgZeJmESCSo4HoCAaKEus8MylXHAkdacGc0ye+Qa+dpkuom8uVYA==", - "requires": { - "cliui": "^3.2.0", - "decamelize": "^1.1.1", - "get-caller-file": "^1.0.1", - "lodash.assign": "^4.0.3", - "os-locale": "^1.4.0", - "read-pkg-up": "^1.0.1", - "require-directory": "^2.1.1", - "require-main-filename": "^1.0.1", - "set-blocking": "^2.0.0", - "string-width": "^1.0.1", - "which-module": "^1.0.0", - "window-size": "^0.2.0", - "y18n": "^3.2.1", - "yargs-parser": "^2.4.1" - } - }, - "yargs-parser": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-2.4.1.tgz", - "integrity": "sha512-9pIKIJhnI5tonzG6OnCFlz/yln8xHYcGl+pn3xR0Vzff0vzN1PbNRaelgfgRUwZ3s4i3jvxT9WhmUGL4whnasA==", - "requires": { - "camelcase": "^3.0.0", - "lodash.assign": "^4.0.6" - } - } + "eth-ens-namehash": "2.0.8", + "underscore": "1.9.1", + "web3-core": "1.2.1", + "web3-core-helpers": "1.2.1", + "web3-core-promievent": "1.2.1", + "web3-eth-abi": "1.2.1", + "web3-eth-contract": "1.2.1", + "web3-utils": "1.2.1" + }, + "engines": { + "node": ">=8.0.0" } }, - "@ensdomains/ensjs": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/@ensdomains/ensjs/-/ensjs-2.1.0.tgz", - "integrity": "sha512-GRbGPT8Z/OJMDuxs75U/jUNEC0tbL0aj7/L/QQznGYKm/tiasp+ndLOaoULy9kKJFC0TBByqfFliEHDgoLhyog==", - "requires": { - "@babel/runtime": "^7.4.4", - "@ensdomains/address-encoder": "^0.1.7", - "@ensdomains/ens": "0.4.5", - "@ensdomains/resolver": "0.2.4", - "content-hash": "^2.5.2", - "eth-ens-namehash": "^2.0.8", - "ethers": "^5.0.13", - "js-sha3": "^0.8.0" + "node_modules/truffle-hdwallet-provider/node_modules/web3-eth-iban": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/web3-eth-iban/-/web3-eth-iban-1.2.1.tgz", + "integrity": "sha512-9gkr4QPl1jCU+wkgmZ8EwODVO3ovVj6d6JKMos52ggdT2YCmlfvFVF6wlGLwi0VvNa/p+0BjJzaqxnnG/JewjQ==", + "dependencies": { + "bn.js": "4.11.8", + "web3-utils": "1.2.1" + }, + "engines": { + "node": ">=8.0.0" } }, - "@ensdomains/resolver": { - "version": "0.2.4", - "resolved": "https://registry.npmjs.org/@ensdomains/resolver/-/resolver-0.2.4.tgz", - "integrity": "sha512-bvaTH34PMCbv6anRa9I/0zjLJgY4EuznbEMgbV77JBCQ9KNC46rzi0avuxpOfu+xDjPEtSFGqVEOr5GlUSGudA==" + "node_modules/truffle-hdwallet-provider/node_modules/web3-eth-iban/node_modules/bn.js": { + "version": "4.11.8", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.8.tgz", + "integrity": "sha512-ItfYfPLkWHUjckQCk8xC+LwxgK8NYcXywGigJgSwOP8Y2iyWT4f2vsZnoOXTTbo+o5yXmIUJ4gn5538SO5S3gA==" }, - "@eth-optimism/contracts": { - "version": "0.5.37", - "resolved": "https://registry.npmjs.org/@eth-optimism/contracts/-/contracts-0.5.37.tgz", - "integrity": "sha512-HbNUUDIM1dUAM0hWPfGp3l9/Zte40zi8QhVbUSIwdYRA7jG7cZgbteqavrjW8wwFqxkWX9IrtA0KAR7pNlSAIQ==", - "requires": { - "@eth-optimism/core-utils": "0.10.1", - "@ethersproject/abstract-provider": "^5.7.0", - "@ethersproject/abstract-signer": "^5.7.0" + "node_modules/truffle-hdwallet-provider/node_modules/web3-eth-personal": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/web3-eth-personal/-/web3-eth-personal-1.2.1.tgz", + "integrity": "sha512-RNDVSiaSoY4aIp8+Hc7z+X72H7lMb3fmAChuSBADoEc7DsJrY/d0R5qQDK9g9t2BO8oxgLrLNyBP/9ub2Hc6Bg==", + "dependencies": { + "web3-core": "1.2.1", + "web3-core-helpers": "1.2.1", + "web3-core-method": "1.2.1", + "web3-net": "1.2.1", + "web3-utils": "1.2.1" + }, + "engines": { + "node": ">=8.0.0" } }, - "@eth-optimism/core-utils": { - "version": "0.10.1", - "resolved": "https://registry.npmjs.org/@eth-optimism/core-utils/-/core-utils-0.10.1.tgz", - "integrity": "sha512-IJvG5UtYvyz6An9QdohlCLoeB3NBFxx2lRJKlPzvYYlfugUNNCHsajRIWIwJTcPRRma0WPd46JUsKACLJDdNrA==", - "requires": { - "@ethersproject/abi": "^5.7.0", - "@ethersproject/abstract-provider": "^5.7.0", + "node_modules/truffle-hdwallet-provider/node_modules/web3-net": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/web3-net/-/web3-net-1.2.1.tgz", + "integrity": "sha512-Yt1Bs7WgnLESPe0rri/ZoPWzSy55ovioaP35w1KZydrNtQ5Yq4WcrAdhBzcOW7vAkIwrsLQsvA+hrOCy7mNauw==", + "dependencies": { + "web3-core": "1.2.1", + "web3-core-method": "1.2.1", + "web3-utils": "1.2.1" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/truffle-hdwallet-provider/node_modules/web3-providers-http": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/web3-providers-http/-/web3-providers-http-1.2.1.tgz", + "integrity": "sha512-BDtVUVolT9b3CAzeGVA/np1hhn7RPUZ6YYGB/sYky+GjeO311Yoq8SRDUSezU92x8yImSC2B+SMReGhd1zL+bQ==", + "dependencies": { + "web3-core-helpers": "1.2.1", + "xhr2-cookies": "1.1.0" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/truffle-hdwallet-provider/node_modules/web3-providers-ipc": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/web3-providers-ipc/-/web3-providers-ipc-1.2.1.tgz", + "integrity": "sha512-oPEuOCwxVx8L4CPD0TUdnlOUZwGBSRKScCz/Ws2YHdr9Ium+whm+0NLmOZjkjQp5wovQbyBzNa6zJz1noFRvFA==", + "dependencies": { + "oboe": "2.1.4", + "underscore": "1.9.1", + "web3-core-helpers": "1.2.1" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/truffle-hdwallet-provider/node_modules/web3-providers-ws": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/web3-providers-ws/-/web3-providers-ws-1.2.1.tgz", + "integrity": "sha512-oqsQXzu+ejJACVHy864WwIyw+oB21nw/pI65/sD95Zi98+/HQzFfNcIFneF1NC4bVF3VNX4YHTNq2I2o97LAiA==", + "dependencies": { + "underscore": "1.9.1", + "web3-core-helpers": "1.2.1", + "websocket": "github:web3-js/WebSocket-Node#polyfill/globalThis" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/truffle-hdwallet-provider/node_modules/web3-shh": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/web3-shh/-/web3-shh-1.2.1.tgz", + "integrity": "sha512-/3Cl04nza5kuFn25bV3FJWa0s3Vafr5BlT933h26xovQ6HIIz61LmvNQlvX1AhFL+SNJOTcQmK1SM59vcyC8bA==", + "dependencies": { + "web3-core": "1.2.1", + "web3-core-method": "1.2.1", + "web3-core-subscriptions": "1.2.1", + "web3-net": "1.2.1" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/truffle-hdwallet-provider/node_modules/web3-utils": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/web3-utils/-/web3-utils-1.2.1.tgz", + "integrity": "sha512-Mrcn3l58L+yCKz3zBryM6JZpNruWuT0OCbag8w+reeNROSGVlXzUQkU+gtAwc9JCZ7tKUyg67+2YUGqUjVcyBA==", + "dependencies": { + "bn.js": "4.11.8", + "eth-lib": "0.2.7", + "ethjs-unit": "0.1.6", + "number-to-bn": "1.7.0", + "randomhex": "0.1.5", + "underscore": "1.9.1", + "utf8": "3.0.0" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/truffle-hdwallet-provider/node_modules/web3-utils/node_modules/bn.js": { + "version": "4.11.8", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.8.tgz", + "integrity": "sha512-ItfYfPLkWHUjckQCk8xC+LwxgK8NYcXywGigJgSwOP8Y2iyWT4f2vsZnoOXTTbo+o5yXmIUJ4gn5538SO5S3gA==" + }, + "node_modules/truffle-hdwallet-provider/node_modules/web3-utils/node_modules/elliptic": { + "version": "6.5.4", + "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.4.tgz", + "integrity": "sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ==", + "dependencies": { + "bn.js": "^4.11.9", + "brorand": "^1.1.0", + "hash.js": "^1.0.0", + "hmac-drbg": "^1.0.1", + "inherits": "^2.0.4", + "minimalistic-assert": "^1.0.1", + "minimalistic-crypto-utils": "^1.0.1" + } + }, + "node_modules/truffle-hdwallet-provider/node_modules/web3-utils/node_modules/elliptic/node_modules/bn.js": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==" + }, + "node_modules/truffle-hdwallet-provider/node_modules/web3-utils/node_modules/eth-lib": { + "version": "0.2.7", + "resolved": "https://registry.npmjs.org/eth-lib/-/eth-lib-0.2.7.tgz", + "integrity": "sha512-VqEBQKH92jNsaE8lG9CTq8M/bc12gdAfb5MY8Ro1hVyXkh7rOtY3m5tRHK3Hus5HqIAAwU2ivcUjTLVwsvf/kw==", + "dependencies": { + "bn.js": "^4.11.6", + "elliptic": "^6.4.0", + "xhr-request-promise": "^0.1.2" + } + }, + "node_modules/truffle-hdwallet-provider/node_modules/websocket": { + "version": "1.0.29", + "resolved": "git+ssh://git@github.com/web3-js/WebSocket-Node.git#ef5ea2f41daf4a2113b80c9223df884b4d56c400", + "hasInstallScript": true, + "license": "Apache-2.0", + "dependencies": { + "debug": "^2.2.0", + "es5-ext": "^0.10.50", + "nan": "^2.14.0", + "typedarray-to-buffer": "^3.1.5", + "yaeti": "^0.0.6" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ts-command-line-args": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/ts-command-line-args/-/ts-command-line-args-2.5.0.tgz", + "integrity": "sha512-Ff7Xt04WWCjj/cmPO9eWTJX3qpBZWuPWyQYG1vnxJao+alWWYjwJBc5aYz3h5p5dE08A6AnpkgiCtP/0KXXBYw==", + "dev": true, + "dependencies": { + "@morgan-stanley/ts-mocking-bird": "^0.6.2", + "chalk": "^4.1.0", + "command-line-args": "^5.1.1", + "command-line-usage": "^6.1.0", + "string-format": "^2.0.0" + }, + "bin": { + "write-markdown": "dist/write-markdown.js" + } + }, + "node_modules/ts-essentials": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/ts-essentials/-/ts-essentials-7.0.3.tgz", + "integrity": "sha512-8+gr5+lqO3G84KdiTSMRLtuyJ+nTBVRKuCrK4lidMPdVeEp0uqC875uE5NMcaA7YYMN7XsNiFQuMvasF8HT/xQ==", + "dev": true, + "peerDependencies": { + "typescript": ">=3.7.0" + } + }, + "node_modules/ts-node": { + "version": "9.1.1", + "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-9.1.1.tgz", + "integrity": "sha512-hPlt7ZACERQGf03M253ytLY3dHbGNGrAq9qIHWUY9XHYl1z7wYngSr3OQ5xmui8o2AaxsONxIzjafLUiWBo1Fg==", + "optional": true, + "peer": true, + "dependencies": { + "arg": "^4.1.0", + "create-require": "^1.1.0", + "diff": "^4.0.1", + "make-error": "^1.1.1", + "source-map-support": "^0.5.17", + "yn": "3.1.1" + }, + "bin": { + "ts-node": "dist/bin.js", + "ts-node-script": "dist/bin-script.js", + "ts-node-transpile-only": "dist/bin-transpile.js", + "ts-script": "dist/bin-script-deprecated.js" + }, + "engines": { + "node": ">=10.0.0" + }, + "peerDependencies": { + "typescript": ">=2.7" + } + }, + "node_modules/ts-node/node_modules/diff": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", + "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", + "optional": true, + "peer": true, + "engines": { + "node": ">=0.3.1" + } + }, + "node_modules/tslib": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", + "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==" + }, + "node_modules/tsort": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/tsort/-/tsort-0.0.1.tgz", + "integrity": "sha512-Tyrf5mxF8Ofs1tNoxA13lFeZ2Zrbd6cKbuH3V+MQ5sb6DtBj5FjrXVsRWT8YvNAQTqNoz66dz1WsbigI22aEnw==" + }, + "node_modules/tunnel-agent": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", + "integrity": "sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==", + "dependencies": { + "safe-buffer": "^5.0.1" + }, + "engines": { + "node": "*" + } + }, + "node_modules/tweetnacl": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-1.0.3.tgz", + "integrity": "sha512-6rt+RN7aOi1nGMyC4Xa5DdYiukl2UWCbcJft7YhxReBGQD7OAM8Pbxw6YMo4r2diNEA8FEmu32YOn9rhaiE5yw==" + }, + "node_modules/tweetnacl-util": { + "version": "0.15.1", + "resolved": "https://registry.npmjs.org/tweetnacl-util/-/tweetnacl-util-0.15.1.tgz", + "integrity": "sha512-RKJBIj8lySrShN4w6i/BonWp2Z/uxwC3h4y7xsRrpP59ZboCd0GpEVsOnMDYLMmKBpYhb5TgHzZXy7wTfYFBRw==" + }, + "node_modules/type": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/type/-/type-1.2.0.tgz", + "integrity": "sha512-+5nt5AAniqsCnu2cEQQdpzCAh33kVx8n0VoFidKpB1dVVLAN/F+bgVOqOJqOnEnrhp222clB5p3vUlD+1QAnfg==" + }, + "node_modules/type-detect": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", + "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==", + "engines": { + "node": ">=4" + } + }, + "node_modules/type-fest": { + "version": "0.21.3", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", + "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/type-is": { + "version": "1.6.18", + "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", + "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", + "dependencies": { + "media-typer": "0.3.0", + "mime-types": "~2.1.24" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/typechain": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/typechain/-/typechain-8.1.1.tgz", + "integrity": "sha512-uF/sUvnXTOVF2FHKhQYnxHk4su4JjZR8vr4mA2mBaRwHTbwh0jIlqARz9XJr1tA0l7afJGvEa1dTSi4zt039LQ==", + "dev": true, + "dependencies": { + "@types/prettier": "^2.1.1", + "debug": "^4.3.1", + "fs-extra": "^7.0.0", + "glob": "7.1.7", + "js-sha3": "^0.8.0", + "lodash": "^4.17.15", + "mkdirp": "^1.0.4", + "prettier": "^2.3.1", + "ts-command-line-args": "^2.2.0", + "ts-essentials": "^7.0.1" + }, + "bin": { + "typechain": "dist/cli/cli.js" + }, + "peerDependencies": { + "typescript": ">=4.3.0" + } + }, + "node_modules/typechain/node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/typechain/node_modules/fs-extra": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-7.0.1.tgz", + "integrity": "sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==", + "dev": true, + "dependencies": { + "graceful-fs": "^4.1.2", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" + }, + "engines": { + "node": ">=6 <7 || >=8" + } + }, + "node_modules/typechain/node_modules/glob": { + "version": "7.1.7", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.7.tgz", + "integrity": "sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ==", + "dev": true, + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/typechain/node_modules/jsonfile": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", + "integrity": "sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==", + "dev": true, + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/typechain/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/typechain/node_modules/mkdirp": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", + "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", + "dev": true, + "bin": { + "mkdirp": "bin/cmd.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/typechain/node_modules/universalify": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", + "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", + "dev": true, + "engines": { + "node": ">= 4.0.0" + } + }, + "node_modules/typed-function": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/typed-function/-/typed-function-4.1.0.tgz", + "integrity": "sha512-DGwUl6cioBW5gw2L+6SMupGwH/kZOqivy17E4nsh1JI9fKF87orMmlQx3KISQPmg3sfnOUGlwVkroosvgddrlg==", + "engines": { + "node": ">= 14" + } + }, + "node_modules/typedarray": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", + "integrity": "sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA==" + }, + "node_modules/typedarray-to-buffer": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz", + "integrity": "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==", + "dependencies": { + "is-typedarray": "^1.0.0" + } + }, + "node_modules/typescript": { + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.2.2.tgz", + "integrity": "sha512-mI4WrpHsbCIcwT9cF4FZvr80QUeKvsUsUvKDoR+X/7XHQH98xYD8YHZg7ANtz2GtZt/CBq2QJ0thkGJMHfqc1w==", + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=14.17" + } + }, + "node_modules/typescript-compare": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/typescript-compare/-/typescript-compare-0.0.2.tgz", + "integrity": "sha512-8ja4j7pMHkfLJQO2/8tut7ub+J3Lw2S3061eJLFQcvs3tsmJKp8KG5NtpLn7KcY2w08edF74BSVN7qJS0U6oHA==", + "dependencies": { + "typescript-logic": "^0.0.0" + } + }, + "node_modules/typescript-logic": { + "version": "0.0.0", + "resolved": "https://registry.npmjs.org/typescript-logic/-/typescript-logic-0.0.0.tgz", + "integrity": "sha512-zXFars5LUkI3zP492ls0VskH3TtdeHCqu0i7/duGt60i5IGPIpAHE/DWo5FqJ6EjQ15YKXrt+AETjv60Dat34Q==" + }, + "node_modules/typescript-tuple": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/typescript-tuple/-/typescript-tuple-2.2.1.tgz", + "integrity": "sha512-Zcr0lbt8z5ZdEzERHAMAniTiIKerFCMgd7yjq1fPnDJ43et/k9twIFQMUYff9k5oXcsQ0WpvFcgzK2ZKASoW6Q==", + "dependencies": { + "typescript-compare": "^0.0.2" + } + }, + "node_modules/typical": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/typical/-/typical-4.0.0.tgz", + "integrity": "sha512-VAH4IvQ7BDFYglMd7BPRDfLgxZZX4O4TFcRDA6EN5X7erNJJq+McIEp8np9aVtxrCJ6qx4GTYVfOWNjcqwZgRw==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/u2f-api": { + "version": "0.2.7", + "resolved": "https://registry.npmjs.org/u2f-api/-/u2f-api-0.2.7.tgz", + "integrity": "sha512-fqLNg8vpvLOD5J/z4B6wpPg4Lvowz1nJ9xdHcCzdUPKcFE/qNCceV2gNZxSJd5vhAZemHr/K/hbzVA0zxB5mkg==" + }, + "node_modules/ultron": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/ultron/-/ultron-1.1.1.tgz", + "integrity": "sha512-UIEXBNeYmKptWH6z8ZnqTeS8fV74zG0/eRU9VGkpzz+LIJNs8W/zM/L+7ctCkRrgbNnnR0xxw4bKOr0cW0N0Og==" + }, + "node_modules/unbox-primitive": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.2.tgz", + "integrity": "sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==", + "dependencies": { + "call-bind": "^1.0.2", + "has-bigints": "^1.0.2", + "has-symbols": "^1.0.3", + "which-boxed-primitive": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/unbzip2-stream": { + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/unbzip2-stream/-/unbzip2-stream-1.4.3.tgz", + "integrity": "sha512-mlExGW4w71ebDJviH16lQLtZS32VKqsSfk80GCfUlwT/4/hNRFsoscrF/c++9xinkMzECL1uL9DDwXqFWkruPg==", + "dependencies": { + "buffer": "^5.2.1", + "through": "^2.3.8" + } + }, + "node_modules/unbzip2-stream/node_modules/buffer": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", + "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "dependencies": { + "base64-js": "^1.3.1", + "ieee754": "^1.1.13" + } + }, + "node_modules/undefsafe": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/undefsafe/-/undefsafe-2.0.5.tgz", + "integrity": "sha512-WxONCrssBM8TSPRqN5EmsjVrsv4A8X12J4ArBiiayv3DyyG3ZlIg6yysuuSYdZsVz3TKcTg2fd//Ujd4CHV1iA==" + }, + "node_modules/underscore": { + "version": "1.13.6", + "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.13.6.tgz", + "integrity": "sha512-+A5Sja4HP1M08MaXya7p5LvjuM7K6q/2EaC0+iovj/wOcMsTzMvDFbasi/oSapiwOlt252IqsKqPjCl7huKS0A==", + "dev": true + }, + "node_modules/undici": { + "version": "5.21.0", + "resolved": "https://registry.npmjs.org/undici/-/undici-5.21.0.tgz", + "integrity": "sha512-HOjK8l6a57b2ZGXOcUsI5NLfoTrfmbOl90ixJDl0AEFG4wgHNDQxtZy15/ZQp7HhjkpaGlp/eneMgtsu1dIlUA==", + "dependencies": { + "busboy": "^1.6.0" + }, + "engines": { + "node": ">=12.18" + } + }, + "node_modules/unfetch": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/unfetch/-/unfetch-4.2.0.tgz", + "integrity": "sha512-F9p7yYCn6cIW9El1zi0HI6vqpeIvBsr3dSuRO6Xuppb1u5rXpCPmMvLSyECLhybr9isec8Ohl0hPekMVrEinDA==", + "dev": true + }, + "node_modules/unit-fns": { + "version": "0.1.9", + "resolved": "https://registry.npmjs.org/unit-fns/-/unit-fns-0.1.9.tgz", + "integrity": "sha512-bxceIkc7n2icQmgQx8u3vX98ZBIcpL2YJDKIsWDFK7ZX1TTuLvtNWVNd9/oARCDHd7QQRzwc+zxabO0HSK8X0w==", + "engines": { + "node": ">=10" + } + }, + "node_modules/universalify": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", + "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/unpipe": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", + "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/update-browserslist-db": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.10.tgz", + "integrity": "sha512-OztqDenkfFkbSG+tRxBeAnCVPckDBcvibKd35yDONx6OU8N7sqgwc7rCbkJ/WcYtVRZ4ba68d6byhC21GFh7sQ==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + } + ], + "dependencies": { + "escalade": "^3.1.1", + "picocolors": "^1.0.0" + }, + "bin": { + "browserslist-lint": "cli.js" + }, + "peerDependencies": { + "browserslist": ">= 4.21.0" + } + }, + "node_modules/upper-case": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/upper-case/-/upper-case-1.1.3.tgz", + "integrity": "sha512-WRbjgmYzgXkCV7zNVpy5YgrHgbBv126rMALQQMrmzOVC4GM2waQ9x7xtm8VU+1yF2kWyPzI9zbZ48n4vSxwfSA==" + }, + "node_modules/upper-case-first": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/upper-case-first/-/upper-case-first-1.1.2.tgz", + "integrity": "sha512-wINKYvI3Db8dtjikdAqoBbZoP6Q+PZUyfMR7pmwHzjC2quzSkUq5DmPrTtPEqHaz8AGtmsB4TqwapMTM1QAQOQ==", + "dependencies": { + "upper-case": "^1.1.1" + } + }, + "node_modules/uri-js": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", + "dependencies": { + "punycode": "^2.1.0" + } + }, + "node_modules/url": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/url/-/url-0.11.0.tgz", + "integrity": "sha512-kbailJa29QrtXnxgq+DdCEGlbTeYM2eJUxsz6vjZavrCYPMIFHMKQmSKYAIuUK2i7hgPm28a8piX5NTUtM/LKQ==", + "dev": true, + "dependencies": { + "punycode": "1.3.2", + "querystring": "0.2.0" + } + }, + "node_modules/url-parse-lax": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-3.0.0.tgz", + "integrity": "sha512-NjFKA0DidqPa5ciFcSrXnAltTtzz84ogy+NebPvfEgAck0+TNg4UJ4IN+fB7zRZfbgUf0syOo9MDxFkDSMuFaQ==", + "dependencies": { + "prepend-http": "^2.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/url-set-query": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/url-set-query/-/url-set-query-1.0.0.tgz", + "integrity": "sha512-3AChu4NiXquPfeckE5R5cGdiHCMWJx1dwCWOmWIL4KHAziJNOFIYJlpGFeKDvwLPHovZRCxK3cYlwzqI9Vp+Gg==" + }, + "node_modules/url-to-options": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/url-to-options/-/url-to-options-1.0.1.tgz", + "integrity": "sha512-0kQLIzG4fdk/G5NONku64rSH/x32NOA39LVQqlK8Le6lvTF6GGRJpqaQFGgU+CLwySIqBSMdwYM0sYcW9f6P4A==", + "engines": { + "node": ">= 4" + } + }, + "node_modules/url/node_modules/punycode": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.3.2.tgz", + "integrity": "sha512-RofWgt/7fL5wP1Y7fxE7/EmTLzQVnB0ycyibJ0OOHIlJqTNzglYFxVwETOcIoJqJmpDXJ9xImDv+Fq34F/d4Dw==", + "dev": true + }, + "node_modules/utf-8-validate": { + "version": "5.0.10", + "resolved": "https://registry.npmjs.org/utf-8-validate/-/utf-8-validate-5.0.10.tgz", + "integrity": "sha512-Z6czzLq4u8fPOyx7TU6X3dvUZVvoJmxSQ+IcrlmagKhilxlhZgxPK6C5Jqbkw1IDUmFTM+cz9QDnnLTwDz/2gQ==", + "hasInstallScript": true, + "dependencies": { + "node-gyp-build": "^4.3.0" + }, + "engines": { + "node": ">=6.14.2" + } + }, + "node_modules/utf8": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/utf8/-/utf8-3.0.0.tgz", + "integrity": "sha512-E8VjFIQ/TyQgp+TZfS6l8yp/xWppSAHzidGiRrqe4bK4XP9pTRyKFgGJpO3SN7zdX4DeomTrwaseCHovfpFcqQ==" + }, + "node_modules/util": { + "version": "0.12.5", + "resolved": "https://registry.npmjs.org/util/-/util-0.12.5.tgz", + "integrity": "sha512-kZf/K6hEIrWHI6XqOFUiiMa+79wE/D8Q+NCNAWclkyg3b4d2k7s0QGepNjiABc+aR3N1PAyHL7p6UcLY6LmrnA==", + "dependencies": { + "inherits": "^2.0.3", + "is-arguments": "^1.0.4", + "is-generator-function": "^1.0.7", + "is-typed-array": "^1.1.3", + "which-typed-array": "^1.1.2" + } + }, + "node_modules/util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==" + }, + "node_modules/utils-merge": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", + "integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==", + "engines": { + "node": ">= 0.4.0" + } + }, + "node_modules/uuid": { + "version": "8.3.2", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", + "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", + "bin": { + "uuid": "dist/bin/uuid" + } + }, + "node_modules/validate-npm-package-license": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", + "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", + "dependencies": { + "spdx-correct": "^3.0.0", + "spdx-expression-parse": "^3.0.0" + } + }, + "node_modules/value-or-promise": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/value-or-promise/-/value-or-promise-1.0.11.tgz", + "integrity": "sha512-41BrgH+dIbCFXClcSapVs5M6GkENd3gQOJpEfPDNa71LsUGMXDL0jMWpI/Rh7WhX+Aalfz2TTS3Zt5pUsbnhLg==", + "optional": true, + "engines": { + "node": ">=12" + } + }, + "node_modules/varint": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/varint/-/varint-5.0.2.tgz", + "integrity": "sha512-lKxKYG6H03yCZUpAGOPOsMcGxd1RHCu1iKvEHYDPmTyq2HueGhD73ssNBqqQWfvYs04G9iUFRvmAVLW20Jw6ow==" + }, + "node_modules/vary": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", + "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/verror": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", + "integrity": "sha512-ZZKSmDAEFOijERBLkmYfJ+vmk3w+7hOLYDNkRCuRuMJGEmqYNCNLyBBFwWKVMhfwaEF3WOd0Zlw86U/WC/+nYw==", + "engines": [ + "node >=0.6.0" + ], + "dependencies": { + "assert-plus": "^1.0.0", + "core-util-is": "1.0.2", + "extsprintf": "^1.2.0" + } + }, + "node_modules/vuvuzela": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/vuvuzela/-/vuvuzela-1.0.3.tgz", + "integrity": "sha512-Tm7jR1xTzBbPW+6y1tknKiEhz04Wf/1iZkcTJjSFcpNko43+dFW6+OOeQe9taJIug3NdfUAjFKgUSyQrIKaDvQ==", + "optional": true + }, + "node_modules/web3": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/web3/-/web3-1.10.0.tgz", + "integrity": "sha512-YfKY9wSkGcM8seO+daR89oVTcbu18NsVfvOngzqMYGUU0pPSQmE57qQDvQzUeoIOHAnXEBNzrhjQJmm8ER0rng==", + "hasInstallScript": true, + "dependencies": { + "web3-bzz": "1.10.0", + "web3-core": "1.10.0", + "web3-eth": "1.10.0", + "web3-eth-personal": "1.10.0", + "web3-net": "1.10.0", + "web3-shh": "1.10.0", + "web3-utils": "1.10.0" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/web3-bzz": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/web3-bzz/-/web3-bzz-1.10.0.tgz", + "integrity": "sha512-o9IR59io3pDUsXTsps5pO5hW1D5zBmg46iNc2t4j2DkaYHNdDLwk2IP9ukoM2wg47QILfPEJYzhTfkS/CcX0KA==", + "hasInstallScript": true, + "dependencies": { + "@types/node": "^12.12.6", + "got": "12.1.0", + "swarm-js": "^0.1.40" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/web3-bzz/node_modules/@types/node": { + "version": "12.20.55", + "resolved": "https://registry.npmjs.org/@types/node/-/node-12.20.55.tgz", + "integrity": "sha512-J8xLz7q2OFulZ2cyGTLE1TbbZcjpno7FaN6zdJNrgAdrJ+DZzh/uFR6YrTb4C+nXakvud8Q4+rbhoIWlYQbUFQ==" + }, + "node_modules/web3-core": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/web3-core/-/web3-core-1.10.0.tgz", + "integrity": "sha512-fWySwqy2hn3TL89w5TM8wXF1Z2Q6frQTKHWmP0ppRQorEK8NcHJRfeMiv/mQlSKoTS1F6n/nv2uyZsixFycjYQ==", + "dependencies": { + "@types/bn.js": "^5.1.1", + "@types/node": "^12.12.6", + "bignumber.js": "^9.0.0", + "web3-core-helpers": "1.10.0", + "web3-core-method": "1.10.0", + "web3-core-requestmanager": "1.10.0", + "web3-utils": "1.10.0" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/web3-core-helpers": { + "version": "1.8.2", + "resolved": "https://registry.npmjs.org/web3-core-helpers/-/web3-core-helpers-1.8.2.tgz", + "integrity": "sha512-6B1eLlq9JFrfealZBomd1fmlq1o4A09vrCVQSa51ANoib/jllT3atZrRDr0zt1rfI7TSZTZBXdN/aTdeN99DWw==", + "dev": true, + "dependencies": { + "web3-eth-iban": "1.8.2", + "web3-utils": "1.8.2" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/web3-core-helpers/node_modules/web3-utils": { + "version": "1.8.2", + "resolved": "https://registry.npmjs.org/web3-utils/-/web3-utils-1.8.2.tgz", + "integrity": "sha512-v7j6xhfLQfY7xQDrUP0BKbaNrmZ2/+egbqP9q3KYmOiPpnvAfol+32slgL0WX/5n8VPvKCK5EZ1HGrAVICSToA==", + "dev": true, + "dependencies": { + "bn.js": "^5.2.1", + "ethereum-bloom-filters": "^1.0.6", + "ethereumjs-util": "^7.1.0", + "ethjs-unit": "0.1.6", + "number-to-bn": "1.7.0", + "randombytes": "^2.1.0", + "utf8": "3.0.0" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/web3-core-method": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/web3-core-method/-/web3-core-method-1.10.0.tgz", + "integrity": "sha512-4R700jTLAMKDMhQ+nsVfIXvH6IGJlJzGisIfMKWAIswH31h5AZz7uDUW2YctI+HrYd+5uOAlS4OJeeT9bIpvkA==", + "dependencies": { + "@ethersproject/transactions": "^5.6.2", + "web3-core-helpers": "1.10.0", + "web3-core-promievent": "1.10.0", + "web3-core-subscriptions": "1.10.0", + "web3-utils": "1.10.0" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/web3-core-method/node_modules/eventemitter3": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.4.tgz", + "integrity": "sha512-rlaVLnVxtxvoyLsQQFBx53YmXHDxRIzzTLbdfxqi4yocpSjAxXwkU0cScM5JgSKMqEhrZpnvQ2D9gjylR0AimQ==" + }, + "node_modules/web3-core-method/node_modules/web3-core-helpers": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/web3-core-helpers/-/web3-core-helpers-1.10.0.tgz", + "integrity": "sha512-pIxAzFDS5vnbXvfvLSpaA1tfRykAe9adw43YCKsEYQwH0gCLL0kMLkaCX3q+Q8EVmAh+e1jWL/nl9U0de1+++g==", + "dependencies": { + "web3-eth-iban": "1.10.0", + "web3-utils": "1.10.0" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/web3-core-method/node_modules/web3-core-promievent": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/web3-core-promievent/-/web3-core-promievent-1.10.0.tgz", + "integrity": "sha512-68N7k5LWL5R38xRaKFrTFT2pm2jBNFaM4GioS00YjAKXRQ3KjmhijOMG3TICz6Aa5+6GDWYelDNx21YAeZ4YTg==", + "dependencies": { + "eventemitter3": "4.0.4" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/web3-core-method/node_modules/web3-eth-iban": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/web3-eth-iban/-/web3-eth-iban-1.10.0.tgz", + "integrity": "sha512-0l+SP3IGhInw7Q20LY3IVafYEuufo4Dn75jAHT7c2aDJsIolvf2Lc6ugHkBajlwUneGfbRQs/ccYPQ9JeMUbrg==", + "dependencies": { + "bn.js": "^5.2.1", + "web3-utils": "1.10.0" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/web3-core-promievent": { + "version": "1.8.2", + "resolved": "https://registry.npmjs.org/web3-core-promievent/-/web3-core-promievent-1.8.2.tgz", + "integrity": "sha512-nvkJWDVgoOSsolJldN33tKW6bKKRJX3MCPDYMwP5SUFOA/mCzDEoI88N0JFofDTXkh1k7gOqp1pvwi9heuaxGg==", + "dev": true, + "dependencies": { + "eventemitter3": "4.0.4" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/web3-core-promievent/node_modules/eventemitter3": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.4.tgz", + "integrity": "sha512-rlaVLnVxtxvoyLsQQFBx53YmXHDxRIzzTLbdfxqi4yocpSjAxXwkU0cScM5JgSKMqEhrZpnvQ2D9gjylR0AimQ==", + "dev": true + }, + "node_modules/web3-core-requestmanager": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/web3-core-requestmanager/-/web3-core-requestmanager-1.10.0.tgz", + "integrity": "sha512-3z/JKE++Os62APml4dvBM+GAuId4h3L9ckUrj7ebEtS2AR0ixyQPbrBodgL91Sv7j7cQ3Y+hllaluqjguxvSaQ==", + "dependencies": { + "util": "^0.12.5", + "web3-core-helpers": "1.10.0", + "web3-providers-http": "1.10.0", + "web3-providers-ipc": "1.10.0", + "web3-providers-ws": "1.10.0" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/web3-core-requestmanager/node_modules/web3-core-helpers": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/web3-core-helpers/-/web3-core-helpers-1.10.0.tgz", + "integrity": "sha512-pIxAzFDS5vnbXvfvLSpaA1tfRykAe9adw43YCKsEYQwH0gCLL0kMLkaCX3q+Q8EVmAh+e1jWL/nl9U0de1+++g==", + "dependencies": { + "web3-eth-iban": "1.10.0", + "web3-utils": "1.10.0" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/web3-core-requestmanager/node_modules/web3-eth-iban": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/web3-eth-iban/-/web3-eth-iban-1.10.0.tgz", + "integrity": "sha512-0l+SP3IGhInw7Q20LY3IVafYEuufo4Dn75jAHT7c2aDJsIolvf2Lc6ugHkBajlwUneGfbRQs/ccYPQ9JeMUbrg==", + "dependencies": { + "bn.js": "^5.2.1", + "web3-utils": "1.10.0" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/web3-core-subscriptions": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/web3-core-subscriptions/-/web3-core-subscriptions-1.10.0.tgz", + "integrity": "sha512-HGm1PbDqsxejI075gxBc5OSkwymilRWZufIy9zEpnWKNmfbuv5FfHgW1/chtJP6aP3Uq2vHkvTDl3smQBb8l+g==", + "dependencies": { + "eventemitter3": "4.0.4", + "web3-core-helpers": "1.10.0" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/web3-core-subscriptions/node_modules/eventemitter3": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.4.tgz", + "integrity": "sha512-rlaVLnVxtxvoyLsQQFBx53YmXHDxRIzzTLbdfxqi4yocpSjAxXwkU0cScM5JgSKMqEhrZpnvQ2D9gjylR0AimQ==" + }, + "node_modules/web3-core-subscriptions/node_modules/web3-core-helpers": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/web3-core-helpers/-/web3-core-helpers-1.10.0.tgz", + "integrity": "sha512-pIxAzFDS5vnbXvfvLSpaA1tfRykAe9adw43YCKsEYQwH0gCLL0kMLkaCX3q+Q8EVmAh+e1jWL/nl9U0de1+++g==", + "dependencies": { + "web3-eth-iban": "1.10.0", + "web3-utils": "1.10.0" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/web3-core-subscriptions/node_modules/web3-eth-iban": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/web3-eth-iban/-/web3-eth-iban-1.10.0.tgz", + "integrity": "sha512-0l+SP3IGhInw7Q20LY3IVafYEuufo4Dn75jAHT7c2aDJsIolvf2Lc6ugHkBajlwUneGfbRQs/ccYPQ9JeMUbrg==", + "dependencies": { + "bn.js": "^5.2.1", + "web3-utils": "1.10.0" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/web3-core/node_modules/@types/node": { + "version": "12.20.55", + "resolved": "https://registry.npmjs.org/@types/node/-/node-12.20.55.tgz", + "integrity": "sha512-J8xLz7q2OFulZ2cyGTLE1TbbZcjpno7FaN6zdJNrgAdrJ+DZzh/uFR6YrTb4C+nXakvud8Q4+rbhoIWlYQbUFQ==" + }, + "node_modules/web3-core/node_modules/web3-core-helpers": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/web3-core-helpers/-/web3-core-helpers-1.10.0.tgz", + "integrity": "sha512-pIxAzFDS5vnbXvfvLSpaA1tfRykAe9adw43YCKsEYQwH0gCLL0kMLkaCX3q+Q8EVmAh+e1jWL/nl9U0de1+++g==", + "dependencies": { + "web3-eth-iban": "1.10.0", + "web3-utils": "1.10.0" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/web3-core/node_modules/web3-eth-iban": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/web3-eth-iban/-/web3-eth-iban-1.10.0.tgz", + "integrity": "sha512-0l+SP3IGhInw7Q20LY3IVafYEuufo4Dn75jAHT7c2aDJsIolvf2Lc6ugHkBajlwUneGfbRQs/ccYPQ9JeMUbrg==", + "dependencies": { + "bn.js": "^5.2.1", + "web3-utils": "1.10.0" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/web3-eth": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/web3-eth/-/web3-eth-1.10.0.tgz", + "integrity": "sha512-Z5vT6slNMLPKuwRyKGbqeGYC87OAy8bOblaqRTgg94CXcn/mmqU7iPIlG4506YdcdK3x6cfEDG7B6w+jRxypKA==", + "dependencies": { + "web3-core": "1.10.0", + "web3-core-helpers": "1.10.0", + "web3-core-method": "1.10.0", + "web3-core-subscriptions": "1.10.0", + "web3-eth-abi": "1.10.0", + "web3-eth-accounts": "1.10.0", + "web3-eth-contract": "1.10.0", + "web3-eth-ens": "1.10.0", + "web3-eth-iban": "1.10.0", + "web3-eth-personal": "1.10.0", + "web3-net": "1.10.0", + "web3-utils": "1.10.0" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/web3-eth-abi": { + "version": "1.8.2", + "resolved": "https://registry.npmjs.org/web3-eth-abi/-/web3-eth-abi-1.8.2.tgz", + "integrity": "sha512-Om9g3kaRNjqiNPAgKwGT16y+ZwtBzRe4ZJFGjLiSs6v5I7TPNF+rRMWuKnR6jq0azQZDj6rblvKFMA49/k48Og==", + "dev": true, + "dependencies": { + "@ethersproject/abi": "^5.6.3", + "web3-utils": "1.8.2" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/web3-eth-abi/node_modules/web3-utils": { + "version": "1.8.2", + "resolved": "https://registry.npmjs.org/web3-utils/-/web3-utils-1.8.2.tgz", + "integrity": "sha512-v7j6xhfLQfY7xQDrUP0BKbaNrmZ2/+egbqP9q3KYmOiPpnvAfol+32slgL0WX/5n8VPvKCK5EZ1HGrAVICSToA==", + "dev": true, + "dependencies": { + "bn.js": "^5.2.1", + "ethereum-bloom-filters": "^1.0.6", + "ethereumjs-util": "^7.1.0", + "ethjs-unit": "0.1.6", + "number-to-bn": "1.7.0", + "randombytes": "^2.1.0", + "utf8": "3.0.0" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/web3-eth-accounts": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/web3-eth-accounts/-/web3-eth-accounts-1.10.0.tgz", + "integrity": "sha512-wiq39Uc3mOI8rw24wE2n15hboLE0E9BsQLdlmsL4Zua9diDS6B5abXG0XhFcoNsXIGMWXVZz4TOq3u4EdpXF/Q==", + "dependencies": { + "@ethereumjs/common": "2.5.0", + "@ethereumjs/tx": "3.3.2", + "eth-lib": "0.2.8", + "ethereumjs-util": "^7.1.5", + "scrypt-js": "^3.0.1", + "uuid": "^9.0.0", + "web3-core": "1.10.0", + "web3-core-helpers": "1.10.0", + "web3-core-method": "1.10.0", + "web3-utils": "1.10.0" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/web3-eth-accounts/node_modules/@ethereumjs/common": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/@ethereumjs/common/-/common-2.5.0.tgz", + "integrity": "sha512-DEHjW6e38o+JmB/NO3GZBpW4lpaiBpkFgXF6jLcJ6gETBYpEyaA5nTimsWBUJR3Vmtm/didUEbNjajskugZORg==", + "dependencies": { + "crc-32": "^1.2.0", + "ethereumjs-util": "^7.1.1" + } + }, + "node_modules/web3-eth-accounts/node_modules/@ethereumjs/tx": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/@ethereumjs/tx/-/tx-3.3.2.tgz", + "integrity": "sha512-6AaJhwg4ucmwTvw/1qLaZUX5miWrwZ4nLOUsKyb/HtzS3BMw/CasKhdi1ims9mBKeK9sOJCH4qGKOBGyJCeeog==", + "dependencies": { + "@ethereumjs/common": "^2.5.0", + "ethereumjs-util": "^7.1.2" + } + }, + "node_modules/web3-eth-accounts/node_modules/bn.js": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==" + }, + "node_modules/web3-eth-accounts/node_modules/eth-lib": { + "version": "0.2.8", + "resolved": "https://registry.npmjs.org/eth-lib/-/eth-lib-0.2.8.tgz", + "integrity": "sha512-ArJ7x1WcWOlSpzdoTBX8vkwlkSQ85CjjifSZtV4co64vWxSV8geWfPI9x4SVYu3DSxnX4yWFVTtGL+j9DUFLNw==", + "dependencies": { + "bn.js": "^4.11.6", + "elliptic": "^6.4.0", + "xhr-request-promise": "^0.1.2" + } + }, + "node_modules/web3-eth-accounts/node_modules/uuid": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.0.tgz", + "integrity": "sha512-MXcSTerfPa4uqyzStbRoTgt5XIe3x5+42+q1sDuy3R5MDk66URdLMOZe5aPX/SQd+kuYAh0FdP/pO28IkQyTeg==", + "bin": { + "uuid": "dist/bin/uuid" + } + }, + "node_modules/web3-eth-accounts/node_modules/web3-core-helpers": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/web3-core-helpers/-/web3-core-helpers-1.10.0.tgz", + "integrity": "sha512-pIxAzFDS5vnbXvfvLSpaA1tfRykAe9adw43YCKsEYQwH0gCLL0kMLkaCX3q+Q8EVmAh+e1jWL/nl9U0de1+++g==", + "dependencies": { + "web3-eth-iban": "1.10.0", + "web3-utils": "1.10.0" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/web3-eth-accounts/node_modules/web3-eth-iban": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/web3-eth-iban/-/web3-eth-iban-1.10.0.tgz", + "integrity": "sha512-0l+SP3IGhInw7Q20LY3IVafYEuufo4Dn75jAHT7c2aDJsIolvf2Lc6ugHkBajlwUneGfbRQs/ccYPQ9JeMUbrg==", + "dependencies": { + "bn.js": "^5.2.1", + "web3-utils": "1.10.0" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/web3-eth-accounts/node_modules/web3-eth-iban/node_modules/bn.js": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.2.1.tgz", + "integrity": "sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ==" + }, + "node_modules/web3-eth-contract": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/web3-eth-contract/-/web3-eth-contract-1.10.0.tgz", + "integrity": "sha512-MIC5FOzP/+2evDksQQ/dpcXhSqa/2hFNytdl/x61IeWxhh6vlFeSjq0YVTAyIzdjwnL7nEmZpjfI6y6/Ufhy7w==", + "dependencies": { + "@types/bn.js": "^5.1.1", + "web3-core": "1.10.0", + "web3-core-helpers": "1.10.0", + "web3-core-method": "1.10.0", + "web3-core-promievent": "1.10.0", + "web3-core-subscriptions": "1.10.0", + "web3-eth-abi": "1.10.0", + "web3-utils": "1.10.0" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/web3-eth-contract/node_modules/eventemitter3": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.4.tgz", + "integrity": "sha512-rlaVLnVxtxvoyLsQQFBx53YmXHDxRIzzTLbdfxqi4yocpSjAxXwkU0cScM5JgSKMqEhrZpnvQ2D9gjylR0AimQ==" + }, + "node_modules/web3-eth-contract/node_modules/web3-core-helpers": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/web3-core-helpers/-/web3-core-helpers-1.10.0.tgz", + "integrity": "sha512-pIxAzFDS5vnbXvfvLSpaA1tfRykAe9adw43YCKsEYQwH0gCLL0kMLkaCX3q+Q8EVmAh+e1jWL/nl9U0de1+++g==", + "dependencies": { + "web3-eth-iban": "1.10.0", + "web3-utils": "1.10.0" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/web3-eth-contract/node_modules/web3-core-promievent": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/web3-core-promievent/-/web3-core-promievent-1.10.0.tgz", + "integrity": "sha512-68N7k5LWL5R38xRaKFrTFT2pm2jBNFaM4GioS00YjAKXRQ3KjmhijOMG3TICz6Aa5+6GDWYelDNx21YAeZ4YTg==", + "dependencies": { + "eventemitter3": "4.0.4" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/web3-eth-contract/node_modules/web3-eth-abi": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/web3-eth-abi/-/web3-eth-abi-1.10.0.tgz", + "integrity": "sha512-cwS+qRBWpJ43aI9L3JS88QYPfFcSJJ3XapxOQ4j40v6mk7ATpA8CVK1vGTzpihNlOfMVRBkR95oAj7oL6aiDOg==", + "dependencies": { + "@ethersproject/abi": "^5.6.3", + "web3-utils": "1.10.0" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/web3-eth-contract/node_modules/web3-eth-iban": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/web3-eth-iban/-/web3-eth-iban-1.10.0.tgz", + "integrity": "sha512-0l+SP3IGhInw7Q20LY3IVafYEuufo4Dn75jAHT7c2aDJsIolvf2Lc6ugHkBajlwUneGfbRQs/ccYPQ9JeMUbrg==", + "dependencies": { + "bn.js": "^5.2.1", + "web3-utils": "1.10.0" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/web3-eth-ens": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/web3-eth-ens/-/web3-eth-ens-1.10.0.tgz", + "integrity": "sha512-3hpGgzX3qjgxNAmqdrC2YUQMTfnZbs4GeLEmy8aCWziVwogbuqQZ+Gzdfrym45eOZodk+lmXyLuAdqkNlvkc1g==", + "dependencies": { + "content-hash": "^2.5.2", + "eth-ens-namehash": "2.0.8", + "web3-core": "1.10.0", + "web3-core-helpers": "1.10.0", + "web3-core-promievent": "1.10.0", + "web3-eth-abi": "1.10.0", + "web3-eth-contract": "1.10.0", + "web3-utils": "1.10.0" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/web3-eth-ens/node_modules/eventemitter3": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.4.tgz", + "integrity": "sha512-rlaVLnVxtxvoyLsQQFBx53YmXHDxRIzzTLbdfxqi4yocpSjAxXwkU0cScM5JgSKMqEhrZpnvQ2D9gjylR0AimQ==" + }, + "node_modules/web3-eth-ens/node_modules/web3-core-helpers": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/web3-core-helpers/-/web3-core-helpers-1.10.0.tgz", + "integrity": "sha512-pIxAzFDS5vnbXvfvLSpaA1tfRykAe9adw43YCKsEYQwH0gCLL0kMLkaCX3q+Q8EVmAh+e1jWL/nl9U0de1+++g==", + "dependencies": { + "web3-eth-iban": "1.10.0", + "web3-utils": "1.10.0" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/web3-eth-ens/node_modules/web3-core-promievent": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/web3-core-promievent/-/web3-core-promievent-1.10.0.tgz", + "integrity": "sha512-68N7k5LWL5R38xRaKFrTFT2pm2jBNFaM4GioS00YjAKXRQ3KjmhijOMG3TICz6Aa5+6GDWYelDNx21YAeZ4YTg==", + "dependencies": { + "eventemitter3": "4.0.4" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/web3-eth-ens/node_modules/web3-eth-abi": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/web3-eth-abi/-/web3-eth-abi-1.10.0.tgz", + "integrity": "sha512-cwS+qRBWpJ43aI9L3JS88QYPfFcSJJ3XapxOQ4j40v6mk7ATpA8CVK1vGTzpihNlOfMVRBkR95oAj7oL6aiDOg==", + "dependencies": { + "@ethersproject/abi": "^5.6.3", + "web3-utils": "1.10.0" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/web3-eth-ens/node_modules/web3-eth-iban": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/web3-eth-iban/-/web3-eth-iban-1.10.0.tgz", + "integrity": "sha512-0l+SP3IGhInw7Q20LY3IVafYEuufo4Dn75jAHT7c2aDJsIolvf2Lc6ugHkBajlwUneGfbRQs/ccYPQ9JeMUbrg==", + "dependencies": { + "bn.js": "^5.2.1", + "web3-utils": "1.10.0" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/web3-eth-iban": { + "version": "1.8.2", + "resolved": "https://registry.npmjs.org/web3-eth-iban/-/web3-eth-iban-1.8.2.tgz", + "integrity": "sha512-h3vNblDWkWMuYx93Q27TAJz6lhzpP93EiC3+45D6xoz983p6si773vntoQ+H+5aZhwglBtoiBzdh7PSSOnP/xQ==", + "dev": true, + "dependencies": { + "bn.js": "^5.2.1", + "web3-utils": "1.8.2" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/web3-eth-iban/node_modules/web3-utils": { + "version": "1.8.2", + "resolved": "https://registry.npmjs.org/web3-utils/-/web3-utils-1.8.2.tgz", + "integrity": "sha512-v7j6xhfLQfY7xQDrUP0BKbaNrmZ2/+egbqP9q3KYmOiPpnvAfol+32slgL0WX/5n8VPvKCK5EZ1HGrAVICSToA==", + "dev": true, + "dependencies": { + "bn.js": "^5.2.1", + "ethereum-bloom-filters": "^1.0.6", + "ethereumjs-util": "^7.1.0", + "ethjs-unit": "0.1.6", + "number-to-bn": "1.7.0", + "randombytes": "^2.1.0", + "utf8": "3.0.0" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/web3-eth-personal": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/web3-eth-personal/-/web3-eth-personal-1.10.0.tgz", + "integrity": "sha512-anseKn98w/d703eWq52uNuZi7GhQeVjTC5/svrBWEKob0WZ5kPdo+EZoFN0sp5a5ubbrk/E0xSl1/M5yORMtpg==", + "dependencies": { + "@types/node": "^12.12.6", + "web3-core": "1.10.0", + "web3-core-helpers": "1.10.0", + "web3-core-method": "1.10.0", + "web3-net": "1.10.0", + "web3-utils": "1.10.0" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/web3-eth-personal/node_modules/@types/node": { + "version": "12.20.55", + "resolved": "https://registry.npmjs.org/@types/node/-/node-12.20.55.tgz", + "integrity": "sha512-J8xLz7q2OFulZ2cyGTLE1TbbZcjpno7FaN6zdJNrgAdrJ+DZzh/uFR6YrTb4C+nXakvud8Q4+rbhoIWlYQbUFQ==" + }, + "node_modules/web3-eth-personal/node_modules/web3-core-helpers": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/web3-core-helpers/-/web3-core-helpers-1.10.0.tgz", + "integrity": "sha512-pIxAzFDS5vnbXvfvLSpaA1tfRykAe9adw43YCKsEYQwH0gCLL0kMLkaCX3q+Q8EVmAh+e1jWL/nl9U0de1+++g==", + "dependencies": { + "web3-eth-iban": "1.10.0", + "web3-utils": "1.10.0" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/web3-eth-personal/node_modules/web3-eth-iban": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/web3-eth-iban/-/web3-eth-iban-1.10.0.tgz", + "integrity": "sha512-0l+SP3IGhInw7Q20LY3IVafYEuufo4Dn75jAHT7c2aDJsIolvf2Lc6ugHkBajlwUneGfbRQs/ccYPQ9JeMUbrg==", + "dependencies": { + "bn.js": "^5.2.1", + "web3-utils": "1.10.0" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/web3-eth/node_modules/web3-core-helpers": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/web3-core-helpers/-/web3-core-helpers-1.10.0.tgz", + "integrity": "sha512-pIxAzFDS5vnbXvfvLSpaA1tfRykAe9adw43YCKsEYQwH0gCLL0kMLkaCX3q+Q8EVmAh+e1jWL/nl9U0de1+++g==", + "dependencies": { + "web3-eth-iban": "1.10.0", + "web3-utils": "1.10.0" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/web3-eth/node_modules/web3-eth-abi": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/web3-eth-abi/-/web3-eth-abi-1.10.0.tgz", + "integrity": "sha512-cwS+qRBWpJ43aI9L3JS88QYPfFcSJJ3XapxOQ4j40v6mk7ATpA8CVK1vGTzpihNlOfMVRBkR95oAj7oL6aiDOg==", + "dependencies": { + "@ethersproject/abi": "^5.6.3", + "web3-utils": "1.10.0" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/web3-eth/node_modules/web3-eth-iban": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/web3-eth-iban/-/web3-eth-iban-1.10.0.tgz", + "integrity": "sha512-0l+SP3IGhInw7Q20LY3IVafYEuufo4Dn75jAHT7c2aDJsIolvf2Lc6ugHkBajlwUneGfbRQs/ccYPQ9JeMUbrg==", + "dependencies": { + "bn.js": "^5.2.1", + "web3-utils": "1.10.0" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/web3-net": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/web3-net/-/web3-net-1.10.0.tgz", + "integrity": "sha512-NLH/N3IshYWASpxk4/18Ge6n60GEvWBVeM8inx2dmZJVmRI6SJIlUxbL8jySgiTn3MMZlhbdvrGo8fpUW7a1GA==", + "dependencies": { + "web3-core": "1.10.0", + "web3-core-method": "1.10.0", + "web3-utils": "1.10.0" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/web3-provider-engine": { + "version": "16.0.3", + "resolved": "https://registry.npmjs.org/web3-provider-engine/-/web3-provider-engine-16.0.3.tgz", + "integrity": "sha512-Q3bKhGqLfMTdLvkd4TtkGYJHcoVQ82D1l8jTIwwuJp/sAp7VHnRYb9YJ14SW/69VMWoOhSpPLZV2tWb9V0WJoA==", + "dependencies": { + "@ethereumjs/tx": "^3.3.0", + "async": "^2.5.0", + "backoff": "^2.5.0", + "clone": "^2.0.0", + "cross-fetch": "^2.1.0", + "eth-block-tracker": "^4.4.2", + "eth-json-rpc-filters": "^4.2.1", + "eth-json-rpc-infura": "^5.1.0", + "eth-json-rpc-middleware": "^6.0.0", + "eth-rpc-errors": "^3.0.0", + "eth-sig-util": "^1.4.2", + "ethereumjs-block": "^1.2.2", + "ethereumjs-util": "^5.1.5", + "ethereumjs-vm": "^2.3.4", + "json-stable-stringify": "^1.0.1", + "promise-to-callback": "^1.0.0", + "readable-stream": "^2.2.9", + "request": "^2.85.0", + "semaphore": "^1.0.3", + "ws": "^5.1.1", + "xhr": "^2.2.0", + "xtend": "^4.0.1" + }, + "engines": { + "node": ">=12.0.0" + } + }, + "node_modules/web3-provider-engine/node_modules/@ethereumjs/common": { + "version": "2.6.5", + "resolved": "https://registry.npmjs.org/@ethereumjs/common/-/common-2.6.5.tgz", + "integrity": "sha512-lRyVQOeCDaIVtgfbowla32pzeDv2Obr8oR8Put5RdUBNRGr1VGPGQNGP6elWIpgK3YdpzqTOh4GyUGOureVeeA==", + "dependencies": { + "crc-32": "^1.2.0", + "ethereumjs-util": "^7.1.5" + } + }, + "node_modules/web3-provider-engine/node_modules/@ethereumjs/common/node_modules/ethereumjs-util": { + "version": "7.1.5", + "resolved": "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-7.1.5.tgz", + "integrity": "sha512-SDl5kKrQAudFBUe5OJM9Ac6WmMyYmXX/6sTmLZ3ffG2eY6ZIGBes3pEDxNN6V72WyOw4CPD5RomKdsa8DAAwLg==", + "dependencies": { + "@types/bn.js": "^5.1.0", + "bn.js": "^5.1.2", + "create-hash": "^1.1.2", + "ethereum-cryptography": "^0.1.3", + "rlp": "^2.2.4" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/web3-provider-engine/node_modules/@ethereumjs/tx": { + "version": "3.5.2", + "resolved": "https://registry.npmjs.org/@ethereumjs/tx/-/tx-3.5.2.tgz", + "integrity": "sha512-gQDNJWKrSDGu2w7w0PzVXVBNMzb7wwdDOmOqczmhNjqFxFuIbhVJDwiGEnxFNC2/b8ifcZzY7MLcluizohRzNw==", + "dependencies": { + "@ethereumjs/common": "^2.6.4", + "ethereumjs-util": "^7.1.5" + } + }, + "node_modules/web3-provider-engine/node_modules/@ethereumjs/tx/node_modules/ethereumjs-util": { + "version": "7.1.5", + "resolved": "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-7.1.5.tgz", + "integrity": "sha512-SDl5kKrQAudFBUe5OJM9Ac6WmMyYmXX/6sTmLZ3ffG2eY6ZIGBes3pEDxNN6V72WyOw4CPD5RomKdsa8DAAwLg==", + "dependencies": { + "@types/bn.js": "^5.1.0", + "bn.js": "^5.1.2", + "create-hash": "^1.1.2", + "ethereum-cryptography": "^0.1.3", + "rlp": "^2.2.4" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/web3-provider-engine/node_modules/async": { + "version": "2.6.4", + "resolved": "https://registry.npmjs.org/async/-/async-2.6.4.tgz", + "integrity": "sha512-mzo5dfJYwAn29PeiJ0zvwTo04zj8HDJj0Mn8TD7sno7q12prdbnasKJHhkm2c1LgrhlJ0teaea8860oxi51mGA==", + "dependencies": { + "lodash": "^4.17.14" + } + }, + "node_modules/web3-provider-engine/node_modules/cross-fetch": { + "version": "2.2.6", + "resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-2.2.6.tgz", + "integrity": "sha512-9JZz+vXCmfKUZ68zAptS7k4Nu8e2qcibe7WVZYps7sAgk5R8GYTc+T1WR0v1rlP9HxgARmOX1UTIJZFytajpNA==", + "dependencies": { + "node-fetch": "^2.6.7", + "whatwg-fetch": "^2.0.4" + } + }, + "node_modules/web3-provider-engine/node_modules/ethereum-cryptography": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-0.1.3.tgz", + "integrity": "sha512-w8/4x1SGGzc+tO97TASLja6SLd3fRIK2tLVcV2Gx4IB21hE19atll5Cq9o3d0ZmAYC/8aw0ipieTSiekAea4SQ==", + "dependencies": { + "@types/pbkdf2": "^3.0.0", + "@types/secp256k1": "^4.0.1", + "blakejs": "^1.1.0", + "browserify-aes": "^1.2.0", + "bs58check": "^2.1.2", + "create-hash": "^1.2.0", + "create-hmac": "^1.1.7", + "hash.js": "^1.1.7", + "keccak": "^3.0.0", + "pbkdf2": "^3.0.17", + "randombytes": "^2.1.0", + "safe-buffer": "^5.1.2", + "scrypt-js": "^3.0.0", + "secp256k1": "^4.0.1", + "setimmediate": "^1.0.5" + } + }, + "node_modules/web3-provider-engine/node_modules/ethereumjs-util": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-5.2.1.tgz", + "integrity": "sha512-v3kT+7zdyCm1HIqWlLNrHGqHGLpGYIhjeHxQjnDXjLT2FyGJDsd3LWMYUo7pAFRrk86CR3nUJfhC81CCoJNNGQ==", + "dependencies": { + "bn.js": "^4.11.0", + "create-hash": "^1.1.2", + "elliptic": "^6.5.2", + "ethereum-cryptography": "^0.1.3", + "ethjs-util": "^0.1.3", + "rlp": "^2.0.0", + "safe-buffer": "^5.1.1" + } + }, + "node_modules/web3-provider-engine/node_modules/ethereumjs-util/node_modules/bn.js": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==" + }, + "node_modules/web3-provider-engine/node_modules/readable-stream": { + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "node_modules/web3-provider-engine/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + }, + "node_modules/web3-provider-engine/node_modules/string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, + "node_modules/web3-provider-engine/node_modules/ws": { + "version": "5.2.3", + "resolved": "https://registry.npmjs.org/ws/-/ws-5.2.3.tgz", + "integrity": "sha512-jZArVERrMsKUatIdnLzqvcfydI85dvd/Fp1u/VOpfdDWQ4c9qWXe+VIeAbQ5FrDwciAkr+lzofXLz3Kuf26AOA==", + "dependencies": { + "async-limiter": "~1.0.0" + } + }, + "node_modules/web3-providers-http": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/web3-providers-http/-/web3-providers-http-1.10.0.tgz", + "integrity": "sha512-eNr965YB8a9mLiNrkjAWNAPXgmQWfpBfkkn7tpEFlghfww0u3I0tktMZiaToJVcL2+Xq+81cxbkpeWJ5XQDwOA==", + "dependencies": { + "abortcontroller-polyfill": "^1.7.3", + "cross-fetch": "^3.1.4", + "es6-promise": "^4.2.8", + "web3-core-helpers": "1.10.0" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/web3-providers-http/node_modules/web3-core-helpers": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/web3-core-helpers/-/web3-core-helpers-1.10.0.tgz", + "integrity": "sha512-pIxAzFDS5vnbXvfvLSpaA1tfRykAe9adw43YCKsEYQwH0gCLL0kMLkaCX3q+Q8EVmAh+e1jWL/nl9U0de1+++g==", + "dependencies": { + "web3-eth-iban": "1.10.0", + "web3-utils": "1.10.0" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/web3-providers-http/node_modules/web3-eth-iban": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/web3-eth-iban/-/web3-eth-iban-1.10.0.tgz", + "integrity": "sha512-0l+SP3IGhInw7Q20LY3IVafYEuufo4Dn75jAHT7c2aDJsIolvf2Lc6ugHkBajlwUneGfbRQs/ccYPQ9JeMUbrg==", + "dependencies": { + "bn.js": "^5.2.1", + "web3-utils": "1.10.0" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/web3-providers-ipc": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/web3-providers-ipc/-/web3-providers-ipc-1.10.0.tgz", + "integrity": "sha512-OfXG1aWN8L1OUqppshzq8YISkWrYHaATW9H8eh0p89TlWMc1KZOL9vttBuaBEi96D/n0eYDn2trzt22bqHWfXA==", + "dependencies": { + "oboe": "2.1.5", + "web3-core-helpers": "1.10.0" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/web3-providers-ipc/node_modules/web3-core-helpers": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/web3-core-helpers/-/web3-core-helpers-1.10.0.tgz", + "integrity": "sha512-pIxAzFDS5vnbXvfvLSpaA1tfRykAe9adw43YCKsEYQwH0gCLL0kMLkaCX3q+Q8EVmAh+e1jWL/nl9U0de1+++g==", + "dependencies": { + "web3-eth-iban": "1.10.0", + "web3-utils": "1.10.0" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/web3-providers-ipc/node_modules/web3-eth-iban": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/web3-eth-iban/-/web3-eth-iban-1.10.0.tgz", + "integrity": "sha512-0l+SP3IGhInw7Q20LY3IVafYEuufo4Dn75jAHT7c2aDJsIolvf2Lc6ugHkBajlwUneGfbRQs/ccYPQ9JeMUbrg==", + "dependencies": { + "bn.js": "^5.2.1", + "web3-utils": "1.10.0" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/web3-providers-ws": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/web3-providers-ws/-/web3-providers-ws-1.10.0.tgz", + "integrity": "sha512-sK0fNcglW36yD5xjnjtSGBnEtf59cbw4vZzJ+CmOWIKGIR96mP5l684g0WD0Eo+f4NQc2anWWXG74lRc9OVMCQ==", + "dependencies": { + "eventemitter3": "4.0.4", + "web3-core-helpers": "1.10.0", + "websocket": "^1.0.32" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/web3-providers-ws/node_modules/eventemitter3": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.4.tgz", + "integrity": "sha512-rlaVLnVxtxvoyLsQQFBx53YmXHDxRIzzTLbdfxqi4yocpSjAxXwkU0cScM5JgSKMqEhrZpnvQ2D9gjylR0AimQ==" + }, + "node_modules/web3-providers-ws/node_modules/web3-core-helpers": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/web3-core-helpers/-/web3-core-helpers-1.10.0.tgz", + "integrity": "sha512-pIxAzFDS5vnbXvfvLSpaA1tfRykAe9adw43YCKsEYQwH0gCLL0kMLkaCX3q+Q8EVmAh+e1jWL/nl9U0de1+++g==", + "dependencies": { + "web3-eth-iban": "1.10.0", + "web3-utils": "1.10.0" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/web3-providers-ws/node_modules/web3-eth-iban": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/web3-eth-iban/-/web3-eth-iban-1.10.0.tgz", + "integrity": "sha512-0l+SP3IGhInw7Q20LY3IVafYEuufo4Dn75jAHT7c2aDJsIolvf2Lc6ugHkBajlwUneGfbRQs/ccYPQ9JeMUbrg==", + "dependencies": { + "bn.js": "^5.2.1", + "web3-utils": "1.10.0" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/web3-shh": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/web3-shh/-/web3-shh-1.10.0.tgz", + "integrity": "sha512-uNUUuNsO2AjX41GJARV9zJibs11eq6HtOe6Wr0FtRUcj8SN6nHeYIzwstAvJ4fXA53gRqFMTxdntHEt9aXVjpg==", + "hasInstallScript": true, + "dependencies": { + "web3-core": "1.10.0", + "web3-core-method": "1.10.0", + "web3-core-subscriptions": "1.10.0", + "web3-net": "1.10.0" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/web3-utils": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/web3-utils/-/web3-utils-1.10.0.tgz", + "integrity": "sha512-kSaCM0uMcZTNUSmn5vMEhlo02RObGNRRCkdX0V9UTAU0+lrvn0HSaudyCo6CQzuXUsnuY2ERJGCGPfeWmv19Rg==", + "dependencies": { + "bn.js": "^5.2.1", + "ethereum-bloom-filters": "^1.0.6", + "ethereumjs-util": "^7.1.0", + "ethjs-unit": "0.1.6", + "number-to-bn": "1.7.0", + "randombytes": "^2.1.0", + "utf8": "3.0.0" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/webidl-conversions": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", + "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==" + }, + "node_modules/websocket": { + "version": "1.0.34", + "resolved": "https://registry.npmjs.org/websocket/-/websocket-1.0.34.tgz", + "integrity": "sha512-PRDso2sGwF6kM75QykIesBijKSVceR6jL2G8NGYyq2XrItNC2P5/qL5XeR056GhA+Ly7JMFvJb9I312mJfmqnQ==", + "dependencies": { + "bufferutil": "^4.0.1", + "debug": "^2.2.0", + "es5-ext": "^0.10.50", + "typedarray-to-buffer": "^3.1.5", + "utf-8-validate": "^5.0.2", + "yaeti": "^0.0.6" + }, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/websocket/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/websocket/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" + }, + "node_modules/whatwg-fetch": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/whatwg-fetch/-/whatwg-fetch-2.0.4.tgz", + "integrity": "sha512-dcQ1GWpOD/eEQ97k66aiEVpNnapVj90/+R+SXTPYGHpYBBypfKJEQjLrvMZ7YXbKm21gXd4NcuxUTjiv1YtLng==" + }, + "node_modules/whatwg-mimetype": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-3.0.0.tgz", + "integrity": "sha512-nt+N2dzIutVRxARx1nghPKGv1xHikU7HKdfafKkLNLindmPU/ch3U31NOCGGA/dmPcmb1VlofO0vnKAcsm0o/Q==", + "optional": true, + "engines": { + "node": ">=12" + } + }, + "node_modules/whatwg-url": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", + "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", + "dependencies": { + "tr46": "~0.0.3", + "webidl-conversions": "^3.0.0" + } + }, + "node_modules/which": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", + "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "which": "bin/which" + } + }, + "node_modules/which-boxed-primitive": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz", + "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==", + "dependencies": { + "is-bigint": "^1.0.1", + "is-boolean-object": "^1.1.0", + "is-number-object": "^1.0.4", + "is-string": "^1.0.5", + "is-symbol": "^1.0.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/which-module": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/which-module/-/which-module-1.0.0.tgz", + "integrity": "sha512-F6+WgncZi/mJDrammbTuHe1q0R5hOXv/mBaiNA2TCNT/LTHusX0V+CJnj9XT8ki5ln2UZyyddDgHfCzyrOH7MQ==" + }, + "node_modules/which-typed-array": { + "version": "1.1.8", + "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.8.tgz", + "integrity": "sha512-Jn4e5PItbcAHyLoRDwvPj1ypu27DJbtdYXUa5zsinrUx77Uvfb0cXwwnGMTn7cjUfhhqgVQnVJCwF+7cgU7tpw==", + "dependencies": { + "available-typed-arrays": "^1.0.5", + "call-bind": "^1.0.2", + "es-abstract": "^1.20.0", + "for-each": "^0.3.3", + "has-tostringtag": "^1.0.0", + "is-typed-array": "^1.1.9" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/window-size": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/window-size/-/window-size-0.2.0.tgz", + "integrity": "sha512-UD7d8HFA2+PZsbKyaOCEy8gMh1oDtHgJh1LfgjQ4zVXmYjAT/kvz3PueITKuqDiIXQe7yzpPnxX3lNc+AhQMyw==", + "bin": { + "window-size": "cli.js" + }, + "engines": { + "node": ">= 0.10.0" + } + }, + "node_modules/wordwrapjs": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/wordwrapjs/-/wordwrapjs-4.0.1.tgz", + "integrity": "sha512-kKlNACbvHrkpIw6oPeYDSmdCTu2hdMHoyXLTcUKala++lx5Y+wjJ/e474Jqv5abnVmwxw08DiTuHmw69lJGksA==", + "dev": true, + "dependencies": { + "reduce-flatten": "^2.0.0", + "typical": "^5.2.0" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/wordwrapjs/node_modules/typical": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/typical/-/typical-5.2.0.tgz", + "integrity": "sha512-dvdQgNDNJo+8B2uBQoqdb11eUCE1JQXhvjC/CZtgvZseVd5TYMXnq0+vuUemXbd/Se29cTaUuPX3YIc2xgbvIg==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/workerpool": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/workerpool/-/workerpool-6.2.1.tgz", + "integrity": "sha512-ILEIE97kDZvF9Wb9f6h5aXK4swSlKGUcOEGiIYb2OOu/IrDU9iwj0fD//SsA6E5ibwJxpEvhullJY4Sl4GcpAw==" + }, + "node_modules/wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/wrap-ansi/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "engines": { + "node": ">=8" + } + }, + "node_modules/wrap-ansi/node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==" + }, + "node_modules/write-stream": { + "version": "0.4.3", + "resolved": "https://registry.npmjs.org/write-stream/-/write-stream-0.4.3.tgz", + "integrity": "sha512-IJrvkhbAnj89W/GAVdVgbnPiVw5Ntg/B4tc/MUCIEwj/g6JIww1DWJyB/yBMT3yw2/TkT6IUZ0+IYef3flEw8A==", + "optional": true, + "dependencies": { + "readable-stream": "~0.0.2" + } + }, + "node_modules/write-stream/node_modules/readable-stream": { + "version": "0.0.4", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-0.0.4.tgz", + "integrity": "sha512-azrivNydKRYt7zwLV5wWUK7YzKTWs3q87xSmY6DlHapPrCvaT6ZrukvM5erV+yCSSPmZT8zkSdttOHQpWWm9zw==", + "optional": true + }, + "node_modules/ws": { + "version": "8.14.1", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.14.1.tgz", + "integrity": "sha512-4OOseMUq8AzRBI/7SLMUwO+FEDnguetSk7KMb1sHwvF2w2Wv5Hoj0nlifx8vtGsftE/jWHojPy8sMMzYLJ2G/A==", + "engines": { + "node": ">=10.0.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": ">=5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } + } + }, + "node_modules/xhr": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/xhr/-/xhr-2.6.0.tgz", + "integrity": "sha512-/eCGLb5rxjx5e3mF1A7s+pLlR6CGyqWN91fv1JgER5mVWg1MZmlhBvy9kjcsOdRk8RrIujotWyJamfyrp+WIcA==", + "dependencies": { + "global": "~4.4.0", + "is-function": "^1.0.1", + "parse-headers": "^2.0.0", + "xtend": "^4.0.0" + } + }, + "node_modules/xhr-request": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/xhr-request/-/xhr-request-1.1.0.tgz", + "integrity": "sha512-Y7qzEaR3FDtL3fP30k9wO/e+FBnBByZeybKOhASsGP30NIkRAAkKD/sCnLvgEfAIEC1rcmK7YG8f4oEnIrrWzA==", + "dependencies": { + "buffer-to-arraybuffer": "^0.0.5", + "object-assign": "^4.1.1", + "query-string": "^5.0.1", + "simple-get": "^2.7.0", + "timed-out": "^4.0.1", + "url-set-query": "^1.0.0", + "xhr": "^2.0.4" + } + }, + "node_modules/xhr-request-promise": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/xhr-request-promise/-/xhr-request-promise-0.1.3.tgz", + "integrity": "sha512-YUBytBsuwgitWtdRzXDDkWAXzhdGB8bYm0sSzMPZT7Z2MBjMSTHFsyCT1yCRATY+XC69DUrQraRAEgcoCRaIPg==", + "dependencies": { + "xhr-request": "^1.1.0" + } + }, + "node_modules/xhr-request/node_modules/decompress-response": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-3.3.0.tgz", + "integrity": "sha512-BzRPQuY1ip+qDonAOz42gRm/pg9F768C+npV/4JOsxRC2sq+Rlk+Q4ZCAsOhnIaMrgarILY+RMUIvMmmX1qAEA==", + "dependencies": { + "mimic-response": "^1.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/xhr-request/node_modules/mimic-response": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz", + "integrity": "sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==", + "engines": { + "node": ">=4" + } + }, + "node_modules/xhr-request/node_modules/simple-get": { + "version": "2.8.2", + "resolved": "https://registry.npmjs.org/simple-get/-/simple-get-2.8.2.tgz", + "integrity": "sha512-Ijd/rV5o+mSBBs4F/x9oDPtTx9Zb6X9brmnXvMW4J7IR15ngi9q5xxqWBKU744jTZiaXtxaPL7uHG6vtN8kUkw==", + "dependencies": { + "decompress-response": "^3.3.0", + "once": "^1.3.1", + "simple-concat": "^1.0.0" + } + }, + "node_modules/xhr2-cookies": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/xhr2-cookies/-/xhr2-cookies-1.1.0.tgz", + "integrity": "sha512-hjXUA6q+jl/bd8ADHcVfFsSPIf+tyLIjuO9TwJC9WI6JP2zKcS7C+p56I9kCLLsaCiNT035iYvEUUzdEFj/8+g==", + "dependencies": { + "cookiejar": "^2.1.1" + } + }, + "node_modules/xmlhttprequest": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/xmlhttprequest/-/xmlhttprequest-1.8.0.tgz", + "integrity": "sha512-58Im/U0mlVBLM38NdZjHyhuMtCqa61469k2YP/AaPbvCoV9aQGUpbJBj1QRm2ytRiVQBD/fsw7L2bJGDVQswBA==", + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/xss": { + "version": "1.0.14", + "resolved": "https://registry.npmjs.org/xss/-/xss-1.0.14.tgz", + "integrity": "sha512-og7TEJhXvn1a7kzZGQ7ETjdQVS2UfZyTlsEdDOqvQF7GoxNfY+0YLCzBy1kPdsDDx4QuNAonQPddpsn6Xl/7sw==", + "optional": true, + "dependencies": { + "commander": "^2.20.3", + "cssfilter": "0.0.10" + }, + "bin": { + "xss": "bin/xss" + }, + "engines": { + "node": ">= 0.10.0" + } + }, + "node_modules/xtend": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", + "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", + "engines": { + "node": ">=0.4" + } + }, + "node_modules/y18n": { + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", + "engines": { + "node": ">=10" + } + }, + "node_modules/yaeti": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/yaeti/-/yaeti-0.0.6.tgz", + "integrity": "sha512-MvQa//+KcZCUkBTIC9blM+CU9J2GzuTytsOUwf2lidtvkx/6gnEp1QvJv34t9vdjhFmha/mUiNDbN0D0mJWdug==", + "engines": { + "node": ">=0.10.32" + } + }, + "node_modules/yallist": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==" + }, + "node_modules/yaml": { + "version": "1.10.2", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz", + "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==", + "engines": { + "node": ">= 6" + } + }, + "node_modules/yargs": { + "version": "16.2.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", + "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", + "dependencies": { + "cliui": "^7.0.2", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.0", + "y18n": "^5.0.5", + "yargs-parser": "^20.2.2" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/yargs-parser": { + "version": "20.2.4", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.4.tgz", + "integrity": "sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA==", + "engines": { + "node": ">=10" + } + }, + "node_modules/yargs-unparser": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/yargs-unparser/-/yargs-unparser-2.0.0.tgz", + "integrity": "sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA==", + "dependencies": { + "camelcase": "^6.0.0", + "decamelize": "^4.0.0", + "flat": "^5.0.2", + "is-plain-obj": "^2.1.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/yargs-unparser/node_modules/camelcase": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", + "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/yauzl": { + "version": "2.10.0", + "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.10.0.tgz", + "integrity": "sha512-p4a9I6X6nu6IhoGmBqAcbJy1mlC4j27vEPZX9F4L4/vZT3Lyq1VkFHw/V/PUcB9Buo+DG3iHkT0x3Qya58zc3g==", + "dependencies": { + "buffer-crc32": "~0.2.3", + "fd-slicer": "~1.1.0" + } + }, + "node_modules/yn": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz", + "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==", + "optional": true, + "peer": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/yocto-queue": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", + "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/zksync-web3": { + "version": "0.14.3", + "resolved": "https://registry.npmjs.org/zksync-web3/-/zksync-web3-0.14.3.tgz", + "integrity": "sha512-hT72th4AnqyLW1d5Jlv8N2B/qhEnl2NePK2A3org7tAa24niem/UAaHMkEvmWI3SF9waYUPtqAtjpf+yvQ9zvQ==", + "peerDependencies": { + "ethers": "^5.7.0" + } + } + }, + "dependencies": { + "@aduh95/viz.js": { + "version": "3.7.0", + "resolved": "https://registry.npmjs.org/@aduh95/viz.js/-/viz.js-3.7.0.tgz", + "integrity": "sha512-20Pk2Z98fbPLkECcrZSJszKos/OgtvJJR3NcbVfgCJ6EQjDNzW2P1BKqImOz3tJ952dvO2DWEhcLhQ1Wz1e9ng==", + "optional": true + }, + "@ampproject/remapping": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.0.tgz", + "integrity": "sha512-qRmjj8nj9qmLTQXXmaR1cck3UXSRMPrbsLJAasZpF+t3riI71BXed5ebIOYwQntykeZuhjsdweEc9BxH5Jc26w==", + "peer": true, + "requires": { + "@jridgewell/gen-mapping": "^0.1.0", + "@jridgewell/trace-mapping": "^0.3.9" + } + }, + "@apollo/protobufjs": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/@apollo/protobufjs/-/protobufjs-1.2.7.tgz", + "integrity": "sha512-Lahx5zntHPZia35myYDBRuF58tlwPskwHc5CWBZC/4bMKB6siTBWwtMrkqXcsNwQiFSzSx5hKdRPUmemrEp3Gg==", + "optional": true, + "requires": { + "@protobufjs/aspromise": "^1.1.2", + "@protobufjs/base64": "^1.1.2", + "@protobufjs/codegen": "^2.0.4", + "@protobufjs/eventemitter": "^1.1.0", + "@protobufjs/fetch": "^1.1.0", + "@protobufjs/float": "^1.0.2", + "@protobufjs/inquire": "^1.1.0", + "@protobufjs/path": "^1.1.2", + "@protobufjs/pool": "^1.1.0", + "@protobufjs/utf8": "^1.1.0", + "@types/long": "^4.0.0", + "long": "^4.0.0" + } + }, + "@apollo/usage-reporting-protobuf": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/@apollo/usage-reporting-protobuf/-/usage-reporting-protobuf-4.1.1.tgz", + "integrity": "sha512-u40dIUePHaSKVshcedO7Wp+mPiZsaU6xjv9J+VyxpoU/zL6Jle+9zWeG98tr/+SZ0nZ4OXhrbb8SNr0rAPpIDA==", + "optional": true, + "requires": { + "@apollo/protobufjs": "1.2.7" + } + }, + "@apollo/utils.dropunuseddefinitions": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@apollo/utils.dropunuseddefinitions/-/utils.dropunuseddefinitions-1.1.0.tgz", + "integrity": "sha512-jU1XjMr6ec9pPoL+BFWzEPW7VHHulVdGKMkPAMiCigpVIT11VmCbnij0bWob8uS3ODJ65tZLYKAh/55vLw2rbg==", + "optional": true, + "requires": {} + }, + "@apollo/utils.keyvaluecache": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@apollo/utils.keyvaluecache/-/utils.keyvaluecache-1.0.2.tgz", + "integrity": "sha512-p7PVdLPMnPzmXSQVEsy27cYEjVON+SH/Wb7COyW3rQN8+wJgT1nv9jZouYtztWW8ZgTkii5T6tC9qfoDREd4mg==", + "optional": true, + "requires": { + "@apollo/utils.logger": "^1.0.0", + "lru-cache": "7.10.1 - 7.13.1" + }, + "dependencies": { + "lru-cache": { + "version": "7.13.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.13.1.tgz", + "integrity": "sha512-CHqbAq7NFlW3RSnoWXLJBxCWaZVBrfa9UEHId2M3AW8iEBurbqduNexEUCGc3SHc6iCYXNJCDi903LajSVAEPQ==", + "optional": true + } + } + }, + "@apollo/utils.logger": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@apollo/utils.logger/-/utils.logger-1.0.1.tgz", + "integrity": "sha512-XdlzoY7fYNK4OIcvMD2G94RoFZbzTQaNP0jozmqqMudmaGo2I/2Jx71xlDJ801mWA/mbYRihyaw6KJii7k5RVA==", + "optional": true + }, + "@apollo/utils.printwithreducedwhitespace": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@apollo/utils.printwithreducedwhitespace/-/utils.printwithreducedwhitespace-1.1.0.tgz", + "integrity": "sha512-GfFSkAv3n1toDZ4V6u2d7L4xMwLA+lv+6hqXicMN9KELSJ9yy9RzuEXaX73c/Ry+GzRsBy/fdSUGayGqdHfT2Q==", + "optional": true, + "requires": {} + }, + "@apollo/utils.removealiases": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@apollo/utils.removealiases/-/utils.removealiases-1.0.0.tgz", + "integrity": "sha512-6cM8sEOJW2LaGjL/0vHV0GtRaSekrPQR4DiywaApQlL9EdROASZU5PsQibe2MWeZCOhNrPRuHh4wDMwPsWTn8A==", + "optional": true, + "requires": {} + }, + "@apollo/utils.sortast": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@apollo/utils.sortast/-/utils.sortast-1.1.0.tgz", + "integrity": "sha512-VPlTsmUnOwzPK5yGZENN069y6uUHgeiSlpEhRnLFYwYNoJHsuJq2vXVwIaSmts015WTPa2fpz1inkLYByeuRQA==", + "optional": true, + "requires": { + "lodash.sortby": "^4.7.0" + } + }, + "@apollo/utils.stripsensitiveliterals": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@apollo/utils.stripsensitiveliterals/-/utils.stripsensitiveliterals-1.2.0.tgz", + "integrity": "sha512-E41rDUzkz/cdikM5147d8nfCFVKovXxKBcjvLEQ7bjZm/cg9zEcXvS6vFY8ugTubI3fn6zoqo0CyU8zT+BGP9w==", + "optional": true, + "requires": {} + }, + "@apollo/utils.usagereporting": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@apollo/utils.usagereporting/-/utils.usagereporting-1.0.1.tgz", + "integrity": "sha512-6dk+0hZlnDbahDBB2mP/PZ5ybrtCJdLMbeNJD+TJpKyZmSY6bA3SjI8Cr2EM9QA+AdziywuWg+SgbWUF3/zQqQ==", + "optional": true, + "requires": { + "@apollo/usage-reporting-protobuf": "^4.0.0", + "@apollo/utils.dropunuseddefinitions": "^1.1.0", + "@apollo/utils.printwithreducedwhitespace": "^1.1.0", + "@apollo/utils.removealiases": "1.0.0", + "@apollo/utils.sortast": "^1.1.0", + "@apollo/utils.stripsensitiveliterals": "^1.2.0" + } + }, + "@apollographql/apollo-tools": { + "version": "0.5.4", + "resolved": "https://registry.npmjs.org/@apollographql/apollo-tools/-/apollo-tools-0.5.4.tgz", + "integrity": "sha512-shM3q7rUbNyXVVRkQJQseXv6bnYM3BUma/eZhwXR4xsuM+bqWnJKvW7SAfRjP7LuSCocrexa5AXhjjawNHrIlw==", + "optional": true, + "requires": {} + }, + "@apollographql/graphql-playground-html": { + "version": "1.6.29", + "resolved": "https://registry.npmjs.org/@apollographql/graphql-playground-html/-/graphql-playground-html-1.6.29.tgz", + "integrity": "sha512-xCcXpoz52rI4ksJSdOCxeOCn2DLocxwHf9dVT/Q90Pte1LX+LY+91SFtJF3KXVHH8kEin+g1KKCQPKBjZJfWNA==", + "optional": true, + "requires": { + "xss": "^1.0.8" + } + }, + "@arbitrum/nitro-contracts": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@arbitrum/nitro-contracts/-/nitro-contracts-1.0.2.tgz", + "integrity": "sha512-Y+cXIQNsy9UNANnFrDGKhHzNmOWttxpXP0/uJFTRmS+rgS4ozlr81/UmBo3tX6uWjziDtquhYRuG3wx17talOQ==", + "requires": { + "@openzeppelin/contracts": "4.5.0", + "@openzeppelin/contracts-upgradeable": "4.5.2", + "patch-package": "^6.4.7", + "sol2uml": "2.2.0" + }, + "dependencies": { + "@openzeppelin/contracts": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/@openzeppelin/contracts/-/contracts-4.5.0.tgz", + "integrity": "sha512-fdkzKPYMjrRiPK6K4y64e6GzULR7R7RwxSigHS8DDp7aWDeoReqsQI+cxHV1UuhAqX69L1lAaWDxenfP+xiqzA==" + }, + "@openzeppelin/contracts-upgradeable": { + "version": "4.5.2", + "resolved": "https://registry.npmjs.org/@openzeppelin/contracts-upgradeable/-/contracts-upgradeable-4.5.2.tgz", + "integrity": "sha512-xgWZYaPlrEOQo3cBj97Ufiuv79SPd8Brh4GcFYhPgb6WvAq4ppz8dWKL6h+jLAK01rUqMRp/TS9AdXgAeNvCLA==" + } + } + }, + "@aws-crypto/sha256-js": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/@aws-crypto/sha256-js/-/sha256-js-1.2.2.tgz", + "integrity": "sha512-Nr1QJIbW/afYYGzYvrF70LtaHrIRtd4TNAglX8BvlfxJLZ45SAmueIKYl5tWoNBPzp65ymXGFK0Bb1vZUpuc9g==", + "dev": true, + "requires": { + "@aws-crypto/util": "^1.2.2", + "@aws-sdk/types": "^3.1.0", + "tslib": "^1.11.1" + }, + "dependencies": { + "tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "dev": true + } + } + }, + "@aws-crypto/util": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/@aws-crypto/util/-/util-1.2.2.tgz", + "integrity": "sha512-H8PjG5WJ4wz0UXAFXeJjWCW1vkvIJ3qUUD+rGRwJ2/hj+xT58Qle2MTql/2MGzkU+1JLAFuR6aJpLAjHwhmwwg==", + "dev": true, + "requires": { + "@aws-sdk/types": "^3.1.0", + "@aws-sdk/util-utf8-browser": "^3.0.0", + "tslib": "^1.11.1" + }, + "dependencies": { + "tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "dev": true + } + } + }, + "@aws-sdk/types": { + "version": "3.342.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.342.0.tgz", + "integrity": "sha512-5uyXVda/AgUpdZNJ9JPHxwyxr08miPiZ/CKSMcRdQVjcNnrdzY9m/iM9LvnQT44sQO+IEEkF2IoZIWvZcq199A==", + "dev": true, + "requires": { + "tslib": "^2.5.0" + } + }, + "@aws-sdk/util-utf8-browser": { + "version": "3.259.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-utf8-browser/-/util-utf8-browser-3.259.0.tgz", + "integrity": "sha512-UvFa/vR+e19XookZF8RzFZBrw2EUkQWxiBW0yYQAhvk3C+QVGl0H3ouca8LDBlBfQKXwmW3huo/59H8rwb1wJw==", + "dev": true, + "requires": { + "tslib": "^2.3.1" + } + }, + "@babel/code-frame": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.18.6.tgz", + "integrity": "sha512-TDCmlK5eOvH+eH7cdAFlNXeVJqWIQ7gW9tY1GJIpUtFb6CmjVyq2VM3u71bOyR8CRihcCgMUYoDNyLXao3+70Q==", + "peer": true, + "requires": { + "@babel/highlight": "^7.18.6" + } + }, + "@babel/compat-data": { + "version": "7.19.4", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.19.4.tgz", + "integrity": "sha512-CHIGpJcUQ5lU9KrPHTjBMhVwQG6CQjxfg36fGXl3qk/Gik1WwWachaXFuo0uCWJT/mStOKtcbFJCaVLihC1CMw==" + }, + "@babel/core": { + "version": "7.19.6", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.19.6.tgz", + "integrity": "sha512-D2Ue4KHpc6Ys2+AxpIx1BZ8+UegLLLE2p3KJEuJRKmokHOtl49jQ5ny1773KsGLZs8MQvBidAF6yWUJxRqtKtg==", + "peer": true, + "requires": { + "@ampproject/remapping": "^2.1.0", + "@babel/code-frame": "^7.18.6", + "@babel/generator": "^7.19.6", + "@babel/helper-compilation-targets": "^7.19.3", + "@babel/helper-module-transforms": "^7.19.6", + "@babel/helpers": "^7.19.4", + "@babel/parser": "^7.19.6", + "@babel/template": "^7.18.10", + "@babel/traverse": "^7.19.6", + "@babel/types": "^7.19.4", + "convert-source-map": "^1.7.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.2", + "json5": "^2.2.1", + "semver": "^6.3.0" + }, + "dependencies": { + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "peer": true + } + } + }, + "@babel/generator": { + "version": "7.19.6", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.19.6.tgz", + "integrity": "sha512-oHGRUQeoX1QrKeJIKVe0hwjGqNnVYsM5Nep5zo0uE0m42sLH+Fsd2pStJ5sRM1bNyTUUoz0pe2lTeMJrb/taTA==", + "peer": true, + "requires": { + "@babel/types": "^7.19.4", + "@jridgewell/gen-mapping": "^0.3.2", + "jsesc": "^2.5.1" + }, + "dependencies": { + "@jridgewell/gen-mapping": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.2.tgz", + "integrity": "sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A==", + "peer": true, + "requires": { + "@jridgewell/set-array": "^1.0.1", + "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/trace-mapping": "^0.3.9" + } + } + } + }, + "@babel/helper-compilation-targets": { + "version": "7.19.3", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.19.3.tgz", + "integrity": "sha512-65ESqLGyGmLvgR0mst5AdW1FkNlj9rQsCKduzEoEPhBCDFGXvz2jW6bXFG6i0/MrV2s7hhXjjb2yAzcPuQlLwg==", + "requires": { + "@babel/compat-data": "^7.19.3", + "@babel/helper-validator-option": "^7.18.6", + "browserslist": "^4.21.3", + "semver": "^6.3.0" + }, + "dependencies": { + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" + } + } + }, + "@babel/helper-define-polyfill-provider": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.3.3.tgz", + "integrity": "sha512-z5aQKU4IzbqCC1XH0nAqfsFLMVSo22SBKUc0BxGrLkolTdPTructy0ToNnlO2zA4j9Q/7pjMZf0DSY+DSTYzww==", + "requires": { + "@babel/helper-compilation-targets": "^7.17.7", + "@babel/helper-plugin-utils": "^7.16.7", + "debug": "^4.1.1", + "lodash.debounce": "^4.0.8", + "resolve": "^1.14.2", + "semver": "^6.1.2" + }, + "dependencies": { + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" + } + } + }, + "@babel/helper-environment-visitor": { + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.18.9.tgz", + "integrity": "sha512-3r/aACDJ3fhQ/EVgFy0hpj8oHyHpQc+LPtJoY9SzTThAsStm4Ptegq92vqKoE3vD706ZVFWITnMnxucw+S9Ipg==", + "peer": true + }, + "@babel/helper-function-name": { + "version": "7.19.0", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.19.0.tgz", + "integrity": "sha512-WAwHBINyrpqywkUH0nTnNgI5ina5TFn85HKS0pbPDfxFfhyR/aNQEn4hGi1P1JyT//I0t4OgXUlofzWILRvS5w==", + "peer": true, + "requires": { + "@babel/template": "^7.18.10", + "@babel/types": "^7.19.0" + } + }, + "@babel/helper-hoist-variables": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.18.6.tgz", + "integrity": "sha512-UlJQPkFqFULIcyW5sbzgbkxn2FKRgwWiRexcuaR8RNJRy8+LLveqPjwZV/bwrLZCN0eUHD/x8D0heK1ozuoo6Q==", + "peer": true, + "requires": { + "@babel/types": "^7.18.6" + } + }, + "@babel/helper-module-imports": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.18.6.tgz", + "integrity": "sha512-0NFvs3VkuSYbFi1x2Vd6tKrywq+z/cLeYC/RJNFrIX/30Bf5aiGYbtvGXolEktzJH8o5E5KJ3tT+nkxuuZFVlA==", + "requires": { + "@babel/types": "^7.18.6" + } + }, + "@babel/helper-module-transforms": { + "version": "7.19.6", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.19.6.tgz", + "integrity": "sha512-fCmcfQo/KYr/VXXDIyd3CBGZ6AFhPFy1TfSEJ+PilGVlQT6jcbqtHAM4C1EciRqMza7/TpOUZliuSH+U6HAhJw==", + "peer": true, + "requires": { + "@babel/helper-environment-visitor": "^7.18.9", + "@babel/helper-module-imports": "^7.18.6", + "@babel/helper-simple-access": "^7.19.4", + "@babel/helper-split-export-declaration": "^7.18.6", + "@babel/helper-validator-identifier": "^7.19.1", + "@babel/template": "^7.18.10", + "@babel/traverse": "^7.19.6", + "@babel/types": "^7.19.4" + } + }, + "@babel/helper-plugin-utils": { + "version": "7.19.0", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.19.0.tgz", + "integrity": "sha512-40Ryx7I8mT+0gaNxm8JGTZFUITNqdLAgdg0hXzeVZxVD6nFsdhQvip6v8dqkRHzsz1VFpFAaOCHNn0vKBL7Czw==" + }, + "@babel/helper-simple-access": { + "version": "7.19.4", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.19.4.tgz", + "integrity": "sha512-f9Xq6WqBFqaDfbCzn2w85hwklswz5qsKlh7f08w4Y9yhJHpnNC0QemtSkK5YyOY8kPGvyiwdzZksGUhnGdaUIg==", + "peer": true, + "requires": { + "@babel/types": "^7.19.4" + } + }, + "@babel/helper-split-export-declaration": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.18.6.tgz", + "integrity": "sha512-bde1etTx6ZyTmobl9LLMMQsaizFVZrquTEHOqKeQESMKo4PlObf+8+JA25ZsIpZhT/WEd39+vOdLXAFG/nELpA==", + "peer": true, + "requires": { + "@babel/types": "^7.18.6" + } + }, + "@babel/helper-string-parser": { + "version": "7.19.4", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.19.4.tgz", + "integrity": "sha512-nHtDoQcuqFmwYNYPz3Rah5ph2p8PFeFCsZk9A/48dPc/rGocJ5J3hAAZ7pb76VWX3fZKu+uEr/FhH5jLx7umrw==" + }, + "@babel/helper-validator-identifier": { + "version": "7.19.1", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.19.1.tgz", + "integrity": "sha512-awrNfaMtnHUr653GgGEs++LlAvW6w+DcPrOliSMXWCKo597CwL5Acf/wWdNkf/tfEQE3mjkeD1YOVZOUV/od1w==" + }, + "@babel/helper-validator-option": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.18.6.tgz", + "integrity": "sha512-XO7gESt5ouv/LRJdrVjkShckw6STTaB7l9BrpBaAHDeF5YZT+01PCwmR0SJHnkW6i8OwW/EVWRShfi4j2x+KQw==" + }, + "@babel/helpers": { + "version": "7.19.4", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.19.4.tgz", + "integrity": "sha512-G+z3aOx2nfDHwX/kyVii5fJq+bgscg89/dJNWpYeKeBv3v9xX8EIabmx1k6u9LS04H7nROFVRVK+e3k0VHp+sw==", + "peer": true, + "requires": { + "@babel/template": "^7.18.10", + "@babel/traverse": "^7.19.4", + "@babel/types": "^7.19.4" + } + }, + "@babel/highlight": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.18.6.tgz", + "integrity": "sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g==", + "peer": true, + "requires": { + "@babel/helper-validator-identifier": "^7.18.6", + "chalk": "^2.0.0", + "js-tokens": "^4.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "peer": true, + "requires": { + "color-convert": "^1.9.0" + } + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "peer": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "peer": true, + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", + "peer": true + }, + "escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "peer": true + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "peer": true + }, + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "peer": true, + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "@babel/parser": { + "version": "7.19.6", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.19.6.tgz", + "integrity": "sha512-h1IUp81s2JYJ3mRkdxJgs4UvmSsRvDrx5ICSJbPvtWYv5i1nTBGcBpnog+89rAFMwvvru6E5NUHdBe01UeSzYA==", + "peer": true + }, + "@babel/plugin-transform-runtime": { + "version": "7.19.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.19.6.tgz", + "integrity": "sha512-PRH37lz4JU156lYFW1p8OxE5i7d6Sl/zV58ooyr+q1J1lnQPyg5tIiXlIwNVhJaY4W3TmOtdc8jqdXQcB1v5Yw==", + "requires": { + "@babel/helper-module-imports": "^7.18.6", + "@babel/helper-plugin-utils": "^7.19.0", + "babel-plugin-polyfill-corejs2": "^0.3.3", + "babel-plugin-polyfill-corejs3": "^0.6.0", + "babel-plugin-polyfill-regenerator": "^0.4.1", + "semver": "^6.3.0" + }, + "dependencies": { + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" + } + } + }, + "@babel/runtime": { + "version": "7.22.15", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.22.15.tgz", + "integrity": "sha512-T0O+aa+4w0u06iNmapipJXMV4HoUir03hpx3/YqXXhu9xim3w+dVphjFWl1OH8NbZHw5Lbm9k45drDkgq2VNNA==", + "requires": { + "regenerator-runtime": "^0.14.0" + } + }, + "@babel/template": { + "version": "7.18.10", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.18.10.tgz", + "integrity": "sha512-TI+rCtooWHr3QJ27kJxfjutghu44DLnasDMwpDqCXVTal9RLp3RSYNh4NdBrRP2cQAoG9A8juOQl6P6oZG4JxA==", + "peer": true, + "requires": { + "@babel/code-frame": "^7.18.6", + "@babel/parser": "^7.18.10", + "@babel/types": "^7.18.10" + } + }, + "@babel/traverse": { + "version": "7.19.6", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.19.6.tgz", + "integrity": "sha512-6l5HrUCzFM04mfbG09AagtYyR2P0B71B1wN7PfSPiksDPz2k5H9CBC1tcZpz2M8OxbKTPccByoOJ22rUKbpmQQ==", + "peer": true, + "requires": { + "@babel/code-frame": "^7.18.6", + "@babel/generator": "^7.19.6", + "@babel/helper-environment-visitor": "^7.18.9", + "@babel/helper-function-name": "^7.19.0", + "@babel/helper-hoist-variables": "^7.18.6", + "@babel/helper-split-export-declaration": "^7.18.6", + "@babel/parser": "^7.19.6", + "@babel/types": "^7.19.4", + "debug": "^4.1.0", + "globals": "^11.1.0" + } + }, + "@babel/types": { + "version": "7.19.4", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.19.4.tgz", + "integrity": "sha512-M5LK7nAeS6+9j7hAq+b3fQs+pNfUtTGq+yFFfHnauFA8zQtLRfmuipmsKDKKLuyG+wC8ABW43A153YNawNTEtw==", + "requires": { + "@babel/helper-string-parser": "^7.19.4", + "@babel/helper-validator-identifier": "^7.19.1", + "to-fast-properties": "^2.0.0" + } + }, + "@balena/dockerignore": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@balena/dockerignore/-/dockerignore-1.0.2.tgz", + "integrity": "sha512-wMue2Sy4GAVTk6Ic4tJVcnfdau+gx2EnG7S+uAEe+TWJFqE4YoWN4/H8MSLj4eYJKxGg26lZwboEniNiNwZQ6Q==" + }, + "@chainlink/contracts": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/@chainlink/contracts/-/contracts-0.6.1.tgz", + "integrity": "sha512-EuwijGexttw0UjfrW+HygwhQIrGAbqpf1ue28R55HhWMHBzphEH0PhWm8DQmFfj5OZNy8Io66N4L0nStkZ3QKQ==", + "requires": { + "@eth-optimism/contracts": "^0.5.21", + "@openzeppelin/contracts": "~4.3.3", + "@openzeppelin/contracts-upgradeable": "^4.7.3", + "@openzeppelin/contracts-v0.7": "npm:@openzeppelin/contracts@v3.4.2" + }, + "dependencies": { + "@openzeppelin/contracts": { + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/@openzeppelin/contracts/-/contracts-4.3.3.tgz", + "integrity": "sha512-tDBopO1c98Yk7Cv/PZlHqrvtVjlgK5R4J6jxLwoO7qxK4xqOiZG+zSkIvGFpPZ0ikc3QOED3plgdqjgNTnBc7g==" + } + } + }, + "@chainsafe/as-sha256": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/@chainsafe/as-sha256/-/as-sha256-0.3.1.tgz", + "integrity": "sha512-hldFFYuf49ed7DAakWVXSJODuq3pzJEguD8tQ7h+sGkM18vja+OFoJI9krnGmgzyuZC2ETX0NOIcCTy31v2Mtg==" + }, + "@chainsafe/persistent-merkle-tree": { + "version": "0.4.2", + "resolved": "https://registry.npmjs.org/@chainsafe/persistent-merkle-tree/-/persistent-merkle-tree-0.4.2.tgz", + "integrity": "sha512-lLO3ihKPngXLTus/L7WHKaw9PnNJWizlOF1H9NNzHP6Xvh82vzg9F2bzkXhYIFshMZ2gTCEz8tq6STe7r5NDfQ==", + "requires": { + "@chainsafe/as-sha256": "^0.3.1" + } + }, + "@chainsafe/ssz": { + "version": "0.9.4", + "resolved": "https://registry.npmjs.org/@chainsafe/ssz/-/ssz-0.9.4.tgz", + "integrity": "sha512-77Qtg2N1ayqs4Bg/wvnWfg5Bta7iy7IRh8XqXh7oNMeP2HBbBwx8m6yTpA8p0EHItWPEBkgZd5S5/LSlp3GXuQ==", + "requires": { + "@chainsafe/as-sha256": "^0.3.1", + "@chainsafe/persistent-merkle-tree": "^0.4.2", + "case": "^1.6.3" + } + }, + "@colors/colors": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@colors/colors/-/colors-1.5.0.tgz", + "integrity": "sha512-ooWCrlZP11i8GImSjTHYHLkvFDP48nS4+204nGb1RiX/WXYHmJA2III9/e2DWVabCESdW7hBAEzHRqUn9OUVvQ==", + "optional": true + }, + "@ensdomains/address-encoder": { + "version": "0.1.9", + "resolved": "https://registry.npmjs.org/@ensdomains/address-encoder/-/address-encoder-0.1.9.tgz", + "integrity": "sha512-E2d2gP4uxJQnDu2Kfg1tHNspefzbLT8Tyjrm5sEuim32UkU2sm5xL4VXtgc2X33fmPEw9+jUMpGs4veMbf+PYg==", + "requires": { + "bech32": "^1.1.3", + "blakejs": "^1.1.0", + "bn.js": "^4.11.8", + "bs58": "^4.0.1", + "crypto-addr-codec": "^0.1.7", + "nano-base32": "^1.0.1", + "ripemd160": "^2.0.2" + }, + "dependencies": { + "bn.js": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==" + } + } + }, + "@ensdomains/ens": { + "version": "0.4.5", + "resolved": "https://registry.npmjs.org/@ensdomains/ens/-/ens-0.4.5.tgz", + "integrity": "sha512-JSvpj1iNMFjK6K+uVl4unqMoa9rf5jopb8cya5UGBWz23Nw8hSNT7efgUx4BTlAPAgpNlEioUfeTyQ6J9ZvTVw==", + "requires": { + "bluebird": "^3.5.2", + "eth-ens-namehash": "^2.0.8", + "solc": "^0.4.20", + "testrpc": "0.0.1", + "web3-utils": "^1.0.0-beta.31" + }, + "dependencies": { + "ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA==" + }, + "camelcase": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-3.0.0.tgz", + "integrity": "sha512-4nhGqUkc4BqbBBB4Q6zLuD7lzzrHYrjKGeYaEji/3tFR5VdJu9v+LilhGIVe8wxEJPPOeWo7eg8dwY13TZ1BNg==" + }, + "cliui": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-3.2.0.tgz", + "integrity": "sha512-0yayqDxWQbqk3ojkYqUKqaAQ6AfNKeKWRNA8kR0WXzAsdHpP4BIaOmMAG87JGuO6qcobyW4GjxHd9PmhEd+T9w==", + "requires": { + "string-width": "^1.0.1", + "strip-ansi": "^3.0.1", + "wrap-ansi": "^2.0.0" + } + }, + "decamelize": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", + "integrity": "sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==" + }, + "fs-extra": { + "version": "0.30.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-0.30.0.tgz", + "integrity": "sha512-UvSPKyhMn6LEd/WpUaV9C9t3zATuqoqfWc3QdPhPLb58prN9tqYPlPWi8Krxi44loBoUzlobqZ3+8tGpxxSzwA==", + "requires": { + "graceful-fs": "^4.1.2", + "jsonfile": "^2.1.0", + "klaw": "^1.0.0", + "path-is-absolute": "^1.0.0", + "rimraf": "^2.2.8" + } + }, + "get-caller-file": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-1.0.3.tgz", + "integrity": "sha512-3t6rVToeoZfYSGd8YoLFR2DJkiQrIiUrGcjvFX2mDw3bn6k2OtwHN0TNCLbBO+w8qTvimhDkv+LSscbJY1vE6w==" + }, + "is-fullwidth-code-point": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", + "integrity": "sha512-1pqUqRjkhPJ9miNq9SwMfdvi6lBJcd6eFxvfaivQhaH3SgisfiuudvFntdKOmxuee/77l+FPjKrQjWvmPjWrRw==", + "requires": { + "number-is-nan": "^1.0.0" + } + }, + "jsonfile": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-2.4.0.tgz", + "integrity": "sha512-PKllAqbgLgxHaj8TElYymKCAgrASebJrWpTnEkOaTowt23VKXXN0sUeriJ+eh7y6ufb/CC5ap11pz71/cM0hUw==", + "requires": { + "graceful-fs": "^4.1.6" + } + }, + "require-from-string": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-1.2.1.tgz", + "integrity": "sha512-H7AkJWMobeskkttHyhTVtS0fxpFLjxhbfMa6Bk3wimP7sdPRGL3EyCg3sAQenFfAe+xQ+oAc85Nmtvq0ROM83Q==" + }, + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" + }, + "solc": { + "version": "0.4.26", + "resolved": "https://registry.npmjs.org/solc/-/solc-0.4.26.tgz", + "integrity": "sha512-o+c6FpkiHd+HPjmjEVpQgH7fqZ14tJpXhho+/bQXlXbliLIS/xjXb42Vxh+qQY1WCSTMQ0+a5vR9vi0MfhU6mA==", + "requires": { + "fs-extra": "^0.30.0", + "memorystream": "^0.3.1", + "require-from-string": "^1.1.0", + "semver": "^5.3.0", + "yargs": "^4.7.1" + } + }, + "string-width": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", + "integrity": "sha512-0XsVpQLnVCXHJfyEs8tC0zpTVIr5PKKsQtkT29IwupnPTjtPmQ3xT/4yCREF9hYkV/3M3kzcUTSAZT6a6h81tw==", + "requires": { + "code-point-at": "^1.0.0", + "is-fullwidth-code-point": "^1.0.0", + "strip-ansi": "^3.0.0" + } + }, + "strip-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha512-VhumSSbBqDTP8p2ZLKj40UjBCV4+v8bUSEpUb4KjRgWk9pbqGF4REFj6KEagidb2f/M6AzC0EmFyDNGaw9OCzg==", + "requires": { + "ansi-regex": "^2.0.0" + } + }, + "wrap-ansi": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-2.1.0.tgz", + "integrity": "sha512-vAaEaDM946gbNpH5pLVNR+vX2ht6n0Bt3GXwVB1AuAqZosOvHNF3P7wDnh8KLkSqgUh0uh77le7Owgoz+Z9XBw==", + "requires": { + "string-width": "^1.0.1", + "strip-ansi": "^3.0.1" + } + }, + "y18n": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-3.2.2.tgz", + "integrity": "sha512-uGZHXkHnhF0XeeAPgnKfPv1bgKAYyVvmNL1xlKsPYZPaIHxGti2hHqvOCQv71XMsLxu1QjergkqogUnms5D3YQ==" + }, + "yargs": { + "version": "4.8.1", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-4.8.1.tgz", + "integrity": "sha512-LqodLrnIDM3IFT+Hf/5sxBnEGECrfdC1uIbgZeJmESCSo4HoCAaKEus8MylXHAkdacGc0ye+Qa+dpkuom8uVYA==", + "requires": { + "cliui": "^3.2.0", + "decamelize": "^1.1.1", + "get-caller-file": "^1.0.1", + "lodash.assign": "^4.0.3", + "os-locale": "^1.4.0", + "read-pkg-up": "^1.0.1", + "require-directory": "^2.1.1", + "require-main-filename": "^1.0.1", + "set-blocking": "^2.0.0", + "string-width": "^1.0.1", + "which-module": "^1.0.0", + "window-size": "^0.2.0", + "y18n": "^3.2.1", + "yargs-parser": "^2.4.1" + } + }, + "yargs-parser": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-2.4.1.tgz", + "integrity": "sha512-9pIKIJhnI5tonzG6OnCFlz/yln8xHYcGl+pn3xR0Vzff0vzN1PbNRaelgfgRUwZ3s4i3jvxT9WhmUGL4whnasA==", + "requires": { + "camelcase": "^3.0.0", + "lodash.assign": "^4.0.6" + } + } + } + }, + "@ensdomains/ensjs": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@ensdomains/ensjs/-/ensjs-2.1.0.tgz", + "integrity": "sha512-GRbGPT8Z/OJMDuxs75U/jUNEC0tbL0aj7/L/QQznGYKm/tiasp+ndLOaoULy9kKJFC0TBByqfFliEHDgoLhyog==", + "requires": { + "@babel/runtime": "^7.4.4", + "@ensdomains/address-encoder": "^0.1.7", + "@ensdomains/ens": "0.4.5", + "@ensdomains/resolver": "0.2.4", + "content-hash": "^2.5.2", + "eth-ens-namehash": "^2.0.8", + "ethers": "^5.0.13", + "js-sha3": "^0.8.0" + } + }, + "@ensdomains/resolver": { + "version": "0.2.4", + "resolved": "https://registry.npmjs.org/@ensdomains/resolver/-/resolver-0.2.4.tgz", + "integrity": "sha512-bvaTH34PMCbv6anRa9I/0zjLJgY4EuznbEMgbV77JBCQ9KNC46rzi0avuxpOfu+xDjPEtSFGqVEOr5GlUSGudA==" + }, + "@eth-optimism/contracts": { + "version": "0.5.37", + "resolved": "https://registry.npmjs.org/@eth-optimism/contracts/-/contracts-0.5.37.tgz", + "integrity": "sha512-HbNUUDIM1dUAM0hWPfGp3l9/Zte40zi8QhVbUSIwdYRA7jG7cZgbteqavrjW8wwFqxkWX9IrtA0KAR7pNlSAIQ==", + "requires": { + "@eth-optimism/core-utils": "0.10.1", + "@ethersproject/abstract-provider": "^5.7.0", + "@ethersproject/abstract-signer": "^5.7.0" + } + }, + "@eth-optimism/contracts-bedrock": { + "version": "0.16.0", + "resolved": "https://registry.npmjs.org/@eth-optimism/contracts-bedrock/-/contracts-bedrock-0.16.0.tgz", + "integrity": "sha512-MfHJdeQ/BzHgkoHnA+NGb1hU8CH0OFsp4ylmFi0uwYh3xPJxcHt9qhy1g4MGGMUGAPIUmlBPaqhwbBlQkaeFrA==", + "requires": { + "@openzeppelin/contracts": "4.7.3", + "@openzeppelin/contracts-upgradeable": "4.7.3", + "@rari-capital/solmate": "github:transmissions11/solmate#8f9b23f8838670afda0fd8983f2c41e8037ae6bc", + "clones-with-immutable-args": "github:Saw-mon-and-Natalie/clones-with-immutable-args#105efee1b9127ed7f6fedf139e1fc796ce8791f2" + }, + "dependencies": { + "@openzeppelin/contracts": { + "version": "4.7.3", + "resolved": "https://registry.npmjs.org/@openzeppelin/contracts/-/contracts-4.7.3.tgz", + "integrity": "sha512-dGRS0agJzu8ybo44pCIf3xBaPQN/65AIXNgK8+4gzKd5kbvlqyxryUYVLJv7fK98Seyd2hDZzVEHSWAh0Bt1Yw==" + }, + "@openzeppelin/contracts-upgradeable": { + "version": "4.7.3", + "resolved": "https://registry.npmjs.org/@openzeppelin/contracts-upgradeable/-/contracts-upgradeable-4.7.3.tgz", + "integrity": "sha512-+wuegAMaLcZnLCJIvrVUDzA9z/Wp93f0Dla/4jJvIhijRrPabjQbZe6fWiECLaJyfn5ci9fqf9vTw3xpQOad2A==" + } + } + }, + "@eth-optimism/core-utils": { + "version": "0.10.1", + "resolved": "https://registry.npmjs.org/@eth-optimism/core-utils/-/core-utils-0.10.1.tgz", + "integrity": "sha512-IJvG5UtYvyz6An9QdohlCLoeB3NBFxx2lRJKlPzvYYlfugUNNCHsajRIWIwJTcPRRma0WPd46JUsKACLJDdNrA==", + "requires": { + "@ethersproject/abi": "^5.7.0", + "@ethersproject/abstract-provider": "^5.7.0", "@ethersproject/address": "^5.7.0", "@ethersproject/bignumber": "^5.7.0", "@ethersproject/bytes": "^5.7.0", @@ -32896,10 +36971,25 @@ "@chainsafe/persistent-merkle-tree": "^0.6.1" } }, + "@noble/curves": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@noble/curves/-/curves-1.0.0.tgz", + "integrity": "sha512-2upgEu0iLiDVDZkNLeFV2+ht0BAVgQnEmCk6JsOch9Rp8xfkMCbvbAZlA2pBHQc73dbl+vFOXfqkf4uemdn0bw==", + "requires": { + "@noble/hashes": "1.3.0" + }, + "dependencies": { + "@noble/hashes": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.3.0.tgz", + "integrity": "sha512-ilHEACi9DwqJB0pw7kv+Apvh50jiiSyR/cQ3y4W7lOR5mhvn/50FLUfsnfJz0BDZtl/RR16kXvptiv6q1msYZg==" + } + } + }, "@noble/hashes": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.3.0.tgz", - "integrity": "sha512-ilHEACi9DwqJB0pw7kv+Apvh50jiiSyR/cQ3y4W7lOR5mhvn/50FLUfsnfJz0BDZtl/RR16kXvptiv6q1msYZg==" + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.3.1.tgz", + "integrity": "sha512-EbqwksQwz9xDRGfDST86whPBgM65E0OH/pCgqW0GBVzO22bNE+NuIbeTb714+IfSjU3aRk47EUvXIb5bTsenKA==" }, "@scure/bip32": { "version": "1.3.0", @@ -32929,6 +37019,13 @@ "@noble/hashes": "1.3.0", "@scure/bip32": "1.3.0", "@scure/bip39": "1.2.0" + }, + "dependencies": { + "@noble/hashes": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.3.0.tgz", + "integrity": "sha512-ilHEACi9DwqJB0pw7kv+Apvh50jiiSyR/cQ3y4W7lOR5mhvn/50FLUfsnfJz0BDZtl/RR16kXvptiv6q1msYZg==" + } } } } @@ -32967,10 +37064,25 @@ "@chainsafe/persistent-merkle-tree": "^0.6.1" } }, + "@noble/curves": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@noble/curves/-/curves-1.0.0.tgz", + "integrity": "sha512-2upgEu0iLiDVDZkNLeFV2+ht0BAVgQnEmCk6JsOch9Rp8xfkMCbvbAZlA2pBHQc73dbl+vFOXfqkf4uemdn0bw==", + "requires": { + "@noble/hashes": "1.3.0" + }, + "dependencies": { + "@noble/hashes": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.3.0.tgz", + "integrity": "sha512-ilHEACi9DwqJB0pw7kv+Apvh50jiiSyR/cQ3y4W7lOR5mhvn/50FLUfsnfJz0BDZtl/RR16kXvptiv6q1msYZg==" + } + } + }, "@noble/hashes": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.3.0.tgz", - "integrity": "sha512-ilHEACi9DwqJB0pw7kv+Apvh50jiiSyR/cQ3y4W7lOR5mhvn/50FLUfsnfJz0BDZtl/RR16kXvptiv6q1msYZg==" + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.3.1.tgz", + "integrity": "sha512-EbqwksQwz9xDRGfDST86whPBgM65E0OH/pCgqW0GBVzO22bNE+NuIbeTb714+IfSjU3aRk47EUvXIb5bTsenKA==" }, "@scure/bip32": { "version": "1.3.0", @@ -33000,6 +37112,13 @@ "@noble/hashes": "1.3.0", "@scure/bip32": "1.3.0", "@scure/bip39": "1.2.0" + }, + "dependencies": { + "@noble/hashes": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.3.0.tgz", + "integrity": "sha512-ilHEACi9DwqJB0pw7kv+Apvh50jiiSyR/cQ3y4W7lOR5mhvn/50FLUfsnfJz0BDZtl/RR16kXvptiv6q1msYZg==" + } } } } @@ -33453,9 +37572,9 @@ } }, "@flashbots/ethers-provider-bundle": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/@flashbots/ethers-provider-bundle/-/ethers-provider-bundle-0.6.1.tgz", - "integrity": "sha512-W7tSX832mi7XKlbg4dIMzV1HMw5Dg0ox0YOqPxW2nO2JqsAZwWYFrAk4nNZnsqRdexHiPF4JUYez/ELI5VpScA==", + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/@flashbots/ethers-provider-bundle/-/ethers-provider-bundle-0.6.2.tgz", + "integrity": "sha512-W4Hi47zWggWgLBwhoxH3qaojudAjcbBU+ldEYi5o06UQm/25Hk/AUvCLiN+9nvy1g3xxpF9QBdMniUwjC4cpBw==", "requires": {} }, "@ganache/ethereum-address": { @@ -33844,86 +37963,6 @@ "events": "^3.2.0" } }, - "@ledgerhq/hw-transport-node-hid": { - "version": "5.26.0", - "resolved": "https://registry.npmjs.org/@ledgerhq/hw-transport-node-hid/-/hw-transport-node-hid-5.26.0.tgz", - "integrity": "sha512-qhaefZVZatJ6UuK8Wb6WSFNOLWc2mxcv/xgsfKi5HJCIr4bPF/ecIeN+7fRcEaycxj4XykY6Z4A7zDVulfFH4w==", - "optional": true, - "requires": { - "@ledgerhq/devices": "^5.26.0", - "@ledgerhq/errors": "^5.26.0", - "@ledgerhq/hw-transport": "^5.26.0", - "@ledgerhq/hw-transport-node-hid-noevents": "^5.26.0", - "@ledgerhq/logs": "^5.26.0", - "lodash": "^4.17.20", - "node-hid": "1.3.0", - "usb": "^1.6.3" - } - }, - "@ledgerhq/hw-transport-node-hid-noevents": { - "version": "5.51.1", - "resolved": "https://registry.npmjs.org/@ledgerhq/hw-transport-node-hid-noevents/-/hw-transport-node-hid-noevents-5.51.1.tgz", - "integrity": "sha512-9wFf1L8ZQplF7XOY2sQGEeOhpmBRzrn+4X43kghZ7FBDoltrcK+s/D7S+7ffg3j2OySyP6vIIIgloXylao5Scg==", - "optional": true, - "requires": { - "@ledgerhq/devices": "^5.51.1", - "@ledgerhq/errors": "^5.50.0", - "@ledgerhq/hw-transport": "^5.51.1", - "@ledgerhq/logs": "^5.50.0", - "node-hid": "2.1.1" - }, - "dependencies": { - "@ledgerhq/hw-transport": { - "version": "5.51.1", - "resolved": "https://registry.npmjs.org/@ledgerhq/hw-transport/-/hw-transport-5.51.1.tgz", - "integrity": "sha512-6wDYdbWrw9VwHIcoDnqWBaDFyviyjZWv6H9vz9Vyhe4Qd7TIFmbTl/eWs6hZvtZBza9K8y7zD8ChHwRI4s9tSw==", - "optional": true, - "requires": { - "@ledgerhq/devices": "^5.51.1", - "@ledgerhq/errors": "^5.50.0", - "events": "^3.3.0" - } - }, - "node-addon-api": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-3.2.1.tgz", - "integrity": "sha512-mmcei9JghVNDYydghQmeDX8KoAm0FAiYyIcUt/N4nhyAipB17pllZQDOJD2fotxABnt4Mdz+dKTO7eftLg4d0A==", - "optional": true - }, - "node-hid": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/node-hid/-/node-hid-2.1.1.tgz", - "integrity": "sha512-Skzhqow7hyLZU93eIPthM9yjot9lszg9xrKxESleEs05V2NcbUptZc5HFqzjOkSmL0sFlZFr3kmvaYebx06wrw==", - "optional": true, - "requires": { - "bindings": "^1.5.0", - "node-addon-api": "^3.0.2", - "prebuild-install": "^6.0.0" - } - }, - "prebuild-install": { - "version": "6.1.4", - "resolved": "https://registry.npmjs.org/prebuild-install/-/prebuild-install-6.1.4.tgz", - "integrity": "sha512-Z4vpywnK1lBg+zdPCVCsKq0xO66eEV9rWo2zrROGGiRS4JtueBOdlB1FnY8lcy7JsUud/Q3ijUxyWN26Ika0vQ==", - "optional": true, - "requires": { - "detect-libc": "^1.0.3", - "expand-template": "^2.0.3", - "github-from-package": "0.0.0", - "minimist": "^1.2.3", - "mkdirp-classic": "^0.5.3", - "napi-build-utils": "^1.0.1", - "node-abi": "^2.21.0", - "npmlog": "^4.0.1", - "pump": "^3.0.0", - "rc": "^1.2.7", - "simple-get": "^3.0.3", - "tar-fs": "^2.0.0", - "tunnel-agent": "^0.6.0" - } - } - } - }, "@ledgerhq/hw-transport-u2f": { "version": "5.26.0", "resolved": "https://registry.npmjs.org/@ledgerhq/hw-transport-u2f/-/hw-transport-u2f-5.26.0.tgz", @@ -33941,9 +37980,9 @@ "integrity": "sha512-swKHYCOZUGyVt4ge0u8a7AwNcA//h4nx5wIi0sruGye1IJ5Cva0GyK9L2/WdX+kWVTKp92ZiEo1df31lrWGPgA==" }, "@maticnetwork/maticjs": { - "version": "3.5.0", - "resolved": "https://registry.npmjs.org/@maticnetwork/maticjs/-/maticjs-3.5.0.tgz", - "integrity": "sha512-f7wZucF38Ii/nIBV9qqQzlEE33/IWCVaToSXIhGC3DaZZME9VlUf4cgt/n43hQouwYpmkpgEoTDDs3QzTr5UcQ==", + "version": "3.6.6", + "resolved": "https://registry.npmjs.org/@maticnetwork/maticjs/-/maticjs-3.6.6.tgz", + "integrity": "sha512-VhbK9yHdRgQl9GWt1XwasHTDEImd0ApmHFG0yCN8xjPz0YvXgsSPb+p+M5JzQYEgLQGZ3L/K3nnVYHBTiRIhPA==", "requires": { "@ethereumjs/block": "^3.6.2", "ethereumjs-util": "^7.1.4", @@ -34078,17 +38117,17 @@ } }, "@noble/curves": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@noble/curves/-/curves-1.0.0.tgz", - "integrity": "sha512-2upgEu0iLiDVDZkNLeFV2+ht0BAVgQnEmCk6JsOch9Rp8xfkMCbvbAZlA2pBHQc73dbl+vFOXfqkf4uemdn0bw==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@noble/curves/-/curves-1.1.0.tgz", + "integrity": "sha512-091oBExgENk/kGj3AZmtBDMpxQPDtxQABR2B9lb1JbVTs6ytdzZNwvhxQ4MWasRNEzlbEH8jCWFCwhF/Obj5AA==", "requires": { - "@noble/hashes": "1.3.0" + "@noble/hashes": "1.3.1" }, "dependencies": { "@noble/hashes": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.3.0.tgz", - "integrity": "sha512-ilHEACi9DwqJB0pw7kv+Apvh50jiiSyR/cQ3y4W7lOR5mhvn/50FLUfsnfJz0BDZtl/RR16kXvptiv6q1msYZg==" + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.3.1.tgz", + "integrity": "sha512-EbqwksQwz9xDRGfDST86whPBgM65E0OH/pCgqW0GBVzO22bNE+NuIbeTb714+IfSjU3aRk47EUvXIb5bTsenKA==" } } }, @@ -34098,15 +38137,15 @@ "integrity": "sha512-CE0FCR57H2acVI5UOzIGSSIYxZ6v/HOhDR0Ro9VLyhnzLwx0o8W1mmgaqlEUx4049qJDlIBRztv5k+MM8vbO3A==" }, "@nomicfoundation/ethereumjs-block": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/@nomicfoundation/ethereumjs-block/-/ethereumjs-block-5.0.1.tgz", - "integrity": "sha512-u1Yioemi6Ckj3xspygu/SfFvm8vZEO8/Yx5a1QLzi6nVU0jz3Pg2OmHKJ5w+D9Ogk1vhwRiqEBAqcb0GVhCyHw==", - "requires": { - "@nomicfoundation/ethereumjs-common": "4.0.1", - "@nomicfoundation/ethereumjs-rlp": "5.0.1", - "@nomicfoundation/ethereumjs-trie": "6.0.1", - "@nomicfoundation/ethereumjs-tx": "5.0.1", - "@nomicfoundation/ethereumjs-util": "9.0.1", + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/@nomicfoundation/ethereumjs-block/-/ethereumjs-block-5.0.2.tgz", + "integrity": "sha512-hSe6CuHI4SsSiWWjHDIzWhSiAVpzMUcDRpWYzN0T9l8/Rz7xNn3elwVOJ/tAyS0LqL6vitUD78Uk7lQDXZun7Q==", + "requires": { + "@nomicfoundation/ethereumjs-common": "4.0.2", + "@nomicfoundation/ethereumjs-rlp": "5.0.2", + "@nomicfoundation/ethereumjs-trie": "6.0.2", + "@nomicfoundation/ethereumjs-tx": "5.0.2", + "@nomicfoundation/ethereumjs-util": "9.0.2", "ethereum-cryptography": "0.1.3", "ethers": "^5.7.1" }, @@ -34136,17 +38175,17 @@ } }, "@nomicfoundation/ethereumjs-blockchain": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/@nomicfoundation/ethereumjs-blockchain/-/ethereumjs-blockchain-7.0.1.tgz", - "integrity": "sha512-NhzndlGg829XXbqJEYrF1VeZhAwSPgsK/OB7TVrdzft3y918hW5KNd7gIZ85sn6peDZOdjBsAXIpXZ38oBYE5A==", - "requires": { - "@nomicfoundation/ethereumjs-block": "5.0.1", - "@nomicfoundation/ethereumjs-common": "4.0.1", - "@nomicfoundation/ethereumjs-ethash": "3.0.1", - "@nomicfoundation/ethereumjs-rlp": "5.0.1", - "@nomicfoundation/ethereumjs-trie": "6.0.1", - "@nomicfoundation/ethereumjs-tx": "5.0.1", - "@nomicfoundation/ethereumjs-util": "9.0.1", + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/@nomicfoundation/ethereumjs-blockchain/-/ethereumjs-blockchain-7.0.2.tgz", + "integrity": "sha512-8UUsSXJs+MFfIIAKdh3cG16iNmWzWC/91P40sazNvrqhhdR/RtGDlFk2iFTGbBAZPs2+klZVzhRX8m2wvuvz3w==", + "requires": { + "@nomicfoundation/ethereumjs-block": "5.0.2", + "@nomicfoundation/ethereumjs-common": "4.0.2", + "@nomicfoundation/ethereumjs-ethash": "3.0.2", + "@nomicfoundation/ethereumjs-rlp": "5.0.2", + "@nomicfoundation/ethereumjs-trie": "6.0.2", + "@nomicfoundation/ethereumjs-tx": "5.0.2", + "@nomicfoundation/ethereumjs-util": "9.0.2", "abstract-level": "^1.0.3", "debug": "^4.3.3", "ethereum-cryptography": "0.1.3", @@ -34180,22 +38219,22 @@ } }, "@nomicfoundation/ethereumjs-common": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/@nomicfoundation/ethereumjs-common/-/ethereumjs-common-4.0.1.tgz", - "integrity": "sha512-OBErlkfp54GpeiE06brBW/TTbtbuBJV5YI5Nz/aB2evTDo+KawyEzPjBlSr84z/8MFfj8wS2wxzQX1o32cev5g==", + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/@nomicfoundation/ethereumjs-common/-/ethereumjs-common-4.0.2.tgz", + "integrity": "sha512-I2WGP3HMGsOoycSdOTSqIaES0ughQTueOsddJ36aYVpI3SN8YSusgRFLwzDJwRFVIYDKx/iJz0sQ5kBHVgdDwg==", "requires": { - "@nomicfoundation/ethereumjs-util": "9.0.1", + "@nomicfoundation/ethereumjs-util": "9.0.2", "crc-32": "^1.2.0" } }, "@nomicfoundation/ethereumjs-ethash": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/@nomicfoundation/ethereumjs-ethash/-/ethereumjs-ethash-3.0.1.tgz", - "integrity": "sha512-KDjGIB5igzWOp8Ik5I6QiRH5DH+XgILlplsHR7TEuWANZA759G6krQ6o8bvj+tRUz08YygMQu/sGd9mJ1DYT8w==", + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@nomicfoundation/ethereumjs-ethash/-/ethereumjs-ethash-3.0.2.tgz", + "integrity": "sha512-8PfoOQCcIcO9Pylq0Buijuq/O73tmMVURK0OqdjhwqcGHYC2PwhbajDh7GZ55ekB0Px197ajK3PQhpKoiI/UPg==", "requires": { - "@nomicfoundation/ethereumjs-block": "5.0.1", - "@nomicfoundation/ethereumjs-rlp": "5.0.1", - "@nomicfoundation/ethereumjs-util": "9.0.1", + "@nomicfoundation/ethereumjs-block": "5.0.2", + "@nomicfoundation/ethereumjs-rlp": "5.0.2", + "@nomicfoundation/ethereumjs-util": "9.0.2", "abstract-level": "^1.0.3", "bigint-crypto-utils": "^3.0.23", "ethereum-cryptography": "0.1.3" @@ -34226,14 +38265,14 @@ } }, "@nomicfoundation/ethereumjs-evm": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/@nomicfoundation/ethereumjs-evm/-/ethereumjs-evm-2.0.1.tgz", - "integrity": "sha512-oL8vJcnk0Bx/onl+TgQOQ1t/534GKFaEG17fZmwtPFeH8S5soiBYPCLUrvANOl4sCp9elYxIMzIiTtMtNNN8EQ==", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/@nomicfoundation/ethereumjs-evm/-/ethereumjs-evm-2.0.2.tgz", + "integrity": "sha512-rBLcUaUfANJxyOx9HIdMX6uXGin6lANCulIm/pjMgRqfiCRMZie3WKYxTSd8ZE/d+qT+zTedBF4+VHTdTSePmQ==", "requires": { "@ethersproject/providers": "^5.7.1", - "@nomicfoundation/ethereumjs-common": "4.0.1", - "@nomicfoundation/ethereumjs-tx": "5.0.1", - "@nomicfoundation/ethereumjs-util": "9.0.1", + "@nomicfoundation/ethereumjs-common": "4.0.2", + "@nomicfoundation/ethereumjs-tx": "5.0.2", + "@nomicfoundation/ethereumjs-util": "9.0.2", "debug": "^4.3.3", "ethereum-cryptography": "0.1.3", "mcl-wasm": "^0.7.1", @@ -34265,17 +38304,17 @@ } }, "@nomicfoundation/ethereumjs-rlp": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/@nomicfoundation/ethereumjs-rlp/-/ethereumjs-rlp-5.0.1.tgz", - "integrity": "sha512-xtxrMGa8kP4zF5ApBQBtjlSbN5E2HI8m8FYgVSYAnO6ssUoY5pVPGy2H8+xdf/bmMa22Ce8nWMH3aEW8CcqMeQ==" + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/@nomicfoundation/ethereumjs-rlp/-/ethereumjs-rlp-5.0.2.tgz", + "integrity": "sha512-QwmemBc+MMsHJ1P1QvPl8R8p2aPvvVcKBbvHnQOKBpBztEo0omN0eaob6FeZS/e3y9NSe+mfu3nNFBHszqkjTA==" }, "@nomicfoundation/ethereumjs-statemanager": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/@nomicfoundation/ethereumjs-statemanager/-/ethereumjs-statemanager-2.0.1.tgz", - "integrity": "sha512-B5ApMOnlruVOR7gisBaYwFX+L/AP7i/2oAahatssjPIBVDF6wTX1K7Qpa39E/nzsH8iYuL3krkYeUFIdO3EMUQ==", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/@nomicfoundation/ethereumjs-statemanager/-/ethereumjs-statemanager-2.0.2.tgz", + "integrity": "sha512-dlKy5dIXLuDubx8Z74sipciZnJTRSV/uHG48RSijhgm1V7eXYFC567xgKtsKiVZB1ViTP9iFL4B6Je0xD6X2OA==", "requires": { - "@nomicfoundation/ethereumjs-common": "4.0.1", - "@nomicfoundation/ethereumjs-rlp": "5.0.1", + "@nomicfoundation/ethereumjs-common": "4.0.2", + "@nomicfoundation/ethereumjs-rlp": "5.0.2", "debug": "^4.3.3", "ethereum-cryptography": "0.1.3", "ethers": "^5.7.1", @@ -34307,12 +38346,12 @@ } }, "@nomicfoundation/ethereumjs-trie": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/@nomicfoundation/ethereumjs-trie/-/ethereumjs-trie-6.0.1.tgz", - "integrity": "sha512-A64It/IMpDVODzCgxDgAAla8jNjNtsoQZIzZUfIV5AY6Coi4nvn7+VReBn5itlxMiL2yaTlQr9TRWp3CSI6VoA==", + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/@nomicfoundation/ethereumjs-trie/-/ethereumjs-trie-6.0.2.tgz", + "integrity": "sha512-yw8vg9hBeLYk4YNg5MrSJ5H55TLOv2FSWUTROtDtTMMmDGROsAu+0tBjiNGTnKRi400M6cEzoFfa89Fc5k8NTQ==", "requires": { - "@nomicfoundation/ethereumjs-rlp": "5.0.1", - "@nomicfoundation/ethereumjs-util": "9.0.1", + "@nomicfoundation/ethereumjs-rlp": "5.0.2", + "@nomicfoundation/ethereumjs-util": "9.0.2", "@types/readable-stream": "^2.3.13", "ethereum-cryptography": "0.1.3", "readable-stream": "^3.6.0" @@ -34343,15 +38382,15 @@ } }, "@nomicfoundation/ethereumjs-tx": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/@nomicfoundation/ethereumjs-tx/-/ethereumjs-tx-5.0.1.tgz", - "integrity": "sha512-0HwxUF2u2hrsIM1fsasjXvlbDOq1ZHFV2dd1yGq8CA+MEYhaxZr8OTScpVkkxqMwBcc5y83FyPl0J9MZn3kY0w==", + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/@nomicfoundation/ethereumjs-tx/-/ethereumjs-tx-5.0.2.tgz", + "integrity": "sha512-T+l4/MmTp7VhJeNloMkM+lPU3YMUaXdcXgTGCf8+ZFvV9NYZTRLFekRwlG6/JMmVfIfbrW+dRRJ9A6H5Q/Z64g==", "requires": { "@chainsafe/ssz": "^0.9.2", "@ethersproject/providers": "^5.7.2", - "@nomicfoundation/ethereumjs-common": "4.0.1", - "@nomicfoundation/ethereumjs-rlp": "5.0.1", - "@nomicfoundation/ethereumjs-util": "9.0.1", + "@nomicfoundation/ethereumjs-common": "4.0.2", + "@nomicfoundation/ethereumjs-rlp": "5.0.2", + "@nomicfoundation/ethereumjs-util": "9.0.2", "ethereum-cryptography": "0.1.3" }, "dependencies": { @@ -34380,12 +38419,12 @@ } }, "@nomicfoundation/ethereumjs-util": { - "version": "9.0.1", - "resolved": "https://registry.npmjs.org/@nomicfoundation/ethereumjs-util/-/ethereumjs-util-9.0.1.tgz", - "integrity": "sha512-TwbhOWQ8QoSCFhV/DDfSmyfFIHjPjFBj957219+V3jTZYZ2rf9PmDtNOeZWAE3p3vlp8xb02XGpd0v6nTUPbsA==", + "version": "9.0.2", + "resolved": "https://registry.npmjs.org/@nomicfoundation/ethereumjs-util/-/ethereumjs-util-9.0.2.tgz", + "integrity": "sha512-4Wu9D3LykbSBWZo8nJCnzVIYGvGCuyiYLIJa9XXNVt1q1jUzHdB+sJvx95VGCpPkCT+IbLecW6yfzy3E1bQrwQ==", "requires": { "@chainsafe/ssz": "^0.10.0", - "@nomicfoundation/ethereumjs-rlp": "5.0.1", + "@nomicfoundation/ethereumjs-rlp": "5.0.2", "ethereum-cryptography": "0.1.3" }, "dependencies": { @@ -34431,19 +38470,19 @@ } }, "@nomicfoundation/ethereumjs-vm": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/@nomicfoundation/ethereumjs-vm/-/ethereumjs-vm-7.0.1.tgz", - "integrity": "sha512-rArhyn0jPsS/D+ApFsz3yVJMQ29+pVzNZ0VJgkzAZ+7FqXSRtThl1C1prhmlVr3YNUlfpZ69Ak+RUT4g7VoOuQ==", - "requires": { - "@nomicfoundation/ethereumjs-block": "5.0.1", - "@nomicfoundation/ethereumjs-blockchain": "7.0.1", - "@nomicfoundation/ethereumjs-common": "4.0.1", - "@nomicfoundation/ethereumjs-evm": "2.0.1", - "@nomicfoundation/ethereumjs-rlp": "5.0.1", - "@nomicfoundation/ethereumjs-statemanager": "2.0.1", - "@nomicfoundation/ethereumjs-trie": "6.0.1", - "@nomicfoundation/ethereumjs-tx": "5.0.1", - "@nomicfoundation/ethereumjs-util": "9.0.1", + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/@nomicfoundation/ethereumjs-vm/-/ethereumjs-vm-7.0.2.tgz", + "integrity": "sha512-Bj3KZT64j54Tcwr7Qm/0jkeZXJMfdcAtRBedou+Hx0dPOSIgqaIr0vvLwP65TpHbak2DmAq+KJbW2KNtIoFwvA==", + "requires": { + "@nomicfoundation/ethereumjs-block": "5.0.2", + "@nomicfoundation/ethereumjs-blockchain": "7.0.2", + "@nomicfoundation/ethereumjs-common": "4.0.2", + "@nomicfoundation/ethereumjs-evm": "2.0.2", + "@nomicfoundation/ethereumjs-rlp": "5.0.2", + "@nomicfoundation/ethereumjs-statemanager": "2.0.2", + "@nomicfoundation/ethereumjs-trie": "6.0.2", + "@nomicfoundation/ethereumjs-tx": "5.0.2", + "@nomicfoundation/ethereumjs-util": "9.0.2", "debug": "^4.3.3", "ethereum-cryptography": "0.1.3", "mcl-wasm": "^0.7.1", @@ -34504,36 +38543,6 @@ "@nomicfoundation/solidity-analyzer-win32-x64-msvc": "0.1.0" } }, - "@nomicfoundation/solidity-analyzer-darwin-arm64": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/@nomicfoundation/solidity-analyzer-darwin-arm64/-/solidity-analyzer-darwin-arm64-0.1.0.tgz", - "integrity": "sha512-vEF3yKuuzfMHsZecHQcnkUrqm8mnTWfJeEVFHpg+cO+le96xQA4lAJYdUan8pXZohQxv1fSReQsn4QGNuBNuCw==", - "optional": true - }, - "@nomicfoundation/solidity-analyzer-darwin-x64": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/@nomicfoundation/solidity-analyzer-darwin-x64/-/solidity-analyzer-darwin-x64-0.1.0.tgz", - "integrity": "sha512-dlHeIg0pTL4dB1l9JDwbi/JG6dHQaU1xpDK+ugYO8eJ1kxx9Dh2isEUtA4d02cQAl22cjOHTvifAk96A+ItEHA==", - "optional": true - }, - "@nomicfoundation/solidity-analyzer-freebsd-x64": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/@nomicfoundation/solidity-analyzer-freebsd-x64/-/solidity-analyzer-freebsd-x64-0.1.0.tgz", - "integrity": "sha512-WFCZYMv86WowDA4GiJKnebMQRt3kCcFqHeIomW6NMyqiKqhK1kIZCxSLDYsxqlx396kKLPN1713Q1S8tu68GKg==", - "optional": true - }, - "@nomicfoundation/solidity-analyzer-linux-arm64-gnu": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/@nomicfoundation/solidity-analyzer-linux-arm64-gnu/-/solidity-analyzer-linux-arm64-gnu-0.1.0.tgz", - "integrity": "sha512-DTw6MNQWWlCgc71Pq7CEhEqkb7fZnS7oly13pujs4cMH1sR0JzNk90Mp1zpSCsCs4oKan2ClhMlLKtNat/XRKQ==", - "optional": true - }, - "@nomicfoundation/solidity-analyzer-linux-arm64-musl": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/@nomicfoundation/solidity-analyzer-linux-arm64-musl/-/solidity-analyzer-linux-arm64-musl-0.1.0.tgz", - "integrity": "sha512-wUpUnR/3GV5Da88MhrxXh/lhb9kxh9V3Jya2NpBEhKDIRCDmtXMSqPMXHZmOR9DfCwCvG6vLFPr/+YrPCnUN0w==", - "optional": true - }, "@nomicfoundation/solidity-analyzer-linux-x64-gnu": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/@nomicfoundation/solidity-analyzer-linux-x64-gnu/-/solidity-analyzer-linux-x64-gnu-0.1.0.tgz", @@ -34546,24 +38555,6 @@ "integrity": "sha512-A1he/8gy/JeBD3FKvmI6WUJrGrI5uWJNr5Xb9WdV+DK0F8msuOqpEByLlnTdLkXMwW7nSl3awvLezOs9xBHJEg==", "optional": true }, - "@nomicfoundation/solidity-analyzer-win32-arm64-msvc": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/@nomicfoundation/solidity-analyzer-win32-arm64-msvc/-/solidity-analyzer-win32-arm64-msvc-0.1.0.tgz", - "integrity": "sha512-7x5SXZ9R9H4SluJZZP8XPN+ju7Mx+XeUMWZw7ZAqkdhP5mK19I4vz3x0zIWygmfE8RT7uQ5xMap0/9NPsO+ykw==", - "optional": true - }, - "@nomicfoundation/solidity-analyzer-win32-ia32-msvc": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/@nomicfoundation/solidity-analyzer-win32-ia32-msvc/-/solidity-analyzer-win32-ia32-msvc-0.1.0.tgz", - "integrity": "sha512-m7w3xf+hnE774YRXu+2mGV7RiF3QJtUoiYU61FascCkQhX3QMQavh7saH/vzb2jN5D24nT/jwvaHYX/MAM9zUw==", - "optional": true - }, - "@nomicfoundation/solidity-analyzer-win32-x64-msvc": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/@nomicfoundation/solidity-analyzer-win32-x64-msvc/-/solidity-analyzer-win32-x64-msvc-0.1.0.tgz", - "integrity": "sha512-xCuybjY0sLJQnJhupiFAXaek2EqF0AP0eBjgzaalPXSNvCEN6ZYHvUzdA50ENDVeSYFXcUsYf3+FsD3XKaeptA==", - "optional": true - }, "@nomiclabs/hardhat-docker": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/@nomiclabs/hardhat-docker/-/hardhat-docker-2.0.2.tgz", @@ -34935,9 +38926,9 @@ } }, "@nomiclabs/hardhat-vyper": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/@nomiclabs/hardhat-vyper/-/hardhat-vyper-3.0.3.tgz", - "integrity": "sha512-WzpXACy7d1AsEmanAOmEqqxI4wrIvDx6q6k07Xb68Dc4JB/+9gKb6kz6UF0Qviq8vYUVfJ8YRpyAjHVZ2uQFlg==", + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@nomiclabs/hardhat-vyper/-/hardhat-vyper-3.0.4.tgz", + "integrity": "sha512-VSmNCs0MQCn7qgWubfSkJkFEJmsTvbimPsbxknM5jLFi7pNeDVB5eO00GaoweuZiWKBVTHYJsylVK5686GoPrQ==", "dev": true, "requires": { "debug": "^4.1.1", @@ -34982,9 +38973,9 @@ } }, "@nomiclabs/hardhat-waffle": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@nomiclabs/hardhat-waffle/-/hardhat-waffle-2.0.5.tgz", - "integrity": "sha512-U1RH9OQ1mWYQfb+moX5aTgGjpVVlOcpiFI47wwnaGG4kLhcTy90cNiapoqZenxcRAITVbr0/+QSduINL5EsUIQ==", + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/@nomiclabs/hardhat-waffle/-/hardhat-waffle-2.0.6.tgz", + "integrity": "sha512-+Wz0hwmJGSI17B+BhU/qFRZ1l6/xMW82QGXE/Gi+WTmwgJrQefuBs1lIf7hzQ1hLk6hpkvb/zwcNkpVKRYTQYg==", "dev": true, "requires": {} }, @@ -35119,9 +39110,9 @@ } }, "@openzeppelin/contracts": { - "version": "4.8.3", - "resolved": "https://registry.npmjs.org/@openzeppelin/contracts/-/contracts-4.8.3.tgz", - "integrity": "sha512-bQHV8R9Me8IaJoJ2vPG4rXcL7seB7YVuskr4f+f5RyOStSZetwzkWtoqDMl5erkBJy0lDRUnIR2WIkPiC0GJlg==" + "version": "4.9.3", + "resolved": "https://registry.npmjs.org/@openzeppelin/contracts/-/contracts-4.9.3.tgz", + "integrity": "sha512-He3LieZ1pP2TNt5JbkPA4PNT9WC3gOTOlDcFGJW4Le4QKqwmiNJCRt44APfxMxvq7OugU/cqYuPcSBzOw38DAg==" }, "@openzeppelin/contracts-upgradeable": { "version": "4.8.3", @@ -35134,9 +39125,9 @@ "integrity": "sha512-z0zMCjyhhp4y7XKAcDAi3Vgms4T2PstwBdahiO0+9NaGICQKjynK3wduSRplTgk4LXmoO1yfDGO5RbjKYxtuxA==" }, "@openzeppelin/hardhat-upgrades": { - "version": "1.26.0", - "resolved": "https://registry.npmjs.org/@openzeppelin/hardhat-upgrades/-/hardhat-upgrades-1.26.0.tgz", - "integrity": "sha512-ggCvdIf7A9QcMedCaswecgt3N7hacx3qYOn+4bNPqMAwslo/SJ9vN4AhV0VWkDcY4CqFFou3RFQmDWNeLMBX9A==", + "version": "1.27.0", + "resolved": "https://registry.npmjs.org/@openzeppelin/hardhat-upgrades/-/hardhat-upgrades-1.27.0.tgz", + "integrity": "sha512-+OwrHWDz9tzpmBev6t2CtZM2tRpy/ybhg5e3GIgyeqTxK2vUV40dxIxO6lie+qKeJHZ2RIdDwvSTSiCEJif+fA==", "dev": true, "requires": { "@openzeppelin/upgrades-core": "^1.26.2", @@ -35220,9 +39211,9 @@ } }, "@poanet/solidity-flattener": { - "version": "3.0.8", - "resolved": "https://registry.npmjs.org/@poanet/solidity-flattener/-/solidity-flattener-3.0.8.tgz", - "integrity": "sha512-WS6sUXfvNRwybGKKpA8MznjbP1Qf/ViWW79dqXKE1w+mosSHizNxdNfsdeKfZJfFEYFyJDvqT16prBGFMrlxUQ==", + "version": "3.0.9", + "resolved": "https://registry.npmjs.org/@poanet/solidity-flattener/-/solidity-flattener-3.0.9.tgz", + "integrity": "sha512-3vTJ05uRGJqP0t81963Ed99uijjXSyqgXfdrBD04su1auBU9enOGzUP6H2H7SyWBAmwUPmBb/z9Qy96ytyvtDw==", "requires": { "bunyan": "^1.8.12", "decomment": "^0.9.1", @@ -35294,6 +39285,11 @@ "integrity": "sha512-Vvn3zZrhQZkkBE8LSuW3em98c0FwgO4nxzv6OdSxPKJIEKY2bGbHn+mhGIPerzI4twdxaP8/0+06HBpwf345Lw==", "optional": true }, + "@rari-capital/solmate": { + "version": "git+ssh://git@github.com/transmissions11/solmate.git#8f9b23f8838670afda0fd8983f2c41e8037ae6bc", + "integrity": "sha512-cW0PouqpoiEDhhkOxkqQKcjG4oMJ1Qb+kY6aiwBlgOjpfnhmXK7lkU5ZkHKC22ypQj6lvSc6CaHmXXaPywPsYg==", + "from": "@rari-capital/solmate@github:transmissions11/solmate#8f9b23f8838670afda0fd8983f2c41e8037ae6bc" + }, "@redux-saga/core": { "version": "1.2.3", "resolved": "https://registry.npmjs.org/@redux-saga/core/-/core-1.2.3.tgz", @@ -35622,31 +39618,31 @@ } }, "@solana/web3.js": { - "version": "1.76.0", - "resolved": "https://registry.npmjs.org/@solana/web3.js/-/web3.js-1.76.0.tgz", - "integrity": "sha512-aJtF/nTs+9St+KtTK/wgVJ+SinfjYzn+3w1ygYIPw8ST6LH+qHBn8XkodgDTwlv/xzNkaVz1kkUDOZ8BPXyZWA==", + "version": "1.78.4", + "resolved": "https://registry.npmjs.org/@solana/web3.js/-/web3.js-1.78.4.tgz", + "integrity": "sha512-up5VG1dK+GPhykmuMIozJZBbVqpm77vbOG6/r5dS7NBGZonwHfTLdBbsYc3rjmaQ4DpCXUa3tUc4RZHRORvZrw==", "requires": { - "@babel/runtime": "^7.12.5", + "@babel/runtime": "^7.22.6", "@noble/curves": "^1.0.0", - "@noble/hashes": "^1.3.0", + "@noble/hashes": "^1.3.1", "@solana/buffer-layout": "^4.0.0", - "agentkeepalive": "^4.2.1", + "agentkeepalive": "^4.3.0", "bigint-buffer": "^1.1.5", - "bn.js": "^5.0.0", + "bn.js": "^5.2.1", "borsh": "^0.7.0", "bs58": "^4.0.1", "buffer": "6.0.3", "fast-stable-stringify": "^1.0.0", - "jayson": "^3.4.4", - "node-fetch": "^2.6.7", + "jayson": "^4.1.0", + "node-fetch": "^2.6.12", "rpc-websockets": "^7.5.1", "superstruct": "^0.14.2" }, "dependencies": { "@noble/hashes": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.3.0.tgz", - "integrity": "sha512-ilHEACi9DwqJB0pw7kv+Apvh50jiiSyR/cQ3y4W7lOR5mhvn/50FLUfsnfJz0BDZtl/RR16kXvptiv6q1msYZg==" + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.3.1.tgz", + "integrity": "sha512-EbqwksQwz9xDRGfDST86whPBgM65E0OH/pCgqW0GBVzO22bNE+NuIbeTb714+IfSjU3aRk47EUvXIb5bTsenKA==" } } }, @@ -35667,13 +39663,31 @@ } }, "@truffle/abi-utils": { - "version": "0.3.10", - "resolved": "https://registry.npmjs.org/@truffle/abi-utils/-/abi-utils-0.3.10.tgz", - "integrity": "sha512-Q3TXsF0NIct3KFLL2giF/alfSoKf5axyw+4wQdDRlihFrG1nbTBzWq+Q0ya6oHffZDida0NSpnJIf5IhFMV+JQ==", + "version": "0.3.9", + "resolved": "https://registry.npmjs.org/@truffle/abi-utils/-/abi-utils-0.3.9.tgz", + "integrity": "sha512-G5dqgwRHx5zwlXjz3QT8OJVfB2cOqWwD6DwKso0KttUt/zejhCjnkKq72rSgyeLMkz7wBB9ERLOsupLBILM8MA==", + "dev": true, "requires": { "change-case": "3.0.2", "fast-check": "3.1.1", - "web3-utils": "1.10.0" + "web3-utils": "1.8.2" + }, + "dependencies": { + "web3-utils": { + "version": "1.8.2", + "resolved": "https://registry.npmjs.org/web3-utils/-/web3-utils-1.8.2.tgz", + "integrity": "sha512-v7j6xhfLQfY7xQDrUP0BKbaNrmZ2/+egbqP9q3KYmOiPpnvAfol+32slgL0WX/5n8VPvKCK5EZ1HGrAVICSToA==", + "dev": true, + "requires": { + "bn.js": "^5.2.1", + "ethereum-bloom-filters": "^1.0.6", + "ethereumjs-util": "^7.1.0", + "ethjs-unit": "0.1.6", + "number-to-bn": "1.7.0", + "randombytes": "^2.1.0", + "utf8": "3.0.0" + } + } } }, "@truffle/blockchain-utils": { @@ -35683,9 +39697,9 @@ "dev": true }, "@truffle/code-utils": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/@truffle/code-utils/-/code-utils-3.0.2.tgz", - "integrity": "sha512-Q4FyYIX9G4GyMa8RJDk19kvgiyGZ1CGEx2RmVcXoCDZqEyiHLzqjvCRp+/fuBz2fv7szO6d+60LO1gLCGS1drQ==", + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@truffle/code-utils/-/code-utils-3.0.4.tgz", + "integrity": "sha512-MWK3TMisIFaBpSjK7tt1GoQan7DQDBqT2iSsdQOGD74C7r9NMwsIdnL2EYoB/DPcEJ7B8yP4grlG2fQTrPF96g==", "requires": { "cbor": "^5.2.0" } @@ -35750,30 +39764,30 @@ } }, "@truffle/compile-common": { - "version": "0.9.4", - "resolved": "https://registry.npmjs.org/@truffle/compile-common/-/compile-common-0.9.4.tgz", - "integrity": "sha512-mnqJB/hLiPHNf+WKwt/2MH6lv34xSG/SFCib7+ckAklutUqVLeFo8EwQxinuHNkU7LY0C+YgZXhK1WTCO5YRJQ==", + "version": "0.9.8", + "resolved": "https://registry.npmjs.org/@truffle/compile-common/-/compile-common-0.9.8.tgz", + "integrity": "sha512-DTpiyo32t/YhLI1spn84D3MHYHrnoVqO+Gp7ZHrYNwDs86mAxtNiH5lsVzSb8cPgiqlvNsRCU9nm9R0YmKMTBQ==", "requires": { - "@truffle/error": "^0.2.0", + "@truffle/error": "^0.2.2", "colors": "1.4.0" }, "dependencies": { "@truffle/error": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/@truffle/error/-/error-0.2.0.tgz", - "integrity": "sha512-Fe0/z4WWb7IP2gBnv3l6zqP87Y0kSMs7oiSLakKJq17q3GUunrHSdioKuNspdggxkXIBhEQLhi8C+LJdwmHKWQ==" + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/@truffle/error/-/error-0.2.2.tgz", + "integrity": "sha512-TqbzJ0O8DHh34cu8gDujnYl4dUl6o2DE4PR6iokbybvnIm/L2xl6+Gv1VC+YJS45xfH83Yo3/Zyg/9Oq8/xZWg==" } } }, "@truffle/config": { - "version": "1.3.56", - "resolved": "https://registry.npmjs.org/@truffle/config/-/config-1.3.56.tgz", - "integrity": "sha512-2wg6zfaUlP3iZP9jHugx3WsyJ2dbIB+nEBULPK5YVbSkqBfXrzW0b9RJYQvyuk/AyFrp/7ycD4r5LnFLq1IHZA==", + "version": "1.3.61", + "resolved": "https://registry.npmjs.org/@truffle/config/-/config-1.3.61.tgz", + "integrity": "sha512-L4uyG47V+k0NrSoVJ9D+hp2jcMstihW1QlNuXiu5g3mU24BjrozlJT34DFkczh/TtRceLjdrQJKA8WJCMICutw==", "optional": true, "requires": { - "@truffle/error": "^0.2.0", - "@truffle/events": "^0.1.23", - "@truffle/provider": "^0.3.9", + "@truffle/error": "^0.2.2", + "@truffle/events": "^0.1.25", + "@truffle/provider": "^0.3.13", "conf": "^10.1.2", "debug": "^4.3.1", "find-up": "^2.1.0", @@ -35782,9 +39796,9 @@ }, "dependencies": { "@truffle/error": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/@truffle/error/-/error-0.2.0.tgz", - "integrity": "sha512-Fe0/z4WWb7IP2gBnv3l6zqP87Y0kSMs7oiSLakKJq17q3GUunrHSdioKuNspdggxkXIBhEQLhi8C+LJdwmHKWQ==", + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/@truffle/error/-/error-0.2.2.tgz", + "integrity": "sha512-TqbzJ0O8DHh34cu8gDujnYl4dUl6o2DE4PR6iokbybvnIm/L2xl6+Gv1VC+YJS45xfH83Yo3/Zyg/9Oq8/xZWg==", "optional": true }, "find-up": { @@ -36249,14 +40263,14 @@ } }, "@truffle/dashboard-message-bus-client": { - "version": "0.1.10", - "resolved": "https://registry.npmjs.org/@truffle/dashboard-message-bus-client/-/dashboard-message-bus-client-0.1.10.tgz", - "integrity": "sha512-r9GpdR96T8xzk2Z3Qq5lowixT6hQwDZ9F3D3oNjOv2AOwBrC7dGkt1Ra1FQRsABn4K7LUVvnjjn6rALlsatAdw==", + "version": "0.1.12", + "resolved": "https://registry.npmjs.org/@truffle/dashboard-message-bus-client/-/dashboard-message-bus-client-0.1.12.tgz", + "integrity": "sha512-pI9G0La9tTstb2J2wxUZIMx6H+ZF0XBlsGN3HBkffr4edT0oT12WMCK9GxmKE22Q5VnpXl7wGjatRSEx0C9qDQ==", "optional": true, "requires": { - "@truffle/dashboard-message-bus-common": "^0.1.5", - "@truffle/promise-tracker": "^0.1.5", - "axios": "1.2.4", + "@truffle/dashboard-message-bus-common": "^0.1.7", + "@truffle/promise-tracker": "^0.1.7", + "axios": "1.5.0", "debug": "^4.3.1", "delay": "^5.0.0", "isomorphic-ws": "^4.0.1", @@ -36266,9 +40280,9 @@ }, "dependencies": { "axios": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/axios/-/axios-1.2.4.tgz", - "integrity": "sha512-lIQuCfBJvZB/Bv7+RWUqEJqNShGOVpk9v7P0ZWx5Ip0qY6u7JBAU6dzQPMLasU9vHL2uD8av/1FDJXj7n6c39w==", + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/axios/-/axios-1.5.0.tgz", + "integrity": "sha512-D4DdjDo5CY50Qms0qGQTTw6Q44jl7zRwY7bthds06pUGfChBCTcQs+N743eFWGEd6pRTMd6A+I87aWyFV5wiZQ==", "optional": true, "requires": { "follow-redirects": "^1.15.0", @@ -36297,22 +40311,22 @@ } }, "@truffle/dashboard-message-bus-common": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/@truffle/dashboard-message-bus-common/-/dashboard-message-bus-common-0.1.5.tgz", - "integrity": "sha512-F4RfXi7ymNA3HFOlaujRJxAb3I8ciErCRQq+MZVaqjSPF9LSw23IizZsGpLaY43K2bGoBSxyNQRZWxsUEBujPQ==", + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/@truffle/dashboard-message-bus-common/-/dashboard-message-bus-common-0.1.7.tgz", + "integrity": "sha512-jN7q8LBmwQRldSzT/YJE33mnDLrp3EFFDuZyLwtQGInlfcRTXcr5yPY42jxr3Ln19dQe2Chx3I6dWtDByeKLIQ==", "optional": true }, "@truffle/db": { - "version": "2.0.24", - "resolved": "https://registry.npmjs.org/@truffle/db/-/db-2.0.24.tgz", - "integrity": "sha512-p4UsUKd47/Iv2SJ2m24+ObIalb4Ljt7ysv3mY/gKvEIw3fKxSErPgxDKaC0l3kPOVaz8gfXkbWDGeuLf/f66+Q==", + "version": "2.0.35", + "resolved": "https://registry.npmjs.org/@truffle/db/-/db-2.0.35.tgz", + "integrity": "sha512-PVlNvh7whkTtvI8S5DWTu5O0RqkFV5EmzljEauSjRi8wI1SGYOlRdHWFhH/nxmuCAbyg/JtvC/J0EaXzyssd7w==", "optional": true, "requires": { "@graphql-tools/delegate": "^8.4.3", "@graphql-tools/schema": "^8.3.1", - "@truffle/abi-utils": "^0.3.10", - "@truffle/code-utils": "^3.0.2", - "@truffle/config": "^1.3.56", + "@truffle/abi-utils": "^1.0.3", + "@truffle/code-utils": "^3.0.4", + "@truffle/config": "^1.3.61", "abstract-leveldown": "^7.2.0", "apollo-server": "^3.11.0", "debug": "^4.3.1", @@ -36329,6 +40343,17 @@ "web3-utils": "1.10.0" }, "dependencies": { + "@truffle/abi-utils": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@truffle/abi-utils/-/abi-utils-1.0.3.tgz", + "integrity": "sha512-AWhs01HCShaVKjml7Z4AbVREr/u4oiWxCcoR7Cktm0mEvtT04pvnxW5xB/cI4znRkrbPdFQlFt67kgrAjesYkw==", + "optional": true, + "requires": { + "change-case": "3.0.2", + "fast-check": "3.1.1", + "web3-utils": "1.10.0" + } + }, "abstract-leveldown": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/abstract-leveldown/-/abstract-leveldown-7.2.0.tgz", @@ -36373,11 +40398,11 @@ } }, "@truffle/db-loader": { - "version": "0.2.24", - "resolved": "https://registry.npmjs.org/@truffle/db-loader/-/db-loader-0.2.24.tgz", - "integrity": "sha512-ucnZqVb4Aw9fnsUnqwgKZiaDUcw2n6C4tuGyl2iVOr1Xpl+F5Cgrz1cfjJ1igdZrtZnmKl0tDvymt2YwPeeYgw==", + "version": "0.2.35", + "resolved": "https://registry.npmjs.org/@truffle/db-loader/-/db-loader-0.2.35.tgz", + "integrity": "sha512-LMi7ADY1mjgLaJSCNOKg6amnxM3IIw3l/KtT6zVIK9rSZdzhTyRUjoK/cSAtjera1KnRwYaEip5p5lQpvGmivg==", "requires": { - "@truffle/db": "^2.0.24" + "@truffle/db": "^2.0.35" } }, "@truffle/debug-utils": { @@ -36453,14 +40478,14 @@ } }, "@truffle/debugger": { - "version": "11.1.0", - "resolved": "https://registry.npmjs.org/@truffle/debugger/-/debugger-11.1.0.tgz", - "integrity": "sha512-ws3z3ktvW631W6zi9jd9O6+osF6jh+Z6naumIf9ySfAM1cdV4wTHd8iyYwEEc180pJinlc4oCZGvcr5cE97NVw==", + "version": "12.1.4", + "resolved": "https://registry.npmjs.org/@truffle/debugger/-/debugger-12.1.4.tgz", + "integrity": "sha512-yAWvLIaIDpaSALdm/Sas09FPXx38MTZ+NTnI9QhrptpocHAeEFsWpm5JklrjeD7QD+oCSbJ/IS62xrLTS/4Pgg==", "requires": { "@ensdomains/ensjs": "^2.1.0", - "@truffle/abi-utils": "^0.3.10", - "@truffle/codec": "^0.15.0", - "@truffle/source-map-utils": "^1.3.111", + "@truffle/abi-utils": "^1.0.3", + "@truffle/codec": "^0.17.3", + "@truffle/source-map-utils": "^1.3.119", "bn.js": "^5.1.3", "debug": "^4.3.1", "json-pointer": "^0.6.1", @@ -36469,44 +40494,38 @@ "redux": "^3.7.2", "redux-saga": "1.0.0", "reselect-tree": "^1.3.7", - "semver": "7.3.7", + "semver": "^7.5.4", "web3": "1.10.0", "web3-eth-abi": "1.10.0" }, "dependencies": { + "@truffle/abi-utils": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@truffle/abi-utils/-/abi-utils-1.0.3.tgz", + "integrity": "sha512-AWhs01HCShaVKjml7Z4AbVREr/u4oiWxCcoR7Cktm0mEvtT04pvnxW5xB/cI4znRkrbPdFQlFt67kgrAjesYkw==", + "requires": { + "change-case": "3.0.2", + "fast-check": "3.1.1", + "web3-utils": "1.10.0" + } + }, "@truffle/codec": { - "version": "0.15.0", - "resolved": "https://registry.npmjs.org/@truffle/codec/-/codec-0.15.0.tgz", - "integrity": "sha512-FEcwtDUuMr85a9u39eqvNgmUgXDvIkwhJjMCCi/bC4/GmLisOpih8vAidDgdYMJldukMPaOX5XIIgsG5k615YA==", + "version": "0.17.3", + "resolved": "https://registry.npmjs.org/@truffle/codec/-/codec-0.17.3.tgz", + "integrity": "sha512-Ko/+dsnntNyrJa57jUD9u4qx9nQby+H4GsUO6yjiCPSX0TQnEHK08XWqBSg0WdmCH2+h0y1nr2CXSx8gbZapxg==", "requires": { - "@truffle/abi-utils": "^0.3.10", - "@truffle/compile-common": "^0.9.4", + "@truffle/abi-utils": "^1.0.3", + "@truffle/compile-common": "^0.9.8", "big.js": "^6.0.3", "bn.js": "^5.1.3", "cbor": "^5.2.0", "debug": "^4.3.1", "lodash": "^4.17.21", - "semver": "7.3.7", + "semver": "^7.5.4", "utf8": "^3.0.0", "web3-utils": "1.10.0" } }, - "lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "requires": { - "yallist": "^4.0.0" - } - }, - "semver": { - "version": "7.3.7", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz", - "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==", - "requires": { - "lru-cache": "^6.0.0" - } - }, "web3-eth-abi": { "version": "1.10.0", "resolved": "https://registry.npmjs.org/web3-eth-abi/-/web3-eth-abi-1.10.0.tgz", @@ -36515,11 +40534,6 @@ "@ethersproject/abi": "^5.6.3", "web3-utils": "1.10.0" } - }, - "yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" } } }, @@ -36530,22 +40544,22 @@ "dev": true }, "@truffle/events": { - "version": "0.1.23", - "resolved": "https://registry.npmjs.org/@truffle/events/-/events-0.1.23.tgz", - "integrity": "sha512-OIcOZXDCJPz9zzK4uTj0HxCqASNKVcs6g3Z9fT6sehGZRD4ubGHpQZoMchLBwXcggoDRApq2svTdghai624pLg==", + "version": "0.1.25", + "resolved": "https://registry.npmjs.org/@truffle/events/-/events-0.1.25.tgz", + "integrity": "sha512-5elJxNXPVuXDMOoIcCVox0sz95ovRhRbte/H9ht18vyOvtualb4bTjwYyRoWw6Y7j0pom0tPI3OLZWqCdKQNdA==", "optional": true, "requires": { - "@truffle/dashboard-message-bus-client": "^0.1.10", - "@truffle/spinners": "^0.2.3", + "@truffle/dashboard-message-bus-client": "^0.1.12", + "@truffle/spinners": "^0.2.5", "debug": "^4.3.1", "emittery": "^0.4.1", "web3-utils": "1.10.0" } }, "@truffle/hdwallet": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/@truffle/hdwallet/-/hdwallet-0.1.2.tgz", - "integrity": "sha512-Q8Q0S+3VpCFOJQ9o/hr5juV4TJQ1bxoMJ+Eq9ZwTuhprxrhoCqimEZ0/A+D8Gcg5Nw7koQyzyrcqIhPmIVeK9A==", + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/@truffle/hdwallet/-/hdwallet-0.1.4.tgz", + "integrity": "sha512-D3SN0iw3sMWUXjWAedP6RJtopo9qQXYi80inzbtcsoso4VhxFxCwFvCErCl4b27AEJ9pkAtgnxEFRaSKdMmi1Q==", "requires": { "ethereum-cryptography": "1.1.2", "keccak": "3.0.2", @@ -36553,14 +40567,14 @@ } }, "@truffle/hdwallet-provider": { - "version": "2.1.11", - "resolved": "https://registry.npmjs.org/@truffle/hdwallet-provider/-/hdwallet-provider-2.1.11.tgz", - "integrity": "sha512-niLNFG7JYsXCbZrDjvPs9bDln0ix71f1Xvr6Qm6zHHNr4Of+yKMTAs4lXHrY7ioyEPDLlS5yfOdj+S7RJCVt1w==", + "version": "2.1.15", + "resolved": "https://registry.npmjs.org/@truffle/hdwallet-provider/-/hdwallet-provider-2.1.15.tgz", + "integrity": "sha512-I5cSS+5LygA3WFzru9aC5+yDXVowEEbLCx0ckl/RqJ2/SCiYXkzYlR5/DjjDJuCtYhivhrn2RP9AheeFlRF+qw==", "requires": { "@ethereumjs/common": "^2.4.0", "@ethereumjs/tx": "^3.3.0", "@metamask/eth-sig-util": "4.0.1", - "@truffle/hdwallet": "^0.1.2", + "@truffle/hdwallet": "^0.1.4", "@types/ethereum-protocol": "^1.0.0", "@types/web3": "1.0.20", "@types/web3-provider-engine": "^14.0.0", @@ -36601,9 +40615,9 @@ } }, "@truffle/interface-adapter": { - "version": "0.5.33", - "resolved": "https://registry.npmjs.org/@truffle/interface-adapter/-/interface-adapter-0.5.33.tgz", - "integrity": "sha512-vbVcH2I8hX+wM0Xj9uAjpgxMHqfT+y6m26zSkOVvZ2wo9Ez1slaOJkK1/TZK+7nJitGZSXeJeB4purMDuADvGA==", + "version": "0.5.37", + "resolved": "https://registry.npmjs.org/@truffle/interface-adapter/-/interface-adapter-0.5.37.tgz", + "integrity": "sha512-lPH9MDgU+7sNDlJSClwyOwPCfuOimqsCx0HfGkznL3mcFRymc1pukAR1k17zn7ErHqBwJjiKAZ6Ri72KkS+IWw==", "devOptional": true, "requires": { "bn.js": "^5.1.3", @@ -36673,88 +40687,77 @@ } }, "@truffle/promise-tracker": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/@truffle/promise-tracker/-/promise-tracker-0.1.5.tgz", - "integrity": "sha512-wZx8eeu/6rcwwkmRF0Y832/NSQR9A9u6pyhTozv+j77jklnd/KZvu2JlACaAjP30eL5SOtSrSOzAMcSh/trJjg==", + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/@truffle/promise-tracker/-/promise-tracker-0.1.7.tgz", + "integrity": "sha512-NiPXNJvdei8MRZRUjEZoL0Y7TPDR1TaeCfGUgB3md6Q7TBiqSKo2p5OT36JO106B2j57SLmXOiDn8fLb+u2sjA==", "optional": true }, "@truffle/provider": { - "version": "0.3.9", - "resolved": "https://registry.npmjs.org/@truffle/provider/-/provider-0.3.9.tgz", - "integrity": "sha512-6vVSpbP8b2SuNz1fE1KeeQHMBaQ7oD5Nf4CLikXNWrj3SVyMpN3PxsEnaHMnlslAfHICpLSOHpcIWETGxfOgbg==", + "version": "0.3.13", + "resolved": "https://registry.npmjs.org/@truffle/provider/-/provider-0.3.13.tgz", + "integrity": "sha512-W9yZO0ZUwA0LhFvf7+NNNXVSCOd4x5pTbFiXUVURjyqp7f4YooLAqnlLPSpV+6qwIwThc+86CeLlOiFslYdDIA==", "optional": true, "requires": { - "@truffle/error": "^0.2.0", - "@truffle/interface-adapter": "^0.5.33", + "@truffle/error": "^0.2.2", + "@truffle/interface-adapter": "^0.5.37", "debug": "^4.3.1", "web3": "1.10.0" }, "dependencies": { "@truffle/error": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/@truffle/error/-/error-0.2.0.tgz", - "integrity": "sha512-Fe0/z4WWb7IP2gBnv3l6zqP87Y0kSMs7oiSLakKJq17q3GUunrHSdioKuNspdggxkXIBhEQLhi8C+LJdwmHKWQ==", + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/@truffle/error/-/error-0.2.2.tgz", + "integrity": "sha512-TqbzJ0O8DHh34cu8gDujnYl4dUl6o2DE4PR6iokbybvnIm/L2xl6+Gv1VC+YJS45xfH83Yo3/Zyg/9Oq8/xZWg==", "optional": true } } }, "@truffle/source-map-utils": { - "version": "1.3.111", - "resolved": "https://registry.npmjs.org/@truffle/source-map-utils/-/source-map-utils-1.3.111.tgz", - "integrity": "sha512-/2kP4muycNMvMwar/QuzRdF8NE8LpQS1cRHF43XLx3b89D/upzqTylQwv3EDx/rcd7u6AQ/7lrUSmKlh0+k40Q==", + "version": "1.3.119", + "resolved": "https://registry.npmjs.org/@truffle/source-map-utils/-/source-map-utils-1.3.119.tgz", + "integrity": "sha512-TFYi3XvanY8WZBOfBwDHQe9HfZUXJ2ejnmFNjsq1//sbM4fUNWjeNshGqkWGxfKPh3OAzXgD4iTnPG3YeXM8YQ==", "requires": { - "@truffle/code-utils": "^3.0.2", - "@truffle/codec": "^0.15.0", + "@truffle/code-utils": "^3.0.4", + "@truffle/codec": "^0.17.3", "debug": "^4.3.1", "json-pointer": "^0.6.1", "node-interval-tree": "^1.3.3", "web3-utils": "1.10.0" }, "dependencies": { + "@truffle/abi-utils": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@truffle/abi-utils/-/abi-utils-1.0.3.tgz", + "integrity": "sha512-AWhs01HCShaVKjml7Z4AbVREr/u4oiWxCcoR7Cktm0mEvtT04pvnxW5xB/cI4znRkrbPdFQlFt67kgrAjesYkw==", + "requires": { + "change-case": "3.0.2", + "fast-check": "3.1.1", + "web3-utils": "1.10.0" + } + }, "@truffle/codec": { - "version": "0.15.0", - "resolved": "https://registry.npmjs.org/@truffle/codec/-/codec-0.15.0.tgz", - "integrity": "sha512-FEcwtDUuMr85a9u39eqvNgmUgXDvIkwhJjMCCi/bC4/GmLisOpih8vAidDgdYMJldukMPaOX5XIIgsG5k615YA==", + "version": "0.17.3", + "resolved": "https://registry.npmjs.org/@truffle/codec/-/codec-0.17.3.tgz", + "integrity": "sha512-Ko/+dsnntNyrJa57jUD9u4qx9nQby+H4GsUO6yjiCPSX0TQnEHK08XWqBSg0WdmCH2+h0y1nr2CXSx8gbZapxg==", "requires": { - "@truffle/abi-utils": "^0.3.10", - "@truffle/compile-common": "^0.9.4", + "@truffle/abi-utils": "^1.0.3", + "@truffle/compile-common": "^0.9.8", "big.js": "^6.0.3", "bn.js": "^5.1.3", "cbor": "^5.2.0", "debug": "^4.3.1", "lodash": "^4.17.21", - "semver": "7.3.7", + "semver": "^7.5.4", "utf8": "^3.0.0", "web3-utils": "1.10.0" } - }, - "lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "requires": { - "yallist": "^4.0.0" - } - }, - "semver": { - "version": "7.3.7", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz", - "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==", - "requires": { - "lru-cache": "^6.0.0" - } - }, - "yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" } } }, "@truffle/spinners": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/@truffle/spinners/-/spinners-0.2.3.tgz", - "integrity": "sha512-YnaQ+oBRQ1I1+/P18i8oSW4orUYi6vwpZQxauEZ5X0L8atjKq+RWdiNaza6J6L+KOLunXM4+pWxnNzuUmxlJZw==", + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/@truffle/spinners/-/spinners-0.2.5.tgz", + "integrity": "sha512-emYyLEuoY62MQV/RNjyVIuTPEjMyIA0WiYMG2N3yfh8OSjD/TC0HRc2oyDWtVkNNox/5D2tH2m5fFB8HOt80FQ==", "optional": true, "requires": { "@trufflesuite/spinnies": "^0.1.1" @@ -37002,30 +41005,17 @@ "@types/express-serve-static-core": "^4.17.33", "@types/qs": "*", "@types/serve-static": "*" - }, - "dependencies": { - "@types/express-serve-static-core": { - "version": "4.17.35", - "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.17.35.tgz", - "integrity": "sha512-wALWQwrgiB2AWTT91CB62b6Yt0sNHpznUXeZEcnPU3DRdlDIz74x8Qg1UUYKSVFi+va5vKOLYRBI1bRKiLLKIg==", - "requires": { - "@types/node": "*", - "@types/qs": "*", - "@types/range-parser": "*", - "@types/send": "*" - } - } } }, "@types/express-serve-static-core": { - "version": "4.17.31", - "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.17.31.tgz", - "integrity": "sha512-DxMhY+NAsTwMMFHBTtJFNp5qiHKJ7TeqOo23zVEM9alT1Ml27Q3xcTH0xwxn7Q0BbMcVEJOs/7aQtUWupUQN3Q==", - "optional": true, + "version": "4.17.35", + "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.17.35.tgz", + "integrity": "sha512-wALWQwrgiB2AWTT91CB62b6Yt0sNHpznUXeZEcnPU3DRdlDIz74x8Qg1UUYKSVFi+va5vKOLYRBI1bRKiLLKIg==", "requires": { "@types/node": "*", "@types/qs": "*", - "@types/range-parser": "*" + "@types/range-parser": "*", + "@types/send": "*" } }, "@types/form-data": { @@ -37199,6 +41189,34 @@ "@types/node": "*" } }, + "@types/sinon": { + "version": "10.0.16", + "resolved": "https://registry.npmjs.org/@types/sinon/-/sinon-10.0.16.tgz", + "integrity": "sha512-j2Du5SYpXZjJVJtXBokASpPRj+e2z+VUhCPHmM6WMfe3dpHu6iVKJMU6AiBcMp/XTAYnEj6Wc1trJUWwZ0QaAQ==", + "dev": true, + "peer": true, + "requires": { + "@types/sinonjs__fake-timers": "*" + } + }, + "@types/sinon-chai": { + "version": "3.2.9", + "resolved": "https://registry.npmjs.org/@types/sinon-chai/-/sinon-chai-3.2.9.tgz", + "integrity": "sha512-/19t63pFYU0ikrdbXKBWj9PCdnKyTd0Qkz0X91Ta081cYsq90OxYdcWwK/dwEoDa6dtXgj2HJfmzgq+QZTHdmQ==", + "dev": true, + "peer": true, + "requires": { + "@types/chai": "*", + "@types/sinon": "*" + } + }, + "@types/sinonjs__fake-timers": { + "version": "8.1.2", + "resolved": "https://registry.npmjs.org/@types/sinonjs__fake-timers/-/sinonjs__fake-timers-8.1.2.tgz", + "integrity": "sha512-9GcLXF0/v3t80caGs5p2rRfkB+a8VBGLJZVih6CNFkx8IZ994wiKKLSRs9nuFwk1HevWs/1mnUmkApGrSGsShA==", + "dev": true, + "peer": true + }, "@types/underscore": { "version": "1.11.4", "resolved": "https://registry.npmjs.org/@types/underscore/-/underscore-1.11.4.tgz", @@ -37228,6 +41246,15 @@ "@types/node": "*" } }, + "@types/yauzl": { + "version": "2.10.0", + "resolved": "https://registry.npmjs.org/@types/yauzl/-/yauzl-2.10.0.tgz", + "integrity": "sha512-Cn6WYCm0tXv8p6k+A8PvbDG763EDpBoTzHdA+Q/MF6H3sapGjCm9NzoaJncJS9tUKSuCoDs9XHxYYsQDgxR6kw==", + "optional": true, + "requires": { + "@types/node": "*" + } + }, "@uniswap/lib": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/@uniswap/lib/-/lib-1.1.1.tgz", @@ -37360,18 +41387,38 @@ } }, "@uniswap/v3-sdk": { - "version": "3.9.0", - "resolved": "https://registry.npmjs.org/@uniswap/v3-sdk/-/v3-sdk-3.9.0.tgz", - "integrity": "sha512-LuoF3UcY1DxSAQKJ3E4/1Eq4HaNp+x+7q9mvbpiu+/PBj+O1DjLforAMrKxu+RsA0aarmZtz7yBnAPy+akgfgQ==", + "version": "3.10.0", + "resolved": "https://registry.npmjs.org/@uniswap/v3-sdk/-/v3-sdk-3.10.0.tgz", + "integrity": "sha512-sbmSA1O+Ct960r66Ie/c1rOmVadpwRu8nQ79pGICv0pZJdnFIQ/SReG3F+iC2C2UNNjNP6aC2WDUggXrjyrgnA==", "requires": { "@ethersproject/abi": "^5.0.12", "@ethersproject/solidity": "^5.0.9", - "@uniswap/sdk-core": "^3.0.1", + "@uniswap/sdk-core": "^4", "@uniswap/swap-router-contracts": "^1.2.1", "@uniswap/v3-periphery": "^1.1.1", "@uniswap/v3-staker": "1.0.0", "tiny-invariant": "^1.1.0", "tiny-warning": "^1.0.3" + }, + "dependencies": { + "@uniswap/sdk-core": { + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/@uniswap/sdk-core/-/sdk-core-4.0.7.tgz", + "integrity": "sha512-jscx7KUIWzQatcL5PHY6xy0gEL9IGQcL5h/obxzX9foP2KoNk9cq66Ia8I2Kvpa7zBcPOeW1hU0hJNBq6CzcIQ==", + "requires": { + "@ethersproject/address": "^5.0.2", + "big.js": "^5.2.2", + "decimal.js-light": "^2.5.0", + "jsbi": "^3.1.4", + "tiny-invariant": "^1.1.0", + "toformat": "^2.0.0" + } + }, + "big.js": { + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz", + "integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==" + } } }, "@uniswap/v3-staker": { @@ -37396,6 +41443,11 @@ } } }, + "@yarnpkg/lockfile": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@yarnpkg/lockfile/-/lockfile-1.1.0.tgz", + "integrity": "sha512-GpSwvyXOcOOlV70vbnzjj4fW5xW/FdUF6nQEt1ENy7m4ZCczi1+/buVUPAqmGfqznsORNFzUMjctTIp8a9tuCQ==" + }, "abbrev": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", @@ -37405,6 +41457,7 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/abort-controller/-/abort-controller-3.0.0.tgz", "integrity": "sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==", + "optional": true, "requires": { "event-target-shim": "^5.0.0" } @@ -37487,20 +41540,11 @@ } }, "agentkeepalive": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/agentkeepalive/-/agentkeepalive-4.2.1.tgz", - "integrity": "sha512-Zn4cw2NEqd+9fiSVWMscnjyQ1a8Yfoc5oBajLeo5w+YBHgDUcEBY2hS4YpTz6iN5f/2zQiktcuM6tS8x1p9dpA==", + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/agentkeepalive/-/agentkeepalive-4.5.0.tgz", + "integrity": "sha512-5GG/5IbQQpC9FpkRGsSvZI5QYeSCzlJHdpBQntCsuTOxhKD8lqKhrleg2Yi7yvMIf82Ycmmqln9U8V9qwEiJew==", "requires": { - "debug": "^4.1.0", - "depd": "^1.1.2", "humanize-ms": "^1.2.1" - }, - "dependencies": { - "depd": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", - "integrity": "sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==" - } } }, "aggregate-error": { @@ -37673,14 +41717,14 @@ } }, "apollo-server": { - "version": "3.12.0", - "resolved": "https://registry.npmjs.org/apollo-server/-/apollo-server-3.12.0.tgz", - "integrity": "sha512-wZHLgBoIdGxr/YpPTG5RwNnS+B2y70T/nCegCnU6Yl+H3PXB92OIguLMhdJIZVjukIOhiQT12dNIehqLQ+1hMQ==", + "version": "3.12.1", + "resolved": "https://registry.npmjs.org/apollo-server/-/apollo-server-3.12.1.tgz", + "integrity": "sha512-wgxx+J8KPTkhepi4qI9qY1xNoYzJfmvRKVUdFmFCZ3lyPO2j/+oOnAnyEVruAIQU5gquK10B0jdwVyvese9J/g==", "optional": true, "requires": { "@types/express": "4.17.14", - "apollo-server-core": "^3.12.0", - "apollo-server-express": "^3.12.0", + "apollo-server-core": "^3.12.1", + "apollo-server-express": "^3.12.1", "express": "^4.17.1" }, "dependencies": { @@ -37699,9 +41743,9 @@ } }, "apollo-server-core": { - "version": "3.12.0", - "resolved": "https://registry.npmjs.org/apollo-server-core/-/apollo-server-core-3.12.0.tgz", - "integrity": "sha512-hq7iH6Cgldgmnjs9FVSZeKWRpi0/ZR+iJ1arzeD2VXGxxgk1mAm/cz1Tx0TYgegZI+FvvrRl0UhKEx7sLnIxIg==", + "version": "3.12.1", + "resolved": "https://registry.npmjs.org/apollo-server-core/-/apollo-server-core-3.12.1.tgz", + "integrity": "sha512-9SF5WAkkV0FZQ2HVUWI9Jada1U0jg7e8NCN9EklbtvaCeUlOLyXyM+KCWuZ7+dqHxjshbtcwylPHutt3uzoNkw==", "optional": true, "requires": { "@apollo/utils.keyvaluecache": "^1.0.1", @@ -37769,9 +41813,9 @@ "requires": {} }, "apollo-server-express": { - "version": "3.12.0", - "resolved": "https://registry.npmjs.org/apollo-server-express/-/apollo-server-express-3.12.0.tgz", - "integrity": "sha512-m8FaGPUfDOEGSm7QRWRmUUGjG/vqvpQoorkId9/FXkC57fz/A59kEdrzkMt9538Xgsa5AV+X4MEWLJhTvlW3LQ==", + "version": "3.12.1", + "resolved": "https://registry.npmjs.org/apollo-server-express/-/apollo-server-express-3.12.1.tgz", + "integrity": "sha512-5A9efrhEXqDx08BnORWf0zPYCABENqur47VZZW8osQpSSnMINqzJiV5RMrzz8wIznecRRhEcz+BqLdiexqZdgg==", "optional": true, "requires": { "@types/accepts": "^1.3.5", @@ -37780,7 +41824,7 @@ "@types/express": "4.17.14", "@types/express-serve-static-core": "4.17.31", "accepts": "^1.3.5", - "apollo-server-core": "^3.12.0", + "apollo-server-core": "^3.12.1", "apollo-server-types": "^3.8.0", "body-parser": "^1.19.0", "cors": "^2.8.5", @@ -37798,6 +41842,17 @@ "@types/qs": "*", "@types/serve-static": "*" } + }, + "@types/express-serve-static-core": { + "version": "4.17.31", + "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.17.31.tgz", + "integrity": "sha512-DxMhY+NAsTwMMFHBTtJFNp5qiHKJ7TeqOo23zVEM9alT1Ml27Q3xcTH0xwxn7Q0BbMcVEJOs/7aQtUWupUQN3Q==", + "optional": true, + "requires": { + "@types/node": "*", + "@types/qs": "*", + "@types/range-parser": "*" + } } } }, @@ -37827,54 +41882,6 @@ "resolved": "https://registry.npmjs.org/app-module-path/-/app-module-path-2.2.0.tgz", "integrity": "sha512-gkco+qxENJV+8vFcDiiFhuoSvRXb2a/QPqpSoWhVz829VNJfOTnELbBmPmNKFxf3xdNnw4DWCkzkDaavcX/1YQ==" }, - "aproba": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz", - "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==", - "optional": true - }, - "are-we-there-yet": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-1.1.7.tgz", - "integrity": "sha512-nxwy40TuMiUGqMyRHgCSWZ9FM4VAoRP4xUYSTv5ImRog+h9yISPbVH7H8fASCIzYn9wlEv4zvFL7uKDMCFQm3g==", - "optional": true, - "requires": { - "delegates": "^1.0.0", - "readable-stream": "^2.0.6" - }, - "dependencies": { - "readable-stream": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", - "optional": true, - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "optional": true - }, - "string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "optional": true, - "requires": { - "safe-buffer": "~5.1.0" - } - } - } - }, "arg": { "version": "4.1.3", "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz", @@ -38006,14 +42013,6 @@ "devOptional": true, "requires": { "retry": "0.13.1" - }, - "dependencies": { - "retry": { - "version": "0.13.1", - "resolved": "https://registry.npmjs.org/retry/-/retry-0.13.1.tgz", - "integrity": "sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg==", - "devOptional": true - } } }, "asynckit": { @@ -38024,8 +42023,7 @@ "at-least-node": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/at-least-node/-/at-least-node-1.0.0.tgz", - "integrity": "sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==", - "optional": true + "integrity": "sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==" }, "atomically": { "version": "1.7.0", @@ -38161,14 +42159,14 @@ } }, "bigint-crypto-utils": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/bigint-crypto-utils/-/bigint-crypto-utils-3.2.2.tgz", - "integrity": "sha512-U1RbE3aX9ayCUVcIPHuPDPKcK3SFOXf93J1UK/iHlJuQB7bhagPIX06/CLpLEsDThJ7KA4Dhrnzynl+d2weTiw==" + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/bigint-crypto-utils/-/bigint-crypto-utils-3.3.0.tgz", + "integrity": "sha512-jOTSb+drvEDxEq6OuUybOAv/xxoh3cuYRUIPyu8sSHQNKM303UQ2R1DAo45o1AkcIXw6fzbaFI1+xGGdaXs2lg==" }, "bignumber.js": { - "version": "9.1.1", - "resolved": "https://registry.npmjs.org/bignumber.js/-/bignumber.js-9.1.1.tgz", - "integrity": "sha512-pHm4LsMJ6lzgNGVfZHjMoO8sdoRhOzOH4MLmY65Jg70bpxCKu5iOHNJyfF6OyvYw7t8Fpf35RuzUyqnQsj8Vig==" + "version": "9.1.2", + "resolved": "https://registry.npmjs.org/bignumber.js/-/bignumber.js-9.1.2.tgz", + "integrity": "sha512-2/mKyZH9K85bzOEfhXDBFZTGd1CTs+5IHpeFQo9luiBG7hghdC851Pj2WAhb6E3R6b9tZj/XKhbg4fum+Kepug==" }, "binary-extensions": { "version": "2.2.0", @@ -38288,7 +42286,7 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", "integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==", - "dev": true + "devOptional": true }, "borsh": { "version": "0.7.0", @@ -38609,9 +42607,9 @@ } }, "chai": { - "version": "4.3.7", - "resolved": "https://registry.npmjs.org/chai/-/chai-4.3.7.tgz", - "integrity": "sha512-HLnAzZ2iupm25PlN0xFreAlBA5zaBSv3og0DdeGA4Ar6h6rJ3A0rolRUKJhSF2V10GZKDgWF/VmAEsNWjCRB+A==", + "version": "4.3.8", + "resolved": "https://registry.npmjs.org/chai/-/chai-4.3.8.tgz", + "integrity": "sha512-vX4YvVVtxlfSZ2VecZgFUTU5qPCYsobVI2O9FmwEXBhDigYGQA6jRXCycIs1yJnnWbZ6/+a2zNIF5DfVCcJBFQ==", "requires": { "assertion-error": "^1.1.0", "check-error": "^1.0.2", @@ -38622,6 +42620,35 @@ "type-detect": "^4.0.5" } }, + "chai-almost": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/chai-almost/-/chai-almost-1.0.1.tgz", + "integrity": "sha512-UrNSx5f2B1/ESrOz0a4iLpDnQvDnK/3O0ZE/KGYQ+NcndKy0VQkMkv8yoGIHNSbjzKBid3EAMdDMA5wb9CxvSA==", + "dev": true, + "requires": { + "deep-eql": "^2.0.2", + "type-detect": "^4.0.3" + }, + "dependencies": { + "deep-eql": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-2.0.2.tgz", + "integrity": "sha512-uts3fF4HnV1bcNx8K5c9NMjXXKtLOf1obUMq04uEuMaF8i1m0SfugbpDMd59cYfodQcMqeUISvL4Pmx5NZ7lcw==", + "dev": true, + "requires": { + "type-detect": "^3.0.0" + }, + "dependencies": { + "type-detect": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-3.0.0.tgz", + "integrity": "sha512-pwZo7l1T0a8wmTMDc4FtXuHseRaqa9nyaUArp4xHaBMUlRzr72PvgF6ouXIIj5rjbVWqo8pZu6vw74jDKg4Dvw==", + "dev": true + } + } + } + } + }, "chai-as-promised": { "version": "7.1.1", "resolved": "https://registry.npmjs.org/chai-as-promised/-/chai-as-promised-7.1.1.tgz", @@ -38687,7 +42714,7 @@ "version": "1.0.0-rc.12", "resolved": "https://registry.npmjs.org/cheerio/-/cheerio-1.0.0-rc.12.tgz", "integrity": "sha512-VqR8m68vM46BNnuZ5NtnGBKIE/DfN0cRIzg9n40EIq9NOv90ayxLBXA8fXC5gquFRGJSTRqBq25Jt2ECLR431Q==", - "dev": true, + "devOptional": true, "requires": { "cheerio-select": "^2.1.0", "dom-serializer": "^2.0.0", @@ -38702,7 +42729,7 @@ "version": "2.1.0", "resolved": "https://registry.npmjs.org/cheerio-select/-/cheerio-select-2.1.0.tgz", "integrity": "sha512-9v9kG0LvzrlcungtnJtpGNxY+fzECQKhK4EGJX2vByejiMX84MFNQw4UxPJl3bFbTMw+Dfs37XaIkCwTZfLh4g==", - "dev": true, + "devOptional": true, "requires": { "boolbase": "^1.0.0", "css-select": "^5.1.0", @@ -38807,6 +42834,18 @@ "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==" }, + "cli-color": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/cli-color/-/cli-color-2.0.3.tgz", + "integrity": "sha512-OkoZnxyC4ERN3zLzZaY9Emb7f/MhBOIpePv0Ycok0fJYT+Ouo00UBEIwsVsr0yoow++n5YWlSUgST9GKhNHiRQ==", + "requires": { + "d": "^1.0.1", + "es5-ext": "^0.10.61", + "es6-iterator": "^2.0.3", + "memoizee": "^0.4.15", + "timers-ext": "^0.1.7" + } + }, "cli-cursor": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz", @@ -38891,6 +42930,11 @@ } } }, + "clones-with-immutable-args": { + "version": "git+ssh://git@github.com/Saw-mon-and-Natalie/clones-with-immutable-args.git#105efee1b9127ed7f6fedf139e1fc796ce8791f2", + "integrity": "sha512-k3pqgVlL6sTgySZG8eN+spNdokeM/J7kgBVn0xJeZIg+cv1vA1ert1jFDuHX1Vfz1uTTqfZbmWHhvCCdy0VpNA==", + "from": "clones-with-immutable-args@github:Saw-mon-and-Natalie/clones-with-immutable-args#105efee1b9127ed7f6fedf139e1fc796ce8791f2" + }, "code-point-at": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz", @@ -39042,17 +43086,528 @@ "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==" }, - "concat-stream": { - "version": "1.6.2", - "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz", - "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==", + "concat-stream": { + "version": "1.6.2", + "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz", + "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==", + "requires": { + "buffer-from": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^2.2.2", + "typedarray": "^0.0.6" + }, + "dependencies": { + "readable-stream": { + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + }, + "string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "requires": { + "safe-buffer": "~5.1.0" + } + } + } + }, + "conf": { + "version": "10.2.0", + "resolved": "https://registry.npmjs.org/conf/-/conf-10.2.0.tgz", + "integrity": "sha512-8fLl9F04EJqjSqH+QjITQfJF8BrOVaYr1jewVgSRAEWePfxT0sku4w2hrGQ60BC/TNLGQ2pgxNlTbWQmMPFvXg==", + "optional": true, + "requires": { + "ajv": "^8.6.3", + "ajv-formats": "^2.1.1", + "atomically": "^1.7.0", + "debounce-fn": "^4.0.0", + "dot-prop": "^6.0.1", + "env-paths": "^2.2.1", + "json-schema-typed": "^7.0.3", + "onetime": "^5.1.2", + "pkg-up": "^3.1.0", + "semver": "^7.3.5" + }, + "dependencies": { + "ajv": { + "version": "8.12.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz", + "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==", + "optional": true, + "requires": { + "fast-deep-equal": "^3.1.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.2.2" + } + }, + "json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", + "optional": true + } + } + }, + "constant-case": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/constant-case/-/constant-case-2.0.0.tgz", + "integrity": "sha512-eS0N9WwmjTqrOmR3o83F5vW8Z+9R1HnVz3xmzT2PMFug9ly+Au/fxRWlEBSb6LcZwspSsEn9Xs1uw9YgzAg1EQ==", + "requires": { + "snake-case": "^2.1.0", + "upper-case": "^1.1.1" + } + }, + "content-disposition": { + "version": "0.5.4", + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", + "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==", + "requires": { + "safe-buffer": "5.2.1" + } + }, + "content-hash": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/content-hash/-/content-hash-2.5.2.tgz", + "integrity": "sha512-FvIQKy0S1JaWV10sMsA7TRx8bpU+pqPkhbsfvOJAdjRXvYxEckAwQWGwtRjiaJfh+E0DvcWUGqcdjwMGFjsSdw==", + "requires": { + "cids": "^0.7.1", + "multicodec": "^0.5.5", + "multihashes": "^0.4.15" + } + }, + "content-type": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz", + "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==" + }, + "convert-source-map": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz", + "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==", + "peer": true + }, + "convert-svg-core": { + "version": "0.6.4", + "resolved": "https://registry.npmjs.org/convert-svg-core/-/convert-svg-core-0.6.4.tgz", + "integrity": "sha512-8mS0n7otc1lljTte4z7nDhihEakKCRq4w5ivMnIGeOZuD/OV/eDZNNEgGLV1ET3p+rMbnrZnX4lAcsf14WzD5w==", + "optional": true, + "requires": { + "chalk": "^4.1.2", + "cheerio": "^1.0.0-rc.11", + "commander": "^9.2.0", + "file-url": "^3.0.0", + "get-stdin": "^8.0.0", + "glob": "^8.0.1", + "lodash.omit": "^4.5.0", + "lodash.pick": "^4.4.0", + "pollock": "^0.2.0", + "puppeteer": "^13.7.0", + "tmp": "^0.2.1" + }, + "dependencies": { + "brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "optional": true, + "requires": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "commander": { + "version": "9.5.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-9.5.0.tgz", + "integrity": "sha512-KRs7WVDKg86PWiuAqhDrAQnTXZKraVcCc6vFdL14qrZ/DcWwuRo7VoiYXalXO7S5GKpqYiVEwCbgFDfxNHKJBQ==", + "optional": true + }, + "minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "optional": true, + "requires": { + "brace-expansion": "^1.1.7" + } + }, + "rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "optional": true, + "requires": { + "glob": "^7.1.3" + }, + "dependencies": { + "glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "optional": true, + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + } + } + }, + "tmp": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.1.tgz", + "integrity": "sha512-76SUhtfqR2Ijn+xllcI5P1oyannHNHByD80W1q447gU3mp9G9PSpGdWmjUOHRDPiHYacIk66W7ubDTuPF3BEtQ==", + "optional": true, + "requires": { + "rimraf": "^3.0.0" + } + } + } + }, + "convert-svg-to-png": { + "version": "0.6.4", + "resolved": "https://registry.npmjs.org/convert-svg-to-png/-/convert-svg-to-png-0.6.4.tgz", + "integrity": "sha512-zHNTuVedkyuhMl+f+HMm2L7+TKDYCKFAqAmDqUr0dN7/xtgYe76PPAydjlFzeLbzEpGtEfhaA15q+ejpLaVo3g==", + "optional": true, + "requires": { + "convert-svg-core": "^0.6.4" + } + }, + "cookie": { + "version": "0.4.2", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.2.tgz", + "integrity": "sha512-aSWTXFzaKWkvHO1Ny/s+ePFpvKsPnjc551iI41v3ny/ow6tBG5Vd+FuqGNhh1LxOmVzOlGUriIlOaokOvhaStA==" + }, + "cookie-signature": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", + "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==" + }, + "cookiejar": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/cookiejar/-/cookiejar-2.1.4.tgz", + "integrity": "sha512-LDx6oHrK+PhzLKJU9j5S7/Y3jM/mUHvD/DeI1WQmJn652iPC5Y4TBzC9l+5OMOXlyTTA+SmVUPm0HQUwpD5Jqw==" + }, + "core-js-compat": { + "version": "3.25.5", + "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.25.5.tgz", + "integrity": "sha512-ovcyhs2DEBUIE0MGEKHP4olCUW/XYte3Vroyxuh38rD1wAO4dHohsovUC4eAOuzFxE6b+RXvBU3UZ9o0YhUTkA==", + "requires": { + "browserslist": "^4.21.4" + } + }, + "core-js-pure": { + "version": "3.30.1", + "resolved": "https://registry.npmjs.org/core-js-pure/-/core-js-pure-3.30.1.tgz", + "integrity": "sha512-nXBEVpmUnNRhz83cHd9JRQC52cTMcuXAmR56+9dSMpRdpeA4I1PX6yjmhd71Eyc/wXNsdBdUDIj1QTIeZpU5Tg==", + "dev": true + }, + "core-util-is": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", + "integrity": "sha512-3lqz5YjWTYnW6dlDa5TLaTCcShfar1e40rmcJVwCBJC6mWlFuj0eCHIElmG1g5kyuJ/GD+8Wn4FFCcz4gJPfaQ==" + }, + "cors": { + "version": "2.8.5", + "resolved": "https://registry.npmjs.org/cors/-/cors-2.8.5.tgz", + "integrity": "sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==", + "requires": { + "object-assign": "^4", + "vary": "^1" + } + }, + "cpu-features": { + "version": "0.0.4", + "resolved": "https://registry.npmjs.org/cpu-features/-/cpu-features-0.0.4.tgz", + "integrity": "sha512-fKiZ/zp1mUwQbnzb9IghXtHtDoTMtNeb8oYGx6kX2SYfhnG0HNdBEBIzB9b5KlXu5DQPhfy3mInbBxFcgwAr3A==", + "optional": true, + "requires": { + "buildcheck": "0.0.3", + "nan": "^2.15.0" + } + }, + "crc-32": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/crc-32/-/crc-32-1.2.2.tgz", + "integrity": "sha512-ROmzCKrTnOwybPcJApAA6WBWij23HVfGVNKqqrZpuyZOHqK2CwHSvpGuyt/UNNvaIjEd8X5IFGp4Mh+Ie1IHJQ==" + }, + "create-ecdh": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/create-ecdh/-/create-ecdh-4.0.4.tgz", + "integrity": "sha512-mf+TCx8wWc9VpuxfP2ht0iSISLZnt0JgWlrOKZiNqyUZWnjIaCIVNQArMHnCZKfEYRg6IM7A+NeJoN8gf/Ws0A==", + "requires": { + "bn.js": "^4.1.0", + "elliptic": "^6.5.3" + }, + "dependencies": { + "bn.js": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==" + } + } + }, + "create-hash": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/create-hash/-/create-hash-1.2.0.tgz", + "integrity": "sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==", + "requires": { + "cipher-base": "^1.0.1", + "inherits": "^2.0.1", + "md5.js": "^1.3.4", + "ripemd160": "^2.0.1", + "sha.js": "^2.4.0" + } + }, + "create-hmac": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/create-hmac/-/create-hmac-1.1.7.tgz", + "integrity": "sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==", + "requires": { + "cipher-base": "^1.0.3", + "create-hash": "^1.1.0", + "inherits": "^2.0.1", + "ripemd160": "^2.0.0", + "safe-buffer": "^5.0.1", + "sha.js": "^2.4.8" + } + }, + "create-require": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz", + "integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==", + "optional": true, + "peer": true + }, + "cross-fetch": { + "version": "3.1.6", + "resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-3.1.6.tgz", + "integrity": "sha512-riRvo06crlE8HiqOwIpQhxwdOk4fOeR7FVM/wXoxchFEqMNUjvbs3bfo4OTgMEMHzppd4DxFBDbyySj8Cv781g==", + "requires": { + "node-fetch": "^2.6.11" + } + }, + "cross-spawn": { + "version": "6.0.5", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", + "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", + "requires": { + "nice-try": "^1.0.4", + "path-key": "^2.0.1", + "semver": "^5.5.0", + "shebang-command": "^1.2.0", + "which": "^1.2.9" + }, + "dependencies": { + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" + } + } + }, + "crypt": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/crypt/-/crypt-0.0.2.tgz", + "integrity": "sha512-mCxBlsHFYh9C+HVpiEacem8FEBnMXgU9gy4zmNC+SXAZNB/1idgp/aulFJ4FgCi7GPEVbfyng092GqL2k2rmow==" + }, + "crypto-addr-codec": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/crypto-addr-codec/-/crypto-addr-codec-0.1.7.tgz", + "integrity": "sha512-X4hzfBzNhy4mAc3UpiXEC/L0jo5E8wAa9unsnA8nNXYzXjCcGk83hfC5avJWCSGT8V91xMnAS9AKMHmjw5+XCg==", + "requires": { + "base-x": "^3.0.8", + "big-integer": "1.6.36", + "blakejs": "^1.1.0", + "bs58": "^4.0.1", + "ripemd160-min": "0.0.6", + "safe-buffer": "^5.2.0", + "sha3": "^2.1.1" + } + }, + "crypto-browserify": { + "version": "3.12.0", + "resolved": "https://registry.npmjs.org/crypto-browserify/-/crypto-browserify-3.12.0.tgz", + "integrity": "sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg==", + "requires": { + "browserify-cipher": "^1.0.0", + "browserify-sign": "^4.0.0", + "create-ecdh": "^4.0.0", + "create-hash": "^1.1.0", + "create-hmac": "^1.1.0", + "diffie-hellman": "^5.0.0", + "inherits": "^2.0.1", + "pbkdf2": "^3.0.3", + "public-encrypt": "^4.0.0", + "randombytes": "^2.0.0", + "randomfill": "^1.0.3" + } + }, + "crypto-es": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/crypto-es/-/crypto-es-1.2.7.tgz", + "integrity": "sha512-UUqiVJ2gUuZFmbFsKmud3uuLcNP2+Opt+5ysmljycFCyhA0+T16XJmo1ev/t5kMChMqWh7IEvURNCqsg+SjZGQ==" + }, + "css-select": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/css-select/-/css-select-5.1.0.tgz", + "integrity": "sha512-nwoRF1rvRRnnCqqY7updORDsuqKzqYJ28+oSMaJMMgOauh3fvwHqMS7EZpIPqK8GL+g9mKxF1vP/ZjSeNjEVHg==", + "devOptional": true, + "requires": { + "boolbase": "^1.0.0", + "css-what": "^6.1.0", + "domhandler": "^5.0.2", + "domutils": "^3.0.1", + "nth-check": "^2.0.1" + } + }, + "css-what": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/css-what/-/css-what-6.1.0.tgz", + "integrity": "sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==", + "devOptional": true + }, + "cssfilter": { + "version": "0.0.10", + "resolved": "https://registry.npmjs.org/cssfilter/-/cssfilter-0.0.10.tgz", + "integrity": "sha512-FAaLDaplstoRsDR8XGYH51znUN0UY7nMc6Z9/fvE8EXGwvJE9hu7W2vHwx1+bd6gCYnln9nLbzxFTrcO9YQDZw==", + "optional": true + }, + "d": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/d/-/d-1.0.1.tgz", + "integrity": "sha512-m62ShEObQ39CfralilEQRjH6oAMtNCV1xJyEx5LpRYUVN+EviphDgUc/F3hnYbADmkiNs67Y+3ylmlG7Lnu+FA==", + "requires": { + "es5-ext": "^0.10.50", + "type": "^1.0.1" + } + }, + "dashdash": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", + "integrity": "sha512-jRFi8UDGo6j+odZiEpjazZaWqEal3w/basFjQHQEwVtZJGDpxbH1MeYluwCS8Xq5wmLJooDlMgvVarmWfGM44g==", + "requires": { + "assert-plus": "^1.0.0" + } + }, + "data-fns": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/data-fns/-/data-fns-1.1.0.tgz", + "integrity": "sha512-/rJzdbnuY3DVgzqsfEfc+tJLuAKYaHzkUxSMRIU3dxKFeWGD/MGhrgAfuwSOmgfJ8enygztp9DeuvoSxauppIg==", + "requires": { + "unit-fns": "^0.1.6" + } + }, + "dataloader": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/dataloader/-/dataloader-2.1.0.tgz", + "integrity": "sha512-qTcEYLen3r7ojZNgVUaRggOI+KM7jrKxXeSHhogh/TWxYMeONEMqY+hmkobiYQozsGIyg9OYVzO4ZIfoB4I0pQ==", + "optional": true + }, + "debounce-fn": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/debounce-fn/-/debounce-fn-4.0.0.tgz", + "integrity": "sha512-8pYCQiL9Xdcg0UPSD3d+0KMlOjp+KGU5EPwYddgzQ7DATsg4fuUDjQtsYLmWjnk2obnNHgV3vE2Y4jejSOJVBQ==", + "optional": true, + "requires": { + "mimic-fn": "^3.0.0" + } + }, + "debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "requires": { + "ms": "2.1.2" + } + }, + "decamelize": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-4.0.0.tgz", + "integrity": "sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ==" + }, + "decimal.js": { + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.4.3.tgz", + "integrity": "sha512-VBBaLc1MgL5XpzgIP7ny5Z6Nx3UrRkIViUkPUdtl9aya5amy3De1gsUUSB1g3+3sExYNjCAsAznmukyxCb1GRA==" + }, + "decimal.js-light": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/decimal.js-light/-/decimal.js-light-2.5.1.tgz", + "integrity": "sha512-qIMFpTMZmny+MMIitAB6D7iVPEorVw6YQRWkvarTkT4tBeSLLiHzcwj6q0MmYSFCiVpiqPJTJEYIrpcPzVEIvg==" + }, + "decode-uri-component": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.2.tgz", + "integrity": "sha512-FqUYQ+8o158GyGTrMFJms9qh3CqTKvAqgqsTnkLI8sKu0028orqBhxNMFkFen0zGyg6epACD32pjVk58ngIErQ==" + }, + "decomment": { + "version": "0.9.5", + "resolved": "https://registry.npmjs.org/decomment/-/decomment-0.9.5.tgz", + "integrity": "sha512-h0TZ8t6Dp49duwyDHo3iw67mnh9/UpFiSSiOb5gDK1sqoXzrfX/SQxIUQd2R2QEiSnqib0KF2fnKnGfAhAs6lg==", + "requires": { + "esprima": "4.0.1" + } + }, + "decompress": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/decompress/-/decompress-4.2.1.tgz", + "integrity": "sha512-e48kc2IjU+2Zw8cTb6VZcJQ3lgVbS4uuB1TfCHbiZIP/haNXm+SVyhu+87jts5/3ROpd82GSVCoNs/z8l4ZOaQ==", + "requires": { + "decompress-tar": "^4.0.0", + "decompress-tarbz2": "^4.0.0", + "decompress-targz": "^4.0.0", + "decompress-unzip": "^4.0.1", + "graceful-fs": "^4.1.10", + "make-dir": "^1.0.0", + "pify": "^2.3.0", + "strip-dirs": "^2.0.0" + }, + "dependencies": { + "pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==" + } + } + }, + "decompress-tar": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/decompress-tar/-/decompress-tar-4.1.1.tgz", + "integrity": "sha512-JdJMaCrGpB5fESVyxwpCx4Jdj2AagLmv3y58Qy4GE6HMVjWz1FeVQk1Ct4Kye7PftcdOo/7U7UKzYBJgqnGeUQ==", "requires": { - "buffer-from": "^1.0.0", - "inherits": "^2.0.3", - "readable-stream": "^2.2.2", - "typedarray": "^0.0.6" + "file-type": "^5.2.0", + "is-stream": "^1.1.0", + "tar-stream": "^1.5.2" }, "dependencies": { + "bl": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/bl/-/bl-1.2.3.tgz", + "integrity": "sha512-pvcNpa0UU69UT341rO6AYy4FVAIkUHuZXRIWbq+zHnsVcRzDDjIAhGuuYoi0d//cwIwtt4pkpKycWEfjdV+vww==", + "requires": { + "readable-stream": "^2.3.5", + "safe-buffer": "^5.1.1" + } + }, "readable-stream": { "version": "2.3.7", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", @@ -39079,156 +43634,377 @@ "requires": { "safe-buffer": "~5.1.0" } + }, + "tar-stream": { + "version": "1.6.2", + "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-1.6.2.tgz", + "integrity": "sha512-rzS0heiNf8Xn7/mpdSVVSMAWAoy9bfb1WOTYC78Z0UQKeKa/CWS8FOq0lKGNa8DWKAn9gxjCvMLYc5PGXYlK2A==", + "requires": { + "bl": "^1.0.0", + "buffer-alloc": "^1.2.0", + "end-of-stream": "^1.0.0", + "fs-constants": "^1.0.0", + "readable-stream": "^2.3.0", + "to-buffer": "^1.1.1", + "xtend": "^4.0.0" + } } } }, - "conf": { - "version": "10.2.0", - "resolved": "https://registry.npmjs.org/conf/-/conf-10.2.0.tgz", - "integrity": "sha512-8fLl9F04EJqjSqH+QjITQfJF8BrOVaYr1jewVgSRAEWePfxT0sku4w2hrGQ60BC/TNLGQ2pgxNlTbWQmMPFvXg==", - "optional": true, + "decompress-tarbz2": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/decompress-tarbz2/-/decompress-tarbz2-4.1.1.tgz", + "integrity": "sha512-s88xLzf1r81ICXLAVQVzaN6ZmX4A6U4z2nMbOwobxkLoIIfjVMBg7TeguTUXkKeXni795B6y5rnvDw7rxhAq9A==", "requires": { - "ajv": "^8.6.3", - "ajv-formats": "^2.1.1", - "atomically": "^1.7.0", - "debounce-fn": "^4.0.0", - "dot-prop": "^6.0.1", - "env-paths": "^2.2.1", - "json-schema-typed": "^7.0.3", - "onetime": "^5.1.2", - "pkg-up": "^3.1.0", - "semver": "^7.3.5" + "decompress-tar": "^4.1.0", + "file-type": "^6.1.0", + "is-stream": "^1.1.0", + "seek-bzip": "^1.0.5", + "unbzip2-stream": "^1.0.9" }, "dependencies": { - "ajv": { - "version": "8.12.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz", - "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==", - "optional": true, + "file-type": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/file-type/-/file-type-6.2.0.tgz", + "integrity": "sha512-YPcTBDV+2Tm0VqjybVd32MHdlEGAtuxS3VAYsumFokDSMG+ROT5wawGlnHDoz7bfMcMDt9hxuXvXwoKUx2fkOg==" + } + } + }, + "decompress-targz": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/decompress-targz/-/decompress-targz-4.1.1.tgz", + "integrity": "sha512-4z81Znfr6chWnRDNfFNqLwPvm4db3WuZkqV+UgXQzSngG3CEKdBkw5jrv3axjjL96glyiiKjsxJG3X6WBZwX3w==", + "requires": { + "decompress-tar": "^4.1.1", + "file-type": "^5.2.0", + "is-stream": "^1.1.0" + } + }, + "decompress-unzip": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/decompress-unzip/-/decompress-unzip-4.0.1.tgz", + "integrity": "sha512-1fqeluvxgnn86MOh66u8FjbtJpAFv5wgCT9Iw8rcBqQcCo5tO8eiJw7NNTrvt9n4CRBVq7CstiS922oPgyGLrw==", + "requires": { + "file-type": "^3.8.0", + "get-stream": "^2.2.0", + "pify": "^2.3.0", + "yauzl": "^2.4.2" + }, + "dependencies": { + "file-type": { + "version": "3.9.0", + "resolved": "https://registry.npmjs.org/file-type/-/file-type-3.9.0.tgz", + "integrity": "sha512-RLoqTXE8/vPmMuTI88DAzhMYC99I8BWv7zYP4A1puo5HIjEJ5EX48ighy4ZyKMG9EDXxBgW6e++cn7d1xuFghA==" + }, + "get-stream": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-2.3.1.tgz", + "integrity": "sha512-AUGhbbemXxrZJRD5cDvKtQxLuYaIbNtDTK8YqupCI393Q2KSTreEsLUN3ZxAWFGiKTzL6nKuzfcIvieflUX9qA==", "requires": { - "fast-deep-equal": "^3.1.1", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2", - "uri-js": "^4.2.2" + "object-assign": "^4.0.1", + "pinkie-promise": "^2.0.0" } }, - "json-schema-traverse": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", - "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", - "optional": true + "pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==" } } }, - "console-control-strings": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz", - "integrity": "sha512-ty/fTekppD2fIwRvnZAVdeOiGd1c7YXEixbgJTNzqcxJWKQnjJ/V1bNEEE6hygpM3WjwHFUVK6HTjWSzV4a8sQ==", - "optional": true + "deep-eql": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-4.1.3.tgz", + "integrity": "sha512-WaEtAOpRA1MQ0eohqZjpGD8zdI0Ovsm8mmFhaDN8dvDZzyoUMcYDnf5Y6iu7HTXxf8JDS23qWa4a+hKCDyOPzw==", + "requires": { + "type-detect": "^4.0.0" + } }, - "constant-case": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/constant-case/-/constant-case-2.0.0.tgz", - "integrity": "sha512-eS0N9WwmjTqrOmR3o83F5vW8Z+9R1HnVz3xmzT2PMFug9ly+Au/fxRWlEBSb6LcZwspSsEn9Xs1uw9YgzAg1EQ==", + "deep-extend": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", + "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==", + "dev": true + }, + "defender-base-client": { + "version": "1.44.0", + "resolved": "https://registry.npmjs.org/defender-base-client/-/defender-base-client-1.44.0.tgz", + "integrity": "sha512-8ZgGA93+FlxNwG9LN1nu/Au5AyCKwAWJGNf0VLiPmh4GX/Nali/7kv72K+OtZgGxTLtKDKfgN4cnhEZwfrc8dg==", + "dev": true, "requires": { - "snake-case": "^2.1.0", - "upper-case": "^1.1.1" + "amazon-cognito-identity-js": "^6.0.1", + "async-retry": "^1.3.3", + "axios": "^0.21.2", + "lodash": "^4.17.19", + "node-fetch": "^2.6.0" } }, - "content-disposition": { - "version": "0.5.4", - "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", - "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==", + "defer-to-connect": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-2.0.1.tgz", + "integrity": "sha512-4tvttepXG1VaYGrRibk5EwJd1t4udunSOVMdLSAL6mId1ix438oPwPZMALY41FCijukO1L0twNcGsdzS7dHgDg==" + }, + "deferred-leveldown": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/deferred-leveldown/-/deferred-leveldown-5.3.0.tgz", + "integrity": "sha512-a59VOT+oDy7vtAbLRCZwWgxu2BaCfd5Hk7wxJd48ei7I+nsg8Orlb9CLG0PMZienk9BSUKgeAqkO2+Lw+1+Ukw==", "requires": { - "safe-buffer": "5.2.1" + "abstract-leveldown": "~6.2.1", + "inherits": "^2.0.3" + }, + "dependencies": { + "abstract-leveldown": { + "version": "6.2.3", + "resolved": "https://registry.npmjs.org/abstract-leveldown/-/abstract-leveldown-6.2.3.tgz", + "integrity": "sha512-BsLm5vFMRUrrLeCcRc+G0t2qOaTzpoJQLOubq2XM72eNpjF5UdU5o/5NvlNhx95XHcAvcl8OMXr4mlg/fRgUXQ==", + "requires": { + "buffer": "^5.5.0", + "immediate": "^3.2.3", + "level-concat-iterator": "~2.0.0", + "level-supports": "~1.0.0", + "xtend": "~4.0.0" + } + }, + "buffer": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", + "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", + "requires": { + "base64-js": "^1.3.1", + "ieee754": "^1.1.13" + } + }, + "level-supports": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/level-supports/-/level-supports-1.0.1.tgz", + "integrity": "sha512-rXM7GYnW8gsl1vedTJIbzOrRv85c/2uCMpiiCzO2fndd06U/kUXEEU9evYn4zFggBOg36IsBW8LzqIpETwwQzg==", + "requires": { + "xtend": "^4.0.2" + } + } } }, - "content-hash": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/content-hash/-/content-hash-2.5.2.tgz", - "integrity": "sha512-FvIQKy0S1JaWV10sMsA7TRx8bpU+pqPkhbsfvOJAdjRXvYxEckAwQWGwtRjiaJfh+E0DvcWUGqcdjwMGFjsSdw==", + "define-properties": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.4.tgz", + "integrity": "sha512-uckOqKcfaVvtBdsVkdPv3XjveQJsNQqmhXgRi8uhvWWuPYZCNlzT8qAyblUgNoXdHdjMTzAqeGjAoli8f+bzPA==", "requires": { - "cids": "^0.7.1", - "multicodec": "^0.5.5", - "multihashes": "^0.4.15" + "has-property-descriptors": "^1.0.0", + "object-keys": "^1.1.1" } }, - "content-type": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz", - "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==" + "delay": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/delay/-/delay-5.0.0.tgz", + "integrity": "sha512-ReEBKkIfe4ya47wlPYf/gu5ib6yUG0/Aez0JQZQz94kiWtRQvZIQbTiehsnwHvLSWJnQdhVeqYue7Id1dKr0qw==" }, - "convert-source-map": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz", - "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==", - "peer": true + "delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==" }, - "cookie": { - "version": "0.4.2", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.2.tgz", - "integrity": "sha512-aSWTXFzaKWkvHO1Ny/s+ePFpvKsPnjc551iI41v3ny/ow6tBG5Vd+FuqGNhh1LxOmVzOlGUriIlOaokOvhaStA==" + "depd": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", + "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==" }, - "cookie-signature": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", - "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==" + "des.js": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/des.js/-/des.js-1.0.1.tgz", + "integrity": "sha512-Q0I4pfFrv2VPd34/vfLrFOoRmlYj3OV50i7fskps1jZWK1kApMWWT9G6RRUeYedLcBDIhnSDaUvJMb3AhUlaEA==", + "requires": { + "inherits": "^2.0.1", + "minimalistic-assert": "^1.0.0" + } }, - "cookiejar": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/cookiejar/-/cookiejar-2.1.4.tgz", - "integrity": "sha512-LDx6oHrK+PhzLKJU9j5S7/Y3jM/mUHvD/DeI1WQmJn652iPC5Y4TBzC9l+5OMOXlyTTA+SmVUPm0HQUwpD5Jqw==" + "destroy": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", + "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==" }, - "core-js-compat": { - "version": "3.25.5", - "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.25.5.tgz", - "integrity": "sha512-ovcyhs2DEBUIE0MGEKHP4olCUW/XYte3Vroyxuh38rD1wAO4dHohsovUC4eAOuzFxE6b+RXvBU3UZ9o0YhUTkA==", + "detect-indent": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/detect-indent/-/detect-indent-5.0.0.tgz", + "integrity": "sha512-rlpvsxUtM0PQvy9iZe640/IWwWYyBsTApREbA1pHOpmOUIl9MkP/U4z7vTtg4Oaojvqhxt7sdufnT0EzGaR31g==", + "dev": true + }, + "devtools-protocol": { + "version": "0.0.981744", + "resolved": "https://registry.npmjs.org/devtools-protocol/-/devtools-protocol-0.0.981744.tgz", + "integrity": "sha512-0cuGS8+jhR67Fy7qG3i3Pc7Aw494sb9yG9QgpG97SFVWwolgYjlhJg7n+UaHxOQT30d1TYu/EYe9k01ivLErIg==", + "optional": true + }, + "diff": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/diff/-/diff-5.0.0.tgz", + "integrity": "sha512-/VTCrvm5Z0JGty/BWHljh+BAiw3IK+2j87NGMu8Nwc/f48WoDAC395uomO9ZD117ZOBaHmkX1oyLvkVM/aIT3w==" + }, + "diffie-hellman": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/diffie-hellman/-/diffie-hellman-5.0.3.tgz", + "integrity": "sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg==", "requires": { - "browserslist": "^4.21.4" + "bn.js": "^4.1.0", + "miller-rabin": "^4.0.0", + "randombytes": "^2.0.0" + }, + "dependencies": { + "bn.js": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==" + } } }, - "core-js-pure": { - "version": "3.30.1", - "resolved": "https://registry.npmjs.org/core-js-pure/-/core-js-pure-3.30.1.tgz", - "integrity": "sha512-nXBEVpmUnNRhz83cHd9JRQC52cTMcuXAmR56+9dSMpRdpeA4I1PX6yjmhd71Eyc/wXNsdBdUDIj1QTIeZpU5Tg==", - "dev": true + "docker-modem": { + "version": "3.0.8", + "resolved": "https://registry.npmjs.org/docker-modem/-/docker-modem-3.0.8.tgz", + "integrity": "sha512-f0ReSURdM3pcKPNS30mxOHSbaFLcknGmQjwSfmbcdOw1XWKXVhukM3NJHhr7NpY9BIyyWQb0EBo3KQvvuU5egQ==", + "requires": { + "debug": "^4.1.1", + "readable-stream": "^3.5.0", + "split-ca": "^1.0.1", + "ssh2": "^1.11.0" + } }, - "core-util-is": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", - "integrity": "sha512-3lqz5YjWTYnW6dlDa5TLaTCcShfar1e40rmcJVwCBJC6mWlFuj0eCHIElmG1g5kyuJ/GD+8Wn4FFCcz4gJPfaQ==" + "dockerode": { + "version": "3.3.5", + "resolved": "https://registry.npmjs.org/dockerode/-/dockerode-3.3.5.tgz", + "integrity": "sha512-/0YNa3ZDNeLr/tSckmD69+Gq+qVNhvKfAHNeZJBnp7EOP6RGKV8ORrJHkUn20So5wU+xxT7+1n5u8PjHbfjbSA==", + "requires": { + "@balena/dockerignore": "^1.0.2", + "docker-modem": "^3.0.0", + "tar-fs": "~2.0.1" + }, + "dependencies": { + "tar-fs": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-2.0.1.tgz", + "integrity": "sha512-6tzWDMeroL87uF/+lin46k+Q+46rAJ0SyPGz7OW7wTgblI273hsBqk2C1j0/xNadNLKDTUL9BukSjB7cwgmlPA==", + "requires": { + "chownr": "^1.1.1", + "mkdirp-classic": "^0.5.2", + "pump": "^3.0.0", + "tar-stream": "^2.0.0" + } + } + } }, - "cors": { - "version": "2.8.5", - "resolved": "https://registry.npmjs.org/cors/-/cors-2.8.5.tgz", - "integrity": "sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==", + "dom-serializer": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-2.0.0.tgz", + "integrity": "sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==", + "devOptional": true, "requires": { - "object-assign": "^4", - "vary": "^1" + "domelementtype": "^2.3.0", + "domhandler": "^5.0.2", + "entities": "^4.2.0" } }, - "cpu-features": { - "version": "0.0.4", - "resolved": "https://registry.npmjs.org/cpu-features/-/cpu-features-0.0.4.tgz", - "integrity": "sha512-fKiZ/zp1mUwQbnzb9IghXtHtDoTMtNeb8oYGx6kX2SYfhnG0HNdBEBIzB9b5KlXu5DQPhfy3mInbBxFcgwAr3A==", + "dom-walk": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/dom-walk/-/dom-walk-0.1.2.tgz", + "integrity": "sha512-6QvTW9mrGeIegrFXdtQi9pk7O/nSK6lSdXW2eqUspN5LWD7UTji2Fqw5V2YLjBpHEoU9Xl/eUWNpDeZvoyOv2w==" + }, + "domelementtype": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz", + "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==", + "devOptional": true + }, + "domhandler": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-5.0.3.tgz", + "integrity": "sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==", + "devOptional": true, + "requires": { + "domelementtype": "^2.3.0" + } + }, + "domutils": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-3.0.1.tgz", + "integrity": "sha512-z08c1l761iKhDFtfXO04C7kTdPBLi41zwOZl00WS8b5eiaebNpY00HKbztwBq+e3vyqWNwWF3mP9YLUeqIrF+Q==", + "devOptional": true, + "requires": { + "dom-serializer": "^2.0.0", + "domelementtype": "^2.3.0", + "domhandler": "^5.0.1" + } + }, + "dot-case": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/dot-case/-/dot-case-2.1.1.tgz", + "integrity": "sha512-HnM6ZlFqcajLsyudHq7LeeLDr2rFAVYtDv/hV5qchQEidSck8j9OPUsXY9KwJv/lHMtYlX4DjRQqwFYa+0r8Ug==", + "requires": { + "no-case": "^2.2.0" + } + }, + "dot-prop": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-6.0.1.tgz", + "integrity": "sha512-tE7ztYzXHIeyvc7N+hR3oi7FIbf/NIjVP9hmAt3yMXzrQ072/fpjGLx2GxNxGxUl5V73MEqYzioOMoVhGMJ5cA==", "optional": true, "requires": { - "buildcheck": "0.0.3", - "nan": "^2.15.0" + "is-obj": "^2.0.0" } }, - "crc-32": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/crc-32/-/crc-32-1.2.2.tgz", - "integrity": "sha512-ROmzCKrTnOwybPcJApAA6WBWij23HVfGVNKqqrZpuyZOHqK2CwHSvpGuyt/UNNvaIjEd8X5IFGp4Mh+Ie1IHJQ==" + "dotenv": { + "version": "16.3.1", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.3.1.tgz", + "integrity": "sha512-IPzF4w4/Rd94bA9imS68tZBaYyBWSCE47V1RGuMrB94iyTOIEwRmVL2x/4An+6mETpLrKJ5hQkB8W4kFAadeIQ==" }, - "create-ecdh": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/create-ecdh/-/create-ecdh-4.0.4.tgz", - "integrity": "sha512-mf+TCx8wWc9VpuxfP2ht0iSISLZnt0JgWlrOKZiNqyUZWnjIaCIVNQArMHnCZKfEYRg6IM7A+NeJoN8gf/Ws0A==", + "double-ended-queue": { + "version": "2.1.0-0", + "resolved": "https://registry.npmjs.org/double-ended-queue/-/double-ended-queue-2.1.0-0.tgz", + "integrity": "sha512-+BNfZ+deCo8hMNpDqDnvT+c0XpJ5cUa6mqYq89bho2Ifze4URTqRkcwR399hWoTrTkbZ/XJYDgP6rc7pRgffEQ==", + "optional": true + }, + "dtrace-provider": { + "version": "0.8.8", + "resolved": "https://registry.npmjs.org/dtrace-provider/-/dtrace-provider-0.8.8.tgz", + "integrity": "sha512-b7Z7cNtHPhH9EJhNNbbeqTcXB8LGFFZhq1PGgEvpeHlzd36bhbdTWoE/Ba/YguqpBSlAPKnARWhVlhunCMwfxg==", + "optional": true, "requires": { - "bn.js": "^4.1.0", - "elliptic": "^6.5.3" + "nan": "^2.14.0" + } + }, + "duplexer3": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/duplexer3/-/duplexer3-0.1.5.tgz", + "integrity": "sha512-1A8za6ws41LQgv9HrE/66jyC5yuSjQ3L/KOpFtoBilsAK2iA2wuS5rTt1OCzIvtS2V7nVmedsUU+DGRcjBmOYA==" + }, + "ecc-jsbn": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", + "integrity": "sha512-eh9O+hwRHNbG4BLTjEl3nw044CkGm5X6LoaCf7LPp7UU8Qrt47JYNi6nPX8xjW97TKGKm1ouctg0QSpZe9qrnw==", + "requires": { + "jsbn": "~0.1.0", + "safer-buffer": "^2.1.0" + } + }, + "ee-first": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", + "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==" + }, + "electron-to-chromium": { + "version": "1.4.284", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.284.tgz", + "integrity": "sha512-M8WEXFuKXMYMVr45fo8mq0wUrrJHheiKZf6BArTKk9ZBYCKJEOU5H8cdWgDT+qCVZf7Na4lVUaZsA+h6uA9+PA==" + }, + "elliptic": { + "version": "6.5.4", + "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.4.tgz", + "integrity": "sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ==", + "requires": { + "bn.js": "^4.11.9", + "brorand": "^1.1.0", + "hash.js": "^1.0.0", + "hmac-drbg": "^1.0.1", + "inherits": "^2.0.4", + "minimalistic-assert": "^1.0.1", + "minimalistic-crypto-utils": "^1.0.1" }, "dependencies": { "bn.js": { @@ -39238,3228 +44014,3966 @@ } } }, - "create-hash": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/create-hash/-/create-hash-1.2.0.tgz", - "integrity": "sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==", + "emittery": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/emittery/-/emittery-0.4.1.tgz", + "integrity": "sha512-r4eRSeStEGf6M5SKdrQhhLK5bOwOBxQhIE3YSTnZE3GpKiLfnnhE+tPtrJE79+eDJgm39BM6LSoI8SCx4HbwlQ==", + "optional": true + }, + "emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" + }, + "encode-utf8": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/encode-utf8/-/encode-utf8-1.0.3.tgz", + "integrity": "sha512-ucAnuBEhUK4boH2HjVYG5Q2mQyPorvv0u/ocS+zhdw0S8AlHYY+GOFhP1Gio5z4icpP2ivFSvhtFjQi8+T9ppw==", + "dev": true + }, + "encodeurl": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", + "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==" + }, + "encoding-down": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/encoding-down/-/encoding-down-6.3.0.tgz", + "integrity": "sha512-QKrV0iKR6MZVJV08QY0wp1e7vF6QbhnbQhb07bwpEyuz4uZiZgPlEGdkCROuFkUwdxlFaiPIhjyarH1ee/3vhw==", "requires": { - "cipher-base": "^1.0.1", - "inherits": "^2.0.1", - "md5.js": "^1.3.4", - "ripemd160": "^2.0.1", - "sha.js": "^2.4.0" + "abstract-leveldown": "^6.2.1", + "inherits": "^2.0.3", + "level-codec": "^9.0.0", + "level-errors": "^2.0.0" } }, - "create-hmac": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/create-hmac/-/create-hmac-1.1.7.tgz", - "integrity": "sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==", - "requires": { - "cipher-base": "^1.0.3", - "create-hash": "^1.1.0", - "inherits": "^2.0.1", - "ripemd160": "^2.0.0", - "safe-buffer": "^5.0.1", - "sha.js": "^2.4.8" + "end-of-stream": { + "version": "1.4.4", + "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", + "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", + "requires": { + "once": "^1.4.0" } }, - "create-require": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz", - "integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==", + "end-stream": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/end-stream/-/end-stream-0.1.0.tgz", + "integrity": "sha512-Brl10T8kYnc75IepKizW6Y9liyW8ikz1B7n/xoHrJxoVSSjoqPn30sb7XVFfQERK4QfUMYRGs9dhWwtt2eu6uA==", "optional": true, - "peer": true + "requires": { + "write-stream": "~0.4.3" + } }, - "cross-fetch": { - "version": "3.1.6", - "resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-3.1.6.tgz", - "integrity": "sha512-riRvo06crlE8HiqOwIpQhxwdOk4fOeR7FVM/wXoxchFEqMNUjvbs3bfo4OTgMEMHzppd4DxFBDbyySj8Cv781g==", + "enquirer": { + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/enquirer/-/enquirer-2.3.6.tgz", + "integrity": "sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg==", "requires": { - "node-fetch": "^2.6.11" + "ansi-colors": "^4.1.1" }, "dependencies": { - "node-fetch": { - "version": "2.6.11", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.11.tgz", - "integrity": "sha512-4I6pdBY1EthSqDmJkiNk3JIT8cswwR9nfeW/cPdUagJYEQG7R95WRH74wpz7ma8Gh/9dI9FP+OU+0E4FvtA55w==", - "requires": { - "whatwg-url": "^5.0.0" - } + "ansi-colors": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.3.tgz", + "integrity": "sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==" } } }, - "crypt": { - "version": "0.0.2", - "resolved": "https://registry.npmjs.org/crypt/-/crypt-0.0.2.tgz", - "integrity": "sha512-mCxBlsHFYh9C+HVpiEacem8FEBnMXgU9gy4zmNC+SXAZNB/1idgp/aulFJ4FgCi7GPEVbfyng092GqL2k2rmow==" + "entities": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-4.4.0.tgz", + "integrity": "sha512-oYp7156SP8LkeGD0GF85ad1X9Ai79WtRsZ2gxJqtBuzH+98YUV6jkHEKlZkMbcrjJjIVJNIDP/3WL9wQkoPbWA==", + "devOptional": true }, - "crypto-addr-codec": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/crypto-addr-codec/-/crypto-addr-codec-0.1.7.tgz", - "integrity": "sha512-X4hzfBzNhy4mAc3UpiXEC/L0jo5E8wAa9unsnA8nNXYzXjCcGk83hfC5avJWCSGT8V91xMnAS9AKMHmjw5+XCg==", + "env-paths": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz", + "integrity": "sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==" + }, + "errno": { + "version": "0.1.8", + "resolved": "https://registry.npmjs.org/errno/-/errno-0.1.8.tgz", + "integrity": "sha512-dJ6oBr5SQ1VSd9qkk7ByRgb/1SH4JZjCHSW/mr63/QcXO9zLVxvJ6Oy13nio03rxpSnVDDjFor75SjVeZWPW/A==", "requires": { - "base-x": "^3.0.8", - "big-integer": "1.6.36", - "blakejs": "^1.1.0", - "bs58": "^4.0.1", - "ripemd160-min": "0.0.6", - "safe-buffer": "^5.2.0", - "sha3": "^2.1.1" + "prr": "~1.0.1" } }, - "crypto-browserify": { - "version": "3.12.0", - "resolved": "https://registry.npmjs.org/crypto-browserify/-/crypto-browserify-3.12.0.tgz", - "integrity": "sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg==", + "error-ex": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", + "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", "requires": { - "browserify-cipher": "^1.0.0", - "browserify-sign": "^4.0.0", - "create-ecdh": "^4.0.0", - "create-hash": "^1.1.0", - "create-hmac": "^1.1.0", - "diffie-hellman": "^5.0.0", - "inherits": "^2.0.1", - "pbkdf2": "^3.0.3", - "public-encrypt": "^4.0.0", - "randombytes": "^2.0.0", - "randomfill": "^1.0.3" + "is-arrayish": "^0.2.1" } }, - "crypto-es": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/crypto-es/-/crypto-es-1.2.7.tgz", - "integrity": "sha512-UUqiVJ2gUuZFmbFsKmud3uuLcNP2+Opt+5ysmljycFCyhA0+T16XJmo1ev/t5kMChMqWh7IEvURNCqsg+SjZGQ==" - }, - "css-select": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/css-select/-/css-select-5.1.0.tgz", - "integrity": "sha512-nwoRF1rvRRnnCqqY7updORDsuqKzqYJ28+oSMaJMMgOauh3fvwHqMS7EZpIPqK8GL+g9mKxF1vP/ZjSeNjEVHg==", - "dev": true, + "es-abstract": { + "version": "1.20.4", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.20.4.tgz", + "integrity": "sha512-0UtvRN79eMe2L+UNEF1BwRe364sj/DXhQ/k5FmivgoSdpM90b8Jc0mDzKMGo7QS0BVbOP/bTwBKNnDc9rNzaPA==", "requires": { - "boolbase": "^1.0.0", - "css-what": "^6.1.0", - "domhandler": "^5.0.2", - "domutils": "^3.0.1", - "nth-check": "^2.0.1" + "call-bind": "^1.0.2", + "es-to-primitive": "^1.2.1", + "function-bind": "^1.1.1", + "function.prototype.name": "^1.1.5", + "get-intrinsic": "^1.1.3", + "get-symbol-description": "^1.0.0", + "has": "^1.0.3", + "has-property-descriptors": "^1.0.0", + "has-symbols": "^1.0.3", + "internal-slot": "^1.0.3", + "is-callable": "^1.2.7", + "is-negative-zero": "^2.0.2", + "is-regex": "^1.1.4", + "is-shared-array-buffer": "^1.0.2", + "is-string": "^1.0.7", + "is-weakref": "^1.0.2", + "object-inspect": "^1.12.2", + "object-keys": "^1.1.1", + "object.assign": "^4.1.4", + "regexp.prototype.flags": "^1.4.3", + "safe-regex-test": "^1.0.0", + "string.prototype.trimend": "^1.0.5", + "string.prototype.trimstart": "^1.0.5", + "unbox-primitive": "^1.0.2" } }, - "css-what": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/css-what/-/css-what-6.1.0.tgz", - "integrity": "sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==", - "dev": true - }, - "cssfilter": { - "version": "0.0.10", - "resolved": "https://registry.npmjs.org/cssfilter/-/cssfilter-0.0.10.tgz", - "integrity": "sha512-FAaLDaplstoRsDR8XGYH51znUN0UY7nMc6Z9/fvE8EXGwvJE9hu7W2vHwx1+bd6gCYnln9nLbzxFTrcO9YQDZw==", - "optional": true + "es-array-method-boxes-properly": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/es-array-method-boxes-properly/-/es-array-method-boxes-properly-1.0.0.tgz", + "integrity": "sha512-wd6JXUmyHmt8T5a2xreUwKcGPq6f1f+WwIJkijUqiGcJz1qqnZgP6XIK+QyIWU5lT7imeNxUll48bziG+TSYcA==" }, - "d": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/d/-/d-1.0.1.tgz", - "integrity": "sha512-m62ShEObQ39CfralilEQRjH6oAMtNCV1xJyEx5LpRYUVN+EviphDgUc/F3hnYbADmkiNs67Y+3ylmlG7Lnu+FA==", + "es-to-primitive": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", + "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", "requires": { - "es5-ext": "^0.10.50", - "type": "^1.0.1" + "is-callable": "^1.1.4", + "is-date-object": "^1.0.1", + "is-symbol": "^1.0.2" } }, - "dashdash": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", - "integrity": "sha512-jRFi8UDGo6j+odZiEpjazZaWqEal3w/basFjQHQEwVtZJGDpxbH1MeYluwCS8Xq5wmLJooDlMgvVarmWfGM44g==", + "es5-ext": { + "version": "0.10.62", + "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.62.tgz", + "integrity": "sha512-BHLqn0klhEpnOKSrzn/Xsz2UIW8j+cGmo9JLzr8BiUapV8hPL9+FliFqjwr9ngW7jWdnxv6eO+/LqyhJVqgrjA==", "requires": { - "assert-plus": "^1.0.0" + "es6-iterator": "^2.0.3", + "es6-symbol": "^3.1.3", + "next-tick": "^1.1.0" } }, - "data-fns": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/data-fns/-/data-fns-1.1.0.tgz", - "integrity": "sha512-/rJzdbnuY3DVgzqsfEfc+tJLuAKYaHzkUxSMRIU3dxKFeWGD/MGhrgAfuwSOmgfJ8enygztp9DeuvoSxauppIg==", + "es6-iterator": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/es6-iterator/-/es6-iterator-2.0.3.tgz", + "integrity": "sha512-zw4SRzoUkd+cl+ZoE15A9o1oQd920Bb0iOJMQkQhl3jNc03YqVjAhG7scf9C5KWRU/R13Orf588uCC6525o02g==", "requires": { - "unit-fns": "^0.1.6" + "d": "1", + "es5-ext": "^0.10.35", + "es6-symbol": "^3.1.1" } }, - "dataloader": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/dataloader/-/dataloader-2.1.0.tgz", - "integrity": "sha512-qTcEYLen3r7ojZNgVUaRggOI+KM7jrKxXeSHhogh/TWxYMeONEMqY+hmkobiYQozsGIyg9OYVzO4ZIfoB4I0pQ==", - "optional": true + "es6-promise": { + "version": "4.2.8", + "resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-4.2.8.tgz", + "integrity": "sha512-HJDGx5daxeIvxdBxvG2cb9g4tEvwIk3i8+nhX0yGrYmZUzbkdg8QbDevheDB8gd0//uPj4c1EQua8Q+MViT0/w==" }, - "debounce-fn": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/debounce-fn/-/debounce-fn-4.0.0.tgz", - "integrity": "sha512-8pYCQiL9Xdcg0UPSD3d+0KMlOjp+KGU5EPwYddgzQ7DATsg4fuUDjQtsYLmWjnk2obnNHgV3vE2Y4jejSOJVBQ==", - "optional": true, + "es6-promisify": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/es6-promisify/-/es6-promisify-5.0.0.tgz", + "integrity": "sha512-C+d6UdsYDk0lMebHNR4S2NybQMMngAOnOwYBQjTOiv0MkoJMP0Myw2mgpDLBcpfCmRLxyFqYhS/CfOENq4SJhQ==", "requires": { - "mimic-fn": "^3.0.0" + "es6-promise": "^4.0.3" } }, - "debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "es6-symbol": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.3.tgz", + "integrity": "sha512-NJ6Yn3FuDinBaBRWl/q5X/s4koRHBrgKAu+yGI6JCBeiu3qrcbJhwT2GeR/EXVfylRk8dpQVJoLEFhK+Mu31NA==", "requires": { - "ms": "2.1.2" + "d": "^1.0.1", + "ext": "^1.1.2" } }, - "decamelize": { + "es6-weak-map": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/es6-weak-map/-/es6-weak-map-2.0.3.tgz", + "integrity": "sha512-p5um32HOTO1kP+w7PRnB+5lQ43Z6muuMuIMffvDN8ZB4GcnjLBV6zGStpbASIMk4DCAvEaamhe2zhyCb/QXXsA==", + "requires": { + "d": "1", + "es5-ext": "^0.10.46", + "es6-iterator": "^2.0.3", + "es6-symbol": "^3.1.1" + } + }, + "escalade": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", + "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==" + }, + "escape-html": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", + "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==" + }, + "escape-latex": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/escape-latex/-/escape-latex-1.2.0.tgz", + "integrity": "sha512-nV5aVWW1K0wEiUIEdZ4erkGGH8mDxGyxSeqPzRNtWP7ataw+/olFObw7hujFWlVjNsaDFw5VZ5NzVSIqRgfTiw==" + }, + "escape-string-regexp": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-4.0.0.tgz", - "integrity": "sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ==" + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==" }, - "decimal.js": { - "version": "10.4.3", - "resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.4.3.tgz", - "integrity": "sha512-VBBaLc1MgL5XpzgIP7ny5Z6Nx3UrRkIViUkPUdtl9aya5amy3De1gsUUSB1g3+3sExYNjCAsAznmukyxCb1GRA==" + "esm": { + "version": "3.2.25", + "resolved": "https://registry.npmjs.org/esm/-/esm-3.2.25.tgz", + "integrity": "sha512-U1suiZ2oDVWv4zPO56S0NcR5QriEahGtdN2OR6FiOG4WJvcjBVFB0qI4+eKoWFH483PKGuLuu6V8Z4T5g63UVA==" }, - "decimal.js-light": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/decimal.js-light/-/decimal.js-light-2.5.1.tgz", - "integrity": "sha512-qIMFpTMZmny+MMIitAB6D7iVPEorVw6YQRWkvarTkT4tBeSLLiHzcwj6q0MmYSFCiVpiqPJTJEYIrpcPzVEIvg==" + "esprima": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==" }, - "decode-uri-component": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.2.tgz", - "integrity": "sha512-FqUYQ+8o158GyGTrMFJms9qh3CqTKvAqgqsTnkLI8sKu0028orqBhxNMFkFen0zGyg6epACD32pjVk58ngIErQ==" + "etag": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", + "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==" }, - "decomment": { - "version": "0.9.5", - "resolved": "https://registry.npmjs.org/decomment/-/decomment-0.9.5.tgz", - "integrity": "sha512-h0TZ8t6Dp49duwyDHo3iw67mnh9/UpFiSSiOb5gDK1sqoXzrfX/SQxIUQd2R2QEiSnqib0KF2fnKnGfAhAs6lg==", + "eth-block-tracker": { + "version": "4.4.3", + "resolved": "https://registry.npmjs.org/eth-block-tracker/-/eth-block-tracker-4.4.3.tgz", + "integrity": "sha512-A8tG4Z4iNg4mw5tP1Vung9N9IjgMNqpiMoJ/FouSFwNCGHv2X0mmOYwtQOJzki6XN7r7Tyo01S29p7b224I4jw==", "requires": { - "esprima": "4.0.1" + "@babel/plugin-transform-runtime": "^7.5.5", + "@babel/runtime": "^7.5.5", + "eth-query": "^2.1.0", + "json-rpc-random-id": "^1.0.1", + "pify": "^3.0.0", + "safe-event-emitter": "^1.0.1" } }, - "decompress": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/decompress/-/decompress-4.2.1.tgz", - "integrity": "sha512-e48kc2IjU+2Zw8cTb6VZcJQ3lgVbS4uuB1TfCHbiZIP/haNXm+SVyhu+87jts5/3ROpd82GSVCoNs/z8l4ZOaQ==", + "eth-ens-namehash": { + "version": "2.0.8", + "resolved": "https://registry.npmjs.org/eth-ens-namehash/-/eth-ens-namehash-2.0.8.tgz", + "integrity": "sha512-VWEI1+KJfz4Km//dadyvBBoBeSQ0MHTXPvr8UIXiLW6IanxvAV+DmlZAijZwAyggqGUfwQBeHf7tc9wzc1piSw==", "requires": { - "decompress-tar": "^4.0.0", - "decompress-tarbz2": "^4.0.0", - "decompress-targz": "^4.0.0", - "decompress-unzip": "^4.0.1", - "graceful-fs": "^4.1.10", - "make-dir": "^1.0.0", - "pify": "^2.3.0", - "strip-dirs": "^2.0.0" + "idna-uts46-hx": "^2.3.1", + "js-sha3": "^0.5.7" }, "dependencies": { - "pify": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", - "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==" + "js-sha3": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/js-sha3/-/js-sha3-0.5.7.tgz", + "integrity": "sha512-GII20kjaPX0zJ8wzkTbNDYMY7msuZcTWk8S5UOh6806Jq/wz1J8/bnr8uGU0DAUmYDjj2Mr4X1cW8v/GLYnR+g==" } } }, - "decompress-response": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-4.2.1.tgz", - "integrity": "sha512-jOSne2qbyE+/r8G1VU+G/82LBs2Fs4LAsTiLSHOCOMZQl2OKZ6i8i4IyHemTe+/yIXOtTcRQMzPcgyhoFlqPkw==", - "optional": true, - "requires": { - "mimic-response": "^2.0.0" - } - }, - "decompress-tar": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/decompress-tar/-/decompress-tar-4.1.1.tgz", - "integrity": "sha512-JdJMaCrGpB5fESVyxwpCx4Jdj2AagLmv3y58Qy4GE6HMVjWz1FeVQk1Ct4Kye7PftcdOo/7U7UKzYBJgqnGeUQ==", + "eth-gas-reporter": { + "version": "0.2.25", + "resolved": "https://registry.npmjs.org/eth-gas-reporter/-/eth-gas-reporter-0.2.25.tgz", + "integrity": "sha512-1fRgyE4xUB8SoqLgN3eDfpDfwEfRxh2Sz1b7wzFbyQA+9TekMmvSjjoRu9SKcSVyK+vLkLIsVbJDsTWjw195OQ==", "requires": { - "file-type": "^5.2.0", - "is-stream": "^1.1.0", - "tar-stream": "^1.5.2" + "@ethersproject/abi": "^5.0.0-beta.146", + "@solidity-parser/parser": "^0.14.0", + "cli-table3": "^0.5.0", + "colors": "1.4.0", + "ethereum-cryptography": "^1.0.3", + "ethers": "^4.0.40", + "fs-readdir-recursive": "^1.1.0", + "lodash": "^4.17.14", + "markdown-table": "^1.1.3", + "mocha": "^7.1.1", + "req-cwd": "^2.0.0", + "request": "^2.88.0", + "request-promise-native": "^1.0.5", + "sha1": "^1.1.1", + "sync-request": "^6.0.0" }, "dependencies": { - "bl": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/bl/-/bl-1.2.3.tgz", - "integrity": "sha512-pvcNpa0UU69UT341rO6AYy4FVAIkUHuZXRIWbq+zHnsVcRzDDjIAhGuuYoi0d//cwIwtt4pkpKycWEfjdV+vww==", + "ansi-colors": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-3.2.3.tgz", + "integrity": "sha512-LEHHyuhlPY3TmuUYMh2oz89lTShfvgbmzaBcxve9t/9Wuy7Dwf4yoAKcND7KFT1HAQfqZ12qtc+DUrBMeKF9nw==" + }, + "ansi-regex": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.1.tgz", + "integrity": "sha512-ILlv4k/3f6vfQ4OoP2AGvirOktlQ98ZEL1k9FaQjxa3L1abBgbuTDAdPOpvbGncC0BTVQrl+OM8xZGK6tWXt7g==" + }, + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "requires": { + "color-convert": "^1.9.0" + } + }, + "argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "requires": { + "sprintf-js": "~1.0.2" + } + }, + "bn.js": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==" + }, + "brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "requires": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "camelcase": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==" + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "dependencies": { + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "chokidar": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.3.0.tgz", + "integrity": "sha512-dGmKLDdT3Gdl7fBUe8XK+gAtGmzy5Fn0XkkWQuYxGIgWVPPse2CxFA5mtrlD0TOHaHjEUqkWNyP1XdHoJES/4A==", + "requires": { + "anymatch": "~3.1.1", + "braces": "~3.0.2", + "fsevents": "~2.1.1", + "glob-parent": "~5.1.0", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.2.0" + } + }, + "cli-table3": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/cli-table3/-/cli-table3-0.5.1.tgz", + "integrity": "sha512-7Qg2Jrep1S/+Q3EceiZtQcDPWxhAvBw+ERf1162v4sikJrvojMHFqXt8QIVha8UlH9rgU0BeWPytZ9/TzYqlUw==", + "requires": { + "colors": "^1.1.2", + "object-assign": "^4.1.0", + "string-width": "^2.1.1" + } + }, + "cliui": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-5.0.0.tgz", + "integrity": "sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA==", + "requires": { + "string-width": "^3.1.0", + "strip-ansi": "^5.2.0", + "wrap-ansi": "^5.1.0" + }, + "dependencies": { + "string-width": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", + "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", + "requires": { + "emoji-regex": "^7.0.1", + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^5.1.0" + } + }, + "strip-ansi": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "requires": { + "ansi-regex": "^4.1.0" + } + } + } + }, + "color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==" + }, + "debug": { + "version": "3.2.6", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", + "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", + "requires": { + "ms": "^2.1.1" + } + }, + "decamelize": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", + "integrity": "sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==" + }, + "diff": { + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/diff/-/diff-3.5.0.tgz", + "integrity": "sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA==" + }, + "emoji-regex": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", + "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==" + }, + "escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==" + }, + "ethers": { + "version": "4.0.49", + "resolved": "https://registry.npmjs.org/ethers/-/ethers-4.0.49.tgz", + "integrity": "sha512-kPltTvWiyu+OktYy1IStSO16i2e7cS9D9OxZ81q2UUaiNPVrm/RTcbxamCXF9VUSKzJIdJV68EAIhTEVBalRWg==", + "requires": { + "aes-js": "3.0.0", + "bn.js": "^4.11.9", + "elliptic": "6.5.4", + "hash.js": "1.1.3", + "js-sha3": "0.5.7", + "scrypt-js": "2.0.4", + "setimmediate": "1.0.4", + "uuid": "2.0.1", + "xmlhttprequest": "1.8.0" + } + }, + "find-up": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", + "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", "requires": { - "readable-stream": "^2.3.5", - "safe-buffer": "^5.1.1" + "locate-path": "^3.0.0" } }, - "readable-stream": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "flat": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/flat/-/flat-4.1.1.tgz", + "integrity": "sha512-FmTtBsHskrU6FJ2VxCnsDb84wu9zhmO3cUX2kGFb5tuwhfXxGciiT0oRY+cck35QmG+NmGh5eLz6lLCpWTqwpA==", "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" + "is-buffer": "~2.0.3" } }, - "safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + "glob": { + "version": "7.1.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.3.tgz", + "integrity": "sha512-vcfuiIxogLV4DlGBHIUOwI0IbrJ8HWPc4MU7HzviGeNho/UJDfi6B5p3sHeWIQ0KGIU0Jpxi5ZHxemQfLkkAwQ==", + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } }, - "string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==" + }, + "hash.js": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.3.tgz", + "integrity": "sha512-/UETyP0W22QILqS+6HowevwhEFJ3MBJnwTf75Qob9Wz9t0DPuisL8kW8YZMK62dHAKE1c1p+gY1TtOLY+USEHA==", "requires": { - "safe-buffer": "~5.1.0" + "inherits": "^2.0.3", + "minimalistic-assert": "^1.0.0" } }, - "tar-stream": { - "version": "1.6.2", - "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-1.6.2.tgz", - "integrity": "sha512-rzS0heiNf8Xn7/mpdSVVSMAWAoy9bfb1WOTYC78Z0UQKeKa/CWS8FOq0lKGNa8DWKAn9gxjCvMLYc5PGXYlK2A==", + "is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha512-VHskAKYM8RfSFXwee5t5cbN5PZeq1Wrh6qd5bkyiXIf6UQcN6w/A0eXM9r6t8d+GYOh+o6ZhiEnb88LN/Y8m2w==" + }, + "js-sha3": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/js-sha3/-/js-sha3-0.5.7.tgz", + "integrity": "sha512-GII20kjaPX0zJ8wzkTbNDYMY7msuZcTWk8S5UOh6806Jq/wz1J8/bnr8uGU0DAUmYDjj2Mr4X1cW8v/GLYnR+g==" + }, + "js-yaml": { + "version": "3.13.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.13.1.tgz", + "integrity": "sha512-YfbcO7jXDdyj0DGxYVSlSeQNHbD7XPWvrVWeVUujrQEoZzWJIRrCPoyk6kL6IAjAG2IolMK4T0hNUe0HOUs5Jw==", "requires": { - "bl": "^1.0.0", - "buffer-alloc": "^1.2.0", - "end-of-stream": "^1.0.0", - "fs-constants": "^1.0.0", - "readable-stream": "^2.3.0", - "to-buffer": "^1.1.1", - "xtend": "^4.0.0" + "argparse": "^1.0.7", + "esprima": "^4.0.0" } - } - } - }, - "decompress-tarbz2": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/decompress-tarbz2/-/decompress-tarbz2-4.1.1.tgz", - "integrity": "sha512-s88xLzf1r81ICXLAVQVzaN6ZmX4A6U4z2nMbOwobxkLoIIfjVMBg7TeguTUXkKeXni795B6y5rnvDw7rxhAq9A==", - "requires": { - "decompress-tar": "^4.1.0", - "file-type": "^6.1.0", - "is-stream": "^1.1.0", - "seek-bzip": "^1.0.5", - "unbzip2-stream": "^1.0.9" - }, - "dependencies": { - "file-type": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/file-type/-/file-type-6.2.0.tgz", - "integrity": "sha512-YPcTBDV+2Tm0VqjybVd32MHdlEGAtuxS3VAYsumFokDSMG+ROT5wawGlnHDoz7bfMcMDt9hxuXvXwoKUx2fkOg==" - } - } - }, - "decompress-targz": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/decompress-targz/-/decompress-targz-4.1.1.tgz", - "integrity": "sha512-4z81Znfr6chWnRDNfFNqLwPvm4db3WuZkqV+UgXQzSngG3CEKdBkw5jrv3axjjL96glyiiKjsxJG3X6WBZwX3w==", - "requires": { - "decompress-tar": "^4.1.1", - "file-type": "^5.2.0", - "is-stream": "^1.1.0" - } - }, - "decompress-unzip": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/decompress-unzip/-/decompress-unzip-4.0.1.tgz", - "integrity": "sha512-1fqeluvxgnn86MOh66u8FjbtJpAFv5wgCT9Iw8rcBqQcCo5tO8eiJw7NNTrvt9n4CRBVq7CstiS922oPgyGLrw==", - "requires": { - "file-type": "^3.8.0", - "get-stream": "^2.2.0", - "pify": "^2.3.0", - "yauzl": "^2.4.2" - }, - "dependencies": { - "file-type": { - "version": "3.9.0", - "resolved": "https://registry.npmjs.org/file-type/-/file-type-3.9.0.tgz", - "integrity": "sha512-RLoqTXE8/vPmMuTI88DAzhMYC99I8BWv7zYP4A1puo5HIjEJ5EX48ighy4ZyKMG9EDXxBgW6e++cn7d1xuFghA==" }, - "get-stream": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-2.3.1.tgz", - "integrity": "sha512-AUGhbbemXxrZJRD5cDvKtQxLuYaIbNtDTK8YqupCI393Q2KSTreEsLUN3ZxAWFGiKTzL6nKuzfcIvieflUX9qA==", + "locate-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", + "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", "requires": { - "object-assign": "^4.0.1", - "pinkie-promise": "^2.0.0" + "p-locate": "^3.0.0", + "path-exists": "^3.0.0" } }, - "pify": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", - "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==" - } - } - }, - "deep-eql": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-4.1.3.tgz", - "integrity": "sha512-WaEtAOpRA1MQ0eohqZjpGD8zdI0Ovsm8mmFhaDN8dvDZzyoUMcYDnf5Y6iu7HTXxf8JDS23qWa4a+hKCDyOPzw==", - "requires": { - "type-detect": "^4.0.0" - } - }, - "deep-extend": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", - "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==", - "devOptional": true - }, - "defender-base-client": { - "version": "1.44.0", - "resolved": "https://registry.npmjs.org/defender-base-client/-/defender-base-client-1.44.0.tgz", - "integrity": "sha512-8ZgGA93+FlxNwG9LN1nu/Au5AyCKwAWJGNf0VLiPmh4GX/Nali/7kv72K+OtZgGxTLtKDKfgN4cnhEZwfrc8dg==", - "dev": true, - "requires": { - "amazon-cognito-identity-js": "^6.0.1", - "async-retry": "^1.3.3", - "axios": "^0.21.2", - "lodash": "^4.17.19", - "node-fetch": "^2.6.0" - } - }, - "defer-to-connect": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-2.0.1.tgz", - "integrity": "sha512-4tvttepXG1VaYGrRibk5EwJd1t4udunSOVMdLSAL6mId1ix438oPwPZMALY41FCijukO1L0twNcGsdzS7dHgDg==" - }, - "deferred-leveldown": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/deferred-leveldown/-/deferred-leveldown-5.3.0.tgz", - "integrity": "sha512-a59VOT+oDy7vtAbLRCZwWgxu2BaCfd5Hk7wxJd48ei7I+nsg8Orlb9CLG0PMZienk9BSUKgeAqkO2+Lw+1+Ukw==", - "requires": { - "abstract-leveldown": "~6.2.1", - "inherits": "^2.0.3" - }, - "dependencies": { - "abstract-leveldown": { - "version": "6.2.3", - "resolved": "https://registry.npmjs.org/abstract-leveldown/-/abstract-leveldown-6.2.3.tgz", - "integrity": "sha512-BsLm5vFMRUrrLeCcRc+G0t2qOaTzpoJQLOubq2XM72eNpjF5UdU5o/5NvlNhx95XHcAvcl8OMXr4mlg/fRgUXQ==", + "log-symbols": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-3.0.0.tgz", + "integrity": "sha512-dSkNGuI7iG3mfvDzUuYZyvk5dD9ocYCYzNU6CYDE6+Xqd+gwme6Z00NS3dUh8mq/73HaEtT7m6W+yUPtU6BZnQ==", "requires": { - "buffer": "^5.5.0", - "immediate": "^3.2.3", - "level-concat-iterator": "~2.0.0", - "level-supports": "~1.0.0", - "xtend": "~4.0.0" + "chalk": "^2.4.2" } }, - "buffer": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", - "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", + "minimatch": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", + "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", "requires": { - "base64-js": "^1.3.1", - "ieee754": "^1.1.13" + "brace-expansion": "^1.1.7" } }, - "level-supports": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/level-supports/-/level-supports-1.0.1.tgz", - "integrity": "sha512-rXM7GYnW8gsl1vedTJIbzOrRv85c/2uCMpiiCzO2fndd06U/kUXEEU9evYn4zFggBOg36IsBW8LzqIpETwwQzg==", + "mkdirp": { + "version": "0.5.5", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", + "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", "requires": { - "xtend": "^4.0.2" + "minimist": "^1.2.5" + } + }, + "mocha": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/mocha/-/mocha-7.2.0.tgz", + "integrity": "sha512-O9CIypScywTVpNaRrCAgoUnJgozpIofjKUYmJhiCIJMiuYnLI6otcb1/kpW9/n/tJODHGZ7i8aLQoDVsMtOKQQ==", + "requires": { + "ansi-colors": "3.2.3", + "browser-stdout": "1.3.1", + "chokidar": "3.3.0", + "debug": "3.2.6", + "diff": "3.5.0", + "escape-string-regexp": "1.0.5", + "find-up": "3.0.0", + "glob": "7.1.3", + "growl": "1.10.5", + "he": "1.2.0", + "js-yaml": "3.13.1", + "log-symbols": "3.0.0", + "minimatch": "3.0.4", + "mkdirp": "0.5.5", + "ms": "2.1.1", + "node-environment-flags": "1.0.6", + "object.assign": "4.1.0", + "strip-json-comments": "2.0.1", + "supports-color": "6.0.0", + "which": "1.3.1", + "wide-align": "1.1.3", + "yargs": "13.3.2", + "yargs-parser": "13.1.2", + "yargs-unparser": "1.6.0" + } + }, + "ms": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", + "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==" + }, + "object.assign": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.0.tgz", + "integrity": "sha512-exHJeq6kBKj58mqGyTQ9DFvrZC/eR6OwxzoM9YRoGBqrXYonaFyGiFMuc9VZrXf7DarreEwMpurG3dd+CNyW5w==", + "requires": { + "define-properties": "^1.1.2", + "function-bind": "^1.1.1", + "has-symbols": "^1.0.0", + "object-keys": "^1.0.11" + } + }, + "p-locate": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", + "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", + "requires": { + "p-limit": "^2.0.0" + } + }, + "path-exists": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", + "integrity": "sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==" + }, + "readdirp": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.2.0.tgz", + "integrity": "sha512-crk4Qu3pmXwgxdSgGhgA/eXiJAPQiX4GMOZZMXnqKxHX7TaoL+3gQVo/WeuAiogr07DpnfjIMpXXa+PAIvwPGQ==", + "requires": { + "picomatch": "^2.0.4" + } + }, + "require-main-filename": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz", + "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==" + }, + "scrypt-js": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/scrypt-js/-/scrypt-js-2.0.4.tgz", + "integrity": "sha512-4KsaGcPnuhtCZQCxFxN3GVYIhKFPTdLd8PLC552XwbMndtD0cjRFAhDuuydXQ0h08ZfPgzqe6EKHozpuH74iDw==" + }, + "setimmediate": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.4.tgz", + "integrity": "sha512-/TjEmXQVEzdod/FFskf3o7oOAsGhHf2j1dZqRFbDzq4F3mvvxflIIi4Hd3bLQE9y/CpwqfSQam5JakI/mi3Pog==" + }, + "string-width": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", + "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", + "requires": { + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^4.0.0" + } + }, + "strip-json-comments": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", + "integrity": "sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==" + }, + "supports-color": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.0.0.tgz", + "integrity": "sha512-on9Kwidc1IUQo+bQdhi8+Tijpo0e1SS6RoGo2guUwn5vdaxw8RXOF9Vb2ws+ihWOmh4JnCJOvaziZWP1VABaLg==", + "requires": { + "has-flag": "^3.0.0" + } + }, + "uuid": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-2.0.1.tgz", + "integrity": "sha512-nWg9+Oa3qD2CQzHIP4qKUqwNfzKn8P0LtFhotaCTFchsV7ZfDhAybeip/HZVeMIpZi9JgY1E3nUlwaCmZT1sEg==" + }, + "which-module": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz", + "integrity": "sha512-B+enWhmw6cjfVC7kS8Pj9pCrKSc5txArRyaYGe088shv/FGWH+0Rjx/xPgtsWfsUtS27FkP697E4DDhgrgoc0Q==" + }, + "wide-align": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.3.tgz", + "integrity": "sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA==", + "requires": { + "string-width": "^1.0.2 || 2" + } + }, + "wrap-ansi": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-5.1.0.tgz", + "integrity": "sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q==", + "requires": { + "ansi-styles": "^3.2.0", + "string-width": "^3.0.0", + "strip-ansi": "^5.0.0" + }, + "dependencies": { + "string-width": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", + "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", + "requires": { + "emoji-regex": "^7.0.1", + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^5.1.0" + } + }, + "strip-ansi": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "requires": { + "ansi-regex": "^4.1.0" + } + } + } + }, + "y18n": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.3.tgz", + "integrity": "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==" + }, + "yargs": { + "version": "13.3.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-13.3.2.tgz", + "integrity": "sha512-AX3Zw5iPruN5ie6xGRIDgqkT+ZhnRlZMLMHAs8tg7nRruy2Nb+i5o9bwghAogtM08q1dpr2LVoS8KSTMYpWXUw==", + "requires": { + "cliui": "^5.0.0", + "find-up": "^3.0.0", + "get-caller-file": "^2.0.1", + "require-directory": "^2.1.1", + "require-main-filename": "^2.0.0", + "set-blocking": "^2.0.0", + "string-width": "^3.0.0", + "which-module": "^2.0.0", + "y18n": "^4.0.0", + "yargs-parser": "^13.1.2" + }, + "dependencies": { + "string-width": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", + "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", + "requires": { + "emoji-regex": "^7.0.1", + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^5.1.0" + } + }, + "strip-ansi": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "requires": { + "ansi-regex": "^4.1.0" + } + } + } + }, + "yargs-parser": { + "version": "13.1.2", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-13.1.2.tgz", + "integrity": "sha512-3lbsNRf/j+A4QuSZfDRA7HRSfWrzO0YjqTJd5kjAq37Zep1CEgaYmrH9Q3GwPiB9cHyd1Y1UwggGhJGoxipbzg==", + "requires": { + "camelcase": "^5.0.0", + "decamelize": "^1.2.0" + } + }, + "yargs-unparser": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/yargs-unparser/-/yargs-unparser-1.6.0.tgz", + "integrity": "sha512-W9tKgmSn0DpSatfri0nx52Joq5hVXgeLiqR/5G0sZNDoLZFOr/xjBUDcShCOGNsBnEMNo1KAMBkTej1Hm62HTw==", + "requires": { + "flat": "^4.1.0", + "lodash": "^4.17.15", + "yargs": "^13.3.0" } } } }, - "define-properties": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.4.tgz", - "integrity": "sha512-uckOqKcfaVvtBdsVkdPv3XjveQJsNQqmhXgRi8uhvWWuPYZCNlzT8qAyblUgNoXdHdjMTzAqeGjAoli8f+bzPA==", - "requires": { - "has-property-descriptors": "^1.0.0", - "object-keys": "^1.1.1" - } - }, - "delay": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/delay/-/delay-5.0.0.tgz", - "integrity": "sha512-ReEBKkIfe4ya47wlPYf/gu5ib6yUG0/Aez0JQZQz94kiWtRQvZIQbTiehsnwHvLSWJnQdhVeqYue7Id1dKr0qw==" - }, - "delayed-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", - "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==" - }, - "delegates": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", - "integrity": "sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ==", - "optional": true - }, - "depd": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", - "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==" - }, - "des.js": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/des.js/-/des.js-1.0.1.tgz", - "integrity": "sha512-Q0I4pfFrv2VPd34/vfLrFOoRmlYj3OV50i7fskps1jZWK1kApMWWT9G6RRUeYedLcBDIhnSDaUvJMb3AhUlaEA==", - "requires": { - "inherits": "^2.0.1", - "minimalistic-assert": "^1.0.0" - } - }, - "destroy": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", - "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==" - }, - "detect-indent": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/detect-indent/-/detect-indent-5.0.0.tgz", - "integrity": "sha512-rlpvsxUtM0PQvy9iZe640/IWwWYyBsTApREbA1pHOpmOUIl9MkP/U4z7vTtg4Oaojvqhxt7sdufnT0EzGaR31g==", - "dev": true - }, - "detect-libc": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-1.0.3.tgz", - "integrity": "sha512-pGjwhsmsp4kL2RTz08wcOlGN83otlqHeD/Z5T8GXZB+/YcpQ/dgo+lbU8ZsGxV0HIvqqxo9l7mqYwyYMD9bKDg==", - "optional": true - }, - "diff": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/diff/-/diff-5.0.0.tgz", - "integrity": "sha512-/VTCrvm5Z0JGty/BWHljh+BAiw3IK+2j87NGMu8Nwc/f48WoDAC395uomO9ZD117ZOBaHmkX1oyLvkVM/aIT3w==" - }, - "diffie-hellman": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/diffie-hellman/-/diffie-hellman-5.0.3.tgz", - "integrity": "sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg==", - "requires": { - "bn.js": "^4.1.0", - "miller-rabin": "^4.0.0", - "randombytes": "^2.0.0" - }, - "dependencies": { - "bn.js": { - "version": "4.12.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==" - } - } - }, - "docker-modem": { - "version": "3.0.8", - "resolved": "https://registry.npmjs.org/docker-modem/-/docker-modem-3.0.8.tgz", - "integrity": "sha512-f0ReSURdM3pcKPNS30mxOHSbaFLcknGmQjwSfmbcdOw1XWKXVhukM3NJHhr7NpY9BIyyWQb0EBo3KQvvuU5egQ==", + "eth-json-rpc-filters": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/eth-json-rpc-filters/-/eth-json-rpc-filters-4.2.2.tgz", + "integrity": "sha512-DGtqpLU7bBg63wPMWg1sCpkKCf57dJ+hj/k3zF26anXMzkmtSBDExL8IhUu7LUd34f0Zsce3PYNO2vV2GaTzaw==", "requires": { - "debug": "^4.1.1", - "readable-stream": "^3.5.0", - "split-ca": "^1.0.1", - "ssh2": "^1.11.0" + "@metamask/safe-event-emitter": "^2.0.0", + "async-mutex": "^0.2.6", + "eth-json-rpc-middleware": "^6.0.0", + "eth-query": "^2.1.2", + "json-rpc-engine": "^6.1.0", + "pify": "^5.0.0" + }, + "dependencies": { + "pify": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-5.0.0.tgz", + "integrity": "sha512-eW/gHNMlxdSP6dmG6uJip6FXN0EQBwm2clYYd8Wul42Cwu/DK8HEftzsapcNdYe2MfLiIwZqsDk2RDEsTE79hA==" + } } }, - "dockerode": { - "version": "3.3.5", - "resolved": "https://registry.npmjs.org/dockerode/-/dockerode-3.3.5.tgz", - "integrity": "sha512-/0YNa3ZDNeLr/tSckmD69+Gq+qVNhvKfAHNeZJBnp7EOP6RGKV8ORrJHkUn20So5wU+xxT7+1n5u8PjHbfjbSA==", + "eth-json-rpc-infura": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/eth-json-rpc-infura/-/eth-json-rpc-infura-5.1.0.tgz", + "integrity": "sha512-THzLye3PHUSGn1EXMhg6WTLW9uim7LQZKeKaeYsS9+wOBcamRiCQVGHa6D2/4P0oS0vSaxsBnU/J6qvn0MPdow==", "requires": { - "@balena/dockerignore": "^1.0.2", - "docker-modem": "^3.0.0", - "tar-fs": "~2.0.1" + "eth-json-rpc-middleware": "^6.0.0", + "eth-rpc-errors": "^3.0.0", + "json-rpc-engine": "^5.3.0", + "node-fetch": "^2.6.0" }, "dependencies": { - "tar-fs": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-2.0.1.tgz", - "integrity": "sha512-6tzWDMeroL87uF/+lin46k+Q+46rAJ0SyPGz7OW7wTgblI273hsBqk2C1j0/xNadNLKDTUL9BukSjB7cwgmlPA==", + "json-rpc-engine": { + "version": "5.4.0", + "resolved": "https://registry.npmjs.org/json-rpc-engine/-/json-rpc-engine-5.4.0.tgz", + "integrity": "sha512-rAffKbPoNDjuRnXkecTjnsE3xLLrb00rEkdgalINhaYVYIxDwWtvYBr9UFbhTvPB1B2qUOLoFd/cV6f4Q7mh7g==", "requires": { - "chownr": "^1.1.1", - "mkdirp-classic": "^0.5.2", - "pump": "^3.0.0", - "tar-stream": "^2.0.0" + "eth-rpc-errors": "^3.0.0", + "safe-event-emitter": "^1.0.1" } } } }, - "dom-serializer": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-2.0.0.tgz", - "integrity": "sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==", - "dev": true, - "requires": { - "domelementtype": "^2.3.0", - "domhandler": "^5.0.2", - "entities": "^4.2.0" - } - }, - "dom-walk": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/dom-walk/-/dom-walk-0.1.2.tgz", - "integrity": "sha512-6QvTW9mrGeIegrFXdtQi9pk7O/nSK6lSdXW2eqUspN5LWD7UTji2Fqw5V2YLjBpHEoU9Xl/eUWNpDeZvoyOv2w==" - }, - "domelementtype": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz", - "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==", - "dev": true - }, - "domhandler": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-5.0.3.tgz", - "integrity": "sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==", - "dev": true, - "requires": { - "domelementtype": "^2.3.0" - } - }, - "domutils": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/domutils/-/domutils-3.0.1.tgz", - "integrity": "sha512-z08c1l761iKhDFtfXO04C7kTdPBLi41zwOZl00WS8b5eiaebNpY00HKbztwBq+e3vyqWNwWF3mP9YLUeqIrF+Q==", - "dev": true, - "requires": { - "dom-serializer": "^2.0.0", - "domelementtype": "^2.3.0", - "domhandler": "^5.0.1" - } - }, - "dot-case": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/dot-case/-/dot-case-2.1.1.tgz", - "integrity": "sha512-HnM6ZlFqcajLsyudHq7LeeLDr2rFAVYtDv/hV5qchQEidSck8j9OPUsXY9KwJv/lHMtYlX4DjRQqwFYa+0r8Ug==", - "requires": { - "no-case": "^2.2.0" - } - }, - "dot-prop": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-6.0.1.tgz", - "integrity": "sha512-tE7ztYzXHIeyvc7N+hR3oi7FIbf/NIjVP9hmAt3yMXzrQ072/fpjGLx2GxNxGxUl5V73MEqYzioOMoVhGMJ5cA==", - "optional": true, - "requires": { - "is-obj": "^2.0.0" - } - }, - "dotenv": { - "version": "16.0.3", - "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.0.3.tgz", - "integrity": "sha512-7GO6HghkA5fYG9TYnNxi14/7K9f5occMlp3zXAuSxn7CKCxt9xbNWG7yF8hTCSUchlfWSe3uLmlPfigevRItzQ==" - }, - "double-ended-queue": { - "version": "2.1.0-0", - "resolved": "https://registry.npmjs.org/double-ended-queue/-/double-ended-queue-2.1.0-0.tgz", - "integrity": "sha512-+BNfZ+deCo8hMNpDqDnvT+c0XpJ5cUa6mqYq89bho2Ifze4URTqRkcwR399hWoTrTkbZ/XJYDgP6rc7pRgffEQ==", - "optional": true - }, - "dtrace-provider": { - "version": "0.8.8", - "resolved": "https://registry.npmjs.org/dtrace-provider/-/dtrace-provider-0.8.8.tgz", - "integrity": "sha512-b7Z7cNtHPhH9EJhNNbbeqTcXB8LGFFZhq1PGgEvpeHlzd36bhbdTWoE/Ba/YguqpBSlAPKnARWhVlhunCMwfxg==", - "optional": true, - "requires": { - "nan": "^2.14.0" - } - }, - "duplexer3": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/duplexer3/-/duplexer3-0.1.5.tgz", - "integrity": "sha512-1A8za6ws41LQgv9HrE/66jyC5yuSjQ3L/KOpFtoBilsAK2iA2wuS5rTt1OCzIvtS2V7nVmedsUU+DGRcjBmOYA==" - }, - "ecc-jsbn": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", - "integrity": "sha512-eh9O+hwRHNbG4BLTjEl3nw044CkGm5X6LoaCf7LPp7UU8Qrt47JYNi6nPX8xjW97TKGKm1ouctg0QSpZe9qrnw==", - "requires": { - "jsbn": "~0.1.0", - "safer-buffer": "^2.1.0" - } - }, - "ee-first": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", - "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==" - }, - "electron-to-chromium": { - "version": "1.4.284", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.284.tgz", - "integrity": "sha512-M8WEXFuKXMYMVr45fo8mq0wUrrJHheiKZf6BArTKk9ZBYCKJEOU5H8cdWgDT+qCVZf7Na4lVUaZsA+h6uA9+PA==" - }, - "elliptic": { - "version": "6.5.4", - "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.4.tgz", - "integrity": "sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ==", + "eth-json-rpc-middleware": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/eth-json-rpc-middleware/-/eth-json-rpc-middleware-6.0.0.tgz", + "integrity": "sha512-qqBfLU2Uq1Ou15Wox1s+NX05S9OcAEL4JZ04VZox2NS0U+RtCMjSxzXhLFWekdShUPZ+P8ax3zCO2xcPrp6XJQ==", "requires": { - "bn.js": "^4.11.9", - "brorand": "^1.1.0", - "hash.js": "^1.0.0", - "hmac-drbg": "^1.0.1", - "inherits": "^2.0.4", - "minimalistic-assert": "^1.0.1", - "minimalistic-crypto-utils": "^1.0.1" + "btoa": "^1.2.1", + "clone": "^2.1.1", + "eth-query": "^2.1.2", + "eth-rpc-errors": "^3.0.0", + "eth-sig-util": "^1.4.2", + "ethereumjs-util": "^5.1.2", + "json-rpc-engine": "^5.3.0", + "json-stable-stringify": "^1.0.1", + "node-fetch": "^2.6.1", + "pify": "^3.0.0", + "safe-event-emitter": "^1.0.1" }, "dependencies": { "bn.js": { "version": "4.12.0", "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==" + }, + "ethereum-cryptography": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-0.1.3.tgz", + "integrity": "sha512-w8/4x1SGGzc+tO97TASLja6SLd3fRIK2tLVcV2Gx4IB21hE19atll5Cq9o3d0ZmAYC/8aw0ipieTSiekAea4SQ==", + "requires": { + "@types/pbkdf2": "^3.0.0", + "@types/secp256k1": "^4.0.1", + "blakejs": "^1.1.0", + "browserify-aes": "^1.2.0", + "bs58check": "^2.1.2", + "create-hash": "^1.2.0", + "create-hmac": "^1.1.7", + "hash.js": "^1.1.7", + "keccak": "^3.0.0", + "pbkdf2": "^3.0.17", + "randombytes": "^2.1.0", + "safe-buffer": "^5.1.2", + "scrypt-js": "^3.0.0", + "secp256k1": "^4.0.1", + "setimmediate": "^1.0.5" + } + }, + "ethereumjs-util": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-5.2.1.tgz", + "integrity": "sha512-v3kT+7zdyCm1HIqWlLNrHGqHGLpGYIhjeHxQjnDXjLT2FyGJDsd3LWMYUo7pAFRrk86CR3nUJfhC81CCoJNNGQ==", + "requires": { + "bn.js": "^4.11.0", + "create-hash": "^1.1.2", + "elliptic": "^6.5.2", + "ethereum-cryptography": "^0.1.3", + "ethjs-util": "^0.1.3", + "rlp": "^2.0.0", + "safe-buffer": "^5.1.1" + } + }, + "json-rpc-engine": { + "version": "5.4.0", + "resolved": "https://registry.npmjs.org/json-rpc-engine/-/json-rpc-engine-5.4.0.tgz", + "integrity": "sha512-rAffKbPoNDjuRnXkecTjnsE3xLLrb00rEkdgalINhaYVYIxDwWtvYBr9UFbhTvPB1B2qUOLoFd/cV6f4Q7mh7g==", + "requires": { + "eth-rpc-errors": "^3.0.0", + "safe-event-emitter": "^1.0.1" + } } } }, - "emittery": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/emittery/-/emittery-0.4.1.tgz", - "integrity": "sha512-r4eRSeStEGf6M5SKdrQhhLK5bOwOBxQhIE3YSTnZE3GpKiLfnnhE+tPtrJE79+eDJgm39BM6LSoI8SCx4HbwlQ==", - "optional": true - }, - "emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" - }, - "encode-utf8": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/encode-utf8/-/encode-utf8-1.0.3.tgz", - "integrity": "sha512-ucAnuBEhUK4boH2HjVYG5Q2mQyPorvv0u/ocS+zhdw0S8AlHYY+GOFhP1Gio5z4icpP2ivFSvhtFjQi8+T9ppw==", - "dev": true - }, - "encodeurl": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", - "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==" - }, - "encoding-down": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/encoding-down/-/encoding-down-6.3.0.tgz", - "integrity": "sha512-QKrV0iKR6MZVJV08QY0wp1e7vF6QbhnbQhb07bwpEyuz4uZiZgPlEGdkCROuFkUwdxlFaiPIhjyarH1ee/3vhw==", - "requires": { - "abstract-leveldown": "^6.2.1", - "inherits": "^2.0.3", - "level-codec": "^9.0.0", - "level-errors": "^2.0.0" - } - }, - "end-of-stream": { - "version": "1.4.4", - "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", - "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", - "requires": { - "once": "^1.4.0" - } - }, - "end-stream": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/end-stream/-/end-stream-0.1.0.tgz", - "integrity": "sha512-Brl10T8kYnc75IepKizW6Y9liyW8ikz1B7n/xoHrJxoVSSjoqPn30sb7XVFfQERK4QfUMYRGs9dhWwtt2eu6uA==", - "optional": true, - "requires": { - "write-stream": "~0.4.3" - } - }, - "enquirer": { - "version": "2.3.6", - "resolved": "https://registry.npmjs.org/enquirer/-/enquirer-2.3.6.tgz", - "integrity": "sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg==", + "eth-lib": { + "version": "0.1.29", + "resolved": "https://registry.npmjs.org/eth-lib/-/eth-lib-0.1.29.tgz", + "integrity": "sha512-bfttrr3/7gG4E02HoWTDUcDDslN003OlOoBxk9virpAZQ1ja/jDgwkWB8QfJF7ojuEowrqy+lzp9VcJG7/k5bQ==", "requires": { - "ansi-colors": "^4.1.1" + "bn.js": "^4.11.6", + "elliptic": "^6.4.0", + "nano-json-stream-parser": "^0.1.2", + "servify": "^0.1.12", + "ws": "^3.0.0", + "xhr-request-promise": "^0.1.2" }, "dependencies": { - "ansi-colors": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.3.tgz", - "integrity": "sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==" + "bn.js": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==" + }, + "safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + }, + "ws": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/ws/-/ws-3.3.3.tgz", + "integrity": "sha512-nnWLa/NwZSt4KQJu51MYlCcSQ5g7INpOrOMt4XV8j4dqTXdmlUmSHQ8/oLC069ckre0fRsgfvsKwbTdtKLCDkA==", + "requires": { + "async-limiter": "~1.0.0", + "safe-buffer": "~5.1.0", + "ultron": "~1.1.0" + } } } }, - "entities": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/entities/-/entities-4.4.0.tgz", - "integrity": "sha512-oYp7156SP8LkeGD0GF85ad1X9Ai79WtRsZ2gxJqtBuzH+98YUV6jkHEKlZkMbcrjJjIVJNIDP/3WL9wQkoPbWA==", - "dev": true - }, - "env-paths": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz", - "integrity": "sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==" - }, - "errno": { - "version": "0.1.8", - "resolved": "https://registry.npmjs.org/errno/-/errno-0.1.8.tgz", - "integrity": "sha512-dJ6oBr5SQ1VSd9qkk7ByRgb/1SH4JZjCHSW/mr63/QcXO9zLVxvJ6Oy13nio03rxpSnVDDjFor75SjVeZWPW/A==", - "requires": { - "prr": "~1.0.1" - } - }, - "error-ex": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", - "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", - "requires": { - "is-arrayish": "^0.2.1" - } - }, - "es-abstract": { - "version": "1.20.4", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.20.4.tgz", - "integrity": "sha512-0UtvRN79eMe2L+UNEF1BwRe364sj/DXhQ/k5FmivgoSdpM90b8Jc0mDzKMGo7QS0BVbOP/bTwBKNnDc9rNzaPA==", - "requires": { - "call-bind": "^1.0.2", - "es-to-primitive": "^1.2.1", - "function-bind": "^1.1.1", - "function.prototype.name": "^1.1.5", - "get-intrinsic": "^1.1.3", - "get-symbol-description": "^1.0.0", - "has": "^1.0.3", - "has-property-descriptors": "^1.0.0", - "has-symbols": "^1.0.3", - "internal-slot": "^1.0.3", - "is-callable": "^1.2.7", - "is-negative-zero": "^2.0.2", - "is-regex": "^1.1.4", - "is-shared-array-buffer": "^1.0.2", - "is-string": "^1.0.7", - "is-weakref": "^1.0.2", - "object-inspect": "^1.12.2", - "object-keys": "^1.1.1", - "object.assign": "^4.1.4", - "regexp.prototype.flags": "^1.4.3", - "safe-regex-test": "^1.0.0", - "string.prototype.trimend": "^1.0.5", - "string.prototype.trimstart": "^1.0.5", - "unbox-primitive": "^1.0.2" - } - }, - "es-array-method-boxes-properly": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/es-array-method-boxes-properly/-/es-array-method-boxes-properly-1.0.0.tgz", - "integrity": "sha512-wd6JXUmyHmt8T5a2xreUwKcGPq6f1f+WwIJkijUqiGcJz1qqnZgP6XIK+QyIWU5lT7imeNxUll48bziG+TSYcA==" - }, - "es-to-primitive": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", - "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", - "requires": { - "is-callable": "^1.1.4", - "is-date-object": "^1.0.1", - "is-symbol": "^1.0.2" - } - }, - "es5-ext": { - "version": "0.10.62", - "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.62.tgz", - "integrity": "sha512-BHLqn0klhEpnOKSrzn/Xsz2UIW8j+cGmo9JLzr8BiUapV8hPL9+FliFqjwr9ngW7jWdnxv6eO+/LqyhJVqgrjA==", + "eth-query": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/eth-query/-/eth-query-2.1.2.tgz", + "integrity": "sha512-srES0ZcvwkR/wd5OQBRA1bIJMww1skfGS0s8wlwK3/oNP4+wnds60krvu5R1QbpRQjMmpG5OMIWro5s7gvDPsA==", "requires": { - "es6-iterator": "^2.0.3", - "es6-symbol": "^3.1.3", - "next-tick": "^1.1.0" + "json-rpc-random-id": "^1.0.0", + "xtend": "^4.0.1" } }, - "es6-iterator": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/es6-iterator/-/es6-iterator-2.0.3.tgz", - "integrity": "sha512-zw4SRzoUkd+cl+ZoE15A9o1oQd920Bb0iOJMQkQhl3jNc03YqVjAhG7scf9C5KWRU/R13Orf588uCC6525o02g==", + "eth-rpc-errors": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/eth-rpc-errors/-/eth-rpc-errors-3.0.0.tgz", + "integrity": "sha512-iPPNHPrLwUlR9xCSYm7HHQjWBasor3+KZfRvwEWxMz3ca0yqnlBeJrnyphkGIXZ4J7AMAaOLmwy4AWhnxOiLxg==", "requires": { - "d": "1", - "es5-ext": "^0.10.35", - "es6-symbol": "^3.1.1" + "fast-safe-stringify": "^2.0.6" } }, - "es6-promise": { - "version": "4.2.8", - "resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-4.2.8.tgz", - "integrity": "sha512-HJDGx5daxeIvxdBxvG2cb9g4tEvwIk3i8+nhX0yGrYmZUzbkdg8QbDevheDB8gd0//uPj4c1EQua8Q+MViT0/w==" - }, - "es6-promisify": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/es6-promisify/-/es6-promisify-5.0.0.tgz", - "integrity": "sha512-C+d6UdsYDk0lMebHNR4S2NybQMMngAOnOwYBQjTOiv0MkoJMP0Myw2mgpDLBcpfCmRLxyFqYhS/CfOENq4SJhQ==", + "eth-sig-util": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/eth-sig-util/-/eth-sig-util-1.4.2.tgz", + "integrity": "sha512-iNZ576iTOGcfllftB73cPB5AN+XUQAT/T8xzsILsghXC1o8gJUqe3RHlcDqagu+biFpYQ61KQrZZJza8eRSYqw==", "requires": { - "es6-promise": "^4.0.3" + "ethereumjs-abi": "git+https://github.com/ethereumjs/ethereumjs-abi.git", + "ethereumjs-util": "^5.1.1" + }, + "dependencies": { + "bn.js": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==" + }, + "ethereum-cryptography": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-0.1.3.tgz", + "integrity": "sha512-w8/4x1SGGzc+tO97TASLja6SLd3fRIK2tLVcV2Gx4IB21hE19atll5Cq9o3d0ZmAYC/8aw0ipieTSiekAea4SQ==", + "requires": { + "@types/pbkdf2": "^3.0.0", + "@types/secp256k1": "^4.0.1", + "blakejs": "^1.1.0", + "browserify-aes": "^1.2.0", + "bs58check": "^2.1.2", + "create-hash": "^1.2.0", + "create-hmac": "^1.1.7", + "hash.js": "^1.1.7", + "keccak": "^3.0.0", + "pbkdf2": "^3.0.17", + "randombytes": "^2.1.0", + "safe-buffer": "^5.1.2", + "scrypt-js": "^3.0.0", + "secp256k1": "^4.0.1", + "setimmediate": "^1.0.5" + } + }, + "ethereumjs-util": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-5.2.1.tgz", + "integrity": "sha512-v3kT+7zdyCm1HIqWlLNrHGqHGLpGYIhjeHxQjnDXjLT2FyGJDsd3LWMYUo7pAFRrk86CR3nUJfhC81CCoJNNGQ==", + "requires": { + "bn.js": "^4.11.0", + "create-hash": "^1.1.2", + "elliptic": "^6.5.2", + "ethereum-cryptography": "^0.1.3", + "ethjs-util": "^0.1.3", + "rlp": "^2.0.0", + "safe-buffer": "^5.1.1" + } + } } }, - "es6-symbol": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.3.tgz", - "integrity": "sha512-NJ6Yn3FuDinBaBRWl/q5X/s4koRHBrgKAu+yGI6JCBeiu3qrcbJhwT2GeR/EXVfylRk8dpQVJoLEFhK+Mu31NA==", + "ethereum-bloom-filters": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/ethereum-bloom-filters/-/ethereum-bloom-filters-1.0.10.tgz", + "integrity": "sha512-rxJ5OFN3RwjQxDcFP2Z5+Q9ho4eIdEmSc2ht0fCu8Se9nbXjZ7/031uXoUYJ87KHCOdVeiUuwSnoS7hmYAGVHA==", "requires": { - "d": "^1.0.1", - "ext": "^1.1.2" - } - }, - "escalade": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", - "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==" - }, - "escape-html": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", - "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==" - }, - "escape-latex": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/escape-latex/-/escape-latex-1.2.0.tgz", - "integrity": "sha512-nV5aVWW1K0wEiUIEdZ4erkGGH8mDxGyxSeqPzRNtWP7ataw+/olFObw7hujFWlVjNsaDFw5VZ5NzVSIqRgfTiw==" - }, - "escape-string-regexp": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", - "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==" - }, - "esm": { - "version": "3.2.25", - "resolved": "https://registry.npmjs.org/esm/-/esm-3.2.25.tgz", - "integrity": "sha512-U1suiZ2oDVWv4zPO56S0NcR5QriEahGtdN2OR6FiOG4WJvcjBVFB0qI4+eKoWFH483PKGuLuu6V8Z4T5g63UVA==" - }, - "esprima": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", - "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==" + "js-sha3": "^0.8.0" + } }, - "etag": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", - "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==" + "ethereum-common": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/ethereum-common/-/ethereum-common-0.2.0.tgz", + "integrity": "sha512-XOnAR/3rntJgbCdGhqdaLIxDLWKLmsZOGhHdBKadEr6gEnJLH52k93Ou+TUdFaPN3hJc3isBZBal3U/XZ15abA==" }, - "eth-block-tracker": { - "version": "4.4.3", - "resolved": "https://registry.npmjs.org/eth-block-tracker/-/eth-block-tracker-4.4.3.tgz", - "integrity": "sha512-A8tG4Z4iNg4mw5tP1Vung9N9IjgMNqpiMoJ/FouSFwNCGHv2X0mmOYwtQOJzki6XN7r7Tyo01S29p7b224I4jw==", + "ethereum-cryptography": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-1.1.2.tgz", + "integrity": "sha512-XDSJlg4BD+hq9N2FjvotwUET9Tfxpxc3kWGE2AqUG5vcbeunnbImVk3cj6e/xT3phdW21mE8R5IugU4fspQDcQ==", "requires": { - "@babel/plugin-transform-runtime": "^7.5.5", - "@babel/runtime": "^7.5.5", - "eth-query": "^2.1.0", - "json-rpc-random-id": "^1.0.1", - "pify": "^3.0.0", - "safe-event-emitter": "^1.0.1" + "@noble/hashes": "1.1.2", + "@noble/secp256k1": "1.6.3", + "@scure/bip32": "1.1.0", + "@scure/bip39": "1.1.0" + }, + "dependencies": { + "@noble/hashes": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.1.2.tgz", + "integrity": "sha512-KYRCASVTv6aeUi1tsF8/vpyR7zpfs3FUzy2Jqm+MU+LmUKhQ0y2FpfwqkCcxSg2ua4GALJd8k2R76WxwZGbQpA==" + }, + "@noble/secp256k1": { + "version": "1.6.3", + "resolved": "https://registry.npmjs.org/@noble/secp256k1/-/secp256k1-1.6.3.tgz", + "integrity": "sha512-T04e4iTurVy7I8Sw4+c5OSN9/RkPlo1uKxAomtxQNLq8j1uPAqnsqG1bqvY3Jv7c13gyr6dui0zmh/I3+f/JaQ==" + } } }, - "eth-ens-namehash": { - "version": "2.0.8", - "resolved": "https://registry.npmjs.org/eth-ens-namehash/-/eth-ens-namehash-2.0.8.tgz", - "integrity": "sha512-VWEI1+KJfz4Km//dadyvBBoBeSQ0MHTXPvr8UIXiLW6IanxvAV+DmlZAijZwAyggqGUfwQBeHf7tc9wzc1piSw==", + "ethereum-ens": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/ethereum-ens/-/ethereum-ens-0.8.0.tgz", + "integrity": "sha512-a8cBTF4AWw1Q1Y37V1LSCS9pRY4Mh3f8vCg5cbXCCEJ3eno1hbI/+Ccv9SZLISYpqQhaglP3Bxb/34lS4Qf7Bg==", + "dev": true, "requires": { - "idna-uts46-hx": "^2.3.1", - "js-sha3": "^0.5.7" + "bluebird": "^3.4.7", + "eth-ens-namehash": "^2.0.0", + "js-sha3": "^0.5.7", + "pako": "^1.0.4", + "underscore": "^1.8.3", + "web3": "^1.0.0-beta.34" }, "dependencies": { "js-sha3": { "version": "0.5.7", "resolved": "https://registry.npmjs.org/js-sha3/-/js-sha3-0.5.7.tgz", - "integrity": "sha512-GII20kjaPX0zJ8wzkTbNDYMY7msuZcTWk8S5UOh6806Jq/wz1J8/bnr8uGU0DAUmYDjj2Mr4X1cW8v/GLYnR+g==" + "integrity": "sha512-GII20kjaPX0zJ8wzkTbNDYMY7msuZcTWk8S5UOh6806Jq/wz1J8/bnr8uGU0DAUmYDjj2Mr4X1cW8v/GLYnR+g==", + "dev": true } } }, - "eth-gas-reporter": { - "version": "0.2.25", - "resolved": "https://registry.npmjs.org/eth-gas-reporter/-/eth-gas-reporter-0.2.25.tgz", - "integrity": "sha512-1fRgyE4xUB8SoqLgN3eDfpDfwEfRxh2Sz1b7wzFbyQA+9TekMmvSjjoRu9SKcSVyK+vLkLIsVbJDsTWjw195OQ==", + "ethereum-protocol": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/ethereum-protocol/-/ethereum-protocol-1.0.1.tgz", + "integrity": "sha512-3KLX1mHuEsBW0dKG+c6EOJS1NBNqdCICvZW9sInmZTt5aY0oxmHVggYRE0lJu1tcnMD1K+AKHdLi6U43Awm1Vg==" + }, + "ethereum-waffle": { + "version": "4.0.10", + "resolved": "https://registry.npmjs.org/ethereum-waffle/-/ethereum-waffle-4.0.10.tgz", + "integrity": "sha512-iw9z1otq7qNkGDNcMoeNeLIATF9yKl1M8AIeu42ElfNBplq0e+5PeasQmm8ybY/elkZ1XyRO0JBQxQdVRb8bqQ==", + "dev": true, "requires": { - "@ethersproject/abi": "^5.0.0-beta.146", - "@solidity-parser/parser": "^0.14.0", - "cli-table3": "^0.5.0", - "colors": "1.4.0", - "ethereum-cryptography": "^1.0.3", - "ethers": "^4.0.40", - "fs-readdir-recursive": "^1.1.0", - "lodash": "^4.17.14", - "markdown-table": "^1.1.3", - "mocha": "^7.1.1", - "req-cwd": "^2.0.0", - "request": "^2.88.0", - "request-promise-native": "^1.0.5", - "sha1": "^1.1.1", - "sync-request": "^6.0.0" + "@ethereum-waffle/chai": "4.0.10", + "@ethereum-waffle/compiler": "4.0.3", + "@ethereum-waffle/mock-contract": "4.0.4", + "@ethereum-waffle/provider": "4.0.5", + "solc": "0.8.15", + "typechain": "^8.0.0" }, "dependencies": { - "ansi-colors": { - "version": "3.2.3", - "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-3.2.3.tgz", - "integrity": "sha512-LEHHyuhlPY3TmuUYMh2oz89lTShfvgbmzaBcxve9t/9Wuy7Dwf4yoAKcND7KFT1HAQfqZ12qtc+DUrBMeKF9nw==" + "commander": { + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-8.3.0.tgz", + "integrity": "sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==", + "dev": true }, - "ansi-regex": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.1.tgz", - "integrity": "sha512-ILlv4k/3f6vfQ4OoP2AGvirOktlQ98ZEL1k9FaQjxa3L1abBgbuTDAdPOpvbGncC0BTVQrl+OM8xZGK6tWXt7g==" + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true }, - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "solc": { + "version": "0.8.15", + "resolved": "https://registry.npmjs.org/solc/-/solc-0.8.15.tgz", + "integrity": "sha512-Riv0GNHNk/SddN/JyEuFKwbcWcEeho15iyupTSHw5Np6WuXA5D8kEHbyzDHi6sqmvLzu2l+8b1YmL8Ytple+8w==", + "dev": true, "requires": { - "color-convert": "^1.9.0" + "command-exists": "^1.2.8", + "commander": "^8.1.0", + "follow-redirects": "^1.12.1", + "js-sha3": "0.8.0", + "memorystream": "^0.3.1", + "semver": "^5.5.0", + "tmp": "0.0.33" + } + } + } + }, + "ethereumjs-abi": { + "version": "git+ssh://git@github.com/ethereumjs/ethereumjs-abi.git#ee3994657fa7a427238e6ba92a84d0b529bbcde0", + "from": "ethereumjs-abi@0.6.8", + "requires": { + "bn.js": "^4.11.8", + "ethereumjs-util": "^6.0.0" + }, + "dependencies": { + "@types/bn.js": { + "version": "4.11.6", + "resolved": "https://registry.npmjs.org/@types/bn.js/-/bn.js-4.11.6.tgz", + "integrity": "sha512-pqr857jrp2kPuO9uRjZ3PwnJTjoQy+fcdxvBTvHm6dkmEL9q+hDD/2j/0ELOBPtPnS8LjCX0gI9nbl8lVkadpg==", + "requires": { + "@types/node": "*" } }, - "argparse": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", - "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "bn.js": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==" + }, + "ethereum-cryptography": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-0.1.3.tgz", + "integrity": "sha512-w8/4x1SGGzc+tO97TASLja6SLd3fRIK2tLVcV2Gx4IB21hE19atll5Cq9o3d0ZmAYC/8aw0ipieTSiekAea4SQ==", "requires": { - "sprintf-js": "~1.0.2" + "@types/pbkdf2": "^3.0.0", + "@types/secp256k1": "^4.0.1", + "blakejs": "^1.1.0", + "browserify-aes": "^1.2.0", + "bs58check": "^2.1.2", + "create-hash": "^1.2.0", + "create-hmac": "^1.1.7", + "hash.js": "^1.1.7", + "keccak": "^3.0.0", + "pbkdf2": "^3.0.17", + "randombytes": "^2.1.0", + "safe-buffer": "^5.1.2", + "scrypt-js": "^3.0.0", + "secp256k1": "^4.0.1", + "setimmediate": "^1.0.5" } }, + "ethereumjs-util": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-6.2.1.tgz", + "integrity": "sha512-W2Ktez4L01Vexijrm5EB6w7dg4n/TgpoYU4avuT5T3Vmnw/eCRtiBrJfQYS/DCSvDIOLn2k57GcHdeBcgVxAqw==", + "requires": { + "@types/bn.js": "^4.11.3", + "bn.js": "^4.11.0", + "create-hash": "^1.1.2", + "elliptic": "^6.5.2", + "ethereum-cryptography": "^0.1.3", + "ethjs-util": "0.1.6", + "rlp": "^2.2.3" + } + } + } + }, + "ethereumjs-account": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/ethereumjs-account/-/ethereumjs-account-2.0.5.tgz", + "integrity": "sha512-bgDojnXGjhMwo6eXQC0bY6UK2liSFUSMwwylOmQvZbSl/D7NXQ3+vrGO46ZeOgjGfxXmgIeVNDIiHw7fNZM4VA==", + "requires": { + "ethereumjs-util": "^5.0.0", + "rlp": "^2.0.0", + "safe-buffer": "^5.1.1" + }, + "dependencies": { "bn.js": { "version": "4.12.0", "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==" }, - "brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "ethereum-cryptography": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-0.1.3.tgz", + "integrity": "sha512-w8/4x1SGGzc+tO97TASLja6SLd3fRIK2tLVcV2Gx4IB21hE19atll5Cq9o3d0ZmAYC/8aw0ipieTSiekAea4SQ==", "requires": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" + "@types/pbkdf2": "^3.0.0", + "@types/secp256k1": "^4.0.1", + "blakejs": "^1.1.0", + "browserify-aes": "^1.2.0", + "bs58check": "^2.1.2", + "create-hash": "^1.2.0", + "create-hmac": "^1.1.7", + "hash.js": "^1.1.7", + "keccak": "^3.0.0", + "pbkdf2": "^3.0.17", + "randombytes": "^2.1.0", + "safe-buffer": "^5.1.2", + "scrypt-js": "^3.0.0", + "secp256k1": "^4.0.1", + "setimmediate": "^1.0.5" } }, - "camelcase": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", - "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==" + "ethereumjs-util": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-5.2.1.tgz", + "integrity": "sha512-v3kT+7zdyCm1HIqWlLNrHGqHGLpGYIhjeHxQjnDXjLT2FyGJDsd3LWMYUo7pAFRrk86CR3nUJfhC81CCoJNNGQ==", + "requires": { + "bn.js": "^4.11.0", + "create-hash": "^1.1.2", + "elliptic": "^6.5.2", + "ethereum-cryptography": "^0.1.3", + "ethjs-util": "^0.1.3", + "rlp": "^2.0.0", + "safe-buffer": "^5.1.1" + } + } + } + }, + "ethereumjs-block": { + "version": "1.7.1", + "resolved": "https://registry.npmjs.org/ethereumjs-block/-/ethereumjs-block-1.7.1.tgz", + "integrity": "sha512-B+sSdtqm78fmKkBq78/QLKJbu/4Ts4P2KFISdgcuZUPDm9x+N7qgBPIIFUGbaakQh8bzuquiRVbdmvPKqbILRg==", + "requires": { + "async": "^2.0.1", + "ethereum-common": "0.2.0", + "ethereumjs-tx": "^1.2.2", + "ethereumjs-util": "^5.0.0", + "merkle-patricia-tree": "^2.1.2" + }, + "dependencies": { + "abstract-leveldown": { + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/abstract-leveldown/-/abstract-leveldown-2.6.3.tgz", + "integrity": "sha512-2++wDf/DYqkPR3o5tbfdhF96EfMApo1GpPfzOsR/ZYXdkSmELlvOOEAl9iKkRsktMPHdGjO4rtkBpf2I7TiTeA==", + "requires": { + "xtend": "~4.0.0" + } }, - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "async": { + "version": "2.6.4", + "resolved": "https://registry.npmjs.org/async/-/async-2.6.4.tgz", + "integrity": "sha512-mzo5dfJYwAn29PeiJ0zvwTo04zj8HDJj0Mn8TD7sno7q12prdbnasKJHhkm2c1LgrhlJ0teaea8860oxi51mGA==", "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "dependencies": { - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "requires": { - "has-flag": "^3.0.0" - } - } + "lodash": "^4.17.14" } }, - "chokidar": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.3.0.tgz", - "integrity": "sha512-dGmKLDdT3Gdl7fBUe8XK+gAtGmzy5Fn0XkkWQuYxGIgWVPPse2CxFA5mtrlD0TOHaHjEUqkWNyP1XdHoJES/4A==", + "bn.js": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==" + }, + "deferred-leveldown": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/deferred-leveldown/-/deferred-leveldown-1.2.2.tgz", + "integrity": "sha512-uukrWD2bguRtXilKt6cAWKyoXrTSMo5m7crUdLfWQmu8kIm88w3QZoUL+6nhpfKVmhHANER6Re3sKoNoZ3IKMA==", "requires": { - "anymatch": "~3.1.1", - "braces": "~3.0.2", - "fsevents": "~2.1.1", - "glob-parent": "~5.1.0", - "is-binary-path": "~2.1.0", - "is-glob": "~4.0.1", - "normalize-path": "~3.0.0", - "readdirp": "~3.2.0" + "abstract-leveldown": "~2.6.0" } }, - "cli-table3": { - "version": "0.5.1", - "resolved": "https://registry.npmjs.org/cli-table3/-/cli-table3-0.5.1.tgz", - "integrity": "sha512-7Qg2Jrep1S/+Q3EceiZtQcDPWxhAvBw+ERf1162v4sikJrvojMHFqXt8QIVha8UlH9rgU0BeWPytZ9/TzYqlUw==", + "ethereum-cryptography": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-0.1.3.tgz", + "integrity": "sha512-w8/4x1SGGzc+tO97TASLja6SLd3fRIK2tLVcV2Gx4IB21hE19atll5Cq9o3d0ZmAYC/8aw0ipieTSiekAea4SQ==", "requires": { - "colors": "^1.1.2", - "object-assign": "^4.1.0", - "string-width": "^2.1.1" + "@types/pbkdf2": "^3.0.0", + "@types/secp256k1": "^4.0.1", + "blakejs": "^1.1.0", + "browserify-aes": "^1.2.0", + "bs58check": "^2.1.2", + "create-hash": "^1.2.0", + "create-hmac": "^1.1.7", + "hash.js": "^1.1.7", + "keccak": "^3.0.0", + "pbkdf2": "^3.0.17", + "randombytes": "^2.1.0", + "safe-buffer": "^5.1.2", + "scrypt-js": "^3.0.0", + "secp256k1": "^4.0.1", + "setimmediate": "^1.0.5" } }, - "cliui": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-5.0.0.tgz", - "integrity": "sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA==", + "ethereumjs-tx": { + "version": "1.3.7", + "resolved": "https://registry.npmjs.org/ethereumjs-tx/-/ethereumjs-tx-1.3.7.tgz", + "integrity": "sha512-wvLMxzt1RPhAQ9Yi3/HKZTn0FZYpnsmQdbKYfUUpi4j1SEIcbkd9tndVjcPrufY3V7j2IebOpC00Zp2P/Ay2kA==", "requires": { - "string-width": "^3.1.0", - "strip-ansi": "^5.2.0", - "wrap-ansi": "^5.1.0" + "ethereum-common": "^0.0.18", + "ethereumjs-util": "^5.0.0" }, "dependencies": { - "string-width": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", - "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", - "requires": { - "emoji-regex": "^7.0.1", - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^5.1.0" - } - }, - "strip-ansi": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", - "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", - "requires": { - "ansi-regex": "^4.1.0" - } + "ethereum-common": { + "version": "0.0.18", + "resolved": "https://registry.npmjs.org/ethereum-common/-/ethereum-common-0.0.18.tgz", + "integrity": "sha512-EoltVQTRNg2Uy4o84qpa2aXymXDJhxm7eos/ACOg0DG4baAbMjhbdAEsx9GeE8sC3XCxnYvrrzZDH8D8MtA2iQ==" } } }, - "color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "ethereumjs-util": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-5.2.1.tgz", + "integrity": "sha512-v3kT+7zdyCm1HIqWlLNrHGqHGLpGYIhjeHxQjnDXjLT2FyGJDsd3LWMYUo7pAFRrk86CR3nUJfhC81CCoJNNGQ==", "requires": { - "color-name": "1.1.3" + "bn.js": "^4.11.0", + "create-hash": "^1.1.2", + "elliptic": "^6.5.2", + "ethereum-cryptography": "^0.1.3", + "ethjs-util": "^0.1.3", + "rlp": "^2.0.0", + "safe-buffer": "^5.1.1" } }, - "color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==" + "level-codec": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/level-codec/-/level-codec-7.0.1.tgz", + "integrity": "sha512-Ua/R9B9r3RasXdRmOtd+t9TCOEIIlts+TN/7XTT2unhDaL6sJn83S3rUyljbr6lVtw49N3/yA0HHjpV6Kzb2aQ==" }, - "debug": { - "version": "3.2.6", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", - "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", + "level-errors": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/level-errors/-/level-errors-1.0.5.tgz", + "integrity": "sha512-/cLUpQduF6bNrWuAC4pwtUKA5t669pCsCi2XbmojG2tFeOr9j6ShtdDCtFFQO1DRt+EVZhx9gPzP9G2bUaG4ig==", "requires": { - "ms": "^2.1.1" + "errno": "~0.1.1" } }, - "decamelize": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", - "integrity": "sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==" - }, - "diff": { - "version": "3.5.0", - "resolved": "https://registry.npmjs.org/diff/-/diff-3.5.0.tgz", - "integrity": "sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA==" - }, - "emoji-regex": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", - "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==" - }, - "escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==" + "level-iterator-stream": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/level-iterator-stream/-/level-iterator-stream-1.3.1.tgz", + "integrity": "sha512-1qua0RHNtr4nrZBgYlpV0qHHeHpcRRWTxEZJ8xsemoHAXNL5tbooh4tPEEqIqsbWCAJBmUmkwYK/sW5OrFjWWw==", + "requires": { + "inherits": "^2.0.1", + "level-errors": "^1.0.3", + "readable-stream": "^1.0.33", + "xtend": "^4.0.0" + }, + "dependencies": { + "isarray": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", + "integrity": "sha512-D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ==" + }, + "readable-stream": { + "version": "1.1.14", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz", + "integrity": "sha512-+MeVjFf4L44XUkhM1eYbD8fyEsxcV81pqMSR5gblfcLCHfZvbrqy4/qYHE+/R5HoBUT11WV5O08Cr1n3YXkWVQ==", + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.1", + "isarray": "0.0.1", + "string_decoder": "~0.10.x" + } + }, + "string_decoder": { + "version": "0.10.31", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", + "integrity": "sha512-ev2QzSzWPYmy9GuqfIVildA4OdcGLeFZQrq5ys6RtiuF+RQQiZWr8TZNyAcuVXyQRYfEO+MsoB/1BuQVhOJuoQ==" + } + } }, - "ethers": { - "version": "4.0.49", - "resolved": "https://registry.npmjs.org/ethers/-/ethers-4.0.49.tgz", - "integrity": "sha512-kPltTvWiyu+OktYy1IStSO16i2e7cS9D9OxZ81q2UUaiNPVrm/RTcbxamCXF9VUSKzJIdJV68EAIhTEVBalRWg==", + "level-ws": { + "version": "0.0.0", + "resolved": "https://registry.npmjs.org/level-ws/-/level-ws-0.0.0.tgz", + "integrity": "sha512-XUTaO/+Db51Uiyp/t7fCMGVFOTdtLS/NIACxE/GHsij15mKzxksZifKVjlXDF41JMUP/oM1Oc4YNGdKnc3dVLw==", "requires": { - "aes-js": "3.0.0", - "bn.js": "^4.11.9", - "elliptic": "6.5.4", - "hash.js": "1.1.3", - "js-sha3": "0.5.7", - "scrypt-js": "2.0.4", - "setimmediate": "1.0.4", - "uuid": "2.0.1", - "xmlhttprequest": "1.8.0" + "readable-stream": "~1.0.15", + "xtend": "~2.1.1" + }, + "dependencies": { + "isarray": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", + "integrity": "sha512-D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ==" + }, + "readable-stream": { + "version": "1.0.34", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz", + "integrity": "sha512-ok1qVCJuRkNmvebYikljxJA/UEsKwLl2nI1OmaqAu4/UE+h0wKCHok4XkL/gvi39OacXvw59RJUOFUkDib2rHg==", + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.1", + "isarray": "0.0.1", + "string_decoder": "~0.10.x" + } + }, + "string_decoder": { + "version": "0.10.31", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", + "integrity": "sha512-ev2QzSzWPYmy9GuqfIVildA4OdcGLeFZQrq5ys6RtiuF+RQQiZWr8TZNyAcuVXyQRYfEO+MsoB/1BuQVhOJuoQ==" + }, + "xtend": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-2.1.2.tgz", + "integrity": "sha512-vMNKzr2rHP9Dp/e1NQFnLQlwlhp9L/LfvnsVdHxN1f+uggyVI3i08uD14GPvCToPkdsRfyPqIyYGmIk58V98ZQ==", + "requires": { + "object-keys": "~0.4.0" + } + } + } + }, + "levelup": { + "version": "1.3.9", + "resolved": "https://registry.npmjs.org/levelup/-/levelup-1.3.9.tgz", + "integrity": "sha512-VVGHfKIlmw8w1XqpGOAGwq6sZm2WwWLmlDcULkKWQXEA5EopA8OBNJ2Ck2v6bdk8HeEZSbCSEgzXadyQFm76sQ==", + "requires": { + "deferred-leveldown": "~1.2.1", + "level-codec": "~7.0.0", + "level-errors": "~1.0.3", + "level-iterator-stream": "~1.3.0", + "prr": "~1.0.1", + "semver": "~5.4.1", + "xtend": "~4.0.0" } }, - "find-up": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", - "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", + "memdown": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/memdown/-/memdown-1.4.1.tgz", + "integrity": "sha512-iVrGHZB8i4OQfM155xx8akvG9FIj+ht14DX5CQkCTG4EHzZ3d3sgckIf/Lm9ivZalEsFuEVnWv2B2WZvbrro2w==", "requires": { - "locate-path": "^3.0.0" + "abstract-leveldown": "~2.7.1", + "functional-red-black-tree": "^1.0.1", + "immediate": "^3.2.3", + "inherits": "~2.0.1", + "ltgt": "~2.2.0", + "safe-buffer": "~5.1.1" + }, + "dependencies": { + "abstract-leveldown": { + "version": "2.7.2", + "resolved": "https://registry.npmjs.org/abstract-leveldown/-/abstract-leveldown-2.7.2.tgz", + "integrity": "sha512-+OVvxH2rHVEhWLdbudP6p0+dNMXu8JA1CbhP19T8paTYAcX7oJ4OVjT+ZUVpv7mITxXHqDMej+GdqXBmXkw09w==", + "requires": { + "xtend": "~4.0.0" + } + } } }, - "flat": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/flat/-/flat-4.1.1.tgz", - "integrity": "sha512-FmTtBsHskrU6FJ2VxCnsDb84wu9zhmO3cUX2kGFb5tuwhfXxGciiT0oRY+cck35QmG+NmGh5eLz6lLCpWTqwpA==", + "merkle-patricia-tree": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/merkle-patricia-tree/-/merkle-patricia-tree-2.3.2.tgz", + "integrity": "sha512-81PW5m8oz/pz3GvsAwbauj7Y00rqm81Tzad77tHBwU7pIAtN+TJnMSOJhxBKflSVYhptMMb9RskhqHqrSm1V+g==", "requires": { - "is-buffer": "~2.0.3" + "async": "^1.4.2", + "ethereumjs-util": "^5.0.0", + "level-ws": "0.0.0", + "levelup": "^1.2.1", + "memdown": "^1.0.0", + "readable-stream": "^2.0.0", + "rlp": "^2.0.0", + "semaphore": ">=1.0.1" + }, + "dependencies": { + "async": { + "version": "1.5.2", + "resolved": "https://registry.npmjs.org/async/-/async-1.5.2.tgz", + "integrity": "sha512-nSVgobk4rv61R9PUSDtYt7mPVB2olxNR5RWJcAsH676/ef11bUZwvu7+RGYrYauVdDPcO519v68wRhXQtxsV9w==" + } } }, - "fsevents": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.1.3.tgz", - "integrity": "sha512-Auw9a4AxqWpa9GUfj370BMPzzyncfBABW8Mab7BGWBYDj4Isgq+cDKtx0i6u9jcX9pQDnswsaaOTgTmA5pEjuQ==", - "optional": true + "object-keys": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-0.4.0.tgz", + "integrity": "sha512-ncrLw+X55z7bkl5PnUvHwFK9FcGuFYo9gtjws2XtSzL+aZ8tm830P60WJ0dSmFVaSalWieW5MD7kEdnXda9yJw==" }, - "glob": { - "version": "7.1.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.3.tgz", - "integrity": "sha512-vcfuiIxogLV4DlGBHIUOwI0IbrJ8HWPc4MU7HzviGeNho/UJDfi6B5p3sHeWIQ0KGIU0Jpxi5ZHxemQfLkkAwQ==", + "readable-stream": { + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" } }, - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==" + "safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" }, - "hash.js": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.3.tgz", - "integrity": "sha512-/UETyP0W22QILqS+6HowevwhEFJ3MBJnwTf75Qob9Wz9t0DPuisL8kW8YZMK62dHAKE1c1p+gY1TtOLY+USEHA==", + "semver": { + "version": "5.4.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.4.1.tgz", + "integrity": "sha512-WfG/X9+oATh81XtllIo/I8gOiY9EXRdv1cQdyykeXK17YcUW3EXUAi2To4pcH6nZtJPr7ZOpM5OMyWJZm+8Rsg==" + }, + "string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", "requires": { - "inherits": "^2.0.3", - "minimalistic-assert": "^1.0.0" + "safe-buffer": "~5.1.0" + } + } + } + }, + "ethereumjs-common": { + "version": "1.5.2", + "resolved": "https://registry.npmjs.org/ethereumjs-common/-/ethereumjs-common-1.5.2.tgz", + "integrity": "sha512-hTfZjwGX52GS2jcVO6E2sx4YuFnf0Fhp5ylo4pEPhEffNln7vS59Hr5sLnp3/QCazFLluuBZ+FZ6J5HTp0EqCA==" + }, + "ethereumjs-tx": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ethereumjs-tx/-/ethereumjs-tx-2.1.2.tgz", + "integrity": "sha512-zZEK1onCeiORb0wyCXUvg94Ve5It/K6GD1K+26KfFKodiBiS6d9lfCXlUKGBBdQ+bv7Day+JK0tj1K+BeNFRAw==", + "requires": { + "ethereumjs-common": "^1.5.0", + "ethereumjs-util": "^6.0.0" + }, + "dependencies": { + "@types/bn.js": { + "version": "4.11.6", + "resolved": "https://registry.npmjs.org/@types/bn.js/-/bn.js-4.11.6.tgz", + "integrity": "sha512-pqr857jrp2kPuO9uRjZ3PwnJTjoQy+fcdxvBTvHm6dkmEL9q+hDD/2j/0ELOBPtPnS8LjCX0gI9nbl8lVkadpg==", + "requires": { + "@types/node": "*" } }, - "is-fullwidth-code-point": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha512-VHskAKYM8RfSFXwee5t5cbN5PZeq1Wrh6qd5bkyiXIf6UQcN6w/A0eXM9r6t8d+GYOh+o6ZhiEnb88LN/Y8m2w==" - }, - "js-sha3": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/js-sha3/-/js-sha3-0.5.7.tgz", - "integrity": "sha512-GII20kjaPX0zJ8wzkTbNDYMY7msuZcTWk8S5UOh6806Jq/wz1J8/bnr8uGU0DAUmYDjj2Mr4X1cW8v/GLYnR+g==" + "bn.js": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==" }, - "js-yaml": { - "version": "3.13.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.13.1.tgz", - "integrity": "sha512-YfbcO7jXDdyj0DGxYVSlSeQNHbD7XPWvrVWeVUujrQEoZzWJIRrCPoyk6kL6IAjAG2IolMK4T0hNUe0HOUs5Jw==", + "ethereum-cryptography": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-0.1.3.tgz", + "integrity": "sha512-w8/4x1SGGzc+tO97TASLja6SLd3fRIK2tLVcV2Gx4IB21hE19atll5Cq9o3d0ZmAYC/8aw0ipieTSiekAea4SQ==", "requires": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" + "@types/pbkdf2": "^3.0.0", + "@types/secp256k1": "^4.0.1", + "blakejs": "^1.1.0", + "browserify-aes": "^1.2.0", + "bs58check": "^2.1.2", + "create-hash": "^1.2.0", + "create-hmac": "^1.1.7", + "hash.js": "^1.1.7", + "keccak": "^3.0.0", + "pbkdf2": "^3.0.17", + "randombytes": "^2.1.0", + "safe-buffer": "^5.1.2", + "scrypt-js": "^3.0.0", + "secp256k1": "^4.0.1", + "setimmediate": "^1.0.5" } }, - "locate-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", - "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", + "ethereumjs-util": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-6.2.1.tgz", + "integrity": "sha512-W2Ktez4L01Vexijrm5EB6w7dg4n/TgpoYU4avuT5T3Vmnw/eCRtiBrJfQYS/DCSvDIOLn2k57GcHdeBcgVxAqw==", "requires": { - "p-locate": "^3.0.0", - "path-exists": "^3.0.0" + "@types/bn.js": "^4.11.3", + "bn.js": "^4.11.0", + "create-hash": "^1.1.2", + "elliptic": "^6.5.2", + "ethereum-cryptography": "^0.1.3", + "ethjs-util": "0.1.6", + "rlp": "^2.2.3" } - }, - "log-symbols": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-3.0.0.tgz", - "integrity": "sha512-dSkNGuI7iG3mfvDzUuYZyvk5dD9ocYCYzNU6CYDE6+Xqd+gwme6Z00NS3dUh8mq/73HaEtT7m6W+yUPtU6BZnQ==", + } + } + }, + "ethereumjs-util": { + "version": "7.1.5", + "resolved": "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-7.1.5.tgz", + "integrity": "sha512-SDl5kKrQAudFBUe5OJM9Ac6WmMyYmXX/6sTmLZ3ffG2eY6ZIGBes3pEDxNN6V72WyOw4CPD5RomKdsa8DAAwLg==", + "requires": { + "@types/bn.js": "^5.1.0", + "bn.js": "^5.1.2", + "create-hash": "^1.1.2", + "ethereum-cryptography": "^0.1.3", + "rlp": "^2.2.4" + }, + "dependencies": { + "ethereum-cryptography": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-0.1.3.tgz", + "integrity": "sha512-w8/4x1SGGzc+tO97TASLja6SLd3fRIK2tLVcV2Gx4IB21hE19atll5Cq9o3d0ZmAYC/8aw0ipieTSiekAea4SQ==", "requires": { - "chalk": "^2.4.2" + "@types/pbkdf2": "^3.0.0", + "@types/secp256k1": "^4.0.1", + "blakejs": "^1.1.0", + "browserify-aes": "^1.2.0", + "bs58check": "^2.1.2", + "create-hash": "^1.2.0", + "create-hmac": "^1.1.7", + "hash.js": "^1.1.7", + "keccak": "^3.0.0", + "pbkdf2": "^3.0.17", + "randombytes": "^2.1.0", + "safe-buffer": "^5.1.2", + "scrypt-js": "^3.0.0", + "secp256k1": "^4.0.1", + "setimmediate": "^1.0.5" } - }, - "minimatch": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", - "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + } + } + }, + "ethereumjs-vm": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/ethereumjs-vm/-/ethereumjs-vm-2.6.0.tgz", + "integrity": "sha512-r/XIUik/ynGbxS3y+mvGnbOKnuLo40V5Mj1J25+HEO63aWYREIqvWeRO/hnROlMBE5WoniQmPmhiaN0ctiHaXw==", + "requires": { + "async": "^2.1.2", + "async-eventemitter": "^0.2.2", + "ethereumjs-account": "^2.0.3", + "ethereumjs-block": "~2.2.0", + "ethereumjs-common": "^1.1.0", + "ethereumjs-util": "^6.0.0", + "fake-merkle-patricia-tree": "^1.0.1", + "functional-red-black-tree": "^1.0.1", + "merkle-patricia-tree": "^2.3.2", + "rustbn.js": "~0.2.0", + "safe-buffer": "^5.1.1" + }, + "dependencies": { + "@types/bn.js": { + "version": "4.11.6", + "resolved": "https://registry.npmjs.org/@types/bn.js/-/bn.js-4.11.6.tgz", + "integrity": "sha512-pqr857jrp2kPuO9uRjZ3PwnJTjoQy+fcdxvBTvHm6dkmEL9q+hDD/2j/0ELOBPtPnS8LjCX0gI9nbl8lVkadpg==", "requires": { - "brace-expansion": "^1.1.7" + "@types/node": "*" } }, - "mkdirp": { - "version": "0.5.5", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", - "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", + "abstract-leveldown": { + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/abstract-leveldown/-/abstract-leveldown-2.6.3.tgz", + "integrity": "sha512-2++wDf/DYqkPR3o5tbfdhF96EfMApo1GpPfzOsR/ZYXdkSmELlvOOEAl9iKkRsktMPHdGjO4rtkBpf2I7TiTeA==", "requires": { - "minimist": "^1.2.5" + "xtend": "~4.0.0" } }, - "mocha": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/mocha/-/mocha-7.2.0.tgz", - "integrity": "sha512-O9CIypScywTVpNaRrCAgoUnJgozpIofjKUYmJhiCIJMiuYnLI6otcb1/kpW9/n/tJODHGZ7i8aLQoDVsMtOKQQ==", + "async": { + "version": "2.6.4", + "resolved": "https://registry.npmjs.org/async/-/async-2.6.4.tgz", + "integrity": "sha512-mzo5dfJYwAn29PeiJ0zvwTo04zj8HDJj0Mn8TD7sno7q12prdbnasKJHhkm2c1LgrhlJ0teaea8860oxi51mGA==", "requires": { - "ansi-colors": "3.2.3", - "browser-stdout": "1.3.1", - "chokidar": "3.3.0", - "debug": "3.2.6", - "diff": "3.5.0", - "escape-string-regexp": "1.0.5", - "find-up": "3.0.0", - "glob": "7.1.3", - "growl": "1.10.5", - "he": "1.2.0", - "js-yaml": "3.13.1", - "log-symbols": "3.0.0", - "minimatch": "3.0.4", - "mkdirp": "0.5.5", - "ms": "2.1.1", - "node-environment-flags": "1.0.6", - "object.assign": "4.1.0", - "strip-json-comments": "2.0.1", - "supports-color": "6.0.0", - "which": "1.3.1", - "wide-align": "1.1.3", - "yargs": "13.3.2", - "yargs-parser": "13.1.2", - "yargs-unparser": "1.6.0" + "lodash": "^4.17.14" } }, - "ms": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", - "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==" + "bn.js": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==" }, - "object.assign": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.0.tgz", - "integrity": "sha512-exHJeq6kBKj58mqGyTQ9DFvrZC/eR6OwxzoM9YRoGBqrXYonaFyGiFMuc9VZrXf7DarreEwMpurG3dd+CNyW5w==", + "deferred-leveldown": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/deferred-leveldown/-/deferred-leveldown-1.2.2.tgz", + "integrity": "sha512-uukrWD2bguRtXilKt6cAWKyoXrTSMo5m7crUdLfWQmu8kIm88w3QZoUL+6nhpfKVmhHANER6Re3sKoNoZ3IKMA==", "requires": { - "define-properties": "^1.1.2", - "function-bind": "^1.1.1", - "has-symbols": "^1.0.0", - "object-keys": "^1.0.11" + "abstract-leveldown": "~2.6.0" } }, - "p-locate": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", - "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", + "ethereum-cryptography": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-0.1.3.tgz", + "integrity": "sha512-w8/4x1SGGzc+tO97TASLja6SLd3fRIK2tLVcV2Gx4IB21hE19atll5Cq9o3d0ZmAYC/8aw0ipieTSiekAea4SQ==", "requires": { - "p-limit": "^2.0.0" + "@types/pbkdf2": "^3.0.0", + "@types/secp256k1": "^4.0.1", + "blakejs": "^1.1.0", + "browserify-aes": "^1.2.0", + "bs58check": "^2.1.2", + "create-hash": "^1.2.0", + "create-hmac": "^1.1.7", + "hash.js": "^1.1.7", + "keccak": "^3.0.0", + "pbkdf2": "^3.0.17", + "randombytes": "^2.1.0", + "safe-buffer": "^5.1.2", + "scrypt-js": "^3.0.0", + "secp256k1": "^4.0.1", + "setimmediate": "^1.0.5" } }, - "path-exists": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", - "integrity": "sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==" - }, - "readdirp": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.2.0.tgz", - "integrity": "sha512-crk4Qu3pmXwgxdSgGhgA/eXiJAPQiX4GMOZZMXnqKxHX7TaoL+3gQVo/WeuAiogr07DpnfjIMpXXa+PAIvwPGQ==", + "ethereumjs-block": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/ethereumjs-block/-/ethereumjs-block-2.2.2.tgz", + "integrity": "sha512-2p49ifhek3h2zeg/+da6XpdFR3GlqY3BIEiqxGF8j9aSRIgkb7M1Ky+yULBKJOu8PAZxfhsYA+HxUk2aCQp3vg==", "requires": { - "picomatch": "^2.0.4" + "async": "^2.0.1", + "ethereumjs-common": "^1.5.0", + "ethereumjs-tx": "^2.1.1", + "ethereumjs-util": "^5.0.0", + "merkle-patricia-tree": "^2.1.2" + }, + "dependencies": { + "ethereumjs-util": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-5.2.1.tgz", + "integrity": "sha512-v3kT+7zdyCm1HIqWlLNrHGqHGLpGYIhjeHxQjnDXjLT2FyGJDsd3LWMYUo7pAFRrk86CR3nUJfhC81CCoJNNGQ==", + "requires": { + "bn.js": "^4.11.0", + "create-hash": "^1.1.2", + "elliptic": "^6.5.2", + "ethereum-cryptography": "^0.1.3", + "ethjs-util": "^0.1.3", + "rlp": "^2.0.0", + "safe-buffer": "^5.1.1" + } + } } }, - "require-main-filename": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz", - "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==" - }, - "scrypt-js": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/scrypt-js/-/scrypt-js-2.0.4.tgz", - "integrity": "sha512-4KsaGcPnuhtCZQCxFxN3GVYIhKFPTdLd8PLC552XwbMndtD0cjRFAhDuuydXQ0h08ZfPgzqe6EKHozpuH74iDw==" - }, - "setimmediate": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.4.tgz", - "integrity": "sha512-/TjEmXQVEzdod/FFskf3o7oOAsGhHf2j1dZqRFbDzq4F3mvvxflIIi4Hd3bLQE9y/CpwqfSQam5JakI/mi3Pog==" - }, - "string-width": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", - "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", + "ethereumjs-util": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-6.2.1.tgz", + "integrity": "sha512-W2Ktez4L01Vexijrm5EB6w7dg4n/TgpoYU4avuT5T3Vmnw/eCRtiBrJfQYS/DCSvDIOLn2k57GcHdeBcgVxAqw==", "requires": { - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^4.0.0" + "@types/bn.js": "^4.11.3", + "bn.js": "^4.11.0", + "create-hash": "^1.1.2", + "elliptic": "^6.5.2", + "ethereum-cryptography": "^0.1.3", + "ethjs-util": "0.1.6", + "rlp": "^2.2.3" } }, - "strip-json-comments": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", - "integrity": "sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==" + "level-codec": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/level-codec/-/level-codec-7.0.1.tgz", + "integrity": "sha512-Ua/R9B9r3RasXdRmOtd+t9TCOEIIlts+TN/7XTT2unhDaL6sJn83S3rUyljbr6lVtw49N3/yA0HHjpV6Kzb2aQ==" }, - "supports-color": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.0.0.tgz", - "integrity": "sha512-on9Kwidc1IUQo+bQdhi8+Tijpo0e1SS6RoGo2guUwn5vdaxw8RXOF9Vb2ws+ihWOmh4JnCJOvaziZWP1VABaLg==", + "level-errors": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/level-errors/-/level-errors-1.0.5.tgz", + "integrity": "sha512-/cLUpQduF6bNrWuAC4pwtUKA5t669pCsCi2XbmojG2tFeOr9j6ShtdDCtFFQO1DRt+EVZhx9gPzP9G2bUaG4ig==", "requires": { - "has-flag": "^3.0.0" + "errno": "~0.1.1" } }, - "uuid": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-2.0.1.tgz", - "integrity": "sha512-nWg9+Oa3qD2CQzHIP4qKUqwNfzKn8P0LtFhotaCTFchsV7ZfDhAybeip/HZVeMIpZi9JgY1E3nUlwaCmZT1sEg==" + "level-iterator-stream": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/level-iterator-stream/-/level-iterator-stream-1.3.1.tgz", + "integrity": "sha512-1qua0RHNtr4nrZBgYlpV0qHHeHpcRRWTxEZJ8xsemoHAXNL5tbooh4tPEEqIqsbWCAJBmUmkwYK/sW5OrFjWWw==", + "requires": { + "inherits": "^2.0.1", + "level-errors": "^1.0.3", + "readable-stream": "^1.0.33", + "xtend": "^4.0.0" + }, + "dependencies": { + "isarray": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", + "integrity": "sha512-D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ==" + }, + "readable-stream": { + "version": "1.1.14", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz", + "integrity": "sha512-+MeVjFf4L44XUkhM1eYbD8fyEsxcV81pqMSR5gblfcLCHfZvbrqy4/qYHE+/R5HoBUT11WV5O08Cr1n3YXkWVQ==", + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.1", + "isarray": "0.0.1", + "string_decoder": "~0.10.x" + } + }, + "string_decoder": { + "version": "0.10.31", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", + "integrity": "sha512-ev2QzSzWPYmy9GuqfIVildA4OdcGLeFZQrq5ys6RtiuF+RQQiZWr8TZNyAcuVXyQRYfEO+MsoB/1BuQVhOJuoQ==" + } + } }, - "which-module": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz", - "integrity": "sha512-B+enWhmw6cjfVC7kS8Pj9pCrKSc5txArRyaYGe088shv/FGWH+0Rjx/xPgtsWfsUtS27FkP697E4DDhgrgoc0Q==" + "level-ws": { + "version": "0.0.0", + "resolved": "https://registry.npmjs.org/level-ws/-/level-ws-0.0.0.tgz", + "integrity": "sha512-XUTaO/+Db51Uiyp/t7fCMGVFOTdtLS/NIACxE/GHsij15mKzxksZifKVjlXDF41JMUP/oM1Oc4YNGdKnc3dVLw==", + "requires": { + "readable-stream": "~1.0.15", + "xtend": "~2.1.1" + }, + "dependencies": { + "isarray": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", + "integrity": "sha512-D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ==" + }, + "readable-stream": { + "version": "1.0.34", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz", + "integrity": "sha512-ok1qVCJuRkNmvebYikljxJA/UEsKwLl2nI1OmaqAu4/UE+h0wKCHok4XkL/gvi39OacXvw59RJUOFUkDib2rHg==", + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.1", + "isarray": "0.0.1", + "string_decoder": "~0.10.x" + } + }, + "string_decoder": { + "version": "0.10.31", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", + "integrity": "sha512-ev2QzSzWPYmy9GuqfIVildA4OdcGLeFZQrq5ys6RtiuF+RQQiZWr8TZNyAcuVXyQRYfEO+MsoB/1BuQVhOJuoQ==" + }, + "xtend": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-2.1.2.tgz", + "integrity": "sha512-vMNKzr2rHP9Dp/e1NQFnLQlwlhp9L/LfvnsVdHxN1f+uggyVI3i08uD14GPvCToPkdsRfyPqIyYGmIk58V98ZQ==", + "requires": { + "object-keys": "~0.4.0" + } + } + } }, - "wide-align": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.3.tgz", - "integrity": "sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA==", + "levelup": { + "version": "1.3.9", + "resolved": "https://registry.npmjs.org/levelup/-/levelup-1.3.9.tgz", + "integrity": "sha512-VVGHfKIlmw8w1XqpGOAGwq6sZm2WwWLmlDcULkKWQXEA5EopA8OBNJ2Ck2v6bdk8HeEZSbCSEgzXadyQFm76sQ==", "requires": { - "string-width": "^1.0.2 || 2" + "deferred-leveldown": "~1.2.1", + "level-codec": "~7.0.0", + "level-errors": "~1.0.3", + "level-iterator-stream": "~1.3.0", + "prr": "~1.0.1", + "semver": "~5.4.1", + "xtend": "~4.0.0" } }, - "wrap-ansi": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-5.1.0.tgz", - "integrity": "sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q==", + "memdown": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/memdown/-/memdown-1.4.1.tgz", + "integrity": "sha512-iVrGHZB8i4OQfM155xx8akvG9FIj+ht14DX5CQkCTG4EHzZ3d3sgckIf/Lm9ivZalEsFuEVnWv2B2WZvbrro2w==", "requires": { - "ansi-styles": "^3.2.0", - "string-width": "^3.0.0", - "strip-ansi": "^5.0.0" + "abstract-leveldown": "~2.7.1", + "functional-red-black-tree": "^1.0.1", + "immediate": "^3.2.3", + "inherits": "~2.0.1", + "ltgt": "~2.2.0", + "safe-buffer": "~5.1.1" }, "dependencies": { - "string-width": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", - "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", - "requires": { - "emoji-regex": "^7.0.1", - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^5.1.0" - } - }, - "strip-ansi": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", - "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "abstract-leveldown": { + "version": "2.7.2", + "resolved": "https://registry.npmjs.org/abstract-leveldown/-/abstract-leveldown-2.7.2.tgz", + "integrity": "sha512-+OVvxH2rHVEhWLdbudP6p0+dNMXu8JA1CbhP19T8paTYAcX7oJ4OVjT+ZUVpv7mITxXHqDMej+GdqXBmXkw09w==", "requires": { - "ansi-regex": "^4.1.0" + "xtend": "~4.0.0" } } } }, - "y18n": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.3.tgz", - "integrity": "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==" - }, - "yargs": { - "version": "13.3.2", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-13.3.2.tgz", - "integrity": "sha512-AX3Zw5iPruN5ie6xGRIDgqkT+ZhnRlZMLMHAs8tg7nRruy2Nb+i5o9bwghAogtM08q1dpr2LVoS8KSTMYpWXUw==", + "merkle-patricia-tree": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/merkle-patricia-tree/-/merkle-patricia-tree-2.3.2.tgz", + "integrity": "sha512-81PW5m8oz/pz3GvsAwbauj7Y00rqm81Tzad77tHBwU7pIAtN+TJnMSOJhxBKflSVYhptMMb9RskhqHqrSm1V+g==", "requires": { - "cliui": "^5.0.0", - "find-up": "^3.0.0", - "get-caller-file": "^2.0.1", - "require-directory": "^2.1.1", - "require-main-filename": "^2.0.0", - "set-blocking": "^2.0.0", - "string-width": "^3.0.0", - "which-module": "^2.0.0", - "y18n": "^4.0.0", - "yargs-parser": "^13.1.2" + "async": "^1.4.2", + "ethereumjs-util": "^5.0.0", + "level-ws": "0.0.0", + "levelup": "^1.2.1", + "memdown": "^1.0.0", + "readable-stream": "^2.0.0", + "rlp": "^2.0.0", + "semaphore": ">=1.0.1" }, "dependencies": { - "string-width": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", - "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", - "requires": { - "emoji-regex": "^7.0.1", - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^5.1.0" - } + "async": { + "version": "1.5.2", + "resolved": "https://registry.npmjs.org/async/-/async-1.5.2.tgz", + "integrity": "sha512-nSVgobk4rv61R9PUSDtYt7mPVB2olxNR5RWJcAsH676/ef11bUZwvu7+RGYrYauVdDPcO519v68wRhXQtxsV9w==" }, - "strip-ansi": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", - "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "ethereumjs-util": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-5.2.1.tgz", + "integrity": "sha512-v3kT+7zdyCm1HIqWlLNrHGqHGLpGYIhjeHxQjnDXjLT2FyGJDsd3LWMYUo7pAFRrk86CR3nUJfhC81CCoJNNGQ==", "requires": { - "ansi-regex": "^4.1.0" + "bn.js": "^4.11.0", + "create-hash": "^1.1.2", + "elliptic": "^6.5.2", + "ethereum-cryptography": "^0.1.3", + "ethjs-util": "^0.1.3", + "rlp": "^2.0.0", + "safe-buffer": "^5.1.1" } } } }, - "yargs-parser": { - "version": "13.1.2", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-13.1.2.tgz", - "integrity": "sha512-3lbsNRf/j+A4QuSZfDRA7HRSfWrzO0YjqTJd5kjAq37Zep1CEgaYmrH9Q3GwPiB9cHyd1Y1UwggGhJGoxipbzg==", + "object-keys": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-0.4.0.tgz", + "integrity": "sha512-ncrLw+X55z7bkl5PnUvHwFK9FcGuFYo9gtjws2XtSzL+aZ8tm830P60WJ0dSmFVaSalWieW5MD7kEdnXda9yJw==" + }, + "readable-stream": { + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", "requires": { - "camelcase": "^5.0.0", - "decamelize": "^1.2.0" + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" } }, - "yargs-unparser": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/yargs-unparser/-/yargs-unparser-1.6.0.tgz", - "integrity": "sha512-W9tKgmSn0DpSatfri0nx52Joq5hVXgeLiqR/5G0sZNDoLZFOr/xjBUDcShCOGNsBnEMNo1KAMBkTej1Hm62HTw==", + "safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + }, + "semver": { + "version": "5.4.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.4.1.tgz", + "integrity": "sha512-WfG/X9+oATh81XtllIo/I8gOiY9EXRdv1cQdyykeXK17YcUW3EXUAi2To4pcH6nZtJPr7ZOpM5OMyWJZm+8Rsg==" + }, + "string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", "requires": { - "flat": "^4.1.0", - "lodash": "^4.17.15", - "yargs": "^13.3.0" + "safe-buffer": "~5.1.0" } } } }, - "eth-json-rpc-filters": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/eth-json-rpc-filters/-/eth-json-rpc-filters-4.2.2.tgz", - "integrity": "sha512-DGtqpLU7bBg63wPMWg1sCpkKCf57dJ+hj/k3zF26anXMzkmtSBDExL8IhUu7LUd34f0Zsce3PYNO2vV2GaTzaw==", + "ethers": { + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/ethers/-/ethers-5.7.2.tgz", + "integrity": "sha512-wswUsmWo1aOK8rR7DIKiWSw9DbLWe6x98Jrn8wcTflTVvaXhAMaB5zGAXy0GYQEQp9iO1iSHWVyARQm11zUtyg==", "requires": { - "@metamask/safe-event-emitter": "^2.0.0", - "async-mutex": "^0.2.6", - "eth-json-rpc-middleware": "^6.0.0", - "eth-query": "^2.1.2", - "json-rpc-engine": "^6.1.0", - "pify": "^5.0.0" + "@ethersproject/abi": "5.7.0", + "@ethersproject/abstract-provider": "5.7.0", + "@ethersproject/abstract-signer": "5.7.0", + "@ethersproject/address": "5.7.0", + "@ethersproject/base64": "5.7.0", + "@ethersproject/basex": "5.7.0", + "@ethersproject/bignumber": "5.7.0", + "@ethersproject/bytes": "5.7.0", + "@ethersproject/constants": "5.7.0", + "@ethersproject/contracts": "5.7.0", + "@ethersproject/hash": "5.7.0", + "@ethersproject/hdnode": "5.7.0", + "@ethersproject/json-wallets": "5.7.0", + "@ethersproject/keccak256": "5.7.0", + "@ethersproject/logger": "5.7.0", + "@ethersproject/networks": "5.7.1", + "@ethersproject/pbkdf2": "5.7.0", + "@ethersproject/properties": "5.7.0", + "@ethersproject/providers": "5.7.2", + "@ethersproject/random": "5.7.0", + "@ethersproject/rlp": "5.7.0", + "@ethersproject/sha2": "5.7.0", + "@ethersproject/signing-key": "5.7.0", + "@ethersproject/solidity": "5.7.0", + "@ethersproject/strings": "5.7.0", + "@ethersproject/transactions": "5.7.0", + "@ethersproject/units": "5.7.0", + "@ethersproject/wallet": "5.7.0", + "@ethersproject/web": "5.7.1", + "@ethersproject/wordlists": "5.7.0" + } + }, + "ethjs-abi": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/ethjs-abi/-/ethjs-abi-0.2.1.tgz", + "integrity": "sha512-g2AULSDYI6nEJyJaEVEXtTimRY2aPC2fi7ddSy0W+LXvEVL8Fe1y76o43ecbgdUKwZD+xsmEgX1yJr1Ia3r1IA==", + "dev": true, + "requires": { + "bn.js": "4.11.6", + "js-sha3": "0.5.5", + "number-to-bn": "1.7.0" }, "dependencies": { - "pify": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-5.0.0.tgz", - "integrity": "sha512-eW/gHNMlxdSP6dmG6uJip6FXN0EQBwm2clYYd8Wul42Cwu/DK8HEftzsapcNdYe2MfLiIwZqsDk2RDEsTE79hA==" + "bn.js": { + "version": "4.11.6", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.6.tgz", + "integrity": "sha512-XWwnNNFCuuSQ0m3r3C4LE3EiORltHd9M05pq6FOlVeiophzRbMo50Sbz1ehl8K3Z+jw9+vmgnXefY1hz8X+2wA==", + "dev": true + }, + "js-sha3": { + "version": "0.5.5", + "resolved": "https://registry.npmjs.org/js-sha3/-/js-sha3-0.5.5.tgz", + "integrity": "sha512-yLLwn44IVeunwjpDVTDZmQeVbB0h+dZpY2eO68B/Zik8hu6dH+rKeLxwua79GGIvW6xr8NBAcrtiUbYrTjEFTA==", + "dev": true } } }, - "eth-json-rpc-infura": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/eth-json-rpc-infura/-/eth-json-rpc-infura-5.1.0.tgz", - "integrity": "sha512-THzLye3PHUSGn1EXMhg6WTLW9uim7LQZKeKaeYsS9+wOBcamRiCQVGHa6D2/4P0oS0vSaxsBnU/J6qvn0MPdow==", + "ethjs-unit": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/ethjs-unit/-/ethjs-unit-0.1.6.tgz", + "integrity": "sha512-/Sn9Y0oKl0uqQuvgFk/zQgR7aw1g36qX/jzSQ5lSwlO0GigPymk4eGQfeNTD03w1dPOqfz8V77Cy43jH56pagw==", "requires": { - "eth-json-rpc-middleware": "^6.0.0", - "eth-rpc-errors": "^3.0.0", - "json-rpc-engine": "^5.3.0", - "node-fetch": "^2.6.0" + "bn.js": "4.11.6", + "number-to-bn": "1.7.0" }, "dependencies": { - "json-rpc-engine": { - "version": "5.4.0", - "resolved": "https://registry.npmjs.org/json-rpc-engine/-/json-rpc-engine-5.4.0.tgz", - "integrity": "sha512-rAffKbPoNDjuRnXkecTjnsE3xLLrb00rEkdgalINhaYVYIxDwWtvYBr9UFbhTvPB1B2qUOLoFd/cV6f4Q7mh7g==", - "requires": { - "eth-rpc-errors": "^3.0.0", - "safe-event-emitter": "^1.0.1" - } + "bn.js": { + "version": "4.11.6", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.6.tgz", + "integrity": "sha512-XWwnNNFCuuSQ0m3r3C4LE3EiORltHd9M05pq6FOlVeiophzRbMo50Sbz1ehl8K3Z+jw9+vmgnXefY1hz8X+2wA==" } } }, - "eth-json-rpc-middleware": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/eth-json-rpc-middleware/-/eth-json-rpc-middleware-6.0.0.tgz", - "integrity": "sha512-qqBfLU2Uq1Ou15Wox1s+NX05S9OcAEL4JZ04VZox2NS0U+RtCMjSxzXhLFWekdShUPZ+P8ax3zCO2xcPrp6XJQ==", + "ethjs-util": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/ethjs-util/-/ethjs-util-0.1.6.tgz", + "integrity": "sha512-CUnVOQq7gSpDHZVVrQW8ExxUETWrnrvXYvYz55wOU8Uj4VCgw56XC2B/fVqQN+f7gmrnRHSLVnFAwsCuNwji8w==", "requires": { - "btoa": "^1.2.1", - "clone": "^2.1.1", - "eth-query": "^2.1.2", - "eth-rpc-errors": "^3.0.0", - "eth-sig-util": "^1.4.2", - "ethereumjs-util": "^5.1.2", - "json-rpc-engine": "^5.3.0", - "json-stable-stringify": "^1.0.1", - "node-fetch": "^2.6.1", - "pify": "^3.0.0", - "safe-event-emitter": "^1.0.1" + "is-hex-prefixed": "1.0.0", + "strip-hex-prefix": "1.0.0" + } + }, + "event-emitter": { + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/event-emitter/-/event-emitter-0.3.5.tgz", + "integrity": "sha512-D9rRn9y7kLPnJ+hMq7S/nhvoKwwvVJahBi2BPmx3bvbsEdK3W9ii8cBSGjP+72/LnM4n6fo3+dkCX5FeTQruXA==", + "requires": { + "d": "1", + "es5-ext": "~0.10.14" + } + }, + "event-target-shim": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/event-target-shim/-/event-target-shim-5.0.1.tgz", + "integrity": "sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==", + "optional": true + }, + "eventemitter3": { + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz", + "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==" + }, + "events": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", + "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==" + }, + "evm-bn": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/evm-bn/-/evm-bn-1.1.2.tgz", + "integrity": "sha512-Lq8CT1EAjSeN+Yk0h1hpSwnZyMA4Xir6fQD4vlStljAuW2xr7qLOEGDLGsTa9sU2e40EYIumA4wYhMC/e+lyKw==", + "requires": { + "@ethersproject/bignumber": "^5.5.0", + "from-exponential": "^1.1.1" + } + }, + "evp_bytestokey": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz", + "integrity": "sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==", + "requires": { + "md5.js": "^1.3.4", + "safe-buffer": "^5.1.1" + } + }, + "express": { + "version": "4.18.2", + "resolved": "https://registry.npmjs.org/express/-/express-4.18.2.tgz", + "integrity": "sha512-5/PsL6iGPdfQ/lKM1UuielYgv3BUoJfz1aUwU9vHZ+J7gyvwdQXFEBIEIaxeGf0GIcreATNyBExtalisDbuMqQ==", + "requires": { + "accepts": "~1.3.8", + "array-flatten": "1.1.1", + "body-parser": "1.20.1", + "content-disposition": "0.5.4", + "content-type": "~1.0.4", + "cookie": "0.5.0", + "cookie-signature": "1.0.6", + "debug": "2.6.9", + "depd": "2.0.0", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "finalhandler": "1.2.0", + "fresh": "0.5.2", + "http-errors": "2.0.0", + "merge-descriptors": "1.0.1", + "methods": "~1.1.2", + "on-finished": "2.4.1", + "parseurl": "~1.3.3", + "path-to-regexp": "0.1.7", + "proxy-addr": "~2.0.7", + "qs": "6.11.0", + "range-parser": "~1.2.1", + "safe-buffer": "5.2.1", + "send": "0.18.0", + "serve-static": "1.15.0", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "type-is": "~1.6.18", + "utils-merge": "1.0.1", + "vary": "~1.1.2" }, "dependencies": { - "bn.js": { - "version": "4.12.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==" - }, - "ethereum-cryptography": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-0.1.3.tgz", - "integrity": "sha512-w8/4x1SGGzc+tO97TASLja6SLd3fRIK2tLVcV2Gx4IB21hE19atll5Cq9o3d0ZmAYC/8aw0ipieTSiekAea4SQ==", - "requires": { - "@types/pbkdf2": "^3.0.0", - "@types/secp256k1": "^4.0.1", - "blakejs": "^1.1.0", - "browserify-aes": "^1.2.0", - "bs58check": "^2.1.2", - "create-hash": "^1.2.0", - "create-hmac": "^1.1.7", - "hash.js": "^1.1.7", - "keccak": "^3.0.0", - "pbkdf2": "^3.0.17", - "randombytes": "^2.1.0", - "safe-buffer": "^5.1.2", - "scrypt-js": "^3.0.0", - "secp256k1": "^4.0.1", - "setimmediate": "^1.0.5" - } + "cookie": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.5.0.tgz", + "integrity": "sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==" }, - "ethereumjs-util": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-5.2.1.tgz", - "integrity": "sha512-v3kT+7zdyCm1HIqWlLNrHGqHGLpGYIhjeHxQjnDXjLT2FyGJDsd3LWMYUo7pAFRrk86CR3nUJfhC81CCoJNNGQ==", + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", "requires": { - "bn.js": "^4.11.0", - "create-hash": "^1.1.2", - "elliptic": "^6.5.2", - "ethereum-cryptography": "^0.1.3", - "ethjs-util": "^0.1.3", - "rlp": "^2.0.0", - "safe-buffer": "^5.1.1" + "ms": "2.0.0" } }, - "json-rpc-engine": { - "version": "5.4.0", - "resolved": "https://registry.npmjs.org/json-rpc-engine/-/json-rpc-engine-5.4.0.tgz", - "integrity": "sha512-rAffKbPoNDjuRnXkecTjnsE3xLLrb00rEkdgalINhaYVYIxDwWtvYBr9UFbhTvPB1B2qUOLoFd/cV6f4Q7mh7g==", - "requires": { - "eth-rpc-errors": "^3.0.0", - "safe-event-emitter": "^1.0.1" - } + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" } } }, - "eth-lib": { - "version": "0.1.29", - "resolved": "https://registry.npmjs.org/eth-lib/-/eth-lib-0.1.29.tgz", - "integrity": "sha512-bfttrr3/7gG4E02HoWTDUcDDslN003OlOoBxk9virpAZQ1ja/jDgwkWB8QfJF7ojuEowrqy+lzp9VcJG7/k5bQ==", + "ext": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/ext/-/ext-1.7.0.tgz", + "integrity": "sha512-6hxeJYaL110a9b5TEJSj0gojyHQAmA2ch5Os+ySCiA1QGdS697XWY1pzsrSjqA9LDEEgdB/KypIlR59RcLuHYw==", "requires": { - "bn.js": "^4.11.6", - "elliptic": "^6.4.0", - "nano-json-stream-parser": "^0.1.2", - "servify": "^0.1.12", - "ws": "^3.0.0", - "xhr-request-promise": "^0.1.2" + "type": "^2.7.2" }, "dependencies": { - "bn.js": { - "version": "4.12.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==" - }, - "safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" - }, - "ws": { - "version": "3.3.3", - "resolved": "https://registry.npmjs.org/ws/-/ws-3.3.3.tgz", - "integrity": "sha512-nnWLa/NwZSt4KQJu51MYlCcSQ5g7INpOrOMt4XV8j4dqTXdmlUmSHQ8/oLC069ckre0fRsgfvsKwbTdtKLCDkA==", + "type": { + "version": "2.7.2", + "resolved": "https://registry.npmjs.org/type/-/type-2.7.2.tgz", + "integrity": "sha512-dzlvlNlt6AXU7EBSfpAscydQ7gXB+pPGsPnfJnZpiNJBDj7IaJzQlBZYGdEi4R9HmPdBv2XmWJ6YUtoTa7lmCw==" + } + } + }, + "extend": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", + "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==" + }, + "extract-zip": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extract-zip/-/extract-zip-2.0.1.tgz", + "integrity": "sha512-GDhU9ntwuKyGXdZBUgTIe+vXnWj0fppUEtMDL0+idd5Sta8TGpHssn/eusA9mrPr9qNDym6SxAYZjNvCn/9RBg==", + "optional": true, + "requires": { + "@types/yauzl": "^2.9.1", + "debug": "^4.1.1", + "get-stream": "^5.1.0", + "yauzl": "^2.10.0" + }, + "dependencies": { + "get-stream": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", + "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", + "optional": true, "requires": { - "async-limiter": "~1.0.0", - "safe-buffer": "~5.1.0", - "ultron": "~1.1.0" + "pump": "^3.0.0" } } } }, - "eth-query": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/eth-query/-/eth-query-2.1.2.tgz", - "integrity": "sha512-srES0ZcvwkR/wd5OQBRA1bIJMww1skfGS0s8wlwK3/oNP4+wnds60krvu5R1QbpRQjMmpG5OMIWro5s7gvDPsA==", + "extsprintf": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", + "integrity": "sha512-11Ndz7Nv+mvAC1j0ktTa7fAb0vLyGGX+rMHNBYQviQDGU0Hw7lhctJANqbPhu9nV9/izT/IntTgZ7Im/9LJs9g==" + }, + "eyes": { + "version": "0.1.8", + "resolved": "https://registry.npmjs.org/eyes/-/eyes-0.1.8.tgz", + "integrity": "sha512-GipyPsXO1anza0AOZdy69Im7hGFCNB7Y/NGjDlZGJ3GJJLtwNSb2vrzYrTYJRrRloVx7pl+bhUaTB8yiccPvFQ==" + }, + "fake-merkle-patricia-tree": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/fake-merkle-patricia-tree/-/fake-merkle-patricia-tree-1.0.1.tgz", + "integrity": "sha512-Tgq37lkc9pUIgIKw5uitNUKcgcYL3R6JvXtKQbOf/ZSavXbidsksgp/pAY6p//uhw0I4yoMsvTSovvVIsk/qxA==", + "requires": { + "checkpoint-store": "^1.1.0" + } + }, + "fast-base64-decode": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fast-base64-decode/-/fast-base64-decode-1.0.0.tgz", + "integrity": "sha512-qwaScUgUGBYeDNRnbc/KyllVU88Jk1pRHPStuF/lO7B0/RTRLj7U0lkdTAutlBblY08rwZDff6tNU9cjv6j//Q==", + "dev": true + }, + "fast-check": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/fast-check/-/fast-check-3.1.1.tgz", + "integrity": "sha512-3vtXinVyuUKCKFKYcwXhGE6NtGWkqF8Yh3rvMZNzmwz8EPrgoc/v4pDdLHyLnCyCI5MZpZZkDEwFyXyEONOxpA==", + "requires": { + "pure-rand": "^5.0.1" + } + }, + "fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==" + }, + "fast-json-stable-stringify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==" + }, + "fast-safe-stringify": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/fast-safe-stringify/-/fast-safe-stringify-2.1.1.tgz", + "integrity": "sha512-W+KJc2dmILlPplD/H4K9l9LcAHAfPtP6BY84uVLXQ6Evcz9Lcg33Y2z1IVblT6xdY54PXYVHEv+0Wpq8Io6zkA==" + }, + "fast-stable-stringify": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fast-stable-stringify/-/fast-stable-stringify-1.0.0.tgz", + "integrity": "sha512-wpYMUmFu5f00Sm0cj2pfivpmawLZ0NKdviQ4w9zJeR8JVtOpOxHmLaJuj0vxvGqMJQWyP/COUkF75/57OKyRag==" + }, + "fd-slicer": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.1.0.tgz", + "integrity": "sha512-cE1qsB/VwyQozZ+q1dGxR8LBYNZeofhEdUNGSMbQD3Gw2lAzX9Zb3uIU6Ebc/Fmyjo9AWWfnn0AUCHqtevs/8g==", + "requires": { + "pend": "~1.2.0" + } + }, + "fetch-cookie": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/fetch-cookie/-/fetch-cookie-0.11.0.tgz", + "integrity": "sha512-BQm7iZLFhMWFy5CZ/162sAGjBfdNWb7a8LEqqnzsHFhxT/X/SVj/z2t2nu3aJvjlbQkrAlTUApplPRjWyH4mhA==", + "optional": true, "requires": { - "json-rpc-random-id": "^1.0.0", - "xtend": "^4.0.1" + "tough-cookie": "^2.3.3 || ^3.0.1 || ^4.0.0" } }, - "eth-rpc-errors": { + "file-type": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/file-type/-/file-type-5.2.0.tgz", + "integrity": "sha512-Iq1nJ6D2+yIO4c8HHg4fyVb8mAJieo1Oloy1mLLaB2PvezNedhBVm+QU7g0qM42aiMbRXTxKKwGD17rjKNJYVQ==" + }, + "file-uri-to-path": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz", + "integrity": "sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==" + }, + "file-url": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/eth-rpc-errors/-/eth-rpc-errors-3.0.0.tgz", - "integrity": "sha512-iPPNHPrLwUlR9xCSYm7HHQjWBasor3+KZfRvwEWxMz3ca0yqnlBeJrnyphkGIXZ4J7AMAaOLmwy4AWhnxOiLxg==", + "resolved": "https://registry.npmjs.org/file-url/-/file-url-3.0.0.tgz", + "integrity": "sha512-g872QGsHexznxkIAdK8UiZRe7SkE6kvylShU4Nsj8NvfvZag7S0QuQ4IgvPDkk75HxgjIVDwycFTDAgIiO4nDA==", + "optional": true + }, + "fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", "requires": { - "fast-safe-stringify": "^2.0.6" + "to-regex-range": "^5.0.1" } }, - "eth-sig-util": { - "version": "1.4.2", - "resolved": "https://registry.npmjs.org/eth-sig-util/-/eth-sig-util-1.4.2.tgz", - "integrity": "sha512-iNZ576iTOGcfllftB73cPB5AN+XUQAT/T8xzsILsghXC1o8gJUqe3RHlcDqagu+biFpYQ61KQrZZJza8eRSYqw==", + "finalhandler": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.2.0.tgz", + "integrity": "sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==", "requires": { - "ethereumjs-abi": "git+https://github.com/ethereumjs/ethereumjs-abi.git", - "ethereumjs-util": "^5.1.1" + "debug": "2.6.9", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "on-finished": "2.4.1", + "parseurl": "~1.3.3", + "statuses": "2.0.1", + "unpipe": "~1.0.0" }, "dependencies": { - "bn.js": { - "version": "4.12.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==" - }, - "ethereum-cryptography": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-0.1.3.tgz", - "integrity": "sha512-w8/4x1SGGzc+tO97TASLja6SLd3fRIK2tLVcV2Gx4IB21hE19atll5Cq9o3d0ZmAYC/8aw0ipieTSiekAea4SQ==", + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", "requires": { - "@types/pbkdf2": "^3.0.0", - "@types/secp256k1": "^4.0.1", - "blakejs": "^1.1.0", - "browserify-aes": "^1.2.0", - "bs58check": "^2.1.2", - "create-hash": "^1.2.0", - "create-hmac": "^1.1.7", - "hash.js": "^1.1.7", - "keccak": "^3.0.0", - "pbkdf2": "^3.0.17", - "randombytes": "^2.1.0", - "safe-buffer": "^5.1.2", - "scrypt-js": "^3.0.0", - "secp256k1": "^4.0.1", - "setimmediate": "^1.0.5" + "ms": "2.0.0" } }, - "ethereumjs-util": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-5.2.1.tgz", - "integrity": "sha512-v3kT+7zdyCm1HIqWlLNrHGqHGLpGYIhjeHxQjnDXjLT2FyGJDsd3LWMYUo7pAFRrk86CR3nUJfhC81CCoJNNGQ==", - "requires": { - "bn.js": "^4.11.0", - "create-hash": "^1.1.2", - "elliptic": "^6.5.2", - "ethereum-cryptography": "^0.1.3", - "ethjs-util": "^0.1.3", - "rlp": "^2.0.0", - "safe-buffer": "^5.1.1" - } + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" } } }, - "ethereum-bloom-filters": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/ethereum-bloom-filters/-/ethereum-bloom-filters-1.0.10.tgz", - "integrity": "sha512-rxJ5OFN3RwjQxDcFP2Z5+Q9ho4eIdEmSc2ht0fCu8Se9nbXjZ7/031uXoUYJ87KHCOdVeiUuwSnoS7hmYAGVHA==", + "find-replace": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/find-replace/-/find-replace-3.0.0.tgz", + "integrity": "sha512-6Tb2myMioCAgv5kfvP5/PkZZ/ntTpVK39fHY7WkWBgvbeE+VHd/tZuZ4mrC+bxh4cfOZeYKVPaJIZtZXV7GNCQ==", + "dev": true, "requires": { - "js-sha3": "^0.8.0" + "array-back": "^3.0.1" } }, - "ethereum-common": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/ethereum-common/-/ethereum-common-0.2.0.tgz", - "integrity": "sha512-XOnAR/3rntJgbCdGhqdaLIxDLWKLmsZOGhHdBKadEr6gEnJLH52k93Ou+TUdFaPN3hJc3isBZBal3U/XZ15abA==" + "find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "requires": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + } }, - "ethereum-cryptography": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-1.1.2.tgz", - "integrity": "sha512-XDSJlg4BD+hq9N2FjvotwUET9Tfxpxc3kWGE2AqUG5vcbeunnbImVk3cj6e/xT3phdW21mE8R5IugU4fspQDcQ==", + "find-yarn-workspace-root": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/find-yarn-workspace-root/-/find-yarn-workspace-root-2.0.0.tgz", + "integrity": "sha512-1IMnbjt4KzsQfnhnzNd8wUEgXZ44IzZaZmnLYx7D5FZlaHt2gW20Cri8Q+E/t5tIj4+epTBub+2Zxu/vNILzqQ==", "requires": { - "@noble/hashes": "1.1.2", - "@noble/secp256k1": "1.6.3", - "@scure/bip32": "1.1.0", - "@scure/bip39": "1.1.0" - }, - "dependencies": { - "@noble/hashes": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.1.2.tgz", - "integrity": "sha512-KYRCASVTv6aeUi1tsF8/vpyR7zpfs3FUzy2Jqm+MU+LmUKhQ0y2FpfwqkCcxSg2ua4GALJd8k2R76WxwZGbQpA==" - }, - "@noble/secp256k1": { - "version": "1.6.3", - "resolved": "https://registry.npmjs.org/@noble/secp256k1/-/secp256k1-1.6.3.tgz", - "integrity": "sha512-T04e4iTurVy7I8Sw4+c5OSN9/RkPlo1uKxAomtxQNLq8j1uPAqnsqG1bqvY3Jv7c13gyr6dui0zmh/I3+f/JaQ==" - } + "micromatch": "^4.0.2" } }, - "ethereum-ens": { - "version": "0.8.0", - "resolved": "https://registry.npmjs.org/ethereum-ens/-/ethereum-ens-0.8.0.tgz", - "integrity": "sha512-a8cBTF4AWw1Q1Y37V1LSCS9pRY4Mh3f8vCg5cbXCCEJ3eno1hbI/+Ccv9SZLISYpqQhaglP3Bxb/34lS4Qf7Bg==", + "flashbots": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/flashbots/-/flashbots-1.0.0.tgz", + "integrity": "sha512-IvF5v/kVCf13ku4ksM7ZjhLWk1oBC4UgwaX7wvOtvttGClgRYGQ/Q/4DpXbdlVsliXNy8PE7/9SMYx9Cv6iICA==" + }, + "flat": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz", + "integrity": "sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==" + }, + "fmix": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/fmix/-/fmix-0.1.0.tgz", + "integrity": "sha512-Y6hyofImk9JdzU8k5INtTXX1cu8LDlePWDFU5sftm9H+zKCr5SGrVjdhkvsim646cw5zD0nADj8oHyXMZmCZ9w==", "dev": true, "requires": { - "bluebird": "^3.4.7", - "eth-ens-namehash": "^2.0.0", - "js-sha3": "^0.5.7", - "pako": "^1.0.4", - "underscore": "^1.8.3", - "web3": "^1.0.0-beta.34" - }, - "dependencies": { - "js-sha3": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/js-sha3/-/js-sha3-0.5.7.tgz", - "integrity": "sha512-GII20kjaPX0zJ8wzkTbNDYMY7msuZcTWk8S5UOh6806Jq/wz1J8/bnr8uGU0DAUmYDjj2Mr4X1cW8v/GLYnR+g==", - "dev": true - } + "imul": "^1.0.0" } }, - "ethereum-protocol": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/ethereum-protocol/-/ethereum-protocol-1.0.1.tgz", - "integrity": "sha512-3KLX1mHuEsBW0dKG+c6EOJS1NBNqdCICvZW9sInmZTt5aY0oxmHVggYRE0lJu1tcnMD1K+AKHdLi6U43Awm1Vg==" + "follow-redirects": { + "version": "1.15.2", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.2.tgz", + "integrity": "sha512-VQLG33o04KaQ8uYi2tVNbdrWp1QWxNNea+nmIB4EVM28v0hmP17z7aG1+wAkNzVq4KeXTq3221ye5qTJP91JwA==" }, - "ethereum-waffle": { - "version": "4.0.10", - "resolved": "https://registry.npmjs.org/ethereum-waffle/-/ethereum-waffle-4.0.10.tgz", - "integrity": "sha512-iw9z1otq7qNkGDNcMoeNeLIATF9yKl1M8AIeu42ElfNBplq0e+5PeasQmm8ybY/elkZ1XyRO0JBQxQdVRb8bqQ==", + "for-each": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz", + "integrity": "sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==", + "requires": { + "is-callable": "^1.1.3" + } + }, + "foreach": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/foreach/-/foreach-2.0.6.tgz", + "integrity": "sha512-k6GAGDyqLe9JaebCsFCoudPPWfihKu8pylYXRlqP1J7ms39iPoTtk2fviNglIeQEwdh0bQeKJ01ZPyuyQvKzwg==" + }, + "forever-agent": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", + "integrity": "sha512-j0KLYPhm6zeac4lz3oJ3o65qvgQCcPubiyotZrXqEaG4hNagNYO8qdlUrX5vwqv9ohqeT/Z3j6+yW067yWWdUw==" + }, + "form-data": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-3.0.1.tgz", + "integrity": "sha512-RHkBKtLWUVwd7SqRIvCZMEvAMoGUp0XU+seQiZejj0COz3RI3hWP4sCv3gZWWLjJTd7rGwcsF5eKZGii0r/hbg==", "dev": true, "requires": { - "@ethereum-waffle/chai": "4.0.10", - "@ethereum-waffle/compiler": "4.0.3", - "@ethereum-waffle/mock-contract": "4.0.4", - "@ethereum-waffle/provider": "4.0.5", - "solc": "0.8.15", - "typechain": "^8.0.0" - }, - "dependencies": { - "commander": { - "version": "8.3.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-8.3.0.tgz", - "integrity": "sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==", - "dev": true - }, - "semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "dev": true - }, - "solc": { - "version": "0.8.15", - "resolved": "https://registry.npmjs.org/solc/-/solc-0.8.15.tgz", - "integrity": "sha512-Riv0GNHNk/SddN/JyEuFKwbcWcEeho15iyupTSHw5Np6WuXA5D8kEHbyzDHi6sqmvLzu2l+8b1YmL8Ytple+8w==", - "dev": true, - "requires": { - "command-exists": "^1.2.8", - "commander": "^8.1.0", - "follow-redirects": "^1.12.1", - "js-sha3": "0.8.0", - "memorystream": "^0.3.1", - "semver": "^5.5.0", - "tmp": "0.0.33" - } - } + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "mime-types": "^2.1.12" } }, - "ethereumjs-abi": { - "version": "git+ssh://git@github.com/ethereumjs/ethereumjs-abi.git#ee3994657fa7a427238e6ba92a84d0b529bbcde0", - "from": "ethereumjs-abi@0.6.8", + "form-data-encoder": { + "version": "1.7.1", + "resolved": "https://registry.npmjs.org/form-data-encoder/-/form-data-encoder-1.7.1.tgz", + "integrity": "sha512-EFRDrsMm/kyqbTQocNvRXMLjc7Es2Vk+IQFx/YW7hkUH1eBl4J1fqiP34l74Yt0pFLCNpc06fkbVk00008mzjg==" + }, + "forwarded": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", + "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==" + }, + "fp-ts": { + "version": "1.19.3", + "resolved": "https://registry.npmjs.org/fp-ts/-/fp-ts-1.19.3.tgz", + "integrity": "sha512-H5KQDspykdHuztLTg+ajGN0Z2qUjcEf3Ybxc6hLt0k7/zPkn29XnKnxlBPyW2XIddWrGaJBzBl4VLYOtk39yZg==" + }, + "fraction.js": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.3.4.tgz", + "integrity": "sha512-pwiTgt0Q7t+GHZA4yaLjObx4vXmmdcS0iSJ19o8d/goUGgItX9UZWKWNnLHehxviD8wU2IWRsnR8cD5+yOJP2Q==" + }, + "fresh": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", + "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==" + }, + "from-exponential": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/from-exponential/-/from-exponential-1.1.1.tgz", + "integrity": "sha512-VBE7f5OVnYwdgB3LHa+Qo29h8qVpxhVO9Trlc+AWm+/XNAgks1tAwMFHb33mjeiof77GglsJzeYF7OqXrROP/A==" + }, + "fs-constants": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz", + "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==" + }, + "fs-extra": { + "version": "11.1.1", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.1.1.tgz", + "integrity": "sha512-MGIE4HOvQCeUCzmlHs0vXpih4ysz4wg9qiSAu6cd42lVwPbTM1TjV7RusoyQqMmk/95gdQZX72u+YW+c3eEpFQ==", "requires": { - "bn.js": "^4.11.8", - "ethereumjs-util": "^6.0.0" + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + } + }, + "fs-minipass": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-1.2.7.tgz", + "integrity": "sha512-GWSSJGFy4e9GUeCcbIkED+bgAoFyj7XF1mV8rma3QW4NIqX9Kyx79N/PF61H5udOV3aY1IaMLs6pGbH71nlCTA==", + "requires": { + "minipass": "^2.6.0" + } + }, + "fs-readdir-recursive": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/fs-readdir-recursive/-/fs-readdir-recursive-1.1.0.tgz", + "integrity": "sha512-GNanXlVr2pf02+sPN40XN8HG+ePaNcvM0q5mZBd668Obwb0yD5GiUbZOFgwn8kGMY6I3mdyDJzieUy3PTYyTRA==" + }, + "fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==" + }, + "function-bind": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" + }, + "function.prototype.name": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.5.tgz", + "integrity": "sha512-uN7m/BzVKQnCUF/iW8jYea67v++2u7m5UgENbHRtdDVclOUP+FMPlCNdmk0h/ysGyo2tavMJEDqJAkJdRa1vMA==", + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "es-abstract": "^1.19.0", + "functions-have-names": "^1.2.2" + } + }, + "functional-red-black-tree": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", + "integrity": "sha512-dsKNQNdj6xA3T+QlADDA7mOSlX0qiMINjn0cgr+eGHGsbSHzTabcIogz2+p/iqP1Xs6EP/sS2SbqH+brGTbq0g==" + }, + "functions-have-names": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz", + "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==" + }, + "ganache": { + "version": "7.9.1", + "resolved": "https://registry.npmjs.org/ganache/-/ganache-7.9.1.tgz", + "integrity": "sha512-Tqhd4J3cpiLeYTD6ek/zlchSB107IVPMIm4ypyg+xz1sdkeALUnYYZnmY4Bdjqj3i6QwtlZPCu7U4qKy7HlWTA==", + "requires": { + "@trufflesuite/bigint-buffer": "1.1.10", + "@trufflesuite/uws-js-unofficial": "20.30.0-unofficial.0", + "@types/bn.js": "^5.1.0", + "@types/lru-cache": "5.1.1", + "@types/seedrandom": "3.0.1", + "abstract-level": "1.0.3", + "abstract-leveldown": "7.2.0", + "async-eventemitter": "0.2.4", + "bufferutil": "4.0.5", + "emittery": "0.10.0", + "keccak": "3.0.2", + "leveldown": "6.1.0", + "secp256k1": "4.0.3", + "utf-8-validate": "5.0.7" }, "dependencies": { - "@types/bn.js": { - "version": "4.11.6", - "resolved": "https://registry.npmjs.org/@types/bn.js/-/bn.js-4.11.6.tgz", - "integrity": "sha512-pqr857jrp2kPuO9uRjZ3PwnJTjoQy+fcdxvBTvHm6dkmEL9q+hDD/2j/0ELOBPtPnS8LjCX0gI9nbl8lVkadpg==", + "@cspotcode/source-map-support": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz", + "integrity": "sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==", + "extraneous": true, "requires": { - "@types/node": "*" + "@jridgewell/trace-mapping": "0.3.9" + }, + "dependencies": { + "@jridgewell/trace-mapping": { + "version": "0.3.9", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz", + "integrity": "sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==", + "extraneous": true, + "requires": { + "@jridgewell/resolve-uri": "^3.0.3", + "@jridgewell/sourcemap-codec": "^1.4.10" + } + } } }, - "bn.js": { - "version": "4.12.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==" + "@discoveryjs/json-ext": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/@discoveryjs/json-ext/-/json-ext-0.5.7.tgz", + "integrity": "sha512-dBVuXR082gk3jsFp7Rd/JI4kytwGHecnCoTtXFb7DB6CNHp4rg5k1bhg0nWdLGLnOV71lmDzGQaLMy8iPLY0pw==", + "extraneous": true }, - "ethereum-cryptography": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-0.1.3.tgz", - "integrity": "sha512-w8/4x1SGGzc+tO97TASLja6SLd3fRIK2tLVcV2Gx4IB21hE19atll5Cq9o3d0ZmAYC/8aw0ipieTSiekAea4SQ==", + "@jridgewell/gen-mapping": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.2.tgz", + "integrity": "sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A==", + "extraneous": true, "requires": { - "@types/pbkdf2": "^3.0.0", - "@types/secp256k1": "^4.0.1", - "blakejs": "^1.1.0", - "browserify-aes": "^1.2.0", - "bs58check": "^2.1.2", - "create-hash": "^1.2.0", - "create-hmac": "^1.1.7", - "hash.js": "^1.1.7", - "keccak": "^3.0.0", - "pbkdf2": "^3.0.17", - "randombytes": "^2.1.0", - "safe-buffer": "^5.1.2", - "scrypt-js": "^3.0.0", - "secp256k1": "^4.0.1", - "setimmediate": "^1.0.5" + "@jridgewell/set-array": "^1.0.1", + "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/trace-mapping": "^0.3.9" } }, - "ethereumjs-util": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-6.2.1.tgz", - "integrity": "sha512-W2Ktez4L01Vexijrm5EB6w7dg4n/TgpoYU4avuT5T3Vmnw/eCRtiBrJfQYS/DCSvDIOLn2k57GcHdeBcgVxAqw==", - "requires": { - "@types/bn.js": "^4.11.3", - "bn.js": "^4.11.0", - "create-hash": "^1.1.2", - "elliptic": "^6.5.2", - "ethereum-cryptography": "^0.1.3", - "ethjs-util": "0.1.6", - "rlp": "^2.2.3" - } - } - } - }, - "ethereumjs-account": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/ethereumjs-account/-/ethereumjs-account-2.0.5.tgz", - "integrity": "sha512-bgDojnXGjhMwo6eXQC0bY6UK2liSFUSMwwylOmQvZbSl/D7NXQ3+vrGO46ZeOgjGfxXmgIeVNDIiHw7fNZM4VA==", - "requires": { - "ethereumjs-util": "^5.0.0", - "rlp": "^2.0.0", - "safe-buffer": "^5.1.1" - }, - "dependencies": { - "bn.js": { - "version": "4.12.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==" + "@jridgewell/resolve-uri": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz", + "integrity": "sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==", + "extraneous": true }, - "ethereum-cryptography": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-0.1.3.tgz", - "integrity": "sha512-w8/4x1SGGzc+tO97TASLja6SLd3fRIK2tLVcV2Gx4IB21hE19atll5Cq9o3d0ZmAYC/8aw0ipieTSiekAea4SQ==", - "requires": { - "@types/pbkdf2": "^3.0.0", - "@types/secp256k1": "^4.0.1", - "blakejs": "^1.1.0", - "browserify-aes": "^1.2.0", - "bs58check": "^2.1.2", - "create-hash": "^1.2.0", - "create-hmac": "^1.1.7", - "hash.js": "^1.1.7", - "keccak": "^3.0.0", - "pbkdf2": "^3.0.17", - "randombytes": "^2.1.0", - "safe-buffer": "^5.1.2", - "scrypt-js": "^3.0.0", - "secp256k1": "^4.0.1", - "setimmediate": "^1.0.5" - } + "@jridgewell/set-array": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz", + "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==", + "extraneous": true }, - "ethereumjs-util": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-5.2.1.tgz", - "integrity": "sha512-v3kT+7zdyCm1HIqWlLNrHGqHGLpGYIhjeHxQjnDXjLT2FyGJDsd3LWMYUo7pAFRrk86CR3nUJfhC81CCoJNNGQ==", - "requires": { - "bn.js": "^4.11.0", - "create-hash": "^1.1.2", - "elliptic": "^6.5.2", - "ethereum-cryptography": "^0.1.3", - "ethjs-util": "^0.1.3", - "rlp": "^2.0.0", - "safe-buffer": "^5.1.1" - } - } - } - }, - "ethereumjs-block": { - "version": "1.7.1", - "resolved": "https://registry.npmjs.org/ethereumjs-block/-/ethereumjs-block-1.7.1.tgz", - "integrity": "sha512-B+sSdtqm78fmKkBq78/QLKJbu/4Ts4P2KFISdgcuZUPDm9x+N7qgBPIIFUGbaakQh8bzuquiRVbdmvPKqbILRg==", - "requires": { - "async": "^2.0.1", - "ethereum-common": "0.2.0", - "ethereumjs-tx": "^1.2.2", - "ethereumjs-util": "^5.0.0", - "merkle-patricia-tree": "^2.1.2" - }, - "dependencies": { - "abstract-leveldown": { - "version": "2.6.3", - "resolved": "https://registry.npmjs.org/abstract-leveldown/-/abstract-leveldown-2.6.3.tgz", - "integrity": "sha512-2++wDf/DYqkPR3o5tbfdhF96EfMApo1GpPfzOsR/ZYXdkSmELlvOOEAl9iKkRsktMPHdGjO4rtkBpf2I7TiTeA==", + "@jridgewell/source-map": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.2.tgz", + "integrity": "sha512-m7O9o2uR8k2ObDysZYzdfhb08VuEml5oWGiosa1VdaPZ/A6QyPkAJuwN0Q1lhULOf6B7MtQmHENS743hWtCrgw==", + "extraneous": true, "requires": { - "xtend": "~4.0.0" + "@jridgewell/gen-mapping": "^0.3.0", + "@jridgewell/trace-mapping": "^0.3.9" } }, - "async": { - "version": "2.6.4", - "resolved": "https://registry.npmjs.org/async/-/async-2.6.4.tgz", - "integrity": "sha512-mzo5dfJYwAn29PeiJ0zvwTo04zj8HDJj0Mn8TD7sno7q12prdbnasKJHhkm2c1LgrhlJ0teaea8860oxi51mGA==", + "@jridgewell/sourcemap-codec": { + "version": "1.4.14", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz", + "integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==", + "extraneous": true + }, + "@jridgewell/trace-mapping": { + "version": "0.3.17", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.17.tgz", + "integrity": "sha512-MCNzAp77qzKca9+W/+I0+sEpaUnZoeasnghNeVc41VZCEKaCH73Vq3BZZ/SzWIgrqE4H4ceI+p+b6C0mHf9T4g==", + "extraneous": true, "requires": { - "lodash": "^4.17.14" + "@jridgewell/resolve-uri": "3.1.0", + "@jridgewell/sourcemap-codec": "1.4.14" } }, - "bn.js": { - "version": "4.12.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==" - }, - "deferred-leveldown": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/deferred-leveldown/-/deferred-leveldown-1.2.2.tgz", - "integrity": "sha512-uukrWD2bguRtXilKt6cAWKyoXrTSMo5m7crUdLfWQmu8kIm88w3QZoUL+6nhpfKVmhHANER6Re3sKoNoZ3IKMA==", + "@microsoft/api-extractor": { + "version": "https://registry.npmjs.org/@microsoft/api-extractor/-/api-extractor-7.20.1.tgz", + "integrity": "sha512-T7cqcK+JpvHGOj7cD2ZCCWS7Xgru1uOqZwrV/FSUdyKVs5fopZcbBSuetwD/akst3O7Ypryg3UOLP54S/vnVmA==", + "extraneous": true, "requires": { - "abstract-leveldown": "~2.6.0" + "@microsoft/api-extractor-model": "7.16.0", + "@microsoft/tsdoc": "0.13.2", + "@microsoft/tsdoc-config": "~0.15.2", + "@rushstack/node-core-library": "3.45.1", + "@rushstack/rig-package": "0.3.8", + "@rushstack/ts-command-line": "4.10.7", + "colors": "~1.2.1", + "lodash": "~4.17.15", + "resolve": "~1.17.0", + "semver": "~7.3.0", + "source-map": "~0.6.1", + "typescript": "~4.5.2" + }, + "dependencies": { + "typescript": { + "version": "4.5.5", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.5.5.tgz", + "integrity": "sha512-TCTIul70LyWe6IJWT8QSYeA54WQe8EjQFU4wY52Fasj5UKx88LNYKCgBEHcOMOrFF1rKGbD8v/xcNWVUq9SymA==", + "extraneous": true + } } }, - "ethereum-cryptography": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-0.1.3.tgz", - "integrity": "sha512-w8/4x1SGGzc+tO97TASLja6SLd3fRIK2tLVcV2Gx4IB21hE19atll5Cq9o3d0ZmAYC/8aw0ipieTSiekAea4SQ==", + "@microsoft/api-extractor-model": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@microsoft/api-extractor-model/-/api-extractor-model-7.16.0.tgz", + "integrity": "sha512-0FOrbNIny8mzBrzQnSIkEjAXk0JMSnPmWYxt3ZDTPVg9S8xIPzB6lfgTg9+Mimu0RKCpGKBpd+v2WcR5vGzyUQ==", + "extraneous": true, "requires": { - "@types/pbkdf2": "^3.0.0", - "@types/secp256k1": "^4.0.1", - "blakejs": "^1.1.0", - "browserify-aes": "^1.2.0", - "bs58check": "^2.1.2", - "create-hash": "^1.2.0", - "create-hmac": "^1.1.7", - "hash.js": "^1.1.7", - "keccak": "^3.0.0", - "pbkdf2": "^3.0.17", - "randombytes": "^2.1.0", - "safe-buffer": "^5.1.2", - "scrypt-js": "^3.0.0", - "secp256k1": "^4.0.1", - "setimmediate": "^1.0.5" + "@microsoft/tsdoc": "0.13.2", + "@microsoft/tsdoc-config": "~0.15.2", + "@rushstack/node-core-library": "3.45.1" } }, - "ethereumjs-tx": { - "version": "1.3.7", - "resolved": "https://registry.npmjs.org/ethereumjs-tx/-/ethereumjs-tx-1.3.7.tgz", - "integrity": "sha512-wvLMxzt1RPhAQ9Yi3/HKZTn0FZYpnsmQdbKYfUUpi4j1SEIcbkd9tndVjcPrufY3V7j2IebOpC00Zp2P/Ay2kA==", + "@microsoft/tsdoc": { + "version": "0.13.2", + "resolved": "https://registry.npmjs.org/@microsoft/tsdoc/-/tsdoc-0.13.2.tgz", + "integrity": "sha512-WrHvO8PDL8wd8T2+zBGKrMwVL5IyzR3ryWUsl0PXgEV0QHup4mTLi0QcATefGI6Gx9Anu7vthPyyyLpY0EpiQg==", + "extraneous": true + }, + "@microsoft/tsdoc-config": { + "version": "0.15.2", + "resolved": "https://registry.npmjs.org/@microsoft/tsdoc-config/-/tsdoc-config-0.15.2.tgz", + "integrity": "sha512-mK19b2wJHSdNf8znXSMYVShAHktVr/ib0Ck2FA3lsVBSEhSI/TfXT7DJQkAYgcztTuwazGcg58ZjYdk0hTCVrA==", + "extraneous": true, "requires": { - "ethereum-common": "^0.0.18", - "ethereumjs-util": "^5.0.0" + "@microsoft/tsdoc": "0.13.2", + "ajv": "~6.12.6", + "jju": "~1.4.0", + "resolve": "~1.19.0" }, "dependencies": { - "ethereum-common": { - "version": "0.0.18", - "resolved": "https://registry.npmjs.org/ethereum-common/-/ethereum-common-0.0.18.tgz", - "integrity": "sha512-EoltVQTRNg2Uy4o84qpa2aXymXDJhxm7eos/ACOg0DG4baAbMjhbdAEsx9GeE8sC3XCxnYvrrzZDH8D8MtA2iQ==" + "resolve": { + "version": "1.19.0", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.19.0.tgz", + "integrity": "sha512-rArEXAgsBG4UgRGcynxWIWKFvh/XZCcS8UJdHhwy91zwAvCZIbcs+vAbflgBnNjYMs/i/i+/Ux6IZhML1yPvxg==", + "extraneous": true, + "requires": { + "is-core-module": "^2.1.0", + "path-parse": "^1.0.6" + } } } }, - "ethereumjs-util": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-5.2.1.tgz", - "integrity": "sha512-v3kT+7zdyCm1HIqWlLNrHGqHGLpGYIhjeHxQjnDXjLT2FyGJDsd3LWMYUo7pAFRrk86CR3nUJfhC81CCoJNNGQ==", + "@rushstack/node-core-library": { + "version": "3.45.1", + "resolved": "https://registry.npmjs.org/@rushstack/node-core-library/-/node-core-library-3.45.1.tgz", + "integrity": "sha512-BwdssTNe007DNjDBxJgInHg8ePytIPyT0La7ZZSQZF9+rSkT42AygXPGvbGsyFfEntjr4X37zZSJI7yGzL16cQ==", + "extraneous": true, "requires": { - "bn.js": "^4.11.0", - "create-hash": "^1.1.2", - "elliptic": "^6.5.2", - "ethereum-cryptography": "^0.1.3", - "ethjs-util": "^0.1.3", - "rlp": "^2.0.0", - "safe-buffer": "^5.1.1" + "@types/node": "12.20.24", + "colors": "~1.2.1", + "fs-extra": "~7.0.1", + "import-lazy": "~4.0.0", + "jju": "~1.4.0", + "resolve": "~1.17.0", + "semver": "~7.3.0", + "timsort": "~0.3.0", + "z-schema": "~5.0.2" + }, + "dependencies": { + "@types/node": { + "version": "12.20.24", + "resolved": "https://registry.npmjs.org/@types/node/-/node-12.20.24.tgz", + "integrity": "sha512-yxDeaQIAJlMav7fH5AQqPH1u8YIuhYJXYBzxaQ4PifsU0GDO38MSdmEDeRlIxrKbC6NbEaaEHDanWb+y30U8SQ==", + "extraneous": true + } } }, - "level-codec": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/level-codec/-/level-codec-7.0.1.tgz", - "integrity": "sha512-Ua/R9B9r3RasXdRmOtd+t9TCOEIIlts+TN/7XTT2unhDaL6sJn83S3rUyljbr6lVtw49N3/yA0HHjpV6Kzb2aQ==" + "@rushstack/rig-package": { + "version": "0.3.8", + "resolved": "https://registry.npmjs.org/@rushstack/rig-package/-/rig-package-0.3.8.tgz", + "integrity": "sha512-MDWg1xovea99PWloSiYMjFcCLsrdjFtYt6aOyHNs5ojn5mxrzR6U9F83hvbQjTWnKPMvZtr0vcek+4n+OQOp3Q==", + "extraneous": true, + "requires": { + "resolve": "~1.17.0", + "strip-json-comments": "~3.1.1" + } }, - "level-errors": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/level-errors/-/level-errors-1.0.5.tgz", - "integrity": "sha512-/cLUpQduF6bNrWuAC4pwtUKA5t669pCsCi2XbmojG2tFeOr9j6ShtdDCtFFQO1DRt+EVZhx9gPzP9G2bUaG4ig==", + "@rushstack/ts-command-line": { + "version": "4.10.7", + "resolved": "https://registry.npmjs.org/@rushstack/ts-command-line/-/ts-command-line-4.10.7.tgz", + "integrity": "sha512-CjS+DfNXUSO5Ab2wD1GBGtUTnB02OglRWGqfaTcac9Jn45V5MeUOsq/wA8wEeS5Y/3TZ2P1k+IWdVDiuOFP9Og==", + "extraneous": true, "requires": { - "errno": "~0.1.1" + "@types/argparse": "1.0.38", + "argparse": "~1.0.9", + "colors": "~1.2.1", + "string-argv": "~0.3.1" } }, - "level-iterator-stream": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/level-iterator-stream/-/level-iterator-stream-1.3.1.tgz", - "integrity": "sha512-1qua0RHNtr4nrZBgYlpV0qHHeHpcRRWTxEZJ8xsemoHAXNL5tbooh4tPEEqIqsbWCAJBmUmkwYK/sW5OrFjWWw==", + "@trufflesuite/bigint-buffer": { + "version": "1.1.10", + "resolved": "https://registry.npmjs.org/@trufflesuite/bigint-buffer/-/bigint-buffer-1.1.10.tgz", + "integrity": "sha512-pYIQC5EcMmID74t26GCC67946mgTJFiLXOT/BYozgrd4UEY2JHEGLhWi9cMiQCt5BSqFEvKkCHNnoj82SRjiEw==", + "bundled": true, "requires": { - "inherits": "^2.0.1", - "level-errors": "^1.0.3", - "readable-stream": "^1.0.33", - "xtend": "^4.0.0" + "node-gyp-build": "4.4.0" }, "dependencies": { - "isarray": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", - "integrity": "sha512-D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ==" - }, - "readable-stream": { - "version": "1.1.14", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz", - "integrity": "sha512-+MeVjFf4L44XUkhM1eYbD8fyEsxcV81pqMSR5gblfcLCHfZvbrqy4/qYHE+/R5HoBUT11WV5O08Cr1n3YXkWVQ==", - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.1", - "isarray": "0.0.1", - "string_decoder": "~0.10.x" - } - }, - "string_decoder": { - "version": "0.10.31", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", - "integrity": "sha512-ev2QzSzWPYmy9GuqfIVildA4OdcGLeFZQrq5ys6RtiuF+RQQiZWr8TZNyAcuVXyQRYfEO+MsoB/1BuQVhOJuoQ==" + "node-gyp-build": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.4.0.tgz", + "integrity": "sha512-amJnQCcgtRVw9SvoebO3BKGESClrfXGCUTX9hSn1OuGQTQBOZmVd0Z0OlecpuRksKvbsUqALE8jls/ErClAPuQ==", + "bundled": true } } }, - "level-ws": { - "version": "0.0.0", - "resolved": "https://registry.npmjs.org/level-ws/-/level-ws-0.0.0.tgz", - "integrity": "sha512-XUTaO/+Db51Uiyp/t7fCMGVFOTdtLS/NIACxE/GHsij15mKzxksZifKVjlXDF41JMUP/oM1Oc4YNGdKnc3dVLw==", + "@trufflesuite/uws-js-unofficial": { + "version": "20.30.0-unofficial.0", + "resolved": "https://registry.npmjs.org/@trufflesuite/uws-js-unofficial/-/uws-js-unofficial-20.30.0-unofficial.0.tgz", + "integrity": "sha512-r5X0aOQcuT6pLwTRLD+mPnAM/nlKtvIK4Z+My++A8tTOR0qTjNRx8UB8jzRj3D+p9PMAp5LnpCUUGmz7/TppwA==", "requires": { - "readable-stream": "~1.0.15", - "xtend": "~2.1.1" + "bufferutil": "4.0.7", + "utf-8-validate": "6.0.3", + "ws": "8.13.0" }, "dependencies": { - "isarray": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", - "integrity": "sha512-D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ==" - }, - "readable-stream": { - "version": "1.0.34", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz", - "integrity": "sha512-ok1qVCJuRkNmvebYikljxJA/UEsKwLl2nI1OmaqAu4/UE+h0wKCHok4XkL/gvi39OacXvw59RJUOFUkDib2rHg==", + "bufferutil": { + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/bufferutil/-/bufferutil-4.0.7.tgz", + "integrity": "sha512-kukuqc39WOHtdxtw4UScxF/WVnMFVSQVKhtx3AjZJzhd0RGZZldcrfSEbVsWWe6KNH253574cq5F+wpv0G9pJw==", + "optional": true, "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.1", - "isarray": "0.0.1", - "string_decoder": "~0.10.x" + "node-gyp-build": "^4.3.0" } }, - "string_decoder": { - "version": "0.10.31", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", - "integrity": "sha512-ev2QzSzWPYmy9GuqfIVildA4OdcGLeFZQrq5ys6RtiuF+RQQiZWr8TZNyAcuVXyQRYfEO+MsoB/1BuQVhOJuoQ==" - }, - "xtend": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/xtend/-/xtend-2.1.2.tgz", - "integrity": "sha512-vMNKzr2rHP9Dp/e1NQFnLQlwlhp9L/LfvnsVdHxN1f+uggyVI3i08uD14GPvCToPkdsRfyPqIyYGmIk58V98ZQ==", + "utf-8-validate": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/utf-8-validate/-/utf-8-validate-6.0.3.tgz", + "integrity": "sha512-uIuGf9TWQ/y+0Lp+KGZCMuJWc3N9BHA+l/UmHd/oUHwJJDeysyTRxNQVkbzsIWfGFbRe3OcgML/i0mvVRPOyDA==", + "optional": true, "requires": { - "object-keys": "~0.4.0" + "node-gyp-build": "^4.3.0" } + }, + "ws": { + "version": "8.13.0", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.13.0.tgz", + "integrity": "sha512-x9vcZYTrFPC7aSIbj7sRCYo7L/Xb8Iy+pW0ng0wt2vCJv7M9HOMy0UoN3rr+IFC7hb7vXoqS+P9ktyLLLhO+LA==", + "requires": {} } } }, - "levelup": { - "version": "1.3.9", - "resolved": "https://registry.npmjs.org/levelup/-/levelup-1.3.9.tgz", - "integrity": "sha512-VVGHfKIlmw8w1XqpGOAGwq6sZm2WwWLmlDcULkKWQXEA5EopA8OBNJ2Ck2v6bdk8HeEZSbCSEgzXadyQFm76sQ==", + "@tsconfig/node10": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.9.tgz", + "integrity": "sha512-jNsYVVxU8v5g43Erja32laIDHXeoNvFEpX33OK4d6hljo3jDhCBDhx5dhCCTMWUojscpAagGiRkBKxpdl9fxqA==", + "extraneous": true + }, + "@tsconfig/node12": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/@tsconfig/node12/-/node12-1.0.11.tgz", + "integrity": "sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==", + "extraneous": true + }, + "@tsconfig/node14": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@tsconfig/node14/-/node14-1.0.3.tgz", + "integrity": "sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==", + "extraneous": true + }, + "@tsconfig/node16": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.3.tgz", + "integrity": "sha512-yOlFc+7UtL/89t2ZhjPvvB/DeAr3r+Dq58IgzsFkOAvVC6NMJXmCGjbptdXdR9qsX7pKcTL+s87FtYREi2dEEQ==", + "extraneous": true + }, + "@types/abstract-leveldown": { + "version": "https://registry.npmjs.org/@types/abstract-leveldown/-/abstract-leveldown-7.2.0.tgz", + "integrity": "sha512-q5veSX6zjUy/DlDhR4Y4cU0k2Ar+DT2LUraP00T19WLmTO6Se1djepCCaqU6nQrwcJ5Hyo/CWqxTzrrFg8eqbQ==", + "extraneous": true + }, + "@types/argparse": { + "version": "1.0.38", + "resolved": "https://registry.npmjs.org/@types/argparse/-/argparse-1.0.38.tgz", + "integrity": "sha512-ebDJ9b0e702Yr7pWgB0jzm+CX4Srzz8RcXtLJDJB+BSccqMa36uyH/zUsSYao5+BD1ytv3k3rPYCq4mAE1hsXA==", + "extraneous": true + }, + "@types/bn.js": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/@types/bn.js/-/bn.js-5.1.0.tgz", + "integrity": "sha512-QSSVYj7pYFN49kW77o2s9xTCwZ8F2xLbjLLSEVh8D2F4JUhZtPAGOFLTD+ffqksBx/u4cE/KImFjyhqCjn/LIA==", "requires": { - "deferred-leveldown": "~1.2.1", - "level-codec": "~7.0.0", - "level-errors": "~1.0.3", - "level-iterator-stream": "~1.3.0", - "prr": "~1.0.1", - "semver": "~5.4.1", - "xtend": "~4.0.0" + "@types/node": "*" } }, - "memdown": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/memdown/-/memdown-1.4.1.tgz", - "integrity": "sha512-iVrGHZB8i4OQfM155xx8akvG9FIj+ht14DX5CQkCTG4EHzZ3d3sgckIf/Lm9ivZalEsFuEVnWv2B2WZvbrro2w==", + "@types/eslint": { + "version": "8.4.10", + "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-8.4.10.tgz", + "integrity": "sha512-Sl/HOqN8NKPmhWo2VBEPm0nvHnu2LL3v9vKo8MEq0EtbJ4eVzGPl41VNPvn5E1i5poMk4/XD8UriLHpJvEP/Nw==", + "extraneous": true, "requires": { - "abstract-leveldown": "~2.7.1", - "functional-red-black-tree": "^1.0.1", - "immediate": "^3.2.3", - "inherits": "~2.0.1", - "ltgt": "~2.2.0", - "safe-buffer": "~5.1.1" - }, - "dependencies": { - "abstract-leveldown": { - "version": "2.7.2", - "resolved": "https://registry.npmjs.org/abstract-leveldown/-/abstract-leveldown-2.7.2.tgz", - "integrity": "sha512-+OVvxH2rHVEhWLdbudP6p0+dNMXu8JA1CbhP19T8paTYAcX7oJ4OVjT+ZUVpv7mITxXHqDMej+GdqXBmXkw09w==", - "requires": { - "xtend": "~4.0.0" - } - } + "@types/estree": "*", + "@types/json-schema": "*" } }, - "merkle-patricia-tree": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/merkle-patricia-tree/-/merkle-patricia-tree-2.3.2.tgz", - "integrity": "sha512-81PW5m8oz/pz3GvsAwbauj7Y00rqm81Tzad77tHBwU7pIAtN+TJnMSOJhxBKflSVYhptMMb9RskhqHqrSm1V+g==", + "@types/eslint-scope": { + "version": "3.7.4", + "resolved": "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.4.tgz", + "integrity": "sha512-9K4zoImiZc3HlIp6AVUDE4CWYx22a+lhSZMYNpbjW04+YF0KWj4pJXnEMjdnFTiQibFFmElcsasJXDbdI/EPhA==", + "extraneous": true, "requires": { - "async": "^1.4.2", - "ethereumjs-util": "^5.0.0", - "level-ws": "0.0.0", - "levelup": "^1.2.1", - "memdown": "^1.0.0", - "readable-stream": "^2.0.0", - "rlp": "^2.0.0", - "semaphore": ">=1.0.1" + "@types/eslint": "*", + "@types/estree": "*" + } + }, + "@types/estree": { + "version": "0.0.50", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.50.tgz", + "integrity": "sha512-C6N5s2ZFtuZRj54k2/zyRhNDjJwwcViAM3Nbm8zjBpbqAdZ00mr0CFxvSKeO8Y/e03WVFLpQMdHYVfUd6SB+Hw==", + "extraneous": true + }, + "@types/json-schema": { + "version": "7.0.11", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.11.tgz", + "integrity": "sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ==", + "extraneous": true + }, + "@types/lru-cache": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/@types/lru-cache/-/lru-cache-5.1.1.tgz", + "integrity": "sha512-ssE3Vlrys7sdIzs5LOxCzTVMsU7i9oa/IaW92wF32JFb3CVczqOkru2xspuKczHEbG3nvmPY7IFqVmGGHdNbYw==" + }, + "@types/mocha": { + "version": "https://registry.npmjs.org/@types/mocha/-/mocha-9.0.0.tgz", + "integrity": "sha512-scN0hAWyLVAvLR9AyW7HoFF5sJZglyBsbPuHO4fv7JRvfmPBMfp1ozWqOf/e4wwPNxezBZXRfWzMb6iFLgEVRA==", + "extraneous": true + }, + "@types/node": { + "version": "17.0.0", + "resolved": "https://registry.npmjs.org/@types/node/-/node-17.0.0.tgz", + "integrity": "sha512-eMhwJXc931Ihh4tkU+Y7GiLzT/y/DBNpNtr4yU9O2w3SYBsr9NaOPhQlLKRmoWtI54uNwuo0IOUFQjVOTZYRvw==" + }, + "@types/seedrandom": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@types/seedrandom/-/seedrandom-3.0.1.tgz", + "integrity": "sha512-giB9gzDeiCeloIXDgzFBCgjj1k4WxcDrZtGl6h1IqmUPlxF+Nx8Ve+96QCyDZ/HseB/uvDsKbpib9hU5cU53pw==" + }, + "@ungap/promise-all-settled": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@ungap/promise-all-settled/-/promise-all-settled-1.1.2.tgz", + "integrity": "sha512-sL/cEvJWAnClXw0wHk85/2L0G6Sj8UB0Ctc1TEMbKSsmpRosqhwj9gWgFRZSrBr2f9tiXISwNhCPmlfqUqyb9Q==", + "extraneous": true + }, + "@webassemblyjs/ast": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.11.1.tgz", + "integrity": "sha512-ukBh14qFLjxTQNTXocdyksN5QdM28S1CxHt2rdskFyL+xFV7VremuBLVbmCePj+URalXBENx/9Lm7lnhihtCSw==", + "extraneous": true, + "requires": { + "@webassemblyjs/helper-numbers": "1.11.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.1" + } + }, + "@webassemblyjs/floating-point-hex-parser": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.1.tgz", + "integrity": "sha512-iGRfyc5Bq+NnNuX8b5hwBrRjzf0ocrJPI6GWFodBFzmFnyvrQ83SHKhmilCU/8Jv67i4GJZBMhEzltxzcNagtQ==", + "extraneous": true + }, + "@webassemblyjs/helper-api-error": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.1.tgz", + "integrity": "sha512-RlhS8CBCXfRUR/cwo2ho9bkheSXG0+NwooXcc3PAILALf2QLdFyj7KGsKRbVc95hZnhnERon4kW/D3SZpp6Tcg==", + "extraneous": true + }, + "@webassemblyjs/helper-buffer": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.11.1.tgz", + "integrity": "sha512-gwikF65aDNeeXa8JxXa2BAk+REjSyhrNC9ZwdT0f8jc4dQQeDQ7G4m0f2QCLPJiMTTO6wfDmRmj/pW0PsUvIcA==", + "extraneous": true + }, + "@webassemblyjs/helper-numbers": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.1.tgz", + "integrity": "sha512-vDkbxiB8zfnPdNK9Rajcey5C0w+QJugEglN0of+kmO8l7lDb77AnlKYQF7aarZuCrv+l0UvqL+68gSDr3k9LPQ==", + "extraneous": true, + "requires": { + "@webassemblyjs/floating-point-hex-parser": "1.11.1", + "@webassemblyjs/helper-api-error": "1.11.1", + "@xtuc/long": "4.2.2" + } + }, + "@webassemblyjs/helper-wasm-bytecode": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.1.tgz", + "integrity": "sha512-PvpoOGiJwXeTrSf/qfudJhwlvDQxFgelbMqtq52WWiXC6Xgg1IREdngmPN3bs4RoO83PnL/nFrxucXj1+BX62Q==", + "extraneous": true + }, + "@webassemblyjs/helper-wasm-section": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.11.1.tgz", + "integrity": "sha512-10P9No29rYX1j7F3EVPX3JvGPQPae+AomuSTPiF9eBQeChHI6iqjMIwR9JmOJXwpnn/oVGDk7I5IlskuMwU/pg==", + "extraneous": true, + "requires": { + "@webassemblyjs/ast": "1.11.1", + "@webassemblyjs/helper-buffer": "1.11.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.1", + "@webassemblyjs/wasm-gen": "1.11.1" + } + }, + "@webassemblyjs/ieee754": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.11.1.tgz", + "integrity": "sha512-hJ87QIPtAMKbFq6CGTkZYJivEwZDbQUgYd3qKSadTNOhVY7p+gfP6Sr0lLRVTaG1JjFj+r3YchoqRYxNH3M0GQ==", + "extraneous": true, + "requires": { + "@xtuc/ieee754": "^1.2.0" + } + }, + "@webassemblyjs/leb128": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.11.1.tgz", + "integrity": "sha512-BJ2P0hNZ0u+Th1YZXJpzW6miwqQUGcIHT1G/sf72gLVD9DZ5AdYTqPNbHZh6K1M5VmKvFXwGSWZADz+qBWxeRw==", + "extraneous": true, + "requires": { + "@xtuc/long": "4.2.2" + } + }, + "@webassemblyjs/utf8": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.11.1.tgz", + "integrity": "sha512-9kqcxAEdMhiwQkHpkNiorZzqpGrodQQ2IGrHHxCy+Ozng0ofyMA0lTqiLkVs1uzTRejX+/O0EOT7KxqVPuXosQ==", + "extraneous": true + }, + "@webassemblyjs/wasm-edit": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.11.1.tgz", + "integrity": "sha512-g+RsupUC1aTHfR8CDgnsVRVZFJqdkFHpsHMfJuWQzWU3tvnLC07UqHICfP+4XyL2tnr1amvl1Sdp06TnYCmVkA==", + "extraneous": true, + "requires": { + "@webassemblyjs/ast": "1.11.1", + "@webassemblyjs/helper-buffer": "1.11.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.1", + "@webassemblyjs/helper-wasm-section": "1.11.1", + "@webassemblyjs/wasm-gen": "1.11.1", + "@webassemblyjs/wasm-opt": "1.11.1", + "@webassemblyjs/wasm-parser": "1.11.1", + "@webassemblyjs/wast-printer": "1.11.1" + } + }, + "@webassemblyjs/wasm-gen": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.11.1.tgz", + "integrity": "sha512-F7QqKXwwNlMmsulj6+O7r4mmtAlCWfO/0HdgOxSklZfQcDu0TpLiD1mRt/zF25Bk59FIjEuGAIyn5ei4yMfLhA==", + "extraneous": true, + "requires": { + "@webassemblyjs/ast": "1.11.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.1", + "@webassemblyjs/ieee754": "1.11.1", + "@webassemblyjs/leb128": "1.11.1", + "@webassemblyjs/utf8": "1.11.1" + } + }, + "@webassemblyjs/wasm-opt": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.11.1.tgz", + "integrity": "sha512-VqnkNqnZlU5EB64pp1l7hdm3hmQw7Vgqa0KF/KCNO9sIpI6Fk6brDEiX+iCOYrvMuBWDws0NkTOxYEb85XQHHw==", + "extraneous": true, + "requires": { + "@webassemblyjs/ast": "1.11.1", + "@webassemblyjs/helper-buffer": "1.11.1", + "@webassemblyjs/wasm-gen": "1.11.1", + "@webassemblyjs/wasm-parser": "1.11.1" + } + }, + "@webassemblyjs/wasm-parser": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.11.1.tgz", + "integrity": "sha512-rrBujw+dJu32gYB7/Lup6UhdkPx9S9SnobZzRVL7VcBH9Bt9bCBLEuX/YXOOtBsOZ4NQrRykKhffRWHvigQvOA==", + "extraneous": true, + "requires": { + "@webassemblyjs/ast": "1.11.1", + "@webassemblyjs/helper-api-error": "1.11.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.1", + "@webassemblyjs/ieee754": "1.11.1", + "@webassemblyjs/leb128": "1.11.1", + "@webassemblyjs/utf8": "1.11.1" + } + }, + "@webassemblyjs/wast-printer": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.11.1.tgz", + "integrity": "sha512-IQboUWM4eKzWW+N/jij2sRatKMh99QEelo3Eb2q0qXkvPRISAj8Qxtmw5itwqK+TTkBuUIE45AxYPToqPtL5gg==", + "extraneous": true, + "requires": { + "@webassemblyjs/ast": "1.11.1", + "@xtuc/long": "4.2.2" + } + }, + "@webpack-cli/configtest": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@webpack-cli/configtest/-/configtest-1.2.0.tgz", + "integrity": "sha512-4FB8Tj6xyVkyqjj1OaTqCjXYULB9FMkqQ8yGrZjRDrYh0nOE+7Lhs45WioWQQMV+ceFlE368Ukhe6xdvJM9Egg==", + "extraneous": true + }, + "@webpack-cli/info": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@webpack-cli/info/-/info-1.5.0.tgz", + "integrity": "sha512-e8tSXZpw2hPl2uMJY6fsMswaok5FdlGNRTktvFk2sD8RjH0hE2+XistawJx1vmKteh4NmGmNUrp+Tb2w+udPcQ==", + "extraneous": true, + "requires": { + "envinfo": "^7.7.3" + } + }, + "@webpack-cli/serve": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/@webpack-cli/serve/-/serve-1.7.0.tgz", + "integrity": "sha512-oxnCNGj88fL+xzV+dacXs44HcDwf1ovs3AuEzvP7mqXw7fQntqIhQ1BRmynh4qEKQSSSRSWVyXRjmTbZIX9V2Q==", + "extraneous": true + }, + "@xtuc/ieee754": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz", + "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==", + "extraneous": true + }, + "@xtuc/long": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/@xtuc/long/-/long-4.2.2.tgz", + "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==", + "extraneous": true + }, + "abstract-level": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/abstract-level/-/abstract-level-1.0.3.tgz", + "integrity": "sha512-t6jv+xHy+VYwc4xqZMn2Pa9DjcdzvzZmQGRjTFc8spIbRGHgBrEKbPq+rYXc7CCo0lxgYvSgKVg9qZAhpVQSjA==", + "requires": { + "buffer": "^6.0.3", + "catering": "^2.1.0", + "is-buffer": "^2.0.5", + "level-supports": "^4.0.0", + "level-transcoder": "^1.0.1", + "module-error": "^1.0.1", + "queue-microtask": "^1.2.3" }, "dependencies": { - "async": { - "version": "1.5.2", - "resolved": "https://registry.npmjs.org/async/-/async-1.5.2.tgz", - "integrity": "sha512-nSVgobk4rv61R9PUSDtYt7mPVB2olxNR5RWJcAsH676/ef11bUZwvu7+RGYrYauVdDPcO519v68wRhXQtxsV9w==" + "level-supports": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/level-supports/-/level-supports-4.0.1.tgz", + "integrity": "sha512-PbXpve8rKeNcZ9C1mUicC9auIYFyGpkV9/i6g76tLgANwWhtG2v7I4xNBUlkn3lE2/dZF3Pi0ygYGtLc4RXXdA==" } } }, - "object-keys": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-0.4.0.tgz", - "integrity": "sha512-ncrLw+X55z7bkl5PnUvHwFK9FcGuFYo9gtjws2XtSzL+aZ8tm830P60WJ0dSmFVaSalWieW5MD7kEdnXda9yJw==" + "abstract-leveldown": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/abstract-leveldown/-/abstract-leveldown-7.2.0.tgz", + "integrity": "sha512-DnhQwcFEaYsvYDnACLZhMmCWd3rkOeEvglpa4q5i/5Jlm3UIsWaxVzuXvDLFCSCWRO3yy2/+V/G7FusFgejnfQ==", + "bundled": true, + "requires": { + "buffer": "^6.0.3", + "catering": "^2.0.0", + "is-buffer": "^2.0.5", + "level-concat-iterator": "^3.0.0", + "level-supports": "^2.0.1", + "queue-microtask": "^1.2.3" + } }, - "readable-stream": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "acorn": { + "version": "8.8.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.1.tgz", + "integrity": "sha512-7zFpHzhnqYKrkYdUjF1HI1bzd0VygEGX8lFk4k5zVMqHEoES+P+7TKI+EvLO9WVMJ8eekdO0aDEK044xTXwPPA==", + "extraneous": true + }, + "acorn-import-assertions": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/acorn-import-assertions/-/acorn-import-assertions-1.8.0.tgz", + "integrity": "sha512-m7VZ3jwz4eK6A4Vtt8Ew1/mNbP24u0FhdyfA7fSvnJR6LMdfOYnmuIrrJAgrYfYJ10F/otaHTtrtrtmHdMNzEw==", + "extraneous": true + }, + "acorn-walk": { + "version": "8.2.0", + "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.2.0.tgz", + "integrity": "sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==", + "extraneous": true + }, + "ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "extraneous": true, "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" } }, - "safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + "ajv-keywords": { + "version": "3.5.2", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", + "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", + "extraneous": true }, - "semver": { - "version": "5.4.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.4.1.tgz", - "integrity": "sha512-WfG/X9+oATh81XtllIo/I8gOiY9EXRdv1cQdyykeXK17YcUW3EXUAi2To4pcH6nZtJPr7ZOpM5OMyWJZm+8Rsg==" + "ansi-colors": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz", + "integrity": "sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==", + "extraneous": true }, - "string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "extraneous": true + }, + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "extraneous": true, "requires": { - "safe-buffer": "~5.1.0" + "color-convert": "^2.0.1" } - } - } - }, - "ethereumjs-common": { - "version": "1.5.2", - "resolved": "https://registry.npmjs.org/ethereumjs-common/-/ethereumjs-common-1.5.2.tgz", - "integrity": "sha512-hTfZjwGX52GS2jcVO6E2sx4YuFnf0Fhp5ylo4pEPhEffNln7vS59Hr5sLnp3/QCazFLluuBZ+FZ6J5HTp0EqCA==" - }, - "ethereumjs-tx": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ethereumjs-tx/-/ethereumjs-tx-2.1.2.tgz", - "integrity": "sha512-zZEK1onCeiORb0wyCXUvg94Ve5It/K6GD1K+26KfFKodiBiS6d9lfCXlUKGBBdQ+bv7Day+JK0tj1K+BeNFRAw==", - "requires": { - "ethereumjs-common": "^1.5.0", - "ethereumjs-util": "^6.0.0" - }, - "dependencies": { - "@types/bn.js": { - "version": "4.11.6", - "resolved": "https://registry.npmjs.org/@types/bn.js/-/bn.js-4.11.6.tgz", - "integrity": "sha512-pqr857jrp2kPuO9uRjZ3PwnJTjoQy+fcdxvBTvHm6dkmEL9q+hDD/2j/0ELOBPtPnS8LjCX0gI9nbl8lVkadpg==", + }, + "anymatch": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", + "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", + "extraneous": true, "requires": { - "@types/node": "*" + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" } }, - "bn.js": { - "version": "4.12.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==" + "arg": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz", + "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==", + "extraneous": true }, - "ethereum-cryptography": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-0.1.3.tgz", - "integrity": "sha512-w8/4x1SGGzc+tO97TASLja6SLd3fRIK2tLVcV2Gx4IB21hE19atll5Cq9o3d0ZmAYC/8aw0ipieTSiekAea4SQ==", + "argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "extraneous": true, "requires": { - "@types/pbkdf2": "^3.0.0", - "@types/secp256k1": "^4.0.1", - "blakejs": "^1.1.0", - "browserify-aes": "^1.2.0", - "bs58check": "^2.1.2", - "create-hash": "^1.2.0", - "create-hmac": "^1.1.7", - "hash.js": "^1.1.7", - "keccak": "^3.0.0", - "pbkdf2": "^3.0.17", - "randombytes": "^2.1.0", - "safe-buffer": "^5.1.2", - "scrypt-js": "^3.0.0", - "secp256k1": "^4.0.1", - "setimmediate": "^1.0.5" + "sprintf-js": "~1.0.2" } }, - "ethereumjs-util": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-6.2.1.tgz", - "integrity": "sha512-W2Ktez4L01Vexijrm5EB6w7dg4n/TgpoYU4avuT5T3Vmnw/eCRtiBrJfQYS/DCSvDIOLn2k57GcHdeBcgVxAqw==", + "asn1.js": { + "version": "5.4.1", + "resolved": "https://registry.npmjs.org/asn1.js/-/asn1.js-5.4.1.tgz", + "integrity": "sha512-+I//4cYPccV8LdmBLiX8CYvf9Sp3vQsrqu2QNXRcrbiWvcx/UdlFiqUJJzxRQxgsZmvhXhn4cSKeSmoFjVdupA==", + "extraneous": true, "requires": { - "@types/bn.js": "^4.11.3", - "bn.js": "^4.11.0", - "create-hash": "^1.1.2", - "elliptic": "^6.5.2", - "ethereum-cryptography": "^0.1.3", - "ethjs-util": "0.1.6", - "rlp": "^2.2.3" + "bn.js": "^4.0.0", + "inherits": "^2.0.1", + "minimalistic-assert": "^1.0.0", + "safer-buffer": "^2.1.0" + }, + "dependencies": { + "bn.js": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", + "extraneous": true + } } - } - } - }, - "ethereumjs-util": { - "version": "7.1.5", - "resolved": "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-7.1.5.tgz", - "integrity": "sha512-SDl5kKrQAudFBUe5OJM9Ac6WmMyYmXX/6sTmLZ3ffG2eY6ZIGBes3pEDxNN6V72WyOw4CPD5RomKdsa8DAAwLg==", - "requires": { - "@types/bn.js": "^5.1.0", - "bn.js": "^5.1.2", - "create-hash": "^1.1.2", - "ethereum-cryptography": "^0.1.3", - "rlp": "^2.2.4" - }, - "dependencies": { - "ethereum-cryptography": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-0.1.3.tgz", - "integrity": "sha512-w8/4x1SGGzc+tO97TASLja6SLd3fRIK2tLVcV2Gx4IB21hE19atll5Cq9o3d0ZmAYC/8aw0ipieTSiekAea4SQ==", + }, + "assert": { + "version": "https://registry.npmjs.org/assert/-/assert-2.0.0.tgz", + "integrity": "sha512-se5Cd+js9dXJnu6Ag2JFc00t+HmHOen+8Q+L7O9zI0PqQXr20uk2J0XQqMxZEeo5U50o8Nvmmx7dZrl+Ufr35A==", + "extraneous": true, "requires": { - "@types/pbkdf2": "^3.0.0", - "@types/secp256k1": "^4.0.1", - "blakejs": "^1.1.0", - "browserify-aes": "^1.2.0", - "bs58check": "^2.1.2", - "create-hash": "^1.2.0", - "create-hmac": "^1.1.7", - "hash.js": "^1.1.7", - "keccak": "^3.0.0", - "pbkdf2": "^3.0.17", - "randombytes": "^2.1.0", - "safe-buffer": "^5.1.2", - "scrypt-js": "^3.0.0", - "secp256k1": "^4.0.1", - "setimmediate": "^1.0.5" + "es6-object-assign": "^1.1.0", + "is-nan": "^1.2.1", + "object-is": "^1.0.1", + "util": "^0.12.0" } - } - } - }, - "ethereumjs-vm": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/ethereumjs-vm/-/ethereumjs-vm-2.6.0.tgz", - "integrity": "sha512-r/XIUik/ynGbxS3y+mvGnbOKnuLo40V5Mj1J25+HEO63aWYREIqvWeRO/hnROlMBE5WoniQmPmhiaN0ctiHaXw==", - "requires": { - "async": "^2.1.2", - "async-eventemitter": "^0.2.2", - "ethereumjs-account": "^2.0.3", - "ethereumjs-block": "~2.2.0", - "ethereumjs-common": "^1.1.0", - "ethereumjs-util": "^6.0.0", - "fake-merkle-patricia-tree": "^1.0.1", - "functional-red-black-tree": "^1.0.1", - "merkle-patricia-tree": "^2.3.2", - "rustbn.js": "~0.2.0", - "safe-buffer": "^5.1.1" - }, - "dependencies": { - "@types/bn.js": { - "version": "4.11.6", - "resolved": "https://registry.npmjs.org/@types/bn.js/-/bn.js-4.11.6.tgz", - "integrity": "sha512-pqr857jrp2kPuO9uRjZ3PwnJTjoQy+fcdxvBTvHm6dkmEL9q+hDD/2j/0ELOBPtPnS8LjCX0gI9nbl8lVkadpg==", + }, + "async": { + "version": "2.6.4", + "resolved": "https://registry.npmjs.org/async/-/async-2.6.4.tgz", + "integrity": "sha512-mzo5dfJYwAn29PeiJ0zvwTo04zj8HDJj0Mn8TD7sno7q12prdbnasKJHhkm2c1LgrhlJ0teaea8860oxi51mGA==", + "requires": { + "lodash": "^4.17.14" + } + }, + "async-eventemitter": { + "version": "0.2.4", + "resolved": "https://registry.npmjs.org/async-eventemitter/-/async-eventemitter-0.2.4.tgz", + "integrity": "sha512-pd20BwL7Yt1zwDFy+8MX8F1+WCT8aQeKj0kQnTrH9WaeRETlRamVhD0JtRPmrV4GfOJ2F9CvdQkZeZhnh2TuHw==", + "requires": { + "async": "^2.4.0" + } + }, + "available-typed-arrays": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz", + "integrity": "sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==", + "extraneous": true + }, + "balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "extraneous": true + }, + "base64-js": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", + "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", + "bundled": true + }, + "big.js": { + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz", + "integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==", + "extraneous": true + }, + "binary-extensions": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", + "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", + "extraneous": true + }, + "bn.js": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.2.1.tgz", + "integrity": "sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ==", + "extraneous": true + }, + "brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "extraneous": true, + "requires": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "extraneous": true, + "requires": { + "fill-range": "^7.0.1" + } + }, + "brorand": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz", + "integrity": "sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8=", + "bundled": true + }, + "browser-stdout": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.1.tgz", + "integrity": "sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==", + "extraneous": true + }, + "browserify-aes": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/browserify-aes/-/browserify-aes-1.2.0.tgz", + "integrity": "sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==", + "extraneous": true, "requires": { - "@types/node": "*" + "buffer-xor": "^1.0.3", + "cipher-base": "^1.0.0", + "create-hash": "^1.1.0", + "evp_bytestokey": "^1.0.3", + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" } }, - "abstract-leveldown": { - "version": "2.6.3", - "resolved": "https://registry.npmjs.org/abstract-leveldown/-/abstract-leveldown-2.6.3.tgz", - "integrity": "sha512-2++wDf/DYqkPR3o5tbfdhF96EfMApo1GpPfzOsR/ZYXdkSmELlvOOEAl9iKkRsktMPHdGjO4rtkBpf2I7TiTeA==", + "browserify-cipher": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/browserify-cipher/-/browserify-cipher-1.0.1.tgz", + "integrity": "sha512-sPhkz0ARKbf4rRQt2hTpAHqn47X3llLkUGn+xEJzLjwY8LRs2p0v7ljvI5EyoRO/mexrNunNECisZs+gw2zz1w==", + "extraneous": true, "requires": { - "xtend": "~4.0.0" + "browserify-aes": "^1.0.4", + "browserify-des": "^1.0.0", + "evp_bytestokey": "^1.0.0" } }, - "async": { - "version": "2.6.4", - "resolved": "https://registry.npmjs.org/async/-/async-2.6.4.tgz", - "integrity": "sha512-mzo5dfJYwAn29PeiJ0zvwTo04zj8HDJj0Mn8TD7sno7q12prdbnasKJHhkm2c1LgrhlJ0teaea8860oxi51mGA==", + "browserify-des": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/browserify-des/-/browserify-des-1.0.2.tgz", + "integrity": "sha512-BioO1xf3hFwz4kc6iBhI3ieDFompMhrMlnDFC4/0/vd5MokpuAc3R+LYbwTA9A5Yc9pq9UYPqffKpW2ObuwX5A==", + "extraneous": true, "requires": { - "lodash": "^4.17.14" + "cipher-base": "^1.0.1", + "des.js": "^1.0.0", + "inherits": "^2.0.1", + "safe-buffer": "^5.1.2" } }, - "bn.js": { - "version": "4.12.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==" - }, - "deferred-leveldown": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/deferred-leveldown/-/deferred-leveldown-1.2.2.tgz", - "integrity": "sha512-uukrWD2bguRtXilKt6cAWKyoXrTSMo5m7crUdLfWQmu8kIm88w3QZoUL+6nhpfKVmhHANER6Re3sKoNoZ3IKMA==", + "browserify-rsa": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/browserify-rsa/-/browserify-rsa-4.1.0.tgz", + "integrity": "sha512-AdEER0Hkspgno2aR97SAf6vi0y0k8NuOpGnVH3O99rcA5Q6sh8QxcngtHuJ6uXwnfAXNM4Gn1Gb7/MV1+Ymbog==", + "extraneous": true, "requires": { - "abstract-leveldown": "~2.6.0" + "bn.js": "^5.0.0", + "randombytes": "^2.0.1" } }, - "ethereum-cryptography": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-0.1.3.tgz", - "integrity": "sha512-w8/4x1SGGzc+tO97TASLja6SLd3fRIK2tLVcV2Gx4IB21hE19atll5Cq9o3d0ZmAYC/8aw0ipieTSiekAea4SQ==", + "browserify-sign": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/browserify-sign/-/browserify-sign-4.2.1.tgz", + "integrity": "sha512-/vrA5fguVAKKAVTNJjgSm1tRQDHUU6DbwO9IROu/0WAzC8PKhucDSh18J0RMvVeHAn5puMd+QHC2erPRNf8lmg==", + "extraneous": true, "requires": { - "@types/pbkdf2": "^3.0.0", - "@types/secp256k1": "^4.0.1", - "blakejs": "^1.1.0", - "browserify-aes": "^1.2.0", - "bs58check": "^2.1.2", + "bn.js": "^5.1.1", + "browserify-rsa": "^4.0.1", "create-hash": "^1.2.0", "create-hmac": "^1.1.7", - "hash.js": "^1.1.7", - "keccak": "^3.0.0", - "pbkdf2": "^3.0.17", - "randombytes": "^2.1.0", - "safe-buffer": "^5.1.2", - "scrypt-js": "^3.0.0", - "secp256k1": "^4.0.1", - "setimmediate": "^1.0.5" + "elliptic": "^6.5.3", + "inherits": "^2.0.4", + "parse-asn1": "^5.1.5", + "readable-stream": "^3.6.0", + "safe-buffer": "^5.2.0" } }, - "ethereumjs-block": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/ethereumjs-block/-/ethereumjs-block-2.2.2.tgz", - "integrity": "sha512-2p49ifhek3h2zeg/+da6XpdFR3GlqY3BIEiqxGF8j9aSRIgkb7M1Ky+yULBKJOu8PAZxfhsYA+HxUk2aCQp3vg==", + "browserslist": { + "version": "4.21.4", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.4.tgz", + "integrity": "sha512-CBHJJdDmgjl3daYjN5Cp5kbTf1mUhZoS+beLklHIvkOWscs83YAhLlF3Wsh/lciQYAcbBJgTOD44VtG31ZM4Hw==", + "extraneous": true, "requires": { - "async": "^2.0.1", - "ethereumjs-common": "^1.5.0", - "ethereumjs-tx": "^2.1.1", - "ethereumjs-util": "^5.0.0", - "merkle-patricia-tree": "^2.1.2" - }, - "dependencies": { - "ethereumjs-util": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-5.2.1.tgz", - "integrity": "sha512-v3kT+7zdyCm1HIqWlLNrHGqHGLpGYIhjeHxQjnDXjLT2FyGJDsd3LWMYUo7pAFRrk86CR3nUJfhC81CCoJNNGQ==", - "requires": { - "bn.js": "^4.11.0", - "create-hash": "^1.1.2", - "elliptic": "^6.5.2", - "ethereum-cryptography": "^0.1.3", - "ethjs-util": "^0.1.3", - "rlp": "^2.0.0", - "safe-buffer": "^5.1.1" - } - } + "caniuse-lite": "^1.0.30001400", + "electron-to-chromium": "^1.4.251", + "node-releases": "^2.0.6", + "update-browserslist-db": "^1.0.9" } }, - "ethereumjs-util": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-6.2.1.tgz", - "integrity": "sha512-W2Ktez4L01Vexijrm5EB6w7dg4n/TgpoYU4avuT5T3Vmnw/eCRtiBrJfQYS/DCSvDIOLn2k57GcHdeBcgVxAqw==", + "buffer": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz", + "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==", + "bundled": true, "requires": { - "@types/bn.js": "^4.11.3", - "bn.js": "^4.11.0", - "create-hash": "^1.1.2", - "elliptic": "^6.5.2", - "ethereum-cryptography": "^0.1.3", - "ethjs-util": "0.1.6", - "rlp": "^2.2.3" + "base64-js": "^1.3.1", + "ieee754": "^1.2.1" } }, - "level-codec": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/level-codec/-/level-codec-7.0.1.tgz", - "integrity": "sha512-Ua/R9B9r3RasXdRmOtd+t9TCOEIIlts+TN/7XTT2unhDaL6sJn83S3rUyljbr6lVtw49N3/yA0HHjpV6Kzb2aQ==" + "buffer-from": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", + "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", + "extraneous": true }, - "level-errors": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/level-errors/-/level-errors-1.0.5.tgz", - "integrity": "sha512-/cLUpQduF6bNrWuAC4pwtUKA5t669pCsCi2XbmojG2tFeOr9j6ShtdDCtFFQO1DRt+EVZhx9gPzP9G2bUaG4ig==", + "buffer-xor": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/buffer-xor/-/buffer-xor-1.0.3.tgz", + "integrity": "sha512-571s0T7nZWK6vB67HI5dyUF7wXiNcfaPPPTl6zYCNApANjIvYJTg7hlud/+cJpdAhS7dVzqMLmfhfHR3rAcOjQ==", + "extraneous": true + }, + "bufferutil": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/bufferutil/-/bufferutil-4.0.5.tgz", + "integrity": "sha512-HTm14iMQKK2FjFLRTM5lAVcyaUzOnqbPtesFIvREgXpJHdQm8bWS+GkQgIkfaBYRHuCnea7w8UVNfwiAQhlr9A==", + "optional": true, "requires": { - "errno": "~0.1.1" + "node-gyp-build": "^4.3.0" } }, - "level-iterator-stream": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/level-iterator-stream/-/level-iterator-stream-1.3.1.tgz", - "integrity": "sha512-1qua0RHNtr4nrZBgYlpV0qHHeHpcRRWTxEZJ8xsemoHAXNL5tbooh4tPEEqIqsbWCAJBmUmkwYK/sW5OrFjWWw==", + "builtin-status-codes": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz", + "integrity": "sha512-HpGFw18DgFWlncDfjTa2rcQ4W88O1mC8e8yZ2AvQY5KDaktSTwo+KRf6nHK6FRI5FyRyb/5T6+TSxfP7QyGsmQ==", + "extraneous": true + }, + "call-bind": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", + "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", + "extraneous": true, "requires": { - "inherits": "^2.0.1", - "level-errors": "^1.0.3", - "readable-stream": "^1.0.33", - "xtend": "^4.0.0" - }, - "dependencies": { - "isarray": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", - "integrity": "sha512-D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ==" - }, - "readable-stream": { - "version": "1.1.14", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz", - "integrity": "sha512-+MeVjFf4L44XUkhM1eYbD8fyEsxcV81pqMSR5gblfcLCHfZvbrqy4/qYHE+/R5HoBUT11WV5O08Cr1n3YXkWVQ==", - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.1", - "isarray": "0.0.1", - "string_decoder": "~0.10.x" - } - }, - "string_decoder": { - "version": "0.10.31", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", - "integrity": "sha512-ev2QzSzWPYmy9GuqfIVildA4OdcGLeFZQrq5ys6RtiuF+RQQiZWr8TZNyAcuVXyQRYfEO+MsoB/1BuQVhOJuoQ==" - } + "function-bind": "^1.1.1", + "get-intrinsic": "^1.0.2" } }, - "level-ws": { - "version": "0.0.0", - "resolved": "https://registry.npmjs.org/level-ws/-/level-ws-0.0.0.tgz", - "integrity": "sha512-XUTaO/+Db51Uiyp/t7fCMGVFOTdtLS/NIACxE/GHsij15mKzxksZifKVjlXDF41JMUP/oM1Oc4YNGdKnc3dVLw==", + "camelcase": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", + "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", + "extraneous": true + }, + "caniuse-lite": { + "version": "1.0.30001435", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001435.tgz", + "integrity": "sha512-kdCkUTjR+v4YAJelyiDTqiu82BDr4W4CP5sgTA0ZBmqn30XfS2ZghPLMowik9TPhS+psWJiUNxsqLyurDbmutA==", + "extraneous": true + }, + "catering": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/catering/-/catering-2.1.1.tgz", + "integrity": "sha512-K7Qy8O9p76sL3/3m7/zLKbRkyOlSZAgzEaLhyj2mXS8PsCud2Eo4hAb8aLtZqHh0QGqLcb9dlJSu6lHRVENm1w==", + "bundled": true + }, + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "extraneous": true, "requires": { - "readable-stream": "~1.0.15", - "xtend": "~2.1.1" + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" }, "dependencies": { - "isarray": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", - "integrity": "sha512-D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ==" - }, - "readable-stream": { - "version": "1.0.34", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz", - "integrity": "sha512-ok1qVCJuRkNmvebYikljxJA/UEsKwLl2nI1OmaqAu4/UE+h0wKCHok4XkL/gvi39OacXvw59RJUOFUkDib2rHg==", - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.1", - "isarray": "0.0.1", - "string_decoder": "~0.10.x" - } - }, - "string_decoder": { - "version": "0.10.31", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", - "integrity": "sha512-ev2QzSzWPYmy9GuqfIVildA4OdcGLeFZQrq5ys6RtiuF+RQQiZWr8TZNyAcuVXyQRYfEO+MsoB/1BuQVhOJuoQ==" - }, - "xtend": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/xtend/-/xtend-2.1.2.tgz", - "integrity": "sha512-vMNKzr2rHP9Dp/e1NQFnLQlwlhp9L/LfvnsVdHxN1f+uggyVI3i08uD14GPvCToPkdsRfyPqIyYGmIk58V98ZQ==", + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "extraneous": true, "requires": { - "object-keys": "~0.4.0" + "has-flag": "^4.0.0" } } } }, - "levelup": { - "version": "1.3.9", - "resolved": "https://registry.npmjs.org/levelup/-/levelup-1.3.9.tgz", - "integrity": "sha512-VVGHfKIlmw8w1XqpGOAGwq6sZm2WwWLmlDcULkKWQXEA5EopA8OBNJ2Ck2v6bdk8HeEZSbCSEgzXadyQFm76sQ==", + "chokidar": { + "version": "3.5.2", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.2.tgz", + "integrity": "sha512-ekGhOnNVPgT77r4K/U3GDhu+FQ2S8TnK/s2KbIGXi0SZWuwkZ2QNyfWdZW+TVfn84DpEP7rLeCt2UI6bJ8GwbQ==", + "extraneous": true, "requires": { - "deferred-leveldown": "~1.2.1", - "level-codec": "~7.0.0", - "level-errors": "~1.0.3", - "level-iterator-stream": "~1.3.0", - "prr": "~1.0.1", - "semver": "~5.4.1", - "xtend": "~4.0.0" + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "fsevents": "~2.3.2", + "glob-parent": "~5.1.2", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.6.0" } }, - "memdown": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/memdown/-/memdown-1.4.1.tgz", - "integrity": "sha512-iVrGHZB8i4OQfM155xx8akvG9FIj+ht14DX5CQkCTG4EHzZ3d3sgckIf/Lm9ivZalEsFuEVnWv2B2WZvbrro2w==", + "chrome-trace-event": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.3.tgz", + "integrity": "sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg==", + "extraneous": true + }, + "cipher-base": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.4.tgz", + "integrity": "sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==", + "extraneous": true, "requires": { - "abstract-leveldown": "~2.7.1", - "functional-red-black-tree": "^1.0.1", - "immediate": "^3.2.3", - "inherits": "~2.0.1", - "ltgt": "~2.2.0", - "safe-buffer": "~5.1.1" - }, - "dependencies": { - "abstract-leveldown": { - "version": "2.7.2", - "resolved": "https://registry.npmjs.org/abstract-leveldown/-/abstract-leveldown-2.7.2.tgz", - "integrity": "sha512-+OVvxH2rHVEhWLdbudP6p0+dNMXu8JA1CbhP19T8paTYAcX7oJ4OVjT+ZUVpv7mITxXHqDMej+GdqXBmXkw09w==", - "requires": { - "xtend": "~4.0.0" - } - } + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" } }, - "merkle-patricia-tree": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/merkle-patricia-tree/-/merkle-patricia-tree-2.3.2.tgz", - "integrity": "sha512-81PW5m8oz/pz3GvsAwbauj7Y00rqm81Tzad77tHBwU7pIAtN+TJnMSOJhxBKflSVYhptMMb9RskhqHqrSm1V+g==", + "cliui": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", + "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", + "extraneous": true, "requires": { - "async": "^1.4.2", - "ethereumjs-util": "^5.0.0", - "level-ws": "0.0.0", - "levelup": "^1.2.1", - "memdown": "^1.0.0", - "readable-stream": "^2.0.0", - "rlp": "^2.0.0", - "semaphore": ">=1.0.1" - }, - "dependencies": { - "async": { - "version": "1.5.2", - "resolved": "https://registry.npmjs.org/async/-/async-1.5.2.tgz", - "integrity": "sha512-nSVgobk4rv61R9PUSDtYt7mPVB2olxNR5RWJcAsH676/ef11bUZwvu7+RGYrYauVdDPcO519v68wRhXQtxsV9w==" - }, - "ethereumjs-util": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-5.2.1.tgz", - "integrity": "sha512-v3kT+7zdyCm1HIqWlLNrHGqHGLpGYIhjeHxQjnDXjLT2FyGJDsd3LWMYUo7pAFRrk86CR3nUJfhC81CCoJNNGQ==", - "requires": { - "bn.js": "^4.11.0", - "create-hash": "^1.1.2", - "elliptic": "^6.5.2", - "ethereum-cryptography": "^0.1.3", - "ethjs-util": "^0.1.3", - "rlp": "^2.0.0", - "safe-buffer": "^5.1.1" - } - } + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^7.0.0" } }, - "object-keys": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-0.4.0.tgz", - "integrity": "sha512-ncrLw+X55z7bkl5PnUvHwFK9FcGuFYo9gtjws2XtSzL+aZ8tm830P60WJ0dSmFVaSalWieW5MD7kEdnXda9yJw==" + "clone-deep": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-4.0.1.tgz", + "integrity": "sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==", + "extraneous": true, + "requires": { + "is-plain-object": "^2.0.4", + "kind-of": "^6.0.2", + "shallow-clone": "^3.0.0" + } }, - "readable-stream": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "extraneous": true, "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" + "color-name": "~1.1.4" } }, - "safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "extraneous": true }, - "semver": { - "version": "5.4.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.4.1.tgz", - "integrity": "sha512-WfG/X9+oATh81XtllIo/I8gOiY9EXRdv1cQdyykeXK17YcUW3EXUAi2To4pcH6nZtJPr7ZOpM5OMyWJZm+8Rsg==" + "colorette": { + "version": "2.0.19", + "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.19.tgz", + "integrity": "sha512-3tlv/dIP7FWvj3BsbHrGLJ6l/oKh1O3TcgBqMn+yyCagOxc23fyzDS6HypQbgxWbkpDnf52p1LuR4eWDQ/K9WQ==", + "extraneous": true }, - "string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "requires": { - "safe-buffer": "~5.1.0" - } - } - } - }, - "ethers": { - "version": "5.7.2", - "resolved": "https://registry.npmjs.org/ethers/-/ethers-5.7.2.tgz", - "integrity": "sha512-wswUsmWo1aOK8rR7DIKiWSw9DbLWe6x98Jrn8wcTflTVvaXhAMaB5zGAXy0GYQEQp9iO1iSHWVyARQm11zUtyg==", - "requires": { - "@ethersproject/abi": "5.7.0", - "@ethersproject/abstract-provider": "5.7.0", - "@ethersproject/abstract-signer": "5.7.0", - "@ethersproject/address": "5.7.0", - "@ethersproject/base64": "5.7.0", - "@ethersproject/basex": "5.7.0", - "@ethersproject/bignumber": "5.7.0", - "@ethersproject/bytes": "5.7.0", - "@ethersproject/constants": "5.7.0", - "@ethersproject/contracts": "5.7.0", - "@ethersproject/hash": "5.7.0", - "@ethersproject/hdnode": "5.7.0", - "@ethersproject/json-wallets": "5.7.0", - "@ethersproject/keccak256": "5.7.0", - "@ethersproject/logger": "5.7.0", - "@ethersproject/networks": "5.7.1", - "@ethersproject/pbkdf2": "5.7.0", - "@ethersproject/properties": "5.7.0", - "@ethersproject/providers": "5.7.2", - "@ethersproject/random": "5.7.0", - "@ethersproject/rlp": "5.7.0", - "@ethersproject/sha2": "5.7.0", - "@ethersproject/signing-key": "5.7.0", - "@ethersproject/solidity": "5.7.0", - "@ethersproject/strings": "5.7.0", - "@ethersproject/transactions": "5.7.0", - "@ethersproject/units": "5.7.0", - "@ethersproject/wallet": "5.7.0", - "@ethersproject/web": "5.7.1", - "@ethersproject/wordlists": "5.7.0" - } - }, - "ethjs-abi": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/ethjs-abi/-/ethjs-abi-0.2.1.tgz", - "integrity": "sha512-g2AULSDYI6nEJyJaEVEXtTimRY2aPC2fi7ddSy0W+LXvEVL8Fe1y76o43ecbgdUKwZD+xsmEgX1yJr1Ia3r1IA==", - "dev": true, - "requires": { - "bn.js": "4.11.6", - "js-sha3": "0.5.5", - "number-to-bn": "1.7.0" - }, - "dependencies": { - "bn.js": { - "version": "4.11.6", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.6.tgz", - "integrity": "sha512-XWwnNNFCuuSQ0m3r3C4LE3EiORltHd9M05pq6FOlVeiophzRbMo50Sbz1ehl8K3Z+jw9+vmgnXefY1hz8X+2wA==", - "dev": true + "colors": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/colors/-/colors-1.2.5.tgz", + "integrity": "sha512-erNRLao/Y3Fv54qUa0LBB+//Uf3YwMUmdJinN20yMXm9zdKKqH9wt7R9IIVZ+K7ShzfpLV/Zg8+VyrBJYB4lpg==", + "extraneous": true }, - "js-sha3": { - "version": "0.5.5", - "resolved": "https://registry.npmjs.org/js-sha3/-/js-sha3-0.5.5.tgz", - "integrity": "sha512-yLLwn44IVeunwjpDVTDZmQeVbB0h+dZpY2eO68B/Zik8hu6dH+rKeLxwua79GGIvW6xr8NBAcrtiUbYrTjEFTA==", - "dev": true - } - } - }, - "ethjs-unit": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/ethjs-unit/-/ethjs-unit-0.1.6.tgz", - "integrity": "sha512-/Sn9Y0oKl0uqQuvgFk/zQgR7aw1g36qX/jzSQ5lSwlO0GigPymk4eGQfeNTD03w1dPOqfz8V77Cy43jH56pagw==", - "requires": { - "bn.js": "4.11.6", - "number-to-bn": "1.7.0" - }, - "dependencies": { - "bn.js": { - "version": "4.11.6", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.6.tgz", - "integrity": "sha512-XWwnNNFCuuSQ0m3r3C4LE3EiORltHd9M05pq6FOlVeiophzRbMo50Sbz1ehl8K3Z+jw9+vmgnXefY1hz8X+2wA==" - } - } - }, - "ethjs-util": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/ethjs-util/-/ethjs-util-0.1.6.tgz", - "integrity": "sha512-CUnVOQq7gSpDHZVVrQW8ExxUETWrnrvXYvYz55wOU8Uj4VCgw56XC2B/fVqQN+f7gmrnRHSLVnFAwsCuNwji8w==", - "requires": { - "is-hex-prefixed": "1.0.0", - "strip-hex-prefix": "1.0.0" - } - }, - "event-target-shim": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/event-target-shim/-/event-target-shim-5.0.1.tgz", - "integrity": "sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==" - }, - "eventemitter3": { - "version": "4.0.7", - "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz", - "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==" - }, - "events": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", - "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==" - }, - "evm-bn": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/evm-bn/-/evm-bn-1.1.2.tgz", - "integrity": "sha512-Lq8CT1EAjSeN+Yk0h1hpSwnZyMA4Xir6fQD4vlStljAuW2xr7qLOEGDLGsTa9sU2e40EYIumA4wYhMC/e+lyKw==", - "requires": { - "@ethersproject/bignumber": "^5.5.0", - "from-exponential": "^1.1.1" - } - }, - "evp_bytestokey": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz", - "integrity": "sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==", - "requires": { - "md5.js": "^1.3.4", - "safe-buffer": "^5.1.1" - } - }, - "expand-template": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/expand-template/-/expand-template-2.0.3.tgz", - "integrity": "sha512-XYfuKMvj4O35f/pOXLObndIRvyQ+/+6AhODh+OKWj9S9498pHHn/IMszH+gt0fBCRWMNfk1ZSp5x3AifmnI2vg==", - "optional": true - }, - "express": { - "version": "4.18.2", - "resolved": "https://registry.npmjs.org/express/-/express-4.18.2.tgz", - "integrity": "sha512-5/PsL6iGPdfQ/lKM1UuielYgv3BUoJfz1aUwU9vHZ+J7gyvwdQXFEBIEIaxeGf0GIcreATNyBExtalisDbuMqQ==", - "requires": { - "accepts": "~1.3.8", - "array-flatten": "1.1.1", - "body-parser": "1.20.1", - "content-disposition": "0.5.4", - "content-type": "~1.0.4", - "cookie": "0.5.0", - "cookie-signature": "1.0.6", - "debug": "2.6.9", - "depd": "2.0.0", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "etag": "~1.8.1", - "finalhandler": "1.2.0", - "fresh": "0.5.2", - "http-errors": "2.0.0", - "merge-descriptors": "1.0.1", - "methods": "~1.1.2", - "on-finished": "2.4.1", - "parseurl": "~1.3.3", - "path-to-regexp": "0.1.7", - "proxy-addr": "~2.0.7", - "qs": "6.11.0", - "range-parser": "~1.2.1", - "safe-buffer": "5.2.1", - "send": "0.18.0", - "serve-static": "1.15.0", - "setprototypeof": "1.2.0", - "statuses": "2.0.1", - "type-is": "~1.6.18", - "utils-merge": "1.0.1", - "vary": "~1.1.2" - }, - "dependencies": { - "cookie": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.5.0.tgz", - "integrity": "sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==" + "commander": { + "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", + "extraneous": true + }, + "concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", + "extraneous": true + }, + "create-ecdh": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/create-ecdh/-/create-ecdh-4.0.4.tgz", + "integrity": "sha512-mf+TCx8wWc9VpuxfP2ht0iSISLZnt0JgWlrOKZiNqyUZWnjIaCIVNQArMHnCZKfEYRg6IM7A+NeJoN8gf/Ws0A==", + "extraneous": true, + "requires": { + "bn.js": "^4.1.0", + "elliptic": "^6.5.3" + }, + "dependencies": { + "bn.js": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", + "extraneous": true + } + } }, - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "create-hash": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/create-hash/-/create-hash-1.2.0.tgz", + "integrity": "sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==", + "extraneous": true, "requires": { - "ms": "2.0.0" + "cipher-base": "^1.0.1", + "inherits": "^2.0.1", + "md5.js": "^1.3.4", + "ripemd160": "^2.0.1", + "sha.js": "^2.4.0" + } + }, + "create-hmac": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/create-hmac/-/create-hmac-1.1.7.tgz", + "integrity": "sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==", + "extraneous": true, + "requires": { + "cipher-base": "^1.0.3", + "create-hash": "^1.1.0", + "inherits": "^2.0.1", + "ripemd160": "^2.0.0", + "safe-buffer": "^5.0.1", + "sha.js": "^2.4.8" + } + }, + "create-require": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz", + "integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==", + "extraneous": true + }, + "cross-env": { + "version": "https://registry.npmjs.org/cross-env/-/cross-env-7.0.3.tgz", + "integrity": "sha512-+/HKd6EgcQCJGh2PSjZuUitQBQynKor4wrFbRg4DtAgS1aWO+gU52xpH7M9ScGgXSYmAVS9bIJ8EzuaGw0oNAw==", + "extraneous": true, + "requires": { + "cross-spawn": "^7.0.1" + } + }, + "cross-spawn": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "extraneous": true, + "requires": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + } + }, + "crypto-browserify": { + "version": "https://registry.npmjs.org/crypto-browserify/-/crypto-browserify-3.12.0.tgz", + "integrity": "sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg==", + "extraneous": true, + "requires": { + "browserify-cipher": "^1.0.0", + "browserify-sign": "^4.0.0", + "create-ecdh": "^4.0.0", + "create-hash": "^1.1.0", + "create-hmac": "^1.1.0", + "diffie-hellman": "^5.0.0", + "inherits": "^2.0.1", + "pbkdf2": "^3.0.3", + "public-encrypt": "^4.0.0", + "randombytes": "^2.0.0", + "randomfill": "^1.0.3" } }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" - } - } - }, - "ext": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/ext/-/ext-1.7.0.tgz", - "integrity": "sha512-6hxeJYaL110a9b5TEJSj0gojyHQAmA2ch5Os+ySCiA1QGdS697XWY1pzsrSjqA9LDEEgdB/KypIlR59RcLuHYw==", - "requires": { - "type": "^2.7.2" - }, - "dependencies": { - "type": { - "version": "2.7.2", - "resolved": "https://registry.npmjs.org/type/-/type-2.7.2.tgz", - "integrity": "sha512-dzlvlNlt6AXU7EBSfpAscydQ7gXB+pPGsPnfJnZpiNJBDj7IaJzQlBZYGdEi4R9HmPdBv2XmWJ6YUtoTa7lmCw==" - } - } - }, - "extend": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", - "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==" - }, - "extsprintf": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", - "integrity": "sha512-11Ndz7Nv+mvAC1j0ktTa7fAb0vLyGGX+rMHNBYQviQDGU0Hw7lhctJANqbPhu9nV9/izT/IntTgZ7Im/9LJs9g==" - }, - "eyes": { - "version": "0.1.8", - "resolved": "https://registry.npmjs.org/eyes/-/eyes-0.1.8.tgz", - "integrity": "sha512-GipyPsXO1anza0AOZdy69Im7hGFCNB7Y/NGjDlZGJ3GJJLtwNSb2vrzYrTYJRrRloVx7pl+bhUaTB8yiccPvFQ==" - }, - "fake-merkle-patricia-tree": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/fake-merkle-patricia-tree/-/fake-merkle-patricia-tree-1.0.1.tgz", - "integrity": "sha512-Tgq37lkc9pUIgIKw5uitNUKcgcYL3R6JvXtKQbOf/ZSavXbidsksgp/pAY6p//uhw0I4yoMsvTSovvVIsk/qxA==", - "requires": { - "checkpoint-store": "^1.1.0" - } - }, - "fast-base64-decode": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fast-base64-decode/-/fast-base64-decode-1.0.0.tgz", - "integrity": "sha512-qwaScUgUGBYeDNRnbc/KyllVU88Jk1pRHPStuF/lO7B0/RTRLj7U0lkdTAutlBblY08rwZDff6tNU9cjv6j//Q==", - "dev": true - }, - "fast-check": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/fast-check/-/fast-check-3.1.1.tgz", - "integrity": "sha512-3vtXinVyuUKCKFKYcwXhGE6NtGWkqF8Yh3rvMZNzmwz8EPrgoc/v4pDdLHyLnCyCI5MZpZZkDEwFyXyEONOxpA==", - "requires": { - "pure-rand": "^5.0.1" - } - }, - "fast-deep-equal": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", - "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==" - }, - "fast-json-stable-stringify": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", - "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==" - }, - "fast-safe-stringify": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/fast-safe-stringify/-/fast-safe-stringify-2.1.1.tgz", - "integrity": "sha512-W+KJc2dmILlPplD/H4K9l9LcAHAfPtP6BY84uVLXQ6Evcz9Lcg33Y2z1IVblT6xdY54PXYVHEv+0Wpq8Io6zkA==" - }, - "fast-stable-stringify": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fast-stable-stringify/-/fast-stable-stringify-1.0.0.tgz", - "integrity": "sha512-wpYMUmFu5f00Sm0cj2pfivpmawLZ0NKdviQ4w9zJeR8JVtOpOxHmLaJuj0vxvGqMJQWyP/COUkF75/57OKyRag==" - }, - "fd-slicer": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.1.0.tgz", - "integrity": "sha512-cE1qsB/VwyQozZ+q1dGxR8LBYNZeofhEdUNGSMbQD3Gw2lAzX9Zb3uIU6Ebc/Fmyjo9AWWfnn0AUCHqtevs/8g==", - "requires": { - "pend": "~1.2.0" - } - }, - "fetch-cookie": { - "version": "0.11.0", - "resolved": "https://registry.npmjs.org/fetch-cookie/-/fetch-cookie-0.11.0.tgz", - "integrity": "sha512-BQm7iZLFhMWFy5CZ/162sAGjBfdNWb7a8LEqqnzsHFhxT/X/SVj/z2t2nu3aJvjlbQkrAlTUApplPRjWyH4mhA==", - "optional": true, - "requires": { - "tough-cookie": "^2.3.3 || ^3.0.1 || ^4.0.0" - } - }, - "file-type": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/file-type/-/file-type-5.2.0.tgz", - "integrity": "sha512-Iq1nJ6D2+yIO4c8HHg4fyVb8mAJieo1Oloy1mLLaB2PvezNedhBVm+QU7g0qM42aiMbRXTxKKwGD17rjKNJYVQ==" - }, - "file-uri-to-path": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz", - "integrity": "sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==" - }, - "fill-range": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", - "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", - "requires": { - "to-regex-range": "^5.0.1" - } - }, - "finalhandler": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.2.0.tgz", - "integrity": "sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==", - "requires": { - "debug": "2.6.9", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "on-finished": "2.4.1", - "parseurl": "~1.3.3", - "statuses": "2.0.1", - "unpipe": "~1.0.0" - }, - "dependencies": { "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.2.tgz", + "integrity": "sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==", + "extraneous": true, "requires": { - "ms": "2.0.0" + "ms": "2.1.2" + }, + "dependencies": { + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "extraneous": true + } } }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" - } - } - }, - "find-replace": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/find-replace/-/find-replace-3.0.0.tgz", - "integrity": "sha512-6Tb2myMioCAgv5kfvP5/PkZZ/ntTpVK39fHY7WkWBgvbeE+VHd/tZuZ4mrC+bxh4cfOZeYKVPaJIZtZXV7GNCQ==", - "dev": true, - "requires": { - "array-back": "^3.0.1" - } - }, - "find-up": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", - "requires": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" - } - }, - "flashbots": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/flashbots/-/flashbots-1.0.0.tgz", - "integrity": "sha512-IvF5v/kVCf13ku4ksM7ZjhLWk1oBC4UgwaX7wvOtvttGClgRYGQ/Q/4DpXbdlVsliXNy8PE7/9SMYx9Cv6iICA==" - }, - "flat": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz", - "integrity": "sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==" - }, - "fmix": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/fmix/-/fmix-0.1.0.tgz", - "integrity": "sha512-Y6hyofImk9JdzU8k5INtTXX1cu8LDlePWDFU5sftm9H+zKCr5SGrVjdhkvsim646cw5zD0nADj8oHyXMZmCZ9w==", - "dev": true, - "requires": { - "imul": "^1.0.0" - } - }, - "follow-redirects": { - "version": "1.15.2", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.2.tgz", - "integrity": "sha512-VQLG33o04KaQ8uYi2tVNbdrWp1QWxNNea+nmIB4EVM28v0hmP17z7aG1+wAkNzVq4KeXTq3221ye5qTJP91JwA==" - }, - "for-each": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz", - "integrity": "sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==", - "requires": { - "is-callable": "^1.1.3" - } - }, - "foreach": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/foreach/-/foreach-2.0.6.tgz", - "integrity": "sha512-k6GAGDyqLe9JaebCsFCoudPPWfihKu8pylYXRlqP1J7ms39iPoTtk2fviNglIeQEwdh0bQeKJ01ZPyuyQvKzwg==" - }, - "forever-agent": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", - "integrity": "sha512-j0KLYPhm6zeac4lz3oJ3o65qvgQCcPubiyotZrXqEaG4hNagNYO8qdlUrX5vwqv9ohqeT/Z3j6+yW067yWWdUw==" - }, - "form-data": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-3.0.1.tgz", - "integrity": "sha512-RHkBKtLWUVwd7SqRIvCZMEvAMoGUp0XU+seQiZejj0COz3RI3hWP4sCv3gZWWLjJTd7rGwcsF5eKZGii0r/hbg==", - "dev": true, - "requires": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.8", - "mime-types": "^2.1.12" - } - }, - "form-data-encoder": { - "version": "1.7.1", - "resolved": "https://registry.npmjs.org/form-data-encoder/-/form-data-encoder-1.7.1.tgz", - "integrity": "sha512-EFRDrsMm/kyqbTQocNvRXMLjc7Es2Vk+IQFx/YW7hkUH1eBl4J1fqiP34l74Yt0pFLCNpc06fkbVk00008mzjg==" - }, - "forwarded": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", - "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==" - }, - "fp-ts": { - "version": "1.19.3", - "resolved": "https://registry.npmjs.org/fp-ts/-/fp-ts-1.19.3.tgz", - "integrity": "sha512-H5KQDspykdHuztLTg+ajGN0Z2qUjcEf3Ybxc6hLt0k7/zPkn29XnKnxlBPyW2XIddWrGaJBzBl4VLYOtk39yZg==" - }, - "fraction.js": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.2.0.tgz", - "integrity": "sha512-MhLuK+2gUcnZe8ZHlaaINnQLl0xRIGRfcGk2yl8xoQAfHrSsL3rYu6FCmBdkdbhc9EPlwyGHewaRsvwRMJtAlA==" - }, - "fresh": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", - "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==" - }, - "from-exponential": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/from-exponential/-/from-exponential-1.1.1.tgz", - "integrity": "sha512-VBE7f5OVnYwdgB3LHa+Qo29h8qVpxhVO9Trlc+AWm+/XNAgks1tAwMFHb33mjeiof77GglsJzeYF7OqXrROP/A==" - }, - "fs-constants": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz", - "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==" - }, - "fs-extra": { - "version": "11.1.1", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.1.1.tgz", - "integrity": "sha512-MGIE4HOvQCeUCzmlHs0vXpih4ysz4wg9qiSAu6cd42lVwPbTM1TjV7RusoyQqMmk/95gdQZX72u+YW+c3eEpFQ==", - "requires": { - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - } - }, - "fs-minipass": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-1.2.7.tgz", - "integrity": "sha512-GWSSJGFy4e9GUeCcbIkED+bgAoFyj7XF1mV8rma3QW4NIqX9Kyx79N/PF61H5udOV3aY1IaMLs6pGbH71nlCTA==", - "requires": { - "minipass": "^2.6.0" - } - }, - "fs-readdir-recursive": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/fs-readdir-recursive/-/fs-readdir-recursive-1.1.0.tgz", - "integrity": "sha512-GNanXlVr2pf02+sPN40XN8HG+ePaNcvM0q5mZBd668Obwb0yD5GiUbZOFgwn8kGMY6I3mdyDJzieUy3PTYyTRA==" - }, - "fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==" - }, - "fsevents": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", - "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", - "optional": true - }, - "function-bind": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" - }, - "function.prototype.name": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.5.tgz", - "integrity": "sha512-uN7m/BzVKQnCUF/iW8jYea67v++2u7m5UgENbHRtdDVclOUP+FMPlCNdmk0h/ysGyo2tavMJEDqJAkJdRa1vMA==", - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.19.0", - "functions-have-names": "^1.2.2" - } - }, - "functional-red-black-tree": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", - "integrity": "sha512-dsKNQNdj6xA3T+QlADDA7mOSlX0qiMINjn0cgr+eGHGsbSHzTabcIogz2+p/iqP1Xs6EP/sS2SbqH+brGTbq0g==" - }, - "functions-have-names": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz", - "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==" - }, - "ganache": { - "version": "7.8.0", - "resolved": "https://registry.npmjs.org/ganache/-/ganache-7.8.0.tgz", - "integrity": "sha512-IrUYvsaE/m2/NaVIZ7D/gCnsmyU/buechnH6MhUipzG1qJcZIwIp/DoP/LZUcHyhy0Bv0NKZD2pGOjpRhn7l7A==", - "requires": { - "@trufflesuite/bigint-buffer": "1.1.10", - "@trufflesuite/uws-js-unofficial": "20.10.0-unofficial.2", - "@types/bn.js": "^5.1.0", - "@types/lru-cache": "5.1.1", - "@types/seedrandom": "3.0.1", - "abstract-level": "1.0.3", - "abstract-leveldown": "7.2.0", - "async-eventemitter": "0.2.4", - "bufferutil": "4.0.5", - "emittery": "0.10.0", - "keccak": "3.0.2", - "leveldown": "6.1.0", - "secp256k1": "4.0.3", - "utf-8-validate": "5.0.7" - }, - "dependencies": { - "@trufflesuite/bigint-buffer": { - "version": "1.1.10", - "resolved": "https://registry.npmjs.org/@trufflesuite/bigint-buffer/-/bigint-buffer-1.1.10.tgz", - "integrity": "sha512-pYIQC5EcMmID74t26GCC67946mgTJFiLXOT/BYozgrd4UEY2JHEGLhWi9cMiQCt5BSqFEvKkCHNnoj82SRjiEw==", + "decamelize": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-4.0.0.tgz", + "integrity": "sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ==", + "extraneous": true + }, + "define-properties": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.4.tgz", + "integrity": "sha512-uckOqKcfaVvtBdsVkdPv3XjveQJsNQqmhXgRi8uhvWWuPYZCNlzT8qAyblUgNoXdHdjMTzAqeGjAoli8f+bzPA==", + "extraneous": true, + "requires": { + "has-property-descriptors": "^1.0.0", + "object-keys": "^1.1.1" + } + }, + "des.js": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/des.js/-/des.js-1.0.1.tgz", + "integrity": "sha512-Q0I4pfFrv2VPd34/vfLrFOoRmlYj3OV50i7fskps1jZWK1kApMWWT9G6RRUeYedLcBDIhnSDaUvJMb3AhUlaEA==", + "extraneous": true, + "requires": { + "inherits": "^2.0.1", + "minimalistic-assert": "^1.0.0" + } + }, + "diff": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/diff/-/diff-5.0.0.tgz", + "integrity": "sha512-/VTCrvm5Z0JGty/BWHljh+BAiw3IK+2j87NGMu8Nwc/f48WoDAC395uomO9ZD117ZOBaHmkX1oyLvkVM/aIT3w==", + "extraneous": true + }, + "diffie-hellman": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/diffie-hellman/-/diffie-hellman-5.0.3.tgz", + "integrity": "sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg==", + "extraneous": true, + "requires": { + "bn.js": "^4.1.0", + "miller-rabin": "^4.0.0", + "randombytes": "^2.0.0" + }, + "dependencies": { + "bn.js": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", + "extraneous": true + } + } + }, + "electron-to-chromium": { + "version": "1.4.284", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.284.tgz", + "integrity": "sha512-M8WEXFuKXMYMVr45fo8mq0wUrrJHheiKZf6BArTKk9ZBYCKJEOU5H8cdWgDT+qCVZf7Na4lVUaZsA+h6uA9+PA==", + "extraneous": true + }, + "elliptic": { + "version": "6.5.4", + "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.4.tgz", + "integrity": "sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ==", "bundled": true, "requires": { - "node-gyp-build": "4.4.0" + "bn.js": "^4.11.9", + "brorand": "^1.1.0", + "hash.js": "^1.0.0", + "hmac-drbg": "^1.0.1", + "inherits": "^2.0.4", + "minimalistic-assert": "^1.0.1", + "minimalistic-crypto-utils": "^1.0.1" }, "dependencies": { - "node-gyp-build": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.4.0.tgz", - "integrity": "sha512-amJnQCcgtRVw9SvoebO3BKGESClrfXGCUTX9hSn1OuGQTQBOZmVd0Z0OlecpuRksKvbsUqALE8jls/ErClAPuQ==", + "bn.js": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", "bundled": true } } }, - "@trufflesuite/uws-js-unofficial": { - "version": "20.10.0-unofficial.2", - "resolved": "https://registry.npmjs.org/@trufflesuite/uws-js-unofficial/-/uws-js-unofficial-20.10.0-unofficial.2.tgz", - "integrity": "sha512-oQQlnS3oNeGsgS4K3KCSSavJgSb0W9D5ktZs4FacX9VbM7b+NlhjH96d6/G4fMrz+bc5MXRyco419on0X0dvRA==", + "emittery": { + "version": "0.10.0", + "resolved": "https://registry.npmjs.org/emittery/-/emittery-0.10.0.tgz", + "integrity": "sha512-AGvFfs+d0JKCJQ4o01ASQLGPmSCxgfU9RFXvzPvZdjKK8oscynksuJhWrSTSw7j7Ep/sZct5b5ZhYCi8S/t0HQ==" + }, + "emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "extraneous": true + }, + "emojis-list": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-3.0.0.tgz", + "integrity": "sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==", + "extraneous": true + }, + "enhanced-resolve": { + "version": "5.12.0", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.12.0.tgz", + "integrity": "sha512-QHTXI/sZQmko1cbDoNAa3mJ5qhWUUNAq3vR0/YiD379fWQrcfuoX1+HW2S0MTt7XmoPLapdaDKUtelUSPic7hQ==", + "extraneous": true, + "requires": { + "graceful-fs": "^4.2.4", + "tapable": "^2.2.0" + } + }, + "envinfo": { + "version": "7.8.1", + "resolved": "https://registry.npmjs.org/envinfo/-/envinfo-7.8.1.tgz", + "integrity": "sha512-/o+BXHmB7ocbHEAs6F2EnG0ogybVVUdkRunTT2glZU9XAaGmhqskrvKwqXuDfNjEO0LZKWdejEEpnq8aM0tOaw==", + "extraneous": true + }, + "es-module-lexer": { + "version": "0.9.3", + "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-0.9.3.tgz", + "integrity": "sha512-1HQ2M2sPtxwnvOvT1ZClHyQDiggdNjURWpY2we6aMKCQiUVxTmVs2UYPLIrD84sS+kMdUwfBSylbJPwNnBrnHQ==", + "extraneous": true + }, + "es6-object-assign": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/es6-object-assign/-/es6-object-assign-1.1.0.tgz", + "integrity": "sha512-MEl9uirslVwqQU369iHNWZXsI8yaZYGg/D65aOgZkeyFJwHYSxilf7rQzXKI7DdDuBPrBXbfk3sl9hJhmd5AUw==", + "extraneous": true + }, + "escalade": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", + "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", + "extraneous": true + }, + "escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "extraneous": true + }, + "eslint-scope": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", + "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", + "extraneous": true, + "requires": { + "esrecurse": "^4.3.0", + "estraverse": "^4.1.1" + } + }, + "esrecurse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", + "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", + "extraneous": true, + "requires": { + "estraverse": "^5.2.0" + }, + "dependencies": { + "estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "extraneous": true + } + } + }, + "estraverse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", + "extraneous": true + }, + "events": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", + "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", + "extraneous": true + }, + "evp_bytestokey": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz", + "integrity": "sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==", + "extraneous": true, + "requires": { + "md5.js": "^1.3.4", + "safe-buffer": "^5.1.1" + } + }, + "execa": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", + "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", + "extraneous": true, + "requires": { + "cross-spawn": "^7.0.3", + "get-stream": "^6.0.0", + "human-signals": "^2.1.0", + "is-stream": "^2.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^4.0.1", + "onetime": "^5.1.2", + "signal-exit": "^3.0.3", + "strip-final-newline": "^2.0.0" + } + }, + "fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", + "extraneous": true + }, + "fast-json-stable-stringify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", + "extraneous": true + }, + "fastest-levenshtein": { + "version": "1.0.16", + "resolved": "https://registry.npmjs.org/fastest-levenshtein/-/fastest-levenshtein-1.0.16.tgz", + "integrity": "sha512-eRnCtTTtGZFpQCwhJiUOuxPQWRXVKYDn0b2PeHfXL6/Zi53SLAzAHfVhVWK2AryC/WH05kGfxhFIPvTF0SXQzg==", + "extraneous": true + }, + "fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "extraneous": true, + "requires": { + "to-regex-range": "^5.0.1" + } + }, + "find-up": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "extraneous": true, + "requires": { + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + } + }, + "flat": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz", + "integrity": "sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==", + "extraneous": true + }, + "for-each": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz", + "integrity": "sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==", + "extraneous": true, "requires": { - "bufferutil": "4.0.5", - "utf-8-validate": "5.0.7", - "ws": "8.2.3" + "is-callable": "^1.1.3" } }, - "@types/bn.js": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/@types/bn.js/-/bn.js-5.1.0.tgz", - "integrity": "sha512-QSSVYj7pYFN49kW77o2s9xTCwZ8F2xLbjLLSEVh8D2F4JUhZtPAGOFLTD+ffqksBx/u4cE/KImFjyhqCjn/LIA==", + "fs-extra": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-7.0.1.tgz", + "integrity": "sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==", + "extraneous": true, "requires": { - "@types/node": "*" + "graceful-fs": "^4.1.2", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" } }, - "@types/lru-cache": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/@types/lru-cache/-/lru-cache-5.1.1.tgz", - "integrity": "sha512-ssE3Vlrys7sdIzs5LOxCzTVMsU7i9oa/IaW92wF32JFb3CVczqOkru2xspuKczHEbG3nvmPY7IFqVmGGHdNbYw==" + "fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", + "extraneous": true }, - "@types/node": { - "version": "17.0.0", - "resolved": "https://registry.npmjs.org/@types/node/-/node-17.0.0.tgz", - "integrity": "sha512-eMhwJXc931Ihh4tkU+Y7GiLzT/y/DBNpNtr4yU9O2w3SYBsr9NaOPhQlLKRmoWtI54uNwuo0IOUFQjVOTZYRvw==" + "fsevents": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", + "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", + "extraneous": true }, - "@types/seedrandom": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/@types/seedrandom/-/seedrandom-3.0.1.tgz", - "integrity": "sha512-giB9gzDeiCeloIXDgzFBCgjj1k4WxcDrZtGl6h1IqmUPlxF+Nx8Ve+96QCyDZ/HseB/uvDsKbpib9hU5cU53pw==" + "function-bind": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", + "extraneous": true }, - "abstract-level": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/abstract-level/-/abstract-level-1.0.3.tgz", - "integrity": "sha512-t6jv+xHy+VYwc4xqZMn2Pa9DjcdzvzZmQGRjTFc8spIbRGHgBrEKbPq+rYXc7CCo0lxgYvSgKVg9qZAhpVQSjA==", + "get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "extraneous": true + }, + "get-intrinsic": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.3.tgz", + "integrity": "sha512-QJVz1Tj7MS099PevUG5jvnt9tSkXN8K14dxQlikJuPt4uD9hHAHjLyLBiLR5zELelBdD9QNRAXZzsJx0WaDL9A==", + "extraneous": true, "requires": { - "buffer": "^6.0.3", - "catering": "^2.1.0", - "is-buffer": "^2.0.5", - "level-supports": "^4.0.0", - "level-transcoder": "^1.0.1", - "module-error": "^1.0.1", - "queue-microtask": "^1.2.3" - }, - "dependencies": { - "level-supports": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/level-supports/-/level-supports-4.0.1.tgz", - "integrity": "sha512-PbXpve8rKeNcZ9C1mUicC9auIYFyGpkV9/i6g76tLgANwWhtG2v7I4xNBUlkn3lE2/dZF3Pi0ygYGtLc4RXXdA==" - } + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.3" } }, - "abstract-leveldown": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/abstract-leveldown/-/abstract-leveldown-7.2.0.tgz", - "integrity": "sha512-DnhQwcFEaYsvYDnACLZhMmCWd3rkOeEvglpa4q5i/5Jlm3UIsWaxVzuXvDLFCSCWRO3yy2/+V/G7FusFgejnfQ==", - "bundled": true, + "get-stream": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", + "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", + "extraneous": true + }, + "glob": { + "version": "7.1.7", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.7.tgz", + "integrity": "sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ==", + "extraneous": true, "requires": { - "buffer": "^6.0.3", - "catering": "^2.0.0", - "is-buffer": "^2.0.5", - "level-concat-iterator": "^3.0.0", - "level-supports": "^2.0.1", - "queue-microtask": "^1.2.3" + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" } }, - "async": { - "version": "2.6.4", - "resolved": "https://registry.npmjs.org/async/-/async-2.6.4.tgz", - "integrity": "sha512-mzo5dfJYwAn29PeiJ0zvwTo04zj8HDJj0Mn8TD7sno7q12prdbnasKJHhkm2c1LgrhlJ0teaea8860oxi51mGA==", + "glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "extraneous": true, "requires": { - "lodash": "^4.17.14" + "is-glob": "^4.0.1" } }, - "async-eventemitter": { - "version": "0.2.4", - "resolved": "https://registry.npmjs.org/async-eventemitter/-/async-eventemitter-0.2.4.tgz", - "integrity": "sha512-pd20BwL7Yt1zwDFy+8MX8F1+WCT8aQeKj0kQnTrH9WaeRETlRamVhD0JtRPmrV4GfOJ2F9CvdQkZeZhnh2TuHw==", + "glob-to-regexp": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz", + "integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==", + "extraneous": true + }, + "gopd": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", + "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", + "extraneous": true, "requires": { - "async": "^2.4.0" + "get-intrinsic": "^1.1.3" } }, - "base64-js": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", - "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", - "bundled": true + "graceful-fs": { + "version": "4.2.10", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz", + "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==", + "extraneous": true }, - "brorand": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz", - "integrity": "sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8=", - "bundled": true + "growl": { + "version": "1.10.5", + "resolved": "https://registry.npmjs.org/growl/-/growl-1.10.5.tgz", + "integrity": "sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA==", + "extraneous": true }, - "buffer": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz", - "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==", - "bundled": true, + "has": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", + "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "extraneous": true, "requires": { - "base64-js": "^1.3.1", - "ieee754": "^1.2.1" + "function-bind": "^1.1.1" } }, - "bufferutil": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/bufferutil/-/bufferutil-4.0.5.tgz", - "integrity": "sha512-HTm14iMQKK2FjFLRTM5lAVcyaUzOnqbPtesFIvREgXpJHdQm8bWS+GkQgIkfaBYRHuCnea7w8UVNfwiAQhlr9A==", - "optional": true, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "extraneous": true + }, + "has-property-descriptors": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz", + "integrity": "sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==", + "extraneous": true, "requires": { - "node-gyp-build": "^4.3.0" + "get-intrinsic": "^1.1.1" } }, - "catering": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/catering/-/catering-2.1.0.tgz", - "integrity": "sha512-M5imwzQn6y+ODBfgi+cfgZv2hIUI6oYU/0f35Mdb1ujGeqeoI5tOnl9Q13DTH7LW+7er+NYq8stNOKZD/Z3U/A==", - "bundled": true, + "has-symbols": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", + "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", + "extraneous": true + }, + "has-tostringtag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz", + "integrity": "sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==", + "extraneous": true, "requires": { - "queue-tick": "^1.0.0" + "has-symbols": "^1.0.2" } }, - "elliptic": { - "version": "6.5.4", - "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.4.tgz", - "integrity": "sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ==", - "bundled": true, + "hash-base": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.1.0.tgz", + "integrity": "sha512-1nmYp/rhMDiE7AYkDw+lLwlAzz0AntGIe51F3RfFfEqyQ3feY2eI/NcwC6umIQVOASPMsWJLJScWKSSvzL9IVA==", + "extraneous": true, "requires": { - "bn.js": "^4.11.9", - "brorand": "^1.1.0", - "hash.js": "^1.0.0", - "hmac-drbg": "^1.0.1", "inherits": "^2.0.4", - "minimalistic-assert": "^1.0.1", - "minimalistic-crypto-utils": "^1.0.1" - }, - "dependencies": { - "bn.js": { - "version": "4.12.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", - "bundled": true - } + "readable-stream": "^3.6.0", + "safe-buffer": "^5.2.0" } }, - "emittery": { - "version": "0.10.0", - "resolved": "https://registry.npmjs.org/emittery/-/emittery-0.10.0.tgz", - "integrity": "sha512-AGvFfs+d0JKCJQ4o01ASQLGPmSCxgfU9RFXvzPvZdjKK8oscynksuJhWrSTSw7j7Ep/sZct5b5ZhYCi8S/t0HQ==" - }, "hash.js": { "version": "1.1.7", "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.7.tgz", @@ -42470,6 +47984,12 @@ "minimalistic-assert": "^1.0.1" } }, + "he": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", + "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", + "extraneous": true + }, "hmac-drbg": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz", @@ -42481,24 +48001,260 @@ "minimalistic-crypto-utils": "^1.0.1" } }, + "https-browserify": { + "version": "https://registry.npmjs.org/https-browserify/-/https-browserify-1.0.0.tgz", + "integrity": "sha512-J+FkSdyD+0mA0N+81tMotaRMfSL9SGi+xpD3T6YApKsc3bGSXJlfXri3VyFOeYkfLRQisDk1W+jIFFKBeUBbBg==", + "extraneous": true + }, + "human-signals": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", + "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", + "extraneous": true + }, "ieee754": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", "bundled": true }, + "import-lazy": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/import-lazy/-/import-lazy-4.0.0.tgz", + "integrity": "sha512-rKtvo6a868b5Hu3heneU+L4yEQ4jYKLtjpnPeUdK7h0yzXGmyBTypknlkCvHFBqfX9YlorEiMM6Dnq/5atfHkw==", + "extraneous": true + }, + "import-local": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.1.0.tgz", + "integrity": "sha512-ASB07uLtnDs1o6EHjKpX34BKYDSqnFerfTOJL2HvMqF70LnxpjkzDB8J44oT9pu4AMPkQwf8jl6szgvNd2tRIg==", + "extraneous": true, + "requires": { + "pkg-dir": "^4.2.0", + "resolve-cwd": "^3.0.0" + } + }, + "inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", + "extraneous": true, + "requires": { + "once": "^1.3.0", + "wrappy": "1" + } + }, "inherits": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", "bundled": true }, + "interpret": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.4.0.tgz", + "integrity": "sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA==", + "extraneous": true + }, + "is-arguments": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.1.1.tgz", + "integrity": "sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==", + "extraneous": true, + "requires": { + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + } + }, + "is-binary-path": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "extraneous": true, + "requires": { + "binary-extensions": "^2.0.0" + } + }, "is-buffer": { "version": "2.0.5", "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-2.0.5.tgz", "integrity": "sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ==", "bundled": true }, + "is-callable": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz", + "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==", + "extraneous": true + }, + "is-core-module": { + "version": "2.11.0", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.11.0.tgz", + "integrity": "sha512-RRjxlvLDkD1YJwDbroBHMb+cukurkDWNyHx7D3oNB5x9rb5ogcksMC5wHCadcXoo67gVr/+3GFySh3134zi6rw==", + "extraneous": true, + "requires": { + "has": "^1.0.3" + } + }, + "is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "extraneous": true + }, + "is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "extraneous": true + }, + "is-generator-function": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.0.10.tgz", + "integrity": "sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A==", + "extraneous": true, + "requires": { + "has-tostringtag": "^1.0.0" + } + }, + "is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "extraneous": true, + "requires": { + "is-extglob": "^2.1.1" + } + }, + "is-nan": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/is-nan/-/is-nan-1.3.2.tgz", + "integrity": "sha512-E+zBKpQ2t6MEo1VsonYmluk9NxGrbzpeeLC2xIViuO2EjU2xsXsBPwTr3Ykv9l08UYEVEdWeRZNouaZqF6RN0w==", + "extraneous": true, + "requires": { + "call-bind": "^1.0.0", + "define-properties": "^1.1.3" + } + }, + "is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "extraneous": true + }, + "is-plain-obj": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz", + "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==", + "extraneous": true + }, + "is-plain-object": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", + "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", + "extraneous": true, + "requires": { + "isobject": "^3.0.1" + } + }, + "is-stream": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", + "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", + "extraneous": true + }, + "is-typed-array": { + "version": "1.1.10", + "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.10.tgz", + "integrity": "sha512-PJqgEHiWZvMpaFZ3uTc8kHPM4+4ADTlDniuQL7cU/UDA0Ql7F70yGfHph3cLNe+c9toaigv+DFzTJKhc2CtO6A==", + "extraneous": true, + "requires": { + "available-typed-arrays": "^1.0.5", + "call-bind": "^1.0.2", + "for-each": "^0.3.3", + "gopd": "^1.0.1", + "has-tostringtag": "^1.0.0" + } + }, + "is-unicode-supported": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", + "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==", + "extraneous": true + }, + "isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "extraneous": true + }, + "isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==", + "extraneous": true + }, + "jest-worker": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.5.1.tgz", + "integrity": "sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==", + "extraneous": true, + "requires": { + "@types/node": "*", + "merge-stream": "^2.0.0", + "supports-color": "^8.0.0" + } + }, + "jju": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/jju/-/jju-1.4.0.tgz", + "integrity": "sha512-8wb9Yw966OSxApiCt0K3yNJL8pnNeIv+OEq2YMidz4FKP6nonSRoOXc80iXY4JaN2FC11B9qsNmDsm+ZOfMROA==", + "extraneous": true + }, + "js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "extraneous": true, + "requires": { + "argparse": "^2.0.1" + }, + "dependencies": { + "argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "extraneous": true + } + } + }, + "json-parse-better-errors": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz", + "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==", + "extraneous": true + }, + "json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "extraneous": true + }, + "json5": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.1.tgz", + "integrity": "sha512-1hqLFMSrGHRHxav9q9gNjJ5EXznIxGVO09xQRrwplcS8qs28pZ8s8hupZAmqDwZUmVZ2Qb2jnyPOWcDH8m8dlA==", + "extraneous": true + }, + "jsonfile": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", + "integrity": "sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==", + "extraneous": true, + "requires": { + "graceful-fs": "^4.1.6" + } + }, "keccak": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/keccak/-/keccak-3.0.2.tgz", @@ -42510,6 +48266,12 @@ "readable-stream": "^3.6.0" } }, + "kind-of": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", + "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", + "extraneous": true + }, "level-concat-iterator": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/level-concat-iterator/-/level-concat-iterator-3.1.0.tgz", @@ -42519,6 +48281,18 @@ "catering": "^2.1.0" } }, + "level-js": { + "version": "https://registry.npmjs.org/level-js/-/level-js-6.1.0.tgz", + "integrity": "sha512-i7mPtkZm68aewfv0FnIUWvFUFfoyzIvVKnUmuQGrelEkP72vSPTaA1SGneWWoCV5KZJG4wlzbJLp1WxVNGuc6A==", + "extraneous": true, + "requires": { + "abstract-leveldown": "^7.2.0", + "buffer": "^6.0.3", + "inherits": "^2.0.3", + "ltgt": "^2.1.2", + "run-parallel-limit": "^1.1.0" + } + }, "level-supports": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/level-supports/-/level-supports-2.1.0.tgz", @@ -42545,11 +48319,151 @@ "node-gyp-build": "^4.3.0" } }, + "loader-runner": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-4.3.0.tgz", + "integrity": "sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg==", + "extraneous": true + }, + "loader-utils": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.4.tgz", + "integrity": "sha512-xXqpXoINfFhgua9xiqD8fPFHgkoq1mmmpE92WlDbm9rNRd/EbRb+Gqf908T2DMfuHjjJlksiK2RbHVOdD/MqSw==", + "extraneous": true, + "requires": { + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^2.1.2" + } + }, + "locate-path": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", + "extraneous": true, + "requires": { + "p-locate": "^5.0.0" + } + }, "lodash": { "version": "4.17.21", "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" }, + "lodash.get": { + "version": "4.4.2", + "resolved": "https://registry.npmjs.org/lodash.get/-/lodash.get-4.4.2.tgz", + "integrity": "sha512-z+Uw/vLuy6gQe8cfaFWD7p0wVv8fJl3mbzXh33RS+0oW2wvUqiRXiQ69gLWSLpgB5/6sU+r6BlQR0MBILadqTQ==", + "extraneous": true + }, + "lodash.isequal": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.isequal/-/lodash.isequal-4.5.0.tgz", + "integrity": "sha512-pDo3lu8Jhfjqls6GkMgpahsF9kCyayhgykjyLMNFTKWrpVdAQtYyB4muAMWozBB4ig/dtWAmsMxLEI8wuz+DYQ==", + "extraneous": true + }, + "log-symbols": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", + "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", + "extraneous": true, + "requires": { + "chalk": "^4.1.0", + "is-unicode-supported": "^0.1.0" + } + }, + "lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "extraneous": true, + "requires": { + "yallist": "^4.0.0" + } + }, + "ltgt": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ltgt/-/ltgt-2.2.1.tgz", + "integrity": "sha512-AI2r85+4MquTw9ZYqabu4nMwy9Oftlfa/e/52t9IjtfG+mGBbTNdAoZ3RQKLHR6r0wQnwZnPIEh/Ya6XTWAKNA==", + "extraneous": true + }, + "make-error": { + "version": "1.3.6", + "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", + "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==", + "extraneous": true + }, + "mcl-wasm": { + "version": "https://registry.npmjs.org/mcl-wasm/-/mcl-wasm-0.9.0.tgz", + "integrity": "sha512-rvU7L/68ZrDk4dpPZteiEqvK9nB/1XbbHmuLK6qIvc4xuuJb/iv1p5X3KEyq6AYatLnc+zbdSlLXTlKgTnCRZQ==", + "extraneous": true + }, + "md5.js": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/md5.js/-/md5.js-1.3.5.tgz", + "integrity": "sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==", + "extraneous": true, + "requires": { + "hash-base": "^3.0.0", + "inherits": "^2.0.1", + "safe-buffer": "^5.1.2" + } + }, + "merge-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", + "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", + "extraneous": true + }, + "micromatch": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", + "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", + "extraneous": true, + "requires": { + "braces": "^3.0.2", + "picomatch": "^2.3.1" + } + }, + "miller-rabin": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/miller-rabin/-/miller-rabin-4.0.1.tgz", + "integrity": "sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA==", + "extraneous": true, + "requires": { + "bn.js": "^4.0.0", + "brorand": "^1.0.1" + }, + "dependencies": { + "bn.js": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", + "extraneous": true + } + } + }, + "mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "extraneous": true + }, + "mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "extraneous": true, + "requires": { + "mime-db": "1.52.0" + } + }, + "mimic-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", + "extraneous": true + }, "minimalistic-assert": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", @@ -42562,17 +48476,81 @@ "integrity": "sha1-9sAMHAsIIkblxNmd+4x8CDsrWCo=", "bundled": true }, + "minimatch": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", + "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "extraneous": true, + "requires": { + "brace-expansion": "^1.1.7" + } + }, + "minimist": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.7.tgz", + "integrity": "sha512-bzfL1YUZsP41gmu/qjrEk0Q6i2ix/cVeAhbCbqH9u3zYutS1cLg00qhrD0M2MVdCcx4Sc0UpP2eBWo9rotpq6g==", + "extraneous": true + }, + "mocha": { + "version": "https://registry.npmjs.org/mocha/-/mocha-9.1.3.tgz", + "integrity": "sha512-Xcpl9FqXOAYqI3j79pEtHBBnQgVXIhpULjGQa7DVb0Po+VzmSIK9kanAiWLHoRR/dbZ2qpdPshuXr8l1VaHCzw==", + "extraneous": true, + "requires": { + "@ungap/promise-all-settled": "1.1.2", + "ansi-colors": "4.1.1", + "browser-stdout": "1.3.1", + "chokidar": "3.5.2", + "debug": "4.3.2", + "diff": "5.0.0", + "escape-string-regexp": "4.0.0", + "find-up": "5.0.0", + "glob": "7.1.7", + "growl": "1.10.5", + "he": "1.2.0", + "js-yaml": "4.1.0", + "log-symbols": "4.1.0", + "minimatch": "3.0.4", + "ms": "2.1.3", + "nanoid": "3.1.25", + "serialize-javascript": "6.0.0", + "strip-json-comments": "3.1.1", + "supports-color": "8.1.1", + "which": "2.0.2", + "workerpool": "6.1.5", + "yargs": "16.2.0", + "yargs-parser": "20.2.4", + "yargs-unparser": "2.0.0" + } + }, "module-error": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/module-error/-/module-error-1.0.2.tgz", "integrity": "sha512-0yuvsqSCv8LbaOKhnsQ/T5JhyFlCYLPXK3U2sgV10zoKQwzs/MyfuQUOZQ1V/6OCOJsK/TRgNVrPuPDqtdMFtA==" }, + "ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "extraneous": true + }, + "nanoid": { + "version": "3.1.25", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.1.25.tgz", + "integrity": "sha512-rdwtIXaXCLFAQbnfqDRnI6jaRHp9fTcYBjtFKE8eezcZ7LuLjhUaQGNeMXf1HmRoCH32CLz6XwX0TtxEOS/A3Q==", + "extraneous": true + }, "napi-macros": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/napi-macros/-/napi-macros-2.0.0.tgz", "integrity": "sha512-A0xLykHtARfueITVDernsAWdtIMbOJgKgcluwENp3AlsKN/PloyO10HtmoqnFAQAcxPkgZN7wdfPfEd0zNGxbg==", "bundled": true }, + "neo-async": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", + "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==", + "extraneous": true + }, "node-addon-api": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-2.0.2.tgz", @@ -42580,22 +48558,276 @@ "bundled": true }, "node-gyp-build": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.3.0.tgz", - "integrity": "sha512-iWjXZvmboq0ja1pUGULQBexmxq8CV4xBhX7VDOTbL7ZR4FOowwY/VOtRxBN/yKxmdGoIp4j5ysNT4u3S2pDQ3Q==", + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.5.0.tgz", + "integrity": "sha512-2iGbaQBV+ITgCz76ZEjmhUKAKVf7xfY1sRl4UiKQspfZMH2h06SyhNsnSVy50cwkFQDGLyif6m/6uFXHkOZ6rg==", "bundled": true }, + "node-loader": { + "version": "https://registry.npmjs.org/node-loader/-/node-loader-1.0.2.tgz", + "integrity": "sha512-myxAxpyMR7knjA4Uzwf3gjxaMtxSWj2vpm9o6AYWWxQ1S3XMBNeG2vzYcp/5eW03cBGfgSxyP+wntP8qhBJNhQ==", + "extraneous": true, + "requires": { + "loader-utils": "^2.0.0", + "schema-utils": "^3.0.0" + } + }, + "node-releases": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.6.tgz", + "integrity": "sha512-PiVXnNuFm5+iYkLBNeq5211hvO38y63T0i2KKh2KnUs3RpzJ+JtODFjkD8yjLwnDkTYF1eKXheUwdssR+NRZdg==", + "extraneous": true + }, + "normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "extraneous": true + }, + "npm-run-path": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", + "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", + "extraneous": true, + "requires": { + "path-key": "^3.0.0" + } + }, + "object-is": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/object-is/-/object-is-1.1.5.tgz", + "integrity": "sha512-3cyDsyHgtmi7I7DfSSI2LDp6SK2lwvtbg0p0R1e0RvTqF5ceGx+K2dfSjm1bKDMVCFEDAQvy+o8c6a7VujOddw==", + "extraneous": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3" + } + }, + "object-keys": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", + "extraneous": true + }, + "once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", + "extraneous": true, + "requires": { + "wrappy": "1" + } + }, + "onetime": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", + "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", + "extraneous": true, + "requires": { + "mimic-fn": "^2.1.0" + } + }, + "os-browserify": { + "version": "https://registry.npmjs.org/os-browserify/-/os-browserify-0.3.0.tgz", + "integrity": "sha512-gjcpUc3clBf9+210TRaDWbf+rZZZEshZ+DlXMRCeAjp0xhTrnQsKHypIy1J3d5hKdUzj69t708EHtU8P6bUn0A==", + "extraneous": true + }, + "p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "extraneous": true, + "requires": { + "yocto-queue": "^0.1.0" + } + }, + "p-locate": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "extraneous": true, + "requires": { + "p-limit": "^3.0.2" + } + }, + "p-try": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", + "extraneous": true + }, + "parse-asn1": { + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/parse-asn1/-/parse-asn1-5.1.6.tgz", + "integrity": "sha512-RnZRo1EPU6JBnra2vGHj0yhp6ebyjBZpmUCLHWiFhxlzvBCCpAuZ7elsBp1PVAbQN0/04VD/19rfzlBSwLstMw==", + "extraneous": true, + "requires": { + "asn1.js": "^5.2.0", + "browserify-aes": "^1.0.0", + "evp_bytestokey": "^1.0.0", + "pbkdf2": "^3.0.3", + "safe-buffer": "^5.1.1" + } + }, + "path-browserify": { + "version": "https://registry.npmjs.org/path-browserify/-/path-browserify-1.0.1.tgz", + "integrity": "sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g==", + "extraneous": true + }, + "path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "extraneous": true + }, + "path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", + "extraneous": true + }, + "path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "extraneous": true + }, + "path-parse": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", + "extraneous": true + }, + "pbkdf2": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.1.2.tgz", + "integrity": "sha512-iuh7L6jA7JEGu2WxDwtQP1ddOpaJNC4KlDEFfdQajSGgGPNi4OyDc2R7QnbY2bR9QjBVGwgvTdNJZoE7RaxUMA==", + "extraneous": true, + "requires": { + "create-hash": "^1.1.2", + "create-hmac": "^1.1.4", + "ripemd160": "^2.0.1", + "safe-buffer": "^5.0.1", + "sha.js": "^2.4.8" + } + }, + "picocolors": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", + "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", + "extraneous": true + }, + "picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "extraneous": true + }, + "pkg-dir": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", + "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", + "extraneous": true, + "requires": { + "find-up": "^4.0.0" + }, + "dependencies": { + "find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "extraneous": true, + "requires": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + } + }, + "locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "extraneous": true, + "requires": { + "p-locate": "^4.1.0" + } + }, + "p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "extraneous": true, + "requires": { + "p-try": "^2.0.0" + } + }, + "p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "extraneous": true, + "requires": { + "p-limit": "^2.2.0" + } + } + } + }, + "process": { + "version": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", + "integrity": "sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==", + "extraneous": true + }, + "public-encrypt": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/public-encrypt/-/public-encrypt-4.0.3.tgz", + "integrity": "sha512-zVpa8oKZSz5bTMTFClc1fQOnyyEzpl5ozpi1B5YcvBrdohMjH2rfsBtyXcuNuwjsDIXmBYlF2N5FlJYhR29t8Q==", + "extraneous": true, + "requires": { + "bn.js": "^4.1.0", + "browserify-rsa": "^4.0.0", + "create-hash": "^1.1.0", + "parse-asn1": "^5.0.0", + "randombytes": "^2.0.1", + "safe-buffer": "^5.1.2" + }, + "dependencies": { + "bn.js": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", + "extraneous": true + } + } + }, + "punycode": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", + "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", + "extraneous": true + }, "queue-microtask": { "version": "1.2.3", "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", "bundled": true }, - "queue-tick": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/queue-tick/-/queue-tick-1.0.0.tgz", - "integrity": "sha512-ULWhjjE8BmiICGn3G8+1L9wFpERNxkf8ysxkAer4+TFdRefDaXOCV5m92aMB9FtBVmn/8sETXLXY6BfW7hyaWQ==", - "bundled": true + "randombytes": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", + "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", + "extraneous": true, + "requires": { + "safe-buffer": "^5.1.0" + } + }, + "randomfill": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/randomfill/-/randomfill-1.0.4.tgz", + "integrity": "sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw==", + "extraneous": true, + "requires": { + "randombytes": "^2.0.5", + "safe-buffer": "^5.1.0" + } }, "readable-stream": { "version": "3.6.0", @@ -42608,12 +48840,101 @@ "util-deprecate": "^1.0.1" } }, + "readdirp": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "extraneous": true, + "requires": { + "picomatch": "^2.2.1" + } + }, + "rechoir": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.6.2.tgz", + "integrity": "sha512-HFM8rkZ+i3zrV+4LQjwQ0W+ez98pApMGM3HUrN04j3CqzPOzl9nmP15Y8YXNm8QHGv/eacOVEjqhmWpkRV0NAw==", + "extraneous": true, + "requires": { + "resolve": "^1.1.6" + } + }, + "require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", + "extraneous": true + }, + "resolve": { + "version": "1.17.0", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.17.0.tgz", + "integrity": "sha512-ic+7JYiV8Vi2yzQGFWOkiZD5Z9z7O2Zhm9XMaTxdJExKasieFCr+yXZ/WmXsckHiKl12ar0y6XiXDx3m4RHn1w==", + "extraneous": true, + "requires": { + "path-parse": "^1.0.6" + } + }, + "resolve-cwd": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-3.0.0.tgz", + "integrity": "sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==", + "extraneous": true, + "requires": { + "resolve-from": "^5.0.0" + } + }, + "resolve-from": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", + "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", + "extraneous": true + }, + "ripemd160": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.2.tgz", + "integrity": "sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==", + "extraneous": true, + "requires": { + "hash-base": "^3.0.0", + "inherits": "^2.0.1" + } + }, + "run-parallel-limit": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/run-parallel-limit/-/run-parallel-limit-1.1.0.tgz", + "integrity": "sha512-jJA7irRNM91jaKc3Hcl1npHsFLOXOoTkPCUL1JEa1R82O2miplXXRaGdjW/KM/98YQWDhJLiSs793CnXfblJUw==", + "extraneous": true, + "requires": { + "queue-microtask": "^1.2.2" + } + }, "safe-buffer": { "version": "5.2.1", "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", "bundled": true }, + "safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", + "extraneous": true + }, + "schema-utils": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.1.tgz", + "integrity": "sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw==", + "extraneous": true, + "requires": { + "@types/json-schema": "^7.0.8", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" + } + }, + "scrypt-js": { + "version": "https://registry.npmjs.org/scrypt-js/-/scrypt-js-3.0.1.tgz", + "integrity": "sha512-cdwTTnqPu0Hyvf5in5asVdZocVDTNRmR7XEcJuIzMjJeSHybHl7vpB66AzwTaIg6CLSbtjcxc8fqcySfnTkccA==", + "extraneous": true + }, "secp256k1": { "version": "4.0.3", "resolved": "https://registry.npmjs.org/secp256k1/-/secp256k1-4.0.3.tgz", @@ -42625,6 +48946,136 @@ "node-gyp-build": "^4.2.0" } }, + "semver": { + "version": "7.3.8", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", + "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", + "extraneous": true, + "requires": { + "lru-cache": "^6.0.0" + } + }, + "serialize-javascript": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.0.tgz", + "integrity": "sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag==", + "extraneous": true, + "requires": { + "randombytes": "^2.1.0" + } + }, + "setimmediate": { + "version": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", + "integrity": "sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA==", + "extraneous": true + }, + "sha.js": { + "version": "2.4.11", + "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz", + "integrity": "sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==", + "extraneous": true, + "requires": { + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" + } + }, + "shallow-clone": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/shallow-clone/-/shallow-clone-3.0.1.tgz", + "integrity": "sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA==", + "extraneous": true, + "requires": { + "kind-of": "^6.0.2" + } + }, + "shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "extraneous": true, + "requires": { + "shebang-regex": "^3.0.0" + } + }, + "shebang-loader": { + "version": "https://registry.npmjs.org/shebang-loader/-/shebang-loader-0.0.1.tgz", + "integrity": "sha512-nQvhUHvKyzGK5aqPxHfHB5nlAN2EZ2U61S2G0YrxAuCRU5iGhFcxxRiaAdb18UoRS1zVMhRz4gdQ1xFEg3AOyA==", + "extraneous": true + }, + "shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "extraneous": true + }, + "shelljs": { + "version": "0.8.5", + "resolved": "https://registry.npmjs.org/shelljs/-/shelljs-0.8.5.tgz", + "integrity": "sha512-TiwcRcrkhHvbrZbnRcFYMLl30Dfov3HKqzp5tO5b4pt6G/SezKcYhmDg15zXVBswHmctSAQKznqNW2LO5tTDow==", + "extraneous": true, + "requires": { + "glob": "^7.0.0", + "interpret": "^1.0.0", + "rechoir": "^0.6.2" + } + }, + "shx": { + "version": "https://registry.npmjs.org/shx/-/shx-0.3.3.tgz", + "integrity": "sha512-nZJ3HFWVoTSyyB+evEKjJ1STiixGztlqwKLTUNV5KqMWtGey9fTd4KU1gdZ1X9BV6215pswQ/Jew9NsuS/fNDA==", + "extraneous": true, + "requires": { + "minimist": "^1.2.3", + "shelljs": "^0.8.4" + } + }, + "signal-exit": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", + "extraneous": true + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "extraneous": true + }, + "source-map-support": { + "version": "0.5.21", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", + "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", + "extraneous": true, + "requires": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + } + }, + "sprintf-js": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", + "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==", + "extraneous": true + }, + "stream-browserify": { + "version": "https://registry.npmjs.org/stream-browserify/-/stream-browserify-3.0.0.tgz", + "integrity": "sha512-H73RAHsVBapbim0tU2JwwOiXUj+fikfiaoYAKHF3VJfA0pe2BCzkhAHBlLG6REzE+2WNZcxOXjK7lkso+9euLA==", + "extraneous": true, + "requires": { + "inherits": "~2.0.4", + "readable-stream": "^3.5.0" + } + }, + "stream-http": { + "version": "https://registry.npmjs.org/stream-http/-/stream-http-3.2.0.tgz", + "integrity": "sha512-Oq1bLqisTyK3TSCXpPbT4sdeYNdmyZJv1LxpEm2vu1ZhK89kSE5YXwZc3cWk0MagGaKriBh9mCFbVGtO+vY29A==", + "extraneous": true, + "requires": { + "builtin-status-codes": "^3.0.0", + "inherits": "^2.0.4", + "readable-stream": "^3.6.0", + "xtend": "^4.0.2" + } + }, "string_decoder": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", @@ -42634,6 +49085,168 @@ "safe-buffer": "~5.2.0" } }, + "string-argv": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/string-argv/-/string-argv-0.3.1.tgz", + "integrity": "sha512-a1uQGz7IyVy9YwhqjZIZu1c8JO8dNIe20xBmSS6qu9kv++k3JGzCVmprbNN5Kn+BgzD5E7YYwg1CcjuJMRNsvg==", + "extraneous": true + }, + "string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "extraneous": true, + "requires": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + } + }, + "strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "extraneous": true, + "requires": { + "ansi-regex": "^5.0.1" + } + }, + "strip-final-newline": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", + "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", + "extraneous": true + }, + "strip-json-comments": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", + "extraneous": true + }, + "supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "extraneous": true, + "requires": { + "has-flag": "^4.0.0" + } + }, + "tapable": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz", + "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==", + "extraneous": true + }, + "terser": { + "version": "5.16.1", + "resolved": "https://registry.npmjs.org/terser/-/terser-5.16.1.tgz", + "integrity": "sha512-xvQfyfA1ayT0qdK47zskQgRZeWLoOQ8JQ6mIgRGVNwZKdQMU+5FkCBjmv4QjcrTzyZquRw2FVtlJSRUmMKQslw==", + "extraneous": true, + "requires": { + "@jridgewell/source-map": "^0.3.2", + "acorn": "^8.5.0", + "commander": "^2.20.0", + "source-map-support": "~0.5.20" + } + }, + "terser-webpack-plugin": { + "version": "5.2.5", + "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.2.5.tgz", + "integrity": "sha512-3luOVHku5l0QBeYS8r4CdHYWEGMmIj3H1U64jgkdZzECcSOJAyJ9TjuqcQZvw1Y+4AOBN9SeYJPJmFn2cM4/2g==", + "extraneous": true, + "requires": { + "jest-worker": "^27.0.6", + "schema-utils": "^3.1.1", + "serialize-javascript": "^6.0.0", + "source-map": "^0.6.1", + "terser": "^5.7.2" + } + }, + "timsort": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/timsort/-/timsort-0.3.0.tgz", + "integrity": "sha512-qsdtZH+vMoCARQtyod4imc2nIJwg9Cc7lPRrw9CzF8ZKR0khdr8+2nX80PBhET3tcyTtJDxAffGh2rXH4tyU8A==", + "extraneous": true + }, + "to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "extraneous": true, + "requires": { + "is-number": "^7.0.0" + } + }, + "ts-loader": { + "version": "https://registry.npmjs.org/ts-loader/-/ts-loader-9.3.1.tgz", + "integrity": "sha512-OkyShkcZTsTwyS3Kt7a4rsT/t2qvEVQuKCTg4LJmpj9fhFR7ukGdZwV6Qq3tRUkqcXtfGpPR7+hFKHCG/0d3Lw==", + "extraneous": true, + "requires": { + "chalk": "^4.1.0", + "enhanced-resolve": "^5.0.0", + "micromatch": "^4.0.0", + "semver": "^7.3.4" + } + }, + "ts-node": { + "version": "https://registry.npmjs.org/ts-node/-/ts-node-10.9.1.tgz", + "integrity": "sha512-NtVysVPkxxrwFGUUxGYhfux8k78pQB3JqYBXlLRZgdGUqTO5wU/UyHop5p70iEbGhB7q5KmiZiU0Y3KlJrScEw==", + "extraneous": true, + "requires": { + "@cspotcode/source-map-support": "^0.8.0", + "@tsconfig/node10": "^1.0.7", + "@tsconfig/node12": "^1.0.7", + "@tsconfig/node14": "^1.0.0", + "@tsconfig/node16": "^1.0.2", + "acorn": "^8.4.1", + "acorn-walk": "^8.1.1", + "arg": "^4.1.0", + "create-require": "^1.1.0", + "diff": "^4.0.1", + "make-error": "^1.1.1", + "v8-compile-cache-lib": "^3.0.1", + "yn": "3.1.1" + }, + "dependencies": { + "diff": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", + "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", + "extraneous": true + } + } + }, + "typescript": { + "version": "https://registry.npmjs.org/typescript/-/typescript-5.1.6.tgz", + "integrity": "sha512-zaWCozRZ6DLEWAWFrVDz1H6FVXzUSfTy5FUMWsQlU8Ym5JP9eO4xkTIROFCQvhQf61z6O/G6ugw3SgAnvvm+HA==", + "extraneous": true + }, + "universalify": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", + "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", + "extraneous": true + }, + "update-browserslist-db": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.10.tgz", + "integrity": "sha512-OztqDenkfFkbSG+tRxBeAnCVPckDBcvibKd35yDONx6OU8N7sqgwc7rCbkJ/WcYtVRZ4ba68d6byhC21GFh7sQ==", + "extraneous": true, + "requires": { + "escalade": "^3.1.1", + "picocolors": "^1.0.0" + } + }, + "uri-js": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", + "extraneous": true, + "requires": { + "punycode": "^2.1.0" + } + }, "utf-8-validate": { "version": "5.0.7", "resolved": "https://registry.npmjs.org/utf-8-validate/-/utf-8-validate-5.0.7.tgz", @@ -42643,16 +49256,263 @@ "node-gyp-build": "^4.3.0" } }, + "util": { + "version": "0.12.4", + "resolved": "https://registry.npmjs.org/util/-/util-0.12.4.tgz", + "integrity": "sha512-bxZ9qtSlGUWSOy9Qa9Xgk11kSslpuZwaxCg4sNIDj6FLucDab2JxnHwyNTCpHMtK1MjoQiWQ6DiUMZYbSrO+Sw==", + "extraneous": true, + "requires": { + "inherits": "^2.0.3", + "is-arguments": "^1.0.4", + "is-generator-function": "^1.0.7", + "is-typed-array": "^1.1.3", + "safe-buffer": "^5.1.2", + "which-typed-array": "^1.1.2" + } + }, "util-deprecate": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", "bundled": true }, - "ws": { - "version": "8.2.3", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.2.3.tgz", - "integrity": "sha512-wBuoj1BDpC6ZQ1B7DWQBYVLphPWkm8i9Y0/3YdHjHKHiohOJ1ws+3OccDWtH+PoC9DZD5WOTrJvNbWvjS6JWaA==" + "v8-compile-cache-lib": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz", + "integrity": "sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==", + "extraneous": true + }, + "validator": { + "version": "13.7.0", + "resolved": "https://registry.npmjs.org/validator/-/validator-13.7.0.tgz", + "integrity": "sha512-nYXQLCBkpJ8X6ltALua9dRrZDHVYxjJ1wgskNt1lH9fzGjs3tgojGSCBjmEPwkWS1y29+DrizMTW19Pr9uB2nw==", + "extraneous": true + }, + "watchpack": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.4.0.tgz", + "integrity": "sha512-Lcvm7MGST/4fup+ifyKi2hjyIAwcdI4HRgtvTpIUxBRhB+RFtUh8XtDOxUfctVCnhVi+QQj49i91OyvzkJl6cg==", + "extraneous": true, + "requires": { + "glob-to-regexp": "^0.4.1", + "graceful-fs": "^4.1.2" + } + }, + "webpack": { + "version": "https://registry.npmjs.org/webpack/-/webpack-5.65.0.tgz", + "integrity": "sha512-Q5or2o6EKs7+oKmJo7LaqZaMOlDWQse9Tm5l1WAfU/ujLGN5Pb0SqGeVkN/4bpPmEqEP5RnVhiqsOtWtUVwGRw==", + "extraneous": true, + "requires": { + "@types/eslint-scope": "^3.7.0", + "@types/estree": "^0.0.50", + "@webassemblyjs/ast": "1.11.1", + "@webassemblyjs/wasm-edit": "1.11.1", + "@webassemblyjs/wasm-parser": "1.11.1", + "acorn": "^8.4.1", + "acorn-import-assertions": "^1.7.6", + "browserslist": "^4.14.5", + "chrome-trace-event": "^1.0.2", + "enhanced-resolve": "^5.8.3", + "es-module-lexer": "^0.9.0", + "eslint-scope": "5.1.1", + "events": "^3.2.0", + "glob-to-regexp": "^0.4.1", + "graceful-fs": "^4.2.4", + "json-parse-better-errors": "^1.0.2", + "loader-runner": "^4.2.0", + "mime-types": "^2.1.27", + "neo-async": "^2.6.2", + "schema-utils": "^3.1.0", + "tapable": "^2.1.1", + "terser-webpack-plugin": "^5.1.3", + "watchpack": "^2.3.1", + "webpack-sources": "^3.2.2" + } + }, + "webpack-cli": { + "version": "https://registry.npmjs.org/webpack-cli/-/webpack-cli-4.9.1.tgz", + "integrity": "sha512-JYRFVuyFpzDxMDB+v/nanUdQYcZtqFPGzmlW4s+UkPMFhSpfRNmf1z4AwYcHJVdvEFAM7FFCQdNTpsBYhDLusQ==", + "extraneous": true, + "requires": { + "@discoveryjs/json-ext": "^0.5.0", + "@webpack-cli/configtest": "^1.1.0", + "@webpack-cli/info": "^1.4.0", + "@webpack-cli/serve": "^1.6.0", + "colorette": "^2.0.14", + "commander": "^7.0.0", + "execa": "^5.0.0", + "fastest-levenshtein": "^1.0.12", + "import-local": "^3.0.2", + "interpret": "^2.2.0", + "rechoir": "^0.7.0", + "webpack-merge": "^5.7.3" + }, + "dependencies": { + "commander": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", + "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==", + "extraneous": true + }, + "interpret": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/interpret/-/interpret-2.2.0.tgz", + "integrity": "sha512-Ju0Bz/cEia55xDwUWEa8+olFpCiQoypjnQySseKtmjNrnps3P+xfpUmGr90T7yjlVJmOtybRvPXhKMbHr+fWnw==", + "extraneous": true + }, + "rechoir": { + "version": "0.7.1", + "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.7.1.tgz", + "integrity": "sha512-/njmZ8s1wVeR6pjTZ+0nCnv8SpZNRMT2D1RLOJQESlYFDBvwpTA4KWJpZ+sBJ4+vhjILRcK7JIFdGCdxEAAitg==", + "extraneous": true, + "requires": { + "resolve": "^1.9.0" + } + } + } + }, + "webpack-merge": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/webpack-merge/-/webpack-merge-5.8.0.tgz", + "integrity": "sha512-/SaI7xY0831XwP6kzuwhKWVKDP9t1QY1h65lAFLbZqMPIuYcD9QAW4u9STIbU9kaJbPBB/geU/gLr1wDjOhQ+Q==", + "extraneous": true, + "requires": { + "clone-deep": "^4.0.1", + "wildcard": "^2.0.0" + } + }, + "webpack-sources": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-3.2.3.tgz", + "integrity": "sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==", + "extraneous": true + }, + "which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "extraneous": true, + "requires": { + "isexe": "^2.0.0" + } + }, + "which-typed-array": { + "version": "1.1.9", + "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.9.tgz", + "integrity": "sha512-w9c4xkx6mPidwp7180ckYWfMmvxpjlZuIudNtDf4N/tTAUB8VJbX25qZoAsrtGuYNnGw3pa0AXgbGKRB8/EceA==", + "extraneous": true, + "requires": { + "available-typed-arrays": "^1.0.5", + "call-bind": "^1.0.2", + "for-each": "^0.3.3", + "gopd": "^1.0.1", + "has-tostringtag": "^1.0.0", + "is-typed-array": "^1.1.10" + } + }, + "wildcard": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/wildcard/-/wildcard-2.0.0.tgz", + "integrity": "sha512-JcKqAHLPxcdb9KM49dufGXn2x3ssnfjbcaQdLlfZsL9rH9wgDQjUtDxbo8NE0F6SFvydeu1VhZe7hZuHsB2/pw==", + "extraneous": true + }, + "workerpool": { + "version": "6.1.5", + "resolved": "https://registry.npmjs.org/workerpool/-/workerpool-6.1.5.tgz", + "integrity": "sha512-XdKkCK0Zqc6w3iTxLckiuJ81tiD/o5rBE/m+nXpRCB+/Sq4DqkfXZ/x0jW02DG1tGsfUGXbTJyZDP+eu67haSw==", + "extraneous": true + }, + "wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "extraneous": true, + "requires": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + } + }, + "wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", + "extraneous": true + }, + "xtend": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", + "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", + "extraneous": true + }, + "y18n": { + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", + "extraneous": true + }, + "yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "extraneous": true + }, + "yargs": { + "version": "16.2.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", + "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", + "extraneous": true, + "requires": { + "cliui": "^7.0.2", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.0", + "y18n": "^5.0.5", + "yargs-parser": "^20.2.2" + } + }, + "yargs-parser": { + "version": "20.2.4", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.4.tgz", + "integrity": "sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA==", + "extraneous": true + }, + "yargs-unparser": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/yargs-unparser/-/yargs-unparser-2.0.0.tgz", + "integrity": "sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA==", + "extraneous": true, + "requires": { + "camelcase": "^6.0.0", + "decamelize": "^4.0.0", + "flat": "^5.0.2", + "is-plain-obj": "^2.1.0" + } + }, + "yn": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz", + "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==", + "extraneous": true + }, + "yocto-queue": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", + "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", + "extraneous": true + }, + "z-schema": { + "version": "5.0.4", + "resolved": "https://registry.npmjs.org/z-schema/-/z-schema-5.0.4.tgz", + "integrity": "sha512-gm/lx3hDzJNcLwseIeQVm1UcwhWIKpSB4NqH89pTBtFns4k/HDHudsICtvG05Bvw/Mv3jMyk700y5dadueLHdA==", + "extraneous": true, + "requires": { + "commander": "^2.20.3", + "lodash.get": "^4.4.2", + "lodash.isequal": "^4.5.0", + "validator": "^13.7.0" + } } } }, @@ -48806,59 +55666,6 @@ } } }, - "gauge": { - "version": "2.7.4", - "resolved": "https://registry.npmjs.org/gauge/-/gauge-2.7.4.tgz", - "integrity": "sha512-14x4kjc6lkD3ltw589k0NrPD6cCNTD6CWoVUNpB85+DrtONoZn+Rug6xZU5RvSC4+TZPxA5AnBibQYAvZn41Hg==", - "optional": true, - "requires": { - "aproba": "^1.0.3", - "console-control-strings": "^1.0.0", - "has-unicode": "^2.0.0", - "object-assign": "^4.1.0", - "signal-exit": "^3.0.0", - "string-width": "^1.0.1", - "strip-ansi": "^3.0.1", - "wide-align": "^1.1.0" - }, - "dependencies": { - "ansi-regex": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA==", - "optional": true - }, - "is-fullwidth-code-point": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", - "integrity": "sha512-1pqUqRjkhPJ9miNq9SwMfdvi6lBJcd6eFxvfaivQhaH3SgisfiuudvFntdKOmxuee/77l+FPjKrQjWvmPjWrRw==", - "optional": true, - "requires": { - "number-is-nan": "^1.0.0" - } - }, - "string-width": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", - "integrity": "sha512-0XsVpQLnVCXHJfyEs8tC0zpTVIr5PKKsQtkT29IwupnPTjtPmQ3xT/4yCREF9hYkV/3M3kzcUTSAZT6a6h81tw==", - "optional": true, - "requires": { - "code-point-at": "^1.0.0", - "is-fullwidth-code-point": "^1.0.0", - "strip-ansi": "^3.0.0" - } - }, - "strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha512-VhumSSbBqDTP8p2ZLKj40UjBCV4+v8bUSEpUb4KjRgWk9pbqGF4REFj6KEagidb2f/M6AzC0EmFyDNGaw9OCzg==", - "optional": true, - "requires": { - "ansi-regex": "^2.0.0" - } - } - } - }, "gensync": { "version": "1.0.0-beta.2", "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", @@ -48890,6 +55697,12 @@ "resolved": "https://registry.npmjs.org/get-port/-/get-port-3.2.0.tgz", "integrity": "sha512-x5UJKlgeUiNT8nyo/AcnwLnZuZNcSjSw0kogRB+Whd1fjjFq4B1hySFxSFWWSn4mIBzg3sRNUDFYc4g5gjPoLg==" }, + "get-stdin": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-8.0.0.tgz", + "integrity": "sha512-sY22aA6xchAzprjyqmSEQv4UbAAzRN0L2dQB0NlN5acTTK9Don6nhoc3eAbUnpZiCANAMfd/+40kVdKfFygohg==", + "optional": true + }, "get-stream": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", @@ -48912,17 +55725,10 @@ "assert-plus": "^1.0.0" } }, - "github-from-package": { - "version": "0.0.0", - "resolved": "https://registry.npmjs.org/github-from-package/-/github-from-package-0.0.0.tgz", - "integrity": "sha512-SyHy3T1v2NUXn29OsWdxmK6RwHD+vkj3v8en8AOBZ1wBQ/hCAQ5bAQTD02kW4W9tUp/3Qh6J8r9EvntiyCmOOw==", - "optional": true - }, "glob": { "version": "8.0.3", "resolved": "https://registry.npmjs.org/glob/-/glob-8.0.3.tgz", "integrity": "sha512-ull455NHSHI/Y1FqGaaYFaLGkNMMJbavMrEGFXG/PGrg6y7sutWHUHrz6gy6WEBH6akM1M414dWKCNs+IhKdiQ==", - "peer": true, "requires": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", @@ -49037,27 +55843,26 @@ } }, "hardhat": { - "version": "2.14.0", - "resolved": "https://registry.npmjs.org/hardhat/-/hardhat-2.14.0.tgz", - "integrity": "sha512-73jsInY4zZahMSVFurSK+5TNCJTXMv+vemvGia0Ac34Mm19fYp6vEPVGF3sucbumszsYxiTT2TbS8Ii2dsDSoQ==", + "version": "2.17.3", + "resolved": "https://registry.npmjs.org/hardhat/-/hardhat-2.17.3.tgz", + "integrity": "sha512-SFZoYVXW1bWJZrIIKXOA+IgcctfuKXDwENywiYNT2dM3YQc4fXNaTbuk/vpPzHIF50upByx4zW5EqczKYQubsA==", "requires": { "@ethersproject/abi": "^5.1.2", "@metamask/eth-sig-util": "^4.0.0", - "@nomicfoundation/ethereumjs-block": "5.0.1", - "@nomicfoundation/ethereumjs-blockchain": "7.0.1", - "@nomicfoundation/ethereumjs-common": "4.0.1", - "@nomicfoundation/ethereumjs-evm": "2.0.1", - "@nomicfoundation/ethereumjs-rlp": "5.0.1", - "@nomicfoundation/ethereumjs-statemanager": "2.0.1", - "@nomicfoundation/ethereumjs-trie": "6.0.1", - "@nomicfoundation/ethereumjs-tx": "5.0.1", - "@nomicfoundation/ethereumjs-util": "9.0.1", - "@nomicfoundation/ethereumjs-vm": "7.0.1", + "@nomicfoundation/ethereumjs-block": "5.0.2", + "@nomicfoundation/ethereumjs-blockchain": "7.0.2", + "@nomicfoundation/ethereumjs-common": "4.0.2", + "@nomicfoundation/ethereumjs-evm": "2.0.2", + "@nomicfoundation/ethereumjs-rlp": "5.0.2", + "@nomicfoundation/ethereumjs-statemanager": "2.0.2", + "@nomicfoundation/ethereumjs-trie": "6.0.2", + "@nomicfoundation/ethereumjs-tx": "5.0.2", + "@nomicfoundation/ethereumjs-util": "9.0.2", + "@nomicfoundation/ethereumjs-vm": "7.0.2", "@nomicfoundation/solidity-analyzer": "^0.1.0", "@sentry/node": "^5.18.1", "@types/bn.js": "^5.1.0", "@types/lru-cache": "^5.1.0", - "abort-controller": "^3.0.0", "adm-zip": "^0.4.16", "aggregate-error": "^3.0.0", "ansi-escapes": "^4.3.0", @@ -49080,7 +55885,6 @@ "mnemonist": "^0.38.0", "mocha": "^10.0.0", "p-map": "^4.0.0", - "qs": "^6.7.0", "raw-body": "^2.4.1", "resolve": "1.17.0", "semver": "^6.3.0", @@ -49300,9 +56104,9 @@ } }, "hardhat-contract-sizer": { - "version": "2.8.0", - "resolved": "https://registry.npmjs.org/hardhat-contract-sizer/-/hardhat-contract-sizer-2.8.0.tgz", - "integrity": "sha512-jXt2Si3uIDx5z99J+gvKa0yvIw156pE4dpH9X/PvTQv652BUd+qGj7WT93PXnHXGh5qhQLkjDYeZMYNOThfjFg==", + "version": "2.10.0", + "resolved": "https://registry.npmjs.org/hardhat-contract-sizer/-/hardhat-contract-sizer-2.10.0.tgz", + "integrity": "sha512-QiinUgBD5MqJZJh1hl1jc9dNnpJg7eE/w4/4GEnrcmZJJTDbVFNe3+/3Ep24XqISSkYxRz36czcPHKHd/a0dwA==", "requires": { "chalk": "^4.0.0", "cli-table3": "^0.6.0", @@ -49325,9 +56129,9 @@ } }, "hardhat-deploy": { - "version": "0.11.29", - "resolved": "https://registry.npmjs.org/hardhat-deploy/-/hardhat-deploy-0.11.29.tgz", - "integrity": "sha512-9F+MRFkEocelzB8d+SDDCcTL7edBYAj2S63ldknvfIIBSajeB6q1/jm+dlK1GjcWzAzw7EVoxtjJXzxAxZfZcg==", + "version": "0.11.37", + "resolved": "https://registry.npmjs.org/hardhat-deploy/-/hardhat-deploy-0.11.37.tgz", + "integrity": "sha512-pohPSEEo/X9Yfv0Fc0kXBQW6JO0LNOILBGCP69Ci1COJvLht1hLjAtXt/hccyvD9qY/uwJAM75fmsf41Y9N7lg==", "dev": true, "requires": { "@ethersproject/abi": "^5.7.0", @@ -49396,6 +56200,16 @@ "integrity": "sha512-Z3Avr/v6lfDfa7qkriF/h40X8wmuy8qZfS4HgbINkDdmCiKAxQUi5Y5TgsJBZFYN1MvYzLTIbD/fo1dxZ4gsng==", "requires": {} }, + "hardhat-tracer": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/hardhat-tracer/-/hardhat-tracer-2.6.0.tgz", + "integrity": "sha512-omsGd9NN5i0WmIFuEVZIxULfu5v6zU4/Vx+6oIVmziIJdQgZacmP5VmtVhnJEQd7IPDZNQAa+iBbW827g/ErFQ==", + "requires": { + "chalk": "^4.1.2", + "debug": "^4.3.4", + "ethers": "^5.6.1" + } + }, "hardhat-watcher": { "version": "2.5.0", "resolved": "https://registry.npmjs.org/hardhat-watcher/-/hardhat-watcher-2.5.0.tgz", @@ -49456,12 +56270,6 @@ "has-symbols": "^1.0.2" } }, - "has-unicode": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", - "integrity": "sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ==", - "optional": true - }, "hash-base": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.1.0.tgz", @@ -49526,7 +56334,7 @@ "version": "8.0.1", "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-8.0.1.tgz", "integrity": "sha512-4lVbmc1diZC7GUJQtRQ5yBAeUCL1exyMwmForWkRLnwyzWBFxN633SALPMGYaWZvKe9j1pRZJpauvmxENSp/EA==", - "dev": true, + "devOptional": true, "requires": { "domelementtype": "^2.3.0", "domhandler": "^5.0.2", @@ -49684,12 +56492,6 @@ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" }, - "ini": { - "version": "1.3.8", - "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", - "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", - "optional": true - }, "internal-slot": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.3.tgz", @@ -49775,6 +56577,14 @@ "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz", "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==" }, + "is-ci": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-2.0.0.tgz", + "integrity": "sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w==", + "requires": { + "ci-info": "^2.0.0" + } + }, "is-date-object": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz", @@ -49783,6 +56593,11 @@ "has-tostringtag": "^1.0.0" } }, + "is-docker": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz", + "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==" + }, "is-extglob": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", @@ -49871,6 +56686,11 @@ "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz", "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==" }, + "is-promise": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-2.2.2.tgz", + "integrity": "sha512-+lP4/6lKUBfQjZ2pdxThZvLUAafmZb8OAxFb8XXtiQmS35INgr85hdOGoEs124ez1FCnZJt6jau/T+alh58QFQ==" + }, "is-regex": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", @@ -49963,6 +56783,14 @@ "call-bind": "^1.0.2" } }, + "is-wsl": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", + "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", + "requires": { + "is-docker": "^2.0.0" + } + }, "isarray": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", @@ -50009,9 +56837,9 @@ "integrity": "sha512-nO6jcEfZWQXDhOiBtG2KvKyEptz7RVbpGP4vTD2hLBdmNQSsCiicO2Ioinv6UI4y9ukqnBpy+XZ9H6uLNgJTlw==" }, "jayson": { - "version": "3.7.0", - "resolved": "https://registry.npmjs.org/jayson/-/jayson-3.7.0.tgz", - "integrity": "sha512-tfy39KJMrrXJ+mFcMpxwBvFDetS8LAID93+rycFglIQM4kl3uNR3W4lBLE/FFhsoUCEox5Dt2adVpDm/XtebbQ==", + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/jayson/-/jayson-4.1.0.tgz", + "integrity": "sha512-R6JlbyLN53Mjku329XoRT2zJAE6ZgOQ8f91ucYdMCD4nkGCF9kZSrcGXpHIU4jeKj58zUZke2p+cdQchU7Ly7A==", "requires": { "@types/connect": "^3.4.33", "@types/node": "^12.12.54", @@ -50023,7 +56851,6 @@ "isomorphic-ws": "^4.0.1", "json-stringify-safe": "^5.0.1", "JSONStream": "^1.3.5", - "lodash": "^4.17.20", "uuid": "^8.3.2", "ws": "^7.4.5" }, @@ -50047,10 +56874,16 @@ "integrity": "sha512-HvdH2LzI/EAZcUwA8+0nKNtWHqS+ZmijLA30RwZA0bo7ToCckjK5MkGhjED9KoRcXO6BaGI3I9UIzSA1FKFPOQ==", "dev": true }, + "js-graph-algorithms": { + "version": "1.0.18", + "resolved": "https://registry.npmjs.org/js-graph-algorithms/-/js-graph-algorithms-1.0.18.tgz", + "integrity": "sha512-Gu1wtWzXBzGeye/j9BuyplGHscwqKRZodp/0M1vyBc19RJpblSwKGu099KwwaTx9cRIV+Qupk8xUMfEiGfFqSA==", + "optional": true + }, "js-sdsl": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/js-sdsl/-/js-sdsl-4.4.0.tgz", - "integrity": "sha512-FfVSdx6pJ41Oa+CF7RDaFmTnCaFhua+SNYQX74riGOpl96x+2jQCqEfQ2bnXu/5DPCqlRuiqyvTJM0Qjz26IVg==" + "version": "4.4.2", + "resolved": "https://registry.npmjs.org/js-sdsl/-/js-sdsl-4.4.2.tgz", + "integrity": "sha512-dwXFwByc/ajSV6m5bcKAPwe4yDDF6D614pxmIi5odytzxRlwqF6nwoiCek80Ixc7Cvma5awClxrzFtxCQvcM8w==" }, "js-sha3": { "version": "0.8.0", @@ -50238,6 +57071,14 @@ "graceful-fs": "^4.1.9" } }, + "klaw-sync": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/klaw-sync/-/klaw-sync-6.0.0.tgz", + "integrity": "sha512-nIeuVSzdCCs6TDPTqI8w1Yre34sSq7AkZ4B3sfOBbI2CgVSB4Du4aLQijFU2+lhAFCwt9+42Hel6lQNIv6AntQ==", + "requires": { + "graceful-fs": "^4.1.11" + } + }, "lcid": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/lcid/-/lcid-1.0.0.tgz", @@ -50537,6 +57378,18 @@ "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", "dev": true }, + "lodash.omit": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.omit/-/lodash.omit-4.5.0.tgz", + "integrity": "sha512-XeqSp49hNGmlkj2EJlfrQFIzQ6lXdNro9sddtQzcJY8QaoC2GO0DT7xaIokHeyM+mIT0mPMlPvkYzg2xCuHdZg==", + "optional": true + }, + "lodash.pick": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/lodash.pick/-/lodash.pick-4.4.0.tgz", + "integrity": "sha512-hXt6Ul/5yWjfklSGvLQl8vM//l3FtyHZeuelpzK6mm99pNvN9yTDruNZPEJZD1oWrqo+izBmB7oUfWgcCX7s4Q==", + "optional": true + }, "lodash.sortby": { "version": "4.7.0", "resolved": "https://registry.npmjs.org/lodash.sortby/-/lodash.sortby-4.7.0.tgz", @@ -50617,6 +57470,14 @@ "yallist": "^3.0.2" } }, + "lru-queue": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/lru-queue/-/lru-queue-0.1.0.tgz", + "integrity": "sha512-BpdYkt9EvGl8OfWHDQPISVpcl5xZthb+XPsbELj5AQXxIC8IriDZIQYjBJPEm5rS420sjZ0TLEzRcq5KdBhYrQ==", + "requires": { + "es5-ext": "~0.10.2" + } + }, "ltgt": { "version": "2.2.1", "resolved": "https://registry.npmjs.org/ltgt/-/ltgt-2.2.1.tgz", @@ -50649,15 +57510,15 @@ "dev": true }, "mathjs": { - "version": "11.8.0", - "resolved": "https://registry.npmjs.org/mathjs/-/mathjs-11.8.0.tgz", - "integrity": "sha512-I7r8HCoqUGyEiHQdeOCF2m2k9N+tcOHO3cZQ3tyJkMMBQMFqMR7dMQEboBMJAiFW2Um3PEItGPwcOc4P6KRqwg==", + "version": "11.11.0", + "resolved": "https://registry.npmjs.org/mathjs/-/mathjs-11.11.0.tgz", + "integrity": "sha512-i1Ao/tv1mlNd09XlOMOUu3KMySX3S0jhHNfDPzh0sCnPf1i62x6RjxhLwZ9ytmVSs0OdhF3moI4O84VSEjmUFw==", "requires": { - "@babel/runtime": "^7.21.0", + "@babel/runtime": "^7.22.6", "complex.js": "^2.1.1", "decimal.js": "^10.4.3", "escape-latex": "^1.2.0", - "fraction.js": "^4.2.0", + "fraction.js": "4.3.4", "javascript-natural-sort": "^0.7.1", "seedrandom": "^3.0.5", "tiny-emitter": "^2.1.0", @@ -50733,6 +57594,21 @@ } } }, + "memoizee": { + "version": "0.4.15", + "resolved": "https://registry.npmjs.org/memoizee/-/memoizee-0.4.15.tgz", + "integrity": "sha512-UBWmJpLZd5STPm7PMUlOw/TSy972M+z8gcyQ5veOnSDRREz/0bmpyTfKt3/51DhEBqCZQn1udM/5flcSPYhkdQ==", + "requires": { + "d": "^1.0.1", + "es5-ext": "^0.10.53", + "es6-weak-map": "^2.0.3", + "event-emitter": "^0.3.5", + "is-promise": "^2.2.2", + "lru-queue": "^0.1.0", + "next-tick": "^1.1.0", + "timers-ext": "^0.1.7" + } + }, "memory-level": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/memory-level/-/memory-level-1.0.0.tgz", @@ -50776,6 +57652,15 @@ "resolved": "https://registry.npmjs.org/micro-ftch/-/micro-ftch-0.3.1.tgz", "integrity": "sha512-/0LLxhzP0tfiR5hcQebtudP56gUurs2CLkGarnCiB/OqEyUFQ6U3paQi/tgLv0hBJYt2rnr9MNpxz4fiiugstg==" }, + "micromatch": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", + "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", + "requires": { + "braces": "^3.0.2", + "picomatch": "^2.3.1" + } + }, "miller-rabin": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/miller-rabin/-/miller-rabin-4.0.1.tgz", @@ -50816,12 +57701,6 @@ "integrity": "sha512-Ysbi9uYW9hFyfrThdDEQuykN4Ey6BuwPD2kpI5ES/nFTDn/98yxYNLZJcgUAKPT/mcrLLKaGzJR9YVxJrIdASQ==", "optional": true }, - "mimic-response": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-2.1.0.tgz", - "integrity": "sha512-wXqjST+SLt7R009ySCglWBCFpjUygmCIfD790/kVbiGmUgfYGuB14PiTd5DwVxSV4NcYHjzMkoj5LjQZwTQLEA==", - "optional": true - }, "min-document": { "version": "2.19.0", "resolved": "https://registry.npmjs.org/min-document/-/min-document-2.19.0.tgz", @@ -50844,7 +57723,6 @@ "version": "5.1.0", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.0.tgz", "integrity": "sha512-9TPBGGak4nHfGZsPBohm9AWg6NoT7QTCehS3BIJABslyZbzxfV78QM2Y6+i741OPZIafFAaiiEMh5OyIrJPgtg==", - "peer": true, "requires": { "brace-expansion": "^2.0.1" } @@ -51147,12 +58025,6 @@ "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.4.tgz", "integrity": "sha512-MqBkQh/OHTS2egovRtLk45wEyNXwF+cokD+1YPf9u5VfJiRdAiRwB2froX5Co9Rh20xs4siNPm8naNotSD6RBw==" }, - "napi-build-utils": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/napi-build-utils/-/napi-build-utils-1.0.2.tgz", - "integrity": "sha512-ONmRUqK7zj7DWX0D9ADe03wbwOBZxNAfF20PlGfCWQcD3+/MakShIHrMqx9YwPTfxDdF1zLeL+RGZiR9kGMLdg==", - "optional": true - }, "napi-macros": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/napi-macros/-/napi-macros-2.0.0.tgz", @@ -51175,6 +58047,11 @@ "resolved": "https://registry.npmjs.org/next-tick/-/next-tick-1.1.0.tgz", "integrity": "sha512-CXdUiJembsNjuToQvxayPZF9Vqht7hewsvy2sOWafLvi2awflj9mOC6bHIg50orX8IJvWKY9wYQ/zB2kogPslQ==" }, + "nice-try": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz", + "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==" + }, "no-case": { "version": "2.3.2", "resolved": "https://registry.npmjs.org/no-case/-/no-case-2.3.2.tgz", @@ -51183,23 +58060,6 @@ "lower-case": "^1.1.1" } }, - "node-abi": { - "version": "2.30.1", - "resolved": "https://registry.npmjs.org/node-abi/-/node-abi-2.30.1.tgz", - "integrity": "sha512-/2D0wOQPgaUWzVSVgRMx+trKJRC2UG4SUc4oCJoXx9Uxjtp0Vy3/kt7zcbxHF8+Z/pK3UloLWzBISg72brfy1w==", - "optional": true, - "requires": { - "semver": "^5.4.1" - }, - "dependencies": { - "semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "optional": true - } - } - }, "node-abort-controller": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/node-abort-controller/-/node-abort-controller-3.1.1.tgz", @@ -51228,9 +58088,9 @@ } }, "node-fetch": { - "version": "2.6.7", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz", - "integrity": "sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==", + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz", + "integrity": "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==", "requires": { "whatwg-url": "^5.0.0" } @@ -51240,18 +58100,6 @@ "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.5.0.tgz", "integrity": "sha512-2iGbaQBV+ITgCz76ZEjmhUKAKVf7xfY1sRl4UiKQspfZMH2h06SyhNsnSVy50cwkFQDGLyif6m/6uFXHkOZ6rg==" }, - "node-hid": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/node-hid/-/node-hid-1.3.0.tgz", - "integrity": "sha512-BA6G4V84kiNd1uAChub/Z/5s/xS3EHBCxotQ0nyYrUG65mXewUDHE1tWOSqA2dp3N+mV0Ffq9wo2AW9t4p/G7g==", - "optional": true, - "requires": { - "bindings": "^1.5.0", - "nan": "^2.14.0", - "node-abi": "^2.18.0", - "prebuild-install": "^5.3.4" - } - }, "node-interval-tree": { "version": "1.3.3", "resolved": "https://registry.npmjs.org/node-interval-tree/-/node-interval-tree-1.3.3.tgz", @@ -51332,12 +58180,6 @@ "resolved": "https://registry.npmjs.org/nofilter/-/nofilter-1.0.4.tgz", "integrity": "sha512-N8lidFp+fCz+TD51+haYdbDGrcBWwuHX40F5+z0qkUjMJ5Tp+rdSuAkMJ9N9eoolDlEVTf6u5icM+cNKkKW2mA==" }, - "noop-logger": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/noop-logger/-/noop-logger-0.1.1.tgz", - "integrity": "sha512-6kM8CLXvuW5crTxsAtva2YLrRrDaiTIkIePWs9moLHqbFWT94WpNFjwS/5dfLfECg5i/lkmw3aoqVidxt23TEQ==", - "optional": true - }, "nopt": { "version": "1.0.10", "resolved": "https://registry.npmjs.org/nopt/-/nopt-1.0.10.tgz", @@ -51389,23 +58231,11 @@ "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-6.1.0.tgz", "integrity": "sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A==" }, - "npmlog": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-4.1.2.tgz", - "integrity": "sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg==", - "optional": true, - "requires": { - "are-we-there-yet": "~1.1.2", - "console-control-strings": "~1.1.0", - "gauge": "~2.7.3", - "set-blocking": "~2.0.0" - } - }, "nth-check": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.1.1.tgz", "integrity": "sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==", - "dev": true, + "devOptional": true, "requires": { "boolbase": "^1.0.0" } @@ -51519,6 +58349,15 @@ } } }, + "open": { + "version": "7.4.2", + "resolved": "https://registry.npmjs.org/open/-/open-7.4.2.tgz", + "integrity": "sha512-MVHddDVweXZF3awtlAS+6pgKLlm/JgxZ90+/NBurBoQctVOOB/zDdVjcyPzQ+0laDGbsWgrRkflI65sQeOgT9Q==", + "requires": { + "is-docker": "^2.0.0", + "is-wsl": "^2.1.1" + } + }, "ordinal": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/ordinal/-/ordinal-1.0.3.tgz", @@ -51638,7 +58477,7 @@ "version": "7.1.1", "resolved": "https://registry.npmjs.org/parse5/-/parse5-7.1.1.tgz", "integrity": "sha512-kwpuwzB+px5WUg9pyK0IcK/shltJN5/OVhQagxhCQNtT9Y9QRZqNY2e1cmbu/paRh5LMnz/oVTVLBpjFmMZhSg==", - "dev": true, + "devOptional": true, "requires": { "entities": "^4.4.0" } @@ -51647,7 +58486,7 @@ "version": "7.0.0", "resolved": "https://registry.npmjs.org/parse5-htmlparser2-tree-adapter/-/parse5-htmlparser2-tree-adapter-7.0.0.tgz", "integrity": "sha512-B77tOZrqqfUfnVcOrUvfdLbz4pu4RopLD/4vmu3HUPswwTA8OH0EMW9BlWR2B0RCoiZRAHEUu7IxeP1Pd1UU+g==", - "dev": true, + "devOptional": true, "requires": { "domhandler": "^5.0.2", "parse5": "^7.0.0" @@ -51667,6 +58506,83 @@ "upper-case-first": "^1.1.0" } }, + "patch-package": { + "version": "6.5.1", + "resolved": "https://registry.npmjs.org/patch-package/-/patch-package-6.5.1.tgz", + "integrity": "sha512-I/4Zsalfhc6bphmJTlrLoOcAF87jcxko4q0qsv4bGcurbr8IskEOtdnt9iCmsQVGL1B+iUhSQqweyTLJfCF9rA==", + "requires": { + "@yarnpkg/lockfile": "^1.1.0", + "chalk": "^4.1.2", + "cross-spawn": "^6.0.5", + "find-yarn-workspace-root": "^2.0.0", + "fs-extra": "^9.0.0", + "is-ci": "^2.0.0", + "klaw-sync": "^6.0.0", + "minimist": "^1.2.6", + "open": "^7.4.2", + "rimraf": "^2.6.3", + "semver": "^5.6.0", + "slash": "^2.0.0", + "tmp": "^0.0.33", + "yaml": "^1.10.2" + }, + "dependencies": { + "brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "requires": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "fs-extra": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", + "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", + "requires": { + "at-least-node": "^1.0.0", + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + } + }, + "glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + }, + "minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "requires": { + "brace-expansion": "^1.1.7" + } + }, + "rimraf": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", + "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", + "requires": { + "glob": "^7.1.3" + } + }, + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" + } + } + }, "path": { "version": "0.12.7", "resolved": "https://registry.npmjs.org/path/-/path-0.12.7.tgz", @@ -51715,6 +58631,11 @@ "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==" }, + "path-key": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", + "integrity": "sha512-fEHGKCSmUSDPv4uoj8AlD+joPlq3peND+HRYyxFz4KPw4z926S/b8rIuFs2FYJg3BwsxJf6A9/3eIdLaYC+9Dw==" + }, "path-parse": { "version": "1.0.7", "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", @@ -51797,6 +58718,15 @@ "pinkie": "^2.0.0" } }, + "pkg-dir": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", + "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", + "optional": true, + "requires": { + "find-up": "^4.0.0" + } + }, "pkg-up": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/pkg-up/-/pkg-up-3.1.0.tgz", @@ -51861,6 +58791,12 @@ "integrity": "sha512-Nc3IT5yHzflTfbjgqWcCPpo7DaKy4FnpB0l/zCAW0Tc7jxAiuqSxHasntB3D7887LSrA93kDJ9IXovxJYxyLCA==", "optional": true }, + "pollock": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/pollock/-/pollock-0.2.1.tgz", + "integrity": "sha512-2Xy6LImSXm0ANKv9BKSVuCa6Z4ACbK7oUrl9gtUgqLkekL7n9C0mlWsOGYYuGbCG8xT0x3Q4F31C3ZMyVQjwsg==", + "optional": true + }, "pouchdb": { "version": "7.3.0", "resolved": "https://registry.npmjs.org/pouchdb/-/pouchdb-7.3.0.tgz", @@ -51906,6 +58842,15 @@ "leveldown": "^5.4.0" } }, + "node-fetch": { + "version": "2.6.7", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz", + "integrity": "sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==", + "optional": true, + "requires": { + "whatwg-url": "^5.0.0" + } + }, "readable-stream": { "version": "1.1.14", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz", @@ -52085,6 +59030,17 @@ "abort-controller": "3.0.0", "fetch-cookie": "0.11.0", "node-fetch": "2.6.7" + }, + "dependencies": { + "node-fetch": { + "version": "2.6.7", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz", + "integrity": "sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==", + "optional": true, + "requires": { + "whatwg-url": "^5.0.0" + } + } } }, "pouchdb-find": { @@ -52199,29 +59155,6 @@ } } }, - "prebuild-install": { - "version": "5.3.6", - "resolved": "https://registry.npmjs.org/prebuild-install/-/prebuild-install-5.3.6.tgz", - "integrity": "sha512-s8Aai8++QQGi4sSbs/M1Qku62PFK49Jm1CbgXklGz4nmHveDq0wzJkg7Na5QbnO1uNH8K7iqx2EQ/mV0MZEmOg==", - "optional": true, - "requires": { - "detect-libc": "^1.0.3", - "expand-template": "^2.0.3", - "github-from-package": "0.0.0", - "minimist": "^1.2.3", - "mkdirp-classic": "^0.5.3", - "napi-build-utils": "^1.0.1", - "node-abi": "^2.7.0", - "noop-logger": "^0.1.1", - "npmlog": "^4.0.1", - "pump": "^3.0.0", - "rc": "^1.2.7", - "simple-get": "^3.0.3", - "tar-fs": "^2.0.0", - "tunnel-agent": "^0.6.0", - "which-pm-runs": "^1.0.0" - } - }, "precond": { "version": "0.2.3", "resolved": "https://registry.npmjs.org/precond/-/precond-0.2.3.tgz", @@ -52248,6 +59181,12 @@ "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==" }, + "progress": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", + "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==", + "optional": true + }, "promise": { "version": "8.2.0", "resolved": "https://registry.npmjs.org/promise/-/promise-8.2.0.tgz", @@ -52274,6 +59213,14 @@ "graceful-fs": "^4.2.4", "retry": "^0.12.0", "signal-exit": "^3.0.2" + }, + "dependencies": { + "retry": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/retry/-/retry-0.12.0.tgz", + "integrity": "sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow==", + "dev": true + } } }, "proxy-addr": { @@ -52340,6 +59287,95 @@ "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.0.tgz", "integrity": "sha512-Yxz2kRwT90aPiWEMHVYnEf4+rhwF1tBmmZ4KepCP+Wkium9JxtWnUm1nqGwpiAHr/tnTSeHqr3wb++jgSkXjhA==" }, + "puppeteer": { + "version": "13.7.0", + "resolved": "https://registry.npmjs.org/puppeteer/-/puppeteer-13.7.0.tgz", + "integrity": "sha512-U1uufzBjz3+PkpCxFrWzh4OrMIdIb2ztzCu0YEPfRHjHswcSwHZswnK+WdsOQJsRV8WeTg3jLhJR4D867+fjsA==", + "optional": true, + "requires": { + "cross-fetch": "3.1.5", + "debug": "4.3.4", + "devtools-protocol": "0.0.981744", + "extract-zip": "2.0.1", + "https-proxy-agent": "5.0.1", + "pkg-dir": "4.2.0", + "progress": "2.0.3", + "proxy-from-env": "1.1.0", + "rimraf": "3.0.2", + "tar-fs": "2.1.1", + "unbzip2-stream": "1.4.3", + "ws": "8.5.0" + }, + "dependencies": { + "brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "optional": true, + "requires": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "cross-fetch": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-3.1.5.tgz", + "integrity": "sha512-lvb1SBsI0Z7GDwmuid+mU3kWVBwTVUbe7S0H52yaaAdQOXq2YktTCZdlAcNKFzE6QtRz0snpw9bNiPeOIkkQvw==", + "optional": true, + "requires": { + "node-fetch": "2.6.7" + } + }, + "glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "optional": true, + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + }, + "minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "optional": true, + "requires": { + "brace-expansion": "^1.1.7" + } + }, + "node-fetch": { + "version": "2.6.7", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz", + "integrity": "sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==", + "optional": true, + "requires": { + "whatwg-url": "^5.0.0" + } + }, + "rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "optional": true, + "requires": { + "glob": "^7.1.3" + } + }, + "ws": { + "version": "8.5.0", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.5.0.tgz", + "integrity": "sha512-BWX0SWVgLPzYwF8lTzEy1egjhS4S4OEAHfsO8o65WOVsrnSRGaSiUaa9e0ggGlkMTtBlmOpEXiie9RUcBO86qg==", + "optional": true, + "requires": {} + } + } + }, "pure-rand": { "version": "5.0.3", "resolved": "https://registry.npmjs.org/pure-rand/-/pure-rand-5.0.3.tgz", @@ -52417,26 +59453,6 @@ "unpipe": "1.0.0" } }, - "rc": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", - "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", - "optional": true, - "requires": { - "deep-extend": "^0.6.0", - "ini": "~1.3.0", - "minimist": "^1.2.0", - "strip-json-comments": "~2.0.1" - }, - "dependencies": { - "strip-json-comments": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", - "integrity": "sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==", - "optional": true - } - } - }, "read-pkg": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-1.1.0.tgz", @@ -52519,9 +59535,9 @@ } }, "regenerator-runtime": { - "version": "0.13.11", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz", - "integrity": "sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==" + "version": "0.14.0", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.14.0.tgz", + "integrity": "sha512-srw17NI0TUWHuGa5CFGGmhfNIeja30WMBfbslPNhf6JrqQlLN5gcrvig1oqPxiVaXb0oW0XRKtH6Nngs5lKCIA==" }, "regexp.prototype.flags": { "version": "1.4.3", @@ -52700,10 +59716,10 @@ } }, "retry": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/retry/-/retry-0.12.0.tgz", - "integrity": "sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow==", - "dev": true + "version": "0.13.1", + "resolved": "https://registry.npmjs.org/retry/-/retry-0.13.1.tgz", + "integrity": "sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg==", + "devOptional": true }, "rimraf": { "version": "2.4.5", @@ -52885,9 +59901,9 @@ "integrity": "sha512-b/ptP11hETwYWpeilHXXQiV5UJNJl7ZWWooKRE5eBIYWoom6dZ0SluCIdCtKycsMtZgKWE01/qAw6jblw1YVhg==" }, "semver": { - "version": "7.3.8", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", - "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", + "version": "7.5.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", + "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", "requires": { "lru-cache": "^6.0.0" }, @@ -53040,6 +60056,19 @@ "resolved": "https://registry.npmjs.org/shallowequal/-/shallowequal-1.1.0.tgz", "integrity": "sha512-y0m1JoUZSlPAjXVtPPW70aZWfIL/dSP7AFkRnniLCrK/8MDKog3TySTBmckD+RObVxH0v4Tox67+F14PdED2oQ==" }, + "shebang-command": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", + "integrity": "sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg==", + "requires": { + "shebang-regex": "^1.0.0" + } + }, + "shebang-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", + "integrity": "sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ==" + }, "side-channel": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", @@ -53061,17 +60090,6 @@ "resolved": "https://registry.npmjs.org/simple-concat/-/simple-concat-1.0.1.tgz", "integrity": "sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q==" }, - "simple-get": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/simple-get/-/simple-get-3.1.1.tgz", - "integrity": "sha512-CQ5LTKGfCpvE1K0n2us+kuMPbk/q0EKl82s4aheV9oXjFEz6W/Y7oQFVJuU6QG77hRT4Ghb5RURteF5vnWjupA==", - "optional": true, - "requires": { - "decompress-response": "^4.2.0", - "once": "^1.3.1", - "simple-concat": "^1.0.0" - } - }, "simple-update-notifier": { "version": "1.0.7", "resolved": "https://registry.npmjs.org/simple-update-notifier/-/simple-update-notifier-1.0.7.tgz", @@ -53087,6 +60105,11 @@ } } }, + "slash": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-2.0.0.tgz", + "integrity": "sha512-ZYKh3Wh2z1PpEXWr0MpSBZ0V6mZHAQfYevttO11c51CaWjGTaadiKZ+wVt1PbMlDV5qhMFslpZCemhwOK7C89A==" + }, "slice-ansi": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz", @@ -53106,10 +60129,123 @@ "no-case": "^2.2.0" } }, + "sol-merger": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/sol-merger/-/sol-merger-4.4.0.tgz", + "integrity": "sha512-eYlgsVAeTPiIpLwRCnu8vdhAI40mt8I9BAnwdHazF+8ggWd0EuucQYxs4v+GyjC/5cmCfPMJ55T37tgk/zXqSg==", + "requires": { + "antlr4ts": "^0.5.0-alpha.4", + "cli-color": "^2.0.3", + "commander": "^4.0.1", + "debug": "^4.3.4", + "fs-extra": "^10.0.0", + "glob": "^7.1.7", + "strip-json-comments": "^3.0.1" + }, + "dependencies": { + "brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "requires": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "commander": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz", + "integrity": "sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==" + }, + "fs-extra": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz", + "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==", + "requires": { + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + } + }, + "glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + }, + "minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "requires": { + "brace-expansion": "^1.1.7" + } + } + } + }, + "sol2uml": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/sol2uml/-/sol2uml-2.2.0.tgz", + "integrity": "sha512-JMBvn3ZMT/1egoZjheM4Mh9gQudrlVjFZ1VS0gjQ/eluITT08U6V438Jyku28OuXz42aXNbGS80JuRZo0J7pLg==", + "optional": true, + "requires": { + "@aduh95/viz.js": "^3.7.0", + "@solidity-parser/parser": "^0.14.3", + "axios": "^0.27.2", + "commander": "^9.4.0", + "convert-svg-to-png": "^0.6.4", + "debug": "^4.3.4", + "ethers": "^5.6.9", + "js-graph-algorithms": "^1.0.18", + "klaw": "^4.0.1" + }, + "dependencies": { + "axios": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/axios/-/axios-0.27.2.tgz", + "integrity": "sha512-t+yRIyySRTp/wua5xEr+z1q60QmLq8ABsS5O9Me1AsE5dfKqgnCFzwiCZZ/cGNd1lq4/7akDWMxdhVlucjmnOQ==", + "optional": true, + "requires": { + "follow-redirects": "^1.14.9", + "form-data": "^4.0.0" + } + }, + "commander": { + "version": "9.5.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-9.5.0.tgz", + "integrity": "sha512-KRs7WVDKg86PWiuAqhDrAQnTXZKraVcCc6vFdL14qrZ/DcWwuRo7VoiYXalXO7S5GKpqYiVEwCbgFDfxNHKJBQ==", + "optional": true + }, + "form-data": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz", + "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==", + "optional": true, + "requires": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "mime-types": "^2.1.12" + } + }, + "klaw": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/klaw/-/klaw-4.1.0.tgz", + "integrity": "sha512-1zGZ9MF9H22UnkpVeuaGKOjfA2t6WrfdrJmGjy16ykcjnKQDmHVX+KI477rpbGevz/5FD4MC3xf1oxylBgcaQw==", + "optional": true + } + } + }, "solc": { - "version": "0.8.20", - "resolved": "https://registry.npmjs.org/solc/-/solc-0.8.20.tgz", - "integrity": "sha512-fPRnGspIEqmhu63RFO3pc79sLA7ZmzO0Uy0L5l6hEt2wAsq0o7UV6pXkAp3Mfv9IBhg7Px/oTu3a+y4gs3BWrQ==", + "version": "0.8.21", + "resolved": "https://registry.npmjs.org/solc/-/solc-0.8.21.tgz", + "integrity": "sha512-N55ogy2dkTRwiONbj4e6wMZqUNaLZkiRcjGyeafjLYzo/tf/IvhHY5P5wpe+H3Fubh9idu071i8eOGO31s1ylg==", "requires": { "command-exists": "^1.2.8", "commander": "^8.1.0", @@ -53750,6 +60886,15 @@ "resolved": "https://registry.npmjs.org/timed-out/-/timed-out-4.0.1.tgz", "integrity": "sha512-G7r3AhovYtr5YKOWQkta8RKAPb+J9IsO4uVmzjl8AZwfhs8UcUwTiD6gcJYSgOtzyjvQKrKYn41syHbUWMkafA==" }, + "timers-ext": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/timers-ext/-/timers-ext-0.1.7.tgz", + "integrity": "sha512-b85NUNzTSdodShTIbky6ZF02e8STtVVfD+fu4aXXShEELpozH+bCpJLYMPZbsABN2wDH7fJpqIoXxJpzbf0NqQ==", + "requires": { + "es5-ext": "~0.10.46", + "next-tick": "1" + } + }, "tiny-emitter": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/tiny-emitter/-/tiny-emitter-2.1.0.tgz", @@ -53872,15 +61017,15 @@ "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==" }, "truffle": { - "version": "5.9.0", - "resolved": "https://registry.npmjs.org/truffle/-/truffle-5.9.0.tgz", - "integrity": "sha512-XZBlGzU+IA0F3oDpmTWas62TYrNseG3xYh861zR+E09K2A0E0eSuTi1d5k+Uzhv4I6bIlNSWL31iI1J/PiZxcw==", + "version": "5.11.4", + "resolved": "https://registry.npmjs.org/truffle/-/truffle-5.11.4.tgz", + "integrity": "sha512-Oc7HpNQ1ViJhE0Gx1HJ6i915k5pfw89o1rhhyFKXiOZLYuXUkiyyxBdPRt+/IO5PjtXt33Me67Dy3vvoJjeyUQ==", "requires": { - "@truffle/db": "^2.0.24", - "@truffle/db-loader": "^0.2.24", - "@truffle/debugger": "^11.1.0", + "@truffle/db": "^2.0.35", + "@truffle/db-loader": "^0.2.35", + "@truffle/debugger": "^12.1.4", "app-module-path": "^2.2.0", - "ganache": "7.8.0", + "ganache": "7.9.1", "mocha": "10.1.0", "original-require": "^1.0.1" } @@ -53981,6 +61126,114 @@ } } }, + "truffle-flattener": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/truffle-flattener/-/truffle-flattener-1.6.0.tgz", + "integrity": "sha512-scS5Bsi4CZyvlrmD4iQcLHTiG2RQFUXVheTgWeH6PuafmI+Lk5U87Es98loM3w3ImqC9/fPHq+3QIXbcPuoJ1Q==", + "requires": { + "@resolver-engine/imports-fs": "^0.2.2", + "@solidity-parser/parser": "^0.14.1", + "find-up": "^2.1.0", + "mkdirp": "^1.0.4", + "tsort": "0.0.1" + }, + "dependencies": { + "@resolver-engine/core": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/@resolver-engine/core/-/core-0.2.1.tgz", + "integrity": "sha512-nsLQHmPJ77QuifqsIvqjaF5B9aHnDzJjp73Q1z6apY3e9nqYrx4Dtowhpsf7Jwftg/XzVDEMQC+OzUBNTS+S1A==", + "requires": { + "debug": "^3.1.0", + "request": "^2.85.0" + } + }, + "@resolver-engine/fs": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/@resolver-engine/fs/-/fs-0.2.1.tgz", + "integrity": "sha512-7kJInM1Qo2LJcKyDhuYzh9ZWd+mal/fynfL9BNjWOiTcOpX+jNfqb/UmGUqros5pceBITlWGqS4lU709yHFUbg==", + "requires": { + "@resolver-engine/core": "^0.2.1", + "debug": "^3.1.0" + } + }, + "@resolver-engine/imports": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/@resolver-engine/imports/-/imports-0.2.2.tgz", + "integrity": "sha512-u5/HUkvo8q34AA+hnxxqqXGfby5swnH0Myw91o3Sm2TETJlNKXibFGSKBavAH+wvWdBi4Z5gS2Odu0PowgVOUg==", + "requires": { + "@resolver-engine/core": "^0.2.1", + "debug": "^3.1.0", + "hosted-git-info": "^2.6.0" + } + }, + "@resolver-engine/imports-fs": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/@resolver-engine/imports-fs/-/imports-fs-0.2.2.tgz", + "integrity": "sha512-gFCgMvCwyppjwq0UzIjde/WI+yDs3oatJhozG9xdjJdewwtd7LiF0T5i9lrHAUtqrQbqoFE4E+ZMRVHWpWHpKQ==", + "requires": { + "@resolver-engine/fs": "^0.2.1", + "@resolver-engine/imports": "^0.2.2", + "debug": "^3.1.0" + } + }, + "debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "requires": { + "ms": "^2.1.1" + } + }, + "find-up": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", + "integrity": "sha512-NWzkk0jSJtTt08+FBFMvXoeZnOJD+jTtsRmBYbAIzJdX6l7dLgR7CTubCM5/eDdPUBvLCeVasP1brfVR/9/EZQ==", + "requires": { + "locate-path": "^2.0.0" + } + }, + "locate-path": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", + "integrity": "sha512-NCI2kiDkyR7VeEKm27Kda/iQHyKJe1Bu0FlTbYp3CqJu+9IFe9bLyAjMxf5ZDDbEg+iMPzB5zYyUTSm8wVTKmA==", + "requires": { + "p-locate": "^2.0.0", + "path-exists": "^3.0.0" + } + }, + "mkdirp": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", + "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==" + }, + "p-limit": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz", + "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==", + "requires": { + "p-try": "^1.0.0" + } + }, + "p-locate": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz", + "integrity": "sha512-nQja7m7gSKuewoVRen45CtVfODR3crN3goVQ0DDZ9N3yHxgpkuBhZqsaiotSQRrADUrne346peY7kT3TSACykg==", + "requires": { + "p-limit": "^1.1.0" + } + }, + "p-try": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz", + "integrity": "sha512-U1etNYuMJoIz3ZXSrrySFjsXQTWOx2/jdi86L+2pRvph/qMKL6sbcCYdH23fqsbm8TH2Gn0OybpT4eSFlCVHww==" + }, + "path-exists": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", + "integrity": "sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==" + } + } + }, "truffle-hdwallet-provider": { "version": "1.0.17", "resolved": "https://registry.npmjs.org/truffle-hdwallet-provider/-/truffle-hdwallet-provider-1.0.17.tgz", @@ -54706,9 +61959,9 @@ } }, "tslib": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.5.1.tgz", - "integrity": "sha512-KaI6gPil5m9vF7DKaoXxx1ia9fxS4qG5YveErRRVknPDXXriu5M8h48YRjB6h5ZUOKuAKlSJYb0GaDe8I39fRw==" + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", + "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==" }, "tsort": { "version": "0.0.1", @@ -54861,9 +62114,9 @@ } }, "typescript": { - "version": "5.0.4", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.0.4.tgz", - "integrity": "sha512-cW9T5W9xY37cc+jfEnaUvX91foxtHkza3Nw3wkoF4sSlKn0MONdkdEndig/qPBWXNkmplh3NzayQzCiHM4/hqw==" + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.2.2.tgz", + "integrity": "sha512-mI4WrpHsbCIcwT9cF4FZvr80QUeKvsUsUvKDoR+X/7XHQH98xYD8YHZg7ANtz2GtZt/CBq2QJ0thkGJMHfqc1w==" }, "typescript-compare": { "version": "0.0.2", @@ -54952,18 +62205,16 @@ "busboy": "^1.6.0" } }, -<<<<<<< HEAD - "unit-fns": { - "version": "0.1.9", - "resolved": "https://registry.npmjs.org/unit-fns/-/unit-fns-0.1.9.tgz", - "integrity": "sha512-bxceIkc7n2icQmgQx8u3vX98ZBIcpL2YJDKIsWDFK7ZX1TTuLvtNWVNd9/oARCDHd7QQRzwc+zxabO0HSK8X0w==" -======= "unfetch": { "version": "4.2.0", "resolved": "https://registry.npmjs.org/unfetch/-/unfetch-4.2.0.tgz", "integrity": "sha512-F9p7yYCn6cIW9El1zi0HI6vqpeIvBsr3dSuRO6Xuppb1u5rXpCPmMvLSyECLhybr9isec8Ohl0hPekMVrEinDA==", "dev": true ->>>>>>> 59dae2c (package upgrades 4) + }, + "unit-fns": { + "version": "0.1.9", + "resolved": "https://registry.npmjs.org/unit-fns/-/unit-fns-0.1.9.tgz", + "integrity": "sha512-bxceIkc7n2icQmgQx8u3vX98ZBIcpL2YJDKIsWDFK7ZX1TTuLvtNWVNd9/oARCDHd7QQRzwc+zxabO0HSK8X0w==" }, "universalify": { "version": "2.0.0", @@ -55041,24 +62292,6 @@ "resolved": "https://registry.npmjs.org/url-to-options/-/url-to-options-1.0.1.tgz", "integrity": "sha512-0kQLIzG4fdk/G5NONku64rSH/x32NOA39LVQqlK8Le6lvTF6GGRJpqaQFGgU+CLwySIqBSMdwYM0sYcW9f6P4A==" }, - "usb": { - "version": "1.9.2", - "resolved": "https://registry.npmjs.org/usb/-/usb-1.9.2.tgz", - "integrity": "sha512-dryNz030LWBPAf6gj8vyq0Iev3vPbCLHCT8dBw3gQRXRzVNsIdeuU+VjPp3ksmSPkeMAl1k+kQ14Ij0QHyeiAg==", - "optional": true, - "requires": { - "node-addon-api": "^4.2.0", - "node-gyp-build": "^4.3.0" - }, - "dependencies": { - "node-addon-api": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-4.3.0.tgz", - "integrity": "sha512-73sE9+3UaLYYFmDsFZnqCInzPyh3MqIwZO9cw58yIqAZhONrrabrYyYe3TuIqtIiOuTXVhsGau8hcrhhwSsDIQ==", - "optional": true - } - } - }, "utf-8-validate": { "version": "5.0.10", "resolved": "https://registry.npmjs.org/utf-8-validate/-/utf-8-validate-5.0.10.tgz", @@ -56081,12 +63314,6 @@ "resolved": "https://registry.npmjs.org/which-module/-/which-module-1.0.0.tgz", "integrity": "sha512-F6+WgncZi/mJDrammbTuHe1q0R5hOXv/mBaiNA2TCNT/LTHusX0V+CJnj9XT8ki5ln2UZyyddDgHfCzyrOH7MQ==" }, - "which-pm-runs": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/which-pm-runs/-/which-pm-runs-1.1.0.tgz", - "integrity": "sha512-n1brCuqClxfFfq/Rb0ICg9giSZqCS+pLtccdag6C2HyufBrh3fBOiy9nb6ggRMvWOVH5GrdJskj5iGTZNxd7SA==", - "optional": true - }, "which-typed-array": { "version": "1.1.8", "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.8.tgz", @@ -56100,15 +63327,6 @@ "is-typed-array": "^1.1.9" } }, - "wide-align": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.5.tgz", - "integrity": "sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg==", - "optional": true, - "requires": { - "string-width": "^1.0.2 || 2 || 3 || 4" - } - }, "window-size": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/window-size/-/window-size-0.2.0.tgz", @@ -56185,9 +63403,9 @@ } }, "ws": { - "version": "8.13.0", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.13.0.tgz", - "integrity": "sha512-x9vcZYTrFPC7aSIbj7sRCYo7L/Xb8Iy+pW0ng0wt2vCJv7M9HOMy0UoN3rr+IFC7hb7vXoqS+P9ktyLLLhO+LA==", + "version": "8.14.1", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.14.1.tgz", + "integrity": "sha512-4OOseMUq8AzRBI/7SLMUwO+FEDnguetSk7KMb1sHwvF2w2Wv5Hoj0nlifx8vtGsftE/jWHojPy8sMMzYLJ2G/A==", "requires": {} }, "xhr": { @@ -56291,6 +63509,11 @@ "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==" }, + "yaml": { + "version": "1.10.2", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz", + "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==" + }, "yargs": { "version": "16.2.0", "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", diff --git a/package.json b/package.json index a0581abd..f3fdde85 100644 --- a/package.json +++ b/package.json @@ -16,23 +16,25 @@ "author": "Frax Finance Team (https://github.com/orgs/FraxFinance)", "license": "ISC", "dependencies": { + "@arbitrum/nitro-contracts": "^1.0.2", "@chainlink/contracts": "0.6.1", + "@eth-optimism/contracts-bedrock": "^0.16.0", "@ethereumjs/common": "^3.1.2", "@ethereumjs/tx": "^4.1.2", "@ethersproject/hardware-wallets": "^5.7.0", "@flashbots/ethers-provider-bundle": "^0.6.1", - "@maticnetwork/maticjs": "^3.5.0", + "@maticnetwork/maticjs": "^3.6.6", "@maticnetwork/maticjs-ethers": "^1.0.3", "@maticnetwork/maticjs-web3": "^1.0.4", "@matterlabs/hardhat-zksync-chai-matchers": "^0.1.2", "@matterlabs/hardhat-zksync-deploy": "^0.6.3", "@matterlabs/hardhat-zksync-solc": "^0.3.16", - "@openzeppelin/contracts": "^4.8.3", + "@openzeppelin/contracts": "^4.9.3", "@openzeppelin/hardhat-upgrades": "^1.26.0", - "@poanet/solidity-flattener": "^3.0.8", + "@poanet/solidity-flattener": "^3.0.9", "@solana/spl-token": "^0.3.7", - "@solana/web3.js": "^1.76.0", - "@truffle/hdwallet-provider": "^2.1.11", + "@solana/web3.js": "^1.78.4", + "@truffle/hdwallet-provider": "^2.1.15", "@types/express": "^4.17.17", "@types/node": "^18.11.18", "@types/web3": "^1.2.2", @@ -40,55 +42,59 @@ "@uniswap/v2-periphery": "^1.1.0-beta.0", "@uniswap/v3-core": "^1.0.1", "@uniswap/v3-periphery": "^1.4.3", - "@uniswap/v3-sdk": "^3.9.0", - "bignumber.js": "^9.1.1", + "@uniswap/v3-sdk": "^3.10.0", + "bignumber.js": "^9.1.2", "bnc-sdk": "^4.6.7", "chalk": "^4.1.2", - "data-fns": "^1.1.0", "cross-fetch": "^3.1.6", - "dotenv": "^16.0.3", + "data-fns": "^1.1.0", + "dotenv": "^16.3.1", "esm": "^3.2.25", "ethereumjs-tx": "^2.1.2", "flashbots": "^1.0.0", "fs-extra": "^11.1.1", "ganache-core": "^2.13.2", - "hardhat-contract-sizer": "^2.8.0", + "hardhat-contract-sizer": "^2.10.0", "hardhat-gas-reporter": "^1.0.9", "hardhat-spdx-license-identifier": "^2.1.0", + "hardhat-tracer": "^2.6.0", "https": "^1.0.0", - "mathjs": "^11.8.0", + "mathjs": "^11.11.0", "nodemon": "^2.0.22", "path": "^0.12.7", "prb-math": "^2.4.3", "require-from-string": "^2.0.2", - "solc": "0.8.20", + "sol-merger": "^4.4.0", + "solc": "0.8.21", "to-hex": "0.0.18", "toml": "^3.0.0", - "truffle": "^5.9.0", + "truffle": "^5.11.4", "truffle-contract-size": "^2.0.1", + "truffle-flattener": "^1.6.0", "truffle-hdwallet-provider": "^1.0.6", - "tslib": "^2.5.1", - "typescript": "^5.0.4", + "tslib": "^2.6.2", + "typescript": "^5.2.2", "util": "^0.12.5", "web3-eth-contract": "^1.10.0", "web3-utils": "^1.10.0", - "ws": "^8.13.0", + "ws": "^8.14.1", "zksync-web3": "^0.14.3" }, "devDependencies": { "@nomiclabs/hardhat-ethers": "^2.2.3", "@nomiclabs/hardhat-etherscan": "^3.1.7", "@nomiclabs/hardhat-truffle5": "^2.0.7", - "@nomiclabs/hardhat-vyper": "^3.0.3", - "@nomiclabs/hardhat-waffle": "^2.0.5", + "@nomiclabs/hardhat-vyper": "^3.0.4", + "@nomiclabs/hardhat-waffle": "^2.0.6", "@nomiclabs/hardhat-web3": "^2.0.0", "@openzeppelin/hardhat-upgrades": "^1.26.0", "@openzeppelin/test-helpers": "^0.5.16", - "chai": "^4.3.7", + "chai": "^4.3.8", + "chai-almost": "^1.0.1", "ethereum-waffle": "^4.0.10", "ethers": "^5.7.2", - "hardhat": "^2.14.0", - "hardhat-deploy": "^0.11.29", + "hardhat": "^2.17.3", + "hardhat-deploy": "^0.11.37", "json-loader": "^0.5.7", "web3": "^1.10.0" } diff --git a/src/hardhat/contracts/Bridges/Fraxchain/FraxchainFrxEthMinter.sol b/src/hardhat/contracts/Bridges/Fraxchain/FraxchainFrxEthMinter.sol new file mode 100644 index 00000000..0e74c93b --- /dev/null +++ b/src/hardhat/contracts/Bridges/Fraxchain/FraxchainFrxEthMinter.sol @@ -0,0 +1,115 @@ +// SPDX-License-Identifier: AGPL-3.0-only +pragma solidity ^0.8.0; + +// ==================================================================== +// | ______ _______ | +// | / _____________ __ __ / ____(_____ ____ _____ ________ | +// | / /_ / ___/ __ `| |/_/ / /_ / / __ \/ __ `/ __ \/ ___/ _ \ | +// | / __/ / / / /_/ _> < / __/ / / / / / /_/ / / / / /__/ __/ | +// | /_/ /_/ \__,_/_/|_| /_/ /_/_/ /_/\__,_/_/ /_/\___/\___/ | +// | | +// ==================================================================== +// ======================= FraxchainFrxEthMinter ====================== +// ==================================================================== +// Takes ETH and gives back frxETH. +// Stripped down version of the Ethereum mainnet frxETHMinter. +// Frax Finance: https://github.com/FraxFinance + +// Primary Author(s) +// Jack Corddry: https://github.com/corddry +// Travis Moore: https://github.com/FortisFortuna + +import { IfrxETH } from "../../FraxETH/IfrxETH.sol"; +import "@openzeppelin/contracts/security/ReentrancyGuard.sol"; +import "@openzeppelin/contracts/token/ERC20/IERC20.sol"; +import "../../Staking/Owned.sol"; + +/// @title Authorized minter contract for frxETH +/// @notice Accepts user-supplied ETH and converts it to frxETH (submit()), and also optionally inline stakes it for sfrxETH (submitAndDeposit()) +/** @dev Has permission to mint frxETH. */ +contract FraxchainFrxEthMinter is Owned, ReentrancyGuard { + uint256 public constant RATIO_PRECISION = 1e6; // 1,000,000 + + IfrxETH public immutable frxETHToken; + + bool public submitPaused; + + address public timelock_address; + + constructor( + address _owner, + address _timelock_address, + address _frxETHAddress + ) Owned(_owner) { + timelock_address = _timelock_address; + frxETHToken = IfrxETH(_frxETHAddress); + } + + modifier onlyByOwnGov() { + require(msg.sender == timelock_address || msg.sender == owner, "Not owner or timelock"); + _; + } + + /// @notice Mint frxETH to the recipient using sender's funds. Internal portion + function _submit(address recipient) internal nonReentrant { + // Initial pause and value checks + require(!submitPaused, "Submit is paused"); + require(msg.value != 0, "Cannot submit 0"); + + // Give the sender frxETH + frxETHToken.minter_mint(recipient, msg.value); + + emit ETHSubmitted(msg.sender, recipient, msg.value); + } + + /// @notice Mint frxETH to the sender depending on the ETH value sent + function submit() external payable { + _submit(msg.sender); + } + + /// @notice Mint frxETH to the recipient using sender's funds + function submitAndGive(address recipient) external payable { + _submit(recipient); + } + + /// @notice Fallback to minting frxETH to the sender + receive() external payable { + _submit(msg.sender); + } + + + /// @notice Toggle allowing submites + function togglePauseSubmits() external onlyByOwnGov { + submitPaused = !submitPaused; + + emit SubmitPaused(submitPaused); + } + + /// @notice For emergencies if something gets stuck + function recoverEther(uint256 amount) external onlyByOwnGov { + (bool success,) = address(owner).call{ value: amount }(""); + require(success, "Invalid transfer"); + + emit EmergencyEtherRecovered(amount); + } + + /// @notice For emergencies if someone accidentally sent some ERC20 tokens here + function recoverERC20(address tokenAddress, uint256 tokenAmount) external onlyByOwnGov { + require(IERC20(tokenAddress).transfer(owner, tokenAmount), "recoverERC20: Transfer failed"); + + emit EmergencyERC20Recovered(tokenAddress, tokenAmount); + } + + /// @notice Set the timelock contract + function setTimelock(address _timelock_address) external onlyByOwnGov { + require(_timelock_address != address(0), "Zero address detected"); + timelock_address = _timelock_address; + emit TimelockChanged(_timelock_address); + } + + event EmergencyEtherRecovered(uint256 amount); + event EmergencyERC20Recovered(address tokenAddress, uint256 tokenAmount); + event ETHSubmitted(address indexed sender, address indexed recipient, uint256 sent_amount); + event SubmitPaused(bool new_status); + event TimelockChanged(address timelock_address); +} diff --git a/src/hardhat/contracts/Bridges/Fraxchain/FraxchainPortal.sol b/src/hardhat/contracts/Bridges/Fraxchain/FraxchainPortal.sol new file mode 100644 index 00000000..efca91e2 --- /dev/null +++ b/src/hardhat/contracts/Bridges/Fraxchain/FraxchainPortal.sol @@ -0,0 +1,509 @@ +// SPDX-License-Identifier: MIT +pragma solidity 0.8.15; + +import { IERC20 } from "@openzeppelin/contracts/token/ERC20/IERC20.sol"; +import { Initializable } from "@openzeppelin/contracts/proxy/utils/Initializable.sol"; +import { SafeCall } from "@eth-optimism/contracts-bedrock/contracts/libraries/SafeCall.sol"; +import { L2OutputOracle } from "@eth-optimism/contracts-bedrock/contracts/L1/L2OutputOracle.sol"; +import { SystemConfig } from "@eth-optimism/contracts-bedrock/contracts/L1/SystemConfig.sol"; +import { Constants } from "@eth-optimism/contracts-bedrock/contracts/libraries/Constants.sol"; +import { Types } from "@eth-optimism/contracts-bedrock/contracts/libraries/Types.sol"; +import { Hashing } from "@eth-optimism/contracts-bedrock/contracts/libraries/Hashing.sol"; +import { SecureMerkleTrie } from "@eth-optimism/contracts-bedrock/contracts/libraries/trie/SecureMerkleTrie.sol"; +import { AddressAliasHelper } from "@eth-optimism/contracts-bedrock/contracts/vendor/AddressAliasHelper.sol"; +import { ResourceMetering } from "@eth-optimism/contracts-bedrock/contracts/L1/ResourceMetering.sol"; +import { Semver } from "@eth-optimism/contracts-bedrock/contracts/universal/Semver.sol"; + +/// @custom:proxied +/// @title FraxchainPortal +/// @notice The FraxchainPortal is a low-level contract responsible for passing messages between L1 +/// and L2. Messages sent directly to the FraxchainPortal have no form of replayability. +/// Users are encouraged to use the L1CrossDomainMessenger for a higher-level interface. +contract FraxchainPortal is Initializable, ResourceMetering, Semver { + /// @notice Represents a proven withdrawal. + /// @custom:field outputRoot Root of the L2 output this was proven against. + /// @custom:field timestamp Timestamp at whcih the withdrawal was proven. + /// @custom:field l2OutputIndex Index of the output this was proven against. + struct ProvenWithdrawal { + bytes32 outputRoot; + uint128 timestamp; + uint128 l2OutputIndex; + } + + /// @notice Version of the deposit event. + uint256 internal constant DEPOSIT_VERSION = 0; + + /// @notice The L2 gas limit set when eth is deposited using the receive() function. + uint64 internal constant RECEIVE_DEFAULT_GAS_LIMIT = 100_000; + + /// @notice Address of the L2OutputOracle contract. + L2OutputOracle public immutable L2_ORACLE; + + /// @notice Address of the SystemConfig contract. + SystemConfig public immutable SYSTEM_CONFIG; + + /// @notice Address that has the ability to pause and unpause withdrawals. + address public immutable GUARDIAN; + + /// @notice Address of the L2 account which initiated a withdrawal in this transaction. + /// If the of this variable is the default L2 sender address, then we are NOT inside of + /// a call to finalizeWithdrawalTransaction. + address public l2Sender; + + /// @notice A list of withdrawal hashes which have been successfully finalized. + mapping(bytes32 => bool) public finalizedWithdrawals; + + /// @notice A mapping of withdrawal hashes to `ProvenWithdrawal` data. + mapping(bytes32 => ProvenWithdrawal) public provenWithdrawals; + + /// @notice Determines if cross domain messaging is paused. + /// When set to true, withdrawals are paused. + /// This may be removed in the future. + bool public paused; + + address immutable public FRXETH; + + address immutable public FRXETH_MINTER; + + /// @notice Emitted when a transaction is deposited from L1 to L2. + /// The parameters of this event are read by the rollup node and used to derive deposit + /// transactions on L2. + /// @param from Address that triggered the deposit transaction. + /// @param to Address that the deposit transaction is directed to. + /// @param version Version of this deposit transaction event. + /// @param opaqueData ABI encoded deposit data to be parsed off-chain. + event TransactionDeposited( + address indexed from, + address indexed to, + uint256 indexed version, + bytes opaqueData + ); + + /// @notice Emitted when a withdrawal transaction is proven. + /// @param withdrawalHash Hash of the withdrawal transaction. + /// @param from Address that triggered the withdrawal transaction. + /// @param to Address that the withdrawal transaction is directed to. + event WithdrawalProven( + bytes32 indexed withdrawalHash, + address indexed from, + address indexed to + ); + + /// @notice Emitted when a withdrawal transaction is finalized. + /// @param withdrawalHash Hash of the withdrawal transaction. + /// @param success Whether the withdrawal transaction was successful. + event WithdrawalFinalized(bytes32 indexed withdrawalHash, bool success); + + /// @notice Emitted when the pause is triggered. + /// @param account Address of the account triggering the pause. + event Paused(address account); + + /// @notice Emitted when the pause is lifted. + /// @param account Address of the account triggering the unpause. + event Unpaused(address account); + + /// @notice Reverts when paused. + modifier whenNotPaused() { + require(paused == false, "FraxchainPortal: paused"); + _; + } + + /// @custom:semver 1.7.2 + /// @notice Constructs the FraxchainPortal contract. + /// @param _l2Oracle Address of the L2OutputOracle contract. + /// @param _guardian Address that can pause withdrawals. + /// @param _paused Sets the contract's pausability state. + /// @param _config Address of the SystemConfig contract. + /// @param _frxeth Address of frxETH + /// @param _frxeth_minter Address of the frxETH minter + constructor( + L2OutputOracle _l2Oracle, + address _guardian, + bool _paused, + SystemConfig _config, + address _frxeth, + address _frxeth_minter + ) Semver(1, 7, 2) { + L2_ORACLE = _l2Oracle; + GUARDIAN = _guardian; + SYSTEM_CONFIG = _config; + FRXETH = _frxeth; + FRXETH_MINTER = _frxeth_minter; + initialize(_paused); + } + + /// @notice Initializer. + function initialize(bool _paused) public initializer { + l2Sender = Constants.DEFAULT_L2_SENDER; + paused = _paused; + __ResourceMetering_init(); + } + + /// @notice Pauses withdrawals. + function pause() external { + require(msg.sender == GUARDIAN, "FraxchainPortal: only guardian can pause"); + paused = true; + emit Paused(msg.sender); + } + + /// @notice Unpauses withdrawals. + function unpause() external { + require(msg.sender == GUARDIAN, "FraxchainPortal: only guardian can unpause"); + paused = false; + emit Unpaused(msg.sender); + } + + /// @notice Computes the minimum gas limit for a deposit. + /// The minimum gas limit linearly increases based on the size of the calldata. + /// This is to prevent users from creating L2 resource usage without paying for it. + /// This function can be used when interacting with the portal to ensure forwards + /// compatibility. + /// @param _byteCount Number of bytes in the calldata. + /// @return The minimum gas limit for a deposit. + function minimumGasLimit(uint64 _byteCount) public pure returns (uint64) { + return _byteCount * 16 + 21000; + } + + /// @notice Accepts value so that users can send ETH directly to this contract and have the + /// funds be deposited to their address on L2. This is intended as a convenience + /// function for EOAs. Contracts should call the depositTransaction() function directly + /// otherwise any deposited funds will be lost due to address aliasing. + // solhint-disable-next-line ordering + receive() external payable { + depositTransaction(msg.sender, msg.value, RECEIVE_DEFAULT_GAS_LIMIT, false, bytes("")); + } + + /// @notice Accepts ETH value without triggering a deposit to L2. + /// This function mainly exists for the sake of the migration between the legacy + /// Optimism system and Bedrock. + function donateETH() external payable { + // Intentionally empty. + } + + /// @notice Getter for the resource config. + /// Used internally by the ResourceMetering contract. + /// The SystemConfig is the source of truth for the resource config. + /// @return ResourceMetering ResourceConfig + function _resourceConfig() + internal + view + override + returns (ResourceMetering.ResourceConfig memory) + { + return SYSTEM_CONFIG.resourceConfig(); + } + + /// @notice Proves a withdrawal transaction. + /// @param _tx Withdrawal transaction to finalize. + /// @param _l2OutputIndex L2 output index to prove against. + /// @param _outputRootProof Inclusion proof of the L2ToL1MessagePasser contract's storage root. + /// @param _withdrawalProof Inclusion proof of the withdrawal in L2ToL1MessagePasser contract. + function proveWithdrawalTransaction( + Types.WithdrawalTransaction memory _tx, + uint256 _l2OutputIndex, + Types.OutputRootProof calldata _outputRootProof, + bytes[] calldata _withdrawalProof + ) external whenNotPaused { + // Prevent users from creating a deposit transaction where this address is the message + // sender on L2. Because this is checked here, we do not need to check again in + // `finalizeWithdrawalTransaction`. + require( + _tx.target != address(this), + "FraxchainPortal: you cannot send messages to the portal contract" + ); + + // Get the output root and load onto the stack to prevent multiple mloads. This will + // revert if there is no output root for the given block number. + bytes32 outputRoot = L2_ORACLE.getL2Output(_l2OutputIndex).outputRoot; + + // Verify that the output root can be generated with the elements in the proof. + require( + outputRoot == Hashing.hashOutputRootProof(_outputRootProof), + "FraxchainPortal: invalid output root proof" + ); + + // Load the ProvenWithdrawal into memory, using the withdrawal hash as a unique identifier. + bytes32 withdrawalHash = Hashing.hashWithdrawal(_tx); + ProvenWithdrawal memory provenWithdrawal = provenWithdrawals[withdrawalHash]; + + // We generally want to prevent users from proving the same withdrawal multiple times + // because each successive proof will update the timestamp. A malicious user can take + // advantage of this to prevent other users from finalizing their withdrawal. However, + // since withdrawals are proven before an output root is finalized, we need to allow users + // to re-prove their withdrawal only in the case that the output root for their specified + // output index has been updated. + require( + provenWithdrawal.timestamp == 0 || + L2_ORACLE.getL2Output(provenWithdrawal.l2OutputIndex).outputRoot != + provenWithdrawal.outputRoot, + "FraxchainPortal: withdrawal hash has already been proven" + ); + + // Compute the storage slot of the withdrawal hash in the L2ToL1MessagePasser contract. + // Refer to the Solidity documentation for more information on how storage layouts are + // computed for mappings. + bytes32 storageKey = keccak256( + abi.encode( + withdrawalHash, + uint256(0) // The withdrawals mapping is at the first slot in the layout. + ) + ); + + // Verify that the hash of this withdrawal was stored in the L2toL1MessagePasser contract + // on L2. If this is true, under the assumption that the SecureMerkleTrie does not have + // bugs, then we know that this withdrawal was actually triggered on L2 and can therefore + // be relayed on L1. + require( + SecureMerkleTrie.verifyInclusionProof( + abi.encode(storageKey), + hex"01", + _withdrawalProof, + _outputRootProof.messagePasserStorageRoot + ), + "FraxchainPortal: invalid withdrawal inclusion proof" + ); + + // Designate the withdrawalHash as proven by storing the `outputRoot`, `timestamp`, and + // `l2BlockNumber` in the `provenWithdrawals` mapping. A `withdrawalHash` can only be + // proven once unless it is submitted again with a different outputRoot. + provenWithdrawals[withdrawalHash] = ProvenWithdrawal({ + outputRoot: outputRoot, + timestamp: uint128(block.timestamp), + l2OutputIndex: uint128(_l2OutputIndex) + }); + + // Emit a `WithdrawalProven` event. + emit WithdrawalProven(withdrawalHash, _tx.sender, _tx.target); + } + + /// @notice Finalizes a withdrawal transaction. + /// @param _tx Withdrawal transaction to finalize. + function finalizeWithdrawalTransaction(Types.WithdrawalTransaction memory _tx) + external payable + whenNotPaused + { + if (msg.value>0) { + require(msg.value<=_tx.value,"FraxchainPortal: can only swap as much frxETH as is bridged"); + require(IERC20(FRXETH).transfer(msg.sender,msg.value),"FraxchainPortal: frxETH transfer failed"); + } + require (_tx.target==FRXETH || _tx.value<=address(this).balance,"FraxchainPortal: not enough ETH in the contract"); + + // Make sure that the l2Sender has not yet been set. The l2Sender is set to a value other + // than the default value when a withdrawal transaction is being finalized. This check is + // a defacto reentrancy guard. + require( + l2Sender == Constants.DEFAULT_L2_SENDER, + "FraxchainPortal: can only trigger one withdrawal per transaction" + ); + + // Grab the proven withdrawal from the `provenWithdrawals` map. + bytes32 withdrawalHash = Hashing.hashWithdrawal(_tx); + ProvenWithdrawal memory provenWithdrawal = provenWithdrawals[withdrawalHash]; + + // A withdrawal can only be finalized if it has been proven. We know that a withdrawal has + // been proven at least once when its timestamp is non-zero. Unproven withdrawals will have + // a timestamp of zero. + require( + provenWithdrawal.timestamp != 0, + "FraxchainPortal: withdrawal has not been proven yet" + ); + + // As a sanity check, we make sure that the proven withdrawal's timestamp is greater than + // starting timestamp inside the L2OutputOracle. Not strictly necessary but extra layer of + // safety against weird bugs in the proving step. + require( + provenWithdrawal.timestamp >= L2_ORACLE.startingTimestamp(), + "FraxchainPortal: withdrawal timestamp less than L2 Oracle starting timestamp" + ); + + // A proven withdrawal must wait at least the finalization period before it can be + // finalized. This waiting period can elapse in parallel with the waiting period for the + // output the withdrawal was proven against. In effect, this means that the minimum + // withdrawal time is proposal submission time + finalization period. + require( + _isFinalizationPeriodElapsed(provenWithdrawal.timestamp), + "FraxchainPortal: proven withdrawal finalization period has not elapsed" + ); + + // Grab the OutputProposal from the L2OutputOracle, will revert if the output that + // corresponds to the given index has not been proposed yet. + Types.OutputProposal memory proposal = L2_ORACLE.getL2Output( + provenWithdrawal.l2OutputIndex + ); + + // Check that the output root that was used to prove the withdrawal is the same as the + // current output root for the given output index. An output root may change if it is + // deleted by the challenger address and then re-proposed. + require( + proposal.outputRoot == provenWithdrawal.outputRoot, + "FraxchainPortal: output root proven is not the same as current output root" + ); + + // Check that the output proposal has also been finalized. + require( + _isFinalizationPeriodElapsed(proposal.timestamp), + "FraxchainPortal: output proposal finalization period has not elapsed" + ); + + // Check that this withdrawal has not already been finalized, this is replay protection. + require( + finalizedWithdrawals[withdrawalHash] == false, + "FraxchainPortal: withdrawal has already been finalized" + ); + + // Mark the withdrawal as finalized so it can't be replayed. + finalizedWithdrawals[withdrawalHash] = true; + + bool success; + if (_tx.target==FRXETH) { // Bridge frxETH back to L1 + require(_tx.data.length==20,"FraxchainPortal: invalid recipient specified"); + address recipient = address(uint160(bytes20(_tx.data))); // recipient is stored in the data field + require(IERC20(FRXETH).transfer(recipient,_tx.value),"FraxchainPortal: frxETH transfer failed"); + success = true; + } else { + // Set the l2Sender so contracts know who triggered this withdrawal on L2. + l2Sender = _tx.sender; + + // Trigger the call to the target contract. We use a custom low level method + // SafeCall.callWithMinGas to ensure two key properties + // 1. Target contracts cannot force this call to run out of gas by returning a very large + // amount of data (and this is OK because we don't care about the returndata here). + // 2. The amount of gas provided to the execution context of the target is at least the + // gas limit specified by the user. If there is not enough gas in the current context + // to accomplish this, `callWithMinGas` will revert. + success = SafeCall.callWithMinGas(_tx.target, _tx.gasLimit, _tx.value, _tx.data); + + // Reset the l2Sender back to the default value. + l2Sender = Constants.DEFAULT_L2_SENDER; + } + + // All withdrawals are immediately finalized. Replayability can + // be achieved through contracts built on top of this contract + emit WithdrawalFinalized(withdrawalHash, success); + + // Reverting here is useful for determining the exact gas cost to successfully execute the + // sub call to the target contract if the minimum gas limit specified by the user would not + // be sufficient to execute the sub call. + if (success == false && tx.origin == Constants.ESTIMATION_ADDRESS) { + revert("FraxchainPortal: withdrawal failed"); + } + } + + /// @notice Accepts deposits of ETH and data, and emits a TransactionDeposited event for use in + /// deriving deposit transactions. Note that if a deposit is made by a contract, its + /// address will be aliased when retrieved using `tx.origin` or `msg.sender`. Consider + /// using the CrossDomainMessenger contracts for a simpler developer experience. + /// @param _to Target address on L2. + /// @param _value ETH value to send to the recipient. + /// @param _gasLimit Amount of L2 gas to purchase by burning gas on L1. + /// @param _isCreation Whether or not the transaction is a contract creation. + /// @param _data Data to trigger the recipient with. + function depositTransaction( + address _to, + uint256 _value, + uint64 _gasLimit, + bool _isCreation, + bytes memory _data + ) public payable { + depositTransaction_internal(_to,_value,msg.value,_gasLimit,_isCreation,_data); + } + + /// @notice bridges frxETH to L2 + /// @param _value frxETH amount to bridge + function bridgeFrxETH(uint256 _value) external { + depositTransactionWithFrxETH(msg.sender, _value, RECEIVE_DEFAULT_GAS_LIMIT, false, bytes("")); + } + + /// @notice Accepts deposits of frxETH and data, and emits a TransactionDeposited event for use in + /// deriving deposit transactions. + /// @param _to Target address on L2. + /// @param _value frxETH amount to send to the recipient. + /// @param _gasLimit Amount of L2 gas to purchase by burning gas on L1. + /// @param _isCreation Whether or not the transaction is a contract creation. + /// @param _data Data to trigger the recipient with. + function depositTransactionWithFrxETH( + address _to, + uint256 _value, + uint64 _gasLimit, + bool _isCreation, + bytes memory _data + ) public { + require(IERC20(FRXETH).transferFrom(msg.sender, address(this), _value),"FraxchainPortal: frxETH transfer failed"); + depositTransaction_internal(_to,_value,_value,_gasLimit,_isCreation,_data); + } + + function depositTransaction_internal( + address _to, + uint256 _value, + uint256 _msgValue, + uint64 _gasLimit, + bool _isCreation, + bytes memory _data + ) internal metered(_gasLimit) { + // Just to be safe, make sure that people specify address(0) as the target when doing + // contract creations. + if (_isCreation) { + require( + _to == address(0), + "FraxchainPortal: must send to address(0) when creating a contract" + ); + } + + // Prevent depositing transactions that have too small of a gas limit. Users should pay + // more for more resource usage. + require( + _gasLimit >= minimumGasLimit(uint64(_data.length)), + "FraxchainPortal: gas limit too small" + ); + + // Prevent the creation of deposit transactions that have too much calldata. This gives an + // upper limit on the size of unsafe blocks over the p2p network. 120kb is chosen to ensure + // that the transaction can fit into the p2p network policy of 128kb even though deposit + // transactions are not gossipped over the p2p network. + require(_data.length <= 120_000, "FraxchainPortal: data too large"); + + // Transform the from-address to its alias if the caller is a contract. + address from = msg.sender; + if (msg.sender != tx.origin) { + from = AddressAliasHelper.applyL1ToL2Alias(msg.sender); + } + + // Compute the opaque data that will be emitted as part of the TransactionDeposited event. + // We use opaque data so that we can update the TransactionDeposited event in the future + // without breaking the current interface. + bytes memory opaqueData = abi.encodePacked( + _msgValue, + _value, + _gasLimit, + _isCreation, + _data + ); + + // Emit a TransactionDeposited event so that the rollup node can derive a deposit + // transaction for this deposit. + emit TransactionDeposited(from, _to, DEPOSIT_VERSION, opaqueData); + } + + /// @notice mints frxETH using all the ETH in the contract + function mintFrxETH() external { + (bool sent, ) = FRXETH_MINTER.call{value: address(this).balance}(""); + require(sent, "FraxchainPortal: Failed to send Ether"); + } + + /// @notice Determine if a given output is finalized. + /// Reverts if the call to L2_ORACLE.getL2Output reverts. + /// Returns a boolean otherwise. + /// @param _l2OutputIndex Index of the L2 output to check. + /// @return Whether or not the output is finalized. + function isOutputFinalized(uint256 _l2OutputIndex) external view returns (bool) { + return _isFinalizationPeriodElapsed(L2_ORACLE.getL2Output(_l2OutputIndex).timestamp); + } + + /// @notice Determines whether the finalization period has elapsed with respect to + /// the provided block timestamp. + /// @param _timestamp Timestamp to check. + /// @return Whether or not the finalization period has elapsed. + function _isFinalizationPeriodElapsed(uint256 _timestamp) internal view returns (bool) { + return block.timestamp > _timestamp + L2_ORACLE.FINALIZATION_PERIOD_SECONDS(); + } +} \ No newline at end of file diff --git a/src/hardhat/contracts/ERC20/ERC20PermitPermissionedOptiMintable.sol b/src/hardhat/contracts/ERC20/ERC20PermitPermissionedOptiMintable.sol new file mode 100644 index 00000000..a2b70f71 --- /dev/null +++ b/src/hardhat/contracts/ERC20/ERC20PermitPermissionedOptiMintable.sol @@ -0,0 +1,250 @@ +//SPDX-License-Identifier: Unlicense +pragma solidity ^0.8.0; + +import "@openzeppelin/contracts/token/ERC20/ERC20.sol"; +import "@openzeppelin/contracts/token/ERC20/IERC20.sol"; +import "@openzeppelin/contracts/token/ERC20/extensions/ERC20Permit.sol"; +import "@openzeppelin/contracts/token/ERC20/extensions/ERC20Burnable.sol"; +import { IERC165 } from "@openzeppelin/contracts/utils/introspection/IERC165.sol"; +import { ILegacyMintableERC20, IOptimismMintableERC20 } from "@eth-optimism/contracts-bedrock/contracts/universal/IOptimismMintableERC20.sol"; +import { Semver } from "@eth-optimism/contracts-bedrock/contracts/universal/Semver.sol"; +import "../Staking/OwnedV2.sol"; + +/// @title Parent contract for frxETH.sol, but also CrossChainCanonicalV2 +/** @notice Combines Openzeppelin's ERC20Permit and ERC20Burnable with Synthetix's Owned and Optimism's OptimismMintableERC20. + Also includes a list of authorized minters */ +/// @dev ERC20PermitPermissionedOptiMintable adheres to EIP-712/EIP-2612 and can use permits +contract ERC20PermitPermissionedOptiMintable is ERC20Permit, ERC20Burnable, OwnedV2, IOptimismMintableERC20, ILegacyMintableERC20, Semver { + + /// @notice The timelock address + address public timelock_address; + + /// @notice Address of the L2 StandardBridge on this network. + address public immutable BRIDGE; + + /// @notice Address of the corresponding version of this token on the remote chain. + address public immutable REMOTE_TOKEN; + + /// @notice Array of the non-bridge minters + address[] public minters_array; + + /// @notice Mapping of the non-bridge minters + /// @dev Mapping is used for faster verification + mapping(address => bool) public minters; + + /* ========== CONSTRUCTOR ========== */ + + /// @custom:semver 1.0.0 + /// @param _creator_address The contract creator + /// @param _timelock_address The timelock + /// @param _bridge Address of the L2 standard bridge + /// @param _remoteToken Address of the corresponding L1 token + /// @param _name ERC20 name + /// @param _symbol ERC20 symbol + constructor( + address _creator_address, + address _timelock_address, + address _bridge, + address _remoteToken, + string memory _name, + string memory _symbol + ) + ERC20(_name, _symbol) + ERC20Permit(_name) + OwnedV2(_creator_address) + Semver(1, 0, 0) + { + REMOTE_TOKEN = _remoteToken; + BRIDGE = _bridge; + timelock_address = _timelock_address; + } + + + /* ========== MODIFIERS ========== */ + + /// @notice A modifier that only allows the contract owner or the timelock to call + modifier onlyByOwnGov() { + require(msg.sender == timelock_address || msg.sender == owner, "Not owner or timelock"); + _; + } + + /// @notice A modifier that only allows a non-bridge minter to call + modifier onlyMinters() { + require(minters[msg.sender] == true, "Only minters"); + _; + } + + /// @notice A modifier that only allows the bridge to call + modifier onlyBridge() { + require(msg.sender == BRIDGE, "OptimismMintableERC20: only bridge can mint and burn"); + _; + } + + /* ========== LEGACY VIEWS ========== */ + + /// @custom:legacy + /// @notice Legacy getter for the remote token. Use REMOTE_TOKEN going forward. + /// @return address The L1 remote token address + function l1Token() public view returns (address) { + return REMOTE_TOKEN; + } + + /// @custom:legacy + /// @notice Legacy getter for the bridge. Use BRIDGE going forward. + /// @return address The bridge address + function l2Bridge() public view returns (address) { + return BRIDGE; + } + + /// @custom:legacy + /// @notice Legacy getter for REMOTE_TOKEN + /// @return address The L1 remote token address + function remoteToken() public view returns (address) { + return REMOTE_TOKEN; + } + + /// @custom:legacy + /// @notice Legacy getter for BRIDGE + /// @return address The bridge address + function bridge() public view returns (address) { + return BRIDGE; + } + + /// @notice ERC165 interface check function. + /// @param _interfaceId Interface ID to check. + /// @return Whether or not the interface is supported by this contract. + function supportsInterface(bytes4 _interfaceId) external pure virtual returns (bool) { + bytes4 iface1 = type(IERC165).interfaceId; + // Interface corresponding to the legacy L2StandardERC20. + bytes4 iface2 = type(ILegacyMintableERC20).interfaceId; + // Interface corresponding to the updated OptimismMintableERC20 (this contract). + bytes4 iface3 = type(IOptimismMintableERC20).interfaceId; + return _interfaceId == iface1 || _interfaceId == iface2 || _interfaceId == iface3; + } + + + /* ========== RESTRICTED FUNCTIONS [BRIDGE] ========== */ + + /// @notice Allows the StandardBridge on this network to mint tokens. + /// @param _to Address to mint tokens to. + /// @param _amount Amount of tokens to mint. + function mint(address _to, uint256 _amount) + external + virtual + override(IOptimismMintableERC20, ILegacyMintableERC20) + onlyBridge + { + _mint(_to, _amount); + emit Mint(_to, _amount); + } + + /// @notice Allows the StandardBridge on this network to burn tokens. + /// @param _from Address to burn tokens from. + /// @param _amount Amount of tokens to burn. + function burn(address _from, uint256 _amount) + external + virtual + override(IOptimismMintableERC20, ILegacyMintableERC20) + onlyBridge + { + _burn(_from, _amount); + emit Burn(_from, _amount); + } + + /* ========== RESTRICTED FUNCTIONS [NON-BRIDGE MINTERS] ========== */ + + /// @notice Used by non-bridge minters to burn tokens + /// @param b_address Address of the account to burn from + /// @param b_amount Amount of tokens to burn + function minter_burn_from(address b_address, uint256 b_amount) public onlyMinters { + super.burnFrom(b_address, b_amount); + emit TokenMinterBurned(b_address, msg.sender, b_amount); + } + + /// @notice Used by non-bridge minters to mint new tokens + /// @param m_address Address of the account to mint to + /// @param m_amount Amount of tokens to mint + function minter_mint(address m_address, uint256 m_amount) public onlyMinters { + super._mint(m_address, m_amount); + emit TokenMinterMinted(msg.sender, m_address, m_amount); + } + + /// @notice Adds a non-bridge minter + /// @param minter_address Address of minter to add + function addMinter(address minter_address) public onlyByOwnGov { + require(minter_address != address(0), "Zero address detected"); + + require(minters[minter_address] == false, "Address already exists"); + minters[minter_address] = true; + minters_array.push(minter_address); + + emit MinterAdded(minter_address); + } + + /// @notice Removes a non-bridge minter + /// @param minter_address Address of minter to remove + function removeMinter(address minter_address) public onlyByOwnGov { + require(minter_address != address(0), "Zero address detected"); + require(minters[minter_address] == true, "Address nonexistant"); + + // Delete from the mapping + delete minters[minter_address]; + + // 'Delete' from the array by setting the address to 0x0 + for (uint i = 0; i < minters_array.length; i++){ + if (minters_array[i] == minter_address) { + minters_array[i] = address(0); // This will leave a null in the array and keep the indices the same + break; + } + } + + emit MinterRemoved(minter_address); + } + + + /* ========== RESTRICTED FUNCTIONS [ADMIN-RELATED] ========== */ + + /// @notice Sets the timelock address + /// @param _timelock_address Address of the timelock + function setTimelock(address _timelock_address) public onlyByOwnGov { + require(_timelock_address != address(0), "Zero address detected"); + timelock_address = _timelock_address; + emit TimelockChanged(_timelock_address); + } + + /* ========== EVENTS ========== */ + + /// @notice Emitted whenever the bridge burns tokens from an account + /// @param account Address of the account tokens are being burned from + /// @param amount Amount of tokens burned + event Burn(address indexed account, uint256 amount); + + /// @notice Emitted whenever the bridge mints tokens to an account + /// @param account Address of the account tokens are being minted for + /// @param amount Amount of tokens minted. + event Mint(address indexed account, uint256 amount); + + /// @notice Emitted when a non-bridge minter is added + /// @param minter_address Address of the new minter + event MinterAdded(address minter_address); + + /// @notice Emitted when a non-bridge minter is removed + /// @param minter_address Address of the removed minter + event MinterRemoved(address minter_address); + + /// @notice Emitted when the timelock address changes + /// @param timelock_address Address of the removed timelock + event TimelockChanged(address timelock_address); + + /// @notice Emitted when a non-bridge minter burns tokens + /// @param from The account whose tokens are burned + /// @param to The minter doing the burning + /// @param amount Amount of tokens burned + event TokenMinterBurned(address indexed from, address indexed to, uint256 amount); + + /// @notice Emitted when a non-bridge minter mints tokens + /// @param from The minter doing the minting + /// @param to The account that gets the newly minted tokens + /// @param amount Amount of tokens minted + event TokenMinterMinted(address indexed from, address indexed to, uint256 amount); +} \ No newline at end of file diff --git a/src/hardhat/contracts/ERC20/__CROSSCHAIN/CrossChainCanonicalV2OptiMintable.sol b/src/hardhat/contracts/ERC20/__CROSSCHAIN/CrossChainCanonicalV2OptiMintable.sol new file mode 100755 index 00000000..caa4103c --- /dev/null +++ b/src/hardhat/contracts/ERC20/__CROSSCHAIN/CrossChainCanonicalV2OptiMintable.sol @@ -0,0 +1,47 @@ +// SPDX-License-Identifier: GPL-2.0-or-later +pragma solidity >=0.8.0; + +// ==================================================================== +// | ______ _______ | +// | / _____________ __ __ / ____(_____ ____ _____ ________ | +// | / /_ / ___/ __ `| |/_/ / /_ / / __ \/ __ `/ __ \/ ___/ _ \ | +// | / __/ / / / /_/ _> < / __/ / / / / / /_/ / / / / /__/ __/ | +// | /_/ /_/ \__,_/_/|_| /_/ /_/_/ /_/\__,_/_/ /_/\___/\___/ | +// | | +// ==================================================================== +// ================= CrossChainCanonicalV2OptiMintable ================ +// ==================================================================== +// Cross-chain / non mainnet canonical token contract. +// Does not include any spurious mainnet logic +// Does have authorized minters +// Uses + +// Frax Finance: https://github.com/FraxFinance + +// Primary Author(s) +// Travis Moore: https://github.com/FortisFortuna + +// Reviewer(s) / Contributor(s) +// Sam Kazemian: https://github.com/samkazemian +// Dennis: https://github.com/denett +// Drake Evans: https://github.com/DrakeEvans +// Justin Moore: https://github.com/0xJM + +import { ERC20PermitPermissionedOptiMintable } from "../ERC20PermitPermissionedOptiMintable.sol"; + +contract CrossChainCanonicalV2OptiMintable is ERC20PermitPermissionedOptiMintable { + /* ========== CONSTRUCTOR ========== */ + constructor( + address _creator_address, + address _timelock_address, + address _bridge, + address _remoteToken, + string memory _name, + string memory _symbol, + uint256 _initial_mint_amt + ) ERC20PermitPermissionedOptiMintable(_creator_address, _timelock_address, _bridge, _remoteToken, _name, _symbol) + { + // Mint some canonical tokens to the creator + super._mint(_creator_address, _initial_mint_amt); + } +} diff --git a/src/hardhat/contracts/ERC20/wfrxETH.sol b/src/hardhat/contracts/ERC20/wfrxETH.sol new file mode 100644 index 00000000..e5f4ab6a --- /dev/null +++ b/src/hardhat/contracts/ERC20/wfrxETH.sol @@ -0,0 +1,879 @@ +// SPDX-License-Identifier: GPL-3.0 +pragma solidity ^0.8.0; + +import "@openzeppelin/contracts/token/ERC20/extensions/IERC20Permit.sol"; +import "@openzeppelin/contracts/utils/cryptography/ECDSA.sol"; +import "@openzeppelin/contracts/utils/cryptography/EIP712.sol"; +import "@openzeppelin/contracts/utils/Counters.sol"; + +// ==================================================================== +// | ______ _______ | +// | / _____________ __ __ / ____(_____ ____ _____ ________ | +// | / /_ / ___/ __ `| |/_/ / /_ / / __ \/ __ `/ __ \/ ___/ _ \ | +// | / __/ / / / /_/ _> < / __/ / / / / / /_/ / / / / /__/ __/ | +// | /_/ /_/ \__,_/_/|_| /_/ /_/_/ /_/\__,_/_/ /_/\___/\___/ | +// | | +// ==================================================================== +// ============================= wfrxETH ============================== +// ==================================================================== +// Wrapped frxETH (native gas token for Fraxchain) +// Basically WETH9 combined with permit() features from OpenZeppelin's ERC20Permit (EIP-2612) + +// Frax Finance: https://github.com/FraxFinance + +// Primary Author(s) +// Travis Moore: https://github.com/FortisFortuna + +// Reviewer(s) / Contributor(s) +// Sam Kazemian: https://github.com/samkazemian +// Dennis: https://github.com/denett +// Drake Evans: https://github.com/DrakeEvans +// Justin Moore: https://github.com/0xJM + + +// !!!!!!! CREDIT GOES TO DAPPHUB AND OPENZEPPELIN !!!!!!! + +// Copyright (C) 2015, 2016, 2017 Dapphub + +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License +// along with this program. If not, see . + +contract wfrxETH is IERC20Permit, EIP712 { + using Counters for Counters.Counter; + + // EIP-2612 State Variables + // ============================================= + + mapping(address => Counters.Counter) private _nonces; + + // solhint-disable-next-line var-name-mixedcase + bytes32 private constant _PERMIT_TYPEHASH = + keccak256("Permit(address owner,address spender,uint256 value,uint256 nonce,uint256 deadline)"); + /** + * @dev In previous versions `_PERMIT_TYPEHASH` was declared as `immutable`. + * However, to ensure consistency with the upgradeable transpiler, we will continue + * to reserve a slot. + * @custom:oz-renamed-from _PERMIT_TYPEHASH + */ + // solhint-disable-next-line var-name-mixedcase + bytes32 private _PERMIT_TYPEHASH_DEPRECATED_SLOT; + + // WETH9 State Variables + // ============================================= + + string public name = "Wrapped Frax Ether"; + string public symbol = "wfrxETH"; + uint8 public decimals = 18; + + event Approval(address indexed src, address indexed guy, uint wad); + event Transfer(address indexed src, address indexed dst, uint wad); + event Deposit(address indexed dst, uint wad); + event Withdrawal(address indexed src, uint wad); + + mapping (address => uint) public balanceOf; + mapping (address => mapping (address => uint)) public allowance; + + + // Constructor + // ============================================= + + constructor() EIP712(name, "1") {} + + // WETH9 Functions + // ============================================= + + fallback() external payable { + deposit(); + } + + function deposit() public payable { + balanceOf[msg.sender] += msg.value; + emit Deposit(msg.sender, msg.value); + } + + function withdraw(uint wad) public { + require(balanceOf[msg.sender] >= wad); + balanceOf[msg.sender] -= wad; + payable(msg.sender).transfer(wad); + emit Withdrawal(msg.sender, wad); + } + + function totalSupply() public view returns (uint) { + return address(this).balance; + } + + function approve(address guy, uint wad) public returns (bool) { + allowance[msg.sender][guy] = wad; + emit Approval(msg.sender, guy, wad); + return true; + } + + function transfer(address dst, uint wad) public returns (bool) { + return transferFrom(msg.sender, dst, wad); + } + + function transferFrom(address src, address dst, uint wad) + public + returns (bool) + { + require(balanceOf[src] >= wad); + + if (src != msg.sender && allowance[src][msg.sender] != type(uint256).max) { + require(allowance[src][msg.sender] >= wad); + allowance[src][msg.sender] -= wad; + } + + balanceOf[src] -= wad; + balanceOf[dst] += wad; + + emit Transfer(src, dst, wad); + + return true; + } + + + // EIP-2612 Functions + // ============================================= + + /** + * @dev See {IERC20Permit-permit}. + */ + function permit( + address owner, + address spender, + uint256 value, + uint256 deadline, + uint8 v, + bytes32 r, + bytes32 s + ) public virtual override { + require(block.timestamp <= deadline, "ERC20Permit: expired deadline"); + + // For WETH9, msg.sender is always the "owner". Leaving as a function parameter to not break existing ABIs. + owner = msg.sender; + + bytes32 structHash = keccak256(abi.encode(_PERMIT_TYPEHASH, owner, spender, value, _useNonce(owner), deadline)); + + bytes32 hash = _hashTypedDataV4(structHash); + + address signer = ECDSA.recover(hash, v, r, s); + require(signer == owner, "ERC20Permit: invalid signature"); + + approve(spender, value); + } + + /** + * @dev See {IERC20Permit-nonces}. + */ + function nonces(address owner) public view virtual override returns (uint256) { + return _nonces[owner].current(); + } + + /** + * @dev See {IERC20Permit-DOMAIN_SEPARATOR}. + */ + // solhint-disable-next-line func-name-mixedcase + function DOMAIN_SEPARATOR() external view override returns (bytes32) { + return _domainSeparatorV4(); + } + + /** + * @dev "Consume a nonce": return the current value and increment. + * + * _Available since v4.1._ + */ + function _useNonce(address owner) internal virtual returns (uint256 current) { + Counters.Counter storage nonce = _nonces[owner]; + current = nonce.current(); + nonce.increment(); + } +} + + +/* + GNU GENERAL PUBLIC LICENSE + Version 3, 29 June 2007 + + Copyright (C) 2007 Free Software Foundation, Inc. + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The GNU General Public License is a free, copyleft license for +software and other kinds of works. + + The licenses for most software and other practical works are designed +to take away your freedom to share and change the works. By contrast, +the GNU General Public License is intended to guarantee your freedom to +share and change all versions of a program--to make sure it remains free +software for all its users. We, the Free Software Foundation, use the +GNU General Public License for most of our software; it applies also to +any other work released this way by its authors. You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +them if you wish), that you receive source code or can get it if you +want it, that you can change the software or use pieces of it in new +free programs, and that you know you can do these things. + + To protect your rights, we need to prevent others from denying you +these rights or asking you to surrender the rights. Therefore, you have +certain responsibilities if you distribute copies of the software, or if +you modify it: responsibilities to respect the freedom of others. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must pass on to the recipients the same +freedoms that you received. You must make sure that they, too, receive +or can get the source code. And you must show them these terms so they +know their rights. + + Developers that use the GNU GPL protect your rights with two steps: +(1) assert copyright on the software, and (2) offer you this License +giving you legal permission to copy, distribute and/or modify it. + + For the developers' and authors' protection, the GPL clearly explains +that there is no warranty for this free software. For both users' and +authors' sake, the GPL requires that modified versions be marked as +changed, so that their problems will not be attributed erroneously to +authors of previous versions. + + Some devices are designed to deny users access to install or run +modified versions of the software inside them, although the manufacturer +can do so. This is fundamentally incompatible with the aim of +protecting users' freedom to change the software. The systematic +pattern of such abuse occurs in the area of products for individuals to +use, which is precisely where it is most unacceptable. Therefore, we +have designed this version of the GPL to prohibit the practice for those +products. If such problems arise substantially in other domains, we +stand ready to extend this provision to those domains in future versions +of the GPL, as needed to protect the freedom of users. + + Finally, every program is threatened constantly by software patents. +States should not allow patents to restrict development and use of +software on general-purpose computers, but in those that do, we wish to +avoid the special danger that patents applied to a free program could +make it effectively proprietary. To prevent this, the GPL assures that +patents cannot be used to render the program non-free. + + The precise terms and conditions for copying, distribution and +modification follow. + + TERMS AND CONDITIONS + + 0. Definitions. + + "This License" refers to version 3 of the GNU General Public License. + + "Copyright" also means copyright-like laws that apply to other kinds of +works, such as semiconductor masks. + + "The Program" refers to any copyrightable work licensed under this +License. Each licensee is addressed as "you". "Licensees" and +"recipients" may be individuals or organizations. + + To "modify" a work means to copy from or adapt all or part of the work +in a fashion requiring copyright permission, other than the making of an +exact copy. The resulting work is called a "modified version" of the +earlier work or a work "based on" the earlier work. + + A "covered work" means either the unmodified Program or a work based +on the Program. + + To "propagate" a work means to do anything with it that, without +permission, would make you directly or secondarily liable for +infringement under applicable copyright law, except executing it on a +computer or modifying a private copy. Propagation includes copying, +distribution (with or without modification), making available to the +public, and in some countries other activities as well. + + To "convey" a work means any kind of propagation that enables other +parties to make or receive copies. Mere interaction with a user through +a computer network, with no transfer of a copy, is not conveying. + + An interactive user interface displays "Appropriate Legal Notices" +to the extent that it includes a convenient and prominently visible +feature that (1) displays an appropriate copyright notice, and (2) +tells the user that there is no warranty for the work (except to the +extent that warranties are provided), that licensees may convey the +work under this License, and how to view a copy of this License. If +the interface presents a list of user commands or options, such as a +menu, a prominent item in the list meets this criterion. + + 1. Source Code. + + The "source code" for a work means the preferred form of the work +for making modifications to it. "Object code" means any non-source +form of a work. + + A "Standard Interface" means an interface that either is an official +standard defined by a recognized standards body, or, in the case of +interfaces specified for a particular programming language, one that +is widely used among developers working in that language. + + The "System Libraries" of an executable work include anything, other +than the work as a whole, that (a) is included in the normal form of +packaging a Major Component, but which is not part of that Major +Component, and (b) serves only to enable use of the work with that +Major Component, or to implement a Standard Interface for which an +implementation is available to the public in source code form. A +"Major Component", in this context, means a major essential component +(kernel, window system, and so on) of the specific operating system +(if any) on which the executable work runs, or a compiler used to +produce the work, or an object code interpreter used to run it. + + The "Corresponding Source" for a work in object code form means all +the source code needed to generate, install, and (for an executable +work) run the object code and to modify the work, including scripts to +control those activities. However, it does not include the work's +System Libraries, or general-purpose tools or generally available free +programs which are used unmodified in performing those activities but +which are not part of the work. For example, Corresponding Source +includes interface definition files associated with source files for +the work, and the source code for shared libraries and dynamically +linked subprograms that the work is specifically designed to require, +such as by intimate data communication or control flow between those +subprograms and other parts of the work. + + The Corresponding Source need not include anything that users +can regenerate automatically from other parts of the Corresponding +Source. + + The Corresponding Source for a work in source code form is that +same work. + + 2. Basic Permissions. + + All rights granted under this License are granted for the term of +copyright on the Program, and are irrevocable provided the stated +conditions are met. This License explicitly affirms your unlimited +permission to run the unmodified Program. The output from running a +covered work is covered by this License only if the output, given its +content, constitutes a covered work. This License acknowledges your +rights of fair use or other equivalent, as provided by copyright law. + + You may make, run and propagate covered works that you do not +convey, without conditions so long as your license otherwise remains +in force. You may convey covered works to others for the sole purpose +of having them make modifications exclusively for you, or provide you +with facilities for running those works, provided that you comply with +the terms of this License in conveying all material for which you do +not control copyright. Those thus making or running the covered works +for you must do so exclusively on your behalf, under your direction +and control, on terms that prohibit them from making any copies of +your copyrighted material outside their relationship with you. + + Conveying under any other circumstances is permitted solely under +the conditions stated below. Sublicensing is not allowed; section 10 +makes it unnecessary. + + 3. Protecting Users' Legal Rights From Anti-Circumvention Law. + + No covered work shall be deemed part of an effective technological +measure under any applicable law fulfilling obligations under article +11 of the WIPO copyright treaty adopted on 20 December 1996, or +similar laws prohibiting or restricting circumvention of such +measures. + + When you convey a covered work, you waive any legal power to forbid +circumvention of technological measures to the extent such circumvention +is effected by exercising rights under this License with respect to +the covered work, and you disclaim any intention to limit operation or +modification of the work as a means of enforcing, against the work's +users, your or third parties' legal rights to forbid circumvention of +technological measures. + + 4. Conveying Verbatim Copies. + + You may convey verbatim copies of the Program's source code as you +receive it, in any medium, provided that you conspicuously and +appropriately publish on each copy an appropriate copyright notice; +keep intact all notices stating that this License and any +non-permissive terms added in accord with section 7 apply to the code; +keep intact all notices of the absence of any warranty; and give all +recipients a copy of this License along with the Program. + + You may charge any price or no price for each copy that you convey, +and you may offer support or warranty protection for a fee. + + 5. Conveying Modified Source Versions. + + You may convey a work based on the Program, or the modifications to +produce it from the Program, in the form of source code under the +terms of section 4, provided that you also meet all of these conditions: + + a) The work must carry prominent notices stating that you modified + it, and giving a relevant date. + + b) The work must carry prominent notices stating that it is + released under this License and any conditions added under section + 7. This requirement modifies the requirement in section 4 to + "keep intact all notices". + + c) You must license the entire work, as a whole, under this + License to anyone who comes into possession of a copy. This + License will therefore apply, along with any applicable section 7 + additional terms, to the whole of the work, and all its parts, + regardless of how they are packaged. This License gives no + permission to license the work in any other way, but it does not + invalidate such permission if you have separately received it. + + d) If the work has interactive user interfaces, each must display + Appropriate Legal Notices; however, if the Program has interactive + interfaces that do not display Appropriate Legal Notices, your + work need not make them do so. + + A compilation of a covered work with other separate and independent +works, which are not by their nature extensions of the covered work, +and which are not combined with it such as to form a larger program, +in or on a volume of a storage or distribution medium, is called an +"aggregate" if the compilation and its resulting copyright are not +used to limit the access or legal rights of the compilation's users +beyond what the individual works permit. Inclusion of a covered work +in an aggregate does not cause this License to apply to the other +parts of the aggregate. + + 6. Conveying Non-Source Forms. + + You may convey a covered work in object code form under the terms +of sections 4 and 5, provided that you also convey the +machine-readable Corresponding Source under the terms of this License, +in one of these ways: + + a) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by the + Corresponding Source fixed on a durable physical medium + customarily used for software interchange. + + b) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by a + written offer, valid for at least three years and valid for as + long as you offer spare parts or customer support for that product + model, to give anyone who possesses the object code either (1) a + copy of the Corresponding Source for all the software in the + product that is covered by this License, on a durable physical + medium customarily used for software interchange, for a price no + more than your reasonable cost of physically performing this + conveying of source, or (2) access to copy the + Corresponding Source from a network server at no charge. + + c) Convey individual copies of the object code with a copy of the + written offer to provide the Corresponding Source. This + alternative is allowed only occasionally and noncommercially, and + only if you received the object code with such an offer, in accord + with subsection 6b. + + d) Convey the object code by offering access from a designated + place (gratis or for a charge), and offer equivalent access to the + Corresponding Source in the same way through the same place at no + further charge. You need not require recipients to copy the + Corresponding Source along with the object code. If the place to + copy the object code is a network server, the Corresponding Source + may be on a different server (operated by you or a third party) + that supports equivalent copying facilities, provided you maintain + clear directions next to the object code saying where to find the + Corresponding Source. Regardless of what server hosts the + Corresponding Source, you remain obligated to ensure that it is + available for as long as needed to satisfy these requirements. + + e) Convey the object code using peer-to-peer transmission, provided + you inform other peers where the object code and Corresponding + Source of the work are being offered to the general public at no + charge under subsection 6d. + + A separable portion of the object code, whose source code is excluded +from the Corresponding Source as a System Library, need not be +included in conveying the object code work. + + A "User Product" is either (1) a "consumer product", which means any +tangible personal property which is normally used for personal, family, +or household purposes, or (2) anything designed or sold for incorporation +into a dwelling. In determining whether a product is a consumer product, +doubtful cases shall be resolved in favor of coverage. For a particular +product received by a particular user, "normally used" refers to a +typical or common use of that class of product, regardless of the status +of the particular user or of the way in which the particular user +actually uses, or expects or is expected to use, the product. A product +is a consumer product regardless of whether the product has substantial +commercial, industrial or non-consumer uses, unless such uses represent +the only significant mode of use of the product. + + "Installation Information" for a User Product means any methods, +procedures, authorization keys, or other information required to install +and execute modified versions of a covered work in that User Product from +a modified version of its Corresponding Source. The information must +suffice to ensure that the continued functioning of the modified object +code is in no case prevented or interfered with solely because +modification has been made. + + If you convey an object code work under this section in, or with, or +specifically for use in, a User Product, and the conveying occurs as +part of a transaction in which the right of possession and use of the +User Product is transferred to the recipient in perpetuity or for a +fixed term (regardless of how the transaction is characterized), the +Corresponding Source conveyed under this section must be accompanied +by the Installation Information. But this requirement does not apply +if neither you nor any third party retains the ability to install +modified object code on the User Product (for example, the work has +been installed in ROM). + + The requirement to provide Installation Information does not include a +requirement to continue to provide support service, warranty, or updates +for a work that has been modified or installed by the recipient, or for +the User Product in which it has been modified or installed. Access to a +network may be denied when the modification itself materially and +adversely affects the operation of the network or violates the rules and +protocols for communication across the network. + + Corresponding Source conveyed, and Installation Information provided, +in accord with this section must be in a format that is publicly +documented (and with an implementation available to the public in +source code form), and must require no special password or key for +unpacking, reading or copying. + + 7. Additional Terms. + + "Additional permissions" are terms that supplement the terms of this +License by making exceptions from one or more of its conditions. +Additional permissions that are applicable to the entire Program shall +be treated as though they were included in this License, to the extent +that they are valid under applicable law. If additional permissions +apply only to part of the Program, that part may be used separately +under those permissions, but the entire Program remains governed by +this License without regard to the additional permissions. + + When you convey a copy of a covered work, you may at your option +remove any additional permissions from that copy, or from any part of +it. (Additional permissions may be written to require their own +removal in certain cases when you modify the work.) You may place +additional permissions on material, added by you to a covered work, +for which you have or can give appropriate copyright permission. + + Notwithstanding any other provision of this License, for material you +add to a covered work, you may (if authorized by the copyright holders of +that material) supplement the terms of this License with terms: + + a) Disclaiming warranty or limiting liability differently from the + terms of sections 15 and 16 of this License; or + + b) Requiring preservation of specified reasonable legal notices or + author attributions in that material or in the Appropriate Legal + Notices displayed by works containing it; or + + c) Prohibiting misrepresentation of the origin of that material, or + requiring that modified versions of such material be marked in + reasonable ways as different from the original version; or + + d) Limiting the use for publicity purposes of names of licensors or + authors of the material; or + + e) Declining to grant rights under trademark law for use of some + trade names, trademarks, or service marks; or + + f) Requiring indemnification of licensors and authors of that + material by anyone who conveys the material (or modified versions of + it) with contractual assumptions of liability to the recipient, for + any liability that these contractual assumptions directly impose on + those licensors and authors. + + All other non-permissive additional terms are considered "further +restrictions" within the meaning of section 10. If the Program as you +received it, or any part of it, contains a notice stating that it is +governed by this License along with a term that is a further +restriction, you may remove that term. If a license document contains +a further restriction but permits relicensing or conveying under this +License, you may add to a covered work material governed by the terms +of that license document, provided that the further restriction does +not survive such relicensing or conveying. + + If you add terms to a covered work in accord with this section, you +must place, in the relevant source files, a statement of the +additional terms that apply to those files, or a notice indicating +where to find the applicable terms. + + Additional terms, permissive or non-permissive, may be stated in the +form of a separately written license, or stated as exceptions; +the above requirements apply either way. + + 8. Termination. + + You may not propagate or modify a covered work except as expressly +provided under this License. Any attempt otherwise to propagate or +modify it is void, and will automatically terminate your rights under +this License (including any patent licenses granted under the third +paragraph of section 11). + + However, if you cease all violation of this License, then your +license from a particular copyright holder is reinstated (a) +provisionally, unless and until the copyright holder explicitly and +finally terminates your license, and (b) permanently, if the copyright +holder fails to notify you of the violation by some reasonable means +prior to 60 days after the cessation. + + Moreover, your license from a particular copyright holder is +reinstated permanently if the copyright holder notifies you of the +violation by some reasonable means, this is the first time you have +received notice of violation of this License (for any work) from that +copyright holder, and you cure the violation prior to 30 days after +your receipt of the notice. + + Termination of your rights under this section does not terminate the +licenses of parties who have received copies or rights from you under +this License. If your rights have been terminated and not permanently +reinstated, you do not qualify to receive new licenses for the same +material under section 10. + + 9. Acceptance Not Required for Having Copies. + + You are not required to accept this License in order to receive or +run a copy of the Program. Ancillary propagation of a covered work +occurring solely as a consequence of using peer-to-peer transmission +to receive a copy likewise does not require acceptance. However, +nothing other than this License grants you permission to propagate or +modify any covered work. These actions infringe copyright if you do +not accept this License. Therefore, by modifying or propagating a +covered work, you indicate your acceptance of this License to do so. + + 10. Automatic Licensing of Downstream Recipients. + + Each time you convey a covered work, the recipient automatically +receives a license from the original licensors, to run, modify and +propagate that work, subject to this License. You are not responsible +for enforcing compliance by third parties with this License. + + An "entity transaction" is a transaction transferring control of an +organization, or substantially all assets of one, or subdividing an +organization, or merging organizations. If propagation of a covered +work results from an entity transaction, each party to that +transaction who receives a copy of the work also receives whatever +licenses to the work the party's predecessor in interest had or could +give under the previous paragraph, plus a right to possession of the +Corresponding Source of the work from the predecessor in interest, if +the predecessor has it or can get it with reasonable efforts. + + You may not impose any further restrictions on the exercise of the +rights granted or affirmed under this License. For example, you may +not impose a license fee, royalty, or other charge for exercise of +rights granted under this License, and you may not initiate litigation +(including a cross-claim or counterclaim in a lawsuit) alleging that +any patent claim is infringed by making, using, selling, offering for +sale, or importing the Program or any portion of it. + + 11. Patents. + + A "contributor" is a copyright holder who authorizes use under this +License of the Program or a work on which the Program is based. The +work thus licensed is called the contributor's "contributor version". + + A contributor's "essential patent claims" are all patent claims +owned or controlled by the contributor, whether already acquired or +hereafter acquired, that would be infringed by some manner, permitted +by this License, of making, using, or selling its contributor version, +but do not include claims that would be infringed only as a +consequence of further modification of the contributor version. For +purposes of this definition, "control" includes the right to grant +patent sublicenses in a manner consistent with the requirements of +this License. + + Each contributor grants you a non-exclusive, worldwide, royalty-free +patent license under the contributor's essential patent claims, to +make, use, sell, offer for sale, import and otherwise run, modify and +propagate the contents of its contributor version. + + In the following three paragraphs, a "patent license" is any express +agreement or commitment, however denominated, not to enforce a patent +(such as an express permission to practice a patent or covenant not to +sue for patent infringement). To "grant" such a patent license to a +party means to make such an agreement or commitment not to enforce a +patent against the party. + + If you convey a covered work, knowingly relying on a patent license, +and the Corresponding Source of the work is not available for anyone +to copy, free of charge and under the terms of this License, through a +publicly available network server or other readily accessible means, +then you must either (1) cause the Corresponding Source to be so +available, or (2) arrange to deprive yourself of the benefit of the +patent license for this particular work, or (3) arrange, in a manner +consistent with the requirements of this License, to extend the patent +license to downstream recipients. "Knowingly relying" means you have +actual knowledge that, but for the patent license, your conveying the +covered work in a country, or your recipient's use of the covered work +in a country, would infringe one or more identifiable patents in that +country that you have reason to believe are valid. + + If, pursuant to or in connection with a single transaction or +arrangement, you convey, or propagate by procuring conveyance of, a +covered work, and grant a patent license to some of the parties +receiving the covered work authorizing them to use, propagate, modify +or convey a specific copy of the covered work, then the patent license +you grant is automatically extended to all recipients of the covered +work and works based on it. + + A patent license is "discriminatory" if it does not include within +the scope of its coverage, prohibits the exercise of, or is +conditioned on the non-exercise of one or more of the rights that are +specifically granted under this License. You may not convey a covered +work if you are a party to an arrangement with a third party that is +in the business of distributing software, under which you make payment +to the third party based on the extent of your activity of conveying +the work, and under which the third party grants, to any of the +parties who would receive the covered work from you, a discriminatory +patent license (a) in connection with copies of the covered work +conveyed by you (or copies made from those copies), or (b) primarily +for and in connection with specific products or compilations that +contain the covered work, unless you entered into that arrangement, +or that patent license was granted, prior to 28 March 2007. + + Nothing in this License shall be construed as excluding or limiting +any implied license or other defenses to infringement that may +otherwise be available to you under applicable patent law. + + 12. No Surrender of Others' Freedom. + + If conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot convey a +covered work so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you may +not convey it at all. For example, if you agree to terms that obligate you +to collect a royalty for further conveying from those to whom you convey +the Program, the only way you could satisfy both those terms and this +License would be to refrain entirely from conveying the Program. + + 13. Use with the GNU Affero General Public License. + + Notwithstanding any other provision of this License, you have +permission to link or combine any covered work with a work licensed +under version 3 of the GNU Affero General Public License into a single +combined work, and to convey the resulting work. The terms of this +License will continue to apply to the part which is the covered work, +but the special requirements of the GNU Affero General Public License, +section 13, concerning interaction through a network will apply to the +combination as such. + + 14. Revised Versions of this License. + + The Free Software Foundation may publish revised and/or new versions of +the GNU General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + + Each version is given a distinguishing version number. If the +Program specifies that a certain numbered version of the GNU General +Public License "or any later version" applies to it, you have the +option of following the terms and conditions either of that numbered +version or of any later version published by the Free Software +Foundation. If the Program does not specify a version number of the +GNU General Public License, you may choose any version ever published +by the Free Software Foundation. + + If the Program specifies that a proxy can decide which future +versions of the GNU General Public License can be used, that proxy's +public statement of acceptance of a version permanently authorizes you +to choose that version for the Program. + + Later license versions may give you additional or different +permissions. However, no additional obligations are imposed on any +author or copyright holder as a result of your choosing to follow a +later version. + + 15. Disclaimer of Warranty. + + THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY +APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT +HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY +OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, +THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM +IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF +ALL NECESSARY SERVICING, REPAIR OR CORRECTION. + + 16. Limitation of Liability. + + IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS +THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY +GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE +USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF +DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD +PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), +EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF +SUCH DAMAGES. + + 17. Interpretation of Sections 15 and 16. + + If the disclaimer of warranty and limitation of liability provided +above cannot be given local legal effect according to their terms, +reviewing courts shall apply local law that most closely approximates +an absolute waiver of all civil liability in connection with the +Program, unless a warranty or assumption of liability accompanies a +copy of the Program in return for a fee. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +state the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + + Copyright (C) + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . + +Also add information on how to contact you by electronic and paper mail. + + If the program does terminal interaction, make it output a short +notice like this when it starts in an interactive mode: + + Copyright (C) + This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the appropriate +parts of the General Public License. Of course, your program's commands +might be different; for a GUI interface, you would use an "about box". + + You should also get your employer (if you work as a programmer) or school, +if any, to sign a "copyright disclaimer" for the program, if necessary. +For more information on this, and how to apply and follow the GNU GPL, see +. + + The GNU General Public License does not permit incorporating your program +into proprietary programs. If your program is a subroutine library, you +may consider it more useful to permit linking proprietary applications with +the library. If this is what you want to do, use the GNU Lesser General +Public License instead of this License. But first, please read +. + +*/ \ No newline at end of file diff --git a/src/hardhat/contracts/FraxETH/frxETHMinter.sol.old b/src/hardhat/contracts/FraxETH/frxETHMinter.sol.old new file mode 100644 index 00000000..443f3c4f --- /dev/null +++ b/src/hardhat/contracts/FraxETH/frxETHMinter.sol.old @@ -0,0 +1,2321 @@ +// SPDX-License-Identifier: AGPL-3.0-only +pragma solidity ^0.8.0; + +// ==================================================================== +// | ______ _______ | +// | / _____________ __ __ / ____(_____ ____ _____ ________ | +// | / /_ / ___/ __ `| |/_/ / /_ / / __ \/ __ `/ __ \/ ___/ _ \ | +// | / __/ / / / /_/ _> < / __/ / / / / / /_/ / / / / /__/ __/ | +// | /_/ /_/ \__,_/_/|_| /_/ /_/_/ /_/\__,_/_/ /_/\___/\___/ | +// | | +// ==================================================================== +// ============================ frxETHMinter ========================== +// ==================================================================== +// Frax Finance: https://github.com/FraxFinance + +// Primary Author(s) +// Jack Corddry: https://github.com/corddry +// Justin Moore: https://github.com/0xJM + +// Reviewer(s) / Contributor(s) +// Travis Moore: https://github.com/FortisFortuna +// Dennis: https://github.com/denett +// Jamie Turley: https://github.com/jyturley + +// ==================================================================== +// | ______ _______ | +// | / _____________ __ __ / ____(_____ ____ _____ ________ | +// | / /_ / ___/ __ `| |/_/ / /_ / / __ \/ __ `/ __ \/ ___/ _ \ | +// | / __/ / / / /_/ _> < / __/ / / / / / /_/ / / / / /__/ __/ | +// | /_/ /_/ \__,_/_/|_| /_/ /_/_/ /_/\__,_/_/ /_/\___/\___/ | +// | | +// ==================================================================== +// ============================== frxETH ============================== +// ==================================================================== +// Frax Finance: https://github.com/FraxFinance + +// Primary Author(s) +// Jack Corddry: https://github.com/corddry +// Nader Ghazvini: https://github.com/amirnader-ghazvini + +// Reviewer(s) / Contributor(s) +// Sam Kazemian: https://github.com/samkazemian +// Dennis: https://github.com/denett +// Travis Moore: https://github.com/FortisFortuna +// Jamie Turley: https://github.com/jyturley + +/// @title Stablecoin pegged to Ether for use within the Frax ecosystem +/** @notice Does not accrue ETH 2.0 staking yield: it must be staked at the sfrxETH contract first. + ETH -> frxETH conversion is permanent, so a market will develop for the latter. + Withdraws are not live (as of deploy time) so loosely pegged to eth but is possible will float */ +/// @dev frxETH adheres to EIP-712/EIP-2612 and can use permits + +// OpenZeppelin Contracts (last updated v4.7.0) (token/ERC20/ERC20.sol) + +// OpenZeppelin Contracts (last updated v4.6.0) (token/ERC20/IERC20.sol) + +/** + * @dev Interface of the ERC20 standard as defined in the EIP. + */ +interface IERC20 { + /** + * @dev Emitted when `value` tokens are moved from one account (`from`) to + * another (`to`). + * + * Note that `value` may be zero. + */ + event Transfer(address indexed from, address indexed to, uint256 value); + + /** + * @dev Emitted when the allowance of a `spender` for an `owner` is set by + * a call to {approve}. `value` is the new allowance. + */ + event Approval(address indexed owner, address indexed spender, uint256 value); + + /** + * @dev Returns the amount of tokens in existence. + */ + function totalSupply() external view returns (uint256); + + /** + * @dev Returns the amount of tokens owned by `account`. + */ + function balanceOf(address account) external view returns (uint256); + + /** + * @dev Moves `amount` tokens from the caller's account to `to`. + * + * Returns a boolean value indicating whether the operation succeeded. + * + * Emits a {Transfer} event. + */ + function transfer(address to, uint256 amount) external returns (bool); + + /** + * @dev Returns the remaining number of tokens that `spender` will be + * allowed to spend on behalf of `owner` through {transferFrom}. This is + * zero by default. + * + * This value changes when {approve} or {transferFrom} are called. + */ + function allowance(address owner, address spender) external view returns (uint256); + + /** + * @dev Sets `amount` as the allowance of `spender` over the caller's tokens. + * + * Returns a boolean value indicating whether the operation succeeded. + * + * IMPORTANT: Beware that changing an allowance with this method brings the risk + * that someone may use both the old and the new allowance by unfortunate + * transaction ordering. One possible solution to mitigate this race + * condition is to first reduce the spender's allowance to 0 and set the + * desired value afterwards: + * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 + * + * Emits an {Approval} event. + */ + function approve(address spender, uint256 amount) external returns (bool); + + /** + * @dev Moves `amount` tokens from `from` to `to` using the + * allowance mechanism. `amount` is then deducted from the caller's + * allowance. + * + * Returns a boolean value indicating whether the operation succeeded. + * + * Emits a {Transfer} event. + */ + function transferFrom( + address from, + address to, + uint256 amount + ) external returns (bool); +} + +// OpenZeppelin Contracts v4.4.1 (token/ERC20/extensions/IERC20Metadata.sol) + +/** + * @dev Interface for the optional metadata functions from the ERC20 standard. + * + * _Available since v4.1._ + */ +interface IERC20Metadata is IERC20 { + /** + * @dev Returns the name of the token. + */ + function name() external view returns (string memory); + + /** + * @dev Returns the symbol of the token. + */ + function symbol() external view returns (string memory); + + /** + * @dev Returns the decimals places of the token. + */ + function decimals() external view returns (uint8); +} + +// OpenZeppelin Contracts v4.4.1 (utils/Context.sol) + +/** + * @dev Provides information about the current execution context, including the + * sender of the transaction and its data. While these are generally available + * via msg.sender and msg.data, they should not be accessed in such a direct + * manner, since when dealing with meta-transactions the account sending and + * paying for execution may not be the actual sender (as far as an application + * is concerned). + * + * This contract is only required for intermediate, library-like contracts. + */ +abstract contract Context { + function _msgSender() internal view virtual returns (address) { + return msg.sender; + } + + function _msgData() internal view virtual returns (bytes calldata) { + return msg.data; + } +} + +/** + * @dev Implementation of the {IERC20} interface. + * + * This implementation is agnostic to the way tokens are created. This means + * that a supply mechanism has to be added in a derived contract using {_mint}. + * For a generic mechanism see {ERC20PresetMinterPauser}. + * + * TIP: For a detailed writeup see our guide + * https://forum.openzeppelin.com/t/how-to-implement-erc20-supply-mechanisms/226[How + * to implement supply mechanisms]. + * + * We have followed general OpenZeppelin Contracts guidelines: functions revert + * instead returning `false` on failure. This behavior is nonetheless + * conventional and does not conflict with the expectations of ERC20 + * applications. + * + * Additionally, an {Approval} event is emitted on calls to {transferFrom}. + * This allows applications to reconstruct the allowance for all accounts just + * by listening to said events. Other implementations of the EIP may not emit + * these events, as it isn't required by the specification. + * + * Finally, the non-standard {decreaseAllowance} and {increaseAllowance} + * functions have been added to mitigate the well-known issues around setting + * allowances. See {IERC20-approve}. + */ +contract ERC20 is Context, IERC20, IERC20Metadata { + mapping(address => uint256) private _balances; + + mapping(address => mapping(address => uint256)) private _allowances; + + uint256 private _totalSupply; + + string private _name; + string private _symbol; + + /** + * @dev Sets the values for {name} and {symbol}. + * + * The default value of {decimals} is 18. To select a different value for + * {decimals} you should overload it. + * + * All two of these values are immutable: they can only be set once during + * construction. + */ + constructor(string memory name_, string memory symbol_) { + _name = name_; + _symbol = symbol_; + } + + /** + * @dev Returns the name of the token. + */ + function name() public view virtual override returns (string memory) { + return _name; + } + + /** + * @dev Returns the symbol of the token, usually a shorter version of the + * name. + */ + function symbol() public view virtual override returns (string memory) { + return _symbol; + } + + /** + * @dev Returns the number of decimals used to get its user representation. + * For example, if `decimals` equals `2`, a balance of `505` tokens should + * be displayed to a user as `5.05` (`505 / 10 ** 2`). + * + * Tokens usually opt for a value of 18, imitating the relationship between + * Ether and Wei. This is the value {ERC20} uses, unless this function is + * overridden; + * + * NOTE: This information is only used for _display_ purposes: it in + * no way affects any of the arithmetic of the contract, including + * {IERC20-balanceOf} and {IERC20-transfer}. + */ + function decimals() public view virtual override returns (uint8) { + return 18; + } + + /** + * @dev See {IERC20-totalSupply}. + */ + function totalSupply() public view virtual override returns (uint256) { + return _totalSupply; + } + + /** + * @dev See {IERC20-balanceOf}. + */ + function balanceOf(address account) public view virtual override returns (uint256) { + return _balances[account]; + } + + /** + * @dev See {IERC20-transfer}. + * + * Requirements: + * + * - `to` cannot be the zero address. + * - the caller must have a balance of at least `amount`. + */ + function transfer(address to, uint256 amount) public virtual override returns (bool) { + address owner = _msgSender(); + _transfer(owner, to, amount); + return true; + } + + /** + * @dev See {IERC20-allowance}. + */ + function allowance(address owner, address spender) public view virtual override returns (uint256) { + return _allowances[owner][spender]; + } + + /** + * @dev See {IERC20-approve}. + * + * NOTE: If `amount` is the maximum `uint256`, the allowance is not updated on + * `transferFrom`. This is semantically equivalent to an infinite approval. + * + * Requirements: + * + * - `spender` cannot be the zero address. + */ + function approve(address spender, uint256 amount) public virtual override returns (bool) { + address owner = _msgSender(); + _approve(owner, spender, amount); + return true; + } + + /** + * @dev See {IERC20-transferFrom}. + * + * Emits an {Approval} event indicating the updated allowance. This is not + * required by the EIP. See the note at the beginning of {ERC20}. + * + * NOTE: Does not update the allowance if the current allowance + * is the maximum `uint256`. + * + * Requirements: + * + * - `from` and `to` cannot be the zero address. + * - `from` must have a balance of at least `amount`. + * - the caller must have allowance for ``from``'s tokens of at least + * `amount`. + */ + function transferFrom( + address from, + address to, + uint256 amount + ) public virtual override returns (bool) { + address spender = _msgSender(); + _spendAllowance(from, spender, amount); + _transfer(from, to, amount); + return true; + } + + /** + * @dev Atomically increases the allowance granted to `spender` by the caller. + * + * This is an alternative to {approve} that can be used as a mitigation for + * problems described in {IERC20-approve}. + * + * Emits an {Approval} event indicating the updated allowance. + * + * Requirements: + * + * - `spender` cannot be the zero address. + */ + function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) { + address owner = _msgSender(); + _approve(owner, spender, allowance(owner, spender) + addedValue); + return true; + } + + /** + * @dev Atomically decreases the allowance granted to `spender` by the caller. + * + * This is an alternative to {approve} that can be used as a mitigation for + * problems described in {IERC20-approve}. + * + * Emits an {Approval} event indicating the updated allowance. + * + * Requirements: + * + * - `spender` cannot be the zero address. + * - `spender` must have allowance for the caller of at least + * `subtractedValue`. + */ + function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) { + address owner = _msgSender(); + uint256 currentAllowance = allowance(owner, spender); + require(currentAllowance >= subtractedValue, "ERC20: decreased allowance below zero"); + unchecked { + _approve(owner, spender, currentAllowance - subtractedValue); + } + + return true; + } + + /** + * @dev Moves `amount` of tokens from `from` to `to`. + * + * This internal function is equivalent to {transfer}, and can be used to + * e.g. implement automatic token fees, slashing mechanisms, etc. + * + * Emits a {Transfer} event. + * + * Requirements: + * + * - `from` cannot be the zero address. + * - `to` cannot be the zero address. + * - `from` must have a balance of at least `amount`. + */ + function _transfer( + address from, + address to, + uint256 amount + ) internal virtual { + require(from != address(0), "ERC20: transfer from the zero address"); + require(to != address(0), "ERC20: transfer to the zero address"); + + _beforeTokenTransfer(from, to, amount); + + uint256 fromBalance = _balances[from]; + require(fromBalance >= amount, "ERC20: transfer amount exceeds balance"); + unchecked { + _balances[from] = fromBalance - amount; + // Overflow not possible: the sum of all balances is capped by totalSupply, and the sum is preserved by + // decrementing then incrementing. + _balances[to] += amount; + } + + emit Transfer(from, to, amount); + + _afterTokenTransfer(from, to, amount); + } + + /** @dev Creates `amount` tokens and assigns them to `account`, increasing + * the total supply. + * + * Emits a {Transfer} event with `from` set to the zero address. + * + * Requirements: + * + * - `account` cannot be the zero address. + */ + function _mint(address account, uint256 amount) internal virtual { + require(account != address(0), "ERC20: mint to the zero address"); + + _beforeTokenTransfer(address(0), account, amount); + + _totalSupply += amount; + unchecked { + // Overflow not possible: balance + amount is at most totalSupply + amount, which is checked above. + _balances[account] += amount; + } + emit Transfer(address(0), account, amount); + + _afterTokenTransfer(address(0), account, amount); + } + + /** + * @dev Destroys `amount` tokens from `account`, reducing the + * total supply. + * + * Emits a {Transfer} event with `to` set to the zero address. + * + * Requirements: + * + * - `account` cannot be the zero address. + * - `account` must have at least `amount` tokens. + */ + function _burn(address account, uint256 amount) internal virtual { + require(account != address(0), "ERC20: burn from the zero address"); + + _beforeTokenTransfer(account, address(0), amount); + + uint256 accountBalance = _balances[account]; + require(accountBalance >= amount, "ERC20: burn amount exceeds balance"); + unchecked { + _balances[account] = accountBalance - amount; + // Overflow not possible: amount <= accountBalance <= totalSupply. + _totalSupply -= amount; + } + + emit Transfer(account, address(0), amount); + + _afterTokenTransfer(account, address(0), amount); + } + + /** + * @dev Sets `amount` as the allowance of `spender` over the `owner` s tokens. + * + * This internal function is equivalent to `approve`, and can be used to + * e.g. set automatic allowances for certain subsystems, etc. + * + * Emits an {Approval} event. + * + * Requirements: + * + * - `owner` cannot be the zero address. + * - `spender` cannot be the zero address. + */ + function _approve( + address owner, + address spender, + uint256 amount + ) internal virtual { + require(owner != address(0), "ERC20: approve from the zero address"); + require(spender != address(0), "ERC20: approve to the zero address"); + + _allowances[owner][spender] = amount; + emit Approval(owner, spender, amount); + } + + /** + * @dev Updates `owner` s allowance for `spender` based on spent `amount`. + * + * Does not update the allowance amount in case of infinite allowance. + * Revert if not enough allowance is available. + * + * Might emit an {Approval} event. + */ + function _spendAllowance( + address owner, + address spender, + uint256 amount + ) internal virtual { + uint256 currentAllowance = allowance(owner, spender); + if (currentAllowance != type(uint256).max) { + require(currentAllowance >= amount, "ERC20: insufficient allowance"); + unchecked { + _approve(owner, spender, currentAllowance - amount); + } + } + } + + /** + * @dev Hook that is called before any transfer of tokens. This includes + * minting and burning. + * + * Calling conditions: + * + * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens + * will be transferred to `to`. + * - when `from` is zero, `amount` tokens will be minted for `to`. + * - when `to` is zero, `amount` of ``from``'s tokens will be burned. + * - `from` and `to` are never both zero. + * + * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. + */ + function _beforeTokenTransfer( + address from, + address to, + uint256 amount + ) internal virtual {} + + /** + * @dev Hook that is called after any transfer of tokens. This includes + * minting and burning. + * + * Calling conditions: + * + * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens + * has been transferred to `to`. + * - when `from` is zero, `amount` tokens have been minted for `to`. + * - when `to` is zero, `amount` of ``from``'s tokens have been burned. + * - `from` and `to` are never both zero. + * + * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. + */ + function _afterTokenTransfer( + address from, + address to, + uint256 amount + ) internal virtual {} +} + +// OpenZeppelin Contracts (last updated v4.6.0) (token/ERC20/extensions/draft-ERC20Permit.sol) + +// OpenZeppelin Contracts v4.4.1 (token/ERC20/extensions/draft-IERC20Permit.sol) + +/** + * @dev Interface of the ERC20 Permit extension allowing approvals to be made via signatures, as defined in + * https://eips.ethereum.org/EIPS/eip-2612[EIP-2612]. + * + * Adds the {permit} method, which can be used to change an account's ERC20 allowance (see {IERC20-allowance}) by + * presenting a message signed by the account. By not relying on {IERC20-approve}, the token holder account doesn't + * need to send a transaction, and thus is not required to hold Ether at all. + */ +interface IERC20Permit { + /** + * @dev Sets `value` as the allowance of `spender` over ``owner``'s tokens, + * given ``owner``'s signed approval. + * + * IMPORTANT: The same issues {IERC20-approve} has related to transaction + * ordering also apply here. + * + * Emits an {Approval} event. + * + * Requirements: + * + * - `spender` cannot be the zero address. + * - `deadline` must be a timestamp in the future. + * - `v`, `r` and `s` must be a valid `secp256k1` signature from `owner` + * over the EIP712-formatted function arguments. + * - the signature must use ``owner``'s current nonce (see {nonces}). + * + * For more information on the signature format, see the + * https://eips.ethereum.org/EIPS/eip-2612#specification[relevant EIP + * section]. + */ + function permit( + address owner, + address spender, + uint256 value, + uint256 deadline, + uint8 v, + bytes32 r, + bytes32 s + ) external; + + /** + * @dev Returns the current nonce for `owner`. This value must be + * included whenever a signature is generated for {permit}. + * + * Every successful call to {permit} increases ``owner``'s nonce by one. This + * prevents a signature from being used multiple times. + */ + function nonces(address owner) external view returns (uint256); + + /** + * @dev Returns the domain separator used in the encoding of the signature for {permit}, as defined by {EIP712}. + */ + // solhint-disable-next-line func-name-mixedcase + function DOMAIN_SEPARATOR() external view returns (bytes32); +} + +// OpenZeppelin Contracts (last updated v4.7.0) (utils/cryptography/ECDSA.sol) + +// OpenZeppelin Contracts (last updated v4.7.0) (utils/Strings.sol) + +// OpenZeppelin Contracts (last updated v4.7.0) (utils/math/Math.sol) + +/** + * @dev Standard math utilities missing in the Solidity language. + */ +library Math { + enum Rounding { + Down, // Toward negative infinity + Up, // Toward infinity + Zero // Toward zero + } + + /** + * @dev Returns the largest of two numbers. + */ + function max(uint256 a, uint256 b) internal pure returns (uint256) { + return a > b ? a : b; + } + + /** + * @dev Returns the smallest of two numbers. + */ + function min(uint256 a, uint256 b) internal pure returns (uint256) { + return a < b ? a : b; + } + + /** + * @dev Returns the average of two numbers. The result is rounded towards + * zero. + */ + function average(uint256 a, uint256 b) internal pure returns (uint256) { + // (a + b) / 2 can overflow. + return (a & b) + (a ^ b) / 2; + } + + /** + * @dev Returns the ceiling of the division of two numbers. + * + * This differs from standard division with `/` in that it rounds up instead + * of rounding down. + */ + function ceilDiv(uint256 a, uint256 b) internal pure returns (uint256) { + // (a + b - 1) / b can overflow on addition, so we distribute. + return a == 0 ? 0 : (a - 1) / b + 1; + } + + /** + * @notice Calculates floor(x * y / denominator) with full precision. Throws if result overflows a uint256 or denominator == 0 + * @dev Original credit to Remco Bloemen under MIT license (https://xn--2-umb.com/21/muldiv) + * with further edits by Uniswap Labs also under MIT license. + */ + function mulDiv( + uint256 x, + uint256 y, + uint256 denominator + ) internal pure returns (uint256 result) { + unchecked { + // 512-bit multiply [prod1 prod0] = x * y. Compute the product mod 2^256 and mod 2^256 - 1, then use + // use the Chinese Remainder Theorem to reconstruct the 512 bit result. The result is stored in two 256 + // variables such that product = prod1 * 2^256 + prod0. + uint256 prod0; // Least significant 256 bits of the product + uint256 prod1; // Most significant 256 bits of the product + assembly { + let mm := mulmod(x, y, not(0)) + prod0 := mul(x, y) + prod1 := sub(sub(mm, prod0), lt(mm, prod0)) + } + + // Handle non-overflow cases, 256 by 256 division. + if (prod1 == 0) { + return prod0 / denominator; + } + + // Make sure the result is less than 2^256. Also prevents denominator == 0. + require(denominator > prod1); + + /////////////////////////////////////////////// + // 512 by 256 division. + /////////////////////////////////////////////// + + // Make division exact by subtracting the remainder from [prod1 prod0]. + uint256 remainder; + assembly { + // Compute remainder using mulmod. + remainder := mulmod(x, y, denominator) + + // Subtract 256 bit number from 512 bit number. + prod1 := sub(prod1, gt(remainder, prod0)) + prod0 := sub(prod0, remainder) + } + + // Factor powers of two out of denominator and compute largest power of two divisor of denominator. Always >= 1. + // See https://cs.stackexchange.com/q/138556/92363. + + // Does not overflow because the denominator cannot be zero at this stage in the function. + uint256 twos = denominator & (~denominator + 1); + assembly { + // Divide denominator by twos. + denominator := div(denominator, twos) + + // Divide [prod1 prod0] by twos. + prod0 := div(prod0, twos) + + // Flip twos such that it is 2^256 / twos. If twos is zero, then it becomes one. + twos := add(div(sub(0, twos), twos), 1) + } + + // Shift in bits from prod1 into prod0. + prod0 |= prod1 * twos; + + // Invert denominator mod 2^256. Now that denominator is an odd number, it has an inverse modulo 2^256 such + // that denominator * inv = 1 mod 2^256. Compute the inverse by starting with a seed that is correct for + // four bits. That is, denominator * inv = 1 mod 2^4. + uint256 inverse = (3 * denominator) ^ 2; + + // Use the Newton-Raphson iteration to improve the precision. Thanks to Hensel's lifting lemma, this also works + // in modular arithmetic, doubling the correct bits in each step. + inverse *= 2 - denominator * inverse; // inverse mod 2^8 + inverse *= 2 - denominator * inverse; // inverse mod 2^16 + inverse *= 2 - denominator * inverse; // inverse mod 2^32 + inverse *= 2 - denominator * inverse; // inverse mod 2^64 + inverse *= 2 - denominator * inverse; // inverse mod 2^128 + inverse *= 2 - denominator * inverse; // inverse mod 2^256 + + // Because the division is now exact we can divide by multiplying with the modular inverse of denominator. + // This will give us the correct result modulo 2^256. Since the preconditions guarantee that the outcome is + // less than 2^256, this is the final result. We don't need to compute the high bits of the result and prod1 + // is no longer required. + result = prod0 * inverse; + return result; + } + } + + /** + * @notice Calculates x * y / denominator with full precision, following the selected rounding direction. + */ + function mulDiv( + uint256 x, + uint256 y, + uint256 denominator, + Rounding rounding + ) internal pure returns (uint256) { + uint256 result = mulDiv(x, y, denominator); + if (rounding == Rounding.Up && mulmod(x, y, denominator) > 0) { + result += 1; + } + return result; + } + + /** + * @dev Returns the square root of a number. If the number is not a perfect square, the value is rounded down. + * + * Inspired by Henry S. Warren, Jr.'s "Hacker's Delight" (Chapter 11). + */ + function sqrt(uint256 a) internal pure returns (uint256) { + if (a == 0) { + return 0; + } + + // For our first guess, we get the biggest power of 2 which is smaller than the square root of the target. + // + // We know that the "msb" (most significant bit) of our target number `a` is a power of 2 such that we have + // `msb(a) <= a < 2*msb(a)`. This value can be written `msb(a)=2**k` with `k=log2(a)`. + // + // This can be rewritten `2**log2(a) <= a < 2**(log2(a) + 1)` + // → `sqrt(2**k) <= sqrt(a) < sqrt(2**(k+1))` + // → `2**(k/2) <= sqrt(a) < 2**((k+1)/2) <= 2**(k/2 + 1)` + // + // Consequently, `2**(log2(a) / 2)` is a good first approximation of `sqrt(a)` with at least 1 correct bit. + uint256 result = 1 << (log2(a) >> 1); + + // At this point `result` is an estimation with one bit of precision. We know the true value is a uint128, + // since it is the square root of a uint256. Newton's method converges quadratically (precision doubles at + // every iteration). We thus need at most 7 iteration to turn our partial result with one bit of precision + // into the expected uint128 result. + unchecked { + result = (result + a / result) >> 1; + result = (result + a / result) >> 1; + result = (result + a / result) >> 1; + result = (result + a / result) >> 1; + result = (result + a / result) >> 1; + result = (result + a / result) >> 1; + result = (result + a / result) >> 1; + return min(result, a / result); + } + } + + /** + * @notice Calculates sqrt(a), following the selected rounding direction. + */ + function sqrt(uint256 a, Rounding rounding) internal pure returns (uint256) { + unchecked { + uint256 result = sqrt(a); + return result + (rounding == Rounding.Up && result * result < a ? 1 : 0); + } + } + + /** + * @dev Return the log in base 2, rounded down, of a positive value. + * Returns 0 if given 0. + */ + function log2(uint256 value) internal pure returns (uint256) { + uint256 result = 0; + unchecked { + if (value >> 128 > 0) { + value >>= 128; + result += 128; + } + if (value >> 64 > 0) { + value >>= 64; + result += 64; + } + if (value >> 32 > 0) { + value >>= 32; + result += 32; + } + if (value >> 16 > 0) { + value >>= 16; + result += 16; + } + if (value >> 8 > 0) { + value >>= 8; + result += 8; + } + if (value >> 4 > 0) { + value >>= 4; + result += 4; + } + if (value >> 2 > 0) { + value >>= 2; + result += 2; + } + if (value >> 1 > 0) { + result += 1; + } + } + return result; + } + + /** + * @dev Return the log in base 2, following the selected rounding direction, of a positive value. + * Returns 0 if given 0. + */ + function log2(uint256 value, Rounding rounding) internal pure returns (uint256) { + unchecked { + uint256 result = log2(value); + return result + (rounding == Rounding.Up && 1 << result < value ? 1 : 0); + } + } + + /** + * @dev Return the log in base 10, rounded down, of a positive value. + * Returns 0 if given 0. + */ + function log10(uint256 value) internal pure returns (uint256) { + uint256 result = 0; + unchecked { + if (value >= 10**64) { + value /= 10**64; + result += 64; + } + if (value >= 10**32) { + value /= 10**32; + result += 32; + } + if (value >= 10**16) { + value /= 10**16; + result += 16; + } + if (value >= 10**8) { + value /= 10**8; + result += 8; + } + if (value >= 10**4) { + value /= 10**4; + result += 4; + } + if (value >= 10**2) { + value /= 10**2; + result += 2; + } + if (value >= 10**1) { + result += 1; + } + } + return result; + } + + /** + * @dev Return the log in base 10, following the selected rounding direction, of a positive value. + * Returns 0 if given 0. + */ + function log10(uint256 value, Rounding rounding) internal pure returns (uint256) { + unchecked { + uint256 result = log10(value); + return result + (rounding == Rounding.Up && 10**result < value ? 1 : 0); + } + } + + /** + * @dev Return the log in base 256, rounded down, of a positive value. + * Returns 0 if given 0. + * + * Adding one to the result gives the number of pairs of hex symbols needed to represent `value` as a hex string. + */ + function log256(uint256 value) internal pure returns (uint256) { + uint256 result = 0; + unchecked { + if (value >> 128 > 0) { + value >>= 128; + result += 16; + } + if (value >> 64 > 0) { + value >>= 64; + result += 8; + } + if (value >> 32 > 0) { + value >>= 32; + result += 4; + } + if (value >> 16 > 0) { + value >>= 16; + result += 2; + } + if (value >> 8 > 0) { + result += 1; + } + } + return result; + } + + /** + * @dev Return the log in base 10, following the selected rounding direction, of a positive value. + * Returns 0 if given 0. + */ + function log256(uint256 value, Rounding rounding) internal pure returns (uint256) { + unchecked { + uint256 result = log256(value); + return result + (rounding == Rounding.Up && 1 << (result << 3) < value ? 1 : 0); + } + } +} + +/** + * @dev String operations. + */ +library Strings { + bytes16 private constant _SYMBOLS = "0123456789abcdef"; + uint8 private constant _ADDRESS_LENGTH = 20; + + /** + * @dev Converts a `uint256` to its ASCII `string` decimal representation. + */ + function toString(uint256 value) internal pure returns (string memory) { + unchecked { + uint256 length = Math.log10(value) + 1; + string memory buffer = new string(length); + uint256 ptr; + /// @solidity memory-safe-assembly + assembly { + ptr := add(buffer, add(32, length)) + } + while (true) { + ptr--; + /// @solidity memory-safe-assembly + assembly { + mstore8(ptr, byte(mod(value, 10), _SYMBOLS)) + } + value /= 10; + if (value == 0) break; + } + return buffer; + } + } + + /** + * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation. + */ + function toHexString(uint256 value) internal pure returns (string memory) { + unchecked { + return toHexString(value, Math.log256(value) + 1); + } + } + + /** + * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length. + */ + function toHexString(uint256 value, uint256 length) internal pure returns (string memory) { + bytes memory buffer = new bytes(2 * length + 2); + buffer[0] = "0"; + buffer[1] = "x"; + for (uint256 i = 2 * length + 1; i > 1; --i) { + buffer[i] = _SYMBOLS[value & 0xf]; + value >>= 4; + } + require(value == 0, "Strings: hex length insufficient"); + return string(buffer); + } + + /** + * @dev Converts an `address` with fixed length of 20 bytes to its not checksummed ASCII `string` hexadecimal representation. + */ + function toHexString(address addr) internal pure returns (string memory) { + return toHexString(uint256(uint160(addr)), _ADDRESS_LENGTH); + } +} + +/** + * @dev Elliptic Curve Digital Signature Algorithm (ECDSA) operations. + * + * These functions can be used to verify that a message was signed by the holder + * of the private keys of a given address. + */ +library ECDSA { + enum RecoverError { + NoError, + InvalidSignature, + InvalidSignatureLength, + InvalidSignatureS, + InvalidSignatureV // Deprecated in v4.8 + } + + function _throwError(RecoverError error) private pure { + if (error == RecoverError.NoError) { + return; // no error: do nothing + } else if (error == RecoverError.InvalidSignature) { + revert("ECDSA: invalid signature"); + } else if (error == RecoverError.InvalidSignatureLength) { + revert("ECDSA: invalid signature length"); + } else if (error == RecoverError.InvalidSignatureS) { + revert("ECDSA: invalid signature 's' value"); + } + } + + /** + * @dev Returns the address that signed a hashed message (`hash`) with + * `signature` or error string. This address can then be used for verification purposes. + * + * The `ecrecover` EVM opcode allows for malleable (non-unique) signatures: + * this function rejects them by requiring the `s` value to be in the lower + * half order, and the `v` value to be either 27 or 28. + * + * IMPORTANT: `hash` _must_ be the result of a hash operation for the + * verification to be secure: it is possible to craft signatures that + * recover to arbitrary addresses for non-hashed data. A safe way to ensure + * this is by receiving a hash of the original message (which may otherwise + * be too long), and then calling {toEthSignedMessageHash} on it. + * + * Documentation for signature generation: + * - with https://web3js.readthedocs.io/en/v1.3.4/web3-eth-accounts.html#sign[Web3.js] + * - with https://docs.ethers.io/v5/api/signer/#Signer-signMessage[ethers] + * + * _Available since v4.3._ + */ + function tryRecover(bytes32 hash, bytes memory signature) internal pure returns (address, RecoverError) { + if (signature.length == 65) { + bytes32 r; + bytes32 s; + uint8 v; + // ecrecover takes the signature parameters, and the only way to get them + // currently is to use assembly. + /// @solidity memory-safe-assembly + assembly { + r := mload(add(signature, 0x20)) + s := mload(add(signature, 0x40)) + v := byte(0, mload(add(signature, 0x60))) + } + return tryRecover(hash, v, r, s); + } else { + return (address(0), RecoverError.InvalidSignatureLength); + } + } + + /** + * @dev Returns the address that signed a hashed message (`hash`) with + * `signature`. This address can then be used for verification purposes. + * + * The `ecrecover` EVM opcode allows for malleable (non-unique) signatures: + * this function rejects them by requiring the `s` value to be in the lower + * half order, and the `v` value to be either 27 or 28. + * + * IMPORTANT: `hash` _must_ be the result of a hash operation for the + * verification to be secure: it is possible to craft signatures that + * recover to arbitrary addresses for non-hashed data. A safe way to ensure + * this is by receiving a hash of the original message (which may otherwise + * be too long), and then calling {toEthSignedMessageHash} on it. + */ + function recover(bytes32 hash, bytes memory signature) internal pure returns (address) { + (address recovered, RecoverError error) = tryRecover(hash, signature); + _throwError(error); + return recovered; + } + + /** + * @dev Overload of {ECDSA-tryRecover} that receives the `r` and `vs` short-signature fields separately. + * + * See https://eips.ethereum.org/EIPS/eip-2098[EIP-2098 short signatures] + * + * _Available since v4.3._ + */ + function tryRecover( + bytes32 hash, + bytes32 r, + bytes32 vs + ) internal pure returns (address, RecoverError) { + bytes32 s = vs & bytes32(0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff); + uint8 v = uint8((uint256(vs) >> 255) + 27); + return tryRecover(hash, v, r, s); + } + + /** + * @dev Overload of {ECDSA-recover} that receives the `r and `vs` short-signature fields separately. + * + * _Available since v4.2._ + */ + function recover( + bytes32 hash, + bytes32 r, + bytes32 vs + ) internal pure returns (address) { + (address recovered, RecoverError error) = tryRecover(hash, r, vs); + _throwError(error); + return recovered; + } + + /** + * @dev Overload of {ECDSA-tryRecover} that receives the `v`, + * `r` and `s` signature fields separately. + * + * _Available since v4.3._ + */ + function tryRecover( + bytes32 hash, + uint8 v, + bytes32 r, + bytes32 s + ) internal pure returns (address, RecoverError) { + // EIP-2 still allows signature malleability for ecrecover(). Remove this possibility and make the signature + // unique. Appendix F in the Ethereum Yellow paper (https://ethereum.github.io/yellowpaper/paper.pdf), defines + // the valid range for s in (301): 0 < s < secp256k1n ÷ 2 + 1, and for v in (302): v ∈ {27, 28}. Most + // signatures from current libraries generate a unique signature with an s-value in the lower half order. + // + // If your library generates malleable signatures, such as s-values in the upper range, calculate a new s-value + // with 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBAAEDCE6AF48A03BBFD25E8CD0364141 - s1 and flip v from 27 to 28 or + // vice versa. If your library also generates signatures with 0/1 for v instead 27/28, add 27 to v to accept + // these malleable signatures as well. + if (uint256(s) > 0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5D576E7357A4501DDFE92F46681B20A0) { + return (address(0), RecoverError.InvalidSignatureS); + } + + // If the signature is valid (and not malleable), return the signer address + address signer = ecrecover(hash, v, r, s); + if (signer == address(0)) { + return (address(0), RecoverError.InvalidSignature); + } + + return (signer, RecoverError.NoError); + } + + /** + * @dev Overload of {ECDSA-recover} that receives the `v`, + * `r` and `s` signature fields separately. + */ + function recover( + bytes32 hash, + uint8 v, + bytes32 r, + bytes32 s + ) internal pure returns (address) { + (address recovered, RecoverError error) = tryRecover(hash, v, r, s); + _throwError(error); + return recovered; + } + + /** + * @dev Returns an Ethereum Signed Message, created from a `hash`. This + * produces hash corresponding to the one signed with the + * https://eth.wiki/json-rpc/API#eth_sign[`eth_sign`] + * JSON-RPC method as part of EIP-191. + * + * See {recover}. + */ + function toEthSignedMessageHash(bytes32 hash) internal pure returns (bytes32) { + // 32 is the length in bytes of hash, + // enforced by the type signature above + return keccak256(abi.encodePacked("\x19Ethereum Signed Message:\n32", hash)); + } + + /** + * @dev Returns an Ethereum Signed Message, created from `s`. This + * produces hash corresponding to the one signed with the + * https://eth.wiki/json-rpc/API#eth_sign[`eth_sign`] + * JSON-RPC method as part of EIP-191. + * + * See {recover}. + */ + function toEthSignedMessageHash(bytes memory s) internal pure returns (bytes32) { + return keccak256(abi.encodePacked("\x19Ethereum Signed Message:\n", Strings.toString(s.length), s)); + } + + /** + * @dev Returns an Ethereum Signed Typed Data, created from a + * `domainSeparator` and a `structHash`. This produces hash corresponding + * to the one signed with the + * https://eips.ethereum.org/EIPS/eip-712[`eth_signTypedData`] + * JSON-RPC method as part of EIP-712. + * + * See {recover}. + */ + function toTypedDataHash(bytes32 domainSeparator, bytes32 structHash) internal pure returns (bytes32) { + return keccak256(abi.encodePacked("\x19\x01", domainSeparator, structHash)); + } +} + +/** + * @dev https://eips.ethereum.org/EIPS/eip-712[EIP 712] is a standard for hashing and signing of typed structured data. + * + * The encoding specified in the EIP is very generic, and such a generic implementation in Solidity is not feasible, + * thus this contract does not implement the encoding itself. Protocols need to implement the type-specific encoding + * they need in their contracts using a combination of `abi.encode` and `keccak256`. + * + * This contract implements the EIP 712 domain separator ({_domainSeparatorV4}) that is used as part of the encoding + * scheme, and the final step of the encoding to obtain the message digest that is then signed via ECDSA + * ({_hashTypedDataV4}). + * + * The implementation of the domain separator was designed to be as efficient as possible while still properly updating + * the chain id to protect against replay attacks on an eventual fork of the chain. + * + * NOTE: This contract implements the version of the encoding known as "v4", as implemented by the JSON RPC method + * https://docs.metamask.io/guide/signing-data.html[`eth_signTypedDataV4` in MetaMask]. + * + * _Available since v3.4._ + */ +abstract contract EIP712 { + /* solhint-disable var-name-mixedcase */ + // Cache the domain separator as an immutable value, but also store the chain id that it corresponds to, in order to + // invalidate the cached domain separator if the chain id changes. + bytes32 private immutable _CACHED_DOMAIN_SEPARATOR; + uint256 private immutable _CACHED_CHAIN_ID; + address private immutable _CACHED_THIS; + + bytes32 private immutable _HASHED_NAME; + bytes32 private immutable _HASHED_VERSION; + bytes32 private immutable _TYPE_HASH; + + /* solhint-enable var-name-mixedcase */ + + /** + * @dev Initializes the domain separator and parameter caches. + * + * The meaning of `name` and `version` is specified in + * https://eips.ethereum.org/EIPS/eip-712#definition-of-domainseparator[EIP 712]: + * + * - `name`: the user readable name of the signing domain, i.e. the name of the DApp or the protocol. + * - `version`: the current major version of the signing domain. + * + * NOTE: These parameters cannot be changed except through a xref:learn::upgrading-smart-contracts.adoc[smart + * contract upgrade]. + */ + constructor(string memory name, string memory version) { + bytes32 hashedName = keccak256(bytes(name)); + bytes32 hashedVersion = keccak256(bytes(version)); + bytes32 typeHash = keccak256( + "EIP712Domain(string name,string version,uint256 chainId,address verifyingContract)" + ); + _HASHED_NAME = hashedName; + _HASHED_VERSION = hashedVersion; + _CACHED_CHAIN_ID = block.chainid; + _CACHED_DOMAIN_SEPARATOR = _buildDomainSeparator(typeHash, hashedName, hashedVersion); + _CACHED_THIS = address(this); + _TYPE_HASH = typeHash; + } + + /** + * @dev Returns the domain separator for the current chain. + */ + function _domainSeparatorV4() internal view returns (bytes32) { + if (address(this) == _CACHED_THIS && block.chainid == _CACHED_CHAIN_ID) { + return _CACHED_DOMAIN_SEPARATOR; + } else { + return _buildDomainSeparator(_TYPE_HASH, _HASHED_NAME, _HASHED_VERSION); + } + } + + function _buildDomainSeparator( + bytes32 typeHash, + bytes32 nameHash, + bytes32 versionHash + ) private view returns (bytes32) { + return keccak256(abi.encode(typeHash, nameHash, versionHash, block.chainid, address(this))); + } + + /** + * @dev Given an already https://eips.ethereum.org/EIPS/eip-712#definition-of-hashstruct[hashed struct], this + * function returns the hash of the fully encoded EIP712 message for this domain. + * + * This hash can be used together with {ECDSA-recover} to obtain the signer of a message. For example: + * + * ```solidity + * bytes32 digest = _hashTypedDataV4(keccak256(abi.encode( + * keccak256("Mail(address to,string contents)"), + * mailTo, + * keccak256(bytes(mailContents)) + * ))); + * address signer = ECDSA.recover(digest, signature); + * ``` + */ + function _hashTypedDataV4(bytes32 structHash) internal view virtual returns (bytes32) { + return ECDSA.toTypedDataHash(_domainSeparatorV4(), structHash); + } +} + +// OpenZeppelin Contracts v4.4.1 (utils/Counters.sol) + +/** + * @title Counters + * @author Matt Condon (@shrugs) + * @dev Provides counters that can only be incremented, decremented or reset. This can be used e.g. to track the number + * of elements in a mapping, issuing ERC721 ids, or counting request ids. + * + * Include with `using Counters for Counters.Counter;` + */ +library Counters { + struct Counter { + // This variable should never be directly accessed by users of the library: interactions must be restricted to + // the library's function. As of Solidity v0.5.2, this cannot be enforced, though there is a proposal to add + // this feature: see https://github.com/ethereum/solidity/issues/4637 + uint256 _value; // default: 0 + } + + function current(Counter storage counter) internal view returns (uint256) { + return counter._value; + } + + function increment(Counter storage counter) internal { + unchecked { + counter._value += 1; + } + } + + function decrement(Counter storage counter) internal { + uint256 value = counter._value; + require(value > 0, "Counter: decrement overflow"); + unchecked { + counter._value = value - 1; + } + } + + function reset(Counter storage counter) internal { + counter._value = 0; + } +} + +/** + * @dev Implementation of the ERC20 Permit extension allowing approvals to be made via signatures, as defined in + * https://eips.ethereum.org/EIPS/eip-2612[EIP-2612]. + * + * Adds the {permit} method, which can be used to change an account's ERC20 allowance (see {IERC20-allowance}) by + * presenting a message signed by the account. By not relying on `{IERC20-approve}`, the token holder account doesn't + * need to send a transaction, and thus is not required to hold Ether at all. + * + * _Available since v3.4._ + */ +abstract contract ERC20Permit is ERC20, IERC20Permit, EIP712 { + using Counters for Counters.Counter; + + mapping(address => Counters.Counter) private _nonces; + + // solhint-disable-next-line var-name-mixedcase + bytes32 private constant _PERMIT_TYPEHASH = + keccak256("Permit(address owner,address spender,uint256 value,uint256 nonce,uint256 deadline)"); + /** + * @dev In previous versions `_PERMIT_TYPEHASH` was declared as `immutable`. + * However, to ensure consistency with the upgradeable transpiler, we will continue + * to reserve a slot. + * @custom:oz-renamed-from _PERMIT_TYPEHASH + */ + // solhint-disable-next-line var-name-mixedcase + bytes32 private _PERMIT_TYPEHASH_DEPRECATED_SLOT; + + /** + * @dev Initializes the {EIP712} domain separator using the `name` parameter, and setting `version` to `"1"`. + * + * It's a good idea to use the same `name` that is defined as the ERC20 token name. + */ + constructor(string memory name) EIP712(name, "1") {} + + /** + * @dev See {IERC20Permit-permit}. + */ + function permit( + address owner, + address spender, + uint256 value, + uint256 deadline, + uint8 v, + bytes32 r, + bytes32 s + ) public virtual override { + require(block.timestamp <= deadline, "ERC20Permit: expired deadline"); + + bytes32 structHash = keccak256(abi.encode(_PERMIT_TYPEHASH, owner, spender, value, _useNonce(owner), deadline)); + + bytes32 hash = _hashTypedDataV4(structHash); + + address signer = ECDSA.recover(hash, v, r, s); + require(signer == owner, "ERC20Permit: invalid signature"); + + _approve(owner, spender, value); + } + + /** + * @dev See {IERC20Permit-nonces}. + */ + function nonces(address owner) public view virtual override returns (uint256) { + return _nonces[owner].current(); + } + + /** + * @dev See {IERC20Permit-DOMAIN_SEPARATOR}. + */ + // solhint-disable-next-line func-name-mixedcase + function DOMAIN_SEPARATOR() external view override returns (bytes32) { + return _domainSeparatorV4(); + } + + /** + * @dev "Consume a nonce": return the current value and increment. + * + * _Available since v4.1._ + */ + function _useNonce(address owner) internal virtual returns (uint256 current) { + Counters.Counter storage nonce = _nonces[owner]; + current = nonce.current(); + nonce.increment(); + } +} + +// OpenZeppelin Contracts (last updated v4.5.0) (token/ERC20/extensions/ERC20Burnable.sol) + +/** + * @dev Extension of {ERC20} that allows token holders to destroy both their own + * tokens and those that they have an allowance for, in a way that can be + * recognized off-chain (via event analysis). + */ +abstract contract ERC20Burnable is Context, ERC20 { + /** + * @dev Destroys `amount` tokens from the caller. + * + * See {ERC20-_burn}. + */ + function burn(uint256 amount) public virtual { + _burn(_msgSender(), amount); + } + + /** + * @dev Destroys `amount` tokens from `account`, deducting from the caller's + * allowance. + * + * See {ERC20-_burn} and {ERC20-allowance}. + * + * Requirements: + * + * - the caller must have allowance for ``accounts``'s tokens of at least + * `amount`. + */ + function burnFrom(address account, uint256 amount) public virtual { + _spendAllowance(account, _msgSender(), amount); + _burn(account, amount); + } +} + +// https://docs.synthetix.io/contracts/Owned +// NO NEED TO AUDIT +contract Owned { + address public owner; + address public nominatedOwner; + + constructor (address _owner) { + require(_owner != address(0), "Owner address cannot be 0"); + owner = _owner; + emit OwnerChanged(address(0), _owner); + } + + function nominateNewOwner(address _owner) external onlyOwner { + nominatedOwner = _owner; + emit OwnerNominated(_owner); + } + + function acceptOwnership() external { + require(msg.sender == nominatedOwner, "You must be nominated before you can accept ownership"); + emit OwnerChanged(owner, nominatedOwner); + owner = nominatedOwner; + nominatedOwner = address(0); + } + + modifier onlyOwner { + require(msg.sender == owner, "Only the contract owner may perform this action"); + _; + } + + event OwnerNominated(address newOwner); + event OwnerChanged(address oldOwner, address newOwner); +} + +/// @title Parent contract for frxETH.sol +/** @notice Combines Openzeppelin's ERC20Permit and ERC20Burnable with Synthetix's Owned. + Also includes a list of authorized minters */ +/// @dev frxETH adheres to EIP-712/EIP-2612 and can use permits +contract ERC20PermitPermissionedMint is ERC20Permit, ERC20Burnable, Owned { + // Core + address public timelock_address; + + // Minters + address[] public minters_array; // Allowed to mint + mapping(address => bool) public minters; // Mapping is also used for faster verification + + /* ========== CONSTRUCTOR ========== */ + + constructor( + address _creator_address, + address _timelock_address, + string memory _name, + string memory _symbol + ) + ERC20(_name, _symbol) + ERC20Permit(_name) + Owned(_creator_address) + { + timelock_address = _timelock_address; + } + + /* ========== MODIFIERS ========== */ + + modifier onlyByOwnGov() { + require(msg.sender == timelock_address || msg.sender == owner, "Not owner or timelock"); + _; + } + + modifier onlyMinters() { + require(minters[msg.sender] == true, "Only minters"); + _; + } + + /* ========== RESTRICTED FUNCTIONS ========== */ + + // Used by minters when user redeems + function minter_burn_from(address b_address, uint256 b_amount) public onlyMinters { + super.burnFrom(b_address, b_amount); + emit TokenMinterBurned(b_address, msg.sender, b_amount); + } + + // This function is what other minters will call to mint new tokens + function minter_mint(address m_address, uint256 m_amount) public onlyMinters { + super._mint(m_address, m_amount); + emit TokenMinterMinted(msg.sender, m_address, m_amount); + } + + // Adds whitelisted minters + function addMinter(address minter_address) public onlyByOwnGov { + require(minter_address != address(0), "Zero address detected"); + + require(minters[minter_address] == false, "Address already exists"); + minters[minter_address] = true; + minters_array.push(minter_address); + + emit MinterAdded(minter_address); + } + + // Remove a minter + function removeMinter(address minter_address) public onlyByOwnGov { + require(minter_address != address(0), "Zero address detected"); + require(minters[minter_address] == true, "Address nonexistant"); + + // Delete from the mapping + delete minters[minter_address]; + + // 'Delete' from the array by setting the address to 0x0 + for (uint i = 0; i < minters_array.length; i++){ + if (minters_array[i] == minter_address) { + minters_array[i] = address(0); // This will leave a null in the array and keep the indices the same + break; + } + } + + emit MinterRemoved(minter_address); + } + + function setTimelock(address _timelock_address) public onlyByOwnGov { + require(_timelock_address != address(0), "Zero address detected"); + timelock_address = _timelock_address; + emit TimelockChanged(_timelock_address); + } + + /* ========== EVENTS ========== */ + + event TokenMinterBurned(address indexed from, address indexed to, uint256 amount); + event TokenMinterMinted(address indexed from, address indexed to, uint256 amount); + event MinterAdded(address minter_address); + event MinterRemoved(address minter_address); + event TimelockChanged(address timelock_address); +} + +contract frxETH is ERC20PermitPermissionedMint { + + /* ========== CONSTRUCTOR ========== */ + constructor( + address _creator_address, + address _timelock_address + ) + ERC20PermitPermissionedMint(_creator_address, _timelock_address, "Frax Ether", "frxETH") + {} + +} + +// Primarily added to prevent ERC20 name collisions in frxETHMinter.sol +interface IsfrxETH { + function DOMAIN_SEPARATOR() external view returns (bytes32); + function allowance(address, address) external view returns (uint256); + function approve(address spender, uint256 amount) external returns (bool); + function asset() external view returns (address); + function balanceOf(address) external view returns (uint256); + function convertToAssets(uint256 shares) external view returns (uint256); + function convertToShares(uint256 assets) external view returns (uint256); + function decimals() external view returns (uint8); + function deposit(uint256 assets, address receiver) external returns (uint256 shares); + function depositWithSignature(uint256 assets, address receiver, uint256 deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s) external returns (uint256 shares); + function lastRewardAmount() external view returns (uint192); + function lastSync() external view returns (uint32); + function maxDeposit(address) external view returns (uint256); + function maxMint(address) external view returns (uint256); + function maxRedeem(address owner) external view returns (uint256); + function maxWithdraw(address owner) external view returns (uint256); + function mint(uint256 shares, address receiver) external returns (uint256 assets); + function name() external view returns (string memory); + function nonces(address) external view returns (uint256); + function permit(address owner, address spender, uint256 value, uint256 deadline, uint8 v, bytes32 r, bytes32 s) external; + function previewDeposit(uint256 assets) external view returns (uint256); + function previewMint(uint256 shares) external view returns (uint256); + function previewRedeem(uint256 shares) external view returns (uint256); + function previewWithdraw(uint256 assets) external view returns (uint256); + function redeem(uint256 shares, address receiver, address owner) external returns (uint256 assets); + function rewardsCycleEnd() external view returns (uint32); + function rewardsCycleLength() external view returns (uint32); + function symbol() external view returns (string memory); + function syncRewards() external; + function totalAssets() external view returns (uint256); + function totalSupply() external view returns (uint256); + function transfer(address to, uint256 amount) external returns (bool); + function transferFrom(address from, address to, uint256 amount) external returns (bool); + function withdraw(uint256 assets, address receiver, address owner) external returns (uint256 shares); +} + +// OpenZeppelin Contracts v4.4.1 (security/ReentrancyGuard.sol) + +/** + * @dev Contract module that helps prevent reentrant calls to a function. + * + * Inheriting from `ReentrancyGuard` will make the {nonReentrant} modifier + * available, which can be applied to functions to make sure there are no nested + * (reentrant) calls to them. + * + * Note that because there is a single `nonReentrant` guard, functions marked as + * `nonReentrant` may not call one another. This can be worked around by making + * those functions `private`, and then adding `external` `nonReentrant` entry + * points to them. + * + * TIP: If you would like to learn more about reentrancy and alternative ways + * to protect against it, check out our blog post + * https://blog.openzeppelin.com/reentrancy-after-istanbul/[Reentrancy After Istanbul]. + */ +abstract contract ReentrancyGuard { + // Booleans are more expensive than uint256 or any type that takes up a full + // word because each write operation emits an extra SLOAD to first read the + // slot's contents, replace the bits taken up by the boolean, and then write + // back. This is the compiler's defense against contract upgrades and + // pointer aliasing, and it cannot be disabled. + + // The values being non-zero value makes deployment a bit more expensive, + // but in exchange the refund on every call to nonReentrant will be lower in + // amount. Since refunds are capped to a percentage of the total + // transaction's gas, it is best to keep them low in cases like this one, to + // increase the likelihood of the full refund coming into effect. + uint256 private constant _NOT_ENTERED = 1; + uint256 private constant _ENTERED = 2; + + uint256 private _status; + + constructor() { + _status = _NOT_ENTERED; + } + + /** + * @dev Prevents a contract from calling itself, directly or indirectly. + * Calling a `nonReentrant` function from another `nonReentrant` + * function is not supported. It is possible to prevent this from happening + * by making the `nonReentrant` function external, and making it call a + * `private` function that does the actual work. + */ + modifier nonReentrant() { + _nonReentrantBefore(); + _; + _nonReentrantAfter(); + } + + function _nonReentrantBefore() private { + // On the first call to nonReentrant, _status will be _NOT_ENTERED + require(_status != _ENTERED, "ReentrancyGuard: reentrant call"); + + // Any calls to nonReentrant after this point will fail + _status = _ENTERED; + } + + function _nonReentrantAfter() private { + // By storing the original value once again, a refund is triggered (see + // https://eips.ethereum.org/EIPS/eip-2200) + _status = _NOT_ENTERED; + } +} + +// ┏━━━┓━┏┓━┏┓━━┏━━━┓━━┏━━━┓━━━━┏━━━┓━━━━━━━━━━━━━━━━━━━┏┓━━━━━┏━━━┓━━━━━━━━━┏┓━━━━━━━━━━━━━━┏┓━ +// ┃┏━━┛┏┛┗┓┃┃━━┃┏━┓┃━━┃┏━┓┃━━━━┗┓┏┓┃━━━━━━━━━━━━━━━━━━┏┛┗┓━━━━┃┏━┓┃━━━━━━━━┏┛┗┓━━━━━━━━━━━━┏┛┗┓ +// ┃┗━━┓┗┓┏┛┃┗━┓┗┛┏┛┃━━┃┃━┃┃━━━━━┃┃┃┃┏━━┓┏━━┓┏━━┓┏━━┓┏┓┗┓┏┛━━━━┃┃━┗┛┏━━┓┏━┓━┗┓┏┛┏━┓┏━━┓━┏━━┓┗┓┏┛ +// ┃┏━━┛━┃┃━┃┏┓┃┏━┛┏┛━━┃┃━┃┃━━━━━┃┃┃┃┃┏┓┃┃┏┓┃┃┏┓┃┃━━┫┣┫━┃┃━━━━━┃┃━┏┓┃┏┓┃┃┏┓┓━┃┃━┃┏┛┗━┓┃━┃┏━┛━┃┃━ +// ┃┗━━┓━┃┗┓┃┃┃┃┃┃┗━┓┏┓┃┗━┛┃━━━━┏┛┗┛┃┃┃━┫┃┗┛┃┃┗┛┃┣━━┃┃┃━┃┗┓━━━━┃┗━┛┃┃┗┛┃┃┃┃┃━┃┗┓┃┃━┃┗┛┗┓┃┗━┓━┃┗┓ +// ┗━━━┛━┗━┛┗┛┗┛┗━━━┛┗┛┗━━━┛━━━━┗━━━┛┗━━┛┃┏━┛┗━━┛┗━━┛┗┛━┗━┛━━━━┗━━━┛┗━━┛┗┛┗┛━┗━┛┗┛━┗━━━┛┗━━┛━┗━┛ +// ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┃┃━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ +// ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┗┛━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ + + + +// This interface is designed to be compatible with the Vyper version. +/// @notice This is the Ethereum 2.0 deposit contract interface. +/// For more information see the Phase 0 specification under https://github.com/ethereum/eth2.0-specs +interface IDepositContract { + /// @notice A processed deposit event. + event DepositEvent( + bytes pubkey, + bytes withdrawal_credentials, + bytes amount, + bytes signature, + bytes index + ); + + /// @notice Submit a Phase 0 DepositData object. + /// @param pubkey A BLS12-381 public key. + /// @param withdrawal_credentials Commitment to a public key for withdrawals. + /// @param signature A BLS12-381 signature. + /// @param deposit_data_root The SHA-256 hash of the SSZ-encoded DepositData object. + /// Used as a protection against malformed input. + function deposit( + bytes calldata pubkey, + bytes calldata withdrawal_credentials, + bytes calldata signature, + bytes32 deposit_data_root + ) external payable; + + /// @notice Query the current deposit root hash. + /// @return The deposit root hash. + function get_deposit_root() external view returns (bytes32); + + /// @notice Query the current deposit count. + /// @return The deposit count encoded as a little endian 64-bit number. + function get_deposit_count() external view returns (bytes memory); +} + +// Based on official specification in https://eips.ethereum.org/EIPS/eip-165 +interface ERC165 { + /// @notice Query if a contract implements an interface + /// @param interfaceId The interface identifier, as specified in ERC-165 + /// @dev Interface identification is specified in ERC-165. This function + /// uses less than 30,000 gas. + /// @return `true` if the contract implements `interfaceId` and + /// `interfaceId` is not 0xffffffff, `false` otherwise + function supportsInterface(bytes4 interfaceId) external pure returns (bool); +} + +// This is a rewrite of the Vyper Eth2.0 deposit contract in Solidity. +// It tries to stay as close as possible to the original source code. +/// @notice This is the Ethereum 2.0 deposit contract interface. +/// For more information see the Phase 0 specification under https://github.com/ethereum/eth2.0-specs +contract DepositContract is IDepositContract, ERC165 { + uint constant DEPOSIT_CONTRACT_TREE_DEPTH = 32; + // NOTE: this also ensures `deposit_count` will fit into 64-bits + uint constant MAX_DEPOSIT_COUNT = 2**DEPOSIT_CONTRACT_TREE_DEPTH - 1; + + bytes32[DEPOSIT_CONTRACT_TREE_DEPTH] branch; + uint256 deposit_count; + + bytes32[DEPOSIT_CONTRACT_TREE_DEPTH] zero_hashes; + + constructor() public { + // Compute hashes in empty sparse Merkle tree + for (uint height = 0; height < DEPOSIT_CONTRACT_TREE_DEPTH - 1; height++) + zero_hashes[height + 1] = sha256(abi.encodePacked(zero_hashes[height], zero_hashes[height])); + } + + function get_deposit_root() override external view returns (bytes32) { + bytes32 node; + uint size = deposit_count; + for (uint height = 0; height < DEPOSIT_CONTRACT_TREE_DEPTH; height++) { + if ((size & 1) == 1) + node = sha256(abi.encodePacked(branch[height], node)); + else + node = sha256(abi.encodePacked(node, zero_hashes[height])); + size /= 2; + } + return sha256(abi.encodePacked( + node, + to_little_endian_64(uint64(deposit_count)), + bytes24(0) + )); + } + + function get_deposit_count() override external view returns (bytes memory) { + return to_little_endian_64(uint64(deposit_count)); + } + + function deposit( + bytes calldata pubkey, + bytes calldata withdrawal_credentials, + bytes calldata signature, + bytes32 deposit_data_root + ) override external payable { + // Extended ABI length checks since dynamic types are used. + require(pubkey.length == 48, "DepositContract: invalid pubkey length"); + require(withdrawal_credentials.length == 32, "DepositContract: invalid withdrawal_credentials length"); + require(signature.length == 96, "DepositContract: invalid signature length"); + + // Check deposit amount + require(msg.value >= 1 ether, "DepositContract: deposit value too low"); + require(msg.value % 1 gwei == 0, "DepositContract: deposit value not multiple of gwei"); + uint deposit_amount = msg.value / 1 gwei; + require(deposit_amount <= type(uint64).max, "DepositContract: deposit value too high"); + + // Emit `DepositEvent` log + bytes memory amount = to_little_endian_64(uint64(deposit_amount)); + emit DepositEvent( + pubkey, + withdrawal_credentials, + amount, + signature, + to_little_endian_64(uint64(deposit_count)) + ); + + // Compute deposit data root (`DepositData` hash tree root) + bytes32 pubkey_root = sha256(abi.encodePacked(pubkey, bytes16(0))); + bytes32 signature_root = sha256(abi.encodePacked( + sha256(abi.encodePacked(signature[:64])), + sha256(abi.encodePacked(signature[64:], bytes32(0))) + )); + bytes32 node = sha256(abi.encodePacked( + sha256(abi.encodePacked(pubkey_root, withdrawal_credentials)), + sha256(abi.encodePacked(amount, bytes24(0), signature_root)) + )); + + // Verify computed and expected deposit data roots match + require(node == deposit_data_root, "DepositContract: reconstructed DepositData does not match supplied deposit_data_root"); + + // Avoid overflowing the Merkle tree (and prevent edge case in computing `branch`) + require(deposit_count < MAX_DEPOSIT_COUNT, "DepositContract: merkle tree full"); + + // Add deposit data root to Merkle tree (update a single `branch` node) + deposit_count += 1; + uint size = deposit_count; + for (uint height = 0; height < DEPOSIT_CONTRACT_TREE_DEPTH; height++) { + if ((size & 1) == 1) { + branch[height] = node; + return; + } + node = sha256(abi.encodePacked(branch[height], node)); + size /= 2; + } + // As the loop should always end prematurely with the `return` statement, + // this code should be unreachable. We assert `false` just to be safe. + assert(false); + } + + function supportsInterface(bytes4 interfaceId) override external pure returns (bool) { + return interfaceId == type(ERC165).interfaceId || interfaceId == type(IDepositContract).interfaceId; + } + + function to_little_endian_64(uint64 value) internal pure returns (bytes memory ret) { + ret = new bytes(8); + bytes8 bytesValue = bytes8(value); + // Byteswapping during copying to bytes. + ret[0] = bytesValue[7]; + ret[1] = bytesValue[6]; + ret[2] = bytesValue[5]; + ret[3] = bytesValue[4]; + ret[4] = bytesValue[3]; + ret[5] = bytesValue[2]; + ret[6] = bytesValue[1]; + ret[7] = bytesValue[0]; + } +} + +// ==================================================================== +// | ______ _______ | +// | / _____________ __ __ / ____(_____ ____ _____ ________ | +// | / /_ / ___/ __ `| |/_/ / /_ / / __ \/ __ `/ __ \/ ___/ _ \ | +// | / __/ / / / /_/ _> < / __/ / / / / / /_/ / / / / /__/ __/ | +// | /_/ /_/ \__,_/_/|_| /_/ /_/_/ /_/\__,_/_/ /_/\___/\___/ | +// | | +// ==================================================================== +// ========================= OperatorRegistry ========================= +// ==================================================================== +// Frax Finance: https://github.com/FraxFinance + +// Primary Author(s) +// Jack Corddry: https://github.com/corddry +// Justin Moore: https://github.com/0xJM + +// Reviewer(s) / Contributor(s) +// Travis Moore: https://github.com/FortisFortuna +// Dennis: https://github.com/denett + +/// @title Keeps track of validators used for ETH 2.0 staking +/// @notice A permissioned owner can add and removed them at will +contract OperatorRegistry is Owned { + + struct Validator { + bytes pubKey; + bytes signature; + bytes32 depositDataRoot; + } + + Validator[] validators; // Array of unused / undeposited validators that can be used at a future time + bytes curr_withdrawal_pubkey; // Pubkey for ETH 2.0 withdrawal creds. If you change it, you must empty the validators array + address public timelock_address; + + constructor(address _owner, address _timelock_address, bytes memory _withdrawal_pubkey) Owned(_owner) { + timelock_address = _timelock_address; + curr_withdrawal_pubkey = _withdrawal_pubkey; + } + + modifier onlyByOwnGov() { + require(msg.sender == timelock_address || msg.sender == owner, "Not owner or timelock"); + _; + } + + /// @notice Add a new validator + /** @dev You should verify offchain that the validator is indeed valid before adding it + Reason we don't do that here is for gas */ + function addValidator(Validator calldata validator) public onlyByOwnGov { + validators.push(validator); + emit ValidatorAdded(validator.pubKey, curr_withdrawal_pubkey); + } + + /// @notice Add multiple new validators in one function call + /** @dev You should verify offchain that the validators are indeed valid before adding them + Reason we don't do that here is for gas */ + function addValidators(Validator[] calldata validatorArray) external onlyByOwnGov { + uint arrayLength = validatorArray.length; + for (uint256 i = 0; i < arrayLength; ++i) { + addValidator(validatorArray[i]); + } + } + + /// @notice Swap the location of one validator with another + function swapValidator(uint256 from_idx, uint256 to_idx) public onlyByOwnGov { + // Get the original values + Validator memory fromVal = validators[from_idx]; + Validator memory toVal = validators[to_idx]; + + // Set the swapped values + validators[to_idx] = fromVal; + validators[from_idx] = toVal; + + emit ValidatorsSwapped(fromVal.pubKey, toVal.pubKey, from_idx, to_idx); + } + + /// @notice Remove validators from the end of the validators array, in case they were added in error + function popValidators(uint256 times) public onlyByOwnGov { + // Loop through and remove validator entries at the end + for (uint256 i = 0; i < times; ++i) { + validators.pop(); + } + + emit ValidatorsPopped(times); + } + + /** @notice Remove a validator from the array. If dont_care_about_ordering is true, + a swap and pop will occur instead of a more gassy loop */ + function removeValidator(uint256 remove_idx, bool dont_care_about_ordering) public onlyByOwnGov { + // Get the pubkey for the validator to remove (for informational purposes) + bytes memory removed_pubkey = validators[remove_idx].pubKey; + + // Less gassy to swap and pop + if (dont_care_about_ordering){ + // Swap the (validator to remove) with the (last validator in the array) + swapValidator(remove_idx, validators.length - 1); + + // Pop off the validator to remove, which is now at the end of the array + validators.pop(); + } + // More gassy, loop + else { + // Save the original validators + Validator[] memory original_validators = validators; + + // Clear the original validators list + delete validators; + + // Fill the new validators array with all except the value to remove + for (uint256 i = 0; i < original_validators.length; ++i) { + if (i != remove_idx) { + validators.push(original_validators[i]); + } + } + } + + emit ValidatorRemoved(removed_pubkey, remove_idx, dont_care_about_ordering); + } + + // Internal + /// @dev Remove the last validator from the validators array and return its information + function getNextValidator() + internal + returns ( + bytes memory pubKey, + bytes memory withdrawalCredentials, + bytes memory signature, + bytes32 depositDataRoot + ) + { + // Make sure there are free validators available + uint numVals = numValidators(); + require(numVals != 0, "Validator stack is empty"); + + // Pop the last validator off the array + Validator memory popped = validators[numVals - 1]; + validators.pop(); + + // Return the validator's information + pubKey = popped.pubKey; + withdrawalCredentials = curr_withdrawal_pubkey; + signature = popped.signature; + depositDataRoot = popped.depositDataRoot; + } + + /// @notice Return the information of the i'th validator in the registry + function getValidator(uint i) + view + external + returns ( + bytes memory pubKey, + bytes memory withdrawalCredentials, + bytes memory signature, + bytes32 depositDataRoot + ) + { + Validator memory v = validators[i]; + + // Return the validator's information + pubKey = v.pubKey; + withdrawalCredentials = curr_withdrawal_pubkey; + signature = v.signature; + depositDataRoot = v.depositDataRoot; + } + + /// @notice Returns a Validator struct of the given inputs to make formatting addValidator inputs easier + function getValidatorStruct( + bytes memory pubKey, + bytes memory signature, + bytes32 depositDataRoot + ) external pure returns (Validator memory) { + return Validator(pubKey, signature, depositDataRoot); + } + + /// @notice Requires empty validator stack as changing withdrawal creds invalidates signature + /// @dev May need to call clearValidatorArray() first + function setWithdrawalCredential(bytes memory _new_withdrawal_pubkey) external onlyByOwnGov { + require(numValidators() == 0, "Clear validator array first"); + curr_withdrawal_pubkey = _new_withdrawal_pubkey; + + emit WithdrawalCredentialSet(_new_withdrawal_pubkey); + } + + /// @notice Empties the validator array + /// @dev Need to do this before setWithdrawalCredential() + function clearValidatorArray() external onlyByOwnGov { + delete validators; + + emit ValidatorArrayCleared(); + } + + /// @notice Returns the number of validators + function numValidators() public view returns (uint256) { + return validators.length; + } + + /// @notice Set the timelock contract + function setTimelock(address _timelock_address) external onlyByOwnGov { + require(_timelock_address != address(0), "Zero address detected"); + timelock_address = _timelock_address; + emit TimelockChanged(_timelock_address); + } + + event TimelockChanged(address timelock_address); + event WithdrawalCredentialSet(bytes _withdrawalCredential); + event ValidatorAdded(bytes pubKey, bytes withdrawalCredential); + event ValidatorArrayCleared(); + event ValidatorRemoved(bytes pubKey, uint256 remove_idx, bool dont_care_about_ordering); + event ValidatorsPopped(uint256 times); + event ValidatorsSwapped(bytes from_pubKey, bytes to_pubKey, uint256 from_idx, uint256 to_idx); + event KeysCleared(); +} + +/// @title Authorized minter contract for frxETH +/// @notice Accepts user-supplied ETH and converts it to frxETH (submit()), and also optionally inline stakes it for sfrxETH (submitAndDeposit()) +/** @dev Has permission to mint frxETH. + Once +32 ETH has accumulated, adds it to a validator, which then deposits it for ETH 2.0 staking (depositEther()) + Withhold ratio refers to what percentage of ETH this contract keeps whenever a user makes a deposit. 0% is kept initially */ +contract frxETHMinter is OperatorRegistry, ReentrancyGuard { + uint256 public constant DEPOSIT_SIZE = 32 ether; // ETH 2.0 minimum deposit size + uint256 public constant RATIO_PRECISION = 1e6; // 1,000,000 + + uint256 public withholdRatio; // What we keep and don't deposit whenever someone submit()'s ETH + uint256 public currentWithheldETH; // Needed for internal tracking + mapping(bytes => bool) public activeValidators; // Tracks validators (via their pubkeys) that already have 32 ETH in them + + IDepositContract public immutable depositContract; // ETH 2.0 deposit contract + frxETH public immutable frxETHToken; + IsfrxETH public immutable sfrxETHToken; + + bool public submitPaused; + bool public depositEtherPaused; + + constructor( + address depositContractAddress, + address frxETHAddress, + address sfrxETHAddress, + address _owner, + address _timelock_address, + bytes memory _withdrawalCredential + ) OperatorRegistry(_owner, _timelock_address, _withdrawalCredential) { + depositContract = IDepositContract(depositContractAddress); + frxETHToken = frxETH(frxETHAddress); + sfrxETHToken = IsfrxETH(sfrxETHAddress); + withholdRatio = 0; // No ETH is withheld initially + currentWithheldETH = 0; + } + + /// @notice Mint frxETH and deposit it to receive sfrxETH in one transaction + /** @dev Could try using EIP-712 / EIP-2612 here in the future if you replace this contract, + but you might run into msg.sender vs tx.origin issues with the ERC4626 */ + function submitAndDeposit(address recipient) external payable returns (uint256 shares) { + // Give the frxETH to this contract after it is generated + _submit(address(this)); + + // Approve frxETH to sfrxETH for staking + frxETHToken.approve(address(sfrxETHToken), msg.value); + + // Deposit the frxETH and give the generated sfrxETH to the final recipient + uint256 sfrxeth_recieved = sfrxETHToken.deposit(msg.value, recipient); + require(sfrxeth_recieved > 0, 'No sfrxETH was returned'); + + return sfrxeth_recieved; + } + + /// @notice Mint frxETH to the recipient using sender's funds. Internal portion + function _submit(address recipient) internal nonReentrant { + // Initial pause and value checks + require(!submitPaused, "Submit is paused"); + require(msg.value != 0, "Cannot submit 0"); + + // Give the sender frxETH + frxETHToken.minter_mint(recipient, msg.value); + + // Track the amount of ETH that we are keeping + uint256 withheld_amt = 0; + if (withholdRatio != 0) { + withheld_amt = (msg.value * withholdRatio) / RATIO_PRECISION; + currentWithheldETH += withheld_amt; + } + + emit ETHSubmitted(msg.sender, recipient, msg.value, withheld_amt); + } + + /// @notice Mint frxETH to the sender depending on the ETH value sent + function submit() external payable { + _submit(msg.sender); + } + + /// @notice Mint frxETH to the recipient using sender's funds + function submitAndGive(address recipient) external payable { + _submit(recipient); + } + + /// @notice Fallback to minting frxETH to the sender + receive() external payable { + _submit(msg.sender); + } + + /// @notice Deposit batches of ETH to the ETH 2.0 deposit contract + /// @dev Usually a bot will call this periodically + /// @param max_deposits Used to prevent gassing out if a whale drops in a huge amount of ETH. Break it down into batches. + function depositEther(uint256 max_deposits) external nonReentrant { + // Initial pause check + require(!depositEtherPaused, "Depositing ETH is paused"); + + // See how many deposits can be made. Truncation desired. + uint256 numDeposits = (address(this).balance - currentWithheldETH) / DEPOSIT_SIZE; + require(numDeposits > 0, "Not enough ETH in contract"); + + uint256 loopsToUse = numDeposits; + if (max_deposits == 0) loopsToUse = numDeposits; + else if (numDeposits > max_deposits) loopsToUse = max_deposits; + + // Give each deposit chunk to an empty validator + for (uint256 i = 0; i < loopsToUse; ++i) { + // Get validator information + ( + bytes memory pubKey, + bytes memory withdrawalCredential, + bytes memory signature, + bytes32 depositDataRoot + ) = getNextValidator(); // Will revert if there are not enough free validators + + // Make sure the validator hasn't been deposited into already, to prevent stranding an extra 32 eth + // until withdrawals are allowed + require(!activeValidators[pubKey], "Validator already has 32 ETH"); + + // Deposit the ether in the ETH 2.0 deposit contract + depositContract.deposit{value: DEPOSIT_SIZE}( + pubKey, + withdrawalCredential, + signature, + depositDataRoot + ); + + // Set the validator as used so it won't get an extra 32 ETH + activeValidators[pubKey] = true; + + emit DepositSent(pubKey, withdrawalCredential); + } + } + + /// @param newRatio of ETH that is sent to deposit contract vs withheld, 1e6 precision + /// @notice An input of 1e6 results in 100% of Eth deposited, 0% withheld + function setWithholdRatio(uint256 newRatio) external onlyByOwnGov { + require (newRatio <= RATIO_PRECISION, "Ratio cannot surpass 100%"); + withholdRatio = newRatio; + emit WithholdRatioSet(newRatio); + } + + /// @notice Give the withheld ETH to the "to" address + function moveWithheldETH(address payable to, uint256 amount) external onlyByOwnGov { + require(amount <= currentWithheldETH, "Not enough withheld ETH in contract"); + currentWithheldETH -= amount; + + (bool success,) = payable(to).call{ value: amount }(""); + require(success, "Invalid transfer"); + + emit WithheldETHMoved(to, amount); + } + + /// @notice Toggle allowing submites + function togglePauseSubmits() external onlyByOwnGov { + submitPaused = !submitPaused; + + emit SubmitPaused(submitPaused); + } + + /// @notice Toggle allowing depositing ETH to validators + function togglePauseDepositEther() external onlyByOwnGov { + depositEtherPaused = !depositEtherPaused; + + emit DepositEtherPaused(depositEtherPaused); + } + + /// @notice For emergencies if something gets stuck + function recoverEther(uint256 amount) external onlyByOwnGov { + (bool success,) = address(owner).call{ value: amount }(""); + require(success, "Invalid transfer"); + + emit EmergencyEtherRecovered(amount); + } + + /// @notice For emergencies if someone accidentally sent some ERC20 tokens here + function recoverERC20(address tokenAddress, uint256 tokenAmount) external onlyByOwnGov { + require(IERC20(tokenAddress).transfer(owner, tokenAmount), "recoverERC20: Transfer failed"); + + emit EmergencyERC20Recovered(tokenAddress, tokenAmount); + } + + event EmergencyEtherRecovered(uint256 amount); + event EmergencyERC20Recovered(address tokenAddress, uint256 tokenAmount); + event ETHSubmitted(address indexed sender, address indexed recipient, uint256 sent_amount, uint256 withheld_amt); + event DepositEtherPaused(bool new_status); + event DepositSent(bytes indexed pubKey, bytes withdrawalCredential); + event SubmitPaused(bool new_status); + event WithheldETHMoved(address indexed to, uint256 amount); + event WithholdRatioSet(uint256 newRatio); +} diff --git a/src/hardhat/contracts/FraxETH/sfrxETH.sol.old b/src/hardhat/contracts/FraxETH/sfrxETH.sol.old new file mode 100644 index 00000000..7ae43423 --- /dev/null +++ b/src/hardhat/contracts/FraxETH/sfrxETH.sol.old @@ -0,0 +1,1140 @@ +/** + *Submitted for verification at Etherscan.io on 2022-10-19 +*/ + +// SPDX-License-Identifier: GPL-2.0-or-later +pragma solidity >=0.8.0; + + +// ==================================================================== +// | ______ _______ | +// | / _____________ __ __ / ____(_____ ____ _____ ________ | +// | / /_ / ___/ __ `| |/_/ / /_ / / __ \/ __ `/ __ \/ ___/ _ \ | +// | / __/ / / / /_/ _> < / __/ / / / / / /_/ / / / / /__/ __/ | +// | /_/ /_/ \__,_/_/|_| /_/ /_/_/ /_/\__,_/_/ /_/\___/\___/ | +// | | +// ==================================================================== +// ============================== sfrxETH ============================= +// ==================================================================== +// Frax Finance: https://github.com/FraxFinance + +// Primary Author(s) +// Jack Corddry: https://github.com/corddry +// Nader Ghazvini: https://github.com/amirnader-ghazvini + +// Reviewer(s) / Contributor(s) +// Sam Kazemian: https://github.com/samkazemian +// Dennett: https://github.com/denett +// Travis Moore: https://github.com/FortisFortuna +// Jamie Turley: https://github.com/jyturley + +// Rewards logic inspired by xERC20 (https://github.com/ZeframLou/playpen/blob/main/src/xERC20.sol) + +/// @notice Modern and gas efficient ERC20 + EIP-2612 implementation. +/// @author Solmate (https://github.com/transmissions11/solmate/blob/main/src/tokens/ERC20.sol) +/// @author Modified from Uniswap (https://github.com/Uniswap/uniswap-v2-core/blob/master/contracts/UniswapV2ERC20.sol) +/// @dev Do not manually set balances without updating totalSupply, as the sum of all user balances must not exceed it. +abstract contract ERC20 { + /*////////////////////////////////////////////////////////////// + EVENTS + //////////////////////////////////////////////////////////////*/ + + event Transfer(address indexed from, address indexed to, uint256 amount); + + event Approval(address indexed owner, address indexed spender, uint256 amount); + + /*////////////////////////////////////////////////////////////// + METADATA STORAGE + //////////////////////////////////////////////////////////////*/ + + string public name; + + string public symbol; + + uint8 public immutable decimals; + + /*////////////////////////////////////////////////////////////// + ERC20 STORAGE + //////////////////////////////////////////////////////////////*/ + + uint256 public totalSupply; + + mapping(address => uint256) public balanceOf; + + mapping(address => mapping(address => uint256)) public allowance; + + /*////////////////////////////////////////////////////////////// + EIP-2612 STORAGE + //////////////////////////////////////////////////////////////*/ + + uint256 internal immutable INITIAL_CHAIN_ID; + + bytes32 internal immutable INITIAL_DOMAIN_SEPARATOR; + + mapping(address => uint256) public nonces; + + /*////////////////////////////////////////////////////////////// + CONSTRUCTOR + //////////////////////////////////////////////////////////////*/ + + constructor( + string memory _name, + string memory _symbol, + uint8 _decimals + ) { + name = _name; + symbol = _symbol; + decimals = _decimals; + + INITIAL_CHAIN_ID = block.chainid; + INITIAL_DOMAIN_SEPARATOR = computeDomainSeparator(); + } + + /*////////////////////////////////////////////////////////////// + ERC20 LOGIC + //////////////////////////////////////////////////////////////*/ + + function approve(address spender, uint256 amount) public virtual returns (bool) { + allowance[msg.sender][spender] = amount; + + emit Approval(msg.sender, spender, amount); + + return true; + } + + function transfer(address to, uint256 amount) public virtual returns (bool) { + balanceOf[msg.sender] -= amount; + + // Cannot overflow because the sum of all user + // balances can't exceed the max uint256 value. + unchecked { + balanceOf[to] += amount; + } + + emit Transfer(msg.sender, to, amount); + + return true; + } + + function transferFrom( + address from, + address to, + uint256 amount + ) public virtual returns (bool) { + uint256 allowed = allowance[from][msg.sender]; // Saves gas for limited approvals. + + if (allowed != type(uint256).max) allowance[from][msg.sender] = allowed - amount; + + balanceOf[from] -= amount; + + // Cannot overflow because the sum of all user + // balances can't exceed the max uint256 value. + unchecked { + balanceOf[to] += amount; + } + + emit Transfer(from, to, amount); + + return true; + } + + /*////////////////////////////////////////////////////////////// + EIP-2612 LOGIC + //////////////////////////////////////////////////////////////*/ + + function permit( + address owner, + address spender, + uint256 value, + uint256 deadline, + uint8 v, + bytes32 r, + bytes32 s + ) public virtual { + require(deadline >= block.timestamp, "PERMIT_DEADLINE_EXPIRED"); + + // Unchecked because the only math done is incrementing + // the owner's nonce which cannot realistically overflow. + unchecked { + address recoveredAddress = ecrecover( + keccak256( + abi.encodePacked( + "\x19\x01", + DOMAIN_SEPARATOR(), + keccak256( + abi.encode( + keccak256( + "Permit(address owner,address spender,uint256 value,uint256 nonce,uint256 deadline)" + ), + owner, + spender, + value, + nonces[owner]++, + deadline + ) + ) + ) + ), + v, + r, + s + ); + + require(recoveredAddress != address(0) && recoveredAddress == owner, "INVALID_SIGNER"); + + allowance[recoveredAddress][spender] = value; + } + + emit Approval(owner, spender, value); + } + + function DOMAIN_SEPARATOR() public view virtual returns (bytes32) { + return block.chainid == INITIAL_CHAIN_ID ? INITIAL_DOMAIN_SEPARATOR : computeDomainSeparator(); + } + + function computeDomainSeparator() internal view virtual returns (bytes32) { + return + keccak256( + abi.encode( + keccak256("EIP712Domain(string name,string version,uint256 chainId,address verifyingContract)"), + keccak256(bytes(name)), + keccak256("1"), + block.chainid, + address(this) + ) + ); + } + + /*////////////////////////////////////////////////////////////// + INTERNAL MINT/BURN LOGIC + //////////////////////////////////////////////////////////////*/ + + function _mint(address to, uint256 amount) internal virtual { + totalSupply += amount; + + // Cannot overflow because the sum of all user + // balances can't exceed the max uint256 value. + unchecked { + balanceOf[to] += amount; + } + + emit Transfer(address(0), to, amount); + } + + function _burn(address from, uint256 amount) internal virtual { + balanceOf[from] -= amount; + + // Cannot underflow because a user's balance + // will never be larger than the total supply. + unchecked { + totalSupply -= amount; + } + + emit Transfer(from, address(0), amount); + } +} + +/// @notice Safe ETH and ERC20 transfer library that gracefully handles missing return values. +/// @author Solmate (https://github.com/transmissions11/solmate/blob/main/src/utils/SafeTransferLib.sol) +/// @dev Use with caution! Some functions in this library knowingly create dirty bits at the destination of the free memory pointer. +/// @dev Note that none of the functions in this library check that a token has code at all! That responsibility is delegated to the caller. +library SafeTransferLib { + /*////////////////////////////////////////////////////////////// + ETH OPERATIONS + //////////////////////////////////////////////////////////////*/ + + function safeTransferETH(address to, uint256 amount) internal { + bool success; + + assembly { + // Transfer the ETH and store if it succeeded or not. + success := call(gas(), to, amount, 0, 0, 0, 0) + } + + require(success, "ETH_TRANSFER_FAILED"); + } + + /*////////////////////////////////////////////////////////////// + ERC20 OPERATIONS + //////////////////////////////////////////////////////////////*/ + + function safeTransferFrom( + ERC20 token, + address from, + address to, + uint256 amount + ) internal { + bool success; + + assembly { + // Get a pointer to some free memory. + let freeMemoryPointer := mload(0x40) + + // Write the abi-encoded calldata into memory, beginning with the function selector. + mstore(freeMemoryPointer, 0x23b872dd00000000000000000000000000000000000000000000000000000000) + mstore(add(freeMemoryPointer, 4), from) // Append the "from" argument. + mstore(add(freeMemoryPointer, 36), to) // Append the "to" argument. + mstore(add(freeMemoryPointer, 68), amount) // Append the "amount" argument. + + success := and( + // Set success to whether the call reverted, if not we check it either + // returned exactly 1 (can't just be non-zero data), or had no return data. + or(and(eq(mload(0), 1), gt(returndatasize(), 31)), iszero(returndatasize())), + // We use 100 because the length of our calldata totals up like so: 4 + 32 * 3. + // We use 0 and 32 to copy up to 32 bytes of return data into the scratch space. + // Counterintuitively, this call must be positioned second to the or() call in the + // surrounding and() call or else returndatasize() will be zero during the computation. + call(gas(), token, 0, freeMemoryPointer, 100, 0, 32) + ) + } + + require(success, "TRANSFER_FROM_FAILED"); + } + + function safeTransfer( + ERC20 token, + address to, + uint256 amount + ) internal { + bool success; + + assembly { + // Get a pointer to some free memory. + let freeMemoryPointer := mload(0x40) + + // Write the abi-encoded calldata into memory, beginning with the function selector. + mstore(freeMemoryPointer, 0xa9059cbb00000000000000000000000000000000000000000000000000000000) + mstore(add(freeMemoryPointer, 4), to) // Append the "to" argument. + mstore(add(freeMemoryPointer, 36), amount) // Append the "amount" argument. + + success := and( + // Set success to whether the call reverted, if not we check it either + // returned exactly 1 (can't just be non-zero data), or had no return data. + or(and(eq(mload(0), 1), gt(returndatasize(), 31)), iszero(returndatasize())), + // We use 68 because the length of our calldata totals up like so: 4 + 32 * 2. + // We use 0 and 32 to copy up to 32 bytes of return data into the scratch space. + // Counterintuitively, this call must be positioned second to the or() call in the + // surrounding and() call or else returndatasize() will be zero during the computation. + call(gas(), token, 0, freeMemoryPointer, 68, 0, 32) + ) + } + + require(success, "TRANSFER_FAILED"); + } + + function safeApprove( + ERC20 token, + address to, + uint256 amount + ) internal { + bool success; + + assembly { + // Get a pointer to some free memory. + let freeMemoryPointer := mload(0x40) + + // Write the abi-encoded calldata into memory, beginning with the function selector. + mstore(freeMemoryPointer, 0x095ea7b300000000000000000000000000000000000000000000000000000000) + mstore(add(freeMemoryPointer, 4), to) // Append the "to" argument. + mstore(add(freeMemoryPointer, 36), amount) // Append the "amount" argument. + + success := and( + // Set success to whether the call reverted, if not we check it either + // returned exactly 1 (can't just be non-zero data), or had no return data. + or(and(eq(mload(0), 1), gt(returndatasize(), 31)), iszero(returndatasize())), + // We use 68 because the length of our calldata totals up like so: 4 + 32 * 2. + // We use 0 and 32 to copy up to 32 bytes of return data into the scratch space. + // Counterintuitively, this call must be positioned second to the or() call in the + // surrounding and() call or else returndatasize() will be zero during the computation. + call(gas(), token, 0, freeMemoryPointer, 68, 0, 32) + ) + } + + require(success, "APPROVE_FAILED"); + } +} + +/// @notice Arithmetic library with operations for fixed-point numbers. +/// @author Solmate (https://github.com/transmissions11/solmate/blob/main/src/utils/FixedPointMathLib.sol) +/// @author Inspired by USM (https://github.com/usmfum/USM/blob/master/contracts/WadMath.sol) +library FixedPointMathLib { + /*////////////////////////////////////////////////////////////// + SIMPLIFIED FIXED POINT OPERATIONS + //////////////////////////////////////////////////////////////*/ + + uint256 internal constant WAD = 1e18; // The scalar of ETH and most ERC20s. + + function mulWadDown(uint256 x, uint256 y) internal pure returns (uint256) { + return mulDivDown(x, y, WAD); // Equivalent to (x * y) / WAD rounded down. + } + + function mulWadUp(uint256 x, uint256 y) internal pure returns (uint256) { + return mulDivUp(x, y, WAD); // Equivalent to (x * y) / WAD rounded up. + } + + function divWadDown(uint256 x, uint256 y) internal pure returns (uint256) { + return mulDivDown(x, WAD, y); // Equivalent to (x * WAD) / y rounded down. + } + + function divWadUp(uint256 x, uint256 y) internal pure returns (uint256) { + return mulDivUp(x, WAD, y); // Equivalent to (x * WAD) / y rounded up. + } + + /*////////////////////////////////////////////////////////////// + LOW LEVEL FIXED POINT OPERATIONS + //////////////////////////////////////////////////////////////*/ + + function mulDivDown( + uint256 x, + uint256 y, + uint256 denominator + ) internal pure returns (uint256 z) { + assembly { + // Store x * y in z for now. + z := mul(x, y) + + // Equivalent to require(denominator != 0 && (x == 0 || (x * y) / x == y)) + if iszero(and(iszero(iszero(denominator)), or(iszero(x), eq(div(z, x), y)))) { + revert(0, 0) + } + + // Divide z by the denominator. + z := div(z, denominator) + } + } + + function mulDivUp( + uint256 x, + uint256 y, + uint256 denominator + ) internal pure returns (uint256 z) { + assembly { + // Store x * y in z for now. + z := mul(x, y) + + // Equivalent to require(denominator != 0 && (x == 0 || (x * y) / x == y)) + if iszero(and(iszero(iszero(denominator)), or(iszero(x), eq(div(z, x), y)))) { + revert(0, 0) + } + + // First, divide z - 1 by the denominator and add 1. + // We allow z - 1 to underflow if z is 0, because we multiply the + // end result by 0 if z is zero, ensuring we return 0 if z is zero. + z := mul(iszero(iszero(z)), add(div(sub(z, 1), denominator), 1)) + } + } + + function rpow( + uint256 x, + uint256 n, + uint256 scalar + ) internal pure returns (uint256 z) { + assembly { + switch x + case 0 { + switch n + case 0 { + // 0 ** 0 = 1 + z := scalar + } + default { + // 0 ** n = 0 + z := 0 + } + } + default { + switch mod(n, 2) + case 0 { + // If n is even, store scalar in z for now. + z := scalar + } + default { + // If n is odd, store x in z for now. + z := x + } + + // Shifting right by 1 is like dividing by 2. + let half := shr(1, scalar) + + for { + // Shift n right by 1 before looping to halve it. + n := shr(1, n) + } n { + // Shift n right by 1 each iteration to halve it. + n := shr(1, n) + } { + // Revert immediately if x ** 2 would overflow. + // Equivalent to iszero(eq(div(xx, x), x)) here. + if shr(128, x) { + revert(0, 0) + } + + // Store x squared. + let xx := mul(x, x) + + // Round to the nearest number. + let xxRound := add(xx, half) + + // Revert if xx + half overflowed. + if lt(xxRound, xx) { + revert(0, 0) + } + + // Set x to scaled xxRound. + x := div(xxRound, scalar) + + // If n is even: + if mod(n, 2) { + // Compute z * x. + let zx := mul(z, x) + + // If z * x overflowed: + if iszero(eq(div(zx, x), z)) { + // Revert if x is non-zero. + if iszero(iszero(x)) { + revert(0, 0) + } + } + + // Round to the nearest number. + let zxRound := add(zx, half) + + // Revert if zx + half overflowed. + if lt(zxRound, zx) { + revert(0, 0) + } + + // Return properly scaled zxRound. + z := div(zxRound, scalar) + } + } + } + } + } + + /*////////////////////////////////////////////////////////////// + GENERAL NUMBER UTILITIES + //////////////////////////////////////////////////////////////*/ + + function sqrt(uint256 x) internal pure returns (uint256 z) { + assembly { + let y := x // We start y at x, which will help us make our initial estimate. + + z := 181 // The "correct" value is 1, but this saves a multiplication later. + + // This segment is to get a reasonable initial estimate for the Babylonian method. With a bad + // start, the correct # of bits increases ~linearly each iteration instead of ~quadratically. + + // We check y >= 2^(k + 8) but shift right by k bits + // each branch to ensure that if x >= 256, then y >= 256. + if iszero(lt(y, 0x10000000000000000000000000000000000)) { + y := shr(128, y) + z := shl(64, z) + } + if iszero(lt(y, 0x1000000000000000000)) { + y := shr(64, y) + z := shl(32, z) + } + if iszero(lt(y, 0x10000000000)) { + y := shr(32, y) + z := shl(16, z) + } + if iszero(lt(y, 0x1000000)) { + y := shr(16, y) + z := shl(8, z) + } + + // Goal was to get z*z*y within a small factor of x. More iterations could + // get y in a tighter range. Currently, we will have y in [256, 256*2^16). + // We ensured y >= 256 so that the relative difference between y and y+1 is small. + // That's not possible if x < 256 but we can just verify those cases exhaustively. + + // Now, z*z*y <= x < z*z*(y+1), and y <= 2^(16+8), and either y >= 256, or x < 256. + // Correctness can be checked exhaustively for x < 256, so we assume y >= 256. + // Then z*sqrt(y) is within sqrt(257)/sqrt(256) of sqrt(x), or about 20bps. + + // For s in the range [1/256, 256], the estimate f(s) = (181/1024) * (s+1) is in the range + // (1/2.84 * sqrt(s), 2.84 * sqrt(s)), with largest error when s = 1 and when s = 256 or 1/256. + + // Since y is in [256, 256*2^16), let a = y/65536, so that a is in [1/256, 256). Then we can estimate + // sqrt(y) using sqrt(65536) * 181/1024 * (a + 1) = 181/4 * (y + 65536)/65536 = 181 * (y + 65536)/2^18. + + // There is no overflow risk here since y < 2^136 after the first branch above. + z := shr(18, mul(z, add(y, 65536))) // A mul() is saved from starting z at 181. + + // Given the worst case multiplicative error of 2.84 above, 7 iterations should be enough. + z := shr(1, add(z, div(x, z))) + z := shr(1, add(z, div(x, z))) + z := shr(1, add(z, div(x, z))) + z := shr(1, add(z, div(x, z))) + z := shr(1, add(z, div(x, z))) + z := shr(1, add(z, div(x, z))) + z := shr(1, add(z, div(x, z))) + + // If x+1 is a perfect square, the Babylonian method cycles between + // floor(sqrt(x)) and ceil(sqrt(x)). This statement ensures we return floor. + // See: https://en.wikipedia.org/wiki/Integer_square_root#Using_only_integer_division + // Since the ceil is rare, we save gas on the assignment and repeat division in the rare case. + // If you don't care whether the floor or ceil square root is returned, you can remove this statement. + z := sub(z, lt(div(x, z), z)) + } + } + + function unsafeMod(uint256 x, uint256 y) internal pure returns (uint256 z) { + assembly { + // Mod x by y. Note this will return + // 0 instead of reverting if y is zero. + z := mod(x, y) + } + } + + function unsafeDiv(uint256 x, uint256 y) internal pure returns (uint256 r) { + assembly { + // Divide x by y. Note this will return + // 0 instead of reverting if y is zero. + r := div(x, y) + } + } + + function unsafeDivUp(uint256 x, uint256 y) internal pure returns (uint256 z) { + assembly { + // Add 1 to x * y if x % y > 0. Note this will + // return 0 instead of reverting if y is zero. + z := add(gt(mod(x, y), 0), div(x, y)) + } + } +} + +/// @notice Minimal ERC4626 tokenized Vault implementation. +/// @author Solmate (https://github.com/transmissions11/solmate/blob/main/src/mixins/ERC4626.sol) +abstract contract ERC4626 is ERC20 { + using SafeTransferLib for ERC20; + using FixedPointMathLib for uint256; + + /*////////////////////////////////////////////////////////////// + EVENTS + //////////////////////////////////////////////////////////////*/ + + event Deposit(address indexed caller, address indexed owner, uint256 assets, uint256 shares); + + event Withdraw( + address indexed caller, + address indexed receiver, + address indexed owner, + uint256 assets, + uint256 shares + ); + + /*////////////////////////////////////////////////////////////// + IMMUTABLES + //////////////////////////////////////////////////////////////*/ + + ERC20 public immutable asset; + + constructor( + ERC20 _asset, + string memory _name, + string memory _symbol + ) ERC20(_name, _symbol, _asset.decimals()) { + asset = _asset; + } + + /*////////////////////////////////////////////////////////////// + DEPOSIT/WITHDRAWAL LOGIC + //////////////////////////////////////////////////////////////*/ + + function deposit(uint256 assets, address receiver) public virtual returns (uint256 shares) { + // Check for rounding error since we round down in previewDeposit. + require((shares = previewDeposit(assets)) != 0, "ZERO_SHARES"); + + // Need to transfer before minting or ERC777s could reenter. + asset.safeTransferFrom(msg.sender, address(this), assets); + + _mint(receiver, shares); + + emit Deposit(msg.sender, receiver, assets, shares); + + afterDeposit(assets, shares); + } + + function mint(uint256 shares, address receiver) public virtual returns (uint256 assets) { + assets = previewMint(shares); // No need to check for rounding error, previewMint rounds up. + + // Need to transfer before minting or ERC777s could reenter. + asset.safeTransferFrom(msg.sender, address(this), assets); + + _mint(receiver, shares); + + emit Deposit(msg.sender, receiver, assets, shares); + + afterDeposit(assets, shares); + } + + function withdraw( + uint256 assets, + address receiver, + address owner + ) public virtual returns (uint256 shares) { + shares = previewWithdraw(assets); // No need to check for rounding error, previewWithdraw rounds up. + + if (msg.sender != owner) { + uint256 allowed = allowance[owner][msg.sender]; // Saves gas for limited approvals. + + if (allowed != type(uint256).max) allowance[owner][msg.sender] = allowed - shares; + } + + beforeWithdraw(assets, shares); + + _burn(owner, shares); + + emit Withdraw(msg.sender, receiver, owner, assets, shares); + + asset.safeTransfer(receiver, assets); + } + + function redeem( + uint256 shares, + address receiver, + address owner + ) public virtual returns (uint256 assets) { + if (msg.sender != owner) { + uint256 allowed = allowance[owner][msg.sender]; // Saves gas for limited approvals. + + if (allowed != type(uint256).max) allowance[owner][msg.sender] = allowed - shares; + } + + // Check for rounding error since we round down in previewRedeem. + require((assets = previewRedeem(shares)) != 0, "ZERO_ASSETS"); + + beforeWithdraw(assets, shares); + + _burn(owner, shares); + + emit Withdraw(msg.sender, receiver, owner, assets, shares); + + asset.safeTransfer(receiver, assets); + } + + /*////////////////////////////////////////////////////////////// + ACCOUNTING LOGIC + //////////////////////////////////////////////////////////////*/ + + function totalAssets() public view virtual returns (uint256); + + function convertToShares(uint256 assets) public view virtual returns (uint256) { + uint256 supply = totalSupply; // Saves an extra SLOAD if totalSupply is non-zero. + + return supply == 0 ? assets : assets.mulDivDown(supply, totalAssets()); + } + + function convertToAssets(uint256 shares) public view virtual returns (uint256) { + uint256 supply = totalSupply; // Saves an extra SLOAD if totalSupply is non-zero. + + return supply == 0 ? shares : shares.mulDivDown(totalAssets(), supply); + } + + function previewDeposit(uint256 assets) public view virtual returns (uint256) { + return convertToShares(assets); + } + + function previewMint(uint256 shares) public view virtual returns (uint256) { + uint256 supply = totalSupply; // Saves an extra SLOAD if totalSupply is non-zero. + + return supply == 0 ? shares : shares.mulDivUp(totalAssets(), supply); + } + + function previewWithdraw(uint256 assets) public view virtual returns (uint256) { + uint256 supply = totalSupply; // Saves an extra SLOAD if totalSupply is non-zero. + + return supply == 0 ? assets : assets.mulDivUp(supply, totalAssets()); + } + + function previewRedeem(uint256 shares) public view virtual returns (uint256) { + return convertToAssets(shares); + } + + /*////////////////////////////////////////////////////////////// + DEPOSIT/WITHDRAWAL LIMIT LOGIC + //////////////////////////////////////////////////////////////*/ + + function maxDeposit(address) public view virtual returns (uint256) { + return type(uint256).max; + } + + function maxMint(address) public view virtual returns (uint256) { + return type(uint256).max; + } + + function maxWithdraw(address owner) public view virtual returns (uint256) { + return convertToAssets(balanceOf[owner]); + } + + function maxRedeem(address owner) public view virtual returns (uint256) { + return balanceOf[owner]; + } + + /*////////////////////////////////////////////////////////////// + INTERNAL HOOKS LOGIC + //////////////////////////////////////////////////////////////*/ + + function beforeWithdraw(uint256 assets, uint256 shares) internal virtual {} + + function afterDeposit(uint256 assets, uint256 shares) internal virtual {} +} + +/// @notice Safe unsigned integer casting library that reverts on overflow. +/// @author Solmate (https://github.com/transmissions11/solmate/blob/main/src/utils/SafeCastLib.sol) +/// @author Modified from OpenZeppelin (https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/utils/math/SafeCast.sol) +library SafeCastLib { + function safeCastTo248(uint256 x) internal pure returns (uint248 y) { + require(x < 1 << 248); + + y = uint248(x); + } + + function safeCastTo224(uint256 x) internal pure returns (uint224 y) { + require(x < 1 << 224); + + y = uint224(x); + } + + function safeCastTo192(uint256 x) internal pure returns (uint192 y) { + require(x < 1 << 192); + + y = uint192(x); + } + + function safeCastTo160(uint256 x) internal pure returns (uint160 y) { + require(x < 1 << 160); + + y = uint160(x); + } + + function safeCastTo128(uint256 x) internal pure returns (uint128 y) { + require(x < 1 << 128); + + y = uint128(x); + } + + function safeCastTo96(uint256 x) internal pure returns (uint96 y) { + require(x < 1 << 96); + + y = uint96(x); + } + + function safeCastTo64(uint256 x) internal pure returns (uint64 y) { + require(x < 1 << 64); + + y = uint64(x); + } + + function safeCastTo32(uint256 x) internal pure returns (uint32 y) { + require(x < 1 << 32); + + y = uint32(x); + } + + function safeCastTo24(uint256 x) internal pure returns (uint24 y) { + require(x < 1 << 24); + + y = uint24(x); + } + + function safeCastTo16(uint256 x) internal pure returns (uint16 y) { + require(x < 1 << 16); + + y = uint16(x); + } + + function safeCastTo8(uint256 x) internal pure returns (uint8 y) { + require(x < 1 << 8); + + y = uint8(x); + } +} + +// Rewards logic inspired by xERC20 (https://github.com/ZeframLou/playpen/blob/main/src/xERC20.sol) + +/** + @title An xERC4626 Single Staking Contract Interface + @notice This contract allows users to autocompound rewards denominated in an underlying reward token. + It is fully compatible with [ERC4626](https://eips.ethereum.org/EIPS/eip-4626) allowing for DeFi composability. + It maintains balances using internal accounting to prevent instantaneous changes in the exchange rate. + NOTE: an exception is at contract creation, when a reward cycle begins before the first deposit. After the first deposit, exchange rate updates smoothly. + + Operates on "cycles" which distribute the rewards surplus over the internal balance to users linearly over the remainder of the cycle window. +*/ +interface IxERC4626 { + /*//////////////////////////////////////////////////////// + Custom Errors + ////////////////////////////////////////////////////////*/ + + /// @dev thrown when syncing before cycle ends. + error SyncError(); + + /*//////////////////////////////////////////////////////// + Events + ////////////////////////////////////////////////////////*/ + + /// @dev emit every time a new rewards cycle starts + event NewRewardsCycle(uint32 indexed cycleEnd, uint256 rewardAmount); + + /*//////////////////////////////////////////////////////// + View Methods + ////////////////////////////////////////////////////////*/ + + /// @notice the maximum length of a rewards cycle + function rewardsCycleLength() external view returns (uint32); + + /// @notice the effective start of the current cycle + /// NOTE: This will likely be after `rewardsCycleEnd - rewardsCycleLength` as this is set as block.timestamp of the last `syncRewards` call. + function lastSync() external view returns (uint32); + + /// @notice the end of the current cycle. Will always be evenly divisible by `rewardsCycleLength`. + function rewardsCycleEnd() external view returns (uint32); + + /// @notice the amount of rewards distributed in a the most recent cycle + function lastRewardAmount() external view returns (uint192); + + /*//////////////////////////////////////////////////////// + State Changing Methods + ////////////////////////////////////////////////////////*/ + + /// @notice Distributes rewards to xERC4626 holders. + /// All surplus `asset` balance of the contract over the internal balance becomes queued for the next cycle. + function syncRewards() external; +} + +/** + @title An xERC4626 Single Staking Contract + @notice This contract allows users to autocompound rewards denominated in an underlying reward token. + It is fully compatible with [ERC4626](https://eips.ethereum.org/EIPS/eip-4626) allowing for DeFi composability. + It maintains balances using internal accounting to prevent instantaneous changes in the exchange rate. + NOTE: an exception is at contract creation, when a reward cycle begins before the first deposit. After the first deposit, exchange rate updates smoothly. + + Operates on "cycles" which distribute the rewards surplus over the internal balance to users linearly over the remainder of the cycle window. +*/ +abstract contract xERC4626 is IxERC4626, ERC4626 { + using SafeCastLib for *; + + /// @notice the maximum length of a rewards cycle + uint32 public immutable rewardsCycleLength; + + /// @notice the effective start of the current cycle + uint32 public lastSync; + + /// @notice the end of the current cycle. Will always be evenly divisible by `rewardsCycleLength`. + uint32 public rewardsCycleEnd; + + /// @notice the amount of rewards distributed in a the most recent cycle. + uint192 public lastRewardAmount; + + uint256 internal storedTotalAssets; + + constructor(uint32 _rewardsCycleLength) { + rewardsCycleLength = _rewardsCycleLength; + // seed initial rewardsCycleEnd + rewardsCycleEnd = (block.timestamp.safeCastTo32() / rewardsCycleLength) * rewardsCycleLength; + } + + /// @notice Compute the amount of tokens available to share holders. + /// Increases linearly during a reward distribution period from the sync call, not the cycle start. + function totalAssets() public view override returns (uint256) { + // cache global vars + uint256 storedTotalAssets_ = storedTotalAssets; + uint192 lastRewardAmount_ = lastRewardAmount; + uint32 rewardsCycleEnd_ = rewardsCycleEnd; + uint32 lastSync_ = lastSync; + + if (block.timestamp >= rewardsCycleEnd_) { + // no rewards or rewards fully unlocked + // entire reward amount is available + return storedTotalAssets_ + lastRewardAmount_; + } + + // rewards not fully unlocked + // add unlocked rewards to stored total + uint256 unlockedRewards = (lastRewardAmount_ * (block.timestamp - lastSync_)) / (rewardsCycleEnd_ - lastSync_); + return storedTotalAssets_ + unlockedRewards; + } + + // Update storedTotalAssets on withdraw/redeem + function beforeWithdraw(uint256 amount, uint256 shares) internal virtual override { + super.beforeWithdraw(amount, shares); + storedTotalAssets -= amount; + } + + // Update storedTotalAssets on deposit/mint + function afterDeposit(uint256 amount, uint256 shares) internal virtual override { + storedTotalAssets += amount; + super.afterDeposit(amount, shares); + } + + /// @notice Distributes rewards to xERC4626 holders. + /// All surplus `asset` balance of the contract over the internal balance becomes queued for the next cycle. + function syncRewards() public virtual { + uint192 lastRewardAmount_ = lastRewardAmount; + uint32 timestamp = block.timestamp.safeCastTo32(); + + if (timestamp < rewardsCycleEnd) revert SyncError(); + + uint256 storedTotalAssets_ = storedTotalAssets; + uint256 nextRewards = asset.balanceOf(address(this)) - storedTotalAssets_ - lastRewardAmount_; + + storedTotalAssets = storedTotalAssets_ + lastRewardAmount_; // SSTORE + + uint32 end = ((timestamp + rewardsCycleLength) / rewardsCycleLength) * rewardsCycleLength; + + if (end - timestamp < rewardsCycleLength / 20) { + end += rewardsCycleLength; + } + + // Combined single SSTORE + lastRewardAmount = nextRewards.safeCastTo192(); + lastSync = timestamp; + rewardsCycleEnd = end; + + emit NewRewardsCycle(end, nextRewards); + } +} + +// OpenZeppelin Contracts v4.4.1 (security/ReentrancyGuard.sol) + +/** + * @dev Contract module that helps prevent reentrant calls to a function. + * + * Inheriting from `ReentrancyGuard` will make the {nonReentrant} modifier + * available, which can be applied to functions to make sure there are no nested + * (reentrant) calls to them. + * + * Note that because there is a single `nonReentrant` guard, functions marked as + * `nonReentrant` may not call one another. This can be worked around by making + * those functions `private`, and then adding `external` `nonReentrant` entry + * points to them. + * + * TIP: If you would like to learn more about reentrancy and alternative ways + * to protect against it, check out our blog post + * https://blog.openzeppelin.com/reentrancy-after-istanbul/[Reentrancy After Istanbul]. + */ +abstract contract ReentrancyGuard { + // Booleans are more expensive than uint256 or any type that takes up a full + // word because each write operation emits an extra SLOAD to first read the + // slot's contents, replace the bits taken up by the boolean, and then write + // back. This is the compiler's defense against contract upgrades and + // pointer aliasing, and it cannot be disabled. + + // The values being non-zero value makes deployment a bit more expensive, + // but in exchange the refund on every call to nonReentrant will be lower in + // amount. Since refunds are capped to a percentage of the total + // transaction's gas, it is best to keep them low in cases like this one, to + // increase the likelihood of the full refund coming into effect. + uint256 private constant _NOT_ENTERED = 1; + uint256 private constant _ENTERED = 2; + + uint256 private _status; + + constructor() { + _status = _NOT_ENTERED; + } + + /** + * @dev Prevents a contract from calling itself, directly or indirectly. + * Calling a `nonReentrant` function from another `nonReentrant` + * function is not supported. It is possible to prevent this from happening + * by making the `nonReentrant` function external, and making it call a + * `private` function that does the actual work. + */ + modifier nonReentrant() { + _nonReentrantBefore(); + _; + _nonReentrantAfter(); + } + + function _nonReentrantBefore() private { + // On the first call to nonReentrant, _status will be _NOT_ENTERED + require(_status != _ENTERED, "ReentrancyGuard: reentrant call"); + + // Any calls to nonReentrant after this point will fail + _status = _ENTERED; + } + + function _nonReentrantAfter() private { + // By storing the original value once again, a refund is triggered (see + // https://eips.ethereum.org/EIPS/eip-2200) + _status = _NOT_ENTERED; + } +} + +/// @title Vault token for staked frxETH +/// @notice Is a vault that takes frxETH and gives you sfrxETH erc20 tokens +/** @dev Exchange rate between frxETH and sfrxETH floats, you can convert your sfrxETH for more frxETH over time. + Exchange rate increases as the frax msig mints new frxETH corresponding to the staking yield and drops it into the vault (sfrxETH contract). + There is a short time period, “cycles” which the exchange rate increases linearly over. This is to prevent gaming the exchange rate (MEV). + The cycles are constant length, but calling syncRewards slightly into a would-be cycle keeps the same would-be endpoint (so cycle ends are every X seconds). + Someone must call syncRewards, which queues any new frxETH in the contract to be added to the redeemable amount. + sfrxETH adheres to ERC-4626 vault specs + Mint vs Deposit + mint() - deposit targeting a specific number of sfrxETH out + deposit() - deposit knowing a specific number of frxETH in */ +contract sfrxETH is xERC4626, ReentrancyGuard { + + modifier andSync { + if (block.timestamp >= rewardsCycleEnd) { syncRewards(); } + _; + } + + /* ========== CONSTRUCTOR ========== */ + constructor(ERC20 _underlying, uint32 _rewardsCycleLength) + ERC4626(_underlying, "Staked Frax Ether", "sfrxETH") + xERC4626(_rewardsCycleLength) + {} + + /// @notice inlines syncRewards with deposits when able + function deposit(uint256 assets, address receiver) public override andSync returns (uint256 shares) { + return super.deposit(assets, receiver); + } + + /// @notice inlines syncRewards with mints when able + function mint(uint256 shares, address receiver) public override andSync returns (uint256 assets) { + return super.mint(shares, receiver); + } + + /// @notice inlines syncRewards with withdrawals when able + function withdraw( + uint256 assets, + address receiver, + address owner + ) public override andSync returns (uint256 shares) { + return super.withdraw(assets, receiver, owner); + } + + /// @notice inlines syncRewards with redemptions when able + function redeem( + uint256 shares, + address receiver, + address owner + ) public override andSync returns (uint256 assets) { + return super.redeem(shares, receiver, owner); + } + + /// @notice How much frxETH is 1E18 sfrxETH worth. Price is in ETH, not USD + function pricePerShare() public view returns (uint256) { + return convertToAssets(1e18); + } + + /// @notice Approve and deposit() in one transaction + function depositWithSignature( + uint256 assets, + address receiver, + uint256 deadline, + bool approveMax, + uint8 v, + bytes32 r, + bytes32 s + ) external nonReentrant returns (uint256 shares) { + uint256 amount = approveMax ? type(uint256).max : assets; + asset.permit(msg.sender, address(this), amount, deadline, v, r, s); + return (deposit(assets, receiver)); + } + +} \ No newline at end of file diff --git a/src/hardhat/contracts/Misc_AMOs/convex/IConvexCvxLPRewardPoolCombo.sol b/src/hardhat/contracts/Misc_AMOs/convex/IConvexCvxLPRewardPoolCombo.sol new file mode 100644 index 00000000..ad1589e0 --- /dev/null +++ b/src/hardhat/contracts/Misc_AMOs/convex/IConvexCvxLPRewardPoolCombo.sol @@ -0,0 +1,47 @@ +// SPDX-License-Identifier: GPL-2.0-or-later +pragma solidity ^0.8.0; + +interface IConvexCvxLPRewardPoolCombo { + struct EarnedData { + address token; + uint256 amount; + } + + function addExtraReward ( address _token ) external; + function allowance ( address owner, address spender ) external view returns ( uint256 ); + function approve ( address spender, uint256 amount ) external returns ( bool ); + function balanceOf ( address account ) external view returns ( uint256 ); + function claimable_reward ( address, address ) external view returns ( uint256 ); + function convexBooster ( ) external view returns ( address ); + function convexPoolId ( ) external view returns ( uint256 ); + function convexStaker ( ) external view returns ( address ); + function crv ( ) external view returns ( address ); + function curveGauge ( ) external view returns ( address ); + function decimals ( ) external pure returns ( uint8 ); + function decreaseAllowance ( address spender, uint256 subtractedValue ) external returns ( bool ); + function earned ( address _account ) external returns ( EarnedData[] memory claimable ); + function emergencyWithdraw ( uint256 _amount ) external returns ( bool ); + function getReward ( address _account, address _forwardTo ) external; + function getReward ( address _account ) external; + function increaseAllowance ( address spender, uint256 addedValue ) external returns ( bool ); + function initialize ( address _crv, address _curveGauge, address _convexStaker, address _convexBooster, address _lptoken, uint256 _poolId ) external; + function invalidateReward ( address _token ) external; + function maxRewards ( ) external view returns ( uint256 ); + function name ( ) external view returns ( string memory ); + function rewardHook ( ) external view returns ( address ); + function rewardLength ( ) external view returns ( uint256 ); + function rewardMap ( address ) external view returns ( uint256 ); + function rewardRedirect ( address ) external view returns ( address ); + function reward_integral_for ( address, address ) external view returns ( uint256 ); + function rewards ( uint256 ) external view returns ( address reward_token, uint256 reward_integral, uint256 reward_remaining ); + function setRewardHook ( address _hook ) external; + function setRewardRedirect ( address _to ) external; + function stakeFor ( address _for, uint256 _amount ) external returns ( bool ); + function symbol ( ) external view returns ( string memory ); + function totalSupply ( ) external view returns ( uint256 ); + function transfer ( address recipient, uint256 amount ) external returns ( bool ); + function transferFrom ( address sender, address recipient, uint256 amount ) external returns ( bool ); + function user_checkpoint ( address _account ) external returns ( bool ); + function withdraw ( uint256 _amount, bool _claim ) external returns ( bool ); + function withdrawAll ( bool claim ) external; +} diff --git a/src/hardhat/contracts/Misc_AMOs/curve/I3poolAndToken.sol b/src/hardhat/contracts/Misc_AMOs/curve/I3poolAndToken.sol new file mode 100644 index 00000000..f4d3a8d9 --- /dev/null +++ b/src/hardhat/contracts/Misc_AMOs/curve/I3poolAndToken.sol @@ -0,0 +1,51 @@ +// SPDX-License-Identifier: GPL-2.0-or-later +pragma solidity >=0.8.0; + +interface I3poolAndToken { + function initialize ( string memory _name, string memory _symbol, address _coin, uint256 _rate_multiplier, uint256 _A, uint256 _fee ) external; + function decimals ( ) external view returns ( uint256 ); + function transfer ( address _to, uint256 _value ) external returns ( bool ); + function transferFrom ( address _from, address _to, uint256 _value ) external returns ( bool ); + function approve ( address _spender, uint256 _value ) external returns ( bool ); + function permit ( address _owner, address _spender, uint256 _value, uint256 _deadline, uint8 _v, bytes32 _r, bytes32 _s ) external returns ( bool ); + function balances ( uint256 i ) external view returns ( uint256 ); + function get_balances ( ) external view returns ( uint256[2] memory ); + function admin_fee ( ) external view returns ( uint256 ); + function A ( ) external view returns ( uint256 ); + function A_precise ( ) external view returns ( uint256 ); + function get_virtual_price ( ) external view returns ( uint256 ); + function calc_token_amount ( uint256[2] memory _amounts, bool _is_deposit ) external view returns ( uint256 ); + function add_liquidity ( uint256[2] memory _amounts, uint256 _min_mint_amount ) external returns ( uint256 ); + function add_liquidity ( uint256[2] memory _amounts, uint256 _min_mint_amount, address _receiver ) external returns ( uint256 ); + function get_dy ( int128 i, int128 j, uint256 dx ) external view returns ( uint256 ); + function get_dy_underlying ( int128 i, int128 j, uint256 dx ) external view returns ( uint256 ); + function exchange ( int128 i, int128 j, uint256 _dx, uint256 _min_dy ) external returns ( uint256 ); + function exchange ( int128 i, int128 j, uint256 _dx, uint256 _min_dy, address _receiver ) external returns ( uint256 ); + function exchange_underlying ( int128 i, int128 j, uint256 _dx, uint256 _min_dy ) external returns ( uint256 ); + function exchange_underlying ( int128 i, int128 j, uint256 _dx, uint256 _min_dy, address _receiver ) external returns ( uint256 ); + function remove_liquidity ( uint256 _burn_amount, uint256[2] memory _min_amounts ) external returns ( uint256[2] memory ); + function remove_liquidity ( uint256 _burn_amount, uint256[2] memory _min_amounts, address _receiver ) external returns ( uint256[2] memory ); + function remove_liquidity_imbalance ( uint256[2] memory _amounts, uint256 _max_burn_amount ) external returns ( uint256 ); + function remove_liquidity_imbalance ( uint256[2] memory _amounts, uint256 _max_burn_amount, address _receiver ) external returns ( uint256 ); + function calc_withdraw_one_coin ( uint256 _burn_amount, int128 i ) external view returns ( uint256 ); + function remove_liquidity_one_coin ( uint256 _burn_amount, int128 i, uint256 _min_received ) external returns ( uint256 ); + function remove_liquidity_one_coin ( uint256 _burn_amount, int128 i, uint256 _min_received, address _receiver ) external returns ( uint256 ); + function ramp_A ( uint256 _future_A, uint256 _future_time ) external; + function stop_ramp_A ( ) external; + function withdraw_admin_fees ( ) external; + function version ( ) external view returns ( string memory ); + function coins ( uint256 arg0 ) external view returns ( address ); + function admin_balances ( uint256 arg0 ) external view returns ( uint256 ); + function fee ( ) external view returns ( uint256 ); + function initial_A ( ) external view returns ( uint256 ); + function future_A ( ) external view returns ( uint256 ); + function initial_A_time ( ) external view returns ( uint256 ); + function future_A_time ( ) external view returns ( uint256 ); + function name ( ) external view returns ( string memory ); + function symbol ( ) external view returns ( string memory ); + function balanceOf ( address arg0 ) external view returns ( uint256 ); + function allowance ( address arg0, address arg1 ) external view returns ( uint256 ); + function totalSupply ( ) external view returns ( uint256 ); + function DOMAIN_SEPARATOR ( ) external view returns ( bytes32 ); + function nonces ( address arg0 ) external view returns ( uint256 ); +} \ No newline at end of file diff --git a/src/hardhat/contracts/Misc_AMOs/curve/ICurveChildLiquidityGauge.sol b/src/hardhat/contracts/Misc_AMOs/curve/ICurveChildLiquidityGauge.sol new file mode 100644 index 00000000..628b1659 --- /dev/null +++ b/src/hardhat/contracts/Misc_AMOs/curve/ICurveChildLiquidityGauge.sol @@ -0,0 +1,71 @@ +// SPDX-License-Identifier: GPL-2.0-or-later +pragma solidity ^0.8.0; + +interface ICurveChildLiquidityGauge { + + struct Reward { + address distributor; + uint256 period_finish; + uint256 rate; + uint256 last_update; + uint256 integral; + } + + + function deposit ( uint256 _value ) external; + function deposit ( uint256 _value, address _user ) external; + function deposit ( uint256 _value, address _user, bool _claim_rewards ) external; + function withdraw ( uint256 _value ) external; + function withdraw ( uint256 _value, address _user ) external; + function withdraw ( uint256 _value, address _user, bool _claim_rewards ) external; + function transferFrom ( address _from, address _to, uint256 _value ) external returns ( bool ); + function approve ( address _spender, uint256 _value ) external returns ( bool ); + function permit ( address _owner, address _spender, uint256 _value, uint256 _deadline, uint8 _v, bytes32 _r, bytes32 _s ) external returns ( bool ); + function transfer ( address _to, uint256 _value ) external returns ( bool ); + function increaseAllowance ( address _spender, uint256 _added_value ) external returns ( bool ); + function decreaseAllowance ( address _spender, uint256 _subtracted_value ) external returns ( bool ); + function user_checkpoint ( address addr ) external returns ( bool ); + function claimable_tokens ( address addr ) external returns ( uint256 ); + function claimed_reward ( address _addr, address _token ) external view returns ( uint256 ); + function claimable_reward ( address _user, address _reward_token ) external view returns ( uint256 ); + function set_rewards_receiver ( address _receiver ) external; + function claim_rewards ( ) external; + function claim_rewards ( address _addr ) external; + function claim_rewards ( address _addr, address _receiver ) external; + function add_reward ( address _reward_token, address _distributor ) external; + function set_reward_distributor ( address _reward_token, address _distributor ) external; + function deposit_reward_token ( address _reward_token, uint256 _amount ) external; + function set_manager ( address _manager ) external; + function update_voting_escrow ( ) external; + function set_killed ( bool _is_killed ) external; + function decimals ( ) external view returns ( uint256 ); + function integrate_checkpoint ( ) external view returns ( uint256 ); + function version ( ) external view returns ( string memory ); + function factory ( ) external view returns ( address ); + function initialize ( address _lp_token, address _manager ) external; + function DOMAIN_SEPARATOR ( ) external view returns ( bytes32 ); + function nonces ( address arg0 ) external view returns ( uint256 ); + function name ( ) external view returns ( string memory ); + function symbol ( ) external view returns ( string memory ); + function allowance ( address arg0, address arg1 ) external view returns ( uint256 ); + function balanceOf ( address arg0 ) external view returns ( uint256 ); + function totalSupply ( ) external view returns ( uint256 ); + function lp_token ( ) external view returns ( address ); + function manager ( ) external view returns ( address ); + function voting_escrow ( ) external view returns ( address ); + function working_balances ( address arg0 ) external view returns ( uint256 ); + function working_supply ( ) external view returns ( uint256 ); + function period ( ) external view returns ( uint256 ); + function period_timestamp ( uint256 arg0 ) external view returns ( uint256 ); + function integrate_checkpoint_of ( address arg0 ) external view returns ( uint256 ); + function integrate_fraction ( address arg0 ) external view returns ( uint256 ); + function integrate_inv_supply ( uint256 arg0 ) external view returns ( uint256 ); + function integrate_inv_supply_of ( address arg0 ) external view returns ( uint256 ); + function reward_count ( ) external view returns ( uint256 ); + function reward_tokens ( uint256 arg0 ) external view returns ( address ); + function reward_data ( address arg0 ) external view returns ( Reward memory ); + function rewards_receiver ( address arg0 ) external view returns ( address ); + function reward_integral_for ( address arg0, address arg1 ) external view returns ( uint256 ); + function is_killed ( ) external view returns ( bool ); + function inflation_rate ( uint256 arg0 ) external view returns ( uint256 ); +} diff --git a/src/hardhat/contracts/Misc_AMOs/curve/ICurveTricryptoOptimizedWETH.sol b/src/hardhat/contracts/Misc_AMOs/curve/ICurveTricryptoOptimizedWETH.sol new file mode 100644 index 00000000..ed61195f --- /dev/null +++ b/src/hardhat/contracts/Misc_AMOs/curve/ICurveTricryptoOptimizedWETH.sol @@ -0,0 +1,83 @@ +// SPDX-License-Identifier: GPL-2.0-or-later +pragma solidity >=0.8.0; + +interface ICurveTricryptoOptimizedWETH { + function exchange ( uint256 i, uint256 j, uint256 dx, uint256 min_dy ) external returns ( uint256 ); + function exchange ( uint256 i, uint256 j, uint256 dx, uint256 min_dy, bool use_eth ) external returns ( uint256 ); + function exchange ( uint256 i, uint256 j, uint256 dx, uint256 min_dy, bool use_eth, address receiver ) external returns ( uint256 ); + function exchange_underlying ( uint256 i, uint256 j, uint256 dx, uint256 min_dy ) external returns ( uint256 ); + function exchange_underlying ( uint256 i, uint256 j, uint256 dx, uint256 min_dy, address receiver ) external returns ( uint256 ); + function exchange_extended ( uint256 i, uint256 j, uint256 dx, uint256 min_dy, bool use_eth, address sender, address receiver, bytes32 cb ) external returns ( uint256 ); + function add_liquidity ( uint256[3] memory amounts, uint256 min_mint_amount ) external returns ( uint256 ); + function add_liquidity ( uint256[3] memory amounts, uint256 min_mint_amount, bool use_eth ) external returns ( uint256 ); + function add_liquidity ( uint256[3] memory amounts, uint256 min_mint_amount, bool use_eth, address receiver ) external returns ( uint256 ); + function remove_liquidity ( uint256 _amount, uint256[3] memory min_amounts ) external returns ( uint256[3] memory ); + function remove_liquidity ( uint256 _amount, uint256[3] memory min_amounts, bool use_eth ) external returns ( uint256[3] memory ); + function remove_liquidity ( uint256 _amount, uint256[3] memory min_amounts, bool use_eth, address receiver ) external returns ( uint256[3] memory ); + function remove_liquidity ( uint256 _amount, uint256[3] memory min_amounts, bool use_eth, address receiver, bool claim_admin_fees ) external returns ( uint256[3] memory ); + function remove_liquidity_one_coin ( uint256 token_amount, uint256 i, uint256 min_amount ) external returns ( uint256 ); + function remove_liquidity_one_coin ( uint256 token_amount, uint256 i, uint256 min_amount, bool use_eth ) external returns ( uint256 ); + function remove_liquidity_one_coin ( uint256 token_amount, uint256 i, uint256 min_amount, bool use_eth, address receiver ) external returns ( uint256 ); + function claim_admin_fees ( ) external; + function transferFrom ( address _from, address _to, uint256 _value ) external returns ( bool ); + function transfer ( address _to, uint256 _value ) external returns ( bool ); + function approve ( address _spender, uint256 _value ) external returns ( bool ); + function increaseAllowance ( address _spender, uint256 _add_value ) external returns ( bool ); + function decreaseAllowance ( address _spender, uint256 _sub_value ) external returns ( bool ); + function permit ( address _owner, address _spender, uint256 _value, uint256 _deadline, uint8 _v, bytes32 _r, bytes32 _s ) external returns ( bool ); + function fee_receiver ( ) external view returns ( address ); + function calc_token_amount ( uint256[3] memory amounts, bool deposit ) external view returns ( uint256 ); + function get_dy ( uint256 i, uint256 j, uint256 dx ) external view returns ( uint256 ); + function get_dx ( uint256 i, uint256 j, uint256 dy ) external view returns ( uint256 ); + function lp_price ( ) external view returns ( uint256 ); + function get_virtual_price ( ) external view returns ( uint256 ); + function price_oracle ( uint256 k ) external view returns ( uint256 ); + function last_prices ( uint256 k ) external view returns ( uint256 ); + function price_scale ( uint256 k ) external view returns ( uint256 ); + function fee ( ) external view returns ( uint256 ); + function calc_withdraw_one_coin ( uint256 token_amount, uint256 i ) external view returns ( uint256 ); + function calc_token_fee ( uint256[3] memory amounts, uint256[3] memory xp ) external view returns ( uint256 ); + function A ( ) external view returns ( uint256 ); + function gamma ( ) external view returns ( uint256 ); + function mid_fee ( ) external view returns ( uint256 ); + function out_fee ( ) external view returns ( uint256 ); + function fee_gamma ( ) external view returns ( uint256 ); + function allowed_extra_profit ( ) external view returns ( uint256 ); + function adjustment_step ( ) external view returns ( uint256 ); + function ma_time ( ) external view returns ( uint256 ); + function precisions ( ) external view returns ( uint256[3] memory ); + function fee_calc ( uint256[3] memory xp ) external view returns ( uint256 ); + function DOMAIN_SEPARATOR ( ) external view returns ( bytes32 ); + function ramp_A_gamma ( uint256 future_A, uint256 future_gamma, uint256 future_time ) external; + function stop_ramp_A_gamma ( ) external; + function commit_new_parameters ( uint256 _new_mid_fee, uint256 _new_out_fee, uint256 _new_fee_gamma, uint256 _new_allowed_extra_profit, uint256 _new_adjustment_step, uint256 _new_ma_time ) external; + function apply_new_parameters ( ) external; + function revert_new_parameters ( ) external; + function WETH20 ( ) external view returns ( address ); + function MATH ( ) external view returns ( address ); + function coins ( uint256 arg0 ) external view returns ( address ); + function factory ( ) external view returns ( address ); + function last_prices_timestamp ( ) external view returns ( uint256 ); + function initial_A_gamma ( ) external view returns ( uint256 ); + function initial_A_gamma_time ( ) external view returns ( uint256 ); + function future_A_gamma ( ) external view returns ( uint256 ); + function future_A_gamma_time ( ) external view returns ( uint256 ); + function balances ( uint256 arg0 ) external view returns ( uint256 ); + function D ( ) external view returns ( uint256 ); + function xcp_profit ( ) external view returns ( uint256 ); + function xcp_profit_a ( ) external view returns ( uint256 ); + function virtual_price ( ) external view returns ( uint256 ); + function packed_rebalancing_params ( ) external view returns ( uint256 ); + function packed_fee_params ( ) external view returns ( uint256 ); + function ADMIN_FEE ( ) external view returns ( uint256 ); + function admin_actions_deadline ( ) external view returns ( uint256 ); + function name ( ) external view returns ( string memory ); + function symbol ( ) external view returns ( string memory ); + function decimals ( ) external view returns ( uint8 ); + function version ( ) external view returns ( string memory ); + function balanceOf ( address arg0 ) external view returns ( uint256 ); + function allowance ( address arg0, address arg1 ) external view returns ( uint256 ); + function totalSupply ( ) external view returns ( uint256 ); + function nonces ( address arg0 ) external view returns ( uint256 ); + function salt ( ) external view returns ( bytes32 ); +} diff --git a/src/hardhat/contracts/Staking/FraxCrossChainFarmV3_ERC20.sol b/src/hardhat/contracts/Staking/FraxCrossChainFarmV3_ERC20.sol index aaced3b7..1073feb1 100755 --- a/src/hardhat/contracts/Staking/FraxCrossChainFarmV3_ERC20.sol +++ b/src/hardhat/contracts/Staking/FraxCrossChainFarmV3_ERC20.sol @@ -648,7 +648,10 @@ contract FraxCrossChainFarmV3_ERC20 is Owned, ReentrancyGuard { } // Add additional LPs to an existing locked stake - function lockAdditional(bytes32 kek_id, uint256 addl_liq) updateRewardAndBalance(msg.sender, true) public { + function lockAdditional(bytes32 kek_id, uint256 addl_liq) nonReentrant updateRewardAndBalance(msg.sender, true) public { + // Make sure staking isn't paused + require(!stakingPaused, "Staking paused"); + // Get the stake and its index (LockedStake memory thisStake, uint256 theArrayIndex) = _getStake(msg.sender, kek_id); @@ -682,6 +685,9 @@ contract FraxCrossChainFarmV3_ERC20 is Owned, ReentrancyGuard { // Extends the lock of an existing stake function lockLonger(bytes32 kek_id, uint256 new_ending_ts) nonReentrant updateRewardAndBalance(msg.sender, true) public { + // Make sure staking isn't paused + require(!stakingPaused, "Staking paused"); + // Get the stake and its index (LockedStake memory thisStake, uint256 theArrayIndex) = _getStake(msg.sender, kek_id); diff --git a/src/hardhat/contracts/Staking/FraxCrossChainFarmV3_Pos_Rebase.sol b/src/hardhat/contracts/Staking/FraxCrossChainFarmV3_Pos_Rebase.sol index 9f1edc7b..46c272e2 100755 --- a/src/hardhat/contracts/Staking/FraxCrossChainFarmV3_Pos_Rebase.sol +++ b/src/hardhat/contracts/Staking/FraxCrossChainFarmV3_Pos_Rebase.sol @@ -510,7 +510,10 @@ contract FraxCrossChainFarmV3_ERC20_Pos_Rebase is Owned, ReentrancyGuard { // Add additional LPs to an existing locked stake // REBASE: If you simply want to accrue interest, call this with addl_liq = 0 - function lockAdditional(bytes32 kek_id, uint256 addl_liq) updateRewardAndBalance(msg.sender, true) public { + function lockAdditional(bytes32 kek_id, uint256 addl_liq) nonReentrant updateRewardAndBalance(msg.sender, true) public { + // Make sure staking isn't paused + require(!stakingPaused, "Staking paused"); + // Get the stake and its index (LockedStake memory thisStake, uint256 theArrayIndex) = _getStake(msg.sender, kek_id); @@ -550,6 +553,9 @@ contract FraxCrossChainFarmV3_ERC20_Pos_Rebase is Owned, ReentrancyGuard { // Extends the lock of an existing stake function lockLonger(bytes32 kek_id, uint256 new_ending_ts) nonReentrant updateRewardAndBalance(msg.sender, true) public { + // Make sure staking isn't paused + require(!stakingPaused, "Staking paused"); + // Get the stake and its index (LockedStake memory thisStake, uint256 theArrayIndex) = _getStake(msg.sender, kek_id); diff --git a/src/hardhat/contracts/Staking/FraxCrossChainFarmV4_ERC20.sol b/src/hardhat/contracts/Staking/FraxCrossChainFarmV4_ERC20.sol new file mode 100755 index 00000000..6e4fb9fb --- /dev/null +++ b/src/hardhat/contracts/Staking/FraxCrossChainFarmV4_ERC20.sol @@ -0,0 +1,1326 @@ +// SPDX-License-Identifier: GPL-2.0-or-later +pragma solidity >=0.8.0; + +// ==================================================================== +// | ______ _______ | +// | / _____________ __ __ / ____(_____ ____ _____ ________ | +// | / /_ / ___/ __ `| |/_/ / /_ / / __ \/ __ `/ __ \/ ___/ _ \ | +// | / __/ / / / /_/ _> < / __/ / / / / / /_/ / / / / /__/ __/ | +// | /_/ /_/ \__,_/_/|_| /_/ /_/_/ /_/\__,_/_/ /_/\___/\___/ | +// | | +// ==================================================================== +// ==================== FraxCrossChainFarmV4_ERC20 ==================== +// ==================================================================== +// No veFXS logic +// Because of lack of cross-chain reading of the gauge controller's emission rate, +// the contract sets its reward based on its token balance(s) +// Rolling 7 day reward period idea credit goes to denett +// rewardRate0 and rewardRate1 will look weird as people claim, but if you track the rewards actually emitted, +// the numbers do check out +// V3: Accepts canonicalFXS directly from Fraxferry and does not swap out +// V4: Adds variable number of rewards by using arrays instead of fixed names + +// Frax Finance: https://github.com/FraxFinance + +// Primary Author(s) +// Travis Moore: https://github.com/FortisFortuna + +// Reviewer(s) / Contributor(s) +// Sam Kazemian: https://github.com/samkazemian +// Dennis: github.com/denett + +// Originally inspired by Synthetix.io, but heavily modified by the Frax team +// https://raw.githubusercontent.com/Synthetixio/synthetix/develop/contracts/StakingRewards.sol + +import "../Math/Math.sol"; +import "../Math/SafeMath.sol"; +import "../Curve/IveFXS.sol"; +import "../Curve/FraxCrossChainRewarder.sol"; +import "../ERC20/__CROSSCHAIN/IanyFXS.sol"; +import "../ERC20/__CROSSCHAIN/CrossChainCanonicalFXS.sol"; +import "../ERC20/ERC20.sol"; +import '../Uniswap/TransferHelper.sol'; +import "../ERC20/SafeERC20.sol"; + +// import '../Misc_AMOs/balancer/IBalancerVault.sol'; // Balancer frxETH-bb-a-WETH Gauge +// import '../Misc_AMOs/balancer/IBalancerChildLiquidityGauge.sol'; // Balancer frxETH-bb-a-WETH Gauge +// import '../Misc_AMOs/balancer/IL2BalancerPseudoMinter.sol'; // Balancer frxETH-bb-a-WETH Gauge +// import '../Misc_AMOs/balancer/IStablePool.sol'; // Balancer frxETH-bb-a-WETH Gauge +// import "../Oracle/AggregatorV3Interface.sol"; // Balancer frxETH-bb-a-WETH Gauge +import '../Misc_AMOs/convex/IConvexCvxLPRewardPoolCombo.sol'; // Convex cvxLP/RewardPool Combo +import '../Misc_AMOs/curve/ICurveChildLiquidityGauge.sol'; // Convex cvxLP/RewardPool Combo +// import '../Misc_AMOs/curve/I2pool.sol'; // Curve 2-token +import '../Misc_AMOs/curve/I3pool.sol'; // Curve 3-token +// import '../Misc_AMOs/curve/I3poolAndToken.sol'; // Curve 3-token with pool +// import '../Misc_AMOs/kyberswap/elastic/IKSElasticLMV2.sol'; // KyberSwap Elastic +// import '../Misc_AMOs/kyberswap/elastic/IKyberSwapFarmingToken.sol'; // KyberSwap Elastic +// import '../Misc_AMOs/kyberswap/elastic/IKSReinvestmentTokenPool.sol'; // KyberSwap Elastic +// import "../Misc_AMOs/kyberswap/factory/IKyberFactory.sol"; // KyberSwap Elastic +// import "../Misc_AMOs/kyberswap/elastic/IKyberSwapFarmingToken.sol"; // KyberSwap Elastic +// import "../Oracle/ComboOracle_KyberSwapElasticV2.sol"; // KyberSwap Elastic +// import '../Misc_AMOs/mstable/IFeederPool.sol'; // mStable +// import '../Misc_AMOs/impossible/IStableXPair.sol'; // Impossible +// import '../Misc_AMOs/mstable/IFeederPool.sol'; // mStable +// import '../Misc_AMOs/saddle/ISaddleLPToken.sol'; // Saddle Arbitrum L2D4 +// import '../Misc_AMOs/saddle/ISaddlePermissionlessSwap.sol'; // Saddle Arbitrum L2D4 +// import '../Misc_AMOs/sentiment/ILToken.sol'; // Sentiment LFrax +// import '../Misc_AMOs/snowball/ILPToken.sol'; // Snowball S4D - [Part 1] +// import '../Misc_AMOs/snowball/ISwapFlashLoan.sol'; // Snowball S4D - [Part 2] +// import '../Uniswap/Interfaces/IUniswapV2Pair.sol'; // Uniswap V2 + +import "../Utils/ReentrancyGuard.sol"; + +// Inheritance +import "./Owned.sol"; + + +/// @title FraxCrossChainFarmV4_ERC20 +/// @notice Used as a farm, usually fed by rewards dropped in from various sources +contract FraxCrossChainFarmV4_ERC20 is Owned, ReentrancyGuard { + using SafeMath for uint256; + using SafeERC20 for ERC20; + + /* ========== STATE VARIABLES ========== */ + + /// @notice Future address of veFXS, if applicable + IveFXS public veFXS; + + /// @notice Array of all the reward tokens + address[] public rewardTokens; + + // // KyberSwap Elastic + // // Manually set during deploy + // // =================================================================== + // // <>KYBERSWAP<>KYBERSWAP<>KYBERSWAP<>KYBERSWAP<>KYBERSWAP<>KYBERSWAP<>KYBERSWAP<> + // IKyberSwapFarmingToken public stakingToken; // KyberSwap Elastic + // ComboOracle_KyberSwapElasticV2 public KSE_ComboOracleV2 = ComboOracle_KyberSwapElasticV2(0xfBCB0F967817c924f83e26e04F0FB28ED4d6276F); // KyberSwap Elastic + // IKyberFactory public immutable kyber_factory = IKyberFactory(0xC7a590291e07B9fe9E64b86c58fD8fC764308C4A); // KyberSwap Elastic + // // Need to seed a starting token to use both as a basis for fraxPerLPToken + // // as well as getting ticks, etc + // uint256 public seed_token_id = 7366; + + // function setSeedTokenID(uint256 _seed_token_id) public onlyByOwnGov { + // seed_token_id = _seed_token_id; + // } + + // function setKyberSwapElasticComboOracle(address _kse_combo_oracle_address) public onlyByOwnGov { + // KSE_ComboOracleV2 = ComboOracle_KyberSwapElasticV2(_kse_combo_oracle_address); + // } + // // <>KYBERSWAP<>KYBERSWAP<>KYBERSWAP<>KYBERSWAP<>KYBERSWAP<>KYBERSWAP<>KYBERSWAP<> + + + // Balancer frxETH-bb-a-WETH Gauge + // IBalancerChildLiquidityGauge public stakingToken; // Balancer frxETH-bb-a-WETH Gauge + // AggregatorV3Interface internal priceFeedETHUSD = AggregatorV3Interface(0xF9680D99D6C9589e2a93a78A04A279e509205945); // For Balancer frxETH-bb-a-WETH Gauge + // function setETHUSDOracle(address _eth_usd_oracle_address) public onlyByOwnGov { + // require(_eth_usd_oracle_address != address(0), "Zero address detected"); + + // priceFeedETHUSD = AggregatorV3Interface(_eth_usd_oracle_address); + // } + // function getLatestETHPriceE8() public view returns (int) { + // // Returns in E8 + // (uint80 roundID, int price, , uint256 updatedAt, uint80 answeredInRound) = priceFeedETHUSD.latestRoundData(); + // require(price >= 0 && updatedAt!= 0 && answeredInRound >= roundID, "Invalid chainlink price"); + + // return price; + // } + + /// @notice The token being staked + // I2pool public stakingToken; // Curve 2-token + // I3pool public stakingToken; // Curve 3-token + // I3poolAndToken public stakingToken; // Curve 3-token with pool + IConvexCvxLPRewardPoolCombo public stakingToken; // Convex cvxLP/RewardPool combo + // IStableXPair public stakingToken; // Impossible + // IFeederPool public stakingToken; // mStable + // ISaddleLPToken public stakingToken; // Saddle L2D4 + // ILToken public stakingToken; // Sentiment LFrax + // ILPToken public stakingToken; // Snowball S4D + // IUniswapV2Pair public stakingToken; // Uniswap V2 + + /// @notice An address where rewards are pulled from, if applicable + FraxCrossChainRewarder public rewarder; + + /// @notice The address of FRAX + address public fraxAddress; + + /// @notice Constant for various precisions + uint256 private constant MULTIPLIER_PRECISION = 1e18; + + /// @notice Governance timelock address + address public timelockAddress; + + /// @notice Gauge controller, if present + address public controllerAddress; + + /// @notice The time the rewards period should finish + uint256 public periodFinish; + + /// @notice The last time this contract was updated + uint256 public lastUpdateTime; + + /// @notice The max weight multiplier you can get for locking your position + uint256 public lock_max_multiplier = uint256(3e18); // E18. 1x = e18 + + /// @notice The lock time needed to get the max weight multiplier + uint256 public lock_time_for_max_multiplier = 3 * 365 * 86400; // 3 years + + /// @notice The minimum lock time required + uint256 public lock_time_min = 1; // 1 second + + /// @notice How much veFXS you must have, per Frax in the LP, in order to get the veFXS boost, if applicable + uint256 public vefxs_per_frax_for_max_boost = uint256(4e18); // E18. 4e18 means 4 veFXS must be held by the staker per 1 FRAX + + /// @notice The max weight multiplier you can get for having veFXS + uint256 public vefxs_max_multiplier = uint256(2e18); // E18. 1x = 1e18 + + /// @notice Tracks the veFXS multiplier of a user + mapping(address => uint256) private _vefxsMultiplierStored; + + /// @notice The reward tokens per second + uint256[] public rewardRates; + + /// @notice Helper to see if a token is a reward token on this farm + mapping(address => bool) internal isRewardToken; + + /// @notice Helper to get the reward token index, given the address of the token + mapping(address => uint256) public rewardTokenAddrToIdx; + + /// @notice The duration of each rewards period + uint256 public rewardsDuration = 604800; // 7 * 86400 (7 days). + + /// @notice The total amount of reward tokens owed to all farmers. Always increments + /// @dev Technically ttlRewsOwed - ttlRewsPaid is what is actually uncollected, but both have to always be increasing + /// for the tracking to work + uint256[] public ttlRewsOwed; + + /// @notice The total amount of reward tokens paid out to all farmers + uint256[] public ttlRewsPaid; + + /// @notice Accumulator for rewardsPerToken + // https://www.paradigm.xyz/2021/05/liquidity-mining-on-uniswap-v3 + uint256[] private rewardsPerTokenStored; + + /// @notice Accumulator for userRewardsPerTokenPaid + mapping(address => mapping(uint256 => uint256)) private userRewardsPerTokenPaid; // staker addr -> token id -> paid amount + + /// @notice Used for tracking current rewards + mapping(address => mapping(uint256 => uint256)) private rewards; // staker addr -> token id -> reward amount + + /// @notice The last time rewards were pulled in + uint256 public lastRewardPull; + + /// @notice The last time a farmer claimed their rewards + mapping(address => uint256) internal lastRewardClaimTime; // staker addr -> timestamp + + /// @notice Total amount of LP in the farm + uint256 private _total_liquidity_locked; + + /// @notice Total weight of farmers, which takes LP amount, veFXS balances, and time locked + uint256 private _total_combined_weight; + + /// @notice A particular farmer's locked LP balance + mapping(address => uint256) private _locked_liquidity; + + /// @notice A particular farmer's weight + mapping(address => uint256) private _combined_weights; + + // Uniswap V2 / Impossible ONLY + /// @notice If FRAX is token0 + bool frax_is_token0; + + /// @notice Locked stake positions for a farmer + mapping(address => LockedStake[]) public lockedStakes; + + /// @notice List of valid migrators (set by governance) + mapping(address => bool) public valid_migrators; + + /// @notice Stakers set which migrator(s) they want to use + mapping(address => mapping(address => bool)) public staker_allowed_migrators; + + /// @notice Used for migrations. Prevents new stakes, but allows LP and reward withdrawals + bool public migrationsOn; + + /// @notice Release locked stakes in case of system migration or emergency + bool public stakesUnlocked; + + /// @notice If withdrawals are paused + bool public withdrawalsPaused; + + /// @notice If reward collections are paused + bool public rewardsCollectionPaused; // For emergencies + + /// @notice If staking is paused + bool public stakingPaused; // For emergencies + + /// @notice If reward collection on withdrawal is disabled + bool public collectRewardsOnWithdrawalPaused; + + /// @notice If this contract has been initialized + bool public isInitialized; + + /// @notice Version + string public version = "0.0.8"; + + /* ========== STRUCTS ========== */ + + /// @notice Information about a particular locked stake + /// @param kek_id A unique ID for the stake + /// @param start_timestamp When the stake was locked + /// @param liquidity How much LP the stake has + /// @param ending_timestamp When the stake should be unlocked + /// @param lock_multiplier Initial weight multiplier from the lock time component. + struct LockedStake { + bytes32 kek_id; + uint256 start_timestamp; + uint256 liquidity; + uint256 ending_timestamp; + uint256 lock_multiplier; // 6 decimals of precision. 1x = 1000000 + } + + /* ========== MODIFIERS ========== */ + + /// @notice Only governance should be able to call + modifier onlyByOwnGov() { + require(msg.sender == owner || msg.sender == timelockAddress, "Not owner or timelock"); + _; + } + + /// @notice Only governance or the controller should be able to call + modifier onlyByOwnGovCtrlr() { + require(msg.sender == owner || msg.sender == timelockAddress || msg.sender == controllerAddress, "Not own, tlk, or ctrlr"); + _; + } + + /// @notice Should be in migration + modifier isMigrating() { + require(migrationsOn == true, "Not in migration"); + _; + } + + /// @notice Staking should not be paused + modifier notStakingPaused() { + require(stakingPaused == false, "Staking paused"); + _; + } + + /// @notice Update rewards and balances + modifier updateRewardAndBalance(address account, bool sync_too) { + _updateRewardAndBalance(account, sync_too, false); + _; + } + + /* ========== CONSTRUCTOR ========== */ + + /// @notice Constructor + /// @param _owner The owner of the farm + /// @param _rewardTokens Array of reward tokens + /// @param _stakingToken The LP token being staked + /// @param _fraxAddress Address of FRAX + /// @param _timelockAddress Address of the timelock + /// @param _rewarder_address Address of the rewarder contract, if applicable + constructor ( + address _owner, + address[] memory _rewardTokens, + address _stakingToken, + address _fraxAddress, + address _timelockAddress, + address _rewarder_address + ) Owned(_owner){ + // Set state variables + fraxAddress = _fraxAddress; + rewardTokens = _rewardTokens; + + // Loop thought the reward tokens + for (uint256 i = 0; i < _rewardTokens.length; i++) { + // For fast token address -> token ID lookups later + rewardTokenAddrToIdx[_rewardTokens[i]] = i; + + // Add to the mapping + isRewardToken[_rewardTokens[i]] = true; + + // Initialize the stored rewards + rewardsPerTokenStored.push(0); + + // Initialize the rewards owed and paid + ttlRewsOwed.push(0); + ttlRewsPaid.push(0); + + // Initialize the reward rates + rewardRates.push(0); + } + + // stakingToken = IBalancerChildLiquidityGauge(_stakingToken); // Balancer frxETH-bb-a-WETH Gauge + stakingToken = IConvexCvxLPRewardPoolCombo(_stakingToken); + // stakingToken = I2pool(_stakingToken); + // stakingToken = I3pool(_stakingToken); + // stakingToken = I3poolAndToken(_stakingToken); + // stakingToken = IStableXPair(_stakingToken); + // stakingToken = IFeederPool(_stakingToken); + // stakingToken = ISaddleLPToken(_stakingToken); + // stakingToken = ILToken(_stakingToken); + // stakingToken = ILPToken(_stakingToken); + // stakingToken = IUniswapV2Pair(_stakingToken); + // stakingToken = IKyberSwapFarmingToken(_stakingToken); // KyberSwap Elastic + + timelockAddress = _timelockAddress; + rewarder = FraxCrossChainRewarder(_rewarder_address); + + // Uniswap V2 / Impossible ONLY + // Need to know which token FRAX is (0 or 1) + // address token0 = stakingToken.token0(); + // if (token0 == fraxAddress) frax_is_token0 = true; + // else frax_is_token0 = false; + + // Other booleans + migrationsOn = false; + stakesUnlocked = false; + + // For initialization + lastUpdateTime = block.timestamp; + periodFinish = block.timestamp.add(rewardsDuration); + } + + /* ========== VIEWS ========== */ + + /// @notice Total locked liquidity tokens + /// @return uint256 Total amount of LP tokens in the farm + function totalLiquidityLocked() external view returns (uint256) { + return _total_liquidity_locked; + } + + /// @notice Locked liquidity for a given account + /// @return uint256 Total amount of LP tokens in the farm for a specific user + function lockedLiquidityOf(address account) external view returns (uint256) { + return _locked_liquidity[account]; + } + + /// @notice Total 'balance' used for calculating the percent of the pool the account owns + /// @return uint256 The combined weight. Takes into account the locked stake time multiplier and veFXS multiplier + function totalCombinedWeight() external view returns (uint256) { + return _total_combined_weight; + } + + /// @notice Combined weight for a specific account + /// @return uint256 The combined weight. + function combinedWeightOf(address account) external view returns (uint256) { + return _combined_weights[account]; + } + + /// @notice All the locked stakes for a given account + /// @return LockedStake Array of LockedStakes + function lockedStakesOf(address account) external view returns (LockedStake[] memory) { + return lockedStakes[account]; + } + + /// @notice The lock multiplier for a given amount of seconds + /// @param secs Number of seconds you are locking + /// @return uint256 The lock multiplier + function lockMultiplier(uint256 secs) public view returns (uint256) { + return Math.min( + lock_max_multiplier, + (secs * lock_max_multiplier) / lock_time_for_max_multiplier + ) ; + } + + /// @notice The last time rewards were applicable. Should be the lesser of the current timestamp, or the end of the last period + /// @return uint256 The last timestamp where rewards were applicable + function lastTimeRewardApplicable() internal view returns (uint256) { + return Math.min(block.timestamp, periodFinish); + } + + /// @notice How much Frax per 1 LP token + /// @return uint256 Amount of Frax + function fraxPerLPToken() public view returns (uint256) { + // Get the amount of FRAX 'inside' of the lp tokens + uint256 frax_per_lp_token; + + // Balancer frxETH-bb-a-WETH Gauge + // ============================================ + // { + // IBalancerVault vault = IBalancerVault(0xBA12222222228d8Ba445958a75a0704d566BF2C8); + // /** + // * `cash` is the number of tokens the Vault currently holds for the Pool. `managed` is the number of tokens + // * withdrawn and held outside the Vault by the Pool's token Asset Manager. The Pool's total balance for `token` + // * equals the sum of `cash` and `managed`. + // */ + + // (uint256 cash, uint256 managed, , ) = vault.getPoolTokenInfo(0xd00f9ca46ce0e4a63067c4657986f0167b0de1e5000000000000000000000b42, 0xEe327F889d5947c1dc1934Bb208a1E792F953E96); + // uint256 frxETH_usd_val_per_lp_e8 = ((cash + managed) * uint256(getLatestETHPriceE8())) / stakingToken.totalSupply(); + // frax_per_lp_token = frxETH_usd_val_per_lp_e8 * (1e10); // We use USD as "Frax" here. Scale up to E18 + // } + + // Convex cvxLP/RewardPool Combo + // ============================================ + { + // Half of the LP is FRAXBP. Half of that should be FRAX. + // Using 0.25 * virtual price for gas savings + ICurveChildLiquidityGauge gauge = ICurveChildLiquidityGauge(stakingToken.curveGauge()); + I3pool pool = I3pool(gauge.lp_token()); + frax_per_lp_token = pool.get_virtual_price() / 4; + } + + // Curve 2-token + // ============================================ + // { + // address coin0 = stakingToken.coins(0); + // uint256 total_frax_reserves; + // if (coin0 == fraxAddress) { + // total_frax_reserves = stakingToken.balances(0); + // } + // else { + // total_frax_reserves = stakingToken.balances(1); + // } + // frax_per_lp_token = total_frax_reserves.mul(1e18).div(stakingToken.totalSupply()); + // } + + // Curve 3-token + // ============================================ + // { + // address coin0 = stakingToken.coins(0); + // address coin1 = stakingToken.coins(1); + // uint256 total_frax_reserves; + // if (coin0 == fraxAddress) { + // total_frax_reserves = stakingToken.balances(0); + // } + // else if (coin1 == fraxAddress) { + // total_frax_reserves = stakingToken.balances(1); + // } + // else { + // total_frax_reserves = stakingToken.balances(2); + // } + // frax_per_lp_token = total_frax_reserves.mul(1e18).div(stakingToken.totalSupply()); + // } + + // Curve 3pool metapool (FRAXBP/Stable) + // ============================================ + // { + // // Half of the LP is FRAXBP. Half of that should be FRAX. + // // Using 0.25 * virtual price for gas savings + // frax_per_lp_token = stakingToken.get_virtual_price() / 4; + // } + + // KyberSwap Elastic + // ============================================ + // { + // // Fetch total pool TVL using the seed token id + // ComboOracle_KyberSwapElasticV2.NFTValueInfo memory nft_value_info = KSE_ComboOracleV2.getNFTValueInfo(seed_token_id); + + // // Assume half of the liquidity is FRAX or FRAX-related, even if it is not. + // frax_per_lp_token = (nft_value_info.pool_tvl_usd * MULTIPLIER_PRECISION) / (stakingToken.totalSupply() * 2); + // } + + // mStable + // ============================================ + // { + // uint256 total_frax_reserves; + // (, IFeederPool.BassetData memory vaultData) = (stakingToken.getBasset(fraxAddress)); + // total_frax_reserves = uint256(vaultData.vaultBalance); + // frax_per_lp_token = total_frax_reserves.mul(1e18).div(stakingToken.totalSupply()); + // } + + // Saddle L2D4 + // ============================================ + // { + // ISaddlePermissionlessSwap ISPS = ISaddlePermissionlessSwap(0xF2839E0b30B5e96083085F498b14bbc12530b734); + // uint256 total_frax = ISPS.getTokenBalance(ISPS.getTokenIndex(fraxAddress)); + // frax_per_lp_token = total_frax.mul(1e18).div(stakingToken.totalSupply()); + // } + + // Most Saddles / Snowball S4D + // ============================================ + // { + // ISwapFlashLoan ISFL = ISwapFlashLoan(0xfeEa4D1BacB0519E8f952460A70719944fe56Ee0); + // uint256 total_frax = ISFL.getTokenBalance(ISFL.getTokenIndex(fraxAddress)); + // frax_per_lp_token = total_frax.mul(1e18).div(stakingToken.totalSupply()); + // } + + // Sentiment LFrax + // ============================================ + // { + // frax_per_lp_token = stakingToken.convertToAssets(1e18); + // } + + // Uniswap V2 & Impossible + // ============================================ + // { + // uint256 total_frax_reserves; + // (uint256 reserve0, uint256 reserve1, ) = (stakingToken.getReserves()); + // if (frax_is_token0) total_frax_reserves = reserve0; + // else total_frax_reserves = reserve1; + + // frax_per_lp_token = total_frax_reserves.mul(1e18).div(stakingToken.totalSupply()); + // } + + + + return frax_per_lp_token; + } + + /// @notice Amount of Frax in the user's locked LP + /// @param account Address of the user + /// @return uint256 Amount of Frax + function userStakedFrax(address account) public view returns (uint256) { + return (fraxPerLPToken()).mul(_locked_liquidity[account]).div(1e18); + } + + /// @notice Minimum amount of veFXS a user needs to have to get the max veFXS boost, given their current position + /// @param account Address of the user + /// @return uint256 Amount of veFXS needed + function minVeFXSForMaxBoost(address account) public view returns (uint256) { + return (userStakedFrax(account)).mul(vefxs_per_frax_for_max_boost).div(MULTIPLIER_PRECISION); + } + + /// @notice The weight boost multiplier from veFXS + /// @param account Address of the user + /// @return uint256 The multiplier + function veFXSMultiplier(address account) public view returns (uint256) { + if (address(veFXS) != address(0)){ + // The claimer gets a boost depending on amount of veFXS they have relative to the amount of FRAX 'inside' + // of their locked LP tokens + uint256 veFXS_needed_for_max_boost = minVeFXSForMaxBoost(account); + if (veFXS_needed_for_max_boost > 0){ + uint256 user_vefxs_fraction = (veFXS.balanceOf(account)).mul(MULTIPLIER_PRECISION).div(veFXS_needed_for_max_boost); + + uint256 vefxs_multiplier = ((user_vefxs_fraction).mul(vefxs_max_multiplier)).div(MULTIPLIER_PRECISION); + + // Cap the boost to the vefxs_max_multiplier + if (vefxs_multiplier > vefxs_max_multiplier) vefxs_multiplier = vefxs_max_multiplier; + + return vefxs_multiplier; + } + else return 0; // This will happen with the first stake, when user_staked_frax is 0 + } + else return 0; + } + + /// @notice The current lock multiplier, due to time, for a given stake. Decays with time + /// @param account Address of the user + /// @param stake_idx Index of the stake + /// @return midpoint_lock_multiplier The current lock multiplier + function calcCurrLockMultiplier(address account, uint256 stake_idx) public view returns (uint256 midpoint_lock_multiplier) { + // Get the stake + LockedStake memory thisStake = lockedStakes[account][stake_idx]; + + // Handles corner case where user never claims for a new stake + // Don't want the multiplier going above the max + uint256 accrue_start_time; + if (lastRewardClaimTime[account] < thisStake.start_timestamp) { + accrue_start_time = thisStake.start_timestamp; + } + else { + accrue_start_time = lastRewardClaimTime[account]; + } + + // If the lock is expired + if (thisStake.ending_timestamp <= block.timestamp) { + // If the lock expired in the time since the last claim, the weight needs to be proportionately averaged this time + if (lastRewardClaimTime[account] < thisStake.ending_timestamp){ + uint256 time_before_expiry = thisStake.ending_timestamp - accrue_start_time; + uint256 time_after_expiry = block.timestamp - thisStake.ending_timestamp; + + // Average the pre-expiry lock multiplier + uint256 pre_expiry_avg_multiplier = lockMultiplier(time_before_expiry / 2); + + // Get the weighted-average lock_multiplier + // uint256 numerator = (pre_expiry_avg_multiplier * time_before_expiry) + (MULTIPLIER_PRECISION * time_after_expiry); + uint256 numerator = (pre_expiry_avg_multiplier * time_before_expiry) + (0 * time_after_expiry); + midpoint_lock_multiplier = numerator / (time_before_expiry + time_after_expiry); + } + else { + // Otherwise, it needs to just be 1x + // midpoint_lock_multiplier = MULTIPLIER_PRECISION; + + // Otherwise, it needs to just be 0x + midpoint_lock_multiplier = 0; + } + } + // If the lock is not expired + else { + // Decay the lock multiplier based on the time left + uint256 avg_time_left; + { + uint256 time_left_p1 = thisStake.ending_timestamp - accrue_start_time; + uint256 time_left_p2 = thisStake.ending_timestamp - block.timestamp; + avg_time_left = (time_left_p1 + time_left_p2) / 2; + } + midpoint_lock_multiplier = lockMultiplier(avg_time_left); + } + + // Sanity check: make sure it never goes above the initial multiplier + if (midpoint_lock_multiplier > thisStake.lock_multiplier) midpoint_lock_multiplier = thisStake.lock_multiplier; + } + + /// @notice Calculate the combined weight for an account + /// @param account Address of the user + /// @return old_combined_weight The old combined weight for the user + /// @return new_vefxs_multiplier The new veFXS multiplier + /// @return new_combined_weight The new combined weight for the user + function calcCurCombinedWeight(address account) public view + returns ( + uint256 old_combined_weight, + uint256 new_vefxs_multiplier, + uint256 new_combined_weight + ) + { + // Get the old combined weight + old_combined_weight = _combined_weights[account]; + + // Get the veFXS multipliers + // For the calculations, use the midpoint (analogous to midpoint Riemann sum) + new_vefxs_multiplier = veFXSMultiplier(account); + + uint256 midpoint_vefxs_multiplier; + if ( + (_locked_liquidity[account] == 0 && _combined_weights[account] == 0) || + (new_vefxs_multiplier >= _vefxsMultiplierStored[account]) + ) { + // This is only called for the first stake to make sure the veFXS multiplier is not cut in half + // Also used if the user increased or maintained their position + midpoint_vefxs_multiplier = new_vefxs_multiplier; + } + else { + // Handles natural decay with a non-increased veFXS position + midpoint_vefxs_multiplier = (new_vefxs_multiplier + _vefxsMultiplierStored[account]) / 2; + } + + // Loop through the locked stakes, first by getting the liquidity * lock_multiplier portion + new_combined_weight = 0; + for (uint256 i = 0; i < lockedStakes[account].length; i++) { + LockedStake memory thisStake = lockedStakes[account][i]; + + // Calculate the midpoint lock multiplier + uint256 midpoint_lock_multiplier = calcCurrLockMultiplier(account, i); + + // Calculate the combined boost + uint256 liquidity = thisStake.liquidity; + uint256 combined_boosted_amount = liquidity + ((liquidity * (midpoint_lock_multiplier + midpoint_vefxs_multiplier)) / MULTIPLIER_PRECISION); + new_combined_weight += combined_boosted_amount; + } + } + + /// @notice The calculated rewardPerTokenStored accumulator + /// @return _rtnRewardsPerTokenStored Array of rewardsPerTokenStored + function rewardPerToken() public view returns (uint256[] memory _rtnRewardsPerTokenStored) { + _rtnRewardsPerTokenStored = new uint256[](rewardTokens.length); + if (_total_liquidity_locked == 0 || _total_combined_weight == 0) { + _rtnRewardsPerTokenStored = rewardsPerTokenStored; + } + else { + // Loop through the reward tokens + for (uint256 i = 0; i < rewardTokens.length; i++) { + _rtnRewardsPerTokenStored[i] = rewardsPerTokenStored[i].add( + lastTimeRewardApplicable().sub(lastUpdateTime).mul(rewardRates[i]).mul(1e18).div(_total_combined_weight) + ); + } + } + + } + + /// @notice The currently earned rewards for a user + /// @param account The staker's address + /// @return _rtnEarned Array of the amounts of reward tokens the staker can currently collect + function earned(address account) public view returns (uint256[] memory _rtnEarned) { + _rtnEarned = new uint256[](rewardTokens.length); + if (_combined_weights[account] == 0){ + for (uint256 i = 0; i < rewardTokens.length; i++) { + _rtnEarned[i] = 0; + } + } + else { + uint256[] memory _rtnRewardsPerToken = rewardPerToken(); + + // Loop through the reward tokens + for (uint256 i = 0; i < rewardTokens.length; i++) { + _rtnEarned[i] = (_combined_weights[account].mul(_rtnRewardsPerToken[i].sub(userRewardsPerTokenPaid[account][i]))).div(1e18).add(rewards[account][i]); + } + } + + } + + /// @notice The duration (usually weekly) reward amounts for each token + /// @return _rtnRewardForDuration Array of the amounts of the reward tokens + function getRewardForDuration() external view returns (uint256[] memory _rtnRewardForDuration) { + _rtnRewardForDuration = new uint256[](rewardTokens.length); + for (uint256 i = 0; i < rewardTokens.length; i++) { + _rtnRewardForDuration[i] = rewardRates[i].mul(rewardsDuration); + } + } + + /* ========== MUTATIVE FUNCTIONS ========== */ + + /// @notice Fetch a stake for a user + /// @param staker_address The address of the user + /// @param kek_id The kek_id of the stake + /// @return locked_stake The stake information, as a LockedStake + /// @return arr_idx The array index of the stake + function _getStake(address staker_address, bytes32 kek_id) internal view returns (LockedStake memory locked_stake, uint256 arr_idx) { + for (uint256 i = 0; i < lockedStakes[staker_address].length; i++) { + if (kek_id == lockedStakes[staker_address][i].kek_id){ + locked_stake = lockedStakes[staker_address][i]; + arr_idx = i; + break; + } + } + require(locked_stake.kek_id == kek_id, "Stake not found"); + + } + + /// @notice Update the reward and balance state for a staker + /// @param account The address of the user + /// @param sync_too If the non-user state should be synced too + /// @param pre_sync_vemxstored The pre-sync veFXS multiplier + function _updateRewardAndBalance(address account, bool sync_too, bool pre_sync_vemxstored) internal { + // Need to retro-adjust some things if the period hasn't been renewed, then start a new one + if (sync_too){ + sync(); + } + + // Used to make sure the veFXS multiplier is correct if a stake is increased, before calcCurCombinedWeight + if (pre_sync_vemxstored){ + _vefxsMultiplierStored[account] = veFXSMultiplier(account); + } + + if (account != address(0)) { + // To keep the math correct, the user's combined weight must be recomputed to account for their + // ever-changing veFXS balance. + ( + uint256 old_combined_weight, + uint256 new_vefxs_multiplier, + uint256 new_combined_weight + ) = calcCurCombinedWeight(account); + + // Calculate the earnings first + _syncEarned(account); + + // Update the user's stored veFXS multipliers + _vefxsMultiplierStored[account] = new_vefxs_multiplier; + + // Update the user's and the global combined weights + if (new_combined_weight >= old_combined_weight) { + uint256 weight_diff = new_combined_weight.sub(old_combined_weight); + _total_combined_weight = _total_combined_weight.add(weight_diff); + _combined_weights[account] = old_combined_weight.add(weight_diff); + } else { + uint256 weight_diff = old_combined_weight.sub(new_combined_weight); + _total_combined_weight = _total_combined_weight.sub(weight_diff); + _combined_weights[account] = old_combined_weight.sub(weight_diff); + } + + } + } + + /// @notice Add additional LPs to an existing locked stake + /// @param kek_id The kek_id of the stake + /// @param addl_liq The amount of additional liquidity to add + function lockAdditional(bytes32 kek_id, uint256 addl_liq) nonReentrant updateRewardAndBalance(msg.sender, true) public { + // Make sure staking isn't paused + require(!stakingPaused, "Staking paused"); + + // Get the stake and its index + (LockedStake memory thisStake, uint256 theArrayIndex) = _getStake(msg.sender, kek_id); + + // Calculate the new amount + uint256 new_amt = thisStake.liquidity + addl_liq; + + // Checks + require(addl_liq >= 0, "Must be nonzero"); + + // Pull the tokens from the sender + TransferHelper.safeTransferFrom(address(stakingToken), msg.sender, address(this), addl_liq); + + // Update the stake + lockedStakes[msg.sender][theArrayIndex] = LockedStake( + kek_id, + thisStake.start_timestamp, + new_amt, + thisStake.ending_timestamp, + thisStake.lock_multiplier + ); + + // Update liquidities + _total_liquidity_locked += addl_liq; + _locked_liquidity[msg.sender] += addl_liq; + + // Need to call to update the combined weights + _updateRewardAndBalance(msg.sender, false, true); + + emit LockedAdditional(msg.sender, kek_id, addl_liq); + } + + /// @notice Extends the lock of an existing stake + /// @param kek_id The kek_id of the stake + /// @param new_ending_ts The new ending timestamp you want to extend to + function lockLonger(bytes32 kek_id, uint256 new_ending_ts) nonReentrant updateRewardAndBalance(msg.sender, true) public { + // Make sure staking isn't paused + require(!stakingPaused, "Staking paused"); + + // Get the stake and its index + (LockedStake memory thisStake, uint256 theArrayIndex) = _getStake(msg.sender, kek_id); + + // Check + require(new_ending_ts > block.timestamp, "Must be in the future"); + + // Calculate some times + uint256 time_left = (thisStake.ending_timestamp > block.timestamp) ? thisStake.ending_timestamp - block.timestamp : 0; + uint256 new_secs = new_ending_ts - block.timestamp; + + // Checks + // require(time_left > 0, "Already expired"); + require(new_secs > time_left, "Cannot shorten lock time"); + require(new_secs >= lock_time_min, "Minimum stake time not met"); + require(new_secs <= lock_time_for_max_multiplier, "Trying to lock for too long"); + + // Update the stake + lockedStakes[msg.sender][theArrayIndex] = LockedStake( + kek_id, + block.timestamp, + thisStake.liquidity, + new_ending_ts, + lockMultiplier(new_secs) + ); + + // Need to call to update the combined weights + _updateRewardAndBalance(msg.sender, false, true); + + emit LockedLonger(msg.sender, kek_id, new_secs, block.timestamp, new_ending_ts); + } + + /// @notice Sync earnings for a specific staker + /// @param account The account to sync + function _syncEarned(address account) internal { + if (account != address(0)) { + // Calculate the earnings + + uint256[] memory _earneds = earned(account); + for (uint256 i = 0; i < rewardTokens.length; i++) { + rewards[account][i] = _earneds[i]; + userRewardsPerTokenPaid[account][i] = rewardsPerTokenStored[i]; + } + } + } + + /// @notice Staker can allow a migrator + /// @param migrator_address The address you want to add as a migrator. The contract owner would need to have approved this address first + function stakerAllowMigrator(address migrator_address) external { + require(valid_migrators[migrator_address], "Invalid migrator address"); + staker_allowed_migrators[msg.sender][migrator_address] = true; + } + + /// @notice Staker can disallow a migrator that they previously allowed + /// @param migrator_address The migrator address you want to disable + function stakerDisallowMigrator(address migrator_address) external { + // Delete from the mapping + delete staker_allowed_migrators[msg.sender][migrator_address]; + } + + /// @notice Lock LP tokens + /// @param liquidity The amount of LP tokens you want to stake + /// @param secs The length of time you want to lock + /// @dev Two different stake functions are needed because of delegateCall and msg.sender issues (important for migration) + function stakeLocked(uint256 liquidity, uint256 secs) nonReentrant public { + _stakeLocked(msg.sender, msg.sender, liquidity, secs, block.timestamp); + } + + /// @notice If this were not internal, and source_address had an infinite approve, this could be exploitable (pull funds from source_address and stake for an arbitrary staker_address) + /// @param staker_address The address of the farmer + /// @param source_address The source of the LP tokens. Most of the time is the farmer, but could be the migrator + /// @param liquidity The amount of LP tokens you want to stake + /// @param secs The length of time you want to lock + /// @param start_timestamp The starting timestamp of the stake. Used by the migrator, otherwise it stays the same + function _stakeLocked( + address staker_address, + address source_address, + uint256 liquidity, + uint256 secs, + uint256 start_timestamp + ) internal updateRewardAndBalance(staker_address, true) { + require(!stakingPaused || valid_migrators[msg.sender] == true, "Staking paused or in migration"); + require(liquidity > 0, "Must stake more than zero"); + require(secs >= lock_time_min, "Minimum stake time not met"); + require(secs <= lock_time_for_max_multiplier,"Trying to lock for too long"); + + uint256 lock_multiplier = lockMultiplier(secs); + bytes32 kek_id = keccak256(abi.encodePacked(staker_address, start_timestamp, liquidity, _locked_liquidity[staker_address])); + lockedStakes[staker_address].push(LockedStake( + kek_id, + start_timestamp, + liquidity, + start_timestamp.add(secs), + lock_multiplier + )); + + // Pull the tokens from the source_address + TransferHelper.safeTransferFrom(address(stakingToken), source_address, address(this), liquidity); + + // Update liquidities + _total_liquidity_locked = _total_liquidity_locked.add(liquidity); + _locked_liquidity[staker_address] = _locked_liquidity[staker_address].add(liquidity); + + // Need to call to update the combined weights + _updateRewardAndBalance(staker_address, false, true); + + emit StakeLocked(staker_address, liquidity, secs, kek_id, source_address); + } + + /// @notice Withdraw a stake. + /// @param kek_id The id for the stake + /// @param claim_rewards Whether you want to claim rewards during withdrawal + /// @dev Two different withdrawLocked functions are needed because of delegateCall and msg.sender issues (important for migration) + function withdrawLocked(bytes32 kek_id, bool claim_rewards) nonReentrant public { + require(withdrawalsPaused == false, "Withdrawals paused"); + _withdrawLocked(msg.sender, msg.sender, kek_id, claim_rewards); + } + + /// @notice No withdrawer == msg.sender check needed since this is only internally callable and the checks are done in the wrapper functions like withdraw(), migrator_withdraw_unlocked() and migrator_withdraw_locked() + /// @param staker_address The address of the staker + /// @param destination_address Destination address for the withdrawn LP + /// @param kek_id The id for the stake + /// @param claim_rewards Whether you want to claim rewards during withdrawal + function _withdrawLocked(address staker_address, address destination_address, bytes32 kek_id, bool claim_rewards) internal { + // Collect rewards first and then update the balances + // collectRewardsOnWithdrawalPaused to be used in an emergency situation if reward is overemitted or not available + // and the user can forfeit rewards to get their principal back. User can also specify it in withdrawLocked + if (claim_rewards || !collectRewardsOnWithdrawalPaused) _getReward(staker_address, destination_address); + else { + // Sync the rewards at least + _updateRewardAndBalance(staker_address, true, false); + } + + (LockedStake memory thisStake, uint256 theArrayIndex) = _getStake(staker_address, kek_id); + require(thisStake.kek_id == kek_id, "Stake not found"); + require(block.timestamp >= thisStake.ending_timestamp || stakesUnlocked == true || valid_migrators[msg.sender] == true, "Stake is still locked!"); + + uint256 liquidity = thisStake.liquidity; + + if (liquidity > 0) { + // Update liquidities + _total_liquidity_locked = _total_liquidity_locked.sub(liquidity); + _locked_liquidity[staker_address] = _locked_liquidity[staker_address].sub(liquidity); + + // Remove the stake from the array + delete lockedStakes[staker_address][theArrayIndex]; + + // Need to call to update the combined weights + _updateRewardAndBalance(staker_address, true, true); + + // Give the tokens to the destination_address + // Should throw if insufficient balance + stakingToken.transfer(destination_address, liquidity); + + emit WithdrawLocked(staker_address, liquidity, kek_id, destination_address); + } + + } + + /// @notice Collect rewards + /// @return uint256 The amounts of collected reward tokens + /// @dev Two different getReward functions are needed because of delegateCall and msg.sender issues (important for migration) + function getReward() external nonReentrant returns (uint256[] memory) { + require(rewardsCollectionPaused == false,"Rewards collection paused"); + return _getReward(msg.sender, msg.sender); + } + + /// @notice Collect rewards (internal) + /// @param rewardee The address of the staker + /// @param destination_address Destination address for the withdrawn LP + /// @return _rtnRewards The amounts of collected reward tokens + /// @dev No withdrawer == msg.sender check needed since this is only internally callable. This distinction is important for the migrator + function _getReward(address rewardee, address destination_address) internal updateRewardAndBalance(rewardee, true) returns (uint256[] memory _rtnRewards) { + _rtnRewards = new uint256[](rewardTokens.length); + for (uint256 i = 0; i < rewardTokens.length; i++) { + _rtnRewards[i] = rewards[rewardee][i]; + + if (_rtnRewards[i] > 0) { + rewards[rewardee][i] = 0; + ERC20(rewardTokens[i]).transfer(destination_address, _rtnRewards[i]); + ttlRewsPaid[i] += _rtnRewards[i]; + emit RewardPaid(rewardee, _rtnRewards[i], rewardTokens[i], destination_address); + } + } + + + // Update the last reward claim time + lastRewardClaimTime[rewardee] = block.timestamp; + } + + /// @notice Quasi-notifyRewardAmount() logic + function syncRewards() internal { + // Bring in rewards, if applicable + if ((block.timestamp).sub(lastRewardPull) >= rewardsDuration) { + if (address(rewarder) != address(0)) { + rewarder.distributeReward(); + } + + // Pull in any 3rd party reward tokens, if applicable, using their specific ABI(s) + // FXS is always assumed to be at [0] + // for (uint256 i = 1; i < rewardTokens.length; i++) { + // if (rewardTokens[i] != address(0)) { + + // } + // } + + { + // Balancer + // ========================= + // IL2BalancerPseudoMinter(0x47B489bf5836f83ABD928C316F8e39bC0587B020).mint(address(stakingToken)); + + // Convex cvxLP/RewardPool Combo + // ========================= + stakingToken.getReward(address(this)); + } + + + lastRewardPull = block.timestamp; + } + + // Loop through all the tokens + uint256 _eligibleElapsedTime = Math.min((block.timestamp).sub(lastUpdateTime), rewardsDuration); // Cut off at the end of the week + uint256[] memory _reward = rewardPerToken(); + for (uint256 i = 0; i < rewardTokens.length; i++) { + // Get the current reward token balances + uint256 _currBal = ERC20(rewardTokens[i]).balanceOf(address(this)); + + // Update the owed amounts based off the old reward rates + // Anything over a week is zeroed (see above) + ttlRewsOwed[i] += rewardRates[i].mul(_eligibleElapsedTime); + + // Update the stored amounts too + rewardsPerTokenStored[i] = _reward[i]; + + // Set the reward rates based on the free amount of tokens + { + // Don't count unpaid rewards as free + uint256 _unpaid = ttlRewsOwed[i].sub(ttlRewsPaid[i]); + + // Handle reward token0 + if (_currBal <= _unpaid){ + // token is depleted, so stop emitting + rewardRates[i] = 0; + } + else { + uint256 _free = _currBal.sub(_unpaid); + rewardRates[i] = (_free).div(rewardsDuration); + } + + } + } + } + + /// @notice Sync the contract + function sync() public { + require(isInitialized, "Contract not initialized"); + + // Make sure the rewardRates are synced to the current reward token balances + syncRewards(); + + // Rolling 7 days rewards period + lastUpdateTime = block.timestamp; + periodFinish = (block.timestamp).add(rewardsDuration); + } + + /* ========== RESTRICTED FUNCTIONS ========== */ + + /// @notice Needed when first deploying the farm, Make sure rewards are present + function initializeDefault() external onlyByOwnGovCtrlr { + require(!isInitialized, "Already initialized"); + isInitialized = true; + + // Sync the contract + sync(); + + emit DefaultInitialization(); + } + + /// @notice Migrator can stake for someone else (they won't be able to withdraw it back though, only staker_address can). + /// @param staker_address The address of the staker + /// @param amount Amount of LP to stake + /// @param secs Seconds for the lock + /// @param start_timestamp Starting timestamp for the lock + function migrator_stakeLocked_for(address staker_address, uint256 amount, uint256 secs, uint256 start_timestamp) external isMigrating { + require(staker_allowed_migrators[staker_address][msg.sender] && valid_migrators[msg.sender], "Mig. invalid or unapproved"); + _stakeLocked(staker_address, msg.sender, amount, secs, start_timestamp); + } + + /// @notice Migrator can withdraw for someone else + /// @param staker_address The address of the staker + /// @param kek_id The id of the stake + function migrator_withdraw_locked(address staker_address, bytes32 kek_id) external isMigrating { + require(staker_allowed_migrators[staker_address][msg.sender] && valid_migrators[msg.sender], "Mig. invalid or unapproved"); + _withdrawLocked(staker_address, msg.sender, kek_id, true); + } + + /// @notice Adds a supported migrator address + /// @param migrator_address The address of the migrator + function addMigrator(address migrator_address) external onlyByOwnGov { + valid_migrators[migrator_address] = true; + } + + /// @notice Removes a migrator address + /// @param migrator_address The address of the migrator + function removeMigrator(address migrator_address) external onlyByOwnGov { + require(valid_migrators[migrator_address] == true, "Address nonexistent"); + + // Delete from the mapping + delete valid_migrators[migrator_address]; + } + + /// @notice Added to support recovering LP Rewards and other mistaken tokens from other systems to be distributed to holders + /// @param tokenAddress The address of the token + /// @param tokenAmount The amount of the token + function recoverERC20(address tokenAddress, uint256 tokenAmount) external onlyByOwnGov { + // Admin cannot withdraw the staking token from the contract unless currently migrating + if(!migrationsOn){ + require(tokenAddress != address(stakingToken), "Not in migration"); // Only Governance / Timelock can trigger a migration + } + // Only the owner address can ever receive the recovery withdrawal + ERC20(tokenAddress).transfer(owner, tokenAmount); + emit Recovered(tokenAddress, tokenAmount); + } + + + /// @notice Set various multipliers + /// @param _lock_max_multiplier The max weight multiplier you can get for locking your position + /// @param _vefxs_max_multiplier The max weight multiplier you can get for having veFXS + /// @param _vefxs_per_frax_for_max_boost How much veFXS you must have, per Frax in the LP, in order to get the veFXS boost, if applicable + function setMultipliers(uint256 _lock_max_multiplier, uint256 _vefxs_max_multiplier, uint256 _vefxs_per_frax_for_max_boost) external onlyByOwnGov { + require(_lock_max_multiplier >= MULTIPLIER_PRECISION, "Mult must be >= MULTIPLIER_PRECISION"); + require(_vefxs_max_multiplier >= 0, "veFXS mul must be >= 0"); + require(_vefxs_per_frax_for_max_boost > 0, "veFXS pct max must be >= 0"); + + lock_max_multiplier = _lock_max_multiplier; + vefxs_max_multiplier = _vefxs_max_multiplier; + vefxs_per_frax_for_max_boost = _vefxs_per_frax_for_max_boost; + + emit MaxVeFXSMultiplier(vefxs_max_multiplier); + emit LockedStakeMaxMultiplierUpdated(lock_max_multiplier); + emit veFXSPerFraxForMaxBoostUpdated(vefxs_per_frax_for_max_boost); + } + + /// @notice Set various time variables + /// @param _lock_time_for_max_multiplier The lock time needed to get the max weight multiplier + /// @param _lock_time_min The minimum lock time required + function setLockedStakeTimeForMinAndMaxMultiplier(uint256 _lock_time_for_max_multiplier, uint256 _lock_time_min) external onlyByOwnGov { + require(_lock_time_for_max_multiplier >= 1, "Mul max time must be >= 1"); + require(_lock_time_min >= 1, "Mul min time must be >= 1"); + + lock_time_for_max_multiplier = _lock_time_for_max_multiplier; + lock_time_min = _lock_time_min; + + emit LockedStakeTimeForMaxMultiplier(lock_time_for_max_multiplier); + emit LockedStakeMinTime(_lock_time_min); + } + + /// @notice Unlock all stakes, in the case of an emergency + function unlockStakes() external onlyByOwnGov { + stakesUnlocked = !stakesUnlocked; + } + + /// @notice Toggle migrations on or off + function toggleMigrations() external onlyByOwnGov { + migrationsOn = !migrationsOn; + } + + /// @notice Toggle reward collection upon withdrawal + function toggleCollectRewardsOnWithdrawal() external onlyByOwnGov { + collectRewardsOnWithdrawalPaused = !collectRewardsOnWithdrawalPaused; + } + + /// @notice Toggle the ability to stake + function toggleStaking() external onlyByOwnGov { + stakingPaused = !stakingPaused; + } + + /// @notice Toggle the ability to withdraw + function toggleWithdrawals() external onlyByOwnGov { + withdrawalsPaused = !withdrawalsPaused; + } + + /// @notice Toggle the ability to collect rewards + function toggleRewardsCollection() external onlyByOwnGov { + rewardsCollectionPaused = !rewardsCollectionPaused; + } + + /// @notice Set the address of the timelock + /// @param _new_timelock The new address of the timelock + function setTimelock(address _new_timelock) external onlyByOwnGov { + timelockAddress = _new_timelock; + } + + /// @notice Set the address of the controller + /// @param _controllerAddress The new address of the controller + function setController(address _controllerAddress) external onlyByOwnGov { + controllerAddress = _controllerAddress; + } + + /// @notice Set the veFXS address + /// @param _vefxs_address The new address for veFXS + function setVeFXS(address _vefxs_address) external onlyByOwnGov { + veFXS = IveFXS(_vefxs_address); + } + + /* ========== EVENTS ========== */ + + /// @notice When LP tokens are locked + /// @param user The staker + /// @param amount Amount of LP staked + /// @param secs Number of seconds the stake was locked + /// @param kek_id The id of the stake + /// @param source_address The origin address of the LP tokens. Usually the same as the user unless there is a migration in progress + event StakeLocked(address indexed user, uint256 amount, uint256 secs, bytes32 kek_id, address source_address); + + /// @notice When LP tokens are withdrawn + /// @param user The staker + /// @param amount Amount of LP withdrawn + /// @param kek_id The id of the stake + /// @param destination_address Destination address of the withdrawn LP tokens + event WithdrawLocked(address indexed user, uint256 amount, bytes32 kek_id, address destination_address); + + /// @notice When a staker collects rewards + /// @param user The staker + /// @param reward Amount of reward tokens + /// @param token_address Address of the reward token + /// @param destination_address Destination address of the reward tokens + event RewardPaid(address indexed user, uint256 reward, address token_address, address destination_address); + + /// @notice When the farm has been initialized + event DefaultInitialization(); + + /// @notice When tokens are recovered, in the case of an emergency + /// @param token Address of the token + /// @param amount Amount of the recovered tokens + event Recovered(address token, uint256 amount); + + /// @notice When the max weight multiplier you can get for locking your position is set + /// @param multiplier The max weight multiplier + event LockedStakeMaxMultiplierUpdated(uint256 multiplier); + + /// @notice When the lock time needed to get the max weight multiplier is set + /// @param secs The lock time needed for the max multiplier, in seconds + event LockedStakeTimeForMaxMultiplier(uint256 secs); + + /// @notice The minimum lock time required for a stake + /// @param secs Min lock time, in seconds + event LockedStakeMinTime(uint256 secs); + + /// @notice When someone adds additional LP to an existing stake + /// @param user The staker's address + /// @param kek_id The id of the stake + /// @param amount The amount of extra LP being added to the stake + event LockedAdditional(address indexed user, bytes32 kek_id, uint256 amount); + + /// @notice When someone locks for additional time + /// @param user The staker's address + /// @param kek_id The id of the stake + /// @param new_secs The additional amount of seconds the lock is being extended + /// @param new_start_ts The new start time of the stake. Should be block.timestamp + /// @param new_end_ts The new ending time of the stake + event LockedLonger(address indexed user, bytes32 kek_id, uint256 new_secs, uint256 new_start_ts, uint256 new_end_ts); + + /// @notice When the max weight multiplier you can get for having veFXS is updated + /// @param multiplier The new max multiplier + event MaxVeFXSMultiplier(uint256 multiplier); + + /// @notice When the amount of veFXS you must have, per Frax in the LP, in order to get the veFXS boost, if applicable + /// @param scale_factor The new amount of veFXS + event veFXSPerFraxForMaxBoostUpdated(uint256 scale_factor); +} diff --git a/src/hardhat/contracts/Staking/FraxUnifiedFarmTemplate.sol b/src/hardhat/contracts/Staking/FraxUnifiedFarmTemplate.sol index 86e96772..55782378 100755 --- a/src/hardhat/contracts/Staking/FraxUnifiedFarmTemplate.sol +++ b/src/hardhat/contracts/Staking/FraxUnifiedFarmTemplate.sol @@ -136,6 +136,9 @@ contract FraxUnifiedFarmTemplate is Owned, ReentrancyGuard { bool internal stakingPaused; // For emergencies bool internal collectRewardsOnWithdrawalPaused; // For emergencies if a token is overemitted + // Version + string public version = "1.0.5"; + /* ========== STRUCTS ========== */ // In children... diff --git a/src/hardhat/contracts/Staking/FraxUnifiedFarm_ERC20.sol b/src/hardhat/contracts/Staking/FraxUnifiedFarm_ERC20.sol index bd4d9707..c7511366 100755 --- a/src/hardhat/contracts/Staking/FraxUnifiedFarm_ERC20.sol +++ b/src/hardhat/contracts/Staking/FraxUnifiedFarm_ERC20.sol @@ -22,13 +22,14 @@ import "./FraxUnifiedFarmTemplate.sol"; // import "../Misc_AMOs/bunni/IBunniGauge.sol"; // Convex wrappers -// import "../Curve/ICurvefrxETHETHPool.sol"; -// import "../Misc_AMOs/convex/IConvexStakingWrapperFrax.sol"; +import "../Curve/ICurvefrxETHETHPool.sol"; +import "../Misc_AMOs/convex/IConvexStakingWrapperFrax.sol"; // import "../Misc_AMOs/convex/IDepositToken.sol"; // import "../Misc_AMOs/curve/I2pool.sol"; -// import "../Misc_AMOs/curve/I2poolToken.sol"; +import "../Misc_AMOs/curve/I2poolToken.sol"; // import "../Misc_AMOs/curve/I2poolTokenNoLending.sol"; -// +// import "../Misc_AMOs/curve/ICurveTricryptoOptimizedWETH.sol"; + // Fraxlend // import '../Fraxlend/IFraxlendPair.sol'; @@ -39,7 +40,7 @@ import "./FraxUnifiedFarmTemplate.sol"; // import "../Misc_AMOs/gelato/IGUniPool.sol"; // KyberSwap Elastic KyberSwapFarmingToken (KS-FT) -import "../Misc_AMOs/kyberswap/elastic/IKyberSwapFarmingToken.sol"; +// import "../Misc_AMOs/kyberswap/elastic/IKyberSwapFarmingToken.sol"; // mStable // import '../Misc_AMOs/mstable/IFeederPool.sol'; @@ -73,10 +74,12 @@ contract FraxUnifiedFarm_ERC20 is FraxUnifiedFarmTemplate { // ICurvefrxETHETHPool public curvePool; // Convex stkcvxFPIFRAX, stkcvxFRAXBP, etc - // IConvexStakingWrapperFrax public stakingToken; - // I2poolToken public curveToken; + IConvexStakingWrapperFrax public stakingToken; + I2poolToken public curveToken; + // ICurveTricryptoOptimizedWETH public curveToken; // I2pool public curvePool; - // ICurvefrxETHETHPool public curvePool; + ICurvefrxETHETHPool public curvePool; + // ICurveTricryptoOptimizedWETH public curvePool; // Fraxswap // IFraxswapPair public stakingToken; @@ -88,7 +91,7 @@ contract FraxUnifiedFarm_ERC20 is FraxUnifiedFarmTemplate { // IGUniPool public stakingToken; // KyberSwap Elastic KyberSwapFarmingToken (KS-FT) - IKyberSwapFarmingToken public stakingToken; + // IKyberSwapFarmingToken public stakingToken; // mStable // IFeederPool public stakingToken; @@ -437,6 +440,9 @@ contract FraxUnifiedFarm_ERC20 is FraxUnifiedFarmTemplate { // Add additional LPs to an existing locked stake function lockAdditional(bytes32 kek_id, uint256 addl_liq) nonReentrant updateRewardAndBalanceMdf(msg.sender, true) public { + // Make sure staking isn't paused + require(!stakingPaused, "Staking paused"); + // Get the stake and its index (LockedStake memory thisStake, uint256 theArrayIndex) = _getStake(msg.sender, kek_id); @@ -466,6 +472,9 @@ contract FraxUnifiedFarm_ERC20 is FraxUnifiedFarmTemplate { // Extends the lock of an existing stake function lockLonger(bytes32 kek_id, uint256 new_ending_ts) nonReentrant updateRewardAndBalanceMdf(msg.sender, true) public { + // Make sure staking isn't paused + require(!stakingPaused, "Staking paused"); + // Get the stake and its index (LockedStake memory thisStake, uint256 theArrayIndex) = _getStake(msg.sender, kek_id); diff --git a/src/hardhat/contracts/Staking/FraxUnifiedFarm_KyberSwapElastic.sol b/src/hardhat/contracts/Staking/FraxUnifiedFarm_KyberSwapElastic.sol index 79195225..692e9a48 100755 --- a/src/hardhat/contracts/Staking/FraxUnifiedFarm_KyberSwapElastic.sol +++ b/src/hardhat/contracts/Staking/FraxUnifiedFarm_KyberSwapElastic.sol @@ -301,7 +301,10 @@ contract FraxUnifiedFarm_KyberSwapElastic is FraxUnifiedFarmTemplate { uint256 token0_min_in, uint256 token1_min_in, bool use_balof_override // Use balanceOf Override - ) updateRewardAndBalanceMdf(msg.sender, true) public { + ) nonReentrant updateRewardAndBalanceMdf(msg.sender, true) public { + // Make sure staking isn't paused + require(!stakingPaused, "Staking paused"); + // Get the stake and its index (LockedNFT memory thisNFT, uint256 theArrayIndex) = _getStake(msg.sender, token_id); diff --git a/src/hardhat/contracts/Staking/FraxUnifiedFarm_PosRebase.sol b/src/hardhat/contracts/Staking/FraxUnifiedFarm_PosRebase.sol index ea51c6ee..d8f6b3c5 100755 --- a/src/hardhat/contracts/Staking/FraxUnifiedFarm_PosRebase.sol +++ b/src/hardhat/contracts/Staking/FraxUnifiedFarm_PosRebase.sol @@ -256,6 +256,9 @@ contract FraxUnifiedFarm_PosRebase is FraxUnifiedFarmTemplateClone { // Add additional LPs to an existing locked stake // REBASE: If you simply want to accrue interest, call this with addl_liq = 0 function lockAdditional(bytes32 kek_id, uint256 addl_liq) nonReentrant updateRewardAndBalanceMdf(msg.sender, true) public { + // Make sure staking isn't paused + require(!stakingPaused, "Staking paused"); + // Get the stake and its index (LockedStake memory thisStake, uint256 theArrayIndex) = _getStake(msg.sender, kek_id); @@ -299,6 +302,9 @@ contract FraxUnifiedFarm_PosRebase is FraxUnifiedFarmTemplateClone { // Extends the lock of an existing stake function lockLonger(bytes32 kek_id, uint256 new_ending_ts) nonReentrant updateRewardAndBalanceMdf(msg.sender, true) public { + // Make sure staking isn't paused + require(!stakingPaused, "Staking paused"); + // Get the stake and its index (LockedStake memory thisStake, uint256 theArrayIndex) = _getStake(msg.sender, kek_id); diff --git a/src/hardhat/contracts/Staking/Variants/FraxCCFarmV4_cvxUSDPlusFRAXBP.sol b/src/hardhat/contracts/Staking/Variants/FraxCCFarmV4_cvxUSDPlusFRAXBP.sol new file mode 100755 index 00000000..71ca0de4 --- /dev/null +++ b/src/hardhat/contracts/Staking/Variants/FraxCCFarmV4_cvxUSDPlusFRAXBP.sol @@ -0,0 +1,19 @@ +// SPDX-License-Identifier: GPL-2.0-or-later +pragma solidity >=0.8.0; + +import "../FraxCrossChainFarmV4_ERC20.sol"; + +contract FraxCCFarmV4_cvxUSDPlusFRAXBP is FraxCrossChainFarmV4_ERC20 { + string public farm_type = "FraxCCFarmV4_cvxLP"; + + constructor ( + address _owner, + address[] memory _rewardTokens, + address _stakingToken, + address _fraxAddress, + address _timelockAddress, + address _rewarder_address + ) + FraxCrossChainFarmV4_ERC20(_owner, _rewardTokens, _stakingToken, _fraxAddress, _timelockAddress, _rewarder_address) + {} +} diff --git a/src/hardhat/contracts/Staking/Variants/FraxUnifiedFarm_ERC20_Convex_FRAXBP_Stable.sol b/src/hardhat/contracts/Staking/Variants/FraxUnifiedFarm_ERC20_Convex_FRAXBP_Stable.sol index e87bd61e..725c0bec 100755 --- a/src/hardhat/contracts/Staking/Variants/FraxUnifiedFarm_ERC20_Convex_FRAXBP_Stable.sol +++ b/src/hardhat/contracts/Staking/Variants/FraxUnifiedFarm_ERC20_Convex_FRAXBP_Stable.sol @@ -9,6 +9,8 @@ import "../../Misc_AMOs/curve/I2poolToken.sol"; contract FraxUnifiedFarm_ERC20_Convex_FRAXBP_Stable is FraxUnifiedFarm_ERC20 { + string public farm_type = "ERC20_Convex_FRAXBP_Stable"; + constructor ( address _owner, address[] memory _rewardTokens, @@ -22,7 +24,7 @@ contract FraxUnifiedFarm_ERC20_Convex_FRAXBP_Stable is FraxUnifiedFarm_ERC20 { { // COMMENTED OUT SO COMPILER DOESNT COMPLAIN. UNCOMMENT WHEN DEPLOYING - // // Convex stkcvxBUSDBP and other metaFRAXBPs, where the token is also the pool (Convex Stable/FRAXBP) + // Convex stkcvxBUSDBP and other metaFRAXBPs, where the token is also the pool (Convex Stable/FRAXBP) // stakingToken = IConvexStakingWrapperFrax(_stakingToken); // curveToken = I2poolToken(stakingToken.curveToken()); // curvePool = I2pool(address(curveToken)); diff --git a/src/hardhat/contracts/Staking/Variants/FraxUnifiedFarm_ERC20_Convex_FRAXBP_Volatile.sol b/src/hardhat/contracts/Staking/Variants/FraxUnifiedFarm_ERC20_Convex_FRAXBP_Volatile.sol index f63df3e0..098f2b41 100755 --- a/src/hardhat/contracts/Staking/Variants/FraxUnifiedFarm_ERC20_Convex_FRAXBP_Volatile.sol +++ b/src/hardhat/contracts/Staking/Variants/FraxUnifiedFarm_ERC20_Convex_FRAXBP_Volatile.sol @@ -9,6 +9,8 @@ import "../../Misc_AMOs/curve/I2poolToken.sol"; contract FraxUnifiedFarm_ERC20_Convex_FRAXBP_Volatile is FraxUnifiedFarm_ERC20 { + string public farm_type = "ERC20_Convex_FRAXBP_Volatile"; + constructor ( address _owner, address[] memory _rewardTokens, diff --git a/src/hardhat/contracts/Staking/Variants/FraxUnifiedFarm_ERC20_Convex_Generic.sol b/src/hardhat/contracts/Staking/Variants/FraxUnifiedFarm_ERC20_Convex_Generic.sol index 2215d00c..58581db0 100755 --- a/src/hardhat/contracts/Staking/Variants/FraxUnifiedFarm_ERC20_Convex_Generic.sol +++ b/src/hardhat/contracts/Staking/Variants/FraxUnifiedFarm_ERC20_Convex_Generic.sol @@ -6,9 +6,12 @@ import "../../Misc_AMOs/convex/IConvexStakingWrapperFrax.sol"; import "../../Misc_AMOs/convex/IDepositToken.sol"; import "../../Misc_AMOs/curve/I2poolToken.sol"; import "../../Misc_AMOs/curve/I2pool.sol"; +import "../../Misc_AMOs/curve/ICurveTricryptoOptimizedWETH.sol"; contract FraxUnifiedFarm_ERC20_Convex_Generic is FraxUnifiedFarm_ERC20 { + string public farm_type = "ERC20_Convex_Generic"; + constructor ( address _owner, address[] memory _rewardTokens, @@ -32,6 +35,12 @@ contract FraxUnifiedFarm_ERC20_Convex_Generic is FraxUnifiedFarm_ERC20 { // curveToken = I2poolToken(stakingToken.curveToken()); // curvePool = I2pool(curveToken.minter()); // frax_is_token0 = true; + + // // Convex triSDT + // stakingToken = IConvexStakingWrapperFrax(_stakingToken); + // curveToken = ICurveTricryptoOptimizedWETH(address(stakingToken.curveToken())); + // curvePool = ICurveTricryptoOptimizedWETH(address(stakingToken.curveToken())); + // frax_is_token0 = false; } function fraxPerLPToken() public view override returns (uint256 frax_per_lp_token) { @@ -45,5 +54,13 @@ contract FraxUnifiedFarm_ERC20_Convex_Generic is FraxUnifiedFarm_ERC20 { // frax_per_lp_token = curvePool.get_virtual_price() / 2; // } + // Convex triSDT + // ============================================ + // { + // // One third of the LP should be frxETH + // // Using lp_price / 3 for gas savings + // frax_per_lp_token = curvePool.lp_price() / 3; + // } + } } diff --git a/src/hardhat/contracts/Staking/Variants/FraxUnifiedFarm_ERC20_Convex_frxETH.sol b/src/hardhat/contracts/Staking/Variants/FraxUnifiedFarm_ERC20_Convex_frxETH.sol index 83baaa17..8b007afe 100755 --- a/src/hardhat/contracts/Staking/Variants/FraxUnifiedFarm_ERC20_Convex_frxETH.sol +++ b/src/hardhat/contracts/Staking/Variants/FraxUnifiedFarm_ERC20_Convex_frxETH.sol @@ -14,6 +14,8 @@ contract FraxUnifiedFarm_ERC20_Convex_frxETH is FraxUnifiedFarm_ERC20 { AggregatorV3Interface internal priceFeedETHUSD = AggregatorV3Interface(0x5f4eC3Df9cbd43714FE2740f5E3616155c5b8419); + string public farm_type = "ERC20_Convex_frxETH"; + constructor ( address _owner, address[] memory _rewardTokens, @@ -33,9 +35,9 @@ contract FraxUnifiedFarm_ERC20_Convex_frxETH is FraxUnifiedFarm_ERC20 { // curvePool = ICurvefrxETHETHPool(curveToken.minter()); // Some Convex frxETH/XYZ (TOKEN = MINTER / POOL)) - // stakingToken = IConvexStakingWrapperFrax(_stakingToken); - // curveToken = I2poolToken(stakingToken.curveToken()); - // curvePool = ICurvefrxETHETHPool(stakingToken.curveToken()); + stakingToken = IConvexStakingWrapperFrax(_stakingToken); + curveToken = I2poolToken(stakingToken.curveToken()); + curvePool = ICurvefrxETHETHPool(stakingToken.curveToken()); } function getLatestETHPriceE8() public view returns (int) { @@ -52,22 +54,18 @@ contract FraxUnifiedFarm_ERC20_Convex_frxETH is FraxUnifiedFarm_ERC20 { priceFeedETHUSD = AggregatorV3Interface(_eth_usd_oracle_address); } - function fraxPerLPToken() public view override returns (uint256) { + function fraxPerLPToken() public view override returns (uint256 frax_per_lp_token) { // COMMENTED OUT SO COMPILER DOESNT COMPLAIN. UNCOMMENT WHEN DEPLOYING - // Get the amount of FRAX 'inside' of the lp tokens - uint256 frax_per_lp_token; - // Convex frxETH/XYZ // ============================================ - // { - // // Assume frxETH = ETH for pricing purposes - // // Get the USD value of the frxETH per LP token - // uint256 frxETH_in_pool = IERC20(0x5E8422345238F34275888049021821E8E08CAa1f).balanceOf(address(curvePool)); - // uint256 frxETH_usd_val_per_lp_e8 = (frxETH_in_pool * uint256(getLatestETHPriceE8())) / curveToken.totalSupply(); - // frax_per_lp_token = frxETH_usd_val_per_lp_e8 * (1e10); // We use USD as "Frax" here - // } + { + // Assume frxETH = ETH for pricing purposes + // Get the USD value of the frxETH per LP token + uint256 frxETH_in_pool = IERC20(0x5E8422345238F34275888049021821E8E08CAa1f).balanceOf(address(curvePool)); + uint256 frxETH_usd_val_per_lp_e8 = (frxETH_in_pool * uint256(getLatestETHPriceE8())) / curveToken.totalSupply(); + frax_per_lp_token = frxETH_usd_val_per_lp_e8 * (1e10); // We use USD as "Frax" here + } - return frax_per_lp_token; } } \ No newline at end of file diff --git a/src/hardhat/contracts/Staking/Variants/FraxUnifiedFarm_ERC20_Fraxlend.sol b/src/hardhat/contracts/Staking/Variants/FraxUnifiedFarm_ERC20_Fraxlend.sol index cda88f0e..42acaaf6 100755 --- a/src/hardhat/contracts/Staking/Variants/FraxUnifiedFarm_ERC20_Fraxlend.sol +++ b/src/hardhat/contracts/Staking/Variants/FraxUnifiedFarm_ERC20_Fraxlend.sol @@ -7,6 +7,8 @@ import '../../Fraxlend/IFraxlendPairHelper.sol'; contract FraxUnifiedFarm_ERC20_Fraxlend is FraxUnifiedFarm_ERC20 { + string public farm_type = "ERC20_Fraxlend"; + IFraxlendPairHelper public flp_helper = IFraxlendPairHelper(0x1b0bCeD6dd26a7c234506E261BC68C9A3A4031b7); constructor ( diff --git a/src/hardhat/contracts/Staking/Variants/FraxUnifiedFarm_ERC20_FraxswapV2.sol b/src/hardhat/contracts/Staking/Variants/FraxUnifiedFarm_ERC20_FraxswapV2.sol index dc3a7317..1602ac86 100755 --- a/src/hardhat/contracts/Staking/Variants/FraxUnifiedFarm_ERC20_FraxswapV2.sol +++ b/src/hardhat/contracts/Staking/Variants/FraxUnifiedFarm_ERC20_FraxswapV2.sol @@ -6,6 +6,8 @@ import '../../Fraxswap/core/interfaces/IFraxswapPair.sol'; contract FraxUnifiedFarm_ERC20_FraxswapV2 is FraxUnifiedFarm_ERC20 { + string public farm_type = "ERC20_Fraxswap_V2"; + constructor ( address _owner, address[] memory _rewardTokens, diff --git a/src/hardhat/contracts/Staking/Variants/FraxUnifiedFarm_ERC20_KyberSwapElasticV2.sol b/src/hardhat/contracts/Staking/Variants/FraxUnifiedFarm_ERC20_KyberSwapElasticV2.sol index 0250e766..cc8a386d 100755 --- a/src/hardhat/contracts/Staking/Variants/FraxUnifiedFarm_ERC20_KyberSwapElasticV2.sol +++ b/src/hardhat/contracts/Staking/Variants/FraxUnifiedFarm_ERC20_KyberSwapElasticV2.sol @@ -8,6 +8,8 @@ import "../../Oracle/ComboOracle_KyberSwapElasticV2.sol"; contract FraxUnifiedFarm_ERC20_KyberSwapElasticV2 is FraxUnifiedFarm_ERC20 { + string public farm_type = "ERC20_KyberSwapElasticV2"; + // Need to seed a starting token to use both as a basis for fraxPerLPToken // as well as getting ticks, etc uint256 public seed_token_id; @@ -30,11 +32,11 @@ contract FraxUnifiedFarm_ERC20_KyberSwapElasticV2 is FraxUnifiedFarm_ERC20 { FraxUnifiedFarm_ERC20(_owner , _rewardTokens, _rewardManagers, _rewardRates, _gaugeControllers, _rewardDistributors, _stakingToken) { // COMMENTED OUT SO COMPILER DOESNT COMPLAIN. UNCOMMENT WHEN DEPLOYING - stakingToken = IKyberSwapFarmingToken(_stakingToken); - frax_is_token0 = false; // Doesn't really matter here + // stakingToken = IKyberSwapFarmingToken(_stakingToken); + // frax_is_token0 = false; // Doesn't really matter here - seed_token_id = _seed_token_id; - KSE_ComboOracleV2 = ComboOracle_KyberSwapElasticV2(_kse_combo_oracle); + // seed_token_id = _seed_token_id; + // KSE_ComboOracleV2 = ComboOracle_KyberSwapElasticV2(_kse_combo_oracle); } @@ -52,13 +54,13 @@ contract FraxUnifiedFarm_ERC20_KyberSwapElasticV2 is FraxUnifiedFarm_ERC20 { // KyberSwap Elastic KyberSwapFarmingToken (KS-FT) // ============================================ - { - // Fetch liquidity info from the seed token id - // ComboOracle_KyberSwapElasticV2.NFTBasicInfo memory nft_basic_info = KSE_ComboOracleV2.getNFTBasicInfo(seed_token_id); - ComboOracle_KyberSwapElasticV2.NFTValueInfo memory nft_value_info = KSE_ComboOracleV2.getNFTValueInfo(seed_token_id); + // { + // // Fetch liquidity info from the seed token id + // // ComboOracle_KyberSwapElasticV2.NFTBasicInfo memory nft_basic_info = KSE_ComboOracleV2.getNFTBasicInfo(seed_token_id); + // ComboOracle_KyberSwapElasticV2.NFTValueInfo memory nft_value_info = KSE_ComboOracleV2.getNFTValueInfo(seed_token_id); - // Assume half of the liquidity is FRAX or FRAX-related, even if it is not. - frax_per_lp_token = (nft_value_info.pool_tvl_usd * MULTIPLIER_PRECISION) / (stakingToken.totalSupply() * 2); - } + // // Assume half of the liquidity is FRAX or FRAX-related, even if it is not. + // frax_per_lp_token = (nft_value_info.pool_tvl_usd * MULTIPLIER_PRECISION) / (stakingToken.totalSupply() * 2); + // } } } diff --git a/src/hardhat/contracts/Staking/Variants/FraxUnifiedFarm_KyberSwapElasticGeneric.sol b/src/hardhat/contracts/Staking/Variants/FraxUnifiedFarm_KyberSwapElasticGeneric.sol deleted file mode 100755 index e828b5b4..00000000 --- a/src/hardhat/contracts/Staking/Variants/FraxUnifiedFarm_KyberSwapElasticGeneric.sol +++ /dev/null @@ -1,61 +0,0 @@ -// SPDX-License-Identifier: GPL-2.0-or-later -pragma solidity >=0.8.0; - -import "../FraxUnifiedFarm_ERC20.sol"; -import "../../Misc_AMOs/kyberswap/elastic/IKyberSwapFarmingToken.sol"; -import "../../Oracle/ComboOracle_KyberSwapElastic.sol"; - -contract FraxUnifiedFarm_KyberSwapElasticGeneric is FraxUnifiedFarm_ERC20 { - - // Need to seed a starting token to use both as a basis for fraxPerLPToken - // as well as getting ticks, etc - uint256 public seed_token_id; - - // For KS-FT pricing - ComboOracle_KyberSwapElastic public KSE_ComboOracle; - - constructor ( - address _owner, - address[] memory _rewardTokens, - address[] memory _rewardManagers, - uint256[] memory _rewardRates, - address[] memory _gaugeControllers, - address[] memory _rewardDistributors, - address _kse_combo_oracle, - address _stakingToken, - uint256 _seed_token_id - ) - FraxUnifiedFarm_ERC20(_owner , _rewardTokens, _rewardManagers, _rewardRates, _gaugeControllers, _rewardDistributors, _stakingToken) - { - // COMMENTED OUT SO COMPILER DOESNT COMPLAIN. UNCOMMENT WHEN DEPLOYING - stakingToken = IKyberSwapFarmingToken(_stakingToken); - frax_is_token0 = false; // Doesn't really matter here - - seed_token_id = _seed_token_id; - KSE_ComboOracle = ComboOracle_KyberSwapElastic(_kse_combo_oracle); - } - - function setSeedTokenID(uint256 _seed_token_id) public onlyByOwnGov { - seed_token_id = _seed_token_id; - } - - function setKyberSwapElasticComboOracle(address _kse_combo_oracle_address) public onlyByOwnGov { - KSE_ComboOracle = ComboOracle_KyberSwapElastic(_kse_combo_oracle_address); - } - - - function fraxPerLPToken() public view override returns (uint256 frax_per_lp_token) { - // COMMENTED OUT SO COMPILER DOESNT COMPLAIN. UNCOMMENT WHEN DEPLOYING - - // KyberSwap Elastic KyberSwapFarmingToken (KS-FT) - // ============================================ - { - // Fetch liquidity info from the seed token id - ComboOracle_KyberSwapElastic.NFTBasicInfo memory nft_basic_info = KSE_ComboOracle.getNFTBasicInfo(seed_token_id); - ComboOracle_KyberSwapElastic.NFTValueInfo memory nft_value_info = KSE_ComboOracle.getNFTValueInfo(seed_token_id); - - // Assume half of the liquidity is FRAX or FRAX-related, even if it is not. - frax_per_lp_token = (nft_value_info.total_value * MULTIPLIER_PRECISION) / (nft_basic_info.liquidity * 2); - } - } -} diff --git a/src/hardhat/gnosis-safe-scripts/Convex_Farm_Deployments/Script_Constants.js b/src/hardhat/gnosis-safe-scripts/Convex_Farm_Deployments/Script_Constants.js new file mode 100644 index 00000000..9e21d455 --- /dev/null +++ b/src/hardhat/gnosis-safe-scripts/Convex_Farm_Deployments/Script_Constants.js @@ -0,0 +1,36 @@ +const path = require("path"); +const envPath = path.join(process.cwd(), "../../../.env"); +require("dotenv").config({ path: envPath }); +const { ethers } = require("hardhat"); + +const { BigNumber } = require("@ethersproject/bignumber"); +const util = require("util"); +const chalk = require("chalk"); +const fse = require("fs-extra"); +const { formatUnits } = require("ethers/lib/utils"); +const { BIG6, BIG18, stringifyReplacer, serializeJSONObject, calculateChecksum } = require("../utils/utils"); +const constants = require(path.join(__dirname, '../../../../dist/types/constants')); +const CONTRACT_ADDRESSES = constants.CONTRACT_ADDRESSES; +let ADDRS_ETH = CONTRACT_ADDRESSES.ethereum; +let ADDRS_ETH_LPS = ADDRS_ETH.pair_tokens; +let ADDRS_ETH_FARMS = ADDRS_ETH.staking_contracts; + + +const wrapperAddrs = [ + // ADDRS_ETH_LPS['Convex stkcvxtriSDT'], + // ADDRS_ETH_LPS['Convex stkcvxmkUSDFRAXBP'], + ADDRS_ETH_LPS['Convex stkcvxfrxETHpETH'], + // ADDRS_ETH_LPS['Convex stkcvxfrxETHzETH'], + // ADDRS_ETH_LPS['Convex stkcvxGRAIFRAXBP'] +]; + +const farmAddrs = [ + // ADDRS_ETH_FARMS['Convex stkcvxtriSDT'], + // ADDRS_ETH_FARMS['Convex stkcvxmkUSDFRAXBP'], + ADDRS_ETH_FARMS['Convex stkcvxfrxETHpETH'], + // ADDRS_ETH_FARMS['Convex stkcvxfrxETHzETH'], + // ADDRS_ETH_FARMS['Convex stkcvxGRAIFRAXBP'] +]; + + +module.exports = { wrapperAddrs, farmAddrs }; \ No newline at end of file diff --git a/src/hardhat/gnosis-safe-scripts/Convex_Farm_Deployments/Step_1_Vault_Gauge_Proxy.js b/src/hardhat/gnosis-safe-scripts/Convex_Farm_Deployments/Step_1_Vault_Gauge_Proxy.js index e22780c5..c1cdd0a5 100644 --- a/src/hardhat/gnosis-safe-scripts/Convex_Farm_Deployments/Step_1_Vault_Gauge_Proxy.js +++ b/src/hardhat/gnosis-safe-scripts/Convex_Farm_Deployments/Step_1_Vault_Gauge_Proxy.js @@ -10,6 +10,7 @@ const fse = require("fs-extra"); const { formatUnits } = require("ethers/lib/utils"); const { BIG6, BIG18, stringifyReplacer, serializeJSONObject, calculateChecksum } = require("../utils/utils"); const constants = require(path.join(__dirname, '../../../../dist/types/constants')); +const { wrapperAddrs, farmAddrs } = require("./Script_Constants"); const CONTRACT_ADDRESSES = constants.CONTRACT_ADDRESSES; let ADDRS_ETH = CONTRACT_ADDRESSES.ethereum; let ADDRS_ETH_LPS = ADDRS_ETH.pair_tokens; @@ -37,6 +38,8 @@ const batch_json = { ] } + + async function main() { // Set up the provider for some future informational calls [owner, addr1, addr2] = await ethers.getSigners(); @@ -44,19 +47,7 @@ async function main() { console.log(`Using env file from ${envPath}`); const thisBlock = await ethers.provider.getBlock(await ethers.provider.getBlockNumber()); - const wrapperAddrs = [ - ADDRS_ETH_LPS['Convex stkcvxfrxETHmsETH'], - ADDRS_ETH_LPS['Convex stkcvxfrxETHrETH_StaFi'], - ADDRS_ETH_LPS['Convex stkcvxfrxETHzETH'], - ADDRS_ETH_LPS['Convex stkcvxGRAIFRAXBP'] - ]; - const farmAddrs = [ - ADDRS_ETH_FARMS['Convex stkcvxfrxETHmsETH'], - ADDRS_ETH_FARMS['Convex stkcvxfrxETHrETH_StaFi'], - ADDRS_ETH_FARMS['Convex stkcvxfrxETHzETH'], - ADDRS_ETH_FARMS['Convex stkcvxGRAIFRAXBP'] - ]; // =============================================================== @@ -220,3 +211,5 @@ main() console.error(error); process.exit(1); }); + + diff --git a/src/hardhat/gnosis-safe-scripts/Convex_Farm_Deployments/Step_1_Vault_Gauge_Proxy.json b/src/hardhat/gnosis-safe-scripts/Convex_Farm_Deployments/Step_1_Vault_Gauge_Proxy.json index 53a555d0..3382329b 100644 --- a/src/hardhat/gnosis-safe-scripts/Convex_Farm_Deployments/Step_1_Vault_Gauge_Proxy.json +++ b/src/hardhat/gnosis-safe-scripts/Convex_Farm_Deployments/Step_1_Vault_Gauge_Proxy.json @@ -1 +1 @@ -{"version":"1.0","chainId":"1","createdAt":1691611691000,"meta":{"name":"Transactions Batch","description":"","txBuilderVersion":"1.14.1","createdFromSafeAddress":"0xB1748C79709f4Ba2Dd82834B8c82D4a505003f27","createdFromOwnerAddress":"","checksum":"0xd1e73adf881d06613e31f74ef1539f6827c83063f7b386d678ff9041f8b1ff8a"},"transactions":[{"to":"0x09bFD0c760E4a1bFc970cdaAAD240307C917Aa6c","value":"0","data":null,"contractMethod":{"inputs":[{"internalType":"address","name":"_vault","type":"address"}],"name":"setVault","payable":false},"contractInputsValues":{"_vault":"0x2816Ab1F4Db656602b6B0041c006652A4F5D0437"}},{"to":"0xffAFA5aA5b0a9C0C8e05ec8b89056F018EE2Bad6","value":"0","data":null,"contractMethod":{"inputs":[{"internalType":"address","name":"_vault","type":"address"}],"name":"setVault","payable":false},"contractInputsValues":{"_vault":"0x76CF35aB1450D3A6c84EdDB8A960A5F65B76e706"}},{"to":"0xd69068777d1b2dc74522117efA75AA195c0b57DB","value":"0","data":null,"contractMethod":{"inputs":[{"internalType":"address","name":"_vault","type":"address"}],"name":"setVault","payable":false},"contractInputsValues":{"_vault":"0x882B9fad02D1a7436449dcdE9934Eeb9E287909c"}},{"to":"0xDf9BB26ba5a05fcFc2637dC763AA4eb735911568","value":"0","data":null,"contractMethod":{"inputs":[{"internalType":"address","name":"_vault","type":"address"}],"name":"setVault","payable":false},"contractInputsValues":{"_vault":"0x5684d5566bb438D8Ef7B3C1E5da9450cD19C1b9f"}},{"to":"0x3669C421b77340B2979d1A00a792CC2ee0FcE737","value":"0","data":null,"contractMethod":{"inputs":[{"name":"addr","type":"address"},{"name":"gauge_type","type":"int128"},{"name":"weight","type":"uint256"}],"name":"add_gauge","payable":false},"contractInputsValues":{"addr":"0x2816Ab1F4Db656602b6B0041c006652A4F5D0437","gauge_type":"0","weight":"1000"}},{"to":"0x3669C421b77340B2979d1A00a792CC2ee0FcE737","value":"0","data":null,"contractMethod":{"inputs":[{"name":"addr","type":"address"},{"name":"gauge_type","type":"int128"},{"name":"weight","type":"uint256"}],"name":"add_gauge","payable":false},"contractInputsValues":{"addr":"0x76CF35aB1450D3A6c84EdDB8A960A5F65B76e706","gauge_type":"0","weight":"1000"}},{"to":"0x3669C421b77340B2979d1A00a792CC2ee0FcE737","value":"0","data":null,"contractMethod":{"inputs":[{"name":"addr","type":"address"},{"name":"gauge_type","type":"int128"},{"name":"weight","type":"uint256"}],"name":"add_gauge","payable":false},"contractInputsValues":{"addr":"0x882B9fad02D1a7436449dcdE9934Eeb9E287909c","gauge_type":"0","weight":"1000"}},{"to":"0x3669C421b77340B2979d1A00a792CC2ee0FcE737","value":"0","data":null,"contractMethod":{"inputs":[{"name":"addr","type":"address"},{"name":"gauge_type","type":"int128"},{"name":"weight","type":"uint256"}],"name":"add_gauge","payable":false},"contractInputsValues":{"addr":"0x5684d5566bb438D8Ef7B3C1E5da9450cD19C1b9f","gauge_type":"0","weight":"1000"}},{"to":"0x2816Ab1F4Db656602b6B0041c006652A4F5D0437","value":"0","data":null,"contractMethod":{"inputs":[{"internalType":"address","name":"reward_token_address","type":"address"},{"internalType":"uint256","name":"_new_rate","type":"uint256"},{"internalType":"address","name":"_gauge_controller_address","type":"address"},{"internalType":"address","name":"_rewards_distributor_address","type":"address"}],"name":"setRewardVars","payable":false},"contractInputsValues":{"reward_token_address":"0x3432B6A60D23Ca0dFCa7761B7ab56459D9C964D0","_new_rate":"0","_gauge_controller_address":"0x3669C421b77340B2979d1A00a792CC2ee0FcE737","_rewards_distributor_address":"0x278dC748edA1d8eFEf1aDFB518542612b49Fcd34"}},{"to":"0x76CF35aB1450D3A6c84EdDB8A960A5F65B76e706","value":"0","data":null,"contractMethod":{"inputs":[{"internalType":"address","name":"reward_token_address","type":"address"},{"internalType":"uint256","name":"_new_rate","type":"uint256"},{"internalType":"address","name":"_gauge_controller_address","type":"address"},{"internalType":"address","name":"_rewards_distributor_address","type":"address"}],"name":"setRewardVars","payable":false},"contractInputsValues":{"reward_token_address":"0x3432B6A60D23Ca0dFCa7761B7ab56459D9C964D0","_new_rate":"0","_gauge_controller_address":"0x3669C421b77340B2979d1A00a792CC2ee0FcE737","_rewards_distributor_address":"0x278dC748edA1d8eFEf1aDFB518542612b49Fcd34"}},{"to":"0x882B9fad02D1a7436449dcdE9934Eeb9E287909c","value":"0","data":null,"contractMethod":{"inputs":[{"internalType":"address","name":"reward_token_address","type":"address"},{"internalType":"uint256","name":"_new_rate","type":"uint256"},{"internalType":"address","name":"_gauge_controller_address","type":"address"},{"internalType":"address","name":"_rewards_distributor_address","type":"address"}],"name":"setRewardVars","payable":false},"contractInputsValues":{"reward_token_address":"0x3432B6A60D23Ca0dFCa7761B7ab56459D9C964D0","_new_rate":"0","_gauge_controller_address":"0x3669C421b77340B2979d1A00a792CC2ee0FcE737","_rewards_distributor_address":"0x278dC748edA1d8eFEf1aDFB518542612b49Fcd34"}},{"to":"0x5684d5566bb438D8Ef7B3C1E5da9450cD19C1b9f","value":"0","data":null,"contractMethod":{"inputs":[{"internalType":"address","name":"reward_token_address","type":"address"},{"internalType":"uint256","name":"_new_rate","type":"uint256"},{"internalType":"address","name":"_gauge_controller_address","type":"address"},{"internalType":"address","name":"_rewards_distributor_address","type":"address"}],"name":"setRewardVars","payable":false},"contractInputsValues":{"reward_token_address":"0x3432B6A60D23Ca0dFCa7761B7ab56459D9C964D0","_new_rate":"0","_gauge_controller_address":"0x3669C421b77340B2979d1A00a792CC2ee0FcE737","_rewards_distributor_address":"0x278dC748edA1d8eFEf1aDFB518542612b49Fcd34"}},{"to":"0x2816Ab1F4Db656602b6B0041c006652A4F5D0437","value":"0","data":null,"contractMethod":{"inputs":[{"internalType":"address","name":"_proxy_addr","type":"address"}],"name":"toggleValidVeFXSProxy","payable":false},"contractInputsValues":{"_proxy_addr":"0x59CFCD384746ec3035299D90782Be065e466800B"}},{"to":"0x76CF35aB1450D3A6c84EdDB8A960A5F65B76e706","value":"0","data":null,"contractMethod":{"inputs":[{"internalType":"address","name":"_proxy_addr","type":"address"}],"name":"toggleValidVeFXSProxy","payable":false},"contractInputsValues":{"_proxy_addr":"0x59CFCD384746ec3035299D90782Be065e466800B"}},{"to":"0x882B9fad02D1a7436449dcdE9934Eeb9E287909c","value":"0","data":null,"contractMethod":{"inputs":[{"internalType":"address","name":"_proxy_addr","type":"address"}],"name":"toggleValidVeFXSProxy","payable":false},"contractInputsValues":{"_proxy_addr":"0x59CFCD384746ec3035299D90782Be065e466800B"}},{"to":"0x5684d5566bb438D8Ef7B3C1E5da9450cD19C1b9f","value":"0","data":null,"contractMethod":{"inputs":[{"internalType":"address","name":"_proxy_addr","type":"address"}],"name":"toggleValidVeFXSProxy","payable":false},"contractInputsValues":{"_proxy_addr":"0x59CFCD384746ec3035299D90782Be065e466800B"}}]} \ No newline at end of file +{"version":"1.0","chainId":"1","createdAt":1699569887000,"meta":{"name":"Transactions Batch","description":"","txBuilderVersion":"1.14.1","createdFromSafeAddress":"0xB1748C79709f4Ba2Dd82834B8c82D4a505003f27","createdFromOwnerAddress":"","checksum":"0x09b10bddb04abf13ae04d5ed4242f9177293f83a4cf5c2e003cb07fd1953a97d"},"transactions":[{"to":"0xeCF134dF5DE1e0E12A441D446ff81994Cb0301A2","value":"0","data":null,"contractMethod":{"inputs":[{"internalType":"address","name":"_vault","type":"address"}],"name":"setVault","payable":false},"contractInputsValues":{"_vault":"0xD591A551bC1776A7Ce066a5Df7640266afc850bF"}},{"to":"0x3669C421b77340B2979d1A00a792CC2ee0FcE737","value":"0","data":null,"contractMethod":{"inputs":[{"name":"addr","type":"address"},{"name":"gauge_type","type":"int128"},{"name":"weight","type":"uint256"}],"name":"add_gauge","payable":false},"contractInputsValues":{"addr":"0xD591A551bC1776A7Ce066a5Df7640266afc850bF","gauge_type":"0","weight":"1000"}},{"to":"0xD591A551bC1776A7Ce066a5Df7640266afc850bF","value":"0","data":null,"contractMethod":{"inputs":[{"internalType":"address","name":"reward_token_address","type":"address"},{"internalType":"uint256","name":"_new_rate","type":"uint256"},{"internalType":"address","name":"_gauge_controller_address","type":"address"},{"internalType":"address","name":"_rewards_distributor_address","type":"address"}],"name":"setRewardVars","payable":false},"contractInputsValues":{"reward_token_address":"0x3432B6A60D23Ca0dFCa7761B7ab56459D9C964D0","_new_rate":"0","_gauge_controller_address":"0x3669C421b77340B2979d1A00a792CC2ee0FcE737","_rewards_distributor_address":"0x278dC748edA1d8eFEf1aDFB518542612b49Fcd34"}},{"to":"0xD591A551bC1776A7Ce066a5Df7640266afc850bF","value":"0","data":null,"contractMethod":{"inputs":[{"internalType":"address","name":"_proxy_addr","type":"address"}],"name":"toggleValidVeFXSProxy","payable":false},"contractInputsValues":{"_proxy_addr":"0x59CFCD384746ec3035299D90782Be065e466800B"}}]} \ No newline at end of file diff --git a/src/hardhat/gnosis-safe-scripts/Convex_Farm_Deployments/Step_2_CRVCVXDistro_Contracts.js b/src/hardhat/gnosis-safe-scripts/Convex_Farm_Deployments/Step_2_CRVCVXDistro_Contracts.js index e05c964d..d0089b99 100644 --- a/src/hardhat/gnosis-safe-scripts/Convex_Farm_Deployments/Step_2_CRVCVXDistro_Contracts.js +++ b/src/hardhat/gnosis-safe-scripts/Convex_Farm_Deployments/Step_2_CRVCVXDistro_Contracts.js @@ -9,6 +9,7 @@ const chalk = require("chalk"); const fse = require("fs-extra"); const { formatUnits } = require("ethers/lib/utils"); const { BIG6, BIG18, stringifyReplacer, serializeJSONObject, calculateChecksum } = require("../utils/utils"); +const { wrapperAddrs, farmAddrs } = require("./Script_Constants"); const constants = require(path.join(__dirname, '../../../../dist/types/constants')); const CONTRACT_ADDRESSES = constants.CONTRACT_ADDRESSES; let ADDRS_ETH = CONTRACT_ADDRESSES.ethereum; @@ -44,20 +45,6 @@ async function main() { console.log(`Using env file from ${envPath}`); const thisBlock = await ethers.provider.getBlock(await ethers.provider.getBlockNumber()); - const wrapperAddrs = [ - ADDRS_ETH_LPS['Convex stkcvxfrxETHmsETH'], - ADDRS_ETH_LPS['Convex stkcvxfrxETHrETH_StaFi'], - ADDRS_ETH_LPS['Convex stkcvxfrxETHzETH'], - ADDRS_ETH_LPS['Convex stkcvxGRAIFRAXBP'] - ]; - - const farmAddrs = [ - ADDRS_ETH_FARMS['Convex stkcvxfrxETHmsETH'], - ADDRS_ETH_FARMS['Convex stkcvxfrxETHrETH_StaFi'], - ADDRS_ETH_FARMS['Convex stkcvxfrxETHzETH'], - ADDRS_ETH_FARMS['Convex stkcvxGRAIFRAXBP'] - ]; - // =============================================================== // ============== GET THE DISTRO CONTRACT ADDRESSES ============== // =============================================================== diff --git a/src/hardhat/gnosis-safe-scripts/Convex_Farm_Deployments/Step_2_CRVCVXDistro_Contracts.json b/src/hardhat/gnosis-safe-scripts/Convex_Farm_Deployments/Step_2_CRVCVXDistro_Contracts.json index b342abae..c3813757 100644 --- a/src/hardhat/gnosis-safe-scripts/Convex_Farm_Deployments/Step_2_CRVCVXDistro_Contracts.json +++ b/src/hardhat/gnosis-safe-scripts/Convex_Farm_Deployments/Step_2_CRVCVXDistro_Contracts.json @@ -1 +1 @@ -{"version":"1.0","chainId":"1","createdAt":1691683895000,"meta":{"name":"Transactions Batch","description":"","txBuilderVersion":"1.14.1","createdFromSafeAddress":"0xB1748C79709f4Ba2Dd82834B8c82D4a505003f27","createdFromOwnerAddress":"","checksum":"0xd02ebaabb0909b6b951b61615b30c6a5ade10d4c66631502848b543288cf64e7"},"transactions":[{"to":"0x2816Ab1F4Db656602b6B0041c006652A4F5D0437","value":"0","data":null,"contractMethod":{"inputs":[{"internalType":"address","name":"reward_token_address","type":"address"},{"internalType":"address","name":"new_manager_address","type":"address"}],"name":"changeTokenManager","payable":false},"contractInputsValues":{"reward_token_address":"0xd533a949740bb3306d119cc777fa900ba034cd52","new_manager_address":"0xfec4856273EE044f0cdDE84EE5Ddd9d7715782c6"}},{"to":"0x76CF35aB1450D3A6c84EdDB8A960A5F65B76e706","value":"0","data":null,"contractMethod":{"inputs":[{"internalType":"address","name":"reward_token_address","type":"address"},{"internalType":"address","name":"new_manager_address","type":"address"}],"name":"changeTokenManager","payable":false},"contractInputsValues":{"reward_token_address":"0xd533a949740bb3306d119cc777fa900ba034cd52","new_manager_address":"0xB757E648aC047e0c64bcD9352dcD0bC054528F29"}},{"to":"0x882B9fad02D1a7436449dcdE9934Eeb9E287909c","value":"0","data":null,"contractMethod":{"inputs":[{"internalType":"address","name":"reward_token_address","type":"address"},{"internalType":"address","name":"new_manager_address","type":"address"}],"name":"changeTokenManager","payable":false},"contractInputsValues":{"reward_token_address":"0xd533a949740bb3306d119cc777fa900ba034cd52","new_manager_address":"0xF415B5B139Cf0f6e7dF5451F84c1481281481AB9"}},{"to":"0x5684d5566bb438D8Ef7B3C1E5da9450cD19C1b9f","value":"0","data":null,"contractMethod":{"inputs":[{"internalType":"address","name":"reward_token_address","type":"address"},{"internalType":"address","name":"new_manager_address","type":"address"}],"name":"changeTokenManager","payable":false},"contractInputsValues":{"reward_token_address":"0xd533a949740bb3306d119cc777fa900ba034cd52","new_manager_address":"0x737bF1D5Be1ff9807e94BC6E4Af4D32eFFa7FA8e"}},{"to":"0x2816Ab1F4Db656602b6B0041c006652A4F5D0437","value":"0","data":null,"contractMethod":{"inputs":[{"internalType":"address","name":"reward_token_address","type":"address"},{"internalType":"uint256","name":"_new_rate","type":"uint256"},{"internalType":"address","name":"_gauge_controller_address","type":"address"},{"internalType":"address","name":"_rewards_distributor_address","type":"address"}],"name":"setRewardVars","payable":false},"contractInputsValues":{"reward_token_address":"0xd533a949740bb3306d119cc777fa900ba034cd52","_new_rate":"0","_gauge_controller_address":"0x0000000000000000000000000000000000000000","_rewards_distributor_address":"0xfec4856273EE044f0cdDE84EE5Ddd9d7715782c6"}},{"to":"0x76CF35aB1450D3A6c84EdDB8A960A5F65B76e706","value":"0","data":null,"contractMethod":{"inputs":[{"internalType":"address","name":"reward_token_address","type":"address"},{"internalType":"uint256","name":"_new_rate","type":"uint256"},{"internalType":"address","name":"_gauge_controller_address","type":"address"},{"internalType":"address","name":"_rewards_distributor_address","type":"address"}],"name":"setRewardVars","payable":false},"contractInputsValues":{"reward_token_address":"0xd533a949740bb3306d119cc777fa900ba034cd52","_new_rate":"0","_gauge_controller_address":"0x0000000000000000000000000000000000000000","_rewards_distributor_address":"0xB757E648aC047e0c64bcD9352dcD0bC054528F29"}},{"to":"0x882B9fad02D1a7436449dcdE9934Eeb9E287909c","value":"0","data":null,"contractMethod":{"inputs":[{"internalType":"address","name":"reward_token_address","type":"address"},{"internalType":"uint256","name":"_new_rate","type":"uint256"},{"internalType":"address","name":"_gauge_controller_address","type":"address"},{"internalType":"address","name":"_rewards_distributor_address","type":"address"}],"name":"setRewardVars","payable":false},"contractInputsValues":{"reward_token_address":"0xd533a949740bb3306d119cc777fa900ba034cd52","_new_rate":"0","_gauge_controller_address":"0x0000000000000000000000000000000000000000","_rewards_distributor_address":"0xF415B5B139Cf0f6e7dF5451F84c1481281481AB9"}},{"to":"0x5684d5566bb438D8Ef7B3C1E5da9450cD19C1b9f","value":"0","data":null,"contractMethod":{"inputs":[{"internalType":"address","name":"reward_token_address","type":"address"},{"internalType":"uint256","name":"_new_rate","type":"uint256"},{"internalType":"address","name":"_gauge_controller_address","type":"address"},{"internalType":"address","name":"_rewards_distributor_address","type":"address"}],"name":"setRewardVars","payable":false},"contractInputsValues":{"reward_token_address":"0xd533a949740bb3306d119cc777fa900ba034cd52","_new_rate":"0","_gauge_controller_address":"0x0000000000000000000000000000000000000000","_rewards_distributor_address":"0x737bF1D5Be1ff9807e94BC6E4Af4D32eFFa7FA8e"}},{"to":"0x2816Ab1F4Db656602b6B0041c006652A4F5D0437","value":"0","data":null,"contractMethod":{"inputs":[{"internalType":"address","name":"reward_token_address","type":"address"},{"internalType":"address","name":"new_manager_address","type":"address"}],"name":"changeTokenManager","payable":false},"contractInputsValues":{"reward_token_address":"0x4e3fbd56cd56c3e72c1403e103b45db9da5b9d2b","new_manager_address":"0xfec4856273EE044f0cdDE84EE5Ddd9d7715782c6"}},{"to":"0x76CF35aB1450D3A6c84EdDB8A960A5F65B76e706","value":"0","data":null,"contractMethod":{"inputs":[{"internalType":"address","name":"reward_token_address","type":"address"},{"internalType":"address","name":"new_manager_address","type":"address"}],"name":"changeTokenManager","payable":false},"contractInputsValues":{"reward_token_address":"0x4e3fbd56cd56c3e72c1403e103b45db9da5b9d2b","new_manager_address":"0xB757E648aC047e0c64bcD9352dcD0bC054528F29"}},{"to":"0x882B9fad02D1a7436449dcdE9934Eeb9E287909c","value":"0","data":null,"contractMethod":{"inputs":[{"internalType":"address","name":"reward_token_address","type":"address"},{"internalType":"address","name":"new_manager_address","type":"address"}],"name":"changeTokenManager","payable":false},"contractInputsValues":{"reward_token_address":"0x4e3fbd56cd56c3e72c1403e103b45db9da5b9d2b","new_manager_address":"0xF415B5B139Cf0f6e7dF5451F84c1481281481AB9"}},{"to":"0x5684d5566bb438D8Ef7B3C1E5da9450cD19C1b9f","value":"0","data":null,"contractMethod":{"inputs":[{"internalType":"address","name":"reward_token_address","type":"address"},{"internalType":"address","name":"new_manager_address","type":"address"}],"name":"changeTokenManager","payable":false},"contractInputsValues":{"reward_token_address":"0x4e3fbd56cd56c3e72c1403e103b45db9da5b9d2b","new_manager_address":"0x737bF1D5Be1ff9807e94BC6E4Af4D32eFFa7FA8e"}},{"to":"0x2816Ab1F4Db656602b6B0041c006652A4F5D0437","value":"0","data":null,"contractMethod":{"inputs":[{"internalType":"address","name":"reward_token_address","type":"address"},{"internalType":"uint256","name":"_new_rate","type":"uint256"},{"internalType":"address","name":"_gauge_controller_address","type":"address"},{"internalType":"address","name":"_rewards_distributor_address","type":"address"}],"name":"setRewardVars","payable":false},"contractInputsValues":{"reward_token_address":"0x4e3fbd56cd56c3e72c1403e103b45db9da5b9d2b","_new_rate":"0","_gauge_controller_address":"0x0000000000000000000000000000000000000000","_rewards_distributor_address":"0xfec4856273EE044f0cdDE84EE5Ddd9d7715782c6"}},{"to":"0x76CF35aB1450D3A6c84EdDB8A960A5F65B76e706","value":"0","data":null,"contractMethod":{"inputs":[{"internalType":"address","name":"reward_token_address","type":"address"},{"internalType":"uint256","name":"_new_rate","type":"uint256"},{"internalType":"address","name":"_gauge_controller_address","type":"address"},{"internalType":"address","name":"_rewards_distributor_address","type":"address"}],"name":"setRewardVars","payable":false},"contractInputsValues":{"reward_token_address":"0x4e3fbd56cd56c3e72c1403e103b45db9da5b9d2b","_new_rate":"0","_gauge_controller_address":"0x0000000000000000000000000000000000000000","_rewards_distributor_address":"0xB757E648aC047e0c64bcD9352dcD0bC054528F29"}},{"to":"0x882B9fad02D1a7436449dcdE9934Eeb9E287909c","value":"0","data":null,"contractMethod":{"inputs":[{"internalType":"address","name":"reward_token_address","type":"address"},{"internalType":"uint256","name":"_new_rate","type":"uint256"},{"internalType":"address","name":"_gauge_controller_address","type":"address"},{"internalType":"address","name":"_rewards_distributor_address","type":"address"}],"name":"setRewardVars","payable":false},"contractInputsValues":{"reward_token_address":"0x4e3fbd56cd56c3e72c1403e103b45db9da5b9d2b","_new_rate":"0","_gauge_controller_address":"0x0000000000000000000000000000000000000000","_rewards_distributor_address":"0xF415B5B139Cf0f6e7dF5451F84c1481281481AB9"}},{"to":"0x5684d5566bb438D8Ef7B3C1E5da9450cD19C1b9f","value":"0","data":null,"contractMethod":{"inputs":[{"internalType":"address","name":"reward_token_address","type":"address"},{"internalType":"uint256","name":"_new_rate","type":"uint256"},{"internalType":"address","name":"_gauge_controller_address","type":"address"},{"internalType":"address","name":"_rewards_distributor_address","type":"address"}],"name":"setRewardVars","payable":false},"contractInputsValues":{"reward_token_address":"0x4e3fbd56cd56c3e72c1403e103b45db9da5b9d2b","_new_rate":"0","_gauge_controller_address":"0x0000000000000000000000000000000000000000","_rewards_distributor_address":"0x737bF1D5Be1ff9807e94BC6E4Af4D32eFFa7FA8e"}}]} \ No newline at end of file +{"version":"1.0","chainId":"1","createdAt":1699642031000,"meta":{"name":"Transactions Batch","description":"","txBuilderVersion":"1.14.1","createdFromSafeAddress":"0xB1748C79709f4Ba2Dd82834B8c82D4a505003f27","createdFromOwnerAddress":"","checksum":"0xf2ba90c6758070dae0322133e056648b0f038270c3ea6fd36e87ab63b986a86a"},"transactions":[{"to":"0xD591A551bC1776A7Ce066a5Df7640266afc850bF","value":"0","data":null,"contractMethod":{"inputs":[{"internalType":"address","name":"reward_token_address","type":"address"},{"internalType":"address","name":"new_manager_address","type":"address"}],"name":"changeTokenManager","payable":false},"contractInputsValues":{"reward_token_address":"0xd533a949740bb3306d119cc777fa900ba034cd52","new_manager_address":"0x082F707e6D93648e12563C871Cc98Cc9539Fd062"}},{"to":"0xD591A551bC1776A7Ce066a5Df7640266afc850bF","value":"0","data":null,"contractMethod":{"inputs":[{"internalType":"address","name":"reward_token_address","type":"address"},{"internalType":"uint256","name":"_new_rate","type":"uint256"},{"internalType":"address","name":"_gauge_controller_address","type":"address"},{"internalType":"address","name":"_rewards_distributor_address","type":"address"}],"name":"setRewardVars","payable":false},"contractInputsValues":{"reward_token_address":"0xd533a949740bb3306d119cc777fa900ba034cd52","_new_rate":"0","_gauge_controller_address":"0x0000000000000000000000000000000000000000","_rewards_distributor_address":"0x082F707e6D93648e12563C871Cc98Cc9539Fd062"}},{"to":"0xD591A551bC1776A7Ce066a5Df7640266afc850bF","value":"0","data":null,"contractMethod":{"inputs":[{"internalType":"address","name":"reward_token_address","type":"address"},{"internalType":"address","name":"new_manager_address","type":"address"}],"name":"changeTokenManager","payable":false},"contractInputsValues":{"reward_token_address":"0x4e3fbd56cd56c3e72c1403e103b45db9da5b9d2b","new_manager_address":"0x082F707e6D93648e12563C871Cc98Cc9539Fd062"}},{"to":"0xD591A551bC1776A7Ce066a5Df7640266afc850bF","value":"0","data":null,"contractMethod":{"inputs":[{"internalType":"address","name":"reward_token_address","type":"address"},{"internalType":"uint256","name":"_new_rate","type":"uint256"},{"internalType":"address","name":"_gauge_controller_address","type":"address"},{"internalType":"address","name":"_rewards_distributor_address","type":"address"}],"name":"setRewardVars","payable":false},"contractInputsValues":{"reward_token_address":"0x4e3fbd56cd56c3e72c1403e103b45db9da5b9d2b","_new_rate":"0","_gauge_controller_address":"0x0000000000000000000000000000000000000000","_rewards_distributor_address":"0x082F707e6D93648e12563C871Cc98Cc9539Fd062"}}]} \ No newline at end of file diff --git a/src/hardhat/gnosis-safe-scripts/Convex_Farm_Deployments/Step_3_RewDist_Seeding_Sync.js b/src/hardhat/gnosis-safe-scripts/Convex_Farm_Deployments/Step_3_RewDist_Seeding_Sync.js index adf2448f..55226e9c 100644 --- a/src/hardhat/gnosis-safe-scripts/Convex_Farm_Deployments/Step_3_RewDist_Seeding_Sync.js +++ b/src/hardhat/gnosis-safe-scripts/Convex_Farm_Deployments/Step_3_RewDist_Seeding_Sync.js @@ -9,6 +9,7 @@ const chalk = require("chalk"); const fse = require("fs-extra"); const { formatUnits } = require("ethers/lib/utils"); const { BIG6, BIG18, stringifyReplacer, serializeJSONObject, calculateChecksum } = require("../utils/utils"); +const { wrapperAddrs, farmAddrs } = require("./Script_Constants"); const constants = require(path.join(__dirname, '../../../../dist/types/constants')); const CONTRACT_ADDRESSES = constants.CONTRACT_ADDRESSES; let ADDRS_ETH = CONTRACT_ADDRESSES.ethereum; @@ -44,20 +45,6 @@ async function main() { console.log(`Using env file from ${envPath}`); const thisBlock = await ethers.provider.getBlock(await ethers.provider.getBlockNumber()); - const wrapperAddrs = [ - ADDRS_ETH_LPS['Convex stkcvxfrxETHmsETH'], - ADDRS_ETH_LPS['Convex stkcvxfrxETHrETH_StaFi'], - ADDRS_ETH_LPS['Convex stkcvxfrxETHzETH'], - ADDRS_ETH_LPS['Convex stkcvxGRAIFRAXBP'] - ]; - - const farmAddrs = [ - ADDRS_ETH_FARMS['Convex stkcvxfrxETHmsETH'], - ADDRS_ETH_FARMS['Convex stkcvxfrxETHrETH_StaFi'], - ADDRS_ETH_FARMS['Convex stkcvxfrxETHzETH'], - ADDRS_ETH_FARMS['Convex stkcvxGRAIFRAXBP'] - ]; - // =============================================================== // =============== ADD GAUGES TO REWARD DISTRIBUTOR ============== // =============================================================== diff --git a/src/hardhat/gnosis-safe-scripts/Convex_Farm_Deployments/Step_3_RewDist_Seeding_Sync.json b/src/hardhat/gnosis-safe-scripts/Convex_Farm_Deployments/Step_3_RewDist_Seeding_Sync.json index c3f2b4cc..ec3787dd 100644 --- a/src/hardhat/gnosis-safe-scripts/Convex_Farm_Deployments/Step_3_RewDist_Seeding_Sync.json +++ b/src/hardhat/gnosis-safe-scripts/Convex_Farm_Deployments/Step_3_RewDist_Seeding_Sync.json @@ -1 +1 @@ -{"version":"1.0","chainId":"1","createdAt":1691684867000,"meta":{"name":"Transactions Batch","description":"","txBuilderVersion":"1.14.1","createdFromSafeAddress":"0xB1748C79709f4Ba2Dd82834B8c82D4a505003f27","createdFromOwnerAddress":"","checksum":"0x359f88ce43be9e5f2727bb432a7c776c64a90fc5047cb61f379a4b0c1d518bea"},"transactions":[{"to":"0x278dC748edA1d8eFEf1aDFB518542612b49Fcd34","value":"0","data":null,"contractMethod":{"inputs":[{"internalType":"address","name":"_gauge_address","type":"address"},{"internalType":"bool","name":"_is_middleman","type":"bool"},{"internalType":"bool","name":"_is_active","type":"bool"}],"name":"setGaugeState","payable":false},"contractInputsValues":{"_gauge_address":"0x2816Ab1F4Db656602b6B0041c006652A4F5D0437","_is_middleman":"false","_is_active":"true"}},{"to":"0x278dC748edA1d8eFEf1aDFB518542612b49Fcd34","value":"0","data":null,"contractMethod":{"inputs":[{"internalType":"address","name":"_gauge_address","type":"address"},{"internalType":"bool","name":"_is_middleman","type":"bool"},{"internalType":"bool","name":"_is_active","type":"bool"}],"name":"setGaugeState","payable":false},"contractInputsValues":{"_gauge_address":"0x76CF35aB1450D3A6c84EdDB8A960A5F65B76e706","_is_middleman":"false","_is_active":"true"}},{"to":"0x278dC748edA1d8eFEf1aDFB518542612b49Fcd34","value":"0","data":null,"contractMethod":{"inputs":[{"internalType":"address","name":"_gauge_address","type":"address"},{"internalType":"bool","name":"_is_middleman","type":"bool"},{"internalType":"bool","name":"_is_active","type":"bool"}],"name":"setGaugeState","payable":false},"contractInputsValues":{"_gauge_address":"0x882B9fad02D1a7436449dcdE9934Eeb9E287909c","_is_middleman":"false","_is_active":"true"}},{"to":"0x278dC748edA1d8eFEf1aDFB518542612b49Fcd34","value":"0","data":null,"contractMethod":{"inputs":[{"internalType":"address","name":"_gauge_address","type":"address"},{"internalType":"bool","name":"_is_middleman","type":"bool"},{"internalType":"bool","name":"_is_active","type":"bool"}],"name":"setGaugeState","payable":false},"contractInputsValues":{"_gauge_address":"0x5684d5566bb438D8Ef7B3C1E5da9450cD19C1b9f","_is_middleman":"false","_is_active":"true"}},{"to":"0x3432B6A60D23Ca0dFCa7761B7ab56459D9C964D0","value":"0","data":null,"contractMethod":{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","payable":false},"contractInputsValues":{"recipient":"0x2816Ab1F4Db656602b6B0041c006652A4F5D0437","amount":"1000000000000000000"}},{"to":"0x3432B6A60D23Ca0dFCa7761B7ab56459D9C964D0","value":"0","data":null,"contractMethod":{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","payable":false},"contractInputsValues":{"recipient":"0x76CF35aB1450D3A6c84EdDB8A960A5F65B76e706","amount":"1000000000000000000"}},{"to":"0x3432B6A60D23Ca0dFCa7761B7ab56459D9C964D0","value":"0","data":null,"contractMethod":{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","payable":false},"contractInputsValues":{"recipient":"0x882B9fad02D1a7436449dcdE9934Eeb9E287909c","amount":"1000000000000000000"}},{"to":"0x3432B6A60D23Ca0dFCa7761B7ab56459D9C964D0","value":"0","data":null,"contractMethod":{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","payable":false},"contractInputsValues":{"recipient":"0x5684d5566bb438D8Ef7B3C1E5da9450cD19C1b9f","amount":"1000000000000000000"}},{"to":"0x2816Ab1F4Db656602b6B0041c006652A4F5D0437","value":"0","data":null,"contractMethod":{"inputs":[],"name":"sync","payable":false},"contractInputsValues":{}},{"to":"0x76CF35aB1450D3A6c84EdDB8A960A5F65B76e706","value":"0","data":null,"contractMethod":{"inputs":[],"name":"sync","payable":false},"contractInputsValues":{}},{"to":"0x882B9fad02D1a7436449dcdE9934Eeb9E287909c","value":"0","data":null,"contractMethod":{"inputs":[],"name":"sync","payable":false},"contractInputsValues":{}},{"to":"0x5684d5566bb438D8Ef7B3C1E5da9450cD19C1b9f","value":"0","data":null,"contractMethod":{"inputs":[],"name":"sync","payable":false},"contractInputsValues":{}}]} \ No newline at end of file +{"version":"1.0","chainId":"1","createdAt":1699662839000,"meta":{"name":"Transactions Batch","description":"","txBuilderVersion":"1.14.1","createdFromSafeAddress":"0xB1748C79709f4Ba2Dd82834B8c82D4a505003f27","createdFromOwnerAddress":"","checksum":"0xbbef45c5abc8ce162d4458e12322d25c157a0dd07f571d4162bc70f339bb2d96"},"transactions":[{"to":"0x278dC748edA1d8eFEf1aDFB518542612b49Fcd34","value":"0","data":null,"contractMethod":{"inputs":[{"internalType":"address","name":"_gauge_address","type":"address"},{"internalType":"bool","name":"_is_middleman","type":"bool"},{"internalType":"bool","name":"_is_active","type":"bool"}],"name":"setGaugeState","payable":false},"contractInputsValues":{"_gauge_address":"0xD591A551bC1776A7Ce066a5Df7640266afc850bF","_is_middleman":"false","_is_active":"true"}},{"to":"0x3432B6A60D23Ca0dFCa7761B7ab56459D9C964D0","value":"0","data":null,"contractMethod":{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","payable":false},"contractInputsValues":{"recipient":"0xD591A551bC1776A7Ce066a5Df7640266afc850bF","amount":"1000000000000000000"}},{"to":"0xD591A551bC1776A7Ce066a5Df7640266afc850bF","value":"0","data":null,"contractMethod":{"inputs":[],"name":"sync","payable":false},"contractInputsValues":{}}]} \ No newline at end of file diff --git a/src/hardhat/gnosis-safe-scripts/Frax_Comptroller_Routine/Sunday_Part_1.js b/src/hardhat/gnosis-safe-scripts/Frax_Comptroller_Routine/Sunday_Part_1.js index a2dfd108..5c93df99 100644 --- a/src/hardhat/gnosis-safe-scripts/Frax_Comptroller_Routine/Sunday_Part_1.js +++ b/src/hardhat/gnosis-safe-scripts/Frax_Comptroller_Routine/Sunday_Part_1.js @@ -212,6 +212,7 @@ async function main() { // }); // Convex Frax FRAX/USDC (stkcvxFRAXBP) rewards + // ================================================================ const IStakingProxyConvex = path.join(__dirname, '../../artifacts/contracts/Misc_AMOs/convex/IStakingProxyConvex.sol/IStakingProxyConvex.json'); const { abi: IStakingProxyConvex_ABI } = JSON.parse( await fse.readFileSync(IStakingProxyConvex, 'utf-8')); const convex_frax_usdc_staking_proxy = new ethers.Contract("0x2AA609715488B09EFA93883759e8B089FBa11296", IStakingProxyConvex_ABI).connect(owner); @@ -240,6 +241,35 @@ async function main() { "contractInputsValues": null }); + + // Convex Frax FRAX/USDP (stkcvxFRAXUSDP) rewards + // ================================================================ + const convex_frax_usdp_staking_proxy = new ethers.Contract("0xD25D60aBafC220dd6F7BA37baD23e1105Db05a06", IStakingProxyConvex_ABI).connect(owner); + const convex_frax_usdp_rewards = await convex_frax_usdp_staking_proxy.callStatic.earned(); + const crv_from_convex_frax_usdp = BigNumber.from(convex_frax_usdp_rewards[1][1]); + const cvx_from_convex_frax_usdp = BigNumber.from(convex_frax_usdp_rewards[1][2]); + + // FRAXUSDP Rewards: Sell all + summary_info.crv_to_sell = summary_info.crv_to_sell.add(crv_from_convex_frax_usdp); + summary_info.cvx_to_sell = summary_info.cvx_to_sell.add(cvx_from_convex_frax_usdp); + console.log(`----------- Convex Frax FRAX/USDP (stkcvxFRAXUSDP) -----------`); + console.log(`CRV: ${formatUnits(crv_from_convex_frax_usdp, 18)}`); + console.log(`CVX: ${formatUnits(cvx_from_convex_frax_usdp, 18)}`); + + // ===================================== + batch_json.transactions.push({ + "to": "0xD25D60aBafC220dd6F7BA37baD23e1105Db05a06", + "value": "0", + "data": null, + "contractMethod": { + "inputs": [], + "name": "getReward", + "payable": false + }, + "contractInputsValues": null + }); + + // // Convex Frax Frax/FPI (stkcvxFPIFRAX) rewards // const convex_frax_fpi_staking_proxy = new ethers.Contract("0x2df2378103baB456457329D4C603440B92b9c0bd", IStakingProxyConvex_ABI).connect(owner); // const convex_frax_fpi_rewards = await convex_frax_fpi_staking_proxy.earned(); diff --git a/src/hardhat/gnosis-safe-scripts/Frax_Comptroller_Routine/Sunday_Part_1.json b/src/hardhat/gnosis-safe-scripts/Frax_Comptroller_Routine/Sunday_Part_1.json index 5af39765..29cd9efc 100644 --- a/src/hardhat/gnosis-safe-scripts/Frax_Comptroller_Routine/Sunday_Part_1.json +++ b/src/hardhat/gnosis-safe-scripts/Frax_Comptroller_Routine/Sunday_Part_1.json @@ -1 +1 @@ -{"version":"1.0","chainId":"1","createdAt":1693775939000,"meta":{"name":"Transactions Batch","description":"","txBuilderVersion":"1.14.1","createdFromSafeAddress":"0xB1748C79709f4Ba2Dd82834B8c82D4a505003f27","createdFromOwnerAddress":"","checksum":"0xe2535b158543e63b5f29a7b86f77643e538dad5e2c9677d982e22f2ee236d72c"},"transactions":[{"to":"0x2AA609715488B09EFA93883759e8B089FBa11296","value":"0","data":null,"contractMethod":{"inputs":[],"name":"getReward","payable":false},"contractInputsValues":null},{"to":"0x3f29cB4111CbdA8081642DA1f75B3c12DECf2516","value":"0","data":null,"contractMethod":{"inputs":[{"internalType":"address[]","name":"rewardContracts","type":"address[]"},{"internalType":"address[]","name":"extraRewardContracts","type":"address[]"},{"internalType":"address[]","name":"tokenRewardContracts","type":"address[]"},{"internalType":"address[]","name":"tokenRewardTokens","type":"address[]"},{"internalType":"uint256","name":"depositCrvMaxAmount","type":"uint256"},{"internalType":"uint256","name":"minAmountOut","type":"uint256"},{"internalType":"uint256","name":"depositCvxMaxAmount","type":"uint256"},{"internalType":"uint256","name":"spendCvxAmount","type":"uint256"},{"internalType":"uint256","name":"options","type":"uint256"}],"name":"claimRewards","payable":false},"contractInputsValues":{"rewardContracts":"[\"0x7e880867363A7e321f5d260Cade2B0Bb2F717B02\", \"0x6991C1CD588c4e6f6f1de3A0bac5B8BbAb7aAF6d\", \"0x26598e3E511ADFadefD70ab2C3475Ff741741104\", \"0x47809eE386D1dEC29c0b13f21ba30F564517538B\", \"0x053e1dad223A206e6BCa24C77786bb69a10e427d\"]","extraRewardContracts":"[]","tokenRewardContracts":"[]","tokenRewardTokens":"[]","depositCrvMaxAmount":"0","minAmountOut":"0","depositCvxMaxAmount":"0","spendCvxAmount":"0","options":"0"}},{"to":"0xaa0C3f5F7DFD688C6E646F66CD2a6B66ACdbE434","value":"0","data":null,"contractMethod":{"inputs":[{"internalType":"address","name":"_account","type":"address"}],"name":"getReward","payable":false},"contractInputsValues":{"_account":"0xB1748C79709f4Ba2Dd82834B8c82D4a505003f27"}},{"to":"0x72a19342e8F1838460eBFCCEf09F6585e32db86E","value":"0","data":null,"contractMethod":{"inputs":[{"internalType":"address","name":"_account","type":"address"}],"name":"getReward","payable":false},"contractInputsValues":{"_account":"0xB1748C79709f4Ba2Dd82834B8c82D4a505003f27"}},{"to":"0x72a19342e8F1838460eBFCCEf09F6585e32db86E","value":"0","data":null,"contractMethod":{"inputs":[{"internalType":"bool","name":"_relock","type":"bool"}],"name":"processExpiredLocks","payable":false},"contractInputsValues":{"_relock":true}},{"to":"0x5E8422345238F34275888049021821E8E08CAa1f","value":"0","data":null,"contractMethod":{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","payable":false},"contractInputsValues":{"spender":"0xac3E018457B222d93114458476f3E3416Abbe38F","amount":"17574000000000000000"}},{"to":"0xac3E018457B222d93114458476f3E3416Abbe38F","value":"0","data":null,"contractMethod":{"inputs":[{"internalType":"uint256","name":"assets","type":"uint256"},{"internalType":"address","name":"receiver","type":"address"}],"name":"deposit","payable":false},"contractInputsValues":{"assets":"17574000000000000000","receiver":"0xB1748C79709f4Ba2Dd82834B8c82D4a505003f27"}},{"to":"0x358fE82370a1B9aDaE2E3ad69D6cF9e503c96018","value":"0","data":null,"contractMethod":{"inputs":[{"internalType":"address","name":"gauge_addr","type":"address"}],"name":"mint","payable":false},"contractInputsValues":{"gauge_addr":"0xB2Ac3382dA625eb41Fc803b57743f941a484e2a6"}},{"to":"0x3814307b86b54b1d8e7B2Ac34662De9125F8f4E6","value":"0","data":null,"contractMethod":{"inputs":[],"name":"collectFees","payable":false},"contractInputsValues":null},{"to":"0xC36442b4a4522E871399CD717aBDD847Ab11FE88","value":"0","data":null,"contractMethod":{"inputs":[{"components":[{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint128","name":"amount0Max","type":"uint128"},{"internalType":"uint128","name":"amount1Max","type":"uint128"}],"internalType":"struct INonfungiblePositionManager.CollectParams","name":"params","type":"tuple"}],"name":"collect","payable":true},"contractInputsValues":{"params":"[\"215775\",\"0xB1748C79709f4Ba2Dd82834B8c82D4a505003f27\",\"340282366920938463463374607431768211455\",\"340282366920938463463374607431768211455\"]"}},{"to":"0xC36442b4a4522E871399CD717aBDD847Ab11FE88","value":"0","data":null,"contractMethod":{"inputs":[{"components":[{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint128","name":"amount0Max","type":"uint128"},{"internalType":"uint128","name":"amount1Max","type":"uint128"}],"internalType":"struct INonfungiblePositionManager.CollectParams","name":"params","type":"tuple"}],"name":"collect","payable":true},"contractInputsValues":{"params":"[\"219036\",\"0xB1748C79709f4Ba2Dd82834B8c82D4a505003f27\",\"340282366920938463463374607431768211455\",\"340282366920938463463374607431768211455\"]"}},{"to":"0xC36442b4a4522E871399CD717aBDD847Ab11FE88","value":"0","data":null,"contractMethod":{"inputs":[{"components":[{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint128","name":"amount0Max","type":"uint128"},{"internalType":"uint128","name":"amount1Max","type":"uint128"}],"internalType":"struct INonfungiblePositionManager.CollectParams","name":"params","type":"tuple"}],"name":"collect","payable":true},"contractInputsValues":{"params":"[\"219099\",\"0xB1748C79709f4Ba2Dd82834B8c82D4a505003f27\",\"340282366920938463463374607431768211455\",\"340282366920938463463374607431768211455\"]"}},{"to":"0xC36442b4a4522E871399CD717aBDD847Ab11FE88","value":"0","data":null,"contractMethod":{"inputs":[{"components":[{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint128","name":"amount0Max","type":"uint128"},{"internalType":"uint128","name":"amount1Max","type":"uint128"}],"internalType":"struct INonfungiblePositionManager.CollectParams","name":"params","type":"tuple"}],"name":"collect","payable":true},"contractInputsValues":{"params":"[\"304636\",\"0xB1748C79709f4Ba2Dd82834B8c82D4a505003f27\",\"340282366920938463463374607431768211455\",\"340282366920938463463374607431768211455\"]"}},{"to":"0xC36442b4a4522E871399CD717aBDD847Ab11FE88","value":"0","data":null,"contractMethod":{"inputs":[{"components":[{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint128","name":"amount0Max","type":"uint128"},{"internalType":"uint128","name":"amount1Max","type":"uint128"}],"internalType":"struct INonfungiblePositionManager.CollectParams","name":"params","type":"tuple"}],"name":"collect","payable":true},"contractInputsValues":{"params":"[\"419023\",\"0xB1748C79709f4Ba2Dd82834B8c82D4a505003f27\",\"340282366920938463463374607431768211455\",\"340282366920938463463374607431768211455\"]"}},{"to":"0xD533a949740bb3306d119CC777fa900bA034cd52","value":"0","data":null,"contractMethod":{"inputs":[{"name":"_to","type":"address"},{"name":"_value","type":"uint256"}],"name":"transfer","payable":false},"contractInputsValues":{"_to":"0x847FA1A5337C7f24D7066E467F2e2A0f969Ca79F","_value":"79498209620365216679983"}},{"to":"0x847FA1A5337C7f24D7066E467F2e2A0f969Ca79F","value":"0","data":null,"contractMethod":{"inputs":[{"internalType":"uint256","name":"_value","type":"uint256"}],"name":"increaseAmount","payable":false},"contractInputsValues":{"_value":"79498209620365216679983"}},{"to":"0x72a19342e8F1838460eBFCCEf09F6585e32db86E","value":"0","data":null,"contractMethod":{"inputs":[{"internalType":"address","name":"_account","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"},{"internalType":"uint256","name":"_spendRatio","type":"uint256"}],"name":"lock","payable":false},"contractInputsValues":{"_account":"0xB1748C79709f4Ba2Dd82834B8c82D4a505003f27","_amount":"2864800346679820912049","_spendRatio":"0"}}]} \ No newline at end of file +{"version":"1.0","chainId":"1","createdAt":1699749047000,"meta":{"name":"Transactions Batch","description":"","txBuilderVersion":"1.14.1","createdFromSafeAddress":"0xB1748C79709f4Ba2Dd82834B8c82D4a505003f27","createdFromOwnerAddress":"","checksum":"0x5091574eb26ca27b1d347599b1c2b071d34bb6b73fc86044f9df115c23e49248"},"transactions":[{"to":"0x2AA609715488B09EFA93883759e8B089FBa11296","value":"0","data":null,"contractMethod":{"inputs":[],"name":"getReward","payable":false},"contractInputsValues":null},{"to":"0xD25D60aBafC220dd6F7BA37baD23e1105Db05a06","value":"0","data":null,"contractMethod":{"inputs":[],"name":"getReward","payable":false},"contractInputsValues":null},{"to":"0x3f29cB4111CbdA8081642DA1f75B3c12DECf2516","value":"0","data":null,"contractMethod":{"inputs":[{"internalType":"address[]","name":"rewardContracts","type":"address[]"},{"internalType":"address[]","name":"extraRewardContracts","type":"address[]"},{"internalType":"address[]","name":"tokenRewardContracts","type":"address[]"},{"internalType":"address[]","name":"tokenRewardTokens","type":"address[]"},{"internalType":"uint256","name":"depositCrvMaxAmount","type":"uint256"},{"internalType":"uint256","name":"minAmountOut","type":"uint256"},{"internalType":"uint256","name":"depositCvxMaxAmount","type":"uint256"},{"internalType":"uint256","name":"spendCvxAmount","type":"uint256"},{"internalType":"uint256","name":"options","type":"uint256"}],"name":"claimRewards","payable":false},"contractInputsValues":{"rewardContracts":"[\"0x7e880867363A7e321f5d260Cade2B0Bb2F717B02\", \"0x6991C1CD588c4e6f6f1de3A0bac5B8BbAb7aAF6d\", \"0x26598e3E511ADFadefD70ab2C3475Ff741741104\", \"0x47809eE386D1dEC29c0b13f21ba30F564517538B\", \"0x053e1dad223A206e6BCa24C77786bb69a10e427d\"]","extraRewardContracts":"[]","tokenRewardContracts":"[]","tokenRewardTokens":"[]","depositCrvMaxAmount":"0","minAmountOut":"0","depositCvxMaxAmount":"0","spendCvxAmount":"0","options":"0"}},{"to":"0xaa0C3f5F7DFD688C6E646F66CD2a6B66ACdbE434","value":"0","data":null,"contractMethod":{"inputs":[{"internalType":"address","name":"_account","type":"address"}],"name":"getReward","payable":false},"contractInputsValues":{"_account":"0xB1748C79709f4Ba2Dd82834B8c82D4a505003f27"}},{"to":"0x72a19342e8F1838460eBFCCEf09F6585e32db86E","value":"0","data":null,"contractMethod":{"inputs":[{"internalType":"address","name":"_account","type":"address"}],"name":"getReward","payable":false},"contractInputsValues":{"_account":"0xB1748C79709f4Ba2Dd82834B8c82D4a505003f27"}},{"to":"0x72a19342e8F1838460eBFCCEf09F6585e32db86E","value":"0","data":null,"contractMethod":{"inputs":[{"internalType":"bool","name":"_relock","type":"bool"}],"name":"processExpiredLocks","payable":false},"contractInputsValues":{"_relock":true}},{"to":"0x5E8422345238F34275888049021821E8E08CAa1f","value":"0","data":null,"contractMethod":{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","payable":false},"contractInputsValues":{"spender":"0xac3E018457B222d93114458476f3E3416Abbe38F","amount":"15445600000000000000"}},{"to":"0xac3E018457B222d93114458476f3E3416Abbe38F","value":"0","data":null,"contractMethod":{"inputs":[{"internalType":"uint256","name":"assets","type":"uint256"},{"internalType":"address","name":"receiver","type":"address"}],"name":"deposit","payable":false},"contractInputsValues":{"assets":"15445600000000000000","receiver":"0xB1748C79709f4Ba2Dd82834B8c82D4a505003f27"}},{"to":"0x358fE82370a1B9aDaE2E3ad69D6cF9e503c96018","value":"0","data":null,"contractMethod":{"inputs":[{"internalType":"address","name":"gauge_addr","type":"address"}],"name":"mint","payable":false},"contractInputsValues":{"gauge_addr":"0xB2Ac3382dA625eb41Fc803b57743f941a484e2a6"}},{"to":"0x3814307b86b54b1d8e7B2Ac34662De9125F8f4E6","value":"0","data":null,"contractMethod":{"inputs":[],"name":"collectFees","payable":false},"contractInputsValues":null},{"to":"0xD533a949740bb3306d119CC777fa900bA034cd52","value":"0","data":null,"contractMethod":{"inputs":[{"name":"_to","type":"address"},{"name":"_value","type":"uint256"}],"name":"transfer","payable":false},"contractInputsValues":{"_to":"0x847FA1A5337C7f24D7066E467F2e2A0f969Ca79F","_value":"29422432791099899861950"}},{"to":"0x847FA1A5337C7f24D7066E467F2e2A0f969Ca79F","value":"0","data":null,"contractMethod":{"inputs":[{"internalType":"uint256","name":"_value","type":"uint256"}],"name":"increaseAmount","payable":false},"contractInputsValues":{"_value":"29422432791099899861950"}},{"to":"0x72a19342e8F1838460eBFCCEf09F6585e32db86E","value":"0","data":null,"contractMethod":{"inputs":[{"internalType":"address","name":"_account","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"},{"internalType":"uint256","name":"_spendRatio","type":"uint256"}],"name":"lock","payable":false},"contractInputsValues":{"_account":"0xB1748C79709f4Ba2Dd82834B8c82D4a505003f27","_amount":"795200886245943239512","_spendRatio":"0"}}]} \ No newline at end of file diff --git a/src/hardhat/hardhat.config.js b/src/hardhat/hardhat.config.js index 5cd42ea8..c3571c00 100644 --- a/src/hardhat/hardhat.config.js +++ b/src/hardhat/hardhat.config.js @@ -5,6 +5,7 @@ require('dotenv').config({ path: envPath }); require('hardhat-deploy'); require('hardhat-contract-sizer'); require('hardhat-gas-reporter'); +require("hardhat-tracer"); require("@matterlabs/hardhat-zksync-deploy"); require("@matterlabs/hardhat-zksync-solc"); require("@nomiclabs/hardhat-waffle"); @@ -59,12 +60,13 @@ module.exports = { // Also see src/hardhat/justin-scripts/instructions.txt // url: `https://eth-mainnet.alchemyapi.io/v2/${process.env.ALCHEMY_KEY}`, // Ethereum (alternate) - // blockNumber: 17203211 // Pin the block to allow caching + blockNumber: 149451388 // Pin the block to allow caching }, accounts: { mnemonic: process.env.ROPSTEN_HARDHAT_PHRASE }, + // hardfork: 'shanghai' }, arbitrum: { url: process.env.ARBITRUM_NETWORK_ENDPOINT, @@ -73,7 +75,7 @@ module.exports = { }, chainId: 42161, gas: "auto", - gasPrice: 300000000, // 0.3 Gwei + gasPrice: 150000000, // 0.15 Gwei gasMultiplier: 1.2 }, aurora: { @@ -123,7 +125,7 @@ module.exports = { }, chainId: 1, gas: "auto", - gasPrice: 50000000000, // 50 Gwei + gasPrice: 35000000000, // 35 Gwei gasMultiplier: 1.2, }, evmos: { @@ -146,6 +148,32 @@ module.exports = { gasPrice: 750000000000, // 750 Gwei gasMultiplier: 1.2 }, + fraxchain_devnet_l1: { + url:`${process.env.FRAXCHAIN_DEVNET_L1_NETWORK_ENDPOINT}`, + accounts: { + mnemonic: process.env.MNEMONIC_PHRASE, + }, + httpHeaders: { + "Cookie": `${process.env.FRAXCHAIN_DEVNET_COOKIE}` + }, + chainId: 2520, + gas: "auto", + gasPrice: 2000000000, // 2 Gwei + gasMultiplier: 1.2, + }, + fraxchain_devnet_l2: { + url:`${process.env.FRAXCHAIN_DEVNET_L2_NETWORK_ENDPOINT}`, + accounts: { + mnemonic: process.env.MNEMONIC_PHRASE, + }, + httpHeaders: { + "Cookie": `${process.env.FRAXCHAIN_DEVNET_COOKIE}` + }, + chainId: 2521, + gas: "auto", + gasPrice: 2000000000, // 2 Gwei + gasMultiplier: 1.2, + }, // fuse: { // url: process.env.FUSE_NETWORK_ENDPOINT, // accounts: { @@ -166,6 +194,16 @@ module.exports = { gasPrice: 50000000000, // 50 Gwei gasMultiplier: 1.2 }, + holesky: { + url: process.env.HOLESKY_NETWORK_ENDPOINT, + accounts: { + mnemonic: process.env.HOLESKY_MNEMONIC_PHRASE + }, + chainId: 17000, + gas: "auto", + gasPrice: 10000000000, // 10 Gwei + gasMultiplier: 1.2 + }, moonbeam: { url: process.env.MOONBEAM_NETWORK_ENDPOINT, accounts: { @@ -193,7 +231,7 @@ module.exports = { }, chainId: 10, gas: "auto", - gasPrice: 10000000, // 0.01 Gwei + gasPrice: 25000000, // 0.025 Gwei gasMultiplier: 1.2 }, polygon: { @@ -203,7 +241,7 @@ module.exports = { }, chainId: 137, gas: "auto", - gasPrice: 150000000000, // 150 Gwei + gasPrice: 50000000000, // 50 Gwei gasMultiplier: 1.2 }, polygon_zkevm: { @@ -370,7 +408,55 @@ module.exports = { } }, { - version: "0.8.17", + version: "0.8.15", + settings: { + // viaIR: true, + // optimizer: { + // enabled: true, + // runs: 200000, + // details: { + // orderLiterals: true, + // deduplicate: true, + // cse: true, + // constantOptimizer: true, + // yul: true, + // yulDetails: { + // stackAllocation: true + // } + // }, + // } + optimizer: { + enabled: true, + runs: 100000 + } + } + }, + { + version: "0.8.19", + settings: { + // viaIR: true, + // optimizer: { + // enabled: true, + // runs: 200000, + // details: { + // orderLiterals: true, + // deduplicate: true, + // cse: true, + // constantOptimizer: true, + // yul: true, + // yulDetails: { + // stackAllocation: true + // } + // }, + // } + optimizer: { + enabled: true, + runs: 100000 + } + } + }, + { + version: "0.8.23", settings: { // viaIR: true, // optimizer: { diff --git a/src/hardhat/test/__ARBITRUM/FraxCrossChainFarmV4_ERC20-Tests.js b/src/hardhat/test/__ARBITRUM/FraxCrossChainFarmV4_ERC20-Tests.js new file mode 100644 index 00000000..6c5663c7 --- /dev/null +++ b/src/hardhat/test/__ARBITRUM/FraxCrossChainFarmV4_ERC20-Tests.js @@ -0,0 +1,947 @@ +const path = require('path'); +const envPath = path.join(__dirname, '../../.env'); +require('dotenv').config({ path: envPath }); + +const BigNumber = require('bignumber.js'); +const util = require('util'); +const chalk = require('chalk'); +const Contract = require('web3-eth-contract'); +const { expectRevert, time } = require('@openzeppelin/test-helpers'); +const chai = require('chai'); +const chaiAlmost = require('chai-almost'); +chai.use(chaiAlmost()); + +const constants = require(path.join(__dirname, '../../../../dist/types/constants')); +const utilities = require(path.join(__dirname, '../../../../dist/misc/utilities')); + +// Set provider for all later instances to use +Contract.setProvider('http://127.0.0.1:7545'); + +global.artifacts = artifacts; +global.web3 = web3; + +const hre = require("hardhat"); + +// FRAX core +const CrossChainCanonicalFRAX = artifacts.require("ERC20/__CROSSCHAIN/CrossChainCanonicalFRAX"); +const CrossChainCanonicalFXS = artifacts.require("ERC20/__CROSSCHAIN/CrossChainCanonicalFXS"); +const ERC20 = artifacts.require("contracts/ERC20/ERC20.sol:ERC20"); + +// LP Pairs +const IConvexCvxLPRewardPoolCombo = artifacts.require("Misc_AMOs/convex/IConvexCvxLPRewardPoolCombo"); + +// Staking contracts +const FraxCCFarmV4_cvxUSDPlusFRAXBP = artifacts.require("Staking/Variants/FraxCCFarmV4_cvxUSDPlusFRAXBP"); + +const BIG6 = new BigNumber("1e6"); +const BIG18 = new BigNumber("1e18"); +const TIMELOCK_DELAY = 86400 * 2; // 2 days +const DUMP_ADDRESS = "0x6666666666666666666666666666666666666666"; +const METAMASK_ADDRESS = "0x6666666666666666666666666666666666666666"; + +const REWARDS_DURATION = 7 * 86400; // 7 days + +contract('FraxCrossChainFarmV3_ERC20-Tests', async (accounts) => { + let CONTRACT_ADDRESSES = constants.CONTRACT_ADDRESSES; + let CHAIN_ADDRESSES = CONTRACT_ADDRESSES.arbitrum; + + // Constants + let ORIGINAL_FRAX_ONE_ADDRESS; + let COLLATERAL_FRAX_AND_FXS_OWNER; + let ORACLE_ADMIN; + let POOL_CREATOR; + let TIMELOCK_ADMIN; + let GOVERNOR_GUARDIAN_ADDRESS; + let STAKING_OWNER; + let STAKING_REWARDS_DISTRIBUTOR; + let INVESTOR_CUSTODIAN_ADDRESS; + let MIGRATOR_ADDRESS; + const ADDRESSES_WITH_REWARD_TOKENS = [ + '0x5180db0237291A6449DdA9ed33aD90a38787621c', // FXS + '0x5180db0237291A6449DdA9ed33aD90a38787621c', // CRV + '0x5180db0237291A6449DdA9ed33aD90a38787621c', // ARB + '0x5180db0237291A6449DdA9ed33aD90a38787621c' // OVN + ]; + const REWARD_TOKEN_SEED_AMOUNTS = [ + '1000e18', // FXS + '100e18', // CRV + '100e18', // ARB + '10e18' // OVN + ] + const REWARD_TOKEN_REFILL_AMOUNTS = [ + '250e18', // FXS + '25e18', // CRV + '25e18', // ARB + '25e17' // OVN + ] + const ADDRESS_WITH_LP_TOKENS = '0x5180db0237291A6449DdA9ed33aD90a38787621c'; + + // Initialize core contract instances + let canFRAX_instance; + let canFXS_instance; + + // Initialize pair contracts + let lp_tkn_instance; + + // Initialize staking instances + let staking_instance; + + // Initialize reward addresses, instances, and symbols + let rew_addresses = [], rew_instances = [], rew_symbols = []; + + // Initialize reward token balance tracking + let rew_tkn_bals_before = {}; + for (let i = 0; i < REWARD_TOKEN_SEED_AMOUNTS.length; i++) { + rew_tkn_bals_before[i] = { 1: {}, 9: {} }; + } + let rew_tkn_bals_after = structuredClone(rew_tkn_bals_before); // [token index][account][""] + + // Initialize earnings tracking + let rew_tkn_earned = structuredClone(rew_tkn_bals_before); // [token index][account][phase] + + beforeEach(async() => { + + await hre.network.provider.request({ + method: "hardhat_impersonateAccount", + params: [process.env.FRAX_ONE_ADDRESS] + }); + + // Constants + ORIGINAL_FRAX_ONE_ADDRESS = process.env.FRAX_ONE_ADDRESS; + DEPLOYER_ADDRESS = accounts[0]; + COLLATERAL_FRAX_AND_FXS_OWNER = accounts[1]; + ORACLE_ADMIN = accounts[2]; + POOL_CREATOR = accounts[3]; + TIMELOCK_ADMIN = accounts[4]; + GOVERNOR_GUARDIAN_ADDRESS = accounts[5]; + STAKING_OWNER = accounts[6]; + STAKING_REWARDS_DISTRIBUTOR = accounts[7]; + INVESTOR_CUSTODIAN_ADDRESS = accounts[8]; + MIGRATOR_ADDRESS = accounts[10]; + + // Fill core contract instances + canFRAX_instance = await CrossChainCanonicalFRAX.deployed(); + canFXS_instance = await CrossChainCanonicalFXS.deployed(); + + // Get instances of the Convex cvxLP + lp_tkn_instance = await IConvexCvxLPRewardPoolCombo.at(CHAIN_ADDRESSES.bearer_tokens.cvxUSDPlusFRAXBP); + + // Fill the staking rewards instances + staking_instance = await FraxCCFarmV4_cvxUSDPlusFRAXBP.deployed(); + + // Fill reward token instances and info + for (let i = 0; i < REWARD_TOKEN_SEED_AMOUNTS.length; i++) { + rew_addresses[i] = await staking_instance.rewardTokens.call(i); + rew_instances[i] = await ERC20.at(rew_addresses[i]); + rew_symbols[i] = await utilities.rewardTokenSymbolFromAddress(rew_addresses[i]) + } + }); + + afterEach(async() => { + await hre.network.provider.request({ + method: "hardhat_stopImpersonatingAccount", + params: [process.env.FRAX_ONE_ADDRESS] + }); + }) + + + it('Initialization related', async () => { + console.log("=========================Initialization=========================") + + // console.log("------------------------------------------------"); + // console.log("Seed the staking contract with FXS and give COLLATERAL_FRAX_AND_FXS_OWNER some FXS"); + // await hre.network.provider.request({ + // method: "hardhat_impersonateAccount", + // params: [ADDRESS_WITH_FXS] + // }); + + // await canFXS_instance.transfer(staking_instance.address, new BigNumber("100e18"), { from: ADDRESS_WITH_FXS }); + // await canFXS_instance.transfer(COLLATERAL_FRAX_AND_FXS_OWNER, new BigNumber("1000e18"), { from: ADDRESS_WITH_FXS }); + + // await hre.network.provider.request({ + // method: "hardhat_stopImpersonatingAccount", + // params: [ADDRESS_WITH_FXS] + // }); + + console.log("------------------------------------------------"); + console.log("Seed the staking contract with reward tokens"); + + for (let i = 0; i < rew_addresses.length; i++) { + await hre.network.provider.request({ + method: "hardhat_impersonateAccount", + params: [ADDRESSES_WITH_REWARD_TOKENS[i]] + }); + + await rew_instances[i].transfer(staking_instance.address, new BigNumber(REWARD_TOKEN_SEED_AMOUNTS[i]), { from: ADDRESSES_WITH_REWARD_TOKENS[i] }); + + await hre.network.provider.request({ + method: "hardhat_stopImpersonatingAccount", + params: [ADDRESSES_WITH_REWARD_TOKENS[i]] + }); + } + + console.log("------------------------------------------------"); + console.log("Give LPs to test users"); + await hre.network.provider.request({ + method: "hardhat_impersonateAccount", + params: [ADDRESS_WITH_LP_TOKENS] + }); + + await lp_tkn_instance.transfer(accounts[1], new BigNumber("30e18"), { from: ADDRESS_WITH_LP_TOKENS }); + await lp_tkn_instance.transfer(accounts[9], new BigNumber("30e18"), { from: ADDRESS_WITH_LP_TOKENS }); + + await hre.network.provider.request({ + method: "hardhat_stopImpersonatingAccount", + params: [ADDRESS_WITH_LP_TOKENS] + }); + + // Add a migrator address + await staking_instance.addMigrator(MIGRATOR_ADDRESS, { from: STAKING_OWNER }); + }); + + it('Locked stakes', async () => { + console.log(chalk.hex("#ff8b3d").bold("====================================================================")); + console.log(chalk.hex("#ff8b3d").bold("TRY TESTS WITH LOCKED STAKES.")); + console.log(chalk.hex("#ff8b3d").bold("====================================================================")); + + // Print reward token balances + for (let i = 0; i < rew_addresses.length; i++) { + // Get reward token balances before everything starts + rew_tkn_bals_before[i][1]['time0'] = new BigNumber(await rew_instances[i].balanceOf(COLLATERAL_FRAX_AND_FXS_OWNER)).div(BIG18).toNumber() + rew_tkn_bals_before[i][9]['time0'] = new BigNumber(await rew_instances[i].balanceOf(accounts[9])).div(BIG18).toNumber() + + console.log(`Farm ${rew_symbols[i]} balance: ${new BigNumber(await rew_instances[i].balanceOf(staking_instance.address)).div(BIG18).toNumber()}`); + console.log(`Farm ${rew_symbols[i]} owed: ${new BigNumber(await staking_instance.ttlRewsOwed(i)).div(BIG18).toNumber()}`); + console.log(`Farm ${rew_symbols[i]} paid: ${new BigNumber(await staking_instance.ttlRewsPaid(i)).div(BIG18).toNumber()}`); + } + + await utilities.printCalcCurCombinedWeight(staking_instance, COLLATERAL_FRAX_AND_FXS_OWNER); + await utilities.printCalcCurCombinedWeight(staking_instance, accounts[9]); + + // Need to approve first so the staking can use transfer + const uni_pool_locked_1 = new BigNumber("75e17"); + const uni_pool_locked_1_sum = new BigNumber("10e18"); + const uni_pool_locked_9 = new BigNumber("25e17"); + await lp_tkn_instance.approve(staking_instance.address, uni_pool_locked_1_sum, { from: COLLATERAL_FRAX_AND_FXS_OWNER }); + await lp_tkn_instance.approve(staking_instance.address, uni_pool_locked_9, { from: accounts[9] }); + + // // Note the FRAX amounts before + // const frax_before_1_locked = new BigNumber(await canFRAX_instance.balanceOf.call(COLLATERAL_FRAX_AND_FXS_OWNER)).div(BIG18); + // const frax_before_9_locked = new BigNumber(await canFRAX_instance.balanceOf.call(accounts[9])).div(BIG18); + // console.log("FRAX_USDC Uniswap Liquidity Tokens BEFORE [1]: ", frax_before_1_locked.toString()); + // console.log("FRAX_USDC Uniswap Liquidity Tokens BEFORE [9]: ", frax_before_9_locked.toString()); + + console.log("Try to stake before initialization [SHOULD FAIL]"); + await expectRevert( + staking_instance.stakeLocked(uni_pool_locked_1, 6.95 * 86400, { from: COLLATERAL_FRAX_AND_FXS_OWNER }), + "Contract not initialized" + ); + + console.log("Initialize Staking Contract"); + await staking_instance.initializeDefault({ from: STAKING_OWNER }); + + // Get the original starting time and period finish + const original_start_timestamp = (new BigNumber(await time.latest())).toNumber(); + const original_period_end = (new BigNumber(await staking_instance.periodFinish.call())).toNumber(); + console.log("original_start_timestamp: ", original_start_timestamp); + console.log("original_period_end: ", original_period_end); + + // Stake Locked + // account[1] + await staking_instance.stakeLocked(uni_pool_locked_1, 6.95 * 86400, { from: COLLATERAL_FRAX_AND_FXS_OWNER }); // 7 days + await staking_instance.stakeLocked(new BigNumber ("25e17"), 548 * 86400, { from: COLLATERAL_FRAX_AND_FXS_OWNER }); // 270 days + + // account[9] + await staking_instance.stakeLocked(uni_pool_locked_9, 27.95 * 86400, { from: accounts[9] }); + await time.advanceBlock(); + + // Show the stake structs + const locked_stake_structs_1_0 = await staking_instance.lockedStakesOf.call(COLLATERAL_FRAX_AND_FXS_OWNER); + const locked_stake_structs_9_0 = await staking_instance.lockedStakesOf.call(accounts[9]); + console.log("LOCKED STAKES [1]: ", locked_stake_structs_1_0); + console.log("LOCKED STAKES [9]: ", locked_stake_structs_9_0); + + // Note the UNI POOL and FXS amount after staking + const regular_balance_1 = new BigNumber(await staking_instance.lockedLiquidityOf.call(COLLATERAL_FRAX_AND_FXS_OWNER)).div(BIG18); + const boosted_balance_1 = new BigNumber(await staking_instance.combinedWeightOf.call(COLLATERAL_FRAX_AND_FXS_OWNER)).div(BIG18); + const locked_balance_1 = new BigNumber(await staking_instance.lockedLiquidityOf.call(COLLATERAL_FRAX_AND_FXS_OWNER)).div(BIG18); + const regular_balance_9 = new BigNumber(await staking_instance.lockedLiquidityOf.call(accounts[9])).div(BIG18); + const boosted_balance_9 = new BigNumber(await staking_instance.combinedWeightOf.call(accounts[9])).div(BIG18); + const locked_balance_9 = new BigNumber(await staking_instance.lockedLiquidityOf.call(accounts[9])).div(BIG18); + console.log("LOCKED LIQUIDITY [1]: ", regular_balance_1.toString()); + console.log("COMBINED WEIGHT [1]: ", boosted_balance_1.toString()); + console.log("---- LOCKED [1]: ", locked_balance_1.toString()); + console.log("LOCKED LIQUIDITY [9]: ", regular_balance_9.toString()); + console.log("COMBINED WEIGHT [9]: ", boosted_balance_9.toString()); + console.log("---- LOCKED [9]: ", locked_balance_9.toString()); + + console.log("TRY AN EARLY WITHDRAWAL (SHOULD FAIL)"); + await expectRevert.unspecified(staking_instance.withdrawLocked(locked_stake_structs_1_0[0].kek_id, true, { from: COLLATERAL_FRAX_AND_FXS_OWNER })); + await expectRevert.unspecified(staking_instance.withdrawLocked(locked_stake_structs_9_0[0].kek_id, true, { from: accounts[9] })); + await time.advanceBlock(); + + await utilities.printCalcCurCombinedWeight(staking_instance, COLLATERAL_FRAX_AND_FXS_OWNER); + await utilities.printCalcCurCombinedWeight(staking_instance, accounts[9]); + + const user_min_vefxs_for_max_boost_1_0 = new BigNumber(await staking_instance.minVeFXSForMaxBoost.call(COLLATERAL_FRAX_AND_FXS_OWNER)).div(BIG18); + const user_min_vefxs_for_max_boost_9_0 = new BigNumber(await staking_instance.minVeFXSForMaxBoost.call(accounts[9])).div(BIG18); + console.log("user_min_vefxs_for_max_boost_1_0: ", user_min_vefxs_for_max_boost_1_0.toString()); + console.log("user_min_vefxs_for_max_boost_9_0: ", user_min_vefxs_for_max_boost_9_0.toString()); + + const _total_liquidity_locked_0 = new BigNumber(await staking_instance.totalLiquidityLocked.call()).div(BIG18); + const _total_combined_weight_0 = new BigNumber(await staking_instance.totalCombinedWeight.call()).div(BIG18); + const frax_per_lp_token_0 = new BigNumber(await staking_instance.fraxPerLPToken.call()).div(BIG18); + console.log("_total_liquidity_locked GLOBAL: ", _total_liquidity_locked_0.toString()); + console.log("_total_combined_weight GLOBAL: ", _total_combined_weight_0.toString()); + console.log("frax_per_lp_token_0 GLOBAL: ", frax_per_lp_token_0.toString()); + + + console.log(chalk.hex("#ff8b3d")("====================================================================")); + console.log(chalk.hex("#ff8b3d")("MID-WEEK-SYNC AND [9] CLAIMS")); + console.log(chalk.hex("#ff8b3d")("====================================================================")); + await time.increase(2 * 86400); + await time.advanceBlock(); + + // Sync + await staking_instance.sync({ from: COLLATERAL_FRAX_AND_FXS_OWNER }); + + // Print reward token balances + console.log(chalk.yellow("--- Before claim ---")); + for (let i = 0; i < rew_addresses.length; i++) { + console.log(`Farm ${rew_symbols[i]} balance: ${new BigNumber(await rew_instances[i].balanceOf(staking_instance.address)).div(BIG18).toNumber()}`); + console.log(`Farm ${rew_symbols[i]} owed: ${new BigNumber(await staking_instance.ttlRewsOwed(i)).div(BIG18).toNumber()}`); + console.log(`Farm ${rew_symbols[i]} paid: ${new BigNumber(await staking_instance.ttlRewsPaid(i)).div(BIG18).toNumber()}`); + + // Balance tracking + rew_tkn_bals_before[i][9]["mid0"] = new BigNumber(await rew_instances[i].balanceOf(accounts[9])).div(BIG18).toNumber(); + console.log(`accounts[9] ${rew_symbols[i]} balance: ${rew_tkn_bals_before[i][9]["mid0"]}`); + } + + // [9] claims + console.log(chalk.yellow("--- Claim ---")); + await staking_instance.getReward({ from: accounts[9] }); + + // Print reward token balances + console.log(chalk.yellow("--- After claim ---")); + for (let i = 0; i < rew_addresses.length; i++) { + console.log(`Farm ${rew_symbols[i]} balance: ${new BigNumber(await rew_instances[i].balanceOf(staking_instance.address)).div(BIG18).toNumber()}`); + console.log(`Farm ${rew_symbols[i]} owed: ${new BigNumber(await staking_instance.ttlRewsOwed(i)).div(BIG18).toNumber()}`); + console.log(`Farm ${rew_symbols[i]} paid: ${new BigNumber(await staking_instance.ttlRewsPaid(i)).div(BIG18).toNumber()}`); + + // Balance tracking + rew_tkn_bals_after[i][9]["mid0"] = new BigNumber(await rew_instances[i].balanceOf(accounts[9])).div(BIG18).toNumber(); + console.log(`accounts[9] ${rew_symbols[i]} balance: ${rew_tkn_bals_after[i][9]["mid0"]}`); + + // Earnings tracking + rew_tkn_earned[i][9]["mid0"] = (rew_tkn_bals_after[i][9]["mid0"]) - (rew_tkn_bals_before[i][9]["mid0"]); + console.log(`accounts[9] mid-week part 0 earnings ${rew_symbols[i]}: ${(rew_tkn_earned[i][9]["mid0"])}`); + } + + console.log(chalk.hex("#ff8b3d")("====================================================================")); + console.log(chalk.hex("#ff8b3d")("MID-WEEK-SYNC AGAIN AND [9] CLAIMS AGAIN")); + console.log(chalk.hex("#ff8b3d")("====================================================================")); + await time.increase(2 * 86400); + await time.advanceBlock(); + + // Sync + await staking_instance.sync({ from: COLLATERAL_FRAX_AND_FXS_OWNER }); + + // Print reward token balances + console.log(chalk.yellow("--- Before claim ---")); + for (let i = 0; i < rew_addresses.length; i++) { + console.log(`Farm ${rew_symbols[i]} balance: ${new BigNumber(await rew_instances[i].balanceOf(staking_instance.address)).div(BIG18).toNumber()}`); + console.log(`Farm ${rew_symbols[i]} owed: ${new BigNumber(await staking_instance.ttlRewsOwed(i)).div(BIG18).toNumber()}`); + console.log(`Farm ${rew_symbols[i]} paid: ${new BigNumber(await staking_instance.ttlRewsPaid(i)).div(BIG18).toNumber()}`); + + // Balance tracking + rew_tkn_bals_before[i][9]["mid1"] = new BigNumber(await rew_instances[i].balanceOf(accounts[9])).div(BIG18).toNumber(); + console.log(`accounts[9] ${rew_symbols[i]} balance: ${rew_tkn_bals_before[i][9]["mid1"]}`); + } + + // [9] claims + console.log(chalk.yellow("--- Claim ---")); + await staking_instance.getReward({ from: accounts[9] }); + + // Print reward token balances + console.log(chalk.yellow("--- After claim ---")); + for (let i = 0; i < rew_addresses.length; i++) { + console.log(`Farm ${rew_symbols[i]} balance: ${new BigNumber(await rew_instances[i].balanceOf(staking_instance.address)).div(BIG18).toNumber()}`); + console.log(`Farm ${rew_symbols[i]} owed: ${new BigNumber(await staking_instance.ttlRewsOwed(i)).div(BIG18).toNumber()}`); + console.log(`Farm ${rew_symbols[i]} paid: ${new BigNumber(await staking_instance.ttlRewsPaid(i)).div(BIG18).toNumber()}`); + + // Balance tracking + rew_tkn_bals_after[i][9]["mid1"] = new BigNumber(await rew_instances[i].balanceOf(accounts[9])).div(BIG18).toNumber(); + console.log(`accounts[9] ${rew_symbols[i]} balance: ${rew_tkn_bals_after[i][9]["mid1"]}`); + + // Earnings tracking + rew_tkn_earned[i][9]["mid1"] = (rew_tkn_bals_after[i][9]["mid1"]) - (rew_tkn_bals_before[i][9]["mid1"]); + console.log(`accounts[9] mid-week part 1 earnings ${rew_symbols[i]}: ${(rew_tkn_earned[i][9]["mid1"])}`); + } + + console.log(chalk.hex("#ff8b3d")("====================================================================")); + console.log(chalk.hex("#ff8b3d")("WAIT UNTIL THE END OF THE PERIOD (WHICH IS NEW DUE TO ROLLING")); + console.log(chalk.hex("#ff8b3d")("====================================================================")); + // Sync beforehand + await staking_instance.sync({ from: COLLATERAL_FRAX_AND_FXS_OWNER }); + + const current_timestamp_0 = (new BigNumber(await time.latest())).toNumber(); + const period_end_0 = (new BigNumber(await staking_instance.periodFinish.call())).toNumber(); + console.log("current_timestamp_0: ", current_timestamp_0); + console.log("original_period_end: ", original_period_end); + console.log("period_end_0: ", period_end_0); + const increase_time_0 = (period_end_0 - current_timestamp_0); + console.log("increase_time_0 (days): ", increase_time_0 / 86400); + await time.increase(increase_time_0 + (15 * 86400)); + await time.advanceBlock(); + + + // Sync afterwards + await staking_instance.sync({ from: COLLATERAL_FRAX_AND_FXS_OWNER }); + + await utilities.printCalcCurCombinedWeight(staking_instance, COLLATERAL_FRAX_AND_FXS_OWNER); + await utilities.printCalcCurCombinedWeight(staking_instance, accounts[9]); + + // Note the UNI POOL and FXS amount after staking + const regular_balance_00_1 = new BigNumber(await staking_instance.lockedLiquidityOf.call(COLLATERAL_FRAX_AND_FXS_OWNER)).div(BIG18); + const boosted_balance_00_1 = new BigNumber(await staking_instance.combinedWeightOf.call(COLLATERAL_FRAX_AND_FXS_OWNER)).div(BIG18); + const locked_balance_00_1 = new BigNumber(await staking_instance.lockedLiquidityOf.call(COLLATERAL_FRAX_AND_FXS_OWNER)).div(BIG18); + const regular_balance_00_9 = new BigNumber(await staking_instance.lockedLiquidityOf.call(accounts[9])).div(BIG18); + const boosted_balance_00_9 = new BigNumber(await staking_instance.combinedWeightOf.call(accounts[9])).div(BIG18); + const locked_balance_00_9 = new BigNumber(await staking_instance.lockedLiquidityOf.call(accounts[9])).div(BIG18); + console.log("LOCKED LIQUIDITY [1]: ", regular_balance_00_1.toString()); + console.log("COMBINED WEIGHT [1]: ", boosted_balance_00_1.toString()); + console.log("---- LOCKED [1]: ", locked_balance_00_1.toString()); + console.log("LOCKED LIQUIDITY [9]: ", regular_balance_00_9.toString()); + console.log("COMBINED WEIGHT [9]: ", boosted_balance_00_9.toString()); + console.log("---- LOCKED [9]: ", locked_balance_00_9.toString()); + + // Print reward token balances + console.log(chalk.yellow("--- Before claim ---")); + for (let i = 0; i < rew_addresses.length; i++) { + console.log(`Farm ${rew_symbols[i]} balance: ${new BigNumber(await rew_instances[i].balanceOf(staking_instance.address)).div(BIG18).toNumber()}`); + console.log(`Farm ${rew_symbols[i]} owed: ${new BigNumber(await staking_instance.ttlRewsOwed(i)).div(BIG18).toNumber()}`); + console.log(`Farm ${rew_symbols[i]} paid: ${new BigNumber(await staking_instance.ttlRewsPaid(i)).div(BIG18).toNumber()}`); + } + + const user_min_vefxs_for_max_boost_1_1 = new BigNumber(await staking_instance.minVeFXSForMaxBoost.call(COLLATERAL_FRAX_AND_FXS_OWNER)).div(BIG18); + const user_min_vefxs_for_max_boost_9_1 = new BigNumber(await staking_instance.minVeFXSForMaxBoost.call(accounts[9])).div(BIG18); + console.log("user_min_vefxs_for_max_boost_1_1: ", user_min_vefxs_for_max_boost_1_1.toString()); + console.log("user_min_vefxs_for_max_boost_9_1: ", user_min_vefxs_for_max_boost_9_1.toString()); + + // Make sure there is a valid period for the contract and sync it + await staking_instance.sync({ from: STAKING_OWNER }); + + // Print earnings + let staking_earned_1 = await staking_instance.earned.call(COLLATERAL_FRAX_AND_FXS_OWNER); + let staking_earned_9 = await staking_instance.earned.call(accounts[9]); + let duration_reward = await staking_instance.getRewardForDuration.call(); + for (let i = 0; i < rew_addresses.length; i++) { + // accounts[1] never called getReward yet + rew_tkn_earned[i][1]["week1"] = new BigNumber(staking_earned_1[i]).div(BIG18).toNumber(); + console.log(`accounts[1] earnings after 1 week [${rew_symbols[i]}]: ${rew_tkn_earned[i][1]["week1"]}`); + + // For accounts[9], sum the previous claims, plus the unclaimed + const acct9_unclaimed = new BigNumber(staking_earned_9[i]).div(BIG18).toNumber(); + rew_tkn_earned[i][9]["week1"] = acct9_unclaimed + rew_tkn_earned[i][9]["mid0"] + rew_tkn_earned[i][9]["mid1"]; + console.log(`accounts[9] earnings after 1 week [${rew_symbols[i]}]: ${rew_tkn_earned[i][9]["week1"]}`); + + // Get the effective / actual weekly and yearly rewards being emitted + const reward_week_1 = rew_tkn_earned[i][1]["week1"] + rew_tkn_earned[i][9]["week1"]; + const effective_yearly_reward_at_week_1 = reward_week_1 * 52.1429; + console.log(`Effective weekly reward at week 1 [${rew_symbols[i]}]: ${reward_week_1}`); + console.log(`Effective yearly reward at week 1 [${rew_symbols[i]}]: ${effective_yearly_reward_at_week_1}`); + + // Get the expected weekly and yearly rewards + const duration_reward_tkn = new BigNumber(duration_reward[i]).div(BIG18).toNumber(); + const yearly_reward_tkn = duration_reward_tkn * 52.1429 + console.log(`Expected weekly reward at week 1 [${rew_symbols[i]}]: ${duration_reward_tkn}`); + console.log(`Expected yearly reward at week 1 [${rew_symbols[i]}]: ${yearly_reward_tkn}`); + + // Make sure emissions happened properly + const expected_tkn_amount = new BigNumber(REWARD_TOKEN_SEED_AMOUNTS[i]).div(BIG18).toNumber(); + expect(reward_week_1).to.be.almost(expected_tkn_amount, .001 * expected_tkn_amount); + } + + console.log("TRY WITHDRAWING AGAIN"); + console.log("[1] SHOULD SUCCEED, [9] SHOULD FAIL"); + await staking_instance.withdrawLocked(locked_stake_structs_1_0[0].kek_id, true, { from: COLLATERAL_FRAX_AND_FXS_OWNER }); + await expectRevert.unspecified(staking_instance.withdrawLocked(locked_stake_structs_9_0[0].kek_id, true, { from: accounts[9] })); + + // Claim [9] + await staking_instance.getReward({ from: accounts[9] }); + + // Print reward token balances + console.log(chalk.yellow("--- After claim ---")); + for (let i = 0; i < rew_addresses.length; i++) { + console.log(`Farm ${rew_symbols[i]} balance: ${new BigNumber(await rew_instances[i].balanceOf(staking_instance.address)).div(BIG18).toNumber()}`); + console.log(`Farm ${rew_symbols[i]} owed: ${new BigNumber(await staking_instance.ttlRewsOwed(i)).div(BIG18).toNumber()}`); + console.log(`Farm ${rew_symbols[i]} paid: ${new BigNumber(await staking_instance.ttlRewsPaid(i)).div(BIG18).toNumber()}`); + + // Balance tracking + rew_tkn_bals_after[i][1]["week1"] = new BigNumber(await rew_instances[i].balanceOf(accounts[1])).div(BIG18).toNumber(); + rew_tkn_bals_after[i][9]["week1"] = new BigNumber(await rew_instances[i].balanceOf(accounts[9])).div(BIG18).toNumber(); + + const acc1_diff = rew_tkn_bals_after[i][1]["week1"] - rew_tkn_bals_before[i][1]["time0"]; + const acc9_diff = rew_tkn_bals_after[i][9]["week1"] - rew_tkn_bals_before[i][9]["time0"]; + console.log(chalk.green(`accounts[1] ${rew_symbols[i]} balance change: ${acc1_diff}`)); + console.log(chalk.green(`accounts[9] ${rew_symbols[i]} balance change: ${acc9_diff}`)); + console.log(chalk.green.bold(`Total ${rew_symbols[i]} balance change: ${acc1_diff + acc9_diff}`)); + + + } + + console.log(chalk.hex("#ff8b3d")("====================================================================")); + console.log(chalk.hex("#ff8b3d")("ADVANCING 28 DAYS (WEEK 5)")); + console.log(chalk.hex("#ff8b3d")("====================================================================")); + // Sync beforehand + await staking_instance.sync({ from: COLLATERAL_FRAX_AND_FXS_OWNER }); + + const current_timestamp_1 = (new BigNumber(await time.latest())).toNumber(); + const period_end_1 = await staking_instance.periodFinish.call(); + + const increase_time_1 = (period_end_1 - current_timestamp_1) + ((3 * 7) * 86400); + console.log("increase_time_1 (days): ", increase_time_1 / 86400); + await time.increase(increase_time_1); + await time.advanceBlock(); + + // Sync afterwards + await staking_instance.sync({ from: COLLATERAL_FRAX_AND_FXS_OWNER }); + + await utilities.printCalcCurCombinedWeight(staking_instance, COLLATERAL_FRAX_AND_FXS_OWNER); + await utilities.printCalcCurCombinedWeight(staking_instance, accounts[9]); + + // Print reward token balances + for (let i = 0; i < rew_addresses.length; i++) { + console.log(`Farm ${rew_symbols[i]} balance: ${new BigNumber(await rew_instances[i].balanceOf(staking_instance.address)).div(BIG18).toNumber()}`); + console.log(`Farm ${rew_symbols[i]} owed: ${new BigNumber(await staking_instance.ttlRewsOwed(i)).div(BIG18).toNumber()}`); + console.log(`Farm ${rew_symbols[i]} paid: ${new BigNumber(await staking_instance.ttlRewsPaid(i)).div(BIG18).toNumber()}`); + } + + // Note the UNI POOL and FXS amount after staking + const regular_balance_01_1 = new BigNumber(await staking_instance.lockedLiquidityOf.call(COLLATERAL_FRAX_AND_FXS_OWNER)).div(BIG18); + const boosted_balance_01_1 = new BigNumber(await staking_instance.combinedWeightOf.call(COLLATERAL_FRAX_AND_FXS_OWNER)).div(BIG18); + const locked_balance_01_1 = new BigNumber(await staking_instance.lockedLiquidityOf.call(COLLATERAL_FRAX_AND_FXS_OWNER)).div(BIG18); + const regular_balance_01_9 = new BigNumber(await staking_instance.lockedLiquidityOf.call(accounts[9])).div(BIG18); + const boosted_balance_01_9 = new BigNumber(await staking_instance.combinedWeightOf.call(accounts[9])).div(BIG18); + const locked_balance_01_9 = new BigNumber(await staking_instance.lockedLiquidityOf.call(accounts[9])).div(BIG18); + console.log("LOCKED LIQUIDITY [1]: ", regular_balance_01_1.toString()); + console.log("COMBINED WEIGHT [1]: ", boosted_balance_01_1.toString()); + console.log("---- LOCKED [1]: ", locked_balance_01_1.toString()); + console.log("LOCKED LIQUIDITY [9]: ", regular_balance_01_9.toString()); + console.log("COMBINED WEIGHT [9]: ", boosted_balance_01_9.toString()); + console.log("---- LOCKED [9]: ", locked_balance_01_9.toString()); + + const user_min_vefxs_for_max_boost_1_2 = new BigNumber(await staking_instance.minVeFXSForMaxBoost.call(COLLATERAL_FRAX_AND_FXS_OWNER)).div(BIG18); + const user_min_vefxs_for_max_boost_9_2 = new BigNumber(await staking_instance.minVeFXSForMaxBoost.call(accounts[9])).div(BIG18); + console.log("user_min_vefxs_for_max_boost_1_2: ", user_min_vefxs_for_max_boost_1_2.toString()); + console.log("user_min_vefxs_for_max_boost_9_2: ", user_min_vefxs_for_max_boost_9_2.toString()); + + // Make sure there is a valid period for the contract and sync it + await staking_instance.sync({ from: COLLATERAL_FRAX_AND_FXS_OWNER }); + + // Print earnings + staking_earned_1 = await staking_instance.earned.call(COLLATERAL_FRAX_AND_FXS_OWNER); + staking_earned_9 = await staking_instance.earned.call(accounts[9]); + duration_reward = await staking_instance.getRewardForDuration.call(); + for (let i = 0; i < rew_addresses.length; i++) { + // accounts[1] + rew_tkn_earned[i][1]["week5"] = new BigNumber(staking_earned_1[i]).div(BIG18).toNumber(); + console.log(`accounts[1] earnings after 5 weeks [${rew_symbols[i]}]: ${rew_tkn_earned[i][1]["week5"]}`); + + // accounts[9] + const acct9_unclaimed = new BigNumber(staking_earned_9[i]).div(BIG18).toNumber(); + rew_tkn_earned[i][9]["week5"] = acct9_unclaimed; + console.log(`accounts[9] earnings after 5 weeks [${rew_symbols[i]}]: ${rew_tkn_earned[i][9]["week5"]}`); + + // Get the effective / actual weekly and yearly rewards being emitted + const reward_week_5 = rew_tkn_earned[i][1]["week5"] + rew_tkn_earned[i][9]["week5"]; + const effective_yearly_reward_at_week_5 = reward_week_5 * 52.1429; + console.log(`Effective weekly reward after 5 weeks [${rew_symbols[i]}]: ${reward_week_5}`); + console.log(`Effective yearly reward after 5 weeks [${rew_symbols[i]}]: ${effective_yearly_reward_at_week_5}`); + + // Get the expected weekly and yearly rewards + const duration_reward_tkn = new BigNumber(duration_reward[i]).div(BIG18).toNumber(); + const yearly_reward_tkn = duration_reward_tkn * 52.1429 + console.log(`Expected weekly reward after 5 weeks [${rew_symbols[i]}]: ${duration_reward_tkn}`); + console.log(`Expected yearly reward after 5 weeks [${rew_symbols[i]}]: ${yearly_reward_tkn}`); + + // Make sure nothing emitted + const expected_tkn_amount = 0; + expect(reward_week_5).to.be.almost(expected_tkn_amount, .01); + } + + console.log(chalk.yellow.bold("====================================================================")); + console.log(chalk.yellow.bold("Add more to a lock")); + + // Print the info for the stake + let add_more_before = await staking_instance.lockedStakes.call(COLLATERAL_FRAX_AND_FXS_OWNER, 1); + console.log("add_more_before: ", utilities.cleanLockedStake(add_more_before)); + + // Add 1 more LP token to the lock + const addl_amt_add = new BigNumber("1e18"); + await lp_tkn_instance.approve(staking_instance.address, addl_amt_add, { from: COLLATERAL_FRAX_AND_FXS_OWNER }); + await staking_instance.lockAdditional(add_more_before.kek_id, addl_amt_add, { from: COLLATERAL_FRAX_AND_FXS_OWNER }); + + // Print the info for the stake + const add_more_after = await staking_instance.lockedStakes.call(COLLATERAL_FRAX_AND_FXS_OWNER, 1); + console.log("add_more_after: ", utilities.cleanLockedStake(add_more_after)); + + // Make sure the liquidity has increased + const add_liq_before = new BigNumber(add_more_before.liquidity); + const add_liq_after = new BigNumber(add_more_after.liquidity); + const add_liq_diff = add_liq_after.minus(add_liq_before); + console.log("Add liq diff: ", add_liq_diff.toString()); + assert(add_liq_after.isGreaterThan(add_liq_before), `Liquidity did not increase`); + + console.log(chalk.hex("#ff8b3d")("====================================================================")); + console.log(chalk.hex("#ff8b3d")("REFILL REWARDS AND SYNC")); + console.log(chalk.hex("#ff8b3d")("====================================================================")); + + for (let i = 0; i < rew_addresses.length; i++) { + await hre.network.provider.request({ + method: "hardhat_impersonateAccount", + params: [ADDRESSES_WITH_REWARD_TOKENS[i]] + }); + + await rew_instances[i].transfer(staking_instance.address, new BigNumber(REWARD_TOKEN_REFILL_AMOUNTS[i]), { from: ADDRESSES_WITH_REWARD_TOKENS[i] }); + + await hre.network.provider.request({ + method: "hardhat_stopImpersonatingAccount", + params: [ADDRESSES_WITH_REWARD_TOKENS[i]] + }); + } + + await staking_instance.sync({ from: COLLATERAL_FRAX_AND_FXS_OWNER }); + + console.log(chalk.hex("#ff8b3d")("====================================================================")); + console.log(chalk.hex("#ff8b3d")("CHECK EARNINGS (SHOULD BE ZERO)")); + console.log(chalk.hex("#ff8b3d")("====================================================================")); + + // Print reward token balances + for (let i = 0; i < rew_addresses.length; i++) { + console.log(`Farm ${rew_symbols[i]} balance: ${new BigNumber(await rew_instances[i].balanceOf(staking_instance.address)).div(BIG18).toNumber()}`); + console.log(`Farm ${rew_symbols[i]} owed: ${new BigNumber(await staking_instance.ttlRewsOwed(i)).div(BIG18).toNumber()}`); + console.log(`Farm ${rew_symbols[i]} paid: ${new BigNumber(await staking_instance.ttlRewsPaid(i)).div(BIG18).toNumber()}`); + } + + // Print earnings + staking_earned_1 = await staking_instance.earned.call(COLLATERAL_FRAX_AND_FXS_OWNER); + staking_earned_9 = await staking_instance.earned.call(accounts[9]); + duration_reward = await staking_instance.getRewardForDuration.call(); + for (let i = 0; i < rew_addresses.length; i++) { + // accounts[1] + rew_tkn_earned[i][1]["week5_PR"] = new BigNumber(staking_earned_1[i]).div(BIG18).toNumber(); + console.log(`accounts[1] earnings after 5 weeks (post refill) [${rew_symbols[i]}]: ${rew_tkn_earned[i][1]["week5_PR"]}`); + + // accounts[9] + const acct9_unclaimed = new BigNumber(staking_earned_9[i]).div(BIG18).toNumber(); + rew_tkn_earned[i][9]["week5_PR"] = acct9_unclaimed; + console.log(`accounts[9] earnings after 5 weeks (post refill) [${rew_symbols[i]}]: ${rew_tkn_earned[i][9]["week5_PR"]}`); + + // Get the effective / actual weekly and yearly rewards being emitted + const reward_week_5_PR = rew_tkn_earned[i][1]["week5_PR"] + rew_tkn_earned[i][9]["week5_PR"]; + const effective_yearly_reward_at_week_5_PR = reward_week_5_PR * 52.1429; + console.log(`Effective weekly reward after 5 weeks (post refill) [${rew_symbols[i]}]: ${reward_week_5_PR}`); + console.log(`Effective yearly reward after 5 weeks (post refill) [${rew_symbols[i]}]: ${effective_yearly_reward_at_week_5_PR}`); + + // Get the expected weekly and yearly rewards + const duration_reward_tkn = new BigNumber(duration_reward[i]).div(BIG18).toNumber(); + const yearly_reward_tkn = duration_reward_tkn * 52.1429 + console.log(`Expected weekly reward after 5 weeks (post refill) [${rew_symbols[i]}]: ${duration_reward_tkn}`); + console.log(`Expected yearly reward after 5 weeks (post refill) [${rew_symbols[i]}]: ${yearly_reward_tkn}`); + + // Make sure nothing emitted + const expected_tkn_amount = 0; + expect(reward_week_5_PR).to.be.almost(expected_tkn_amount, .01); + } + + + console.log(chalk.hex("#ff8b3d")("====================================================================")); + console.log(chalk.hex("#ff8b3d")("ADVANCE TO DAY 35 (next period, week 6)")); + console.log(chalk.hex("#ff8b3d")("====================================================================")); + // Sync beforehand + await staking_instance.sync({ from: COLLATERAL_FRAX_AND_FXS_OWNER }); + + const current_timestamp_2 = (new BigNumber(await time.latest())).toNumber(); + const period_end_2 = await staking_instance.periodFinish.call(); + + // Advance ~7 days + const increase_time_2 = (period_end_2 - current_timestamp_2); + console.log("increase_time_2 (days): ", increase_time_2 / 86400); + await time.increase(increase_time_2); + await time.advanceBlock(); + + // Sync afterwards + await staking_instance.sync({ from: COLLATERAL_FRAX_AND_FXS_OWNER }); + + // Print reward token balances + for (let i = 0; i < rew_addresses.length; i++) { + console.log(`Farm ${rew_symbols[i]} balance: ${new BigNumber(await rew_instances[i].balanceOf(staking_instance.address)).div(BIG18).toNumber()}`); + console.log(`Farm ${rew_symbols[i]} owed: ${new BigNumber(await staking_instance.ttlRewsOwed(i)).div(BIG18).toNumber()}`); + console.log(`Farm ${rew_symbols[i]} paid: ${new BigNumber(await staking_instance.ttlRewsPaid(i)).div(BIG18).toNumber()}`); + } + + // Print earnings + staking_earned_1 = await staking_instance.earned.call(COLLATERAL_FRAX_AND_FXS_OWNER); + staking_earned_9 = await staking_instance.earned.call(accounts[9]); + duration_reward = await staking_instance.getRewardForDuration.call(); + for (let i = 0; i < rew_addresses.length; i++) { + // accounts[1] + rew_tkn_earned[i][1]["week6"] = new BigNumber(staking_earned_1[i]).div(BIG18).toNumber(); + console.log(`accounts[1] earnings after 6 weeks (post refill) [${rew_symbols[i]}]: ${rew_tkn_earned[i][1]["week6"]}`); + + // accounts[9] + const acct9_unclaimed = new BigNumber(staking_earned_9[i]).div(BIG18).toNumber(); + rew_tkn_earned[i][9]["week6"] = acct9_unclaimed; + console.log(`accounts[9] earnings after 6 weeks (post refill) [${rew_symbols[i]}]: ${rew_tkn_earned[i][9]["week6"]}`); + + // Get the effective / actual weekly and yearly rewards being emitted + const reward_week_6 = rew_tkn_earned[i][1]["week6"] + rew_tkn_earned[i][9]["week6"]; + const effective_yearly_reward_at_week_6 = reward_week_6 * 52.1429; + console.log(`Effective weekly reward after 6 weeks (post refill) [${rew_symbols[i]}]: ${reward_week_6}`); + console.log(`Effective yearly reward after 6 weeks (post refill) [${rew_symbols[i]}]: ${effective_yearly_reward_at_week_6}`); + + // Get the expected weekly and yearly rewards + const duration_reward_tkn = new BigNumber(duration_reward[i]).div(BIG18).toNumber(); + const yearly_reward_tkn = duration_reward_tkn * 52.1429 + console.log(`Expected weekly reward after 6 weeks (post refill) [${rew_symbols[i]}]: ${duration_reward_tkn}`); + console.log(`Expected yearly reward after 6 weeks (post refill) [${rew_symbols[i]}]: ${yearly_reward_tkn}`); + + // Make sure emissions happened properly + const expected_tkn_amount = new BigNumber(REWARD_TOKEN_REFILL_AMOUNTS[i]).div(BIG18).toNumber(); + expect(reward_week_6).to.be.almost(expected_tkn_amount, .001 * expected_tkn_amount); + } + + + console.log(chalk.hex("#ff8b3d")("====================================================================")); + console.log(chalk.hex("#ff8b3d")("WITHDRAW STAKES")); + console.log(chalk.hex("#ff8b3d")("====================================================================")); + + // Account 9 withdraws and claims its locked stake + await staking_instance.withdrawLocked(locked_stake_structs_9_0[0].kek_id, true, { from: accounts[9] }); + await staking_instance.getReward({ from: accounts[9] }); + await expectRevert.unspecified(staking_instance.withdrawLocked(locked_stake_structs_1_0[1].kek_id, true, { from: COLLATERAL_FRAX_AND_FXS_OWNER })); + + const _total_liquidity_locked_1 = new BigNumber(await staking_instance.totalLiquidityLocked.call()).div(BIG18); + const _total_combined_weight_1 = new BigNumber(await staking_instance.totalCombinedWeight.call()).div(BIG18); + console.log("_total_liquidity_locked GLOBAL: ", _total_liquidity_locked_1.toString()); + console.log("_total_combined_weight GLOBAL: ", _total_combined_weight_1.toString()); + + console.log("UNLOCKING ALL STAKES"); + await staking_instance.unlockStakes({ from: STAKING_OWNER }); + await staking_instance.withdrawLocked(locked_stake_structs_1_0[1].kek_id, true, { from: COLLATERAL_FRAX_AND_FXS_OWNER }); + + await utilities.printCalcCurCombinedWeight(staking_instance, COLLATERAL_FRAX_AND_FXS_OWNER); + await utilities.printCalcCurCombinedWeight(staking_instance, accounts[9]); + + const user_min_vefxs_for_max_boost_1_3 = new BigNumber(await staking_instance.minVeFXSForMaxBoost.call(COLLATERAL_FRAX_AND_FXS_OWNER)).div(BIG18); + const user_min_vefxs_for_max_boost_9_3 = new BigNumber(await staking_instance.minVeFXSForMaxBoost.call(accounts[9])).div(BIG18); + console.log("user_min_vefxs_for_max_boost_1_3: ", user_min_vefxs_for_max_boost_1_3.toString()); + console.log("user_min_vefxs_for_max_boost_9_3: ", user_min_vefxs_for_max_boost_9_3.toString()); + + const _total_liquidity_locked_2 = new BigNumber(await staking_instance.totalLiquidityLocked.call()).div(BIG18); + const _total_combined_weight_2 = new BigNumber(await staking_instance.totalCombinedWeight.call()).div(BIG18); + const frax_per_lp_token_2 = new BigNumber(await staking_instance.fraxPerLPToken.call()).div(BIG18); + console.log("_total_liquidity_locked GLOBAL: ", _total_liquidity_locked_2.toString()); + console.log("_total_combined_weight GLOBAL: ", _total_combined_weight_2.toString()); + console.log("frax_per_lp_token_2 GLOBAL: ", frax_per_lp_token_2.toString()); + + // Claim rewards + console.log("Claim rewards"); + await staking_instance.getReward({ from: COLLATERAL_FRAX_AND_FXS_OWNER }); + await staking_instance.getReward({ from: accounts[9] }); + + console.log(chalk.hex("#ff8b3d")("====================================================================")); + console.log(chalk.hex("#ff8b3d")("CHECK EARNINGS AGAIN")); + console.log(chalk.hex("#ff8b3d")("====================================================================")); + + // Sync beforehand + await staking_instance.sync({ from: COLLATERAL_FRAX_AND_FXS_OWNER }); + + const current_timestamp_3 = (new BigNumber(await time.latest())).toNumber(); + const period_end_3 = await staking_instance.periodFinish.call(); + + // Advance to the next period + const increase_time_3 = (period_end_3 - current_timestamp_3); + console.log("increase_time_3 (days): ", increase_time_3 / 86400); + await time.increase(increase_time_3); + await time.advanceBlock(); + + // Sync afterwards + await staking_instance.sync({ from: COLLATERAL_FRAX_AND_FXS_OWNER }); + + // Print reward token balances + for (let i = 0; i < rew_addresses.length; i++) { + console.log(`Farm ${rew_symbols[i]} balance: ${new BigNumber(await rew_instances[i].balanceOf(staking_instance.address)).div(BIG18).toNumber()}`); + console.log(`Farm ${rew_symbols[i]} owed: ${new BigNumber(await staking_instance.ttlRewsOwed(i)).div(BIG18).toNumber()}`); + console.log(`Farm ${rew_symbols[i]} paid: ${new BigNumber(await staking_instance.ttlRewsPaid(i)).div(BIG18).toNumber()}`); + } + + // Print earnings + staking_earned_1 = await staking_instance.earned.call(COLLATERAL_FRAX_AND_FXS_OWNER); + staking_earned_9 = await staking_instance.earned.call(accounts[9]); + duration_reward = await staking_instance.getRewardForDuration.call(); + for (let i = 0; i < rew_addresses.length; i++) { + // accounts[1] + rew_tkn_earned[i][1]["week6_PW"] = new BigNumber(staking_earned_1[i]).div(BIG18).toNumber(); + console.log(`accounts[1] earnings after 6 weeks (post withdrawal) [${rew_symbols[i]}]: ${rew_tkn_earned[i][1]["week6_PW"]}`); + + // accounts[9] + const acct9_unclaimed = new BigNumber(staking_earned_9[i]).div(BIG18).toNumber(); + rew_tkn_earned[i][9]["week6_PW"] = acct9_unclaimed; + console.log(`accounts[9] earnings after 6 weeks (post withdrawal) [${rew_symbols[i]}]: ${rew_tkn_earned[i][9]["week6_PW"]}`); + + // Get the effective / actual weekly and yearly rewards being emitted + const reward_week_6_PW = rew_tkn_earned[i][1]["week6_PW"] + rew_tkn_earned[i][9]["week6_PW"]; + const effective_yearly_reward_at_week_6 = reward_week_6_PW * 52.1429; + console.log(`Effective weekly reward after 6 weeks (post withdrawal) [${rew_symbols[i]}]: ${reward_week_6_PW}`); + console.log(`Effective yearly reward after 6 weeks (post withdrawal) [${rew_symbols[i]}]: ${effective_yearly_reward_at_week_6}`); + + // Get the expected weekly and yearly rewards + const duration_reward_tkn = new BigNumber(duration_reward[i]).div(BIG18).toNumber(); + const yearly_reward_tkn = duration_reward_tkn * 52.1429 + console.log(`Expected weekly reward after 6 weeks (post withdrawal) [${rew_symbols[i]}]: ${duration_reward_tkn}`); + console.log(`Expected yearly reward after 6 weeks (post withdrawal) [${rew_symbols[i]}]: ${yearly_reward_tkn}`); + + // Make sure emissions happened properly + const expected_tkn_amount = 0; + expect(reward_week_6_PW).to.be.almost(expected_tkn_amount, .001); + } + + }); + + + it("Migration Staking / Withdrawal Tests", async () => { + + // Advance 1 day + await time.increase((1 * 86400) + 1); + await time.advanceBlock(); + + // Untoggle the stake unlocking + await staking_instance.unlockStakes({ from: STAKING_OWNER }); + + // Stake normally again for next part + // Need to approve first so the staking can use transfer + const stake_amt_unlocked = new BigNumber("5e18"); + const stake_amt_locked = new BigNumber("5e18"); + + // Allow the migrator function to migrate for you + await staking_instance.stakerAllowMigrator(MIGRATOR_ADDRESS, { from: COLLATERAL_FRAX_AND_FXS_OWNER }); + + // Print the balance + console.log("accounts[1] ERC20 balanceOf LP:", (new BigNumber(await lp_tkn_instance.balanceOf(COLLATERAL_FRAX_AND_FXS_OWNER))).div(BIG18).toNumber()); + + // Stake Locked + await lp_tkn_instance.approve(staking_instance.address, stake_amt_locked, { from: COLLATERAL_FRAX_AND_FXS_OWNER }); + await staking_instance.stakeLocked(stake_amt_locked, 7 * 86400, { from: COLLATERAL_FRAX_AND_FXS_OWNER }); + + // Show the stake structs + const locked_stake_structs = await staking_instance.lockedStakesOf.call(COLLATERAL_FRAX_AND_FXS_OWNER); + console.log("LOCKED STAKES [1]: ", locked_stake_structs); + + // Turn on migrations + await staking_instance.toggleMigrations({ from: STAKING_OWNER }); + + // Print balances before + console.log("accounts[1] staked lockedLiquidityOf :", (new BigNumber(await staking_instance.lockedLiquidityOf(COLLATERAL_FRAX_AND_FXS_OWNER))).div(BIG18).toNumber()); + console.log("accounts[1] staked combinedWeightOf :", (new BigNumber(await staking_instance.combinedWeightOf(COLLATERAL_FRAX_AND_FXS_OWNER))).div(BIG18).toNumber()); + + // Have the migrator withdraw locked tokens + const withdraw_locked_amt = new BigNumber ("5e18"); + await staking_instance.migrator_withdraw_locked(COLLATERAL_FRAX_AND_FXS_OWNER, locked_stake_structs[2].kek_id, { from: MIGRATOR_ADDRESS }); + console.log(`Migrator (accounts[10]) withdrew ${withdraw_locked_amt.div(BIG18)} (E18) locked LP tokens from accounts[1]`); + console.log("Migrator (accounts[10]) ERC20 balanceOf:", (new BigNumber(await lp_tkn_instance.balanceOf(MIGRATOR_ADDRESS))).div(BIG18).toNumber()); + console.log("accounts[1] staked lockedLiquidityOf:", (new BigNumber(await staking_instance.lockedLiquidityOf(COLLATERAL_FRAX_AND_FXS_OWNER))).div(BIG18).toNumber()); + console.log("accounts[1] staked combinedWeightOf:", (new BigNumber(await staking_instance.combinedWeightOf(COLLATERAL_FRAX_AND_FXS_OWNER))).div(BIG18).toNumber()); + console.log(""); + + // Proxy locked stake for someone else as the migrator + const proxy_stake_lock_amt = new BigNumber ("5e18"); + await lp_tkn_instance.approve(staking_instance.address, proxy_stake_lock_amt, { from: MIGRATOR_ADDRESS }); + let block_time_current_1 = (await time.latest()).toNumber(); + await staking_instance.migrator_stakeLocked_for(COLLATERAL_FRAX_AND_FXS_OWNER, proxy_stake_lock_amt, 28 * 86400, block_time_current_1, { from: MIGRATOR_ADDRESS }); + console.log(`accounts[1] lock staked ${proxy_stake_lock_amt.div(BIG18)} (E18) LP tokens for account[8]`); + console.log("Migrator (accounts[10]) ERC20 balanceOf:", (new BigNumber(await lp_tkn_instance.balanceOf(MIGRATOR_ADDRESS))).div(BIG18).toNumber()); + console.log("accounts[1] staked lockedLiquidityOf:", (new BigNumber(await staking_instance.lockedLiquidityOf(COLLATERAL_FRAX_AND_FXS_OWNER))).div(BIG18).toNumber()); + console.log("accounts[1] staked combinedWeightOf:", (new BigNumber(await staking_instance.combinedWeightOf(COLLATERAL_FRAX_AND_FXS_OWNER))).div(BIG18).toNumber()); + console.log(""); + + + }); + + it("Fail Tests ", async () => { + + const test_amount_1 = new BigNumber ("1e18"); + const locked_stake_structs = await staking_instance.lockedStakesOf.call(COLLATERAL_FRAX_AND_FXS_OWNER); + + console.log(chalk.blue("=============TEST NOT IN MIGRATION [SHOULD FAIL]=============")); + + // Turn off migrations + await staking_instance.toggleMigrations({ from: STAKING_OWNER }); + + console.log("---------TRY TO migrator_withdraw_locked WHILE NOT IN MIGRATION---------"); + await expectRevert( + staking_instance.migrator_withdraw_locked(COLLATERAL_FRAX_AND_FXS_OWNER, locked_stake_structs[2].kek_id, { from: MIGRATOR_ADDRESS }), + "Not in migration" + ); + + console.log("---------TRY TO migrator_stakeLocked_for WHILE NOT IN MIGRATION---------"); + let block_time_current_2 = (await time.latest()).toNumber(); + await expectRevert( + staking_instance.migrator_stakeLocked_for(COLLATERAL_FRAX_AND_FXS_OWNER, test_amount_1, 28 * 86400, block_time_current_2, { from: MIGRATOR_ADDRESS }), + "Not in migration" + ); + + console.log("---------TRY TO ALLOW A WRONG MIGRATOR---------"); + await expectRevert( + staking_instance.stakerAllowMigrator(INVESTOR_CUSTODIAN_ADDRESS, { from: COLLATERAL_FRAX_AND_FXS_OWNER }), + "Invalid migrator address" + ); + + console.log("---------TRY TO DO EMERGENCY WITHDRAWALS WHILE NOT IN MIGRATION---------"); + await expectRevert( + staking_instance.recoverERC20(lp_tkn_instance.address, test_amount_1, { from: STAKING_OWNER }), + "Not in migration" + ); + + console.log(chalk.blue("=============TEST TRYING TO MIGRATE NOT AS A MIGRATOR [SHOULD FAIL]=============")); + + // Turn on migrations + await staking_instance.toggleMigrations({ from: STAKING_OWNER }); + + console.log("---------TRY TO migrator_withdraw_locked NOT AS THE MIGRATOR---------"); + await expectRevert( + staking_instance.migrator_withdraw_locked(COLLATERAL_FRAX_AND_FXS_OWNER, locked_stake_structs[2].kek_id, { from: INVESTOR_CUSTODIAN_ADDRESS }), + "Mig. invalid or unapproved" + ); + + console.log("---------TRY TO migrator_stakeLocked_for NOT AS THE MIGRATOR---------"); + let block_time_current_3 = (await time.latest()).toNumber(); + await expectRevert( + staking_instance.migrator_stakeLocked_for(COLLATERAL_FRAX_AND_FXS_OWNER, test_amount_1, 28 * 86400, block_time_current_3, { from: INVESTOR_CUSTODIAN_ADDRESS }), + "Mig. invalid or unapproved" + ); + + console.log("---------TRY TO migrator_withdraw_locked AS A NOW NON-APPROVED MIGRATOR ---------"); + // Staker disallows MIGRATOR_ADDRESS + await staking_instance.stakerDisallowMigrator(MIGRATOR_ADDRESS, { from: COLLATERAL_FRAX_AND_FXS_OWNER }) + + await expectRevert( + staking_instance.migrator_withdraw_locked(COLLATERAL_FRAX_AND_FXS_OWNER, locked_stake_structs[2].kek_id, { from: MIGRATOR_ADDRESS }), + "Mig. invalid or unapproved" + ); + + console.log("---------TRY TO migrator_withdraw_unlocked AS A NOW INVALID MIGRATOR ---------"); + // Staker re-allows MIGRATOR_ADDRESS + await staking_instance.stakerAllowMigrator(MIGRATOR_ADDRESS, { from: COLLATERAL_FRAX_AND_FXS_OWNER }) + + // But governance now disallows it + await staking_instance.removeMigrator(MIGRATOR_ADDRESS, { from: STAKING_OWNER }); + + await expectRevert( + staking_instance.migrator_withdraw_locked(COLLATERAL_FRAX_AND_FXS_OWNER, locked_stake_structs[2].kek_id, { from: MIGRATOR_ADDRESS }), + "Mig. invalid or unapproved" + ); + + }); +}); \ No newline at end of file diff --git a/src/hardhat/test/truffle-fixture.js b/src/hardhat/test/truffle-fixture.js index 6ce46dc1..6f26b6c6 100644 --- a/src/hardhat/test/truffle-fixture.js +++ b/src/hardhat/test/truffle-fixture.js @@ -22,9 +22,10 @@ const CrossChainBridgeBacker_ARBI_AnySwap = artifacts.require("Bridges/Arbitrum/ const CrossChainOracle = artifacts.require("Oracle/CrossChainOracle"); // Staking contracts -const FraxCCFarmV2_ArbiCurveVSTFRAX = artifacts.require("Staking/Variants/FraxCCFarmV2_ArbiCurveVSTFRAX"); -const FraxCCFarmV2_SaddleArbUSDv2 = artifacts.require("Staking/Variants/FraxCCFarmV2_SaddleArbUSDv2"); -const FraxCCFarmV3_ArbiSaddleL2D4 = artifacts.require("Staking/Variants/FraxCCFarmV3_ArbiSaddleL2D4"); +// const FraxCCFarmV2_ArbiCurveVSTFRAX = artifacts.require("Staking/Variants/FraxCCFarmV2_ArbiCurveVSTFRAX"); +// const FraxCCFarmV2_SaddleArbUSDv2 = artifacts.require("Staking/Variants/FraxCCFarmV2_SaddleArbUSDv2"); +// const FraxCCFarmV3_ArbiSaddleL2D4 = artifacts.require("Staking/Variants/FraxCCFarmV3_ArbiSaddleL2D4"); +const FraxCCFarmV4_cvxUSDPlusFRAXBP = artifacts.require("Staking/Variants/FraxCCFarmV4_cvxUSDPlusFRAXBP"); // AMOs const SushiSwapLiquidityAMO_ARBI = artifacts.require("Misc_AMOs/__CROSSCHAIN/Arbitrum/SushiSwapLiquidityAMO_ARBI.sol"); @@ -52,9 +53,10 @@ module.exports = async (deployer) => { let cross_chain_oracle_instance; // Staking - let FraxCCFarmV2_ArbiCurveVSTFRAX_instance; - let FraxCCFarmV2_SaddleArbUSDv2_instance; - let FraxCCFarmV3_ArbiSaddleL2D4_instance; + // let FraxCCFarmV2_ArbiCurveVSTFRAX_instance; + // let FraxCCFarmV2_SaddleArbUSDv2_instance; + // let FraxCCFarmV3_ArbiSaddleL2D4_instance; + let FraxCCFarmV4_cvxUSDPlusFRAXBP_instance; // AMOs let curve_amo_arbi_instance; @@ -169,39 +171,55 @@ module.exports = async (deployer) => { // ] // ); - console.log(chalk.yellow("========== FraxCCFarmV2_ArbiCurveVSTFRAX ==========")); - // FraxCCFarmV2_ArbiCurveVSTFRAX - FraxCCFarmV2_ArbiCurveVSTFRAX_instance = await FraxCCFarmV2_ArbiCurveVSTFRAX.new( - THE_ACCOUNTS[6], - CONTRACT_ADDRESSES.arbitrum.bridge_tokens.anyFXS, // anyFXS - CONTRACT_ADDRESSES.arbitrum.canonicals.FXS, // canFXS - CONTRACT_ADDRESSES.arbitrum.reward_tokens.VSTA, - CONTRACT_ADDRESSES.arbitrum.pair_tokens["Curve VSTFRAX-f"], - CONTRACT_ADDRESSES.arbitrum.canonicals.FRAX, // canFRAX - "0x0000000000000000000000000000000000000000", // Timelock - "0x0000000000000000000000000000000000000000", // Rewarder - ); + // console.log(chalk.yellow("========== FraxCCFarmV2_ArbiCurveVSTFRAX ==========")); + // // FraxCCFarmV2_ArbiCurveVSTFRAX + // FraxCCFarmV2_ArbiCurveVSTFRAX_instance = await FraxCCFarmV2_ArbiCurveVSTFRAX.new( + // THE_ACCOUNTS[6], + // CONTRACT_ADDRESSES.arbitrum.bridge_tokens.anyFXS, // anyFXS + // CONTRACT_ADDRESSES.arbitrum.canonicals.FXS, // canFXS + // CONTRACT_ADDRESSES.arbitrum.reward_tokens.VSTA, + // CONTRACT_ADDRESSES.arbitrum.pair_tokens["Curve VSTFRAX-f"], + // CONTRACT_ADDRESSES.arbitrum.canonicals.FRAX, // canFRAX + // "0x0000000000000000000000000000000000000000", // Timelock + // "0x0000000000000000000000000000000000000000", // Rewarder + // ); - console.log(chalk.yellow("========== FraxCCFarmV2_SaddleArbUSDv2 ==========")); - // FraxCCFarmV2_SaddleArbUSDv2 - FraxCCFarmV2_SaddleArbUSDv2_instance = await FraxCCFarmV2_SaddleArbUSDv2.new( - THE_ACCOUNTS[6], - CONTRACT_ADDRESSES.arbitrum.bridge_tokens.anyFXS, // anyFXS - CONTRACT_ADDRESSES.arbitrum.canonicals.FXS, // canFXS - CONTRACT_ADDRESSES.arbitrum.reward_tokens.SPELL, // Should be SDL, but run tests with SPELL - CONTRACT_ADDRESSES.arbitrum.bearer_tokens.saddleArbUSDv2, - CONTRACT_ADDRESSES.arbitrum.canonicals.FRAX, // canFRAX - "0x0000000000000000000000000000000000000000", // Timelock - "0x0000000000000000000000000000000000000000", // Rewarder - ); + // console.log(chalk.yellow("========== FraxCCFarmV2_SaddleArbUSDv2 ==========")); + // // FraxCCFarmV2_SaddleArbUSDv2 + // FraxCCFarmV2_SaddleArbUSDv2_instance = await FraxCCFarmV2_SaddleArbUSDv2.new( + // THE_ACCOUNTS[6], + // CONTRACT_ADDRESSES.arbitrum.bridge_tokens.anyFXS, // anyFXS + // CONTRACT_ADDRESSES.arbitrum.canonicals.FXS, // canFXS + // CONTRACT_ADDRESSES.arbitrum.reward_tokens.SPELL, // Should be SDL, but run tests with SPELL + // CONTRACT_ADDRESSES.arbitrum.bearer_tokens.saddleArbUSDv2, + // CONTRACT_ADDRESSES.arbitrum.canonicals.FRAX, // canFRAX + // "0x0000000000000000000000000000000000000000", // Timelock + // "0x0000000000000000000000000000000000000000", // Rewarder + // ); + + // console.log(chalk.yellow("========== FraxCCFarmV3_ArbiSaddleL2D4 ==========")); + // // FraxCCFarmV3_ArbiSaddleL2D4 + // FraxCCFarmV3_ArbiSaddleL2D4_instance = await FraxCCFarmV3_ArbiSaddleL2D4.new( + // THE_ACCOUNTS[6], + // CONTRACT_ADDRESSES.arbitrum.canonicals.FXS, // canFXS + // CONTRACT_ADDRESSES.arbitrum.reward_tokens.SDL, + // CONTRACT_ADDRESSES.arbitrum.bearer_tokens.saddleL2D4, + // CONTRACT_ADDRESSES.arbitrum.canonicals.FRAX, // canFRAX + // CONTRACT_ADDRESSES.arbitrum.multisigs.Comptrollers, // Timelock + // "0x0000000000000000000000000000000000000000", // Rewarder + // ); - console.log(chalk.yellow("========== FraxCCFarmV3_ArbiSaddleL2D4 ==========")); - // FraxCCFarmV3_ArbiSaddleL2D4 - FraxCCFarmV3_ArbiSaddleL2D4_instance = await FraxCCFarmV3_ArbiSaddleL2D4.new( - THE_ACCOUNTS[6], - CONTRACT_ADDRESSES.arbitrum.canonicals.FXS, // canFXS - CONTRACT_ADDRESSES.arbitrum.reward_tokens.SDL, - CONTRACT_ADDRESSES.arbitrum.bearer_tokens.saddleL2D4, + console.log(chalk.yellow("========== FraxCCFarmV4_cvxUSDPlusFRAXBP ==========")); + // FraxCCFarmV4_cvxUSDPlusFRAXBP + FraxCCFarmV4_cvxUSDPlusFRAXBP_instance = await FraxCCFarmV4_cvxUSDPlusFRAXBP.new( + THE_ACCOUNTS[6], // After initializing, switch to CONTRACT_ADDRESSES.arbitrum.multisigs.Comptrollers, + [ + CONTRACT_ADDRESSES.arbitrum.canonicals.FXS, + CONTRACT_ADDRESSES.arbitrum.reward_tokens.CRV, + CONTRACT_ADDRESSES.arbitrum.reward_tokens.ARB, + CONTRACT_ADDRESSES.arbitrum.reward_tokens.OVN + ], + CONTRACT_ADDRESSES.arbitrum.bearer_tokens.cvxUSDPlusFRAXBP, CONTRACT_ADDRESSES.arbitrum.canonicals.FRAX, // canFRAX CONTRACT_ADDRESSES.arbitrum.multisigs.Comptrollers, // Timelock "0x0000000000000000000000000000000000000000", // Rewarder @@ -250,9 +268,10 @@ module.exports = async (deployer) => { arbiUSDT.setAsDeployed(arbiUSDT_instance); CrossChainBridgeBacker_ARBI_AnySwap.setAsDeployed(cross_chain_bridge_backer_instance); CrossChainOracle.setAsDeployed(cross_chain_oracle_instance); - FraxCCFarmV2_ArbiCurveVSTFRAX.setAsDeployed(FraxCCFarmV2_ArbiCurveVSTFRAX_instance); - FraxCCFarmV2_SaddleArbUSDv2.setAsDeployed(FraxCCFarmV2_SaddleArbUSDv2_instance); - FraxCCFarmV3_ArbiSaddleL2D4.setAsDeployed(FraxCCFarmV3_ArbiSaddleL2D4_instance); - SushiSwapLiquidityAMO_ARBI.setAsDeployed(sushiswap_liquidity_amo_arbi_instance); - CurveAMO_ARBI.setAsDeployed(curve_amo_arbi_instance); + // FraxCCFarmV2_ArbiCurveVSTFRAX.setAsDeployed(FraxCCFarmV2_ArbiCurveVSTFRAX_instance); + // FraxCCFarmV2_SaddleArbUSDv2.setAsDeployed(FraxCCFarmV2_SaddleArbUSDv2_instance); + // FraxCCFarmV3_ArbiSaddleL2D4.setAsDeployed(FraxCCFarmV3_ArbiSaddleL2D4_instance); + FraxCCFarmV4_cvxUSDPlusFRAXBP.setAsDeployed(FraxCCFarmV4_cvxUSDPlusFRAXBP_instance); + // SushiSwapLiquidityAMO_ARBI.setAsDeployed(sushiswap_liquidity_amo_arbi_instance); + // CurveAMO_ARBI.setAsDeployed(curve_amo_arbi_instance); } \ No newline at end of file diff --git a/src/misc/utilities.ts b/src/misc/utilities.ts index 3229af72..90e16f61 100644 --- a/src/misc/utilities.ts +++ b/src/misc/utilities.ts @@ -601,6 +601,17 @@ export const rewardTokenSymbolFromAddress = (rew_tkn_addr: string): string => { } if (found_name) return found_name; + // Search Arbitrum next + const arbi_rew_obj = CONTRACT_ADDRESSES.arbitrum.reward_tokens; + const arbi_rew_keys = Object.keys(arbi_rew_obj); + for (let k = 0; k < arbi_rew_keys.length; k++){ + const test_key = arbi_rew_keys[k]; + if (arbi_rew_obj[test_key].toLowerCase() == rew_tkn_addr.toLowerCase()) { + found_name = test_key.toUpperCase(); + break; + } + } + // Search BSC next const bsc_rew_obj = CONTRACT_ADDRESSES.bsc.reward_tokens; const bsc_rew_keys = Object.keys(bsc_rew_obj); diff --git a/src/types/constants.ts b/src/types/constants.ts index 68b39eb1..58b9df15 100755 --- a/src/types/constants.ts +++ b/src/types/constants.ts @@ -2054,6 +2054,8 @@ export const CONTRACT_ADDRESSES = { FPIS: "0xc2544A32872A91F4A553b404C6950e89De901fdb", frxETH: '0x5E8422345238F34275888049021821E8E08CAa1f', sfrxETH: '0xac3E018457B222d93114458476f3E3416Abbe38F', + // sFRAX_old: '0x03CB4438d015B9646d666316b617a694410C216d', + sFRAX: '0xA663B02CF0a4b149d2aD41910CB81e23e1c41c32', }, oracles: { // SDT_WETH: "0xfbe43821dd397afF3341d90211B71C60149DC6D9", @@ -2271,6 +2273,7 @@ export const CONTRACT_ADDRESSES = { fraxferry_v2__ethereum_arbitrum__FPIS__ETH_SIDE: "0xCd4aa7DB9D8a995a651498E94f6693A4D26e6C9E", fraxferry_v2__ethereum_arbitrum__frxETH__ETH_SIDE: "0x505603e2440b44C1602b44D0Eb8385399b3F7bab", fraxferry_v2__ethereum_arbitrum__sfrxETH__ETH_SIDE: "0x8afd5082E0C24dEcEA39A9eFb14e4ACF4373D7D6", + fraxferry_v2__ethereum_arbitrum__sFRAX__ETH_SIDE: "0x2453b1FbD17ceA069A31C9D16A27f4F93a85Cc0d", fraxferry_v1__ethereum_aurora__FRAX__ETH_SIDE: "0x6ac96F65156281a9383455D704b58A74ea9C9eC4", fraxferry_v1__ethereum_avalanche__FRAX__ETH_SIDE: "0xA381d58e96eC3818c825E1fb264099448945CF8b", fraxferry_v2__ethereum_avalanche__FXS__ETH_SIDE: "0x9Ab224996D25bfDCB91d838F7f1902698Ac0a742", @@ -2278,6 +2281,13 @@ export const CONTRACT_ADDRESSES = { fraxferry_v2__ethereum_avalanche__FPIS__ETH_SIDE: "0x18A5ca670dC42D0551f00E11A730074f6787f17F", fraxferry_v2__ethereum_avalanche__frxETH__ETH_SIDE: "0x94ddd112C9ea0fb534e376BE09A50d310F0612b4", fraxferry_v2__ethereum_avalanche__sfrxETH__ETH_SIDE: "0xF380200B115Caa22D49e6C115b758d6130377620", + fraxferry_v2__ethereum_avalanche__sFRAX__ETH_SIDE: "0x59ae66FB395893E3FD965aDb06A52d06C49dF8A9", + fraxferry_v2__ethereum_base__FRAX__ETH_SIDE: '', + fraxferry_v2__ethereum_base__FXS__ETH_SIDE: '', + fraxferry_v2__ethereum_base__FPI__ETH_SIDE: '', + fraxferry_v2__ethereum_base__FPIS__ETH_SIDE: '', + fraxferry_v2__ethereum_base__frxETH__ETH_SIDE: '', + fraxferry_v2__ethereum_base__sfrxETH__ETH_SIDE: '', fraxferry_v1__ethereum_boba__FRAX__ETH_SIDE: "0x3eF1d856EA62A2292B8690855042095a7aC48B4b", fraxferry_v1__ethereum_bsc__FRAX__ETH_SIDE: "0xDAe210BfB0cF8c81EDB4b459e2e0bA14D553e2D9", fraxferry_v2__ethereum_bsc__FXS__ETH_SIDE: "0x9B62402Eb9A755677dEbdaE3639CB531c0Af0E5d", @@ -2285,6 +2295,7 @@ export const CONTRACT_ADDRESSES = { fraxferry_v2__ethereum_bsc__FPIS__ETH_SIDE: "0xf18B122c3935Ff49f62C8f1f77Dc42A6F85A0bb5", fraxferry_v2__ethereum_bsc__frxETH__ETH_SIDE: "0xce4DbAF3fa72C962Ee1F371694109fc2a80B03f5", fraxferry_v2__ethereum_bsc__sfrxETH__ETH_SIDE: "0x621D0e62f26314387f338A2509aFA3Ae3414661A", + fraxferry_v2__ethereum_bsc__sFRAX__ETH_SIDE: "0xe3e7F354ac948ceBa925181C81618D7c9b3da8C9", fraxferry_v1__ethereum_evmos__FRAX__ETH_SIDE: "0x2d2261f970F605C813f160E8BAEd455E9004A842", fraxferry_v1__ethereum_fantom__FRAX__ETH_SIDE: "0xfB788F9E20ef426a32A67986654750172A6c1788", fraxferry_v2__ethereum_fantom__FXS__ETH_SIDE: "0x1313d143BE1ac25aCACEFF39Bf31877bccDb9622", @@ -2301,7 +2312,8 @@ export const CONTRACT_ADDRESSES = { fraxferry_v2__ethereum_optimism__FPI__ETH_SIDE: "0xC05DE1CB258bAdc152d8EAd3F573CA9A2E812B2a", fraxferry_v2__ethereum_optimism__FPIS__ETH_SIDE: "0x8Bf7Af56bB721BC3d015111508593Fcb301546F0", fraxferry_v2__ethereum_optimism__frxETH__ETH_SIDE: "0x2F08F4645d2fA1fB12D2db8531c0c2EA0268BdE2", - fraxferry_v2__ethereum_optimism__sfrxETH__ETH_SIDE: "0x04ba20D2Cc47C63bce1166C2864F0241e4D0a0CC", + fraxferry_v2__ethereum_optimism__sfrxETH__ETH_SIDE: "0x04ba20D2Cc47C63bce1166C2864F0241e4D0a0CC", + fraxferry_v2__ethereum_optimism__sFRAX__ETH_SIDE: "0x9694dcF5b6CCF6216B05FE64945f62603e2d2367", fraxferry_v1__ethereum_polygon__FRAX__ETH_SIDE: "0x43959A388603DCb6B02Ca084A55d4c7f3b442c57", fraxferry_v2__ethereum_polygon__FXS__ETH_SIDE: "0xCa026e80F1E9e44da7ce3eD6aC2E9630260B9276", fraxferry_v2__ethereum_polygon__frxETH__ETH_SIDE: "0x98f5E4b7D9eDF57A6ED41b334bD40B2eAa6B6e26", @@ -2312,6 +2324,7 @@ export const CONTRACT_ADDRESSES = { fraxferry_v2__ethereum_polygon_zkevm__FPIS__ETH_SIDE: "0xF887C4cFAAfB43d1AA7De204344895591016772c", fraxferry_v2__ethereum_polygon_zkevm__frxETH__ETH_SIDE: "0x3aaB5C43D4e47f71DEea94a7d541E6C07e21B137", fraxferry_v2__ethereum_polygon_zkevm__sfrxETH__ETH_SIDE: "0xb8686Ef9B7ee9e73dE5d1721E4Da580278F8F4d2", + fraxferry_v2__ethereum_polygon_zkevm__sFRAX__ETH_SIDE: "0x602cCfee6B4BA8Eb5e35Cf26e05fDEDE379e578E", fraxferry_v2__ethereum_zksync__FRAX__ETH_SIDE: "0x32dDf80508cfD8feD8ABe375582FC7cfD20372C4", fraxferry_v2__ethereum_zksync__FXS__ETH_SIDE: "0x27E97F35D80514D5DD1Caa730e22a292E912a214", fraxferry_v2__ethereum_zksync__FPI__ETH_SIDE: "0x0F6136F9aBB7A0c21FbE076771625b39C544BDf5", @@ -2477,6 +2490,9 @@ export const CONTRACT_ADDRESSES = { LUSDFRAXBP_Pool: '0x497CE58F34605B9944E6b15EcafE6b001206fd25', MAIFRAXBP: '0x66E335622ad7a6C9c72c98dbfCCE684996a20Ef9', MAIFRAXBP_Pool: '0x66E335622ad7a6C9c72c98dbfCCE684996a20Ef9', + mkUSDFRAXBP: '0x0cfe5c777a7438c9dd8add53ed671cec7a5faee5', + mkUSDFRAXBP_Pool: '0x0cfe5c777a7438c9dd8add53ed671cec7a5faee5', + mkUSDFRAXBP_Gauge: '0xf184d80915ba7d835d941ba70cddf93de36517ee', OGTemple: '0x654590F810f01B51dc7B86915D4632977e49EA33', OHMFRAXBP: '0x5271045f7b73c17825a7a7aee6917ee46b0b7520', OHMFRAXBP_Pool: '0xfc1e8bf3e81383ef07be24c3fd146745719de48d', @@ -2550,6 +2566,8 @@ export const CONTRACT_ADDRESSES = { cvxLUSDFRAXBP_Rewarder: '0x053e1dad223A206e6BCa24C77786bb69a10e427d', cvxMAIFRAXBP: '0xe79914274Ea1332222793d7ba931647531E10a5b', cvxMAIFRAXBP_Rewarder: '0xD3C412C3cEdbEC604425B23DCd79Aa1ac810622f', + cvxmkUSDFRAXBP: '0x187601595F6D5746566BC0361a48d13066F11C71', + cvxmkUSDFRAXBP_Rewarder: '0x35FbE5520E70768DCD6E3215Ed54E14CBccA10D2', cvxOHMFRAXBP: '0x5271045F7B73c17825A7A7aee6917eE46b0B7520', cvxOHMFRAXBP_Rewarder: '0x27A8c58e3DE84280826d615D80ddb33930383fE9', cvxRSRFRAXBP: '0x022600684e9492dA82f0da11Bf039c11109d0935', @@ -2558,6 +2576,8 @@ export const CONTRACT_ADDRESSES = { cvxSDTFRAXBP_Rewarder: '0xc3df9cC2B8FFdB801E8e6E8FF9C1245E2dEcdA98', cvxSTGFRAXBP: '0x867fe27fc2462cff8890b54dfd64e6d42a9d1ac8', cvxSTGFRAXBP_Rewarder: '0xAa57A289Bb22a1A0C583db306F6566AE2c0CAf21', + cvxtriSDT: "0x5C2c6E21e141Dd3D13C34754A20d620A1bb731B5", + cvxtriSDT_Rewarder: "0x1f2a117314e6e8655E0A1C97669b7B836e2cDb91", cvxTUSDFRAXBP: '0x33baeDa08b8afACc4d3d07cf31d49FC1F1f3E893', cvxTUSDFRAXBP_Rewarder: '0x4a744870fD705971c8c00aC510eAc2206C93d5bb', cvxUSDDFRAXBP: '0x4606326b4Db89373F5377C316d3b0F6e55Bc6A20', @@ -2600,6 +2620,8 @@ export const CONTRACT_ADDRESSES = { cvxfrxETHcbETH_Rewarder: '0x0080d49D4a4921dF0F3853c5e4533462A51fbb29', cvxfrxETHmsETH: "0x29889a5fE8e467da8af697C5f1eB901F4911Ab50", cvxfrxETHmsETH_Rewarder: "0x15507737f44446EB0A86147E2C72Aa6A111A64B2", + cvxfrxETHpETH: '0x1941da8D12A6B39B76bd54c865c8cD3a4553E9C3', + cvxfrxETHpETH_Rewarder: '0x42aaC689261723d06d2a8f356448bd8249f831Bc', cvxfrxETHrETH: '0xeEC515BE690BF445c8C4d1625FD82FA75Bc38bf6', cvxfrxETHrETH_Rewarder: '0x84754821b5484A69DB3164eF4eDC5A5657318039', cvxfrxETHrETH_StaFi: "0x02a2206268b49A9b3ee5DD51577E5bDa0072d5F1", @@ -2608,6 +2630,8 @@ export const CONTRACT_ADDRESSES = { cvxfrxETHsETH_Rewarder: '0x55cdF6c7E6d04b83835E4702ed395D0263237DA2', cvxfrxETHstETH: '0x01492A2cB0Bd14034710475197B4169501B49Ead', cvxfrxETHstETH_Rewarder: '0xC3D0B8170E105d6476fE407934492930CAc3BDAC', + cvxfrxETHWETH: '0xAA71e0065A29F2529aBC0F615874009287966229', + cvxfrxETHWETH_Rewarder: '0xFafDE12dC476C4913e29F47B4747860C148c5E4f', cvxfrxETHzETH: "0x52EdB08ab81e4Cc32cf318aed17dB11c09C3E8B9", cvxfrxETHzETH_Rewarder: "0x98B662443695f7328F6A7fDe9894CC0E88630269", cvxgusd3CRV_free: '0x15c2471ef46Fa721990730cfa526BcFb45574576', @@ -2642,6 +2666,9 @@ export const CONTRACT_ADDRESSES = { frxETHmsETH: "0x2d600bbbcc3f1b6cb9910a70bab59ec9d5f81b9a", frxETHmsETH_Gauge: "0xb7a3c519889a916c5ecb54101e69ecf11de60d0b", frxETHmsETH_Pool: "0x2d600bbbcc3f1b6cb9910a70bab59ec9d5f81b9a", + frxETHpETH: '0x320b564fb9cf36933ec507a846ce230008631fd3', + frxETHpETH_Gauge: '0x57e1947e1134f6e733a4a694de6a163ef23edf54', + frxETHpETH_Pool: '0x320b564fb9cf36933ec507a846ce230008631fd3', frxETHrETH: '0xba6c373992ad8ec1f7520e5878e5540eb36debf1', frxETHrETH_Gauge: '0xf20bd4d5a4112d5f9c64adf53726f3ef1b7d0d61', frxETHrETH_Pool: '0xe7c6e0a739021cdba7aac21b4b728779eef974d9', @@ -2654,6 +2681,9 @@ export const CONTRACT_ADDRESSES = { frxETHstETH: '0x4d9f9d15101eec665f77210cb999639f760f831e', frxETHstETH_Gauge: '0x821529bb07c83803c9cc7763e5974386e9efedc7', frxETHstETH_Pool: '0x4d9f9d15101eec665f77210cb999639f760f831e', + frxETHWETH: '0x9c3b46c0ceb5b9e304fcd6d88fc50f7dd24b31bc', + frxETHWETH_Gauge: '0x4e21418095d32d15c6e2b96a9910772613a50d50', + frxETHWETH_Pool: '0x9c3b46c0ceb5b9e304fcd6d88fc50f7dd24b31bc', frxETHzETH: "0xfc89b519658967fcbe1f525f1b8f4bf62d9b9018", frxETHzETH_Gauge: "0xb3627140beacb97f9ca52b34090352fdafc77d72", frxETHzETH_Pool: "0xfc89b519658967fcbe1f525f1b8f4bf62d9b9018", @@ -2712,10 +2742,12 @@ export const CONTRACT_ADDRESSES = { stkcvxGUSDFRAXBP: '0x16e9eaC2A9e29aF3c53d24ed0F07fc403E098b64', stkcvxLUSDFRAXBP: '0x8C402989a966D37B96f60401A6158D5D49f1381D', stkcvxMAIFRAXBP: '0x787eB52b94c4610ABE2C9C5eE95c3a4a16533344', + stkcvxmkUSDFRAXBP: '0xd529a0FD4249f0b48171140873b1b13a1ad5286d', stkcvxOHMFRAXBP: '0x81b0dCDa53482A2EA9eb496342dC787643323e95', stkcvxRSRFRAXBP: '0xF37007f2b9DE656115e1B977Bb1fd38A99B8a2a6', stkcvxSDTFRAXBP: '0xE6Aa75F98e6c105b821a2dba9Fbbd886b421F06b', stkcvxSTGFRAXBP: '0xAe1bA2Cf0eBF00C5052309992d7B6c94e3EfcBEf', + stkcvxtriSDT: '0xAD059ccF041e344eA52A3152Bbf654c605d68473', stkcvxTUSDFRAXBP: '0x32fA492Ac1F729E0eE9eDdfCBacc3ef72B234e27', stkcvxUSDDFRAXBP: '0x507e41A64eB7AE47ee303e3B16237ab757F6C06c', 'stkcvxUZDFRAXBP (Deprecated)': '0x57Fb068BDa27351EF0913113264Ce3EF4EeA3316', @@ -2735,11 +2767,13 @@ export const CONTRACT_ADDRESSES = { stkcvxfrxETHalETH: '0x8A59781B415288f9E633b948618726CB6E47e980', stkcvxfrxETHankrETH: '0x75A439b3F8106428b86198D8c306c57E9e7Bb3dC', stkcvxfrxETHcbETH: '0x4e9D8323603E69c1310E5e04Db172bD5aB07df95', - stkcvxfrxETHmsETH: "0x09bFD0c760E4a1bFc970cdaAAD240307C917Aa6c", + stkcvxfrxETHmsETH: '0x09bFD0c760E4a1bFc970cdaAAD240307C917Aa6c', + stkcvxfrxETHpETH: '0xeCF134dF5DE1e0E12A441D446ff81994Cb0301A2', stkcvxfrxETHrETH: '0xE0c65F74728Ff26219C6adddCEfB215484bb08DF', - stkcvxfrxETHrETH_StaFi: "0xffAFA5aA5b0a9C0C8e05ec8b89056F018EE2Bad6", + stkcvxfrxETHrETH_StaFi: '0xffAFA5aA5b0a9C0C8e05ec8b89056F018EE2Bad6', stkcvxfrxETHsETH: '0x44b51F7F92D761Cf2FC46011AD6b74Ce56447924', stkcvxfrxETHstETH: '0xc2eC3d1209FD1Fc512950825f34281EaF9aB13A2', + stkcvxfrxETHWETH: '0x08061feC3FC09Aa2Eb4B4B72EA618034CBFD22b0', stkcvxfrxETHzETH: "0xd69068777d1b2dc74522117efA75AA195c0b57DB", stkcvxmsUSDFRAXBP: '0x227b7F44468A0EC0FDdfc3FB0cE09b294E62f875', stkcvxpUSDFRAXBP: '0x7AEF5bDC573dCbfb40EC68b0BAAB03abB846C9c6', @@ -2747,6 +2781,8 @@ export const CONTRACT_ADDRESSES = { stkcvxswETHfrxETH: '0xa3ae006Cc863423F690ca01C2a8F692B97c93c3b', swETHfrxETH: '0xe49addc2d1a131c6b8145f0eba1c946b7198e0ba', swETHfrxETH_Pool: '0x67e0bdbe0a2c5999a60d048f50e794218056b767', + triSDT: "0x954313005c56b555bdc41b84d6c63b69049d7847", + triSDT_Gauge: "0x2dd2b7e07dd433b758b98a3889a63cbf48ef0d99", tFRAX: '0x94671a3cee8c7a12ea72602978d1bb84e920efb2', tFXS: '0xadf15ec41689fc5b6dca0db7c53c9bfe7981e655', veCRV: '0x5f3b5DfEb7B28CDbD7FAba78963EE202a494e2A2', @@ -2837,16 +2873,18 @@ export const CONTRACT_ADDRESSES = { 'Convex stkcvxfrxETHalETH': '0x8A59781B415288f9E633b948618726CB6E47e980', 'Convex stkcvxfrxETHankrETH': '0x75A439b3F8106428b86198D8c306c57E9e7Bb3dC', 'Convex stkcvxfrxETHcbETH': '0x4e9D8323603E69c1310E5e04Db172bD5aB07df95', - 'Convex stkcvxfrxETHmsETH': '0x09bFD0c760E4a1bFc970cdaAAD240307C917Aa6c', + 'Convex stkcvxfrxETHpETH': '0xeCF134dF5DE1e0E12A441D446ff81994Cb0301A2', 'Convex stkcvxfrxETHETH': '0x4659d5fF63A1E1EDD6D5DD9CC315e063c95947d0', 'Convex stkcvxfrxETHrETH': '0xE0c65F74728Ff26219C6adddCEfB215484bb08DF', 'Convex stkcvxfrxETHrETH_StaFi': '0xffAFA5aA5b0a9C0C8e05ec8b89056F018EE2Bad6', 'Convex stkcvxfrxETHsETH': '0x44b51F7F92D761Cf2FC46011AD6b74Ce56447924', 'Convex stkcvxfrxETHstETH': '0xc2eC3d1209FD1Fc512950825f34281EaF9aB13A2', + 'Convex stkcvxfrxETHWETH': '0x08061feC3FC09Aa2Eb4B4B72EA618034CBFD22b0', 'Convex stkcvxfrxETHzETH': '0xd69068777d1b2dc74522117efA75AA195c0b57DB', 'Convex stkcvxLUSDFRAXBP': '0x8C402989a966D37B96f60401A6158D5D49f1381D', 'Convex stkcvxMAIFRAXBP': '0x787eB52b94c4610ABE2C9C5eE95c3a4a16533344', + 'Convex stkcvxmkUSDFRAXBP': '0xd529a0FD4249f0b48171140873b1b13a1ad5286d', 'Convex stkcvxmsUSDFRAXBP': '0x227b7F44468A0EC0FDdfc3FB0cE09b294E62f875', 'Convex stkcvxOHMFRAXBP': '0x81b0dCDa53482A2EA9eb496342dC787643323e95', 'Convex stkcvxpUSDFRAXBP': '0x7AEF5bDC573dCbfb40EC68b0BAAB03abB846C9c6', @@ -2855,6 +2893,7 @@ export const CONTRACT_ADDRESSES = { 'Convex stkcvxSTGFRAXBP': '0xAe1bA2Cf0eBF00C5052309992d7B6c94e3EfcBEf', 'Convex stkcvxsUSDFRAXBP': '0x9f0C2673a33b7087e367253f196A7E823fBc2341', 'Convex stkcvxswETHfrxETH' : '0xa3ae006Cc863423F690ca01C2a8F692B97c93c3b', + 'Convex stkcvxtriSDT': '0xAD059ccF041e344eA52A3152Bbf654c605d68473', 'Convex stkcvxTUSDFRAXBP': '0x32fA492Ac1F729E0eE9eDdfCBacc3ef72B234e27', 'Convex stkcvxUSDDFRAXBP': '0x507e41A64eB7AE47ee303e3B16237ab757F6C06c', 'Convex stkcvxUZDFRAXBP (Deprecated)': '0x57Fb068BDa27351EF0913113264Ce3EF4EeA3316', @@ -2988,17 +3027,20 @@ export const CONTRACT_ADDRESSES = { 'Convex stkcvxfrxETHankrETH': '0x854B98dC1F76c92b22F75d1f33D23FEb64D8087F', 'Convex stkcvxfrxETHcbETH': '0x16e55917849aC7fA4341470FA3A22bB503D5cACD', 'Convex stkcvxfrxETHmsETH': '0x2816Ab1F4Db656602b6B0041c006652A4F5D0437', + 'Convex stkcvxfrxETHpETH': '0xD591A551bC1776A7Ce066a5Df7640266afc850bF', 'Convex stkcvxfrxETHETH': '0xa537d64881b84faffb9Ae43c951EEbF368b71cdA', 'Convex stkcvxfrxETHrETH': '0x719505cB97DF15565255eb1bDe65586271dB873C', 'Convex stkcvxfrxETHrETH_StaFi': '0x76CF35aB1450D3A6c84EdDB8A960A5F65B76e706', 'Convex stkcvxfrxETHsETH': '0xd79Ae34eD6D11A235629A48aeA9F661a241faD4f', 'Convex stkcvxfrxETHstETH': '0x68921998fbc43B360D3cF14a03aF4273CB0cFA44', + 'Convex stkcvxfrxETHWETH': '0xB4fdD7444E1d86b2035c97124C46b1528802DA35', 'Convex stkcvxfrxETHzETH': '0x882B9fad02D1a7436449dcdE9934Eeb9E287909c', 'Convex stkcvxGHOFRAXBP': '', 'Convex stkcvxGRAIFRAXBP': '0x5684d5566bb438D8Ef7B3C1E5da9450cD19C1b9f', 'Convex stkcvxGUSDFRAXBP': '0xF0Ffe16810B7f412c52C1610e3BC9819A7Dcb366', 'Convex stkcvxLUSDFRAXBP': '0xF0A9b6F6593b4Bf96E1Ab13921A8a3FbFd9d4F16', 'Convex stkcvxMAIFRAXBP': '0xdE5684F85a78F6CcCFFB4b9301ad0944eb5CE3eE', + 'Convex stkcvxmkUSDFRAXBP': '0x95AB2a2F6e701873cEA0070dAc735589D089f6Bc', 'Convex stkcvxmsUSDFRAXBP': '0xfB2CCc82755A734C53C8B45f260fFc2df026fe87', 'Convex stkcvxOHMFRAXBP': '0xc96e1a26264D965078bd01eaceB129A65C09FFE7', 'Convex stkcvxpUSDFRAXBP': '0x40b42E4ab3c044e67CBFb0bD99C9E975dcB83668', @@ -3006,6 +3048,7 @@ export const CONTRACT_ADDRESSES = { 'Convex stkcvxSDTFRAXBP': '0x9C8d9667d5726aEcA4d24171958BeE9F46861bed', 'Convex stkcvxSTGFRAXBP': '0xd600A3E4F57E718A7ad6A0cbb10c2A92c57827e6', 'Convex stkcvxswETHfrxETH' : '0x7b8848f10A016341c9B2427e8541C19F31C2D243', + 'Convex stkcvxtriSDT': '0x50Cde910D1f8b6C787b7903d23082542593E0710', 'Convex stkcvxTUSDFRAXBP': '0xb324b2BD8a3Dc55b04111E84d5cce0c3771F8889', 'Convex stkcvxUSDDFRAXBP': '0xF7242A1cE383174802818febB36B6eebb56d5BFb', 'Convex stkcvxUZDFRAXBP (Deprecated)': '0x7838d18AD75372061a1e71e1499b7E90832c1508', @@ -3161,6 +3204,7 @@ export const CONTRACT_ADDRESSES = { }, middleman_gauges: { "Balancer frxETH-bb-a-WETH Gauge": "0xE3f4e2b79f1a8bf3b14d9100323Fca24D923f796", + "Convex USD+FRAXBP": "0x840f20ffED887c61435E81fd1231CB923df39d3d", "Curve VSTFRAX-f": "0x127963A74c07f72D862F2Bdc225226c3251BD117", // Arbitrum "KyberSwap Elastic FRAX/USDC [Arbitrum]": "0x0884c9Bb52348fa76d4e1c6Ea042A2EaF0b72c6C", // Arbitrum "KyberSwap Elastic FRAX/USDC [Optimism]": "0x9c9e8E8ccD7dAF6AfAB436829992B3Cf408319B4", // Optimism @@ -3186,6 +3230,7 @@ export const CONTRACT_ADDRESSES = { FPIS: "0x3405E88af759992937b84E58F2Fe691EF0EeA320", frxETH: '0x178412e79c25968a32e89b11f63B33F733770c2A', sfrxETH: '0x95aB45875cFFdba1E5f451B950bC2E42c0053f39', + sFRAX: '0xe3b3FE7bcA19cA77Ad877A5Bebab186bEcfAD906', }, bridge_tokens: { anyFRAX: "0x667fd83e24ca1d935d36717d305d54fa0cac991c", @@ -3217,6 +3262,7 @@ export const CONTRACT_ADDRESSES = { fraxferry_v2__ethereum_arbitrum__FPIS__ARBI_SIDE: "0x4EE62cA4DC0576b943dc5A8A8b9FF0883C5F2fe1", fraxferry_v2__ethereum_arbitrum__frxETH__ARBI_SIDE: "0x6c5Ae8dCaD1E101FB108a89954D7dC0B8991445b", fraxferry_v2__ethereum_arbitrum__sfrxETH__ARBI_SIDE: "0xf1C16E1c01e62716884ef947063e9C7D44eC287F", + fraxferry_v2__ethereum_arbitrum__sFRAX__ARBI_SIDE: "0x1B0b9991Df27a4F2847478127d51Fb29883882f5", ferry_to_polygon: "0xe57314D4405289FfC91306E4574C28b7394c4822", captain: "0xBB437059584e30598b3AF0154472E47E6e2a45B9", first_officer: "0xBB437059584e30598b3AF0154472E47E6e2a45B9", @@ -3259,45 +3305,122 @@ export const CONTRACT_ADDRESSES = { sushiswap_liquidity: "0x5D83f657959F916D72a33DDF53BFb7EcD7Ef1507", // Old: "0xFB5Bb0AE6f9f0a153E59d7EB7C993eb293b7d713" }, reward_tokens: { + ARB: "0x912CE59144191C1204E64559FE8253a0e49E6548", + CHR: '0x15b2fb8f08e4ac1ce019eadae02ee92aedf06851', + CRV: "0x11cDb42B0EB46D95f990BeDD4695A6e3fA034978", + CVX: "0xaAFcFD42c9954C6689ef1901e03db742520829c5", + FXS: "0x9d2F299715D94d8A7E6F5eaa8E654E8c74a988A7", KNC: "0xe4DDDfe67E7164b0FE14E218d80dC4C08eDC01cB", - weth: "0x82aF49447D8a07e3bd95BD0d56f35241523fBab1", + OVN: "0xA3d1a8DEB97B111454B294E2324EfAD13a9d8396", + MAI: '0x3f56e0c36d275367b8c502090edf38289b3dea0d', + RAM: '0xAAA6C1E32C55A7Bfa8066A6FAE9b42650F262418', SPELL: "0x3E6648C5a70A150A88bCE65F4aD4d506Fe15d2AF", SDL: "0x75c9bc761d88f70156daf83aa010e84680baf131", - VSTA: "0xa684cd057951541187f288294a1e1C2646aA2d24" + USDPLUS: '0xe80772eaf6e2e18b651f160bc9158b2a5cafca65', + VSTA: "0xa684cd057951541187f288294a1e1C2646aA2d24", + weth: "0x82aF49447D8a07e3bd95BD0d56f35241523fBab1", }, bearer_tokens: { - curve4pool: "0x1C5ffa4FB4907B681c61B8c82b28C4672ceb1974", - FRAX2pool: "0xf07d553B195080F84F582e88ecdD54bAa122b279", - FRAXBP: "0xC9B8a3FDECB9D5b218d02555a8Baf332E5B740d5", // L2 Curve LP Token and Pool are same contract - hFRAX: "0xb1c4426C86082D91a6c097fC588E5D5d8dD1f5a8", + curve4pool: '0x1C5ffa4FB4907B681c61B8c82b28C4672ceb1974', + cvxUSDPlusFRAXBP: '0x11F2217fa1D5c44Eae310b9b985E2964FC47D8f9', + cvxUSDPlusFRAXBP_Rewarder: '0x11F2217fa1D5c44Eae310b9b985E2964FC47D8f9', + FRAX2pool: '0xf07d553B195080F84F582e88ecdD54bAa122b279', + FRAXBP: '0xC9B8a3FDECB9D5b218d02555a8Baf332E5B740d5', // L2 Curve LP Token and Pool are same contract + hFRAX: '0xb1c4426C86082D91a6c097fC588E5D5d8dD1f5a8', LFrax: "0x2E9963ae673A885b6bfeDa2f80132CE28b784C40", // Sentiment - saddleArbUSDv2: "0x0a20c2FFa10cD43F67D06170422505b7D6fC0953", - saddleL2D4: "0x147D0Af556C6D89640BFa915D2b9619d7b55947a", - saddleL2D4_Permissionless_Swap: "0xF2839E0b30B5e96083085F498b14bbc12530b734", - sdl_FRAXBP: "0x896935B02D3cBEb152192774e4F1991bb1D2ED3f", - sdl_FRAXBP_Pool: "0x401AFbc31ad2A3Bc0eD8960d63eFcDEA749b4849", + saddleArbUSDv2: '0x0a20c2FFa10cD43F67D06170422505b7D6fC0953', + saddleL2D4: '0x147D0Af556C6D89640BFa915D2b9619d7b55947a', + saddleL2D4_Permissionless_Swap: '0xF2839E0b30B5e96083085F498b14bbc12530b734', + sdl_ArbUSDV2: '0x0a20c2ffa10cd43f67d06170422505b7d6fc0953', + sdl_ArbUSDV2_Pool: '0xfeEa4D1BacB0519E8f952460A70719944fe56Ee0', + sdl_FRAXBP: '0x896935B02D3cBEb152192774e4F1991bb1D2ED3f', + sdl_FRAXBP_Pool: '0x401AFbc31ad2A3Bc0eD8960d63eFcDEA749b4849', + sdl_USDsFRAXBP: '0x1e491122f3C096392b40a4EA27aa1a29360d38a1', + sdl_USDsFRAXBP_Pool: '0xa5bD85ed9fA27ba23BfB702989e7218E44fd4706', + sdl_USDTFRAXBP: '0x166680852ae9Dec3d63374c5eBf89E974448BFE9', + sdl_USDTFRAXBP_Pool: '0xf8504e92428d65E56e495684A38f679C1B1DC30b', + sdl_USXFRAXBP: '0x721DaC7d5ACc8Aa62946fd583C1F999e1570b97D', + sdl_USXFRAXBP_Pool: '0xb2a2764D0DCAB445E24f4b813bE3f6ef8AE5f84D', + USDPlusFRAXBP: '0xb34a7d1444a707349bc7b981b7f2e1f20f81f013', + USDPlusFRAXBP_Gauge: '0x4645e6476d3a5595be9efd39426cc10586a8393d', + USDPlusFRAXBP_Pool: '0xb34a7d1444a707349bc7b981b7f2e1f20f81f013', + veCHR: '0x9A01857f33aa382b1d5bb96C3180347862432B0d', + veRAM: '0xAAA343032aA79eE9a6897Dab03bef967c3289a06', }, vamms: {}, pair_tokens: { - "Curve VSTFRAX-f": "0x59bF0545FCa0E5Ad48E13DA269faCD2E8C886Ba4", - "Fraxswap V1 FRAX/FXS": "0x053B92fFA8a15b7db203ab66Bbd5866362013566", - "Fraxswap V2 FRAX/FXS": "0x90FF2b6b6a2eb3C68D883bc276F6736b1262fa50", - "Fraxswap V1 FRAX/WETH": "0xb771410E2b1d892C3469711824c44769528fdc89", - "Fraxswap V2 FRAX/WETH": "0x0BB5A573886bbcecf18590b6Cb59E980FAC7d278", - "KyberSwap Elastic FRAX/USDC [Arbitrum]": "0x97cb76cbb84aa35deaf1dac3101a506588b6c197", - "Saddle L2D4 [Arbitrum]": "0x147D0Af556C6D89640BFa915D2b9619d7b55947a", - "Sentiment LFrax": "0x2E9963ae673A885b6bfeDa2f80132CE28b784C40", - "Sushi canFRAX/canFXS": "0xfb5DB4f55Bb97A608f6EE50864104457FA04DA4f", - "Sushi canFRAX/WETH": "0xaebfda10b251d650126830b952ee74b4a599f71f", - "Sushi canFRAX/arbiUSDC": "0x8286a9881CEe20E71ac1215f8D39De6853Dd9A8F", - "Sushi canFXS/arbiUSDC": "0xC1C8136A948e6332db36E90aDD6fb004871176A2", + 'Arbidex FRAX/DAI+': '0x306132b6147751B85E608B4C1EC452E111531eA2', + 'Arbidex FRAX/frxETH': '0x1379Fa99279129476A54108259Da487294D53b97', + 'Arbidex FRAX/USDCe': '0x2d3d9D377C046C218e0F3B5A6bD17C9E673F1d8C', + 'Arbidex FRAX/USD+': '0xb0Fb1787238879171Edc30b9730968600D55762A', + 'Arbidex FRAX/WETH': '0xDE553150eF951800d2C85B06EE3012113d7a262f', + 'Arbidex frxETH/WETH': '0xD3B90a1780b58c59a4333A879C7DF488876565F6', + 'Chronos sAMM-FRAX/MAI': '0x37A7bF05807feCD6b1CCE53366059e70E313e4Af', + 'Chronos sAMM-FRAX/USD+': '0x0D20EF7033b73Ea0c9c320304B05da82E2C14E33', + 'Chronos sAMM-frxETH/sfrxETH': '0xd52862915de98201bA93a45E73081450075C4E33', + 'Chronos sAMM-frxETH/WETH': '0xdb286ED48b294D348593bFAf1f862393FA8776e9', + 'Convex USD+FRAXBP': '0x11F2217fa1D5c44Eae310b9b985E2964FC47D8f9', + 'Curve VSTFRAX-f': '0x59bF0545FCa0E5Ad48E13DA269faCD2E8C886Ba4', + 'dForce FRAX Lending [Arbitrum]': '0xb3ab7148cCCAf66686AD6C1bE24D83e58E6a504e', + 'Fraxswap V1 FRAX/FXS': '0x053B92fFA8a15b7db203ab66Bbd5866362013566', + 'Fraxswap V2 FRAX/FXS': '0x90FF2b6b6a2eb3C68D883bc276F6736b1262fa50', + 'Fraxswap V1 FRAX/WETH': '0xb771410E2b1d892C3469711824c44769528fdc89', + 'Fraxswap V2 FRAX/WETH': '0x0BB5A573886bbcecf18590b6Cb59E980FAC7d278', + 'Hundred FRAX Lending [Arbitrum]': '0xb1c4426C86082D91a6c097fC588E5D5d8dD1f5a8', + 'KyberSwap Elastic FRAX/USDC [Arbitrum]': '0x97cb76cbb84aa35deaf1dac3101a506588b6c197', + 'Ramses crAMM-FRAX/USDC': '0xfE3b6dD9457e13b2F44B9356E55Fc5e6248B27Ba', + 'Ramses crAMM-FRAX/DOLA': '0x1850e96550d6716d43bA4d7DF815FfC32bD0d03e', + 'Ramses crAMM-FRAX/MAI': '0x3F6253767208aAf70071d563403C8023809d52FF', + 'Ramses vrAMM-FRAX/FXS': '0xa45cbd521ed745f6c856c89f8dbb583bd1591fc2', + 'Ramses vrAMM-FRAX/agEUR': '0x18fa950f95f900fa2cb3dd01837e05d04ad914b8', + 'Ramses crAMM-frxETH/sfrxETH': '0xf166ff5cd771923d4d4fb870403afc6f13dd2d02', + 'Ramses crAMM-frxETH/WETH': '0x3932192de4f17dfb94be031a8458e215a44bf560', + 'Saddle ArbUSD V2 [Arbitrum]': '0x0a20c2FFa10cD43F67D06170422505b7D6fC0953', + 'Saddle L2D4 [Arbitrum]': '0x147D0Af556C6D89640BFa915D2b9619d7b55947a', + 'Saddle FRAX/USDC BP [Arbitrum]': '0x896935B02D3cBEb152192774e4F1991bb1D2ED3f', + 'Saddle FRAXBP/USDs [Arbitrum]': '0x1e491122f3C096392b40a4EA27aa1a29360d38a1', + 'Saddle FRAXBP/USDT [Arbitrum]': '0x166680852ae9Dec3d63374c5eBf89E974448BFE9', + 'Saddle FRAXBP/USX [Arbitrum]': '0x721DaC7d5ACc8Aa62946fd583C1F999e1570b97D', + 'Sentiment LFrax': '0x2E9963ae673A885b6bfeDa2f80132CE28b784C40', + 'Stargate Bridge Liquidity FRAX [Arbitrum]': '0xaa4BF442F024820B2C28Cd0FD72b82c63e66F56C', + 'Sushi canFRAX/canFXS': '0xfb5DB4f55Bb97A608f6EE50864104457FA04DA4f', + 'Sushi canFRAX/WETH': '0xaebfda10b251d650126830b952ee74b4a599f71f', + 'Sushi canFRAX/arbiUSDC': '0x8286a9881CEe20E71ac1215f8D39De6853Dd9A8F', + 'Sushi canFXS/arbiUSDC': '0xC1C8136A948e6332db36E90aDD6fb004871176A2', }, staking_contracts: { - "Curve VSTFRAX-f": "0x127963A74c07f72D862F2Bdc225226c3251BD117", - "KyberSwap Elastic FRAX/USDC [Arbitrum]": "0xbAFA44EFE7901E04E39Dad13167D089C559c1138", - "Saddle L2D4 [Arbitrum]": "0xd1dF24e8D225b20F9c8f4912BE88cCCec93f36E5", - "Sentiment LFrax": "0xcdE7054e7a232938CdDe8BF40faf827e6f377f54", - "Olympus Pro FRAX Bond [Arbitrum]": "", + 'Arbidex FRAX/DAI+': '0x56328f7138C3A4ebD2Bb1D126d28f62FcD5bac5d', + 'Arbidex FRAX/frxETH': '0x436eE91dB228267c6a19b2A3F158fffCe5a4489c', + 'Arbidex FRAX/USDCe': '0x11205af33F2F7006bB932953b10Ab5EeD78105Ca', + 'Arbidex FRAX/USD+': '0xe876230251cc14Ec0027b2a4aFc46B4c262d13D0', + 'Arbidex FRAX/WETH': '0xf0677E33Fa38A023ec798F97D195d85d19823e7C', + 'Arbidex frxETH/WETH': '0xc74c0Fcb777521F3D8747f338a024e9F3fD91608', + 'Chronos sAMM-FRAX/MAI': '0x1371512f45d85e6247aBfA2926Ac5213324a6BEB', + 'Chronos sAMM-FRAX/USD+': '0xaF618E6F5EF781e3aCFe00708BD005E0cc9A2e6F', + 'Chronos sAMM-frxETH/sfrxETH': '0x548e0D4Fcb6b82a025E6770066b4127C5FCcBF07', + 'Chronos sAMM-frxETH/WETH': '0x9A028F3Dd7067479b51ee89CDb0Db594744ebfAd', + 'Convex USD+FRAXBP': '0x56390acF12bce9675ab3922060D8d955149BE286', + 'Curve VSTFRAX-f': '0x127963A74c07f72D862F2Bdc225226c3251BD117', + 'KyberSwap Elastic FRAX/USDC [Arbitrum]': '0xbAFA44EFE7901E04E39Dad13167D089C559c1138', + 'dForce FRAX Lending [Arbitrum]': '0xb3ab7148cCCAf66686AD6C1bE24D83e58E6a504e', + 'Hundred FRAX Lending [Arbitrum]': '0xd7f3Bf2085AD32ff95E1bCC408d37F10f6949270', + 'Olympus Pro FRAX Bond [Arbitrum]': '', + 'Market.xyz FRAX Lending': '', + 'Ramses crAMM-FRAX/USDC': '0x22B6C54dC1cCD6CDF53723BEc88327c908258367', + 'Ramses crAMM-FRAX/DOLA': '0xF8719BC4a1A81969F00233a8D9409755d4366d28', + 'Ramses crAMM-FRAX/MAI': '0x385E1c3f90C52f5253EaBb015576E95a4886E552', + 'Ramses vrAMM-FRAX/FXS': '0xdf725A7315d3d246a39C8887870f6cb0Fe73e36d', + 'Ramses vrAMM-FRAX/agEUR': '0x0A923435Eb4C3FC740bbA0c000F16Cb1F6cd7Afb', + 'Ramses crAMM-frxETH/sfrxETH': '0x11C1060e12F3Ec480D47AD867583353496a1B0b8', + 'Ramses crAMM-frxETH/WETH': '0x148Ca200d452AD9F310501ca3fd5C3bD4a5aBe81', + 'Saddle ArbUSD V2 [Arbitrum]': '0x6e1af6FB2B4006603c65dD8FC7796Ccff09c86a1', + 'Saddle L2D4 [Arbitrum]': '0xd1dF24e8D225b20F9c8f4912BE88cCCec93f36E5', // Arbitrum + 'Saddle FRAX/USDC BP [Arbitrum]': '0xBBcaeA4e732173C0De28397421c17A595372C9CF', + 'Saddle FRAXBP/USDs [Arbitrum]': '0x289532cA1DccE36D05e19Af468EC46fc9CB1390E', + 'Saddle FRAXBP/USDT [Arbitrum]': '0xb306b7E9D895748A2779586C83112035D8223C7F', + 'Saddle FRAXBP/USX [Arbitrum]': '0x0A18D5679C5c8b56Da0D87E308DB9EE2db701BaC', + 'Sentiment LFrax': '0xcdE7054e7a232938CdDe8BF40faf827e6f377f54', + 'Stargate Bridge Liquidity FRAX [Arbitrum]': '0xeA8DfEE1898a7e0a59f7527F076106d7e44c2176', }, }, aurora: { @@ -3393,6 +3516,7 @@ export const CONTRACT_ADDRESSES = { FPIS: "0xee7cBa1403A2B0C53181B3980D52f9C5EdEEcC9e", frxETH: '0x2018B0CA0eDcE80800851958bD094dD4a8DA1fc4', sfrxETH: '0x6D3B126ae28f3E39894070148B377624F6Ab4a45', + sFRAX: '0x3405E88af759992937b84E58F2Fe691EF0EeA320', }, bridge_tokens: { anyFRAX: "0xDC42728B0eA910349ed3c6e1c9Dc06b5FB591f98", // Swapout @@ -3423,6 +3547,7 @@ export const CONTRACT_ADDRESSES = { fraxferry_v2__ethereum_avalanche__FPIS__AVAX_SIDE: "0xb3F6A473b875d74b0E2a86ba9F8a2A935241BaE7", fraxferry_v2__ethereum_avalanche__frxETH__AVAX_SIDE: "0x8f4312DAB71BaAaF64917556333B004db5f3D7DA", fraxferry_v2__ethereum_avalanche__sfrxETH__AVAX_SIDE: "0xaf45B8fbde0e0aCbeB5Acf2faE28A34701b1eF01", + fraxferry_v2__ethereum_avalanche__sFRAX__AVAX_SIDE: "0x0304A365C0fbb4b1Ad423887861b9b69a5f0c00E", captain: "0xBB437059584e30598b3AF0154472E47E6e2a45B9", first_officer: "0xBB437059584e30598b3AF0154472E47E6e2a45B9", crewmember: "0xBB437059584e30598b3AF0154472E47E6e2a45B9", @@ -3597,6 +3722,7 @@ export const CONTRACT_ADDRESSES = { FPIS: "0xD1738eB733A636d1b8665f48bC8a24dA889c2562", frxETH: '0x64048A7eEcF3a2F1BA9e144aAc3D7dB6e58F555e', sfrxETH: '0x3Cd55356433C89E50DC51aB07EE0fa0A95623D53', + sFRAX: '0xa63f56985F9C7F3bc9fFc5685535649e0C1a55f3', }, bridge_tokens: { anyFRAX_V5: "0xdd03dbed9abdb125f1bdd465caadbefdff4f7524", // Router anyFRAX @@ -3631,6 +3757,7 @@ export const CONTRACT_ADDRESSES = { fraxferry_v2__ethereum_bsc__FPIS__BSC_SIDE: "0x0248940C22D2586450dd5145E81B7Fc0CA4Dd4a2", fraxferry_v2__ethereum_bsc__frxETH__BSC_SIDE: "0xB7C974530e59017DF7FA06b1EBD9e8a1E9aceC29", fraxferry_v2__ethereum_bsc__sfrxETH__BSC_SIDE: "0x612015939f70C87E2041cc5daD909101c1A2383F", + fraxferry_v2__ethereum_bsc__sFRAX__BSC_SIDE: "0x5E8422345238F34275888049021821E8E08CAa1f", captain: "0xBB437059584e30598b3AF0154472E47E6e2a45B9", first_officer: "0xBB437059584e30598b3AF0154472E47E6e2a45B9", crewmember: "0xBB437059584e30598b3AF0154472E47E6e2a45B9", @@ -3777,8 +3904,8 @@ export const CONTRACT_ADDRESSES = { canonicals: { FRAX: "0xdc301622e621166BD8E82f2cA0A26c13Ad0BE355", FXS: "0x7d016eec9c25232b01F23EF992D98ca97fc2AF5a", - FPI: "0xAb069E73f1AA50c37A7171D16dCc3614c705101B", // FOR TESTING - FPIS: "0x3bb6B72dC07D7bFDa981F70C631482e9517CF6EE", // FOR TESTING + FPI: "0xAb069E73f1AA50c37A7171D16dCc3614c705101B", + FPIS: "0x3bb6B72dC07D7bFDa981F70C631482e9517CF6EE", frxETH: "0x9E73F99EE061C8807F69f9c6CCc44ea3d8c373ee", sfrxETH: "0xb90CCD563918fF900928dc529aA01046795ccb4A" }, @@ -3908,6 +4035,107 @@ export const CONTRACT_ADDRESSES = { "veDAO FRAX": "0xE04C26444d37fE103B9cc8033c99b09D47056f51", }, }, + fraxchain_devnet_l1: { + chain_id: 2520, + main: { + FRAX: "0xac3E018457B222d93114458476f3E3416Abbe38F", + FXS: "0xbAFA44EFE7901E04E39Dad13167D089C559c1138", + }, + canonicals: { + FRAX: "0xac3E018457B222d93114458476f3E3416Abbe38F", + FXS: "0xbAFA44EFE7901E04E39Dad13167D089C559c1138", + FPI: "0x67218f66a84809201CfBa5c8b46dBd3aB95A42da", + FPIS: "0xC0497C072d3015fd7D45893157bCDCC1BcfEb6b5", + frxETH: "0xB1C4e5a15544f005166880749C46D35a00916462", + sfrxETH: "0x56390acF12bce9675ab3922060D8d955149BE286" + }, + bridge_tokens: {}, + collaterals: { + USDC: '', + }, + system: { + FraxchainPortal: "0x421Efd53FA0d90687db5ef370D5DCD7f89CbD9dE", + FraxchainFrxEthMinter: "0x80f1C4F5CD94D49e98D0a975690796f1E8C0379e" + }, + bridges: {}, + bridge_backers: {}, + oracles: { + single_assets: { + FRAX: '', + FXS: '', + USDC: '', + }, + cross_chain_oracle: '', + }, + oracles_other: { + combo_oracle: '', + combo_oracle_univ2_univ3: '', + }, + multisigs: { + Comptrollers: '', + }, + uniswap: { + v2_router: '', + v3_factory: '0x0000000000000000000000000000000000000000', + v3_nft_manager: '0x0000000000000000000000000000000000000000', + v3_router: '0x0000000000000000000000000000000000000000', + }, + amos: {}, + reward_tokens: { + + }, + vamms: {}, + pair_tokens: {}, + staking_contracts: {}, + }, + fraxchain_devnet_l2: { + chain_id: 2521, + main: { + FRAX: '0x2Dd1B4D4548aCCeA497050619965f91f78b3b532', + FXS: '0xD1738eB733A636d1b8665f48bC8a24dA889c2562', + }, + canonicals: { + FRAX: '0x2Dd1B4D4548aCCeA497050619965f91f78b3b532', + FXS: '0xD1738eB733A636d1b8665f48bC8a24dA889c2562', + FPI: "0x1B01514A2B3CdEf16fD3c680a818A0Ab97Da8a09", + FPIS: "0x3405E88af759992937b84E58F2Fe691EF0EeA320", + wfrxETH: "" + }, + bridge_tokens: {}, + collaterals: { + USDC: '', + }, + bridges: {}, + bridge_backers: {}, + oracles: { + single_assets: { + FRAX: '', + FXS: '', + USDC: '', + }, + cross_chain_oracle: '', + }, + oracles_other: { + combo_oracle: '', + combo_oracle_univ2_univ3: '', + }, + multisigs: { + Comptrollers: '', + }, + uniswap: { + v2_router: '', + v3_factory: '0x0000000000000000000000000000000000000000', + v3_nft_manager: '0x0000000000000000000000000000000000000000', + v3_router: '0x0000000000000000000000000000000000000000', + }, + amos: {}, + reward_tokens: { + + }, + vamms: {}, + pair_tokens: {}, + staking_contracts: {}, + }, fuse: { chain_id: 122, main: { @@ -4238,6 +4466,7 @@ export const CONTRACT_ADDRESSES = { FPIS: "0x8368Dca5CE2a4Db530c0F6e535d90B6826428Dee", frxETH: '0x6806411765Af15Bddd26f8f544A34cC40cb9838B', sfrxETH: '0x484c2D6e3cDd945a8B2DF735e079178C1036578c', + sFRAX: '0x2Dd1B4D4548aCCeA497050619965f91f78b3b532', }, bridge_tokens: { celrFRAX: "0xea129aE043C4cB73DcB241AAA074F9E667641BA0", @@ -4263,7 +4492,8 @@ export const CONTRACT_ADDRESSES = { fraxferry_v2__ethereum_optimism__FPI__OPTI_SIDE: "0x053F082f3bC0C48B8409970c017b4F2a6f673e16", fraxferry_v2__ethereum_optimism__FPIS__OPTI_SIDE: "0xB84E29042Bfb489439949a79aed8a0e156169Ae5", fraxferry_v2__ethereum_optimism__frxETH__OPTI_SIDE: "0xA4EFC2d768C9b9b0f97DD91a1555B345f69b39C0", - fraxferry_v2__ethereum_optimism__sfrxETH__OPTI_SIDE: "0x59b99CF08C01a6ADa0e0D819520719CA41B35c7C", + fraxferry_v2__ethereum_optimism__sfrxETH__OPTI_SIDE: "0x59b99CF08C01a6ADa0e0D819520719CA41B35c7C", + fraxferry_v2__ethereum_optimism__sFRAX__OPTI_SIDE: "0xD1738eB733A636d1b8665f48bC8a24dA889c2562", captain: "0xBB437059584e30598b3AF0154472E47E6e2a45B9", first_officer: "0xBB437059584e30598b3AF0154472E47E6e2a45B9", crewmember: "0xBB437059584e30598b3AF0154472E47E6e2a45B9", @@ -4343,8 +4573,8 @@ export const CONTRACT_ADDRESSES = { canonicals: { FRAX: "0x45c32fA6DF82ead1e2EF74d17b76547EDdFaFF89", FXS: "0x1a3acf6D19267E2d3e7f898f42803e90C9219062", - FPI: "0x411C9cDd0fBBa243488988f2A3005D6fFf126661", // FOR TESTING - FPIS: "0x84F6FCeb8E4A3EB87768C4a111273C17b54D4411", // FOR TESTING + FPI: "0x411C9cDd0fBBa243488988f2A3005D6fFf126661", + FPIS: "0x84F6FCeb8E4A3EB87768C4a111273C17b54D4411", frxETH: '0xEe327F889d5947c1dc1934Bb208a1E792F953E96', sfrxETH: '0x6d1FdBB266fCc09A16a22016369210A15bb95761', }, @@ -4480,6 +4710,7 @@ export const CONTRACT_ADDRESSES = { FPIS: '0xdE7df9036801676aF0cB73661d93a098c0085fba', frxETH: '0xCf7eceE185f19e2E970a301eE37F93536ed66179', sfrxETH: '0x7c2aF1Fb79D0b1c67d4eb802d44C673D0A1D2C04', + sFRAX: '0x2C37fb628b35dfdFD515d41B0cAAe11B542773C3', }, bridge_tokens: {}, collaterals: { @@ -4493,7 +4724,8 @@ export const CONTRACT_ADDRESSES = { fraxferry_v2__ethereum_polygon_zkevm__FPI__POLYZKEVM_SIDE: "0xA31001fbe938C520C27204b984817d998bAeA885", fraxferry_v2__ethereum_polygon_zkevm__FPIS__POLYZKEVM_SIDE: "0x3d1bc21F8991091538FfEf535Fe96A449794461C", fraxferry_v2__ethereum_polygon_zkevm__frxETH__POLYZKEVM_SIDE: "0xA711F85672899331900359e5b89848A30BeEBDBe", - fraxferry_v2__ethereum_polygon_zkevm__sfrxETH__POLYZKEVM_SIDE: "0x4DB406906835ca0B28bFbef344c7d2C707BC4947", + fraxferry_v2__ethereum_polygon_zkevm__sfrxETH__POLYZKEVM_SIDE: "0x4DB406906835ca0B28bFbef344c7d2C707BC4947", + fraxferry_v2__ethereum_polygon_zkevm__sFRAX__POLYZKEVM_SIDE: "0xE30521fe7f3bEB6Ad556887b50739d6C7CA667E6", captain: "0xBB437059584e30598b3AF0154472E47E6e2a45B9", first_officer: "0xBB437059584e30598b3AF0154472E47E6e2a45B9", crewmember: "0xBB437059584e30598b3AF0154472E47E6e2a45B9", From bc44682804b1535d7652496dfa699ad262a39ec8 Mon Sep 17 00:00:00 2001 From: travis Date: Mon, 11 Dec 2023 10:41:55 -0800 Subject: [PATCH 30/37] periodic update --- ...NoLending.sol => I2poolTokenNoLending.sol} | 0 .../Staking/FraxCrossChainFarmV4_ERC20.sol | 82 +++++++---- .../Staking/FraxUnifiedFarm_ERC20.sol | 10 +- .../FraxUnifiedFarm_KyberSwapElastic.sol | 5 +- .../Staking/FraxUnifiedFarm_PosRebase.sol | 10 +- .../Staking/FraxUnifiedFarm_UniV3.sol | 5 +- ...DPlusFRAXBP.sol => FraxCCFarmV4_cvxLP.sol} | 2 +- .../Frax_Comptroller_Routine/Sunday_Part_1.js | 132 +++++++++++------- .../Sunday_Part_1.json | 2 +- src/hardhat/hardhat.config.js | 2 +- src/types/constants.ts | 15 ++ 11 files changed, 176 insertions(+), 89 deletions(-) rename src/hardhat/contracts/Misc_AMOs/curve/{I2poolNoLending.sol => I2poolTokenNoLending.sol} (100%) rename src/hardhat/contracts/Staking/Variants/{FraxCCFarmV4_cvxUSDPlusFRAXBP.sol => FraxCCFarmV4_cvxLP.sol} (87%) diff --git a/src/hardhat/contracts/Misc_AMOs/curve/I2poolNoLending.sol b/src/hardhat/contracts/Misc_AMOs/curve/I2poolTokenNoLending.sol similarity index 100% rename from src/hardhat/contracts/Misc_AMOs/curve/I2poolNoLending.sol rename to src/hardhat/contracts/Misc_AMOs/curve/I2poolTokenNoLending.sol diff --git a/src/hardhat/contracts/Staking/FraxCrossChainFarmV4_ERC20.sol b/src/hardhat/contracts/Staking/FraxCrossChainFarmV4_ERC20.sol index 6e4fb9fb..3f5f0622 100755 --- a/src/hardhat/contracts/Staking/FraxCrossChainFarmV4_ERC20.sol +++ b/src/hardhat/contracts/Staking/FraxCrossChainFarmV4_ERC20.sol @@ -46,11 +46,12 @@ import "../ERC20/SafeERC20.sol"; // import '../Misc_AMOs/balancer/IBalancerChildLiquidityGauge.sol'; // Balancer frxETH-bb-a-WETH Gauge // import '../Misc_AMOs/balancer/IL2BalancerPseudoMinter.sol'; // Balancer frxETH-bb-a-WETH Gauge // import '../Misc_AMOs/balancer/IStablePool.sol'; // Balancer frxETH-bb-a-WETH Gauge -// import "../Oracle/AggregatorV3Interface.sol"; // Balancer frxETH-bb-a-WETH Gauge +import "../Oracle/AggregatorV3Interface.sol"; // Balancer frxETH-bb-a-WETH Gauge and Convex frxETH/XXXETH import '../Misc_AMOs/convex/IConvexCvxLPRewardPoolCombo.sol'; // Convex cvxLP/RewardPool Combo import '../Misc_AMOs/curve/ICurveChildLiquidityGauge.sol'; // Convex cvxLP/RewardPool Combo // import '../Misc_AMOs/curve/I2pool.sol'; // Curve 2-token -import '../Misc_AMOs/curve/I3pool.sol'; // Curve 3-token +import '../Misc_AMOs/curve/I2poolTokenNoLending.sol'; // Curve 2-token (No Lending) +// import '../Misc_AMOs/curve/I3pool.sol'; // Curve 3-token // import '../Misc_AMOs/curve/I3poolAndToken.sol'; // Curve 3-token with pool // import '../Misc_AMOs/kyberswap/elastic/IKSElasticLMV2.sol'; // KyberSwap Elastic // import '../Misc_AMOs/kyberswap/elastic/IKyberSwapFarmingToken.sol'; // KyberSwap Elastic @@ -109,21 +110,21 @@ contract FraxCrossChainFarmV4_ERC20 is Owned, ReentrancyGuard { // // <>KYBERSWAP<>KYBERSWAP<>KYBERSWAP<>KYBERSWAP<>KYBERSWAP<>KYBERSWAP<>KYBERSWAP<> - // Balancer frxETH-bb-a-WETH Gauge + // Balancer frxETH-bb-a-WETH Gauge or Convex frxETH/XXXETH // IBalancerChildLiquidityGauge public stakingToken; // Balancer frxETH-bb-a-WETH Gauge - // AggregatorV3Interface internal priceFeedETHUSD = AggregatorV3Interface(0xF9680D99D6C9589e2a93a78A04A279e509205945); // For Balancer frxETH-bb-a-WETH Gauge - // function setETHUSDOracle(address _eth_usd_oracle_address) public onlyByOwnGov { - // require(_eth_usd_oracle_address != address(0), "Zero address detected"); + AggregatorV3Interface internal priceFeedETHUSD = AggregatorV3Interface(0x639Fe6ab55C921f74e7fac1ee960C0B6293ba612); // For Balancer frxETH-bb-a-WETH Gauge + function setETHUSDOracle(address _eth_usd_oracle_address) public onlyByOwnGov { + require(_eth_usd_oracle_address != address(0), "Zero address detected"); - // priceFeedETHUSD = AggregatorV3Interface(_eth_usd_oracle_address); - // } - // function getLatestETHPriceE8() public view returns (int) { - // // Returns in E8 - // (uint80 roundID, int price, , uint256 updatedAt, uint80 answeredInRound) = priceFeedETHUSD.latestRoundData(); - // require(price >= 0 && updatedAt!= 0 && answeredInRound >= roundID, "Invalid chainlink price"); + priceFeedETHUSD = AggregatorV3Interface(_eth_usd_oracle_address); + } + function getLatestETHPriceE8() public view returns (int) { + // Returns in E8 + (uint80 roundID, int price, , uint256 updatedAt, uint80 answeredInRound) = priceFeedETHUSD.latestRoundData(); + require(price >= 0 && updatedAt!= 0 && answeredInRound >= roundID, "Invalid chainlink price"); - // return price; - // } + return price; + } /// @notice The token being staked // I2pool public stakingToken; // Curve 2-token @@ -451,28 +452,47 @@ contract FraxCrossChainFarmV4_ERC20 is Owned, ReentrancyGuard { // Convex cvxLP/RewardPool Combo // ============================================ + // { + // // Half of the LP is FRAXBP. Half of that should be FRAX. + // // Using 0.25 * virtual price for gas savings + // ICurveChildLiquidityGauge gauge = ICurveChildLiquidityGauge(stakingToken.curveGauge()); + // I3pool pool = I3pool(gauge.lp_token()); + // frax_per_lp_token = pool.get_virtual_price() / 4; + // } + + // Convex cvxfrxETH/XXXETH + // ============================================ { - // Half of the LP is FRAXBP. Half of that should be FRAX. - // Using 0.25 * virtual price for gas savings + // Get the pool ICurveChildLiquidityGauge gauge = ICurveChildLiquidityGauge(stakingToken.curveGauge()); - I3pool pool = I3pool(gauge.lp_token()); - frax_per_lp_token = pool.get_virtual_price() / 4; + I2poolTokenNoLending pool = I2poolTokenNoLending(gauge.lp_token()); + + // Assume frxETH = ETH for pricing purposes + // Get the USD value of the frxETH per LP token + uint256 frxETH_in_pool = IERC20(0x178412e79c25968a32e89b11f63B33F733770c2A).balanceOf(address(pool)); + uint256 frxETH_usd_val_per_lp_e8 = (frxETH_in_pool * uint256(getLatestETHPriceE8())) / pool.totalSupply(); + frax_per_lp_token = frxETH_usd_val_per_lp_e8 * (1e10); // We use USD as "Frax" here } - // Curve 2-token + // Curve 2-token (No Lending) // ============================================ // { - // address coin0 = stakingToken.coins(0); + // // Get the pool + // ICurveChildLiquidityGauge gauge = ICurveChildLiquidityGauge(stakingToken.curveGauge()); + // I2poolTokenNoLending pool = I2poolTokenNoLending(gauge.lp_token()); + // address coin0 = pool.coins(0); // uint256 total_frax_reserves; + // uint256[2] memory _balanceResults = pool.get_balances(); // if (coin0 == fraxAddress) { - // total_frax_reserves = stakingToken.balances(0); + // total_frax_reserves = _balanceResults[0]; // } // else { - // total_frax_reserves = stakingToken.balances(1); + // total_frax_reserves = _balanceResults[1]; // } - // frax_per_lp_token = total_frax_reserves.mul(1e18).div(stakingToken.totalSupply()); + // frax_per_lp_token = total_frax_reserves.mul(1e18).div(pool.totalSupply()); // } + // Curve 3-token // ============================================ // { @@ -809,16 +829,21 @@ contract FraxCrossChainFarmV4_ERC20 is Owned, ReentrancyGuard { } } - /// @notice Add additional LPs to an existing locked stake + /// @notice Add additional LPs to an existing locked stake. Also claims rewards at the old balance first /// @param kek_id The kek_id of the stake /// @param addl_liq The amount of additional liquidity to add - function lockAdditional(bytes32 kek_id, uint256 addl_liq) nonReentrant updateRewardAndBalance(msg.sender, true) public { + function lockAdditional(bytes32 kek_id, uint256 addl_liq) nonReentrant public { // Make sure staking isn't paused require(!stakingPaused, "Staking paused"); + + // Claim rewards at the old balance first + _getReward(msg.sender, msg.sender); // Get the stake and its index (LockedStake memory thisStake, uint256 theArrayIndex) = _getStake(msg.sender, kek_id); + // Claim rewards at the old rate first + // Calculate the new amount uint256 new_amt = thisStake.liquidity + addl_liq; @@ -847,12 +872,15 @@ contract FraxCrossChainFarmV4_ERC20 is Owned, ReentrancyGuard { emit LockedAdditional(msg.sender, kek_id, addl_liq); } - /// @notice Extends the lock of an existing stake + /// @notice Extends the lock of an existing stake. Also claims rewards at the old balance first /// @param kek_id The kek_id of the stake /// @param new_ending_ts The new ending timestamp you want to extend to - function lockLonger(bytes32 kek_id, uint256 new_ending_ts) nonReentrant updateRewardAndBalance(msg.sender, true) public { + function lockLonger(bytes32 kek_id, uint256 new_ending_ts) nonReentrant public { // Make sure staking isn't paused require(!stakingPaused, "Staking paused"); + + // Claim rewards at the old balance first + _getReward(msg.sender, msg.sender); // Get the stake and its index (LockedStake memory thisStake, uint256 theArrayIndex) = _getStake(msg.sender, kek_id); diff --git a/src/hardhat/contracts/Staking/FraxUnifiedFarm_ERC20.sol b/src/hardhat/contracts/Staking/FraxUnifiedFarm_ERC20.sol index c7511366..1c7fdd63 100755 --- a/src/hardhat/contracts/Staking/FraxUnifiedFarm_ERC20.sol +++ b/src/hardhat/contracts/Staking/FraxUnifiedFarm_ERC20.sol @@ -439,9 +439,12 @@ contract FraxUnifiedFarm_ERC20 is FraxUnifiedFarmTemplate { } // Add additional LPs to an existing locked stake - function lockAdditional(bytes32 kek_id, uint256 addl_liq) nonReentrant updateRewardAndBalanceMdf(msg.sender, true) public { + function lockAdditional(bytes32 kek_id, uint256 addl_liq) nonReentrant public { // Make sure staking isn't paused require(!stakingPaused, "Staking paused"); + + // Claim rewards at the old balance first + _getReward(msg.sender, msg.sender, true); // Get the stake and its index (LockedStake memory thisStake, uint256 theArrayIndex) = _getStake(msg.sender, kek_id); @@ -471,9 +474,12 @@ contract FraxUnifiedFarm_ERC20 is FraxUnifiedFarmTemplate { } // Extends the lock of an existing stake - function lockLonger(bytes32 kek_id, uint256 new_ending_ts) nonReentrant updateRewardAndBalanceMdf(msg.sender, true) public { + function lockLonger(bytes32 kek_id, uint256 new_ending_ts) nonReentrant public { // Make sure staking isn't paused require(!stakingPaused, "Staking paused"); + + // Claim rewards at the old balance first + _getReward(msg.sender, msg.sender, true); // Get the stake and its index (LockedStake memory thisStake, uint256 theArrayIndex) = _getStake(msg.sender, kek_id); diff --git a/src/hardhat/contracts/Staking/FraxUnifiedFarm_KyberSwapElastic.sol b/src/hardhat/contracts/Staking/FraxUnifiedFarm_KyberSwapElastic.sol index 692e9a48..8c7a35fd 100755 --- a/src/hardhat/contracts/Staking/FraxUnifiedFarm_KyberSwapElastic.sol +++ b/src/hardhat/contracts/Staking/FraxUnifiedFarm_KyberSwapElastic.sol @@ -301,10 +301,13 @@ contract FraxUnifiedFarm_KyberSwapElastic is FraxUnifiedFarmTemplate { uint256 token0_min_in, uint256 token1_min_in, bool use_balof_override // Use balanceOf Override - ) nonReentrant updateRewardAndBalanceMdf(msg.sender, true) public { + ) nonReentrant public { // Make sure staking isn't paused require(!stakingPaused, "Staking paused"); + // Claim rewards at the old balance first + _getReward(msg.sender, msg.sender, true); + // Get the stake and its index (LockedNFT memory thisNFT, uint256 theArrayIndex) = _getStake(msg.sender, token_id); diff --git a/src/hardhat/contracts/Staking/FraxUnifiedFarm_PosRebase.sol b/src/hardhat/contracts/Staking/FraxUnifiedFarm_PosRebase.sol index d8f6b3c5..01f91114 100755 --- a/src/hardhat/contracts/Staking/FraxUnifiedFarm_PosRebase.sol +++ b/src/hardhat/contracts/Staking/FraxUnifiedFarm_PosRebase.sol @@ -255,9 +255,12 @@ contract FraxUnifiedFarm_PosRebase is FraxUnifiedFarmTemplateClone { // Add additional LPs to an existing locked stake // REBASE: If you simply want to accrue interest, call this with addl_liq = 0 - function lockAdditional(bytes32 kek_id, uint256 addl_liq) nonReentrant updateRewardAndBalanceMdf(msg.sender, true) public { + function lockAdditional(bytes32 kek_id, uint256 addl_liq) nonReentrant public { // Make sure staking isn't paused require(!stakingPaused, "Staking paused"); + + // Claim rewards at the old balance first + _getReward(msg.sender, msg.sender, true); // Get the stake and its index (LockedStake memory thisStake, uint256 theArrayIndex) = _getStake(msg.sender, kek_id); @@ -301,9 +304,12 @@ contract FraxUnifiedFarm_PosRebase is FraxUnifiedFarmTemplateClone { } // Extends the lock of an existing stake - function lockLonger(bytes32 kek_id, uint256 new_ending_ts) nonReentrant updateRewardAndBalanceMdf(msg.sender, true) public { + function lockLonger(bytes32 kek_id, uint256 new_ending_ts) nonReentrant public { // Make sure staking isn't paused require(!stakingPaused, "Staking paused"); + + // Claim rewards at the old balance first + _getReward(msg.sender, msg.sender, true); // Get the stake and its index (LockedStake memory thisStake, uint256 theArrayIndex) = _getStake(msg.sender, kek_id); diff --git a/src/hardhat/contracts/Staking/FraxUnifiedFarm_UniV3.sol b/src/hardhat/contracts/Staking/FraxUnifiedFarm_UniV3.sol index 5842b489..ab66c5cd 100755 --- a/src/hardhat/contracts/Staking/FraxUnifiedFarm_UniV3.sol +++ b/src/hardhat/contracts/Staking/FraxUnifiedFarm_UniV3.sol @@ -339,7 +339,10 @@ contract FraxUnifiedFarm_UniV3 is FraxUnifiedFarmTemplate { uint256 token0_min_in, uint256 token1_min_in, bool use_balof_override // Use balanceOf Override - ) updateRewardAndBalanceMdf(msg.sender, true) public { + ) public { + // Claim rewards at the old balance first + _getReward(msg.sender, msg.sender, true); + // Get the stake and its index (LockedNFT memory thisNFT, uint256 theArrayIndex) = _getStake(msg.sender, token_id); diff --git a/src/hardhat/contracts/Staking/Variants/FraxCCFarmV4_cvxUSDPlusFRAXBP.sol b/src/hardhat/contracts/Staking/Variants/FraxCCFarmV4_cvxLP.sol similarity index 87% rename from src/hardhat/contracts/Staking/Variants/FraxCCFarmV4_cvxUSDPlusFRAXBP.sol rename to src/hardhat/contracts/Staking/Variants/FraxCCFarmV4_cvxLP.sol index 71ca0de4..839ce85a 100755 --- a/src/hardhat/contracts/Staking/Variants/FraxCCFarmV4_cvxUSDPlusFRAXBP.sol +++ b/src/hardhat/contracts/Staking/Variants/FraxCCFarmV4_cvxLP.sol @@ -3,7 +3,7 @@ pragma solidity >=0.8.0; import "../FraxCrossChainFarmV4_ERC20.sol"; -contract FraxCCFarmV4_cvxUSDPlusFRAXBP is FraxCrossChainFarmV4_ERC20 { +contract FraxCCFarmV4_cvxLP is FraxCrossChainFarmV4_ERC20 { string public farm_type = "FraxCCFarmV4_cvxLP"; constructor ( diff --git a/src/hardhat/gnosis-safe-scripts/Frax_Comptroller_Routine/Sunday_Part_1.js b/src/hardhat/gnosis-safe-scripts/Frax_Comptroller_Routine/Sunday_Part_1.js index 5c93df99..5b811c95 100644 --- a/src/hardhat/gnosis-safe-scripts/Frax_Comptroller_Routine/Sunday_Part_1.js +++ b/src/hardhat/gnosis-safe-scripts/Frax_Comptroller_Routine/Sunday_Part_1.js @@ -457,6 +457,28 @@ async function main() { } }); + // Convex Prisma + // ===================================== + batch_json.transactions.push({ + "to": "0x0c73f1cFd5C9dFc150C8707Aa47Acbd14F0BE108", + "value": "0", + "data": null, + "contractMethod": { + "inputs": [ + { + "internalType": "address", + "name": "_account", + "type": "address" + }, + ], + "name": "getReward", + "payable": false + }, + "contractInputsValues": { + "_account": "0xB1748C79709f4Ba2Dd82834B8c82D4a505003f27", + } + }); + // Relock expired locked CVX // ===================================== // Determine if you need to process expired locks @@ -496,59 +518,63 @@ async function main() { // ===================================== const frxETH = new ethers.Contract("0x5E8422345238F34275888049021821E8E08CAa1f", ERC20_ABI).connect(owner); const frxETH_balance = await frxETH.balanceOf("0xB1748C79709f4Ba2Dd82834B8c82D4a505003f27"); - batch_json.transactions.push({ - "to": "0x5E8422345238F34275888049021821E8E08CAa1f", - "value": "0", - "data": null, - "contractMethod": { - "inputs": [ - { - "internalType": "address", - "name": "spender", - "type": "address" - }, - { - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "name": "approve", - "payable": false - }, - "contractInputsValues": { - "spender": "0xac3E018457B222d93114458476f3E3416Abbe38F", - "amount": frxETH_balance.toString(), - } - }); - - // frxETH to sfrxETH deposit - // ===================================== - batch_json.transactions.push({ - "to": "0xac3E018457B222d93114458476f3E3416Abbe38F", - "value": "0", - "data": null, - "contractMethod": { - "inputs": [ - { - "internalType": "uint256", - "name": "assets", - "type": "uint256" - }, - { - "internalType": "address", - "name": "receiver", - "type": "address" - } - ], - "name": "deposit", - "payable": false - }, - "contractInputsValues": { - "assets": frxETH_balance.toString(), - "receiver": "0xB1748C79709f4Ba2Dd82834B8c82D4a505003f27", - } - }); + const frxETH_balance_dec = formatUnits(frxETH_balance, 18); + if (frxETH_balance_dec > 0) { + batch_json.transactions.push({ + "to": "0x5E8422345238F34275888049021821E8E08CAa1f", + "value": "0", + "data": null, + "contractMethod": { + "inputs": [ + { + "internalType": "address", + "name": "spender", + "type": "address" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "approve", + "payable": false + }, + "contractInputsValues": { + "spender": "0xac3E018457B222d93114458476f3E3416Abbe38F", + "amount": frxETH_balance.toString(), + } + }); + + // frxETH to sfrxETH deposit + // ===================================== + batch_json.transactions.push({ + "to": "0xac3E018457B222d93114458476f3E3416Abbe38F", + "value": "0", + "data": null, + "contractMethod": { + "inputs": [ + { + "internalType": "uint256", + "name": "assets", + "type": "uint256" + }, + { + "internalType": "address", + "name": "receiver", + "type": "address" + } + ], + "name": "deposit", + "payable": false + }, + "contractInputsValues": { + "assets": frxETH_balance.toString(), + "receiver": "0xB1748C79709f4Ba2Dd82834B8c82D4a505003f27", + } + }); + } + // =============================================================== diff --git a/src/hardhat/gnosis-safe-scripts/Frax_Comptroller_Routine/Sunday_Part_1.json b/src/hardhat/gnosis-safe-scripts/Frax_Comptroller_Routine/Sunday_Part_1.json index 29cd9efc..8b80de96 100644 --- a/src/hardhat/gnosis-safe-scripts/Frax_Comptroller_Routine/Sunday_Part_1.json +++ b/src/hardhat/gnosis-safe-scripts/Frax_Comptroller_Routine/Sunday_Part_1.json @@ -1 +1 @@ -{"version":"1.0","chainId":"1","createdAt":1699749047000,"meta":{"name":"Transactions Batch","description":"","txBuilderVersion":"1.14.1","createdFromSafeAddress":"0xB1748C79709f4Ba2Dd82834B8c82D4a505003f27","createdFromOwnerAddress":"","checksum":"0x5091574eb26ca27b1d347599b1c2b071d34bb6b73fc86044f9df115c23e49248"},"transactions":[{"to":"0x2AA609715488B09EFA93883759e8B089FBa11296","value":"0","data":null,"contractMethod":{"inputs":[],"name":"getReward","payable":false},"contractInputsValues":null},{"to":"0xD25D60aBafC220dd6F7BA37baD23e1105Db05a06","value":"0","data":null,"contractMethod":{"inputs":[],"name":"getReward","payable":false},"contractInputsValues":null},{"to":"0x3f29cB4111CbdA8081642DA1f75B3c12DECf2516","value":"0","data":null,"contractMethod":{"inputs":[{"internalType":"address[]","name":"rewardContracts","type":"address[]"},{"internalType":"address[]","name":"extraRewardContracts","type":"address[]"},{"internalType":"address[]","name":"tokenRewardContracts","type":"address[]"},{"internalType":"address[]","name":"tokenRewardTokens","type":"address[]"},{"internalType":"uint256","name":"depositCrvMaxAmount","type":"uint256"},{"internalType":"uint256","name":"minAmountOut","type":"uint256"},{"internalType":"uint256","name":"depositCvxMaxAmount","type":"uint256"},{"internalType":"uint256","name":"spendCvxAmount","type":"uint256"},{"internalType":"uint256","name":"options","type":"uint256"}],"name":"claimRewards","payable":false},"contractInputsValues":{"rewardContracts":"[\"0x7e880867363A7e321f5d260Cade2B0Bb2F717B02\", \"0x6991C1CD588c4e6f6f1de3A0bac5B8BbAb7aAF6d\", \"0x26598e3E511ADFadefD70ab2C3475Ff741741104\", \"0x47809eE386D1dEC29c0b13f21ba30F564517538B\", \"0x053e1dad223A206e6BCa24C77786bb69a10e427d\"]","extraRewardContracts":"[]","tokenRewardContracts":"[]","tokenRewardTokens":"[]","depositCrvMaxAmount":"0","minAmountOut":"0","depositCvxMaxAmount":"0","spendCvxAmount":"0","options":"0"}},{"to":"0xaa0C3f5F7DFD688C6E646F66CD2a6B66ACdbE434","value":"0","data":null,"contractMethod":{"inputs":[{"internalType":"address","name":"_account","type":"address"}],"name":"getReward","payable":false},"contractInputsValues":{"_account":"0xB1748C79709f4Ba2Dd82834B8c82D4a505003f27"}},{"to":"0x72a19342e8F1838460eBFCCEf09F6585e32db86E","value":"0","data":null,"contractMethod":{"inputs":[{"internalType":"address","name":"_account","type":"address"}],"name":"getReward","payable":false},"contractInputsValues":{"_account":"0xB1748C79709f4Ba2Dd82834B8c82D4a505003f27"}},{"to":"0x72a19342e8F1838460eBFCCEf09F6585e32db86E","value":"0","data":null,"contractMethod":{"inputs":[{"internalType":"bool","name":"_relock","type":"bool"}],"name":"processExpiredLocks","payable":false},"contractInputsValues":{"_relock":true}},{"to":"0x5E8422345238F34275888049021821E8E08CAa1f","value":"0","data":null,"contractMethod":{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","payable":false},"contractInputsValues":{"spender":"0xac3E018457B222d93114458476f3E3416Abbe38F","amount":"15445600000000000000"}},{"to":"0xac3E018457B222d93114458476f3E3416Abbe38F","value":"0","data":null,"contractMethod":{"inputs":[{"internalType":"uint256","name":"assets","type":"uint256"},{"internalType":"address","name":"receiver","type":"address"}],"name":"deposit","payable":false},"contractInputsValues":{"assets":"15445600000000000000","receiver":"0xB1748C79709f4Ba2Dd82834B8c82D4a505003f27"}},{"to":"0x358fE82370a1B9aDaE2E3ad69D6cF9e503c96018","value":"0","data":null,"contractMethod":{"inputs":[{"internalType":"address","name":"gauge_addr","type":"address"}],"name":"mint","payable":false},"contractInputsValues":{"gauge_addr":"0xB2Ac3382dA625eb41Fc803b57743f941a484e2a6"}},{"to":"0x3814307b86b54b1d8e7B2Ac34662De9125F8f4E6","value":"0","data":null,"contractMethod":{"inputs":[],"name":"collectFees","payable":false},"contractInputsValues":null},{"to":"0xD533a949740bb3306d119CC777fa900bA034cd52","value":"0","data":null,"contractMethod":{"inputs":[{"name":"_to","type":"address"},{"name":"_value","type":"uint256"}],"name":"transfer","payable":false},"contractInputsValues":{"_to":"0x847FA1A5337C7f24D7066E467F2e2A0f969Ca79F","_value":"29422432791099899861950"}},{"to":"0x847FA1A5337C7f24D7066E467F2e2A0f969Ca79F","value":"0","data":null,"contractMethod":{"inputs":[{"internalType":"uint256","name":"_value","type":"uint256"}],"name":"increaseAmount","payable":false},"contractInputsValues":{"_value":"29422432791099899861950"}},{"to":"0x72a19342e8F1838460eBFCCEf09F6585e32db86E","value":"0","data":null,"contractMethod":{"inputs":[{"internalType":"address","name":"_account","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"},{"internalType":"uint256","name":"_spendRatio","type":"uint256"}],"name":"lock","payable":false},"contractInputsValues":{"_account":"0xB1748C79709f4Ba2Dd82834B8c82D4a505003f27","_amount":"795200886245943239512","_spendRatio":"0"}}]} \ No newline at end of file +{"version":"1.0","chainId":"1","createdAt":1702150175000,"meta":{"name":"Transactions Batch","description":"","txBuilderVersion":"1.14.1","createdFromSafeAddress":"0xB1748C79709f4Ba2Dd82834B8c82D4a505003f27","createdFromOwnerAddress":"","checksum":"0x4ef80fa7ecc6071c138bf5adce7eed174981b8005661158684fc96916137b3f9"},"transactions":[{"to":"0x2AA609715488B09EFA93883759e8B089FBa11296","value":"0","data":null,"contractMethod":{"inputs":[],"name":"getReward","payable":false},"contractInputsValues":null},{"to":"0xD25D60aBafC220dd6F7BA37baD23e1105Db05a06","value":"0","data":null,"contractMethod":{"inputs":[],"name":"getReward","payable":false},"contractInputsValues":null},{"to":"0x3f29cB4111CbdA8081642DA1f75B3c12DECf2516","value":"0","data":null,"contractMethod":{"inputs":[{"internalType":"address[]","name":"rewardContracts","type":"address[]"},{"internalType":"address[]","name":"extraRewardContracts","type":"address[]"},{"internalType":"address[]","name":"tokenRewardContracts","type":"address[]"},{"internalType":"address[]","name":"tokenRewardTokens","type":"address[]"},{"internalType":"uint256","name":"depositCrvMaxAmount","type":"uint256"},{"internalType":"uint256","name":"minAmountOut","type":"uint256"},{"internalType":"uint256","name":"depositCvxMaxAmount","type":"uint256"},{"internalType":"uint256","name":"spendCvxAmount","type":"uint256"},{"internalType":"uint256","name":"options","type":"uint256"}],"name":"claimRewards","payable":false},"contractInputsValues":{"rewardContracts":"[\"0x7e880867363A7e321f5d260Cade2B0Bb2F717B02\", \"0x6991C1CD588c4e6f6f1de3A0bac5B8BbAb7aAF6d\", \"0x26598e3E511ADFadefD70ab2C3475Ff741741104\", \"0x47809eE386D1dEC29c0b13f21ba30F564517538B\", \"0x053e1dad223A206e6BCa24C77786bb69a10e427d\"]","extraRewardContracts":"[]","tokenRewardContracts":"[]","tokenRewardTokens":"[]","depositCrvMaxAmount":"0","minAmountOut":"0","depositCvxMaxAmount":"0","spendCvxAmount":"0","options":"0"}},{"to":"0xaa0C3f5F7DFD688C6E646F66CD2a6B66ACdbE434","value":"0","data":null,"contractMethod":{"inputs":[{"internalType":"address","name":"_account","type":"address"}],"name":"getReward","payable":false},"contractInputsValues":{"_account":"0xB1748C79709f4Ba2Dd82834B8c82D4a505003f27"}},{"to":"0x72a19342e8F1838460eBFCCEf09F6585e32db86E","value":"0","data":null,"contractMethod":{"inputs":[{"internalType":"address","name":"_account","type":"address"}],"name":"getReward","payable":false},"contractInputsValues":{"_account":"0xB1748C79709f4Ba2Dd82834B8c82D4a505003f27"}},{"to":"0x0c73f1cFd5C9dFc150C8707Aa47Acbd14F0BE108","value":"0","data":null,"contractMethod":{"inputs":[{"internalType":"address","name":"_account","type":"address"}],"name":"getReward","payable":false},"contractInputsValues":{"_account":"0xB1748C79709f4Ba2Dd82834B8c82D4a505003f27"}},{"to":"0x72a19342e8F1838460eBFCCEf09F6585e32db86E","value":"0","data":null,"contractMethod":{"inputs":[{"internalType":"bool","name":"_relock","type":"bool"}],"name":"processExpiredLocks","payable":false},"contractInputsValues":{"_relock":true}},{"to":"0x358fE82370a1B9aDaE2E3ad69D6cF9e503c96018","value":"0","data":null,"contractMethod":{"inputs":[{"internalType":"address","name":"gauge_addr","type":"address"}],"name":"mint","payable":false},"contractInputsValues":{"gauge_addr":"0xB2Ac3382dA625eb41Fc803b57743f941a484e2a6"}},{"to":"0x3814307b86b54b1d8e7B2Ac34662De9125F8f4E6","value":"0","data":null,"contractMethod":{"inputs":[],"name":"collectFees","payable":false},"contractInputsValues":null},{"to":"0xD533a949740bb3306d119CC777fa900bA034cd52","value":"0","data":null,"contractMethod":{"inputs":[{"name":"_to","type":"address"},{"name":"_value","type":"uint256"}],"name":"transfer","payable":false},"contractInputsValues":{"_to":"0x847FA1A5337C7f24D7066E467F2e2A0f969Ca79F","_value":"8472890082187180756548"}},{"to":"0x847FA1A5337C7f24D7066E467F2e2A0f969Ca79F","value":"0","data":null,"contractMethod":{"inputs":[{"internalType":"uint256","name":"_value","type":"uint256"}],"name":"increaseAmount","payable":false},"contractInputsValues":{"_value":"8472890082187180756548"}},{"to":"0x72a19342e8F1838460eBFCCEf09F6585e32db86E","value":"0","data":null,"contractMethod":{"inputs":[{"internalType":"address","name":"_account","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"},{"internalType":"uint256","name":"_spendRatio","type":"uint256"}],"name":"lock","payable":false},"contractInputsValues":{"_account":"0xB1748C79709f4Ba2Dd82834B8c82D4a505003f27","_amount":"203552914887379717875","_spendRatio":"0"}}]} \ No newline at end of file diff --git a/src/hardhat/hardhat.config.js b/src/hardhat/hardhat.config.js index c3571c00..82036f4b 100644 --- a/src/hardhat/hardhat.config.js +++ b/src/hardhat/hardhat.config.js @@ -125,7 +125,7 @@ module.exports = { }, chainId: 1, gas: "auto", - gasPrice: 35000000000, // 35 Gwei + gasPrice: 50000000000, // 50 Gwei gasMultiplier: 1.2, }, evmos: { diff --git a/src/types/constants.ts b/src/types/constants.ts index 58b9df15..0d29da24 100755 --- a/src/types/constants.ts +++ b/src/types/constants.ts @@ -3204,6 +3204,8 @@ export const CONTRACT_ADDRESSES = { }, middleman_gauges: { "Balancer frxETH-bb-a-WETH Gauge": "0xE3f4e2b79f1a8bf3b14d9100323Fca24D923f796", + "Convex FRAXBP [Arbitrum]": "0x636A9d7686bFA0a2ddd93b37A1E33bCdE6C31e8D", + "Convex frxETH/WETH [Arbitrum]": "0x5608051D98377419d7D861531728DFB869dDc054", "Convex USD+FRAXBP": "0x840f20ffED887c61435E81fd1231CB923df39d3d", "Curve VSTFRAX-f": "0x127963A74c07f72D862F2Bdc225226c3251BD117", // Arbitrum "KyberSwap Elastic FRAX/USDC [Arbitrum]": "0x0884c9Bb52348fa76d4e1c6Ea042A2EaF0b72c6C", // Arbitrum @@ -3322,10 +3324,16 @@ export const CONTRACT_ADDRESSES = { }, bearer_tokens: { curve4pool: '0x1C5ffa4FB4907B681c61B8c82b28C4672ceb1974', + cvxFRAXBP: '0x93729702Bf9E1687Ae2124e191B8fFbcC0C8A0B0', + cvxFRAXBP_Rewarder: '0x93729702Bf9E1687Ae2124e191B8fFbcC0C8A0B0', + cvxfrxETHWETH: '0xd2D8BEB901f90163bE4667A85cDDEbB7177eb3E3', + cvxfrxETHWETH_Rewarder: '0xd2D8BEB901f90163bE4667A85cDDEbB7177eb3E3', cvxUSDPlusFRAXBP: '0x11F2217fa1D5c44Eae310b9b985E2964FC47D8f9', cvxUSDPlusFRAXBP_Rewarder: '0x11F2217fa1D5c44Eae310b9b985E2964FC47D8f9', FRAX2pool: '0xf07d553B195080F84F582e88ecdD54bAa122b279', FRAXBP: '0xC9B8a3FDECB9D5b218d02555a8Baf332E5B740d5', // L2 Curve LP Token and Pool are same contract + FRAXBP_Gauge: '0x95285ea6ff14f80a2fd3989a6bab993bd6b5fa13', + FRAXBP_Pool: '0xc9b8a3fdecb9d5b218d02555a8baf332e5b740d5', hFRAX: '0xb1c4426C86082D91a6c097fC588E5D5d8dD1f5a8', LFrax: "0x2E9963ae673A885b6bfeDa2f80132CE28b784C40", // Sentiment saddleArbUSDv2: '0x0a20c2FFa10cD43F67D06170422505b7D6fC0953', @@ -3341,6 +3349,9 @@ export const CONTRACT_ADDRESSES = { sdl_USDTFRAXBP_Pool: '0xf8504e92428d65E56e495684A38f679C1B1DC30b', sdl_USXFRAXBP: '0x721DaC7d5ACc8Aa62946fd583C1F999e1570b97D', sdl_USXFRAXBP_Pool: '0xb2a2764D0DCAB445E24f4b813bE3f6ef8AE5f84D', + frxETHWETH: '0x1deb3b1ca6afca0ff9c5ce9301950dc98ac0d523', + frxETHWETH_Gauge: '0x46fec59eb30c2d610917ebf4ce5114f7425b2c4a', + frxETHWETH_Pool: '0x1deb3b1ca6afca0ff9c5ce9301950dc98ac0d523', USDPlusFRAXBP: '0xb34a7d1444a707349bc7b981b7f2e1f20f81f013', USDPlusFRAXBP_Gauge: '0x4645e6476d3a5595be9efd39426cc10586a8393d', USDPlusFRAXBP_Pool: '0xb34a7d1444a707349bc7b981b7f2e1f20f81f013', @@ -3359,6 +3370,8 @@ export const CONTRACT_ADDRESSES = { 'Chronos sAMM-FRAX/USD+': '0x0D20EF7033b73Ea0c9c320304B05da82E2C14E33', 'Chronos sAMM-frxETH/sfrxETH': '0xd52862915de98201bA93a45E73081450075C4E33', 'Chronos sAMM-frxETH/WETH': '0xdb286ED48b294D348593bFAf1f862393FA8776e9', + 'Convex FRAXBP [Arbitrum]': '0x93729702Bf9E1687Ae2124e191B8fFbcC0C8A0B0', + 'Convex frxETH/WETH [Arbitrum]': '0xd2D8BEB901f90163bE4667A85cDDEbB7177eb3E3', 'Convex USD+FRAXBP': '0x11F2217fa1D5c44Eae310b9b985E2964FC47D8f9', 'Curve VSTFRAX-f': '0x59bF0545FCa0E5Ad48E13DA269faCD2E8C886Ba4', 'dForce FRAX Lending [Arbitrum]': '0xb3ab7148cCCAf66686AD6C1bE24D83e58E6a504e', @@ -3399,6 +3412,8 @@ export const CONTRACT_ADDRESSES = { 'Chronos sAMM-FRAX/USD+': '0xaF618E6F5EF781e3aCFe00708BD005E0cc9A2e6F', 'Chronos sAMM-frxETH/sfrxETH': '0x548e0D4Fcb6b82a025E6770066b4127C5FCcBF07', 'Chronos sAMM-frxETH/WETH': '0x9A028F3Dd7067479b51ee89CDb0Db594744ebfAd', + 'Convex FRAXBP [Arbitrum]': '0x421Efd53FA0d90687db5ef370D5DCD7f89CbD9dE', + 'Convex frxETH/WETH [Arbitrum]': '0x24e927daC110Aab7189a4F864d41680e4F7865FB', 'Convex USD+FRAXBP': '0x56390acF12bce9675ab3922060D8d955149BE286', 'Curve VSTFRAX-f': '0x127963A74c07f72D862F2Bdc225226c3251BD117', 'KyberSwap Elastic FRAX/USDC [Arbitrum]': '0xbAFA44EFE7901E04E39Dad13167D089C559c1138', From 8193f08cd45d3ada5fd6f734d2d04a6e13b9d0b2 Mon Sep 17 00:00:00 2001 From: travis Date: Fri, 12 Jan 2024 10:29:59 -0800 Subject: [PATCH 31/37] routine update --- package-lock.json | 68985 ++++------------ package.json | 79 +- .../contracts/ERC20/ERC20PermissionedMint.sol | 2 +- .../ERC20/ERC20PermitPermissionedMint.sol | 2 +- .../ERC20PermitPermissionedOptiMintable.sol | 10 +- .../ERC20/IOptimismMintableERC20.sol | 31 + src/hardhat/contracts/ERC20/ISemver.sol | 13 + src/hardhat/contracts/ERC20/IsDAI.sol | 43 + src/hardhat/contracts/ERC20/wfrxETH.sol | 2 +- src/hardhat/contracts/FXB/FXB.sol | 4 +- src/hardhat/contracts/FXB/IFXB.sol | 33 + .../contracts/FraxETH/frxETHMinter.sol.old | 4 +- src/hardhat/contracts/Fraxbonds/FXB.sol | 2 +- .../contracts/Fraxbonds/FraxFPIBond.sol | 2 +- .../contracts/Fraxbonds/FraxFPIBondYield.sol | 2 +- .../contracts/Fraxferry/DummyToken.sol | 5 +- src/hardhat/contracts/Fraxferry/Fraxferry.sol | 2 +- .../contracts/FraxferryV2/FerryOnL1.sol | 9 +- .../contracts/FraxferryV2/FerryOnL2.sol | 18 +- .../periphery/FraxswapRouterMultihop.sol | 4 +- .../contracts/LeveragePool/TestERC20.sol | 4 +- .../Misc_AMOs/balancer/IAuraGauge.sol | 72 + .../balancer/IBalancerChildLiquidityGauge.sol | 1 - .../Misc_AMOs/balancer/IBalancerMinter.sol | 23 + .../balancer/IComposableStablePool.sol | 62 + .../Misc_AMOs/curve/ICurveStableSwapNG.sol | 66 + .../contracts/Openzeppelin_Manual/Context.sol | 28 + .../Openzeppelin_Manual/Pausable.sol | 119 + .../contracts/Oracle/ICPITrackerOracle.sol | 43 + .../contracts/Staking/CommunalFarm.sol | 2 +- .../contracts/Staking/FraxCrossChainFarm.sol | 2 +- .../Staking/FraxCrossChainFarmV2.sol | 2 +- .../Staking/FraxCrossChainFarmV3_ERC20.sol | 2 +- .../FraxCrossChainFarmV3_Pos_Rebase.sol | 2 +- .../Staking/FraxCrossChainFarmV4_ERC20.sol | 135 +- .../Staking/FraxFarmRageQuitter_VSTFRAX.sol | 108 + .../Staking/FraxUnifiedFarmTemplate.sol | 90 +- .../Staking/FraxUnifiedFarm_ERC20.sol | 84 +- .../Staking/StakingRewardsDualV5.sol | 2 +- .../Staking/StakingRewardsMultiGauge.sol | 2 +- .../FraxUnifiedFarm_ERC20_Convex_Generic.sol | 99 +- .../FraxUnifiedFarm_ERC20_Convex_frxETH.sol | 26 +- .../Variants/FraxUnifiedFarm_ERC20_Other.sol | 140 + .../FraxUnifiedFarm_ERC20_Other.sol.off | 69 - .../Bribe_Related/BSC/Reward_Collections.js | 1 - .../Script_Constants.js | 27 +- .../Step_1_Vault_Gauge_Proxy.js | 1 - .../Step_1_Vault_Gauge_Proxy.json | 2 +- .../Step_2_CRVCVXDistro_Contracts.js | 1 - .../Step_2_CRVCVXDistro_Contracts.json | 2 +- .../Step_3_RewDist_Seeding_Sync.js | 1 - .../Step_3_RewDist_Seeding_Sync.json | 2 +- .../Frax_Comptroller_Routine/Sunday_Part_1.js | 133 +- .../Sunday_Part_1.json | 2 +- .../gnosis-safe-scripts/utils/utils.js | 1 - src/hardhat/hardhat.config.js | 38 +- .../BAMM/BAMM.sol | 0 .../BAMM/BAMMHelper.sol | 0 .../BAMM/Babylonian.sol | 0 .../BAMM/FixedPoint.sol | 0 .../BAMM/FraxswapDummyRouter.sol | 0 .../BAMM/FraxswapOracle.sol | 0 .../Fraxchain/FraxchainFrxEthMinter.sol | 2 +- .../Bridges/Fraxchain/FraxchainPortal.sol | 0 .../FPI/FPIStaking.sol | 0 .../FPI/FPIStaking2.sol | 0 .../FPI/PermissionedSend.sol | 0 .../FPI/StakedFPI.sol | 3 +- .../old_contracts/FXB/ERC-1155/FXB.sol | 2 +- .../old_contracts/Fraxswap_OLD/DummyToken.sol | 2 +- .../Staking/FraxCrossChainFarmOLD.sol.old | 2 +- .../Staking/FraxCrossChainFarmSushi.sol | 2 +- .../Staking/FraxUniV3Farm_V2.sol | 12 +- .../Staking/FraxUnifiedFarmTemplateClone.sol | 0 .../FraxUnifiedFarm_KyberSwapElastic.sol | 37 +- .../Staking/FraxUnifiedFarm_PosRebase.sol | 41 +- .../Staking/FraxUnifiedFarm_UniV3.sol | 41 +- .../Staking/StakingRewardsDualV3.sol | 2 +- .../Staking/StakingRewardsDualV4.sol | 2 +- .../FraxUnifiedFarm_PosRebase_aFRAX.sol | 0 .../FraxUnifiedFarm_UniV3_FRAX_RAI.sol | 0 .../Utils/BundleUtils.sol | 0 .../Utils/MigrationBundleUtils.sol | 0 .../__BSC/Staking/FraxFarmBSC_Dual_V5.sol | 2 +- .../test/Fraxswap/fraxswap-router-test.js | 4 +- .../FraxCrossChainFarmV4_ERC20-Tests.js | 278 +- .../openzeppelin/ERC20.behavior.js | 0 .../openzeppelin/ERC20.test.js | 0 .../openzeppelin/signatures.ts | 0 src/hardhat/test/truffle-fixture.js | 12 +- src/types/constants.ts | 168 +- 91 files changed, 18875 insertions(+), 52383 deletions(-) create mode 100644 src/hardhat/contracts/ERC20/IOptimismMintableERC20.sol create mode 100644 src/hardhat/contracts/ERC20/ISemver.sol create mode 100644 src/hardhat/contracts/ERC20/IsDAI.sol create mode 100644 src/hardhat/contracts/FXB/IFXB.sol create mode 100644 src/hardhat/contracts/Misc_AMOs/balancer/IAuraGauge.sol create mode 100644 src/hardhat/contracts/Misc_AMOs/balancer/IBalancerMinter.sol create mode 100644 src/hardhat/contracts/Misc_AMOs/balancer/IComposableStablePool.sol create mode 100644 src/hardhat/contracts/Misc_AMOs/curve/ICurveStableSwapNG.sol create mode 100644 src/hardhat/contracts/Openzeppelin_Manual/Context.sol create mode 100644 src/hardhat/contracts/Openzeppelin_Manual/Pausable.sol create mode 100644 src/hardhat/contracts/Oracle/ICPITrackerOracle.sol create mode 100644 src/hardhat/contracts/Staking/FraxFarmRageQuitter_VSTFRAX.sol create mode 100755 src/hardhat/contracts/Staking/Variants/FraxUnifiedFarm_ERC20_Other.sol delete mode 100755 src/hardhat/contracts/Staking/Variants/FraxUnifiedFarm_ERC20_Other.sol.off rename src/hardhat/{contracts => old_contracts}/BAMM/BAMM.sol (100%) rename src/hardhat/{contracts => old_contracts}/BAMM/BAMMHelper.sol (100%) rename src/hardhat/{contracts => old_contracts}/BAMM/Babylonian.sol (100%) rename src/hardhat/{contracts => old_contracts}/BAMM/FixedPoint.sol (100%) rename src/hardhat/{contracts => old_contracts}/BAMM/FraxswapDummyRouter.sol (100%) rename src/hardhat/{contracts => old_contracts}/BAMM/FraxswapOracle.sol (100%) rename src/hardhat/{contracts => old_contracts}/Bridges/Fraxchain/FraxchainFrxEthMinter.sol (98%) rename src/hardhat/{contracts => old_contracts}/Bridges/Fraxchain/FraxchainPortal.sol (100%) rename src/hardhat/{contracts => old_contracts}/FPI/FPIStaking.sol (100%) rename src/hardhat/{contracts => old_contracts}/FPI/FPIStaking2.sol (100%) rename src/hardhat/{contracts => old_contracts}/FPI/PermissionedSend.sol (100%) rename src/hardhat/{contracts => old_contracts}/FPI/StakedFPI.sol (89%) rename src/hardhat/{contracts => old_contracts}/Staking/FraxUnifiedFarmTemplateClone.sol (100%) rename src/hardhat/{contracts => old_contracts}/Staking/FraxUnifiedFarm_KyberSwapElastic.sol (94%) rename src/hardhat/{contracts => old_contracts}/Staking/FraxUnifiedFarm_PosRebase.sol (93%) rename src/hardhat/{contracts => old_contracts}/Staking/FraxUnifiedFarm_UniV3.sol (93%) rename src/hardhat/{contracts => old_contracts}/Staking/Variants/FraxUnifiedFarm_PosRebase_aFRAX.sol (100%) rename src/hardhat/{contracts => old_contracts}/Staking/Variants/FraxUnifiedFarm_UniV3_FRAX_RAI.sol (100%) rename src/hardhat/{contracts => old_contracts}/Utils/BundleUtils.sol (100%) rename src/hardhat/{contracts => old_contracts}/Utils/MigrationBundleUtils.sol (100%) rename src/hardhat/test/{ => old_tests}/openzeppelin/ERC20.behavior.js (100%) rename src/hardhat/test/{ => old_tests}/openzeppelin/ERC20.test.js (100%) rename src/hardhat/test/{ => old_tests}/openzeppelin/signatures.ts (100%) diff --git a/package-lock.json b/package-lock.json index 5a57e2ed..febf1e95 100644 --- a/package-lock.json +++ b/package-lock.json @@ -9,278 +9,83 @@ "version": "1.0.0", "license": "ISC", "dependencies": { - "@arbitrum/nitro-contracts": "^1.0.2", - "@chainlink/contracts": "0.6.1", - "@eth-optimism/contracts-bedrock": "^0.16.0", - "@ethereumjs/common": "^3.1.2", - "@ethereumjs/tx": "^4.1.2", + "@arbitrum/nitro-contracts": "^1.1.0", + "@chainlink/contracts": "0.8.0", + "@eth-optimism/contracts-bedrock": "^0.16.2", + "@ethereumjs/common": "^4.1.0", + "@ethereumjs/tx": "^5.1.0", "@ethersproject/hardware-wallets": "^5.7.0", - "@flashbots/ethers-provider-bundle": "^0.6.1", - "@maticnetwork/maticjs": "^3.6.6", + "@maticnetwork/maticjs": "^3.7.7", "@maticnetwork/maticjs-ethers": "^1.0.3", "@maticnetwork/maticjs-web3": "^1.0.4", - "@matterlabs/hardhat-zksync-chai-matchers": "^0.1.2", - "@matterlabs/hardhat-zksync-deploy": "^0.6.3", - "@matterlabs/hardhat-zksync-solc": "^0.3.16", - "@openzeppelin/contracts": "^4.9.3", - "@openzeppelin/hardhat-upgrades": "^1.26.0", + "@nomiclabs/hardhat-truffle5": "^2.0.7", + "@openzeppelin/contracts": "^5.0.1", "@poanet/solidity-flattener": "^3.0.9", - "@solana/spl-token": "^0.3.7", - "@solana/web3.js": "^1.78.4", - "@truffle/hdwallet-provider": "^2.1.15", - "@types/express": "^4.17.17", - "@types/node": "^18.11.18", + "@types/express": "^4.17.21", + "@types/node": "^20.10.8", "@types/web3": "^1.2.2", - "@uniswap/sdk-core": "^3.1.0", + "@uniswap/sdk-core": "^4.0.10", "@uniswap/v2-periphery": "^1.1.0-beta.0", "@uniswap/v3-core": "^1.0.1", - "@uniswap/v3-periphery": "^1.4.3", + "@uniswap/v3-periphery": "^1.4.4", "@uniswap/v3-sdk": "^3.10.0", "bignumber.js": "^9.1.2", - "bnc-sdk": "^4.6.7", "chalk": "^4.1.2", - "cross-fetch": "^3.1.6", - "data-fns": "^1.1.0", + "cross-fetch": "^4.0.0", "dotenv": "^16.3.1", "esm": "^3.2.25", "ethereumjs-tx": "^2.1.2", - "flashbots": "^1.0.0", - "fs-extra": "^11.1.1", - "ganache-core": "^2.13.2", + "fs-extra": "^11.2.0", "hardhat-contract-sizer": "^2.10.0", "hardhat-gas-reporter": "^1.0.9", - "hardhat-spdx-license-identifier": "^2.1.0", - "hardhat-tracer": "^2.6.0", + "hardhat-spdx-license-identifier": "^2.2.0", + "hardhat-tracer": "^2.7.0", "https": "^1.0.0", - "mathjs": "^11.11.0", - "nodemon": "^2.0.22", + "mathjs": "^12.2.1", "path": "^0.12.7", "prb-math": "^2.4.3", - "require-from-string": "^2.0.2", - "sol-merger": "^4.4.0", - "solc": "0.8.21", + "solc": "0.8.23", "to-hex": "0.0.18", "toml": "^3.0.0", - "truffle": "^5.11.4", - "truffle-contract-size": "^2.0.1", - "truffle-flattener": "^1.6.0", - "truffle-hdwallet-provider": "^1.0.6", "tslib": "^2.6.2", - "typescript": "^5.2.2", + "typescript": "^5.3.3", "util": "^0.12.5", - "web3-eth-contract": "^1.10.0", - "web3-utils": "^1.10.0", - "ws": "^8.14.1", - "zksync-web3": "^0.14.3" + "web3-eth-contract": "^4.1.4" }, "devDependencies": { - "@nomiclabs/hardhat-ethers": "^2.2.3", + "@nomicfoundation/hardhat-ethers": "^3.0.5", "@nomiclabs/hardhat-etherscan": "^3.1.7", - "@nomiclabs/hardhat-truffle5": "^2.0.7", - "@nomiclabs/hardhat-vyper": "^3.0.4", - "@nomiclabs/hardhat-waffle": "^2.0.6", + "@nomiclabs/hardhat-vyper": "^3.0.5", "@nomiclabs/hardhat-web3": "^2.0.0", - "@openzeppelin/hardhat-upgrades": "^1.26.0", + "@openzeppelin/hardhat-upgrades": "^3.0.2", "@openzeppelin/test-helpers": "^0.5.16", "chai": "^4.3.8", "chai-almost": "^1.0.1", - "ethereum-waffle": "^4.0.10", - "ethers": "^5.7.2", - "hardhat": "^2.17.3", - "hardhat-deploy": "^0.11.37", - "json-loader": "^0.5.7", - "web3": "^1.10.0" + "ethers": "^6.9.2", + "hardhat": "^2.19.4", + "hardhat-deploy": "^0.11.45", + "json-loader": "^0.5.7" } }, + "node_modules/@adraffy/ens-normalize": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/@adraffy/ens-normalize/-/ens-normalize-1.10.0.tgz", + "integrity": "sha512-nA9XHtlAkYfJxY7bce8DcN7eKxWWCWkU+1GR9d+U6MbNpfwQp8TI7vqOsBsMcHoT4mBu2kypKoSKnghEzOOq5Q==", + "dev": true + }, "node_modules/@aduh95/viz.js": { "version": "3.7.0", "resolved": "https://registry.npmjs.org/@aduh95/viz.js/-/viz.js-3.7.0.tgz", "integrity": "sha512-20Pk2Z98fbPLkECcrZSJszKos/OgtvJJR3NcbVfgCJ6EQjDNzW2P1BKqImOz3tJ952dvO2DWEhcLhQ1Wz1e9ng==", "optional": true }, - "node_modules/@ampproject/remapping": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.0.tgz", - "integrity": "sha512-qRmjj8nj9qmLTQXXmaR1cck3UXSRMPrbsLJAasZpF+t3riI71BXed5ebIOYwQntykeZuhjsdweEc9BxH5Jc26w==", - "peer": true, - "dependencies": { - "@jridgewell/gen-mapping": "^0.1.0", - "@jridgewell/trace-mapping": "^0.3.9" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@apollo/protobufjs": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/@apollo/protobufjs/-/protobufjs-1.2.7.tgz", - "integrity": "sha512-Lahx5zntHPZia35myYDBRuF58tlwPskwHc5CWBZC/4bMKB6siTBWwtMrkqXcsNwQiFSzSx5hKdRPUmemrEp3Gg==", - "hasInstallScript": true, - "optional": true, - "dependencies": { - "@protobufjs/aspromise": "^1.1.2", - "@protobufjs/base64": "^1.1.2", - "@protobufjs/codegen": "^2.0.4", - "@protobufjs/eventemitter": "^1.1.0", - "@protobufjs/fetch": "^1.1.0", - "@protobufjs/float": "^1.0.2", - "@protobufjs/inquire": "^1.1.0", - "@protobufjs/path": "^1.1.2", - "@protobufjs/pool": "^1.1.0", - "@protobufjs/utf8": "^1.1.0", - "@types/long": "^4.0.0", - "long": "^4.0.0" - }, - "bin": { - "apollo-pbjs": "bin/pbjs", - "apollo-pbts": "bin/pbts" - } - }, - "node_modules/@apollo/usage-reporting-protobuf": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/@apollo/usage-reporting-protobuf/-/usage-reporting-protobuf-4.1.1.tgz", - "integrity": "sha512-u40dIUePHaSKVshcedO7Wp+mPiZsaU6xjv9J+VyxpoU/zL6Jle+9zWeG98tr/+SZ0nZ4OXhrbb8SNr0rAPpIDA==", - "optional": true, - "dependencies": { - "@apollo/protobufjs": "1.2.7" - } - }, - "node_modules/@apollo/utils.dropunuseddefinitions": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@apollo/utils.dropunuseddefinitions/-/utils.dropunuseddefinitions-1.1.0.tgz", - "integrity": "sha512-jU1XjMr6ec9pPoL+BFWzEPW7VHHulVdGKMkPAMiCigpVIT11VmCbnij0bWob8uS3ODJ65tZLYKAh/55vLw2rbg==", - "optional": true, - "engines": { - "node": ">=12.13.0" - }, - "peerDependencies": { - "graphql": "14.x || 15.x || 16.x" - } - }, - "node_modules/@apollo/utils.keyvaluecache": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@apollo/utils.keyvaluecache/-/utils.keyvaluecache-1.0.2.tgz", - "integrity": "sha512-p7PVdLPMnPzmXSQVEsy27cYEjVON+SH/Wb7COyW3rQN8+wJgT1nv9jZouYtztWW8ZgTkii5T6tC9qfoDREd4mg==", - "optional": true, - "dependencies": { - "@apollo/utils.logger": "^1.0.0", - "lru-cache": "7.10.1 - 7.13.1" - } - }, - "node_modules/@apollo/utils.keyvaluecache/node_modules/lru-cache": { - "version": "7.13.1", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.13.1.tgz", - "integrity": "sha512-CHqbAq7NFlW3RSnoWXLJBxCWaZVBrfa9UEHId2M3AW8iEBurbqduNexEUCGc3SHc6iCYXNJCDi903LajSVAEPQ==", - "optional": true, - "engines": { - "node": ">=12" - } - }, - "node_modules/@apollo/utils.logger": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@apollo/utils.logger/-/utils.logger-1.0.1.tgz", - "integrity": "sha512-XdlzoY7fYNK4OIcvMD2G94RoFZbzTQaNP0jozmqqMudmaGo2I/2Jx71xlDJ801mWA/mbYRihyaw6KJii7k5RVA==", - "optional": true - }, - "node_modules/@apollo/utils.printwithreducedwhitespace": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@apollo/utils.printwithreducedwhitespace/-/utils.printwithreducedwhitespace-1.1.0.tgz", - "integrity": "sha512-GfFSkAv3n1toDZ4V6u2d7L4xMwLA+lv+6hqXicMN9KELSJ9yy9RzuEXaX73c/Ry+GzRsBy/fdSUGayGqdHfT2Q==", - "optional": true, - "engines": { - "node": ">=12.13.0" - }, - "peerDependencies": { - "graphql": "14.x || 15.x || 16.x" - } - }, - "node_modules/@apollo/utils.removealiases": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@apollo/utils.removealiases/-/utils.removealiases-1.0.0.tgz", - "integrity": "sha512-6cM8sEOJW2LaGjL/0vHV0GtRaSekrPQR4DiywaApQlL9EdROASZU5PsQibe2MWeZCOhNrPRuHh4wDMwPsWTn8A==", - "optional": true, - "engines": { - "node": ">=12.13.0" - }, - "peerDependencies": { - "graphql": "14.x || 15.x || 16.x" - } - }, - "node_modules/@apollo/utils.sortast": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@apollo/utils.sortast/-/utils.sortast-1.1.0.tgz", - "integrity": "sha512-VPlTsmUnOwzPK5yGZENN069y6uUHgeiSlpEhRnLFYwYNoJHsuJq2vXVwIaSmts015WTPa2fpz1inkLYByeuRQA==", - "optional": true, - "dependencies": { - "lodash.sortby": "^4.7.0" - }, - "engines": { - "node": ">=12.13.0" - }, - "peerDependencies": { - "graphql": "14.x || 15.x || 16.x" - } - }, - "node_modules/@apollo/utils.stripsensitiveliterals": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@apollo/utils.stripsensitiveliterals/-/utils.stripsensitiveliterals-1.2.0.tgz", - "integrity": "sha512-E41rDUzkz/cdikM5147d8nfCFVKovXxKBcjvLEQ7bjZm/cg9zEcXvS6vFY8ugTubI3fn6zoqo0CyU8zT+BGP9w==", - "optional": true, - "engines": { - "node": ">=12.13.0" - }, - "peerDependencies": { - "graphql": "14.x || 15.x || 16.x" - } - }, - "node_modules/@apollo/utils.usagereporting": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@apollo/utils.usagereporting/-/utils.usagereporting-1.0.1.tgz", - "integrity": "sha512-6dk+0hZlnDbahDBB2mP/PZ5ybrtCJdLMbeNJD+TJpKyZmSY6bA3SjI8Cr2EM9QA+AdziywuWg+SgbWUF3/zQqQ==", - "optional": true, - "dependencies": { - "@apollo/usage-reporting-protobuf": "^4.0.0", - "@apollo/utils.dropunuseddefinitions": "^1.1.0", - "@apollo/utils.printwithreducedwhitespace": "^1.1.0", - "@apollo/utils.removealiases": "1.0.0", - "@apollo/utils.sortast": "^1.1.0", - "@apollo/utils.stripsensitiveliterals": "^1.2.0" - }, - "engines": { - "node": ">=12.13.0" - }, - "peerDependencies": { - "graphql": "14.x || 15.x || 16.x" - } - }, - "node_modules/@apollographql/apollo-tools": { - "version": "0.5.4", - "resolved": "https://registry.npmjs.org/@apollographql/apollo-tools/-/apollo-tools-0.5.4.tgz", - "integrity": "sha512-shM3q7rUbNyXVVRkQJQseXv6bnYM3BUma/eZhwXR4xsuM+bqWnJKvW7SAfRjP7LuSCocrexa5AXhjjawNHrIlw==", - "optional": true, - "engines": { - "node": ">=8", - "npm": ">=6" - }, - "peerDependencies": { - "graphql": "^14.2.1 || ^15.0.0 || ^16.0.0" - } - }, - "node_modules/@apollographql/graphql-playground-html": { - "version": "1.6.29", - "resolved": "https://registry.npmjs.org/@apollographql/graphql-playground-html/-/graphql-playground-html-1.6.29.tgz", - "integrity": "sha512-xCcXpoz52rI4ksJSdOCxeOCn2DLocxwHf9dVT/Q90Pte1LX+LY+91SFtJF3KXVHH8kEin+g1KKCQPKBjZJfWNA==", - "optional": true, - "dependencies": { - "xss": "^1.0.8" - } - }, "node_modules/@arbitrum/nitro-contracts": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@arbitrum/nitro-contracts/-/nitro-contracts-1.0.2.tgz", - "integrity": "sha512-Y+cXIQNsy9UNANnFrDGKhHzNmOWttxpXP0/uJFTRmS+rgS4ozlr81/UmBo3tX6uWjziDtquhYRuG3wx17talOQ==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@arbitrum/nitro-contracts/-/nitro-contracts-1.1.0.tgz", + "integrity": "sha512-/tLlU++IFdaD9Bn+RYzQ6+6k+0iDPuqi/cNf9kv5N1I9NAApNx1qfsIHoHMEQAvLuY+gj+raH7TAESBbzTAuuw==", "hasInstallScript": true, "dependencies": { + "@offchainlabs/upgrade-executor": "1.1.0-beta.0", "@openzeppelin/contracts": "4.5.0", "@openzeppelin/contracts-upgradeable": "4.5.2", "patch-package": "^6.4.7" @@ -294,11 +99,6 @@ "resolved": "https://registry.npmjs.org/@openzeppelin/contracts/-/contracts-4.5.0.tgz", "integrity": "sha512-fdkzKPYMjrRiPK6K4y64e6GzULR7R7RwxSigHS8DDp7aWDeoReqsQI+cxHV1UuhAqX69L1lAaWDxenfP+xiqzA==" }, - "node_modules/@arbitrum/nitro-contracts/node_modules/@openzeppelin/contracts-upgradeable": { - "version": "4.5.2", - "resolved": "https://registry.npmjs.org/@openzeppelin/contracts-upgradeable/-/contracts-upgradeable-4.5.2.tgz", - "integrity": "sha512-xgWZYaPlrEOQo3cBj97Ufiuv79SPd8Brh4GcFYhPgb6WvAq4ppz8dWKL6h+jLAK01rUqMRp/TS9AdXgAeNvCLA==" - }, "node_modules/@aws-crypto/sha256-js": { "version": "1.2.2", "resolved": "https://registry.npmjs.org/@aws-crypto/sha256-js/-/sha256-js-1.2.2.tgz", @@ -334,11 +134,12 @@ "dev": true }, "node_modules/@aws-sdk/types": { - "version": "3.342.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.342.0.tgz", - "integrity": "sha512-5uyXVda/AgUpdZNJ9JPHxwyxr08miPiZ/CKSMcRdQVjcNnrdzY9m/iM9LvnQT44sQO+IEEkF2IoZIWvZcq199A==", + "version": "3.489.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.489.0.tgz", + "integrity": "sha512-kcDtLfKog/p0tC4gAeqJqWxAiEzfe2LRPnKamvSG2Mjbthx4R/alE2dxyIq/wW+nvRv0fqR3OD5kD1+eVfdr/w==", "dev": true, "dependencies": { + "@smithy/types": "^2.8.0", "tslib": "^2.5.0" }, "engines": { @@ -354,404 +155,10 @@ "tslib": "^2.3.1" } }, - "node_modules/@babel/code-frame": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.18.6.tgz", - "integrity": "sha512-TDCmlK5eOvH+eH7cdAFlNXeVJqWIQ7gW9tY1GJIpUtFb6CmjVyq2VM3u71bOyR8CRihcCgMUYoDNyLXao3+70Q==", - "peer": true, - "dependencies": { - "@babel/highlight": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/compat-data": { - "version": "7.19.4", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.19.4.tgz", - "integrity": "sha512-CHIGpJcUQ5lU9KrPHTjBMhVwQG6CQjxfg36fGXl3qk/Gik1WwWachaXFuo0uCWJT/mStOKtcbFJCaVLihC1CMw==", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/core": { - "version": "7.19.6", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.19.6.tgz", - "integrity": "sha512-D2Ue4KHpc6Ys2+AxpIx1BZ8+UegLLLE2p3KJEuJRKmokHOtl49jQ5ny1773KsGLZs8MQvBidAF6yWUJxRqtKtg==", - "peer": true, - "dependencies": { - "@ampproject/remapping": "^2.1.0", - "@babel/code-frame": "^7.18.6", - "@babel/generator": "^7.19.6", - "@babel/helper-compilation-targets": "^7.19.3", - "@babel/helper-module-transforms": "^7.19.6", - "@babel/helpers": "^7.19.4", - "@babel/parser": "^7.19.6", - "@babel/template": "^7.18.10", - "@babel/traverse": "^7.19.6", - "@babel/types": "^7.19.4", - "convert-source-map": "^1.7.0", - "debug": "^4.1.0", - "gensync": "^1.0.0-beta.2", - "json5": "^2.2.1", - "semver": "^6.3.0" - }, - "engines": { - "node": ">=6.9.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/babel" - } - }, - "node_modules/@babel/core/node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "peer": true, - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/@babel/generator": { - "version": "7.19.6", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.19.6.tgz", - "integrity": "sha512-oHGRUQeoX1QrKeJIKVe0hwjGqNnVYsM5Nep5zo0uE0m42sLH+Fsd2pStJ5sRM1bNyTUUoz0pe2lTeMJrb/taTA==", - "peer": true, - "dependencies": { - "@babel/types": "^7.19.4", - "@jridgewell/gen-mapping": "^0.3.2", - "jsesc": "^2.5.1" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/generator/node_modules/@jridgewell/gen-mapping": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.2.tgz", - "integrity": "sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A==", - "peer": true, - "dependencies": { - "@jridgewell/set-array": "^1.0.1", - "@jridgewell/sourcemap-codec": "^1.4.10", - "@jridgewell/trace-mapping": "^0.3.9" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@babel/helper-compilation-targets": { - "version": "7.19.3", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.19.3.tgz", - "integrity": "sha512-65ESqLGyGmLvgR0mst5AdW1FkNlj9rQsCKduzEoEPhBCDFGXvz2jW6bXFG6i0/MrV2s7hhXjjb2yAzcPuQlLwg==", - "dependencies": { - "@babel/compat-data": "^7.19.3", - "@babel/helper-validator-option": "^7.18.6", - "browserslist": "^4.21.3", - "semver": "^6.3.0" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/helper-compilation-targets/node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/@babel/helper-define-polyfill-provider": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.3.3.tgz", - "integrity": "sha512-z5aQKU4IzbqCC1XH0nAqfsFLMVSo22SBKUc0BxGrLkolTdPTructy0ToNnlO2zA4j9Q/7pjMZf0DSY+DSTYzww==", - "dependencies": { - "@babel/helper-compilation-targets": "^7.17.7", - "@babel/helper-plugin-utils": "^7.16.7", - "debug": "^4.1.1", - "lodash.debounce": "^4.0.8", - "resolve": "^1.14.2", - "semver": "^6.1.2" - }, - "peerDependencies": { - "@babel/core": "^7.4.0-0" - } - }, - "node_modules/@babel/helper-define-polyfill-provider/node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/@babel/helper-environment-visitor": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.18.9.tgz", - "integrity": "sha512-3r/aACDJ3fhQ/EVgFy0hpj8oHyHpQc+LPtJoY9SzTThAsStm4Ptegq92vqKoE3vD706ZVFWITnMnxucw+S9Ipg==", - "peer": true, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-function-name": { - "version": "7.19.0", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.19.0.tgz", - "integrity": "sha512-WAwHBINyrpqywkUH0nTnNgI5ina5TFn85HKS0pbPDfxFfhyR/aNQEn4hGi1P1JyT//I0t4OgXUlofzWILRvS5w==", - "peer": true, - "dependencies": { - "@babel/template": "^7.18.10", - "@babel/types": "^7.19.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-hoist-variables": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.18.6.tgz", - "integrity": "sha512-UlJQPkFqFULIcyW5sbzgbkxn2FKRgwWiRexcuaR8RNJRy8+LLveqPjwZV/bwrLZCN0eUHD/x8D0heK1ozuoo6Q==", - "peer": true, - "dependencies": { - "@babel/types": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-module-imports": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.18.6.tgz", - "integrity": "sha512-0NFvs3VkuSYbFi1x2Vd6tKrywq+z/cLeYC/RJNFrIX/30Bf5aiGYbtvGXolEktzJH8o5E5KJ3tT+nkxuuZFVlA==", - "dependencies": { - "@babel/types": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-module-transforms": { - "version": "7.19.6", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.19.6.tgz", - "integrity": "sha512-fCmcfQo/KYr/VXXDIyd3CBGZ6AFhPFy1TfSEJ+PilGVlQT6jcbqtHAM4C1EciRqMza7/TpOUZliuSH+U6HAhJw==", - "peer": true, - "dependencies": { - "@babel/helper-environment-visitor": "^7.18.9", - "@babel/helper-module-imports": "^7.18.6", - "@babel/helper-simple-access": "^7.19.4", - "@babel/helper-split-export-declaration": "^7.18.6", - "@babel/helper-validator-identifier": "^7.19.1", - "@babel/template": "^7.18.10", - "@babel/traverse": "^7.19.6", - "@babel/types": "^7.19.4" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-plugin-utils": { - "version": "7.19.0", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.19.0.tgz", - "integrity": "sha512-40Ryx7I8mT+0gaNxm8JGTZFUITNqdLAgdg0hXzeVZxVD6nFsdhQvip6v8dqkRHzsz1VFpFAaOCHNn0vKBL7Czw==", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-simple-access": { - "version": "7.19.4", - "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.19.4.tgz", - "integrity": "sha512-f9Xq6WqBFqaDfbCzn2w85hwklswz5qsKlh7f08w4Y9yhJHpnNC0QemtSkK5YyOY8kPGvyiwdzZksGUhnGdaUIg==", - "peer": true, - "dependencies": { - "@babel/types": "^7.19.4" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-split-export-declaration": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.18.6.tgz", - "integrity": "sha512-bde1etTx6ZyTmobl9LLMMQsaizFVZrquTEHOqKeQESMKo4PlObf+8+JA25ZsIpZhT/WEd39+vOdLXAFG/nELpA==", - "peer": true, - "dependencies": { - "@babel/types": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-string-parser": { - "version": "7.19.4", - "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.19.4.tgz", - "integrity": "sha512-nHtDoQcuqFmwYNYPz3Rah5ph2p8PFeFCsZk9A/48dPc/rGocJ5J3hAAZ7pb76VWX3fZKu+uEr/FhH5jLx7umrw==", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-validator-identifier": { - "version": "7.19.1", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.19.1.tgz", - "integrity": "sha512-awrNfaMtnHUr653GgGEs++LlAvW6w+DcPrOliSMXWCKo597CwL5Acf/wWdNkf/tfEQE3mjkeD1YOVZOUV/od1w==", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-validator-option": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.18.6.tgz", - "integrity": "sha512-XO7gESt5ouv/LRJdrVjkShckw6STTaB7l9BrpBaAHDeF5YZT+01PCwmR0SJHnkW6i8OwW/EVWRShfi4j2x+KQw==", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helpers": { - "version": "7.19.4", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.19.4.tgz", - "integrity": "sha512-G+z3aOx2nfDHwX/kyVii5fJq+bgscg89/dJNWpYeKeBv3v9xX8EIabmx1k6u9LS04H7nROFVRVK+e3k0VHp+sw==", - "peer": true, - "dependencies": { - "@babel/template": "^7.18.10", - "@babel/traverse": "^7.19.4", - "@babel/types": "^7.19.4" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/highlight": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.18.6.tgz", - "integrity": "sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g==", - "peer": true, - "dependencies": { - "@babel/helper-validator-identifier": "^7.18.6", - "chalk": "^2.0.0", - "js-tokens": "^4.0.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/highlight/node_modules/ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "peer": true, - "dependencies": { - "color-convert": "^1.9.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/highlight/node_modules/chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "peer": true, - "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/highlight/node_modules/color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "peer": true, - "dependencies": { - "color-name": "1.1.3" - } - }, - "node_modules/@babel/highlight/node_modules/color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", - "peer": true - }, - "node_modules/@babel/highlight/node_modules/escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", - "peer": true, - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/@babel/highlight/node_modules/has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", - "peer": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/highlight/node_modules/supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "peer": true, - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/parser": { - "version": "7.19.6", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.19.6.tgz", - "integrity": "sha512-h1IUp81s2JYJ3mRkdxJgs4UvmSsRvDrx5ICSJbPvtWYv5i1nTBGcBpnog+89rAFMwvvru6E5NUHdBe01UeSzYA==", - "peer": true, - "bin": { - "parser": "bin/babel-parser.js" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@babel/plugin-transform-runtime": { - "version": "7.19.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.19.6.tgz", - "integrity": "sha512-PRH37lz4JU156lYFW1p8OxE5i7d6Sl/zV58ooyr+q1J1lnQPyg5tIiXlIwNVhJaY4W3TmOtdc8jqdXQcB1v5Yw==", - "dependencies": { - "@babel/helper-module-imports": "^7.18.6", - "@babel/helper-plugin-utils": "^7.19.0", - "babel-plugin-polyfill-corejs2": "^0.3.3", - "babel-plugin-polyfill-corejs3": "^0.6.0", - "babel-plugin-polyfill-regenerator": "^0.4.1", - "semver": "^6.3.0" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-runtime/node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "bin": { - "semver": "bin/semver.js" - } - }, "node_modules/@babel/runtime": { - "version": "7.22.15", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.22.15.tgz", - "integrity": "sha512-T0O+aa+4w0u06iNmapipJXMV4HoUir03hpx3/YqXXhu9xim3w+dVphjFWl1OH8NbZHw5Lbm9k45drDkgq2VNNA==", + "version": "7.23.8", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.23.8.tgz", + "integrity": "sha512-Y7KbAP984rn1VGMbGqKmBLio9V7y5Je9GvU4rQPCPinCyNfUcToxIXl06d59URp/F3LwinvODxab5N/G6qggkw==", "dependencies": { "regenerator-runtime": "^0.14.0" }, @@ -759,75 +166,83 @@ "node": ">=6.9.0" } }, - "node_modules/@babel/template": { - "version": "7.18.10", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.18.10.tgz", - "integrity": "sha512-TI+rCtooWHr3QJ27kJxfjutghu44DLnasDMwpDqCXVTal9RLp3RSYNh4NdBrRP2cQAoG9A8juOQl6P6oZG4JxA==", - "peer": true, - "dependencies": { - "@babel/code-frame": "^7.18.6", - "@babel/parser": "^7.18.10", - "@babel/types": "^7.18.10" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/traverse": { - "version": "7.19.6", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.19.6.tgz", - "integrity": "sha512-6l5HrUCzFM04mfbG09AagtYyR2P0B71B1wN7PfSPiksDPz2k5H9CBC1tcZpz2M8OxbKTPccByoOJ22rUKbpmQQ==", - "peer": true, - "dependencies": { - "@babel/code-frame": "^7.18.6", - "@babel/generator": "^7.19.6", - "@babel/helper-environment-visitor": "^7.18.9", - "@babel/helper-function-name": "^7.19.0", - "@babel/helper-hoist-variables": "^7.18.6", - "@babel/helper-split-export-declaration": "^7.18.6", - "@babel/parser": "^7.19.6", - "@babel/types": "^7.19.4", - "debug": "^4.1.0", - "globals": "^11.1.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/types": { - "version": "7.19.4", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.19.4.tgz", - "integrity": "sha512-M5LK7nAeS6+9j7hAq+b3fQs+pNfUtTGq+yFFfHnauFA8zQtLRfmuipmsKDKKLuyG+wC8ABW43A153YNawNTEtw==", - "dependencies": { - "@babel/helper-string-parser": "^7.19.4", - "@babel/helper-validator-identifier": "^7.19.1", - "to-fast-properties": "^2.0.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@balena/dockerignore": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@balena/dockerignore/-/dockerignore-1.0.2.tgz", - "integrity": "sha512-wMue2Sy4GAVTk6Ic4tJVcnfdau+gx2EnG7S+uAEe+TWJFqE4YoWN4/H8MSLj4eYJKxGg26lZwboEniNiNwZQ6Q==" - }, "node_modules/@chainlink/contracts": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/@chainlink/contracts/-/contracts-0.6.1.tgz", - "integrity": "sha512-EuwijGexttw0UjfrW+HygwhQIrGAbqpf1ue28R55HhWMHBzphEH0PhWm8DQmFfj5OZNy8Io66N4L0nStkZ3QKQ==", + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/@chainlink/contracts/-/contracts-0.8.0.tgz", + "integrity": "sha512-nUv1Uxw5Mn92wgLs2bgPYmo8hpdQ3s9jB/lcbdU0LmNOVu0hbfmouVnqwRLa28Ll50q6GczUA+eO0ikNIKLZsA==", "dependencies": { "@eth-optimism/contracts": "^0.5.21", "@openzeppelin/contracts": "~4.3.3", - "@openzeppelin/contracts-upgradeable": "^4.7.3", + "@openzeppelin/contracts-upgradeable-4.7.3": "npm:@openzeppelin/contracts-upgradeable@v4.7.3", "@openzeppelin/contracts-v0.7": "npm:@openzeppelin/contracts@v3.4.2" } }, + "node_modules/@chainlink/contracts/node_modules/@eth-optimism/contracts": { + "version": "0.5.40", + "resolved": "https://registry.npmjs.org/@eth-optimism/contracts/-/contracts-0.5.40.tgz", + "integrity": "sha512-MrzV0nvsymfO/fursTB7m/KunkPsCndltVgfdHaT1Aj5Vi6R/doKIGGkOofHX+8B6VMZpuZosKCMQ5lQuqjt8w==", + "dependencies": { + "@eth-optimism/core-utils": "0.12.0", + "@ethersproject/abstract-provider": "^5.7.0", + "@ethersproject/abstract-signer": "^5.7.0" + }, + "peerDependencies": { + "ethers": "^5" + } + }, "node_modules/@chainlink/contracts/node_modules/@openzeppelin/contracts": { "version": "4.3.3", "resolved": "https://registry.npmjs.org/@openzeppelin/contracts/-/contracts-4.3.3.tgz", "integrity": "sha512-tDBopO1c98Yk7Cv/PZlHqrvtVjlgK5R4J6jxLwoO7qxK4xqOiZG+zSkIvGFpPZ0ikc3QOED3plgdqjgNTnBc7g==" }, + "node_modules/@chainlink/contracts/node_modules/ethers": { + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/ethers/-/ethers-5.7.2.tgz", + "integrity": "sha512-wswUsmWo1aOK8rR7DIKiWSw9DbLWe6x98Jrn8wcTflTVvaXhAMaB5zGAXy0GYQEQp9iO1iSHWVyARQm11zUtyg==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "peer": true, + "dependencies": { + "@ethersproject/abi": "5.7.0", + "@ethersproject/abstract-provider": "5.7.0", + "@ethersproject/abstract-signer": "5.7.0", + "@ethersproject/address": "5.7.0", + "@ethersproject/base64": "5.7.0", + "@ethersproject/basex": "5.7.0", + "@ethersproject/bignumber": "5.7.0", + "@ethersproject/bytes": "5.7.0", + "@ethersproject/constants": "5.7.0", + "@ethersproject/contracts": "5.7.0", + "@ethersproject/hash": "5.7.0", + "@ethersproject/hdnode": "5.7.0", + "@ethersproject/json-wallets": "5.7.0", + "@ethersproject/keccak256": "5.7.0", + "@ethersproject/logger": "5.7.0", + "@ethersproject/networks": "5.7.1", + "@ethersproject/pbkdf2": "5.7.0", + "@ethersproject/properties": "5.7.0", + "@ethersproject/providers": "5.7.2", + "@ethersproject/random": "5.7.0", + "@ethersproject/rlp": "5.7.0", + "@ethersproject/sha2": "5.7.0", + "@ethersproject/signing-key": "5.7.0", + "@ethersproject/solidity": "5.7.0", + "@ethersproject/strings": "5.7.0", + "@ethersproject/transactions": "5.7.0", + "@ethersproject/units": "5.7.0", + "@ethersproject/wallet": "5.7.0", + "@ethersproject/web": "5.7.1", + "@ethersproject/wordlists": "5.7.0" + } + }, "node_modules/@chainsafe/as-sha256": { "version": "0.3.1", "resolved": "https://registry.npmjs.org/@chainsafe/as-sha256/-/as-sha256-0.3.1.tgz", @@ -962,18 +377,18 @@ "graceful-fs": "^4.1.6" } }, - "node_modules/@ensdomains/ens/node_modules/require-from-string": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-1.2.1.tgz", - "integrity": "sha512-H7AkJWMobeskkttHyhTVtS0fxpFLjxhbfMa6Bk3wimP7sdPRGL3EyCg3sAQenFfAe+xQ+oAc85Nmtvq0ROM83Q==", - "engines": { - "node": ">=0.10.0" + "node_modules/@ensdomains/ens/node_modules/klaw": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/klaw/-/klaw-1.3.1.tgz", + "integrity": "sha512-TED5xi9gGQjGpNnvRWknrwAB1eL5GciPfVFOt3Vk1OJCVDQbzuSfrF3hkUQKlsgKrG1F+0t5W0m+Fje1jIt8rw==", + "optionalDependencies": { + "graceful-fs": "^4.1.9" } }, "node_modules/@ensdomains/ens/node_modules/semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", + "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", "bin": { "semver": "bin/semver" } @@ -1079,50 +494,69 @@ "js-sha3": "^0.8.0" } }, + "node_modules/@ensdomains/ensjs/node_modules/ethers": { + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/ethers/-/ethers-5.7.2.tgz", + "integrity": "sha512-wswUsmWo1aOK8rR7DIKiWSw9DbLWe6x98Jrn8wcTflTVvaXhAMaB5zGAXy0GYQEQp9iO1iSHWVyARQm11zUtyg==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "dependencies": { + "@ethersproject/abi": "5.7.0", + "@ethersproject/abstract-provider": "5.7.0", + "@ethersproject/abstract-signer": "5.7.0", + "@ethersproject/address": "5.7.0", + "@ethersproject/base64": "5.7.0", + "@ethersproject/basex": "5.7.0", + "@ethersproject/bignumber": "5.7.0", + "@ethersproject/bytes": "5.7.0", + "@ethersproject/constants": "5.7.0", + "@ethersproject/contracts": "5.7.0", + "@ethersproject/hash": "5.7.0", + "@ethersproject/hdnode": "5.7.0", + "@ethersproject/json-wallets": "5.7.0", + "@ethersproject/keccak256": "5.7.0", + "@ethersproject/logger": "5.7.0", + "@ethersproject/networks": "5.7.1", + "@ethersproject/pbkdf2": "5.7.0", + "@ethersproject/properties": "5.7.0", + "@ethersproject/providers": "5.7.2", + "@ethersproject/random": "5.7.0", + "@ethersproject/rlp": "5.7.0", + "@ethersproject/sha2": "5.7.0", + "@ethersproject/signing-key": "5.7.0", + "@ethersproject/solidity": "5.7.0", + "@ethersproject/strings": "5.7.0", + "@ethersproject/transactions": "5.7.0", + "@ethersproject/units": "5.7.0", + "@ethersproject/wallet": "5.7.0", + "@ethersproject/web": "5.7.1", + "@ethersproject/wordlists": "5.7.0" + } + }, "node_modules/@ensdomains/resolver": { "version": "0.2.4", "resolved": "https://registry.npmjs.org/@ensdomains/resolver/-/resolver-0.2.4.tgz", "integrity": "sha512-bvaTH34PMCbv6anRa9I/0zjLJgY4EuznbEMgbV77JBCQ9KNC46rzi0avuxpOfu+xDjPEtSFGqVEOr5GlUSGudA==", "deprecated": "Please use @ensdomains/ens-contracts" }, - "node_modules/@eth-optimism/contracts": { - "version": "0.5.37", - "resolved": "https://registry.npmjs.org/@eth-optimism/contracts/-/contracts-0.5.37.tgz", - "integrity": "sha512-HbNUUDIM1dUAM0hWPfGp3l9/Zte40zi8QhVbUSIwdYRA7jG7cZgbteqavrjW8wwFqxkWX9IrtA0KAR7pNlSAIQ==", - "dependencies": { - "@eth-optimism/core-utils": "0.10.1", - "@ethersproject/abstract-provider": "^5.7.0", - "@ethersproject/abstract-signer": "^5.7.0" - }, - "peerDependencies": { - "ethers": "^5" - } - }, "node_modules/@eth-optimism/contracts-bedrock": { - "version": "0.16.0", - "resolved": "https://registry.npmjs.org/@eth-optimism/contracts-bedrock/-/contracts-bedrock-0.16.0.tgz", - "integrity": "sha512-MfHJdeQ/BzHgkoHnA+NGb1hU8CH0OFsp4ylmFi0uwYh3xPJxcHt9qhy1g4MGGMUGAPIUmlBPaqhwbBlQkaeFrA==", - "dependencies": { - "@openzeppelin/contracts": "4.7.3", - "@openzeppelin/contracts-upgradeable": "4.7.3", - "@rari-capital/solmate": "github:transmissions11/solmate#8f9b23f8838670afda0fd8983f2c41e8037ae6bc", - "clones-with-immutable-args": "github:Saw-mon-and-Natalie/clones-with-immutable-args#105efee1b9127ed7f6fedf139e1fc796ce8791f2" - } - }, - "node_modules/@eth-optimism/contracts-bedrock/node_modules/@openzeppelin/contracts": { - "version": "4.7.3", - "resolved": "https://registry.npmjs.org/@openzeppelin/contracts/-/contracts-4.7.3.tgz", - "integrity": "sha512-dGRS0agJzu8ybo44pCIf3xBaPQN/65AIXNgK8+4gzKd5kbvlqyxryUYVLJv7fK98Seyd2hDZzVEHSWAh0Bt1Yw==" - }, - "node_modules/@eth-optimism/contracts-bedrock/node_modules/@openzeppelin/contracts-upgradeable": { - "version": "4.7.3", - "resolved": "https://registry.npmjs.org/@openzeppelin/contracts-upgradeable/-/contracts-upgradeable-4.7.3.tgz", - "integrity": "sha512-+wuegAMaLcZnLCJIvrVUDzA9z/Wp93f0Dla/4jJvIhijRrPabjQbZe6fWiECLaJyfn5ci9fqf9vTw3xpQOad2A==" + "version": "0.16.2", + "resolved": "https://registry.npmjs.org/@eth-optimism/contracts-bedrock/-/contracts-bedrock-0.16.2.tgz", + "integrity": "sha512-a2+f7soDbrd6jV74U02EpyMwQt2iZeDZ4c2ZwgkObcxXUZLZQ2ELt/VRFBf8TIL3wYcBOGpUa1aXAE2oHQ7oRA==", + "hasInstallScript": true }, "node_modules/@eth-optimism/core-utils": { - "version": "0.10.1", - "resolved": "https://registry.npmjs.org/@eth-optimism/core-utils/-/core-utils-0.10.1.tgz", - "integrity": "sha512-IJvG5UtYvyz6An9QdohlCLoeB3NBFxx2lRJKlPzvYYlfugUNNCHsajRIWIwJTcPRRma0WPd46JUsKACLJDdNrA==", + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/@eth-optimism/core-utils/-/core-utils-0.12.0.tgz", + "integrity": "sha512-qW+7LZYCz7i8dRa7SRlUKIo1VBU8lvN0HeXCxJR+z+xtMzMQpPds20XJNCMclszxYQHkXY00fOT6GvFw9ZL6nw==", "dependencies": { "@ethersproject/abi": "^5.7.0", "@ethersproject/abstract-provider": "^5.7.0", @@ -1142,1041 +576,547 @@ "chai": "^4.3.4" } }, - "node_modules/@ethereum-waffle/chai": { - "version": "4.0.10", - "resolved": "https://registry.npmjs.org/@ethereum-waffle/chai/-/chai-4.0.10.tgz", - "integrity": "sha512-X5RepE7Dn8KQLFO7HHAAe+KeGaX/by14hn90wePGBhzL54tq4Y8JscZFu+/LCwCl6TnkAAy5ebiMoqJ37sFtWw==", - "dev": true, + "node_modules/@ethereumjs/block": { + "version": "3.6.3", + "resolved": "https://registry.npmjs.org/@ethereumjs/block/-/block-3.6.3.tgz", + "integrity": "sha512-CegDeryc2DVKnDkg5COQrE0bJfw/p0v3GBk2W5/Dj5dOVfEmb50Ux0GLnSPypooLnfqjwFaorGuT9FokWB3GRg==", "dependencies": { - "@ethereum-waffle/provider": "4.0.5", - "debug": "^4.3.4", - "json-bigint": "^1.0.0" - }, - "engines": { - "node": ">=10.0" - }, - "peerDependencies": { - "ethers": "*" + "@ethereumjs/common": "^2.6.5", + "@ethereumjs/tx": "^3.5.2", + "ethereumjs-util": "^7.1.5", + "merkle-patricia-tree": "^4.2.4" } }, - "node_modules/@ethereum-waffle/compiler": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/@ethereum-waffle/compiler/-/compiler-4.0.3.tgz", - "integrity": "sha512-5x5U52tSvEVJS6dpCeXXKvRKyf8GICDwiTwUvGD3/WD+DpvgvaoHOL82XqpTSUHgV3bBq6ma5/8gKUJUIAnJCw==", - "dev": true, - "dependencies": { - "@resolver-engine/imports": "^0.3.3", - "@resolver-engine/imports-fs": "^0.3.3", - "@typechain/ethers-v5": "^10.0.0", - "@types/mkdirp": "^0.5.2", - "@types/node-fetch": "^2.6.1", - "mkdirp": "^0.5.1", - "node-fetch": "^2.6.7" - }, - "engines": { - "node": ">=10.0" - }, - "peerDependencies": { - "ethers": "*", - "solc": "*", - "typechain": "^8.0.0" + "node_modules/@ethereumjs/block/node_modules/@ethereumjs/common": { + "version": "2.6.5", + "resolved": "https://registry.npmjs.org/@ethereumjs/common/-/common-2.6.5.tgz", + "integrity": "sha512-lRyVQOeCDaIVtgfbowla32pzeDv2Obr8oR8Put5RdUBNRGr1VGPGQNGP6elWIpgK3YdpzqTOh4GyUGOureVeeA==", + "dependencies": { + "crc-32": "^1.2.0", + "ethereumjs-util": "^7.1.5" } }, - "node_modules/@ethereum-waffle/ens": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/@ethereum-waffle/ens/-/ens-4.0.3.tgz", - "integrity": "sha512-PVLcdnTbaTfCrfSOrvtlA9Fih73EeDvFS28JQnT5M5P4JMplqmchhcZB1yg/fCtx4cvgHlZXa0+rOCAk2Jk0Jw==", - "dev": true, - "engines": { - "node": ">=10.0" - }, - "peerDependencies": { - "@ensdomains/ens": "^0.4.4", - "@ensdomains/resolver": "^0.2.4", - "ethers": "*" + "node_modules/@ethereumjs/block/node_modules/@ethereumjs/tx": { + "version": "3.5.2", + "resolved": "https://registry.npmjs.org/@ethereumjs/tx/-/tx-3.5.2.tgz", + "integrity": "sha512-gQDNJWKrSDGu2w7w0PzVXVBNMzb7wwdDOmOqczmhNjqFxFuIbhVJDwiGEnxFNC2/b8ifcZzY7MLcluizohRzNw==", + "dependencies": { + "@ethereumjs/common": "^2.6.4", + "ethereumjs-util": "^7.1.5" } }, - "node_modules/@ethereum-waffle/mock-contract": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/@ethereum-waffle/mock-contract/-/mock-contract-4.0.4.tgz", - "integrity": "sha512-LwEj5SIuEe9/gnrXgtqIkWbk2g15imM/qcJcxpLyAkOj981tQxXmtV4XmQMZsdedEsZ/D/rbUAOtZbgwqgUwQA==", - "dev": true, - "engines": { - "node": ">=10.0" + "node_modules/@ethereumjs/common": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/@ethereumjs/common/-/common-4.1.0.tgz", + "integrity": "sha512-XWdQvUjlQHVwh4uGEPFKHpsic69GOsMXEhlHrggS5ju/+2zAmmlz6B25TkCCymeElC9DUp13tH5Tc25Iuvtlcg==", + "dependencies": { + "@ethereumjs/util": "^9.0.1", + "crc": "^4.3.2" + } + }, + "node_modules/@ethereumjs/rlp": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/@ethereumjs/rlp/-/rlp-5.0.1.tgz", + "integrity": "sha512-Ab/Hfzz+T9Zl+65Nkg+9xAmwKPLicsnQ4NW49pgvJp9ovefuic95cgOS9CbPc9izIEgsqm1UitV0uNveCvud9w==", + "bin": { + "rlp": "bin/rlp.cjs" }, - "peerDependencies": { - "ethers": "*" + "engines": { + "node": ">=18" } }, - "node_modules/@ethereum-waffle/provider": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/@ethereum-waffle/provider/-/provider-4.0.5.tgz", - "integrity": "sha512-40uzfyzcrPh+Gbdzv89JJTMBlZwzya1YLDyim8mVbEqYLP5VRYWoGp0JMyaizgV3hMoUFRqJKVmIUw4v7r3hYw==", - "dev": true, + "node_modules/@ethereumjs/tx": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/@ethereumjs/tx/-/tx-5.1.0.tgz", + "integrity": "sha512-VUhw2+4yXArJZRWhPjmZFrN4WUjUo0qUZUszVpW2KzsGlqCFf67kwJcH9Rca5eS0CRHjr2qHJLpvYOjNuaXVdA==", "dependencies": { - "@ethereum-waffle/ens": "4.0.3", - "@ganache/ethereum-options": "0.1.4", - "debug": "^4.3.4", - "ganache": "7.4.3" + "@ethereumjs/common": "^4.1.0", + "@ethereumjs/rlp": "^5.0.1", + "@ethereumjs/util": "^9.0.1", + "ethereum-cryptography": "^2.1.2" }, "engines": { - "node": ">=10.0" + "node": ">=18" }, "peerDependencies": { - "ethers": "*" - } - }, - "node_modules/@ethereum-waffle/provider/node_modules/ganache": { - "version": "7.4.3", - "resolved": "https://registry.npmjs.org/ganache/-/ganache-7.4.3.tgz", - "integrity": "sha512-RpEDUiCkqbouyE7+NMXG26ynZ+7sGiODU84Kz+FVoXUnQ4qQM4M8wif3Y4qUCt+D/eM1RVeGq0my62FPD6Y1KA==", - "bundleDependencies": [ - "@trufflesuite/bigint-buffer", - "emittery", - "keccak", - "leveldown", - "secp256k1", - "@types/bn.js", - "@types/lru-cache", - "@types/seedrandom" - ], - "dev": true, - "hasShrinkwrap": true, - "dependencies": { - "@trufflesuite/bigint-buffer": "1.1.10", - "@types/bn.js": "^5.1.0", - "@types/lru-cache": "5.1.1", - "@types/seedrandom": "3.0.1", - "emittery": "0.10.0", - "keccak": "3.0.2", - "leveldown": "6.1.0", - "secp256k1": "4.0.3" - }, - "bin": { - "ganache": "dist/node/cli.js", - "ganache-cli": "dist/node/cli.js" + "c-kzg": "^2.1.2" }, - "optionalDependencies": { - "bufferutil": "4.0.5", - "utf-8-validate": "5.0.7" + "peerDependenciesMeta": { + "c-kzg": { + "optional": true + } } }, - "node_modules/@ethereum-waffle/provider/node_modules/ganache/node_modules/@trufflesuite/bigint-buffer": { - "version": "1.1.10", - "resolved": "https://registry.npmjs.org/@trufflesuite/bigint-buffer/-/bigint-buffer-1.1.10.tgz", - "integrity": "sha512-pYIQC5EcMmID74t26GCC67946mgTJFiLXOT/BYozgrd4UEY2JHEGLhWi9cMiQCt5BSqFEvKkCHNnoj82SRjiEw==", - "dev": true, - "hasInstallScript": true, - "inBundle": true, - "license": "Apache-2.0", + "node_modules/@ethereumjs/util": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/@ethereumjs/util/-/util-9.0.1.tgz", + "integrity": "sha512-NdFFEzCc3H1sYkNnnySwLg6owdQMhjUc2jfuDyx8Xv162WSluCnnSKouKOSG3njGNEyy2I9NmF8zTRDwuqpZWA==", "dependencies": { - "node-gyp-build": "4.4.0" + "@ethereumjs/rlp": "^5.0.1", + "ethereum-cryptography": "^2.1.2" }, "engines": { - "node": ">= 14.0.0" - } - }, - "node_modules/@ethereum-waffle/provider/node_modules/ganache/node_modules/@trufflesuite/bigint-buffer/node_modules/node-gyp-build": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.4.0.tgz", - "integrity": "sha512-amJnQCcgtRVw9SvoebO3BKGESClrfXGCUTX9hSn1OuGQTQBOZmVd0Z0OlecpuRksKvbsUqALE8jls/ErClAPuQ==", - "dev": true, - "inBundle": true, - "license": "MIT", - "bin": { - "node-gyp-build": "bin.js", - "node-gyp-build-optional": "optional.js", - "node-gyp-build-test": "build-test.js" - } - }, - "node_modules/@ethereum-waffle/provider/node_modules/ganache/node_modules/@types/bn.js": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/@types/bn.js/-/bn.js-5.1.0.tgz", - "integrity": "sha512-QSSVYj7pYFN49kW77o2s9xTCwZ8F2xLbjLLSEVh8D2F4JUhZtPAGOFLTD+ffqksBx/u4cE/KImFjyhqCjn/LIA==", - "dev": true, - "inBundle": true, - "license": "MIT", - "dependencies": { - "@types/node": "*" + "node": ">=18" + }, + "peerDependencies": { + "c-kzg": "^2.1.2" + }, + "peerDependenciesMeta": { + "c-kzg": { + "optional": true + } } }, - "node_modules/@ethereum-waffle/provider/node_modules/ganache/node_modules/@types/lru-cache": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/@types/lru-cache/-/lru-cache-5.1.1.tgz", - "integrity": "sha512-ssE3Vlrys7sdIzs5LOxCzTVMsU7i9oa/IaW92wF32JFb3CVczqOkru2xspuKczHEbG3nvmPY7IFqVmGGHdNbYw==", - "dev": true, - "inBundle": true, - "license": "MIT" - }, - "node_modules/@ethereum-waffle/provider/node_modules/ganache/node_modules/@types/node": { - "version": "17.0.0", - "resolved": "https://registry.npmjs.org/@types/node/-/node-17.0.0.tgz", - "integrity": "sha512-eMhwJXc931Ihh4tkU+Y7GiLzT/y/DBNpNtr4yU9O2w3SYBsr9NaOPhQlLKRmoWtI54uNwuo0IOUFQjVOTZYRvw==", - "dev": true, - "inBundle": true, - "license": "MIT" - }, - "node_modules/@ethereum-waffle/provider/node_modules/ganache/node_modules/@types/seedrandom": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/@types/seedrandom/-/seedrandom-3.0.1.tgz", - "integrity": "sha512-giB9gzDeiCeloIXDgzFBCgjj1k4WxcDrZtGl6h1IqmUPlxF+Nx8Ve+96QCyDZ/HseB/uvDsKbpib9hU5cU53pw==", - "dev": true, - "inBundle": true, - "license": "MIT" - }, - "node_modules/@ethereum-waffle/provider/node_modules/ganache/node_modules/base64-js": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", - "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", - "dev": true, + "node_modules/@ethersproject/abi": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/abi/-/abi-5.7.0.tgz", + "integrity": "sha512-351ktp42TiRcYB3H1OP8yajPeAQstMW/yCFokj/AthP9bLHzQFPlOrxOcwYEDkUAICmOHljvN4K39OMTMUa9RA==", "funding": [ { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" }, { - "type": "consulting", - "url": "https://feross.org/support" + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" } ], - "inBundle": true, - "license": "MIT" - }, - "node_modules/@ethereum-waffle/provider/node_modules/ganache/node_modules/brorand": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz", - "integrity": "sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8=", - "dev": true, - "inBundle": true, - "license": "MIT" + "dependencies": { + "@ethersproject/address": "^5.7.0", + "@ethersproject/bignumber": "^5.7.0", + "@ethersproject/bytes": "^5.7.0", + "@ethersproject/constants": "^5.7.0", + "@ethersproject/hash": "^5.7.0", + "@ethersproject/keccak256": "^5.7.0", + "@ethersproject/logger": "^5.7.0", + "@ethersproject/properties": "^5.7.0", + "@ethersproject/strings": "^5.7.0" + } }, - "node_modules/@ethereum-waffle/provider/node_modules/ganache/node_modules/buffer": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz", - "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==", - "dev": true, + "node_modules/@ethersproject/abstract-provider": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/abstract-provider/-/abstract-provider-5.7.0.tgz", + "integrity": "sha512-R41c9UkchKCpAqStMYUpdunjo3pkEvZC3FAwZn5S5MGbXoMQOHIdHItezTETxAO5bevtMApSyEhn9+CHcDsWBw==", "funding": [ { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" }, { - "type": "consulting", - "url": "https://feross.org/support" + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" } ], - "inBundle": true, - "license": "MIT", - "dependencies": { - "base64-js": "^1.3.1", - "ieee754": "^1.2.1" - } - }, - "node_modules/@ethereum-waffle/provider/node_modules/ganache/node_modules/bufferutil": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/bufferutil/-/bufferutil-4.0.5.tgz", - "integrity": "sha512-HTm14iMQKK2FjFLRTM5lAVcyaUzOnqbPtesFIvREgXpJHdQm8bWS+GkQgIkfaBYRHuCnea7w8UVNfwiAQhlr9A==", - "dev": true, - "optional": true, - "dependencies": { - "node-gyp-build": "^4.3.0" - } - }, - "node_modules/@ethereum-waffle/provider/node_modules/ganache/node_modules/catering": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/catering/-/catering-2.1.0.tgz", - "integrity": "sha512-M5imwzQn6y+ODBfgi+cfgZv2hIUI6oYU/0f35Mdb1ujGeqeoI5tOnl9Q13DTH7LW+7er+NYq8stNOKZD/Z3U/A==", - "dev": true, - "inBundle": true, - "license": "MIT", - "dependencies": { - "queue-tick": "^1.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/@ethereum-waffle/provider/node_modules/ganache/node_modules/elliptic": { - "version": "6.5.4", - "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.4.tgz", - "integrity": "sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ==", - "dev": true, - "inBundle": true, - "license": "MIT", "dependencies": { - "bn.js": "^4.11.9", - "brorand": "^1.1.0", - "hash.js": "^1.0.0", - "hmac-drbg": "^1.0.1", - "inherits": "^2.0.4", - "minimalistic-assert": "^1.0.1", - "minimalistic-crypto-utils": "^1.0.1" - } - }, - "node_modules/@ethereum-waffle/provider/node_modules/ganache/node_modules/elliptic/node_modules/bn.js": { - "version": "4.12.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", - "dev": true, - "inBundle": true, - "license": "MIT" - }, - "node_modules/@ethereum-waffle/provider/node_modules/ganache/node_modules/emittery": { - "version": "0.10.0", - "resolved": "https://registry.npmjs.org/emittery/-/emittery-0.10.0.tgz", - "integrity": "sha512-AGvFfs+d0JKCJQ4o01ASQLGPmSCxgfU9RFXvzPvZdjKK8oscynksuJhWrSTSw7j7Ep/sZct5b5ZhYCi8S/t0HQ==", - "dev": true, - "inBundle": true, - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sindresorhus/emittery?sponsor=1" + "@ethersproject/bignumber": "^5.7.0", + "@ethersproject/bytes": "^5.7.0", + "@ethersproject/logger": "^5.7.0", + "@ethersproject/networks": "^5.7.0", + "@ethersproject/properties": "^5.7.0", + "@ethersproject/transactions": "^5.7.0", + "@ethersproject/web": "^5.7.0" } }, - "node_modules/@ethereum-waffle/provider/node_modules/ganache/node_modules/hash.js": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.7.tgz", - "integrity": "sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==", - "dev": true, - "inBundle": true, - "license": "MIT", + "node_modules/@ethersproject/abstract-signer": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/abstract-signer/-/abstract-signer-5.7.0.tgz", + "integrity": "sha512-a16V8bq1/Cz+TGCkE2OPMTOUDLS3grCpdjoJCYNnVBbdYEMSgKrU0+B90s8b6H+ByYTBZN7a3g76jdIJi7UfKQ==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], "dependencies": { - "inherits": "^2.0.3", - "minimalistic-assert": "^1.0.1" + "@ethersproject/abstract-provider": "^5.7.0", + "@ethersproject/bignumber": "^5.7.0", + "@ethersproject/bytes": "^5.7.0", + "@ethersproject/logger": "^5.7.0", + "@ethersproject/properties": "^5.7.0" } }, - "node_modules/@ethereum-waffle/provider/node_modules/ganache/node_modules/hmac-drbg": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz", - "integrity": "sha1-0nRXAQJabHdabFRXk+1QL8DGSaE=", - "dev": true, - "inBundle": true, - "license": "MIT", + "node_modules/@ethersproject/address": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/address/-/address-5.7.0.tgz", + "integrity": "sha512-9wYhYt7aghVGo758POM5nqcOMaE168Q6aRLJZwUmiqSrAungkG74gSSeKEIR7ukixesdRZGPgVqme6vmxs1fkA==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], "dependencies": { - "hash.js": "^1.0.3", - "minimalistic-assert": "^1.0.0", - "minimalistic-crypto-utils": "^1.0.1" + "@ethersproject/bignumber": "^5.7.0", + "@ethersproject/bytes": "^5.7.0", + "@ethersproject/keccak256": "^5.7.0", + "@ethersproject/logger": "^5.7.0", + "@ethersproject/rlp": "^5.7.0" } }, - "node_modules/@ethereum-waffle/provider/node_modules/ganache/node_modules/ieee754": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", - "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", - "dev": true, + "node_modules/@ethersproject/base64": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/base64/-/base64-5.7.0.tgz", + "integrity": "sha512-Dr8tcHt2mEbsZr/mwTPIQAf3Ai0Bks/7gTw9dSqk1mQvhW3XvRlmDJr/4n+wg1JmCl16NZue17CDh8xb/vZ0sQ==", "funding": [ { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" }, { - "type": "consulting", - "url": "https://feross.org/support" + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" } ], - "inBundle": true, - "license": "BSD-3-Clause" - }, - "node_modules/@ethereum-waffle/provider/node_modules/ganache/node_modules/inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", - "dev": true, - "inBundle": true, - "license": "ISC" + "dependencies": { + "@ethersproject/bytes": "^5.7.0" + } }, - "node_modules/@ethereum-waffle/provider/node_modules/ganache/node_modules/is-buffer": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-2.0.5.tgz", - "integrity": "sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ==", - "dev": true, + "node_modules/@ethersproject/basex": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/basex/-/basex-5.7.0.tgz", + "integrity": "sha512-ywlh43GwZLv2Voc2gQVTKBoVQ1mti3d8HK5aMxsfu/nRDnMmNqaSJ3r3n85HBByT8OpoY96SXM1FogC533T4zw==", "funding": [ { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" }, { - "type": "consulting", - "url": "https://feross.org/support" + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" } ], - "inBundle": true, - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/@ethereum-waffle/provider/node_modules/ganache/node_modules/keccak": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/keccak/-/keccak-3.0.2.tgz", - "integrity": "sha512-PyKKjkH53wDMLGrvmRGSNWgmSxZOUqbnXwKL9tmgbFYA1iAYqW21kfR7mZXV0MlESiefxQQE9X9fTa3X+2MPDQ==", - "dev": true, - "hasInstallScript": true, - "inBundle": true, - "license": "MIT", "dependencies": { - "node-addon-api": "^2.0.0", - "node-gyp-build": "^4.2.0", - "readable-stream": "^3.6.0" - }, - "engines": { - "node": ">=10.0.0" + "@ethersproject/bytes": "^5.7.0", + "@ethersproject/properties": "^5.7.0" } }, - "node_modules/@ethereum-waffle/provider/node_modules/ganache/node_modules/leveldown": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/leveldown/-/leveldown-6.1.0.tgz", - "integrity": "sha512-8C7oJDT44JXxh04aSSsfcMI8YiaGRhOFI9/pMEL7nWJLVsWajDPTRxsSHTM2WcTVY5nXM+SuRHzPPi0GbnDX+w==", - "dev": true, - "hasInstallScript": true, - "inBundle": true, - "license": "MIT", + "node_modules/@ethersproject/bignumber": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/bignumber/-/bignumber-5.7.0.tgz", + "integrity": "sha512-n1CAdIHRWjSucQO3MC1zPSVgV/6dy/fjL9pMrPP9peL+QxEg9wOsVqwD4+818B6LUEtaXzVHQiuivzRoxPxUGw==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], "dependencies": { - "abstract-leveldown": "^7.2.0", - "napi-macros": "~2.0.0", - "node-gyp-build": "^4.3.0" - }, - "engines": { - "node": ">=10.12.0" + "@ethersproject/bytes": "^5.7.0", + "@ethersproject/logger": "^5.7.0", + "bn.js": "^5.2.1" } }, - "node_modules/@ethereum-waffle/provider/node_modules/ganache/node_modules/leveldown/node_modules/abstract-leveldown": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/abstract-leveldown/-/abstract-leveldown-7.2.0.tgz", - "integrity": "sha512-DnhQwcFEaYsvYDnACLZhMmCWd3rkOeEvglpa4q5i/5Jlm3UIsWaxVzuXvDLFCSCWRO3yy2/+V/G7FusFgejnfQ==", - "dev": true, - "inBundle": true, - "license": "MIT", + "node_modules/@ethersproject/bytes": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/bytes/-/bytes-5.7.0.tgz", + "integrity": "sha512-nsbxwgFXWh9NyYWo+U8atvmMsSdKJprTcICAkvbBffT75qDocbuggBU0SJiVK2MuTrp0q+xvLkTnGMPK1+uA9A==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], "dependencies": { - "buffer": "^6.0.3", - "catering": "^2.0.0", - "is-buffer": "^2.0.5", - "level-concat-iterator": "^3.0.0", - "level-supports": "^2.0.1", - "queue-microtask": "^1.2.3" - }, - "engines": { - "node": ">=10" + "@ethersproject/logger": "^5.7.0" } }, - "node_modules/@ethereum-waffle/provider/node_modules/ganache/node_modules/leveldown/node_modules/level-concat-iterator": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/level-concat-iterator/-/level-concat-iterator-3.1.0.tgz", - "integrity": "sha512-BWRCMHBxbIqPxJ8vHOvKUsaO0v1sLYZtjN3K2iZJsRBYtp+ONsY6Jfi6hy9K3+zolgQRryhIn2NRZjZnWJ9NmQ==", - "dev": true, - "inBundle": true, - "license": "MIT", + "node_modules/@ethersproject/constants": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/constants/-/constants-5.7.0.tgz", + "integrity": "sha512-DHI+y5dBNvkpYUMiRQyxRBYBefZkJfo70VUkUAsRjcPs47muV9evftfZ0PJVCXYbAiCgght0DtcF9srFQmIgWA==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], "dependencies": { - "catering": "^2.1.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/@ethereum-waffle/provider/node_modules/ganache/node_modules/leveldown/node_modules/level-supports": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/level-supports/-/level-supports-2.1.0.tgz", - "integrity": "sha512-E486g1NCjW5cF78KGPrMDRBYzPuueMZ6VBXHT6gC7A8UYWGiM14fGgp+s/L1oFfDWSPV/+SFkYCmZ0SiESkRKA==", - "dev": true, - "inBundle": true, - "license": "MIT", - "engines": { - "node": ">=10" - } - }, - "node_modules/@ethereum-waffle/provider/node_modules/ganache/node_modules/minimalistic-assert": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", - "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==", - "dev": true, - "inBundle": true, - "license": "ISC" - }, - "node_modules/@ethereum-waffle/provider/node_modules/ganache/node_modules/minimalistic-crypto-utils": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz", - "integrity": "sha1-9sAMHAsIIkblxNmd+4x8CDsrWCo=", - "dev": true, - "inBundle": true, - "license": "MIT" - }, - "node_modules/@ethereum-waffle/provider/node_modules/ganache/node_modules/napi-macros": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/napi-macros/-/napi-macros-2.0.0.tgz", - "integrity": "sha512-A0xLykHtARfueITVDernsAWdtIMbOJgKgcluwENp3AlsKN/PloyO10HtmoqnFAQAcxPkgZN7wdfPfEd0zNGxbg==", - "dev": true, - "inBundle": true, - "license": "MIT" - }, - "node_modules/@ethereum-waffle/provider/node_modules/ganache/node_modules/node-addon-api": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-2.0.2.tgz", - "integrity": "sha512-Ntyt4AIXyaLIuMHF6IOoTakB3K+RWxwtsHNRxllEoA6vPwP9o4866g6YWDLUdnucilZhmkxiHwHr11gAENw+QA==", - "dev": true, - "inBundle": true, - "license": "MIT" - }, - "node_modules/@ethereum-waffle/provider/node_modules/ganache/node_modules/node-gyp-build": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.3.0.tgz", - "integrity": "sha512-iWjXZvmboq0ja1pUGULQBexmxq8CV4xBhX7VDOTbL7ZR4FOowwY/VOtRxBN/yKxmdGoIp4j5ysNT4u3S2pDQ3Q==", - "dev": true, - "inBundle": true, - "license": "MIT", - "bin": { - "node-gyp-build": "bin.js", - "node-gyp-build-optional": "optional.js", - "node-gyp-build-test": "build-test.js" + "@ethersproject/bignumber": "^5.7.0" } }, - "node_modules/@ethereum-waffle/provider/node_modules/ganache/node_modules/queue-microtask": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", - "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", - "dev": true, + "node_modules/@ethersproject/contracts": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/contracts/-/contracts-5.7.0.tgz", + "integrity": "sha512-5GJbzEU3X+d33CdfPhcyS+z8MzsTrBGk/sc+G+59+tPa9yFkl6HQ9D6L0QMgNTA9q8dT0XKxxkyp883XsQvbbg==", "funding": [ { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" }, { - "type": "consulting", - "url": "https://feross.org/support" + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" } ], - "inBundle": true, - "license": "MIT" - }, - "node_modules/@ethereum-waffle/provider/node_modules/ganache/node_modules/queue-tick": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/queue-tick/-/queue-tick-1.0.0.tgz", - "integrity": "sha512-ULWhjjE8BmiICGn3G8+1L9wFpERNxkf8ysxkAer4+TFdRefDaXOCV5m92aMB9FtBVmn/8sETXLXY6BfW7hyaWQ==", - "dev": true, - "inBundle": true, - "license": "MIT" - }, - "node_modules/@ethereum-waffle/provider/node_modules/ganache/node_modules/readable-stream": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", - "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", - "dev": true, - "inBundle": true, - "license": "MIT", "dependencies": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - }, - "engines": { - "node": ">= 6" + "@ethersproject/abi": "^5.7.0", + "@ethersproject/abstract-provider": "^5.7.0", + "@ethersproject/abstract-signer": "^5.7.0", + "@ethersproject/address": "^5.7.0", + "@ethersproject/bignumber": "^5.7.0", + "@ethersproject/bytes": "^5.7.0", + "@ethersproject/constants": "^5.7.0", + "@ethersproject/logger": "^5.7.0", + "@ethersproject/properties": "^5.7.0", + "@ethersproject/transactions": "^5.7.0" } }, - "node_modules/@ethereum-waffle/provider/node_modules/ganache/node_modules/safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", - "dev": true, + "node_modules/@ethersproject/hardware-wallets": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/hardware-wallets/-/hardware-wallets-5.7.0.tgz", + "integrity": "sha512-DjMMXIisRc8xFvEoLoYz1w7JDOYmaz/a0X9sp7Zu668RR8U1zCAyj5ow25HLRW+TCzEC5XiFetTXqS5kXonFCQ==", "funding": [ { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" }, { - "type": "consulting", - "url": "https://feross.org/support" + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" } ], - "inBundle": true, - "license": "MIT" - }, - "node_modules/@ethereum-waffle/provider/node_modules/ganache/node_modules/secp256k1": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/secp256k1/-/secp256k1-4.0.3.tgz", - "integrity": "sha512-NLZVf+ROMxwtEj3Xa562qgv2BK5e2WNmXPiOdVIPLgs6lyTzMvBq0aWTYMI5XCP9jZMVKOcqZLw/Wc4vDkuxhA==", - "dev": true, - "hasInstallScript": true, - "inBundle": true, - "license": "MIT", "dependencies": { - "elliptic": "^6.5.4", - "node-addon-api": "^2.0.0", - "node-gyp-build": "^4.2.0" + "@ledgerhq/hw-app-eth": "5.27.2", + "@ledgerhq/hw-transport": "5.26.0", + "@ledgerhq/hw-transport-u2f": "5.26.0", + "ethers": "^5.7.0" }, - "engines": { - "node": ">=10.0.0" - } - }, - "node_modules/@ethereum-waffle/provider/node_modules/ganache/node_modules/string_decoder": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", - "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", - "dev": true, - "inBundle": true, - "license": "MIT", - "dependencies": { - "safe-buffer": "~5.2.0" - } - }, - "node_modules/@ethereum-waffle/provider/node_modules/ganache/node_modules/utf-8-validate": { - "version": "5.0.7", - "resolved": "https://registry.npmjs.org/utf-8-validate/-/utf-8-validate-5.0.7.tgz", - "integrity": "sha512-vLt1O5Pp+flcArHGIyKEQq883nBt8nN8tVBcoL0qUXj2XT1n7p70yGIq2VK98I5FdZ1YHc0wk/koOnHjnXWk1Q==", - "dev": true, - "optional": true, - "dependencies": { - "node-gyp-build": "^4.3.0" + "optionalDependencies": { + "@ledgerhq/hw-transport-node-hid": "5.26.0" } }, - "node_modules/@ethereum-waffle/provider/node_modules/ganache/node_modules/util-deprecate": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", - "dev": true, - "inBundle": true, - "license": "MIT" - }, - "node_modules/@ethereumjs/block": { - "version": "3.6.3", - "resolved": "https://registry.npmjs.org/@ethereumjs/block/-/block-3.6.3.tgz", - "integrity": "sha512-CegDeryc2DVKnDkg5COQrE0bJfw/p0v3GBk2W5/Dj5dOVfEmb50Ux0GLnSPypooLnfqjwFaorGuT9FokWB3GRg==", + "node_modules/@ethersproject/hardware-wallets/node_modules/ethers": { + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/ethers/-/ethers-5.7.2.tgz", + "integrity": "sha512-wswUsmWo1aOK8rR7DIKiWSw9DbLWe6x98Jrn8wcTflTVvaXhAMaB5zGAXy0GYQEQp9iO1iSHWVyARQm11zUtyg==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], "dependencies": { - "@ethereumjs/common": "^2.6.5", - "@ethereumjs/tx": "^3.5.2", - "ethereumjs-util": "^7.1.5", - "merkle-patricia-tree": "^4.2.4" - } - }, - "node_modules/@ethereumjs/block/node_modules/@ethereumjs/common": { - "version": "2.6.5", - "resolved": "https://registry.npmjs.org/@ethereumjs/common/-/common-2.6.5.tgz", - "integrity": "sha512-lRyVQOeCDaIVtgfbowla32pzeDv2Obr8oR8Put5RdUBNRGr1VGPGQNGP6elWIpgK3YdpzqTOh4GyUGOureVeeA==", - "dependencies": { - "crc-32": "^1.2.0", - "ethereumjs-util": "^7.1.5" - } - }, - "node_modules/@ethereumjs/block/node_modules/@ethereumjs/tx": { - "version": "3.5.2", - "resolved": "https://registry.npmjs.org/@ethereumjs/tx/-/tx-3.5.2.tgz", - "integrity": "sha512-gQDNJWKrSDGu2w7w0PzVXVBNMzb7wwdDOmOqczmhNjqFxFuIbhVJDwiGEnxFNC2/b8ifcZzY7MLcluizohRzNw==", - "dependencies": { - "@ethereumjs/common": "^2.6.4", - "ethereumjs-util": "^7.1.5" - } - }, - "node_modules/@ethereumjs/blockchain": { - "version": "5.5.3", - "resolved": "https://registry.npmjs.org/@ethereumjs/blockchain/-/blockchain-5.5.3.tgz", - "integrity": "sha512-bi0wuNJ1gw4ByNCV56H0Z4Q7D+SxUbwyG12Wxzbvqc89PXLRNR20LBcSUZRKpN0+YCPo6m0XZL/JLio3B52LTw==", - "dev": true, - "dependencies": { - "@ethereumjs/block": "^3.6.2", - "@ethereumjs/common": "^2.6.4", - "@ethereumjs/ethash": "^1.1.0", - "debug": "^4.3.3", - "ethereumjs-util": "^7.1.5", - "level-mem": "^5.0.1", - "lru-cache": "^5.1.1", - "semaphore-async-await": "^1.5.1" - } - }, - "node_modules/@ethereumjs/blockchain/node_modules/@ethereumjs/common": { - "version": "2.6.5", - "resolved": "https://registry.npmjs.org/@ethereumjs/common/-/common-2.6.5.tgz", - "integrity": "sha512-lRyVQOeCDaIVtgfbowla32pzeDv2Obr8oR8Put5RdUBNRGr1VGPGQNGP6elWIpgK3YdpzqTOh4GyUGOureVeeA==", - "dev": true, - "dependencies": { - "crc-32": "^1.2.0", - "ethereumjs-util": "^7.1.5" - } - }, - "node_modules/@ethereumjs/common": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/@ethereumjs/common/-/common-3.1.2.tgz", - "integrity": "sha512-YV+bZfRlFhAXg+FfwC5r4UQKVj4OG7vDP5/JvvNXLLbYpNplH5Vca9jD0L+ab8y0YlTYJMQM1ALyHFu3AE3eBA==", - "dependencies": { - "@ethereumjs/util": "^8.0.6", - "crc-32": "^1.2.0" - } - }, - "node_modules/@ethereumjs/ethash": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@ethereumjs/ethash/-/ethash-1.1.0.tgz", - "integrity": "sha512-/U7UOKW6BzpA+Vt+kISAoeDie1vAvY4Zy2KF5JJb+So7+1yKmJeJEHOGSnQIj330e9Zyl3L5Nae6VZyh2TJnAA==", - "dev": true, - "dependencies": { - "@ethereumjs/block": "^3.5.0", - "@types/levelup": "^4.3.0", - "buffer-xor": "^2.0.1", - "ethereumjs-util": "^7.1.1", - "miller-rabin": "^4.0.0" - } - }, - "node_modules/@ethereumjs/ethash/node_modules/buffer-xor": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/buffer-xor/-/buffer-xor-2.0.2.tgz", - "integrity": "sha512-eHslX0bin3GB+Lx2p7lEYRShRewuNZL3fUl4qlVJGGiwoPGftmt8JQgk2Y9Ji5/01TnVDo33E5b5O3vUB1HdqQ==", - "dev": true, - "dependencies": { - "safe-buffer": "^5.1.1" - } - }, - "node_modules/@ethereumjs/rlp": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/@ethereumjs/rlp/-/rlp-4.0.1.tgz", - "integrity": "sha512-tqsQiBQDQdmPWE1xkkBq4rlSW5QZpLOUJ5RJh2/9fug+q9tnUhuZoVLk7s0scUIKTOzEtR72DFBXI4WiZcMpvw==", - "bin": { - "rlp": "bin/rlp" - }, - "engines": { - "node": ">=14" - } - }, - "node_modules/@ethereumjs/tx": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/@ethereumjs/tx/-/tx-4.1.2.tgz", - "integrity": "sha512-PWWyO9lAFOiLwk7nB9OQisoJUsuvMz2PN2v4/ILbBpzamC5Ug79OddVq9r4rKvIDLPY+bn4NFerxBJg29+sjaA==", - "dependencies": { - "@chainsafe/ssz": "^0.11.1", - "@ethereumjs/common": "^3.1.2", - "@ethereumjs/rlp": "^4.0.1", - "@ethereumjs/util": "^8.0.6", - "ethereum-cryptography": "^2.0.0" - }, - "engines": { - "node": ">=14" - }, - "peerDependencies": { - "c-kzg": "^1.0.8" - }, - "peerDependenciesMeta": { - "c-kzg": { - "optional": true - } - } - }, - "node_modules/@ethereumjs/tx/node_modules/@chainsafe/as-sha256": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/@chainsafe/as-sha256/-/as-sha256-0.4.1.tgz", - "integrity": "sha512-IqeeGwQihK6Y2EYLFofqs2eY2ep1I2MvQXHzOAI+5iQN51OZlUkrLgyAugu2x86xZewDk5xas7lNczkzFzF62w==" - }, - "node_modules/@ethereumjs/tx/node_modules/@chainsafe/persistent-merkle-tree": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/@chainsafe/persistent-merkle-tree/-/persistent-merkle-tree-0.6.1.tgz", - "integrity": "sha512-gcENLemRR13+1MED2NeZBMA7FRS0xQPM7L2vhMqvKkjqtFT4YfjSVADq5U0iLuQLhFUJEMVuA8fbv5v+TN6O9A==", - "dependencies": { - "@chainsafe/as-sha256": "^0.4.1", - "@noble/hashes": "^1.3.0" - } - }, - "node_modules/@ethereumjs/tx/node_modules/@chainsafe/ssz": { - "version": "0.11.1", - "resolved": "https://registry.npmjs.org/@chainsafe/ssz/-/ssz-0.11.1.tgz", - "integrity": "sha512-cB8dBkgGN6ZoeOKuk+rIRHKN0L5i9JLGeC0Lui71QX0TuLcQKwgbfkUexpyJxnGFatWf8yeJxlOjozMn/OTP0g==", - "dependencies": { - "@chainsafe/as-sha256": "^0.4.1", - "@chainsafe/persistent-merkle-tree": "^0.6.1" + "@ethersproject/abi": "5.7.0", + "@ethersproject/abstract-provider": "5.7.0", + "@ethersproject/abstract-signer": "5.7.0", + "@ethersproject/address": "5.7.0", + "@ethersproject/base64": "5.7.0", + "@ethersproject/basex": "5.7.0", + "@ethersproject/bignumber": "5.7.0", + "@ethersproject/bytes": "5.7.0", + "@ethersproject/constants": "5.7.0", + "@ethersproject/contracts": "5.7.0", + "@ethersproject/hash": "5.7.0", + "@ethersproject/hdnode": "5.7.0", + "@ethersproject/json-wallets": "5.7.0", + "@ethersproject/keccak256": "5.7.0", + "@ethersproject/logger": "5.7.0", + "@ethersproject/networks": "5.7.1", + "@ethersproject/pbkdf2": "5.7.0", + "@ethersproject/properties": "5.7.0", + "@ethersproject/providers": "5.7.2", + "@ethersproject/random": "5.7.0", + "@ethersproject/rlp": "5.7.0", + "@ethersproject/sha2": "5.7.0", + "@ethersproject/signing-key": "5.7.0", + "@ethersproject/solidity": "5.7.0", + "@ethersproject/strings": "5.7.0", + "@ethersproject/transactions": "5.7.0", + "@ethersproject/units": "5.7.0", + "@ethersproject/wallet": "5.7.0", + "@ethersproject/web": "5.7.1", + "@ethersproject/wordlists": "5.7.0" } }, - "node_modules/@ethereumjs/tx/node_modules/@noble/curves": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@noble/curves/-/curves-1.0.0.tgz", - "integrity": "sha512-2upgEu0iLiDVDZkNLeFV2+ht0BAVgQnEmCk6JsOch9Rp8xfkMCbvbAZlA2pBHQc73dbl+vFOXfqkf4uemdn0bw==", + "node_modules/@ethersproject/hash": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/hash/-/hash-5.7.0.tgz", + "integrity": "sha512-qX5WrQfnah1EFnO5zJv1v46a8HW0+E5xuBBDTwMFZLuVTx0tbU2kkx15NqdjxecrLGatQN9FGQKpb1FKdHCt+g==", "funding": [ { "type": "individual", - "url": "https://paulmillr.com/funding/" + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" } ], "dependencies": { - "@noble/hashes": "1.3.0" + "@ethersproject/abstract-signer": "^5.7.0", + "@ethersproject/address": "^5.7.0", + "@ethersproject/base64": "^5.7.0", + "@ethersproject/bignumber": "^5.7.0", + "@ethersproject/bytes": "^5.7.0", + "@ethersproject/keccak256": "^5.7.0", + "@ethersproject/logger": "^5.7.0", + "@ethersproject/properties": "^5.7.0", + "@ethersproject/strings": "^5.7.0" } }, - "node_modules/@ethereumjs/tx/node_modules/@noble/curves/node_modules/@noble/hashes": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.3.0.tgz", - "integrity": "sha512-ilHEACi9DwqJB0pw7kv+Apvh50jiiSyR/cQ3y4W7lOR5mhvn/50FLUfsnfJz0BDZtl/RR16kXvptiv6q1msYZg==", + "node_modules/@ethersproject/hdnode": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/hdnode/-/hdnode-5.7.0.tgz", + "integrity": "sha512-OmyYo9EENBPPf4ERhR7oj6uAtUAhYGqOnIS+jE5pTXvdKBS99ikzq1E7Iv0ZQZ5V36Lqx1qZLeak0Ra16qpeOg==", "funding": [ { "type": "individual", - "url": "https://paulmillr.com/funding/" - } - ] - }, - "node_modules/@ethereumjs/tx/node_modules/@noble/hashes": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.3.1.tgz", - "integrity": "sha512-EbqwksQwz9xDRGfDST86whPBgM65E0OH/pCgqW0GBVzO22bNE+NuIbeTb714+IfSjU3aRk47EUvXIb5bTsenKA==", - "engines": { - "node": ">= 16" - }, - "funding": { - "url": "https://paulmillr.com/funding/" - } - }, - "node_modules/@ethereumjs/tx/node_modules/@scure/bip32": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/@scure/bip32/-/bip32-1.3.0.tgz", - "integrity": "sha512-bcKpo1oj54hGholplGLpqPHRbIsnbixFtc06nwuNM5/dwSXOq/AAYoIBRsBmnZJSdfeNW5rnff7NTAz3ZCqR9Q==", - "funding": [ + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, { "type": "individual", - "url": "https://paulmillr.com/funding/" + "url": "https://www.buymeacoffee.com/ricmoo" } ], "dependencies": { - "@noble/curves": "~1.0.0", - "@noble/hashes": "~1.3.0", - "@scure/base": "~1.1.0" + "@ethersproject/abstract-signer": "^5.7.0", + "@ethersproject/basex": "^5.7.0", + "@ethersproject/bignumber": "^5.7.0", + "@ethersproject/bytes": "^5.7.0", + "@ethersproject/logger": "^5.7.0", + "@ethersproject/pbkdf2": "^5.7.0", + "@ethersproject/properties": "^5.7.0", + "@ethersproject/sha2": "^5.7.0", + "@ethersproject/signing-key": "^5.7.0", + "@ethersproject/strings": "^5.7.0", + "@ethersproject/transactions": "^5.7.0", + "@ethersproject/wordlists": "^5.7.0" } }, - "node_modules/@ethereumjs/tx/node_modules/@scure/bip39": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@scure/bip39/-/bip39-1.2.0.tgz", - "integrity": "sha512-SX/uKq52cuxm4YFXWFaVByaSHJh2w3BnokVSeUJVCv6K7WulT9u2BuNRBhuFl8vAuYnzx9bEu9WgpcNYTrYieg==", + "node_modules/@ethersproject/json-wallets": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/json-wallets/-/json-wallets-5.7.0.tgz", + "integrity": "sha512-8oee5Xgu6+RKgJTkvEMl2wDgSPSAQ9MB/3JYjFV9jlKvcYHUXZC+cQp0njgmxdHkYWn8s6/IqIZYm0YWCjO/0g==", "funding": [ { "type": "individual", - "url": "https://paulmillr.com/funding/" + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" } ], "dependencies": { - "@noble/hashes": "~1.3.0", - "@scure/base": "~1.1.0" + "@ethersproject/abstract-signer": "^5.7.0", + "@ethersproject/address": "^5.7.0", + "@ethersproject/bytes": "^5.7.0", + "@ethersproject/hdnode": "^5.7.0", + "@ethersproject/keccak256": "^5.7.0", + "@ethersproject/logger": "^5.7.0", + "@ethersproject/pbkdf2": "^5.7.0", + "@ethersproject/properties": "^5.7.0", + "@ethersproject/random": "^5.7.0", + "@ethersproject/strings": "^5.7.0", + "@ethersproject/transactions": "^5.7.0", + "aes-js": "3.0.0", + "scrypt-js": "3.0.1" } }, - "node_modules/@ethereumjs/tx/node_modules/ethereum-cryptography": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-2.0.0.tgz", - "integrity": "sha512-g25m4EtfQGjstWgVE1aIz7XYYjf3kH5kG17ULWVB5dH6uLahsoltOhACzSxyDV+fhn4gbR4xRrOXGe6r2uh4Bg==", - "dependencies": { - "@noble/curves": "1.0.0", - "@noble/hashes": "1.3.0", - "@scure/bip32": "1.3.0", - "@scure/bip39": "1.2.0" - } + "node_modules/@ethersproject/json-wallets/node_modules/aes-js": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/aes-js/-/aes-js-3.0.0.tgz", + "integrity": "sha512-H7wUZRn8WpTq9jocdxQ2c8x2sKo9ZVmzfRE13GiNJXfp7NcKYEdvl3vspKjXox6RIG2VtaRe4JFvxG4rqp2Zuw==" }, - "node_modules/@ethereumjs/tx/node_modules/ethereum-cryptography/node_modules/@noble/hashes": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.3.0.tgz", - "integrity": "sha512-ilHEACi9DwqJB0pw7kv+Apvh50jiiSyR/cQ3y4W7lOR5mhvn/50FLUfsnfJz0BDZtl/RR16kXvptiv6q1msYZg==", + "node_modules/@ethersproject/keccak256": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/keccak256/-/keccak256-5.7.0.tgz", + "integrity": "sha512-2UcPboeL/iW+pSg6vZ6ydF8tCnv3Iu/8tUmLLzWWGzxWKFFqOBQFLo6uLUv6BDrLgCDfN28RJ/wtByx+jZ4KBg==", "funding": [ { "type": "individual", - "url": "https://paulmillr.com/funding/" - } - ] - }, - "node_modules/@ethereumjs/util": { - "version": "8.0.6", - "resolved": "https://registry.npmjs.org/@ethereumjs/util/-/util-8.0.6.tgz", - "integrity": "sha512-zFLG/gXtF3QUC7iKFn4PT6HCr+DEnlCbwUGKGtXoqjA+64T+e0FuqMjlo4bQIY2ngRzk3EtudKdGYC4g31ehhg==", - "dependencies": { - "@chainsafe/ssz": "^0.11.1", - "@ethereumjs/rlp": "^4.0.1", - "ethereum-cryptography": "^2.0.0", - "micro-ftch": "^0.3.1" - }, - "engines": { - "node": ">=14" - } - }, - "node_modules/@ethereumjs/util/node_modules/@chainsafe/as-sha256": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/@chainsafe/as-sha256/-/as-sha256-0.4.1.tgz", - "integrity": "sha512-IqeeGwQihK6Y2EYLFofqs2eY2ep1I2MvQXHzOAI+5iQN51OZlUkrLgyAugu2x86xZewDk5xas7lNczkzFzF62w==" - }, - "node_modules/@ethereumjs/util/node_modules/@chainsafe/persistent-merkle-tree": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/@chainsafe/persistent-merkle-tree/-/persistent-merkle-tree-0.6.1.tgz", - "integrity": "sha512-gcENLemRR13+1MED2NeZBMA7FRS0xQPM7L2vhMqvKkjqtFT4YfjSVADq5U0iLuQLhFUJEMVuA8fbv5v+TN6O9A==", - "dependencies": { - "@chainsafe/as-sha256": "^0.4.1", - "@noble/hashes": "^1.3.0" - } - }, - "node_modules/@ethereumjs/util/node_modules/@chainsafe/ssz": { - "version": "0.11.1", - "resolved": "https://registry.npmjs.org/@chainsafe/ssz/-/ssz-0.11.1.tgz", - "integrity": "sha512-cB8dBkgGN6ZoeOKuk+rIRHKN0L5i9JLGeC0Lui71QX0TuLcQKwgbfkUexpyJxnGFatWf8yeJxlOjozMn/OTP0g==", - "dependencies": { - "@chainsafe/as-sha256": "^0.4.1", - "@chainsafe/persistent-merkle-tree": "^0.6.1" - } - }, - "node_modules/@ethereumjs/util/node_modules/@noble/curves": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@noble/curves/-/curves-1.0.0.tgz", - "integrity": "sha512-2upgEu0iLiDVDZkNLeFV2+ht0BAVgQnEmCk6JsOch9Rp8xfkMCbvbAZlA2pBHQc73dbl+vFOXfqkf4uemdn0bw==", - "funding": [ + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, { "type": "individual", - "url": "https://paulmillr.com/funding/" + "url": "https://www.buymeacoffee.com/ricmoo" } ], "dependencies": { - "@noble/hashes": "1.3.0" + "@ethersproject/bytes": "^5.7.0", + "js-sha3": "0.8.0" } }, - "node_modules/@ethereumjs/util/node_modules/@noble/curves/node_modules/@noble/hashes": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.3.0.tgz", - "integrity": "sha512-ilHEACi9DwqJB0pw7kv+Apvh50jiiSyR/cQ3y4W7lOR5mhvn/50FLUfsnfJz0BDZtl/RR16kXvptiv6q1msYZg==", + "node_modules/@ethersproject/logger": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/logger/-/logger-5.7.0.tgz", + "integrity": "sha512-0odtFdXu/XHtjQXJYA3u9G0G8btm0ND5Cu8M7i5vhEcE8/HmF4Lbdqanwyv4uQTr2tx6b7fQRmgLrsnpQlmnig==", "funding": [ { "type": "individual", - "url": "https://paulmillr.com/funding/" + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" } ] }, - "node_modules/@ethereumjs/util/node_modules/@noble/hashes": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.3.1.tgz", - "integrity": "sha512-EbqwksQwz9xDRGfDST86whPBgM65E0OH/pCgqW0GBVzO22bNE+NuIbeTb714+IfSjU3aRk47EUvXIb5bTsenKA==", - "engines": { - "node": ">= 16" - }, - "funding": { - "url": "https://paulmillr.com/funding/" - } - }, - "node_modules/@ethereumjs/util/node_modules/@scure/bip32": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/@scure/bip32/-/bip32-1.3.0.tgz", - "integrity": "sha512-bcKpo1oj54hGholplGLpqPHRbIsnbixFtc06nwuNM5/dwSXOq/AAYoIBRsBmnZJSdfeNW5rnff7NTAz3ZCqR9Q==", + "node_modules/@ethersproject/networks": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/@ethersproject/networks/-/networks-5.7.1.tgz", + "integrity": "sha512-n/MufjFYv3yFcUyfhnXotyDlNdFb7onmkSy8aQERi2PjNcnWQ66xXxa3XlS8nCcA8aJKJjIIMNJTC7tu80GwpQ==", "funding": [ { "type": "individual", - "url": "https://paulmillr.com/funding/" - } - ], - "dependencies": { - "@noble/curves": "~1.0.0", - "@noble/hashes": "~1.3.0", - "@scure/base": "~1.1.0" - } - }, - "node_modules/@ethereumjs/util/node_modules/@scure/bip39": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@scure/bip39/-/bip39-1.2.0.tgz", - "integrity": "sha512-SX/uKq52cuxm4YFXWFaVByaSHJh2w3BnokVSeUJVCv6K7WulT9u2BuNRBhuFl8vAuYnzx9bEu9WgpcNYTrYieg==", - "funding": [ + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, { "type": "individual", - "url": "https://paulmillr.com/funding/" + "url": "https://www.buymeacoffee.com/ricmoo" } ], "dependencies": { - "@noble/hashes": "~1.3.0", - "@scure/base": "~1.1.0" - } - }, - "node_modules/@ethereumjs/util/node_modules/ethereum-cryptography": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-2.0.0.tgz", - "integrity": "sha512-g25m4EtfQGjstWgVE1aIz7XYYjf3kH5kG17ULWVB5dH6uLahsoltOhACzSxyDV+fhn4gbR4xRrOXGe6r2uh4Bg==", - "dependencies": { - "@noble/curves": "1.0.0", - "@noble/hashes": "1.3.0", - "@scure/bip32": "1.3.0", - "@scure/bip39": "1.2.0" + "@ethersproject/logger": "^5.7.0" } }, - "node_modules/@ethereumjs/util/node_modules/ethereum-cryptography/node_modules/@noble/hashes": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.3.0.tgz", - "integrity": "sha512-ilHEACi9DwqJB0pw7kv+Apvh50jiiSyR/cQ3y4W7lOR5mhvn/50FLUfsnfJz0BDZtl/RR16kXvptiv6q1msYZg==", + "node_modules/@ethersproject/pbkdf2": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/pbkdf2/-/pbkdf2-5.7.0.tgz", + "integrity": "sha512-oR/dBRZR6GTyaofd86DehG72hY6NpAjhabkhxgr3X2FpJtJuodEl2auADWBZfhDHgVCbu3/H/Ocq2uC6dpNjjw==", "funding": [ { "type": "individual", - "url": "https://paulmillr.com/funding/" + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" } - ] - }, - "node_modules/@ethereumjs/vm": { - "version": "5.6.0", - "resolved": "https://registry.npmjs.org/@ethereumjs/vm/-/vm-5.6.0.tgz", - "integrity": "sha512-J2m/OgjjiGdWF2P9bj/4LnZQ1zRoZhY8mRNVw/N3tXliGI8ai1sI1mlDPkLpeUUM4vq54gH6n0ZlSpz8U/qlYQ==", - "dev": true, - "dependencies": { - "@ethereumjs/block": "^3.6.0", - "@ethereumjs/blockchain": "^5.5.0", - "@ethereumjs/common": "^2.6.0", - "@ethereumjs/tx": "^3.4.0", - "async-eventemitter": "^0.2.4", - "core-js-pure": "^3.0.1", - "debug": "^2.2.0", - "ethereumjs-util": "^7.1.3", - "functional-red-black-tree": "^1.0.1", - "mcl-wasm": "^0.7.1", - "merkle-patricia-tree": "^4.2.2", - "rustbn.js": "~0.2.0" - } - }, - "node_modules/@ethereumjs/vm/node_modules/@ethereumjs/common": { - "version": "2.6.5", - "resolved": "https://registry.npmjs.org/@ethereumjs/common/-/common-2.6.5.tgz", - "integrity": "sha512-lRyVQOeCDaIVtgfbowla32pzeDv2Obr8oR8Put5RdUBNRGr1VGPGQNGP6elWIpgK3YdpzqTOh4GyUGOureVeeA==", - "dev": true, - "dependencies": { - "crc-32": "^1.2.0", - "ethereumjs-util": "^7.1.5" - } - }, - "node_modules/@ethereumjs/vm/node_modules/@ethereumjs/tx": { - "version": "3.5.2", - "resolved": "https://registry.npmjs.org/@ethereumjs/tx/-/tx-3.5.2.tgz", - "integrity": "sha512-gQDNJWKrSDGu2w7w0PzVXVBNMzb7wwdDOmOqczmhNjqFxFuIbhVJDwiGEnxFNC2/b8ifcZzY7MLcluizohRzNw==", - "dev": true, - "dependencies": { - "@ethereumjs/common": "^2.6.4", - "ethereumjs-util": "^7.1.5" - } - }, - "node_modules/@ethereumjs/vm/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, + ], "dependencies": { - "ms": "2.0.0" + "@ethersproject/bytes": "^5.7.0", + "@ethersproject/sha2": "^5.7.0" } }, - "node_modules/@ethereumjs/vm/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "dev": true - }, - "node_modules/@ethersproject/abi": { + "node_modules/@ethersproject/properties": { "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/abi/-/abi-5.7.0.tgz", - "integrity": "sha512-351ktp42TiRcYB3H1OP8yajPeAQstMW/yCFokj/AthP9bLHzQFPlOrxOcwYEDkUAICmOHljvN4K39OMTMUa9RA==", + "resolved": "https://registry.npmjs.org/@ethersproject/properties/-/properties-5.7.0.tgz", + "integrity": "sha512-J87jy8suntrAkIZtecpxEPxY//szqr1mlBaYlQ0r4RCaiD2hjheqF9s1LVE8vVuJCXisjIP+JgtK/Do54ej4Sw==", "funding": [ { "type": "individual", @@ -2188,21 +1128,13 @@ } ], "dependencies": { - "@ethersproject/address": "^5.7.0", - "@ethersproject/bignumber": "^5.7.0", - "@ethersproject/bytes": "^5.7.0", - "@ethersproject/constants": "^5.7.0", - "@ethersproject/hash": "^5.7.0", - "@ethersproject/keccak256": "^5.7.0", - "@ethersproject/logger": "^5.7.0", - "@ethersproject/properties": "^5.7.0", - "@ethersproject/strings": "^5.7.0" + "@ethersproject/logger": "^5.7.0" } }, - "node_modules/@ethersproject/abstract-provider": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/abstract-provider/-/abstract-provider-5.7.0.tgz", - "integrity": "sha512-R41c9UkchKCpAqStMYUpdunjo3pkEvZC3FAwZn5S5MGbXoMQOHIdHItezTETxAO5bevtMApSyEhn9+CHcDsWBw==", + "node_modules/@ethersproject/providers": { + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/@ethersproject/providers/-/providers-5.7.2.tgz", + "integrity": "sha512-g34EWZ1WWAVgr4aptGlVBF8mhl3VWjv+8hoAnzStu8Ah22VHBsuGzP17eb6xDVRzw895G4W7vvx60lFFur/1Rg==", "funding": [ { "type": "individual", @@ -2214,19 +1146,52 @@ } ], "dependencies": { + "@ethersproject/abstract-provider": "^5.7.0", + "@ethersproject/abstract-signer": "^5.7.0", + "@ethersproject/address": "^5.7.0", + "@ethersproject/base64": "^5.7.0", + "@ethersproject/basex": "^5.7.0", "@ethersproject/bignumber": "^5.7.0", "@ethersproject/bytes": "^5.7.0", + "@ethersproject/constants": "^5.7.0", + "@ethersproject/hash": "^5.7.0", "@ethersproject/logger": "^5.7.0", "@ethersproject/networks": "^5.7.0", "@ethersproject/properties": "^5.7.0", + "@ethersproject/random": "^5.7.0", + "@ethersproject/rlp": "^5.7.0", + "@ethersproject/sha2": "^5.7.0", + "@ethersproject/strings": "^5.7.0", "@ethersproject/transactions": "^5.7.0", - "@ethersproject/web": "^5.7.0" + "@ethersproject/web": "^5.7.0", + "bech32": "1.1.4", + "ws": "7.4.6" } }, - "node_modules/@ethersproject/abstract-signer": { + "node_modules/@ethersproject/providers/node_modules/ws": { + "version": "7.4.6", + "resolved": "https://registry.npmjs.org/ws/-/ws-7.4.6.tgz", + "integrity": "sha512-YmhHDO4MzaDLB+M9ym/mDA5z0naX8j7SIlT8f8z+I0VtzsRbekxEutHSme7NPS2qE8StCYQNUnfWdXta/Yu85A==", + "engines": { + "node": ">=8.3.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": "^5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } + } + }, + "node_modules/@ethersproject/random": { "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/abstract-signer/-/abstract-signer-5.7.0.tgz", - "integrity": "sha512-a16V8bq1/Cz+TGCkE2OPMTOUDLS3grCpdjoJCYNnVBbdYEMSgKrU0+B90s8b6H+ByYTBZN7a3g76jdIJi7UfKQ==", + "resolved": "https://registry.npmjs.org/@ethersproject/random/-/random-5.7.0.tgz", + "integrity": "sha512-19WjScqRA8IIeWclFme75VMXSBvi4e6InrUNuaR4s5pTF2qNhcGdCUwdxUVGtDDqC00sDLCO93jPQoDUH4HVmQ==", "funding": [ { "type": "individual", @@ -2238,17 +1203,14 @@ } ], "dependencies": { - "@ethersproject/abstract-provider": "^5.7.0", - "@ethersproject/bignumber": "^5.7.0", "@ethersproject/bytes": "^5.7.0", - "@ethersproject/logger": "^5.7.0", - "@ethersproject/properties": "^5.7.0" + "@ethersproject/logger": "^5.7.0" } }, - "node_modules/@ethersproject/address": { + "node_modules/@ethersproject/rlp": { "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/address/-/address-5.7.0.tgz", - "integrity": "sha512-9wYhYt7aghVGo758POM5nqcOMaE168Q6aRLJZwUmiqSrAungkG74gSSeKEIR7ukixesdRZGPgVqme6vmxs1fkA==", + "resolved": "https://registry.npmjs.org/@ethersproject/rlp/-/rlp-5.7.0.tgz", + "integrity": "sha512-rBxzX2vK8mVF7b0Tol44t5Tb8gomOHkj5guL+HhzQ1yBh/ydjGnpw6at+X6Iw0Kp3OzzzkcKp8N9r0W4kYSs9w==", "funding": [ { "type": "individual", @@ -2260,17 +1222,14 @@ } ], "dependencies": { - "@ethersproject/bignumber": "^5.7.0", "@ethersproject/bytes": "^5.7.0", - "@ethersproject/keccak256": "^5.7.0", - "@ethersproject/logger": "^5.7.0", - "@ethersproject/rlp": "^5.7.0" + "@ethersproject/logger": "^5.7.0" } }, - "node_modules/@ethersproject/base64": { + "node_modules/@ethersproject/sha2": { "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/base64/-/base64-5.7.0.tgz", - "integrity": "sha512-Dr8tcHt2mEbsZr/mwTPIQAf3Ai0Bks/7gTw9dSqk1mQvhW3XvRlmDJr/4n+wg1JmCl16NZue17CDh8xb/vZ0sQ==", + "resolved": "https://registry.npmjs.org/@ethersproject/sha2/-/sha2-5.7.0.tgz", + "integrity": "sha512-gKlH42riwb3KYp0reLsFTokByAKoJdgFCwI+CCiX/k+Jm2mbNs6oOaCjYQSlI1+XBVejwH2KrmCbMAT/GnRDQw==", "funding": [ { "type": "individual", @@ -2282,13 +1241,15 @@ } ], "dependencies": { - "@ethersproject/bytes": "^5.7.0" + "@ethersproject/bytes": "^5.7.0", + "@ethersproject/logger": "^5.7.0", + "hash.js": "1.1.7" } }, - "node_modules/@ethersproject/basex": { + "node_modules/@ethersproject/signing-key": { "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/basex/-/basex-5.7.0.tgz", - "integrity": "sha512-ywlh43GwZLv2Voc2gQVTKBoVQ1mti3d8HK5aMxsfu/nRDnMmNqaSJ3r3n85HBByT8OpoY96SXM1FogC533T4zw==", + "resolved": "https://registry.npmjs.org/@ethersproject/signing-key/-/signing-key-5.7.0.tgz", + "integrity": "sha512-MZdy2nL3wO0u7gkB4nA/pEf8lu1TlFswPNmy8AiYkfKTdO6eXBJyUdmHO/ehm/htHw9K/qF8ujnTyUAD+Ry54Q==", "funding": [ { "type": "individual", @@ -2301,13 +1262,17 @@ ], "dependencies": { "@ethersproject/bytes": "^5.7.0", - "@ethersproject/properties": "^5.7.0" + "@ethersproject/logger": "^5.7.0", + "@ethersproject/properties": "^5.7.0", + "bn.js": "^5.2.1", + "elliptic": "6.5.4", + "hash.js": "1.1.7" } }, - "node_modules/@ethersproject/bignumber": { + "node_modules/@ethersproject/solidity": { "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/bignumber/-/bignumber-5.7.0.tgz", - "integrity": "sha512-n1CAdIHRWjSucQO3MC1zPSVgV/6dy/fjL9pMrPP9peL+QxEg9wOsVqwD4+818B6LUEtaXzVHQiuivzRoxPxUGw==", + "resolved": "https://registry.npmjs.org/@ethersproject/solidity/-/solidity-5.7.0.tgz", + "integrity": "sha512-HmabMd2Dt/raavyaGukF4XxizWKhKQ24DoLtdNbBmNKUOPqwjsKQSdV9GQtj9CBEea9DlzETlVER1gYeXXBGaA==", "funding": [ { "type": "individual", @@ -2319,15 +1284,18 @@ } ], "dependencies": { + "@ethersproject/bignumber": "^5.7.0", "@ethersproject/bytes": "^5.7.0", + "@ethersproject/keccak256": "^5.7.0", "@ethersproject/logger": "^5.7.0", - "bn.js": "^5.2.1" + "@ethersproject/sha2": "^5.7.0", + "@ethersproject/strings": "^5.7.0" } }, - "node_modules/@ethersproject/bytes": { + "node_modules/@ethersproject/strings": { "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/bytes/-/bytes-5.7.0.tgz", - "integrity": "sha512-nsbxwgFXWh9NyYWo+U8atvmMsSdKJprTcICAkvbBffT75qDocbuggBU0SJiVK2MuTrp0q+xvLkTnGMPK1+uA9A==", + "resolved": "https://registry.npmjs.org/@ethersproject/strings/-/strings-5.7.0.tgz", + "integrity": "sha512-/9nu+lj0YswRNSH0NXYqrh8775XNyEdUQAuf3f+SmOrnVewcJ5SBNAjF7lpgehKi4abvNNXyf+HX86czCdJ8Mg==", "funding": [ { "type": "individual", @@ -2339,13 +1307,15 @@ } ], "dependencies": { + "@ethersproject/bytes": "^5.7.0", + "@ethersproject/constants": "^5.7.0", "@ethersproject/logger": "^5.7.0" } }, - "node_modules/@ethersproject/constants": { + "node_modules/@ethersproject/transactions": { "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/constants/-/constants-5.7.0.tgz", - "integrity": "sha512-DHI+y5dBNvkpYUMiRQyxRBYBefZkJfo70VUkUAsRjcPs47muV9evftfZ0PJVCXYbAiCgght0DtcF9srFQmIgWA==", + "resolved": "https://registry.npmjs.org/@ethersproject/transactions/-/transactions-5.7.0.tgz", + "integrity": "sha512-kmcNicCp1lp8qanMTC3RIikGgoJ80ztTyvtsFvCYpSCfkjhD0jZ2LOrnbcuxuToLIUYYf+4XwD1rP+B/erDIhQ==", "funding": [ { "type": "individual", @@ -2357,13 +1327,21 @@ } ], "dependencies": { - "@ethersproject/bignumber": "^5.7.0" + "@ethersproject/address": "^5.7.0", + "@ethersproject/bignumber": "^5.7.0", + "@ethersproject/bytes": "^5.7.0", + "@ethersproject/constants": "^5.7.0", + "@ethersproject/keccak256": "^5.7.0", + "@ethersproject/logger": "^5.7.0", + "@ethersproject/properties": "^5.7.0", + "@ethersproject/rlp": "^5.7.0", + "@ethersproject/signing-key": "^5.7.0" } }, - "node_modules/@ethersproject/contracts": { + "node_modules/@ethersproject/units": { "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/contracts/-/contracts-5.7.0.tgz", - "integrity": "sha512-5GJbzEU3X+d33CdfPhcyS+z8MzsTrBGk/sc+G+59+tPa9yFkl6HQ9D6L0QMgNTA9q8dT0XKxxkyp883XsQvbbg==", + "resolved": "https://registry.npmjs.org/@ethersproject/units/-/units-5.7.0.tgz", + "integrity": "sha512-pD3xLMy3SJu9kG5xDGI7+xhTEmGXlEqXU4OfNapmfnxLVY4EMSSRp7j1k7eezutBPH7RBN/7QPnwR7hzNlEFeg==", "funding": [ { "type": "individual", @@ -2375,46 +1353,15 @@ } ], "dependencies": { - "@ethersproject/abi": "^5.7.0", - "@ethersproject/abstract-provider": "^5.7.0", - "@ethersproject/abstract-signer": "^5.7.0", - "@ethersproject/address": "^5.7.0", "@ethersproject/bignumber": "^5.7.0", - "@ethersproject/bytes": "^5.7.0", "@ethersproject/constants": "^5.7.0", - "@ethersproject/logger": "^5.7.0", - "@ethersproject/properties": "^5.7.0", - "@ethersproject/transactions": "^5.7.0" + "@ethersproject/logger": "^5.7.0" } }, - "node_modules/@ethersproject/hardware-wallets": { + "node_modules/@ethersproject/wallet": { "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/hardware-wallets/-/hardware-wallets-5.7.0.tgz", - "integrity": "sha512-DjMMXIisRc8xFvEoLoYz1w7JDOYmaz/a0X9sp7Zu668RR8U1zCAyj5ow25HLRW+TCzEC5XiFetTXqS5kXonFCQ==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "dependencies": { - "@ledgerhq/hw-app-eth": "5.27.2", - "@ledgerhq/hw-transport": "5.26.0", - "@ledgerhq/hw-transport-u2f": "5.26.0", - "ethers": "^5.7.0" - }, - "optionalDependencies": { - "@ledgerhq/hw-transport-node-hid": "5.26.0" - } - }, - "node_modules/@ethersproject/hash": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/hash/-/hash-5.7.0.tgz", - "integrity": "sha512-qX5WrQfnah1EFnO5zJv1v46a8HW0+E5xuBBDTwMFZLuVTx0tbU2kkx15NqdjxecrLGatQN9FGQKpb1FKdHCt+g==", + "resolved": "https://registry.npmjs.org/@ethersproject/wallet/-/wallet-5.7.0.tgz", + "integrity": "sha512-MhmXlJXEJFBFVKrDLB4ZdDzxcBxQ3rLyCkhNqVu3CDYvR97E+8r01UgrI+TI99Le+aYm/in/0vp86guJuM7FCA==", "funding": [ { "type": "individual", @@ -2426,21 +1373,27 @@ } ], "dependencies": { + "@ethersproject/abstract-provider": "^5.7.0", "@ethersproject/abstract-signer": "^5.7.0", "@ethersproject/address": "^5.7.0", - "@ethersproject/base64": "^5.7.0", "@ethersproject/bignumber": "^5.7.0", "@ethersproject/bytes": "^5.7.0", + "@ethersproject/hash": "^5.7.0", + "@ethersproject/hdnode": "^5.7.0", + "@ethersproject/json-wallets": "^5.7.0", "@ethersproject/keccak256": "^5.7.0", "@ethersproject/logger": "^5.7.0", "@ethersproject/properties": "^5.7.0", - "@ethersproject/strings": "^5.7.0" + "@ethersproject/random": "^5.7.0", + "@ethersproject/signing-key": "^5.7.0", + "@ethersproject/transactions": "^5.7.0", + "@ethersproject/wordlists": "^5.7.0" } }, - "node_modules/@ethersproject/hdnode": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/hdnode/-/hdnode-5.7.0.tgz", - "integrity": "sha512-OmyYo9EENBPPf4ERhR7oj6uAtUAhYGqOnIS+jE5pTXvdKBS99ikzq1E7Iv0ZQZ5V36Lqx1qZLeak0Ra16qpeOg==", + "node_modules/@ethersproject/web": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/@ethersproject/web/-/web-5.7.1.tgz", + "integrity": "sha512-Gueu8lSvyjBWL4cYsWsjh6MtMwM0+H4HvqFPZfB6dV8ctbP9zFAO73VG1cMWae0FLPCtz0peKPpZY8/ugJJX2w==", "funding": [ { "type": "individual", @@ -2452,24 +1405,17 @@ } ], "dependencies": { - "@ethersproject/abstract-signer": "^5.7.0", - "@ethersproject/basex": "^5.7.0", - "@ethersproject/bignumber": "^5.7.0", + "@ethersproject/base64": "^5.7.0", "@ethersproject/bytes": "^5.7.0", "@ethersproject/logger": "^5.7.0", - "@ethersproject/pbkdf2": "^5.7.0", "@ethersproject/properties": "^5.7.0", - "@ethersproject/sha2": "^5.7.0", - "@ethersproject/signing-key": "^5.7.0", - "@ethersproject/strings": "^5.7.0", - "@ethersproject/transactions": "^5.7.0", - "@ethersproject/wordlists": "^5.7.0" + "@ethersproject/strings": "^5.7.0" } }, - "node_modules/@ethersproject/json-wallets": { + "node_modules/@ethersproject/wordlists": { "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/json-wallets/-/json-wallets-5.7.0.tgz", - "integrity": "sha512-8oee5Xgu6+RKgJTkvEMl2wDgSPSAQ9MB/3JYjFV9jlKvcYHUXZC+cQp0njgmxdHkYWn8s6/IqIZYm0YWCjO/0g==", + "resolved": "https://registry.npmjs.org/@ethersproject/wordlists/-/wordlists-5.7.0.tgz", + "integrity": "sha512-S2TFNJNfHWVHNE6cNDjbVlZ6MgE17MIxMbMg2zv3wn+3XSJGosL1m9ZVv3GXCf/2ymSsQ+hRI5IzoMJTG6aoVA==", "funding": [ { "type": "individual", @@ -2481,373 +1427,271 @@ } ], "dependencies": { - "@ethersproject/abstract-signer": "^5.7.0", - "@ethersproject/address": "^5.7.0", "@ethersproject/bytes": "^5.7.0", - "@ethersproject/hdnode": "^5.7.0", - "@ethersproject/keccak256": "^5.7.0", + "@ethersproject/hash": "^5.7.0", "@ethersproject/logger": "^5.7.0", - "@ethersproject/pbkdf2": "^5.7.0", "@ethersproject/properties": "^5.7.0", - "@ethersproject/random": "^5.7.0", - "@ethersproject/strings": "^5.7.0", - "@ethersproject/transactions": "^5.7.0", - "aes-js": "3.0.0", - "scrypt-js": "3.0.1" + "@ethersproject/strings": "^5.7.0" } }, - "node_modules/@ethersproject/keccak256": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/keccak256/-/keccak256-5.7.0.tgz", - "integrity": "sha512-2UcPboeL/iW+pSg6vZ6ydF8tCnv3Iu/8tUmLLzWWGzxWKFFqOBQFLo6uLUv6BDrLgCDfN28RJ/wtByx+jZ4KBg==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], + "node_modules/@fastify/busboy": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@fastify/busboy/-/busboy-2.1.0.tgz", + "integrity": "sha512-+KpH+QxZU7O4675t3mnkQKcZZg56u+K/Ct2K+N2AZYNVK8kyeo/bI18tI8aPm3tvNNRyTWfj6s5tnGNlcbQRsA==", + "engines": { + "node": ">=14" + } + }, + "node_modules/@isaacs/cliui": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz", + "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==", + "peer": true, "dependencies": { - "@ethersproject/bytes": "^5.7.0", - "js-sha3": "0.8.0" + "string-width": "^5.1.2", + "string-width-cjs": "npm:string-width@^4.2.0", + "strip-ansi": "^7.0.1", + "strip-ansi-cjs": "npm:strip-ansi@^6.0.1", + "wrap-ansi": "^8.1.0", + "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0" + }, + "engines": { + "node": ">=12" } }, - "node_modules/@ethersproject/logger": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/logger/-/logger-5.7.0.tgz", - "integrity": "sha512-0odtFdXu/XHtjQXJYA3u9G0G8btm0ND5Cu8M7i5vhEcE8/HmF4Lbdqanwyv4uQTr2tx6b7fQRmgLrsnpQlmnig==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ] + "node_modules/@isaacs/cliui/node_modules/ansi-regex": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", + "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", + "peer": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } }, - "node_modules/@ethersproject/networks": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/@ethersproject/networks/-/networks-5.7.1.tgz", - "integrity": "sha512-n/MufjFYv3yFcUyfhnXotyDlNdFb7onmkSy8aQERi2PjNcnWQ66xXxa3XlS8nCcA8aJKJjIIMNJTC7tu80GwpQ==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], + "node_modules/@isaacs/cliui/node_modules/emoji-regex": { + "version": "9.2.2", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", + "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", + "peer": true + }, + "node_modules/@isaacs/cliui/node_modules/string-width": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", + "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", + "peer": true, "dependencies": { - "@ethersproject/logger": "^5.7.0" + "eastasianwidth": "^0.2.0", + "emoji-regex": "^9.2.2", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@ethersproject/pbkdf2": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/pbkdf2/-/pbkdf2-5.7.0.tgz", - "integrity": "sha512-oR/dBRZR6GTyaofd86DehG72hY6NpAjhabkhxgr3X2FpJtJuodEl2auADWBZfhDHgVCbu3/H/Ocq2uC6dpNjjw==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], + "node_modules/@isaacs/cliui/node_modules/strip-ansi": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", + "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", + "peer": true, "dependencies": { - "@ethersproject/bytes": "^5.7.0", - "@ethersproject/sha2": "^5.7.0" + "ansi-regex": "^6.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" } }, - "node_modules/@ethersproject/properties": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/properties/-/properties-5.7.0.tgz", - "integrity": "sha512-J87jy8suntrAkIZtecpxEPxY//szqr1mlBaYlQ0r4RCaiD2hjheqF9s1LVE8vVuJCXisjIP+JgtK/Do54ej4Sw==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], + "node_modules/@ledgerhq/cryptoassets": { + "version": "5.53.0", + "resolved": "https://registry.npmjs.org/@ledgerhq/cryptoassets/-/cryptoassets-5.53.0.tgz", + "integrity": "sha512-M3ibc3LRuHid5UtL7FI3IC6nMEppvly98QHFoSa7lJU0HDzQxY6zHec/SPM4uuJUC8sXoGVAiRJDkgny54damw==", "dependencies": { - "@ethersproject/logger": "^5.7.0" + "invariant": "2" } }, - "node_modules/@ethersproject/providers": { - "version": "5.7.2", - "resolved": "https://registry.npmjs.org/@ethersproject/providers/-/providers-5.7.2.tgz", - "integrity": "sha512-g34EWZ1WWAVgr4aptGlVBF8mhl3VWjv+8hoAnzStu8Ah22VHBsuGzP17eb6xDVRzw895G4W7vvx60lFFur/1Rg==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], + "node_modules/@ledgerhq/devices": { + "version": "5.51.1", + "resolved": "https://registry.npmjs.org/@ledgerhq/devices/-/devices-5.51.1.tgz", + "integrity": "sha512-4w+P0VkbjzEXC7kv8T1GJ/9AVaP9I6uasMZ/JcdwZBS3qwvKo5A5z9uGhP5c7TvItzcmPb44b5Mw2kT+WjUuAA==", "dependencies": { - "@ethersproject/abstract-provider": "^5.7.0", - "@ethersproject/abstract-signer": "^5.7.0", - "@ethersproject/address": "^5.7.0", - "@ethersproject/base64": "^5.7.0", - "@ethersproject/basex": "^5.7.0", - "@ethersproject/bignumber": "^5.7.0", - "@ethersproject/bytes": "^5.7.0", - "@ethersproject/constants": "^5.7.0", - "@ethersproject/hash": "^5.7.0", - "@ethersproject/logger": "^5.7.0", - "@ethersproject/networks": "^5.7.0", - "@ethersproject/properties": "^5.7.0", - "@ethersproject/random": "^5.7.0", - "@ethersproject/rlp": "^5.7.0", - "@ethersproject/sha2": "^5.7.0", - "@ethersproject/strings": "^5.7.0", - "@ethersproject/transactions": "^5.7.0", - "@ethersproject/web": "^5.7.0", - "bech32": "1.1.4", - "ws": "7.4.6" + "@ledgerhq/errors": "^5.50.0", + "@ledgerhq/logs": "^5.50.0", + "rxjs": "6", + "semver": "^7.3.5" } }, - "node_modules/@ethersproject/providers/node_modules/ws": { - "version": "7.4.6", - "resolved": "https://registry.npmjs.org/ws/-/ws-7.4.6.tgz", - "integrity": "sha512-YmhHDO4MzaDLB+M9ym/mDA5z0naX8j7SIlT8f8z+I0VtzsRbekxEutHSme7NPS2qE8StCYQNUnfWdXta/Yu85A==", - "engines": { - "node": ">=8.3.0" - }, - "peerDependencies": { - "bufferutil": "^4.0.1", - "utf-8-validate": "^5.0.2" - }, - "peerDependenciesMeta": { - "bufferutil": { - "optional": true - }, - "utf-8-validate": { - "optional": true - } + "node_modules/@ledgerhq/errors": { + "version": "5.50.0", + "resolved": "https://registry.npmjs.org/@ledgerhq/errors/-/errors-5.50.0.tgz", + "integrity": "sha512-gu6aJ/BHuRlpU7kgVpy2vcYk6atjB4iauP2ymF7Gk0ez0Y/6VSMVSJvubeEQN+IV60+OBK0JgeIZG7OiHaw8ow==" + }, + "node_modules/@ledgerhq/hw-app-eth": { + "version": "5.27.2", + "resolved": "https://registry.npmjs.org/@ledgerhq/hw-app-eth/-/hw-app-eth-5.27.2.tgz", + "integrity": "sha512-llNdrE894cCN8j6yxJEUniciyLVcLmu5N0UmIJLOObztG+5rOF4bX54h4SreTWK+E10Z0CzHSeyE5Lz/tVcqqQ==", + "dependencies": { + "@ledgerhq/cryptoassets": "^5.27.2", + "@ledgerhq/errors": "^5.26.0", + "@ledgerhq/hw-transport": "^5.26.0", + "bignumber.js": "^9.0.1", + "rlp": "^2.2.6" } }, - "node_modules/@ethersproject/random": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/random/-/random-5.7.0.tgz", - "integrity": "sha512-19WjScqRA8IIeWclFme75VMXSBvi4e6InrUNuaR4s5pTF2qNhcGdCUwdxUVGtDDqC00sDLCO93jPQoDUH4HVmQ==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], + "node_modules/@ledgerhq/hw-transport": { + "version": "5.26.0", + "resolved": "https://registry.npmjs.org/@ledgerhq/hw-transport/-/hw-transport-5.26.0.tgz", + "integrity": "sha512-NFeJOJmyEfAX8uuIBTpocWHcz630sqPcXbu864Q+OCBm4EK5UOKV1h/pX7e0xgNIKY8zhJ/O4p4cIZp9tnXLHQ==", "dependencies": { - "@ethersproject/bytes": "^5.7.0", - "@ethersproject/logger": "^5.7.0" + "@ledgerhq/devices": "^5.26.0", + "@ledgerhq/errors": "^5.26.0", + "events": "^3.2.0" } }, - "node_modules/@ethersproject/rlp": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/rlp/-/rlp-5.7.0.tgz", - "integrity": "sha512-rBxzX2vK8mVF7b0Tol44t5Tb8gomOHkj5guL+HhzQ1yBh/ydjGnpw6at+X6Iw0Kp3OzzzkcKp8N9r0W4kYSs9w==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], + "node_modules/@ledgerhq/hw-transport-node-hid": { + "version": "5.26.0", + "resolved": "https://registry.npmjs.org/@ledgerhq/hw-transport-node-hid/-/hw-transport-node-hid-5.26.0.tgz", + "integrity": "sha512-qhaefZVZatJ6UuK8Wb6WSFNOLWc2mxcv/xgsfKi5HJCIr4bPF/ecIeN+7fRcEaycxj4XykY6Z4A7zDVulfFH4w==", + "optional": true, "dependencies": { - "@ethersproject/bytes": "^5.7.0", - "@ethersproject/logger": "^5.7.0" + "@ledgerhq/devices": "^5.26.0", + "@ledgerhq/errors": "^5.26.0", + "@ledgerhq/hw-transport": "^5.26.0", + "@ledgerhq/hw-transport-node-hid-noevents": "^5.26.0", + "@ledgerhq/logs": "^5.26.0", + "lodash": "^4.17.20", + "node-hid": "1.3.0", + "usb": "^1.6.3" } }, - "node_modules/@ethersproject/sha2": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/sha2/-/sha2-5.7.0.tgz", - "integrity": "sha512-gKlH42riwb3KYp0reLsFTokByAKoJdgFCwI+CCiX/k+Jm2mbNs6oOaCjYQSlI1+XBVejwH2KrmCbMAT/GnRDQw==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], + "node_modules/@ledgerhq/hw-transport-node-hid-noevents": { + "version": "5.51.1", + "resolved": "https://registry.npmjs.org/@ledgerhq/hw-transport-node-hid-noevents/-/hw-transport-node-hid-noevents-5.51.1.tgz", + "integrity": "sha512-9wFf1L8ZQplF7XOY2sQGEeOhpmBRzrn+4X43kghZ7FBDoltrcK+s/D7S+7ffg3j2OySyP6vIIIgloXylao5Scg==", + "optional": true, "dependencies": { - "@ethersproject/bytes": "^5.7.0", - "@ethersproject/logger": "^5.7.0", - "hash.js": "1.1.7" + "@ledgerhq/devices": "^5.51.1", + "@ledgerhq/errors": "^5.50.0", + "@ledgerhq/hw-transport": "^5.51.1", + "@ledgerhq/logs": "^5.50.0", + "node-hid": "2.1.1" } }, - "node_modules/@ethersproject/signing-key": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/signing-key/-/signing-key-5.7.0.tgz", - "integrity": "sha512-MZdy2nL3wO0u7gkB4nA/pEf8lu1TlFswPNmy8AiYkfKTdO6eXBJyUdmHO/ehm/htHw9K/qF8ujnTyUAD+Ry54Q==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], + "node_modules/@ledgerhq/hw-transport-node-hid-noevents/node_modules/@ledgerhq/hw-transport": { + "version": "5.51.1", + "resolved": "https://registry.npmjs.org/@ledgerhq/hw-transport/-/hw-transport-5.51.1.tgz", + "integrity": "sha512-6wDYdbWrw9VwHIcoDnqWBaDFyviyjZWv6H9vz9Vyhe4Qd7TIFmbTl/eWs6hZvtZBza9K8y7zD8ChHwRI4s9tSw==", + "optional": true, "dependencies": { - "@ethersproject/bytes": "^5.7.0", - "@ethersproject/logger": "^5.7.0", - "@ethersproject/properties": "^5.7.0", - "bn.js": "^5.2.1", - "elliptic": "6.5.4", - "hash.js": "1.1.7" + "@ledgerhq/devices": "^5.51.1", + "@ledgerhq/errors": "^5.50.0", + "events": "^3.3.0" } }, - "node_modules/@ethersproject/solidity": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/solidity/-/solidity-5.7.0.tgz", - "integrity": "sha512-HmabMd2Dt/raavyaGukF4XxizWKhKQ24DoLtdNbBmNKUOPqwjsKQSdV9GQtj9CBEea9DlzETlVER1gYeXXBGaA==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], + "node_modules/@ledgerhq/hw-transport-node-hid-noevents/node_modules/node-addon-api": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-3.2.1.tgz", + "integrity": "sha512-mmcei9JghVNDYydghQmeDX8KoAm0FAiYyIcUt/N4nhyAipB17pllZQDOJD2fotxABnt4Mdz+dKTO7eftLg4d0A==", + "optional": true + }, + "node_modules/@ledgerhq/hw-transport-node-hid-noevents/node_modules/node-hid": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/node-hid/-/node-hid-2.1.1.tgz", + "integrity": "sha512-Skzhqow7hyLZU93eIPthM9yjot9lszg9xrKxESleEs05V2NcbUptZc5HFqzjOkSmL0sFlZFr3kmvaYebx06wrw==", + "hasInstallScript": true, + "optional": true, "dependencies": { - "@ethersproject/bignumber": "^5.7.0", - "@ethersproject/bytes": "^5.7.0", - "@ethersproject/keccak256": "^5.7.0", - "@ethersproject/logger": "^5.7.0", - "@ethersproject/sha2": "^5.7.0", - "@ethersproject/strings": "^5.7.0" + "bindings": "^1.5.0", + "node-addon-api": "^3.0.2", + "prebuild-install": "^6.0.0" + }, + "bin": { + "hid-showdevices": "src/show-devices.js" + }, + "engines": { + "node": ">=10" } }, - "node_modules/@ethersproject/strings": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/strings/-/strings-5.7.0.tgz", - "integrity": "sha512-/9nu+lj0YswRNSH0NXYqrh8775XNyEdUQAuf3f+SmOrnVewcJ5SBNAjF7lpgehKi4abvNNXyf+HX86czCdJ8Mg==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], + "node_modules/@ledgerhq/hw-transport-node-hid-noevents/node_modules/prebuild-install": { + "version": "6.1.4", + "resolved": "https://registry.npmjs.org/prebuild-install/-/prebuild-install-6.1.4.tgz", + "integrity": "sha512-Z4vpywnK1lBg+zdPCVCsKq0xO66eEV9rWo2zrROGGiRS4JtueBOdlB1FnY8lcy7JsUud/Q3ijUxyWN26Ika0vQ==", + "optional": true, "dependencies": { - "@ethersproject/bytes": "^5.7.0", - "@ethersproject/constants": "^5.7.0", - "@ethersproject/logger": "^5.7.0" + "detect-libc": "^1.0.3", + "expand-template": "^2.0.3", + "github-from-package": "0.0.0", + "minimist": "^1.2.3", + "mkdirp-classic": "^0.5.3", + "napi-build-utils": "^1.0.1", + "node-abi": "^2.21.0", + "npmlog": "^4.0.1", + "pump": "^3.0.0", + "rc": "^1.2.7", + "simple-get": "^3.0.3", + "tar-fs": "^2.0.0", + "tunnel-agent": "^0.6.0" + }, + "bin": { + "prebuild-install": "bin.js" + }, + "engines": { + "node": ">=6" } }, - "node_modules/@ethersproject/transactions": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/transactions/-/transactions-5.7.0.tgz", - "integrity": "sha512-kmcNicCp1lp8qanMTC3RIikGgoJ80ztTyvtsFvCYpSCfkjhD0jZ2LOrnbcuxuToLIUYYf+4XwD1rP+B/erDIhQ==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], + "node_modules/@ledgerhq/hw-transport-u2f": { + "version": "5.26.0", + "resolved": "https://registry.npmjs.org/@ledgerhq/hw-transport-u2f/-/hw-transport-u2f-5.26.0.tgz", + "integrity": "sha512-QTxP1Rsh+WZ184LUOelYVLeaQl3++V3I2jFik+l9JZtakwEHjD0XqOT750xpYNL/vfHsy31Wlz+oicdxGzFk+w==", + "deprecated": "@ledgerhq/hw-transport-u2f is deprecated. Please use @ledgerhq/hw-transport-webusb or @ledgerhq/hw-transport-webhid. https://github.com/LedgerHQ/ledgerjs/blob/master/docs/migrate_webusb.md", "dependencies": { - "@ethersproject/address": "^5.7.0", - "@ethersproject/bignumber": "^5.7.0", - "@ethersproject/bytes": "^5.7.0", - "@ethersproject/constants": "^5.7.0", - "@ethersproject/keccak256": "^5.7.0", - "@ethersproject/logger": "^5.7.0", - "@ethersproject/properties": "^5.7.0", - "@ethersproject/rlp": "^5.7.0", - "@ethersproject/signing-key": "^5.7.0" + "@ledgerhq/errors": "^5.26.0", + "@ledgerhq/hw-transport": "^5.26.0", + "@ledgerhq/logs": "^5.26.0", + "u2f-api": "0.2.7" } }, - "node_modules/@ethersproject/units": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/units/-/units-5.7.0.tgz", - "integrity": "sha512-pD3xLMy3SJu9kG5xDGI7+xhTEmGXlEqXU4OfNapmfnxLVY4EMSSRp7j1k7eezutBPH7RBN/7QPnwR7hzNlEFeg==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], + "node_modules/@ledgerhq/logs": { + "version": "5.50.0", + "resolved": "https://registry.npmjs.org/@ledgerhq/logs/-/logs-5.50.0.tgz", + "integrity": "sha512-swKHYCOZUGyVt4ge0u8a7AwNcA//h4nx5wIi0sruGye1IJ5Cva0GyK9L2/WdX+kWVTKp92ZiEo1df31lrWGPgA==" + }, + "node_modules/@maticnetwork/maticjs": { + "version": "3.7.7", + "resolved": "https://registry.npmjs.org/@maticnetwork/maticjs/-/maticjs-3.7.7.tgz", + "integrity": "sha512-rzcxDSQNoqwM5SjdBN/a5trWBMchJ+amHqGsDDVQmhUDgUvzPM53QS5ZFVanX86jAGcKLLyI24kgEyTnMuzdaA==", "dependencies": { - "@ethersproject/bignumber": "^5.7.0", - "@ethersproject/constants": "^5.7.0", - "@ethersproject/logger": "^5.7.0" + "@ethereumjs/block": "^3.6.2", + "ethereumjs-util": "^7.1.4", + "merkle-patricia-tree": "^4.2.4", + "node-fetch": "^2.6.1" + }, + "engines": { + "node": ">=8.0.0" } }, - "node_modules/@ethersproject/wallet": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/wallet/-/wallet-5.7.0.tgz", - "integrity": "sha512-MhmXlJXEJFBFVKrDLB4ZdDzxcBxQ3rLyCkhNqVu3CDYvR97E+8r01UgrI+TI99Le+aYm/in/0vp86guJuM7FCA==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], + "node_modules/@maticnetwork/maticjs-ethers": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@maticnetwork/maticjs-ethers/-/maticjs-ethers-1.0.3.tgz", + "integrity": "sha512-paGulmLG62We/pyOVH3Q7mZd/E/SGFKa+rXtyvpoMB8v5oFn/yTtoKvLWyIoZ8zBi4JrjSegKL+/US5+OibYwQ==", "dependencies": { - "@ethersproject/abstract-provider": "^5.7.0", - "@ethersproject/abstract-signer": "^5.7.0", - "@ethersproject/address": "^5.7.0", - "@ethersproject/bignumber": "^5.7.0", - "@ethersproject/bytes": "^5.7.0", - "@ethersproject/hash": "^5.7.0", - "@ethersproject/hdnode": "^5.7.0", - "@ethersproject/json-wallets": "^5.7.0", - "@ethersproject/keccak256": "^5.7.0", - "@ethersproject/logger": "^5.7.0", - "@ethersproject/properties": "^5.7.0", - "@ethersproject/random": "^5.7.0", - "@ethersproject/signing-key": "^5.7.0", - "@ethersproject/transactions": "^5.7.0", - "@ethersproject/wordlists": "^5.7.0" + "ethers": "^5.5.1" + }, + "peerDependencies": { + "@maticnetwork/maticjs": "^3.2.5" } }, - "node_modules/@ethersproject/web": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/@ethersproject/web/-/web-5.7.1.tgz", - "integrity": "sha512-Gueu8lSvyjBWL4cYsWsjh6MtMwM0+H4HvqFPZfB6dV8ctbP9zFAO73VG1cMWae0FLPCtz0peKPpZY8/ugJJX2w==", + "node_modules/@maticnetwork/maticjs-ethers/node_modules/ethers": { + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/ethers/-/ethers-5.7.2.tgz", + "integrity": "sha512-wswUsmWo1aOK8rR7DIKiWSw9DbLWe6x98Jrn8wcTflTVvaXhAMaB5zGAXy0GYQEQp9iO1iSHWVyARQm11zUtyg==", "funding": [ { "type": "individual", @@ -2859,524 +1703,36 @@ } ], "dependencies": { - "@ethersproject/base64": "^5.7.0", - "@ethersproject/bytes": "^5.7.0", - "@ethersproject/logger": "^5.7.0", - "@ethersproject/properties": "^5.7.0", - "@ethersproject/strings": "^5.7.0" - } - }, - "node_modules/@ethersproject/wordlists": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/wordlists/-/wordlists-5.7.0.tgz", - "integrity": "sha512-S2TFNJNfHWVHNE6cNDjbVlZ6MgE17MIxMbMg2zv3wn+3XSJGosL1m9ZVv3GXCf/2ymSsQ+hRI5IzoMJTG6aoVA==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "dependencies": { - "@ethersproject/bytes": "^5.7.0", - "@ethersproject/hash": "^5.7.0", - "@ethersproject/logger": "^5.7.0", - "@ethersproject/properties": "^5.7.0", - "@ethersproject/strings": "^5.7.0" - } - }, - "node_modules/@flashbots/ethers-provider-bundle": { - "version": "0.6.2", - "resolved": "https://registry.npmjs.org/@flashbots/ethers-provider-bundle/-/ethers-provider-bundle-0.6.2.tgz", - "integrity": "sha512-W4Hi47zWggWgLBwhoxH3qaojudAjcbBU+ldEYi5o06UQm/25Hk/AUvCLiN+9nvy1g3xxpF9QBdMniUwjC4cpBw==", - "peerDependencies": { - "ethers": "5.7.2" - } - }, - "node_modules/@ganache/ethereum-address": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/@ganache/ethereum-address/-/ethereum-address-0.1.4.tgz", - "integrity": "sha512-sTkU0M9z2nZUzDeHRzzGlW724xhMLXo2LeX1hixbnjHWY1Zg1hkqORywVfl+g5uOO8ht8T0v+34IxNxAhmWlbw==", - "dev": true, - "dependencies": { - "@ganache/utils": "0.1.4" - } - }, - "node_modules/@ganache/ethereum-options": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/@ganache/ethereum-options/-/ethereum-options-0.1.4.tgz", - "integrity": "sha512-i4l46taoK2yC41FPkcoDlEVoqHS52wcbHPqJtYETRWqpOaoj9hAg/EJIHLb1t6Nhva2CdTO84bG+qlzlTxjAHw==", - "dev": true, - "dependencies": { - "@ganache/ethereum-address": "0.1.4", - "@ganache/ethereum-utils": "0.1.4", - "@ganache/options": "0.1.4", - "@ganache/utils": "0.1.4", - "bip39": "3.0.4", - "seedrandom": "3.0.5" - } - }, - "node_modules/@ganache/ethereum-utils": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/@ganache/ethereum-utils/-/ethereum-utils-0.1.4.tgz", - "integrity": "sha512-FKXF3zcdDrIoCqovJmHLKZLrJ43234Em2sde/3urUT/10gSgnwlpFmrv2LUMAmSbX3lgZhW/aSs8krGhDevDAg==", - "dev": true, - "dependencies": { - "@ethereumjs/common": "2.6.0", - "@ethereumjs/tx": "3.4.0", - "@ethereumjs/vm": "5.6.0", - "@ganache/ethereum-address": "0.1.4", - "@ganache/rlp": "0.1.4", - "@ganache/utils": "0.1.4", - "emittery": "0.10.0", - "ethereumjs-abi": "0.6.8", - "ethereumjs-util": "7.1.3" - } - }, - "node_modules/@ganache/ethereum-utils/node_modules/@ethereumjs/common": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/@ethereumjs/common/-/common-2.6.0.tgz", - "integrity": "sha512-Cq2qS0FTu6O2VU1sgg+WyU9Ps0M6j/BEMHN+hRaECXCV/r0aI78u4N6p52QW/BDVhwWZpCdrvG8X7NJdzlpNUA==", - "dev": true, - "dependencies": { - "crc-32": "^1.2.0", - "ethereumjs-util": "^7.1.3" - } - }, - "node_modules/@ganache/ethereum-utils/node_modules/@ethereumjs/tx": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/@ethereumjs/tx/-/tx-3.4.0.tgz", - "integrity": "sha512-WWUwg1PdjHKZZxPPo274ZuPsJCWV3SqATrEKQP1n2DrVYVP1aZIYpo/mFaA0BDoE0tIQmBeimRCEA0Lgil+yYw==", - "dev": true, - "dependencies": { - "@ethereumjs/common": "^2.6.0", - "ethereumjs-util": "^7.1.3" - } - }, - "node_modules/@ganache/ethereum-utils/node_modules/emittery": { - "version": "0.10.0", - "resolved": "https://registry.npmjs.org/emittery/-/emittery-0.10.0.tgz", - "integrity": "sha512-AGvFfs+d0JKCJQ4o01ASQLGPmSCxgfU9RFXvzPvZdjKK8oscynksuJhWrSTSw7j7Ep/sZct5b5ZhYCi8S/t0HQ==", - "dev": true, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sindresorhus/emittery?sponsor=1" - } - }, - "node_modules/@ganache/ethereum-utils/node_modules/ethereum-cryptography": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-0.1.3.tgz", - "integrity": "sha512-w8/4x1SGGzc+tO97TASLja6SLd3fRIK2tLVcV2Gx4IB21hE19atll5Cq9o3d0ZmAYC/8aw0ipieTSiekAea4SQ==", - "dev": true, - "dependencies": { - "@types/pbkdf2": "^3.0.0", - "@types/secp256k1": "^4.0.1", - "blakejs": "^1.1.0", - "browserify-aes": "^1.2.0", - "bs58check": "^2.1.2", - "create-hash": "^1.2.0", - "create-hmac": "^1.1.7", - "hash.js": "^1.1.7", - "keccak": "^3.0.0", - "pbkdf2": "^3.0.17", - "randombytes": "^2.1.0", - "safe-buffer": "^5.1.2", - "scrypt-js": "^3.0.0", - "secp256k1": "^4.0.1", - "setimmediate": "^1.0.5" - } - }, - "node_modules/@ganache/ethereum-utils/node_modules/ethereumjs-util": { - "version": "7.1.3", - "resolved": "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-7.1.3.tgz", - "integrity": "sha512-y+82tEbyASO0K0X1/SRhbJJoAlfcvq8JbrG4a5cjrOks7HS/36efU/0j2flxCPOUM++HFahk33kr/ZxyC4vNuw==", - "dev": true, - "dependencies": { - "@types/bn.js": "^5.1.0", - "bn.js": "^5.1.2", - "create-hash": "^1.1.2", - "ethereum-cryptography": "^0.1.3", - "rlp": "^2.2.4" - }, - "engines": { - "node": ">=10.0.0" - } - }, - "node_modules/@ganache/options": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/@ganache/options/-/options-0.1.4.tgz", - "integrity": "sha512-zAe/craqNuPz512XQY33MOAG6Si1Xp0hCvfzkBfj2qkuPcbJCq6W/eQ5MB6SbXHrICsHrZOaelyqjuhSEmjXRw==", - "dev": true, - "dependencies": { - "@ganache/utils": "0.1.4", - "bip39": "3.0.4", - "seedrandom": "3.0.5" - } - }, - "node_modules/@ganache/rlp": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/@ganache/rlp/-/rlp-0.1.4.tgz", - "integrity": "sha512-Do3D1H6JmhikB+6rHviGqkrNywou/liVeFiKIpOBLynIpvZhRCgn3SEDxyy/JovcaozTo/BynHumfs5R085MFQ==", - "dev": true, - "dependencies": { - "@ganache/utils": "0.1.4", - "rlp": "2.2.6" - } - }, - "node_modules/@ganache/rlp/node_modules/bn.js": { - "version": "4.12.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", - "dev": true - }, - "node_modules/@ganache/rlp/node_modules/rlp": { - "version": "2.2.6", - "resolved": "https://registry.npmjs.org/rlp/-/rlp-2.2.6.tgz", - "integrity": "sha512-HAfAmL6SDYNWPUOJNrM500x4Thn4PZsEy5pijPh40U9WfNk0z15hUYzO9xVIMAdIHdFtD8CBDHd75Td1g36Mjg==", - "dev": true, - "dependencies": { - "bn.js": "^4.11.1" - }, - "bin": { - "rlp": "bin/rlp" - } - }, - "node_modules/@ganache/utils": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/@ganache/utils/-/utils-0.1.4.tgz", - "integrity": "sha512-oatUueU3XuXbUbUlkyxeLLH3LzFZ4y5aSkNbx6tjSIhVTPeh+AuBKYt4eQ73FFcTB3nj/gZoslgAh5CN7O369w==", - "dev": true, - "dependencies": { - "emittery": "0.10.0", - "keccak": "3.0.1", - "seedrandom": "3.0.5" - }, - "optionalDependencies": { - "@trufflesuite/bigint-buffer": "1.1.9" - } - }, - "node_modules/@ganache/utils/node_modules/emittery": { - "version": "0.10.0", - "resolved": "https://registry.npmjs.org/emittery/-/emittery-0.10.0.tgz", - "integrity": "sha512-AGvFfs+d0JKCJQ4o01ASQLGPmSCxgfU9RFXvzPvZdjKK8oscynksuJhWrSTSw7j7Ep/sZct5b5ZhYCi8S/t0HQ==", - "dev": true, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sindresorhus/emittery?sponsor=1" - } - }, - "node_modules/@ganache/utils/node_modules/keccak": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/keccak/-/keccak-3.0.1.tgz", - "integrity": "sha512-epq90L9jlFWCW7+pQa6JOnKn2Xgl2mtI664seYR6MHskvI9agt7AnDqmAlp9TqU4/caMYbA08Hi5DMZAl5zdkA==", - "dev": true, - "hasInstallScript": true, - "dependencies": { - "node-addon-api": "^2.0.0", - "node-gyp-build": "^4.2.0" - }, - "engines": { - "node": ">=10.0.0" - } - }, - "node_modules/@graphql-tools/batch-execute": { - "version": "8.5.1", - "resolved": "https://registry.npmjs.org/@graphql-tools/batch-execute/-/batch-execute-8.5.1.tgz", - "integrity": "sha512-hRVDduX0UDEneVyEWtc2nu5H2PxpfSfM/riUlgZvo/a/nG475uyehxR5cFGvTEPEQUKY3vGIlqvtRigzqTfCew==", - "optional": true, - "dependencies": { - "@graphql-tools/utils": "8.9.0", - "dataloader": "2.1.0", - "tslib": "^2.4.0", - "value-or-promise": "1.0.11" - }, - "peerDependencies": { - "graphql": "^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0" - } - }, - "node_modules/@graphql-tools/delegate": { - "version": "8.8.1", - "resolved": "https://registry.npmjs.org/@graphql-tools/delegate/-/delegate-8.8.1.tgz", - "integrity": "sha512-NDcg3GEQmdEHlnF7QS8b4lM1PSF+DKeFcIlLEfZFBvVq84791UtJcDj8734sIHLukmyuAxXMfA1qLd2l4lZqzA==", - "optional": true, - "dependencies": { - "@graphql-tools/batch-execute": "8.5.1", - "@graphql-tools/schema": "8.5.1", - "@graphql-tools/utils": "8.9.0", - "dataloader": "2.1.0", - "tslib": "~2.4.0", - "value-or-promise": "1.0.11" - }, - "peerDependencies": { - "graphql": "^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0" - } - }, - "node_modules/@graphql-tools/delegate/node_modules/tslib": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.1.tgz", - "integrity": "sha512-tGyy4dAjRIEwI7BzsB0lynWgOpfqjUdq91XXAlIWD2OwKBH7oCl/GZG/HT4BOHrTlPMOASlMQ7veyTqpmRcrNA==", - "optional": true - }, - "node_modules/@graphql-tools/merge": { - "version": "8.3.1", - "resolved": "https://registry.npmjs.org/@graphql-tools/merge/-/merge-8.3.1.tgz", - "integrity": "sha512-BMm99mqdNZbEYeTPK3it9r9S6rsZsQKtlqJsSBknAclXq2pGEfOxjcIZi+kBSkHZKPKCRrYDd5vY0+rUmIHVLg==", - "optional": true, - "dependencies": { - "@graphql-tools/utils": "8.9.0", - "tslib": "^2.4.0" - }, - "peerDependencies": { - "graphql": "^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0" - } - }, - "node_modules/@graphql-tools/mock": { - "version": "8.7.20", - "resolved": "https://registry.npmjs.org/@graphql-tools/mock/-/mock-8.7.20.tgz", - "integrity": "sha512-ljcHSJWjC/ZyzpXd5cfNhPI7YljRVvabKHPzKjEs5ElxWu2cdlLGvyNYepApXDsM/OJG/2xuhGM+9GWu5gEAPQ==", - "optional": true, - "dependencies": { - "@graphql-tools/schema": "^9.0.18", - "@graphql-tools/utils": "^9.2.1", - "fast-json-stable-stringify": "^2.1.0", - "tslib": "^2.4.0" - }, - "peerDependencies": { - "graphql": "^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0" - } - }, - "node_modules/@graphql-tools/mock/node_modules/@graphql-tools/merge": { - "version": "8.4.2", - "resolved": "https://registry.npmjs.org/@graphql-tools/merge/-/merge-8.4.2.tgz", - "integrity": "sha512-XbrHAaj8yDuINph+sAfuq3QCZ/tKblrTLOpirK0+CAgNlZUCHs0Fa+xtMUURgwCVThLle1AF7svJCxFizygLsw==", - "optional": true, - "dependencies": { - "@graphql-tools/utils": "^9.2.1", - "tslib": "^2.4.0" - }, - "peerDependencies": { - "graphql": "^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0" - } - }, - "node_modules/@graphql-tools/mock/node_modules/@graphql-tools/schema": { - "version": "9.0.19", - "resolved": "https://registry.npmjs.org/@graphql-tools/schema/-/schema-9.0.19.tgz", - "integrity": "sha512-oBRPoNBtCkk0zbUsyP4GaIzCt8C0aCI4ycIRUL67KK5pOHljKLBBtGT+Jr6hkzA74C8Gco8bpZPe7aWFjiaK2w==", - "optional": true, - "dependencies": { - "@graphql-tools/merge": "^8.4.1", - "@graphql-tools/utils": "^9.2.1", - "tslib": "^2.4.0", - "value-or-promise": "^1.0.12" - }, - "peerDependencies": { - "graphql": "^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0" - } - }, - "node_modules/@graphql-tools/mock/node_modules/@graphql-tools/utils": { - "version": "9.2.1", - "resolved": "https://registry.npmjs.org/@graphql-tools/utils/-/utils-9.2.1.tgz", - "integrity": "sha512-WUw506Ql6xzmOORlriNrD6Ugx+HjVgYxt9KCXD9mHAak+eaXSwuGGPyE60hy9xaDEoXKBsG7SkG69ybitaVl6A==", - "optional": true, - "dependencies": { - "@graphql-typed-document-node/core": "^3.1.1", - "tslib": "^2.4.0" - }, - "peerDependencies": { - "graphql": "^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0" - } - }, - "node_modules/@graphql-tools/mock/node_modules/value-or-promise": { - "version": "1.0.12", - "resolved": "https://registry.npmjs.org/value-or-promise/-/value-or-promise-1.0.12.tgz", - "integrity": "sha512-Z6Uz+TYwEqE7ZN50gwn+1LCVo9ZVrpxRPOhOLnncYkY1ZzOYtrX8Fwf/rFktZ8R5mJms6EZf5TqNOMeZmnPq9Q==", - "optional": true, - "engines": { - "node": ">=12" - } - }, - "node_modules/@graphql-tools/schema": { - "version": "8.5.1", - "resolved": "https://registry.npmjs.org/@graphql-tools/schema/-/schema-8.5.1.tgz", - "integrity": "sha512-0Esilsh0P/qYcB5DKQpiKeQs/jevzIadNTaT0jeWklPMwNbT7yMX4EqZany7mbeRRlSRwMzNzL5olyFdffHBZg==", - "optional": true, - "dependencies": { - "@graphql-tools/merge": "8.3.1", - "@graphql-tools/utils": "8.9.0", - "tslib": "^2.4.0", - "value-or-promise": "1.0.11" - }, - "peerDependencies": { - "graphql": "^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0" - } - }, - "node_modules/@graphql-tools/utils": { - "version": "8.9.0", - "resolved": "https://registry.npmjs.org/@graphql-tools/utils/-/utils-8.9.0.tgz", - "integrity": "sha512-pjJIWH0XOVnYGXCqej8g/u/tsfV4LvLlj0eATKQu5zwnxd/TiTHq7Cg313qUPTFFHZ3PP5wJ15chYVtLDwaymg==", - "optional": true, - "dependencies": { - "tslib": "^2.4.0" - }, - "peerDependencies": { - "graphql": "^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0" - } - }, - "node_modules/@graphql-typed-document-node/core": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/@graphql-typed-document-node/core/-/core-3.2.0.tgz", - "integrity": "sha512-mB9oAsNCm9aM3/SOv4YtBMqZbYj10R7dkq8byBqxGY/ncFwhf2oQzMV+LCRlWoDSEBJ3COiR1yeDvMtsoOsuFQ==", - "optional": true, - "peerDependencies": { - "graphql": "^0.8.0 || ^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0" - } - }, - "node_modules/@josephg/resolvable": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@josephg/resolvable/-/resolvable-1.0.1.tgz", - "integrity": "sha512-CtzORUwWTTOTqfVtHaKRJ0I1kNQd1bpn3sUh8I3nJDVY+5/M/Oe1DnEWzPQvqq/xPIIkzzzIP7mfCoAjFRvDhg==", - "optional": true - }, - "node_modules/@jridgewell/gen-mapping": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.1.1.tgz", - "integrity": "sha512-sQXCasFk+U8lWYEe66WxRDOE9PjVz4vSM51fTu3Hw+ClTpUSQb718772vH3pyS5pShp6lvQM7SxgIDXXXmOX7w==", - "peer": true, - "dependencies": { - "@jridgewell/set-array": "^1.0.0", - "@jridgewell/sourcemap-codec": "^1.4.10" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@jridgewell/resolve-uri": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz", - "integrity": "sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==", - "peer": true, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@jridgewell/set-array": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz", - "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==", - "peer": true, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@jridgewell/sourcemap-codec": { - "version": "1.4.14", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz", - "integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==", - "peer": true - }, - "node_modules/@jridgewell/trace-mapping": { - "version": "0.3.17", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.17.tgz", - "integrity": "sha512-MCNzAp77qzKca9+W/+I0+sEpaUnZoeasnghNeVc41VZCEKaCH73Vq3BZZ/SzWIgrqE4H4ceI+p+b6C0mHf9T4g==", - "peer": true, - "dependencies": { - "@jridgewell/resolve-uri": "3.1.0", - "@jridgewell/sourcemap-codec": "1.4.14" - } - }, - "node_modules/@ledgerhq/cryptoassets": { - "version": "5.53.0", - "resolved": "https://registry.npmjs.org/@ledgerhq/cryptoassets/-/cryptoassets-5.53.0.tgz", - "integrity": "sha512-M3ibc3LRuHid5UtL7FI3IC6nMEppvly98QHFoSa7lJU0HDzQxY6zHec/SPM4uuJUC8sXoGVAiRJDkgny54damw==", - "dependencies": { - "invariant": "2" - } - }, - "node_modules/@ledgerhq/devices": { - "version": "5.51.1", - "resolved": "https://registry.npmjs.org/@ledgerhq/devices/-/devices-5.51.1.tgz", - "integrity": "sha512-4w+P0VkbjzEXC7kv8T1GJ/9AVaP9I6uasMZ/JcdwZBS3qwvKo5A5z9uGhP5c7TvItzcmPb44b5Mw2kT+WjUuAA==", - "dependencies": { - "@ledgerhq/errors": "^5.50.0", - "@ledgerhq/logs": "^5.50.0", - "rxjs": "6", - "semver": "^7.3.5" - } - }, - "node_modules/@ledgerhq/errors": { - "version": "5.50.0", - "resolved": "https://registry.npmjs.org/@ledgerhq/errors/-/errors-5.50.0.tgz", - "integrity": "sha512-gu6aJ/BHuRlpU7kgVpy2vcYk6atjB4iauP2ymF7Gk0ez0Y/6VSMVSJvubeEQN+IV60+OBK0JgeIZG7OiHaw8ow==" - }, - "node_modules/@ledgerhq/hw-app-eth": { - "version": "5.27.2", - "resolved": "https://registry.npmjs.org/@ledgerhq/hw-app-eth/-/hw-app-eth-5.27.2.tgz", - "integrity": "sha512-llNdrE894cCN8j6yxJEUniciyLVcLmu5N0UmIJLOObztG+5rOF4bX54h4SreTWK+E10Z0CzHSeyE5Lz/tVcqqQ==", - "dependencies": { - "@ledgerhq/cryptoassets": "^5.27.2", - "@ledgerhq/errors": "^5.26.0", - "@ledgerhq/hw-transport": "^5.26.0", - "bignumber.js": "^9.0.1", - "rlp": "^2.2.6" - } - }, - "node_modules/@ledgerhq/hw-transport": { - "version": "5.26.0", - "resolved": "https://registry.npmjs.org/@ledgerhq/hw-transport/-/hw-transport-5.26.0.tgz", - "integrity": "sha512-NFeJOJmyEfAX8uuIBTpocWHcz630sqPcXbu864Q+OCBm4EK5UOKV1h/pX7e0xgNIKY8zhJ/O4p4cIZp9tnXLHQ==", - "dependencies": { - "@ledgerhq/devices": "^5.26.0", - "@ledgerhq/errors": "^5.26.0", - "events": "^3.2.0" - } - }, - "node_modules/@ledgerhq/hw-transport-u2f": { - "version": "5.26.0", - "resolved": "https://registry.npmjs.org/@ledgerhq/hw-transport-u2f/-/hw-transport-u2f-5.26.0.tgz", - "integrity": "sha512-QTxP1Rsh+WZ184LUOelYVLeaQl3++V3I2jFik+l9JZtakwEHjD0XqOT750xpYNL/vfHsy31Wlz+oicdxGzFk+w==", - "deprecated": "@ledgerhq/hw-transport-u2f is deprecated. Please use @ledgerhq/hw-transport-webusb or @ledgerhq/hw-transport-webhid. https://github.com/LedgerHQ/ledgerjs/blob/master/docs/migrate_webusb.md", - "dependencies": { - "@ledgerhq/errors": "^5.26.0", - "@ledgerhq/hw-transport": "^5.26.0", - "@ledgerhq/logs": "^5.26.0", - "u2f-api": "0.2.7" - } - }, - "node_modules/@ledgerhq/logs": { - "version": "5.50.0", - "resolved": "https://registry.npmjs.org/@ledgerhq/logs/-/logs-5.50.0.tgz", - "integrity": "sha512-swKHYCOZUGyVt4ge0u8a7AwNcA//h4nx5wIi0sruGye1IJ5Cva0GyK9L2/WdX+kWVTKp92ZiEo1df31lrWGPgA==" - }, - "node_modules/@maticnetwork/maticjs": { - "version": "3.6.6", - "resolved": "https://registry.npmjs.org/@maticnetwork/maticjs/-/maticjs-3.6.6.tgz", - "integrity": "sha512-VhbK9yHdRgQl9GWt1XwasHTDEImd0ApmHFG0yCN8xjPz0YvXgsSPb+p+M5JzQYEgLQGZ3L/K3nnVYHBTiRIhPA==", - "dependencies": { - "@ethereumjs/block": "^3.6.2", - "ethereumjs-util": "^7.1.4", - "merkle-patricia-tree": "^4.2.4", - "node-fetch": "^2.6.1" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/@maticnetwork/maticjs-ethers": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/@maticnetwork/maticjs-ethers/-/maticjs-ethers-1.0.3.tgz", - "integrity": "sha512-paGulmLG62We/pyOVH3Q7mZd/E/SGFKa+rXtyvpoMB8v5oFn/yTtoKvLWyIoZ8zBi4JrjSegKL+/US5+OibYwQ==", - "dependencies": { - "ethers": "^5.5.1" - }, - "peerDependencies": { - "@maticnetwork/maticjs": "^3.2.5" + "@ethersproject/abi": "5.7.0", + "@ethersproject/abstract-provider": "5.7.0", + "@ethersproject/abstract-signer": "5.7.0", + "@ethersproject/address": "5.7.0", + "@ethersproject/base64": "5.7.0", + "@ethersproject/basex": "5.7.0", + "@ethersproject/bignumber": "5.7.0", + "@ethersproject/bytes": "5.7.0", + "@ethersproject/constants": "5.7.0", + "@ethersproject/contracts": "5.7.0", + "@ethersproject/hash": "5.7.0", + "@ethersproject/hdnode": "5.7.0", + "@ethersproject/json-wallets": "5.7.0", + "@ethersproject/keccak256": "5.7.0", + "@ethersproject/logger": "5.7.0", + "@ethersproject/networks": "5.7.1", + "@ethersproject/pbkdf2": "5.7.0", + "@ethersproject/properties": "5.7.0", + "@ethersproject/providers": "5.7.2", + "@ethersproject/random": "5.7.0", + "@ethersproject/rlp": "5.7.0", + "@ethersproject/sha2": "5.7.0", + "@ethersproject/signing-key": "5.7.0", + "@ethersproject/solidity": "5.7.0", + "@ethersproject/strings": "5.7.0", + "@ethersproject/transactions": "5.7.0", + "@ethersproject/units": "5.7.0", + "@ethersproject/wallet": "5.7.0", + "@ethersproject/web": "5.7.1", + "@ethersproject/wordlists": "5.7.0" } }, "node_modules/@maticnetwork/maticjs-web3": { @@ -3390,40 +1746,6 @@ "@maticnetwork/maticjs": "^3.2.0" } }, - "node_modules/@matterlabs/hardhat-zksync-chai-matchers": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/@matterlabs/hardhat-zksync-chai-matchers/-/hardhat-zksync-chai-matchers-0.1.2.tgz", - "integrity": "sha512-lJWlVgnu4p0QvMucEdeVOWxCpPZogsygntN+RXLMS0R4PnqwslKHfG1ZbcgWRWQ7vgABqCCIF7d1GjieWdlFmQ==", - "peerDependencies": { - "@nomicfoundation/hardhat-chai-matchers": "~1.0.4" - } - }, - "node_modules/@matterlabs/hardhat-zksync-deploy": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/@matterlabs/hardhat-zksync-deploy/-/hardhat-zksync-deploy-0.6.3.tgz", - "integrity": "sha512-FB+2xFL/80JJwlGna+aHA6dk4ONrMFqThTZATYVJUAKooA0Aw5qmpmM8B3qsNB4LLzHSO/EmVrHIcLaPv8hYwQ==", - "dependencies": { - "chalk": "4.1.2" - }, - "peerDependencies": { - "ethers": "~5.7.2", - "hardhat": "^2.13.0", - "zksync-web3": "^0.14.3" - } - }, - "node_modules/@matterlabs/hardhat-zksync-solc": { - "version": "0.3.16", - "resolved": "https://registry.npmjs.org/@matterlabs/hardhat-zksync-solc/-/hardhat-zksync-solc-0.3.16.tgz", - "integrity": "sha512-gw46yyiCfj49I/nbUcOlnF5xE80WyeW/i8i9ouHom4KWJNt1kioQIwOPkN7aJURhXpJJxKSdeWBrQHLWTZDnTA==", - "dependencies": { - "@nomiclabs/hardhat-docker": "^2.0.0", - "chalk": "4.1.2", - "dockerode": "^3.3.4" - }, - "peerDependencies": { - "hardhat": "^2.13.0" - } - }, "node_modules/@metamask/eth-sig-util": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/@metamask/eth-sig-util/-/eth-sig-util-4.0.1.tgz", @@ -3488,43 +1810,6 @@ "rlp": "^2.2.3" } }, - "node_modules/@metamask/safe-event-emitter": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@metamask/safe-event-emitter/-/safe-event-emitter-2.0.0.tgz", - "integrity": "sha512-/kSXhY692qiV1MXu6EeOZvg5nECLclxNXcKCxJ3cXQgYuRymRHpdx/t7JXfsK+JLjwA1e1c1/SBrlQYpusC29Q==" - }, - "node_modules/@morgan-stanley/ts-mocking-bird": { - "version": "0.6.4", - "resolved": "https://registry.npmjs.org/@morgan-stanley/ts-mocking-bird/-/ts-mocking-bird-0.6.4.tgz", - "integrity": "sha512-57VJIflP8eR2xXa9cD1LUawh+Gh+BVQfVu0n6GALyg/AqV/Nz25kDRvws3i9kIe1PTrbsZZOYpsYp6bXPd6nVA==", - "dev": true, - "dependencies": { - "lodash": "^4.17.16", - "uuid": "^7.0.3" - }, - "peerDependencies": { - "jasmine": "2.x || 3.x || 4.x", - "jest": "26.x || 27.x || 28.x", - "typescript": ">=4.2" - }, - "peerDependenciesMeta": { - "jasmine": { - "optional": true - }, - "jest": { - "optional": true - } - } - }, - "node_modules/@morgan-stanley/ts-mocking-bird/node_modules/uuid": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-7.0.3.tgz", - "integrity": "sha512-DPSke0pXhTZgoF/d+WSt2QaKMCFSfx7QegxEWT+JOuHF5aWrKEn0G+ztjuJg/gG8/ItK+rbPCD/yNv8yyih6Cg==", - "dev": true, - "bin": { - "uuid": "dist/bin/uuid" - } - }, "node_modules/@noble/curves": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/@noble/curves/-/curves-1.1.0.tgz", @@ -3536,7 +1821,7 @@ "url": "https://paulmillr.com/funding/" } }, - "node_modules/@noble/curves/node_modules/@noble/hashes": { + "node_modules/@noble/hashes": { "version": "1.3.1", "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.3.1.tgz", "integrity": "sha512-EbqwksQwz9xDRGfDST86whPBgM65E0OH/pCgqW0GBVzO22bNE+NuIbeTb714+IfSjU3aRk47EUvXIb5bTsenKA==", @@ -3547,10 +1832,10 @@ "url": "https://paulmillr.com/funding/" } }, - "node_modules/@noble/hashes": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.1.3.tgz", - "integrity": "sha512-CE0FCR57H2acVI5UOzIGSSIYxZ6v/HOhDR0Ro9VLyhnzLwx0o8W1mmgaqlEUx4049qJDlIBRztv5k+MM8vbO3A==", + "node_modules/@noble/secp256k1": { + "version": "1.7.1", + "resolved": "https://registry.npmjs.org/@noble/secp256k1/-/secp256k1-1.7.1.tgz", + "integrity": "sha512-hOUk6AyBFmqVrv7k5WAw/LpszxVbj9gGN4JRkIX52fdFAj1UA61KXmZDvqVEm+pOyec3+fIeZB02LYa/pWOArw==", "funding": [ { "type": "individual", @@ -3597,6 +1882,53 @@ "setimmediate": "^1.0.5" } }, + "node_modules/@nomicfoundation/ethereumjs-block/node_modules/ethers": { + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/ethers/-/ethers-5.7.2.tgz", + "integrity": "sha512-wswUsmWo1aOK8rR7DIKiWSw9DbLWe6x98Jrn8wcTflTVvaXhAMaB5zGAXy0GYQEQp9iO1iSHWVyARQm11zUtyg==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "dependencies": { + "@ethersproject/abi": "5.7.0", + "@ethersproject/abstract-provider": "5.7.0", + "@ethersproject/abstract-signer": "5.7.0", + "@ethersproject/address": "5.7.0", + "@ethersproject/base64": "5.7.0", + "@ethersproject/basex": "5.7.0", + "@ethersproject/bignumber": "5.7.0", + "@ethersproject/bytes": "5.7.0", + "@ethersproject/constants": "5.7.0", + "@ethersproject/contracts": "5.7.0", + "@ethersproject/hash": "5.7.0", + "@ethersproject/hdnode": "5.7.0", + "@ethersproject/json-wallets": "5.7.0", + "@ethersproject/keccak256": "5.7.0", + "@ethersproject/logger": "5.7.0", + "@ethersproject/networks": "5.7.1", + "@ethersproject/pbkdf2": "5.7.0", + "@ethersproject/properties": "5.7.0", + "@ethersproject/providers": "5.7.2", + "@ethersproject/random": "5.7.0", + "@ethersproject/rlp": "5.7.0", + "@ethersproject/sha2": "5.7.0", + "@ethersproject/signing-key": "5.7.0", + "@ethersproject/solidity": "5.7.0", + "@ethersproject/strings": "5.7.0", + "@ethersproject/transactions": "5.7.0", + "@ethersproject/units": "5.7.0", + "@ethersproject/wallet": "5.7.0", + "@ethersproject/web": "5.7.1", + "@ethersproject/wordlists": "5.7.0" + } + }, "node_modules/@nomicfoundation/ethereumjs-blockchain": { "version": "7.0.2", "resolved": "https://registry.npmjs.org/@nomicfoundation/ethereumjs-blockchain/-/ethereumjs-blockchain-7.0.2.tgz", @@ -3775,6 +2107,53 @@ "setimmediate": "^1.0.5" } }, + "node_modules/@nomicfoundation/ethereumjs-statemanager/node_modules/ethers": { + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/ethers/-/ethers-5.7.2.tgz", + "integrity": "sha512-wswUsmWo1aOK8rR7DIKiWSw9DbLWe6x98Jrn8wcTflTVvaXhAMaB5zGAXy0GYQEQp9iO1iSHWVyARQm11zUtyg==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "dependencies": { + "@ethersproject/abi": "5.7.0", + "@ethersproject/abstract-provider": "5.7.0", + "@ethersproject/abstract-signer": "5.7.0", + "@ethersproject/address": "5.7.0", + "@ethersproject/base64": "5.7.0", + "@ethersproject/basex": "5.7.0", + "@ethersproject/bignumber": "5.7.0", + "@ethersproject/bytes": "5.7.0", + "@ethersproject/constants": "5.7.0", + "@ethersproject/contracts": "5.7.0", + "@ethersproject/hash": "5.7.0", + "@ethersproject/hdnode": "5.7.0", + "@ethersproject/json-wallets": "5.7.0", + "@ethersproject/keccak256": "5.7.0", + "@ethersproject/logger": "5.7.0", + "@ethersproject/networks": "5.7.1", + "@ethersproject/pbkdf2": "5.7.0", + "@ethersproject/properties": "5.7.0", + "@ethersproject/providers": "5.7.2", + "@ethersproject/random": "5.7.0", + "@ethersproject/rlp": "5.7.0", + "@ethersproject/sha2": "5.7.0", + "@ethersproject/signing-key": "5.7.0", + "@ethersproject/solidity": "5.7.0", + "@ethersproject/strings": "5.7.0", + "@ethersproject/transactions": "5.7.0", + "@ethersproject/units": "5.7.0", + "@ethersproject/wallet": "5.7.0", + "@ethersproject/web": "5.7.1", + "@ethersproject/wordlists": "5.7.0" + } + }, "node_modules/@nomicfoundation/ethereumjs-trie": { "version": "6.0.2", "resolved": "https://registry.npmjs.org/@nomicfoundation/ethereumjs-trie/-/ethereumjs-trie-6.0.2.tgz", @@ -3947,303 +2326,195 @@ "setimmediate": "^1.0.5" } }, - "node_modules/@nomicfoundation/hardhat-chai-matchers": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/@nomicfoundation/hardhat-chai-matchers/-/hardhat-chai-matchers-1.0.6.tgz", - "integrity": "sha512-f5ZMNmabZeZegEfuxn/0kW+mm7+yV7VNDxLpMOMGXWFJ2l/Ct3QShujzDRF9cOkK9Ui/hbDeOWGZqyQALDXVCQ==", - "peer": true, + "node_modules/@nomicfoundation/hardhat-ethers": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/@nomicfoundation/hardhat-ethers/-/hardhat-ethers-3.0.5.tgz", + "integrity": "sha512-RNFe8OtbZK6Ila9kIlHp0+S80/0Bu/3p41HUpaRIoHLm6X3WekTd83vob3rE54Duufu1edCiBDxspBzi2rxHHw==", + "dev": true, "dependencies": { - "@ethersproject/abi": "^5.1.2", - "@types/chai-as-promised": "^7.1.3", - "chai-as-promised": "^7.1.1", - "deep-eql": "^4.0.1", - "ordinal": "^1.0.3" + "debug": "^4.1.1", + "lodash.isequal": "^4.5.0" }, "peerDependencies": { - "@nomiclabs/hardhat-ethers": "^2.0.0", - "chai": "^4.2.0", - "ethers": "^5.0.0", - "hardhat": "^2.9.4" + "ethers": "^6.1.0", + "hardhat": "^2.0.0" } }, "node_modules/@nomicfoundation/solidity-analyzer": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/@nomicfoundation/solidity-analyzer/-/solidity-analyzer-0.1.0.tgz", - "integrity": "sha512-xGWAiVCGOycvGiP/qrlf9f9eOn7fpNbyJygcB0P21a1MDuVPlKt0Srp7rvtBEutYQ48ouYnRXm33zlRnlTOPHg==", + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/@nomicfoundation/solidity-analyzer/-/solidity-analyzer-0.1.1.tgz", + "integrity": "sha512-1LMtXj1puAxyFusBgUIy5pZk3073cNXYnXUpuNKFghHbIit/xZgbk0AokpUADbNm3gyD6bFWl3LRFh3dhVdREg==", "engines": { "node": ">= 12" }, "optionalDependencies": { - "@nomicfoundation/solidity-analyzer-darwin-arm64": "0.1.0", - "@nomicfoundation/solidity-analyzer-darwin-x64": "0.1.0", - "@nomicfoundation/solidity-analyzer-freebsd-x64": "0.1.0", - "@nomicfoundation/solidity-analyzer-linux-arm64-gnu": "0.1.0", - "@nomicfoundation/solidity-analyzer-linux-arm64-musl": "0.1.0", - "@nomicfoundation/solidity-analyzer-linux-x64-gnu": "0.1.0", - "@nomicfoundation/solidity-analyzer-linux-x64-musl": "0.1.0", - "@nomicfoundation/solidity-analyzer-win32-arm64-msvc": "0.1.0", - "@nomicfoundation/solidity-analyzer-win32-ia32-msvc": "0.1.0", - "@nomicfoundation/solidity-analyzer-win32-x64-msvc": "0.1.0" + "@nomicfoundation/solidity-analyzer-darwin-arm64": "0.1.1", + "@nomicfoundation/solidity-analyzer-darwin-x64": "0.1.1", + "@nomicfoundation/solidity-analyzer-freebsd-x64": "0.1.1", + "@nomicfoundation/solidity-analyzer-linux-arm64-gnu": "0.1.1", + "@nomicfoundation/solidity-analyzer-linux-arm64-musl": "0.1.1", + "@nomicfoundation/solidity-analyzer-linux-x64-gnu": "0.1.1", + "@nomicfoundation/solidity-analyzer-linux-x64-musl": "0.1.1", + "@nomicfoundation/solidity-analyzer-win32-arm64-msvc": "0.1.1", + "@nomicfoundation/solidity-analyzer-win32-ia32-msvc": "0.1.1", + "@nomicfoundation/solidity-analyzer-win32-x64-msvc": "0.1.1" + } + }, + "node_modules/@nomicfoundation/solidity-analyzer-darwin-arm64": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/@nomicfoundation/solidity-analyzer-darwin-arm64/-/solidity-analyzer-darwin-arm64-0.1.1.tgz", + "integrity": "sha512-KcTodaQw8ivDZyF+D76FokN/HdpgGpfjc/gFCImdLUyqB6eSWVaZPazMbeAjmfhx3R0zm/NYVzxwAokFKgrc0w==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 10" } }, - "node_modules/@nomicfoundation/solidity-analyzer-linux-x64-gnu": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/@nomicfoundation/solidity-analyzer-linux-x64-gnu/-/solidity-analyzer-linux-x64-gnu-0.1.0.tgz", - "integrity": "sha512-lR0AxK1x/MeKQ/3Pt923kPvwigmGX3OxeU5qNtQ9pj9iucgk4PzhbS3ruUeSpYhUxG50jN4RkIGwUMoev5lguw==", + "node_modules/@nomicfoundation/solidity-analyzer-darwin-x64": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/@nomicfoundation/solidity-analyzer-darwin-x64/-/solidity-analyzer-darwin-x64-0.1.1.tgz", + "integrity": "sha512-XhQG4BaJE6cIbjAVtzGOGbK3sn1BO9W29uhk9J8y8fZF1DYz0Doj8QDMfpMu+A6TjPDs61lbsmeYodIDnfveSA==", "cpu": [ "x64" ], "optional": true, "os": [ - "linux" + "darwin" ], "engines": { "node": ">= 10" } }, - "node_modules/@nomicfoundation/solidity-analyzer-linux-x64-musl": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/@nomicfoundation/solidity-analyzer-linux-x64-musl/-/solidity-analyzer-linux-x64-musl-0.1.0.tgz", - "integrity": "sha512-A1he/8gy/JeBD3FKvmI6WUJrGrI5uWJNr5Xb9WdV+DK0F8msuOqpEByLlnTdLkXMwW7nSl3awvLezOs9xBHJEg==", + "node_modules/@nomicfoundation/solidity-analyzer-freebsd-x64": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/@nomicfoundation/solidity-analyzer-freebsd-x64/-/solidity-analyzer-freebsd-x64-0.1.1.tgz", + "integrity": "sha512-GHF1VKRdHW3G8CndkwdaeLkVBi5A9u2jwtlS7SLhBc8b5U/GcoL39Q+1CSO3hYqePNP+eV5YI7Zgm0ea6kMHoA==", "cpu": [ "x64" ], "optional": true, "os": [ - "linux" + "freebsd" ], "engines": { "node": ">= 10" } }, - "node_modules/@nomiclabs/hardhat-docker": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/@nomiclabs/hardhat-docker/-/hardhat-docker-2.0.2.tgz", - "integrity": "sha512-XgGEpRT3wlA1VslyB57zyAHV+oll8KnV1TjwnxxC1tpAL04/lbdwpdO5KxInVN8irMSepqFpsiSkqlcnvbE7Ng==", - "dependencies": { - "dockerode": "^2.5.8", - "fs-extra": "^7.0.1", - "node-fetch": "^2.6.0" - } - }, - "node_modules/@nomiclabs/hardhat-docker/node_modules/bl": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/bl/-/bl-1.2.3.tgz", - "integrity": "sha512-pvcNpa0UU69UT341rO6AYy4FVAIkUHuZXRIWbq+zHnsVcRzDDjIAhGuuYoi0d//cwIwtt4pkpKycWEfjdV+vww==", - "dependencies": { - "readable-stream": "^2.3.5", - "safe-buffer": "^5.1.1" - } - }, - "node_modules/@nomiclabs/hardhat-docker/node_modules/bl/node_modules/isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==" - }, - "node_modules/@nomiclabs/hardhat-docker/node_modules/bl/node_modules/readable-stream": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", - "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", - "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "node_modules/@nomiclabs/hardhat-docker/node_modules/bl/node_modules/string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dependencies": { - "safe-buffer": "~5.1.0" - } - }, - "node_modules/@nomiclabs/hardhat-docker/node_modules/debug": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", - "dependencies": { - "ms": "^2.1.1" - } - }, - "node_modules/@nomiclabs/hardhat-docker/node_modules/docker-modem": { - "version": "1.0.9", - "resolved": "https://registry.npmjs.org/docker-modem/-/docker-modem-1.0.9.tgz", - "integrity": "sha512-lVjqCSCIAUDZPAZIeyM125HXfNvOmYYInciphNrLrylUtKyW66meAjSPXWchKVzoIYZx69TPnAepVSSkeawoIw==", - "dependencies": { - "debug": "^3.2.6", - "JSONStream": "1.3.2", - "readable-stream": "~1.0.26-4", - "split-ca": "^1.0.0" - }, + "node_modules/@nomicfoundation/solidity-analyzer-linux-arm64-gnu": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/@nomicfoundation/solidity-analyzer-linux-arm64-gnu/-/solidity-analyzer-linux-arm64-gnu-0.1.1.tgz", + "integrity": "sha512-g4Cv2fO37ZsUENQ2vwPnZc2zRenHyAxHcyBjKcjaSmmkKrFr64yvzeNO8S3GBFCo90rfochLs99wFVGT/0owpg==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "linux" + ], "engines": { - "node": ">= 0.8" + "node": ">= 10" } }, - "node_modules/@nomiclabs/hardhat-docker/node_modules/dockerode": { - "version": "2.5.8", - "resolved": "https://registry.npmjs.org/dockerode/-/dockerode-2.5.8.tgz", - "integrity": "sha512-+7iOUYBeDTScmOmQqpUYQaE7F4vvIt6+gIZNHWhqAQEI887tiPFB9OvXI/HzQYqfUNvukMK+9myLW63oTJPZpw==", - "dependencies": { - "concat-stream": "~1.6.2", - "docker-modem": "^1.0.8", - "tar-fs": "~1.16.3" - }, + "node_modules/@nomicfoundation/solidity-analyzer-linux-arm64-musl": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/@nomicfoundation/solidity-analyzer-linux-arm64-musl/-/solidity-analyzer-linux-arm64-musl-0.1.1.tgz", + "integrity": "sha512-WJ3CE5Oek25OGE3WwzK7oaopY8xMw9Lhb0mlYuJl/maZVo+WtP36XoQTb7bW/i8aAdHW5Z+BqrHMux23pvxG3w==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "linux" + ], "engines": { - "node": ">= 0.8" + "node": ">= 10" } }, - "node_modules/@nomiclabs/hardhat-docker/node_modules/fs-extra": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-7.0.1.tgz", - "integrity": "sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==", - "dependencies": { - "graceful-fs": "^4.1.2", - "jsonfile": "^4.0.0", - "universalify": "^0.1.0" - }, + "node_modules/@nomicfoundation/solidity-analyzer-linux-x64-gnu": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/@nomicfoundation/solidity-analyzer-linux-x64-gnu/-/solidity-analyzer-linux-x64-gnu-0.1.1.tgz", + "integrity": "sha512-5WN7leSr5fkUBBjE4f3wKENUy9HQStu7HmWqbtknfXkkil+eNWiBV275IOlpXku7v3uLsXTOKpnnGHJYI2qsdA==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "linux" + ], "engines": { - "node": ">=6 <7 || >=8" - } - }, - "node_modules/@nomiclabs/hardhat-docker/node_modules/isarray": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", - "integrity": "sha512-D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ==" - }, - "node_modules/@nomiclabs/hardhat-docker/node_modules/jsonfile": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", - "integrity": "sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==", - "optionalDependencies": { - "graceful-fs": "^4.1.6" + "node": ">= 10" } }, - "node_modules/@nomiclabs/hardhat-docker/node_modules/JSONStream": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/JSONStream/-/JSONStream-1.3.2.tgz", - "integrity": "sha512-mn0KSip7N4e0UDPZHnqDsHECo5uGQrixQKnAskOM1BIB8hd7QKbd6il8IPRPudPHOeHiECoCFqhyMaRO9+nWyA==", - "dependencies": { - "jsonparse": "^1.2.0", - "through": ">=2.2.7 <3" - }, - "bin": { - "JSONStream": "bin.js" - }, + "node_modules/@nomicfoundation/solidity-analyzer-linux-x64-musl": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/@nomicfoundation/solidity-analyzer-linux-x64-musl/-/solidity-analyzer-linux-x64-musl-0.1.1.tgz", + "integrity": "sha512-KdYMkJOq0SYPQMmErv/63CwGwMm5XHenEna9X9aB8mQmhDBrYrlAOSsIPgFCUSL0hjxE3xHP65/EPXR/InD2+w==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "linux" + ], "engines": { - "node": "*" - } - }, - "node_modules/@nomiclabs/hardhat-docker/node_modules/pump": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/pump/-/pump-1.0.3.tgz", - "integrity": "sha512-8k0JupWme55+9tCVE+FS5ULT3K6AbgqrGa58lTT49RpyfwwcGedHqaC5LlQNdEAumn/wFsu6aPwkuPMioy8kqw==", - "dependencies": { - "end-of-stream": "^1.1.0", - "once": "^1.3.1" - } - }, - "node_modules/@nomiclabs/hardhat-docker/node_modules/readable-stream": { - "version": "1.0.34", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz", - "integrity": "sha512-ok1qVCJuRkNmvebYikljxJA/UEsKwLl2nI1OmaqAu4/UE+h0wKCHok4XkL/gvi39OacXvw59RJUOFUkDib2rHg==", - "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.1", - "isarray": "0.0.1", - "string_decoder": "~0.10.x" - } - }, - "node_modules/@nomiclabs/hardhat-docker/node_modules/safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" - }, - "node_modules/@nomiclabs/hardhat-docker/node_modules/string_decoder": { - "version": "0.10.31", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", - "integrity": "sha512-ev2QzSzWPYmy9GuqfIVildA4OdcGLeFZQrq5ys6RtiuF+RQQiZWr8TZNyAcuVXyQRYfEO+MsoB/1BuQVhOJuoQ==" - }, - "node_modules/@nomiclabs/hardhat-docker/node_modules/tar-fs": { - "version": "1.16.3", - "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-1.16.3.tgz", - "integrity": "sha512-NvCeXpYx7OsmOh8zIOP/ebG55zZmxLE0etfWRbWok+q2Qo8x/vOR/IJT1taADXPe+jsiu9axDb3X4B+iIgNlKw==", - "dependencies": { - "chownr": "^1.0.1", - "mkdirp": "^0.5.1", - "pump": "^1.0.0", - "tar-stream": "^1.1.2" + "node": ">= 10" } }, - "node_modules/@nomiclabs/hardhat-docker/node_modules/tar-stream": { - "version": "1.6.2", - "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-1.6.2.tgz", - "integrity": "sha512-rzS0heiNf8Xn7/mpdSVVSMAWAoy9bfb1WOTYC78Z0UQKeKa/CWS8FOq0lKGNa8DWKAn9gxjCvMLYc5PGXYlK2A==", - "dependencies": { - "bl": "^1.0.0", - "buffer-alloc": "^1.2.0", - "end-of-stream": "^1.0.0", - "fs-constants": "^1.0.0", - "readable-stream": "^2.3.0", - "to-buffer": "^1.1.1", - "xtend": "^4.0.0" - }, + "node_modules/@nomicfoundation/solidity-analyzer-win32-arm64-msvc": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/@nomicfoundation/solidity-analyzer-win32-arm64-msvc/-/solidity-analyzer-win32-arm64-msvc-0.1.1.tgz", + "integrity": "sha512-VFZASBfl4qiBYwW5xeY20exWhmv6ww9sWu/krWSesv3q5hA0o1JuzmPHR4LPN6SUZj5vcqci0O6JOL8BPw+APg==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "win32" + ], "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/@nomiclabs/hardhat-docker/node_modules/tar-stream/node_modules/isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==" - }, - "node_modules/@nomiclabs/hardhat-docker/node_modules/tar-stream/node_modules/readable-stream": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", - "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", - "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "node_modules/@nomiclabs/hardhat-docker/node_modules/tar-stream/node_modules/string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dependencies": { - "safe-buffer": "~5.1.0" + "node": ">= 10" } }, - "node_modules/@nomiclabs/hardhat-docker/node_modules/universalify": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", - "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", + "node_modules/@nomicfoundation/solidity-analyzer-win32-ia32-msvc": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/@nomicfoundation/solidity-analyzer-win32-ia32-msvc/-/solidity-analyzer-win32-ia32-msvc-0.1.1.tgz", + "integrity": "sha512-JnFkYuyCSA70j6Si6cS1A9Gh1aHTEb8kOTBApp/c7NRTFGNMH8eaInKlyuuiIbvYFhlXW4LicqyYuWNNq9hkpQ==", + "cpu": [ + "ia32" + ], + "optional": true, + "os": [ + "win32" + ], "engines": { - "node": ">= 4.0.0" + "node": ">= 10" } }, - "node_modules/@nomiclabs/hardhat-ethers": { - "version": "2.2.3", - "resolved": "https://registry.npmjs.org/@nomiclabs/hardhat-ethers/-/hardhat-ethers-2.2.3.tgz", - "integrity": "sha512-YhzPdzb612X591FOe68q+qXVXGG2ANZRvDo0RRUtimev85rCrAlv/TLMEZw5c+kq9AbzocLTVX/h2jVIFPL9Xg==", - "peerDependencies": { - "ethers": "^5.0.0", - "hardhat": "^2.0.0" + "node_modules/@nomicfoundation/solidity-analyzer-win32-x64-msvc": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/@nomicfoundation/solidity-analyzer-win32-x64-msvc/-/solidity-analyzer-win32-x64-msvc-0.1.1.tgz", + "integrity": "sha512-HrVJr6+WjIXGnw3Q9u6KQcbZCtk0caVWhCdFADySvRyUxJ8PnzlaP+MhwNE8oyT8OZ6ejHBRrrgjSqDCFXGirw==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10" } }, "node_modules/@nomiclabs/hardhat-etherscan": { - "version": "3.1.7", - "resolved": "https://registry.npmjs.org/@nomiclabs/hardhat-etherscan/-/hardhat-etherscan-3.1.7.tgz", - "integrity": "sha512-tZ3TvSgpvsQ6B6OGmo1/Au6u8BrAkvs1mIC/eURA3xgIfznUZBhmpne8hv7BXUzw9xNL3fXdpOYgOQlVMTcoHQ==", + "version": "3.1.8", + "resolved": "https://registry.npmjs.org/@nomiclabs/hardhat-etherscan/-/hardhat-etherscan-3.1.8.tgz", + "integrity": "sha512-v5F6IzQhrsjHh6kQz4uNrym49brK9K5bYCq2zQZ729RYRaifI9hHbtmK+KkIVevfhut7huQFEQ77JLRMAzWYjQ==", + "deprecated": "The @nomiclabs/hardhat-etherscan package is deprecated, please use @nomicfoundation/hardhat-verify instead", "dev": true, "dependencies": { "@ethersproject/abi": "^5.1.2", @@ -4273,18 +2544,6 @@ "node": ">=4" } }, - "node_modules/@nomiclabs/hardhat-etherscan/node_modules/cbor": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/cbor/-/cbor-8.1.0.tgz", - "integrity": "sha512-DwGjNW9omn6EwP70aXsn7FQJx5kO12tX0bZkaTjzdVFM6/7nhA4t0EENocKGx6D2Bch9PE2KzCUf5SceBdeijg==", - "dev": true, - "dependencies": { - "nofilter": "^3.1.0" - }, - "engines": { - "node": ">=12.19" - } - }, "node_modules/@nomiclabs/hardhat-etherscan/node_modules/chalk": { "version": "2.4.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", @@ -4355,19 +2614,10 @@ "graceful-fs": "^4.1.6" } }, - "node_modules/@nomiclabs/hardhat-etherscan/node_modules/nofilter": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/nofilter/-/nofilter-3.1.0.tgz", - "integrity": "sha512-l2NNj07e9afPnhAhvgVrCD/oy2Ai1yfLpuo3EpiO1jFTsB4sFz6oIfAfSZyQzVpkZQ9xS8ZS5g1jCBgq4Hwo0g==", - "dev": true, - "engines": { - "node": ">=12.19" - } - }, "node_modules/@nomiclabs/hardhat-etherscan/node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", "dev": true, "bin": { "semver": "bin/semver.js" @@ -4398,7 +2648,6 @@ "version": "2.0.7", "resolved": "https://registry.npmjs.org/@nomiclabs/hardhat-truffle5/-/hardhat-truffle5-2.0.7.tgz", "integrity": "sha512-Pw8451IUZp1bTp0QqCHCYfCHs66sCnyxPcaorapu9mfOV9xnZsVaFdtutnhNEiXdiZwbed7LFKpRsde4BjFwig==", - "dev": true, "dependencies": { "@nomiclabs/truffle-contract": "^4.2.23", "@types/chai": "^4.2.0", @@ -4416,7 +2665,6 @@ "version": "7.0.1", "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-7.0.1.tgz", "integrity": "sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==", - "dev": true, "dependencies": { "graceful-fs": "^4.1.2", "jsonfile": "^4.0.0", @@ -4430,7 +2678,6 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", "integrity": "sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==", - "dev": true, "optionalDependencies": { "graceful-fs": "^4.1.6" } @@ -4439,15 +2686,14 @@ "version": "0.1.2", "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", - "dev": true, "engines": { "node": ">= 4.0.0" } }, "node_modules/@nomiclabs/hardhat-vyper": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/@nomiclabs/hardhat-vyper/-/hardhat-vyper-3.0.4.tgz", - "integrity": "sha512-VSmNCs0MQCn7qgWubfSkJkFEJmsTvbimPsbxknM5jLFi7pNeDVB5eO00GaoweuZiWKBVTHYJsylVK5686GoPrQ==", + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/@nomiclabs/hardhat-vyper/-/hardhat-vyper-3.0.5.tgz", + "integrity": "sha512-i/Q771sr4vnSTaNTMGe3kX4Nl2on7hiXHHcz1MrW0+MKAJfi3A4sEloXX3aim6TylCPFq0M1/esDX+Y0WPmfbQ==", "dev": true, "dependencies": { "debug": "^4.1.1", @@ -4484,9 +2730,9 @@ } }, "node_modules/@nomiclabs/hardhat-vyper/node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", "dev": true, "bin": { "semver": "bin/semver.js" @@ -4501,24 +2747,10 @@ "node": ">= 4.0.0" } }, - "node_modules/@nomiclabs/hardhat-waffle": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/@nomiclabs/hardhat-waffle/-/hardhat-waffle-2.0.6.tgz", - "integrity": "sha512-+Wz0hwmJGSI17B+BhU/qFRZ1l6/xMW82QGXE/Gi+WTmwgJrQefuBs1lIf7hzQ1hLk6hpkvb/zwcNkpVKRYTQYg==", - "dev": true, - "peerDependencies": { - "@nomiclabs/hardhat-ethers": "^2.0.0", - "@types/sinon-chai": "^3.2.3", - "ethereum-waffle": "*", - "ethers": "^5.0.0", - "hardhat": "^2.0.0" - } - }, "node_modules/@nomiclabs/hardhat-web3": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/@nomiclabs/hardhat-web3/-/hardhat-web3-2.0.0.tgz", "integrity": "sha512-zt4xN+D+fKl3wW2YlTX3k9APR3XZgPkxJYf36AcliJn3oujnKEVRZaHu0PhgLjO+gR+F/kiYayo9fgd2L8970Q==", - "dev": true, "dependencies": { "@types/bignumber.js": "^5.0.0" }, @@ -4531,7 +2763,6 @@ "version": "4.5.10", "resolved": "https://registry.npmjs.org/@nomiclabs/truffle-contract/-/truffle-contract-4.5.10.tgz", "integrity": "sha512-nF/6InFV+0hUvutyFgsdOMCoYlr//2fJbRER4itxYtQtc4/O1biTwZIKRu+5l2J5Sq6LU2WX7vZHtDgQdhWxIQ==", - "dev": true, "dependencies": { "@ensdomains/ensjs": "^2.0.1", "@truffle/blockchain-utils": "^0.1.3", @@ -4552,11 +2783,15 @@ "web3-utils": "^1.2.1" } }, + "node_modules/@nomiclabs/truffle-contract/node_modules/aes-js": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/aes-js/-/aes-js-3.0.0.tgz", + "integrity": "sha512-H7wUZRn8WpTq9jocdxQ2c8x2sKo9ZVmzfRE13GiNJXfp7NcKYEdvl3vspKjXox6RIG2VtaRe4JFvxG4rqp2Zuw==" + }, "node_modules/@nomiclabs/truffle-contract/node_modules/bignumber.js": { "version": "7.2.1", "resolved": "https://registry.npmjs.org/bignumber.js/-/bignumber.js-7.2.1.tgz", "integrity": "sha512-S4XzBk5sMB+Rcb/LNcpzXr57VRTxgAvaAEDAl1AwRx27j00hT84O6OkteE7u8UB3NuaaygCRrEpqox4uDOrbdQ==", - "dev": true, "engines": { "node": "*" } @@ -4564,14 +2799,12 @@ "node_modules/@nomiclabs/truffle-contract/node_modules/bn.js": { "version": "4.12.0", "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", - "dev": true + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==" }, "node_modules/@nomiclabs/truffle-contract/node_modules/ethers": { "version": "4.0.49", "resolved": "https://registry.npmjs.org/ethers/-/ethers-4.0.49.tgz", "integrity": "sha512-kPltTvWiyu+OktYy1IStSO16i2e7cS9D9OxZ81q2UUaiNPVrm/RTcbxamCXF9VUSKzJIdJV68EAIhTEVBalRWg==", - "dev": true, "dependencies": { "aes-js": "3.0.0", "bn.js": "^4.11.9", @@ -4588,7 +2821,6 @@ "version": "1.1.3", "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.3.tgz", "integrity": "sha512-/UETyP0W22QILqS+6HowevwhEFJ3MBJnwTf75Qob9Wz9t0DPuisL8kW8YZMK62dHAKE1c1p+gY1TtOLY+USEHA==", - "dev": true, "dependencies": { "inherits": "^2.0.3", "minimalistic-assert": "^1.0.0" @@ -4597,27 +2829,42 @@ "node_modules/@nomiclabs/truffle-contract/node_modules/js-sha3": { "version": "0.5.7", "resolved": "https://registry.npmjs.org/js-sha3/-/js-sha3-0.5.7.tgz", - "integrity": "sha512-GII20kjaPX0zJ8wzkTbNDYMY7msuZcTWk8S5UOh6806Jq/wz1J8/bnr8uGU0DAUmYDjj2Mr4X1cW8v/GLYnR+g==", - "dev": true + "integrity": "sha512-GII20kjaPX0zJ8wzkTbNDYMY7msuZcTWk8S5UOh6806Jq/wz1J8/bnr8uGU0DAUmYDjj2Mr4X1cW8v/GLYnR+g==" }, "node_modules/@nomiclabs/truffle-contract/node_modules/scrypt-js": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/scrypt-js/-/scrypt-js-2.0.4.tgz", - "integrity": "sha512-4KsaGcPnuhtCZQCxFxN3GVYIhKFPTdLd8PLC552XwbMndtD0cjRFAhDuuydXQ0h08ZfPgzqe6EKHozpuH74iDw==", - "dev": true + "integrity": "sha512-4KsaGcPnuhtCZQCxFxN3GVYIhKFPTdLd8PLC552XwbMndtD0cjRFAhDuuydXQ0h08ZfPgzqe6EKHozpuH74iDw==" }, "node_modules/@nomiclabs/truffle-contract/node_modules/setimmediate": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.4.tgz", - "integrity": "sha512-/TjEmXQVEzdod/FFskf3o7oOAsGhHf2j1dZqRFbDzq4F3mvvxflIIi4Hd3bLQE9y/CpwqfSQam5JakI/mi3Pog==", - "dev": true + "integrity": "sha512-/TjEmXQVEzdod/FFskf3o7oOAsGhHf2j1dZqRFbDzq4F3mvvxflIIi4Hd3bLQE9y/CpwqfSQam5JakI/mi3Pog==" }, "node_modules/@nomiclabs/truffle-contract/node_modules/uuid": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/uuid/-/uuid-2.0.1.tgz", "integrity": "sha512-nWg9+Oa3qD2CQzHIP4qKUqwNfzKn8P0LtFhotaCTFchsV7ZfDhAybeip/HZVeMIpZi9JgY1E3nUlwaCmZT1sEg==", - "deprecated": "Please upgrade to version 7 or higher. Older versions may use Math.random() in certain circumstances, which is known to be problematic. See https://v8.dev/blog/math-random for details.", - "dev": true + "deprecated": "Please upgrade to version 7 or higher. Older versions may use Math.random() in certain circumstances, which is known to be problematic. See https://v8.dev/blog/math-random for details." + }, + "node_modules/@offchainlabs/upgrade-executor": { + "version": "1.1.0-beta.0", + "resolved": "https://registry.npmjs.org/@offchainlabs/upgrade-executor/-/upgrade-executor-1.1.0-beta.0.tgz", + "integrity": "sha512-mpn6PHjH/KDDjNX0pXHEKdyv8m6DVGQiI2nGzQn0JbM1nOSHJpWx6fvfjtH7YxHJ6zBZTcsKkqGkFKDtCfoSLw==", + "dependencies": { + "@openzeppelin/contracts": "4.7.3", + "@openzeppelin/contracts-upgradeable": "4.7.3" + } + }, + "node_modules/@offchainlabs/upgrade-executor/node_modules/@openzeppelin/contracts": { + "version": "4.7.3", + "resolved": "https://registry.npmjs.org/@openzeppelin/contracts/-/contracts-4.7.3.tgz", + "integrity": "sha512-dGRS0agJzu8ybo44pCIf3xBaPQN/65AIXNgK8+4gzKd5kbvlqyxryUYVLJv7fK98Seyd2hDZzVEHSWAh0Bt1Yw==" + }, + "node_modules/@offchainlabs/upgrade-executor/node_modules/@openzeppelin/contracts-upgradeable": { + "version": "4.7.3", + "resolved": "https://registry.npmjs.org/@openzeppelin/contracts-upgradeable/-/contracts-upgradeable-4.7.3.tgz", + "integrity": "sha512-+wuegAMaLcZnLCJIvrVUDzA9z/Wp93f0Dla/4jJvIhijRrPabjQbZe6fWiECLaJyfn5ci9fqf9vTw3xpQOad2A==" }, "node_modules/@openzeppelin/contract-loader": { "version": "0.6.3", @@ -4662,14 +2909,20 @@ } }, "node_modules/@openzeppelin/contracts": { - "version": "4.9.3", - "resolved": "https://registry.npmjs.org/@openzeppelin/contracts/-/contracts-4.9.3.tgz", - "integrity": "sha512-He3LieZ1pP2TNt5JbkPA4PNT9WC3gOTOlDcFGJW4Le4QKqwmiNJCRt44APfxMxvq7OugU/cqYuPcSBzOw38DAg==" + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/@openzeppelin/contracts/-/contracts-5.0.1.tgz", + "integrity": "sha512-yQJaT5HDp9hYOOp4jTYxMsR02gdFZFXhewX5HW9Jo4fsqSVqqyIO/xTHdWDaKX5a3pv1txmf076Lziz+sO7L1w==" }, "node_modules/@openzeppelin/contracts-upgradeable": { - "version": "4.8.3", - "resolved": "https://registry.npmjs.org/@openzeppelin/contracts-upgradeable/-/contracts-upgradeable-4.8.3.tgz", - "integrity": "sha512-SXDRl7HKpl2WDoJpn7CK/M9U4Z8gNXDHHChAKh0Iz+Wew3wu6CmFYBeie3je8V0GSXZAIYYwUktSrnW/kwVPtg==" + "version": "4.5.2", + "resolved": "https://registry.npmjs.org/@openzeppelin/contracts-upgradeable/-/contracts-upgradeable-4.5.2.tgz", + "integrity": "sha512-xgWZYaPlrEOQo3cBj97Ufiuv79SPd8Brh4GcFYhPgb6WvAq4ppz8dWKL6h+jLAK01rUqMRp/TS9AdXgAeNvCLA==" + }, + "node_modules/@openzeppelin/contracts-upgradeable-4.7.3": { + "name": "@openzeppelin/contracts-upgradeable", + "version": "4.7.3", + "resolved": "https://registry.npmjs.org/@openzeppelin/contracts-upgradeable/-/contracts-upgradeable-4.7.3.tgz", + "integrity": "sha512-+wuegAMaLcZnLCJIvrVUDzA9z/Wp93f0Dla/4jJvIhijRrPabjQbZe6fWiECLaJyfn5ci9fqf9vTw3xpQOad2A==" }, "node_modules/@openzeppelin/contracts-v0.7": { "name": "@openzeppelin/contracts", @@ -4677,30 +2930,130 @@ "resolved": "https://registry.npmjs.org/@openzeppelin/contracts/-/contracts-3.4.2.tgz", "integrity": "sha512-z0zMCjyhhp4y7XKAcDAi3Vgms4T2PstwBdahiO0+9NaGICQKjynK3wduSRplTgk4LXmoO1yfDGO5RbjKYxtuxA==" }, + "node_modules/@openzeppelin/defender-admin-client": { + "version": "1.54.1", + "resolved": "https://registry.npmjs.org/@openzeppelin/defender-admin-client/-/defender-admin-client-1.54.1.tgz", + "integrity": "sha512-kRpSUdTsnSqntp4FOXIm95t+6VKHc8CUY2Si71VDuxs0q7HSPZkdpRPSntcolwEzWy9L4a8NS/QMwDF5NJ4X1g==", + "dev": true, + "dependencies": { + "@openzeppelin/defender-base-client": "1.54.1", + "axios": "^1.4.0", + "ethers": "^5.7.2", + "lodash": "^4.17.19", + "node-fetch": "^2.6.0" + } + }, + "node_modules/@openzeppelin/defender-admin-client/node_modules/ethers": { + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/ethers/-/ethers-5.7.2.tgz", + "integrity": "sha512-wswUsmWo1aOK8rR7DIKiWSw9DbLWe6x98Jrn8wcTflTVvaXhAMaB5zGAXy0GYQEQp9iO1iSHWVyARQm11zUtyg==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "dependencies": { + "@ethersproject/abi": "5.7.0", + "@ethersproject/abstract-provider": "5.7.0", + "@ethersproject/abstract-signer": "5.7.0", + "@ethersproject/address": "5.7.0", + "@ethersproject/base64": "5.7.0", + "@ethersproject/basex": "5.7.0", + "@ethersproject/bignumber": "5.7.0", + "@ethersproject/bytes": "5.7.0", + "@ethersproject/constants": "5.7.0", + "@ethersproject/contracts": "5.7.0", + "@ethersproject/hash": "5.7.0", + "@ethersproject/hdnode": "5.7.0", + "@ethersproject/json-wallets": "5.7.0", + "@ethersproject/keccak256": "5.7.0", + "@ethersproject/logger": "5.7.0", + "@ethersproject/networks": "5.7.1", + "@ethersproject/pbkdf2": "5.7.0", + "@ethersproject/properties": "5.7.0", + "@ethersproject/providers": "5.7.2", + "@ethersproject/random": "5.7.0", + "@ethersproject/rlp": "5.7.0", + "@ethersproject/sha2": "5.7.0", + "@ethersproject/signing-key": "5.7.0", + "@ethersproject/solidity": "5.7.0", + "@ethersproject/strings": "5.7.0", + "@ethersproject/transactions": "5.7.0", + "@ethersproject/units": "5.7.0", + "@ethersproject/wallet": "5.7.0", + "@ethersproject/web": "5.7.1", + "@ethersproject/wordlists": "5.7.0" + } + }, + "node_modules/@openzeppelin/defender-base-client": { + "version": "1.54.1", + "resolved": "https://registry.npmjs.org/@openzeppelin/defender-base-client/-/defender-base-client-1.54.1.tgz", + "integrity": "sha512-DRGz/7KN3ZQwu28YWMOaojrC7jjPkz/uCwkC8/C8B11qwZhA5qIVvyhYHhhFOCl0J84+E3TNdvkPD2q3p2WaJw==", + "dev": true, + "dependencies": { + "amazon-cognito-identity-js": "^6.0.1", + "async-retry": "^1.3.3", + "axios": "^1.4.0", + "lodash": "^4.17.19", + "node-fetch": "^2.6.0" + } + }, + "node_modules/@openzeppelin/defender-sdk-base-client": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/@openzeppelin/defender-sdk-base-client/-/defender-sdk-base-client-1.8.0.tgz", + "integrity": "sha512-XIJat6BW2CTM74AwG5IL0Q/aE6RXj8x7smnVKmBql4wMvmirVW+njfwzZCLhUTiBXg9AlHxIInEF14SabfIisg==", + "dev": true, + "dependencies": { + "amazon-cognito-identity-js": "^6.3.6", + "async-retry": "^1.3.3" + } + }, + "node_modules/@openzeppelin/defender-sdk-deploy-client": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/@openzeppelin/defender-sdk-deploy-client/-/defender-sdk-deploy-client-1.8.0.tgz", + "integrity": "sha512-/tNS2EnHuA5l095wzMbIkGMDNHZLcZQ2eLUP8z+AeKaAUeR2z4qzZ1ul21kR3EJURAyoy8aULFZanLggoBWHrA==", + "dev": true, + "dependencies": { + "@ethersproject/abi": "^5.7.0", + "@openzeppelin/defender-sdk-base-client": "^1.8.0", + "axios": "^1.4.0", + "lodash": "^4.17.21" + } + }, "node_modules/@openzeppelin/hardhat-upgrades": { - "version": "1.27.0", - "resolved": "https://registry.npmjs.org/@openzeppelin/hardhat-upgrades/-/hardhat-upgrades-1.27.0.tgz", - "integrity": "sha512-+OwrHWDz9tzpmBev6t2CtZM2tRpy/ybhg5e3GIgyeqTxK2vUV40dxIxO6lie+qKeJHZ2RIdDwvSTSiCEJif+fA==", + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@openzeppelin/hardhat-upgrades/-/hardhat-upgrades-3.0.2.tgz", + "integrity": "sha512-Fk940cxwew++bfSZKWHEXVUCr3tRBiRZZBw1nl1wUVq29cq7BrlwDkZ6hTab/+p0IOnx0l6HJHLu3amDxxs3/w==", "dev": true, "dependencies": { - "@openzeppelin/upgrades-core": "^1.26.2", + "@openzeppelin/defender-admin-client": "^1.52.0", + "@openzeppelin/defender-base-client": "^1.52.0", + "@openzeppelin/defender-sdk-base-client": "^1.8.0", + "@openzeppelin/defender-sdk-deploy-client": "^1.8.0", + "@openzeppelin/upgrades-core": "^1.32.0", "chalk": "^4.1.0", "debug": "^4.1.1", - "defender-base-client": "^1.44.0", - "platform-deploy-client": "^0.6.0", - "proper-lockfile": "^4.1.1" + "ethereumjs-util": "^7.1.5", + "proper-lockfile": "^4.1.1", + "undici": "^5.28.2" }, "bin": { "migrate-oz-cli-project": "dist/scripts/migrate-oz-cli-project.js" }, "peerDependencies": { - "@nomiclabs/hardhat-ethers": "^2.0.0", - "@nomiclabs/hardhat-etherscan": "^3.1.0", - "ethers": "^5.0.5", + "@nomicfoundation/hardhat-ethers": "^3.0.0", + "@nomicfoundation/hardhat-verify": "^2.0.0", + "ethers": "^6.6.0", "hardhat": "^2.0.2" }, "peerDependenciesMeta": { - "@nomiclabs/harhdat-etherscan": { + "@nomicfoundation/hardhat-verify": { "optional": true } } @@ -4741,48 +3094,53 @@ } }, "node_modules/@openzeppelin/test-helpers/node_modules/semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", + "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", "dev": true, "bin": { "semver": "bin/semver" } }, "node_modules/@openzeppelin/upgrades-core": { - "version": "1.26.2", - "resolved": "https://registry.npmjs.org/@openzeppelin/upgrades-core/-/upgrades-core-1.26.2.tgz", - "integrity": "sha512-TJORrgyun5qflPos/47P3j61gDw+7W+tEirSBOYRxfVL1WGjX1n8iaLrijPIqzyeS1MKguN1nckAMspQ4SKrxw==", + "version": "1.32.2", + "resolved": "https://registry.npmjs.org/@openzeppelin/upgrades-core/-/upgrades-core-1.32.2.tgz", + "integrity": "sha512-EkXriOHZfn6u00Tbq0zUuhHDeTQB9WyAZKZo3UeYdqULb7E3vqxZgxgXmWJwEzAb6E77DvprzQ4gwCAjMV/S4Q==", "dev": true, "dependencies": { - "cbor": "^8.0.0", + "cbor": "^9.0.0", "chalk": "^4.1.0", - "compare-versions": "^5.0.0", + "compare-versions": "^6.0.0", "debug": "^4.1.1", "ethereumjs-util": "^7.0.3", + "minimist": "^1.2.7", "proper-lockfile": "^4.1.1", - "solidity-ast": "^0.4.15" + "solidity-ast": "^0.4.51" + }, + "bin": { + "openzeppelin-upgrades-core": "dist/cli/cli.js" } }, "node_modules/@openzeppelin/upgrades-core/node_modules/cbor": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/cbor/-/cbor-8.1.0.tgz", - "integrity": "sha512-DwGjNW9omn6EwP70aXsn7FQJx5kO12tX0bZkaTjzdVFM6/7nhA4t0EENocKGx6D2Bch9PE2KzCUf5SceBdeijg==", + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/cbor/-/cbor-9.0.1.tgz", + "integrity": "sha512-/TQOWyamDxvVIv+DY9cOLNuABkoyz8K/F3QE56539pGVYohx0+MEA1f4lChFTX79dBTBS7R1PF6ovH7G+VtBfQ==", "dev": true, "dependencies": { "nofilter": "^3.1.0" }, "engines": { - "node": ">=12.19" + "node": ">=16" } }, - "node_modules/@openzeppelin/upgrades-core/node_modules/nofilter": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/nofilter/-/nofilter-3.1.0.tgz", - "integrity": "sha512-l2NNj07e9afPnhAhvgVrCD/oy2Ai1yfLpuo3EpiO1jFTsB4sFz6oIfAfSZyQzVpkZQ9xS8ZS5g1jCBgq4Hwo0g==", - "dev": true, + "node_modules/@pkgjs/parseargs": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz", + "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==", + "optional": true, + "peer": true, "engines": { - "node": ">=12.19" + "node": ">=14" } }, "node_modules/@poanet/solidity-flattener": { @@ -4802,267 +3160,37 @@ "node": ">=16 <=18" } }, - "node_modules/@protobufjs/aspromise": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@protobufjs/aspromise/-/aspromise-1.1.2.tgz", - "integrity": "sha512-j+gKExEuLmKwvz3OgROXtrJ2UG2x8Ch2YZUxahh+s1F2HZ+wAceUNLkvy6zKCPVRkU++ZWQrdxsUeQXmcg4uoQ==", - "optional": true - }, - "node_modules/@protobufjs/base64": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@protobufjs/base64/-/base64-1.1.2.tgz", - "integrity": "sha512-AZkcAA5vnN/v4PDqKyMR5lx7hZttPDgClv83E//FMNhR2TMcLUhfRUBHCmSl0oi9zMgDDqRUJkSxO3wm85+XLg==", - "optional": true - }, - "node_modules/@protobufjs/codegen": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/@protobufjs/codegen/-/codegen-2.0.4.tgz", - "integrity": "sha512-YyFaikqM5sH0ziFZCN3xDC7zeGaB/d0IUb9CATugHWbd1FRFwWwt4ld4OYMPWu5a3Xe01mGAULCdqhMlPl29Jg==", - "optional": true - }, - "node_modules/@protobufjs/eventemitter": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@protobufjs/eventemitter/-/eventemitter-1.1.0.tgz", - "integrity": "sha512-j9ednRT81vYJ9OfVuXG6ERSTdEL1xVsNgqpkxMsbIabzSo3goCjDIveeGv5d03om39ML71RdmrGNjG5SReBP/Q==", - "optional": true - }, - "node_modules/@protobufjs/fetch": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@protobufjs/fetch/-/fetch-1.1.0.tgz", - "integrity": "sha512-lljVXpqXebpsijW71PZaCYeIcE5on1w5DlQy5WH6GLbFryLUrBD4932W/E2BSpfRJWseIL4v/KPgBFxDOIdKpQ==", - "optional": true, - "dependencies": { - "@protobufjs/aspromise": "^1.1.1", - "@protobufjs/inquire": "^1.1.0" - } - }, - "node_modules/@protobufjs/float": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@protobufjs/float/-/float-1.0.2.tgz", - "integrity": "sha512-Ddb+kVXlXst9d+R9PfTIxh1EdNkgoRe5tOX6t01f1lYWOvJnSPDBlG241QLzcyPdoNTsblLUdujGSE4RzrTZGQ==", - "optional": true - }, - "node_modules/@protobufjs/inquire": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@protobufjs/inquire/-/inquire-1.1.0.tgz", - "integrity": "sha512-kdSefcPdruJiFMVSbn801t4vFK7KB/5gd2fYvrxhuJYg8ILrmn9SKSX2tZdV6V+ksulWqS7aXjBcRXl3wHoD9Q==", - "optional": true - }, - "node_modules/@protobufjs/path": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@protobufjs/path/-/path-1.1.2.tgz", - "integrity": "sha512-6JOcJ5Tm08dOHAbdR3GrvP+yUUfkjG5ePsHYczMFLq3ZmMkAD98cDgcT2iA1lJ9NVwFd4tH/iSSoe44YWkltEA==", - "optional": true - }, - "node_modules/@protobufjs/pool": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@protobufjs/pool/-/pool-1.1.0.tgz", - "integrity": "sha512-0kELaGSIDBKvcgS4zkjz1PeddatrjYcmMWOlAuAPwAeccUrPHdUqo/J6LiymHHEiJT5NrF1UVwxY14f+fy4WQw==", - "optional": true - }, - "node_modules/@protobufjs/utf8": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@protobufjs/utf8/-/utf8-1.1.0.tgz", - "integrity": "sha512-Vvn3zZrhQZkkBE8LSuW3em98c0FwgO4nxzv6OdSxPKJIEKY2bGbHn+mhGIPerzI4twdxaP8/0+06HBpwf345Lw==", - "optional": true - }, - "node_modules/@rari-capital/solmate": { - "version": "7.0.0-alpha.3", - "resolved": "git+ssh://git@github.com/transmissions11/solmate.git#8f9b23f8838670afda0fd8983f2c41e8037ae6bc", - "integrity": "sha512-cW0PouqpoiEDhhkOxkqQKcjG4oMJ1Qb+kY6aiwBlgOjpfnhmXK7lkU5ZkHKC22ypQj6lvSc6CaHmXXaPywPsYg==", - "license": "MIT" - }, - "node_modules/@redux-saga/core": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/@redux-saga/core/-/core-1.2.3.tgz", - "integrity": "sha512-U1JO6ncFBAklFTwoQ3mjAeQZ6QGutsJzwNBjgVLSWDpZTRhobUzuVDS1qH3SKGJD8fvqoaYOjp6XJ3gCmeZWgA==", - "dependencies": { - "@babel/runtime": "^7.6.3", - "@redux-saga/deferred": "^1.2.1", - "@redux-saga/delay-p": "^1.2.1", - "@redux-saga/is": "^1.1.3", - "@redux-saga/symbols": "^1.1.3", - "@redux-saga/types": "^1.2.1", - "redux": "^4.0.4", - "typescript-tuple": "^2.2.1" - }, + "node_modules/@scure/base": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/@scure/base/-/base-1.1.5.tgz", + "integrity": "sha512-Brj9FiG2W1MRQSTB212YVPRrcbjkv48FoZi/u4l/zds/ieRrqsh7aUf6CLwkAq61oKXr/ZlTzlY66gLIj3TFTQ==", "funding": { - "type": "opencollective", - "url": "https://opencollective.com/redux-saga" - } - }, - "node_modules/@redux-saga/core/node_modules/redux": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/redux/-/redux-4.2.1.tgz", - "integrity": "sha512-LAUYz4lc+Do8/g7aeRa8JkyDErK6ekstQaqWQrNRW//MY1TvCEpMtpTWvlQ+FPbWCx+Xixu/6SHt5N0HR+SB4w==", - "dependencies": { - "@babel/runtime": "^7.9.2" - } - }, - "node_modules/@redux-saga/deferred": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/@redux-saga/deferred/-/deferred-1.2.1.tgz", - "integrity": "sha512-cmin3IuuzMdfQjA0lG4B+jX+9HdTgHZZ+6u3jRAOwGUxy77GSlTi4Qp2d6PM1PUoTmQUR5aijlA39scWWPF31g==" - }, - "node_modules/@redux-saga/delay-p": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/@redux-saga/delay-p/-/delay-p-1.2.1.tgz", - "integrity": "sha512-MdiDxZdvb1m+Y0s4/hgdcAXntpUytr9g0hpcOO1XFVyyzkrDu3SKPgBFOtHn7lhu7n24ZKIAT1qtKyQjHqRd+w==", - "dependencies": { - "@redux-saga/symbols": "^1.1.3" - } - }, - "node_modules/@redux-saga/is": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/@redux-saga/is/-/is-1.1.3.tgz", - "integrity": "sha512-naXrkETG1jLRfVfhOx/ZdLj0EyAzHYbgJWkXbB3qFliPcHKiWbv/ULQryOAEKyjrhiclmr6AMdgsXFyx7/yE6Q==", - "dependencies": { - "@redux-saga/symbols": "^1.1.3", - "@redux-saga/types": "^1.2.1" - } - }, - "node_modules/@redux-saga/symbols": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/@redux-saga/symbols/-/symbols-1.1.3.tgz", - "integrity": "sha512-hCx6ZvU4QAEUojETnX8EVg4ubNLBFl1Lps4j2tX7o45x/2qg37m3c6v+kSp8xjDJY+2tJw4QB3j8o8dsl1FDXg==" - }, - "node_modules/@redux-saga/types": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/@redux-saga/types/-/types-1.2.1.tgz", - "integrity": "sha512-1dgmkh+3so0+LlBWRhGA33ua4MYr7tUOj+a9Si28vUi0IUFNbff1T3sgpeDJI/LaC75bBYnQ0A3wXjn0OrRNBA==" - }, - "node_modules/@resolver-engine/core": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/@resolver-engine/core/-/core-0.3.3.tgz", - "integrity": "sha512-eB8nEbKDJJBi5p5SrvrvILn4a0h42bKtbCTri3ZxCGt6UvoQyp7HnGOfki944bUjBSHKK3RvgfViHn+kqdXtnQ==", - "dev": true, - "dependencies": { - "debug": "^3.1.0", - "is-url": "^1.2.4", - "request": "^2.85.0" - } - }, - "node_modules/@resolver-engine/core/node_modules/debug": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", - "dev": true, - "dependencies": { - "ms": "^2.1.1" - } - }, - "node_modules/@resolver-engine/fs": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/@resolver-engine/fs/-/fs-0.3.3.tgz", - "integrity": "sha512-wQ9RhPUcny02Wm0IuJwYMyAG8fXVeKdmhm8xizNByD4ryZlx6PP6kRen+t/haF43cMfmaV7T3Cx6ChOdHEhFUQ==", - "dev": true, - "dependencies": { - "@resolver-engine/core": "^0.3.3", - "debug": "^3.1.0" - } - }, - "node_modules/@resolver-engine/fs/node_modules/debug": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", - "dev": true, - "dependencies": { - "ms": "^2.1.1" - } - }, - "node_modules/@resolver-engine/imports": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/@resolver-engine/imports/-/imports-0.3.3.tgz", - "integrity": "sha512-anHpS4wN4sRMwsAbMXhMfOD/y4a4Oo0Cw/5+rue7hSwGWsDOQaAU1ClK1OxjUC35/peazxEl8JaSRRS+Xb8t3Q==", - "dev": true, - "dependencies": { - "@resolver-engine/core": "^0.3.3", - "debug": "^3.1.0", - "hosted-git-info": "^2.6.0", - "path-browserify": "^1.0.0", - "url": "^0.11.0" - } - }, - "node_modules/@resolver-engine/imports-fs": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/@resolver-engine/imports-fs/-/imports-fs-0.3.3.tgz", - "integrity": "sha512-7Pjg/ZAZtxpeyCFlZR5zqYkz+Wdo84ugB5LApwriT8XFeQoLwGUj4tZFFvvCuxaNCcqZzCYbonJgmGObYBzyCA==", - "dev": true, - "dependencies": { - "@resolver-engine/fs": "^0.3.3", - "@resolver-engine/imports": "^0.3.3", - "debug": "^3.1.0" - } - }, - "node_modules/@resolver-engine/imports-fs/node_modules/debug": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", - "dev": true, - "dependencies": { - "ms": "^2.1.1" - } - }, - "node_modules/@resolver-engine/imports/node_modules/debug": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", - "dev": true, - "dependencies": { - "ms": "^2.1.1" + "url": "https://paulmillr.com/funding/" } }, - "node_modules/@scure/base": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@scure/base/-/base-1.1.1.tgz", - "integrity": "sha512-ZxOhsSyxYwLJj3pLZCefNitxsj093tb2vq90mp2txoYeBqbcjDjqFhyM8eUjq/uFm6zJ+mUuqxlS2FkuSY1MTA==", - "funding": [ - { - "type": "individual", - "url": "https://paulmillr.com/funding/" - } - ] - }, "node_modules/@scure/bip32": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@scure/bip32/-/bip32-1.1.0.tgz", - "integrity": "sha512-ftTW3kKX54YXLCxH6BB7oEEoJfoE2pIgw7MINKAs5PsS6nqKPuKk1haTF/EuHmYqG330t5GSrdmtRuHaY1a62Q==", - "funding": [ - { - "type": "individual", - "url": "https://paulmillr.com/funding/" - } - ], + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/@scure/bip32/-/bip32-1.3.1.tgz", + "integrity": "sha512-osvveYtyzdEVbt3OfwwXFr4P2iVBL5u1Q3q4ONBfDY/UpOuXmOlbgwc1xECEboY8wIays8Yt6onaWMUdUbfl0A==", "dependencies": { - "@noble/hashes": "~1.1.1", - "@noble/secp256k1": "~1.6.0", + "@noble/curves": "~1.1.0", + "@noble/hashes": "~1.3.1", "@scure/base": "~1.1.0" + }, + "funding": { + "url": "https://paulmillr.com/funding/" } }, - "node_modules/@scure/bip32/node_modules/@noble/secp256k1": { - "version": "1.6.3", - "resolved": "https://registry.npmjs.org/@noble/secp256k1/-/secp256k1-1.6.3.tgz", - "integrity": "sha512-T04e4iTurVy7I8Sw4+c5OSN9/RkPlo1uKxAomtxQNLq8j1uPAqnsqG1bqvY3Jv7c13gyr6dui0zmh/I3+f/JaQ==", - "funding": [ - { - "type": "individual", - "url": "https://paulmillr.com/funding/" - } - ] - }, "node_modules/@scure/bip39": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@scure/bip39/-/bip39-1.1.0.tgz", - "integrity": "sha512-pwrPOS16VeTKg98dYXQyIjJEcWfz7/1YJIwxUEPFfQPtc86Ym/1sVgQ2RLoD43AazMk2l/unK4ITySSpW2+82w==", - "funding": [ - { - "type": "individual", - "url": "https://paulmillr.com/funding/" - } - ], + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@scure/bip39/-/bip39-1.2.1.tgz", + "integrity": "sha512-Z3/Fsz1yr904dduJD0NpiyRHhRYHdcnyh73FZWiV+/qhWi83wNJ3NWolYqCEN+ZWsUz2TWwajJggcRE9r1zUYg==", "dependencies": { - "@noble/hashes": "~1.1.1", + "@noble/hashes": "~1.3.0", "@scure/base": "~1.1.0" + }, + "funding": { + "url": "https://paulmillr.com/funding/" } }, "node_modules/@sentry/core": { @@ -5201,115 +3329,54 @@ "url": "https://github.com/sindresorhus/is?sponsor=1" } }, - "node_modules/@solana/buffer-layout": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@solana/buffer-layout/-/buffer-layout-4.0.0.tgz", - "integrity": "sha512-lR0EMP2HC3+Mxwd4YcnZb0smnaDw7Bl2IQWZiTevRH5ZZBZn6VRWn3/92E3qdU4SSImJkA6IDHawOHAnx/qUvQ==", + "node_modules/@smithy/types": { + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/@smithy/types/-/types-2.8.0.tgz", + "integrity": "sha512-h9sz24cFgt/W1Re22OlhQKmUZkNh244ApgRsUDYinqF8R+QgcsBIX344u2j61TPshsTz3CvL6HYU1DnQdsSrHA==", + "dev": true, "dependencies": { - "buffer": "~6.0.3" + "tslib": "^2.5.0" }, "engines": { - "node": ">=5.10" + "node": ">=14.0.0" } }, - "node_modules/@solana/buffer-layout-utils": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/@solana/buffer-layout-utils/-/buffer-layout-utils-0.2.0.tgz", - "integrity": "sha512-szG4sxgJGktbuZYDg2FfNmkMi0DYQoVjN2h7ta1W1hPrwzarcFLBq9UpX1UjNXsNpT9dn+chgprtWGioUAr4/g==", + "node_modules/@solidity-parser/parser": { + "version": "0.14.5", + "resolved": "https://registry.npmjs.org/@solidity-parser/parser/-/parser-0.14.5.tgz", + "integrity": "sha512-6dKnHZn7fg/iQATVEzqyUOyEidbn05q7YA2mQ9hC0MMXhhV3/JrsxmFSYZAcr7j1yUP700LLhTruvJ3MiQmjJg==", "dependencies": { - "@solana/buffer-layout": "^4.0.0", - "@solana/web3.js": "^1.32.0", - "bigint-buffer": "^1.1.5", - "bignumber.js": "^9.0.1" - }, - "engines": { - "node": ">= 10" + "antlr4ts": "^0.5.0-alpha.4" } }, - "node_modules/@solana/spl-token": { - "version": "0.3.7", - "resolved": "https://registry.npmjs.org/@solana/spl-token/-/spl-token-0.3.7.tgz", - "integrity": "sha512-bKGxWTtIw6VDdCBngjtsGlKGLSmiu/8ghSt/IOYJV24BsymRbgq7r12GToeetpxmPaZYLddKwAz7+EwprLfkfg==", + "node_modules/@szmarczak/http-timer": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-5.0.1.tgz", + "integrity": "sha512-+PmQX0PiAYPMeVYe237LJAYvOMYW1j2rH5YROyS3b4CTVJum34HfRvKvAzozHAQG0TnHNdUfY9nCeUyRAs//cw==", "dependencies": { - "@solana/buffer-layout": "^4.0.0", - "@solana/buffer-layout-utils": "^0.2.0", - "buffer": "^6.0.3" + "defer-to-connect": "^2.0.1" }, "engines": { - "node": ">=16" - }, - "peerDependencies": { - "@solana/web3.js": "^1.47.4" + "node": ">=14.16" } }, - "node_modules/@solana/web3.js": { - "version": "1.78.4", - "resolved": "https://registry.npmjs.org/@solana/web3.js/-/web3.js-1.78.4.tgz", - "integrity": "sha512-up5VG1dK+GPhykmuMIozJZBbVqpm77vbOG6/r5dS7NBGZonwHfTLdBbsYc3rjmaQ4DpCXUa3tUc4RZHRORvZrw==", - "dependencies": { - "@babel/runtime": "^7.22.6", - "@noble/curves": "^1.0.0", - "@noble/hashes": "^1.3.1", - "@solana/buffer-layout": "^4.0.0", - "agentkeepalive": "^4.3.0", - "bigint-buffer": "^1.1.5", - "bn.js": "^5.2.1", - "borsh": "^0.7.0", - "bs58": "^4.0.1", - "buffer": "6.0.3", - "fast-stable-stringify": "^1.0.0", - "jayson": "^4.1.0", - "node-fetch": "^2.6.12", - "rpc-websockets": "^7.5.1", - "superstruct": "^0.14.2" - } - }, - "node_modules/@solana/web3.js/node_modules/@noble/hashes": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.3.1.tgz", - "integrity": "sha512-EbqwksQwz9xDRGfDST86whPBgM65E0OH/pCgqW0GBVzO22bNE+NuIbeTb714+IfSjU3aRk47EUvXIb5bTsenKA==", - "engines": { - "node": ">= 16" - }, - "funding": { - "url": "https://paulmillr.com/funding/" - } - }, - "node_modules/@solidity-parser/parser": { - "version": "0.14.3", - "resolved": "https://registry.npmjs.org/@solidity-parser/parser/-/parser-0.14.3.tgz", - "integrity": "sha512-29g2SZ29HtsqA58pLCtopI1P/cPy5/UAzlcAXO6T/CNJimG6yA8kx4NaseMyJULiC+TEs02Y9/yeHzClqoA0hw==", - "dependencies": { - "antlr4ts": "^0.5.0-alpha.4" - } - }, - "node_modules/@szmarczak/http-timer": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-5.0.1.tgz", - "integrity": "sha512-+PmQX0PiAYPMeVYe237LJAYvOMYW1j2rH5YROyS3b4CTVJum34HfRvKvAzozHAQG0TnHNdUfY9nCeUyRAs//cw==", - "dependencies": { - "defer-to-connect": "^2.0.1" - }, - "engines": { - "node": ">=14.16" - } - }, - "node_modules/@truffle/abi-utils": { - "version": "0.3.9", - "resolved": "https://registry.npmjs.org/@truffle/abi-utils/-/abi-utils-0.3.9.tgz", - "integrity": "sha512-G5dqgwRHx5zwlXjz3QT8OJVfB2cOqWwD6DwKso0KttUt/zejhCjnkKq72rSgyeLMkz7wBB9ERLOsupLBILM8MA==", - "dev": true, + "node_modules/@truffle/abi-utils": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@truffle/abi-utils/-/abi-utils-1.0.3.tgz", + "integrity": "sha512-AWhs01HCShaVKjml7Z4AbVREr/u4oiWxCcoR7Cktm0mEvtT04pvnxW5xB/cI4znRkrbPdFQlFt67kgrAjesYkw==", "dependencies": { "change-case": "3.0.2", "fast-check": "3.1.1", - "web3-utils": "1.8.2" + "web3-utils": "1.10.0" + }, + "engines": { + "node": "^16.20 || ^18.16 || >=20" } }, "node_modules/@truffle/abi-utils/node_modules/web3-utils": { - "version": "1.8.2", - "resolved": "https://registry.npmjs.org/web3-utils/-/web3-utils-1.8.2.tgz", - "integrity": "sha512-v7j6xhfLQfY7xQDrUP0BKbaNrmZ2/+egbqP9q3KYmOiPpnvAfol+32slgL0WX/5n8VPvKCK5EZ1HGrAVICSToA==", - "dev": true, + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/web3-utils/-/web3-utils-1.10.0.tgz", + "integrity": "sha512-kSaCM0uMcZTNUSmn5vMEhlo02RObGNRRCkdX0V9UTAU0+lrvn0HSaudyCo6CQzuXUsnuY2ERJGCGPfeWmv19Rg==", "dependencies": { "bn.js": "^5.2.1", "ethereum-bloom-filters": "^1.0.6", @@ -5324,72 +3391,57 @@ } }, "node_modules/@truffle/blockchain-utils": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/@truffle/blockchain-utils/-/blockchain-utils-0.1.7.tgz", - "integrity": "sha512-1nibqGjEHC7KAyDThEFvbm2+EO8zAHee/VjCtxkYBE3ySwP50joh0QCEBjy7K/9z+icpMoDucfxmgaKToBFUgQ==", - "dev": true - }, - "node_modules/@truffle/code-utils": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/@truffle/code-utils/-/code-utils-3.0.4.tgz", - "integrity": "sha512-MWK3TMisIFaBpSjK7tt1GoQan7DQDBqT2iSsdQOGD74C7r9NMwsIdnL2EYoB/DPcEJ7B8yP4grlG2fQTrPF96g==", - "dependencies": { - "cbor": "^5.2.0" - }, + "version": "0.1.9", + "resolved": "https://registry.npmjs.org/@truffle/blockchain-utils/-/blockchain-utils-0.1.9.tgz", + "integrity": "sha512-RHfumgbIVo68Rv9ofDYfynjnYZIfP/f1vZy4RoqkfYAO+fqfc58PDRzB1WAGq2U6GPuOnipOJxQhnqNnffORZg==", "engines": { "node": "^16.20 || ^18.16 || >=20" } }, "node_modules/@truffle/codec": { - "version": "0.14.17", - "resolved": "https://registry.npmjs.org/@truffle/codec/-/codec-0.14.17.tgz", - "integrity": "sha512-kD4dD86huLeaBEq5R8D1zleJEu6NsXbyYLdXl1V1TKdiO8odw5CBC6Y/+wdu5d3t1dyEYrTbhn1dqknZa52pmw==", - "dev": true, + "version": "0.17.3", + "resolved": "https://registry.npmjs.org/@truffle/codec/-/codec-0.17.3.tgz", + "integrity": "sha512-Ko/+dsnntNyrJa57jUD9u4qx9nQby+H4GsUO6yjiCPSX0TQnEHK08XWqBSg0WdmCH2+h0y1nr2CXSx8gbZapxg==", "dependencies": { - "@truffle/abi-utils": "^0.3.9", - "@truffle/compile-common": "^0.9.4", + "@truffle/abi-utils": "^1.0.3", + "@truffle/compile-common": "^0.9.8", "big.js": "^6.0.3", "bn.js": "^5.1.3", "cbor": "^5.2.0", "debug": "^4.3.1", "lodash": "^4.17.21", - "semver": "7.3.7", + "semver": "^7.5.4", "utf8": "^3.0.0", - "web3-utils": "1.8.2" + "web3-utils": "1.10.0" + }, + "engines": { + "node": "^16.20 || ^18.16 || >=20" } }, - "node_modules/@truffle/codec/node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dev": true, + "node_modules/@truffle/codec/node_modules/cbor": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/cbor/-/cbor-5.2.0.tgz", + "integrity": "sha512-5IMhi9e1QU76ppa5/ajP1BmMWZ2FHkhAhjeVKQ/EFCgYSEaeVaoGtL7cxJskf9oCCk+XjzaIdc3IuU/dbA/o2A==", "dependencies": { - "yallist": "^4.0.0" + "bignumber.js": "^9.0.1", + "nofilter": "^1.0.4" }, "engines": { - "node": ">=10" + "node": ">=6.0.0" } }, - "node_modules/@truffle/codec/node_modules/semver": { - "version": "7.3.7", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz", - "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==", - "dev": true, - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, + "node_modules/@truffle/codec/node_modules/nofilter": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/nofilter/-/nofilter-1.0.4.tgz", + "integrity": "sha512-N8lidFp+fCz+TD51+haYdbDGrcBWwuHX40F5+z0qkUjMJ5Tp+rdSuAkMJ9N9eoolDlEVTf6u5icM+cNKkKW2mA==", "engines": { - "node": ">=10" + "node": ">=8" } }, "node_modules/@truffle/codec/node_modules/web3-utils": { - "version": "1.8.2", - "resolved": "https://registry.npmjs.org/web3-utils/-/web3-utils-1.8.2.tgz", - "integrity": "sha512-v7j6xhfLQfY7xQDrUP0BKbaNrmZ2/+egbqP9q3KYmOiPpnvAfol+32slgL0WX/5n8VPvKCK5EZ1HGrAVICSToA==", - "dev": true, + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/web3-utils/-/web3-utils-1.10.0.tgz", + "integrity": "sha512-kSaCM0uMcZTNUSmn5vMEhlo02RObGNRRCkdX0V9UTAU0+lrvn0HSaudyCo6CQzuXUsnuY2ERJGCGPfeWmv19Rg==", "dependencies": { "bn.js": "^5.2.1", "ethereum-bloom-filters": "^1.0.6", @@ -5403,12 +3455,6 @@ "node": ">=8.0.0" } }, - "node_modules/@truffle/codec/node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true - }, "node_modules/@truffle/compile-common": { "version": "0.9.8", "resolved": "https://registry.npmjs.org/@truffle/compile-common/-/compile-common-0.9.8.tgz", @@ -5429,131 +3475,41 @@ "node": "^16.20 || ^18.16 || >=20" } }, - "node_modules/@truffle/config": { - "version": "1.3.61", - "resolved": "https://registry.npmjs.org/@truffle/config/-/config-1.3.61.tgz", - "integrity": "sha512-L4uyG47V+k0NrSoVJ9D+hp2jcMstihW1QlNuXiu5g3mU24BjrozlJT34DFkczh/TtRceLjdrQJKA8WJCMICutw==", - "optional": true, - "dependencies": { - "@truffle/error": "^0.2.2", - "@truffle/events": "^0.1.25", - "@truffle/provider": "^0.3.13", - "conf": "^10.1.2", - "debug": "^4.3.1", - "find-up": "^2.1.0", - "lodash": "^4.17.21", - "original-require": "^1.0.1" - }, - "engines": { - "node": "^16.20 || ^18.16 || >=20" - } - }, - "node_modules/@truffle/config/node_modules/@truffle/error": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/@truffle/error/-/error-0.2.2.tgz", - "integrity": "sha512-TqbzJ0O8DHh34cu8gDujnYl4dUl6o2DE4PR6iokbybvnIm/L2xl6+Gv1VC+YJS45xfH83Yo3/Zyg/9Oq8/xZWg==", - "optional": true, - "engines": { - "node": "^16.20 || ^18.16 || >=20" - } - }, - "node_modules/@truffle/config/node_modules/find-up": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", - "integrity": "sha512-NWzkk0jSJtTt08+FBFMvXoeZnOJD+jTtsRmBYbAIzJdX6l7dLgR7CTubCM5/eDdPUBvLCeVasP1brfVR/9/EZQ==", - "optional": true, - "dependencies": { - "locate-path": "^2.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/@truffle/config/node_modules/locate-path": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", - "integrity": "sha512-NCI2kiDkyR7VeEKm27Kda/iQHyKJe1Bu0FlTbYp3CqJu+9IFe9bLyAjMxf5ZDDbEg+iMPzB5zYyUTSm8wVTKmA==", - "optional": true, - "dependencies": { - "p-locate": "^2.0.0", - "path-exists": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/@truffle/config/node_modules/p-limit": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz", - "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==", - "optional": true, - "dependencies": { - "p-try": "^1.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/@truffle/config/node_modules/p-locate": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz", - "integrity": "sha512-nQja7m7gSKuewoVRen45CtVfODR3crN3goVQ0DDZ9N3yHxgpkuBhZqsaiotSQRrADUrne346peY7kT3TSACykg==", - "optional": true, - "dependencies": { - "p-limit": "^1.1.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/@truffle/config/node_modules/p-try": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz", - "integrity": "sha512-U1etNYuMJoIz3ZXSrrySFjsXQTWOx2/jdi86L+2pRvph/qMKL6sbcCYdH23fqsbm8TH2Gn0OybpT4eSFlCVHww==", - "optional": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/@truffle/config/node_modules/path-exists": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", - "integrity": "sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==", - "optional": true, - "engines": { - "node": ">=4" - } - }, "node_modules/@truffle/contract": { - "version": "4.6.20", - "resolved": "https://registry.npmjs.org/@truffle/contract/-/contract-4.6.20.tgz", - "integrity": "sha512-s7Mbc37L/CF5Apy/cjPnalkgACmG9tTAmcIW28cIZLRLOUAze18pqhtdHryxAQhEOtKGaDAho6TriqL7/74uHw==", + "version": "4.6.31", + "resolved": "https://registry.npmjs.org/@truffle/contract/-/contract-4.6.31.tgz", + "integrity": "sha512-s+oHDpXASnZosiCdzu+X1Tx5mUJUs1L1CYXIcgRmzMghzqJkaUFmR6NpNo7nJYliYbO+O9/aW8oCKqQ7rCHfmQ==", "dev": true, "dependencies": { "@ensdomains/ensjs": "^2.1.0", - "@truffle/blockchain-utils": "^0.1.7", - "@truffle/contract-schema": "^3.4.13", - "@truffle/debug-utils": "^6.0.48", - "@truffle/error": "^0.2.0", - "@truffle/interface-adapter": "^0.5.32", + "@truffle/blockchain-utils": "^0.1.9", + "@truffle/contract-schema": "^3.4.16", + "@truffle/debug-utils": "^6.0.57", + "@truffle/error": "^0.2.2", + "@truffle/interface-adapter": "^0.5.37", "bignumber.js": "^7.2.1", "debug": "^4.3.1", "ethers": "^4.0.32", - "web3": "1.8.2", - "web3-core-helpers": "1.8.2", - "web3-core-promievent": "1.8.2", - "web3-eth-abi": "1.8.2", - "web3-utils": "1.8.2" + "web3": "1.10.0", + "web3-core-helpers": "1.10.0", + "web3-core-promievent": "1.10.0", + "web3-eth-abi": "1.10.0", + "web3-utils": "1.10.0" + }, + "engines": { + "node": "^16.20 || ^18.16 || >=20" } }, "node_modules/@truffle/contract-schema": { - "version": "3.4.13", - "resolved": "https://registry.npmjs.org/@truffle/contract-schema/-/contract-schema-3.4.13.tgz", - "integrity": "sha512-emG7upuryYFrsPDbHqeASPWXL824M1tinhQwSPG0phSoa3g+RX9fUNNN/VPmF3tSkXLWUMhRnb7ehxnaCuRbZg==", - "dev": true, + "version": "3.4.16", + "resolved": "https://registry.npmjs.org/@truffle/contract-schema/-/contract-schema-3.4.16.tgz", + "integrity": "sha512-g0WNYR/J327DqtJPI70ubS19K1Fth/1wxt2jFqLsPmz5cGZVjCwuhiie+LfBde4/Mc9QR8G+L3wtmT5cyoBxAg==", "dependencies": { "ajv": "^6.10.0", "debug": "^4.3.1" + }, + "engines": { + "node": "^16.20 || ^18.16 || >=20" } }, "node_modules/@truffle/contract/node_modules/@ethereumjs/common": { @@ -5577,10 +3533,13 @@ } }, "node_modules/@truffle/contract/node_modules/@truffle/error": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/@truffle/error/-/error-0.2.0.tgz", - "integrity": "sha512-Fe0/z4WWb7IP2gBnv3l6zqP87Y0kSMs7oiSLakKJq17q3GUunrHSdioKuNspdggxkXIBhEQLhi8C+LJdwmHKWQ==", - "dev": true + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/@truffle/error/-/error-0.2.2.tgz", + "integrity": "sha512-TqbzJ0O8DHh34cu8gDujnYl4dUl6o2DE4PR6iokbybvnIm/L2xl6+Gv1VC+YJS45xfH83Yo3/Zyg/9Oq8/xZWg==", + "dev": true, + "engines": { + "node": "^16.20 || ^18.16 || >=20" + } }, "node_modules/@truffle/contract/node_modules/@types/node": { "version": "12.20.55", @@ -5588,6 +3547,12 @@ "integrity": "sha512-J8xLz7q2OFulZ2cyGTLE1TbbZcjpno7FaN6zdJNrgAdrJ+DZzh/uFR6YrTb4C+nXakvud8Q4+rbhoIWlYQbUFQ==", "dev": true }, + "node_modules/@truffle/contract/node_modules/aes-js": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/aes-js/-/aes-js-3.0.0.tgz", + "integrity": "sha512-H7wUZRn8WpTq9jocdxQ2c8x2sKo9ZVmzfRE13GiNJXfp7NcKYEdvl3vspKjXox6RIG2VtaRe4JFvxG4rqp2Zuw==", + "dev": true + }, "node_modules/@truffle/contract/node_modules/bignumber.js": { "version": "7.2.1", "resolved": "https://registry.npmjs.org/bignumber.js/-/bignumber.js-7.2.1.tgz", @@ -5597,6 +3562,15 @@ "node": "*" } }, + "node_modules/@truffle/contract/node_modules/cross-fetch": { + "version": "3.1.8", + "resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-3.1.8.tgz", + "integrity": "sha512-cvA+JwZoU0Xq+h6WkMvAUqPEYy92Obet6UdKLfW60qn99ftItKjB5T+BkyWOFWe2pUyfQ+IJHmpOTznqk1M6Kg==", + "dev": true, + "dependencies": { + "node-fetch": "^2.6.12" + } + }, "node_modules/@truffle/contract/node_modules/eth-lib": { "version": "0.2.8", "resolved": "https://registry.npmjs.org/eth-lib/-/eth-lib-0.2.8.tgz", @@ -5637,12 +3611,6 @@ "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", "dev": true }, - "node_modules/@truffle/contract/node_modules/eventemitter3": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.4.tgz", - "integrity": "sha512-rlaVLnVxtxvoyLsQQFBx53YmXHDxRIzzTLbdfxqi4yocpSjAxXwkU0cScM5JgSKMqEhrZpnvQ2D9gjylR0AimQ==", - "dev": true - }, "node_modules/@truffle/contract/node_modules/hash.js": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.3.tgz", @@ -5679,28 +3647,28 @@ "dev": true }, "node_modules/@truffle/contract/node_modules/web3": { - "version": "1.8.2", - "resolved": "https://registry.npmjs.org/web3/-/web3-1.8.2.tgz", - "integrity": "sha512-92h0GdEHW9wqDICQQKyG4foZBYi0OQkyg4CRml2F7XBl/NG+fu9o6J19kzfFXzSBoA4DnJXbyRgj/RHZv5LRiw==", + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/web3/-/web3-1.10.0.tgz", + "integrity": "sha512-YfKY9wSkGcM8seO+daR89oVTcbu18NsVfvOngzqMYGUU0pPSQmE57qQDvQzUeoIOHAnXEBNzrhjQJmm8ER0rng==", "dev": true, "hasInstallScript": true, "dependencies": { - "web3-bzz": "1.8.2", - "web3-core": "1.8.2", - "web3-eth": "1.8.2", - "web3-eth-personal": "1.8.2", - "web3-net": "1.8.2", - "web3-shh": "1.8.2", - "web3-utils": "1.8.2" + "web3-bzz": "1.10.0", + "web3-core": "1.10.0", + "web3-eth": "1.10.0", + "web3-eth-personal": "1.10.0", + "web3-net": "1.10.0", + "web3-shh": "1.10.0", + "web3-utils": "1.10.0" }, "engines": { "node": ">=8.0.0" } }, "node_modules/@truffle/contract/node_modules/web3-bzz": { - "version": "1.8.2", - "resolved": "https://registry.npmjs.org/web3-bzz/-/web3-bzz-1.8.2.tgz", - "integrity": "sha512-1EEnxjPnFnvNWw3XeeKuTR8PBxYd0+XWzvaLK7OJC/Go9O8llLGxrxICbKV+8cgIE0sDRBxiYx02X+6OhoAQ9w==", + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/web3-bzz/-/web3-bzz-1.10.0.tgz", + "integrity": "sha512-o9IR59io3pDUsXTsps5pO5hW1D5zBmg46iNc2t4j2DkaYHNdDLwk2IP9ukoM2wg47QILfPEJYzhTfkS/CcX0KA==", "dev": true, "hasInstallScript": true, "dependencies": { @@ -5713,104 +3681,142 @@ } }, "node_modules/@truffle/contract/node_modules/web3-core": { - "version": "1.8.2", - "resolved": "https://registry.npmjs.org/web3-core/-/web3-core-1.8.2.tgz", - "integrity": "sha512-DJTVEAYcNqxkqruJE+Rxp3CIv0y5AZMwPHQmOkz/cz+MM75SIzMTc0AUdXzGyTS8xMF8h3YWMQGgGEy8SBf1PQ==", + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/web3-core/-/web3-core-1.10.0.tgz", + "integrity": "sha512-fWySwqy2hn3TL89w5TM8wXF1Z2Q6frQTKHWmP0ppRQorEK8NcHJRfeMiv/mQlSKoTS1F6n/nv2uyZsixFycjYQ==", "dev": true, "dependencies": { - "@types/bn.js": "^5.1.0", + "@types/bn.js": "^5.1.1", "@types/node": "^12.12.6", "bignumber.js": "^9.0.0", - "web3-core-helpers": "1.8.2", - "web3-core-method": "1.8.2", - "web3-core-requestmanager": "1.8.2", - "web3-utils": "1.8.2" + "web3-core-helpers": "1.10.0", + "web3-core-method": "1.10.0", + "web3-core-requestmanager": "1.10.0", + "web3-utils": "1.10.0" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/@truffle/contract/node_modules/web3-core-helpers": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/web3-core-helpers/-/web3-core-helpers-1.10.0.tgz", + "integrity": "sha512-pIxAzFDS5vnbXvfvLSpaA1tfRykAe9adw43YCKsEYQwH0gCLL0kMLkaCX3q+Q8EVmAh+e1jWL/nl9U0de1+++g==", + "dev": true, + "dependencies": { + "web3-eth-iban": "1.10.0", + "web3-utils": "1.10.0" }, "engines": { "node": ">=8.0.0" } }, "node_modules/@truffle/contract/node_modules/web3-core-method": { - "version": "1.8.2", - "resolved": "https://registry.npmjs.org/web3-core-method/-/web3-core-method-1.8.2.tgz", - "integrity": "sha512-1qnr5mw5wVyULzLOrk4B+ryO3gfGjGd/fx8NR+J2xCGLf1e6OSjxT9vbfuQ3fErk/NjSTWWreieYWLMhaogcRA==", + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/web3-core-method/-/web3-core-method-1.10.0.tgz", + "integrity": "sha512-4R700jTLAMKDMhQ+nsVfIXvH6IGJlJzGisIfMKWAIswH31h5AZz7uDUW2YctI+HrYd+5uOAlS4OJeeT9bIpvkA==", "dev": true, "dependencies": { "@ethersproject/transactions": "^5.6.2", - "web3-core-helpers": "1.8.2", - "web3-core-promievent": "1.8.2", - "web3-core-subscriptions": "1.8.2", - "web3-utils": "1.8.2" + "web3-core-helpers": "1.10.0", + "web3-core-promievent": "1.10.0", + "web3-core-subscriptions": "1.10.0", + "web3-utils": "1.10.0" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/@truffle/contract/node_modules/web3-core-promievent": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/web3-core-promievent/-/web3-core-promievent-1.10.0.tgz", + "integrity": "sha512-68N7k5LWL5R38xRaKFrTFT2pm2jBNFaM4GioS00YjAKXRQ3KjmhijOMG3TICz6Aa5+6GDWYelDNx21YAeZ4YTg==", + "dev": true, + "dependencies": { + "eventemitter3": "4.0.4" }, "engines": { "node": ">=8.0.0" } }, "node_modules/@truffle/contract/node_modules/web3-core-requestmanager": { - "version": "1.8.2", - "resolved": "https://registry.npmjs.org/web3-core-requestmanager/-/web3-core-requestmanager-1.8.2.tgz", - "integrity": "sha512-p1d090RYs5Mu7DK1yyc3GCBVZB/03rBtFhYFoS2EruGzOWs/5Q0grgtpwS/DScdRAm8wB8mYEBhY/RKJWF6B2g==", + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/web3-core-requestmanager/-/web3-core-requestmanager-1.10.0.tgz", + "integrity": "sha512-3z/JKE++Os62APml4dvBM+GAuId4h3L9ckUrj7ebEtS2AR0ixyQPbrBodgL91Sv7j7cQ3Y+hllaluqjguxvSaQ==", "dev": true, "dependencies": { "util": "^0.12.5", - "web3-core-helpers": "1.8.2", - "web3-providers-http": "1.8.2", - "web3-providers-ipc": "1.8.2", - "web3-providers-ws": "1.8.2" + "web3-core-helpers": "1.10.0", + "web3-providers-http": "1.10.0", + "web3-providers-ipc": "1.10.0", + "web3-providers-ws": "1.10.0" }, "engines": { "node": ">=8.0.0" } }, "node_modules/@truffle/contract/node_modules/web3-core-subscriptions": { - "version": "1.8.2", - "resolved": "https://registry.npmjs.org/web3-core-subscriptions/-/web3-core-subscriptions-1.8.2.tgz", - "integrity": "sha512-vXQogHDmAIQcKpXvGiMddBUeP9lnKgYF64+yQJhPNE5PnWr1sAibXuIPV7mIPihpFr/n/DORRj6Wh1pUv9zaTw==", + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/web3-core-subscriptions/-/web3-core-subscriptions-1.10.0.tgz", + "integrity": "sha512-HGm1PbDqsxejI075gxBc5OSkwymilRWZufIy9zEpnWKNmfbuv5FfHgW1/chtJP6aP3Uq2vHkvTDl3smQBb8l+g==", "dev": true, "dependencies": { "eventemitter3": "4.0.4", - "web3-core-helpers": "1.8.2" + "web3-core-helpers": "1.10.0" }, "engines": { "node": ">=8.0.0" } }, "node_modules/@truffle/contract/node_modules/web3-core/node_modules/bignumber.js": { - "version": "9.1.1", - "resolved": "https://registry.npmjs.org/bignumber.js/-/bignumber.js-9.1.1.tgz", - "integrity": "sha512-pHm4LsMJ6lzgNGVfZHjMoO8sdoRhOzOH4MLmY65Jg70bpxCKu5iOHNJyfF6OyvYw7t8Fpf35RuzUyqnQsj8Vig==", + "version": "9.1.2", + "resolved": "https://registry.npmjs.org/bignumber.js/-/bignumber.js-9.1.2.tgz", + "integrity": "sha512-2/mKyZH9K85bzOEfhXDBFZTGd1CTs+5IHpeFQo9luiBG7hghdC851Pj2WAhb6E3R6b9tZj/XKhbg4fum+Kepug==", "dev": true, "engines": { "node": "*" } }, "node_modules/@truffle/contract/node_modules/web3-eth": { - "version": "1.8.2", - "resolved": "https://registry.npmjs.org/web3-eth/-/web3-eth-1.8.2.tgz", - "integrity": "sha512-JoTiWWc4F4TInpbvDUGb0WgDYJsFhuIjJlinc5ByjWD88Gvh+GKLsRjjFdbqe5YtwIGT4NymwoC5LQd1K6u/QQ==", + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/web3-eth/-/web3-eth-1.10.0.tgz", + "integrity": "sha512-Z5vT6slNMLPKuwRyKGbqeGYC87OAy8bOblaqRTgg94CXcn/mmqU7iPIlG4506YdcdK3x6cfEDG7B6w+jRxypKA==", + "dev": true, + "dependencies": { + "web3-core": "1.10.0", + "web3-core-helpers": "1.10.0", + "web3-core-method": "1.10.0", + "web3-core-subscriptions": "1.10.0", + "web3-eth-abi": "1.10.0", + "web3-eth-accounts": "1.10.0", + "web3-eth-contract": "1.10.0", + "web3-eth-ens": "1.10.0", + "web3-eth-iban": "1.10.0", + "web3-eth-personal": "1.10.0", + "web3-net": "1.10.0", + "web3-utils": "1.10.0" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/@truffle/contract/node_modules/web3-eth-abi": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/web3-eth-abi/-/web3-eth-abi-1.10.0.tgz", + "integrity": "sha512-cwS+qRBWpJ43aI9L3JS88QYPfFcSJJ3XapxOQ4j40v6mk7ATpA8CVK1vGTzpihNlOfMVRBkR95oAj7oL6aiDOg==", "dev": true, "dependencies": { - "web3-core": "1.8.2", - "web3-core-helpers": "1.8.2", - "web3-core-method": "1.8.2", - "web3-core-subscriptions": "1.8.2", - "web3-eth-abi": "1.8.2", - "web3-eth-accounts": "1.8.2", - "web3-eth-contract": "1.8.2", - "web3-eth-ens": "1.8.2", - "web3-eth-iban": "1.8.2", - "web3-eth-personal": "1.8.2", - "web3-net": "1.8.2", - "web3-utils": "1.8.2" + "@ethersproject/abi": "^5.6.3", + "web3-utils": "1.10.0" }, "engines": { "node": ">=8.0.0" } }, "node_modules/@truffle/contract/node_modules/web3-eth-accounts": { - "version": "1.8.2", - "resolved": "https://registry.npmjs.org/web3-eth-accounts/-/web3-eth-accounts-1.8.2.tgz", - "integrity": "sha512-c367Ij63VCz9YdyjiHHWLFtN85l6QghgwMQH2B1eM/p9Y5lTlTX7t/Eg/8+f1yoIStXbk2w/PYM2lk+IkbqdLA==", + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/web3-eth-accounts/-/web3-eth-accounts-1.10.0.tgz", + "integrity": "sha512-wiq39Uc3mOI8rw24wE2n15hboLE0E9BsQLdlmsL4Zua9diDS6B5abXG0XhFcoNsXIGMWXVZz4TOq3u4EdpXF/Q==", "dev": true, "dependencies": { "@ethereumjs/common": "2.5.0", @@ -5819,10 +3825,10 @@ "ethereumjs-util": "^7.1.5", "scrypt-js": "^3.0.1", "uuid": "^9.0.0", - "web3-core": "1.8.2", - "web3-core-helpers": "1.8.2", - "web3-core-method": "1.8.2", - "web3-utils": "1.8.2" + "web3-core": "1.10.0", + "web3-core-helpers": "1.10.0", + "web3-core-method": "1.10.0", + "web3-utils": "1.10.0" }, "engines": { "node": ">=8.0.0" @@ -5835,119 +3841,136 @@ "dev": true }, "node_modules/@truffle/contract/node_modules/web3-eth-accounts/node_modules/uuid": { - "version": "9.0.0", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.0.tgz", - "integrity": "sha512-MXcSTerfPa4uqyzStbRoTgt5XIe3x5+42+q1sDuy3R5MDk66URdLMOZe5aPX/SQd+kuYAh0FdP/pO28IkQyTeg==", + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.1.tgz", + "integrity": "sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==", "dev": true, + "funding": [ + "https://github.com/sponsors/broofa", + "https://github.com/sponsors/ctavan" + ], "bin": { "uuid": "dist/bin/uuid" } }, "node_modules/@truffle/contract/node_modules/web3-eth-contract": { - "version": "1.8.2", - "resolved": "https://registry.npmjs.org/web3-eth-contract/-/web3-eth-contract-1.8.2.tgz", - "integrity": "sha512-ID5A25tHTSBNwOPjiXSVzxruz006ULRIDbzWTYIFTp7NJ7vXu/kynKK2ag/ObuTqBpMbobP8nXcA9b5EDkIdQA==", + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/web3-eth-contract/-/web3-eth-contract-1.10.0.tgz", + "integrity": "sha512-MIC5FOzP/+2evDksQQ/dpcXhSqa/2hFNytdl/x61IeWxhh6vlFeSjq0YVTAyIzdjwnL7nEmZpjfI6y6/Ufhy7w==", "dev": true, "dependencies": { - "@types/bn.js": "^5.1.0", - "web3-core": "1.8.2", - "web3-core-helpers": "1.8.2", - "web3-core-method": "1.8.2", - "web3-core-promievent": "1.8.2", - "web3-core-subscriptions": "1.8.2", - "web3-eth-abi": "1.8.2", - "web3-utils": "1.8.2" + "@types/bn.js": "^5.1.1", + "web3-core": "1.10.0", + "web3-core-helpers": "1.10.0", + "web3-core-method": "1.10.0", + "web3-core-promievent": "1.10.0", + "web3-core-subscriptions": "1.10.0", + "web3-eth-abi": "1.10.0", + "web3-utils": "1.10.0" }, "engines": { "node": ">=8.0.0" } }, "node_modules/@truffle/contract/node_modules/web3-eth-ens": { - "version": "1.8.2", - "resolved": "https://registry.npmjs.org/web3-eth-ens/-/web3-eth-ens-1.8.2.tgz", - "integrity": "sha512-PWph7C/CnqdWuu1+SH4U4zdrK4t2HNt0I4XzPYFdv9ugE8EuojselioPQXsVGvjql+Nt3jDLvQvggPqlMbvwRw==", + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/web3-eth-ens/-/web3-eth-ens-1.10.0.tgz", + "integrity": "sha512-3hpGgzX3qjgxNAmqdrC2YUQMTfnZbs4GeLEmy8aCWziVwogbuqQZ+Gzdfrym45eOZodk+lmXyLuAdqkNlvkc1g==", "dev": true, "dependencies": { "content-hash": "^2.5.2", "eth-ens-namehash": "2.0.8", - "web3-core": "1.8.2", - "web3-core-helpers": "1.8.2", - "web3-core-promievent": "1.8.2", - "web3-eth-abi": "1.8.2", - "web3-eth-contract": "1.8.2", - "web3-utils": "1.8.2" + "web3-core": "1.10.0", + "web3-core-helpers": "1.10.0", + "web3-core-promievent": "1.10.0", + "web3-eth-abi": "1.10.0", + "web3-eth-contract": "1.10.0", + "web3-utils": "1.10.0" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/@truffle/contract/node_modules/web3-eth-iban": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/web3-eth-iban/-/web3-eth-iban-1.10.0.tgz", + "integrity": "sha512-0l+SP3IGhInw7Q20LY3IVafYEuufo4Dn75jAHT7c2aDJsIolvf2Lc6ugHkBajlwUneGfbRQs/ccYPQ9JeMUbrg==", + "dev": true, + "dependencies": { + "bn.js": "^5.2.1", + "web3-utils": "1.10.0" }, "engines": { "node": ">=8.0.0" } }, "node_modules/@truffle/contract/node_modules/web3-eth-personal": { - "version": "1.8.2", - "resolved": "https://registry.npmjs.org/web3-eth-personal/-/web3-eth-personal-1.8.2.tgz", - "integrity": "sha512-Vg4HfwCr7doiUF/RC+Jz0wT4+cYaXcOWMAW2AHIjHX6Z7Xwa8nrURIeQgeEE62qcEHAzajyAdB1u6bJyTfuCXw==", + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/web3-eth-personal/-/web3-eth-personal-1.10.0.tgz", + "integrity": "sha512-anseKn98w/d703eWq52uNuZi7GhQeVjTC5/svrBWEKob0WZ5kPdo+EZoFN0sp5a5ubbrk/E0xSl1/M5yORMtpg==", "dev": true, "dependencies": { "@types/node": "^12.12.6", - "web3-core": "1.8.2", - "web3-core-helpers": "1.8.2", - "web3-core-method": "1.8.2", - "web3-net": "1.8.2", - "web3-utils": "1.8.2" + "web3-core": "1.10.0", + "web3-core-helpers": "1.10.0", + "web3-core-method": "1.10.0", + "web3-net": "1.10.0", + "web3-utils": "1.10.0" }, "engines": { "node": ">=8.0.0" } }, "node_modules/@truffle/contract/node_modules/web3-net": { - "version": "1.8.2", - "resolved": "https://registry.npmjs.org/web3-net/-/web3-net-1.8.2.tgz", - "integrity": "sha512-1itkDMGmbgb83Dg9nporFes9/fxsU7smJ3oRXlFkg4ZHn8YJyP1MSQFPJWWwSc+GrcCFt4O5IrUTvEkHqE3xag==", + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/web3-net/-/web3-net-1.10.0.tgz", + "integrity": "sha512-NLH/N3IshYWASpxk4/18Ge6n60GEvWBVeM8inx2dmZJVmRI6SJIlUxbL8jySgiTn3MMZlhbdvrGo8fpUW7a1GA==", "dev": true, "dependencies": { - "web3-core": "1.8.2", - "web3-core-method": "1.8.2", - "web3-utils": "1.8.2" + "web3-core": "1.10.0", + "web3-core-method": "1.10.0", + "web3-utils": "1.10.0" }, "engines": { "node": ">=8.0.0" } }, "node_modules/@truffle/contract/node_modules/web3-providers-http": { - "version": "1.8.2", - "resolved": "https://registry.npmjs.org/web3-providers-http/-/web3-providers-http-1.8.2.tgz", - "integrity": "sha512-2xY94IIEQd16+b+vIBF4IC1p7GVaz9q4EUFscvMUjtEq4ru4Atdzjs9GP+jmcoo49p70II0UV3bqQcz0TQfVyQ==", + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/web3-providers-http/-/web3-providers-http-1.10.0.tgz", + "integrity": "sha512-eNr965YB8a9mLiNrkjAWNAPXgmQWfpBfkkn7tpEFlghfww0u3I0tktMZiaToJVcL2+Xq+81cxbkpeWJ5XQDwOA==", "dev": true, "dependencies": { "abortcontroller-polyfill": "^1.7.3", "cross-fetch": "^3.1.4", "es6-promise": "^4.2.8", - "web3-core-helpers": "1.8.2" + "web3-core-helpers": "1.10.0" }, "engines": { "node": ">=8.0.0" } }, "node_modules/@truffle/contract/node_modules/web3-providers-ipc": { - "version": "1.8.2", - "resolved": "https://registry.npmjs.org/web3-providers-ipc/-/web3-providers-ipc-1.8.2.tgz", - "integrity": "sha512-p6fqKVGFg+WiXGHWnB1hu43PbvPkDHTz4RgoEzbXugv5rtv5zfYLqm8Ba6lrJOS5ks9kGKR21a0y3NzE3u7V4w==", + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/web3-providers-ipc/-/web3-providers-ipc-1.10.0.tgz", + "integrity": "sha512-OfXG1aWN8L1OUqppshzq8YISkWrYHaATW9H8eh0p89TlWMc1KZOL9vttBuaBEi96D/n0eYDn2trzt22bqHWfXA==", "dev": true, "dependencies": { "oboe": "2.1.5", - "web3-core-helpers": "1.8.2" + "web3-core-helpers": "1.10.0" }, "engines": { "node": ">=8.0.0" } }, "node_modules/@truffle/contract/node_modules/web3-providers-ws": { - "version": "1.8.2", - "resolved": "https://registry.npmjs.org/web3-providers-ws/-/web3-providers-ws-1.8.2.tgz", - "integrity": "sha512-3s/4K+wHgbiN+Zrp9YjMq2eqAF6QGABw7wFftPdx+m5hWImV27/MoIx57c6HffNRqZXmCHnfWWFCNHHsi7wXnA==", + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/web3-providers-ws/-/web3-providers-ws-1.10.0.tgz", + "integrity": "sha512-sK0fNcglW36yD5xjnjtSGBnEtf59cbw4vZzJ+CmOWIKGIR96mP5l684g0WD0Eo+f4NQc2anWWXG74lRc9OVMCQ==", "dev": true, "dependencies": { "eventemitter3": "4.0.4", - "web3-core-helpers": "1.8.2", + "web3-core-helpers": "1.10.0", "websocket": "^1.0.32" }, "engines": { @@ -5955,25 +3978,25 @@ } }, "node_modules/@truffle/contract/node_modules/web3-shh": { - "version": "1.8.2", - "resolved": "https://registry.npmjs.org/web3-shh/-/web3-shh-1.8.2.tgz", - "integrity": "sha512-uZ+3MAoNcaJsXXNCDnizKJ5viBNeHOFYsCbFhV755Uu52FswzTOw6DtE7yK9nYXMtIhiSgi7nwl1RYzP8pystw==", + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/web3-shh/-/web3-shh-1.10.0.tgz", + "integrity": "sha512-uNUUuNsO2AjX41GJARV9zJibs11eq6HtOe6Wr0FtRUcj8SN6nHeYIzwstAvJ4fXA53gRqFMTxdntHEt9aXVjpg==", "dev": true, "hasInstallScript": true, "dependencies": { - "web3-core": "1.8.2", - "web3-core-method": "1.8.2", - "web3-core-subscriptions": "1.8.2", - "web3-net": "1.8.2" + "web3-core": "1.10.0", + "web3-core-method": "1.10.0", + "web3-core-subscriptions": "1.10.0", + "web3-net": "1.10.0" }, "engines": { "node": ">=8.0.0" } }, "node_modules/@truffle/contract/node_modules/web3-utils": { - "version": "1.8.2", - "resolved": "https://registry.npmjs.org/web3-utils/-/web3-utils-1.8.2.tgz", - "integrity": "sha512-v7j6xhfLQfY7xQDrUP0BKbaNrmZ2/+egbqP9q3KYmOiPpnvAfol+32slgL0WX/5n8VPvKCK5EZ1HGrAVICSToA==", + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/web3-utils/-/web3-utils-1.10.0.tgz", + "integrity": "sha512-kSaCM0uMcZTNUSmn5vMEhlo02RObGNRRCkdX0V9UTAU0+lrvn0HSaudyCo6CQzuXUsnuY2ERJGCGPfeWmv19Rg==", "dev": true, "dependencies": { "bn.js": "^5.2.1", @@ -5988,208 +4011,26 @@ "node": ">=8.0.0" } }, - "node_modules/@truffle/dashboard-message-bus-client": { - "version": "0.1.12", - "resolved": "https://registry.npmjs.org/@truffle/dashboard-message-bus-client/-/dashboard-message-bus-client-0.1.12.tgz", - "integrity": "sha512-pI9G0La9tTstb2J2wxUZIMx6H+ZF0XBlsGN3HBkffr4edT0oT12WMCK9GxmKE22Q5VnpXl7wGjatRSEx0C9qDQ==", - "optional": true, - "dependencies": { - "@truffle/dashboard-message-bus-common": "^0.1.7", - "@truffle/promise-tracker": "^0.1.7", - "axios": "1.5.0", - "debug": "^4.3.1", - "delay": "^5.0.0", - "isomorphic-ws": "^4.0.1", - "node-abort-controller": "^3.0.1", - "tiny-typed-emitter": "^2.1.0", - "ws": "^7.2.0" - }, - "engines": { - "node": "^16.20 || ^18.16 || >=20" - } - }, - "node_modules/@truffle/dashboard-message-bus-client/node_modules/axios": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/axios/-/axios-1.5.0.tgz", - "integrity": "sha512-D4DdjDo5CY50Qms0qGQTTw6Q44jl7zRwY7bthds06pUGfChBCTcQs+N743eFWGEd6pRTMd6A+I87aWyFV5wiZQ==", - "optional": true, - "dependencies": { - "follow-redirects": "^1.15.0", - "form-data": "^4.0.0", - "proxy-from-env": "^1.1.0" - } - }, - "node_modules/@truffle/dashboard-message-bus-client/node_modules/form-data": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz", - "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==", - "optional": true, - "dependencies": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.8", - "mime-types": "^2.1.12" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/@truffle/dashboard-message-bus-client/node_modules/ws": { - "version": "7.5.9", - "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.9.tgz", - "integrity": "sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q==", - "optional": true, - "engines": { - "node": ">=8.3.0" - }, - "peerDependencies": { - "bufferutil": "^4.0.1", - "utf-8-validate": "^5.0.2" - }, - "peerDependenciesMeta": { - "bufferutil": { - "optional": true - }, - "utf-8-validate": { - "optional": true - } - } - }, - "node_modules/@truffle/dashboard-message-bus-common": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/@truffle/dashboard-message-bus-common/-/dashboard-message-bus-common-0.1.7.tgz", - "integrity": "sha512-jN7q8LBmwQRldSzT/YJE33mnDLrp3EFFDuZyLwtQGInlfcRTXcr5yPY42jxr3Ln19dQe2Chx3I6dWtDByeKLIQ==", - "optional": true, - "engines": { - "node": "^16.20 || ^18.16 || >=20" - } - }, - "node_modules/@truffle/db": { - "version": "2.0.35", - "resolved": "https://registry.npmjs.org/@truffle/db/-/db-2.0.35.tgz", - "integrity": "sha512-PVlNvh7whkTtvI8S5DWTu5O0RqkFV5EmzljEauSjRi8wI1SGYOlRdHWFhH/nxmuCAbyg/JtvC/J0EaXzyssd7w==", - "optional": true, - "dependencies": { - "@graphql-tools/delegate": "^8.4.3", - "@graphql-tools/schema": "^8.3.1", - "@truffle/abi-utils": "^1.0.3", - "@truffle/code-utils": "^3.0.4", - "@truffle/config": "^1.3.61", - "abstract-leveldown": "^7.2.0", - "apollo-server": "^3.11.0", - "debug": "^4.3.1", - "fs-extra": "^9.1.0", - "graphql": "^15.3.0", - "graphql-tag": "^2.12.6", - "json-stable-stringify": "^1.0.1", - "pascal-case": "^2.0.1", - "pluralize": "^8.0.0", - "pouchdb": "7.3.0", - "pouchdb-adapter-memory": "^7.1.1", - "pouchdb-debug": "^7.1.1", - "pouchdb-find": "^7.0.0", - "web3-utils": "1.10.0" - }, - "engines": { - "node": "^16.20 || ^18.16 || >=20" - } - }, - "node_modules/@truffle/db-loader": { - "version": "0.2.35", - "resolved": "https://registry.npmjs.org/@truffle/db-loader/-/db-loader-0.2.35.tgz", - "integrity": "sha512-LMi7ADY1mjgLaJSCNOKg6amnxM3IIw3l/KtT6zVIK9rSZdzhTyRUjoK/cSAtjera1KnRwYaEip5p5lQpvGmivg==", - "engines": { - "node": "^16.20 || ^18.16 || >=20" - }, - "optionalDependencies": { - "@truffle/db": "^2.0.35" - } - }, - "node_modules/@truffle/db/node_modules/@truffle/abi-utils": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/@truffle/abi-utils/-/abi-utils-1.0.3.tgz", - "integrity": "sha512-AWhs01HCShaVKjml7Z4AbVREr/u4oiWxCcoR7Cktm0mEvtT04pvnxW5xB/cI4znRkrbPdFQlFt67kgrAjesYkw==", - "optional": true, - "dependencies": { - "change-case": "3.0.2", - "fast-check": "3.1.1", - "web3-utils": "1.10.0" - }, - "engines": { - "node": "^16.20 || ^18.16 || >=20" - } - }, - "node_modules/@truffle/db/node_modules/abstract-leveldown": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/abstract-leveldown/-/abstract-leveldown-7.2.0.tgz", - "integrity": "sha512-DnhQwcFEaYsvYDnACLZhMmCWd3rkOeEvglpa4q5i/5Jlm3UIsWaxVzuXvDLFCSCWRO3yy2/+V/G7FusFgejnfQ==", - "optional": true, - "dependencies": { - "buffer": "^6.0.3", - "catering": "^2.0.0", - "is-buffer": "^2.0.5", - "level-concat-iterator": "^3.0.0", - "level-supports": "^2.0.1", - "queue-microtask": "^1.2.3" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/@truffle/db/node_modules/fs-extra": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", - "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", - "optional": true, - "dependencies": { - "at-least-node": "^1.0.0", - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/@truffle/db/node_modules/level-concat-iterator": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/level-concat-iterator/-/level-concat-iterator-3.1.0.tgz", - "integrity": "sha512-BWRCMHBxbIqPxJ8vHOvKUsaO0v1sLYZtjN3K2iZJsRBYtp+ONsY6Jfi6hy9K3+zolgQRryhIn2NRZjZnWJ9NmQ==", - "optional": true, - "dependencies": { - "catering": "^2.1.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/@truffle/db/node_modules/level-supports": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/level-supports/-/level-supports-2.1.0.tgz", - "integrity": "sha512-E486g1NCjW5cF78KGPrMDRBYzPuueMZ6VBXHT6gC7A8UYWGiM14fGgp+s/L1oFfDWSPV/+SFkYCmZ0SiESkRKA==", - "optional": true, - "engines": { - "node": ">=10" - } - }, "node_modules/@truffle/debug-utils": { - "version": "6.0.48", - "resolved": "https://registry.npmjs.org/@truffle/debug-utils/-/debug-utils-6.0.48.tgz", - "integrity": "sha512-HdK/7eH5EFrcTPeZVEgKaKkkzuZ4xsrH8yw+EoLEsScLsOEuQeKynY61NctjuU93voATWrYmV99Sfb/MRq2i2g==", - "dev": true, + "version": "6.0.57", + "resolved": "https://registry.npmjs.org/@truffle/debug-utils/-/debug-utils-6.0.57.tgz", + "integrity": "sha512-Q6oI7zLaeNLB69ixjwZk2UZEWBY6b2OD1sjLMGDKBGR7GaHYiw96GLR2PFgPH1uwEeLmV4N78LYaQCrDsHbNeA==", "dependencies": { - "@truffle/codec": "^0.14.17", + "@truffle/codec": "^0.17.3", "@trufflesuite/chromafi": "^3.0.0", "bn.js": "^5.1.3", "chalk": "^2.4.2", "debug": "^4.3.1", "highlightjs-solidity": "^2.0.6" + }, + "engines": { + "node": "^16.20 || ^18.16 || >=20" } }, "node_modules/@truffle/debug-utils/node_modules/ansi-styles": { "version": "3.2.1", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, "dependencies": { "color-convert": "^1.9.0" }, @@ -6201,7 +4042,6 @@ "version": "2.4.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, "dependencies": { "ansi-styles": "^3.2.1", "escape-string-regexp": "^1.0.5", @@ -6215,7 +4055,6 @@ "version": "1.9.3", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dev": true, "dependencies": { "color-name": "1.1.3" } @@ -6223,14 +4062,12 @@ "node_modules/@truffle/debug-utils/node_modules/color-name": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", - "dev": true + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==" }, "node_modules/@truffle/debug-utils/node_modules/escape-string-regexp": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", - "dev": true, "engines": { "node": ">=0.8.0" } @@ -6239,7 +4076,6 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", - "dev": true, "engines": { "node": ">=4" } @@ -6248,7 +4084,6 @@ "version": "5.5.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, "dependencies": { "has-flag": "^3.0.0" }, @@ -6256,179 +4091,79 @@ "node": ">=4" } }, - "node_modules/@truffle/debugger": { - "version": "12.1.4", - "resolved": "https://registry.npmjs.org/@truffle/debugger/-/debugger-12.1.4.tgz", - "integrity": "sha512-yAWvLIaIDpaSALdm/Sas09FPXx38MTZ+NTnI9QhrptpocHAeEFsWpm5JklrjeD7QD+oCSbJ/IS62xrLTS/4Pgg==", - "dependencies": { - "@ensdomains/ensjs": "^2.1.0", - "@truffle/abi-utils": "^1.0.3", - "@truffle/codec": "^0.17.3", - "@truffle/source-map-utils": "^1.3.119", - "bn.js": "^5.1.3", - "debug": "^4.3.1", - "json-pointer": "^0.6.1", - "json-stable-stringify": "^1.0.1", - "lodash": "^4.17.21", - "redux": "^3.7.2", - "redux-saga": "1.0.0", - "reselect-tree": "^1.3.7", - "semver": "^7.5.4", - "web3": "1.10.0", - "web3-eth-abi": "1.10.0" - }, - "engines": { - "node": "^16.20 || ^18.16 || >=20" - } - }, - "node_modules/@truffle/debugger/node_modules/@truffle/abi-utils": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/@truffle/abi-utils/-/abi-utils-1.0.3.tgz", - "integrity": "sha512-AWhs01HCShaVKjml7Z4AbVREr/u4oiWxCcoR7Cktm0mEvtT04pvnxW5xB/cI4znRkrbPdFQlFt67kgrAjesYkw==", - "dependencies": { - "change-case": "3.0.2", - "fast-check": "3.1.1", - "web3-utils": "1.10.0" - }, - "engines": { - "node": "^16.20 || ^18.16 || >=20" - } - }, - "node_modules/@truffle/debugger/node_modules/@truffle/codec": { - "version": "0.17.3", - "resolved": "https://registry.npmjs.org/@truffle/codec/-/codec-0.17.3.tgz", - "integrity": "sha512-Ko/+dsnntNyrJa57jUD9u4qx9nQby+H4GsUO6yjiCPSX0TQnEHK08XWqBSg0WdmCH2+h0y1nr2CXSx8gbZapxg==", - "dependencies": { - "@truffle/abi-utils": "^1.0.3", - "@truffle/compile-common": "^0.9.8", - "big.js": "^6.0.3", - "bn.js": "^5.1.3", - "cbor": "^5.2.0", - "debug": "^4.3.1", - "lodash": "^4.17.21", - "semver": "^7.5.4", - "utf8": "^3.0.0", - "web3-utils": "1.10.0" - }, - "engines": { - "node": "^16.20 || ^18.16 || >=20" - } - }, - "node_modules/@truffle/debugger/node_modules/web3-eth-abi": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/web3-eth-abi/-/web3-eth-abi-1.10.0.tgz", - "integrity": "sha512-cwS+qRBWpJ43aI9L3JS88QYPfFcSJJ3XapxOQ4j40v6mk7ATpA8CVK1vGTzpihNlOfMVRBkR95oAj7oL6aiDOg==", - "dependencies": { - "@ethersproject/abi": "^5.6.3", - "web3-utils": "1.10.0" - }, - "engines": { - "node": ">=8.0.0" - } - }, "node_modules/@truffle/error": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/@truffle/error/-/error-0.1.1.tgz", - "integrity": "sha512-sE7c9IHIGdbK4YayH4BC8i8qMjoAOeg6nUXUDZZp8wlU21/EMpaG+CLx+KqcIPyR+GSWIW3Dm0PXkr2nlggFDA==", - "dev": true - }, - "node_modules/@truffle/events": { - "version": "0.1.25", - "resolved": "https://registry.npmjs.org/@truffle/events/-/events-0.1.25.tgz", - "integrity": "sha512-5elJxNXPVuXDMOoIcCVox0sz95ovRhRbte/H9ht18vyOvtualb4bTjwYyRoWw6Y7j0pom0tPI3OLZWqCdKQNdA==", - "optional": true, - "dependencies": { - "@truffle/dashboard-message-bus-client": "^0.1.12", - "@truffle/spinners": "^0.2.5", - "debug": "^4.3.1", - "emittery": "^0.4.1", - "web3-utils": "1.10.0" - }, - "engines": { - "node": "^16.20 || ^18.16 || >=20" - } + "integrity": "sha512-sE7c9IHIGdbK4YayH4BC8i8qMjoAOeg6nUXUDZZp8wlU21/EMpaG+CLx+KqcIPyR+GSWIW3Dm0PXkr2nlggFDA==" }, - "node_modules/@truffle/hdwallet": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/@truffle/hdwallet/-/hdwallet-0.1.4.tgz", - "integrity": "sha512-D3SN0iw3sMWUXjWAedP6RJtopo9qQXYi80inzbtcsoso4VhxFxCwFvCErCl4b27AEJ9pkAtgnxEFRaSKdMmi1Q==", + "node_modules/@truffle/interface-adapter": { + "version": "0.5.37", + "resolved": "https://registry.npmjs.org/@truffle/interface-adapter/-/interface-adapter-0.5.37.tgz", + "integrity": "sha512-lPH9MDgU+7sNDlJSClwyOwPCfuOimqsCx0HfGkznL3mcFRymc1pukAR1k17zn7ErHqBwJjiKAZ6Ri72KkS+IWw==", "dependencies": { - "ethereum-cryptography": "1.1.2", - "keccak": "3.0.2", - "secp256k1": "4.0.3" - }, - "engines": { - "node": "^16.20 || ^18.16 || >=20" - } - }, - "node_modules/@truffle/hdwallet-provider": { - "version": "2.1.15", - "resolved": "https://registry.npmjs.org/@truffle/hdwallet-provider/-/hdwallet-provider-2.1.15.tgz", - "integrity": "sha512-I5cSS+5LygA3WFzru9aC5+yDXVowEEbLCx0ckl/RqJ2/SCiYXkzYlR5/DjjDJuCtYhivhrn2RP9AheeFlRF+qw==", - "dependencies": { - "@ethereumjs/common": "^2.4.0", - "@ethereumjs/tx": "^3.3.0", - "@metamask/eth-sig-util": "4.0.1", - "@truffle/hdwallet": "^0.1.4", - "@types/ethereum-protocol": "^1.0.0", - "@types/web3": "1.0.20", - "@types/web3-provider-engine": "^14.0.0", - "ethereum-cryptography": "1.1.2", - "ethereum-protocol": "^1.0.1", - "ethereumjs-util": "^7.1.5", - "web3": "1.10.0", - "web3-provider-engine": "16.0.3" + "bn.js": "^5.1.3", + "ethers": "^4.0.32", + "web3": "1.10.0" }, "engines": { "node": "^16.20 || ^18.16 || >=20" } }, - "node_modules/@truffle/hdwallet-provider/node_modules/@ethereumjs/common": { - "version": "2.6.5", - "resolved": "https://registry.npmjs.org/@ethereumjs/common/-/common-2.6.5.tgz", - "integrity": "sha512-lRyVQOeCDaIVtgfbowla32pzeDv2Obr8oR8Put5RdUBNRGr1VGPGQNGP6elWIpgK3YdpzqTOh4GyUGOureVeeA==", + "node_modules/@truffle/interface-adapter/node_modules/@ethereumjs/common": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/@ethereumjs/common/-/common-2.5.0.tgz", + "integrity": "sha512-DEHjW6e38o+JmB/NO3GZBpW4lpaiBpkFgXF6jLcJ6gETBYpEyaA5nTimsWBUJR3Vmtm/didUEbNjajskugZORg==", "dependencies": { "crc-32": "^1.2.0", - "ethereumjs-util": "^7.1.5" + "ethereumjs-util": "^7.1.1" } }, - "node_modules/@truffle/hdwallet-provider/node_modules/@ethereumjs/tx": { - "version": "3.5.2", - "resolved": "https://registry.npmjs.org/@ethereumjs/tx/-/tx-3.5.2.tgz", - "integrity": "sha512-gQDNJWKrSDGu2w7w0PzVXVBNMzb7wwdDOmOqczmhNjqFxFuIbhVJDwiGEnxFNC2/b8ifcZzY7MLcluizohRzNw==", + "node_modules/@truffle/interface-adapter/node_modules/@ethereumjs/tx": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/@ethereumjs/tx/-/tx-3.3.2.tgz", + "integrity": "sha512-6AaJhwg4ucmwTvw/1qLaZUX5miWrwZ4nLOUsKyb/HtzS3BMw/CasKhdi1ims9mBKeK9sOJCH4qGKOBGyJCeeog==", "dependencies": { - "@ethereumjs/common": "^2.6.4", - "ethereumjs-util": "^7.1.5" + "@ethereumjs/common": "^2.5.0", + "ethereumjs-util": "^7.1.2" } }, - "node_modules/@truffle/hdwallet-provider/node_modules/@types/web3": { - "version": "1.0.20", - "resolved": "https://registry.npmjs.org/@types/web3/-/web3-1.0.20.tgz", - "integrity": "sha512-KTDlFuYjzCUlBDGt35Ir5QRtyV9klF84MMKUsEJK10sTWga/71V+8VYLT7yysjuBjaOx2uFYtIWNGoz3yrNDlg==", + "node_modules/@truffle/interface-adapter/node_modules/@types/node": { + "version": "12.20.55", + "resolved": "https://registry.npmjs.org/@types/node/-/node-12.20.55.tgz", + "integrity": "sha512-J8xLz7q2OFulZ2cyGTLE1TbbZcjpno7FaN6zdJNrgAdrJ+DZzh/uFR6YrTb4C+nXakvud8Q4+rbhoIWlYQbUFQ==" + }, + "node_modules/@truffle/interface-adapter/node_modules/aes-js": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/aes-js/-/aes-js-3.0.0.tgz", + "integrity": "sha512-H7wUZRn8WpTq9jocdxQ2c8x2sKo9ZVmzfRE13GiNJXfp7NcKYEdvl3vspKjXox6RIG2VtaRe4JFvxG4rqp2Zuw==" + }, + "node_modules/@truffle/interface-adapter/node_modules/cross-fetch": { + "version": "3.1.8", + "resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-3.1.8.tgz", + "integrity": "sha512-cvA+JwZoU0Xq+h6WkMvAUqPEYy92Obet6UdKLfW60qn99ftItKjB5T+BkyWOFWe2pUyfQ+IJHmpOTznqk1M6Kg==", "dependencies": { - "@types/bn.js": "*", - "@types/underscore": "*" + "node-fetch": "^2.6.12" } }, - "node_modules/@truffle/interface-adapter": { - "version": "0.5.37", - "resolved": "https://registry.npmjs.org/@truffle/interface-adapter/-/interface-adapter-0.5.37.tgz", - "integrity": "sha512-lPH9MDgU+7sNDlJSClwyOwPCfuOimqsCx0HfGkznL3mcFRymc1pukAR1k17zn7ErHqBwJjiKAZ6Ri72KkS+IWw==", - "devOptional": true, + "node_modules/@truffle/interface-adapter/node_modules/eth-lib": { + "version": "0.2.8", + "resolved": "https://registry.npmjs.org/eth-lib/-/eth-lib-0.2.8.tgz", + "integrity": "sha512-ArJ7x1WcWOlSpzdoTBX8vkwlkSQ85CjjifSZtV4co64vWxSV8geWfPI9x4SVYu3DSxnX4yWFVTtGL+j9DUFLNw==", "dependencies": { - "bn.js": "^5.1.3", - "ethers": "^4.0.32", - "web3": "1.10.0" - }, - "engines": { - "node": "^16.20 || ^18.16 || >=20" + "bn.js": "^4.11.6", + "elliptic": "^6.4.0", + "xhr-request-promise": "^0.1.2" } }, + "node_modules/@truffle/interface-adapter/node_modules/eth-lib/node_modules/bn.js": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==" + }, "node_modules/@truffle/interface-adapter/node_modules/ethers": { "version": "4.0.49", "resolved": "https://registry.npmjs.org/ethers/-/ethers-4.0.49.tgz", "integrity": "sha512-kPltTvWiyu+OktYy1IStSO16i2e7cS9D9OxZ81q2UUaiNPVrm/RTcbxamCXF9VUSKzJIdJV68EAIhTEVBalRWg==", - "devOptional": true, "dependencies": { "aes-js": "3.0.0", "bn.js": "^4.11.9", @@ -6444,14 +4179,12 @@ "node_modules/@truffle/interface-adapter/node_modules/ethers/node_modules/bn.js": { "version": "4.12.0", "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", - "devOptional": true + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==" }, "node_modules/@truffle/interface-adapter/node_modules/hash.js": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.3.tgz", "integrity": "sha512-/UETyP0W22QILqS+6HowevwhEFJ3MBJnwTf75Qob9Wz9t0DPuisL8kW8YZMK62dHAKE1c1p+gY1TtOLY+USEHA==", - "devOptional": true, "dependencies": { "inherits": "^2.0.3", "minimalistic-assert": "^1.0.0" @@ -6460,153 +4193,361 @@ "node_modules/@truffle/interface-adapter/node_modules/js-sha3": { "version": "0.5.7", "resolved": "https://registry.npmjs.org/js-sha3/-/js-sha3-0.5.7.tgz", - "integrity": "sha512-GII20kjaPX0zJ8wzkTbNDYMY7msuZcTWk8S5UOh6806Jq/wz1J8/bnr8uGU0DAUmYDjj2Mr4X1cW8v/GLYnR+g==", - "devOptional": true + "integrity": "sha512-GII20kjaPX0zJ8wzkTbNDYMY7msuZcTWk8S5UOh6806Jq/wz1J8/bnr8uGU0DAUmYDjj2Mr4X1cW8v/GLYnR+g==" }, "node_modules/@truffle/interface-adapter/node_modules/scrypt-js": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/scrypt-js/-/scrypt-js-2.0.4.tgz", - "integrity": "sha512-4KsaGcPnuhtCZQCxFxN3GVYIhKFPTdLd8PLC552XwbMndtD0cjRFAhDuuydXQ0h08ZfPgzqe6EKHozpuH74iDw==", - "devOptional": true + "integrity": "sha512-4KsaGcPnuhtCZQCxFxN3GVYIhKFPTdLd8PLC552XwbMndtD0cjRFAhDuuydXQ0h08ZfPgzqe6EKHozpuH74iDw==" }, "node_modules/@truffle/interface-adapter/node_modules/setimmediate": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.4.tgz", - "integrity": "sha512-/TjEmXQVEzdod/FFskf3o7oOAsGhHf2j1dZqRFbDzq4F3mvvxflIIi4Hd3bLQE9y/CpwqfSQam5JakI/mi3Pog==", - "devOptional": true + "integrity": "sha512-/TjEmXQVEzdod/FFskf3o7oOAsGhHf2j1dZqRFbDzq4F3mvvxflIIi4Hd3bLQE9y/CpwqfSQam5JakI/mi3Pog==" }, "node_modules/@truffle/interface-adapter/node_modules/uuid": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/uuid/-/uuid-2.0.1.tgz", "integrity": "sha512-nWg9+Oa3qD2CQzHIP4qKUqwNfzKn8P0LtFhotaCTFchsV7ZfDhAybeip/HZVeMIpZi9JgY1E3nUlwaCmZT1sEg==", - "deprecated": "Please upgrade to version 7 or higher. Older versions may use Math.random() in certain circumstances, which is known to be problematic. See https://v8.dev/blog/math-random for details.", - "devOptional": true + "deprecated": "Please upgrade to version 7 or higher. Older versions may use Math.random() in certain circumstances, which is known to be problematic. See https://v8.dev/blog/math-random for details." }, - "node_modules/@truffle/promise-tracker": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/@truffle/promise-tracker/-/promise-tracker-0.1.7.tgz", - "integrity": "sha512-NiPXNJvdei8MRZRUjEZoL0Y7TPDR1TaeCfGUgB3md6Q7TBiqSKo2p5OT36JO106B2j57SLmXOiDn8fLb+u2sjA==", - "optional": true, + "node_modules/@truffle/interface-adapter/node_modules/web3": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/web3/-/web3-1.10.0.tgz", + "integrity": "sha512-YfKY9wSkGcM8seO+daR89oVTcbu18NsVfvOngzqMYGUU0pPSQmE57qQDvQzUeoIOHAnXEBNzrhjQJmm8ER0rng==", + "hasInstallScript": true, + "dependencies": { + "web3-bzz": "1.10.0", + "web3-core": "1.10.0", + "web3-eth": "1.10.0", + "web3-eth-personal": "1.10.0", + "web3-net": "1.10.0", + "web3-shh": "1.10.0", + "web3-utils": "1.10.0" + }, "engines": { - "node": "^16.20 || ^18.16 || >=20" + "node": ">=8.0.0" } }, - "node_modules/@truffle/provider": { - "version": "0.3.13", - "resolved": "https://registry.npmjs.org/@truffle/provider/-/provider-0.3.13.tgz", - "integrity": "sha512-W9yZO0ZUwA0LhFvf7+NNNXVSCOd4x5pTbFiXUVURjyqp7f4YooLAqnlLPSpV+6qwIwThc+86CeLlOiFslYdDIA==", - "optional": true, + "node_modules/@truffle/interface-adapter/node_modules/web3-bzz": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/web3-bzz/-/web3-bzz-1.10.0.tgz", + "integrity": "sha512-o9IR59io3pDUsXTsps5pO5hW1D5zBmg46iNc2t4j2DkaYHNdDLwk2IP9ukoM2wg47QILfPEJYzhTfkS/CcX0KA==", + "hasInstallScript": true, "dependencies": { - "@truffle/error": "^0.2.2", - "@truffle/interface-adapter": "^0.5.37", - "debug": "^4.3.1", - "web3": "1.10.0" + "@types/node": "^12.12.6", + "got": "12.1.0", + "swarm-js": "^0.1.40" }, "engines": { - "node": "^16.20 || ^18.16 || >=20" + "node": ">=8.0.0" } }, - "node_modules/@truffle/provider/node_modules/@truffle/error": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/@truffle/error/-/error-0.2.2.tgz", - "integrity": "sha512-TqbzJ0O8DHh34cu8gDujnYl4dUl6o2DE4PR6iokbybvnIm/L2xl6+Gv1VC+YJS45xfH83Yo3/Zyg/9Oq8/xZWg==", - "optional": true, + "node_modules/@truffle/interface-adapter/node_modules/web3-core": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/web3-core/-/web3-core-1.10.0.tgz", + "integrity": "sha512-fWySwqy2hn3TL89w5TM8wXF1Z2Q6frQTKHWmP0ppRQorEK8NcHJRfeMiv/mQlSKoTS1F6n/nv2uyZsixFycjYQ==", + "dependencies": { + "@types/bn.js": "^5.1.1", + "@types/node": "^12.12.6", + "bignumber.js": "^9.0.0", + "web3-core-helpers": "1.10.0", + "web3-core-method": "1.10.0", + "web3-core-requestmanager": "1.10.0", + "web3-utils": "1.10.0" + }, "engines": { - "node": "^16.20 || ^18.16 || >=20" + "node": ">=8.0.0" } }, - "node_modules/@truffle/source-map-utils": { - "version": "1.3.119", - "resolved": "https://registry.npmjs.org/@truffle/source-map-utils/-/source-map-utils-1.3.119.tgz", - "integrity": "sha512-TFYi3XvanY8WZBOfBwDHQe9HfZUXJ2ejnmFNjsq1//sbM4fUNWjeNshGqkWGxfKPh3OAzXgD4iTnPG3YeXM8YQ==", + "node_modules/@truffle/interface-adapter/node_modules/web3-core-helpers": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/web3-core-helpers/-/web3-core-helpers-1.10.0.tgz", + "integrity": "sha512-pIxAzFDS5vnbXvfvLSpaA1tfRykAe9adw43YCKsEYQwH0gCLL0kMLkaCX3q+Q8EVmAh+e1jWL/nl9U0de1+++g==", "dependencies": { - "@truffle/code-utils": "^3.0.4", - "@truffle/codec": "^0.17.3", - "debug": "^4.3.1", - "json-pointer": "^0.6.1", - "node-interval-tree": "^1.3.3", + "web3-eth-iban": "1.10.0", "web3-utils": "1.10.0" }, "engines": { - "node": "^16.20 || ^18.16 || >=20" + "node": ">=8.0.0" } }, - "node_modules/@truffle/source-map-utils/node_modules/@truffle/abi-utils": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/@truffle/abi-utils/-/abi-utils-1.0.3.tgz", - "integrity": "sha512-AWhs01HCShaVKjml7Z4AbVREr/u4oiWxCcoR7Cktm0mEvtT04pvnxW5xB/cI4znRkrbPdFQlFt67kgrAjesYkw==", + "node_modules/@truffle/interface-adapter/node_modules/web3-core-method": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/web3-core-method/-/web3-core-method-1.10.0.tgz", + "integrity": "sha512-4R700jTLAMKDMhQ+nsVfIXvH6IGJlJzGisIfMKWAIswH31h5AZz7uDUW2YctI+HrYd+5uOAlS4OJeeT9bIpvkA==", "dependencies": { - "change-case": "3.0.2", - "fast-check": "3.1.1", + "@ethersproject/transactions": "^5.6.2", + "web3-core-helpers": "1.10.0", + "web3-core-promievent": "1.10.0", + "web3-core-subscriptions": "1.10.0", "web3-utils": "1.10.0" }, "engines": { - "node": "^16.20 || ^18.16 || >=20" + "node": ">=8.0.0" } }, - "node_modules/@truffle/source-map-utils/node_modules/@truffle/codec": { - "version": "0.17.3", - "resolved": "https://registry.npmjs.org/@truffle/codec/-/codec-0.17.3.tgz", - "integrity": "sha512-Ko/+dsnntNyrJa57jUD9u4qx9nQby+H4GsUO6yjiCPSX0TQnEHK08XWqBSg0WdmCH2+h0y1nr2CXSx8gbZapxg==", + "node_modules/@truffle/interface-adapter/node_modules/web3-core-promievent": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/web3-core-promievent/-/web3-core-promievent-1.10.0.tgz", + "integrity": "sha512-68N7k5LWL5R38xRaKFrTFT2pm2jBNFaM4GioS00YjAKXRQ3KjmhijOMG3TICz6Aa5+6GDWYelDNx21YAeZ4YTg==", "dependencies": { - "@truffle/abi-utils": "^1.0.3", - "@truffle/compile-common": "^0.9.8", - "big.js": "^6.0.3", - "bn.js": "^5.1.3", - "cbor": "^5.2.0", - "debug": "^4.3.1", - "lodash": "^4.17.21", - "semver": "^7.5.4", - "utf8": "^3.0.0", + "eventemitter3": "4.0.4" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/@truffle/interface-adapter/node_modules/web3-core-requestmanager": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/web3-core-requestmanager/-/web3-core-requestmanager-1.10.0.tgz", + "integrity": "sha512-3z/JKE++Os62APml4dvBM+GAuId4h3L9ckUrj7ebEtS2AR0ixyQPbrBodgL91Sv7j7cQ3Y+hllaluqjguxvSaQ==", + "dependencies": { + "util": "^0.12.5", + "web3-core-helpers": "1.10.0", + "web3-providers-http": "1.10.0", + "web3-providers-ipc": "1.10.0", + "web3-providers-ws": "1.10.0" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/@truffle/interface-adapter/node_modules/web3-core-subscriptions": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/web3-core-subscriptions/-/web3-core-subscriptions-1.10.0.tgz", + "integrity": "sha512-HGm1PbDqsxejI075gxBc5OSkwymilRWZufIy9zEpnWKNmfbuv5FfHgW1/chtJP6aP3Uq2vHkvTDl3smQBb8l+g==", + "dependencies": { + "eventemitter3": "4.0.4", + "web3-core-helpers": "1.10.0" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/@truffle/interface-adapter/node_modules/web3-eth": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/web3-eth/-/web3-eth-1.10.0.tgz", + "integrity": "sha512-Z5vT6slNMLPKuwRyKGbqeGYC87OAy8bOblaqRTgg94CXcn/mmqU7iPIlG4506YdcdK3x6cfEDG7B6w+jRxypKA==", + "dependencies": { + "web3-core": "1.10.0", + "web3-core-helpers": "1.10.0", + "web3-core-method": "1.10.0", + "web3-core-subscriptions": "1.10.0", + "web3-eth-abi": "1.10.0", + "web3-eth-accounts": "1.10.0", + "web3-eth-contract": "1.10.0", + "web3-eth-ens": "1.10.0", + "web3-eth-iban": "1.10.0", + "web3-eth-personal": "1.10.0", + "web3-net": "1.10.0", "web3-utils": "1.10.0" }, "engines": { - "node": "^16.20 || ^18.16 || >=20" + "node": ">=8.0.0" } }, - "node_modules/@truffle/spinners": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/@truffle/spinners/-/spinners-0.2.5.tgz", - "integrity": "sha512-emYyLEuoY62MQV/RNjyVIuTPEjMyIA0WiYMG2N3yfh8OSjD/TC0HRc2oyDWtVkNNox/5D2tH2m5fFB8HOt80FQ==", - "optional": true, + "node_modules/@truffle/interface-adapter/node_modules/web3-eth-abi": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/web3-eth-abi/-/web3-eth-abi-1.10.0.tgz", + "integrity": "sha512-cwS+qRBWpJ43aI9L3JS88QYPfFcSJJ3XapxOQ4j40v6mk7ATpA8CVK1vGTzpihNlOfMVRBkR95oAj7oL6aiDOg==", "dependencies": { - "@trufflesuite/spinnies": "^0.1.1" + "@ethersproject/abi": "^5.6.3", + "web3-utils": "1.10.0" }, "engines": { - "node": "^16.20 || ^18.16 || >=20" + "node": ">=8.0.0" } }, - "node_modules/@trufflesuite/bigint-buffer": { - "version": "1.1.9", - "resolved": "https://registry.npmjs.org/@trufflesuite/bigint-buffer/-/bigint-buffer-1.1.9.tgz", - "integrity": "sha512-bdM5cEGCOhDSwminryHJbRmXc1x7dPKg6Pqns3qyTwFlxsqUgxE29lsERS3PlIW1HTjoIGMUqsk1zQQwST1Yxw==", - "dev": true, - "hasInstallScript": true, - "optional": true, + "node_modules/@truffle/interface-adapter/node_modules/web3-eth-accounts": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/web3-eth-accounts/-/web3-eth-accounts-1.10.0.tgz", + "integrity": "sha512-wiq39Uc3mOI8rw24wE2n15hboLE0E9BsQLdlmsL4Zua9diDS6B5abXG0XhFcoNsXIGMWXVZz4TOq3u4EdpXF/Q==", "dependencies": { - "node-gyp-build": "4.3.0" + "@ethereumjs/common": "2.5.0", + "@ethereumjs/tx": "3.3.2", + "eth-lib": "0.2.8", + "ethereumjs-util": "^7.1.5", + "scrypt-js": "^3.0.1", + "uuid": "^9.0.0", + "web3-core": "1.10.0", + "web3-core-helpers": "1.10.0", + "web3-core-method": "1.10.0", + "web3-utils": "1.10.0" }, "engines": { - "node": ">= 10.0.0" + "node": ">=8.0.0" } }, - "node_modules/@trufflesuite/bigint-buffer/node_modules/node-gyp-build": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.3.0.tgz", - "integrity": "sha512-iWjXZvmboq0ja1pUGULQBexmxq8CV4xBhX7VDOTbL7ZR4FOowwY/VOtRxBN/yKxmdGoIp4j5ysNT4u3S2pDQ3Q==", - "dev": true, - "optional": true, + "node_modules/@truffle/interface-adapter/node_modules/web3-eth-accounts/node_modules/scrypt-js": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/scrypt-js/-/scrypt-js-3.0.1.tgz", + "integrity": "sha512-cdwTTnqPu0Hyvf5in5asVdZocVDTNRmR7XEcJuIzMjJeSHybHl7vpB66AzwTaIg6CLSbtjcxc8fqcySfnTkccA==" + }, + "node_modules/@truffle/interface-adapter/node_modules/web3-eth-accounts/node_modules/uuid": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.1.tgz", + "integrity": "sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==", + "funding": [ + "https://github.com/sponsors/broofa", + "https://github.com/sponsors/ctavan" + ], "bin": { - "node-gyp-build": "bin.js", - "node-gyp-build-optional": "optional.js", - "node-gyp-build-test": "build-test.js" + "uuid": "dist/bin/uuid" + } + }, + "node_modules/@truffle/interface-adapter/node_modules/web3-eth-contract": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/web3-eth-contract/-/web3-eth-contract-1.10.0.tgz", + "integrity": "sha512-MIC5FOzP/+2evDksQQ/dpcXhSqa/2hFNytdl/x61IeWxhh6vlFeSjq0YVTAyIzdjwnL7nEmZpjfI6y6/Ufhy7w==", + "dependencies": { + "@types/bn.js": "^5.1.1", + "web3-core": "1.10.0", + "web3-core-helpers": "1.10.0", + "web3-core-method": "1.10.0", + "web3-core-promievent": "1.10.0", + "web3-core-subscriptions": "1.10.0", + "web3-eth-abi": "1.10.0", + "web3-utils": "1.10.0" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/@truffle/interface-adapter/node_modules/web3-eth-ens": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/web3-eth-ens/-/web3-eth-ens-1.10.0.tgz", + "integrity": "sha512-3hpGgzX3qjgxNAmqdrC2YUQMTfnZbs4GeLEmy8aCWziVwogbuqQZ+Gzdfrym45eOZodk+lmXyLuAdqkNlvkc1g==", + "dependencies": { + "content-hash": "^2.5.2", + "eth-ens-namehash": "2.0.8", + "web3-core": "1.10.0", + "web3-core-helpers": "1.10.0", + "web3-core-promievent": "1.10.0", + "web3-eth-abi": "1.10.0", + "web3-eth-contract": "1.10.0", + "web3-utils": "1.10.0" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/@truffle/interface-adapter/node_modules/web3-eth-iban": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/web3-eth-iban/-/web3-eth-iban-1.10.0.tgz", + "integrity": "sha512-0l+SP3IGhInw7Q20LY3IVafYEuufo4Dn75jAHT7c2aDJsIolvf2Lc6ugHkBajlwUneGfbRQs/ccYPQ9JeMUbrg==", + "dependencies": { + "bn.js": "^5.2.1", + "web3-utils": "1.10.0" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/@truffle/interface-adapter/node_modules/web3-eth-personal": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/web3-eth-personal/-/web3-eth-personal-1.10.0.tgz", + "integrity": "sha512-anseKn98w/d703eWq52uNuZi7GhQeVjTC5/svrBWEKob0WZ5kPdo+EZoFN0sp5a5ubbrk/E0xSl1/M5yORMtpg==", + "dependencies": { + "@types/node": "^12.12.6", + "web3-core": "1.10.0", + "web3-core-helpers": "1.10.0", + "web3-core-method": "1.10.0", + "web3-net": "1.10.0", + "web3-utils": "1.10.0" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/@truffle/interface-adapter/node_modules/web3-net": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/web3-net/-/web3-net-1.10.0.tgz", + "integrity": "sha512-NLH/N3IshYWASpxk4/18Ge6n60GEvWBVeM8inx2dmZJVmRI6SJIlUxbL8jySgiTn3MMZlhbdvrGo8fpUW7a1GA==", + "dependencies": { + "web3-core": "1.10.0", + "web3-core-method": "1.10.0", + "web3-utils": "1.10.0" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/@truffle/interface-adapter/node_modules/web3-providers-http": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/web3-providers-http/-/web3-providers-http-1.10.0.tgz", + "integrity": "sha512-eNr965YB8a9mLiNrkjAWNAPXgmQWfpBfkkn7tpEFlghfww0u3I0tktMZiaToJVcL2+Xq+81cxbkpeWJ5XQDwOA==", + "dependencies": { + "abortcontroller-polyfill": "^1.7.3", + "cross-fetch": "^3.1.4", + "es6-promise": "^4.2.8", + "web3-core-helpers": "1.10.0" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/@truffle/interface-adapter/node_modules/web3-providers-ipc": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/web3-providers-ipc/-/web3-providers-ipc-1.10.0.tgz", + "integrity": "sha512-OfXG1aWN8L1OUqppshzq8YISkWrYHaATW9H8eh0p89TlWMc1KZOL9vttBuaBEi96D/n0eYDn2trzt22bqHWfXA==", + "dependencies": { + "oboe": "2.1.5", + "web3-core-helpers": "1.10.0" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/@truffle/interface-adapter/node_modules/web3-providers-ws": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/web3-providers-ws/-/web3-providers-ws-1.10.0.tgz", + "integrity": "sha512-sK0fNcglW36yD5xjnjtSGBnEtf59cbw4vZzJ+CmOWIKGIR96mP5l684g0WD0Eo+f4NQc2anWWXG74lRc9OVMCQ==", + "dependencies": { + "eventemitter3": "4.0.4", + "web3-core-helpers": "1.10.0", + "websocket": "^1.0.32" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/@truffle/interface-adapter/node_modules/web3-shh": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/web3-shh/-/web3-shh-1.10.0.tgz", + "integrity": "sha512-uNUUuNsO2AjX41GJARV9zJibs11eq6HtOe6Wr0FtRUcj8SN6nHeYIzwstAvJ4fXA53gRqFMTxdntHEt9aXVjpg==", + "hasInstallScript": true, + "dependencies": { + "web3-core": "1.10.0", + "web3-core-method": "1.10.0", + "web3-core-subscriptions": "1.10.0", + "web3-net": "1.10.0" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/@truffle/interface-adapter/node_modules/web3-utils": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/web3-utils/-/web3-utils-1.10.0.tgz", + "integrity": "sha512-kSaCM0uMcZTNUSmn5vMEhlo02RObGNRRCkdX0V9UTAU0+lrvn0HSaudyCo6CQzuXUsnuY2ERJGCGPfeWmv19Rg==", + "dependencies": { + "bn.js": "^5.2.1", + "ethereum-bloom-filters": "^1.0.6", + "ethereumjs-util": "^7.1.0", + "ethjs-unit": "0.1.6", + "number-to-bn": "1.7.0", + "randombytes": "^2.1.0", + "utf8": "3.0.0" + }, + "engines": { + "node": ">=8.0.0" } }, "node_modules/@trufflesuite/chromafi": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/@trufflesuite/chromafi/-/chromafi-3.0.0.tgz", "integrity": "sha512-oqWcOqn8nT1bwlPPfidfzS55vqcIDdpfzo3HbU9EnUmcSTX+I8z0UyUFI3tZQjByVJulbzxHxUGS3ZJPwK/GPQ==", - "dev": true, "dependencies": { "camelcase": "^4.1.0", "chalk": "^2.3.2", @@ -6622,7 +4563,6 @@ "version": "3.2.1", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, "dependencies": { "color-convert": "^1.9.0" }, @@ -6634,7 +4574,6 @@ "version": "2.4.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, "dependencies": { "ansi-styles": "^3.2.1", "escape-string-regexp": "^1.0.5", @@ -6648,7 +4587,6 @@ "version": "1.9.3", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dev": true, "dependencies": { "color-name": "1.1.3" } @@ -6656,14 +4594,12 @@ "node_modules/@trufflesuite/chromafi/node_modules/color-name": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", - "dev": true + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==" }, "node_modules/@trufflesuite/chromafi/node_modules/escape-string-regexp": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", - "dev": true, "engines": { "node": ">=0.8.0" } @@ -6672,7 +4608,6 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", - "dev": true, "engines": { "node": ">=4" } @@ -6681,7 +4616,6 @@ "version": "5.5.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, "dependencies": { "has-flag": "^3.0.0" }, @@ -6689,92 +4623,32 @@ "node": ">=4" } }, - "node_modules/@trufflesuite/spinnies": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/@trufflesuite/spinnies/-/spinnies-0.1.1.tgz", - "integrity": "sha512-jltEtmFJj6xmQqr85gP8OqBHCEiId+zw+uAsb3DyLLRD17O6sySW6Afa2Z/jpzSafj+32ssDfLJ+c0of1NLqcA==", - "optional": true, - "dependencies": { - "chalk": "^4.1.2", - "cli-cursor": "^3.1.0", - "strip-ansi": "^6.0.0" - } - }, - "node_modules/@trufflesuite/spinnies/node_modules/ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "optional": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/@trufflesuite/spinnies/node_modules/strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "optional": true, - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@typechain/ethers-v5": { - "version": "10.2.0", - "resolved": "https://registry.npmjs.org/@typechain/ethers-v5/-/ethers-v5-10.2.0.tgz", - "integrity": "sha512-ikaq0N/w9fABM+G01OFmU3U3dNnyRwEahkdvi9mqy1a3XwKiPZaF/lu54OcNaEWnpvEYyhhS0N7buCtLQqC92w==", - "dev": true, - "dependencies": { - "lodash": "^4.17.15", - "ts-essentials": "^7.0.1" - }, - "peerDependencies": { - "@ethersproject/abi": "^5.0.0", - "@ethersproject/bytes": "^5.0.0", - "@ethersproject/providers": "^5.0.0", - "ethers": "^5.1.3", - "typechain": "^8.1.1", - "typescript": ">=4.3.0" - } - }, "node_modules/@types/abstract-leveldown": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@types/abstract-leveldown/-/abstract-leveldown-7.2.0.tgz", - "integrity": "sha512-q5veSX6zjUy/DlDhR4Y4cU0k2Ar+DT2LUraP00T19WLmTO6Se1djepCCaqU6nQrwcJ5Hyo/CWqxTzrrFg8eqbQ==" - }, - "node_modules/@types/accepts": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/@types/accepts/-/accepts-1.3.5.tgz", - "integrity": "sha512-jOdnI/3qTpHABjM5cx1Hc0sKsPoYCp+DP/GJRGtDlPd7fiV9oXGGIcjW/ZOxLIvjGz8MA+uMZI9metHlgqbgwQ==", - "optional": true, - "dependencies": { - "@types/node": "*" - } + "version": "7.2.5", + "resolved": "https://registry.npmjs.org/@types/abstract-leveldown/-/abstract-leveldown-7.2.5.tgz", + "integrity": "sha512-/2B0nQF4UdupuxeKTJA2+Rj1D+uDemo6P4kMwKCpbfpnzeVaWSELTsAw4Lxn3VJD6APtRrZOCuYo+4nHUQfTfg==" }, "node_modules/@types/bignumber.js": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/@types/bignumber.js/-/bignumber.js-5.0.0.tgz", "integrity": "sha512-0DH7aPGCClywOFaxxjE6UwpN2kQYe9LwuDQMv+zYA97j5GkOMo8e66LYT+a8JYU7jfmUFRZLa9KycxHDsKXJCA==", "deprecated": "This is a stub types definition for bignumber.js (https://github.com/MikeMcl/bignumber.js/). bignumber.js provides its own type definitions, so you don't need @types/bignumber.js installed!", - "dev": true, "dependencies": { "bignumber.js": "*" } }, "node_modules/@types/bn.js": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/@types/bn.js/-/bn.js-5.1.1.tgz", - "integrity": "sha512-qNrYbZqMx0uJAfKnKclPh+dTwK33KfLHYqtyODwd5HnXOjnkhc4qgn3BrK6RWyGZm5+sIFE7Q7Vz6QQtJB7w7g==", + "version": "5.1.5", + "resolved": "https://registry.npmjs.org/@types/bn.js/-/bn.js-5.1.5.tgz", + "integrity": "sha512-V46N0zwKRF5Q00AZ6hWtN0T8gGmDUaUzLWQvHFo5yThtVwK/VCenFY3wXVbOvNfajEpsTfQM4IN9k/d6gUVX3A==", "dependencies": { "@types/node": "*" } }, "node_modules/@types/body-parser": { - "version": "1.19.2", - "resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.2.tgz", - "integrity": "sha512-ALYone6pm6QmwZoAgeyNksccT9Q4AWZQ6PvfwR37GT6r6FWUPguq6sUmNGSMV2Wr761oQoBxwGGa6DR5o1DC9g==", + "version": "1.19.5", + "resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.5.tgz", + "integrity": "sha512-fB3Zu92ucau0iQ0JMCFQE7b/dv8Ot07NI3KaZIkIUNXq82k4eBAqUaneXfleGY9JWskeS9y+u0nXMyspcuQrCg==", "dependencies": { "@types/connect": "*", "@types/node": "*" @@ -6792,18 +4666,9 @@ } }, "node_modules/@types/chai": { - "version": "4.3.3", - "resolved": "https://registry.npmjs.org/@types/chai/-/chai-4.3.3.tgz", - "integrity": "sha512-hC7OMnszpxhZPduX+m+nrx+uFoLkWOMiR4oa/AZF3MuSETYTZmFfJAHqZEM8MVlvfG7BEUcgvtwoCTxBp6hm3g==" - }, - "node_modules/@types/chai-as-promised": { - "version": "7.1.5", - "resolved": "https://registry.npmjs.org/@types/chai-as-promised/-/chai-as-promised-7.1.5.tgz", - "integrity": "sha512-jStwss93SITGBwt/niYrkf2C+/1KTeZCZl1LaeezTlqppAKeoQC7jxyqYuP72sxBGKCIbw7oHgbYssIRzT5FCQ==", - "peer": true, - "dependencies": { - "@types/chai": "*" - } + "version": "4.3.11", + "resolved": "https://registry.npmjs.org/@types/chai/-/chai-4.3.11.tgz", + "integrity": "sha512-qQR1dr2rGIHYlJulmr8Ioq3De0Le9E4MJ5AiaeAETJJpndT1uUNHsGFK3L/UIu+rbkQSdj8J/w2bCsBZc/Y5fQ==" }, "node_modules/@types/concat-stream": { "version": "1.6.1", @@ -6814,39 +4679,17 @@ } }, "node_modules/@types/connect": { - "version": "3.4.35", - "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.35.tgz", - "integrity": "sha512-cdeYyv4KWoEgpBISTxWvqYsVy444DOqehiF3fM3ne10AmJ62RSyNkUnxMJXHQWRQQX2eR94m5y1IZyDwBjV9FQ==", + "version": "3.4.38", + "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.38.tgz", + "integrity": "sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug==", "dependencies": { "@types/node": "*" } }, - "node_modules/@types/cors": { - "version": "2.8.12", - "resolved": "https://registry.npmjs.org/@types/cors/-/cors-2.8.12.tgz", - "integrity": "sha512-vt+kDhq/M2ayberEtJcIN/hxXy1Pk+59g2FV/ZQceeaTyCtCucjL2Q7FXlFjtWn4n15KCr1NE2lNNFhp0lEThw==", - "optional": true - }, - "node_modules/@types/ethereum-protocol": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@types/ethereum-protocol/-/ethereum-protocol-1.0.2.tgz", - "integrity": "sha512-Ri/hwt4UckZlF7eqhhAQcXsNvcgQmSJOKZteLco1/5NsRcneW/cJuQcrQNILN2Ohs9WUQjeGW3ZRRNqkEVMzuQ==", - "dependencies": { - "bignumber.js": "7.2.1" - } - }, - "node_modules/@types/ethereum-protocol/node_modules/bignumber.js": { - "version": "7.2.1", - "resolved": "https://registry.npmjs.org/bignumber.js/-/bignumber.js-7.2.1.tgz", - "integrity": "sha512-S4XzBk5sMB+Rcb/LNcpzXr57VRTxgAvaAEDAl1AwRx27j00hT84O6OkteE7u8UB3NuaaygCRrEpqox4uDOrbdQ==", - "engines": { - "node": "*" - } - }, "node_modules/@types/express": { - "version": "4.17.17", - "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.17.tgz", - "integrity": "sha512-Q4FmmuLGBG58btUnfS1c1r/NQdlp3DMfGDGig8WhfpA2YRUtEkxAjkZb0yvplJGYdF1fsQ81iMDcH24sSCNC/Q==", + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.21.tgz", + "integrity": "sha512-ejlPM315qwLpaQlQDTjPdsUFSc6ZsP4AN6AlWnogPjQ7CVi7PYF3YVz+CY3jE2pwYf7E/7HlDAN0rV2GxTG0HQ==", "dependencies": { "@types/body-parser": "*", "@types/express-serve-static-core": "^4.17.33", @@ -6855,9 +4698,9 @@ } }, "node_modules/@types/express-serve-static-core": { - "version": "4.17.35", - "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.17.35.tgz", - "integrity": "sha512-wALWQwrgiB2AWTT91CB62b6Yt0sNHpznUXeZEcnPU3DRdlDIz74x8Qg1UUYKSVFi+va5vKOLYRBI1bRKiLLKIg==", + "version": "4.17.41", + "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.17.41.tgz", + "integrity": "sha512-OaJ7XLaelTgrvlZD8/aa0vvvxZdUmlCn6MtWeB7TkiKW70BQLc9XEPpDLPdbo52ZhXUCrznlWdCHWxJWtdyajA==", "dependencies": { "@types/node": "*", "@types/qs": "*", @@ -6874,18 +4717,23 @@ } }, "node_modules/@types/glob": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/@types/glob/-/glob-8.0.0.tgz", - "integrity": "sha512-l6NQsDDyQUVeoTynNpC9uRvCUint/gSUXQA2euwmTuWGvPY5LSDUu6tkCtJB2SvGQlJQzLaKqcGZP4//7EDveA==", + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/@types/glob/-/glob-8.1.0.tgz", + "integrity": "sha512-IO+MJPVhoqz+28h1qLAcBEH2+xHMK6MTyHJc7MTnnYb6wsoLR29POVGJ7LycmVXIqyy/4/2ShP5sUwTXuOwb/w==", "dependencies": { - "@types/minimatch": "*", + "@types/minimatch": "^5.1.2", "@types/node": "*" } }, "node_modules/@types/http-cache-semantics": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/@types/http-cache-semantics/-/http-cache-semantics-4.0.1.tgz", - "integrity": "sha512-SZs7ekbP8CN0txVG2xVRH6EgKmEm31BOxA07vkFaETzZz1xh+cbt8BcI0slpymvwhx5dlFnQG2rTlPVQn+iRPQ==" + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/@types/http-cache-semantics/-/http-cache-semantics-4.0.4.tgz", + "integrity": "sha512-1m0bIFVc7eJWyve9S0RnuRgcQqF/Xd5QsUZAZeQFr1Q3/p9JWoQQEqmVy+DPTNpGXwhgIetAoYF8JSc33q29QA==" + }, + "node_modules/@types/http-errors": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@types/http-errors/-/http-errors-2.0.4.tgz", + "integrity": "sha512-D0CFMMtydbJAegzOyHjtiKPLlvnm3iTZyZRSZoLq2mRhDdmLfIWOCYPfQJ4cu2erKghU++QvjcUjp/5h7hESpA==" }, "node_modules/@types/keyv": { "version": "3.1.4", @@ -6896,9 +4744,9 @@ } }, "node_modules/@types/level-errors": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@types/level-errors/-/level-errors-3.0.0.tgz", - "integrity": "sha512-/lMtoq/Cf/2DVOm6zE6ORyOM+3ZVm/BvzEZVxUhf6bgh8ZHglXlBqxbxSlJeVp8FCbD3IVvk/VbsaNmDjrQvqQ==" + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@types/level-errors/-/level-errors-3.0.2.tgz", + "integrity": "sha512-gyZHbcQ2X5hNXf/9KS2qGEmgDe9EN2WDM3rJ5Ele467C0nA1sLhtmv1bZiPMDYfAYCfPWft0uQIaTvXbASSTRA==" }, "node_modules/@types/levelup": { "version": "4.3.3", @@ -6910,74 +4758,46 @@ "@types/node": "*" } }, - "node_modules/@types/long": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/@types/long/-/long-4.0.2.tgz", - "integrity": "sha512-MqTGEo5bj5t157U6fA/BiDynNkn0YknVdh48CMPkTSpFTVmvao5UQmm7uEF6xBEo7qIMAlY/JSleYaE6VOdpaA==", - "optional": true - }, "node_modules/@types/lru-cache": { "version": "5.1.1", "resolved": "https://registry.npmjs.org/@types/lru-cache/-/lru-cache-5.1.1.tgz", "integrity": "sha512-ssE3Vlrys7sdIzs5LOxCzTVMsU7i9oa/IaW92wF32JFb3CVczqOkru2xspuKczHEbG3nvmPY7IFqVmGGHdNbYw==" }, "node_modules/@types/mime": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/@types/mime/-/mime-3.0.1.tgz", - "integrity": "sha512-Y4XFY5VJAuw0FgAqPNd6NNoV44jbq9Bz2L7Rh/J6jLTiHBSBJa9fxqQIvkIld4GsoDOcCbvzOUAbLPsSKKg+uA==" + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/@types/mime/-/mime-1.3.5.tgz", + "integrity": "sha512-/pyBZWSLD2n0dcHE3hq8s8ZvcETHtEuF+3E7XVt0Ig2nvsVQXdghHVcEkIWjy9A0wKfTn97a/PSDYohKIlnP/w==" }, "node_modules/@types/minimatch": { "version": "5.1.2", "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-5.1.2.tgz", "integrity": "sha512-K0VQKziLUWkVKiRVrx4a40iPaxTUefQmjtkQofBkYRcoaaL/8rhwDWww9qWbrgicNOgnpIsMxyNIUM4+n6dUIA==" }, - "node_modules/@types/mkdirp": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/@types/mkdirp/-/mkdirp-0.5.2.tgz", - "integrity": "sha512-U5icWpv7YnZYGsN4/cmh3WD2onMY0aJIiTE6+51TwJCttdHvtCYmkBNOobHlXwrJRL0nkH9jH4kD+1FAdMN4Tg==", - "dev": true, - "dependencies": { - "@types/node": "*" - } - }, "node_modules/@types/node": { - "version": "18.11.18", - "resolved": "https://registry.npmjs.org/@types/node/-/node-18.11.18.tgz", - "integrity": "sha512-DHQpWGjyQKSHj3ebjFI/wRKcqQcdR+MoFBygntYOZytCqNfkd2ZC4ARDJ2DQqhjH5p85Nnd3jhUJIXrszFX/JA==" - }, - "node_modules/@types/node-fetch": { - "version": "2.6.3", - "resolved": "https://registry.npmjs.org/@types/node-fetch/-/node-fetch-2.6.3.tgz", - "integrity": "sha512-ETTL1mOEdq/sxUtgtOhKjyB2Irra4cjxksvcMUR5Zr4n+PxVhsCD9WS46oPbHL3et9Zde7CNRr+WUNlcHvsX+w==", - "dev": true, + "version": "20.10.8", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.10.8.tgz", + "integrity": "sha512-f8nQs3cLxbAFc00vEU59yf9UyGUftkPaLGfvbVOIDdx2i1b8epBqj2aNGyP19fiyXWvlmZ7qC1XLjAzw/OKIeA==", "dependencies": { - "@types/node": "*", - "form-data": "^3.0.0" + "undici-types": "~5.26.4" } }, "node_modules/@types/pbkdf2": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/@types/pbkdf2/-/pbkdf2-3.1.0.tgz", - "integrity": "sha512-Cf63Rv7jCQ0LaL8tNXmEyqTHuIJxRdlS5vMh1mj5voN4+QFhVZnlZruezqpWYDiJ8UTzhP0VmeLXCmBk66YrMQ==", + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/@types/pbkdf2/-/pbkdf2-3.1.2.tgz", + "integrity": "sha512-uRwJqmiXmh9++aSu1VNEn3iIxWOhd8AHXNSdlaLfdAAdSTY9jYVeGWnzejM3dvrkbqE3/hyQkQQ29IFATEGlew==", "dependencies": { "@types/node": "*" } }, - "node_modules/@types/prettier": { - "version": "2.7.2", - "resolved": "https://registry.npmjs.org/@types/prettier/-/prettier-2.7.2.tgz", - "integrity": "sha512-KufADq8uQqo1pYKVIYzfKbJfBAc0sOeXqGbFaSpv8MRmC/zXgowNZmFcbngndGk922QDmOASEXUZCaY48gs4cg==", - "dev": true - }, "node_modules/@types/qs": { - "version": "6.9.7", - "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.7.tgz", - "integrity": "sha512-FGa1F62FT09qcrueBA6qYTrJPVDzah9a+493+o2PCXsesWHIn27G98TsSMs3WPNbZIEj4+VJf6saSFpvD+3Zsw==" + "version": "6.9.11", + "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.11.tgz", + "integrity": "sha512-oGk0gmhnEJK4Yyk+oI7EfXsLayXatCWPHary1MtcmbAifkobT9cM9yutG/hZKIseOU0MqbIwQ/u2nn/Gb+ltuQ==" }, "node_modules/@types/range-parser": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.4.tgz", - "integrity": "sha512-EEhsLsD6UsDM1yFhAvy0Cjr6VwmpMWqFBCb9w07wVugF7w9nfajxLuVmngTIpgS6svCnm6Vaw+MZhoDCKnOfsw==" + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.7.tgz", + "integrity": "sha512-hKormJbkJqzQGhziax5PItDUTMAM9uE2XXQmM37dyd4hVM+5aVl7oVxMVUiVQn2oCQFN/LKCZdvSM0pFRqbSmQ==" }, "node_modules/@types/readable-stream": { "version": "2.3.15", @@ -6994,77 +4814,40 @@ "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" }, "node_modules/@types/responselike": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@types/responselike/-/responselike-1.0.0.tgz", - "integrity": "sha512-85Y2BjiufFzaMIlvJDvTTB8Fxl2xfLo4HgmHzVBz08w4wDePCTjYw66PdrolO0kzli3yam/YCgRufyo1DdQVTA==", + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@types/responselike/-/responselike-1.0.3.tgz", + "integrity": "sha512-H/+L+UkTV33uf49PH5pCAUBVPNj2nDBXTN+qS1dOwyyg24l3CcicicCA7ca+HMvJBZcFgl5r8e+RR6elsb4Lyw==", "dependencies": { "@types/node": "*" } }, "node_modules/@types/secp256k1": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/@types/secp256k1/-/secp256k1-4.0.3.tgz", - "integrity": "sha512-Da66lEIFeIz9ltsdMZcpQvmrmmoqrfju8pm1BH8WbYjZSwUgCwXLb9C+9XYogwBITnbsSaMdVPb2ekf7TV+03w==", + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/@types/secp256k1/-/secp256k1-4.0.6.tgz", + "integrity": "sha512-hHxJU6PAEUn0TP4S/ZOzuTUvJWuZ6eIKeNKb5RBpODvSl6hp1Wrw4s7ATY50rklRCScUDpHzVA/DQdSjJ3UoYQ==", "dependencies": { "@types/node": "*" } }, "node_modules/@types/send": { - "version": "0.17.1", - "resolved": "https://registry.npmjs.org/@types/send/-/send-0.17.1.tgz", - "integrity": "sha512-Cwo8LE/0rnvX7kIIa3QHCkcuF21c05Ayb0ZfxPiv0W8VRiZiNW/WuRupHKpqqGVGf7SUA44QSOUKaEd9lIrd/Q==", + "version": "0.17.4", + "resolved": "https://registry.npmjs.org/@types/send/-/send-0.17.4.tgz", + "integrity": "sha512-x2EM6TJOybec7c52BX0ZspPodMsQUd5L6PRwOunVyVUhXiBSKf3AezDL8Dgvgt5o0UfKNfuA0eMLr2wLT4AiBA==", "dependencies": { "@types/mime": "^1", "@types/node": "*" } }, - "node_modules/@types/send/node_modules/@types/mime": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/@types/mime/-/mime-1.3.2.tgz", - "integrity": "sha512-YATxVxgRqNH6nHEIsvg6k2Boc1JHI9ZbH5iWFFv/MTkchz3b1ieGDa5T0a9RznNdI0KhVbdbWSN+KWWrQZRxTw==" - }, "node_modules/@types/serve-static": { - "version": "1.15.0", - "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.15.0.tgz", - "integrity": "sha512-z5xyF6uh8CbjAu9760KDKsH2FcDxZ2tFCsA4HIMWE6IkiYMXfVoa+4f9KX+FN0ZLsaMw1WNG2ETLA6N+/YA+cg==", + "version": "1.15.5", + "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.15.5.tgz", + "integrity": "sha512-PDRk21MnK70hja/YF8AHfC7yIsiQHn1rcXx7ijCFBX/k+XQJhQT/gw3xekXKJvx+5SXaMMS8oqQy09Mzvz2TuQ==", "dependencies": { + "@types/http-errors": "*", "@types/mime": "*", "@types/node": "*" } }, - "node_modules/@types/sinon": { - "version": "10.0.16", - "resolved": "https://registry.npmjs.org/@types/sinon/-/sinon-10.0.16.tgz", - "integrity": "sha512-j2Du5SYpXZjJVJtXBokASpPRj+e2z+VUhCPHmM6WMfe3dpHu6iVKJMU6AiBcMp/XTAYnEj6Wc1trJUWwZ0QaAQ==", - "dev": true, - "peer": true, - "dependencies": { - "@types/sinonjs__fake-timers": "*" - } - }, - "node_modules/@types/sinon-chai": { - "version": "3.2.9", - "resolved": "https://registry.npmjs.org/@types/sinon-chai/-/sinon-chai-3.2.9.tgz", - "integrity": "sha512-/19t63pFYU0ikrdbXKBWj9PCdnKyTd0Qkz0X91Ta081cYsq90OxYdcWwK/dwEoDa6dtXgj2HJfmzgq+QZTHdmQ==", - "dev": true, - "peer": true, - "dependencies": { - "@types/chai": "*", - "@types/sinon": "*" - } - }, - "node_modules/@types/sinonjs__fake-timers": { - "version": "8.1.2", - "resolved": "https://registry.npmjs.org/@types/sinonjs__fake-timers/-/sinonjs__fake-timers-8.1.2.tgz", - "integrity": "sha512-9GcLXF0/v3t80caGs5p2rRfkB+a8VBGLJZVih6CNFkx8IZ994wiKKLSRs9nuFwk1HevWs/1mnUmkApGrSGsShA==", - "dev": true, - "peer": true - }, - "node_modules/@types/underscore": { - "version": "1.11.4", - "resolved": "https://registry.npmjs.org/@types/underscore/-/underscore-1.11.4.tgz", - "integrity": "sha512-uO4CD2ELOjw8tasUrAhvnn2W4A0ZECOvMjCivJr4gA9pGgjv+qxKWY9GLTMVEK8ej85BxQOocUyE7hImmSQYcg==" - }, "node_modules/@types/web3": { "version": "1.2.2", "resolved": "https://registry.npmjs.org/@types/web3/-/web3-1.2.2.tgz", @@ -7074,26 +4857,18 @@ "web3": "*" } }, - "node_modules/@types/web3-provider-engine": { - "version": "14.0.1", - "resolved": "https://registry.npmjs.org/@types/web3-provider-engine/-/web3-provider-engine-14.0.1.tgz", - "integrity": "sha512-SaAfLJY/40wKFDsNFwaNfwqFSL6kVhTx9JD18qM+Gaw1qdAXLYF/6E7TIqWEdoG4so6fki/zxURP5NsoCePYJw==", - "dependencies": { - "@types/ethereum-protocol": "*" - } - }, "node_modules/@types/ws": { - "version": "7.4.7", - "resolved": "https://registry.npmjs.org/@types/ws/-/ws-7.4.7.tgz", - "integrity": "sha512-JQbbmxZTZehdc2iszGKs5oC3NFnjeay7mtAWrdt7qNtAVK0g19muApzAy4bm9byz79xa2ZnO/BOBC2R8RC5Lww==", + "version": "8.5.3", + "resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.5.3.tgz", + "integrity": "sha512-6YOoWjruKj1uLf3INHH7D3qTXwFfEsg1kf3c0uDdSBJwfa/llkwIjrAGV7j7mVgGNbzTQ3HiHKKDXl6bJPD97w==", "dependencies": { "@types/node": "*" } }, "node_modules/@types/yauzl": { - "version": "2.10.0", - "resolved": "https://registry.npmjs.org/@types/yauzl/-/yauzl-2.10.0.tgz", - "integrity": "sha512-Cn6WYCm0tXv8p6k+A8PvbDG763EDpBoTzHdA+Q/MF6H3sapGjCm9NzoaJncJS9tUKSuCoDs9XHxYYsQDgxR6kw==", + "version": "2.10.3", + "resolved": "https://registry.npmjs.org/@types/yauzl/-/yauzl-2.10.3.tgz", + "integrity": "sha512-oJoftv0LSuaDZE3Le4DbKX+KS9G36NzOeSap90UIK0yMA/NhKJhqlSGtNDORNRaIbQfzjXDrQa0ytJ6mNRGz/Q==", "optional": true, "dependencies": { "@types/node": "*" @@ -7108,9 +4883,9 @@ } }, "node_modules/@uniswap/sdk-core": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/@uniswap/sdk-core/-/sdk-core-3.1.0.tgz", - "integrity": "sha512-YRrp6vYAbYmi3uDXQGkvj2eT8BMpNnUdCFb8GifDG0Ei+ohIpC4RNAB+5/ru3zR2Byhx8VahGrSKuvdd6BVMyA==", + "version": "4.0.10", + "resolved": "https://registry.npmjs.org/@uniswap/sdk-core/-/sdk-core-4.0.10.tgz", + "integrity": "sha512-RiobXJKXvVVb+wfNM09Ik8djOMOuRQGfyRP5pHgUjojicK/7nscZILjZ87DjVCGjXEoD8yTSIps0UAQuz6pJIw==", "dependencies": { "@ethersproject/address": "^5.0.2", "big.js": "^5.2.2", @@ -7132,14 +4907,14 @@ } }, "node_modules/@uniswap/swap-router-contracts": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/@uniswap/swap-router-contracts/-/swap-router-contracts-1.3.0.tgz", - "integrity": "sha512-iKvCuRkHXEe0EMjOf8HFUISTIhlxI57kKFllf3C3PUIE0HmwxrayyoflwAz5u/TRsFGYqJ9IjX2UgzLCsrNa5A==", + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/@uniswap/swap-router-contracts/-/swap-router-contracts-1.3.1.tgz", + "integrity": "sha512-mh/YNbwKb7Mut96VuEtL+Z5bRe0xVIbjjiryn+iMMrK2sFKhR4duk/86mEz0UO5gSx4pQIw9G5276P5heY/7Rg==", "dependencies": { "@openzeppelin/contracts": "3.4.2-solc-0.7", - "@uniswap/v2-core": "1.0.1", - "@uniswap/v3-core": "1.0.0", - "@uniswap/v3-periphery": "1.4.1", + "@uniswap/v2-core": "^1.0.1", + "@uniswap/v3-core": "^1.0.0", + "@uniswap/v3-periphery": "^1.4.4", "dotenv": "^14.2.0", "hardhat-watcher": "^2.1.1" }, @@ -7152,14 +4927,6 @@ "resolved": "https://registry.npmjs.org/@openzeppelin/contracts/-/contracts-3.4.2-solc-0.7.tgz", "integrity": "sha512-W6QmqgkADuFcTLzHL8vVoNBtkwjvQRpYIAom7KiUNoLKghyx3FgH0GBjt8NRvigV1ZmMOBllvE1By1C+bi8WpA==" }, - "node_modules/@uniswap/swap-router-contracts/node_modules/@uniswap/lib": { - "version": "4.0.1-alpha", - "resolved": "https://registry.npmjs.org/@uniswap/lib/-/lib-4.0.1-alpha.tgz", - "integrity": "sha512-f6UIliwBbRsgVLxIaBANF6w09tYqc6Y/qXdsrbEmXHyFA7ILiKrIwRFXe1yOg8M3cksgVsO9N7yuL2DdCGQKBA==", - "engines": { - "node": ">=10" - } - }, "node_modules/@uniswap/swap-router-contracts/node_modules/@uniswap/v2-core": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/@uniswap/v2-core/-/v2-core-1.0.1.tgz", @@ -7168,30 +4935,6 @@ "node": ">=10" } }, - "node_modules/@uniswap/swap-router-contracts/node_modules/@uniswap/v3-core": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@uniswap/v3-core/-/v3-core-1.0.0.tgz", - "integrity": "sha512-kSC4djMGKMHj7sLMYVnn61k9nu+lHjMIxgg9CDQT+s2QYLoA56GbSK9Oxr+qJXzzygbkrmuY6cwgP6cW2JXPFA==", - "engines": { - "node": ">=10" - } - }, - "node_modules/@uniswap/swap-router-contracts/node_modules/@uniswap/v3-periphery": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/@uniswap/v3-periphery/-/v3-periphery-1.4.1.tgz", - "integrity": "sha512-Ab0ZCKOQrQMKIcpBTezTsEhWfQjItd0TtkCG8mPhoQu+wC67nPaf4hYUhM6wGHeFUmDiYY5MpEQuokB0ENvoTg==", - "dependencies": { - "@openzeppelin/contracts": "3.4.2-solc-0.7", - "@uniswap/lib": "^4.0.1-alpha", - "@uniswap/v2-core": "1.0.1", - "@uniswap/v3-core": "1.0.0", - "base64-sol": "1.0.1", - "hardhat-watcher": "^2.1.1" - }, - "engines": { - "node": ">=10" - } - }, "node_modules/@uniswap/swap-router-contracts/node_modules/dotenv": { "version": "14.3.2", "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-14.3.2.tgz", @@ -7229,14 +4972,14 @@ } }, "node_modules/@uniswap/v3-periphery": { - "version": "1.4.3", - "resolved": "https://registry.npmjs.org/@uniswap/v3-periphery/-/v3-periphery-1.4.3.tgz", - "integrity": "sha512-80c+wtVzl5JJT8UQskxVYYG3oZb4pkhY0zDe0ab/RX4+8f9+W5d8wI4BT0wLB0wFQTSnbW+QdBSpkHA/vRyGBA==", + "version": "1.4.4", + "resolved": "https://registry.npmjs.org/@uniswap/v3-periphery/-/v3-periphery-1.4.4.tgz", + "integrity": "sha512-S4+m+wh8HbWSO3DKk4LwUCPZJTpCugIsHrWR86m/OrUyvSqGDTXKFfc2sMuGXCZrD1ZqO3rhQsKgdWg3Hbb2Kw==", "dependencies": { "@openzeppelin/contracts": "3.4.2-solc-0.7", "@uniswap/lib": "^4.0.1-alpha", - "@uniswap/v2-core": "1.0.1", - "@uniswap/v3-core": "1.0.0", + "@uniswap/v2-core": "^1.0.1", + "@uniswap/v3-core": "^1.0.0", "base64-sol": "1.0.1" }, "engines": { @@ -7264,14 +5007,6 @@ "node": ">=10" } }, - "node_modules/@uniswap/v3-periphery/node_modules/@uniswap/v3-core": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@uniswap/v3-core/-/v3-core-1.0.0.tgz", - "integrity": "sha512-kSC4djMGKMHj7sLMYVnn61k9nu+lHjMIxgg9CDQT+s2QYLoA56GbSK9Oxr+qJXzzygbkrmuY6cwgP6cW2JXPFA==", - "engines": { - "node": ">=10" - } - }, "node_modules/@uniswap/v3-sdk": { "version": "3.10.0", "resolved": "https://registry.npmjs.org/@uniswap/v3-sdk/-/v3-sdk-3.10.0.tgz", @@ -7290,30 +5025,6 @@ "node": ">=10" } }, - "node_modules/@uniswap/v3-sdk/node_modules/@uniswap/sdk-core": { - "version": "4.0.7", - "resolved": "https://registry.npmjs.org/@uniswap/sdk-core/-/sdk-core-4.0.7.tgz", - "integrity": "sha512-jscx7KUIWzQatcL5PHY6xy0gEL9IGQcL5h/obxzX9foP2KoNk9cq66Ia8I2Kvpa7zBcPOeW1hU0hJNBq6CzcIQ==", - "dependencies": { - "@ethersproject/address": "^5.0.2", - "big.js": "^5.2.2", - "decimal.js-light": "^2.5.0", - "jsbi": "^3.1.4", - "tiny-invariant": "^1.1.0", - "toformat": "^2.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/@uniswap/v3-sdk/node_modules/big.js": { - "version": "5.2.2", - "resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz", - "integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==", - "engines": { - "node": "*" - } - }, "node_modules/@uniswap/v3-staker": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/@uniswap/v3-staker/-/v3-staker-1.0.0.tgz", @@ -7346,21 +5057,18 @@ "resolved": "https://registry.npmjs.org/@yarnpkg/lockfile/-/lockfile-1.1.0.tgz", "integrity": "sha512-GpSwvyXOcOOlV70vbnzjj4fW5xW/FdUF6nQEt1ENy7m4ZCczi1+/buVUPAqmGfqznsORNFzUMjctTIp8a9tuCQ==" }, - "node_modules/abbrev": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", - "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==" - }, - "node_modules/abort-controller": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/abort-controller/-/abort-controller-3.0.0.tgz", - "integrity": "sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==", - "optional": true, - "dependencies": { - "event-target-shim": "^5.0.0" + "node_modules/abitype": { + "version": "0.7.1", + "resolved": "https://registry.npmjs.org/abitype/-/abitype-0.7.1.tgz", + "integrity": "sha512-VBkRHTDZf9Myaek/dO3yMmOzB/y2s3Zo6nVU7yaw1G+TvCHAjwaJzNGN9yo4K5D8bU/VZXKP1EJpRhFr862PlQ==", + "peerDependencies": { + "typescript": ">=4.9.4", + "zod": "^3 >=3.19.1" }, - "engines": { - "node": ">=6.5" + "peerDependenciesMeta": { + "zod": { + "optional": true + } } }, "node_modules/abortcontroller-polyfill": { @@ -7455,9 +5163,10 @@ } }, "node_modules/aes-js": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/aes-js/-/aes-js-3.0.0.tgz", - "integrity": "sha512-H7wUZRn8WpTq9jocdxQ2c8x2sKo9ZVmzfRE13GiNJXfp7NcKYEdvl3vspKjXox6RIG2VtaRe4JFvxG4rqp2Zuw==" + "version": "4.0.0-beta.5", + "resolved": "https://registry.npmjs.org/aes-js/-/aes-js-4.0.0-beta.5.tgz", + "integrity": "sha512-G965FqalsNyrPqgEGON7nIx1e/OVENSgiEIzyC63haUMuvNnwIgIjMs52hlTCKhkBny7A2ORNlfY9Zu+jmGk1Q==", + "dev": true }, "node_modules/agent-base": { "version": "6.0.2", @@ -7470,17 +5179,6 @@ "node": ">= 6.0.0" } }, - "node_modules/agentkeepalive": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/agentkeepalive/-/agentkeepalive-4.5.0.tgz", - "integrity": "sha512-5GG/5IbQQpC9FpkRGsSvZI5QYeSCzlJHdpBQntCsuTOxhKD8lqKhrleg2Yi7yvMIf82Ycmmqln9U8V9qwEiJew==", - "dependencies": { - "humanize-ms": "^1.2.1" - }, - "engines": { - "node": ">= 8.0.0" - } - }, "node_modules/aggregate-error": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", @@ -7508,49 +5206,10 @@ "url": "https://github.com/sponsors/epoberezkin" } }, - "node_modules/ajv-formats": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ajv-formats/-/ajv-formats-2.1.1.tgz", - "integrity": "sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==", - "optional": true, - "dependencies": { - "ajv": "^8.0.0" - }, - "peerDependencies": { - "ajv": "^8.0.0" - }, - "peerDependenciesMeta": { - "ajv": { - "optional": true - } - } - }, - "node_modules/ajv-formats/node_modules/ajv": { - "version": "8.12.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz", - "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==", - "optional": true, - "dependencies": { - "fast-deep-equal": "^3.1.1", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2", - "uri-js": "^4.2.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "node_modules/ajv-formats/node_modules/json-schema-traverse": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", - "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", - "optional": true - }, "node_modules/amazon-cognito-identity-js": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/amazon-cognito-identity-js/-/amazon-cognito-identity-js-6.2.0.tgz", - "integrity": "sha512-9Fxrp9+MtLdsJvqOwSaE3ll+pneICeuE3pwj2yDkiyGNWuHx97b8bVLR2bOgfDmDJnY0Hq8QoeXtwdM4aaXJjg==", + "version": "6.3.7", + "resolved": "https://registry.npmjs.org/amazon-cognito-identity-js/-/amazon-cognito-identity-js-6.3.7.tgz", + "integrity": "sha512-tSjnM7KyAeOZ7UMah+oOZ6cW4Gf64FFcc7BE2l7MTcp7ekAPrXaCbpcW2xEpH1EiDS4cPcAouHzmCuc2tr72vQ==", "dev": true, "dependencies": { "@aws-crypto/sha256-js": "1.2.2", @@ -7571,6 +5230,12 @@ "isarray": "^1.0.0" } }, + "node_modules/amazon-cognito-identity-js/node_modules/isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", + "dev": true + }, "node_modules/ansi-colors": { "version": "3.2.4", "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-3.2.4.tgz", @@ -7621,15 +5286,10 @@ "resolved": "https://registry.npmjs.org/antlr4ts/-/antlr4ts-0.5.0-alpha.4.tgz", "integrity": "sha512-WPQDt1B74OfPv/IMS2ekXAKkTZIHl88uMetg6q3OTqgFxZ/dxDXI0EWLyZid/1Pe6hTftyg5N7gel5wNAGxXyQ==" }, - "node_modules/any-promise": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/any-promise/-/any-promise-1.3.0.tgz", - "integrity": "sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==" - }, "node_modules/anymatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz", - "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==", + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", + "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", "dependencies": { "normalize-path": "^3.0.0", "picomatch": "^2.0.4" @@ -7638,296 +5298,74 @@ "node": ">= 8" } }, - "node_modules/apollo-datasource": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/apollo-datasource/-/apollo-datasource-3.3.2.tgz", - "integrity": "sha512-L5TiS8E2Hn/Yz7SSnWIVbZw0ZfEIXZCa5VUiVxD9P53JvSrf4aStvsFDlGWPvpIdCR+aly2CfoB79B9/JjKFqg==", - "deprecated": "The `apollo-datasource` package is part of Apollo Server v2 and v3, which are now deprecated (end-of-life October 22nd 2023 and October 22nd 2024, respectively). See https://www.apollographql.com/docs/apollo-server/previous-versions/ for more details.", - "optional": true, - "dependencies": { - "@apollo/utils.keyvaluecache": "^1.0.1", - "apollo-server-env": "^4.2.1" - }, - "engines": { - "node": ">=12.0" - } - }, - "node_modules/apollo-reporting-protobuf": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/apollo-reporting-protobuf/-/apollo-reporting-protobuf-3.4.0.tgz", - "integrity": "sha512-h0u3EbC/9RpihWOmcSsvTW2O6RXVaD/mPEjfrPkxRPTEPWqncsgOoRJw+wih4OqfH3PvTJvoEIf4LwKrUaqWog==", - "deprecated": "The `apollo-reporting-protobuf` package is part of Apollo Server v2 and v3, which are now deprecated (end-of-life October 22nd 2023 and October 22nd 2024, respectively). This package's functionality is now found in the `@apollo/usage-reporting-protobuf` package. See https://www.apollographql.com/docs/apollo-server/previous-versions/ for more details.", - "optional": true, - "dependencies": { - "@apollo/protobufjs": "1.2.6" - } - }, - "node_modules/apollo-reporting-protobuf/node_modules/@apollo/protobufjs": { - "version": "1.2.6", - "resolved": "https://registry.npmjs.org/@apollo/protobufjs/-/protobufjs-1.2.6.tgz", - "integrity": "sha512-Wqo1oSHNUj/jxmsVp4iR3I480p6qdqHikn38lKrFhfzcDJ7lwd7Ck7cHRl4JE81tWNArl77xhnG/OkZhxKBYOw==", - "hasInstallScript": true, - "optional": true, - "dependencies": { - "@protobufjs/aspromise": "^1.1.2", - "@protobufjs/base64": "^1.1.2", - "@protobufjs/codegen": "^2.0.4", - "@protobufjs/eventemitter": "^1.1.0", - "@protobufjs/fetch": "^1.1.0", - "@protobufjs/float": "^1.0.2", - "@protobufjs/inquire": "^1.1.0", - "@protobufjs/path": "^1.1.2", - "@protobufjs/pool": "^1.1.0", - "@protobufjs/utf8": "^1.1.0", - "@types/long": "^4.0.0", - "@types/node": "^10.1.0", - "long": "^4.0.0" - }, - "bin": { - "apollo-pbjs": "bin/pbjs", - "apollo-pbts": "bin/pbts" - } - }, - "node_modules/apollo-reporting-protobuf/node_modules/@types/node": { - "version": "10.17.60", - "resolved": "https://registry.npmjs.org/@types/node/-/node-10.17.60.tgz", - "integrity": "sha512-F0KIgDJfy2nA3zMLmWGKxcH2ZVEtCZXHHdOQs2gSaQ27+lNeEfGxzkIw90aXswATX7AZ33tahPbzy6KAfUreVw==", + "node_modules/aproba": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz", + "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==", "optional": true }, - "node_modules/apollo-server": { - "version": "3.12.1", - "resolved": "https://registry.npmjs.org/apollo-server/-/apollo-server-3.12.1.tgz", - "integrity": "sha512-wgxx+J8KPTkhepi4qI9qY1xNoYzJfmvRKVUdFmFCZ3lyPO2j/+oOnAnyEVruAIQU5gquK10B0jdwVyvese9J/g==", - "deprecated": "The `apollo-server` package is part of Apollo Server v2 and v3, which are now deprecated (end-of-life October 22nd 2023 and October 22nd 2024, respectively). This package's functionality is now found in the `@apollo/server` package. See https://www.apollographql.com/docs/apollo-server/previous-versions/ for more details.", - "optional": true, - "dependencies": { - "@types/express": "4.17.14", - "apollo-server-core": "^3.12.1", - "apollo-server-express": "^3.12.1", - "express": "^4.17.1" - }, - "peerDependencies": { - "graphql": "^15.3.0 || ^16.0.0" - } - }, - "node_modules/apollo-server-core": { - "version": "3.12.1", - "resolved": "https://registry.npmjs.org/apollo-server-core/-/apollo-server-core-3.12.1.tgz", - "integrity": "sha512-9SF5WAkkV0FZQ2HVUWI9Jada1U0jg7e8NCN9EklbtvaCeUlOLyXyM+KCWuZ7+dqHxjshbtcwylPHutt3uzoNkw==", - "deprecated": "The `apollo-server-core` package is part of Apollo Server v2 and v3, which are now deprecated (end-of-life October 22nd 2023 and October 22nd 2024, respectively). This package's functionality is now found in the `@apollo/server` package. See https://www.apollographql.com/docs/apollo-server/previous-versions/ for more details.", - "optional": true, - "dependencies": { - "@apollo/utils.keyvaluecache": "^1.0.1", - "@apollo/utils.logger": "^1.0.0", - "@apollo/utils.usagereporting": "^1.0.0", - "@apollographql/apollo-tools": "^0.5.3", - "@apollographql/graphql-playground-html": "1.6.29", - "@graphql-tools/mock": "^8.1.2", - "@graphql-tools/schema": "^8.0.0", - "@josephg/resolvable": "^1.0.0", - "apollo-datasource": "^3.3.2", - "apollo-reporting-protobuf": "^3.4.0", - "apollo-server-env": "^4.2.1", - "apollo-server-errors": "^3.3.1", - "apollo-server-plugin-base": "^3.7.2", - "apollo-server-types": "^3.8.0", - "async-retry": "^1.2.1", - "fast-json-stable-stringify": "^2.1.0", - "graphql-tag": "^2.11.0", - "loglevel": "^1.6.8", - "lru-cache": "^6.0.0", - "node-abort-controller": "^3.0.1", - "sha.js": "^2.4.11", - "uuid": "^9.0.0", - "whatwg-mimetype": "^3.0.0" - }, - "engines": { - "node": ">=12.0" - }, - "peerDependencies": { - "graphql": "^15.3.0 || ^16.0.0" - } - }, - "node_modules/apollo-server-core/node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "node_modules/are-we-there-yet": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-1.1.7.tgz", + "integrity": "sha512-nxwy40TuMiUGqMyRHgCSWZ9FM4VAoRP4xUYSTv5ImRog+h9yISPbVH7H8fASCIzYn9wlEv4zvFL7uKDMCFQm3g==", "optional": true, "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/apollo-server-core/node_modules/uuid": { - "version": "9.0.0", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.0.tgz", - "integrity": "sha512-MXcSTerfPa4uqyzStbRoTgt5XIe3x5+42+q1sDuy3R5MDk66URdLMOZe5aPX/SQd+kuYAh0FdP/pO28IkQyTeg==", - "optional": true, - "bin": { - "uuid": "dist/bin/uuid" + "delegates": "^1.0.0", + "readable-stream": "^2.0.6" } }, - "node_modules/apollo-server-core/node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "node_modules/are-we-there-yet/node_modules/isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", "optional": true }, - "node_modules/apollo-server-env": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/apollo-server-env/-/apollo-server-env-4.2.1.tgz", - "integrity": "sha512-vm/7c7ld+zFMxibzqZ7SSa5tBENc4B0uye9LTfjJwGoQFY5xsUPH5FpO5j0bMUDZ8YYNbrF9SNtzc5Cngcr90g==", - "deprecated": "The `apollo-server-env` package is part of Apollo Server v2 and v3, which are now deprecated (end-of-life October 22nd 2023 and October 22nd 2024, respectively). This package's functionality is now found in the `@apollo/utils.fetcher` package. See https://www.apollographql.com/docs/apollo-server/previous-versions/ for more details.", - "optional": true, - "dependencies": { - "node-fetch": "^2.6.7" - }, - "engines": { - "node": ">=12.0" - } - }, - "node_modules/apollo-server-errors": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/apollo-server-errors/-/apollo-server-errors-3.3.1.tgz", - "integrity": "sha512-xnZJ5QWs6FixHICXHxUfm+ZWqqxrNuPlQ+kj5m6RtEgIpekOPssH/SD9gf2B4HuWV0QozorrygwZnux8POvyPA==", - "deprecated": "The `apollo-server-errors` package is part of Apollo Server v2 and v3, which are now deprecated (end-of-life October 22nd 2023 and October 22nd 2024, respectively). This package's functionality is now found in the `@apollo/server` package. See https://www.apollographql.com/docs/apollo-server/previous-versions/ for more details.", - "optional": true, - "engines": { - "node": ">=12.0" - }, - "peerDependencies": { - "graphql": "^15.3.0 || ^16.0.0" - } - }, - "node_modules/apollo-server-express": { - "version": "3.12.1", - "resolved": "https://registry.npmjs.org/apollo-server-express/-/apollo-server-express-3.12.1.tgz", - "integrity": "sha512-5A9efrhEXqDx08BnORWf0zPYCABENqur47VZZW8osQpSSnMINqzJiV5RMrzz8wIznecRRhEcz+BqLdiexqZdgg==", - "deprecated": "The `apollo-server-express` package is part of Apollo Server v2 and v3, which are now deprecated (end-of-life October 22nd 2023 and October 22nd 2024, respectively). This package's functionality is now found in the `@apollo/server` package. See https://www.apollographql.com/docs/apollo-server/previous-versions/ for more details.", - "optional": true, - "dependencies": { - "@types/accepts": "^1.3.5", - "@types/body-parser": "1.19.2", - "@types/cors": "2.8.12", - "@types/express": "4.17.14", - "@types/express-serve-static-core": "4.17.31", - "accepts": "^1.3.5", - "apollo-server-core": "^3.12.1", - "apollo-server-types": "^3.8.0", - "body-parser": "^1.19.0", - "cors": "^2.8.5", - "parseurl": "^1.3.3" - }, - "engines": { - "node": ">=12.0" - }, - "peerDependencies": { - "express": "^4.17.1", - "graphql": "^15.3.0 || ^16.0.0" - } - }, - "node_modules/apollo-server-express/node_modules/@types/express": { - "version": "4.17.14", - "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.14.tgz", - "integrity": "sha512-TEbt+vaPFQ+xpxFLFssxUDXj5cWCxZJjIcB7Yg0k0GMHGtgtQgpvx/MUQUeAkNbA9AAGrwkAsoeItdTgS7FMyg==", - "optional": true, - "dependencies": { - "@types/body-parser": "*", - "@types/express-serve-static-core": "^4.17.18", - "@types/qs": "*", - "@types/serve-static": "*" - } - }, - "node_modules/apollo-server-express/node_modules/@types/express-serve-static-core": { - "version": "4.17.31", - "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.17.31.tgz", - "integrity": "sha512-DxMhY+NAsTwMMFHBTtJFNp5qiHKJ7TeqOo23zVEM9alT1Ml27Q3xcTH0xwxn7Q0BbMcVEJOs/7aQtUWupUQN3Q==", - "optional": true, - "dependencies": { - "@types/node": "*", - "@types/qs": "*", - "@types/range-parser": "*" - } - }, - "node_modules/apollo-server-plugin-base": { - "version": "3.7.2", - "resolved": "https://registry.npmjs.org/apollo-server-plugin-base/-/apollo-server-plugin-base-3.7.2.tgz", - "integrity": "sha512-wE8dwGDvBOGehSsPTRZ8P/33Jan6/PmL0y0aN/1Z5a5GcbFhDaaJCjK5cav6npbbGL2DPKK0r6MPXi3k3N45aw==", - "deprecated": "The `apollo-server-plugin-base` package is part of Apollo Server v2 and v3, which are now deprecated (end-of-life October 22nd 2023 and October 22nd 2024, respectively). This package's functionality is now found in the `@apollo/server` package. See https://www.apollographql.com/docs/apollo-server/previous-versions/ for more details.", + "node_modules/are-we-there-yet/node_modules/readable-stream": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", + "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", "optional": true, "dependencies": { - "apollo-server-types": "^3.8.0" - }, - "engines": { - "node": ">=12.0" - }, - "peerDependencies": { - "graphql": "^15.3.0 || ^16.0.0" + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" } }, - "node_modules/apollo-server-types": { - "version": "3.8.0", - "resolved": "https://registry.npmjs.org/apollo-server-types/-/apollo-server-types-3.8.0.tgz", - "integrity": "sha512-ZI/8rTE4ww8BHktsVpb91Sdq7Cb71rdSkXELSwdSR0eXu600/sY+1UXhTWdiJvk+Eq5ljqoHLwLbY2+Clq2b9A==", - "deprecated": "The `apollo-server-types` package is part of Apollo Server v2 and v3, which are now deprecated (end-of-life October 22nd 2023 and October 22nd 2024, respectively). This package's functionality is now found in the `@apollo/server` package. See https://www.apollographql.com/docs/apollo-server/previous-versions/ for more details.", - "optional": true, - "dependencies": { - "@apollo/utils.keyvaluecache": "^1.0.1", - "@apollo/utils.logger": "^1.0.0", - "apollo-reporting-protobuf": "^3.4.0", - "apollo-server-env": "^4.2.1" - }, - "engines": { - "node": ">=12.0" - }, - "peerDependencies": { - "graphql": "^15.3.0 || ^16.0.0" - } + "node_modules/are-we-there-yet/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "optional": true }, - "node_modules/apollo-server/node_modules/@types/express": { - "version": "4.17.14", - "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.14.tgz", - "integrity": "sha512-TEbt+vaPFQ+xpxFLFssxUDXj5cWCxZJjIcB7Yg0k0GMHGtgtQgpvx/MUQUeAkNbA9AAGrwkAsoeItdTgS7FMyg==", + "node_modules/are-we-there-yet/node_modules/string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", "optional": true, "dependencies": { - "@types/body-parser": "*", - "@types/express-serve-static-core": "^4.17.18", - "@types/qs": "*", - "@types/serve-static": "*" + "safe-buffer": "~5.1.0" } }, - "node_modules/app-module-path": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/app-module-path/-/app-module-path-2.2.0.tgz", - "integrity": "sha512-gkco+qxENJV+8vFcDiiFhuoSvRXb2a/QPqpSoWhVz829VNJfOTnELbBmPmNKFxf3xdNnw4DWCkzkDaavcX/1YQ==" - }, - "node_modules/arg": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz", - "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==", - "optional": true, - "peer": true - }, "node_modules/argparse": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==" }, - "node_modules/argsarray": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/argsarray/-/argsarray-0.0.1.tgz", - "integrity": "sha512-u96dg2GcAKtpTrBdDoFIM7PjcBA+6rSP0OR94MOReNRyUECL6MtQt5XXmRr4qrftYaef9+l5hcpO5te7sML1Cg==", - "optional": true - }, - "node_modules/array-back": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/array-back/-/array-back-3.1.0.tgz", - "integrity": "sha512-TkuxA4UCOvxuDK6NZYXCalszEzj+TLszyASooky+i742l9TqsOdYCMJJupxRic61hwquNtppB3hgcuq9SVSH1Q==", + "node_modules/array-buffer-byte-length": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.0.tgz", + "integrity": "sha512-LPuwb2P+NrQw3XhxGc36+XSvuBPopovXYTR9Ew++Du9Yb/bx5AzBfrIsBoj0EZUifjQU+sHL21sseZ3jerWO/A==", "dev": true, - "engines": { - "node": ">=6" + "dependencies": { + "call-bind": "^1.0.2", + "is-array-buffer": "^3.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, "node_modules/array-flatten": { @@ -7943,16 +5381,38 @@ "node": ">=0.10.0" } }, - "node_modules/array.prototype.reduce": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/array.prototype.reduce/-/array.prototype.reduce-1.0.4.tgz", - "integrity": "sha512-WnM+AjG/DvLRLo4DDl+r+SvCzYtD2Jd9oeBYMcEaI7t3fFrHY9M53/wdLcTvmZNQ70IU6Htj0emFkZ5TS+lrdw==", + "node_modules/array.prototype.findlast": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/array.prototype.findlast/-/array.prototype.findlast-1.2.3.tgz", + "integrity": "sha512-kcBubumjciBg4JKp5KTKtI7ec7tRefPk88yjkWJwaVKYd9QfTaxcsOxoMNKd7iBr447zCfDV0z1kOF47umv42g==", + "dev": true, "dependencies": { "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.19.2", - "es-array-method-boxes-properly": "^1.0.0", - "is-string": "^1.0.7" + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", + "es-shim-unscopables": "^1.0.0", + "get-intrinsic": "^1.2.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/arraybuffer.prototype.slice": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.2.tgz", + "integrity": "sha512-yMBKppFur/fbHu9/6USUe03bZ4knMYiwFBcyiaXB8Go0qNehwX6inYPzK9U0NeQvGxKthcmHcaR8P5MStSRBAw==", + "dev": true, + "dependencies": { + "array-buffer-byte-length": "^1.0.0", + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", + "get-intrinsic": "^1.2.1", + "is-array-buffer": "^3.0.2", + "is-shared-array-buffer": "^1.0.2" }, "engines": { "node": ">= 0.4" @@ -7974,22 +5434,6 @@ "safer-buffer": "~2.1.0" } }, - "node_modules/asn1.js": { - "version": "5.4.1", - "resolved": "https://registry.npmjs.org/asn1.js/-/asn1.js-5.4.1.tgz", - "integrity": "sha512-+I//4cYPccV8LdmBLiX8CYvf9Sp3vQsrqu2QNXRcrbiWvcx/UdlFiqUJJzxRQxgsZmvhXhn4cSKeSmoFjVdupA==", - "dependencies": { - "bn.js": "^4.0.0", - "inherits": "^2.0.1", - "minimalistic-assert": "^1.0.0", - "safer-buffer": "^2.1.0" - } - }, - "node_modules/asn1.js/node_modules/bn.js": { - "version": "4.12.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==" - }, "node_modules/assert-plus": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", @@ -8015,40 +5459,16 @@ "node": ">=8" } }, - "node_modules/async-eventemitter": { - "version": "0.2.4", - "resolved": "https://registry.npmjs.org/async-eventemitter/-/async-eventemitter-0.2.4.tgz", - "integrity": "sha512-pd20BwL7Yt1zwDFy+8MX8F1+WCT8aQeKj0kQnTrH9WaeRETlRamVhD0JtRPmrV4GfOJ2F9CvdQkZeZhnh2TuHw==", - "dependencies": { - "async": "^2.4.0" - } - }, - "node_modules/async-eventemitter/node_modules/async": { - "version": "2.6.4", - "resolved": "https://registry.npmjs.org/async/-/async-2.6.4.tgz", - "integrity": "sha512-mzo5dfJYwAn29PeiJ0zvwTo04zj8HDJj0Mn8TD7sno7q12prdbnasKJHhkm2c1LgrhlJ0teaea8860oxi51mGA==", - "dependencies": { - "lodash": "^4.17.14" - } - }, "node_modules/async-limiter": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/async-limiter/-/async-limiter-1.0.1.tgz", "integrity": "sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ==" }, - "node_modules/async-mutex": { - "version": "0.2.6", - "resolved": "https://registry.npmjs.org/async-mutex/-/async-mutex-0.2.6.tgz", - "integrity": "sha512-Hs4R+4SPgamu6rSGW8C7cV9gaWUKEHykfzCCvIRuaVv636Ju10ZdeUbvb4TBEW0INuq2DHZqXbK4Nd3yG4RaRw==", - "dependencies": { - "tslib": "^2.0.0" - } - }, "node_modules/async-retry": { "version": "1.3.3", "resolved": "https://registry.npmjs.org/async-retry/-/async-retry-1.3.3.tgz", "integrity": "sha512-wfr/jstw9xNi/0teMHrRW7dsz3Lt5ARhYNZ2ewpadnhaIp5mbALhOAP+EAdsC7t4Z6wqsDVv9+W6gm1Dk9mEyw==", - "devOptional": true, + "dev": true, "dependencies": { "retry": "0.13.1" } @@ -8066,15 +5486,6 @@ "node": ">= 4.0.0" } }, - "node_modules/atomically": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/atomically/-/atomically-1.7.0.tgz", - "integrity": "sha512-Xcz9l0z7y9yQ9rdDaxlmaI4uJHf/T8g9hOEzJcsEqX2SjCj4J20uK7+ldkDHMbpJDK76wF7xEIgxc/vSlsfw5w==", - "optional": true, - "engines": { - "node": ">=10.12.0" - } - }, "node_modules/available-typed-arrays": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz", @@ -8095,72 +5506,18 @@ } }, "node_modules/aws4": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.11.0.tgz", - "integrity": "sha512-xh1Rl34h6Fi1DC2WWKfxUTVqRsNnr6LsKz2+hfwDxQJWmrx8+c7ylaqBMcHfl1U1r2dsifOvKX3LQuLNZ+XSvA==" + "version": "1.12.0", + "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.12.0.tgz", + "integrity": "sha512-NmWvPnx0F1SfrQbYwOi7OeaNGokp9XhzNioJ/CSBs8Qa4vxug81mhJEAVZwxXuBmYB5KDRfMq/F3RR0BIU7sWg==" }, "node_modules/axios": { - "version": "0.21.4", - "resolved": "https://registry.npmjs.org/axios/-/axios-0.21.4.tgz", - "integrity": "sha512-ut5vewkiu8jjGBdqpM44XxjuCjq9LAKeHVmoVfHVzy8eHgxxq8SbAVQNovDA8mVi05kP0Ea/n/UzcSHcTJQfNg==", - "dev": true, - "dependencies": { - "follow-redirects": "^1.14.0" - } - }, - "node_modules/babel-plugin-polyfill-corejs2": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.3.3.tgz", - "integrity": "sha512-8hOdmFYFSZhqg2C/JgLUQ+t52o5nirNwaWM2B9LWteozwIvM14VSwdsCAUET10qT+kmySAlseadmfeeSWFCy+Q==", + "version": "1.6.5", + "resolved": "https://registry.npmjs.org/axios/-/axios-1.6.5.tgz", + "integrity": "sha512-Ii012v05KEVuUoFWmMW/UQv9aRIc3ZwkWDcM+h5Il8izZCtRVpDUfwpoFf7eOtajT3QiGR4yDUx7lPqHJULgbg==", "dependencies": { - "@babel/compat-data": "^7.17.7", - "@babel/helper-define-polyfill-provider": "^0.3.3", - "semver": "^6.1.1" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/babel-plugin-polyfill-corejs2/node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/babel-plugin-polyfill-corejs3": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.6.0.tgz", - "integrity": "sha512-+eHqR6OPcBhJOGgsIar7xoAB1GcSwVUA3XjAd7HJNzOXT4wv6/H7KIdA/Nc60cvUlDbKApmqNvD1B1bzOt4nyA==", - "dependencies": { - "@babel/helper-define-polyfill-provider": "^0.3.3", - "core-js-compat": "^3.25.1" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/babel-plugin-polyfill-regenerator": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.4.1.tgz", - "integrity": "sha512-NtQGmyQDXjQqQ+IzRkBVwEOz9lQ4zxAQZgoAYEtU9dJjnl1Oc98qnN7jcp+bE7O7aYzVpavXE3/VKXNzUbh7aw==", - "dependencies": { - "@babel/helper-define-polyfill-provider": "^0.3.3" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/backoff": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/backoff/-/backoff-2.5.0.tgz", - "integrity": "sha512-wC5ihrnUXmR2douXmXLCe5O3zg3GKIyvRi/hi58a/XyRxVI+3/yM0PYueQOZXPXQ9pxBislYkw+sF9b7C/RuMA==", - "dependencies": { - "precond": "0.2" - }, - "engines": { - "node": ">= 0.6" + "follow-redirects": "^1.15.4", + "form-data": "^4.0.0", + "proxy-from-env": "^1.1.0" } }, "node_modules/balanced-match": { @@ -8238,18 +5595,6 @@ "url": "https://opencollective.com/bigjs" } }, - "node_modules/bigint-buffer": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/bigint-buffer/-/bigint-buffer-1.1.5.tgz", - "integrity": "sha512-trfYco6AoZ+rKhKnxA0hgX0HAbVP/s808/EuDSe2JDzUnCp/xAsli35Orvk67UrTEcwuxZqYZDmfA2RXJgxVvA==", - "hasInstallScript": true, - "dependencies": { - "bindings": "^1.3.0" - }, - "engines": { - "node": ">= 10.0.0" - } - }, "node_modules/bigint-crypto-utils": { "version": "3.3.0", "resolved": "https://registry.npmjs.org/bigint-crypto-utils/-/bigint-crypto-utils-3.3.0.tgz", @@ -8278,32 +5623,16 @@ "version": "1.5.0", "resolved": "https://registry.npmjs.org/bindings/-/bindings-1.5.0.tgz", "integrity": "sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==", + "optional": true, "dependencies": { "file-uri-to-path": "1.0.0" } }, - "node_modules/bip39": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/bip39/-/bip39-3.0.4.tgz", - "integrity": "sha512-YZKQlb752TrUWqHWj7XAwCSjYEgGAk+/Aas3V7NyjQeZYsztO8JnQUaCWhcnL4T+jL8nvB8typ2jRPzTlgugNw==", - "dev": true, - "dependencies": { - "@types/node": "11.11.6", - "create-hash": "^1.1.0", - "pbkdf2": "^3.0.9", - "randombytes": "^2.0.1" - } - }, - "node_modules/bip39/node_modules/@types/node": { - "version": "11.11.6", - "resolved": "https://registry.npmjs.org/@types/node/-/node-11.11.6.tgz", - "integrity": "sha512-Exw4yUWMBXM3X+8oqzJNRqZSwUAaS4+7NdvHqQuFi/d+synz++xmX3QIf+BFqneW8N31R8Ky+sikfZUXq07ggQ==", - "dev": true - }, "node_modules/bl": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", + "optional": true, "dependencies": { "buffer": "^5.5.0", "inherits": "^2.0.4", @@ -8328,6 +5657,7 @@ "url": "https://feross.org/support" } ], + "optional": true, "dependencies": { "base64-js": "^1.3.1", "ieee754": "^1.1.13" @@ -8348,24 +5678,13 @@ "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.2.1.tgz", "integrity": "sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ==" }, - "node_modules/bnc-sdk": { - "version": "4.6.7", - "resolved": "https://registry.npmjs.org/bnc-sdk/-/bnc-sdk-4.6.7.tgz", - "integrity": "sha512-jIQ6cmeRBgvH/YDLuYRr2+kxDGcAAi0SOvjlO5nQ5cWdbslw+ASWftd1HmxiVLNCiwEH5bSc/t8a0agZ5njTUQ==", - "dependencies": { - "crypto-es": "^1.2.2", - "nanoid": "^3.3.1", - "rxjs": "^6.6.3", - "sturdy-websocket": "^0.1.12" - } - }, "node_modules/body-parser": { - "version": "1.20.1", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.1.tgz", - "integrity": "sha512-jWi7abTbYwajOytWCQc37VulmWiRae5RyTpaCyDcS5/lMdtwSz5lOpDE67srw/HYe35f1z3fDQw+3txg7gNtWw==", + "version": "1.20.2", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.2.tgz", + "integrity": "sha512-ml9pReCu3M61kGlqoTm2umSXTlRTuGTx0bfYj+uIUKKYycG5NtSbeetV3faSU6R7ajOPw0g/J1PvK4qNy7s5bA==", "dependencies": { "bytes": "3.1.2", - "content-type": "~1.0.4", + "content-type": "~1.0.5", "debug": "2.6.9", "depd": "2.0.0", "destroy": "1.2.0", @@ -8373,7 +5692,7 @@ "iconv-lite": "0.4.24", "on-finished": "2.4.1", "qs": "6.11.0", - "raw-body": "2.5.1", + "raw-body": "2.5.2", "type-is": "~1.6.18", "unpipe": "1.0.0" }, @@ -8395,21 +5714,24 @@ "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" }, + "node_modules/body-parser/node_modules/qs": { + "version": "6.11.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz", + "integrity": "sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==", + "dependencies": { + "side-channel": "^1.0.4" + }, + "engines": { + "node": ">=0.6" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/boolbase": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", - "integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==", - "devOptional": true - }, - "node_modules/borsh": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/borsh/-/borsh-0.7.0.tgz", - "integrity": "sha512-CLCsZGIBCFnPtkNnieW/a8wmreDmfUtjU2m9yHrzPXIlNbqVs0AQrSatSG6vdNYUqdc83tkQi2eHfF98ubzQLA==", - "dependencies": { - "bn.js": "^5.2.0", - "bs58": "^4.0.0", - "text-encoding-utf-8": "^1.0.2" - } + "integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==" }, "node_modules/brace-expansion": { "version": "2.0.1", @@ -8464,79 +5786,6 @@ "safe-buffer": "^5.0.1" } }, - "node_modules/browserify-cipher": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/browserify-cipher/-/browserify-cipher-1.0.1.tgz", - "integrity": "sha512-sPhkz0ARKbf4rRQt2hTpAHqn47X3llLkUGn+xEJzLjwY8LRs2p0v7ljvI5EyoRO/mexrNunNECisZs+gw2zz1w==", - "dependencies": { - "browserify-aes": "^1.0.4", - "browserify-des": "^1.0.0", - "evp_bytestokey": "^1.0.0" - } - }, - "node_modules/browserify-des": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/browserify-des/-/browserify-des-1.0.2.tgz", - "integrity": "sha512-BioO1xf3hFwz4kc6iBhI3ieDFompMhrMlnDFC4/0/vd5MokpuAc3R+LYbwTA9A5Yc9pq9UYPqffKpW2ObuwX5A==", - "dependencies": { - "cipher-base": "^1.0.1", - "des.js": "^1.0.0", - "inherits": "^2.0.1", - "safe-buffer": "^5.1.2" - } - }, - "node_modules/browserify-rsa": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/browserify-rsa/-/browserify-rsa-4.1.0.tgz", - "integrity": "sha512-AdEER0Hkspgno2aR97SAf6vi0y0k8NuOpGnVH3O99rcA5Q6sh8QxcngtHuJ6uXwnfAXNM4Gn1Gb7/MV1+Ymbog==", - "dependencies": { - "bn.js": "^5.0.0", - "randombytes": "^2.0.1" - } - }, - "node_modules/browserify-sign": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/browserify-sign/-/browserify-sign-4.2.1.tgz", - "integrity": "sha512-/vrA5fguVAKKAVTNJjgSm1tRQDHUU6DbwO9IROu/0WAzC8PKhucDSh18J0RMvVeHAn5puMd+QHC2erPRNf8lmg==", - "dependencies": { - "bn.js": "^5.1.1", - "browserify-rsa": "^4.0.1", - "create-hash": "^1.2.0", - "create-hmac": "^1.1.7", - "elliptic": "^6.5.3", - "inherits": "^2.0.4", - "parse-asn1": "^5.1.5", - "readable-stream": "^3.6.0", - "safe-buffer": "^5.2.0" - } - }, - "node_modules/browserslist": { - "version": "4.21.4", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.4.tgz", - "integrity": "sha512-CBHJJdDmgjl3daYjN5Cp5kbTf1mUhZoS+beLklHIvkOWscs83YAhLlF3Wsh/lciQYAcbBJgTOD44VtG31ZM4Hw==", - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/browserslist" - } - ], - "dependencies": { - "caniuse-lite": "^1.0.30001400", - "electron-to-chromium": "^1.4.251", - "node-releases": "^2.0.6", - "update-browserslist-db": "^1.0.9" - }, - "bin": { - "browserslist": "cli.js" - }, - "engines": { - "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" - } - }, "node_modules/bs58": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/bs58/-/bs58-4.0.1.tgz", @@ -8555,17 +5804,6 @@ "safe-buffer": "^5.1.2" } }, - "node_modules/btoa": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/btoa/-/btoa-1.2.1.tgz", - "integrity": "sha512-SB4/MIGlsiVkMcHmT+pSmIPoNDoHg+7cMzmt3Uxt628MTz2487DKSqK/fuhFBrkuqrYv5UCEnACpF4dTFNKc/g==", - "bin": { - "btoa": "bin/btoa.js" - }, - "engines": { - "node": ">= 0.4.0" - } - }, "node_modules/buffer": { "version": "6.0.3", "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz", @@ -8589,33 +5827,15 @@ "ieee754": "^1.2.1" } }, - "node_modules/buffer-alloc": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/buffer-alloc/-/buffer-alloc-1.2.0.tgz", - "integrity": "sha512-CFsHQgjtW1UChdXgbyJGtnm+O/uLQeZdtbDo8mfUgYXCHSM1wgrVxXm6bSyrUuErEb+4sYVGCzASBRot7zyrow==", - "dependencies": { - "buffer-alloc-unsafe": "^1.1.0", - "buffer-fill": "^1.0.0" - } - }, - "node_modules/buffer-alloc-unsafe": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/buffer-alloc-unsafe/-/buffer-alloc-unsafe-1.1.0.tgz", - "integrity": "sha512-TEM2iMIEQdJ2yjPJoSIsldnleVaAk1oW3DBVUykyOLsEsFmEc9kn+SFFPz+gl54KQNxlDnAwCXosOS9Okx2xAg==" - }, "node_modules/buffer-crc32": { "version": "0.2.13", "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz", "integrity": "sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==", + "optional": true, "engines": { "node": "*" } }, - "node_modules/buffer-fill": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/buffer-fill/-/buffer-fill-1.0.0.tgz", - "integrity": "sha512-T7zexNBwiiaCOGDg9xNX9PBmjrubblRkENuptryuI64URkXDFum9il/JGL8Lm8wYfAXpredVXXZz7eMHilimiQ==" - }, "node_modules/buffer-from": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", @@ -8632,9 +5852,9 @@ "integrity": "sha512-571s0T7nZWK6vB67HI5dyUF7wXiNcfaPPPTl6zYCNApANjIvYJTg7hlud/+cJpdAhS7dVzqMLmfhfHR3rAcOjQ==" }, "node_modules/bufferutil": { - "version": "4.0.7", - "resolved": "https://registry.npmjs.org/bufferutil/-/bufferutil-4.0.7.tgz", - "integrity": "sha512-kukuqc39WOHtdxtw4UScxF/WVnMFVSQVKhtx3AjZJzhd0RGZZldcrfSEbVsWWe6KNH253574cq5F+wpv0G9pJw==", + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/bufferutil/-/bufferutil-4.0.8.tgz", + "integrity": "sha512-4T53u4PdgsXqKaIctwF8ifXlRTTmEPJ8iEPWFdGZvcf7sbwYo6FKFEX9eNNAnzFZ7EzJAQ3CJeOtCRA4rDp7Pw==", "hasInstallScript": true, "dependencies": { "node-gyp-build": "^4.3.0" @@ -8644,20 +5864,11 @@ } }, "node_modules/bufio": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/bufio/-/bufio-1.1.3.tgz", - "integrity": "sha512-W0ydG8t+ST+drUpEwl1N+dU9Ije06g8+43CLtvEIzfKo9nPFLXbKqDYE2XSg4w6RugsBcCj7pEU7jOpBC6BqrA==", - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/buildcheck": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/buildcheck/-/buildcheck-0.0.3.tgz", - "integrity": "sha512-pziaA+p/wdVImfcbsZLNF32EiWyujlQLwolMqUQE8xpKNOH7KmZQaY8sXN7DGOEzPAElo9QTaeNRfGnf3iOJbA==", - "optional": true, + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/bufio/-/bufio-1.2.1.tgz", + "integrity": "sha512-9oR3zNdupcg/Ge2sSHQF3GX+kmvL/fTPvD0nd5AGLq8SjUYnTz+SlFjK/GXidndbZtIj+pVKXiWeR9w6e9wKCA==", "engines": { - "node": ">=10.0.0" + "node": ">=14.0.0" } }, "node_modules/bunyan": { @@ -8677,17 +5888,6 @@ "safe-json-stringify": "~1" } }, - "node_modules/busboy": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/busboy/-/busboy-1.6.0.tgz", - "integrity": "sha512-8SFQbg/0hQ9xy3UNTB0YEnsNBbWfhf7RtnzpL7TkBiTBRfrQ9Fxcnz7VJsleJpyp6rVLvXiuORqjlHi5q+PYuA==", - "dependencies": { - "streamsearch": "^1.1.0" - }, - "engines": { - "node": ">=10.16.0" - } - }, "node_modules/bytes": { "version": "3.1.2", "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", @@ -8705,9 +5905,9 @@ } }, "node_modules/cacheable-request": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-7.0.2.tgz", - "integrity": "sha512-pouW8/FmiPQbuGpkXQ9BAPv/Mo5xDGANgSNXzTzJ8DrKGuXOssM4wIQRjfanNRh3Yu5cfYPvcorqbhg2KIJtew==", + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-7.0.4.tgz", + "integrity": "sha512-v+p6ongsrp0yTGbJXjgxPow2+DL93DASP4kXCDKb8/bwRtt9OEF3whggkkDkGNzgcWy2XaF4a8nZglC7uElscg==", "dependencies": { "clone-response": "^1.0.2", "get-stream": "^5.1.0", @@ -8721,20 +5921,6 @@ "node": ">=8" } }, - "node_modules/cacheable-request/node_modules/get-stream": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", - "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", - "dependencies": { - "pump": "^3.0.0" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/cacheable-request/node_modules/lowercase-keys": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-2.0.0.tgz", @@ -8744,12 +5930,13 @@ } }, "node_modules/call-bind": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", - "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.5.tgz", + "integrity": "sha512-C3nQxfFZxFRVoJoGKKI8y3MOEo129NQ+FgQ08iye+Mk4zNZZGdjfs06bVTr+DBSlA66Q2VEcMki/cUCP4SercQ==", "dependencies": { - "function-bind": "^1.1.1", - "get-intrinsic": "^1.0.2" + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.1", + "set-function-length": "^1.1.1" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -8768,26 +5955,10 @@ "version": "4.1.0", "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-4.1.0.tgz", "integrity": "sha512-FxAv7HpHrXbh3aPo4o2qxHay2lkLY3x5Mw3KeE4KQE8ysVfziWeRZDwcjauvwBSGEC/nXUPzZy8zeh4HokqOnw==", - "dev": true, "engines": { "node": ">=4" } }, - "node_modules/caniuse-lite": { - "version": "1.0.30001423", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001423.tgz", - "integrity": "sha512-09iwWGOlifvE1XuHokFMP7eR38a0JnajoyL3/i87c8ZjRWRrdKo1fqjNfugfBD0UDBIOz0U+jtNhJ0EPm1VleQ==", - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/caniuse-lite" - } - ] - }, "node_modules/case": { "version": "1.6.3", "resolved": "https://registry.npmjs.org/case/-/case-1.6.3.tgz", @@ -8810,29 +5981,29 @@ } }, "node_modules/cbor": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/cbor/-/cbor-5.2.0.tgz", - "integrity": "sha512-5IMhi9e1QU76ppa5/ajP1BmMWZ2FHkhAhjeVKQ/EFCgYSEaeVaoGtL7cxJskf9oCCk+XjzaIdc3IuU/dbA/o2A==", + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/cbor/-/cbor-8.1.0.tgz", + "integrity": "sha512-DwGjNW9omn6EwP70aXsn7FQJx5kO12tX0bZkaTjzdVFM6/7nhA4t0EENocKGx6D2Bch9PE2KzCUf5SceBdeijg==", + "dev": true, "dependencies": { - "bignumber.js": "^9.0.1", - "nofilter": "^1.0.4" + "nofilter": "^3.1.0" }, "engines": { - "node": ">=6.0.0" + "node": ">=12.19" } }, "node_modules/chai": { - "version": "4.3.8", - "resolved": "https://registry.npmjs.org/chai/-/chai-4.3.8.tgz", - "integrity": "sha512-vX4YvVVtxlfSZ2VecZgFUTU5qPCYsobVI2O9FmwEXBhDigYGQA6jRXCycIs1yJnnWbZ6/+a2zNIF5DfVCcJBFQ==", + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/chai/-/chai-4.4.0.tgz", + "integrity": "sha512-x9cHNq1uvkCdU+5xTkNh5WtgD4e4yDFCsp9jVc7N7qVeKeftv3gO/ZrviX5d+3ZfxdYnZXZYujjRInu1RogU6A==", "dependencies": { "assertion-error": "^1.1.0", - "check-error": "^1.0.2", - "deep-eql": "^4.1.2", - "get-func-name": "^2.0.0", - "loupe": "^2.3.1", + "check-error": "^1.0.3", + "deep-eql": "^4.1.3", + "get-func-name": "^2.0.2", + "loupe": "^2.3.6", "pathval": "^1.1.1", - "type-detect": "^4.0.5" + "type-detect": "^4.0.8" }, "engines": { "node": ">=4" @@ -8869,18 +6040,6 @@ "node": "*" } }, - "node_modules/chai-as-promised": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/chai-as-promised/-/chai-as-promised-7.1.1.tgz", - "integrity": "sha512-azL6xMoi+uxu6z4rhWQ1jbdUhOMhis2PvscD/xjLqNMkv3BPPp2JyyuTHOrf9BOosGpNQ11v6BKv/g57RXbiaA==", - "peer": true, - "dependencies": { - "check-error": "^1.0.2" - }, - "peerDependencies": { - "chai": ">= 2.1.2 < 5" - } - }, "node_modules/chalk": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", @@ -8930,26 +6089,20 @@ } }, "node_modules/check-error": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/check-error/-/check-error-1.0.2.tgz", - "integrity": "sha512-BrgHpW9NURQgzoNyjfq0Wu6VFO6D7IZEmJNdtgNqpzGG8RuNFHt2jQxWlAs4HMe119chBnv+34syEZtc6IhLtA==", + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/check-error/-/check-error-1.0.3.tgz", + "integrity": "sha512-iKEoDYaRmd1mxM90a2OEfWhjsjPpYPuQ+lMYsoxB126+t8fw7ySEO48nmDg5COTjxDI65/Y2OWpeEHk3ZOe8zg==", + "dependencies": { + "get-func-name": "^2.0.2" + }, "engines": { "node": "*" } }, - "node_modules/checkpoint-store": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/checkpoint-store/-/checkpoint-store-1.1.0.tgz", - "integrity": "sha512-J/NdY2WvIx654cc6LWSq/IYFFCUf75fFTgwzFnmbqyORH4MwgiQCgswLLKBGzmsyTI5V7i5bp/So6sMbDWhedg==", - "dependencies": { - "functional-red-black-tree": "^1.0.1" - } - }, "node_modules/cheerio": { "version": "1.0.0-rc.12", "resolved": "https://registry.npmjs.org/cheerio/-/cheerio-1.0.0-rc.12.tgz", "integrity": "sha512-VqR8m68vM46BNnuZ5NtnGBKIE/DfN0cRIzg9n40EIq9NOv90ayxLBXA8fXC5gquFRGJSTRqBq25Jt2ECLR431Q==", - "devOptional": true, "dependencies": { "cheerio-select": "^2.1.0", "dom-serializer": "^2.0.0", @@ -8970,7 +6123,6 @@ "version": "2.1.0", "resolved": "https://registry.npmjs.org/cheerio-select/-/cheerio-select-2.1.0.tgz", "integrity": "sha512-9v9kG0LvzrlcungtnJtpGNxY+fzECQKhK4EGJX2vByejiMX84MFNQw4UxPJl3bFbTMw+Dfs37XaIkCwTZfLh4g==", - "devOptional": true, "dependencies": { "boolbase": "^1.0.0", "css-select": "^5.1.0", @@ -9099,11 +6251,6 @@ "node": ">=12" } }, - "node_modules/classic-level/node_modules/napi-macros": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/napi-macros/-/napi-macros-2.2.2.tgz", - "integrity": "sha512-hmEVtAGYzVQpCKdbQea4skABsdXW4RUh5t5mJ2zzqowJS2OyXZTU1KhDVFhx+NlWZ4ap9mqR9TcDO3LTTttd+g==" - }, "node_modules/clean-stack": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", @@ -9112,52 +6259,6 @@ "node": ">=6" } }, - "node_modules/cli-color": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/cli-color/-/cli-color-2.0.3.tgz", - "integrity": "sha512-OkoZnxyC4ERN3zLzZaY9Emb7f/MhBOIpePv0Ycok0fJYT+Ouo00UBEIwsVsr0yoow++n5YWlSUgST9GKhNHiRQ==", - "dependencies": { - "d": "^1.0.1", - "es5-ext": "^0.10.61", - "es6-iterator": "^2.0.3", - "memoizee": "^0.4.15", - "timers-ext": "^0.1.7" - }, - "engines": { - "node": ">=0.10" - } - }, - "node_modules/cli-cursor": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz", - "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==", - "optional": true, - "dependencies": { - "restore-cursor": "^3.1.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/cli-table": { - "version": "0.3.11", - "resolved": "https://registry.npmjs.org/cli-table/-/cli-table-0.3.11.tgz", - "integrity": "sha512-IqLQi4lO0nIB4tcdTpN4LCB9FI3uqrJZK7RC515EnhZ6qBaglkIgICb1wjeAqpdoOabm1+SuQtkXIPdYC93jhQ==", - "dependencies": { - "colors": "1.0.3" - }, - "engines": { - "node": ">= 0.2.0" - } - }, - "node_modules/cli-table/node_modules/colors": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/colors/-/colors-1.0.3.tgz", - "integrity": "sha512-pFGrxThWcWQ2MsAz6RtgeWe4NK2kUE1WfsrvvlctdII745EW9I0yflqhe7++M5LEc7bV2c/9/5zc8sFcpL0Drw==", - "engines": { - "node": ">=0.1.90" - } - }, "node_modules/cli-table3": { "version": "0.6.3", "resolved": "https://registry.npmjs.org/cli-table3/-/cli-table3-0.6.3.tgz", @@ -9201,21 +6302,20 @@ "node": ">=8" } }, - "node_modules/clone": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/clone/-/clone-2.1.2.tgz", - "integrity": "sha512-3Pe/CF1Nn94hyhIYpjtiLhdCoEoz0DqQ+988E9gmeEdQZlojxnOb74wctFyuwWQHzqyf9X7C7MG8juUpqBJT8w==", - "engines": { - "node": ">=0.8" - } - }, - "node_modules/clone-buffer": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/clone-buffer/-/clone-buffer-1.0.0.tgz", - "integrity": "sha512-KLLTJWrvwIP+OPfMn0x2PheDEP20RPUcGXj/ERegTgdmPEZylALQldygiqrPPu8P45uNuPs7ckmReLY6v/iA5g==", - "optional": true, + "node_modules/cliui/node_modules/wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, "engines": { - "node": ">= 0.10" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" } }, "node_modules/clone-response": { @@ -9237,12 +6337,6 @@ "node": ">=4" } }, - "node_modules/clones-with-immutable-args": { - "version": "2.0.0", - "resolved": "git+ssh://git@github.com/Saw-mon-and-Natalie/clones-with-immutable-args.git#105efee1b9127ed7f6fedf139e1fc796ce8791f2", - "integrity": "sha512-k3pqgVlL6sTgySZG8eN+spNdokeM/J7kgBVn0xJeZIg+cv1vA1ert1jFDuHX1Vfz1uTTqfZbmWHhvCCdy0VpNA==", - "license": "BSD" - }, "node_modules/code-point-at": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz", @@ -9291,134 +6385,19 @@ "resolved": "https://registry.npmjs.org/command-exists/-/command-exists-1.2.9.tgz", "integrity": "sha512-LTQ/SGc+s0Xc0Fu5WaKnR0YiygZkm9eKFvyS+fRsU7/ZWFF8ykFM6Pc9aCVf1+xasOOZpO3BAVgVrKvsqKHV7w==" }, - "node_modules/command-line-args": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/command-line-args/-/command-line-args-5.2.1.tgz", - "integrity": "sha512-H4UfQhZyakIjC74I9d34fGYDwk3XpSr17QhEd0Q3I9Xq1CETHo4Hcuo87WyWHpAF1aSLjLRf5lD9ZGX2qStUvg==", - "dev": true, - "dependencies": { - "array-back": "^3.1.0", - "find-replace": "^3.0.0", - "lodash.camelcase": "^4.3.0", - "typical": "^4.0.0" - }, - "engines": { - "node": ">=4.0.0" - } - }, - "node_modules/command-line-usage": { - "version": "6.1.3", - "resolved": "https://registry.npmjs.org/command-line-usage/-/command-line-usage-6.1.3.tgz", - "integrity": "sha512-sH5ZSPr+7UStsloltmDh7Ce5fb8XPlHyoPzTpyyMuYCtervL65+ubVZ6Q61cFtFl62UyJlc8/JwERRbAFPUqgw==", - "dev": true, - "dependencies": { - "array-back": "^4.0.2", - "chalk": "^2.4.2", - "table-layout": "^1.0.2", - "typical": "^5.2.0" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/command-line-usage/node_modules/ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "dependencies": { - "color-convert": "^1.9.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/command-line-usage/node_modules/array-back": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/array-back/-/array-back-4.0.2.tgz", - "integrity": "sha512-NbdMezxqf94cnNfWLL7V/im0Ub+Anbb0IoZhvzie8+4HJ4nMQuzHuy49FkGYCJK2yAloZ3meiB6AVMClbrI1vg==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/command-line-usage/node_modules/chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/command-line-usage/node_modules/color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dev": true, - "dependencies": { - "color-name": "1.1.3" - } - }, - "node_modules/command-line-usage/node_modules/color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", - "dev": true - }, - "node_modules/command-line-usage/node_modules/escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", - "dev": true, - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/command-line-usage/node_modules/has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/command-line-usage/node_modules/supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/command-line-usage/node_modules/typical": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/typical/-/typical-5.2.0.tgz", - "integrity": "sha512-dvdQgNDNJo+8B2uBQoqdb11eUCE1JQXhvjC/CZtgvZseVd5TYMXnq0+vuUemXbd/Se29cTaUuPX3YIc2xgbvIg==", - "dev": true, + "node_modules/commander": { + "version": "9.5.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-9.5.0.tgz", + "integrity": "sha512-KRs7WVDKg86PWiuAqhDrAQnTXZKraVcCc6vFdL14qrZ/DcWwuRo7VoiYXalXO7S5GKpqYiVEwCbgFDfxNHKJBQ==", + "optional": true, "engines": { - "node": ">=8" + "node": "^12.20.0 || >=14" } }, - "node_modules/commander": { - "version": "2.20.3", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", - "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==" - }, "node_modules/compare-versions": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/compare-versions/-/compare-versions-5.0.3.tgz", - "integrity": "sha512-4UZlZP8Z99MGEY+Ovg/uJxJuvoXuN4M6B3hKaiackiHrgzQFEe3diJi1mf1PNHbFujM7FvLrK2bpgIaImbtZ1A==", + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/compare-versions/-/compare-versions-6.1.0.tgz", + "integrity": "sha512-LNZQXhqUvqUTotpZ00qLSaify3b4VFD588aRr8MKFw4CMUr98ytzCW5wDH5qx/DEY5kCDXcbcRuCqL0szEf2tg==", "dev": true }, "node_modules/complex.js": { @@ -9452,10 +6431,15 @@ "typedarray": "^0.0.6" } }, + "node_modules/concat-stream/node_modules/isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==" + }, "node_modules/concat-stream/node_modules/readable-stream": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", + "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", "dependencies": { "core-util-is": "~1.0.0", "inherits": "~2.0.3", @@ -9479,50 +6463,10 @@ "safe-buffer": "~5.1.0" } }, - "node_modules/conf": { - "version": "10.2.0", - "resolved": "https://registry.npmjs.org/conf/-/conf-10.2.0.tgz", - "integrity": "sha512-8fLl9F04EJqjSqH+QjITQfJF8BrOVaYr1jewVgSRAEWePfxT0sku4w2hrGQ60BC/TNLGQ2pgxNlTbWQmMPFvXg==", - "optional": true, - "dependencies": { - "ajv": "^8.6.3", - "ajv-formats": "^2.1.1", - "atomically": "^1.7.0", - "debounce-fn": "^4.0.0", - "dot-prop": "^6.0.1", - "env-paths": "^2.2.1", - "json-schema-typed": "^7.0.3", - "onetime": "^5.1.2", - "pkg-up": "^3.1.0", - "semver": "^7.3.5" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/conf/node_modules/ajv": { - "version": "8.12.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz", - "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==", - "optional": true, - "dependencies": { - "fast-deep-equal": "^3.1.1", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2", - "uri-js": "^4.2.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "node_modules/conf/node_modules/json-schema-traverse": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", - "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", + "node_modules/console-control-strings": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz", + "integrity": "sha512-ty/fTekppD2fIwRvnZAVdeOiGd1c7YXEixbgJTNzqcxJWKQnjJ/V1bNEEE6hygpM3WjwHFUVK6HTjWSzV4a8sQ==", "optional": true }, "node_modules/constant-case": { @@ -9556,19 +6500,13 @@ } }, "node_modules/content-type": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz", - "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==", + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz", + "integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==", "engines": { "node": ">= 0.6" } }, - "node_modules/convert-source-map": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz", - "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==", - "peer": true - }, "node_modules/convert-svg-core": { "version": "0.6.4", "resolved": "https://registry.npmjs.org/convert-svg-core/-/convert-svg-core-0.6.4.tgz", @@ -9601,35 +6539,35 @@ "node": "^12.20.0 || >=14" } }, - "node_modules/convert-svg-core/node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "node_modules/convert-svg-core/node_modules/glob": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/glob/-/glob-8.1.0.tgz", + "integrity": "sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==", "optional": true, "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/convert-svg-core/node_modules/commander": { - "version": "9.5.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-9.5.0.tgz", - "integrity": "sha512-KRs7WVDKg86PWiuAqhDrAQnTXZKraVcCc6vFdL14qrZ/DcWwuRo7VoiYXalXO7S5GKpqYiVEwCbgFDfxNHKJBQ==", - "optional": true, + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^5.0.1", + "once": "^1.3.0" + }, "engines": { - "node": "^12.20.0 || >=14" + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, "node_modules/convert-svg-core/node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", + "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", "optional": true, "dependencies": { - "brace-expansion": "^1.1.7" + "brace-expansion": "^2.0.1" }, "engines": { - "node": "*" + "node": ">=10" } }, "node_modules/convert-svg-core/node_modules/rimraf": { @@ -9647,6 +6585,16 @@ "url": "https://github.com/sponsors/isaacs" } }, + "node_modules/convert-svg-core/node_modules/rimraf/node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "optional": true, + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, "node_modules/convert-svg-core/node_modules/rimraf/node_modules/glob": { "version": "7.2.3", "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", @@ -9667,6 +6615,18 @@ "url": "https://github.com/sponsors/isaacs" } }, + "node_modules/convert-svg-core/node_modules/rimraf/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "optional": true, + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, "node_modules/convert-svg-core/node_modules/tmp": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.1.tgz", @@ -9717,34 +6677,6 @@ "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==" }, - "node_modules/cookiejar": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/cookiejar/-/cookiejar-2.1.4.tgz", - "integrity": "sha512-LDx6oHrK+PhzLKJU9j5S7/Y3jM/mUHvD/DeI1WQmJn652iPC5Y4TBzC9l+5OMOXlyTTA+SmVUPm0HQUwpD5Jqw==" - }, - "node_modules/core-js-compat": { - "version": "3.25.5", - "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.25.5.tgz", - "integrity": "sha512-ovcyhs2DEBUIE0MGEKHP4olCUW/XYte3Vroyxuh38rD1wAO4dHohsovUC4eAOuzFxE6b+RXvBU3UZ9o0YhUTkA==", - "dependencies": { - "browserslist": "^4.21.4" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/core-js" - } - }, - "node_modules/core-js-pure": { - "version": "3.30.1", - "resolved": "https://registry.npmjs.org/core-js-pure/-/core-js-pure-3.30.1.tgz", - "integrity": "sha512-nXBEVpmUnNRhz83cHd9JRQC52cTMcuXAmR56+9dSMpRdpeA4I1PX6yjmhd71Eyc/wXNsdBdUDIj1QTIeZpU5Tg==", - "dev": true, - "hasInstallScript": true, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/core-js" - } - }, "node_modules/core-util-is": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", @@ -9762,18 +6694,20 @@ "node": ">= 0.10" } }, - "node_modules/cpu-features": { - "version": "0.0.4", - "resolved": "https://registry.npmjs.org/cpu-features/-/cpu-features-0.0.4.tgz", - "integrity": "sha512-fKiZ/zp1mUwQbnzb9IghXtHtDoTMtNeb8oYGx6kX2SYfhnG0HNdBEBIzB9b5KlXu5DQPhfy3mInbBxFcgwAr3A==", - "hasInstallScript": true, - "optional": true, - "dependencies": { - "buildcheck": "0.0.3", - "nan": "^2.15.0" - }, + "node_modules/crc": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/crc/-/crc-4.3.2.tgz", + "integrity": "sha512-uGDHf4KLLh2zsHa8D8hIQ1H/HtFQhyHrc0uhHBcoKGol/Xnb+MPYfUMw7cvON6ze/GUESTudKayDcJC5HnJv1A==", "engines": { - "node": ">=10.0.0" + "node": ">=12" + }, + "peerDependencies": { + "buffer": ">=6.0.3" + }, + "peerDependenciesMeta": { + "buffer": { + "optional": true + } } }, "node_modules/crc-32": { @@ -9787,20 +6721,6 @@ "node": ">=0.8" } }, - "node_modules/create-ecdh": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/create-ecdh/-/create-ecdh-4.0.4.tgz", - "integrity": "sha512-mf+TCx8wWc9VpuxfP2ht0iSISLZnt0JgWlrOKZiNqyUZWnjIaCIVNQArMHnCZKfEYRg6IM7A+NeJoN8gf/Ws0A==", - "dependencies": { - "bn.js": "^4.1.0", - "elliptic": "^6.5.3" - } - }, - "node_modules/create-ecdh/node_modules/bn.js": { - "version": "4.12.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==" - }, "node_modules/create-hash": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/create-hash/-/create-hash-1.2.0.tgz", @@ -9826,42 +6746,26 @@ "sha.js": "^2.4.8" } }, - "node_modules/create-require": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz", - "integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==", - "optional": true, - "peer": true - }, "node_modules/cross-fetch": { - "version": "3.1.6", - "resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-3.1.6.tgz", - "integrity": "sha512-riRvo06crlE8HiqOwIpQhxwdOk4fOeR7FVM/wXoxchFEqMNUjvbs3bfo4OTgMEMHzppd4DxFBDbyySj8Cv781g==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-4.0.0.tgz", + "integrity": "sha512-e4a5N8lVvuLgAWgnCrLr2PP0YyDOTHa9H/Rj54dirp61qXnNq46m82bRhNqIA5VccJtWBvPTFRV3TtvHUKPB1g==", "dependencies": { - "node-fetch": "^2.6.11" + "node-fetch": "^2.6.12" } }, "node_modules/cross-spawn": { - "version": "6.0.5", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", - "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "peer": true, "dependencies": { - "nice-try": "^1.0.4", - "path-key": "^2.0.1", - "semver": "^5.5.0", - "shebang-command": "^1.2.0", - "which": "^1.2.9" + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" }, "engines": { - "node": ">=4.8" - } - }, - "node_modules/cross-spawn/node_modules/semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "bin": { - "semver": "bin/semver" + "node": ">= 8" } }, "node_modules/crypt": { @@ -9873,9 +6777,9 @@ } }, "node_modules/crypto-addr-codec": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/crypto-addr-codec/-/crypto-addr-codec-0.1.7.tgz", - "integrity": "sha512-X4hzfBzNhy4mAc3UpiXEC/L0jo5E8wAa9unsnA8nNXYzXjCcGk83hfC5avJWCSGT8V91xMnAS9AKMHmjw5+XCg==", + "version": "0.1.8", + "resolved": "https://registry.npmjs.org/crypto-addr-codec/-/crypto-addr-codec-0.1.8.tgz", + "integrity": "sha512-GqAK90iLLgP3FvhNmHbpT3wR6dEdaM8hZyZtLX29SPardh3OA13RFLHDR6sntGCgRWOfiHqW6sIyohpNqOtV/g==", "dependencies": { "base-x": "^3.0.8", "big-integer": "1.6.36", @@ -9886,37 +6790,10 @@ "sha3": "^2.1.1" } }, - "node_modules/crypto-browserify": { - "version": "3.12.0", - "resolved": "https://registry.npmjs.org/crypto-browserify/-/crypto-browserify-3.12.0.tgz", - "integrity": "sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg==", - "dependencies": { - "browserify-cipher": "^1.0.0", - "browserify-sign": "^4.0.0", - "create-ecdh": "^4.0.0", - "create-hash": "^1.1.0", - "create-hmac": "^1.1.0", - "diffie-hellman": "^5.0.0", - "inherits": "^2.0.1", - "pbkdf2": "^3.0.3", - "public-encrypt": "^4.0.0", - "randombytes": "^2.0.0", - "randomfill": "^1.0.3" - }, - "engines": { - "node": "*" - } - }, - "node_modules/crypto-es": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/crypto-es/-/crypto-es-1.2.7.tgz", - "integrity": "sha512-UUqiVJ2gUuZFmbFsKmud3uuLcNP2+Opt+5ysmljycFCyhA0+T16XJmo1ev/t5kMChMqWh7IEvURNCqsg+SjZGQ==" - }, "node_modules/css-select": { "version": "5.1.0", "resolved": "https://registry.npmjs.org/css-select/-/css-select-5.1.0.tgz", "integrity": "sha512-nwoRF1rvRRnnCqqY7updORDsuqKzqYJ28+oSMaJMMgOauh3fvwHqMS7EZpIPqK8GL+g9mKxF1vP/ZjSeNjEVHg==", - "devOptional": true, "dependencies": { "boolbase": "^1.0.0", "css-what": "^6.1.0", @@ -9932,7 +6809,6 @@ "version": "6.1.0", "resolved": "https://registry.npmjs.org/css-what/-/css-what-6.1.0.tgz", "integrity": "sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==", - "devOptional": true, "engines": { "node": ">= 6" }, @@ -9940,12 +6816,6 @@ "url": "https://github.com/sponsors/fb55" } }, - "node_modules/cssfilter": { - "version": "0.0.10", - "resolved": "https://registry.npmjs.org/cssfilter/-/cssfilter-0.0.10.tgz", - "integrity": "sha512-FAaLDaplstoRsDR8XGYH51znUN0UY7nMc6Z9/fvE8EXGwvJE9hu7W2vHwx1+bd6gCYnln9nLbzxFTrcO9YQDZw==", - "optional": true - }, "node_modules/d": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/d/-/d-1.0.1.tgz", @@ -9966,38 +6836,6 @@ "node": ">=0.10" } }, - "node_modules/data-fns": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/data-fns/-/data-fns-1.1.0.tgz", - "integrity": "sha512-/rJzdbnuY3DVgzqsfEfc+tJLuAKYaHzkUxSMRIU3dxKFeWGD/MGhrgAfuwSOmgfJ8enygztp9DeuvoSxauppIg==", - "dependencies": { - "unit-fns": "^0.1.6" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/dataloader": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/dataloader/-/dataloader-2.1.0.tgz", - "integrity": "sha512-qTcEYLen3r7ojZNgVUaRggOI+KM7jrKxXeSHhogh/TWxYMeONEMqY+hmkobiYQozsGIyg9OYVzO4ZIfoB4I0pQ==", - "optional": true - }, - "node_modules/debounce-fn": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/debounce-fn/-/debounce-fn-4.0.0.tgz", - "integrity": "sha512-8pYCQiL9Xdcg0UPSD3d+0KMlOjp+KGU5EPwYddgzQ7DATsg4fuUDjQtsYLmWjnk2obnNHgV3vE2Y4jejSOJVBQ==", - "optional": true, - "dependencies": { - "mimic-fn": "^3.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/debug": { "version": "4.3.4", "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", @@ -10055,174 +6893,16 @@ "npm": ">=2.15" } }, - "node_modules/decompress": { + "node_modules/decompress-response": { "version": "4.2.1", - "resolved": "https://registry.npmjs.org/decompress/-/decompress-4.2.1.tgz", - "integrity": "sha512-e48kc2IjU+2Zw8cTb6VZcJQ3lgVbS4uuB1TfCHbiZIP/haNXm+SVyhu+87jts5/3ROpd82GSVCoNs/z8l4ZOaQ==", - "dependencies": { - "decompress-tar": "^4.0.0", - "decompress-tarbz2": "^4.0.0", - "decompress-targz": "^4.0.0", - "decompress-unzip": "^4.0.1", - "graceful-fs": "^4.1.10", - "make-dir": "^1.0.0", - "pify": "^2.3.0", - "strip-dirs": "^2.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/decompress-tar": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/decompress-tar/-/decompress-tar-4.1.1.tgz", - "integrity": "sha512-JdJMaCrGpB5fESVyxwpCx4Jdj2AagLmv3y58Qy4GE6HMVjWz1FeVQk1Ct4Kye7PftcdOo/7U7UKzYBJgqnGeUQ==", - "dependencies": { - "file-type": "^5.2.0", - "is-stream": "^1.1.0", - "tar-stream": "^1.5.2" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/decompress-tar/node_modules/bl": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/bl/-/bl-1.2.3.tgz", - "integrity": "sha512-pvcNpa0UU69UT341rO6AYy4FVAIkUHuZXRIWbq+zHnsVcRzDDjIAhGuuYoi0d//cwIwtt4pkpKycWEfjdV+vww==", - "dependencies": { - "readable-stream": "^2.3.5", - "safe-buffer": "^5.1.1" - } - }, - "node_modules/decompress-tar/node_modules/readable-stream": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", - "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "node_modules/decompress-tar/node_modules/safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" - }, - "node_modules/decompress-tar/node_modules/string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dependencies": { - "safe-buffer": "~5.1.0" - } - }, - "node_modules/decompress-tar/node_modules/tar-stream": { - "version": "1.6.2", - "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-1.6.2.tgz", - "integrity": "sha512-rzS0heiNf8Xn7/mpdSVVSMAWAoy9bfb1WOTYC78Z0UQKeKa/CWS8FOq0lKGNa8DWKAn9gxjCvMLYc5PGXYlK2A==", - "dependencies": { - "bl": "^1.0.0", - "buffer-alloc": "^1.2.0", - "end-of-stream": "^1.0.0", - "fs-constants": "^1.0.0", - "readable-stream": "^2.3.0", - "to-buffer": "^1.1.1", - "xtend": "^4.0.0" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/decompress-tarbz2": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/decompress-tarbz2/-/decompress-tarbz2-4.1.1.tgz", - "integrity": "sha512-s88xLzf1r81ICXLAVQVzaN6ZmX4A6U4z2nMbOwobxkLoIIfjVMBg7TeguTUXkKeXni795B6y5rnvDw7rxhAq9A==", - "dependencies": { - "decompress-tar": "^4.1.0", - "file-type": "^6.1.0", - "is-stream": "^1.1.0", - "seek-bzip": "^1.0.5", - "unbzip2-stream": "^1.0.9" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/decompress-tarbz2/node_modules/file-type": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/file-type/-/file-type-6.2.0.tgz", - "integrity": "sha512-YPcTBDV+2Tm0VqjybVd32MHdlEGAtuxS3VAYsumFokDSMG+ROT5wawGlnHDoz7bfMcMDt9hxuXvXwoKUx2fkOg==", - "engines": { - "node": ">=4" - } - }, - "node_modules/decompress-targz": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/decompress-targz/-/decompress-targz-4.1.1.tgz", - "integrity": "sha512-4z81Znfr6chWnRDNfFNqLwPvm4db3WuZkqV+UgXQzSngG3CEKdBkw5jrv3axjjL96glyiiKjsxJG3X6WBZwX3w==", - "dependencies": { - "decompress-tar": "^4.1.1", - "file-type": "^5.2.0", - "is-stream": "^1.1.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/decompress-unzip": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/decompress-unzip/-/decompress-unzip-4.0.1.tgz", - "integrity": "sha512-1fqeluvxgnn86MOh66u8FjbtJpAFv5wgCT9Iw8rcBqQcCo5tO8eiJw7NNTrvt9n4CRBVq7CstiS922oPgyGLrw==", - "dependencies": { - "file-type": "^3.8.0", - "get-stream": "^2.2.0", - "pify": "^2.3.0", - "yauzl": "^2.4.2" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/decompress-unzip/node_modules/file-type": { - "version": "3.9.0", - "resolved": "https://registry.npmjs.org/file-type/-/file-type-3.9.0.tgz", - "integrity": "sha512-RLoqTXE8/vPmMuTI88DAzhMYC99I8BWv7zYP4A1puo5HIjEJ5EX48ighy4ZyKMG9EDXxBgW6e++cn7d1xuFghA==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/decompress-unzip/node_modules/get-stream": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-2.3.1.tgz", - "integrity": "sha512-AUGhbbemXxrZJRD5cDvKtQxLuYaIbNtDTK8YqupCI393Q2KSTreEsLUN3ZxAWFGiKTzL6nKuzfcIvieflUX9qA==", + "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-4.2.1.tgz", + "integrity": "sha512-jOSne2qbyE+/r8G1VU+G/82LBs2Fs4LAsTiLSHOCOMZQl2OKZ6i8i4IyHemTe+/yIXOtTcRQMzPcgyhoFlqPkw==", + "optional": true, "dependencies": { - "object-assign": "^4.0.1", - "pinkie-promise": "^2.0.0" + "mimic-response": "^2.0.0" }, "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/decompress-unzip/node_modules/pify": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", - "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/decompress/node_modules/pify": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", - "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==", - "engines": { - "node": ">=0.10.0" + "node": ">=8" } }, "node_modules/deep-eql": { @@ -10240,24 +6920,11 @@ "version": "0.6.0", "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==", - "dev": true, + "optional": true, "engines": { "node": ">=4.0.0" } }, - "node_modules/defender-base-client": { - "version": "1.44.0", - "resolved": "https://registry.npmjs.org/defender-base-client/-/defender-base-client-1.44.0.tgz", - "integrity": "sha512-8ZgGA93+FlxNwG9LN1nu/Au5AyCKwAWJGNf0VLiPmh4GX/Nali/7kv72K+OtZgGxTLtKDKfgN4cnhEZwfrc8dg==", - "dev": true, - "dependencies": { - "amazon-cognito-identity-js": "^6.0.1", - "async-retry": "^1.3.3", - "axios": "^0.21.2", - "lodash": "^4.17.19", - "node-fetch": "^2.6.0" - } - }, "node_modules/defer-to-connect": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-2.0.1.tgz", @@ -10327,11 +6994,26 @@ "node": ">=6" } }, + "node_modules/define-data-property": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.1.tgz", + "integrity": "sha512-E7uGkTzkk1d0ByLeSc6ZsFS79Axg+m1P/VsgYsxHgiuc3tFSj+MjMIwe90FC4lOAZzNBdY7kkO2P2wKdsQ1vgQ==", + "dependencies": { + "get-intrinsic": "^1.2.1", + "gopd": "^1.0.1", + "has-property-descriptors": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, "node_modules/define-properties": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.4.tgz", - "integrity": "sha512-uckOqKcfaVvtBdsVkdPv3XjveQJsNQqmhXgRi8uhvWWuPYZCNlzT8qAyblUgNoXdHdjMTzAqeGjAoli8f+bzPA==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.1.tgz", + "integrity": "sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==", + "dev": true, "dependencies": { + "define-data-property": "^1.0.1", "has-property-descriptors": "^1.0.0", "object-keys": "^1.1.1" }, @@ -10342,17 +7024,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/delay": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/delay/-/delay-5.0.0.tgz", - "integrity": "sha512-ReEBKkIfe4ya47wlPYf/gu5ib6yUG0/Aez0JQZQz94kiWtRQvZIQbTiehsnwHvLSWJnQdhVeqYue7Id1dKr0qw==", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/delayed-stream": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", @@ -10361,6 +7032,12 @@ "node": ">=0.4.0" } }, + "node_modules/delegates": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", + "integrity": "sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ==", + "optional": true + }, "node_modules/depd": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", @@ -10369,15 +7046,6 @@ "node": ">= 0.8" } }, - "node_modules/des.js": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/des.js/-/des.js-1.0.1.tgz", - "integrity": "sha512-Q0I4pfFrv2VPd34/vfLrFOoRmlYj3OV50i7fskps1jZWK1kApMWWT9G6RRUeYedLcBDIhnSDaUvJMb3AhUlaEA==", - "dependencies": { - "inherits": "^2.0.1", - "minimalistic-assert": "^1.0.0" - } - }, "node_modules/destroy": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", @@ -10391,11 +7059,22 @@ "version": "5.0.0", "resolved": "https://registry.npmjs.org/detect-indent/-/detect-indent-5.0.0.tgz", "integrity": "sha512-rlpvsxUtM0PQvy9iZe640/IWwWYyBsTApREbA1pHOpmOUIl9MkP/U4z7vTtg4Oaojvqhxt7sdufnT0EzGaR31g==", - "dev": true, "engines": { "node": ">=4" } }, + "node_modules/detect-libc": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-1.0.3.tgz", + "integrity": "sha512-pGjwhsmsp4kL2RTz08wcOlGN83otlqHeD/Z5T8GXZB+/YcpQ/dgo+lbU8ZsGxV0HIvqqxo9l7mqYwyYMD9bKDg==", + "optional": true, + "bin": { + "detect-libc": "bin/detect-libc.js" + }, + "engines": { + "node": ">=0.10" + } + }, "node_modules/devtools-protocol": { "version": "0.0.981744", "resolved": "https://registry.npmjs.org/devtools-protocol/-/devtools-protocol-0.0.981744.tgz", @@ -10410,64 +7089,10 @@ "node": ">=0.3.1" } }, - "node_modules/diffie-hellman": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/diffie-hellman/-/diffie-hellman-5.0.3.tgz", - "integrity": "sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg==", - "dependencies": { - "bn.js": "^4.1.0", - "miller-rabin": "^4.0.0", - "randombytes": "^2.0.0" - } - }, - "node_modules/diffie-hellman/node_modules/bn.js": { - "version": "4.12.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==" - }, - "node_modules/docker-modem": { - "version": "3.0.8", - "resolved": "https://registry.npmjs.org/docker-modem/-/docker-modem-3.0.8.tgz", - "integrity": "sha512-f0ReSURdM3pcKPNS30mxOHSbaFLcknGmQjwSfmbcdOw1XWKXVhukM3NJHhr7NpY9BIyyWQb0EBo3KQvvuU5egQ==", - "dependencies": { - "debug": "^4.1.1", - "readable-stream": "^3.5.0", - "split-ca": "^1.0.1", - "ssh2": "^1.11.0" - }, - "engines": { - "node": ">= 8.0" - } - }, - "node_modules/dockerode": { - "version": "3.3.5", - "resolved": "https://registry.npmjs.org/dockerode/-/dockerode-3.3.5.tgz", - "integrity": "sha512-/0YNa3ZDNeLr/tSckmD69+Gq+qVNhvKfAHNeZJBnp7EOP6RGKV8ORrJHkUn20So5wU+xxT7+1n5u8PjHbfjbSA==", - "dependencies": { - "@balena/dockerignore": "^1.0.2", - "docker-modem": "^3.0.0", - "tar-fs": "~2.0.1" - }, - "engines": { - "node": ">= 8.0" - } - }, - "node_modules/dockerode/node_modules/tar-fs": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-2.0.1.tgz", - "integrity": "sha512-6tzWDMeroL87uF/+lin46k+Q+46rAJ0SyPGz7OW7wTgblI273hsBqk2C1j0/xNadNLKDTUL9BukSjB7cwgmlPA==", - "dependencies": { - "chownr": "^1.1.1", - "mkdirp-classic": "^0.5.2", - "pump": "^3.0.0", - "tar-stream": "^2.0.0" - } - }, "node_modules/dom-serializer": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-2.0.0.tgz", "integrity": "sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==", - "devOptional": true, "dependencies": { "domelementtype": "^2.3.0", "domhandler": "^5.0.2", @@ -10486,7 +7111,6 @@ "version": "2.3.0", "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz", "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==", - "devOptional": true, "funding": [ { "type": "github", @@ -10498,7 +7122,6 @@ "version": "5.0.3", "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-5.0.3.tgz", "integrity": "sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==", - "devOptional": true, "dependencies": { "domelementtype": "^2.3.0" }, @@ -10510,14 +7133,13 @@ } }, "node_modules/domutils": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/domutils/-/domutils-3.0.1.tgz", - "integrity": "sha512-z08c1l761iKhDFtfXO04C7kTdPBLi41zwOZl00WS8b5eiaebNpY00HKbztwBq+e3vyqWNwWF3mP9YLUeqIrF+Q==", - "devOptional": true, + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-3.1.0.tgz", + "integrity": "sha512-H78uMmQtI2AhgDJjWeQmHwJJ2bLPD3GMmO7Zja/ZZh84wkm+4ut+IUnUdRa8uCGX88DiVx1j6FRe1XfxEgjEZA==", "dependencies": { "dom-serializer": "^2.0.0", "domelementtype": "^2.3.0", - "domhandler": "^5.0.1" + "domhandler": "^5.0.3" }, "funding": { "url": "https://github.com/fb55/domutils?sponsor=1" @@ -10531,21 +7153,6 @@ "no-case": "^2.2.0" } }, - "node_modules/dot-prop": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-6.0.1.tgz", - "integrity": "sha512-tE7ztYzXHIeyvc7N+hR3oi7FIbf/NIjVP9hmAt3yMXzrQ072/fpjGLx2GxNxGxUl5V73MEqYzioOMoVhGMJ5cA==", - "optional": true, - "dependencies": { - "is-obj": "^2.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/dotenv": { "version": "16.3.1", "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.3.1.tgz", @@ -10557,12 +7164,6 @@ "url": "https://github.com/motdotla/dotenv?sponsor=1" } }, - "node_modules/double-ended-queue": { - "version": "2.1.0-0", - "resolved": "https://registry.npmjs.org/double-ended-queue/-/double-ended-queue-2.1.0-0.tgz", - "integrity": "sha512-+BNfZ+deCo8hMNpDqDnvT+c0XpJ5cUa6mqYq89bho2Ifze4URTqRkcwR399hWoTrTkbZ/XJYDgP6rc7pRgffEQ==", - "optional": true - }, "node_modules/dtrace-provider": { "version": "0.8.8", "resolved": "https://registry.npmjs.org/dtrace-provider/-/dtrace-provider-0.8.8.tgz", @@ -10576,10 +7177,11 @@ "node": ">=0.10" } }, - "node_modules/duplexer3": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/duplexer3/-/duplexer3-0.1.5.tgz", - "integrity": "sha512-1A8za6ws41LQgv9HrE/66jyC5yuSjQ3L/KOpFtoBilsAK2iA2wuS5rTt1OCzIvtS2V7nVmedsUU+DGRcjBmOYA==" + "node_modules/eastasianwidth": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", + "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==", + "peer": true }, "node_modules/ecc-jsbn": { "version": "0.1.2", @@ -10595,11 +7197,6 @@ "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==" }, - "node_modules/electron-to-chromium": { - "version": "1.4.284", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.284.tgz", - "integrity": "sha512-M8WEXFuKXMYMVr45fo8mq0wUrrJHheiKZf6BArTKk9ZBYCKJEOU5H8cdWgDT+qCVZf7Na4lVUaZsA+h6uA9+PA==" - }, "node_modules/elliptic": { "version": "6.5.4", "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.4.tgz", @@ -10619,15 +7216,6 @@ "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==" }, - "node_modules/emittery": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/emittery/-/emittery-0.4.1.tgz", - "integrity": "sha512-r4eRSeStEGf6M5SKdrQhhLK5bOwOBxQhIE3YSTnZE3GpKiLfnnhE+tPtrJE79+eDJgm39BM6LSoI8SCx4HbwlQ==", - "optional": true, - "engines": { - "node": ">=6" - } - }, "node_modules/emoji-regex": { "version": "8.0.0", "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", @@ -10669,21 +7257,13 @@ "once": "^1.4.0" } }, - "node_modules/end-stream": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/end-stream/-/end-stream-0.1.0.tgz", - "integrity": "sha512-Brl10T8kYnc75IepKizW6Y9liyW8ikz1B7n/xoHrJxoVSSjoqPn30sb7XVFfQERK4QfUMYRGs9dhWwtt2eu6uA==", - "optional": true, - "dependencies": { - "write-stream": "~0.4.3" - } - }, "node_modules/enquirer": { - "version": "2.3.6", - "resolved": "https://registry.npmjs.org/enquirer/-/enquirer-2.3.6.tgz", - "integrity": "sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg==", + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/enquirer/-/enquirer-2.4.1.tgz", + "integrity": "sha512-rRqJg/6gd538VHvR3PSrdRBb/1Vy2YfzHqzvbhGIQpDRKIa4FgV/54b5Q1xYSxOOwKvjXweS26E0Q+nAMwp2pQ==", "dependencies": { - "ansi-colors": "^4.1.1" + "ansi-colors": "^4.1.1", + "strip-ansi": "^6.0.1" }, "engines": { "node": ">=8.6" @@ -10697,11 +7277,29 @@ "node": ">=6" } }, + "node_modules/enquirer/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "engines": { + "node": ">=8" + } + }, + "node_modules/enquirer/node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/entities": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/entities/-/entities-4.4.0.tgz", - "integrity": "sha512-oYp7156SP8LkeGD0GF85ad1X9Ai79WtRsZ2gxJqtBuzH+98YUV6jkHEKlZkMbcrjJjIVJNIDP/3WL9wQkoPbWA==", - "devOptional": true, + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz", + "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==", "engines": { "node": ">=0.12" }, @@ -10737,34 +7335,50 @@ } }, "node_modules/es-abstract": { - "version": "1.20.4", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.20.4.tgz", - "integrity": "sha512-0UtvRN79eMe2L+UNEF1BwRe364sj/DXhQ/k5FmivgoSdpM90b8Jc0mDzKMGo7QS0BVbOP/bTwBKNnDc9rNzaPA==", + "version": "1.22.3", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.22.3.tgz", + "integrity": "sha512-eiiY8HQeYfYH2Con2berK+To6GrK2RxbPawDkGq4UiCQQfZHb6wX9qQqkbpPqaxQFcl8d9QzZqo0tGE0VcrdwA==", + "dev": true, "dependencies": { - "call-bind": "^1.0.2", + "array-buffer-byte-length": "^1.0.0", + "arraybuffer.prototype.slice": "^1.0.2", + "available-typed-arrays": "^1.0.5", + "call-bind": "^1.0.5", + "es-set-tostringtag": "^2.0.1", "es-to-primitive": "^1.2.1", - "function-bind": "^1.1.1", - "function.prototype.name": "^1.1.5", - "get-intrinsic": "^1.1.3", + "function.prototype.name": "^1.1.6", + "get-intrinsic": "^1.2.2", "get-symbol-description": "^1.0.0", - "has": "^1.0.3", + "globalthis": "^1.0.3", + "gopd": "^1.0.1", "has-property-descriptors": "^1.0.0", + "has-proto": "^1.0.1", "has-symbols": "^1.0.3", - "internal-slot": "^1.0.3", + "hasown": "^2.0.0", + "internal-slot": "^1.0.5", + "is-array-buffer": "^3.0.2", "is-callable": "^1.2.7", "is-negative-zero": "^2.0.2", "is-regex": "^1.1.4", "is-shared-array-buffer": "^1.0.2", "is-string": "^1.0.7", + "is-typed-array": "^1.1.12", "is-weakref": "^1.0.2", - "object-inspect": "^1.12.2", + "object-inspect": "^1.13.1", "object-keys": "^1.1.1", "object.assign": "^4.1.4", - "regexp.prototype.flags": "^1.4.3", + "regexp.prototype.flags": "^1.5.1", + "safe-array-concat": "^1.0.1", "safe-regex-test": "^1.0.0", - "string.prototype.trimend": "^1.0.5", - "string.prototype.trimstart": "^1.0.5", - "unbox-primitive": "^1.0.2" + "string.prototype.trim": "^1.2.8", + "string.prototype.trimend": "^1.0.7", + "string.prototype.trimstart": "^1.0.7", + "typed-array-buffer": "^1.0.0", + "typed-array-byte-length": "^1.0.0", + "typed-array-byte-offset": "^1.0.0", + "typed-array-length": "^1.0.4", + "unbox-primitive": "^1.0.2", + "which-typed-array": "^1.1.13" }, "engines": { "node": ">= 0.4" @@ -10773,15 +7387,34 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/es-array-method-boxes-properly": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/es-array-method-boxes-properly/-/es-array-method-boxes-properly-1.0.0.tgz", - "integrity": "sha512-wd6JXUmyHmt8T5a2xreUwKcGPq6f1f+WwIJkijUqiGcJz1qqnZgP6XIK+QyIWU5lT7imeNxUll48bziG+TSYcA==" + "node_modules/es-set-tostringtag": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.0.2.tgz", + "integrity": "sha512-BuDyupZt65P9D2D2vA/zqcI3G5xRsklm5N3xCwuiy+/vKy8i0ifdsQP1sLgO4tZDSCaQUSnmC48khknGMV3D2Q==", + "dev": true, + "dependencies": { + "get-intrinsic": "^1.2.2", + "has-tostringtag": "^1.0.0", + "hasown": "^2.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-shim-unscopables": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/es-shim-unscopables/-/es-shim-unscopables-1.0.2.tgz", + "integrity": "sha512-J3yBRXCzDu4ULnQwxyToo/OjdMx6akgVC7K6few0a7F/0wLtmKKN7I73AH5T2836UuXRqN7Qg+IIUw/+YJksRw==", + "dev": true, + "dependencies": { + "hasown": "^2.0.0" + } }, "node_modules/es-to-primitive": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", + "dev": true, "dependencies": { "is-callable": "^1.1.4", "is-date-object": "^1.0.1", @@ -10823,14 +7456,6 @@ "resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-4.2.8.tgz", "integrity": "sha512-HJDGx5daxeIvxdBxvG2cb9g4tEvwIk3i8+nhX0yGrYmZUzbkdg8QbDevheDB8gd0//uPj4c1EQua8Q+MViT0/w==" }, - "node_modules/es6-promisify": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/es6-promisify/-/es6-promisify-5.0.0.tgz", - "integrity": "sha512-C+d6UdsYDk0lMebHNR4S2NybQMMngAOnOwYBQjTOiv0MkoJMP0Myw2mgpDLBcpfCmRLxyFqYhS/CfOENq4SJhQ==", - "dependencies": { - "es6-promise": "^4.0.3" - } - }, "node_modules/es6-symbol": { "version": "3.1.3", "resolved": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.3.tgz", @@ -10840,17 +7465,6 @@ "ext": "^1.1.2" } }, - "node_modules/es6-weak-map": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/es6-weak-map/-/es6-weak-map-2.0.3.tgz", - "integrity": "sha512-p5um32HOTO1kP+w7PRnB+5lQ43Z6muuMuIMffvDN8ZB4GcnjLBV6zGStpbASIMk4DCAvEaamhe2zhyCb/QXXsA==", - "dependencies": { - "d": "1", - "es5-ext": "^0.10.46", - "es6-iterator": "^2.0.3", - "es6-symbol": "^3.1.1" - } - }, "node_modules/escalade": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", @@ -10908,19 +7522,6 @@ "node": ">= 0.6" } }, - "node_modules/eth-block-tracker": { - "version": "4.4.3", - "resolved": "https://registry.npmjs.org/eth-block-tracker/-/eth-block-tracker-4.4.3.tgz", - "integrity": "sha512-A8tG4Z4iNg4mw5tP1Vung9N9IjgMNqpiMoJ/FouSFwNCGHv2X0mmOYwtQOJzki6XN7r7Tyo01S29p7b224I4jw==", - "dependencies": { - "@babel/plugin-transform-runtime": "^7.5.5", - "@babel/runtime": "^7.5.5", - "eth-query": "^2.1.0", - "json-rpc-random-id": "^1.0.1", - "pify": "^3.0.0", - "safe-event-emitter": "^1.0.1" - } - }, "node_modules/eth-ens-namehash": { "version": "2.0.8", "resolved": "https://registry.npmjs.org/eth-ens-namehash/-/eth-ens-namehash-2.0.8.tgz", @@ -10936,23 +7537,21 @@ "integrity": "sha512-GII20kjaPX0zJ8wzkTbNDYMY7msuZcTWk8S5UOh6806Jq/wz1J8/bnr8uGU0DAUmYDjj2Mr4X1cW8v/GLYnR+g==" }, "node_modules/eth-gas-reporter": { - "version": "0.2.25", - "resolved": "https://registry.npmjs.org/eth-gas-reporter/-/eth-gas-reporter-0.2.25.tgz", - "integrity": "sha512-1fRgyE4xUB8SoqLgN3eDfpDfwEfRxh2Sz1b7wzFbyQA+9TekMmvSjjoRu9SKcSVyK+vLkLIsVbJDsTWjw195OQ==", + "version": "0.2.27", + "resolved": "https://registry.npmjs.org/eth-gas-reporter/-/eth-gas-reporter-0.2.27.tgz", + "integrity": "sha512-femhvoAM7wL0GcI8ozTdxfuBtBFJ9qsyIAsmKVjlWAHUbdnnXHt+lKzz/kmldM5lA9jLuNHGwuIxorNpLbR1Zw==", "dependencies": { - "@ethersproject/abi": "^5.0.0-beta.146", "@solidity-parser/parser": "^0.14.0", + "axios": "^1.5.1", "cli-table3": "^0.5.0", "colors": "1.4.0", "ethereum-cryptography": "^1.0.3", - "ethers": "^4.0.40", + "ethers": "^5.7.2", "fs-readdir-recursive": "^1.1.0", "lodash": "^4.17.14", "markdown-table": "^1.1.3", - "mocha": "^7.1.1", + "mocha": "^10.2.0", "req-cwd": "^2.0.0", - "request": "^2.88.0", - "request-promise-native": "^1.0.5", "sha1": "^1.1.1", "sync-request": "^6.0.0" }, @@ -10965,105 +7564,46 @@ } } }, - "node_modules/eth-gas-reporter/node_modules/ansi-colors": { - "version": "3.2.3", - "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-3.2.3.tgz", - "integrity": "sha512-LEHHyuhlPY3TmuUYMh2oz89lTShfvgbmzaBcxve9t/9Wuy7Dwf4yoAKcND7KFT1HAQfqZ12qtc+DUrBMeKF9nw==", - "engines": { - "node": ">=6" - } - }, - "node_modules/eth-gas-reporter/node_modules/ansi-regex": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.1.tgz", - "integrity": "sha512-ILlv4k/3f6vfQ4OoP2AGvirOktlQ98ZEL1k9FaQjxa3L1abBgbuTDAdPOpvbGncC0BTVQrl+OM8xZGK6tWXt7g==", - "engines": { - "node": ">=6" - } - }, - "node_modules/eth-gas-reporter/node_modules/ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dependencies": { - "color-convert": "^1.9.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/eth-gas-reporter/node_modules/argparse": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", - "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", - "dependencies": { - "sprintf-js": "~1.0.2" - } - }, - "node_modules/eth-gas-reporter/node_modules/bn.js": { - "version": "4.12.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==" - }, - "node_modules/eth-gas-reporter/node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/eth-gas-reporter/node_modules/camelcase": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", - "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", - "engines": { - "node": ">=6" - } - }, - "node_modules/eth-gas-reporter/node_modules/chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "engines": { - "node": ">=4" - } + "node_modules/eth-gas-reporter/node_modules/@noble/hashes": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.2.0.tgz", + "integrity": "sha512-FZfhjEDbT5GRswV3C6uvLPHMiVD6lQBmpoX5+eSiPaMTXte/IKqI5dykDxzZB/WBeK/CDuQRBWarPdi3FNY2zQ==", + "funding": [ + { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } + ] }, - "node_modules/eth-gas-reporter/node_modules/chalk/node_modules/supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "node_modules/eth-gas-reporter/node_modules/@scure/bip32": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/@scure/bip32/-/bip32-1.1.5.tgz", + "integrity": "sha512-XyNh1rB0SkEqd3tXcXMi+Xe1fvg+kUIcoRIEujP1Jgv7DqW2r9lg3Ah0NkFaCs9sTkQAQA8kw7xiRXzENi9Rtw==", + "funding": [ + { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } + ], "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=4" + "@noble/hashes": "~1.2.0", + "@noble/secp256k1": "~1.7.0", + "@scure/base": "~1.1.0" } }, - "node_modules/eth-gas-reporter/node_modules/chokidar": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.3.0.tgz", - "integrity": "sha512-dGmKLDdT3Gdl7fBUe8XK+gAtGmzy5Fn0XkkWQuYxGIgWVPPse2CxFA5mtrlD0TOHaHjEUqkWNyP1XdHoJES/4A==", + "node_modules/eth-gas-reporter/node_modules/@scure/bip39": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@scure/bip39/-/bip39-1.1.1.tgz", + "integrity": "sha512-t+wDck2rVkh65Hmv280fYdVdY25J9YeEUIgn2LG1WM6gxFkGzcksoDiUkWVpVp3Oex9xGC68JU2dSbUfwZ2jPg==", + "funding": [ + { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } + ], "dependencies": { - "anymatch": "~3.1.1", - "braces": "~3.0.2", - "glob-parent": "~5.1.0", - "is-binary-path": "~2.1.0", - "is-glob": "~4.0.1", - "normalize-path": "~3.0.0", - "readdirp": "~3.2.0" - }, - "engines": { - "node": ">= 8.10.0" - }, - "optionalDependencies": { - "fsevents": "~2.1.1" + "@noble/hashes": "~1.2.0", + "@scure/base": "~1.1.0" } }, "node_modules/eth-gas-reporter/node_modules/cli-table3": { @@ -11081,160 +7621,62 @@ "colors": "^1.1.2" } }, - "node_modules/eth-gas-reporter/node_modules/cliui": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-5.0.0.tgz", - "integrity": "sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA==", - "dependencies": { - "string-width": "^3.1.0", - "strip-ansi": "^5.2.0", - "wrap-ansi": "^5.1.0" - } - }, - "node_modules/eth-gas-reporter/node_modules/cliui/node_modules/string-width": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", - "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", - "dependencies": { - "emoji-regex": "^7.0.1", - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^5.1.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/eth-gas-reporter/node_modules/cliui/node_modules/strip-ansi": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", - "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", - "dependencies": { - "ansi-regex": "^4.1.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/eth-gas-reporter/node_modules/color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dependencies": { - "color-name": "1.1.3" - } - }, - "node_modules/eth-gas-reporter/node_modules/color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==" - }, - "node_modules/eth-gas-reporter/node_modules/debug": { - "version": "3.2.6", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", - "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", - "deprecated": "Debug versions >=3.2.0 <3.2.7 || >=4 <4.3.1 have a low-severity ReDos regression when used in a Node.js environment. It is recommended you upgrade to 3.2.7 or 4.3.1. (https://github.com/visionmedia/debug/issues/797)", - "dependencies": { - "ms": "^2.1.1" - } - }, - "node_modules/eth-gas-reporter/node_modules/decamelize": { + "node_modules/eth-gas-reporter/node_modules/ethereum-cryptography": { "version": "1.2.0", - "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", - "integrity": "sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/eth-gas-reporter/node_modules/diff": { - "version": "3.5.0", - "resolved": "https://registry.npmjs.org/diff/-/diff-3.5.0.tgz", - "integrity": "sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA==", - "engines": { - "node": ">=0.3.1" - } - }, - "node_modules/eth-gas-reporter/node_modules/emoji-regex": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", - "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==" - }, - "node_modules/eth-gas-reporter/node_modules/escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/eth-gas-reporter/node_modules/ethers": { - "version": "4.0.49", - "resolved": "https://registry.npmjs.org/ethers/-/ethers-4.0.49.tgz", - "integrity": "sha512-kPltTvWiyu+OktYy1IStSO16i2e7cS9D9OxZ81q2UUaiNPVrm/RTcbxamCXF9VUSKzJIdJV68EAIhTEVBalRWg==", - "dependencies": { - "aes-js": "3.0.0", - "bn.js": "^4.11.9", - "elliptic": "6.5.4", - "hash.js": "1.1.3", - "js-sha3": "0.5.7", - "scrypt-js": "2.0.4", - "setimmediate": "1.0.4", - "uuid": "2.0.1", - "xmlhttprequest": "1.8.0" - } - }, - "node_modules/eth-gas-reporter/node_modules/find-up": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", - "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", - "dependencies": { - "locate-path": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/eth-gas-reporter/node_modules/flat": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/flat/-/flat-4.1.1.tgz", - "integrity": "sha512-FmTtBsHskrU6FJ2VxCnsDb84wu9zhmO3cUX2kGFb5tuwhfXxGciiT0oRY+cck35QmG+NmGh5eLz6lLCpWTqwpA==", - "dependencies": { - "is-buffer": "~2.0.3" - }, - "bin": { - "flat": "cli.js" - } - }, - "node_modules/eth-gas-reporter/node_modules/glob": { - "version": "7.1.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.3.tgz", - "integrity": "sha512-vcfuiIxogLV4DlGBHIUOwI0IbrJ8HWPc4MU7HzviGeNho/UJDfi6B5p3sHeWIQ0KGIU0Jpxi5ZHxemQfLkkAwQ==", + "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-1.2.0.tgz", + "integrity": "sha512-6yFQC9b5ug6/17CQpCyE3k9eKBMdhyVjzUy1WkiuY/E4vj/SXDBbCw8QEIaXqf0Mf2SnY6RmpDcwlUmBSS0EJw==", "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "engines": { - "node": "*" + "@noble/hashes": "1.2.0", + "@noble/secp256k1": "1.7.1", + "@scure/bip32": "1.1.5", + "@scure/bip39": "1.1.1" } }, - "node_modules/eth-gas-reporter/node_modules/has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", - "engines": { - "node": ">=4" - } - }, - "node_modules/eth-gas-reporter/node_modules/hash.js": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.3.tgz", - "integrity": "sha512-/UETyP0W22QILqS+6HowevwhEFJ3MBJnwTf75Qob9Wz9t0DPuisL8kW8YZMK62dHAKE1c1p+gY1TtOLY+USEHA==", + "node_modules/eth-gas-reporter/node_modules/ethers": { + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/ethers/-/ethers-5.7.2.tgz", + "integrity": "sha512-wswUsmWo1aOK8rR7DIKiWSw9DbLWe6x98Jrn8wcTflTVvaXhAMaB5zGAXy0GYQEQp9iO1iSHWVyARQm11zUtyg==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], "dependencies": { - "inherits": "^2.0.3", - "minimalistic-assert": "^1.0.0" + "@ethersproject/abi": "5.7.0", + "@ethersproject/abstract-provider": "5.7.0", + "@ethersproject/abstract-signer": "5.7.0", + "@ethersproject/address": "5.7.0", + "@ethersproject/base64": "5.7.0", + "@ethersproject/basex": "5.7.0", + "@ethersproject/bignumber": "5.7.0", + "@ethersproject/bytes": "5.7.0", + "@ethersproject/constants": "5.7.0", + "@ethersproject/contracts": "5.7.0", + "@ethersproject/hash": "5.7.0", + "@ethersproject/hdnode": "5.7.0", + "@ethersproject/json-wallets": "5.7.0", + "@ethersproject/keccak256": "5.7.0", + "@ethersproject/logger": "5.7.0", + "@ethersproject/networks": "5.7.1", + "@ethersproject/pbkdf2": "5.7.0", + "@ethersproject/properties": "5.7.0", + "@ethersproject/providers": "5.7.2", + "@ethersproject/random": "5.7.0", + "@ethersproject/rlp": "5.7.0", + "@ethersproject/sha2": "5.7.0", + "@ethersproject/signing-key": "5.7.0", + "@ethersproject/solidity": "5.7.0", + "@ethersproject/strings": "5.7.0", + "@ethersproject/transactions": "5.7.0", + "@ethersproject/units": "5.7.0", + "@ethersproject/wallet": "5.7.0", + "@ethersproject/web": "5.7.1", + "@ethersproject/wordlists": "5.7.0" } }, "node_modules/eth-gas-reporter/node_modules/is-fullwidth-code-point": { @@ -11245,174 +7687,6 @@ "node": ">=4" } }, - "node_modules/eth-gas-reporter/node_modules/js-sha3": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/js-sha3/-/js-sha3-0.5.7.tgz", - "integrity": "sha512-GII20kjaPX0zJ8wzkTbNDYMY7msuZcTWk8S5UOh6806Jq/wz1J8/bnr8uGU0DAUmYDjj2Mr4X1cW8v/GLYnR+g==" - }, - "node_modules/eth-gas-reporter/node_modules/js-yaml": { - "version": "3.13.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.13.1.tgz", - "integrity": "sha512-YfbcO7jXDdyj0DGxYVSlSeQNHbD7XPWvrVWeVUujrQEoZzWJIRrCPoyk6kL6IAjAG2IolMK4T0hNUe0HOUs5Jw==", - "dependencies": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" - }, - "bin": { - "js-yaml": "bin/js-yaml.js" - } - }, - "node_modules/eth-gas-reporter/node_modules/locate-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", - "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", - "dependencies": { - "p-locate": "^3.0.0", - "path-exists": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/eth-gas-reporter/node_modules/log-symbols": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-3.0.0.tgz", - "integrity": "sha512-dSkNGuI7iG3mfvDzUuYZyvk5dD9ocYCYzNU6CYDE6+Xqd+gwme6Z00NS3dUh8mq/73HaEtT7m6W+yUPtU6BZnQ==", - "dependencies": { - "chalk": "^2.4.2" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/eth-gas-reporter/node_modules/minimatch": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", - "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, - "node_modules/eth-gas-reporter/node_modules/mkdirp": { - "version": "0.5.5", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", - "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", - "dependencies": { - "minimist": "^1.2.5" - }, - "bin": { - "mkdirp": "bin/cmd.js" - } - }, - "node_modules/eth-gas-reporter/node_modules/mocha": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/mocha/-/mocha-7.2.0.tgz", - "integrity": "sha512-O9CIypScywTVpNaRrCAgoUnJgozpIofjKUYmJhiCIJMiuYnLI6otcb1/kpW9/n/tJODHGZ7i8aLQoDVsMtOKQQ==", - "dependencies": { - "ansi-colors": "3.2.3", - "browser-stdout": "1.3.1", - "chokidar": "3.3.0", - "debug": "3.2.6", - "diff": "3.5.0", - "escape-string-regexp": "1.0.5", - "find-up": "3.0.0", - "glob": "7.1.3", - "growl": "1.10.5", - "he": "1.2.0", - "js-yaml": "3.13.1", - "log-symbols": "3.0.0", - "minimatch": "3.0.4", - "mkdirp": "0.5.5", - "ms": "2.1.1", - "node-environment-flags": "1.0.6", - "object.assign": "4.1.0", - "strip-json-comments": "2.0.1", - "supports-color": "6.0.0", - "which": "1.3.1", - "wide-align": "1.1.3", - "yargs": "13.3.2", - "yargs-parser": "13.1.2", - "yargs-unparser": "1.6.0" - }, - "bin": { - "_mocha": "bin/_mocha", - "mocha": "bin/mocha" - }, - "engines": { - "node": ">= 8.10.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/mochajs" - } - }, - "node_modules/eth-gas-reporter/node_modules/ms": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", - "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==" - }, - "node_modules/eth-gas-reporter/node_modules/object.assign": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.0.tgz", - "integrity": "sha512-exHJeq6kBKj58mqGyTQ9DFvrZC/eR6OwxzoM9YRoGBqrXYonaFyGiFMuc9VZrXf7DarreEwMpurG3dd+CNyW5w==", - "dependencies": { - "define-properties": "^1.1.2", - "function-bind": "^1.1.1", - "has-symbols": "^1.0.0", - "object-keys": "^1.0.11" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/eth-gas-reporter/node_modules/p-locate": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", - "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", - "dependencies": { - "p-limit": "^2.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/eth-gas-reporter/node_modules/path-exists": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", - "integrity": "sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==", - "engines": { - "node": ">=4" - } - }, - "node_modules/eth-gas-reporter/node_modules/readdirp": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.2.0.tgz", - "integrity": "sha512-crk4Qu3pmXwgxdSgGhgA/eXiJAPQiX4GMOZZMXnqKxHX7TaoL+3gQVo/WeuAiogr07DpnfjIMpXXa+PAIvwPGQ==", - "dependencies": { - "picomatch": "^2.0.4" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/eth-gas-reporter/node_modules/require-main-filename": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz", - "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==" - }, - "node_modules/eth-gas-reporter/node_modules/scrypt-js": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/scrypt-js/-/scrypt-js-2.0.4.tgz", - "integrity": "sha512-4KsaGcPnuhtCZQCxFxN3GVYIhKFPTdLd8PLC552XwbMndtD0cjRFAhDuuydXQ0h08ZfPgzqe6EKHozpuH74iDw==" - }, - "node_modules/eth-gas-reporter/node_modules/setimmediate": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.4.tgz", - "integrity": "sha512-/TjEmXQVEzdod/FFskf3o7oOAsGhHf2j1dZqRFbDzq4F3mvvxflIIi4Hd3bLQE9y/CpwqfSQam5JakI/mi3Pog==" - }, "node_modules/eth-gas-reporter/node_modules/string-width": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", @@ -11425,217 +7699,99 @@ "node": ">=4" } }, - "node_modules/eth-gas-reporter/node_modules/strip-json-comments": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", - "integrity": "sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/eth-gas-reporter/node_modules/supports-color": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.0.0.tgz", - "integrity": "sha512-on9Kwidc1IUQo+bQdhi8+Tijpo0e1SS6RoGo2guUwn5vdaxw8RXOF9Vb2ws+ihWOmh4JnCJOvaziZWP1VABaLg==", - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/eth-gas-reporter/node_modules/uuid": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-2.0.1.tgz", - "integrity": "sha512-nWg9+Oa3qD2CQzHIP4qKUqwNfzKn8P0LtFhotaCTFchsV7ZfDhAybeip/HZVeMIpZi9JgY1E3nUlwaCmZT1sEg==", - "deprecated": "Please upgrade to version 7 or higher. Older versions may use Math.random() in certain circumstances, which is known to be problematic. See https://v8.dev/blog/math-random for details." - }, - "node_modules/eth-gas-reporter/node_modules/which-module": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz", - "integrity": "sha512-B+enWhmw6cjfVC7kS8Pj9pCrKSc5txArRyaYGe088shv/FGWH+0Rjx/xPgtsWfsUtS27FkP697E4DDhgrgoc0Q==" - }, - "node_modules/eth-gas-reporter/node_modules/wide-align": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.3.tgz", - "integrity": "sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA==", - "dependencies": { - "string-width": "^1.0.2 || 2" - } - }, - "node_modules/eth-gas-reporter/node_modules/wrap-ansi": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-5.1.0.tgz", - "integrity": "sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q==", - "dependencies": { - "ansi-styles": "^3.2.0", - "string-width": "^3.0.0", - "strip-ansi": "^5.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/eth-gas-reporter/node_modules/wrap-ansi/node_modules/string-width": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", - "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", - "dependencies": { - "emoji-regex": "^7.0.1", - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^5.1.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/eth-gas-reporter/node_modules/wrap-ansi/node_modules/strip-ansi": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", - "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "node_modules/eth-lib": { + "version": "0.1.29", + "resolved": "https://registry.npmjs.org/eth-lib/-/eth-lib-0.1.29.tgz", + "integrity": "sha512-bfttrr3/7gG4E02HoWTDUcDDslN003OlOoBxk9virpAZQ1ja/jDgwkWB8QfJF7ojuEowrqy+lzp9VcJG7/k5bQ==", "dependencies": { - "ansi-regex": "^4.1.0" - }, - "engines": { - "node": ">=6" + "bn.js": "^4.11.6", + "elliptic": "^6.4.0", + "nano-json-stream-parser": "^0.1.2", + "servify": "^0.1.12", + "ws": "^3.0.0", + "xhr-request-promise": "^0.1.2" } }, - "node_modules/eth-gas-reporter/node_modules/y18n": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.3.tgz", - "integrity": "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==" - }, - "node_modules/eth-gas-reporter/node_modules/yargs": { - "version": "13.3.2", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-13.3.2.tgz", - "integrity": "sha512-AX3Zw5iPruN5ie6xGRIDgqkT+ZhnRlZMLMHAs8tg7nRruy2Nb+i5o9bwghAogtM08q1dpr2LVoS8KSTMYpWXUw==", - "dependencies": { - "cliui": "^5.0.0", - "find-up": "^3.0.0", - "get-caller-file": "^2.0.1", - "require-directory": "^2.1.1", - "require-main-filename": "^2.0.0", - "set-blocking": "^2.0.0", - "string-width": "^3.0.0", - "which-module": "^2.0.0", - "y18n": "^4.0.0", - "yargs-parser": "^13.1.2" - } + "node_modules/eth-lib/node_modules/bn.js": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==" }, - "node_modules/eth-gas-reporter/node_modules/yargs-parser": { - "version": "13.1.2", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-13.1.2.tgz", - "integrity": "sha512-3lbsNRf/j+A4QuSZfDRA7HRSfWrzO0YjqTJd5kjAq37Zep1CEgaYmrH9Q3GwPiB9cHyd1Y1UwggGhJGoxipbzg==", - "dependencies": { - "camelcase": "^5.0.0", - "decamelize": "^1.2.0" - } + "node_modules/eth-lib/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" }, - "node_modules/eth-gas-reporter/node_modules/yargs-unparser": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/yargs-unparser/-/yargs-unparser-1.6.0.tgz", - "integrity": "sha512-W9tKgmSn0DpSatfri0nx52Joq5hVXgeLiqR/5G0sZNDoLZFOr/xjBUDcShCOGNsBnEMNo1KAMBkTej1Hm62HTw==", + "node_modules/eth-lib/node_modules/ws": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/ws/-/ws-3.3.3.tgz", + "integrity": "sha512-nnWLa/NwZSt4KQJu51MYlCcSQ5g7INpOrOMt4XV8j4dqTXdmlUmSHQ8/oLC069ckre0fRsgfvsKwbTdtKLCDkA==", "dependencies": { - "flat": "^4.1.0", - "lodash": "^4.17.15", - "yargs": "^13.3.0" - }, - "engines": { - "node": ">=6" + "async-limiter": "~1.0.0", + "safe-buffer": "~5.1.0", + "ultron": "~1.1.0" } }, - "node_modules/eth-gas-reporter/node_modules/yargs/node_modules/string-width": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", - "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", + "node_modules/ethereum-bloom-filters": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/ethereum-bloom-filters/-/ethereum-bloom-filters-1.0.10.tgz", + "integrity": "sha512-rxJ5OFN3RwjQxDcFP2Z5+Q9ho4eIdEmSc2ht0fCu8Se9nbXjZ7/031uXoUYJ87KHCOdVeiUuwSnoS7hmYAGVHA==", "dependencies": { - "emoji-regex": "^7.0.1", - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^5.1.0" - }, - "engines": { - "node": ">=6" + "js-sha3": "^0.8.0" } }, - "node_modules/eth-gas-reporter/node_modules/yargs/node_modules/strip-ansi": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", - "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "node_modules/ethereum-cryptography": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-2.1.2.tgz", + "integrity": "sha512-Z5Ba0T0ImZ8fqXrJbpHcbpAvIswRte2wGNR/KePnu8GbbvgJ47lMxT/ZZPG6i9Jaht4azPDop4HaM00J0J59ug==", "dependencies": { - "ansi-regex": "^4.1.0" - }, - "engines": { - "node": ">=6" + "@noble/curves": "1.1.0", + "@noble/hashes": "1.3.1", + "@scure/bip32": "1.3.1", + "@scure/bip39": "1.2.1" } }, - "node_modules/eth-json-rpc-filters": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/eth-json-rpc-filters/-/eth-json-rpc-filters-4.2.2.tgz", - "integrity": "sha512-DGtqpLU7bBg63wPMWg1sCpkKCf57dJ+hj/k3zF26anXMzkmtSBDExL8IhUu7LUd34f0Zsce3PYNO2vV2GaTzaw==", + "node_modules/ethereum-ens": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/ethereum-ens/-/ethereum-ens-0.8.0.tgz", + "integrity": "sha512-a8cBTF4AWw1Q1Y37V1LSCS9pRY4Mh3f8vCg5cbXCCEJ3eno1hbI/+Ccv9SZLISYpqQhaglP3Bxb/34lS4Qf7Bg==", "dependencies": { - "@metamask/safe-event-emitter": "^2.0.0", - "async-mutex": "^0.2.6", - "eth-json-rpc-middleware": "^6.0.0", - "eth-query": "^2.1.2", - "json-rpc-engine": "^6.1.0", - "pify": "^5.0.0" + "bluebird": "^3.4.7", + "eth-ens-namehash": "^2.0.0", + "js-sha3": "^0.5.7", + "pako": "^1.0.4", + "underscore": "^1.8.3", + "web3": "^1.0.0-beta.34" } }, - "node_modules/eth-json-rpc-filters/node_modules/pify": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-5.0.0.tgz", - "integrity": "sha512-eW/gHNMlxdSP6dmG6uJip6FXN0EQBwm2clYYd8Wul42Cwu/DK8HEftzsapcNdYe2MfLiIwZqsDk2RDEsTE79hA==", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } + "node_modules/ethereum-ens/node_modules/js-sha3": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/js-sha3/-/js-sha3-0.5.7.tgz", + "integrity": "sha512-GII20kjaPX0zJ8wzkTbNDYMY7msuZcTWk8S5UOh6806Jq/wz1J8/bnr8uGU0DAUmYDjj2Mr4X1cW8v/GLYnR+g==" }, - "node_modules/eth-json-rpc-infura": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/eth-json-rpc-infura/-/eth-json-rpc-infura-5.1.0.tgz", - "integrity": "sha512-THzLye3PHUSGn1EXMhg6WTLW9uim7LQZKeKaeYsS9+wOBcamRiCQVGHa6D2/4P0oS0vSaxsBnU/J6qvn0MPdow==", + "node_modules/ethereumjs-abi": { + "version": "0.6.8", + "resolved": "https://registry.npmjs.org/ethereumjs-abi/-/ethereumjs-abi-0.6.8.tgz", + "integrity": "sha512-Tx0r/iXI6r+lRsdvkFDlut0N08jWMnKRZ6Gkq+Nmw75lZe4e6o3EkSnkaBP5NF6+m5PTGAr9JP43N3LyeoglsA==", "dependencies": { - "eth-json-rpc-middleware": "^6.0.0", - "eth-rpc-errors": "^3.0.0", - "json-rpc-engine": "^5.3.0", - "node-fetch": "^2.6.0" + "bn.js": "^4.11.8", + "ethereumjs-util": "^6.0.0" } }, - "node_modules/eth-json-rpc-infura/node_modules/json-rpc-engine": { - "version": "5.4.0", - "resolved": "https://registry.npmjs.org/json-rpc-engine/-/json-rpc-engine-5.4.0.tgz", - "integrity": "sha512-rAffKbPoNDjuRnXkecTjnsE3xLLrb00rEkdgalINhaYVYIxDwWtvYBr9UFbhTvPB1B2qUOLoFd/cV6f4Q7mh7g==", + "node_modules/ethereumjs-abi/node_modules/@types/bn.js": { + "version": "4.11.6", + "resolved": "https://registry.npmjs.org/@types/bn.js/-/bn.js-4.11.6.tgz", + "integrity": "sha512-pqr857jrp2kPuO9uRjZ3PwnJTjoQy+fcdxvBTvHm6dkmEL9q+hDD/2j/0ELOBPtPnS8LjCX0gI9nbl8lVkadpg==", "dependencies": { - "eth-rpc-errors": "^3.0.0", - "safe-event-emitter": "^1.0.1" - } - }, - "node_modules/eth-json-rpc-middleware": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/eth-json-rpc-middleware/-/eth-json-rpc-middleware-6.0.0.tgz", - "integrity": "sha512-qqBfLU2Uq1Ou15Wox1s+NX05S9OcAEL4JZ04VZox2NS0U+RtCMjSxzXhLFWekdShUPZ+P8ax3zCO2xcPrp6XJQ==", - "dependencies": { - "btoa": "^1.2.1", - "clone": "^2.1.1", - "eth-query": "^2.1.2", - "eth-rpc-errors": "^3.0.0", - "eth-sig-util": "^1.4.2", - "ethereumjs-util": "^5.1.2", - "json-rpc-engine": "^5.3.0", - "json-stable-stringify": "^1.0.1", - "node-fetch": "^2.6.1", - "pify": "^3.0.0", - "safe-event-emitter": "^1.0.1" + "@types/node": "*" } }, - "node_modules/eth-json-rpc-middleware/node_modules/bn.js": { + "node_modules/ethereumjs-abi/node_modules/bn.js": { "version": "4.12.0", "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==" }, - "node_modules/eth-json-rpc-middleware/node_modules/ethereum-cryptography": { + "node_modules/ethereumjs-abi/node_modules/ethereum-cryptography": { "version": "0.1.3", "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-0.1.3.tgz", "integrity": "sha512-w8/4x1SGGzc+tO97TASLja6SLd3fRIK2tLVcV2Gx4IB21hE19atll5Cq9o3d0ZmAYC/8aw0ipieTSiekAea4SQ==", @@ -11657,273 +7813,37 @@ "setimmediate": "^1.0.5" } }, - "node_modules/eth-json-rpc-middleware/node_modules/ethereumjs-util": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-5.2.1.tgz", - "integrity": "sha512-v3kT+7zdyCm1HIqWlLNrHGqHGLpGYIhjeHxQjnDXjLT2FyGJDsd3LWMYUo7pAFRrk86CR3nUJfhC81CCoJNNGQ==", + "node_modules/ethereumjs-abi/node_modules/ethereumjs-util": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-6.2.1.tgz", + "integrity": "sha512-W2Ktez4L01Vexijrm5EB6w7dg4n/TgpoYU4avuT5T3Vmnw/eCRtiBrJfQYS/DCSvDIOLn2k57GcHdeBcgVxAqw==", "dependencies": { + "@types/bn.js": "^4.11.3", "bn.js": "^4.11.0", "create-hash": "^1.1.2", "elliptic": "^6.5.2", "ethereum-cryptography": "^0.1.3", - "ethjs-util": "^0.1.3", - "rlp": "^2.0.0", - "safe-buffer": "^5.1.1" - } - }, - "node_modules/eth-json-rpc-middleware/node_modules/json-rpc-engine": { - "version": "5.4.0", - "resolved": "https://registry.npmjs.org/json-rpc-engine/-/json-rpc-engine-5.4.0.tgz", - "integrity": "sha512-rAffKbPoNDjuRnXkecTjnsE3xLLrb00rEkdgalINhaYVYIxDwWtvYBr9UFbhTvPB1B2qUOLoFd/cV6f4Q7mh7g==", - "dependencies": { - "eth-rpc-errors": "^3.0.0", - "safe-event-emitter": "^1.0.1" - } - }, - "node_modules/eth-lib": { - "version": "0.1.29", - "resolved": "https://registry.npmjs.org/eth-lib/-/eth-lib-0.1.29.tgz", - "integrity": "sha512-bfttrr3/7gG4E02HoWTDUcDDslN003OlOoBxk9virpAZQ1ja/jDgwkWB8QfJF7ojuEowrqy+lzp9VcJG7/k5bQ==", - "dependencies": { - "bn.js": "^4.11.6", - "elliptic": "^6.4.0", - "nano-json-stream-parser": "^0.1.2", - "servify": "^0.1.12", - "ws": "^3.0.0", - "xhr-request-promise": "^0.1.2" + "ethjs-util": "0.1.6", + "rlp": "^2.2.3" } }, - "node_modules/eth-lib/node_modules/bn.js": { - "version": "4.12.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==" - }, - "node_modules/eth-lib/node_modules/safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" - }, - "node_modules/eth-lib/node_modules/ws": { - "version": "3.3.3", - "resolved": "https://registry.npmjs.org/ws/-/ws-3.3.3.tgz", - "integrity": "sha512-nnWLa/NwZSt4KQJu51MYlCcSQ5g7INpOrOMt4XV8j4dqTXdmlUmSHQ8/oLC069ckre0fRsgfvsKwbTdtKLCDkA==", - "dependencies": { - "async-limiter": "~1.0.0", - "safe-buffer": "~5.1.0", - "ultron": "~1.1.0" - } + "node_modules/ethereumjs-common": { + "version": "1.5.2", + "resolved": "https://registry.npmjs.org/ethereumjs-common/-/ethereumjs-common-1.5.2.tgz", + "integrity": "sha512-hTfZjwGX52GS2jcVO6E2sx4YuFnf0Fhp5ylo4pEPhEffNln7vS59Hr5sLnp3/QCazFLluuBZ+FZ6J5HTp0EqCA==", + "deprecated": "New package name format for new versions: @ethereumjs/common. Please update." }, - "node_modules/eth-query": { + "node_modules/ethereumjs-tx": { "version": "2.1.2", - "resolved": "https://registry.npmjs.org/eth-query/-/eth-query-2.1.2.tgz", - "integrity": "sha512-srES0ZcvwkR/wd5OQBRA1bIJMww1skfGS0s8wlwK3/oNP4+wnds60krvu5R1QbpRQjMmpG5OMIWro5s7gvDPsA==", - "dependencies": { - "json-rpc-random-id": "^1.0.0", - "xtend": "^4.0.1" - } - }, - "node_modules/eth-rpc-errors": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/eth-rpc-errors/-/eth-rpc-errors-3.0.0.tgz", - "integrity": "sha512-iPPNHPrLwUlR9xCSYm7HHQjWBasor3+KZfRvwEWxMz3ca0yqnlBeJrnyphkGIXZ4J7AMAaOLmwy4AWhnxOiLxg==", - "dependencies": { - "fast-safe-stringify": "^2.0.6" - } - }, - "node_modules/eth-sig-util": { - "version": "1.4.2", - "resolved": "https://registry.npmjs.org/eth-sig-util/-/eth-sig-util-1.4.2.tgz", - "integrity": "sha512-iNZ576iTOGcfllftB73cPB5AN+XUQAT/T8xzsILsghXC1o8gJUqe3RHlcDqagu+biFpYQ61KQrZZJza8eRSYqw==", - "deprecated": "Deprecated in favor of '@metamask/eth-sig-util'", - "dependencies": { - "ethereumjs-abi": "git+https://github.com/ethereumjs/ethereumjs-abi.git", - "ethereumjs-util": "^5.1.1" - } - }, - "node_modules/eth-sig-util/node_modules/bn.js": { - "version": "4.12.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==" - }, - "node_modules/eth-sig-util/node_modules/ethereum-cryptography": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-0.1.3.tgz", - "integrity": "sha512-w8/4x1SGGzc+tO97TASLja6SLd3fRIK2tLVcV2Gx4IB21hE19atll5Cq9o3d0ZmAYC/8aw0ipieTSiekAea4SQ==", - "dependencies": { - "@types/pbkdf2": "^3.0.0", - "@types/secp256k1": "^4.0.1", - "blakejs": "^1.1.0", - "browserify-aes": "^1.2.0", - "bs58check": "^2.1.2", - "create-hash": "^1.2.0", - "create-hmac": "^1.1.7", - "hash.js": "^1.1.7", - "keccak": "^3.0.0", - "pbkdf2": "^3.0.17", - "randombytes": "^2.1.0", - "safe-buffer": "^5.1.2", - "scrypt-js": "^3.0.0", - "secp256k1": "^4.0.1", - "setimmediate": "^1.0.5" - } - }, - "node_modules/eth-sig-util/node_modules/ethereumjs-util": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-5.2.1.tgz", - "integrity": "sha512-v3kT+7zdyCm1HIqWlLNrHGqHGLpGYIhjeHxQjnDXjLT2FyGJDsd3LWMYUo7pAFRrk86CR3nUJfhC81CCoJNNGQ==", - "dependencies": { - "bn.js": "^4.11.0", - "create-hash": "^1.1.2", - "elliptic": "^6.5.2", - "ethereum-cryptography": "^0.1.3", - "ethjs-util": "^0.1.3", - "rlp": "^2.0.0", - "safe-buffer": "^5.1.1" - } - }, - "node_modules/ethereum-bloom-filters": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/ethereum-bloom-filters/-/ethereum-bloom-filters-1.0.10.tgz", - "integrity": "sha512-rxJ5OFN3RwjQxDcFP2Z5+Q9ho4eIdEmSc2ht0fCu8Se9nbXjZ7/031uXoUYJ87KHCOdVeiUuwSnoS7hmYAGVHA==", - "dependencies": { - "js-sha3": "^0.8.0" - } - }, - "node_modules/ethereum-common": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/ethereum-common/-/ethereum-common-0.2.0.tgz", - "integrity": "sha512-XOnAR/3rntJgbCdGhqdaLIxDLWKLmsZOGhHdBKadEr6gEnJLH52k93Ou+TUdFaPN3hJc3isBZBal3U/XZ15abA==" - }, - "node_modules/ethereum-cryptography": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-1.1.2.tgz", - "integrity": "sha512-XDSJlg4BD+hq9N2FjvotwUET9Tfxpxc3kWGE2AqUG5vcbeunnbImVk3cj6e/xT3phdW21mE8R5IugU4fspQDcQ==", - "dependencies": { - "@noble/hashes": "1.1.2", - "@noble/secp256k1": "1.6.3", - "@scure/bip32": "1.1.0", - "@scure/bip39": "1.1.0" - } - }, - "node_modules/ethereum-cryptography/node_modules/@noble/hashes": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.1.2.tgz", - "integrity": "sha512-KYRCASVTv6aeUi1tsF8/vpyR7zpfs3FUzy2Jqm+MU+LmUKhQ0y2FpfwqkCcxSg2ua4GALJd8k2R76WxwZGbQpA==", - "funding": [ - { - "type": "individual", - "url": "https://paulmillr.com/funding/" - } - ] - }, - "node_modules/ethereum-cryptography/node_modules/@noble/secp256k1": { - "version": "1.6.3", - "resolved": "https://registry.npmjs.org/@noble/secp256k1/-/secp256k1-1.6.3.tgz", - "integrity": "sha512-T04e4iTurVy7I8Sw4+c5OSN9/RkPlo1uKxAomtxQNLq8j1uPAqnsqG1bqvY3Jv7c13gyr6dui0zmh/I3+f/JaQ==", - "funding": [ - { - "type": "individual", - "url": "https://paulmillr.com/funding/" - } - ] - }, - "node_modules/ethereum-ens": { - "version": "0.8.0", - "resolved": "https://registry.npmjs.org/ethereum-ens/-/ethereum-ens-0.8.0.tgz", - "integrity": "sha512-a8cBTF4AWw1Q1Y37V1LSCS9pRY4Mh3f8vCg5cbXCCEJ3eno1hbI/+Ccv9SZLISYpqQhaglP3Bxb/34lS4Qf7Bg==", - "dev": true, - "dependencies": { - "bluebird": "^3.4.7", - "eth-ens-namehash": "^2.0.0", - "js-sha3": "^0.5.7", - "pako": "^1.0.4", - "underscore": "^1.8.3", - "web3": "^1.0.0-beta.34" - } - }, - "node_modules/ethereum-ens/node_modules/js-sha3": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/js-sha3/-/js-sha3-0.5.7.tgz", - "integrity": "sha512-GII20kjaPX0zJ8wzkTbNDYMY7msuZcTWk8S5UOh6806Jq/wz1J8/bnr8uGU0DAUmYDjj2Mr4X1cW8v/GLYnR+g==", - "dev": true - }, - "node_modules/ethereum-protocol": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/ethereum-protocol/-/ethereum-protocol-1.0.1.tgz", - "integrity": "sha512-3KLX1mHuEsBW0dKG+c6EOJS1NBNqdCICvZW9sInmZTt5aY0oxmHVggYRE0lJu1tcnMD1K+AKHdLi6U43Awm1Vg==" - }, - "node_modules/ethereum-waffle": { - "version": "4.0.10", - "resolved": "https://registry.npmjs.org/ethereum-waffle/-/ethereum-waffle-4.0.10.tgz", - "integrity": "sha512-iw9z1otq7qNkGDNcMoeNeLIATF9yKl1M8AIeu42ElfNBplq0e+5PeasQmm8ybY/elkZ1XyRO0JBQxQdVRb8bqQ==", - "dev": true, - "dependencies": { - "@ethereum-waffle/chai": "4.0.10", - "@ethereum-waffle/compiler": "4.0.3", - "@ethereum-waffle/mock-contract": "4.0.4", - "@ethereum-waffle/provider": "4.0.5", - "solc": "0.8.15", - "typechain": "^8.0.0" - }, - "bin": { - "waffle": "bin/waffle" - }, - "engines": { - "node": ">=10.0" - }, - "peerDependencies": { - "ethers": "*" - } - }, - "node_modules/ethereum-waffle/node_modules/commander": { - "version": "8.3.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-8.3.0.tgz", - "integrity": "sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==", - "dev": true, - "engines": { - "node": ">= 12" - } - }, - "node_modules/ethereum-waffle/node_modules/semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "dev": true, - "bin": { - "semver": "bin/semver" - } - }, - "node_modules/ethereum-waffle/node_modules/solc": { - "version": "0.8.15", - "resolved": "https://registry.npmjs.org/solc/-/solc-0.8.15.tgz", - "integrity": "sha512-Riv0GNHNk/SddN/JyEuFKwbcWcEeho15iyupTSHw5Np6WuXA5D8kEHbyzDHi6sqmvLzu2l+8b1YmL8Ytple+8w==", - "dev": true, - "dependencies": { - "command-exists": "^1.2.8", - "commander": "^8.1.0", - "follow-redirects": "^1.12.1", - "js-sha3": "0.8.0", - "memorystream": "^0.3.1", - "semver": "^5.5.0", - "tmp": "0.0.33" - }, - "bin": { - "solcjs": "solc.js" - }, - "engines": { - "node": ">=10.0.0" - } - }, - "node_modules/ethereumjs-abi": { - "version": "0.6.8", - "resolved": "git+ssh://git@github.com/ethereumjs/ethereumjs-abi.git#ee3994657fa7a427238e6ba92a84d0b529bbcde0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/ethereumjs-tx/-/ethereumjs-tx-2.1.2.tgz", + "integrity": "sha512-zZEK1onCeiORb0wyCXUvg94Ve5It/K6GD1K+26KfFKodiBiS6d9lfCXlUKGBBdQ+bv7Day+JK0tj1K+BeNFRAw==", + "deprecated": "New package name format for new versions: @ethereumjs/tx. Please update.", "dependencies": { - "bn.js": "^4.11.8", + "ethereumjs-common": "^1.5.0", "ethereumjs-util": "^6.0.0" } }, - "node_modules/ethereumjs-abi/node_modules/@types/bn.js": { + "node_modules/ethereumjs-tx/node_modules/@types/bn.js": { "version": "4.11.6", "resolved": "https://registry.npmjs.org/@types/bn.js/-/bn.js-4.11.6.tgz", "integrity": "sha512-pqr857jrp2kPuO9uRjZ3PwnJTjoQy+fcdxvBTvHm6dkmEL9q+hDD/2j/0ELOBPtPnS8LjCX0gI9nbl8lVkadpg==", @@ -11931,12 +7851,12 @@ "@types/node": "*" } }, - "node_modules/ethereumjs-abi/node_modules/bn.js": { + "node_modules/ethereumjs-tx/node_modules/bn.js": { "version": "4.12.0", "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==" }, - "node_modules/ethereumjs-abi/node_modules/ethereum-cryptography": { + "node_modules/ethereumjs-tx/node_modules/ethereum-cryptography": { "version": "0.1.3", "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-0.1.3.tgz", "integrity": "sha512-w8/4x1SGGzc+tO97TASLja6SLd3fRIK2tLVcV2Gx4IB21hE19atll5Cq9o3d0ZmAYC/8aw0ipieTSiekAea4SQ==", @@ -11958,7 +7878,7 @@ "setimmediate": "^1.0.5" } }, - "node_modules/ethereumjs-abi/node_modules/ethereumjs-util": { + "node_modules/ethereumjs-tx/node_modules/ethereumjs-util": { "version": "6.2.1", "resolved": "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-6.2.1.tgz", "integrity": "sha512-W2Ktez4L01Vexijrm5EB6w7dg4n/TgpoYU4avuT5T3Vmnw/eCRtiBrJfQYS/DCSvDIOLn2k57GcHdeBcgVxAqw==", @@ -11972,22 +7892,22 @@ "rlp": "^2.2.3" } }, - "node_modules/ethereumjs-account": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/ethereumjs-account/-/ethereumjs-account-2.0.5.tgz", - "integrity": "sha512-bgDojnXGjhMwo6eXQC0bY6UK2liSFUSMwwylOmQvZbSl/D7NXQ3+vrGO46ZeOgjGfxXmgIeVNDIiHw7fNZM4VA==", + "node_modules/ethereumjs-util": { + "version": "7.1.5", + "resolved": "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-7.1.5.tgz", + "integrity": "sha512-SDl5kKrQAudFBUe5OJM9Ac6WmMyYmXX/6sTmLZ3ffG2eY6ZIGBes3pEDxNN6V72WyOw4CPD5RomKdsa8DAAwLg==", "dependencies": { - "ethereumjs-util": "^5.0.0", - "rlp": "^2.0.0", - "safe-buffer": "^5.1.1" + "@types/bn.js": "^5.1.0", + "bn.js": "^5.1.2", + "create-hash": "^1.1.2", + "ethereum-cryptography": "^0.1.3", + "rlp": "^2.2.4" + }, + "engines": { + "node": ">=10.0.0" } }, - "node_modules/ethereumjs-account/node_modules/bn.js": { - "version": "4.12.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==" - }, - "node_modules/ethereumjs-account/node_modules/ethereum-cryptography": { + "node_modules/ethereumjs-util/node_modules/ethereum-cryptography": { "version": "0.1.3", "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-0.1.3.tgz", "integrity": "sha512-w8/4x1SGGzc+tO97TASLja6SLd3fRIK2tLVcV2Gx4IB21hE19atll5Cq9o3d0ZmAYC/8aw0ipieTSiekAea4SQ==", @@ -12009,1451 +7929,1257 @@ "setimmediate": "^1.0.5" } }, - "node_modules/ethereumjs-account/node_modules/ethereumjs-util": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-5.2.1.tgz", - "integrity": "sha512-v3kT+7zdyCm1HIqWlLNrHGqHGLpGYIhjeHxQjnDXjLT2FyGJDsd3LWMYUo7pAFRrk86CR3nUJfhC81CCoJNNGQ==", + "node_modules/ethers": { + "version": "6.9.2", + "resolved": "https://registry.npmjs.org/ethers/-/ethers-6.9.2.tgz", + "integrity": "sha512-YpkrtILnMQz5jSEsJQRTpduaGT/CXuLnUIuOYzHA0v/7c8IX91m2J48wSKjzGL5L9J/Us3tLoUdb+OwE3U+FFQ==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/ethers-io/" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], "dependencies": { - "bn.js": "^4.11.0", - "create-hash": "^1.1.2", - "elliptic": "^6.5.2", - "ethereum-cryptography": "^0.1.3", - "ethjs-util": "^0.1.3", - "rlp": "^2.0.0", - "safe-buffer": "^5.1.1" + "@adraffy/ens-normalize": "1.10.0", + "@noble/curves": "1.2.0", + "@noble/hashes": "1.3.2", + "@types/node": "18.15.13", + "aes-js": "4.0.0-beta.5", + "tslib": "2.4.0", + "ws": "8.5.0" + }, + "engines": { + "node": ">=14.0.0" } }, - "node_modules/ethereumjs-block": { - "version": "1.7.1", - "resolved": "https://registry.npmjs.org/ethereumjs-block/-/ethereumjs-block-1.7.1.tgz", - "integrity": "sha512-B+sSdtqm78fmKkBq78/QLKJbu/4Ts4P2KFISdgcuZUPDm9x+N7qgBPIIFUGbaakQh8bzuquiRVbdmvPKqbILRg==", - "deprecated": "New package name format for new versions: @ethereumjs/block. Please update.", + "node_modules/ethers/node_modules/@noble/curves": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@noble/curves/-/curves-1.2.0.tgz", + "integrity": "sha512-oYclrNgRaM9SsBUBVbb8M6DTV7ZHRTKugureoYEncY5c65HOmRzvSiTE3y5CYaPYJA/GVkrhXEoF0M3Ya9PMnw==", + "dev": true, "dependencies": { - "async": "^2.0.1", - "ethereum-common": "0.2.0", - "ethereumjs-tx": "^1.2.2", - "ethereumjs-util": "^5.0.0", - "merkle-patricia-tree": "^2.1.2" + "@noble/hashes": "1.3.2" + }, + "funding": { + "url": "https://paulmillr.com/funding/" } }, - "node_modules/ethereumjs-block/node_modules/abstract-leveldown": { - "version": "2.6.3", - "resolved": "https://registry.npmjs.org/abstract-leveldown/-/abstract-leveldown-2.6.3.tgz", - "integrity": "sha512-2++wDf/DYqkPR3o5tbfdhF96EfMApo1GpPfzOsR/ZYXdkSmELlvOOEAl9iKkRsktMPHdGjO4rtkBpf2I7TiTeA==", - "dependencies": { - "xtend": "~4.0.0" + "node_modules/ethers/node_modules/@noble/hashes": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.3.2.tgz", + "integrity": "sha512-MVC8EAQp7MvEcm30KWENFjgR+Mkmf+D189XJTkFIlwohU5hcBbn1ZkKq7KVTi2Hme3PMGF390DaL52beVrIihQ==", + "dev": true, + "engines": { + "node": ">= 16" + }, + "funding": { + "url": "https://paulmillr.com/funding/" } }, - "node_modules/ethereumjs-block/node_modules/async": { - "version": "2.6.4", - "resolved": "https://registry.npmjs.org/async/-/async-2.6.4.tgz", - "integrity": "sha512-mzo5dfJYwAn29PeiJ0zvwTo04zj8HDJj0Mn8TD7sno7q12prdbnasKJHhkm2c1LgrhlJ0teaea8860oxi51mGA==", - "dependencies": { - "lodash": "^4.17.14" - } + "node_modules/ethers/node_modules/@types/node": { + "version": "18.15.13", + "resolved": "https://registry.npmjs.org/@types/node/-/node-18.15.13.tgz", + "integrity": "sha512-N+0kuo9KgrUQ1Sn/ifDXsvg0TTleP7rIy4zOBGECxAljqvqfqpTfzx0Q1NUedOixRMBfe2Whhb056a42cWs26Q==", + "dev": true }, - "node_modules/ethereumjs-block/node_modules/bn.js": { - "version": "4.12.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==" + "node_modules/ethers/node_modules/tslib": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.0.tgz", + "integrity": "sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ==", + "dev": true }, - "node_modules/ethereumjs-block/node_modules/deferred-leveldown": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/deferred-leveldown/-/deferred-leveldown-1.2.2.tgz", - "integrity": "sha512-uukrWD2bguRtXilKt6cAWKyoXrTSMo5m7crUdLfWQmu8kIm88w3QZoUL+6nhpfKVmhHANER6Re3sKoNoZ3IKMA==", + "node_modules/ethjs-abi": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/ethjs-abi/-/ethjs-abi-0.2.1.tgz", + "integrity": "sha512-g2AULSDYI6nEJyJaEVEXtTimRY2aPC2fi7ddSy0W+LXvEVL8Fe1y76o43ecbgdUKwZD+xsmEgX1yJr1Ia3r1IA==", + "dev": true, "dependencies": { - "abstract-leveldown": "~2.6.0" + "bn.js": "4.11.6", + "js-sha3": "0.5.5", + "number-to-bn": "1.7.0" + }, + "engines": { + "node": ">=6.5.0", + "npm": ">=3" } }, - "node_modules/ethereumjs-block/node_modules/ethereum-cryptography": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-0.1.3.tgz", - "integrity": "sha512-w8/4x1SGGzc+tO97TASLja6SLd3fRIK2tLVcV2Gx4IB21hE19atll5Cq9o3d0ZmAYC/8aw0ipieTSiekAea4SQ==", - "dependencies": { - "@types/pbkdf2": "^3.0.0", - "@types/secp256k1": "^4.0.1", - "blakejs": "^1.1.0", - "browserify-aes": "^1.2.0", - "bs58check": "^2.1.2", - "create-hash": "^1.2.0", - "create-hmac": "^1.1.7", - "hash.js": "^1.1.7", - "keccak": "^3.0.0", - "pbkdf2": "^3.0.17", - "randombytes": "^2.1.0", - "safe-buffer": "^5.1.2", - "scrypt-js": "^3.0.0", - "secp256k1": "^4.0.1", - "setimmediate": "^1.0.5" - } + "node_modules/ethjs-abi/node_modules/bn.js": { + "version": "4.11.6", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.6.tgz", + "integrity": "sha512-XWwnNNFCuuSQ0m3r3C4LE3EiORltHd9M05pq6FOlVeiophzRbMo50Sbz1ehl8K3Z+jw9+vmgnXefY1hz8X+2wA==", + "dev": true }, - "node_modules/ethereumjs-block/node_modules/ethereumjs-tx": { - "version": "1.3.7", - "resolved": "https://registry.npmjs.org/ethereumjs-tx/-/ethereumjs-tx-1.3.7.tgz", - "integrity": "sha512-wvLMxzt1RPhAQ9Yi3/HKZTn0FZYpnsmQdbKYfUUpi4j1SEIcbkd9tndVjcPrufY3V7j2IebOpC00Zp2P/Ay2kA==", - "deprecated": "New package name format for new versions: @ethereumjs/tx. Please update.", + "node_modules/ethjs-abi/node_modules/js-sha3": { + "version": "0.5.5", + "resolved": "https://registry.npmjs.org/js-sha3/-/js-sha3-0.5.5.tgz", + "integrity": "sha512-yLLwn44IVeunwjpDVTDZmQeVbB0h+dZpY2eO68B/Zik8hu6dH+rKeLxwua79GGIvW6xr8NBAcrtiUbYrTjEFTA==", + "dev": true + }, + "node_modules/ethjs-unit": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/ethjs-unit/-/ethjs-unit-0.1.6.tgz", + "integrity": "sha512-/Sn9Y0oKl0uqQuvgFk/zQgR7aw1g36qX/jzSQ5lSwlO0GigPymk4eGQfeNTD03w1dPOqfz8V77Cy43jH56pagw==", "dependencies": { - "ethereum-common": "^0.0.18", - "ethereumjs-util": "^5.0.0" + "bn.js": "4.11.6", + "number-to-bn": "1.7.0" + }, + "engines": { + "node": ">=6.5.0", + "npm": ">=3" } }, - "node_modules/ethereumjs-block/node_modules/ethereumjs-tx/node_modules/ethereum-common": { - "version": "0.0.18", - "resolved": "https://registry.npmjs.org/ethereum-common/-/ethereum-common-0.0.18.tgz", - "integrity": "sha512-EoltVQTRNg2Uy4o84qpa2aXymXDJhxm7eos/ACOg0DG4baAbMjhbdAEsx9GeE8sC3XCxnYvrrzZDH8D8MtA2iQ==" + "node_modules/ethjs-unit/node_modules/bn.js": { + "version": "4.11.6", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.6.tgz", + "integrity": "sha512-XWwnNNFCuuSQ0m3r3C4LE3EiORltHd9M05pq6FOlVeiophzRbMo50Sbz1ehl8K3Z+jw9+vmgnXefY1hz8X+2wA==" }, - "node_modules/ethereumjs-block/node_modules/ethereumjs-util": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-5.2.1.tgz", - "integrity": "sha512-v3kT+7zdyCm1HIqWlLNrHGqHGLpGYIhjeHxQjnDXjLT2FyGJDsd3LWMYUo7pAFRrk86CR3nUJfhC81CCoJNNGQ==", + "node_modules/ethjs-util": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/ethjs-util/-/ethjs-util-0.1.6.tgz", + "integrity": "sha512-CUnVOQq7gSpDHZVVrQW8ExxUETWrnrvXYvYz55wOU8Uj4VCgw56XC2B/fVqQN+f7gmrnRHSLVnFAwsCuNwji8w==", "dependencies": { - "bn.js": "^4.11.0", - "create-hash": "^1.1.2", - "elliptic": "^6.5.2", - "ethereum-cryptography": "^0.1.3", - "ethjs-util": "^0.1.3", - "rlp": "^2.0.0", - "safe-buffer": "^5.1.1" + "is-hex-prefixed": "1.0.0", + "strip-hex-prefix": "1.0.0" + }, + "engines": { + "node": ">=6.5.0", + "npm": ">=3" } }, - "node_modules/ethereumjs-block/node_modules/level-codec": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/level-codec/-/level-codec-7.0.1.tgz", - "integrity": "sha512-Ua/R9B9r3RasXdRmOtd+t9TCOEIIlts+TN/7XTT2unhDaL6sJn83S3rUyljbr6lVtw49N3/yA0HHjpV6Kzb2aQ==" + "node_modules/eventemitter3": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.4.tgz", + "integrity": "sha512-rlaVLnVxtxvoyLsQQFBx53YmXHDxRIzzTLbdfxqi4yocpSjAxXwkU0cScM5JgSKMqEhrZpnvQ2D9gjylR0AimQ==" }, - "node_modules/ethereumjs-block/node_modules/level-errors": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/level-errors/-/level-errors-1.0.5.tgz", - "integrity": "sha512-/cLUpQduF6bNrWuAC4pwtUKA5t669pCsCi2XbmojG2tFeOr9j6ShtdDCtFFQO1DRt+EVZhx9gPzP9G2bUaG4ig==", - "dependencies": { - "errno": "~0.1.1" + "node_modules/events": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", + "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", + "engines": { + "node": ">=0.8.x" } }, - "node_modules/ethereumjs-block/node_modules/level-iterator-stream": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/level-iterator-stream/-/level-iterator-stream-1.3.1.tgz", - "integrity": "sha512-1qua0RHNtr4nrZBgYlpV0qHHeHpcRRWTxEZJ8xsemoHAXNL5tbooh4tPEEqIqsbWCAJBmUmkwYK/sW5OrFjWWw==", + "node_modules/evm-bn": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/evm-bn/-/evm-bn-1.1.2.tgz", + "integrity": "sha512-Lq8CT1EAjSeN+Yk0h1hpSwnZyMA4Xir6fQD4vlStljAuW2xr7qLOEGDLGsTa9sU2e40EYIumA4wYhMC/e+lyKw==", "dependencies": { - "inherits": "^2.0.1", - "level-errors": "^1.0.3", - "readable-stream": "^1.0.33", - "xtend": "^4.0.0" + "@ethersproject/bignumber": "^5.5.0", + "from-exponential": "^1.1.1" + }, + "peerDependencies": { + "@ethersproject/bignumber": "5.x" } }, - "node_modules/ethereumjs-block/node_modules/level-iterator-stream/node_modules/isarray": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", - "integrity": "sha512-D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ==" - }, - "node_modules/ethereumjs-block/node_modules/level-iterator-stream/node_modules/readable-stream": { - "version": "1.1.14", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz", - "integrity": "sha512-+MeVjFf4L44XUkhM1eYbD8fyEsxcV81pqMSR5gblfcLCHfZvbrqy4/qYHE+/R5HoBUT11WV5O08Cr1n3YXkWVQ==", + "node_modules/evp_bytestokey": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz", + "integrity": "sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==", "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.1", - "isarray": "0.0.1", - "string_decoder": "~0.10.x" + "md5.js": "^1.3.4", + "safe-buffer": "^5.1.1" } }, - "node_modules/ethereumjs-block/node_modules/level-iterator-stream/node_modules/string_decoder": { - "version": "0.10.31", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", - "integrity": "sha512-ev2QzSzWPYmy9GuqfIVildA4OdcGLeFZQrq5ys6RtiuF+RQQiZWr8TZNyAcuVXyQRYfEO+MsoB/1BuQVhOJuoQ==" - }, - "node_modules/ethereumjs-block/node_modules/level-ws": { - "version": "0.0.0", - "resolved": "https://registry.npmjs.org/level-ws/-/level-ws-0.0.0.tgz", - "integrity": "sha512-XUTaO/+Db51Uiyp/t7fCMGVFOTdtLS/NIACxE/GHsij15mKzxksZifKVjlXDF41JMUP/oM1Oc4YNGdKnc3dVLw==", - "dependencies": { - "readable-stream": "~1.0.15", - "xtend": "~2.1.1" + "node_modules/expand-template": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/expand-template/-/expand-template-2.0.3.tgz", + "integrity": "sha512-XYfuKMvj4O35f/pOXLObndIRvyQ+/+6AhODh+OKWj9S9498pHHn/IMszH+gt0fBCRWMNfk1ZSp5x3AifmnI2vg==", + "optional": true, + "engines": { + "node": ">=6" } }, - "node_modules/ethereumjs-block/node_modules/level-ws/node_modules/isarray": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", - "integrity": "sha512-D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ==" - }, - "node_modules/ethereumjs-block/node_modules/level-ws/node_modules/readable-stream": { - "version": "1.0.34", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz", - "integrity": "sha512-ok1qVCJuRkNmvebYikljxJA/UEsKwLl2nI1OmaqAu4/UE+h0wKCHok4XkL/gvi39OacXvw59RJUOFUkDib2rHg==", + "node_modules/express": { + "version": "4.18.2", + "resolved": "https://registry.npmjs.org/express/-/express-4.18.2.tgz", + "integrity": "sha512-5/PsL6iGPdfQ/lKM1UuielYgv3BUoJfz1aUwU9vHZ+J7gyvwdQXFEBIEIaxeGf0GIcreATNyBExtalisDbuMqQ==", "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.1", - "isarray": "0.0.1", - "string_decoder": "~0.10.x" + "accepts": "~1.3.8", + "array-flatten": "1.1.1", + "body-parser": "1.20.1", + "content-disposition": "0.5.4", + "content-type": "~1.0.4", + "cookie": "0.5.0", + "cookie-signature": "1.0.6", + "debug": "2.6.9", + "depd": "2.0.0", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "finalhandler": "1.2.0", + "fresh": "0.5.2", + "http-errors": "2.0.0", + "merge-descriptors": "1.0.1", + "methods": "~1.1.2", + "on-finished": "2.4.1", + "parseurl": "~1.3.3", + "path-to-regexp": "0.1.7", + "proxy-addr": "~2.0.7", + "qs": "6.11.0", + "range-parser": "~1.2.1", + "safe-buffer": "5.2.1", + "send": "0.18.0", + "serve-static": "1.15.0", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "type-is": "~1.6.18", + "utils-merge": "1.0.1", + "vary": "~1.1.2" + }, + "engines": { + "node": ">= 0.10.0" } }, - "node_modules/ethereumjs-block/node_modules/level-ws/node_modules/string_decoder": { - "version": "0.10.31", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", - "integrity": "sha512-ev2QzSzWPYmy9GuqfIVildA4OdcGLeFZQrq5ys6RtiuF+RQQiZWr8TZNyAcuVXyQRYfEO+MsoB/1BuQVhOJuoQ==" - }, - "node_modules/ethereumjs-block/node_modules/level-ws/node_modules/xtend": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/xtend/-/xtend-2.1.2.tgz", - "integrity": "sha512-vMNKzr2rHP9Dp/e1NQFnLQlwlhp9L/LfvnsVdHxN1f+uggyVI3i08uD14GPvCToPkdsRfyPqIyYGmIk58V98ZQ==", + "node_modules/express/node_modules/body-parser": { + "version": "1.20.1", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.1.tgz", + "integrity": "sha512-jWi7abTbYwajOytWCQc37VulmWiRae5RyTpaCyDcS5/lMdtwSz5lOpDE67srw/HYe35f1z3fDQw+3txg7gNtWw==", "dependencies": { - "object-keys": "~0.4.0" + "bytes": "3.1.2", + "content-type": "~1.0.4", + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "1.2.0", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", + "on-finished": "2.4.1", + "qs": "6.11.0", + "raw-body": "2.5.1", + "type-is": "~1.6.18", + "unpipe": "1.0.0" }, "engines": { - "node": ">=0.4" + "node": ">= 0.8", + "npm": "1.2.8000 || >= 1.4.16" + } + }, + "node_modules/express/node_modules/cookie": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.5.0.tgz", + "integrity": "sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==", + "engines": { + "node": ">= 0.6" } }, - "node_modules/ethereumjs-block/node_modules/levelup": { - "version": "1.3.9", - "resolved": "https://registry.npmjs.org/levelup/-/levelup-1.3.9.tgz", - "integrity": "sha512-VVGHfKIlmw8w1XqpGOAGwq6sZm2WwWLmlDcULkKWQXEA5EopA8OBNJ2Ck2v6bdk8HeEZSbCSEgzXadyQFm76sQ==", + "node_modules/express/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", "dependencies": { - "deferred-leveldown": "~1.2.1", - "level-codec": "~7.0.0", - "level-errors": "~1.0.3", - "level-iterator-stream": "~1.3.0", - "prr": "~1.0.1", - "semver": "~5.4.1", - "xtend": "~4.0.0" + "ms": "2.0.0" } }, - "node_modules/ethereumjs-block/node_modules/memdown": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/memdown/-/memdown-1.4.1.tgz", - "integrity": "sha512-iVrGHZB8i4OQfM155xx8akvG9FIj+ht14DX5CQkCTG4EHzZ3d3sgckIf/Lm9ivZalEsFuEVnWv2B2WZvbrro2w==", + "node_modules/express/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" + }, + "node_modules/express/node_modules/qs": { + "version": "6.11.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz", + "integrity": "sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==", "dependencies": { - "abstract-leveldown": "~2.7.1", - "functional-red-black-tree": "^1.0.1", - "immediate": "^3.2.3", - "inherits": "~2.0.1", - "ltgt": "~2.2.0", - "safe-buffer": "~5.1.1" + "side-channel": "^1.0.4" + }, + "engines": { + "node": ">=0.6" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/ethereumjs-block/node_modules/memdown/node_modules/abstract-leveldown": { - "version": "2.7.2", - "resolved": "https://registry.npmjs.org/abstract-leveldown/-/abstract-leveldown-2.7.2.tgz", - "integrity": "sha512-+OVvxH2rHVEhWLdbudP6p0+dNMXu8JA1CbhP19T8paTYAcX7oJ4OVjT+ZUVpv7mITxXHqDMej+GdqXBmXkw09w==", + "node_modules/express/node_modules/raw-body": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.1.tgz", + "integrity": "sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig==", "dependencies": { - "xtend": "~4.0.0" + "bytes": "3.1.2", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", + "unpipe": "1.0.0" + }, + "engines": { + "node": ">= 0.8" } }, - "node_modules/ethereumjs-block/node_modules/merkle-patricia-tree": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/merkle-patricia-tree/-/merkle-patricia-tree-2.3.2.tgz", - "integrity": "sha512-81PW5m8oz/pz3GvsAwbauj7Y00rqm81Tzad77tHBwU7pIAtN+TJnMSOJhxBKflSVYhptMMb9RskhqHqrSm1V+g==", + "node_modules/ext": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/ext/-/ext-1.7.0.tgz", + "integrity": "sha512-6hxeJYaL110a9b5TEJSj0gojyHQAmA2ch5Os+ySCiA1QGdS697XWY1pzsrSjqA9LDEEgdB/KypIlR59RcLuHYw==", "dependencies": { - "async": "^1.4.2", - "ethereumjs-util": "^5.0.0", - "level-ws": "0.0.0", - "levelup": "^1.2.1", - "memdown": "^1.0.0", - "readable-stream": "^2.0.0", - "rlp": "^2.0.0", - "semaphore": ">=1.0.1" + "type": "^2.7.2" } }, - "node_modules/ethereumjs-block/node_modules/merkle-patricia-tree/node_modules/async": { - "version": "1.5.2", - "resolved": "https://registry.npmjs.org/async/-/async-1.5.2.tgz", - "integrity": "sha512-nSVgobk4rv61R9PUSDtYt7mPVB2olxNR5RWJcAsH676/ef11bUZwvu7+RGYrYauVdDPcO519v68wRhXQtxsV9w==" + "node_modules/ext/node_modules/type": { + "version": "2.7.2", + "resolved": "https://registry.npmjs.org/type/-/type-2.7.2.tgz", + "integrity": "sha512-dzlvlNlt6AXU7EBSfpAscydQ7gXB+pPGsPnfJnZpiNJBDj7IaJzQlBZYGdEi4R9HmPdBv2XmWJ6YUtoTa7lmCw==" }, - "node_modules/ethereumjs-block/node_modules/object-keys": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-0.4.0.tgz", - "integrity": "sha512-ncrLw+X55z7bkl5PnUvHwFK9FcGuFYo9gtjws2XtSzL+aZ8tm830P60WJ0dSmFVaSalWieW5MD7kEdnXda9yJw==" + "node_modules/extend": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", + "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==" }, - "node_modules/ethereumjs-block/node_modules/readable-stream": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "node_modules/extract-zip": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extract-zip/-/extract-zip-2.0.1.tgz", + "integrity": "sha512-GDhU9ntwuKyGXdZBUgTIe+vXnWj0fppUEtMDL0+idd5Sta8TGpHssn/eusA9mrPr9qNDym6SxAYZjNvCn/9RBg==", + "optional": true, "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" + "debug": "^4.1.1", + "get-stream": "^5.1.0", + "yauzl": "^2.10.0" + }, + "bin": { + "extract-zip": "cli.js" + }, + "engines": { + "node": ">= 10.17.0" + }, + "optionalDependencies": { + "@types/yauzl": "^2.9.1" } }, - "node_modules/ethereumjs-block/node_modules/safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + "node_modules/extsprintf": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", + "integrity": "sha512-11Ndz7Nv+mvAC1j0ktTa7fAb0vLyGGX+rMHNBYQviQDGU0Hw7lhctJANqbPhu9nV9/izT/IntTgZ7Im/9LJs9g==", + "engines": [ + "node >=0.6.0" + ] }, - "node_modules/ethereumjs-block/node_modules/semver": { - "version": "5.4.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.4.1.tgz", - "integrity": "sha512-WfG/X9+oATh81XtllIo/I8gOiY9EXRdv1cQdyykeXK17YcUW3EXUAi2To4pcH6nZtJPr7ZOpM5OMyWJZm+8Rsg==", - "bin": { - "semver": "bin/semver" - } + "node_modules/fast-base64-decode": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fast-base64-decode/-/fast-base64-decode-1.0.0.tgz", + "integrity": "sha512-qwaScUgUGBYeDNRnbc/KyllVU88Jk1pRHPStuF/lO7B0/RTRLj7U0lkdTAutlBblY08rwZDff6tNU9cjv6j//Q==", + "dev": true }, - "node_modules/ethereumjs-block/node_modules/string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "node_modules/fast-check": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/fast-check/-/fast-check-3.1.1.tgz", + "integrity": "sha512-3vtXinVyuUKCKFKYcwXhGE6NtGWkqF8Yh3rvMZNzmwz8EPrgoc/v4pDdLHyLnCyCI5MZpZZkDEwFyXyEONOxpA==", "dependencies": { - "safe-buffer": "~5.1.0" + "pure-rand": "^5.0.1" + }, + "engines": { + "node": ">=8.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/fast-check" } }, - "node_modules/ethereumjs-common": { - "version": "1.5.2", - "resolved": "https://registry.npmjs.org/ethereumjs-common/-/ethereumjs-common-1.5.2.tgz", - "integrity": "sha512-hTfZjwGX52GS2jcVO6E2sx4YuFnf0Fhp5ylo4pEPhEffNln7vS59Hr5sLnp3/QCazFLluuBZ+FZ6J5HTp0EqCA==", - "deprecated": "New package name format for new versions: @ethereumjs/common. Please update." + "node_modules/fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==" }, - "node_modules/ethereumjs-tx": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ethereumjs-tx/-/ethereumjs-tx-2.1.2.tgz", - "integrity": "sha512-zZEK1onCeiORb0wyCXUvg94Ve5It/K6GD1K+26KfFKodiBiS6d9lfCXlUKGBBdQ+bv7Day+JK0tj1K+BeNFRAw==", - "deprecated": "New package name format for new versions: @ethereumjs/tx. Please update.", - "dependencies": { - "ethereumjs-common": "^1.5.0", - "ethereumjs-util": "^6.0.0" - } + "node_modules/fast-json-stable-stringify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==" }, - "node_modules/ethereumjs-tx/node_modules/@types/bn.js": { - "version": "4.11.6", - "resolved": "https://registry.npmjs.org/@types/bn.js/-/bn.js-4.11.6.tgz", - "integrity": "sha512-pqr857jrp2kPuO9uRjZ3PwnJTjoQy+fcdxvBTvHm6dkmEL9q+hDD/2j/0ELOBPtPnS8LjCX0gI9nbl8lVkadpg==", + "node_modules/fd-slicer": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.1.0.tgz", + "integrity": "sha512-cE1qsB/VwyQozZ+q1dGxR8LBYNZeofhEdUNGSMbQD3Gw2lAzX9Zb3uIU6Ebc/Fmyjo9AWWfnn0AUCHqtevs/8g==", + "optional": true, "dependencies": { - "@types/node": "*" + "pend": "~1.2.0" } }, - "node_modules/ethereumjs-tx/node_modules/bn.js": { - "version": "4.12.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==" + "node_modules/file-uri-to-path": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz", + "integrity": "sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==", + "optional": true }, - "node_modules/ethereumjs-tx/node_modules/ethereum-cryptography": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-0.1.3.tgz", - "integrity": "sha512-w8/4x1SGGzc+tO97TASLja6SLd3fRIK2tLVcV2Gx4IB21hE19atll5Cq9o3d0ZmAYC/8aw0ipieTSiekAea4SQ==", - "dependencies": { - "@types/pbkdf2": "^3.0.0", - "@types/secp256k1": "^4.0.1", - "blakejs": "^1.1.0", - "browserify-aes": "^1.2.0", - "bs58check": "^2.1.2", - "create-hash": "^1.2.0", - "create-hmac": "^1.1.7", - "hash.js": "^1.1.7", - "keccak": "^3.0.0", - "pbkdf2": "^3.0.17", - "randombytes": "^2.1.0", - "safe-buffer": "^5.1.2", - "scrypt-js": "^3.0.0", - "secp256k1": "^4.0.1", - "setimmediate": "^1.0.5" + "node_modules/file-url": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/file-url/-/file-url-3.0.0.tgz", + "integrity": "sha512-g872QGsHexznxkIAdK8UiZRe7SkE6kvylShU4Nsj8NvfvZag7S0QuQ4IgvPDkk75HxgjIVDwycFTDAgIiO4nDA==", + "optional": true, + "engines": { + "node": ">=8" } }, - "node_modules/ethereumjs-tx/node_modules/ethereumjs-util": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-6.2.1.tgz", - "integrity": "sha512-W2Ktez4L01Vexijrm5EB6w7dg4n/TgpoYU4avuT5T3Vmnw/eCRtiBrJfQYS/DCSvDIOLn2k57GcHdeBcgVxAqw==", + "node_modules/fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", "dependencies": { - "@types/bn.js": "^4.11.3", - "bn.js": "^4.11.0", - "create-hash": "^1.1.2", - "elliptic": "^6.5.2", - "ethereum-cryptography": "^0.1.3", - "ethjs-util": "0.1.6", - "rlp": "^2.2.3" + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" } }, - "node_modules/ethereumjs-util": { - "version": "7.1.5", - "resolved": "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-7.1.5.tgz", - "integrity": "sha512-SDl5kKrQAudFBUe5OJM9Ac6WmMyYmXX/6sTmLZ3ffG2eY6ZIGBes3pEDxNN6V72WyOw4CPD5RomKdsa8DAAwLg==", + "node_modules/finalhandler": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.2.0.tgz", + "integrity": "sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==", "dependencies": { - "@types/bn.js": "^5.1.0", - "bn.js": "^5.1.2", - "create-hash": "^1.1.2", - "ethereum-cryptography": "^0.1.3", - "rlp": "^2.2.4" + "debug": "2.6.9", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "on-finished": "2.4.1", + "parseurl": "~1.3.3", + "statuses": "2.0.1", + "unpipe": "~1.0.0" }, "engines": { - "node": ">=10.0.0" + "node": ">= 0.8" } }, - "node_modules/ethereumjs-util/node_modules/ethereum-cryptography": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-0.1.3.tgz", - "integrity": "sha512-w8/4x1SGGzc+tO97TASLja6SLd3fRIK2tLVcV2Gx4IB21hE19atll5Cq9o3d0ZmAYC/8aw0ipieTSiekAea4SQ==", + "node_modules/finalhandler/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", "dependencies": { - "@types/pbkdf2": "^3.0.0", - "@types/secp256k1": "^4.0.1", - "blakejs": "^1.1.0", - "browserify-aes": "^1.2.0", - "bs58check": "^2.1.2", - "create-hash": "^1.2.0", - "create-hmac": "^1.1.7", - "hash.js": "^1.1.7", - "keccak": "^3.0.0", - "pbkdf2": "^3.0.17", - "randombytes": "^2.1.0", - "safe-buffer": "^5.1.2", - "scrypt-js": "^3.0.0", - "secp256k1": "^4.0.1", - "setimmediate": "^1.0.5" + "ms": "2.0.0" } }, - "node_modules/ethereumjs-vm": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/ethereumjs-vm/-/ethereumjs-vm-2.6.0.tgz", - "integrity": "sha512-r/XIUik/ynGbxS3y+mvGnbOKnuLo40V5Mj1J25+HEO63aWYREIqvWeRO/hnROlMBE5WoniQmPmhiaN0ctiHaXw==", - "deprecated": "New package name format for new versions: @ethereumjs/vm. Please update.", - "dependencies": { - "async": "^2.1.2", - "async-eventemitter": "^0.2.2", - "ethereumjs-account": "^2.0.3", - "ethereumjs-block": "~2.2.0", - "ethereumjs-common": "^1.1.0", - "ethereumjs-util": "^6.0.0", - "fake-merkle-patricia-tree": "^1.0.1", - "functional-red-black-tree": "^1.0.1", - "merkle-patricia-tree": "^2.3.2", - "rustbn.js": "~0.2.0", - "safe-buffer": "^5.1.1" - } + "node_modules/finalhandler/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" }, - "node_modules/ethereumjs-vm/node_modules/@types/bn.js": { - "version": "4.11.6", - "resolved": "https://registry.npmjs.org/@types/bn.js/-/bn.js-4.11.6.tgz", - "integrity": "sha512-pqr857jrp2kPuO9uRjZ3PwnJTjoQy+fcdxvBTvHm6dkmEL9q+hDD/2j/0ELOBPtPnS8LjCX0gI9nbl8lVkadpg==", + "node_modules/find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "devOptional": true, "dependencies": { - "@types/node": "*" + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=8" } }, - "node_modules/ethereumjs-vm/node_modules/abstract-leveldown": { - "version": "2.6.3", - "resolved": "https://registry.npmjs.org/abstract-leveldown/-/abstract-leveldown-2.6.3.tgz", - "integrity": "sha512-2++wDf/DYqkPR3o5tbfdhF96EfMApo1GpPfzOsR/ZYXdkSmELlvOOEAl9iKkRsktMPHdGjO4rtkBpf2I7TiTeA==", + "node_modules/find-yarn-workspace-root": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/find-yarn-workspace-root/-/find-yarn-workspace-root-2.0.0.tgz", + "integrity": "sha512-1IMnbjt4KzsQfnhnzNd8wUEgXZ44IzZaZmnLYx7D5FZlaHt2gW20Cri8Q+E/t5tIj4+epTBub+2Zxu/vNILzqQ==", "dependencies": { - "xtend": "~4.0.0" + "micromatch": "^4.0.2" + } + }, + "node_modules/flat": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz", + "integrity": "sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==", + "bin": { + "flat": "cli.js" } }, - "node_modules/ethereumjs-vm/node_modules/async": { - "version": "2.6.4", - "resolved": "https://registry.npmjs.org/async/-/async-2.6.4.tgz", - "integrity": "sha512-mzo5dfJYwAn29PeiJ0zvwTo04zj8HDJj0Mn8TD7sno7q12prdbnasKJHhkm2c1LgrhlJ0teaea8860oxi51mGA==", + "node_modules/fmix": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/fmix/-/fmix-0.1.0.tgz", + "integrity": "sha512-Y6hyofImk9JdzU8k5INtTXX1cu8LDlePWDFU5sftm9H+zKCr5SGrVjdhkvsim646cw5zD0nADj8oHyXMZmCZ9w==", + "dev": true, "dependencies": { - "lodash": "^4.17.14" + "imul": "^1.0.0" } }, - "node_modules/ethereumjs-vm/node_modules/bn.js": { - "version": "4.12.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==" + "node_modules/follow-redirects": { + "version": "1.15.4", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.4.tgz", + "integrity": "sha512-Cr4D/5wlrb0z9dgERpUL3LrmPKVDsETIJhaCMeDfuFYcqa5bldGV6wBsAN6X/vxlXQtFBMrXdXxdL8CbDTGniw==", + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/RubenVerborgh" + } + ], + "engines": { + "node": ">=4.0" + }, + "peerDependenciesMeta": { + "debug": { + "optional": true + } + } }, - "node_modules/ethereumjs-vm/node_modules/deferred-leveldown": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/deferred-leveldown/-/deferred-leveldown-1.2.2.tgz", - "integrity": "sha512-uukrWD2bguRtXilKt6cAWKyoXrTSMo5m7crUdLfWQmu8kIm88w3QZoUL+6nhpfKVmhHANER6Re3sKoNoZ3IKMA==", + "node_modules/for-each": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz", + "integrity": "sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==", "dependencies": { - "abstract-leveldown": "~2.6.0" + "is-callable": "^1.1.3" } }, - "node_modules/ethereumjs-vm/node_modules/ethereum-cryptography": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-0.1.3.tgz", - "integrity": "sha512-w8/4x1SGGzc+tO97TASLja6SLd3fRIK2tLVcV2Gx4IB21hE19atll5Cq9o3d0ZmAYC/8aw0ipieTSiekAea4SQ==", + "node_modules/foreground-child": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.1.1.tgz", + "integrity": "sha512-TMKDUnIte6bfb5nWv7V/caI169OHgvwjb7V4WkeUvbQQdjr5rWKqHFiKWb/fcOwB+CzBT+qbWjvj+DVwRskpIg==", + "peer": true, "dependencies": { - "@types/pbkdf2": "^3.0.0", - "@types/secp256k1": "^4.0.1", - "blakejs": "^1.1.0", - "browserify-aes": "^1.2.0", - "bs58check": "^2.1.2", - "create-hash": "^1.2.0", - "create-hmac": "^1.1.7", - "hash.js": "^1.1.7", - "keccak": "^3.0.0", - "pbkdf2": "^3.0.17", - "randombytes": "^2.1.0", - "safe-buffer": "^5.1.2", - "scrypt-js": "^3.0.0", - "secp256k1": "^4.0.1", - "setimmediate": "^1.0.5" + "cross-spawn": "^7.0.0", + "signal-exit": "^4.0.1" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/ethereumjs-vm/node_modules/ethereumjs-block": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/ethereumjs-block/-/ethereumjs-block-2.2.2.tgz", - "integrity": "sha512-2p49ifhek3h2zeg/+da6XpdFR3GlqY3BIEiqxGF8j9aSRIgkb7M1Ky+yULBKJOu8PAZxfhsYA+HxUk2aCQp3vg==", - "deprecated": "New package name format for new versions: @ethereumjs/block. Please update.", - "dependencies": { - "async": "^2.0.1", - "ethereumjs-common": "^1.5.0", - "ethereumjs-tx": "^2.1.1", - "ethereumjs-util": "^5.0.0", - "merkle-patricia-tree": "^2.1.2" + "node_modules/forever-agent": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", + "integrity": "sha512-j0KLYPhm6zeac4lz3oJ3o65qvgQCcPubiyotZrXqEaG4hNagNYO8qdlUrX5vwqv9ohqeT/Z3j6+yW067yWWdUw==", + "engines": { + "node": "*" } }, - "node_modules/ethereumjs-vm/node_modules/ethereumjs-block/node_modules/ethereumjs-util": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-5.2.1.tgz", - "integrity": "sha512-v3kT+7zdyCm1HIqWlLNrHGqHGLpGYIhjeHxQjnDXjLT2FyGJDsd3LWMYUo7pAFRrk86CR3nUJfhC81CCoJNNGQ==", + "node_modules/form-data": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz", + "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==", "dependencies": { - "bn.js": "^4.11.0", - "create-hash": "^1.1.2", - "elliptic": "^6.5.2", - "ethereum-cryptography": "^0.1.3", - "ethjs-util": "^0.1.3", - "rlp": "^2.0.0", - "safe-buffer": "^5.1.1" + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "mime-types": "^2.1.12" + }, + "engines": { + "node": ">= 6" } }, - "node_modules/ethereumjs-vm/node_modules/ethereumjs-util": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-6.2.1.tgz", - "integrity": "sha512-W2Ktez4L01Vexijrm5EB6w7dg4n/TgpoYU4avuT5T3Vmnw/eCRtiBrJfQYS/DCSvDIOLn2k57GcHdeBcgVxAqw==", - "dependencies": { - "@types/bn.js": "^4.11.3", - "bn.js": "^4.11.0", - "create-hash": "^1.1.2", - "elliptic": "^6.5.2", - "ethereum-cryptography": "^0.1.3", - "ethjs-util": "0.1.6", - "rlp": "^2.2.3" + "node_modules/form-data-encoder": { + "version": "1.7.1", + "resolved": "https://registry.npmjs.org/form-data-encoder/-/form-data-encoder-1.7.1.tgz", + "integrity": "sha512-EFRDrsMm/kyqbTQocNvRXMLjc7Es2Vk+IQFx/YW7hkUH1eBl4J1fqiP34l74Yt0pFLCNpc06fkbVk00008mzjg==" + }, + "node_modules/forwarded": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", + "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==", + "engines": { + "node": ">= 0.6" } }, - "node_modules/ethereumjs-vm/node_modules/level-codec": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/level-codec/-/level-codec-7.0.1.tgz", - "integrity": "sha512-Ua/R9B9r3RasXdRmOtd+t9TCOEIIlts+TN/7XTT2unhDaL6sJn83S3rUyljbr6lVtw49N3/yA0HHjpV6Kzb2aQ==" + "node_modules/fp-ts": { + "version": "1.19.3", + "resolved": "https://registry.npmjs.org/fp-ts/-/fp-ts-1.19.3.tgz", + "integrity": "sha512-H5KQDspykdHuztLTg+ajGN0Z2qUjcEf3Ybxc6hLt0k7/zPkn29XnKnxlBPyW2XIddWrGaJBzBl4VLYOtk39yZg==" }, - "node_modules/ethereumjs-vm/node_modules/level-errors": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/level-errors/-/level-errors-1.0.5.tgz", - "integrity": "sha512-/cLUpQduF6bNrWuAC4pwtUKA5t669pCsCi2XbmojG2tFeOr9j6ShtdDCtFFQO1DRt+EVZhx9gPzP9G2bUaG4ig==", - "dependencies": { - "errno": "~0.1.1" + "node_modules/fraction.js": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.3.4.tgz", + "integrity": "sha512-pwiTgt0Q7t+GHZA4yaLjObx4vXmmdcS0iSJ19o8d/goUGgItX9UZWKWNnLHehxviD8wU2IWRsnR8cD5+yOJP2Q==", + "engines": { + "node": "*" + }, + "funding": { + "type": "patreon", + "url": "https://github.com/sponsors/rawify" } }, - "node_modules/ethereumjs-vm/node_modules/level-iterator-stream": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/level-iterator-stream/-/level-iterator-stream-1.3.1.tgz", - "integrity": "sha512-1qua0RHNtr4nrZBgYlpV0qHHeHpcRRWTxEZJ8xsemoHAXNL5tbooh4tPEEqIqsbWCAJBmUmkwYK/sW5OrFjWWw==", - "dependencies": { - "inherits": "^2.0.1", - "level-errors": "^1.0.3", - "readable-stream": "^1.0.33", - "xtend": "^4.0.0" + "node_modules/fresh": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", + "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==", + "engines": { + "node": ">= 0.6" } }, - "node_modules/ethereumjs-vm/node_modules/level-iterator-stream/node_modules/isarray": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", - "integrity": "sha512-D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ==" + "node_modules/from-exponential": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/from-exponential/-/from-exponential-1.1.1.tgz", + "integrity": "sha512-VBE7f5OVnYwdgB3LHa+Qo29h8qVpxhVO9Trlc+AWm+/XNAgks1tAwMFHb33mjeiof77GglsJzeYF7OqXrROP/A==" + }, + "node_modules/fs-constants": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz", + "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==", + "optional": true }, - "node_modules/ethereumjs-vm/node_modules/level-iterator-stream/node_modules/readable-stream": { - "version": "1.1.14", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz", - "integrity": "sha512-+MeVjFf4L44XUkhM1eYbD8fyEsxcV81pqMSR5gblfcLCHfZvbrqy4/qYHE+/R5HoBUT11WV5O08Cr1n3YXkWVQ==", + "node_modules/fs-extra": { + "version": "11.2.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.2.0.tgz", + "integrity": "sha512-PmDi3uwK5nFuXh7XDTlVnS17xJS7vW36is2+w3xcv8SVxiB4NyATf4ctkVY5bkSjX0Y4nbvZCq1/EjtEyr9ktw==", "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.1", - "isarray": "0.0.1", - "string_decoder": "~0.10.x" + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=14.14" } }, - "node_modules/ethereumjs-vm/node_modules/level-iterator-stream/node_modules/string_decoder": { - "version": "0.10.31", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", - "integrity": "sha512-ev2QzSzWPYmy9GuqfIVildA4OdcGLeFZQrq5ys6RtiuF+RQQiZWr8TZNyAcuVXyQRYfEO+MsoB/1BuQVhOJuoQ==" + "node_modules/fs-minipass": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-1.2.7.tgz", + "integrity": "sha512-GWSSJGFy4e9GUeCcbIkED+bgAoFyj7XF1mV8rma3QW4NIqX9Kyx79N/PF61H5udOV3aY1IaMLs6pGbH71nlCTA==", + "dependencies": { + "minipass": "^2.6.0" + } }, - "node_modules/ethereumjs-vm/node_modules/level-ws": { - "version": "0.0.0", - "resolved": "https://registry.npmjs.org/level-ws/-/level-ws-0.0.0.tgz", - "integrity": "sha512-XUTaO/+Db51Uiyp/t7fCMGVFOTdtLS/NIACxE/GHsij15mKzxksZifKVjlXDF41JMUP/oM1Oc4YNGdKnc3dVLw==", + "node_modules/fs-minipass/node_modules/minipass": { + "version": "2.9.0", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-2.9.0.tgz", + "integrity": "sha512-wxfUjg9WebH+CUDX/CdbRlh5SmfZiy/hpkxaRI16Y9W56Pa75sWgd/rvFilSgrauD9NyFymP/+JFV3KwzIsJeg==", "dependencies": { - "readable-stream": "~1.0.15", - "xtend": "~2.1.1" + "safe-buffer": "^5.1.2", + "yallist": "^3.0.0" } }, - "node_modules/ethereumjs-vm/node_modules/level-ws/node_modules/isarray": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", - "integrity": "sha512-D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ==" + "node_modules/fs-readdir-recursive": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/fs-readdir-recursive/-/fs-readdir-recursive-1.1.0.tgz", + "integrity": "sha512-GNanXlVr2pf02+sPN40XN8HG+ePaNcvM0q5mZBd668Obwb0yD5GiUbZOFgwn8kGMY6I3mdyDJzieUy3PTYyTRA==" }, - "node_modules/ethereumjs-vm/node_modules/level-ws/node_modules/readable-stream": { - "version": "1.0.34", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz", - "integrity": "sha512-ok1qVCJuRkNmvebYikljxJA/UEsKwLl2nI1OmaqAu4/UE+h0wKCHok4XkL/gvi39OacXvw59RJUOFUkDib2rHg==", - "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.1", - "isarray": "0.0.1", - "string_decoder": "~0.10.x" + "node_modules/fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==" + }, + "node_modules/fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "hasInstallScript": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" } }, - "node_modules/ethereumjs-vm/node_modules/level-ws/node_modules/string_decoder": { - "version": "0.10.31", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", - "integrity": "sha512-ev2QzSzWPYmy9GuqfIVildA4OdcGLeFZQrq5ys6RtiuF+RQQiZWr8TZNyAcuVXyQRYfEO+MsoB/1BuQVhOJuoQ==" + "node_modules/function-bind": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } }, - "node_modules/ethereumjs-vm/node_modules/level-ws/node_modules/xtend": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/xtend/-/xtend-2.1.2.tgz", - "integrity": "sha512-vMNKzr2rHP9Dp/e1NQFnLQlwlhp9L/LfvnsVdHxN1f+uggyVI3i08uD14GPvCToPkdsRfyPqIyYGmIk58V98ZQ==", + "node_modules/function.prototype.name": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.6.tgz", + "integrity": "sha512-Z5kx79swU5P27WEayXM1tBi5Ze/lbIyiNgU3qyXUOf9b2rgXYyF9Dy9Cx+IQv/Lc8WCG6L82zwUPpSS9hGehIg==", + "dev": true, "dependencies": { - "object-keys": "~0.4.0" + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", + "functions-have-names": "^1.2.3" }, "engines": { - "node": ">=0.4" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/ethereumjs-vm/node_modules/levelup": { - "version": "1.3.9", - "resolved": "https://registry.npmjs.org/levelup/-/levelup-1.3.9.tgz", - "integrity": "sha512-VVGHfKIlmw8w1XqpGOAGwq6sZm2WwWLmlDcULkKWQXEA5EopA8OBNJ2Ck2v6bdk8HeEZSbCSEgzXadyQFm76sQ==", - "dependencies": { - "deferred-leveldown": "~1.2.1", - "level-codec": "~7.0.0", - "level-errors": "~1.0.3", - "level-iterator-stream": "~1.3.0", - "prr": "~1.0.1", - "semver": "~5.4.1", - "xtend": "~4.0.0" + "node_modules/functional-red-black-tree": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", + "integrity": "sha512-dsKNQNdj6xA3T+QlADDA7mOSlX0qiMINjn0cgr+eGHGsbSHzTabcIogz2+p/iqP1Xs6EP/sS2SbqH+brGTbq0g==" + }, + "node_modules/functions-have-names": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz", + "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/ethereumjs-vm/node_modules/memdown": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/memdown/-/memdown-1.4.1.tgz", - "integrity": "sha512-iVrGHZB8i4OQfM155xx8akvG9FIj+ht14DX5CQkCTG4EHzZ3d3sgckIf/Lm9ivZalEsFuEVnWv2B2WZvbrro2w==", + "node_modules/gauge": { + "version": "2.7.4", + "resolved": "https://registry.npmjs.org/gauge/-/gauge-2.7.4.tgz", + "integrity": "sha512-14x4kjc6lkD3ltw589k0NrPD6cCNTD6CWoVUNpB85+DrtONoZn+Rug6xZU5RvSC4+TZPxA5AnBibQYAvZn41Hg==", + "optional": true, "dependencies": { - "abstract-leveldown": "~2.7.1", - "functional-red-black-tree": "^1.0.1", - "immediate": "^3.2.3", - "inherits": "~2.0.1", - "ltgt": "~2.2.0", - "safe-buffer": "~5.1.1" + "aproba": "^1.0.3", + "console-control-strings": "^1.0.0", + "has-unicode": "^2.0.0", + "object-assign": "^4.1.0", + "signal-exit": "^3.0.0", + "string-width": "^1.0.1", + "strip-ansi": "^3.0.1", + "wide-align": "^1.1.0" } }, - "node_modules/ethereumjs-vm/node_modules/memdown/node_modules/abstract-leveldown": { - "version": "2.7.2", - "resolved": "https://registry.npmjs.org/abstract-leveldown/-/abstract-leveldown-2.7.2.tgz", - "integrity": "sha512-+OVvxH2rHVEhWLdbudP6p0+dNMXu8JA1CbhP19T8paTYAcX7oJ4OVjT+ZUVpv7mITxXHqDMej+GdqXBmXkw09w==", - "dependencies": { - "xtend": "~4.0.0" + "node_modules/gauge/node_modules/ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA==", + "optional": true, + "engines": { + "node": ">=0.10.0" } }, - "node_modules/ethereumjs-vm/node_modules/merkle-patricia-tree": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/merkle-patricia-tree/-/merkle-patricia-tree-2.3.2.tgz", - "integrity": "sha512-81PW5m8oz/pz3GvsAwbauj7Y00rqm81Tzad77tHBwU7pIAtN+TJnMSOJhxBKflSVYhptMMb9RskhqHqrSm1V+g==", + "node_modules/gauge/node_modules/is-fullwidth-code-point": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", + "integrity": "sha512-1pqUqRjkhPJ9miNq9SwMfdvi6lBJcd6eFxvfaivQhaH3SgisfiuudvFntdKOmxuee/77l+FPjKrQjWvmPjWrRw==", + "optional": true, "dependencies": { - "async": "^1.4.2", - "ethereumjs-util": "^5.0.0", - "level-ws": "0.0.0", - "levelup": "^1.2.1", - "memdown": "^1.0.0", - "readable-stream": "^2.0.0", - "rlp": "^2.0.0", - "semaphore": ">=1.0.1" + "number-is-nan": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" } }, - "node_modules/ethereumjs-vm/node_modules/merkle-patricia-tree/node_modules/async": { - "version": "1.5.2", - "resolved": "https://registry.npmjs.org/async/-/async-1.5.2.tgz", - "integrity": "sha512-nSVgobk4rv61R9PUSDtYt7mPVB2olxNR5RWJcAsH676/ef11bUZwvu7+RGYrYauVdDPcO519v68wRhXQtxsV9w==" + "node_modules/gauge/node_modules/signal-exit": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", + "optional": true }, - "node_modules/ethereumjs-vm/node_modules/merkle-patricia-tree/node_modules/ethereumjs-util": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-5.2.1.tgz", - "integrity": "sha512-v3kT+7zdyCm1HIqWlLNrHGqHGLpGYIhjeHxQjnDXjLT2FyGJDsd3LWMYUo7pAFRrk86CR3nUJfhC81CCoJNNGQ==", + "node_modules/gauge/node_modules/string-width": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", + "integrity": "sha512-0XsVpQLnVCXHJfyEs8tC0zpTVIr5PKKsQtkT29IwupnPTjtPmQ3xT/4yCREF9hYkV/3M3kzcUTSAZT6a6h81tw==", + "optional": true, "dependencies": { - "bn.js": "^4.11.0", - "create-hash": "^1.1.2", - "elliptic": "^6.5.2", - "ethereum-cryptography": "^0.1.3", - "ethjs-util": "^0.1.3", - "rlp": "^2.0.0", - "safe-buffer": "^5.1.1" + "code-point-at": "^1.0.0", + "is-fullwidth-code-point": "^1.0.0", + "strip-ansi": "^3.0.0" + }, + "engines": { + "node": ">=0.10.0" } }, - "node_modules/ethereumjs-vm/node_modules/object-keys": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-0.4.0.tgz", - "integrity": "sha512-ncrLw+X55z7bkl5PnUvHwFK9FcGuFYo9gtjws2XtSzL+aZ8tm830P60WJ0dSmFVaSalWieW5MD7kEdnXda9yJw==" - }, - "node_modules/ethereumjs-vm/node_modules/readable-stream": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "node_modules/gauge/node_modules/strip-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha512-VhumSSbBqDTP8p2ZLKj40UjBCV4+v8bUSEpUb4KjRgWk9pbqGF4REFj6KEagidb2f/M6AzC0EmFyDNGaw9OCzg==", + "optional": true, "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" + "ansi-regex": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" } }, - "node_modules/ethereumjs-vm/node_modules/safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + "node_modules/get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "engines": { + "node": "6.* || 8.* || >= 10.*" + } }, - "node_modules/ethereumjs-vm/node_modules/semver": { - "version": "5.4.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.4.1.tgz", - "integrity": "sha512-WfG/X9+oATh81XtllIo/I8gOiY9EXRdv1cQdyykeXK17YcUW3EXUAi2To4pcH6nZtJPr7ZOpM5OMyWJZm+8Rsg==", - "bin": { - "semver": "bin/semver" + "node_modules/get-func-name": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/get-func-name/-/get-func-name-2.0.2.tgz", + "integrity": "sha512-8vXOvuE167CtIc3OyItco7N/dpRtBbYOsPsXCz7X/PMnlGjYjSGuZJgM1Y7mmew7BKf9BqvLX2tnOVy1BBUsxQ==", + "engines": { + "node": "*" } }, - "node_modules/ethereumjs-vm/node_modules/string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "node_modules/get-intrinsic": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.2.tgz", + "integrity": "sha512-0gSo4ml/0j98Y3lngkFEot/zhiCeWsbYIlZ+uZOVgzLyLaUw7wxUL+nCTP0XJvJg1AXulJRI3UJi8GsbDuxdGA==", "dependencies": { - "safe-buffer": "~5.1.0" + "function-bind": "^1.1.2", + "has-proto": "^1.0.1", + "has-symbols": "^1.0.3", + "hasown": "^2.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/ethers": { - "version": "5.7.2", - "resolved": "https://registry.npmjs.org/ethers/-/ethers-5.7.2.tgz", - "integrity": "sha512-wswUsmWo1aOK8rR7DIKiWSw9DbLWe6x98Jrn8wcTflTVvaXhAMaB5zGAXy0GYQEQp9iO1iSHWVyARQm11zUtyg==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "dependencies": { - "@ethersproject/abi": "5.7.0", - "@ethersproject/abstract-provider": "5.7.0", - "@ethersproject/abstract-signer": "5.7.0", - "@ethersproject/address": "5.7.0", - "@ethersproject/base64": "5.7.0", - "@ethersproject/basex": "5.7.0", - "@ethersproject/bignumber": "5.7.0", - "@ethersproject/bytes": "5.7.0", - "@ethersproject/constants": "5.7.0", - "@ethersproject/contracts": "5.7.0", - "@ethersproject/hash": "5.7.0", - "@ethersproject/hdnode": "5.7.0", - "@ethersproject/json-wallets": "5.7.0", - "@ethersproject/keccak256": "5.7.0", - "@ethersproject/logger": "5.7.0", - "@ethersproject/networks": "5.7.1", - "@ethersproject/pbkdf2": "5.7.0", - "@ethersproject/properties": "5.7.0", - "@ethersproject/providers": "5.7.2", - "@ethersproject/random": "5.7.0", - "@ethersproject/rlp": "5.7.0", - "@ethersproject/sha2": "5.7.0", - "@ethersproject/signing-key": "5.7.0", - "@ethersproject/solidity": "5.7.0", - "@ethersproject/strings": "5.7.0", - "@ethersproject/transactions": "5.7.0", - "@ethersproject/units": "5.7.0", - "@ethersproject/wallet": "5.7.0", - "@ethersproject/web": "5.7.1", - "@ethersproject/wordlists": "5.7.0" + "node_modules/get-port": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/get-port/-/get-port-3.2.0.tgz", + "integrity": "sha512-x5UJKlgeUiNT8nyo/AcnwLnZuZNcSjSw0kogRB+Whd1fjjFq4B1hySFxSFWWSn4mIBzg3sRNUDFYc4g5gjPoLg==", + "engines": { + "node": ">=4" } }, - "node_modules/ethjs-abi": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/ethjs-abi/-/ethjs-abi-0.2.1.tgz", - "integrity": "sha512-g2AULSDYI6nEJyJaEVEXtTimRY2aPC2fi7ddSy0W+LXvEVL8Fe1y76o43ecbgdUKwZD+xsmEgX1yJr1Ia3r1IA==", - "dev": true, - "dependencies": { - "bn.js": "4.11.6", - "js-sha3": "0.5.5", - "number-to-bn": "1.7.0" - }, + "node_modules/get-stdin": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-8.0.0.tgz", + "integrity": "sha512-sY22aA6xchAzprjyqmSEQv4UbAAzRN0L2dQB0NlN5acTTK9Don6nhoc3eAbUnpZiCANAMfd/+40kVdKfFygohg==", + "optional": true, "engines": { - "node": ">=6.5.0", - "npm": ">=3" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/ethjs-abi/node_modules/bn.js": { - "version": "4.11.6", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.6.tgz", - "integrity": "sha512-XWwnNNFCuuSQ0m3r3C4LE3EiORltHd9M05pq6FOlVeiophzRbMo50Sbz1ehl8K3Z+jw9+vmgnXefY1hz8X+2wA==", - "dev": true - }, - "node_modules/ethjs-abi/node_modules/js-sha3": { - "version": "0.5.5", - "resolved": "https://registry.npmjs.org/js-sha3/-/js-sha3-0.5.5.tgz", - "integrity": "sha512-yLLwn44IVeunwjpDVTDZmQeVbB0h+dZpY2eO68B/Zik8hu6dH+rKeLxwua79GGIvW6xr8NBAcrtiUbYrTjEFTA==", - "dev": true - }, - "node_modules/ethjs-unit": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/ethjs-unit/-/ethjs-unit-0.1.6.tgz", - "integrity": "sha512-/Sn9Y0oKl0uqQuvgFk/zQgR7aw1g36qX/jzSQ5lSwlO0GigPymk4eGQfeNTD03w1dPOqfz8V77Cy43jH56pagw==", + "node_modules/get-stream": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", + "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", "dependencies": { - "bn.js": "4.11.6", - "number-to-bn": "1.7.0" + "pump": "^3.0.0" }, "engines": { - "node": ">=6.5.0", - "npm": ">=3" + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/ethjs-unit/node_modules/bn.js": { - "version": "4.11.6", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.6.tgz", - "integrity": "sha512-XWwnNNFCuuSQ0m3r3C4LE3EiORltHd9M05pq6FOlVeiophzRbMo50Sbz1ehl8K3Z+jw9+vmgnXefY1hz8X+2wA==" - }, - "node_modules/ethjs-util": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/ethjs-util/-/ethjs-util-0.1.6.tgz", - "integrity": "sha512-CUnVOQq7gSpDHZVVrQW8ExxUETWrnrvXYvYz55wOU8Uj4VCgw56XC2B/fVqQN+f7gmrnRHSLVnFAwsCuNwji8w==", + "node_modules/get-symbol-description": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.0.tgz", + "integrity": "sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==", + "dev": true, "dependencies": { - "is-hex-prefixed": "1.0.0", - "strip-hex-prefix": "1.0.0" + "call-bind": "^1.0.2", + "get-intrinsic": "^1.1.1" }, "engines": { - "node": ">=6.5.0", - "npm": ">=3" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/event-emitter": { - "version": "0.3.5", - "resolved": "https://registry.npmjs.org/event-emitter/-/event-emitter-0.3.5.tgz", - "integrity": "sha512-D9rRn9y7kLPnJ+hMq7S/nhvoKwwvVJahBi2BPmx3bvbsEdK3W9ii8cBSGjP+72/LnM4n6fo3+dkCX5FeTQruXA==", + "node_modules/getpass": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", + "integrity": "sha512-0fzj9JxOLfJ+XGLhR8ze3unN0KZCgZwiSSDz168VERjK8Wl8kVSdcu2kspd4s4wtAa1y/qrVRiAA0WclVsu0ng==", "dependencies": { - "d": "1", - "es5-ext": "~0.10.14" + "assert-plus": "^1.0.0" } }, - "node_modules/event-target-shim": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/event-target-shim/-/event-target-shim-5.0.1.tgz", - "integrity": "sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==", - "optional": true, + "node_modules/github-from-package": { + "version": "0.0.0", + "resolved": "https://registry.npmjs.org/github-from-package/-/github-from-package-0.0.0.tgz", + "integrity": "sha512-SyHy3T1v2NUXn29OsWdxmK6RwHD+vkj3v8en8AOBZ1wBQ/hCAQ5bAQTD02kW4W9tUp/3Qh6J8r9EvntiyCmOOw==", + "optional": true + }, + "node_modules/glob": { + "version": "10.3.10", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.3.10.tgz", + "integrity": "sha512-fa46+tv1Ak0UPK1TOy/pZrIybNNt4HCv7SDzwyfiOZkvZLEbjsZkJBPtDHVshZjbecAoAGSC20MjLDG/qr679g==", + "peer": true, + "dependencies": { + "foreground-child": "^3.1.0", + "jackspeak": "^2.3.5", + "minimatch": "^9.0.1", + "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0", + "path-scurry": "^1.10.1" + }, + "bin": { + "glob": "dist/esm/bin.mjs" + }, "engines": { - "node": ">=6" + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/eventemitter3": { - "version": "4.0.7", - "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz", - "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==" - }, - "node_modules/events": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", - "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", + "node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dependencies": { + "is-glob": "^4.0.1" + }, "engines": { - "node": ">=0.8.x" + "node": ">= 6" } }, - "node_modules/evm-bn": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/evm-bn/-/evm-bn-1.1.2.tgz", - "integrity": "sha512-Lq8CT1EAjSeN+Yk0h1hpSwnZyMA4Xir6fQD4vlStljAuW2xr7qLOEGDLGsTa9sU2e40EYIumA4wYhMC/e+lyKw==", + "node_modules/glob-promise": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/glob-promise/-/glob-promise-3.4.0.tgz", + "integrity": "sha512-q08RJ6O+eJn+dVanerAndJwIcumgbDdYiUT7zFQl3Wm1xD6fBKtah7H8ZJChj4wP+8C+QfeVy8xautR7rdmKEw==", "dependencies": { - "@ethersproject/bignumber": "^5.5.0", - "from-exponential": "^1.1.1" + "@types/glob": "*" + }, + "engines": { + "node": ">=4" }, "peerDependencies": { - "@ethersproject/bignumber": "5.x" + "glob": "*" } }, - "node_modules/evp_bytestokey": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz", - "integrity": "sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==", + "node_modules/global": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/global/-/global-4.4.0.tgz", + "integrity": "sha512-wv/LAoHdRE3BeTGz53FAamhGlPLhlssK45usmGFThIi4XqnBmjKQ16u+RNbP7WvigRZDxUsM0J3gcQ5yicaL0w==", "dependencies": { - "md5.js": "^1.3.4", - "safe-buffer": "^5.1.1" + "min-document": "^2.19.0", + "process": "^0.11.10" } }, - "node_modules/express": { - "version": "4.18.2", - "resolved": "https://registry.npmjs.org/express/-/express-4.18.2.tgz", - "integrity": "sha512-5/PsL6iGPdfQ/lKM1UuielYgv3BUoJfz1aUwU9vHZ+J7gyvwdQXFEBIEIaxeGf0GIcreATNyBExtalisDbuMqQ==", + "node_modules/globalthis": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.3.tgz", + "integrity": "sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA==", + "dev": true, "dependencies": { - "accepts": "~1.3.8", - "array-flatten": "1.1.1", - "body-parser": "1.20.1", - "content-disposition": "0.5.4", - "content-type": "~1.0.4", - "cookie": "0.5.0", - "cookie-signature": "1.0.6", - "debug": "2.6.9", - "depd": "2.0.0", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "etag": "~1.8.1", - "finalhandler": "1.2.0", - "fresh": "0.5.2", - "http-errors": "2.0.0", - "merge-descriptors": "1.0.1", - "methods": "~1.1.2", - "on-finished": "2.4.1", - "parseurl": "~1.3.3", - "path-to-regexp": "0.1.7", - "proxy-addr": "~2.0.7", - "qs": "6.11.0", - "range-parser": "~1.2.1", - "safe-buffer": "5.2.1", - "send": "0.18.0", - "serve-static": "1.15.0", - "setprototypeof": "1.2.0", - "statuses": "2.0.1", - "type-is": "~1.6.18", - "utils-merge": "1.0.1", - "vary": "~1.1.2" + "define-properties": "^1.1.3" }, "engines": { - "node": ">= 0.10.0" - } - }, - "node_modules/express/node_modules/cookie": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.5.0.tgz", - "integrity": "sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==", - "engines": { - "node": ">= 0.6" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/express/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "node_modules/gopd": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", + "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", "dependencies": { - "ms": "2.0.0" + "get-intrinsic": "^1.1.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/express/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" - }, - "node_modules/ext": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/ext/-/ext-1.7.0.tgz", - "integrity": "sha512-6hxeJYaL110a9b5TEJSj0gojyHQAmA2ch5Os+ySCiA1QGdS697XWY1pzsrSjqA9LDEEgdB/KypIlR59RcLuHYw==", + "node_modules/got": { + "version": "12.1.0", + "resolved": "https://registry.npmjs.org/got/-/got-12.1.0.tgz", + "integrity": "sha512-hBv2ty9QN2RdbJJMK3hesmSkFTjVIHyIDDbssCKnSmq62edGgImJWD10Eb1k77TiV1bxloxqcFAVK8+9pkhOig==", "dependencies": { - "type": "^2.7.2" + "@sindresorhus/is": "^4.6.0", + "@szmarczak/http-timer": "^5.0.1", + "@types/cacheable-request": "^6.0.2", + "@types/responselike": "^1.0.0", + "cacheable-lookup": "^6.0.4", + "cacheable-request": "^7.0.2", + "decompress-response": "^6.0.0", + "form-data-encoder": "1.7.1", + "get-stream": "^6.0.1", + "http2-wrapper": "^2.1.10", + "lowercase-keys": "^3.0.0", + "p-cancelable": "^3.0.0", + "responselike": "^2.0.0" + }, + "engines": { + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sindresorhus/got?sponsor=1" } }, - "node_modules/ext/node_modules/type": { - "version": "2.7.2", - "resolved": "https://registry.npmjs.org/type/-/type-2.7.2.tgz", - "integrity": "sha512-dzlvlNlt6AXU7EBSfpAscydQ7gXB+pPGsPnfJnZpiNJBDj7IaJzQlBZYGdEi4R9HmPdBv2XmWJ6YUtoTa7lmCw==" - }, - "node_modules/extend": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", - "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==" - }, - "node_modules/extract-zip": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extract-zip/-/extract-zip-2.0.1.tgz", - "integrity": "sha512-GDhU9ntwuKyGXdZBUgTIe+vXnWj0fppUEtMDL0+idd5Sta8TGpHssn/eusA9mrPr9qNDym6SxAYZjNvCn/9RBg==", - "optional": true, + "node_modules/got/node_modules/decompress-response": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-6.0.0.tgz", + "integrity": "sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==", "dependencies": { - "debug": "^4.1.1", - "get-stream": "^5.1.0", - "yauzl": "^2.10.0" - }, - "bin": { - "extract-zip": "cli.js" + "mimic-response": "^3.1.0" }, "engines": { - "node": ">= 10.17.0" + "node": ">=10" }, - "optionalDependencies": { - "@types/yauzl": "^2.9.1" + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/extract-zip/node_modules/get-stream": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", - "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", - "optional": true, - "dependencies": { - "pump": "^3.0.0" + "node_modules/got/node_modules/get-stream": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", + "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", + "engines": { + "node": ">=10" }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/got/node_modules/mimic-response": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-3.1.0.tgz", + "integrity": "sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==", "engines": { - "node": ">=8" + "node": ">=10" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/extsprintf": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", - "integrity": "sha512-11Ndz7Nv+mvAC1j0ktTa7fAb0vLyGGX+rMHNBYQviQDGU0Hw7lhctJANqbPhu9nV9/izT/IntTgZ7Im/9LJs9g==", - "engines": [ - "node >=0.6.0" - ] + "node_modules/graceful-fs": { + "version": "4.2.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", + "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==" }, - "node_modules/eyes": { - "version": "0.1.8", - "resolved": "https://registry.npmjs.org/eyes/-/eyes-0.1.8.tgz", - "integrity": "sha512-GipyPsXO1anza0AOZdy69Im7hGFCNB7Y/NGjDlZGJ3GJJLtwNSb2vrzYrTYJRrRloVx7pl+bhUaTB8yiccPvFQ==", + "node_modules/har-schema": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz", + "integrity": "sha512-Oqluz6zhGX8cyRaTQlFMPw80bSJVG2x/cFb8ZPhUILGgHka9SsokCCOQgpveePerqidZOrT14ipqfJb7ILcW5Q==", "engines": { - "node": "> 0.1.90" + "node": ">=4" } }, - "node_modules/fake-merkle-patricia-tree": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/fake-merkle-patricia-tree/-/fake-merkle-patricia-tree-1.0.1.tgz", - "integrity": "sha512-Tgq37lkc9pUIgIKw5uitNUKcgcYL3R6JvXtKQbOf/ZSavXbidsksgp/pAY6p//uhw0I4yoMsvTSovvVIsk/qxA==", + "node_modules/har-validator": { + "version": "5.1.5", + "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.5.tgz", + "integrity": "sha512-nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w==", + "deprecated": "this library is no longer supported", "dependencies": { - "checkpoint-store": "^1.1.0" + "ajv": "^6.12.3", + "har-schema": "^2.0.0" + }, + "engines": { + "node": ">=6" } }, - "node_modules/fast-base64-decode": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fast-base64-decode/-/fast-base64-decode-1.0.0.tgz", - "integrity": "sha512-qwaScUgUGBYeDNRnbc/KyllVU88Jk1pRHPStuF/lO7B0/RTRLj7U0lkdTAutlBblY08rwZDff6tNU9cjv6j//Q==", - "dev": true - }, - "node_modules/fast-check": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/fast-check/-/fast-check-3.1.1.tgz", - "integrity": "sha512-3vtXinVyuUKCKFKYcwXhGE6NtGWkqF8Yh3rvMZNzmwz8EPrgoc/v4pDdLHyLnCyCI5MZpZZkDEwFyXyEONOxpA==", + "node_modules/hardhat": { + "version": "2.19.4", + "resolved": "https://registry.npmjs.org/hardhat/-/hardhat-2.19.4.tgz", + "integrity": "sha512-fTQJpqSt3Xo9Mn/WrdblNGAfcANM6XC3tAEi6YogB4s02DmTf93A8QsGb8uR0KR8TFcpcS8lgiW4ugAIYpnbrQ==", "dependencies": { - "pure-rand": "^5.0.1" + "@ethersproject/abi": "^5.1.2", + "@metamask/eth-sig-util": "^4.0.0", + "@nomicfoundation/ethereumjs-block": "5.0.2", + "@nomicfoundation/ethereumjs-blockchain": "7.0.2", + "@nomicfoundation/ethereumjs-common": "4.0.2", + "@nomicfoundation/ethereumjs-evm": "2.0.2", + "@nomicfoundation/ethereumjs-rlp": "5.0.2", + "@nomicfoundation/ethereumjs-statemanager": "2.0.2", + "@nomicfoundation/ethereumjs-trie": "6.0.2", + "@nomicfoundation/ethereumjs-tx": "5.0.2", + "@nomicfoundation/ethereumjs-util": "9.0.2", + "@nomicfoundation/ethereumjs-vm": "7.0.2", + "@nomicfoundation/solidity-analyzer": "^0.1.0", + "@sentry/node": "^5.18.1", + "@types/bn.js": "^5.1.0", + "@types/lru-cache": "^5.1.0", + "adm-zip": "^0.4.16", + "aggregate-error": "^3.0.0", + "ansi-escapes": "^4.3.0", + "chalk": "^2.4.2", + "chokidar": "^3.4.0", + "ci-info": "^2.0.0", + "debug": "^4.1.1", + "enquirer": "^2.3.0", + "env-paths": "^2.2.0", + "ethereum-cryptography": "^1.0.3", + "ethereumjs-abi": "^0.6.8", + "find-up": "^2.1.0", + "fp-ts": "1.19.3", + "fs-extra": "^7.0.1", + "glob": "7.2.0", + "immutable": "^4.0.0-rc.12", + "io-ts": "1.10.4", + "keccak": "^3.0.2", + "lodash": "^4.17.11", + "mnemonist": "^0.38.0", + "mocha": "^10.0.0", + "p-map": "^4.0.0", + "raw-body": "^2.4.1", + "resolve": "1.17.0", + "semver": "^6.3.0", + "solc": "0.7.3", + "source-map-support": "^0.5.13", + "stacktrace-parser": "^0.1.10", + "tsort": "0.0.1", + "undici": "^5.14.0", + "uuid": "^8.3.2", + "ws": "^7.4.6" }, - "engines": { - "node": ">=8.0.0" + "bin": { + "hardhat": "internal/cli/bootstrap.js" }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/fast-check" + "peerDependencies": { + "ts-node": "*", + "typescript": "*" + }, + "peerDependenciesMeta": { + "ts-node": { + "optional": true + }, + "typescript": { + "optional": true + } } }, - "node_modules/fast-deep-equal": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", - "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==" - }, - "node_modules/fast-json-stable-stringify": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", - "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==" - }, - "node_modules/fast-safe-stringify": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/fast-safe-stringify/-/fast-safe-stringify-2.1.1.tgz", - "integrity": "sha512-W+KJc2dmILlPplD/H4K9l9LcAHAfPtP6BY84uVLXQ6Evcz9Lcg33Y2z1IVblT6xdY54PXYVHEv+0Wpq8Io6zkA==" - }, - "node_modules/fast-stable-stringify": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fast-stable-stringify/-/fast-stable-stringify-1.0.0.tgz", - "integrity": "sha512-wpYMUmFu5f00Sm0cj2pfivpmawLZ0NKdviQ4w9zJeR8JVtOpOxHmLaJuj0vxvGqMJQWyP/COUkF75/57OKyRag==" - }, - "node_modules/fd-slicer": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.1.0.tgz", - "integrity": "sha512-cE1qsB/VwyQozZ+q1dGxR8LBYNZeofhEdUNGSMbQD3Gw2lAzX9Zb3uIU6Ebc/Fmyjo9AWWfnn0AUCHqtevs/8g==", + "node_modules/hardhat-contract-sizer": { + "version": "2.10.0", + "resolved": "https://registry.npmjs.org/hardhat-contract-sizer/-/hardhat-contract-sizer-2.10.0.tgz", + "integrity": "sha512-QiinUgBD5MqJZJh1hl1jc9dNnpJg7eE/w4/4GEnrcmZJJTDbVFNe3+/3Ep24XqISSkYxRz36czcPHKHd/a0dwA==", "dependencies": { - "pend": "~1.2.0" + "chalk": "^4.0.0", + "cli-table3": "^0.6.0", + "strip-ansi": "^6.0.0" + }, + "peerDependencies": { + "hardhat": "^2.0.0" } }, - "node_modules/fetch-cookie": { - "version": "0.11.0", - "resolved": "https://registry.npmjs.org/fetch-cookie/-/fetch-cookie-0.11.0.tgz", - "integrity": "sha512-BQm7iZLFhMWFy5CZ/162sAGjBfdNWb7a8LEqqnzsHFhxT/X/SVj/z2t2nu3aJvjlbQkrAlTUApplPRjWyH4mhA==", - "optional": true, - "dependencies": { - "tough-cookie": "^2.3.3 || ^3.0.1 || ^4.0.0" - }, + "node_modules/hardhat-contract-sizer/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", "engines": { "node": ">=8" } }, - "node_modules/file-type": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/file-type/-/file-type-5.2.0.tgz", - "integrity": "sha512-Iq1nJ6D2+yIO4c8HHg4fyVb8mAJieo1Oloy1mLLaB2PvezNedhBVm+QU7g0qM42aiMbRXTxKKwGD17rjKNJYVQ==", + "node_modules/hardhat-contract-sizer/node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dependencies": { + "ansi-regex": "^5.0.1" + }, "engines": { - "node": ">=4" + "node": ">=8" } }, - "node_modules/file-uri-to-path": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz", - "integrity": "sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==" - }, - "node_modules/file-url": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/file-url/-/file-url-3.0.0.tgz", - "integrity": "sha512-g872QGsHexznxkIAdK8UiZRe7SkE6kvylShU4Nsj8NvfvZag7S0QuQ4IgvPDkk75HxgjIVDwycFTDAgIiO4nDA==", - "optional": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/fill-range": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", - "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", - "dependencies": { - "to-regex-range": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/finalhandler": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.2.0.tgz", - "integrity": "sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==", - "dependencies": { - "debug": "2.6.9", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "on-finished": "2.4.1", - "parseurl": "~1.3.3", - "statuses": "2.0.1", - "unpipe": "~1.0.0" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/finalhandler/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/finalhandler/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" - }, - "node_modules/find-replace": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/find-replace/-/find-replace-3.0.0.tgz", - "integrity": "sha512-6Tb2myMioCAgv5kfvP5/PkZZ/ntTpVK39fHY7WkWBgvbeE+VHd/tZuZ4mrC+bxh4cfOZeYKVPaJIZtZXV7GNCQ==", + "node_modules/hardhat-deploy": { + "version": "0.11.45", + "resolved": "https://registry.npmjs.org/hardhat-deploy/-/hardhat-deploy-0.11.45.tgz", + "integrity": "sha512-aC8UNaq3JcORnEUIwV945iJuvBwi65tjHVDU3v6mOcqik7WAzHVCJ7cwmkkipsHrWysrB5YvGF1q9S1vIph83w==", "dev": true, "dependencies": { - "array-back": "^3.0.1" - }, - "engines": { - "node": ">=4.0.0" - } - }, - "node_modules/find-up": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", - "dependencies": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/find-yarn-workspace-root": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/find-yarn-workspace-root/-/find-yarn-workspace-root-2.0.0.tgz", - "integrity": "sha512-1IMnbjt4KzsQfnhnzNd8wUEgXZ44IzZaZmnLYx7D5FZlaHt2gW20Cri8Q+E/t5tIj4+epTBub+2Zxu/vNILzqQ==", - "dependencies": { - "micromatch": "^4.0.2" - } - }, - "node_modules/flashbots": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/flashbots/-/flashbots-1.0.0.tgz", - "integrity": "sha512-IvF5v/kVCf13ku4ksM7ZjhLWk1oBC4UgwaX7wvOtvttGClgRYGQ/Q/4DpXbdlVsliXNy8PE7/9SMYx9Cv6iICA==" - }, - "node_modules/flat": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz", - "integrity": "sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==", - "bin": { - "flat": "cli.js" + "@ethersproject/abi": "^5.7.0", + "@ethersproject/abstract-signer": "^5.7.0", + "@ethersproject/address": "^5.7.0", + "@ethersproject/bignumber": "^5.7.0", + "@ethersproject/bytes": "^5.7.0", + "@ethersproject/constants": "^5.7.0", + "@ethersproject/contracts": "^5.7.0", + "@ethersproject/providers": "^5.7.2", + "@ethersproject/solidity": "^5.7.0", + "@ethersproject/transactions": "^5.7.0", + "@ethersproject/wallet": "^5.7.0", + "@types/qs": "^6.9.7", + "axios": "^0.21.1", + "chalk": "^4.1.2", + "chokidar": "^3.5.2", + "debug": "^4.3.2", + "enquirer": "^2.3.6", + "ethers": "^5.7.0", + "form-data": "^4.0.0", + "fs-extra": "^10.0.0", + "match-all": "^1.2.6", + "murmur-128": "^0.2.1", + "qs": "^6.9.4", + "zksync-web3": "^0.14.3" } }, - "node_modules/fmix": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/fmix/-/fmix-0.1.0.tgz", - "integrity": "sha512-Y6hyofImk9JdzU8k5INtTXX1cu8LDlePWDFU5sftm9H+zKCr5SGrVjdhkvsim646cw5zD0nADj8oHyXMZmCZ9w==", + "node_modules/hardhat-deploy/node_modules/axios": { + "version": "0.21.4", + "resolved": "https://registry.npmjs.org/axios/-/axios-0.21.4.tgz", + "integrity": "sha512-ut5vewkiu8jjGBdqpM44XxjuCjq9LAKeHVmoVfHVzy8eHgxxq8SbAVQNovDA8mVi05kP0Ea/n/UzcSHcTJQfNg==", "dev": true, "dependencies": { - "imul": "^1.0.0" + "follow-redirects": "^1.14.0" } }, - "node_modules/follow-redirects": { - "version": "1.15.2", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.2.tgz", - "integrity": "sha512-VQLG33o04KaQ8uYi2tVNbdrWp1QWxNNea+nmIB4EVM28v0hmP17z7aG1+wAkNzVq4KeXTq3221ye5qTJP91JwA==", + "node_modules/hardhat-deploy/node_modules/ethers": { + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/ethers/-/ethers-5.7.2.tgz", + "integrity": "sha512-wswUsmWo1aOK8rR7DIKiWSw9DbLWe6x98Jrn8wcTflTVvaXhAMaB5zGAXy0GYQEQp9iO1iSHWVyARQm11zUtyg==", + "dev": true, "funding": [ { "type": "individual", - "url": "https://github.com/sponsors/RubenVerborgh" + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" } ], - "engines": { - "node": ">=4.0" - }, - "peerDependenciesMeta": { - "debug": { - "optional": true - } - } - }, - "node_modules/for-each": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz", - "integrity": "sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==", "dependencies": { - "is-callable": "^1.1.3" - } - }, - "node_modules/foreach": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/foreach/-/foreach-2.0.6.tgz", - "integrity": "sha512-k6GAGDyqLe9JaebCsFCoudPPWfihKu8pylYXRlqP1J7ms39iPoTtk2fviNglIeQEwdh0bQeKJ01ZPyuyQvKzwg==" - }, - "node_modules/forever-agent": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", - "integrity": "sha512-j0KLYPhm6zeac4lz3oJ3o65qvgQCcPubiyotZrXqEaG4hNagNYO8qdlUrX5vwqv9ohqeT/Z3j6+yW067yWWdUw==", - "engines": { - "node": "*" + "@ethersproject/abi": "5.7.0", + "@ethersproject/abstract-provider": "5.7.0", + "@ethersproject/abstract-signer": "5.7.0", + "@ethersproject/address": "5.7.0", + "@ethersproject/base64": "5.7.0", + "@ethersproject/basex": "5.7.0", + "@ethersproject/bignumber": "5.7.0", + "@ethersproject/bytes": "5.7.0", + "@ethersproject/constants": "5.7.0", + "@ethersproject/contracts": "5.7.0", + "@ethersproject/hash": "5.7.0", + "@ethersproject/hdnode": "5.7.0", + "@ethersproject/json-wallets": "5.7.0", + "@ethersproject/keccak256": "5.7.0", + "@ethersproject/logger": "5.7.0", + "@ethersproject/networks": "5.7.1", + "@ethersproject/pbkdf2": "5.7.0", + "@ethersproject/properties": "5.7.0", + "@ethersproject/providers": "5.7.2", + "@ethersproject/random": "5.7.0", + "@ethersproject/rlp": "5.7.0", + "@ethersproject/sha2": "5.7.0", + "@ethersproject/signing-key": "5.7.0", + "@ethersproject/solidity": "5.7.0", + "@ethersproject/strings": "5.7.0", + "@ethersproject/transactions": "5.7.0", + "@ethersproject/units": "5.7.0", + "@ethersproject/wallet": "5.7.0", + "@ethersproject/web": "5.7.1", + "@ethersproject/wordlists": "5.7.0" } }, - "node_modules/form-data": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-3.0.1.tgz", - "integrity": "sha512-RHkBKtLWUVwd7SqRIvCZMEvAMoGUp0XU+seQiZejj0COz3RI3hWP4sCv3gZWWLjJTd7rGwcsF5eKZGii0r/hbg==", + "node_modules/hardhat-deploy/node_modules/fs-extra": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz", + "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==", "dev": true, - "dependencies": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.8", - "mime-types": "^2.1.12" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/form-data-encoder": { - "version": "1.7.1", - "resolved": "https://registry.npmjs.org/form-data-encoder/-/form-data-encoder-1.7.1.tgz", - "integrity": "sha512-EFRDrsMm/kyqbTQocNvRXMLjc7Es2Vk+IQFx/YW7hkUH1eBl4J1fqiP34l74Yt0pFLCNpc06fkbVk00008mzjg==" - }, - "node_modules/forwarded": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", - "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/fp-ts": { - "version": "1.19.3", - "resolved": "https://registry.npmjs.org/fp-ts/-/fp-ts-1.19.3.tgz", - "integrity": "sha512-H5KQDspykdHuztLTg+ajGN0Z2qUjcEf3Ybxc6hLt0k7/zPkn29XnKnxlBPyW2XIddWrGaJBzBl4VLYOtk39yZg==" - }, - "node_modules/fraction.js": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.3.4.tgz", - "integrity": "sha512-pwiTgt0Q7t+GHZA4yaLjObx4vXmmdcS0iSJ19o8d/goUGgItX9UZWKWNnLHehxviD8wU2IWRsnR8cD5+yOJP2Q==", - "engines": { - "node": "*" - }, - "funding": { - "type": "patreon", - "url": "https://github.com/sponsors/rawify" - } - }, - "node_modules/fresh": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", - "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/from-exponential": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/from-exponential/-/from-exponential-1.1.1.tgz", - "integrity": "sha512-VBE7f5OVnYwdgB3LHa+Qo29h8qVpxhVO9Trlc+AWm+/XNAgks1tAwMFHb33mjeiof77GglsJzeYF7OqXrROP/A==" - }, - "node_modules/fs-constants": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz", - "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==" - }, - "node_modules/fs-extra": { - "version": "11.1.1", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.1.1.tgz", - "integrity": "sha512-MGIE4HOvQCeUCzmlHs0vXpih4ysz4wg9qiSAu6cd42lVwPbTM1TjV7RusoyQqMmk/95gdQZX72u+YW+c3eEpFQ==", "dependencies": { "graceful-fs": "^4.2.0", "jsonfile": "^6.0.1", "universalify": "^2.0.0" }, "engines": { - "node": ">=14.14" + "node": ">=12" } }, - "node_modules/fs-minipass": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-1.2.7.tgz", - "integrity": "sha512-GWSSJGFy4e9GUeCcbIkED+bgAoFyj7XF1mV8rma3QW4NIqX9Kyx79N/PF61H5udOV3aY1IaMLs6pGbH71nlCTA==", - "dependencies": { - "minipass": "^2.6.0" + "node_modules/hardhat-deploy/node_modules/zksync-web3": { + "version": "0.14.4", + "resolved": "https://registry.npmjs.org/zksync-web3/-/zksync-web3-0.14.4.tgz", + "integrity": "sha512-kYehMD/S6Uhe1g434UnaMN+sBr9nQm23Ywn0EUP5BfQCsbjcr3ORuS68PosZw8xUTu3pac7G6YMSnNHk+fwzvg==", + "deprecated": "This package has been deprecated in favor of zksync-ethers@5.0.0", + "dev": true, + "peerDependencies": { + "ethers": "^5.7.0" } }, - "node_modules/fs-readdir-recursive": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/fs-readdir-recursive/-/fs-readdir-recursive-1.1.0.tgz", - "integrity": "sha512-GNanXlVr2pf02+sPN40XN8HG+ePaNcvM0q5mZBd668Obwb0yD5GiUbZOFgwn8kGMY6I3mdyDJzieUy3PTYyTRA==" - }, - "node_modules/fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==" - }, - "node_modules/function-bind": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" - }, - "node_modules/function.prototype.name": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.5.tgz", - "integrity": "sha512-uN7m/BzVKQnCUF/iW8jYea67v++2u7m5UgENbHRtdDVclOUP+FMPlCNdmk0h/ysGyo2tavMJEDqJAkJdRa1vMA==", + "node_modules/hardhat-gas-reporter": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/hardhat-gas-reporter/-/hardhat-gas-reporter-1.0.9.tgz", + "integrity": "sha512-INN26G3EW43adGKBNzYWOlI3+rlLnasXTwW79YNnUhXPDa+yHESgt639dJEs37gCjhkbNKcRRJnomXEuMFBXJg==", "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.19.0", - "functions-have-names": "^1.2.2" - }, - "engines": { - "node": ">= 0.4" + "array-uniq": "1.0.3", + "eth-gas-reporter": "^0.2.25", + "sha1": "^1.1.1" }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "peerDependencies": { + "hardhat": "^2.0.2" } }, - "node_modules/functional-red-black-tree": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", - "integrity": "sha512-dsKNQNdj6xA3T+QlADDA7mOSlX0qiMINjn0cgr+eGHGsbSHzTabcIogz2+p/iqP1Xs6EP/sS2SbqH+brGTbq0g==" - }, - "node_modules/functions-have-names": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz", - "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==", - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node_modules/hardhat-spdx-license-identifier": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/hardhat-spdx-license-identifier/-/hardhat-spdx-license-identifier-2.2.0.tgz", + "integrity": "sha512-audxGrmLL/TGr0Ef/p3tEH8frtygCb+9RWbMQtd1w2p5V6HzQsSJUlAJFywZZ/igQ6B1qAKqAbeLePNclEe2Qw==", + "peerDependencies": { + "hardhat": "^2.0.0" } }, - "node_modules/ganache": { - "version": "7.9.1", - "resolved": "https://registry.npmjs.org/ganache/-/ganache-7.9.1.tgz", - "integrity": "sha512-Tqhd4J3cpiLeYTD6ek/zlchSB107IVPMIm4ypyg+xz1sdkeALUnYYZnmY4Bdjqj3i6QwtlZPCu7U4qKy7HlWTA==", - "bundleDependencies": [ - "@trufflesuite/bigint-buffer", - "keccak", - "leveldown", - "secp256k1" - ], - "hasShrinkwrap": true, + "node_modules/hardhat-tracer": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/hardhat-tracer/-/hardhat-tracer-2.7.0.tgz", + "integrity": "sha512-H+30jj6bCyX7NfhY7Umbzq535jhi9Wd5fGNli9qWcQ+5iOB477Nm8XdGtPtgOV1vQ7VQzIwKFzoEbqy+BuxTlg==", "dependencies": { - "@trufflesuite/bigint-buffer": "1.1.10", - "@trufflesuite/uws-js-unofficial": "20.30.0-unofficial.0", - "@types/bn.js": "^5.1.0", - "@types/lru-cache": "5.1.1", - "@types/seedrandom": "3.0.1", - "abstract-level": "1.0.3", - "abstract-leveldown": "7.2.0", - "async-eventemitter": "0.2.4", - "emittery": "0.10.0", - "keccak": "3.0.2", - "leveldown": "6.1.0", - "secp256k1": "4.0.3" - }, - "bin": { - "ganache": "dist/node/cli.js", - "ganache-cli": "dist/node/cli.js" - }, - "optionalDependencies": { - "bufferutil": "4.0.5", - "utf-8-validate": "5.0.7" - } - }, - "node_modules/ganache-core": { - "version": "2.13.2", - "resolved": "https://registry.npmjs.org/ganache-core/-/ganache-core-2.13.2.tgz", - "integrity": "sha512-tIF5cR+ANQz0+3pHWxHjIwHqFXcVo0Mb+kcsNhglNFALcYo49aQpnS9dqHartqPfMFjiHh/qFoD3mYK0d/qGgw==", - "bundleDependencies": [ - "keccak" - ], - "deprecated": "ganache-core is now ganache; visit https://trfl.io/g7 for details", - "hasShrinkwrap": true, - "dependencies": { - "abstract-leveldown": "3.0.0", - "async": "2.6.2", - "bip39": "2.5.0", - "cachedown": "1.0.0", - "clone": "2.1.2", - "debug": "3.2.6", - "encoding-down": "5.0.4", - "eth-sig-util": "3.0.0", - "ethereumjs-abi": "0.6.8", - "ethereumjs-account": "3.0.0", - "ethereumjs-block": "2.2.2", - "ethereumjs-common": "1.5.0", - "ethereumjs-tx": "2.1.2", - "ethereumjs-util": "6.2.1", - "ethereumjs-vm": "4.2.0", - "heap": "0.2.6", - "keccak": "3.0.1", - "level-sublevel": "6.6.4", - "levelup": "3.1.1", - "lodash": "4.17.20", - "lru-cache": "5.1.1", - "merkle-patricia-tree": "3.0.0", - "patch-package": "6.2.2", - "seedrandom": "3.0.1", - "source-map-support": "0.5.12", - "tmp": "0.1.0", - "web3-provider-engine": "14.2.1", - "websocket": "1.0.32" - }, - "engines": { - "node": ">=8.9.0" + "chalk": "^4.1.2", + "debug": "^4.3.4", + "ethers": "^5.6.1" }, - "optionalDependencies": { - "ethereumjs-wallet": "0.6.5", - "web3": "1.2.11" - } - }, - "node_modules/ganache-core/node_modules/@ethersproject/abi": { - "version": "5.0.0-beta.153", - "license": "MIT", - "optional": true, - "dependencies": { - "@ethersproject/address": ">=5.0.0-beta.128", - "@ethersproject/bignumber": ">=5.0.0-beta.130", - "@ethersproject/bytes": ">=5.0.0-beta.129", - "@ethersproject/constants": ">=5.0.0-beta.128", - "@ethersproject/hash": ">=5.0.0-beta.128", - "@ethersproject/keccak256": ">=5.0.0-beta.127", - "@ethersproject/logger": ">=5.0.0-beta.129", - "@ethersproject/properties": ">=5.0.0-beta.131", - "@ethersproject/strings": ">=5.0.0-beta.130" + "peerDependencies": { + "chai": "4.x", + "hardhat": ">=2.16 <3.x" } }, - "node_modules/ganache-core/node_modules/@ethersproject/abstract-provider": { - "version": "5.0.8", + "node_modules/hardhat-tracer/node_modules/ethers": { + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/ethers/-/ethers-5.7.2.tgz", + "integrity": "sha512-wswUsmWo1aOK8rR7DIKiWSw9DbLWe6x98Jrn8wcTflTVvaXhAMaB5zGAXy0GYQEQp9iO1iSHWVyARQm11zUtyg==", "funding": [ { "type": "individual", @@ -13464,1455 +9190,1410 @@ "url": "https://www.buymeacoffee.com/ricmoo" } ], - "license": "MIT", - "optional": true, "dependencies": { - "@ethersproject/bignumber": "^5.0.13", - "@ethersproject/bytes": "^5.0.9", - "@ethersproject/logger": "^5.0.8", - "@ethersproject/networks": "^5.0.7", - "@ethersproject/properties": "^5.0.7", - "@ethersproject/transactions": "^5.0.9", - "@ethersproject/web": "^5.0.12" + "@ethersproject/abi": "5.7.0", + "@ethersproject/abstract-provider": "5.7.0", + "@ethersproject/abstract-signer": "5.7.0", + "@ethersproject/address": "5.7.0", + "@ethersproject/base64": "5.7.0", + "@ethersproject/basex": "5.7.0", + "@ethersproject/bignumber": "5.7.0", + "@ethersproject/bytes": "5.7.0", + "@ethersproject/constants": "5.7.0", + "@ethersproject/contracts": "5.7.0", + "@ethersproject/hash": "5.7.0", + "@ethersproject/hdnode": "5.7.0", + "@ethersproject/json-wallets": "5.7.0", + "@ethersproject/keccak256": "5.7.0", + "@ethersproject/logger": "5.7.0", + "@ethersproject/networks": "5.7.1", + "@ethersproject/pbkdf2": "5.7.0", + "@ethersproject/properties": "5.7.0", + "@ethersproject/providers": "5.7.2", + "@ethersproject/random": "5.7.0", + "@ethersproject/rlp": "5.7.0", + "@ethersproject/sha2": "5.7.0", + "@ethersproject/signing-key": "5.7.0", + "@ethersproject/solidity": "5.7.0", + "@ethersproject/strings": "5.7.0", + "@ethersproject/transactions": "5.7.0", + "@ethersproject/units": "5.7.0", + "@ethersproject/wallet": "5.7.0", + "@ethersproject/web": "5.7.1", + "@ethersproject/wordlists": "5.7.0" } }, - "node_modules/ganache-core/node_modules/@ethersproject/abstract-signer": { - "version": "5.0.10", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "license": "MIT", - "optional": true, + "node_modules/hardhat-watcher": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/hardhat-watcher/-/hardhat-watcher-2.5.0.tgz", + "integrity": "sha512-Su2qcSMIo2YO2PrmJ0/tdkf+6pSt8zf9+4URR5edMVti6+ShI8T3xhPrwugdyTOFuyj8lKHrcTZNKUFYowYiyA==", "dependencies": { - "@ethersproject/abstract-provider": "^5.0.8", - "@ethersproject/bignumber": "^5.0.13", - "@ethersproject/bytes": "^5.0.9", - "@ethersproject/logger": "^5.0.8", - "@ethersproject/properties": "^5.0.7" + "chokidar": "^3.5.3" + }, + "peerDependencies": { + "hardhat": "^2.0.0" } }, - "node_modules/ganache-core/node_modules/@ethersproject/address": { - "version": "5.0.9", + "node_modules/hardhat/node_modules/@noble/hashes": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.2.0.tgz", + "integrity": "sha512-FZfhjEDbT5GRswV3C6uvLPHMiVD6lQBmpoX5+eSiPaMTXte/IKqI5dykDxzZB/WBeK/CDuQRBWarPdi3FNY2zQ==", "funding": [ { "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" + "url": "https://paulmillr.com/funding/" } - ], - "license": "MIT", - "optional": true, - "dependencies": { - "@ethersproject/bignumber": "^5.0.13", - "@ethersproject/bytes": "^5.0.9", - "@ethersproject/keccak256": "^5.0.7", - "@ethersproject/logger": "^5.0.8", - "@ethersproject/rlp": "^5.0.7" - } + ] }, - "node_modules/ganache-core/node_modules/@ethersproject/base64": { - "version": "5.0.7", + "node_modules/hardhat/node_modules/@scure/bip32": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/@scure/bip32/-/bip32-1.1.5.tgz", + "integrity": "sha512-XyNh1rB0SkEqd3tXcXMi+Xe1fvg+kUIcoRIEujP1Jgv7DqW2r9lg3Ah0NkFaCs9sTkQAQA8kw7xiRXzENi9Rtw==", "funding": [ { "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" + "url": "https://paulmillr.com/funding/" } ], - "license": "MIT", - "optional": true, "dependencies": { - "@ethersproject/bytes": "^5.0.9" + "@noble/hashes": "~1.2.0", + "@noble/secp256k1": "~1.7.0", + "@scure/base": "~1.1.0" } }, - "node_modules/ganache-core/node_modules/@ethersproject/bignumber": { - "version": "5.0.13", + "node_modules/hardhat/node_modules/@scure/bip39": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@scure/bip39/-/bip39-1.1.1.tgz", + "integrity": "sha512-t+wDck2rVkh65Hmv280fYdVdY25J9YeEUIgn2LG1WM6gxFkGzcksoDiUkWVpVp3Oex9xGC68JU2dSbUfwZ2jPg==", "funding": [ { "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" + "url": "https://paulmillr.com/funding/" } ], - "license": "MIT", - "optional": true, "dependencies": { - "@ethersproject/bytes": "^5.0.9", - "@ethersproject/logger": "^5.0.8", - "bn.js": "^4.4.0" + "@noble/hashes": "~1.2.0", + "@scure/base": "~1.1.0" } }, - "node_modules/ganache-core/node_modules/@ethersproject/bytes": { - "version": "5.0.9", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "license": "MIT", - "optional": true, + "node_modules/hardhat/node_modules/ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", "dependencies": { - "@ethersproject/logger": "^5.0.8" + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" } }, - "node_modules/ganache-core/node_modules/@ethersproject/constants": { - "version": "5.0.8", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "license": "MIT", - "optional": true, + "node_modules/hardhat/node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", "dependencies": { - "@ethersproject/bignumber": "^5.0.13" + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" } }, - "node_modules/ganache-core/node_modules/@ethersproject/hash": { - "version": "5.0.10", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "license": "MIT", - "optional": true, + "node_modules/hardhat/node_modules/chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", "dependencies": { - "@ethersproject/abstract-signer": "^5.0.10", - "@ethersproject/address": "^5.0.9", - "@ethersproject/bignumber": "^5.0.13", - "@ethersproject/bytes": "^5.0.9", - "@ethersproject/keccak256": "^5.0.7", - "@ethersproject/logger": "^5.0.8", - "@ethersproject/properties": "^5.0.7", - "@ethersproject/strings": "^5.0.8" + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" } }, - "node_modules/ganache-core/node_modules/@ethersproject/keccak256": { - "version": "5.0.7", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "license": "MIT", - "optional": true, + "node_modules/hardhat/node_modules/color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", "dependencies": { - "@ethersproject/bytes": "^5.0.9", - "js-sha3": "0.5.7" + "color-name": "1.1.3" } }, - "node_modules/ganache-core/node_modules/@ethersproject/logger": { - "version": "5.0.8", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "license": "MIT", - "optional": true + "node_modules/hardhat/node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==" }, - "node_modules/ganache-core/node_modules/@ethersproject/networks": { - "version": "5.0.7", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "license": "MIT", - "optional": true, - "dependencies": { - "@ethersproject/logger": "^5.0.8" - } - }, - "node_modules/ganache-core/node_modules/@ethersproject/properties": { - "version": "5.0.7", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "license": "MIT", - "optional": true, - "dependencies": { - "@ethersproject/logger": "^5.0.8" - } - }, - "node_modules/ganache-core/node_modules/@ethersproject/rlp": { - "version": "5.0.7", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "license": "MIT", - "optional": true, - "dependencies": { - "@ethersproject/bytes": "^5.0.9", - "@ethersproject/logger": "^5.0.8" - } + "node_modules/hardhat/node_modules/commander": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/commander/-/commander-3.0.2.tgz", + "integrity": "sha512-Gar0ASD4BDyKC4hl4DwHqDrmvjoxWKZigVnAbn5H1owvm4CxCPdb0HQDehwNYMJpla5+M2tPmPARzhtYuwpHow==" }, - "node_modules/ganache-core/node_modules/@ethersproject/signing-key": { - "version": "5.0.8", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "license": "MIT", - "optional": true, - "dependencies": { - "@ethersproject/bytes": "^5.0.9", - "@ethersproject/logger": "^5.0.8", - "@ethersproject/properties": "^5.0.7", - "elliptic": "6.5.3" + "node_modules/hardhat/node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "engines": { + "node": ">=0.8.0" } }, - "node_modules/ganache-core/node_modules/@ethersproject/strings": { - "version": "5.0.8", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "license": "MIT", - "optional": true, + "node_modules/hardhat/node_modules/ethereum-cryptography": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-1.2.0.tgz", + "integrity": "sha512-6yFQC9b5ug6/17CQpCyE3k9eKBMdhyVjzUy1WkiuY/E4vj/SXDBbCw8QEIaXqf0Mf2SnY6RmpDcwlUmBSS0EJw==", "dependencies": { - "@ethersproject/bytes": "^5.0.9", - "@ethersproject/constants": "^5.0.8", - "@ethersproject/logger": "^5.0.8" + "@noble/hashes": "1.2.0", + "@noble/secp256k1": "1.7.1", + "@scure/bip32": "1.1.5", + "@scure/bip39": "1.1.1" } }, - "node_modules/ganache-core/node_modules/@ethersproject/transactions": { - "version": "5.0.9", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "license": "MIT", - "optional": true, + "node_modules/hardhat/node_modules/find-up": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", + "integrity": "sha512-NWzkk0jSJtTt08+FBFMvXoeZnOJD+jTtsRmBYbAIzJdX6l7dLgR7CTubCM5/eDdPUBvLCeVasP1brfVR/9/EZQ==", "dependencies": { - "@ethersproject/address": "^5.0.9", - "@ethersproject/bignumber": "^5.0.13", - "@ethersproject/bytes": "^5.0.9", - "@ethersproject/constants": "^5.0.8", - "@ethersproject/keccak256": "^5.0.7", - "@ethersproject/logger": "^5.0.8", - "@ethersproject/properties": "^5.0.7", - "@ethersproject/rlp": "^5.0.7", - "@ethersproject/signing-key": "^5.0.8" + "locate-path": "^2.0.0" + }, + "engines": { + "node": ">=4" } }, - "node_modules/ganache-core/node_modules/@ethersproject/web": { - "version": "5.0.12", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "license": "MIT", - "optional": true, + "node_modules/hardhat/node_modules/fs-extra": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-7.0.1.tgz", + "integrity": "sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==", "dependencies": { - "@ethersproject/base64": "^5.0.7", - "@ethersproject/bytes": "^5.0.9", - "@ethersproject/logger": "^5.0.8", - "@ethersproject/properties": "^5.0.7", - "@ethersproject/strings": "^5.0.8" - } - }, - "node_modules/ganache-core/node_modules/@sindresorhus/is": { - "version": "0.14.0", - "license": "MIT", - "optional": true, + "graceful-fs": "^4.1.2", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" + }, "engines": { - "node": ">=6" + "node": ">=6 <7 || >=8" } }, - "node_modules/ganache-core/node_modules/@szmarczak/http-timer": { - "version": "1.1.2", - "license": "MIT", - "optional": true, + "node_modules/hardhat/node_modules/glob": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz", + "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==", "dependencies": { - "defer-to-connect": "^1.0.1" + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" }, "engines": { - "node": ">=6" + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/ganache-core/node_modules/@types/bn.js": { - "version": "4.11.6", - "license": "MIT", - "dependencies": { - "@types/node": "*" + "node_modules/hardhat/node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "engines": { + "node": ">=4" } }, - "node_modules/ganache-core/node_modules/@types/node": { - "version": "14.14.20", - "license": "MIT" - }, - "node_modules/ganache-core/node_modules/@types/pbkdf2": { - "version": "3.1.0", - "license": "MIT", - "dependencies": { - "@types/node": "*" + "node_modules/hardhat/node_modules/jsonfile": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", + "integrity": "sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==", + "optionalDependencies": { + "graceful-fs": "^4.1.6" } }, - "node_modules/ganache-core/node_modules/@types/secp256k1": { - "version": "4.0.1", - "license": "MIT", - "dependencies": { - "@types/node": "*" + "node_modules/hardhat/node_modules/klaw": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/klaw/-/klaw-1.3.1.tgz", + "integrity": "sha512-TED5xi9gGQjGpNnvRWknrwAB1eL5GciPfVFOt3Vk1OJCVDQbzuSfrF3hkUQKlsgKrG1F+0t5W0m+Fje1jIt8rw==", + "optionalDependencies": { + "graceful-fs": "^4.1.9" } }, - "node_modules/ganache-core/node_modules/@yarnpkg/lockfile": { - "version": "1.1.0", - "license": "BSD-2-Clause" - }, - "node_modules/ganache-core/node_modules/abstract-leveldown": { - "version": "3.0.0", - "license": "MIT", + "node_modules/hardhat/node_modules/locate-path": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", + "integrity": "sha512-NCI2kiDkyR7VeEKm27Kda/iQHyKJe1Bu0FlTbYp3CqJu+9IFe9bLyAjMxf5ZDDbEg+iMPzB5zYyUTSm8wVTKmA==", "dependencies": { - "xtend": "~4.0.0" + "p-locate": "^2.0.0", + "path-exists": "^3.0.0" }, "engines": { "node": ">=4" } }, - "node_modules/ganache-core/node_modules/accepts": { - "version": "1.3.7", - "license": "MIT", - "optional": true, + "node_modules/hardhat/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", "dependencies": { - "mime-types": "~2.1.24", - "negotiator": "0.6.2" + "brace-expansion": "^1.1.7" }, "engines": { - "node": ">= 0.6" + "node": "*" } }, - "node_modules/ganache-core/node_modules/aes-js": { - "version": "3.1.2", - "license": "MIT", - "optional": true - }, - "node_modules/ganache-core/node_modules/ajv": { - "version": "6.12.6", - "license": "MIT", + "node_modules/hardhat/node_modules/p-limit": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz", + "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==", "dependencies": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" + "p-try": "^1.0.0" }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" + "engines": { + "node": ">=4" } }, - "node_modules/ganache-core/node_modules/ansi-styles": { - "version": "3.2.1", - "license": "MIT", + "node_modules/hardhat/node_modules/p-locate": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz", + "integrity": "sha512-nQja7m7gSKuewoVRen45CtVfODR3crN3goVQ0DDZ9N3yHxgpkuBhZqsaiotSQRrADUrne346peY7kT3TSACykg==", "dependencies": { - "color-convert": "^1.9.0" + "p-limit": "^1.1.0" }, "engines": { "node": ">=4" } }, - "node_modules/ganache-core/node_modules/arr-diff": { - "version": "4.0.0", - "license": "MIT", + "node_modules/hardhat/node_modules/p-try": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz", + "integrity": "sha512-U1etNYuMJoIz3ZXSrrySFjsXQTWOx2/jdi86L+2pRvph/qMKL6sbcCYdH23fqsbm8TH2Gn0OybpT4eSFlCVHww==", "engines": { - "node": ">=0.10.0" + "node": ">=4" } }, - "node_modules/ganache-core/node_modules/arr-flatten": { - "version": "1.1.0", - "license": "MIT", + "node_modules/hardhat/node_modules/path-exists": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", + "integrity": "sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==", "engines": { - "node": ">=0.10.0" + "node": ">=4" } }, - "node_modules/ganache-core/node_modules/arr-union": { - "version": "3.1.0", - "license": "MIT", + "node_modules/hardhat/node_modules/require-from-string": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", + "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", "engines": { "node": ">=0.10.0" } }, - "node_modules/ganache-core/node_modules/array-flatten": { - "version": "1.1.1", - "license": "MIT", - "optional": true - }, - "node_modules/ganache-core/node_modules/array-unique": { - "version": "0.3.2", - "license": "MIT", - "engines": { - "node": ">=0.10.0" + "node_modules/hardhat/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "bin": { + "semver": "bin/semver.js" } }, - "node_modules/ganache-core/node_modules/asn1": { - "version": "0.2.4", - "license": "MIT", + "node_modules/hardhat/node_modules/solc": { + "version": "0.7.3", + "resolved": "https://registry.npmjs.org/solc/-/solc-0.7.3.tgz", + "integrity": "sha512-GAsWNAjGzIDg7VxzP6mPjdurby3IkGCjQcM8GFYZT6RyaoUZKmMU6Y7YwG+tFGhv7dwZ8rmR4iwFDrrD99JwqA==", "dependencies": { - "safer-buffer": "~2.1.0" + "command-exists": "^1.2.8", + "commander": "3.0.2", + "follow-redirects": "^1.12.1", + "fs-extra": "^0.30.0", + "js-sha3": "0.8.0", + "memorystream": "^0.3.1", + "require-from-string": "^2.0.0", + "semver": "^5.5.0", + "tmp": "0.0.33" + }, + "bin": { + "solcjs": "solcjs" + }, + "engines": { + "node": ">=8.0.0" } }, - "node_modules/ganache-core/node_modules/asn1.js": { - "version": "5.4.1", - "license": "MIT", - "optional": true, + "node_modules/hardhat/node_modules/solc/node_modules/fs-extra": { + "version": "0.30.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-0.30.0.tgz", + "integrity": "sha512-UvSPKyhMn6LEd/WpUaV9C9t3zATuqoqfWc3QdPhPLb58prN9tqYPlPWi8Krxi44loBoUzlobqZ3+8tGpxxSzwA==", "dependencies": { - "bn.js": "^4.0.0", - "inherits": "^2.0.1", - "minimalistic-assert": "^1.0.0", - "safer-buffer": "^2.1.0" + "graceful-fs": "^4.1.2", + "jsonfile": "^2.1.0", + "klaw": "^1.0.0", + "path-is-absolute": "^1.0.0", + "rimraf": "^2.2.8" } }, - "node_modules/ganache-core/node_modules/assert-plus": { - "version": "1.0.0", - "license": "MIT", - "engines": { - "node": ">=0.8" + "node_modules/hardhat/node_modules/solc/node_modules/jsonfile": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-2.4.0.tgz", + "integrity": "sha512-PKllAqbgLgxHaj8TElYymKCAgrASebJrWpTnEkOaTowt23VKXXN0sUeriJ+eh7y6ufb/CC5ap11pz71/cM0hUw==", + "optionalDependencies": { + "graceful-fs": "^4.1.6" } }, - "node_modules/ganache-core/node_modules/assign-symbols": { - "version": "1.0.0", - "license": "MIT", - "engines": { - "node": ">=0.10.0" + "node_modules/hardhat/node_modules/solc/node_modules/semver": { + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", + "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", + "bin": { + "semver": "bin/semver" } }, - "node_modules/ganache-core/node_modules/async": { - "version": "2.6.2", - "license": "MIT", + "node_modules/hardhat/node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", "dependencies": { - "lodash": "^4.17.11" + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" } }, - "node_modules/ganache-core/node_modules/async-eventemitter": { - "version": "0.2.4", - "license": "MIT", - "dependencies": { - "async": "^2.4.0" + "node_modules/hardhat/node_modules/universalify": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", + "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", + "engines": { + "node": ">= 4.0.0" } }, - "node_modules/ganache-core/node_modules/async-limiter": { - "version": "1.0.1", - "license": "MIT" - }, - "node_modules/ganache-core/node_modules/asynckit": { - "version": "0.4.0", - "license": "MIT" - }, - "node_modules/ganache-core/node_modules/atob": { - "version": "2.1.2", - "license": "(MIT OR Apache-2.0)", - "bin": { - "atob": "bin/atob.js" - }, + "node_modules/hardhat/node_modules/ws": { + "version": "7.5.9", + "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.9.tgz", + "integrity": "sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q==", "engines": { - "node": ">= 4.5.0" + "node": ">=8.3.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": "^5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } } }, - "node_modules/ganache-core/node_modules/aws-sign2": { - "version": "0.7.0", - "license": "Apache-2.0", - "engines": { - "node": "*" + "node_modules/has-bigints": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.2.tgz", + "integrity": "sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/ganache-core/node_modules/aws4": { - "version": "1.11.0", - "license": "MIT" + "node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "engines": { + "node": ">=8" + } }, - "node_modules/ganache-core/node_modules/babel-code-frame": { - "version": "6.26.0", - "license": "MIT", + "node_modules/has-property-descriptors": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.1.tgz", + "integrity": "sha512-VsX8eaIewvas0xnvinAe9bw4WfIeODpGYikiWYLH+dma0Jw6KHYqWiWfhQlgOVK8D6PvjubK5Uc4P0iIhIcNVg==", "dependencies": { - "chalk": "^1.1.3", - "esutils": "^2.0.2", - "js-tokens": "^3.0.2" + "get-intrinsic": "^1.2.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/ganache-core/node_modules/babel-code-frame/node_modules/ansi-regex": { - "version": "2.1.1", - "license": "MIT", + "node_modules/has-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.1.tgz", + "integrity": "sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==", "engines": { - "node": ">=0.10.0" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/ganache-core/node_modules/babel-code-frame/node_modules/ansi-styles": { - "version": "2.2.1", - "license": "MIT", + "node_modules/has-symbols": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", + "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", "engines": { - "node": ">=0.10.0" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/ganache-core/node_modules/babel-code-frame/node_modules/chalk": { - "version": "1.1.3", - "license": "MIT", + "node_modules/has-tostringtag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz", + "integrity": "sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==", "dependencies": { - "ansi-styles": "^2.2.1", - "escape-string-regexp": "^1.0.2", - "has-ansi": "^2.0.0", - "strip-ansi": "^3.0.0", - "supports-color": "^2.0.0" + "has-symbols": "^1.0.2" }, "engines": { - "node": ">=0.10.0" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/ganache-core/node_modules/babel-code-frame/node_modules/js-tokens": { - "version": "3.0.2", - "license": "MIT" + "node_modules/has-unicode": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", + "integrity": "sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ==", + "optional": true }, - "node_modules/ganache-core/node_modules/babel-code-frame/node_modules/strip-ansi": { - "version": "3.0.1", - "license": "MIT", + "node_modules/hash-base": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.1.0.tgz", + "integrity": "sha512-1nmYp/rhMDiE7AYkDw+lLwlAzz0AntGIe51F3RfFfEqyQ3feY2eI/NcwC6umIQVOASPMsWJLJScWKSSvzL9IVA==", "dependencies": { - "ansi-regex": "^2.0.0" + "inherits": "^2.0.4", + "readable-stream": "^3.6.0", + "safe-buffer": "^5.2.0" }, "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/ganache-core/node_modules/babel-code-frame/node_modules/supports-color": { - "version": "2.0.0", - "license": "MIT", - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/ganache-core/node_modules/babel-core": { - "version": "6.26.3", - "license": "MIT", - "dependencies": { - "babel-code-frame": "^6.26.0", - "babel-generator": "^6.26.0", - "babel-helpers": "^6.24.1", - "babel-messages": "^6.23.0", - "babel-register": "^6.26.0", - "babel-runtime": "^6.26.0", - "babel-template": "^6.26.0", - "babel-traverse": "^6.26.0", - "babel-types": "^6.26.0", - "babylon": "^6.18.0", - "convert-source-map": "^1.5.1", - "debug": "^2.6.9", - "json5": "^0.5.1", - "lodash": "^4.17.4", - "minimatch": "^3.0.4", - "path-is-absolute": "^1.0.1", - "private": "^0.1.8", - "slash": "^1.0.0", - "source-map": "^0.5.7" + "node": ">=4" } }, - "node_modules/ganache-core/node_modules/babel-core/node_modules/debug": { - "version": "2.6.9", - "license": "MIT", + "node_modules/hash.js": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.7.tgz", + "integrity": "sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==", "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/ganache-core/node_modules/babel-core/node_modules/json5": { - "version": "0.5.1", - "license": "MIT", - "bin": { - "json5": "lib/cli.js" + "inherits": "^2.0.3", + "minimalistic-assert": "^1.0.1" } }, - "node_modules/ganache-core/node_modules/babel-core/node_modules/ms": { + "node_modules/hasown": { "version": "2.0.0", - "license": "MIT" - }, - "node_modules/ganache-core/node_modules/babel-core/node_modules/slash": { - "version": "1.0.0", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/ganache-core/node_modules/babel-generator": { - "version": "6.26.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.0.tgz", + "integrity": "sha512-vUptKVTpIJhcczKBbgnS+RtcuYMB8+oNzPK2/Hp3hanz8JmpATdmmgLgSaadVREkDm+e2giHwY3ZRkyjSIDDFA==", "dependencies": { - "babel-messages": "^6.23.0", - "babel-runtime": "^6.26.0", - "babel-types": "^6.26.0", - "detect-indent": "^4.0.0", - "jsesc": "^1.3.0", - "lodash": "^4.17.4", - "source-map": "^0.5.7", - "trim-right": "^1.0.1" + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" } }, - "node_modules/ganache-core/node_modules/babel-generator/node_modules/jsesc": { - "version": "1.3.0", - "license": "MIT", + "node_modules/he": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", + "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", "bin": { - "jsesc": "bin/jsesc" + "he": "bin/he" } }, - "node_modules/ganache-core/node_modules/babel-helper-builder-binary-assignment-operator-visitor": { - "version": "6.24.1", - "license": "MIT", + "node_modules/header-case": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/header-case/-/header-case-1.0.1.tgz", + "integrity": "sha512-i0q9mkOeSuhXw6bGgiQCCBgY/jlZuV/7dZXyZ9c6LcBrqwvT8eT719E9uxE5LiZftdl+z81Ugbg/VvXV4OJOeQ==", "dependencies": { - "babel-helper-explode-assignable-expression": "^6.24.1", - "babel-runtime": "^6.22.0", - "babel-types": "^6.24.1" + "no-case": "^2.2.0", + "upper-case": "^1.1.3" } }, - "node_modules/ganache-core/node_modules/babel-helper-call-delegate": { - "version": "6.24.1", - "license": "MIT", - "dependencies": { - "babel-helper-hoist-variables": "^6.24.1", - "babel-runtime": "^6.22.0", - "babel-traverse": "^6.24.1", - "babel-types": "^6.24.1" + "node_modules/highlight.js": { + "version": "10.7.3", + "resolved": "https://registry.npmjs.org/highlight.js/-/highlight.js-10.7.3.tgz", + "integrity": "sha512-tzcUFauisWKNHaRkN4Wjl/ZA07gENAjFl3J/c480dprkGTg5EQstgaNFqBfUqCq54kZRIEcreTsAgF/m2quD7A==", + "engines": { + "node": "*" } }, - "node_modules/ganache-core/node_modules/babel-helper-define-map": { - "version": "6.26.0", - "license": "MIT", - "dependencies": { - "babel-helper-function-name": "^6.24.1", - "babel-runtime": "^6.26.0", - "babel-types": "^6.26.0", - "lodash": "^4.17.4" - } + "node_modules/highlightjs-solidity": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/highlightjs-solidity/-/highlightjs-solidity-2.0.6.tgz", + "integrity": "sha512-DySXWfQghjm2l6a/flF+cteroJqD4gI8GSdL4PtvxZSsAHie8m3yVe2JFoRg03ROKT6hp2Lc/BxXkqerNmtQYg==" }, - "node_modules/ganache-core/node_modules/babel-helper-explode-assignable-expression": { - "version": "6.24.1", - "license": "MIT", + "node_modules/hmac-drbg": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz", + "integrity": "sha512-Tti3gMqLdZfhOQY1Mzf/AanLiqh1WTiJgEj26ZuYQ9fbkLomzGchCws4FyrSd4VkpBfiNhaE1On+lOz894jvXg==", "dependencies": { - "babel-runtime": "^6.22.0", - "babel-traverse": "^6.24.1", - "babel-types": "^6.24.1" + "hash.js": "^1.0.3", + "minimalistic-assert": "^1.0.0", + "minimalistic-crypto-utils": "^1.0.1" } }, - "node_modules/ganache-core/node_modules/babel-helper-function-name": { - "version": "6.24.1", - "license": "MIT", - "dependencies": { - "babel-helper-get-function-arity": "^6.24.1", - "babel-runtime": "^6.22.0", - "babel-template": "^6.24.1", - "babel-traverse": "^6.24.1", - "babel-types": "^6.24.1" - } + "node_modules/hosted-git-info": { + "version": "2.8.9", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz", + "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==" }, - "node_modules/ganache-core/node_modules/babel-helper-get-function-arity": { - "version": "6.24.1", - "license": "MIT", + "node_modules/htmlparser2": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-8.0.2.tgz", + "integrity": "sha512-GYdjWKDkbRLkZ5geuHs5NY1puJ+PXwP7+fHPRz06Eirsb9ugf6d8kkXav6ADhcODhFFPMIXyxkxSuMf3D6NCFA==", + "funding": [ + "https://github.com/fb55/htmlparser2?sponsor=1", + { + "type": "github", + "url": "https://github.com/sponsors/fb55" + } + ], "dependencies": { - "babel-runtime": "^6.22.0", - "babel-types": "^6.24.1" + "domelementtype": "^2.3.0", + "domhandler": "^5.0.3", + "domutils": "^3.0.1", + "entities": "^4.4.0" } }, - "node_modules/ganache-core/node_modules/babel-helper-hoist-variables": { - "version": "6.24.1", - "license": "MIT", + "node_modules/http-basic": { + "version": "8.1.3", + "resolved": "https://registry.npmjs.org/http-basic/-/http-basic-8.1.3.tgz", + "integrity": "sha512-/EcDMwJZh3mABI2NhGfHOGOeOZITqfkEO4p/xK+l3NpyncIHUQBoMvCSF/b5GqvKtySC2srL/GGG3+EtlqlmCw==", "dependencies": { - "babel-runtime": "^6.22.0", - "babel-types": "^6.24.1" + "caseless": "^0.12.0", + "concat-stream": "^1.6.2", + "http-response-object": "^3.0.1", + "parse-cache-control": "^1.0.1" + }, + "engines": { + "node": ">=6.0.0" } }, - "node_modules/ganache-core/node_modules/babel-helper-optimise-call-expression": { - "version": "6.24.1", - "license": "MIT", - "dependencies": { - "babel-runtime": "^6.22.0", - "babel-types": "^6.24.1" - } + "node_modules/http-cache-semantics": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.1.tgz", + "integrity": "sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ==" }, - "node_modules/ganache-core/node_modules/babel-helper-regex": { - "version": "6.26.0", - "license": "MIT", + "node_modules/http-errors": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", + "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", "dependencies": { - "babel-runtime": "^6.26.0", - "babel-types": "^6.26.0", - "lodash": "^4.17.4" + "depd": "2.0.0", + "inherits": "2.0.4", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "toidentifier": "1.0.1" + }, + "engines": { + "node": ">= 0.8" } }, - "node_modules/ganache-core/node_modules/babel-helper-remap-async-to-generator": { - "version": "6.24.1", - "license": "MIT", - "dependencies": { - "babel-helper-function-name": "^6.24.1", - "babel-runtime": "^6.22.0", - "babel-template": "^6.24.1", - "babel-traverse": "^6.24.1", - "babel-types": "^6.24.1" - } + "node_modules/http-https": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/http-https/-/http-https-1.0.0.tgz", + "integrity": "sha512-o0PWwVCSp3O0wS6FvNr6xfBCHgt0m1tvPLFOCc2iFDKTRAXhB7m8klDf7ErowFH8POa6dVdGatKU5I1YYwzUyg==" }, - "node_modules/ganache-core/node_modules/babel-helper-replace-supers": { - "version": "6.24.1", - "license": "MIT", + "node_modules/http-response-object": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/http-response-object/-/http-response-object-3.0.2.tgz", + "integrity": "sha512-bqX0XTF6fnXSQcEJ2Iuyr75yVakyjIDCqroJQ/aHfSdlM743Cwqoi2nDYMzLGWUcuTWGWy8AAvOKXTfiv6q9RA==", "dependencies": { - "babel-helper-optimise-call-expression": "^6.24.1", - "babel-messages": "^6.23.0", - "babel-runtime": "^6.22.0", - "babel-template": "^6.24.1", - "babel-traverse": "^6.24.1", - "babel-types": "^6.24.1" + "@types/node": "^10.0.3" } }, - "node_modules/ganache-core/node_modules/babel-helpers": { - "version": "6.24.1", - "license": "MIT", - "dependencies": { - "babel-runtime": "^6.22.0", - "babel-template": "^6.24.1" - } + "node_modules/http-response-object/node_modules/@types/node": { + "version": "10.17.60", + "resolved": "https://registry.npmjs.org/@types/node/-/node-10.17.60.tgz", + "integrity": "sha512-F0KIgDJfy2nA3zMLmWGKxcH2ZVEtCZXHHdOQs2gSaQ27+lNeEfGxzkIw90aXswATX7AZ33tahPbzy6KAfUreVw==" }, - "node_modules/ganache-core/node_modules/babel-messages": { - "version": "6.23.0", - "license": "MIT", + "node_modules/http-signature": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", + "integrity": "sha512-CAbnr6Rz4CYQkLYUtSNXxQPUH2gK8f3iWexVlsnMeD+GjlsQ0Xsy1cOX+mN3dtxYomRy21CiOzU8Uhw6OwncEQ==", "dependencies": { - "babel-runtime": "^6.22.0" + "assert-plus": "^1.0.0", + "jsprim": "^1.2.2", + "sshpk": "^1.7.0" + }, + "engines": { + "node": ">=0.8", + "npm": ">=1.3.7" } }, - "node_modules/ganache-core/node_modules/babel-plugin-check-es2015-constants": { - "version": "6.22.0", - "license": "MIT", + "node_modules/http2-wrapper": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/http2-wrapper/-/http2-wrapper-2.2.1.tgz", + "integrity": "sha512-V5nVw1PAOgfI3Lmeaj2Exmeg7fenjhRUgz1lPSezy1CuhPYbgQtbQj4jZfEAEMlaL+vupsvhjqCyjzob0yxsmQ==", "dependencies": { - "babel-runtime": "^6.22.0" + "quick-lru": "^5.1.1", + "resolve-alpn": "^1.2.0" + }, + "engines": { + "node": ">=10.19.0" } }, - "node_modules/ganache-core/node_modules/babel-plugin-syntax-async-functions": { - "version": "6.13.0", - "license": "MIT" - }, - "node_modules/ganache-core/node_modules/babel-plugin-syntax-exponentiation-operator": { - "version": "6.13.0", - "license": "MIT" - }, - "node_modules/ganache-core/node_modules/babel-plugin-syntax-trailing-function-commas": { - "version": "6.22.0", - "license": "MIT" + "node_modules/https": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/https/-/https-1.0.0.tgz", + "integrity": "sha512-4EC57ddXrkaF0x83Oj8sM6SLQHAWXw90Skqu2M4AEWENZ3F02dFJE/GARA8igO79tcgYqGrD7ae4f5L3um2lgg==" }, - "node_modules/ganache-core/node_modules/babel-plugin-transform-async-to-generator": { - "version": "6.24.1", - "license": "MIT", + "node_modules/https-proxy-agent": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", + "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==", "dependencies": { - "babel-helper-remap-async-to-generator": "^6.24.1", - "babel-plugin-syntax-async-functions": "^6.8.0", - "babel-runtime": "^6.22.0" + "agent-base": "6", + "debug": "4" + }, + "engines": { + "node": ">= 6" } }, - "node_modules/ganache-core/node_modules/babel-plugin-transform-es2015-arrow-functions": { - "version": "6.22.0", - "license": "MIT", + "node_modules/iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", "dependencies": { - "babel-runtime": "^6.22.0" + "safer-buffer": ">= 2.1.2 < 3" + }, + "engines": { + "node": ">=0.10.0" } }, - "node_modules/ganache-core/node_modules/babel-plugin-transform-es2015-block-scoped-functions": { - "version": "6.22.0", - "license": "MIT", + "node_modules/idna-uts46-hx": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/idna-uts46-hx/-/idna-uts46-hx-2.3.1.tgz", + "integrity": "sha512-PWoF9Keq6laYdIRwwCdhTPl60xRqAloYNMQLiyUnG42VjT53oW07BXIRM+NK7eQjzXjAk2gUvX9caRxlnF9TAA==", "dependencies": { - "babel-runtime": "^6.22.0" + "punycode": "2.1.0" + }, + "engines": { + "node": ">=4.0.0" } }, - "node_modules/ganache-core/node_modules/babel-plugin-transform-es2015-block-scoping": { - "version": "6.26.0", - "license": "MIT", - "dependencies": { - "babel-runtime": "^6.26.0", - "babel-template": "^6.26.0", - "babel-traverse": "^6.26.0", - "babel-types": "^6.26.0", - "lodash": "^4.17.4" - } + "node_modules/ieee754": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", + "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] }, - "node_modules/ganache-core/node_modules/babel-plugin-transform-es2015-classes": { - "version": "6.24.1", - "license": "MIT", - "dependencies": { - "babel-helper-define-map": "^6.24.1", - "babel-helper-function-name": "^6.24.1", - "babel-helper-optimise-call-expression": "^6.24.1", - "babel-helper-replace-supers": "^6.24.1", - "babel-messages": "^6.23.0", - "babel-runtime": "^6.22.0", - "babel-template": "^6.24.1", - "babel-traverse": "^6.24.1", - "babel-types": "^6.24.1" - } + "node_modules/immediate": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/immediate/-/immediate-3.3.0.tgz", + "integrity": "sha512-HR7EVodfFUdQCTIeySw+WDRFJlPcLOJbXfwwZ7Oom6tjsvZ3bOkCDJHehQC3nxJrv7+f9XecwazynjU8e4Vw3Q==" }, - "node_modules/ganache-core/node_modules/babel-plugin-transform-es2015-computed-properties": { - "version": "6.24.1", - "license": "MIT", - "dependencies": { - "babel-runtime": "^6.22.0", - "babel-template": "^6.24.1" - } + "node_modules/immutable": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/immutable/-/immutable-4.3.4.tgz", + "integrity": "sha512-fsXeu4J4i6WNWSikpI88v/PcVflZz+6kMhUfIwc5SY+poQRPnaf5V7qds6SUyUN3cVxEzuCab7QIoLOQ+DQ1wA==" }, - "node_modules/ganache-core/node_modules/babel-plugin-transform-es2015-destructuring": { - "version": "6.23.0", - "license": "MIT", - "dependencies": { - "babel-runtime": "^6.22.0" + "node_modules/imul": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/imul/-/imul-1.0.1.tgz", + "integrity": "sha512-WFAgfwPLAjU66EKt6vRdTlKj4nAgIDQzh29JonLa4Bqtl6D8JrIMvWjCnx7xEjVNmP3U0fM5o8ZObk7d0f62bA==", + "dev": true, + "engines": { + "node": ">=0.10.0" } }, - "node_modules/ganache-core/node_modules/babel-plugin-transform-es2015-duplicate-keys": { - "version": "6.24.1", - "license": "MIT", - "dependencies": { - "babel-runtime": "^6.22.0", - "babel-types": "^6.24.1" + "node_modules/indent-string": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", + "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", + "engines": { + "node": ">=8" } }, - "node_modules/ganache-core/node_modules/babel-plugin-transform-es2015-for-of": { - "version": "6.23.0", - "license": "MIT", + "node_modules/inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", "dependencies": { - "babel-runtime": "^6.22.0" + "once": "^1.3.0", + "wrappy": "1" } }, - "node_modules/ganache-core/node_modules/babel-plugin-transform-es2015-function-name": { - "version": "6.24.1", - "license": "MIT", - "dependencies": { - "babel-helper-function-name": "^6.24.1", - "babel-runtime": "^6.22.0", - "babel-types": "^6.24.1" - } + "node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" }, - "node_modules/ganache-core/node_modules/babel-plugin-transform-es2015-literals": { - "version": "6.22.0", - "license": "MIT", - "dependencies": { - "babel-runtime": "^6.22.0" - } + "node_modules/ini": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", + "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", + "optional": true }, - "node_modules/ganache-core/node_modules/babel-plugin-transform-es2015-modules-amd": { - "version": "6.24.1", - "license": "MIT", + "node_modules/internal-slot": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.6.tgz", + "integrity": "sha512-Xj6dv+PsbtwyPpEflsejS+oIZxmMlV44zAhG479uYu89MsjcYOhCFnNyKrkJrihbsiasQyY0afoCl/9BLR65bg==", + "dev": true, "dependencies": { - "babel-plugin-transform-es2015-modules-commonjs": "^6.24.1", - "babel-runtime": "^6.22.0", - "babel-template": "^6.24.1" + "get-intrinsic": "^1.2.2", + "hasown": "^2.0.0", + "side-channel": "^1.0.4" + }, + "engines": { + "node": ">= 0.4" } }, - "node_modules/ganache-core/node_modules/babel-plugin-transform-es2015-modules-commonjs": { - "version": "6.26.2", - "license": "MIT", + "node_modules/invariant": { + "version": "2.2.4", + "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz", + "integrity": "sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==", "dependencies": { - "babel-plugin-transform-strict-mode": "^6.24.1", - "babel-runtime": "^6.26.0", - "babel-template": "^6.26.0", - "babel-types": "^6.26.0" + "loose-envify": "^1.0.0" } }, - "node_modules/ganache-core/node_modules/babel-plugin-transform-es2015-modules-systemjs": { - "version": "6.24.1", - "license": "MIT", - "dependencies": { - "babel-helper-hoist-variables": "^6.24.1", - "babel-runtime": "^6.22.0", - "babel-template": "^6.24.1" + "node_modules/invert-kv": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/invert-kv/-/invert-kv-1.0.0.tgz", + "integrity": "sha512-xgs2NH9AE66ucSq4cNG1nhSFghr5l6tdL15Pk+jl46bmmBapgoaY/AacXyaDznAqmGL99TiLSQgO/XazFSKYeQ==", + "engines": { + "node": ">=0.10.0" } }, - "node_modules/ganache-core/node_modules/babel-plugin-transform-es2015-modules-umd": { - "version": "6.24.1", - "license": "MIT", + "node_modules/io-ts": { + "version": "1.10.4", + "resolved": "https://registry.npmjs.org/io-ts/-/io-ts-1.10.4.tgz", + "integrity": "sha512-b23PteSnYXSONJ6JQXRAlvJhuw8KOtkqa87W4wDtvMrud/DTJd5X+NpOOI+O/zZwVq6v0VLAaJ+1EDViKEuN9g==", "dependencies": { - "babel-plugin-transform-es2015-modules-amd": "^6.24.1", - "babel-runtime": "^6.22.0", - "babel-template": "^6.24.1" + "fp-ts": "^1.0.0" } }, - "node_modules/ganache-core/node_modules/babel-plugin-transform-es2015-object-super": { - "version": "6.24.1", - "license": "MIT", - "dependencies": { - "babel-helper-replace-supers": "^6.24.1", - "babel-runtime": "^6.22.0" + "node_modules/ipaddr.js": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", + "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", + "engines": { + "node": ">= 0.10" } }, - "node_modules/ganache-core/node_modules/babel-plugin-transform-es2015-parameters": { - "version": "6.24.1", - "license": "MIT", + "node_modules/is-arguments": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.1.1.tgz", + "integrity": "sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==", "dependencies": { - "babel-helper-call-delegate": "^6.24.1", - "babel-helper-get-function-arity": "^6.24.1", - "babel-runtime": "^6.22.0", - "babel-template": "^6.24.1", - "babel-traverse": "^6.24.1", - "babel-types": "^6.24.1" + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/ganache-core/node_modules/babel-plugin-transform-es2015-shorthand-properties": { - "version": "6.24.1", - "license": "MIT", + "node_modules/is-array-buffer": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.2.tgz", + "integrity": "sha512-y+FyyR/w8vfIRq4eQcM1EYgSTnmHXPqaF+IgzgraytCFq5Xh8lllDVmAZolPJiZttZLeFSINPYMaEJ7/vWUa1w==", + "dev": true, "dependencies": { - "babel-runtime": "^6.22.0", - "babel-types": "^6.24.1" + "call-bind": "^1.0.2", + "get-intrinsic": "^1.2.0", + "is-typed-array": "^1.1.10" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/ganache-core/node_modules/babel-plugin-transform-es2015-spread": { - "version": "6.22.0", - "license": "MIT", - "dependencies": { - "babel-runtime": "^6.22.0" - } + "node_modules/is-arrayish": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", + "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==" }, - "node_modules/ganache-core/node_modules/babel-plugin-transform-es2015-sticky-regex": { - "version": "6.24.1", - "license": "MIT", + "node_modules/is-bigint": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz", + "integrity": "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==", + "dev": true, "dependencies": { - "babel-helper-regex": "^6.24.1", - "babel-runtime": "^6.22.0", - "babel-types": "^6.24.1" + "has-bigints": "^1.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/ganache-core/node_modules/babel-plugin-transform-es2015-template-literals": { - "version": "6.22.0", - "license": "MIT", + "node_modules/is-binary-path": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", "dependencies": { - "babel-runtime": "^6.22.0" + "binary-extensions": "^2.0.0" + }, + "engines": { + "node": ">=8" } }, - "node_modules/ganache-core/node_modules/babel-plugin-transform-es2015-typeof-symbol": { - "version": "6.23.0", - "license": "MIT", + "node_modules/is-boolean-object": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz", + "integrity": "sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==", + "dev": true, "dependencies": { - "babel-runtime": "^6.22.0" + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/ganache-core/node_modules/babel-plugin-transform-es2015-unicode-regex": { - "version": "6.24.1", - "license": "MIT", - "dependencies": { - "babel-helper-regex": "^6.24.1", - "babel-runtime": "^6.22.0", - "regexpu-core": "^2.0.0" + "node_modules/is-buffer": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-2.0.5.tgz", + "integrity": "sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "engines": { + "node": ">=4" } }, - "node_modules/ganache-core/node_modules/babel-plugin-transform-exponentiation-operator": { - "version": "6.24.1", - "license": "MIT", - "dependencies": { - "babel-helper-builder-binary-assignment-operator-visitor": "^6.24.1", - "babel-plugin-syntax-exponentiation-operator": "^6.8.0", - "babel-runtime": "^6.22.0" + "node_modules/is-callable": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz", + "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/ganache-core/node_modules/babel-plugin-transform-regenerator": { - "version": "6.26.0", - "license": "MIT", + "node_modules/is-ci": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-2.0.0.tgz", + "integrity": "sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w==", "dependencies": { - "regenerator-transform": "^0.10.0" + "ci-info": "^2.0.0" + }, + "bin": { + "is-ci": "bin.js" } }, - "node_modules/ganache-core/node_modules/babel-plugin-transform-strict-mode": { - "version": "6.24.1", - "license": "MIT", + "node_modules/is-date-object": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz", + "integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==", + "dev": true, "dependencies": { - "babel-runtime": "^6.22.0", - "babel-types": "^6.24.1" + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/ganache-core/node_modules/babel-preset-env": { - "version": "1.7.0", - "license": "MIT", - "dependencies": { - "babel-plugin-check-es2015-constants": "^6.22.0", - "babel-plugin-syntax-trailing-function-commas": "^6.22.0", - "babel-plugin-transform-async-to-generator": "^6.22.0", - "babel-plugin-transform-es2015-arrow-functions": "^6.22.0", - "babel-plugin-transform-es2015-block-scoped-functions": "^6.22.0", - "babel-plugin-transform-es2015-block-scoping": "^6.23.0", - "babel-plugin-transform-es2015-classes": "^6.23.0", - "babel-plugin-transform-es2015-computed-properties": "^6.22.0", - "babel-plugin-transform-es2015-destructuring": "^6.23.0", - "babel-plugin-transform-es2015-duplicate-keys": "^6.22.0", - "babel-plugin-transform-es2015-for-of": "^6.23.0", - "babel-plugin-transform-es2015-function-name": "^6.22.0", - "babel-plugin-transform-es2015-literals": "^6.22.0", - "babel-plugin-transform-es2015-modules-amd": "^6.22.0", - "babel-plugin-transform-es2015-modules-commonjs": "^6.23.0", - "babel-plugin-transform-es2015-modules-systemjs": "^6.23.0", - "babel-plugin-transform-es2015-modules-umd": "^6.23.0", - "babel-plugin-transform-es2015-object-super": "^6.22.0", - "babel-plugin-transform-es2015-parameters": "^6.23.0", - "babel-plugin-transform-es2015-shorthand-properties": "^6.22.0", - "babel-plugin-transform-es2015-spread": "^6.22.0", - "babel-plugin-transform-es2015-sticky-regex": "^6.22.0", - "babel-plugin-transform-es2015-template-literals": "^6.22.0", - "babel-plugin-transform-es2015-typeof-symbol": "^6.23.0", - "babel-plugin-transform-es2015-unicode-regex": "^6.22.0", - "babel-plugin-transform-exponentiation-operator": "^6.22.0", - "babel-plugin-transform-regenerator": "^6.22.0", - "browserslist": "^3.2.6", - "invariant": "^2.2.2", - "semver": "^5.3.0" - } - }, - "node_modules/ganache-core/node_modules/babel-preset-env/node_modules/semver": { - "version": "5.7.1", - "license": "ISC", + "node_modules/is-docker": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz", + "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==", "bin": { - "semver": "bin/semver" + "is-docker": "cli.js" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/ganache-core/node_modules/babel-register": { - "version": "6.26.0", - "license": "MIT", - "dependencies": { - "babel-core": "^6.26.0", - "babel-runtime": "^6.26.0", - "core-js": "^2.5.0", - "home-or-tmp": "^2.0.0", - "lodash": "^4.17.4", - "mkdirp": "^0.5.1", - "source-map-support": "^0.4.15" + "node_modules/is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "engines": { + "node": ">=0.10.0" } }, - "node_modules/ganache-core/node_modules/babel-register/node_modules/source-map-support": { - "version": "0.4.18", - "license": "MIT", - "dependencies": { - "source-map": "^0.5.6" + "node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "engines": { + "node": ">=8" } }, - "node_modules/ganache-core/node_modules/babel-runtime": { - "version": "6.26.0", - "license": "MIT", + "node_modules/is-function": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-function/-/is-function-1.0.2.tgz", + "integrity": "sha512-lw7DUp0aWXYg+CBCN+JKkcE0Q2RayZnSvnZBlwgxHBQhqt5pZNVy4Ri7H9GmmXkdu7LUthszM+Tor1u/2iBcpQ==" + }, + "node_modules/is-generator-function": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.0.10.tgz", + "integrity": "sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A==", "dependencies": { - "core-js": "^2.4.0", - "regenerator-runtime": "^0.11.0" + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/ganache-core/node_modules/babel-template": { - "version": "6.26.0", - "license": "MIT", + "node_modules/is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", "dependencies": { - "babel-runtime": "^6.26.0", - "babel-traverse": "^6.26.0", - "babel-types": "^6.26.0", - "babylon": "^6.18.0", - "lodash": "^4.17.4" + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" } }, - "node_modules/ganache-core/node_modules/babel-traverse": { - "version": "6.26.0", - "license": "MIT", - "dependencies": { - "babel-code-frame": "^6.26.0", - "babel-messages": "^6.23.0", - "babel-runtime": "^6.26.0", - "babel-types": "^6.26.0", - "babylon": "^6.18.0", - "debug": "^2.6.8", - "globals": "^9.18.0", - "invariant": "^2.2.2", - "lodash": "^4.17.4" + "node_modules/is-hex-prefixed": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-hex-prefixed/-/is-hex-prefixed-1.0.0.tgz", + "integrity": "sha512-WvtOiug1VFrE9v1Cydwm+FnXd3+w9GaeVUss5W4v/SLy3UW00vP+6iNF2SdnfiBoLy4bTqVdkftNGTUeOFVsbA==", + "engines": { + "node": ">=6.5.0", + "npm": ">=3" } }, - "node_modules/ganache-core/node_modules/babel-traverse/node_modules/debug": { - "version": "2.6.9", - "license": "MIT", + "node_modules/is-lower-case": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/is-lower-case/-/is-lower-case-1.1.3.tgz", + "integrity": "sha512-+5A1e/WJpLLXZEDlgz4G//WYSHyQBD32qa4Jd3Lw06qQlv3fJHnp3YIHjTQSGzHMgzmVKz2ZP3rBxTHkPw/lxA==", "dependencies": { - "ms": "2.0.0" + "lower-case": "^1.1.0" } }, - "node_modules/ganache-core/node_modules/babel-traverse/node_modules/globals": { - "version": "9.18.0", - "license": "MIT", + "node_modules/is-negative-zero": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.2.tgz", + "integrity": "sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==", + "dev": true, "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/ganache-core/node_modules/babel-traverse/node_modules/ms": { - "version": "2.0.0", - "license": "MIT" - }, - "node_modules/ganache-core/node_modules/babel-types": { - "version": "6.26.0", - "license": "MIT", - "dependencies": { - "babel-runtime": "^6.26.0", - "esutils": "^2.0.2", - "lodash": "^4.17.4", - "to-fast-properties": "^1.0.3" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/ganache-core/node_modules/babel-types/node_modules/to-fast-properties": { - "version": "1.0.3", - "license": "MIT", + "node_modules/is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", "engines": { - "node": ">=0.10.0" + "node": ">=0.12.0" } }, - "node_modules/ganache-core/node_modules/babelify": { - "version": "7.3.0", - "license": "MIT", + "node_modules/is-number-object": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.7.tgz", + "integrity": "sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==", + "dev": true, "dependencies": { - "babel-core": "^6.0.14", - "object-assign": "^4.0.0" + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/ganache-core/node_modules/babylon": { - "version": "6.18.0", - "license": "MIT", - "bin": { - "babylon": "bin/babylon.js" + "node_modules/is-plain-obj": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz", + "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==", + "engines": { + "node": ">=8" } }, - "node_modules/ganache-core/node_modules/backoff": { - "version": "2.5.0", - "license": "MIT", + "node_modules/is-regex": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", + "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==", + "dev": true, "dependencies": { - "precond": "0.2" + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" }, "engines": { - "node": ">= 0.6" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/ganache-core/node_modules/balanced-match": { - "version": "1.0.0", - "license": "MIT" - }, - "node_modules/ganache-core/node_modules/base": { - "version": "0.11.2", - "license": "MIT", + "node_modules/is-shared-array-buffer": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz", + "integrity": "sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==", + "dev": true, "dependencies": { - "cache-base": "^1.0.1", - "class-utils": "^0.3.5", - "component-emitter": "^1.2.1", - "define-property": "^1.0.0", - "isobject": "^3.0.1", - "mixin-deep": "^1.2.0", - "pascalcase": "^0.1.1" + "call-bind": "^1.0.2" }, - "engines": { - "node": ">=0.10.0" + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/ganache-core/node_modules/base-x": { - "version": "3.0.8", - "license": "MIT", + "node_modules/is-string": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz", + "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==", + "dev": true, "dependencies": { - "safe-buffer": "^5.0.1" + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/ganache-core/node_modules/base/node_modules/define-property": { - "version": "1.0.0", - "license": "MIT", + "node_modules/is-symbol": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz", + "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==", + "dev": true, "dependencies": { - "is-descriptor": "^1.0.0" + "has-symbols": "^1.0.2" }, "engines": { - "node": ">=0.10.0" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/ganache-core/node_modules/base64-js": { - "version": "1.5.1", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "license": "MIT" - }, - "node_modules/ganache-core/node_modules/bcrypt-pbkdf": { - "version": "1.0.2", - "license": "BSD-3-Clause", + "node_modules/is-typed-array": { + "version": "1.1.12", + "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.12.tgz", + "integrity": "sha512-Z14TF2JNG8Lss5/HMqt0//T9JeHXttXy5pH/DBU4vi98ozO2btxzq9MwYDZYnKwU8nRsz/+GVFVRDq3DkVuSPg==", "dependencies": { - "tweetnacl": "^0.14.3" + "which-typed-array": "^1.1.11" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/ganache-core/node_modules/bcrypt-pbkdf/node_modules/tweetnacl": { - "version": "0.14.5", - "license": "Unlicense" + "node_modules/is-typedarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", + "integrity": "sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==" }, - "node_modules/ganache-core/node_modules/bignumber.js": { - "version": "9.0.1", - "license": "MIT", - "optional": true, + "node_modules/is-unicode-supported": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", + "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==", "engines": { - "node": "*" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/ganache-core/node_modules/bip39": { - "version": "2.5.0", - "license": "ISC", + "node_modules/is-upper-case": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/is-upper-case/-/is-upper-case-1.1.2.tgz", + "integrity": "sha512-GQYSJMgfeAmVwh9ixyk888l7OIhNAGKtY6QA+IrWlu9MDTCaXmeozOZ2S9Knj7bQwBO/H6J2kb+pbyTUiMNbsw==", "dependencies": { - "create-hash": "^1.1.0", - "pbkdf2": "^3.0.9", - "randombytes": "^2.0.1", - "safe-buffer": "^5.0.1", - "unorm": "^1.3.3" + "upper-case": "^1.1.0" } }, - "node_modules/ganache-core/node_modules/blakejs": { - "version": "1.1.0", - "license": "CC0-1.0" - }, - "node_modules/ganache-core/node_modules/bluebird": { - "version": "3.7.2", - "license": "MIT", - "optional": true - }, - "node_modules/ganache-core/node_modules/bn.js": { - "version": "4.11.9", - "license": "MIT" + "node_modules/is-utf8": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-utf8/-/is-utf8-0.2.1.tgz", + "integrity": "sha512-rMYPYvCzsXywIsldgLaSoPlw5PfoB/ssr7hY4pLfcodrA5M/eArza1a9VmTiNIBNMjOGr1Ow9mTyU2o69U6U9Q==" }, - "node_modules/ganache-core/node_modules/body-parser": { - "version": "1.19.0", - "license": "MIT", - "optional": true, + "node_modules/is-weakref": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz", + "integrity": "sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==", + "dev": true, "dependencies": { - "bytes": "3.1.0", - "content-type": "~1.0.4", - "debug": "2.6.9", - "depd": "~1.1.2", - "http-errors": "1.7.2", - "iconv-lite": "0.4.24", - "on-finished": "~2.3.0", - "qs": "6.7.0", - "raw-body": "2.4.0", - "type-is": "~1.6.17" + "call-bind": "^1.0.2" }, - "engines": { - "node": ">= 0.8" + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/ganache-core/node_modules/body-parser/node_modules/debug": { - "version": "2.6.9", - "license": "MIT", - "optional": true, + "node_modules/is-wsl": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", + "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", "dependencies": { - "ms": "2.0.0" + "is-docker": "^2.0.0" + }, + "engines": { + "node": ">=8" } }, - "node_modules/ganache-core/node_modules/body-parser/node_modules/ms": { + "node_modules/isarray": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", + "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", + "dev": true + }, + "node_modules/isexe": { "version": "2.0.0", - "license": "MIT", - "optional": true + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==" }, - "node_modules/ganache-core/node_modules/body-parser/node_modules/qs": { - "version": "6.7.0", - "license": "BSD-3-Clause", - "optional": true, - "engines": { - "node": ">=0.6" + "node_modules/isomorphic-unfetch": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/isomorphic-unfetch/-/isomorphic-unfetch-3.1.0.tgz", + "integrity": "sha512-geDJjpoZ8N0kWexiwkX8F9NkTsXhetLPVbZFQ+JTW239QNOwvB0gniuR1Wc6f0AMTn7/mFGyXvHTifrCp/GH8Q==", + "dev": true, + "dependencies": { + "node-fetch": "^2.6.1", + "unfetch": "^4.2.0" } }, - "node_modules/ganache-core/node_modules/brace-expansion": { - "version": "1.1.11", - "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" + "node_modules/isomorphic-ws": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/isomorphic-ws/-/isomorphic-ws-5.0.0.tgz", + "integrity": "sha512-muId7Zzn9ywDsyXgTIafTry2sV3nySZeUDe6YedVd1Hvuuep5AsIlqK+XefWpYTyJG5e503F2xIuT2lcU6rCSw==", + "peerDependencies": { + "ws": "*" } }, - "node_modules/ganache-core/node_modules/brorand": { - "version": "1.1.0", - "license": "MIT" + "node_modules/isstream": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", + "integrity": "sha512-Yljz7ffyPbrLpLngrMtZ7NduUgVvi6wG9RJ9IUcyCd59YQ911PBJphODUcbOVbqYfxe1wuYf/LJ8PauMRwsM/g==" }, - "node_modules/ganache-core/node_modules/browserify-aes": { - "version": "1.2.0", - "license": "MIT", + "node_modules/jackspeak": { + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-2.3.6.tgz", + "integrity": "sha512-N3yCS/NegsOBokc8GAdM8UcmfsKiSS8cipheD/nivzr700H+nsMOxJjQnvwOcRYVuFkdH0wGUvW2WbXGmrZGbQ==", + "peer": true, "dependencies": { - "buffer-xor": "^1.0.3", - "cipher-base": "^1.0.0", - "create-hash": "^1.1.0", - "evp_bytestokey": "^1.0.3", - "inherits": "^2.0.1", - "safe-buffer": "^5.0.1" + "@isaacs/cliui": "^8.0.2" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + }, + "optionalDependencies": { + "@pkgjs/parseargs": "^0.11.0" } }, - "node_modules/ganache-core/node_modules/browserify-cipher": { - "version": "1.0.1", - "license": "MIT", + "node_modules/javascript-natural-sort": { + "version": "0.7.1", + "resolved": "https://registry.npmjs.org/javascript-natural-sort/-/javascript-natural-sort-0.7.1.tgz", + "integrity": "sha512-nO6jcEfZWQXDhOiBtG2KvKyEptz7RVbpGP4vTD2hLBdmNQSsCiicO2Ioinv6UI4y9ukqnBpy+XZ9H6uLNgJTlw==" + }, + "node_modules/js-cookie": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/js-cookie/-/js-cookie-2.2.1.tgz", + "integrity": "sha512-HvdH2LzI/EAZcUwA8+0nKNtWHqS+ZmijLA30RwZA0bo7ToCckjK5MkGhjED9KoRcXO6BaGI3I9UIzSA1FKFPOQ==", + "dev": true + }, + "node_modules/js-graph-algorithms": { + "version": "1.0.18", + "resolved": "https://registry.npmjs.org/js-graph-algorithms/-/js-graph-algorithms-1.0.18.tgz", + "integrity": "sha512-Gu1wtWzXBzGeye/j9BuyplGHscwqKRZodp/0M1vyBc19RJpblSwKGu099KwwaTx9cRIV+Qupk8xUMfEiGfFqSA==", "optional": true, - "dependencies": { - "browserify-aes": "^1.0.4", - "browserify-des": "^1.0.0", - "evp_bytestokey": "^1.0.0" + "bin": { + "js-graphs": "src/jsgraphs.js" } }, - "node_modules/ganache-core/node_modules/browserify-des": { - "version": "1.0.2", - "license": "MIT", - "optional": true, - "dependencies": { - "cipher-base": "^1.0.1", - "des.js": "^1.0.0", - "inherits": "^2.0.1", - "safe-buffer": "^5.1.2" + "node_modules/js-sdsl": { + "version": "4.4.2", + "resolved": "https://registry.npmjs.org/js-sdsl/-/js-sdsl-4.4.2.tgz", + "integrity": "sha512-dwXFwByc/ajSV6m5bcKAPwe4yDDF6D614pxmIi5odytzxRlwqF6nwoiCek80Ixc7Cvma5awClxrzFtxCQvcM8w==", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/js-sdsl" } }, - "node_modules/ganache-core/node_modules/browserify-rsa": { + "node_modules/js-sha3": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/js-sha3/-/js-sha3-0.8.0.tgz", + "integrity": "sha512-gF1cRrHhIzNfToc802P800N8PpXS+evLLXfsVpowqmAFR9uwbi89WvXg2QspOmXL8QL86J4T1EpFu+yUkwJY3Q==" + }, + "node_modules/js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==" + }, + "node_modules/js-yaml": { "version": "4.1.0", - "license": "MIT", - "optional": true, + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", "dependencies": { - "bn.js": "^5.0.0", - "randombytes": "^2.0.1" + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" } }, - "node_modules/ganache-core/node_modules/browserify-rsa/node_modules/bn.js": { - "version": "5.1.3", - "license": "MIT", - "optional": true + "node_modules/jsbi": { + "version": "3.2.5", + "resolved": "https://registry.npmjs.org/jsbi/-/jsbi-3.2.5.tgz", + "integrity": "sha512-aBE4n43IPvjaddScbvWRA2YlTzKEynHzu7MqOyTipdHucf/VxS63ViCjxYRg86M8Rxwbt/GfzHl1kKERkt45fQ==" }, - "node_modules/ganache-core/node_modules/browserify-sign": { - "version": "4.2.1", - "license": "ISC", - "optional": true, + "node_modules/jsbn": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", + "integrity": "sha512-UVU9dibq2JcFWxQPA6KCqj5O42VOmAY3zQUfEKxU0KpTGXwNoCjkX1e13eHNvw/xPynt6pU0rZ1htjWTNTSXsg==" + }, + "node_modules/json-buffer": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", + "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==" + }, + "node_modules/json-loader": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/json-loader/-/json-loader-0.5.7.tgz", + "integrity": "sha512-QLPs8Dj7lnf3e3QYS1zkCo+4ZwqOiF9d/nZnYozTISxXWCfNs9yuky5rJw4/W34s7POaNlbZmQGaB5NiXCbP4w==", + "dev": true + }, + "node_modules/json-schema": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.4.0.tgz", + "integrity": "sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA==" + }, + "node_modules/json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==" + }, + "node_modules/json-stringify-safe": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", + "integrity": "sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==" + }, + "node_modules/jsonfile": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", "dependencies": { - "bn.js": "^5.1.1", - "browserify-rsa": "^4.0.1", - "create-hash": "^1.2.0", - "create-hmac": "^1.1.7", - "elliptic": "^6.5.3", - "inherits": "^2.0.4", - "parse-asn1": "^5.1.5", - "readable-stream": "^3.6.0", - "safe-buffer": "^5.2.0" + "universalify": "^2.0.0" + }, + "optionalDependencies": { + "graceful-fs": "^4.1.6" } }, - "node_modules/ganache-core/node_modules/browserify-sign/node_modules/bn.js": { - "version": "5.1.3", - "license": "MIT", - "optional": true + "node_modules/jsprim": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.2.tgz", + "integrity": "sha512-P2bSOMAc/ciLz6DzgjVlGJP9+BrJWu5UDGK70C2iweC5QBIeFf0ZXRvGjEj2uYgrY2MkAAhsSWHDWlFtEroZWw==", + "dependencies": { + "assert-plus": "1.0.0", + "extsprintf": "1.3.0", + "json-schema": "0.4.0", + "verror": "1.10.0" + }, + "engines": { + "node": ">=0.6.0" + } }, - "node_modules/ganache-core/node_modules/browserify-sign/node_modules/readable-stream": { - "version": "3.6.0", - "license": "MIT", - "optional": true, + "node_modules/keccak": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/keccak/-/keccak-3.0.4.tgz", + "integrity": "sha512-3vKuW0jV8J3XNTzvfyicFR5qvxrSAGl7KIhvgOu5cmWwM7tZRj3fMbj/pfIf4be7aznbc+prBWGjywox/g2Y6Q==", + "hasInstallScript": true, "dependencies": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" + "node-addon-api": "^2.0.0", + "node-gyp-build": "^4.2.0", + "readable-stream": "^3.6.0" }, "engines": { - "node": ">= 6" + "node": ">=10.0.0" + } + }, + "node_modules/keyv": { + "version": "4.5.4", + "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", + "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==", + "dependencies": { + "json-buffer": "3.0.1" + } + }, + "node_modules/klaw": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/klaw/-/klaw-4.1.0.tgz", + "integrity": "sha512-1zGZ9MF9H22UnkpVeuaGKOjfA2t6WrfdrJmGjy16ykcjnKQDmHVX+KI477rpbGevz/5FD4MC3xf1oxylBgcaQw==", + "optional": true, + "engines": { + "node": ">=14.14.0" + } + }, + "node_modules/klaw-sync": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/klaw-sync/-/klaw-sync-6.0.0.tgz", + "integrity": "sha512-nIeuVSzdCCs6TDPTqI8w1Yre34sSq7AkZ4B3sfOBbI2CgVSB4Du4aLQijFU2+lhAFCwt9+42Hel6lQNIv6AntQ==", + "dependencies": { + "graceful-fs": "^4.1.11" } }, - "node_modules/ganache-core/node_modules/browserslist": { - "version": "3.2.8", - "license": "MIT", + "node_modules/lcid": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/lcid/-/lcid-1.0.0.tgz", + "integrity": "sha512-YiGkH6EnGrDGqLMITnGjXtGmNtjoXw9SVUzcaos8RBi7Ps0VBylkq+vOcY9QE5poLasPCR849ucFUkl0UzUyOw==", "dependencies": { - "caniuse-lite": "^1.0.30000844", - "electron-to-chromium": "^1.3.47" + "invert-kv": "^1.0.0" }, - "bin": { - "browserslist": "cli.js" + "engines": { + "node": ">=0.10.0" } }, - "node_modules/ganache-core/node_modules/bs58": { - "version": "4.0.1", - "license": "MIT", + "node_modules/level": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/level/-/level-8.0.0.tgz", + "integrity": "sha512-ypf0jjAk2BWI33yzEaaotpq7fkOPALKAgDBxggO6Q9HGX2MRXn0wbP1Jn/tJv1gtL867+YOjOB49WaUF3UoJNQ==", "dependencies": { - "base-x": "^3.0.2" + "browser-level": "^1.0.1", + "classic-level": "^1.2.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/level" } }, - "node_modules/ganache-core/node_modules/bs58check": { - "version": "2.1.2", - "license": "MIT", + "node_modules/level-codec": { + "version": "9.0.2", + "resolved": "https://registry.npmjs.org/level-codec/-/level-codec-9.0.2.tgz", + "integrity": "sha512-UyIwNb1lJBChJnGfjmO0OR+ezh2iVu1Kas3nvBS/BzGnx79dv6g7unpKIDNPMhfdTEGoc7mC8uAu51XEtX+FHQ==", "dependencies": { - "bs58": "^4.0.0", - "create-hash": "^1.1.0", - "safe-buffer": "^5.1.2" + "buffer": "^5.6.0" + }, + "engines": { + "node": ">=6" } }, - "node_modules/ganache-core/node_modules/buffer": { + "node_modules/level-codec/node_modules/buffer": { "version": "5.7.1", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", + "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", "funding": [ { "type": "github", @@ -14927,2706 +10608,2482 @@ "url": "https://feross.org/support" } ], - "license": "MIT", "dependencies": { "base64-js": "^1.3.1", "ieee754": "^1.1.13" } }, - "node_modules/ganache-core/node_modules/buffer-from": { - "version": "1.1.1", - "license": "MIT" - }, - "node_modules/ganache-core/node_modules/buffer-to-arraybuffer": { - "version": "0.0.5", - "license": "MIT", - "optional": true - }, - "node_modules/ganache-core/node_modules/buffer-xor": { - "version": "1.0.3", - "license": "MIT" - }, - "node_modules/ganache-core/node_modules/bufferutil": { - "version": "4.0.3", - "hasInstallScript": true, - "license": "MIT", - "dependencies": { - "node-gyp-build": "^4.2.0" - } - }, - "node_modules/ganache-core/node_modules/bytes": { - "version": "3.1.0", - "license": "MIT", - "optional": true, + "node_modules/level-concat-iterator": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/level-concat-iterator/-/level-concat-iterator-2.0.1.tgz", + "integrity": "sha512-OTKKOqeav2QWcERMJR7IS9CUo1sHnke2C0gkSmcR7QuEtFNLLzHQAvnMw8ykvEcv0Qtkg0p7FOwP1v9e5Smdcw==", "engines": { - "node": ">= 0.8" + "node": ">=6" } }, - "node_modules/ganache-core/node_modules/bytewise": { - "version": "1.1.0", - "license": "MIT", + "node_modules/level-errors": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/level-errors/-/level-errors-2.0.1.tgz", + "integrity": "sha512-UVprBJXite4gPS+3VznfgDSU8PTRuVX0NXwoWW50KLxd2yw4Y1t2JUR5In1itQnudZqRMT9DlAM3Q//9NCjCFw==", "dependencies": { - "bytewise-core": "^1.2.2", - "typewise": "^1.0.3" + "errno": "~0.1.1" + }, + "engines": { + "node": ">=6" } }, - "node_modules/ganache-core/node_modules/bytewise-core": { - "version": "1.2.3", - "license": "MIT", + "node_modules/level-iterator-stream": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/level-iterator-stream/-/level-iterator-stream-4.0.2.tgz", + "integrity": "sha512-ZSthfEqzGSOMWoUGhTXdX9jv26d32XJuHz/5YnuHZzH6wldfWMOVwI9TBtKcya4BKTyTt3XVA0A3cF3q5CY30Q==", "dependencies": { - "typewise-core": "^1.2" + "inherits": "^2.0.4", + "readable-stream": "^3.4.0", + "xtend": "^4.0.2" + }, + "engines": { + "node": ">=6" } }, - "node_modules/ganache-core/node_modules/cache-base": { - "version": "1.0.1", - "license": "MIT", + "node_modules/level-mem": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/level-mem/-/level-mem-5.0.1.tgz", + "integrity": "sha512-qd+qUJHXsGSFoHTziptAKXoLX87QjR7v2KMbqncDXPxQuCdsQlzmyX+gwrEHhlzn08vkf8TyipYyMmiC6Gobzg==", "dependencies": { - "collection-visit": "^1.0.0", - "component-emitter": "^1.2.1", - "get-value": "^2.0.6", - "has-value": "^1.0.0", - "isobject": "^3.0.1", - "set-value": "^2.0.0", - "to-object-path": "^0.3.0", - "union-value": "^1.0.0", - "unset-value": "^1.0.0" + "level-packager": "^5.0.3", + "memdown": "^5.0.0" }, "engines": { - "node": ">=0.10.0" + "node": ">=6" } }, - "node_modules/ganache-core/node_modules/cacheable-request": { - "version": "6.1.0", - "license": "MIT", - "optional": true, + "node_modules/level-packager": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/level-packager/-/level-packager-5.1.1.tgz", + "integrity": "sha512-HMwMaQPlTC1IlcwT3+swhqf/NUO+ZhXVz6TY1zZIIZlIR0YSn8GtAAWmIvKjNY16ZkEg/JcpAuQskxsXqC0yOQ==", "dependencies": { - "clone-response": "^1.0.2", - "get-stream": "^5.1.0", - "http-cache-semantics": "^4.0.0", - "keyv": "^3.0.0", - "lowercase-keys": "^2.0.0", - "normalize-url": "^4.1.0", - "responselike": "^1.0.2" + "encoding-down": "^6.3.0", + "levelup": "^4.3.2" }, "engines": { - "node": ">=8" + "node": ">=6" } }, - "node_modules/ganache-core/node_modules/cacheable-request/node_modules/lowercase-keys": { - "version": "2.0.0", - "license": "MIT", - "optional": true, + "node_modules/level-supports": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/level-supports/-/level-supports-4.0.1.tgz", + "integrity": "sha512-PbXpve8rKeNcZ9C1mUicC9auIYFyGpkV9/i6g76tLgANwWhtG2v7I4xNBUlkn3lE2/dZF3Pi0ygYGtLc4RXXdA==", "engines": { - "node": ">=8" - } - }, - "node_modules/ganache-core/node_modules/cachedown": { - "version": "1.0.0", - "license": "MIT", - "dependencies": { - "abstract-leveldown": "^2.4.1", - "lru-cache": "^3.2.0" - } - }, - "node_modules/ganache-core/node_modules/cachedown/node_modules/abstract-leveldown": { - "version": "2.7.2", - "license": "MIT", - "dependencies": { - "xtend": "~4.0.0" - } - }, - "node_modules/ganache-core/node_modules/cachedown/node_modules/lru-cache": { - "version": "3.2.0", - "license": "ISC", - "dependencies": { - "pseudomap": "^1.0.1" - } - }, - "node_modules/ganache-core/node_modules/call-bind": { - "version": "1.0.2", - "license": "MIT", - "dependencies": { - "function-bind": "^1.1.1", - "get-intrinsic": "^1.0.2" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": ">=12" } }, - "node_modules/ganache-core/node_modules/caniuse-lite": { - "version": "1.0.30001174", - "license": "CC-BY-4.0" - }, - "node_modules/ganache-core/node_modules/caseless": { - "version": "0.12.0", - "license": "Apache-2.0" - }, - "node_modules/ganache-core/node_modules/chalk": { - "version": "2.4.2", - "license": "MIT", + "node_modules/level-transcoder": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/level-transcoder/-/level-transcoder-1.0.1.tgz", + "integrity": "sha512-t7bFwFtsQeD8cl8NIoQ2iwxA0CL/9IFw7/9gAjOonH0PWTTiRfY7Hq+Ejbsxh86tXobDQ6IOiddjNYIfOBs06w==", "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" + "buffer": "^6.0.3", + "module-error": "^1.0.1" }, "engines": { - "node": ">=4" - } - }, - "node_modules/ganache-core/node_modules/checkpoint-store": { - "version": "1.1.0", - "license": "ISC", - "dependencies": { - "functional-red-black-tree": "^1.0.1" + "node": ">=12" } }, - "node_modules/ganache-core/node_modules/chownr": { - "version": "1.1.4", - "license": "ISC", - "optional": true - }, - "node_modules/ganache-core/node_modules/ci-info": { + "node_modules/level-ws": { "version": "2.0.0", - "license": "MIT" - }, - "node_modules/ganache-core/node_modules/cids": { - "version": "0.7.5", - "license": "MIT", - "optional": true, + "resolved": "https://registry.npmjs.org/level-ws/-/level-ws-2.0.0.tgz", + "integrity": "sha512-1iv7VXx0G9ec1isqQZ7y5LmoZo/ewAsyDHNA8EFDW5hqH2Kqovm33nSFkSdnLLAK+I5FlT+lo5Cw9itGe+CpQA==", "dependencies": { - "buffer": "^5.5.0", - "class-is": "^1.1.0", - "multibase": "~0.6.0", - "multicodec": "^1.0.0", - "multihashes": "~0.4.15" + "inherits": "^2.0.3", + "readable-stream": "^3.1.0", + "xtend": "^4.0.1" }, "engines": { - "node": ">=4.0.0", - "npm": ">=3.0.0" - } - }, - "node_modules/ganache-core/node_modules/cids/node_modules/multicodec": { - "version": "1.0.4", - "license": "MIT", - "optional": true, - "dependencies": { - "buffer": "^5.6.0", - "varint": "^5.0.0" - } - }, - "node_modules/ganache-core/node_modules/cipher-base": { - "version": "1.0.4", - "license": "MIT", - "dependencies": { - "inherits": "^2.0.1", - "safe-buffer": "^5.0.1" + "node": ">=6" } }, - "node_modules/ganache-core/node_modules/class-is": { - "version": "1.1.0", - "license": "MIT", - "optional": true - }, - "node_modules/ganache-core/node_modules/class-utils": { - "version": "0.3.6", - "license": "MIT", + "node_modules/levelup": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/levelup/-/levelup-4.4.0.tgz", + "integrity": "sha512-94++VFO3qN95cM/d6eBXvd894oJE0w3cInq9USsyQzzoJxmiYzPAocNcuGCPGGjoXqDVJcr3C1jzt1TSjyaiLQ==", "dependencies": { - "arr-union": "^3.1.0", - "define-property": "^0.2.5", - "isobject": "^3.0.0", - "static-extend": "^0.1.1" + "deferred-leveldown": "~5.3.0", + "level-errors": "~2.0.0", + "level-iterator-stream": "~4.0.0", + "level-supports": "~1.0.0", + "xtend": "~4.0.0" }, "engines": { - "node": ">=0.10.0" + "node": ">=6" } }, - "node_modules/ganache-core/node_modules/class-utils/node_modules/define-property": { - "version": "0.2.5", - "license": "MIT", + "node_modules/levelup/node_modules/level-supports": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/level-supports/-/level-supports-1.0.1.tgz", + "integrity": "sha512-rXM7GYnW8gsl1vedTJIbzOrRv85c/2uCMpiiCzO2fndd06U/kUXEEU9evYn4zFggBOg36IsBW8LzqIpETwwQzg==", "dependencies": { - "is-descriptor": "^0.1.0" + "xtend": "^4.0.2" }, "engines": { - "node": ">=0.10.0" + "node": ">=6" } }, - "node_modules/ganache-core/node_modules/class-utils/node_modules/is-accessor-descriptor": { - "version": "0.1.6", - "license": "MIT", + "node_modules/load-json-file": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz", + "integrity": "sha512-cy7ZdNRXdablkXYNI049pthVeXFurRyb9+hA/dZzerZ0pGTx42z+y+ssxBaVV2l70t1muq5IdKhn4UtcoGUY9A==", "dependencies": { - "kind-of": "^3.0.2" + "graceful-fs": "^4.1.2", + "parse-json": "^2.2.0", + "pify": "^2.0.0", + "pinkie-promise": "^2.0.0", + "strip-bom": "^2.0.0" }, "engines": { "node": ">=0.10.0" } }, - "node_modules/ganache-core/node_modules/class-utils/node_modules/is-accessor-descriptor/node_modules/kind-of": { - "version": "3.2.2", - "license": "MIT", + "node_modules/locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "devOptional": true, "dependencies": { - "is-buffer": "^1.1.5" + "p-locate": "^4.1.0" }, "engines": { - "node": ">=0.10.0" + "node": ">=8" } }, - "node_modules/ganache-core/node_modules/class-utils/node_modules/is-buffer": { - "version": "1.1.6", - "license": "MIT" + "node_modules/lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" }, - "node_modules/ganache-core/node_modules/class-utils/node_modules/is-data-descriptor": { - "version": "0.1.4", - "license": "MIT", - "dependencies": { - "kind-of": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" - } + "node_modules/lodash.assign": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/lodash.assign/-/lodash.assign-4.2.0.tgz", + "integrity": "sha512-hFuH8TY+Yji7Eja3mGiuAxBqLagejScbG8GbG0j6o9vzn0YL14My+ktnqtZgFTosKymC9/44wP6s7xyuLfnClw==" }, - "node_modules/ganache-core/node_modules/class-utils/node_modules/is-data-descriptor/node_modules/kind-of": { - "version": "3.2.2", - "license": "MIT", + "node_modules/lodash.flatten": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/lodash.flatten/-/lodash.flatten-4.4.0.tgz", + "integrity": "sha512-C5N2Z3DgnnKr0LOpv/hKCgKdb7ZZwafIrsesve6lmzvZIRZRGaZ/l6Q8+2W7NaT+ZwO3fFlSCzCzrDCFdJfZ4g==", + "dev": true + }, + "node_modules/lodash.isequal": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.isequal/-/lodash.isequal-4.5.0.tgz", + "integrity": "sha512-pDo3lu8Jhfjqls6GkMgpahsF9kCyayhgykjyLMNFTKWrpVdAQtYyB4muAMWozBB4ig/dtWAmsMxLEI8wuz+DYQ==", + "dev": true + }, + "node_modules/lodash.merge": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", + "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==" + }, + "node_modules/lodash.omit": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.omit/-/lodash.omit-4.5.0.tgz", + "integrity": "sha512-XeqSp49hNGmlkj2EJlfrQFIzQ6lXdNro9sddtQzcJY8QaoC2GO0DT7xaIokHeyM+mIT0mPMlPvkYzg2xCuHdZg==", + "optional": true + }, + "node_modules/lodash.pick": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/lodash.pick/-/lodash.pick-4.4.0.tgz", + "integrity": "sha512-hXt6Ul/5yWjfklSGvLQl8vM//l3FtyHZeuelpzK6mm99pNvN9yTDruNZPEJZD1oWrqo+izBmB7oUfWgcCX7s4Q==", + "optional": true + }, + "node_modules/lodash.truncate": { + "version": "4.4.2", + "resolved": "https://registry.npmjs.org/lodash.truncate/-/lodash.truncate-4.4.2.tgz", + "integrity": "sha512-jttmRe7bRse52OsWIMDLaXxWqRAmtIUccAQ3garviCqJjafXOfNMO0yMfNpdD6zbGaTU0P5Nz7e7gAT6cKmJRw==", + "dev": true + }, + "node_modules/log-symbols": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", + "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", "dependencies": { - "is-buffer": "^1.1.5" + "chalk": "^4.1.0", + "is-unicode-supported": "^0.1.0" }, "engines": { - "node": ">=0.10.0" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/ganache-core/node_modules/class-utils/node_modules/is-descriptor": { - "version": "0.1.6", - "license": "MIT", + "node_modules/loose-envify": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", + "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", "dependencies": { - "is-accessor-descriptor": "^0.1.6", - "is-data-descriptor": "^0.1.4", - "kind-of": "^5.0.0" + "js-tokens": "^3.0.0 || ^4.0.0" }, - "engines": { - "node": ">=0.10.0" + "bin": { + "loose-envify": "cli.js" } }, - "node_modules/ganache-core/node_modules/class-utils/node_modules/kind-of": { - "version": "5.1.0", - "license": "MIT", - "engines": { - "node": ">=0.10.0" + "node_modules/loupe": { + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/loupe/-/loupe-2.3.7.tgz", + "integrity": "sha512-zSMINGVYkdpYSOBmLi0D1Uo7JU9nVdQKrHxC8eYlV+9YKK9WePqAlL7lSlorG/U2Fw1w0hTBmaa/jrQ3UbPHtA==", + "dependencies": { + "get-func-name": "^2.0.1" } }, - "node_modules/ganache-core/node_modules/clone": { - "version": "2.1.2", - "license": "MIT", - "engines": { - "node": ">=0.8" - } + "node_modules/lower-case": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/lower-case/-/lower-case-1.1.4.tgz", + "integrity": "sha512-2Fgx1Ycm599x+WGpIYwJOvsjmXFzTSc34IwDWALRA/8AopUKAVPwfJ+h5+f85BCp0PWmmJcWzEpxOpoXycMpdA==" }, - "node_modules/ganache-core/node_modules/clone-response": { + "node_modules/lower-case-first": { "version": "1.0.2", - "license": "MIT", - "optional": true, + "resolved": "https://registry.npmjs.org/lower-case-first/-/lower-case-first-1.0.2.tgz", + "integrity": "sha512-UuxaYakO7XeONbKrZf5FEgkantPf5DUqDayzP5VXZrtRPdH86s4kN47I8B3TW10S4QKiE3ziHNf3kRN//okHjA==", "dependencies": { - "mimic-response": "^1.0.0" + "lower-case": "^1.1.2" } }, - "node_modules/ganache-core/node_modules/collection-visit": { - "version": "1.0.0", - "license": "MIT", - "dependencies": { - "map-visit": "^1.0.0", - "object-visit": "^1.0.0" - }, + "node_modules/lowercase-keys": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-3.0.0.tgz", + "integrity": "sha512-ozCC6gdQ+glXOQsveKD0YsDy8DSQFjDTz4zyzEHNV5+JP5D62LmfDZ6o1cycFx9ouG940M5dE8C8CTewdj2YWQ==", "engines": { - "node": ">=0.10.0" + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/ganache-core/node_modules/color-convert": { - "version": "1.9.3", - "license": "MIT", + "node_modules/lru_map": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/lru_map/-/lru_map-0.3.3.tgz", + "integrity": "sha512-Pn9cox5CsMYngeDbmChANltQl+5pi6XmTrraMSzhPmMBbmgcxmqWry0U3PGapCU1yB4/LqCcom7qhHZiF/jGfQ==" + }, + "node_modules/lru-cache": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", + "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", "dependencies": { - "color-name": "1.1.3" + "yallist": "^3.0.2" } }, - "node_modules/ganache-core/node_modules/color-name": { + "node_modules/ltgt": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ltgt/-/ltgt-2.2.1.tgz", + "integrity": "sha512-AI2r85+4MquTw9ZYqabu4nMwy9Oftlfa/e/52t9IjtfG+mGBbTNdAoZ3RQKLHR6r0wQnwZnPIEh/Ya6XTWAKNA==" + }, + "node_modules/markdown-table": { "version": "1.1.3", - "license": "MIT" + "resolved": "https://registry.npmjs.org/markdown-table/-/markdown-table-1.1.3.tgz", + "integrity": "sha512-1RUZVgQlpJSPWYbFSpmudq5nHY1doEIv89gBtF0s4gW1GF2XorxcA/70M5vq7rLv0a6mhOUccRsqkwhwLCIQ2Q==" }, - "node_modules/ganache-core/node_modules/combined-stream": { - "version": "1.0.8", - "license": "MIT", + "node_modules/match-all": { + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/match-all/-/match-all-1.2.6.tgz", + "integrity": "sha512-0EESkXiTkWzrQQntBu2uzKvLu6vVkUGz40nGPbSZuegcfE5UuSzNjLaIu76zJWuaT/2I3Z/8M06OlUOZLGwLlQ==", + "dev": true + }, + "node_modules/mathjs": { + "version": "12.2.1", + "resolved": "https://registry.npmjs.org/mathjs/-/mathjs-12.2.1.tgz", + "integrity": "sha512-/uG/yMP0wUSfALCyJkKco0gYlrp0kHFt4yNT3E+ZCoiWpsT9GdtLqydxHp3gjDCQrR4GGBDXMnKOQtJbmIe9SQ==", "dependencies": { - "delayed-stream": "~1.0.0" + "@babel/runtime": "^7.23.6", + "complex.js": "^2.1.1", + "decimal.js": "^10.4.3", + "escape-latex": "^1.2.0", + "fraction.js": "4.3.4", + "javascript-natural-sort": "^0.7.1", + "seedrandom": "^3.0.5", + "tiny-emitter": "^2.1.0", + "typed-function": "^4.1.1" + }, + "bin": { + "mathjs": "bin/cli.js" }, "engines": { - "node": ">= 0.8" - } - }, - "node_modules/ganache-core/node_modules/component-emitter": { - "version": "1.3.0", - "license": "MIT" - }, - "node_modules/ganache-core/node_modules/concat-map": { - "version": "0.0.1", - "license": "MIT" - }, - "node_modules/ganache-core/node_modules/concat-stream": { - "version": "1.6.2", - "engines": [ - "node >= 0.8" - ], - "license": "MIT", - "dependencies": { - "buffer-from": "^1.0.0", - "inherits": "^2.0.3", - "readable-stream": "^2.2.2", - "typedarray": "^0.0.6" + "node": ">= 18" } }, - "node_modules/ganache-core/node_modules/content-disposition": { - "version": "0.5.3", - "license": "MIT", - "optional": true, - "dependencies": { - "safe-buffer": "5.1.2" - }, + "node_modules/mcl-wasm": { + "version": "0.7.9", + "resolved": "https://registry.npmjs.org/mcl-wasm/-/mcl-wasm-0.7.9.tgz", + "integrity": "sha512-iJIUcQWA88IJB/5L15GnJVnSQJmf/YaxxV6zRavv83HILHaJQb6y0iFyDMdDO0gN8X37tdxmAOrH/P8B6RB8sQ==", "engines": { - "node": ">= 0.6" + "node": ">=8.9.0" } }, - "node_modules/ganache-core/node_modules/content-disposition/node_modules/safe-buffer": { - "version": "5.1.2", - "license": "MIT", - "optional": true - }, - "node_modules/ganache-core/node_modules/content-hash": { - "version": "2.5.2", - "license": "ISC", - "optional": true, + "node_modules/md5.js": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/md5.js/-/md5.js-1.3.5.tgz", + "integrity": "sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==", "dependencies": { - "cids": "^0.7.1", - "multicodec": "^0.5.5", - "multihashes": "^0.4.15" + "hash-base": "^3.0.0", + "inherits": "^2.0.1", + "safe-buffer": "^5.1.2" } }, - "node_modules/ganache-core/node_modules/content-type": { - "version": "1.0.4", - "license": "MIT", - "optional": true, + "node_modules/media-typer": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", + "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==", "engines": { "node": ">= 0.6" } }, - "node_modules/ganache-core/node_modules/convert-source-map": { - "version": "1.7.0", - "license": "MIT", + "node_modules/memdown": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/memdown/-/memdown-5.1.0.tgz", + "integrity": "sha512-B3J+UizMRAlEArDjWHTMmadet+UKwHd3UjMgGBkZcKAxAYVPS9o0Yeiha4qvz7iGiL2Sb3igUft6p7nbFWctpw==", "dependencies": { - "safe-buffer": "~5.1.1" - } - }, - "node_modules/ganache-core/node_modules/convert-source-map/node_modules/safe-buffer": { - "version": "5.1.2", - "license": "MIT" - }, - "node_modules/ganache-core/node_modules/cookie": { - "version": "0.4.0", - "license": "MIT", - "optional": true, + "abstract-leveldown": "~6.2.1", + "functional-red-black-tree": "~1.0.1", + "immediate": "~3.2.3", + "inherits": "~2.0.1", + "ltgt": "~2.2.0", + "safe-buffer": "~5.2.0" + }, "engines": { - "node": ">= 0.6" + "node": ">=6" } }, - "node_modules/ganache-core/node_modules/cookie-signature": { - "version": "1.0.6", - "license": "MIT", - "optional": true - }, - "node_modules/ganache-core/node_modules/cookiejar": { - "version": "2.1.2", - "license": "MIT", - "optional": true - }, - "node_modules/ganache-core/node_modules/copy-descriptor": { - "version": "0.1.1", - "license": "MIT", + "node_modules/memdown/node_modules/abstract-leveldown": { + "version": "6.2.3", + "resolved": "https://registry.npmjs.org/abstract-leveldown/-/abstract-leveldown-6.2.3.tgz", + "integrity": "sha512-BsLm5vFMRUrrLeCcRc+G0t2qOaTzpoJQLOubq2XM72eNpjF5UdU5o/5NvlNhx95XHcAvcl8OMXr4mlg/fRgUXQ==", + "dependencies": { + "buffer": "^5.5.0", + "immediate": "^3.2.3", + "level-concat-iterator": "~2.0.0", + "level-supports": "~1.0.0", + "xtend": "~4.0.0" + }, "engines": { - "node": ">=0.10.0" + "node": ">=6" } }, - "node_modules/ganache-core/node_modules/core-js": { - "version": "2.6.12", - "hasInstallScript": true, - "license": "MIT" - }, - "node_modules/ganache-core/node_modules/core-js-pure": { - "version": "3.8.2", - "hasInstallScript": true, - "license": "MIT", - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/core-js" + "node_modules/memdown/node_modules/buffer": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", + "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "dependencies": { + "base64-js": "^1.3.1", + "ieee754": "^1.1.13" } }, - "node_modules/ganache-core/node_modules/core-util-is": { - "version": "1.0.2", - "license": "MIT" + "node_modules/memdown/node_modules/immediate": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/immediate/-/immediate-3.2.3.tgz", + "integrity": "sha512-RrGCXRm/fRVqMIhqXrGEX9rRADavPiDFSoMb/k64i9XMk8uH4r/Omi5Ctierj6XzNecwDbO4WuFbDD1zmpl3Tg==" }, - "node_modules/ganache-core/node_modules/cors": { - "version": "2.8.5", - "license": "MIT", - "optional": true, + "node_modules/memdown/node_modules/level-supports": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/level-supports/-/level-supports-1.0.1.tgz", + "integrity": "sha512-rXM7GYnW8gsl1vedTJIbzOrRv85c/2uCMpiiCzO2fndd06U/kUXEEU9evYn4zFggBOg36IsBW8LzqIpETwwQzg==", "dependencies": { - "object-assign": "^4", - "vary": "^1" + "xtend": "^4.0.2" }, "engines": { - "node": ">= 0.10" + "node": ">=6" } }, - "node_modules/ganache-core/node_modules/create-ecdh": { - "version": "4.0.4", - "license": "MIT", - "optional": true, + "node_modules/memory-level": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/memory-level/-/memory-level-1.0.0.tgz", + "integrity": "sha512-UXzwewuWeHBz5krr7EvehKcmLFNoXxGcvuYhC41tRnkrTbJohtS7kVn9akmgirtRygg+f7Yjsfi8Uu5SGSQ4Og==", "dependencies": { - "bn.js": "^4.1.0", - "elliptic": "^6.5.3" + "abstract-level": "^1.0.0", + "functional-red-black-tree": "^1.0.1", + "module-error": "^1.0.1" + }, + "engines": { + "node": ">=12" } }, - "node_modules/ganache-core/node_modules/create-hash": { - "version": "1.2.0", - "license": "MIT", - "dependencies": { - "cipher-base": "^1.0.1", - "inherits": "^2.0.1", - "md5.js": "^1.3.4", - "ripemd160": "^2.0.1", - "sha.js": "^2.4.0" + "node_modules/memorystream": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/memorystream/-/memorystream-0.3.1.tgz", + "integrity": "sha512-S3UwM3yj5mtUSEfP41UZmt/0SCoVYUcU1rkXv+BQ5Ig8ndL4sPoJNBUJERafdPb5jjHJGuMgytgKvKIf58XNBw==", + "engines": { + "node": ">= 0.10.0" } }, - "node_modules/ganache-core/node_modules/create-hmac": { - "version": "1.1.7", - "license": "MIT", - "dependencies": { - "cipher-base": "^1.0.3", - "create-hash": "^1.1.0", - "inherits": "^2.0.1", - "ripemd160": "^2.0.0", - "safe-buffer": "^5.0.1", - "sha.js": "^2.4.8" - } + "node_modules/merge-descriptors": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", + "integrity": "sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w==" }, - "node_modules/ganache-core/node_modules/cross-fetch": { - "version": "2.2.3", - "license": "MIT", + "node_modules/merkle-patricia-tree": { + "version": "4.2.4", + "resolved": "https://registry.npmjs.org/merkle-patricia-tree/-/merkle-patricia-tree-4.2.4.tgz", + "integrity": "sha512-eHbf/BG6eGNsqqfbLED9rIqbsF4+sykEaBn6OLNs71tjclbMcMOk1tEPmJKcNcNCLkvbpY/lwyOlizWsqPNo8w==", "dependencies": { - "node-fetch": "2.1.2", - "whatwg-fetch": "2.0.4" + "@types/levelup": "^4.3.0", + "ethereumjs-util": "^7.1.4", + "level-mem": "^5.0.1", + "level-ws": "^2.0.0", + "readable-stream": "^3.6.0", + "semaphore-async-await": "^1.5.1" } }, - "node_modules/ganache-core/node_modules/crypto-browserify": { - "version": "3.12.0", - "license": "MIT", - "optional": true, - "dependencies": { - "browserify-cipher": "^1.0.0", - "browserify-sign": "^4.0.0", - "create-ecdh": "^4.0.0", - "create-hash": "^1.1.0", - "create-hmac": "^1.1.0", - "diffie-hellman": "^5.0.0", - "inherits": "^2.0.1", - "pbkdf2": "^3.0.3", - "public-encrypt": "^4.0.0", - "randombytes": "^2.0.0", - "randomfill": "^1.0.3" - }, + "node_modules/methods": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", + "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==", "engines": { - "node": "*" + "node": ">= 0.6" } }, - "node_modules/ganache-core/node_modules/d": { - "version": "1.0.1", - "license": "ISC", - "dependencies": { - "es5-ext": "^0.10.50", - "type": "^1.0.1" - } + "node_modules/micro-ftch": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/micro-ftch/-/micro-ftch-0.3.1.tgz", + "integrity": "sha512-/0LLxhzP0tfiR5hcQebtudP56gUurs2CLkGarnCiB/OqEyUFQ6U3paQi/tgLv0hBJYt2rnr9MNpxz4fiiugstg==" }, - "node_modules/ganache-core/node_modules/dashdash": { - "version": "1.14.1", - "license": "MIT", + "node_modules/micromatch": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", + "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", "dependencies": { - "assert-plus": "^1.0.0" + "braces": "^3.0.2", + "picomatch": "^2.3.1" }, "engines": { - "node": ">=0.10" + "node": ">=8.6" } }, - "node_modules/ganache-core/node_modules/debug": { - "version": "3.2.6", - "license": "MIT", - "dependencies": { - "ms": "^2.1.1" + "node_modules/mime": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", + "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", + "bin": { + "mime": "cli.js" + }, + "engines": { + "node": ">=4" } }, - "node_modules/ganache-core/node_modules/decode-uri-component": { - "version": "0.2.0", - "license": "MIT", + "node_modules/mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", "engines": { - "node": ">=0.10" + "node": ">= 0.6" } }, - "node_modules/ganache-core/node_modules/decompress-response": { - "version": "3.3.0", - "license": "MIT", - "optional": true, + "node_modules/mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", "dependencies": { - "mimic-response": "^1.0.0" + "mime-db": "1.52.0" }, "engines": { - "node": ">=4" + "node": ">= 0.6" } }, - "node_modules/ganache-core/node_modules/deep-equal": { - "version": "1.1.1", - "license": "MIT", - "dependencies": { - "is-arguments": "^1.0.4", - "is-date-object": "^1.0.1", - "is-regex": "^1.0.4", - "object-is": "^1.0.1", - "object-keys": "^1.1.1", - "regexp.prototype.flags": "^1.2.0" + "node_modules/mimic-response": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-2.1.0.tgz", + "integrity": "sha512-wXqjST+SLt7R009ySCglWBCFpjUygmCIfD790/kVbiGmUgfYGuB14PiTd5DwVxSV4NcYHjzMkoj5LjQZwTQLEA==", + "optional": true, + "engines": { + "node": ">=8" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/ganache-core/node_modules/defer-to-connect": { - "version": "1.1.3", - "license": "MIT", - "optional": true - }, - "node_modules/ganache-core/node_modules/deferred-leveldown": { - "version": "4.0.2", - "license": "MIT", + "node_modules/min-document": { + "version": "2.19.0", + "resolved": "https://registry.npmjs.org/min-document/-/min-document-2.19.0.tgz", + "integrity": "sha512-9Wy1B3m3f66bPPmU5hdA4DR4PB2OfDU/+GS3yAB7IQozE3tqXaVv2zOjgla7MEGSRv95+ILmOuvhLkOK6wJtCQ==", "dependencies": { - "abstract-leveldown": "~5.0.0", - "inherits": "^2.0.3" - }, - "engines": { - "node": ">=6" + "dom-walk": "^0.1.0" } }, - "node_modules/ganache-core/node_modules/deferred-leveldown/node_modules/abstract-leveldown": { - "version": "5.0.0", - "license": "MIT", - "dependencies": { - "xtend": "~4.0.0" - }, - "engines": { - "node": ">=6" - } + "node_modules/minimalistic-assert": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", + "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==" }, - "node_modules/ganache-core/node_modules/define-properties": { - "version": "1.1.3", - "license": "MIT", - "dependencies": { - "object-keys": "^1.0.12" - }, - "engines": { - "node": ">= 0.4" - } + "node_modules/minimalistic-crypto-utils": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz", + "integrity": "sha512-JIYlbt6g8i5jKfJ3xz7rF0LXmv2TkDxBLUkiBeZ7bAx4GnnNMr8xFpGnOxn6GhTEHx3SjRrZEoU+j04prX1ktg==" }, - "node_modules/ganache-core/node_modules/define-property": { - "version": "2.0.2", - "license": "MIT", + "node_modules/minimatch": { + "version": "9.0.3", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz", + "integrity": "sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==", + "peer": true, "dependencies": { - "is-descriptor": "^1.0.2", - "isobject": "^3.0.1" + "brace-expansion": "^2.0.1" }, "engines": { - "node": ">=0.10.0" + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/ganache-core/node_modules/defined": { - "version": "1.0.0", - "license": "MIT" - }, - "node_modules/ganache-core/node_modules/delayed-stream": { - "version": "1.0.0", - "license": "MIT", - "engines": { - "node": ">=0.4.0" + "node_modules/minimist": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", + "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/ganache-core/node_modules/depd": { - "version": "1.1.2", - "license": "MIT", - "optional": true, + "node_modules/minipass": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.0.4.tgz", + "integrity": "sha512-jYofLM5Dam9279rdkWzqHozUo4ybjdZmCsDHePy5V/PbBcVMiSZR97gmAy45aqi8CK1lG2ECd356FU86avfwUQ==", + "peer": true, "engines": { - "node": ">= 0.6" - } - }, - "node_modules/ganache-core/node_modules/des.js": { - "version": "1.0.1", - "license": "MIT", - "optional": true, - "dependencies": { - "inherits": "^2.0.1", - "minimalistic-assert": "^1.0.0" + "node": ">=16 || 14 >=14.17" } }, - "node_modules/ganache-core/node_modules/destroy": { - "version": "1.0.4", - "license": "MIT", - "optional": true - }, - "node_modules/ganache-core/node_modules/detect-indent": { - "version": "4.0.0", - "license": "MIT", + "node_modules/minizlib": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-1.3.3.tgz", + "integrity": "sha512-6ZYMOEnmVsdCeTJVE0W9ZD+pVnE8h9Hma/iOwwRDsdQoePpoX56/8B6z3P9VNwppJuBKNRuFDRNRqRWexT9G9Q==", "dependencies": { - "repeating": "^2.0.0" - }, - "engines": { - "node": ">=0.10.0" + "minipass": "^2.9.0" } }, - "node_modules/ganache-core/node_modules/diffie-hellman": { - "version": "5.0.3", - "license": "MIT", - "optional": true, + "node_modules/minizlib/node_modules/minipass": { + "version": "2.9.0", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-2.9.0.tgz", + "integrity": "sha512-wxfUjg9WebH+CUDX/CdbRlh5SmfZiy/hpkxaRI16Y9W56Pa75sWgd/rvFilSgrauD9NyFymP/+JFV3KwzIsJeg==", "dependencies": { - "bn.js": "^4.1.0", - "miller-rabin": "^4.0.0", - "randombytes": "^2.0.0" + "safe-buffer": "^5.1.2", + "yallist": "^3.0.0" } }, - "node_modules/ganache-core/node_modules/dom-walk": { - "version": "0.1.2" - }, - "node_modules/ganache-core/node_modules/dotignore": { - "version": "0.1.2", - "license": "MIT", + "node_modules/mkdirp": { + "version": "0.5.6", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", + "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", "dependencies": { - "minimatch": "^3.0.4" + "minimist": "^1.2.6" }, "bin": { - "ignored": "bin/ignored" - } - }, - "node_modules/ganache-core/node_modules/duplexer3": { - "version": "0.1.4", - "license": "BSD-3-Clause", - "optional": true - }, - "node_modules/ganache-core/node_modules/ecc-jsbn": { - "version": "0.1.2", - "license": "MIT", - "dependencies": { - "jsbn": "~0.1.0", - "safer-buffer": "^2.1.0" + "mkdirp": "bin/cmd.js" } }, - "node_modules/ganache-core/node_modules/ee-first": { - "version": "1.1.1", - "license": "MIT", + "node_modules/mkdirp-classic": { + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz", + "integrity": "sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==", "optional": true }, - "node_modules/ganache-core/node_modules/electron-to-chromium": { - "version": "1.3.636", - "license": "ISC" - }, - "node_modules/ganache-core/node_modules/elliptic": { - "version": "6.5.3", - "license": "MIT", + "node_modules/mkdirp-promise": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/mkdirp-promise/-/mkdirp-promise-5.0.1.tgz", + "integrity": "sha512-Hepn5kb1lJPtVW84RFT40YG1OddBNTOVUZR2bzQUHc+Z03en8/3uX0+060JDhcEzyO08HmipsN9DcnFMxhIL9w==", + "deprecated": "This package is broken and no longer maintained. 'mkdirp' itself supports promises now, please switch to that.", "dependencies": { - "bn.js": "^4.4.0", - "brorand": "^1.0.1", - "hash.js": "^1.0.0", - "hmac-drbg": "^1.0.0", - "inherits": "^2.0.1", - "minimalistic-assert": "^1.0.0", - "minimalistic-crypto-utils": "^1.0.0" - } - }, - "node_modules/ganache-core/node_modules/encodeurl": { - "version": "1.0.2", - "license": "MIT", - "optional": true, + "mkdirp": "*" + }, "engines": { - "node": ">= 0.8" + "node": ">=4" } }, - "node_modules/ganache-core/node_modules/encoding": { - "version": "0.1.13", - "license": "MIT", + "node_modules/mnemonist": { + "version": "0.38.5", + "resolved": "https://registry.npmjs.org/mnemonist/-/mnemonist-0.38.5.tgz", + "integrity": "sha512-bZTFT5rrPKtPJxj8KSV0WkPyNxl72vQepqqVUAW2ARUpUSF2qXMB6jZj7hW5/k7C1rtpzqbD/IIbJwLXUjCHeg==", "dependencies": { - "iconv-lite": "^0.6.2" + "obliterator": "^2.0.0" } }, - "node_modules/ganache-core/node_modules/encoding-down": { - "version": "5.0.4", - "license": "MIT", + "node_modules/mocha": { + "version": "10.2.0", + "resolved": "https://registry.npmjs.org/mocha/-/mocha-10.2.0.tgz", + "integrity": "sha512-IDY7fl/BecMwFHzoqF2sg/SHHANeBoMMXFlS9r0OXKDssYE1M5O43wUY/9BVPeIvfH2zmEbBfseqN9gBQZzXkg==", "dependencies": { - "abstract-leveldown": "^5.0.0", - "inherits": "^2.0.3", - "level-codec": "^9.0.0", - "level-errors": "^2.0.0", - "xtend": "^4.0.1" + "ansi-colors": "4.1.1", + "browser-stdout": "1.3.1", + "chokidar": "3.5.3", + "debug": "4.3.4", + "diff": "5.0.0", + "escape-string-regexp": "4.0.0", + "find-up": "5.0.0", + "glob": "7.2.0", + "he": "1.2.0", + "js-yaml": "4.1.0", + "log-symbols": "4.1.0", + "minimatch": "5.0.1", + "ms": "2.1.3", + "nanoid": "3.3.3", + "serialize-javascript": "6.0.0", + "strip-json-comments": "3.1.1", + "supports-color": "8.1.1", + "workerpool": "6.2.1", + "yargs": "16.2.0", + "yargs-parser": "20.2.4", + "yargs-unparser": "2.0.0" + }, + "bin": { + "_mocha": "bin/_mocha", + "mocha": "bin/mocha.js" + }, + "engines": { + "node": ">= 14.0.0" }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/mochajs" + } + }, + "node_modules/mocha/node_modules/ansi-colors": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz", + "integrity": "sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==", "engines": { "node": ">=6" } }, - "node_modules/ganache-core/node_modules/encoding-down/node_modules/abstract-leveldown": { + "node_modules/mocha/node_modules/find-up": { "version": "5.0.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", "dependencies": { - "xtend": "~4.0.0" + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" }, "engines": { - "node": ">=6" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/ganache-core/node_modules/encoding/node_modules/iconv-lite": { - "version": "0.6.2", - "license": "MIT", + "node_modules/mocha/node_modules/glob": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz", + "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==", "dependencies": { - "safer-buffer": ">= 2.1.2 < 3.0.0" + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" }, "engines": { - "node": ">=0.10.0" + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/ganache-core/node_modules/end-of-stream": { - "version": "1.4.4", - "license": "MIT", + "node_modules/mocha/node_modules/glob/node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", "dependencies": { - "once": "^1.4.0" + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" } }, - "node_modules/ganache-core/node_modules/errno": { - "version": "0.1.8", - "license": "MIT", + "node_modules/mocha/node_modules/glob/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", "dependencies": { - "prr": "~1.0.1" + "brace-expansion": "^1.1.7" }, - "bin": { - "errno": "cli.js" + "engines": { + "node": "*" } }, - "node_modules/ganache-core/node_modules/es-abstract": { - "version": "1.18.0-next.1", - "license": "MIT", + "node_modules/mocha/node_modules/locate-path": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", "dependencies": { - "es-to-primitive": "^1.2.1", - "function-bind": "^1.1.1", - "has": "^1.0.3", - "has-symbols": "^1.0.1", - "is-callable": "^1.2.2", - "is-negative-zero": "^2.0.0", - "is-regex": "^1.1.1", - "object-inspect": "^1.8.0", - "object-keys": "^1.1.1", - "object.assign": "^4.1.1", - "string.prototype.trimend": "^1.0.1", - "string.prototype.trimstart": "^1.0.1" + "p-locate": "^5.0.0" }, "engines": { - "node": ">= 0.4" + "node": ">=10" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/ganache-core/node_modules/es-to-primitive": { - "version": "1.2.1", - "license": "MIT", + "node_modules/mocha/node_modules/minimatch": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.0.1.tgz", + "integrity": "sha512-nLDxIFRyhDblz3qMuq+SoRZED4+miJ/G+tdDrjkkkRnjAsBexeGpgjLEQ0blJy7rHhR2b93rhQY4SvyWu9v03g==", "dependencies": { - "is-callable": "^1.1.4", - "is-date-object": "^1.0.1", - "is-symbol": "^1.0.2" + "brace-expansion": "^2.0.1" }, "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": ">=10" } }, - "node_modules/ganache-core/node_modules/es5-ext": { - "version": "0.10.53", - "license": "ISC", - "dependencies": { - "es6-iterator": "~2.0.3", - "es6-symbol": "~3.1.3", - "next-tick": "~1.0.0" - } + "node_modules/mocha/node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" }, - "node_modules/ganache-core/node_modules/es6-iterator": { - "version": "2.0.3", - "license": "MIT", + "node_modules/mocha/node_modules/p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", "dependencies": { - "d": "1", - "es5-ext": "^0.10.35", - "es6-symbol": "^3.1.1" + "yocto-queue": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/ganache-core/node_modules/es6-symbol": { - "version": "3.1.3", - "license": "ISC", + "node_modules/mocha/node_modules/p-locate": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", "dependencies": { - "d": "^1.0.1", - "ext": "^1.1.2" + "p-limit": "^3.0.2" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/ganache-core/node_modules/escape-html": { - "version": "1.0.3", - "license": "MIT", - "optional": true - }, - "node_modules/ganache-core/node_modules/escape-string-regexp": { - "version": "1.0.5", - "license": "MIT", + "node_modules/mocha/node_modules/supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "dependencies": { + "has-flag": "^4.0.0" + }, "engines": { - "node": ">=0.8.0" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" } }, - "node_modules/ganache-core/node_modules/esutils": { - "version": "2.0.3", - "license": "BSD-2-Clause", + "node_modules/mock-fs": { + "version": "4.14.0", + "resolved": "https://registry.npmjs.org/mock-fs/-/mock-fs-4.14.0.tgz", + "integrity": "sha512-qYvlv/exQ4+svI3UOvPUpLDF0OMX5euvUH0Ny4N5QyRyhNdgAgUrVH3iUINSzEPLvx0kbo/Bp28GJKIqvE7URw==" + }, + "node_modules/module-error": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/module-error/-/module-error-1.0.2.tgz", + "integrity": "sha512-0yuvsqSCv8LbaOKhnsQ/T5JhyFlCYLPXK3U2sgV10zoKQwzs/MyfuQUOZQ1V/6OCOJsK/TRgNVrPuPDqtdMFtA==", "engines": { - "node": ">=0.10.0" + "node": ">=10" } }, - "node_modules/ganache-core/node_modules/etag": { - "version": "1.8.1", - "license": "MIT", + "node_modules/moment": { + "version": "2.30.1", + "resolved": "https://registry.npmjs.org/moment/-/moment-2.30.1.tgz", + "integrity": "sha512-uEmtNhbDOrWPFS+hdjFCBfy9f2YoyzRpwcl+DqpC6taX21FzsTLQVbMV/W7PzNSX6x/bhC1zA3c2UQ5NzH6how==", "optional": true, "engines": { - "node": ">= 0.6" + "node": "*" } }, - "node_modules/ganache-core/node_modules/eth-block-tracker": { - "version": "3.0.1", - "license": "MIT", - "dependencies": { - "eth-query": "^2.1.0", - "ethereumjs-tx": "^1.3.3", - "ethereumjs-util": "^5.1.3", - "ethjs-util": "^0.1.3", - "json-rpc-engine": "^3.6.0", - "pify": "^2.3.0", - "tape": "^4.6.3" - } + "node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" }, - "node_modules/ganache-core/node_modules/eth-block-tracker/node_modules/ethereumjs-tx": { - "version": "1.3.7", - "license": "MPL-2.0", + "node_modules/multibase": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/multibase/-/multibase-0.6.1.tgz", + "integrity": "sha512-pFfAwyTjbbQgNc3G7D48JkJxWtoJoBMaR4xQUOuB8RnCgRqaYmWNFeJTTvrJ2w51bjLq2zTby6Rqj9TQ9elSUw==", + "deprecated": "This module has been superseded by the multiformats module", "dependencies": { - "ethereum-common": "^0.0.18", - "ethereumjs-util": "^5.0.0" + "base-x": "^3.0.8", + "buffer": "^5.5.0" } }, - "node_modules/ganache-core/node_modules/eth-block-tracker/node_modules/ethereumjs-util": { - "version": "5.2.1", - "license": "MPL-2.0", + "node_modules/multibase/node_modules/buffer": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", + "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], "dependencies": { - "bn.js": "^4.11.0", - "create-hash": "^1.1.2", - "elliptic": "^6.5.2", - "ethereum-cryptography": "^0.1.3", - "ethjs-util": "^0.1.3", - "rlp": "^2.0.0", - "safe-buffer": "^5.1.1" + "base64-js": "^1.3.1", + "ieee754": "^1.1.13" } }, - "node_modules/ganache-core/node_modules/eth-block-tracker/node_modules/pify": { - "version": "2.3.0", - "license": "MIT", - "engines": { - "node": ">=0.10.0" + "node_modules/multicodec": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/multicodec/-/multicodec-0.5.7.tgz", + "integrity": "sha512-PscoRxm3f+88fAtELwUnZxGDkduE2HD9Q6GHUOywQLjOGT/HAdhjLDYNZ1e7VR0s0TP0EwZ16LNUTFpoBGivOA==", + "deprecated": "This module has been superseded by the multiformats module", + "dependencies": { + "varint": "^5.0.0" } }, - "node_modules/ganache-core/node_modules/eth-ens-namehash": { - "version": "2.0.8", - "license": "ISC", - "optional": true, + "node_modules/multihashes": { + "version": "0.4.21", + "resolved": "https://registry.npmjs.org/multihashes/-/multihashes-0.4.21.tgz", + "integrity": "sha512-uVSvmeCWf36pU2nB4/1kzYZjsXD9vofZKpgudqkceYY5g2aZZXJ5r9lxuzoRLl1OAp28XljXsEJ/X/85ZsKmKw==", "dependencies": { - "idna-uts46-hx": "^2.3.1", - "js-sha3": "^0.5.7" + "buffer": "^5.5.0", + "multibase": "^0.7.0", + "varint": "^5.0.0" } }, - "node_modules/ganache-core/node_modules/eth-json-rpc-infura": { - "version": "3.2.1", - "license": "ISC", + "node_modules/multihashes/node_modules/buffer": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", + "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], "dependencies": { - "cross-fetch": "^2.1.1", - "eth-json-rpc-middleware": "^1.5.0", - "json-rpc-engine": "^3.4.0", - "json-rpc-error": "^2.0.0" + "base64-js": "^1.3.1", + "ieee754": "^1.1.13" } }, - "node_modules/ganache-core/node_modules/eth-json-rpc-middleware": { - "version": "1.6.0", - "license": "ISC", - "dependencies": { - "async": "^2.5.0", - "eth-query": "^2.1.2", - "eth-tx-summary": "^3.1.2", - "ethereumjs-block": "^1.6.0", - "ethereumjs-tx": "^1.3.3", - "ethereumjs-util": "^5.1.2", - "ethereumjs-vm": "^2.1.0", - "fetch-ponyfill": "^4.0.0", - "json-rpc-engine": "^3.6.0", - "json-rpc-error": "^2.0.0", - "json-stable-stringify": "^1.0.1", - "promise-to-callback": "^1.0.0", - "tape": "^4.6.3" - } - }, - "node_modules/ganache-core/node_modules/eth-json-rpc-middleware/node_modules/abstract-leveldown": { - "version": "2.6.3", - "license": "MIT", + "node_modules/multihashes/node_modules/multibase": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/multibase/-/multibase-0.7.0.tgz", + "integrity": "sha512-TW8q03O0f6PNFTQDvh3xxH03c8CjGaaYrjkl9UQPG6rz53TQzzxJVCIWVjzcbN/Q5Y53Zd0IBQBMVktVgNx4Fg==", + "deprecated": "This module has been superseded by the multiformats module", "dependencies": { - "xtend": "~4.0.0" + "base-x": "^3.0.8", + "buffer": "^5.5.0" } }, - "node_modules/ganache-core/node_modules/eth-json-rpc-middleware/node_modules/deferred-leveldown": { - "version": "1.2.2", - "license": "MIT", + "node_modules/murmur-128": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/murmur-128/-/murmur-128-0.2.1.tgz", + "integrity": "sha512-WseEgiRkI6aMFBbj8Cg9yBj/y+OdipwVC7zUo3W2W1JAJITwouUOtpqsmGSg67EQmwwSyod7hsVsWY5LsrfQVg==", + "dev": true, "dependencies": { - "abstract-leveldown": "~2.6.0" + "encode-utf8": "^1.0.2", + "fmix": "^0.1.0", + "imul": "^1.0.0" } }, - "node_modules/ganache-core/node_modules/eth-json-rpc-middleware/node_modules/ethereumjs-account": { - "version": "2.0.5", - "license": "MPL-2.0", + "node_modules/mv": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/mv/-/mv-2.1.1.tgz", + "integrity": "sha512-at/ZndSy3xEGJ8i0ygALh8ru9qy7gWW1cmkaqBN29JmMlIvM//MEO9y1sk/avxuwnPcfhkejkLsuPxH81BrkSg==", + "optional": true, "dependencies": { - "ethereumjs-util": "^5.0.0", - "rlp": "^2.0.0", - "safe-buffer": "^5.1.1" + "mkdirp": "~0.5.1", + "ncp": "~2.0.0", + "rimraf": "~2.4.0" + }, + "engines": { + "node": ">=0.8.0" } }, - "node_modules/ganache-core/node_modules/eth-json-rpc-middleware/node_modules/ethereumjs-block": { - "version": "1.7.1", - "license": "MPL-2.0", - "dependencies": { - "async": "^2.0.1", - "ethereum-common": "0.2.0", - "ethereumjs-tx": "^1.2.2", - "ethereumjs-util": "^5.0.0", - "merkle-patricia-tree": "^2.1.2" + "node_modules/n": { + "version": "9.2.0", + "resolved": "https://registry.npmjs.org/n/-/n-9.2.0.tgz", + "integrity": "sha512-R8mFN2OWwNVc+r1f9fDzcT34DnDwUIHskrpTesZ6SdluaXBBnRtTu5tlfaSPloBi1Z/eGJoPO9nhyawWPad5UQ==", + "os": [ + "!win32" + ], + "bin": { + "n": "bin/n" + }, + "engines": { + "node": "*" } }, - "node_modules/ganache-core/node_modules/eth-json-rpc-middleware/node_modules/ethereumjs-block/node_modules/ethereum-common": { - "version": "0.2.0", - "license": "MIT" + "node_modules/nan": { + "version": "2.18.0", + "resolved": "https://registry.npmjs.org/nan/-/nan-2.18.0.tgz", + "integrity": "sha512-W7tfG7vMOGtD30sHoZSSc/JVYiyDPEyQVso/Zz+/uQd0B0L46gtC+pHha5FFMRpil6fm/AoEcRWyOVi4+E/f8w==", + "optional": true }, - "node_modules/ganache-core/node_modules/eth-json-rpc-middleware/node_modules/ethereumjs-tx": { - "version": "1.3.7", - "license": "MPL-2.0", - "dependencies": { - "ethereum-common": "^0.0.18", - "ethereumjs-util": "^5.0.0" - } + "node_modules/nano-base32": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/nano-base32/-/nano-base32-1.0.1.tgz", + "integrity": "sha512-sxEtoTqAPdjWVGv71Q17koMFGsOMSiHsIFEvzOM7cNp8BXB4AnEwmDabm5dorusJf/v1z7QxaZYxUorU9RKaAw==" }, - "node_modules/ganache-core/node_modules/eth-json-rpc-middleware/node_modules/ethereumjs-util": { - "version": "5.2.1", - "license": "MPL-2.0", - "dependencies": { - "bn.js": "^4.11.0", - "create-hash": "^1.1.2", - "elliptic": "^6.5.2", - "ethereum-cryptography": "^0.1.3", - "ethjs-util": "^0.1.3", - "rlp": "^2.0.0", - "safe-buffer": "^5.1.1" - } + "node_modules/nano-json-stream-parser": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/nano-json-stream-parser/-/nano-json-stream-parser-0.1.2.tgz", + "integrity": "sha512-9MqxMH/BSJC7dnLsEMPyfN5Dvoo49IsPFYMcHw3Bcfc2kN0lpHRBSzlMSVx4HGyJ7s9B31CyBTVehWJoQ8Ctew==" }, - "node_modules/ganache-core/node_modules/eth-json-rpc-middleware/node_modules/ethereumjs-vm": { - "version": "2.6.0", - "license": "MPL-2.0", - "dependencies": { - "async": "^2.1.2", - "async-eventemitter": "^0.2.2", - "ethereumjs-account": "^2.0.3", - "ethereumjs-block": "~2.2.0", - "ethereumjs-common": "^1.1.0", - "ethereumjs-util": "^6.0.0", - "fake-merkle-patricia-tree": "^1.0.1", - "functional-red-black-tree": "^1.0.1", - "merkle-patricia-tree": "^2.3.2", - "rustbn.js": "~0.2.0", - "safe-buffer": "^5.1.1" + "node_modules/nanoid": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.3.tgz", + "integrity": "sha512-p1sjXuopFs0xg+fPASzQ28agW1oHD7xDsd9Xkf3T15H3c/cifrFHVwrh74PdoklAPi+i7MdRsE47vm2r6JoB+w==", + "bin": { + "nanoid": "bin/nanoid.cjs" + }, + "engines": { + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" } }, - "node_modules/ganache-core/node_modules/eth-json-rpc-middleware/node_modules/ethereumjs-vm/node_modules/ethereumjs-block": { - "version": "2.2.2", - "license": "MPL-2.0", - "dependencies": { - "async": "^2.0.1", - "ethereumjs-common": "^1.5.0", - "ethereumjs-tx": "^2.1.1", - "ethereumjs-util": "^5.0.0", - "merkle-patricia-tree": "^2.1.2" - } + "node_modules/napi-build-utils": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/napi-build-utils/-/napi-build-utils-1.0.2.tgz", + "integrity": "sha512-ONmRUqK7zj7DWX0D9ADe03wbwOBZxNAfF20PlGfCWQcD3+/MakShIHrMqx9YwPTfxDdF1zLeL+RGZiR9kGMLdg==", + "optional": true }, - "node_modules/ganache-core/node_modules/eth-json-rpc-middleware/node_modules/ethereumjs-vm/node_modules/ethereumjs-block/node_modules/ethereumjs-util": { - "version": "5.2.1", - "license": "MPL-2.0", - "dependencies": { - "bn.js": "^4.11.0", - "create-hash": "^1.1.2", - "elliptic": "^6.5.2", - "ethereum-cryptography": "^0.1.3", - "ethjs-util": "^0.1.3", - "rlp": "^2.0.0", - "safe-buffer": "^5.1.1" - } + "node_modules/napi-macros": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/napi-macros/-/napi-macros-2.2.2.tgz", + "integrity": "sha512-hmEVtAGYzVQpCKdbQea4skABsdXW4RUh5t5mJ2zzqowJS2OyXZTU1KhDVFhx+NlWZ4ap9mqR9TcDO3LTTttd+g==" }, - "node_modules/ganache-core/node_modules/eth-json-rpc-middleware/node_modules/ethereumjs-vm/node_modules/ethereumjs-tx": { - "version": "2.1.2", - "license": "MPL-2.0", - "dependencies": { - "ethereumjs-common": "^1.5.0", - "ethereumjs-util": "^6.0.0" + "node_modules/ncp": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ncp/-/ncp-2.0.0.tgz", + "integrity": "sha512-zIdGUrPRFTUELUvr3Gmc7KZ2Sw/h1PiVM0Af/oHB6zgnV1ikqSfRk+TOufi79aHYCW3NiOXmr1BP5nWbzojLaA==", + "optional": true, + "bin": { + "ncp": "bin/ncp" } }, - "node_modules/ganache-core/node_modules/eth-json-rpc-middleware/node_modules/ethereumjs-vm/node_modules/ethereumjs-util": { - "version": "6.2.1", - "license": "MPL-2.0", - "dependencies": { - "@types/bn.js": "^4.11.3", - "bn.js": "^4.11.0", - "create-hash": "^1.1.2", - "elliptic": "^6.5.2", - "ethereum-cryptography": "^0.1.3", - "ethjs-util": "0.1.6", - "rlp": "^2.2.3" + "node_modules/negotiator": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", + "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", + "engines": { + "node": ">= 0.6" } }, - "node_modules/ganache-core/node_modules/eth-json-rpc-middleware/node_modules/isarray": { - "version": "0.0.1", - "license": "MIT" - }, - "node_modules/ganache-core/node_modules/eth-json-rpc-middleware/node_modules/level-codec": { - "version": "7.0.1", - "license": "MIT" + "node_modules/next-tick": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/next-tick/-/next-tick-1.1.0.tgz", + "integrity": "sha512-CXdUiJembsNjuToQvxayPZF9Vqht7hewsvy2sOWafLvi2awflj9mOC6bHIg50orX8IJvWKY9wYQ/zB2kogPslQ==" }, - "node_modules/ganache-core/node_modules/eth-json-rpc-middleware/node_modules/level-errors": { + "node_modules/nice-try": { "version": "1.0.5", - "license": "MIT", + "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz", + "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==" + }, + "node_modules/no-case": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/no-case/-/no-case-2.3.2.tgz", + "integrity": "sha512-rmTZ9kz+f3rCvK2TD1Ue/oZlns7OGoIWP4fc3llxxRXlOkHKoWPPWJOfFYpITabSow43QJbRIoHQXtt10VldyQ==", "dependencies": { - "errno": "~0.1.1" + "lower-case": "^1.1.1" } }, - "node_modules/ganache-core/node_modules/eth-json-rpc-middleware/node_modules/level-iterator-stream": { - "version": "1.3.1", - "license": "MIT", + "node_modules/node-abi": { + "version": "2.30.1", + "resolved": "https://registry.npmjs.org/node-abi/-/node-abi-2.30.1.tgz", + "integrity": "sha512-/2D0wOQPgaUWzVSVgRMx+trKJRC2UG4SUc4oCJoXx9Uxjtp0Vy3/kt7zcbxHF8+Z/pK3UloLWzBISg72brfy1w==", + "optional": true, "dependencies": { - "inherits": "^2.0.1", - "level-errors": "^1.0.3", - "readable-stream": "^1.0.33", - "xtend": "^4.0.0" + "semver": "^5.4.1" } }, - "node_modules/ganache-core/node_modules/eth-json-rpc-middleware/node_modules/level-iterator-stream/node_modules/readable-stream": { - "version": "1.1.14", - "license": "MIT", - "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.1", - "isarray": "0.0.1", - "string_decoder": "~0.10.x" + "node_modules/node-abi/node_modules/semver": { + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", + "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", + "optional": true, + "bin": { + "semver": "bin/semver" } }, - "node_modules/ganache-core/node_modules/eth-json-rpc-middleware/node_modules/level-ws": { - "version": "0.0.0", - "license": "MIT", + "node_modules/node-addon-api": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-2.0.2.tgz", + "integrity": "sha512-Ntyt4AIXyaLIuMHF6IOoTakB3K+RWxwtsHNRxllEoA6vPwP9o4866g6YWDLUdnucilZhmkxiHwHr11gAENw+QA==" + }, + "node_modules/node-fetch": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz", + "integrity": "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==", "dependencies": { - "readable-stream": "~1.0.15", - "xtend": "~2.1.1" + "whatwg-url": "^5.0.0" + }, + "engines": { + "node": "4.x || >=6.0.0" + }, + "peerDependencies": { + "encoding": "^0.1.0" + }, + "peerDependenciesMeta": { + "encoding": { + "optional": true + } } }, - "node_modules/ganache-core/node_modules/eth-json-rpc-middleware/node_modules/level-ws/node_modules/readable-stream": { - "version": "1.0.34", - "license": "MIT", - "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.1", - "isarray": "0.0.1", - "string_decoder": "~0.10.x" + "node_modules/node-gyp-build": { + "version": "4.8.0", + "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.8.0.tgz", + "integrity": "sha512-u6fs2AEUljNho3EYTJNBfImO5QTo/J/1Etd+NVdCj7qWKUSN/bSLkZwhDv7I+w/MSC6qJ4cknepkAYykDdK8og==", + "bin": { + "node-gyp-build": "bin.js", + "node-gyp-build-optional": "optional.js", + "node-gyp-build-test": "build-test.js" } }, - "node_modules/ganache-core/node_modules/eth-json-rpc-middleware/node_modules/level-ws/node_modules/xtend": { - "version": "2.1.2", + "node_modules/node-hid": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/node-hid/-/node-hid-1.3.0.tgz", + "integrity": "sha512-BA6G4V84kiNd1uAChub/Z/5s/xS3EHBCxotQ0nyYrUG65mXewUDHE1tWOSqA2dp3N+mV0Ffq9wo2AW9t4p/G7g==", + "hasInstallScript": true, + "optional": true, "dependencies": { - "object-keys": "~0.4.0" + "bindings": "^1.5.0", + "nan": "^2.14.0", + "node-abi": "^2.18.0", + "prebuild-install": "^5.3.4" + }, + "bin": { + "hid-showdevices": "src/show-devices.js" }, "engines": { - "node": ">=0.4" + "node": ">=6.0.0" } }, - "node_modules/ganache-core/node_modules/eth-json-rpc-middleware/node_modules/levelup": { - "version": "1.3.9", - "license": "MIT", - "dependencies": { - "deferred-leveldown": "~1.2.1", - "level-codec": "~7.0.0", - "level-errors": "~1.0.3", - "level-iterator-stream": "~1.3.0", - "prr": "~1.0.1", - "semver": "~5.4.1", - "xtend": "~4.0.0" + "node_modules/nofilter": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/nofilter/-/nofilter-3.1.0.tgz", + "integrity": "sha512-l2NNj07e9afPnhAhvgVrCD/oy2Ai1yfLpuo3EpiO1jFTsB4sFz6oIfAfSZyQzVpkZQ9xS8ZS5g1jCBgq4Hwo0g==", + "dev": true, + "engines": { + "node": ">=12.19" } }, - "node_modules/ganache-core/node_modules/eth-json-rpc-middleware/node_modules/ltgt": { - "version": "2.2.1", - "license": "MIT" + "node_modules/noop-logger": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/noop-logger/-/noop-logger-0.1.1.tgz", + "integrity": "sha512-6kM8CLXvuW5crTxsAtva2YLrRrDaiTIkIePWs9moLHqbFWT94WpNFjwS/5dfLfECg5i/lkmw3aoqVidxt23TEQ==", + "optional": true }, - "node_modules/ganache-core/node_modules/eth-json-rpc-middleware/node_modules/memdown": { - "version": "1.4.1", - "license": "MIT", + "node_modules/normalize-hex": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/normalize-hex/-/normalize-hex-0.0.2.tgz", + "integrity": "sha512-E2dx7XJQnjsm6SkS4G6GGvIXRHaLeWAZE2D2N3aia+OpIif2UT8y4S0KCjrX3WmFDSeFnlNOp0FSHFjLeJ4SJw==", "dependencies": { - "abstract-leveldown": "~2.7.1", - "functional-red-black-tree": "^1.0.1", - "immediate": "^3.2.3", - "inherits": "~2.0.1", - "ltgt": "~2.2.0", - "safe-buffer": "~5.1.1" + "bn.js": "^4.11.8" } }, - "node_modules/ganache-core/node_modules/eth-json-rpc-middleware/node_modules/memdown/node_modules/abstract-leveldown": { - "version": "2.7.2", - "license": "MIT", - "dependencies": { - "xtend": "~4.0.0" - } + "node_modules/normalize-hex/node_modules/bn.js": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==" }, - "node_modules/ganache-core/node_modules/eth-json-rpc-middleware/node_modules/merkle-patricia-tree": { - "version": "2.3.2", - "license": "MPL-2.0", + "node_modules/normalize-package-data": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", + "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", "dependencies": { - "async": "^1.4.2", - "ethereumjs-util": "^5.0.0", - "level-ws": "0.0.0", - "levelup": "^1.2.1", - "memdown": "^1.0.0", - "readable-stream": "^2.0.0", - "rlp": "^2.0.0", - "semaphore": ">=1.0.1" + "hosted-git-info": "^2.1.4", + "resolve": "^1.10.0", + "semver": "2 || 3 || 4 || 5", + "validate-npm-package-license": "^3.0.1" } }, - "node_modules/ganache-core/node_modules/eth-json-rpc-middleware/node_modules/merkle-patricia-tree/node_modules/async": { - "version": "1.5.2", - "license": "MIT" - }, - "node_modules/ganache-core/node_modules/eth-json-rpc-middleware/node_modules/object-keys": { - "version": "0.4.0", - "license": "MIT" - }, - "node_modules/ganache-core/node_modules/eth-json-rpc-middleware/node_modules/safe-buffer": { - "version": "5.1.2", - "license": "MIT" - }, - "node_modules/ganache-core/node_modules/eth-json-rpc-middleware/node_modules/semver": { - "version": "5.4.1", - "license": "ISC", + "node_modules/normalize-package-data/node_modules/semver": { + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", + "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", "bin": { "semver": "bin/semver" } }, - "node_modules/ganache-core/node_modules/eth-json-rpc-middleware/node_modules/string_decoder": { - "version": "0.10.31", - "license": "MIT" - }, - "node_modules/ganache-core/node_modules/eth-lib": { - "version": "0.1.29", - "license": "MIT", - "optional": true, - "dependencies": { - "bn.js": "^4.11.6", - "elliptic": "^6.4.0", - "nano-json-stream-parser": "^0.1.2", - "servify": "^0.1.12", - "ws": "^3.0.0", - "xhr-request-promise": "^0.1.2" + "node_modules/normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "engines": { + "node": ">=0.10.0" } }, - "node_modules/ganache-core/node_modules/eth-query": { - "version": "2.1.2", - "license": "ISC", - "dependencies": { - "json-rpc-random-id": "^1.0.0", - "xtend": "^4.0.1" + "node_modules/normalize-url": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-6.1.0.tgz", + "integrity": "sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A==", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/ganache-core/node_modules/eth-sig-util": { - "version": "3.0.0", - "license": "ISC", + "node_modules/npmlog": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-4.1.2.tgz", + "integrity": "sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg==", + "optional": true, "dependencies": { - "buffer": "^5.2.1", - "elliptic": "^6.4.0", - "ethereumjs-abi": "0.6.5", - "ethereumjs-util": "^5.1.1", - "tweetnacl": "^1.0.0", - "tweetnacl-util": "^0.15.0" + "are-we-there-yet": "~1.1.2", + "console-control-strings": "~1.1.0", + "gauge": "~2.7.3", + "set-blocking": "~2.0.0" } }, - "node_modules/ganache-core/node_modules/eth-sig-util/node_modules/ethereumjs-abi": { - "version": "0.6.5", - "license": "MIT", + "node_modules/nth-check": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.1.1.tgz", + "integrity": "sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==", "dependencies": { - "bn.js": "^4.10.0", - "ethereumjs-util": "^4.3.0" + "boolbase": "^1.0.0" + }, + "funding": { + "url": "https://github.com/fb55/nth-check?sponsor=1" } }, - "node_modules/ganache-core/node_modules/eth-sig-util/node_modules/ethereumjs-abi/node_modules/ethereumjs-util": { - "version": "4.5.1", - "license": "MPL-2.0", - "dependencies": { - "bn.js": "^4.8.0", - "create-hash": "^1.1.2", - "elliptic": "^6.5.2", - "ethereum-cryptography": "^0.1.3", - "rlp": "^2.0.0" + "node_modules/number-is-nan": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", + "integrity": "sha512-4jbtZXNAsfZbAHiiqjLPBiCl16dES1zI4Hpzzxw61Tk+loF+sBDBKx1ICKKKwIqQ7M0mFn1TmkN7euSncWgHiQ==", + "engines": { + "node": ">=0.10.0" } }, - "node_modules/ganache-core/node_modules/eth-sig-util/node_modules/ethereumjs-util": { - "version": "5.2.1", - "license": "MPL-2.0", + "node_modules/number-to-bn": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/number-to-bn/-/number-to-bn-1.7.0.tgz", + "integrity": "sha512-wsJ9gfSz1/s4ZsJN01lyonwuxA1tml6X1yBDnfpMglypcBRFZZkus26EdPSlqS5GJfYddVZa22p3VNb3z5m5Ig==", "dependencies": { - "bn.js": "^4.11.0", - "create-hash": "^1.1.2", - "elliptic": "^6.5.2", - "ethereum-cryptography": "^0.1.3", - "ethjs-util": "^0.1.3", - "rlp": "^2.0.0", - "safe-buffer": "^5.1.1" + "bn.js": "4.11.6", + "strip-hex-prefix": "1.0.0" + }, + "engines": { + "node": ">=6.5.0", + "npm": ">=3" } }, - "node_modules/ganache-core/node_modules/eth-tx-summary": { - "version": "3.2.4", - "license": "ISC", - "dependencies": { - "async": "^2.1.2", - "clone": "^2.0.0", - "concat-stream": "^1.5.1", - "end-of-stream": "^1.1.0", - "eth-query": "^2.0.2", - "ethereumjs-block": "^1.4.1", - "ethereumjs-tx": "^1.1.1", - "ethereumjs-util": "^5.0.1", - "ethereumjs-vm": "^2.6.0", - "through2": "^2.0.3" + "node_modules/number-to-bn/node_modules/bn.js": { + "version": "4.11.6", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.6.tgz", + "integrity": "sha512-XWwnNNFCuuSQ0m3r3C4LE3EiORltHd9M05pq6FOlVeiophzRbMo50Sbz1ehl8K3Z+jw9+vmgnXefY1hz8X+2wA==" + }, + "node_modules/oauth-sign": { + "version": "0.9.0", + "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz", + "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==", + "engines": { + "node": "*" } }, - "node_modules/ganache-core/node_modules/eth-tx-summary/node_modules/abstract-leveldown": { - "version": "2.6.3", - "license": "MIT", - "dependencies": { - "xtend": "~4.0.0" + "node_modules/object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", + "engines": { + "node": ">=0.10.0" } }, - "node_modules/ganache-core/node_modules/eth-tx-summary/node_modules/deferred-leveldown": { - "version": "1.2.2", - "license": "MIT", - "dependencies": { - "abstract-leveldown": "~2.6.0" + "node_modules/object-inspect": { + "version": "1.13.1", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.1.tgz", + "integrity": "sha512-5qoj1RUiKOMsCCNLV1CBiPYE10sziTsnmNxkAI/rZhiD63CF7IqdFGC/XzjWjpSgLf0LxXX3bDFIh0E18f6UhQ==", + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/ganache-core/node_modules/eth-tx-summary/node_modules/ethereumjs-account": { - "version": "2.0.5", - "license": "MPL-2.0", - "dependencies": { - "ethereumjs-util": "^5.0.0", - "rlp": "^2.0.0", - "safe-buffer": "^5.1.1" + "node_modules/object-keys": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", + "dev": true, + "engines": { + "node": ">= 0.4" } }, - "node_modules/ganache-core/node_modules/eth-tx-summary/node_modules/ethereumjs-block": { - "version": "1.7.1", - "license": "MPL-2.0", + "node_modules/object.assign": { + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.5.tgz", + "integrity": "sha512-byy+U7gp+FVwmyzKPYhW2h5l3crpmGsxl7X2s8y43IgxvG4g3QZ6CffDtsNQy1WsmZpQbO+ybo0AlW7TY6DcBQ==", + "dev": true, "dependencies": { - "async": "^2.0.1", - "ethereum-common": "0.2.0", - "ethereumjs-tx": "^1.2.2", - "ethereumjs-util": "^5.0.0", - "merkle-patricia-tree": "^2.1.2" + "call-bind": "^1.0.5", + "define-properties": "^1.2.1", + "has-symbols": "^1.0.3", + "object-keys": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/ganache-core/node_modules/eth-tx-summary/node_modules/ethereumjs-block/node_modules/ethereum-common": { - "version": "0.2.0", - "license": "MIT" + "node_modules/obliterator": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/obliterator/-/obliterator-2.0.4.tgz", + "integrity": "sha512-lgHwxlxV1qIg1Eap7LgIeoBWIMFibOjbrYPIPJZcI1mmGAI2m3lNYpK12Y+GBdPQ0U1hRwSord7GIaawz962qQ==" }, - "node_modules/ganache-core/node_modules/eth-tx-summary/node_modules/ethereumjs-tx": { - "version": "1.3.7", - "license": "MPL-2.0", + "node_modules/oboe": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/oboe/-/oboe-2.1.5.tgz", + "integrity": "sha512-zRFWiF+FoicxEs3jNI/WYUrVEgA7DeET/InK0XQuudGHRg8iIob3cNPrJTKaz4004uaA9Pbe+Dwa8iluhjLZWA==", "dependencies": { - "ethereum-common": "^0.0.18", - "ethereumjs-util": "^5.0.0" + "http-https": "^1.0.0" } }, - "node_modules/ganache-core/node_modules/eth-tx-summary/node_modules/ethereumjs-util": { - "version": "5.2.1", - "license": "MPL-2.0", + "node_modules/on-finished": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", + "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", "dependencies": { - "bn.js": "^4.11.0", - "create-hash": "^1.1.2", - "elliptic": "^6.5.2", - "ethereum-cryptography": "^0.1.3", - "ethjs-util": "^0.1.3", - "rlp": "^2.0.0", - "safe-buffer": "^5.1.1" - } - }, - "node_modules/ganache-core/node_modules/eth-tx-summary/node_modules/ethereumjs-vm": { - "version": "2.6.0", - "license": "MPL-2.0", - "dependencies": { - "async": "^2.1.2", - "async-eventemitter": "^0.2.2", - "ethereumjs-account": "^2.0.3", - "ethereumjs-block": "~2.2.0", - "ethereumjs-common": "^1.1.0", - "ethereumjs-util": "^6.0.0", - "fake-merkle-patricia-tree": "^1.0.1", - "functional-red-black-tree": "^1.0.1", - "merkle-patricia-tree": "^2.3.2", - "rustbn.js": "~0.2.0", - "safe-buffer": "^5.1.1" + "ee-first": "1.1.1" + }, + "engines": { + "node": ">= 0.8" } }, - "node_modules/ganache-core/node_modules/eth-tx-summary/node_modules/ethereumjs-vm/node_modules/ethereumjs-block": { - "version": "2.2.2", - "license": "MPL-2.0", + "node_modules/once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", "dependencies": { - "async": "^2.0.1", - "ethereumjs-common": "^1.5.0", - "ethereumjs-tx": "^2.1.1", - "ethereumjs-util": "^5.0.0", - "merkle-patricia-tree": "^2.1.2" + "wrappy": "1" } }, - "node_modules/ganache-core/node_modules/eth-tx-summary/node_modules/ethereumjs-vm/node_modules/ethereumjs-block/node_modules/ethereumjs-util": { - "version": "5.2.1", - "license": "MPL-2.0", + "node_modules/open": { + "version": "7.4.2", + "resolved": "https://registry.npmjs.org/open/-/open-7.4.2.tgz", + "integrity": "sha512-MVHddDVweXZF3awtlAS+6pgKLlm/JgxZ90+/NBurBoQctVOOB/zDdVjcyPzQ+0laDGbsWgrRkflI65sQeOgT9Q==", "dependencies": { - "bn.js": "^4.11.0", - "create-hash": "^1.1.2", - "elliptic": "^6.5.2", - "ethereum-cryptography": "^0.1.3", - "ethjs-util": "^0.1.3", - "rlp": "^2.0.0", - "safe-buffer": "^5.1.1" + "is-docker": "^2.0.0", + "is-wsl": "^2.1.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/ganache-core/node_modules/eth-tx-summary/node_modules/ethereumjs-vm/node_modules/ethereumjs-tx": { - "version": "2.1.2", - "license": "MPL-2.0", + "node_modules/os-locale": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-1.4.0.tgz", + "integrity": "sha512-PRT7ZORmwu2MEFt4/fv3Q+mEfN4zetKxufQrkShY2oGvUms9r8otu5HfdyIFHkYXjO7laNsoVGmM2MANfuTA8g==", "dependencies": { - "ethereumjs-common": "^1.5.0", - "ethereumjs-util": "^6.0.0" + "lcid": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" } }, - "node_modules/ganache-core/node_modules/eth-tx-summary/node_modules/ethereumjs-vm/node_modules/ethereumjs-util": { - "version": "6.2.1", - "license": "MPL-2.0", - "dependencies": { - "@types/bn.js": "^4.11.3", - "bn.js": "^4.11.0", - "create-hash": "^1.1.2", - "elliptic": "^6.5.2", - "ethereum-cryptography": "^0.1.3", - "ethjs-util": "0.1.6", - "rlp": "^2.2.3" + "node_modules/os-tmpdir": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", + "integrity": "sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==", + "engines": { + "node": ">=0.10.0" } }, - "node_modules/ganache-core/node_modules/eth-tx-summary/node_modules/isarray": { - "version": "0.0.1", - "license": "MIT" - }, - "node_modules/ganache-core/node_modules/eth-tx-summary/node_modules/level-codec": { - "version": "7.0.1", - "license": "MIT" + "node_modules/p-cancelable": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-3.0.0.tgz", + "integrity": "sha512-mlVgR3PGuzlo0MmTdk4cXqXWlwQDLnONTAg6sm62XkMJEiRxN3GL3SffkYvqwonbkJBcrI7Uvv5Zh9yjvn2iUw==", + "engines": { + "node": ">=12.20" + } }, - "node_modules/ganache-core/node_modules/eth-tx-summary/node_modules/level-errors": { - "version": "1.0.5", - "license": "MIT", + "node_modules/p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "devOptional": true, "dependencies": { - "errno": "~0.1.1" + "p-try": "^2.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/ganache-core/node_modules/eth-tx-summary/node_modules/level-iterator-stream": { - "version": "1.3.1", - "license": "MIT", + "node_modules/p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "devOptional": true, "dependencies": { - "inherits": "^2.0.1", - "level-errors": "^1.0.3", - "readable-stream": "^1.0.33", - "xtend": "^4.0.0" + "p-limit": "^2.2.0" + }, + "engines": { + "node": ">=8" } }, - "node_modules/ganache-core/node_modules/eth-tx-summary/node_modules/level-iterator-stream/node_modules/readable-stream": { - "version": "1.1.14", - "license": "MIT", + "node_modules/p-map": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz", + "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==", "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.1", - "isarray": "0.0.1", - "string_decoder": "~0.10.x" + "aggregate-error": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/ganache-core/node_modules/eth-tx-summary/node_modules/level-ws": { - "version": "0.0.0", - "license": "MIT", - "dependencies": { - "readable-stream": "~1.0.15", - "xtend": "~2.1.1" + "node_modules/p-try": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", + "devOptional": true, + "engines": { + "node": ">=6" } }, - "node_modules/ganache-core/node_modules/eth-tx-summary/node_modules/level-ws/node_modules/readable-stream": { - "version": "1.0.34", - "license": "MIT", + "node_modules/pako": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.11.tgz", + "integrity": "sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==" + }, + "node_modules/param-case": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/param-case/-/param-case-2.1.1.tgz", + "integrity": "sha512-eQE845L6ot89sk2N8liD8HAuH4ca6Vvr7VWAWwt7+kvvG5aBcPmmphQ68JsEG2qa9n1TykS2DLeMt363AAH8/w==", "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.1", - "isarray": "0.0.1", - "string_decoder": "~0.10.x" + "no-case": "^2.2.0" } }, - "node_modules/ganache-core/node_modules/eth-tx-summary/node_modules/level-ws/node_modules/xtend": { - "version": "2.1.2", + "node_modules/parse-cache-control": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parse-cache-control/-/parse-cache-control-1.0.1.tgz", + "integrity": "sha512-60zvsJReQPX5/QP0Kzfd/VrpjScIQ7SHBW6bFCYfEP+fp0Eppr1SHhIO5nd1PjZtvclzSzES9D/p5nFJurwfWg==" + }, + "node_modules/parse-headers": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/parse-headers/-/parse-headers-2.0.5.tgz", + "integrity": "sha512-ft3iAoLOB/MlwbNXgzy43SWGP6sQki2jQvAyBg/zDFAgr9bfNWZIUj42Kw2eJIl8kEi4PbgE6U1Zau/HwI75HA==" + }, + "node_modules/parse-json": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz", + "integrity": "sha512-QR/GGaKCkhwk1ePQNYDRKYZ3mwU9ypsKhB0XyFnLQdomyEqk3e8wpW3V5Jp88zbxK4n5ST1nqo+g9juTpownhQ==", "dependencies": { - "object-keys": "~0.4.0" + "error-ex": "^1.2.0" }, "engines": { - "node": ">=0.4" + "node": ">=0.10.0" } }, - "node_modules/ganache-core/node_modules/eth-tx-summary/node_modules/levelup": { - "version": "1.3.9", - "license": "MIT", + "node_modules/parse5": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-7.1.2.tgz", + "integrity": "sha512-Czj1WaSVpaoj0wbhMzLmWD69anp2WH7FXMB9n1Sy8/ZFF9jolSQVMu1Ij5WIyGmcBmhk7EOndpO4mIpihVqAXw==", "dependencies": { - "deferred-leveldown": "~1.2.1", - "level-codec": "~7.0.0", - "level-errors": "~1.0.3", - "level-iterator-stream": "~1.3.0", - "prr": "~1.0.1", - "semver": "~5.4.1", - "xtend": "~4.0.0" + "entities": "^4.4.0" + }, + "funding": { + "url": "https://github.com/inikulin/parse5?sponsor=1" } }, - "node_modules/ganache-core/node_modules/eth-tx-summary/node_modules/ltgt": { - "version": "2.2.1", - "license": "MIT" - }, - "node_modules/ganache-core/node_modules/eth-tx-summary/node_modules/memdown": { - "version": "1.4.1", - "license": "MIT", + "node_modules/parse5-htmlparser2-tree-adapter": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/parse5-htmlparser2-tree-adapter/-/parse5-htmlparser2-tree-adapter-7.0.0.tgz", + "integrity": "sha512-B77tOZrqqfUfnVcOrUvfdLbz4pu4RopLD/4vmu3HUPswwTA8OH0EMW9BlWR2B0RCoiZRAHEUu7IxeP1Pd1UU+g==", "dependencies": { - "abstract-leveldown": "~2.7.1", - "functional-red-black-tree": "^1.0.1", - "immediate": "^3.2.3", - "inherits": "~2.0.1", - "ltgt": "~2.2.0", - "safe-buffer": "~5.1.1" + "domhandler": "^5.0.2", + "parse5": "^7.0.0" + }, + "funding": { + "url": "https://github.com/inikulin/parse5?sponsor=1" } }, - "node_modules/ganache-core/node_modules/eth-tx-summary/node_modules/memdown/node_modules/abstract-leveldown": { - "version": "2.7.2", - "license": "MIT", - "dependencies": { - "xtend": "~4.0.0" + "node_modules/parseurl": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", + "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", + "engines": { + "node": ">= 0.8" } }, - "node_modules/ganache-core/node_modules/eth-tx-summary/node_modules/merkle-patricia-tree": { - "version": "2.3.2", - "license": "MPL-2.0", + "node_modules/pascal-case": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/pascal-case/-/pascal-case-2.0.1.tgz", + "integrity": "sha512-qjS4s8rBOJa2Xm0jmxXiyh1+OFf6ekCWOvUaRgAQSktzlTbMotS0nmG9gyYAybCWBcuP4fsBeRCKNwGBnMe2OQ==", "dependencies": { - "async": "^1.4.2", - "ethereumjs-util": "^5.0.0", - "level-ws": "0.0.0", - "levelup": "^1.2.1", - "memdown": "^1.0.0", - "readable-stream": "^2.0.0", - "rlp": "^2.0.0", - "semaphore": ">=1.0.1" + "camel-case": "^3.0.0", + "upper-case-first": "^1.1.0" } }, - "node_modules/ganache-core/node_modules/eth-tx-summary/node_modules/merkle-patricia-tree/node_modules/async": { - "version": "1.5.2", - "license": "MIT" - }, - "node_modules/ganache-core/node_modules/eth-tx-summary/node_modules/object-keys": { - "version": "0.4.0", - "license": "MIT" - }, - "node_modules/ganache-core/node_modules/eth-tx-summary/node_modules/safe-buffer": { - "version": "5.1.2", - "license": "MIT" - }, - "node_modules/ganache-core/node_modules/eth-tx-summary/node_modules/semver": { - "version": "5.4.1", - "license": "ISC", + "node_modules/patch-package": { + "version": "6.5.1", + "resolved": "https://registry.npmjs.org/patch-package/-/patch-package-6.5.1.tgz", + "integrity": "sha512-I/4Zsalfhc6bphmJTlrLoOcAF87jcxko4q0qsv4bGcurbr8IskEOtdnt9iCmsQVGL1B+iUhSQqweyTLJfCF9rA==", + "dependencies": { + "@yarnpkg/lockfile": "^1.1.0", + "chalk": "^4.1.2", + "cross-spawn": "^6.0.5", + "find-yarn-workspace-root": "^2.0.0", + "fs-extra": "^9.0.0", + "is-ci": "^2.0.0", + "klaw-sync": "^6.0.0", + "minimist": "^1.2.6", + "open": "^7.4.2", + "rimraf": "^2.6.3", + "semver": "^5.6.0", + "slash": "^2.0.0", + "tmp": "^0.0.33", + "yaml": "^1.10.2" + }, "bin": { - "semver": "bin/semver" + "patch-package": "index.js" + }, + "engines": { + "node": ">=10", + "npm": ">5" } }, - "node_modules/ganache-core/node_modules/eth-tx-summary/node_modules/string_decoder": { - "version": "0.10.31", - "license": "MIT" - }, - "node_modules/ganache-core/node_modules/ethashjs": { - "version": "0.0.8", - "license": "MPL-2.0", + "node_modules/patch-package/node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", "dependencies": { - "async": "^2.1.2", - "buffer-xor": "^2.0.1", - "ethereumjs-util": "^7.0.2", - "miller-rabin": "^4.0.0" + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" } }, - "node_modules/ganache-core/node_modules/ethashjs/node_modules/bn.js": { - "version": "5.1.3", - "license": "MIT" - }, - "node_modules/ganache-core/node_modules/ethashjs/node_modules/buffer-xor": { - "version": "2.0.2", - "license": "MIT", + "node_modules/patch-package/node_modules/cross-spawn": { + "version": "6.0.5", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", + "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", "dependencies": { - "safe-buffer": "^5.1.1" + "nice-try": "^1.0.4", + "path-key": "^2.0.1", + "semver": "^5.5.0", + "shebang-command": "^1.2.0", + "which": "^1.2.9" + }, + "engines": { + "node": ">=4.8" } }, - "node_modules/ganache-core/node_modules/ethashjs/node_modules/ethereumjs-util": { - "version": "7.0.7", - "license": "MPL-2.0", + "node_modules/patch-package/node_modules/fs-extra": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", + "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", "dependencies": { - "@types/bn.js": "^4.11.3", - "bn.js": "^5.1.2", - "create-hash": "^1.1.2", - "ethereum-cryptography": "^0.1.3", - "ethjs-util": "0.1.6", - "rlp": "^2.2.4" + "at-least-node": "^1.0.0", + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" }, "engines": { - "node": ">=10.0.0" + "node": ">=10" } }, - "node_modules/ganache-core/node_modules/ethereum-bloom-filters": { - "version": "1.0.7", - "license": "MIT", - "optional": true, + "node_modules/patch-package/node_modules/glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", "dependencies": { - "js-sha3": "^0.8.0" + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/ganache-core/node_modules/ethereum-bloom-filters/node_modules/js-sha3": { - "version": "0.8.0", - "license": "MIT", - "optional": true - }, - "node_modules/ganache-core/node_modules/ethereum-common": { - "version": "0.0.18", - "license": "MIT" - }, - "node_modules/ganache-core/node_modules/ethereum-cryptography": { - "version": "0.1.3", - "license": "MIT", + "node_modules/patch-package/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", "dependencies": { - "@types/pbkdf2": "^3.0.0", - "@types/secp256k1": "^4.0.1", - "blakejs": "^1.1.0", - "browserify-aes": "^1.2.0", - "bs58check": "^2.1.2", - "create-hash": "^1.2.0", - "create-hmac": "^1.1.7", - "hash.js": "^1.1.7", - "keccak": "^3.0.0", - "pbkdf2": "^3.0.17", - "randombytes": "^2.1.0", - "safe-buffer": "^5.1.2", - "scrypt-js": "^3.0.0", - "secp256k1": "^4.0.1", - "setimmediate": "^1.0.5" + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" } }, - "node_modules/ganache-core/node_modules/ethereumjs-abi": { - "version": "0.6.8", - "license": "MIT", - "dependencies": { - "bn.js": "^4.11.8", - "ethereumjs-util": "^6.0.0" + "node_modules/patch-package/node_modules/path-key": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", + "integrity": "sha512-fEHGKCSmUSDPv4uoj8AlD+joPlq3peND+HRYyxFz4KPw4z926S/b8rIuFs2FYJg3BwsxJf6A9/3eIdLaYC+9Dw==", + "engines": { + "node": ">=4" } }, - "node_modules/ganache-core/node_modules/ethereumjs-account": { - "version": "3.0.0", - "license": "MPL-2.0", + "node_modules/patch-package/node_modules/rimraf": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", + "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", "dependencies": { - "ethereumjs-util": "^6.0.0", - "rlp": "^2.2.1", - "safe-buffer": "^5.1.1" + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" } }, - "node_modules/ganache-core/node_modules/ethereumjs-block": { - "version": "2.2.2", - "license": "MPL-2.0", - "dependencies": { - "async": "^2.0.1", - "ethereumjs-common": "^1.5.0", - "ethereumjs-tx": "^2.1.1", - "ethereumjs-util": "^5.0.0", - "merkle-patricia-tree": "^2.1.2" + "node_modules/patch-package/node_modules/semver": { + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", + "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", + "bin": { + "semver": "bin/semver" } }, - "node_modules/ganache-core/node_modules/ethereumjs-block/node_modules/abstract-leveldown": { - "version": "2.6.3", - "license": "MIT", + "node_modules/patch-package/node_modules/shebang-command": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", + "integrity": "sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg==", "dependencies": { - "xtend": "~4.0.0" + "shebang-regex": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" } }, - "node_modules/ganache-core/node_modules/ethereumjs-block/node_modules/deferred-leveldown": { - "version": "1.2.2", - "license": "MIT", - "dependencies": { - "abstract-leveldown": "~2.6.0" + "node_modules/patch-package/node_modules/shebang-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", + "integrity": "sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ==", + "engines": { + "node": ">=0.10.0" } }, - "node_modules/ganache-core/node_modules/ethereumjs-block/node_modules/ethereumjs-util": { - "version": "5.2.1", - "license": "MPL-2.0", + "node_modules/patch-package/node_modules/which": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", + "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", "dependencies": { - "bn.js": "^4.11.0", - "create-hash": "^1.1.2", - "elliptic": "^6.5.2", - "ethereum-cryptography": "^0.1.3", - "ethjs-util": "^0.1.3", - "rlp": "^2.0.0", - "safe-buffer": "^5.1.1" + "isexe": "^2.0.0" + }, + "bin": { + "which": "bin/which" } }, - "node_modules/ganache-core/node_modules/ethereumjs-block/node_modules/isarray": { - "version": "0.0.1", - "license": "MIT" - }, - "node_modules/ganache-core/node_modules/ethereumjs-block/node_modules/level-codec": { - "version": "7.0.1", - "license": "MIT" - }, - "node_modules/ganache-core/node_modules/ethereumjs-block/node_modules/level-errors": { - "version": "1.0.5", - "license": "MIT", + "node_modules/path": { + "version": "0.12.7", + "resolved": "https://registry.npmjs.org/path/-/path-0.12.7.tgz", + "integrity": "sha512-aXXC6s+1w7otVF9UletFkFcDsJeO7lSZBPUQhtb5O0xJe8LtYhj/GxldoL09bBj9+ZmE2hNoHqQSFMN5fikh4Q==", "dependencies": { - "errno": "~0.1.1" + "process": "^0.11.1", + "util": "^0.10.3" } }, - "node_modules/ganache-core/node_modules/ethereumjs-block/node_modules/level-iterator-stream": { - "version": "1.3.1", - "license": "MIT", + "node_modules/path-case": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/path-case/-/path-case-2.1.1.tgz", + "integrity": "sha512-Ou0N05MioItesaLr9q8TtHVWmJ6fxWdqKB2RohFmNWVyJ+2zeKIeDNWAN6B/Pe7wpzWChhZX6nONYmOnMeJQ/Q==", "dependencies": { - "inherits": "^2.0.1", - "level-errors": "^1.0.3", - "readable-stream": "^1.0.33", - "xtend": "^4.0.0" + "no-case": "^2.2.0" } }, - "node_modules/ganache-core/node_modules/ethereumjs-block/node_modules/level-iterator-stream/node_modules/readable-stream": { - "version": "1.1.14", - "license": "MIT", - "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.1", - "isarray": "0.0.1", - "string_decoder": "~0.10.x" + "node_modules/path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "engines": { + "node": ">=8" } }, - "node_modules/ganache-core/node_modules/ethereumjs-block/node_modules/level-ws": { - "version": "0.0.0", - "license": "MIT", - "dependencies": { - "readable-stream": "~1.0.15", - "xtend": "~2.1.1" + "node_modules/path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", + "engines": { + "node": ">=0.10.0" } }, - "node_modules/ganache-core/node_modules/ethereumjs-block/node_modules/level-ws/node_modules/readable-stream": { - "version": "1.0.34", - "license": "MIT", - "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.1", - "isarray": "0.0.1", - "string_decoder": "~0.10.x" + "node_modules/path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "peer": true, + "engines": { + "node": ">=8" } }, - "node_modules/ganache-core/node_modules/ethereumjs-block/node_modules/level-ws/node_modules/xtend": { - "version": "2.1.2", + "node_modules/path-parse": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==" + }, + "node_modules/path-scurry": { + "version": "1.10.1", + "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.10.1.tgz", + "integrity": "sha512-MkhCqzzBEpPvxxQ71Md0b1Kk51W01lrYvlMzSUaIzNsODdd7mqhiimSZlr+VegAz5Z6Vzt9Xg2ttE//XBhH3EQ==", + "peer": true, "dependencies": { - "object-keys": "~0.4.0" + "lru-cache": "^9.1.1 || ^10.0.0", + "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" }, "engines": { - "node": ">=0.4" + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/ganache-core/node_modules/ethereumjs-block/node_modules/levelup": { - "version": "1.3.9", - "license": "MIT", - "dependencies": { - "deferred-leveldown": "~1.2.1", - "level-codec": "~7.0.0", - "level-errors": "~1.0.3", - "level-iterator-stream": "~1.3.0", - "prr": "~1.0.1", - "semver": "~5.4.1", - "xtend": "~4.0.0" + "node_modules/path-scurry/node_modules/lru-cache": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.1.0.tgz", + "integrity": "sha512-/1clY/ui8CzjKFyjdvwPWJUYKiFVXG2I2cY0ssG7h4+hwk+XOIX7ZSG9Q7TW8TW3Kp3BUSqgFWBLgL4PJ+Blag==", + "peer": true, + "engines": { + "node": "14 || >=16.14" } }, - "node_modules/ganache-core/node_modules/ethereumjs-block/node_modules/ltgt": { - "version": "2.2.1", - "license": "MIT" + "node_modules/path-to-regexp": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", + "integrity": "sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==" }, - "node_modules/ganache-core/node_modules/ethereumjs-block/node_modules/memdown": { - "version": "1.4.1", - "license": "MIT", + "node_modules/path-type": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-1.1.0.tgz", + "integrity": "sha512-S4eENJz1pkiQn9Znv33Q+deTOKmbl+jj1Fl+qiP/vYezj+S8x+J3Uo0ISrx/QoEvIlOaDWJhPaRd1flJ9HXZqg==", "dependencies": { - "abstract-leveldown": "~2.7.1", - "functional-red-black-tree": "^1.0.1", - "immediate": "^3.2.3", - "inherits": "~2.0.1", - "ltgt": "~2.2.0", - "safe-buffer": "~5.1.1" + "graceful-fs": "^4.1.2", + "pify": "^2.0.0", + "pinkie-promise": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" } }, - "node_modules/ganache-core/node_modules/ethereumjs-block/node_modules/memdown/node_modules/abstract-leveldown": { - "version": "2.7.2", - "license": "MIT", - "dependencies": { - "xtend": "~4.0.0" - } + "node_modules/path/node_modules/inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw==" }, - "node_modules/ganache-core/node_modules/ethereumjs-block/node_modules/merkle-patricia-tree": { - "version": "2.3.2", - "license": "MPL-2.0", + "node_modules/path/node_modules/util": { + "version": "0.10.4", + "resolved": "https://registry.npmjs.org/util/-/util-0.10.4.tgz", + "integrity": "sha512-0Pm9hTQ3se5ll1XihRic3FDIku70C+iHUdT/W926rSgHV5QgXsYbKZN8MSC3tJtSkhuROzvsQjAaFENRXr+19A==", "dependencies": { - "async": "^1.4.2", - "ethereumjs-util": "^5.0.0", - "level-ws": "0.0.0", - "levelup": "^1.2.1", - "memdown": "^1.0.0", - "readable-stream": "^2.0.0", - "rlp": "^2.0.0", - "semaphore": ">=1.0.1" + "inherits": "2.0.3" } }, - "node_modules/ganache-core/node_modules/ethereumjs-block/node_modules/merkle-patricia-tree/node_modules/async": { - "version": "1.5.2", - "license": "MIT" - }, - "node_modules/ganache-core/node_modules/ethereumjs-block/node_modules/object-keys": { - "version": "0.4.0", - "license": "MIT" - }, - "node_modules/ganache-core/node_modules/ethereumjs-block/node_modules/safe-buffer": { - "version": "5.1.2", - "license": "MIT" - }, - "node_modules/ganache-core/node_modules/ethereumjs-block/node_modules/semver": { - "version": "5.4.1", - "license": "ISC", - "bin": { - "semver": "bin/semver" + "node_modules/pathval": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/pathval/-/pathval-1.1.1.tgz", + "integrity": "sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ==", + "engines": { + "node": "*" } }, - "node_modules/ganache-core/node_modules/ethereumjs-block/node_modules/string_decoder": { - "version": "0.10.31", - "license": "MIT" - }, - "node_modules/ganache-core/node_modules/ethereumjs-blockchain": { - "version": "4.0.4", - "license": "MPL-2.0", + "node_modules/pbkdf2": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.1.2.tgz", + "integrity": "sha512-iuh7L6jA7JEGu2WxDwtQP1ddOpaJNC4KlDEFfdQajSGgGPNi4OyDc2R7QnbY2bR9QjBVGwgvTdNJZoE7RaxUMA==", "dependencies": { - "async": "^2.6.1", - "ethashjs": "~0.0.7", - "ethereumjs-block": "~2.2.2", - "ethereumjs-common": "^1.5.0", - "ethereumjs-util": "^6.1.0", - "flow-stoplight": "^1.0.0", - "level-mem": "^3.0.1", - "lru-cache": "^5.1.1", - "rlp": "^2.2.2", - "semaphore": "^1.1.0" + "create-hash": "^1.1.2", + "create-hmac": "^1.1.4", + "ripemd160": "^2.0.1", + "safe-buffer": "^5.0.1", + "sha.js": "^2.4.8" + }, + "engines": { + "node": ">=0.12" } }, - "node_modules/ganache-core/node_modules/ethereumjs-common": { - "version": "1.5.0", - "license": "MIT" + "node_modules/pend": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz", + "integrity": "sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg==", + "optional": true }, - "node_modules/ganache-core/node_modules/ethereumjs-tx": { - "version": "2.1.2", - "license": "MPL-2.0", - "dependencies": { - "ethereumjs-common": "^1.5.0", - "ethereumjs-util": "^6.0.0" - } + "node_modules/performance-now": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", + "integrity": "sha512-7EAHlyLHI56VEIdK57uwHdHKIaAGbnXPiw0yWbarQZOKaKpvUIgW0jWRVLiatnM+XXlSwsanIBH/hzGMJulMow==" }, - "node_modules/ganache-core/node_modules/ethereumjs-util": { - "version": "6.2.1", - "license": "MPL-2.0", - "dependencies": { - "@types/bn.js": "^4.11.3", - "bn.js": "^4.11.0", - "create-hash": "^1.1.2", - "elliptic": "^6.5.2", - "ethereum-cryptography": "^0.1.3", - "ethjs-util": "0.1.6", - "rlp": "^2.2.3" + "node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" } }, - "node_modules/ganache-core/node_modules/ethereumjs-vm": { - "version": "4.2.0", - "license": "MPL-2.0", - "dependencies": { - "async": "^2.1.2", - "async-eventemitter": "^0.2.2", - "core-js-pure": "^3.0.1", - "ethereumjs-account": "^3.0.0", - "ethereumjs-block": "^2.2.2", - "ethereumjs-blockchain": "^4.0.3", - "ethereumjs-common": "^1.5.0", - "ethereumjs-tx": "^2.1.2", - "ethereumjs-util": "^6.2.0", - "fake-merkle-patricia-tree": "^1.0.1", - "functional-red-black-tree": "^1.0.1", - "merkle-patricia-tree": "^2.3.2", - "rustbn.js": "~0.2.0", - "safe-buffer": "^5.1.1", - "util.promisify": "^1.0.0" + "node_modules/pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==", + "engines": { + "node": ">=0.10.0" } }, - "node_modules/ganache-core/node_modules/ethereumjs-vm/node_modules/abstract-leveldown": { - "version": "2.6.3", - "license": "MIT", - "dependencies": { - "xtend": "~4.0.0" + "node_modules/pinkie": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz", + "integrity": "sha512-MnUuEycAemtSaeFSjXKW/aroV7akBbY+Sv+RkyqFjgAe73F+MR0TBWKBRDkmfWq/HiFmdavfZ1G7h4SPZXaCSg==", + "engines": { + "node": ">=0.10.0" } }, - "node_modules/ganache-core/node_modules/ethereumjs-vm/node_modules/deferred-leveldown": { - "version": "1.2.2", - "license": "MIT", + "node_modules/pinkie-promise": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz", + "integrity": "sha512-0Gni6D4UcLTbv9c57DfxDGdr41XfgUjqWZu492f0cIGr16zDU06BWP/RAEvOuo7CQ0CNjHaLlM59YJJFm3NWlw==", "dependencies": { - "abstract-leveldown": "~2.6.0" + "pinkie": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" } }, - "node_modules/ganache-core/node_modules/ethereumjs-vm/node_modules/isarray": { - "version": "0.0.1", - "license": "MIT" - }, - "node_modules/ganache-core/node_modules/ethereumjs-vm/node_modules/level-codec": { - "version": "7.0.1", - "license": "MIT" - }, - "node_modules/ganache-core/node_modules/ethereumjs-vm/node_modules/level-errors": { - "version": "1.0.5", - "license": "MIT", + "node_modules/pkg-dir": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", + "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", + "optional": true, "dependencies": { - "errno": "~0.1.1" + "find-up": "^4.0.0" + }, + "engines": { + "node": ">=8" } }, - "node_modules/ganache-core/node_modules/ethereumjs-vm/node_modules/level-iterator-stream": { - "version": "1.3.1", - "license": "MIT", - "dependencies": { - "inherits": "^2.0.1", - "level-errors": "^1.0.3", - "readable-stream": "^1.0.33", - "xtend": "^4.0.0" - } + "node_modules/pollock": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/pollock/-/pollock-0.2.1.tgz", + "integrity": "sha512-2Xy6LImSXm0ANKv9BKSVuCa6Z4ACbK7oUrl9gtUgqLkekL7n9C0mlWsOGYYuGbCG8xT0x3Q4F31C3ZMyVQjwsg==", + "optional": true }, - "node_modules/ganache-core/node_modules/ethereumjs-vm/node_modules/level-iterator-stream/node_modules/readable-stream": { - "version": "1.1.14", - "license": "MIT", + "node_modules/prb-math": { + "version": "2.4.3", + "resolved": "https://registry.npmjs.org/prb-math/-/prb-math-2.4.3.tgz", + "integrity": "sha512-t5jncEscKmWg7COkMkmbXXxSeDI6Xl21rxx5e+oxUCqskNvsu6Q9RqdVfGY6y+sMwyMQE8DJ/OOyQ9ExH1yfbw==", + "deprecated": "package no longer maintained, you should install @prb/math instead", "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.1", - "isarray": "0.0.1", - "string_decoder": "~0.10.x" + "@ethersproject/bignumber": "^5.5.0", + "decimal.js": "^10.3.1", + "evm-bn": "^1.1.1", + "mathjs": "^10.1.1" + }, + "peerDependencies": { + "@ethersproject/bignumber": "5.x", + "evm-bn": "1.x", + "mathjs": "10.x" } }, - "node_modules/ganache-core/node_modules/ethereumjs-vm/node_modules/level-ws": { - "version": "0.0.0", - "license": "MIT", + "node_modules/prb-math/node_modules/mathjs": { + "version": "10.6.4", + "resolved": "https://registry.npmjs.org/mathjs/-/mathjs-10.6.4.tgz", + "integrity": "sha512-omQyvRE1jIy+3k2qsqkWASOcd45aZguXZDckr3HtnTYyXk5+2xpVfC3kATgbO2Srjxlqww3TVdhD0oUdZ/hiFA==", "dependencies": { - "readable-stream": "~1.0.15", - "xtend": "~2.1.1" + "@babel/runtime": "^7.18.6", + "complex.js": "^2.1.1", + "decimal.js": "^10.3.1", + "escape-latex": "^1.2.0", + "fraction.js": "^4.2.0", + "javascript-natural-sort": "^0.7.1", + "seedrandom": "^3.0.5", + "tiny-emitter": "^2.1.0", + "typed-function": "^2.1.0" + }, + "bin": { + "mathjs": "bin/cli.js" + }, + "engines": { + "node": ">= 14" } }, - "node_modules/ganache-core/node_modules/ethereumjs-vm/node_modules/level-ws/node_modules/readable-stream": { - "version": "1.0.34", - "license": "MIT", - "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.1", - "isarray": "0.0.1", - "string_decoder": "~0.10.x" + "node_modules/prb-math/node_modules/typed-function": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/typed-function/-/typed-function-2.1.0.tgz", + "integrity": "sha512-bctQIOqx2iVbWGDGPWwIm18QScpu2XRmkC19D8rQGFsjKSgteq/o1hTZvIG/wuDq8fanpBDrLkLq+aEN/6y5XQ==", + "engines": { + "node": ">= 10" } }, - "node_modules/ganache-core/node_modules/ethereumjs-vm/node_modules/level-ws/node_modules/xtend": { - "version": "2.1.2", + "node_modules/prebuild-install": { + "version": "5.3.6", + "resolved": "https://registry.npmjs.org/prebuild-install/-/prebuild-install-5.3.6.tgz", + "integrity": "sha512-s8Aai8++QQGi4sSbs/M1Qku62PFK49Jm1CbgXklGz4nmHveDq0wzJkg7Na5QbnO1uNH8K7iqx2EQ/mV0MZEmOg==", + "optional": true, "dependencies": { - "object-keys": "~0.4.0" + "detect-libc": "^1.0.3", + "expand-template": "^2.0.3", + "github-from-package": "0.0.0", + "minimist": "^1.2.3", + "mkdirp-classic": "^0.5.3", + "napi-build-utils": "^1.0.1", + "node-abi": "^2.7.0", + "noop-logger": "^0.1.1", + "npmlog": "^4.0.1", + "pump": "^3.0.0", + "rc": "^1.2.7", + "simple-get": "^3.0.3", + "tar-fs": "^2.0.0", + "tunnel-agent": "^0.6.0", + "which-pm-runs": "^1.0.0" + }, + "bin": { + "prebuild-install": "bin.js" }, "engines": { - "node": ">=0.4" + "node": ">=6" } }, - "node_modules/ganache-core/node_modules/ethereumjs-vm/node_modules/levelup": { - "version": "1.3.9", - "license": "MIT", - "dependencies": { - "deferred-leveldown": "~1.2.1", - "level-codec": "~7.0.0", - "level-errors": "~1.0.3", - "level-iterator-stream": "~1.3.0", - "prr": "~1.0.1", - "semver": "~5.4.1", - "xtend": "~4.0.0" + "node_modules/process": { + "version": "0.11.10", + "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", + "integrity": "sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==", + "engines": { + "node": ">= 0.6.0" } }, - "node_modules/ganache-core/node_modules/ethereumjs-vm/node_modules/ltgt": { - "version": "2.2.1", - "license": "MIT" - }, - "node_modules/ganache-core/node_modules/ethereumjs-vm/node_modules/memdown": { - "version": "1.4.1", - "license": "MIT", - "dependencies": { - "abstract-leveldown": "~2.7.1", - "functional-red-black-tree": "^1.0.1", - "immediate": "^3.2.3", - "inherits": "~2.0.1", - "ltgt": "~2.2.0", - "safe-buffer": "~5.1.1" - } + "node_modules/process-nextick-args": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", + "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==" }, - "node_modules/ganache-core/node_modules/ethereumjs-vm/node_modules/memdown/node_modules/abstract-leveldown": { - "version": "2.7.2", - "license": "MIT", - "dependencies": { - "xtend": "~4.0.0" + "node_modules/progress": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", + "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==", + "optional": true, + "engines": { + "node": ">=0.4.0" } }, - "node_modules/ganache-core/node_modules/ethereumjs-vm/node_modules/merkle-patricia-tree": { - "version": "2.3.2", - "license": "MPL-2.0", + "node_modules/promise": { + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/promise/-/promise-8.3.0.tgz", + "integrity": "sha512-rZPNPKTOYVNEEKFaq1HqTgOwZD+4/YHS5ukLzQCypkj+OkYx7iv0mA91lJlpPPZ8vMau3IIGj5Qlwrx+8iiSmg==", "dependencies": { - "async": "^1.4.2", - "ethereumjs-util": "^5.0.0", - "level-ws": "0.0.0", - "levelup": "^1.2.1", - "memdown": "^1.0.0", - "readable-stream": "^2.0.0", - "rlp": "^2.0.0", - "semaphore": ">=1.0.1" + "asap": "~2.0.6" } }, - "node_modules/ganache-core/node_modules/ethereumjs-vm/node_modules/merkle-patricia-tree/node_modules/async": { - "version": "1.5.2", - "license": "MIT" - }, - "node_modules/ganache-core/node_modules/ethereumjs-vm/node_modules/merkle-patricia-tree/node_modules/ethereumjs-util": { - "version": "5.2.1", - "license": "MPL-2.0", + "node_modules/proper-lockfile": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/proper-lockfile/-/proper-lockfile-4.1.2.tgz", + "integrity": "sha512-TjNPblN4BwAWMXU8s9AEz4JmQxnD1NNL7bNOY/AKUzyamc379FWASUhc/K1pL2noVb+XmZKLL68cjzLsiOAMaA==", + "dev": true, "dependencies": { - "bn.js": "^4.11.0", - "create-hash": "^1.1.2", - "elliptic": "^6.5.2", - "ethereum-cryptography": "^0.1.3", - "ethjs-util": "^0.1.3", - "rlp": "^2.0.0", - "safe-buffer": "^5.1.1" + "graceful-fs": "^4.2.4", + "retry": "^0.12.0", + "signal-exit": "^3.0.2" } }, - "node_modules/ganache-core/node_modules/ethereumjs-vm/node_modules/object-keys": { - "version": "0.4.0", - "license": "MIT" - }, - "node_modules/ganache-core/node_modules/ethereumjs-vm/node_modules/safe-buffer": { - "version": "5.1.2", - "license": "MIT" - }, - "node_modules/ganache-core/node_modules/ethereumjs-vm/node_modules/semver": { - "version": "5.4.1", - "license": "ISC", - "bin": { - "semver": "bin/semver" + "node_modules/proper-lockfile/node_modules/retry": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/retry/-/retry-0.12.0.tgz", + "integrity": "sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow==", + "dev": true, + "engines": { + "node": ">= 4" } }, - "node_modules/ganache-core/node_modules/ethereumjs-vm/node_modules/string_decoder": { - "version": "0.10.31", - "license": "MIT" - }, - "node_modules/ganache-core/node_modules/ethereumjs-wallet": { - "version": "0.6.5", - "license": "MIT", - "optional": true, - "dependencies": { - "aes-js": "^3.1.1", - "bs58check": "^2.1.2", - "ethereum-cryptography": "^0.1.3", - "ethereumjs-util": "^6.0.0", - "randombytes": "^2.0.6", - "safe-buffer": "^5.1.2", - "scryptsy": "^1.2.1", - "utf8": "^3.0.0", - "uuid": "^3.3.2" - } + "node_modules/proper-lockfile/node_modules/signal-exit": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", + "dev": true }, - "node_modules/ganache-core/node_modules/ethjs-unit": { - "version": "0.1.6", - "license": "MIT", - "optional": true, + "node_modules/proxy-addr": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", + "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", "dependencies": { - "bn.js": "4.11.6", - "number-to-bn": "1.7.0" + "forwarded": "0.2.0", + "ipaddr.js": "1.9.1" }, "engines": { - "node": ">=6.5.0", - "npm": ">=3" + "node": ">= 0.10" } }, - "node_modules/ganache-core/node_modules/ethjs-unit/node_modules/bn.js": { - "version": "4.11.6", - "license": "MIT", - "optional": true + "node_modules/proxy-from-env": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", + "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==" }, - "node_modules/ganache-core/node_modules/ethjs-util": { - "version": "0.1.6", - "license": "MIT", + "node_modules/prr": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/prr/-/prr-1.0.1.tgz", + "integrity": "sha512-yPw4Sng1gWghHQWj0B3ZggWUm4qVbPwPFcRG8KyxiU7J2OHFSoEHKS+EZ3fv5l1t9CyCiop6l/ZYeWbrgoQejw==" + }, + "node_modules/psl": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/psl/-/psl-1.9.0.tgz", + "integrity": "sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag==" + }, + "node_modules/pump": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", + "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", "dependencies": { - "is-hex-prefixed": "1.0.0", - "strip-hex-prefix": "1.0.0" - }, - "engines": { - "node": ">=6.5.0", - "npm": ">=3" + "end-of-stream": "^1.1.0", + "once": "^1.3.1" } }, - "node_modules/ganache-core/node_modules/eventemitter3": { - "version": "4.0.4", - "license": "MIT", - "optional": true - }, - "node_modules/ganache-core/node_modules/events": { - "version": "3.2.0", - "license": "MIT", + "node_modules/punycode": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.0.tgz", + "integrity": "sha512-Yxz2kRwT90aPiWEMHVYnEf4+rhwF1tBmmZ4KepCP+Wkium9JxtWnUm1nqGwpiAHr/tnTSeHqr3wb++jgSkXjhA==", "engines": { - "node": ">=0.8.x" + "node": ">=6" } }, - "node_modules/ganache-core/node_modules/evp_bytestokey": { - "version": "1.0.3", - "license": "MIT", + "node_modules/puppeteer": { + "version": "13.7.0", + "resolved": "https://registry.npmjs.org/puppeteer/-/puppeteer-13.7.0.tgz", + "integrity": "sha512-U1uufzBjz3+PkpCxFrWzh4OrMIdIb2ztzCu0YEPfRHjHswcSwHZswnK+WdsOQJsRV8WeTg3jLhJR4D867+fjsA==", + "deprecated": "< 21.3.7 is no longer supported", + "hasInstallScript": true, + "optional": true, "dependencies": { - "md5.js": "^1.3.4", - "safe-buffer": "^5.1.1" + "cross-fetch": "3.1.5", + "debug": "4.3.4", + "devtools-protocol": "0.0.981744", + "extract-zip": "2.0.1", + "https-proxy-agent": "5.0.1", + "pkg-dir": "4.2.0", + "progress": "2.0.3", + "proxy-from-env": "1.1.0", + "rimraf": "3.0.2", + "tar-fs": "2.1.1", + "unbzip2-stream": "1.4.3", + "ws": "8.5.0" + }, + "engines": { + "node": ">=10.18.1" } }, - "node_modules/ganache-core/node_modules/expand-brackets": { - "version": "2.1.4", - "license": "MIT", + "node_modules/puppeteer/node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "optional": true, "dependencies": { - "debug": "^2.3.3", - "define-property": "^0.2.5", - "extend-shallow": "^2.0.1", - "posix-character-classes": "^0.1.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" } }, - "node_modules/ganache-core/node_modules/expand-brackets/node_modules/debug": { - "version": "2.6.9", - "license": "MIT", + "node_modules/puppeteer/node_modules/cross-fetch": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-3.1.5.tgz", + "integrity": "sha512-lvb1SBsI0Z7GDwmuid+mU3kWVBwTVUbe7S0H52yaaAdQOXq2YktTCZdlAcNKFzE6QtRz0snpw9bNiPeOIkkQvw==", + "optional": true, "dependencies": { - "ms": "2.0.0" + "node-fetch": "2.6.7" } }, - "node_modules/ganache-core/node_modules/expand-brackets/node_modules/define-property": { - "version": "0.2.5", - "license": "MIT", + "node_modules/puppeteer/node_modules/glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "optional": true, "dependencies": { - "is-descriptor": "^0.1.0" + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" }, "engines": { - "node": ">=0.10.0" + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/ganache-core/node_modules/expand-brackets/node_modules/extend-shallow": { - "version": "2.0.1", - "license": "MIT", + "node_modules/puppeteer/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "optional": true, "dependencies": { - "is-extendable": "^0.1.0" + "brace-expansion": "^1.1.7" }, "engines": { - "node": ">=0.10.0" + "node": "*" } }, - "node_modules/ganache-core/node_modules/expand-brackets/node_modules/is-accessor-descriptor": { - "version": "0.1.6", - "license": "MIT", + "node_modules/puppeteer/node_modules/node-fetch": { + "version": "2.6.7", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz", + "integrity": "sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==", + "optional": true, "dependencies": { - "kind-of": "^3.0.2" + "whatwg-url": "^5.0.0" }, "engines": { - "node": ">=0.10.0" + "node": "4.x || >=6.0.0" + }, + "peerDependencies": { + "encoding": "^0.1.0" + }, + "peerDependenciesMeta": { + "encoding": { + "optional": true + } } }, - "node_modules/ganache-core/node_modules/expand-brackets/node_modules/is-accessor-descriptor/node_modules/kind-of": { - "version": "3.2.2", - "license": "MIT", + "node_modules/puppeteer/node_modules/rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "optional": true, "dependencies": { - "is-buffer": "^1.1.5" + "glob": "^7.1.3" }, - "engines": { - "node": ">=0.10.0" + "bin": { + "rimraf": "bin.js" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/ganache-core/node_modules/expand-brackets/node_modules/is-buffer": { - "version": "1.1.6", - "license": "MIT" + "node_modules/pure-rand": { + "version": "5.0.5", + "resolved": "https://registry.npmjs.org/pure-rand/-/pure-rand-5.0.5.tgz", + "integrity": "sha512-BwQpbqxSCBJVpamI6ydzcKqyFmnd5msMWUGvzXLm1aXvusbbgkbOto/EUPM00hjveJEaJtdbhUjKSzWRhQVkaw==", + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/dubzzz" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/fast-check" + } + ] }, - "node_modules/ganache-core/node_modules/expand-brackets/node_modules/is-data-descriptor": { - "version": "0.1.4", - "license": "MIT", + "node_modules/qs": { + "version": "6.11.2", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.2.tgz", + "integrity": "sha512-tDNIz22aBzCDxLtVH++VnTfzxlfeK5CbqohpSqpJgj1Wg/cQbStNAz3NuqCs5vV+pjBsK4x4pN9HlVh7rcYRiA==", "dependencies": { - "kind-of": "^3.0.2" + "side-channel": "^1.0.4" }, "engines": { - "node": ">=0.10.0" + "node": ">=0.6" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/ganache-core/node_modules/expand-brackets/node_modules/is-data-descriptor/node_modules/kind-of": { - "version": "3.2.2", - "license": "MIT", + "node_modules/query-string": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/query-string/-/query-string-5.1.1.tgz", + "integrity": "sha512-gjWOsm2SoGlgLEdAGt7a6slVOk9mGiXmPFMqrEhLQ68rhQuBnpfs3+EmlvqKyxnCo9/PPlF+9MtY02S1aFg+Jw==", "dependencies": { - "is-buffer": "^1.1.5" + "decode-uri-component": "^0.2.0", + "object-assign": "^4.1.0", + "strict-uri-encode": "^1.0.0" }, "engines": { "node": ">=0.10.0" } }, - "node_modules/ganache-core/node_modules/expand-brackets/node_modules/is-descriptor": { - "version": "0.1.6", - "license": "MIT", - "dependencies": { - "is-accessor-descriptor": "^0.1.6", - "is-data-descriptor": "^0.1.4", - "kind-of": "^5.0.0" - }, + "node_modules/queue-microtask": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/quick-lru": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-5.1.1.tgz", + "integrity": "sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==", "engines": { - "node": ">=0.10.0" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/ganache-core/node_modules/expand-brackets/node_modules/is-extendable": { - "version": "0.1.1", - "license": "MIT", - "engines": { - "node": ">=0.10.0" + "node_modules/randombytes": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", + "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", + "dependencies": { + "safe-buffer": "^5.1.0" } }, - "node_modules/ganache-core/node_modules/expand-brackets/node_modules/kind-of": { - "version": "5.1.0", - "license": "MIT", + "node_modules/range-parser": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", + "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", "engines": { - "node": ">=0.10.0" + "node": ">= 0.6" } }, - "node_modules/ganache-core/node_modules/expand-brackets/node_modules/ms": { - "version": "2.0.0", - "license": "MIT" - }, - "node_modules/ganache-core/node_modules/express": { - "version": "4.17.1", - "license": "MIT", - "optional": true, + "node_modules/raw-body": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.2.tgz", + "integrity": "sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA==", "dependencies": { - "accepts": "~1.3.7", - "array-flatten": "1.1.1", - "body-parser": "1.19.0", - "content-disposition": "0.5.3", - "content-type": "~1.0.4", - "cookie": "0.4.0", - "cookie-signature": "1.0.6", - "debug": "2.6.9", - "depd": "~1.1.2", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "etag": "~1.8.1", - "finalhandler": "~1.1.2", - "fresh": "0.5.2", - "merge-descriptors": "1.0.1", - "methods": "~1.1.2", - "on-finished": "~2.3.0", - "parseurl": "~1.3.3", - "path-to-regexp": "0.1.7", - "proxy-addr": "~2.0.5", - "qs": "6.7.0", - "range-parser": "~1.2.1", - "safe-buffer": "5.1.2", - "send": "0.17.1", - "serve-static": "1.14.1", - "setprototypeof": "1.1.1", - "statuses": "~1.5.0", - "type-is": "~1.6.18", - "utils-merge": "1.0.1", - "vary": "~1.1.2" + "bytes": "3.1.2", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", + "unpipe": "1.0.0" }, "engines": { - "node": ">= 0.10.0" + "node": ">= 0.8" } }, - "node_modules/ganache-core/node_modules/express/node_modules/debug": { - "version": "2.6.9", - "license": "MIT", + "node_modules/rc": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", + "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", "optional": true, "dependencies": { - "ms": "2.0.0" + "deep-extend": "^0.6.0", + "ini": "~1.3.0", + "minimist": "^1.2.0", + "strip-json-comments": "~2.0.1" + }, + "bin": { + "rc": "cli.js" } }, - "node_modules/ganache-core/node_modules/express/node_modules/ms": { - "version": "2.0.0", - "license": "MIT", - "optional": true - }, - "node_modules/ganache-core/node_modules/express/node_modules/qs": { - "version": "6.7.0", - "license": "BSD-3-Clause", + "node_modules/rc/node_modules/strip-json-comments": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", + "integrity": "sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==", "optional": true, "engines": { - "node": ">=0.6" - } - }, - "node_modules/ganache-core/node_modules/express/node_modules/safe-buffer": { - "version": "5.1.2", - "license": "MIT", - "optional": true - }, - "node_modules/ganache-core/node_modules/ext": { - "version": "1.4.0", - "license": "ISC", - "dependencies": { - "type": "^2.0.0" + "node": ">=0.10.0" } }, - "node_modules/ganache-core/node_modules/ext/node_modules/type": { - "version": "2.1.0", - "license": "ISC" - }, - "node_modules/ganache-core/node_modules/extend": { - "version": "3.0.2", - "license": "MIT" - }, - "node_modules/ganache-core/node_modules/extend-shallow": { - "version": "3.0.2", - "license": "MIT", + "node_modules/read-pkg": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-1.1.0.tgz", + "integrity": "sha512-7BGwRHqt4s/uVbuyoeejRn4YmFnYZiFl4AuaeXHlgZf3sONF0SOGlxs2Pw8g6hCKupo08RafIO5YXFNOKTfwsQ==", "dependencies": { - "assign-symbols": "^1.0.0", - "is-extendable": "^1.0.1" + "load-json-file": "^1.0.0", + "normalize-package-data": "^2.3.2", + "path-type": "^1.0.0" }, "engines": { "node": ">=0.10.0" } }, - "node_modules/ganache-core/node_modules/extglob": { - "version": "2.0.4", - "license": "MIT", + "node_modules/read-pkg-up": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-1.0.1.tgz", + "integrity": "sha512-WD9MTlNtI55IwYUS27iHh9tK3YoIVhxis8yKhLpTqWtml739uXc9NWTpxoHkfZf3+DkCCsXox94/VWZniuZm6A==", "dependencies": { - "array-unique": "^0.3.2", - "define-property": "^1.0.0", - "expand-brackets": "^2.1.4", - "extend-shallow": "^2.0.1", - "fragment-cache": "^0.2.1", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" + "find-up": "^1.0.0", + "read-pkg": "^1.0.0" }, "engines": { "node": ">=0.10.0" } }, - "node_modules/ganache-core/node_modules/extglob/node_modules/define-property": { - "version": "1.0.0", - "license": "MIT", + "node_modules/read-pkg-up/node_modules/find-up": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz", + "integrity": "sha512-jvElSjyuo4EMQGoTwo1uJU5pQMwTW5lS1x05zzfJuTIyLR3zwO27LYrxNg+dlvKpGOuGy/MzBdXh80g0ve5+HA==", "dependencies": { - "is-descriptor": "^1.0.0" + "path-exists": "^2.0.0", + "pinkie-promise": "^2.0.0" }, "engines": { "node": ">=0.10.0" } }, - "node_modules/ganache-core/node_modules/extglob/node_modules/extend-shallow": { - "version": "2.0.1", - "license": "MIT", + "node_modules/read-pkg-up/node_modules/path-exists": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz", + "integrity": "sha512-yTltuKuhtNeFJKa1PiRzfLAU5182q1y4Eb4XCJ3PBqyzEDkAZRzBrKKBct682ls9reBVHf9udYLN5Nd+K1B9BQ==", "dependencies": { - "is-extendable": "^0.1.0" + "pinkie-promise": "^2.0.0" }, "engines": { "node": ">=0.10.0" } }, - "node_modules/ganache-core/node_modules/extglob/node_modules/is-extendable": { - "version": "0.1.1", - "license": "MIT", + "node_modules/readable-stream": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, "engines": { - "node": ">=0.10.0" + "node": ">= 6" } }, - "node_modules/ganache-core/node_modules/extsprintf": { - "version": "1.3.0", - "engines": [ - "node >=0.6.0" - ], - "license": "MIT" - }, - "node_modules/ganache-core/node_modules/fake-merkle-patricia-tree": { - "version": "1.0.1", - "license": "ISC", - "dependencies": { - "checkpoint-store": "^1.1.0" - } - }, - "node_modules/ganache-core/node_modules/fast-deep-equal": { - "version": "3.1.3", - "license": "MIT" - }, - "node_modules/ganache-core/node_modules/fast-json-stable-stringify": { - "version": "2.1.0", - "license": "MIT" - }, - "node_modules/ganache-core/node_modules/fetch-ponyfill": { - "version": "4.1.0", - "license": "MIT", - "dependencies": { - "node-fetch": "~1.7.1" - } - }, - "node_modules/ganache-core/node_modules/fetch-ponyfill/node_modules/is-stream": { - "version": "1.1.0", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/ganache-core/node_modules/fetch-ponyfill/node_modules/node-fetch": { - "version": "1.7.3", - "license": "MIT", - "dependencies": { - "encoding": "^0.1.11", - "is-stream": "^1.0.1" - } - }, - "node_modules/ganache-core/node_modules/finalhandler": { - "version": "1.1.2", - "license": "MIT", - "optional": true, + "node_modules/readdirp": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", "dependencies": { - "debug": "2.6.9", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "on-finished": "~2.3.0", - "parseurl": "~1.3.3", - "statuses": "~1.5.0", - "unpipe": "~1.0.0" + "picomatch": "^2.2.1" }, "engines": { - "node": ">= 0.8" - } - }, - "node_modules/ganache-core/node_modules/finalhandler/node_modules/debug": { - "version": "2.6.9", - "license": "MIT", - "optional": true, - "dependencies": { - "ms": "2.0.0" + "node": ">=8.10.0" } }, - "node_modules/ganache-core/node_modules/finalhandler/node_modules/ms": { - "version": "2.0.0", - "license": "MIT", - "optional": true - }, - "node_modules/ganache-core/node_modules/find-yarn-workspace-root": { - "version": "1.2.1", - "license": "Apache-2.0", - "dependencies": { - "fs-extra": "^4.0.3", - "micromatch": "^3.1.4" - } + "node_modules/regenerator-runtime": { + "version": "0.14.1", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.14.1.tgz", + "integrity": "sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==" }, - "node_modules/ganache-core/node_modules/find-yarn-workspace-root/node_modules/braces": { - "version": "2.3.2", - "license": "MIT", + "node_modules/regexp.prototype.flags": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.1.tgz", + "integrity": "sha512-sy6TXMN+hnP/wMy+ISxg3krXx7BAtWVO4UouuCN/ziM9UEne0euamVNafDfvC83bRNr95y0V5iijeDQFUNpvrg==", + "dev": true, "dependencies": { - "arr-flatten": "^1.1.0", - "array-unique": "^0.3.2", - "extend-shallow": "^2.0.1", - "fill-range": "^4.0.0", - "isobject": "^3.0.1", - "repeat-element": "^1.1.2", - "snapdragon": "^0.8.1", - "snapdragon-node": "^2.0.1", - "split-string": "^3.0.2", - "to-regex": "^3.0.1" + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "set-function-name": "^2.0.0" }, "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/ganache-core/node_modules/find-yarn-workspace-root/node_modules/braces/node_modules/extend-shallow": { - "version": "2.0.1", - "license": "MIT", - "dependencies": { - "is-extendable": "^0.1.0" + "node": ">= 0.4" }, - "engines": { - "node": ">=0.10.0" + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/ganache-core/node_modules/find-yarn-workspace-root/node_modules/fill-range": { - "version": "4.0.0", - "license": "MIT", + "node_modules/req-cwd": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/req-cwd/-/req-cwd-2.0.0.tgz", + "integrity": "sha512-ueoIoLo1OfB6b05COxAA9UpeoscNpYyM+BqYlA7H6LVF4hKGPXQQSSaD2YmvDVJMkk4UDpAHIeU1zG53IqjvlQ==", "dependencies": { - "extend-shallow": "^2.0.1", - "is-number": "^3.0.0", - "repeat-string": "^1.6.1", - "to-regex-range": "^2.1.0" + "req-from": "^2.0.0" }, "engines": { - "node": ">=0.10.0" + "node": ">=4" } }, - "node_modules/ganache-core/node_modules/find-yarn-workspace-root/node_modules/fill-range/node_modules/extend-shallow": { - "version": "2.0.1", - "license": "MIT", + "node_modules/req-from": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/req-from/-/req-from-2.0.0.tgz", + "integrity": "sha512-LzTfEVDVQHBRfjOUMgNBA+V6DWsSnoeKzf42J7l0xa/B4jyPOuuF5MlNSmomLNGemWTnV2TIdjSSLnEn95fOQA==", "dependencies": { - "is-extendable": "^0.1.0" + "resolve-from": "^3.0.0" }, "engines": { - "node": ">=0.10.0" + "node": ">=4" } }, - "node_modules/ganache-core/node_modules/find-yarn-workspace-root/node_modules/fs-extra": { - "version": "4.0.3", - "license": "MIT", + "node_modules/request": { + "version": "2.88.2", + "resolved": "https://registry.npmjs.org/request/-/request-2.88.2.tgz", + "integrity": "sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw==", + "deprecated": "request has been deprecated, see https://github.com/request/request/issues/3142", "dependencies": { - "graceful-fs": "^4.1.2", - "jsonfile": "^4.0.0", - "universalify": "^0.1.0" - } - }, - "node_modules/ganache-core/node_modules/find-yarn-workspace-root/node_modules/is-buffer": { - "version": "1.1.6", - "license": "MIT" - }, - "node_modules/ganache-core/node_modules/find-yarn-workspace-root/node_modules/is-extendable": { - "version": "0.1.1", - "license": "MIT", + "aws-sign2": "~0.7.0", + "aws4": "^1.8.0", + "caseless": "~0.12.0", + "combined-stream": "~1.0.6", + "extend": "~3.0.2", + "forever-agent": "~0.6.1", + "form-data": "~2.3.2", + "har-validator": "~5.1.3", + "http-signature": "~1.2.0", + "is-typedarray": "~1.0.0", + "isstream": "~0.1.2", + "json-stringify-safe": "~5.0.1", + "mime-types": "~2.1.19", + "oauth-sign": "~0.9.0", + "performance-now": "^2.1.0", + "qs": "~6.5.2", + "safe-buffer": "^5.1.2", + "tough-cookie": "~2.5.0", + "tunnel-agent": "^0.6.0", + "uuid": "^3.3.2" + }, "engines": { - "node": ">=0.10.0" + "node": ">= 6" } }, - "node_modules/ganache-core/node_modules/find-yarn-workspace-root/node_modules/is-number": { - "version": "3.0.0", - "license": "MIT", + "node_modules/request/node_modules/form-data": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz", + "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==", "dependencies": { - "kind-of": "^3.0.2" + "asynckit": "^0.4.0", + "combined-stream": "^1.0.6", + "mime-types": "^2.1.12" }, "engines": { - "node": ">=0.10.0" + "node": ">= 0.12" } }, - "node_modules/ganache-core/node_modules/find-yarn-workspace-root/node_modules/is-number/node_modules/kind-of": { - "version": "3.2.2", - "license": "MIT", - "dependencies": { - "is-buffer": "^1.1.5" - }, + "node_modules/request/node_modules/qs": { + "version": "6.5.3", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.3.tgz", + "integrity": "sha512-qxXIEh4pCGfHICj1mAJQ2/2XVZkjCDTcEgfoSQxc/fYivUZxTkk7L3bDBJSoNrEzXI17oUO5Dp07ktqE5KzczA==", "engines": { - "node": ">=0.10.0" + "node": ">=0.6" } }, - "node_modules/ganache-core/node_modules/find-yarn-workspace-root/node_modules/micromatch": { - "version": "3.1.10", - "license": "MIT", - "dependencies": { - "arr-diff": "^4.0.0", - "array-unique": "^0.3.2", - "braces": "^2.3.1", - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "extglob": "^2.0.4", - "fragment-cache": "^0.2.1", - "kind-of": "^6.0.2", - "nanomatch": "^1.2.9", - "object.pick": "^1.3.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" + "node_modules/request/node_modules/uuid": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", + "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==", + "deprecated": "Please upgrade to version 7 or higher. Older versions may use Math.random() in certain circumstances, which is known to be problematic. See https://v8.dev/blog/math-random for details.", + "bin": { + "uuid": "bin/uuid" } }, - "node_modules/ganache-core/node_modules/find-yarn-workspace-root/node_modules/to-regex-range": { + "node_modules/require-directory": { "version": "2.1.1", - "license": "MIT", - "dependencies": { - "is-number": "^3.0.0", - "repeat-string": "^1.6.1" - }, + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", "engines": { "node": ">=0.10.0" } }, - "node_modules/ganache-core/node_modules/flow-stoplight": { - "version": "1.0.0", - "license": "ISC" - }, - "node_modules/ganache-core/node_modules/for-each": { - "version": "0.3.3", - "license": "MIT", - "dependencies": { - "is-callable": "^1.1.3" - } - }, - "node_modules/ganache-core/node_modules/for-in": { - "version": "1.0.2", - "license": "MIT", + "node_modules/require-from-string": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-1.2.1.tgz", + "integrity": "sha512-H7AkJWMobeskkttHyhTVtS0fxpFLjxhbfMa6Bk3wimP7sdPRGL3EyCg3sAQenFfAe+xQ+oAc85Nmtvq0ROM83Q==", "engines": { "node": ">=0.10.0" } }, - "node_modules/ganache-core/node_modules/forever-agent": { - "version": "0.6.1", - "license": "Apache-2.0", - "engines": { - "node": "*" - } + "node_modules/require-main-filename": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-1.0.1.tgz", + "integrity": "sha512-IqSUtOVP4ksd1C/ej5zeEh/BIP2ajqpn8c5x+q99gvcIG/Qf0cud5raVnE/Dwd0ua9TXYDoDc0RE5hBSdz22Ug==" }, - "node_modules/ganache-core/node_modules/form-data": { - "version": "2.3.3", - "license": "MIT", + "node_modules/resolve": { + "version": "1.17.0", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.17.0.tgz", + "integrity": "sha512-ic+7JYiV8Vi2yzQGFWOkiZD5Z9z7O2Zhm9XMaTxdJExKasieFCr+yXZ/WmXsckHiKl12ar0y6XiXDx3m4RHn1w==", "dependencies": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.6", - "mime-types": "^2.1.12" + "path-parse": "^1.0.6" }, - "engines": { - "node": ">= 0.12" + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/ganache-core/node_modules/forwarded": { - "version": "0.1.2", - "license": "MIT", - "optional": true, + "node_modules/resolve-alpn": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/resolve-alpn/-/resolve-alpn-1.2.1.tgz", + "integrity": "sha512-0a1F4l73/ZFZOakJnQ3FvkJ2+gSTQWz/r2KE5OdDY0TxPm5h4GkqkWWfM47T7HsbnOtcJVEF4epCVy6u7Q3K+g==" + }, + "node_modules/resolve-from": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-3.0.0.tgz", + "integrity": "sha512-GnlH6vxLymXJNMBo7XP1fJIzBFbdYt49CuTwmB/6N53t+kMPRMFKz783LlQ4tv28XoQfMWinAJX6WCGf2IlaIw==", "engines": { - "node": ">= 0.6" + "node": ">=4" } }, - "node_modules/ganache-core/node_modules/fragment-cache": { - "version": "0.2.1", - "license": "MIT", + "node_modules/responselike": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/responselike/-/responselike-2.0.1.tgz", + "integrity": "sha512-4gl03wn3hj1HP3yzgdI7d3lCkF95F21Pz4BPGvKHinyQzALR5CapwC8yIi0Rh58DEMQ/SguC03wFj2k0M/mHhw==", "dependencies": { - "map-cache": "^0.2.2" + "lowercase-keys": "^2.0.0" }, - "engines": { - "node": ">=0.10.0" + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/ganache-core/node_modules/fresh": { - "version": "0.5.2", - "license": "MIT", - "optional": true, + "node_modules/responselike/node_modules/lowercase-keys": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-2.0.0.tgz", + "integrity": "sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==", "engines": { - "node": ">= 0.6" + "node": ">=8" } }, - "node_modules/ganache-core/node_modules/fs-extra": { - "version": "7.0.1", - "license": "MIT", - "dependencies": { - "graceful-fs": "^4.1.2", - "jsonfile": "^4.0.0", - "universalify": "^0.1.0" - }, + "node_modules/retry": { + "version": "0.13.1", + "resolved": "https://registry.npmjs.org/retry/-/retry-0.13.1.tgz", + "integrity": "sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg==", + "dev": true, "engines": { - "node": ">=6 <7 || >=8" - } - }, - "node_modules/ganache-core/node_modules/fs.realpath": { - "version": "1.0.0", - "license": "ISC" - }, - "node_modules/ganache-core/node_modules/function-bind": { - "version": "1.1.1", - "license": "MIT" - }, - "node_modules/ganache-core/node_modules/functional-red-black-tree": { - "version": "1.0.1", - "license": "MIT" - }, - "node_modules/ganache-core/node_modules/get-intrinsic": { - "version": "1.0.2", - "license": "MIT", - "dependencies": { - "function-bind": "^1.1.1", - "has": "^1.0.3", - "has-symbols": "^1.0.1" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": ">= 4" } }, - "node_modules/ganache-core/node_modules/get-stream": { - "version": "5.2.0", - "license": "MIT", - "optional": true, + "node_modules/rimraf": { + "version": "2.4.5", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.4.5.tgz", + "integrity": "sha512-J5xnxTyqaiw06JjMftq7L9ouA448dw/E7dKghkP9WpKNuwmARNNg+Gk8/u5ryb9N/Yo2+z3MCwuqFK/+qPOPfQ==", "dependencies": { - "pump": "^3.0.0" - }, - "engines": { - "node": ">=8" + "glob": "^6.0.1" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/ganache-core/node_modules/get-value": { - "version": "2.0.6", - "license": "MIT", - "engines": { - "node": ">=0.10.0" + "bin": { + "rimraf": "bin.js" } }, - "node_modules/ganache-core/node_modules/getpass": { - "version": "0.1.7", - "license": "MIT", + "node_modules/rimraf/node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", "dependencies": { - "assert-plus": "^1.0.0" + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" } }, - "node_modules/ganache-core/node_modules/glob": { - "version": "7.1.3", - "license": "ISC", + "node_modules/rimraf/node_modules/glob": { + "version": "6.0.4", + "resolved": "https://registry.npmjs.org/glob/-/glob-6.0.4.tgz", + "integrity": "sha512-MKZeRNyYZAVVVG1oZeLaWie1uweH40m9AZwIwxyPbTSX4hHrVYSzLg0Ro5Z5R7XKkIX+Cc6oD1rqeDJnwsB8/A==", "dependencies": { - "fs.realpath": "^1.0.0", "inflight": "^1.0.4", "inherits": "2", - "minimatch": "^3.0.4", + "minimatch": "2 || 3", "once": "^1.3.0", "path-is-absolute": "^1.0.0" }, @@ -17634,113 +13091,141 @@ "node": "*" } }, - "node_modules/ganache-core/node_modules/global": { - "version": "4.4.0", - "license": "MIT", - "dependencies": { - "min-document": "^2.19.0", - "process": "^0.11.10" - } - }, - "node_modules/ganache-core/node_modules/got": { - "version": "9.6.0", - "license": "MIT", - "optional": true, + "node_modules/rimraf/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", "dependencies": { - "@sindresorhus/is": "^0.14.0", - "@szmarczak/http-timer": "^1.1.2", - "cacheable-request": "^6.0.0", - "decompress-response": "^3.3.0", - "duplexer3": "^0.1.4", - "get-stream": "^4.1.0", - "lowercase-keys": "^1.0.1", - "mimic-response": "^1.0.1", - "p-cancelable": "^1.0.0", - "to-readable-stream": "^1.0.0", - "url-parse-lax": "^3.0.0" + "brace-expansion": "^1.1.7" }, "engines": { - "node": ">=8.6" + "node": "*" } }, - "node_modules/ganache-core/node_modules/got/node_modules/get-stream": { - "version": "4.1.0", - "license": "MIT", - "optional": true, + "node_modules/ripemd160": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.2.tgz", + "integrity": "sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==", "dependencies": { - "pump": "^3.0.0" - }, - "engines": { - "node": ">=6" + "hash-base": "^3.0.0", + "inherits": "^2.0.1" } }, - "node_modules/ganache-core/node_modules/graceful-fs": { - "version": "4.2.4", - "license": "ISC" - }, - "node_modules/ganache-core/node_modules/har-schema": { - "version": "2.0.0", - "license": "ISC", + "node_modules/ripemd160-min": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/ripemd160-min/-/ripemd160-min-0.0.6.tgz", + "integrity": "sha512-+GcJgQivhs6S9qvLogusiTcS9kQUfgR75whKuy5jIhuiOfQuJ8fjqxV6EGD5duH1Y/FawFUMtMhyeq3Fbnib8A==", "engines": { - "node": ">=4" + "node": ">=8" } }, - "node_modules/ganache-core/node_modules/har-validator": { - "version": "5.1.5", - "license": "MIT", + "node_modules/rlp": { + "version": "2.2.7", + "resolved": "https://registry.npmjs.org/rlp/-/rlp-2.2.7.tgz", + "integrity": "sha512-d5gdPmgQ0Z+AklL2NVXr/IoSjNZFfTVvQWzL/AM2AOcSzYP2xjlb0AC8YyCLc41MSNf6P6QVtjgPdmVtzb+4lQ==", "dependencies": { - "ajv": "^6.12.3", - "har-schema": "^2.0.0" + "bn.js": "^5.2.0" }, - "engines": { - "node": ">=6" + "bin": { + "rlp": "bin/rlp" } }, - "node_modules/ganache-core/node_modules/has": { - "version": "1.0.3", - "license": "MIT", + "node_modules/run-parallel-limit": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/run-parallel-limit/-/run-parallel-limit-1.1.0.tgz", + "integrity": "sha512-jJA7irRNM91jaKc3Hcl1npHsFLOXOoTkPCUL1JEa1R82O2miplXXRaGdjW/KM/98YQWDhJLiSs793CnXfblJUw==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], "dependencies": { - "function-bind": "^1.1.1" - }, - "engines": { - "node": ">= 0.4.0" + "queue-microtask": "^1.2.2" } }, - "node_modules/ganache-core/node_modules/has-ansi": { - "version": "2.0.0", - "license": "MIT", + "node_modules/rustbn.js": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/rustbn.js/-/rustbn.js-0.2.0.tgz", + "integrity": "sha512-4VlvkRUuCJvr2J6Y0ImW7NvTCriMi7ErOAqWk1y69vAdoNIzCF3yPmgeNzx+RQTLEDFq5sHfscn1MwHxP9hNfA==" + }, + "node_modules/rxjs": { + "version": "6.6.7", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.7.tgz", + "integrity": "sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ==", "dependencies": { - "ansi-regex": "^2.0.0" + "tslib": "^1.9.0" }, "engines": { - "node": ">=0.10.0" + "npm": ">=2.0.0" } }, - "node_modules/ganache-core/node_modules/has-ansi/node_modules/ansi-regex": { - "version": "2.1.1", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } + "node_modules/rxjs/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" }, - "node_modules/ganache-core/node_modules/has-flag": { - "version": "3.0.0", - "license": "MIT", + "node_modules/safe-array-concat": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.0.1.tgz", + "integrity": "sha512-6XbUAseYE2KtOuGueyeobCySj9L4+66Tn6KQMOPQJrAJEowYKW/YR/MGJZl7FdydUdaFu4LYyDZjxf4/Nmo23Q==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.2.1", + "has-symbols": "^1.0.3", + "isarray": "^2.0.5" + }, "engines": { - "node": ">=4" + "node": ">=0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/ganache-core/node_modules/has-symbol-support-x": { - "version": "1.4.2", - "license": "MIT", - "optional": true, - "engines": { - "node": "*" - } + "node_modules/safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/safe-json-stringify": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/safe-json-stringify/-/safe-json-stringify-1.2.0.tgz", + "integrity": "sha512-gH8eh2nZudPQO6TytOvbxnuhYBOvDBBLW52tz5q6X58lJcd/tkmqFR+5Z9adS8aJtURSXWThWy/xJtJwixErvg==", + "optional": true }, - "node_modules/ganache-core/node_modules/has-symbols": { + "node_modules/safe-regex-test": { "version": "1.0.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.0.1.tgz", + "integrity": "sha512-Y5NejJTTliTyY4H7sipGqY+RX5P87i3F7c4Rcepy72nq+mNLhIsD0W4c7kEmduMDQCSqtPsXPlSTsFhh2LQv+g==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.5", + "get-intrinsic": "^1.2.2", + "is-regex": "^1.1.4" + }, "engines": { "node": ">= 0.4" }, @@ -17748,204 +13233,285 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/ganache-core/node_modules/has-to-string-tag-x": { - "version": "1.4.1", - "license": "MIT", - "optional": true, - "dependencies": { - "has-symbol-support-x": "^1.4.1" - }, - "engines": { - "node": "*" - } + "node_modules/safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" }, - "node_modules/ganache-core/node_modules/has-value": { - "version": "1.0.0", - "license": "MIT", - "dependencies": { - "get-value": "^2.0.6", - "has-values": "^1.0.0", - "isobject": "^3.0.0" - }, - "engines": { - "node": ">=0.10.0" - } + "node_modules/scrypt-js": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/scrypt-js/-/scrypt-js-3.0.1.tgz", + "integrity": "sha512-cdwTTnqPu0Hyvf5in5asVdZocVDTNRmR7XEcJuIzMjJeSHybHl7vpB66AzwTaIg6CLSbtjcxc8fqcySfnTkccA==" }, - "node_modules/ganache-core/node_modules/has-values": { - "version": "1.0.0", - "license": "MIT", + "node_modules/secp256k1": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/secp256k1/-/secp256k1-4.0.3.tgz", + "integrity": "sha512-NLZVf+ROMxwtEj3Xa562qgv2BK5e2WNmXPiOdVIPLgs6lyTzMvBq0aWTYMI5XCP9jZMVKOcqZLw/Wc4vDkuxhA==", + "hasInstallScript": true, "dependencies": { - "is-number": "^3.0.0", - "kind-of": "^4.0.0" + "elliptic": "^6.5.4", + "node-addon-api": "^2.0.0", + "node-gyp-build": "^4.2.0" }, "engines": { - "node": ">=0.10.0" + "node": ">=10.0.0" } }, - "node_modules/ganache-core/node_modules/has-values/node_modules/is-buffer": { - "version": "1.1.6", - "license": "MIT" + "node_modules/seedrandom": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/seedrandom/-/seedrandom-3.0.5.tgz", + "integrity": "sha512-8OwmbklUNzwezjGInmZ+2clQmExQPvomqjL7LFqOYqtmuxRgQYqOD3mHaU+MvZn5FLUeVxVfQjwLZW/n/JFuqg==" }, - "node_modules/ganache-core/node_modules/has-values/node_modules/is-number": { - "version": "3.0.0", - "license": "MIT", - "dependencies": { - "kind-of": "^3.0.2" - }, + "node_modules/semaphore-async-await": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/semaphore-async-await/-/semaphore-async-await-1.5.1.tgz", + "integrity": "sha512-b/ptP11hETwYWpeilHXXQiV5UJNJl7ZWWooKRE5eBIYWoom6dZ0SluCIdCtKycsMtZgKWE01/qAw6jblw1YVhg==", "engines": { - "node": ">=0.10.0" + "node": ">=4.1" } }, - "node_modules/ganache-core/node_modules/has-values/node_modules/is-number/node_modules/kind-of": { - "version": "3.2.2", - "license": "MIT", + "node_modules/semver": { + "version": "7.5.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", + "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", "dependencies": { - "is-buffer": "^1.1.5" + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" }, "engines": { - "node": ">=0.10.0" + "node": ">=10" } }, - "node_modules/ganache-core/node_modules/has-values/node_modules/kind-of": { - "version": "4.0.0", - "license": "MIT", + "node_modules/semver/node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", "dependencies": { - "is-buffer": "^1.1.5" + "yallist": "^4.0.0" }, "engines": { - "node": ">=0.10.0" + "node": ">=10" } }, - "node_modules/ganache-core/node_modules/hash-base": { - "version": "3.1.0", - "license": "MIT", + "node_modules/semver/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" + }, + "node_modules/send": { + "version": "0.18.0", + "resolved": "https://registry.npmjs.org/send/-/send-0.18.0.tgz", + "integrity": "sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==", "dependencies": { - "inherits": "^2.0.4", - "readable-stream": "^3.6.0", - "safe-buffer": "^5.2.0" + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "1.2.0", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "fresh": "0.5.2", + "http-errors": "2.0.0", + "mime": "1.6.0", + "ms": "2.1.3", + "on-finished": "2.4.1", + "range-parser": "~1.2.1", + "statuses": "2.0.1" }, "engines": { - "node": ">=4" + "node": ">= 0.8.0" } }, - "node_modules/ganache-core/node_modules/hash-base/node_modules/readable-stream": { - "version": "3.6.0", - "license": "MIT", - "dependencies": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - }, - "engines": { - "node": ">= 6" + "node_modules/send/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dependencies": { + "ms": "2.0.0" } }, - "node_modules/ganache-core/node_modules/hash.js": { - "version": "1.1.7", - "license": "MIT", + "node_modules/send/node_modules/debug/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" + }, + "node_modules/send/node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" + }, + "node_modules/sentence-case": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/sentence-case/-/sentence-case-2.1.1.tgz", + "integrity": "sha512-ENl7cYHaK/Ktwk5OTD+aDbQ3uC8IByu/6Bkg+HDv8Mm+XnBnppVNalcfJTNsp1ibstKh030/JKQQWglDvtKwEQ==", "dependencies": { - "inherits": "^2.0.3", - "minimalistic-assert": "^1.0.1" + "no-case": "^2.2.0", + "upper-case-first": "^1.1.2" } }, - "node_modules/ganache-core/node_modules/heap": { - "version": "0.2.6" + "node_modules/serialize-javascript": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.0.tgz", + "integrity": "sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag==", + "dependencies": { + "randombytes": "^2.1.0" + } }, - "node_modules/ganache-core/node_modules/hmac-drbg": { - "version": "1.0.1", - "license": "MIT", + "node_modules/serve-static": { + "version": "1.15.0", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.15.0.tgz", + "integrity": "sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==", "dependencies": { - "hash.js": "^1.0.3", - "minimalistic-assert": "^1.0.0", - "minimalistic-crypto-utils": "^1.0.1" + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "parseurl": "~1.3.3", + "send": "0.18.0" + }, + "engines": { + "node": ">= 0.8.0" } }, - "node_modules/ganache-core/node_modules/home-or-tmp": { - "version": "2.0.0", - "license": "MIT", + "node_modules/servify": { + "version": "0.1.12", + "resolved": "https://registry.npmjs.org/servify/-/servify-0.1.12.tgz", + "integrity": "sha512-/xE6GvsKKqyo1BAY+KxOWXcLpPsUUyji7Qg3bVD7hh1eRze5bR1uYiuDA/k3Gof1s9BTzQZEJK8sNcNGFIzeWw==", "dependencies": { - "os-homedir": "^1.0.0", - "os-tmpdir": "^1.0.1" + "body-parser": "^1.16.0", + "cors": "^2.8.1", + "express": "^4.14.0", + "request": "^2.79.0", + "xhr": "^2.3.3" }, "engines": { - "node": ">=0.10.0" + "node": ">=6" } }, - "node_modules/ganache-core/node_modules/http-cache-semantics": { - "version": "4.1.0", - "license": "BSD-2-Clause", - "optional": true + "node_modules/set-blocking": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", + "integrity": "sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==" }, - "node_modules/ganache-core/node_modules/http-errors": { - "version": "1.7.2", - "license": "MIT", - "optional": true, + "node_modules/set-function-length": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.1.1.tgz", + "integrity": "sha512-VoaqjbBJKiWtg4yRcKBQ7g7wnGnLV3M8oLvVWwOk2PdYY6PEFegR1vezXR0tw6fZGF9csVakIRjrJiy2veSBFQ==", "dependencies": { - "depd": "~1.1.2", - "inherits": "2.0.3", - "setprototypeof": "1.1.1", - "statuses": ">= 1.5.0 < 2", - "toidentifier": "1.0.0" + "define-data-property": "^1.1.1", + "get-intrinsic": "^1.2.1", + "gopd": "^1.0.1", + "has-property-descriptors": "^1.0.0" }, "engines": { - "node": ">= 0.6" + "node": ">= 0.4" } }, - "node_modules/ganache-core/node_modules/http-errors/node_modules/inherits": { - "version": "2.0.3", - "license": "ISC", - "optional": true + "node_modules/set-function-name": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/set-function-name/-/set-function-name-2.0.1.tgz", + "integrity": "sha512-tMNCiqYVkXIZgc2Hnoy2IvC/f8ezc5koaRFkCjrpWzGpCd3qbZXPzVy9MAZzK1ch/X0jvSkojys3oqJN0qCmdA==", + "dev": true, + "dependencies": { + "define-data-property": "^1.0.1", + "functions-have-names": "^1.2.3", + "has-property-descriptors": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + } }, - "node_modules/ganache-core/node_modules/http-https": { - "version": "1.0.0", - "license": "ISC", - "optional": true + "node_modules/setimmediate": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", + "integrity": "sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA==" }, - "node_modules/ganache-core/node_modules/http-signature": { + "node_modules/setprototypeof": { "version": "1.2.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", + "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==" + }, + "node_modules/sha.js": { + "version": "2.4.11", + "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz", + "integrity": "sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==", "dependencies": { - "assert-plus": "^1.0.0", - "jsprim": "^1.2.2", - "sshpk": "^1.7.0" + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" }, - "engines": { - "node": ">=0.8", - "npm": ">=1.3.7" + "bin": { + "sha.js": "bin.js" } }, - "node_modules/ganache-core/node_modules/iconv-lite": { - "version": "0.4.24", - "license": "MIT", - "optional": true, + "node_modules/sha1": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/sha1/-/sha1-1.1.1.tgz", + "integrity": "sha512-dZBS6OrMjtgVkopB1Gmo4RQCDKiZsqcpAQpkV/aaj+FCrCg8r4I4qMkDPQjBgLIxlmu9k4nUbWq6ohXahOneYA==", "dependencies": { - "safer-buffer": ">= 2.1.2 < 3" + "charenc": ">= 0.0.1", + "crypt": ">= 0.0.1" }, "engines": { - "node": ">=0.10.0" + "node": "*" } }, - "node_modules/ganache-core/node_modules/idna-uts46-hx": { - "version": "2.3.1", - "license": "MIT", - "optional": true, + "node_modules/sha3": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/sha3/-/sha3-2.1.4.tgz", + "integrity": "sha512-S8cNxbyb0UGUM2VhRD4Poe5N58gJnJsLJ5vC7FYWGUmGhcsj4++WaIOBFVDxlG0W3To6xBuiRh+i0Qp2oNCOtg==", "dependencies": { - "punycode": "2.1.0" + "buffer": "6.0.3" + } + }, + "node_modules/shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "peer": true, + "dependencies": { + "shebang-regex": "^3.0.0" }, "engines": { - "node": ">=4.0.0" + "node": ">=8" } }, - "node_modules/ganache-core/node_modules/idna-uts46-hx/node_modules/punycode": { - "version": "2.1.0", - "license": "MIT", - "optional": true, + "node_modules/shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "peer": true, "engines": { - "node": ">=6" + "node": ">=8" } }, - "node_modules/ganache-core/node_modules/ieee754": { - "version": "1.2.1", + "node_modules/side-channel": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", + "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", + "dependencies": { + "call-bind": "^1.0.0", + "get-intrinsic": "^1.0.2", + "object-inspect": "^1.9.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/signal-exit": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", + "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", + "peer": true, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/simple-concat": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/simple-concat/-/simple-concat-1.0.1.tgz", + "integrity": "sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q==", "funding": [ { "type": "github", @@ -17959,1046 +13525,1063 @@ "type": "consulting", "url": "https://feross.org/support" } - ], - "license": "BSD-3-Clause" + ] }, - "node_modules/ganache-core/node_modules/immediate": { - "version": "3.2.3", - "license": "MIT" + "node_modules/simple-get": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/simple-get/-/simple-get-3.1.1.tgz", + "integrity": "sha512-CQ5LTKGfCpvE1K0n2us+kuMPbk/q0EKl82s4aheV9oXjFEz6W/Y7oQFVJuU6QG77hRT4Ghb5RURteF5vnWjupA==", + "optional": true, + "dependencies": { + "decompress-response": "^4.2.0", + "once": "^1.3.1", + "simple-concat": "^1.0.0" + } }, - "node_modules/ganache-core/node_modules/inflight": { - "version": "1.0.6", - "license": "ISC", + "node_modules/slash": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-2.0.0.tgz", + "integrity": "sha512-ZYKh3Wh2z1PpEXWr0MpSBZ0V6mZHAQfYevttO11c51CaWjGTaadiKZ+wVt1PbMlDV5qhMFslpZCemhwOK7C89A==", + "engines": { + "node": ">=6" + } + }, + "node_modules/slice-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz", + "integrity": "sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==", + "dev": true, "dependencies": { - "once": "^1.3.0", - "wrappy": "1" + "ansi-styles": "^4.0.0", + "astral-regex": "^2.0.0", + "is-fullwidth-code-point": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/slice-ansi?sponsor=1" } }, - "node_modules/ganache-core/node_modules/inherits": { - "version": "2.0.4", - "license": "ISC" + "node_modules/snake-case": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/snake-case/-/snake-case-2.1.0.tgz", + "integrity": "sha512-FMR5YoPFwOLuh4rRz92dywJjyKYZNLpMn1R5ujVpIYkbA9p01fq8RMg0FkO4M+Yobt4MjHeLTJVm5xFFBHSV2Q==", + "dependencies": { + "no-case": "^2.2.0" + } }, - "node_modules/ganache-core/node_modules/invariant": { - "version": "2.2.4", - "license": "MIT", + "node_modules/sol2uml": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/sol2uml/-/sol2uml-2.2.0.tgz", + "integrity": "sha512-JMBvn3ZMT/1egoZjheM4Mh9gQudrlVjFZ1VS0gjQ/eluITT08U6V438Jyku28OuXz42aXNbGS80JuRZo0J7pLg==", + "optional": true, "dependencies": { - "loose-envify": "^1.0.0" + "@aduh95/viz.js": "^3.7.0", + "@solidity-parser/parser": "^0.14.3", + "axios": "^0.27.2", + "commander": "^9.4.0", + "convert-svg-to-png": "^0.6.4", + "debug": "^4.3.4", + "ethers": "^5.6.9", + "js-graph-algorithms": "^1.0.18", + "klaw": "^4.0.1" + }, + "bin": { + "sol2uml": "lib/sol2uml.js" } }, - "node_modules/ganache-core/node_modules/ipaddr.js": { - "version": "1.9.1", - "license": "MIT", + "node_modules/sol2uml/node_modules/axios": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/axios/-/axios-0.27.2.tgz", + "integrity": "sha512-t+yRIyySRTp/wua5xEr+z1q60QmLq8ABsS5O9Me1AsE5dfKqgnCFzwiCZZ/cGNd1lq4/7akDWMxdhVlucjmnOQ==", "optional": true, - "engines": { - "node": ">= 0.10" + "dependencies": { + "follow-redirects": "^1.14.9", + "form-data": "^4.0.0" } }, - "node_modules/ganache-core/node_modules/is-accessor-descriptor": { - "version": "1.0.0", - "license": "MIT", + "node_modules/sol2uml/node_modules/ethers": { + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/ethers/-/ethers-5.7.2.tgz", + "integrity": "sha512-wswUsmWo1aOK8rR7DIKiWSw9DbLWe6x98Jrn8wcTflTVvaXhAMaB5zGAXy0GYQEQp9iO1iSHWVyARQm11zUtyg==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "optional": true, "dependencies": { - "kind-of": "^6.0.0" - }, - "engines": { - "node": ">=0.10.0" + "@ethersproject/abi": "5.7.0", + "@ethersproject/abstract-provider": "5.7.0", + "@ethersproject/abstract-signer": "5.7.0", + "@ethersproject/address": "5.7.0", + "@ethersproject/base64": "5.7.0", + "@ethersproject/basex": "5.7.0", + "@ethersproject/bignumber": "5.7.0", + "@ethersproject/bytes": "5.7.0", + "@ethersproject/constants": "5.7.0", + "@ethersproject/contracts": "5.7.0", + "@ethersproject/hash": "5.7.0", + "@ethersproject/hdnode": "5.7.0", + "@ethersproject/json-wallets": "5.7.0", + "@ethersproject/keccak256": "5.7.0", + "@ethersproject/logger": "5.7.0", + "@ethersproject/networks": "5.7.1", + "@ethersproject/pbkdf2": "5.7.0", + "@ethersproject/properties": "5.7.0", + "@ethersproject/providers": "5.7.2", + "@ethersproject/random": "5.7.0", + "@ethersproject/rlp": "5.7.0", + "@ethersproject/sha2": "5.7.0", + "@ethersproject/signing-key": "5.7.0", + "@ethersproject/solidity": "5.7.0", + "@ethersproject/strings": "5.7.0", + "@ethersproject/transactions": "5.7.0", + "@ethersproject/units": "5.7.0", + "@ethersproject/wallet": "5.7.0", + "@ethersproject/web": "5.7.1", + "@ethersproject/wordlists": "5.7.0" } }, - "node_modules/ganache-core/node_modules/is-arguments": { - "version": "1.1.0", - "license": "MIT", + "node_modules/solc": { + "version": "0.8.23", + "resolved": "https://registry.npmjs.org/solc/-/solc-0.8.23.tgz", + "integrity": "sha512-uqe69kFWfJc3cKdxj+Eg9CdW1CP3PLZDPeyJStQVWL8Q9jjjKD0VuRAKBFR8mrWiq5A7gJqERxJFYJsklrVsfA==", "dependencies": { - "call-bind": "^1.0.0" + "command-exists": "^1.2.8", + "commander": "^8.1.0", + "follow-redirects": "^1.12.1", + "js-sha3": "0.8.0", + "memorystream": "^0.3.1", + "n": "^9.2.0", + "semver": "^5.5.0", + "tmp": "0.0.33" }, - "engines": { - "node": ">= 0.4" + "bin": { + "solcjs": "solc.js" }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "engines": { + "node": ">=10.0.0" } }, - "node_modules/ganache-core/node_modules/is-callable": { - "version": "1.2.2", - "license": "MIT", + "node_modules/solc/node_modules/commander": { + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-8.3.0.tgz", + "integrity": "sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==", "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": ">= 12" } }, - "node_modules/ganache-core/node_modules/is-ci": { - "version": "2.0.0", - "license": "MIT", - "dependencies": { - "ci-info": "^2.0.0" - }, + "node_modules/solc/node_modules/semver": { + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", + "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", "bin": { - "is-ci": "bin.js" + "semver": "bin/semver" } }, - "node_modules/ganache-core/node_modules/is-data-descriptor": { - "version": "1.0.0", - "license": "MIT", + "node_modules/solidity-ast": { + "version": "0.4.55", + "resolved": "https://registry.npmjs.org/solidity-ast/-/solidity-ast-0.4.55.tgz", + "integrity": "sha512-qeEU/r/K+V5lrAw8iswf2/yfWAnSGs3WKPHI+zAFKFjX0dIBVXEU/swQ8eJQYHf6PJWUZFO2uWV4V1wEOkeQbA==", + "dev": true, "dependencies": { - "kind-of": "^6.0.0" - }, - "engines": { - "node": ">=0.10.0" + "array.prototype.findlast": "^1.2.2" } }, - "node_modules/ganache-core/node_modules/is-date-object": { - "version": "1.0.2", - "license": "MIT", + "node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": ">=0.10.0" } }, - "node_modules/ganache-core/node_modules/is-descriptor": { - "version": "1.0.2", - "license": "MIT", + "node_modules/source-map-support": { + "version": "0.5.21", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", + "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", "dependencies": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - }, - "engines": { - "node": ">=0.10.0" + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" } }, - "node_modules/ganache-core/node_modules/is-extendable": { - "version": "1.0.1", - "license": "MIT", + "node_modules/spdx-correct": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.2.0.tgz", + "integrity": "sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA==", "dependencies": { - "is-plain-object": "^2.0.4" - }, - "engines": { - "node": ">=0.10.0" + "spdx-expression-parse": "^3.0.0", + "spdx-license-ids": "^3.0.0" } }, - "node_modules/ganache-core/node_modules/is-finite": { - "version": "1.1.0", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node_modules/spdx-exceptions": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz", + "integrity": "sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==" + }, + "node_modules/spdx-expression-parse": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz", + "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==", + "dependencies": { + "spdx-exceptions": "^2.1.0", + "spdx-license-ids": "^3.0.0" } }, - "node_modules/ganache-core/node_modules/is-fn": { - "version": "1.0.0", - "license": "MIT", + "node_modules/spdx-license-ids": { + "version": "3.0.16", + "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.16.tgz", + "integrity": "sha512-eWN+LnM3GR6gPu35WxNgbGl8rmY1AEmoMDvL/QD6zYmPWgywxWqJWNdLGT+ke8dKNWrcYgYjPpG5gbTfghP8rw==" + }, + "node_modules/sshpk": { + "version": "1.18.0", + "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.18.0.tgz", + "integrity": "sha512-2p2KJZTSqQ/I3+HX42EpYOa2l3f8Erv8MWKsy2I9uf4wA7yFIkXRffYdsx86y6z4vHtV8u7g+pPlr8/4ouAxsQ==", + "dependencies": { + "asn1": "~0.2.3", + "assert-plus": "^1.0.0", + "bcrypt-pbkdf": "^1.0.0", + "dashdash": "^1.12.0", + "ecc-jsbn": "~0.1.1", + "getpass": "^0.1.1", + "jsbn": "~0.1.0", + "safer-buffer": "^2.0.2", + "tweetnacl": "~0.14.0" + }, + "bin": { + "sshpk-conv": "bin/sshpk-conv", + "sshpk-sign": "bin/sshpk-sign", + "sshpk-verify": "bin/sshpk-verify" + }, "engines": { "node": ">=0.10.0" } }, - "node_modules/ganache-core/node_modules/is-function": { - "version": "1.0.2", - "license": "MIT" + "node_modules/sshpk/node_modules/tweetnacl": { + "version": "0.14.5", + "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", + "integrity": "sha512-KXXFFdAbFXY4geFIwoyNK+f5Z1b7swfXABfL7HXCmoIWMKU3dmS26672A4EeQtDzLKy7SXmfBu51JolvEKwtGA==" }, - "node_modules/ganache-core/node_modules/is-hex-prefixed": { - "version": "1.0.0", - "license": "MIT", + "node_modules/stacktrace-parser": { + "version": "0.1.10", + "resolved": "https://registry.npmjs.org/stacktrace-parser/-/stacktrace-parser-0.1.10.tgz", + "integrity": "sha512-KJP1OCML99+8fhOHxwwzyWrlUuVX5GQ0ZpJTd1DFXhdkrvg1szxfHhawXUZ3g9TkXORQd4/WG68jMlQZ2p8wlg==", + "dependencies": { + "type-fest": "^0.7.1" + }, "engines": { - "node": ">=6.5.0", - "npm": ">=3" + "node": ">=6" } }, - "node_modules/ganache-core/node_modules/is-negative-zero": { - "version": "2.0.1", - "license": "MIT", + "node_modules/stacktrace-parser/node_modules/type-fest": { + "version": "0.7.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.7.1.tgz", + "integrity": "sha512-Ne2YiiGN8bmrmJJEuTWTLJR32nh/JdL1+PSicowtNb0WFpn59GK8/lfD61bVtzguz7b3PBt74nxpv/Pw5po5Rg==", "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": ">=8" } }, - "node_modules/ganache-core/node_modules/is-object": { - "version": "1.0.2", - "license": "MIT", - "optional": true, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node_modules/statuses": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", + "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", + "engines": { + "node": ">= 0.8" } }, - "node_modules/ganache-core/node_modules/is-plain-obj": { + "node_modules/strict-uri-encode": { "version": "1.1.0", - "license": "MIT", - "optional": true, + "resolved": "https://registry.npmjs.org/strict-uri-encode/-/strict-uri-encode-1.1.0.tgz", + "integrity": "sha512-R3f198pcvnB+5IpnBlRkphuE9n46WyVl8I39W/ZUTZLz4nqSP/oLYUrcnJrw462Ds8he4YKMov2efsTIw1BDGQ==", "engines": { "node": ">=0.10.0" } }, - "node_modules/ganache-core/node_modules/is-plain-object": { - "version": "2.0.4", - "license": "MIT", + "node_modules/string_decoder": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", + "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", + "dependencies": { + "safe-buffer": "~5.2.0" + } + }, + "node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", "dependencies": { - "isobject": "^3.0.1" + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" }, "engines": { - "node": ">=0.10.0" + "node": ">=8" } }, - "node_modules/ganache-core/node_modules/is-regex": { - "version": "1.1.1", - "license": "MIT", + "node_modules/string-width-cjs": { + "name": "string-width", + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "peer": true, "dependencies": { - "has-symbols": "^1.0.1" + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" }, "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": ">=8" } }, - "node_modules/ganache-core/node_modules/is-retry-allowed": { - "version": "1.2.0", - "license": "MIT", - "optional": true, + "node_modules/string-width-cjs/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "peer": true, "engines": { - "node": ">=0.10.0" + "node": ">=8" } }, - "node_modules/ganache-core/node_modules/is-symbol": { - "version": "1.0.3", - "license": "MIT", + "node_modules/string-width-cjs/node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "peer": true, "dependencies": { - "has-symbols": "^1.0.1" + "ansi-regex": "^5.0.1" }, "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": ">=8" } }, - "node_modules/ganache-core/node_modules/is-typedarray": { - "version": "1.0.0", - "license": "MIT" + "node_modules/string-width/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "engines": { + "node": ">=8" + } }, - "node_modules/ganache-core/node_modules/is-windows": { - "version": "1.0.2", - "license": "MIT", + "node_modules/string-width/node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dependencies": { + "ansi-regex": "^5.0.1" + }, "engines": { - "node": ">=0.10.0" + "node": ">=8" } }, - "node_modules/ganache-core/node_modules/isarray": { - "version": "1.0.0", - "license": "MIT" - }, - "node_modules/ganache-core/node_modules/isexe": { - "version": "2.0.0", - "license": "ISC" - }, - "node_modules/ganache-core/node_modules/isobject": { - "version": "3.0.1", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/ganache-core/node_modules/isstream": { - "version": "0.1.2", - "license": "MIT" - }, - "node_modules/ganache-core/node_modules/isurl": { - "version": "1.0.0", - "license": "MIT", - "optional": true, + "node_modules/string.prototype.trim": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.8.tgz", + "integrity": "sha512-lfjY4HcixfQXOfaqCvcBuOIapyaroTXhbkfJN3gcB1OtyupngWK4sEET9Knd0cXd28kTUqu/kHoV4HKSJdnjiQ==", + "dev": true, "dependencies": { - "has-to-string-tag-x": "^1.2.0", - "is-object": "^1.0.1" + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1" }, "engines": { - "node": ">= 4" - } - }, - "node_modules/ganache-core/node_modules/js-sha3": { - "version": "0.5.7", - "license": "MIT", - "optional": true - }, - "node_modules/ganache-core/node_modules/js-tokens": { - "version": "4.0.0", - "license": "MIT" - }, - "node_modules/ganache-core/node_modules/jsbn": { - "version": "0.1.1", - "license": "MIT" - }, - "node_modules/ganache-core/node_modules/json-buffer": { - "version": "3.0.0", - "license": "MIT", - "optional": true - }, - "node_modules/ganache-core/node_modules/json-rpc-engine": { - "version": "3.8.0", - "license": "ISC", - "dependencies": { - "async": "^2.0.1", - "babel-preset-env": "^1.7.0", - "babelify": "^7.3.0", - "json-rpc-error": "^2.0.0", - "promise-to-callback": "^1.0.0", - "safe-event-emitter": "^1.0.1" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/ganache-core/node_modules/json-rpc-error": { - "version": "2.0.0", - "license": "MIT", + "node_modules/string.prototype.trimend": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.7.tgz", + "integrity": "sha512-Ni79DqeB72ZFq1uH/L6zJ+DKZTkOtPIHovb3YZHQViE+HDouuU4mBrLOLDn5Dde3RF8qw5qVETEjhu9locMLvA==", + "dev": true, "dependencies": { - "inherits": "^2.0.1" + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/ganache-core/node_modules/json-rpc-random-id": { - "version": "1.0.1", - "license": "ISC" - }, - "node_modules/ganache-core/node_modules/json-schema": { - "version": "0.2.3" - }, - "node_modules/ganache-core/node_modules/json-schema-traverse": { - "version": "0.4.1", - "license": "MIT" - }, - "node_modules/ganache-core/node_modules/json-stable-stringify": { - "version": "1.0.1", - "license": "MIT", + "node_modules/string.prototype.trimstart": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.7.tgz", + "integrity": "sha512-NGhtDFu3jCEm7B4Fy0DpLewdJQOZcQ0rGbwQ/+stjnrp2i+rlKeCvos9hOIeCmqwratM47OBxY7uFZzjxHXmrg==", + "dev": true, "dependencies": { - "jsonify": "~0.0.0" + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/ganache-core/node_modules/json-stringify-safe": { - "version": "5.0.1", - "license": "ISC" - }, - "node_modules/ganache-core/node_modules/jsonfile": { + "node_modules/strip-ansi": { "version": "4.0.0", - "license": "MIT", - "optionalDependencies": { - "graceful-fs": "^4.1.6" - } - }, - "node_modules/ganache-core/node_modules/jsonify": { - "version": "0.0.0", - "license": "Public Domain" - }, - "node_modules/ganache-core/node_modules/jsprim": { - "version": "1.4.1", - "engines": [ - "node >=0.6.0" - ], - "license": "MIT", - "dependencies": { - "assert-plus": "1.0.0", - "extsprintf": "1.3.0", - "json-schema": "0.2.3", - "verror": "1.10.0" - } - }, - "node_modules/ganache-core/node_modules/keccak": { - "version": "3.0.1", - "hasInstallScript": true, - "inBundle": true, - "license": "MIT", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", + "integrity": "sha512-4XaJ2zQdCzROZDivEVIDPkcQn8LMFSa8kj8Gxb/Lnwzv9A8VctNZ+lfivC/sV3ivW8ElJTERXZoPBRrZKkNKow==", "dependencies": { - "node-addon-api": "^2.0.0", - "node-gyp-build": "^4.2.0" + "ansi-regex": "^3.0.0" }, "engines": { - "node": ">=10.0.0" + "node": ">=4" } }, - "node_modules/ganache-core/node_modules/keyv": { - "version": "3.1.0", - "license": "MIT", - "optional": true, + "node_modules/strip-ansi-cjs": { + "name": "strip-ansi", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "peer": true, "dependencies": { - "json-buffer": "3.0.0" - } - }, - "node_modules/ganache-core/node_modules/kind-of": { - "version": "6.0.3", - "license": "MIT", + "ansi-regex": "^5.0.1" + }, "engines": { - "node": ">=0.10.0" + "node": ">=8" } }, - "node_modules/ganache-core/node_modules/klaw-sync": { - "version": "6.0.0", - "license": "MIT", - "dependencies": { - "graceful-fs": "^4.1.11" + "node_modules/strip-ansi-cjs/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "peer": true, + "engines": { + "node": ">=8" } }, - "node_modules/ganache-core/node_modules/level-codec": { - "version": "9.0.2", - "license": "MIT", + "node_modules/strip-bom": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz", + "integrity": "sha512-kwrX1y7czp1E69n2ajbG65mIo9dqvJ+8aBQXOGVxqwvNbsXdFM6Lq37dLAY3mknUwru8CfcCbfOLL/gMo+fi3g==", "dependencies": { - "buffer": "^5.6.0" + "is-utf8": "^0.2.0" }, "engines": { - "node": ">=6" + "node": ">=0.10.0" } }, - "node_modules/ganache-core/node_modules/level-errors": { - "version": "2.0.1", - "license": "MIT", + "node_modules/strip-hex-prefix": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/strip-hex-prefix/-/strip-hex-prefix-1.0.0.tgz", + "integrity": "sha512-q8d4ue7JGEiVcypji1bALTos+0pWtyGlivAWyPuTkHzuTCJqrK9sWxYQZUq6Nq3cuyv3bm734IhHvHtGGURU6A==", "dependencies": { - "errno": "~0.1.1" + "is-hex-prefixed": "1.0.0" }, "engines": { - "node": ">=6" + "node": ">=6.5.0", + "npm": ">=3" } }, - "node_modules/ganache-core/node_modules/level-iterator-stream": { - "version": "2.0.3", - "license": "MIT", - "dependencies": { - "inherits": "^2.0.1", - "readable-stream": "^2.0.5", - "xtend": "^4.0.0" - }, + "node_modules/strip-indent": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-2.0.0.tgz", + "integrity": "sha512-RsSNPLpq6YUL7QYy44RnPVTn/lcVZtb48Uof3X5JLbF4zD/Gs7ZFDv2HWol+leoQN2mT86LAzSshGfkTlSOpsA==", "engines": { "node": ">=4" } }, - "node_modules/ganache-core/node_modules/level-mem": { - "version": "3.0.1", - "license": "MIT", - "dependencies": { - "level-packager": "~4.0.0", - "memdown": "~3.0.0" - }, + "node_modules/strip-json-comments": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", "engines": { - "node": ">=6" + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/ganache-core/node_modules/level-mem/node_modules/abstract-leveldown": { - "version": "5.0.0", - "license": "MIT", + "node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dependencies": { - "xtend": "~4.0.0" + "has-flag": "^4.0.0" }, "engines": { - "node": ">=6" + "node": ">=8" } }, - "node_modules/ganache-core/node_modules/level-mem/node_modules/ltgt": { - "version": "2.2.1", - "license": "MIT" - }, - "node_modules/ganache-core/node_modules/level-mem/node_modules/memdown": { - "version": "3.0.0", - "license": "MIT", + "node_modules/swap-case": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/swap-case/-/swap-case-1.1.2.tgz", + "integrity": "sha512-BAmWG6/bx8syfc6qXPprof3Mn5vQgf5dwdUNJhsNqU9WdPt5P+ES/wQ5bxfijy8zwZgZZHslC3iAsxsuQMCzJQ==", "dependencies": { - "abstract-leveldown": "~5.0.0", - "functional-red-black-tree": "~1.0.1", - "immediate": "~3.2.3", - "inherits": "~2.0.1", - "ltgt": "~2.2.0", - "safe-buffer": "~5.1.1" - }, - "engines": { - "node": ">=6" + "lower-case": "^1.1.1", + "upper-case": "^1.1.1" } }, - "node_modules/ganache-core/node_modules/level-mem/node_modules/safe-buffer": { - "version": "5.1.2", - "license": "MIT" + "node_modules/swarm-js": { + "version": "0.1.42", + "resolved": "https://registry.npmjs.org/swarm-js/-/swarm-js-0.1.42.tgz", + "integrity": "sha512-BV7c/dVlA3R6ya1lMlSSNPLYrntt0LUq4YMgy3iwpCIc6rZnS5W2wUoctarZ5pXlpKtxDDf9hNziEkcfrxdhqQ==", + "dependencies": { + "bluebird": "^3.5.0", + "buffer": "^5.0.5", + "eth-lib": "^0.1.26", + "fs-extra": "^4.0.2", + "got": "^11.8.5", + "mime-types": "^2.1.16", + "mkdirp-promise": "^5.0.1", + "mock-fs": "^4.1.0", + "setimmediate": "^1.0.5", + "tar": "^4.0.2", + "xhr-request": "^1.0.1" + } }, - "node_modules/ganache-core/node_modules/level-packager": { - "version": "4.0.1", - "license": "MIT", + "node_modules/swarm-js/node_modules/@szmarczak/http-timer": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-4.0.6.tgz", + "integrity": "sha512-4BAffykYOgO+5nzBWYwE3W90sBgLJoUPRWWcL8wlyiM8IB8ipJz3UMJ9KXQd1RKQXpKp8Tutn80HZtWsu2u76w==", "dependencies": { - "encoding-down": "~5.0.0", - "levelup": "^3.0.0" + "defer-to-connect": "^2.0.0" }, "engines": { - "node": ">=6" + "node": ">=10" } }, - "node_modules/ganache-core/node_modules/level-post": { - "version": "1.0.7", - "license": "MIT", + "node_modules/swarm-js/node_modules/buffer": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", + "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], "dependencies": { - "ltgt": "^2.1.2" + "base64-js": "^1.3.1", + "ieee754": "^1.1.13" } }, - "node_modules/ganache-core/node_modules/level-sublevel": { - "version": "6.6.4", - "license": "MIT", - "dependencies": { - "bytewise": "~1.1.0", - "level-codec": "^9.0.0", - "level-errors": "^2.0.0", - "level-iterator-stream": "^2.0.3", - "ltgt": "~2.1.1", - "pull-defer": "^0.2.2", - "pull-level": "^2.0.3", - "pull-stream": "^3.6.8", - "typewiselite": "~1.0.0", - "xtend": "~4.0.0" + "node_modules/swarm-js/node_modules/cacheable-lookup": { + "version": "5.0.4", + "resolved": "https://registry.npmjs.org/cacheable-lookup/-/cacheable-lookup-5.0.4.tgz", + "integrity": "sha512-2/kNscPhpcxrOigMZzbiWF7dz8ilhb/nIHU3EyZiXWXpeq/au8qJ8VhdftMkty3n7Gj6HIGalQG8oiBNB3AJgA==", + "engines": { + "node": ">=10.6.0" } }, - "node_modules/ganache-core/node_modules/level-ws": { - "version": "1.0.0", - "license": "MIT", + "node_modules/swarm-js/node_modules/decompress-response": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-6.0.0.tgz", + "integrity": "sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==", "dependencies": { - "inherits": "^2.0.3", - "readable-stream": "^2.2.8", - "xtend": "^4.0.1" + "mimic-response": "^3.1.0" }, "engines": { - "node": ">=6" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/ganache-core/node_modules/levelup": { - "version": "3.1.1", - "license": "MIT", + "node_modules/swarm-js/node_modules/fs-extra": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-4.0.3.tgz", + "integrity": "sha512-q6rbdDd1o2mAnQreO7YADIxf/Whx4AHBiRf6d+/cVT8h44ss+lHgxf1FemcqDnQt9X3ct4McHr+JMGlYSsK7Cg==", "dependencies": { - "deferred-leveldown": "~4.0.0", - "level-errors": "~2.0.0", - "level-iterator-stream": "~3.0.0", - "xtend": "~4.0.0" - }, - "engines": { - "node": ">=6" + "graceful-fs": "^4.1.2", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" } }, - "node_modules/ganache-core/node_modules/levelup/node_modules/level-iterator-stream": { - "version": "3.0.1", - "license": "MIT", + "node_modules/swarm-js/node_modules/got": { + "version": "11.8.6", + "resolved": "https://registry.npmjs.org/got/-/got-11.8.6.tgz", + "integrity": "sha512-6tfZ91bOr7bOXnK7PRDCGBLa1H4U080YHNaAQ2KsMGlLEzRbk44nsZF2E1IeRc3vtJHPVbKCYgdFbaGO2ljd8g==", "dependencies": { - "inherits": "^2.0.1", - "readable-stream": "^2.3.6", - "xtend": "^4.0.0" + "@sindresorhus/is": "^4.0.0", + "@szmarczak/http-timer": "^4.0.5", + "@types/cacheable-request": "^6.0.1", + "@types/responselike": "^1.0.0", + "cacheable-lookup": "^5.0.3", + "cacheable-request": "^7.0.2", + "decompress-response": "^6.0.0", + "http2-wrapper": "^1.0.0-beta.5.2", + "lowercase-keys": "^2.0.0", + "p-cancelable": "^2.0.0", + "responselike": "^2.0.0" }, "engines": { - "node": ">=6" + "node": ">=10.19.0" + }, + "funding": { + "url": "https://github.com/sindresorhus/got?sponsor=1" } }, - "node_modules/ganache-core/node_modules/lodash": { - "version": "4.17.20", - "license": "MIT" - }, - "node_modules/ganache-core/node_modules/looper": { - "version": "2.0.0", - "license": "MIT" - }, - "node_modules/ganache-core/node_modules/loose-envify": { - "version": "1.4.0", - "license": "MIT", + "node_modules/swarm-js/node_modules/http2-wrapper": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/http2-wrapper/-/http2-wrapper-1.0.3.tgz", + "integrity": "sha512-V+23sDMr12Wnz7iTcDeJr3O6AIxlnvT/bmaAAAP/Xda35C90p9599p0F1eHR/N1KILWSoWVAiOMFjBBXaXSMxg==", "dependencies": { - "js-tokens": "^3.0.0 || ^4.0.0" + "quick-lru": "^5.1.1", + "resolve-alpn": "^1.0.0" }, - "bin": { - "loose-envify": "cli.js" - } - }, - "node_modules/ganache-core/node_modules/lowercase-keys": { - "version": "1.0.1", - "license": "MIT", - "optional": true, "engines": { - "node": ">=0.10.0" + "node": ">=10.19.0" } }, - "node_modules/ganache-core/node_modules/lru-cache": { - "version": "5.1.1", - "license": "ISC", - "dependencies": { - "yallist": "^3.0.2" + "node_modules/swarm-js/node_modules/jsonfile": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", + "integrity": "sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==", + "optionalDependencies": { + "graceful-fs": "^4.1.6" } }, - "node_modules/ganache-core/node_modules/ltgt": { - "version": "2.1.3", - "license": "MIT" - }, - "node_modules/ganache-core/node_modules/map-cache": { - "version": "0.2.2", - "license": "MIT", + "node_modules/swarm-js/node_modules/lowercase-keys": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-2.0.0.tgz", + "integrity": "sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==", "engines": { - "node": ">=0.10.0" + "node": ">=8" } }, - "node_modules/ganache-core/node_modules/map-visit": { - "version": "1.0.0", - "license": "MIT", - "dependencies": { - "object-visit": "^1.0.0" - }, + "node_modules/swarm-js/node_modules/mimic-response": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-3.1.0.tgz", + "integrity": "sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==", "engines": { - "node": ">=0.10.0" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/ganache-core/node_modules/md5.js": { - "version": "1.3.5", - "license": "MIT", - "dependencies": { - "hash-base": "^3.0.0", - "inherits": "^2.0.1", - "safe-buffer": "^5.1.2" + "node_modules/swarm-js/node_modules/p-cancelable": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-2.1.1.tgz", + "integrity": "sha512-BZOr3nRQHOntUjTrH8+Lh54smKHoHyur8We1V8DSMVrl5A2malOOwuJRnKRDjSnkoeBh4at6BwEnb5I7Jl31wg==", + "engines": { + "node": ">=8" } }, - "node_modules/ganache-core/node_modules/media-typer": { - "version": "0.3.0", - "license": "MIT", - "optional": true, + "node_modules/swarm-js/node_modules/universalify": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", + "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", "engines": { - "node": ">= 0.6" + "node": ">= 4.0.0" } }, - "node_modules/ganache-core/node_modules/merge-descriptors": { - "version": "1.0.1", - "license": "MIT", - "optional": true - }, - "node_modules/ganache-core/node_modules/merkle-patricia-tree": { - "version": "3.0.0", - "license": "MPL-2.0", + "node_modules/sync-request": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/sync-request/-/sync-request-6.1.0.tgz", + "integrity": "sha512-8fjNkrNlNCrVc/av+Jn+xxqfCjYaBoHqCsDz6mt030UMxJGr+GSfCV1dQt2gRtlL63+VPidwDVLr7V2OcTSdRw==", "dependencies": { - "async": "^2.6.1", - "ethereumjs-util": "^5.2.0", - "level-mem": "^3.0.1", - "level-ws": "^1.0.0", - "readable-stream": "^3.0.6", - "rlp": "^2.0.0", - "semaphore": ">=1.0.1" + "http-response-object": "^3.0.1", + "sync-rpc": "^1.2.1", + "then-request": "^6.0.0" + }, + "engines": { + "node": ">=8.0.0" } }, - "node_modules/ganache-core/node_modules/merkle-patricia-tree/node_modules/ethereumjs-util": { - "version": "5.2.1", - "license": "MPL-2.0", + "node_modules/sync-rpc": { + "version": "1.3.6", + "resolved": "https://registry.npmjs.org/sync-rpc/-/sync-rpc-1.3.6.tgz", + "integrity": "sha512-J8jTXuZzRlvU7HemDgHi3pGnh/rkoqR/OZSjhTyyZrEkkYQbk7Z33AXp37mkPfPpfdOuj7Ex3H/TJM1z48uPQw==", "dependencies": { - "bn.js": "^4.11.0", - "create-hash": "^1.1.2", - "elliptic": "^6.5.2", - "ethereum-cryptography": "^0.1.3", - "ethjs-util": "^0.1.3", - "rlp": "^2.0.0", - "safe-buffer": "^5.1.1" + "get-port": "^3.1.0" } }, - "node_modules/ganache-core/node_modules/merkle-patricia-tree/node_modules/readable-stream": { - "version": "3.6.0", - "license": "MIT", + "node_modules/table": { + "version": "6.8.1", + "resolved": "https://registry.npmjs.org/table/-/table-6.8.1.tgz", + "integrity": "sha512-Y4X9zqrCftUhMeH2EptSSERdVKt/nEdijTOacGD/97EKjhQ/Qs8RTlEGABSJNNN8lac9kheH+af7yAkEWlgneA==", + "dev": true, "dependencies": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" + "ajv": "^8.0.1", + "lodash.truncate": "^4.4.2", + "slice-ansi": "^4.0.0", + "string-width": "^4.2.3", + "strip-ansi": "^6.0.1" }, "engines": { - "node": ">= 6" - } - }, - "node_modules/ganache-core/node_modules/methods": { - "version": "1.1.2", - "license": "MIT", - "optional": true, - "engines": { - "node": ">= 0.6" + "node": ">=10.0.0" } }, - "node_modules/ganache-core/node_modules/miller-rabin": { - "version": "4.0.1", - "license": "MIT", + "node_modules/table/node_modules/ajv": { + "version": "8.12.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz", + "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==", + "dev": true, "dependencies": { - "bn.js": "^4.0.0", - "brorand": "^1.0.1" + "fast-deep-equal": "^3.1.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.2.2" }, - "bin": { - "miller-rabin": "bin/miller-rabin" + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" } }, - "node_modules/ganache-core/node_modules/mime": { - "version": "1.6.0", - "license": "MIT", - "optional": true, - "bin": { - "mime": "cli.js" - }, + "node_modules/table/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, "engines": { - "node": ">=4" + "node": ">=8" } }, - "node_modules/ganache-core/node_modules/mime-db": { - "version": "1.45.0", - "license": "MIT", + "node_modules/table/node_modules/json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", + "dev": true + }, + "node_modules/table/node_modules/require-from-string": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", + "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", + "dev": true, "engines": { - "node": ">= 0.6" + "node": ">=0.10.0" } }, - "node_modules/ganache-core/node_modules/mime-types": { - "version": "2.1.28", - "license": "MIT", + "node_modules/table/node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, "dependencies": { - "mime-db": "1.45.0" + "ansi-regex": "^5.0.1" }, "engines": { - "node": ">= 0.6" + "node": ">=8" } }, - "node_modules/ganache-core/node_modules/mimic-response": { - "version": "1.0.1", - "license": "MIT", - "optional": true, + "node_modules/tar": { + "version": "4.4.19", + "resolved": "https://registry.npmjs.org/tar/-/tar-4.4.19.tgz", + "integrity": "sha512-a20gEsvHnWe0ygBY8JbxoM4w3SJdhc7ZAuxkLqh+nvNQN2IOt0B5lLgM490X5Hl8FF0dl0tOf2ewFYAlIFgzVA==", + "dependencies": { + "chownr": "^1.1.4", + "fs-minipass": "^1.2.7", + "minipass": "^2.9.0", + "minizlib": "^1.3.3", + "mkdirp": "^0.5.5", + "safe-buffer": "^5.2.1", + "yallist": "^3.1.1" + }, "engines": { - "node": ">=4" + "node": ">=4.5" } }, - "node_modules/ganache-core/node_modules/min-document": { - "version": "2.19.0", + "node_modules/tar-fs": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-2.1.1.tgz", + "integrity": "sha512-V0r2Y9scmbDRLCNex/+hYzvp/zyYjvFbHPNgVTKfQvVrb6guiE/fxP+XblDNR011utopbkex2nM4dHNV6GDsng==", + "optional": true, "dependencies": { - "dom-walk": "^0.1.0" + "chownr": "^1.1.1", + "mkdirp-classic": "^0.5.2", + "pump": "^3.0.0", + "tar-stream": "^2.1.4" } }, - "node_modules/ganache-core/node_modules/minimalistic-assert": { - "version": "1.0.1", - "license": "ISC" - }, - "node_modules/ganache-core/node_modules/minimalistic-crypto-utils": { - "version": "1.0.1", - "license": "MIT" - }, - "node_modules/ganache-core/node_modules/minimatch": { - "version": "3.0.4", - "license": "ISC", + "node_modules/tar-stream": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-2.2.0.tgz", + "integrity": "sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==", + "optional": true, "dependencies": { - "brace-expansion": "^1.1.7" + "bl": "^4.0.3", + "end-of-stream": "^1.4.1", + "fs-constants": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^3.1.1" }, "engines": { - "node": "*" - } - }, - "node_modules/ganache-core/node_modules/minimist": { - "version": "1.2.5", - "license": "MIT" - }, - "node_modules/ganache-core/node_modules/minizlib": { - "version": "1.3.3", - "license": "MIT", - "optional": true, - "dependencies": { - "minipass": "^2.9.0" + "node": ">=6" } }, - "node_modules/ganache-core/node_modules/minizlib/node_modules/minipass": { + "node_modules/tar/node_modules/minipass": { "version": "2.9.0", - "license": "ISC", - "optional": true, + "resolved": "https://registry.npmjs.org/minipass/-/minipass-2.9.0.tgz", + "integrity": "sha512-wxfUjg9WebH+CUDX/CdbRlh5SmfZiy/hpkxaRI16Y9W56Pa75sWgd/rvFilSgrauD9NyFymP/+JFV3KwzIsJeg==", "dependencies": { "safe-buffer": "^5.1.2", "yallist": "^3.0.0" } }, - "node_modules/ganache-core/node_modules/mixin-deep": { - "version": "1.3.2", - "license": "MIT", - "dependencies": { - "for-in": "^1.0.2", - "is-extendable": "^1.0.1" - }, - "engines": { - "node": ">=0.10.0" - } + "node_modules/testrpc": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/testrpc/-/testrpc-0.0.1.tgz", + "integrity": "sha512-afH1hO+SQ/VPlmaLUFj2636QMeDvPCeQMc/9RBMW0IfjNe9gFD9Ra3ShqYkB7py0do1ZcCna/9acHyzTJ+GcNA==", + "deprecated": "testrpc has been renamed to ganache-cli, please use this package from now on." }, - "node_modules/ganache-core/node_modules/mkdirp": { - "version": "0.5.5", - "license": "MIT", + "node_modules/then-request": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/then-request/-/then-request-6.0.2.tgz", + "integrity": "sha512-3ZBiG7JvP3wbDzA9iNY5zJQcHL4jn/0BWtXIkagfz7QgOL/LqjCEOBQuJNZfu0XYnv5JhKh+cDxCPM4ILrqruA==", "dependencies": { - "minimist": "^1.2.5" - }, - "bin": { - "mkdirp": "bin/cmd.js" - } - }, - "node_modules/ganache-core/node_modules/mkdirp-promise": { - "version": "5.0.1", - "license": "ISC", - "optional": true, - "dependencies": { - "mkdirp": "*" + "@types/concat-stream": "^1.6.0", + "@types/form-data": "0.0.33", + "@types/node": "^8.0.0", + "@types/qs": "^6.2.31", + "caseless": "~0.12.0", + "concat-stream": "^1.6.0", + "form-data": "^2.2.0", + "http-basic": "^8.1.1", + "http-response-object": "^3.0.1", + "promise": "^8.0.0", + "qs": "^6.4.0" }, "engines": { - "node": ">=4" - } - }, - "node_modules/ganache-core/node_modules/mock-fs": { - "version": "4.13.0", - "license": "MIT", - "optional": true - }, - "node_modules/ganache-core/node_modules/ms": { - "version": "2.1.3", - "license": "MIT" - }, - "node_modules/ganache-core/node_modules/multibase": { - "version": "0.6.1", - "license": "MIT", - "optional": true, - "dependencies": { - "base-x": "^3.0.8", - "buffer": "^5.5.0" - } - }, - "node_modules/ganache-core/node_modules/multicodec": { - "version": "0.5.7", - "license": "MIT", - "optional": true, - "dependencies": { - "varint": "^5.0.0" + "node": ">=6.0.0" } }, - "node_modules/ganache-core/node_modules/multihashes": { - "version": "0.4.21", - "license": "MIT", - "optional": true, - "dependencies": { - "buffer": "^5.5.0", - "multibase": "^0.7.0", - "varint": "^5.0.0" - } + "node_modules/then-request/node_modules/@types/node": { + "version": "8.10.66", + "resolved": "https://registry.npmjs.org/@types/node/-/node-8.10.66.tgz", + "integrity": "sha512-tktOkFUA4kXx2hhhrB8bIFb5TbwzS4uOhKEmwiD+NoiL0qtP2OQ9mFldbgD4dV1djrlBYP6eBuQZiWjuHUpqFw==" }, - "node_modules/ganache-core/node_modules/multihashes/node_modules/multibase": { - "version": "0.7.0", - "license": "MIT", - "optional": true, + "node_modules/then-request/node_modules/form-data": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.5.1.tgz", + "integrity": "sha512-m21N3WOmEEURgk6B9GLOE4RuWOFf28Lhh9qGYeNlGq4VDXUlJy2th2slBNU8Gp8EzloYZOibZJ7t5ecIrFSjVA==", "dependencies": { - "base-x": "^3.0.8", - "buffer": "^5.5.0" + "asynckit": "^0.4.0", + "combined-stream": "^1.0.6", + "mime-types": "^2.1.12" + }, + "engines": { + "node": ">= 0.12" } }, - "node_modules/ganache-core/node_modules/nano-json-stream-parser": { - "version": "0.1.2", - "license": "MIT", + "node_modules/through": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", + "integrity": "sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==", "optional": true }, - "node_modules/ganache-core/node_modules/nanomatch": { - "version": "1.2.13", - "license": "MIT", - "dependencies": { - "arr-diff": "^4.0.0", - "array-unique": "^0.3.2", - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "fragment-cache": "^0.2.1", - "is-windows": "^1.0.2", - "kind-of": "^6.0.2", - "object.pick": "^1.3.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" - }, + "node_modules/timed-out": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/timed-out/-/timed-out-4.0.1.tgz", + "integrity": "sha512-G7r3AhovYtr5YKOWQkta8RKAPb+J9IsO4uVmzjl8AZwfhs8UcUwTiD6gcJYSgOtzyjvQKrKYn41syHbUWMkafA==", "engines": { "node": ">=0.10.0" } }, - "node_modules/ganache-core/node_modules/negotiator": { - "version": "0.6.2", - "license": "MIT", - "optional": true, - "engines": { - "node": ">= 0.6" - } + "node_modules/tiny-emitter": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/tiny-emitter/-/tiny-emitter-2.1.0.tgz", + "integrity": "sha512-NB6Dk1A9xgQPMoGqC5CVXn123gWyte215ONT5Pp5a0yt4nlEoO1ZWeCwpncaekPHXO60i47ihFnZPiRPjRMq4Q==" }, - "node_modules/ganache-core/node_modules/next-tick": { - "version": "1.0.0", - "license": "MIT" + "node_modules/tiny-invariant": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/tiny-invariant/-/tiny-invariant-1.3.1.tgz", + "integrity": "sha512-AD5ih2NlSssTCwsMznbvwMZpJ1cbhkGd2uueNxzv2jDlEeZdU04JQfRnggJQ8DrcVBGjAsCKwFBbDlVNtEMlzw==" }, - "node_modules/ganache-core/node_modules/nice-try": { - "version": "1.0.5", - "license": "MIT" + "node_modules/tiny-warning": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/tiny-warning/-/tiny-warning-1.0.3.tgz", + "integrity": "sha512-lBN9zLN/oAf68o3zNXYrdCt1kP8WsiGW8Oo2ka41b2IM5JL/S1CTyX1rW0mb/zSuJun0ZUrDxx4sqvYS2FWzPA==" }, - "node_modules/ganache-core/node_modules/node-addon-api": { - "version": "2.0.2", - "inBundle": true, - "license": "MIT" + "node_modules/title-case": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/title-case/-/title-case-2.1.1.tgz", + "integrity": "sha512-EkJoZ2O3zdCz3zJsYCsxyq2OC5hrxR9mfdd5I+w8h/tmFfeOxJ+vvkxsKxdmN0WtS9zLdHEgfgVOiMVgv+Po4Q==", + "dependencies": { + "no-case": "^2.2.0", + "upper-case": "^1.0.3" + } }, - "node_modules/ganache-core/node_modules/node-fetch": { - "version": "2.1.2", - "license": "MIT", + "node_modules/tmp": { + "version": "0.0.33", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", + "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", + "dependencies": { + "os-tmpdir": "~1.0.2" + }, "engines": { - "node": "4.x || >=6.0.0" + "node": ">=0.6.0" } }, - "node_modules/ganache-core/node_modules/node-gyp-build": { - "version": "4.2.3", - "inBundle": true, - "license": "MIT", - "bin": { - "node-gyp-build": "bin.js", - "node-gyp-build-optional": "optional.js", - "node-gyp-build-test": "build-test.js" + "node_modules/to-hex": { + "version": "0.0.18", + "resolved": "https://registry.npmjs.org/to-hex/-/to-hex-0.0.18.tgz", + "integrity": "sha512-twjjF944fl3eUQBpO7bETUhUyCtUFHWJkSLq9+K/Aw+yh3l/xIYaNUmybRqmxsYoZyv9au4aikDiWoJEOMKBDQ==", + "dependencies": { + "bignumber.js": "9.0.0", + "normalize-hex": "0.0.2" } }, - "node_modules/ganache-core/node_modules/normalize-url": { - "version": "4.5.0", - "license": "MIT", - "optional": true, + "node_modules/to-hex/node_modules/bignumber.js": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/bignumber.js/-/bignumber.js-9.0.0.tgz", + "integrity": "sha512-t/OYhhJ2SD+YGBQcjY8GzzDHEk9f3nerxjtfa6tlMXfe7frs/WozhvCNoGvpM0P3bNf3Gq5ZRMlGr5f3r4/N8A==", "engines": { - "node": ">=8" + "node": "*" } }, - "node_modules/ganache-core/node_modules/number-to-bn": { - "version": "1.7.0", - "license": "MIT", - "optional": true, + "node_modules/to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", "dependencies": { - "bn.js": "4.11.6", - "strip-hex-prefix": "1.0.0" + "is-number": "^7.0.0" }, "engines": { - "node": ">=6.5.0", - "npm": ">=3" + "node": ">=8.0" } }, - "node_modules/ganache-core/node_modules/number-to-bn/node_modules/bn.js": { - "version": "4.11.6", - "license": "MIT", - "optional": true + "node_modules/toformat": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/toformat/-/toformat-2.0.0.tgz", + "integrity": "sha512-03SWBVop6nU8bpyZCx7SodpYznbZF5R4ljwNLBcTQzKOD9xuihRo/psX58llS1BMFhhAI08H3luot5GoXJz2pQ==" }, - "node_modules/ganache-core/node_modules/oauth-sign": { - "version": "0.9.0", - "license": "Apache-2.0", + "node_modules/toidentifier": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", + "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", "engines": { - "node": "*" + "node": ">=0.6" } }, - "node_modules/ganache-core/node_modules/object-assign": { - "version": "4.1.1", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } + "node_modules/toml": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/toml/-/toml-3.0.0.tgz", + "integrity": "sha512-y/mWCZinnvxjTKYhJ+pYxwD0mRLVvOtdS2Awbgxln6iEnt4rk0yBxeSBHkGJcPucRiG0e55mwWp+g/05rsrd6w==" }, - "node_modules/ganache-core/node_modules/object-copy": { - "version": "0.1.0", - "license": "MIT", + "node_modules/tough-cookie": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz", + "integrity": "sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==", "dependencies": { - "copy-descriptor": "^0.1.0", - "define-property": "^0.2.5", - "kind-of": "^3.0.3" + "psl": "^1.1.28", + "punycode": "^2.1.1" }, "engines": { - "node": ">=0.10.0" + "node": ">=0.8" } }, - "node_modules/ganache-core/node_modules/object-copy/node_modules/define-property": { - "version": "0.2.5", - "license": "MIT", - "dependencies": { - "is-descriptor": "^0.1.0" - }, + "node_modules/tough-cookie/node_modules/punycode": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", + "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", "engines": { - "node": ">=0.10.0" + "node": ">=6" } }, - "node_modules/ganache-core/node_modules/object-copy/node_modules/is-accessor-descriptor": { - "version": "0.1.6", - "license": "MIT", - "dependencies": { - "kind-of": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" - } + "node_modules/tr46": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", + "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==" }, - "node_modules/ganache-core/node_modules/object-copy/node_modules/is-buffer": { - "version": "1.1.6", - "license": "MIT" + "node_modules/tslib": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", + "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==" }, - "node_modules/ganache-core/node_modules/object-copy/node_modules/is-data-descriptor": { - "version": "0.1.4", - "license": "MIT", - "dependencies": { - "kind-of": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" - } + "node_modules/tsort": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/tsort/-/tsort-0.0.1.tgz", + "integrity": "sha512-Tyrf5mxF8Ofs1tNoxA13lFeZ2Zrbd6cKbuH3V+MQ5sb6DtBj5FjrXVsRWT8YvNAQTqNoz66dz1WsbigI22aEnw==" }, - "node_modules/ganache-core/node_modules/object-copy/node_modules/is-descriptor": { - "version": "0.1.6", - "license": "MIT", + "node_modules/tunnel-agent": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", + "integrity": "sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==", "dependencies": { - "is-accessor-descriptor": "^0.1.6", - "is-data-descriptor": "^0.1.4", - "kind-of": "^5.0.0" + "safe-buffer": "^5.0.1" }, "engines": { - "node": ">=0.10.0" + "node": "*" } }, - "node_modules/ganache-core/node_modules/object-copy/node_modules/is-descriptor/node_modules/kind-of": { - "version": "5.1.0", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } + "node_modules/tweetnacl": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-1.0.3.tgz", + "integrity": "sha512-6rt+RN7aOi1nGMyC4Xa5DdYiukl2UWCbcJft7YhxReBGQD7OAM8Pbxw6YMo4r2diNEA8FEmu32YOn9rhaiE5yw==" }, - "node_modules/ganache-core/node_modules/object-copy/node_modules/kind-of": { - "version": "3.2.2", - "license": "MIT", - "dependencies": { - "is-buffer": "^1.1.5" - }, - "engines": { - "node": ">=0.10.0" - } + "node_modules/tweetnacl-util": { + "version": "0.15.1", + "resolved": "https://registry.npmjs.org/tweetnacl-util/-/tweetnacl-util-0.15.1.tgz", + "integrity": "sha512-RKJBIj8lySrShN4w6i/BonWp2Z/uxwC3h4y7xsRrpP59ZboCd0GpEVsOnMDYLMmKBpYhb5TgHzZXy7wTfYFBRw==" }, - "node_modules/ganache-core/node_modules/object-inspect": { - "version": "1.9.0", - "license": "MIT", - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node_modules/type": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/type/-/type-1.2.0.tgz", + "integrity": "sha512-+5nt5AAniqsCnu2cEQQdpzCAh33kVx8n0VoFidKpB1dVVLAN/F+bgVOqOJqOnEnrhp222clB5p3vUlD+1QAnfg==" + }, + "node_modules/type-detect": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", + "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==", + "engines": { + "node": ">=4" } }, - "node_modules/ganache-core/node_modules/object-is": { - "version": "1.1.4", - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.0", - "define-properties": "^1.1.3" - }, + "node_modules/type-fest": { + "version": "0.21.3", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", + "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", "engines": { - "node": ">= 0.4" + "node": ">=10" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/ganache-core/node_modules/object-keys": { - "version": "1.1.1", - "license": "MIT", + "node_modules/type-is": { + "version": "1.6.18", + "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", + "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", + "dependencies": { + "media-typer": "0.3.0", + "mime-types": "~2.1.24" + }, "engines": { - "node": ">= 0.4" + "node": ">= 0.6" } }, - "node_modules/ganache-core/node_modules/object-visit": { - "version": "1.0.1", - "license": "MIT", + "node_modules/typed-array-buffer": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.0.tgz", + "integrity": "sha512-Y8KTSIglk9OZEr8zywiIHG/kmQ7KWyjseXs1CbSo8vC42w7hg2HgYTxSWwP0+is7bWDc1H+Fo026CpHFwm8tkw==", + "dev": true, "dependencies": { - "isobject": "^3.0.0" + "call-bind": "^1.0.2", + "get-intrinsic": "^1.2.1", + "is-typed-array": "^1.1.10" }, "engines": { - "node": ">=0.10.0" + "node": ">= 0.4" } }, - "node_modules/ganache-core/node_modules/object.assign": { - "version": "4.1.2", - "license": "MIT", + "node_modules/typed-array-byte-length": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/typed-array-byte-length/-/typed-array-byte-length-1.0.0.tgz", + "integrity": "sha512-Or/+kvLxNpeQ9DtSydonMxCx+9ZXOswtwJn17SNLvhptaXYDJvkFFP5zbfU/uLmvnBJlI4yrnXRxpdWH/M5tNA==", + "dev": true, "dependencies": { - "call-bind": "^1.0.0", - "define-properties": "^1.1.3", - "has-symbols": "^1.0.1", - "object-keys": "^1.1.1" + "call-bind": "^1.0.2", + "for-each": "^0.3.3", + "has-proto": "^1.0.1", + "is-typed-array": "^1.1.10" }, "engines": { "node": ">= 0.4" @@ -19007,35026 +14590,5852 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/ganache-core/node_modules/object.getownpropertydescriptors": { - "version": "2.1.1", - "license": "MIT", + "node_modules/typed-array-byte-offset": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/typed-array-byte-offset/-/typed-array-byte-offset-1.0.0.tgz", + "integrity": "sha512-RD97prjEt9EL8YgAgpOkf3O4IF9lhJFr9g0htQkm0rchFp/Vx7LW5Q8fSXXub7BXAODyUQohRMyOc3faCPd0hg==", + "dev": true, "dependencies": { - "call-bind": "^1.0.0", - "define-properties": "^1.1.3", - "es-abstract": "^1.18.0-next.1" + "available-typed-arrays": "^1.0.5", + "call-bind": "^1.0.2", + "for-each": "^0.3.3", + "has-proto": "^1.0.1", + "is-typed-array": "^1.1.10" }, "engines": { - "node": ">= 0.8" + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/ganache-core/node_modules/object.pick": { - "version": "1.3.0", - "license": "MIT", + "node_modules/typed-array-length": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.4.tgz", + "integrity": "sha512-KjZypGq+I/H7HI5HlOoGHkWUUGq+Q0TPhQurLbyrVrvnKTBgzLhIJ7j6J/XTQOi0d1RjyZ0wdas8bKs2p0x3Ng==", + "dev": true, "dependencies": { - "isobject": "^3.0.1" + "call-bind": "^1.0.2", + "for-each": "^0.3.3", + "is-typed-array": "^1.1.9" }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/ganache-core/node_modules/oboe": { - "version": "2.1.4", - "license": "BSD", - "optional": true, - "dependencies": { - "http-https": "^1.0.0" + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/ganache-core/node_modules/on-finished": { - "version": "2.3.0", - "license": "MIT", - "optional": true, - "dependencies": { - "ee-first": "1.1.1" - }, + "node_modules/typed-function": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/typed-function/-/typed-function-4.1.1.tgz", + "integrity": "sha512-Pq1DVubcvibmm8bYcMowjVnnMwPVMeh0DIdA8ad8NZY2sJgapANJmiigSUwlt+EgXxpfIv8MWrQXTIzkfYZLYQ==", "engines": { - "node": ">= 0.8" + "node": ">= 14" } }, - "node_modules/ganache-core/node_modules/once": { - "version": "1.4.0", - "license": "ISC", + "node_modules/typedarray": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", + "integrity": "sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA==" + }, + "node_modules/typedarray-to-buffer": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz", + "integrity": "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==", "dependencies": { - "wrappy": "1" + "is-typedarray": "^1.0.0" } }, - "node_modules/ganache-core/node_modules/os-homedir": { - "version": "1.0.2", - "license": "MIT", + "node_modules/typescript": { + "version": "5.3.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.3.3.tgz", + "integrity": "sha512-pXWcraxM0uxAS+tN0AG/BF2TyqmHO014Z070UsJ+pFvYuRSq8KH8DmWpnbXe0pEPDHXZV3FcAbJkijJ5oNEnWw==", + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, "engines": { - "node": ">=0.10.0" + "node": ">=14.17" } }, - "node_modules/ganache-core/node_modules/os-tmpdir": { - "version": "1.0.2", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } + "node_modules/u2f-api": { + "version": "0.2.7", + "resolved": "https://registry.npmjs.org/u2f-api/-/u2f-api-0.2.7.tgz", + "integrity": "sha512-fqLNg8vpvLOD5J/z4B6wpPg4Lvowz1nJ9xdHcCzdUPKcFE/qNCceV2gNZxSJd5vhAZemHr/K/hbzVA0zxB5mkg==" }, - "node_modules/ganache-core/node_modules/p-cancelable": { - "version": "1.1.0", - "license": "MIT", - "optional": true, - "engines": { - "node": ">=6" - } + "node_modules/ultron": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/ultron/-/ultron-1.1.1.tgz", + "integrity": "sha512-UIEXBNeYmKptWH6z8ZnqTeS8fV74zG0/eRU9VGkpzz+LIJNs8W/zM/L+7ctCkRrgbNnnR0xxw4bKOr0cW0N0Og==" }, - "node_modules/ganache-core/node_modules/p-timeout": { - "version": "1.2.1", - "license": "MIT", - "optional": true, + "node_modules/unbox-primitive": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.2.tgz", + "integrity": "sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==", + "dev": true, "dependencies": { - "p-finally": "^1.0.0" + "call-bind": "^1.0.2", + "has-bigints": "^1.0.2", + "has-symbols": "^1.0.3", + "which-boxed-primitive": "^1.0.2" }, - "engines": { - "node": ">=4" - } - }, - "node_modules/ganache-core/node_modules/p-timeout/node_modules/p-finally": { - "version": "1.0.0", - "license": "MIT", - "optional": true, - "engines": { - "node": ">=4" + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/ganache-core/node_modules/parse-asn1": { - "version": "5.1.6", - "license": "ISC", + "node_modules/unbzip2-stream": { + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/unbzip2-stream/-/unbzip2-stream-1.4.3.tgz", + "integrity": "sha512-mlExGW4w71ebDJviH16lQLtZS32VKqsSfk80GCfUlwT/4/hNRFsoscrF/c++9xinkMzECL1uL9DDwXqFWkruPg==", "optional": true, "dependencies": { - "asn1.js": "^5.2.0", - "browserify-aes": "^1.0.0", - "evp_bytestokey": "^1.0.0", - "pbkdf2": "^3.0.3", - "safe-buffer": "^5.1.1" + "buffer": "^5.2.1", + "through": "^2.3.8" } }, - "node_modules/ganache-core/node_modules/parse-headers": { - "version": "2.0.3", - "license": "MIT" - }, - "node_modules/ganache-core/node_modules/parseurl": { - "version": "1.3.3", - "license": "MIT", + "node_modules/unbzip2-stream/node_modules/buffer": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", + "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], "optional": true, - "engines": { - "node": ">= 0.8" + "dependencies": { + "base64-js": "^1.3.1", + "ieee754": "^1.1.13" } }, - "node_modules/ganache-core/node_modules/pascalcase": { - "version": "0.1.1", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } + "node_modules/underscore": { + "version": "1.13.6", + "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.13.6.tgz", + "integrity": "sha512-+A5Sja4HP1M08MaXya7p5LvjuM7K6q/2EaC0+iovj/wOcMsTzMvDFbasi/oSapiwOlt252IqsKqPjCl7huKS0A==" }, - "node_modules/ganache-core/node_modules/patch-package": { - "version": "6.2.2", - "license": "MIT", + "node_modules/undici": { + "version": "5.28.2", + "resolved": "https://registry.npmjs.org/undici/-/undici-5.28.2.tgz", + "integrity": "sha512-wh1pHJHnUeQV5Xa8/kyQhO7WFa8M34l026L5P/+2TYiakvGy5Rdc8jWZVyG7ieht/0WgJLEd3kcU5gKx+6GC8w==", "dependencies": { - "@yarnpkg/lockfile": "^1.1.0", - "chalk": "^2.4.2", - "cross-spawn": "^6.0.5", - "find-yarn-workspace-root": "^1.2.1", - "fs-extra": "^7.0.1", - "is-ci": "^2.0.0", - "klaw-sync": "^6.0.0", - "minimist": "^1.2.0", - "rimraf": "^2.6.3", - "semver": "^5.6.0", - "slash": "^2.0.0", - "tmp": "^0.0.33" - }, - "bin": { - "patch-package": "index.js" + "@fastify/busboy": "^2.0.0" }, "engines": { - "npm": ">5" + "node": ">=14.0" } }, - "node_modules/ganache-core/node_modules/patch-package/node_modules/cross-spawn": { - "version": "6.0.5", - "license": "MIT", - "dependencies": { - "nice-try": "^1.0.4", - "path-key": "^2.0.1", - "semver": "^5.5.0", - "shebang-command": "^1.2.0", - "which": "^1.2.9" - }, + "node_modules/undici-types": { + "version": "5.26.5", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz", + "integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==" + }, + "node_modules/unfetch": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/unfetch/-/unfetch-4.2.0.tgz", + "integrity": "sha512-F9p7yYCn6cIW9El1zi0HI6vqpeIvBsr3dSuRO6Xuppb1u5rXpCPmMvLSyECLhybr9isec8Ohl0hPekMVrEinDA==", + "dev": true + }, + "node_modules/universalify": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz", + "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==", "engines": { - "node": ">=4.8" + "node": ">= 10.0.0" } }, - "node_modules/ganache-core/node_modules/patch-package/node_modules/path-key": { - "version": "2.0.1", - "license": "MIT", + "node_modules/unpipe": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", + "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==", "engines": { - "node": ">=4" + "node": ">= 0.8" } }, - "node_modules/ganache-core/node_modules/patch-package/node_modules/semver": { - "version": "5.7.1", - "license": "ISC", - "bin": { - "semver": "bin/semver" + "node_modules/upper-case": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/upper-case/-/upper-case-1.1.3.tgz", + "integrity": "sha512-WRbjgmYzgXkCV7zNVpy5YgrHgbBv126rMALQQMrmzOVC4GM2waQ9x7xtm8VU+1yF2kWyPzI9zbZ48n4vSxwfSA==" + }, + "node_modules/upper-case-first": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/upper-case-first/-/upper-case-first-1.1.2.tgz", + "integrity": "sha512-wINKYvI3Db8dtjikdAqoBbZoP6Q+PZUyfMR7pmwHzjC2quzSkUq5DmPrTtPEqHaz8AGtmsB4TqwapMTM1QAQOQ==", + "dependencies": { + "upper-case": "^1.1.1" } }, - "node_modules/ganache-core/node_modules/patch-package/node_modules/shebang-command": { - "version": "1.2.0", - "license": "MIT", + "node_modules/uri-js": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", "dependencies": { - "shebang-regex": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" + "punycode": "^2.1.0" } }, - "node_modules/ganache-core/node_modules/patch-package/node_modules/shebang-regex": { + "node_modules/url-set-query": { "version": "1.0.0", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } + "resolved": "https://registry.npmjs.org/url-set-query/-/url-set-query-1.0.0.tgz", + "integrity": "sha512-3AChu4NiXquPfeckE5R5cGdiHCMWJx1dwCWOmWIL4KHAziJNOFIYJlpGFeKDvwLPHovZRCxK3cYlwzqI9Vp+Gg==" }, - "node_modules/ganache-core/node_modules/patch-package/node_modules/slash": { - "version": "2.0.0", - "license": "MIT", + "node_modules/usb": { + "version": "1.9.2", + "resolved": "https://registry.npmjs.org/usb/-/usb-1.9.2.tgz", + "integrity": "sha512-dryNz030LWBPAf6gj8vyq0Iev3vPbCLHCT8dBw3gQRXRzVNsIdeuU+VjPp3ksmSPkeMAl1k+kQ14Ij0QHyeiAg==", + "hasInstallScript": true, + "optional": true, + "dependencies": { + "node-addon-api": "^4.2.0", + "node-gyp-build": "^4.3.0" + }, "engines": { - "node": ">=6" + "node": ">=10.16.0" } }, - "node_modules/ganache-core/node_modules/patch-package/node_modules/tmp": { - "version": "0.0.33", - "license": "MIT", + "node_modules/usb/node_modules/node-addon-api": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-4.3.0.tgz", + "integrity": "sha512-73sE9+3UaLYYFmDsFZnqCInzPyh3MqIwZO9cw58yIqAZhONrrabrYyYe3TuIqtIiOuTXVhsGau8hcrhhwSsDIQ==", + "optional": true + }, + "node_modules/utf-8-validate": { + "version": "5.0.10", + "resolved": "https://registry.npmjs.org/utf-8-validate/-/utf-8-validate-5.0.10.tgz", + "integrity": "sha512-Z6czzLq4u8fPOyx7TU6X3dvUZVvoJmxSQ+IcrlmagKhilxlhZgxPK6C5Jqbkw1IDUmFTM+cz9QDnnLTwDz/2gQ==", + "hasInstallScript": true, "dependencies": { - "os-tmpdir": "~1.0.2" + "node-gyp-build": "^4.3.0" }, "engines": { - "node": ">=0.6.0" + "node": ">=6.14.2" } }, - "node_modules/ganache-core/node_modules/patch-package/node_modules/which": { - "version": "1.3.1", - "license": "ISC", - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "which": "bin/which" + "node_modules/utf8": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/utf8/-/utf8-3.0.0.tgz", + "integrity": "sha512-E8VjFIQ/TyQgp+TZfS6l8yp/xWppSAHzidGiRrqe4bK4XP9pTRyKFgGJpO3SN7zdX4DeomTrwaseCHovfpFcqQ==" + }, + "node_modules/util": { + "version": "0.12.5", + "resolved": "https://registry.npmjs.org/util/-/util-0.12.5.tgz", + "integrity": "sha512-kZf/K6hEIrWHI6XqOFUiiMa+79wE/D8Q+NCNAWclkyg3b4d2k7s0QGepNjiABc+aR3N1PAyHL7p6UcLY6LmrnA==", + "dependencies": { + "inherits": "^2.0.3", + "is-arguments": "^1.0.4", + "is-generator-function": "^1.0.7", + "is-typed-array": "^1.1.3", + "which-typed-array": "^1.1.2" } }, - "node_modules/ganache-core/node_modules/path-is-absolute": { + "node_modules/util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==" + }, + "node_modules/utils-merge": { "version": "1.0.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", + "integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==", "engines": { - "node": ">=0.10.0" + "node": ">= 0.4.0" } }, - "node_modules/ganache-core/node_modules/path-parse": { - "version": "1.0.6", - "license": "MIT" - }, - "node_modules/ganache-core/node_modules/path-to-regexp": { - "version": "0.1.7", - "license": "MIT", - "optional": true + "node_modules/uuid": { + "version": "8.3.2", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", + "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", + "bin": { + "uuid": "dist/bin/uuid" + } }, - "node_modules/ganache-core/node_modules/pbkdf2": { - "version": "3.1.1", - "license": "MIT", + "node_modules/validate-npm-package-license": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", + "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", "dependencies": { - "create-hash": "^1.1.2", - "create-hmac": "^1.1.4", - "ripemd160": "^2.0.1", - "safe-buffer": "^5.0.1", - "sha.js": "^2.4.8" - }, - "engines": { - "node": ">=0.12" + "spdx-correct": "^3.0.0", + "spdx-expression-parse": "^3.0.0" } }, - "node_modules/ganache-core/node_modules/performance-now": { - "version": "2.1.0", - "license": "MIT" - }, - "node_modules/ganache-core/node_modules/posix-character-classes": { - "version": "0.1.1", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } + "node_modules/varint": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/varint/-/varint-5.0.2.tgz", + "integrity": "sha512-lKxKYG6H03yCZUpAGOPOsMcGxd1RHCu1iKvEHYDPmTyq2HueGhD73ssNBqqQWfvYs04G9iUFRvmAVLW20Jw6ow==" }, - "node_modules/ganache-core/node_modules/precond": { - "version": "0.2.3", + "node_modules/vary": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", + "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==", "engines": { - "node": ">= 0.6" + "node": ">= 0.8" } }, - "node_modules/ganache-core/node_modules/prepend-http": { - "version": "2.0.0", - "license": "MIT", - "optional": true, - "engines": { - "node": ">=4" + "node_modules/verror": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", + "integrity": "sha512-ZZKSmDAEFOijERBLkmYfJ+vmk3w+7hOLYDNkRCuRuMJGEmqYNCNLyBBFwWKVMhfwaEF3WOd0Zlw86U/WC/+nYw==", + "engines": [ + "node >=0.6.0" + ], + "dependencies": { + "assert-plus": "^1.0.0", + "core-util-is": "1.0.2", + "extsprintf": "^1.2.0" } }, - "node_modules/ganache-core/node_modules/private": { - "version": "0.1.8", - "license": "MIT", + "node_modules/web3": { + "version": "1.10.3", + "resolved": "https://registry.npmjs.org/web3/-/web3-1.10.3.tgz", + "integrity": "sha512-DgUdOOqC/gTqW+VQl1EdPxrVRPB66xVNtuZ5KD4adVBtko87hkgM8BTZ0lZ8IbUfnQk6DyjcDujMiH3oszllAw==", + "hasInstallScript": true, + "dependencies": { + "web3-bzz": "1.10.3", + "web3-core": "1.10.3", + "web3-eth": "1.10.3", + "web3-eth-personal": "1.10.3", + "web3-net": "1.10.3", + "web3-shh": "1.10.3", + "web3-utils": "1.10.3" + }, "engines": { - "node": ">= 0.6" + "node": ">=8.0.0" } }, - "node_modules/ganache-core/node_modules/process": { - "version": "0.11.10", - "license": "MIT", + "node_modules/web3-bzz": { + "version": "1.10.3", + "resolved": "https://registry.npmjs.org/web3-bzz/-/web3-bzz-1.10.3.tgz", + "integrity": "sha512-XDIRsTwekdBXtFytMpHBuun4cK4x0ZMIDXSoo1UVYp+oMyZj07c7gf7tNQY5qZ/sN+CJIas4ilhN25VJcjSijQ==", + "hasInstallScript": true, + "dependencies": { + "@types/node": "^12.12.6", + "got": "12.1.0", + "swarm-js": "^0.1.40" + }, "engines": { - "node": ">= 0.6.0" + "node": ">=8.0.0" } }, - "node_modules/ganache-core/node_modules/process-nextick-args": { - "version": "2.0.1", - "license": "MIT" + "node_modules/web3-bzz/node_modules/@types/node": { + "version": "12.20.55", + "resolved": "https://registry.npmjs.org/@types/node/-/node-12.20.55.tgz", + "integrity": "sha512-J8xLz7q2OFulZ2cyGTLE1TbbZcjpno7FaN6zdJNrgAdrJ+DZzh/uFR6YrTb4C+nXakvud8Q4+rbhoIWlYQbUFQ==" }, - "node_modules/ganache-core/node_modules/promise-to-callback": { - "version": "1.0.0", - "license": "MIT", + "node_modules/web3-core": { + "version": "1.10.3", + "resolved": "https://registry.npmjs.org/web3-core/-/web3-core-1.10.3.tgz", + "integrity": "sha512-Vbk0/vUNZxJlz3RFjAhNNt7qTpX8yE3dn3uFxfX5OHbuon5u65YEOd3civ/aQNW745N0vGUlHFNxxmn+sG9DIw==", "dependencies": { - "is-fn": "^1.0.0", - "set-immediate-shim": "^1.0.1" + "@types/bn.js": "^5.1.1", + "@types/node": "^12.12.6", + "bignumber.js": "^9.0.0", + "web3-core-helpers": "1.10.3", + "web3-core-method": "1.10.3", + "web3-core-requestmanager": "1.10.3", + "web3-utils": "1.10.3" }, "engines": { - "node": ">=0.10.0" + "node": ">=8.0.0" } }, - "node_modules/ganache-core/node_modules/proxy-addr": { - "version": "2.0.6", - "license": "MIT", - "optional": true, + "node_modules/web3-core-helpers": { + "version": "1.10.3", + "resolved": "https://registry.npmjs.org/web3-core-helpers/-/web3-core-helpers-1.10.3.tgz", + "integrity": "sha512-Yv7dQC3B9ipOc5sWm3VAz1ys70Izfzb8n9rSiQYIPjpqtJM+3V4EeK6ghzNR6CO2es0+Yu9CtCkw0h8gQhrTxA==", "dependencies": { - "forwarded": "~0.1.2", - "ipaddr.js": "1.9.1" + "web3-eth-iban": "1.10.3", + "web3-utils": "1.10.3" }, "engines": { - "node": ">= 0.10" + "node": ">=8.0.0" } }, - "node_modules/ganache-core/node_modules/prr": { - "version": "1.0.1", - "license": "MIT" - }, - "node_modules/ganache-core/node_modules/pseudomap": { - "version": "1.0.2", - "license": "ISC" - }, - "node_modules/ganache-core/node_modules/psl": { - "version": "1.8.0", - "license": "MIT" - }, - "node_modules/ganache-core/node_modules/public-encrypt": { - "version": "4.0.3", - "license": "MIT", - "optional": true, + "node_modules/web3-core-method": { + "version": "1.10.3", + "resolved": "https://registry.npmjs.org/web3-core-method/-/web3-core-method-1.10.3.tgz", + "integrity": "sha512-VZ/Dmml4NBmb0ep5PTSg9oqKoBtG0/YoMPei/bq/tUdlhB2dMB79sbeJPwx592uaV0Vpk7VltrrrBv5hTM1y4Q==", "dependencies": { - "bn.js": "^4.1.0", - "browserify-rsa": "^4.0.0", - "create-hash": "^1.1.0", - "parse-asn1": "^5.0.0", - "randombytes": "^2.0.1", - "safe-buffer": "^5.1.2" + "@ethersproject/transactions": "^5.6.2", + "web3-core-helpers": "1.10.3", + "web3-core-promievent": "1.10.3", + "web3-core-subscriptions": "1.10.3", + "web3-utils": "1.10.3" + }, + "engines": { + "node": ">=8.0.0" } }, - "node_modules/ganache-core/node_modules/pull-cat": { - "version": "1.1.11", - "license": "MIT" - }, - "node_modules/ganache-core/node_modules/pull-defer": { - "version": "0.2.3", - "license": "MIT" - }, - "node_modules/ganache-core/node_modules/pull-level": { - "version": "2.0.4", - "license": "MIT", + "node_modules/web3-core-promievent": { + "version": "1.10.3", + "resolved": "https://registry.npmjs.org/web3-core-promievent/-/web3-core-promievent-1.10.3.tgz", + "integrity": "sha512-HgjY+TkuLm5uTwUtaAfkTgRx/NzMxvVradCi02gy17NxDVdg/p6svBHcp037vcNpkuGeFznFJgULP+s2hdVgUQ==", "dependencies": { - "level-post": "^1.0.7", - "pull-cat": "^1.1.9", - "pull-live": "^1.0.1", - "pull-pushable": "^2.0.0", - "pull-stream": "^3.4.0", - "pull-window": "^2.1.4", - "stream-to-pull-stream": "^1.7.1" + "eventemitter3": "4.0.4" + }, + "engines": { + "node": ">=8.0.0" } }, - "node_modules/ganache-core/node_modules/pull-live": { - "version": "1.0.1", - "license": "MIT", + "node_modules/web3-core-requestmanager": { + "version": "1.10.3", + "resolved": "https://registry.npmjs.org/web3-core-requestmanager/-/web3-core-requestmanager-1.10.3.tgz", + "integrity": "sha512-VT9sKJfgM2yBOIxOXeXiDuFMP4pxzF6FT+y8KTLqhDFHkbG3XRe42Vm97mB/IvLQCJOmokEjl3ps8yP1kbggyw==", "dependencies": { - "pull-cat": "^1.1.9", - "pull-stream": "^3.4.0" + "util": "^0.12.5", + "web3-core-helpers": "1.10.3", + "web3-providers-http": "1.10.3", + "web3-providers-ipc": "1.10.3", + "web3-providers-ws": "1.10.3" + }, + "engines": { + "node": ">=8.0.0" } }, - "node_modules/ganache-core/node_modules/pull-pushable": { - "version": "2.2.0", - "license": "MIT" - }, - "node_modules/ganache-core/node_modules/pull-stream": { - "version": "3.6.14", - "license": "MIT" - }, - "node_modules/ganache-core/node_modules/pull-window": { - "version": "2.1.4", - "license": "MIT", + "node_modules/web3-core-subscriptions": { + "version": "1.10.3", + "resolved": "https://registry.npmjs.org/web3-core-subscriptions/-/web3-core-subscriptions-1.10.3.tgz", + "integrity": "sha512-KW0Mc8sgn70WadZu7RjQ4H5sNDJ5Lx8JMI3BWos+f2rW0foegOCyWhRu33W1s6ntXnqeBUw5rRCXZRlA3z+HNA==", "dependencies": { - "looper": "^2.0.0" + "eventemitter3": "4.0.4", + "web3-core-helpers": "1.10.3" + }, + "engines": { + "node": ">=8.0.0" } }, - "node_modules/ganache-core/node_modules/pump": { - "version": "3.0.0", - "license": "MIT", - "optional": true, - "dependencies": { - "end-of-stream": "^1.1.0", - "once": "^1.3.1" - } + "node_modules/web3-core/node_modules/@types/node": { + "version": "12.20.55", + "resolved": "https://registry.npmjs.org/@types/node/-/node-12.20.55.tgz", + "integrity": "sha512-J8xLz7q2OFulZ2cyGTLE1TbbZcjpno7FaN6zdJNrgAdrJ+DZzh/uFR6YrTb4C+nXakvud8Q4+rbhoIWlYQbUFQ==" }, - "node_modules/ganache-core/node_modules/punycode": { - "version": "2.1.1", - "license": "MIT", + "node_modules/web3-errors": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/web3-errors/-/web3-errors-1.1.4.tgz", + "integrity": "sha512-WahtszSqILez+83AxGecVroyZsMuuRT+KmQp4Si5P4Rnqbczno1k748PCrZTS1J4UCPmXMG2/Vt+0Bz2zwXkwQ==", + "dependencies": { + "web3-types": "^1.3.1" + }, "engines": { - "node": ">=6" + "node": ">=14", + "npm": ">=6.12.0" } }, - "node_modules/ganache-core/node_modules/qs": { - "version": "6.5.2", - "license": "BSD-3-Clause", + "node_modules/web3-eth": { + "version": "1.10.3", + "resolved": "https://registry.npmjs.org/web3-eth/-/web3-eth-1.10.3.tgz", + "integrity": "sha512-Uk1U2qGiif2mIG8iKu23/EQJ2ksB1BQXy3wF3RvFuyxt8Ft9OEpmGlO7wOtAyJdoKzD5vcul19bJpPcWSAYZhA==", + "dependencies": { + "web3-core": "1.10.3", + "web3-core-helpers": "1.10.3", + "web3-core-method": "1.10.3", + "web3-core-subscriptions": "1.10.3", + "web3-eth-abi": "1.10.3", + "web3-eth-accounts": "1.10.3", + "web3-eth-contract": "1.10.3", + "web3-eth-ens": "1.10.3", + "web3-eth-iban": "1.10.3", + "web3-eth-personal": "1.10.3", + "web3-net": "1.10.3", + "web3-utils": "1.10.3" + }, "engines": { - "node": ">=0.6" + "node": ">=8.0.0" } }, - "node_modules/ganache-core/node_modules/query-string": { - "version": "5.1.1", - "license": "MIT", - "optional": true, + "node_modules/web3-eth-abi": { + "version": "1.10.3", + "resolved": "https://registry.npmjs.org/web3-eth-abi/-/web3-eth-abi-1.10.3.tgz", + "integrity": "sha512-O8EvV67uhq0OiCMekqYsDtb6FzfYzMXT7VMHowF8HV6qLZXCGTdB/NH4nJrEh2mFtEwVdS6AmLFJAQd2kVyoMQ==", "dependencies": { - "decode-uri-component": "^0.2.0", - "object-assign": "^4.1.0", - "strict-uri-encode": "^1.0.0" + "@ethersproject/abi": "^5.6.3", + "web3-utils": "1.10.3" }, "engines": { - "node": ">=0.10.0" + "node": ">=8.0.0" } }, - "node_modules/ganache-core/node_modules/randombytes": { - "version": "2.1.0", - "license": "MIT", + "node_modules/web3-eth-accounts": { + "version": "1.10.3", + "resolved": "https://registry.npmjs.org/web3-eth-accounts/-/web3-eth-accounts-1.10.3.tgz", + "integrity": "sha512-8MipGgwusDVgn7NwKOmpeo3gxzzd+SmwcWeBdpXknuyDiZSQy9tXe+E9LeFGrmys/8mLLYP79n3jSbiTyv+6pQ==", "dependencies": { - "safe-buffer": "^5.1.0" + "@ethereumjs/common": "2.6.5", + "@ethereumjs/tx": "3.5.2", + "@ethereumjs/util": "^8.1.0", + "eth-lib": "0.2.8", + "scrypt-js": "^3.0.1", + "uuid": "^9.0.0", + "web3-core": "1.10.3", + "web3-core-helpers": "1.10.3", + "web3-core-method": "1.10.3", + "web3-utils": "1.10.3" + }, + "engines": { + "node": ">=8.0.0" } }, - "node_modules/ganache-core/node_modules/randomfill": { - "version": "1.0.4", - "license": "MIT", - "optional": true, + "node_modules/web3-eth-accounts/node_modules/@ethereumjs/common": { + "version": "2.6.5", + "resolved": "https://registry.npmjs.org/@ethereumjs/common/-/common-2.6.5.tgz", + "integrity": "sha512-lRyVQOeCDaIVtgfbowla32pzeDv2Obr8oR8Put5RdUBNRGr1VGPGQNGP6elWIpgK3YdpzqTOh4GyUGOureVeeA==", "dependencies": { - "randombytes": "^2.0.5", - "safe-buffer": "^5.1.0" + "crc-32": "^1.2.0", + "ethereumjs-util": "^7.1.5" } }, - "node_modules/ganache-core/node_modules/range-parser": { - "version": "1.2.1", - "license": "MIT", - "optional": true, + "node_modules/web3-eth-accounts/node_modules/@ethereumjs/rlp": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@ethereumjs/rlp/-/rlp-4.0.1.tgz", + "integrity": "sha512-tqsQiBQDQdmPWE1xkkBq4rlSW5QZpLOUJ5RJh2/9fug+q9tnUhuZoVLk7s0scUIKTOzEtR72DFBXI4WiZcMpvw==", + "bin": { + "rlp": "bin/rlp" + }, "engines": { - "node": ">= 0.6" + "node": ">=14" } }, - "node_modules/ganache-core/node_modules/raw-body": { - "version": "2.4.0", - "license": "MIT", - "optional": true, + "node_modules/web3-eth-accounts/node_modules/@ethereumjs/tx": { + "version": "3.5.2", + "resolved": "https://registry.npmjs.org/@ethereumjs/tx/-/tx-3.5.2.tgz", + "integrity": "sha512-gQDNJWKrSDGu2w7w0PzVXVBNMzb7wwdDOmOqczmhNjqFxFuIbhVJDwiGEnxFNC2/b8ifcZzY7MLcluizohRzNw==", "dependencies": { - "bytes": "3.1.0", - "http-errors": "1.7.2", - "iconv-lite": "0.4.24", - "unpipe": "1.0.0" - }, - "engines": { - "node": ">= 0.8" + "@ethereumjs/common": "^2.6.4", + "ethereumjs-util": "^7.1.5" } }, - "node_modules/ganache-core/node_modules/readable-stream": { - "version": "2.3.7", - "license": "MIT", + "node_modules/web3-eth-accounts/node_modules/@ethereumjs/util": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/@ethereumjs/util/-/util-8.1.0.tgz", + "integrity": "sha512-zQ0IqbdX8FZ9aw11vP+dZkKDkS+kgIvQPHnSAXzP9pLu+Rfu3D3XEeLbicvoXJTYnhZiPmsZUxgdzXwNKxRPbA==", "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" + "@ethereumjs/rlp": "^4.0.1", + "ethereum-cryptography": "^2.0.0", + "micro-ftch": "^0.3.1" + }, + "engines": { + "node": ">=14" } }, - "node_modules/ganache-core/node_modules/readable-stream/node_modules/safe-buffer": { - "version": "5.1.2", - "license": "MIT" - }, - "node_modules/ganache-core/node_modules/regenerate": { - "version": "1.4.2", - "license": "MIT" - }, - "node_modules/ganache-core/node_modules/regenerator-runtime": { - "version": "0.11.1", - "license": "MIT" + "node_modules/web3-eth-accounts/node_modules/bn.js": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==" }, - "node_modules/ganache-core/node_modules/regenerator-transform": { - "version": "0.10.1", - "license": "BSD", + "node_modules/web3-eth-accounts/node_modules/eth-lib": { + "version": "0.2.8", + "resolved": "https://registry.npmjs.org/eth-lib/-/eth-lib-0.2.8.tgz", + "integrity": "sha512-ArJ7x1WcWOlSpzdoTBX8vkwlkSQ85CjjifSZtV4co64vWxSV8geWfPI9x4SVYu3DSxnX4yWFVTtGL+j9DUFLNw==", "dependencies": { - "babel-runtime": "^6.18.0", - "babel-types": "^6.19.0", - "private": "^0.1.6" + "bn.js": "^4.11.6", + "elliptic": "^6.4.0", + "xhr-request-promise": "^0.1.2" } }, - "node_modules/ganache-core/node_modules/regex-not": { - "version": "1.0.2", - "license": "MIT", + "node_modules/web3-eth-accounts/node_modules/uuid": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.1.tgz", + "integrity": "sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==", + "funding": [ + "https://github.com/sponsors/broofa", + "https://github.com/sponsors/ctavan" + ], + "bin": { + "uuid": "dist/bin/uuid" + } + }, + "node_modules/web3-eth-contract": { + "version": "4.1.4", + "resolved": "https://registry.npmjs.org/web3-eth-contract/-/web3-eth-contract-4.1.4.tgz", + "integrity": "sha512-tJ4z6QLgtu8EQu2sXnLA7g427oxmngnbAUh+9kJKbP6Yep/oe+z79PqJv7H3MwqwUNW9T+/FeB2PnSQSyxz6ig==", "dependencies": { - "extend-shallow": "^3.0.2", - "safe-regex": "^1.1.0" + "web3-core": "^4.3.2", + "web3-errors": "^1.1.4", + "web3-eth": "^4.3.1", + "web3-eth-abi": "^4.1.4", + "web3-types": "^1.3.1", + "web3-utils": "^4.1.0", + "web3-validator": "^2.0.3" }, "engines": { - "node": ">=0.10.0" + "node": ">=14", + "npm": ">=6.12.0" } }, - "node_modules/ganache-core/node_modules/regexp.prototype.flags": { - "version": "1.3.0", - "license": "MIT", - "dependencies": { - "define-properties": "^1.1.3", - "es-abstract": "^1.17.0-next.1" + "node_modules/web3-eth-contract/node_modules/@ethereumjs/rlp": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@ethereumjs/rlp/-/rlp-4.0.1.tgz", + "integrity": "sha512-tqsQiBQDQdmPWE1xkkBq4rlSW5QZpLOUJ5RJh2/9fug+q9tnUhuZoVLk7s0scUIKTOzEtR72DFBXI4WiZcMpvw==", + "bin": { + "rlp": "bin/rlp" }, "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": ">=14" } }, - "node_modules/ganache-core/node_modules/regexp.prototype.flags/node_modules/es-abstract": { - "version": "1.17.7", - "license": "MIT", + "node_modules/web3-eth-contract/node_modules/web3-core": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/web3-core/-/web3-core-4.3.2.tgz", + "integrity": "sha512-uIMVd/j4BgOnwfpY8ZT+QKubOyM4xohEhFZXz9xB8wimXWMMlYVlIK/TbfHqFolS9uOerdSGhsMbcK9lETae8g==", "dependencies": { - "es-to-primitive": "^1.2.1", - "function-bind": "^1.1.1", - "has": "^1.0.3", - "has-symbols": "^1.0.1", - "is-callable": "^1.2.2", - "is-regex": "^1.1.1", - "object-inspect": "^1.8.0", - "object-keys": "^1.1.1", - "object.assign": "^4.1.1", - "string.prototype.trimend": "^1.0.1", - "string.prototype.trimstart": "^1.0.1" + "web3-errors": "^1.1.4", + "web3-eth-accounts": "^4.1.0", + "web3-eth-iban": "^4.0.7", + "web3-providers-http": "^4.1.0", + "web3-providers-ws": "^4.0.7", + "web3-types": "^1.3.1", + "web3-utils": "^4.1.0", + "web3-validator": "^2.0.3" }, "engines": { - "node": ">= 0.4" + "node": ">=14", + "npm": ">=6.12.0" }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/ganache-core/node_modules/regexpu-core": { - "version": "2.0.0", - "license": "MIT", - "dependencies": { - "regenerate": "^1.2.1", - "regjsgen": "^0.2.0", - "regjsparser": "^0.1.4" + "optionalDependencies": { + "web3-providers-ipc": "^4.0.7" } }, - "node_modules/ganache-core/node_modules/regjsgen": { - "version": "0.2.0", - "license": "MIT" - }, - "node_modules/ganache-core/node_modules/regjsparser": { - "version": "0.1.5", - "license": "BSD", + "node_modules/web3-eth-contract/node_modules/web3-eth": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/web3-eth/-/web3-eth-4.3.1.tgz", + "integrity": "sha512-zJir3GOXooHQT85JB8SrufE+Voo5TtXdjhf1D8IGXmxM8MrhI8AT+Pgt4siBTupJcu5hF17iGmTP/Nj2XnaibQ==", "dependencies": { - "jsesc": "~0.5.0" + "setimmediate": "^1.0.5", + "web3-core": "^4.3.0", + "web3-errors": "^1.1.3", + "web3-eth-abi": "^4.1.4", + "web3-eth-accounts": "^4.1.0", + "web3-net": "^4.0.7", + "web3-providers-ws": "^4.0.7", + "web3-rpc-methods": "^1.1.3", + "web3-types": "^1.3.0", + "web3-utils": "^4.0.7", + "web3-validator": "^2.0.3" }, - "bin": { - "regjsparser": "bin/parser" - } - }, - "node_modules/ganache-core/node_modules/regjsparser/node_modules/jsesc": { - "version": "0.5.0", - "bin": { - "jsesc": "bin/jsesc" - } - }, - "node_modules/ganache-core/node_modules/repeat-element": { - "version": "1.1.3", - "license": "MIT", "engines": { - "node": ">=0.10.0" + "node": ">=14", + "npm": ">=6.12.0" } }, - "node_modules/ganache-core/node_modules/repeat-string": { - "version": "1.6.1", - "license": "MIT", + "node_modules/web3-eth-contract/node_modules/web3-eth-abi": { + "version": "4.1.4", + "resolved": "https://registry.npmjs.org/web3-eth-abi/-/web3-eth-abi-4.1.4.tgz", + "integrity": "sha512-YLOBVVxxxLYKXjaiwZjEWYEnkMmmrm0nswZsvzSsINy/UgbWbzfoiZU+zn4YNWIEhORhx1p37iS3u/dP6VyC2w==", + "dependencies": { + "abitype": "0.7.1", + "web3-errors": "^1.1.3", + "web3-types": "^1.3.0", + "web3-utils": "^4.0.7", + "web3-validator": "^2.0.3" + }, "engines": { - "node": ">=0.10" + "node": ">=14", + "npm": ">=6.12.0" } }, - "node_modules/ganache-core/node_modules/repeating": { - "version": "2.0.1", - "license": "MIT", + "node_modules/web3-eth-contract/node_modules/web3-eth-accounts": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/web3-eth-accounts/-/web3-eth-accounts-4.1.0.tgz", + "integrity": "sha512-UFtAsOANsvihTQ6SSvOKguupmQkResyR9M9JNuOxYpKh7+3W+sTnbLXw2UbOSYIsKlc1mpqqW9bVr1SjqHDpUQ==", "dependencies": { - "is-finite": "^1.0.0" + "@ethereumjs/rlp": "^4.0.1", + "crc-32": "^1.2.2", + "ethereum-cryptography": "^2.0.0", + "web3-errors": "^1.1.3", + "web3-types": "^1.3.0", + "web3-utils": "^4.0.7", + "web3-validator": "^2.0.3" }, "engines": { - "node": ">=0.10.0" + "node": ">=14", + "npm": ">=6.12.0" } }, - "node_modules/ganache-core/node_modules/request": { - "version": "2.88.2", - "license": "Apache-2.0", + "node_modules/web3-eth-contract/node_modules/web3-eth-iban": { + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/web3-eth-iban/-/web3-eth-iban-4.0.7.tgz", + "integrity": "sha512-8weKLa9KuKRzibC87vNLdkinpUE30gn0IGY027F8doeJdcPUfsa4IlBgNC4k4HLBembBB2CTU0Kr/HAOqMeYVQ==", "dependencies": { - "aws-sign2": "~0.7.0", - "aws4": "^1.8.0", - "caseless": "~0.12.0", - "combined-stream": "~1.0.6", - "extend": "~3.0.2", - "forever-agent": "~0.6.1", - "form-data": "~2.3.2", - "har-validator": "~5.1.3", - "http-signature": "~1.2.0", - "is-typedarray": "~1.0.0", - "isstream": "~0.1.2", - "json-stringify-safe": "~5.0.1", - "mime-types": "~2.1.19", - "oauth-sign": "~0.9.0", - "performance-now": "^2.1.0", - "qs": "~6.5.2", - "safe-buffer": "^5.1.2", - "tough-cookie": "~2.5.0", - "tunnel-agent": "^0.6.0", - "uuid": "^3.3.2" + "web3-errors": "^1.1.3", + "web3-types": "^1.3.0", + "web3-utils": "^4.0.7", + "web3-validator": "^2.0.3" }, "engines": { - "node": ">= 6" + "node": ">=14", + "npm": ">=6.12.0" } }, - "node_modules/ganache-core/node_modules/resolve-url": { - "version": "0.2.1", - "license": "MIT" - }, - "node_modules/ganache-core/node_modules/responselike": { - "version": "1.0.2", - "license": "MIT", - "optional": true, + "node_modules/web3-eth-contract/node_modules/web3-net": { + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/web3-net/-/web3-net-4.0.7.tgz", + "integrity": "sha512-SzEaXFrBjY25iQGk5myaOfO9ZyfTwQEa4l4Ps4HDNVMibgZji3WPzpjq8zomVHMwi8bRp6VV7YS71eEsX7zLow==", "dependencies": { - "lowercase-keys": "^1.0.0" + "web3-core": "^4.3.0", + "web3-rpc-methods": "^1.1.3", + "web3-types": "^1.3.0", + "web3-utils": "^4.0.7" + }, + "engines": { + "node": ">=14", + "npm": ">=6.12.0" } }, - "node_modules/ganache-core/node_modules/resumer": { - "version": "0.0.0", - "license": "MIT", + "node_modules/web3-eth-contract/node_modules/web3-providers-http": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/web3-providers-http/-/web3-providers-http-4.1.0.tgz", + "integrity": "sha512-6qRUGAhJfVQM41E5t+re5IHYmb5hSaLc02BE2MaRQsz2xKA6RjmHpOA5h/+ojJxEpI9NI2CrfDKOAgtJfoUJQg==", "dependencies": { - "through": "~2.3.4" - } - }, - "node_modules/ganache-core/node_modules/ret": { - "version": "0.1.15", - "license": "MIT", + "cross-fetch": "^4.0.0", + "web3-errors": "^1.1.3", + "web3-types": "^1.3.0", + "web3-utils": "^4.0.7" + }, "engines": { - "node": ">=0.12" + "node": ">=14", + "npm": ">=6.12.0" } }, - "node_modules/ganache-core/node_modules/rimraf": { - "version": "2.6.3", - "license": "ISC", + "node_modules/web3-eth-contract/node_modules/web3-providers-ipc": { + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/web3-providers-ipc/-/web3-providers-ipc-4.0.7.tgz", + "integrity": "sha512-YbNqY4zUvIaK2MHr1lQFE53/8t/ejHtJchrWn9zVbFMGXlTsOAbNoIoZWROrg1v+hCBvT2c9z8xt7e/+uz5p1g==", + "optional": true, "dependencies": { - "glob": "^7.1.3" + "web3-errors": "^1.1.3", + "web3-types": "^1.3.0", + "web3-utils": "^4.0.7" }, - "bin": { - "rimraf": "bin.js" + "engines": { + "node": ">=14", + "npm": ">=6.12.0" } }, - "node_modules/ganache-core/node_modules/ripemd160": { - "version": "2.0.2", - "license": "MIT", + "node_modules/web3-eth-contract/node_modules/web3-providers-ws": { + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/web3-providers-ws/-/web3-providers-ws-4.0.7.tgz", + "integrity": "sha512-n4Dal9/rQWjS7d6LjyEPM2R458V8blRm0eLJupDEJOOIBhGYlxw5/4FthZZ/cqB7y/sLVi7K09DdYx2MeRtU5w==", "dependencies": { - "hash-base": "^3.0.0", - "inherits": "^2.0.1" + "@types/ws": "8.5.3", + "isomorphic-ws": "^5.0.0", + "web3-errors": "^1.1.3", + "web3-types": "^1.3.0", + "web3-utils": "^4.0.7", + "ws": "^8.8.1" + }, + "engines": { + "node": ">=14", + "npm": ">=6.12.0" } }, - "node_modules/ganache-core/node_modules/rlp": { - "version": "2.2.6", - "license": "MPL-2.0", + "node_modules/web3-eth-contract/node_modules/web3-utils": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/web3-utils/-/web3-utils-4.1.0.tgz", + "integrity": "sha512-+VJWR6FtCsgwuJr5tvSvQlSEG06586df8h2CxGc9tcNtIDyJKNkSDDWJkdNPvyDhhXFzQYFh8QOGymD1CIP6fw==", "dependencies": { - "bn.js": "^4.11.1" + "ethereum-cryptography": "^2.0.0", + "web3-errors": "^1.1.4", + "web3-types": "^1.3.1", + "web3-validator": "^2.0.3" }, - "bin": { - "rlp": "bin/rlp" + "engines": { + "node": ">=14", + "npm": ">=6.12.0" } }, - "node_modules/ganache-core/node_modules/rustbn.js": { - "version": "0.2.0", - "license": "(MIT OR Apache-2.0)" - }, - "node_modules/ganache-core/node_modules/safe-buffer": { - "version": "5.2.1", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" + "node_modules/web3-eth-contract/node_modules/ws": { + "version": "8.16.0", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.16.0.tgz", + "integrity": "sha512-HS0c//TP7Ina87TfiPUz1rQzMhHrl/SG2guqRcTOIUYD2q8uhUdNHZYJUaQ8aTGPzCh+c6oawMKW35nFl1dxyQ==", + "engines": { + "node": ">=10.0.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": ">=5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true }, - { - "type": "consulting", - "url": "https://feross.org/support" + "utf-8-validate": { + "optional": true } - ], - "license": "MIT" + } }, - "node_modules/ganache-core/node_modules/safe-event-emitter": { - "version": "1.0.1", - "license": "ISC", + "node_modules/web3-eth-ens": { + "version": "1.10.3", + "resolved": "https://registry.npmjs.org/web3-eth-ens/-/web3-eth-ens-1.10.3.tgz", + "integrity": "sha512-hR+odRDXGqKemw1GFniKBEXpjYwLgttTES+bc7BfTeoUyUZXbyDHe5ifC+h+vpzxh4oS0TnfcIoarK0Z9tFSiQ==", "dependencies": { - "events": "^3.0.0" + "content-hash": "^2.5.2", + "eth-ens-namehash": "2.0.8", + "web3-core": "1.10.3", + "web3-core-helpers": "1.10.3", + "web3-core-promievent": "1.10.3", + "web3-eth-abi": "1.10.3", + "web3-eth-contract": "1.10.3", + "web3-utils": "1.10.3" + }, + "engines": { + "node": ">=8.0.0" } }, - "node_modules/ganache-core/node_modules/safe-regex": { - "version": "1.1.0", - "license": "MIT", + "node_modules/web3-eth-ens/node_modules/web3-eth-contract": { + "version": "1.10.3", + "resolved": "https://registry.npmjs.org/web3-eth-contract/-/web3-eth-contract-1.10.3.tgz", + "integrity": "sha512-Y2CW61dCCyY4IoUMD4JsEQWrILX4FJWDWC/Txx/pr3K/+fGsBGvS9kWQN5EsVXOp4g7HoFOfVh9Lf7BmVVSRmg==", "dependencies": { - "ret": "~0.1.10" + "@types/bn.js": "^5.1.1", + "web3-core": "1.10.3", + "web3-core-helpers": "1.10.3", + "web3-core-method": "1.10.3", + "web3-core-promievent": "1.10.3", + "web3-core-subscriptions": "1.10.3", + "web3-eth-abi": "1.10.3", + "web3-utils": "1.10.3" + }, + "engines": { + "node": ">=8.0.0" } }, - "node_modules/ganache-core/node_modules/safer-buffer": { - "version": "2.1.2", - "license": "MIT" - }, - "node_modules/ganache-core/node_modules/scrypt-js": { - "version": "3.0.1", - "license": "MIT" - }, - "node_modules/ganache-core/node_modules/scryptsy": { - "version": "1.2.1", - "license": "MIT", - "optional": true, + "node_modules/web3-eth-iban": { + "version": "1.10.3", + "resolved": "https://registry.npmjs.org/web3-eth-iban/-/web3-eth-iban-1.10.3.tgz", + "integrity": "sha512-ZCfOjYKAjaX2TGI8uif5ah+J3BYFuo+47JOIV1RIz2l7kD9VfnxvRH5UiQDRyMALQC7KFd2hUqIEtHklapNyKA==", "dependencies": { - "pbkdf2": "^3.0.3" + "bn.js": "^5.2.1", + "web3-utils": "1.10.3" + }, + "engines": { + "node": ">=8.0.0" } }, - "node_modules/ganache-core/node_modules/secp256k1": { - "version": "4.0.2", - "hasInstallScript": true, - "license": "MIT", + "node_modules/web3-eth-personal": { + "version": "1.10.3", + "resolved": "https://registry.npmjs.org/web3-eth-personal/-/web3-eth-personal-1.10.3.tgz", + "integrity": "sha512-avrQ6yWdADIvuNQcFZXmGLCEzulQa76hUOuVywN7O3cklB4nFc/Gp3yTvD3bOAaE7DhjLQfhUTCzXL7WMxVTsw==", "dependencies": { - "elliptic": "^6.5.2", - "node-addon-api": "^2.0.0", - "node-gyp-build": "^4.2.0" + "@types/node": "^12.12.6", + "web3-core": "1.10.3", + "web3-core-helpers": "1.10.3", + "web3-core-method": "1.10.3", + "web3-net": "1.10.3", + "web3-utils": "1.10.3" }, "engines": { - "node": ">=10.0.0" + "node": ">=8.0.0" } }, - "node_modules/ganache-core/node_modules/seedrandom": { - "version": "3.0.1", - "license": "MIT" + "node_modules/web3-eth-personal/node_modules/@types/node": { + "version": "12.20.55", + "resolved": "https://registry.npmjs.org/@types/node/-/node-12.20.55.tgz", + "integrity": "sha512-J8xLz7q2OFulZ2cyGTLE1TbbZcjpno7FaN6zdJNrgAdrJ+DZzh/uFR6YrTb4C+nXakvud8Q4+rbhoIWlYQbUFQ==" }, - "node_modules/ganache-core/node_modules/semaphore": { - "version": "1.1.0", + "node_modules/web3-eth/node_modules/web3-eth-contract": { + "version": "1.10.3", + "resolved": "https://registry.npmjs.org/web3-eth-contract/-/web3-eth-contract-1.10.3.tgz", + "integrity": "sha512-Y2CW61dCCyY4IoUMD4JsEQWrILX4FJWDWC/Txx/pr3K/+fGsBGvS9kWQN5EsVXOp4g7HoFOfVh9Lf7BmVVSRmg==", + "dependencies": { + "@types/bn.js": "^5.1.1", + "web3-core": "1.10.3", + "web3-core-helpers": "1.10.3", + "web3-core-method": "1.10.3", + "web3-core-promievent": "1.10.3", + "web3-core-subscriptions": "1.10.3", + "web3-eth-abi": "1.10.3", + "web3-utils": "1.10.3" + }, "engines": { - "node": ">=0.8.0" + "node": ">=8.0.0" } }, - "node_modules/ganache-core/node_modules/send": { - "version": "0.17.1", - "license": "MIT", - "optional": true, + "node_modules/web3-net": { + "version": "1.10.3", + "resolved": "https://registry.npmjs.org/web3-net/-/web3-net-1.10.3.tgz", + "integrity": "sha512-IoSr33235qVoI1vtKssPUigJU9Fc/Ph0T9CgRi15sx+itysmvtlmXMNoyd6Xrgm9LuM4CIhxz7yDzH93B79IFg==", "dependencies": { - "debug": "2.6.9", - "depd": "~1.1.2", - "destroy": "~1.0.4", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "etag": "~1.8.1", - "fresh": "0.5.2", - "http-errors": "~1.7.2", - "mime": "1.6.0", - "ms": "2.1.1", - "on-finished": "~2.3.0", - "range-parser": "~1.2.1", - "statuses": "~1.5.0" + "web3-core": "1.10.3", + "web3-core-method": "1.10.3", + "web3-utils": "1.10.3" }, "engines": { - "node": ">= 0.8.0" + "node": ">=8.0.0" } }, - "node_modules/ganache-core/node_modules/send/node_modules/debug": { - "version": "2.6.9", - "license": "MIT", - "optional": true, + "node_modules/web3-providers-http": { + "version": "1.10.3", + "resolved": "https://registry.npmjs.org/web3-providers-http/-/web3-providers-http-1.10.3.tgz", + "integrity": "sha512-6dAgsHR3MxJ0Qyu3QLFlQEelTapVfWNTu5F45FYh8t7Y03T1/o+YAkVxsbY5AdmD+y5bXG/XPJ4q8tjL6MgZHw==", "dependencies": { - "ms": "2.0.0" + "abortcontroller-polyfill": "^1.7.5", + "cross-fetch": "^4.0.0", + "es6-promise": "^4.2.8", + "web3-core-helpers": "1.10.3" + }, + "engines": { + "node": ">=8.0.0" } }, - "node_modules/ganache-core/node_modules/send/node_modules/debug/node_modules/ms": { - "version": "2.0.0", - "license": "MIT", - "optional": true - }, - "node_modules/ganache-core/node_modules/send/node_modules/ms": { - "version": "2.1.1", - "license": "MIT", - "optional": true - }, - "node_modules/ganache-core/node_modules/serve-static": { - "version": "1.14.1", - "license": "MIT", - "optional": true, + "node_modules/web3-providers-ipc": { + "version": "1.10.3", + "resolved": "https://registry.npmjs.org/web3-providers-ipc/-/web3-providers-ipc-1.10.3.tgz", + "integrity": "sha512-vP5WIGT8FLnGRfswTxNs9rMfS1vCbMezj/zHbBe/zB9GauBRTYVrUo2H/hVrhLg8Ut7AbsKZ+tCJ4mAwpKi2hA==", "dependencies": { - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "parseurl": "~1.3.3", - "send": "0.17.1" + "oboe": "2.1.5", + "web3-core-helpers": "1.10.3" }, "engines": { - "node": ">= 0.8.0" + "node": ">=8.0.0" } }, - "node_modules/ganache-core/node_modules/servify": { - "version": "0.1.12", - "license": "MIT", - "optional": true, + "node_modules/web3-providers-ws": { + "version": "1.10.3", + "resolved": "https://registry.npmjs.org/web3-providers-ws/-/web3-providers-ws-1.10.3.tgz", + "integrity": "sha512-/filBXRl48INxsh6AuCcsy4v5ndnTZ/p6bl67kmO9aK1wffv7CT++DrtclDtVMeDGCgB3van+hEf9xTAVXur7Q==", "dependencies": { - "body-parser": "^1.16.0", - "cors": "^2.8.1", - "express": "^4.14.0", - "request": "^2.79.0", - "xhr": "^2.3.3" + "eventemitter3": "4.0.4", + "web3-core-helpers": "1.10.3", + "websocket": "^1.0.32" }, "engines": { - "node": ">=6" + "node": ">=8.0.0" } }, - "node_modules/ganache-core/node_modules/set-immediate-shim": { - "version": "1.0.1", - "license": "MIT", + "node_modules/web3-rpc-methods": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/web3-rpc-methods/-/web3-rpc-methods-1.1.4.tgz", + "integrity": "sha512-LTFNg4LFaeU8K9ecuT8fHDp/LOXyxCneeZjCrRYIW1u82Ly52SrY55FIzMIISGoG/iT5Wh7UiHOB3CQsWLBmbQ==", + "dependencies": { + "web3-core": "^4.3.2", + "web3-types": "^1.3.1", + "web3-validator": "^2.0.3" + }, "engines": { - "node": ">=0.10.0" + "node": ">=14", + "npm": ">=6.12.0" } }, - "node_modules/ganache-core/node_modules/set-value": { - "version": "2.0.1", - "license": "MIT", - "dependencies": { - "extend-shallow": "^2.0.1", - "is-extendable": "^0.1.1", - "is-plain-object": "^2.0.3", - "split-string": "^3.0.1" + "node_modules/web3-rpc-methods/node_modules/@ethereumjs/rlp": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@ethereumjs/rlp/-/rlp-4.0.1.tgz", + "integrity": "sha512-tqsQiBQDQdmPWE1xkkBq4rlSW5QZpLOUJ5RJh2/9fug+q9tnUhuZoVLk7s0scUIKTOzEtR72DFBXI4WiZcMpvw==", + "bin": { + "rlp": "bin/rlp" }, "engines": { - "node": ">=0.10.0" + "node": ">=14" } }, - "node_modules/ganache-core/node_modules/set-value/node_modules/extend-shallow": { - "version": "2.0.1", - "license": "MIT", + "node_modules/web3-rpc-methods/node_modules/web3-core": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/web3-core/-/web3-core-4.3.2.tgz", + "integrity": "sha512-uIMVd/j4BgOnwfpY8ZT+QKubOyM4xohEhFZXz9xB8wimXWMMlYVlIK/TbfHqFolS9uOerdSGhsMbcK9lETae8g==", "dependencies": { - "is-extendable": "^0.1.0" + "web3-errors": "^1.1.4", + "web3-eth-accounts": "^4.1.0", + "web3-eth-iban": "^4.0.7", + "web3-providers-http": "^4.1.0", + "web3-providers-ws": "^4.0.7", + "web3-types": "^1.3.1", + "web3-utils": "^4.1.0", + "web3-validator": "^2.0.3" }, "engines": { - "node": ">=0.10.0" + "node": ">=14", + "npm": ">=6.12.0" + }, + "optionalDependencies": { + "web3-providers-ipc": "^4.0.7" } }, - "node_modules/ganache-core/node_modules/set-value/node_modules/is-extendable": { - "version": "0.1.1", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/ganache-core/node_modules/setimmediate": { - "version": "1.0.5", - "license": "MIT" - }, - "node_modules/ganache-core/node_modules/setprototypeof": { - "version": "1.1.1", - "license": "ISC", - "optional": true - }, - "node_modules/ganache-core/node_modules/sha.js": { - "version": "2.4.11", - "license": "(MIT AND BSD-3-Clause)", + "node_modules/web3-rpc-methods/node_modules/web3-eth-accounts": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/web3-eth-accounts/-/web3-eth-accounts-4.1.0.tgz", + "integrity": "sha512-UFtAsOANsvihTQ6SSvOKguupmQkResyR9M9JNuOxYpKh7+3W+sTnbLXw2UbOSYIsKlc1mpqqW9bVr1SjqHDpUQ==", "dependencies": { - "inherits": "^2.0.1", - "safe-buffer": "^5.0.1" + "@ethereumjs/rlp": "^4.0.1", + "crc-32": "^1.2.2", + "ethereum-cryptography": "^2.0.0", + "web3-errors": "^1.1.3", + "web3-types": "^1.3.0", + "web3-utils": "^4.0.7", + "web3-validator": "^2.0.3" }, - "bin": { - "sha.js": "bin.js" - } - }, - "node_modules/ganache-core/node_modules/simple-concat": { - "version": "1.0.1", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "license": "MIT", - "optional": true - }, - "node_modules/ganache-core/node_modules/simple-get": { - "version": "2.8.1", - "license": "MIT", - "optional": true, - "dependencies": { - "decompress-response": "^3.3.0", - "once": "^1.3.1", - "simple-concat": "^1.0.0" + "engines": { + "node": ">=14", + "npm": ">=6.12.0" } }, - "node_modules/ganache-core/node_modules/snapdragon": { - "version": "0.8.2", - "license": "MIT", + "node_modules/web3-rpc-methods/node_modules/web3-eth-iban": { + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/web3-eth-iban/-/web3-eth-iban-4.0.7.tgz", + "integrity": "sha512-8weKLa9KuKRzibC87vNLdkinpUE30gn0IGY027F8doeJdcPUfsa4IlBgNC4k4HLBembBB2CTU0Kr/HAOqMeYVQ==", "dependencies": { - "base": "^0.11.1", - "debug": "^2.2.0", - "define-property": "^0.2.5", - "extend-shallow": "^2.0.1", - "map-cache": "^0.2.2", - "source-map": "^0.5.6", - "source-map-resolve": "^0.5.0", - "use": "^3.1.0" + "web3-errors": "^1.1.3", + "web3-types": "^1.3.0", + "web3-utils": "^4.0.7", + "web3-validator": "^2.0.3" }, "engines": { - "node": ">=0.10.0" + "node": ">=14", + "npm": ">=6.12.0" } }, - "node_modules/ganache-core/node_modules/snapdragon-node": { - "version": "2.1.1", - "license": "MIT", + "node_modules/web3-rpc-methods/node_modules/web3-providers-http": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/web3-providers-http/-/web3-providers-http-4.1.0.tgz", + "integrity": "sha512-6qRUGAhJfVQM41E5t+re5IHYmb5hSaLc02BE2MaRQsz2xKA6RjmHpOA5h/+ojJxEpI9NI2CrfDKOAgtJfoUJQg==", "dependencies": { - "define-property": "^1.0.0", - "isobject": "^3.0.0", - "snapdragon-util": "^3.0.1" + "cross-fetch": "^4.0.0", + "web3-errors": "^1.1.3", + "web3-types": "^1.3.0", + "web3-utils": "^4.0.7" }, "engines": { - "node": ">=0.10.0" + "node": ">=14", + "npm": ">=6.12.0" } }, - "node_modules/ganache-core/node_modules/snapdragon-node/node_modules/define-property": { - "version": "1.0.0", - "license": "MIT", + "node_modules/web3-rpc-methods/node_modules/web3-providers-ipc": { + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/web3-providers-ipc/-/web3-providers-ipc-4.0.7.tgz", + "integrity": "sha512-YbNqY4zUvIaK2MHr1lQFE53/8t/ejHtJchrWn9zVbFMGXlTsOAbNoIoZWROrg1v+hCBvT2c9z8xt7e/+uz5p1g==", + "optional": true, "dependencies": { - "is-descriptor": "^1.0.0" + "web3-errors": "^1.1.3", + "web3-types": "^1.3.0", + "web3-utils": "^4.0.7" }, "engines": { - "node": ">=0.10.0" + "node": ">=14", + "npm": ">=6.12.0" } }, - "node_modules/ganache-core/node_modules/snapdragon-util": { - "version": "3.0.1", - "license": "MIT", + "node_modules/web3-rpc-methods/node_modules/web3-providers-ws": { + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/web3-providers-ws/-/web3-providers-ws-4.0.7.tgz", + "integrity": "sha512-n4Dal9/rQWjS7d6LjyEPM2R458V8blRm0eLJupDEJOOIBhGYlxw5/4FthZZ/cqB7y/sLVi7K09DdYx2MeRtU5w==", "dependencies": { - "kind-of": "^3.2.0" + "@types/ws": "8.5.3", + "isomorphic-ws": "^5.0.0", + "web3-errors": "^1.1.3", + "web3-types": "^1.3.0", + "web3-utils": "^4.0.7", + "ws": "^8.8.1" }, "engines": { - "node": ">=0.10.0" + "node": ">=14", + "npm": ">=6.12.0" } }, - "node_modules/ganache-core/node_modules/snapdragon-util/node_modules/is-buffer": { - "version": "1.1.6", - "license": "MIT" - }, - "node_modules/ganache-core/node_modules/snapdragon-util/node_modules/kind-of": { - "version": "3.2.2", - "license": "MIT", + "node_modules/web3-rpc-methods/node_modules/web3-utils": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/web3-utils/-/web3-utils-4.1.0.tgz", + "integrity": "sha512-+VJWR6FtCsgwuJr5tvSvQlSEG06586df8h2CxGc9tcNtIDyJKNkSDDWJkdNPvyDhhXFzQYFh8QOGymD1CIP6fw==", "dependencies": { - "is-buffer": "^1.1.5" + "ethereum-cryptography": "^2.0.0", + "web3-errors": "^1.1.4", + "web3-types": "^1.3.1", + "web3-validator": "^2.0.3" }, "engines": { - "node": ">=0.10.0" + "node": ">=14", + "npm": ">=6.12.0" } }, - "node_modules/ganache-core/node_modules/snapdragon/node_modules/debug": { - "version": "2.6.9", - "license": "MIT", - "dependencies": { - "ms": "2.0.0" + "node_modules/web3-rpc-methods/node_modules/ws": { + "version": "8.16.0", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.16.0.tgz", + "integrity": "sha512-HS0c//TP7Ina87TfiPUz1rQzMhHrl/SG2guqRcTOIUYD2q8uhUdNHZYJUaQ8aTGPzCh+c6oawMKW35nFl1dxyQ==", + "engines": { + "node": ">=10.0.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": ">=5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } } }, - "node_modules/ganache-core/node_modules/snapdragon/node_modules/define-property": { - "version": "0.2.5", - "license": "MIT", + "node_modules/web3-shh": { + "version": "1.10.3", + "resolved": "https://registry.npmjs.org/web3-shh/-/web3-shh-1.10.3.tgz", + "integrity": "sha512-cAZ60CPvs9azdwMSQ/PSUdyV4PEtaW5edAZhu3rCXf6XxQRliBboic+AvwUvB6j3eswY50VGa5FygfVmJ1JVng==", + "hasInstallScript": true, "dependencies": { - "is-descriptor": "^0.1.0" + "web3-core": "1.10.3", + "web3-core-method": "1.10.3", + "web3-core-subscriptions": "1.10.3", + "web3-net": "1.10.3" }, "engines": { - "node": ">=0.10.0" + "node": ">=8.0.0" } }, - "node_modules/ganache-core/node_modules/snapdragon/node_modules/extend-shallow": { - "version": "2.0.1", - "license": "MIT", - "dependencies": { - "is-extendable": "^0.1.0" - }, + "node_modules/web3-types": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/web3-types/-/web3-types-1.3.1.tgz", + "integrity": "sha512-8fXi7h/t95VKRtgU4sxprLPZpsTh3jYDfSghshIDBgUD/OoGe5S+syP24SUzBZYllZ/L+hMr2gdp/0bGJa8pYQ==", "engines": { - "node": ">=0.10.0" + "node": ">=14", + "npm": ">=6.12.0" } }, - "node_modules/ganache-core/node_modules/snapdragon/node_modules/is-accessor-descriptor": { - "version": "0.1.6", - "license": "MIT", + "node_modules/web3-utils": { + "version": "1.10.3", + "resolved": "https://registry.npmjs.org/web3-utils/-/web3-utils-1.10.3.tgz", + "integrity": "sha512-OqcUrEE16fDBbGoQtZXWdavsPzbGIDc5v3VrRTZ0XrIpefC/viZ1ZU9bGEemazyS0catk/3rkOOxpzTfY+XsyQ==", "dependencies": { - "kind-of": "^3.0.2" + "@ethereumjs/util": "^8.1.0", + "bn.js": "^5.2.1", + "ethereum-bloom-filters": "^1.0.6", + "ethereum-cryptography": "^2.1.2", + "ethjs-unit": "0.1.6", + "number-to-bn": "1.7.0", + "randombytes": "^2.1.0", + "utf8": "3.0.0" }, "engines": { - "node": ">=0.10.0" + "node": ">=8.0.0" } }, - "node_modules/ganache-core/node_modules/snapdragon/node_modules/is-accessor-descriptor/node_modules/kind-of": { - "version": "3.2.2", - "license": "MIT", - "dependencies": { - "is-buffer": "^1.1.5" + "node_modules/web3-utils/node_modules/@ethereumjs/rlp": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@ethereumjs/rlp/-/rlp-4.0.1.tgz", + "integrity": "sha512-tqsQiBQDQdmPWE1xkkBq4rlSW5QZpLOUJ5RJh2/9fug+q9tnUhuZoVLk7s0scUIKTOzEtR72DFBXI4WiZcMpvw==", + "bin": { + "rlp": "bin/rlp" }, "engines": { - "node": ">=0.10.0" + "node": ">=14" } }, - "node_modules/ganache-core/node_modules/snapdragon/node_modules/is-buffer": { - "version": "1.1.6", - "license": "MIT" - }, - "node_modules/ganache-core/node_modules/snapdragon/node_modules/is-data-descriptor": { - "version": "0.1.4", - "license": "MIT", + "node_modules/web3-utils/node_modules/@ethereumjs/util": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/@ethereumjs/util/-/util-8.1.0.tgz", + "integrity": "sha512-zQ0IqbdX8FZ9aw11vP+dZkKDkS+kgIvQPHnSAXzP9pLu+Rfu3D3XEeLbicvoXJTYnhZiPmsZUxgdzXwNKxRPbA==", "dependencies": { - "kind-of": "^3.0.2" + "@ethereumjs/rlp": "^4.0.1", + "ethereum-cryptography": "^2.0.0", + "micro-ftch": "^0.3.1" }, "engines": { - "node": ">=0.10.0" + "node": ">=14" } }, - "node_modules/ganache-core/node_modules/snapdragon/node_modules/is-data-descriptor/node_modules/kind-of": { - "version": "3.2.2", - "license": "MIT", + "node_modules/web3-validator": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/web3-validator/-/web3-validator-2.0.3.tgz", + "integrity": "sha512-fJbAQh+9LSNWy+l5Ze6HABreml8fra98o5+vS073T35jUcLbRZ0IOjF/ZPJhJNbJDt+jP1vseZsc3z3uX9mxxQ==", "dependencies": { - "is-buffer": "^1.1.5" + "ethereum-cryptography": "^2.0.0", + "util": "^0.12.5", + "web3-errors": "^1.1.3", + "web3-types": "^1.3.0", + "zod": "^3.21.4" }, "engines": { - "node": ">=0.10.0" + "node": ">=14", + "npm": ">=6.12.0" } }, - "node_modules/ganache-core/node_modules/snapdragon/node_modules/is-descriptor": { - "version": "0.1.6", - "license": "MIT", + "node_modules/webidl-conversions": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", + "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==" + }, + "node_modules/websocket": { + "version": "1.0.34", + "resolved": "https://registry.npmjs.org/websocket/-/websocket-1.0.34.tgz", + "integrity": "sha512-PRDso2sGwF6kM75QykIesBijKSVceR6jL2G8NGYyq2XrItNC2P5/qL5XeR056GhA+Ly7JMFvJb9I312mJfmqnQ==", "dependencies": { - "is-accessor-descriptor": "^0.1.6", - "is-data-descriptor": "^0.1.4", - "kind-of": "^5.0.0" + "bufferutil": "^4.0.1", + "debug": "^2.2.0", + "es5-ext": "^0.10.50", + "typedarray-to-buffer": "^3.1.5", + "utf-8-validate": "^5.0.2", + "yaeti": "^0.0.6" }, "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/ganache-core/node_modules/snapdragon/node_modules/is-extendable": { - "version": "0.1.1", - "license": "MIT", - "engines": { - "node": ">=0.10.0" + "node": ">=4.0.0" } }, - "node_modules/ganache-core/node_modules/snapdragon/node_modules/kind-of": { - "version": "5.1.0", - "license": "MIT", - "engines": { - "node": ">=0.10.0" + "node_modules/websocket/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dependencies": { + "ms": "2.0.0" } }, - "node_modules/ganache-core/node_modules/snapdragon/node_modules/ms": { + "node_modules/websocket/node_modules/ms": { "version": "2.0.0", - "license": "MIT" - }, - "node_modules/ganache-core/node_modules/source-map": { - "version": "0.5.7", - "license": "BSD-3-Clause", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/ganache-core/node_modules/source-map-resolve": { - "version": "0.5.3", - "license": "MIT", - "dependencies": { - "atob": "^2.1.2", - "decode-uri-component": "^0.2.0", - "resolve-url": "^0.2.1", - "source-map-url": "^0.4.0", - "urix": "^0.1.0" - } + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" }, - "node_modules/ganache-core/node_modules/source-map-support": { - "version": "0.5.12", - "license": "MIT", + "node_modules/whatwg-url": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", + "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", "dependencies": { - "buffer-from": "^1.0.0", - "source-map": "^0.6.0" - } - }, - "node_modules/ganache-core/node_modules/source-map-support/node_modules/source-map": { - "version": "0.6.1", - "license": "BSD-3-Clause", - "engines": { - "node": ">=0.10.0" + "tr46": "~0.0.3", + "webidl-conversions": "^3.0.0" } }, - "node_modules/ganache-core/node_modules/source-map-url": { - "version": "0.4.0", - "license": "MIT" - }, - "node_modules/ganache-core/node_modules/split-string": { - "version": "3.1.0", - "license": "MIT", + "node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "peer": true, "dependencies": { - "extend-shallow": "^3.0.0" + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" }, "engines": { - "node": ">=0.10.0" + "node": ">= 8" } }, - "node_modules/ganache-core/node_modules/sshpk": { - "version": "1.16.1", - "license": "MIT", + "node_modules/which-boxed-primitive": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz", + "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==", + "dev": true, "dependencies": { - "asn1": "~0.2.3", - "assert-plus": "^1.0.0", - "bcrypt-pbkdf": "^1.0.0", - "dashdash": "^1.12.0", - "ecc-jsbn": "~0.1.1", - "getpass": "^0.1.1", - "jsbn": "~0.1.0", - "safer-buffer": "^2.0.2", - "tweetnacl": "~0.14.0" + "is-bigint": "^1.0.1", + "is-boolean-object": "^1.1.0", + "is-number-object": "^1.0.4", + "is-string": "^1.0.5", + "is-symbol": "^1.0.3" }, - "engines": { - "node": ">=0.10.0" + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/ganache-core/node_modules/sshpk/node_modules/tweetnacl": { - "version": "0.14.5", - "license": "Unlicense" + "node_modules/which-module": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/which-module/-/which-module-1.0.0.tgz", + "integrity": "sha512-F6+WgncZi/mJDrammbTuHe1q0R5hOXv/mBaiNA2TCNT/LTHusX0V+CJnj9XT8ki5ln2UZyyddDgHfCzyrOH7MQ==" }, - "node_modules/ganache-core/node_modules/static-extend": { - "version": "0.1.2", - "license": "MIT", - "dependencies": { - "define-property": "^0.2.5", - "object-copy": "^0.1.0" - }, + "node_modules/which-pm-runs": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/which-pm-runs/-/which-pm-runs-1.1.0.tgz", + "integrity": "sha512-n1brCuqClxfFfq/Rb0ICg9giSZqCS+pLtccdag6C2HyufBrh3fBOiy9nb6ggRMvWOVH5GrdJskj5iGTZNxd7SA==", + "optional": true, "engines": { - "node": ">=0.10.0" + "node": ">=4" } }, - "node_modules/ganache-core/node_modules/static-extend/node_modules/define-property": { - "version": "0.2.5", - "license": "MIT", + "node_modules/which-typed-array": { + "version": "1.1.13", + "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.13.tgz", + "integrity": "sha512-P5Nra0qjSncduVPEAr7xhoF5guty49ArDTwzJ/yNuPIbZppyRxFQsRCWrocxIY+CnMVG+qfbU2FmDKyvSGClow==", "dependencies": { - "is-descriptor": "^0.1.0" + "available-typed-arrays": "^1.0.5", + "call-bind": "^1.0.4", + "for-each": "^0.3.3", + "gopd": "^1.0.1", + "has-tostringtag": "^1.0.0" }, "engines": { - "node": ">=0.10.0" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/ganache-core/node_modules/static-extend/node_modules/is-accessor-descriptor": { - "version": "0.1.6", - "license": "MIT", + "node_modules/wide-align": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.5.tgz", + "integrity": "sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg==", + "optional": true, "dependencies": { - "kind-of": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" + "string-width": "^1.0.2 || 2 || 3 || 4" } }, - "node_modules/ganache-core/node_modules/static-extend/node_modules/is-accessor-descriptor/node_modules/kind-of": { - "version": "3.2.2", - "license": "MIT", - "dependencies": { - "is-buffer": "^1.1.5" + "node_modules/window-size": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/window-size/-/window-size-0.2.0.tgz", + "integrity": "sha512-UD7d8HFA2+PZsbKyaOCEy8gMh1oDtHgJh1LfgjQ4zVXmYjAT/kvz3PueITKuqDiIXQe7yzpPnxX3lNc+AhQMyw==", + "bin": { + "window-size": "cli.js" }, "engines": { - "node": ">=0.10.0" + "node": ">= 0.10.0" } }, - "node_modules/ganache-core/node_modules/static-extend/node_modules/is-buffer": { - "version": "1.1.6", - "license": "MIT" + "node_modules/workerpool": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/workerpool/-/workerpool-6.2.1.tgz", + "integrity": "sha512-ILEIE97kDZvF9Wb9f6h5aXK4swSlKGUcOEGiIYb2OOu/IrDU9iwj0fD//SsA6E5ibwJxpEvhullJY4Sl4GcpAw==" }, - "node_modules/ganache-core/node_modules/static-extend/node_modules/is-data-descriptor": { - "version": "0.1.4", - "license": "MIT", + "node_modules/wrap-ansi": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", + "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", + "peer": true, "dependencies": { - "kind-of": "^3.0.2" + "ansi-styles": "^6.1.0", + "string-width": "^5.0.1", + "strip-ansi": "^7.0.1" }, "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/ganache-core/node_modules/static-extend/node_modules/is-data-descriptor/node_modules/kind-of": { - "version": "3.2.2", - "license": "MIT", - "dependencies": { - "is-buffer": "^1.1.5" + "node": ">=12" }, - "engines": { - "node": ">=0.10.0" + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" } }, - "node_modules/ganache-core/node_modules/static-extend/node_modules/is-descriptor": { - "version": "0.1.6", - "license": "MIT", + "node_modules/wrap-ansi-cjs": { + "name": "wrap-ansi", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "peer": true, "dependencies": { - "is-accessor-descriptor": "^0.1.6", - "is-data-descriptor": "^0.1.4", - "kind-of": "^5.0.0" + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" }, "engines": { - "node": ">=0.10.0" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" } }, - "node_modules/ganache-core/node_modules/static-extend/node_modules/kind-of": { - "version": "5.1.0", - "license": "MIT", + "node_modules/wrap-ansi-cjs/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "peer": true, "engines": { - "node": ">=0.10.0" + "node": ">=8" } }, - "node_modules/ganache-core/node_modules/statuses": { - "version": "1.5.0", - "license": "MIT", - "optional": true, + "node_modules/wrap-ansi-cjs/node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "peer": true, + "dependencies": { + "ansi-regex": "^5.0.1" + }, "engines": { - "node": ">= 0.6" + "node": ">=8" } }, - "node_modules/ganache-core/node_modules/stream-to-pull-stream": { - "version": "1.7.3", - "license": "MIT", - "dependencies": { - "looper": "^3.0.0", - "pull-stream": "^3.2.3" + "node_modules/wrap-ansi/node_modules/ansi-regex": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", + "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", + "peer": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" } }, - "node_modules/ganache-core/node_modules/stream-to-pull-stream/node_modules/looper": { - "version": "3.0.0", - "license": "MIT" - }, - "node_modules/ganache-core/node_modules/strict-uri-encode": { - "version": "1.1.0", - "license": "MIT", - "optional": true, + "node_modules/wrap-ansi/node_modules/ansi-styles": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", + "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", + "peer": true, "engines": { - "node": ">=0.10.0" + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/ganache-core/node_modules/string_decoder": { - "version": "1.1.1", - "license": "MIT", - "dependencies": { - "safe-buffer": "~5.1.0" - } + "node_modules/wrap-ansi/node_modules/emoji-regex": { + "version": "9.2.2", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", + "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", + "peer": true }, - "node_modules/ganache-core/node_modules/string_decoder/node_modules/safe-buffer": { + "node_modules/wrap-ansi/node_modules/string-width": { "version": "5.1.2", - "license": "MIT" - }, - "node_modules/ganache-core/node_modules/string.prototype.trim": { - "version": "1.2.3", - "license": "MIT", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", + "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", + "peer": true, "dependencies": { - "call-bind": "^1.0.0", - "define-properties": "^1.1.3", - "es-abstract": "^1.18.0-next.1" + "eastasianwidth": "^0.2.0", + "emoji-regex": "^9.2.2", + "strip-ansi": "^7.0.1" }, "engines": { - "node": ">= 0.4" + "node": ">=12" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/ganache-core/node_modules/string.prototype.trimend": { - "version": "1.0.3", - "license": "MIT", + "node_modules/wrap-ansi/node_modules/strip-ansi": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", + "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", + "peer": true, "dependencies": { - "call-bind": "^1.0.0", - "define-properties": "^1.1.3" + "ansi-regex": "^6.0.1" + }, + "engines": { + "node": ">=12" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "url": "https://github.com/chalk/strip-ansi?sponsor=1" } }, - "node_modules/ganache-core/node_modules/string.prototype.trimstart": { - "version": "1.0.3", - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.0", - "define-properties": "^1.1.3" + "node_modules/wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==" + }, + "node_modules/ws": { + "version": "8.5.0", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.5.0.tgz", + "integrity": "sha512-BWX0SWVgLPzYwF8lTzEy1egjhS4S4OEAHfsO8o65WOVsrnSRGaSiUaa9e0ggGlkMTtBlmOpEXiie9RUcBO86qg==", + "engines": { + "node": ">=10.0.0" }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": "^5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } } }, - "node_modules/ganache-core/node_modules/strip-hex-prefix": { - "version": "1.0.0", - "license": "MIT", + "node_modules/xhr": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/xhr/-/xhr-2.6.0.tgz", + "integrity": "sha512-/eCGLb5rxjx5e3mF1A7s+pLlR6CGyqWN91fv1JgER5mVWg1MZmlhBvy9kjcsOdRk8RrIujotWyJamfyrp+WIcA==", "dependencies": { - "is-hex-prefixed": "1.0.0" - }, - "engines": { - "node": ">=6.5.0", - "npm": ">=3" + "global": "~4.4.0", + "is-function": "^1.0.1", + "parse-headers": "^2.0.0", + "xtend": "^4.0.0" } }, - "node_modules/ganache-core/node_modules/supports-color": { - "version": "5.5.0", - "license": "MIT", + "node_modules/xhr-request": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/xhr-request/-/xhr-request-1.1.0.tgz", + "integrity": "sha512-Y7qzEaR3FDtL3fP30k9wO/e+FBnBByZeybKOhASsGP30NIkRAAkKD/sCnLvgEfAIEC1rcmK7YG8f4oEnIrrWzA==", "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=4" + "buffer-to-arraybuffer": "^0.0.5", + "object-assign": "^4.1.1", + "query-string": "^5.0.1", + "simple-get": "^2.7.0", + "timed-out": "^4.0.1", + "url-set-query": "^1.0.0", + "xhr": "^2.0.4" } }, - "node_modules/ganache-core/node_modules/swarm-js": { - "version": "0.1.40", - "license": "MIT", - "optional": true, + "node_modules/xhr-request-promise": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/xhr-request-promise/-/xhr-request-promise-0.1.3.tgz", + "integrity": "sha512-YUBytBsuwgitWtdRzXDDkWAXzhdGB8bYm0sSzMPZT7Z2MBjMSTHFsyCT1yCRATY+XC69DUrQraRAEgcoCRaIPg==", "dependencies": { - "bluebird": "^3.5.0", - "buffer": "^5.0.5", - "eth-lib": "^0.1.26", - "fs-extra": "^4.0.2", - "got": "^7.1.0", - "mime-types": "^2.1.16", - "mkdirp-promise": "^5.0.1", - "mock-fs": "^4.1.0", - "setimmediate": "^1.0.5", - "tar": "^4.0.2", - "xhr-request": "^1.0.1" + "xhr-request": "^1.1.0" } }, - "node_modules/ganache-core/node_modules/swarm-js/node_modules/fs-extra": { - "version": "4.0.3", - "license": "MIT", - "optional": true, + "node_modules/xhr-request/node_modules/decompress-response": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-3.3.0.tgz", + "integrity": "sha512-BzRPQuY1ip+qDonAOz42gRm/pg9F768C+npV/4JOsxRC2sq+Rlk+Q4ZCAsOhnIaMrgarILY+RMUIvMmmX1qAEA==", "dependencies": { - "graceful-fs": "^4.1.2", - "jsonfile": "^4.0.0", - "universalify": "^0.1.0" + "mimic-response": "^1.0.0" + }, + "engines": { + "node": ">=4" } }, - "node_modules/ganache-core/node_modules/swarm-js/node_modules/get-stream": { - "version": "3.0.0", - "license": "MIT", - "optional": true, + "node_modules/xhr-request/node_modules/mimic-response": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz", + "integrity": "sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==", "engines": { "node": ">=4" } }, - "node_modules/ganache-core/node_modules/swarm-js/node_modules/got": { - "version": "7.1.0", - "license": "MIT", - "optional": true, + "node_modules/xhr-request/node_modules/simple-get": { + "version": "2.8.2", + "resolved": "https://registry.npmjs.org/simple-get/-/simple-get-2.8.2.tgz", + "integrity": "sha512-Ijd/rV5o+mSBBs4F/x9oDPtTx9Zb6X9brmnXvMW4J7IR15ngi9q5xxqWBKU744jTZiaXtxaPL7uHG6vtN8kUkw==", "dependencies": { - "decompress-response": "^3.2.0", - "duplexer3": "^0.1.4", - "get-stream": "^3.0.0", - "is-plain-obj": "^1.1.0", - "is-retry-allowed": "^1.0.0", - "is-stream": "^1.0.0", - "isurl": "^1.0.0-alpha5", - "lowercase-keys": "^1.0.0", - "p-cancelable": "^0.3.0", - "p-timeout": "^1.1.1", - "safe-buffer": "^5.0.1", - "timed-out": "^4.0.0", - "url-parse-lax": "^1.0.0", - "url-to-options": "^1.0.1" - }, - "engines": { - "node": ">=4" + "decompress-response": "^3.3.0", + "once": "^1.3.1", + "simple-concat": "^1.0.0" } }, - "node_modules/ganache-core/node_modules/swarm-js/node_modules/is-stream": { - "version": "1.1.0", - "license": "MIT", - "optional": true, + "node_modules/xmlhttprequest": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/xmlhttprequest/-/xmlhttprequest-1.8.0.tgz", + "integrity": "sha512-58Im/U0mlVBLM38NdZjHyhuMtCqa61469k2YP/AaPbvCoV9aQGUpbJBj1QRm2ytRiVQBD/fsw7L2bJGDVQswBA==", "engines": { - "node": ">=0.10.0" + "node": ">=0.4.0" } }, - "node_modules/ganache-core/node_modules/swarm-js/node_modules/p-cancelable": { - "version": "0.3.0", - "license": "MIT", - "optional": true, + "node_modules/xtend": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", + "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", "engines": { - "node": ">=4" + "node": ">=0.4" } }, - "node_modules/ganache-core/node_modules/swarm-js/node_modules/prepend-http": { - "version": "1.0.4", - "license": "MIT", - "optional": true, + "node_modules/y18n": { + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", "engines": { - "node": ">=0.10.0" + "node": ">=10" } }, - "node_modules/ganache-core/node_modules/swarm-js/node_modules/url-parse-lax": { - "version": "1.0.0", - "license": "MIT", - "optional": true, - "dependencies": { - "prepend-http": "^1.0.1" - }, + "node_modules/yaeti": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/yaeti/-/yaeti-0.0.6.tgz", + "integrity": "sha512-MvQa//+KcZCUkBTIC9blM+CU9J2GzuTytsOUwf2lidtvkx/6gnEp1QvJv34t9vdjhFmha/mUiNDbN0D0mJWdug==", "engines": { - "node": ">=0.10.0" + "node": ">=0.10.32" } }, - "node_modules/ganache-core/node_modules/tape": { - "version": "4.13.3", - "license": "MIT", - "dependencies": { - "deep-equal": "~1.1.1", - "defined": "~1.0.0", - "dotignore": "~0.1.2", - "for-each": "~0.3.3", - "function-bind": "~1.1.1", - "glob": "~7.1.6", - "has": "~1.0.3", - "inherits": "~2.0.4", - "is-regex": "~1.0.5", - "minimist": "~1.2.5", - "object-inspect": "~1.7.0", - "resolve": "~1.17.0", - "resumer": "~0.0.0", - "string.prototype.trim": "~1.2.1", - "through": "~2.3.8" - }, - "bin": { - "tape": "bin/tape" - } + "node_modules/yallist": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==" }, - "node_modules/ganache-core/node_modules/tape/node_modules/glob": { - "version": "7.1.6", - "license": "ISC", - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, + "node_modules/yaml": { + "version": "1.10.2", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz", + "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==", "engines": { - "node": "*" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" + "node": ">= 6" } }, - "node_modules/ganache-core/node_modules/tape/node_modules/is-regex": { - "version": "1.0.5", - "license": "MIT", + "node_modules/yargs": { + "version": "16.2.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", + "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", "dependencies": { - "has": "^1.0.3" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/ganache-core/node_modules/tape/node_modules/object-inspect": { - "version": "1.7.0", - "license": "MIT", - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/ganache-core/node_modules/tape/node_modules/resolve": { - "version": "1.17.0", - "license": "MIT", - "dependencies": { - "path-parse": "^1.0.6" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/ganache-core/node_modules/tar": { - "version": "4.4.13", - "license": "ISC", - "optional": true, - "dependencies": { - "chownr": "^1.1.1", - "fs-minipass": "^1.2.5", - "minipass": "^2.8.6", - "minizlib": "^1.2.1", - "mkdirp": "^0.5.0", - "safe-buffer": "^5.1.2", - "yallist": "^3.0.3" - }, - "engines": { - "node": ">=4.5" - } - }, - "node_modules/ganache-core/node_modules/tar/node_modules/fs-minipass": { - "version": "1.2.7", - "license": "ISC", - "optional": true, - "dependencies": { - "minipass": "^2.6.0" - } - }, - "node_modules/ganache-core/node_modules/tar/node_modules/minipass": { - "version": "2.9.0", - "license": "ISC", - "optional": true, - "dependencies": { - "safe-buffer": "^5.1.2", - "yallist": "^3.0.0" - } - }, - "node_modules/ganache-core/node_modules/through": { - "version": "2.3.8", - "license": "MIT" - }, - "node_modules/ganache-core/node_modules/through2": { - "version": "2.0.5", - "license": "MIT", - "dependencies": { - "readable-stream": "~2.3.6", - "xtend": "~4.0.1" - } - }, - "node_modules/ganache-core/node_modules/timed-out": { - "version": "4.0.1", - "license": "MIT", - "optional": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/ganache-core/node_modules/tmp": { - "version": "0.1.0", - "license": "MIT", - "dependencies": { - "rimraf": "^2.6.3" + "cliui": "^7.0.2", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.0", + "y18n": "^5.0.5", + "yargs-parser": "^20.2.2" }, "engines": { - "node": ">=6" + "node": ">=10" } }, - "node_modules/ganache-core/node_modules/to-object-path": { - "version": "0.3.0", - "license": "MIT", - "dependencies": { - "kind-of": "^3.0.2" - }, + "node_modules/yargs-parser": { + "version": "20.2.4", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.4.tgz", + "integrity": "sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA==", "engines": { - "node": ">=0.10.0" + "node": ">=10" } }, - "node_modules/ganache-core/node_modules/to-object-path/node_modules/is-buffer": { - "version": "1.1.6", - "license": "MIT" - }, - "node_modules/ganache-core/node_modules/to-object-path/node_modules/kind-of": { - "version": "3.2.2", - "license": "MIT", + "node_modules/yargs-unparser": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/yargs-unparser/-/yargs-unparser-2.0.0.tgz", + "integrity": "sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA==", "dependencies": { - "is-buffer": "^1.1.5" + "camelcase": "^6.0.0", + "decamelize": "^4.0.0", + "flat": "^5.0.2", + "is-plain-obj": "^2.1.0" }, "engines": { - "node": ">=0.10.0" + "node": ">=10" } }, - "node_modules/ganache-core/node_modules/to-readable-stream": { - "version": "1.0.0", - "license": "MIT", - "optional": true, + "node_modules/yargs-unparser/node_modules/camelcase": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", + "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", "engines": { - "node": ">=6" - } - }, - "node_modules/ganache-core/node_modules/to-regex": { - "version": "3.0.2", - "license": "MIT", - "dependencies": { - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "regex-not": "^1.0.2", - "safe-regex": "^1.1.0" + "node": ">=10" }, - "engines": { - "node": ">=0.10.0" + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/ganache-core/node_modules/toidentifier": { - "version": "1.0.0", - "license": "MIT", + "node_modules/yauzl": { + "version": "2.10.0", + "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.10.0.tgz", + "integrity": "sha512-p4a9I6X6nu6IhoGmBqAcbJy1mlC4j27vEPZX9F4L4/vZT3Lyq1VkFHw/V/PUcB9Buo+DG3iHkT0x3Qya58zc3g==", "optional": true, - "engines": { - "node": ">=0.6" - } - }, - "node_modules/ganache-core/node_modules/tough-cookie": { - "version": "2.5.0", - "license": "BSD-3-Clause", "dependencies": { - "psl": "^1.1.28", - "punycode": "^2.1.1" - }, - "engines": { - "node": ">=0.8" - } - }, - "node_modules/ganache-core/node_modules/trim-right": { - "version": "1.0.1", - "license": "MIT", - "engines": { - "node": ">=0.10.0" + "buffer-crc32": "~0.2.3", + "fd-slicer": "~1.1.0" } }, - "node_modules/ganache-core/node_modules/tunnel-agent": { - "version": "0.6.0", - "license": "Apache-2.0", - "dependencies": { - "safe-buffer": "^5.0.1" - }, + "node_modules/yocto-queue": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", + "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", "engines": { - "node": "*" - } - }, - "node_modules/ganache-core/node_modules/tweetnacl": { - "version": "1.0.3", - "license": "Unlicense" - }, - "node_modules/ganache-core/node_modules/tweetnacl-util": { - "version": "0.15.1", - "license": "Unlicense" - }, - "node_modules/ganache-core/node_modules/type": { - "version": "1.2.0", - "license": "ISC" - }, - "node_modules/ganache-core/node_modules/type-is": { - "version": "1.6.18", - "license": "MIT", - "optional": true, - "dependencies": { - "media-typer": "0.3.0", - "mime-types": "~2.1.24" + "node": ">=10" }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/ganache-core/node_modules/typedarray": { - "version": "0.0.6", - "license": "MIT" - }, - "node_modules/ganache-core/node_modules/typedarray-to-buffer": { - "version": "3.1.5", - "license": "MIT", - "dependencies": { - "is-typedarray": "^1.0.0" + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/ganache-core/node_modules/typewise": { - "version": "1.0.3", - "license": "MIT", - "dependencies": { - "typewise-core": "^1.2.0" + "node_modules/zod": { + "version": "3.22.4", + "resolved": "https://registry.npmjs.org/zod/-/zod-3.22.4.tgz", + "integrity": "sha512-iC+8Io04lddc+mVqQ9AZ7OQ2MrUKGN+oIQyq1vemgt46jwCwLfhq7/pwnBnNXXXZb8VTVLKwp9EDkx+ryxIWmg==", + "funding": { + "url": "https://github.com/sponsors/colinhacks" } + } + }, + "dependencies": { + "@adraffy/ens-normalize": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/@adraffy/ens-normalize/-/ens-normalize-1.10.0.tgz", + "integrity": "sha512-nA9XHtlAkYfJxY7bce8DcN7eKxWWCWkU+1GR9d+U6MbNpfwQp8TI7vqOsBsMcHoT4mBu2kypKoSKnghEzOOq5Q==", + "dev": true }, - "node_modules/ganache-core/node_modules/typewise-core": { - "version": "1.2.0", - "license": "MIT" - }, - "node_modules/ganache-core/node_modules/typewiselite": { - "version": "1.0.0", - "license": "MIT" - }, - "node_modules/ganache-core/node_modules/ultron": { - "version": "1.1.1", - "license": "MIT", - "optional": true - }, - "node_modules/ganache-core/node_modules/underscore": { - "version": "1.9.1", - "license": "MIT", + "@aduh95/viz.js": { + "version": "3.7.0", + "resolved": "https://registry.npmjs.org/@aduh95/viz.js/-/viz.js-3.7.0.tgz", + "integrity": "sha512-20Pk2Z98fbPLkECcrZSJszKos/OgtvJJR3NcbVfgCJ6EQjDNzW2P1BKqImOz3tJ952dvO2DWEhcLhQ1Wz1e9ng==", "optional": true }, - "node_modules/ganache-core/node_modules/union-value": { - "version": "1.0.1", - "license": "MIT", - "dependencies": { - "arr-union": "^3.1.0", - "get-value": "^2.0.6", - "is-extendable": "^0.1.1", - "set-value": "^2.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/ganache-core/node_modules/union-value/node_modules/is-extendable": { - "version": "0.1.1", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/ganache-core/node_modules/universalify": { - "version": "0.1.2", - "license": "MIT", - "engines": { - "node": ">= 4.0.0" - } - }, - "node_modules/ganache-core/node_modules/unorm": { - "version": "1.6.0", - "license": "MIT or GPL-2.0", - "engines": { - "node": ">= 0.4.0" - } - }, - "node_modules/ganache-core/node_modules/unpipe": { - "version": "1.0.0", - "license": "MIT", - "optional": true, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/ganache-core/node_modules/unset-value": { - "version": "1.0.0", - "license": "MIT", - "dependencies": { - "has-value": "^0.3.1", - "isobject": "^3.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/ganache-core/node_modules/unset-value/node_modules/has-value": { - "version": "0.3.1", - "license": "MIT", - "dependencies": { - "get-value": "^2.0.3", - "has-values": "^0.1.4", - "isobject": "^2.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/ganache-core/node_modules/unset-value/node_modules/has-value/node_modules/isobject": { - "version": "2.1.0", - "license": "MIT", - "dependencies": { - "isarray": "1.0.0" + "@arbitrum/nitro-contracts": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@arbitrum/nitro-contracts/-/nitro-contracts-1.1.0.tgz", + "integrity": "sha512-/tLlU++IFdaD9Bn+RYzQ6+6k+0iDPuqi/cNf9kv5N1I9NAApNx1qfsIHoHMEQAvLuY+gj+raH7TAESBbzTAuuw==", + "requires": { + "@offchainlabs/upgrade-executor": "1.1.0-beta.0", + "@openzeppelin/contracts": "4.5.0", + "@openzeppelin/contracts-upgradeable": "4.5.2", + "patch-package": "^6.4.7", + "sol2uml": "2.2.0" }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/ganache-core/node_modules/unset-value/node_modules/has-values": { - "version": "0.1.4", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/ganache-core/node_modules/uri-js": { - "version": "4.4.1", - "license": "BSD-2-Clause", "dependencies": { - "punycode": "^2.1.0" + "@openzeppelin/contracts": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/@openzeppelin/contracts/-/contracts-4.5.0.tgz", + "integrity": "sha512-fdkzKPYMjrRiPK6K4y64e6GzULR7R7RwxSigHS8DDp7aWDeoReqsQI+cxHV1UuhAqX69L1lAaWDxenfP+xiqzA==" + } } }, - "node_modules/ganache-core/node_modules/urix": { - "version": "0.1.0", - "license": "MIT" - }, - "node_modules/ganache-core/node_modules/url-parse-lax": { - "version": "3.0.0", - "license": "MIT", - "optional": true, - "dependencies": { - "prepend-http": "^2.0.0" + "@aws-crypto/sha256-js": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/@aws-crypto/sha256-js/-/sha256-js-1.2.2.tgz", + "integrity": "sha512-Nr1QJIbW/afYYGzYvrF70LtaHrIRtd4TNAglX8BvlfxJLZ45SAmueIKYl5tWoNBPzp65ymXGFK0Bb1vZUpuc9g==", + "dev": true, + "requires": { + "@aws-crypto/util": "^1.2.2", + "@aws-sdk/types": "^3.1.0", + "tslib": "^1.11.1" }, - "engines": { - "node": ">=4" - } - }, - "node_modules/ganache-core/node_modules/url-set-query": { - "version": "1.0.0", - "license": "MIT", - "optional": true - }, - "node_modules/ganache-core/node_modules/url-to-options": { - "version": "1.0.1", - "license": "MIT", - "optional": true, - "engines": { - "node": ">= 4" - } - }, - "node_modules/ganache-core/node_modules/use": { - "version": "3.1.1", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/ganache-core/node_modules/utf-8-validate": { - "version": "5.0.4", - "hasInstallScript": true, - "license": "MIT", "dependencies": { - "node-gyp-build": "^4.2.0" + "tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "dev": true + } } }, - "node_modules/ganache-core/node_modules/utf8": { - "version": "3.0.0", - "license": "MIT", - "optional": true - }, - "node_modules/ganache-core/node_modules/util-deprecate": { - "version": "1.0.2", - "license": "MIT" - }, - "node_modules/ganache-core/node_modules/util.promisify": { - "version": "1.1.1", - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.0", - "define-properties": "^1.1.3", - "for-each": "^0.3.3", - "has-symbols": "^1.0.1", - "object.getownpropertydescriptors": "^2.1.1" + "@aws-crypto/util": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/@aws-crypto/util/-/util-1.2.2.tgz", + "integrity": "sha512-H8PjG5WJ4wz0UXAFXeJjWCW1vkvIJ3qUUD+rGRwJ2/hj+xT58Qle2MTql/2MGzkU+1JLAFuR6aJpLAjHwhmwwg==", + "dev": true, + "requires": { + "@aws-sdk/types": "^3.1.0", + "@aws-sdk/util-utf8-browser": "^3.0.0", + "tslib": "^1.11.1" }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/ganache-core/node_modules/utils-merge": { - "version": "1.0.1", - "license": "MIT", - "optional": true, - "engines": { - "node": ">= 0.4.0" - } - }, - "node_modules/ganache-core/node_modules/uuid": { - "version": "3.4.0", - "license": "MIT", - "bin": { - "uuid": "bin/uuid" - } - }, - "node_modules/ganache-core/node_modules/varint": { - "version": "5.0.2", - "license": "MIT", - "optional": true - }, - "node_modules/ganache-core/node_modules/vary": { - "version": "1.1.2", - "license": "MIT", - "optional": true, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/ganache-core/node_modules/verror": { - "version": "1.10.0", - "engines": [ - "node >=0.6.0" - ], - "license": "MIT", "dependencies": { - "assert-plus": "^1.0.0", - "core-util-is": "1.0.2", - "extsprintf": "^1.2.0" + "tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "dev": true + } } }, - "node_modules/ganache-core/node_modules/web3": { - "version": "1.2.11", - "hasInstallScript": true, - "license": "LGPL-3.0", - "optional": true, - "dependencies": { - "web3-bzz": "1.2.11", - "web3-core": "1.2.11", - "web3-eth": "1.2.11", - "web3-eth-personal": "1.2.11", - "web3-net": "1.2.11", - "web3-shh": "1.2.11", - "web3-utils": "1.2.11" - }, - "engines": { - "node": ">=8.0.0" + "@aws-sdk/types": { + "version": "3.489.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.489.0.tgz", + "integrity": "sha512-kcDtLfKog/p0tC4gAeqJqWxAiEzfe2LRPnKamvSG2Mjbthx4R/alE2dxyIq/wW+nvRv0fqR3OD5kD1+eVfdr/w==", + "dev": true, + "requires": { + "@smithy/types": "^2.8.0", + "tslib": "^2.5.0" } }, - "node_modules/ganache-core/node_modules/web3-bzz": { - "version": "1.2.11", - "license": "LGPL-3.0", - "optional": true, - "dependencies": { - "@types/node": "^12.12.6", - "got": "9.6.0", - "swarm-js": "^0.1.40", - "underscore": "1.9.1" - }, - "engines": { - "node": ">=8.0.0" + "@aws-sdk/util-utf8-browser": { + "version": "3.259.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-utf8-browser/-/util-utf8-browser-3.259.0.tgz", + "integrity": "sha512-UvFa/vR+e19XookZF8RzFZBrw2EUkQWxiBW0yYQAhvk3C+QVGl0H3ouca8LDBlBfQKXwmW3huo/59H8rwb1wJw==", + "dev": true, + "requires": { + "tslib": "^2.3.1" } }, - "node_modules/ganache-core/node_modules/web3-bzz/node_modules/@types/node": { - "version": "12.19.12", - "license": "MIT", - "optional": true - }, - "node_modules/ganache-core/node_modules/web3-core": { - "version": "1.2.11", - "license": "LGPL-3.0", - "optional": true, - "dependencies": { - "@types/bn.js": "^4.11.5", - "@types/node": "^12.12.6", - "bignumber.js": "^9.0.0", - "web3-core-helpers": "1.2.11", - "web3-core-method": "1.2.11", - "web3-core-requestmanager": "1.2.11", - "web3-utils": "1.2.11" - }, - "engines": { - "node": ">=8.0.0" + "@babel/runtime": { + "version": "7.23.8", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.23.8.tgz", + "integrity": "sha512-Y7KbAP984rn1VGMbGqKmBLio9V7y5Je9GvU4rQPCPinCyNfUcToxIXl06d59URp/F3LwinvODxab5N/G6qggkw==", + "requires": { + "regenerator-runtime": "^0.14.0" } }, - "node_modules/ganache-core/node_modules/web3-core-helpers": { - "version": "1.2.11", - "license": "LGPL-3.0", - "optional": true, - "dependencies": { - "underscore": "1.9.1", - "web3-eth-iban": "1.2.11", - "web3-utils": "1.2.11" + "@chainlink/contracts": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/@chainlink/contracts/-/contracts-0.8.0.tgz", + "integrity": "sha512-nUv1Uxw5Mn92wgLs2bgPYmo8hpdQ3s9jB/lcbdU0LmNOVu0hbfmouVnqwRLa28Ll50q6GczUA+eO0ikNIKLZsA==", + "requires": { + "@eth-optimism/contracts": "^0.5.21", + "@openzeppelin/contracts": "~4.3.3", + "@openzeppelin/contracts-upgradeable-4.7.3": "npm:@openzeppelin/contracts-upgradeable@v4.7.3", + "@openzeppelin/contracts-v0.7": "npm:@openzeppelin/contracts@v3.4.2" }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/ganache-core/node_modules/web3-core-method": { - "version": "1.2.11", - "license": "LGPL-3.0", - "optional": true, "dependencies": { - "@ethersproject/transactions": "^5.0.0-beta.135", - "underscore": "1.9.1", - "web3-core-helpers": "1.2.11", - "web3-core-promievent": "1.2.11", - "web3-core-subscriptions": "1.2.11", - "web3-utils": "1.2.11" - }, - "engines": { - "node": ">=8.0.0" + "@eth-optimism/contracts": { + "version": "0.5.40", + "resolved": "https://registry.npmjs.org/@eth-optimism/contracts/-/contracts-0.5.40.tgz", + "integrity": "sha512-MrzV0nvsymfO/fursTB7m/KunkPsCndltVgfdHaT1Aj5Vi6R/doKIGGkOofHX+8B6VMZpuZosKCMQ5lQuqjt8w==", + "requires": { + "@eth-optimism/core-utils": "0.12.0", + "@ethersproject/abstract-provider": "^5.7.0", + "@ethersproject/abstract-signer": "^5.7.0" + } + }, + "@openzeppelin/contracts": { + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/@openzeppelin/contracts/-/contracts-4.3.3.tgz", + "integrity": "sha512-tDBopO1c98Yk7Cv/PZlHqrvtVjlgK5R4J6jxLwoO7qxK4xqOiZG+zSkIvGFpPZ0ikc3QOED3plgdqjgNTnBc7g==" + }, + "ethers": { + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/ethers/-/ethers-5.7.2.tgz", + "integrity": "sha512-wswUsmWo1aOK8rR7DIKiWSw9DbLWe6x98Jrn8wcTflTVvaXhAMaB5zGAXy0GYQEQp9iO1iSHWVyARQm11zUtyg==", + "peer": true, + "requires": { + "@ethersproject/abi": "5.7.0", + "@ethersproject/abstract-provider": "5.7.0", + "@ethersproject/abstract-signer": "5.7.0", + "@ethersproject/address": "5.7.0", + "@ethersproject/base64": "5.7.0", + "@ethersproject/basex": "5.7.0", + "@ethersproject/bignumber": "5.7.0", + "@ethersproject/bytes": "5.7.0", + "@ethersproject/constants": "5.7.0", + "@ethersproject/contracts": "5.7.0", + "@ethersproject/hash": "5.7.0", + "@ethersproject/hdnode": "5.7.0", + "@ethersproject/json-wallets": "5.7.0", + "@ethersproject/keccak256": "5.7.0", + "@ethersproject/logger": "5.7.0", + "@ethersproject/networks": "5.7.1", + "@ethersproject/pbkdf2": "5.7.0", + "@ethersproject/properties": "5.7.0", + "@ethersproject/providers": "5.7.2", + "@ethersproject/random": "5.7.0", + "@ethersproject/rlp": "5.7.0", + "@ethersproject/sha2": "5.7.0", + "@ethersproject/signing-key": "5.7.0", + "@ethersproject/solidity": "5.7.0", + "@ethersproject/strings": "5.7.0", + "@ethersproject/transactions": "5.7.0", + "@ethersproject/units": "5.7.0", + "@ethersproject/wallet": "5.7.0", + "@ethersproject/web": "5.7.1", + "@ethersproject/wordlists": "5.7.0" + } + } } }, - "node_modules/ganache-core/node_modules/web3-core-promievent": { - "version": "1.2.11", - "license": "LGPL-3.0", - "optional": true, - "dependencies": { - "eventemitter3": "4.0.4" - }, - "engines": { - "node": ">=8.0.0" - } + "@chainsafe/as-sha256": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/@chainsafe/as-sha256/-/as-sha256-0.3.1.tgz", + "integrity": "sha512-hldFFYuf49ed7DAakWVXSJODuq3pzJEguD8tQ7h+sGkM18vja+OFoJI9krnGmgzyuZC2ETX0NOIcCTy31v2Mtg==" }, - "node_modules/ganache-core/node_modules/web3-core-requestmanager": { - "version": "1.2.11", - "license": "LGPL-3.0", - "optional": true, - "dependencies": { - "underscore": "1.9.1", - "web3-core-helpers": "1.2.11", - "web3-providers-http": "1.2.11", - "web3-providers-ipc": "1.2.11", - "web3-providers-ws": "1.2.11" - }, - "engines": { - "node": ">=8.0.0" + "@chainsafe/persistent-merkle-tree": { + "version": "0.4.2", + "resolved": "https://registry.npmjs.org/@chainsafe/persistent-merkle-tree/-/persistent-merkle-tree-0.4.2.tgz", + "integrity": "sha512-lLO3ihKPngXLTus/L7WHKaw9PnNJWizlOF1H9NNzHP6Xvh82vzg9F2bzkXhYIFshMZ2gTCEz8tq6STe7r5NDfQ==", + "requires": { + "@chainsafe/as-sha256": "^0.3.1" } }, - "node_modules/ganache-core/node_modules/web3-core-subscriptions": { - "version": "1.2.11", - "license": "LGPL-3.0", - "optional": true, - "dependencies": { - "eventemitter3": "4.0.4", - "underscore": "1.9.1", - "web3-core-helpers": "1.2.11" - }, - "engines": { - "node": ">=8.0.0" + "@chainsafe/ssz": { + "version": "0.9.4", + "resolved": "https://registry.npmjs.org/@chainsafe/ssz/-/ssz-0.9.4.tgz", + "integrity": "sha512-77Qtg2N1ayqs4Bg/wvnWfg5Bta7iy7IRh8XqXh7oNMeP2HBbBwx8m6yTpA8p0EHItWPEBkgZd5S5/LSlp3GXuQ==", + "requires": { + "@chainsafe/as-sha256": "^0.3.1", + "@chainsafe/persistent-merkle-tree": "^0.4.2", + "case": "^1.6.3" } }, - "node_modules/ganache-core/node_modules/web3-core/node_modules/@types/node": { - "version": "12.19.12", - "license": "MIT", + "@colors/colors": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@colors/colors/-/colors-1.5.0.tgz", + "integrity": "sha512-ooWCrlZP11i8GImSjTHYHLkvFDP48nS4+204nGb1RiX/WXYHmJA2III9/e2DWVabCESdW7hBAEzHRqUn9OUVvQ==", "optional": true }, - "node_modules/ganache-core/node_modules/web3-eth": { - "version": "1.2.11", - "license": "LGPL-3.0", - "optional": true, - "dependencies": { - "underscore": "1.9.1", - "web3-core": "1.2.11", - "web3-core-helpers": "1.2.11", - "web3-core-method": "1.2.11", - "web3-core-subscriptions": "1.2.11", - "web3-eth-abi": "1.2.11", - "web3-eth-accounts": "1.2.11", - "web3-eth-contract": "1.2.11", - "web3-eth-ens": "1.2.11", - "web3-eth-iban": "1.2.11", - "web3-eth-personal": "1.2.11", - "web3-net": "1.2.11", - "web3-utils": "1.2.11" + "@ensdomains/address-encoder": { + "version": "0.1.9", + "resolved": "https://registry.npmjs.org/@ensdomains/address-encoder/-/address-encoder-0.1.9.tgz", + "integrity": "sha512-E2d2gP4uxJQnDu2Kfg1tHNspefzbLT8Tyjrm5sEuim32UkU2sm5xL4VXtgc2X33fmPEw9+jUMpGs4veMbf+PYg==", + "requires": { + "bech32": "^1.1.3", + "blakejs": "^1.1.0", + "bn.js": "^4.11.8", + "bs58": "^4.0.1", + "crypto-addr-codec": "^0.1.7", + "nano-base32": "^1.0.1", + "ripemd160": "^2.0.2" }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/ganache-core/node_modules/web3-eth-abi": { - "version": "1.2.11", - "license": "LGPL-3.0", - "optional": true, "dependencies": { - "@ethersproject/abi": "5.0.0-beta.153", - "underscore": "1.9.1", - "web3-utils": "1.2.11" - }, - "engines": { - "node": ">=8.0.0" + "bn.js": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==" + } } }, - "node_modules/ganache-core/node_modules/web3-eth-accounts": { - "version": "1.2.11", - "license": "LGPL-3.0", - "optional": true, - "dependencies": { - "crypto-browserify": "3.12.0", - "eth-lib": "0.2.8", - "ethereumjs-common": "^1.3.2", - "ethereumjs-tx": "^2.1.1", - "scrypt-js": "^3.0.1", - "underscore": "1.9.1", - "uuid": "3.3.2", - "web3-core": "1.2.11", - "web3-core-helpers": "1.2.11", - "web3-core-method": "1.2.11", - "web3-utils": "1.2.11" + "@ensdomains/ens": { + "version": "0.4.5", + "resolved": "https://registry.npmjs.org/@ensdomains/ens/-/ens-0.4.5.tgz", + "integrity": "sha512-JSvpj1iNMFjK6K+uVl4unqMoa9rf5jopb8cya5UGBWz23Nw8hSNT7efgUx4BTlAPAgpNlEioUfeTyQ6J9ZvTVw==", + "requires": { + "bluebird": "^3.5.2", + "eth-ens-namehash": "^2.0.8", + "solc": "^0.4.20", + "testrpc": "0.0.1", + "web3-utils": "^1.0.0-beta.31" }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/ganache-core/node_modules/web3-eth-accounts/node_modules/eth-lib": { - "version": "0.2.8", - "license": "MIT", - "optional": true, "dependencies": { - "bn.js": "^4.11.6", - "elliptic": "^6.4.0", - "xhr-request-promise": "^0.1.2" - } - }, - "node_modules/ganache-core/node_modules/web3-eth-accounts/node_modules/uuid": { - "version": "3.3.2", - "license": "MIT", - "optional": true, - "bin": { - "uuid": "bin/uuid" - } - }, - "node_modules/ganache-core/node_modules/web3-eth-contract": { - "version": "1.2.11", - "license": "LGPL-3.0", - "optional": true, - "dependencies": { - "@types/bn.js": "^4.11.5", - "underscore": "1.9.1", - "web3-core": "1.2.11", - "web3-core-helpers": "1.2.11", - "web3-core-method": "1.2.11", - "web3-core-promievent": "1.2.11", - "web3-core-subscriptions": "1.2.11", - "web3-eth-abi": "1.2.11", - "web3-utils": "1.2.11" - }, - "engines": { - "node": ">=8.0.0" + "ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA==" + }, + "camelcase": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-3.0.0.tgz", + "integrity": "sha512-4nhGqUkc4BqbBBB4Q6zLuD7lzzrHYrjKGeYaEji/3tFR5VdJu9v+LilhGIVe8wxEJPPOeWo7eg8dwY13TZ1BNg==" + }, + "cliui": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-3.2.0.tgz", + "integrity": "sha512-0yayqDxWQbqk3ojkYqUKqaAQ6AfNKeKWRNA8kR0WXzAsdHpP4BIaOmMAG87JGuO6qcobyW4GjxHd9PmhEd+T9w==", + "requires": { + "string-width": "^1.0.1", + "strip-ansi": "^3.0.1", + "wrap-ansi": "^2.0.0" + } + }, + "decamelize": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", + "integrity": "sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==" + }, + "fs-extra": { + "version": "0.30.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-0.30.0.tgz", + "integrity": "sha512-UvSPKyhMn6LEd/WpUaV9C9t3zATuqoqfWc3QdPhPLb58prN9tqYPlPWi8Krxi44loBoUzlobqZ3+8tGpxxSzwA==", + "requires": { + "graceful-fs": "^4.1.2", + "jsonfile": "^2.1.0", + "klaw": "^1.0.0", + "path-is-absolute": "^1.0.0", + "rimraf": "^2.2.8" + } + }, + "get-caller-file": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-1.0.3.tgz", + "integrity": "sha512-3t6rVToeoZfYSGd8YoLFR2DJkiQrIiUrGcjvFX2mDw3bn6k2OtwHN0TNCLbBO+w8qTvimhDkv+LSscbJY1vE6w==" + }, + "is-fullwidth-code-point": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", + "integrity": "sha512-1pqUqRjkhPJ9miNq9SwMfdvi6lBJcd6eFxvfaivQhaH3SgisfiuudvFntdKOmxuee/77l+FPjKrQjWvmPjWrRw==", + "requires": { + "number-is-nan": "^1.0.0" + } + }, + "jsonfile": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-2.4.0.tgz", + "integrity": "sha512-PKllAqbgLgxHaj8TElYymKCAgrASebJrWpTnEkOaTowt23VKXXN0sUeriJ+eh7y6ufb/CC5ap11pz71/cM0hUw==", + "requires": { + "graceful-fs": "^4.1.6" + } + }, + "klaw": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/klaw/-/klaw-1.3.1.tgz", + "integrity": "sha512-TED5xi9gGQjGpNnvRWknrwAB1eL5GciPfVFOt3Vk1OJCVDQbzuSfrF3hkUQKlsgKrG1F+0t5W0m+Fje1jIt8rw==", + "requires": { + "graceful-fs": "^4.1.9" + } + }, + "semver": { + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", + "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==" + }, + "solc": { + "version": "0.4.26", + "resolved": "https://registry.npmjs.org/solc/-/solc-0.4.26.tgz", + "integrity": "sha512-o+c6FpkiHd+HPjmjEVpQgH7fqZ14tJpXhho+/bQXlXbliLIS/xjXb42Vxh+qQY1WCSTMQ0+a5vR9vi0MfhU6mA==", + "requires": { + "fs-extra": "^0.30.0", + "memorystream": "^0.3.1", + "require-from-string": "^1.1.0", + "semver": "^5.3.0", + "yargs": "^4.7.1" + } + }, + "string-width": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", + "integrity": "sha512-0XsVpQLnVCXHJfyEs8tC0zpTVIr5PKKsQtkT29IwupnPTjtPmQ3xT/4yCREF9hYkV/3M3kzcUTSAZT6a6h81tw==", + "requires": { + "code-point-at": "^1.0.0", + "is-fullwidth-code-point": "^1.0.0", + "strip-ansi": "^3.0.0" + } + }, + "strip-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha512-VhumSSbBqDTP8p2ZLKj40UjBCV4+v8bUSEpUb4KjRgWk9pbqGF4REFj6KEagidb2f/M6AzC0EmFyDNGaw9OCzg==", + "requires": { + "ansi-regex": "^2.0.0" + } + }, + "wrap-ansi": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-2.1.0.tgz", + "integrity": "sha512-vAaEaDM946gbNpH5pLVNR+vX2ht6n0Bt3GXwVB1AuAqZosOvHNF3P7wDnh8KLkSqgUh0uh77le7Owgoz+Z9XBw==", + "requires": { + "string-width": "^1.0.1", + "strip-ansi": "^3.0.1" + } + }, + "y18n": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-3.2.2.tgz", + "integrity": "sha512-uGZHXkHnhF0XeeAPgnKfPv1bgKAYyVvmNL1xlKsPYZPaIHxGti2hHqvOCQv71XMsLxu1QjergkqogUnms5D3YQ==" + }, + "yargs": { + "version": "4.8.1", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-4.8.1.tgz", + "integrity": "sha512-LqodLrnIDM3IFT+Hf/5sxBnEGECrfdC1uIbgZeJmESCSo4HoCAaKEus8MylXHAkdacGc0ye+Qa+dpkuom8uVYA==", + "requires": { + "cliui": "^3.2.0", + "decamelize": "^1.1.1", + "get-caller-file": "^1.0.1", + "lodash.assign": "^4.0.3", + "os-locale": "^1.4.0", + "read-pkg-up": "^1.0.1", + "require-directory": "^2.1.1", + "require-main-filename": "^1.0.1", + "set-blocking": "^2.0.0", + "string-width": "^1.0.1", + "which-module": "^1.0.0", + "window-size": "^0.2.0", + "y18n": "^3.2.1", + "yargs-parser": "^2.4.1" + } + }, + "yargs-parser": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-2.4.1.tgz", + "integrity": "sha512-9pIKIJhnI5tonzG6OnCFlz/yln8xHYcGl+pn3xR0Vzff0vzN1PbNRaelgfgRUwZ3s4i3jvxT9WhmUGL4whnasA==", + "requires": { + "camelcase": "^3.0.0", + "lodash.assign": "^4.0.6" + } + } } }, - "node_modules/ganache-core/node_modules/web3-eth-ens": { - "version": "1.2.11", - "license": "LGPL-3.0", - "optional": true, - "dependencies": { + "@ensdomains/ensjs": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@ensdomains/ensjs/-/ensjs-2.1.0.tgz", + "integrity": "sha512-GRbGPT8Z/OJMDuxs75U/jUNEC0tbL0aj7/L/QQznGYKm/tiasp+ndLOaoULy9kKJFC0TBByqfFliEHDgoLhyog==", + "requires": { + "@babel/runtime": "^7.4.4", + "@ensdomains/address-encoder": "^0.1.7", + "@ensdomains/ens": "0.4.5", + "@ensdomains/resolver": "0.2.4", "content-hash": "^2.5.2", - "eth-ens-namehash": "2.0.8", - "underscore": "1.9.1", - "web3-core": "1.2.11", - "web3-core-helpers": "1.2.11", - "web3-core-promievent": "1.2.11", - "web3-eth-abi": "1.2.11", - "web3-eth-contract": "1.2.11", - "web3-utils": "1.2.11" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/ganache-core/node_modules/web3-eth-iban": { - "version": "1.2.11", - "license": "LGPL-3.0", - "optional": true, - "dependencies": { - "bn.js": "^4.11.9", - "web3-utils": "1.2.11" + "eth-ens-namehash": "^2.0.8", + "ethers": "^5.0.13", + "js-sha3": "^0.8.0" }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/ganache-core/node_modules/web3-eth-personal": { - "version": "1.2.11", - "license": "LGPL-3.0", - "optional": true, "dependencies": { - "@types/node": "^12.12.6", - "web3-core": "1.2.11", - "web3-core-helpers": "1.2.11", - "web3-core-method": "1.2.11", - "web3-net": "1.2.11", - "web3-utils": "1.2.11" - }, - "engines": { - "node": ">=8.0.0" + "ethers": { + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/ethers/-/ethers-5.7.2.tgz", + "integrity": "sha512-wswUsmWo1aOK8rR7DIKiWSw9DbLWe6x98Jrn8wcTflTVvaXhAMaB5zGAXy0GYQEQp9iO1iSHWVyARQm11zUtyg==", + "requires": { + "@ethersproject/abi": "5.7.0", + "@ethersproject/abstract-provider": "5.7.0", + "@ethersproject/abstract-signer": "5.7.0", + "@ethersproject/address": "5.7.0", + "@ethersproject/base64": "5.7.0", + "@ethersproject/basex": "5.7.0", + "@ethersproject/bignumber": "5.7.0", + "@ethersproject/bytes": "5.7.0", + "@ethersproject/constants": "5.7.0", + "@ethersproject/contracts": "5.7.0", + "@ethersproject/hash": "5.7.0", + "@ethersproject/hdnode": "5.7.0", + "@ethersproject/json-wallets": "5.7.0", + "@ethersproject/keccak256": "5.7.0", + "@ethersproject/logger": "5.7.0", + "@ethersproject/networks": "5.7.1", + "@ethersproject/pbkdf2": "5.7.0", + "@ethersproject/properties": "5.7.0", + "@ethersproject/providers": "5.7.2", + "@ethersproject/random": "5.7.0", + "@ethersproject/rlp": "5.7.0", + "@ethersproject/sha2": "5.7.0", + "@ethersproject/signing-key": "5.7.0", + "@ethersproject/solidity": "5.7.0", + "@ethersproject/strings": "5.7.0", + "@ethersproject/transactions": "5.7.0", + "@ethersproject/units": "5.7.0", + "@ethersproject/wallet": "5.7.0", + "@ethersproject/web": "5.7.1", + "@ethersproject/wordlists": "5.7.0" + } + } } }, - "node_modules/ganache-core/node_modules/web3-eth-personal/node_modules/@types/node": { - "version": "12.19.12", - "license": "MIT", - "optional": true + "@ensdomains/resolver": { + "version": "0.2.4", + "resolved": "https://registry.npmjs.org/@ensdomains/resolver/-/resolver-0.2.4.tgz", + "integrity": "sha512-bvaTH34PMCbv6anRa9I/0zjLJgY4EuznbEMgbV77JBCQ9KNC46rzi0avuxpOfu+xDjPEtSFGqVEOr5GlUSGudA==" }, - "node_modules/ganache-core/node_modules/web3-net": { - "version": "1.2.11", - "license": "LGPL-3.0", - "optional": true, - "dependencies": { - "web3-core": "1.2.11", - "web3-core-method": "1.2.11", - "web3-utils": "1.2.11" - }, - "engines": { - "node": ">=8.0.0" - } + "@eth-optimism/contracts-bedrock": { + "version": "0.16.2", + "resolved": "https://registry.npmjs.org/@eth-optimism/contracts-bedrock/-/contracts-bedrock-0.16.2.tgz", + "integrity": "sha512-a2+f7soDbrd6jV74U02EpyMwQt2iZeDZ4c2ZwgkObcxXUZLZQ2ELt/VRFBf8TIL3wYcBOGpUa1aXAE2oHQ7oRA==" }, - "node_modules/ganache-core/node_modules/web3-provider-engine": { - "version": "14.2.1", - "license": "MIT", - "dependencies": { - "async": "^2.5.0", - "backoff": "^2.5.0", - "clone": "^2.0.0", - "cross-fetch": "^2.1.0", - "eth-block-tracker": "^3.0.0", - "eth-json-rpc-infura": "^3.1.0", - "eth-sig-util": "3.0.0", - "ethereumjs-block": "^1.2.2", - "ethereumjs-tx": "^1.2.0", - "ethereumjs-util": "^5.1.5", - "ethereumjs-vm": "^2.3.4", - "json-rpc-error": "^2.0.0", - "json-stable-stringify": "^1.0.1", - "promise-to-callback": "^1.0.0", - "readable-stream": "^2.2.9", - "request": "^2.85.0", - "semaphore": "^1.0.3", - "ws": "^5.1.1", - "xhr": "^2.2.0", - "xtend": "^4.0.1" + "@eth-optimism/core-utils": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/@eth-optimism/core-utils/-/core-utils-0.12.0.tgz", + "integrity": "sha512-qW+7LZYCz7i8dRa7SRlUKIo1VBU8lvN0HeXCxJR+z+xtMzMQpPds20XJNCMclszxYQHkXY00fOT6GvFw9ZL6nw==", + "requires": { + "@ethersproject/abi": "^5.7.0", + "@ethersproject/abstract-provider": "^5.7.0", + "@ethersproject/address": "^5.7.0", + "@ethersproject/bignumber": "^5.7.0", + "@ethersproject/bytes": "^5.7.0", + "@ethersproject/constants": "^5.7.0", + "@ethersproject/contracts": "^5.7.0", + "@ethersproject/hash": "^5.7.0", + "@ethersproject/keccak256": "^5.7.0", + "@ethersproject/properties": "^5.7.0", + "@ethersproject/providers": "^5.7.0", + "@ethersproject/rlp": "^5.7.0", + "@ethersproject/transactions": "^5.7.0", + "@ethersproject/web": "^5.7.0", + "bufio": "^1.0.7", + "chai": "^4.3.4" } }, - "node_modules/ganache-core/node_modules/web3-provider-engine/node_modules/abstract-leveldown": { - "version": "2.6.3", - "license": "MIT", + "@ethereumjs/block": { + "version": "3.6.3", + "resolved": "https://registry.npmjs.org/@ethereumjs/block/-/block-3.6.3.tgz", + "integrity": "sha512-CegDeryc2DVKnDkg5COQrE0bJfw/p0v3GBk2W5/Dj5dOVfEmb50Ux0GLnSPypooLnfqjwFaorGuT9FokWB3GRg==", + "requires": { + "@ethereumjs/common": "^2.6.5", + "@ethereumjs/tx": "^3.5.2", + "ethereumjs-util": "^7.1.5", + "merkle-patricia-tree": "^4.2.4" + }, "dependencies": { - "xtend": "~4.0.0" + "@ethereumjs/common": { + "version": "2.6.5", + "resolved": "https://registry.npmjs.org/@ethereumjs/common/-/common-2.6.5.tgz", + "integrity": "sha512-lRyVQOeCDaIVtgfbowla32pzeDv2Obr8oR8Put5RdUBNRGr1VGPGQNGP6elWIpgK3YdpzqTOh4GyUGOureVeeA==", + "requires": { + "crc-32": "^1.2.0", + "ethereumjs-util": "^7.1.5" + } + }, + "@ethereumjs/tx": { + "version": "3.5.2", + "resolved": "https://registry.npmjs.org/@ethereumjs/tx/-/tx-3.5.2.tgz", + "integrity": "sha512-gQDNJWKrSDGu2w7w0PzVXVBNMzb7wwdDOmOqczmhNjqFxFuIbhVJDwiGEnxFNC2/b8ifcZzY7MLcluizohRzNw==", + "requires": { + "@ethereumjs/common": "^2.6.4", + "ethereumjs-util": "^7.1.5" + } + } } }, - "node_modules/ganache-core/node_modules/web3-provider-engine/node_modules/deferred-leveldown": { - "version": "1.2.2", - "license": "MIT", - "dependencies": { - "abstract-leveldown": "~2.6.0" + "@ethereumjs/common": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/@ethereumjs/common/-/common-4.1.0.tgz", + "integrity": "sha512-XWdQvUjlQHVwh4uGEPFKHpsic69GOsMXEhlHrggS5ju/+2zAmmlz6B25TkCCymeElC9DUp13tH5Tc25Iuvtlcg==", + "requires": { + "@ethereumjs/util": "^9.0.1", + "crc": "^4.3.2" } }, - "node_modules/ganache-core/node_modules/web3-provider-engine/node_modules/eth-sig-util": { - "version": "1.4.2", - "license": "ISC", - "dependencies": { - "ethereumjs-abi": "git+https://github.com/ethereumjs/ethereumjs-abi.git", - "ethereumjs-util": "^5.1.1" - } + "@ethereumjs/rlp": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/@ethereumjs/rlp/-/rlp-5.0.1.tgz", + "integrity": "sha512-Ab/Hfzz+T9Zl+65Nkg+9xAmwKPLicsnQ4NW49pgvJp9ovefuic95cgOS9CbPc9izIEgsqm1UitV0uNveCvud9w==" }, - "node_modules/ganache-core/node_modules/web3-provider-engine/node_modules/ethereumjs-account": { - "version": "2.0.5", - "license": "MPL-2.0", - "dependencies": { - "ethereumjs-util": "^5.0.0", - "rlp": "^2.0.0", - "safe-buffer": "^5.1.1" + "@ethereumjs/tx": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/@ethereumjs/tx/-/tx-5.1.0.tgz", + "integrity": "sha512-VUhw2+4yXArJZRWhPjmZFrN4WUjUo0qUZUszVpW2KzsGlqCFf67kwJcH9Rca5eS0CRHjr2qHJLpvYOjNuaXVdA==", + "requires": { + "@ethereumjs/common": "^4.1.0", + "@ethereumjs/rlp": "^5.0.1", + "@ethereumjs/util": "^9.0.1", + "ethereum-cryptography": "^2.1.2" } }, - "node_modules/ganache-core/node_modules/web3-provider-engine/node_modules/ethereumjs-block": { - "version": "1.7.1", - "license": "MPL-2.0", - "dependencies": { - "async": "^2.0.1", - "ethereum-common": "0.2.0", - "ethereumjs-tx": "^1.2.2", - "ethereumjs-util": "^5.0.0", - "merkle-patricia-tree": "^2.1.2" + "@ethereumjs/util": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/@ethereumjs/util/-/util-9.0.1.tgz", + "integrity": "sha512-NdFFEzCc3H1sYkNnnySwLg6owdQMhjUc2jfuDyx8Xv162WSluCnnSKouKOSG3njGNEyy2I9NmF8zTRDwuqpZWA==", + "requires": { + "@ethereumjs/rlp": "^5.0.1", + "ethereum-cryptography": "^2.1.2" } }, - "node_modules/ganache-core/node_modules/web3-provider-engine/node_modules/ethereumjs-block/node_modules/ethereum-common": { - "version": "0.2.0", - "license": "MIT" - }, - "node_modules/ganache-core/node_modules/web3-provider-engine/node_modules/ethereumjs-tx": { - "version": "1.3.7", - "license": "MPL-2.0", - "dependencies": { - "ethereum-common": "^0.0.18", - "ethereumjs-util": "^5.0.0" + "@ethersproject/abi": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/abi/-/abi-5.7.0.tgz", + "integrity": "sha512-351ktp42TiRcYB3H1OP8yajPeAQstMW/yCFokj/AthP9bLHzQFPlOrxOcwYEDkUAICmOHljvN4K39OMTMUa9RA==", + "requires": { + "@ethersproject/address": "^5.7.0", + "@ethersproject/bignumber": "^5.7.0", + "@ethersproject/bytes": "^5.7.0", + "@ethersproject/constants": "^5.7.0", + "@ethersproject/hash": "^5.7.0", + "@ethersproject/keccak256": "^5.7.0", + "@ethersproject/logger": "^5.7.0", + "@ethersproject/properties": "^5.7.0", + "@ethersproject/strings": "^5.7.0" } }, - "node_modules/ganache-core/node_modules/web3-provider-engine/node_modules/ethereumjs-util": { - "version": "5.2.1", - "license": "MPL-2.0", - "dependencies": { - "bn.js": "^4.11.0", - "create-hash": "^1.1.2", - "elliptic": "^6.5.2", - "ethereum-cryptography": "^0.1.3", - "ethjs-util": "^0.1.3", - "rlp": "^2.0.0", - "safe-buffer": "^5.1.1" + "@ethersproject/abstract-provider": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/abstract-provider/-/abstract-provider-5.7.0.tgz", + "integrity": "sha512-R41c9UkchKCpAqStMYUpdunjo3pkEvZC3FAwZn5S5MGbXoMQOHIdHItezTETxAO5bevtMApSyEhn9+CHcDsWBw==", + "requires": { + "@ethersproject/bignumber": "^5.7.0", + "@ethersproject/bytes": "^5.7.0", + "@ethersproject/logger": "^5.7.0", + "@ethersproject/networks": "^5.7.0", + "@ethersproject/properties": "^5.7.0", + "@ethersproject/transactions": "^5.7.0", + "@ethersproject/web": "^5.7.0" } }, - "node_modules/ganache-core/node_modules/web3-provider-engine/node_modules/ethereumjs-vm": { - "version": "2.6.0", - "license": "MPL-2.0", - "dependencies": { - "async": "^2.1.2", - "async-eventemitter": "^0.2.2", - "ethereumjs-account": "^2.0.3", - "ethereumjs-block": "~2.2.0", - "ethereumjs-common": "^1.1.0", - "ethereumjs-util": "^6.0.0", - "fake-merkle-patricia-tree": "^1.0.1", - "functional-red-black-tree": "^1.0.1", - "merkle-patricia-tree": "^2.3.2", - "rustbn.js": "~0.2.0", - "safe-buffer": "^5.1.1" + "@ethersproject/abstract-signer": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/abstract-signer/-/abstract-signer-5.7.0.tgz", + "integrity": "sha512-a16V8bq1/Cz+TGCkE2OPMTOUDLS3grCpdjoJCYNnVBbdYEMSgKrU0+B90s8b6H+ByYTBZN7a3g76jdIJi7UfKQ==", + "requires": { + "@ethersproject/abstract-provider": "^5.7.0", + "@ethersproject/bignumber": "^5.7.0", + "@ethersproject/bytes": "^5.7.0", + "@ethersproject/logger": "^5.7.0", + "@ethersproject/properties": "^5.7.0" } }, - "node_modules/ganache-core/node_modules/web3-provider-engine/node_modules/ethereumjs-vm/node_modules/ethereumjs-block": { - "version": "2.2.2", - "license": "MPL-2.0", - "dependencies": { - "async": "^2.0.1", - "ethereumjs-common": "^1.5.0", - "ethereumjs-tx": "^2.1.1", - "ethereumjs-util": "^5.0.0", - "merkle-patricia-tree": "^2.1.2" + "@ethersproject/address": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/address/-/address-5.7.0.tgz", + "integrity": "sha512-9wYhYt7aghVGo758POM5nqcOMaE168Q6aRLJZwUmiqSrAungkG74gSSeKEIR7ukixesdRZGPgVqme6vmxs1fkA==", + "requires": { + "@ethersproject/bignumber": "^5.7.0", + "@ethersproject/bytes": "^5.7.0", + "@ethersproject/keccak256": "^5.7.0", + "@ethersproject/logger": "^5.7.0", + "@ethersproject/rlp": "^5.7.0" } }, - "node_modules/ganache-core/node_modules/web3-provider-engine/node_modules/ethereumjs-vm/node_modules/ethereumjs-block/node_modules/ethereumjs-util": { - "version": "5.2.1", - "license": "MPL-2.0", - "dependencies": { - "bn.js": "^4.11.0", - "create-hash": "^1.1.2", - "elliptic": "^6.5.2", - "ethereum-cryptography": "^0.1.3", - "ethjs-util": "^0.1.3", - "rlp": "^2.0.0", - "safe-buffer": "^5.1.1" + "@ethersproject/base64": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/base64/-/base64-5.7.0.tgz", + "integrity": "sha512-Dr8tcHt2mEbsZr/mwTPIQAf3Ai0Bks/7gTw9dSqk1mQvhW3XvRlmDJr/4n+wg1JmCl16NZue17CDh8xb/vZ0sQ==", + "requires": { + "@ethersproject/bytes": "^5.7.0" } }, - "node_modules/ganache-core/node_modules/web3-provider-engine/node_modules/ethereumjs-vm/node_modules/ethereumjs-tx": { - "version": "2.1.2", - "license": "MPL-2.0", - "dependencies": { - "ethereumjs-common": "^1.5.0", - "ethereumjs-util": "^6.0.0" + "@ethersproject/basex": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/basex/-/basex-5.7.0.tgz", + "integrity": "sha512-ywlh43GwZLv2Voc2gQVTKBoVQ1mti3d8HK5aMxsfu/nRDnMmNqaSJ3r3n85HBByT8OpoY96SXM1FogC533T4zw==", + "requires": { + "@ethersproject/bytes": "^5.7.0", + "@ethersproject/properties": "^5.7.0" } }, - "node_modules/ganache-core/node_modules/web3-provider-engine/node_modules/ethereumjs-vm/node_modules/ethereumjs-util": { - "version": "6.2.1", - "license": "MPL-2.0", - "dependencies": { - "@types/bn.js": "^4.11.3", - "bn.js": "^4.11.0", - "create-hash": "^1.1.2", - "elliptic": "^6.5.2", - "ethereum-cryptography": "^0.1.3", - "ethjs-util": "0.1.6", - "rlp": "^2.2.3" + "@ethersproject/bignumber": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/bignumber/-/bignumber-5.7.0.tgz", + "integrity": "sha512-n1CAdIHRWjSucQO3MC1zPSVgV/6dy/fjL9pMrPP9peL+QxEg9wOsVqwD4+818B6LUEtaXzVHQiuivzRoxPxUGw==", + "requires": { + "@ethersproject/bytes": "^5.7.0", + "@ethersproject/logger": "^5.7.0", + "bn.js": "^5.2.1" } }, - "node_modules/ganache-core/node_modules/web3-provider-engine/node_modules/isarray": { - "version": "0.0.1", - "license": "MIT" - }, - "node_modules/ganache-core/node_modules/web3-provider-engine/node_modules/level-codec": { - "version": "7.0.1", - "license": "MIT" - }, - "node_modules/ganache-core/node_modules/web3-provider-engine/node_modules/level-errors": { - "version": "1.0.5", - "license": "MIT", - "dependencies": { - "errno": "~0.1.1" + "@ethersproject/bytes": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/bytes/-/bytes-5.7.0.tgz", + "integrity": "sha512-nsbxwgFXWh9NyYWo+U8atvmMsSdKJprTcICAkvbBffT75qDocbuggBU0SJiVK2MuTrp0q+xvLkTnGMPK1+uA9A==", + "requires": { + "@ethersproject/logger": "^5.7.0" } }, - "node_modules/ganache-core/node_modules/web3-provider-engine/node_modules/level-iterator-stream": { - "version": "1.3.1", - "license": "MIT", - "dependencies": { - "inherits": "^2.0.1", - "level-errors": "^1.0.3", - "readable-stream": "^1.0.33", - "xtend": "^4.0.0" + "@ethersproject/constants": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/constants/-/constants-5.7.0.tgz", + "integrity": "sha512-DHI+y5dBNvkpYUMiRQyxRBYBefZkJfo70VUkUAsRjcPs47muV9evftfZ0PJVCXYbAiCgght0DtcF9srFQmIgWA==", + "requires": { + "@ethersproject/bignumber": "^5.7.0" } }, - "node_modules/ganache-core/node_modules/web3-provider-engine/node_modules/level-iterator-stream/node_modules/readable-stream": { - "version": "1.1.14", - "license": "MIT", - "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.1", - "isarray": "0.0.1", - "string_decoder": "~0.10.x" + "@ethersproject/contracts": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/contracts/-/contracts-5.7.0.tgz", + "integrity": "sha512-5GJbzEU3X+d33CdfPhcyS+z8MzsTrBGk/sc+G+59+tPa9yFkl6HQ9D6L0QMgNTA9q8dT0XKxxkyp883XsQvbbg==", + "requires": { + "@ethersproject/abi": "^5.7.0", + "@ethersproject/abstract-provider": "^5.7.0", + "@ethersproject/abstract-signer": "^5.7.0", + "@ethersproject/address": "^5.7.0", + "@ethersproject/bignumber": "^5.7.0", + "@ethersproject/bytes": "^5.7.0", + "@ethersproject/constants": "^5.7.0", + "@ethersproject/logger": "^5.7.0", + "@ethersproject/properties": "^5.7.0", + "@ethersproject/transactions": "^5.7.0" } }, - "node_modules/ganache-core/node_modules/web3-provider-engine/node_modules/level-ws": { - "version": "0.0.0", - "license": "MIT", + "@ethersproject/hardware-wallets": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/hardware-wallets/-/hardware-wallets-5.7.0.tgz", + "integrity": "sha512-DjMMXIisRc8xFvEoLoYz1w7JDOYmaz/a0X9sp7Zu668RR8U1zCAyj5ow25HLRW+TCzEC5XiFetTXqS5kXonFCQ==", + "requires": { + "@ledgerhq/hw-app-eth": "5.27.2", + "@ledgerhq/hw-transport": "5.26.0", + "@ledgerhq/hw-transport-node-hid": "5.26.0", + "@ledgerhq/hw-transport-u2f": "5.26.0", + "ethers": "^5.7.0" + }, "dependencies": { - "readable-stream": "~1.0.15", - "xtend": "~2.1.1" + "ethers": { + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/ethers/-/ethers-5.7.2.tgz", + "integrity": "sha512-wswUsmWo1aOK8rR7DIKiWSw9DbLWe6x98Jrn8wcTflTVvaXhAMaB5zGAXy0GYQEQp9iO1iSHWVyARQm11zUtyg==", + "requires": { + "@ethersproject/abi": "5.7.0", + "@ethersproject/abstract-provider": "5.7.0", + "@ethersproject/abstract-signer": "5.7.0", + "@ethersproject/address": "5.7.0", + "@ethersproject/base64": "5.7.0", + "@ethersproject/basex": "5.7.0", + "@ethersproject/bignumber": "5.7.0", + "@ethersproject/bytes": "5.7.0", + "@ethersproject/constants": "5.7.0", + "@ethersproject/contracts": "5.7.0", + "@ethersproject/hash": "5.7.0", + "@ethersproject/hdnode": "5.7.0", + "@ethersproject/json-wallets": "5.7.0", + "@ethersproject/keccak256": "5.7.0", + "@ethersproject/logger": "5.7.0", + "@ethersproject/networks": "5.7.1", + "@ethersproject/pbkdf2": "5.7.0", + "@ethersproject/properties": "5.7.0", + "@ethersproject/providers": "5.7.2", + "@ethersproject/random": "5.7.0", + "@ethersproject/rlp": "5.7.0", + "@ethersproject/sha2": "5.7.0", + "@ethersproject/signing-key": "5.7.0", + "@ethersproject/solidity": "5.7.0", + "@ethersproject/strings": "5.7.0", + "@ethersproject/transactions": "5.7.0", + "@ethersproject/units": "5.7.0", + "@ethersproject/wallet": "5.7.0", + "@ethersproject/web": "5.7.1", + "@ethersproject/wordlists": "5.7.0" + } + } } }, - "node_modules/ganache-core/node_modules/web3-provider-engine/node_modules/level-ws/node_modules/readable-stream": { - "version": "1.0.34", - "license": "MIT", - "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.1", - "isarray": "0.0.1", - "string_decoder": "~0.10.x" + "@ethersproject/hash": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/hash/-/hash-5.7.0.tgz", + "integrity": "sha512-qX5WrQfnah1EFnO5zJv1v46a8HW0+E5xuBBDTwMFZLuVTx0tbU2kkx15NqdjxecrLGatQN9FGQKpb1FKdHCt+g==", + "requires": { + "@ethersproject/abstract-signer": "^5.7.0", + "@ethersproject/address": "^5.7.0", + "@ethersproject/base64": "^5.7.0", + "@ethersproject/bignumber": "^5.7.0", + "@ethersproject/bytes": "^5.7.0", + "@ethersproject/keccak256": "^5.7.0", + "@ethersproject/logger": "^5.7.0", + "@ethersproject/properties": "^5.7.0", + "@ethersproject/strings": "^5.7.0" } }, - "node_modules/ganache-core/node_modules/web3-provider-engine/node_modules/level-ws/node_modules/xtend": { - "version": "2.1.2", - "dependencies": { - "object-keys": "~0.4.0" - }, - "engines": { - "node": ">=0.4" + "@ethersproject/hdnode": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/hdnode/-/hdnode-5.7.0.tgz", + "integrity": "sha512-OmyYo9EENBPPf4ERhR7oj6uAtUAhYGqOnIS+jE5pTXvdKBS99ikzq1E7Iv0ZQZ5V36Lqx1qZLeak0Ra16qpeOg==", + "requires": { + "@ethersproject/abstract-signer": "^5.7.0", + "@ethersproject/basex": "^5.7.0", + "@ethersproject/bignumber": "^5.7.0", + "@ethersproject/bytes": "^5.7.0", + "@ethersproject/logger": "^5.7.0", + "@ethersproject/pbkdf2": "^5.7.0", + "@ethersproject/properties": "^5.7.0", + "@ethersproject/sha2": "^5.7.0", + "@ethersproject/signing-key": "^5.7.0", + "@ethersproject/strings": "^5.7.0", + "@ethersproject/transactions": "^5.7.0", + "@ethersproject/wordlists": "^5.7.0" } }, - "node_modules/ganache-core/node_modules/web3-provider-engine/node_modules/levelup": { - "version": "1.3.9", - "license": "MIT", + "@ethersproject/json-wallets": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/json-wallets/-/json-wallets-5.7.0.tgz", + "integrity": "sha512-8oee5Xgu6+RKgJTkvEMl2wDgSPSAQ9MB/3JYjFV9jlKvcYHUXZC+cQp0njgmxdHkYWn8s6/IqIZYm0YWCjO/0g==", + "requires": { + "@ethersproject/abstract-signer": "^5.7.0", + "@ethersproject/address": "^5.7.0", + "@ethersproject/bytes": "^5.7.0", + "@ethersproject/hdnode": "^5.7.0", + "@ethersproject/keccak256": "^5.7.0", + "@ethersproject/logger": "^5.7.0", + "@ethersproject/pbkdf2": "^5.7.0", + "@ethersproject/properties": "^5.7.0", + "@ethersproject/random": "^5.7.0", + "@ethersproject/strings": "^5.7.0", + "@ethersproject/transactions": "^5.7.0", + "aes-js": "3.0.0", + "scrypt-js": "3.0.1" + }, "dependencies": { - "deferred-leveldown": "~1.2.1", - "level-codec": "~7.0.0", - "level-errors": "~1.0.3", - "level-iterator-stream": "~1.3.0", - "prr": "~1.0.1", - "semver": "~5.4.1", - "xtend": "~4.0.0" + "aes-js": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/aes-js/-/aes-js-3.0.0.tgz", + "integrity": "sha512-H7wUZRn8WpTq9jocdxQ2c8x2sKo9ZVmzfRE13GiNJXfp7NcKYEdvl3vspKjXox6RIG2VtaRe4JFvxG4rqp2Zuw==" + } } }, - "node_modules/ganache-core/node_modules/web3-provider-engine/node_modules/ltgt": { - "version": "2.2.1", - "license": "MIT" - }, - "node_modules/ganache-core/node_modules/web3-provider-engine/node_modules/memdown": { - "version": "1.4.1", - "license": "MIT", - "dependencies": { - "abstract-leveldown": "~2.7.1", - "functional-red-black-tree": "^1.0.1", - "immediate": "^3.2.3", - "inherits": "~2.0.1", - "ltgt": "~2.2.0", - "safe-buffer": "~5.1.1" + "@ethersproject/keccak256": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/keccak256/-/keccak256-5.7.0.tgz", + "integrity": "sha512-2UcPboeL/iW+pSg6vZ6ydF8tCnv3Iu/8tUmLLzWWGzxWKFFqOBQFLo6uLUv6BDrLgCDfN28RJ/wtByx+jZ4KBg==", + "requires": { + "@ethersproject/bytes": "^5.7.0", + "js-sha3": "0.8.0" } }, - "node_modules/ganache-core/node_modules/web3-provider-engine/node_modules/memdown/node_modules/abstract-leveldown": { - "version": "2.7.2", - "license": "MIT", - "dependencies": { - "xtend": "~4.0.0" - } + "@ethersproject/logger": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/logger/-/logger-5.7.0.tgz", + "integrity": "sha512-0odtFdXu/XHtjQXJYA3u9G0G8btm0ND5Cu8M7i5vhEcE8/HmF4Lbdqanwyv4uQTr2tx6b7fQRmgLrsnpQlmnig==" }, - "node_modules/ganache-core/node_modules/web3-provider-engine/node_modules/merkle-patricia-tree": { - "version": "2.3.2", - "license": "MPL-2.0", - "dependencies": { - "async": "^1.4.2", - "ethereumjs-util": "^5.0.0", - "level-ws": "0.0.0", - "levelup": "^1.2.1", - "memdown": "^1.0.0", - "readable-stream": "^2.0.0", - "rlp": "^2.0.0", - "semaphore": ">=1.0.1" + "@ethersproject/networks": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/@ethersproject/networks/-/networks-5.7.1.tgz", + "integrity": "sha512-n/MufjFYv3yFcUyfhnXotyDlNdFb7onmkSy8aQERi2PjNcnWQ66xXxa3XlS8nCcA8aJKJjIIMNJTC7tu80GwpQ==", + "requires": { + "@ethersproject/logger": "^5.7.0" } }, - "node_modules/ganache-core/node_modules/web3-provider-engine/node_modules/merkle-patricia-tree/node_modules/async": { - "version": "1.5.2", - "license": "MIT" - }, - "node_modules/ganache-core/node_modules/web3-provider-engine/node_modules/object-keys": { - "version": "0.4.0", - "license": "MIT" - }, - "node_modules/ganache-core/node_modules/web3-provider-engine/node_modules/safe-buffer": { - "version": "5.1.2", - "license": "MIT" - }, - "node_modules/ganache-core/node_modules/web3-provider-engine/node_modules/semver": { - "version": "5.4.1", - "license": "ISC", - "bin": { - "semver": "bin/semver" - } - }, - "node_modules/ganache-core/node_modules/web3-provider-engine/node_modules/string_decoder": { - "version": "0.10.31", - "license": "MIT" - }, - "node_modules/ganache-core/node_modules/web3-provider-engine/node_modules/ws": { - "version": "5.2.2", - "license": "MIT", - "dependencies": { - "async-limiter": "~1.0.0" - } - }, - "node_modules/ganache-core/node_modules/web3-providers-http": { - "version": "1.2.11", - "license": "LGPL-3.0", - "optional": true, - "dependencies": { - "web3-core-helpers": "1.2.11", - "xhr2-cookies": "1.1.0" - }, - "engines": { - "node": ">=8.0.0" + "@ethersproject/pbkdf2": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/pbkdf2/-/pbkdf2-5.7.0.tgz", + "integrity": "sha512-oR/dBRZR6GTyaofd86DehG72hY6NpAjhabkhxgr3X2FpJtJuodEl2auADWBZfhDHgVCbu3/H/Ocq2uC6dpNjjw==", + "requires": { + "@ethersproject/bytes": "^5.7.0", + "@ethersproject/sha2": "^5.7.0" } }, - "node_modules/ganache-core/node_modules/web3-providers-ipc": { - "version": "1.2.11", - "license": "LGPL-3.0", - "optional": true, - "dependencies": { - "oboe": "2.1.4", - "underscore": "1.9.1", - "web3-core-helpers": "1.2.11" - }, - "engines": { - "node": ">=8.0.0" + "@ethersproject/properties": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/properties/-/properties-5.7.0.tgz", + "integrity": "sha512-J87jy8suntrAkIZtecpxEPxY//szqr1mlBaYlQ0r4RCaiD2hjheqF9s1LVE8vVuJCXisjIP+JgtK/Do54ej4Sw==", + "requires": { + "@ethersproject/logger": "^5.7.0" } }, - "node_modules/ganache-core/node_modules/web3-providers-ws": { - "version": "1.2.11", - "license": "LGPL-3.0", - "optional": true, - "dependencies": { - "eventemitter3": "4.0.4", - "underscore": "1.9.1", - "web3-core-helpers": "1.2.11", - "websocket": "^1.0.31" + "@ethersproject/providers": { + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/@ethersproject/providers/-/providers-5.7.2.tgz", + "integrity": "sha512-g34EWZ1WWAVgr4aptGlVBF8mhl3VWjv+8hoAnzStu8Ah22VHBsuGzP17eb6xDVRzw895G4W7vvx60lFFur/1Rg==", + "requires": { + "@ethersproject/abstract-provider": "^5.7.0", + "@ethersproject/abstract-signer": "^5.7.0", + "@ethersproject/address": "^5.7.0", + "@ethersproject/base64": "^5.7.0", + "@ethersproject/basex": "^5.7.0", + "@ethersproject/bignumber": "^5.7.0", + "@ethersproject/bytes": "^5.7.0", + "@ethersproject/constants": "^5.7.0", + "@ethersproject/hash": "^5.7.0", + "@ethersproject/logger": "^5.7.0", + "@ethersproject/networks": "^5.7.0", + "@ethersproject/properties": "^5.7.0", + "@ethersproject/random": "^5.7.0", + "@ethersproject/rlp": "^5.7.0", + "@ethersproject/sha2": "^5.7.0", + "@ethersproject/strings": "^5.7.0", + "@ethersproject/transactions": "^5.7.0", + "@ethersproject/web": "^5.7.0", + "bech32": "1.1.4", + "ws": "7.4.6" }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/ganache-core/node_modules/web3-shh": { - "version": "1.2.11", - "license": "LGPL-3.0", - "optional": true, "dependencies": { - "web3-core": "1.2.11", - "web3-core-method": "1.2.11", - "web3-core-subscriptions": "1.2.11", - "web3-net": "1.2.11" - }, - "engines": { - "node": ">=8.0.0" + "ws": { + "version": "7.4.6", + "resolved": "https://registry.npmjs.org/ws/-/ws-7.4.6.tgz", + "integrity": "sha512-YmhHDO4MzaDLB+M9ym/mDA5z0naX8j7SIlT8f8z+I0VtzsRbekxEutHSme7NPS2qE8StCYQNUnfWdXta/Yu85A==", + "requires": {} + } } }, - "node_modules/ganache-core/node_modules/web3-utils": { - "version": "1.2.11", - "license": "LGPL-3.0", - "optional": true, - "dependencies": { - "bn.js": "^4.11.9", - "eth-lib": "0.2.8", - "ethereum-bloom-filters": "^1.0.6", - "ethjs-unit": "0.1.6", - "number-to-bn": "1.7.0", - "randombytes": "^2.1.0", - "underscore": "1.9.1", - "utf8": "3.0.0" - }, - "engines": { - "node": ">=8.0.0" + "@ethersproject/random": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/random/-/random-5.7.0.tgz", + "integrity": "sha512-19WjScqRA8IIeWclFme75VMXSBvi4e6InrUNuaR4s5pTF2qNhcGdCUwdxUVGtDDqC00sDLCO93jPQoDUH4HVmQ==", + "requires": { + "@ethersproject/bytes": "^5.7.0", + "@ethersproject/logger": "^5.7.0" } }, - "node_modules/ganache-core/node_modules/web3-utils/node_modules/eth-lib": { - "version": "0.2.8", - "license": "MIT", - "optional": true, - "dependencies": { - "bn.js": "^4.11.6", - "elliptic": "^6.4.0", - "xhr-request-promise": "^0.1.2" + "@ethersproject/rlp": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/rlp/-/rlp-5.7.0.tgz", + "integrity": "sha512-rBxzX2vK8mVF7b0Tol44t5Tb8gomOHkj5guL+HhzQ1yBh/ydjGnpw6at+X6Iw0Kp3OzzzkcKp8N9r0W4kYSs9w==", + "requires": { + "@ethersproject/bytes": "^5.7.0", + "@ethersproject/logger": "^5.7.0" } }, - "node_modules/ganache-core/node_modules/websocket": { - "version": "1.0.32", - "license": "Apache-2.0", - "dependencies": { - "bufferutil": "^4.0.1", - "debug": "^2.2.0", - "es5-ext": "^0.10.50", - "typedarray-to-buffer": "^3.1.5", - "utf-8-validate": "^5.0.2", - "yaeti": "^0.0.6" - }, - "engines": { - "node": ">=4.0.0" + "@ethersproject/sha2": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/sha2/-/sha2-5.7.0.tgz", + "integrity": "sha512-gKlH42riwb3KYp0reLsFTokByAKoJdgFCwI+CCiX/k+Jm2mbNs6oOaCjYQSlI1+XBVejwH2KrmCbMAT/GnRDQw==", + "requires": { + "@ethersproject/bytes": "^5.7.0", + "@ethersproject/logger": "^5.7.0", + "hash.js": "1.1.7" } }, - "node_modules/ganache-core/node_modules/websocket/node_modules/debug": { - "version": "2.6.9", - "license": "MIT", - "dependencies": { - "ms": "2.0.0" + "@ethersproject/signing-key": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/signing-key/-/signing-key-5.7.0.tgz", + "integrity": "sha512-MZdy2nL3wO0u7gkB4nA/pEf8lu1TlFswPNmy8AiYkfKTdO6eXBJyUdmHO/ehm/htHw9K/qF8ujnTyUAD+Ry54Q==", + "requires": { + "@ethersproject/bytes": "^5.7.0", + "@ethersproject/logger": "^5.7.0", + "@ethersproject/properties": "^5.7.0", + "bn.js": "^5.2.1", + "elliptic": "6.5.4", + "hash.js": "1.1.7" } }, - "node_modules/ganache-core/node_modules/websocket/node_modules/ms": { - "version": "2.0.0", - "license": "MIT" - }, - "node_modules/ganache-core/node_modules/whatwg-fetch": { - "version": "2.0.4", - "license": "MIT" - }, - "node_modules/ganache-core/node_modules/wrappy": { - "version": "1.0.2", - "license": "ISC" - }, - "node_modules/ganache-core/node_modules/ws": { - "version": "3.3.3", - "license": "MIT", - "optional": true, - "dependencies": { - "async-limiter": "~1.0.0", - "safe-buffer": "~5.1.0", - "ultron": "~1.1.0" + "@ethersproject/solidity": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/solidity/-/solidity-5.7.0.tgz", + "integrity": "sha512-HmabMd2Dt/raavyaGukF4XxizWKhKQ24DoLtdNbBmNKUOPqwjsKQSdV9GQtj9CBEea9DlzETlVER1gYeXXBGaA==", + "requires": { + "@ethersproject/bignumber": "^5.7.0", + "@ethersproject/bytes": "^5.7.0", + "@ethersproject/keccak256": "^5.7.0", + "@ethersproject/logger": "^5.7.0", + "@ethersproject/sha2": "^5.7.0", + "@ethersproject/strings": "^5.7.0" } }, - "node_modules/ganache-core/node_modules/ws/node_modules/safe-buffer": { - "version": "5.1.2", - "license": "MIT", - "optional": true - }, - "node_modules/ganache-core/node_modules/xhr": { - "version": "2.6.0", - "license": "MIT", - "dependencies": { - "global": "~4.4.0", - "is-function": "^1.0.1", - "parse-headers": "^2.0.0", - "xtend": "^4.0.0" + "@ethersproject/strings": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/strings/-/strings-5.7.0.tgz", + "integrity": "sha512-/9nu+lj0YswRNSH0NXYqrh8775XNyEdUQAuf3f+SmOrnVewcJ5SBNAjF7lpgehKi4abvNNXyf+HX86czCdJ8Mg==", + "requires": { + "@ethersproject/bytes": "^5.7.0", + "@ethersproject/constants": "^5.7.0", + "@ethersproject/logger": "^5.7.0" } }, - "node_modules/ganache-core/node_modules/xhr-request": { - "version": "1.1.0", - "license": "MIT", - "optional": true, - "dependencies": { - "buffer-to-arraybuffer": "^0.0.5", - "object-assign": "^4.1.1", - "query-string": "^5.0.1", - "simple-get": "^2.7.0", - "timed-out": "^4.0.1", - "url-set-query": "^1.0.0", - "xhr": "^2.0.4" + "@ethersproject/transactions": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/transactions/-/transactions-5.7.0.tgz", + "integrity": "sha512-kmcNicCp1lp8qanMTC3RIikGgoJ80ztTyvtsFvCYpSCfkjhD0jZ2LOrnbcuxuToLIUYYf+4XwD1rP+B/erDIhQ==", + "requires": { + "@ethersproject/address": "^5.7.0", + "@ethersproject/bignumber": "^5.7.0", + "@ethersproject/bytes": "^5.7.0", + "@ethersproject/constants": "^5.7.0", + "@ethersproject/keccak256": "^5.7.0", + "@ethersproject/logger": "^5.7.0", + "@ethersproject/properties": "^5.7.0", + "@ethersproject/rlp": "^5.7.0", + "@ethersproject/signing-key": "^5.7.0" } }, - "node_modules/ganache-core/node_modules/xhr-request-promise": { - "version": "0.1.3", - "license": "MIT", - "optional": true, - "dependencies": { - "xhr-request": "^1.1.0" + "@ethersproject/units": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/units/-/units-5.7.0.tgz", + "integrity": "sha512-pD3xLMy3SJu9kG5xDGI7+xhTEmGXlEqXU4OfNapmfnxLVY4EMSSRp7j1k7eezutBPH7RBN/7QPnwR7hzNlEFeg==", + "requires": { + "@ethersproject/bignumber": "^5.7.0", + "@ethersproject/constants": "^5.7.0", + "@ethersproject/logger": "^5.7.0" } }, - "node_modules/ganache-core/node_modules/xhr2-cookies": { - "version": "1.1.0", - "license": "MIT", - "optional": true, - "dependencies": { - "cookiejar": "^2.1.1" + "@ethersproject/wallet": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/wallet/-/wallet-5.7.0.tgz", + "integrity": "sha512-MhmXlJXEJFBFVKrDLB4ZdDzxcBxQ3rLyCkhNqVu3CDYvR97E+8r01UgrI+TI99Le+aYm/in/0vp86guJuM7FCA==", + "requires": { + "@ethersproject/abstract-provider": "^5.7.0", + "@ethersproject/abstract-signer": "^5.7.0", + "@ethersproject/address": "^5.7.0", + "@ethersproject/bignumber": "^5.7.0", + "@ethersproject/bytes": "^5.7.0", + "@ethersproject/hash": "^5.7.0", + "@ethersproject/hdnode": "^5.7.0", + "@ethersproject/json-wallets": "^5.7.0", + "@ethersproject/keccak256": "^5.7.0", + "@ethersproject/logger": "^5.7.0", + "@ethersproject/properties": "^5.7.0", + "@ethersproject/random": "^5.7.0", + "@ethersproject/signing-key": "^5.7.0", + "@ethersproject/transactions": "^5.7.0", + "@ethersproject/wordlists": "^5.7.0" } }, - "node_modules/ganache-core/node_modules/xtend": { - "version": "4.0.2", - "license": "MIT", - "engines": { - "node": ">=0.4" + "@ethersproject/web": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/@ethersproject/web/-/web-5.7.1.tgz", + "integrity": "sha512-Gueu8lSvyjBWL4cYsWsjh6MtMwM0+H4HvqFPZfB6dV8ctbP9zFAO73VG1cMWae0FLPCtz0peKPpZY8/ugJJX2w==", + "requires": { + "@ethersproject/base64": "^5.7.0", + "@ethersproject/bytes": "^5.7.0", + "@ethersproject/logger": "^5.7.0", + "@ethersproject/properties": "^5.7.0", + "@ethersproject/strings": "^5.7.0" } }, - "node_modules/ganache-core/node_modules/yaeti": { - "version": "0.0.6", - "license": "MIT", - "engines": { - "node": ">=0.10.32" + "@ethersproject/wordlists": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/wordlists/-/wordlists-5.7.0.tgz", + "integrity": "sha512-S2TFNJNfHWVHNE6cNDjbVlZ6MgE17MIxMbMg2zv3wn+3XSJGosL1m9ZVv3GXCf/2ymSsQ+hRI5IzoMJTG6aoVA==", + "requires": { + "@ethersproject/bytes": "^5.7.0", + "@ethersproject/hash": "^5.7.0", + "@ethersproject/logger": "^5.7.0", + "@ethersproject/properties": "^5.7.0", + "@ethersproject/strings": "^5.7.0" } }, - "node_modules/ganache-core/node_modules/yallist": { - "version": "3.1.1", - "license": "ISC" + "@fastify/busboy": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@fastify/busboy/-/busboy-2.1.0.tgz", + "integrity": "sha512-+KpH+QxZU7O4675t3mnkQKcZZg56u+K/Ct2K+N2AZYNVK8kyeo/bI18tI8aPm3tvNNRyTWfj6s5tnGNlcbQRsA==" }, - "node_modules/ganache/node_modules/@cspotcode/source-map-support": { - "version": "0.8.1", - "resolved": "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz", - "integrity": "sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==", - "extraneous": true, - "dependencies": { - "@jridgewell/trace-mapping": "0.3.9" + "@isaacs/cliui": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz", + "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==", + "peer": true, + "requires": { + "string-width": "^5.1.2", + "string-width-cjs": "npm:string-width@^4.2.0", + "strip-ansi": "^7.0.1", + "strip-ansi-cjs": "npm:strip-ansi@^6.0.1", + "wrap-ansi": "^8.1.0", + "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0" }, - "engines": { - "node": ">=12" - } - }, - "node_modules/ganache/node_modules/@cspotcode/source-map-support/node_modules/@jridgewell/trace-mapping": { - "version": "0.3.9", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz", - "integrity": "sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==", - "extraneous": true, "dependencies": { - "@jridgewell/resolve-uri": "^3.0.3", - "@jridgewell/sourcemap-codec": "^1.4.10" + "ansi-regex": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", + "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", + "peer": true + }, + "emoji-regex": { + "version": "9.2.2", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", + "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", + "peer": true + }, + "string-width": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", + "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", + "peer": true, + "requires": { + "eastasianwidth": "^0.2.0", + "emoji-regex": "^9.2.2", + "strip-ansi": "^7.0.1" + } + }, + "strip-ansi": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", + "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", + "peer": true, + "requires": { + "ansi-regex": "^6.0.1" + } + } } }, - "node_modules/ganache/node_modules/@discoveryjs/json-ext": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/@discoveryjs/json-ext/-/json-ext-0.5.7.tgz", - "integrity": "sha512-dBVuXR082gk3jsFp7Rd/JI4kytwGHecnCoTtXFb7DB6CNHp4rg5k1bhg0nWdLGLnOV71lmDzGQaLMy8iPLY0pw==", - "extraneous": true, - "engines": { - "node": ">=10.0.0" + "@ledgerhq/cryptoassets": { + "version": "5.53.0", + "resolved": "https://registry.npmjs.org/@ledgerhq/cryptoassets/-/cryptoassets-5.53.0.tgz", + "integrity": "sha512-M3ibc3LRuHid5UtL7FI3IC6nMEppvly98QHFoSa7lJU0HDzQxY6zHec/SPM4uuJUC8sXoGVAiRJDkgny54damw==", + "requires": { + "invariant": "2" } }, - "node_modules/ganache/node_modules/@jridgewell/gen-mapping": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.2.tgz", - "integrity": "sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A==", - "extraneous": true, - "dependencies": { - "@jridgewell/set-array": "^1.0.1", - "@jridgewell/sourcemap-codec": "^1.4.10", - "@jridgewell/trace-mapping": "^0.3.9" - }, - "engines": { - "node": ">=6.0.0" + "@ledgerhq/devices": { + "version": "5.51.1", + "resolved": "https://registry.npmjs.org/@ledgerhq/devices/-/devices-5.51.1.tgz", + "integrity": "sha512-4w+P0VkbjzEXC7kv8T1GJ/9AVaP9I6uasMZ/JcdwZBS3qwvKo5A5z9uGhP5c7TvItzcmPb44b5Mw2kT+WjUuAA==", + "requires": { + "@ledgerhq/errors": "^5.50.0", + "@ledgerhq/logs": "^5.50.0", + "rxjs": "6", + "semver": "^7.3.5" } }, - "node_modules/ganache/node_modules/@jridgewell/resolve-uri": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz", - "integrity": "sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==", - "extraneous": true, - "engines": { - "node": ">=6.0.0" - } + "@ledgerhq/errors": { + "version": "5.50.0", + "resolved": "https://registry.npmjs.org/@ledgerhq/errors/-/errors-5.50.0.tgz", + "integrity": "sha512-gu6aJ/BHuRlpU7kgVpy2vcYk6atjB4iauP2ymF7Gk0ez0Y/6VSMVSJvubeEQN+IV60+OBK0JgeIZG7OiHaw8ow==" }, - "node_modules/ganache/node_modules/@jridgewell/set-array": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz", - "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==", - "extraneous": true, - "engines": { - "node": ">=6.0.0" + "@ledgerhq/hw-app-eth": { + "version": "5.27.2", + "resolved": "https://registry.npmjs.org/@ledgerhq/hw-app-eth/-/hw-app-eth-5.27.2.tgz", + "integrity": "sha512-llNdrE894cCN8j6yxJEUniciyLVcLmu5N0UmIJLOObztG+5rOF4bX54h4SreTWK+E10Z0CzHSeyE5Lz/tVcqqQ==", + "requires": { + "@ledgerhq/cryptoassets": "^5.27.2", + "@ledgerhq/errors": "^5.26.0", + "@ledgerhq/hw-transport": "^5.26.0", + "bignumber.js": "^9.0.1", + "rlp": "^2.2.6" } }, - "node_modules/ganache/node_modules/@jridgewell/source-map": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.2.tgz", - "integrity": "sha512-m7O9o2uR8k2ObDysZYzdfhb08VuEml5oWGiosa1VdaPZ/A6QyPkAJuwN0Q1lhULOf6B7MtQmHENS743hWtCrgw==", - "extraneous": true, - "dependencies": { - "@jridgewell/gen-mapping": "^0.3.0", - "@jridgewell/trace-mapping": "^0.3.9" + "@ledgerhq/hw-transport": { + "version": "5.26.0", + "resolved": "https://registry.npmjs.org/@ledgerhq/hw-transport/-/hw-transport-5.26.0.tgz", + "integrity": "sha512-NFeJOJmyEfAX8uuIBTpocWHcz630sqPcXbu864Q+OCBm4EK5UOKV1h/pX7e0xgNIKY8zhJ/O4p4cIZp9tnXLHQ==", + "requires": { + "@ledgerhq/devices": "^5.26.0", + "@ledgerhq/errors": "^5.26.0", + "events": "^3.2.0" } }, - "node_modules/ganache/node_modules/@jridgewell/sourcemap-codec": { - "version": "1.4.14", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz", - "integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==", - "extraneous": true - }, - "node_modules/ganache/node_modules/@jridgewell/trace-mapping": { - "version": "0.3.17", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.17.tgz", - "integrity": "sha512-MCNzAp77qzKca9+W/+I0+sEpaUnZoeasnghNeVc41VZCEKaCH73Vq3BZZ/SzWIgrqE4H4ceI+p+b6C0mHf9T4g==", - "extraneous": true, - "dependencies": { - "@jridgewell/resolve-uri": "3.1.0", - "@jridgewell/sourcemap-codec": "1.4.14" + "@ledgerhq/hw-transport-node-hid": { + "version": "5.26.0", + "resolved": "https://registry.npmjs.org/@ledgerhq/hw-transport-node-hid/-/hw-transport-node-hid-5.26.0.tgz", + "integrity": "sha512-qhaefZVZatJ6UuK8Wb6WSFNOLWc2mxcv/xgsfKi5HJCIr4bPF/ecIeN+7fRcEaycxj4XykY6Z4A7zDVulfFH4w==", + "optional": true, + "requires": { + "@ledgerhq/devices": "^5.26.0", + "@ledgerhq/errors": "^5.26.0", + "@ledgerhq/hw-transport": "^5.26.0", + "@ledgerhq/hw-transport-node-hid-noevents": "^5.26.0", + "@ledgerhq/logs": "^5.26.0", + "lodash": "^4.17.20", + "node-hid": "1.3.0", + "usb": "^1.6.3" } }, - "node_modules/ganache/node_modules/@microsoft/api-extractor": { - "version": "7.20.1", - "resolved": "https://registry.npmjs.org/@microsoft/api-extractor/-/api-extractor-7.20.1.tgz", - "integrity": "sha512-T7cqcK+JpvHGOj7cD2ZCCWS7Xgru1uOqZwrV/FSUdyKVs5fopZcbBSuetwD/akst3O7Ypryg3UOLP54S/vnVmA==", - "extraneous": true, - "dependencies": { - "@microsoft/api-extractor-model": "7.16.0", - "@microsoft/tsdoc": "0.13.2", - "@microsoft/tsdoc-config": "~0.15.2", - "@rushstack/node-core-library": "3.45.1", - "@rushstack/rig-package": "0.3.8", - "@rushstack/ts-command-line": "4.10.7", - "colors": "~1.2.1", - "lodash": "~4.17.15", - "resolve": "~1.17.0", - "semver": "~7.3.0", - "source-map": "~0.6.1", - "typescript": "~4.5.2" + "@ledgerhq/hw-transport-node-hid-noevents": { + "version": "5.51.1", + "resolved": "https://registry.npmjs.org/@ledgerhq/hw-transport-node-hid-noevents/-/hw-transport-node-hid-noevents-5.51.1.tgz", + "integrity": "sha512-9wFf1L8ZQplF7XOY2sQGEeOhpmBRzrn+4X43kghZ7FBDoltrcK+s/D7S+7ffg3j2OySyP6vIIIgloXylao5Scg==", + "optional": true, + "requires": { + "@ledgerhq/devices": "^5.51.1", + "@ledgerhq/errors": "^5.50.0", + "@ledgerhq/hw-transport": "^5.51.1", + "@ledgerhq/logs": "^5.50.0", + "node-hid": "2.1.1" }, - "bin": { - "api-extractor": "bin/api-extractor" - } - }, - "node_modules/ganache/node_modules/@microsoft/api-extractor-model": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@microsoft/api-extractor-model/-/api-extractor-model-7.16.0.tgz", - "integrity": "sha512-0FOrbNIny8mzBrzQnSIkEjAXk0JMSnPmWYxt3ZDTPVg9S8xIPzB6lfgTg9+Mimu0RKCpGKBpd+v2WcR5vGzyUQ==", - "extraneous": true, "dependencies": { - "@microsoft/tsdoc": "0.13.2", - "@microsoft/tsdoc-config": "~0.15.2", - "@rushstack/node-core-library": "3.45.1" + "@ledgerhq/hw-transport": { + "version": "5.51.1", + "resolved": "https://registry.npmjs.org/@ledgerhq/hw-transport/-/hw-transport-5.51.1.tgz", + "integrity": "sha512-6wDYdbWrw9VwHIcoDnqWBaDFyviyjZWv6H9vz9Vyhe4Qd7TIFmbTl/eWs6hZvtZBza9K8y7zD8ChHwRI4s9tSw==", + "optional": true, + "requires": { + "@ledgerhq/devices": "^5.51.1", + "@ledgerhq/errors": "^5.50.0", + "events": "^3.3.0" + } + }, + "node-addon-api": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-3.2.1.tgz", + "integrity": "sha512-mmcei9JghVNDYydghQmeDX8KoAm0FAiYyIcUt/N4nhyAipB17pllZQDOJD2fotxABnt4Mdz+dKTO7eftLg4d0A==", + "optional": true + }, + "node-hid": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/node-hid/-/node-hid-2.1.1.tgz", + "integrity": "sha512-Skzhqow7hyLZU93eIPthM9yjot9lszg9xrKxESleEs05V2NcbUptZc5HFqzjOkSmL0sFlZFr3kmvaYebx06wrw==", + "optional": true, + "requires": { + "bindings": "^1.5.0", + "node-addon-api": "^3.0.2", + "prebuild-install": "^6.0.0" + } + }, + "prebuild-install": { + "version": "6.1.4", + "resolved": "https://registry.npmjs.org/prebuild-install/-/prebuild-install-6.1.4.tgz", + "integrity": "sha512-Z4vpywnK1lBg+zdPCVCsKq0xO66eEV9rWo2zrROGGiRS4JtueBOdlB1FnY8lcy7JsUud/Q3ijUxyWN26Ika0vQ==", + "optional": true, + "requires": { + "detect-libc": "^1.0.3", + "expand-template": "^2.0.3", + "github-from-package": "0.0.0", + "minimist": "^1.2.3", + "mkdirp-classic": "^0.5.3", + "napi-build-utils": "^1.0.1", + "node-abi": "^2.21.0", + "npmlog": "^4.0.1", + "pump": "^3.0.0", + "rc": "^1.2.7", + "simple-get": "^3.0.3", + "tar-fs": "^2.0.0", + "tunnel-agent": "^0.6.0" + } + } } }, - "node_modules/ganache/node_modules/@microsoft/api-extractor/node_modules/typescript": { - "version": "4.5.5", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.5.5.tgz", - "integrity": "sha512-TCTIul70LyWe6IJWT8QSYeA54WQe8EjQFU4wY52Fasj5UKx88LNYKCgBEHcOMOrFF1rKGbD8v/xcNWVUq9SymA==", - "extraneous": true, - "bin": { - "tsc": "bin/tsc", - "tsserver": "bin/tsserver" - }, - "engines": { - "node": ">=4.2.0" + "@ledgerhq/hw-transport-u2f": { + "version": "5.26.0", + "resolved": "https://registry.npmjs.org/@ledgerhq/hw-transport-u2f/-/hw-transport-u2f-5.26.0.tgz", + "integrity": "sha512-QTxP1Rsh+WZ184LUOelYVLeaQl3++V3I2jFik+l9JZtakwEHjD0XqOT750xpYNL/vfHsy31Wlz+oicdxGzFk+w==", + "requires": { + "@ledgerhq/errors": "^5.26.0", + "@ledgerhq/hw-transport": "^5.26.0", + "@ledgerhq/logs": "^5.26.0", + "u2f-api": "0.2.7" } }, - "node_modules/ganache/node_modules/@microsoft/tsdoc": { - "version": "0.13.2", - "resolved": "https://registry.npmjs.org/@microsoft/tsdoc/-/tsdoc-0.13.2.tgz", - "integrity": "sha512-WrHvO8PDL8wd8T2+zBGKrMwVL5IyzR3ryWUsl0PXgEV0QHup4mTLi0QcATefGI6Gx9Anu7vthPyyyLpY0EpiQg==", - "extraneous": true + "@ledgerhq/logs": { + "version": "5.50.0", + "resolved": "https://registry.npmjs.org/@ledgerhq/logs/-/logs-5.50.0.tgz", + "integrity": "sha512-swKHYCOZUGyVt4ge0u8a7AwNcA//h4nx5wIi0sruGye1IJ5Cva0GyK9L2/WdX+kWVTKp92ZiEo1df31lrWGPgA==" }, - "node_modules/ganache/node_modules/@microsoft/tsdoc-config": { - "version": "0.15.2", - "resolved": "https://registry.npmjs.org/@microsoft/tsdoc-config/-/tsdoc-config-0.15.2.tgz", - "integrity": "sha512-mK19b2wJHSdNf8znXSMYVShAHktVr/ib0Ck2FA3lsVBSEhSI/TfXT7DJQkAYgcztTuwazGcg58ZjYdk0hTCVrA==", - "extraneous": true, - "dependencies": { - "@microsoft/tsdoc": "0.13.2", - "ajv": "~6.12.6", - "jju": "~1.4.0", - "resolve": "~1.19.0" + "@maticnetwork/maticjs": { + "version": "3.7.7", + "resolved": "https://registry.npmjs.org/@maticnetwork/maticjs/-/maticjs-3.7.7.tgz", + "integrity": "sha512-rzcxDSQNoqwM5SjdBN/a5trWBMchJ+amHqGsDDVQmhUDgUvzPM53QS5ZFVanX86jAGcKLLyI24kgEyTnMuzdaA==", + "requires": { + "@ethereumjs/block": "^3.6.2", + "ethereumjs-util": "^7.1.4", + "merkle-patricia-tree": "^4.2.4", + "node-fetch": "^2.6.1" } }, - "node_modules/ganache/node_modules/@microsoft/tsdoc-config/node_modules/resolve": { - "version": "1.19.0", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.19.0.tgz", - "integrity": "sha512-rArEXAgsBG4UgRGcynxWIWKFvh/XZCcS8UJdHhwy91zwAvCZIbcs+vAbflgBnNjYMs/i/i+/Ux6IZhML1yPvxg==", - "extraneous": true, + "@maticnetwork/maticjs-ethers": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@maticnetwork/maticjs-ethers/-/maticjs-ethers-1.0.3.tgz", + "integrity": "sha512-paGulmLG62We/pyOVH3Q7mZd/E/SGFKa+rXtyvpoMB8v5oFn/yTtoKvLWyIoZ8zBi4JrjSegKL+/US5+OibYwQ==", + "requires": { + "ethers": "^5.5.1" + }, "dependencies": { - "is-core-module": "^2.1.0", - "path-parse": "^1.0.6" + "ethers": { + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/ethers/-/ethers-5.7.2.tgz", + "integrity": "sha512-wswUsmWo1aOK8rR7DIKiWSw9DbLWe6x98Jrn8wcTflTVvaXhAMaB5zGAXy0GYQEQp9iO1iSHWVyARQm11zUtyg==", + "requires": { + "@ethersproject/abi": "5.7.0", + "@ethersproject/abstract-provider": "5.7.0", + "@ethersproject/abstract-signer": "5.7.0", + "@ethersproject/address": "5.7.0", + "@ethersproject/base64": "5.7.0", + "@ethersproject/basex": "5.7.0", + "@ethersproject/bignumber": "5.7.0", + "@ethersproject/bytes": "5.7.0", + "@ethersproject/constants": "5.7.0", + "@ethersproject/contracts": "5.7.0", + "@ethersproject/hash": "5.7.0", + "@ethersproject/hdnode": "5.7.0", + "@ethersproject/json-wallets": "5.7.0", + "@ethersproject/keccak256": "5.7.0", + "@ethersproject/logger": "5.7.0", + "@ethersproject/networks": "5.7.1", + "@ethersproject/pbkdf2": "5.7.0", + "@ethersproject/properties": "5.7.0", + "@ethersproject/providers": "5.7.2", + "@ethersproject/random": "5.7.0", + "@ethersproject/rlp": "5.7.0", + "@ethersproject/sha2": "5.7.0", + "@ethersproject/signing-key": "5.7.0", + "@ethersproject/solidity": "5.7.0", + "@ethersproject/strings": "5.7.0", + "@ethersproject/transactions": "5.7.0", + "@ethersproject/units": "5.7.0", + "@ethersproject/wallet": "5.7.0", + "@ethersproject/web": "5.7.1", + "@ethersproject/wordlists": "5.7.0" + } + } } }, - "node_modules/ganache/node_modules/@rushstack/node-core-library": { - "version": "3.45.1", - "resolved": "https://registry.npmjs.org/@rushstack/node-core-library/-/node-core-library-3.45.1.tgz", - "integrity": "sha512-BwdssTNe007DNjDBxJgInHg8ePytIPyT0La7ZZSQZF9+rSkT42AygXPGvbGsyFfEntjr4X37zZSJI7yGzL16cQ==", - "extraneous": true, - "dependencies": { - "@types/node": "12.20.24", - "colors": "~1.2.1", - "fs-extra": "~7.0.1", - "import-lazy": "~4.0.0", - "jju": "~1.4.0", - "resolve": "~1.17.0", - "semver": "~7.3.0", - "timsort": "~0.3.0", - "z-schema": "~5.0.2" + "@maticnetwork/maticjs-web3": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@maticnetwork/maticjs-web3/-/maticjs-web3-1.0.4.tgz", + "integrity": "sha512-cMnp42jjGNfVZRL80yUYfD9abcyUC2VpKvjFQtU44A3A0M9sbCtOOMMkE4k8FWoccxIPi891rtc+nowdNahKxg==", + "requires": { + "web3": "^1.8.0" } }, - "node_modules/ganache/node_modules/@rushstack/node-core-library/node_modules/@types/node": { - "version": "12.20.24", - "resolved": "https://registry.npmjs.org/@types/node/-/node-12.20.24.tgz", - "integrity": "sha512-yxDeaQIAJlMav7fH5AQqPH1u8YIuhYJXYBzxaQ4PifsU0GDO38MSdmEDeRlIxrKbC6NbEaaEHDanWb+y30U8SQ==", - "extraneous": true - }, - "node_modules/ganache/node_modules/@rushstack/rig-package": { - "version": "0.3.8", - "resolved": "https://registry.npmjs.org/@rushstack/rig-package/-/rig-package-0.3.8.tgz", - "integrity": "sha512-MDWg1xovea99PWloSiYMjFcCLsrdjFtYt6aOyHNs5ojn5mxrzR6U9F83hvbQjTWnKPMvZtr0vcek+4n+OQOp3Q==", - "extraneous": true, + "@metamask/eth-sig-util": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@metamask/eth-sig-util/-/eth-sig-util-4.0.1.tgz", + "integrity": "sha512-tghyZKLHZjcdlDqCA3gNZmLeR0XvOE9U1qoQO9ohyAZT6Pya+H9vkBPcsyXytmYLNgVoin7CKCmweo/R43V+tQ==", + "requires": { + "ethereumjs-abi": "^0.6.8", + "ethereumjs-util": "^6.2.1", + "ethjs-util": "^0.1.6", + "tweetnacl": "^1.0.3", + "tweetnacl-util": "^0.15.1" + }, "dependencies": { - "resolve": "~1.17.0", - "strip-json-comments": "~3.1.1" + "@types/bn.js": { + "version": "4.11.6", + "resolved": "https://registry.npmjs.org/@types/bn.js/-/bn.js-4.11.6.tgz", + "integrity": "sha512-pqr857jrp2kPuO9uRjZ3PwnJTjoQy+fcdxvBTvHm6dkmEL9q+hDD/2j/0ELOBPtPnS8LjCX0gI9nbl8lVkadpg==", + "requires": { + "@types/node": "*" + } + }, + "bn.js": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==" + }, + "ethereum-cryptography": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-0.1.3.tgz", + "integrity": "sha512-w8/4x1SGGzc+tO97TASLja6SLd3fRIK2tLVcV2Gx4IB21hE19atll5Cq9o3d0ZmAYC/8aw0ipieTSiekAea4SQ==", + "requires": { + "@types/pbkdf2": "^3.0.0", + "@types/secp256k1": "^4.0.1", + "blakejs": "^1.1.0", + "browserify-aes": "^1.2.0", + "bs58check": "^2.1.2", + "create-hash": "^1.2.0", + "create-hmac": "^1.1.7", + "hash.js": "^1.1.7", + "keccak": "^3.0.0", + "pbkdf2": "^3.0.17", + "randombytes": "^2.1.0", + "safe-buffer": "^5.1.2", + "scrypt-js": "^3.0.0", + "secp256k1": "^4.0.1", + "setimmediate": "^1.0.5" + } + }, + "ethereumjs-util": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-6.2.1.tgz", + "integrity": "sha512-W2Ktez4L01Vexijrm5EB6w7dg4n/TgpoYU4avuT5T3Vmnw/eCRtiBrJfQYS/DCSvDIOLn2k57GcHdeBcgVxAqw==", + "requires": { + "@types/bn.js": "^4.11.3", + "bn.js": "^4.11.0", + "create-hash": "^1.1.2", + "elliptic": "^6.5.2", + "ethereum-cryptography": "^0.1.3", + "ethjs-util": "0.1.6", + "rlp": "^2.2.3" + } + } } }, - "node_modules/ganache/node_modules/@rushstack/ts-command-line": { - "version": "4.10.7", - "resolved": "https://registry.npmjs.org/@rushstack/ts-command-line/-/ts-command-line-4.10.7.tgz", - "integrity": "sha512-CjS+DfNXUSO5Ab2wD1GBGtUTnB02OglRWGqfaTcac9Jn45V5MeUOsq/wA8wEeS5Y/3TZ2P1k+IWdVDiuOFP9Og==", - "extraneous": true, - "dependencies": { - "@types/argparse": "1.0.38", - "argparse": "~1.0.9", - "colors": "~1.2.1", - "string-argv": "~0.3.1" + "@noble/curves": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@noble/curves/-/curves-1.1.0.tgz", + "integrity": "sha512-091oBExgENk/kGj3AZmtBDMpxQPDtxQABR2B9lb1JbVTs6ytdzZNwvhxQ4MWasRNEzlbEH8jCWFCwhF/Obj5AA==", + "requires": { + "@noble/hashes": "1.3.1" } }, - "node_modules/ganache/node_modules/@trufflesuite/bigint-buffer": { - "version": "1.1.10", - "resolved": "https://registry.npmjs.org/@trufflesuite/bigint-buffer/-/bigint-buffer-1.1.10.tgz", - "integrity": "sha512-pYIQC5EcMmID74t26GCC67946mgTJFiLXOT/BYozgrd4UEY2JHEGLhWi9cMiQCt5BSqFEvKkCHNnoj82SRjiEw==", - "hasInstallScript": true, - "inBundle": true, - "license": "Apache-2.0", - "dependencies": { - "node-gyp-build": "4.4.0" - }, - "engines": { - "node": ">= 14.0.0" - } + "@noble/hashes": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.3.1.tgz", + "integrity": "sha512-EbqwksQwz9xDRGfDST86whPBgM65E0OH/pCgqW0GBVzO22bNE+NuIbeTb714+IfSjU3aRk47EUvXIb5bTsenKA==" }, - "node_modules/ganache/node_modules/@trufflesuite/bigint-buffer/node_modules/node-gyp-build": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.4.0.tgz", - "integrity": "sha512-amJnQCcgtRVw9SvoebO3BKGESClrfXGCUTX9hSn1OuGQTQBOZmVd0Z0OlecpuRksKvbsUqALE8jls/ErClAPuQ==", - "inBundle": true, - "license": "MIT", - "bin": { - "node-gyp-build": "bin.js", - "node-gyp-build-optional": "optional.js", - "node-gyp-build-test": "build-test.js" - } + "@noble/secp256k1": { + "version": "1.7.1", + "resolved": "https://registry.npmjs.org/@noble/secp256k1/-/secp256k1-1.7.1.tgz", + "integrity": "sha512-hOUk6AyBFmqVrv7k5WAw/LpszxVbj9gGN4JRkIX52fdFAj1UA61KXmZDvqVEm+pOyec3+fIeZB02LYa/pWOArw==" }, - "node_modules/ganache/node_modules/@trufflesuite/uws-js-unofficial": { - "version": "20.30.0-unofficial.0", - "resolved": "https://registry.npmjs.org/@trufflesuite/uws-js-unofficial/-/uws-js-unofficial-20.30.0-unofficial.0.tgz", - "integrity": "sha512-r5X0aOQcuT6pLwTRLD+mPnAM/nlKtvIK4Z+My++A8tTOR0qTjNRx8UB8jzRj3D+p9PMAp5LnpCUUGmz7/TppwA==", - "dependencies": { - "ws": "8.13.0" - }, - "optionalDependencies": { - "bufferutil": "4.0.7", - "utf-8-validate": "6.0.3" - } - }, - "node_modules/ganache/node_modules/@trufflesuite/uws-js-unofficial/node_modules/bufferutil": { - "version": "4.0.7", - "resolved": "https://registry.npmjs.org/bufferutil/-/bufferutil-4.0.7.tgz", - "integrity": "sha512-kukuqc39WOHtdxtw4UScxF/WVnMFVSQVKhtx3AjZJzhd0RGZZldcrfSEbVsWWe6KNH253574cq5F+wpv0G9pJw==", - "hasInstallScript": true, - "optional": true, - "dependencies": { - "node-gyp-build": "^4.3.0" + "@nomicfoundation/ethereumjs-block": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/@nomicfoundation/ethereumjs-block/-/ethereumjs-block-5.0.2.tgz", + "integrity": "sha512-hSe6CuHI4SsSiWWjHDIzWhSiAVpzMUcDRpWYzN0T9l8/Rz7xNn3elwVOJ/tAyS0LqL6vitUD78Uk7lQDXZun7Q==", + "requires": { + "@nomicfoundation/ethereumjs-common": "4.0.2", + "@nomicfoundation/ethereumjs-rlp": "5.0.2", + "@nomicfoundation/ethereumjs-trie": "6.0.2", + "@nomicfoundation/ethereumjs-tx": "5.0.2", + "@nomicfoundation/ethereumjs-util": "9.0.2", + "ethereum-cryptography": "0.1.3", + "ethers": "^5.7.1" }, - "engines": { - "node": ">=6.14.2" - } - }, - "node_modules/ganache/node_modules/@trufflesuite/uws-js-unofficial/node_modules/utf-8-validate": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/utf-8-validate/-/utf-8-validate-6.0.3.tgz", - "integrity": "sha512-uIuGf9TWQ/y+0Lp+KGZCMuJWc3N9BHA+l/UmHd/oUHwJJDeysyTRxNQVkbzsIWfGFbRe3OcgML/i0mvVRPOyDA==", - "hasInstallScript": true, - "optional": true, "dependencies": { - "node-gyp-build": "^4.3.0" - }, - "engines": { - "node": ">=6.14.2" + "ethereum-cryptography": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-0.1.3.tgz", + "integrity": "sha512-w8/4x1SGGzc+tO97TASLja6SLd3fRIK2tLVcV2Gx4IB21hE19atll5Cq9o3d0ZmAYC/8aw0ipieTSiekAea4SQ==", + "requires": { + "@types/pbkdf2": "^3.0.0", + "@types/secp256k1": "^4.0.1", + "blakejs": "^1.1.0", + "browserify-aes": "^1.2.0", + "bs58check": "^2.1.2", + "create-hash": "^1.2.0", + "create-hmac": "^1.1.7", + "hash.js": "^1.1.7", + "keccak": "^3.0.0", + "pbkdf2": "^3.0.17", + "randombytes": "^2.1.0", + "safe-buffer": "^5.1.2", + "scrypt-js": "^3.0.0", + "secp256k1": "^4.0.1", + "setimmediate": "^1.0.5" + } + }, + "ethers": { + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/ethers/-/ethers-5.7.2.tgz", + "integrity": "sha512-wswUsmWo1aOK8rR7DIKiWSw9DbLWe6x98Jrn8wcTflTVvaXhAMaB5zGAXy0GYQEQp9iO1iSHWVyARQm11zUtyg==", + "requires": { + "@ethersproject/abi": "5.7.0", + "@ethersproject/abstract-provider": "5.7.0", + "@ethersproject/abstract-signer": "5.7.0", + "@ethersproject/address": "5.7.0", + "@ethersproject/base64": "5.7.0", + "@ethersproject/basex": "5.7.0", + "@ethersproject/bignumber": "5.7.0", + "@ethersproject/bytes": "5.7.0", + "@ethersproject/constants": "5.7.0", + "@ethersproject/contracts": "5.7.0", + "@ethersproject/hash": "5.7.0", + "@ethersproject/hdnode": "5.7.0", + "@ethersproject/json-wallets": "5.7.0", + "@ethersproject/keccak256": "5.7.0", + "@ethersproject/logger": "5.7.0", + "@ethersproject/networks": "5.7.1", + "@ethersproject/pbkdf2": "5.7.0", + "@ethersproject/properties": "5.7.0", + "@ethersproject/providers": "5.7.2", + "@ethersproject/random": "5.7.0", + "@ethersproject/rlp": "5.7.0", + "@ethersproject/sha2": "5.7.0", + "@ethersproject/signing-key": "5.7.0", + "@ethersproject/solidity": "5.7.0", + "@ethersproject/strings": "5.7.0", + "@ethersproject/transactions": "5.7.0", + "@ethersproject/units": "5.7.0", + "@ethersproject/wallet": "5.7.0", + "@ethersproject/web": "5.7.1", + "@ethersproject/wordlists": "5.7.0" + } + } } }, - "node_modules/ganache/node_modules/@trufflesuite/uws-js-unofficial/node_modules/ws": { - "version": "8.13.0", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.13.0.tgz", - "integrity": "sha512-x9vcZYTrFPC7aSIbj7sRCYo7L/Xb8Iy+pW0ng0wt2vCJv7M9HOMy0UoN3rr+IFC7hb7vXoqS+P9ktyLLLhO+LA==", - "engines": { - "node": ">=10.0.0" - }, - "peerDependencies": { - "bufferutil": "^4.0.1", - "utf-8-validate": ">=5.0.2" + "@nomicfoundation/ethereumjs-blockchain": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/@nomicfoundation/ethereumjs-blockchain/-/ethereumjs-blockchain-7.0.2.tgz", + "integrity": "sha512-8UUsSXJs+MFfIIAKdh3cG16iNmWzWC/91P40sazNvrqhhdR/RtGDlFk2iFTGbBAZPs2+klZVzhRX8m2wvuvz3w==", + "requires": { + "@nomicfoundation/ethereumjs-block": "5.0.2", + "@nomicfoundation/ethereumjs-common": "4.0.2", + "@nomicfoundation/ethereumjs-ethash": "3.0.2", + "@nomicfoundation/ethereumjs-rlp": "5.0.2", + "@nomicfoundation/ethereumjs-trie": "6.0.2", + "@nomicfoundation/ethereumjs-tx": "5.0.2", + "@nomicfoundation/ethereumjs-util": "9.0.2", + "abstract-level": "^1.0.3", + "debug": "^4.3.3", + "ethereum-cryptography": "0.1.3", + "level": "^8.0.0", + "lru-cache": "^5.1.1", + "memory-level": "^1.0.0" }, - "peerDependenciesMeta": { - "bufferutil": { - "optional": true - }, - "utf-8-validate": { - "optional": true + "dependencies": { + "ethereum-cryptography": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-0.1.3.tgz", + "integrity": "sha512-w8/4x1SGGzc+tO97TASLja6SLd3fRIK2tLVcV2Gx4IB21hE19atll5Cq9o3d0ZmAYC/8aw0ipieTSiekAea4SQ==", + "requires": { + "@types/pbkdf2": "^3.0.0", + "@types/secp256k1": "^4.0.1", + "blakejs": "^1.1.0", + "browserify-aes": "^1.2.0", + "bs58check": "^2.1.2", + "create-hash": "^1.2.0", + "create-hmac": "^1.1.7", + "hash.js": "^1.1.7", + "keccak": "^3.0.0", + "pbkdf2": "^3.0.17", + "randombytes": "^2.1.0", + "safe-buffer": "^5.1.2", + "scrypt-js": "^3.0.0", + "secp256k1": "^4.0.1", + "setimmediate": "^1.0.5" + } } } }, - "node_modules/ganache/node_modules/@tsconfig/node10": { - "version": "1.0.9", - "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.9.tgz", - "integrity": "sha512-jNsYVVxU8v5g43Erja32laIDHXeoNvFEpX33OK4d6hljo3jDhCBDhx5dhCCTMWUojscpAagGiRkBKxpdl9fxqA==", - "extraneous": true - }, - "node_modules/ganache/node_modules/@tsconfig/node12": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/@tsconfig/node12/-/node12-1.0.11.tgz", - "integrity": "sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==", - "extraneous": true - }, - "node_modules/ganache/node_modules/@tsconfig/node14": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/@tsconfig/node14/-/node14-1.0.3.tgz", - "integrity": "sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==", - "extraneous": true - }, - "node_modules/ganache/node_modules/@tsconfig/node16": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.3.tgz", - "integrity": "sha512-yOlFc+7UtL/89t2ZhjPvvB/DeAr3r+Dq58IgzsFkOAvVC6NMJXmCGjbptdXdR9qsX7pKcTL+s87FtYREi2dEEQ==", - "extraneous": true - }, - "node_modules/ganache/node_modules/@types/abstract-leveldown": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@types/abstract-leveldown/-/abstract-leveldown-7.2.0.tgz", - "integrity": "sha512-q5veSX6zjUy/DlDhR4Y4cU0k2Ar+DT2LUraP00T19WLmTO6Se1djepCCaqU6nQrwcJ5Hyo/CWqxTzrrFg8eqbQ==", - "extraneous": true - }, - "node_modules/ganache/node_modules/@types/argparse": { - "version": "1.0.38", - "resolved": "https://registry.npmjs.org/@types/argparse/-/argparse-1.0.38.tgz", - "integrity": "sha512-ebDJ9b0e702Yr7pWgB0jzm+CX4Srzz8RcXtLJDJB+BSccqMa36uyH/zUsSYao5+BD1ytv3k3rPYCq4mAE1hsXA==", - "extraneous": true - }, - "node_modules/ganache/node_modules/@types/bn.js": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/@types/bn.js/-/bn.js-5.1.0.tgz", - "integrity": "sha512-QSSVYj7pYFN49kW77o2s9xTCwZ8F2xLbjLLSEVh8D2F4JUhZtPAGOFLTD+ffqksBx/u4cE/KImFjyhqCjn/LIA==", - "dependencies": { - "@types/node": "*" + "@nomicfoundation/ethereumjs-common": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/@nomicfoundation/ethereumjs-common/-/ethereumjs-common-4.0.2.tgz", + "integrity": "sha512-I2WGP3HMGsOoycSdOTSqIaES0ughQTueOsddJ36aYVpI3SN8YSusgRFLwzDJwRFVIYDKx/iJz0sQ5kBHVgdDwg==", + "requires": { + "@nomicfoundation/ethereumjs-util": "9.0.2", + "crc-32": "^1.2.0" } }, - "node_modules/ganache/node_modules/@types/eslint": { - "version": "8.4.10", - "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-8.4.10.tgz", - "integrity": "sha512-Sl/HOqN8NKPmhWo2VBEPm0nvHnu2LL3v9vKo8MEq0EtbJ4eVzGPl41VNPvn5E1i5poMk4/XD8UriLHpJvEP/Nw==", - "extraneous": true, + "@nomicfoundation/ethereumjs-ethash": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@nomicfoundation/ethereumjs-ethash/-/ethereumjs-ethash-3.0.2.tgz", + "integrity": "sha512-8PfoOQCcIcO9Pylq0Buijuq/O73tmMVURK0OqdjhwqcGHYC2PwhbajDh7GZ55ekB0Px197ajK3PQhpKoiI/UPg==", + "requires": { + "@nomicfoundation/ethereumjs-block": "5.0.2", + "@nomicfoundation/ethereumjs-rlp": "5.0.2", + "@nomicfoundation/ethereumjs-util": "9.0.2", + "abstract-level": "^1.0.3", + "bigint-crypto-utils": "^3.0.23", + "ethereum-cryptography": "0.1.3" + }, "dependencies": { - "@types/estree": "*", - "@types/json-schema": "*" + "ethereum-cryptography": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-0.1.3.tgz", + "integrity": "sha512-w8/4x1SGGzc+tO97TASLja6SLd3fRIK2tLVcV2Gx4IB21hE19atll5Cq9o3d0ZmAYC/8aw0ipieTSiekAea4SQ==", + "requires": { + "@types/pbkdf2": "^3.0.0", + "@types/secp256k1": "^4.0.1", + "blakejs": "^1.1.0", + "browserify-aes": "^1.2.0", + "bs58check": "^2.1.2", + "create-hash": "^1.2.0", + "create-hmac": "^1.1.7", + "hash.js": "^1.1.7", + "keccak": "^3.0.0", + "pbkdf2": "^3.0.17", + "randombytes": "^2.1.0", + "safe-buffer": "^5.1.2", + "scrypt-js": "^3.0.0", + "secp256k1": "^4.0.1", + "setimmediate": "^1.0.5" + } + } } }, - "node_modules/ganache/node_modules/@types/eslint-scope": { - "version": "3.7.4", - "resolved": "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.4.tgz", - "integrity": "sha512-9K4zoImiZc3HlIp6AVUDE4CWYx22a+lhSZMYNpbjW04+YF0KWj4pJXnEMjdnFTiQibFFmElcsasJXDbdI/EPhA==", - "extraneous": true, + "@nomicfoundation/ethereumjs-evm": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/@nomicfoundation/ethereumjs-evm/-/ethereumjs-evm-2.0.2.tgz", + "integrity": "sha512-rBLcUaUfANJxyOx9HIdMX6uXGin6lANCulIm/pjMgRqfiCRMZie3WKYxTSd8ZE/d+qT+zTedBF4+VHTdTSePmQ==", + "requires": { + "@ethersproject/providers": "^5.7.1", + "@nomicfoundation/ethereumjs-common": "4.0.2", + "@nomicfoundation/ethereumjs-tx": "5.0.2", + "@nomicfoundation/ethereumjs-util": "9.0.2", + "debug": "^4.3.3", + "ethereum-cryptography": "0.1.3", + "mcl-wasm": "^0.7.1", + "rustbn.js": "~0.2.0" + }, "dependencies": { - "@types/eslint": "*", - "@types/estree": "*" + "ethereum-cryptography": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-0.1.3.tgz", + "integrity": "sha512-w8/4x1SGGzc+tO97TASLja6SLd3fRIK2tLVcV2Gx4IB21hE19atll5Cq9o3d0ZmAYC/8aw0ipieTSiekAea4SQ==", + "requires": { + "@types/pbkdf2": "^3.0.0", + "@types/secp256k1": "^4.0.1", + "blakejs": "^1.1.0", + "browserify-aes": "^1.2.0", + "bs58check": "^2.1.2", + "create-hash": "^1.2.0", + "create-hmac": "^1.1.7", + "hash.js": "^1.1.7", + "keccak": "^3.0.0", + "pbkdf2": "^3.0.17", + "randombytes": "^2.1.0", + "safe-buffer": "^5.1.2", + "scrypt-js": "^3.0.0", + "secp256k1": "^4.0.1", + "setimmediate": "^1.0.5" + } + } } }, - "node_modules/ganache/node_modules/@types/estree": { - "version": "0.0.50", - "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.50.tgz", - "integrity": "sha512-C6N5s2ZFtuZRj54k2/zyRhNDjJwwcViAM3Nbm8zjBpbqAdZ00mr0CFxvSKeO8Y/e03WVFLpQMdHYVfUd6SB+Hw==", - "extraneous": true - }, - "node_modules/ganache/node_modules/@types/json-schema": { - "version": "7.0.11", - "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.11.tgz", - "integrity": "sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ==", - "extraneous": true - }, - "node_modules/ganache/node_modules/@types/lru-cache": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/@types/lru-cache/-/lru-cache-5.1.1.tgz", - "integrity": "sha512-ssE3Vlrys7sdIzs5LOxCzTVMsU7i9oa/IaW92wF32JFb3CVczqOkru2xspuKczHEbG3nvmPY7IFqVmGGHdNbYw==" - }, - "node_modules/ganache/node_modules/@types/mocha": { - "version": "9.0.0", - "resolved": "https://registry.npmjs.org/@types/mocha/-/mocha-9.0.0.tgz", - "integrity": "sha512-scN0hAWyLVAvLR9AyW7HoFF5sJZglyBsbPuHO4fv7JRvfmPBMfp1ozWqOf/e4wwPNxezBZXRfWzMb6iFLgEVRA==", - "extraneous": true - }, - "node_modules/ganache/node_modules/@types/node": { - "version": "17.0.0", - "resolved": "https://registry.npmjs.org/@types/node/-/node-17.0.0.tgz", - "integrity": "sha512-eMhwJXc931Ihh4tkU+Y7GiLzT/y/DBNpNtr4yU9O2w3SYBsr9NaOPhQlLKRmoWtI54uNwuo0IOUFQjVOTZYRvw==" - }, - "node_modules/ganache/node_modules/@types/seedrandom": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/@types/seedrandom/-/seedrandom-3.0.1.tgz", - "integrity": "sha512-giB9gzDeiCeloIXDgzFBCgjj1k4WxcDrZtGl6h1IqmUPlxF+Nx8Ve+96QCyDZ/HseB/uvDsKbpib9hU5cU53pw==" + "@nomicfoundation/ethereumjs-rlp": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/@nomicfoundation/ethereumjs-rlp/-/ethereumjs-rlp-5.0.2.tgz", + "integrity": "sha512-QwmemBc+MMsHJ1P1QvPl8R8p2aPvvVcKBbvHnQOKBpBztEo0omN0eaob6FeZS/e3y9NSe+mfu3nNFBHszqkjTA==" }, - "node_modules/ganache/node_modules/@ungap/promise-all-settled": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@ungap/promise-all-settled/-/promise-all-settled-1.1.2.tgz", - "integrity": "sha512-sL/cEvJWAnClXw0wHk85/2L0G6Sj8UB0Ctc1TEMbKSsmpRosqhwj9gWgFRZSrBr2f9tiXISwNhCPmlfqUqyb9Q==", - "extraneous": true - }, - "node_modules/ganache/node_modules/@webassemblyjs/ast": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.11.1.tgz", - "integrity": "sha512-ukBh14qFLjxTQNTXocdyksN5QdM28S1CxHt2rdskFyL+xFV7VremuBLVbmCePj+URalXBENx/9Lm7lnhihtCSw==", - "extraneous": true, - "dependencies": { - "@webassemblyjs/helper-numbers": "1.11.1", - "@webassemblyjs/helper-wasm-bytecode": "1.11.1" - } - }, - "node_modules/ganache/node_modules/@webassemblyjs/floating-point-hex-parser": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.1.tgz", - "integrity": "sha512-iGRfyc5Bq+NnNuX8b5hwBrRjzf0ocrJPI6GWFodBFzmFnyvrQ83SHKhmilCU/8Jv67i4GJZBMhEzltxzcNagtQ==", - "extraneous": true - }, - "node_modules/ganache/node_modules/@webassemblyjs/helper-api-error": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.1.tgz", - "integrity": "sha512-RlhS8CBCXfRUR/cwo2ho9bkheSXG0+NwooXcc3PAILALf2QLdFyj7KGsKRbVc95hZnhnERon4kW/D3SZpp6Tcg==", - "extraneous": true - }, - "node_modules/ganache/node_modules/@webassemblyjs/helper-buffer": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.11.1.tgz", - "integrity": "sha512-gwikF65aDNeeXa8JxXa2BAk+REjSyhrNC9ZwdT0f8jc4dQQeDQ7G4m0f2QCLPJiMTTO6wfDmRmj/pW0PsUvIcA==", - "extraneous": true - }, - "node_modules/ganache/node_modules/@webassemblyjs/helper-numbers": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.1.tgz", - "integrity": "sha512-vDkbxiB8zfnPdNK9Rajcey5C0w+QJugEglN0of+kmO8l7lDb77AnlKYQF7aarZuCrv+l0UvqL+68gSDr3k9LPQ==", - "extraneous": true, - "dependencies": { - "@webassemblyjs/floating-point-hex-parser": "1.11.1", - "@webassemblyjs/helper-api-error": "1.11.1", - "@xtuc/long": "4.2.2" - } - }, - "node_modules/ganache/node_modules/@webassemblyjs/helper-wasm-bytecode": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.1.tgz", - "integrity": "sha512-PvpoOGiJwXeTrSf/qfudJhwlvDQxFgelbMqtq52WWiXC6Xgg1IREdngmPN3bs4RoO83PnL/nFrxucXj1+BX62Q==", - "extraneous": true - }, - "node_modules/ganache/node_modules/@webassemblyjs/helper-wasm-section": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.11.1.tgz", - "integrity": "sha512-10P9No29rYX1j7F3EVPX3JvGPQPae+AomuSTPiF9eBQeChHI6iqjMIwR9JmOJXwpnn/oVGDk7I5IlskuMwU/pg==", - "extraneous": true, - "dependencies": { - "@webassemblyjs/ast": "1.11.1", - "@webassemblyjs/helper-buffer": "1.11.1", - "@webassemblyjs/helper-wasm-bytecode": "1.11.1", - "@webassemblyjs/wasm-gen": "1.11.1" - } - }, - "node_modules/ganache/node_modules/@webassemblyjs/ieee754": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.11.1.tgz", - "integrity": "sha512-hJ87QIPtAMKbFq6CGTkZYJivEwZDbQUgYd3qKSadTNOhVY7p+gfP6Sr0lLRVTaG1JjFj+r3YchoqRYxNH3M0GQ==", - "extraneous": true, - "dependencies": { - "@xtuc/ieee754": "^1.2.0" - } - }, - "node_modules/ganache/node_modules/@webassemblyjs/leb128": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.11.1.tgz", - "integrity": "sha512-BJ2P0hNZ0u+Th1YZXJpzW6miwqQUGcIHT1G/sf72gLVD9DZ5AdYTqPNbHZh6K1M5VmKvFXwGSWZADz+qBWxeRw==", - "extraneous": true, - "dependencies": { - "@xtuc/long": "4.2.2" - } - }, - "node_modules/ganache/node_modules/@webassemblyjs/utf8": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.11.1.tgz", - "integrity": "sha512-9kqcxAEdMhiwQkHpkNiorZzqpGrodQQ2IGrHHxCy+Ozng0ofyMA0lTqiLkVs1uzTRejX+/O0EOT7KxqVPuXosQ==", - "extraneous": true - }, - "node_modules/ganache/node_modules/@webassemblyjs/wasm-edit": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.11.1.tgz", - "integrity": "sha512-g+RsupUC1aTHfR8CDgnsVRVZFJqdkFHpsHMfJuWQzWU3tvnLC07UqHICfP+4XyL2tnr1amvl1Sdp06TnYCmVkA==", - "extraneous": true, - "dependencies": { - "@webassemblyjs/ast": "1.11.1", - "@webassemblyjs/helper-buffer": "1.11.1", - "@webassemblyjs/helper-wasm-bytecode": "1.11.1", - "@webassemblyjs/helper-wasm-section": "1.11.1", - "@webassemblyjs/wasm-gen": "1.11.1", - "@webassemblyjs/wasm-opt": "1.11.1", - "@webassemblyjs/wasm-parser": "1.11.1", - "@webassemblyjs/wast-printer": "1.11.1" - } - }, - "node_modules/ganache/node_modules/@webassemblyjs/wasm-gen": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.11.1.tgz", - "integrity": "sha512-F7QqKXwwNlMmsulj6+O7r4mmtAlCWfO/0HdgOxSklZfQcDu0TpLiD1mRt/zF25Bk59FIjEuGAIyn5ei4yMfLhA==", - "extraneous": true, - "dependencies": { - "@webassemblyjs/ast": "1.11.1", - "@webassemblyjs/helper-wasm-bytecode": "1.11.1", - "@webassemblyjs/ieee754": "1.11.1", - "@webassemblyjs/leb128": "1.11.1", - "@webassemblyjs/utf8": "1.11.1" - } - }, - "node_modules/ganache/node_modules/@webassemblyjs/wasm-opt": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.11.1.tgz", - "integrity": "sha512-VqnkNqnZlU5EB64pp1l7hdm3hmQw7Vgqa0KF/KCNO9sIpI6Fk6brDEiX+iCOYrvMuBWDws0NkTOxYEb85XQHHw==", - "extraneous": true, - "dependencies": { - "@webassemblyjs/ast": "1.11.1", - "@webassemblyjs/helper-buffer": "1.11.1", - "@webassemblyjs/wasm-gen": "1.11.1", - "@webassemblyjs/wasm-parser": "1.11.1" + "@nomicfoundation/ethereumjs-statemanager": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/@nomicfoundation/ethereumjs-statemanager/-/ethereumjs-statemanager-2.0.2.tgz", + "integrity": "sha512-dlKy5dIXLuDubx8Z74sipciZnJTRSV/uHG48RSijhgm1V7eXYFC567xgKtsKiVZB1ViTP9iFL4B6Je0xD6X2OA==", + "requires": { + "@nomicfoundation/ethereumjs-common": "4.0.2", + "@nomicfoundation/ethereumjs-rlp": "5.0.2", + "debug": "^4.3.3", + "ethereum-cryptography": "0.1.3", + "ethers": "^5.7.1", + "js-sdsl": "^4.1.4" + }, + "dependencies": { + "ethereum-cryptography": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-0.1.3.tgz", + "integrity": "sha512-w8/4x1SGGzc+tO97TASLja6SLd3fRIK2tLVcV2Gx4IB21hE19atll5Cq9o3d0ZmAYC/8aw0ipieTSiekAea4SQ==", + "requires": { + "@types/pbkdf2": "^3.0.0", + "@types/secp256k1": "^4.0.1", + "blakejs": "^1.1.0", + "browserify-aes": "^1.2.0", + "bs58check": "^2.1.2", + "create-hash": "^1.2.0", + "create-hmac": "^1.1.7", + "hash.js": "^1.1.7", + "keccak": "^3.0.0", + "pbkdf2": "^3.0.17", + "randombytes": "^2.1.0", + "safe-buffer": "^5.1.2", + "scrypt-js": "^3.0.0", + "secp256k1": "^4.0.1", + "setimmediate": "^1.0.5" + } + }, + "ethers": { + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/ethers/-/ethers-5.7.2.tgz", + "integrity": "sha512-wswUsmWo1aOK8rR7DIKiWSw9DbLWe6x98Jrn8wcTflTVvaXhAMaB5zGAXy0GYQEQp9iO1iSHWVyARQm11zUtyg==", + "requires": { + "@ethersproject/abi": "5.7.0", + "@ethersproject/abstract-provider": "5.7.0", + "@ethersproject/abstract-signer": "5.7.0", + "@ethersproject/address": "5.7.0", + "@ethersproject/base64": "5.7.0", + "@ethersproject/basex": "5.7.0", + "@ethersproject/bignumber": "5.7.0", + "@ethersproject/bytes": "5.7.0", + "@ethersproject/constants": "5.7.0", + "@ethersproject/contracts": "5.7.0", + "@ethersproject/hash": "5.7.0", + "@ethersproject/hdnode": "5.7.0", + "@ethersproject/json-wallets": "5.7.0", + "@ethersproject/keccak256": "5.7.0", + "@ethersproject/logger": "5.7.0", + "@ethersproject/networks": "5.7.1", + "@ethersproject/pbkdf2": "5.7.0", + "@ethersproject/properties": "5.7.0", + "@ethersproject/providers": "5.7.2", + "@ethersproject/random": "5.7.0", + "@ethersproject/rlp": "5.7.0", + "@ethersproject/sha2": "5.7.0", + "@ethersproject/signing-key": "5.7.0", + "@ethersproject/solidity": "5.7.0", + "@ethersproject/strings": "5.7.0", + "@ethersproject/transactions": "5.7.0", + "@ethersproject/units": "5.7.0", + "@ethersproject/wallet": "5.7.0", + "@ethersproject/web": "5.7.1", + "@ethersproject/wordlists": "5.7.0" + } + } } }, - "node_modules/ganache/node_modules/@webassemblyjs/wasm-parser": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.11.1.tgz", - "integrity": "sha512-rrBujw+dJu32gYB7/Lup6UhdkPx9S9SnobZzRVL7VcBH9Bt9bCBLEuX/YXOOtBsOZ4NQrRykKhffRWHvigQvOA==", - "extraneous": true, + "@nomicfoundation/ethereumjs-trie": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/@nomicfoundation/ethereumjs-trie/-/ethereumjs-trie-6.0.2.tgz", + "integrity": "sha512-yw8vg9hBeLYk4YNg5MrSJ5H55TLOv2FSWUTROtDtTMMmDGROsAu+0tBjiNGTnKRi400M6cEzoFfa89Fc5k8NTQ==", + "requires": { + "@nomicfoundation/ethereumjs-rlp": "5.0.2", + "@nomicfoundation/ethereumjs-util": "9.0.2", + "@types/readable-stream": "^2.3.13", + "ethereum-cryptography": "0.1.3", + "readable-stream": "^3.6.0" + }, "dependencies": { - "@webassemblyjs/ast": "1.11.1", - "@webassemblyjs/helper-api-error": "1.11.1", - "@webassemblyjs/helper-wasm-bytecode": "1.11.1", - "@webassemblyjs/ieee754": "1.11.1", - "@webassemblyjs/leb128": "1.11.1", - "@webassemblyjs/utf8": "1.11.1" + "ethereum-cryptography": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-0.1.3.tgz", + "integrity": "sha512-w8/4x1SGGzc+tO97TASLja6SLd3fRIK2tLVcV2Gx4IB21hE19atll5Cq9o3d0ZmAYC/8aw0ipieTSiekAea4SQ==", + "requires": { + "@types/pbkdf2": "^3.0.0", + "@types/secp256k1": "^4.0.1", + "blakejs": "^1.1.0", + "browserify-aes": "^1.2.0", + "bs58check": "^2.1.2", + "create-hash": "^1.2.0", + "create-hmac": "^1.1.7", + "hash.js": "^1.1.7", + "keccak": "^3.0.0", + "pbkdf2": "^3.0.17", + "randombytes": "^2.1.0", + "safe-buffer": "^5.1.2", + "scrypt-js": "^3.0.0", + "secp256k1": "^4.0.1", + "setimmediate": "^1.0.5" + } + } } }, - "node_modules/ganache/node_modules/@webassemblyjs/wast-printer": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.11.1.tgz", - "integrity": "sha512-IQboUWM4eKzWW+N/jij2sRatKMh99QEelo3Eb2q0qXkvPRISAj8Qxtmw5itwqK+TTkBuUIE45AxYPToqPtL5gg==", - "extraneous": true, + "@nomicfoundation/ethereumjs-tx": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/@nomicfoundation/ethereumjs-tx/-/ethereumjs-tx-5.0.2.tgz", + "integrity": "sha512-T+l4/MmTp7VhJeNloMkM+lPU3YMUaXdcXgTGCf8+ZFvV9NYZTRLFekRwlG6/JMmVfIfbrW+dRRJ9A6H5Q/Z64g==", + "requires": { + "@chainsafe/ssz": "^0.9.2", + "@ethersproject/providers": "^5.7.2", + "@nomicfoundation/ethereumjs-common": "4.0.2", + "@nomicfoundation/ethereumjs-rlp": "5.0.2", + "@nomicfoundation/ethereumjs-util": "9.0.2", + "ethereum-cryptography": "0.1.3" + }, "dependencies": { - "@webassemblyjs/ast": "1.11.1", - "@xtuc/long": "4.2.2" + "ethereum-cryptography": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-0.1.3.tgz", + "integrity": "sha512-w8/4x1SGGzc+tO97TASLja6SLd3fRIK2tLVcV2Gx4IB21hE19atll5Cq9o3d0ZmAYC/8aw0ipieTSiekAea4SQ==", + "requires": { + "@types/pbkdf2": "^3.0.0", + "@types/secp256k1": "^4.0.1", + "blakejs": "^1.1.0", + "browserify-aes": "^1.2.0", + "bs58check": "^2.1.2", + "create-hash": "^1.2.0", + "create-hmac": "^1.1.7", + "hash.js": "^1.1.7", + "keccak": "^3.0.0", + "pbkdf2": "^3.0.17", + "randombytes": "^2.1.0", + "safe-buffer": "^5.1.2", + "scrypt-js": "^3.0.0", + "secp256k1": "^4.0.1", + "setimmediate": "^1.0.5" + } + } } }, - "node_modules/ganache/node_modules/@webpack-cli/configtest": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@webpack-cli/configtest/-/configtest-1.2.0.tgz", - "integrity": "sha512-4FB8Tj6xyVkyqjj1OaTqCjXYULB9FMkqQ8yGrZjRDrYh0nOE+7Lhs45WioWQQMV+ceFlE368Ukhe6xdvJM9Egg==", - "extraneous": true - }, - "node_modules/ganache/node_modules/@webpack-cli/info": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/@webpack-cli/info/-/info-1.5.0.tgz", - "integrity": "sha512-e8tSXZpw2hPl2uMJY6fsMswaok5FdlGNRTktvFk2sD8RjH0hE2+XistawJx1vmKteh4NmGmNUrp+Tb2w+udPcQ==", - "extraneous": true, + "@nomicfoundation/ethereumjs-util": { + "version": "9.0.2", + "resolved": "https://registry.npmjs.org/@nomicfoundation/ethereumjs-util/-/ethereumjs-util-9.0.2.tgz", + "integrity": "sha512-4Wu9D3LykbSBWZo8nJCnzVIYGvGCuyiYLIJa9XXNVt1q1jUzHdB+sJvx95VGCpPkCT+IbLecW6yfzy3E1bQrwQ==", + "requires": { + "@chainsafe/ssz": "^0.10.0", + "@nomicfoundation/ethereumjs-rlp": "5.0.2", + "ethereum-cryptography": "0.1.3" + }, "dependencies": { - "envinfo": "^7.7.3" + "@chainsafe/persistent-merkle-tree": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/@chainsafe/persistent-merkle-tree/-/persistent-merkle-tree-0.5.0.tgz", + "integrity": "sha512-l0V1b5clxA3iwQLXP40zYjyZYospQLZXzBVIhhr9kDg/1qHZfzzHw0jj4VPBijfYCArZDlPkRi1wZaV2POKeuw==", + "requires": { + "@chainsafe/as-sha256": "^0.3.1" + } + }, + "@chainsafe/ssz": { + "version": "0.10.2", + "resolved": "https://registry.npmjs.org/@chainsafe/ssz/-/ssz-0.10.2.tgz", + "integrity": "sha512-/NL3Lh8K+0q7A3LsiFq09YXS9fPE+ead2rr7vM2QK8PLzrNsw3uqrif9bpRX5UxgeRjM+vYi+boCM3+GM4ovXg==", + "requires": { + "@chainsafe/as-sha256": "^0.3.1", + "@chainsafe/persistent-merkle-tree": "^0.5.0" + } + }, + "ethereum-cryptography": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-0.1.3.tgz", + "integrity": "sha512-w8/4x1SGGzc+tO97TASLja6SLd3fRIK2tLVcV2Gx4IB21hE19atll5Cq9o3d0ZmAYC/8aw0ipieTSiekAea4SQ==", + "requires": { + "@types/pbkdf2": "^3.0.0", + "@types/secp256k1": "^4.0.1", + "blakejs": "^1.1.0", + "browserify-aes": "^1.2.0", + "bs58check": "^2.1.2", + "create-hash": "^1.2.0", + "create-hmac": "^1.1.7", + "hash.js": "^1.1.7", + "keccak": "^3.0.0", + "pbkdf2": "^3.0.17", + "randombytes": "^2.1.0", + "safe-buffer": "^5.1.2", + "scrypt-js": "^3.0.0", + "secp256k1": "^4.0.1", + "setimmediate": "^1.0.5" + } + } } }, - "node_modules/ganache/node_modules/@webpack-cli/serve": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/@webpack-cli/serve/-/serve-1.7.0.tgz", - "integrity": "sha512-oxnCNGj88fL+xzV+dacXs44HcDwf1ovs3AuEzvP7mqXw7fQntqIhQ1BRmynh4qEKQSSSRSWVyXRjmTbZIX9V2Q==", - "extraneous": true - }, - "node_modules/ganache/node_modules/@xtuc/ieee754": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz", - "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==", - "extraneous": true - }, - "node_modules/ganache/node_modules/@xtuc/long": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/@xtuc/long/-/long-4.2.2.tgz", - "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==", - "extraneous": true - }, - "node_modules/ganache/node_modules/abstract-level": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/abstract-level/-/abstract-level-1.0.3.tgz", - "integrity": "sha512-t6jv+xHy+VYwc4xqZMn2Pa9DjcdzvzZmQGRjTFc8spIbRGHgBrEKbPq+rYXc7CCo0lxgYvSgKVg9qZAhpVQSjA==", - "dependencies": { - "buffer": "^6.0.3", - "catering": "^2.1.0", - "is-buffer": "^2.0.5", - "level-supports": "^4.0.0", - "level-transcoder": "^1.0.1", - "module-error": "^1.0.1", - "queue-microtask": "^1.2.3" + "@nomicfoundation/ethereumjs-vm": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/@nomicfoundation/ethereumjs-vm/-/ethereumjs-vm-7.0.2.tgz", + "integrity": "sha512-Bj3KZT64j54Tcwr7Qm/0jkeZXJMfdcAtRBedou+Hx0dPOSIgqaIr0vvLwP65TpHbak2DmAq+KJbW2KNtIoFwvA==", + "requires": { + "@nomicfoundation/ethereumjs-block": "5.0.2", + "@nomicfoundation/ethereumjs-blockchain": "7.0.2", + "@nomicfoundation/ethereumjs-common": "4.0.2", + "@nomicfoundation/ethereumjs-evm": "2.0.2", + "@nomicfoundation/ethereumjs-rlp": "5.0.2", + "@nomicfoundation/ethereumjs-statemanager": "2.0.2", + "@nomicfoundation/ethereumjs-trie": "6.0.2", + "@nomicfoundation/ethereumjs-tx": "5.0.2", + "@nomicfoundation/ethereumjs-util": "9.0.2", + "debug": "^4.3.3", + "ethereum-cryptography": "0.1.3", + "mcl-wasm": "^0.7.1", + "rustbn.js": "~0.2.0" }, - "engines": { - "node": ">=12" + "dependencies": { + "ethereum-cryptography": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-0.1.3.tgz", + "integrity": "sha512-w8/4x1SGGzc+tO97TASLja6SLd3fRIK2tLVcV2Gx4IB21hE19atll5Cq9o3d0ZmAYC/8aw0ipieTSiekAea4SQ==", + "requires": { + "@types/pbkdf2": "^3.0.0", + "@types/secp256k1": "^4.0.1", + "blakejs": "^1.1.0", + "browserify-aes": "^1.2.0", + "bs58check": "^2.1.2", + "create-hash": "^1.2.0", + "create-hmac": "^1.1.7", + "hash.js": "^1.1.7", + "keccak": "^3.0.0", + "pbkdf2": "^3.0.17", + "randombytes": "^2.1.0", + "safe-buffer": "^5.1.2", + "scrypt-js": "^3.0.0", + "secp256k1": "^4.0.1", + "setimmediate": "^1.0.5" + } + } } }, - "node_modules/ganache/node_modules/abstract-level/node_modules/level-supports": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/level-supports/-/level-supports-4.0.1.tgz", - "integrity": "sha512-PbXpve8rKeNcZ9C1mUicC9auIYFyGpkV9/i6g76tLgANwWhtG2v7I4xNBUlkn3lE2/dZF3Pi0ygYGtLc4RXXdA==", - "engines": { - "node": ">=12" + "@nomicfoundation/hardhat-ethers": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/@nomicfoundation/hardhat-ethers/-/hardhat-ethers-3.0.5.tgz", + "integrity": "sha512-RNFe8OtbZK6Ila9kIlHp0+S80/0Bu/3p41HUpaRIoHLm6X3WekTd83vob3rE54Duufu1edCiBDxspBzi2rxHHw==", + "dev": true, + "requires": { + "debug": "^4.1.1", + "lodash.isequal": "^4.5.0" } }, - "node_modules/ganache/node_modules/abstract-leveldown": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/abstract-leveldown/-/abstract-leveldown-7.2.0.tgz", - "integrity": "sha512-DnhQwcFEaYsvYDnACLZhMmCWd3rkOeEvglpa4q5i/5Jlm3UIsWaxVzuXvDLFCSCWRO3yy2/+V/G7FusFgejnfQ==", - "inBundle": true, - "license": "MIT", - "dependencies": { - "buffer": "^6.0.3", - "catering": "^2.0.0", - "is-buffer": "^2.0.5", - "level-concat-iterator": "^3.0.0", - "level-supports": "^2.0.1", - "queue-microtask": "^1.2.3" - }, - "engines": { - "node": ">=10" - } + "@nomicfoundation/solidity-analyzer": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/@nomicfoundation/solidity-analyzer/-/solidity-analyzer-0.1.1.tgz", + "integrity": "sha512-1LMtXj1puAxyFusBgUIy5pZk3073cNXYnXUpuNKFghHbIit/xZgbk0AokpUADbNm3gyD6bFWl3LRFh3dhVdREg==", + "requires": { + "@nomicfoundation/solidity-analyzer-darwin-arm64": "0.1.1", + "@nomicfoundation/solidity-analyzer-darwin-x64": "0.1.1", + "@nomicfoundation/solidity-analyzer-freebsd-x64": "0.1.1", + "@nomicfoundation/solidity-analyzer-linux-arm64-gnu": "0.1.1", + "@nomicfoundation/solidity-analyzer-linux-arm64-musl": "0.1.1", + "@nomicfoundation/solidity-analyzer-linux-x64-gnu": "0.1.1", + "@nomicfoundation/solidity-analyzer-linux-x64-musl": "0.1.1", + "@nomicfoundation/solidity-analyzer-win32-arm64-msvc": "0.1.1", + "@nomicfoundation/solidity-analyzer-win32-ia32-msvc": "0.1.1", + "@nomicfoundation/solidity-analyzer-win32-x64-msvc": "0.1.1" + } + }, + "@nomicfoundation/solidity-analyzer-darwin-arm64": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/@nomicfoundation/solidity-analyzer-darwin-arm64/-/solidity-analyzer-darwin-arm64-0.1.1.tgz", + "integrity": "sha512-KcTodaQw8ivDZyF+D76FokN/HdpgGpfjc/gFCImdLUyqB6eSWVaZPazMbeAjmfhx3R0zm/NYVzxwAokFKgrc0w==", + "optional": true }, - "node_modules/ganache/node_modules/acorn": { - "version": "8.8.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.1.tgz", - "integrity": "sha512-7zFpHzhnqYKrkYdUjF1HI1bzd0VygEGX8lFk4k5zVMqHEoES+P+7TKI+EvLO9WVMJ8eekdO0aDEK044xTXwPPA==", - "extraneous": true, - "bin": { - "acorn": "bin/acorn" - }, - "engines": { - "node": ">=0.4.0" - } + "@nomicfoundation/solidity-analyzer-darwin-x64": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/@nomicfoundation/solidity-analyzer-darwin-x64/-/solidity-analyzer-darwin-x64-0.1.1.tgz", + "integrity": "sha512-XhQG4BaJE6cIbjAVtzGOGbK3sn1BO9W29uhk9J8y8fZF1DYz0Doj8QDMfpMu+A6TjPDs61lbsmeYodIDnfveSA==", + "optional": true }, - "node_modules/ganache/node_modules/acorn-import-assertions": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/acorn-import-assertions/-/acorn-import-assertions-1.8.0.tgz", - "integrity": "sha512-m7VZ3jwz4eK6A4Vtt8Ew1/mNbP24u0FhdyfA7fSvnJR6LMdfOYnmuIrrJAgrYfYJ10F/otaHTtrtrtmHdMNzEw==", - "extraneous": true + "@nomicfoundation/solidity-analyzer-freebsd-x64": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/@nomicfoundation/solidity-analyzer-freebsd-x64/-/solidity-analyzer-freebsd-x64-0.1.1.tgz", + "integrity": "sha512-GHF1VKRdHW3G8CndkwdaeLkVBi5A9u2jwtlS7SLhBc8b5U/GcoL39Q+1CSO3hYqePNP+eV5YI7Zgm0ea6kMHoA==", + "optional": true }, - "node_modules/ganache/node_modules/acorn-walk": { - "version": "8.2.0", - "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.2.0.tgz", - "integrity": "sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==", - "extraneous": true, - "engines": { - "node": ">=0.4.0" - } + "@nomicfoundation/solidity-analyzer-linux-arm64-gnu": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/@nomicfoundation/solidity-analyzer-linux-arm64-gnu/-/solidity-analyzer-linux-arm64-gnu-0.1.1.tgz", + "integrity": "sha512-g4Cv2fO37ZsUENQ2vwPnZc2zRenHyAxHcyBjKcjaSmmkKrFr64yvzeNO8S3GBFCo90rfochLs99wFVGT/0owpg==", + "optional": true }, - "node_modules/ganache/node_modules/ajv": { - "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", - "extraneous": true, - "dependencies": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - } + "@nomicfoundation/solidity-analyzer-linux-arm64-musl": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/@nomicfoundation/solidity-analyzer-linux-arm64-musl/-/solidity-analyzer-linux-arm64-musl-0.1.1.tgz", + "integrity": "sha512-WJ3CE5Oek25OGE3WwzK7oaopY8xMw9Lhb0mlYuJl/maZVo+WtP36XoQTb7bW/i8aAdHW5Z+BqrHMux23pvxG3w==", + "optional": true }, - "node_modules/ganache/node_modules/ajv-keywords": { - "version": "3.5.2", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", - "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", - "extraneous": true + "@nomicfoundation/solidity-analyzer-linux-x64-gnu": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/@nomicfoundation/solidity-analyzer-linux-x64-gnu/-/solidity-analyzer-linux-x64-gnu-0.1.1.tgz", + "integrity": "sha512-5WN7leSr5fkUBBjE4f3wKENUy9HQStu7HmWqbtknfXkkil+eNWiBV275IOlpXku7v3uLsXTOKpnnGHJYI2qsdA==", + "optional": true }, - "node_modules/ganache/node_modules/ansi-colors": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz", - "integrity": "sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==", - "extraneous": true, - "engines": { - "node": ">=6" - } + "@nomicfoundation/solidity-analyzer-linux-x64-musl": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/@nomicfoundation/solidity-analyzer-linux-x64-musl/-/solidity-analyzer-linux-x64-musl-0.1.1.tgz", + "integrity": "sha512-KdYMkJOq0SYPQMmErv/63CwGwMm5XHenEna9X9aB8mQmhDBrYrlAOSsIPgFCUSL0hjxE3xHP65/EPXR/InD2+w==", + "optional": true }, - "node_modules/ganache/node_modules/ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "extraneous": true, - "engines": { - "node": ">=8" - } + "@nomicfoundation/solidity-analyzer-win32-arm64-msvc": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/@nomicfoundation/solidity-analyzer-win32-arm64-msvc/-/solidity-analyzer-win32-arm64-msvc-0.1.1.tgz", + "integrity": "sha512-VFZASBfl4qiBYwW5xeY20exWhmv6ww9sWu/krWSesv3q5hA0o1JuzmPHR4LPN6SUZj5vcqci0O6JOL8BPw+APg==", + "optional": true }, - "node_modules/ganache/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "extraneous": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - } + "@nomicfoundation/solidity-analyzer-win32-ia32-msvc": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/@nomicfoundation/solidity-analyzer-win32-ia32-msvc/-/solidity-analyzer-win32-ia32-msvc-0.1.1.tgz", + "integrity": "sha512-JnFkYuyCSA70j6Si6cS1A9Gh1aHTEb8kOTBApp/c7NRTFGNMH8eaInKlyuuiIbvYFhlXW4LicqyYuWNNq9hkpQ==", + "optional": true }, - "node_modules/ganache/node_modules/anymatch": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", - "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", - "extraneous": true, - "dependencies": { - "normalize-path": "^3.0.0", - "picomatch": "^2.0.4" + "@nomicfoundation/solidity-analyzer-win32-x64-msvc": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/@nomicfoundation/solidity-analyzer-win32-x64-msvc/-/solidity-analyzer-win32-x64-msvc-0.1.1.tgz", + "integrity": "sha512-HrVJr6+WjIXGnw3Q9u6KQcbZCtk0caVWhCdFADySvRyUxJ8PnzlaP+MhwNE8oyT8OZ6ejHBRrrgjSqDCFXGirw==", + "optional": true + }, + "@nomiclabs/hardhat-etherscan": { + "version": "3.1.8", + "resolved": "https://registry.npmjs.org/@nomiclabs/hardhat-etherscan/-/hardhat-etherscan-3.1.8.tgz", + "integrity": "sha512-v5F6IzQhrsjHh6kQz4uNrym49brK9K5bYCq2zQZ729RYRaifI9hHbtmK+KkIVevfhut7huQFEQ77JLRMAzWYjQ==", + "dev": true, + "requires": { + "@ethersproject/abi": "^5.1.2", + "@ethersproject/address": "^5.0.2", + "cbor": "^8.1.0", + "chalk": "^2.4.2", + "debug": "^4.1.1", + "fs-extra": "^7.0.1", + "lodash": "^4.17.11", + "semver": "^6.3.0", + "table": "^6.8.0", + "undici": "^5.14.0" }, - "engines": { - "node": ">= 8" + "dependencies": { + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "requires": { + "color-convert": "^1.9.0" + } + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", + "dev": true + }, + "escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "dev": true + }, + "fs-extra": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-7.0.1.tgz", + "integrity": "sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==", + "dev": true, + "requires": { + "graceful-fs": "^4.1.2", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" + } + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "dev": true + }, + "jsonfile": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", + "integrity": "sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==", + "dev": true, + "requires": { + "graceful-fs": "^4.1.6" + } + }, + "semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true + }, + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + }, + "universalify": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", + "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", + "dev": true + } } }, - "node_modules/ganache/node_modules/arg": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz", - "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==", - "extraneous": true - }, - "node_modules/ganache/node_modules/argparse": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", - "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", - "extraneous": true, + "@nomiclabs/hardhat-truffle5": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/@nomiclabs/hardhat-truffle5/-/hardhat-truffle5-2.0.7.tgz", + "integrity": "sha512-Pw8451IUZp1bTp0QqCHCYfCHs66sCnyxPcaorapu9mfOV9xnZsVaFdtutnhNEiXdiZwbed7LFKpRsde4BjFwig==", + "requires": { + "@nomiclabs/truffle-contract": "^4.2.23", + "@types/chai": "^4.2.0", + "chai": "^4.2.0", + "ethereumjs-util": "^7.1.4", + "fs-extra": "^7.0.1" + }, "dependencies": { - "sprintf-js": "~1.0.2" + "fs-extra": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-7.0.1.tgz", + "integrity": "sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==", + "requires": { + "graceful-fs": "^4.1.2", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" + } + }, + "jsonfile": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", + "integrity": "sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==", + "requires": { + "graceful-fs": "^4.1.6" + } + }, + "universalify": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", + "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==" + } } }, - "node_modules/ganache/node_modules/asn1.js": { - "version": "5.4.1", - "resolved": "https://registry.npmjs.org/asn1.js/-/asn1.js-5.4.1.tgz", - "integrity": "sha512-+I//4cYPccV8LdmBLiX8CYvf9Sp3vQsrqu2QNXRcrbiWvcx/UdlFiqUJJzxRQxgsZmvhXhn4cSKeSmoFjVdupA==", - "extraneous": true, + "@nomiclabs/hardhat-vyper": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/@nomiclabs/hardhat-vyper/-/hardhat-vyper-3.0.5.tgz", + "integrity": "sha512-i/Q771sr4vnSTaNTMGe3kX4Nl2on7hiXHHcz1MrW0+MKAJfi3A4sEloXX3aim6TylCPFq0M1/esDX+Y0WPmfbQ==", + "dev": true, + "requires": { + "debug": "^4.1.1", + "fs-extra": "^7.0.1", + "io-ts": "1.10.4", + "lodash": "^4.17.11", + "semver": "^6.3.0" + }, "dependencies": { - "bn.js": "^4.0.0", - "inherits": "^2.0.1", - "minimalistic-assert": "^1.0.0", - "safer-buffer": "^2.1.0" + "fs-extra": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-7.0.1.tgz", + "integrity": "sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==", + "dev": true, + "requires": { + "graceful-fs": "^4.1.2", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" + } + }, + "jsonfile": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", + "integrity": "sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==", + "dev": true, + "requires": { + "graceful-fs": "^4.1.6" + } + }, + "semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true + }, + "universalify": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", + "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", + "dev": true + } } }, - "node_modules/ganache/node_modules/asn1.js/node_modules/bn.js": { - "version": "4.12.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", - "extraneous": true - }, - "node_modules/ganache/node_modules/assert": { + "@nomiclabs/hardhat-web3": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/assert/-/assert-2.0.0.tgz", - "integrity": "sha512-se5Cd+js9dXJnu6Ag2JFc00t+HmHOen+8Q+L7O9zI0PqQXr20uk2J0XQqMxZEeo5U50o8Nvmmx7dZrl+Ufr35A==", - "extraneous": true, - "dependencies": { - "es6-object-assign": "^1.1.0", - "is-nan": "^1.2.1", - "object-is": "^1.0.1", - "util": "^0.12.0" + "resolved": "https://registry.npmjs.org/@nomiclabs/hardhat-web3/-/hardhat-web3-2.0.0.tgz", + "integrity": "sha512-zt4xN+D+fKl3wW2YlTX3k9APR3XZgPkxJYf36AcliJn3oujnKEVRZaHu0PhgLjO+gR+F/kiYayo9fgd2L8970Q==", + "requires": { + "@types/bignumber.js": "^5.0.0" } }, - "node_modules/ganache/node_modules/async": { - "version": "2.6.4", - "resolved": "https://registry.npmjs.org/async/-/async-2.6.4.tgz", - "integrity": "sha512-mzo5dfJYwAn29PeiJ0zvwTo04zj8HDJj0Mn8TD7sno7q12prdbnasKJHhkm2c1LgrhlJ0teaea8860oxi51mGA==", + "@nomiclabs/truffle-contract": { + "version": "4.5.10", + "resolved": "https://registry.npmjs.org/@nomiclabs/truffle-contract/-/truffle-contract-4.5.10.tgz", + "integrity": "sha512-nF/6InFV+0hUvutyFgsdOMCoYlr//2fJbRER4itxYtQtc4/O1biTwZIKRu+5l2J5Sq6LU2WX7vZHtDgQdhWxIQ==", + "requires": { + "@ensdomains/ensjs": "^2.0.1", + "@truffle/blockchain-utils": "^0.1.3", + "@truffle/contract-schema": "^3.4.7", + "@truffle/debug-utils": "^6.0.22", + "@truffle/error": "^0.1.0", + "@truffle/interface-adapter": "^0.5.16", + "bignumber.js": "^7.2.1", + "ethereum-ens": "^0.8.0", + "ethers": "^4.0.0-beta.1", + "source-map-support": "^0.5.19" + }, "dependencies": { - "lodash": "^4.17.14" + "aes-js": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/aes-js/-/aes-js-3.0.0.tgz", + "integrity": "sha512-H7wUZRn8WpTq9jocdxQ2c8x2sKo9ZVmzfRE13GiNJXfp7NcKYEdvl3vspKjXox6RIG2VtaRe4JFvxG4rqp2Zuw==" + }, + "bignumber.js": { + "version": "7.2.1", + "resolved": "https://registry.npmjs.org/bignumber.js/-/bignumber.js-7.2.1.tgz", + "integrity": "sha512-S4XzBk5sMB+Rcb/LNcpzXr57VRTxgAvaAEDAl1AwRx27j00hT84O6OkteE7u8UB3NuaaygCRrEpqox4uDOrbdQ==" + }, + "bn.js": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==" + }, + "ethers": { + "version": "4.0.49", + "resolved": "https://registry.npmjs.org/ethers/-/ethers-4.0.49.tgz", + "integrity": "sha512-kPltTvWiyu+OktYy1IStSO16i2e7cS9D9OxZ81q2UUaiNPVrm/RTcbxamCXF9VUSKzJIdJV68EAIhTEVBalRWg==", + "requires": { + "aes-js": "3.0.0", + "bn.js": "^4.11.9", + "elliptic": "6.5.4", + "hash.js": "1.1.3", + "js-sha3": "0.5.7", + "scrypt-js": "2.0.4", + "setimmediate": "1.0.4", + "uuid": "2.0.1", + "xmlhttprequest": "1.8.0" + } + }, + "hash.js": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.3.tgz", + "integrity": "sha512-/UETyP0W22QILqS+6HowevwhEFJ3MBJnwTf75Qob9Wz9t0DPuisL8kW8YZMK62dHAKE1c1p+gY1TtOLY+USEHA==", + "requires": { + "inherits": "^2.0.3", + "minimalistic-assert": "^1.0.0" + } + }, + "js-sha3": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/js-sha3/-/js-sha3-0.5.7.tgz", + "integrity": "sha512-GII20kjaPX0zJ8wzkTbNDYMY7msuZcTWk8S5UOh6806Jq/wz1J8/bnr8uGU0DAUmYDjj2Mr4X1cW8v/GLYnR+g==" + }, + "scrypt-js": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/scrypt-js/-/scrypt-js-2.0.4.tgz", + "integrity": "sha512-4KsaGcPnuhtCZQCxFxN3GVYIhKFPTdLd8PLC552XwbMndtD0cjRFAhDuuydXQ0h08ZfPgzqe6EKHozpuH74iDw==" + }, + "setimmediate": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.4.tgz", + "integrity": "sha512-/TjEmXQVEzdod/FFskf3o7oOAsGhHf2j1dZqRFbDzq4F3mvvxflIIi4Hd3bLQE9y/CpwqfSQam5JakI/mi3Pog==" + }, + "uuid": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-2.0.1.tgz", + "integrity": "sha512-nWg9+Oa3qD2CQzHIP4qKUqwNfzKn8P0LtFhotaCTFchsV7ZfDhAybeip/HZVeMIpZi9JgY1E3nUlwaCmZT1sEg==" + } } }, - "node_modules/ganache/node_modules/async-eventemitter": { - "version": "0.2.4", - "resolved": "https://registry.npmjs.org/async-eventemitter/-/async-eventemitter-0.2.4.tgz", - "integrity": "sha512-pd20BwL7Yt1zwDFy+8MX8F1+WCT8aQeKj0kQnTrH9WaeRETlRamVhD0JtRPmrV4GfOJ2F9CvdQkZeZhnh2TuHw==", + "@offchainlabs/upgrade-executor": { + "version": "1.1.0-beta.0", + "resolved": "https://registry.npmjs.org/@offchainlabs/upgrade-executor/-/upgrade-executor-1.1.0-beta.0.tgz", + "integrity": "sha512-mpn6PHjH/KDDjNX0pXHEKdyv8m6DVGQiI2nGzQn0JbM1nOSHJpWx6fvfjtH7YxHJ6zBZTcsKkqGkFKDtCfoSLw==", + "requires": { + "@openzeppelin/contracts": "4.7.3", + "@openzeppelin/contracts-upgradeable": "4.7.3" + }, "dependencies": { - "async": "^2.4.0" - } - }, - "node_modules/ganache/node_modules/available-typed-arrays": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz", - "integrity": "sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==", - "extraneous": true, - "engines": { - "node": ">= 0.4" + "@openzeppelin/contracts": { + "version": "4.7.3", + "resolved": "https://registry.npmjs.org/@openzeppelin/contracts/-/contracts-4.7.3.tgz", + "integrity": "sha512-dGRS0agJzu8ybo44pCIf3xBaPQN/65AIXNgK8+4gzKd5kbvlqyxryUYVLJv7fK98Seyd2hDZzVEHSWAh0Bt1Yw==" + }, + "@openzeppelin/contracts-upgradeable": { + "version": "4.7.3", + "resolved": "https://registry.npmjs.org/@openzeppelin/contracts-upgradeable/-/contracts-upgradeable-4.7.3.tgz", + "integrity": "sha512-+wuegAMaLcZnLCJIvrVUDzA9z/Wp93f0Dla/4jJvIhijRrPabjQbZe6fWiECLaJyfn5ci9fqf9vTw3xpQOad2A==" + } } }, - "node_modules/ganache/node_modules/balanced-match": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", - "extraneous": true - }, - "node_modules/ganache/node_modules/base64-js": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", - "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" + "@openzeppelin/contract-loader": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/@openzeppelin/contract-loader/-/contract-loader-0.6.3.tgz", + "integrity": "sha512-cOFIjBjwbGgZhDZsitNgJl0Ye1rd5yu/Yx5LMgeq3u0ZYzldm4uObzHDFq4gjDdoypvyORjjJa3BlFA7eAnVIg==", + "dev": true, + "requires": { + "find-up": "^4.1.0", + "fs-extra": "^8.1.0" + }, + "dependencies": { + "fs-extra": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz", + "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==", + "dev": true, + "requires": { + "graceful-fs": "^4.2.0", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" + } }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" + "jsonfile": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", + "integrity": "sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==", + "dev": true, + "requires": { + "graceful-fs": "^4.1.6" + } }, - { - "type": "consulting", - "url": "https://feross.org/support" + "universalify": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", + "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", + "dev": true } - ], - "inBundle": true, - "license": "MIT" - }, - "node_modules/ganache/node_modules/big.js": { - "version": "5.2.2", - "resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz", - "integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==", - "extraneous": true, - "engines": { - "node": "*" } }, - "node_modules/ganache/node_modules/binary-extensions": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", - "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", - "extraneous": true, - "engines": { - "node": ">=8" - } + "@openzeppelin/contracts": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/@openzeppelin/contracts/-/contracts-5.0.1.tgz", + "integrity": "sha512-yQJaT5HDp9hYOOp4jTYxMsR02gdFZFXhewX5HW9Jo4fsqSVqqyIO/xTHdWDaKX5a3pv1txmf076Lziz+sO7L1w==" }, - "node_modules/ganache/node_modules/bn.js": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.2.1.tgz", - "integrity": "sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ==", - "extraneous": true + "@openzeppelin/contracts-upgradeable": { + "version": "4.5.2", + "resolved": "https://registry.npmjs.org/@openzeppelin/contracts-upgradeable/-/contracts-upgradeable-4.5.2.tgz", + "integrity": "sha512-xgWZYaPlrEOQo3cBj97Ufiuv79SPd8Brh4GcFYhPgb6WvAq4ppz8dWKL6h+jLAK01rUqMRp/TS9AdXgAeNvCLA==" }, - "node_modules/ganache/node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "extraneous": true, - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } + "@openzeppelin/contracts-upgradeable-4.7.3": { + "version": "npm:@openzeppelin/contracts-upgradeable@4.7.3", + "resolved": "https://registry.npmjs.org/@openzeppelin/contracts-upgradeable/-/contracts-upgradeable-4.7.3.tgz", + "integrity": "sha512-+wuegAMaLcZnLCJIvrVUDzA9z/Wp93f0Dla/4jJvIhijRrPabjQbZe6fWiECLaJyfn5ci9fqf9vTw3xpQOad2A==" }, - "node_modules/ganache/node_modules/braces": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", - "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", - "extraneous": true, - "dependencies": { - "fill-range": "^7.0.1" + "@openzeppelin/contracts-v0.7": { + "version": "npm:@openzeppelin/contracts@3.4.2", + "resolved": "https://registry.npmjs.org/@openzeppelin/contracts/-/contracts-3.4.2.tgz", + "integrity": "sha512-z0zMCjyhhp4y7XKAcDAi3Vgms4T2PstwBdahiO0+9NaGICQKjynK3wduSRplTgk4LXmoO1yfDGO5RbjKYxtuxA==" + }, + "@openzeppelin/defender-admin-client": { + "version": "1.54.1", + "resolved": "https://registry.npmjs.org/@openzeppelin/defender-admin-client/-/defender-admin-client-1.54.1.tgz", + "integrity": "sha512-kRpSUdTsnSqntp4FOXIm95t+6VKHc8CUY2Si71VDuxs0q7HSPZkdpRPSntcolwEzWy9L4a8NS/QMwDF5NJ4X1g==", + "dev": true, + "requires": { + "@openzeppelin/defender-base-client": "1.54.1", + "axios": "^1.4.0", + "ethers": "^5.7.2", + "lodash": "^4.17.19", + "node-fetch": "^2.6.0" }, - "engines": { - "node": ">=8" + "dependencies": { + "ethers": { + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/ethers/-/ethers-5.7.2.tgz", + "integrity": "sha512-wswUsmWo1aOK8rR7DIKiWSw9DbLWe6x98Jrn8wcTflTVvaXhAMaB5zGAXy0GYQEQp9iO1iSHWVyARQm11zUtyg==", + "dev": true, + "requires": { + "@ethersproject/abi": "5.7.0", + "@ethersproject/abstract-provider": "5.7.0", + "@ethersproject/abstract-signer": "5.7.0", + "@ethersproject/address": "5.7.0", + "@ethersproject/base64": "5.7.0", + "@ethersproject/basex": "5.7.0", + "@ethersproject/bignumber": "5.7.0", + "@ethersproject/bytes": "5.7.0", + "@ethersproject/constants": "5.7.0", + "@ethersproject/contracts": "5.7.0", + "@ethersproject/hash": "5.7.0", + "@ethersproject/hdnode": "5.7.0", + "@ethersproject/json-wallets": "5.7.0", + "@ethersproject/keccak256": "5.7.0", + "@ethersproject/logger": "5.7.0", + "@ethersproject/networks": "5.7.1", + "@ethersproject/pbkdf2": "5.7.0", + "@ethersproject/properties": "5.7.0", + "@ethersproject/providers": "5.7.2", + "@ethersproject/random": "5.7.0", + "@ethersproject/rlp": "5.7.0", + "@ethersproject/sha2": "5.7.0", + "@ethersproject/signing-key": "5.7.0", + "@ethersproject/solidity": "5.7.0", + "@ethersproject/strings": "5.7.0", + "@ethersproject/transactions": "5.7.0", + "@ethersproject/units": "5.7.0", + "@ethersproject/wallet": "5.7.0", + "@ethersproject/web": "5.7.1", + "@ethersproject/wordlists": "5.7.0" + } + } + } + }, + "@openzeppelin/defender-base-client": { + "version": "1.54.1", + "resolved": "https://registry.npmjs.org/@openzeppelin/defender-base-client/-/defender-base-client-1.54.1.tgz", + "integrity": "sha512-DRGz/7KN3ZQwu28YWMOaojrC7jjPkz/uCwkC8/C8B11qwZhA5qIVvyhYHhhFOCl0J84+E3TNdvkPD2q3p2WaJw==", + "dev": true, + "requires": { + "amazon-cognito-identity-js": "^6.0.1", + "async-retry": "^1.3.3", + "axios": "^1.4.0", + "lodash": "^4.17.19", + "node-fetch": "^2.6.0" } }, - "node_modules/ganache/node_modules/brorand": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz", - "integrity": "sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8=", - "inBundle": true, - "license": "MIT" - }, - "node_modules/ganache/node_modules/browser-stdout": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.1.tgz", - "integrity": "sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==", - "extraneous": true - }, - "node_modules/ganache/node_modules/browserify-aes": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/browserify-aes/-/browserify-aes-1.2.0.tgz", - "integrity": "sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==", - "extraneous": true, - "dependencies": { - "buffer-xor": "^1.0.3", - "cipher-base": "^1.0.0", - "create-hash": "^1.1.0", - "evp_bytestokey": "^1.0.3", - "inherits": "^2.0.1", - "safe-buffer": "^5.0.1" + "@openzeppelin/defender-sdk-base-client": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/@openzeppelin/defender-sdk-base-client/-/defender-sdk-base-client-1.8.0.tgz", + "integrity": "sha512-XIJat6BW2CTM74AwG5IL0Q/aE6RXj8x7smnVKmBql4wMvmirVW+njfwzZCLhUTiBXg9AlHxIInEF14SabfIisg==", + "dev": true, + "requires": { + "amazon-cognito-identity-js": "^6.3.6", + "async-retry": "^1.3.3" } }, - "node_modules/ganache/node_modules/browserify-cipher": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/browserify-cipher/-/browserify-cipher-1.0.1.tgz", - "integrity": "sha512-sPhkz0ARKbf4rRQt2hTpAHqn47X3llLkUGn+xEJzLjwY8LRs2p0v7ljvI5EyoRO/mexrNunNECisZs+gw2zz1w==", - "extraneous": true, - "dependencies": { - "browserify-aes": "^1.0.4", - "browserify-des": "^1.0.0", - "evp_bytestokey": "^1.0.0" + "@openzeppelin/defender-sdk-deploy-client": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/@openzeppelin/defender-sdk-deploy-client/-/defender-sdk-deploy-client-1.8.0.tgz", + "integrity": "sha512-/tNS2EnHuA5l095wzMbIkGMDNHZLcZQ2eLUP8z+AeKaAUeR2z4qzZ1ul21kR3EJURAyoy8aULFZanLggoBWHrA==", + "dev": true, + "requires": { + "@ethersproject/abi": "^5.7.0", + "@openzeppelin/defender-sdk-base-client": "^1.8.0", + "axios": "^1.4.0", + "lodash": "^4.17.21" } }, - "node_modules/ganache/node_modules/browserify-des": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/browserify-des/-/browserify-des-1.0.2.tgz", - "integrity": "sha512-BioO1xf3hFwz4kc6iBhI3ieDFompMhrMlnDFC4/0/vd5MokpuAc3R+LYbwTA9A5Yc9pq9UYPqffKpW2ObuwX5A==", - "extraneous": true, - "dependencies": { - "cipher-base": "^1.0.1", - "des.js": "^1.0.0", - "inherits": "^2.0.1", - "safe-buffer": "^5.1.2" + "@openzeppelin/hardhat-upgrades": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@openzeppelin/hardhat-upgrades/-/hardhat-upgrades-3.0.2.tgz", + "integrity": "sha512-Fk940cxwew++bfSZKWHEXVUCr3tRBiRZZBw1nl1wUVq29cq7BrlwDkZ6hTab/+p0IOnx0l6HJHLu3amDxxs3/w==", + "dev": true, + "requires": { + "@openzeppelin/defender-admin-client": "^1.52.0", + "@openzeppelin/defender-base-client": "^1.52.0", + "@openzeppelin/defender-sdk-base-client": "^1.8.0", + "@openzeppelin/defender-sdk-deploy-client": "^1.8.0", + "@openzeppelin/upgrades-core": "^1.32.0", + "chalk": "^4.1.0", + "debug": "^4.1.1", + "ethereumjs-util": "^7.1.5", + "proper-lockfile": "^4.1.1", + "undici": "^5.28.2" } }, - "node_modules/ganache/node_modules/browserify-rsa": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/browserify-rsa/-/browserify-rsa-4.1.0.tgz", - "integrity": "sha512-AdEER0Hkspgno2aR97SAf6vi0y0k8NuOpGnVH3O99rcA5Q6sh8QxcngtHuJ6uXwnfAXNM4Gn1Gb7/MV1+Ymbog==", - "extraneous": true, + "@openzeppelin/test-helpers": { + "version": "0.5.16", + "resolved": "https://registry.npmjs.org/@openzeppelin/test-helpers/-/test-helpers-0.5.16.tgz", + "integrity": "sha512-T1EvspSfH1qQO/sgGlskLfYVBbqzJR23SZzYl/6B2JnT4EhThcI85UpvDk0BkLWKaDScQTabGHt4GzHW+3SfZg==", + "dev": true, + "requires": { + "@openzeppelin/contract-loader": "^0.6.2", + "@truffle/contract": "^4.0.35", + "ansi-colors": "^3.2.3", + "chai": "^4.2.0", + "chai-bn": "^0.2.1", + "ethjs-abi": "^0.2.1", + "lodash.flatten": "^4.4.0", + "semver": "^5.6.0", + "web3": "^1.2.5", + "web3-utils": "^1.2.5" + }, "dependencies": { - "bn.js": "^5.0.0", - "randombytes": "^2.0.1" + "bn.js": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", + "dev": true, + "peer": true + }, + "chai-bn": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/chai-bn/-/chai-bn-0.2.2.tgz", + "integrity": "sha512-MzjelH0p8vWn65QKmEq/DLBG1Hle4WeyqT79ANhXZhn/UxRWO0OogkAxi5oGGtfzwU9bZR8mvbvYdoqNVWQwFg==", + "dev": true, + "requires": {} + }, + "semver": { + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", + "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", + "dev": true + } } }, - "node_modules/ganache/node_modules/browserify-sign": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/browserify-sign/-/browserify-sign-4.2.1.tgz", - "integrity": "sha512-/vrA5fguVAKKAVTNJjgSm1tRQDHUU6DbwO9IROu/0WAzC8PKhucDSh18J0RMvVeHAn5puMd+QHC2erPRNf8lmg==", - "extraneous": true, + "@openzeppelin/upgrades-core": { + "version": "1.32.2", + "resolved": "https://registry.npmjs.org/@openzeppelin/upgrades-core/-/upgrades-core-1.32.2.tgz", + "integrity": "sha512-EkXriOHZfn6u00Tbq0zUuhHDeTQB9WyAZKZo3UeYdqULb7E3vqxZgxgXmWJwEzAb6E77DvprzQ4gwCAjMV/S4Q==", + "dev": true, + "requires": { + "cbor": "^9.0.0", + "chalk": "^4.1.0", + "compare-versions": "^6.0.0", + "debug": "^4.1.1", + "ethereumjs-util": "^7.0.3", + "minimist": "^1.2.7", + "proper-lockfile": "^4.1.1", + "solidity-ast": "^0.4.51" + }, "dependencies": { - "bn.js": "^5.1.1", - "browserify-rsa": "^4.0.1", - "create-hash": "^1.2.0", - "create-hmac": "^1.1.7", - "elliptic": "^6.5.3", - "inherits": "^2.0.4", - "parse-asn1": "^5.1.5", - "readable-stream": "^3.6.0", - "safe-buffer": "^5.2.0" + "cbor": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/cbor/-/cbor-9.0.1.tgz", + "integrity": "sha512-/TQOWyamDxvVIv+DY9cOLNuABkoyz8K/F3QE56539pGVYohx0+MEA1f4lChFTX79dBTBS7R1PF6ovH7G+VtBfQ==", + "dev": true, + "requires": { + "nofilter": "^3.1.0" + } + } } }, - "node_modules/ganache/node_modules/browserslist": { - "version": "4.21.4", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.4.tgz", - "integrity": "sha512-CBHJJdDmgjl3daYjN5Cp5kbTf1mUhZoS+beLklHIvkOWscs83YAhLlF3Wsh/lciQYAcbBJgTOD44VtG31ZM4Hw==", - "extraneous": true, - "dependencies": { - "caniuse-lite": "^1.0.30001400", - "electron-to-chromium": "^1.4.251", - "node-releases": "^2.0.6", - "update-browserslist-db": "^1.0.9" - }, - "bin": { - "browserslist": "cli.js" - }, - "engines": { - "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" + "@pkgjs/parseargs": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz", + "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==", + "optional": true, + "peer": true + }, + "@poanet/solidity-flattener": { + "version": "3.0.9", + "resolved": "https://registry.npmjs.org/@poanet/solidity-flattener/-/solidity-flattener-3.0.9.tgz", + "integrity": "sha512-3vTJ05uRGJqP0t81963Ed99uijjXSyqgXfdrBD04su1auBU9enOGzUP6H2H7SyWBAmwUPmBb/z9Qy96ytyvtDw==", + "requires": { + "bunyan": "^1.8.12", + "decomment": "^0.9.1", + "glob-promise": "^3.4.0", + "path": "^0.12.7" } }, - "node_modules/ganache/node_modules/buffer": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz", - "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "inBundle": true, - "license": "MIT", - "dependencies": { - "base64-js": "^1.3.1", - "ieee754": "^1.2.1" - } - }, - "node_modules/ganache/node_modules/buffer-from": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", - "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", - "extraneous": true - }, - "node_modules/ganache/node_modules/buffer-xor": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/buffer-xor/-/buffer-xor-1.0.3.tgz", - "integrity": "sha512-571s0T7nZWK6vB67HI5dyUF7wXiNcfaPPPTl6zYCNApANjIvYJTg7hlud/+cJpdAhS7dVzqMLmfhfHR3rAcOjQ==", - "extraneous": true - }, - "node_modules/ganache/node_modules/bufferutil": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/bufferutil/-/bufferutil-4.0.5.tgz", - "integrity": "sha512-HTm14iMQKK2FjFLRTM5lAVcyaUzOnqbPtesFIvREgXpJHdQm8bWS+GkQgIkfaBYRHuCnea7w8UVNfwiAQhlr9A==", - "hasInstallScript": true, - "optional": true, - "dependencies": { - "node-gyp-build": "^4.3.0" - }, - "engines": { - "node": ">=6.14.2" - } - }, - "node_modules/ganache/node_modules/builtin-status-codes": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz", - "integrity": "sha512-HpGFw18DgFWlncDfjTa2rcQ4W88O1mC8e8yZ2AvQY5KDaktSTwo+KRf6nHK6FRI5FyRyb/5T6+TSxfP7QyGsmQ==", - "extraneous": true - }, - "node_modules/ganache/node_modules/call-bind": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", - "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", - "extraneous": true, - "dependencies": { - "function-bind": "^1.1.1", - "get-intrinsic": "^1.0.2" - } + "@scure/base": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/@scure/base/-/base-1.1.5.tgz", + "integrity": "sha512-Brj9FiG2W1MRQSTB212YVPRrcbjkv48FoZi/u4l/zds/ieRrqsh7aUf6CLwkAq61oKXr/ZlTzlY66gLIj3TFTQ==" }, - "node_modules/ganache/node_modules/camelcase": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", - "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", - "extraneous": true, - "engines": { - "node": ">=10" + "@scure/bip32": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/@scure/bip32/-/bip32-1.3.1.tgz", + "integrity": "sha512-osvveYtyzdEVbt3OfwwXFr4P2iVBL5u1Q3q4ONBfDY/UpOuXmOlbgwc1xECEboY8wIays8Yt6onaWMUdUbfl0A==", + "requires": { + "@noble/curves": "~1.1.0", + "@noble/hashes": "~1.3.1", + "@scure/base": "~1.1.0" } }, - "node_modules/ganache/node_modules/caniuse-lite": { - "version": "1.0.30001435", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001435.tgz", - "integrity": "sha512-kdCkUTjR+v4YAJelyiDTqiu82BDr4W4CP5sgTA0ZBmqn30XfS2ZghPLMowik9TPhS+psWJiUNxsqLyurDbmutA==", - "extraneous": true - }, - "node_modules/ganache/node_modules/catering": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/catering/-/catering-2.1.1.tgz", - "integrity": "sha512-K7Qy8O9p76sL3/3m7/zLKbRkyOlSZAgzEaLhyj2mXS8PsCud2Eo4hAb8aLtZqHh0QGqLcb9dlJSu6lHRVENm1w==", - "inBundle": true, - "license": "MIT", - "engines": { - "node": ">=6" + "@scure/bip39": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@scure/bip39/-/bip39-1.2.1.tgz", + "integrity": "sha512-Z3/Fsz1yr904dduJD0NpiyRHhRYHdcnyh73FZWiV+/qhWi83wNJ3NWolYqCEN+ZWsUz2TWwajJggcRE9r1zUYg==", + "requires": { + "@noble/hashes": "~1.3.0", + "@scure/base": "~1.1.0" } }, - "node_modules/ganache/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "extraneous": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" + "@sentry/core": { + "version": "5.30.0", + "resolved": "https://registry.npmjs.org/@sentry/core/-/core-5.30.0.tgz", + "integrity": "sha512-TmfrII8w1PQZSZgPpUESqjB+jC6MvZJZdLtE/0hZ+SrnKhW3x5WlYLvTXZpcWePYBku7rl2wn1RZu6uT0qCTeg==", + "requires": { + "@sentry/hub": "5.30.0", + "@sentry/minimal": "5.30.0", + "@sentry/types": "5.30.0", + "@sentry/utils": "5.30.0", + "tslib": "^1.9.3" }, - "engines": { - "node": ">=10" - } - }, - "node_modules/ganache/node_modules/chalk/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "extraneous": true, "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" + "tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + } } }, - "node_modules/ganache/node_modules/chokidar": { - "version": "3.5.2", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.2.tgz", - "integrity": "sha512-ekGhOnNVPgT77r4K/U3GDhu+FQ2S8TnK/s2KbIGXi0SZWuwkZ2QNyfWdZW+TVfn84DpEP7rLeCt2UI6bJ8GwbQ==", - "extraneous": true, - "dependencies": { - "anymatch": "~3.1.2", - "braces": "~3.0.2", - "glob-parent": "~5.1.2", - "is-binary-path": "~2.1.0", - "is-glob": "~4.0.1", - "normalize-path": "~3.0.0", - "readdirp": "~3.6.0" - }, - "engines": { - "node": ">= 8.10.0" + "@sentry/hub": { + "version": "5.30.0", + "resolved": "https://registry.npmjs.org/@sentry/hub/-/hub-5.30.0.tgz", + "integrity": "sha512-2tYrGnzb1gKz2EkMDQcfLrDTvmGcQPuWxLnJKXJvYTQDGLlEvi2tWz1VIHjunmOvJrB5aIQLhm+dcMRwFZDCqQ==", + "requires": { + "@sentry/types": "5.30.0", + "@sentry/utils": "5.30.0", + "tslib": "^1.9.3" }, - "optionalDependencies": { - "fsevents": "~2.3.2" - } - }, - "node_modules/ganache/node_modules/chrome-trace-event": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.3.tgz", - "integrity": "sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg==", - "extraneous": true, - "engines": { - "node": ">=6.0" - } - }, - "node_modules/ganache/node_modules/cipher-base": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.4.tgz", - "integrity": "sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==", - "extraneous": true, - "dependencies": { - "inherits": "^2.0.1", - "safe-buffer": "^5.0.1" - } - }, - "node_modules/ganache/node_modules/cliui": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", - "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", - "extraneous": true, - "dependencies": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.0", - "wrap-ansi": "^7.0.0" - } - }, - "node_modules/ganache/node_modules/clone-deep": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-4.0.1.tgz", - "integrity": "sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==", - "extraneous": true, "dependencies": { - "is-plain-object": "^2.0.4", - "kind-of": "^6.0.2", - "shallow-clone": "^3.0.0" - }, - "engines": { - "node": ">=6" + "tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + } } }, - "node_modules/ganache/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "extraneous": true, - "dependencies": { - "color-name": "~1.1.4" + "@sentry/minimal": { + "version": "5.30.0", + "resolved": "https://registry.npmjs.org/@sentry/minimal/-/minimal-5.30.0.tgz", + "integrity": "sha512-BwWb/owZKtkDX+Sc4zCSTNcvZUq7YcH3uAVlmh/gtR9rmUvbzAA3ewLuB3myi4wWRAMEtny6+J/FN/x+2wn9Xw==", + "requires": { + "@sentry/hub": "5.30.0", + "@sentry/types": "5.30.0", + "tslib": "^1.9.3" }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/ganache/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "extraneous": true - }, - "node_modules/ganache/node_modules/colorette": { - "version": "2.0.19", - "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.19.tgz", - "integrity": "sha512-3tlv/dIP7FWvj3BsbHrGLJ6l/oKh1O3TcgBqMn+yyCagOxc23fyzDS6HypQbgxWbkpDnf52p1LuR4eWDQ/K9WQ==", - "extraneous": true - }, - "node_modules/ganache/node_modules/colors": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/colors/-/colors-1.2.5.tgz", - "integrity": "sha512-erNRLao/Y3Fv54qUa0LBB+//Uf3YwMUmdJinN20yMXm9zdKKqH9wt7R9IIVZ+K7ShzfpLV/Zg8+VyrBJYB4lpg==", - "extraneous": true, - "engines": { - "node": ">=0.1.90" - } - }, - "node_modules/ganache/node_modules/commander": { - "version": "2.20.3", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", - "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", - "extraneous": true - }, - "node_modules/ganache/node_modules/concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", - "extraneous": true - }, - "node_modules/ganache/node_modules/create-ecdh": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/create-ecdh/-/create-ecdh-4.0.4.tgz", - "integrity": "sha512-mf+TCx8wWc9VpuxfP2ht0iSISLZnt0JgWlrOKZiNqyUZWnjIaCIVNQArMHnCZKfEYRg6IM7A+NeJoN8gf/Ws0A==", - "extraneous": true, - "dependencies": { - "bn.js": "^4.1.0", - "elliptic": "^6.5.3" - } - }, - "node_modules/ganache/node_modules/create-ecdh/node_modules/bn.js": { - "version": "4.12.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", - "extraneous": true - }, - "node_modules/ganache/node_modules/create-hash": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/create-hash/-/create-hash-1.2.0.tgz", - "integrity": "sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==", - "extraneous": true, "dependencies": { - "cipher-base": "^1.0.1", - "inherits": "^2.0.1", - "md5.js": "^1.3.4", - "ripemd160": "^2.0.1", - "sha.js": "^2.4.0" - } - }, - "node_modules/ganache/node_modules/create-hmac": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/create-hmac/-/create-hmac-1.1.7.tgz", - "integrity": "sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==", - "extraneous": true, - "dependencies": { - "cipher-base": "^1.0.3", - "create-hash": "^1.1.0", - "inherits": "^2.0.1", - "ripemd160": "^2.0.0", - "safe-buffer": "^5.0.1", - "sha.js": "^2.4.8" + "tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + } } }, - "node_modules/ganache/node_modules/create-require": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz", - "integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==", - "extraneous": true - }, - "node_modules/ganache/node_modules/cross-env": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/cross-env/-/cross-env-7.0.3.tgz", - "integrity": "sha512-+/HKd6EgcQCJGh2PSjZuUitQBQynKor4wrFbRg4DtAgS1aWO+gU52xpH7M9ScGgXSYmAVS9bIJ8EzuaGw0oNAw==", - "extraneous": true, - "dependencies": { - "cross-spawn": "^7.0.1" - }, - "bin": { - "cross-env": "src/bin/cross-env.js", - "cross-env-shell": "src/bin/cross-env-shell.js" + "@sentry/node": { + "version": "5.30.0", + "resolved": "https://registry.npmjs.org/@sentry/node/-/node-5.30.0.tgz", + "integrity": "sha512-Br5oyVBF0fZo6ZS9bxbJZG4ApAjRqAnqFFurMVJJdunNb80brh7a5Qva2kjhm+U6r9NJAB5OmDyPkA1Qnt+QVg==", + "requires": { + "@sentry/core": "5.30.0", + "@sentry/hub": "5.30.0", + "@sentry/tracing": "5.30.0", + "@sentry/types": "5.30.0", + "@sentry/utils": "5.30.0", + "cookie": "^0.4.1", + "https-proxy-agent": "^5.0.0", + "lru_map": "^0.3.3", + "tslib": "^1.9.3" }, - "engines": { - "node": ">=10.14", - "npm": ">=6", - "yarn": ">=1" - } - }, - "node_modules/ganache/node_modules/cross-spawn": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", - "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", - "extraneous": true, "dependencies": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" - }, - "engines": { - "node": ">= 8" + "tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + } } }, - "node_modules/ganache/node_modules/crypto-browserify": { - "version": "3.12.0", - "resolved": "https://registry.npmjs.org/crypto-browserify/-/crypto-browserify-3.12.0.tgz", - "integrity": "sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg==", - "extraneous": true, - "dependencies": { - "browserify-cipher": "^1.0.0", - "browserify-sign": "^4.0.0", - "create-ecdh": "^4.0.0", - "create-hash": "^1.1.0", - "create-hmac": "^1.1.0", - "diffie-hellman": "^5.0.0", - "inherits": "^2.0.1", - "pbkdf2": "^3.0.3", - "public-encrypt": "^4.0.0", - "randombytes": "^2.0.0", - "randomfill": "^1.0.3" + "@sentry/tracing": { + "version": "5.30.0", + "resolved": "https://registry.npmjs.org/@sentry/tracing/-/tracing-5.30.0.tgz", + "integrity": "sha512-dUFowCr0AIMwiLD7Fs314Mdzcug+gBVo/+NCMyDw8tFxJkwWAKl7Qa2OZxLQ0ZHjakcj1hNKfCQJ9rhyfOl4Aw==", + "requires": { + "@sentry/hub": "5.30.0", + "@sentry/minimal": "5.30.0", + "@sentry/types": "5.30.0", + "@sentry/utils": "5.30.0", + "tslib": "^1.9.3" }, - "engines": { - "node": "*" - } - }, - "node_modules/ganache/node_modules/debug": { - "version": "4.3.2", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.2.tgz", - "integrity": "sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==", - "extraneous": true, "dependencies": { - "ms": "2.1.2" - }, - "engines": { - "node": ">=6.0" + "tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + } } }, - "node_modules/ganache/node_modules/debug/node_modules/ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "extraneous": true - }, - "node_modules/ganache/node_modules/decamelize": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-4.0.0.tgz", - "integrity": "sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ==", - "extraneous": true, - "engines": { - "node": ">=10" - } + "@sentry/types": { + "version": "5.30.0", + "resolved": "https://registry.npmjs.org/@sentry/types/-/types-5.30.0.tgz", + "integrity": "sha512-R8xOqlSTZ+htqrfteCWU5Nk0CDN5ApUTvrlvBuiH1DyP6czDZ4ktbZB0hAgBlVcK0U+qpD3ag3Tqqpa5Q67rPw==" }, - "node_modules/ganache/node_modules/define-properties": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.4.tgz", - "integrity": "sha512-uckOqKcfaVvtBdsVkdPv3XjveQJsNQqmhXgRi8uhvWWuPYZCNlzT8qAyblUgNoXdHdjMTzAqeGjAoli8f+bzPA==", - "extraneous": true, - "dependencies": { - "has-property-descriptors": "^1.0.0", - "object-keys": "^1.1.1" + "@sentry/utils": { + "version": "5.30.0", + "resolved": "https://registry.npmjs.org/@sentry/utils/-/utils-5.30.0.tgz", + "integrity": "sha512-zaYmoH0NWWtvnJjC9/CBseXMtKHm/tm40sz3YfJRxeQjyzRqNQPgivpd9R/oDJCYj999mzdW382p/qi2ypjLww==", + "requires": { + "@sentry/types": "5.30.0", + "tslib": "^1.9.3" }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/ganache/node_modules/des.js": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/des.js/-/des.js-1.0.1.tgz", - "integrity": "sha512-Q0I4pfFrv2VPd34/vfLrFOoRmlYj3OV50i7fskps1jZWK1kApMWWT9G6RRUeYedLcBDIhnSDaUvJMb3AhUlaEA==", - "extraneous": true, - "dependencies": { - "inherits": "^2.0.1", - "minimalistic-assert": "^1.0.0" - } - }, - "node_modules/ganache/node_modules/diff": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/diff/-/diff-5.0.0.tgz", - "integrity": "sha512-/VTCrvm5Z0JGty/BWHljh+BAiw3IK+2j87NGMu8Nwc/f48WoDAC395uomO9ZD117ZOBaHmkX1oyLvkVM/aIT3w==", - "extraneous": true, - "engines": { - "node": ">=0.3.1" - } - }, - "node_modules/ganache/node_modules/diffie-hellman": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/diffie-hellman/-/diffie-hellman-5.0.3.tgz", - "integrity": "sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg==", - "extraneous": true, "dependencies": { - "bn.js": "^4.1.0", - "miller-rabin": "^4.0.0", - "randombytes": "^2.0.0" - } - }, - "node_modules/ganache/node_modules/diffie-hellman/node_modules/bn.js": { - "version": "4.12.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", - "extraneous": true - }, - "node_modules/ganache/node_modules/electron-to-chromium": { - "version": "1.4.284", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.284.tgz", - "integrity": "sha512-M8WEXFuKXMYMVr45fo8mq0wUrrJHheiKZf6BArTKk9ZBYCKJEOU5H8cdWgDT+qCVZf7Na4lVUaZsA+h6uA9+PA==", - "extraneous": true - }, - "node_modules/ganache/node_modules/elliptic": { - "version": "6.5.4", - "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.4.tgz", - "integrity": "sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ==", - "inBundle": true, - "license": "MIT", - "dependencies": { - "bn.js": "^4.11.9", - "brorand": "^1.1.0", - "hash.js": "^1.0.0", - "hmac-drbg": "^1.0.1", - "inherits": "^2.0.4", - "minimalistic-assert": "^1.0.1", - "minimalistic-crypto-utils": "^1.0.1" - } - }, - "node_modules/ganache/node_modules/elliptic/node_modules/bn.js": { - "version": "4.12.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", - "inBundle": true, - "license": "MIT" - }, - "node_modules/ganache/node_modules/emittery": { - "version": "0.10.0", - "resolved": "https://registry.npmjs.org/emittery/-/emittery-0.10.0.tgz", - "integrity": "sha512-AGvFfs+d0JKCJQ4o01ASQLGPmSCxgfU9RFXvzPvZdjKK8oscynksuJhWrSTSw7j7Ep/sZct5b5ZhYCi8S/t0HQ==", - "engines": { - "node": ">=12" - } - }, - "node_modules/ganache/node_modules/emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "extraneous": true - }, - "node_modules/ganache/node_modules/emojis-list": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-3.0.0.tgz", - "integrity": "sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==", - "extraneous": true, - "engines": { - "node": ">= 4" + "tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + } } }, - "node_modules/ganache/node_modules/enhanced-resolve": { - "version": "5.12.0", - "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.12.0.tgz", - "integrity": "sha512-QHTXI/sZQmko1cbDoNAa3mJ5qhWUUNAq3vR0/YiD379fWQrcfuoX1+HW2S0MTt7XmoPLapdaDKUtelUSPic7hQ==", - "extraneous": true, - "dependencies": { - "graceful-fs": "^4.2.4", - "tapable": "^2.2.0" - }, - "engines": { - "node": ">=10.13.0" - } + "@sindresorhus/is": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-4.6.0.tgz", + "integrity": "sha512-t09vSN3MdfsyCHoFcTRCH/iUtG7OJ0CsjzB8cjAmKc/va/kIgeDI/TxsigdncE/4be734m0cvIYwNaV4i2XqAw==" }, - "node_modules/ganache/node_modules/envinfo": { - "version": "7.8.1", - "resolved": "https://registry.npmjs.org/envinfo/-/envinfo-7.8.1.tgz", - "integrity": "sha512-/o+BXHmB7ocbHEAs6F2EnG0ogybVVUdkRunTT2glZU9XAaGmhqskrvKwqXuDfNjEO0LZKWdejEEpnq8aM0tOaw==", - "extraneous": true, - "bin": { - "envinfo": "dist/cli.js" - }, - "engines": { - "node": ">=4" + "@smithy/types": { + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/@smithy/types/-/types-2.8.0.tgz", + "integrity": "sha512-h9sz24cFgt/W1Re22OlhQKmUZkNh244ApgRsUDYinqF8R+QgcsBIX344u2j61TPshsTz3CvL6HYU1DnQdsSrHA==", + "dev": true, + "requires": { + "tslib": "^2.5.0" } }, - "node_modules/ganache/node_modules/es-module-lexer": { - "version": "0.9.3", - "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-0.9.3.tgz", - "integrity": "sha512-1HQ2M2sPtxwnvOvT1ZClHyQDiggdNjURWpY2we6aMKCQiUVxTmVs2UYPLIrD84sS+kMdUwfBSylbJPwNnBrnHQ==", - "extraneous": true - }, - "node_modules/ganache/node_modules/es6-object-assign": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/es6-object-assign/-/es6-object-assign-1.1.0.tgz", - "integrity": "sha512-MEl9uirslVwqQU369iHNWZXsI8yaZYGg/D65aOgZkeyFJwHYSxilf7rQzXKI7DdDuBPrBXbfk3sl9hJhmd5AUw==", - "extraneous": true - }, - "node_modules/ganache/node_modules/escalade": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", - "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", - "extraneous": true, - "engines": { - "node": ">=6" + "@solidity-parser/parser": { + "version": "0.14.5", + "resolved": "https://registry.npmjs.org/@solidity-parser/parser/-/parser-0.14.5.tgz", + "integrity": "sha512-6dKnHZn7fg/iQATVEzqyUOyEidbn05q7YA2mQ9hC0MMXhhV3/JrsxmFSYZAcr7j1yUP700LLhTruvJ3MiQmjJg==", + "requires": { + "antlr4ts": "^0.5.0-alpha.4" } }, - "node_modules/ganache/node_modules/escape-string-regexp": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", - "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", - "extraneous": true, - "engines": { - "node": ">=10" + "@szmarczak/http-timer": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-5.0.1.tgz", + "integrity": "sha512-+PmQX0PiAYPMeVYe237LJAYvOMYW1j2rH5YROyS3b4CTVJum34HfRvKvAzozHAQG0TnHNdUfY9nCeUyRAs//cw==", + "requires": { + "defer-to-connect": "^2.0.1" } }, - "node_modules/ganache/node_modules/eslint-scope": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", - "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", - "extraneous": true, - "dependencies": { - "esrecurse": "^4.3.0", - "estraverse": "^4.1.1" + "@truffle/abi-utils": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@truffle/abi-utils/-/abi-utils-1.0.3.tgz", + "integrity": "sha512-AWhs01HCShaVKjml7Z4AbVREr/u4oiWxCcoR7Cktm0mEvtT04pvnxW5xB/cI4znRkrbPdFQlFt67kgrAjesYkw==", + "requires": { + "change-case": "3.0.2", + "fast-check": "3.1.1", + "web3-utils": "1.10.0" }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/ganache/node_modules/esrecurse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", - "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", - "extraneous": true, "dependencies": { - "estraverse": "^5.2.0" - }, - "engines": { - "node": ">=4.0" - } - }, - "node_modules/ganache/node_modules/esrecurse/node_modules/estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", - "extraneous": true, - "engines": { - "node": ">=4.0" - } - }, - "node_modules/ganache/node_modules/estraverse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", - "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", - "extraneous": true, - "engines": { - "node": ">=4.0" + "web3-utils": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/web3-utils/-/web3-utils-1.10.0.tgz", + "integrity": "sha512-kSaCM0uMcZTNUSmn5vMEhlo02RObGNRRCkdX0V9UTAU0+lrvn0HSaudyCo6CQzuXUsnuY2ERJGCGPfeWmv19Rg==", + "requires": { + "bn.js": "^5.2.1", + "ethereum-bloom-filters": "^1.0.6", + "ethereumjs-util": "^7.1.0", + "ethjs-unit": "0.1.6", + "number-to-bn": "1.7.0", + "randombytes": "^2.1.0", + "utf8": "3.0.0" + } + } } }, - "node_modules/ganache/node_modules/events": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", - "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", - "extraneous": true, - "engines": { - "node": ">=0.8.x" - } + "@truffle/blockchain-utils": { + "version": "0.1.9", + "resolved": "https://registry.npmjs.org/@truffle/blockchain-utils/-/blockchain-utils-0.1.9.tgz", + "integrity": "sha512-RHfumgbIVo68Rv9ofDYfynjnYZIfP/f1vZy4RoqkfYAO+fqfc58PDRzB1WAGq2U6GPuOnipOJxQhnqNnffORZg==" }, - "node_modules/ganache/node_modules/evp_bytestokey": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz", - "integrity": "sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==", - "extraneous": true, + "@truffle/codec": { + "version": "0.17.3", + "resolved": "https://registry.npmjs.org/@truffle/codec/-/codec-0.17.3.tgz", + "integrity": "sha512-Ko/+dsnntNyrJa57jUD9u4qx9nQby+H4GsUO6yjiCPSX0TQnEHK08XWqBSg0WdmCH2+h0y1nr2CXSx8gbZapxg==", + "requires": { + "@truffle/abi-utils": "^1.0.3", + "@truffle/compile-common": "^0.9.8", + "big.js": "^6.0.3", + "bn.js": "^5.1.3", + "cbor": "^5.2.0", + "debug": "^4.3.1", + "lodash": "^4.17.21", + "semver": "^7.5.4", + "utf8": "^3.0.0", + "web3-utils": "1.10.0" + }, "dependencies": { - "md5.js": "^1.3.4", - "safe-buffer": "^5.1.1" + "cbor": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/cbor/-/cbor-5.2.0.tgz", + "integrity": "sha512-5IMhi9e1QU76ppa5/ajP1BmMWZ2FHkhAhjeVKQ/EFCgYSEaeVaoGtL7cxJskf9oCCk+XjzaIdc3IuU/dbA/o2A==", + "requires": { + "bignumber.js": "^9.0.1", + "nofilter": "^1.0.4" + } + }, + "nofilter": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/nofilter/-/nofilter-1.0.4.tgz", + "integrity": "sha512-N8lidFp+fCz+TD51+haYdbDGrcBWwuHX40F5+z0qkUjMJ5Tp+rdSuAkMJ9N9eoolDlEVTf6u5icM+cNKkKW2mA==" + }, + "web3-utils": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/web3-utils/-/web3-utils-1.10.0.tgz", + "integrity": "sha512-kSaCM0uMcZTNUSmn5vMEhlo02RObGNRRCkdX0V9UTAU0+lrvn0HSaudyCo6CQzuXUsnuY2ERJGCGPfeWmv19Rg==", + "requires": { + "bn.js": "^5.2.1", + "ethereum-bloom-filters": "^1.0.6", + "ethereumjs-util": "^7.1.0", + "ethjs-unit": "0.1.6", + "number-to-bn": "1.7.0", + "randombytes": "^2.1.0", + "utf8": "3.0.0" + } + } } }, - "node_modules/ganache/node_modules/execa": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", - "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", - "extraneous": true, - "dependencies": { - "cross-spawn": "^7.0.3", - "get-stream": "^6.0.0", - "human-signals": "^2.1.0", - "is-stream": "^2.0.0", - "merge-stream": "^2.0.0", - "npm-run-path": "^4.0.1", - "onetime": "^5.1.2", - "signal-exit": "^3.0.3", - "strip-final-newline": "^2.0.0" + "@truffle/compile-common": { + "version": "0.9.8", + "resolved": "https://registry.npmjs.org/@truffle/compile-common/-/compile-common-0.9.8.tgz", + "integrity": "sha512-DTpiyo32t/YhLI1spn84D3MHYHrnoVqO+Gp7ZHrYNwDs86mAxtNiH5lsVzSb8cPgiqlvNsRCU9nm9R0YmKMTBQ==", + "requires": { + "@truffle/error": "^0.2.2", + "colors": "1.4.0" }, - "engines": { - "node": ">=10" + "dependencies": { + "@truffle/error": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/@truffle/error/-/error-0.2.2.tgz", + "integrity": "sha512-TqbzJ0O8DHh34cu8gDujnYl4dUl6o2DE4PR6iokbybvnIm/L2xl6+Gv1VC+YJS45xfH83Yo3/Zyg/9Oq8/xZWg==" + } } }, - "node_modules/ganache/node_modules/fast-deep-equal": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", - "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", - "extraneous": true - }, - "node_modules/ganache/node_modules/fast-json-stable-stringify": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", - "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", - "extraneous": true - }, - "node_modules/ganache/node_modules/fastest-levenshtein": { - "version": "1.0.16", - "resolved": "https://registry.npmjs.org/fastest-levenshtein/-/fastest-levenshtein-1.0.16.tgz", - "integrity": "sha512-eRnCtTTtGZFpQCwhJiUOuxPQWRXVKYDn0b2PeHfXL6/Zi53SLAzAHfVhVWK2AryC/WH05kGfxhFIPvTF0SXQzg==", - "extraneous": true, - "engines": { - "node": ">= 4.9.1" - } - }, - "node_modules/ganache/node_modules/fill-range": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", - "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", - "extraneous": true, - "dependencies": { - "to-regex-range": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/ganache/node_modules/find-up": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", - "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", - "extraneous": true, - "dependencies": { - "locate-path": "^6.0.0", - "path-exists": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/ganache/node_modules/flat": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz", - "integrity": "sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==", - "extraneous": true, - "bin": { - "flat": "cli.js" - } - }, - "node_modules/ganache/node_modules/for-each": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz", - "integrity": "sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==", - "extraneous": true, - "dependencies": { - "is-callable": "^1.1.3" - } - }, - "node_modules/ganache/node_modules/fs-extra": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-7.0.1.tgz", - "integrity": "sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==", - "extraneous": true, - "dependencies": { - "graceful-fs": "^4.1.2", - "jsonfile": "^4.0.0", - "universalify": "^0.1.0" - }, - "engines": { - "node": ">=6 <7 || >=8" - } - }, - "node_modules/ganache/node_modules/fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", - "extraneous": true - }, - "node_modules/ganache/node_modules/fsevents": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", - "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", - "extraneous": true, - "os": [ - "darwin" - ], - "engines": { - "node": "^8.16.0 || ^10.6.0 || >=11.0.0" - } - }, - "node_modules/ganache/node_modules/function-bind": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", - "extraneous": true - }, - "node_modules/ganache/node_modules/get-caller-file": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", - "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", - "extraneous": true, - "engines": { - "node": "6.* || 8.* || >= 10.*" - } - }, - "node_modules/ganache/node_modules/get-intrinsic": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.3.tgz", - "integrity": "sha512-QJVz1Tj7MS099PevUG5jvnt9tSkXN8K14dxQlikJuPt4uD9hHAHjLyLBiLR5zELelBdD9QNRAXZzsJx0WaDL9A==", - "extraneous": true, - "dependencies": { - "function-bind": "^1.1.1", - "has": "^1.0.3", - "has-symbols": "^1.0.3" - } - }, - "node_modules/ganache/node_modules/get-stream": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", - "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", - "extraneous": true, - "engines": { - "node": ">=10" - } - }, - "node_modules/ganache/node_modules/glob": { - "version": "7.1.7", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.7.tgz", - "integrity": "sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ==", - "extraneous": true, - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "engines": { - "node": "*" - } - }, - "node_modules/ganache/node_modules/glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", - "extraneous": true, - "dependencies": { - "is-glob": "^4.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/ganache/node_modules/glob-to-regexp": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz", - "integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==", - "extraneous": true - }, - "node_modules/ganache/node_modules/gopd": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", - "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", - "extraneous": true, - "dependencies": { - "get-intrinsic": "^1.1.3" - } - }, - "node_modules/ganache/node_modules/graceful-fs": { - "version": "4.2.10", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz", - "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==", - "extraneous": true - }, - "node_modules/ganache/node_modules/growl": { - "version": "1.10.5", - "resolved": "https://registry.npmjs.org/growl/-/growl-1.10.5.tgz", - "integrity": "sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA==", - "extraneous": true, - "engines": { - "node": ">=4.x" - } - }, - "node_modules/ganache/node_modules/has": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", - "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", - "extraneous": true, - "dependencies": { - "function-bind": "^1.1.1" - }, - "engines": { - "node": ">= 0.4.0" - } - }, - "node_modules/ganache/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "extraneous": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/ganache/node_modules/has-property-descriptors": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz", - "integrity": "sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==", - "extraneous": true, - "dependencies": { - "get-intrinsic": "^1.1.1" - } - }, - "node_modules/ganache/node_modules/has-symbols": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", - "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", - "extraneous": true, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/ganache/node_modules/has-tostringtag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz", - "integrity": "sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==", - "extraneous": true, - "dependencies": { - "has-symbols": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/ganache/node_modules/hash-base": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.1.0.tgz", - "integrity": "sha512-1nmYp/rhMDiE7AYkDw+lLwlAzz0AntGIe51F3RfFfEqyQ3feY2eI/NcwC6umIQVOASPMsWJLJScWKSSvzL9IVA==", - "extraneous": true, - "dependencies": { - "inherits": "^2.0.4", - "readable-stream": "^3.6.0", - "safe-buffer": "^5.2.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/ganache/node_modules/hash.js": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.7.tgz", - "integrity": "sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==", - "inBundle": true, - "license": "MIT", - "dependencies": { - "inherits": "^2.0.3", - "minimalistic-assert": "^1.0.1" - } - }, - "node_modules/ganache/node_modules/he": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", - "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", - "extraneous": true, - "bin": { - "he": "bin/he" - } - }, - "node_modules/ganache/node_modules/hmac-drbg": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz", - "integrity": "sha1-0nRXAQJabHdabFRXk+1QL8DGSaE=", - "inBundle": true, - "license": "MIT", - "dependencies": { - "hash.js": "^1.0.3", - "minimalistic-assert": "^1.0.0", - "minimalistic-crypto-utils": "^1.0.1" - } - }, - "node_modules/ganache/node_modules/https-browserify": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/https-browserify/-/https-browserify-1.0.0.tgz", - "integrity": "sha512-J+FkSdyD+0mA0N+81tMotaRMfSL9SGi+xpD3T6YApKsc3bGSXJlfXri3VyFOeYkfLRQisDk1W+jIFFKBeUBbBg==", - "extraneous": true - }, - "node_modules/ganache/node_modules/human-signals": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", - "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", - "extraneous": true, - "engines": { - "node": ">=10.17.0" - } - }, - "node_modules/ganache/node_modules/ieee754": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", - "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "inBundle": true, - "license": "BSD-3-Clause" - }, - "node_modules/ganache/node_modules/import-lazy": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/import-lazy/-/import-lazy-4.0.0.tgz", - "integrity": "sha512-rKtvo6a868b5Hu3heneU+L4yEQ4jYKLtjpnPeUdK7h0yzXGmyBTypknlkCvHFBqfX9YlorEiMM6Dnq/5atfHkw==", - "extraneous": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/ganache/node_modules/import-local": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.1.0.tgz", - "integrity": "sha512-ASB07uLtnDs1o6EHjKpX34BKYDSqnFerfTOJL2HvMqF70LnxpjkzDB8J44oT9pu4AMPkQwf8jl6szgvNd2tRIg==", - "extraneous": true, - "dependencies": { - "pkg-dir": "^4.2.0", - "resolve-cwd": "^3.0.0" - }, - "bin": { - "import-local-fixture": "fixtures/cli.js" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/ganache/node_modules/inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", - "extraneous": true, - "dependencies": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "node_modules/ganache/node_modules/inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", - "inBundle": true, - "license": "ISC" - }, - "node_modules/ganache/node_modules/interpret": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.4.0.tgz", - "integrity": "sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA==", - "extraneous": true, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/ganache/node_modules/is-arguments": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.1.1.tgz", - "integrity": "sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==", - "extraneous": true, - "dependencies": { - "call-bind": "^1.0.2", - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/ganache/node_modules/is-binary-path": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", - "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", - "extraneous": true, - "dependencies": { - "binary-extensions": "^2.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/ganache/node_modules/is-buffer": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-2.0.5.tgz", - "integrity": "sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "inBundle": true, - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/ganache/node_modules/is-callable": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz", - "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==", - "extraneous": true, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/ganache/node_modules/is-core-module": { - "version": "2.11.0", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.11.0.tgz", - "integrity": "sha512-RRjxlvLDkD1YJwDbroBHMb+cukurkDWNyHx7D3oNB5x9rb5ogcksMC5wHCadcXoo67gVr/+3GFySh3134zi6rw==", - "extraneous": true, - "dependencies": { - "has": "^1.0.3" - } - }, - "node_modules/ganache/node_modules/is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", - "extraneous": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/ganache/node_modules/is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "extraneous": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/ganache/node_modules/is-generator-function": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.0.10.tgz", - "integrity": "sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A==", - "extraneous": true, - "dependencies": { - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/ganache/node_modules/is-glob": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", - "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", - "extraneous": true, - "dependencies": { - "is-extglob": "^2.1.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/ganache/node_modules/is-nan": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/is-nan/-/is-nan-1.3.2.tgz", - "integrity": "sha512-E+zBKpQ2t6MEo1VsonYmluk9NxGrbzpeeLC2xIViuO2EjU2xsXsBPwTr3Ykv9l08UYEVEdWeRZNouaZqF6RN0w==", - "extraneous": true, - "dependencies": { - "call-bind": "^1.0.0", - "define-properties": "^1.1.3" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/ganache/node_modules/is-number": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", - "extraneous": true, - "engines": { - "node": ">=0.12.0" - } - }, - "node_modules/ganache/node_modules/is-plain-obj": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz", - "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==", - "extraneous": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/ganache/node_modules/is-plain-object": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", - "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", - "extraneous": true, - "dependencies": { - "isobject": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/ganache/node_modules/is-stream": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", - "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", - "extraneous": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/ganache/node_modules/is-typed-array": { - "version": "1.1.10", - "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.10.tgz", - "integrity": "sha512-PJqgEHiWZvMpaFZ3uTc8kHPM4+4ADTlDniuQL7cU/UDA0Ql7F70yGfHph3cLNe+c9toaigv+DFzTJKhc2CtO6A==", - "extraneous": true, - "dependencies": { - "available-typed-arrays": "^1.0.5", - "call-bind": "^1.0.2", - "for-each": "^0.3.3", - "gopd": "^1.0.1", - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/ganache/node_modules/is-unicode-supported": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", - "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==", - "extraneous": true, - "engines": { - "node": ">=10" - } - }, - "node_modules/ganache/node_modules/isexe": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", - "extraneous": true - }, - "node_modules/ganache/node_modules/isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==", - "extraneous": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/ganache/node_modules/jest-worker": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.5.1.tgz", - "integrity": "sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==", - "extraneous": true, - "dependencies": { - "@types/node": "*", - "merge-stream": "^2.0.0", - "supports-color": "^8.0.0" - }, - "engines": { - "node": ">= 10.13.0" - } - }, - "node_modules/ganache/node_modules/jju": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/jju/-/jju-1.4.0.tgz", - "integrity": "sha512-8wb9Yw966OSxApiCt0K3yNJL8pnNeIv+OEq2YMidz4FKP6nonSRoOXc80iXY4JaN2FC11B9qsNmDsm+ZOfMROA==", - "extraneous": true - }, - "node_modules/ganache/node_modules/js-yaml": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", - "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", - "extraneous": true, - "dependencies": { - "argparse": "^2.0.1" - }, - "bin": { - "js-yaml": "bin/js-yaml.js" - } - }, - "node_modules/ganache/node_modules/js-yaml/node_modules/argparse": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", - "extraneous": true - }, - "node_modules/ganache/node_modules/json-parse-better-errors": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz", - "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==", - "extraneous": true - }, - "node_modules/ganache/node_modules/json-schema-traverse": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", - "extraneous": true - }, - "node_modules/ganache/node_modules/json5": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.1.tgz", - "integrity": "sha512-1hqLFMSrGHRHxav9q9gNjJ5EXznIxGVO09xQRrwplcS8qs28pZ8s8hupZAmqDwZUmVZ2Qb2jnyPOWcDH8m8dlA==", - "extraneous": true, - "bin": { - "json5": "lib/cli.js" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/ganache/node_modules/jsonfile": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", - "integrity": "sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==", - "extraneous": true, - "dependencies": { - "graceful-fs": "^4.1.6" - } - }, - "node_modules/ganache/node_modules/keccak": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/keccak/-/keccak-3.0.2.tgz", - "integrity": "sha512-PyKKjkH53wDMLGrvmRGSNWgmSxZOUqbnXwKL9tmgbFYA1iAYqW21kfR7mZXV0MlESiefxQQE9X9fTa3X+2MPDQ==", - "hasInstallScript": true, - "inBundle": true, - "license": "MIT", - "dependencies": { - "node-addon-api": "^2.0.0", - "node-gyp-build": "^4.2.0", - "readable-stream": "^3.6.0" - }, - "engines": { - "node": ">=10.0.0" - } - }, - "node_modules/ganache/node_modules/kind-of": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", - "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", - "extraneous": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/ganache/node_modules/level-concat-iterator": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/level-concat-iterator/-/level-concat-iterator-3.1.0.tgz", - "integrity": "sha512-BWRCMHBxbIqPxJ8vHOvKUsaO0v1sLYZtjN3K2iZJsRBYtp+ONsY6Jfi6hy9K3+zolgQRryhIn2NRZjZnWJ9NmQ==", - "inBundle": true, - "license": "MIT", - "dependencies": { - "catering": "^2.1.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/ganache/node_modules/level-js": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/level-js/-/level-js-6.1.0.tgz", - "integrity": "sha512-i7mPtkZm68aewfv0FnIUWvFUFfoyzIvVKnUmuQGrelEkP72vSPTaA1SGneWWoCV5KZJG4wlzbJLp1WxVNGuc6A==", - "extraneous": true, - "dependencies": { - "abstract-leveldown": "^7.2.0", - "buffer": "^6.0.3", - "inherits": "^2.0.3", - "ltgt": "^2.1.2", - "run-parallel-limit": "^1.1.0" - } - }, - "node_modules/ganache/node_modules/level-supports": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/level-supports/-/level-supports-2.1.0.tgz", - "integrity": "sha512-E486g1NCjW5cF78KGPrMDRBYzPuueMZ6VBXHT6gC7A8UYWGiM14fGgp+s/L1oFfDWSPV/+SFkYCmZ0SiESkRKA==", - "inBundle": true, - "license": "MIT", - "engines": { - "node": ">=10" - } - }, - "node_modules/ganache/node_modules/level-transcoder": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/level-transcoder/-/level-transcoder-1.0.1.tgz", - "integrity": "sha512-t7bFwFtsQeD8cl8NIoQ2iwxA0CL/9IFw7/9gAjOonH0PWTTiRfY7Hq+Ejbsxh86tXobDQ6IOiddjNYIfOBs06w==", - "dependencies": { - "buffer": "^6.0.3", - "module-error": "^1.0.1" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/ganache/node_modules/leveldown": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/leveldown/-/leveldown-6.1.0.tgz", - "integrity": "sha512-8C7oJDT44JXxh04aSSsfcMI8YiaGRhOFI9/pMEL7nWJLVsWajDPTRxsSHTM2WcTVY5nXM+SuRHzPPi0GbnDX+w==", - "hasInstallScript": true, - "inBundle": true, - "license": "MIT", - "dependencies": { - "abstract-leveldown": "^7.2.0", - "napi-macros": "~2.0.0", - "node-gyp-build": "^4.3.0" - }, - "engines": { - "node": ">=10.12.0" - } - }, - "node_modules/ganache/node_modules/loader-runner": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-4.3.0.tgz", - "integrity": "sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg==", - "extraneous": true, - "engines": { - "node": ">=6.11.5" - } - }, - "node_modules/ganache/node_modules/loader-utils": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.4.tgz", - "integrity": "sha512-xXqpXoINfFhgua9xiqD8fPFHgkoq1mmmpE92WlDbm9rNRd/EbRb+Gqf908T2DMfuHjjJlksiK2RbHVOdD/MqSw==", - "extraneous": true, - "dependencies": { - "big.js": "^5.2.2", - "emojis-list": "^3.0.0", - "json5": "^2.1.2" - }, - "engines": { - "node": ">=8.9.0" - } - }, - "node_modules/ganache/node_modules/locate-path": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", - "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", - "extraneous": true, - "dependencies": { - "p-locate": "^5.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/ganache/node_modules/lodash": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" - }, - "node_modules/ganache/node_modules/lodash.get": { - "version": "4.4.2", - "resolved": "https://registry.npmjs.org/lodash.get/-/lodash.get-4.4.2.tgz", - "integrity": "sha512-z+Uw/vLuy6gQe8cfaFWD7p0wVv8fJl3mbzXh33RS+0oW2wvUqiRXiQ69gLWSLpgB5/6sU+r6BlQR0MBILadqTQ==", - "extraneous": true - }, - "node_modules/ganache/node_modules/lodash.isequal": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/lodash.isequal/-/lodash.isequal-4.5.0.tgz", - "integrity": "sha512-pDo3lu8Jhfjqls6GkMgpahsF9kCyayhgykjyLMNFTKWrpVdAQtYyB4muAMWozBB4ig/dtWAmsMxLEI8wuz+DYQ==", - "extraneous": true - }, - "node_modules/ganache/node_modules/log-symbols": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", - "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", - "extraneous": true, - "dependencies": { - "chalk": "^4.1.0", - "is-unicode-supported": "^0.1.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/ganache/node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "extraneous": true, - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/ganache/node_modules/ltgt": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/ltgt/-/ltgt-2.2.1.tgz", - "integrity": "sha512-AI2r85+4MquTw9ZYqabu4nMwy9Oftlfa/e/52t9IjtfG+mGBbTNdAoZ3RQKLHR6r0wQnwZnPIEh/Ya6XTWAKNA==", - "extraneous": true - }, - "node_modules/ganache/node_modules/make-error": { - "version": "1.3.6", - "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", - "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==", - "extraneous": true - }, - "node_modules/ganache/node_modules/mcl-wasm": { - "version": "0.9.0", - "resolved": "https://registry.npmjs.org/mcl-wasm/-/mcl-wasm-0.9.0.tgz", - "integrity": "sha512-rvU7L/68ZrDk4dpPZteiEqvK9nB/1XbbHmuLK6qIvc4xuuJb/iv1p5X3KEyq6AYatLnc+zbdSlLXTlKgTnCRZQ==", - "extraneous": true, - "engines": { - "node": ">=8.9.0" - } - }, - "node_modules/ganache/node_modules/md5.js": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/md5.js/-/md5.js-1.3.5.tgz", - "integrity": "sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==", - "extraneous": true, - "dependencies": { - "hash-base": "^3.0.0", - "inherits": "^2.0.1", - "safe-buffer": "^5.1.2" - } - }, - "node_modules/ganache/node_modules/merge-stream": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", - "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", - "extraneous": true - }, - "node_modules/ganache/node_modules/micromatch": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", - "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", - "extraneous": true, - "dependencies": { - "braces": "^3.0.2", - "picomatch": "^2.3.1" - }, - "engines": { - "node": ">=8.6" - } - }, - "node_modules/ganache/node_modules/miller-rabin": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/miller-rabin/-/miller-rabin-4.0.1.tgz", - "integrity": "sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA==", - "extraneous": true, - "dependencies": { - "bn.js": "^4.0.0", - "brorand": "^1.0.1" - }, - "bin": { - "miller-rabin": "bin/miller-rabin" - } - }, - "node_modules/ganache/node_modules/miller-rabin/node_modules/bn.js": { - "version": "4.12.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", - "extraneous": true - }, - "node_modules/ganache/node_modules/mime-db": { - "version": "1.52.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", - "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", - "extraneous": true, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/ganache/node_modules/mime-types": { - "version": "2.1.35", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", - "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", - "extraneous": true, - "dependencies": { - "mime-db": "1.52.0" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/ganache/node_modules/mimic-fn": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", - "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", - "extraneous": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/ganache/node_modules/minimalistic-assert": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", - "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==", - "inBundle": true, - "license": "ISC" - }, - "node_modules/ganache/node_modules/minimalistic-crypto-utils": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz", - "integrity": "sha1-9sAMHAsIIkblxNmd+4x8CDsrWCo=", - "inBundle": true, - "license": "MIT" - }, - "node_modules/ganache/node_modules/minimatch": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", - "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", - "extraneous": true, - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, - "node_modules/ganache/node_modules/minimist": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.7.tgz", - "integrity": "sha512-bzfL1YUZsP41gmu/qjrEk0Q6i2ix/cVeAhbCbqH9u3zYutS1cLg00qhrD0M2MVdCcx4Sc0UpP2eBWo9rotpq6g==", - "extraneous": true - }, - "node_modules/ganache/node_modules/mocha": { - "version": "9.1.3", - "resolved": "https://registry.npmjs.org/mocha/-/mocha-9.1.3.tgz", - "integrity": "sha512-Xcpl9FqXOAYqI3j79pEtHBBnQgVXIhpULjGQa7DVb0Po+VzmSIK9kanAiWLHoRR/dbZ2qpdPshuXr8l1VaHCzw==", - "extraneous": true, - "dependencies": { - "@ungap/promise-all-settled": "1.1.2", - "ansi-colors": "4.1.1", - "browser-stdout": "1.3.1", - "chokidar": "3.5.2", - "debug": "4.3.2", - "diff": "5.0.0", - "escape-string-regexp": "4.0.0", - "find-up": "5.0.0", - "glob": "7.1.7", - "growl": "1.10.5", - "he": "1.2.0", - "js-yaml": "4.1.0", - "log-symbols": "4.1.0", - "minimatch": "3.0.4", - "ms": "2.1.3", - "nanoid": "3.1.25", - "serialize-javascript": "6.0.0", - "strip-json-comments": "3.1.1", - "supports-color": "8.1.1", - "which": "2.0.2", - "workerpool": "6.1.5", - "yargs": "16.2.0", - "yargs-parser": "20.2.4", - "yargs-unparser": "2.0.0" - }, - "bin": { - "_mocha": "bin/_mocha", - "mocha": "bin/mocha" - }, - "engines": { - "node": ">= 12.0.0" - } - }, - "node_modules/ganache/node_modules/module-error": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/module-error/-/module-error-1.0.2.tgz", - "integrity": "sha512-0yuvsqSCv8LbaOKhnsQ/T5JhyFlCYLPXK3U2sgV10zoKQwzs/MyfuQUOZQ1V/6OCOJsK/TRgNVrPuPDqtdMFtA==", - "engines": { - "node": ">=10" - } - }, - "node_modules/ganache/node_modules/ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", - "extraneous": true - }, - "node_modules/ganache/node_modules/nanoid": { - "version": "3.1.25", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.1.25.tgz", - "integrity": "sha512-rdwtIXaXCLFAQbnfqDRnI6jaRHp9fTcYBjtFKE8eezcZ7LuLjhUaQGNeMXf1HmRoCH32CLz6XwX0TtxEOS/A3Q==", - "extraneous": true, - "bin": { - "nanoid": "bin/nanoid.cjs" - }, - "engines": { - "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" - } - }, - "node_modules/ganache/node_modules/napi-macros": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/napi-macros/-/napi-macros-2.0.0.tgz", - "integrity": "sha512-A0xLykHtARfueITVDernsAWdtIMbOJgKgcluwENp3AlsKN/PloyO10HtmoqnFAQAcxPkgZN7wdfPfEd0zNGxbg==", - "inBundle": true, - "license": "MIT" - }, - "node_modules/ganache/node_modules/neo-async": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", - "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==", - "extraneous": true - }, - "node_modules/ganache/node_modules/node-addon-api": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-2.0.2.tgz", - "integrity": "sha512-Ntyt4AIXyaLIuMHF6IOoTakB3K+RWxwtsHNRxllEoA6vPwP9o4866g6YWDLUdnucilZhmkxiHwHr11gAENw+QA==", - "inBundle": true, - "license": "MIT" - }, - "node_modules/ganache/node_modules/node-gyp-build": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.5.0.tgz", - "integrity": "sha512-2iGbaQBV+ITgCz76ZEjmhUKAKVf7xfY1sRl4UiKQspfZMH2h06SyhNsnSVy50cwkFQDGLyif6m/6uFXHkOZ6rg==", - "inBundle": true, - "license": "MIT", - "bin": { - "node-gyp-build": "bin.js", - "node-gyp-build-optional": "optional.js", - "node-gyp-build-test": "build-test.js" - } - }, - "node_modules/ganache/node_modules/node-loader": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/node-loader/-/node-loader-1.0.2.tgz", - "integrity": "sha512-myxAxpyMR7knjA4Uzwf3gjxaMtxSWj2vpm9o6AYWWxQ1S3XMBNeG2vzYcp/5eW03cBGfgSxyP+wntP8qhBJNhQ==", - "extraneous": true, - "dependencies": { - "loader-utils": "^2.0.0", - "schema-utils": "^3.0.0" - }, - "engines": { - "node": ">= 10.13.0" - } - }, - "node_modules/ganache/node_modules/node-releases": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.6.tgz", - "integrity": "sha512-PiVXnNuFm5+iYkLBNeq5211hvO38y63T0i2KKh2KnUs3RpzJ+JtODFjkD8yjLwnDkTYF1eKXheUwdssR+NRZdg==", - "extraneous": true - }, - "node_modules/ganache/node_modules/normalize-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", - "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", - "extraneous": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/ganache/node_modules/npm-run-path": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", - "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", - "extraneous": true, - "dependencies": { - "path-key": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/ganache/node_modules/object-is": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/object-is/-/object-is-1.1.5.tgz", - "integrity": "sha512-3cyDsyHgtmi7I7DfSSI2LDp6SK2lwvtbg0p0R1e0RvTqF5ceGx+K2dfSjm1bKDMVCFEDAQvy+o8c6a7VujOddw==", - "extraneous": true, - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/ganache/node_modules/object-keys": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", - "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", - "extraneous": true, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/ganache/node_modules/once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", - "extraneous": true, - "dependencies": { - "wrappy": "1" - } - }, - "node_modules/ganache/node_modules/onetime": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", - "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", - "extraneous": true, - "dependencies": { - "mimic-fn": "^2.1.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/ganache/node_modules/os-browserify": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/os-browserify/-/os-browserify-0.3.0.tgz", - "integrity": "sha512-gjcpUc3clBf9+210TRaDWbf+rZZZEshZ+DlXMRCeAjp0xhTrnQsKHypIy1J3d5hKdUzj69t708EHtU8P6bUn0A==", - "extraneous": true - }, - "node_modules/ganache/node_modules/p-limit": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", - "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", - "extraneous": true, - "dependencies": { - "yocto-queue": "^0.1.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/ganache/node_modules/p-locate": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", - "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", - "extraneous": true, - "dependencies": { - "p-limit": "^3.0.2" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/ganache/node_modules/p-try": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", - "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", - "extraneous": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/ganache/node_modules/parse-asn1": { - "version": "5.1.6", - "resolved": "https://registry.npmjs.org/parse-asn1/-/parse-asn1-5.1.6.tgz", - "integrity": "sha512-RnZRo1EPU6JBnra2vGHj0yhp6ebyjBZpmUCLHWiFhxlzvBCCpAuZ7elsBp1PVAbQN0/04VD/19rfzlBSwLstMw==", - "extraneous": true, - "dependencies": { - "asn1.js": "^5.2.0", - "browserify-aes": "^1.0.0", - "evp_bytestokey": "^1.0.0", - "pbkdf2": "^3.0.3", - "safe-buffer": "^5.1.1" - } - }, - "node_modules/ganache/node_modules/path-browserify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-1.0.1.tgz", - "integrity": "sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g==", - "extraneous": true - }, - "node_modules/ganache/node_modules/path-exists": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", - "extraneous": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/ganache/node_modules/path-is-absolute": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", - "extraneous": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/ganache/node_modules/path-key": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", - "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", - "extraneous": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/ganache/node_modules/path-parse": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", - "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", - "extraneous": true - }, - "node_modules/ganache/node_modules/pbkdf2": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.1.2.tgz", - "integrity": "sha512-iuh7L6jA7JEGu2WxDwtQP1ddOpaJNC4KlDEFfdQajSGgGPNi4OyDc2R7QnbY2bR9QjBVGwgvTdNJZoE7RaxUMA==", - "extraneous": true, - "dependencies": { - "create-hash": "^1.1.2", - "create-hmac": "^1.1.4", - "ripemd160": "^2.0.1", - "safe-buffer": "^5.0.1", - "sha.js": "^2.4.8" - }, - "engines": { - "node": ">=0.12" - } - }, - "node_modules/ganache/node_modules/picocolors": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", - "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", - "extraneous": true - }, - "node_modules/ganache/node_modules/picomatch": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", - "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", - "extraneous": true, - "engines": { - "node": ">=8.6" - } - }, - "node_modules/ganache/node_modules/pkg-dir": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", - "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", - "extraneous": true, - "dependencies": { - "find-up": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/ganache/node_modules/pkg-dir/node_modules/find-up": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", - "extraneous": true, - "dependencies": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/ganache/node_modules/pkg-dir/node_modules/locate-path": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", - "extraneous": true, - "dependencies": { - "p-locate": "^4.1.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/ganache/node_modules/pkg-dir/node_modules/p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", - "extraneous": true, - "dependencies": { - "p-try": "^2.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/ganache/node_modules/pkg-dir/node_modules/p-locate": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", - "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", - "extraneous": true, - "dependencies": { - "p-limit": "^2.2.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/ganache/node_modules/process": { - "version": "0.11.10", - "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", - "integrity": "sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==", - "extraneous": true, - "engines": { - "node": ">= 0.6.0" - } - }, - "node_modules/ganache/node_modules/public-encrypt": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/public-encrypt/-/public-encrypt-4.0.3.tgz", - "integrity": "sha512-zVpa8oKZSz5bTMTFClc1fQOnyyEzpl5ozpi1B5YcvBrdohMjH2rfsBtyXcuNuwjsDIXmBYlF2N5FlJYhR29t8Q==", - "extraneous": true, - "dependencies": { - "bn.js": "^4.1.0", - "browserify-rsa": "^4.0.0", - "create-hash": "^1.1.0", - "parse-asn1": "^5.0.0", - "randombytes": "^2.0.1", - "safe-buffer": "^5.1.2" - } - }, - "node_modules/ganache/node_modules/public-encrypt/node_modules/bn.js": { - "version": "4.12.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", - "extraneous": true - }, - "node_modules/ganache/node_modules/punycode": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", - "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", - "extraneous": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/ganache/node_modules/queue-microtask": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", - "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "inBundle": true, - "license": "MIT" - }, - "node_modules/ganache/node_modules/randombytes": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", - "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", - "extraneous": true, - "dependencies": { - "safe-buffer": "^5.1.0" - } - }, - "node_modules/ganache/node_modules/randomfill": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/randomfill/-/randomfill-1.0.4.tgz", - "integrity": "sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw==", - "extraneous": true, - "dependencies": { - "randombytes": "^2.0.5", - "safe-buffer": "^5.1.0" - } - }, - "node_modules/ganache/node_modules/readable-stream": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", - "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", - "inBundle": true, - "license": "MIT", - "dependencies": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/ganache/node_modules/readdirp": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", - "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", - "extraneous": true, - "dependencies": { - "picomatch": "^2.2.1" - }, - "engines": { - "node": ">=8.10.0" - } - }, - "node_modules/ganache/node_modules/rechoir": { - "version": "0.6.2", - "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.6.2.tgz", - "integrity": "sha512-HFM8rkZ+i3zrV+4LQjwQ0W+ez98pApMGM3HUrN04j3CqzPOzl9nmP15Y8YXNm8QHGv/eacOVEjqhmWpkRV0NAw==", - "extraneous": true, - "dependencies": { - "resolve": "^1.1.6" - }, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/ganache/node_modules/require-directory": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", - "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", - "extraneous": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/ganache/node_modules/resolve": { - "version": "1.17.0", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.17.0.tgz", - "integrity": "sha512-ic+7JYiV8Vi2yzQGFWOkiZD5Z9z7O2Zhm9XMaTxdJExKasieFCr+yXZ/WmXsckHiKl12ar0y6XiXDx3m4RHn1w==", - "extraneous": true, - "dependencies": { - "path-parse": "^1.0.6" - } - }, - "node_modules/ganache/node_modules/resolve-cwd": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-3.0.0.tgz", - "integrity": "sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==", - "extraneous": true, - "dependencies": { - "resolve-from": "^5.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/ganache/node_modules/resolve-from": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", - "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", - "extraneous": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/ganache/node_modules/ripemd160": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.2.tgz", - "integrity": "sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==", - "extraneous": true, - "dependencies": { - "hash-base": "^3.0.0", - "inherits": "^2.0.1" - } - }, - "node_modules/ganache/node_modules/run-parallel-limit": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/run-parallel-limit/-/run-parallel-limit-1.1.0.tgz", - "integrity": "sha512-jJA7irRNM91jaKc3Hcl1npHsFLOXOoTkPCUL1JEa1R82O2miplXXRaGdjW/KM/98YQWDhJLiSs793CnXfblJUw==", - "extraneous": true, - "dependencies": { - "queue-microtask": "^1.2.2" - } - }, - "node_modules/ganache/node_modules/safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "inBundle": true, - "license": "MIT" - }, - "node_modules/ganache/node_modules/safer-buffer": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", - "extraneous": true - }, - "node_modules/ganache/node_modules/schema-utils": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.1.tgz", - "integrity": "sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw==", - "extraneous": true, - "dependencies": { - "@types/json-schema": "^7.0.8", - "ajv": "^6.12.5", - "ajv-keywords": "^3.5.2" - }, - "engines": { - "node": ">= 10.13.0" - } - }, - "node_modules/ganache/node_modules/scrypt-js": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/scrypt-js/-/scrypt-js-3.0.1.tgz", - "integrity": "sha512-cdwTTnqPu0Hyvf5in5asVdZocVDTNRmR7XEcJuIzMjJeSHybHl7vpB66AzwTaIg6CLSbtjcxc8fqcySfnTkccA==", - "extraneous": true - }, - "node_modules/ganache/node_modules/secp256k1": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/secp256k1/-/secp256k1-4.0.3.tgz", - "integrity": "sha512-NLZVf+ROMxwtEj3Xa562qgv2BK5e2WNmXPiOdVIPLgs6lyTzMvBq0aWTYMI5XCP9jZMVKOcqZLw/Wc4vDkuxhA==", - "hasInstallScript": true, - "inBundle": true, - "license": "MIT", - "dependencies": { - "elliptic": "^6.5.4", - "node-addon-api": "^2.0.0", - "node-gyp-build": "^4.2.0" - }, - "engines": { - "node": ">=10.0.0" - } - }, - "node_modules/ganache/node_modules/semver": { - "version": "7.3.8", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", - "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", - "extraneous": true, - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/ganache/node_modules/serialize-javascript": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.0.tgz", - "integrity": "sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag==", - "extraneous": true, - "dependencies": { - "randombytes": "^2.1.0" - } - }, - "node_modules/ganache/node_modules/setimmediate": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", - "integrity": "sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA==", - "extraneous": true - }, - "node_modules/ganache/node_modules/sha.js": { - "version": "2.4.11", - "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz", - "integrity": "sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==", - "extraneous": true, - "dependencies": { - "inherits": "^2.0.1", - "safe-buffer": "^5.0.1" - }, - "bin": { - "sha.js": "bin.js" - } - }, - "node_modules/ganache/node_modules/shallow-clone": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/shallow-clone/-/shallow-clone-3.0.1.tgz", - "integrity": "sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA==", - "extraneous": true, - "dependencies": { - "kind-of": "^6.0.2" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/ganache/node_modules/shebang-command": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", - "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", - "extraneous": true, - "dependencies": { - "shebang-regex": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/ganache/node_modules/shebang-loader": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/shebang-loader/-/shebang-loader-0.0.1.tgz", - "integrity": "sha512-nQvhUHvKyzGK5aqPxHfHB5nlAN2EZ2U61S2G0YrxAuCRU5iGhFcxxRiaAdb18UoRS1zVMhRz4gdQ1xFEg3AOyA==", - "extraneous": true - }, - "node_modules/ganache/node_modules/shebang-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", - "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", - "extraneous": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/ganache/node_modules/shelljs": { - "version": "0.8.5", - "resolved": "https://registry.npmjs.org/shelljs/-/shelljs-0.8.5.tgz", - "integrity": "sha512-TiwcRcrkhHvbrZbnRcFYMLl30Dfov3HKqzp5tO5b4pt6G/SezKcYhmDg15zXVBswHmctSAQKznqNW2LO5tTDow==", - "extraneous": true, - "dependencies": { - "glob": "^7.0.0", - "interpret": "^1.0.0", - "rechoir": "^0.6.2" - }, - "bin": { - "shjs": "bin/shjs" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/ganache/node_modules/shx": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/shx/-/shx-0.3.3.tgz", - "integrity": "sha512-nZJ3HFWVoTSyyB+evEKjJ1STiixGztlqwKLTUNV5KqMWtGey9fTd4KU1gdZ1X9BV6215pswQ/Jew9NsuS/fNDA==", - "extraneous": true, - "dependencies": { - "minimist": "^1.2.3", - "shelljs": "^0.8.4" - }, - "bin": { - "shx": "lib/cli.js" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/ganache/node_modules/signal-exit": { - "version": "3.0.7", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", - "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", - "extraneous": true - }, - "node_modules/ganache/node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "extraneous": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/ganache/node_modules/source-map-support": { - "version": "0.5.21", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", - "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", - "extraneous": true, - "dependencies": { - "buffer-from": "^1.0.0", - "source-map": "^0.6.0" - } - }, - "node_modules/ganache/node_modules/sprintf-js": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", - "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==", - "extraneous": true - }, - "node_modules/ganache/node_modules/stream-browserify": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/stream-browserify/-/stream-browserify-3.0.0.tgz", - "integrity": "sha512-H73RAHsVBapbim0tU2JwwOiXUj+fikfiaoYAKHF3VJfA0pe2BCzkhAHBlLG6REzE+2WNZcxOXjK7lkso+9euLA==", - "extraneous": true, - "dependencies": { - "inherits": "~2.0.4", - "readable-stream": "^3.5.0" - } - }, - "node_modules/ganache/node_modules/stream-http": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/stream-http/-/stream-http-3.2.0.tgz", - "integrity": "sha512-Oq1bLqisTyK3TSCXpPbT4sdeYNdmyZJv1LxpEm2vu1ZhK89kSE5YXwZc3cWk0MagGaKriBh9mCFbVGtO+vY29A==", - "extraneous": true, - "dependencies": { - "builtin-status-codes": "^3.0.0", - "inherits": "^2.0.4", - "readable-stream": "^3.6.0", - "xtend": "^4.0.2" - } - }, - "node_modules/ganache/node_modules/string_decoder": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", - "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", - "inBundle": true, - "license": "MIT", - "dependencies": { - "safe-buffer": "~5.2.0" - } - }, - "node_modules/ganache/node_modules/string-argv": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/string-argv/-/string-argv-0.3.1.tgz", - "integrity": "sha512-a1uQGz7IyVy9YwhqjZIZu1c8JO8dNIe20xBmSS6qu9kv++k3JGzCVmprbNN5Kn+BgzD5E7YYwg1CcjuJMRNsvg==", - "extraneous": true, - "engines": { - "node": ">=0.6.19" - } - }, - "node_modules/ganache/node_modules/string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "extraneous": true, - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/ganache/node_modules/strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "extraneous": true, - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/ganache/node_modules/strip-final-newline": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", - "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", - "extraneous": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/ganache/node_modules/strip-json-comments": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", - "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", - "extraneous": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/ganache/node_modules/supports-color": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", - "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", - "extraneous": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/ganache/node_modules/tapable": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz", - "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==", - "extraneous": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/ganache/node_modules/terser": { - "version": "5.16.1", - "resolved": "https://registry.npmjs.org/terser/-/terser-5.16.1.tgz", - "integrity": "sha512-xvQfyfA1ayT0qdK47zskQgRZeWLoOQ8JQ6mIgRGVNwZKdQMU+5FkCBjmv4QjcrTzyZquRw2FVtlJSRUmMKQslw==", - "extraneous": true, - "dependencies": { - "@jridgewell/source-map": "^0.3.2", - "acorn": "^8.5.0", - "commander": "^2.20.0", - "source-map-support": "~0.5.20" - }, - "bin": { - "terser": "bin/terser" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/ganache/node_modules/terser-webpack-plugin": { - "version": "5.2.5", - "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.2.5.tgz", - "integrity": "sha512-3luOVHku5l0QBeYS8r4CdHYWEGMmIj3H1U64jgkdZzECcSOJAyJ9TjuqcQZvw1Y+4AOBN9SeYJPJmFn2cM4/2g==", - "extraneous": true, - "dependencies": { - "jest-worker": "^27.0.6", - "schema-utils": "^3.1.1", - "serialize-javascript": "^6.0.0", - "source-map": "^0.6.1", - "terser": "^5.7.2" - }, - "engines": { - "node": ">= 10.13.0" - } - }, - "node_modules/ganache/node_modules/timsort": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/timsort/-/timsort-0.3.0.tgz", - "integrity": "sha512-qsdtZH+vMoCARQtyod4imc2nIJwg9Cc7lPRrw9CzF8ZKR0khdr8+2nX80PBhET3tcyTtJDxAffGh2rXH4tyU8A==", - "extraneous": true - }, - "node_modules/ganache/node_modules/to-regex-range": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", - "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", - "extraneous": true, - "dependencies": { - "is-number": "^7.0.0" - }, - "engines": { - "node": ">=8.0" - } - }, - "node_modules/ganache/node_modules/ts-loader": { - "version": "9.3.1", - "resolved": "https://registry.npmjs.org/ts-loader/-/ts-loader-9.3.1.tgz", - "integrity": "sha512-OkyShkcZTsTwyS3Kt7a4rsT/t2qvEVQuKCTg4LJmpj9fhFR7ukGdZwV6Qq3tRUkqcXtfGpPR7+hFKHCG/0d3Lw==", - "extraneous": true, - "dependencies": { - "chalk": "^4.1.0", - "enhanced-resolve": "^5.0.0", - "micromatch": "^4.0.0", - "semver": "^7.3.4" - }, - "engines": { - "node": ">=12.0.0" - } - }, - "node_modules/ganache/node_modules/ts-node": { - "version": "10.9.1", - "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.9.1.tgz", - "integrity": "sha512-NtVysVPkxxrwFGUUxGYhfux8k78pQB3JqYBXlLRZgdGUqTO5wU/UyHop5p70iEbGhB7q5KmiZiU0Y3KlJrScEw==", - "extraneous": true, - "dependencies": { - "@cspotcode/source-map-support": "^0.8.0", - "@tsconfig/node10": "^1.0.7", - "@tsconfig/node12": "^1.0.7", - "@tsconfig/node14": "^1.0.0", - "@tsconfig/node16": "^1.0.2", - "acorn": "^8.4.1", - "acorn-walk": "^8.1.1", - "arg": "^4.1.0", - "create-require": "^1.1.0", - "diff": "^4.0.1", - "make-error": "^1.1.1", - "v8-compile-cache-lib": "^3.0.1", - "yn": "3.1.1" - }, - "bin": { - "ts-node": "dist/bin.js", - "ts-node-cwd": "dist/bin-cwd.js", - "ts-node-esm": "dist/bin-esm.js", - "ts-node-script": "dist/bin-script.js", - "ts-node-transpile-only": "dist/bin-transpile.js", - "ts-script": "dist/bin-script-deprecated.js" - } - }, - "node_modules/ganache/node_modules/ts-node/node_modules/diff": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", - "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", - "extraneous": true, - "engines": { - "node": ">=0.3.1" - } - }, - "node_modules/ganache/node_modules/typescript": { - "version": "5.1.6", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.1.6.tgz", - "integrity": "sha512-zaWCozRZ6DLEWAWFrVDz1H6FVXzUSfTy5FUMWsQlU8Ym5JP9eO4xkTIROFCQvhQf61z6O/G6ugw3SgAnvvm+HA==", - "extraneous": true, - "bin": { - "tsc": "bin/tsc", - "tsserver": "bin/tsserver" - }, - "engines": { - "node": ">=14.17" - } - }, - "node_modules/ganache/node_modules/universalify": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", - "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", - "extraneous": true, - "engines": { - "node": ">= 4.0.0" - } - }, - "node_modules/ganache/node_modules/update-browserslist-db": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.10.tgz", - "integrity": "sha512-OztqDenkfFkbSG+tRxBeAnCVPckDBcvibKd35yDONx6OU8N7sqgwc7rCbkJ/WcYtVRZ4ba68d6byhC21GFh7sQ==", - "extraneous": true, - "dependencies": { - "escalade": "^3.1.1", - "picocolors": "^1.0.0" - }, - "bin": { - "browserslist-lint": "cli.js" - } - }, - "node_modules/ganache/node_modules/uri-js": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", - "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", - "extraneous": true, - "dependencies": { - "punycode": "^2.1.0" - } - }, - "node_modules/ganache/node_modules/utf-8-validate": { - "version": "5.0.7", - "resolved": "https://registry.npmjs.org/utf-8-validate/-/utf-8-validate-5.0.7.tgz", - "integrity": "sha512-vLt1O5Pp+flcArHGIyKEQq883nBt8nN8tVBcoL0qUXj2XT1n7p70yGIq2VK98I5FdZ1YHc0wk/koOnHjnXWk1Q==", - "hasInstallScript": true, - "optional": true, - "dependencies": { - "node-gyp-build": "^4.3.0" - }, - "engines": { - "node": ">=6.14.2" - } - }, - "node_modules/ganache/node_modules/util": { - "version": "0.12.4", - "resolved": "https://registry.npmjs.org/util/-/util-0.12.4.tgz", - "integrity": "sha512-bxZ9qtSlGUWSOy9Qa9Xgk11kSslpuZwaxCg4sNIDj6FLucDab2JxnHwyNTCpHMtK1MjoQiWQ6DiUMZYbSrO+Sw==", - "extraneous": true, - "dependencies": { - "inherits": "^2.0.3", - "is-arguments": "^1.0.4", - "is-generator-function": "^1.0.7", - "is-typed-array": "^1.1.3", - "safe-buffer": "^5.1.2", - "which-typed-array": "^1.1.2" - } - }, - "node_modules/ganache/node_modules/util-deprecate": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", - "inBundle": true, - "license": "MIT" - }, - "node_modules/ganache/node_modules/v8-compile-cache-lib": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz", - "integrity": "sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==", - "extraneous": true - }, - "node_modules/ganache/node_modules/validator": { - "version": "13.7.0", - "resolved": "https://registry.npmjs.org/validator/-/validator-13.7.0.tgz", - "integrity": "sha512-nYXQLCBkpJ8X6ltALua9dRrZDHVYxjJ1wgskNt1lH9fzGjs3tgojGSCBjmEPwkWS1y29+DrizMTW19Pr9uB2nw==", - "extraneous": true, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/ganache/node_modules/watchpack": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.4.0.tgz", - "integrity": "sha512-Lcvm7MGST/4fup+ifyKi2hjyIAwcdI4HRgtvTpIUxBRhB+RFtUh8XtDOxUfctVCnhVi+QQj49i91OyvzkJl6cg==", - "extraneous": true, - "dependencies": { - "glob-to-regexp": "^0.4.1", - "graceful-fs": "^4.1.2" - }, - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/ganache/node_modules/webpack": { - "version": "5.65.0", - "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.65.0.tgz", - "integrity": "sha512-Q5or2o6EKs7+oKmJo7LaqZaMOlDWQse9Tm5l1WAfU/ujLGN5Pb0SqGeVkN/4bpPmEqEP5RnVhiqsOtWtUVwGRw==", - "extraneous": true, - "dependencies": { - "@types/eslint-scope": "^3.7.0", - "@types/estree": "^0.0.50", - "@webassemblyjs/ast": "1.11.1", - "@webassemblyjs/wasm-edit": "1.11.1", - "@webassemblyjs/wasm-parser": "1.11.1", - "acorn": "^8.4.1", - "acorn-import-assertions": "^1.7.6", - "browserslist": "^4.14.5", - "chrome-trace-event": "^1.0.2", - "enhanced-resolve": "^5.8.3", - "es-module-lexer": "^0.9.0", - "eslint-scope": "5.1.1", - "events": "^3.2.0", - "glob-to-regexp": "^0.4.1", - "graceful-fs": "^4.2.4", - "json-parse-better-errors": "^1.0.2", - "loader-runner": "^4.2.0", - "mime-types": "^2.1.27", - "neo-async": "^2.6.2", - "schema-utils": "^3.1.0", - "tapable": "^2.1.1", - "terser-webpack-plugin": "^5.1.3", - "watchpack": "^2.3.1", - "webpack-sources": "^3.2.2" - }, - "bin": { - "webpack": "bin/webpack.js" - }, - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/ganache/node_modules/webpack-cli": { - "version": "4.9.1", - "resolved": "https://registry.npmjs.org/webpack-cli/-/webpack-cli-4.9.1.tgz", - "integrity": "sha512-JYRFVuyFpzDxMDB+v/nanUdQYcZtqFPGzmlW4s+UkPMFhSpfRNmf1z4AwYcHJVdvEFAM7FFCQdNTpsBYhDLusQ==", - "extraneous": true, - "dependencies": { - "@discoveryjs/json-ext": "^0.5.0", - "@webpack-cli/configtest": "^1.1.0", - "@webpack-cli/info": "^1.4.0", - "@webpack-cli/serve": "^1.6.0", - "colorette": "^2.0.14", - "commander": "^7.0.0", - "execa": "^5.0.0", - "fastest-levenshtein": "^1.0.12", - "import-local": "^3.0.2", - "interpret": "^2.2.0", - "rechoir": "^0.7.0", - "webpack-merge": "^5.7.3" - }, - "bin": { - "webpack-cli": "bin/cli.js" - }, - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/ganache/node_modules/webpack-cli/node_modules/commander": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", - "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==", - "extraneous": true, - "engines": { - "node": ">= 10" - } - }, - "node_modules/ganache/node_modules/webpack-cli/node_modules/interpret": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/interpret/-/interpret-2.2.0.tgz", - "integrity": "sha512-Ju0Bz/cEia55xDwUWEa8+olFpCiQoypjnQySseKtmjNrnps3P+xfpUmGr90T7yjlVJmOtybRvPXhKMbHr+fWnw==", - "extraneous": true, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/ganache/node_modules/webpack-cli/node_modules/rechoir": { - "version": "0.7.1", - "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.7.1.tgz", - "integrity": "sha512-/njmZ8s1wVeR6pjTZ+0nCnv8SpZNRMT2D1RLOJQESlYFDBvwpTA4KWJpZ+sBJ4+vhjILRcK7JIFdGCdxEAAitg==", - "extraneous": true, - "dependencies": { - "resolve": "^1.9.0" - }, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/ganache/node_modules/webpack-merge": { - "version": "5.8.0", - "resolved": "https://registry.npmjs.org/webpack-merge/-/webpack-merge-5.8.0.tgz", - "integrity": "sha512-/SaI7xY0831XwP6kzuwhKWVKDP9t1QY1h65lAFLbZqMPIuYcD9QAW4u9STIbU9kaJbPBB/geU/gLr1wDjOhQ+Q==", - "extraneous": true, - "dependencies": { - "clone-deep": "^4.0.1", - "wildcard": "^2.0.0" - }, - "engines": { - "node": ">=10.0.0" - } - }, - "node_modules/ganache/node_modules/webpack-sources": { - "version": "3.2.3", - "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-3.2.3.tgz", - "integrity": "sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==", - "extraneous": true, - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/ganache/node_modules/which": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "extraneous": true, - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "node-which": "bin/node-which" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/ganache/node_modules/which-typed-array": { - "version": "1.1.9", - "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.9.tgz", - "integrity": "sha512-w9c4xkx6mPidwp7180ckYWfMmvxpjlZuIudNtDf4N/tTAUB8VJbX25qZoAsrtGuYNnGw3pa0AXgbGKRB8/EceA==", - "extraneous": true, - "dependencies": { - "available-typed-arrays": "^1.0.5", - "call-bind": "^1.0.2", - "for-each": "^0.3.3", - "gopd": "^1.0.1", - "has-tostringtag": "^1.0.0", - "is-typed-array": "^1.1.10" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/ganache/node_modules/wildcard": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/wildcard/-/wildcard-2.0.0.tgz", - "integrity": "sha512-JcKqAHLPxcdb9KM49dufGXn2x3ssnfjbcaQdLlfZsL9rH9wgDQjUtDxbo8NE0F6SFvydeu1VhZe7hZuHsB2/pw==", - "extraneous": true - }, - "node_modules/ganache/node_modules/workerpool": { - "version": "6.1.5", - "resolved": "https://registry.npmjs.org/workerpool/-/workerpool-6.1.5.tgz", - "integrity": "sha512-XdKkCK0Zqc6w3iTxLckiuJ81tiD/o5rBE/m+nXpRCB+/Sq4DqkfXZ/x0jW02DG1tGsfUGXbTJyZDP+eu67haSw==", - "extraneous": true - }, - "node_modules/ganache/node_modules/wrap-ansi": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", - "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", - "extraneous": true, - "dependencies": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/ganache/node_modules/wrappy": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", - "extraneous": true - }, - "node_modules/ganache/node_modules/xtend": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", - "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", - "extraneous": true, - "engines": { - "node": ">=0.4" - } - }, - "node_modules/ganache/node_modules/y18n": { - "version": "5.0.8", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", - "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", - "extraneous": true, - "engines": { - "node": ">=10" - } - }, - "node_modules/ganache/node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "extraneous": true - }, - "node_modules/ganache/node_modules/yargs": { - "version": "16.2.0", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", - "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", - "extraneous": true, - "dependencies": { - "cliui": "^7.0.2", - "escalade": "^3.1.1", - "get-caller-file": "^2.0.5", - "require-directory": "^2.1.1", - "string-width": "^4.2.0", - "y18n": "^5.0.5", - "yargs-parser": "^20.2.2" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/ganache/node_modules/yargs-parser": { - "version": "20.2.4", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.4.tgz", - "integrity": "sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA==", - "extraneous": true, - "engines": { - "node": ">=10" - } - }, - "node_modules/ganache/node_modules/yargs-unparser": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/yargs-unparser/-/yargs-unparser-2.0.0.tgz", - "integrity": "sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA==", - "extraneous": true, - "dependencies": { - "camelcase": "^6.0.0", - "decamelize": "^4.0.0", - "flat": "^5.0.2", - "is-plain-obj": "^2.1.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/ganache/node_modules/yn": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz", - "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==", - "extraneous": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/ganache/node_modules/yocto-queue": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", - "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", - "extraneous": true, - "engines": { - "node": ">=10" - } - }, - "node_modules/ganache/node_modules/z-schema": { - "version": "5.0.4", - "resolved": "https://registry.npmjs.org/z-schema/-/z-schema-5.0.4.tgz", - "integrity": "sha512-gm/lx3hDzJNcLwseIeQVm1UcwhWIKpSB4NqH89pTBtFns4k/HDHudsICtvG05Bvw/Mv3jMyk700y5dadueLHdA==", - "extraneous": true, - "dependencies": { - "commander": "^2.20.3", - "lodash.get": "^4.4.2", - "lodash.isequal": "^4.5.0", - "validator": "^13.7.0" - }, - "bin": { - "z-schema": "bin/z-schema" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/gensync": { - "version": "1.0.0-beta.2", - "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", - "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", - "peer": true, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/get-caller-file": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", - "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", - "engines": { - "node": "6.* || 8.* || >= 10.*" - } - }, - "node_modules/get-func-name": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/get-func-name/-/get-func-name-2.0.0.tgz", - "integrity": "sha512-Hm0ixYtaSZ/V7C8FJrtZIuBBI+iSgL+1Aq82zSu8VQNB4S3Gk8e7Qs3VwBDJAhmRZcFqkl3tQu36g/Foh5I5ig==", - "engines": { - "node": "*" - } - }, - "node_modules/get-intrinsic": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.3.tgz", - "integrity": "sha512-QJVz1Tj7MS099PevUG5jvnt9tSkXN8K14dxQlikJuPt4uD9hHAHjLyLBiLR5zELelBdD9QNRAXZzsJx0WaDL9A==", - "dependencies": { - "function-bind": "^1.1.1", - "has": "^1.0.3", - "has-symbols": "^1.0.3" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/get-port": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/get-port/-/get-port-3.2.0.tgz", - "integrity": "sha512-x5UJKlgeUiNT8nyo/AcnwLnZuZNcSjSw0kogRB+Whd1fjjFq4B1hySFxSFWWSn4mIBzg3sRNUDFYc4g5gjPoLg==", - "engines": { - "node": ">=4" - } - }, - "node_modules/get-stdin": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-8.0.0.tgz", - "integrity": "sha512-sY22aA6xchAzprjyqmSEQv4UbAAzRN0L2dQB0NlN5acTTK9Don6nhoc3eAbUnpZiCANAMfd/+40kVdKfFygohg==", - "optional": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/get-stream": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", - "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/get-symbol-description": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.0.tgz", - "integrity": "sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==", - "dependencies": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.1.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/getpass": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", - "integrity": "sha512-0fzj9JxOLfJ+XGLhR8ze3unN0KZCgZwiSSDz168VERjK8Wl8kVSdcu2kspd4s4wtAa1y/qrVRiAA0WclVsu0ng==", - "dependencies": { - "assert-plus": "^1.0.0" - } - }, - "node_modules/glob": { - "version": "8.0.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-8.0.3.tgz", - "integrity": "sha512-ull455NHSHI/Y1FqGaaYFaLGkNMMJbavMrEGFXG/PGrg6y7sutWHUHrz6gy6WEBH6akM1M414dWKCNs+IhKdiQ==", - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^5.0.1", - "once": "^1.3.0" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", - "dependencies": { - "is-glob": "^4.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/glob-promise": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/glob-promise/-/glob-promise-3.4.0.tgz", - "integrity": "sha512-q08RJ6O+eJn+dVanerAndJwIcumgbDdYiUT7zFQl3Wm1xD6fBKtah7H8ZJChj4wP+8C+QfeVy8xautR7rdmKEw==", - "dependencies": { - "@types/glob": "*" - }, - "engines": { - "node": ">=4" - }, - "peerDependencies": { - "glob": "*" - } - }, - "node_modules/global": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/global/-/global-4.4.0.tgz", - "integrity": "sha512-wv/LAoHdRE3BeTGz53FAamhGlPLhlssK45usmGFThIi4XqnBmjKQ16u+RNbP7WvigRZDxUsM0J3gcQ5yicaL0w==", - "dependencies": { - "min-document": "^2.19.0", - "process": "^0.11.10" - } - }, - "node_modules/globals": { - "version": "11.12.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", - "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", - "peer": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/got": { - "version": "12.1.0", - "resolved": "https://registry.npmjs.org/got/-/got-12.1.0.tgz", - "integrity": "sha512-hBv2ty9QN2RdbJJMK3hesmSkFTjVIHyIDDbssCKnSmq62edGgImJWD10Eb1k77TiV1bxloxqcFAVK8+9pkhOig==", - "dependencies": { - "@sindresorhus/is": "^4.6.0", - "@szmarczak/http-timer": "^5.0.1", - "@types/cacheable-request": "^6.0.2", - "@types/responselike": "^1.0.0", - "cacheable-lookup": "^6.0.4", - "cacheable-request": "^7.0.2", - "decompress-response": "^6.0.0", - "form-data-encoder": "1.7.1", - "get-stream": "^6.0.1", - "http2-wrapper": "^2.1.10", - "lowercase-keys": "^3.0.0", - "p-cancelable": "^3.0.0", - "responselike": "^2.0.0" - }, - "engines": { - "node": ">=14.16" - }, - "funding": { - "url": "https://github.com/sindresorhus/got?sponsor=1" - } - }, - "node_modules/got/node_modules/decompress-response": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-6.0.0.tgz", - "integrity": "sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==", - "dependencies": { - "mimic-response": "^3.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/got/node_modules/mimic-response": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-3.1.0.tgz", - "integrity": "sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/graceful-fs": { - "version": "4.2.10", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz", - "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==" - }, - "node_modules/graphql": { - "version": "15.8.0", - "resolved": "https://registry.npmjs.org/graphql/-/graphql-15.8.0.tgz", - "integrity": "sha512-5gghUc24tP9HRznNpV2+FIoq3xKkj5dTQqf4v0CpdPbFVwFkWoxOM+o+2OC9ZSvjEMTjfmG9QT+gcvggTwW1zw==", - "optional": true, - "engines": { - "node": ">= 10.x" - } - }, - "node_modules/graphql-tag": { - "version": "2.12.6", - "resolved": "https://registry.npmjs.org/graphql-tag/-/graphql-tag-2.12.6.tgz", - "integrity": "sha512-FdSNcu2QQcWnM2VNvSCCDCVS5PpPqpzgFT8+GXzqJuoDd0CBncxCY278u4mhRO7tMgo2JjgJA5aZ+nWSQ/Z+xg==", - "optional": true, - "dependencies": { - "tslib": "^2.1.0" - }, - "engines": { - "node": ">=10" - }, - "peerDependencies": { - "graphql": "^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0" - } - }, - "node_modules/growl": { - "version": "1.10.5", - "resolved": "https://registry.npmjs.org/growl/-/growl-1.10.5.tgz", - "integrity": "sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA==", - "engines": { - "node": ">=4.x" - } - }, - "node_modules/har-schema": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz", - "integrity": "sha512-Oqluz6zhGX8cyRaTQlFMPw80bSJVG2x/cFb8ZPhUILGgHka9SsokCCOQgpveePerqidZOrT14ipqfJb7ILcW5Q==", - "engines": { - "node": ">=4" - } - }, - "node_modules/har-validator": { - "version": "5.1.5", - "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.5.tgz", - "integrity": "sha512-nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w==", - "deprecated": "this library is no longer supported", - "dependencies": { - "ajv": "^6.12.3", - "har-schema": "^2.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/hardhat": { - "version": "2.17.3", - "resolved": "https://registry.npmjs.org/hardhat/-/hardhat-2.17.3.tgz", - "integrity": "sha512-SFZoYVXW1bWJZrIIKXOA+IgcctfuKXDwENywiYNT2dM3YQc4fXNaTbuk/vpPzHIF50upByx4zW5EqczKYQubsA==", - "dependencies": { - "@ethersproject/abi": "^5.1.2", - "@metamask/eth-sig-util": "^4.0.0", - "@nomicfoundation/ethereumjs-block": "5.0.2", - "@nomicfoundation/ethereumjs-blockchain": "7.0.2", - "@nomicfoundation/ethereumjs-common": "4.0.2", - "@nomicfoundation/ethereumjs-evm": "2.0.2", - "@nomicfoundation/ethereumjs-rlp": "5.0.2", - "@nomicfoundation/ethereumjs-statemanager": "2.0.2", - "@nomicfoundation/ethereumjs-trie": "6.0.2", - "@nomicfoundation/ethereumjs-tx": "5.0.2", - "@nomicfoundation/ethereumjs-util": "9.0.2", - "@nomicfoundation/ethereumjs-vm": "7.0.2", - "@nomicfoundation/solidity-analyzer": "^0.1.0", - "@sentry/node": "^5.18.1", - "@types/bn.js": "^5.1.0", - "@types/lru-cache": "^5.1.0", - "adm-zip": "^0.4.16", - "aggregate-error": "^3.0.0", - "ansi-escapes": "^4.3.0", - "chalk": "^2.4.2", - "chokidar": "^3.4.0", - "ci-info": "^2.0.0", - "debug": "^4.1.1", - "enquirer": "^2.3.0", - "env-paths": "^2.2.0", - "ethereum-cryptography": "^1.0.3", - "ethereumjs-abi": "^0.6.8", - "find-up": "^2.1.0", - "fp-ts": "1.19.3", - "fs-extra": "^7.0.1", - "glob": "7.2.0", - "immutable": "^4.0.0-rc.12", - "io-ts": "1.10.4", - "keccak": "^3.0.2", - "lodash": "^4.17.11", - "mnemonist": "^0.38.0", - "mocha": "^10.0.0", - "p-map": "^4.0.0", - "raw-body": "^2.4.1", - "resolve": "1.17.0", - "semver": "^6.3.0", - "solc": "0.7.3", - "source-map-support": "^0.5.13", - "stacktrace-parser": "^0.1.10", - "tsort": "0.0.1", - "undici": "^5.14.0", - "uuid": "^8.3.2", - "ws": "^7.4.6" - }, - "bin": { - "hardhat": "internal/cli/bootstrap.js" - }, - "peerDependencies": { - "ts-node": "*", - "typescript": "*" - }, - "peerDependenciesMeta": { - "ts-node": { - "optional": true - }, - "typescript": { - "optional": true - } - } - }, - "node_modules/hardhat-contract-sizer": { - "version": "2.10.0", - "resolved": "https://registry.npmjs.org/hardhat-contract-sizer/-/hardhat-contract-sizer-2.10.0.tgz", - "integrity": "sha512-QiinUgBD5MqJZJh1hl1jc9dNnpJg7eE/w4/4GEnrcmZJJTDbVFNe3+/3Ep24XqISSkYxRz36czcPHKHd/a0dwA==", - "dependencies": { - "chalk": "^4.0.0", - "cli-table3": "^0.6.0", - "strip-ansi": "^6.0.0" - }, - "peerDependencies": { - "hardhat": "^2.0.0" - } - }, - "node_modules/hardhat-contract-sizer/node_modules/ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "engines": { - "node": ">=8" - } - }, - "node_modules/hardhat-contract-sizer/node_modules/strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/hardhat-deploy": { - "version": "0.11.37", - "resolved": "https://registry.npmjs.org/hardhat-deploy/-/hardhat-deploy-0.11.37.tgz", - "integrity": "sha512-pohPSEEo/X9Yfv0Fc0kXBQW6JO0LNOILBGCP69Ci1COJvLht1hLjAtXt/hccyvD9qY/uwJAM75fmsf41Y9N7lg==", - "dev": true, - "dependencies": { - "@ethersproject/abi": "^5.7.0", - "@ethersproject/abstract-signer": "^5.7.0", - "@ethersproject/address": "^5.7.0", - "@ethersproject/bignumber": "^5.7.0", - "@ethersproject/bytes": "^5.7.0", - "@ethersproject/constants": "^5.7.0", - "@ethersproject/contracts": "^5.7.0", - "@ethersproject/providers": "^5.7.2", - "@ethersproject/solidity": "^5.7.0", - "@ethersproject/transactions": "^5.7.0", - "@ethersproject/wallet": "^5.7.0", - "@types/qs": "^6.9.7", - "axios": "^0.21.1", - "chalk": "^4.1.2", - "chokidar": "^3.5.2", - "debug": "^4.3.2", - "enquirer": "^2.3.6", - "ethers": "^5.5.3", - "form-data": "^4.0.0", - "fs-extra": "^10.0.0", - "match-all": "^1.2.6", - "murmur-128": "^0.2.1", - "qs": "^6.9.4", - "zksync-web3": "^0.14.3" - } - }, - "node_modules/hardhat-deploy/node_modules/form-data": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz", - "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==", - "dev": true, - "dependencies": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.8", - "mime-types": "^2.1.12" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/hardhat-deploy/node_modules/fs-extra": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz", - "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==", - "dev": true, - "dependencies": { - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/hardhat-gas-reporter": { - "version": "1.0.9", - "resolved": "https://registry.npmjs.org/hardhat-gas-reporter/-/hardhat-gas-reporter-1.0.9.tgz", - "integrity": "sha512-INN26G3EW43adGKBNzYWOlI3+rlLnasXTwW79YNnUhXPDa+yHESgt639dJEs37gCjhkbNKcRRJnomXEuMFBXJg==", - "dependencies": { - "array-uniq": "1.0.3", - "eth-gas-reporter": "^0.2.25", - "sha1": "^1.1.1" - }, - "peerDependencies": { - "hardhat": "^2.0.2" - } - }, - "node_modules/hardhat-spdx-license-identifier": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/hardhat-spdx-license-identifier/-/hardhat-spdx-license-identifier-2.1.0.tgz", - "integrity": "sha512-Z3Avr/v6lfDfa7qkriF/h40X8wmuy8qZfS4HgbINkDdmCiKAxQUi5Y5TgsJBZFYN1MvYzLTIbD/fo1dxZ4gsng==", - "peerDependencies": { - "hardhat": "^2.0.0" - } - }, - "node_modules/hardhat-tracer": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/hardhat-tracer/-/hardhat-tracer-2.6.0.tgz", - "integrity": "sha512-omsGd9NN5i0WmIFuEVZIxULfu5v6zU4/Vx+6oIVmziIJdQgZacmP5VmtVhnJEQd7IPDZNQAa+iBbW827g/ErFQ==", - "dependencies": { - "chalk": "^4.1.2", - "debug": "^4.3.4", - "ethers": "^5.6.1" - }, - "peerDependencies": { - "chai": "4.x", - "hardhat": ">=2.16 <3.x" - } - }, - "node_modules/hardhat-watcher": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/hardhat-watcher/-/hardhat-watcher-2.5.0.tgz", - "integrity": "sha512-Su2qcSMIo2YO2PrmJ0/tdkf+6pSt8zf9+4URR5edMVti6+ShI8T3xhPrwugdyTOFuyj8lKHrcTZNKUFYowYiyA==", - "dependencies": { - "chokidar": "^3.5.3" - }, - "peerDependencies": { - "hardhat": "^2.0.0" - } - }, - "node_modules/hardhat/node_modules/ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dependencies": { - "color-convert": "^1.9.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/hardhat/node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/hardhat/node_modules/chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/hardhat/node_modules/color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dependencies": { - "color-name": "1.1.3" - } - }, - "node_modules/hardhat/node_modules/color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==" - }, - "node_modules/hardhat/node_modules/commander": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/commander/-/commander-3.0.2.tgz", - "integrity": "sha512-Gar0ASD4BDyKC4hl4DwHqDrmvjoxWKZigVnAbn5H1owvm4CxCPdb0HQDehwNYMJpla5+M2tPmPARzhtYuwpHow==" - }, - "node_modules/hardhat/node_modules/escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/hardhat/node_modules/find-up": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", - "integrity": "sha512-NWzkk0jSJtTt08+FBFMvXoeZnOJD+jTtsRmBYbAIzJdX6l7dLgR7CTubCM5/eDdPUBvLCeVasP1brfVR/9/EZQ==", - "dependencies": { - "locate-path": "^2.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/hardhat/node_modules/fs-extra": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-7.0.1.tgz", - "integrity": "sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==", - "dependencies": { - "graceful-fs": "^4.1.2", - "jsonfile": "^4.0.0", - "universalify": "^0.1.0" - }, - "engines": { - "node": ">=6 <7 || >=8" - } - }, - "node_modules/hardhat/node_modules/glob": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz", - "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==", - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "engines": { - "node": "*" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/hardhat/node_modules/has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", - "engines": { - "node": ">=4" - } - }, - "node_modules/hardhat/node_modules/jsonfile": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", - "integrity": "sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==", - "optionalDependencies": { - "graceful-fs": "^4.1.6" - } - }, - "node_modules/hardhat/node_modules/locate-path": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", - "integrity": "sha512-NCI2kiDkyR7VeEKm27Kda/iQHyKJe1Bu0FlTbYp3CqJu+9IFe9bLyAjMxf5ZDDbEg+iMPzB5zYyUTSm8wVTKmA==", - "dependencies": { - "p-locate": "^2.0.0", - "path-exists": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/hardhat/node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, - "node_modules/hardhat/node_modules/p-limit": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz", - "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==", - "dependencies": { - "p-try": "^1.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/hardhat/node_modules/p-locate": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz", - "integrity": "sha512-nQja7m7gSKuewoVRen45CtVfODR3crN3goVQ0DDZ9N3yHxgpkuBhZqsaiotSQRrADUrne346peY7kT3TSACykg==", - "dependencies": { - "p-limit": "^1.1.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/hardhat/node_modules/p-try": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz", - "integrity": "sha512-U1etNYuMJoIz3ZXSrrySFjsXQTWOx2/jdi86L+2pRvph/qMKL6sbcCYdH23fqsbm8TH2Gn0OybpT4eSFlCVHww==", - "engines": { - "node": ">=4" - } - }, - "node_modules/hardhat/node_modules/path-exists": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", - "integrity": "sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==", - "engines": { - "node": ">=4" - } - }, - "node_modules/hardhat/node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/hardhat/node_modules/solc": { - "version": "0.7.3", - "resolved": "https://registry.npmjs.org/solc/-/solc-0.7.3.tgz", - "integrity": "sha512-GAsWNAjGzIDg7VxzP6mPjdurby3IkGCjQcM8GFYZT6RyaoUZKmMU6Y7YwG+tFGhv7dwZ8rmR4iwFDrrD99JwqA==", - "dependencies": { - "command-exists": "^1.2.8", - "commander": "3.0.2", - "follow-redirects": "^1.12.1", - "fs-extra": "^0.30.0", - "js-sha3": "0.8.0", - "memorystream": "^0.3.1", - "require-from-string": "^2.0.0", - "semver": "^5.5.0", - "tmp": "0.0.33" - }, - "bin": { - "solcjs": "solcjs" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/hardhat/node_modules/solc/node_modules/fs-extra": { - "version": "0.30.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-0.30.0.tgz", - "integrity": "sha512-UvSPKyhMn6LEd/WpUaV9C9t3zATuqoqfWc3QdPhPLb58prN9tqYPlPWi8Krxi44loBoUzlobqZ3+8tGpxxSzwA==", - "dependencies": { - "graceful-fs": "^4.1.2", - "jsonfile": "^2.1.0", - "klaw": "^1.0.0", - "path-is-absolute": "^1.0.0", - "rimraf": "^2.2.8" - } - }, - "node_modules/hardhat/node_modules/solc/node_modules/jsonfile": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-2.4.0.tgz", - "integrity": "sha512-PKllAqbgLgxHaj8TElYymKCAgrASebJrWpTnEkOaTowt23VKXXN0sUeriJ+eh7y6ufb/CC5ap11pz71/cM0hUw==", - "optionalDependencies": { - "graceful-fs": "^4.1.6" - } - }, - "node_modules/hardhat/node_modules/solc/node_modules/semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "bin": { - "semver": "bin/semver" - } - }, - "node_modules/hardhat/node_modules/supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/hardhat/node_modules/universalify": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", - "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", - "engines": { - "node": ">= 4.0.0" - } - }, - "node_modules/hardhat/node_modules/ws": { - "version": "7.5.9", - "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.9.tgz", - "integrity": "sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q==", - "engines": { - "node": ">=8.3.0" - }, - "peerDependencies": { - "bufferutil": "^4.0.1", - "utf-8-validate": "^5.0.2" - }, - "peerDependenciesMeta": { - "bufferutil": { - "optional": true - }, - "utf-8-validate": { - "optional": true - } - } - }, - "node_modules/has": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", - "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", - "dependencies": { - "function-bind": "^1.1.1" - }, - "engines": { - "node": ">= 0.4.0" - } - }, - "node_modules/has-bigints": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.2.tgz", - "integrity": "sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==", - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "engines": { - "node": ">=8" - } - }, - "node_modules/has-property-descriptors": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz", - "integrity": "sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==", - "dependencies": { - "get-intrinsic": "^1.1.1" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has-symbol-support-x": { - "version": "1.4.2", - "resolved": "https://registry.npmjs.org/has-symbol-support-x/-/has-symbol-support-x-1.4.2.tgz", - "integrity": "sha512-3ToOva++HaW+eCpgqZrCfN51IPB+7bJNVT6CUATzueB5Heb8o6Nam0V3HG5dlDvZU1Gn5QLcbahiKw/XVk5JJw==", - "engines": { - "node": "*" - } - }, - "node_modules/has-symbols": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", - "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has-to-string-tag-x": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/has-to-string-tag-x/-/has-to-string-tag-x-1.4.1.tgz", - "integrity": "sha512-vdbKfmw+3LoOYVr+mtxHaX5a96+0f3DljYd8JOqvOLsf5mw2Otda2qCDT9qRqLAhrjyQ0h7ual5nOiASpsGNFw==", - "dependencies": { - "has-symbol-support-x": "^1.4.1" - }, - "engines": { - "node": "*" - } - }, - "node_modules/has-tostringtag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz", - "integrity": "sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==", - "dependencies": { - "has-symbols": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/hash-base": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.1.0.tgz", - "integrity": "sha512-1nmYp/rhMDiE7AYkDw+lLwlAzz0AntGIe51F3RfFfEqyQ3feY2eI/NcwC6umIQVOASPMsWJLJScWKSSvzL9IVA==", - "dependencies": { - "inherits": "^2.0.4", - "readable-stream": "^3.6.0", - "safe-buffer": "^5.2.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/hash.js": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.7.tgz", - "integrity": "sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==", - "dependencies": { - "inherits": "^2.0.3", - "minimalistic-assert": "^1.0.1" - } - }, - "node_modules/he": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", - "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", - "bin": { - "he": "bin/he" - } - }, - "node_modules/header-case": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/header-case/-/header-case-1.0.1.tgz", - "integrity": "sha512-i0q9mkOeSuhXw6bGgiQCCBgY/jlZuV/7dZXyZ9c6LcBrqwvT8eT719E9uxE5LiZftdl+z81Ugbg/VvXV4OJOeQ==", - "dependencies": { - "no-case": "^2.2.0", - "upper-case": "^1.1.3" - } - }, - "node_modules/highlight.js": { - "version": "10.7.3", - "resolved": "https://registry.npmjs.org/highlight.js/-/highlight.js-10.7.3.tgz", - "integrity": "sha512-tzcUFauisWKNHaRkN4Wjl/ZA07gENAjFl3J/c480dprkGTg5EQstgaNFqBfUqCq54kZRIEcreTsAgF/m2quD7A==", - "dev": true, - "engines": { - "node": "*" - } - }, - "node_modules/highlightjs-solidity": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/highlightjs-solidity/-/highlightjs-solidity-2.0.6.tgz", - "integrity": "sha512-DySXWfQghjm2l6a/flF+cteroJqD4gI8GSdL4PtvxZSsAHie8m3yVe2JFoRg03ROKT6hp2Lc/BxXkqerNmtQYg==", - "dev": true - }, - "node_modules/hmac-drbg": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz", - "integrity": "sha512-Tti3gMqLdZfhOQY1Mzf/AanLiqh1WTiJgEj26ZuYQ9fbkLomzGchCws4FyrSd4VkpBfiNhaE1On+lOz894jvXg==", - "dependencies": { - "hash.js": "^1.0.3", - "minimalistic-assert": "^1.0.0", - "minimalistic-crypto-utils": "^1.0.1" - } - }, - "node_modules/hosted-git-info": { - "version": "2.8.9", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz", - "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==" - }, - "node_modules/htmlparser2": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-8.0.1.tgz", - "integrity": "sha512-4lVbmc1diZC7GUJQtRQ5yBAeUCL1exyMwmForWkRLnwyzWBFxN633SALPMGYaWZvKe9j1pRZJpauvmxENSp/EA==", - "devOptional": true, - "funding": [ - "https://github.com/fb55/htmlparser2?sponsor=1", - { - "type": "github", - "url": "https://github.com/sponsors/fb55" - } - ], - "dependencies": { - "domelementtype": "^2.3.0", - "domhandler": "^5.0.2", - "domutils": "^3.0.1", - "entities": "^4.3.0" - } - }, - "node_modules/http-basic": { - "version": "8.1.3", - "resolved": "https://registry.npmjs.org/http-basic/-/http-basic-8.1.3.tgz", - "integrity": "sha512-/EcDMwJZh3mABI2NhGfHOGOeOZITqfkEO4p/xK+l3NpyncIHUQBoMvCSF/b5GqvKtySC2srL/GGG3+EtlqlmCw==", - "dependencies": { - "caseless": "^0.12.0", - "concat-stream": "^1.6.2", - "http-response-object": "^3.0.1", - "parse-cache-control": "^1.0.1" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/http-cache-semantics": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.1.tgz", - "integrity": "sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ==" - }, - "node_modules/http-errors": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", - "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", - "dependencies": { - "depd": "2.0.0", - "inherits": "2.0.4", - "setprototypeof": "1.2.0", - "statuses": "2.0.1", - "toidentifier": "1.0.1" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/http-https": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/http-https/-/http-https-1.0.0.tgz", - "integrity": "sha512-o0PWwVCSp3O0wS6FvNr6xfBCHgt0m1tvPLFOCc2iFDKTRAXhB7m8klDf7ErowFH8POa6dVdGatKU5I1YYwzUyg==" - }, - "node_modules/http-response-object": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/http-response-object/-/http-response-object-3.0.2.tgz", - "integrity": "sha512-bqX0XTF6fnXSQcEJ2Iuyr75yVakyjIDCqroJQ/aHfSdlM743Cwqoi2nDYMzLGWUcuTWGWy8AAvOKXTfiv6q9RA==", - "dependencies": { - "@types/node": "^10.0.3" - } - }, - "node_modules/http-response-object/node_modules/@types/node": { - "version": "10.17.60", - "resolved": "https://registry.npmjs.org/@types/node/-/node-10.17.60.tgz", - "integrity": "sha512-F0KIgDJfy2nA3zMLmWGKxcH2ZVEtCZXHHdOQs2gSaQ27+lNeEfGxzkIw90aXswATX7AZ33tahPbzy6KAfUreVw==" - }, - "node_modules/http-signature": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", - "integrity": "sha512-CAbnr6Rz4CYQkLYUtSNXxQPUH2gK8f3iWexVlsnMeD+GjlsQ0Xsy1cOX+mN3dtxYomRy21CiOzU8Uhw6OwncEQ==", - "dependencies": { - "assert-plus": "^1.0.0", - "jsprim": "^1.2.2", - "sshpk": "^1.7.0" - }, - "engines": { - "node": ">=0.8", - "npm": ">=1.3.7" - } - }, - "node_modules/http2-wrapper": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/http2-wrapper/-/http2-wrapper-2.2.0.tgz", - "integrity": "sha512-kZB0wxMo0sh1PehyjJUWRFEd99KC5TLjZ2cULC4f9iqJBAmKQQXEICjxl5iPJRwP40dpeHFqqhm7tYCvODpqpQ==", - "dependencies": { - "quick-lru": "^5.1.1", - "resolve-alpn": "^1.2.0" - }, - "engines": { - "node": ">=10.19.0" - } - }, - "node_modules/https": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/https/-/https-1.0.0.tgz", - "integrity": "sha512-4EC57ddXrkaF0x83Oj8sM6SLQHAWXw90Skqu2M4AEWENZ3F02dFJE/GARA8igO79tcgYqGrD7ae4f5L3um2lgg==" - }, - "node_modules/https-proxy-agent": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", - "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==", - "dependencies": { - "agent-base": "6", - "debug": "4" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/humanize-ms": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/humanize-ms/-/humanize-ms-1.2.1.tgz", - "integrity": "sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ==", - "dependencies": { - "ms": "^2.0.0" - } - }, - "node_modules/iconv-lite": { - "version": "0.4.24", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", - "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", - "dependencies": { - "safer-buffer": ">= 2.1.2 < 3" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/idna-uts46-hx": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/idna-uts46-hx/-/idna-uts46-hx-2.3.1.tgz", - "integrity": "sha512-PWoF9Keq6laYdIRwwCdhTPl60xRqAloYNMQLiyUnG42VjT53oW07BXIRM+NK7eQjzXjAk2gUvX9caRxlnF9TAA==", - "dependencies": { - "punycode": "2.1.0" - }, - "engines": { - "node": ">=4.0.0" - } - }, - "node_modules/ieee754": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", - "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] - }, - "node_modules/ignore-by-default": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/ignore-by-default/-/ignore-by-default-1.0.1.tgz", - "integrity": "sha512-Ius2VYcGNk7T90CppJqcIkS5ooHUZyIQK+ClZfMfMNFEF9VSE73Fq+906u/CWu92x4gzZMWOwfFYckPObzdEbA==" - }, - "node_modules/immediate": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/immediate/-/immediate-3.3.0.tgz", - "integrity": "sha512-HR7EVodfFUdQCTIeySw+WDRFJlPcLOJbXfwwZ7Oom6tjsvZ3bOkCDJHehQC3nxJrv7+f9XecwazynjU8e4Vw3Q==" - }, - "node_modules/immutable": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/immutable/-/immutable-4.1.0.tgz", - "integrity": "sha512-oNkuqVTA8jqG1Q6c+UglTOD1xhC1BtjKI7XkCXRkZHrN5m18/XsnUp8Q89GkQO/z+0WjonSvl0FLhDYftp46nQ==" - }, - "node_modules/imul": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/imul/-/imul-1.0.1.tgz", - "integrity": "sha512-WFAgfwPLAjU66EKt6vRdTlKj4nAgIDQzh29JonLa4Bqtl6D8JrIMvWjCnx7xEjVNmP3U0fM5o8ZObk7d0f62bA==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/indent-string": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", - "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", - "engines": { - "node": ">=8" - } - }, - "node_modules/inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", - "dependencies": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "node_modules/inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" - }, - "node_modules/internal-slot": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.3.tgz", - "integrity": "sha512-O0DB1JC/sPyZl7cIo78n5dR7eUSwwpYPiXRhTzNxZVAMUuB8vlnRFyLxdrVToks6XPLVnFfbzaVd5WLjhgg+vA==", - "dependencies": { - "get-intrinsic": "^1.1.0", - "has": "^1.0.3", - "side-channel": "^1.0.4" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/invariant": { - "version": "2.2.4", - "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz", - "integrity": "sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==", - "dependencies": { - "loose-envify": "^1.0.0" - } - }, - "node_modules/invert-kv": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/invert-kv/-/invert-kv-1.0.0.tgz", - "integrity": "sha512-xgs2NH9AE66ucSq4cNG1nhSFghr5l6tdL15Pk+jl46bmmBapgoaY/AacXyaDznAqmGL99TiLSQgO/XazFSKYeQ==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/io-ts": { - "version": "1.10.4", - "resolved": "https://registry.npmjs.org/io-ts/-/io-ts-1.10.4.tgz", - "integrity": "sha512-b23PteSnYXSONJ6JQXRAlvJhuw8KOtkqa87W4wDtvMrud/DTJd5X+NpOOI+O/zZwVq6v0VLAaJ+1EDViKEuN9g==", - "dependencies": { - "fp-ts": "^1.0.0" - } - }, - "node_modules/ipaddr.js": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", - "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/is-arguments": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.1.1.tgz", - "integrity": "sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==", - "dependencies": { - "call-bind": "^1.0.2", - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-arrayish": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", - "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==" - }, - "node_modules/is-bigint": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz", - "integrity": "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==", - "dependencies": { - "has-bigints": "^1.0.1" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-binary-path": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", - "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", - "dependencies": { - "binary-extensions": "^2.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/is-boolean-object": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz", - "integrity": "sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==", - "dependencies": { - "call-bind": "^1.0.2", - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-buffer": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-2.0.5.tgz", - "integrity": "sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "engines": { - "node": ">=4" - } - }, - "node_modules/is-callable": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz", - "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-ci": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-2.0.0.tgz", - "integrity": "sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w==", - "dependencies": { - "ci-info": "^2.0.0" - }, - "bin": { - "is-ci": "bin.js" - } - }, - "node_modules/is-date-object": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz", - "integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==", - "dependencies": { - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-docker": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz", - "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==", - "bin": { - "is-docker": "cli.js" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-fn": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-fn/-/is-fn-1.0.0.tgz", - "integrity": "sha512-XoFPJQmsAShb3jEQRfzf2rqXavq7fIqF/jOekp308JlThqrODnMpweVSGilKTCXELfLhltGP2AGgbQGVP8F1dg==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "engines": { - "node": ">=8" - } - }, - "node_modules/is-function": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-function/-/is-function-1.0.2.tgz", - "integrity": "sha512-lw7DUp0aWXYg+CBCN+JKkcE0Q2RayZnSvnZBlwgxHBQhqt5pZNVy4Ri7H9GmmXkdu7LUthszM+Tor1u/2iBcpQ==" - }, - "node_modules/is-generator-function": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.0.10.tgz", - "integrity": "sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A==", - "dependencies": { - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-glob": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", - "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", - "dependencies": { - "is-extglob": "^2.1.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-hex-prefixed": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-hex-prefixed/-/is-hex-prefixed-1.0.0.tgz", - "integrity": "sha512-WvtOiug1VFrE9v1Cydwm+FnXd3+w9GaeVUss5W4v/SLy3UW00vP+6iNF2SdnfiBoLy4bTqVdkftNGTUeOFVsbA==", - "engines": { - "node": ">=6.5.0", - "npm": ">=3" - } - }, - "node_modules/is-lower-case": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/is-lower-case/-/is-lower-case-1.1.3.tgz", - "integrity": "sha512-+5A1e/WJpLLXZEDlgz4G//WYSHyQBD32qa4Jd3Lw06qQlv3fJHnp3YIHjTQSGzHMgzmVKz2ZP3rBxTHkPw/lxA==", - "dependencies": { - "lower-case": "^1.1.0" - } - }, - "node_modules/is-natural-number": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/is-natural-number/-/is-natural-number-4.0.1.tgz", - "integrity": "sha512-Y4LTamMe0DDQIIAlaer9eKebAlDSV6huy+TWhJVPlzZh2o4tRP5SQWFlLn5N0To4mDD22/qdOq+veo1cSISLgQ==" - }, - "node_modules/is-negative-zero": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.2.tgz", - "integrity": "sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-number": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", - "engines": { - "node": ">=0.12.0" - } - }, - "node_modules/is-number-object": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.7.tgz", - "integrity": "sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==", - "dependencies": { - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-obj": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-2.0.0.tgz", - "integrity": "sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==", - "optional": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/is-object": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-object/-/is-object-1.0.2.tgz", - "integrity": "sha512-2rRIahhZr2UWb45fIOuvZGpFtz0TyOZLf32KxBbSoUCeZR495zCKlWUKKUByk3geS2eAs7ZAABt0Y/Rx0GiQGA==", - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-plain-obj": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz", - "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==", - "engines": { - "node": ">=8" - } - }, - "node_modules/is-promise": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-2.2.2.tgz", - "integrity": "sha512-+lP4/6lKUBfQjZ2pdxThZvLUAafmZb8OAxFb8XXtiQmS35INgr85hdOGoEs124ez1FCnZJt6jau/T+alh58QFQ==" - }, - "node_modules/is-regex": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", - "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==", - "dependencies": { - "call-bind": "^1.0.2", - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-retry-allowed": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/is-retry-allowed/-/is-retry-allowed-1.2.0.tgz", - "integrity": "sha512-RUbUeKwvm3XG2VYamhJL1xFktgjvPzL0Hq8C+6yrWIswDy3BIXGqCxhxkc30N9jqK311gVU137K8Ei55/zVJRg==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-shared-array-buffer": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz", - "integrity": "sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==", - "dependencies": { - "call-bind": "^1.0.2" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-stream": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", - "integrity": "sha512-uQPm8kcs47jx38atAcWTVxyltQYoPT68y9aWYdV6yWXSyW8mzSat0TL6CiWdZeCdF3KrAvpVtnHbTv4RN+rqdQ==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-string": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz", - "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==", - "dependencies": { - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-symbol": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz", - "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==", - "dependencies": { - "has-symbols": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-typed-array": { - "version": "1.1.9", - "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.9.tgz", - "integrity": "sha512-kfrlnTTn8pZkfpJMUgYD7YZ3qzeJgWUn8XfVYBARc4wnmNOmLbmuuaAs3q5fvB0UJOn6yHAKaGTPM7d6ezoD/A==", - "dependencies": { - "available-typed-arrays": "^1.0.5", - "call-bind": "^1.0.2", - "es-abstract": "^1.20.0", - "for-each": "^0.3.3", - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-typedarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", - "integrity": "sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==" - }, - "node_modules/is-unicode-supported": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", - "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/is-upper-case": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/is-upper-case/-/is-upper-case-1.1.2.tgz", - "integrity": "sha512-GQYSJMgfeAmVwh9ixyk888l7OIhNAGKtY6QA+IrWlu9MDTCaXmeozOZ2S9Knj7bQwBO/H6J2kb+pbyTUiMNbsw==", - "dependencies": { - "upper-case": "^1.1.0" - } - }, - "node_modules/is-url": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/is-url/-/is-url-1.2.4.tgz", - "integrity": "sha512-ITvGim8FhRiYe4IQ5uHSkj7pVaPDrCTkNd3yq3cV7iZAcJdHTUMPMEHcqSOy9xZ9qFenQCvi+2wjH9a1nXqHww==", - "dev": true - }, - "node_modules/is-utf8": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/is-utf8/-/is-utf8-0.2.1.tgz", - "integrity": "sha512-rMYPYvCzsXywIsldgLaSoPlw5PfoB/ssr7hY4pLfcodrA5M/eArza1a9VmTiNIBNMjOGr1Ow9mTyU2o69U6U9Q==" - }, - "node_modules/is-weakref": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz", - "integrity": "sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==", - "dependencies": { - "call-bind": "^1.0.2" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-wsl": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", - "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", - "dependencies": { - "is-docker": "^2.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==" - }, - "node_modules/isexe": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==" - }, - "node_modules/isomorphic-unfetch": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/isomorphic-unfetch/-/isomorphic-unfetch-3.1.0.tgz", - "integrity": "sha512-geDJjpoZ8N0kWexiwkX8F9NkTsXhetLPVbZFQ+JTW239QNOwvB0gniuR1Wc6f0AMTn7/mFGyXvHTifrCp/GH8Q==", - "dev": true, - "dependencies": { - "node-fetch": "^2.6.1", - "unfetch": "^4.2.0" - } - }, - "node_modules/isomorphic-ws": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/isomorphic-ws/-/isomorphic-ws-4.0.1.tgz", - "integrity": "sha512-BhBvN2MBpWTaSHdWRb/bwdZJ1WaehQ2L1KngkCkfLUGF0mAWAT1sQUQacEmQ0jXkFw/czDXPNQSL5u2/Krsz1w==", - "peerDependencies": { - "ws": "*" - } - }, - "node_modules/isstream": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", - "integrity": "sha512-Yljz7ffyPbrLpLngrMtZ7NduUgVvi6wG9RJ9IUcyCd59YQ911PBJphODUcbOVbqYfxe1wuYf/LJ8PauMRwsM/g==" - }, - "node_modules/isurl": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isurl/-/isurl-1.0.0.tgz", - "integrity": "sha512-1P/yWsxPlDtn7QeRD+ULKQPaIaN6yF368GZ2vDfv0AL0NwpStafjWCDDdn0k8wgFMWpVAqG7oJhxHnlud42i9w==", - "dependencies": { - "has-to-string-tag-x": "^1.2.0", - "is-object": "^1.0.1" - }, - "engines": { - "node": ">= 4" - } - }, - "node_modules/javascript-natural-sort": { - "version": "0.7.1", - "resolved": "https://registry.npmjs.org/javascript-natural-sort/-/javascript-natural-sort-0.7.1.tgz", - "integrity": "sha512-nO6jcEfZWQXDhOiBtG2KvKyEptz7RVbpGP4vTD2hLBdmNQSsCiicO2Ioinv6UI4y9ukqnBpy+XZ9H6uLNgJTlw==" - }, - "node_modules/jayson": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/jayson/-/jayson-4.1.0.tgz", - "integrity": "sha512-R6JlbyLN53Mjku329XoRT2zJAE6ZgOQ8f91ucYdMCD4nkGCF9kZSrcGXpHIU4jeKj58zUZke2p+cdQchU7Ly7A==", - "dependencies": { - "@types/connect": "^3.4.33", - "@types/node": "^12.12.54", - "@types/ws": "^7.4.4", - "commander": "^2.20.3", - "delay": "^5.0.0", - "es6-promisify": "^5.0.0", - "eyes": "^0.1.8", - "isomorphic-ws": "^4.0.1", - "json-stringify-safe": "^5.0.1", - "JSONStream": "^1.3.5", - "uuid": "^8.3.2", - "ws": "^7.4.5" - }, - "bin": { - "jayson": "bin/jayson.js" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/jayson/node_modules/@types/node": { - "version": "12.20.55", - "resolved": "https://registry.npmjs.org/@types/node/-/node-12.20.55.tgz", - "integrity": "sha512-J8xLz7q2OFulZ2cyGTLE1TbbZcjpno7FaN6zdJNrgAdrJ+DZzh/uFR6YrTb4C+nXakvud8Q4+rbhoIWlYQbUFQ==" - }, - "node_modules/jayson/node_modules/ws": { - "version": "7.5.9", - "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.9.tgz", - "integrity": "sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q==", - "engines": { - "node": ">=8.3.0" - }, - "peerDependencies": { - "bufferutil": "^4.0.1", - "utf-8-validate": "^5.0.2" - }, - "peerDependenciesMeta": { - "bufferutil": { - "optional": true - }, - "utf-8-validate": { - "optional": true - } - } - }, - "node_modules/js-cookie": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/js-cookie/-/js-cookie-2.2.1.tgz", - "integrity": "sha512-HvdH2LzI/EAZcUwA8+0nKNtWHqS+ZmijLA30RwZA0bo7ToCckjK5MkGhjED9KoRcXO6BaGI3I9UIzSA1FKFPOQ==", - "dev": true - }, - "node_modules/js-graph-algorithms": { - "version": "1.0.18", - "resolved": "https://registry.npmjs.org/js-graph-algorithms/-/js-graph-algorithms-1.0.18.tgz", - "integrity": "sha512-Gu1wtWzXBzGeye/j9BuyplGHscwqKRZodp/0M1vyBc19RJpblSwKGu099KwwaTx9cRIV+Qupk8xUMfEiGfFqSA==", - "optional": true, - "bin": { - "js-graphs": "src/jsgraphs.js" - } - }, - "node_modules/js-sdsl": { - "version": "4.4.2", - "resolved": "https://registry.npmjs.org/js-sdsl/-/js-sdsl-4.4.2.tgz", - "integrity": "sha512-dwXFwByc/ajSV6m5bcKAPwe4yDDF6D614pxmIi5odytzxRlwqF6nwoiCek80Ixc7Cvma5awClxrzFtxCQvcM8w==", - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/js-sdsl" - } - }, - "node_modules/js-sha3": { - "version": "0.8.0", - "resolved": "https://registry.npmjs.org/js-sha3/-/js-sha3-0.8.0.tgz", - "integrity": "sha512-gF1cRrHhIzNfToc802P800N8PpXS+evLLXfsVpowqmAFR9uwbi89WvXg2QspOmXL8QL86J4T1EpFu+yUkwJY3Q==" - }, - "node_modules/js-tokens": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", - "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==" - }, - "node_modules/js-yaml": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", - "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", - "dependencies": { - "argparse": "^2.0.1" - }, - "bin": { - "js-yaml": "bin/js-yaml.js" - } - }, - "node_modules/jsbi": { - "version": "3.2.5", - "resolved": "https://registry.npmjs.org/jsbi/-/jsbi-3.2.5.tgz", - "integrity": "sha512-aBE4n43IPvjaddScbvWRA2YlTzKEynHzu7MqOyTipdHucf/VxS63ViCjxYRg86M8Rxwbt/GfzHl1kKERkt45fQ==" - }, - "node_modules/jsbn": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", - "integrity": "sha512-UVU9dibq2JcFWxQPA6KCqj5O42VOmAY3zQUfEKxU0KpTGXwNoCjkX1e13eHNvw/xPynt6pU0rZ1htjWTNTSXsg==" - }, - "node_modules/jsesc": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", - "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", - "peer": true, - "bin": { - "jsesc": "bin/jsesc" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/json-bigint": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/json-bigint/-/json-bigint-1.0.0.tgz", - "integrity": "sha512-SiPv/8VpZuWbvLSMtTDU8hEfrZWg/mH/nV/b4o0CYbSxu1UIQPLdwKOCIyLQX+VIPO5vrLX3i8qtqFyhdPSUSQ==", - "dev": true, - "dependencies": { - "bignumber.js": "^9.0.0" - } - }, - "node_modules/json-buffer": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", - "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==" - }, - "node_modules/json-loader": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/json-loader/-/json-loader-0.5.7.tgz", - "integrity": "sha512-QLPs8Dj7lnf3e3QYS1zkCo+4ZwqOiF9d/nZnYozTISxXWCfNs9yuky5rJw4/W34s7POaNlbZmQGaB5NiXCbP4w==", - "dev": true - }, - "node_modules/json-pointer": { - "version": "0.6.2", - "resolved": "https://registry.npmjs.org/json-pointer/-/json-pointer-0.6.2.tgz", - "integrity": "sha512-vLWcKbOaXlO+jvRy4qNd+TI1QUPZzfJj1tpJ3vAXDych5XJf93ftpUKe5pKCrzyIIwgBJcOcCVRUfqQP25afBw==", - "dependencies": { - "foreach": "^2.0.4" - } - }, - "node_modules/json-rpc-engine": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/json-rpc-engine/-/json-rpc-engine-6.1.0.tgz", - "integrity": "sha512-NEdLrtrq1jUZyfjkr9OCz9EzCNhnRyWtt1PAnvnhwy6e8XETS0Dtc+ZNCO2gvuAoKsIn2+vCSowXTYE4CkgnAQ==", - "dependencies": { - "@metamask/safe-event-emitter": "^2.0.0", - "eth-rpc-errors": "^4.0.2" - }, - "engines": { - "node": ">=10.0.0" - } - }, - "node_modules/json-rpc-engine/node_modules/eth-rpc-errors": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/eth-rpc-errors/-/eth-rpc-errors-4.0.3.tgz", - "integrity": "sha512-Z3ymjopaoft7JDoxZcEb3pwdGh7yiYMhOwm2doUt6ASXlMavpNlK6Cre0+IMl2VSGyEU9rkiperQhp5iRxn5Pg==", - "dependencies": { - "fast-safe-stringify": "^2.0.6" - } - }, - "node_modules/json-rpc-random-id": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json-rpc-random-id/-/json-rpc-random-id-1.0.1.tgz", - "integrity": "sha512-RJ9YYNCkhVDBuP4zN5BBtYAzEl03yq/jIIsyif0JY9qyJuQQZNeDK7anAPKKlyEtLSj2s8h6hNh2F8zO5q7ScA==" - }, - "node_modules/json-schema": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.4.0.tgz", - "integrity": "sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA==" - }, - "node_modules/json-schema-traverse": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==" - }, - "node_modules/json-schema-typed": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/json-schema-typed/-/json-schema-typed-7.0.3.tgz", - "integrity": "sha512-7DE8mpG+/fVw+dTpjbxnx47TaMnDfOI1jwft9g1VybltZCduyRQPJPvc+zzKY9WPHxhPWczyFuYa6I8Mw4iU5A==", - "optional": true - }, - "node_modules/json-stable-stringify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json-stable-stringify/-/json-stable-stringify-1.0.1.tgz", - "integrity": "sha512-i/J297TW6xyj7sDFa7AmBPkQvLIxWr2kKPWI26tXydnZrzVAocNqn5DMNT1Mzk0vit1V5UkRM7C1KdVNp7Lmcg==", - "dependencies": { - "jsonify": "~0.0.0" - } - }, - "node_modules/json-stringify-safe": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", - "integrity": "sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==" - }, - "node_modules/json5": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.2.tgz", - "integrity": "sha512-46Tk9JiOL2z7ytNQWFLpj99RZkVgeHf87yGQKsIkaPz1qSH9UczKH1rO7K3wgRselo0tYMUNfecYpm/p1vC7tQ==", - "peer": true, - "bin": { - "json5": "lib/cli.js" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/jsonfile": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", - "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", - "dependencies": { - "universalify": "^2.0.0" - }, - "optionalDependencies": { - "graceful-fs": "^4.1.6" - } - }, - "node_modules/jsonify": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/jsonify/-/jsonify-0.0.1.tgz", - "integrity": "sha512-2/Ki0GcmuqSrgFyelQq9M05y7PS0mEwuIzrf3f1fPqkVDVRvZrPZtVSMHxdgo8Aq0sxAOb/cr2aqqA3LeWHVPg==", - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/jsonparse": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/jsonparse/-/jsonparse-1.3.1.tgz", - "integrity": "sha512-POQXvpdL69+CluYsillJ7SUhKvytYjW9vG/GKpnf+xP8UWgYEM/RaMzHHofbALDiKbbP1W8UEYmgGl39WkPZsg==", - "engines": [ - "node >= 0.2.0" - ] - }, - "node_modules/JSONStream": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/JSONStream/-/JSONStream-1.3.5.tgz", - "integrity": "sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ==", - "dependencies": { - "jsonparse": "^1.2.0", - "through": ">=2.2.7 <3" - }, - "bin": { - "JSONStream": "bin.js" - }, - "engines": { - "node": "*" - } - }, - "node_modules/jsprim": { - "version": "1.4.2", - "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.2.tgz", - "integrity": "sha512-P2bSOMAc/ciLz6DzgjVlGJP9+BrJWu5UDGK70C2iweC5QBIeFf0ZXRvGjEj2uYgrY2MkAAhsSWHDWlFtEroZWw==", - "dependencies": { - "assert-plus": "1.0.0", - "extsprintf": "1.3.0", - "json-schema": "0.4.0", - "verror": "1.10.0" - }, - "engines": { - "node": ">=0.6.0" - } - }, - "node_modules/keccak": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/keccak/-/keccak-3.0.2.tgz", - "integrity": "sha512-PyKKjkH53wDMLGrvmRGSNWgmSxZOUqbnXwKL9tmgbFYA1iAYqW21kfR7mZXV0MlESiefxQQE9X9fTa3X+2MPDQ==", - "hasInstallScript": true, - "dependencies": { - "node-addon-api": "^2.0.0", - "node-gyp-build": "^4.2.0", - "readable-stream": "^3.6.0" - }, - "engines": { - "node": ">=10.0.0" - } - }, - "node_modules/keyv": { - "version": "4.5.2", - "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.2.tgz", - "integrity": "sha512-5MHbFaKn8cNSmVW7BYnijeAVlE4cYA/SVkifVgrh7yotnfhKmjuXpDKjrABLnT0SfHWV21P8ow07OGfRrNDg8g==", - "dependencies": { - "json-buffer": "3.0.1" - } - }, - "node_modules/klaw": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/klaw/-/klaw-1.3.1.tgz", - "integrity": "sha512-TED5xi9gGQjGpNnvRWknrwAB1eL5GciPfVFOt3Vk1OJCVDQbzuSfrF3hkUQKlsgKrG1F+0t5W0m+Fje1jIt8rw==", - "optionalDependencies": { - "graceful-fs": "^4.1.9" - } - }, - "node_modules/klaw-sync": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/klaw-sync/-/klaw-sync-6.0.0.tgz", - "integrity": "sha512-nIeuVSzdCCs6TDPTqI8w1Yre34sSq7AkZ4B3sfOBbI2CgVSB4Du4aLQijFU2+lhAFCwt9+42Hel6lQNIv6AntQ==", - "dependencies": { - "graceful-fs": "^4.1.11" - } - }, - "node_modules/lcid": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/lcid/-/lcid-1.0.0.tgz", - "integrity": "sha512-YiGkH6EnGrDGqLMITnGjXtGmNtjoXw9SVUzcaos8RBi7Ps0VBylkq+vOcY9QE5poLasPCR849ucFUkl0UzUyOw==", - "dependencies": { - "invert-kv": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/level": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/level/-/level-8.0.0.tgz", - "integrity": "sha512-ypf0jjAk2BWI33yzEaaotpq7fkOPALKAgDBxggO6Q9HGX2MRXn0wbP1Jn/tJv1gtL867+YOjOB49WaUF3UoJNQ==", - "dependencies": { - "browser-level": "^1.0.1", - "classic-level": "^1.2.0" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/level" - } - }, - "node_modules/level-codec": { - "version": "9.0.2", - "resolved": "https://registry.npmjs.org/level-codec/-/level-codec-9.0.2.tgz", - "integrity": "sha512-UyIwNb1lJBChJnGfjmO0OR+ezh2iVu1Kas3nvBS/BzGnx79dv6g7unpKIDNPMhfdTEGoc7mC8uAu51XEtX+FHQ==", - "dependencies": { - "buffer": "^5.6.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/level-codec/node_modules/buffer": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", - "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "dependencies": { - "base64-js": "^1.3.1", - "ieee754": "^1.1.13" - } - }, - "node_modules/level-concat-iterator": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/level-concat-iterator/-/level-concat-iterator-2.0.1.tgz", - "integrity": "sha512-OTKKOqeav2QWcERMJR7IS9CUo1sHnke2C0gkSmcR7QuEtFNLLzHQAvnMw8ykvEcv0Qtkg0p7FOwP1v9e5Smdcw==", - "engines": { - "node": ">=6" - } - }, - "node_modules/level-errors": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/level-errors/-/level-errors-2.0.1.tgz", - "integrity": "sha512-UVprBJXite4gPS+3VznfgDSU8PTRuVX0NXwoWW50KLxd2yw4Y1t2JUR5In1itQnudZqRMT9DlAM3Q//9NCjCFw==", - "dependencies": { - "errno": "~0.1.1" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/level-iterator-stream": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/level-iterator-stream/-/level-iterator-stream-4.0.2.tgz", - "integrity": "sha512-ZSthfEqzGSOMWoUGhTXdX9jv26d32XJuHz/5YnuHZzH6wldfWMOVwI9TBtKcya4BKTyTt3XVA0A3cF3q5CY30Q==", - "dependencies": { - "inherits": "^2.0.4", - "readable-stream": "^3.4.0", - "xtend": "^4.0.2" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/level-js": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/level-js/-/level-js-5.0.2.tgz", - "integrity": "sha512-SnBIDo2pdO5VXh02ZmtAyPP6/+6YTJg2ibLtl9C34pWvmtMEmRTWpra+qO/hifkUtBTOtfx6S9vLDjBsBK4gRg==", - "optional": true, - "dependencies": { - "abstract-leveldown": "~6.2.3", - "buffer": "^5.5.0", - "inherits": "^2.0.3", - "ltgt": "^2.1.2" - } - }, - "node_modules/level-js/node_modules/abstract-leveldown": { - "version": "6.2.3", - "resolved": "https://registry.npmjs.org/abstract-leveldown/-/abstract-leveldown-6.2.3.tgz", - "integrity": "sha512-BsLm5vFMRUrrLeCcRc+G0t2qOaTzpoJQLOubq2XM72eNpjF5UdU5o/5NvlNhx95XHcAvcl8OMXr4mlg/fRgUXQ==", - "optional": true, - "dependencies": { - "buffer": "^5.5.0", - "immediate": "^3.2.3", - "level-concat-iterator": "~2.0.0", - "level-supports": "~1.0.0", - "xtend": "~4.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/level-js/node_modules/buffer": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", - "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "optional": true, - "dependencies": { - "base64-js": "^1.3.1", - "ieee754": "^1.1.13" - } - }, - "node_modules/level-js/node_modules/level-supports": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/level-supports/-/level-supports-1.0.1.tgz", - "integrity": "sha512-rXM7GYnW8gsl1vedTJIbzOrRv85c/2uCMpiiCzO2fndd06U/kUXEEU9evYn4zFggBOg36IsBW8LzqIpETwwQzg==", - "optional": true, - "dependencies": { - "xtend": "^4.0.2" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/level-mem": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/level-mem/-/level-mem-5.0.1.tgz", - "integrity": "sha512-qd+qUJHXsGSFoHTziptAKXoLX87QjR7v2KMbqncDXPxQuCdsQlzmyX+gwrEHhlzn08vkf8TyipYyMmiC6Gobzg==", - "dependencies": { - "level-packager": "^5.0.3", - "memdown": "^5.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/level-packager": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/level-packager/-/level-packager-5.1.1.tgz", - "integrity": "sha512-HMwMaQPlTC1IlcwT3+swhqf/NUO+ZhXVz6TY1zZIIZlIR0YSn8GtAAWmIvKjNY16ZkEg/JcpAuQskxsXqC0yOQ==", - "dependencies": { - "encoding-down": "^6.3.0", - "levelup": "^4.3.2" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/level-supports": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/level-supports/-/level-supports-4.0.1.tgz", - "integrity": "sha512-PbXpve8rKeNcZ9C1mUicC9auIYFyGpkV9/i6g76tLgANwWhtG2v7I4xNBUlkn3lE2/dZF3Pi0ygYGtLc4RXXdA==", - "engines": { - "node": ">=12" - } - }, - "node_modules/level-transcoder": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/level-transcoder/-/level-transcoder-1.0.1.tgz", - "integrity": "sha512-t7bFwFtsQeD8cl8NIoQ2iwxA0CL/9IFw7/9gAjOonH0PWTTiRfY7Hq+Ejbsxh86tXobDQ6IOiddjNYIfOBs06w==", - "dependencies": { - "buffer": "^6.0.3", - "module-error": "^1.0.1" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/level-write-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/level-write-stream/-/level-write-stream-1.0.0.tgz", - "integrity": "sha512-bBNKOEOMl8msO+uIM9YX/gUO6ckokZ/4pCwTm/lwvs46x6Xs8Zy0sn3Vh37eDqse4mhy4fOMIb/JsSM2nyQFtw==", - "optional": true, - "dependencies": { - "end-stream": "~0.1.0" - } - }, - "node_modules/level-ws": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/level-ws/-/level-ws-2.0.0.tgz", - "integrity": "sha512-1iv7VXx0G9ec1isqQZ7y5LmoZo/ewAsyDHNA8EFDW5hqH2Kqovm33nSFkSdnLLAK+I5FlT+lo5Cw9itGe+CpQA==", - "dependencies": { - "inherits": "^2.0.3", - "readable-stream": "^3.1.0", - "xtend": "^4.0.1" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/leveldown": { - "version": "5.6.0", - "resolved": "https://registry.npmjs.org/leveldown/-/leveldown-5.6.0.tgz", - "integrity": "sha512-iB8O/7Db9lPaITU1aA2txU/cBEXAt4vWwKQRrrWuS6XDgbP4QZGj9BL2aNbwb002atoQ/lIotJkfyzz+ygQnUQ==", - "hasInstallScript": true, - "optional": true, - "dependencies": { - "abstract-leveldown": "~6.2.1", - "napi-macros": "~2.0.0", - "node-gyp-build": "~4.1.0" - }, - "engines": { - "node": ">=8.6.0" - } - }, - "node_modules/leveldown/node_modules/abstract-leveldown": { - "version": "6.2.3", - "resolved": "https://registry.npmjs.org/abstract-leveldown/-/abstract-leveldown-6.2.3.tgz", - "integrity": "sha512-BsLm5vFMRUrrLeCcRc+G0t2qOaTzpoJQLOubq2XM72eNpjF5UdU5o/5NvlNhx95XHcAvcl8OMXr4mlg/fRgUXQ==", - "optional": true, - "dependencies": { - "buffer": "^5.5.0", - "immediate": "^3.2.3", - "level-concat-iterator": "~2.0.0", - "level-supports": "~1.0.0", - "xtend": "~4.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/leveldown/node_modules/buffer": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", - "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "optional": true, - "dependencies": { - "base64-js": "^1.3.1", - "ieee754": "^1.1.13" - } - }, - "node_modules/leveldown/node_modules/level-supports": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/level-supports/-/level-supports-1.0.1.tgz", - "integrity": "sha512-rXM7GYnW8gsl1vedTJIbzOrRv85c/2uCMpiiCzO2fndd06U/kUXEEU9evYn4zFggBOg36IsBW8LzqIpETwwQzg==", - "optional": true, - "dependencies": { - "xtend": "^4.0.2" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/leveldown/node_modules/node-gyp-build": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.1.1.tgz", - "integrity": "sha512-dSq1xmcPDKPZ2EED2S6zw/b9NKsqzXRE6dVr8TVQnI3FJOTteUMuqF3Qqs6LZg+mLGYJWqQzMbIjMtJqTv87nQ==", - "optional": true, - "bin": { - "node-gyp-build": "bin.js", - "node-gyp-build-optional": "optional.js", - "node-gyp-build-test": "build-test.js" - } - }, - "node_modules/levelup": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/levelup/-/levelup-4.4.0.tgz", - "integrity": "sha512-94++VFO3qN95cM/d6eBXvd894oJE0w3cInq9USsyQzzoJxmiYzPAocNcuGCPGGjoXqDVJcr3C1jzt1TSjyaiLQ==", - "dependencies": { - "deferred-leveldown": "~5.3.0", - "level-errors": "~2.0.0", - "level-iterator-stream": "~4.0.0", - "level-supports": "~1.0.0", - "xtend": "~4.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/levelup/node_modules/level-supports": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/level-supports/-/level-supports-1.0.1.tgz", - "integrity": "sha512-rXM7GYnW8gsl1vedTJIbzOrRv85c/2uCMpiiCzO2fndd06U/kUXEEU9evYn4zFggBOg36IsBW8LzqIpETwwQzg==", - "dependencies": { - "xtend": "^4.0.2" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/load-json-file": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz", - "integrity": "sha512-cy7ZdNRXdablkXYNI049pthVeXFurRyb9+hA/dZzerZ0pGTx42z+y+ssxBaVV2l70t1muq5IdKhn4UtcoGUY9A==", - "dependencies": { - "graceful-fs": "^4.1.2", - "parse-json": "^2.2.0", - "pify": "^2.0.0", - "pinkie-promise": "^2.0.0", - "strip-bom": "^2.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/load-json-file/node_modules/pify": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", - "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/locate-path": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", - "dependencies": { - "p-locate": "^4.1.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/lodash": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" - }, - "node_modules/lodash-es": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash-es/-/lodash-es-4.17.21.tgz", - "integrity": "sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw==" - }, - "node_modules/lodash.assign": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/lodash.assign/-/lodash.assign-4.2.0.tgz", - "integrity": "sha512-hFuH8TY+Yji7Eja3mGiuAxBqLagejScbG8GbG0j6o9vzn0YL14My+ktnqtZgFTosKymC9/44wP6s7xyuLfnClw==" - }, - "node_modules/lodash.camelcase": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz", - "integrity": "sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA==", - "dev": true - }, - "node_modules/lodash.debounce": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz", - "integrity": "sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==" - }, - "node_modules/lodash.defaults": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/lodash.defaults/-/lodash.defaults-4.2.0.tgz", - "integrity": "sha512-qjxPLHd3r5DnsdGacqOMU6pb/avJzdh9tFX2ymgoZE27BmjXrNy/y4LoaiTeAb+O3gL8AfpJGtqfX/ae2leYYQ==" - }, - "node_modules/lodash.flatten": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/lodash.flatten/-/lodash.flatten-4.4.0.tgz", - "integrity": "sha512-C5N2Z3DgnnKr0LOpv/hKCgKdb7ZZwafIrsesve6lmzvZIRZRGaZ/l6Q8+2W7NaT+ZwO3fFlSCzCzrDCFdJfZ4g==", - "dev": true - }, - "node_modules/lodash.merge": { - "version": "4.6.2", - "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", - "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", - "dev": true - }, - "node_modules/lodash.omit": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/lodash.omit/-/lodash.omit-4.5.0.tgz", - "integrity": "sha512-XeqSp49hNGmlkj2EJlfrQFIzQ6lXdNro9sddtQzcJY8QaoC2GO0DT7xaIokHeyM+mIT0mPMlPvkYzg2xCuHdZg==", - "optional": true - }, - "node_modules/lodash.pick": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/lodash.pick/-/lodash.pick-4.4.0.tgz", - "integrity": "sha512-hXt6Ul/5yWjfklSGvLQl8vM//l3FtyHZeuelpzK6mm99pNvN9yTDruNZPEJZD1oWrqo+izBmB7oUfWgcCX7s4Q==", - "optional": true - }, - "node_modules/lodash.sortby": { - "version": "4.7.0", - "resolved": "https://registry.npmjs.org/lodash.sortby/-/lodash.sortby-4.7.0.tgz", - "integrity": "sha512-HDWXG8isMntAyRF5vZ7xKuEvOhT4AhlRt/3czTSjvGUxjYCBVRQY48ViDHyfYz9VIoBkW4TMGQNapx+l3RUwdA==", - "optional": true - }, - "node_modules/lodash.truncate": { - "version": "4.4.2", - "resolved": "https://registry.npmjs.org/lodash.truncate/-/lodash.truncate-4.4.2.tgz", - "integrity": "sha512-jttmRe7bRse52OsWIMDLaXxWqRAmtIUccAQ3garviCqJjafXOfNMO0yMfNpdD6zbGaTU0P5Nz7e7gAT6cKmJRw==", - "dev": true - }, - "node_modules/log-symbols": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", - "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", - "dependencies": { - "chalk": "^4.1.0", - "is-unicode-supported": "^0.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/loglevel": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/loglevel/-/loglevel-1.8.1.tgz", - "integrity": "sha512-tCRIJM51SHjAayKwC+QAg8hT8vg6z7GSgLJKGvzuPb1Wc+hLzqtuVLxp6/HzSPOozuK+8ErAhy7U/sVzw8Dgfg==", - "optional": true, - "engines": { - "node": ">= 0.6.0" - }, - "funding": { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/loglevel" - } - }, - "node_modules/long": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/long/-/long-4.0.0.tgz", - "integrity": "sha512-XsP+KhQif4bjX1kbuSiySJFNAehNxgLb6hPRGJ9QsUr8ajHkuXGdrHmFUTUUXhDwVX2R5bY4JNZEwbUiMhV+MA==", - "optional": true - }, - "node_modules/loose-envify": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", - "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", - "dependencies": { - "js-tokens": "^3.0.0 || ^4.0.0" - }, - "bin": { - "loose-envify": "cli.js" - } - }, - "node_modules/loupe": { - "version": "2.3.4", - "resolved": "https://registry.npmjs.org/loupe/-/loupe-2.3.4.tgz", - "integrity": "sha512-OvKfgCC2Ndby6aSTREl5aCCPTNIzlDfQZvZxNUrBrihDhL3xcrYegTblhmEiCrg2kKQz4XsFIaemE5BF4ybSaQ==", - "dependencies": { - "get-func-name": "^2.0.0" - } - }, - "node_modules/lower-case": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/lower-case/-/lower-case-1.1.4.tgz", - "integrity": "sha512-2Fgx1Ycm599x+WGpIYwJOvsjmXFzTSc34IwDWALRA/8AopUKAVPwfJ+h5+f85BCp0PWmmJcWzEpxOpoXycMpdA==" - }, - "node_modules/lower-case-first": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/lower-case-first/-/lower-case-first-1.0.2.tgz", - "integrity": "sha512-UuxaYakO7XeONbKrZf5FEgkantPf5DUqDayzP5VXZrtRPdH86s4kN47I8B3TW10S4QKiE3ziHNf3kRN//okHjA==", - "dependencies": { - "lower-case": "^1.1.2" - } - }, - "node_modules/lowercase-keys": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-3.0.0.tgz", - "integrity": "sha512-ozCC6gdQ+glXOQsveKD0YsDy8DSQFjDTz4zyzEHNV5+JP5D62LmfDZ6o1cycFx9ouG940M5dE8C8CTewdj2YWQ==", - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/lru_map": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/lru_map/-/lru_map-0.3.3.tgz", - "integrity": "sha512-Pn9cox5CsMYngeDbmChANltQl+5pi6XmTrraMSzhPmMBbmgcxmqWry0U3PGapCU1yB4/LqCcom7qhHZiF/jGfQ==" - }, - "node_modules/lru-cache": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", - "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", - "dependencies": { - "yallist": "^3.0.2" - } - }, - "node_modules/lru-queue": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/lru-queue/-/lru-queue-0.1.0.tgz", - "integrity": "sha512-BpdYkt9EvGl8OfWHDQPISVpcl5xZthb+XPsbELj5AQXxIC8IriDZIQYjBJPEm5rS420sjZ0TLEzRcq5KdBhYrQ==", - "dependencies": { - "es5-ext": "~0.10.2" - } - }, - "node_modules/ltgt": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/ltgt/-/ltgt-2.2.1.tgz", - "integrity": "sha512-AI2r85+4MquTw9ZYqabu4nMwy9Oftlfa/e/52t9IjtfG+mGBbTNdAoZ3RQKLHR6r0wQnwZnPIEh/Ya6XTWAKNA==" - }, - "node_modules/make-dir": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-1.3.0.tgz", - "integrity": "sha512-2w31R7SJtieJJnQtGc7RVL2StM2vGYVfqUOvUDxH6bC6aJTxPxTF0GnIgCyu7tjockiUWAYQRbxa7vKn34s5sQ==", - "dependencies": { - "pify": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/make-error": { - "version": "1.3.6", - "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", - "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==", - "optional": true, - "peer": true - }, - "node_modules/markdown-table": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/markdown-table/-/markdown-table-1.1.3.tgz", - "integrity": "sha512-1RUZVgQlpJSPWYbFSpmudq5nHY1doEIv89gBtF0s4gW1GF2XorxcA/70M5vq7rLv0a6mhOUccRsqkwhwLCIQ2Q==" - }, - "node_modules/match-all": { - "version": "1.2.6", - "resolved": "https://registry.npmjs.org/match-all/-/match-all-1.2.6.tgz", - "integrity": "sha512-0EESkXiTkWzrQQntBu2uzKvLu6vVkUGz40nGPbSZuegcfE5UuSzNjLaIu76zJWuaT/2I3Z/8M06OlUOZLGwLlQ==", - "dev": true - }, - "node_modules/mathjs": { - "version": "11.11.0", - "resolved": "https://registry.npmjs.org/mathjs/-/mathjs-11.11.0.tgz", - "integrity": "sha512-i1Ao/tv1mlNd09XlOMOUu3KMySX3S0jhHNfDPzh0sCnPf1i62x6RjxhLwZ9ytmVSs0OdhF3moI4O84VSEjmUFw==", - "dependencies": { - "@babel/runtime": "^7.22.6", - "complex.js": "^2.1.1", - "decimal.js": "^10.4.3", - "escape-latex": "^1.2.0", - "fraction.js": "4.3.4", - "javascript-natural-sort": "^0.7.1", - "seedrandom": "^3.0.5", - "tiny-emitter": "^2.1.0", - "typed-function": "^4.1.0" - }, - "bin": { - "mathjs": "bin/cli.js" - }, - "engines": { - "node": ">= 14" - } - }, - "node_modules/mcl-wasm": { - "version": "0.7.9", - "resolved": "https://registry.npmjs.org/mcl-wasm/-/mcl-wasm-0.7.9.tgz", - "integrity": "sha512-iJIUcQWA88IJB/5L15GnJVnSQJmf/YaxxV6zRavv83HILHaJQb6y0iFyDMdDO0gN8X37tdxmAOrH/P8B6RB8sQ==", - "engines": { - "node": ">=8.9.0" - } - }, - "node_modules/md5.js": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/md5.js/-/md5.js-1.3.5.tgz", - "integrity": "sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==", - "dependencies": { - "hash-base": "^3.0.0", - "inherits": "^2.0.1", - "safe-buffer": "^5.1.2" - } - }, - "node_modules/media-typer": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", - "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/memdown": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/memdown/-/memdown-5.1.0.tgz", - "integrity": "sha512-B3J+UizMRAlEArDjWHTMmadet+UKwHd3UjMgGBkZcKAxAYVPS9o0Yeiha4qvz7iGiL2Sb3igUft6p7nbFWctpw==", - "dependencies": { - "abstract-leveldown": "~6.2.1", - "functional-red-black-tree": "~1.0.1", - "immediate": "~3.2.3", - "inherits": "~2.0.1", - "ltgt": "~2.2.0", - "safe-buffer": "~5.2.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/memdown/node_modules/abstract-leveldown": { - "version": "6.2.3", - "resolved": "https://registry.npmjs.org/abstract-leveldown/-/abstract-leveldown-6.2.3.tgz", - "integrity": "sha512-BsLm5vFMRUrrLeCcRc+G0t2qOaTzpoJQLOubq2XM72eNpjF5UdU5o/5NvlNhx95XHcAvcl8OMXr4mlg/fRgUXQ==", - "dependencies": { - "buffer": "^5.5.0", - "immediate": "^3.2.3", - "level-concat-iterator": "~2.0.0", - "level-supports": "~1.0.0", - "xtend": "~4.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/memdown/node_modules/buffer": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", - "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "dependencies": { - "base64-js": "^1.3.1", - "ieee754": "^1.1.13" - } - }, - "node_modules/memdown/node_modules/immediate": { - "version": "3.2.3", - "resolved": "https://registry.npmjs.org/immediate/-/immediate-3.2.3.tgz", - "integrity": "sha512-RrGCXRm/fRVqMIhqXrGEX9rRADavPiDFSoMb/k64i9XMk8uH4r/Omi5Ctierj6XzNecwDbO4WuFbDD1zmpl3Tg==" - }, - "node_modules/memdown/node_modules/level-supports": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/level-supports/-/level-supports-1.0.1.tgz", - "integrity": "sha512-rXM7GYnW8gsl1vedTJIbzOrRv85c/2uCMpiiCzO2fndd06U/kUXEEU9evYn4zFggBOg36IsBW8LzqIpETwwQzg==", - "dependencies": { - "xtend": "^4.0.2" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/memoizee": { - "version": "0.4.15", - "resolved": "https://registry.npmjs.org/memoizee/-/memoizee-0.4.15.tgz", - "integrity": "sha512-UBWmJpLZd5STPm7PMUlOw/TSy972M+z8gcyQ5veOnSDRREz/0bmpyTfKt3/51DhEBqCZQn1udM/5flcSPYhkdQ==", - "dependencies": { - "d": "^1.0.1", - "es5-ext": "^0.10.53", - "es6-weak-map": "^2.0.3", - "event-emitter": "^0.3.5", - "is-promise": "^2.2.2", - "lru-queue": "^0.1.0", - "next-tick": "^1.1.0", - "timers-ext": "^0.1.7" - } - }, - "node_modules/memory-level": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/memory-level/-/memory-level-1.0.0.tgz", - "integrity": "sha512-UXzwewuWeHBz5krr7EvehKcmLFNoXxGcvuYhC41tRnkrTbJohtS7kVn9akmgirtRygg+f7Yjsfi8Uu5SGSQ4Og==", - "dependencies": { - "abstract-level": "^1.0.0", - "functional-red-black-tree": "^1.0.1", - "module-error": "^1.0.1" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/memorystream": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/memorystream/-/memorystream-0.3.1.tgz", - "integrity": "sha512-S3UwM3yj5mtUSEfP41UZmt/0SCoVYUcU1rkXv+BQ5Ig8ndL4sPoJNBUJERafdPb5jjHJGuMgytgKvKIf58XNBw==", - "engines": { - "node": ">= 0.10.0" - } - }, - "node_modules/merge-descriptors": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", - "integrity": "sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w==" - }, - "node_modules/merkle-patricia-tree": { - "version": "4.2.4", - "resolved": "https://registry.npmjs.org/merkle-patricia-tree/-/merkle-patricia-tree-4.2.4.tgz", - "integrity": "sha512-eHbf/BG6eGNsqqfbLED9rIqbsF4+sykEaBn6OLNs71tjclbMcMOk1tEPmJKcNcNCLkvbpY/lwyOlizWsqPNo8w==", - "dependencies": { - "@types/levelup": "^4.3.0", - "ethereumjs-util": "^7.1.4", - "level-mem": "^5.0.1", - "level-ws": "^2.0.0", - "readable-stream": "^3.6.0", - "semaphore-async-await": "^1.5.1" - } - }, - "node_modules/methods": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", - "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/micro-ftch": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/micro-ftch/-/micro-ftch-0.3.1.tgz", - "integrity": "sha512-/0LLxhzP0tfiR5hcQebtudP56gUurs2CLkGarnCiB/OqEyUFQ6U3paQi/tgLv0hBJYt2rnr9MNpxz4fiiugstg==" - }, - "node_modules/micromatch": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", - "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", - "dependencies": { - "braces": "^3.0.2", - "picomatch": "^2.3.1" - }, - "engines": { - "node": ">=8.6" - } - }, - "node_modules/miller-rabin": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/miller-rabin/-/miller-rabin-4.0.1.tgz", - "integrity": "sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA==", - "dependencies": { - "bn.js": "^4.0.0", - "brorand": "^1.0.1" - }, - "bin": { - "miller-rabin": "bin/miller-rabin" - } - }, - "node_modules/miller-rabin/node_modules/bn.js": { - "version": "4.12.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==" - }, - "node_modules/mime": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", - "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", - "bin": { - "mime": "cli.js" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/mime-db": { - "version": "1.52.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", - "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/mime-types": { - "version": "2.1.35", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", - "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", - "dependencies": { - "mime-db": "1.52.0" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/mimic-fn": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-3.1.0.tgz", - "integrity": "sha512-Ysbi9uYW9hFyfrThdDEQuykN4Ey6BuwPD2kpI5ES/nFTDn/98yxYNLZJcgUAKPT/mcrLLKaGzJR9YVxJrIdASQ==", - "optional": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/min-document": { - "version": "2.19.0", - "resolved": "https://registry.npmjs.org/min-document/-/min-document-2.19.0.tgz", - "integrity": "sha512-9Wy1B3m3f66bPPmU5hdA4DR4PB2OfDU/+GS3yAB7IQozE3tqXaVv2zOjgla7MEGSRv95+ILmOuvhLkOK6wJtCQ==", - "dependencies": { - "dom-walk": "^0.1.0" - } - }, - "node_modules/minimalistic-assert": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", - "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==" - }, - "node_modules/minimalistic-crypto-utils": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz", - "integrity": "sha512-JIYlbt6g8i5jKfJ3xz7rF0LXmv2TkDxBLUkiBeZ7bAx4GnnNMr8xFpGnOxn6GhTEHx3SjRrZEoU+j04prX1ktg==" - }, - "node_modules/minimatch": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.0.tgz", - "integrity": "sha512-9TPBGGak4nHfGZsPBohm9AWg6NoT7QTCehS3BIJABslyZbzxfV78QM2Y6+i741OPZIafFAaiiEMh5OyIrJPgtg==", - "dependencies": { - "brace-expansion": "^2.0.1" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/minimist": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.7.tgz", - "integrity": "sha512-bzfL1YUZsP41gmu/qjrEk0Q6i2ix/cVeAhbCbqH9u3zYutS1cLg00qhrD0M2MVdCcx4Sc0UpP2eBWo9rotpq6g==", - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/minipass": { - "version": "2.9.0", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-2.9.0.tgz", - "integrity": "sha512-wxfUjg9WebH+CUDX/CdbRlh5SmfZiy/hpkxaRI16Y9W56Pa75sWgd/rvFilSgrauD9NyFymP/+JFV3KwzIsJeg==", - "dependencies": { - "safe-buffer": "^5.1.2", - "yallist": "^3.0.0" - } - }, - "node_modules/minizlib": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-1.3.3.tgz", - "integrity": "sha512-6ZYMOEnmVsdCeTJVE0W9ZD+pVnE8h9Hma/iOwwRDsdQoePpoX56/8B6z3P9VNwppJuBKNRuFDRNRqRWexT9G9Q==", - "dependencies": { - "minipass": "^2.9.0" - } - }, - "node_modules/mkdirp": { - "version": "0.5.6", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", - "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", - "dependencies": { - "minimist": "^1.2.6" - }, - "bin": { - "mkdirp": "bin/cmd.js" - } - }, - "node_modules/mkdirp-classic": { - "version": "0.5.3", - "resolved": "https://registry.npmjs.org/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz", - "integrity": "sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==" - }, - "node_modules/mkdirp-promise": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/mkdirp-promise/-/mkdirp-promise-5.0.1.tgz", - "integrity": "sha512-Hepn5kb1lJPtVW84RFT40YG1OddBNTOVUZR2bzQUHc+Z03en8/3uX0+060JDhcEzyO08HmipsN9DcnFMxhIL9w==", - "deprecated": "This package is broken and no longer maintained. 'mkdirp' itself supports promises now, please switch to that.", - "dependencies": { - "mkdirp": "*" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/mnemonist": { - "version": "0.38.5", - "resolved": "https://registry.npmjs.org/mnemonist/-/mnemonist-0.38.5.tgz", - "integrity": "sha512-bZTFT5rrPKtPJxj8KSV0WkPyNxl72vQepqqVUAW2ARUpUSF2qXMB6jZj7hW5/k7C1rtpzqbD/IIbJwLXUjCHeg==", - "dependencies": { - "obliterator": "^2.0.0" - } - }, - "node_modules/mocha": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/mocha/-/mocha-10.1.0.tgz", - "integrity": "sha512-vUF7IYxEoN7XhQpFLxQAEMtE4W91acW4B6En9l97MwE9stL1A9gusXfoHZCLVHDUJ/7V5+lbCM6yMqzo5vNymg==", - "dependencies": { - "ansi-colors": "4.1.1", - "browser-stdout": "1.3.1", - "chokidar": "3.5.3", - "debug": "4.3.4", - "diff": "5.0.0", - "escape-string-regexp": "4.0.0", - "find-up": "5.0.0", - "glob": "7.2.0", - "he": "1.2.0", - "js-yaml": "4.1.0", - "log-symbols": "4.1.0", - "minimatch": "5.0.1", - "ms": "2.1.3", - "nanoid": "3.3.3", - "serialize-javascript": "6.0.0", - "strip-json-comments": "3.1.1", - "supports-color": "8.1.1", - "workerpool": "6.2.1", - "yargs": "16.2.0", - "yargs-parser": "20.2.4", - "yargs-unparser": "2.0.0" - }, - "bin": { - "_mocha": "bin/_mocha", - "mocha": "bin/mocha.js" - }, - "engines": { - "node": ">= 14.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/mochajs" - } - }, - "node_modules/mocha/node_modules/ansi-colors": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz", - "integrity": "sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==", - "engines": { - "node": ">=6" - } - }, - "node_modules/mocha/node_modules/find-up": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", - "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", - "dependencies": { - "locate-path": "^6.0.0", - "path-exists": "^4.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/mocha/node_modules/glob": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz", - "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==", - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "engines": { - "node": "*" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/mocha/node_modules/glob/node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/mocha/node_modules/glob/node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, - "node_modules/mocha/node_modules/locate-path": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", - "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", - "dependencies": { - "p-locate": "^5.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/mocha/node_modules/minimatch": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.0.1.tgz", - "integrity": "sha512-nLDxIFRyhDblz3qMuq+SoRZED4+miJ/G+tdDrjkkkRnjAsBexeGpgjLEQ0blJy7rHhR2b93rhQY4SvyWu9v03g==", - "dependencies": { - "brace-expansion": "^2.0.1" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/mocha/node_modules/ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" - }, - "node_modules/mocha/node_modules/nanoid": { - "version": "3.3.3", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.3.tgz", - "integrity": "sha512-p1sjXuopFs0xg+fPASzQ28agW1oHD7xDsd9Xkf3T15H3c/cifrFHVwrh74PdoklAPi+i7MdRsE47vm2r6JoB+w==", - "bin": { - "nanoid": "bin/nanoid.cjs" - }, - "engines": { - "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" - } - }, - "node_modules/mocha/node_modules/p-limit": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", - "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", - "dependencies": { - "yocto-queue": "^0.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/mocha/node_modules/p-locate": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", - "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", - "dependencies": { - "p-limit": "^3.0.2" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/mocha/node_modules/supports-color": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", - "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/supports-color?sponsor=1" - } - }, - "node_modules/mock-fs": { - "version": "4.14.0", - "resolved": "https://registry.npmjs.org/mock-fs/-/mock-fs-4.14.0.tgz", - "integrity": "sha512-qYvlv/exQ4+svI3UOvPUpLDF0OMX5euvUH0Ny4N5QyRyhNdgAgUrVH3iUINSzEPLvx0kbo/Bp28GJKIqvE7URw==" - }, - "node_modules/module-error": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/module-error/-/module-error-1.0.2.tgz", - "integrity": "sha512-0yuvsqSCv8LbaOKhnsQ/T5JhyFlCYLPXK3U2sgV10zoKQwzs/MyfuQUOZQ1V/6OCOJsK/TRgNVrPuPDqtdMFtA==", - "engines": { - "node": ">=10" - } - }, - "node_modules/moment": { - "version": "2.29.4", - "resolved": "https://registry.npmjs.org/moment/-/moment-2.29.4.tgz", - "integrity": "sha512-5LC9SOxjSc2HF6vO2CyuTDNivEdoz2IvyJJGj6X8DJ0eFyfszE0QiEd+iXmBvUP3WHxSjFH/vIsA0EN00cgr8w==", - "optional": true, - "engines": { - "node": "*" - } - }, - "node_modules/ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" - }, - "node_modules/multibase": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/multibase/-/multibase-0.6.1.tgz", - "integrity": "sha512-pFfAwyTjbbQgNc3G7D48JkJxWtoJoBMaR4xQUOuB8RnCgRqaYmWNFeJTTvrJ2w51bjLq2zTby6Rqj9TQ9elSUw==", - "deprecated": "This module has been superseded by the multiformats module", - "dependencies": { - "base-x": "^3.0.8", - "buffer": "^5.5.0" - } - }, - "node_modules/multibase/node_modules/buffer": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", - "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "dependencies": { - "base64-js": "^1.3.1", - "ieee754": "^1.1.13" - } - }, - "node_modules/multicodec": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/multicodec/-/multicodec-0.5.7.tgz", - "integrity": "sha512-PscoRxm3f+88fAtELwUnZxGDkduE2HD9Q6GHUOywQLjOGT/HAdhjLDYNZ1e7VR0s0TP0EwZ16LNUTFpoBGivOA==", - "deprecated": "This module has been superseded by the multiformats module", - "dependencies": { - "varint": "^5.0.0" - } - }, - "node_modules/multihashes": { - "version": "0.4.21", - "resolved": "https://registry.npmjs.org/multihashes/-/multihashes-0.4.21.tgz", - "integrity": "sha512-uVSvmeCWf36pU2nB4/1kzYZjsXD9vofZKpgudqkceYY5g2aZZXJ5r9lxuzoRLl1OAp28XljXsEJ/X/85ZsKmKw==", - "dependencies": { - "buffer": "^5.5.0", - "multibase": "^0.7.0", - "varint": "^5.0.0" - } - }, - "node_modules/multihashes/node_modules/buffer": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", - "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "dependencies": { - "base64-js": "^1.3.1", - "ieee754": "^1.1.13" - } - }, - "node_modules/multihashes/node_modules/multibase": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/multibase/-/multibase-0.7.0.tgz", - "integrity": "sha512-TW8q03O0f6PNFTQDvh3xxH03c8CjGaaYrjkl9UQPG6rz53TQzzxJVCIWVjzcbN/Q5Y53Zd0IBQBMVktVgNx4Fg==", - "deprecated": "This module has been superseded by the multiformats module", - "dependencies": { - "base-x": "^3.0.8", - "buffer": "^5.5.0" - } - }, - "node_modules/murmur-128": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/murmur-128/-/murmur-128-0.2.1.tgz", - "integrity": "sha512-WseEgiRkI6aMFBbj8Cg9yBj/y+OdipwVC7zUo3W2W1JAJITwouUOtpqsmGSg67EQmwwSyod7hsVsWY5LsrfQVg==", - "dev": true, - "dependencies": { - "encode-utf8": "^1.0.2", - "fmix": "^0.1.0", - "imul": "^1.0.0" - } - }, - "node_modules/mv": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/mv/-/mv-2.1.1.tgz", - "integrity": "sha512-at/ZndSy3xEGJ8i0ygALh8ru9qy7gWW1cmkaqBN29JmMlIvM//MEO9y1sk/avxuwnPcfhkejkLsuPxH81BrkSg==", - "optional": true, - "dependencies": { - "mkdirp": "~0.5.1", - "ncp": "~2.0.0", - "rimraf": "~2.4.0" - }, - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/nan": { - "version": "2.17.0", - "resolved": "https://registry.npmjs.org/nan/-/nan-2.17.0.tgz", - "integrity": "sha512-2ZTgtl0nJsO0KQCjEpxcIr5D+Yv90plTitZt9JBfQvVJDS5seMl3FOvsh3+9CoYWXf/1l5OaZzzF6nDm4cagaQ==" - }, - "node_modules/nano-base32": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/nano-base32/-/nano-base32-1.0.1.tgz", - "integrity": "sha512-sxEtoTqAPdjWVGv71Q17koMFGsOMSiHsIFEvzOM7cNp8BXB4AnEwmDabm5dorusJf/v1z7QxaZYxUorU9RKaAw==" - }, - "node_modules/nano-json-stream-parser": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/nano-json-stream-parser/-/nano-json-stream-parser-0.1.2.tgz", - "integrity": "sha512-9MqxMH/BSJC7dnLsEMPyfN5Dvoo49IsPFYMcHw3Bcfc2kN0lpHRBSzlMSVx4HGyJ7s9B31CyBTVehWJoQ8Ctew==" - }, - "node_modules/nanoid": { - "version": "3.3.4", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.4.tgz", - "integrity": "sha512-MqBkQh/OHTS2egovRtLk45wEyNXwF+cokD+1YPf9u5VfJiRdAiRwB2froX5Co9Rh20xs4siNPm8naNotSD6RBw==", - "bin": { - "nanoid": "bin/nanoid.cjs" - }, - "engines": { - "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" - } - }, - "node_modules/napi-macros": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/napi-macros/-/napi-macros-2.0.0.tgz", - "integrity": "sha512-A0xLykHtARfueITVDernsAWdtIMbOJgKgcluwENp3AlsKN/PloyO10HtmoqnFAQAcxPkgZN7wdfPfEd0zNGxbg==", - "optional": true - }, - "node_modules/ncp": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ncp/-/ncp-2.0.0.tgz", - "integrity": "sha512-zIdGUrPRFTUELUvr3Gmc7KZ2Sw/h1PiVM0Af/oHB6zgnV1ikqSfRk+TOufi79aHYCW3NiOXmr1BP5nWbzojLaA==", - "optional": true, - "bin": { - "ncp": "bin/ncp" - } - }, - "node_modules/negotiator": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", - "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/next-tick": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/next-tick/-/next-tick-1.1.0.tgz", - "integrity": "sha512-CXdUiJembsNjuToQvxayPZF9Vqht7hewsvy2sOWafLvi2awflj9mOC6bHIg50orX8IJvWKY9wYQ/zB2kogPslQ==" - }, - "node_modules/nice-try": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz", - "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==" - }, - "node_modules/no-case": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/no-case/-/no-case-2.3.2.tgz", - "integrity": "sha512-rmTZ9kz+f3rCvK2TD1Ue/oZlns7OGoIWP4fc3llxxRXlOkHKoWPPWJOfFYpITabSow43QJbRIoHQXtt10VldyQ==", - "dependencies": { - "lower-case": "^1.1.1" - } - }, - "node_modules/node-abort-controller": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/node-abort-controller/-/node-abort-controller-3.1.1.tgz", - "integrity": "sha512-AGK2yQKIjRuqnc6VkX2Xj5d+QW8xZ87pa1UK6yA6ouUyuxfHuMP6umE5QK7UmTeOAymo+Zx1Fxiuw9rVx8taHQ==", - "optional": true - }, - "node_modules/node-addon-api": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-2.0.2.tgz", - "integrity": "sha512-Ntyt4AIXyaLIuMHF6IOoTakB3K+RWxwtsHNRxllEoA6vPwP9o4866g6YWDLUdnucilZhmkxiHwHr11gAENw+QA==" - }, - "node_modules/node-environment-flags": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/node-environment-flags/-/node-environment-flags-1.0.6.tgz", - "integrity": "sha512-5Evy2epuL+6TM0lCQGpFIj6KwiEsGh1SrHUhTbNX+sLbBtjidPZFAnVK9y5yU1+h//RitLbRHTIMyxQPtxMdHw==", - "dependencies": { - "object.getownpropertydescriptors": "^2.0.3", - "semver": "^5.7.0" - } - }, - "node_modules/node-environment-flags/node_modules/semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "bin": { - "semver": "bin/semver" - } - }, - "node_modules/node-fetch": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz", - "integrity": "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==", - "dependencies": { - "whatwg-url": "^5.0.0" - }, - "engines": { - "node": "4.x || >=6.0.0" - }, - "peerDependencies": { - "encoding": "^0.1.0" - }, - "peerDependenciesMeta": { - "encoding": { - "optional": true - } - } - }, - "node_modules/node-gyp-build": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.5.0.tgz", - "integrity": "sha512-2iGbaQBV+ITgCz76ZEjmhUKAKVf7xfY1sRl4UiKQspfZMH2h06SyhNsnSVy50cwkFQDGLyif6m/6uFXHkOZ6rg==", - "bin": { - "node-gyp-build": "bin.js", - "node-gyp-build-optional": "optional.js", - "node-gyp-build-test": "build-test.js" - } - }, - "node_modules/node-interval-tree": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/node-interval-tree/-/node-interval-tree-1.3.3.tgz", - "integrity": "sha512-K9vk96HdTK5fEipJwxSvIIqwTqr4e3HRJeJrNxBSeVMNSC/JWARRaX7etOLOuTmrRMeOI/K5TCJu3aWIwZiNTw==", - "dependencies": { - "shallowequal": "^1.0.2" - }, - "engines": { - "node": ">= 7.6.0" - } - }, - "node_modules/node-releases": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.6.tgz", - "integrity": "sha512-PiVXnNuFm5+iYkLBNeq5211hvO38y63T0i2KKh2KnUs3RpzJ+JtODFjkD8yjLwnDkTYF1eKXheUwdssR+NRZdg==" - }, - "node_modules/nodemon": { - "version": "2.0.22", - "resolved": "https://registry.npmjs.org/nodemon/-/nodemon-2.0.22.tgz", - "integrity": "sha512-B8YqaKMmyuCO7BowF1Z1/mkPqLk6cs/l63Ojtd6otKjMx47Dq1utxfRxcavH1I7VSaL8n5BUaoutadnsX3AAVQ==", - "dependencies": { - "chokidar": "^3.5.2", - "debug": "^3.2.7", - "ignore-by-default": "^1.0.1", - "minimatch": "^3.1.2", - "pstree.remy": "^1.1.8", - "semver": "^5.7.1", - "simple-update-notifier": "^1.0.7", - "supports-color": "^5.5.0", - "touch": "^3.1.0", - "undefsafe": "^2.0.5" - }, - "bin": { - "nodemon": "bin/nodemon.js" - }, - "engines": { - "node": ">=8.10.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/nodemon" - } - }, - "node_modules/nodemon/node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/nodemon/node_modules/debug": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", - "dependencies": { - "ms": "^2.1.1" - } - }, - "node_modules/nodemon/node_modules/has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", - "engines": { - "node": ">=4" - } - }, - "node_modules/nodemon/node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, - "node_modules/nodemon/node_modules/semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "bin": { - "semver": "bin/semver" - } - }, - "node_modules/nodemon/node_modules/supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/nofilter": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/nofilter/-/nofilter-1.0.4.tgz", - "integrity": "sha512-N8lidFp+fCz+TD51+haYdbDGrcBWwuHX40F5+z0qkUjMJ5Tp+rdSuAkMJ9N9eoolDlEVTf6u5icM+cNKkKW2mA==", - "engines": { - "node": ">=8" - } - }, - "node_modules/nopt": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/nopt/-/nopt-1.0.10.tgz", - "integrity": "sha512-NWmpvLSqUrgrAC9HCuxEvb+PSloHpqVu+FqcO4eeF2h5qYRhA7ev6KvelyQAKtegUbC6RypJnlEOhd8vloNKYg==", - "dependencies": { - "abbrev": "1" - }, - "bin": { - "nopt": "bin/nopt.js" - }, - "engines": { - "node": "*" - } - }, - "node_modules/normalize-hex": { - "version": "0.0.2", - "resolved": "https://registry.npmjs.org/normalize-hex/-/normalize-hex-0.0.2.tgz", - "integrity": "sha512-E2dx7XJQnjsm6SkS4G6GGvIXRHaLeWAZE2D2N3aia+OpIif2UT8y4S0KCjrX3WmFDSeFnlNOp0FSHFjLeJ4SJw==", - "dependencies": { - "bn.js": "^4.11.8" - } - }, - "node_modules/normalize-hex/node_modules/bn.js": { - "version": "4.12.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==" - }, - "node_modules/normalize-package-data": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", - "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", - "dependencies": { - "hosted-git-info": "^2.1.4", - "resolve": "^1.10.0", - "semver": "2 || 3 || 4 || 5", - "validate-npm-package-license": "^3.0.1" - } - }, - "node_modules/normalize-package-data/node_modules/semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "bin": { - "semver": "bin/semver" - } - }, - "node_modules/normalize-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", - "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/normalize-url": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-6.1.0.tgz", - "integrity": "sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A==", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/nth-check": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.1.1.tgz", - "integrity": "sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==", - "devOptional": true, - "dependencies": { - "boolbase": "^1.0.0" - }, - "funding": { - "url": "https://github.com/fb55/nth-check?sponsor=1" - } - }, - "node_modules/number-is-nan": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", - "integrity": "sha512-4jbtZXNAsfZbAHiiqjLPBiCl16dES1zI4Hpzzxw61Tk+loF+sBDBKx1ICKKKwIqQ7M0mFn1TmkN7euSncWgHiQ==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/number-to-bn": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/number-to-bn/-/number-to-bn-1.7.0.tgz", - "integrity": "sha512-wsJ9gfSz1/s4ZsJN01lyonwuxA1tml6X1yBDnfpMglypcBRFZZkus26EdPSlqS5GJfYddVZa22p3VNb3z5m5Ig==", - "dependencies": { - "bn.js": "4.11.6", - "strip-hex-prefix": "1.0.0" - }, - "engines": { - "node": ">=6.5.0", - "npm": ">=3" - } - }, - "node_modules/number-to-bn/node_modules/bn.js": { - "version": "4.11.6", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.6.tgz", - "integrity": "sha512-XWwnNNFCuuSQ0m3r3C4LE3EiORltHd9M05pq6FOlVeiophzRbMo50Sbz1ehl8K3Z+jw9+vmgnXefY1hz8X+2wA==" - }, - "node_modules/oauth-sign": { - "version": "0.9.0", - "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz", - "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==", - "engines": { - "node": "*" - } - }, - "node_modules/object-assign": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", - "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/object-inspect": { - "version": "1.12.2", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.2.tgz", - "integrity": "sha512-z+cPxW0QGUp0mcqcsgQyLVRDoXFQbXOwBaqyF7VIgI4TWNQsDHrBpUQslRmIfAoYWdYzs6UlKJtB2XJpTaNSpQ==", - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/object-keys": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", - "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/object.assign": { - "version": "4.1.4", - "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.4.tgz", - "integrity": "sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ==", - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "has-symbols": "^1.0.3", - "object-keys": "^1.1.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/object.getownpropertydescriptors": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.4.tgz", - "integrity": "sha512-sccv3L/pMModT6dJAYF3fzGMVcb38ysQ0tEE6ixv2yXJDtEIPph268OlAdJj5/qZMZDq2g/jqvwppt36uS/uQQ==", - "dependencies": { - "array.prototype.reduce": "^1.0.4", - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.1" - }, - "engines": { - "node": ">= 0.8" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/obliterator": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/obliterator/-/obliterator-2.0.4.tgz", - "integrity": "sha512-lgHwxlxV1qIg1Eap7LgIeoBWIMFibOjbrYPIPJZcI1mmGAI2m3lNYpK12Y+GBdPQ0U1hRwSord7GIaawz962qQ==" - }, - "node_modules/oboe": { - "version": "2.1.5", - "resolved": "https://registry.npmjs.org/oboe/-/oboe-2.1.5.tgz", - "integrity": "sha512-zRFWiF+FoicxEs3jNI/WYUrVEgA7DeET/InK0XQuudGHRg8iIob3cNPrJTKaz4004uaA9Pbe+Dwa8iluhjLZWA==", - "dependencies": { - "http-https": "^1.0.0" - } - }, - "node_modules/on-finished": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", - "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", - "dependencies": { - "ee-first": "1.1.1" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", - "dependencies": { - "wrappy": "1" - } - }, - "node_modules/onetime": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", - "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", - "optional": true, - "dependencies": { - "mimic-fn": "^2.1.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/onetime/node_modules/mimic-fn": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", - "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", - "optional": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/open": { - "version": "7.4.2", - "resolved": "https://registry.npmjs.org/open/-/open-7.4.2.tgz", - "integrity": "sha512-MVHddDVweXZF3awtlAS+6pgKLlm/JgxZ90+/NBurBoQctVOOB/zDdVjcyPzQ+0laDGbsWgrRkflI65sQeOgT9Q==", - "dependencies": { - "is-docker": "^2.0.0", - "is-wsl": "^2.1.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/ordinal": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/ordinal/-/ordinal-1.0.3.tgz", - "integrity": "sha512-cMddMgb2QElm8G7vdaa02jhUNbTSrhsgAGUz1OokD83uJTwSUn+nKoNoKVVaRa08yF6sgfO7Maou1+bgLd9rdQ==", - "peer": true - }, - "node_modules/original-require": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/original-require/-/original-require-1.0.1.tgz", - "integrity": "sha512-5vdKMbE58WaE61uVD+PKyh8xdM398UnjPBLotW2sjG5MzHARwta/+NtMBCBA0t2WQblGYBvq5vsiZpWokwno+A==" - }, - "node_modules/os-locale": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-1.4.0.tgz", - "integrity": "sha512-PRT7ZORmwu2MEFt4/fv3Q+mEfN4zetKxufQrkShY2oGvUms9r8otu5HfdyIFHkYXjO7laNsoVGmM2MANfuTA8g==", - "dependencies": { - "lcid": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/os-tmpdir": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", - "integrity": "sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/p-cancelable": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-3.0.0.tgz", - "integrity": "sha512-mlVgR3PGuzlo0MmTdk4cXqXWlwQDLnONTAg6sm62XkMJEiRxN3GL3SffkYvqwonbkJBcrI7Uvv5Zh9yjvn2iUw==", - "engines": { - "node": ">=12.20" - } - }, - "node_modules/p-finally": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", - "integrity": "sha512-LICb2p9CB7FS+0eR1oqWnHhp0FljGLZCWBE9aix0Uye9W8LTQPwMTYVGWQWIw9RdQiDg4+epXQODwIYJtSJaow==", - "engines": { - "node": ">=4" - } - }, - "node_modules/p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", - "dependencies": { - "p-try": "^2.0.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/p-locate": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", - "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", - "dependencies": { - "p-limit": "^2.2.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/p-map": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz", - "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==", - "dependencies": { - "aggregate-error": "^3.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/p-timeout": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/p-timeout/-/p-timeout-1.2.1.tgz", - "integrity": "sha512-gb0ryzr+K2qFqFv6qi3khoeqMZF/+ajxQipEF6NteZVnvz9tzdsfAVj3lYtn1gAXvH5lfLwfxEII799gt/mRIA==", - "dependencies": { - "p-finally": "^1.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/p-try": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", - "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", - "engines": { - "node": ">=6" - } - }, - "node_modules/pako": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.11.tgz", - "integrity": "sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==", - "dev": true - }, - "node_modules/param-case": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/param-case/-/param-case-2.1.1.tgz", - "integrity": "sha512-eQE845L6ot89sk2N8liD8HAuH4ca6Vvr7VWAWwt7+kvvG5aBcPmmphQ68JsEG2qa9n1TykS2DLeMt363AAH8/w==", - "dependencies": { - "no-case": "^2.2.0" - } - }, - "node_modules/parse-asn1": { - "version": "5.1.6", - "resolved": "https://registry.npmjs.org/parse-asn1/-/parse-asn1-5.1.6.tgz", - "integrity": "sha512-RnZRo1EPU6JBnra2vGHj0yhp6ebyjBZpmUCLHWiFhxlzvBCCpAuZ7elsBp1PVAbQN0/04VD/19rfzlBSwLstMw==", - "dependencies": { - "asn1.js": "^5.2.0", - "browserify-aes": "^1.0.0", - "evp_bytestokey": "^1.0.0", - "pbkdf2": "^3.0.3", - "safe-buffer": "^5.1.1" - } - }, - "node_modules/parse-cache-control": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/parse-cache-control/-/parse-cache-control-1.0.1.tgz", - "integrity": "sha512-60zvsJReQPX5/QP0Kzfd/VrpjScIQ7SHBW6bFCYfEP+fp0Eppr1SHhIO5nd1PjZtvclzSzES9D/p5nFJurwfWg==" - }, - "node_modules/parse-headers": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/parse-headers/-/parse-headers-2.0.5.tgz", - "integrity": "sha512-ft3iAoLOB/MlwbNXgzy43SWGP6sQki2jQvAyBg/zDFAgr9bfNWZIUj42Kw2eJIl8kEi4PbgE6U1Zau/HwI75HA==" - }, - "node_modules/parse-json": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz", - "integrity": "sha512-QR/GGaKCkhwk1ePQNYDRKYZ3mwU9ypsKhB0XyFnLQdomyEqk3e8wpW3V5Jp88zbxK4n5ST1nqo+g9juTpownhQ==", - "dependencies": { - "error-ex": "^1.2.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/parse5": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/parse5/-/parse5-7.1.1.tgz", - "integrity": "sha512-kwpuwzB+px5WUg9pyK0IcK/shltJN5/OVhQagxhCQNtT9Y9QRZqNY2e1cmbu/paRh5LMnz/oVTVLBpjFmMZhSg==", - "devOptional": true, - "dependencies": { - "entities": "^4.4.0" - }, - "funding": { - "url": "https://github.com/inikulin/parse5?sponsor=1" - } - }, - "node_modules/parse5-htmlparser2-tree-adapter": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/parse5-htmlparser2-tree-adapter/-/parse5-htmlparser2-tree-adapter-7.0.0.tgz", - "integrity": "sha512-B77tOZrqqfUfnVcOrUvfdLbz4pu4RopLD/4vmu3HUPswwTA8OH0EMW9BlWR2B0RCoiZRAHEUu7IxeP1Pd1UU+g==", - "devOptional": true, - "dependencies": { - "domhandler": "^5.0.2", - "parse5": "^7.0.0" - }, - "funding": { - "url": "https://github.com/inikulin/parse5?sponsor=1" - } - }, - "node_modules/parseurl": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", - "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/pascal-case": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/pascal-case/-/pascal-case-2.0.1.tgz", - "integrity": "sha512-qjS4s8rBOJa2Xm0jmxXiyh1+OFf6ekCWOvUaRgAQSktzlTbMotS0nmG9gyYAybCWBcuP4fsBeRCKNwGBnMe2OQ==", - "dependencies": { - "camel-case": "^3.0.0", - "upper-case-first": "^1.1.0" - } - }, - "node_modules/patch-package": { - "version": "6.5.1", - "resolved": "https://registry.npmjs.org/patch-package/-/patch-package-6.5.1.tgz", - "integrity": "sha512-I/4Zsalfhc6bphmJTlrLoOcAF87jcxko4q0qsv4bGcurbr8IskEOtdnt9iCmsQVGL1B+iUhSQqweyTLJfCF9rA==", - "dependencies": { - "@yarnpkg/lockfile": "^1.1.0", - "chalk": "^4.1.2", - "cross-spawn": "^6.0.5", - "find-yarn-workspace-root": "^2.0.0", - "fs-extra": "^9.0.0", - "is-ci": "^2.0.0", - "klaw-sync": "^6.0.0", - "minimist": "^1.2.6", - "open": "^7.4.2", - "rimraf": "^2.6.3", - "semver": "^5.6.0", - "slash": "^2.0.0", - "tmp": "^0.0.33", - "yaml": "^1.10.2" - }, - "bin": { - "patch-package": "index.js" - }, - "engines": { - "node": ">=10", - "npm": ">5" - } - }, - "node_modules/patch-package/node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/patch-package/node_modules/fs-extra": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", - "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", - "dependencies": { - "at-least-node": "^1.0.0", - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/patch-package/node_modules/glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "engines": { - "node": "*" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/patch-package/node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, - "node_modules/patch-package/node_modules/rimraf": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", - "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", - "dependencies": { - "glob": "^7.1.3" - }, - "bin": { - "rimraf": "bin.js" - } - }, - "node_modules/patch-package/node_modules/semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "bin": { - "semver": "bin/semver" - } - }, - "node_modules/path": { - "version": "0.12.7", - "resolved": "https://registry.npmjs.org/path/-/path-0.12.7.tgz", - "integrity": "sha512-aXXC6s+1w7otVF9UletFkFcDsJeO7lSZBPUQhtb5O0xJe8LtYhj/GxldoL09bBj9+ZmE2hNoHqQSFMN5fikh4Q==", - "dependencies": { - "process": "^0.11.1", - "util": "^0.10.3" - } - }, - "node_modules/path-browserify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-1.0.1.tgz", - "integrity": "sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g==", - "dev": true - }, - "node_modules/path-case": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/path-case/-/path-case-2.1.1.tgz", - "integrity": "sha512-Ou0N05MioItesaLr9q8TtHVWmJ6fxWdqKB2RohFmNWVyJ+2zeKIeDNWAN6B/Pe7wpzWChhZX6nONYmOnMeJQ/Q==", - "dependencies": { - "no-case": "^2.2.0" - } - }, - "node_modules/path-exists": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", - "engines": { - "node": ">=8" - } - }, - "node_modules/path-is-absolute": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/path-key": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", - "integrity": "sha512-fEHGKCSmUSDPv4uoj8AlD+joPlq3peND+HRYyxFz4KPw4z926S/b8rIuFs2FYJg3BwsxJf6A9/3eIdLaYC+9Dw==", - "engines": { - "node": ">=4" - } - }, - "node_modules/path-parse": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", - "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==" - }, - "node_modules/path-to-regexp": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", - "integrity": "sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==" - }, - "node_modules/path-type": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-1.1.0.tgz", - "integrity": "sha512-S4eENJz1pkiQn9Znv33Q+deTOKmbl+jj1Fl+qiP/vYezj+S8x+J3Uo0ISrx/QoEvIlOaDWJhPaRd1flJ9HXZqg==", - "dependencies": { - "graceful-fs": "^4.1.2", - "pify": "^2.0.0", - "pinkie-promise": "^2.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/path-type/node_modules/pify": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", - "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/path/node_modules/inherits": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "integrity": "sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw==" - }, - "node_modules/path/node_modules/util": { - "version": "0.10.4", - "resolved": "https://registry.npmjs.org/util/-/util-0.10.4.tgz", - "integrity": "sha512-0Pm9hTQ3se5ll1XihRic3FDIku70C+iHUdT/W926rSgHV5QgXsYbKZN8MSC3tJtSkhuROzvsQjAaFENRXr+19A==", - "dependencies": { - "inherits": "2.0.3" - } - }, - "node_modules/pathval": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/pathval/-/pathval-1.1.1.tgz", - "integrity": "sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ==", - "engines": { - "node": "*" - } - }, - "node_modules/pbkdf2": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.1.2.tgz", - "integrity": "sha512-iuh7L6jA7JEGu2WxDwtQP1ddOpaJNC4KlDEFfdQajSGgGPNi4OyDc2R7QnbY2bR9QjBVGwgvTdNJZoE7RaxUMA==", - "dependencies": { - "create-hash": "^1.1.2", - "create-hmac": "^1.1.4", - "ripemd160": "^2.0.1", - "safe-buffer": "^5.0.1", - "sha.js": "^2.4.8" - }, - "engines": { - "node": ">=0.12" - } - }, - "node_modules/pend": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz", - "integrity": "sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg==" - }, - "node_modules/performance-now": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", - "integrity": "sha512-7EAHlyLHI56VEIdK57uwHdHKIaAGbnXPiw0yWbarQZOKaKpvUIgW0jWRVLiatnM+XXlSwsanIBH/hzGMJulMow==" - }, - "node_modules/picocolors": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", - "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==" - }, - "node_modules/picomatch": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", - "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", - "engines": { - "node": ">=8.6" - }, - "funding": { - "url": "https://github.com/sponsors/jonschlinkert" - } - }, - "node_modules/pify": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", - "integrity": "sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg==", - "engines": { - "node": ">=4" - } - }, - "node_modules/pinkie": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz", - "integrity": "sha512-MnUuEycAemtSaeFSjXKW/aroV7akBbY+Sv+RkyqFjgAe73F+MR0TBWKBRDkmfWq/HiFmdavfZ1G7h4SPZXaCSg==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/pinkie-promise": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz", - "integrity": "sha512-0Gni6D4UcLTbv9c57DfxDGdr41XfgUjqWZu492f0cIGr16zDU06BWP/RAEvOuo7CQ0CNjHaLlM59YJJFm3NWlw==", - "dependencies": { - "pinkie": "^2.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/pkg-dir": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", - "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", - "optional": true, - "dependencies": { - "find-up": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/pkg-up": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/pkg-up/-/pkg-up-3.1.0.tgz", - "integrity": "sha512-nDywThFk1i4BQK4twPQ6TA4RT8bDY96yeuCVBWL3ePARCiEKDRSrNGbFIgUJpLp+XeIR65v8ra7WuJOFUBtkMA==", - "optional": true, - "dependencies": { - "find-up": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/pkg-up/node_modules/find-up": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", - "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", - "optional": true, - "dependencies": { - "locate-path": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/pkg-up/node_modules/locate-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", - "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", - "optional": true, - "dependencies": { - "p-locate": "^3.0.0", - "path-exists": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/pkg-up/node_modules/p-locate": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", - "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", - "optional": true, - "dependencies": { - "p-limit": "^2.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/pkg-up/node_modules/path-exists": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", - "integrity": "sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==", - "optional": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/platform-deploy-client": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/platform-deploy-client/-/platform-deploy-client-0.6.0.tgz", - "integrity": "sha512-mBfnOvF2gb9acGJjlXBQ6VOAkKFRdljsNKHUVY5xKqzKP2PNh/RqCIvi5AR5NqLMrQ3XaMIwRvmwAjtGw7JhYg==", - "dev": true, - "dependencies": { - "@ethersproject/abi": "^5.6.3", - "axios": "^0.21.2", - "defender-base-client": "^1.44.0", - "lodash": "^4.17.19", - "node-fetch": "^2.6.0" - } - }, - "node_modules/pluralize": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/pluralize/-/pluralize-8.0.0.tgz", - "integrity": "sha512-Nc3IT5yHzflTfbjgqWcCPpo7DaKy4FnpB0l/zCAW0Tc7jxAiuqSxHasntB3D7887LSrA93kDJ9IXovxJYxyLCA==", - "optional": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/pollock": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/pollock/-/pollock-0.2.1.tgz", - "integrity": "sha512-2Xy6LImSXm0ANKv9BKSVuCa6Z4ACbK7oUrl9gtUgqLkekL7n9C0mlWsOGYYuGbCG8xT0x3Q4F31C3ZMyVQjwsg==", - "optional": true - }, - "node_modules/pouchdb": { - "version": "7.3.0", - "resolved": "https://registry.npmjs.org/pouchdb/-/pouchdb-7.3.0.tgz", - "integrity": "sha512-OwsIQGXsfx3TrU1pLruj6PGSwFH+h5k4hGNxFkZ76Um7/ZI8F5TzUHFrpldVVIhfXYi2vP31q0q7ot1FSLFYOw==", - "optional": true, - "dependencies": { - "abort-controller": "3.0.0", - "argsarray": "0.0.1", - "buffer-from": "1.1.2", - "clone-buffer": "1.0.0", - "double-ended-queue": "2.1.0-0", - "fetch-cookie": "0.11.0", - "immediate": "3.3.0", - "inherits": "2.0.4", - "level": "6.0.1", - "level-codec": "9.0.2", - "level-write-stream": "1.0.0", - "leveldown": "5.6.0", - "levelup": "4.4.0", - "ltgt": "2.2.1", - "node-fetch": "2.6.7", - "readable-stream": "1.1.14", - "spark-md5": "3.0.2", - "through2": "3.0.2", - "uuid": "8.3.2", - "vuvuzela": "1.0.3" - } - }, - "node_modules/pouchdb-abstract-mapreduce": { - "version": "7.3.1", - "resolved": "https://registry.npmjs.org/pouchdb-abstract-mapreduce/-/pouchdb-abstract-mapreduce-7.3.1.tgz", - "integrity": "sha512-0zKXVFBvrfc1KnN0ggrB762JDmZnUpePHywo9Bq3Jy+L1FnoG7fXM5luFfvv5/T0gEw+ZTIwoocZECMnESBI9w==", - "optional": true, - "dependencies": { - "pouchdb-binary-utils": "7.3.1", - "pouchdb-collate": "7.3.1", - "pouchdb-collections": "7.3.1", - "pouchdb-errors": "7.3.1", - "pouchdb-fetch": "7.3.1", - "pouchdb-mapreduce-utils": "7.3.1", - "pouchdb-md5": "7.3.1", - "pouchdb-utils": "7.3.1" - } - }, - "node_modules/pouchdb-adapter-leveldb-core": { - "version": "7.3.1", - "resolved": "https://registry.npmjs.org/pouchdb-adapter-leveldb-core/-/pouchdb-adapter-leveldb-core-7.3.1.tgz", - "integrity": "sha512-mxShHlqLMPz2gChrgtA9okV1ogFmQrRAoM/O4EN0CrQWPLXqYtpL1f7sI2asIvFe7SmpnvbLx7kkZyFmLTfwjA==", - "optional": true, - "dependencies": { - "argsarray": "0.0.1", - "buffer-from": "1.1.2", - "double-ended-queue": "2.1.0-0", - "levelup": "4.4.0", - "pouchdb-adapter-utils": "7.3.1", - "pouchdb-binary-utils": "7.3.1", - "pouchdb-collections": "7.3.1", - "pouchdb-errors": "7.3.1", - "pouchdb-json": "7.3.1", - "pouchdb-md5": "7.3.1", - "pouchdb-merge": "7.3.1", - "pouchdb-utils": "7.3.1", - "sublevel-pouchdb": "7.3.1", - "through2": "3.0.2" - } - }, - "node_modules/pouchdb-adapter-memory": { - "version": "7.3.1", - "resolved": "https://registry.npmjs.org/pouchdb-adapter-memory/-/pouchdb-adapter-memory-7.3.1.tgz", - "integrity": "sha512-iHdWGJAHONqQv0we3Oi1MYen69ZS8McLW9wUyaAYcWTJnAIIAr2ZM0/TeTDVSHfMUwYqEYk7X8jRtJZEMwLnwg==", - "optional": true, - "dependencies": { - "memdown": "1.4.1", - "pouchdb-adapter-leveldb-core": "7.3.1", - "pouchdb-utils": "7.3.1" - } - }, - "node_modules/pouchdb-adapter-memory/node_modules/abstract-leveldown": { - "version": "2.7.2", - "resolved": "https://registry.npmjs.org/abstract-leveldown/-/abstract-leveldown-2.7.2.tgz", - "integrity": "sha512-+OVvxH2rHVEhWLdbudP6p0+dNMXu8JA1CbhP19T8paTYAcX7oJ4OVjT+ZUVpv7mITxXHqDMej+GdqXBmXkw09w==", - "optional": true, - "dependencies": { - "xtend": "~4.0.0" - } - }, - "node_modules/pouchdb-adapter-memory/node_modules/memdown": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/memdown/-/memdown-1.4.1.tgz", - "integrity": "sha512-iVrGHZB8i4OQfM155xx8akvG9FIj+ht14DX5CQkCTG4EHzZ3d3sgckIf/Lm9ivZalEsFuEVnWv2B2WZvbrro2w==", - "optional": true, - "dependencies": { - "abstract-leveldown": "~2.7.1", - "functional-red-black-tree": "^1.0.1", - "immediate": "^3.2.3", - "inherits": "~2.0.1", - "ltgt": "~2.2.0", - "safe-buffer": "~5.1.1" - } - }, - "node_modules/pouchdb-adapter-memory/node_modules/safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "optional": true - }, - "node_modules/pouchdb-adapter-utils": { - "version": "7.3.1", - "resolved": "https://registry.npmjs.org/pouchdb-adapter-utils/-/pouchdb-adapter-utils-7.3.1.tgz", - "integrity": "sha512-uKLG6dClwTs/sLIJ4WkLAi9wlnDBpOnfyhpeAgOjlOGN/XLz5nKHrA4UJRnURDyc+uv79S9r/Unc4hVpmbSPUw==", - "optional": true, - "dependencies": { - "pouchdb-binary-utils": "7.3.1", - "pouchdb-collections": "7.3.1", - "pouchdb-errors": "7.3.1", - "pouchdb-md5": "7.3.1", - "pouchdb-merge": "7.3.1", - "pouchdb-utils": "7.3.1" - } - }, - "node_modules/pouchdb-binary-utils": { - "version": "7.3.1", - "resolved": "https://registry.npmjs.org/pouchdb-binary-utils/-/pouchdb-binary-utils-7.3.1.tgz", - "integrity": "sha512-crZJNfAEOnUoRk977Qtmk4cxEv6sNKllQ6vDDKgQrQLFjMUXma35EHzNyIJr1s76J77Q4sqKQAmxz9Y40yHGtw==", - "optional": true, - "dependencies": { - "buffer-from": "1.1.2" - } - }, - "node_modules/pouchdb-collate": { - "version": "7.3.1", - "resolved": "https://registry.npmjs.org/pouchdb-collate/-/pouchdb-collate-7.3.1.tgz", - "integrity": "sha512-o4gyGqDMLMSNzf6EDTr3eHaH/JRMoqRhdc+eV+oA8u00nTBtr9wD+jypVe2LbgKLJ4NWqx2qVkXiTiQdUFtsLQ==", - "optional": true - }, - "node_modules/pouchdb-collections": { - "version": "7.3.1", - "resolved": "https://registry.npmjs.org/pouchdb-collections/-/pouchdb-collections-7.3.1.tgz", - "integrity": "sha512-yUyDqR+OJmtwgExOSJegpBJXDLAEC84TWnbAYycyh+DZoA51Yw0+XVQF5Vh8Ii90/Ut2xo88fmrmp0t6kqom8w==", - "optional": true - }, - "node_modules/pouchdb-debug": { - "version": "7.2.1", - "resolved": "https://registry.npmjs.org/pouchdb-debug/-/pouchdb-debug-7.2.1.tgz", - "integrity": "sha512-eP3ht/AKavLF2RjTzBM6S9gaI2/apcW6xvaKRQhEdOfiANqerFuksFqHCal3aikVQuDO+cB/cw+a4RyJn/glBw==", - "optional": true, - "dependencies": { - "debug": "3.1.0" - } - }, - "node_modules/pouchdb-debug/node_modules/debug": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", - "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", - "optional": true, - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/pouchdb-debug/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "optional": true - }, - "node_modules/pouchdb-errors": { - "version": "7.3.1", - "resolved": "https://registry.npmjs.org/pouchdb-errors/-/pouchdb-errors-7.3.1.tgz", - "integrity": "sha512-Zktz4gnXEUcZcty8FmyvtYUYsHskoST05m6H5/E2gg/0mCfEXq/XeyyLkZHaZmqD0ZPS9yNmASB1VaFWEKEaDw==", - "optional": true, - "dependencies": { - "inherits": "2.0.4" - } - }, - "node_modules/pouchdb-fetch": { - "version": "7.3.1", - "resolved": "https://registry.npmjs.org/pouchdb-fetch/-/pouchdb-fetch-7.3.1.tgz", - "integrity": "sha512-205xAtvdHRPQ4fp1h9+RmT9oQabo9gafuPmWsS9aEl3ER54WbY8Vaj1JHZGbU4KtMTYvW7H5088zLS7Nrusuag==", - "optional": true, - "dependencies": { - "abort-controller": "3.0.0", - "fetch-cookie": "0.11.0", - "node-fetch": "2.6.7" - } - }, - "node_modules/pouchdb-fetch/node_modules/node-fetch": { - "version": "2.6.7", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz", - "integrity": "sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==", - "optional": true, - "dependencies": { - "whatwg-url": "^5.0.0" - }, - "engines": { - "node": "4.x || >=6.0.0" - }, - "peerDependencies": { - "encoding": "^0.1.0" - }, - "peerDependenciesMeta": { - "encoding": { - "optional": true - } - } - }, - "node_modules/pouchdb-find": { - "version": "7.3.1", - "resolved": "https://registry.npmjs.org/pouchdb-find/-/pouchdb-find-7.3.1.tgz", - "integrity": "sha512-AeqUfAVY1c7IFaY36BRT0vIz9r4VTKq/YOWTmiqndOZUQ/pDGxyO2fNFal6NN3PyYww0JijlD377cPvhnrhJVA==", - "optional": true, - "dependencies": { - "pouchdb-abstract-mapreduce": "7.3.1", - "pouchdb-collate": "7.3.1", - "pouchdb-errors": "7.3.1", - "pouchdb-fetch": "7.3.1", - "pouchdb-md5": "7.3.1", - "pouchdb-selector-core": "7.3.1", - "pouchdb-utils": "7.3.1" - } - }, - "node_modules/pouchdb-json": { - "version": "7.3.1", - "resolved": "https://registry.npmjs.org/pouchdb-json/-/pouchdb-json-7.3.1.tgz", - "integrity": "sha512-AyOKsmc85/GtHjMZyEacqzja8qLVfycS1hh1oskR+Bm5PIITX52Fb8zyi0hEetV6VC0yuGbn0RqiLjJxQePeqQ==", - "optional": true, - "dependencies": { - "vuvuzela": "1.0.3" - } - }, - "node_modules/pouchdb-mapreduce-utils": { - "version": "7.3.1", - "resolved": "https://registry.npmjs.org/pouchdb-mapreduce-utils/-/pouchdb-mapreduce-utils-7.3.1.tgz", - "integrity": "sha512-oUMcq82+4pTGQ6dtrhgORHOVHZSr6w/5tFIUGlv7RABIDvJarL4snMawADjlpiEwPdiQ/ESG8Fqt8cxqvqsIgg==", - "optional": true, - "dependencies": { - "argsarray": "0.0.1", - "inherits": "2.0.4", - "pouchdb-collections": "7.3.1", - "pouchdb-utils": "7.3.1" - } - }, - "node_modules/pouchdb-md5": { - "version": "7.3.1", - "resolved": "https://registry.npmjs.org/pouchdb-md5/-/pouchdb-md5-7.3.1.tgz", - "integrity": "sha512-aDV8ui/mprnL3xmt0gT/81DFtTtJiKyn+OxIAbwKPMfz/rDFdPYvF0BmDC9QxMMzGfkV+JJUjU6at0PPs2mRLg==", - "optional": true, - "dependencies": { - "pouchdb-binary-utils": "7.3.1", - "spark-md5": "3.0.2" - } - }, - "node_modules/pouchdb-merge": { - "version": "7.3.1", - "resolved": "https://registry.npmjs.org/pouchdb-merge/-/pouchdb-merge-7.3.1.tgz", - "integrity": "sha512-FeK3r35mKimokf2PQ2tUI523QWyZ4lYZ0Yd75FfSch/SPY6wIokz5XBZZ6PHdu5aOJsEKzoLUxr8CpSg9DhcAw==", - "optional": true - }, - "node_modules/pouchdb-selector-core": { - "version": "7.3.1", - "resolved": "https://registry.npmjs.org/pouchdb-selector-core/-/pouchdb-selector-core-7.3.1.tgz", - "integrity": "sha512-HBX+nNGXcaL9z0uNpwSMRq2GNZd3EZXW+fe9rJHS0hvJohjZL7aRJLoaXfEdHPRTNW+CpjM3Rny60eGekQdI/w==", - "optional": true, - "dependencies": { - "pouchdb-collate": "7.3.1", - "pouchdb-utils": "7.3.1" - } - }, - "node_modules/pouchdb-utils": { - "version": "7.3.1", - "resolved": "https://registry.npmjs.org/pouchdb-utils/-/pouchdb-utils-7.3.1.tgz", - "integrity": "sha512-R3hHBo1zTdTu/NFs3iqkcaQAPwhIH0gMIdfVKd5lbDYlmP26rCG5pdS+v7NuoSSFLJ4xxnaGV+Gjf4duYsJ8wQ==", - "optional": true, - "dependencies": { - "argsarray": "0.0.1", - "clone-buffer": "1.0.0", - "immediate": "3.3.0", - "inherits": "2.0.4", - "pouchdb-collections": "7.3.1", - "pouchdb-errors": "7.3.1", - "pouchdb-md5": "7.3.1", - "uuid": "8.3.2" - } - }, - "node_modules/pouchdb/node_modules/isarray": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", - "integrity": "sha512-D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ==", - "optional": true - }, - "node_modules/pouchdb/node_modules/level": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/level/-/level-6.0.1.tgz", - "integrity": "sha512-psRSqJZCsC/irNhfHzrVZbmPYXDcEYhA5TVNwr+V92jF44rbf86hqGp8fiT702FyiArScYIlPSBTDUASCVNSpw==", - "optional": true, - "dependencies": { - "level-js": "^5.0.0", - "level-packager": "^5.1.0", - "leveldown": "^5.4.0" - }, - "engines": { - "node": ">=8.6.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/level" - } - }, - "node_modules/pouchdb/node_modules/node-fetch": { - "version": "2.6.7", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz", - "integrity": "sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==", - "optional": true, - "dependencies": { - "whatwg-url": "^5.0.0" - }, - "engines": { - "node": "4.x || >=6.0.0" - }, - "peerDependencies": { - "encoding": "^0.1.0" - }, - "peerDependenciesMeta": { - "encoding": { - "optional": true - } - } - }, - "node_modules/pouchdb/node_modules/readable-stream": { - "version": "1.1.14", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz", - "integrity": "sha512-+MeVjFf4L44XUkhM1eYbD8fyEsxcV81pqMSR5gblfcLCHfZvbrqy4/qYHE+/R5HoBUT11WV5O08Cr1n3YXkWVQ==", - "optional": true, - "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.1", - "isarray": "0.0.1", - "string_decoder": "~0.10.x" - } - }, - "node_modules/pouchdb/node_modules/string_decoder": { - "version": "0.10.31", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", - "integrity": "sha512-ev2QzSzWPYmy9GuqfIVildA4OdcGLeFZQrq5ys6RtiuF+RQQiZWr8TZNyAcuVXyQRYfEO+MsoB/1BuQVhOJuoQ==", - "optional": true - }, - "node_modules/prb-math": { - "version": "2.4.3", - "resolved": "https://registry.npmjs.org/prb-math/-/prb-math-2.4.3.tgz", - "integrity": "sha512-t5jncEscKmWg7COkMkmbXXxSeDI6Xl21rxx5e+oxUCqskNvsu6Q9RqdVfGY6y+sMwyMQE8DJ/OOyQ9ExH1yfbw==", - "dependencies": { - "@ethersproject/bignumber": "^5.5.0", - "decimal.js": "^10.3.1", - "evm-bn": "^1.1.1", - "mathjs": "^10.1.1" - }, - "peerDependencies": { - "@ethersproject/bignumber": "5.x", - "evm-bn": "1.x", - "mathjs": "10.x" - } - }, - "node_modules/prb-math/node_modules/mathjs": { - "version": "10.6.4", - "resolved": "https://registry.npmjs.org/mathjs/-/mathjs-10.6.4.tgz", - "integrity": "sha512-omQyvRE1jIy+3k2qsqkWASOcd45aZguXZDckr3HtnTYyXk5+2xpVfC3kATgbO2Srjxlqww3TVdhD0oUdZ/hiFA==", - "dependencies": { - "@babel/runtime": "^7.18.6", - "complex.js": "^2.1.1", - "decimal.js": "^10.3.1", - "escape-latex": "^1.2.0", - "fraction.js": "^4.2.0", - "javascript-natural-sort": "^0.7.1", - "seedrandom": "^3.0.5", - "tiny-emitter": "^2.1.0", - "typed-function": "^2.1.0" - }, - "bin": { - "mathjs": "bin/cli.js" - }, - "engines": { - "node": ">= 14" - } - }, - "node_modules/prb-math/node_modules/typed-function": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/typed-function/-/typed-function-2.1.0.tgz", - "integrity": "sha512-bctQIOqx2iVbWGDGPWwIm18QScpu2XRmkC19D8rQGFsjKSgteq/o1hTZvIG/wuDq8fanpBDrLkLq+aEN/6y5XQ==", - "engines": { - "node": ">= 10" - } - }, - "node_modules/precond": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/precond/-/precond-0.2.3.tgz", - "integrity": "sha512-QCYG84SgGyGzqJ/vlMsxeXd/pgL/I94ixdNFyh1PusWmTCyVfPJjZ1K1jvHtsbfnXQs2TSkEP2fR7QiMZAnKFQ==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/prepend-http": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-2.0.0.tgz", - "integrity": "sha512-ravE6m9Atw9Z/jjttRUZ+clIXogdghyZAuWJ3qEzjT+jI/dL1ifAqhZeC5VHzQp1MSt1+jxKkFNemj/iO7tVUA==", - "engines": { - "node": ">=4" - } - }, - "node_modules/prettier": { - "version": "2.8.7", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.8.7.tgz", - "integrity": "sha512-yPngTo3aXUUmyuTjeTUT75txrf+aMh9FiD7q9ZE/i6r0bPb22g4FsE6Y338PQX1bmfy08i9QQCB7/rcUAVntfw==", - "dev": true, - "bin": { - "prettier": "bin-prettier.js" - }, - "engines": { - "node": ">=10.13.0" - }, - "funding": { - "url": "https://github.com/prettier/prettier?sponsor=1" - } - }, - "node_modules/process": { - "version": "0.11.10", - "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", - "integrity": "sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==", - "engines": { - "node": ">= 0.6.0" - } - }, - "node_modules/process-nextick-args": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", - "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==" - }, - "node_modules/progress": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", - "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==", - "optional": true, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/promise": { - "version": "8.2.0", - "resolved": "https://registry.npmjs.org/promise/-/promise-8.2.0.tgz", - "integrity": "sha512-+CMAlLHqwRYwBMXKCP+o8ns7DN+xHDUiI+0nArsiJ9y+kJVPLFxEaSw6Ha9s9H0tftxg2Yzl25wqj9G7m5wLZg==", - "dependencies": { - "asap": "~2.0.6" - } - }, - "node_modules/promise-to-callback": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/promise-to-callback/-/promise-to-callback-1.0.0.tgz", - "integrity": "sha512-uhMIZmKM5ZteDMfLgJnoSq9GCwsNKrYau73Awf1jIy6/eUcuuZ3P+CD9zUv0kJsIUbU+x6uLNIhXhLHDs1pNPA==", - "dependencies": { - "is-fn": "^1.0.0", - "set-immediate-shim": "^1.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/proper-lockfile": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/proper-lockfile/-/proper-lockfile-4.1.2.tgz", - "integrity": "sha512-TjNPblN4BwAWMXU8s9AEz4JmQxnD1NNL7bNOY/AKUzyamc379FWASUhc/K1pL2noVb+XmZKLL68cjzLsiOAMaA==", - "dev": true, - "dependencies": { - "graceful-fs": "^4.2.4", - "retry": "^0.12.0", - "signal-exit": "^3.0.2" - } - }, - "node_modules/proper-lockfile/node_modules/retry": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/retry/-/retry-0.12.0.tgz", - "integrity": "sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow==", - "dev": true, - "engines": { - "node": ">= 4" - } - }, - "node_modules/proxy-addr": { - "version": "2.0.7", - "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", - "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", - "dependencies": { - "forwarded": "0.2.0", - "ipaddr.js": "1.9.1" - }, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/proxy-from-env": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", - "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==", - "optional": true - }, - "node_modules/prr": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/prr/-/prr-1.0.1.tgz", - "integrity": "sha512-yPw4Sng1gWghHQWj0B3ZggWUm4qVbPwPFcRG8KyxiU7J2OHFSoEHKS+EZ3fv5l1t9CyCiop6l/ZYeWbrgoQejw==" - }, - "node_modules/psl": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/psl/-/psl-1.9.0.tgz", - "integrity": "sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag==" - }, - "node_modules/pstree.remy": { - "version": "1.1.8", - "resolved": "https://registry.npmjs.org/pstree.remy/-/pstree.remy-1.1.8.tgz", - "integrity": "sha512-77DZwxQmxKnu3aR542U+X8FypNzbfJ+C5XQDk3uWjWxn6151aIMGthWYRXTqT1E5oJvg+ljaa2OJi+VfvCOQ8w==" - }, - "node_modules/public-encrypt": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/public-encrypt/-/public-encrypt-4.0.3.tgz", - "integrity": "sha512-zVpa8oKZSz5bTMTFClc1fQOnyyEzpl5ozpi1B5YcvBrdohMjH2rfsBtyXcuNuwjsDIXmBYlF2N5FlJYhR29t8Q==", - "dependencies": { - "bn.js": "^4.1.0", - "browserify-rsa": "^4.0.0", - "create-hash": "^1.1.0", - "parse-asn1": "^5.0.0", - "randombytes": "^2.0.1", - "safe-buffer": "^5.1.2" - } - }, - "node_modules/public-encrypt/node_modules/bn.js": { - "version": "4.12.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==" - }, - "node_modules/pump": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", - "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", - "dependencies": { - "end-of-stream": "^1.1.0", - "once": "^1.3.1" - } - }, - "node_modules/punycode": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.0.tgz", - "integrity": "sha512-Yxz2kRwT90aPiWEMHVYnEf4+rhwF1tBmmZ4KepCP+Wkium9JxtWnUm1nqGwpiAHr/tnTSeHqr3wb++jgSkXjhA==", - "engines": { - "node": ">=6" - } - }, - "node_modules/puppeteer": { - "version": "13.7.0", - "resolved": "https://registry.npmjs.org/puppeteer/-/puppeteer-13.7.0.tgz", - "integrity": "sha512-U1uufzBjz3+PkpCxFrWzh4OrMIdIb2ztzCu0YEPfRHjHswcSwHZswnK+WdsOQJsRV8WeTg3jLhJR4D867+fjsA==", - "deprecated": "< 19.4.0 is no longer supported", - "hasInstallScript": true, - "optional": true, - "dependencies": { - "cross-fetch": "3.1.5", - "debug": "4.3.4", - "devtools-protocol": "0.0.981744", - "extract-zip": "2.0.1", - "https-proxy-agent": "5.0.1", - "pkg-dir": "4.2.0", - "progress": "2.0.3", - "proxy-from-env": "1.1.0", - "rimraf": "3.0.2", - "tar-fs": "2.1.1", - "unbzip2-stream": "1.4.3", - "ws": "8.5.0" - }, - "engines": { - "node": ">=10.18.1" - } - }, - "node_modules/puppeteer/node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "optional": true, - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/puppeteer/node_modules/cross-fetch": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-3.1.5.tgz", - "integrity": "sha512-lvb1SBsI0Z7GDwmuid+mU3kWVBwTVUbe7S0H52yaaAdQOXq2YktTCZdlAcNKFzE6QtRz0snpw9bNiPeOIkkQvw==", - "optional": true, - "dependencies": { - "node-fetch": "2.6.7" - } - }, - "node_modules/puppeteer/node_modules/glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "optional": true, - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "engines": { - "node": "*" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/puppeteer/node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "optional": true, - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, - "node_modules/puppeteer/node_modules/node-fetch": { - "version": "2.6.7", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz", - "integrity": "sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==", - "optional": true, - "dependencies": { - "whatwg-url": "^5.0.0" - }, - "engines": { - "node": "4.x || >=6.0.0" - }, - "peerDependencies": { - "encoding": "^0.1.0" - }, - "peerDependenciesMeta": { - "encoding": { - "optional": true - } - } - }, - "node_modules/puppeteer/node_modules/rimraf": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", - "optional": true, - "dependencies": { - "glob": "^7.1.3" - }, - "bin": { - "rimraf": "bin.js" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/puppeteer/node_modules/ws": { - "version": "8.5.0", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.5.0.tgz", - "integrity": "sha512-BWX0SWVgLPzYwF8lTzEy1egjhS4S4OEAHfsO8o65WOVsrnSRGaSiUaa9e0ggGlkMTtBlmOpEXiie9RUcBO86qg==", - "optional": true, - "engines": { - "node": ">=10.0.0" - }, - "peerDependencies": { - "bufferutil": "^4.0.1", - "utf-8-validate": "^5.0.2" - }, - "peerDependenciesMeta": { - "bufferutil": { - "optional": true - }, - "utf-8-validate": { - "optional": true - } - } - }, - "node_modules/pure-rand": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/pure-rand/-/pure-rand-5.0.3.tgz", - "integrity": "sha512-9N8x1h8dptBQpHyC7aZMS+iNOAm97WMGY0AFrguU1cpfW3I5jINkWe5BIY5md0ofy+1TCIELsVcm/GJXZSaPbw==", - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/fast-check" - } - }, - "node_modules/qs": { - "version": "6.11.0", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz", - "integrity": "sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==", - "dependencies": { - "side-channel": "^1.0.4" - }, - "engines": { - "node": ">=0.6" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/query-string": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/query-string/-/query-string-5.1.1.tgz", - "integrity": "sha512-gjWOsm2SoGlgLEdAGt7a6slVOk9mGiXmPFMqrEhLQ68rhQuBnpfs3+EmlvqKyxnCo9/PPlF+9MtY02S1aFg+Jw==", - "dependencies": { - "decode-uri-component": "^0.2.0", - "object-assign": "^4.1.0", - "strict-uri-encode": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/querystring": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/querystring/-/querystring-0.2.0.tgz", - "integrity": "sha512-X/xY82scca2tau62i9mDyU9K+I+djTMUsvwf7xnUX5GLvVzgJybOJf4Y6o9Zx3oJK/LSXg5tTZBjwzqVPaPO2g==", - "deprecated": "The querystring API is considered Legacy. new code should use the URLSearchParams API instead.", - "dev": true, - "engines": { - "node": ">=0.4.x" - } - }, - "node_modules/queue-microtask": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", - "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] - }, - "node_modules/quick-lru": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-5.1.1.tgz", - "integrity": "sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/randombytes": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", - "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", - "dependencies": { - "safe-buffer": "^5.1.0" - } - }, - "node_modules/randomfill": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/randomfill/-/randomfill-1.0.4.tgz", - "integrity": "sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw==", - "dependencies": { - "randombytes": "^2.0.5", - "safe-buffer": "^5.1.0" - } - }, - "node_modules/randomhex": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/randomhex/-/randomhex-0.1.5.tgz", - "integrity": "sha512-2+Kkw7UiZGQWOz7rw8hPW44utkBYMEciQfziaZ71RcyDu+refQWzS/0DgfUSa5MwclrOD3sf3vI5vmrTYjwpjQ==" - }, - "node_modules/range-parser": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", - "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/raw-body": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.1.tgz", - "integrity": "sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig==", - "dependencies": { - "bytes": "3.1.2", - "http-errors": "2.0.0", - "iconv-lite": "0.4.24", - "unpipe": "1.0.0" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/read-pkg": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-1.1.0.tgz", - "integrity": "sha512-7BGwRHqt4s/uVbuyoeejRn4YmFnYZiFl4AuaeXHlgZf3sONF0SOGlxs2Pw8g6hCKupo08RafIO5YXFNOKTfwsQ==", - "dependencies": { - "load-json-file": "^1.0.0", - "normalize-package-data": "^2.3.2", - "path-type": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/read-pkg-up": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-1.0.1.tgz", - "integrity": "sha512-WD9MTlNtI55IwYUS27iHh9tK3YoIVhxis8yKhLpTqWtml739uXc9NWTpxoHkfZf3+DkCCsXox94/VWZniuZm6A==", - "dependencies": { - "find-up": "^1.0.0", - "read-pkg": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/read-pkg-up/node_modules/find-up": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz", - "integrity": "sha512-jvElSjyuo4EMQGoTwo1uJU5pQMwTW5lS1x05zzfJuTIyLR3zwO27LYrxNg+dlvKpGOuGy/MzBdXh80g0ve5+HA==", - "dependencies": { - "path-exists": "^2.0.0", - "pinkie-promise": "^2.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/read-pkg-up/node_modules/path-exists": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz", - "integrity": "sha512-yTltuKuhtNeFJKa1PiRzfLAU5182q1y4Eb4XCJ3PBqyzEDkAZRzBrKKBct682ls9reBVHf9udYLN5Nd+K1B9BQ==", - "dependencies": { - "pinkie-promise": "^2.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/readable-stream": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", - "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", - "dependencies": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/readdirp": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", - "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", - "dependencies": { - "picomatch": "^2.2.1" - }, - "engines": { - "node": ">=8.10.0" - } - }, - "node_modules/reduce-flatten": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/reduce-flatten/-/reduce-flatten-2.0.0.tgz", - "integrity": "sha512-EJ4UNY/U1t2P/2k6oqotuX2Cc3T6nxJwsM0N0asT7dhrtH1ltUxDn4NalSYmPE2rCkVpcf/X6R0wDwcFpzhd4w==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/redux": { - "version": "3.7.2", - "resolved": "https://registry.npmjs.org/redux/-/redux-3.7.2.tgz", - "integrity": "sha512-pNqnf9q1hI5HHZRBkj3bAngGZW/JMCmexDlOxw4XagXY2o1327nHH54LoTjiPJ0gizoqPDRqWyX/00g0hD6w+A==", - "dependencies": { - "lodash": "^4.2.1", - "lodash-es": "^4.2.1", - "loose-envify": "^1.1.0", - "symbol-observable": "^1.0.3" - } - }, - "node_modules/redux-saga": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/redux-saga/-/redux-saga-1.0.0.tgz", - "integrity": "sha512-GvJWs/SzMvEQgeaw6sRMXnS2FghlvEGsHiEtTLpJqc/FHF3I5EE/B+Hq5lyHZ8LSoT2r/X/46uWvkdCnK9WgHA==", - "dependencies": { - "@redux-saga/core": "^1.0.0" - } - }, - "node_modules/regenerator-runtime": { - "version": "0.14.0", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.14.0.tgz", - "integrity": "sha512-srw17NI0TUWHuGa5CFGGmhfNIeja30WMBfbslPNhf6JrqQlLN5gcrvig1oqPxiVaXb0oW0XRKtH6Nngs5lKCIA==" - }, - "node_modules/regexp.prototype.flags": { - "version": "1.4.3", - "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.4.3.tgz", - "integrity": "sha512-fjggEOO3slI6Wvgjwflkc4NFRCTZAu5CnNfBd5qOMYhWdn67nJBBu34/TkD++eeFmd8C9r9jfXJ27+nSiRkSUA==", - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "functions-have-names": "^1.2.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/req-cwd": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/req-cwd/-/req-cwd-2.0.0.tgz", - "integrity": "sha512-ueoIoLo1OfB6b05COxAA9UpeoscNpYyM+BqYlA7H6LVF4hKGPXQQSSaD2YmvDVJMkk4UDpAHIeU1zG53IqjvlQ==", - "dependencies": { - "req-from": "^2.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/req-from": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/req-from/-/req-from-2.0.0.tgz", - "integrity": "sha512-LzTfEVDVQHBRfjOUMgNBA+V6DWsSnoeKzf42J7l0xa/B4jyPOuuF5MlNSmomLNGemWTnV2TIdjSSLnEn95fOQA==", - "dependencies": { - "resolve-from": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/request": { - "version": "2.88.2", - "resolved": "https://registry.npmjs.org/request/-/request-2.88.2.tgz", - "integrity": "sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw==", - "deprecated": "request has been deprecated, see https://github.com/request/request/issues/3142", - "dependencies": { - "aws-sign2": "~0.7.0", - "aws4": "^1.8.0", - "caseless": "~0.12.0", - "combined-stream": "~1.0.6", - "extend": "~3.0.2", - "forever-agent": "~0.6.1", - "form-data": "~2.3.2", - "har-validator": "~5.1.3", - "http-signature": "~1.2.0", - "is-typedarray": "~1.0.0", - "isstream": "~0.1.2", - "json-stringify-safe": "~5.0.1", - "mime-types": "~2.1.19", - "oauth-sign": "~0.9.0", - "performance-now": "^2.1.0", - "qs": "~6.5.2", - "safe-buffer": "^5.1.2", - "tough-cookie": "~2.5.0", - "tunnel-agent": "^0.6.0", - "uuid": "^3.3.2" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/request-promise-core": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/request-promise-core/-/request-promise-core-1.1.4.tgz", - "integrity": "sha512-TTbAfBBRdWD7aNNOoVOBH4pN/KigV6LyapYNNlAPA8JwbovRti1E88m3sYAwsLi5ryhPKsE9APwnjFTgdUjTpw==", - "dependencies": { - "lodash": "^4.17.19" - }, - "engines": { - "node": ">=0.10.0" - }, - "peerDependencies": { - "request": "^2.34" - } - }, - "node_modules/request-promise-native": { - "version": "1.0.9", - "resolved": "https://registry.npmjs.org/request-promise-native/-/request-promise-native-1.0.9.tgz", - "integrity": "sha512-wcW+sIUiWnKgNY0dqCpOZkUbF/I+YPi+f09JZIDa39Ec+q82CpSYniDp+ISgTTbKmnpJWASeJBPZmoxH84wt3g==", - "deprecated": "request-promise-native has been deprecated because it extends the now deprecated request package, see https://github.com/request/request/issues/3142", - "dependencies": { - "request-promise-core": "1.1.4", - "stealthy-require": "^1.1.1", - "tough-cookie": "^2.3.3" - }, - "engines": { - "node": ">=0.12.0" - }, - "peerDependencies": { - "request": "^2.34" - } - }, - "node_modules/request/node_modules/form-data": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz", - "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==", - "dependencies": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.6", - "mime-types": "^2.1.12" - }, - "engines": { - "node": ">= 0.12" - } - }, - "node_modules/request/node_modules/qs": { - "version": "6.5.3", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.3.tgz", - "integrity": "sha512-qxXIEh4pCGfHICj1mAJQ2/2XVZkjCDTcEgfoSQxc/fYivUZxTkk7L3bDBJSoNrEzXI17oUO5Dp07ktqE5KzczA==", - "engines": { - "node": ">=0.6" - } - }, - "node_modules/request/node_modules/uuid": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", - "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==", - "deprecated": "Please upgrade to version 7 or higher. Older versions may use Math.random() in certain circumstances, which is known to be problematic. See https://v8.dev/blog/math-random for details.", - "bin": { - "uuid": "bin/uuid" - } - }, - "node_modules/require-directory": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", - "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/require-from-string": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", - "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/require-main-filename": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-1.0.1.tgz", - "integrity": "sha512-IqSUtOVP4ksd1C/ej5zeEh/BIP2ajqpn8c5x+q99gvcIG/Qf0cud5raVnE/Dwd0ua9TXYDoDc0RE5hBSdz22Ug==" - }, - "node_modules/reselect": { - "version": "4.1.8", - "resolved": "https://registry.npmjs.org/reselect/-/reselect-4.1.8.tgz", - "integrity": "sha512-ab9EmR80F/zQTMNeneUr4cv+jSwPJgIlvEmVwLerwrWVbpLlBuls9XHzIeTFy4cegU2NHBp3va0LKOzU5qFEYQ==" - }, - "node_modules/reselect-tree": { - "version": "1.3.7", - "resolved": "https://registry.npmjs.org/reselect-tree/-/reselect-tree-1.3.7.tgz", - "integrity": "sha512-kZN+C1cVJ6fFN2smSb0l4UvYZlRzttgnu183svH4NrU22cBY++ikgr2QT75Uuk4MYpv5gXSVijw4c5U6cx6GKg==", - "dependencies": { - "debug": "^3.1.0", - "json-pointer": "^0.6.1", - "reselect": "^4.0.0" - } - }, - "node_modules/reselect-tree/node_modules/debug": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", - "dependencies": { - "ms": "^2.1.1" - } - }, - "node_modules/resolve": { - "version": "1.17.0", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.17.0.tgz", - "integrity": "sha512-ic+7JYiV8Vi2yzQGFWOkiZD5Z9z7O2Zhm9XMaTxdJExKasieFCr+yXZ/WmXsckHiKl12ar0y6XiXDx3m4RHn1w==", - "dependencies": { - "path-parse": "^1.0.6" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/resolve-alpn": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/resolve-alpn/-/resolve-alpn-1.2.1.tgz", - "integrity": "sha512-0a1F4l73/ZFZOakJnQ3FvkJ2+gSTQWz/r2KE5OdDY0TxPm5h4GkqkWWfM47T7HsbnOtcJVEF4epCVy6u7Q3K+g==" - }, - "node_modules/resolve-from": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-3.0.0.tgz", - "integrity": "sha512-GnlH6vxLymXJNMBo7XP1fJIzBFbdYt49CuTwmB/6N53t+kMPRMFKz783LlQ4tv28XoQfMWinAJX6WCGf2IlaIw==", - "engines": { - "node": ">=4" - } - }, - "node_modules/responselike": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/responselike/-/responselike-2.0.1.tgz", - "integrity": "sha512-4gl03wn3hj1HP3yzgdI7d3lCkF95F21Pz4BPGvKHinyQzALR5CapwC8yIi0Rh58DEMQ/SguC03wFj2k0M/mHhw==", - "dependencies": { - "lowercase-keys": "^2.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/responselike/node_modules/lowercase-keys": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-2.0.0.tgz", - "integrity": "sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==", - "engines": { - "node": ">=8" - } - }, - "node_modules/restore-cursor": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz", - "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==", - "optional": true, - "dependencies": { - "onetime": "^5.1.0", - "signal-exit": "^3.0.2" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/retry": { - "version": "0.13.1", - "resolved": "https://registry.npmjs.org/retry/-/retry-0.13.1.tgz", - "integrity": "sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg==", - "devOptional": true, - "engines": { - "node": ">= 4" - } - }, - "node_modules/rimraf": { - "version": "2.4.5", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.4.5.tgz", - "integrity": "sha512-J5xnxTyqaiw06JjMftq7L9ouA448dw/E7dKghkP9WpKNuwmARNNg+Gk8/u5ryb9N/Yo2+z3MCwuqFK/+qPOPfQ==", - "dependencies": { - "glob": "^6.0.1" - }, - "bin": { - "rimraf": "bin.js" - } - }, - "node_modules/rimraf/node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/rimraf/node_modules/glob": { - "version": "6.0.4", - "resolved": "https://registry.npmjs.org/glob/-/glob-6.0.4.tgz", - "integrity": "sha512-MKZeRNyYZAVVVG1oZeLaWie1uweH40m9AZwIwxyPbTSX4hHrVYSzLg0Ro5Z5R7XKkIX+Cc6oD1rqeDJnwsB8/A==", - "dependencies": { - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "2 || 3", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "engines": { - "node": "*" - } - }, - "node_modules/rimraf/node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, - "node_modules/ripemd160": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.2.tgz", - "integrity": "sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==", - "dependencies": { - "hash-base": "^3.0.0", - "inherits": "^2.0.1" - } - }, - "node_modules/ripemd160-min": { - "version": "0.0.6", - "resolved": "https://registry.npmjs.org/ripemd160-min/-/ripemd160-min-0.0.6.tgz", - "integrity": "sha512-+GcJgQivhs6S9qvLogusiTcS9kQUfgR75whKuy5jIhuiOfQuJ8fjqxV6EGD5duH1Y/FawFUMtMhyeq3Fbnib8A==", - "engines": { - "node": ">=8" - } - }, - "node_modules/rlp": { - "version": "2.2.7", - "resolved": "https://registry.npmjs.org/rlp/-/rlp-2.2.7.tgz", - "integrity": "sha512-d5gdPmgQ0Z+AklL2NVXr/IoSjNZFfTVvQWzL/AM2AOcSzYP2xjlb0AC8YyCLc41MSNf6P6QVtjgPdmVtzb+4lQ==", - "dependencies": { - "bn.js": "^5.2.0" - }, - "bin": { - "rlp": "bin/rlp" - } - }, - "node_modules/rpc-websockets": { - "version": "7.5.1", - "resolved": "https://registry.npmjs.org/rpc-websockets/-/rpc-websockets-7.5.1.tgz", - "integrity": "sha512-kGFkeTsmd37pHPMaHIgN1LVKXMi0JD782v4Ds9ZKtLlwdTKjn+CxM9A9/gLT2LaOuEcEFGL98h1QWQtlOIdW0w==", - "dependencies": { - "@babel/runtime": "^7.17.2", - "eventemitter3": "^4.0.7", - "uuid": "^8.3.2", - "ws": "^8.5.0" - }, - "funding": { - "type": "paypal", - "url": "https://paypal.me/kozjak" - }, - "optionalDependencies": { - "bufferutil": "^4.0.1", - "utf-8-validate": "^5.0.2" - } - }, - "node_modules/run-parallel-limit": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/run-parallel-limit/-/run-parallel-limit-1.1.0.tgz", - "integrity": "sha512-jJA7irRNM91jaKc3Hcl1npHsFLOXOoTkPCUL1JEa1R82O2miplXXRaGdjW/KM/98YQWDhJLiSs793CnXfblJUw==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "dependencies": { - "queue-microtask": "^1.2.2" - } - }, - "node_modules/rustbn.js": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/rustbn.js/-/rustbn.js-0.2.0.tgz", - "integrity": "sha512-4VlvkRUuCJvr2J6Y0ImW7NvTCriMi7ErOAqWk1y69vAdoNIzCF3yPmgeNzx+RQTLEDFq5sHfscn1MwHxP9hNfA==" - }, - "node_modules/rxjs": { - "version": "6.6.7", - "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.7.tgz", - "integrity": "sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ==", - "dependencies": { - "tslib": "^1.9.0" - }, - "engines": { - "npm": ">=2.0.0" - } - }, - "node_modules/rxjs/node_modules/tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" - }, - "node_modules/safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] - }, - "node_modules/safe-event-emitter": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/safe-event-emitter/-/safe-event-emitter-1.0.1.tgz", - "integrity": "sha512-e1wFe99A91XYYxoQbcq2ZJUWurxEyP8vfz7A7vuUe1s95q8r5ebraVaA1BukYJcpM6V16ugWoD9vngi8Ccu5fg==", - "deprecated": "Renamed to @metamask/safe-event-emitter", - "dependencies": { - "events": "^3.0.0" - } - }, - "node_modules/safe-json-stringify": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/safe-json-stringify/-/safe-json-stringify-1.2.0.tgz", - "integrity": "sha512-gH8eh2nZudPQO6TytOvbxnuhYBOvDBBLW52tz5q6X58lJcd/tkmqFR+5Z9adS8aJtURSXWThWy/xJtJwixErvg==", - "optional": true - }, - "node_modules/safe-regex-test": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.0.0.tgz", - "integrity": "sha512-JBUUzyOgEwXQY1NuPtvcj/qcBDbDmEvWufhlnXZIm75DEHp+afM1r1ujJpJsV/gSM4t59tpDyPi1sd6ZaPFfsA==", - "dependencies": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.1.3", - "is-regex": "^1.1.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/safer-buffer": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" - }, - "node_modules/scrypt-js": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/scrypt-js/-/scrypt-js-3.0.1.tgz", - "integrity": "sha512-cdwTTnqPu0Hyvf5in5asVdZocVDTNRmR7XEcJuIzMjJeSHybHl7vpB66AzwTaIg6CLSbtjcxc8fqcySfnTkccA==" - }, - "node_modules/scryptsy": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/scryptsy/-/scryptsy-2.1.0.tgz", - "integrity": "sha512-1CdSqHQowJBnMAFyPEBRfqag/YP9OF394FV+4YREIJX4ljD7OxvQRDayyoyyCk+senRjSkP6VnUNQmVQqB6g7w==" - }, - "node_modules/secp256k1": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/secp256k1/-/secp256k1-4.0.3.tgz", - "integrity": "sha512-NLZVf+ROMxwtEj3Xa562qgv2BK5e2WNmXPiOdVIPLgs6lyTzMvBq0aWTYMI5XCP9jZMVKOcqZLw/Wc4vDkuxhA==", - "hasInstallScript": true, - "dependencies": { - "elliptic": "^6.5.4", - "node-addon-api": "^2.0.0", - "node-gyp-build": "^4.2.0" - }, - "engines": { - "node": ">=10.0.0" - } - }, - "node_modules/seedrandom": { - "version": "3.0.5", - "resolved": "https://registry.npmjs.org/seedrandom/-/seedrandom-3.0.5.tgz", - "integrity": "sha512-8OwmbklUNzwezjGInmZ+2clQmExQPvomqjL7LFqOYqtmuxRgQYqOD3mHaU+MvZn5FLUeVxVfQjwLZW/n/JFuqg==" - }, - "node_modules/seek-bzip": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/seek-bzip/-/seek-bzip-1.0.6.tgz", - "integrity": "sha512-e1QtP3YL5tWww8uKaOCQ18UxIT2laNBXHjV/S2WYCiK4udiv8lkG89KRIoCjUagnAmCBurjF4zEVX2ByBbnCjQ==", - "dependencies": { - "commander": "^2.8.1" - }, - "bin": { - "seek-bunzip": "bin/seek-bunzip", - "seek-table": "bin/seek-bzip-table" - } - }, - "node_modules/semaphore": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/semaphore/-/semaphore-1.1.0.tgz", - "integrity": "sha512-O4OZEaNtkMd/K0i6js9SL+gqy0ZCBMgUvlSqHKi4IBdjhe7wB8pwztUk1BbZ1fmrvpwFrPbHzqd2w5pTcJH6LA==", - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/semaphore-async-await": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/semaphore-async-await/-/semaphore-async-await-1.5.1.tgz", - "integrity": "sha512-b/ptP11hETwYWpeilHXXQiV5UJNJl7ZWWooKRE5eBIYWoom6dZ0SluCIdCtKycsMtZgKWE01/qAw6jblw1YVhg==", - "engines": { - "node": ">=4.1" - } - }, - "node_modules/semver": { - "version": "7.5.4", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", - "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/semver/node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/semver/node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" - }, - "node_modules/send": { - "version": "0.18.0", - "resolved": "https://registry.npmjs.org/send/-/send-0.18.0.tgz", - "integrity": "sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==", - "dependencies": { - "debug": "2.6.9", - "depd": "2.0.0", - "destroy": "1.2.0", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "etag": "~1.8.1", - "fresh": "0.5.2", - "http-errors": "2.0.0", - "mime": "1.6.0", - "ms": "2.1.3", - "on-finished": "2.4.1", - "range-parser": "~1.2.1", - "statuses": "2.0.1" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/send/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/send/node_modules/debug/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" - }, - "node_modules/send/node_modules/ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" - }, - "node_modules/sentence-case": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/sentence-case/-/sentence-case-2.1.1.tgz", - "integrity": "sha512-ENl7cYHaK/Ktwk5OTD+aDbQ3uC8IByu/6Bkg+HDv8Mm+XnBnppVNalcfJTNsp1ibstKh030/JKQQWglDvtKwEQ==", - "dependencies": { - "no-case": "^2.2.0", - "upper-case-first": "^1.1.2" - } - }, - "node_modules/serialize-javascript": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.0.tgz", - "integrity": "sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag==", - "dependencies": { - "randombytes": "^2.1.0" - } - }, - "node_modules/serve-static": { - "version": "1.15.0", - "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.15.0.tgz", - "integrity": "sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==", - "dependencies": { - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "parseurl": "~1.3.3", - "send": "0.18.0" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/servify": { - "version": "0.1.12", - "resolved": "https://registry.npmjs.org/servify/-/servify-0.1.12.tgz", - "integrity": "sha512-/xE6GvsKKqyo1BAY+KxOWXcLpPsUUyji7Qg3bVD7hh1eRze5bR1uYiuDA/k3Gof1s9BTzQZEJK8sNcNGFIzeWw==", - "dependencies": { - "body-parser": "^1.16.0", - "cors": "^2.8.1", - "express": "^4.14.0", - "request": "^2.79.0", - "xhr": "^2.3.3" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/set-blocking": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", - "integrity": "sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==" - }, - "node_modules/set-immediate-shim": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/set-immediate-shim/-/set-immediate-shim-1.0.1.tgz", - "integrity": "sha512-Li5AOqrZWCVA2n5kryzEmqai6bKSIvpz5oUJHPVj6+dsbD3X1ixtsY5tEnsaNpH3pFAHmG8eIHUrtEtohrg+UQ==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/setimmediate": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", - "integrity": "sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA==" - }, - "node_modules/setprototypeof": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", - "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==" - }, - "node_modules/sha.js": { - "version": "2.4.11", - "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz", - "integrity": "sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==", - "dependencies": { - "inherits": "^2.0.1", - "safe-buffer": "^5.0.1" - }, - "bin": { - "sha.js": "bin.js" - } - }, - "node_modules/sha1": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/sha1/-/sha1-1.1.1.tgz", - "integrity": "sha512-dZBS6OrMjtgVkopB1Gmo4RQCDKiZsqcpAQpkV/aaj+FCrCg8r4I4qMkDPQjBgLIxlmu9k4nUbWq6ohXahOneYA==", - "dependencies": { - "charenc": ">= 0.0.1", - "crypt": ">= 0.0.1" - }, - "engines": { - "node": "*" - } - }, - "node_modules/sha3": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/sha3/-/sha3-2.1.4.tgz", - "integrity": "sha512-S8cNxbyb0UGUM2VhRD4Poe5N58gJnJsLJ5vC7FYWGUmGhcsj4++WaIOBFVDxlG0W3To6xBuiRh+i0Qp2oNCOtg==", - "dependencies": { - "buffer": "6.0.3" - } - }, - "node_modules/shallowequal": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/shallowequal/-/shallowequal-1.1.0.tgz", - "integrity": "sha512-y0m1JoUZSlPAjXVtPPW70aZWfIL/dSP7AFkRnniLCrK/8MDKog3TySTBmckD+RObVxH0v4Tox67+F14PdED2oQ==" - }, - "node_modules/shebang-command": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", - "integrity": "sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg==", - "dependencies": { - "shebang-regex": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/shebang-regex": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", - "integrity": "sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/side-channel": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", - "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", - "dependencies": { - "call-bind": "^1.0.0", - "get-intrinsic": "^1.0.2", - "object-inspect": "^1.9.0" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/signal-exit": { - "version": "3.0.7", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", - "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", - "devOptional": true - }, - "node_modules/simple-concat": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/simple-concat/-/simple-concat-1.0.1.tgz", - "integrity": "sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] - }, - "node_modules/simple-update-notifier": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/simple-update-notifier/-/simple-update-notifier-1.0.7.tgz", - "integrity": "sha512-BBKgR84BJQJm6WjWFMHgLVuo61FBDSj1z/xSFUIozqO6wO7ii0JxCqlIud7Enr/+LhlbNI0whErq96P2qHNWew==", - "dependencies": { - "semver": "~7.0.0" - }, - "engines": { - "node": ">=8.10.0" - } - }, - "node_modules/simple-update-notifier/node_modules/semver": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.0.0.tgz", - "integrity": "sha512-+GB6zVA9LWh6zovYQLALHwv5rb2PHGlJi3lfiqIHxR0uuwCgefcOJc59v9fv1w8GbStwxuuqqAjI9NMAOOgq1A==", - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/slash": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-2.0.0.tgz", - "integrity": "sha512-ZYKh3Wh2z1PpEXWr0MpSBZ0V6mZHAQfYevttO11c51CaWjGTaadiKZ+wVt1PbMlDV5qhMFslpZCemhwOK7C89A==", - "engines": { - "node": ">=6" - } - }, - "node_modules/slice-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz", - "integrity": "sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.0.0", - "astral-regex": "^2.0.0", - "is-fullwidth-code-point": "^3.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/slice-ansi?sponsor=1" - } - }, - "node_modules/snake-case": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/snake-case/-/snake-case-2.1.0.tgz", - "integrity": "sha512-FMR5YoPFwOLuh4rRz92dywJjyKYZNLpMn1R5ujVpIYkbA9p01fq8RMg0FkO4M+Yobt4MjHeLTJVm5xFFBHSV2Q==", - "dependencies": { - "no-case": "^2.2.0" - } - }, - "node_modules/sol-merger": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/sol-merger/-/sol-merger-4.4.0.tgz", - "integrity": "sha512-eYlgsVAeTPiIpLwRCnu8vdhAI40mt8I9BAnwdHazF+8ggWd0EuucQYxs4v+GyjC/5cmCfPMJ55T37tgk/zXqSg==", - "dependencies": { - "antlr4ts": "^0.5.0-alpha.4", - "cli-color": "^2.0.3", - "commander": "^4.0.1", - "debug": "^4.3.4", - "fs-extra": "^10.0.0", - "glob": "^7.1.7", - "strip-json-comments": "^3.0.1" - }, - "bin": { - "sol-merger": "dist/bin/sol-merger.js" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/sol-merger/node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/sol-merger/node_modules/commander": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz", - "integrity": "sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==", - "engines": { - "node": ">= 6" - } - }, - "node_modules/sol-merger/node_modules/fs-extra": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz", - "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==", - "dependencies": { - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/sol-merger/node_modules/glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "engines": { - "node": "*" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/sol-merger/node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, - "node_modules/sol2uml": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/sol2uml/-/sol2uml-2.2.0.tgz", - "integrity": "sha512-JMBvn3ZMT/1egoZjheM4Mh9gQudrlVjFZ1VS0gjQ/eluITT08U6V438Jyku28OuXz42aXNbGS80JuRZo0J7pLg==", - "optional": true, - "dependencies": { - "@aduh95/viz.js": "^3.7.0", - "@solidity-parser/parser": "^0.14.3", - "axios": "^0.27.2", - "commander": "^9.4.0", - "convert-svg-to-png": "^0.6.4", - "debug": "^4.3.4", - "ethers": "^5.6.9", - "js-graph-algorithms": "^1.0.18", - "klaw": "^4.0.1" - }, - "bin": { - "sol2uml": "lib/sol2uml.js" - } - }, - "node_modules/sol2uml/node_modules/axios": { - "version": "0.27.2", - "resolved": "https://registry.npmjs.org/axios/-/axios-0.27.2.tgz", - "integrity": "sha512-t+yRIyySRTp/wua5xEr+z1q60QmLq8ABsS5O9Me1AsE5dfKqgnCFzwiCZZ/cGNd1lq4/7akDWMxdhVlucjmnOQ==", - "optional": true, - "dependencies": { - "follow-redirects": "^1.14.9", - "form-data": "^4.0.0" - } - }, - "node_modules/sol2uml/node_modules/commander": { - "version": "9.5.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-9.5.0.tgz", - "integrity": "sha512-KRs7WVDKg86PWiuAqhDrAQnTXZKraVcCc6vFdL14qrZ/DcWwuRo7VoiYXalXO7S5GKpqYiVEwCbgFDfxNHKJBQ==", - "optional": true, - "engines": { - "node": "^12.20.0 || >=14" - } - }, - "node_modules/sol2uml/node_modules/form-data": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz", - "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==", - "optional": true, - "dependencies": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.8", - "mime-types": "^2.1.12" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/sol2uml/node_modules/klaw": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/klaw/-/klaw-4.1.0.tgz", - "integrity": "sha512-1zGZ9MF9H22UnkpVeuaGKOjfA2t6WrfdrJmGjy16ykcjnKQDmHVX+KI477rpbGevz/5FD4MC3xf1oxylBgcaQw==", - "optional": true, - "engines": { - "node": ">=14.14.0" - } - }, - "node_modules/solc": { - "version": "0.8.21", - "resolved": "https://registry.npmjs.org/solc/-/solc-0.8.21.tgz", - "integrity": "sha512-N55ogy2dkTRwiONbj4e6wMZqUNaLZkiRcjGyeafjLYzo/tf/IvhHY5P5wpe+H3Fubh9idu071i8eOGO31s1ylg==", - "dependencies": { - "command-exists": "^1.2.8", - "commander": "^8.1.0", - "follow-redirects": "^1.12.1", - "js-sha3": "0.8.0", - "memorystream": "^0.3.1", - "semver": "^5.5.0", - "tmp": "0.0.33" - }, - "bin": { - "solcjs": "solc.js" - }, - "engines": { - "node": ">=10.0.0" - } - }, - "node_modules/solc/node_modules/commander": { - "version": "8.3.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-8.3.0.tgz", - "integrity": "sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==", - "engines": { - "node": ">= 12" - } - }, - "node_modules/solc/node_modules/semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "bin": { - "semver": "bin/semver" - } - }, - "node_modules/solidity-ast": { - "version": "0.4.49", - "resolved": "https://registry.npmjs.org/solidity-ast/-/solidity-ast-0.4.49.tgz", - "integrity": "sha512-Pr5sCAj1SFqzwFZw1HPKSq0PehlQNdM8GwKyAVYh2DOn7/cCK8LUKD1HeHnKtTgBW7hi9h4nnnan7hpAg5RhWQ==", - "dev": true - }, - "node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/source-map-support": { - "version": "0.5.21", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", - "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", - "dependencies": { - "buffer-from": "^1.0.0", - "source-map": "^0.6.0" - } - }, - "node_modules/spark-md5": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/spark-md5/-/spark-md5-3.0.2.tgz", - "integrity": "sha512-wcFzz9cDfbuqe0FZzfi2or1sgyIrsDwmPwfZC4hiNidPdPINjeUwNfv5kldczoEAcjl9Y1L3SM7Uz2PUEQzxQw==", - "optional": true - }, - "node_modules/spdx-correct": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.1.tgz", - "integrity": "sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w==", - "dependencies": { - "spdx-expression-parse": "^3.0.0", - "spdx-license-ids": "^3.0.0" - } - }, - "node_modules/spdx-exceptions": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz", - "integrity": "sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==" - }, - "node_modules/spdx-expression-parse": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz", - "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==", - "dependencies": { - "spdx-exceptions": "^2.1.0", - "spdx-license-ids": "^3.0.0" - } - }, - "node_modules/spdx-license-ids": { - "version": "3.0.12", - "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.12.tgz", - "integrity": "sha512-rr+VVSXtRhO4OHbXUiAF7xW3Bo9DuuF6C5jH+q/x15j2jniycgKbxU09Hr0WqlSLUs4i4ltHGXqTe7VHclYWyA==" - }, - "node_modules/split-ca": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/split-ca/-/split-ca-1.0.1.tgz", - "integrity": "sha512-Q5thBSxp5t8WPTTJQS59LrGqOZqOsrhDGDVm8azCqIBjSBd7nd9o2PM+mDulQQkh8h//4U6hFZnc/mul8t5pWQ==" - }, - "node_modules/sprintf-js": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", - "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==" - }, - "node_modules/ssh2": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/ssh2/-/ssh2-1.11.0.tgz", - "integrity": "sha512-nfg0wZWGSsfUe/IBJkXVll3PEZ//YH2guww+mP88gTpuSU4FtZN7zu9JoeTGOyCNx2dTDtT9fOpWwlzyj4uOOw==", - "hasInstallScript": true, - "dependencies": { - "asn1": "^0.2.4", - "bcrypt-pbkdf": "^1.0.2" - }, - "engines": { - "node": ">=10.16.0" - }, - "optionalDependencies": { - "cpu-features": "~0.0.4", - "nan": "^2.16.0" - } - }, - "node_modules/sshpk": { - "version": "1.17.0", - "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.17.0.tgz", - "integrity": "sha512-/9HIEs1ZXGhSPE8X6Ccm7Nam1z8KcoCqPdI7ecm1N33EzAetWahvQWVqLZtaZQ+IDKX4IyA2o0gBzqIMkAagHQ==", - "dependencies": { - "asn1": "~0.2.3", - "assert-plus": "^1.0.0", - "bcrypt-pbkdf": "^1.0.0", - "dashdash": "^1.12.0", - "ecc-jsbn": "~0.1.1", - "getpass": "^0.1.1", - "jsbn": "~0.1.0", - "safer-buffer": "^2.0.2", - "tweetnacl": "~0.14.0" - }, - "bin": { - "sshpk-conv": "bin/sshpk-conv", - "sshpk-sign": "bin/sshpk-sign", - "sshpk-verify": "bin/sshpk-verify" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/sshpk/node_modules/tweetnacl": { - "version": "0.14.5", - "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", - "integrity": "sha512-KXXFFdAbFXY4geFIwoyNK+f5Z1b7swfXABfL7HXCmoIWMKU3dmS26672A4EeQtDzLKy7SXmfBu51JolvEKwtGA==" - }, - "node_modules/stacktrace-parser": { - "version": "0.1.10", - "resolved": "https://registry.npmjs.org/stacktrace-parser/-/stacktrace-parser-0.1.10.tgz", - "integrity": "sha512-KJP1OCML99+8fhOHxwwzyWrlUuVX5GQ0ZpJTd1DFXhdkrvg1szxfHhawXUZ3g9TkXORQd4/WG68jMlQZ2p8wlg==", - "dependencies": { - "type-fest": "^0.7.1" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/stacktrace-parser/node_modules/type-fest": { - "version": "0.7.1", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.7.1.tgz", - "integrity": "sha512-Ne2YiiGN8bmrmJJEuTWTLJR32nh/JdL1+PSicowtNb0WFpn59GK8/lfD61bVtzguz7b3PBt74nxpv/Pw5po5Rg==", - "engines": { - "node": ">=8" - } - }, - "node_modules/statuses": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", - "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/stealthy-require": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/stealthy-require/-/stealthy-require-1.1.1.tgz", - "integrity": "sha512-ZnWpYnYugiOVEY5GkcuJK1io5V8QmNYChG62gSit9pQVGErXtrKuPC55ITaVSukmMta5qpMU7vqLt2Lnni4f/g==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/streamsearch": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/streamsearch/-/streamsearch-1.1.0.tgz", - "integrity": "sha512-Mcc5wHehp9aXz1ax6bZUyY5afg9u2rv5cqQI3mRrYkGC8rW2hM02jWuwjtL++LS5qinSyhj2QfLyNsuc+VsExg==", - "engines": { - "node": ">=10.0.0" - } - }, - "node_modules/strict-uri-encode": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/strict-uri-encode/-/strict-uri-encode-1.1.0.tgz", - "integrity": "sha512-R3f198pcvnB+5IpnBlRkphuE9n46WyVl8I39W/ZUTZLz4nqSP/oLYUrcnJrw462Ds8he4YKMov2efsTIw1BDGQ==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/string_decoder": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", - "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", - "dependencies": { - "safe-buffer": "~5.2.0" - } - }, - "node_modules/string-format": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/string-format/-/string-format-2.0.0.tgz", - "integrity": "sha512-bbEs3scLeYNXLecRRuk6uJxdXUSj6le/8rNPHChIJTn2V79aXVTR1EH2OH5zLKKoz0V02fOUKZZcw01pLUShZA==", - "dev": true - }, - "node_modules/string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/string-width/node_modules/ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "engines": { - "node": ">=8" - } - }, - "node_modules/string-width/node_modules/strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/string.prototype.trimend": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.5.tgz", - "integrity": "sha512-I7RGvmjV4pJ7O3kdf+LXFpVfdNOxtCW/2C8f6jNiW4+PQchwxkCDzlk1/7p+Wl4bqFIZeF47qAHXLuHHWKAxog==", - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.19.5" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/string.prototype.trimstart": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.5.tgz", - "integrity": "sha512-THx16TJCGlsN0o6dl2o6ncWUsdgnLRSA23rRE5pyGBw/mLr3Ej/R2LaqCtgP8VNMGZsvMWnf9ooZPyY2bHvUFg==", - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.19.5" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/strip-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", - "integrity": "sha512-4XaJ2zQdCzROZDivEVIDPkcQn8LMFSa8kj8Gxb/Lnwzv9A8VctNZ+lfivC/sV3ivW8ElJTERXZoPBRrZKkNKow==", - "dependencies": { - "ansi-regex": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/strip-bom": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz", - "integrity": "sha512-kwrX1y7czp1E69n2ajbG65mIo9dqvJ+8aBQXOGVxqwvNbsXdFM6Lq37dLAY3mknUwru8CfcCbfOLL/gMo+fi3g==", - "dependencies": { - "is-utf8": "^0.2.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/strip-dirs": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/strip-dirs/-/strip-dirs-2.1.0.tgz", - "integrity": "sha512-JOCxOeKLm2CAS73y/U4ZeZPTkE+gNVCzKt7Eox84Iej1LT/2pTWYpZKJuxwQpvX1LiZb1xokNR7RLfuBAa7T3g==", - "dependencies": { - "is-natural-number": "^4.0.1" - } - }, - "node_modules/strip-hex-prefix": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/strip-hex-prefix/-/strip-hex-prefix-1.0.0.tgz", - "integrity": "sha512-q8d4ue7JGEiVcypji1bALTos+0pWtyGlivAWyPuTkHzuTCJqrK9sWxYQZUq6Nq3cuyv3bm734IhHvHtGGURU6A==", - "dependencies": { - "is-hex-prefixed": "1.0.0" - }, - "engines": { - "node": ">=6.5.0", - "npm": ">=3" - } - }, - "node_modules/strip-indent": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-2.0.0.tgz", - "integrity": "sha512-RsSNPLpq6YUL7QYy44RnPVTn/lcVZtb48Uof3X5JLbF4zD/Gs7ZFDv2HWol+leoQN2mT86LAzSshGfkTlSOpsA==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/strip-json-comments": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", - "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/sturdy-websocket": { - "version": "0.1.12", - "resolved": "https://registry.npmjs.org/sturdy-websocket/-/sturdy-websocket-0.1.12.tgz", - "integrity": "sha512-PA7h8LdjaMoIlC5HAwLVzae4raGWgyroscV4oUpEiTtEFINcNa47/CKYT3e98o+FfsJgrclI2pYpaJrz0aaoew==", - "dependencies": { - "lodash.defaults": "^4.2.0" - } - }, - "node_modules/sublevel-pouchdb": { - "version": "7.3.1", - "resolved": "https://registry.npmjs.org/sublevel-pouchdb/-/sublevel-pouchdb-7.3.1.tgz", - "integrity": "sha512-n+4fK72F/ORdqPwoGgMGYeOrW2HaPpW9o9k80bT1B3Cim5BSvkKkr9WbWOWynni/GHkbCEdvLVFJL1ktosAdhQ==", - "optional": true, - "dependencies": { - "inherits": "2.0.4", - "level-codec": "9.0.2", - "ltgt": "2.2.1", - "readable-stream": "1.1.14" - } - }, - "node_modules/sublevel-pouchdb/node_modules/isarray": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", - "integrity": "sha512-D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ==", - "optional": true - }, - "node_modules/sublevel-pouchdb/node_modules/readable-stream": { - "version": "1.1.14", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz", - "integrity": "sha512-+MeVjFf4L44XUkhM1eYbD8fyEsxcV81pqMSR5gblfcLCHfZvbrqy4/qYHE+/R5HoBUT11WV5O08Cr1n3YXkWVQ==", - "optional": true, - "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.1", - "isarray": "0.0.1", - "string_decoder": "~0.10.x" - } - }, - "node_modules/sublevel-pouchdb/node_modules/string_decoder": { - "version": "0.10.31", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", - "integrity": "sha512-ev2QzSzWPYmy9GuqfIVildA4OdcGLeFZQrq5ys6RtiuF+RQQiZWr8TZNyAcuVXyQRYfEO+MsoB/1BuQVhOJuoQ==", - "optional": true - }, - "node_modules/superstruct": { - "version": "0.14.2", - "resolved": "https://registry.npmjs.org/superstruct/-/superstruct-0.14.2.tgz", - "integrity": "sha512-nPewA6m9mR3d6k7WkZ8N8zpTWfenFH3q9pA2PkuiZxINr9DKB2+40wEQf0ixn8VaGuJ78AB6iWOtStI+/4FKZQ==" - }, - "node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/swap-case": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/swap-case/-/swap-case-1.1.2.tgz", - "integrity": "sha512-BAmWG6/bx8syfc6qXPprof3Mn5vQgf5dwdUNJhsNqU9WdPt5P+ES/wQ5bxfijy8zwZgZZHslC3iAsxsuQMCzJQ==", - "dependencies": { - "lower-case": "^1.1.1", - "upper-case": "^1.1.1" - } - }, - "node_modules/swarm-js": { - "version": "0.1.42", - "resolved": "https://registry.npmjs.org/swarm-js/-/swarm-js-0.1.42.tgz", - "integrity": "sha512-BV7c/dVlA3R6ya1lMlSSNPLYrntt0LUq4YMgy3iwpCIc6rZnS5W2wUoctarZ5pXlpKtxDDf9hNziEkcfrxdhqQ==", - "dependencies": { - "bluebird": "^3.5.0", - "buffer": "^5.0.5", - "eth-lib": "^0.1.26", - "fs-extra": "^4.0.2", - "got": "^11.8.5", - "mime-types": "^2.1.16", - "mkdirp-promise": "^5.0.1", - "mock-fs": "^4.1.0", - "setimmediate": "^1.0.5", - "tar": "^4.0.2", - "xhr-request": "^1.0.1" - } - }, - "node_modules/swarm-js/node_modules/@szmarczak/http-timer": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-4.0.6.tgz", - "integrity": "sha512-4BAffykYOgO+5nzBWYwE3W90sBgLJoUPRWWcL8wlyiM8IB8ipJz3UMJ9KXQd1RKQXpKp8Tutn80HZtWsu2u76w==", - "dependencies": { - "defer-to-connect": "^2.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/swarm-js/node_modules/buffer": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", - "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "dependencies": { - "base64-js": "^1.3.1", - "ieee754": "^1.1.13" - } - }, - "node_modules/swarm-js/node_modules/cacheable-lookup": { - "version": "5.0.4", - "resolved": "https://registry.npmjs.org/cacheable-lookup/-/cacheable-lookup-5.0.4.tgz", - "integrity": "sha512-2/kNscPhpcxrOigMZzbiWF7dz8ilhb/nIHU3EyZiXWXpeq/au8qJ8VhdftMkty3n7Gj6HIGalQG8oiBNB3AJgA==", - "engines": { - "node": ">=10.6.0" - } - }, - "node_modules/swarm-js/node_modules/decompress-response": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-6.0.0.tgz", - "integrity": "sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==", - "dependencies": { - "mimic-response": "^3.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/swarm-js/node_modules/fs-extra": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-4.0.3.tgz", - "integrity": "sha512-q6rbdDd1o2mAnQreO7YADIxf/Whx4AHBiRf6d+/cVT8h44ss+lHgxf1FemcqDnQt9X3ct4McHr+JMGlYSsK7Cg==", - "dependencies": { - "graceful-fs": "^4.1.2", - "jsonfile": "^4.0.0", - "universalify": "^0.1.0" - } - }, - "node_modules/swarm-js/node_modules/got": { - "version": "11.8.6", - "resolved": "https://registry.npmjs.org/got/-/got-11.8.6.tgz", - "integrity": "sha512-6tfZ91bOr7bOXnK7PRDCGBLa1H4U080YHNaAQ2KsMGlLEzRbk44nsZF2E1IeRc3vtJHPVbKCYgdFbaGO2ljd8g==", - "dependencies": { - "@sindresorhus/is": "^4.0.0", - "@szmarczak/http-timer": "^4.0.5", - "@types/cacheable-request": "^6.0.1", - "@types/responselike": "^1.0.0", - "cacheable-lookup": "^5.0.3", - "cacheable-request": "^7.0.2", - "decompress-response": "^6.0.0", - "http2-wrapper": "^1.0.0-beta.5.2", - "lowercase-keys": "^2.0.0", - "p-cancelable": "^2.0.0", - "responselike": "^2.0.0" - }, - "engines": { - "node": ">=10.19.0" - }, - "funding": { - "url": "https://github.com/sindresorhus/got?sponsor=1" - } - }, - "node_modules/swarm-js/node_modules/http2-wrapper": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/http2-wrapper/-/http2-wrapper-1.0.3.tgz", - "integrity": "sha512-V+23sDMr12Wnz7iTcDeJr3O6AIxlnvT/bmaAAAP/Xda35C90p9599p0F1eHR/N1KILWSoWVAiOMFjBBXaXSMxg==", - "dependencies": { - "quick-lru": "^5.1.1", - "resolve-alpn": "^1.0.0" - }, - "engines": { - "node": ">=10.19.0" - } - }, - "node_modules/swarm-js/node_modules/jsonfile": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", - "integrity": "sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==", - "optionalDependencies": { - "graceful-fs": "^4.1.6" - } - }, - "node_modules/swarm-js/node_modules/lowercase-keys": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-2.0.0.tgz", - "integrity": "sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==", - "engines": { - "node": ">=8" - } - }, - "node_modules/swarm-js/node_modules/mimic-response": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-3.1.0.tgz", - "integrity": "sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/swarm-js/node_modules/p-cancelable": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-2.1.1.tgz", - "integrity": "sha512-BZOr3nRQHOntUjTrH8+Lh54smKHoHyur8We1V8DSMVrl5A2malOOwuJRnKRDjSnkoeBh4at6BwEnb5I7Jl31wg==", - "engines": { - "node": ">=8" - } - }, - "node_modules/swarm-js/node_modules/universalify": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", - "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", - "engines": { - "node": ">= 4.0.0" - } - }, - "node_modules/symbol-observable": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/symbol-observable/-/symbol-observable-1.2.0.tgz", - "integrity": "sha512-e900nM8RRtGhlV36KGEU9k65K3mPb1WV70OdjfxlG2EAuM1noi/E/BaW/uMhL7bPEssK8QV57vN3esixjUvcXQ==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/sync-request": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/sync-request/-/sync-request-6.1.0.tgz", - "integrity": "sha512-8fjNkrNlNCrVc/av+Jn+xxqfCjYaBoHqCsDz6mt030UMxJGr+GSfCV1dQt2gRtlL63+VPidwDVLr7V2OcTSdRw==", - "dependencies": { - "http-response-object": "^3.0.1", - "sync-rpc": "^1.2.1", - "then-request": "^6.0.0" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/sync-rpc": { - "version": "1.3.6", - "resolved": "https://registry.npmjs.org/sync-rpc/-/sync-rpc-1.3.6.tgz", - "integrity": "sha512-J8jTXuZzRlvU7HemDgHi3pGnh/rkoqR/OZSjhTyyZrEkkYQbk7Z33AXp37mkPfPpfdOuj7Ex3H/TJM1z48uPQw==", - "dependencies": { - "get-port": "^3.1.0" - } - }, - "node_modules/table": { - "version": "6.8.0", - "resolved": "https://registry.npmjs.org/table/-/table-6.8.0.tgz", - "integrity": "sha512-s/fitrbVeEyHKFa7mFdkuQMWlH1Wgw/yEXMt5xACT4ZpzWFluehAxRtUUQKPuWhaLAWhFcVx6w3oC8VKaUfPGA==", - "dev": true, - "dependencies": { - "ajv": "^8.0.1", - "lodash.truncate": "^4.4.2", - "slice-ansi": "^4.0.0", - "string-width": "^4.2.3", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">=10.0.0" - } - }, - "node_modules/table-layout": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/table-layout/-/table-layout-1.0.2.tgz", - "integrity": "sha512-qd/R7n5rQTRFi+Zf2sk5XVVd9UQl6ZkduPFC3S7WEGJAmetDTjY3qPN50eSKzwuzEyQKy5TN2TiZdkIjos2L6A==", - "dev": true, - "dependencies": { - "array-back": "^4.0.1", - "deep-extend": "~0.6.0", - "typical": "^5.2.0", - "wordwrapjs": "^4.0.0" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/table-layout/node_modules/array-back": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/array-back/-/array-back-4.0.2.tgz", - "integrity": "sha512-NbdMezxqf94cnNfWLL7V/im0Ub+Anbb0IoZhvzie8+4HJ4nMQuzHuy49FkGYCJK2yAloZ3meiB6AVMClbrI1vg==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/table-layout/node_modules/typical": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/typical/-/typical-5.2.0.tgz", - "integrity": "sha512-dvdQgNDNJo+8B2uBQoqdb11eUCE1JQXhvjC/CZtgvZseVd5TYMXnq0+vuUemXbd/Se29cTaUuPX3YIc2xgbvIg==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/table/node_modules/ajv": { - "version": "8.11.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.11.0.tgz", - "integrity": "sha512-wGgprdCvMalC0BztXvitD2hC04YffAvtsUn93JbGXYLAtCUO4xd17mCCZQxUOItiBwZvJScWo8NIvQMQ71rdpg==", - "dev": true, - "dependencies": { - "fast-deep-equal": "^3.1.1", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2", - "uri-js": "^4.2.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "node_modules/table/node_modules/ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/table/node_modules/json-schema-traverse": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", - "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", - "dev": true - }, - "node_modules/table/node_modules/strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/tar": { - "version": "4.4.19", - "resolved": "https://registry.npmjs.org/tar/-/tar-4.4.19.tgz", - "integrity": "sha512-a20gEsvHnWe0ygBY8JbxoM4w3SJdhc7ZAuxkLqh+nvNQN2IOt0B5lLgM490X5Hl8FF0dl0tOf2ewFYAlIFgzVA==", - "dependencies": { - "chownr": "^1.1.4", - "fs-minipass": "^1.2.7", - "minipass": "^2.9.0", - "minizlib": "^1.3.3", - "mkdirp": "^0.5.5", - "safe-buffer": "^5.2.1", - "yallist": "^3.1.1" - }, - "engines": { - "node": ">=4.5" - } - }, - "node_modules/tar-fs": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-2.1.1.tgz", - "integrity": "sha512-V0r2Y9scmbDRLCNex/+hYzvp/zyYjvFbHPNgVTKfQvVrb6guiE/fxP+XblDNR011utopbkex2nM4dHNV6GDsng==", - "optional": true, - "dependencies": { - "chownr": "^1.1.1", - "mkdirp-classic": "^0.5.2", - "pump": "^3.0.0", - "tar-stream": "^2.1.4" - } - }, - "node_modules/tar-stream": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-2.2.0.tgz", - "integrity": "sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==", - "dependencies": { - "bl": "^4.0.3", - "end-of-stream": "^1.4.1", - "fs-constants": "^1.0.0", - "inherits": "^2.0.3", - "readable-stream": "^3.1.1" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/testrpc": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/testrpc/-/testrpc-0.0.1.tgz", - "integrity": "sha512-afH1hO+SQ/VPlmaLUFj2636QMeDvPCeQMc/9RBMW0IfjNe9gFD9Ra3ShqYkB7py0do1ZcCna/9acHyzTJ+GcNA==", - "deprecated": "testrpc has been renamed to ganache-cli, please use this package from now on." - }, - "node_modules/text-encoding-utf-8": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/text-encoding-utf-8/-/text-encoding-utf-8-1.0.2.tgz", - "integrity": "sha512-8bw4MY9WjdsD2aMtO0OzOCY3pXGYNx2d2FfHRVUKkiCPDWjKuOlhLVASS+pD7VkLTVjW268LYJHwsnPFlBpbAg==" - }, - "node_modules/then-request": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/then-request/-/then-request-6.0.2.tgz", - "integrity": "sha512-3ZBiG7JvP3wbDzA9iNY5zJQcHL4jn/0BWtXIkagfz7QgOL/LqjCEOBQuJNZfu0XYnv5JhKh+cDxCPM4ILrqruA==", - "dependencies": { - "@types/concat-stream": "^1.6.0", - "@types/form-data": "0.0.33", - "@types/node": "^8.0.0", - "@types/qs": "^6.2.31", - "caseless": "~0.12.0", - "concat-stream": "^1.6.0", - "form-data": "^2.2.0", - "http-basic": "^8.1.1", - "http-response-object": "^3.0.1", - "promise": "^8.0.0", - "qs": "^6.4.0" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/then-request/node_modules/@types/node": { - "version": "8.10.66", - "resolved": "https://registry.npmjs.org/@types/node/-/node-8.10.66.tgz", - "integrity": "sha512-tktOkFUA4kXx2hhhrB8bIFb5TbwzS4uOhKEmwiD+NoiL0qtP2OQ9mFldbgD4dV1djrlBYP6eBuQZiWjuHUpqFw==" - }, - "node_modules/then-request/node_modules/form-data": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.5.1.tgz", - "integrity": "sha512-m21N3WOmEEURgk6B9GLOE4RuWOFf28Lhh9qGYeNlGq4VDXUlJy2th2slBNU8Gp8EzloYZOibZJ7t5ecIrFSjVA==", - "dependencies": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.6", - "mime-types": "^2.1.12" - }, - "engines": { - "node": ">= 0.12" - } - }, - "node_modules/through": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", - "integrity": "sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==" - }, - "node_modules/through2": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/through2/-/through2-3.0.2.tgz", - "integrity": "sha512-enaDQ4MUyP2W6ZyT6EsMzqBPZaM/avg8iuo+l2d3QCs0J+6RaqkHV/2/lOwDTueBHeJ/2LG9lrLW3d5rWPucuQ==", - "optional": true, - "dependencies": { - "inherits": "^2.0.4", - "readable-stream": "2 || 3" - } - }, - "node_modules/timed-out": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/timed-out/-/timed-out-4.0.1.tgz", - "integrity": "sha512-G7r3AhovYtr5YKOWQkta8RKAPb+J9IsO4uVmzjl8AZwfhs8UcUwTiD6gcJYSgOtzyjvQKrKYn41syHbUWMkafA==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/timers-ext": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/timers-ext/-/timers-ext-0.1.7.tgz", - "integrity": "sha512-b85NUNzTSdodShTIbky6ZF02e8STtVVfD+fu4aXXShEELpozH+bCpJLYMPZbsABN2wDH7fJpqIoXxJpzbf0NqQ==", - "dependencies": { - "es5-ext": "~0.10.46", - "next-tick": "1" - } - }, - "node_modules/tiny-emitter": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/tiny-emitter/-/tiny-emitter-2.1.0.tgz", - "integrity": "sha512-NB6Dk1A9xgQPMoGqC5CVXn123gWyte215ONT5Pp5a0yt4nlEoO1ZWeCwpncaekPHXO60i47ihFnZPiRPjRMq4Q==" - }, - "node_modules/tiny-invariant": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/tiny-invariant/-/tiny-invariant-1.3.1.tgz", - "integrity": "sha512-AD5ih2NlSssTCwsMznbvwMZpJ1cbhkGd2uueNxzv2jDlEeZdU04JQfRnggJQ8DrcVBGjAsCKwFBbDlVNtEMlzw==" - }, - "node_modules/tiny-typed-emitter": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/tiny-typed-emitter/-/tiny-typed-emitter-2.1.0.tgz", - "integrity": "sha512-qVtvMxeXbVej0cQWKqVSSAHmKZEHAvxdF8HEUBFWts8h+xEo5m/lEiPakuyZ3BnCBjOD8i24kzNOiOLLgsSxhA==", - "optional": true - }, - "node_modules/tiny-warning": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/tiny-warning/-/tiny-warning-1.0.3.tgz", - "integrity": "sha512-lBN9zLN/oAf68o3zNXYrdCt1kP8WsiGW8Oo2ka41b2IM5JL/S1CTyX1rW0mb/zSuJun0ZUrDxx4sqvYS2FWzPA==" - }, - "node_modules/title-case": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/title-case/-/title-case-2.1.1.tgz", - "integrity": "sha512-EkJoZ2O3zdCz3zJsYCsxyq2OC5hrxR9mfdd5I+w8h/tmFfeOxJ+vvkxsKxdmN0WtS9zLdHEgfgVOiMVgv+Po4Q==", - "dependencies": { - "no-case": "^2.2.0", - "upper-case": "^1.0.3" - } - }, - "node_modules/tmp": { - "version": "0.0.33", - "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", - "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", - "dependencies": { - "os-tmpdir": "~1.0.2" - }, - "engines": { - "node": ">=0.6.0" - } - }, - "node_modules/to-buffer": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/to-buffer/-/to-buffer-1.1.1.tgz", - "integrity": "sha512-lx9B5iv7msuFYE3dytT+KE5tap+rNYw+K4jVkb9R/asAb+pbBSM17jtunHplhBe6RRJdZx3Pn2Jph24O32mOVg==" - }, - "node_modules/to-fast-properties": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", - "integrity": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==", - "engines": { - "node": ">=4" - } - }, - "node_modules/to-hex": { - "version": "0.0.18", - "resolved": "https://registry.npmjs.org/to-hex/-/to-hex-0.0.18.tgz", - "integrity": "sha512-twjjF944fl3eUQBpO7bETUhUyCtUFHWJkSLq9+K/Aw+yh3l/xIYaNUmybRqmxsYoZyv9au4aikDiWoJEOMKBDQ==", - "dependencies": { - "bignumber.js": "9.0.0", - "normalize-hex": "0.0.2" - } - }, - "node_modules/to-hex/node_modules/bignumber.js": { - "version": "9.0.0", - "resolved": "https://registry.npmjs.org/bignumber.js/-/bignumber.js-9.0.0.tgz", - "integrity": "sha512-t/OYhhJ2SD+YGBQcjY8GzzDHEk9f3nerxjtfa6tlMXfe7frs/WozhvCNoGvpM0P3bNf3Gq5ZRMlGr5f3r4/N8A==", - "engines": { - "node": "*" - } - }, - "node_modules/to-readable-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/to-readable-stream/-/to-readable-stream-1.0.0.tgz", - "integrity": "sha512-Iq25XBt6zD5npPhlLVXGFN3/gyR2/qODcKNNyTMd4vbm39HUaOiAM4PMq0eMVC/Tkxz+Zjdsc55g9yyz+Yq00Q==", - "engines": { - "node": ">=6" - } - }, - "node_modules/to-regex-range": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", - "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", - "dependencies": { - "is-number": "^7.0.0" - }, - "engines": { - "node": ">=8.0" - } - }, - "node_modules/toformat": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/toformat/-/toformat-2.0.0.tgz", - "integrity": "sha512-03SWBVop6nU8bpyZCx7SodpYznbZF5R4ljwNLBcTQzKOD9xuihRo/psX58llS1BMFhhAI08H3luot5GoXJz2pQ==" - }, - "node_modules/toidentifier": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", - "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", - "engines": { - "node": ">=0.6" - } - }, - "node_modules/toml": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/toml/-/toml-3.0.0.tgz", - "integrity": "sha512-y/mWCZinnvxjTKYhJ+pYxwD0mRLVvOtdS2Awbgxln6iEnt4rk0yBxeSBHkGJcPucRiG0e55mwWp+g/05rsrd6w==" - }, - "node_modules/touch": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/touch/-/touch-3.1.0.tgz", - "integrity": "sha512-WBx8Uy5TLtOSRtIq+M03/sKDrXCLHxwDcquSP2c43Le03/9serjQBIztjRz6FkJez9D/hleyAXTBGLwwZUw9lA==", - "dependencies": { - "nopt": "~1.0.10" - }, - "bin": { - "nodetouch": "bin/nodetouch.js" - } - }, - "node_modules/tough-cookie": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz", - "integrity": "sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==", - "dependencies": { - "psl": "^1.1.28", - "punycode": "^2.1.1" - }, - "engines": { - "node": ">=0.8" - } - }, - "node_modules/tough-cookie/node_modules/punycode": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", - "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", - "engines": { - "node": ">=6" - } - }, - "node_modules/tr46": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", - "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==" - }, - "node_modules/truffle": { - "version": "5.11.4", - "resolved": "https://registry.npmjs.org/truffle/-/truffle-5.11.4.tgz", - "integrity": "sha512-Oc7HpNQ1ViJhE0Gx1HJ6i915k5pfw89o1rhhyFKXiOZLYuXUkiyyxBdPRt+/IO5PjtXt33Me67Dy3vvoJjeyUQ==", - "hasInstallScript": true, - "dependencies": { - "@truffle/db-loader": "^0.2.35", - "@truffle/debugger": "^12.1.4", - "app-module-path": "^2.2.0", - "ganache": "7.9.1", - "mocha": "10.1.0", - "original-require": "^1.0.1" - }, - "bin": { - "truffle": "build/cli.bundled.js" - }, - "engines": { - "node": "^16.20 || ^18.16 || >=20" - }, - "optionalDependencies": { - "@truffle/db": "^2.0.35" - } - }, - "node_modules/truffle-contract-size": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/truffle-contract-size/-/truffle-contract-size-2.0.1.tgz", - "integrity": "sha512-AIKPwHPC/1pZwtVjgUcgcK23k6gWxKhn4ZnKLr339uieb94UgAUeIwGUkfc87T+0lqgC6ePY7YhsFeoZK2YEsA==", - "dependencies": { - "cli-table": "^0.3.1", - "yargs": "^15.3.1" - } - }, - "node_modules/truffle-contract-size/node_modules/ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "engines": { - "node": ">=8" - } - }, - "node_modules/truffle-contract-size/node_modules/camelcase": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", - "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", - "engines": { - "node": ">=6" - } - }, - "node_modules/truffle-contract-size/node_modules/cliui": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-6.0.0.tgz", - "integrity": "sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==", - "dependencies": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.0", - "wrap-ansi": "^6.2.0" - } - }, - "node_modules/truffle-contract-size/node_modules/decamelize": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", - "integrity": "sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/truffle-contract-size/node_modules/require-main-filename": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz", - "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==" - }, - "node_modules/truffle-contract-size/node_modules/strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/truffle-contract-size/node_modules/which-module": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz", - "integrity": "sha512-B+enWhmw6cjfVC7kS8Pj9pCrKSc5txArRyaYGe088shv/FGWH+0Rjx/xPgtsWfsUtS27FkP697E4DDhgrgoc0Q==" - }, - "node_modules/truffle-contract-size/node_modules/wrap-ansi": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", - "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", - "dependencies": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/truffle-contract-size/node_modules/y18n": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.3.tgz", - "integrity": "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==" - }, - "node_modules/truffle-contract-size/node_modules/yargs": { - "version": "15.4.1", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-15.4.1.tgz", - "integrity": "sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==", - "dependencies": { - "cliui": "^6.0.0", - "decamelize": "^1.2.0", - "find-up": "^4.1.0", - "get-caller-file": "^2.0.1", - "require-directory": "^2.1.1", - "require-main-filename": "^2.0.0", - "set-blocking": "^2.0.0", - "string-width": "^4.2.0", - "which-module": "^2.0.0", - "y18n": "^4.0.0", - "yargs-parser": "^18.1.2" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/truffle-contract-size/node_modules/yargs-parser": { - "version": "18.1.3", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz", - "integrity": "sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==", - "dependencies": { - "camelcase": "^5.0.0", - "decamelize": "^1.2.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/truffle-flattener": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/truffle-flattener/-/truffle-flattener-1.6.0.tgz", - "integrity": "sha512-scS5Bsi4CZyvlrmD4iQcLHTiG2RQFUXVheTgWeH6PuafmI+Lk5U87Es98loM3w3ImqC9/fPHq+3QIXbcPuoJ1Q==", - "dependencies": { - "@resolver-engine/imports-fs": "^0.2.2", - "@solidity-parser/parser": "^0.14.1", - "find-up": "^2.1.0", - "mkdirp": "^1.0.4", - "tsort": "0.0.1" - }, - "bin": { - "truffle-flattener": "index.js" - } - }, - "node_modules/truffle-flattener/node_modules/@resolver-engine/core": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/@resolver-engine/core/-/core-0.2.1.tgz", - "integrity": "sha512-nsLQHmPJ77QuifqsIvqjaF5B9aHnDzJjp73Q1z6apY3e9nqYrx4Dtowhpsf7Jwftg/XzVDEMQC+OzUBNTS+S1A==", - "dependencies": { - "debug": "^3.1.0", - "request": "^2.85.0" - } - }, - "node_modules/truffle-flattener/node_modules/@resolver-engine/fs": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/@resolver-engine/fs/-/fs-0.2.1.tgz", - "integrity": "sha512-7kJInM1Qo2LJcKyDhuYzh9ZWd+mal/fynfL9BNjWOiTcOpX+jNfqb/UmGUqros5pceBITlWGqS4lU709yHFUbg==", - "dependencies": { - "@resolver-engine/core": "^0.2.1", - "debug": "^3.1.0" - } - }, - "node_modules/truffle-flattener/node_modules/@resolver-engine/imports": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/@resolver-engine/imports/-/imports-0.2.2.tgz", - "integrity": "sha512-u5/HUkvo8q34AA+hnxxqqXGfby5swnH0Myw91o3Sm2TETJlNKXibFGSKBavAH+wvWdBi4Z5gS2Odu0PowgVOUg==", - "dependencies": { - "@resolver-engine/core": "^0.2.1", - "debug": "^3.1.0", - "hosted-git-info": "^2.6.0" - } - }, - "node_modules/truffle-flattener/node_modules/@resolver-engine/imports-fs": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/@resolver-engine/imports-fs/-/imports-fs-0.2.2.tgz", - "integrity": "sha512-gFCgMvCwyppjwq0UzIjde/WI+yDs3oatJhozG9xdjJdewwtd7LiF0T5i9lrHAUtqrQbqoFE4E+ZMRVHWpWHpKQ==", - "dependencies": { - "@resolver-engine/fs": "^0.2.1", - "@resolver-engine/imports": "^0.2.2", - "debug": "^3.1.0" - } - }, - "node_modules/truffle-flattener/node_modules/debug": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", - "dependencies": { - "ms": "^2.1.1" - } - }, - "node_modules/truffle-flattener/node_modules/find-up": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", - "integrity": "sha512-NWzkk0jSJtTt08+FBFMvXoeZnOJD+jTtsRmBYbAIzJdX6l7dLgR7CTubCM5/eDdPUBvLCeVasP1brfVR/9/EZQ==", - "dependencies": { - "locate-path": "^2.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/truffle-flattener/node_modules/locate-path": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", - "integrity": "sha512-NCI2kiDkyR7VeEKm27Kda/iQHyKJe1Bu0FlTbYp3CqJu+9IFe9bLyAjMxf5ZDDbEg+iMPzB5zYyUTSm8wVTKmA==", - "dependencies": { - "p-locate": "^2.0.0", - "path-exists": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/truffle-flattener/node_modules/mkdirp": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", - "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", - "bin": { - "mkdirp": "bin/cmd.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/truffle-flattener/node_modules/p-limit": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz", - "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==", - "dependencies": { - "p-try": "^1.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/truffle-flattener/node_modules/p-locate": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz", - "integrity": "sha512-nQja7m7gSKuewoVRen45CtVfODR3crN3goVQ0DDZ9N3yHxgpkuBhZqsaiotSQRrADUrne346peY7kT3TSACykg==", - "dependencies": { - "p-limit": "^1.1.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/truffle-flattener/node_modules/p-try": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz", - "integrity": "sha512-U1etNYuMJoIz3ZXSrrySFjsXQTWOx2/jdi86L+2pRvph/qMKL6sbcCYdH23fqsbm8TH2Gn0OybpT4eSFlCVHww==", - "engines": { - "node": ">=4" - } - }, - "node_modules/truffle-flattener/node_modules/path-exists": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", - "integrity": "sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==", - "engines": { - "node": ">=4" - } - }, - "node_modules/truffle-hdwallet-provider": { - "version": "1.0.17", - "resolved": "https://registry.npmjs.org/truffle-hdwallet-provider/-/truffle-hdwallet-provider-1.0.17.tgz", - "integrity": "sha512-s6DvSP83jiIAc6TUcpr7Uqnja1+sLGJ8og3X7n41vfyC4OCaKmBtXL5HOHf+SsU3iblOvnbFDgmN6Y1VBL/fsg==", - "deprecated": "WARNING: This package has been renamed to @truffle/hdwallet-provider.", - "dependencies": { - "any-promise": "^1.3.0", - "bindings": "^1.3.1", - "web3": "1.2.1", - "websocket": "^1.0.28" - } - }, - "node_modules/truffle-hdwallet-provider/node_modules/@sindresorhus/is": { - "version": "0.14.0", - "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-0.14.0.tgz", - "integrity": "sha512-9NET910DNaIPngYnLLPeg+Ogzqsi9uM4mSboU5y6p8S5DzMTVEsJZrawi+BoDNUVBa2DhJqQYUFvMDfgU062LQ==", - "engines": { - "node": ">=6" - } - }, - "node_modules/truffle-hdwallet-provider/node_modules/@szmarczak/http-timer": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-1.1.2.tgz", - "integrity": "sha512-XIB2XbzHTN6ieIjfIMV9hlVcfPU26s2vafYWQcZHWXHOxiaRZYEDKEwdl129Zyg50+foYV2jCgtrqSA6qNuNSA==", - "dependencies": { - "defer-to-connect": "^1.0.1" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/truffle-hdwallet-provider/node_modules/@types/node": { - "version": "10.17.60", - "resolved": "https://registry.npmjs.org/@types/node/-/node-10.17.60.tgz", - "integrity": "sha512-F0KIgDJfy2nA3zMLmWGKxcH2ZVEtCZXHHdOQs2gSaQ27+lNeEfGxzkIw90aXswATX7AZ33tahPbzy6KAfUreVw==" - }, - "node_modules/truffle-hdwallet-provider/node_modules/bn.js": { - "version": "4.12.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==" - }, - "node_modules/truffle-hdwallet-provider/node_modules/buffer": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", - "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "dependencies": { - "base64-js": "^1.3.1", - "ieee754": "^1.1.13" - } - }, - "node_modules/truffle-hdwallet-provider/node_modules/cacheable-request": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-6.1.0.tgz", - "integrity": "sha512-Oj3cAGPCqOZX7Rz64Uny2GYAZNliQSqfbePrgAQ1wKAihYmCUnraBtJtKcGR4xz7wF+LoJC+ssFZvv5BgF9Igg==", - "dependencies": { - "clone-response": "^1.0.2", - "get-stream": "^5.1.0", - "http-cache-semantics": "^4.0.0", - "keyv": "^3.0.0", - "lowercase-keys": "^2.0.0", - "normalize-url": "^4.1.0", - "responselike": "^1.0.2" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/truffle-hdwallet-provider/node_modules/cacheable-request/node_modules/get-stream": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", - "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", - "dependencies": { - "pump": "^3.0.0" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/truffle-hdwallet-provider/node_modules/cacheable-request/node_modules/lowercase-keys": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-2.0.0.tgz", - "integrity": "sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==", - "engines": { - "node": ">=8" - } - }, - "node_modules/truffle-hdwallet-provider/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/truffle-hdwallet-provider/node_modules/decompress-response": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-3.3.0.tgz", - "integrity": "sha512-BzRPQuY1ip+qDonAOz42gRm/pg9F768C+npV/4JOsxRC2sq+Rlk+Q4ZCAsOhnIaMrgarILY+RMUIvMmmX1qAEA==", - "dependencies": { - "mimic-response": "^1.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/truffle-hdwallet-provider/node_modules/defer-to-connect": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-1.1.3.tgz", - "integrity": "sha512-0ISdNousHvZT2EiFlZeZAHBUvSxmKswVCEf8hW7KWgG4a8MVEu/3Vb6uWYozkjylyCxe0JBIiRB1jV45S70WVQ==" - }, - "node_modules/truffle-hdwallet-provider/node_modules/elliptic": { - "version": "6.3.3", - "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.3.3.tgz", - "integrity": "sha512-cIky9SO2H8W2eU1NOLySnhOYJnuEWCq9ZJeHvHd/lXzEL9vyraIMfilZSn57X3aVX+wkfYmqkch2LvmTzkjFpA==", - "dependencies": { - "bn.js": "^4.4.0", - "brorand": "^1.0.1", - "hash.js": "^1.0.0", - "inherits": "^2.0.1" - } - }, - "node_modules/truffle-hdwallet-provider/node_modules/ethers": { - "version": "4.0.0-beta.3", - "resolved": "https://registry.npmjs.org/ethers/-/ethers-4.0.0-beta.3.tgz", - "integrity": "sha512-YYPogooSknTwvHg3+Mv71gM/3Wcrx+ZpCzarBj3mqs9njjRkrOo2/eufzhHloOCo3JSoNI4TQJJ6yU5ABm3Uog==", - "dependencies": { - "@types/node": "^10.3.2", - "aes-js": "3.0.0", - "bn.js": "^4.4.0", - "elliptic": "6.3.3", - "hash.js": "1.1.3", - "js-sha3": "0.5.7", - "scrypt-js": "2.0.3", - "setimmediate": "1.0.4", - "uuid": "2.0.1", - "xmlhttprequest": "1.8.0" - } - }, - "node_modules/truffle-hdwallet-provider/node_modules/ethers/node_modules/setimmediate": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.4.tgz", - "integrity": "sha512-/TjEmXQVEzdod/FFskf3o7oOAsGhHf2j1dZqRFbDzq4F3mvvxflIIi4Hd3bLQE9y/CpwqfSQam5JakI/mi3Pog==" - }, - "node_modules/truffle-hdwallet-provider/node_modules/eventemitter3": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-3.1.2.tgz", - "integrity": "sha512-tvtQIeLVHjDkJYnzf2dgVMxfuSGJeM/7UCG17TT4EumTfNtF+0nebF/4zWOIkCreAbtNqhGEboB6BWrwqNaw4Q==" - }, - "node_modules/truffle-hdwallet-provider/node_modules/fs-extra": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-4.0.3.tgz", - "integrity": "sha512-q6rbdDd1o2mAnQreO7YADIxf/Whx4AHBiRf6d+/cVT8h44ss+lHgxf1FemcqDnQt9X3ct4McHr+JMGlYSsK7Cg==", - "dependencies": { - "graceful-fs": "^4.1.2", - "jsonfile": "^4.0.0", - "universalify": "^0.1.0" - } - }, - "node_modules/truffle-hdwallet-provider/node_modules/get-stream": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", - "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", - "dependencies": { - "pump": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/truffle-hdwallet-provider/node_modules/got": { - "version": "9.6.0", - "resolved": "https://registry.npmjs.org/got/-/got-9.6.0.tgz", - "integrity": "sha512-R7eWptXuGYxwijs0eV+v3o6+XH1IqVK8dJOEecQfTmkncw9AV4dcw/Dhxi8MdlqPthxxpZyizMzyg8RTmEsG+Q==", - "dependencies": { - "@sindresorhus/is": "^0.14.0", - "@szmarczak/http-timer": "^1.1.2", - "cacheable-request": "^6.0.0", - "decompress-response": "^3.3.0", - "duplexer3": "^0.1.4", - "get-stream": "^4.1.0", - "lowercase-keys": "^1.0.1", - "mimic-response": "^1.0.1", - "p-cancelable": "^1.0.0", - "to-readable-stream": "^1.0.0", - "url-parse-lax": "^3.0.0" - }, - "engines": { - "node": ">=8.6" - } - }, - "node_modules/truffle-hdwallet-provider/node_modules/hash.js": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.3.tgz", - "integrity": "sha512-/UETyP0W22QILqS+6HowevwhEFJ3MBJnwTf75Qob9Wz9t0DPuisL8kW8YZMK62dHAKE1c1p+gY1TtOLY+USEHA==", - "dependencies": { - "inherits": "^2.0.3", - "minimalistic-assert": "^1.0.0" - } - }, - "node_modules/truffle-hdwallet-provider/node_modules/is-plain-obj": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz", - "integrity": "sha512-yvkRyxmFKEOQ4pNXCmJG5AEQNlXJS5LaONXo5/cLdTZdWvsZ1ioJEonLGAosKlMWE8lwUy/bJzMjcw8az73+Fg==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/truffle-hdwallet-provider/node_modules/js-sha3": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/js-sha3/-/js-sha3-0.5.7.tgz", - "integrity": "sha512-GII20kjaPX0zJ8wzkTbNDYMY7msuZcTWk8S5UOh6806Jq/wz1J8/bnr8uGU0DAUmYDjj2Mr4X1cW8v/GLYnR+g==" - }, - "node_modules/truffle-hdwallet-provider/node_modules/json-buffer": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.0.tgz", - "integrity": "sha512-CuUqjv0FUZIdXkHPI8MezCnFCdaTAacej1TZYulLoAg1h/PhwkdXFN4V/gzY4g+fMBCOV2xF+rp7t2XD2ns/NQ==" - }, - "node_modules/truffle-hdwallet-provider/node_modules/jsonfile": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", - "integrity": "sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==", - "optionalDependencies": { - "graceful-fs": "^4.1.6" - } - }, - "node_modules/truffle-hdwallet-provider/node_modules/keyv": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/keyv/-/keyv-3.1.0.tgz", - "integrity": "sha512-9ykJ/46SN/9KPM/sichzQ7OvXyGDYKGTaDlKMGCAlg2UK8KRy4jb0d8sFc+0Tt0YYnThq8X2RZgCg74RPxgcVA==", - "dependencies": { - "json-buffer": "3.0.0" - } - }, - "node_modules/truffle-hdwallet-provider/node_modules/lowercase-keys": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.1.tgz", - "integrity": "sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/truffle-hdwallet-provider/node_modules/mimic-response": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz", - "integrity": "sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==", - "engines": { - "node": ">=4" - } - }, - "node_modules/truffle-hdwallet-provider/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" - }, - "node_modules/truffle-hdwallet-provider/node_modules/normalize-url": { - "version": "4.5.1", - "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-4.5.1.tgz", - "integrity": "sha512-9UZCFRHQdNrfTpGg8+1INIg93B6zE0aXMVFkw1WFwvO4SlZywU6aLg5Of0Ap/PgcbSw4LNxvMWXMeugwMCX0AA==", - "engines": { - "node": ">=8" - } - }, - "node_modules/truffle-hdwallet-provider/node_modules/oboe": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/oboe/-/oboe-2.1.4.tgz", - "integrity": "sha512-ymBJ4xSC6GBXLT9Y7lirj+xbqBLa+jADGJldGEYG7u8sZbS9GyG+u1Xk9c5cbriKwSpCg41qUhPjvU5xOpvIyQ==", - "dependencies": { - "http-https": "^1.0.0" - } - }, - "node_modules/truffle-hdwallet-provider/node_modules/p-cancelable": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-1.1.0.tgz", - "integrity": "sha512-s73XxOZ4zpt1edZYZzvhqFa6uvQc1vwUa0K0BdtIZgQMAJj9IbebH+JkgKZc9h+B05PKHLOTl4ajG1BmNrVZlw==", - "engines": { - "node": ">=6" - } - }, - "node_modules/truffle-hdwallet-provider/node_modules/prepend-http": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-1.0.4.tgz", - "integrity": "sha512-PhmXi5XmoyKw1Un4E+opM2KcsJInDvKyuOumcjjw3waw86ZNjHwVUOOWLc4bCzLdcKNaWBH9e99sbWzDQsVaYg==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/truffle-hdwallet-provider/node_modules/responselike": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/responselike/-/responselike-1.0.2.tgz", - "integrity": "sha512-/Fpe5guzJk1gPqdJLJR5u7eG/gNY4nImjbRDaVWVMRhne55TCmj2i9Q+54PBRfatRC8v/rIiv9BN0pMd9OV5EQ==", - "dependencies": { - "lowercase-keys": "^1.0.0" - } - }, - "node_modules/truffle-hdwallet-provider/node_modules/scrypt-js": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/scrypt-js/-/scrypt-js-2.0.3.tgz", - "integrity": "sha512-d8DzQxNivoNDogyYmb/9RD5mEQE/Q7vG2dLDUgvfPmKL9xCVzgqUntOdS0me9Cq9Sh9VxIZuoNEFcsfyXRnyUw==" - }, - "node_modules/truffle-hdwallet-provider/node_modules/semver": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.2.0.tgz", - "integrity": "sha512-jdFC1VdUGT/2Scgbimf7FSx9iJLXoqfglSF+gJeuNWVpiE37OIbc1jywR/GJyFdz3mnkz2/id0L0J/cr0izR5A==", - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/truffle-hdwallet-provider/node_modules/swarm-js": { - "version": "0.1.39", - "resolved": "https://registry.npmjs.org/swarm-js/-/swarm-js-0.1.39.tgz", - "integrity": "sha512-QLMqL2rzF6n5s50BptyD6Oi0R1aWlJC5Y17SRIVXRj6OR1DRIPM7nepvrxxkjA1zNzFz6mUOMjfeqeDaWB7OOg==", - "dependencies": { - "bluebird": "^3.5.0", - "buffer": "^5.0.5", - "decompress": "^4.0.0", - "eth-lib": "^0.1.26", - "fs-extra": "^4.0.2", - "got": "^7.1.0", - "mime-types": "^2.1.16", - "mkdirp-promise": "^5.0.1", - "mock-fs": "^4.1.0", - "setimmediate": "^1.0.5", - "tar": "^4.0.2", - "xhr-request-promise": "^0.1.2" - } - }, - "node_modules/truffle-hdwallet-provider/node_modules/swarm-js/node_modules/get-stream": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz", - "integrity": "sha512-GlhdIUuVakc8SJ6kK0zAFbiGzRFzNnY4jUuEbV9UROo4Y+0Ny4fjvcZFVTeDA4odpFyOQzaw6hXukJSq/f28sQ==", - "engines": { - "node": ">=4" - } - }, - "node_modules/truffle-hdwallet-provider/node_modules/swarm-js/node_modules/got": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/got/-/got-7.1.0.tgz", - "integrity": "sha512-Y5WMo7xKKq1muPsxD+KmrR8DH5auG7fBdDVueZwETwV6VytKyU9OX/ddpq2/1hp1vIPvVb4T81dKQz3BivkNLw==", - "dependencies": { - "decompress-response": "^3.2.0", - "duplexer3": "^0.1.4", - "get-stream": "^3.0.0", - "is-plain-obj": "^1.1.0", - "is-retry-allowed": "^1.0.0", - "is-stream": "^1.0.0", - "isurl": "^1.0.0-alpha5", - "lowercase-keys": "^1.0.0", - "p-cancelable": "^0.3.0", - "p-timeout": "^1.1.1", - "safe-buffer": "^5.0.1", - "timed-out": "^4.0.0", - "url-parse-lax": "^1.0.0", - "url-to-options": "^1.0.1" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/truffle-hdwallet-provider/node_modules/swarm-js/node_modules/p-cancelable": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-0.3.0.tgz", - "integrity": "sha512-RVbZPLso8+jFeq1MfNvgXtCRED2raz/dKpacfTNxsx6pLEpEomM7gah6VeHSYV3+vo0OAi4MkArtQcWWXuQoyw==", - "engines": { - "node": ">=4" - } - }, - "node_modules/truffle-hdwallet-provider/node_modules/swarm-js/node_modules/url-parse-lax": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-1.0.0.tgz", - "integrity": "sha512-BVA4lR5PIviy2PMseNd2jbFQ+jwSwQGdJejf5ctd1rEXt0Ypd7yanUK9+lYechVlN5VaTJGsu2U/3MDDu6KgBA==", - "dependencies": { - "prepend-http": "^1.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/truffle-hdwallet-provider/node_modules/underscore": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.9.1.tgz", - "integrity": "sha512-5/4etnCkd9c8gwgowi5/om/mYO5ajCaOgdzj/oW+0eQV9WxKBDZw5+ycmKmeaTXjInS/W0BzpGLo2xR2aBwZdg==" - }, - "node_modules/truffle-hdwallet-provider/node_modules/universalify": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", - "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", - "engines": { - "node": ">= 4.0.0" - } - }, - "node_modules/truffle-hdwallet-provider/node_modules/uuid": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-2.0.1.tgz", - "integrity": "sha512-nWg9+Oa3qD2CQzHIP4qKUqwNfzKn8P0LtFhotaCTFchsV7ZfDhAybeip/HZVeMIpZi9JgY1E3nUlwaCmZT1sEg==", - "deprecated": "Please upgrade to version 7 or higher. Older versions may use Math.random() in certain circumstances, which is known to be problematic. See https://v8.dev/blog/math-random for details." - }, - "node_modules/truffle-hdwallet-provider/node_modules/web3": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/web3/-/web3-1.2.1.tgz", - "integrity": "sha512-nNMzeCK0agb5i/oTWNdQ1aGtwYfXzHottFP2Dz0oGIzavPMGSKyVlr8ibVb1yK5sJBjrWVnTdGaOC2zKDFuFRw==", - "dependencies": { - "web3-bzz": "1.2.1", - "web3-core": "1.2.1", - "web3-eth": "1.2.1", - "web3-eth-personal": "1.2.1", - "web3-net": "1.2.1", - "web3-shh": "1.2.1", - "web3-utils": "1.2.1" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/truffle-hdwallet-provider/node_modules/web3-bzz": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/web3-bzz/-/web3-bzz-1.2.1.tgz", - "integrity": "sha512-LdOO44TuYbGIPfL4ilkuS89GQovxUpmLz6C1UC7VYVVRILeZS740FVB3j9V4P4FHUk1RenaDfKhcntqgVCHtjw==", - "dependencies": { - "got": "9.6.0", - "swarm-js": "0.1.39", - "underscore": "1.9.1" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/truffle-hdwallet-provider/node_modules/web3-core": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/web3-core/-/web3-core-1.2.1.tgz", - "integrity": "sha512-5ODwIqgl8oIg/0+Ai4jsLxkKFWJYE0uLuE1yUKHNVCL4zL6n3rFjRMpKPokd6id6nJCNgeA64KdWQ4XfpnjdMg==", - "dependencies": { - "web3-core-helpers": "1.2.1", - "web3-core-method": "1.2.1", - "web3-core-requestmanager": "1.2.1", - "web3-utils": "1.2.1" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/truffle-hdwallet-provider/node_modules/web3-core-helpers": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/web3-core-helpers/-/web3-core-helpers-1.2.1.tgz", - "integrity": "sha512-Gx3sTEajD5r96bJgfuW377PZVFmXIH4TdqDhgGwd2lZQCcMi+DA4TgxJNJGxn0R3aUVzyyE76j4LBrh412mXrw==", - "dependencies": { - "underscore": "1.9.1", - "web3-eth-iban": "1.2.1", - "web3-utils": "1.2.1" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/truffle-hdwallet-provider/node_modules/web3-core-method": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/web3-core-method/-/web3-core-method-1.2.1.tgz", - "integrity": "sha512-Ghg2WS23qi6Xj8Od3VCzaImLHseEA7/usvnOItluiIc5cKs00WYWsNy2YRStzU9a2+z8lwQywPYp0nTzR/QXdQ==", - "dependencies": { - "underscore": "1.9.1", - "web3-core-helpers": "1.2.1", - "web3-core-promievent": "1.2.1", - "web3-core-subscriptions": "1.2.1", - "web3-utils": "1.2.1" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/truffle-hdwallet-provider/node_modules/web3-core-promievent": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/web3-core-promievent/-/web3-core-promievent-1.2.1.tgz", - "integrity": "sha512-IVUqgpIKoeOYblwpex4Hye6npM0aMR+kU49VP06secPeN0rHMyhGF0ZGveWBrGvf8WDPI7jhqPBFIC6Jf3Q3zw==", - "dependencies": { - "any-promise": "1.3.0", - "eventemitter3": "3.1.2" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/truffle-hdwallet-provider/node_modules/web3-core-requestmanager": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/web3-core-requestmanager/-/web3-core-requestmanager-1.2.1.tgz", - "integrity": "sha512-xfknTC69RfYmLKC+83Jz73IC3/sS2ZLhGtX33D4Q5nQ8yc39ElyAolxr9sJQS8kihOcM6u4J+8gyGMqsLcpIBg==", - "dependencies": { - "underscore": "1.9.1", - "web3-core-helpers": "1.2.1", - "web3-providers-http": "1.2.1", - "web3-providers-ipc": "1.2.1", - "web3-providers-ws": "1.2.1" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/truffle-hdwallet-provider/node_modules/web3-core-subscriptions": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/web3-core-subscriptions/-/web3-core-subscriptions-1.2.1.tgz", - "integrity": "sha512-nmOwe3NsB8V8UFsY1r+sW6KjdOS68h8nuh7NzlWxBQT/19QSUGiERRTaZXWu5BYvo1EoZRMxCKyCQpSSXLc08g==", - "dependencies": { - "eventemitter3": "3.1.2", - "underscore": "1.9.1", - "web3-core-helpers": "1.2.1" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/truffle-hdwallet-provider/node_modules/web3-eth": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/web3-eth/-/web3-eth-1.2.1.tgz", - "integrity": "sha512-/2xly4Yry5FW1i+uygPjhfvgUP/MS/Dk+PDqmzp5M88tS86A+j8BzKc23GrlA8sgGs0645cpZK/999LpEF5UdA==", - "dependencies": { - "underscore": "1.9.1", - "web3-core": "1.2.1", - "web3-core-helpers": "1.2.1", - "web3-core-method": "1.2.1", - "web3-core-subscriptions": "1.2.1", - "web3-eth-abi": "1.2.1", - "web3-eth-accounts": "1.2.1", - "web3-eth-contract": "1.2.1", - "web3-eth-ens": "1.2.1", - "web3-eth-iban": "1.2.1", - "web3-eth-personal": "1.2.1", - "web3-net": "1.2.1", - "web3-utils": "1.2.1" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/truffle-hdwallet-provider/node_modules/web3-eth-abi": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/web3-eth-abi/-/web3-eth-abi-1.2.1.tgz", - "integrity": "sha512-jI/KhU2a/DQPZXHjo2GW0myEljzfiKOn+h1qxK1+Y9OQfTcBMxrQJyH5AP89O6l6NZ1QvNdq99ThAxBFoy5L+g==", - "dependencies": { - "ethers": "4.0.0-beta.3", - "underscore": "1.9.1", - "web3-utils": "1.2.1" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/truffle-hdwallet-provider/node_modules/web3-eth-accounts": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/web3-eth-accounts/-/web3-eth-accounts-1.2.1.tgz", - "integrity": "sha512-26I4qq42STQ8IeKUyur3MdQ1NzrzCqPsmzqpux0j6X/XBD7EjZ+Cs0lhGNkSKH5dI3V8CJasnQ5T1mNKeWB7nQ==", - "dependencies": { - "any-promise": "1.3.0", - "crypto-browserify": "3.12.0", - "eth-lib": "0.2.7", - "scryptsy": "2.1.0", - "semver": "6.2.0", - "underscore": "1.9.1", - "uuid": "3.3.2", - "web3-core": "1.2.1", - "web3-core-helpers": "1.2.1", - "web3-core-method": "1.2.1", - "web3-utils": "1.2.1" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/truffle-hdwallet-provider/node_modules/web3-eth-accounts/node_modules/elliptic": { - "version": "6.5.4", - "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.4.tgz", - "integrity": "sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ==", - "dependencies": { - "bn.js": "^4.11.9", - "brorand": "^1.1.0", - "hash.js": "^1.0.0", - "hmac-drbg": "^1.0.1", - "inherits": "^2.0.4", - "minimalistic-assert": "^1.0.1", - "minimalistic-crypto-utils": "^1.0.1" - } - }, - "node_modules/truffle-hdwallet-provider/node_modules/web3-eth-accounts/node_modules/eth-lib": { - "version": "0.2.7", - "resolved": "https://registry.npmjs.org/eth-lib/-/eth-lib-0.2.7.tgz", - "integrity": "sha512-VqEBQKH92jNsaE8lG9CTq8M/bc12gdAfb5MY8Ro1hVyXkh7rOtY3m5tRHK3Hus5HqIAAwU2ivcUjTLVwsvf/kw==", - "dependencies": { - "bn.js": "^4.11.6", - "elliptic": "^6.4.0", - "xhr-request-promise": "^0.1.2" - } - }, - "node_modules/truffle-hdwallet-provider/node_modules/web3-eth-accounts/node_modules/uuid": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.3.2.tgz", - "integrity": "sha512-yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA==", - "deprecated": "Please upgrade to version 7 or higher. Older versions may use Math.random() in certain circumstances, which is known to be problematic. See https://v8.dev/blog/math-random for details.", - "bin": { - "uuid": "bin/uuid" - } - }, - "node_modules/truffle-hdwallet-provider/node_modules/web3-eth-contract": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/web3-eth-contract/-/web3-eth-contract-1.2.1.tgz", - "integrity": "sha512-kYFESbQ3boC9bl2rYVghj7O8UKMiuKaiMkxvRH5cEDHil8V7MGEGZNH0slSdoyeftZVlaWSMqkRP/chfnKND0g==", - "dependencies": { - "underscore": "1.9.1", - "web3-core": "1.2.1", - "web3-core-helpers": "1.2.1", - "web3-core-method": "1.2.1", - "web3-core-promievent": "1.2.1", - "web3-core-subscriptions": "1.2.1", - "web3-eth-abi": "1.2.1", - "web3-utils": "1.2.1" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/truffle-hdwallet-provider/node_modules/web3-eth-ens": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/web3-eth-ens/-/web3-eth-ens-1.2.1.tgz", - "integrity": "sha512-lhP1kFhqZr2nnbu3CGIFFrAnNxk2veXpOXBY48Tub37RtobDyHijHgrj+xTh+mFiPokyrapVjpFsbGa+Xzye4Q==", - "dependencies": { - "eth-ens-namehash": "2.0.8", - "underscore": "1.9.1", - "web3-core": "1.2.1", - "web3-core-helpers": "1.2.1", - "web3-core-promievent": "1.2.1", - "web3-eth-abi": "1.2.1", - "web3-eth-contract": "1.2.1", - "web3-utils": "1.2.1" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/truffle-hdwallet-provider/node_modules/web3-eth-iban": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/web3-eth-iban/-/web3-eth-iban-1.2.1.tgz", - "integrity": "sha512-9gkr4QPl1jCU+wkgmZ8EwODVO3ovVj6d6JKMos52ggdT2YCmlfvFVF6wlGLwi0VvNa/p+0BjJzaqxnnG/JewjQ==", - "dependencies": { - "bn.js": "4.11.8", - "web3-utils": "1.2.1" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/truffle-hdwallet-provider/node_modules/web3-eth-iban/node_modules/bn.js": { - "version": "4.11.8", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.8.tgz", - "integrity": "sha512-ItfYfPLkWHUjckQCk8xC+LwxgK8NYcXywGigJgSwOP8Y2iyWT4f2vsZnoOXTTbo+o5yXmIUJ4gn5538SO5S3gA==" - }, - "node_modules/truffle-hdwallet-provider/node_modules/web3-eth-personal": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/web3-eth-personal/-/web3-eth-personal-1.2.1.tgz", - "integrity": "sha512-RNDVSiaSoY4aIp8+Hc7z+X72H7lMb3fmAChuSBADoEc7DsJrY/d0R5qQDK9g9t2BO8oxgLrLNyBP/9ub2Hc6Bg==", - "dependencies": { - "web3-core": "1.2.1", - "web3-core-helpers": "1.2.1", - "web3-core-method": "1.2.1", - "web3-net": "1.2.1", - "web3-utils": "1.2.1" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/truffle-hdwallet-provider/node_modules/web3-net": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/web3-net/-/web3-net-1.2.1.tgz", - "integrity": "sha512-Yt1Bs7WgnLESPe0rri/ZoPWzSy55ovioaP35w1KZydrNtQ5Yq4WcrAdhBzcOW7vAkIwrsLQsvA+hrOCy7mNauw==", - "dependencies": { - "web3-core": "1.2.1", - "web3-core-method": "1.2.1", - "web3-utils": "1.2.1" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/truffle-hdwallet-provider/node_modules/web3-providers-http": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/web3-providers-http/-/web3-providers-http-1.2.1.tgz", - "integrity": "sha512-BDtVUVolT9b3CAzeGVA/np1hhn7RPUZ6YYGB/sYky+GjeO311Yoq8SRDUSezU92x8yImSC2B+SMReGhd1zL+bQ==", - "dependencies": { - "web3-core-helpers": "1.2.1", - "xhr2-cookies": "1.1.0" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/truffle-hdwallet-provider/node_modules/web3-providers-ipc": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/web3-providers-ipc/-/web3-providers-ipc-1.2.1.tgz", - "integrity": "sha512-oPEuOCwxVx8L4CPD0TUdnlOUZwGBSRKScCz/Ws2YHdr9Ium+whm+0NLmOZjkjQp5wovQbyBzNa6zJz1noFRvFA==", - "dependencies": { - "oboe": "2.1.4", - "underscore": "1.9.1", - "web3-core-helpers": "1.2.1" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/truffle-hdwallet-provider/node_modules/web3-providers-ws": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/web3-providers-ws/-/web3-providers-ws-1.2.1.tgz", - "integrity": "sha512-oqsQXzu+ejJACVHy864WwIyw+oB21nw/pI65/sD95Zi98+/HQzFfNcIFneF1NC4bVF3VNX4YHTNq2I2o97LAiA==", - "dependencies": { - "underscore": "1.9.1", - "web3-core-helpers": "1.2.1", - "websocket": "github:web3-js/WebSocket-Node#polyfill/globalThis" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/truffle-hdwallet-provider/node_modules/web3-shh": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/web3-shh/-/web3-shh-1.2.1.tgz", - "integrity": "sha512-/3Cl04nza5kuFn25bV3FJWa0s3Vafr5BlT933h26xovQ6HIIz61LmvNQlvX1AhFL+SNJOTcQmK1SM59vcyC8bA==", - "dependencies": { - "web3-core": "1.2.1", - "web3-core-method": "1.2.1", - "web3-core-subscriptions": "1.2.1", - "web3-net": "1.2.1" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/truffle-hdwallet-provider/node_modules/web3-utils": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/web3-utils/-/web3-utils-1.2.1.tgz", - "integrity": "sha512-Mrcn3l58L+yCKz3zBryM6JZpNruWuT0OCbag8w+reeNROSGVlXzUQkU+gtAwc9JCZ7tKUyg67+2YUGqUjVcyBA==", - "dependencies": { - "bn.js": "4.11.8", - "eth-lib": "0.2.7", - "ethjs-unit": "0.1.6", - "number-to-bn": "1.7.0", - "randomhex": "0.1.5", - "underscore": "1.9.1", - "utf8": "3.0.0" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/truffle-hdwallet-provider/node_modules/web3-utils/node_modules/bn.js": { - "version": "4.11.8", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.8.tgz", - "integrity": "sha512-ItfYfPLkWHUjckQCk8xC+LwxgK8NYcXywGigJgSwOP8Y2iyWT4f2vsZnoOXTTbo+o5yXmIUJ4gn5538SO5S3gA==" - }, - "node_modules/truffle-hdwallet-provider/node_modules/web3-utils/node_modules/elliptic": { - "version": "6.5.4", - "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.4.tgz", - "integrity": "sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ==", - "dependencies": { - "bn.js": "^4.11.9", - "brorand": "^1.1.0", - "hash.js": "^1.0.0", - "hmac-drbg": "^1.0.1", - "inherits": "^2.0.4", - "minimalistic-assert": "^1.0.1", - "minimalistic-crypto-utils": "^1.0.1" - } - }, - "node_modules/truffle-hdwallet-provider/node_modules/web3-utils/node_modules/elliptic/node_modules/bn.js": { - "version": "4.12.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==" - }, - "node_modules/truffle-hdwallet-provider/node_modules/web3-utils/node_modules/eth-lib": { - "version": "0.2.7", - "resolved": "https://registry.npmjs.org/eth-lib/-/eth-lib-0.2.7.tgz", - "integrity": "sha512-VqEBQKH92jNsaE8lG9CTq8M/bc12gdAfb5MY8Ro1hVyXkh7rOtY3m5tRHK3Hus5HqIAAwU2ivcUjTLVwsvf/kw==", - "dependencies": { - "bn.js": "^4.11.6", - "elliptic": "^6.4.0", - "xhr-request-promise": "^0.1.2" - } - }, - "node_modules/truffle-hdwallet-provider/node_modules/websocket": { - "version": "1.0.29", - "resolved": "git+ssh://git@github.com/web3-js/WebSocket-Node.git#ef5ea2f41daf4a2113b80c9223df884b4d56c400", - "hasInstallScript": true, - "license": "Apache-2.0", - "dependencies": { - "debug": "^2.2.0", - "es5-ext": "^0.10.50", - "nan": "^2.14.0", - "typedarray-to-buffer": "^3.1.5", - "yaeti": "^0.0.6" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/ts-command-line-args": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/ts-command-line-args/-/ts-command-line-args-2.5.0.tgz", - "integrity": "sha512-Ff7Xt04WWCjj/cmPO9eWTJX3qpBZWuPWyQYG1vnxJao+alWWYjwJBc5aYz3h5p5dE08A6AnpkgiCtP/0KXXBYw==", - "dev": true, - "dependencies": { - "@morgan-stanley/ts-mocking-bird": "^0.6.2", - "chalk": "^4.1.0", - "command-line-args": "^5.1.1", - "command-line-usage": "^6.1.0", - "string-format": "^2.0.0" - }, - "bin": { - "write-markdown": "dist/write-markdown.js" - } - }, - "node_modules/ts-essentials": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/ts-essentials/-/ts-essentials-7.0.3.tgz", - "integrity": "sha512-8+gr5+lqO3G84KdiTSMRLtuyJ+nTBVRKuCrK4lidMPdVeEp0uqC875uE5NMcaA7YYMN7XsNiFQuMvasF8HT/xQ==", - "dev": true, - "peerDependencies": { - "typescript": ">=3.7.0" - } - }, - "node_modules/ts-node": { - "version": "9.1.1", - "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-9.1.1.tgz", - "integrity": "sha512-hPlt7ZACERQGf03M253ytLY3dHbGNGrAq9qIHWUY9XHYl1z7wYngSr3OQ5xmui8o2AaxsONxIzjafLUiWBo1Fg==", - "optional": true, - "peer": true, - "dependencies": { - "arg": "^4.1.0", - "create-require": "^1.1.0", - "diff": "^4.0.1", - "make-error": "^1.1.1", - "source-map-support": "^0.5.17", - "yn": "3.1.1" - }, - "bin": { - "ts-node": "dist/bin.js", - "ts-node-script": "dist/bin-script.js", - "ts-node-transpile-only": "dist/bin-transpile.js", - "ts-script": "dist/bin-script-deprecated.js" - }, - "engines": { - "node": ">=10.0.0" - }, - "peerDependencies": { - "typescript": ">=2.7" - } - }, - "node_modules/ts-node/node_modules/diff": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", - "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", - "optional": true, - "peer": true, - "engines": { - "node": ">=0.3.1" - } - }, - "node_modules/tslib": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", - "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==" - }, - "node_modules/tsort": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/tsort/-/tsort-0.0.1.tgz", - "integrity": "sha512-Tyrf5mxF8Ofs1tNoxA13lFeZ2Zrbd6cKbuH3V+MQ5sb6DtBj5FjrXVsRWT8YvNAQTqNoz66dz1WsbigI22aEnw==" - }, - "node_modules/tunnel-agent": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", - "integrity": "sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==", - "dependencies": { - "safe-buffer": "^5.0.1" - }, - "engines": { - "node": "*" - } - }, - "node_modules/tweetnacl": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-1.0.3.tgz", - "integrity": "sha512-6rt+RN7aOi1nGMyC4Xa5DdYiukl2UWCbcJft7YhxReBGQD7OAM8Pbxw6YMo4r2diNEA8FEmu32YOn9rhaiE5yw==" - }, - "node_modules/tweetnacl-util": { - "version": "0.15.1", - "resolved": "https://registry.npmjs.org/tweetnacl-util/-/tweetnacl-util-0.15.1.tgz", - "integrity": "sha512-RKJBIj8lySrShN4w6i/BonWp2Z/uxwC3h4y7xsRrpP59ZboCd0GpEVsOnMDYLMmKBpYhb5TgHzZXy7wTfYFBRw==" - }, - "node_modules/type": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/type/-/type-1.2.0.tgz", - "integrity": "sha512-+5nt5AAniqsCnu2cEQQdpzCAh33kVx8n0VoFidKpB1dVVLAN/F+bgVOqOJqOnEnrhp222clB5p3vUlD+1QAnfg==" - }, - "node_modules/type-detect": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", - "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==", - "engines": { - "node": ">=4" - } - }, - "node_modules/type-fest": { - "version": "0.21.3", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", - "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/type-is": { - "version": "1.6.18", - "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", - "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", - "dependencies": { - "media-typer": "0.3.0", - "mime-types": "~2.1.24" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/typechain": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/typechain/-/typechain-8.1.1.tgz", - "integrity": "sha512-uF/sUvnXTOVF2FHKhQYnxHk4su4JjZR8vr4mA2mBaRwHTbwh0jIlqARz9XJr1tA0l7afJGvEa1dTSi4zt039LQ==", - "dev": true, - "dependencies": { - "@types/prettier": "^2.1.1", - "debug": "^4.3.1", - "fs-extra": "^7.0.0", - "glob": "7.1.7", - "js-sha3": "^0.8.0", - "lodash": "^4.17.15", - "mkdirp": "^1.0.4", - "prettier": "^2.3.1", - "ts-command-line-args": "^2.2.0", - "ts-essentials": "^7.0.1" - }, - "bin": { - "typechain": "dist/cli/cli.js" - }, - "peerDependencies": { - "typescript": ">=4.3.0" - } - }, - "node_modules/typechain/node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dev": true, - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/typechain/node_modules/fs-extra": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-7.0.1.tgz", - "integrity": "sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==", - "dev": true, - "dependencies": { - "graceful-fs": "^4.1.2", - "jsonfile": "^4.0.0", - "universalify": "^0.1.0" - }, - "engines": { - "node": ">=6 <7 || >=8" - } - }, - "node_modules/typechain/node_modules/glob": { - "version": "7.1.7", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.7.tgz", - "integrity": "sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ==", - "dev": true, - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "engines": { - "node": "*" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/typechain/node_modules/jsonfile": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", - "integrity": "sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==", - "dev": true, - "optionalDependencies": { - "graceful-fs": "^4.1.6" - } - }, - "node_modules/typechain/node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dev": true, - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, - "node_modules/typechain/node_modules/mkdirp": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", - "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", - "dev": true, - "bin": { - "mkdirp": "bin/cmd.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/typechain/node_modules/universalify": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", - "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", - "dev": true, - "engines": { - "node": ">= 4.0.0" - } - }, - "node_modules/typed-function": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/typed-function/-/typed-function-4.1.0.tgz", - "integrity": "sha512-DGwUl6cioBW5gw2L+6SMupGwH/kZOqivy17E4nsh1JI9fKF87orMmlQx3KISQPmg3sfnOUGlwVkroosvgddrlg==", - "engines": { - "node": ">= 14" - } - }, - "node_modules/typedarray": { - "version": "0.0.6", - "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", - "integrity": "sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA==" - }, - "node_modules/typedarray-to-buffer": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz", - "integrity": "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==", - "dependencies": { - "is-typedarray": "^1.0.0" - } - }, - "node_modules/typescript": { - "version": "5.2.2", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.2.2.tgz", - "integrity": "sha512-mI4WrpHsbCIcwT9cF4FZvr80QUeKvsUsUvKDoR+X/7XHQH98xYD8YHZg7ANtz2GtZt/CBq2QJ0thkGJMHfqc1w==", - "bin": { - "tsc": "bin/tsc", - "tsserver": "bin/tsserver" - }, - "engines": { - "node": ">=14.17" - } - }, - "node_modules/typescript-compare": { - "version": "0.0.2", - "resolved": "https://registry.npmjs.org/typescript-compare/-/typescript-compare-0.0.2.tgz", - "integrity": "sha512-8ja4j7pMHkfLJQO2/8tut7ub+J3Lw2S3061eJLFQcvs3tsmJKp8KG5NtpLn7KcY2w08edF74BSVN7qJS0U6oHA==", - "dependencies": { - "typescript-logic": "^0.0.0" - } - }, - "node_modules/typescript-logic": { - "version": "0.0.0", - "resolved": "https://registry.npmjs.org/typescript-logic/-/typescript-logic-0.0.0.tgz", - "integrity": "sha512-zXFars5LUkI3zP492ls0VskH3TtdeHCqu0i7/duGt60i5IGPIpAHE/DWo5FqJ6EjQ15YKXrt+AETjv60Dat34Q==" - }, - "node_modules/typescript-tuple": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/typescript-tuple/-/typescript-tuple-2.2.1.tgz", - "integrity": "sha512-Zcr0lbt8z5ZdEzERHAMAniTiIKerFCMgd7yjq1fPnDJ43et/k9twIFQMUYff9k5oXcsQ0WpvFcgzK2ZKASoW6Q==", - "dependencies": { - "typescript-compare": "^0.0.2" - } - }, - "node_modules/typical": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/typical/-/typical-4.0.0.tgz", - "integrity": "sha512-VAH4IvQ7BDFYglMd7BPRDfLgxZZX4O4TFcRDA6EN5X7erNJJq+McIEp8np9aVtxrCJ6qx4GTYVfOWNjcqwZgRw==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/u2f-api": { - "version": "0.2.7", - "resolved": "https://registry.npmjs.org/u2f-api/-/u2f-api-0.2.7.tgz", - "integrity": "sha512-fqLNg8vpvLOD5J/z4B6wpPg4Lvowz1nJ9xdHcCzdUPKcFE/qNCceV2gNZxSJd5vhAZemHr/K/hbzVA0zxB5mkg==" - }, - "node_modules/ultron": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/ultron/-/ultron-1.1.1.tgz", - "integrity": "sha512-UIEXBNeYmKptWH6z8ZnqTeS8fV74zG0/eRU9VGkpzz+LIJNs8W/zM/L+7ctCkRrgbNnnR0xxw4bKOr0cW0N0Og==" - }, - "node_modules/unbox-primitive": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.2.tgz", - "integrity": "sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==", - "dependencies": { - "call-bind": "^1.0.2", - "has-bigints": "^1.0.2", - "has-symbols": "^1.0.3", - "which-boxed-primitive": "^1.0.2" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/unbzip2-stream": { - "version": "1.4.3", - "resolved": "https://registry.npmjs.org/unbzip2-stream/-/unbzip2-stream-1.4.3.tgz", - "integrity": "sha512-mlExGW4w71ebDJviH16lQLtZS32VKqsSfk80GCfUlwT/4/hNRFsoscrF/c++9xinkMzECL1uL9DDwXqFWkruPg==", - "dependencies": { - "buffer": "^5.2.1", - "through": "^2.3.8" - } - }, - "node_modules/unbzip2-stream/node_modules/buffer": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", - "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "dependencies": { - "base64-js": "^1.3.1", - "ieee754": "^1.1.13" - } - }, - "node_modules/undefsafe": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/undefsafe/-/undefsafe-2.0.5.tgz", - "integrity": "sha512-WxONCrssBM8TSPRqN5EmsjVrsv4A8X12J4ArBiiayv3DyyG3ZlIg6yysuuSYdZsVz3TKcTg2fd//Ujd4CHV1iA==" - }, - "node_modules/underscore": { - "version": "1.13.6", - "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.13.6.tgz", - "integrity": "sha512-+A5Sja4HP1M08MaXya7p5LvjuM7K6q/2EaC0+iovj/wOcMsTzMvDFbasi/oSapiwOlt252IqsKqPjCl7huKS0A==", - "dev": true - }, - "node_modules/undici": { - "version": "5.21.0", - "resolved": "https://registry.npmjs.org/undici/-/undici-5.21.0.tgz", - "integrity": "sha512-HOjK8l6a57b2ZGXOcUsI5NLfoTrfmbOl90ixJDl0AEFG4wgHNDQxtZy15/ZQp7HhjkpaGlp/eneMgtsu1dIlUA==", - "dependencies": { - "busboy": "^1.6.0" - }, - "engines": { - "node": ">=12.18" - } - }, - "node_modules/unfetch": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/unfetch/-/unfetch-4.2.0.tgz", - "integrity": "sha512-F9p7yYCn6cIW9El1zi0HI6vqpeIvBsr3dSuRO6Xuppb1u5rXpCPmMvLSyECLhybr9isec8Ohl0hPekMVrEinDA==", - "dev": true - }, - "node_modules/unit-fns": { - "version": "0.1.9", - "resolved": "https://registry.npmjs.org/unit-fns/-/unit-fns-0.1.9.tgz", - "integrity": "sha512-bxceIkc7n2icQmgQx8u3vX98ZBIcpL2YJDKIsWDFK7ZX1TTuLvtNWVNd9/oARCDHd7QQRzwc+zxabO0HSK8X0w==", - "engines": { - "node": ">=10" - } - }, - "node_modules/universalify": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", - "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", - "engines": { - "node": ">= 10.0.0" - } - }, - "node_modules/unpipe": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", - "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/update-browserslist-db": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.10.tgz", - "integrity": "sha512-OztqDenkfFkbSG+tRxBeAnCVPckDBcvibKd35yDONx6OU8N7sqgwc7rCbkJ/WcYtVRZ4ba68d6byhC21GFh7sQ==", - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/browserslist" - } - ], - "dependencies": { - "escalade": "^3.1.1", - "picocolors": "^1.0.0" - }, - "bin": { - "browserslist-lint": "cli.js" - }, - "peerDependencies": { - "browserslist": ">= 4.21.0" - } - }, - "node_modules/upper-case": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/upper-case/-/upper-case-1.1.3.tgz", - "integrity": "sha512-WRbjgmYzgXkCV7zNVpy5YgrHgbBv126rMALQQMrmzOVC4GM2waQ9x7xtm8VU+1yF2kWyPzI9zbZ48n4vSxwfSA==" - }, - "node_modules/upper-case-first": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/upper-case-first/-/upper-case-first-1.1.2.tgz", - "integrity": "sha512-wINKYvI3Db8dtjikdAqoBbZoP6Q+PZUyfMR7pmwHzjC2quzSkUq5DmPrTtPEqHaz8AGtmsB4TqwapMTM1QAQOQ==", - "dependencies": { - "upper-case": "^1.1.1" - } - }, - "node_modules/uri-js": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", - "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", - "dependencies": { - "punycode": "^2.1.0" - } - }, - "node_modules/url": { - "version": "0.11.0", - "resolved": "https://registry.npmjs.org/url/-/url-0.11.0.tgz", - "integrity": "sha512-kbailJa29QrtXnxgq+DdCEGlbTeYM2eJUxsz6vjZavrCYPMIFHMKQmSKYAIuUK2i7hgPm28a8piX5NTUtM/LKQ==", - "dev": true, - "dependencies": { - "punycode": "1.3.2", - "querystring": "0.2.0" - } - }, - "node_modules/url-parse-lax": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-3.0.0.tgz", - "integrity": "sha512-NjFKA0DidqPa5ciFcSrXnAltTtzz84ogy+NebPvfEgAck0+TNg4UJ4IN+fB7zRZfbgUf0syOo9MDxFkDSMuFaQ==", - "dependencies": { - "prepend-http": "^2.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/url-set-query": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/url-set-query/-/url-set-query-1.0.0.tgz", - "integrity": "sha512-3AChu4NiXquPfeckE5R5cGdiHCMWJx1dwCWOmWIL4KHAziJNOFIYJlpGFeKDvwLPHovZRCxK3cYlwzqI9Vp+Gg==" - }, - "node_modules/url-to-options": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/url-to-options/-/url-to-options-1.0.1.tgz", - "integrity": "sha512-0kQLIzG4fdk/G5NONku64rSH/x32NOA39LVQqlK8Le6lvTF6GGRJpqaQFGgU+CLwySIqBSMdwYM0sYcW9f6P4A==", - "engines": { - "node": ">= 4" - } - }, - "node_modules/url/node_modules/punycode": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.3.2.tgz", - "integrity": "sha512-RofWgt/7fL5wP1Y7fxE7/EmTLzQVnB0ycyibJ0OOHIlJqTNzglYFxVwETOcIoJqJmpDXJ9xImDv+Fq34F/d4Dw==", - "dev": true - }, - "node_modules/utf-8-validate": { - "version": "5.0.10", - "resolved": "https://registry.npmjs.org/utf-8-validate/-/utf-8-validate-5.0.10.tgz", - "integrity": "sha512-Z6czzLq4u8fPOyx7TU6X3dvUZVvoJmxSQ+IcrlmagKhilxlhZgxPK6C5Jqbkw1IDUmFTM+cz9QDnnLTwDz/2gQ==", - "hasInstallScript": true, - "dependencies": { - "node-gyp-build": "^4.3.0" - }, - "engines": { - "node": ">=6.14.2" - } - }, - "node_modules/utf8": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/utf8/-/utf8-3.0.0.tgz", - "integrity": "sha512-E8VjFIQ/TyQgp+TZfS6l8yp/xWppSAHzidGiRrqe4bK4XP9pTRyKFgGJpO3SN7zdX4DeomTrwaseCHovfpFcqQ==" - }, - "node_modules/util": { - "version": "0.12.5", - "resolved": "https://registry.npmjs.org/util/-/util-0.12.5.tgz", - "integrity": "sha512-kZf/K6hEIrWHI6XqOFUiiMa+79wE/D8Q+NCNAWclkyg3b4d2k7s0QGepNjiABc+aR3N1PAyHL7p6UcLY6LmrnA==", - "dependencies": { - "inherits": "^2.0.3", - "is-arguments": "^1.0.4", - "is-generator-function": "^1.0.7", - "is-typed-array": "^1.1.3", - "which-typed-array": "^1.1.2" - } - }, - "node_modules/util-deprecate": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==" - }, - "node_modules/utils-merge": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", - "integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==", - "engines": { - "node": ">= 0.4.0" - } - }, - "node_modules/uuid": { - "version": "8.3.2", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", - "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", - "bin": { - "uuid": "dist/bin/uuid" - } - }, - "node_modules/validate-npm-package-license": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", - "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", - "dependencies": { - "spdx-correct": "^3.0.0", - "spdx-expression-parse": "^3.0.0" - } - }, - "node_modules/value-or-promise": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/value-or-promise/-/value-or-promise-1.0.11.tgz", - "integrity": "sha512-41BrgH+dIbCFXClcSapVs5M6GkENd3gQOJpEfPDNa71LsUGMXDL0jMWpI/Rh7WhX+Aalfz2TTS3Zt5pUsbnhLg==", - "optional": true, - "engines": { - "node": ">=12" - } - }, - "node_modules/varint": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/varint/-/varint-5.0.2.tgz", - "integrity": "sha512-lKxKYG6H03yCZUpAGOPOsMcGxd1RHCu1iKvEHYDPmTyq2HueGhD73ssNBqqQWfvYs04G9iUFRvmAVLW20Jw6ow==" - }, - "node_modules/vary": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", - "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/verror": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", - "integrity": "sha512-ZZKSmDAEFOijERBLkmYfJ+vmk3w+7hOLYDNkRCuRuMJGEmqYNCNLyBBFwWKVMhfwaEF3WOd0Zlw86U/WC/+nYw==", - "engines": [ - "node >=0.6.0" - ], - "dependencies": { - "assert-plus": "^1.0.0", - "core-util-is": "1.0.2", - "extsprintf": "^1.2.0" - } - }, - "node_modules/vuvuzela": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/vuvuzela/-/vuvuzela-1.0.3.tgz", - "integrity": "sha512-Tm7jR1xTzBbPW+6y1tknKiEhz04Wf/1iZkcTJjSFcpNko43+dFW6+OOeQe9taJIug3NdfUAjFKgUSyQrIKaDvQ==", - "optional": true - }, - "node_modules/web3": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/web3/-/web3-1.10.0.tgz", - "integrity": "sha512-YfKY9wSkGcM8seO+daR89oVTcbu18NsVfvOngzqMYGUU0pPSQmE57qQDvQzUeoIOHAnXEBNzrhjQJmm8ER0rng==", - "hasInstallScript": true, - "dependencies": { - "web3-bzz": "1.10.0", - "web3-core": "1.10.0", - "web3-eth": "1.10.0", - "web3-eth-personal": "1.10.0", - "web3-net": "1.10.0", - "web3-shh": "1.10.0", - "web3-utils": "1.10.0" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/web3-bzz": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/web3-bzz/-/web3-bzz-1.10.0.tgz", - "integrity": "sha512-o9IR59io3pDUsXTsps5pO5hW1D5zBmg46iNc2t4j2DkaYHNdDLwk2IP9ukoM2wg47QILfPEJYzhTfkS/CcX0KA==", - "hasInstallScript": true, - "dependencies": { - "@types/node": "^12.12.6", - "got": "12.1.0", - "swarm-js": "^0.1.40" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/web3-bzz/node_modules/@types/node": { - "version": "12.20.55", - "resolved": "https://registry.npmjs.org/@types/node/-/node-12.20.55.tgz", - "integrity": "sha512-J8xLz7q2OFulZ2cyGTLE1TbbZcjpno7FaN6zdJNrgAdrJ+DZzh/uFR6YrTb4C+nXakvud8Q4+rbhoIWlYQbUFQ==" - }, - "node_modules/web3-core": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/web3-core/-/web3-core-1.10.0.tgz", - "integrity": "sha512-fWySwqy2hn3TL89w5TM8wXF1Z2Q6frQTKHWmP0ppRQorEK8NcHJRfeMiv/mQlSKoTS1F6n/nv2uyZsixFycjYQ==", - "dependencies": { - "@types/bn.js": "^5.1.1", - "@types/node": "^12.12.6", - "bignumber.js": "^9.0.0", - "web3-core-helpers": "1.10.0", - "web3-core-method": "1.10.0", - "web3-core-requestmanager": "1.10.0", - "web3-utils": "1.10.0" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/web3-core-helpers": { - "version": "1.8.2", - "resolved": "https://registry.npmjs.org/web3-core-helpers/-/web3-core-helpers-1.8.2.tgz", - "integrity": "sha512-6B1eLlq9JFrfealZBomd1fmlq1o4A09vrCVQSa51ANoib/jllT3atZrRDr0zt1rfI7TSZTZBXdN/aTdeN99DWw==", - "dev": true, - "dependencies": { - "web3-eth-iban": "1.8.2", - "web3-utils": "1.8.2" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/web3-core-helpers/node_modules/web3-utils": { - "version": "1.8.2", - "resolved": "https://registry.npmjs.org/web3-utils/-/web3-utils-1.8.2.tgz", - "integrity": "sha512-v7j6xhfLQfY7xQDrUP0BKbaNrmZ2/+egbqP9q3KYmOiPpnvAfol+32slgL0WX/5n8VPvKCK5EZ1HGrAVICSToA==", - "dev": true, - "dependencies": { - "bn.js": "^5.2.1", - "ethereum-bloom-filters": "^1.0.6", - "ethereumjs-util": "^7.1.0", - "ethjs-unit": "0.1.6", - "number-to-bn": "1.7.0", - "randombytes": "^2.1.0", - "utf8": "3.0.0" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/web3-core-method": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/web3-core-method/-/web3-core-method-1.10.0.tgz", - "integrity": "sha512-4R700jTLAMKDMhQ+nsVfIXvH6IGJlJzGisIfMKWAIswH31h5AZz7uDUW2YctI+HrYd+5uOAlS4OJeeT9bIpvkA==", - "dependencies": { - "@ethersproject/transactions": "^5.6.2", - "web3-core-helpers": "1.10.0", - "web3-core-promievent": "1.10.0", - "web3-core-subscriptions": "1.10.0", - "web3-utils": "1.10.0" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/web3-core-method/node_modules/eventemitter3": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.4.tgz", - "integrity": "sha512-rlaVLnVxtxvoyLsQQFBx53YmXHDxRIzzTLbdfxqi4yocpSjAxXwkU0cScM5JgSKMqEhrZpnvQ2D9gjylR0AimQ==" - }, - "node_modules/web3-core-method/node_modules/web3-core-helpers": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/web3-core-helpers/-/web3-core-helpers-1.10.0.tgz", - "integrity": "sha512-pIxAzFDS5vnbXvfvLSpaA1tfRykAe9adw43YCKsEYQwH0gCLL0kMLkaCX3q+Q8EVmAh+e1jWL/nl9U0de1+++g==", - "dependencies": { - "web3-eth-iban": "1.10.0", - "web3-utils": "1.10.0" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/web3-core-method/node_modules/web3-core-promievent": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/web3-core-promievent/-/web3-core-promievent-1.10.0.tgz", - "integrity": "sha512-68N7k5LWL5R38xRaKFrTFT2pm2jBNFaM4GioS00YjAKXRQ3KjmhijOMG3TICz6Aa5+6GDWYelDNx21YAeZ4YTg==", - "dependencies": { - "eventemitter3": "4.0.4" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/web3-core-method/node_modules/web3-eth-iban": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/web3-eth-iban/-/web3-eth-iban-1.10.0.tgz", - "integrity": "sha512-0l+SP3IGhInw7Q20LY3IVafYEuufo4Dn75jAHT7c2aDJsIolvf2Lc6ugHkBajlwUneGfbRQs/ccYPQ9JeMUbrg==", - "dependencies": { - "bn.js": "^5.2.1", - "web3-utils": "1.10.0" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/web3-core-promievent": { - "version": "1.8.2", - "resolved": "https://registry.npmjs.org/web3-core-promievent/-/web3-core-promievent-1.8.2.tgz", - "integrity": "sha512-nvkJWDVgoOSsolJldN33tKW6bKKRJX3MCPDYMwP5SUFOA/mCzDEoI88N0JFofDTXkh1k7gOqp1pvwi9heuaxGg==", - "dev": true, - "dependencies": { - "eventemitter3": "4.0.4" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/web3-core-promievent/node_modules/eventemitter3": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.4.tgz", - "integrity": "sha512-rlaVLnVxtxvoyLsQQFBx53YmXHDxRIzzTLbdfxqi4yocpSjAxXwkU0cScM5JgSKMqEhrZpnvQ2D9gjylR0AimQ==", - "dev": true - }, - "node_modules/web3-core-requestmanager": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/web3-core-requestmanager/-/web3-core-requestmanager-1.10.0.tgz", - "integrity": "sha512-3z/JKE++Os62APml4dvBM+GAuId4h3L9ckUrj7ebEtS2AR0ixyQPbrBodgL91Sv7j7cQ3Y+hllaluqjguxvSaQ==", - "dependencies": { - "util": "^0.12.5", - "web3-core-helpers": "1.10.0", - "web3-providers-http": "1.10.0", - "web3-providers-ipc": "1.10.0", - "web3-providers-ws": "1.10.0" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/web3-core-requestmanager/node_modules/web3-core-helpers": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/web3-core-helpers/-/web3-core-helpers-1.10.0.tgz", - "integrity": "sha512-pIxAzFDS5vnbXvfvLSpaA1tfRykAe9adw43YCKsEYQwH0gCLL0kMLkaCX3q+Q8EVmAh+e1jWL/nl9U0de1+++g==", - "dependencies": { - "web3-eth-iban": "1.10.0", - "web3-utils": "1.10.0" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/web3-core-requestmanager/node_modules/web3-eth-iban": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/web3-eth-iban/-/web3-eth-iban-1.10.0.tgz", - "integrity": "sha512-0l+SP3IGhInw7Q20LY3IVafYEuufo4Dn75jAHT7c2aDJsIolvf2Lc6ugHkBajlwUneGfbRQs/ccYPQ9JeMUbrg==", - "dependencies": { - "bn.js": "^5.2.1", - "web3-utils": "1.10.0" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/web3-core-subscriptions": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/web3-core-subscriptions/-/web3-core-subscriptions-1.10.0.tgz", - "integrity": "sha512-HGm1PbDqsxejI075gxBc5OSkwymilRWZufIy9zEpnWKNmfbuv5FfHgW1/chtJP6aP3Uq2vHkvTDl3smQBb8l+g==", - "dependencies": { - "eventemitter3": "4.0.4", - "web3-core-helpers": "1.10.0" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/web3-core-subscriptions/node_modules/eventemitter3": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.4.tgz", - "integrity": "sha512-rlaVLnVxtxvoyLsQQFBx53YmXHDxRIzzTLbdfxqi4yocpSjAxXwkU0cScM5JgSKMqEhrZpnvQ2D9gjylR0AimQ==" - }, - "node_modules/web3-core-subscriptions/node_modules/web3-core-helpers": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/web3-core-helpers/-/web3-core-helpers-1.10.0.tgz", - "integrity": "sha512-pIxAzFDS5vnbXvfvLSpaA1tfRykAe9adw43YCKsEYQwH0gCLL0kMLkaCX3q+Q8EVmAh+e1jWL/nl9U0de1+++g==", - "dependencies": { - "web3-eth-iban": "1.10.0", - "web3-utils": "1.10.0" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/web3-core-subscriptions/node_modules/web3-eth-iban": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/web3-eth-iban/-/web3-eth-iban-1.10.0.tgz", - "integrity": "sha512-0l+SP3IGhInw7Q20LY3IVafYEuufo4Dn75jAHT7c2aDJsIolvf2Lc6ugHkBajlwUneGfbRQs/ccYPQ9JeMUbrg==", - "dependencies": { - "bn.js": "^5.2.1", - "web3-utils": "1.10.0" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/web3-core/node_modules/@types/node": { - "version": "12.20.55", - "resolved": "https://registry.npmjs.org/@types/node/-/node-12.20.55.tgz", - "integrity": "sha512-J8xLz7q2OFulZ2cyGTLE1TbbZcjpno7FaN6zdJNrgAdrJ+DZzh/uFR6YrTb4C+nXakvud8Q4+rbhoIWlYQbUFQ==" - }, - "node_modules/web3-core/node_modules/web3-core-helpers": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/web3-core-helpers/-/web3-core-helpers-1.10.0.tgz", - "integrity": "sha512-pIxAzFDS5vnbXvfvLSpaA1tfRykAe9adw43YCKsEYQwH0gCLL0kMLkaCX3q+Q8EVmAh+e1jWL/nl9U0de1+++g==", - "dependencies": { - "web3-eth-iban": "1.10.0", - "web3-utils": "1.10.0" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/web3-core/node_modules/web3-eth-iban": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/web3-eth-iban/-/web3-eth-iban-1.10.0.tgz", - "integrity": "sha512-0l+SP3IGhInw7Q20LY3IVafYEuufo4Dn75jAHT7c2aDJsIolvf2Lc6ugHkBajlwUneGfbRQs/ccYPQ9JeMUbrg==", - "dependencies": { - "bn.js": "^5.2.1", - "web3-utils": "1.10.0" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/web3-eth": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/web3-eth/-/web3-eth-1.10.0.tgz", - "integrity": "sha512-Z5vT6slNMLPKuwRyKGbqeGYC87OAy8bOblaqRTgg94CXcn/mmqU7iPIlG4506YdcdK3x6cfEDG7B6w+jRxypKA==", - "dependencies": { - "web3-core": "1.10.0", - "web3-core-helpers": "1.10.0", - "web3-core-method": "1.10.0", - "web3-core-subscriptions": "1.10.0", - "web3-eth-abi": "1.10.0", - "web3-eth-accounts": "1.10.0", - "web3-eth-contract": "1.10.0", - "web3-eth-ens": "1.10.0", - "web3-eth-iban": "1.10.0", - "web3-eth-personal": "1.10.0", - "web3-net": "1.10.0", - "web3-utils": "1.10.0" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/web3-eth-abi": { - "version": "1.8.2", - "resolved": "https://registry.npmjs.org/web3-eth-abi/-/web3-eth-abi-1.8.2.tgz", - "integrity": "sha512-Om9g3kaRNjqiNPAgKwGT16y+ZwtBzRe4ZJFGjLiSs6v5I7TPNF+rRMWuKnR6jq0azQZDj6rblvKFMA49/k48Og==", - "dev": true, - "dependencies": { - "@ethersproject/abi": "^5.6.3", - "web3-utils": "1.8.2" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/web3-eth-abi/node_modules/web3-utils": { - "version": "1.8.2", - "resolved": "https://registry.npmjs.org/web3-utils/-/web3-utils-1.8.2.tgz", - "integrity": "sha512-v7j6xhfLQfY7xQDrUP0BKbaNrmZ2/+egbqP9q3KYmOiPpnvAfol+32slgL0WX/5n8VPvKCK5EZ1HGrAVICSToA==", - "dev": true, - "dependencies": { - "bn.js": "^5.2.1", - "ethereum-bloom-filters": "^1.0.6", - "ethereumjs-util": "^7.1.0", - "ethjs-unit": "0.1.6", - "number-to-bn": "1.7.0", - "randombytes": "^2.1.0", - "utf8": "3.0.0" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/web3-eth-accounts": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/web3-eth-accounts/-/web3-eth-accounts-1.10.0.tgz", - "integrity": "sha512-wiq39Uc3mOI8rw24wE2n15hboLE0E9BsQLdlmsL4Zua9diDS6B5abXG0XhFcoNsXIGMWXVZz4TOq3u4EdpXF/Q==", - "dependencies": { - "@ethereumjs/common": "2.5.0", - "@ethereumjs/tx": "3.3.2", - "eth-lib": "0.2.8", - "ethereumjs-util": "^7.1.5", - "scrypt-js": "^3.0.1", - "uuid": "^9.0.0", - "web3-core": "1.10.0", - "web3-core-helpers": "1.10.0", - "web3-core-method": "1.10.0", - "web3-utils": "1.10.0" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/web3-eth-accounts/node_modules/@ethereumjs/common": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/@ethereumjs/common/-/common-2.5.0.tgz", - "integrity": "sha512-DEHjW6e38o+JmB/NO3GZBpW4lpaiBpkFgXF6jLcJ6gETBYpEyaA5nTimsWBUJR3Vmtm/didUEbNjajskugZORg==", - "dependencies": { - "crc-32": "^1.2.0", - "ethereumjs-util": "^7.1.1" - } - }, - "node_modules/web3-eth-accounts/node_modules/@ethereumjs/tx": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/@ethereumjs/tx/-/tx-3.3.2.tgz", - "integrity": "sha512-6AaJhwg4ucmwTvw/1qLaZUX5miWrwZ4nLOUsKyb/HtzS3BMw/CasKhdi1ims9mBKeK9sOJCH4qGKOBGyJCeeog==", - "dependencies": { - "@ethereumjs/common": "^2.5.0", - "ethereumjs-util": "^7.1.2" - } - }, - "node_modules/web3-eth-accounts/node_modules/bn.js": { - "version": "4.12.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==" - }, - "node_modules/web3-eth-accounts/node_modules/eth-lib": { - "version": "0.2.8", - "resolved": "https://registry.npmjs.org/eth-lib/-/eth-lib-0.2.8.tgz", - "integrity": "sha512-ArJ7x1WcWOlSpzdoTBX8vkwlkSQ85CjjifSZtV4co64vWxSV8geWfPI9x4SVYu3DSxnX4yWFVTtGL+j9DUFLNw==", - "dependencies": { - "bn.js": "^4.11.6", - "elliptic": "^6.4.0", - "xhr-request-promise": "^0.1.2" - } - }, - "node_modules/web3-eth-accounts/node_modules/uuid": { - "version": "9.0.0", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.0.tgz", - "integrity": "sha512-MXcSTerfPa4uqyzStbRoTgt5XIe3x5+42+q1sDuy3R5MDk66URdLMOZe5aPX/SQd+kuYAh0FdP/pO28IkQyTeg==", - "bin": { - "uuid": "dist/bin/uuid" - } - }, - "node_modules/web3-eth-accounts/node_modules/web3-core-helpers": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/web3-core-helpers/-/web3-core-helpers-1.10.0.tgz", - "integrity": "sha512-pIxAzFDS5vnbXvfvLSpaA1tfRykAe9adw43YCKsEYQwH0gCLL0kMLkaCX3q+Q8EVmAh+e1jWL/nl9U0de1+++g==", - "dependencies": { - "web3-eth-iban": "1.10.0", - "web3-utils": "1.10.0" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/web3-eth-accounts/node_modules/web3-eth-iban": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/web3-eth-iban/-/web3-eth-iban-1.10.0.tgz", - "integrity": "sha512-0l+SP3IGhInw7Q20LY3IVafYEuufo4Dn75jAHT7c2aDJsIolvf2Lc6ugHkBajlwUneGfbRQs/ccYPQ9JeMUbrg==", - "dependencies": { - "bn.js": "^5.2.1", - "web3-utils": "1.10.0" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/web3-eth-accounts/node_modules/web3-eth-iban/node_modules/bn.js": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.2.1.tgz", - "integrity": "sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ==" - }, - "node_modules/web3-eth-contract": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/web3-eth-contract/-/web3-eth-contract-1.10.0.tgz", - "integrity": "sha512-MIC5FOzP/+2evDksQQ/dpcXhSqa/2hFNytdl/x61IeWxhh6vlFeSjq0YVTAyIzdjwnL7nEmZpjfI6y6/Ufhy7w==", - "dependencies": { - "@types/bn.js": "^5.1.1", - "web3-core": "1.10.0", - "web3-core-helpers": "1.10.0", - "web3-core-method": "1.10.0", - "web3-core-promievent": "1.10.0", - "web3-core-subscriptions": "1.10.0", - "web3-eth-abi": "1.10.0", - "web3-utils": "1.10.0" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/web3-eth-contract/node_modules/eventemitter3": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.4.tgz", - "integrity": "sha512-rlaVLnVxtxvoyLsQQFBx53YmXHDxRIzzTLbdfxqi4yocpSjAxXwkU0cScM5JgSKMqEhrZpnvQ2D9gjylR0AimQ==" - }, - "node_modules/web3-eth-contract/node_modules/web3-core-helpers": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/web3-core-helpers/-/web3-core-helpers-1.10.0.tgz", - "integrity": "sha512-pIxAzFDS5vnbXvfvLSpaA1tfRykAe9adw43YCKsEYQwH0gCLL0kMLkaCX3q+Q8EVmAh+e1jWL/nl9U0de1+++g==", - "dependencies": { - "web3-eth-iban": "1.10.0", - "web3-utils": "1.10.0" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/web3-eth-contract/node_modules/web3-core-promievent": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/web3-core-promievent/-/web3-core-promievent-1.10.0.tgz", - "integrity": "sha512-68N7k5LWL5R38xRaKFrTFT2pm2jBNFaM4GioS00YjAKXRQ3KjmhijOMG3TICz6Aa5+6GDWYelDNx21YAeZ4YTg==", - "dependencies": { - "eventemitter3": "4.0.4" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/web3-eth-contract/node_modules/web3-eth-abi": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/web3-eth-abi/-/web3-eth-abi-1.10.0.tgz", - "integrity": "sha512-cwS+qRBWpJ43aI9L3JS88QYPfFcSJJ3XapxOQ4j40v6mk7ATpA8CVK1vGTzpihNlOfMVRBkR95oAj7oL6aiDOg==", - "dependencies": { - "@ethersproject/abi": "^5.6.3", - "web3-utils": "1.10.0" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/web3-eth-contract/node_modules/web3-eth-iban": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/web3-eth-iban/-/web3-eth-iban-1.10.0.tgz", - "integrity": "sha512-0l+SP3IGhInw7Q20LY3IVafYEuufo4Dn75jAHT7c2aDJsIolvf2Lc6ugHkBajlwUneGfbRQs/ccYPQ9JeMUbrg==", - "dependencies": { - "bn.js": "^5.2.1", - "web3-utils": "1.10.0" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/web3-eth-ens": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/web3-eth-ens/-/web3-eth-ens-1.10.0.tgz", - "integrity": "sha512-3hpGgzX3qjgxNAmqdrC2YUQMTfnZbs4GeLEmy8aCWziVwogbuqQZ+Gzdfrym45eOZodk+lmXyLuAdqkNlvkc1g==", - "dependencies": { - "content-hash": "^2.5.2", - "eth-ens-namehash": "2.0.8", - "web3-core": "1.10.0", - "web3-core-helpers": "1.10.0", - "web3-core-promievent": "1.10.0", - "web3-eth-abi": "1.10.0", - "web3-eth-contract": "1.10.0", - "web3-utils": "1.10.0" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/web3-eth-ens/node_modules/eventemitter3": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.4.tgz", - "integrity": "sha512-rlaVLnVxtxvoyLsQQFBx53YmXHDxRIzzTLbdfxqi4yocpSjAxXwkU0cScM5JgSKMqEhrZpnvQ2D9gjylR0AimQ==" - }, - "node_modules/web3-eth-ens/node_modules/web3-core-helpers": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/web3-core-helpers/-/web3-core-helpers-1.10.0.tgz", - "integrity": "sha512-pIxAzFDS5vnbXvfvLSpaA1tfRykAe9adw43YCKsEYQwH0gCLL0kMLkaCX3q+Q8EVmAh+e1jWL/nl9U0de1+++g==", - "dependencies": { - "web3-eth-iban": "1.10.0", - "web3-utils": "1.10.0" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/web3-eth-ens/node_modules/web3-core-promievent": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/web3-core-promievent/-/web3-core-promievent-1.10.0.tgz", - "integrity": "sha512-68N7k5LWL5R38xRaKFrTFT2pm2jBNFaM4GioS00YjAKXRQ3KjmhijOMG3TICz6Aa5+6GDWYelDNx21YAeZ4YTg==", - "dependencies": { - "eventemitter3": "4.0.4" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/web3-eth-ens/node_modules/web3-eth-abi": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/web3-eth-abi/-/web3-eth-abi-1.10.0.tgz", - "integrity": "sha512-cwS+qRBWpJ43aI9L3JS88QYPfFcSJJ3XapxOQ4j40v6mk7ATpA8CVK1vGTzpihNlOfMVRBkR95oAj7oL6aiDOg==", - "dependencies": { - "@ethersproject/abi": "^5.6.3", - "web3-utils": "1.10.0" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/web3-eth-ens/node_modules/web3-eth-iban": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/web3-eth-iban/-/web3-eth-iban-1.10.0.tgz", - "integrity": "sha512-0l+SP3IGhInw7Q20LY3IVafYEuufo4Dn75jAHT7c2aDJsIolvf2Lc6ugHkBajlwUneGfbRQs/ccYPQ9JeMUbrg==", - "dependencies": { - "bn.js": "^5.2.1", - "web3-utils": "1.10.0" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/web3-eth-iban": { - "version": "1.8.2", - "resolved": "https://registry.npmjs.org/web3-eth-iban/-/web3-eth-iban-1.8.2.tgz", - "integrity": "sha512-h3vNblDWkWMuYx93Q27TAJz6lhzpP93EiC3+45D6xoz983p6si773vntoQ+H+5aZhwglBtoiBzdh7PSSOnP/xQ==", - "dev": true, - "dependencies": { - "bn.js": "^5.2.1", - "web3-utils": "1.8.2" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/web3-eth-iban/node_modules/web3-utils": { - "version": "1.8.2", - "resolved": "https://registry.npmjs.org/web3-utils/-/web3-utils-1.8.2.tgz", - "integrity": "sha512-v7j6xhfLQfY7xQDrUP0BKbaNrmZ2/+egbqP9q3KYmOiPpnvAfol+32slgL0WX/5n8VPvKCK5EZ1HGrAVICSToA==", - "dev": true, - "dependencies": { - "bn.js": "^5.2.1", - "ethereum-bloom-filters": "^1.0.6", - "ethereumjs-util": "^7.1.0", - "ethjs-unit": "0.1.6", - "number-to-bn": "1.7.0", - "randombytes": "^2.1.0", - "utf8": "3.0.0" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/web3-eth-personal": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/web3-eth-personal/-/web3-eth-personal-1.10.0.tgz", - "integrity": "sha512-anseKn98w/d703eWq52uNuZi7GhQeVjTC5/svrBWEKob0WZ5kPdo+EZoFN0sp5a5ubbrk/E0xSl1/M5yORMtpg==", - "dependencies": { - "@types/node": "^12.12.6", - "web3-core": "1.10.0", - "web3-core-helpers": "1.10.0", - "web3-core-method": "1.10.0", - "web3-net": "1.10.0", - "web3-utils": "1.10.0" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/web3-eth-personal/node_modules/@types/node": { - "version": "12.20.55", - "resolved": "https://registry.npmjs.org/@types/node/-/node-12.20.55.tgz", - "integrity": "sha512-J8xLz7q2OFulZ2cyGTLE1TbbZcjpno7FaN6zdJNrgAdrJ+DZzh/uFR6YrTb4C+nXakvud8Q4+rbhoIWlYQbUFQ==" - }, - "node_modules/web3-eth-personal/node_modules/web3-core-helpers": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/web3-core-helpers/-/web3-core-helpers-1.10.0.tgz", - "integrity": "sha512-pIxAzFDS5vnbXvfvLSpaA1tfRykAe9adw43YCKsEYQwH0gCLL0kMLkaCX3q+Q8EVmAh+e1jWL/nl9U0de1+++g==", - "dependencies": { - "web3-eth-iban": "1.10.0", - "web3-utils": "1.10.0" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/web3-eth-personal/node_modules/web3-eth-iban": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/web3-eth-iban/-/web3-eth-iban-1.10.0.tgz", - "integrity": "sha512-0l+SP3IGhInw7Q20LY3IVafYEuufo4Dn75jAHT7c2aDJsIolvf2Lc6ugHkBajlwUneGfbRQs/ccYPQ9JeMUbrg==", - "dependencies": { - "bn.js": "^5.2.1", - "web3-utils": "1.10.0" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/web3-eth/node_modules/web3-core-helpers": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/web3-core-helpers/-/web3-core-helpers-1.10.0.tgz", - "integrity": "sha512-pIxAzFDS5vnbXvfvLSpaA1tfRykAe9adw43YCKsEYQwH0gCLL0kMLkaCX3q+Q8EVmAh+e1jWL/nl9U0de1+++g==", - "dependencies": { - "web3-eth-iban": "1.10.0", - "web3-utils": "1.10.0" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/web3-eth/node_modules/web3-eth-abi": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/web3-eth-abi/-/web3-eth-abi-1.10.0.tgz", - "integrity": "sha512-cwS+qRBWpJ43aI9L3JS88QYPfFcSJJ3XapxOQ4j40v6mk7ATpA8CVK1vGTzpihNlOfMVRBkR95oAj7oL6aiDOg==", - "dependencies": { - "@ethersproject/abi": "^5.6.3", - "web3-utils": "1.10.0" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/web3-eth/node_modules/web3-eth-iban": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/web3-eth-iban/-/web3-eth-iban-1.10.0.tgz", - "integrity": "sha512-0l+SP3IGhInw7Q20LY3IVafYEuufo4Dn75jAHT7c2aDJsIolvf2Lc6ugHkBajlwUneGfbRQs/ccYPQ9JeMUbrg==", - "dependencies": { - "bn.js": "^5.2.1", - "web3-utils": "1.10.0" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/web3-net": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/web3-net/-/web3-net-1.10.0.tgz", - "integrity": "sha512-NLH/N3IshYWASpxk4/18Ge6n60GEvWBVeM8inx2dmZJVmRI6SJIlUxbL8jySgiTn3MMZlhbdvrGo8fpUW7a1GA==", - "dependencies": { - "web3-core": "1.10.0", - "web3-core-method": "1.10.0", - "web3-utils": "1.10.0" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/web3-provider-engine": { - "version": "16.0.3", - "resolved": "https://registry.npmjs.org/web3-provider-engine/-/web3-provider-engine-16.0.3.tgz", - "integrity": "sha512-Q3bKhGqLfMTdLvkd4TtkGYJHcoVQ82D1l8jTIwwuJp/sAp7VHnRYb9YJ14SW/69VMWoOhSpPLZV2tWb9V0WJoA==", - "dependencies": { - "@ethereumjs/tx": "^3.3.0", - "async": "^2.5.0", - "backoff": "^2.5.0", - "clone": "^2.0.0", - "cross-fetch": "^2.1.0", - "eth-block-tracker": "^4.4.2", - "eth-json-rpc-filters": "^4.2.1", - "eth-json-rpc-infura": "^5.1.0", - "eth-json-rpc-middleware": "^6.0.0", - "eth-rpc-errors": "^3.0.0", - "eth-sig-util": "^1.4.2", - "ethereumjs-block": "^1.2.2", - "ethereumjs-util": "^5.1.5", - "ethereumjs-vm": "^2.3.4", - "json-stable-stringify": "^1.0.1", - "promise-to-callback": "^1.0.0", - "readable-stream": "^2.2.9", - "request": "^2.85.0", - "semaphore": "^1.0.3", - "ws": "^5.1.1", - "xhr": "^2.2.0", - "xtend": "^4.0.1" - }, - "engines": { - "node": ">=12.0.0" - } - }, - "node_modules/web3-provider-engine/node_modules/@ethereumjs/common": { - "version": "2.6.5", - "resolved": "https://registry.npmjs.org/@ethereumjs/common/-/common-2.6.5.tgz", - "integrity": "sha512-lRyVQOeCDaIVtgfbowla32pzeDv2Obr8oR8Put5RdUBNRGr1VGPGQNGP6elWIpgK3YdpzqTOh4GyUGOureVeeA==", - "dependencies": { - "crc-32": "^1.2.0", - "ethereumjs-util": "^7.1.5" - } - }, - "node_modules/web3-provider-engine/node_modules/@ethereumjs/common/node_modules/ethereumjs-util": { - "version": "7.1.5", - "resolved": "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-7.1.5.tgz", - "integrity": "sha512-SDl5kKrQAudFBUe5OJM9Ac6WmMyYmXX/6sTmLZ3ffG2eY6ZIGBes3pEDxNN6V72WyOw4CPD5RomKdsa8DAAwLg==", - "dependencies": { - "@types/bn.js": "^5.1.0", - "bn.js": "^5.1.2", - "create-hash": "^1.1.2", - "ethereum-cryptography": "^0.1.3", - "rlp": "^2.2.4" - }, - "engines": { - "node": ">=10.0.0" - } - }, - "node_modules/web3-provider-engine/node_modules/@ethereumjs/tx": { - "version": "3.5.2", - "resolved": "https://registry.npmjs.org/@ethereumjs/tx/-/tx-3.5.2.tgz", - "integrity": "sha512-gQDNJWKrSDGu2w7w0PzVXVBNMzb7wwdDOmOqczmhNjqFxFuIbhVJDwiGEnxFNC2/b8ifcZzY7MLcluizohRzNw==", - "dependencies": { - "@ethereumjs/common": "^2.6.4", - "ethereumjs-util": "^7.1.5" - } - }, - "node_modules/web3-provider-engine/node_modules/@ethereumjs/tx/node_modules/ethereumjs-util": { - "version": "7.1.5", - "resolved": "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-7.1.5.tgz", - "integrity": "sha512-SDl5kKrQAudFBUe5OJM9Ac6WmMyYmXX/6sTmLZ3ffG2eY6ZIGBes3pEDxNN6V72WyOw4CPD5RomKdsa8DAAwLg==", - "dependencies": { - "@types/bn.js": "^5.1.0", - "bn.js": "^5.1.2", - "create-hash": "^1.1.2", - "ethereum-cryptography": "^0.1.3", - "rlp": "^2.2.4" - }, - "engines": { - "node": ">=10.0.0" - } - }, - "node_modules/web3-provider-engine/node_modules/async": { - "version": "2.6.4", - "resolved": "https://registry.npmjs.org/async/-/async-2.6.4.tgz", - "integrity": "sha512-mzo5dfJYwAn29PeiJ0zvwTo04zj8HDJj0Mn8TD7sno7q12prdbnasKJHhkm2c1LgrhlJ0teaea8860oxi51mGA==", - "dependencies": { - "lodash": "^4.17.14" - } - }, - "node_modules/web3-provider-engine/node_modules/cross-fetch": { - "version": "2.2.6", - "resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-2.2.6.tgz", - "integrity": "sha512-9JZz+vXCmfKUZ68zAptS7k4Nu8e2qcibe7WVZYps7sAgk5R8GYTc+T1WR0v1rlP9HxgARmOX1UTIJZFytajpNA==", - "dependencies": { - "node-fetch": "^2.6.7", - "whatwg-fetch": "^2.0.4" - } - }, - "node_modules/web3-provider-engine/node_modules/ethereum-cryptography": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-0.1.3.tgz", - "integrity": "sha512-w8/4x1SGGzc+tO97TASLja6SLd3fRIK2tLVcV2Gx4IB21hE19atll5Cq9o3d0ZmAYC/8aw0ipieTSiekAea4SQ==", - "dependencies": { - "@types/pbkdf2": "^3.0.0", - "@types/secp256k1": "^4.0.1", - "blakejs": "^1.1.0", - "browserify-aes": "^1.2.0", - "bs58check": "^2.1.2", - "create-hash": "^1.2.0", - "create-hmac": "^1.1.7", - "hash.js": "^1.1.7", - "keccak": "^3.0.0", - "pbkdf2": "^3.0.17", - "randombytes": "^2.1.0", - "safe-buffer": "^5.1.2", - "scrypt-js": "^3.0.0", - "secp256k1": "^4.0.1", - "setimmediate": "^1.0.5" - } - }, - "node_modules/web3-provider-engine/node_modules/ethereumjs-util": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-5.2.1.tgz", - "integrity": "sha512-v3kT+7zdyCm1HIqWlLNrHGqHGLpGYIhjeHxQjnDXjLT2FyGJDsd3LWMYUo7pAFRrk86CR3nUJfhC81CCoJNNGQ==", - "dependencies": { - "bn.js": "^4.11.0", - "create-hash": "^1.1.2", - "elliptic": "^6.5.2", - "ethereum-cryptography": "^0.1.3", - "ethjs-util": "^0.1.3", - "rlp": "^2.0.0", - "safe-buffer": "^5.1.1" - } - }, - "node_modules/web3-provider-engine/node_modules/ethereumjs-util/node_modules/bn.js": { - "version": "4.12.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==" - }, - "node_modules/web3-provider-engine/node_modules/readable-stream": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", - "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "node_modules/web3-provider-engine/node_modules/safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" - }, - "node_modules/web3-provider-engine/node_modules/string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dependencies": { - "safe-buffer": "~5.1.0" - } - }, - "node_modules/web3-provider-engine/node_modules/ws": { - "version": "5.2.3", - "resolved": "https://registry.npmjs.org/ws/-/ws-5.2.3.tgz", - "integrity": "sha512-jZArVERrMsKUatIdnLzqvcfydI85dvd/Fp1u/VOpfdDWQ4c9qWXe+VIeAbQ5FrDwciAkr+lzofXLz3Kuf26AOA==", - "dependencies": { - "async-limiter": "~1.0.0" - } - }, - "node_modules/web3-providers-http": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/web3-providers-http/-/web3-providers-http-1.10.0.tgz", - "integrity": "sha512-eNr965YB8a9mLiNrkjAWNAPXgmQWfpBfkkn7tpEFlghfww0u3I0tktMZiaToJVcL2+Xq+81cxbkpeWJ5XQDwOA==", - "dependencies": { - "abortcontroller-polyfill": "^1.7.3", - "cross-fetch": "^3.1.4", - "es6-promise": "^4.2.8", - "web3-core-helpers": "1.10.0" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/web3-providers-http/node_modules/web3-core-helpers": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/web3-core-helpers/-/web3-core-helpers-1.10.0.tgz", - "integrity": "sha512-pIxAzFDS5vnbXvfvLSpaA1tfRykAe9adw43YCKsEYQwH0gCLL0kMLkaCX3q+Q8EVmAh+e1jWL/nl9U0de1+++g==", - "dependencies": { - "web3-eth-iban": "1.10.0", - "web3-utils": "1.10.0" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/web3-providers-http/node_modules/web3-eth-iban": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/web3-eth-iban/-/web3-eth-iban-1.10.0.tgz", - "integrity": "sha512-0l+SP3IGhInw7Q20LY3IVafYEuufo4Dn75jAHT7c2aDJsIolvf2Lc6ugHkBajlwUneGfbRQs/ccYPQ9JeMUbrg==", - "dependencies": { - "bn.js": "^5.2.1", - "web3-utils": "1.10.0" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/web3-providers-ipc": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/web3-providers-ipc/-/web3-providers-ipc-1.10.0.tgz", - "integrity": "sha512-OfXG1aWN8L1OUqppshzq8YISkWrYHaATW9H8eh0p89TlWMc1KZOL9vttBuaBEi96D/n0eYDn2trzt22bqHWfXA==", - "dependencies": { - "oboe": "2.1.5", - "web3-core-helpers": "1.10.0" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/web3-providers-ipc/node_modules/web3-core-helpers": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/web3-core-helpers/-/web3-core-helpers-1.10.0.tgz", - "integrity": "sha512-pIxAzFDS5vnbXvfvLSpaA1tfRykAe9adw43YCKsEYQwH0gCLL0kMLkaCX3q+Q8EVmAh+e1jWL/nl9U0de1+++g==", - "dependencies": { - "web3-eth-iban": "1.10.0", - "web3-utils": "1.10.0" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/web3-providers-ipc/node_modules/web3-eth-iban": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/web3-eth-iban/-/web3-eth-iban-1.10.0.tgz", - "integrity": "sha512-0l+SP3IGhInw7Q20LY3IVafYEuufo4Dn75jAHT7c2aDJsIolvf2Lc6ugHkBajlwUneGfbRQs/ccYPQ9JeMUbrg==", - "dependencies": { - "bn.js": "^5.2.1", - "web3-utils": "1.10.0" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/web3-providers-ws": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/web3-providers-ws/-/web3-providers-ws-1.10.0.tgz", - "integrity": "sha512-sK0fNcglW36yD5xjnjtSGBnEtf59cbw4vZzJ+CmOWIKGIR96mP5l684g0WD0Eo+f4NQc2anWWXG74lRc9OVMCQ==", - "dependencies": { - "eventemitter3": "4.0.4", - "web3-core-helpers": "1.10.0", - "websocket": "^1.0.32" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/web3-providers-ws/node_modules/eventemitter3": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.4.tgz", - "integrity": "sha512-rlaVLnVxtxvoyLsQQFBx53YmXHDxRIzzTLbdfxqi4yocpSjAxXwkU0cScM5JgSKMqEhrZpnvQ2D9gjylR0AimQ==" - }, - "node_modules/web3-providers-ws/node_modules/web3-core-helpers": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/web3-core-helpers/-/web3-core-helpers-1.10.0.tgz", - "integrity": "sha512-pIxAzFDS5vnbXvfvLSpaA1tfRykAe9adw43YCKsEYQwH0gCLL0kMLkaCX3q+Q8EVmAh+e1jWL/nl9U0de1+++g==", - "dependencies": { - "web3-eth-iban": "1.10.0", - "web3-utils": "1.10.0" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/web3-providers-ws/node_modules/web3-eth-iban": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/web3-eth-iban/-/web3-eth-iban-1.10.0.tgz", - "integrity": "sha512-0l+SP3IGhInw7Q20LY3IVafYEuufo4Dn75jAHT7c2aDJsIolvf2Lc6ugHkBajlwUneGfbRQs/ccYPQ9JeMUbrg==", - "dependencies": { - "bn.js": "^5.2.1", - "web3-utils": "1.10.0" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/web3-shh": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/web3-shh/-/web3-shh-1.10.0.tgz", - "integrity": "sha512-uNUUuNsO2AjX41GJARV9zJibs11eq6HtOe6Wr0FtRUcj8SN6nHeYIzwstAvJ4fXA53gRqFMTxdntHEt9aXVjpg==", - "hasInstallScript": true, - "dependencies": { - "web3-core": "1.10.0", - "web3-core-method": "1.10.0", - "web3-core-subscriptions": "1.10.0", - "web3-net": "1.10.0" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/web3-utils": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/web3-utils/-/web3-utils-1.10.0.tgz", - "integrity": "sha512-kSaCM0uMcZTNUSmn5vMEhlo02RObGNRRCkdX0V9UTAU0+lrvn0HSaudyCo6CQzuXUsnuY2ERJGCGPfeWmv19Rg==", - "dependencies": { - "bn.js": "^5.2.1", - "ethereum-bloom-filters": "^1.0.6", - "ethereumjs-util": "^7.1.0", - "ethjs-unit": "0.1.6", - "number-to-bn": "1.7.0", - "randombytes": "^2.1.0", - "utf8": "3.0.0" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/webidl-conversions": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", - "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==" - }, - "node_modules/websocket": { - "version": "1.0.34", - "resolved": "https://registry.npmjs.org/websocket/-/websocket-1.0.34.tgz", - "integrity": "sha512-PRDso2sGwF6kM75QykIesBijKSVceR6jL2G8NGYyq2XrItNC2P5/qL5XeR056GhA+Ly7JMFvJb9I312mJfmqnQ==", - "dependencies": { - "bufferutil": "^4.0.1", - "debug": "^2.2.0", - "es5-ext": "^0.10.50", - "typedarray-to-buffer": "^3.1.5", - "utf-8-validate": "^5.0.2", - "yaeti": "^0.0.6" - }, - "engines": { - "node": ">=4.0.0" - } - }, - "node_modules/websocket/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/websocket/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" - }, - "node_modules/whatwg-fetch": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/whatwg-fetch/-/whatwg-fetch-2.0.4.tgz", - "integrity": "sha512-dcQ1GWpOD/eEQ97k66aiEVpNnapVj90/+R+SXTPYGHpYBBypfKJEQjLrvMZ7YXbKm21gXd4NcuxUTjiv1YtLng==" - }, - "node_modules/whatwg-mimetype": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-3.0.0.tgz", - "integrity": "sha512-nt+N2dzIutVRxARx1nghPKGv1xHikU7HKdfafKkLNLindmPU/ch3U31NOCGGA/dmPcmb1VlofO0vnKAcsm0o/Q==", - "optional": true, - "engines": { - "node": ">=12" - } - }, - "node_modules/whatwg-url": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", - "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", - "dependencies": { - "tr46": "~0.0.3", - "webidl-conversions": "^3.0.0" - } - }, - "node_modules/which": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", - "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "which": "bin/which" - } - }, - "node_modules/which-boxed-primitive": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz", - "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==", - "dependencies": { - "is-bigint": "^1.0.1", - "is-boolean-object": "^1.1.0", - "is-number-object": "^1.0.4", - "is-string": "^1.0.5", - "is-symbol": "^1.0.3" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/which-module": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/which-module/-/which-module-1.0.0.tgz", - "integrity": "sha512-F6+WgncZi/mJDrammbTuHe1q0R5hOXv/mBaiNA2TCNT/LTHusX0V+CJnj9XT8ki5ln2UZyyddDgHfCzyrOH7MQ==" - }, - "node_modules/which-typed-array": { - "version": "1.1.8", - "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.8.tgz", - "integrity": "sha512-Jn4e5PItbcAHyLoRDwvPj1ypu27DJbtdYXUa5zsinrUx77Uvfb0cXwwnGMTn7cjUfhhqgVQnVJCwF+7cgU7tpw==", - "dependencies": { - "available-typed-arrays": "^1.0.5", - "call-bind": "^1.0.2", - "es-abstract": "^1.20.0", - "for-each": "^0.3.3", - "has-tostringtag": "^1.0.0", - "is-typed-array": "^1.1.9" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/window-size": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/window-size/-/window-size-0.2.0.tgz", - "integrity": "sha512-UD7d8HFA2+PZsbKyaOCEy8gMh1oDtHgJh1LfgjQ4zVXmYjAT/kvz3PueITKuqDiIXQe7yzpPnxX3lNc+AhQMyw==", - "bin": { - "window-size": "cli.js" - }, - "engines": { - "node": ">= 0.10.0" - } - }, - "node_modules/wordwrapjs": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/wordwrapjs/-/wordwrapjs-4.0.1.tgz", - "integrity": "sha512-kKlNACbvHrkpIw6oPeYDSmdCTu2hdMHoyXLTcUKala++lx5Y+wjJ/e474Jqv5abnVmwxw08DiTuHmw69lJGksA==", - "dev": true, - "dependencies": { - "reduce-flatten": "^2.0.0", - "typical": "^5.2.0" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/wordwrapjs/node_modules/typical": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/typical/-/typical-5.2.0.tgz", - "integrity": "sha512-dvdQgNDNJo+8B2uBQoqdb11eUCE1JQXhvjC/CZtgvZseVd5TYMXnq0+vuUemXbd/Se29cTaUuPX3YIc2xgbvIg==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/workerpool": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/workerpool/-/workerpool-6.2.1.tgz", - "integrity": "sha512-ILEIE97kDZvF9Wb9f6h5aXK4swSlKGUcOEGiIYb2OOu/IrDU9iwj0fD//SsA6E5ibwJxpEvhullJY4Sl4GcpAw==" - }, - "node_modules/wrap-ansi": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", - "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", - "dependencies": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" - } - }, - "node_modules/wrap-ansi/node_modules/ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "engines": { - "node": ">=8" - } - }, - "node_modules/wrap-ansi/node_modules/strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/wrappy": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==" - }, - "node_modules/write-stream": { - "version": "0.4.3", - "resolved": "https://registry.npmjs.org/write-stream/-/write-stream-0.4.3.tgz", - "integrity": "sha512-IJrvkhbAnj89W/GAVdVgbnPiVw5Ntg/B4tc/MUCIEwj/g6JIww1DWJyB/yBMT3yw2/TkT6IUZ0+IYef3flEw8A==", - "optional": true, - "dependencies": { - "readable-stream": "~0.0.2" - } - }, - "node_modules/write-stream/node_modules/readable-stream": { - "version": "0.0.4", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-0.0.4.tgz", - "integrity": "sha512-azrivNydKRYt7zwLV5wWUK7YzKTWs3q87xSmY6DlHapPrCvaT6ZrukvM5erV+yCSSPmZT8zkSdttOHQpWWm9zw==", - "optional": true - }, - "node_modules/ws": { - "version": "8.14.1", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.14.1.tgz", - "integrity": "sha512-4OOseMUq8AzRBI/7SLMUwO+FEDnguetSk7KMb1sHwvF2w2Wv5Hoj0nlifx8vtGsftE/jWHojPy8sMMzYLJ2G/A==", - "engines": { - "node": ">=10.0.0" - }, - "peerDependencies": { - "bufferutil": "^4.0.1", - "utf-8-validate": ">=5.0.2" - }, - "peerDependenciesMeta": { - "bufferutil": { - "optional": true - }, - "utf-8-validate": { - "optional": true - } - } - }, - "node_modules/xhr": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/xhr/-/xhr-2.6.0.tgz", - "integrity": "sha512-/eCGLb5rxjx5e3mF1A7s+pLlR6CGyqWN91fv1JgER5mVWg1MZmlhBvy9kjcsOdRk8RrIujotWyJamfyrp+WIcA==", - "dependencies": { - "global": "~4.4.0", - "is-function": "^1.0.1", - "parse-headers": "^2.0.0", - "xtend": "^4.0.0" - } - }, - "node_modules/xhr-request": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/xhr-request/-/xhr-request-1.1.0.tgz", - "integrity": "sha512-Y7qzEaR3FDtL3fP30k9wO/e+FBnBByZeybKOhASsGP30NIkRAAkKD/sCnLvgEfAIEC1rcmK7YG8f4oEnIrrWzA==", - "dependencies": { - "buffer-to-arraybuffer": "^0.0.5", - "object-assign": "^4.1.1", - "query-string": "^5.0.1", - "simple-get": "^2.7.0", - "timed-out": "^4.0.1", - "url-set-query": "^1.0.0", - "xhr": "^2.0.4" - } - }, - "node_modules/xhr-request-promise": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/xhr-request-promise/-/xhr-request-promise-0.1.3.tgz", - "integrity": "sha512-YUBytBsuwgitWtdRzXDDkWAXzhdGB8bYm0sSzMPZT7Z2MBjMSTHFsyCT1yCRATY+XC69DUrQraRAEgcoCRaIPg==", - "dependencies": { - "xhr-request": "^1.1.0" - } - }, - "node_modules/xhr-request/node_modules/decompress-response": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-3.3.0.tgz", - "integrity": "sha512-BzRPQuY1ip+qDonAOz42gRm/pg9F768C+npV/4JOsxRC2sq+Rlk+Q4ZCAsOhnIaMrgarILY+RMUIvMmmX1qAEA==", - "dependencies": { - "mimic-response": "^1.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/xhr-request/node_modules/mimic-response": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz", - "integrity": "sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==", - "engines": { - "node": ">=4" - } - }, - "node_modules/xhr-request/node_modules/simple-get": { - "version": "2.8.2", - "resolved": "https://registry.npmjs.org/simple-get/-/simple-get-2.8.2.tgz", - "integrity": "sha512-Ijd/rV5o+mSBBs4F/x9oDPtTx9Zb6X9brmnXvMW4J7IR15ngi9q5xxqWBKU744jTZiaXtxaPL7uHG6vtN8kUkw==", - "dependencies": { - "decompress-response": "^3.3.0", - "once": "^1.3.1", - "simple-concat": "^1.0.0" - } - }, - "node_modules/xhr2-cookies": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/xhr2-cookies/-/xhr2-cookies-1.1.0.tgz", - "integrity": "sha512-hjXUA6q+jl/bd8ADHcVfFsSPIf+tyLIjuO9TwJC9WI6JP2zKcS7C+p56I9kCLLsaCiNT035iYvEUUzdEFj/8+g==", - "dependencies": { - "cookiejar": "^2.1.1" - } - }, - "node_modules/xmlhttprequest": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/xmlhttprequest/-/xmlhttprequest-1.8.0.tgz", - "integrity": "sha512-58Im/U0mlVBLM38NdZjHyhuMtCqa61469k2YP/AaPbvCoV9aQGUpbJBj1QRm2ytRiVQBD/fsw7L2bJGDVQswBA==", - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/xss": { - "version": "1.0.14", - "resolved": "https://registry.npmjs.org/xss/-/xss-1.0.14.tgz", - "integrity": "sha512-og7TEJhXvn1a7kzZGQ7ETjdQVS2UfZyTlsEdDOqvQF7GoxNfY+0YLCzBy1kPdsDDx4QuNAonQPddpsn6Xl/7sw==", - "optional": true, - "dependencies": { - "commander": "^2.20.3", - "cssfilter": "0.0.10" - }, - "bin": { - "xss": "bin/xss" - }, - "engines": { - "node": ">= 0.10.0" - } - }, - "node_modules/xtend": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", - "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", - "engines": { - "node": ">=0.4" - } - }, - "node_modules/y18n": { - "version": "5.0.8", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", - "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", - "engines": { - "node": ">=10" - } - }, - "node_modules/yaeti": { - "version": "0.0.6", - "resolved": "https://registry.npmjs.org/yaeti/-/yaeti-0.0.6.tgz", - "integrity": "sha512-MvQa//+KcZCUkBTIC9blM+CU9J2GzuTytsOUwf2lidtvkx/6gnEp1QvJv34t9vdjhFmha/mUiNDbN0D0mJWdug==", - "engines": { - "node": ">=0.10.32" - } - }, - "node_modules/yallist": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", - "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==" - }, - "node_modules/yaml": { - "version": "1.10.2", - "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz", - "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==", - "engines": { - "node": ">= 6" - } - }, - "node_modules/yargs": { - "version": "16.2.0", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", - "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", - "dependencies": { - "cliui": "^7.0.2", - "escalade": "^3.1.1", - "get-caller-file": "^2.0.5", - "require-directory": "^2.1.1", - "string-width": "^4.2.0", - "y18n": "^5.0.5", - "yargs-parser": "^20.2.2" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/yargs-parser": { - "version": "20.2.4", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.4.tgz", - "integrity": "sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA==", - "engines": { - "node": ">=10" - } - }, - "node_modules/yargs-unparser": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/yargs-unparser/-/yargs-unparser-2.0.0.tgz", - "integrity": "sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA==", - "dependencies": { - "camelcase": "^6.0.0", - "decamelize": "^4.0.0", - "flat": "^5.0.2", - "is-plain-obj": "^2.1.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/yargs-unparser/node_modules/camelcase": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", - "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/yauzl": { - "version": "2.10.0", - "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.10.0.tgz", - "integrity": "sha512-p4a9I6X6nu6IhoGmBqAcbJy1mlC4j27vEPZX9F4L4/vZT3Lyq1VkFHw/V/PUcB9Buo+DG3iHkT0x3Qya58zc3g==", - "dependencies": { - "buffer-crc32": "~0.2.3", - "fd-slicer": "~1.1.0" - } - }, - "node_modules/yn": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz", - "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==", - "optional": true, - "peer": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/yocto-queue": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", - "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/zksync-web3": { - "version": "0.14.3", - "resolved": "https://registry.npmjs.org/zksync-web3/-/zksync-web3-0.14.3.tgz", - "integrity": "sha512-hT72th4AnqyLW1d5Jlv8N2B/qhEnl2NePK2A3org7tAa24niem/UAaHMkEvmWI3SF9waYUPtqAtjpf+yvQ9zvQ==", - "peerDependencies": { - "ethers": "^5.7.0" - } - } - }, - "dependencies": { - "@aduh95/viz.js": { - "version": "3.7.0", - "resolved": "https://registry.npmjs.org/@aduh95/viz.js/-/viz.js-3.7.0.tgz", - "integrity": "sha512-20Pk2Z98fbPLkECcrZSJszKos/OgtvJJR3NcbVfgCJ6EQjDNzW2P1BKqImOz3tJ952dvO2DWEhcLhQ1Wz1e9ng==", - "optional": true - }, - "@ampproject/remapping": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.0.tgz", - "integrity": "sha512-qRmjj8nj9qmLTQXXmaR1cck3UXSRMPrbsLJAasZpF+t3riI71BXed5ebIOYwQntykeZuhjsdweEc9BxH5Jc26w==", - "peer": true, - "requires": { - "@jridgewell/gen-mapping": "^0.1.0", - "@jridgewell/trace-mapping": "^0.3.9" - } - }, - "@apollo/protobufjs": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/@apollo/protobufjs/-/protobufjs-1.2.7.tgz", - "integrity": "sha512-Lahx5zntHPZia35myYDBRuF58tlwPskwHc5CWBZC/4bMKB6siTBWwtMrkqXcsNwQiFSzSx5hKdRPUmemrEp3Gg==", - "optional": true, - "requires": { - "@protobufjs/aspromise": "^1.1.2", - "@protobufjs/base64": "^1.1.2", - "@protobufjs/codegen": "^2.0.4", - "@protobufjs/eventemitter": "^1.1.0", - "@protobufjs/fetch": "^1.1.0", - "@protobufjs/float": "^1.0.2", - "@protobufjs/inquire": "^1.1.0", - "@protobufjs/path": "^1.1.2", - "@protobufjs/pool": "^1.1.0", - "@protobufjs/utf8": "^1.1.0", - "@types/long": "^4.0.0", - "long": "^4.0.0" - } - }, - "@apollo/usage-reporting-protobuf": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/@apollo/usage-reporting-protobuf/-/usage-reporting-protobuf-4.1.1.tgz", - "integrity": "sha512-u40dIUePHaSKVshcedO7Wp+mPiZsaU6xjv9J+VyxpoU/zL6Jle+9zWeG98tr/+SZ0nZ4OXhrbb8SNr0rAPpIDA==", - "optional": true, - "requires": { - "@apollo/protobufjs": "1.2.7" - } - }, - "@apollo/utils.dropunuseddefinitions": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@apollo/utils.dropunuseddefinitions/-/utils.dropunuseddefinitions-1.1.0.tgz", - "integrity": "sha512-jU1XjMr6ec9pPoL+BFWzEPW7VHHulVdGKMkPAMiCigpVIT11VmCbnij0bWob8uS3ODJ65tZLYKAh/55vLw2rbg==", - "optional": true, - "requires": {} - }, - "@apollo/utils.keyvaluecache": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@apollo/utils.keyvaluecache/-/utils.keyvaluecache-1.0.2.tgz", - "integrity": "sha512-p7PVdLPMnPzmXSQVEsy27cYEjVON+SH/Wb7COyW3rQN8+wJgT1nv9jZouYtztWW8ZgTkii5T6tC9qfoDREd4mg==", - "optional": true, - "requires": { - "@apollo/utils.logger": "^1.0.0", - "lru-cache": "7.10.1 - 7.13.1" - }, - "dependencies": { - "lru-cache": { - "version": "7.13.1", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.13.1.tgz", - "integrity": "sha512-CHqbAq7NFlW3RSnoWXLJBxCWaZVBrfa9UEHId2M3AW8iEBurbqduNexEUCGc3SHc6iCYXNJCDi903LajSVAEPQ==", - "optional": true - } - } - }, - "@apollo/utils.logger": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@apollo/utils.logger/-/utils.logger-1.0.1.tgz", - "integrity": "sha512-XdlzoY7fYNK4OIcvMD2G94RoFZbzTQaNP0jozmqqMudmaGo2I/2Jx71xlDJ801mWA/mbYRihyaw6KJii7k5RVA==", - "optional": true - }, - "@apollo/utils.printwithreducedwhitespace": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@apollo/utils.printwithreducedwhitespace/-/utils.printwithreducedwhitespace-1.1.0.tgz", - "integrity": "sha512-GfFSkAv3n1toDZ4V6u2d7L4xMwLA+lv+6hqXicMN9KELSJ9yy9RzuEXaX73c/Ry+GzRsBy/fdSUGayGqdHfT2Q==", - "optional": true, - "requires": {} - }, - "@apollo/utils.removealiases": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@apollo/utils.removealiases/-/utils.removealiases-1.0.0.tgz", - "integrity": "sha512-6cM8sEOJW2LaGjL/0vHV0GtRaSekrPQR4DiywaApQlL9EdROASZU5PsQibe2MWeZCOhNrPRuHh4wDMwPsWTn8A==", - "optional": true, - "requires": {} - }, - "@apollo/utils.sortast": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@apollo/utils.sortast/-/utils.sortast-1.1.0.tgz", - "integrity": "sha512-VPlTsmUnOwzPK5yGZENN069y6uUHgeiSlpEhRnLFYwYNoJHsuJq2vXVwIaSmts015WTPa2fpz1inkLYByeuRQA==", - "optional": true, - "requires": { - "lodash.sortby": "^4.7.0" - } - }, - "@apollo/utils.stripsensitiveliterals": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@apollo/utils.stripsensitiveliterals/-/utils.stripsensitiveliterals-1.2.0.tgz", - "integrity": "sha512-E41rDUzkz/cdikM5147d8nfCFVKovXxKBcjvLEQ7bjZm/cg9zEcXvS6vFY8ugTubI3fn6zoqo0CyU8zT+BGP9w==", - "optional": true, - "requires": {} - }, - "@apollo/utils.usagereporting": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@apollo/utils.usagereporting/-/utils.usagereporting-1.0.1.tgz", - "integrity": "sha512-6dk+0hZlnDbahDBB2mP/PZ5ybrtCJdLMbeNJD+TJpKyZmSY6bA3SjI8Cr2EM9QA+AdziywuWg+SgbWUF3/zQqQ==", - "optional": true, - "requires": { - "@apollo/usage-reporting-protobuf": "^4.0.0", - "@apollo/utils.dropunuseddefinitions": "^1.1.0", - "@apollo/utils.printwithreducedwhitespace": "^1.1.0", - "@apollo/utils.removealiases": "1.0.0", - "@apollo/utils.sortast": "^1.1.0", - "@apollo/utils.stripsensitiveliterals": "^1.2.0" - } - }, - "@apollographql/apollo-tools": { - "version": "0.5.4", - "resolved": "https://registry.npmjs.org/@apollographql/apollo-tools/-/apollo-tools-0.5.4.tgz", - "integrity": "sha512-shM3q7rUbNyXVVRkQJQseXv6bnYM3BUma/eZhwXR4xsuM+bqWnJKvW7SAfRjP7LuSCocrexa5AXhjjawNHrIlw==", - "optional": true, - "requires": {} - }, - "@apollographql/graphql-playground-html": { - "version": "1.6.29", - "resolved": "https://registry.npmjs.org/@apollographql/graphql-playground-html/-/graphql-playground-html-1.6.29.tgz", - "integrity": "sha512-xCcXpoz52rI4ksJSdOCxeOCn2DLocxwHf9dVT/Q90Pte1LX+LY+91SFtJF3KXVHH8kEin+g1KKCQPKBjZJfWNA==", - "optional": true, - "requires": { - "xss": "^1.0.8" - } - }, - "@arbitrum/nitro-contracts": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@arbitrum/nitro-contracts/-/nitro-contracts-1.0.2.tgz", - "integrity": "sha512-Y+cXIQNsy9UNANnFrDGKhHzNmOWttxpXP0/uJFTRmS+rgS4ozlr81/UmBo3tX6uWjziDtquhYRuG3wx17talOQ==", - "requires": { - "@openzeppelin/contracts": "4.5.0", - "@openzeppelin/contracts-upgradeable": "4.5.2", - "patch-package": "^6.4.7", - "sol2uml": "2.2.0" - }, - "dependencies": { - "@openzeppelin/contracts": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/@openzeppelin/contracts/-/contracts-4.5.0.tgz", - "integrity": "sha512-fdkzKPYMjrRiPK6K4y64e6GzULR7R7RwxSigHS8DDp7aWDeoReqsQI+cxHV1UuhAqX69L1lAaWDxenfP+xiqzA==" - }, - "@openzeppelin/contracts-upgradeable": { - "version": "4.5.2", - "resolved": "https://registry.npmjs.org/@openzeppelin/contracts-upgradeable/-/contracts-upgradeable-4.5.2.tgz", - "integrity": "sha512-xgWZYaPlrEOQo3cBj97Ufiuv79SPd8Brh4GcFYhPgb6WvAq4ppz8dWKL6h+jLAK01rUqMRp/TS9AdXgAeNvCLA==" - } - } - }, - "@aws-crypto/sha256-js": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/@aws-crypto/sha256-js/-/sha256-js-1.2.2.tgz", - "integrity": "sha512-Nr1QJIbW/afYYGzYvrF70LtaHrIRtd4TNAglX8BvlfxJLZ45SAmueIKYl5tWoNBPzp65ymXGFK0Bb1vZUpuc9g==", - "dev": true, - "requires": { - "@aws-crypto/util": "^1.2.2", - "@aws-sdk/types": "^3.1.0", - "tslib": "^1.11.1" - }, - "dependencies": { - "tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", - "dev": true - } - } - }, - "@aws-crypto/util": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/@aws-crypto/util/-/util-1.2.2.tgz", - "integrity": "sha512-H8PjG5WJ4wz0UXAFXeJjWCW1vkvIJ3qUUD+rGRwJ2/hj+xT58Qle2MTql/2MGzkU+1JLAFuR6aJpLAjHwhmwwg==", - "dev": true, - "requires": { - "@aws-sdk/types": "^3.1.0", - "@aws-sdk/util-utf8-browser": "^3.0.0", - "tslib": "^1.11.1" - }, - "dependencies": { - "tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", - "dev": true - } - } - }, - "@aws-sdk/types": { - "version": "3.342.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.342.0.tgz", - "integrity": "sha512-5uyXVda/AgUpdZNJ9JPHxwyxr08miPiZ/CKSMcRdQVjcNnrdzY9m/iM9LvnQT44sQO+IEEkF2IoZIWvZcq199A==", - "dev": true, - "requires": { - "tslib": "^2.5.0" - } - }, - "@aws-sdk/util-utf8-browser": { - "version": "3.259.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-utf8-browser/-/util-utf8-browser-3.259.0.tgz", - "integrity": "sha512-UvFa/vR+e19XookZF8RzFZBrw2EUkQWxiBW0yYQAhvk3C+QVGl0H3ouca8LDBlBfQKXwmW3huo/59H8rwb1wJw==", - "dev": true, - "requires": { - "tslib": "^2.3.1" - } - }, - "@babel/code-frame": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.18.6.tgz", - "integrity": "sha512-TDCmlK5eOvH+eH7cdAFlNXeVJqWIQ7gW9tY1GJIpUtFb6CmjVyq2VM3u71bOyR8CRihcCgMUYoDNyLXao3+70Q==", - "peer": true, - "requires": { - "@babel/highlight": "^7.18.6" - } - }, - "@babel/compat-data": { - "version": "7.19.4", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.19.4.tgz", - "integrity": "sha512-CHIGpJcUQ5lU9KrPHTjBMhVwQG6CQjxfg36fGXl3qk/Gik1WwWachaXFuo0uCWJT/mStOKtcbFJCaVLihC1CMw==" - }, - "@babel/core": { - "version": "7.19.6", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.19.6.tgz", - "integrity": "sha512-D2Ue4KHpc6Ys2+AxpIx1BZ8+UegLLLE2p3KJEuJRKmokHOtl49jQ5ny1773KsGLZs8MQvBidAF6yWUJxRqtKtg==", - "peer": true, - "requires": { - "@ampproject/remapping": "^2.1.0", - "@babel/code-frame": "^7.18.6", - "@babel/generator": "^7.19.6", - "@babel/helper-compilation-targets": "^7.19.3", - "@babel/helper-module-transforms": "^7.19.6", - "@babel/helpers": "^7.19.4", - "@babel/parser": "^7.19.6", - "@babel/template": "^7.18.10", - "@babel/traverse": "^7.19.6", - "@babel/types": "^7.19.4", - "convert-source-map": "^1.7.0", - "debug": "^4.1.0", - "gensync": "^1.0.0-beta.2", - "json5": "^2.2.1", - "semver": "^6.3.0" - }, - "dependencies": { - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "peer": true - } - } - }, - "@babel/generator": { - "version": "7.19.6", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.19.6.tgz", - "integrity": "sha512-oHGRUQeoX1QrKeJIKVe0hwjGqNnVYsM5Nep5zo0uE0m42sLH+Fsd2pStJ5sRM1bNyTUUoz0pe2lTeMJrb/taTA==", - "peer": true, - "requires": { - "@babel/types": "^7.19.4", - "@jridgewell/gen-mapping": "^0.3.2", - "jsesc": "^2.5.1" - }, - "dependencies": { - "@jridgewell/gen-mapping": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.2.tgz", - "integrity": "sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A==", - "peer": true, - "requires": { - "@jridgewell/set-array": "^1.0.1", - "@jridgewell/sourcemap-codec": "^1.4.10", - "@jridgewell/trace-mapping": "^0.3.9" - } - } - } - }, - "@babel/helper-compilation-targets": { - "version": "7.19.3", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.19.3.tgz", - "integrity": "sha512-65ESqLGyGmLvgR0mst5AdW1FkNlj9rQsCKduzEoEPhBCDFGXvz2jW6bXFG6i0/MrV2s7hhXjjb2yAzcPuQlLwg==", - "requires": { - "@babel/compat-data": "^7.19.3", - "@babel/helper-validator-option": "^7.18.6", - "browserslist": "^4.21.3", - "semver": "^6.3.0" - }, - "dependencies": { - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" - } - } - }, - "@babel/helper-define-polyfill-provider": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.3.3.tgz", - "integrity": "sha512-z5aQKU4IzbqCC1XH0nAqfsFLMVSo22SBKUc0BxGrLkolTdPTructy0ToNnlO2zA4j9Q/7pjMZf0DSY+DSTYzww==", - "requires": { - "@babel/helper-compilation-targets": "^7.17.7", - "@babel/helper-plugin-utils": "^7.16.7", - "debug": "^4.1.1", - "lodash.debounce": "^4.0.8", - "resolve": "^1.14.2", - "semver": "^6.1.2" - }, - "dependencies": { - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" - } - } - }, - "@babel/helper-environment-visitor": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.18.9.tgz", - "integrity": "sha512-3r/aACDJ3fhQ/EVgFy0hpj8oHyHpQc+LPtJoY9SzTThAsStm4Ptegq92vqKoE3vD706ZVFWITnMnxucw+S9Ipg==", - "peer": true - }, - "@babel/helper-function-name": { - "version": "7.19.0", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.19.0.tgz", - "integrity": "sha512-WAwHBINyrpqywkUH0nTnNgI5ina5TFn85HKS0pbPDfxFfhyR/aNQEn4hGi1P1JyT//I0t4OgXUlofzWILRvS5w==", - "peer": true, - "requires": { - "@babel/template": "^7.18.10", - "@babel/types": "^7.19.0" - } - }, - "@babel/helper-hoist-variables": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.18.6.tgz", - "integrity": "sha512-UlJQPkFqFULIcyW5sbzgbkxn2FKRgwWiRexcuaR8RNJRy8+LLveqPjwZV/bwrLZCN0eUHD/x8D0heK1ozuoo6Q==", - "peer": true, - "requires": { - "@babel/types": "^7.18.6" - } - }, - "@babel/helper-module-imports": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.18.6.tgz", - "integrity": "sha512-0NFvs3VkuSYbFi1x2Vd6tKrywq+z/cLeYC/RJNFrIX/30Bf5aiGYbtvGXolEktzJH8o5E5KJ3tT+nkxuuZFVlA==", - "requires": { - "@babel/types": "^7.18.6" - } - }, - "@babel/helper-module-transforms": { - "version": "7.19.6", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.19.6.tgz", - "integrity": "sha512-fCmcfQo/KYr/VXXDIyd3CBGZ6AFhPFy1TfSEJ+PilGVlQT6jcbqtHAM4C1EciRqMza7/TpOUZliuSH+U6HAhJw==", - "peer": true, - "requires": { - "@babel/helper-environment-visitor": "^7.18.9", - "@babel/helper-module-imports": "^7.18.6", - "@babel/helper-simple-access": "^7.19.4", - "@babel/helper-split-export-declaration": "^7.18.6", - "@babel/helper-validator-identifier": "^7.19.1", - "@babel/template": "^7.18.10", - "@babel/traverse": "^7.19.6", - "@babel/types": "^7.19.4" - } - }, - "@babel/helper-plugin-utils": { - "version": "7.19.0", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.19.0.tgz", - "integrity": "sha512-40Ryx7I8mT+0gaNxm8JGTZFUITNqdLAgdg0hXzeVZxVD6nFsdhQvip6v8dqkRHzsz1VFpFAaOCHNn0vKBL7Czw==" - }, - "@babel/helper-simple-access": { - "version": "7.19.4", - "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.19.4.tgz", - "integrity": "sha512-f9Xq6WqBFqaDfbCzn2w85hwklswz5qsKlh7f08w4Y9yhJHpnNC0QemtSkK5YyOY8kPGvyiwdzZksGUhnGdaUIg==", - "peer": true, - "requires": { - "@babel/types": "^7.19.4" - } - }, - "@babel/helper-split-export-declaration": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.18.6.tgz", - "integrity": "sha512-bde1etTx6ZyTmobl9LLMMQsaizFVZrquTEHOqKeQESMKo4PlObf+8+JA25ZsIpZhT/WEd39+vOdLXAFG/nELpA==", - "peer": true, - "requires": { - "@babel/types": "^7.18.6" - } - }, - "@babel/helper-string-parser": { - "version": "7.19.4", - "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.19.4.tgz", - "integrity": "sha512-nHtDoQcuqFmwYNYPz3Rah5ph2p8PFeFCsZk9A/48dPc/rGocJ5J3hAAZ7pb76VWX3fZKu+uEr/FhH5jLx7umrw==" - }, - "@babel/helper-validator-identifier": { - "version": "7.19.1", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.19.1.tgz", - "integrity": "sha512-awrNfaMtnHUr653GgGEs++LlAvW6w+DcPrOliSMXWCKo597CwL5Acf/wWdNkf/tfEQE3mjkeD1YOVZOUV/od1w==" - }, - "@babel/helper-validator-option": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.18.6.tgz", - "integrity": "sha512-XO7gESt5ouv/LRJdrVjkShckw6STTaB7l9BrpBaAHDeF5YZT+01PCwmR0SJHnkW6i8OwW/EVWRShfi4j2x+KQw==" - }, - "@babel/helpers": { - "version": "7.19.4", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.19.4.tgz", - "integrity": "sha512-G+z3aOx2nfDHwX/kyVii5fJq+bgscg89/dJNWpYeKeBv3v9xX8EIabmx1k6u9LS04H7nROFVRVK+e3k0VHp+sw==", - "peer": true, - "requires": { - "@babel/template": "^7.18.10", - "@babel/traverse": "^7.19.4", - "@babel/types": "^7.19.4" - } - }, - "@babel/highlight": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.18.6.tgz", - "integrity": "sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g==", - "peer": true, - "requires": { - "@babel/helper-validator-identifier": "^7.18.6", - "chalk": "^2.0.0", - "js-tokens": "^4.0.0" - }, - "dependencies": { - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "peer": true, - "requires": { - "color-convert": "^1.9.0" - } - }, - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "peer": true, - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - } - }, - "color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "peer": true, - "requires": { - "color-name": "1.1.3" - } - }, - "color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", - "peer": true - }, - "escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", - "peer": true - }, - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", - "peer": true - }, - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "peer": true, - "requires": { - "has-flag": "^3.0.0" - } - } - } - }, - "@babel/parser": { - "version": "7.19.6", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.19.6.tgz", - "integrity": "sha512-h1IUp81s2JYJ3mRkdxJgs4UvmSsRvDrx5ICSJbPvtWYv5i1nTBGcBpnog+89rAFMwvvru6E5NUHdBe01UeSzYA==", - "peer": true - }, - "@babel/plugin-transform-runtime": { - "version": "7.19.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.19.6.tgz", - "integrity": "sha512-PRH37lz4JU156lYFW1p8OxE5i7d6Sl/zV58ooyr+q1J1lnQPyg5tIiXlIwNVhJaY4W3TmOtdc8jqdXQcB1v5Yw==", - "requires": { - "@babel/helper-module-imports": "^7.18.6", - "@babel/helper-plugin-utils": "^7.19.0", - "babel-plugin-polyfill-corejs2": "^0.3.3", - "babel-plugin-polyfill-corejs3": "^0.6.0", - "babel-plugin-polyfill-regenerator": "^0.4.1", - "semver": "^6.3.0" - }, - "dependencies": { - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" - } - } - }, - "@babel/runtime": { - "version": "7.22.15", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.22.15.tgz", - "integrity": "sha512-T0O+aa+4w0u06iNmapipJXMV4HoUir03hpx3/YqXXhu9xim3w+dVphjFWl1OH8NbZHw5Lbm9k45drDkgq2VNNA==", - "requires": { - "regenerator-runtime": "^0.14.0" - } - }, - "@babel/template": { - "version": "7.18.10", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.18.10.tgz", - "integrity": "sha512-TI+rCtooWHr3QJ27kJxfjutghu44DLnasDMwpDqCXVTal9RLp3RSYNh4NdBrRP2cQAoG9A8juOQl6P6oZG4JxA==", - "peer": true, - "requires": { - "@babel/code-frame": "^7.18.6", - "@babel/parser": "^7.18.10", - "@babel/types": "^7.18.10" - } - }, - "@babel/traverse": { - "version": "7.19.6", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.19.6.tgz", - "integrity": "sha512-6l5HrUCzFM04mfbG09AagtYyR2P0B71B1wN7PfSPiksDPz2k5H9CBC1tcZpz2M8OxbKTPccByoOJ22rUKbpmQQ==", - "peer": true, - "requires": { - "@babel/code-frame": "^7.18.6", - "@babel/generator": "^7.19.6", - "@babel/helper-environment-visitor": "^7.18.9", - "@babel/helper-function-name": "^7.19.0", - "@babel/helper-hoist-variables": "^7.18.6", - "@babel/helper-split-export-declaration": "^7.18.6", - "@babel/parser": "^7.19.6", - "@babel/types": "^7.19.4", - "debug": "^4.1.0", - "globals": "^11.1.0" - } - }, - "@babel/types": { - "version": "7.19.4", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.19.4.tgz", - "integrity": "sha512-M5LK7nAeS6+9j7hAq+b3fQs+pNfUtTGq+yFFfHnauFA8zQtLRfmuipmsKDKKLuyG+wC8ABW43A153YNawNTEtw==", - "requires": { - "@babel/helper-string-parser": "^7.19.4", - "@babel/helper-validator-identifier": "^7.19.1", - "to-fast-properties": "^2.0.0" - } - }, - "@balena/dockerignore": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@balena/dockerignore/-/dockerignore-1.0.2.tgz", - "integrity": "sha512-wMue2Sy4GAVTk6Ic4tJVcnfdau+gx2EnG7S+uAEe+TWJFqE4YoWN4/H8MSLj4eYJKxGg26lZwboEniNiNwZQ6Q==" - }, - "@chainlink/contracts": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/@chainlink/contracts/-/contracts-0.6.1.tgz", - "integrity": "sha512-EuwijGexttw0UjfrW+HygwhQIrGAbqpf1ue28R55HhWMHBzphEH0PhWm8DQmFfj5OZNy8Io66N4L0nStkZ3QKQ==", - "requires": { - "@eth-optimism/contracts": "^0.5.21", - "@openzeppelin/contracts": "~4.3.3", - "@openzeppelin/contracts-upgradeable": "^4.7.3", - "@openzeppelin/contracts-v0.7": "npm:@openzeppelin/contracts@v3.4.2" - }, - "dependencies": { - "@openzeppelin/contracts": { - "version": "4.3.3", - "resolved": "https://registry.npmjs.org/@openzeppelin/contracts/-/contracts-4.3.3.tgz", - "integrity": "sha512-tDBopO1c98Yk7Cv/PZlHqrvtVjlgK5R4J6jxLwoO7qxK4xqOiZG+zSkIvGFpPZ0ikc3QOED3plgdqjgNTnBc7g==" - } - } - }, - "@chainsafe/as-sha256": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/@chainsafe/as-sha256/-/as-sha256-0.3.1.tgz", - "integrity": "sha512-hldFFYuf49ed7DAakWVXSJODuq3pzJEguD8tQ7h+sGkM18vja+OFoJI9krnGmgzyuZC2ETX0NOIcCTy31v2Mtg==" - }, - "@chainsafe/persistent-merkle-tree": { - "version": "0.4.2", - "resolved": "https://registry.npmjs.org/@chainsafe/persistent-merkle-tree/-/persistent-merkle-tree-0.4.2.tgz", - "integrity": "sha512-lLO3ihKPngXLTus/L7WHKaw9PnNJWizlOF1H9NNzHP6Xvh82vzg9F2bzkXhYIFshMZ2gTCEz8tq6STe7r5NDfQ==", - "requires": { - "@chainsafe/as-sha256": "^0.3.1" - } - }, - "@chainsafe/ssz": { - "version": "0.9.4", - "resolved": "https://registry.npmjs.org/@chainsafe/ssz/-/ssz-0.9.4.tgz", - "integrity": "sha512-77Qtg2N1ayqs4Bg/wvnWfg5Bta7iy7IRh8XqXh7oNMeP2HBbBwx8m6yTpA8p0EHItWPEBkgZd5S5/LSlp3GXuQ==", - "requires": { - "@chainsafe/as-sha256": "^0.3.1", - "@chainsafe/persistent-merkle-tree": "^0.4.2", - "case": "^1.6.3" - } - }, - "@colors/colors": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/@colors/colors/-/colors-1.5.0.tgz", - "integrity": "sha512-ooWCrlZP11i8GImSjTHYHLkvFDP48nS4+204nGb1RiX/WXYHmJA2III9/e2DWVabCESdW7hBAEzHRqUn9OUVvQ==", - "optional": true - }, - "@ensdomains/address-encoder": { - "version": "0.1.9", - "resolved": "https://registry.npmjs.org/@ensdomains/address-encoder/-/address-encoder-0.1.9.tgz", - "integrity": "sha512-E2d2gP4uxJQnDu2Kfg1tHNspefzbLT8Tyjrm5sEuim32UkU2sm5xL4VXtgc2X33fmPEw9+jUMpGs4veMbf+PYg==", - "requires": { - "bech32": "^1.1.3", - "blakejs": "^1.1.0", - "bn.js": "^4.11.8", - "bs58": "^4.0.1", - "crypto-addr-codec": "^0.1.7", - "nano-base32": "^1.0.1", - "ripemd160": "^2.0.2" - }, - "dependencies": { - "bn.js": { - "version": "4.12.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==" - } - } - }, - "@ensdomains/ens": { - "version": "0.4.5", - "resolved": "https://registry.npmjs.org/@ensdomains/ens/-/ens-0.4.5.tgz", - "integrity": "sha512-JSvpj1iNMFjK6K+uVl4unqMoa9rf5jopb8cya5UGBWz23Nw8hSNT7efgUx4BTlAPAgpNlEioUfeTyQ6J9ZvTVw==", - "requires": { - "bluebird": "^3.5.2", - "eth-ens-namehash": "^2.0.8", - "solc": "^0.4.20", - "testrpc": "0.0.1", - "web3-utils": "^1.0.0-beta.31" - }, - "dependencies": { - "ansi-regex": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA==" - }, - "camelcase": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-3.0.0.tgz", - "integrity": "sha512-4nhGqUkc4BqbBBB4Q6zLuD7lzzrHYrjKGeYaEji/3tFR5VdJu9v+LilhGIVe8wxEJPPOeWo7eg8dwY13TZ1BNg==" - }, - "cliui": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-3.2.0.tgz", - "integrity": "sha512-0yayqDxWQbqk3ojkYqUKqaAQ6AfNKeKWRNA8kR0WXzAsdHpP4BIaOmMAG87JGuO6qcobyW4GjxHd9PmhEd+T9w==", - "requires": { - "string-width": "^1.0.1", - "strip-ansi": "^3.0.1", - "wrap-ansi": "^2.0.0" - } - }, - "decamelize": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", - "integrity": "sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==" - }, - "fs-extra": { - "version": "0.30.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-0.30.0.tgz", - "integrity": "sha512-UvSPKyhMn6LEd/WpUaV9C9t3zATuqoqfWc3QdPhPLb58prN9tqYPlPWi8Krxi44loBoUzlobqZ3+8tGpxxSzwA==", - "requires": { - "graceful-fs": "^4.1.2", - "jsonfile": "^2.1.0", - "klaw": "^1.0.0", - "path-is-absolute": "^1.0.0", - "rimraf": "^2.2.8" - } - }, - "get-caller-file": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-1.0.3.tgz", - "integrity": "sha512-3t6rVToeoZfYSGd8YoLFR2DJkiQrIiUrGcjvFX2mDw3bn6k2OtwHN0TNCLbBO+w8qTvimhDkv+LSscbJY1vE6w==" - }, - "is-fullwidth-code-point": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", - "integrity": "sha512-1pqUqRjkhPJ9miNq9SwMfdvi6lBJcd6eFxvfaivQhaH3SgisfiuudvFntdKOmxuee/77l+FPjKrQjWvmPjWrRw==", - "requires": { - "number-is-nan": "^1.0.0" - } - }, - "jsonfile": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-2.4.0.tgz", - "integrity": "sha512-PKllAqbgLgxHaj8TElYymKCAgrASebJrWpTnEkOaTowt23VKXXN0sUeriJ+eh7y6ufb/CC5ap11pz71/cM0hUw==", - "requires": { - "graceful-fs": "^4.1.6" - } - }, - "require-from-string": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-1.2.1.tgz", - "integrity": "sha512-H7AkJWMobeskkttHyhTVtS0fxpFLjxhbfMa6Bk3wimP7sdPRGL3EyCg3sAQenFfAe+xQ+oAc85Nmtvq0ROM83Q==" - }, - "semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" - }, - "solc": { - "version": "0.4.26", - "resolved": "https://registry.npmjs.org/solc/-/solc-0.4.26.tgz", - "integrity": "sha512-o+c6FpkiHd+HPjmjEVpQgH7fqZ14tJpXhho+/bQXlXbliLIS/xjXb42Vxh+qQY1WCSTMQ0+a5vR9vi0MfhU6mA==", - "requires": { - "fs-extra": "^0.30.0", - "memorystream": "^0.3.1", - "require-from-string": "^1.1.0", - "semver": "^5.3.0", - "yargs": "^4.7.1" - } - }, - "string-width": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", - "integrity": "sha512-0XsVpQLnVCXHJfyEs8tC0zpTVIr5PKKsQtkT29IwupnPTjtPmQ3xT/4yCREF9hYkV/3M3kzcUTSAZT6a6h81tw==", - "requires": { - "code-point-at": "^1.0.0", - "is-fullwidth-code-point": "^1.0.0", - "strip-ansi": "^3.0.0" - } - }, - "strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha512-VhumSSbBqDTP8p2ZLKj40UjBCV4+v8bUSEpUb4KjRgWk9pbqGF4REFj6KEagidb2f/M6AzC0EmFyDNGaw9OCzg==", - "requires": { - "ansi-regex": "^2.0.0" - } - }, - "wrap-ansi": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-2.1.0.tgz", - "integrity": "sha512-vAaEaDM946gbNpH5pLVNR+vX2ht6n0Bt3GXwVB1AuAqZosOvHNF3P7wDnh8KLkSqgUh0uh77le7Owgoz+Z9XBw==", - "requires": { - "string-width": "^1.0.1", - "strip-ansi": "^3.0.1" - } - }, - "y18n": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-3.2.2.tgz", - "integrity": "sha512-uGZHXkHnhF0XeeAPgnKfPv1bgKAYyVvmNL1xlKsPYZPaIHxGti2hHqvOCQv71XMsLxu1QjergkqogUnms5D3YQ==" - }, - "yargs": { - "version": "4.8.1", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-4.8.1.tgz", - "integrity": "sha512-LqodLrnIDM3IFT+Hf/5sxBnEGECrfdC1uIbgZeJmESCSo4HoCAaKEus8MylXHAkdacGc0ye+Qa+dpkuom8uVYA==", - "requires": { - "cliui": "^3.2.0", - "decamelize": "^1.1.1", - "get-caller-file": "^1.0.1", - "lodash.assign": "^4.0.3", - "os-locale": "^1.4.0", - "read-pkg-up": "^1.0.1", - "require-directory": "^2.1.1", - "require-main-filename": "^1.0.1", - "set-blocking": "^2.0.0", - "string-width": "^1.0.1", - "which-module": "^1.0.0", - "window-size": "^0.2.0", - "y18n": "^3.2.1", - "yargs-parser": "^2.4.1" - } - }, - "yargs-parser": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-2.4.1.tgz", - "integrity": "sha512-9pIKIJhnI5tonzG6OnCFlz/yln8xHYcGl+pn3xR0Vzff0vzN1PbNRaelgfgRUwZ3s4i3jvxT9WhmUGL4whnasA==", - "requires": { - "camelcase": "^3.0.0", - "lodash.assign": "^4.0.6" - } - } - } - }, - "@ensdomains/ensjs": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/@ensdomains/ensjs/-/ensjs-2.1.0.tgz", - "integrity": "sha512-GRbGPT8Z/OJMDuxs75U/jUNEC0tbL0aj7/L/QQznGYKm/tiasp+ndLOaoULy9kKJFC0TBByqfFliEHDgoLhyog==", - "requires": { - "@babel/runtime": "^7.4.4", - "@ensdomains/address-encoder": "^0.1.7", - "@ensdomains/ens": "0.4.5", - "@ensdomains/resolver": "0.2.4", - "content-hash": "^2.5.2", - "eth-ens-namehash": "^2.0.8", - "ethers": "^5.0.13", - "js-sha3": "^0.8.0" - } - }, - "@ensdomains/resolver": { - "version": "0.2.4", - "resolved": "https://registry.npmjs.org/@ensdomains/resolver/-/resolver-0.2.4.tgz", - "integrity": "sha512-bvaTH34PMCbv6anRa9I/0zjLJgY4EuznbEMgbV77JBCQ9KNC46rzi0avuxpOfu+xDjPEtSFGqVEOr5GlUSGudA==" - }, - "@eth-optimism/contracts": { - "version": "0.5.37", - "resolved": "https://registry.npmjs.org/@eth-optimism/contracts/-/contracts-0.5.37.tgz", - "integrity": "sha512-HbNUUDIM1dUAM0hWPfGp3l9/Zte40zi8QhVbUSIwdYRA7jG7cZgbteqavrjW8wwFqxkWX9IrtA0KAR7pNlSAIQ==", - "requires": { - "@eth-optimism/core-utils": "0.10.1", - "@ethersproject/abstract-provider": "^5.7.0", - "@ethersproject/abstract-signer": "^5.7.0" - } - }, - "@eth-optimism/contracts-bedrock": { - "version": "0.16.0", - "resolved": "https://registry.npmjs.org/@eth-optimism/contracts-bedrock/-/contracts-bedrock-0.16.0.tgz", - "integrity": "sha512-MfHJdeQ/BzHgkoHnA+NGb1hU8CH0OFsp4ylmFi0uwYh3xPJxcHt9qhy1g4MGGMUGAPIUmlBPaqhwbBlQkaeFrA==", - "requires": { - "@openzeppelin/contracts": "4.7.3", - "@openzeppelin/contracts-upgradeable": "4.7.3", - "@rari-capital/solmate": "github:transmissions11/solmate#8f9b23f8838670afda0fd8983f2c41e8037ae6bc", - "clones-with-immutable-args": "github:Saw-mon-and-Natalie/clones-with-immutable-args#105efee1b9127ed7f6fedf139e1fc796ce8791f2" - }, - "dependencies": { - "@openzeppelin/contracts": { - "version": "4.7.3", - "resolved": "https://registry.npmjs.org/@openzeppelin/contracts/-/contracts-4.7.3.tgz", - "integrity": "sha512-dGRS0agJzu8ybo44pCIf3xBaPQN/65AIXNgK8+4gzKd5kbvlqyxryUYVLJv7fK98Seyd2hDZzVEHSWAh0Bt1Yw==" - }, - "@openzeppelin/contracts-upgradeable": { - "version": "4.7.3", - "resolved": "https://registry.npmjs.org/@openzeppelin/contracts-upgradeable/-/contracts-upgradeable-4.7.3.tgz", - "integrity": "sha512-+wuegAMaLcZnLCJIvrVUDzA9z/Wp93f0Dla/4jJvIhijRrPabjQbZe6fWiECLaJyfn5ci9fqf9vTw3xpQOad2A==" - } - } - }, - "@eth-optimism/core-utils": { - "version": "0.10.1", - "resolved": "https://registry.npmjs.org/@eth-optimism/core-utils/-/core-utils-0.10.1.tgz", - "integrity": "sha512-IJvG5UtYvyz6An9QdohlCLoeB3NBFxx2lRJKlPzvYYlfugUNNCHsajRIWIwJTcPRRma0WPd46JUsKACLJDdNrA==", - "requires": { - "@ethersproject/abi": "^5.7.0", - "@ethersproject/abstract-provider": "^5.7.0", - "@ethersproject/address": "^5.7.0", - "@ethersproject/bignumber": "^5.7.0", - "@ethersproject/bytes": "^5.7.0", - "@ethersproject/constants": "^5.7.0", - "@ethersproject/contracts": "^5.7.0", - "@ethersproject/hash": "^5.7.0", - "@ethersproject/keccak256": "^5.7.0", - "@ethersproject/properties": "^5.7.0", - "@ethersproject/providers": "^5.7.0", - "@ethersproject/rlp": "^5.7.0", - "@ethersproject/transactions": "^5.7.0", - "@ethersproject/web": "^5.7.0", - "bufio": "^1.0.7", - "chai": "^4.3.4" - } - }, - "@ethereum-waffle/chai": { - "version": "4.0.10", - "resolved": "https://registry.npmjs.org/@ethereum-waffle/chai/-/chai-4.0.10.tgz", - "integrity": "sha512-X5RepE7Dn8KQLFO7HHAAe+KeGaX/by14hn90wePGBhzL54tq4Y8JscZFu+/LCwCl6TnkAAy5ebiMoqJ37sFtWw==", - "dev": true, - "requires": { - "@ethereum-waffle/provider": "4.0.5", - "debug": "^4.3.4", - "json-bigint": "^1.0.0" - } - }, - "@ethereum-waffle/compiler": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/@ethereum-waffle/compiler/-/compiler-4.0.3.tgz", - "integrity": "sha512-5x5U52tSvEVJS6dpCeXXKvRKyf8GICDwiTwUvGD3/WD+DpvgvaoHOL82XqpTSUHgV3bBq6ma5/8gKUJUIAnJCw==", - "dev": true, - "requires": { - "@resolver-engine/imports": "^0.3.3", - "@resolver-engine/imports-fs": "^0.3.3", - "@typechain/ethers-v5": "^10.0.0", - "@types/mkdirp": "^0.5.2", - "@types/node-fetch": "^2.6.1", - "mkdirp": "^0.5.1", - "node-fetch": "^2.6.7" - } - }, - "@ethereum-waffle/ens": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/@ethereum-waffle/ens/-/ens-4.0.3.tgz", - "integrity": "sha512-PVLcdnTbaTfCrfSOrvtlA9Fih73EeDvFS28JQnT5M5P4JMplqmchhcZB1yg/fCtx4cvgHlZXa0+rOCAk2Jk0Jw==", - "dev": true, - "requires": {} - }, - "@ethereum-waffle/mock-contract": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/@ethereum-waffle/mock-contract/-/mock-contract-4.0.4.tgz", - "integrity": "sha512-LwEj5SIuEe9/gnrXgtqIkWbk2g15imM/qcJcxpLyAkOj981tQxXmtV4XmQMZsdedEsZ/D/rbUAOtZbgwqgUwQA==", - "dev": true, - "requires": {} - }, - "@ethereum-waffle/provider": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/@ethereum-waffle/provider/-/provider-4.0.5.tgz", - "integrity": "sha512-40uzfyzcrPh+Gbdzv89JJTMBlZwzya1YLDyim8mVbEqYLP5VRYWoGp0JMyaizgV3hMoUFRqJKVmIUw4v7r3hYw==", - "dev": true, - "requires": { - "@ethereum-waffle/ens": "4.0.3", - "@ganache/ethereum-options": "0.1.4", - "debug": "^4.3.4", - "ganache": "7.4.3" - }, - "dependencies": { - "ganache": { - "version": "7.4.3", - "resolved": "https://registry.npmjs.org/ganache/-/ganache-7.4.3.tgz", - "integrity": "sha512-RpEDUiCkqbouyE7+NMXG26ynZ+7sGiODU84Kz+FVoXUnQ4qQM4M8wif3Y4qUCt+D/eM1RVeGq0my62FPD6Y1KA==", - "dev": true, - "requires": { - "@trufflesuite/bigint-buffer": "1.1.10", - "@types/bn.js": "^5.1.0", - "@types/lru-cache": "5.1.1", - "@types/seedrandom": "3.0.1", - "bufferutil": "4.0.5", - "emittery": "0.10.0", - "keccak": "3.0.2", - "leveldown": "6.1.0", - "secp256k1": "4.0.3", - "utf-8-validate": "5.0.7" - }, - "dependencies": { - "@trufflesuite/bigint-buffer": { - "version": "1.1.10", - "resolved": "https://registry.npmjs.org/@trufflesuite/bigint-buffer/-/bigint-buffer-1.1.10.tgz", - "integrity": "sha512-pYIQC5EcMmID74t26GCC67946mgTJFiLXOT/BYozgrd4UEY2JHEGLhWi9cMiQCt5BSqFEvKkCHNnoj82SRjiEw==", - "bundled": true, - "dev": true, - "requires": { - "node-gyp-build": "4.4.0" - }, - "dependencies": { - "node-gyp-build": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.4.0.tgz", - "integrity": "sha512-amJnQCcgtRVw9SvoebO3BKGESClrfXGCUTX9hSn1OuGQTQBOZmVd0Z0OlecpuRksKvbsUqALE8jls/ErClAPuQ==", - "bundled": true, - "dev": true - } - } - }, - "@types/bn.js": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/@types/bn.js/-/bn.js-5.1.0.tgz", - "integrity": "sha512-QSSVYj7pYFN49kW77o2s9xTCwZ8F2xLbjLLSEVh8D2F4JUhZtPAGOFLTD+ffqksBx/u4cE/KImFjyhqCjn/LIA==", - "bundled": true, - "dev": true, - "requires": { - "@types/node": "*" - } - }, - "@types/lru-cache": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/@types/lru-cache/-/lru-cache-5.1.1.tgz", - "integrity": "sha512-ssE3Vlrys7sdIzs5LOxCzTVMsU7i9oa/IaW92wF32JFb3CVczqOkru2xspuKczHEbG3nvmPY7IFqVmGGHdNbYw==", - "bundled": true, - "dev": true - }, - "@types/node": { - "version": "17.0.0", - "resolved": "https://registry.npmjs.org/@types/node/-/node-17.0.0.tgz", - "integrity": "sha512-eMhwJXc931Ihh4tkU+Y7GiLzT/y/DBNpNtr4yU9O2w3SYBsr9NaOPhQlLKRmoWtI54uNwuo0IOUFQjVOTZYRvw==", - "bundled": true, - "dev": true - }, - "@types/seedrandom": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/@types/seedrandom/-/seedrandom-3.0.1.tgz", - "integrity": "sha512-giB9gzDeiCeloIXDgzFBCgjj1k4WxcDrZtGl6h1IqmUPlxF+Nx8Ve+96QCyDZ/HseB/uvDsKbpib9hU5cU53pw==", - "bundled": true, - "dev": true - }, - "base64-js": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", - "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", - "bundled": true, - "dev": true - }, - "brorand": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz", - "integrity": "sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8=", - "bundled": true, - "dev": true - }, - "buffer": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz", - "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==", - "bundled": true, - "dev": true, - "requires": { - "base64-js": "^1.3.1", - "ieee754": "^1.2.1" - } - }, - "bufferutil": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/bufferutil/-/bufferutil-4.0.5.tgz", - "integrity": "sha512-HTm14iMQKK2FjFLRTM5lAVcyaUzOnqbPtesFIvREgXpJHdQm8bWS+GkQgIkfaBYRHuCnea7w8UVNfwiAQhlr9A==", - "dev": true, - "optional": true, - "requires": { - "node-gyp-build": "^4.3.0" - } - }, - "catering": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/catering/-/catering-2.1.0.tgz", - "integrity": "sha512-M5imwzQn6y+ODBfgi+cfgZv2hIUI6oYU/0f35Mdb1ujGeqeoI5tOnl9Q13DTH7LW+7er+NYq8stNOKZD/Z3U/A==", - "bundled": true, - "dev": true, - "requires": { - "queue-tick": "^1.0.0" - } - }, - "elliptic": { - "version": "6.5.4", - "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.4.tgz", - "integrity": "sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ==", - "bundled": true, - "dev": true, - "requires": { - "bn.js": "^4.11.9", - "brorand": "^1.1.0", - "hash.js": "^1.0.0", - "hmac-drbg": "^1.0.1", - "inherits": "^2.0.4", - "minimalistic-assert": "^1.0.1", - "minimalistic-crypto-utils": "^1.0.1" - }, - "dependencies": { - "bn.js": { - "version": "4.12.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", - "bundled": true, - "dev": true - } - } - }, - "emittery": { - "version": "0.10.0", - "resolved": "https://registry.npmjs.org/emittery/-/emittery-0.10.0.tgz", - "integrity": "sha512-AGvFfs+d0JKCJQ4o01ASQLGPmSCxgfU9RFXvzPvZdjKK8oscynksuJhWrSTSw7j7Ep/sZct5b5ZhYCi8S/t0HQ==", - "bundled": true, - "dev": true - }, - "hash.js": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.7.tgz", - "integrity": "sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==", - "bundled": true, - "dev": true, - "requires": { - "inherits": "^2.0.3", - "minimalistic-assert": "^1.0.1" - } - }, - "hmac-drbg": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz", - "integrity": "sha1-0nRXAQJabHdabFRXk+1QL8DGSaE=", - "bundled": true, - "dev": true, - "requires": { - "hash.js": "^1.0.3", - "minimalistic-assert": "^1.0.0", - "minimalistic-crypto-utils": "^1.0.1" - } - }, - "ieee754": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", - "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", - "bundled": true, - "dev": true - }, - "inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", - "bundled": true, - "dev": true - }, - "is-buffer": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-2.0.5.tgz", - "integrity": "sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ==", - "bundled": true, - "dev": true - }, - "keccak": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/keccak/-/keccak-3.0.2.tgz", - "integrity": "sha512-PyKKjkH53wDMLGrvmRGSNWgmSxZOUqbnXwKL9tmgbFYA1iAYqW21kfR7mZXV0MlESiefxQQE9X9fTa3X+2MPDQ==", - "bundled": true, - "dev": true, - "requires": { - "node-addon-api": "^2.0.0", - "node-gyp-build": "^4.2.0", - "readable-stream": "^3.6.0" - } - }, - "leveldown": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/leveldown/-/leveldown-6.1.0.tgz", - "integrity": "sha512-8C7oJDT44JXxh04aSSsfcMI8YiaGRhOFI9/pMEL7nWJLVsWajDPTRxsSHTM2WcTVY5nXM+SuRHzPPi0GbnDX+w==", - "bundled": true, - "dev": true, - "requires": { - "abstract-leveldown": "^7.2.0", - "napi-macros": "~2.0.0", - "node-gyp-build": "^4.3.0" - }, - "dependencies": { - "abstract-leveldown": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/abstract-leveldown/-/abstract-leveldown-7.2.0.tgz", - "integrity": "sha512-DnhQwcFEaYsvYDnACLZhMmCWd3rkOeEvglpa4q5i/5Jlm3UIsWaxVzuXvDLFCSCWRO3yy2/+V/G7FusFgejnfQ==", - "bundled": true, - "dev": true, - "requires": { - "buffer": "^6.0.3", - "catering": "^2.0.0", - "is-buffer": "^2.0.5", - "level-concat-iterator": "^3.0.0", - "level-supports": "^2.0.1", - "queue-microtask": "^1.2.3" - } - }, - "level-concat-iterator": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/level-concat-iterator/-/level-concat-iterator-3.1.0.tgz", - "integrity": "sha512-BWRCMHBxbIqPxJ8vHOvKUsaO0v1sLYZtjN3K2iZJsRBYtp+ONsY6Jfi6hy9K3+zolgQRryhIn2NRZjZnWJ9NmQ==", - "bundled": true, - "dev": true, - "requires": { - "catering": "^2.1.0" - } - }, - "level-supports": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/level-supports/-/level-supports-2.1.0.tgz", - "integrity": "sha512-E486g1NCjW5cF78KGPrMDRBYzPuueMZ6VBXHT6gC7A8UYWGiM14fGgp+s/L1oFfDWSPV/+SFkYCmZ0SiESkRKA==", - "bundled": true, - "dev": true - } - } - }, - "minimalistic-assert": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", - "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==", - "bundled": true, - "dev": true - }, - "minimalistic-crypto-utils": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz", - "integrity": "sha1-9sAMHAsIIkblxNmd+4x8CDsrWCo=", - "bundled": true, - "dev": true - }, - "napi-macros": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/napi-macros/-/napi-macros-2.0.0.tgz", - "integrity": "sha512-A0xLykHtARfueITVDernsAWdtIMbOJgKgcluwENp3AlsKN/PloyO10HtmoqnFAQAcxPkgZN7wdfPfEd0zNGxbg==", - "bundled": true, - "dev": true - }, - "node-addon-api": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-2.0.2.tgz", - "integrity": "sha512-Ntyt4AIXyaLIuMHF6IOoTakB3K+RWxwtsHNRxllEoA6vPwP9o4866g6YWDLUdnucilZhmkxiHwHr11gAENw+QA==", - "bundled": true, - "dev": true - }, - "node-gyp-build": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.3.0.tgz", - "integrity": "sha512-iWjXZvmboq0ja1pUGULQBexmxq8CV4xBhX7VDOTbL7ZR4FOowwY/VOtRxBN/yKxmdGoIp4j5ysNT4u3S2pDQ3Q==", - "bundled": true, - "dev": true - }, - "queue-microtask": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", - "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", - "bundled": true, - "dev": true - }, - "queue-tick": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/queue-tick/-/queue-tick-1.0.0.tgz", - "integrity": "sha512-ULWhjjE8BmiICGn3G8+1L9wFpERNxkf8ysxkAer4+TFdRefDaXOCV5m92aMB9FtBVmn/8sETXLXY6BfW7hyaWQ==", - "bundled": true, - "dev": true - }, - "readable-stream": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", - "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", - "bundled": true, - "dev": true, - "requires": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - } - }, - "safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", - "bundled": true, - "dev": true - }, - "secp256k1": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/secp256k1/-/secp256k1-4.0.3.tgz", - "integrity": "sha512-NLZVf+ROMxwtEj3Xa562qgv2BK5e2WNmXPiOdVIPLgs6lyTzMvBq0aWTYMI5XCP9jZMVKOcqZLw/Wc4vDkuxhA==", - "bundled": true, - "dev": true, - "requires": { - "elliptic": "^6.5.4", - "node-addon-api": "^2.0.0", - "node-gyp-build": "^4.2.0" - } - }, - "string_decoder": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", - "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", - "bundled": true, - "dev": true, - "requires": { - "safe-buffer": "~5.2.0" - } - }, - "utf-8-validate": { - "version": "5.0.7", - "resolved": "https://registry.npmjs.org/utf-8-validate/-/utf-8-validate-5.0.7.tgz", - "integrity": "sha512-vLt1O5Pp+flcArHGIyKEQq883nBt8nN8tVBcoL0qUXj2XT1n7p70yGIq2VK98I5FdZ1YHc0wk/koOnHjnXWk1Q==", - "dev": true, - "optional": true, - "requires": { - "node-gyp-build": "^4.3.0" - } - }, - "util-deprecate": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", - "bundled": true, - "dev": true - } - } - } - } - }, - "@ethereumjs/block": { - "version": "3.6.3", - "resolved": "https://registry.npmjs.org/@ethereumjs/block/-/block-3.6.3.tgz", - "integrity": "sha512-CegDeryc2DVKnDkg5COQrE0bJfw/p0v3GBk2W5/Dj5dOVfEmb50Ux0GLnSPypooLnfqjwFaorGuT9FokWB3GRg==", - "requires": { - "@ethereumjs/common": "^2.6.5", - "@ethereumjs/tx": "^3.5.2", - "ethereumjs-util": "^7.1.5", - "merkle-patricia-tree": "^4.2.4" - }, - "dependencies": { - "@ethereumjs/common": { - "version": "2.6.5", - "resolved": "https://registry.npmjs.org/@ethereumjs/common/-/common-2.6.5.tgz", - "integrity": "sha512-lRyVQOeCDaIVtgfbowla32pzeDv2Obr8oR8Put5RdUBNRGr1VGPGQNGP6elWIpgK3YdpzqTOh4GyUGOureVeeA==", - "requires": { - "crc-32": "^1.2.0", - "ethereumjs-util": "^7.1.5" - } - }, - "@ethereumjs/tx": { - "version": "3.5.2", - "resolved": "https://registry.npmjs.org/@ethereumjs/tx/-/tx-3.5.2.tgz", - "integrity": "sha512-gQDNJWKrSDGu2w7w0PzVXVBNMzb7wwdDOmOqczmhNjqFxFuIbhVJDwiGEnxFNC2/b8ifcZzY7MLcluizohRzNw==", - "requires": { - "@ethereumjs/common": "^2.6.4", - "ethereumjs-util": "^7.1.5" - } - } - } - }, - "@ethereumjs/blockchain": { - "version": "5.5.3", - "resolved": "https://registry.npmjs.org/@ethereumjs/blockchain/-/blockchain-5.5.3.tgz", - "integrity": "sha512-bi0wuNJ1gw4ByNCV56H0Z4Q7D+SxUbwyG12Wxzbvqc89PXLRNR20LBcSUZRKpN0+YCPo6m0XZL/JLio3B52LTw==", - "dev": true, - "requires": { - "@ethereumjs/block": "^3.6.2", - "@ethereumjs/common": "^2.6.4", - "@ethereumjs/ethash": "^1.1.0", - "debug": "^4.3.3", - "ethereumjs-util": "^7.1.5", - "level-mem": "^5.0.1", - "lru-cache": "^5.1.1", - "semaphore-async-await": "^1.5.1" - }, - "dependencies": { - "@ethereumjs/common": { - "version": "2.6.5", - "resolved": "https://registry.npmjs.org/@ethereumjs/common/-/common-2.6.5.tgz", - "integrity": "sha512-lRyVQOeCDaIVtgfbowla32pzeDv2Obr8oR8Put5RdUBNRGr1VGPGQNGP6elWIpgK3YdpzqTOh4GyUGOureVeeA==", - "dev": true, - "requires": { - "crc-32": "^1.2.0", - "ethereumjs-util": "^7.1.5" - } - } - } - }, - "@ethereumjs/common": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/@ethereumjs/common/-/common-3.1.2.tgz", - "integrity": "sha512-YV+bZfRlFhAXg+FfwC5r4UQKVj4OG7vDP5/JvvNXLLbYpNplH5Vca9jD0L+ab8y0YlTYJMQM1ALyHFu3AE3eBA==", - "requires": { - "@ethereumjs/util": "^8.0.6", - "crc-32": "^1.2.0" - } - }, - "@ethereumjs/ethash": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@ethereumjs/ethash/-/ethash-1.1.0.tgz", - "integrity": "sha512-/U7UOKW6BzpA+Vt+kISAoeDie1vAvY4Zy2KF5JJb+So7+1yKmJeJEHOGSnQIj330e9Zyl3L5Nae6VZyh2TJnAA==", - "dev": true, - "requires": { - "@ethereumjs/block": "^3.5.0", - "@types/levelup": "^4.3.0", - "buffer-xor": "^2.0.1", - "ethereumjs-util": "^7.1.1", - "miller-rabin": "^4.0.0" - }, - "dependencies": { - "buffer-xor": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/buffer-xor/-/buffer-xor-2.0.2.tgz", - "integrity": "sha512-eHslX0bin3GB+Lx2p7lEYRShRewuNZL3fUl4qlVJGGiwoPGftmt8JQgk2Y9Ji5/01TnVDo33E5b5O3vUB1HdqQ==", - "dev": true, - "requires": { - "safe-buffer": "^5.1.1" - } - } - } - }, - "@ethereumjs/rlp": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/@ethereumjs/rlp/-/rlp-4.0.1.tgz", - "integrity": "sha512-tqsQiBQDQdmPWE1xkkBq4rlSW5QZpLOUJ5RJh2/9fug+q9tnUhuZoVLk7s0scUIKTOzEtR72DFBXI4WiZcMpvw==" - }, - "@ethereumjs/tx": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/@ethereumjs/tx/-/tx-4.1.2.tgz", - "integrity": "sha512-PWWyO9lAFOiLwk7nB9OQisoJUsuvMz2PN2v4/ILbBpzamC5Ug79OddVq9r4rKvIDLPY+bn4NFerxBJg29+sjaA==", - "requires": { - "@chainsafe/ssz": "^0.11.1", - "@ethereumjs/common": "^3.1.2", - "@ethereumjs/rlp": "^4.0.1", - "@ethereumjs/util": "^8.0.6", - "ethereum-cryptography": "^2.0.0" - }, - "dependencies": { - "@chainsafe/as-sha256": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/@chainsafe/as-sha256/-/as-sha256-0.4.1.tgz", - "integrity": "sha512-IqeeGwQihK6Y2EYLFofqs2eY2ep1I2MvQXHzOAI+5iQN51OZlUkrLgyAugu2x86xZewDk5xas7lNczkzFzF62w==" - }, - "@chainsafe/persistent-merkle-tree": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/@chainsafe/persistent-merkle-tree/-/persistent-merkle-tree-0.6.1.tgz", - "integrity": "sha512-gcENLemRR13+1MED2NeZBMA7FRS0xQPM7L2vhMqvKkjqtFT4YfjSVADq5U0iLuQLhFUJEMVuA8fbv5v+TN6O9A==", - "requires": { - "@chainsafe/as-sha256": "^0.4.1", - "@noble/hashes": "^1.3.0" - } - }, - "@chainsafe/ssz": { - "version": "0.11.1", - "resolved": "https://registry.npmjs.org/@chainsafe/ssz/-/ssz-0.11.1.tgz", - "integrity": "sha512-cB8dBkgGN6ZoeOKuk+rIRHKN0L5i9JLGeC0Lui71QX0TuLcQKwgbfkUexpyJxnGFatWf8yeJxlOjozMn/OTP0g==", - "requires": { - "@chainsafe/as-sha256": "^0.4.1", - "@chainsafe/persistent-merkle-tree": "^0.6.1" - } - }, - "@noble/curves": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@noble/curves/-/curves-1.0.0.tgz", - "integrity": "sha512-2upgEu0iLiDVDZkNLeFV2+ht0BAVgQnEmCk6JsOch9Rp8xfkMCbvbAZlA2pBHQc73dbl+vFOXfqkf4uemdn0bw==", - "requires": { - "@noble/hashes": "1.3.0" - }, - "dependencies": { - "@noble/hashes": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.3.0.tgz", - "integrity": "sha512-ilHEACi9DwqJB0pw7kv+Apvh50jiiSyR/cQ3y4W7lOR5mhvn/50FLUfsnfJz0BDZtl/RR16kXvptiv6q1msYZg==" - } - } - }, - "@noble/hashes": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.3.1.tgz", - "integrity": "sha512-EbqwksQwz9xDRGfDST86whPBgM65E0OH/pCgqW0GBVzO22bNE+NuIbeTb714+IfSjU3aRk47EUvXIb5bTsenKA==" - }, - "@scure/bip32": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/@scure/bip32/-/bip32-1.3.0.tgz", - "integrity": "sha512-bcKpo1oj54hGholplGLpqPHRbIsnbixFtc06nwuNM5/dwSXOq/AAYoIBRsBmnZJSdfeNW5rnff7NTAz3ZCqR9Q==", - "requires": { - "@noble/curves": "~1.0.0", - "@noble/hashes": "~1.3.0", - "@scure/base": "~1.1.0" - } - }, - "@scure/bip39": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@scure/bip39/-/bip39-1.2.0.tgz", - "integrity": "sha512-SX/uKq52cuxm4YFXWFaVByaSHJh2w3BnokVSeUJVCv6K7WulT9u2BuNRBhuFl8vAuYnzx9bEu9WgpcNYTrYieg==", - "requires": { - "@noble/hashes": "~1.3.0", - "@scure/base": "~1.1.0" - } - }, - "ethereum-cryptography": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-2.0.0.tgz", - "integrity": "sha512-g25m4EtfQGjstWgVE1aIz7XYYjf3kH5kG17ULWVB5dH6uLahsoltOhACzSxyDV+fhn4gbR4xRrOXGe6r2uh4Bg==", - "requires": { - "@noble/curves": "1.0.0", - "@noble/hashes": "1.3.0", - "@scure/bip32": "1.3.0", - "@scure/bip39": "1.2.0" - }, - "dependencies": { - "@noble/hashes": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.3.0.tgz", - "integrity": "sha512-ilHEACi9DwqJB0pw7kv+Apvh50jiiSyR/cQ3y4W7lOR5mhvn/50FLUfsnfJz0BDZtl/RR16kXvptiv6q1msYZg==" - } - } - } - } - }, - "@ethereumjs/util": { - "version": "8.0.6", - "resolved": "https://registry.npmjs.org/@ethereumjs/util/-/util-8.0.6.tgz", - "integrity": "sha512-zFLG/gXtF3QUC7iKFn4PT6HCr+DEnlCbwUGKGtXoqjA+64T+e0FuqMjlo4bQIY2ngRzk3EtudKdGYC4g31ehhg==", - "requires": { - "@chainsafe/ssz": "^0.11.1", - "@ethereumjs/rlp": "^4.0.1", - "ethereum-cryptography": "^2.0.0", - "micro-ftch": "^0.3.1" - }, - "dependencies": { - "@chainsafe/as-sha256": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/@chainsafe/as-sha256/-/as-sha256-0.4.1.tgz", - "integrity": "sha512-IqeeGwQihK6Y2EYLFofqs2eY2ep1I2MvQXHzOAI+5iQN51OZlUkrLgyAugu2x86xZewDk5xas7lNczkzFzF62w==" - }, - "@chainsafe/persistent-merkle-tree": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/@chainsafe/persistent-merkle-tree/-/persistent-merkle-tree-0.6.1.tgz", - "integrity": "sha512-gcENLemRR13+1MED2NeZBMA7FRS0xQPM7L2vhMqvKkjqtFT4YfjSVADq5U0iLuQLhFUJEMVuA8fbv5v+TN6O9A==", - "requires": { - "@chainsafe/as-sha256": "^0.4.1", - "@noble/hashes": "^1.3.0" - } - }, - "@chainsafe/ssz": { - "version": "0.11.1", - "resolved": "https://registry.npmjs.org/@chainsafe/ssz/-/ssz-0.11.1.tgz", - "integrity": "sha512-cB8dBkgGN6ZoeOKuk+rIRHKN0L5i9JLGeC0Lui71QX0TuLcQKwgbfkUexpyJxnGFatWf8yeJxlOjozMn/OTP0g==", - "requires": { - "@chainsafe/as-sha256": "^0.4.1", - "@chainsafe/persistent-merkle-tree": "^0.6.1" - } - }, - "@noble/curves": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@noble/curves/-/curves-1.0.0.tgz", - "integrity": "sha512-2upgEu0iLiDVDZkNLeFV2+ht0BAVgQnEmCk6JsOch9Rp8xfkMCbvbAZlA2pBHQc73dbl+vFOXfqkf4uemdn0bw==", - "requires": { - "@noble/hashes": "1.3.0" - }, - "dependencies": { - "@noble/hashes": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.3.0.tgz", - "integrity": "sha512-ilHEACi9DwqJB0pw7kv+Apvh50jiiSyR/cQ3y4W7lOR5mhvn/50FLUfsnfJz0BDZtl/RR16kXvptiv6q1msYZg==" - } - } - }, - "@noble/hashes": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.3.1.tgz", - "integrity": "sha512-EbqwksQwz9xDRGfDST86whPBgM65E0OH/pCgqW0GBVzO22bNE+NuIbeTb714+IfSjU3aRk47EUvXIb5bTsenKA==" - }, - "@scure/bip32": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/@scure/bip32/-/bip32-1.3.0.tgz", - "integrity": "sha512-bcKpo1oj54hGholplGLpqPHRbIsnbixFtc06nwuNM5/dwSXOq/AAYoIBRsBmnZJSdfeNW5rnff7NTAz3ZCqR9Q==", - "requires": { - "@noble/curves": "~1.0.0", - "@noble/hashes": "~1.3.0", - "@scure/base": "~1.1.0" - } - }, - "@scure/bip39": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@scure/bip39/-/bip39-1.2.0.tgz", - "integrity": "sha512-SX/uKq52cuxm4YFXWFaVByaSHJh2w3BnokVSeUJVCv6K7WulT9u2BuNRBhuFl8vAuYnzx9bEu9WgpcNYTrYieg==", - "requires": { - "@noble/hashes": "~1.3.0", - "@scure/base": "~1.1.0" - } - }, - "ethereum-cryptography": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-2.0.0.tgz", - "integrity": "sha512-g25m4EtfQGjstWgVE1aIz7XYYjf3kH5kG17ULWVB5dH6uLahsoltOhACzSxyDV+fhn4gbR4xRrOXGe6r2uh4Bg==", - "requires": { - "@noble/curves": "1.0.0", - "@noble/hashes": "1.3.0", - "@scure/bip32": "1.3.0", - "@scure/bip39": "1.2.0" - }, - "dependencies": { - "@noble/hashes": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.3.0.tgz", - "integrity": "sha512-ilHEACi9DwqJB0pw7kv+Apvh50jiiSyR/cQ3y4W7lOR5mhvn/50FLUfsnfJz0BDZtl/RR16kXvptiv6q1msYZg==" - } - } - } - } - }, - "@ethereumjs/vm": { - "version": "5.6.0", - "resolved": "https://registry.npmjs.org/@ethereumjs/vm/-/vm-5.6.0.tgz", - "integrity": "sha512-J2m/OgjjiGdWF2P9bj/4LnZQ1zRoZhY8mRNVw/N3tXliGI8ai1sI1mlDPkLpeUUM4vq54gH6n0ZlSpz8U/qlYQ==", - "dev": true, - "requires": { - "@ethereumjs/block": "^3.6.0", - "@ethereumjs/blockchain": "^5.5.0", - "@ethereumjs/common": "^2.6.0", - "@ethereumjs/tx": "^3.4.0", - "async-eventemitter": "^0.2.4", - "core-js-pure": "^3.0.1", - "debug": "^2.2.0", - "ethereumjs-util": "^7.1.3", - "functional-red-black-tree": "^1.0.1", - "mcl-wasm": "^0.7.1", - "merkle-patricia-tree": "^4.2.2", - "rustbn.js": "~0.2.0" - }, - "dependencies": { - "@ethereumjs/common": { - "version": "2.6.5", - "resolved": "https://registry.npmjs.org/@ethereumjs/common/-/common-2.6.5.tgz", - "integrity": "sha512-lRyVQOeCDaIVtgfbowla32pzeDv2Obr8oR8Put5RdUBNRGr1VGPGQNGP6elWIpgK3YdpzqTOh4GyUGOureVeeA==", - "dev": true, - "requires": { - "crc-32": "^1.2.0", - "ethereumjs-util": "^7.1.5" - } - }, - "@ethereumjs/tx": { - "version": "3.5.2", - "resolved": "https://registry.npmjs.org/@ethereumjs/tx/-/tx-3.5.2.tgz", - "integrity": "sha512-gQDNJWKrSDGu2w7w0PzVXVBNMzb7wwdDOmOqczmhNjqFxFuIbhVJDwiGEnxFNC2/b8ifcZzY7MLcluizohRzNw==", - "dev": true, - "requires": { - "@ethereumjs/common": "^2.6.4", - "ethereumjs-util": "^7.1.5" - } - }, - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "requires": { - "ms": "2.0.0" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "dev": true - } - } - }, - "@ethersproject/abi": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/abi/-/abi-5.7.0.tgz", - "integrity": "sha512-351ktp42TiRcYB3H1OP8yajPeAQstMW/yCFokj/AthP9bLHzQFPlOrxOcwYEDkUAICmOHljvN4K39OMTMUa9RA==", - "requires": { - "@ethersproject/address": "^5.7.0", - "@ethersproject/bignumber": "^5.7.0", - "@ethersproject/bytes": "^5.7.0", - "@ethersproject/constants": "^5.7.0", - "@ethersproject/hash": "^5.7.0", - "@ethersproject/keccak256": "^5.7.0", - "@ethersproject/logger": "^5.7.0", - "@ethersproject/properties": "^5.7.0", - "@ethersproject/strings": "^5.7.0" - } - }, - "@ethersproject/abstract-provider": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/abstract-provider/-/abstract-provider-5.7.0.tgz", - "integrity": "sha512-R41c9UkchKCpAqStMYUpdunjo3pkEvZC3FAwZn5S5MGbXoMQOHIdHItezTETxAO5bevtMApSyEhn9+CHcDsWBw==", - "requires": { - "@ethersproject/bignumber": "^5.7.0", - "@ethersproject/bytes": "^5.7.0", - "@ethersproject/logger": "^5.7.0", - "@ethersproject/networks": "^5.7.0", - "@ethersproject/properties": "^5.7.0", - "@ethersproject/transactions": "^5.7.0", - "@ethersproject/web": "^5.7.0" - } - }, - "@ethersproject/abstract-signer": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/abstract-signer/-/abstract-signer-5.7.0.tgz", - "integrity": "sha512-a16V8bq1/Cz+TGCkE2OPMTOUDLS3grCpdjoJCYNnVBbdYEMSgKrU0+B90s8b6H+ByYTBZN7a3g76jdIJi7UfKQ==", - "requires": { - "@ethersproject/abstract-provider": "^5.7.0", - "@ethersproject/bignumber": "^5.7.0", - "@ethersproject/bytes": "^5.7.0", - "@ethersproject/logger": "^5.7.0", - "@ethersproject/properties": "^5.7.0" - } - }, - "@ethersproject/address": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/address/-/address-5.7.0.tgz", - "integrity": "sha512-9wYhYt7aghVGo758POM5nqcOMaE168Q6aRLJZwUmiqSrAungkG74gSSeKEIR7ukixesdRZGPgVqme6vmxs1fkA==", - "requires": { - "@ethersproject/bignumber": "^5.7.0", - "@ethersproject/bytes": "^5.7.0", - "@ethersproject/keccak256": "^5.7.0", - "@ethersproject/logger": "^5.7.0", - "@ethersproject/rlp": "^5.7.0" - } - }, - "@ethersproject/base64": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/base64/-/base64-5.7.0.tgz", - "integrity": "sha512-Dr8tcHt2mEbsZr/mwTPIQAf3Ai0Bks/7gTw9dSqk1mQvhW3XvRlmDJr/4n+wg1JmCl16NZue17CDh8xb/vZ0sQ==", - "requires": { - "@ethersproject/bytes": "^5.7.0" - } - }, - "@ethersproject/basex": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/basex/-/basex-5.7.0.tgz", - "integrity": "sha512-ywlh43GwZLv2Voc2gQVTKBoVQ1mti3d8HK5aMxsfu/nRDnMmNqaSJ3r3n85HBByT8OpoY96SXM1FogC533T4zw==", - "requires": { - "@ethersproject/bytes": "^5.7.0", - "@ethersproject/properties": "^5.7.0" - } - }, - "@ethersproject/bignumber": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/bignumber/-/bignumber-5.7.0.tgz", - "integrity": "sha512-n1CAdIHRWjSucQO3MC1zPSVgV/6dy/fjL9pMrPP9peL+QxEg9wOsVqwD4+818B6LUEtaXzVHQiuivzRoxPxUGw==", - "requires": { - "@ethersproject/bytes": "^5.7.0", - "@ethersproject/logger": "^5.7.0", - "bn.js": "^5.2.1" - } - }, - "@ethersproject/bytes": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/bytes/-/bytes-5.7.0.tgz", - "integrity": "sha512-nsbxwgFXWh9NyYWo+U8atvmMsSdKJprTcICAkvbBffT75qDocbuggBU0SJiVK2MuTrp0q+xvLkTnGMPK1+uA9A==", - "requires": { - "@ethersproject/logger": "^5.7.0" - } - }, - "@ethersproject/constants": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/constants/-/constants-5.7.0.tgz", - "integrity": "sha512-DHI+y5dBNvkpYUMiRQyxRBYBefZkJfo70VUkUAsRjcPs47muV9evftfZ0PJVCXYbAiCgght0DtcF9srFQmIgWA==", - "requires": { - "@ethersproject/bignumber": "^5.7.0" - } - }, - "@ethersproject/contracts": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/contracts/-/contracts-5.7.0.tgz", - "integrity": "sha512-5GJbzEU3X+d33CdfPhcyS+z8MzsTrBGk/sc+G+59+tPa9yFkl6HQ9D6L0QMgNTA9q8dT0XKxxkyp883XsQvbbg==", - "requires": { - "@ethersproject/abi": "^5.7.0", - "@ethersproject/abstract-provider": "^5.7.0", - "@ethersproject/abstract-signer": "^5.7.0", - "@ethersproject/address": "^5.7.0", - "@ethersproject/bignumber": "^5.7.0", - "@ethersproject/bytes": "^5.7.0", - "@ethersproject/constants": "^5.7.0", - "@ethersproject/logger": "^5.7.0", - "@ethersproject/properties": "^5.7.0", - "@ethersproject/transactions": "^5.7.0" - } - }, - "@ethersproject/hardware-wallets": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/hardware-wallets/-/hardware-wallets-5.7.0.tgz", - "integrity": "sha512-DjMMXIisRc8xFvEoLoYz1w7JDOYmaz/a0X9sp7Zu668RR8U1zCAyj5ow25HLRW+TCzEC5XiFetTXqS5kXonFCQ==", - "requires": { - "@ledgerhq/hw-app-eth": "5.27.2", - "@ledgerhq/hw-transport": "5.26.0", - "@ledgerhq/hw-transport-node-hid": "5.26.0", - "@ledgerhq/hw-transport-u2f": "5.26.0", - "ethers": "^5.7.0" - } - }, - "@ethersproject/hash": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/hash/-/hash-5.7.0.tgz", - "integrity": "sha512-qX5WrQfnah1EFnO5zJv1v46a8HW0+E5xuBBDTwMFZLuVTx0tbU2kkx15NqdjxecrLGatQN9FGQKpb1FKdHCt+g==", - "requires": { - "@ethersproject/abstract-signer": "^5.7.0", - "@ethersproject/address": "^5.7.0", - "@ethersproject/base64": "^5.7.0", - "@ethersproject/bignumber": "^5.7.0", - "@ethersproject/bytes": "^5.7.0", - "@ethersproject/keccak256": "^5.7.0", - "@ethersproject/logger": "^5.7.0", - "@ethersproject/properties": "^5.7.0", - "@ethersproject/strings": "^5.7.0" - } - }, - "@ethersproject/hdnode": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/hdnode/-/hdnode-5.7.0.tgz", - "integrity": "sha512-OmyYo9EENBPPf4ERhR7oj6uAtUAhYGqOnIS+jE5pTXvdKBS99ikzq1E7Iv0ZQZ5V36Lqx1qZLeak0Ra16qpeOg==", - "requires": { - "@ethersproject/abstract-signer": "^5.7.0", - "@ethersproject/basex": "^5.7.0", - "@ethersproject/bignumber": "^5.7.0", - "@ethersproject/bytes": "^5.7.0", - "@ethersproject/logger": "^5.7.0", - "@ethersproject/pbkdf2": "^5.7.0", - "@ethersproject/properties": "^5.7.0", - "@ethersproject/sha2": "^5.7.0", - "@ethersproject/signing-key": "^5.7.0", - "@ethersproject/strings": "^5.7.0", - "@ethersproject/transactions": "^5.7.0", - "@ethersproject/wordlists": "^5.7.0" - } - }, - "@ethersproject/json-wallets": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/json-wallets/-/json-wallets-5.7.0.tgz", - "integrity": "sha512-8oee5Xgu6+RKgJTkvEMl2wDgSPSAQ9MB/3JYjFV9jlKvcYHUXZC+cQp0njgmxdHkYWn8s6/IqIZYm0YWCjO/0g==", - "requires": { - "@ethersproject/abstract-signer": "^5.7.0", - "@ethersproject/address": "^5.7.0", - "@ethersproject/bytes": "^5.7.0", - "@ethersproject/hdnode": "^5.7.0", - "@ethersproject/keccak256": "^5.7.0", - "@ethersproject/logger": "^5.7.0", - "@ethersproject/pbkdf2": "^5.7.0", - "@ethersproject/properties": "^5.7.0", - "@ethersproject/random": "^5.7.0", - "@ethersproject/strings": "^5.7.0", - "@ethersproject/transactions": "^5.7.0", - "aes-js": "3.0.0", - "scrypt-js": "3.0.1" - } - }, - "@ethersproject/keccak256": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/keccak256/-/keccak256-5.7.0.tgz", - "integrity": "sha512-2UcPboeL/iW+pSg6vZ6ydF8tCnv3Iu/8tUmLLzWWGzxWKFFqOBQFLo6uLUv6BDrLgCDfN28RJ/wtByx+jZ4KBg==", - "requires": { - "@ethersproject/bytes": "^5.7.0", - "js-sha3": "0.8.0" - } - }, - "@ethersproject/logger": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/logger/-/logger-5.7.0.tgz", - "integrity": "sha512-0odtFdXu/XHtjQXJYA3u9G0G8btm0ND5Cu8M7i5vhEcE8/HmF4Lbdqanwyv4uQTr2tx6b7fQRmgLrsnpQlmnig==" - }, - "@ethersproject/networks": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/@ethersproject/networks/-/networks-5.7.1.tgz", - "integrity": "sha512-n/MufjFYv3yFcUyfhnXotyDlNdFb7onmkSy8aQERi2PjNcnWQ66xXxa3XlS8nCcA8aJKJjIIMNJTC7tu80GwpQ==", - "requires": { - "@ethersproject/logger": "^5.7.0" - } - }, - "@ethersproject/pbkdf2": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/pbkdf2/-/pbkdf2-5.7.0.tgz", - "integrity": "sha512-oR/dBRZR6GTyaofd86DehG72hY6NpAjhabkhxgr3X2FpJtJuodEl2auADWBZfhDHgVCbu3/H/Ocq2uC6dpNjjw==", - "requires": { - "@ethersproject/bytes": "^5.7.0", - "@ethersproject/sha2": "^5.7.0" - } - }, - "@ethersproject/properties": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/properties/-/properties-5.7.0.tgz", - "integrity": "sha512-J87jy8suntrAkIZtecpxEPxY//szqr1mlBaYlQ0r4RCaiD2hjheqF9s1LVE8vVuJCXisjIP+JgtK/Do54ej4Sw==", - "requires": { - "@ethersproject/logger": "^5.7.0" - } - }, - "@ethersproject/providers": { - "version": "5.7.2", - "resolved": "https://registry.npmjs.org/@ethersproject/providers/-/providers-5.7.2.tgz", - "integrity": "sha512-g34EWZ1WWAVgr4aptGlVBF8mhl3VWjv+8hoAnzStu8Ah22VHBsuGzP17eb6xDVRzw895G4W7vvx60lFFur/1Rg==", - "requires": { - "@ethersproject/abstract-provider": "^5.7.0", - "@ethersproject/abstract-signer": "^5.7.0", - "@ethersproject/address": "^5.7.0", - "@ethersproject/base64": "^5.7.0", - "@ethersproject/basex": "^5.7.0", - "@ethersproject/bignumber": "^5.7.0", - "@ethersproject/bytes": "^5.7.0", - "@ethersproject/constants": "^5.7.0", - "@ethersproject/hash": "^5.7.0", - "@ethersproject/logger": "^5.7.0", - "@ethersproject/networks": "^5.7.0", - "@ethersproject/properties": "^5.7.0", - "@ethersproject/random": "^5.7.0", - "@ethersproject/rlp": "^5.7.0", - "@ethersproject/sha2": "^5.7.0", - "@ethersproject/strings": "^5.7.0", - "@ethersproject/transactions": "^5.7.0", - "@ethersproject/web": "^5.7.0", - "bech32": "1.1.4", - "ws": "7.4.6" - }, - "dependencies": { - "ws": { - "version": "7.4.6", - "resolved": "https://registry.npmjs.org/ws/-/ws-7.4.6.tgz", - "integrity": "sha512-YmhHDO4MzaDLB+M9ym/mDA5z0naX8j7SIlT8f8z+I0VtzsRbekxEutHSme7NPS2qE8StCYQNUnfWdXta/Yu85A==", - "requires": {} - } - } - }, - "@ethersproject/random": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/random/-/random-5.7.0.tgz", - "integrity": "sha512-19WjScqRA8IIeWclFme75VMXSBvi4e6InrUNuaR4s5pTF2qNhcGdCUwdxUVGtDDqC00sDLCO93jPQoDUH4HVmQ==", - "requires": { - "@ethersproject/bytes": "^5.7.0", - "@ethersproject/logger": "^5.7.0" - } - }, - "@ethersproject/rlp": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/rlp/-/rlp-5.7.0.tgz", - "integrity": "sha512-rBxzX2vK8mVF7b0Tol44t5Tb8gomOHkj5guL+HhzQ1yBh/ydjGnpw6at+X6Iw0Kp3OzzzkcKp8N9r0W4kYSs9w==", - "requires": { - "@ethersproject/bytes": "^5.7.0", - "@ethersproject/logger": "^5.7.0" - } - }, - "@ethersproject/sha2": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/sha2/-/sha2-5.7.0.tgz", - "integrity": "sha512-gKlH42riwb3KYp0reLsFTokByAKoJdgFCwI+CCiX/k+Jm2mbNs6oOaCjYQSlI1+XBVejwH2KrmCbMAT/GnRDQw==", - "requires": { - "@ethersproject/bytes": "^5.7.0", - "@ethersproject/logger": "^5.7.0", - "hash.js": "1.1.7" - } - }, - "@ethersproject/signing-key": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/signing-key/-/signing-key-5.7.0.tgz", - "integrity": "sha512-MZdy2nL3wO0u7gkB4nA/pEf8lu1TlFswPNmy8AiYkfKTdO6eXBJyUdmHO/ehm/htHw9K/qF8ujnTyUAD+Ry54Q==", - "requires": { - "@ethersproject/bytes": "^5.7.0", - "@ethersproject/logger": "^5.7.0", - "@ethersproject/properties": "^5.7.0", - "bn.js": "^5.2.1", - "elliptic": "6.5.4", - "hash.js": "1.1.7" - } - }, - "@ethersproject/solidity": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/solidity/-/solidity-5.7.0.tgz", - "integrity": "sha512-HmabMd2Dt/raavyaGukF4XxizWKhKQ24DoLtdNbBmNKUOPqwjsKQSdV9GQtj9CBEea9DlzETlVER1gYeXXBGaA==", - "requires": { - "@ethersproject/bignumber": "^5.7.0", - "@ethersproject/bytes": "^5.7.0", - "@ethersproject/keccak256": "^5.7.0", - "@ethersproject/logger": "^5.7.0", - "@ethersproject/sha2": "^5.7.0", - "@ethersproject/strings": "^5.7.0" - } - }, - "@ethersproject/strings": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/strings/-/strings-5.7.0.tgz", - "integrity": "sha512-/9nu+lj0YswRNSH0NXYqrh8775XNyEdUQAuf3f+SmOrnVewcJ5SBNAjF7lpgehKi4abvNNXyf+HX86czCdJ8Mg==", - "requires": { - "@ethersproject/bytes": "^5.7.0", - "@ethersproject/constants": "^5.7.0", - "@ethersproject/logger": "^5.7.0" - } - }, - "@ethersproject/transactions": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/transactions/-/transactions-5.7.0.tgz", - "integrity": "sha512-kmcNicCp1lp8qanMTC3RIikGgoJ80ztTyvtsFvCYpSCfkjhD0jZ2LOrnbcuxuToLIUYYf+4XwD1rP+B/erDIhQ==", - "requires": { - "@ethersproject/address": "^5.7.0", - "@ethersproject/bignumber": "^5.7.0", - "@ethersproject/bytes": "^5.7.0", - "@ethersproject/constants": "^5.7.0", - "@ethersproject/keccak256": "^5.7.0", - "@ethersproject/logger": "^5.7.0", - "@ethersproject/properties": "^5.7.0", - "@ethersproject/rlp": "^5.7.0", - "@ethersproject/signing-key": "^5.7.0" - } - }, - "@ethersproject/units": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/units/-/units-5.7.0.tgz", - "integrity": "sha512-pD3xLMy3SJu9kG5xDGI7+xhTEmGXlEqXU4OfNapmfnxLVY4EMSSRp7j1k7eezutBPH7RBN/7QPnwR7hzNlEFeg==", - "requires": { - "@ethersproject/bignumber": "^5.7.0", - "@ethersproject/constants": "^5.7.0", - "@ethersproject/logger": "^5.7.0" - } - }, - "@ethersproject/wallet": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/wallet/-/wallet-5.7.0.tgz", - "integrity": "sha512-MhmXlJXEJFBFVKrDLB4ZdDzxcBxQ3rLyCkhNqVu3CDYvR97E+8r01UgrI+TI99Le+aYm/in/0vp86guJuM7FCA==", - "requires": { - "@ethersproject/abstract-provider": "^5.7.0", - "@ethersproject/abstract-signer": "^5.7.0", - "@ethersproject/address": "^5.7.0", - "@ethersproject/bignumber": "^5.7.0", - "@ethersproject/bytes": "^5.7.0", - "@ethersproject/hash": "^5.7.0", - "@ethersproject/hdnode": "^5.7.0", - "@ethersproject/json-wallets": "^5.7.0", - "@ethersproject/keccak256": "^5.7.0", - "@ethersproject/logger": "^5.7.0", - "@ethersproject/properties": "^5.7.0", - "@ethersproject/random": "^5.7.0", - "@ethersproject/signing-key": "^5.7.0", - "@ethersproject/transactions": "^5.7.0", - "@ethersproject/wordlists": "^5.7.0" - } - }, - "@ethersproject/web": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/@ethersproject/web/-/web-5.7.1.tgz", - "integrity": "sha512-Gueu8lSvyjBWL4cYsWsjh6MtMwM0+H4HvqFPZfB6dV8ctbP9zFAO73VG1cMWae0FLPCtz0peKPpZY8/ugJJX2w==", - "requires": { - "@ethersproject/base64": "^5.7.0", - "@ethersproject/bytes": "^5.7.0", - "@ethersproject/logger": "^5.7.0", - "@ethersproject/properties": "^5.7.0", - "@ethersproject/strings": "^5.7.0" - } - }, - "@ethersproject/wordlists": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/wordlists/-/wordlists-5.7.0.tgz", - "integrity": "sha512-S2TFNJNfHWVHNE6cNDjbVlZ6MgE17MIxMbMg2zv3wn+3XSJGosL1m9ZVv3GXCf/2ymSsQ+hRI5IzoMJTG6aoVA==", - "requires": { - "@ethersproject/bytes": "^5.7.0", - "@ethersproject/hash": "^5.7.0", - "@ethersproject/logger": "^5.7.0", - "@ethersproject/properties": "^5.7.0", - "@ethersproject/strings": "^5.7.0" - } - }, - "@flashbots/ethers-provider-bundle": { - "version": "0.6.2", - "resolved": "https://registry.npmjs.org/@flashbots/ethers-provider-bundle/-/ethers-provider-bundle-0.6.2.tgz", - "integrity": "sha512-W4Hi47zWggWgLBwhoxH3qaojudAjcbBU+ldEYi5o06UQm/25Hk/AUvCLiN+9nvy1g3xxpF9QBdMniUwjC4cpBw==", - "requires": {} - }, - "@ganache/ethereum-address": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/@ganache/ethereum-address/-/ethereum-address-0.1.4.tgz", - "integrity": "sha512-sTkU0M9z2nZUzDeHRzzGlW724xhMLXo2LeX1hixbnjHWY1Zg1hkqORywVfl+g5uOO8ht8T0v+34IxNxAhmWlbw==", - "dev": true, - "requires": { - "@ganache/utils": "0.1.4" - } - }, - "@ganache/ethereum-options": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/@ganache/ethereum-options/-/ethereum-options-0.1.4.tgz", - "integrity": "sha512-i4l46taoK2yC41FPkcoDlEVoqHS52wcbHPqJtYETRWqpOaoj9hAg/EJIHLb1t6Nhva2CdTO84bG+qlzlTxjAHw==", - "dev": true, - "requires": { - "@ganache/ethereum-address": "0.1.4", - "@ganache/ethereum-utils": "0.1.4", - "@ganache/options": "0.1.4", - "@ganache/utils": "0.1.4", - "bip39": "3.0.4", - "seedrandom": "3.0.5" - } - }, - "@ganache/ethereum-utils": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/@ganache/ethereum-utils/-/ethereum-utils-0.1.4.tgz", - "integrity": "sha512-FKXF3zcdDrIoCqovJmHLKZLrJ43234Em2sde/3urUT/10gSgnwlpFmrv2LUMAmSbX3lgZhW/aSs8krGhDevDAg==", - "dev": true, - "requires": { - "@ethereumjs/common": "2.6.0", - "@ethereumjs/tx": "3.4.0", - "@ethereumjs/vm": "5.6.0", - "@ganache/ethereum-address": "0.1.4", - "@ganache/rlp": "0.1.4", - "@ganache/utils": "0.1.4", - "emittery": "0.10.0", - "ethereumjs-abi": "0.6.8", - "ethereumjs-util": "7.1.3" - }, - "dependencies": { - "@ethereumjs/common": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/@ethereumjs/common/-/common-2.6.0.tgz", - "integrity": "sha512-Cq2qS0FTu6O2VU1sgg+WyU9Ps0M6j/BEMHN+hRaECXCV/r0aI78u4N6p52QW/BDVhwWZpCdrvG8X7NJdzlpNUA==", - "dev": true, - "requires": { - "crc-32": "^1.2.0", - "ethereumjs-util": "^7.1.3" - } - }, - "@ethereumjs/tx": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/@ethereumjs/tx/-/tx-3.4.0.tgz", - "integrity": "sha512-WWUwg1PdjHKZZxPPo274ZuPsJCWV3SqATrEKQP1n2DrVYVP1aZIYpo/mFaA0BDoE0tIQmBeimRCEA0Lgil+yYw==", - "dev": true, - "requires": { - "@ethereumjs/common": "^2.6.0", - "ethereumjs-util": "^7.1.3" - } - }, - "emittery": { - "version": "0.10.0", - "resolved": "https://registry.npmjs.org/emittery/-/emittery-0.10.0.tgz", - "integrity": "sha512-AGvFfs+d0JKCJQ4o01ASQLGPmSCxgfU9RFXvzPvZdjKK8oscynksuJhWrSTSw7j7Ep/sZct5b5ZhYCi8S/t0HQ==", - "dev": true - }, - "ethereum-cryptography": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-0.1.3.tgz", - "integrity": "sha512-w8/4x1SGGzc+tO97TASLja6SLd3fRIK2tLVcV2Gx4IB21hE19atll5Cq9o3d0ZmAYC/8aw0ipieTSiekAea4SQ==", - "dev": true, - "requires": { - "@types/pbkdf2": "^3.0.0", - "@types/secp256k1": "^4.0.1", - "blakejs": "^1.1.0", - "browserify-aes": "^1.2.0", - "bs58check": "^2.1.2", - "create-hash": "^1.2.0", - "create-hmac": "^1.1.7", - "hash.js": "^1.1.7", - "keccak": "^3.0.0", - "pbkdf2": "^3.0.17", - "randombytes": "^2.1.0", - "safe-buffer": "^5.1.2", - "scrypt-js": "^3.0.0", - "secp256k1": "^4.0.1", - "setimmediate": "^1.0.5" - } - }, - "ethereumjs-util": { - "version": "7.1.3", - "resolved": "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-7.1.3.tgz", - "integrity": "sha512-y+82tEbyASO0K0X1/SRhbJJoAlfcvq8JbrG4a5cjrOks7HS/36efU/0j2flxCPOUM++HFahk33kr/ZxyC4vNuw==", - "dev": true, - "requires": { - "@types/bn.js": "^5.1.0", - "bn.js": "^5.1.2", - "create-hash": "^1.1.2", - "ethereum-cryptography": "^0.1.3", - "rlp": "^2.2.4" - } - } - } - }, - "@ganache/options": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/@ganache/options/-/options-0.1.4.tgz", - "integrity": "sha512-zAe/craqNuPz512XQY33MOAG6Si1Xp0hCvfzkBfj2qkuPcbJCq6W/eQ5MB6SbXHrICsHrZOaelyqjuhSEmjXRw==", - "dev": true, - "requires": { - "@ganache/utils": "0.1.4", - "bip39": "3.0.4", - "seedrandom": "3.0.5" - } - }, - "@ganache/rlp": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/@ganache/rlp/-/rlp-0.1.4.tgz", - "integrity": "sha512-Do3D1H6JmhikB+6rHviGqkrNywou/liVeFiKIpOBLynIpvZhRCgn3SEDxyy/JovcaozTo/BynHumfs5R085MFQ==", - "dev": true, - "requires": { - "@ganache/utils": "0.1.4", - "rlp": "2.2.6" - }, - "dependencies": { - "bn.js": { - "version": "4.12.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", - "dev": true - }, - "rlp": { - "version": "2.2.6", - "resolved": "https://registry.npmjs.org/rlp/-/rlp-2.2.6.tgz", - "integrity": "sha512-HAfAmL6SDYNWPUOJNrM500x4Thn4PZsEy5pijPh40U9WfNk0z15hUYzO9xVIMAdIHdFtD8CBDHd75Td1g36Mjg==", - "dev": true, - "requires": { - "bn.js": "^4.11.1" - } - } - } - }, - "@ganache/utils": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/@ganache/utils/-/utils-0.1.4.tgz", - "integrity": "sha512-oatUueU3XuXbUbUlkyxeLLH3LzFZ4y5aSkNbx6tjSIhVTPeh+AuBKYt4eQ73FFcTB3nj/gZoslgAh5CN7O369w==", - "dev": true, - "requires": { - "@trufflesuite/bigint-buffer": "1.1.9", - "emittery": "0.10.0", - "keccak": "3.0.1", - "seedrandom": "3.0.5" - }, - "dependencies": { - "emittery": { - "version": "0.10.0", - "resolved": "https://registry.npmjs.org/emittery/-/emittery-0.10.0.tgz", - "integrity": "sha512-AGvFfs+d0JKCJQ4o01ASQLGPmSCxgfU9RFXvzPvZdjKK8oscynksuJhWrSTSw7j7Ep/sZct5b5ZhYCi8S/t0HQ==", - "dev": true - }, - "keccak": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/keccak/-/keccak-3.0.1.tgz", - "integrity": "sha512-epq90L9jlFWCW7+pQa6JOnKn2Xgl2mtI664seYR6MHskvI9agt7AnDqmAlp9TqU4/caMYbA08Hi5DMZAl5zdkA==", - "dev": true, - "requires": { - "node-addon-api": "^2.0.0", - "node-gyp-build": "^4.2.0" - } - } - } - }, - "@graphql-tools/batch-execute": { - "version": "8.5.1", - "resolved": "https://registry.npmjs.org/@graphql-tools/batch-execute/-/batch-execute-8.5.1.tgz", - "integrity": "sha512-hRVDduX0UDEneVyEWtc2nu5H2PxpfSfM/riUlgZvo/a/nG475uyehxR5cFGvTEPEQUKY3vGIlqvtRigzqTfCew==", - "optional": true, - "requires": { - "@graphql-tools/utils": "8.9.0", - "dataloader": "2.1.0", - "tslib": "^2.4.0", - "value-or-promise": "1.0.11" - } - }, - "@graphql-tools/delegate": { - "version": "8.8.1", - "resolved": "https://registry.npmjs.org/@graphql-tools/delegate/-/delegate-8.8.1.tgz", - "integrity": "sha512-NDcg3GEQmdEHlnF7QS8b4lM1PSF+DKeFcIlLEfZFBvVq84791UtJcDj8734sIHLukmyuAxXMfA1qLd2l4lZqzA==", - "optional": true, - "requires": { - "@graphql-tools/batch-execute": "8.5.1", - "@graphql-tools/schema": "8.5.1", - "@graphql-tools/utils": "8.9.0", - "dataloader": "2.1.0", - "tslib": "~2.4.0", - "value-or-promise": "1.0.11" - }, - "dependencies": { - "tslib": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.1.tgz", - "integrity": "sha512-tGyy4dAjRIEwI7BzsB0lynWgOpfqjUdq91XXAlIWD2OwKBH7oCl/GZG/HT4BOHrTlPMOASlMQ7veyTqpmRcrNA==", - "optional": true - } - } - }, - "@graphql-tools/merge": { - "version": "8.3.1", - "resolved": "https://registry.npmjs.org/@graphql-tools/merge/-/merge-8.3.1.tgz", - "integrity": "sha512-BMm99mqdNZbEYeTPK3it9r9S6rsZsQKtlqJsSBknAclXq2pGEfOxjcIZi+kBSkHZKPKCRrYDd5vY0+rUmIHVLg==", - "optional": true, - "requires": { - "@graphql-tools/utils": "8.9.0", - "tslib": "^2.4.0" - } - }, - "@graphql-tools/mock": { - "version": "8.7.20", - "resolved": "https://registry.npmjs.org/@graphql-tools/mock/-/mock-8.7.20.tgz", - "integrity": "sha512-ljcHSJWjC/ZyzpXd5cfNhPI7YljRVvabKHPzKjEs5ElxWu2cdlLGvyNYepApXDsM/OJG/2xuhGM+9GWu5gEAPQ==", - "optional": true, - "requires": { - "@graphql-tools/schema": "^9.0.18", - "@graphql-tools/utils": "^9.2.1", - "fast-json-stable-stringify": "^2.1.0", - "tslib": "^2.4.0" - }, - "dependencies": { - "@graphql-tools/merge": { - "version": "8.4.2", - "resolved": "https://registry.npmjs.org/@graphql-tools/merge/-/merge-8.4.2.tgz", - "integrity": "sha512-XbrHAaj8yDuINph+sAfuq3QCZ/tKblrTLOpirK0+CAgNlZUCHs0Fa+xtMUURgwCVThLle1AF7svJCxFizygLsw==", - "optional": true, - "requires": { - "@graphql-tools/utils": "^9.2.1", - "tslib": "^2.4.0" - } - }, - "@graphql-tools/schema": { - "version": "9.0.19", - "resolved": "https://registry.npmjs.org/@graphql-tools/schema/-/schema-9.0.19.tgz", - "integrity": "sha512-oBRPoNBtCkk0zbUsyP4GaIzCt8C0aCI4ycIRUL67KK5pOHljKLBBtGT+Jr6hkzA74C8Gco8bpZPe7aWFjiaK2w==", - "optional": true, - "requires": { - "@graphql-tools/merge": "^8.4.1", - "@graphql-tools/utils": "^9.2.1", - "tslib": "^2.4.0", - "value-or-promise": "^1.0.12" - } - }, - "@graphql-tools/utils": { - "version": "9.2.1", - "resolved": "https://registry.npmjs.org/@graphql-tools/utils/-/utils-9.2.1.tgz", - "integrity": "sha512-WUw506Ql6xzmOORlriNrD6Ugx+HjVgYxt9KCXD9mHAak+eaXSwuGGPyE60hy9xaDEoXKBsG7SkG69ybitaVl6A==", - "optional": true, - "requires": { - "@graphql-typed-document-node/core": "^3.1.1", - "tslib": "^2.4.0" - } - }, - "value-or-promise": { - "version": "1.0.12", - "resolved": "https://registry.npmjs.org/value-or-promise/-/value-or-promise-1.0.12.tgz", - "integrity": "sha512-Z6Uz+TYwEqE7ZN50gwn+1LCVo9ZVrpxRPOhOLnncYkY1ZzOYtrX8Fwf/rFktZ8R5mJms6EZf5TqNOMeZmnPq9Q==", - "optional": true - } - } - }, - "@graphql-tools/schema": { - "version": "8.5.1", - "resolved": "https://registry.npmjs.org/@graphql-tools/schema/-/schema-8.5.1.tgz", - "integrity": "sha512-0Esilsh0P/qYcB5DKQpiKeQs/jevzIadNTaT0jeWklPMwNbT7yMX4EqZany7mbeRRlSRwMzNzL5olyFdffHBZg==", - "optional": true, - "requires": { - "@graphql-tools/merge": "8.3.1", - "@graphql-tools/utils": "8.9.0", - "tslib": "^2.4.0", - "value-or-promise": "1.0.11" - } - }, - "@graphql-tools/utils": { - "version": "8.9.0", - "resolved": "https://registry.npmjs.org/@graphql-tools/utils/-/utils-8.9.0.tgz", - "integrity": "sha512-pjJIWH0XOVnYGXCqej8g/u/tsfV4LvLlj0eATKQu5zwnxd/TiTHq7Cg313qUPTFFHZ3PP5wJ15chYVtLDwaymg==", - "optional": true, - "requires": { - "tslib": "^2.4.0" - } - }, - "@graphql-typed-document-node/core": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/@graphql-typed-document-node/core/-/core-3.2.0.tgz", - "integrity": "sha512-mB9oAsNCm9aM3/SOv4YtBMqZbYj10R7dkq8byBqxGY/ncFwhf2oQzMV+LCRlWoDSEBJ3COiR1yeDvMtsoOsuFQ==", - "optional": true, - "requires": {} - }, - "@josephg/resolvable": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@josephg/resolvable/-/resolvable-1.0.1.tgz", - "integrity": "sha512-CtzORUwWTTOTqfVtHaKRJ0I1kNQd1bpn3sUh8I3nJDVY+5/M/Oe1DnEWzPQvqq/xPIIkzzzIP7mfCoAjFRvDhg==", - "optional": true - }, - "@jridgewell/gen-mapping": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.1.1.tgz", - "integrity": "sha512-sQXCasFk+U8lWYEe66WxRDOE9PjVz4vSM51fTu3Hw+ClTpUSQb718772vH3pyS5pShp6lvQM7SxgIDXXXmOX7w==", - "peer": true, - "requires": { - "@jridgewell/set-array": "^1.0.0", - "@jridgewell/sourcemap-codec": "^1.4.10" - } - }, - "@jridgewell/resolve-uri": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz", - "integrity": "sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==", - "peer": true - }, - "@jridgewell/set-array": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz", - "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==", - "peer": true - }, - "@jridgewell/sourcemap-codec": { - "version": "1.4.14", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz", - "integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==", - "peer": true - }, - "@jridgewell/trace-mapping": { - "version": "0.3.17", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.17.tgz", - "integrity": "sha512-MCNzAp77qzKca9+W/+I0+sEpaUnZoeasnghNeVc41VZCEKaCH73Vq3BZZ/SzWIgrqE4H4ceI+p+b6C0mHf9T4g==", - "peer": true, - "requires": { - "@jridgewell/resolve-uri": "3.1.0", - "@jridgewell/sourcemap-codec": "1.4.14" - } - }, - "@ledgerhq/cryptoassets": { - "version": "5.53.0", - "resolved": "https://registry.npmjs.org/@ledgerhq/cryptoassets/-/cryptoassets-5.53.0.tgz", - "integrity": "sha512-M3ibc3LRuHid5UtL7FI3IC6nMEppvly98QHFoSa7lJU0HDzQxY6zHec/SPM4uuJUC8sXoGVAiRJDkgny54damw==", - "requires": { - "invariant": "2" - } - }, - "@ledgerhq/devices": { - "version": "5.51.1", - "resolved": "https://registry.npmjs.org/@ledgerhq/devices/-/devices-5.51.1.tgz", - "integrity": "sha512-4w+P0VkbjzEXC7kv8T1GJ/9AVaP9I6uasMZ/JcdwZBS3qwvKo5A5z9uGhP5c7TvItzcmPb44b5Mw2kT+WjUuAA==", - "requires": { - "@ledgerhq/errors": "^5.50.0", - "@ledgerhq/logs": "^5.50.0", - "rxjs": "6", - "semver": "^7.3.5" - } - }, - "@ledgerhq/errors": { - "version": "5.50.0", - "resolved": "https://registry.npmjs.org/@ledgerhq/errors/-/errors-5.50.0.tgz", - "integrity": "sha512-gu6aJ/BHuRlpU7kgVpy2vcYk6atjB4iauP2ymF7Gk0ez0Y/6VSMVSJvubeEQN+IV60+OBK0JgeIZG7OiHaw8ow==" - }, - "@ledgerhq/hw-app-eth": { - "version": "5.27.2", - "resolved": "https://registry.npmjs.org/@ledgerhq/hw-app-eth/-/hw-app-eth-5.27.2.tgz", - "integrity": "sha512-llNdrE894cCN8j6yxJEUniciyLVcLmu5N0UmIJLOObztG+5rOF4bX54h4SreTWK+E10Z0CzHSeyE5Lz/tVcqqQ==", - "requires": { - "@ledgerhq/cryptoassets": "^5.27.2", - "@ledgerhq/errors": "^5.26.0", - "@ledgerhq/hw-transport": "^5.26.0", - "bignumber.js": "^9.0.1", - "rlp": "^2.2.6" - } - }, - "@ledgerhq/hw-transport": { - "version": "5.26.0", - "resolved": "https://registry.npmjs.org/@ledgerhq/hw-transport/-/hw-transport-5.26.0.tgz", - "integrity": "sha512-NFeJOJmyEfAX8uuIBTpocWHcz630sqPcXbu864Q+OCBm4EK5UOKV1h/pX7e0xgNIKY8zhJ/O4p4cIZp9tnXLHQ==", - "requires": { - "@ledgerhq/devices": "^5.26.0", - "@ledgerhq/errors": "^5.26.0", - "events": "^3.2.0" - } - }, - "@ledgerhq/hw-transport-u2f": { - "version": "5.26.0", - "resolved": "https://registry.npmjs.org/@ledgerhq/hw-transport-u2f/-/hw-transport-u2f-5.26.0.tgz", - "integrity": "sha512-QTxP1Rsh+WZ184LUOelYVLeaQl3++V3I2jFik+l9JZtakwEHjD0XqOT750xpYNL/vfHsy31Wlz+oicdxGzFk+w==", - "requires": { - "@ledgerhq/errors": "^5.26.0", - "@ledgerhq/hw-transport": "^5.26.0", - "@ledgerhq/logs": "^5.26.0", - "u2f-api": "0.2.7" - } - }, - "@ledgerhq/logs": { - "version": "5.50.0", - "resolved": "https://registry.npmjs.org/@ledgerhq/logs/-/logs-5.50.0.tgz", - "integrity": "sha512-swKHYCOZUGyVt4ge0u8a7AwNcA//h4nx5wIi0sruGye1IJ5Cva0GyK9L2/WdX+kWVTKp92ZiEo1df31lrWGPgA==" - }, - "@maticnetwork/maticjs": { - "version": "3.6.6", - "resolved": "https://registry.npmjs.org/@maticnetwork/maticjs/-/maticjs-3.6.6.tgz", - "integrity": "sha512-VhbK9yHdRgQl9GWt1XwasHTDEImd0ApmHFG0yCN8xjPz0YvXgsSPb+p+M5JzQYEgLQGZ3L/K3nnVYHBTiRIhPA==", - "requires": { - "@ethereumjs/block": "^3.6.2", - "ethereumjs-util": "^7.1.4", - "merkle-patricia-tree": "^4.2.4", - "node-fetch": "^2.6.1" - } - }, - "@maticnetwork/maticjs-ethers": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/@maticnetwork/maticjs-ethers/-/maticjs-ethers-1.0.3.tgz", - "integrity": "sha512-paGulmLG62We/pyOVH3Q7mZd/E/SGFKa+rXtyvpoMB8v5oFn/yTtoKvLWyIoZ8zBi4JrjSegKL+/US5+OibYwQ==", - "requires": { - "ethers": "^5.5.1" - } - }, - "@maticnetwork/maticjs-web3": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/@maticnetwork/maticjs-web3/-/maticjs-web3-1.0.4.tgz", - "integrity": "sha512-cMnp42jjGNfVZRL80yUYfD9abcyUC2VpKvjFQtU44A3A0M9sbCtOOMMkE4k8FWoccxIPi891rtc+nowdNahKxg==", - "requires": { - "web3": "^1.8.0" - } - }, - "@matterlabs/hardhat-zksync-chai-matchers": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/@matterlabs/hardhat-zksync-chai-matchers/-/hardhat-zksync-chai-matchers-0.1.2.tgz", - "integrity": "sha512-lJWlVgnu4p0QvMucEdeVOWxCpPZogsygntN+RXLMS0R4PnqwslKHfG1ZbcgWRWQ7vgABqCCIF7d1GjieWdlFmQ==", - "requires": {} - }, - "@matterlabs/hardhat-zksync-deploy": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/@matterlabs/hardhat-zksync-deploy/-/hardhat-zksync-deploy-0.6.3.tgz", - "integrity": "sha512-FB+2xFL/80JJwlGna+aHA6dk4ONrMFqThTZATYVJUAKooA0Aw5qmpmM8B3qsNB4LLzHSO/EmVrHIcLaPv8hYwQ==", - "requires": { - "chalk": "4.1.2" - } - }, - "@matterlabs/hardhat-zksync-solc": { - "version": "0.3.16", - "resolved": "https://registry.npmjs.org/@matterlabs/hardhat-zksync-solc/-/hardhat-zksync-solc-0.3.16.tgz", - "integrity": "sha512-gw46yyiCfj49I/nbUcOlnF5xE80WyeW/i8i9ouHom4KWJNt1kioQIwOPkN7aJURhXpJJxKSdeWBrQHLWTZDnTA==", - "requires": { - "@nomiclabs/hardhat-docker": "^2.0.0", - "chalk": "4.1.2", - "dockerode": "^3.3.4" - } - }, - "@metamask/eth-sig-util": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/@metamask/eth-sig-util/-/eth-sig-util-4.0.1.tgz", - "integrity": "sha512-tghyZKLHZjcdlDqCA3gNZmLeR0XvOE9U1qoQO9ohyAZT6Pya+H9vkBPcsyXytmYLNgVoin7CKCmweo/R43V+tQ==", - "requires": { - "ethereumjs-abi": "^0.6.8", - "ethereumjs-util": "^6.2.1", - "ethjs-util": "^0.1.6", - "tweetnacl": "^1.0.3", - "tweetnacl-util": "^0.15.1" - }, - "dependencies": { - "@types/bn.js": { - "version": "4.11.6", - "resolved": "https://registry.npmjs.org/@types/bn.js/-/bn.js-4.11.6.tgz", - "integrity": "sha512-pqr857jrp2kPuO9uRjZ3PwnJTjoQy+fcdxvBTvHm6dkmEL9q+hDD/2j/0ELOBPtPnS8LjCX0gI9nbl8lVkadpg==", - "requires": { - "@types/node": "*" - } - }, - "bn.js": { - "version": "4.12.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==" - }, - "ethereum-cryptography": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-0.1.3.tgz", - "integrity": "sha512-w8/4x1SGGzc+tO97TASLja6SLd3fRIK2tLVcV2Gx4IB21hE19atll5Cq9o3d0ZmAYC/8aw0ipieTSiekAea4SQ==", - "requires": { - "@types/pbkdf2": "^3.0.0", - "@types/secp256k1": "^4.0.1", - "blakejs": "^1.1.0", - "browserify-aes": "^1.2.0", - "bs58check": "^2.1.2", - "create-hash": "^1.2.0", - "create-hmac": "^1.1.7", - "hash.js": "^1.1.7", - "keccak": "^3.0.0", - "pbkdf2": "^3.0.17", - "randombytes": "^2.1.0", - "safe-buffer": "^5.1.2", - "scrypt-js": "^3.0.0", - "secp256k1": "^4.0.1", - "setimmediate": "^1.0.5" - } - }, - "ethereumjs-util": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-6.2.1.tgz", - "integrity": "sha512-W2Ktez4L01Vexijrm5EB6w7dg4n/TgpoYU4avuT5T3Vmnw/eCRtiBrJfQYS/DCSvDIOLn2k57GcHdeBcgVxAqw==", - "requires": { - "@types/bn.js": "^4.11.3", - "bn.js": "^4.11.0", - "create-hash": "^1.1.2", - "elliptic": "^6.5.2", - "ethereum-cryptography": "^0.1.3", - "ethjs-util": "0.1.6", - "rlp": "^2.2.3" - } - } - } - }, - "@metamask/safe-event-emitter": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@metamask/safe-event-emitter/-/safe-event-emitter-2.0.0.tgz", - "integrity": "sha512-/kSXhY692qiV1MXu6EeOZvg5nECLclxNXcKCxJ3cXQgYuRymRHpdx/t7JXfsK+JLjwA1e1c1/SBrlQYpusC29Q==" - }, - "@morgan-stanley/ts-mocking-bird": { - "version": "0.6.4", - "resolved": "https://registry.npmjs.org/@morgan-stanley/ts-mocking-bird/-/ts-mocking-bird-0.6.4.tgz", - "integrity": "sha512-57VJIflP8eR2xXa9cD1LUawh+Gh+BVQfVu0n6GALyg/AqV/Nz25kDRvws3i9kIe1PTrbsZZOYpsYp6bXPd6nVA==", - "dev": true, - "requires": { - "lodash": "^4.17.16", - "uuid": "^7.0.3" - }, - "dependencies": { - "uuid": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-7.0.3.tgz", - "integrity": "sha512-DPSke0pXhTZgoF/d+WSt2QaKMCFSfx7QegxEWT+JOuHF5aWrKEn0G+ztjuJg/gG8/ItK+rbPCD/yNv8yyih6Cg==", - "dev": true - } - } - }, - "@noble/curves": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@noble/curves/-/curves-1.1.0.tgz", - "integrity": "sha512-091oBExgENk/kGj3AZmtBDMpxQPDtxQABR2B9lb1JbVTs6ytdzZNwvhxQ4MWasRNEzlbEH8jCWFCwhF/Obj5AA==", - "requires": { - "@noble/hashes": "1.3.1" - }, - "dependencies": { - "@noble/hashes": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.3.1.tgz", - "integrity": "sha512-EbqwksQwz9xDRGfDST86whPBgM65E0OH/pCgqW0GBVzO22bNE+NuIbeTb714+IfSjU3aRk47EUvXIb5bTsenKA==" - } - } - }, - "@noble/hashes": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.1.3.tgz", - "integrity": "sha512-CE0FCR57H2acVI5UOzIGSSIYxZ6v/HOhDR0Ro9VLyhnzLwx0o8W1mmgaqlEUx4049qJDlIBRztv5k+MM8vbO3A==" - }, - "@nomicfoundation/ethereumjs-block": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/@nomicfoundation/ethereumjs-block/-/ethereumjs-block-5.0.2.tgz", - "integrity": "sha512-hSe6CuHI4SsSiWWjHDIzWhSiAVpzMUcDRpWYzN0T9l8/Rz7xNn3elwVOJ/tAyS0LqL6vitUD78Uk7lQDXZun7Q==", - "requires": { - "@nomicfoundation/ethereumjs-common": "4.0.2", - "@nomicfoundation/ethereumjs-rlp": "5.0.2", - "@nomicfoundation/ethereumjs-trie": "6.0.2", - "@nomicfoundation/ethereumjs-tx": "5.0.2", - "@nomicfoundation/ethereumjs-util": "9.0.2", - "ethereum-cryptography": "0.1.3", - "ethers": "^5.7.1" - }, - "dependencies": { - "ethereum-cryptography": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-0.1.3.tgz", - "integrity": "sha512-w8/4x1SGGzc+tO97TASLja6SLd3fRIK2tLVcV2Gx4IB21hE19atll5Cq9o3d0ZmAYC/8aw0ipieTSiekAea4SQ==", - "requires": { - "@types/pbkdf2": "^3.0.0", - "@types/secp256k1": "^4.0.1", - "blakejs": "^1.1.0", - "browserify-aes": "^1.2.0", - "bs58check": "^2.1.2", - "create-hash": "^1.2.0", - "create-hmac": "^1.1.7", - "hash.js": "^1.1.7", - "keccak": "^3.0.0", - "pbkdf2": "^3.0.17", - "randombytes": "^2.1.0", - "safe-buffer": "^5.1.2", - "scrypt-js": "^3.0.0", - "secp256k1": "^4.0.1", - "setimmediate": "^1.0.5" - } - } - } - }, - "@nomicfoundation/ethereumjs-blockchain": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/@nomicfoundation/ethereumjs-blockchain/-/ethereumjs-blockchain-7.0.2.tgz", - "integrity": "sha512-8UUsSXJs+MFfIIAKdh3cG16iNmWzWC/91P40sazNvrqhhdR/RtGDlFk2iFTGbBAZPs2+klZVzhRX8m2wvuvz3w==", - "requires": { - "@nomicfoundation/ethereumjs-block": "5.0.2", - "@nomicfoundation/ethereumjs-common": "4.0.2", - "@nomicfoundation/ethereumjs-ethash": "3.0.2", - "@nomicfoundation/ethereumjs-rlp": "5.0.2", - "@nomicfoundation/ethereumjs-trie": "6.0.2", - "@nomicfoundation/ethereumjs-tx": "5.0.2", - "@nomicfoundation/ethereumjs-util": "9.0.2", - "abstract-level": "^1.0.3", - "debug": "^4.3.3", - "ethereum-cryptography": "0.1.3", - "level": "^8.0.0", - "lru-cache": "^5.1.1", - "memory-level": "^1.0.0" - }, - "dependencies": { - "ethereum-cryptography": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-0.1.3.tgz", - "integrity": "sha512-w8/4x1SGGzc+tO97TASLja6SLd3fRIK2tLVcV2Gx4IB21hE19atll5Cq9o3d0ZmAYC/8aw0ipieTSiekAea4SQ==", - "requires": { - "@types/pbkdf2": "^3.0.0", - "@types/secp256k1": "^4.0.1", - "blakejs": "^1.1.0", - "browserify-aes": "^1.2.0", - "bs58check": "^2.1.2", - "create-hash": "^1.2.0", - "create-hmac": "^1.1.7", - "hash.js": "^1.1.7", - "keccak": "^3.0.0", - "pbkdf2": "^3.0.17", - "randombytes": "^2.1.0", - "safe-buffer": "^5.1.2", - "scrypt-js": "^3.0.0", - "secp256k1": "^4.0.1", - "setimmediate": "^1.0.5" - } - } - } - }, - "@nomicfoundation/ethereumjs-common": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/@nomicfoundation/ethereumjs-common/-/ethereumjs-common-4.0.2.tgz", - "integrity": "sha512-I2WGP3HMGsOoycSdOTSqIaES0ughQTueOsddJ36aYVpI3SN8YSusgRFLwzDJwRFVIYDKx/iJz0sQ5kBHVgdDwg==", - "requires": { - "@nomicfoundation/ethereumjs-util": "9.0.2", - "crc-32": "^1.2.0" - } - }, - "@nomicfoundation/ethereumjs-ethash": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/@nomicfoundation/ethereumjs-ethash/-/ethereumjs-ethash-3.0.2.tgz", - "integrity": "sha512-8PfoOQCcIcO9Pylq0Buijuq/O73tmMVURK0OqdjhwqcGHYC2PwhbajDh7GZ55ekB0Px197ajK3PQhpKoiI/UPg==", - "requires": { - "@nomicfoundation/ethereumjs-block": "5.0.2", - "@nomicfoundation/ethereumjs-rlp": "5.0.2", - "@nomicfoundation/ethereumjs-util": "9.0.2", - "abstract-level": "^1.0.3", - "bigint-crypto-utils": "^3.0.23", - "ethereum-cryptography": "0.1.3" - }, - "dependencies": { - "ethereum-cryptography": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-0.1.3.tgz", - "integrity": "sha512-w8/4x1SGGzc+tO97TASLja6SLd3fRIK2tLVcV2Gx4IB21hE19atll5Cq9o3d0ZmAYC/8aw0ipieTSiekAea4SQ==", - "requires": { - "@types/pbkdf2": "^3.0.0", - "@types/secp256k1": "^4.0.1", - "blakejs": "^1.1.0", - "browserify-aes": "^1.2.0", - "bs58check": "^2.1.2", - "create-hash": "^1.2.0", - "create-hmac": "^1.1.7", - "hash.js": "^1.1.7", - "keccak": "^3.0.0", - "pbkdf2": "^3.0.17", - "randombytes": "^2.1.0", - "safe-buffer": "^5.1.2", - "scrypt-js": "^3.0.0", - "secp256k1": "^4.0.1", - "setimmediate": "^1.0.5" - } - } - } - }, - "@nomicfoundation/ethereumjs-evm": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/@nomicfoundation/ethereumjs-evm/-/ethereumjs-evm-2.0.2.tgz", - "integrity": "sha512-rBLcUaUfANJxyOx9HIdMX6uXGin6lANCulIm/pjMgRqfiCRMZie3WKYxTSd8ZE/d+qT+zTedBF4+VHTdTSePmQ==", - "requires": { - "@ethersproject/providers": "^5.7.1", - "@nomicfoundation/ethereumjs-common": "4.0.2", - "@nomicfoundation/ethereumjs-tx": "5.0.2", - "@nomicfoundation/ethereumjs-util": "9.0.2", - "debug": "^4.3.3", - "ethereum-cryptography": "0.1.3", - "mcl-wasm": "^0.7.1", - "rustbn.js": "~0.2.0" - }, - "dependencies": { - "ethereum-cryptography": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-0.1.3.tgz", - "integrity": "sha512-w8/4x1SGGzc+tO97TASLja6SLd3fRIK2tLVcV2Gx4IB21hE19atll5Cq9o3d0ZmAYC/8aw0ipieTSiekAea4SQ==", - "requires": { - "@types/pbkdf2": "^3.0.0", - "@types/secp256k1": "^4.0.1", - "blakejs": "^1.1.0", - "browserify-aes": "^1.2.0", - "bs58check": "^2.1.2", - "create-hash": "^1.2.0", - "create-hmac": "^1.1.7", - "hash.js": "^1.1.7", - "keccak": "^3.0.0", - "pbkdf2": "^3.0.17", - "randombytes": "^2.1.0", - "safe-buffer": "^5.1.2", - "scrypt-js": "^3.0.0", - "secp256k1": "^4.0.1", - "setimmediate": "^1.0.5" - } - } - } - }, - "@nomicfoundation/ethereumjs-rlp": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/@nomicfoundation/ethereumjs-rlp/-/ethereumjs-rlp-5.0.2.tgz", - "integrity": "sha512-QwmemBc+MMsHJ1P1QvPl8R8p2aPvvVcKBbvHnQOKBpBztEo0omN0eaob6FeZS/e3y9NSe+mfu3nNFBHszqkjTA==" - }, - "@nomicfoundation/ethereumjs-statemanager": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/@nomicfoundation/ethereumjs-statemanager/-/ethereumjs-statemanager-2.0.2.tgz", - "integrity": "sha512-dlKy5dIXLuDubx8Z74sipciZnJTRSV/uHG48RSijhgm1V7eXYFC567xgKtsKiVZB1ViTP9iFL4B6Je0xD6X2OA==", - "requires": { - "@nomicfoundation/ethereumjs-common": "4.0.2", - "@nomicfoundation/ethereumjs-rlp": "5.0.2", - "debug": "^4.3.3", - "ethereum-cryptography": "0.1.3", - "ethers": "^5.7.1", - "js-sdsl": "^4.1.4" - }, - "dependencies": { - "ethereum-cryptography": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-0.1.3.tgz", - "integrity": "sha512-w8/4x1SGGzc+tO97TASLja6SLd3fRIK2tLVcV2Gx4IB21hE19atll5Cq9o3d0ZmAYC/8aw0ipieTSiekAea4SQ==", - "requires": { - "@types/pbkdf2": "^3.0.0", - "@types/secp256k1": "^4.0.1", - "blakejs": "^1.1.0", - "browserify-aes": "^1.2.0", - "bs58check": "^2.1.2", - "create-hash": "^1.2.0", - "create-hmac": "^1.1.7", - "hash.js": "^1.1.7", - "keccak": "^3.0.0", - "pbkdf2": "^3.0.17", - "randombytes": "^2.1.0", - "safe-buffer": "^5.1.2", - "scrypt-js": "^3.0.0", - "secp256k1": "^4.0.1", - "setimmediate": "^1.0.5" - } - } - } - }, - "@nomicfoundation/ethereumjs-trie": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/@nomicfoundation/ethereumjs-trie/-/ethereumjs-trie-6.0.2.tgz", - "integrity": "sha512-yw8vg9hBeLYk4YNg5MrSJ5H55TLOv2FSWUTROtDtTMMmDGROsAu+0tBjiNGTnKRi400M6cEzoFfa89Fc5k8NTQ==", - "requires": { - "@nomicfoundation/ethereumjs-rlp": "5.0.2", - "@nomicfoundation/ethereumjs-util": "9.0.2", - "@types/readable-stream": "^2.3.13", - "ethereum-cryptography": "0.1.3", - "readable-stream": "^3.6.0" - }, - "dependencies": { - "ethereum-cryptography": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-0.1.3.tgz", - "integrity": "sha512-w8/4x1SGGzc+tO97TASLja6SLd3fRIK2tLVcV2Gx4IB21hE19atll5Cq9o3d0ZmAYC/8aw0ipieTSiekAea4SQ==", - "requires": { - "@types/pbkdf2": "^3.0.0", - "@types/secp256k1": "^4.0.1", - "blakejs": "^1.1.0", - "browserify-aes": "^1.2.0", - "bs58check": "^2.1.2", - "create-hash": "^1.2.0", - "create-hmac": "^1.1.7", - "hash.js": "^1.1.7", - "keccak": "^3.0.0", - "pbkdf2": "^3.0.17", - "randombytes": "^2.1.0", - "safe-buffer": "^5.1.2", - "scrypt-js": "^3.0.0", - "secp256k1": "^4.0.1", - "setimmediate": "^1.0.5" - } - } - } - }, - "@nomicfoundation/ethereumjs-tx": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/@nomicfoundation/ethereumjs-tx/-/ethereumjs-tx-5.0.2.tgz", - "integrity": "sha512-T+l4/MmTp7VhJeNloMkM+lPU3YMUaXdcXgTGCf8+ZFvV9NYZTRLFekRwlG6/JMmVfIfbrW+dRRJ9A6H5Q/Z64g==", - "requires": { - "@chainsafe/ssz": "^0.9.2", - "@ethersproject/providers": "^5.7.2", - "@nomicfoundation/ethereumjs-common": "4.0.2", - "@nomicfoundation/ethereumjs-rlp": "5.0.2", - "@nomicfoundation/ethereumjs-util": "9.0.2", - "ethereum-cryptography": "0.1.3" - }, - "dependencies": { - "ethereum-cryptography": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-0.1.3.tgz", - "integrity": "sha512-w8/4x1SGGzc+tO97TASLja6SLd3fRIK2tLVcV2Gx4IB21hE19atll5Cq9o3d0ZmAYC/8aw0ipieTSiekAea4SQ==", - "requires": { - "@types/pbkdf2": "^3.0.0", - "@types/secp256k1": "^4.0.1", - "blakejs": "^1.1.0", - "browserify-aes": "^1.2.0", - "bs58check": "^2.1.2", - "create-hash": "^1.2.0", - "create-hmac": "^1.1.7", - "hash.js": "^1.1.7", - "keccak": "^3.0.0", - "pbkdf2": "^3.0.17", - "randombytes": "^2.1.0", - "safe-buffer": "^5.1.2", - "scrypt-js": "^3.0.0", - "secp256k1": "^4.0.1", - "setimmediate": "^1.0.5" - } - } - } - }, - "@nomicfoundation/ethereumjs-util": { - "version": "9.0.2", - "resolved": "https://registry.npmjs.org/@nomicfoundation/ethereumjs-util/-/ethereumjs-util-9.0.2.tgz", - "integrity": "sha512-4Wu9D3LykbSBWZo8nJCnzVIYGvGCuyiYLIJa9XXNVt1q1jUzHdB+sJvx95VGCpPkCT+IbLecW6yfzy3E1bQrwQ==", - "requires": { - "@chainsafe/ssz": "^0.10.0", - "@nomicfoundation/ethereumjs-rlp": "5.0.2", - "ethereum-cryptography": "0.1.3" - }, - "dependencies": { - "@chainsafe/persistent-merkle-tree": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/@chainsafe/persistent-merkle-tree/-/persistent-merkle-tree-0.5.0.tgz", - "integrity": "sha512-l0V1b5clxA3iwQLXP40zYjyZYospQLZXzBVIhhr9kDg/1qHZfzzHw0jj4VPBijfYCArZDlPkRi1wZaV2POKeuw==", - "requires": { - "@chainsafe/as-sha256": "^0.3.1" - } - }, - "@chainsafe/ssz": { - "version": "0.10.2", - "resolved": "https://registry.npmjs.org/@chainsafe/ssz/-/ssz-0.10.2.tgz", - "integrity": "sha512-/NL3Lh8K+0q7A3LsiFq09YXS9fPE+ead2rr7vM2QK8PLzrNsw3uqrif9bpRX5UxgeRjM+vYi+boCM3+GM4ovXg==", - "requires": { - "@chainsafe/as-sha256": "^0.3.1", - "@chainsafe/persistent-merkle-tree": "^0.5.0" - } - }, - "ethereum-cryptography": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-0.1.3.tgz", - "integrity": "sha512-w8/4x1SGGzc+tO97TASLja6SLd3fRIK2tLVcV2Gx4IB21hE19atll5Cq9o3d0ZmAYC/8aw0ipieTSiekAea4SQ==", - "requires": { - "@types/pbkdf2": "^3.0.0", - "@types/secp256k1": "^4.0.1", - "blakejs": "^1.1.0", - "browserify-aes": "^1.2.0", - "bs58check": "^2.1.2", - "create-hash": "^1.2.0", - "create-hmac": "^1.1.7", - "hash.js": "^1.1.7", - "keccak": "^3.0.0", - "pbkdf2": "^3.0.17", - "randombytes": "^2.1.0", - "safe-buffer": "^5.1.2", - "scrypt-js": "^3.0.0", - "secp256k1": "^4.0.1", - "setimmediate": "^1.0.5" - } - } - } - }, - "@nomicfoundation/ethereumjs-vm": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/@nomicfoundation/ethereumjs-vm/-/ethereumjs-vm-7.0.2.tgz", - "integrity": "sha512-Bj3KZT64j54Tcwr7Qm/0jkeZXJMfdcAtRBedou+Hx0dPOSIgqaIr0vvLwP65TpHbak2DmAq+KJbW2KNtIoFwvA==", - "requires": { - "@nomicfoundation/ethereumjs-block": "5.0.2", - "@nomicfoundation/ethereumjs-blockchain": "7.0.2", - "@nomicfoundation/ethereumjs-common": "4.0.2", - "@nomicfoundation/ethereumjs-evm": "2.0.2", - "@nomicfoundation/ethereumjs-rlp": "5.0.2", - "@nomicfoundation/ethereumjs-statemanager": "2.0.2", - "@nomicfoundation/ethereumjs-trie": "6.0.2", - "@nomicfoundation/ethereumjs-tx": "5.0.2", - "@nomicfoundation/ethereumjs-util": "9.0.2", - "debug": "^4.3.3", - "ethereum-cryptography": "0.1.3", - "mcl-wasm": "^0.7.1", - "rustbn.js": "~0.2.0" - }, - "dependencies": { - "ethereum-cryptography": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-0.1.3.tgz", - "integrity": "sha512-w8/4x1SGGzc+tO97TASLja6SLd3fRIK2tLVcV2Gx4IB21hE19atll5Cq9o3d0ZmAYC/8aw0ipieTSiekAea4SQ==", - "requires": { - "@types/pbkdf2": "^3.0.0", - "@types/secp256k1": "^4.0.1", - "blakejs": "^1.1.0", - "browserify-aes": "^1.2.0", - "bs58check": "^2.1.2", - "create-hash": "^1.2.0", - "create-hmac": "^1.1.7", - "hash.js": "^1.1.7", - "keccak": "^3.0.0", - "pbkdf2": "^3.0.17", - "randombytes": "^2.1.0", - "safe-buffer": "^5.1.2", - "scrypt-js": "^3.0.0", - "secp256k1": "^4.0.1", - "setimmediate": "^1.0.5" - } - } - } - }, - "@nomicfoundation/hardhat-chai-matchers": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/@nomicfoundation/hardhat-chai-matchers/-/hardhat-chai-matchers-1.0.6.tgz", - "integrity": "sha512-f5ZMNmabZeZegEfuxn/0kW+mm7+yV7VNDxLpMOMGXWFJ2l/Ct3QShujzDRF9cOkK9Ui/hbDeOWGZqyQALDXVCQ==", - "peer": true, - "requires": { - "@ethersproject/abi": "^5.1.2", - "@types/chai-as-promised": "^7.1.3", - "chai-as-promised": "^7.1.1", - "deep-eql": "^4.0.1", - "ordinal": "^1.0.3" - } - }, - "@nomicfoundation/solidity-analyzer": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/@nomicfoundation/solidity-analyzer/-/solidity-analyzer-0.1.0.tgz", - "integrity": "sha512-xGWAiVCGOycvGiP/qrlf9f9eOn7fpNbyJygcB0P21a1MDuVPlKt0Srp7rvtBEutYQ48ouYnRXm33zlRnlTOPHg==", - "requires": { - "@nomicfoundation/solidity-analyzer-darwin-arm64": "0.1.0", - "@nomicfoundation/solidity-analyzer-darwin-x64": "0.1.0", - "@nomicfoundation/solidity-analyzer-freebsd-x64": "0.1.0", - "@nomicfoundation/solidity-analyzer-linux-arm64-gnu": "0.1.0", - "@nomicfoundation/solidity-analyzer-linux-arm64-musl": "0.1.0", - "@nomicfoundation/solidity-analyzer-linux-x64-gnu": "0.1.0", - "@nomicfoundation/solidity-analyzer-linux-x64-musl": "0.1.0", - "@nomicfoundation/solidity-analyzer-win32-arm64-msvc": "0.1.0", - "@nomicfoundation/solidity-analyzer-win32-ia32-msvc": "0.1.0", - "@nomicfoundation/solidity-analyzer-win32-x64-msvc": "0.1.0" - } - }, - "@nomicfoundation/solidity-analyzer-linux-x64-gnu": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/@nomicfoundation/solidity-analyzer-linux-x64-gnu/-/solidity-analyzer-linux-x64-gnu-0.1.0.tgz", - "integrity": "sha512-lR0AxK1x/MeKQ/3Pt923kPvwigmGX3OxeU5qNtQ9pj9iucgk4PzhbS3ruUeSpYhUxG50jN4RkIGwUMoev5lguw==", - "optional": true - }, - "@nomicfoundation/solidity-analyzer-linux-x64-musl": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/@nomicfoundation/solidity-analyzer-linux-x64-musl/-/solidity-analyzer-linux-x64-musl-0.1.0.tgz", - "integrity": "sha512-A1he/8gy/JeBD3FKvmI6WUJrGrI5uWJNr5Xb9WdV+DK0F8msuOqpEByLlnTdLkXMwW7nSl3awvLezOs9xBHJEg==", - "optional": true - }, - "@nomiclabs/hardhat-docker": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/@nomiclabs/hardhat-docker/-/hardhat-docker-2.0.2.tgz", - "integrity": "sha512-XgGEpRT3wlA1VslyB57zyAHV+oll8KnV1TjwnxxC1tpAL04/lbdwpdO5KxInVN8irMSepqFpsiSkqlcnvbE7Ng==", - "requires": { - "dockerode": "^2.5.8", - "fs-extra": "^7.0.1", - "node-fetch": "^2.6.0" - }, - "dependencies": { - "bl": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/bl/-/bl-1.2.3.tgz", - "integrity": "sha512-pvcNpa0UU69UT341rO6AYy4FVAIkUHuZXRIWbq+zHnsVcRzDDjIAhGuuYoi0d//cwIwtt4pkpKycWEfjdV+vww==", - "requires": { - "readable-stream": "^2.3.5", - "safe-buffer": "^5.1.1" - }, - "dependencies": { - "isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==" - }, - "readable-stream": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", - "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "requires": { - "safe-buffer": "~5.1.0" - } - } - } - }, - "debug": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", - "requires": { - "ms": "^2.1.1" - } - }, - "docker-modem": { - "version": "1.0.9", - "resolved": "https://registry.npmjs.org/docker-modem/-/docker-modem-1.0.9.tgz", - "integrity": "sha512-lVjqCSCIAUDZPAZIeyM125HXfNvOmYYInciphNrLrylUtKyW66meAjSPXWchKVzoIYZx69TPnAepVSSkeawoIw==", - "requires": { - "debug": "^3.2.6", - "JSONStream": "1.3.2", - "readable-stream": "~1.0.26-4", - "split-ca": "^1.0.0" - } - }, - "dockerode": { - "version": "2.5.8", - "resolved": "https://registry.npmjs.org/dockerode/-/dockerode-2.5.8.tgz", - "integrity": "sha512-+7iOUYBeDTScmOmQqpUYQaE7F4vvIt6+gIZNHWhqAQEI887tiPFB9OvXI/HzQYqfUNvukMK+9myLW63oTJPZpw==", - "requires": { - "concat-stream": "~1.6.2", - "docker-modem": "^1.0.8", - "tar-fs": "~1.16.3" - } - }, - "fs-extra": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-7.0.1.tgz", - "integrity": "sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==", - "requires": { - "graceful-fs": "^4.1.2", - "jsonfile": "^4.0.0", - "universalify": "^0.1.0" - } - }, - "isarray": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", - "integrity": "sha512-D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ==" - }, - "jsonfile": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", - "integrity": "sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==", - "requires": { - "graceful-fs": "^4.1.6" - } - }, - "JSONStream": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/JSONStream/-/JSONStream-1.3.2.tgz", - "integrity": "sha512-mn0KSip7N4e0UDPZHnqDsHECo5uGQrixQKnAskOM1BIB8hd7QKbd6il8IPRPudPHOeHiECoCFqhyMaRO9+nWyA==", - "requires": { - "jsonparse": "^1.2.0", - "through": ">=2.2.7 <3" - } - }, - "pump": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/pump/-/pump-1.0.3.tgz", - "integrity": "sha512-8k0JupWme55+9tCVE+FS5ULT3K6AbgqrGa58lTT49RpyfwwcGedHqaC5LlQNdEAumn/wFsu6aPwkuPMioy8kqw==", - "requires": { - "end-of-stream": "^1.1.0", - "once": "^1.3.1" - } - }, - "readable-stream": { - "version": "1.0.34", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz", - "integrity": "sha512-ok1qVCJuRkNmvebYikljxJA/UEsKwLl2nI1OmaqAu4/UE+h0wKCHok4XkL/gvi39OacXvw59RJUOFUkDib2rHg==", - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.1", - "isarray": "0.0.1", - "string_decoder": "~0.10.x" - } - }, - "safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" - }, - "string_decoder": { - "version": "0.10.31", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", - "integrity": "sha512-ev2QzSzWPYmy9GuqfIVildA4OdcGLeFZQrq5ys6RtiuF+RQQiZWr8TZNyAcuVXyQRYfEO+MsoB/1BuQVhOJuoQ==" - }, - "tar-fs": { - "version": "1.16.3", - "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-1.16.3.tgz", - "integrity": "sha512-NvCeXpYx7OsmOh8zIOP/ebG55zZmxLE0etfWRbWok+q2Qo8x/vOR/IJT1taADXPe+jsiu9axDb3X4B+iIgNlKw==", - "requires": { - "chownr": "^1.0.1", - "mkdirp": "^0.5.1", - "pump": "^1.0.0", - "tar-stream": "^1.1.2" - } - }, - "tar-stream": { - "version": "1.6.2", - "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-1.6.2.tgz", - "integrity": "sha512-rzS0heiNf8Xn7/mpdSVVSMAWAoy9bfb1WOTYC78Z0UQKeKa/CWS8FOq0lKGNa8DWKAn9gxjCvMLYc5PGXYlK2A==", - "requires": { - "bl": "^1.0.0", - "buffer-alloc": "^1.2.0", - "end-of-stream": "^1.0.0", - "fs-constants": "^1.0.0", - "readable-stream": "^2.3.0", - "to-buffer": "^1.1.1", - "xtend": "^4.0.0" - }, - "dependencies": { - "isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==" - }, - "readable-stream": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", - "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "requires": { - "safe-buffer": "~5.1.0" - } - } - } - }, - "universalify": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", - "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==" - } - } - }, - "@nomiclabs/hardhat-ethers": { - "version": "2.2.3", - "resolved": "https://registry.npmjs.org/@nomiclabs/hardhat-ethers/-/hardhat-ethers-2.2.3.tgz", - "integrity": "sha512-YhzPdzb612X591FOe68q+qXVXGG2ANZRvDo0RRUtimev85rCrAlv/TLMEZw5c+kq9AbzocLTVX/h2jVIFPL9Xg==", - "requires": {} - }, - "@nomiclabs/hardhat-etherscan": { - "version": "3.1.7", - "resolved": "https://registry.npmjs.org/@nomiclabs/hardhat-etherscan/-/hardhat-etherscan-3.1.7.tgz", - "integrity": "sha512-tZ3TvSgpvsQ6B6OGmo1/Au6u8BrAkvs1mIC/eURA3xgIfznUZBhmpne8hv7BXUzw9xNL3fXdpOYgOQlVMTcoHQ==", - "dev": true, - "requires": { - "@ethersproject/abi": "^5.1.2", - "@ethersproject/address": "^5.0.2", - "cbor": "^8.1.0", - "chalk": "^2.4.2", - "debug": "^4.1.1", - "fs-extra": "^7.0.1", - "lodash": "^4.17.11", - "semver": "^6.3.0", - "table": "^6.8.0", - "undici": "^5.14.0" - }, - "dependencies": { - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "requires": { - "color-convert": "^1.9.0" - } - }, - "cbor": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/cbor/-/cbor-8.1.0.tgz", - "integrity": "sha512-DwGjNW9omn6EwP70aXsn7FQJx5kO12tX0bZkaTjzdVFM6/7nhA4t0EENocKGx6D2Bch9PE2KzCUf5SceBdeijg==", - "dev": true, - "requires": { - "nofilter": "^3.1.0" - } - }, - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - } - }, - "color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dev": true, - "requires": { - "color-name": "1.1.3" - } - }, - "color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", - "dev": true - }, - "escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", - "dev": true - }, - "fs-extra": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-7.0.1.tgz", - "integrity": "sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==", - "dev": true, - "requires": { - "graceful-fs": "^4.1.2", - "jsonfile": "^4.0.0", - "universalify": "^0.1.0" - } - }, - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", - "dev": true - }, - "jsonfile": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", - "integrity": "sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==", - "dev": true, - "requires": { - "graceful-fs": "^4.1.6" - } - }, - "nofilter": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/nofilter/-/nofilter-3.1.0.tgz", - "integrity": "sha512-l2NNj07e9afPnhAhvgVrCD/oy2Ai1yfLpuo3EpiO1jFTsB4sFz6oIfAfSZyQzVpkZQ9xS8ZS5g1jCBgq4Hwo0g==", - "dev": true - }, - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true - }, - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - }, - "universalify": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", - "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", - "dev": true - } - } - }, - "@nomiclabs/hardhat-truffle5": { - "version": "2.0.7", - "resolved": "https://registry.npmjs.org/@nomiclabs/hardhat-truffle5/-/hardhat-truffle5-2.0.7.tgz", - "integrity": "sha512-Pw8451IUZp1bTp0QqCHCYfCHs66sCnyxPcaorapu9mfOV9xnZsVaFdtutnhNEiXdiZwbed7LFKpRsde4BjFwig==", - "dev": true, - "requires": { - "@nomiclabs/truffle-contract": "^4.2.23", - "@types/chai": "^4.2.0", - "chai": "^4.2.0", - "ethereumjs-util": "^7.1.4", - "fs-extra": "^7.0.1" - }, - "dependencies": { - "fs-extra": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-7.0.1.tgz", - "integrity": "sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==", - "dev": true, - "requires": { - "graceful-fs": "^4.1.2", - "jsonfile": "^4.0.0", - "universalify": "^0.1.0" - } - }, - "jsonfile": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", - "integrity": "sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==", - "dev": true, - "requires": { - "graceful-fs": "^4.1.6" - } - }, - "universalify": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", - "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", - "dev": true - } - } - }, - "@nomiclabs/hardhat-vyper": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/@nomiclabs/hardhat-vyper/-/hardhat-vyper-3.0.4.tgz", - "integrity": "sha512-VSmNCs0MQCn7qgWubfSkJkFEJmsTvbimPsbxknM5jLFi7pNeDVB5eO00GaoweuZiWKBVTHYJsylVK5686GoPrQ==", - "dev": true, - "requires": { - "debug": "^4.1.1", - "fs-extra": "^7.0.1", - "io-ts": "1.10.4", - "lodash": "^4.17.11", - "semver": "^6.3.0" - }, - "dependencies": { - "fs-extra": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-7.0.1.tgz", - "integrity": "sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==", - "dev": true, - "requires": { - "graceful-fs": "^4.1.2", - "jsonfile": "^4.0.0", - "universalify": "^0.1.0" - } - }, - "jsonfile": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", - "integrity": "sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==", - "dev": true, - "requires": { - "graceful-fs": "^4.1.6" - } - }, - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true - }, - "universalify": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", - "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", - "dev": true - } - } - }, - "@nomiclabs/hardhat-waffle": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/@nomiclabs/hardhat-waffle/-/hardhat-waffle-2.0.6.tgz", - "integrity": "sha512-+Wz0hwmJGSI17B+BhU/qFRZ1l6/xMW82QGXE/Gi+WTmwgJrQefuBs1lIf7hzQ1hLk6hpkvb/zwcNkpVKRYTQYg==", - "dev": true, - "requires": {} - }, - "@nomiclabs/hardhat-web3": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@nomiclabs/hardhat-web3/-/hardhat-web3-2.0.0.tgz", - "integrity": "sha512-zt4xN+D+fKl3wW2YlTX3k9APR3XZgPkxJYf36AcliJn3oujnKEVRZaHu0PhgLjO+gR+F/kiYayo9fgd2L8970Q==", - "dev": true, - "requires": { - "@types/bignumber.js": "^5.0.0" - } - }, - "@nomiclabs/truffle-contract": { - "version": "4.5.10", - "resolved": "https://registry.npmjs.org/@nomiclabs/truffle-contract/-/truffle-contract-4.5.10.tgz", - "integrity": "sha512-nF/6InFV+0hUvutyFgsdOMCoYlr//2fJbRER4itxYtQtc4/O1biTwZIKRu+5l2J5Sq6LU2WX7vZHtDgQdhWxIQ==", - "dev": true, - "requires": { - "@ensdomains/ensjs": "^2.0.1", - "@truffle/blockchain-utils": "^0.1.3", - "@truffle/contract-schema": "^3.4.7", - "@truffle/debug-utils": "^6.0.22", - "@truffle/error": "^0.1.0", - "@truffle/interface-adapter": "^0.5.16", - "bignumber.js": "^7.2.1", - "ethereum-ens": "^0.8.0", - "ethers": "^4.0.0-beta.1", - "source-map-support": "^0.5.19" - }, - "dependencies": { - "bignumber.js": { - "version": "7.2.1", - "resolved": "https://registry.npmjs.org/bignumber.js/-/bignumber.js-7.2.1.tgz", - "integrity": "sha512-S4XzBk5sMB+Rcb/LNcpzXr57VRTxgAvaAEDAl1AwRx27j00hT84O6OkteE7u8UB3NuaaygCRrEpqox4uDOrbdQ==", - "dev": true - }, - "bn.js": { - "version": "4.12.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", - "dev": true - }, - "ethers": { - "version": "4.0.49", - "resolved": "https://registry.npmjs.org/ethers/-/ethers-4.0.49.tgz", - "integrity": "sha512-kPltTvWiyu+OktYy1IStSO16i2e7cS9D9OxZ81q2UUaiNPVrm/RTcbxamCXF9VUSKzJIdJV68EAIhTEVBalRWg==", - "dev": true, - "requires": { - "aes-js": "3.0.0", - "bn.js": "^4.11.9", - "elliptic": "6.5.4", - "hash.js": "1.1.3", - "js-sha3": "0.5.7", - "scrypt-js": "2.0.4", - "setimmediate": "1.0.4", - "uuid": "2.0.1", - "xmlhttprequest": "1.8.0" - } - }, - "hash.js": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.3.tgz", - "integrity": "sha512-/UETyP0W22QILqS+6HowevwhEFJ3MBJnwTf75Qob9Wz9t0DPuisL8kW8YZMK62dHAKE1c1p+gY1TtOLY+USEHA==", - "dev": true, - "requires": { - "inherits": "^2.0.3", - "minimalistic-assert": "^1.0.0" - } - }, - "js-sha3": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/js-sha3/-/js-sha3-0.5.7.tgz", - "integrity": "sha512-GII20kjaPX0zJ8wzkTbNDYMY7msuZcTWk8S5UOh6806Jq/wz1J8/bnr8uGU0DAUmYDjj2Mr4X1cW8v/GLYnR+g==", - "dev": true - }, - "scrypt-js": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/scrypt-js/-/scrypt-js-2.0.4.tgz", - "integrity": "sha512-4KsaGcPnuhtCZQCxFxN3GVYIhKFPTdLd8PLC552XwbMndtD0cjRFAhDuuydXQ0h08ZfPgzqe6EKHozpuH74iDw==", - "dev": true - }, - "setimmediate": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.4.tgz", - "integrity": "sha512-/TjEmXQVEzdod/FFskf3o7oOAsGhHf2j1dZqRFbDzq4F3mvvxflIIi4Hd3bLQE9y/CpwqfSQam5JakI/mi3Pog==", - "dev": true - }, - "uuid": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-2.0.1.tgz", - "integrity": "sha512-nWg9+Oa3qD2CQzHIP4qKUqwNfzKn8P0LtFhotaCTFchsV7ZfDhAybeip/HZVeMIpZi9JgY1E3nUlwaCmZT1sEg==", - "dev": true - } - } - }, - "@openzeppelin/contract-loader": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/@openzeppelin/contract-loader/-/contract-loader-0.6.3.tgz", - "integrity": "sha512-cOFIjBjwbGgZhDZsitNgJl0Ye1rd5yu/Yx5LMgeq3u0ZYzldm4uObzHDFq4gjDdoypvyORjjJa3BlFA7eAnVIg==", - "dev": true, - "requires": { - "find-up": "^4.1.0", - "fs-extra": "^8.1.0" - }, - "dependencies": { - "fs-extra": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz", - "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==", - "dev": true, - "requires": { - "graceful-fs": "^4.2.0", - "jsonfile": "^4.0.0", - "universalify": "^0.1.0" - } - }, - "jsonfile": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", - "integrity": "sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==", - "dev": true, - "requires": { - "graceful-fs": "^4.1.6" - } - }, - "universalify": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", - "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", - "dev": true - } - } - }, - "@openzeppelin/contracts": { - "version": "4.9.3", - "resolved": "https://registry.npmjs.org/@openzeppelin/contracts/-/contracts-4.9.3.tgz", - "integrity": "sha512-He3LieZ1pP2TNt5JbkPA4PNT9WC3gOTOlDcFGJW4Le4QKqwmiNJCRt44APfxMxvq7OugU/cqYuPcSBzOw38DAg==" - }, - "@openzeppelin/contracts-upgradeable": { - "version": "4.8.3", - "resolved": "https://registry.npmjs.org/@openzeppelin/contracts-upgradeable/-/contracts-upgradeable-4.8.3.tgz", - "integrity": "sha512-SXDRl7HKpl2WDoJpn7CK/M9U4Z8gNXDHHChAKh0Iz+Wew3wu6CmFYBeie3je8V0GSXZAIYYwUktSrnW/kwVPtg==" - }, - "@openzeppelin/contracts-v0.7": { - "version": "npm:@openzeppelin/contracts@3.4.2", - "resolved": "https://registry.npmjs.org/@openzeppelin/contracts/-/contracts-3.4.2.tgz", - "integrity": "sha512-z0zMCjyhhp4y7XKAcDAi3Vgms4T2PstwBdahiO0+9NaGICQKjynK3wduSRplTgk4LXmoO1yfDGO5RbjKYxtuxA==" - }, - "@openzeppelin/hardhat-upgrades": { - "version": "1.27.0", - "resolved": "https://registry.npmjs.org/@openzeppelin/hardhat-upgrades/-/hardhat-upgrades-1.27.0.tgz", - "integrity": "sha512-+OwrHWDz9tzpmBev6t2CtZM2tRpy/ybhg5e3GIgyeqTxK2vUV40dxIxO6lie+qKeJHZ2RIdDwvSTSiCEJif+fA==", - "dev": true, - "requires": { - "@openzeppelin/upgrades-core": "^1.26.2", - "chalk": "^4.1.0", - "debug": "^4.1.1", - "defender-base-client": "^1.44.0", - "platform-deploy-client": "^0.6.0", - "proper-lockfile": "^4.1.1" - } - }, - "@openzeppelin/test-helpers": { - "version": "0.5.16", - "resolved": "https://registry.npmjs.org/@openzeppelin/test-helpers/-/test-helpers-0.5.16.tgz", - "integrity": "sha512-T1EvspSfH1qQO/sgGlskLfYVBbqzJR23SZzYl/6B2JnT4EhThcI85UpvDk0BkLWKaDScQTabGHt4GzHW+3SfZg==", - "dev": true, - "requires": { - "@openzeppelin/contract-loader": "^0.6.2", - "@truffle/contract": "^4.0.35", - "ansi-colors": "^3.2.3", - "chai": "^4.2.0", - "chai-bn": "^0.2.1", - "ethjs-abi": "^0.2.1", - "lodash.flatten": "^4.4.0", - "semver": "^5.6.0", - "web3": "^1.2.5", - "web3-utils": "^1.2.5" - }, - "dependencies": { - "bn.js": { - "version": "4.12.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", - "dev": true, - "peer": true - }, - "chai-bn": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/chai-bn/-/chai-bn-0.2.2.tgz", - "integrity": "sha512-MzjelH0p8vWn65QKmEq/DLBG1Hle4WeyqT79ANhXZhn/UxRWO0OogkAxi5oGGtfzwU9bZR8mvbvYdoqNVWQwFg==", - "dev": true, - "requires": {} - }, - "semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "dev": true - } - } - }, - "@openzeppelin/upgrades-core": { - "version": "1.26.2", - "resolved": "https://registry.npmjs.org/@openzeppelin/upgrades-core/-/upgrades-core-1.26.2.tgz", - "integrity": "sha512-TJORrgyun5qflPos/47P3j61gDw+7W+tEirSBOYRxfVL1WGjX1n8iaLrijPIqzyeS1MKguN1nckAMspQ4SKrxw==", - "dev": true, - "requires": { - "cbor": "^8.0.0", - "chalk": "^4.1.0", - "compare-versions": "^5.0.0", - "debug": "^4.1.1", - "ethereumjs-util": "^7.0.3", - "proper-lockfile": "^4.1.1", - "solidity-ast": "^0.4.15" - }, - "dependencies": { - "cbor": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/cbor/-/cbor-8.1.0.tgz", - "integrity": "sha512-DwGjNW9omn6EwP70aXsn7FQJx5kO12tX0bZkaTjzdVFM6/7nhA4t0EENocKGx6D2Bch9PE2KzCUf5SceBdeijg==", - "dev": true, - "requires": { - "nofilter": "^3.1.0" - } - }, - "nofilter": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/nofilter/-/nofilter-3.1.0.tgz", - "integrity": "sha512-l2NNj07e9afPnhAhvgVrCD/oy2Ai1yfLpuo3EpiO1jFTsB4sFz6oIfAfSZyQzVpkZQ9xS8ZS5g1jCBgq4Hwo0g==", - "dev": true - } - } - }, - "@poanet/solidity-flattener": { - "version": "3.0.9", - "resolved": "https://registry.npmjs.org/@poanet/solidity-flattener/-/solidity-flattener-3.0.9.tgz", - "integrity": "sha512-3vTJ05uRGJqP0t81963Ed99uijjXSyqgXfdrBD04su1auBU9enOGzUP6H2H7SyWBAmwUPmBb/z9Qy96ytyvtDw==", - "requires": { - "bunyan": "^1.8.12", - "decomment": "^0.9.1", - "glob-promise": "^3.4.0", - "path": "^0.12.7" - } - }, - "@protobufjs/aspromise": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@protobufjs/aspromise/-/aspromise-1.1.2.tgz", - "integrity": "sha512-j+gKExEuLmKwvz3OgROXtrJ2UG2x8Ch2YZUxahh+s1F2HZ+wAceUNLkvy6zKCPVRkU++ZWQrdxsUeQXmcg4uoQ==", - "optional": true - }, - "@protobufjs/base64": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@protobufjs/base64/-/base64-1.1.2.tgz", - "integrity": "sha512-AZkcAA5vnN/v4PDqKyMR5lx7hZttPDgClv83E//FMNhR2TMcLUhfRUBHCmSl0oi9zMgDDqRUJkSxO3wm85+XLg==", - "optional": true - }, - "@protobufjs/codegen": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/@protobufjs/codegen/-/codegen-2.0.4.tgz", - "integrity": "sha512-YyFaikqM5sH0ziFZCN3xDC7zeGaB/d0IUb9CATugHWbd1FRFwWwt4ld4OYMPWu5a3Xe01mGAULCdqhMlPl29Jg==", - "optional": true - }, - "@protobufjs/eventemitter": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@protobufjs/eventemitter/-/eventemitter-1.1.0.tgz", - "integrity": "sha512-j9ednRT81vYJ9OfVuXG6ERSTdEL1xVsNgqpkxMsbIabzSo3goCjDIveeGv5d03om39ML71RdmrGNjG5SReBP/Q==", - "optional": true - }, - "@protobufjs/fetch": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@protobufjs/fetch/-/fetch-1.1.0.tgz", - "integrity": "sha512-lljVXpqXebpsijW71PZaCYeIcE5on1w5DlQy5WH6GLbFryLUrBD4932W/E2BSpfRJWseIL4v/KPgBFxDOIdKpQ==", - "optional": true, - "requires": { - "@protobufjs/aspromise": "^1.1.1", - "@protobufjs/inquire": "^1.1.0" - } - }, - "@protobufjs/float": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@protobufjs/float/-/float-1.0.2.tgz", - "integrity": "sha512-Ddb+kVXlXst9d+R9PfTIxh1EdNkgoRe5tOX6t01f1lYWOvJnSPDBlG241QLzcyPdoNTsblLUdujGSE4RzrTZGQ==", - "optional": true - }, - "@protobufjs/inquire": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@protobufjs/inquire/-/inquire-1.1.0.tgz", - "integrity": "sha512-kdSefcPdruJiFMVSbn801t4vFK7KB/5gd2fYvrxhuJYg8ILrmn9SKSX2tZdV6V+ksulWqS7aXjBcRXl3wHoD9Q==", - "optional": true - }, - "@protobufjs/path": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@protobufjs/path/-/path-1.1.2.tgz", - "integrity": "sha512-6JOcJ5Tm08dOHAbdR3GrvP+yUUfkjG5ePsHYczMFLq3ZmMkAD98cDgcT2iA1lJ9NVwFd4tH/iSSoe44YWkltEA==", - "optional": true - }, - "@protobufjs/pool": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@protobufjs/pool/-/pool-1.1.0.tgz", - "integrity": "sha512-0kELaGSIDBKvcgS4zkjz1PeddatrjYcmMWOlAuAPwAeccUrPHdUqo/J6LiymHHEiJT5NrF1UVwxY14f+fy4WQw==", - "optional": true - }, - "@protobufjs/utf8": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@protobufjs/utf8/-/utf8-1.1.0.tgz", - "integrity": "sha512-Vvn3zZrhQZkkBE8LSuW3em98c0FwgO4nxzv6OdSxPKJIEKY2bGbHn+mhGIPerzI4twdxaP8/0+06HBpwf345Lw==", - "optional": true - }, - "@rari-capital/solmate": { - "version": "git+ssh://git@github.com/transmissions11/solmate.git#8f9b23f8838670afda0fd8983f2c41e8037ae6bc", - "integrity": "sha512-cW0PouqpoiEDhhkOxkqQKcjG4oMJ1Qb+kY6aiwBlgOjpfnhmXK7lkU5ZkHKC22ypQj6lvSc6CaHmXXaPywPsYg==", - "from": "@rari-capital/solmate@github:transmissions11/solmate#8f9b23f8838670afda0fd8983f2c41e8037ae6bc" - }, - "@redux-saga/core": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/@redux-saga/core/-/core-1.2.3.tgz", - "integrity": "sha512-U1JO6ncFBAklFTwoQ3mjAeQZ6QGutsJzwNBjgVLSWDpZTRhobUzuVDS1qH3SKGJD8fvqoaYOjp6XJ3gCmeZWgA==", - "requires": { - "@babel/runtime": "^7.6.3", - "@redux-saga/deferred": "^1.2.1", - "@redux-saga/delay-p": "^1.2.1", - "@redux-saga/is": "^1.1.3", - "@redux-saga/symbols": "^1.1.3", - "@redux-saga/types": "^1.2.1", - "redux": "^4.0.4", - "typescript-tuple": "^2.2.1" - }, - "dependencies": { - "redux": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/redux/-/redux-4.2.1.tgz", - "integrity": "sha512-LAUYz4lc+Do8/g7aeRa8JkyDErK6ekstQaqWQrNRW//MY1TvCEpMtpTWvlQ+FPbWCx+Xixu/6SHt5N0HR+SB4w==", - "requires": { - "@babel/runtime": "^7.9.2" - } - } - } - }, - "@redux-saga/deferred": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/@redux-saga/deferred/-/deferred-1.2.1.tgz", - "integrity": "sha512-cmin3IuuzMdfQjA0lG4B+jX+9HdTgHZZ+6u3jRAOwGUxy77GSlTi4Qp2d6PM1PUoTmQUR5aijlA39scWWPF31g==" - }, - "@redux-saga/delay-p": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/@redux-saga/delay-p/-/delay-p-1.2.1.tgz", - "integrity": "sha512-MdiDxZdvb1m+Y0s4/hgdcAXntpUytr9g0hpcOO1XFVyyzkrDu3SKPgBFOtHn7lhu7n24ZKIAT1qtKyQjHqRd+w==", - "requires": { - "@redux-saga/symbols": "^1.1.3" - } - }, - "@redux-saga/is": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/@redux-saga/is/-/is-1.1.3.tgz", - "integrity": "sha512-naXrkETG1jLRfVfhOx/ZdLj0EyAzHYbgJWkXbB3qFliPcHKiWbv/ULQryOAEKyjrhiclmr6AMdgsXFyx7/yE6Q==", - "requires": { - "@redux-saga/symbols": "^1.1.3", - "@redux-saga/types": "^1.2.1" - } - }, - "@redux-saga/symbols": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/@redux-saga/symbols/-/symbols-1.1.3.tgz", - "integrity": "sha512-hCx6ZvU4QAEUojETnX8EVg4ubNLBFl1Lps4j2tX7o45x/2qg37m3c6v+kSp8xjDJY+2tJw4QB3j8o8dsl1FDXg==" - }, - "@redux-saga/types": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/@redux-saga/types/-/types-1.2.1.tgz", - "integrity": "sha512-1dgmkh+3so0+LlBWRhGA33ua4MYr7tUOj+a9Si28vUi0IUFNbff1T3sgpeDJI/LaC75bBYnQ0A3wXjn0OrRNBA==" - }, - "@resolver-engine/core": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/@resolver-engine/core/-/core-0.3.3.tgz", - "integrity": "sha512-eB8nEbKDJJBi5p5SrvrvILn4a0h42bKtbCTri3ZxCGt6UvoQyp7HnGOfki944bUjBSHKK3RvgfViHn+kqdXtnQ==", - "dev": true, - "requires": { - "debug": "^3.1.0", - "is-url": "^1.2.4", - "request": "^2.85.0" - }, - "dependencies": { - "debug": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", - "dev": true, - "requires": { - "ms": "^2.1.1" - } - } - } - }, - "@resolver-engine/fs": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/@resolver-engine/fs/-/fs-0.3.3.tgz", - "integrity": "sha512-wQ9RhPUcny02Wm0IuJwYMyAG8fXVeKdmhm8xizNByD4ryZlx6PP6kRen+t/haF43cMfmaV7T3Cx6ChOdHEhFUQ==", - "dev": true, - "requires": { - "@resolver-engine/core": "^0.3.3", - "debug": "^3.1.0" - }, - "dependencies": { - "debug": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", - "dev": true, - "requires": { - "ms": "^2.1.1" - } - } - } - }, - "@resolver-engine/imports": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/@resolver-engine/imports/-/imports-0.3.3.tgz", - "integrity": "sha512-anHpS4wN4sRMwsAbMXhMfOD/y4a4Oo0Cw/5+rue7hSwGWsDOQaAU1ClK1OxjUC35/peazxEl8JaSRRS+Xb8t3Q==", - "dev": true, - "requires": { - "@resolver-engine/core": "^0.3.3", - "debug": "^3.1.0", - "hosted-git-info": "^2.6.0", - "path-browserify": "^1.0.0", - "url": "^0.11.0" - }, - "dependencies": { - "debug": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", - "dev": true, - "requires": { - "ms": "^2.1.1" - } - } - } - }, - "@resolver-engine/imports-fs": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/@resolver-engine/imports-fs/-/imports-fs-0.3.3.tgz", - "integrity": "sha512-7Pjg/ZAZtxpeyCFlZR5zqYkz+Wdo84ugB5LApwriT8XFeQoLwGUj4tZFFvvCuxaNCcqZzCYbonJgmGObYBzyCA==", - "dev": true, - "requires": { - "@resolver-engine/fs": "^0.3.3", - "@resolver-engine/imports": "^0.3.3", - "debug": "^3.1.0" - }, - "dependencies": { - "debug": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", - "dev": true, - "requires": { - "ms": "^2.1.1" - } - } - } - }, - "@scure/base": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@scure/base/-/base-1.1.1.tgz", - "integrity": "sha512-ZxOhsSyxYwLJj3pLZCefNitxsj093tb2vq90mp2txoYeBqbcjDjqFhyM8eUjq/uFm6zJ+mUuqxlS2FkuSY1MTA==" - }, - "@scure/bip32": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@scure/bip32/-/bip32-1.1.0.tgz", - "integrity": "sha512-ftTW3kKX54YXLCxH6BB7oEEoJfoE2pIgw7MINKAs5PsS6nqKPuKk1haTF/EuHmYqG330t5GSrdmtRuHaY1a62Q==", - "requires": { - "@noble/hashes": "~1.1.1", - "@noble/secp256k1": "~1.6.0", - "@scure/base": "~1.1.0" - }, - "dependencies": { - "@noble/secp256k1": { - "version": "1.6.3", - "resolved": "https://registry.npmjs.org/@noble/secp256k1/-/secp256k1-1.6.3.tgz", - "integrity": "sha512-T04e4iTurVy7I8Sw4+c5OSN9/RkPlo1uKxAomtxQNLq8j1uPAqnsqG1bqvY3Jv7c13gyr6dui0zmh/I3+f/JaQ==" - } - } - }, - "@scure/bip39": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@scure/bip39/-/bip39-1.1.0.tgz", - "integrity": "sha512-pwrPOS16VeTKg98dYXQyIjJEcWfz7/1YJIwxUEPFfQPtc86Ym/1sVgQ2RLoD43AazMk2l/unK4ITySSpW2+82w==", - "requires": { - "@noble/hashes": "~1.1.1", - "@scure/base": "~1.1.0" - } - }, - "@sentry/core": { - "version": "5.30.0", - "resolved": "https://registry.npmjs.org/@sentry/core/-/core-5.30.0.tgz", - "integrity": "sha512-TmfrII8w1PQZSZgPpUESqjB+jC6MvZJZdLtE/0hZ+SrnKhW3x5WlYLvTXZpcWePYBku7rl2wn1RZu6uT0qCTeg==", - "requires": { - "@sentry/hub": "5.30.0", - "@sentry/minimal": "5.30.0", - "@sentry/types": "5.30.0", - "@sentry/utils": "5.30.0", - "tslib": "^1.9.3" - }, - "dependencies": { - "tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" - } - } - }, - "@sentry/hub": { - "version": "5.30.0", - "resolved": "https://registry.npmjs.org/@sentry/hub/-/hub-5.30.0.tgz", - "integrity": "sha512-2tYrGnzb1gKz2EkMDQcfLrDTvmGcQPuWxLnJKXJvYTQDGLlEvi2tWz1VIHjunmOvJrB5aIQLhm+dcMRwFZDCqQ==", - "requires": { - "@sentry/types": "5.30.0", - "@sentry/utils": "5.30.0", - "tslib": "^1.9.3" - }, - "dependencies": { - "tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" - } - } - }, - "@sentry/minimal": { - "version": "5.30.0", - "resolved": "https://registry.npmjs.org/@sentry/minimal/-/minimal-5.30.0.tgz", - "integrity": "sha512-BwWb/owZKtkDX+Sc4zCSTNcvZUq7YcH3uAVlmh/gtR9rmUvbzAA3ewLuB3myi4wWRAMEtny6+J/FN/x+2wn9Xw==", - "requires": { - "@sentry/hub": "5.30.0", - "@sentry/types": "5.30.0", - "tslib": "^1.9.3" - }, - "dependencies": { - "tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" - } - } - }, - "@sentry/node": { - "version": "5.30.0", - "resolved": "https://registry.npmjs.org/@sentry/node/-/node-5.30.0.tgz", - "integrity": "sha512-Br5oyVBF0fZo6ZS9bxbJZG4ApAjRqAnqFFurMVJJdunNb80brh7a5Qva2kjhm+U6r9NJAB5OmDyPkA1Qnt+QVg==", - "requires": { - "@sentry/core": "5.30.0", - "@sentry/hub": "5.30.0", - "@sentry/tracing": "5.30.0", - "@sentry/types": "5.30.0", - "@sentry/utils": "5.30.0", - "cookie": "^0.4.1", - "https-proxy-agent": "^5.0.0", - "lru_map": "^0.3.3", - "tslib": "^1.9.3" - }, - "dependencies": { - "tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" - } - } - }, - "@sentry/tracing": { - "version": "5.30.0", - "resolved": "https://registry.npmjs.org/@sentry/tracing/-/tracing-5.30.0.tgz", - "integrity": "sha512-dUFowCr0AIMwiLD7Fs314Mdzcug+gBVo/+NCMyDw8tFxJkwWAKl7Qa2OZxLQ0ZHjakcj1hNKfCQJ9rhyfOl4Aw==", - "requires": { - "@sentry/hub": "5.30.0", - "@sentry/minimal": "5.30.0", - "@sentry/types": "5.30.0", - "@sentry/utils": "5.30.0", - "tslib": "^1.9.3" - }, - "dependencies": { - "tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" - } - } - }, - "@sentry/types": { - "version": "5.30.0", - "resolved": "https://registry.npmjs.org/@sentry/types/-/types-5.30.0.tgz", - "integrity": "sha512-R8xOqlSTZ+htqrfteCWU5Nk0CDN5ApUTvrlvBuiH1DyP6czDZ4ktbZB0hAgBlVcK0U+qpD3ag3Tqqpa5Q67rPw==" - }, - "@sentry/utils": { - "version": "5.30.0", - "resolved": "https://registry.npmjs.org/@sentry/utils/-/utils-5.30.0.tgz", - "integrity": "sha512-zaYmoH0NWWtvnJjC9/CBseXMtKHm/tm40sz3YfJRxeQjyzRqNQPgivpd9R/oDJCYj999mzdW382p/qi2ypjLww==", - "requires": { - "@sentry/types": "5.30.0", - "tslib": "^1.9.3" - }, - "dependencies": { - "tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" - } - } - }, - "@sindresorhus/is": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-4.6.0.tgz", - "integrity": "sha512-t09vSN3MdfsyCHoFcTRCH/iUtG7OJ0CsjzB8cjAmKc/va/kIgeDI/TxsigdncE/4be734m0cvIYwNaV4i2XqAw==" - }, - "@solana/buffer-layout": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@solana/buffer-layout/-/buffer-layout-4.0.0.tgz", - "integrity": "sha512-lR0EMP2HC3+Mxwd4YcnZb0smnaDw7Bl2IQWZiTevRH5ZZBZn6VRWn3/92E3qdU4SSImJkA6IDHawOHAnx/qUvQ==", - "requires": { - "buffer": "~6.0.3" - } - }, - "@solana/buffer-layout-utils": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/@solana/buffer-layout-utils/-/buffer-layout-utils-0.2.0.tgz", - "integrity": "sha512-szG4sxgJGktbuZYDg2FfNmkMi0DYQoVjN2h7ta1W1hPrwzarcFLBq9UpX1UjNXsNpT9dn+chgprtWGioUAr4/g==", - "requires": { - "@solana/buffer-layout": "^4.0.0", - "@solana/web3.js": "^1.32.0", - "bigint-buffer": "^1.1.5", - "bignumber.js": "^9.0.1" - } - }, - "@solana/spl-token": { - "version": "0.3.7", - "resolved": "https://registry.npmjs.org/@solana/spl-token/-/spl-token-0.3.7.tgz", - "integrity": "sha512-bKGxWTtIw6VDdCBngjtsGlKGLSmiu/8ghSt/IOYJV24BsymRbgq7r12GToeetpxmPaZYLddKwAz7+EwprLfkfg==", - "requires": { - "@solana/buffer-layout": "^4.0.0", - "@solana/buffer-layout-utils": "^0.2.0", - "buffer": "^6.0.3" - } - }, - "@solana/web3.js": { - "version": "1.78.4", - "resolved": "https://registry.npmjs.org/@solana/web3.js/-/web3.js-1.78.4.tgz", - "integrity": "sha512-up5VG1dK+GPhykmuMIozJZBbVqpm77vbOG6/r5dS7NBGZonwHfTLdBbsYc3rjmaQ4DpCXUa3tUc4RZHRORvZrw==", - "requires": { - "@babel/runtime": "^7.22.6", - "@noble/curves": "^1.0.0", - "@noble/hashes": "^1.3.1", - "@solana/buffer-layout": "^4.0.0", - "agentkeepalive": "^4.3.0", - "bigint-buffer": "^1.1.5", - "bn.js": "^5.2.1", - "borsh": "^0.7.0", - "bs58": "^4.0.1", - "buffer": "6.0.3", - "fast-stable-stringify": "^1.0.0", - "jayson": "^4.1.0", - "node-fetch": "^2.6.12", - "rpc-websockets": "^7.5.1", - "superstruct": "^0.14.2" - }, - "dependencies": { - "@noble/hashes": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.3.1.tgz", - "integrity": "sha512-EbqwksQwz9xDRGfDST86whPBgM65E0OH/pCgqW0GBVzO22bNE+NuIbeTb714+IfSjU3aRk47EUvXIb5bTsenKA==" - } - } - }, - "@solidity-parser/parser": { - "version": "0.14.3", - "resolved": "https://registry.npmjs.org/@solidity-parser/parser/-/parser-0.14.3.tgz", - "integrity": "sha512-29g2SZ29HtsqA58pLCtopI1P/cPy5/UAzlcAXO6T/CNJimG6yA8kx4NaseMyJULiC+TEs02Y9/yeHzClqoA0hw==", - "requires": { - "antlr4ts": "^0.5.0-alpha.4" - } - }, - "@szmarczak/http-timer": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-5.0.1.tgz", - "integrity": "sha512-+PmQX0PiAYPMeVYe237LJAYvOMYW1j2rH5YROyS3b4CTVJum34HfRvKvAzozHAQG0TnHNdUfY9nCeUyRAs//cw==", - "requires": { - "defer-to-connect": "^2.0.1" - } - }, - "@truffle/abi-utils": { - "version": "0.3.9", - "resolved": "https://registry.npmjs.org/@truffle/abi-utils/-/abi-utils-0.3.9.tgz", - "integrity": "sha512-G5dqgwRHx5zwlXjz3QT8OJVfB2cOqWwD6DwKso0KttUt/zejhCjnkKq72rSgyeLMkz7wBB9ERLOsupLBILM8MA==", - "dev": true, - "requires": { - "change-case": "3.0.2", - "fast-check": "3.1.1", - "web3-utils": "1.8.2" - }, - "dependencies": { - "web3-utils": { - "version": "1.8.2", - "resolved": "https://registry.npmjs.org/web3-utils/-/web3-utils-1.8.2.tgz", - "integrity": "sha512-v7j6xhfLQfY7xQDrUP0BKbaNrmZ2/+egbqP9q3KYmOiPpnvAfol+32slgL0WX/5n8VPvKCK5EZ1HGrAVICSToA==", - "dev": true, - "requires": { - "bn.js": "^5.2.1", - "ethereum-bloom-filters": "^1.0.6", - "ethereumjs-util": "^7.1.0", - "ethjs-unit": "0.1.6", - "number-to-bn": "1.7.0", - "randombytes": "^2.1.0", - "utf8": "3.0.0" - } - } - } - }, - "@truffle/blockchain-utils": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/@truffle/blockchain-utils/-/blockchain-utils-0.1.7.tgz", - "integrity": "sha512-1nibqGjEHC7KAyDThEFvbm2+EO8zAHee/VjCtxkYBE3ySwP50joh0QCEBjy7K/9z+icpMoDucfxmgaKToBFUgQ==", - "dev": true - }, - "@truffle/code-utils": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/@truffle/code-utils/-/code-utils-3.0.4.tgz", - "integrity": "sha512-MWK3TMisIFaBpSjK7tt1GoQan7DQDBqT2iSsdQOGD74C7r9NMwsIdnL2EYoB/DPcEJ7B8yP4grlG2fQTrPF96g==", - "requires": { - "cbor": "^5.2.0" - } - }, - "@truffle/codec": { - "version": "0.14.17", - "resolved": "https://registry.npmjs.org/@truffle/codec/-/codec-0.14.17.tgz", - "integrity": "sha512-kD4dD86huLeaBEq5R8D1zleJEu6NsXbyYLdXl1V1TKdiO8odw5CBC6Y/+wdu5d3t1dyEYrTbhn1dqknZa52pmw==", - "dev": true, - "requires": { - "@truffle/abi-utils": "^0.3.9", - "@truffle/compile-common": "^0.9.4", - "big.js": "^6.0.3", - "bn.js": "^5.1.3", - "cbor": "^5.2.0", - "debug": "^4.3.1", - "lodash": "^4.17.21", - "semver": "7.3.7", - "utf8": "^3.0.0", - "web3-utils": "1.8.2" - }, - "dependencies": { - "lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dev": true, - "requires": { - "yallist": "^4.0.0" - } - }, - "semver": { - "version": "7.3.7", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz", - "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==", - "dev": true, - "requires": { - "lru-cache": "^6.0.0" - } - }, - "web3-utils": { - "version": "1.8.2", - "resolved": "https://registry.npmjs.org/web3-utils/-/web3-utils-1.8.2.tgz", - "integrity": "sha512-v7j6xhfLQfY7xQDrUP0BKbaNrmZ2/+egbqP9q3KYmOiPpnvAfol+32slgL0WX/5n8VPvKCK5EZ1HGrAVICSToA==", - "dev": true, - "requires": { - "bn.js": "^5.2.1", - "ethereum-bloom-filters": "^1.0.6", - "ethereumjs-util": "^7.1.0", - "ethjs-unit": "0.1.6", - "number-to-bn": "1.7.0", - "randombytes": "^2.1.0", - "utf8": "3.0.0" - } - }, - "yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true - } - } - }, - "@truffle/compile-common": { - "version": "0.9.8", - "resolved": "https://registry.npmjs.org/@truffle/compile-common/-/compile-common-0.9.8.tgz", - "integrity": "sha512-DTpiyo32t/YhLI1spn84D3MHYHrnoVqO+Gp7ZHrYNwDs86mAxtNiH5lsVzSb8cPgiqlvNsRCU9nm9R0YmKMTBQ==", - "requires": { - "@truffle/error": "^0.2.2", - "colors": "1.4.0" - }, - "dependencies": { - "@truffle/error": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/@truffle/error/-/error-0.2.2.tgz", - "integrity": "sha512-TqbzJ0O8DHh34cu8gDujnYl4dUl6o2DE4PR6iokbybvnIm/L2xl6+Gv1VC+YJS45xfH83Yo3/Zyg/9Oq8/xZWg==" - } - } - }, - "@truffle/config": { - "version": "1.3.61", - "resolved": "https://registry.npmjs.org/@truffle/config/-/config-1.3.61.tgz", - "integrity": "sha512-L4uyG47V+k0NrSoVJ9D+hp2jcMstihW1QlNuXiu5g3mU24BjrozlJT34DFkczh/TtRceLjdrQJKA8WJCMICutw==", - "optional": true, - "requires": { - "@truffle/error": "^0.2.2", - "@truffle/events": "^0.1.25", - "@truffle/provider": "^0.3.13", - "conf": "^10.1.2", - "debug": "^4.3.1", - "find-up": "^2.1.0", - "lodash": "^4.17.21", - "original-require": "^1.0.1" - }, - "dependencies": { - "@truffle/error": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/@truffle/error/-/error-0.2.2.tgz", - "integrity": "sha512-TqbzJ0O8DHh34cu8gDujnYl4dUl6o2DE4PR6iokbybvnIm/L2xl6+Gv1VC+YJS45xfH83Yo3/Zyg/9Oq8/xZWg==", - "optional": true - }, - "find-up": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", - "integrity": "sha512-NWzkk0jSJtTt08+FBFMvXoeZnOJD+jTtsRmBYbAIzJdX6l7dLgR7CTubCM5/eDdPUBvLCeVasP1brfVR/9/EZQ==", - "optional": true, - "requires": { - "locate-path": "^2.0.0" - } - }, - "locate-path": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", - "integrity": "sha512-NCI2kiDkyR7VeEKm27Kda/iQHyKJe1Bu0FlTbYp3CqJu+9IFe9bLyAjMxf5ZDDbEg+iMPzB5zYyUTSm8wVTKmA==", - "optional": true, - "requires": { - "p-locate": "^2.0.0", - "path-exists": "^3.0.0" - } - }, - "p-limit": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz", - "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==", - "optional": true, - "requires": { - "p-try": "^1.0.0" - } - }, - "p-locate": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz", - "integrity": "sha512-nQja7m7gSKuewoVRen45CtVfODR3crN3goVQ0DDZ9N3yHxgpkuBhZqsaiotSQRrADUrne346peY7kT3TSACykg==", - "optional": true, - "requires": { - "p-limit": "^1.1.0" - } - }, - "p-try": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz", - "integrity": "sha512-U1etNYuMJoIz3ZXSrrySFjsXQTWOx2/jdi86L+2pRvph/qMKL6sbcCYdH23fqsbm8TH2Gn0OybpT4eSFlCVHww==", - "optional": true - }, - "path-exists": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", - "integrity": "sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==", - "optional": true - } - } - }, - "@truffle/contract": { - "version": "4.6.20", - "resolved": "https://registry.npmjs.org/@truffle/contract/-/contract-4.6.20.tgz", - "integrity": "sha512-s7Mbc37L/CF5Apy/cjPnalkgACmG9tTAmcIW28cIZLRLOUAze18pqhtdHryxAQhEOtKGaDAho6TriqL7/74uHw==", - "dev": true, - "requires": { - "@ensdomains/ensjs": "^2.1.0", - "@truffle/blockchain-utils": "^0.1.7", - "@truffle/contract-schema": "^3.4.13", - "@truffle/debug-utils": "^6.0.48", - "@truffle/error": "^0.2.0", - "@truffle/interface-adapter": "^0.5.32", - "bignumber.js": "^7.2.1", - "debug": "^4.3.1", - "ethers": "^4.0.32", - "web3": "1.8.2", - "web3-core-helpers": "1.8.2", - "web3-core-promievent": "1.8.2", - "web3-eth-abi": "1.8.2", - "web3-utils": "1.8.2" - }, - "dependencies": { - "@ethereumjs/common": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/@ethereumjs/common/-/common-2.5.0.tgz", - "integrity": "sha512-DEHjW6e38o+JmB/NO3GZBpW4lpaiBpkFgXF6jLcJ6gETBYpEyaA5nTimsWBUJR3Vmtm/didUEbNjajskugZORg==", - "dev": true, - "requires": { - "crc-32": "^1.2.0", - "ethereumjs-util": "^7.1.1" - } - }, - "@ethereumjs/tx": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/@ethereumjs/tx/-/tx-3.3.2.tgz", - "integrity": "sha512-6AaJhwg4ucmwTvw/1qLaZUX5miWrwZ4nLOUsKyb/HtzS3BMw/CasKhdi1ims9mBKeK9sOJCH4qGKOBGyJCeeog==", - "dev": true, - "requires": { - "@ethereumjs/common": "^2.5.0", - "ethereumjs-util": "^7.1.2" - } - }, - "@truffle/error": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/@truffle/error/-/error-0.2.0.tgz", - "integrity": "sha512-Fe0/z4WWb7IP2gBnv3l6zqP87Y0kSMs7oiSLakKJq17q3GUunrHSdioKuNspdggxkXIBhEQLhi8C+LJdwmHKWQ==", - "dev": true - }, - "@types/node": { - "version": "12.20.55", - "resolved": "https://registry.npmjs.org/@types/node/-/node-12.20.55.tgz", - "integrity": "sha512-J8xLz7q2OFulZ2cyGTLE1TbbZcjpno7FaN6zdJNrgAdrJ+DZzh/uFR6YrTb4C+nXakvud8Q4+rbhoIWlYQbUFQ==", - "dev": true - }, - "bignumber.js": { - "version": "7.2.1", - "resolved": "https://registry.npmjs.org/bignumber.js/-/bignumber.js-7.2.1.tgz", - "integrity": "sha512-S4XzBk5sMB+Rcb/LNcpzXr57VRTxgAvaAEDAl1AwRx27j00hT84O6OkteE7u8UB3NuaaygCRrEpqox4uDOrbdQ==", - "dev": true - }, - "eth-lib": { - "version": "0.2.8", - "resolved": "https://registry.npmjs.org/eth-lib/-/eth-lib-0.2.8.tgz", - "integrity": "sha512-ArJ7x1WcWOlSpzdoTBX8vkwlkSQ85CjjifSZtV4co64vWxSV8geWfPI9x4SVYu3DSxnX4yWFVTtGL+j9DUFLNw==", - "dev": true, - "requires": { - "bn.js": "^4.11.6", - "elliptic": "^6.4.0", - "xhr-request-promise": "^0.1.2" - }, - "dependencies": { - "bn.js": { - "version": "4.12.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", - "dev": true - } - } - }, - "ethers": { - "version": "4.0.49", - "resolved": "https://registry.npmjs.org/ethers/-/ethers-4.0.49.tgz", - "integrity": "sha512-kPltTvWiyu+OktYy1IStSO16i2e7cS9D9OxZ81q2UUaiNPVrm/RTcbxamCXF9VUSKzJIdJV68EAIhTEVBalRWg==", - "dev": true, - "requires": { - "aes-js": "3.0.0", - "bn.js": "^4.11.9", - "elliptic": "6.5.4", - "hash.js": "1.1.3", - "js-sha3": "0.5.7", - "scrypt-js": "2.0.4", - "setimmediate": "1.0.4", - "uuid": "2.0.1", - "xmlhttprequest": "1.8.0" - }, - "dependencies": { - "bn.js": { - "version": "4.12.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", - "dev": true - } - } - }, - "eventemitter3": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.4.tgz", - "integrity": "sha512-rlaVLnVxtxvoyLsQQFBx53YmXHDxRIzzTLbdfxqi4yocpSjAxXwkU0cScM5JgSKMqEhrZpnvQ2D9gjylR0AimQ==", - "dev": true - }, - "hash.js": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.3.tgz", - "integrity": "sha512-/UETyP0W22QILqS+6HowevwhEFJ3MBJnwTf75Qob9Wz9t0DPuisL8kW8YZMK62dHAKE1c1p+gY1TtOLY+USEHA==", - "dev": true, - "requires": { - "inherits": "^2.0.3", - "minimalistic-assert": "^1.0.0" - } - }, - "js-sha3": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/js-sha3/-/js-sha3-0.5.7.tgz", - "integrity": "sha512-GII20kjaPX0zJ8wzkTbNDYMY7msuZcTWk8S5UOh6806Jq/wz1J8/bnr8uGU0DAUmYDjj2Mr4X1cW8v/GLYnR+g==", - "dev": true - }, - "scrypt-js": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/scrypt-js/-/scrypt-js-2.0.4.tgz", - "integrity": "sha512-4KsaGcPnuhtCZQCxFxN3GVYIhKFPTdLd8PLC552XwbMndtD0cjRFAhDuuydXQ0h08ZfPgzqe6EKHozpuH74iDw==", - "dev": true - }, - "setimmediate": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.4.tgz", - "integrity": "sha512-/TjEmXQVEzdod/FFskf3o7oOAsGhHf2j1dZqRFbDzq4F3mvvxflIIi4Hd3bLQE9y/CpwqfSQam5JakI/mi3Pog==", - "dev": true - }, - "uuid": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-2.0.1.tgz", - "integrity": "sha512-nWg9+Oa3qD2CQzHIP4qKUqwNfzKn8P0LtFhotaCTFchsV7ZfDhAybeip/HZVeMIpZi9JgY1E3nUlwaCmZT1sEg==", - "dev": true - }, - "web3": { - "version": "1.8.2", - "resolved": "https://registry.npmjs.org/web3/-/web3-1.8.2.tgz", - "integrity": "sha512-92h0GdEHW9wqDICQQKyG4foZBYi0OQkyg4CRml2F7XBl/NG+fu9o6J19kzfFXzSBoA4DnJXbyRgj/RHZv5LRiw==", - "dev": true, - "requires": { - "web3-bzz": "1.8.2", - "web3-core": "1.8.2", - "web3-eth": "1.8.2", - "web3-eth-personal": "1.8.2", - "web3-net": "1.8.2", - "web3-shh": "1.8.2", - "web3-utils": "1.8.2" - } - }, - "web3-bzz": { - "version": "1.8.2", - "resolved": "https://registry.npmjs.org/web3-bzz/-/web3-bzz-1.8.2.tgz", - "integrity": "sha512-1EEnxjPnFnvNWw3XeeKuTR8PBxYd0+XWzvaLK7OJC/Go9O8llLGxrxICbKV+8cgIE0sDRBxiYx02X+6OhoAQ9w==", - "dev": true, - "requires": { - "@types/node": "^12.12.6", - "got": "12.1.0", - "swarm-js": "^0.1.40" - } - }, - "web3-core": { - "version": "1.8.2", - "resolved": "https://registry.npmjs.org/web3-core/-/web3-core-1.8.2.tgz", - "integrity": "sha512-DJTVEAYcNqxkqruJE+Rxp3CIv0y5AZMwPHQmOkz/cz+MM75SIzMTc0AUdXzGyTS8xMF8h3YWMQGgGEy8SBf1PQ==", - "dev": true, - "requires": { - "@types/bn.js": "^5.1.0", - "@types/node": "^12.12.6", - "bignumber.js": "^9.0.0", - "web3-core-helpers": "1.8.2", - "web3-core-method": "1.8.2", - "web3-core-requestmanager": "1.8.2", - "web3-utils": "1.8.2" - }, - "dependencies": { - "bignumber.js": { - "version": "9.1.1", - "resolved": "https://registry.npmjs.org/bignumber.js/-/bignumber.js-9.1.1.tgz", - "integrity": "sha512-pHm4LsMJ6lzgNGVfZHjMoO8sdoRhOzOH4MLmY65Jg70bpxCKu5iOHNJyfF6OyvYw7t8Fpf35RuzUyqnQsj8Vig==", - "dev": true - } - } - }, - "web3-core-method": { - "version": "1.8.2", - "resolved": "https://registry.npmjs.org/web3-core-method/-/web3-core-method-1.8.2.tgz", - "integrity": "sha512-1qnr5mw5wVyULzLOrk4B+ryO3gfGjGd/fx8NR+J2xCGLf1e6OSjxT9vbfuQ3fErk/NjSTWWreieYWLMhaogcRA==", - "dev": true, - "requires": { - "@ethersproject/transactions": "^5.6.2", - "web3-core-helpers": "1.8.2", - "web3-core-promievent": "1.8.2", - "web3-core-subscriptions": "1.8.2", - "web3-utils": "1.8.2" - } - }, - "web3-core-requestmanager": { - "version": "1.8.2", - "resolved": "https://registry.npmjs.org/web3-core-requestmanager/-/web3-core-requestmanager-1.8.2.tgz", - "integrity": "sha512-p1d090RYs5Mu7DK1yyc3GCBVZB/03rBtFhYFoS2EruGzOWs/5Q0grgtpwS/DScdRAm8wB8mYEBhY/RKJWF6B2g==", - "dev": true, - "requires": { - "util": "^0.12.5", - "web3-core-helpers": "1.8.2", - "web3-providers-http": "1.8.2", - "web3-providers-ipc": "1.8.2", - "web3-providers-ws": "1.8.2" - } - }, - "web3-core-subscriptions": { - "version": "1.8.2", - "resolved": "https://registry.npmjs.org/web3-core-subscriptions/-/web3-core-subscriptions-1.8.2.tgz", - "integrity": "sha512-vXQogHDmAIQcKpXvGiMddBUeP9lnKgYF64+yQJhPNE5PnWr1sAibXuIPV7mIPihpFr/n/DORRj6Wh1pUv9zaTw==", - "dev": true, - "requires": { - "eventemitter3": "4.0.4", - "web3-core-helpers": "1.8.2" - } - }, - "web3-eth": { - "version": "1.8.2", - "resolved": "https://registry.npmjs.org/web3-eth/-/web3-eth-1.8.2.tgz", - "integrity": "sha512-JoTiWWc4F4TInpbvDUGb0WgDYJsFhuIjJlinc5ByjWD88Gvh+GKLsRjjFdbqe5YtwIGT4NymwoC5LQd1K6u/QQ==", - "dev": true, - "requires": { - "web3-core": "1.8.2", - "web3-core-helpers": "1.8.2", - "web3-core-method": "1.8.2", - "web3-core-subscriptions": "1.8.2", - "web3-eth-abi": "1.8.2", - "web3-eth-accounts": "1.8.2", - "web3-eth-contract": "1.8.2", - "web3-eth-ens": "1.8.2", - "web3-eth-iban": "1.8.2", - "web3-eth-personal": "1.8.2", - "web3-net": "1.8.2", - "web3-utils": "1.8.2" - } - }, - "web3-eth-accounts": { - "version": "1.8.2", - "resolved": "https://registry.npmjs.org/web3-eth-accounts/-/web3-eth-accounts-1.8.2.tgz", - "integrity": "sha512-c367Ij63VCz9YdyjiHHWLFtN85l6QghgwMQH2B1eM/p9Y5lTlTX7t/Eg/8+f1yoIStXbk2w/PYM2lk+IkbqdLA==", - "dev": true, - "requires": { - "@ethereumjs/common": "2.5.0", - "@ethereumjs/tx": "3.3.2", - "eth-lib": "0.2.8", - "ethereumjs-util": "^7.1.5", - "scrypt-js": "^3.0.1", - "uuid": "^9.0.0", - "web3-core": "1.8.2", - "web3-core-helpers": "1.8.2", - "web3-core-method": "1.8.2", - "web3-utils": "1.8.2" - }, - "dependencies": { - "scrypt-js": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/scrypt-js/-/scrypt-js-3.0.1.tgz", - "integrity": "sha512-cdwTTnqPu0Hyvf5in5asVdZocVDTNRmR7XEcJuIzMjJeSHybHl7vpB66AzwTaIg6CLSbtjcxc8fqcySfnTkccA==", - "dev": true - }, - "uuid": { - "version": "9.0.0", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.0.tgz", - "integrity": "sha512-MXcSTerfPa4uqyzStbRoTgt5XIe3x5+42+q1sDuy3R5MDk66URdLMOZe5aPX/SQd+kuYAh0FdP/pO28IkQyTeg==", - "dev": true - } - } - }, - "web3-eth-contract": { - "version": "1.8.2", - "resolved": "https://registry.npmjs.org/web3-eth-contract/-/web3-eth-contract-1.8.2.tgz", - "integrity": "sha512-ID5A25tHTSBNwOPjiXSVzxruz006ULRIDbzWTYIFTp7NJ7vXu/kynKK2ag/ObuTqBpMbobP8nXcA9b5EDkIdQA==", - "dev": true, - "requires": { - "@types/bn.js": "^5.1.0", - "web3-core": "1.8.2", - "web3-core-helpers": "1.8.2", - "web3-core-method": "1.8.2", - "web3-core-promievent": "1.8.2", - "web3-core-subscriptions": "1.8.2", - "web3-eth-abi": "1.8.2", - "web3-utils": "1.8.2" - } - }, - "web3-eth-ens": { - "version": "1.8.2", - "resolved": "https://registry.npmjs.org/web3-eth-ens/-/web3-eth-ens-1.8.2.tgz", - "integrity": "sha512-PWph7C/CnqdWuu1+SH4U4zdrK4t2HNt0I4XzPYFdv9ugE8EuojselioPQXsVGvjql+Nt3jDLvQvggPqlMbvwRw==", - "dev": true, - "requires": { - "content-hash": "^2.5.2", - "eth-ens-namehash": "2.0.8", - "web3-core": "1.8.2", - "web3-core-helpers": "1.8.2", - "web3-core-promievent": "1.8.2", - "web3-eth-abi": "1.8.2", - "web3-eth-contract": "1.8.2", - "web3-utils": "1.8.2" - } - }, - "web3-eth-personal": { - "version": "1.8.2", - "resolved": "https://registry.npmjs.org/web3-eth-personal/-/web3-eth-personal-1.8.2.tgz", - "integrity": "sha512-Vg4HfwCr7doiUF/RC+Jz0wT4+cYaXcOWMAW2AHIjHX6Z7Xwa8nrURIeQgeEE62qcEHAzajyAdB1u6bJyTfuCXw==", - "dev": true, - "requires": { - "@types/node": "^12.12.6", - "web3-core": "1.8.2", - "web3-core-helpers": "1.8.2", - "web3-core-method": "1.8.2", - "web3-net": "1.8.2", - "web3-utils": "1.8.2" - } - }, - "web3-net": { - "version": "1.8.2", - "resolved": "https://registry.npmjs.org/web3-net/-/web3-net-1.8.2.tgz", - "integrity": "sha512-1itkDMGmbgb83Dg9nporFes9/fxsU7smJ3oRXlFkg4ZHn8YJyP1MSQFPJWWwSc+GrcCFt4O5IrUTvEkHqE3xag==", - "dev": true, - "requires": { - "web3-core": "1.8.2", - "web3-core-method": "1.8.2", - "web3-utils": "1.8.2" - } - }, - "web3-providers-http": { - "version": "1.8.2", - "resolved": "https://registry.npmjs.org/web3-providers-http/-/web3-providers-http-1.8.2.tgz", - "integrity": "sha512-2xY94IIEQd16+b+vIBF4IC1p7GVaz9q4EUFscvMUjtEq4ru4Atdzjs9GP+jmcoo49p70II0UV3bqQcz0TQfVyQ==", - "dev": true, - "requires": { - "abortcontroller-polyfill": "^1.7.3", - "cross-fetch": "^3.1.4", - "es6-promise": "^4.2.8", - "web3-core-helpers": "1.8.2" - } - }, - "web3-providers-ipc": { - "version": "1.8.2", - "resolved": "https://registry.npmjs.org/web3-providers-ipc/-/web3-providers-ipc-1.8.2.tgz", - "integrity": "sha512-p6fqKVGFg+WiXGHWnB1hu43PbvPkDHTz4RgoEzbXugv5rtv5zfYLqm8Ba6lrJOS5ks9kGKR21a0y3NzE3u7V4w==", - "dev": true, - "requires": { - "oboe": "2.1.5", - "web3-core-helpers": "1.8.2" - } - }, - "web3-providers-ws": { - "version": "1.8.2", - "resolved": "https://registry.npmjs.org/web3-providers-ws/-/web3-providers-ws-1.8.2.tgz", - "integrity": "sha512-3s/4K+wHgbiN+Zrp9YjMq2eqAF6QGABw7wFftPdx+m5hWImV27/MoIx57c6HffNRqZXmCHnfWWFCNHHsi7wXnA==", - "dev": true, - "requires": { - "eventemitter3": "4.0.4", - "web3-core-helpers": "1.8.2", - "websocket": "^1.0.32" - } - }, - "web3-shh": { - "version": "1.8.2", - "resolved": "https://registry.npmjs.org/web3-shh/-/web3-shh-1.8.2.tgz", - "integrity": "sha512-uZ+3MAoNcaJsXXNCDnizKJ5viBNeHOFYsCbFhV755Uu52FswzTOw6DtE7yK9nYXMtIhiSgi7nwl1RYzP8pystw==", - "dev": true, - "requires": { - "web3-core": "1.8.2", - "web3-core-method": "1.8.2", - "web3-core-subscriptions": "1.8.2", - "web3-net": "1.8.2" - } - }, - "web3-utils": { - "version": "1.8.2", - "resolved": "https://registry.npmjs.org/web3-utils/-/web3-utils-1.8.2.tgz", - "integrity": "sha512-v7j6xhfLQfY7xQDrUP0BKbaNrmZ2/+egbqP9q3KYmOiPpnvAfol+32slgL0WX/5n8VPvKCK5EZ1HGrAVICSToA==", - "dev": true, - "requires": { - "bn.js": "^5.2.1", - "ethereum-bloom-filters": "^1.0.6", - "ethereumjs-util": "^7.1.0", - "ethjs-unit": "0.1.6", - "number-to-bn": "1.7.0", - "randombytes": "^2.1.0", - "utf8": "3.0.0" - } - } - } - }, - "@truffle/contract-schema": { - "version": "3.4.13", - "resolved": "https://registry.npmjs.org/@truffle/contract-schema/-/contract-schema-3.4.13.tgz", - "integrity": "sha512-emG7upuryYFrsPDbHqeASPWXL824M1tinhQwSPG0phSoa3g+RX9fUNNN/VPmF3tSkXLWUMhRnb7ehxnaCuRbZg==", - "dev": true, - "requires": { - "ajv": "^6.10.0", - "debug": "^4.3.1" - } - }, - "@truffle/dashboard-message-bus-client": { - "version": "0.1.12", - "resolved": "https://registry.npmjs.org/@truffle/dashboard-message-bus-client/-/dashboard-message-bus-client-0.1.12.tgz", - "integrity": "sha512-pI9G0La9tTstb2J2wxUZIMx6H+ZF0XBlsGN3HBkffr4edT0oT12WMCK9GxmKE22Q5VnpXl7wGjatRSEx0C9qDQ==", - "optional": true, - "requires": { - "@truffle/dashboard-message-bus-common": "^0.1.7", - "@truffle/promise-tracker": "^0.1.7", - "axios": "1.5.0", - "debug": "^4.3.1", - "delay": "^5.0.0", - "isomorphic-ws": "^4.0.1", - "node-abort-controller": "^3.0.1", - "tiny-typed-emitter": "^2.1.0", - "ws": "^7.2.0" - }, - "dependencies": { - "axios": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/axios/-/axios-1.5.0.tgz", - "integrity": "sha512-D4DdjDo5CY50Qms0qGQTTw6Q44jl7zRwY7bthds06pUGfChBCTcQs+N743eFWGEd6pRTMd6A+I87aWyFV5wiZQ==", - "optional": true, - "requires": { - "follow-redirects": "^1.15.0", - "form-data": "^4.0.0", - "proxy-from-env": "^1.1.0" - } - }, - "form-data": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz", - "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==", - "optional": true, - "requires": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.8", - "mime-types": "^2.1.12" - } - }, - "ws": { - "version": "7.5.9", - "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.9.tgz", - "integrity": "sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q==", - "optional": true, - "requires": {} - } - } - }, - "@truffle/dashboard-message-bus-common": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/@truffle/dashboard-message-bus-common/-/dashboard-message-bus-common-0.1.7.tgz", - "integrity": "sha512-jN7q8LBmwQRldSzT/YJE33mnDLrp3EFFDuZyLwtQGInlfcRTXcr5yPY42jxr3Ln19dQe2Chx3I6dWtDByeKLIQ==", - "optional": true - }, - "@truffle/db": { - "version": "2.0.35", - "resolved": "https://registry.npmjs.org/@truffle/db/-/db-2.0.35.tgz", - "integrity": "sha512-PVlNvh7whkTtvI8S5DWTu5O0RqkFV5EmzljEauSjRi8wI1SGYOlRdHWFhH/nxmuCAbyg/JtvC/J0EaXzyssd7w==", - "optional": true, - "requires": { - "@graphql-tools/delegate": "^8.4.3", - "@graphql-tools/schema": "^8.3.1", - "@truffle/abi-utils": "^1.0.3", - "@truffle/code-utils": "^3.0.4", - "@truffle/config": "^1.3.61", - "abstract-leveldown": "^7.2.0", - "apollo-server": "^3.11.0", - "debug": "^4.3.1", - "fs-extra": "^9.1.0", - "graphql": "^15.3.0", - "graphql-tag": "^2.12.6", - "json-stable-stringify": "^1.0.1", - "pascal-case": "^2.0.1", - "pluralize": "^8.0.0", - "pouchdb": "7.3.0", - "pouchdb-adapter-memory": "^7.1.1", - "pouchdb-debug": "^7.1.1", - "pouchdb-find": "^7.0.0", - "web3-utils": "1.10.0" - }, - "dependencies": { - "@truffle/abi-utils": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/@truffle/abi-utils/-/abi-utils-1.0.3.tgz", - "integrity": "sha512-AWhs01HCShaVKjml7Z4AbVREr/u4oiWxCcoR7Cktm0mEvtT04pvnxW5xB/cI4znRkrbPdFQlFt67kgrAjesYkw==", - "optional": true, - "requires": { - "change-case": "3.0.2", - "fast-check": "3.1.1", - "web3-utils": "1.10.0" - } - }, - "abstract-leveldown": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/abstract-leveldown/-/abstract-leveldown-7.2.0.tgz", - "integrity": "sha512-DnhQwcFEaYsvYDnACLZhMmCWd3rkOeEvglpa4q5i/5Jlm3UIsWaxVzuXvDLFCSCWRO3yy2/+V/G7FusFgejnfQ==", - "optional": true, - "requires": { - "buffer": "^6.0.3", - "catering": "^2.0.0", - "is-buffer": "^2.0.5", - "level-concat-iterator": "^3.0.0", - "level-supports": "^2.0.1", - "queue-microtask": "^1.2.3" - } - }, - "fs-extra": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", - "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", - "optional": true, - "requires": { - "at-least-node": "^1.0.0", - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - } - }, - "level-concat-iterator": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/level-concat-iterator/-/level-concat-iterator-3.1.0.tgz", - "integrity": "sha512-BWRCMHBxbIqPxJ8vHOvKUsaO0v1sLYZtjN3K2iZJsRBYtp+ONsY6Jfi6hy9K3+zolgQRryhIn2NRZjZnWJ9NmQ==", - "optional": true, - "requires": { - "catering": "^2.1.0" - } - }, - "level-supports": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/level-supports/-/level-supports-2.1.0.tgz", - "integrity": "sha512-E486g1NCjW5cF78KGPrMDRBYzPuueMZ6VBXHT6gC7A8UYWGiM14fGgp+s/L1oFfDWSPV/+SFkYCmZ0SiESkRKA==", - "optional": true - } - } - }, - "@truffle/db-loader": { - "version": "0.2.35", - "resolved": "https://registry.npmjs.org/@truffle/db-loader/-/db-loader-0.2.35.tgz", - "integrity": "sha512-LMi7ADY1mjgLaJSCNOKg6amnxM3IIw3l/KtT6zVIK9rSZdzhTyRUjoK/cSAtjera1KnRwYaEip5p5lQpvGmivg==", - "requires": { - "@truffle/db": "^2.0.35" - } - }, - "@truffle/debug-utils": { - "version": "6.0.48", - "resolved": "https://registry.npmjs.org/@truffle/debug-utils/-/debug-utils-6.0.48.tgz", - "integrity": "sha512-HdK/7eH5EFrcTPeZVEgKaKkkzuZ4xsrH8yw+EoLEsScLsOEuQeKynY61NctjuU93voATWrYmV99Sfb/MRq2i2g==", - "dev": true, - "requires": { - "@truffle/codec": "^0.14.17", - "@trufflesuite/chromafi": "^3.0.0", - "bn.js": "^5.1.3", - "chalk": "^2.4.2", - "debug": "^4.3.1", - "highlightjs-solidity": "^2.0.6" - }, - "dependencies": { - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "requires": { - "color-convert": "^1.9.0" - } - }, - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - } - }, - "color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dev": true, - "requires": { - "color-name": "1.1.3" - } - }, - "color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", - "dev": true - }, - "escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", - "dev": true - }, - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", - "dev": true - }, - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - } - } - }, - "@truffle/debugger": { - "version": "12.1.4", - "resolved": "https://registry.npmjs.org/@truffle/debugger/-/debugger-12.1.4.tgz", - "integrity": "sha512-yAWvLIaIDpaSALdm/Sas09FPXx38MTZ+NTnI9QhrptpocHAeEFsWpm5JklrjeD7QD+oCSbJ/IS62xrLTS/4Pgg==", - "requires": { - "@ensdomains/ensjs": "^2.1.0", - "@truffle/abi-utils": "^1.0.3", - "@truffle/codec": "^0.17.3", - "@truffle/source-map-utils": "^1.3.119", - "bn.js": "^5.1.3", - "debug": "^4.3.1", - "json-pointer": "^0.6.1", - "json-stable-stringify": "^1.0.1", - "lodash": "^4.17.21", - "redux": "^3.7.2", - "redux-saga": "1.0.0", - "reselect-tree": "^1.3.7", - "semver": "^7.5.4", - "web3": "1.10.0", - "web3-eth-abi": "1.10.0" - }, - "dependencies": { - "@truffle/abi-utils": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/@truffle/abi-utils/-/abi-utils-1.0.3.tgz", - "integrity": "sha512-AWhs01HCShaVKjml7Z4AbVREr/u4oiWxCcoR7Cktm0mEvtT04pvnxW5xB/cI4znRkrbPdFQlFt67kgrAjesYkw==", - "requires": { - "change-case": "3.0.2", - "fast-check": "3.1.1", - "web3-utils": "1.10.0" - } - }, - "@truffle/codec": { - "version": "0.17.3", - "resolved": "https://registry.npmjs.org/@truffle/codec/-/codec-0.17.3.tgz", - "integrity": "sha512-Ko/+dsnntNyrJa57jUD9u4qx9nQby+H4GsUO6yjiCPSX0TQnEHK08XWqBSg0WdmCH2+h0y1nr2CXSx8gbZapxg==", - "requires": { - "@truffle/abi-utils": "^1.0.3", - "@truffle/compile-common": "^0.9.8", - "big.js": "^6.0.3", - "bn.js": "^5.1.3", - "cbor": "^5.2.0", - "debug": "^4.3.1", - "lodash": "^4.17.21", - "semver": "^7.5.4", - "utf8": "^3.0.0", - "web3-utils": "1.10.0" - } - }, - "web3-eth-abi": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/web3-eth-abi/-/web3-eth-abi-1.10.0.tgz", - "integrity": "sha512-cwS+qRBWpJ43aI9L3JS88QYPfFcSJJ3XapxOQ4j40v6mk7ATpA8CVK1vGTzpihNlOfMVRBkR95oAj7oL6aiDOg==", - "requires": { - "@ethersproject/abi": "^5.6.3", - "web3-utils": "1.10.0" - } - } - } - }, - "@truffle/error": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/@truffle/error/-/error-0.1.1.tgz", - "integrity": "sha512-sE7c9IHIGdbK4YayH4BC8i8qMjoAOeg6nUXUDZZp8wlU21/EMpaG+CLx+KqcIPyR+GSWIW3Dm0PXkr2nlggFDA==", - "dev": true - }, - "@truffle/events": { - "version": "0.1.25", - "resolved": "https://registry.npmjs.org/@truffle/events/-/events-0.1.25.tgz", - "integrity": "sha512-5elJxNXPVuXDMOoIcCVox0sz95ovRhRbte/H9ht18vyOvtualb4bTjwYyRoWw6Y7j0pom0tPI3OLZWqCdKQNdA==", - "optional": true, - "requires": { - "@truffle/dashboard-message-bus-client": "^0.1.12", - "@truffle/spinners": "^0.2.5", - "debug": "^4.3.1", - "emittery": "^0.4.1", - "web3-utils": "1.10.0" - } - }, - "@truffle/hdwallet": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/@truffle/hdwallet/-/hdwallet-0.1.4.tgz", - "integrity": "sha512-D3SN0iw3sMWUXjWAedP6RJtopo9qQXYi80inzbtcsoso4VhxFxCwFvCErCl4b27AEJ9pkAtgnxEFRaSKdMmi1Q==", - "requires": { - "ethereum-cryptography": "1.1.2", - "keccak": "3.0.2", - "secp256k1": "4.0.3" - } - }, - "@truffle/hdwallet-provider": { - "version": "2.1.15", - "resolved": "https://registry.npmjs.org/@truffle/hdwallet-provider/-/hdwallet-provider-2.1.15.tgz", - "integrity": "sha512-I5cSS+5LygA3WFzru9aC5+yDXVowEEbLCx0ckl/RqJ2/SCiYXkzYlR5/DjjDJuCtYhivhrn2RP9AheeFlRF+qw==", - "requires": { - "@ethereumjs/common": "^2.4.0", - "@ethereumjs/tx": "^3.3.0", - "@metamask/eth-sig-util": "4.0.1", - "@truffle/hdwallet": "^0.1.4", - "@types/ethereum-protocol": "^1.0.0", - "@types/web3": "1.0.20", - "@types/web3-provider-engine": "^14.0.0", - "ethereum-cryptography": "1.1.2", - "ethereum-protocol": "^1.0.1", - "ethereumjs-util": "^7.1.5", - "web3": "1.10.0", - "web3-provider-engine": "16.0.3" - }, - "dependencies": { - "@ethereumjs/common": { - "version": "2.6.5", - "resolved": "https://registry.npmjs.org/@ethereumjs/common/-/common-2.6.5.tgz", - "integrity": "sha512-lRyVQOeCDaIVtgfbowla32pzeDv2Obr8oR8Put5RdUBNRGr1VGPGQNGP6elWIpgK3YdpzqTOh4GyUGOureVeeA==", - "requires": { - "crc-32": "^1.2.0", - "ethereumjs-util": "^7.1.5" - } - }, - "@ethereumjs/tx": { - "version": "3.5.2", - "resolved": "https://registry.npmjs.org/@ethereumjs/tx/-/tx-3.5.2.tgz", - "integrity": "sha512-gQDNJWKrSDGu2w7w0PzVXVBNMzb7wwdDOmOqczmhNjqFxFuIbhVJDwiGEnxFNC2/b8ifcZzY7MLcluizohRzNw==", - "requires": { - "@ethereumjs/common": "^2.6.4", - "ethereumjs-util": "^7.1.5" - } - }, - "@types/web3": { - "version": "1.0.20", - "resolved": "https://registry.npmjs.org/@types/web3/-/web3-1.0.20.tgz", - "integrity": "sha512-KTDlFuYjzCUlBDGt35Ir5QRtyV9klF84MMKUsEJK10sTWga/71V+8VYLT7yysjuBjaOx2uFYtIWNGoz3yrNDlg==", - "requires": { - "@types/bn.js": "*", - "@types/underscore": "*" - } - } - } - }, - "@truffle/interface-adapter": { - "version": "0.5.37", - "resolved": "https://registry.npmjs.org/@truffle/interface-adapter/-/interface-adapter-0.5.37.tgz", - "integrity": "sha512-lPH9MDgU+7sNDlJSClwyOwPCfuOimqsCx0HfGkznL3mcFRymc1pukAR1k17zn7ErHqBwJjiKAZ6Ri72KkS+IWw==", - "devOptional": true, - "requires": { - "bn.js": "^5.1.3", - "ethers": "^4.0.32", - "web3": "1.10.0" - }, - "dependencies": { - "ethers": { - "version": "4.0.49", - "resolved": "https://registry.npmjs.org/ethers/-/ethers-4.0.49.tgz", - "integrity": "sha512-kPltTvWiyu+OktYy1IStSO16i2e7cS9D9OxZ81q2UUaiNPVrm/RTcbxamCXF9VUSKzJIdJV68EAIhTEVBalRWg==", - "devOptional": true, - "requires": { - "aes-js": "3.0.0", - "bn.js": "^4.11.9", - "elliptic": "6.5.4", - "hash.js": "1.1.3", - "js-sha3": "0.5.7", - "scrypt-js": "2.0.4", - "setimmediate": "1.0.4", - "uuid": "2.0.1", - "xmlhttprequest": "1.8.0" - }, - "dependencies": { - "bn.js": { - "version": "4.12.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", - "devOptional": true - } - } - }, - "hash.js": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.3.tgz", - "integrity": "sha512-/UETyP0W22QILqS+6HowevwhEFJ3MBJnwTf75Qob9Wz9t0DPuisL8kW8YZMK62dHAKE1c1p+gY1TtOLY+USEHA==", - "devOptional": true, - "requires": { - "inherits": "^2.0.3", - "minimalistic-assert": "^1.0.0" - } - }, - "js-sha3": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/js-sha3/-/js-sha3-0.5.7.tgz", - "integrity": "sha512-GII20kjaPX0zJ8wzkTbNDYMY7msuZcTWk8S5UOh6806Jq/wz1J8/bnr8uGU0DAUmYDjj2Mr4X1cW8v/GLYnR+g==", - "devOptional": true - }, - "scrypt-js": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/scrypt-js/-/scrypt-js-2.0.4.tgz", - "integrity": "sha512-4KsaGcPnuhtCZQCxFxN3GVYIhKFPTdLd8PLC552XwbMndtD0cjRFAhDuuydXQ0h08ZfPgzqe6EKHozpuH74iDw==", - "devOptional": true - }, - "setimmediate": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.4.tgz", - "integrity": "sha512-/TjEmXQVEzdod/FFskf3o7oOAsGhHf2j1dZqRFbDzq4F3mvvxflIIi4Hd3bLQE9y/CpwqfSQam5JakI/mi3Pog==", - "devOptional": true - }, - "uuid": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-2.0.1.tgz", - "integrity": "sha512-nWg9+Oa3qD2CQzHIP4qKUqwNfzKn8P0LtFhotaCTFchsV7ZfDhAybeip/HZVeMIpZi9JgY1E3nUlwaCmZT1sEg==", - "devOptional": true - } - } - }, - "@truffle/promise-tracker": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/@truffle/promise-tracker/-/promise-tracker-0.1.7.tgz", - "integrity": "sha512-NiPXNJvdei8MRZRUjEZoL0Y7TPDR1TaeCfGUgB3md6Q7TBiqSKo2p5OT36JO106B2j57SLmXOiDn8fLb+u2sjA==", - "optional": true - }, - "@truffle/provider": { - "version": "0.3.13", - "resolved": "https://registry.npmjs.org/@truffle/provider/-/provider-0.3.13.tgz", - "integrity": "sha512-W9yZO0ZUwA0LhFvf7+NNNXVSCOd4x5pTbFiXUVURjyqp7f4YooLAqnlLPSpV+6qwIwThc+86CeLlOiFslYdDIA==", - "optional": true, - "requires": { - "@truffle/error": "^0.2.2", - "@truffle/interface-adapter": "^0.5.37", - "debug": "^4.3.1", - "web3": "1.10.0" - }, - "dependencies": { - "@truffle/error": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/@truffle/error/-/error-0.2.2.tgz", - "integrity": "sha512-TqbzJ0O8DHh34cu8gDujnYl4dUl6o2DE4PR6iokbybvnIm/L2xl6+Gv1VC+YJS45xfH83Yo3/Zyg/9Oq8/xZWg==", - "optional": true - } - } - }, - "@truffle/source-map-utils": { - "version": "1.3.119", - "resolved": "https://registry.npmjs.org/@truffle/source-map-utils/-/source-map-utils-1.3.119.tgz", - "integrity": "sha512-TFYi3XvanY8WZBOfBwDHQe9HfZUXJ2ejnmFNjsq1//sbM4fUNWjeNshGqkWGxfKPh3OAzXgD4iTnPG3YeXM8YQ==", - "requires": { - "@truffle/code-utils": "^3.0.4", - "@truffle/codec": "^0.17.3", - "debug": "^4.3.1", - "json-pointer": "^0.6.1", - "node-interval-tree": "^1.3.3", - "web3-utils": "1.10.0" - }, - "dependencies": { - "@truffle/abi-utils": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/@truffle/abi-utils/-/abi-utils-1.0.3.tgz", - "integrity": "sha512-AWhs01HCShaVKjml7Z4AbVREr/u4oiWxCcoR7Cktm0mEvtT04pvnxW5xB/cI4znRkrbPdFQlFt67kgrAjesYkw==", - "requires": { - "change-case": "3.0.2", - "fast-check": "3.1.1", - "web3-utils": "1.10.0" - } - }, - "@truffle/codec": { - "version": "0.17.3", - "resolved": "https://registry.npmjs.org/@truffle/codec/-/codec-0.17.3.tgz", - "integrity": "sha512-Ko/+dsnntNyrJa57jUD9u4qx9nQby+H4GsUO6yjiCPSX0TQnEHK08XWqBSg0WdmCH2+h0y1nr2CXSx8gbZapxg==", - "requires": { - "@truffle/abi-utils": "^1.0.3", - "@truffle/compile-common": "^0.9.8", - "big.js": "^6.0.3", - "bn.js": "^5.1.3", - "cbor": "^5.2.0", - "debug": "^4.3.1", - "lodash": "^4.17.21", - "semver": "^7.5.4", - "utf8": "^3.0.0", - "web3-utils": "1.10.0" - } - } - } - }, - "@truffle/spinners": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/@truffle/spinners/-/spinners-0.2.5.tgz", - "integrity": "sha512-emYyLEuoY62MQV/RNjyVIuTPEjMyIA0WiYMG2N3yfh8OSjD/TC0HRc2oyDWtVkNNox/5D2tH2m5fFB8HOt80FQ==", - "optional": true, - "requires": { - "@trufflesuite/spinnies": "^0.1.1" - } - }, - "@trufflesuite/bigint-buffer": { - "version": "1.1.9", - "resolved": "https://registry.npmjs.org/@trufflesuite/bigint-buffer/-/bigint-buffer-1.1.9.tgz", - "integrity": "sha512-bdM5cEGCOhDSwminryHJbRmXc1x7dPKg6Pqns3qyTwFlxsqUgxE29lsERS3PlIW1HTjoIGMUqsk1zQQwST1Yxw==", - "dev": true, - "optional": true, - "requires": { - "node-gyp-build": "4.3.0" - }, - "dependencies": { - "node-gyp-build": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.3.0.tgz", - "integrity": "sha512-iWjXZvmboq0ja1pUGULQBexmxq8CV4xBhX7VDOTbL7ZR4FOowwY/VOtRxBN/yKxmdGoIp4j5ysNT4u3S2pDQ3Q==", - "dev": true, - "optional": true - } - } - }, - "@trufflesuite/chromafi": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@trufflesuite/chromafi/-/chromafi-3.0.0.tgz", - "integrity": "sha512-oqWcOqn8nT1bwlPPfidfzS55vqcIDdpfzo3HbU9EnUmcSTX+I8z0UyUFI3tZQjByVJulbzxHxUGS3ZJPwK/GPQ==", - "dev": true, - "requires": { - "camelcase": "^4.1.0", - "chalk": "^2.3.2", - "cheerio": "^1.0.0-rc.2", - "detect-indent": "^5.0.0", - "highlight.js": "^10.4.1", - "lodash.merge": "^4.6.2", - "strip-ansi": "^4.0.0", - "strip-indent": "^2.0.0" - }, - "dependencies": { - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "requires": { - "color-convert": "^1.9.0" - } - }, - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - } - }, - "color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dev": true, - "requires": { - "color-name": "1.1.3" - } - }, - "color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", - "dev": true - }, - "escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", - "dev": true - }, - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", - "dev": true - }, - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - } - } - }, - "@trufflesuite/spinnies": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/@trufflesuite/spinnies/-/spinnies-0.1.1.tgz", - "integrity": "sha512-jltEtmFJj6xmQqr85gP8OqBHCEiId+zw+uAsb3DyLLRD17O6sySW6Afa2Z/jpzSafj+32ssDfLJ+c0of1NLqcA==", - "optional": true, - "requires": { - "chalk": "^4.1.2", - "cli-cursor": "^3.1.0", - "strip-ansi": "^6.0.0" - }, - "dependencies": { - "ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "optional": true - }, - "strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "optional": true, - "requires": { - "ansi-regex": "^5.0.1" - } - } - } - }, - "@typechain/ethers-v5": { - "version": "10.2.0", - "resolved": "https://registry.npmjs.org/@typechain/ethers-v5/-/ethers-v5-10.2.0.tgz", - "integrity": "sha512-ikaq0N/w9fABM+G01OFmU3U3dNnyRwEahkdvi9mqy1a3XwKiPZaF/lu54OcNaEWnpvEYyhhS0N7buCtLQqC92w==", - "dev": true, - "requires": { - "lodash": "^4.17.15", - "ts-essentials": "^7.0.1" - } - }, - "@types/abstract-leveldown": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@types/abstract-leveldown/-/abstract-leveldown-7.2.0.tgz", - "integrity": "sha512-q5veSX6zjUy/DlDhR4Y4cU0k2Ar+DT2LUraP00T19WLmTO6Se1djepCCaqU6nQrwcJ5Hyo/CWqxTzrrFg8eqbQ==" - }, - "@types/accepts": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/@types/accepts/-/accepts-1.3.5.tgz", - "integrity": "sha512-jOdnI/3qTpHABjM5cx1Hc0sKsPoYCp+DP/GJRGtDlPd7fiV9oXGGIcjW/ZOxLIvjGz8MA+uMZI9metHlgqbgwQ==", - "optional": true, - "requires": { - "@types/node": "*" - } - }, - "@types/bignumber.js": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/@types/bignumber.js/-/bignumber.js-5.0.0.tgz", - "integrity": "sha512-0DH7aPGCClywOFaxxjE6UwpN2kQYe9LwuDQMv+zYA97j5GkOMo8e66LYT+a8JYU7jfmUFRZLa9KycxHDsKXJCA==", - "dev": true, - "requires": { - "bignumber.js": "*" - } - }, - "@types/bn.js": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/@types/bn.js/-/bn.js-5.1.1.tgz", - "integrity": "sha512-qNrYbZqMx0uJAfKnKclPh+dTwK33KfLHYqtyODwd5HnXOjnkhc4qgn3BrK6RWyGZm5+sIFE7Q7Vz6QQtJB7w7g==", - "requires": { - "@types/node": "*" - } - }, - "@types/body-parser": { - "version": "1.19.2", - "resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.2.tgz", - "integrity": "sha512-ALYone6pm6QmwZoAgeyNksccT9Q4AWZQ6PvfwR37GT6r6FWUPguq6sUmNGSMV2Wr761oQoBxwGGa6DR5o1DC9g==", - "requires": { - "@types/connect": "*", - "@types/node": "*" - } - }, - "@types/cacheable-request": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/@types/cacheable-request/-/cacheable-request-6.0.3.tgz", - "integrity": "sha512-IQ3EbTzGxIigb1I3qPZc1rWJnH0BmSKv5QYTalEwweFvyBDLSAe24zP0le/hyi7ecGfZVlIVAg4BZqb8WBwKqw==", - "requires": { - "@types/http-cache-semantics": "*", - "@types/keyv": "^3.1.4", - "@types/node": "*", - "@types/responselike": "^1.0.0" - } - }, - "@types/chai": { - "version": "4.3.3", - "resolved": "https://registry.npmjs.org/@types/chai/-/chai-4.3.3.tgz", - "integrity": "sha512-hC7OMnszpxhZPduX+m+nrx+uFoLkWOMiR4oa/AZF3MuSETYTZmFfJAHqZEM8MVlvfG7BEUcgvtwoCTxBp6hm3g==" - }, - "@types/chai-as-promised": { - "version": "7.1.5", - "resolved": "https://registry.npmjs.org/@types/chai-as-promised/-/chai-as-promised-7.1.5.tgz", - "integrity": "sha512-jStwss93SITGBwt/niYrkf2C+/1KTeZCZl1LaeezTlqppAKeoQC7jxyqYuP72sxBGKCIbw7oHgbYssIRzT5FCQ==", - "peer": true, - "requires": { - "@types/chai": "*" - } - }, - "@types/concat-stream": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/@types/concat-stream/-/concat-stream-1.6.1.tgz", - "integrity": "sha512-eHE4cQPoj6ngxBZMvVf6Hw7Mh4jMW4U9lpGmS5GBPB9RYxlFg+CHaVN7ErNY4W9XfLIEn20b4VDYaIrbq0q4uA==", - "requires": { - "@types/node": "*" - } - }, - "@types/connect": { - "version": "3.4.35", - "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.35.tgz", - "integrity": "sha512-cdeYyv4KWoEgpBISTxWvqYsVy444DOqehiF3fM3ne10AmJ62RSyNkUnxMJXHQWRQQX2eR94m5y1IZyDwBjV9FQ==", - "requires": { - "@types/node": "*" - } - }, - "@types/cors": { - "version": "2.8.12", - "resolved": "https://registry.npmjs.org/@types/cors/-/cors-2.8.12.tgz", - "integrity": "sha512-vt+kDhq/M2ayberEtJcIN/hxXy1Pk+59g2FV/ZQceeaTyCtCucjL2Q7FXlFjtWn4n15KCr1NE2lNNFhp0lEThw==", - "optional": true - }, - "@types/ethereum-protocol": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@types/ethereum-protocol/-/ethereum-protocol-1.0.2.tgz", - "integrity": "sha512-Ri/hwt4UckZlF7eqhhAQcXsNvcgQmSJOKZteLco1/5NsRcneW/cJuQcrQNILN2Ohs9WUQjeGW3ZRRNqkEVMzuQ==", - "requires": { - "bignumber.js": "7.2.1" - }, - "dependencies": { - "bignumber.js": { - "version": "7.2.1", - "resolved": "https://registry.npmjs.org/bignumber.js/-/bignumber.js-7.2.1.tgz", - "integrity": "sha512-S4XzBk5sMB+Rcb/LNcpzXr57VRTxgAvaAEDAl1AwRx27j00hT84O6OkteE7u8UB3NuaaygCRrEpqox4uDOrbdQ==" - } - } - }, - "@types/express": { - "version": "4.17.17", - "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.17.tgz", - "integrity": "sha512-Q4FmmuLGBG58btUnfS1c1r/NQdlp3DMfGDGig8WhfpA2YRUtEkxAjkZb0yvplJGYdF1fsQ81iMDcH24sSCNC/Q==", - "requires": { - "@types/body-parser": "*", - "@types/express-serve-static-core": "^4.17.33", - "@types/qs": "*", - "@types/serve-static": "*" - } - }, - "@types/express-serve-static-core": { - "version": "4.17.35", - "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.17.35.tgz", - "integrity": "sha512-wALWQwrgiB2AWTT91CB62b6Yt0sNHpznUXeZEcnPU3DRdlDIz74x8Qg1UUYKSVFi+va5vKOLYRBI1bRKiLLKIg==", - "requires": { - "@types/node": "*", - "@types/qs": "*", - "@types/range-parser": "*", - "@types/send": "*" - } - }, - "@types/form-data": { - "version": "0.0.33", - "resolved": "https://registry.npmjs.org/@types/form-data/-/form-data-0.0.33.tgz", - "integrity": "sha512-8BSvG1kGm83cyJITQMZSulnl6QV8jqAGreJsc5tPu1Jq0vTSOiY/k24Wx82JRpWwZSqrala6sd5rWi6aNXvqcw==", - "requires": { - "@types/node": "*" - } - }, - "@types/glob": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/@types/glob/-/glob-8.0.0.tgz", - "integrity": "sha512-l6NQsDDyQUVeoTynNpC9uRvCUint/gSUXQA2euwmTuWGvPY5LSDUu6tkCtJB2SvGQlJQzLaKqcGZP4//7EDveA==", - "requires": { - "@types/minimatch": "*", - "@types/node": "*" - } - }, - "@types/http-cache-semantics": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/@types/http-cache-semantics/-/http-cache-semantics-4.0.1.tgz", - "integrity": "sha512-SZs7ekbP8CN0txVG2xVRH6EgKmEm31BOxA07vkFaETzZz1xh+cbt8BcI0slpymvwhx5dlFnQG2rTlPVQn+iRPQ==" - }, - "@types/keyv": { - "version": "3.1.4", - "resolved": "https://registry.npmjs.org/@types/keyv/-/keyv-3.1.4.tgz", - "integrity": "sha512-BQ5aZNSCpj7D6K2ksrRCTmKRLEpnPvWDiLPfoGyhZ++8YtiK9d/3DBKPJgry359X/P1PfruyYwvnvwFjuEiEIg==", - "requires": { - "@types/node": "*" - } - }, - "@types/level-errors": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@types/level-errors/-/level-errors-3.0.0.tgz", - "integrity": "sha512-/lMtoq/Cf/2DVOm6zE6ORyOM+3ZVm/BvzEZVxUhf6bgh8ZHglXlBqxbxSlJeVp8FCbD3IVvk/VbsaNmDjrQvqQ==" - }, - "@types/levelup": { - "version": "4.3.3", - "resolved": "https://registry.npmjs.org/@types/levelup/-/levelup-4.3.3.tgz", - "integrity": "sha512-K+OTIjJcZHVlZQN1HmU64VtrC0jC3dXWQozuEIR9zVvltIk90zaGPM2AgT+fIkChpzHhFE3YnvFLCbLtzAmexA==", - "requires": { - "@types/abstract-leveldown": "*", - "@types/level-errors": "*", - "@types/node": "*" - } - }, - "@types/long": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/@types/long/-/long-4.0.2.tgz", - "integrity": "sha512-MqTGEo5bj5t157U6fA/BiDynNkn0YknVdh48CMPkTSpFTVmvao5UQmm7uEF6xBEo7qIMAlY/JSleYaE6VOdpaA==", - "optional": true - }, - "@types/lru-cache": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/@types/lru-cache/-/lru-cache-5.1.1.tgz", - "integrity": "sha512-ssE3Vlrys7sdIzs5LOxCzTVMsU7i9oa/IaW92wF32JFb3CVczqOkru2xspuKczHEbG3nvmPY7IFqVmGGHdNbYw==" - }, - "@types/mime": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/@types/mime/-/mime-3.0.1.tgz", - "integrity": "sha512-Y4XFY5VJAuw0FgAqPNd6NNoV44jbq9Bz2L7Rh/J6jLTiHBSBJa9fxqQIvkIld4GsoDOcCbvzOUAbLPsSKKg+uA==" - }, - "@types/minimatch": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-5.1.2.tgz", - "integrity": "sha512-K0VQKziLUWkVKiRVrx4a40iPaxTUefQmjtkQofBkYRcoaaL/8rhwDWww9qWbrgicNOgnpIsMxyNIUM4+n6dUIA==" - }, - "@types/mkdirp": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/@types/mkdirp/-/mkdirp-0.5.2.tgz", - "integrity": "sha512-U5icWpv7YnZYGsN4/cmh3WD2onMY0aJIiTE6+51TwJCttdHvtCYmkBNOobHlXwrJRL0nkH9jH4kD+1FAdMN4Tg==", - "dev": true, - "requires": { - "@types/node": "*" - } - }, - "@types/node": { - "version": "18.11.18", - "resolved": "https://registry.npmjs.org/@types/node/-/node-18.11.18.tgz", - "integrity": "sha512-DHQpWGjyQKSHj3ebjFI/wRKcqQcdR+MoFBygntYOZytCqNfkd2ZC4ARDJ2DQqhjH5p85Nnd3jhUJIXrszFX/JA==" - }, - "@types/node-fetch": { - "version": "2.6.3", - "resolved": "https://registry.npmjs.org/@types/node-fetch/-/node-fetch-2.6.3.tgz", - "integrity": "sha512-ETTL1mOEdq/sxUtgtOhKjyB2Irra4cjxksvcMUR5Zr4n+PxVhsCD9WS46oPbHL3et9Zde7CNRr+WUNlcHvsX+w==", - "dev": true, - "requires": { - "@types/node": "*", - "form-data": "^3.0.0" - } - }, - "@types/pbkdf2": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/@types/pbkdf2/-/pbkdf2-3.1.0.tgz", - "integrity": "sha512-Cf63Rv7jCQ0LaL8tNXmEyqTHuIJxRdlS5vMh1mj5voN4+QFhVZnlZruezqpWYDiJ8UTzhP0VmeLXCmBk66YrMQ==", - "requires": { - "@types/node": "*" - } - }, - "@types/prettier": { - "version": "2.7.2", - "resolved": "https://registry.npmjs.org/@types/prettier/-/prettier-2.7.2.tgz", - "integrity": "sha512-KufADq8uQqo1pYKVIYzfKbJfBAc0sOeXqGbFaSpv8MRmC/zXgowNZmFcbngndGk922QDmOASEXUZCaY48gs4cg==", - "dev": true - }, - "@types/qs": { - "version": "6.9.7", - "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.7.tgz", - "integrity": "sha512-FGa1F62FT09qcrueBA6qYTrJPVDzah9a+493+o2PCXsesWHIn27G98TsSMs3WPNbZIEj4+VJf6saSFpvD+3Zsw==" - }, - "@types/range-parser": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.4.tgz", - "integrity": "sha512-EEhsLsD6UsDM1yFhAvy0Cjr6VwmpMWqFBCb9w07wVugF7w9nfajxLuVmngTIpgS6svCnm6Vaw+MZhoDCKnOfsw==" - }, - "@types/readable-stream": { - "version": "2.3.15", - "resolved": "https://registry.npmjs.org/@types/readable-stream/-/readable-stream-2.3.15.tgz", - "integrity": "sha512-oM5JSKQCcICF1wvGgmecmHldZ48OZamtMxcGGVICOJA8o8cahXC1zEVAif8iwoc5j8etxFaRFnf095+CDsuoFQ==", - "requires": { - "@types/node": "*", - "safe-buffer": "~5.1.1" - }, - "dependencies": { - "safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" - } - } - }, - "@types/responselike": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@types/responselike/-/responselike-1.0.0.tgz", - "integrity": "sha512-85Y2BjiufFzaMIlvJDvTTB8Fxl2xfLo4HgmHzVBz08w4wDePCTjYw66PdrolO0kzli3yam/YCgRufyo1DdQVTA==", - "requires": { - "@types/node": "*" - } - }, - "@types/secp256k1": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/@types/secp256k1/-/secp256k1-4.0.3.tgz", - "integrity": "sha512-Da66lEIFeIz9ltsdMZcpQvmrmmoqrfju8pm1BH8WbYjZSwUgCwXLb9C+9XYogwBITnbsSaMdVPb2ekf7TV+03w==", - "requires": { - "@types/node": "*" - } - }, - "@types/send": { - "version": "0.17.1", - "resolved": "https://registry.npmjs.org/@types/send/-/send-0.17.1.tgz", - "integrity": "sha512-Cwo8LE/0rnvX7kIIa3QHCkcuF21c05Ayb0ZfxPiv0W8VRiZiNW/WuRupHKpqqGVGf7SUA44QSOUKaEd9lIrd/Q==", - "requires": { - "@types/mime": "^1", - "@types/node": "*" - }, - "dependencies": { - "@types/mime": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/@types/mime/-/mime-1.3.2.tgz", - "integrity": "sha512-YATxVxgRqNH6nHEIsvg6k2Boc1JHI9ZbH5iWFFv/MTkchz3b1ieGDa5T0a9RznNdI0KhVbdbWSN+KWWrQZRxTw==" - } - } - }, - "@types/serve-static": { - "version": "1.15.0", - "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.15.0.tgz", - "integrity": "sha512-z5xyF6uh8CbjAu9760KDKsH2FcDxZ2tFCsA4HIMWE6IkiYMXfVoa+4f9KX+FN0ZLsaMw1WNG2ETLA6N+/YA+cg==", - "requires": { - "@types/mime": "*", - "@types/node": "*" - } - }, - "@types/sinon": { - "version": "10.0.16", - "resolved": "https://registry.npmjs.org/@types/sinon/-/sinon-10.0.16.tgz", - "integrity": "sha512-j2Du5SYpXZjJVJtXBokASpPRj+e2z+VUhCPHmM6WMfe3dpHu6iVKJMU6AiBcMp/XTAYnEj6Wc1trJUWwZ0QaAQ==", - "dev": true, - "peer": true, - "requires": { - "@types/sinonjs__fake-timers": "*" - } - }, - "@types/sinon-chai": { - "version": "3.2.9", - "resolved": "https://registry.npmjs.org/@types/sinon-chai/-/sinon-chai-3.2.9.tgz", - "integrity": "sha512-/19t63pFYU0ikrdbXKBWj9PCdnKyTd0Qkz0X91Ta081cYsq90OxYdcWwK/dwEoDa6dtXgj2HJfmzgq+QZTHdmQ==", - "dev": true, - "peer": true, - "requires": { - "@types/chai": "*", - "@types/sinon": "*" - } - }, - "@types/sinonjs__fake-timers": { - "version": "8.1.2", - "resolved": "https://registry.npmjs.org/@types/sinonjs__fake-timers/-/sinonjs__fake-timers-8.1.2.tgz", - "integrity": "sha512-9GcLXF0/v3t80caGs5p2rRfkB+a8VBGLJZVih6CNFkx8IZ994wiKKLSRs9nuFwk1HevWs/1mnUmkApGrSGsShA==", - "dev": true, - "peer": true - }, - "@types/underscore": { - "version": "1.11.4", - "resolved": "https://registry.npmjs.org/@types/underscore/-/underscore-1.11.4.tgz", - "integrity": "sha512-uO4CD2ELOjw8tasUrAhvnn2W4A0ZECOvMjCivJr4gA9pGgjv+qxKWY9GLTMVEK8ej85BxQOocUyE7hImmSQYcg==" - }, - "@types/web3": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/@types/web3/-/web3-1.2.2.tgz", - "integrity": "sha512-eFiYJKggNrOl0nsD+9cMh2MLk4zVBfXfGnVeRFbpiZzBE20eet4KLA3fXcjSuHaBn0RnQzwLAGdgzgzdet4C0A==", - "requires": { - "web3": "*" - } - }, - "@types/web3-provider-engine": { - "version": "14.0.1", - "resolved": "https://registry.npmjs.org/@types/web3-provider-engine/-/web3-provider-engine-14.0.1.tgz", - "integrity": "sha512-SaAfLJY/40wKFDsNFwaNfwqFSL6kVhTx9JD18qM+Gaw1qdAXLYF/6E7TIqWEdoG4so6fki/zxURP5NsoCePYJw==", - "requires": { - "@types/ethereum-protocol": "*" - } - }, - "@types/ws": { - "version": "7.4.7", - "resolved": "https://registry.npmjs.org/@types/ws/-/ws-7.4.7.tgz", - "integrity": "sha512-JQbbmxZTZehdc2iszGKs5oC3NFnjeay7mtAWrdt7qNtAVK0g19muApzAy4bm9byz79xa2ZnO/BOBC2R8RC5Lww==", - "requires": { - "@types/node": "*" - } - }, - "@types/yauzl": { - "version": "2.10.0", - "resolved": "https://registry.npmjs.org/@types/yauzl/-/yauzl-2.10.0.tgz", - "integrity": "sha512-Cn6WYCm0tXv8p6k+A8PvbDG763EDpBoTzHdA+Q/MF6H3sapGjCm9NzoaJncJS9tUKSuCoDs9XHxYYsQDgxR6kw==", - "optional": true, - "requires": { - "@types/node": "*" - } - }, - "@uniswap/lib": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@uniswap/lib/-/lib-1.1.1.tgz", - "integrity": "sha512-2yK7sLpKIT91TiS5sewHtOa7YuM8IuBXVl4GZv2jZFys4D2sY7K5vZh6MqD25TPA95Od+0YzCVq6cTF2IKrOmg==" - }, - "@uniswap/sdk-core": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/@uniswap/sdk-core/-/sdk-core-3.1.0.tgz", - "integrity": "sha512-YRrp6vYAbYmi3uDXQGkvj2eT8BMpNnUdCFb8GifDG0Ei+ohIpC4RNAB+5/ru3zR2Byhx8VahGrSKuvdd6BVMyA==", - "requires": { - "@ethersproject/address": "^5.0.2", - "big.js": "^5.2.2", - "decimal.js-light": "^2.5.0", - "jsbi": "^3.1.4", - "tiny-invariant": "^1.1.0", - "toformat": "^2.0.0" - }, - "dependencies": { - "big.js": { - "version": "5.2.2", - "resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz", - "integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==" - } - } - }, - "@uniswap/swap-router-contracts": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/@uniswap/swap-router-contracts/-/swap-router-contracts-1.3.0.tgz", - "integrity": "sha512-iKvCuRkHXEe0EMjOf8HFUISTIhlxI57kKFllf3C3PUIE0HmwxrayyoflwAz5u/TRsFGYqJ9IjX2UgzLCsrNa5A==", - "requires": { - "@openzeppelin/contracts": "3.4.2-solc-0.7", - "@uniswap/v2-core": "1.0.1", - "@uniswap/v3-core": "1.0.0", - "@uniswap/v3-periphery": "1.4.1", - "dotenv": "^14.2.0", - "hardhat-watcher": "^2.1.1" - }, - "dependencies": { - "@openzeppelin/contracts": { - "version": "3.4.2-solc-0.7", - "resolved": "https://registry.npmjs.org/@openzeppelin/contracts/-/contracts-3.4.2-solc-0.7.tgz", - "integrity": "sha512-W6QmqgkADuFcTLzHL8vVoNBtkwjvQRpYIAom7KiUNoLKghyx3FgH0GBjt8NRvigV1ZmMOBllvE1By1C+bi8WpA==" - }, - "@uniswap/lib": { - "version": "4.0.1-alpha", - "resolved": "https://registry.npmjs.org/@uniswap/lib/-/lib-4.0.1-alpha.tgz", - "integrity": "sha512-f6UIliwBbRsgVLxIaBANF6w09tYqc6Y/qXdsrbEmXHyFA7ILiKrIwRFXe1yOg8M3cksgVsO9N7yuL2DdCGQKBA==" - }, - "@uniswap/v2-core": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@uniswap/v2-core/-/v2-core-1.0.1.tgz", - "integrity": "sha512-MtybtkUPSyysqLY2U210NBDeCHX+ltHt3oADGdjqoThZaFRDKwM6k1Nb3F0A3hk5hwuQvytFWhrWHOEq6nVJ8Q==" - }, - "@uniswap/v3-core": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@uniswap/v3-core/-/v3-core-1.0.0.tgz", - "integrity": "sha512-kSC4djMGKMHj7sLMYVnn61k9nu+lHjMIxgg9CDQT+s2QYLoA56GbSK9Oxr+qJXzzygbkrmuY6cwgP6cW2JXPFA==" - }, - "@uniswap/v3-periphery": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/@uniswap/v3-periphery/-/v3-periphery-1.4.1.tgz", - "integrity": "sha512-Ab0ZCKOQrQMKIcpBTezTsEhWfQjItd0TtkCG8mPhoQu+wC67nPaf4hYUhM6wGHeFUmDiYY5MpEQuokB0ENvoTg==", - "requires": { - "@openzeppelin/contracts": "3.4.2-solc-0.7", - "@uniswap/lib": "^4.0.1-alpha", - "@uniswap/v2-core": "1.0.1", - "@uniswap/v3-core": "1.0.0", - "base64-sol": "1.0.1", - "hardhat-watcher": "^2.1.1" - } - }, - "dotenv": { - "version": "14.3.2", - "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-14.3.2.tgz", - "integrity": "sha512-vwEppIphpFdvaMCaHfCEv9IgwcxMljMw2TnAQBB4VWPvzXQLTb82jwmdOKzlEVUL3gNFT4l4TPKO+Bn+sqcrVQ==" - } - } - }, - "@uniswap/v2-core": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@uniswap/v2-core/-/v2-core-1.0.0.tgz", - "integrity": "sha512-BJiXrBGnN8mti7saW49MXwxDBRFiWemGetE58q8zgfnPPzQKq55ADltEILqOt6VFZ22kVeVKbF8gVd8aY3l7pA==" - }, - "@uniswap/v2-periphery": { - "version": "1.1.0-beta.0", - "resolved": "https://registry.npmjs.org/@uniswap/v2-periphery/-/v2-periphery-1.1.0-beta.0.tgz", - "integrity": "sha512-6dkwAMKza8nzqYiXEr2D86dgW3TTavUvCR0w2Tu33bAbM8Ah43LKAzH7oKKPRT5VJQaMi1jtkGs1E8JPor1n5g==", - "requires": { - "@uniswap/lib": "1.1.1", - "@uniswap/v2-core": "1.0.0" - } - }, - "@uniswap/v3-core": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@uniswap/v3-core/-/v3-core-1.0.1.tgz", - "integrity": "sha512-7pVk4hEm00j9tc71Y9+ssYpO6ytkeI0y7WE9P6UcmNzhxPePwyAxImuhVsTqWK9YFvzgtvzJHi64pBl4jUzKMQ==" - }, - "@uniswap/v3-periphery": { - "version": "1.4.3", - "resolved": "https://registry.npmjs.org/@uniswap/v3-periphery/-/v3-periphery-1.4.3.tgz", - "integrity": "sha512-80c+wtVzl5JJT8UQskxVYYG3oZb4pkhY0zDe0ab/RX4+8f9+W5d8wI4BT0wLB0wFQTSnbW+QdBSpkHA/vRyGBA==", - "requires": { - "@openzeppelin/contracts": "3.4.2-solc-0.7", - "@uniswap/lib": "^4.0.1-alpha", - "@uniswap/v2-core": "1.0.1", - "@uniswap/v3-core": "1.0.0", - "base64-sol": "1.0.1" - }, - "dependencies": { - "@openzeppelin/contracts": { - "version": "3.4.2-solc-0.7", - "resolved": "https://registry.npmjs.org/@openzeppelin/contracts/-/contracts-3.4.2-solc-0.7.tgz", - "integrity": "sha512-W6QmqgkADuFcTLzHL8vVoNBtkwjvQRpYIAom7KiUNoLKghyx3FgH0GBjt8NRvigV1ZmMOBllvE1By1C+bi8WpA==" - }, - "@uniswap/lib": { - "version": "4.0.1-alpha", - "resolved": "https://registry.npmjs.org/@uniswap/lib/-/lib-4.0.1-alpha.tgz", - "integrity": "sha512-f6UIliwBbRsgVLxIaBANF6w09tYqc6Y/qXdsrbEmXHyFA7ILiKrIwRFXe1yOg8M3cksgVsO9N7yuL2DdCGQKBA==" - }, - "@uniswap/v2-core": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@uniswap/v2-core/-/v2-core-1.0.1.tgz", - "integrity": "sha512-MtybtkUPSyysqLY2U210NBDeCHX+ltHt3oADGdjqoThZaFRDKwM6k1Nb3F0A3hk5hwuQvytFWhrWHOEq6nVJ8Q==" - }, - "@uniswap/v3-core": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@uniswap/v3-core/-/v3-core-1.0.0.tgz", - "integrity": "sha512-kSC4djMGKMHj7sLMYVnn61k9nu+lHjMIxgg9CDQT+s2QYLoA56GbSK9Oxr+qJXzzygbkrmuY6cwgP6cW2JXPFA==" - } - } - }, - "@uniswap/v3-sdk": { - "version": "3.10.0", - "resolved": "https://registry.npmjs.org/@uniswap/v3-sdk/-/v3-sdk-3.10.0.tgz", - "integrity": "sha512-sbmSA1O+Ct960r66Ie/c1rOmVadpwRu8nQ79pGICv0pZJdnFIQ/SReG3F+iC2C2UNNjNP6aC2WDUggXrjyrgnA==", - "requires": { - "@ethersproject/abi": "^5.0.12", - "@ethersproject/solidity": "^5.0.9", - "@uniswap/sdk-core": "^4", - "@uniswap/swap-router-contracts": "^1.2.1", - "@uniswap/v3-periphery": "^1.1.1", - "@uniswap/v3-staker": "1.0.0", - "tiny-invariant": "^1.1.0", - "tiny-warning": "^1.0.3" - }, - "dependencies": { - "@uniswap/sdk-core": { - "version": "4.0.7", - "resolved": "https://registry.npmjs.org/@uniswap/sdk-core/-/sdk-core-4.0.7.tgz", - "integrity": "sha512-jscx7KUIWzQatcL5PHY6xy0gEL9IGQcL5h/obxzX9foP2KoNk9cq66Ia8I2Kvpa7zBcPOeW1hU0hJNBq6CzcIQ==", - "requires": { - "@ethersproject/address": "^5.0.2", - "big.js": "^5.2.2", - "decimal.js-light": "^2.5.0", - "jsbi": "^3.1.4", - "tiny-invariant": "^1.1.0", - "toformat": "^2.0.0" - } - }, - "big.js": { - "version": "5.2.2", - "resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz", - "integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==" - } - } - }, - "@uniswap/v3-staker": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@uniswap/v3-staker/-/v3-staker-1.0.0.tgz", - "integrity": "sha512-JV0Qc46Px5alvg6YWd+UIaGH9lDuYG/Js7ngxPit1SPaIP30AlVer1UYB7BRYeUVVxE+byUyIeN5jeQ7LLDjIw==", - "requires": { - "@openzeppelin/contracts": "3.4.1-solc-0.7-2", - "@uniswap/v3-core": "1.0.0", - "@uniswap/v3-periphery": "^1.0.1" - }, - "dependencies": { - "@openzeppelin/contracts": { - "version": "3.4.1-solc-0.7-2", - "resolved": "https://registry.npmjs.org/@openzeppelin/contracts/-/contracts-3.4.1-solc-0.7-2.tgz", - "integrity": "sha512-tAG9LWg8+M2CMu7hIsqHPaTyG4uDzjr6mhvH96LvOpLZZj6tgzTluBt+LsCf1/QaYrlis6pITvpIaIhE+iZB+Q==" - }, - "@uniswap/v3-core": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@uniswap/v3-core/-/v3-core-1.0.0.tgz", - "integrity": "sha512-kSC4djMGKMHj7sLMYVnn61k9nu+lHjMIxgg9CDQT+s2QYLoA56GbSK9Oxr+qJXzzygbkrmuY6cwgP6cW2JXPFA==" - } - } - }, - "@yarnpkg/lockfile": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@yarnpkg/lockfile/-/lockfile-1.1.0.tgz", - "integrity": "sha512-GpSwvyXOcOOlV70vbnzjj4fW5xW/FdUF6nQEt1ENy7m4ZCczi1+/buVUPAqmGfqznsORNFzUMjctTIp8a9tuCQ==" - }, - "abbrev": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", - "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==" - }, - "abort-controller": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/abort-controller/-/abort-controller-3.0.0.tgz", - "integrity": "sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==", - "optional": true, - "requires": { - "event-target-shim": "^5.0.0" - } - }, - "abortcontroller-polyfill": { - "version": "1.7.5", - "resolved": "https://registry.npmjs.org/abortcontroller-polyfill/-/abortcontroller-polyfill-1.7.5.tgz", - "integrity": "sha512-JMJ5soJWP18htbbxJjG7bG6yuI6pRhgJ0scHHTfkUjf6wjP912xZWvM+A4sJK3gqd9E8fcPbDnOefbA9Th/FIQ==" - }, - "abstract-level": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/abstract-level/-/abstract-level-1.0.3.tgz", - "integrity": "sha512-t6jv+xHy+VYwc4xqZMn2Pa9DjcdzvzZmQGRjTFc8spIbRGHgBrEKbPq+rYXc7CCo0lxgYvSgKVg9qZAhpVQSjA==", - "requires": { - "buffer": "^6.0.3", - "catering": "^2.1.0", - "is-buffer": "^2.0.5", - "level-supports": "^4.0.0", - "level-transcoder": "^1.0.1", - "module-error": "^1.0.1", - "queue-microtask": "^1.2.3" - } - }, - "abstract-leveldown": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/abstract-leveldown/-/abstract-leveldown-6.3.0.tgz", - "integrity": "sha512-TU5nlYgta8YrBMNpc9FwQzRbiXsj49gsALsXadbGHt9CROPzX5fB0rWDR5mtdpOOKa5XqRFpbj1QroPAoPzVjQ==", - "requires": { - "buffer": "^5.5.0", - "immediate": "^3.2.3", - "level-concat-iterator": "~2.0.0", - "level-supports": "~1.0.0", - "xtend": "~4.0.0" - }, - "dependencies": { - "buffer": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", - "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", - "requires": { - "base64-js": "^1.3.1", - "ieee754": "^1.1.13" - } - }, - "level-supports": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/level-supports/-/level-supports-1.0.1.tgz", - "integrity": "sha512-rXM7GYnW8gsl1vedTJIbzOrRv85c/2uCMpiiCzO2fndd06U/kUXEEU9evYn4zFggBOg36IsBW8LzqIpETwwQzg==", - "requires": { - "xtend": "^4.0.2" - } - } - } - }, - "accepts": { - "version": "1.3.8", - "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", - "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", - "requires": { - "mime-types": "~2.1.34", - "negotiator": "0.6.3" - } - }, - "adm-zip": { - "version": "0.4.16", - "resolved": "https://registry.npmjs.org/adm-zip/-/adm-zip-0.4.16.tgz", - "integrity": "sha512-TFi4HBKSGfIKsK5YCkKaaFG2m4PEDyViZmEwof3MTIgzimHLto6muaHVpbrljdIvIrFZzEq/p4nafOeLcYegrg==" - }, - "aes-js": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/aes-js/-/aes-js-3.0.0.tgz", - "integrity": "sha512-H7wUZRn8WpTq9jocdxQ2c8x2sKo9ZVmzfRE13GiNJXfp7NcKYEdvl3vspKjXox6RIG2VtaRe4JFvxG4rqp2Zuw==" - }, - "agent-base": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", - "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", - "requires": { - "debug": "4" - } - }, - "agentkeepalive": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/agentkeepalive/-/agentkeepalive-4.5.0.tgz", - "integrity": "sha512-5GG/5IbQQpC9FpkRGsSvZI5QYeSCzlJHdpBQntCsuTOxhKD8lqKhrleg2Yi7yvMIf82Ycmmqln9U8V9qwEiJew==", - "requires": { - "humanize-ms": "^1.2.1" - } - }, - "aggregate-error": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", - "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==", - "requires": { - "clean-stack": "^2.0.0", - "indent-string": "^4.0.0" - } - }, - "ajv": { - "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", - "requires": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - } - }, - "ajv-formats": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ajv-formats/-/ajv-formats-2.1.1.tgz", - "integrity": "sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==", - "optional": true, - "requires": { - "ajv": "^8.0.0" - }, - "dependencies": { - "ajv": { - "version": "8.12.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz", - "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==", - "optional": true, - "requires": { - "fast-deep-equal": "^3.1.1", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2", - "uri-js": "^4.2.2" - } - }, - "json-schema-traverse": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", - "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", - "optional": true - } - } - }, - "amazon-cognito-identity-js": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/amazon-cognito-identity-js/-/amazon-cognito-identity-js-6.2.0.tgz", - "integrity": "sha512-9Fxrp9+MtLdsJvqOwSaE3ll+pneICeuE3pwj2yDkiyGNWuHx97b8bVLR2bOgfDmDJnY0Hq8QoeXtwdM4aaXJjg==", - "dev": true, - "requires": { - "@aws-crypto/sha256-js": "1.2.2", - "buffer": "4.9.2", - "fast-base64-decode": "^1.0.0", - "isomorphic-unfetch": "^3.0.0", - "js-cookie": "^2.2.1" - }, - "dependencies": { - "buffer": { - "version": "4.9.2", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-4.9.2.tgz", - "integrity": "sha512-xq+q3SRMOxGivLhBNaUdC64hDTQwejJ+H0T/NB1XMtTVEwNTrfFF3gAxiyW0Bu/xWEGhjVKgUcMhCrUy2+uCWg==", - "dev": true, - "requires": { - "base64-js": "^1.0.2", - "ieee754": "^1.1.4", - "isarray": "^1.0.0" - } - } - } - }, - "ansi-colors": { - "version": "3.2.4", - "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-3.2.4.tgz", - "integrity": "sha512-hHUXGagefjN2iRrID63xckIvotOXOojhQKWIPUZ4mNUZ9nLZW+7FMNoE1lOkEhNWYsx/7ysGIuJYCiMAA9FnrA==", - "dev": true - }, - "ansi-escapes": { - "version": "4.3.2", - "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", - "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", - "requires": { - "type-fest": "^0.21.3" - } - }, - "ansi-regex": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.1.tgz", - "integrity": "sha512-+O9Jct8wf++lXxxFc4hc8LsjaSq0HFzzL7cVsw8pRDIPdjKD2mT4ytDZlLuSBZ4cLKZFXIrMGO7DbQCtMJJMKw==" - }, - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "requires": { - "color-convert": "^2.0.1" - } - }, - "antlr4ts": { - "version": "0.5.0-alpha.4", - "resolved": "https://registry.npmjs.org/antlr4ts/-/antlr4ts-0.5.0-alpha.4.tgz", - "integrity": "sha512-WPQDt1B74OfPv/IMS2ekXAKkTZIHl88uMetg6q3OTqgFxZ/dxDXI0EWLyZid/1Pe6hTftyg5N7gel5wNAGxXyQ==" - }, - "any-promise": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/any-promise/-/any-promise-1.3.0.tgz", - "integrity": "sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==" - }, - "anymatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz", - "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==", - "requires": { - "normalize-path": "^3.0.0", - "picomatch": "^2.0.4" - } - }, - "apollo-datasource": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/apollo-datasource/-/apollo-datasource-3.3.2.tgz", - "integrity": "sha512-L5TiS8E2Hn/Yz7SSnWIVbZw0ZfEIXZCa5VUiVxD9P53JvSrf4aStvsFDlGWPvpIdCR+aly2CfoB79B9/JjKFqg==", - "optional": true, - "requires": { - "@apollo/utils.keyvaluecache": "^1.0.1", - "apollo-server-env": "^4.2.1" - } - }, - "apollo-reporting-protobuf": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/apollo-reporting-protobuf/-/apollo-reporting-protobuf-3.4.0.tgz", - "integrity": "sha512-h0u3EbC/9RpihWOmcSsvTW2O6RXVaD/mPEjfrPkxRPTEPWqncsgOoRJw+wih4OqfH3PvTJvoEIf4LwKrUaqWog==", - "optional": true, - "requires": { - "@apollo/protobufjs": "1.2.6" - }, - "dependencies": { - "@apollo/protobufjs": { - "version": "1.2.6", - "resolved": "https://registry.npmjs.org/@apollo/protobufjs/-/protobufjs-1.2.6.tgz", - "integrity": "sha512-Wqo1oSHNUj/jxmsVp4iR3I480p6qdqHikn38lKrFhfzcDJ7lwd7Ck7cHRl4JE81tWNArl77xhnG/OkZhxKBYOw==", - "optional": true, - "requires": { - "@protobufjs/aspromise": "^1.1.2", - "@protobufjs/base64": "^1.1.2", - "@protobufjs/codegen": "^2.0.4", - "@protobufjs/eventemitter": "^1.1.0", - "@protobufjs/fetch": "^1.1.0", - "@protobufjs/float": "^1.0.2", - "@protobufjs/inquire": "^1.1.0", - "@protobufjs/path": "^1.1.2", - "@protobufjs/pool": "^1.1.0", - "@protobufjs/utf8": "^1.1.0", - "@types/long": "^4.0.0", - "@types/node": "^10.1.0", - "long": "^4.0.0" - } - }, - "@types/node": { - "version": "10.17.60", - "resolved": "https://registry.npmjs.org/@types/node/-/node-10.17.60.tgz", - "integrity": "sha512-F0KIgDJfy2nA3zMLmWGKxcH2ZVEtCZXHHdOQs2gSaQ27+lNeEfGxzkIw90aXswATX7AZ33tahPbzy6KAfUreVw==", - "optional": true - } - } - }, - "apollo-server": { - "version": "3.12.1", - "resolved": "https://registry.npmjs.org/apollo-server/-/apollo-server-3.12.1.tgz", - "integrity": "sha512-wgxx+J8KPTkhepi4qI9qY1xNoYzJfmvRKVUdFmFCZ3lyPO2j/+oOnAnyEVruAIQU5gquK10B0jdwVyvese9J/g==", - "optional": true, - "requires": { - "@types/express": "4.17.14", - "apollo-server-core": "^3.12.1", - "apollo-server-express": "^3.12.1", - "express": "^4.17.1" - }, - "dependencies": { - "@types/express": { - "version": "4.17.14", - "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.14.tgz", - "integrity": "sha512-TEbt+vaPFQ+xpxFLFssxUDXj5cWCxZJjIcB7Yg0k0GMHGtgtQgpvx/MUQUeAkNbA9AAGrwkAsoeItdTgS7FMyg==", - "optional": true, - "requires": { - "@types/body-parser": "*", - "@types/express-serve-static-core": "^4.17.18", - "@types/qs": "*", - "@types/serve-static": "*" - } - } - } - }, - "apollo-server-core": { - "version": "3.12.1", - "resolved": "https://registry.npmjs.org/apollo-server-core/-/apollo-server-core-3.12.1.tgz", - "integrity": "sha512-9SF5WAkkV0FZQ2HVUWI9Jada1U0jg7e8NCN9EklbtvaCeUlOLyXyM+KCWuZ7+dqHxjshbtcwylPHutt3uzoNkw==", - "optional": true, - "requires": { - "@apollo/utils.keyvaluecache": "^1.0.1", - "@apollo/utils.logger": "^1.0.0", - "@apollo/utils.usagereporting": "^1.0.0", - "@apollographql/apollo-tools": "^0.5.3", - "@apollographql/graphql-playground-html": "1.6.29", - "@graphql-tools/mock": "^8.1.2", - "@graphql-tools/schema": "^8.0.0", - "@josephg/resolvable": "^1.0.0", - "apollo-datasource": "^3.3.2", - "apollo-reporting-protobuf": "^3.4.0", - "apollo-server-env": "^4.2.1", - "apollo-server-errors": "^3.3.1", - "apollo-server-plugin-base": "^3.7.2", - "apollo-server-types": "^3.8.0", - "async-retry": "^1.2.1", - "fast-json-stable-stringify": "^2.1.0", - "graphql-tag": "^2.11.0", - "loglevel": "^1.6.8", - "lru-cache": "^6.0.0", - "node-abort-controller": "^3.0.1", - "sha.js": "^2.4.11", - "uuid": "^9.0.0", - "whatwg-mimetype": "^3.0.0" - }, - "dependencies": { - "lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "optional": true, - "requires": { - "yallist": "^4.0.0" - } - }, - "uuid": { - "version": "9.0.0", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.0.tgz", - "integrity": "sha512-MXcSTerfPa4uqyzStbRoTgt5XIe3x5+42+q1sDuy3R5MDk66URdLMOZe5aPX/SQd+kuYAh0FdP/pO28IkQyTeg==", - "optional": true - }, - "yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "optional": true - } - } - }, - "apollo-server-env": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/apollo-server-env/-/apollo-server-env-4.2.1.tgz", - "integrity": "sha512-vm/7c7ld+zFMxibzqZ7SSa5tBENc4B0uye9LTfjJwGoQFY5xsUPH5FpO5j0bMUDZ8YYNbrF9SNtzc5Cngcr90g==", - "optional": true, - "requires": { - "node-fetch": "^2.6.7" - } - }, - "apollo-server-errors": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/apollo-server-errors/-/apollo-server-errors-3.3.1.tgz", - "integrity": "sha512-xnZJ5QWs6FixHICXHxUfm+ZWqqxrNuPlQ+kj5m6RtEgIpekOPssH/SD9gf2B4HuWV0QozorrygwZnux8POvyPA==", - "optional": true, - "requires": {} - }, - "apollo-server-express": { - "version": "3.12.1", - "resolved": "https://registry.npmjs.org/apollo-server-express/-/apollo-server-express-3.12.1.tgz", - "integrity": "sha512-5A9efrhEXqDx08BnORWf0zPYCABENqur47VZZW8osQpSSnMINqzJiV5RMrzz8wIznecRRhEcz+BqLdiexqZdgg==", - "optional": true, - "requires": { - "@types/accepts": "^1.3.5", - "@types/body-parser": "1.19.2", - "@types/cors": "2.8.12", - "@types/express": "4.17.14", - "@types/express-serve-static-core": "4.17.31", - "accepts": "^1.3.5", - "apollo-server-core": "^3.12.1", - "apollo-server-types": "^3.8.0", - "body-parser": "^1.19.0", - "cors": "^2.8.5", - "parseurl": "^1.3.3" - }, - "dependencies": { - "@types/express": { - "version": "4.17.14", - "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.14.tgz", - "integrity": "sha512-TEbt+vaPFQ+xpxFLFssxUDXj5cWCxZJjIcB7Yg0k0GMHGtgtQgpvx/MUQUeAkNbA9AAGrwkAsoeItdTgS7FMyg==", - "optional": true, - "requires": { - "@types/body-parser": "*", - "@types/express-serve-static-core": "^4.17.18", - "@types/qs": "*", - "@types/serve-static": "*" - } - }, - "@types/express-serve-static-core": { - "version": "4.17.31", - "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.17.31.tgz", - "integrity": "sha512-DxMhY+NAsTwMMFHBTtJFNp5qiHKJ7TeqOo23zVEM9alT1Ml27Q3xcTH0xwxn7Q0BbMcVEJOs/7aQtUWupUQN3Q==", - "optional": true, - "requires": { - "@types/node": "*", - "@types/qs": "*", - "@types/range-parser": "*" - } - } - } - }, - "apollo-server-plugin-base": { - "version": "3.7.2", - "resolved": "https://registry.npmjs.org/apollo-server-plugin-base/-/apollo-server-plugin-base-3.7.2.tgz", - "integrity": "sha512-wE8dwGDvBOGehSsPTRZ8P/33Jan6/PmL0y0aN/1Z5a5GcbFhDaaJCjK5cav6npbbGL2DPKK0r6MPXi3k3N45aw==", - "optional": true, - "requires": { - "apollo-server-types": "^3.8.0" - } - }, - "apollo-server-types": { - "version": "3.8.0", - "resolved": "https://registry.npmjs.org/apollo-server-types/-/apollo-server-types-3.8.0.tgz", - "integrity": "sha512-ZI/8rTE4ww8BHktsVpb91Sdq7Cb71rdSkXELSwdSR0eXu600/sY+1UXhTWdiJvk+Eq5ljqoHLwLbY2+Clq2b9A==", - "optional": true, - "requires": { - "@apollo/utils.keyvaluecache": "^1.0.1", - "@apollo/utils.logger": "^1.0.0", - "apollo-reporting-protobuf": "^3.4.0", - "apollo-server-env": "^4.2.1" - } - }, - "app-module-path": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/app-module-path/-/app-module-path-2.2.0.tgz", - "integrity": "sha512-gkco+qxENJV+8vFcDiiFhuoSvRXb2a/QPqpSoWhVz829VNJfOTnELbBmPmNKFxf3xdNnw4DWCkzkDaavcX/1YQ==" - }, - "arg": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz", - "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==", - "optional": true, - "peer": true - }, - "argparse": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==" - }, - "argsarray": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/argsarray/-/argsarray-0.0.1.tgz", - "integrity": "sha512-u96dg2GcAKtpTrBdDoFIM7PjcBA+6rSP0OR94MOReNRyUECL6MtQt5XXmRr4qrftYaef9+l5hcpO5te7sML1Cg==", - "optional": true - }, - "array-back": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/array-back/-/array-back-3.1.0.tgz", - "integrity": "sha512-TkuxA4UCOvxuDK6NZYXCalszEzj+TLszyASooky+i742l9TqsOdYCMJJupxRic61hwquNtppB3hgcuq9SVSH1Q==", - "dev": true - }, - "array-flatten": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", - "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==" - }, - "array-uniq": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/array-uniq/-/array-uniq-1.0.3.tgz", - "integrity": "sha512-MNha4BWQ6JbwhFhj03YK552f7cb3AzoE8SzeljgChvL1dl3IcvggXVz1DilzySZkCja+CXuZbdW7yATchWn8/Q==" - }, - "array.prototype.reduce": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/array.prototype.reduce/-/array.prototype.reduce-1.0.4.tgz", - "integrity": "sha512-WnM+AjG/DvLRLo4DDl+r+SvCzYtD2Jd9oeBYMcEaI7t3fFrHY9M53/wdLcTvmZNQ70IU6Htj0emFkZ5TS+lrdw==", - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.19.2", - "es-array-method-boxes-properly": "^1.0.0", - "is-string": "^1.0.7" - } - }, - "asap": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", - "integrity": "sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==" - }, - "asn1": { - "version": "0.2.6", - "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.6.tgz", - "integrity": "sha512-ix/FxPn0MDjeyJ7i/yoHGFt/EX6LyNbxSEhPPXODPL+KB0VPk86UYfL0lMdy+KCnv+fmvIzySwaK5COwqVbWTQ==", - "requires": { - "safer-buffer": "~2.1.0" - } - }, - "asn1.js": { - "version": "5.4.1", - "resolved": "https://registry.npmjs.org/asn1.js/-/asn1.js-5.4.1.tgz", - "integrity": "sha512-+I//4cYPccV8LdmBLiX8CYvf9Sp3vQsrqu2QNXRcrbiWvcx/UdlFiqUJJzxRQxgsZmvhXhn4cSKeSmoFjVdupA==", - "requires": { - "bn.js": "^4.0.0", - "inherits": "^2.0.1", - "minimalistic-assert": "^1.0.0", - "safer-buffer": "^2.1.0" - }, - "dependencies": { - "bn.js": { - "version": "4.12.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==" - } - } - }, - "assert-plus": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", - "integrity": "sha512-NfJ4UzBCcQGLDlQq7nHxH+tv3kyZ0hHQqF5BO6J7tNJeP5do1llPr8dZ8zHonfhAu0PHAdMkSo+8o0wxg9lZWw==" - }, - "assertion-error": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-1.1.0.tgz", - "integrity": "sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==" - }, - "astral-regex": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz", - "integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==", - "dev": true - }, - "async-eventemitter": { - "version": "0.2.4", - "resolved": "https://registry.npmjs.org/async-eventemitter/-/async-eventemitter-0.2.4.tgz", - "integrity": "sha512-pd20BwL7Yt1zwDFy+8MX8F1+WCT8aQeKj0kQnTrH9WaeRETlRamVhD0JtRPmrV4GfOJ2F9CvdQkZeZhnh2TuHw==", - "requires": { - "async": "^2.4.0" - }, - "dependencies": { - "async": { - "version": "2.6.4", - "resolved": "https://registry.npmjs.org/async/-/async-2.6.4.tgz", - "integrity": "sha512-mzo5dfJYwAn29PeiJ0zvwTo04zj8HDJj0Mn8TD7sno7q12prdbnasKJHhkm2c1LgrhlJ0teaea8860oxi51mGA==", - "requires": { - "lodash": "^4.17.14" - } - } - } - }, - "async-limiter": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/async-limiter/-/async-limiter-1.0.1.tgz", - "integrity": "sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ==" - }, - "async-mutex": { - "version": "0.2.6", - "resolved": "https://registry.npmjs.org/async-mutex/-/async-mutex-0.2.6.tgz", - "integrity": "sha512-Hs4R+4SPgamu6rSGW8C7cV9gaWUKEHykfzCCvIRuaVv636Ju10ZdeUbvb4TBEW0INuq2DHZqXbK4Nd3yG4RaRw==", - "requires": { - "tslib": "^2.0.0" - } - }, - "async-retry": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/async-retry/-/async-retry-1.3.3.tgz", - "integrity": "sha512-wfr/jstw9xNi/0teMHrRW7dsz3Lt5ARhYNZ2ewpadnhaIp5mbALhOAP+EAdsC7t4Z6wqsDVv9+W6gm1Dk9mEyw==", - "devOptional": true, - "requires": { - "retry": "0.13.1" - } - }, - "asynckit": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", - "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==" - }, - "at-least-node": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/at-least-node/-/at-least-node-1.0.0.tgz", - "integrity": "sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==" - }, - "atomically": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/atomically/-/atomically-1.7.0.tgz", - "integrity": "sha512-Xcz9l0z7y9yQ9rdDaxlmaI4uJHf/T8g9hOEzJcsEqX2SjCj4J20uK7+ldkDHMbpJDK76wF7xEIgxc/vSlsfw5w==", - "optional": true - }, - "available-typed-arrays": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz", - "integrity": "sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==" - }, - "aws-sign2": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", - "integrity": "sha512-08kcGqnYf/YmjoRhfxyu+CLxBjUtHLXLXX/vUfx9l2LYzG3c1m61nrpyFUZI6zeS+Li/wWMMidD9KgrqtGq3mA==" - }, - "aws4": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.11.0.tgz", - "integrity": "sha512-xh1Rl34h6Fi1DC2WWKfxUTVqRsNnr6LsKz2+hfwDxQJWmrx8+c7ylaqBMcHfl1U1r2dsifOvKX3LQuLNZ+XSvA==" - }, - "axios": { - "version": "0.21.4", - "resolved": "https://registry.npmjs.org/axios/-/axios-0.21.4.tgz", - "integrity": "sha512-ut5vewkiu8jjGBdqpM44XxjuCjq9LAKeHVmoVfHVzy8eHgxxq8SbAVQNovDA8mVi05kP0Ea/n/UzcSHcTJQfNg==", - "dev": true, - "requires": { - "follow-redirects": "^1.14.0" - } - }, - "babel-plugin-polyfill-corejs2": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.3.3.tgz", - "integrity": "sha512-8hOdmFYFSZhqg2C/JgLUQ+t52o5nirNwaWM2B9LWteozwIvM14VSwdsCAUET10qT+kmySAlseadmfeeSWFCy+Q==", - "requires": { - "@babel/compat-data": "^7.17.7", - "@babel/helper-define-polyfill-provider": "^0.3.3", - "semver": "^6.1.1" - }, - "dependencies": { - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" - } - } - }, - "babel-plugin-polyfill-corejs3": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.6.0.tgz", - "integrity": "sha512-+eHqR6OPcBhJOGgsIar7xoAB1GcSwVUA3XjAd7HJNzOXT4wv6/H7KIdA/Nc60cvUlDbKApmqNvD1B1bzOt4nyA==", - "requires": { - "@babel/helper-define-polyfill-provider": "^0.3.3", - "core-js-compat": "^3.25.1" - } - }, - "babel-plugin-polyfill-regenerator": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.4.1.tgz", - "integrity": "sha512-NtQGmyQDXjQqQ+IzRkBVwEOz9lQ4zxAQZgoAYEtU9dJjnl1Oc98qnN7jcp+bE7O7aYzVpavXE3/VKXNzUbh7aw==", - "requires": { - "@babel/helper-define-polyfill-provider": "^0.3.3" - } - }, - "backoff": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/backoff/-/backoff-2.5.0.tgz", - "integrity": "sha512-wC5ihrnUXmR2douXmXLCe5O3zg3GKIyvRi/hi58a/XyRxVI+3/yM0PYueQOZXPXQ9pxBislYkw+sF9b7C/RuMA==", - "requires": { - "precond": "0.2" - } - }, - "balanced-match": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" - }, - "base-x": { - "version": "3.0.9", - "resolved": "https://registry.npmjs.org/base-x/-/base-x-3.0.9.tgz", - "integrity": "sha512-H7JU6iBHTal1gp56aKoaa//YUxEaAOUiydvrV/pILqIHXTtqxSkATOnDA2u+jZ/61sD+L/412+7kzXRtWukhpQ==", - "requires": { - "safe-buffer": "^5.0.1" - } - }, - "base64-js": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", - "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==" - }, - "base64-sol": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/base64-sol/-/base64-sol-1.0.1.tgz", - "integrity": "sha512-ld3cCNMeXt4uJXmLZBHFGMvVpK9KsLVEhPpFRXnvSVAqABKbuNZg/+dsq3NuM+wxFLb/UrVkz7m1ciWmkMfTbg==" - }, - "bcrypt-pbkdf": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", - "integrity": "sha512-qeFIXtP4MSoi6NLqO12WfqARWWuCKi2Rn/9hJLEmtB5yTNr9DqFWkJRCf2qShWzPeAMRnOgCrq0sg/KLv5ES9w==", - "requires": { - "tweetnacl": "^0.14.3" - }, - "dependencies": { - "tweetnacl": { - "version": "0.14.5", - "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", - "integrity": "sha512-KXXFFdAbFXY4geFIwoyNK+f5Z1b7swfXABfL7HXCmoIWMKU3dmS26672A4EeQtDzLKy7SXmfBu51JolvEKwtGA==" - } - } - }, - "bech32": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/bech32/-/bech32-1.1.4.tgz", - "integrity": "sha512-s0IrSOzLlbvX7yp4WBfPITzpAU8sqQcpsmwXDiKwrG4r491vwCO/XpejasRNl0piBMe/DvP4Tz0mIS/X1DPJBQ==" - }, - "big-integer": { - "version": "1.6.36", - "resolved": "https://registry.npmjs.org/big-integer/-/big-integer-1.6.36.tgz", - "integrity": "sha512-t70bfa7HYEA1D9idDbmuv7YbsbVkQ+Hp+8KFSul4aE5e/i1bjCNIRYJZlA8Q8p0r9T8cF/RVvwUgRA//FydEyg==" - }, - "big.js": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/big.js/-/big.js-6.2.1.tgz", - "integrity": "sha512-bCtHMwL9LeDIozFn+oNhhFoq+yQ3BNdnsLSASUxLciOb1vgvpHsIO1dsENiGMgbb4SkP5TrzWzRiLddn8ahVOQ==" - }, - "bigint-buffer": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/bigint-buffer/-/bigint-buffer-1.1.5.tgz", - "integrity": "sha512-trfYco6AoZ+rKhKnxA0hgX0HAbVP/s808/EuDSe2JDzUnCp/xAsli35Orvk67UrTEcwuxZqYZDmfA2RXJgxVvA==", - "requires": { - "bindings": "^1.3.0" - } - }, - "bigint-crypto-utils": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/bigint-crypto-utils/-/bigint-crypto-utils-3.3.0.tgz", - "integrity": "sha512-jOTSb+drvEDxEq6OuUybOAv/xxoh3cuYRUIPyu8sSHQNKM303UQ2R1DAo45o1AkcIXw6fzbaFI1+xGGdaXs2lg==" - }, - "bignumber.js": { - "version": "9.1.2", - "resolved": "https://registry.npmjs.org/bignumber.js/-/bignumber.js-9.1.2.tgz", - "integrity": "sha512-2/mKyZH9K85bzOEfhXDBFZTGd1CTs+5IHpeFQo9luiBG7hghdC851Pj2WAhb6E3R6b9tZj/XKhbg4fum+Kepug==" - }, - "binary-extensions": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", - "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==" - }, - "bindings": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/bindings/-/bindings-1.5.0.tgz", - "integrity": "sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==", - "requires": { - "file-uri-to-path": "1.0.0" - } - }, - "bip39": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/bip39/-/bip39-3.0.4.tgz", - "integrity": "sha512-YZKQlb752TrUWqHWj7XAwCSjYEgGAk+/Aas3V7NyjQeZYsztO8JnQUaCWhcnL4T+jL8nvB8typ2jRPzTlgugNw==", - "dev": true, - "requires": { - "@types/node": "11.11.6", - "create-hash": "^1.1.0", - "pbkdf2": "^3.0.9", - "randombytes": "^2.0.1" - }, - "dependencies": { - "@types/node": { - "version": "11.11.6", - "resolved": "https://registry.npmjs.org/@types/node/-/node-11.11.6.tgz", - "integrity": "sha512-Exw4yUWMBXM3X+8oqzJNRqZSwUAaS4+7NdvHqQuFi/d+synz++xmX3QIf+BFqneW8N31R8Ky+sikfZUXq07ggQ==", - "dev": true - } - } - }, - "bl": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", - "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", - "requires": { - "buffer": "^5.5.0", - "inherits": "^2.0.4", - "readable-stream": "^3.4.0" - }, - "dependencies": { - "buffer": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", - "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", - "requires": { - "base64-js": "^1.3.1", - "ieee754": "^1.1.13" - } - } - } - }, - "blakejs": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/blakejs/-/blakejs-1.2.1.tgz", - "integrity": "sha512-QXUSXI3QVc/gJME0dBpXrag1kbzOqCjCX8/b54ntNyW6sjtoqxqRk3LTmXzaJoh71zMsDCjM+47jS7XiwN/+fQ==" - }, - "bluebird": { - "version": "3.7.2", - "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz", - "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==" - }, - "bn.js": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.2.1.tgz", - "integrity": "sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ==" - }, - "bnc-sdk": { - "version": "4.6.7", - "resolved": "https://registry.npmjs.org/bnc-sdk/-/bnc-sdk-4.6.7.tgz", - "integrity": "sha512-jIQ6cmeRBgvH/YDLuYRr2+kxDGcAAi0SOvjlO5nQ5cWdbslw+ASWftd1HmxiVLNCiwEH5bSc/t8a0agZ5njTUQ==", - "requires": { - "crypto-es": "^1.2.2", - "nanoid": "^3.3.1", - "rxjs": "^6.6.3", - "sturdy-websocket": "^0.1.12" - } - }, - "body-parser": { - "version": "1.20.1", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.1.tgz", - "integrity": "sha512-jWi7abTbYwajOytWCQc37VulmWiRae5RyTpaCyDcS5/lMdtwSz5lOpDE67srw/HYe35f1z3fDQw+3txg7gNtWw==", - "requires": { - "bytes": "3.1.2", - "content-type": "~1.0.4", - "debug": "2.6.9", - "depd": "2.0.0", - "destroy": "1.2.0", - "http-errors": "2.0.0", - "iconv-lite": "0.4.24", - "on-finished": "2.4.1", - "qs": "6.11.0", - "raw-body": "2.5.1", - "type-is": "~1.6.18", - "unpipe": "1.0.0" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "requires": { - "ms": "2.0.0" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" - } - } - }, - "boolbase": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", - "integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==", - "devOptional": true - }, - "borsh": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/borsh/-/borsh-0.7.0.tgz", - "integrity": "sha512-CLCsZGIBCFnPtkNnieW/a8wmreDmfUtjU2m9yHrzPXIlNbqVs0AQrSatSG6vdNYUqdc83tkQi2eHfF98ubzQLA==", - "requires": { - "bn.js": "^5.2.0", - "bs58": "^4.0.0", - "text-encoding-utf-8": "^1.0.2" - } - }, - "brace-expansion": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", - "requires": { - "balanced-match": "^1.0.0" - } - }, - "braces": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", - "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", - "requires": { - "fill-range": "^7.0.1" - } - }, - "brorand": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz", - "integrity": "sha512-cKV8tMCEpQs4hK/ik71d6LrPOnpkpGBR0wzxqr68g2m/LB2GxVYQroAjMJZRVM1Y4BCjCKc3vAamxSzOY2RP+w==" - }, - "browser-level": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/browser-level/-/browser-level-1.0.1.tgz", - "integrity": "sha512-XECYKJ+Dbzw0lbydyQuJzwNXtOpbMSq737qxJN11sIRTErOMShvDpbzTlgju7orJKvx4epULolZAuJGLzCmWRQ==", - "requires": { - "abstract-level": "^1.0.2", - "catering": "^2.1.1", - "module-error": "^1.0.2", - "run-parallel-limit": "^1.1.0" - } - }, - "browser-stdout": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.1.tgz", - "integrity": "sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==" - }, - "browserify-aes": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/browserify-aes/-/browserify-aes-1.2.0.tgz", - "integrity": "sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==", - "requires": { - "buffer-xor": "^1.0.3", - "cipher-base": "^1.0.0", - "create-hash": "^1.1.0", - "evp_bytestokey": "^1.0.3", - "inherits": "^2.0.1", - "safe-buffer": "^5.0.1" - } - }, - "browserify-cipher": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/browserify-cipher/-/browserify-cipher-1.0.1.tgz", - "integrity": "sha512-sPhkz0ARKbf4rRQt2hTpAHqn47X3llLkUGn+xEJzLjwY8LRs2p0v7ljvI5EyoRO/mexrNunNECisZs+gw2zz1w==", - "requires": { - "browserify-aes": "^1.0.4", - "browserify-des": "^1.0.0", - "evp_bytestokey": "^1.0.0" - } - }, - "browserify-des": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/browserify-des/-/browserify-des-1.0.2.tgz", - "integrity": "sha512-BioO1xf3hFwz4kc6iBhI3ieDFompMhrMlnDFC4/0/vd5MokpuAc3R+LYbwTA9A5Yc9pq9UYPqffKpW2ObuwX5A==", - "requires": { - "cipher-base": "^1.0.1", - "des.js": "^1.0.0", - "inherits": "^2.0.1", - "safe-buffer": "^5.1.2" - } - }, - "browserify-rsa": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/browserify-rsa/-/browserify-rsa-4.1.0.tgz", - "integrity": "sha512-AdEER0Hkspgno2aR97SAf6vi0y0k8NuOpGnVH3O99rcA5Q6sh8QxcngtHuJ6uXwnfAXNM4Gn1Gb7/MV1+Ymbog==", - "requires": { - "bn.js": "^5.0.0", - "randombytes": "^2.0.1" - } - }, - "browserify-sign": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/browserify-sign/-/browserify-sign-4.2.1.tgz", - "integrity": "sha512-/vrA5fguVAKKAVTNJjgSm1tRQDHUU6DbwO9IROu/0WAzC8PKhucDSh18J0RMvVeHAn5puMd+QHC2erPRNf8lmg==", - "requires": { - "bn.js": "^5.1.1", - "browserify-rsa": "^4.0.1", - "create-hash": "^1.2.0", - "create-hmac": "^1.1.7", - "elliptic": "^6.5.3", - "inherits": "^2.0.4", - "parse-asn1": "^5.1.5", - "readable-stream": "^3.6.0", - "safe-buffer": "^5.2.0" - } - }, - "browserslist": { - "version": "4.21.4", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.4.tgz", - "integrity": "sha512-CBHJJdDmgjl3daYjN5Cp5kbTf1mUhZoS+beLklHIvkOWscs83YAhLlF3Wsh/lciQYAcbBJgTOD44VtG31ZM4Hw==", - "requires": { - "caniuse-lite": "^1.0.30001400", - "electron-to-chromium": "^1.4.251", - "node-releases": "^2.0.6", - "update-browserslist-db": "^1.0.9" - } - }, - "bs58": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/bs58/-/bs58-4.0.1.tgz", - "integrity": "sha512-Ok3Wdf5vOIlBrgCvTq96gBkJw+JUEzdBgyaza5HLtPm7yTHkjRy8+JzNyHF7BHa0bNWOQIp3m5YF0nnFcOIKLw==", - "requires": { - "base-x": "^3.0.2" - } - }, - "bs58check": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/bs58check/-/bs58check-2.1.2.tgz", - "integrity": "sha512-0TS1jicxdU09dwJMNZtVAfzPi6Q6QeN0pM1Fkzrjn+XYHvzMKPU3pHVpva+769iNVSfIYWf7LJ6WR+BuuMf8cA==", - "requires": { - "bs58": "^4.0.0", - "create-hash": "^1.1.0", - "safe-buffer": "^5.1.2" - } - }, - "btoa": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/btoa/-/btoa-1.2.1.tgz", - "integrity": "sha512-SB4/MIGlsiVkMcHmT+pSmIPoNDoHg+7cMzmt3Uxt628MTz2487DKSqK/fuhFBrkuqrYv5UCEnACpF4dTFNKc/g==" - }, - "buffer": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz", - "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==", - "requires": { - "base64-js": "^1.3.1", - "ieee754": "^1.2.1" - } - }, - "buffer-alloc": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/buffer-alloc/-/buffer-alloc-1.2.0.tgz", - "integrity": "sha512-CFsHQgjtW1UChdXgbyJGtnm+O/uLQeZdtbDo8mfUgYXCHSM1wgrVxXm6bSyrUuErEb+4sYVGCzASBRot7zyrow==", - "requires": { - "buffer-alloc-unsafe": "^1.1.0", - "buffer-fill": "^1.0.0" - } - }, - "buffer-alloc-unsafe": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/buffer-alloc-unsafe/-/buffer-alloc-unsafe-1.1.0.tgz", - "integrity": "sha512-TEM2iMIEQdJ2yjPJoSIsldnleVaAk1oW3DBVUykyOLsEsFmEc9kn+SFFPz+gl54KQNxlDnAwCXosOS9Okx2xAg==" - }, - "buffer-crc32": { - "version": "0.2.13", - "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz", - "integrity": "sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==" - }, - "buffer-fill": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/buffer-fill/-/buffer-fill-1.0.0.tgz", - "integrity": "sha512-T7zexNBwiiaCOGDg9xNX9PBmjrubblRkENuptryuI64URkXDFum9il/JGL8Lm8wYfAXpredVXXZz7eMHilimiQ==" - }, - "buffer-from": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", - "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==" - }, - "buffer-to-arraybuffer": { - "version": "0.0.5", - "resolved": "https://registry.npmjs.org/buffer-to-arraybuffer/-/buffer-to-arraybuffer-0.0.5.tgz", - "integrity": "sha512-3dthu5CYiVB1DEJp61FtApNnNndTckcqe4pFcLdvHtrpG+kcyekCJKg4MRiDcFW7A6AODnXB9U4dwQiCW5kzJQ==" - }, - "buffer-xor": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/buffer-xor/-/buffer-xor-1.0.3.tgz", - "integrity": "sha512-571s0T7nZWK6vB67HI5dyUF7wXiNcfaPPPTl6zYCNApANjIvYJTg7hlud/+cJpdAhS7dVzqMLmfhfHR3rAcOjQ==" - }, - "bufferutil": { - "version": "4.0.7", - "resolved": "https://registry.npmjs.org/bufferutil/-/bufferutil-4.0.7.tgz", - "integrity": "sha512-kukuqc39WOHtdxtw4UScxF/WVnMFVSQVKhtx3AjZJzhd0RGZZldcrfSEbVsWWe6KNH253574cq5F+wpv0G9pJw==", - "requires": { - "node-gyp-build": "^4.3.0" - } - }, - "bufio": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/bufio/-/bufio-1.1.3.tgz", - "integrity": "sha512-W0ydG8t+ST+drUpEwl1N+dU9Ije06g8+43CLtvEIzfKo9nPFLXbKqDYE2XSg4w6RugsBcCj7pEU7jOpBC6BqrA==" - }, - "buildcheck": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/buildcheck/-/buildcheck-0.0.3.tgz", - "integrity": "sha512-pziaA+p/wdVImfcbsZLNF32EiWyujlQLwolMqUQE8xpKNOH7KmZQaY8sXN7DGOEzPAElo9QTaeNRfGnf3iOJbA==", - "optional": true - }, - "bunyan": { - "version": "1.8.15", - "resolved": "https://registry.npmjs.org/bunyan/-/bunyan-1.8.15.tgz", - "integrity": "sha512-0tECWShh6wUysgucJcBAoYegf3JJoZWibxdqhTm7OHPeT42qdjkZ29QCMcKwbgU1kiH+auSIasNRXMLWXafXig==", - "requires": { - "dtrace-provider": "~0.8", - "moment": "^2.19.3", - "mv": "~2", - "safe-json-stringify": "~1" - } - }, - "busboy": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/busboy/-/busboy-1.6.0.tgz", - "integrity": "sha512-8SFQbg/0hQ9xy3UNTB0YEnsNBbWfhf7RtnzpL7TkBiTBRfrQ9Fxcnz7VJsleJpyp6rVLvXiuORqjlHi5q+PYuA==", - "requires": { - "streamsearch": "^1.1.0" - } - }, - "bytes": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", - "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==" - }, - "cacheable-lookup": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/cacheable-lookup/-/cacheable-lookup-6.1.0.tgz", - "integrity": "sha512-KJ/Dmo1lDDhmW2XDPMo+9oiy/CeqosPguPCrgcVzKyZrL6pM1gU2GmPY/xo6OQPTUaA/c0kwHuywB4E6nmT9ww==" - }, - "cacheable-request": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-7.0.2.tgz", - "integrity": "sha512-pouW8/FmiPQbuGpkXQ9BAPv/Mo5xDGANgSNXzTzJ8DrKGuXOssM4wIQRjfanNRh3Yu5cfYPvcorqbhg2KIJtew==", - "requires": { - "clone-response": "^1.0.2", - "get-stream": "^5.1.0", - "http-cache-semantics": "^4.0.0", - "keyv": "^4.0.0", - "lowercase-keys": "^2.0.0", - "normalize-url": "^6.0.1", - "responselike": "^2.0.0" - }, - "dependencies": { - "get-stream": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", - "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", - "requires": { - "pump": "^3.0.0" - } - }, - "lowercase-keys": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-2.0.0.tgz", - "integrity": "sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==" - } - } - }, - "call-bind": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", - "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", - "requires": { - "function-bind": "^1.1.1", - "get-intrinsic": "^1.0.2" - } - }, - "camel-case": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/camel-case/-/camel-case-3.0.0.tgz", - "integrity": "sha512-+MbKztAYHXPr1jNTSKQF52VpcFjwY5RkR7fxksV8Doo4KAYc5Fl4UJRgthBbTmEx8C54DqahhbLJkDwjI3PI/w==", - "requires": { - "no-case": "^2.2.0", - "upper-case": "^1.1.1" - } - }, - "camelcase": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-4.1.0.tgz", - "integrity": "sha512-FxAv7HpHrXbh3aPo4o2qxHay2lkLY3x5Mw3KeE4KQE8ysVfziWeRZDwcjauvwBSGEC/nXUPzZy8zeh4HokqOnw==", - "dev": true - }, - "caniuse-lite": { - "version": "1.0.30001423", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001423.tgz", - "integrity": "sha512-09iwWGOlifvE1XuHokFMP7eR38a0JnajoyL3/i87c8ZjRWRrdKo1fqjNfugfBD0UDBIOz0U+jtNhJ0EPm1VleQ==" - }, - "case": { - "version": "1.6.3", - "resolved": "https://registry.npmjs.org/case/-/case-1.6.3.tgz", - "integrity": "sha512-mzDSXIPaFwVDvZAHqZ9VlbyF4yyXRuX6IvB06WvPYkqJVO24kX1PPhv9bfpKNFZyxYFmmgo03HUiD8iklmJYRQ==" - }, - "caseless": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", - "integrity": "sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw==" - }, - "catering": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/catering/-/catering-2.1.1.tgz", - "integrity": "sha512-K7Qy8O9p76sL3/3m7/zLKbRkyOlSZAgzEaLhyj2mXS8PsCud2Eo4hAb8aLtZqHh0QGqLcb9dlJSu6lHRVENm1w==" - }, - "cbor": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/cbor/-/cbor-5.2.0.tgz", - "integrity": "sha512-5IMhi9e1QU76ppa5/ajP1BmMWZ2FHkhAhjeVKQ/EFCgYSEaeVaoGtL7cxJskf9oCCk+XjzaIdc3IuU/dbA/o2A==", - "requires": { - "bignumber.js": "^9.0.1", - "nofilter": "^1.0.4" - } - }, - "chai": { - "version": "4.3.8", - "resolved": "https://registry.npmjs.org/chai/-/chai-4.3.8.tgz", - "integrity": "sha512-vX4YvVVtxlfSZ2VecZgFUTU5qPCYsobVI2O9FmwEXBhDigYGQA6jRXCycIs1yJnnWbZ6/+a2zNIF5DfVCcJBFQ==", - "requires": { - "assertion-error": "^1.1.0", - "check-error": "^1.0.2", - "deep-eql": "^4.1.2", - "get-func-name": "^2.0.0", - "loupe": "^2.3.1", - "pathval": "^1.1.1", - "type-detect": "^4.0.5" - } - }, - "chai-almost": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/chai-almost/-/chai-almost-1.0.1.tgz", - "integrity": "sha512-UrNSx5f2B1/ESrOz0a4iLpDnQvDnK/3O0ZE/KGYQ+NcndKy0VQkMkv8yoGIHNSbjzKBid3EAMdDMA5wb9CxvSA==", - "dev": true, - "requires": { - "deep-eql": "^2.0.2", - "type-detect": "^4.0.3" - }, - "dependencies": { - "deep-eql": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-2.0.2.tgz", - "integrity": "sha512-uts3fF4HnV1bcNx8K5c9NMjXXKtLOf1obUMq04uEuMaF8i1m0SfugbpDMd59cYfodQcMqeUISvL4Pmx5NZ7lcw==", - "dev": true, - "requires": { - "type-detect": "^3.0.0" - }, - "dependencies": { - "type-detect": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-3.0.0.tgz", - "integrity": "sha512-pwZo7l1T0a8wmTMDc4FtXuHseRaqa9nyaUArp4xHaBMUlRzr72PvgF6ouXIIj5rjbVWqo8pZu6vw74jDKg4Dvw==", - "dev": true - } - } - } - } - }, - "chai-as-promised": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/chai-as-promised/-/chai-as-promised-7.1.1.tgz", - "integrity": "sha512-azL6xMoi+uxu6z4rhWQ1jbdUhOMhis2PvscD/xjLqNMkv3BPPp2JyyuTHOrf9BOosGpNQ11v6BKv/g57RXbiaA==", - "peer": true, - "requires": { - "check-error": "^1.0.2" - } - }, - "chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "change-case": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/change-case/-/change-case-3.0.2.tgz", - "integrity": "sha512-Mww+SLF6MZ0U6kdg11algyKd5BARbyM4TbFBepwowYSR5ClfQGCGtxNXgykpN0uF/bstWeaGDT4JWaDh8zWAHA==", - "requires": { - "camel-case": "^3.0.0", - "constant-case": "^2.0.0", - "dot-case": "^2.1.0", - "header-case": "^1.0.0", - "is-lower-case": "^1.1.0", - "is-upper-case": "^1.1.0", - "lower-case": "^1.1.1", - "lower-case-first": "^1.0.0", - "no-case": "^2.3.2", - "param-case": "^2.1.0", - "pascal-case": "^2.0.0", - "path-case": "^2.1.0", - "sentence-case": "^2.1.0", - "snake-case": "^2.1.0", - "swap-case": "^1.1.0", - "title-case": "^2.1.0", - "upper-case": "^1.1.1", - "upper-case-first": "^1.1.0" - } - }, - "charenc": { - "version": "0.0.2", - "resolved": "https://registry.npmjs.org/charenc/-/charenc-0.0.2.tgz", - "integrity": "sha512-yrLQ/yVUFXkzg7EDQsPieE/53+0RlaWTs+wBrvW36cyilJ2SaDWfl4Yj7MtLTXleV9uEKefbAGUPv2/iWSooRA==" - }, - "check-error": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/check-error/-/check-error-1.0.2.tgz", - "integrity": "sha512-BrgHpW9NURQgzoNyjfq0Wu6VFO6D7IZEmJNdtgNqpzGG8RuNFHt2jQxWlAs4HMe119chBnv+34syEZtc6IhLtA==" - }, - "checkpoint-store": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/checkpoint-store/-/checkpoint-store-1.1.0.tgz", - "integrity": "sha512-J/NdY2WvIx654cc6LWSq/IYFFCUf75fFTgwzFnmbqyORH4MwgiQCgswLLKBGzmsyTI5V7i5bp/So6sMbDWhedg==", - "requires": { - "functional-red-black-tree": "^1.0.1" - } - }, - "cheerio": { - "version": "1.0.0-rc.12", - "resolved": "https://registry.npmjs.org/cheerio/-/cheerio-1.0.0-rc.12.tgz", - "integrity": "sha512-VqR8m68vM46BNnuZ5NtnGBKIE/DfN0cRIzg9n40EIq9NOv90ayxLBXA8fXC5gquFRGJSTRqBq25Jt2ECLR431Q==", - "devOptional": true, - "requires": { - "cheerio-select": "^2.1.0", - "dom-serializer": "^2.0.0", - "domhandler": "^5.0.3", - "domutils": "^3.0.1", - "htmlparser2": "^8.0.1", - "parse5": "^7.0.0", - "parse5-htmlparser2-tree-adapter": "^7.0.0" - } - }, - "cheerio-select": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/cheerio-select/-/cheerio-select-2.1.0.tgz", - "integrity": "sha512-9v9kG0LvzrlcungtnJtpGNxY+fzECQKhK4EGJX2vByejiMX84MFNQw4UxPJl3bFbTMw+Dfs37XaIkCwTZfLh4g==", - "devOptional": true, - "requires": { - "boolbase": "^1.0.0", - "css-select": "^5.1.0", - "css-what": "^6.1.0", - "domelementtype": "^2.3.0", - "domhandler": "^5.0.3", - "domutils": "^3.0.1" - } - }, - "chokidar": { - "version": "3.5.3", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", - "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", - "requires": { - "anymatch": "~3.1.2", - "braces": "~3.0.2", - "fsevents": "~2.3.2", - "glob-parent": "~5.1.2", - "is-binary-path": "~2.1.0", - "is-glob": "~4.0.1", - "normalize-path": "~3.0.0", - "readdirp": "~3.6.0" - } - }, - "chownr": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz", - "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==" - }, - "ci-info": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz", - "integrity": "sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==" - }, - "cids": { - "version": "0.7.5", - "resolved": "https://registry.npmjs.org/cids/-/cids-0.7.5.tgz", - "integrity": "sha512-zT7mPeghoWAu+ppn8+BS1tQ5qGmbMfB4AregnQjA/qHY3GC1m1ptI9GkWNlgeu38r7CuRdXB47uY2XgAYt6QVA==", - "requires": { - "buffer": "^5.5.0", - "class-is": "^1.1.0", - "multibase": "~0.6.0", - "multicodec": "^1.0.0", - "multihashes": "~0.4.15" - }, - "dependencies": { - "buffer": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", - "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", - "requires": { - "base64-js": "^1.3.1", - "ieee754": "^1.1.13" - } - }, - "multicodec": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/multicodec/-/multicodec-1.0.4.tgz", - "integrity": "sha512-NDd7FeS3QamVtbgfvu5h7fd1IlbaC4EQ0/pgU4zqE2vdHCmBGsUa0TiM8/TdSeG6BMPC92OOCf8F1ocE/Wkrrg==", - "requires": { - "buffer": "^5.6.0", - "varint": "^5.0.0" - } - } - } - }, - "cipher-base": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.4.tgz", - "integrity": "sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==", - "requires": { - "inherits": "^2.0.1", - "safe-buffer": "^5.0.1" - } - }, - "class-is": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/class-is/-/class-is-1.1.0.tgz", - "integrity": "sha512-rhjH9AG1fvabIDoGRVH587413LPjTZgmDF9fOFCbFJQV4yuocX1mHxxvXI4g3cGwbVY9wAYIoKlg1N79frJKQw==" - }, - "classic-level": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/classic-level/-/classic-level-1.3.0.tgz", - "integrity": "sha512-iwFAJQYtqRTRM0F6L8h4JCt00ZSGdOyqh7yVrhhjrOpFhmBjNlRUey64MCiyo6UmQHMJ+No3c81nujPv+n9yrg==", - "requires": { - "abstract-level": "^1.0.2", - "catering": "^2.1.0", - "module-error": "^1.0.1", - "napi-macros": "^2.2.2", - "node-gyp-build": "^4.3.0" - }, - "dependencies": { - "napi-macros": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/napi-macros/-/napi-macros-2.2.2.tgz", - "integrity": "sha512-hmEVtAGYzVQpCKdbQea4skABsdXW4RUh5t5mJ2zzqowJS2OyXZTU1KhDVFhx+NlWZ4ap9mqR9TcDO3LTTttd+g==" - } - } - }, - "clean-stack": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", - "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==" - }, - "cli-color": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/cli-color/-/cli-color-2.0.3.tgz", - "integrity": "sha512-OkoZnxyC4ERN3zLzZaY9Emb7f/MhBOIpePv0Ycok0fJYT+Ouo00UBEIwsVsr0yoow++n5YWlSUgST9GKhNHiRQ==", - "requires": { - "d": "^1.0.1", - "es5-ext": "^0.10.61", - "es6-iterator": "^2.0.3", - "memoizee": "^0.4.15", - "timers-ext": "^0.1.7" - } - }, - "cli-cursor": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz", - "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==", - "optional": true, - "requires": { - "restore-cursor": "^3.1.0" - } - }, - "cli-table": { - "version": "0.3.11", - "resolved": "https://registry.npmjs.org/cli-table/-/cli-table-0.3.11.tgz", - "integrity": "sha512-IqLQi4lO0nIB4tcdTpN4LCB9FI3uqrJZK7RC515EnhZ6qBaglkIgICb1wjeAqpdoOabm1+SuQtkXIPdYC93jhQ==", - "requires": { - "colors": "1.0.3" - }, - "dependencies": { - "colors": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/colors/-/colors-1.0.3.tgz", - "integrity": "sha512-pFGrxThWcWQ2MsAz6RtgeWe4NK2kUE1WfsrvvlctdII745EW9I0yflqhe7++M5LEc7bV2c/9/5zc8sFcpL0Drw==" - } - } - }, - "cli-table3": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/cli-table3/-/cli-table3-0.6.3.tgz", - "integrity": "sha512-w5Jac5SykAeZJKntOxJCrm63Eg5/4dhMWIcuTbo9rpE+brgaSZo0RuNJZeOyMgsUdhDeojvgyQLmjI+K50ZGyg==", - "requires": { - "@colors/colors": "1.5.0", - "string-width": "^4.2.0" - } - }, - "cliui": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", - "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", - "requires": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.0", - "wrap-ansi": "^7.0.0" - }, - "dependencies": { - "ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==" - }, - "strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "requires": { - "ansi-regex": "^5.0.1" - } - } - } - }, - "clone": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/clone/-/clone-2.1.2.tgz", - "integrity": "sha512-3Pe/CF1Nn94hyhIYpjtiLhdCoEoz0DqQ+988E9gmeEdQZlojxnOb74wctFyuwWQHzqyf9X7C7MG8juUpqBJT8w==" - }, - "clone-buffer": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/clone-buffer/-/clone-buffer-1.0.0.tgz", - "integrity": "sha512-KLLTJWrvwIP+OPfMn0x2PheDEP20RPUcGXj/ERegTgdmPEZylALQldygiqrPPu8P45uNuPs7ckmReLY6v/iA5g==", - "optional": true - }, - "clone-response": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/clone-response/-/clone-response-1.0.3.tgz", - "integrity": "sha512-ROoL94jJH2dUVML2Y/5PEDNaSHgeOdSDicUyS7izcF63G6sTc/FTjLub4b8Il9S8S0beOfYt0TaA5qvFK+w0wA==", - "requires": { - "mimic-response": "^1.0.0" - }, - "dependencies": { - "mimic-response": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz", - "integrity": "sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==" - } - } - }, - "clones-with-immutable-args": { - "version": "git+ssh://git@github.com/Saw-mon-and-Natalie/clones-with-immutable-args.git#105efee1b9127ed7f6fedf139e1fc796ce8791f2", - "integrity": "sha512-k3pqgVlL6sTgySZG8eN+spNdokeM/J7kgBVn0xJeZIg+cv1vA1ert1jFDuHX1Vfz1uTTqfZbmWHhvCCdy0VpNA==", - "from": "clones-with-immutable-args@github:Saw-mon-and-Natalie/clones-with-immutable-args#105efee1b9127ed7f6fedf139e1fc796ce8791f2" - }, - "code-point-at": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz", - "integrity": "sha512-RpAVKQA5T63xEj6/giIbUEtZwJ4UFIc3ZtvEkiaUERylqe8xb5IvqcgOurZLahv93CLKfxcw5YI+DZcUBRyLXA==" - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" - }, - "colors": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/colors/-/colors-1.4.0.tgz", - "integrity": "sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA==" - }, - "combined-stream": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", - "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", - "requires": { - "delayed-stream": "~1.0.0" - } - }, - "command-exists": { - "version": "1.2.9", - "resolved": "https://registry.npmjs.org/command-exists/-/command-exists-1.2.9.tgz", - "integrity": "sha512-LTQ/SGc+s0Xc0Fu5WaKnR0YiygZkm9eKFvyS+fRsU7/ZWFF8ykFM6Pc9aCVf1+xasOOZpO3BAVgVrKvsqKHV7w==" - }, - "command-line-args": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/command-line-args/-/command-line-args-5.2.1.tgz", - "integrity": "sha512-H4UfQhZyakIjC74I9d34fGYDwk3XpSr17QhEd0Q3I9Xq1CETHo4Hcuo87WyWHpAF1aSLjLRf5lD9ZGX2qStUvg==", - "dev": true, - "requires": { - "array-back": "^3.1.0", - "find-replace": "^3.0.0", - "lodash.camelcase": "^4.3.0", - "typical": "^4.0.0" - } - }, - "command-line-usage": { - "version": "6.1.3", - "resolved": "https://registry.npmjs.org/command-line-usage/-/command-line-usage-6.1.3.tgz", - "integrity": "sha512-sH5ZSPr+7UStsloltmDh7Ce5fb8XPlHyoPzTpyyMuYCtervL65+ubVZ6Q61cFtFl62UyJlc8/JwERRbAFPUqgw==", - "dev": true, - "requires": { - "array-back": "^4.0.2", - "chalk": "^2.4.2", - "table-layout": "^1.0.2", - "typical": "^5.2.0" - }, - "dependencies": { - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "requires": { - "color-convert": "^1.9.0" - } - }, - "array-back": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/array-back/-/array-back-4.0.2.tgz", - "integrity": "sha512-NbdMezxqf94cnNfWLL7V/im0Ub+Anbb0IoZhvzie8+4HJ4nMQuzHuy49FkGYCJK2yAloZ3meiB6AVMClbrI1vg==", - "dev": true - }, - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - } - }, - "color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dev": true, - "requires": { - "color-name": "1.1.3" - } - }, - "color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", - "dev": true - }, - "escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", - "dev": true - }, - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", - "dev": true - }, - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - }, - "typical": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/typical/-/typical-5.2.0.tgz", - "integrity": "sha512-dvdQgNDNJo+8B2uBQoqdb11eUCE1JQXhvjC/CZtgvZseVd5TYMXnq0+vuUemXbd/Se29cTaUuPX3YIc2xgbvIg==", - "dev": true - } - } - }, - "commander": { - "version": "2.20.3", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", - "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==" - }, - "compare-versions": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/compare-versions/-/compare-versions-5.0.3.tgz", - "integrity": "sha512-4UZlZP8Z99MGEY+Ovg/uJxJuvoXuN4M6B3hKaiackiHrgzQFEe3diJi1mf1PNHbFujM7FvLrK2bpgIaImbtZ1A==", - "dev": true - }, - "complex.js": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/complex.js/-/complex.js-2.1.1.tgz", - "integrity": "sha512-8njCHOTtFFLtegk6zQo0kkVX1rngygb/KQI6z1qZxlFI3scluC+LVTCFbrkWjBv4vvLlbQ9t88IPMC6k95VTTg==" - }, - "concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==" - }, - "concat-stream": { - "version": "1.6.2", - "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz", - "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==", - "requires": { - "buffer-from": "^1.0.0", - "inherits": "^2.0.3", - "readable-stream": "^2.2.2", - "typedarray": "^0.0.6" - }, - "dependencies": { - "readable-stream": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" - }, - "string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "requires": { - "safe-buffer": "~5.1.0" - } - } - } - }, - "conf": { - "version": "10.2.0", - "resolved": "https://registry.npmjs.org/conf/-/conf-10.2.0.tgz", - "integrity": "sha512-8fLl9F04EJqjSqH+QjITQfJF8BrOVaYr1jewVgSRAEWePfxT0sku4w2hrGQ60BC/TNLGQ2pgxNlTbWQmMPFvXg==", - "optional": true, - "requires": { - "ajv": "^8.6.3", - "ajv-formats": "^2.1.1", - "atomically": "^1.7.0", - "debounce-fn": "^4.0.0", - "dot-prop": "^6.0.1", - "env-paths": "^2.2.1", - "json-schema-typed": "^7.0.3", - "onetime": "^5.1.2", - "pkg-up": "^3.1.0", - "semver": "^7.3.5" - }, - "dependencies": { - "ajv": { - "version": "8.12.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz", - "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==", - "optional": true, - "requires": { - "fast-deep-equal": "^3.1.1", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2", - "uri-js": "^4.2.2" - } - }, - "json-schema-traverse": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", - "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", - "optional": true - } - } - }, - "constant-case": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/constant-case/-/constant-case-2.0.0.tgz", - "integrity": "sha512-eS0N9WwmjTqrOmR3o83F5vW8Z+9R1HnVz3xmzT2PMFug9ly+Au/fxRWlEBSb6LcZwspSsEn9Xs1uw9YgzAg1EQ==", - "requires": { - "snake-case": "^2.1.0", - "upper-case": "^1.1.1" - } - }, - "content-disposition": { - "version": "0.5.4", - "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", - "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==", - "requires": { - "safe-buffer": "5.2.1" - } - }, - "content-hash": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/content-hash/-/content-hash-2.5.2.tgz", - "integrity": "sha512-FvIQKy0S1JaWV10sMsA7TRx8bpU+pqPkhbsfvOJAdjRXvYxEckAwQWGwtRjiaJfh+E0DvcWUGqcdjwMGFjsSdw==", - "requires": { - "cids": "^0.7.1", - "multicodec": "^0.5.5", - "multihashes": "^0.4.15" - } - }, - "content-type": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz", - "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==" - }, - "convert-source-map": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz", - "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==", - "peer": true - }, - "convert-svg-core": { - "version": "0.6.4", - "resolved": "https://registry.npmjs.org/convert-svg-core/-/convert-svg-core-0.6.4.tgz", - "integrity": "sha512-8mS0n7otc1lljTte4z7nDhihEakKCRq4w5ivMnIGeOZuD/OV/eDZNNEgGLV1ET3p+rMbnrZnX4lAcsf14WzD5w==", - "optional": true, - "requires": { - "chalk": "^4.1.2", - "cheerio": "^1.0.0-rc.11", - "commander": "^9.2.0", - "file-url": "^3.0.0", - "get-stdin": "^8.0.0", - "glob": "^8.0.1", - "lodash.omit": "^4.5.0", - "lodash.pick": "^4.4.0", - "pollock": "^0.2.0", - "puppeteer": "^13.7.0", - "tmp": "^0.2.1" - }, - "dependencies": { - "brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "optional": true, - "requires": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "commander": { - "version": "9.5.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-9.5.0.tgz", - "integrity": "sha512-KRs7WVDKg86PWiuAqhDrAQnTXZKraVcCc6vFdL14qrZ/DcWwuRo7VoiYXalXO7S5GKpqYiVEwCbgFDfxNHKJBQ==", - "optional": true - }, - "minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "optional": true, - "requires": { - "brace-expansion": "^1.1.7" - } - }, - "rimraf": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", - "optional": true, - "requires": { - "glob": "^7.1.3" - }, - "dependencies": { - "glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "optional": true, - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - } - } - }, - "tmp": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.1.tgz", - "integrity": "sha512-76SUhtfqR2Ijn+xllcI5P1oyannHNHByD80W1q447gU3mp9G9PSpGdWmjUOHRDPiHYacIk66W7ubDTuPF3BEtQ==", - "optional": true, - "requires": { - "rimraf": "^3.0.0" - } - } - } - }, - "convert-svg-to-png": { - "version": "0.6.4", - "resolved": "https://registry.npmjs.org/convert-svg-to-png/-/convert-svg-to-png-0.6.4.tgz", - "integrity": "sha512-zHNTuVedkyuhMl+f+HMm2L7+TKDYCKFAqAmDqUr0dN7/xtgYe76PPAydjlFzeLbzEpGtEfhaA15q+ejpLaVo3g==", - "optional": true, - "requires": { - "convert-svg-core": "^0.6.4" - } - }, - "cookie": { - "version": "0.4.2", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.2.tgz", - "integrity": "sha512-aSWTXFzaKWkvHO1Ny/s+ePFpvKsPnjc551iI41v3ny/ow6tBG5Vd+FuqGNhh1LxOmVzOlGUriIlOaokOvhaStA==" - }, - "cookie-signature": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", - "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==" - }, - "cookiejar": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/cookiejar/-/cookiejar-2.1.4.tgz", - "integrity": "sha512-LDx6oHrK+PhzLKJU9j5S7/Y3jM/mUHvD/DeI1WQmJn652iPC5Y4TBzC9l+5OMOXlyTTA+SmVUPm0HQUwpD5Jqw==" - }, - "core-js-compat": { - "version": "3.25.5", - "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.25.5.tgz", - "integrity": "sha512-ovcyhs2DEBUIE0MGEKHP4olCUW/XYte3Vroyxuh38rD1wAO4dHohsovUC4eAOuzFxE6b+RXvBU3UZ9o0YhUTkA==", - "requires": { - "browserslist": "^4.21.4" - } - }, - "core-js-pure": { - "version": "3.30.1", - "resolved": "https://registry.npmjs.org/core-js-pure/-/core-js-pure-3.30.1.tgz", - "integrity": "sha512-nXBEVpmUnNRhz83cHd9JRQC52cTMcuXAmR56+9dSMpRdpeA4I1PX6yjmhd71Eyc/wXNsdBdUDIj1QTIeZpU5Tg==", - "dev": true - }, - "core-util-is": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", - "integrity": "sha512-3lqz5YjWTYnW6dlDa5TLaTCcShfar1e40rmcJVwCBJC6mWlFuj0eCHIElmG1g5kyuJ/GD+8Wn4FFCcz4gJPfaQ==" - }, - "cors": { - "version": "2.8.5", - "resolved": "https://registry.npmjs.org/cors/-/cors-2.8.5.tgz", - "integrity": "sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==", - "requires": { - "object-assign": "^4", - "vary": "^1" - } - }, - "cpu-features": { - "version": "0.0.4", - "resolved": "https://registry.npmjs.org/cpu-features/-/cpu-features-0.0.4.tgz", - "integrity": "sha512-fKiZ/zp1mUwQbnzb9IghXtHtDoTMtNeb8oYGx6kX2SYfhnG0HNdBEBIzB9b5KlXu5DQPhfy3mInbBxFcgwAr3A==", - "optional": true, - "requires": { - "buildcheck": "0.0.3", - "nan": "^2.15.0" - } - }, - "crc-32": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/crc-32/-/crc-32-1.2.2.tgz", - "integrity": "sha512-ROmzCKrTnOwybPcJApAA6WBWij23HVfGVNKqqrZpuyZOHqK2CwHSvpGuyt/UNNvaIjEd8X5IFGp4Mh+Ie1IHJQ==" - }, - "create-ecdh": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/create-ecdh/-/create-ecdh-4.0.4.tgz", - "integrity": "sha512-mf+TCx8wWc9VpuxfP2ht0iSISLZnt0JgWlrOKZiNqyUZWnjIaCIVNQArMHnCZKfEYRg6IM7A+NeJoN8gf/Ws0A==", - "requires": { - "bn.js": "^4.1.0", - "elliptic": "^6.5.3" - }, - "dependencies": { - "bn.js": { - "version": "4.12.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==" - } - } - }, - "create-hash": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/create-hash/-/create-hash-1.2.0.tgz", - "integrity": "sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==", - "requires": { - "cipher-base": "^1.0.1", - "inherits": "^2.0.1", - "md5.js": "^1.3.4", - "ripemd160": "^2.0.1", - "sha.js": "^2.4.0" - } - }, - "create-hmac": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/create-hmac/-/create-hmac-1.1.7.tgz", - "integrity": "sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==", - "requires": { - "cipher-base": "^1.0.3", - "create-hash": "^1.1.0", - "inherits": "^2.0.1", - "ripemd160": "^2.0.0", - "safe-buffer": "^5.0.1", - "sha.js": "^2.4.8" - } - }, - "create-require": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz", - "integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==", - "optional": true, - "peer": true - }, - "cross-fetch": { - "version": "3.1.6", - "resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-3.1.6.tgz", - "integrity": "sha512-riRvo06crlE8HiqOwIpQhxwdOk4fOeR7FVM/wXoxchFEqMNUjvbs3bfo4OTgMEMHzppd4DxFBDbyySj8Cv781g==", - "requires": { - "node-fetch": "^2.6.11" - } - }, - "cross-spawn": { - "version": "6.0.5", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", - "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", - "requires": { - "nice-try": "^1.0.4", - "path-key": "^2.0.1", - "semver": "^5.5.0", - "shebang-command": "^1.2.0", - "which": "^1.2.9" - }, - "dependencies": { - "semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" - } - } - }, - "crypt": { - "version": "0.0.2", - "resolved": "https://registry.npmjs.org/crypt/-/crypt-0.0.2.tgz", - "integrity": "sha512-mCxBlsHFYh9C+HVpiEacem8FEBnMXgU9gy4zmNC+SXAZNB/1idgp/aulFJ4FgCi7GPEVbfyng092GqL2k2rmow==" - }, - "crypto-addr-codec": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/crypto-addr-codec/-/crypto-addr-codec-0.1.7.tgz", - "integrity": "sha512-X4hzfBzNhy4mAc3UpiXEC/L0jo5E8wAa9unsnA8nNXYzXjCcGk83hfC5avJWCSGT8V91xMnAS9AKMHmjw5+XCg==", - "requires": { - "base-x": "^3.0.8", - "big-integer": "1.6.36", - "blakejs": "^1.1.0", - "bs58": "^4.0.1", - "ripemd160-min": "0.0.6", - "safe-buffer": "^5.2.0", - "sha3": "^2.1.1" - } - }, - "crypto-browserify": { - "version": "3.12.0", - "resolved": "https://registry.npmjs.org/crypto-browserify/-/crypto-browserify-3.12.0.tgz", - "integrity": "sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg==", - "requires": { - "browserify-cipher": "^1.0.0", - "browserify-sign": "^4.0.0", - "create-ecdh": "^4.0.0", - "create-hash": "^1.1.0", - "create-hmac": "^1.1.0", - "diffie-hellman": "^5.0.0", - "inherits": "^2.0.1", - "pbkdf2": "^3.0.3", - "public-encrypt": "^4.0.0", - "randombytes": "^2.0.0", - "randomfill": "^1.0.3" - } - }, - "crypto-es": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/crypto-es/-/crypto-es-1.2.7.tgz", - "integrity": "sha512-UUqiVJ2gUuZFmbFsKmud3uuLcNP2+Opt+5ysmljycFCyhA0+T16XJmo1ev/t5kMChMqWh7IEvURNCqsg+SjZGQ==" - }, - "css-select": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/css-select/-/css-select-5.1.0.tgz", - "integrity": "sha512-nwoRF1rvRRnnCqqY7updORDsuqKzqYJ28+oSMaJMMgOauh3fvwHqMS7EZpIPqK8GL+g9mKxF1vP/ZjSeNjEVHg==", - "devOptional": true, - "requires": { - "boolbase": "^1.0.0", - "css-what": "^6.1.0", - "domhandler": "^5.0.2", - "domutils": "^3.0.1", - "nth-check": "^2.0.1" - } - }, - "css-what": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/css-what/-/css-what-6.1.0.tgz", - "integrity": "sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==", - "devOptional": true - }, - "cssfilter": { - "version": "0.0.10", - "resolved": "https://registry.npmjs.org/cssfilter/-/cssfilter-0.0.10.tgz", - "integrity": "sha512-FAaLDaplstoRsDR8XGYH51znUN0UY7nMc6Z9/fvE8EXGwvJE9hu7W2vHwx1+bd6gCYnln9nLbzxFTrcO9YQDZw==", - "optional": true - }, - "d": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/d/-/d-1.0.1.tgz", - "integrity": "sha512-m62ShEObQ39CfralilEQRjH6oAMtNCV1xJyEx5LpRYUVN+EviphDgUc/F3hnYbADmkiNs67Y+3ylmlG7Lnu+FA==", - "requires": { - "es5-ext": "^0.10.50", - "type": "^1.0.1" - } - }, - "dashdash": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", - "integrity": "sha512-jRFi8UDGo6j+odZiEpjazZaWqEal3w/basFjQHQEwVtZJGDpxbH1MeYluwCS8Xq5wmLJooDlMgvVarmWfGM44g==", - "requires": { - "assert-plus": "^1.0.0" - } - }, - "data-fns": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/data-fns/-/data-fns-1.1.0.tgz", - "integrity": "sha512-/rJzdbnuY3DVgzqsfEfc+tJLuAKYaHzkUxSMRIU3dxKFeWGD/MGhrgAfuwSOmgfJ8enygztp9DeuvoSxauppIg==", - "requires": { - "unit-fns": "^0.1.6" - } - }, - "dataloader": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/dataloader/-/dataloader-2.1.0.tgz", - "integrity": "sha512-qTcEYLen3r7ojZNgVUaRggOI+KM7jrKxXeSHhogh/TWxYMeONEMqY+hmkobiYQozsGIyg9OYVzO4ZIfoB4I0pQ==", - "optional": true - }, - "debounce-fn": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/debounce-fn/-/debounce-fn-4.0.0.tgz", - "integrity": "sha512-8pYCQiL9Xdcg0UPSD3d+0KMlOjp+KGU5EPwYddgzQ7DATsg4fuUDjQtsYLmWjnk2obnNHgV3vE2Y4jejSOJVBQ==", - "optional": true, - "requires": { - "mimic-fn": "^3.0.0" - } - }, - "debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "requires": { - "ms": "2.1.2" - } - }, - "decamelize": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-4.0.0.tgz", - "integrity": "sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ==" - }, - "decimal.js": { - "version": "10.4.3", - "resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.4.3.tgz", - "integrity": "sha512-VBBaLc1MgL5XpzgIP7ny5Z6Nx3UrRkIViUkPUdtl9aya5amy3De1gsUUSB1g3+3sExYNjCAsAznmukyxCb1GRA==" - }, - "decimal.js-light": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/decimal.js-light/-/decimal.js-light-2.5.1.tgz", - "integrity": "sha512-qIMFpTMZmny+MMIitAB6D7iVPEorVw6YQRWkvarTkT4tBeSLLiHzcwj6q0MmYSFCiVpiqPJTJEYIrpcPzVEIvg==" - }, - "decode-uri-component": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.2.tgz", - "integrity": "sha512-FqUYQ+8o158GyGTrMFJms9qh3CqTKvAqgqsTnkLI8sKu0028orqBhxNMFkFen0zGyg6epACD32pjVk58ngIErQ==" - }, - "decomment": { - "version": "0.9.5", - "resolved": "https://registry.npmjs.org/decomment/-/decomment-0.9.5.tgz", - "integrity": "sha512-h0TZ8t6Dp49duwyDHo3iw67mnh9/UpFiSSiOb5gDK1sqoXzrfX/SQxIUQd2R2QEiSnqib0KF2fnKnGfAhAs6lg==", - "requires": { - "esprima": "4.0.1" - } - }, - "decompress": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/decompress/-/decompress-4.2.1.tgz", - "integrity": "sha512-e48kc2IjU+2Zw8cTb6VZcJQ3lgVbS4uuB1TfCHbiZIP/haNXm+SVyhu+87jts5/3ROpd82GSVCoNs/z8l4ZOaQ==", - "requires": { - "decompress-tar": "^4.0.0", - "decompress-tarbz2": "^4.0.0", - "decompress-targz": "^4.0.0", - "decompress-unzip": "^4.0.1", - "graceful-fs": "^4.1.10", - "make-dir": "^1.0.0", - "pify": "^2.3.0", - "strip-dirs": "^2.0.0" - }, - "dependencies": { - "pify": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", - "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==" - } - } - }, - "decompress-tar": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/decompress-tar/-/decompress-tar-4.1.1.tgz", - "integrity": "sha512-JdJMaCrGpB5fESVyxwpCx4Jdj2AagLmv3y58Qy4GE6HMVjWz1FeVQk1Ct4Kye7PftcdOo/7U7UKzYBJgqnGeUQ==", - "requires": { - "file-type": "^5.2.0", - "is-stream": "^1.1.0", - "tar-stream": "^1.5.2" - }, - "dependencies": { - "bl": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/bl/-/bl-1.2.3.tgz", - "integrity": "sha512-pvcNpa0UU69UT341rO6AYy4FVAIkUHuZXRIWbq+zHnsVcRzDDjIAhGuuYoi0d//cwIwtt4pkpKycWEfjdV+vww==", - "requires": { - "readable-stream": "^2.3.5", - "safe-buffer": "^5.1.1" - } - }, - "readable-stream": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" - }, - "string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "requires": { - "safe-buffer": "~5.1.0" - } - }, - "tar-stream": { - "version": "1.6.2", - "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-1.6.2.tgz", - "integrity": "sha512-rzS0heiNf8Xn7/mpdSVVSMAWAoy9bfb1WOTYC78Z0UQKeKa/CWS8FOq0lKGNa8DWKAn9gxjCvMLYc5PGXYlK2A==", - "requires": { - "bl": "^1.0.0", - "buffer-alloc": "^1.2.0", - "end-of-stream": "^1.0.0", - "fs-constants": "^1.0.0", - "readable-stream": "^2.3.0", - "to-buffer": "^1.1.1", - "xtend": "^4.0.0" - } - } - } - }, - "decompress-tarbz2": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/decompress-tarbz2/-/decompress-tarbz2-4.1.1.tgz", - "integrity": "sha512-s88xLzf1r81ICXLAVQVzaN6ZmX4A6U4z2nMbOwobxkLoIIfjVMBg7TeguTUXkKeXni795B6y5rnvDw7rxhAq9A==", - "requires": { - "decompress-tar": "^4.1.0", - "file-type": "^6.1.0", - "is-stream": "^1.1.0", - "seek-bzip": "^1.0.5", - "unbzip2-stream": "^1.0.9" - }, - "dependencies": { - "file-type": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/file-type/-/file-type-6.2.0.tgz", - "integrity": "sha512-YPcTBDV+2Tm0VqjybVd32MHdlEGAtuxS3VAYsumFokDSMG+ROT5wawGlnHDoz7bfMcMDt9hxuXvXwoKUx2fkOg==" - } - } - }, - "decompress-targz": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/decompress-targz/-/decompress-targz-4.1.1.tgz", - "integrity": "sha512-4z81Znfr6chWnRDNfFNqLwPvm4db3WuZkqV+UgXQzSngG3CEKdBkw5jrv3axjjL96glyiiKjsxJG3X6WBZwX3w==", - "requires": { - "decompress-tar": "^4.1.1", - "file-type": "^5.2.0", - "is-stream": "^1.1.0" - } - }, - "decompress-unzip": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/decompress-unzip/-/decompress-unzip-4.0.1.tgz", - "integrity": "sha512-1fqeluvxgnn86MOh66u8FjbtJpAFv5wgCT9Iw8rcBqQcCo5tO8eiJw7NNTrvt9n4CRBVq7CstiS922oPgyGLrw==", - "requires": { - "file-type": "^3.8.0", - "get-stream": "^2.2.0", - "pify": "^2.3.0", - "yauzl": "^2.4.2" - }, - "dependencies": { - "file-type": { - "version": "3.9.0", - "resolved": "https://registry.npmjs.org/file-type/-/file-type-3.9.0.tgz", - "integrity": "sha512-RLoqTXE8/vPmMuTI88DAzhMYC99I8BWv7zYP4A1puo5HIjEJ5EX48ighy4ZyKMG9EDXxBgW6e++cn7d1xuFghA==" - }, - "get-stream": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-2.3.1.tgz", - "integrity": "sha512-AUGhbbemXxrZJRD5cDvKtQxLuYaIbNtDTK8YqupCI393Q2KSTreEsLUN3ZxAWFGiKTzL6nKuzfcIvieflUX9qA==", - "requires": { - "object-assign": "^4.0.1", - "pinkie-promise": "^2.0.0" - } - }, - "pify": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", - "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==" - } - } - }, - "deep-eql": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-4.1.3.tgz", - "integrity": "sha512-WaEtAOpRA1MQ0eohqZjpGD8zdI0Ovsm8mmFhaDN8dvDZzyoUMcYDnf5Y6iu7HTXxf8JDS23qWa4a+hKCDyOPzw==", - "requires": { - "type-detect": "^4.0.0" - } - }, - "deep-extend": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", - "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==", - "dev": true - }, - "defender-base-client": { - "version": "1.44.0", - "resolved": "https://registry.npmjs.org/defender-base-client/-/defender-base-client-1.44.0.tgz", - "integrity": "sha512-8ZgGA93+FlxNwG9LN1nu/Au5AyCKwAWJGNf0VLiPmh4GX/Nali/7kv72K+OtZgGxTLtKDKfgN4cnhEZwfrc8dg==", - "dev": true, - "requires": { - "amazon-cognito-identity-js": "^6.0.1", - "async-retry": "^1.3.3", - "axios": "^0.21.2", - "lodash": "^4.17.19", - "node-fetch": "^2.6.0" - } - }, - "defer-to-connect": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-2.0.1.tgz", - "integrity": "sha512-4tvttepXG1VaYGrRibk5EwJd1t4udunSOVMdLSAL6mId1ix438oPwPZMALY41FCijukO1L0twNcGsdzS7dHgDg==" - }, - "deferred-leveldown": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/deferred-leveldown/-/deferred-leveldown-5.3.0.tgz", - "integrity": "sha512-a59VOT+oDy7vtAbLRCZwWgxu2BaCfd5Hk7wxJd48ei7I+nsg8Orlb9CLG0PMZienk9BSUKgeAqkO2+Lw+1+Ukw==", - "requires": { - "abstract-leveldown": "~6.2.1", - "inherits": "^2.0.3" - }, - "dependencies": { - "abstract-leveldown": { - "version": "6.2.3", - "resolved": "https://registry.npmjs.org/abstract-leveldown/-/abstract-leveldown-6.2.3.tgz", - "integrity": "sha512-BsLm5vFMRUrrLeCcRc+G0t2qOaTzpoJQLOubq2XM72eNpjF5UdU5o/5NvlNhx95XHcAvcl8OMXr4mlg/fRgUXQ==", - "requires": { - "buffer": "^5.5.0", - "immediate": "^3.2.3", - "level-concat-iterator": "~2.0.0", - "level-supports": "~1.0.0", - "xtend": "~4.0.0" - } - }, - "buffer": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", - "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", - "requires": { - "base64-js": "^1.3.1", - "ieee754": "^1.1.13" - } - }, - "level-supports": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/level-supports/-/level-supports-1.0.1.tgz", - "integrity": "sha512-rXM7GYnW8gsl1vedTJIbzOrRv85c/2uCMpiiCzO2fndd06U/kUXEEU9evYn4zFggBOg36IsBW8LzqIpETwwQzg==", - "requires": { - "xtend": "^4.0.2" - } - } - } - }, - "define-properties": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.4.tgz", - "integrity": "sha512-uckOqKcfaVvtBdsVkdPv3XjveQJsNQqmhXgRi8uhvWWuPYZCNlzT8qAyblUgNoXdHdjMTzAqeGjAoli8f+bzPA==", - "requires": { - "has-property-descriptors": "^1.0.0", - "object-keys": "^1.1.1" - } - }, - "delay": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/delay/-/delay-5.0.0.tgz", - "integrity": "sha512-ReEBKkIfe4ya47wlPYf/gu5ib6yUG0/Aez0JQZQz94kiWtRQvZIQbTiehsnwHvLSWJnQdhVeqYue7Id1dKr0qw==" - }, - "delayed-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", - "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==" - }, - "depd": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", - "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==" - }, - "des.js": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/des.js/-/des.js-1.0.1.tgz", - "integrity": "sha512-Q0I4pfFrv2VPd34/vfLrFOoRmlYj3OV50i7fskps1jZWK1kApMWWT9G6RRUeYedLcBDIhnSDaUvJMb3AhUlaEA==", - "requires": { - "inherits": "^2.0.1", - "minimalistic-assert": "^1.0.0" - } - }, - "destroy": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", - "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==" - }, - "detect-indent": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/detect-indent/-/detect-indent-5.0.0.tgz", - "integrity": "sha512-rlpvsxUtM0PQvy9iZe640/IWwWYyBsTApREbA1pHOpmOUIl9MkP/U4z7vTtg4Oaojvqhxt7sdufnT0EzGaR31g==", - "dev": true - }, - "devtools-protocol": { - "version": "0.0.981744", - "resolved": "https://registry.npmjs.org/devtools-protocol/-/devtools-protocol-0.0.981744.tgz", - "integrity": "sha512-0cuGS8+jhR67Fy7qG3i3Pc7Aw494sb9yG9QgpG97SFVWwolgYjlhJg7n+UaHxOQT30d1TYu/EYe9k01ivLErIg==", - "optional": true - }, - "diff": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/diff/-/diff-5.0.0.tgz", - "integrity": "sha512-/VTCrvm5Z0JGty/BWHljh+BAiw3IK+2j87NGMu8Nwc/f48WoDAC395uomO9ZD117ZOBaHmkX1oyLvkVM/aIT3w==" - }, - "diffie-hellman": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/diffie-hellman/-/diffie-hellman-5.0.3.tgz", - "integrity": "sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg==", - "requires": { - "bn.js": "^4.1.0", - "miller-rabin": "^4.0.0", - "randombytes": "^2.0.0" - }, - "dependencies": { - "bn.js": { - "version": "4.12.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==" - } - } - }, - "docker-modem": { - "version": "3.0.8", - "resolved": "https://registry.npmjs.org/docker-modem/-/docker-modem-3.0.8.tgz", - "integrity": "sha512-f0ReSURdM3pcKPNS30mxOHSbaFLcknGmQjwSfmbcdOw1XWKXVhukM3NJHhr7NpY9BIyyWQb0EBo3KQvvuU5egQ==", - "requires": { - "debug": "^4.1.1", - "readable-stream": "^3.5.0", - "split-ca": "^1.0.1", - "ssh2": "^1.11.0" - } - }, - "dockerode": { - "version": "3.3.5", - "resolved": "https://registry.npmjs.org/dockerode/-/dockerode-3.3.5.tgz", - "integrity": "sha512-/0YNa3ZDNeLr/tSckmD69+Gq+qVNhvKfAHNeZJBnp7EOP6RGKV8ORrJHkUn20So5wU+xxT7+1n5u8PjHbfjbSA==", - "requires": { - "@balena/dockerignore": "^1.0.2", - "docker-modem": "^3.0.0", - "tar-fs": "~2.0.1" - }, - "dependencies": { - "tar-fs": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-2.0.1.tgz", - "integrity": "sha512-6tzWDMeroL87uF/+lin46k+Q+46rAJ0SyPGz7OW7wTgblI273hsBqk2C1j0/xNadNLKDTUL9BukSjB7cwgmlPA==", - "requires": { - "chownr": "^1.1.1", - "mkdirp-classic": "^0.5.2", - "pump": "^3.0.0", - "tar-stream": "^2.0.0" - } - } - } - }, - "dom-serializer": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-2.0.0.tgz", - "integrity": "sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==", - "devOptional": true, - "requires": { - "domelementtype": "^2.3.0", - "domhandler": "^5.0.2", - "entities": "^4.2.0" - } - }, - "dom-walk": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/dom-walk/-/dom-walk-0.1.2.tgz", - "integrity": "sha512-6QvTW9mrGeIegrFXdtQi9pk7O/nSK6lSdXW2eqUspN5LWD7UTji2Fqw5V2YLjBpHEoU9Xl/eUWNpDeZvoyOv2w==" - }, - "domelementtype": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz", - "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==", - "devOptional": true - }, - "domhandler": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-5.0.3.tgz", - "integrity": "sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==", - "devOptional": true, - "requires": { - "domelementtype": "^2.3.0" - } - }, - "domutils": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/domutils/-/domutils-3.0.1.tgz", - "integrity": "sha512-z08c1l761iKhDFtfXO04C7kTdPBLi41zwOZl00WS8b5eiaebNpY00HKbztwBq+e3vyqWNwWF3mP9YLUeqIrF+Q==", - "devOptional": true, - "requires": { - "dom-serializer": "^2.0.0", - "domelementtype": "^2.3.0", - "domhandler": "^5.0.1" - } - }, - "dot-case": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/dot-case/-/dot-case-2.1.1.tgz", - "integrity": "sha512-HnM6ZlFqcajLsyudHq7LeeLDr2rFAVYtDv/hV5qchQEidSck8j9OPUsXY9KwJv/lHMtYlX4DjRQqwFYa+0r8Ug==", - "requires": { - "no-case": "^2.2.0" - } - }, - "dot-prop": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-6.0.1.tgz", - "integrity": "sha512-tE7ztYzXHIeyvc7N+hR3oi7FIbf/NIjVP9hmAt3yMXzrQ072/fpjGLx2GxNxGxUl5V73MEqYzioOMoVhGMJ5cA==", - "optional": true, - "requires": { - "is-obj": "^2.0.0" - } - }, - "dotenv": { - "version": "16.3.1", - "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.3.1.tgz", - "integrity": "sha512-IPzF4w4/Rd94bA9imS68tZBaYyBWSCE47V1RGuMrB94iyTOIEwRmVL2x/4An+6mETpLrKJ5hQkB8W4kFAadeIQ==" - }, - "double-ended-queue": { - "version": "2.1.0-0", - "resolved": "https://registry.npmjs.org/double-ended-queue/-/double-ended-queue-2.1.0-0.tgz", - "integrity": "sha512-+BNfZ+deCo8hMNpDqDnvT+c0XpJ5cUa6mqYq89bho2Ifze4URTqRkcwR399hWoTrTkbZ/XJYDgP6rc7pRgffEQ==", - "optional": true - }, - "dtrace-provider": { - "version": "0.8.8", - "resolved": "https://registry.npmjs.org/dtrace-provider/-/dtrace-provider-0.8.8.tgz", - "integrity": "sha512-b7Z7cNtHPhH9EJhNNbbeqTcXB8LGFFZhq1PGgEvpeHlzd36bhbdTWoE/Ba/YguqpBSlAPKnARWhVlhunCMwfxg==", - "optional": true, - "requires": { - "nan": "^2.14.0" - } - }, - "duplexer3": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/duplexer3/-/duplexer3-0.1.5.tgz", - "integrity": "sha512-1A8za6ws41LQgv9HrE/66jyC5yuSjQ3L/KOpFtoBilsAK2iA2wuS5rTt1OCzIvtS2V7nVmedsUU+DGRcjBmOYA==" - }, - "ecc-jsbn": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", - "integrity": "sha512-eh9O+hwRHNbG4BLTjEl3nw044CkGm5X6LoaCf7LPp7UU8Qrt47JYNi6nPX8xjW97TKGKm1ouctg0QSpZe9qrnw==", - "requires": { - "jsbn": "~0.1.0", - "safer-buffer": "^2.1.0" - } - }, - "ee-first": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", - "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==" - }, - "electron-to-chromium": { - "version": "1.4.284", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.284.tgz", - "integrity": "sha512-M8WEXFuKXMYMVr45fo8mq0wUrrJHheiKZf6BArTKk9ZBYCKJEOU5H8cdWgDT+qCVZf7Na4lVUaZsA+h6uA9+PA==" - }, - "elliptic": { - "version": "6.5.4", - "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.4.tgz", - "integrity": "sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ==", - "requires": { - "bn.js": "^4.11.9", - "brorand": "^1.1.0", - "hash.js": "^1.0.0", - "hmac-drbg": "^1.0.1", - "inherits": "^2.0.4", - "minimalistic-assert": "^1.0.1", - "minimalistic-crypto-utils": "^1.0.1" - }, - "dependencies": { - "bn.js": { - "version": "4.12.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==" - } - } - }, - "emittery": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/emittery/-/emittery-0.4.1.tgz", - "integrity": "sha512-r4eRSeStEGf6M5SKdrQhhLK5bOwOBxQhIE3YSTnZE3GpKiLfnnhE+tPtrJE79+eDJgm39BM6LSoI8SCx4HbwlQ==", - "optional": true - }, - "emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" - }, - "encode-utf8": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/encode-utf8/-/encode-utf8-1.0.3.tgz", - "integrity": "sha512-ucAnuBEhUK4boH2HjVYG5Q2mQyPorvv0u/ocS+zhdw0S8AlHYY+GOFhP1Gio5z4icpP2ivFSvhtFjQi8+T9ppw==", - "dev": true - }, - "encodeurl": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", - "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==" - }, - "encoding-down": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/encoding-down/-/encoding-down-6.3.0.tgz", - "integrity": "sha512-QKrV0iKR6MZVJV08QY0wp1e7vF6QbhnbQhb07bwpEyuz4uZiZgPlEGdkCROuFkUwdxlFaiPIhjyarH1ee/3vhw==", - "requires": { - "abstract-leveldown": "^6.2.1", - "inherits": "^2.0.3", - "level-codec": "^9.0.0", - "level-errors": "^2.0.0" - } - }, - "end-of-stream": { - "version": "1.4.4", - "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", - "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", - "requires": { - "once": "^1.4.0" - } - }, - "end-stream": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/end-stream/-/end-stream-0.1.0.tgz", - "integrity": "sha512-Brl10T8kYnc75IepKizW6Y9liyW8ikz1B7n/xoHrJxoVSSjoqPn30sb7XVFfQERK4QfUMYRGs9dhWwtt2eu6uA==", - "optional": true, - "requires": { - "write-stream": "~0.4.3" - } - }, - "enquirer": { - "version": "2.3.6", - "resolved": "https://registry.npmjs.org/enquirer/-/enquirer-2.3.6.tgz", - "integrity": "sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg==", - "requires": { - "ansi-colors": "^4.1.1" - }, - "dependencies": { - "ansi-colors": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.3.tgz", - "integrity": "sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==" - } - } - }, - "entities": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/entities/-/entities-4.4.0.tgz", - "integrity": "sha512-oYp7156SP8LkeGD0GF85ad1X9Ai79WtRsZ2gxJqtBuzH+98YUV6jkHEKlZkMbcrjJjIVJNIDP/3WL9wQkoPbWA==", - "devOptional": true - }, - "env-paths": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz", - "integrity": "sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==" - }, - "errno": { - "version": "0.1.8", - "resolved": "https://registry.npmjs.org/errno/-/errno-0.1.8.tgz", - "integrity": "sha512-dJ6oBr5SQ1VSd9qkk7ByRgb/1SH4JZjCHSW/mr63/QcXO9zLVxvJ6Oy13nio03rxpSnVDDjFor75SjVeZWPW/A==", - "requires": { - "prr": "~1.0.1" - } - }, - "error-ex": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", - "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", - "requires": { - "is-arrayish": "^0.2.1" - } - }, - "es-abstract": { - "version": "1.20.4", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.20.4.tgz", - "integrity": "sha512-0UtvRN79eMe2L+UNEF1BwRe364sj/DXhQ/k5FmivgoSdpM90b8Jc0mDzKMGo7QS0BVbOP/bTwBKNnDc9rNzaPA==", - "requires": { - "call-bind": "^1.0.2", - "es-to-primitive": "^1.2.1", - "function-bind": "^1.1.1", - "function.prototype.name": "^1.1.5", - "get-intrinsic": "^1.1.3", - "get-symbol-description": "^1.0.0", - "has": "^1.0.3", - "has-property-descriptors": "^1.0.0", - "has-symbols": "^1.0.3", - "internal-slot": "^1.0.3", - "is-callable": "^1.2.7", - "is-negative-zero": "^2.0.2", - "is-regex": "^1.1.4", - "is-shared-array-buffer": "^1.0.2", - "is-string": "^1.0.7", - "is-weakref": "^1.0.2", - "object-inspect": "^1.12.2", - "object-keys": "^1.1.1", - "object.assign": "^4.1.4", - "regexp.prototype.flags": "^1.4.3", - "safe-regex-test": "^1.0.0", - "string.prototype.trimend": "^1.0.5", - "string.prototype.trimstart": "^1.0.5", - "unbox-primitive": "^1.0.2" - } - }, - "es-array-method-boxes-properly": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/es-array-method-boxes-properly/-/es-array-method-boxes-properly-1.0.0.tgz", - "integrity": "sha512-wd6JXUmyHmt8T5a2xreUwKcGPq6f1f+WwIJkijUqiGcJz1qqnZgP6XIK+QyIWU5lT7imeNxUll48bziG+TSYcA==" - }, - "es-to-primitive": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", - "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", - "requires": { - "is-callable": "^1.1.4", - "is-date-object": "^1.0.1", - "is-symbol": "^1.0.2" - } - }, - "es5-ext": { - "version": "0.10.62", - "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.62.tgz", - "integrity": "sha512-BHLqn0klhEpnOKSrzn/Xsz2UIW8j+cGmo9JLzr8BiUapV8hPL9+FliFqjwr9ngW7jWdnxv6eO+/LqyhJVqgrjA==", - "requires": { - "es6-iterator": "^2.0.3", - "es6-symbol": "^3.1.3", - "next-tick": "^1.1.0" - } - }, - "es6-iterator": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/es6-iterator/-/es6-iterator-2.0.3.tgz", - "integrity": "sha512-zw4SRzoUkd+cl+ZoE15A9o1oQd920Bb0iOJMQkQhl3jNc03YqVjAhG7scf9C5KWRU/R13Orf588uCC6525o02g==", - "requires": { - "d": "1", - "es5-ext": "^0.10.35", - "es6-symbol": "^3.1.1" - } - }, - "es6-promise": { - "version": "4.2.8", - "resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-4.2.8.tgz", - "integrity": "sha512-HJDGx5daxeIvxdBxvG2cb9g4tEvwIk3i8+nhX0yGrYmZUzbkdg8QbDevheDB8gd0//uPj4c1EQua8Q+MViT0/w==" - }, - "es6-promisify": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/es6-promisify/-/es6-promisify-5.0.0.tgz", - "integrity": "sha512-C+d6UdsYDk0lMebHNR4S2NybQMMngAOnOwYBQjTOiv0MkoJMP0Myw2mgpDLBcpfCmRLxyFqYhS/CfOENq4SJhQ==", - "requires": { - "es6-promise": "^4.0.3" - } - }, - "es6-symbol": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.3.tgz", - "integrity": "sha512-NJ6Yn3FuDinBaBRWl/q5X/s4koRHBrgKAu+yGI6JCBeiu3qrcbJhwT2GeR/EXVfylRk8dpQVJoLEFhK+Mu31NA==", - "requires": { - "d": "^1.0.1", - "ext": "^1.1.2" - } - }, - "es6-weak-map": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/es6-weak-map/-/es6-weak-map-2.0.3.tgz", - "integrity": "sha512-p5um32HOTO1kP+w7PRnB+5lQ43Z6muuMuIMffvDN8ZB4GcnjLBV6zGStpbASIMk4DCAvEaamhe2zhyCb/QXXsA==", - "requires": { - "d": "1", - "es5-ext": "^0.10.46", - "es6-iterator": "^2.0.3", - "es6-symbol": "^3.1.1" - } - }, - "escalade": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", - "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==" - }, - "escape-html": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", - "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==" - }, - "escape-latex": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/escape-latex/-/escape-latex-1.2.0.tgz", - "integrity": "sha512-nV5aVWW1K0wEiUIEdZ4erkGGH8mDxGyxSeqPzRNtWP7ataw+/olFObw7hujFWlVjNsaDFw5VZ5NzVSIqRgfTiw==" - }, - "escape-string-regexp": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", - "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==" - }, - "esm": { - "version": "3.2.25", - "resolved": "https://registry.npmjs.org/esm/-/esm-3.2.25.tgz", - "integrity": "sha512-U1suiZ2oDVWv4zPO56S0NcR5QriEahGtdN2OR6FiOG4WJvcjBVFB0qI4+eKoWFH483PKGuLuu6V8Z4T5g63UVA==" - }, - "esprima": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", - "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==" - }, - "etag": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", - "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==" - }, - "eth-block-tracker": { - "version": "4.4.3", - "resolved": "https://registry.npmjs.org/eth-block-tracker/-/eth-block-tracker-4.4.3.tgz", - "integrity": "sha512-A8tG4Z4iNg4mw5tP1Vung9N9IjgMNqpiMoJ/FouSFwNCGHv2X0mmOYwtQOJzki6XN7r7Tyo01S29p7b224I4jw==", - "requires": { - "@babel/plugin-transform-runtime": "^7.5.5", - "@babel/runtime": "^7.5.5", - "eth-query": "^2.1.0", - "json-rpc-random-id": "^1.0.1", - "pify": "^3.0.0", - "safe-event-emitter": "^1.0.1" - } - }, - "eth-ens-namehash": { - "version": "2.0.8", - "resolved": "https://registry.npmjs.org/eth-ens-namehash/-/eth-ens-namehash-2.0.8.tgz", - "integrity": "sha512-VWEI1+KJfz4Km//dadyvBBoBeSQ0MHTXPvr8UIXiLW6IanxvAV+DmlZAijZwAyggqGUfwQBeHf7tc9wzc1piSw==", - "requires": { - "idna-uts46-hx": "^2.3.1", - "js-sha3": "^0.5.7" - }, - "dependencies": { - "js-sha3": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/js-sha3/-/js-sha3-0.5.7.tgz", - "integrity": "sha512-GII20kjaPX0zJ8wzkTbNDYMY7msuZcTWk8S5UOh6806Jq/wz1J8/bnr8uGU0DAUmYDjj2Mr4X1cW8v/GLYnR+g==" - } - } - }, - "eth-gas-reporter": { - "version": "0.2.25", - "resolved": "https://registry.npmjs.org/eth-gas-reporter/-/eth-gas-reporter-0.2.25.tgz", - "integrity": "sha512-1fRgyE4xUB8SoqLgN3eDfpDfwEfRxh2Sz1b7wzFbyQA+9TekMmvSjjoRu9SKcSVyK+vLkLIsVbJDsTWjw195OQ==", - "requires": { - "@ethersproject/abi": "^5.0.0-beta.146", - "@solidity-parser/parser": "^0.14.0", - "cli-table3": "^0.5.0", - "colors": "1.4.0", - "ethereum-cryptography": "^1.0.3", - "ethers": "^4.0.40", - "fs-readdir-recursive": "^1.1.0", - "lodash": "^4.17.14", - "markdown-table": "^1.1.3", - "mocha": "^7.1.1", - "req-cwd": "^2.0.0", - "request": "^2.88.0", - "request-promise-native": "^1.0.5", - "sha1": "^1.1.1", - "sync-request": "^6.0.0" - }, - "dependencies": { - "ansi-colors": { - "version": "3.2.3", - "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-3.2.3.tgz", - "integrity": "sha512-LEHHyuhlPY3TmuUYMh2oz89lTShfvgbmzaBcxve9t/9Wuy7Dwf4yoAKcND7KFT1HAQfqZ12qtc+DUrBMeKF9nw==" - }, - "ansi-regex": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.1.tgz", - "integrity": "sha512-ILlv4k/3f6vfQ4OoP2AGvirOktlQ98ZEL1k9FaQjxa3L1abBgbuTDAdPOpvbGncC0BTVQrl+OM8xZGK6tWXt7g==" - }, - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "requires": { - "color-convert": "^1.9.0" - } - }, - "argparse": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", - "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", - "requires": { - "sprintf-js": "~1.0.2" - } - }, - "bn.js": { - "version": "4.12.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==" - }, - "brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "requires": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "camelcase": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", - "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==" - }, - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "dependencies": { - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "requires": { - "has-flag": "^3.0.0" - } - } - } - }, - "chokidar": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.3.0.tgz", - "integrity": "sha512-dGmKLDdT3Gdl7fBUe8XK+gAtGmzy5Fn0XkkWQuYxGIgWVPPse2CxFA5mtrlD0TOHaHjEUqkWNyP1XdHoJES/4A==", - "requires": { - "anymatch": "~3.1.1", - "braces": "~3.0.2", - "fsevents": "~2.1.1", - "glob-parent": "~5.1.0", - "is-binary-path": "~2.1.0", - "is-glob": "~4.0.1", - "normalize-path": "~3.0.0", - "readdirp": "~3.2.0" - } - }, - "cli-table3": { - "version": "0.5.1", - "resolved": "https://registry.npmjs.org/cli-table3/-/cli-table3-0.5.1.tgz", - "integrity": "sha512-7Qg2Jrep1S/+Q3EceiZtQcDPWxhAvBw+ERf1162v4sikJrvojMHFqXt8QIVha8UlH9rgU0BeWPytZ9/TzYqlUw==", - "requires": { - "colors": "^1.1.2", - "object-assign": "^4.1.0", - "string-width": "^2.1.1" - } - }, - "cliui": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-5.0.0.tgz", - "integrity": "sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA==", - "requires": { - "string-width": "^3.1.0", - "strip-ansi": "^5.2.0", - "wrap-ansi": "^5.1.0" - }, - "dependencies": { - "string-width": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", - "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", - "requires": { - "emoji-regex": "^7.0.1", - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^5.1.0" - } - }, - "strip-ansi": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", - "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", - "requires": { - "ansi-regex": "^4.1.0" - } - } - } - }, - "color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "requires": { - "color-name": "1.1.3" - } - }, - "color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==" - }, - "debug": { - "version": "3.2.6", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", - "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", - "requires": { - "ms": "^2.1.1" - } - }, - "decamelize": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", - "integrity": "sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==" - }, - "diff": { - "version": "3.5.0", - "resolved": "https://registry.npmjs.org/diff/-/diff-3.5.0.tgz", - "integrity": "sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA==" - }, - "emoji-regex": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", - "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==" - }, - "escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==" - }, - "ethers": { - "version": "4.0.49", - "resolved": "https://registry.npmjs.org/ethers/-/ethers-4.0.49.tgz", - "integrity": "sha512-kPltTvWiyu+OktYy1IStSO16i2e7cS9D9OxZ81q2UUaiNPVrm/RTcbxamCXF9VUSKzJIdJV68EAIhTEVBalRWg==", - "requires": { - "aes-js": "3.0.0", - "bn.js": "^4.11.9", - "elliptic": "6.5.4", - "hash.js": "1.1.3", - "js-sha3": "0.5.7", - "scrypt-js": "2.0.4", - "setimmediate": "1.0.4", - "uuid": "2.0.1", - "xmlhttprequest": "1.8.0" - } - }, - "find-up": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", - "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", - "requires": { - "locate-path": "^3.0.0" - } - }, - "flat": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/flat/-/flat-4.1.1.tgz", - "integrity": "sha512-FmTtBsHskrU6FJ2VxCnsDb84wu9zhmO3cUX2kGFb5tuwhfXxGciiT0oRY+cck35QmG+NmGh5eLz6lLCpWTqwpA==", - "requires": { - "is-buffer": "~2.0.3" - } - }, - "glob": { - "version": "7.1.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.3.tgz", - "integrity": "sha512-vcfuiIxogLV4DlGBHIUOwI0IbrJ8HWPc4MU7HzviGeNho/UJDfi6B5p3sHeWIQ0KGIU0Jpxi5ZHxemQfLkkAwQ==", - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - }, - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==" - }, - "hash.js": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.3.tgz", - "integrity": "sha512-/UETyP0W22QILqS+6HowevwhEFJ3MBJnwTf75Qob9Wz9t0DPuisL8kW8YZMK62dHAKE1c1p+gY1TtOLY+USEHA==", - "requires": { - "inherits": "^2.0.3", - "minimalistic-assert": "^1.0.0" - } - }, - "is-fullwidth-code-point": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha512-VHskAKYM8RfSFXwee5t5cbN5PZeq1Wrh6qd5bkyiXIf6UQcN6w/A0eXM9r6t8d+GYOh+o6ZhiEnb88LN/Y8m2w==" - }, - "js-sha3": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/js-sha3/-/js-sha3-0.5.7.tgz", - "integrity": "sha512-GII20kjaPX0zJ8wzkTbNDYMY7msuZcTWk8S5UOh6806Jq/wz1J8/bnr8uGU0DAUmYDjj2Mr4X1cW8v/GLYnR+g==" - }, - "js-yaml": { - "version": "3.13.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.13.1.tgz", - "integrity": "sha512-YfbcO7jXDdyj0DGxYVSlSeQNHbD7XPWvrVWeVUujrQEoZzWJIRrCPoyk6kL6IAjAG2IolMK4T0hNUe0HOUs5Jw==", - "requires": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" - } - }, - "locate-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", - "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", - "requires": { - "p-locate": "^3.0.0", - "path-exists": "^3.0.0" - } - }, - "log-symbols": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-3.0.0.tgz", - "integrity": "sha512-dSkNGuI7iG3mfvDzUuYZyvk5dD9ocYCYzNU6CYDE6+Xqd+gwme6Z00NS3dUh8mq/73HaEtT7m6W+yUPtU6BZnQ==", - "requires": { - "chalk": "^2.4.2" - } - }, - "minimatch": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", - "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", - "requires": { - "brace-expansion": "^1.1.7" - } - }, - "mkdirp": { - "version": "0.5.5", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", - "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", - "requires": { - "minimist": "^1.2.5" - } - }, - "mocha": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/mocha/-/mocha-7.2.0.tgz", - "integrity": "sha512-O9CIypScywTVpNaRrCAgoUnJgozpIofjKUYmJhiCIJMiuYnLI6otcb1/kpW9/n/tJODHGZ7i8aLQoDVsMtOKQQ==", - "requires": { - "ansi-colors": "3.2.3", - "browser-stdout": "1.3.1", - "chokidar": "3.3.0", - "debug": "3.2.6", - "diff": "3.5.0", - "escape-string-regexp": "1.0.5", - "find-up": "3.0.0", - "glob": "7.1.3", - "growl": "1.10.5", - "he": "1.2.0", - "js-yaml": "3.13.1", - "log-symbols": "3.0.0", - "minimatch": "3.0.4", - "mkdirp": "0.5.5", - "ms": "2.1.1", - "node-environment-flags": "1.0.6", - "object.assign": "4.1.0", - "strip-json-comments": "2.0.1", - "supports-color": "6.0.0", - "which": "1.3.1", - "wide-align": "1.1.3", - "yargs": "13.3.2", - "yargs-parser": "13.1.2", - "yargs-unparser": "1.6.0" - } - }, - "ms": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", - "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==" - }, - "object.assign": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.0.tgz", - "integrity": "sha512-exHJeq6kBKj58mqGyTQ9DFvrZC/eR6OwxzoM9YRoGBqrXYonaFyGiFMuc9VZrXf7DarreEwMpurG3dd+CNyW5w==", - "requires": { - "define-properties": "^1.1.2", - "function-bind": "^1.1.1", - "has-symbols": "^1.0.0", - "object-keys": "^1.0.11" - } - }, - "p-locate": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", - "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", - "requires": { - "p-limit": "^2.0.0" - } - }, - "path-exists": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", - "integrity": "sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==" - }, - "readdirp": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.2.0.tgz", - "integrity": "sha512-crk4Qu3pmXwgxdSgGhgA/eXiJAPQiX4GMOZZMXnqKxHX7TaoL+3gQVo/WeuAiogr07DpnfjIMpXXa+PAIvwPGQ==", - "requires": { - "picomatch": "^2.0.4" - } - }, - "require-main-filename": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz", - "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==" - }, - "scrypt-js": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/scrypt-js/-/scrypt-js-2.0.4.tgz", - "integrity": "sha512-4KsaGcPnuhtCZQCxFxN3GVYIhKFPTdLd8PLC552XwbMndtD0cjRFAhDuuydXQ0h08ZfPgzqe6EKHozpuH74iDw==" - }, - "setimmediate": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.4.tgz", - "integrity": "sha512-/TjEmXQVEzdod/FFskf3o7oOAsGhHf2j1dZqRFbDzq4F3mvvxflIIi4Hd3bLQE9y/CpwqfSQam5JakI/mi3Pog==" - }, - "string-width": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", - "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", - "requires": { - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^4.0.0" - } - }, - "strip-json-comments": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", - "integrity": "sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==" - }, - "supports-color": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.0.0.tgz", - "integrity": "sha512-on9Kwidc1IUQo+bQdhi8+Tijpo0e1SS6RoGo2guUwn5vdaxw8RXOF9Vb2ws+ihWOmh4JnCJOvaziZWP1VABaLg==", - "requires": { - "has-flag": "^3.0.0" - } - }, - "uuid": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-2.0.1.tgz", - "integrity": "sha512-nWg9+Oa3qD2CQzHIP4qKUqwNfzKn8P0LtFhotaCTFchsV7ZfDhAybeip/HZVeMIpZi9JgY1E3nUlwaCmZT1sEg==" - }, - "which-module": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz", - "integrity": "sha512-B+enWhmw6cjfVC7kS8Pj9pCrKSc5txArRyaYGe088shv/FGWH+0Rjx/xPgtsWfsUtS27FkP697E4DDhgrgoc0Q==" - }, - "wide-align": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.3.tgz", - "integrity": "sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA==", - "requires": { - "string-width": "^1.0.2 || 2" - } - }, - "wrap-ansi": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-5.1.0.tgz", - "integrity": "sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q==", - "requires": { - "ansi-styles": "^3.2.0", - "string-width": "^3.0.0", - "strip-ansi": "^5.0.0" - }, - "dependencies": { - "string-width": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", - "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", - "requires": { - "emoji-regex": "^7.0.1", - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^5.1.0" - } - }, - "strip-ansi": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", - "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", - "requires": { - "ansi-regex": "^4.1.0" - } - } - } - }, - "y18n": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.3.tgz", - "integrity": "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==" - }, - "yargs": { - "version": "13.3.2", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-13.3.2.tgz", - "integrity": "sha512-AX3Zw5iPruN5ie6xGRIDgqkT+ZhnRlZMLMHAs8tg7nRruy2Nb+i5o9bwghAogtM08q1dpr2LVoS8KSTMYpWXUw==", - "requires": { - "cliui": "^5.0.0", - "find-up": "^3.0.0", - "get-caller-file": "^2.0.1", - "require-directory": "^2.1.1", - "require-main-filename": "^2.0.0", - "set-blocking": "^2.0.0", - "string-width": "^3.0.0", - "which-module": "^2.0.0", - "y18n": "^4.0.0", - "yargs-parser": "^13.1.2" - }, - "dependencies": { - "string-width": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", - "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", - "requires": { - "emoji-regex": "^7.0.1", - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^5.1.0" - } - }, - "strip-ansi": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", - "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", - "requires": { - "ansi-regex": "^4.1.0" - } - } - } - }, - "yargs-parser": { - "version": "13.1.2", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-13.1.2.tgz", - "integrity": "sha512-3lbsNRf/j+A4QuSZfDRA7HRSfWrzO0YjqTJd5kjAq37Zep1CEgaYmrH9Q3GwPiB9cHyd1Y1UwggGhJGoxipbzg==", - "requires": { - "camelcase": "^5.0.0", - "decamelize": "^1.2.0" - } - }, - "yargs-unparser": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/yargs-unparser/-/yargs-unparser-1.6.0.tgz", - "integrity": "sha512-W9tKgmSn0DpSatfri0nx52Joq5hVXgeLiqR/5G0sZNDoLZFOr/xjBUDcShCOGNsBnEMNo1KAMBkTej1Hm62HTw==", - "requires": { - "flat": "^4.1.0", - "lodash": "^4.17.15", - "yargs": "^13.3.0" - } - } - } - }, - "eth-json-rpc-filters": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/eth-json-rpc-filters/-/eth-json-rpc-filters-4.2.2.tgz", - "integrity": "sha512-DGtqpLU7bBg63wPMWg1sCpkKCf57dJ+hj/k3zF26anXMzkmtSBDExL8IhUu7LUd34f0Zsce3PYNO2vV2GaTzaw==", - "requires": { - "@metamask/safe-event-emitter": "^2.0.0", - "async-mutex": "^0.2.6", - "eth-json-rpc-middleware": "^6.0.0", - "eth-query": "^2.1.2", - "json-rpc-engine": "^6.1.0", - "pify": "^5.0.0" - }, - "dependencies": { - "pify": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-5.0.0.tgz", - "integrity": "sha512-eW/gHNMlxdSP6dmG6uJip6FXN0EQBwm2clYYd8Wul42Cwu/DK8HEftzsapcNdYe2MfLiIwZqsDk2RDEsTE79hA==" - } - } - }, - "eth-json-rpc-infura": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/eth-json-rpc-infura/-/eth-json-rpc-infura-5.1.0.tgz", - "integrity": "sha512-THzLye3PHUSGn1EXMhg6WTLW9uim7LQZKeKaeYsS9+wOBcamRiCQVGHa6D2/4P0oS0vSaxsBnU/J6qvn0MPdow==", - "requires": { - "eth-json-rpc-middleware": "^6.0.0", - "eth-rpc-errors": "^3.0.0", - "json-rpc-engine": "^5.3.0", - "node-fetch": "^2.6.0" - }, - "dependencies": { - "json-rpc-engine": { - "version": "5.4.0", - "resolved": "https://registry.npmjs.org/json-rpc-engine/-/json-rpc-engine-5.4.0.tgz", - "integrity": "sha512-rAffKbPoNDjuRnXkecTjnsE3xLLrb00rEkdgalINhaYVYIxDwWtvYBr9UFbhTvPB1B2qUOLoFd/cV6f4Q7mh7g==", - "requires": { - "eth-rpc-errors": "^3.0.0", - "safe-event-emitter": "^1.0.1" - } - } - } - }, - "eth-json-rpc-middleware": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/eth-json-rpc-middleware/-/eth-json-rpc-middleware-6.0.0.tgz", - "integrity": "sha512-qqBfLU2Uq1Ou15Wox1s+NX05S9OcAEL4JZ04VZox2NS0U+RtCMjSxzXhLFWekdShUPZ+P8ax3zCO2xcPrp6XJQ==", - "requires": { - "btoa": "^1.2.1", - "clone": "^2.1.1", - "eth-query": "^2.1.2", - "eth-rpc-errors": "^3.0.0", - "eth-sig-util": "^1.4.2", - "ethereumjs-util": "^5.1.2", - "json-rpc-engine": "^5.3.0", - "json-stable-stringify": "^1.0.1", - "node-fetch": "^2.6.1", - "pify": "^3.0.0", - "safe-event-emitter": "^1.0.1" - }, - "dependencies": { - "bn.js": { - "version": "4.12.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==" - }, - "ethereum-cryptography": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-0.1.3.tgz", - "integrity": "sha512-w8/4x1SGGzc+tO97TASLja6SLd3fRIK2tLVcV2Gx4IB21hE19atll5Cq9o3d0ZmAYC/8aw0ipieTSiekAea4SQ==", - "requires": { - "@types/pbkdf2": "^3.0.0", - "@types/secp256k1": "^4.0.1", - "blakejs": "^1.1.0", - "browserify-aes": "^1.2.0", - "bs58check": "^2.1.2", - "create-hash": "^1.2.0", - "create-hmac": "^1.1.7", - "hash.js": "^1.1.7", - "keccak": "^3.0.0", - "pbkdf2": "^3.0.17", - "randombytes": "^2.1.0", - "safe-buffer": "^5.1.2", - "scrypt-js": "^3.0.0", - "secp256k1": "^4.0.1", - "setimmediate": "^1.0.5" - } - }, - "ethereumjs-util": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-5.2.1.tgz", - "integrity": "sha512-v3kT+7zdyCm1HIqWlLNrHGqHGLpGYIhjeHxQjnDXjLT2FyGJDsd3LWMYUo7pAFRrk86CR3nUJfhC81CCoJNNGQ==", - "requires": { - "bn.js": "^4.11.0", - "create-hash": "^1.1.2", - "elliptic": "^6.5.2", - "ethereum-cryptography": "^0.1.3", - "ethjs-util": "^0.1.3", - "rlp": "^2.0.0", - "safe-buffer": "^5.1.1" - } - }, - "json-rpc-engine": { - "version": "5.4.0", - "resolved": "https://registry.npmjs.org/json-rpc-engine/-/json-rpc-engine-5.4.0.tgz", - "integrity": "sha512-rAffKbPoNDjuRnXkecTjnsE3xLLrb00rEkdgalINhaYVYIxDwWtvYBr9UFbhTvPB1B2qUOLoFd/cV6f4Q7mh7g==", - "requires": { - "eth-rpc-errors": "^3.0.0", - "safe-event-emitter": "^1.0.1" - } - } - } - }, - "eth-lib": { - "version": "0.1.29", - "resolved": "https://registry.npmjs.org/eth-lib/-/eth-lib-0.1.29.tgz", - "integrity": "sha512-bfttrr3/7gG4E02HoWTDUcDDslN003OlOoBxk9virpAZQ1ja/jDgwkWB8QfJF7ojuEowrqy+lzp9VcJG7/k5bQ==", - "requires": { - "bn.js": "^4.11.6", - "elliptic": "^6.4.0", - "nano-json-stream-parser": "^0.1.2", - "servify": "^0.1.12", - "ws": "^3.0.0", - "xhr-request-promise": "^0.1.2" - }, - "dependencies": { - "bn.js": { - "version": "4.12.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==" - }, - "safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" - }, - "ws": { - "version": "3.3.3", - "resolved": "https://registry.npmjs.org/ws/-/ws-3.3.3.tgz", - "integrity": "sha512-nnWLa/NwZSt4KQJu51MYlCcSQ5g7INpOrOMt4XV8j4dqTXdmlUmSHQ8/oLC069ckre0fRsgfvsKwbTdtKLCDkA==", - "requires": { - "async-limiter": "~1.0.0", - "safe-buffer": "~5.1.0", - "ultron": "~1.1.0" - } - } - } - }, - "eth-query": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/eth-query/-/eth-query-2.1.2.tgz", - "integrity": "sha512-srES0ZcvwkR/wd5OQBRA1bIJMww1skfGS0s8wlwK3/oNP4+wnds60krvu5R1QbpRQjMmpG5OMIWro5s7gvDPsA==", - "requires": { - "json-rpc-random-id": "^1.0.0", - "xtend": "^4.0.1" - } - }, - "eth-rpc-errors": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/eth-rpc-errors/-/eth-rpc-errors-3.0.0.tgz", - "integrity": "sha512-iPPNHPrLwUlR9xCSYm7HHQjWBasor3+KZfRvwEWxMz3ca0yqnlBeJrnyphkGIXZ4J7AMAaOLmwy4AWhnxOiLxg==", - "requires": { - "fast-safe-stringify": "^2.0.6" - } - }, - "eth-sig-util": { - "version": "1.4.2", - "resolved": "https://registry.npmjs.org/eth-sig-util/-/eth-sig-util-1.4.2.tgz", - "integrity": "sha512-iNZ576iTOGcfllftB73cPB5AN+XUQAT/T8xzsILsghXC1o8gJUqe3RHlcDqagu+biFpYQ61KQrZZJza8eRSYqw==", - "requires": { - "ethereumjs-abi": "git+https://github.com/ethereumjs/ethereumjs-abi.git", - "ethereumjs-util": "^5.1.1" - }, - "dependencies": { - "bn.js": { - "version": "4.12.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==" - }, - "ethereum-cryptography": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-0.1.3.tgz", - "integrity": "sha512-w8/4x1SGGzc+tO97TASLja6SLd3fRIK2tLVcV2Gx4IB21hE19atll5Cq9o3d0ZmAYC/8aw0ipieTSiekAea4SQ==", - "requires": { - "@types/pbkdf2": "^3.0.0", - "@types/secp256k1": "^4.0.1", - "blakejs": "^1.1.0", - "browserify-aes": "^1.2.0", - "bs58check": "^2.1.2", - "create-hash": "^1.2.0", - "create-hmac": "^1.1.7", - "hash.js": "^1.1.7", - "keccak": "^3.0.0", - "pbkdf2": "^3.0.17", - "randombytes": "^2.1.0", - "safe-buffer": "^5.1.2", - "scrypt-js": "^3.0.0", - "secp256k1": "^4.0.1", - "setimmediate": "^1.0.5" - } - }, - "ethereumjs-util": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-5.2.1.tgz", - "integrity": "sha512-v3kT+7zdyCm1HIqWlLNrHGqHGLpGYIhjeHxQjnDXjLT2FyGJDsd3LWMYUo7pAFRrk86CR3nUJfhC81CCoJNNGQ==", - "requires": { - "bn.js": "^4.11.0", - "create-hash": "^1.1.2", - "elliptic": "^6.5.2", - "ethereum-cryptography": "^0.1.3", - "ethjs-util": "^0.1.3", - "rlp": "^2.0.0", - "safe-buffer": "^5.1.1" - } - } - } - }, - "ethereum-bloom-filters": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/ethereum-bloom-filters/-/ethereum-bloom-filters-1.0.10.tgz", - "integrity": "sha512-rxJ5OFN3RwjQxDcFP2Z5+Q9ho4eIdEmSc2ht0fCu8Se9nbXjZ7/031uXoUYJ87KHCOdVeiUuwSnoS7hmYAGVHA==", - "requires": { - "js-sha3": "^0.8.0" - } - }, - "ethereum-common": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/ethereum-common/-/ethereum-common-0.2.0.tgz", - "integrity": "sha512-XOnAR/3rntJgbCdGhqdaLIxDLWKLmsZOGhHdBKadEr6gEnJLH52k93Ou+TUdFaPN3hJc3isBZBal3U/XZ15abA==" - }, - "ethereum-cryptography": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-1.1.2.tgz", - "integrity": "sha512-XDSJlg4BD+hq9N2FjvotwUET9Tfxpxc3kWGE2AqUG5vcbeunnbImVk3cj6e/xT3phdW21mE8R5IugU4fspQDcQ==", - "requires": { - "@noble/hashes": "1.1.2", - "@noble/secp256k1": "1.6.3", - "@scure/bip32": "1.1.0", - "@scure/bip39": "1.1.0" - }, - "dependencies": { - "@noble/hashes": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.1.2.tgz", - "integrity": "sha512-KYRCASVTv6aeUi1tsF8/vpyR7zpfs3FUzy2Jqm+MU+LmUKhQ0y2FpfwqkCcxSg2ua4GALJd8k2R76WxwZGbQpA==" - }, - "@noble/secp256k1": { - "version": "1.6.3", - "resolved": "https://registry.npmjs.org/@noble/secp256k1/-/secp256k1-1.6.3.tgz", - "integrity": "sha512-T04e4iTurVy7I8Sw4+c5OSN9/RkPlo1uKxAomtxQNLq8j1uPAqnsqG1bqvY3Jv7c13gyr6dui0zmh/I3+f/JaQ==" - } - } - }, - "ethereum-ens": { - "version": "0.8.0", - "resolved": "https://registry.npmjs.org/ethereum-ens/-/ethereum-ens-0.8.0.tgz", - "integrity": "sha512-a8cBTF4AWw1Q1Y37V1LSCS9pRY4Mh3f8vCg5cbXCCEJ3eno1hbI/+Ccv9SZLISYpqQhaglP3Bxb/34lS4Qf7Bg==", - "dev": true, - "requires": { - "bluebird": "^3.4.7", - "eth-ens-namehash": "^2.0.0", - "js-sha3": "^0.5.7", - "pako": "^1.0.4", - "underscore": "^1.8.3", - "web3": "^1.0.0-beta.34" - }, - "dependencies": { - "js-sha3": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/js-sha3/-/js-sha3-0.5.7.tgz", - "integrity": "sha512-GII20kjaPX0zJ8wzkTbNDYMY7msuZcTWk8S5UOh6806Jq/wz1J8/bnr8uGU0DAUmYDjj2Mr4X1cW8v/GLYnR+g==", - "dev": true - } - } - }, - "ethereum-protocol": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/ethereum-protocol/-/ethereum-protocol-1.0.1.tgz", - "integrity": "sha512-3KLX1mHuEsBW0dKG+c6EOJS1NBNqdCICvZW9sInmZTt5aY0oxmHVggYRE0lJu1tcnMD1K+AKHdLi6U43Awm1Vg==" - }, - "ethereum-waffle": { - "version": "4.0.10", - "resolved": "https://registry.npmjs.org/ethereum-waffle/-/ethereum-waffle-4.0.10.tgz", - "integrity": "sha512-iw9z1otq7qNkGDNcMoeNeLIATF9yKl1M8AIeu42ElfNBplq0e+5PeasQmm8ybY/elkZ1XyRO0JBQxQdVRb8bqQ==", - "dev": true, - "requires": { - "@ethereum-waffle/chai": "4.0.10", - "@ethereum-waffle/compiler": "4.0.3", - "@ethereum-waffle/mock-contract": "4.0.4", - "@ethereum-waffle/provider": "4.0.5", - "solc": "0.8.15", - "typechain": "^8.0.0" - }, - "dependencies": { - "commander": { - "version": "8.3.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-8.3.0.tgz", - "integrity": "sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==", - "dev": true - }, - "semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "dev": true - }, - "solc": { - "version": "0.8.15", - "resolved": "https://registry.npmjs.org/solc/-/solc-0.8.15.tgz", - "integrity": "sha512-Riv0GNHNk/SddN/JyEuFKwbcWcEeho15iyupTSHw5Np6WuXA5D8kEHbyzDHi6sqmvLzu2l+8b1YmL8Ytple+8w==", - "dev": true, - "requires": { - "command-exists": "^1.2.8", - "commander": "^8.1.0", - "follow-redirects": "^1.12.1", - "js-sha3": "0.8.0", - "memorystream": "^0.3.1", - "semver": "^5.5.0", - "tmp": "0.0.33" - } - } - } - }, - "ethereumjs-abi": { - "version": "git+ssh://git@github.com/ethereumjs/ethereumjs-abi.git#ee3994657fa7a427238e6ba92a84d0b529bbcde0", - "from": "ethereumjs-abi@0.6.8", - "requires": { - "bn.js": "^4.11.8", - "ethereumjs-util": "^6.0.0" - }, - "dependencies": { - "@types/bn.js": { - "version": "4.11.6", - "resolved": "https://registry.npmjs.org/@types/bn.js/-/bn.js-4.11.6.tgz", - "integrity": "sha512-pqr857jrp2kPuO9uRjZ3PwnJTjoQy+fcdxvBTvHm6dkmEL9q+hDD/2j/0ELOBPtPnS8LjCX0gI9nbl8lVkadpg==", - "requires": { - "@types/node": "*" - } - }, - "bn.js": { - "version": "4.12.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==" - }, - "ethereum-cryptography": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-0.1.3.tgz", - "integrity": "sha512-w8/4x1SGGzc+tO97TASLja6SLd3fRIK2tLVcV2Gx4IB21hE19atll5Cq9o3d0ZmAYC/8aw0ipieTSiekAea4SQ==", - "requires": { - "@types/pbkdf2": "^3.0.0", - "@types/secp256k1": "^4.0.1", - "blakejs": "^1.1.0", - "browserify-aes": "^1.2.0", - "bs58check": "^2.1.2", - "create-hash": "^1.2.0", - "create-hmac": "^1.1.7", - "hash.js": "^1.1.7", - "keccak": "^3.0.0", - "pbkdf2": "^3.0.17", - "randombytes": "^2.1.0", - "safe-buffer": "^5.1.2", - "scrypt-js": "^3.0.0", - "secp256k1": "^4.0.1", - "setimmediate": "^1.0.5" - } - }, - "ethereumjs-util": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-6.2.1.tgz", - "integrity": "sha512-W2Ktez4L01Vexijrm5EB6w7dg4n/TgpoYU4avuT5T3Vmnw/eCRtiBrJfQYS/DCSvDIOLn2k57GcHdeBcgVxAqw==", - "requires": { - "@types/bn.js": "^4.11.3", - "bn.js": "^4.11.0", - "create-hash": "^1.1.2", - "elliptic": "^6.5.2", - "ethereum-cryptography": "^0.1.3", - "ethjs-util": "0.1.6", - "rlp": "^2.2.3" - } - } - } - }, - "ethereumjs-account": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/ethereumjs-account/-/ethereumjs-account-2.0.5.tgz", - "integrity": "sha512-bgDojnXGjhMwo6eXQC0bY6UK2liSFUSMwwylOmQvZbSl/D7NXQ3+vrGO46ZeOgjGfxXmgIeVNDIiHw7fNZM4VA==", - "requires": { - "ethereumjs-util": "^5.0.0", - "rlp": "^2.0.0", - "safe-buffer": "^5.1.1" - }, - "dependencies": { - "bn.js": { - "version": "4.12.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==" - }, - "ethereum-cryptography": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-0.1.3.tgz", - "integrity": "sha512-w8/4x1SGGzc+tO97TASLja6SLd3fRIK2tLVcV2Gx4IB21hE19atll5Cq9o3d0ZmAYC/8aw0ipieTSiekAea4SQ==", - "requires": { - "@types/pbkdf2": "^3.0.0", - "@types/secp256k1": "^4.0.1", - "blakejs": "^1.1.0", - "browserify-aes": "^1.2.0", - "bs58check": "^2.1.2", - "create-hash": "^1.2.0", - "create-hmac": "^1.1.7", - "hash.js": "^1.1.7", - "keccak": "^3.0.0", - "pbkdf2": "^3.0.17", - "randombytes": "^2.1.0", - "safe-buffer": "^5.1.2", - "scrypt-js": "^3.0.0", - "secp256k1": "^4.0.1", - "setimmediate": "^1.0.5" - } - }, - "ethereumjs-util": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-5.2.1.tgz", - "integrity": "sha512-v3kT+7zdyCm1HIqWlLNrHGqHGLpGYIhjeHxQjnDXjLT2FyGJDsd3LWMYUo7pAFRrk86CR3nUJfhC81CCoJNNGQ==", - "requires": { - "bn.js": "^4.11.0", - "create-hash": "^1.1.2", - "elliptic": "^6.5.2", - "ethereum-cryptography": "^0.1.3", - "ethjs-util": "^0.1.3", - "rlp": "^2.0.0", - "safe-buffer": "^5.1.1" - } - } - } - }, - "ethereumjs-block": { - "version": "1.7.1", - "resolved": "https://registry.npmjs.org/ethereumjs-block/-/ethereumjs-block-1.7.1.tgz", - "integrity": "sha512-B+sSdtqm78fmKkBq78/QLKJbu/4Ts4P2KFISdgcuZUPDm9x+N7qgBPIIFUGbaakQh8bzuquiRVbdmvPKqbILRg==", - "requires": { - "async": "^2.0.1", - "ethereum-common": "0.2.0", - "ethereumjs-tx": "^1.2.2", - "ethereumjs-util": "^5.0.0", - "merkle-patricia-tree": "^2.1.2" - }, - "dependencies": { - "abstract-leveldown": { - "version": "2.6.3", - "resolved": "https://registry.npmjs.org/abstract-leveldown/-/abstract-leveldown-2.6.3.tgz", - "integrity": "sha512-2++wDf/DYqkPR3o5tbfdhF96EfMApo1GpPfzOsR/ZYXdkSmELlvOOEAl9iKkRsktMPHdGjO4rtkBpf2I7TiTeA==", - "requires": { - "xtend": "~4.0.0" - } - }, - "async": { - "version": "2.6.4", - "resolved": "https://registry.npmjs.org/async/-/async-2.6.4.tgz", - "integrity": "sha512-mzo5dfJYwAn29PeiJ0zvwTo04zj8HDJj0Mn8TD7sno7q12prdbnasKJHhkm2c1LgrhlJ0teaea8860oxi51mGA==", - "requires": { - "lodash": "^4.17.14" - } - }, - "bn.js": { - "version": "4.12.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==" - }, - "deferred-leveldown": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/deferred-leveldown/-/deferred-leveldown-1.2.2.tgz", - "integrity": "sha512-uukrWD2bguRtXilKt6cAWKyoXrTSMo5m7crUdLfWQmu8kIm88w3QZoUL+6nhpfKVmhHANER6Re3sKoNoZ3IKMA==", - "requires": { - "abstract-leveldown": "~2.6.0" - } - }, - "ethereum-cryptography": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-0.1.3.tgz", - "integrity": "sha512-w8/4x1SGGzc+tO97TASLja6SLd3fRIK2tLVcV2Gx4IB21hE19atll5Cq9o3d0ZmAYC/8aw0ipieTSiekAea4SQ==", - "requires": { - "@types/pbkdf2": "^3.0.0", - "@types/secp256k1": "^4.0.1", - "blakejs": "^1.1.0", - "browserify-aes": "^1.2.0", - "bs58check": "^2.1.2", - "create-hash": "^1.2.0", - "create-hmac": "^1.1.7", - "hash.js": "^1.1.7", - "keccak": "^3.0.0", - "pbkdf2": "^3.0.17", - "randombytes": "^2.1.0", - "safe-buffer": "^5.1.2", - "scrypt-js": "^3.0.0", - "secp256k1": "^4.0.1", - "setimmediate": "^1.0.5" - } - }, - "ethereumjs-tx": { - "version": "1.3.7", - "resolved": "https://registry.npmjs.org/ethereumjs-tx/-/ethereumjs-tx-1.3.7.tgz", - "integrity": "sha512-wvLMxzt1RPhAQ9Yi3/HKZTn0FZYpnsmQdbKYfUUpi4j1SEIcbkd9tndVjcPrufY3V7j2IebOpC00Zp2P/Ay2kA==", - "requires": { - "ethereum-common": "^0.0.18", - "ethereumjs-util": "^5.0.0" - }, - "dependencies": { - "ethereum-common": { - "version": "0.0.18", - "resolved": "https://registry.npmjs.org/ethereum-common/-/ethereum-common-0.0.18.tgz", - "integrity": "sha512-EoltVQTRNg2Uy4o84qpa2aXymXDJhxm7eos/ACOg0DG4baAbMjhbdAEsx9GeE8sC3XCxnYvrrzZDH8D8MtA2iQ==" - } - } - }, - "ethereumjs-util": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-5.2.1.tgz", - "integrity": "sha512-v3kT+7zdyCm1HIqWlLNrHGqHGLpGYIhjeHxQjnDXjLT2FyGJDsd3LWMYUo7pAFRrk86CR3nUJfhC81CCoJNNGQ==", - "requires": { - "bn.js": "^4.11.0", - "create-hash": "^1.1.2", - "elliptic": "^6.5.2", - "ethereum-cryptography": "^0.1.3", - "ethjs-util": "^0.1.3", - "rlp": "^2.0.0", - "safe-buffer": "^5.1.1" - } - }, - "level-codec": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/level-codec/-/level-codec-7.0.1.tgz", - "integrity": "sha512-Ua/R9B9r3RasXdRmOtd+t9TCOEIIlts+TN/7XTT2unhDaL6sJn83S3rUyljbr6lVtw49N3/yA0HHjpV6Kzb2aQ==" - }, - "level-errors": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/level-errors/-/level-errors-1.0.5.tgz", - "integrity": "sha512-/cLUpQduF6bNrWuAC4pwtUKA5t669pCsCi2XbmojG2tFeOr9j6ShtdDCtFFQO1DRt+EVZhx9gPzP9G2bUaG4ig==", - "requires": { - "errno": "~0.1.1" - } - }, - "level-iterator-stream": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/level-iterator-stream/-/level-iterator-stream-1.3.1.tgz", - "integrity": "sha512-1qua0RHNtr4nrZBgYlpV0qHHeHpcRRWTxEZJ8xsemoHAXNL5tbooh4tPEEqIqsbWCAJBmUmkwYK/sW5OrFjWWw==", - "requires": { - "inherits": "^2.0.1", - "level-errors": "^1.0.3", - "readable-stream": "^1.0.33", - "xtend": "^4.0.0" - }, - "dependencies": { - "isarray": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", - "integrity": "sha512-D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ==" - }, - "readable-stream": { - "version": "1.1.14", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz", - "integrity": "sha512-+MeVjFf4L44XUkhM1eYbD8fyEsxcV81pqMSR5gblfcLCHfZvbrqy4/qYHE+/R5HoBUT11WV5O08Cr1n3YXkWVQ==", - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.1", - "isarray": "0.0.1", - "string_decoder": "~0.10.x" - } - }, - "string_decoder": { - "version": "0.10.31", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", - "integrity": "sha512-ev2QzSzWPYmy9GuqfIVildA4OdcGLeFZQrq5ys6RtiuF+RQQiZWr8TZNyAcuVXyQRYfEO+MsoB/1BuQVhOJuoQ==" - } - } - }, - "level-ws": { - "version": "0.0.0", - "resolved": "https://registry.npmjs.org/level-ws/-/level-ws-0.0.0.tgz", - "integrity": "sha512-XUTaO/+Db51Uiyp/t7fCMGVFOTdtLS/NIACxE/GHsij15mKzxksZifKVjlXDF41JMUP/oM1Oc4YNGdKnc3dVLw==", - "requires": { - "readable-stream": "~1.0.15", - "xtend": "~2.1.1" - }, - "dependencies": { - "isarray": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", - "integrity": "sha512-D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ==" - }, - "readable-stream": { - "version": "1.0.34", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz", - "integrity": "sha512-ok1qVCJuRkNmvebYikljxJA/UEsKwLl2nI1OmaqAu4/UE+h0wKCHok4XkL/gvi39OacXvw59RJUOFUkDib2rHg==", - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.1", - "isarray": "0.0.1", - "string_decoder": "~0.10.x" - } - }, - "string_decoder": { - "version": "0.10.31", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", - "integrity": "sha512-ev2QzSzWPYmy9GuqfIVildA4OdcGLeFZQrq5ys6RtiuF+RQQiZWr8TZNyAcuVXyQRYfEO+MsoB/1BuQVhOJuoQ==" - }, - "xtend": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/xtend/-/xtend-2.1.2.tgz", - "integrity": "sha512-vMNKzr2rHP9Dp/e1NQFnLQlwlhp9L/LfvnsVdHxN1f+uggyVI3i08uD14GPvCToPkdsRfyPqIyYGmIk58V98ZQ==", - "requires": { - "object-keys": "~0.4.0" - } - } - } - }, - "levelup": { - "version": "1.3.9", - "resolved": "https://registry.npmjs.org/levelup/-/levelup-1.3.9.tgz", - "integrity": "sha512-VVGHfKIlmw8w1XqpGOAGwq6sZm2WwWLmlDcULkKWQXEA5EopA8OBNJ2Ck2v6bdk8HeEZSbCSEgzXadyQFm76sQ==", - "requires": { - "deferred-leveldown": "~1.2.1", - "level-codec": "~7.0.0", - "level-errors": "~1.0.3", - "level-iterator-stream": "~1.3.0", - "prr": "~1.0.1", - "semver": "~5.4.1", - "xtend": "~4.0.0" - } - }, - "memdown": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/memdown/-/memdown-1.4.1.tgz", - "integrity": "sha512-iVrGHZB8i4OQfM155xx8akvG9FIj+ht14DX5CQkCTG4EHzZ3d3sgckIf/Lm9ivZalEsFuEVnWv2B2WZvbrro2w==", - "requires": { - "abstract-leveldown": "~2.7.1", - "functional-red-black-tree": "^1.0.1", - "immediate": "^3.2.3", - "inherits": "~2.0.1", - "ltgt": "~2.2.0", - "safe-buffer": "~5.1.1" - }, - "dependencies": { - "abstract-leveldown": { - "version": "2.7.2", - "resolved": "https://registry.npmjs.org/abstract-leveldown/-/abstract-leveldown-2.7.2.tgz", - "integrity": "sha512-+OVvxH2rHVEhWLdbudP6p0+dNMXu8JA1CbhP19T8paTYAcX7oJ4OVjT+ZUVpv7mITxXHqDMej+GdqXBmXkw09w==", - "requires": { - "xtend": "~4.0.0" - } - } - } - }, - "merkle-patricia-tree": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/merkle-patricia-tree/-/merkle-patricia-tree-2.3.2.tgz", - "integrity": "sha512-81PW5m8oz/pz3GvsAwbauj7Y00rqm81Tzad77tHBwU7pIAtN+TJnMSOJhxBKflSVYhptMMb9RskhqHqrSm1V+g==", - "requires": { - "async": "^1.4.2", - "ethereumjs-util": "^5.0.0", - "level-ws": "0.0.0", - "levelup": "^1.2.1", - "memdown": "^1.0.0", - "readable-stream": "^2.0.0", - "rlp": "^2.0.0", - "semaphore": ">=1.0.1" - }, - "dependencies": { - "async": { - "version": "1.5.2", - "resolved": "https://registry.npmjs.org/async/-/async-1.5.2.tgz", - "integrity": "sha512-nSVgobk4rv61R9PUSDtYt7mPVB2olxNR5RWJcAsH676/ef11bUZwvu7+RGYrYauVdDPcO519v68wRhXQtxsV9w==" - } - } - }, - "object-keys": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-0.4.0.tgz", - "integrity": "sha512-ncrLw+X55z7bkl5PnUvHwFK9FcGuFYo9gtjws2XtSzL+aZ8tm830P60WJ0dSmFVaSalWieW5MD7kEdnXda9yJw==" - }, - "readable-stream": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" - }, - "semver": { - "version": "5.4.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.4.1.tgz", - "integrity": "sha512-WfG/X9+oATh81XtllIo/I8gOiY9EXRdv1cQdyykeXK17YcUW3EXUAi2To4pcH6nZtJPr7ZOpM5OMyWJZm+8Rsg==" - }, - "string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "requires": { - "safe-buffer": "~5.1.0" - } - } - } - }, - "ethereumjs-common": { - "version": "1.5.2", - "resolved": "https://registry.npmjs.org/ethereumjs-common/-/ethereumjs-common-1.5.2.tgz", - "integrity": "sha512-hTfZjwGX52GS2jcVO6E2sx4YuFnf0Fhp5ylo4pEPhEffNln7vS59Hr5sLnp3/QCazFLluuBZ+FZ6J5HTp0EqCA==" - }, - "ethereumjs-tx": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ethereumjs-tx/-/ethereumjs-tx-2.1.2.tgz", - "integrity": "sha512-zZEK1onCeiORb0wyCXUvg94Ve5It/K6GD1K+26KfFKodiBiS6d9lfCXlUKGBBdQ+bv7Day+JK0tj1K+BeNFRAw==", - "requires": { - "ethereumjs-common": "^1.5.0", - "ethereumjs-util": "^6.0.0" - }, - "dependencies": { - "@types/bn.js": { - "version": "4.11.6", - "resolved": "https://registry.npmjs.org/@types/bn.js/-/bn.js-4.11.6.tgz", - "integrity": "sha512-pqr857jrp2kPuO9uRjZ3PwnJTjoQy+fcdxvBTvHm6dkmEL9q+hDD/2j/0ELOBPtPnS8LjCX0gI9nbl8lVkadpg==", - "requires": { - "@types/node": "*" - } - }, - "bn.js": { - "version": "4.12.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==" - }, - "ethereum-cryptography": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-0.1.3.tgz", - "integrity": "sha512-w8/4x1SGGzc+tO97TASLja6SLd3fRIK2tLVcV2Gx4IB21hE19atll5Cq9o3d0ZmAYC/8aw0ipieTSiekAea4SQ==", - "requires": { - "@types/pbkdf2": "^3.0.0", - "@types/secp256k1": "^4.0.1", - "blakejs": "^1.1.0", - "browserify-aes": "^1.2.0", - "bs58check": "^2.1.2", - "create-hash": "^1.2.0", - "create-hmac": "^1.1.7", - "hash.js": "^1.1.7", - "keccak": "^3.0.0", - "pbkdf2": "^3.0.17", - "randombytes": "^2.1.0", - "safe-buffer": "^5.1.2", - "scrypt-js": "^3.0.0", - "secp256k1": "^4.0.1", - "setimmediate": "^1.0.5" - } - }, - "ethereumjs-util": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-6.2.1.tgz", - "integrity": "sha512-W2Ktez4L01Vexijrm5EB6w7dg4n/TgpoYU4avuT5T3Vmnw/eCRtiBrJfQYS/DCSvDIOLn2k57GcHdeBcgVxAqw==", - "requires": { - "@types/bn.js": "^4.11.3", - "bn.js": "^4.11.0", - "create-hash": "^1.1.2", - "elliptic": "^6.5.2", - "ethereum-cryptography": "^0.1.3", - "ethjs-util": "0.1.6", - "rlp": "^2.2.3" - } - } - } - }, - "ethereumjs-util": { - "version": "7.1.5", - "resolved": "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-7.1.5.tgz", - "integrity": "sha512-SDl5kKrQAudFBUe5OJM9Ac6WmMyYmXX/6sTmLZ3ffG2eY6ZIGBes3pEDxNN6V72WyOw4CPD5RomKdsa8DAAwLg==", - "requires": { - "@types/bn.js": "^5.1.0", - "bn.js": "^5.1.2", - "create-hash": "^1.1.2", - "ethereum-cryptography": "^0.1.3", - "rlp": "^2.2.4" - }, - "dependencies": { - "ethereum-cryptography": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-0.1.3.tgz", - "integrity": "sha512-w8/4x1SGGzc+tO97TASLja6SLd3fRIK2tLVcV2Gx4IB21hE19atll5Cq9o3d0ZmAYC/8aw0ipieTSiekAea4SQ==", - "requires": { - "@types/pbkdf2": "^3.0.0", - "@types/secp256k1": "^4.0.1", - "blakejs": "^1.1.0", - "browserify-aes": "^1.2.0", - "bs58check": "^2.1.2", - "create-hash": "^1.2.0", - "create-hmac": "^1.1.7", - "hash.js": "^1.1.7", - "keccak": "^3.0.0", - "pbkdf2": "^3.0.17", - "randombytes": "^2.1.0", - "safe-buffer": "^5.1.2", - "scrypt-js": "^3.0.0", - "secp256k1": "^4.0.1", - "setimmediate": "^1.0.5" - } - } - } - }, - "ethereumjs-vm": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/ethereumjs-vm/-/ethereumjs-vm-2.6.0.tgz", - "integrity": "sha512-r/XIUik/ynGbxS3y+mvGnbOKnuLo40V5Mj1J25+HEO63aWYREIqvWeRO/hnROlMBE5WoniQmPmhiaN0ctiHaXw==", - "requires": { - "async": "^2.1.2", - "async-eventemitter": "^0.2.2", - "ethereumjs-account": "^2.0.3", - "ethereumjs-block": "~2.2.0", - "ethereumjs-common": "^1.1.0", - "ethereumjs-util": "^6.0.0", - "fake-merkle-patricia-tree": "^1.0.1", - "functional-red-black-tree": "^1.0.1", - "merkle-patricia-tree": "^2.3.2", - "rustbn.js": "~0.2.0", - "safe-buffer": "^5.1.1" - }, - "dependencies": { - "@types/bn.js": { - "version": "4.11.6", - "resolved": "https://registry.npmjs.org/@types/bn.js/-/bn.js-4.11.6.tgz", - "integrity": "sha512-pqr857jrp2kPuO9uRjZ3PwnJTjoQy+fcdxvBTvHm6dkmEL9q+hDD/2j/0ELOBPtPnS8LjCX0gI9nbl8lVkadpg==", - "requires": { - "@types/node": "*" - } - }, - "abstract-leveldown": { - "version": "2.6.3", - "resolved": "https://registry.npmjs.org/abstract-leveldown/-/abstract-leveldown-2.6.3.tgz", - "integrity": "sha512-2++wDf/DYqkPR3o5tbfdhF96EfMApo1GpPfzOsR/ZYXdkSmELlvOOEAl9iKkRsktMPHdGjO4rtkBpf2I7TiTeA==", - "requires": { - "xtend": "~4.0.0" - } - }, - "async": { - "version": "2.6.4", - "resolved": "https://registry.npmjs.org/async/-/async-2.6.4.tgz", - "integrity": "sha512-mzo5dfJYwAn29PeiJ0zvwTo04zj8HDJj0Mn8TD7sno7q12prdbnasKJHhkm2c1LgrhlJ0teaea8860oxi51mGA==", - "requires": { - "lodash": "^4.17.14" - } - }, - "bn.js": { - "version": "4.12.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==" - }, - "deferred-leveldown": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/deferred-leveldown/-/deferred-leveldown-1.2.2.tgz", - "integrity": "sha512-uukrWD2bguRtXilKt6cAWKyoXrTSMo5m7crUdLfWQmu8kIm88w3QZoUL+6nhpfKVmhHANER6Re3sKoNoZ3IKMA==", - "requires": { - "abstract-leveldown": "~2.6.0" - } - }, - "ethereum-cryptography": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-0.1.3.tgz", - "integrity": "sha512-w8/4x1SGGzc+tO97TASLja6SLd3fRIK2tLVcV2Gx4IB21hE19atll5Cq9o3d0ZmAYC/8aw0ipieTSiekAea4SQ==", - "requires": { - "@types/pbkdf2": "^3.0.0", - "@types/secp256k1": "^4.0.1", - "blakejs": "^1.1.0", - "browserify-aes": "^1.2.0", - "bs58check": "^2.1.2", - "create-hash": "^1.2.0", - "create-hmac": "^1.1.7", - "hash.js": "^1.1.7", - "keccak": "^3.0.0", - "pbkdf2": "^3.0.17", - "randombytes": "^2.1.0", - "safe-buffer": "^5.1.2", - "scrypt-js": "^3.0.0", - "secp256k1": "^4.0.1", - "setimmediate": "^1.0.5" - } - }, - "ethereumjs-block": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/ethereumjs-block/-/ethereumjs-block-2.2.2.tgz", - "integrity": "sha512-2p49ifhek3h2zeg/+da6XpdFR3GlqY3BIEiqxGF8j9aSRIgkb7M1Ky+yULBKJOu8PAZxfhsYA+HxUk2aCQp3vg==", - "requires": { - "async": "^2.0.1", - "ethereumjs-common": "^1.5.0", - "ethereumjs-tx": "^2.1.1", - "ethereumjs-util": "^5.0.0", - "merkle-patricia-tree": "^2.1.2" - }, - "dependencies": { - "ethereumjs-util": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-5.2.1.tgz", - "integrity": "sha512-v3kT+7zdyCm1HIqWlLNrHGqHGLpGYIhjeHxQjnDXjLT2FyGJDsd3LWMYUo7pAFRrk86CR3nUJfhC81CCoJNNGQ==", - "requires": { - "bn.js": "^4.11.0", - "create-hash": "^1.1.2", - "elliptic": "^6.5.2", - "ethereum-cryptography": "^0.1.3", - "ethjs-util": "^0.1.3", - "rlp": "^2.0.0", - "safe-buffer": "^5.1.1" - } - } - } - }, - "ethereumjs-util": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-6.2.1.tgz", - "integrity": "sha512-W2Ktez4L01Vexijrm5EB6w7dg4n/TgpoYU4avuT5T3Vmnw/eCRtiBrJfQYS/DCSvDIOLn2k57GcHdeBcgVxAqw==", - "requires": { - "@types/bn.js": "^4.11.3", - "bn.js": "^4.11.0", - "create-hash": "^1.1.2", - "elliptic": "^6.5.2", - "ethereum-cryptography": "^0.1.3", - "ethjs-util": "0.1.6", - "rlp": "^2.2.3" - } - }, - "level-codec": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/level-codec/-/level-codec-7.0.1.tgz", - "integrity": "sha512-Ua/R9B9r3RasXdRmOtd+t9TCOEIIlts+TN/7XTT2unhDaL6sJn83S3rUyljbr6lVtw49N3/yA0HHjpV6Kzb2aQ==" - }, - "level-errors": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/level-errors/-/level-errors-1.0.5.tgz", - "integrity": "sha512-/cLUpQduF6bNrWuAC4pwtUKA5t669pCsCi2XbmojG2tFeOr9j6ShtdDCtFFQO1DRt+EVZhx9gPzP9G2bUaG4ig==", - "requires": { - "errno": "~0.1.1" - } - }, - "level-iterator-stream": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/level-iterator-stream/-/level-iterator-stream-1.3.1.tgz", - "integrity": "sha512-1qua0RHNtr4nrZBgYlpV0qHHeHpcRRWTxEZJ8xsemoHAXNL5tbooh4tPEEqIqsbWCAJBmUmkwYK/sW5OrFjWWw==", - "requires": { - "inherits": "^2.0.1", - "level-errors": "^1.0.3", - "readable-stream": "^1.0.33", - "xtend": "^4.0.0" - }, - "dependencies": { - "isarray": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", - "integrity": "sha512-D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ==" - }, - "readable-stream": { - "version": "1.1.14", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz", - "integrity": "sha512-+MeVjFf4L44XUkhM1eYbD8fyEsxcV81pqMSR5gblfcLCHfZvbrqy4/qYHE+/R5HoBUT11WV5O08Cr1n3YXkWVQ==", - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.1", - "isarray": "0.0.1", - "string_decoder": "~0.10.x" - } - }, - "string_decoder": { - "version": "0.10.31", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", - "integrity": "sha512-ev2QzSzWPYmy9GuqfIVildA4OdcGLeFZQrq5ys6RtiuF+RQQiZWr8TZNyAcuVXyQRYfEO+MsoB/1BuQVhOJuoQ==" - } - } - }, - "level-ws": { - "version": "0.0.0", - "resolved": "https://registry.npmjs.org/level-ws/-/level-ws-0.0.0.tgz", - "integrity": "sha512-XUTaO/+Db51Uiyp/t7fCMGVFOTdtLS/NIACxE/GHsij15mKzxksZifKVjlXDF41JMUP/oM1Oc4YNGdKnc3dVLw==", - "requires": { - "readable-stream": "~1.0.15", - "xtend": "~2.1.1" - }, - "dependencies": { - "isarray": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", - "integrity": "sha512-D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ==" - }, - "readable-stream": { - "version": "1.0.34", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz", - "integrity": "sha512-ok1qVCJuRkNmvebYikljxJA/UEsKwLl2nI1OmaqAu4/UE+h0wKCHok4XkL/gvi39OacXvw59RJUOFUkDib2rHg==", - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.1", - "isarray": "0.0.1", - "string_decoder": "~0.10.x" - } - }, - "string_decoder": { - "version": "0.10.31", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", - "integrity": "sha512-ev2QzSzWPYmy9GuqfIVildA4OdcGLeFZQrq5ys6RtiuF+RQQiZWr8TZNyAcuVXyQRYfEO+MsoB/1BuQVhOJuoQ==" - }, - "xtend": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/xtend/-/xtend-2.1.2.tgz", - "integrity": "sha512-vMNKzr2rHP9Dp/e1NQFnLQlwlhp9L/LfvnsVdHxN1f+uggyVI3i08uD14GPvCToPkdsRfyPqIyYGmIk58V98ZQ==", - "requires": { - "object-keys": "~0.4.0" - } - } - } - }, - "levelup": { - "version": "1.3.9", - "resolved": "https://registry.npmjs.org/levelup/-/levelup-1.3.9.tgz", - "integrity": "sha512-VVGHfKIlmw8w1XqpGOAGwq6sZm2WwWLmlDcULkKWQXEA5EopA8OBNJ2Ck2v6bdk8HeEZSbCSEgzXadyQFm76sQ==", - "requires": { - "deferred-leveldown": "~1.2.1", - "level-codec": "~7.0.0", - "level-errors": "~1.0.3", - "level-iterator-stream": "~1.3.0", - "prr": "~1.0.1", - "semver": "~5.4.1", - "xtend": "~4.0.0" - } - }, - "memdown": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/memdown/-/memdown-1.4.1.tgz", - "integrity": "sha512-iVrGHZB8i4OQfM155xx8akvG9FIj+ht14DX5CQkCTG4EHzZ3d3sgckIf/Lm9ivZalEsFuEVnWv2B2WZvbrro2w==", - "requires": { - "abstract-leveldown": "~2.7.1", - "functional-red-black-tree": "^1.0.1", - "immediate": "^3.2.3", - "inherits": "~2.0.1", - "ltgt": "~2.2.0", - "safe-buffer": "~5.1.1" - }, - "dependencies": { - "abstract-leveldown": { - "version": "2.7.2", - "resolved": "https://registry.npmjs.org/abstract-leveldown/-/abstract-leveldown-2.7.2.tgz", - "integrity": "sha512-+OVvxH2rHVEhWLdbudP6p0+dNMXu8JA1CbhP19T8paTYAcX7oJ4OVjT+ZUVpv7mITxXHqDMej+GdqXBmXkw09w==", - "requires": { - "xtend": "~4.0.0" - } - } - } - }, - "merkle-patricia-tree": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/merkle-patricia-tree/-/merkle-patricia-tree-2.3.2.tgz", - "integrity": "sha512-81PW5m8oz/pz3GvsAwbauj7Y00rqm81Tzad77tHBwU7pIAtN+TJnMSOJhxBKflSVYhptMMb9RskhqHqrSm1V+g==", - "requires": { - "async": "^1.4.2", - "ethereumjs-util": "^5.0.0", - "level-ws": "0.0.0", - "levelup": "^1.2.1", - "memdown": "^1.0.0", - "readable-stream": "^2.0.0", - "rlp": "^2.0.0", - "semaphore": ">=1.0.1" - }, - "dependencies": { - "async": { - "version": "1.5.2", - "resolved": "https://registry.npmjs.org/async/-/async-1.5.2.tgz", - "integrity": "sha512-nSVgobk4rv61R9PUSDtYt7mPVB2olxNR5RWJcAsH676/ef11bUZwvu7+RGYrYauVdDPcO519v68wRhXQtxsV9w==" - }, - "ethereumjs-util": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-5.2.1.tgz", - "integrity": "sha512-v3kT+7zdyCm1HIqWlLNrHGqHGLpGYIhjeHxQjnDXjLT2FyGJDsd3LWMYUo7pAFRrk86CR3nUJfhC81CCoJNNGQ==", - "requires": { - "bn.js": "^4.11.0", - "create-hash": "^1.1.2", - "elliptic": "^6.5.2", - "ethereum-cryptography": "^0.1.3", - "ethjs-util": "^0.1.3", - "rlp": "^2.0.0", - "safe-buffer": "^5.1.1" - } - } - } - }, - "object-keys": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-0.4.0.tgz", - "integrity": "sha512-ncrLw+X55z7bkl5PnUvHwFK9FcGuFYo9gtjws2XtSzL+aZ8tm830P60WJ0dSmFVaSalWieW5MD7kEdnXda9yJw==" - }, - "readable-stream": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" - }, - "semver": { - "version": "5.4.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.4.1.tgz", - "integrity": "sha512-WfG/X9+oATh81XtllIo/I8gOiY9EXRdv1cQdyykeXK17YcUW3EXUAi2To4pcH6nZtJPr7ZOpM5OMyWJZm+8Rsg==" - }, - "string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "requires": { - "safe-buffer": "~5.1.0" - } - } - } - }, - "ethers": { - "version": "5.7.2", - "resolved": "https://registry.npmjs.org/ethers/-/ethers-5.7.2.tgz", - "integrity": "sha512-wswUsmWo1aOK8rR7DIKiWSw9DbLWe6x98Jrn8wcTflTVvaXhAMaB5zGAXy0GYQEQp9iO1iSHWVyARQm11zUtyg==", - "requires": { - "@ethersproject/abi": "5.7.0", - "@ethersproject/abstract-provider": "5.7.0", - "@ethersproject/abstract-signer": "5.7.0", - "@ethersproject/address": "5.7.0", - "@ethersproject/base64": "5.7.0", - "@ethersproject/basex": "5.7.0", - "@ethersproject/bignumber": "5.7.0", - "@ethersproject/bytes": "5.7.0", - "@ethersproject/constants": "5.7.0", - "@ethersproject/contracts": "5.7.0", - "@ethersproject/hash": "5.7.0", - "@ethersproject/hdnode": "5.7.0", - "@ethersproject/json-wallets": "5.7.0", - "@ethersproject/keccak256": "5.7.0", - "@ethersproject/logger": "5.7.0", - "@ethersproject/networks": "5.7.1", - "@ethersproject/pbkdf2": "5.7.0", - "@ethersproject/properties": "5.7.0", - "@ethersproject/providers": "5.7.2", - "@ethersproject/random": "5.7.0", - "@ethersproject/rlp": "5.7.0", - "@ethersproject/sha2": "5.7.0", - "@ethersproject/signing-key": "5.7.0", - "@ethersproject/solidity": "5.7.0", - "@ethersproject/strings": "5.7.0", - "@ethersproject/transactions": "5.7.0", - "@ethersproject/units": "5.7.0", - "@ethersproject/wallet": "5.7.0", - "@ethersproject/web": "5.7.1", - "@ethersproject/wordlists": "5.7.0" - } - }, - "ethjs-abi": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/ethjs-abi/-/ethjs-abi-0.2.1.tgz", - "integrity": "sha512-g2AULSDYI6nEJyJaEVEXtTimRY2aPC2fi7ddSy0W+LXvEVL8Fe1y76o43ecbgdUKwZD+xsmEgX1yJr1Ia3r1IA==", - "dev": true, - "requires": { - "bn.js": "4.11.6", - "js-sha3": "0.5.5", - "number-to-bn": "1.7.0" - }, - "dependencies": { - "bn.js": { - "version": "4.11.6", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.6.tgz", - "integrity": "sha512-XWwnNNFCuuSQ0m3r3C4LE3EiORltHd9M05pq6FOlVeiophzRbMo50Sbz1ehl8K3Z+jw9+vmgnXefY1hz8X+2wA==", - "dev": true - }, - "js-sha3": { - "version": "0.5.5", - "resolved": "https://registry.npmjs.org/js-sha3/-/js-sha3-0.5.5.tgz", - "integrity": "sha512-yLLwn44IVeunwjpDVTDZmQeVbB0h+dZpY2eO68B/Zik8hu6dH+rKeLxwua79GGIvW6xr8NBAcrtiUbYrTjEFTA==", - "dev": true - } - } - }, - "ethjs-unit": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/ethjs-unit/-/ethjs-unit-0.1.6.tgz", - "integrity": "sha512-/Sn9Y0oKl0uqQuvgFk/zQgR7aw1g36qX/jzSQ5lSwlO0GigPymk4eGQfeNTD03w1dPOqfz8V77Cy43jH56pagw==", - "requires": { - "bn.js": "4.11.6", - "number-to-bn": "1.7.0" - }, - "dependencies": { - "bn.js": { - "version": "4.11.6", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.6.tgz", - "integrity": "sha512-XWwnNNFCuuSQ0m3r3C4LE3EiORltHd9M05pq6FOlVeiophzRbMo50Sbz1ehl8K3Z+jw9+vmgnXefY1hz8X+2wA==" - } - } - }, - "ethjs-util": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/ethjs-util/-/ethjs-util-0.1.6.tgz", - "integrity": "sha512-CUnVOQq7gSpDHZVVrQW8ExxUETWrnrvXYvYz55wOU8Uj4VCgw56XC2B/fVqQN+f7gmrnRHSLVnFAwsCuNwji8w==", - "requires": { - "is-hex-prefixed": "1.0.0", - "strip-hex-prefix": "1.0.0" - } - }, - "event-emitter": { - "version": "0.3.5", - "resolved": "https://registry.npmjs.org/event-emitter/-/event-emitter-0.3.5.tgz", - "integrity": "sha512-D9rRn9y7kLPnJ+hMq7S/nhvoKwwvVJahBi2BPmx3bvbsEdK3W9ii8cBSGjP+72/LnM4n6fo3+dkCX5FeTQruXA==", - "requires": { - "d": "1", - "es5-ext": "~0.10.14" - } - }, - "event-target-shim": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/event-target-shim/-/event-target-shim-5.0.1.tgz", - "integrity": "sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==", - "optional": true - }, - "eventemitter3": { - "version": "4.0.7", - "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz", - "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==" - }, - "events": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", - "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==" - }, - "evm-bn": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/evm-bn/-/evm-bn-1.1.2.tgz", - "integrity": "sha512-Lq8CT1EAjSeN+Yk0h1hpSwnZyMA4Xir6fQD4vlStljAuW2xr7qLOEGDLGsTa9sU2e40EYIumA4wYhMC/e+lyKw==", - "requires": { - "@ethersproject/bignumber": "^5.5.0", - "from-exponential": "^1.1.1" - } - }, - "evp_bytestokey": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz", - "integrity": "sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==", - "requires": { - "md5.js": "^1.3.4", - "safe-buffer": "^5.1.1" - } - }, - "express": { - "version": "4.18.2", - "resolved": "https://registry.npmjs.org/express/-/express-4.18.2.tgz", - "integrity": "sha512-5/PsL6iGPdfQ/lKM1UuielYgv3BUoJfz1aUwU9vHZ+J7gyvwdQXFEBIEIaxeGf0GIcreATNyBExtalisDbuMqQ==", - "requires": { - "accepts": "~1.3.8", - "array-flatten": "1.1.1", - "body-parser": "1.20.1", - "content-disposition": "0.5.4", - "content-type": "~1.0.4", - "cookie": "0.5.0", - "cookie-signature": "1.0.6", - "debug": "2.6.9", - "depd": "2.0.0", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "etag": "~1.8.1", - "finalhandler": "1.2.0", - "fresh": "0.5.2", - "http-errors": "2.0.0", - "merge-descriptors": "1.0.1", - "methods": "~1.1.2", - "on-finished": "2.4.1", - "parseurl": "~1.3.3", - "path-to-regexp": "0.1.7", - "proxy-addr": "~2.0.7", - "qs": "6.11.0", - "range-parser": "~1.2.1", - "safe-buffer": "5.2.1", - "send": "0.18.0", - "serve-static": "1.15.0", - "setprototypeof": "1.2.0", - "statuses": "2.0.1", - "type-is": "~1.6.18", - "utils-merge": "1.0.1", - "vary": "~1.1.2" - }, - "dependencies": { - "cookie": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.5.0.tgz", - "integrity": "sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==" - }, - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "requires": { - "ms": "2.0.0" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" - } - } - }, - "ext": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/ext/-/ext-1.7.0.tgz", - "integrity": "sha512-6hxeJYaL110a9b5TEJSj0gojyHQAmA2ch5Os+ySCiA1QGdS697XWY1pzsrSjqA9LDEEgdB/KypIlR59RcLuHYw==", - "requires": { - "type": "^2.7.2" - }, - "dependencies": { - "type": { - "version": "2.7.2", - "resolved": "https://registry.npmjs.org/type/-/type-2.7.2.tgz", - "integrity": "sha512-dzlvlNlt6AXU7EBSfpAscydQ7gXB+pPGsPnfJnZpiNJBDj7IaJzQlBZYGdEi4R9HmPdBv2XmWJ6YUtoTa7lmCw==" - } - } - }, - "extend": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", - "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==" - }, - "extract-zip": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extract-zip/-/extract-zip-2.0.1.tgz", - "integrity": "sha512-GDhU9ntwuKyGXdZBUgTIe+vXnWj0fppUEtMDL0+idd5Sta8TGpHssn/eusA9mrPr9qNDym6SxAYZjNvCn/9RBg==", - "optional": true, - "requires": { - "@types/yauzl": "^2.9.1", - "debug": "^4.1.1", - "get-stream": "^5.1.0", - "yauzl": "^2.10.0" - }, - "dependencies": { - "get-stream": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", - "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", - "optional": true, - "requires": { - "pump": "^3.0.0" - } - } - } - }, - "extsprintf": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", - "integrity": "sha512-11Ndz7Nv+mvAC1j0ktTa7fAb0vLyGGX+rMHNBYQviQDGU0Hw7lhctJANqbPhu9nV9/izT/IntTgZ7Im/9LJs9g==" - }, - "eyes": { - "version": "0.1.8", - "resolved": "https://registry.npmjs.org/eyes/-/eyes-0.1.8.tgz", - "integrity": "sha512-GipyPsXO1anza0AOZdy69Im7hGFCNB7Y/NGjDlZGJ3GJJLtwNSb2vrzYrTYJRrRloVx7pl+bhUaTB8yiccPvFQ==" - }, - "fake-merkle-patricia-tree": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/fake-merkle-patricia-tree/-/fake-merkle-patricia-tree-1.0.1.tgz", - "integrity": "sha512-Tgq37lkc9pUIgIKw5uitNUKcgcYL3R6JvXtKQbOf/ZSavXbidsksgp/pAY6p//uhw0I4yoMsvTSovvVIsk/qxA==", - "requires": { - "checkpoint-store": "^1.1.0" - } - }, - "fast-base64-decode": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fast-base64-decode/-/fast-base64-decode-1.0.0.tgz", - "integrity": "sha512-qwaScUgUGBYeDNRnbc/KyllVU88Jk1pRHPStuF/lO7B0/RTRLj7U0lkdTAutlBblY08rwZDff6tNU9cjv6j//Q==", - "dev": true - }, - "fast-check": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/fast-check/-/fast-check-3.1.1.tgz", - "integrity": "sha512-3vtXinVyuUKCKFKYcwXhGE6NtGWkqF8Yh3rvMZNzmwz8EPrgoc/v4pDdLHyLnCyCI5MZpZZkDEwFyXyEONOxpA==", - "requires": { - "pure-rand": "^5.0.1" - } - }, - "fast-deep-equal": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", - "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==" - }, - "fast-json-stable-stringify": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", - "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==" - }, - "fast-safe-stringify": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/fast-safe-stringify/-/fast-safe-stringify-2.1.1.tgz", - "integrity": "sha512-W+KJc2dmILlPplD/H4K9l9LcAHAfPtP6BY84uVLXQ6Evcz9Lcg33Y2z1IVblT6xdY54PXYVHEv+0Wpq8Io6zkA==" - }, - "fast-stable-stringify": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fast-stable-stringify/-/fast-stable-stringify-1.0.0.tgz", - "integrity": "sha512-wpYMUmFu5f00Sm0cj2pfivpmawLZ0NKdviQ4w9zJeR8JVtOpOxHmLaJuj0vxvGqMJQWyP/COUkF75/57OKyRag==" - }, - "fd-slicer": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.1.0.tgz", - "integrity": "sha512-cE1qsB/VwyQozZ+q1dGxR8LBYNZeofhEdUNGSMbQD3Gw2lAzX9Zb3uIU6Ebc/Fmyjo9AWWfnn0AUCHqtevs/8g==", - "requires": { - "pend": "~1.2.0" - } - }, - "fetch-cookie": { - "version": "0.11.0", - "resolved": "https://registry.npmjs.org/fetch-cookie/-/fetch-cookie-0.11.0.tgz", - "integrity": "sha512-BQm7iZLFhMWFy5CZ/162sAGjBfdNWb7a8LEqqnzsHFhxT/X/SVj/z2t2nu3aJvjlbQkrAlTUApplPRjWyH4mhA==", - "optional": true, - "requires": { - "tough-cookie": "^2.3.3 || ^3.0.1 || ^4.0.0" - } - }, - "file-type": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/file-type/-/file-type-5.2.0.tgz", - "integrity": "sha512-Iq1nJ6D2+yIO4c8HHg4fyVb8mAJieo1Oloy1mLLaB2PvezNedhBVm+QU7g0qM42aiMbRXTxKKwGD17rjKNJYVQ==" - }, - "file-uri-to-path": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz", - "integrity": "sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==" - }, - "file-url": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/file-url/-/file-url-3.0.0.tgz", - "integrity": "sha512-g872QGsHexznxkIAdK8UiZRe7SkE6kvylShU4Nsj8NvfvZag7S0QuQ4IgvPDkk75HxgjIVDwycFTDAgIiO4nDA==", - "optional": true - }, - "fill-range": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", - "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", - "requires": { - "to-regex-range": "^5.0.1" - } - }, - "finalhandler": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.2.0.tgz", - "integrity": "sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==", - "requires": { - "debug": "2.6.9", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "on-finished": "2.4.1", - "parseurl": "~1.3.3", - "statuses": "2.0.1", - "unpipe": "~1.0.0" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "requires": { - "ms": "2.0.0" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" - } - } - }, - "find-replace": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/find-replace/-/find-replace-3.0.0.tgz", - "integrity": "sha512-6Tb2myMioCAgv5kfvP5/PkZZ/ntTpVK39fHY7WkWBgvbeE+VHd/tZuZ4mrC+bxh4cfOZeYKVPaJIZtZXV7GNCQ==", - "dev": true, - "requires": { - "array-back": "^3.0.1" - } - }, - "find-up": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", - "requires": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" - } - }, - "find-yarn-workspace-root": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/find-yarn-workspace-root/-/find-yarn-workspace-root-2.0.0.tgz", - "integrity": "sha512-1IMnbjt4KzsQfnhnzNd8wUEgXZ44IzZaZmnLYx7D5FZlaHt2gW20Cri8Q+E/t5tIj4+epTBub+2Zxu/vNILzqQ==", - "requires": { - "micromatch": "^4.0.2" - } - }, - "flashbots": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/flashbots/-/flashbots-1.0.0.tgz", - "integrity": "sha512-IvF5v/kVCf13ku4ksM7ZjhLWk1oBC4UgwaX7wvOtvttGClgRYGQ/Q/4DpXbdlVsliXNy8PE7/9SMYx9Cv6iICA==" - }, - "flat": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz", - "integrity": "sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==" - }, - "fmix": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/fmix/-/fmix-0.1.0.tgz", - "integrity": "sha512-Y6hyofImk9JdzU8k5INtTXX1cu8LDlePWDFU5sftm9H+zKCr5SGrVjdhkvsim646cw5zD0nADj8oHyXMZmCZ9w==", - "dev": true, - "requires": { - "imul": "^1.0.0" - } - }, - "follow-redirects": { - "version": "1.15.2", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.2.tgz", - "integrity": "sha512-VQLG33o04KaQ8uYi2tVNbdrWp1QWxNNea+nmIB4EVM28v0hmP17z7aG1+wAkNzVq4KeXTq3221ye5qTJP91JwA==" - }, - "for-each": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz", - "integrity": "sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==", - "requires": { - "is-callable": "^1.1.3" - } - }, - "foreach": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/foreach/-/foreach-2.0.6.tgz", - "integrity": "sha512-k6GAGDyqLe9JaebCsFCoudPPWfihKu8pylYXRlqP1J7ms39iPoTtk2fviNglIeQEwdh0bQeKJ01ZPyuyQvKzwg==" - }, - "forever-agent": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", - "integrity": "sha512-j0KLYPhm6zeac4lz3oJ3o65qvgQCcPubiyotZrXqEaG4hNagNYO8qdlUrX5vwqv9ohqeT/Z3j6+yW067yWWdUw==" - }, - "form-data": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-3.0.1.tgz", - "integrity": "sha512-RHkBKtLWUVwd7SqRIvCZMEvAMoGUp0XU+seQiZejj0COz3RI3hWP4sCv3gZWWLjJTd7rGwcsF5eKZGii0r/hbg==", - "dev": true, - "requires": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.8", - "mime-types": "^2.1.12" - } - }, - "form-data-encoder": { - "version": "1.7.1", - "resolved": "https://registry.npmjs.org/form-data-encoder/-/form-data-encoder-1.7.1.tgz", - "integrity": "sha512-EFRDrsMm/kyqbTQocNvRXMLjc7Es2Vk+IQFx/YW7hkUH1eBl4J1fqiP34l74Yt0pFLCNpc06fkbVk00008mzjg==" - }, - "forwarded": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", - "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==" - }, - "fp-ts": { - "version": "1.19.3", - "resolved": "https://registry.npmjs.org/fp-ts/-/fp-ts-1.19.3.tgz", - "integrity": "sha512-H5KQDspykdHuztLTg+ajGN0Z2qUjcEf3Ybxc6hLt0k7/zPkn29XnKnxlBPyW2XIddWrGaJBzBl4VLYOtk39yZg==" - }, - "fraction.js": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.3.4.tgz", - "integrity": "sha512-pwiTgt0Q7t+GHZA4yaLjObx4vXmmdcS0iSJ19o8d/goUGgItX9UZWKWNnLHehxviD8wU2IWRsnR8cD5+yOJP2Q==" - }, - "fresh": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", - "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==" - }, - "from-exponential": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/from-exponential/-/from-exponential-1.1.1.tgz", - "integrity": "sha512-VBE7f5OVnYwdgB3LHa+Qo29h8qVpxhVO9Trlc+AWm+/XNAgks1tAwMFHb33mjeiof77GglsJzeYF7OqXrROP/A==" - }, - "fs-constants": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz", - "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==" - }, - "fs-extra": { - "version": "11.1.1", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.1.1.tgz", - "integrity": "sha512-MGIE4HOvQCeUCzmlHs0vXpih4ysz4wg9qiSAu6cd42lVwPbTM1TjV7RusoyQqMmk/95gdQZX72u+YW+c3eEpFQ==", - "requires": { - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - } - }, - "fs-minipass": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-1.2.7.tgz", - "integrity": "sha512-GWSSJGFy4e9GUeCcbIkED+bgAoFyj7XF1mV8rma3QW4NIqX9Kyx79N/PF61H5udOV3aY1IaMLs6pGbH71nlCTA==", - "requires": { - "minipass": "^2.6.0" - } - }, - "fs-readdir-recursive": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/fs-readdir-recursive/-/fs-readdir-recursive-1.1.0.tgz", - "integrity": "sha512-GNanXlVr2pf02+sPN40XN8HG+ePaNcvM0q5mZBd668Obwb0yD5GiUbZOFgwn8kGMY6I3mdyDJzieUy3PTYyTRA==" - }, - "fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==" - }, - "function-bind": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" - }, - "function.prototype.name": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.5.tgz", - "integrity": "sha512-uN7m/BzVKQnCUF/iW8jYea67v++2u7m5UgENbHRtdDVclOUP+FMPlCNdmk0h/ysGyo2tavMJEDqJAkJdRa1vMA==", - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.19.0", - "functions-have-names": "^1.2.2" - } - }, - "functional-red-black-tree": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", - "integrity": "sha512-dsKNQNdj6xA3T+QlADDA7mOSlX0qiMINjn0cgr+eGHGsbSHzTabcIogz2+p/iqP1Xs6EP/sS2SbqH+brGTbq0g==" - }, - "functions-have-names": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz", - "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==" - }, - "ganache": { - "version": "7.9.1", - "resolved": "https://registry.npmjs.org/ganache/-/ganache-7.9.1.tgz", - "integrity": "sha512-Tqhd4J3cpiLeYTD6ek/zlchSB107IVPMIm4ypyg+xz1sdkeALUnYYZnmY4Bdjqj3i6QwtlZPCu7U4qKy7HlWTA==", - "requires": { - "@trufflesuite/bigint-buffer": "1.1.10", - "@trufflesuite/uws-js-unofficial": "20.30.0-unofficial.0", - "@types/bn.js": "^5.1.0", - "@types/lru-cache": "5.1.1", - "@types/seedrandom": "3.0.1", - "abstract-level": "1.0.3", - "abstract-leveldown": "7.2.0", - "async-eventemitter": "0.2.4", - "bufferutil": "4.0.5", - "emittery": "0.10.0", - "keccak": "3.0.2", - "leveldown": "6.1.0", - "secp256k1": "4.0.3", - "utf-8-validate": "5.0.7" - }, - "dependencies": { - "@cspotcode/source-map-support": { - "version": "0.8.1", - "resolved": "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz", - "integrity": "sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==", - "extraneous": true, - "requires": { - "@jridgewell/trace-mapping": "0.3.9" - }, - "dependencies": { - "@jridgewell/trace-mapping": { - "version": "0.3.9", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz", - "integrity": "sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==", - "extraneous": true, - "requires": { - "@jridgewell/resolve-uri": "^3.0.3", - "@jridgewell/sourcemap-codec": "^1.4.10" - } - } - } - }, - "@discoveryjs/json-ext": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/@discoveryjs/json-ext/-/json-ext-0.5.7.tgz", - "integrity": "sha512-dBVuXR082gk3jsFp7Rd/JI4kytwGHecnCoTtXFb7DB6CNHp4rg5k1bhg0nWdLGLnOV71lmDzGQaLMy8iPLY0pw==", - "extraneous": true - }, - "@jridgewell/gen-mapping": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.2.tgz", - "integrity": "sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A==", - "extraneous": true, - "requires": { - "@jridgewell/set-array": "^1.0.1", - "@jridgewell/sourcemap-codec": "^1.4.10", - "@jridgewell/trace-mapping": "^0.3.9" - } - }, - "@jridgewell/resolve-uri": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz", - "integrity": "sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==", - "extraneous": true - }, - "@jridgewell/set-array": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz", - "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==", - "extraneous": true - }, - "@jridgewell/source-map": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.2.tgz", - "integrity": "sha512-m7O9o2uR8k2ObDysZYzdfhb08VuEml5oWGiosa1VdaPZ/A6QyPkAJuwN0Q1lhULOf6B7MtQmHENS743hWtCrgw==", - "extraneous": true, - "requires": { - "@jridgewell/gen-mapping": "^0.3.0", - "@jridgewell/trace-mapping": "^0.3.9" - } - }, - "@jridgewell/sourcemap-codec": { - "version": "1.4.14", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz", - "integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==", - "extraneous": true - }, - "@jridgewell/trace-mapping": { - "version": "0.3.17", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.17.tgz", - "integrity": "sha512-MCNzAp77qzKca9+W/+I0+sEpaUnZoeasnghNeVc41VZCEKaCH73Vq3BZZ/SzWIgrqE4H4ceI+p+b6C0mHf9T4g==", - "extraneous": true, - "requires": { - "@jridgewell/resolve-uri": "3.1.0", - "@jridgewell/sourcemap-codec": "1.4.14" - } - }, - "@microsoft/api-extractor": { - "version": "https://registry.npmjs.org/@microsoft/api-extractor/-/api-extractor-7.20.1.tgz", - "integrity": "sha512-T7cqcK+JpvHGOj7cD2ZCCWS7Xgru1uOqZwrV/FSUdyKVs5fopZcbBSuetwD/akst3O7Ypryg3UOLP54S/vnVmA==", - "extraneous": true, - "requires": { - "@microsoft/api-extractor-model": "7.16.0", - "@microsoft/tsdoc": "0.13.2", - "@microsoft/tsdoc-config": "~0.15.2", - "@rushstack/node-core-library": "3.45.1", - "@rushstack/rig-package": "0.3.8", - "@rushstack/ts-command-line": "4.10.7", - "colors": "~1.2.1", - "lodash": "~4.17.15", - "resolve": "~1.17.0", - "semver": "~7.3.0", - "source-map": "~0.6.1", - "typescript": "~4.5.2" - }, - "dependencies": { - "typescript": { - "version": "4.5.5", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.5.5.tgz", - "integrity": "sha512-TCTIul70LyWe6IJWT8QSYeA54WQe8EjQFU4wY52Fasj5UKx88LNYKCgBEHcOMOrFF1rKGbD8v/xcNWVUq9SymA==", - "extraneous": true - } - } - }, - "@microsoft/api-extractor-model": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@microsoft/api-extractor-model/-/api-extractor-model-7.16.0.tgz", - "integrity": "sha512-0FOrbNIny8mzBrzQnSIkEjAXk0JMSnPmWYxt3ZDTPVg9S8xIPzB6lfgTg9+Mimu0RKCpGKBpd+v2WcR5vGzyUQ==", - "extraneous": true, - "requires": { - "@microsoft/tsdoc": "0.13.2", - "@microsoft/tsdoc-config": "~0.15.2", - "@rushstack/node-core-library": "3.45.1" - } - }, - "@microsoft/tsdoc": { - "version": "0.13.2", - "resolved": "https://registry.npmjs.org/@microsoft/tsdoc/-/tsdoc-0.13.2.tgz", - "integrity": "sha512-WrHvO8PDL8wd8T2+zBGKrMwVL5IyzR3ryWUsl0PXgEV0QHup4mTLi0QcATefGI6Gx9Anu7vthPyyyLpY0EpiQg==", - "extraneous": true - }, - "@microsoft/tsdoc-config": { - "version": "0.15.2", - "resolved": "https://registry.npmjs.org/@microsoft/tsdoc-config/-/tsdoc-config-0.15.2.tgz", - "integrity": "sha512-mK19b2wJHSdNf8znXSMYVShAHktVr/ib0Ck2FA3lsVBSEhSI/TfXT7DJQkAYgcztTuwazGcg58ZjYdk0hTCVrA==", - "extraneous": true, - "requires": { - "@microsoft/tsdoc": "0.13.2", - "ajv": "~6.12.6", - "jju": "~1.4.0", - "resolve": "~1.19.0" - }, - "dependencies": { - "resolve": { - "version": "1.19.0", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.19.0.tgz", - "integrity": "sha512-rArEXAgsBG4UgRGcynxWIWKFvh/XZCcS8UJdHhwy91zwAvCZIbcs+vAbflgBnNjYMs/i/i+/Ux6IZhML1yPvxg==", - "extraneous": true, - "requires": { - "is-core-module": "^2.1.0", - "path-parse": "^1.0.6" - } - } - } - }, - "@rushstack/node-core-library": { - "version": "3.45.1", - "resolved": "https://registry.npmjs.org/@rushstack/node-core-library/-/node-core-library-3.45.1.tgz", - "integrity": "sha512-BwdssTNe007DNjDBxJgInHg8ePytIPyT0La7ZZSQZF9+rSkT42AygXPGvbGsyFfEntjr4X37zZSJI7yGzL16cQ==", - "extraneous": true, - "requires": { - "@types/node": "12.20.24", - "colors": "~1.2.1", - "fs-extra": "~7.0.1", - "import-lazy": "~4.0.0", - "jju": "~1.4.0", - "resolve": "~1.17.0", - "semver": "~7.3.0", - "timsort": "~0.3.0", - "z-schema": "~5.0.2" - }, - "dependencies": { - "@types/node": { - "version": "12.20.24", - "resolved": "https://registry.npmjs.org/@types/node/-/node-12.20.24.tgz", - "integrity": "sha512-yxDeaQIAJlMav7fH5AQqPH1u8YIuhYJXYBzxaQ4PifsU0GDO38MSdmEDeRlIxrKbC6NbEaaEHDanWb+y30U8SQ==", - "extraneous": true - } - } - }, - "@rushstack/rig-package": { - "version": "0.3.8", - "resolved": "https://registry.npmjs.org/@rushstack/rig-package/-/rig-package-0.3.8.tgz", - "integrity": "sha512-MDWg1xovea99PWloSiYMjFcCLsrdjFtYt6aOyHNs5ojn5mxrzR6U9F83hvbQjTWnKPMvZtr0vcek+4n+OQOp3Q==", - "extraneous": true, - "requires": { - "resolve": "~1.17.0", - "strip-json-comments": "~3.1.1" - } - }, - "@rushstack/ts-command-line": { - "version": "4.10.7", - "resolved": "https://registry.npmjs.org/@rushstack/ts-command-line/-/ts-command-line-4.10.7.tgz", - "integrity": "sha512-CjS+DfNXUSO5Ab2wD1GBGtUTnB02OglRWGqfaTcac9Jn45V5MeUOsq/wA8wEeS5Y/3TZ2P1k+IWdVDiuOFP9Og==", - "extraneous": true, - "requires": { - "@types/argparse": "1.0.38", - "argparse": "~1.0.9", - "colors": "~1.2.1", - "string-argv": "~0.3.1" - } - }, - "@trufflesuite/bigint-buffer": { - "version": "1.1.10", - "resolved": "https://registry.npmjs.org/@trufflesuite/bigint-buffer/-/bigint-buffer-1.1.10.tgz", - "integrity": "sha512-pYIQC5EcMmID74t26GCC67946mgTJFiLXOT/BYozgrd4UEY2JHEGLhWi9cMiQCt5BSqFEvKkCHNnoj82SRjiEw==", - "bundled": true, - "requires": { - "node-gyp-build": "4.4.0" - }, - "dependencies": { - "node-gyp-build": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.4.0.tgz", - "integrity": "sha512-amJnQCcgtRVw9SvoebO3BKGESClrfXGCUTX9hSn1OuGQTQBOZmVd0Z0OlecpuRksKvbsUqALE8jls/ErClAPuQ==", - "bundled": true - } - } - }, - "@trufflesuite/uws-js-unofficial": { - "version": "20.30.0-unofficial.0", - "resolved": "https://registry.npmjs.org/@trufflesuite/uws-js-unofficial/-/uws-js-unofficial-20.30.0-unofficial.0.tgz", - "integrity": "sha512-r5X0aOQcuT6pLwTRLD+mPnAM/nlKtvIK4Z+My++A8tTOR0qTjNRx8UB8jzRj3D+p9PMAp5LnpCUUGmz7/TppwA==", - "requires": { - "bufferutil": "4.0.7", - "utf-8-validate": "6.0.3", - "ws": "8.13.0" - }, - "dependencies": { - "bufferutil": { - "version": "4.0.7", - "resolved": "https://registry.npmjs.org/bufferutil/-/bufferutil-4.0.7.tgz", - "integrity": "sha512-kukuqc39WOHtdxtw4UScxF/WVnMFVSQVKhtx3AjZJzhd0RGZZldcrfSEbVsWWe6KNH253574cq5F+wpv0G9pJw==", - "optional": true, - "requires": { - "node-gyp-build": "^4.3.0" - } - }, - "utf-8-validate": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/utf-8-validate/-/utf-8-validate-6.0.3.tgz", - "integrity": "sha512-uIuGf9TWQ/y+0Lp+KGZCMuJWc3N9BHA+l/UmHd/oUHwJJDeysyTRxNQVkbzsIWfGFbRe3OcgML/i0mvVRPOyDA==", - "optional": true, - "requires": { - "node-gyp-build": "^4.3.0" - } - }, - "ws": { - "version": "8.13.0", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.13.0.tgz", - "integrity": "sha512-x9vcZYTrFPC7aSIbj7sRCYo7L/Xb8Iy+pW0ng0wt2vCJv7M9HOMy0UoN3rr+IFC7hb7vXoqS+P9ktyLLLhO+LA==", - "requires": {} - } - } - }, - "@tsconfig/node10": { - "version": "1.0.9", - "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.9.tgz", - "integrity": "sha512-jNsYVVxU8v5g43Erja32laIDHXeoNvFEpX33OK4d6hljo3jDhCBDhx5dhCCTMWUojscpAagGiRkBKxpdl9fxqA==", - "extraneous": true - }, - "@tsconfig/node12": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/@tsconfig/node12/-/node12-1.0.11.tgz", - "integrity": "sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==", - "extraneous": true - }, - "@tsconfig/node14": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/@tsconfig/node14/-/node14-1.0.3.tgz", - "integrity": "sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==", - "extraneous": true - }, - "@tsconfig/node16": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.3.tgz", - "integrity": "sha512-yOlFc+7UtL/89t2ZhjPvvB/DeAr3r+Dq58IgzsFkOAvVC6NMJXmCGjbptdXdR9qsX7pKcTL+s87FtYREi2dEEQ==", - "extraneous": true - }, - "@types/abstract-leveldown": { - "version": "https://registry.npmjs.org/@types/abstract-leveldown/-/abstract-leveldown-7.2.0.tgz", - "integrity": "sha512-q5veSX6zjUy/DlDhR4Y4cU0k2Ar+DT2LUraP00T19WLmTO6Se1djepCCaqU6nQrwcJ5Hyo/CWqxTzrrFg8eqbQ==", - "extraneous": true - }, - "@types/argparse": { - "version": "1.0.38", - "resolved": "https://registry.npmjs.org/@types/argparse/-/argparse-1.0.38.tgz", - "integrity": "sha512-ebDJ9b0e702Yr7pWgB0jzm+CX4Srzz8RcXtLJDJB+BSccqMa36uyH/zUsSYao5+BD1ytv3k3rPYCq4mAE1hsXA==", - "extraneous": true - }, - "@types/bn.js": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/@types/bn.js/-/bn.js-5.1.0.tgz", - "integrity": "sha512-QSSVYj7pYFN49kW77o2s9xTCwZ8F2xLbjLLSEVh8D2F4JUhZtPAGOFLTD+ffqksBx/u4cE/KImFjyhqCjn/LIA==", - "requires": { - "@types/node": "*" - } - }, - "@types/eslint": { - "version": "8.4.10", - "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-8.4.10.tgz", - "integrity": "sha512-Sl/HOqN8NKPmhWo2VBEPm0nvHnu2LL3v9vKo8MEq0EtbJ4eVzGPl41VNPvn5E1i5poMk4/XD8UriLHpJvEP/Nw==", - "extraneous": true, - "requires": { - "@types/estree": "*", - "@types/json-schema": "*" - } - }, - "@types/eslint-scope": { - "version": "3.7.4", - "resolved": "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.4.tgz", - "integrity": "sha512-9K4zoImiZc3HlIp6AVUDE4CWYx22a+lhSZMYNpbjW04+YF0KWj4pJXnEMjdnFTiQibFFmElcsasJXDbdI/EPhA==", - "extraneous": true, - "requires": { - "@types/eslint": "*", - "@types/estree": "*" - } - }, - "@types/estree": { - "version": "0.0.50", - "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.50.tgz", - "integrity": "sha512-C6N5s2ZFtuZRj54k2/zyRhNDjJwwcViAM3Nbm8zjBpbqAdZ00mr0CFxvSKeO8Y/e03WVFLpQMdHYVfUd6SB+Hw==", - "extraneous": true - }, - "@types/json-schema": { - "version": "7.0.11", - "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.11.tgz", - "integrity": "sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ==", - "extraneous": true - }, - "@types/lru-cache": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/@types/lru-cache/-/lru-cache-5.1.1.tgz", - "integrity": "sha512-ssE3Vlrys7sdIzs5LOxCzTVMsU7i9oa/IaW92wF32JFb3CVczqOkru2xspuKczHEbG3nvmPY7IFqVmGGHdNbYw==" - }, - "@types/mocha": { - "version": "https://registry.npmjs.org/@types/mocha/-/mocha-9.0.0.tgz", - "integrity": "sha512-scN0hAWyLVAvLR9AyW7HoFF5sJZglyBsbPuHO4fv7JRvfmPBMfp1ozWqOf/e4wwPNxezBZXRfWzMb6iFLgEVRA==", - "extraneous": true - }, - "@types/node": { - "version": "17.0.0", - "resolved": "https://registry.npmjs.org/@types/node/-/node-17.0.0.tgz", - "integrity": "sha512-eMhwJXc931Ihh4tkU+Y7GiLzT/y/DBNpNtr4yU9O2w3SYBsr9NaOPhQlLKRmoWtI54uNwuo0IOUFQjVOTZYRvw==" - }, - "@types/seedrandom": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/@types/seedrandom/-/seedrandom-3.0.1.tgz", - "integrity": "sha512-giB9gzDeiCeloIXDgzFBCgjj1k4WxcDrZtGl6h1IqmUPlxF+Nx8Ve+96QCyDZ/HseB/uvDsKbpib9hU5cU53pw==" - }, - "@ungap/promise-all-settled": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@ungap/promise-all-settled/-/promise-all-settled-1.1.2.tgz", - "integrity": "sha512-sL/cEvJWAnClXw0wHk85/2L0G6Sj8UB0Ctc1TEMbKSsmpRosqhwj9gWgFRZSrBr2f9tiXISwNhCPmlfqUqyb9Q==", - "extraneous": true - }, - "@webassemblyjs/ast": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.11.1.tgz", - "integrity": "sha512-ukBh14qFLjxTQNTXocdyksN5QdM28S1CxHt2rdskFyL+xFV7VremuBLVbmCePj+URalXBENx/9Lm7lnhihtCSw==", - "extraneous": true, - "requires": { - "@webassemblyjs/helper-numbers": "1.11.1", - "@webassemblyjs/helper-wasm-bytecode": "1.11.1" - } - }, - "@webassemblyjs/floating-point-hex-parser": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.1.tgz", - "integrity": "sha512-iGRfyc5Bq+NnNuX8b5hwBrRjzf0ocrJPI6GWFodBFzmFnyvrQ83SHKhmilCU/8Jv67i4GJZBMhEzltxzcNagtQ==", - "extraneous": true - }, - "@webassemblyjs/helper-api-error": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.1.tgz", - "integrity": "sha512-RlhS8CBCXfRUR/cwo2ho9bkheSXG0+NwooXcc3PAILALf2QLdFyj7KGsKRbVc95hZnhnERon4kW/D3SZpp6Tcg==", - "extraneous": true - }, - "@webassemblyjs/helper-buffer": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.11.1.tgz", - "integrity": "sha512-gwikF65aDNeeXa8JxXa2BAk+REjSyhrNC9ZwdT0f8jc4dQQeDQ7G4m0f2QCLPJiMTTO6wfDmRmj/pW0PsUvIcA==", - "extraneous": true - }, - "@webassemblyjs/helper-numbers": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.1.tgz", - "integrity": "sha512-vDkbxiB8zfnPdNK9Rajcey5C0w+QJugEglN0of+kmO8l7lDb77AnlKYQF7aarZuCrv+l0UvqL+68gSDr3k9LPQ==", - "extraneous": true, - "requires": { - "@webassemblyjs/floating-point-hex-parser": "1.11.1", - "@webassemblyjs/helper-api-error": "1.11.1", - "@xtuc/long": "4.2.2" - } - }, - "@webassemblyjs/helper-wasm-bytecode": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.1.tgz", - "integrity": "sha512-PvpoOGiJwXeTrSf/qfudJhwlvDQxFgelbMqtq52WWiXC6Xgg1IREdngmPN3bs4RoO83PnL/nFrxucXj1+BX62Q==", - "extraneous": true - }, - "@webassemblyjs/helper-wasm-section": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.11.1.tgz", - "integrity": "sha512-10P9No29rYX1j7F3EVPX3JvGPQPae+AomuSTPiF9eBQeChHI6iqjMIwR9JmOJXwpnn/oVGDk7I5IlskuMwU/pg==", - "extraneous": true, - "requires": { - "@webassemblyjs/ast": "1.11.1", - "@webassemblyjs/helper-buffer": "1.11.1", - "@webassemblyjs/helper-wasm-bytecode": "1.11.1", - "@webassemblyjs/wasm-gen": "1.11.1" - } - }, - "@webassemblyjs/ieee754": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.11.1.tgz", - "integrity": "sha512-hJ87QIPtAMKbFq6CGTkZYJivEwZDbQUgYd3qKSadTNOhVY7p+gfP6Sr0lLRVTaG1JjFj+r3YchoqRYxNH3M0GQ==", - "extraneous": true, - "requires": { - "@xtuc/ieee754": "^1.2.0" - } - }, - "@webassemblyjs/leb128": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.11.1.tgz", - "integrity": "sha512-BJ2P0hNZ0u+Th1YZXJpzW6miwqQUGcIHT1G/sf72gLVD9DZ5AdYTqPNbHZh6K1M5VmKvFXwGSWZADz+qBWxeRw==", - "extraneous": true, - "requires": { - "@xtuc/long": "4.2.2" - } - }, - "@webassemblyjs/utf8": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.11.1.tgz", - "integrity": "sha512-9kqcxAEdMhiwQkHpkNiorZzqpGrodQQ2IGrHHxCy+Ozng0ofyMA0lTqiLkVs1uzTRejX+/O0EOT7KxqVPuXosQ==", - "extraneous": true - }, - "@webassemblyjs/wasm-edit": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.11.1.tgz", - "integrity": "sha512-g+RsupUC1aTHfR8CDgnsVRVZFJqdkFHpsHMfJuWQzWU3tvnLC07UqHICfP+4XyL2tnr1amvl1Sdp06TnYCmVkA==", - "extraneous": true, - "requires": { - "@webassemblyjs/ast": "1.11.1", - "@webassemblyjs/helper-buffer": "1.11.1", - "@webassemblyjs/helper-wasm-bytecode": "1.11.1", - "@webassemblyjs/helper-wasm-section": "1.11.1", - "@webassemblyjs/wasm-gen": "1.11.1", - "@webassemblyjs/wasm-opt": "1.11.1", - "@webassemblyjs/wasm-parser": "1.11.1", - "@webassemblyjs/wast-printer": "1.11.1" - } - }, - "@webassemblyjs/wasm-gen": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.11.1.tgz", - "integrity": "sha512-F7QqKXwwNlMmsulj6+O7r4mmtAlCWfO/0HdgOxSklZfQcDu0TpLiD1mRt/zF25Bk59FIjEuGAIyn5ei4yMfLhA==", - "extraneous": true, - "requires": { - "@webassemblyjs/ast": "1.11.1", - "@webassemblyjs/helper-wasm-bytecode": "1.11.1", - "@webassemblyjs/ieee754": "1.11.1", - "@webassemblyjs/leb128": "1.11.1", - "@webassemblyjs/utf8": "1.11.1" - } - }, - "@webassemblyjs/wasm-opt": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.11.1.tgz", - "integrity": "sha512-VqnkNqnZlU5EB64pp1l7hdm3hmQw7Vgqa0KF/KCNO9sIpI6Fk6brDEiX+iCOYrvMuBWDws0NkTOxYEb85XQHHw==", - "extraneous": true, - "requires": { - "@webassemblyjs/ast": "1.11.1", - "@webassemblyjs/helper-buffer": "1.11.1", - "@webassemblyjs/wasm-gen": "1.11.1", - "@webassemblyjs/wasm-parser": "1.11.1" - } - }, - "@webassemblyjs/wasm-parser": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.11.1.tgz", - "integrity": "sha512-rrBujw+dJu32gYB7/Lup6UhdkPx9S9SnobZzRVL7VcBH9Bt9bCBLEuX/YXOOtBsOZ4NQrRykKhffRWHvigQvOA==", - "extraneous": true, - "requires": { - "@webassemblyjs/ast": "1.11.1", - "@webassemblyjs/helper-api-error": "1.11.1", - "@webassemblyjs/helper-wasm-bytecode": "1.11.1", - "@webassemblyjs/ieee754": "1.11.1", - "@webassemblyjs/leb128": "1.11.1", - "@webassemblyjs/utf8": "1.11.1" - } - }, - "@webassemblyjs/wast-printer": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.11.1.tgz", - "integrity": "sha512-IQboUWM4eKzWW+N/jij2sRatKMh99QEelo3Eb2q0qXkvPRISAj8Qxtmw5itwqK+TTkBuUIE45AxYPToqPtL5gg==", - "extraneous": true, - "requires": { - "@webassemblyjs/ast": "1.11.1", - "@xtuc/long": "4.2.2" - } - }, - "@webpack-cli/configtest": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@webpack-cli/configtest/-/configtest-1.2.0.tgz", - "integrity": "sha512-4FB8Tj6xyVkyqjj1OaTqCjXYULB9FMkqQ8yGrZjRDrYh0nOE+7Lhs45WioWQQMV+ceFlE368Ukhe6xdvJM9Egg==", - "extraneous": true - }, - "@webpack-cli/info": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/@webpack-cli/info/-/info-1.5.0.tgz", - "integrity": "sha512-e8tSXZpw2hPl2uMJY6fsMswaok5FdlGNRTktvFk2sD8RjH0hE2+XistawJx1vmKteh4NmGmNUrp+Tb2w+udPcQ==", - "extraneous": true, - "requires": { - "envinfo": "^7.7.3" - } - }, - "@webpack-cli/serve": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/@webpack-cli/serve/-/serve-1.7.0.tgz", - "integrity": "sha512-oxnCNGj88fL+xzV+dacXs44HcDwf1ovs3AuEzvP7mqXw7fQntqIhQ1BRmynh4qEKQSSSRSWVyXRjmTbZIX9V2Q==", - "extraneous": true - }, - "@xtuc/ieee754": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz", - "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==", - "extraneous": true - }, - "@xtuc/long": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/@xtuc/long/-/long-4.2.2.tgz", - "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==", - "extraneous": true - }, - "abstract-level": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/abstract-level/-/abstract-level-1.0.3.tgz", - "integrity": "sha512-t6jv+xHy+VYwc4xqZMn2Pa9DjcdzvzZmQGRjTFc8spIbRGHgBrEKbPq+rYXc7CCo0lxgYvSgKVg9qZAhpVQSjA==", - "requires": { - "buffer": "^6.0.3", - "catering": "^2.1.0", - "is-buffer": "^2.0.5", - "level-supports": "^4.0.0", - "level-transcoder": "^1.0.1", - "module-error": "^1.0.1", - "queue-microtask": "^1.2.3" - }, - "dependencies": { - "level-supports": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/level-supports/-/level-supports-4.0.1.tgz", - "integrity": "sha512-PbXpve8rKeNcZ9C1mUicC9auIYFyGpkV9/i6g76tLgANwWhtG2v7I4xNBUlkn3lE2/dZF3Pi0ygYGtLc4RXXdA==" - } - } - }, - "abstract-leveldown": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/abstract-leveldown/-/abstract-leveldown-7.2.0.tgz", - "integrity": "sha512-DnhQwcFEaYsvYDnACLZhMmCWd3rkOeEvglpa4q5i/5Jlm3UIsWaxVzuXvDLFCSCWRO3yy2/+V/G7FusFgejnfQ==", - "bundled": true, - "requires": { - "buffer": "^6.0.3", - "catering": "^2.0.0", - "is-buffer": "^2.0.5", - "level-concat-iterator": "^3.0.0", - "level-supports": "^2.0.1", - "queue-microtask": "^1.2.3" - } - }, - "acorn": { - "version": "8.8.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.1.tgz", - "integrity": "sha512-7zFpHzhnqYKrkYdUjF1HI1bzd0VygEGX8lFk4k5zVMqHEoES+P+7TKI+EvLO9WVMJ8eekdO0aDEK044xTXwPPA==", - "extraneous": true - }, - "acorn-import-assertions": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/acorn-import-assertions/-/acorn-import-assertions-1.8.0.tgz", - "integrity": "sha512-m7VZ3jwz4eK6A4Vtt8Ew1/mNbP24u0FhdyfA7fSvnJR6LMdfOYnmuIrrJAgrYfYJ10F/otaHTtrtrtmHdMNzEw==", - "extraneous": true - }, - "acorn-walk": { - "version": "8.2.0", - "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.2.0.tgz", - "integrity": "sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==", - "extraneous": true - }, - "ajv": { - "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", - "extraneous": true, - "requires": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - } - }, - "ajv-keywords": { - "version": "3.5.2", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", - "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", - "extraneous": true - }, - "ansi-colors": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz", - "integrity": "sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==", - "extraneous": true - }, - "ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "extraneous": true - }, - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "extraneous": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "anymatch": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", - "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", - "extraneous": true, - "requires": { - "normalize-path": "^3.0.0", - "picomatch": "^2.0.4" - } - }, - "arg": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz", - "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==", - "extraneous": true - }, - "argparse": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", - "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", - "extraneous": true, - "requires": { - "sprintf-js": "~1.0.2" - } - }, - "asn1.js": { - "version": "5.4.1", - "resolved": "https://registry.npmjs.org/asn1.js/-/asn1.js-5.4.1.tgz", - "integrity": "sha512-+I//4cYPccV8LdmBLiX8CYvf9Sp3vQsrqu2QNXRcrbiWvcx/UdlFiqUJJzxRQxgsZmvhXhn4cSKeSmoFjVdupA==", - "extraneous": true, - "requires": { - "bn.js": "^4.0.0", - "inherits": "^2.0.1", - "minimalistic-assert": "^1.0.0", - "safer-buffer": "^2.1.0" - }, - "dependencies": { - "bn.js": { - "version": "4.12.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", - "extraneous": true - } - } - }, - "assert": { - "version": "https://registry.npmjs.org/assert/-/assert-2.0.0.tgz", - "integrity": "sha512-se5Cd+js9dXJnu6Ag2JFc00t+HmHOen+8Q+L7O9zI0PqQXr20uk2J0XQqMxZEeo5U50o8Nvmmx7dZrl+Ufr35A==", - "extraneous": true, - "requires": { - "es6-object-assign": "^1.1.0", - "is-nan": "^1.2.1", - "object-is": "^1.0.1", - "util": "^0.12.0" - } - }, - "async": { - "version": "2.6.4", - "resolved": "https://registry.npmjs.org/async/-/async-2.6.4.tgz", - "integrity": "sha512-mzo5dfJYwAn29PeiJ0zvwTo04zj8HDJj0Mn8TD7sno7q12prdbnasKJHhkm2c1LgrhlJ0teaea8860oxi51mGA==", - "requires": { - "lodash": "^4.17.14" - } - }, - "async-eventemitter": { - "version": "0.2.4", - "resolved": "https://registry.npmjs.org/async-eventemitter/-/async-eventemitter-0.2.4.tgz", - "integrity": "sha512-pd20BwL7Yt1zwDFy+8MX8F1+WCT8aQeKj0kQnTrH9WaeRETlRamVhD0JtRPmrV4GfOJ2F9CvdQkZeZhnh2TuHw==", - "requires": { - "async": "^2.4.0" - } - }, - "available-typed-arrays": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz", - "integrity": "sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==", - "extraneous": true - }, - "balanced-match": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", - "extraneous": true - }, - "base64-js": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", - "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", - "bundled": true - }, - "big.js": { - "version": "5.2.2", - "resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz", - "integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==", - "extraneous": true - }, - "binary-extensions": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", - "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", - "extraneous": true - }, - "bn.js": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.2.1.tgz", - "integrity": "sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ==", - "extraneous": true - }, - "brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "extraneous": true, - "requires": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "braces": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", - "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", - "extraneous": true, - "requires": { - "fill-range": "^7.0.1" - } - }, - "brorand": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz", - "integrity": "sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8=", - "bundled": true - }, - "browser-stdout": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.1.tgz", - "integrity": "sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==", - "extraneous": true - }, - "browserify-aes": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/browserify-aes/-/browserify-aes-1.2.0.tgz", - "integrity": "sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==", - "extraneous": true, - "requires": { - "buffer-xor": "^1.0.3", - "cipher-base": "^1.0.0", - "create-hash": "^1.1.0", - "evp_bytestokey": "^1.0.3", - "inherits": "^2.0.1", - "safe-buffer": "^5.0.1" - } - }, - "browserify-cipher": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/browserify-cipher/-/browserify-cipher-1.0.1.tgz", - "integrity": "sha512-sPhkz0ARKbf4rRQt2hTpAHqn47X3llLkUGn+xEJzLjwY8LRs2p0v7ljvI5EyoRO/mexrNunNECisZs+gw2zz1w==", - "extraneous": true, - "requires": { - "browserify-aes": "^1.0.4", - "browserify-des": "^1.0.0", - "evp_bytestokey": "^1.0.0" - } - }, - "browserify-des": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/browserify-des/-/browserify-des-1.0.2.tgz", - "integrity": "sha512-BioO1xf3hFwz4kc6iBhI3ieDFompMhrMlnDFC4/0/vd5MokpuAc3R+LYbwTA9A5Yc9pq9UYPqffKpW2ObuwX5A==", - "extraneous": true, - "requires": { - "cipher-base": "^1.0.1", - "des.js": "^1.0.0", - "inherits": "^2.0.1", - "safe-buffer": "^5.1.2" - } - }, - "browserify-rsa": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/browserify-rsa/-/browserify-rsa-4.1.0.tgz", - "integrity": "sha512-AdEER0Hkspgno2aR97SAf6vi0y0k8NuOpGnVH3O99rcA5Q6sh8QxcngtHuJ6uXwnfAXNM4Gn1Gb7/MV1+Ymbog==", - "extraneous": true, - "requires": { - "bn.js": "^5.0.0", - "randombytes": "^2.0.1" - } - }, - "browserify-sign": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/browserify-sign/-/browserify-sign-4.2.1.tgz", - "integrity": "sha512-/vrA5fguVAKKAVTNJjgSm1tRQDHUU6DbwO9IROu/0WAzC8PKhucDSh18J0RMvVeHAn5puMd+QHC2erPRNf8lmg==", - "extraneous": true, - "requires": { - "bn.js": "^5.1.1", - "browserify-rsa": "^4.0.1", - "create-hash": "^1.2.0", - "create-hmac": "^1.1.7", - "elliptic": "^6.5.3", - "inherits": "^2.0.4", - "parse-asn1": "^5.1.5", - "readable-stream": "^3.6.0", - "safe-buffer": "^5.2.0" - } - }, - "browserslist": { - "version": "4.21.4", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.4.tgz", - "integrity": "sha512-CBHJJdDmgjl3daYjN5Cp5kbTf1mUhZoS+beLklHIvkOWscs83YAhLlF3Wsh/lciQYAcbBJgTOD44VtG31ZM4Hw==", - "extraneous": true, - "requires": { - "caniuse-lite": "^1.0.30001400", - "electron-to-chromium": "^1.4.251", - "node-releases": "^2.0.6", - "update-browserslist-db": "^1.0.9" - } - }, - "buffer": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz", - "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==", - "bundled": true, - "requires": { - "base64-js": "^1.3.1", - "ieee754": "^1.2.1" - } - }, - "buffer-from": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", - "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", - "extraneous": true - }, - "buffer-xor": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/buffer-xor/-/buffer-xor-1.0.3.tgz", - "integrity": "sha512-571s0T7nZWK6vB67HI5dyUF7wXiNcfaPPPTl6zYCNApANjIvYJTg7hlud/+cJpdAhS7dVzqMLmfhfHR3rAcOjQ==", - "extraneous": true - }, - "bufferutil": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/bufferutil/-/bufferutil-4.0.5.tgz", - "integrity": "sha512-HTm14iMQKK2FjFLRTM5lAVcyaUzOnqbPtesFIvREgXpJHdQm8bWS+GkQgIkfaBYRHuCnea7w8UVNfwiAQhlr9A==", - "optional": true, - "requires": { - "node-gyp-build": "^4.3.0" - } - }, - "builtin-status-codes": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz", - "integrity": "sha512-HpGFw18DgFWlncDfjTa2rcQ4W88O1mC8e8yZ2AvQY5KDaktSTwo+KRf6nHK6FRI5FyRyb/5T6+TSxfP7QyGsmQ==", - "extraneous": true - }, - "call-bind": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", - "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", - "extraneous": true, - "requires": { - "function-bind": "^1.1.1", - "get-intrinsic": "^1.0.2" - } - }, - "camelcase": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", - "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", - "extraneous": true - }, - "caniuse-lite": { - "version": "1.0.30001435", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001435.tgz", - "integrity": "sha512-kdCkUTjR+v4YAJelyiDTqiu82BDr4W4CP5sgTA0ZBmqn30XfS2ZghPLMowik9TPhS+psWJiUNxsqLyurDbmutA==", - "extraneous": true - }, - "catering": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/catering/-/catering-2.1.1.tgz", - "integrity": "sha512-K7Qy8O9p76sL3/3m7/zLKbRkyOlSZAgzEaLhyj2mXS8PsCud2Eo4hAb8aLtZqHh0QGqLcb9dlJSu6lHRVENm1w==", - "bundled": true - }, - "chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "extraneous": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "dependencies": { - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "extraneous": true, - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "chokidar": { - "version": "3.5.2", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.2.tgz", - "integrity": "sha512-ekGhOnNVPgT77r4K/U3GDhu+FQ2S8TnK/s2KbIGXi0SZWuwkZ2QNyfWdZW+TVfn84DpEP7rLeCt2UI6bJ8GwbQ==", - "extraneous": true, - "requires": { - "anymatch": "~3.1.2", - "braces": "~3.0.2", - "fsevents": "~2.3.2", - "glob-parent": "~5.1.2", - "is-binary-path": "~2.1.0", - "is-glob": "~4.0.1", - "normalize-path": "~3.0.0", - "readdirp": "~3.6.0" - } - }, - "chrome-trace-event": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.3.tgz", - "integrity": "sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg==", - "extraneous": true - }, - "cipher-base": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.4.tgz", - "integrity": "sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==", - "extraneous": true, - "requires": { - "inherits": "^2.0.1", - "safe-buffer": "^5.0.1" - } - }, - "cliui": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", - "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", - "extraneous": true, - "requires": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.0", - "wrap-ansi": "^7.0.0" - } - }, - "clone-deep": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-4.0.1.tgz", - "integrity": "sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==", - "extraneous": true, - "requires": { - "is-plain-object": "^2.0.4", - "kind-of": "^6.0.2", - "shallow-clone": "^3.0.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "extraneous": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "extraneous": true - }, - "colorette": { - "version": "2.0.19", - "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.19.tgz", - "integrity": "sha512-3tlv/dIP7FWvj3BsbHrGLJ6l/oKh1O3TcgBqMn+yyCagOxc23fyzDS6HypQbgxWbkpDnf52p1LuR4eWDQ/K9WQ==", - "extraneous": true - }, - "colors": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/colors/-/colors-1.2.5.tgz", - "integrity": "sha512-erNRLao/Y3Fv54qUa0LBB+//Uf3YwMUmdJinN20yMXm9zdKKqH9wt7R9IIVZ+K7ShzfpLV/Zg8+VyrBJYB4lpg==", - "extraneous": true - }, - "commander": { - "version": "2.20.3", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", - "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", - "extraneous": true - }, - "concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", - "extraneous": true - }, - "create-ecdh": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/create-ecdh/-/create-ecdh-4.0.4.tgz", - "integrity": "sha512-mf+TCx8wWc9VpuxfP2ht0iSISLZnt0JgWlrOKZiNqyUZWnjIaCIVNQArMHnCZKfEYRg6IM7A+NeJoN8gf/Ws0A==", - "extraneous": true, - "requires": { - "bn.js": "^4.1.0", - "elliptic": "^6.5.3" - }, - "dependencies": { - "bn.js": { - "version": "4.12.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", - "extraneous": true - } - } - }, - "create-hash": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/create-hash/-/create-hash-1.2.0.tgz", - "integrity": "sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==", - "extraneous": true, - "requires": { - "cipher-base": "^1.0.1", - "inherits": "^2.0.1", - "md5.js": "^1.3.4", - "ripemd160": "^2.0.1", - "sha.js": "^2.4.0" - } - }, - "create-hmac": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/create-hmac/-/create-hmac-1.1.7.tgz", - "integrity": "sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==", - "extraneous": true, - "requires": { - "cipher-base": "^1.0.3", - "create-hash": "^1.1.0", - "inherits": "^2.0.1", - "ripemd160": "^2.0.0", - "safe-buffer": "^5.0.1", - "sha.js": "^2.4.8" - } - }, - "create-require": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz", - "integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==", - "extraneous": true - }, - "cross-env": { - "version": "https://registry.npmjs.org/cross-env/-/cross-env-7.0.3.tgz", - "integrity": "sha512-+/HKd6EgcQCJGh2PSjZuUitQBQynKor4wrFbRg4DtAgS1aWO+gU52xpH7M9ScGgXSYmAVS9bIJ8EzuaGw0oNAw==", - "extraneous": true, - "requires": { - "cross-spawn": "^7.0.1" - } - }, - "cross-spawn": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", - "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", - "extraneous": true, - "requires": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" - } - }, - "crypto-browserify": { - "version": "https://registry.npmjs.org/crypto-browserify/-/crypto-browserify-3.12.0.tgz", - "integrity": "sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg==", - "extraneous": true, - "requires": { - "browserify-cipher": "^1.0.0", - "browserify-sign": "^4.0.0", - "create-ecdh": "^4.0.0", - "create-hash": "^1.1.0", - "create-hmac": "^1.1.0", - "diffie-hellman": "^5.0.0", - "inherits": "^2.0.1", - "pbkdf2": "^3.0.3", - "public-encrypt": "^4.0.0", - "randombytes": "^2.0.0", - "randomfill": "^1.0.3" - } - }, - "debug": { - "version": "4.3.2", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.2.tgz", - "integrity": "sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==", - "extraneous": true, - "requires": { - "ms": "2.1.2" - }, - "dependencies": { - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "extraneous": true - } - } - }, - "decamelize": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-4.0.0.tgz", - "integrity": "sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ==", - "extraneous": true - }, - "define-properties": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.4.tgz", - "integrity": "sha512-uckOqKcfaVvtBdsVkdPv3XjveQJsNQqmhXgRi8uhvWWuPYZCNlzT8qAyblUgNoXdHdjMTzAqeGjAoli8f+bzPA==", - "extraneous": true, - "requires": { - "has-property-descriptors": "^1.0.0", - "object-keys": "^1.1.1" - } - }, - "des.js": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/des.js/-/des.js-1.0.1.tgz", - "integrity": "sha512-Q0I4pfFrv2VPd34/vfLrFOoRmlYj3OV50i7fskps1jZWK1kApMWWT9G6RRUeYedLcBDIhnSDaUvJMb3AhUlaEA==", - "extraneous": true, - "requires": { - "inherits": "^2.0.1", - "minimalistic-assert": "^1.0.0" - } - }, - "diff": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/diff/-/diff-5.0.0.tgz", - "integrity": "sha512-/VTCrvm5Z0JGty/BWHljh+BAiw3IK+2j87NGMu8Nwc/f48WoDAC395uomO9ZD117ZOBaHmkX1oyLvkVM/aIT3w==", - "extraneous": true - }, - "diffie-hellman": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/diffie-hellman/-/diffie-hellman-5.0.3.tgz", - "integrity": "sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg==", - "extraneous": true, - "requires": { - "bn.js": "^4.1.0", - "miller-rabin": "^4.0.0", - "randombytes": "^2.0.0" - }, - "dependencies": { - "bn.js": { - "version": "4.12.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", - "extraneous": true - } - } - }, - "electron-to-chromium": { - "version": "1.4.284", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.284.tgz", - "integrity": "sha512-M8WEXFuKXMYMVr45fo8mq0wUrrJHheiKZf6BArTKk9ZBYCKJEOU5H8cdWgDT+qCVZf7Na4lVUaZsA+h6uA9+PA==", - "extraneous": true - }, - "elliptic": { - "version": "6.5.4", - "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.4.tgz", - "integrity": "sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ==", - "bundled": true, - "requires": { - "bn.js": "^4.11.9", - "brorand": "^1.1.0", - "hash.js": "^1.0.0", - "hmac-drbg": "^1.0.1", - "inherits": "^2.0.4", - "minimalistic-assert": "^1.0.1", - "minimalistic-crypto-utils": "^1.0.1" - }, - "dependencies": { - "bn.js": { - "version": "4.12.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", - "bundled": true - } - } - }, - "emittery": { - "version": "0.10.0", - "resolved": "https://registry.npmjs.org/emittery/-/emittery-0.10.0.tgz", - "integrity": "sha512-AGvFfs+d0JKCJQ4o01ASQLGPmSCxgfU9RFXvzPvZdjKK8oscynksuJhWrSTSw7j7Ep/sZct5b5ZhYCi8S/t0HQ==" - }, - "emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "extraneous": true - }, - "emojis-list": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-3.0.0.tgz", - "integrity": "sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==", - "extraneous": true - }, - "enhanced-resolve": { - "version": "5.12.0", - "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.12.0.tgz", - "integrity": "sha512-QHTXI/sZQmko1cbDoNAa3mJ5qhWUUNAq3vR0/YiD379fWQrcfuoX1+HW2S0MTt7XmoPLapdaDKUtelUSPic7hQ==", - "extraneous": true, - "requires": { - "graceful-fs": "^4.2.4", - "tapable": "^2.2.0" - } - }, - "envinfo": { - "version": "7.8.1", - "resolved": "https://registry.npmjs.org/envinfo/-/envinfo-7.8.1.tgz", - "integrity": "sha512-/o+BXHmB7ocbHEAs6F2EnG0ogybVVUdkRunTT2glZU9XAaGmhqskrvKwqXuDfNjEO0LZKWdejEEpnq8aM0tOaw==", - "extraneous": true - }, - "es-module-lexer": { - "version": "0.9.3", - "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-0.9.3.tgz", - "integrity": "sha512-1HQ2M2sPtxwnvOvT1ZClHyQDiggdNjURWpY2we6aMKCQiUVxTmVs2UYPLIrD84sS+kMdUwfBSylbJPwNnBrnHQ==", - "extraneous": true - }, - "es6-object-assign": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/es6-object-assign/-/es6-object-assign-1.1.0.tgz", - "integrity": "sha512-MEl9uirslVwqQU369iHNWZXsI8yaZYGg/D65aOgZkeyFJwHYSxilf7rQzXKI7DdDuBPrBXbfk3sl9hJhmd5AUw==", - "extraneous": true - }, - "escalade": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", - "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", - "extraneous": true - }, - "escape-string-regexp": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", - "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", - "extraneous": true - }, - "eslint-scope": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", - "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", - "extraneous": true, - "requires": { - "esrecurse": "^4.3.0", - "estraverse": "^4.1.1" - } - }, - "esrecurse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", - "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", - "extraneous": true, - "requires": { - "estraverse": "^5.2.0" - }, - "dependencies": { - "estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", - "extraneous": true - } - } - }, - "estraverse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", - "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", - "extraneous": true - }, - "events": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", - "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", - "extraneous": true - }, - "evp_bytestokey": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz", - "integrity": "sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==", - "extraneous": true, - "requires": { - "md5.js": "^1.3.4", - "safe-buffer": "^5.1.1" - } - }, - "execa": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", - "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", - "extraneous": true, - "requires": { - "cross-spawn": "^7.0.3", - "get-stream": "^6.0.0", - "human-signals": "^2.1.0", - "is-stream": "^2.0.0", - "merge-stream": "^2.0.0", - "npm-run-path": "^4.0.1", - "onetime": "^5.1.2", - "signal-exit": "^3.0.3", - "strip-final-newline": "^2.0.0" - } - }, - "fast-deep-equal": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", - "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", - "extraneous": true - }, - "fast-json-stable-stringify": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", - "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", - "extraneous": true - }, - "fastest-levenshtein": { - "version": "1.0.16", - "resolved": "https://registry.npmjs.org/fastest-levenshtein/-/fastest-levenshtein-1.0.16.tgz", - "integrity": "sha512-eRnCtTTtGZFpQCwhJiUOuxPQWRXVKYDn0b2PeHfXL6/Zi53SLAzAHfVhVWK2AryC/WH05kGfxhFIPvTF0SXQzg==", - "extraneous": true - }, - "fill-range": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", - "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", - "extraneous": true, - "requires": { - "to-regex-range": "^5.0.1" - } - }, - "find-up": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", - "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", - "extraneous": true, - "requires": { - "locate-path": "^6.0.0", - "path-exists": "^4.0.0" - } - }, - "flat": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz", - "integrity": "sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==", - "extraneous": true - }, - "for-each": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz", - "integrity": "sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==", - "extraneous": true, - "requires": { - "is-callable": "^1.1.3" - } - }, - "fs-extra": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-7.0.1.tgz", - "integrity": "sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==", - "extraneous": true, - "requires": { - "graceful-fs": "^4.1.2", - "jsonfile": "^4.0.0", - "universalify": "^0.1.0" - } - }, - "fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", - "extraneous": true - }, - "fsevents": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", - "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", - "extraneous": true - }, - "function-bind": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", - "extraneous": true - }, - "get-caller-file": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", - "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", - "extraneous": true - }, - "get-intrinsic": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.3.tgz", - "integrity": "sha512-QJVz1Tj7MS099PevUG5jvnt9tSkXN8K14dxQlikJuPt4uD9hHAHjLyLBiLR5zELelBdD9QNRAXZzsJx0WaDL9A==", - "extraneous": true, - "requires": { - "function-bind": "^1.1.1", - "has": "^1.0.3", - "has-symbols": "^1.0.3" - } - }, - "get-stream": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", - "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", - "extraneous": true - }, - "glob": { - "version": "7.1.7", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.7.tgz", - "integrity": "sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ==", - "extraneous": true, - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - }, - "glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", - "extraneous": true, - "requires": { - "is-glob": "^4.0.1" - } - }, - "glob-to-regexp": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz", - "integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==", - "extraneous": true - }, - "gopd": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", - "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", - "extraneous": true, - "requires": { - "get-intrinsic": "^1.1.3" - } - }, - "graceful-fs": { - "version": "4.2.10", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz", - "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==", - "extraneous": true - }, - "growl": { - "version": "1.10.5", - "resolved": "https://registry.npmjs.org/growl/-/growl-1.10.5.tgz", - "integrity": "sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA==", - "extraneous": true - }, - "has": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", - "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", - "extraneous": true, - "requires": { - "function-bind": "^1.1.1" - } - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "extraneous": true - }, - "has-property-descriptors": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz", - "integrity": "sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==", - "extraneous": true, - "requires": { - "get-intrinsic": "^1.1.1" - } - }, - "has-symbols": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", - "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", - "extraneous": true - }, - "has-tostringtag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz", - "integrity": "sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==", - "extraneous": true, - "requires": { - "has-symbols": "^1.0.2" - } - }, - "hash-base": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.1.0.tgz", - "integrity": "sha512-1nmYp/rhMDiE7AYkDw+lLwlAzz0AntGIe51F3RfFfEqyQ3feY2eI/NcwC6umIQVOASPMsWJLJScWKSSvzL9IVA==", - "extraneous": true, - "requires": { - "inherits": "^2.0.4", - "readable-stream": "^3.6.0", - "safe-buffer": "^5.2.0" - } - }, - "hash.js": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.7.tgz", - "integrity": "sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==", - "bundled": true, - "requires": { - "inherits": "^2.0.3", - "minimalistic-assert": "^1.0.1" - } - }, - "he": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", - "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", - "extraneous": true - }, - "hmac-drbg": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz", - "integrity": "sha1-0nRXAQJabHdabFRXk+1QL8DGSaE=", - "bundled": true, - "requires": { - "hash.js": "^1.0.3", - "minimalistic-assert": "^1.0.0", - "minimalistic-crypto-utils": "^1.0.1" - } - }, - "https-browserify": { - "version": "https://registry.npmjs.org/https-browserify/-/https-browserify-1.0.0.tgz", - "integrity": "sha512-J+FkSdyD+0mA0N+81tMotaRMfSL9SGi+xpD3T6YApKsc3bGSXJlfXri3VyFOeYkfLRQisDk1W+jIFFKBeUBbBg==", - "extraneous": true - }, - "human-signals": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", - "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", - "extraneous": true - }, - "ieee754": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", - "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", - "bundled": true - }, - "import-lazy": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/import-lazy/-/import-lazy-4.0.0.tgz", - "integrity": "sha512-rKtvo6a868b5Hu3heneU+L4yEQ4jYKLtjpnPeUdK7h0yzXGmyBTypknlkCvHFBqfX9YlorEiMM6Dnq/5atfHkw==", - "extraneous": true - }, - "import-local": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.1.0.tgz", - "integrity": "sha512-ASB07uLtnDs1o6EHjKpX34BKYDSqnFerfTOJL2HvMqF70LnxpjkzDB8J44oT9pu4AMPkQwf8jl6szgvNd2tRIg==", - "extraneous": true, - "requires": { - "pkg-dir": "^4.2.0", - "resolve-cwd": "^3.0.0" - } - }, - "inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", - "extraneous": true, - "requires": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", - "bundled": true - }, - "interpret": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.4.0.tgz", - "integrity": "sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA==", - "extraneous": true - }, - "is-arguments": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.1.1.tgz", - "integrity": "sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==", - "extraneous": true, - "requires": { - "call-bind": "^1.0.2", - "has-tostringtag": "^1.0.0" - } - }, - "is-binary-path": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", - "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", - "extraneous": true, - "requires": { - "binary-extensions": "^2.0.0" - } - }, - "is-buffer": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-2.0.5.tgz", - "integrity": "sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ==", - "bundled": true - }, - "is-callable": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz", - "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==", - "extraneous": true - }, - "is-core-module": { - "version": "2.11.0", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.11.0.tgz", - "integrity": "sha512-RRjxlvLDkD1YJwDbroBHMb+cukurkDWNyHx7D3oNB5x9rb5ogcksMC5wHCadcXoo67gVr/+3GFySh3134zi6rw==", - "extraneous": true, - "requires": { - "has": "^1.0.3" - } - }, - "is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", - "extraneous": true - }, - "is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "extraneous": true - }, - "is-generator-function": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.0.10.tgz", - "integrity": "sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A==", - "extraneous": true, - "requires": { - "has-tostringtag": "^1.0.0" - } - }, - "is-glob": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", - "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", - "extraneous": true, - "requires": { - "is-extglob": "^2.1.1" - } - }, - "is-nan": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/is-nan/-/is-nan-1.3.2.tgz", - "integrity": "sha512-E+zBKpQ2t6MEo1VsonYmluk9NxGrbzpeeLC2xIViuO2EjU2xsXsBPwTr3Ykv9l08UYEVEdWeRZNouaZqF6RN0w==", - "extraneous": true, - "requires": { - "call-bind": "^1.0.0", - "define-properties": "^1.1.3" - } - }, - "is-number": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", - "extraneous": true - }, - "is-plain-obj": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz", - "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==", - "extraneous": true - }, - "is-plain-object": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", - "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", - "extraneous": true, - "requires": { - "isobject": "^3.0.1" - } - }, - "is-stream": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", - "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", - "extraneous": true - }, - "is-typed-array": { - "version": "1.1.10", - "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.10.tgz", - "integrity": "sha512-PJqgEHiWZvMpaFZ3uTc8kHPM4+4ADTlDniuQL7cU/UDA0Ql7F70yGfHph3cLNe+c9toaigv+DFzTJKhc2CtO6A==", - "extraneous": true, - "requires": { - "available-typed-arrays": "^1.0.5", - "call-bind": "^1.0.2", - "for-each": "^0.3.3", - "gopd": "^1.0.1", - "has-tostringtag": "^1.0.0" - } - }, - "is-unicode-supported": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", - "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==", - "extraneous": true - }, - "isexe": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", - "extraneous": true - }, - "isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==", - "extraneous": true - }, - "jest-worker": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.5.1.tgz", - "integrity": "sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==", - "extraneous": true, - "requires": { - "@types/node": "*", - "merge-stream": "^2.0.0", - "supports-color": "^8.0.0" - } - }, - "jju": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/jju/-/jju-1.4.0.tgz", - "integrity": "sha512-8wb9Yw966OSxApiCt0K3yNJL8pnNeIv+OEq2YMidz4FKP6nonSRoOXc80iXY4JaN2FC11B9qsNmDsm+ZOfMROA==", - "extraneous": true - }, - "js-yaml": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", - "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", - "extraneous": true, - "requires": { - "argparse": "^2.0.1" - }, - "dependencies": { - "argparse": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", - "extraneous": true - } - } - }, - "json-parse-better-errors": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz", - "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==", - "extraneous": true - }, - "json-schema-traverse": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", - "extraneous": true - }, - "json5": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.1.tgz", - "integrity": "sha512-1hqLFMSrGHRHxav9q9gNjJ5EXznIxGVO09xQRrwplcS8qs28pZ8s8hupZAmqDwZUmVZ2Qb2jnyPOWcDH8m8dlA==", - "extraneous": true - }, - "jsonfile": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", - "integrity": "sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==", - "extraneous": true, - "requires": { - "graceful-fs": "^4.1.6" - } - }, - "keccak": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/keccak/-/keccak-3.0.2.tgz", - "integrity": "sha512-PyKKjkH53wDMLGrvmRGSNWgmSxZOUqbnXwKL9tmgbFYA1iAYqW21kfR7mZXV0MlESiefxQQE9X9fTa3X+2MPDQ==", - "bundled": true, - "requires": { - "node-addon-api": "^2.0.0", - "node-gyp-build": "^4.2.0", - "readable-stream": "^3.6.0" - } - }, - "kind-of": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", - "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", - "extraneous": true - }, - "level-concat-iterator": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/level-concat-iterator/-/level-concat-iterator-3.1.0.tgz", - "integrity": "sha512-BWRCMHBxbIqPxJ8vHOvKUsaO0v1sLYZtjN3K2iZJsRBYtp+ONsY6Jfi6hy9K3+zolgQRryhIn2NRZjZnWJ9NmQ==", - "bundled": true, - "requires": { - "catering": "^2.1.0" - } - }, - "level-js": { - "version": "https://registry.npmjs.org/level-js/-/level-js-6.1.0.tgz", - "integrity": "sha512-i7mPtkZm68aewfv0FnIUWvFUFfoyzIvVKnUmuQGrelEkP72vSPTaA1SGneWWoCV5KZJG4wlzbJLp1WxVNGuc6A==", - "extraneous": true, - "requires": { - "abstract-leveldown": "^7.2.0", - "buffer": "^6.0.3", - "inherits": "^2.0.3", - "ltgt": "^2.1.2", - "run-parallel-limit": "^1.1.0" - } - }, - "level-supports": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/level-supports/-/level-supports-2.1.0.tgz", - "integrity": "sha512-E486g1NCjW5cF78KGPrMDRBYzPuueMZ6VBXHT6gC7A8UYWGiM14fGgp+s/L1oFfDWSPV/+SFkYCmZ0SiESkRKA==", - "bundled": true - }, - "level-transcoder": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/level-transcoder/-/level-transcoder-1.0.1.tgz", - "integrity": "sha512-t7bFwFtsQeD8cl8NIoQ2iwxA0CL/9IFw7/9gAjOonH0PWTTiRfY7Hq+Ejbsxh86tXobDQ6IOiddjNYIfOBs06w==", - "requires": { - "buffer": "^6.0.3", - "module-error": "^1.0.1" - } - }, - "leveldown": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/leveldown/-/leveldown-6.1.0.tgz", - "integrity": "sha512-8C7oJDT44JXxh04aSSsfcMI8YiaGRhOFI9/pMEL7nWJLVsWajDPTRxsSHTM2WcTVY5nXM+SuRHzPPi0GbnDX+w==", - "bundled": true, - "requires": { - "abstract-leveldown": "^7.2.0", - "napi-macros": "~2.0.0", - "node-gyp-build": "^4.3.0" - } - }, - "loader-runner": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-4.3.0.tgz", - "integrity": "sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg==", - "extraneous": true - }, - "loader-utils": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.4.tgz", - "integrity": "sha512-xXqpXoINfFhgua9xiqD8fPFHgkoq1mmmpE92WlDbm9rNRd/EbRb+Gqf908T2DMfuHjjJlksiK2RbHVOdD/MqSw==", - "extraneous": true, - "requires": { - "big.js": "^5.2.2", - "emojis-list": "^3.0.0", - "json5": "^2.1.2" - } - }, - "locate-path": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", - "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", - "extraneous": true, - "requires": { - "p-locate": "^5.0.0" - } - }, - "lodash": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" - }, - "lodash.get": { - "version": "4.4.2", - "resolved": "https://registry.npmjs.org/lodash.get/-/lodash.get-4.4.2.tgz", - "integrity": "sha512-z+Uw/vLuy6gQe8cfaFWD7p0wVv8fJl3mbzXh33RS+0oW2wvUqiRXiQ69gLWSLpgB5/6sU+r6BlQR0MBILadqTQ==", - "extraneous": true - }, - "lodash.isequal": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/lodash.isequal/-/lodash.isequal-4.5.0.tgz", - "integrity": "sha512-pDo3lu8Jhfjqls6GkMgpahsF9kCyayhgykjyLMNFTKWrpVdAQtYyB4muAMWozBB4ig/dtWAmsMxLEI8wuz+DYQ==", - "extraneous": true - }, - "log-symbols": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", - "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", - "extraneous": true, - "requires": { - "chalk": "^4.1.0", - "is-unicode-supported": "^0.1.0" - } - }, - "lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "extraneous": true, - "requires": { - "yallist": "^4.0.0" - } - }, - "ltgt": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/ltgt/-/ltgt-2.2.1.tgz", - "integrity": "sha512-AI2r85+4MquTw9ZYqabu4nMwy9Oftlfa/e/52t9IjtfG+mGBbTNdAoZ3RQKLHR6r0wQnwZnPIEh/Ya6XTWAKNA==", - "extraneous": true - }, - "make-error": { - "version": "1.3.6", - "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", - "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==", - "extraneous": true - }, - "mcl-wasm": { - "version": "https://registry.npmjs.org/mcl-wasm/-/mcl-wasm-0.9.0.tgz", - "integrity": "sha512-rvU7L/68ZrDk4dpPZteiEqvK9nB/1XbbHmuLK6qIvc4xuuJb/iv1p5X3KEyq6AYatLnc+zbdSlLXTlKgTnCRZQ==", - "extraneous": true - }, - "md5.js": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/md5.js/-/md5.js-1.3.5.tgz", - "integrity": "sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==", - "extraneous": true, - "requires": { - "hash-base": "^3.0.0", - "inherits": "^2.0.1", - "safe-buffer": "^5.1.2" - } - }, - "merge-stream": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", - "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", - "extraneous": true - }, - "micromatch": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", - "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", - "extraneous": true, - "requires": { - "braces": "^3.0.2", - "picomatch": "^2.3.1" - } - }, - "miller-rabin": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/miller-rabin/-/miller-rabin-4.0.1.tgz", - "integrity": "sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA==", - "extraneous": true, - "requires": { - "bn.js": "^4.0.0", - "brorand": "^1.0.1" - }, - "dependencies": { - "bn.js": { - "version": "4.12.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", - "extraneous": true - } - } - }, - "mime-db": { - "version": "1.52.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", - "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", - "extraneous": true - }, - "mime-types": { - "version": "2.1.35", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", - "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", - "extraneous": true, - "requires": { - "mime-db": "1.52.0" - } - }, - "mimic-fn": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", - "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", - "extraneous": true - }, - "minimalistic-assert": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", - "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==", - "bundled": true - }, - "minimalistic-crypto-utils": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz", - "integrity": "sha1-9sAMHAsIIkblxNmd+4x8CDsrWCo=", - "bundled": true - }, - "minimatch": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", - "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", - "extraneous": true, - "requires": { - "brace-expansion": "^1.1.7" - } - }, - "minimist": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.7.tgz", - "integrity": "sha512-bzfL1YUZsP41gmu/qjrEk0Q6i2ix/cVeAhbCbqH9u3zYutS1cLg00qhrD0M2MVdCcx4Sc0UpP2eBWo9rotpq6g==", - "extraneous": true - }, - "mocha": { - "version": "https://registry.npmjs.org/mocha/-/mocha-9.1.3.tgz", - "integrity": "sha512-Xcpl9FqXOAYqI3j79pEtHBBnQgVXIhpULjGQa7DVb0Po+VzmSIK9kanAiWLHoRR/dbZ2qpdPshuXr8l1VaHCzw==", - "extraneous": true, - "requires": { - "@ungap/promise-all-settled": "1.1.2", - "ansi-colors": "4.1.1", - "browser-stdout": "1.3.1", - "chokidar": "3.5.2", - "debug": "4.3.2", - "diff": "5.0.0", - "escape-string-regexp": "4.0.0", - "find-up": "5.0.0", - "glob": "7.1.7", - "growl": "1.10.5", - "he": "1.2.0", - "js-yaml": "4.1.0", - "log-symbols": "4.1.0", - "minimatch": "3.0.4", - "ms": "2.1.3", - "nanoid": "3.1.25", - "serialize-javascript": "6.0.0", - "strip-json-comments": "3.1.1", - "supports-color": "8.1.1", - "which": "2.0.2", - "workerpool": "6.1.5", - "yargs": "16.2.0", - "yargs-parser": "20.2.4", - "yargs-unparser": "2.0.0" - } - }, - "module-error": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/module-error/-/module-error-1.0.2.tgz", - "integrity": "sha512-0yuvsqSCv8LbaOKhnsQ/T5JhyFlCYLPXK3U2sgV10zoKQwzs/MyfuQUOZQ1V/6OCOJsK/TRgNVrPuPDqtdMFtA==" - }, - "ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", - "extraneous": true - }, - "nanoid": { - "version": "3.1.25", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.1.25.tgz", - "integrity": "sha512-rdwtIXaXCLFAQbnfqDRnI6jaRHp9fTcYBjtFKE8eezcZ7LuLjhUaQGNeMXf1HmRoCH32CLz6XwX0TtxEOS/A3Q==", - "extraneous": true - }, - "napi-macros": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/napi-macros/-/napi-macros-2.0.0.tgz", - "integrity": "sha512-A0xLykHtARfueITVDernsAWdtIMbOJgKgcluwENp3AlsKN/PloyO10HtmoqnFAQAcxPkgZN7wdfPfEd0zNGxbg==", - "bundled": true - }, - "neo-async": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", - "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==", - "extraneous": true - }, - "node-addon-api": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-2.0.2.tgz", - "integrity": "sha512-Ntyt4AIXyaLIuMHF6IOoTakB3K+RWxwtsHNRxllEoA6vPwP9o4866g6YWDLUdnucilZhmkxiHwHr11gAENw+QA==", - "bundled": true - }, - "node-gyp-build": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.5.0.tgz", - "integrity": "sha512-2iGbaQBV+ITgCz76ZEjmhUKAKVf7xfY1sRl4UiKQspfZMH2h06SyhNsnSVy50cwkFQDGLyif6m/6uFXHkOZ6rg==", - "bundled": true - }, - "node-loader": { - "version": "https://registry.npmjs.org/node-loader/-/node-loader-1.0.2.tgz", - "integrity": "sha512-myxAxpyMR7knjA4Uzwf3gjxaMtxSWj2vpm9o6AYWWxQ1S3XMBNeG2vzYcp/5eW03cBGfgSxyP+wntP8qhBJNhQ==", - "extraneous": true, - "requires": { - "loader-utils": "^2.0.0", - "schema-utils": "^3.0.0" - } - }, - "node-releases": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.6.tgz", - "integrity": "sha512-PiVXnNuFm5+iYkLBNeq5211hvO38y63T0i2KKh2KnUs3RpzJ+JtODFjkD8yjLwnDkTYF1eKXheUwdssR+NRZdg==", - "extraneous": true - }, - "normalize-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", - "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", - "extraneous": true - }, - "npm-run-path": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", - "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", - "extraneous": true, - "requires": { - "path-key": "^3.0.0" - } - }, - "object-is": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/object-is/-/object-is-1.1.5.tgz", - "integrity": "sha512-3cyDsyHgtmi7I7DfSSI2LDp6SK2lwvtbg0p0R1e0RvTqF5ceGx+K2dfSjm1bKDMVCFEDAQvy+o8c6a7VujOddw==", - "extraneous": true, - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3" - } - }, - "object-keys": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", - "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", - "extraneous": true - }, - "once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", - "extraneous": true, - "requires": { - "wrappy": "1" - } - }, - "onetime": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", - "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", - "extraneous": true, - "requires": { - "mimic-fn": "^2.1.0" - } - }, - "os-browserify": { - "version": "https://registry.npmjs.org/os-browserify/-/os-browserify-0.3.0.tgz", - "integrity": "sha512-gjcpUc3clBf9+210TRaDWbf+rZZZEshZ+DlXMRCeAjp0xhTrnQsKHypIy1J3d5hKdUzj69t708EHtU8P6bUn0A==", - "extraneous": true - }, - "p-limit": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", - "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", - "extraneous": true, - "requires": { - "yocto-queue": "^0.1.0" - } - }, - "p-locate": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", - "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", - "extraneous": true, - "requires": { - "p-limit": "^3.0.2" - } - }, - "p-try": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", - "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", - "extraneous": true - }, - "parse-asn1": { - "version": "5.1.6", - "resolved": "https://registry.npmjs.org/parse-asn1/-/parse-asn1-5.1.6.tgz", - "integrity": "sha512-RnZRo1EPU6JBnra2vGHj0yhp6ebyjBZpmUCLHWiFhxlzvBCCpAuZ7elsBp1PVAbQN0/04VD/19rfzlBSwLstMw==", - "extraneous": true, - "requires": { - "asn1.js": "^5.2.0", - "browserify-aes": "^1.0.0", - "evp_bytestokey": "^1.0.0", - "pbkdf2": "^3.0.3", - "safe-buffer": "^5.1.1" - } - }, - "path-browserify": { - "version": "https://registry.npmjs.org/path-browserify/-/path-browserify-1.0.1.tgz", - "integrity": "sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g==", - "extraneous": true - }, - "path-exists": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", - "extraneous": true - }, - "path-is-absolute": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", - "extraneous": true - }, - "path-key": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", - "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", - "extraneous": true - }, - "path-parse": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", - "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", - "extraneous": true - }, - "pbkdf2": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.1.2.tgz", - "integrity": "sha512-iuh7L6jA7JEGu2WxDwtQP1ddOpaJNC4KlDEFfdQajSGgGPNi4OyDc2R7QnbY2bR9QjBVGwgvTdNJZoE7RaxUMA==", - "extraneous": true, - "requires": { - "create-hash": "^1.1.2", - "create-hmac": "^1.1.4", - "ripemd160": "^2.0.1", - "safe-buffer": "^5.0.1", - "sha.js": "^2.4.8" - } - }, - "picocolors": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", - "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", - "extraneous": true - }, - "picomatch": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", - "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", - "extraneous": true - }, - "pkg-dir": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", - "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", - "extraneous": true, - "requires": { - "find-up": "^4.0.0" - }, - "dependencies": { - "find-up": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", - "extraneous": true, - "requires": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" - } - }, - "locate-path": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", - "extraneous": true, - "requires": { - "p-locate": "^4.1.0" - } - }, - "p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", - "extraneous": true, - "requires": { - "p-try": "^2.0.0" - } - }, - "p-locate": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", - "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", - "extraneous": true, - "requires": { - "p-limit": "^2.2.0" - } - } - } - }, - "process": { - "version": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", - "integrity": "sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==", - "extraneous": true - }, - "public-encrypt": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/public-encrypt/-/public-encrypt-4.0.3.tgz", - "integrity": "sha512-zVpa8oKZSz5bTMTFClc1fQOnyyEzpl5ozpi1B5YcvBrdohMjH2rfsBtyXcuNuwjsDIXmBYlF2N5FlJYhR29t8Q==", - "extraneous": true, - "requires": { - "bn.js": "^4.1.0", - "browserify-rsa": "^4.0.0", - "create-hash": "^1.1.0", - "parse-asn1": "^5.0.0", - "randombytes": "^2.0.1", - "safe-buffer": "^5.1.2" - }, - "dependencies": { - "bn.js": { - "version": "4.12.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", - "extraneous": true - } - } - }, - "punycode": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", - "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", - "extraneous": true - }, - "queue-microtask": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", - "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", - "bundled": true - }, - "randombytes": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", - "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", - "extraneous": true, - "requires": { - "safe-buffer": "^5.1.0" - } - }, - "randomfill": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/randomfill/-/randomfill-1.0.4.tgz", - "integrity": "sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw==", - "extraneous": true, - "requires": { - "randombytes": "^2.0.5", - "safe-buffer": "^5.1.0" - } - }, - "readable-stream": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", - "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", - "bundled": true, - "requires": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - } - }, - "readdirp": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", - "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", - "extraneous": true, - "requires": { - "picomatch": "^2.2.1" - } - }, - "rechoir": { - "version": "0.6.2", - "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.6.2.tgz", - "integrity": "sha512-HFM8rkZ+i3zrV+4LQjwQ0W+ez98pApMGM3HUrN04j3CqzPOzl9nmP15Y8YXNm8QHGv/eacOVEjqhmWpkRV0NAw==", - "extraneous": true, - "requires": { - "resolve": "^1.1.6" - } - }, - "require-directory": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", - "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", - "extraneous": true - }, - "resolve": { - "version": "1.17.0", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.17.0.tgz", - "integrity": "sha512-ic+7JYiV8Vi2yzQGFWOkiZD5Z9z7O2Zhm9XMaTxdJExKasieFCr+yXZ/WmXsckHiKl12ar0y6XiXDx3m4RHn1w==", - "extraneous": true, - "requires": { - "path-parse": "^1.0.6" - } - }, - "resolve-cwd": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-3.0.0.tgz", - "integrity": "sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==", - "extraneous": true, - "requires": { - "resolve-from": "^5.0.0" - } - }, - "resolve-from": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", - "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", - "extraneous": true - }, - "ripemd160": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.2.tgz", - "integrity": "sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==", - "extraneous": true, - "requires": { - "hash-base": "^3.0.0", - "inherits": "^2.0.1" - } - }, - "run-parallel-limit": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/run-parallel-limit/-/run-parallel-limit-1.1.0.tgz", - "integrity": "sha512-jJA7irRNM91jaKc3Hcl1npHsFLOXOoTkPCUL1JEa1R82O2miplXXRaGdjW/KM/98YQWDhJLiSs793CnXfblJUw==", - "extraneous": true, - "requires": { - "queue-microtask": "^1.2.2" - } - }, - "safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", - "bundled": true - }, - "safer-buffer": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", - "extraneous": true - }, - "schema-utils": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.1.tgz", - "integrity": "sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw==", - "extraneous": true, - "requires": { - "@types/json-schema": "^7.0.8", - "ajv": "^6.12.5", - "ajv-keywords": "^3.5.2" - } - }, - "scrypt-js": { - "version": "https://registry.npmjs.org/scrypt-js/-/scrypt-js-3.0.1.tgz", - "integrity": "sha512-cdwTTnqPu0Hyvf5in5asVdZocVDTNRmR7XEcJuIzMjJeSHybHl7vpB66AzwTaIg6CLSbtjcxc8fqcySfnTkccA==", - "extraneous": true - }, - "secp256k1": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/secp256k1/-/secp256k1-4.0.3.tgz", - "integrity": "sha512-NLZVf+ROMxwtEj3Xa562qgv2BK5e2WNmXPiOdVIPLgs6lyTzMvBq0aWTYMI5XCP9jZMVKOcqZLw/Wc4vDkuxhA==", - "bundled": true, - "requires": { - "elliptic": "^6.5.4", - "node-addon-api": "^2.0.0", - "node-gyp-build": "^4.2.0" - } - }, - "semver": { - "version": "7.3.8", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", - "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", - "extraneous": true, - "requires": { - "lru-cache": "^6.0.0" - } - }, - "serialize-javascript": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.0.tgz", - "integrity": "sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag==", - "extraneous": true, - "requires": { - "randombytes": "^2.1.0" - } - }, - "setimmediate": { - "version": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", - "integrity": "sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA==", - "extraneous": true - }, - "sha.js": { - "version": "2.4.11", - "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz", - "integrity": "sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==", - "extraneous": true, - "requires": { - "inherits": "^2.0.1", - "safe-buffer": "^5.0.1" - } - }, - "shallow-clone": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/shallow-clone/-/shallow-clone-3.0.1.tgz", - "integrity": "sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA==", - "extraneous": true, - "requires": { - "kind-of": "^6.0.2" - } - }, - "shebang-command": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", - "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", - "extraneous": true, - "requires": { - "shebang-regex": "^3.0.0" - } - }, - "shebang-loader": { - "version": "https://registry.npmjs.org/shebang-loader/-/shebang-loader-0.0.1.tgz", - "integrity": "sha512-nQvhUHvKyzGK5aqPxHfHB5nlAN2EZ2U61S2G0YrxAuCRU5iGhFcxxRiaAdb18UoRS1zVMhRz4gdQ1xFEg3AOyA==", - "extraneous": true - }, - "shebang-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", - "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", - "extraneous": true - }, - "shelljs": { - "version": "0.8.5", - "resolved": "https://registry.npmjs.org/shelljs/-/shelljs-0.8.5.tgz", - "integrity": "sha512-TiwcRcrkhHvbrZbnRcFYMLl30Dfov3HKqzp5tO5b4pt6G/SezKcYhmDg15zXVBswHmctSAQKznqNW2LO5tTDow==", - "extraneous": true, - "requires": { - "glob": "^7.0.0", - "interpret": "^1.0.0", - "rechoir": "^0.6.2" - } - }, - "shx": { - "version": "https://registry.npmjs.org/shx/-/shx-0.3.3.tgz", - "integrity": "sha512-nZJ3HFWVoTSyyB+evEKjJ1STiixGztlqwKLTUNV5KqMWtGey9fTd4KU1gdZ1X9BV6215pswQ/Jew9NsuS/fNDA==", - "extraneous": true, - "requires": { - "minimist": "^1.2.3", - "shelljs": "^0.8.4" - } - }, - "signal-exit": { - "version": "3.0.7", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", - "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", - "extraneous": true - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "extraneous": true - }, - "source-map-support": { - "version": "0.5.21", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", - "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", - "extraneous": true, - "requires": { - "buffer-from": "^1.0.0", - "source-map": "^0.6.0" - } - }, - "sprintf-js": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", - "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==", - "extraneous": true - }, - "stream-browserify": { - "version": "https://registry.npmjs.org/stream-browserify/-/stream-browserify-3.0.0.tgz", - "integrity": "sha512-H73RAHsVBapbim0tU2JwwOiXUj+fikfiaoYAKHF3VJfA0pe2BCzkhAHBlLG6REzE+2WNZcxOXjK7lkso+9euLA==", - "extraneous": true, - "requires": { - "inherits": "~2.0.4", - "readable-stream": "^3.5.0" - } - }, - "stream-http": { - "version": "https://registry.npmjs.org/stream-http/-/stream-http-3.2.0.tgz", - "integrity": "sha512-Oq1bLqisTyK3TSCXpPbT4sdeYNdmyZJv1LxpEm2vu1ZhK89kSE5YXwZc3cWk0MagGaKriBh9mCFbVGtO+vY29A==", - "extraneous": true, - "requires": { - "builtin-status-codes": "^3.0.0", - "inherits": "^2.0.4", - "readable-stream": "^3.6.0", - "xtend": "^4.0.2" - } - }, - "string_decoder": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", - "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", - "bundled": true, - "requires": { - "safe-buffer": "~5.2.0" - } - }, - "string-argv": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/string-argv/-/string-argv-0.3.1.tgz", - "integrity": "sha512-a1uQGz7IyVy9YwhqjZIZu1c8JO8dNIe20xBmSS6qu9kv++k3JGzCVmprbNN5Kn+BgzD5E7YYwg1CcjuJMRNsvg==", - "extraneous": true - }, - "string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "extraneous": true, - "requires": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - } - }, - "strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "extraneous": true, - "requires": { - "ansi-regex": "^5.0.1" - } - }, - "strip-final-newline": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", - "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", - "extraneous": true - }, - "strip-json-comments": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", - "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", - "extraneous": true - }, - "supports-color": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", - "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", - "extraneous": true, - "requires": { - "has-flag": "^4.0.0" - } - }, - "tapable": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz", - "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==", - "extraneous": true - }, - "terser": { - "version": "5.16.1", - "resolved": "https://registry.npmjs.org/terser/-/terser-5.16.1.tgz", - "integrity": "sha512-xvQfyfA1ayT0qdK47zskQgRZeWLoOQ8JQ6mIgRGVNwZKdQMU+5FkCBjmv4QjcrTzyZquRw2FVtlJSRUmMKQslw==", - "extraneous": true, - "requires": { - "@jridgewell/source-map": "^0.3.2", - "acorn": "^8.5.0", - "commander": "^2.20.0", - "source-map-support": "~0.5.20" - } - }, - "terser-webpack-plugin": { - "version": "5.2.5", - "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.2.5.tgz", - "integrity": "sha512-3luOVHku5l0QBeYS8r4CdHYWEGMmIj3H1U64jgkdZzECcSOJAyJ9TjuqcQZvw1Y+4AOBN9SeYJPJmFn2cM4/2g==", - "extraneous": true, - "requires": { - "jest-worker": "^27.0.6", - "schema-utils": "^3.1.1", - "serialize-javascript": "^6.0.0", - "source-map": "^0.6.1", - "terser": "^5.7.2" - } - }, - "timsort": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/timsort/-/timsort-0.3.0.tgz", - "integrity": "sha512-qsdtZH+vMoCARQtyod4imc2nIJwg9Cc7lPRrw9CzF8ZKR0khdr8+2nX80PBhET3tcyTtJDxAffGh2rXH4tyU8A==", - "extraneous": true - }, - "to-regex-range": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", - "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", - "extraneous": true, - "requires": { - "is-number": "^7.0.0" - } - }, - "ts-loader": { - "version": "https://registry.npmjs.org/ts-loader/-/ts-loader-9.3.1.tgz", - "integrity": "sha512-OkyShkcZTsTwyS3Kt7a4rsT/t2qvEVQuKCTg4LJmpj9fhFR7ukGdZwV6Qq3tRUkqcXtfGpPR7+hFKHCG/0d3Lw==", - "extraneous": true, - "requires": { - "chalk": "^4.1.0", - "enhanced-resolve": "^5.0.0", - "micromatch": "^4.0.0", - "semver": "^7.3.4" - } - }, - "ts-node": { - "version": "https://registry.npmjs.org/ts-node/-/ts-node-10.9.1.tgz", - "integrity": "sha512-NtVysVPkxxrwFGUUxGYhfux8k78pQB3JqYBXlLRZgdGUqTO5wU/UyHop5p70iEbGhB7q5KmiZiU0Y3KlJrScEw==", - "extraneous": true, - "requires": { - "@cspotcode/source-map-support": "^0.8.0", - "@tsconfig/node10": "^1.0.7", - "@tsconfig/node12": "^1.0.7", - "@tsconfig/node14": "^1.0.0", - "@tsconfig/node16": "^1.0.2", - "acorn": "^8.4.1", - "acorn-walk": "^8.1.1", - "arg": "^4.1.0", - "create-require": "^1.1.0", - "diff": "^4.0.1", - "make-error": "^1.1.1", - "v8-compile-cache-lib": "^3.0.1", - "yn": "3.1.1" - }, - "dependencies": { - "diff": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", - "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", - "extraneous": true - } - } - }, - "typescript": { - "version": "https://registry.npmjs.org/typescript/-/typescript-5.1.6.tgz", - "integrity": "sha512-zaWCozRZ6DLEWAWFrVDz1H6FVXzUSfTy5FUMWsQlU8Ym5JP9eO4xkTIROFCQvhQf61z6O/G6ugw3SgAnvvm+HA==", - "extraneous": true - }, - "universalify": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", - "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", - "extraneous": true - }, - "update-browserslist-db": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.10.tgz", - "integrity": "sha512-OztqDenkfFkbSG+tRxBeAnCVPckDBcvibKd35yDONx6OU8N7sqgwc7rCbkJ/WcYtVRZ4ba68d6byhC21GFh7sQ==", - "extraneous": true, - "requires": { - "escalade": "^3.1.1", - "picocolors": "^1.0.0" - } - }, - "uri-js": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", - "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", - "extraneous": true, - "requires": { - "punycode": "^2.1.0" - } - }, - "utf-8-validate": { - "version": "5.0.7", - "resolved": "https://registry.npmjs.org/utf-8-validate/-/utf-8-validate-5.0.7.tgz", - "integrity": "sha512-vLt1O5Pp+flcArHGIyKEQq883nBt8nN8tVBcoL0qUXj2XT1n7p70yGIq2VK98I5FdZ1YHc0wk/koOnHjnXWk1Q==", - "optional": true, - "requires": { - "node-gyp-build": "^4.3.0" - } - }, - "util": { - "version": "0.12.4", - "resolved": "https://registry.npmjs.org/util/-/util-0.12.4.tgz", - "integrity": "sha512-bxZ9qtSlGUWSOy9Qa9Xgk11kSslpuZwaxCg4sNIDj6FLucDab2JxnHwyNTCpHMtK1MjoQiWQ6DiUMZYbSrO+Sw==", - "extraneous": true, - "requires": { - "inherits": "^2.0.3", - "is-arguments": "^1.0.4", - "is-generator-function": "^1.0.7", - "is-typed-array": "^1.1.3", - "safe-buffer": "^5.1.2", - "which-typed-array": "^1.1.2" - } - }, - "util-deprecate": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", - "bundled": true - }, - "v8-compile-cache-lib": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz", - "integrity": "sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==", - "extraneous": true - }, - "validator": { - "version": "13.7.0", - "resolved": "https://registry.npmjs.org/validator/-/validator-13.7.0.tgz", - "integrity": "sha512-nYXQLCBkpJ8X6ltALua9dRrZDHVYxjJ1wgskNt1lH9fzGjs3tgojGSCBjmEPwkWS1y29+DrizMTW19Pr9uB2nw==", - "extraneous": true - }, - "watchpack": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.4.0.tgz", - "integrity": "sha512-Lcvm7MGST/4fup+ifyKi2hjyIAwcdI4HRgtvTpIUxBRhB+RFtUh8XtDOxUfctVCnhVi+QQj49i91OyvzkJl6cg==", - "extraneous": true, - "requires": { - "glob-to-regexp": "^0.4.1", - "graceful-fs": "^4.1.2" - } - }, - "webpack": { - "version": "https://registry.npmjs.org/webpack/-/webpack-5.65.0.tgz", - "integrity": "sha512-Q5or2o6EKs7+oKmJo7LaqZaMOlDWQse9Tm5l1WAfU/ujLGN5Pb0SqGeVkN/4bpPmEqEP5RnVhiqsOtWtUVwGRw==", - "extraneous": true, - "requires": { - "@types/eslint-scope": "^3.7.0", - "@types/estree": "^0.0.50", - "@webassemblyjs/ast": "1.11.1", - "@webassemblyjs/wasm-edit": "1.11.1", - "@webassemblyjs/wasm-parser": "1.11.1", - "acorn": "^8.4.1", - "acorn-import-assertions": "^1.7.6", - "browserslist": "^4.14.5", - "chrome-trace-event": "^1.0.2", - "enhanced-resolve": "^5.8.3", - "es-module-lexer": "^0.9.0", - "eslint-scope": "5.1.1", - "events": "^3.2.0", - "glob-to-regexp": "^0.4.1", - "graceful-fs": "^4.2.4", - "json-parse-better-errors": "^1.0.2", - "loader-runner": "^4.2.0", - "mime-types": "^2.1.27", - "neo-async": "^2.6.2", - "schema-utils": "^3.1.0", - "tapable": "^2.1.1", - "terser-webpack-plugin": "^5.1.3", - "watchpack": "^2.3.1", - "webpack-sources": "^3.2.2" - } - }, - "webpack-cli": { - "version": "https://registry.npmjs.org/webpack-cli/-/webpack-cli-4.9.1.tgz", - "integrity": "sha512-JYRFVuyFpzDxMDB+v/nanUdQYcZtqFPGzmlW4s+UkPMFhSpfRNmf1z4AwYcHJVdvEFAM7FFCQdNTpsBYhDLusQ==", - "extraneous": true, - "requires": { - "@discoveryjs/json-ext": "^0.5.0", - "@webpack-cli/configtest": "^1.1.0", - "@webpack-cli/info": "^1.4.0", - "@webpack-cli/serve": "^1.6.0", - "colorette": "^2.0.14", - "commander": "^7.0.0", - "execa": "^5.0.0", - "fastest-levenshtein": "^1.0.12", - "import-local": "^3.0.2", - "interpret": "^2.2.0", - "rechoir": "^0.7.0", - "webpack-merge": "^5.7.3" - }, - "dependencies": { - "commander": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", - "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==", - "extraneous": true - }, - "interpret": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/interpret/-/interpret-2.2.0.tgz", - "integrity": "sha512-Ju0Bz/cEia55xDwUWEa8+olFpCiQoypjnQySseKtmjNrnps3P+xfpUmGr90T7yjlVJmOtybRvPXhKMbHr+fWnw==", - "extraneous": true - }, - "rechoir": { - "version": "0.7.1", - "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.7.1.tgz", - "integrity": "sha512-/njmZ8s1wVeR6pjTZ+0nCnv8SpZNRMT2D1RLOJQESlYFDBvwpTA4KWJpZ+sBJ4+vhjILRcK7JIFdGCdxEAAitg==", - "extraneous": true, - "requires": { - "resolve": "^1.9.0" - } - } - } - }, - "webpack-merge": { - "version": "5.8.0", - "resolved": "https://registry.npmjs.org/webpack-merge/-/webpack-merge-5.8.0.tgz", - "integrity": "sha512-/SaI7xY0831XwP6kzuwhKWVKDP9t1QY1h65lAFLbZqMPIuYcD9QAW4u9STIbU9kaJbPBB/geU/gLr1wDjOhQ+Q==", - "extraneous": true, - "requires": { - "clone-deep": "^4.0.1", - "wildcard": "^2.0.0" - } - }, - "webpack-sources": { - "version": "3.2.3", - "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-3.2.3.tgz", - "integrity": "sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==", - "extraneous": true - }, - "which": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "extraneous": true, - "requires": { - "isexe": "^2.0.0" - } - }, - "which-typed-array": { - "version": "1.1.9", - "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.9.tgz", - "integrity": "sha512-w9c4xkx6mPidwp7180ckYWfMmvxpjlZuIudNtDf4N/tTAUB8VJbX25qZoAsrtGuYNnGw3pa0AXgbGKRB8/EceA==", - "extraneous": true, - "requires": { - "available-typed-arrays": "^1.0.5", - "call-bind": "^1.0.2", - "for-each": "^0.3.3", - "gopd": "^1.0.1", - "has-tostringtag": "^1.0.0", - "is-typed-array": "^1.1.10" - } - }, - "wildcard": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/wildcard/-/wildcard-2.0.0.tgz", - "integrity": "sha512-JcKqAHLPxcdb9KM49dufGXn2x3ssnfjbcaQdLlfZsL9rH9wgDQjUtDxbo8NE0F6SFvydeu1VhZe7hZuHsB2/pw==", - "extraneous": true - }, - "workerpool": { - "version": "6.1.5", - "resolved": "https://registry.npmjs.org/workerpool/-/workerpool-6.1.5.tgz", - "integrity": "sha512-XdKkCK0Zqc6w3iTxLckiuJ81tiD/o5rBE/m+nXpRCB+/Sq4DqkfXZ/x0jW02DG1tGsfUGXbTJyZDP+eu67haSw==", - "extraneous": true - }, - "wrap-ansi": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", - "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", - "extraneous": true, - "requires": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - } - }, - "wrappy": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", - "extraneous": true - }, - "xtend": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", - "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", - "extraneous": true - }, - "y18n": { - "version": "5.0.8", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", - "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", - "extraneous": true - }, - "yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "extraneous": true - }, - "yargs": { - "version": "16.2.0", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", - "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", - "extraneous": true, - "requires": { - "cliui": "^7.0.2", - "escalade": "^3.1.1", - "get-caller-file": "^2.0.5", - "require-directory": "^2.1.1", - "string-width": "^4.2.0", - "y18n": "^5.0.5", - "yargs-parser": "^20.2.2" - } - }, - "yargs-parser": { - "version": "20.2.4", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.4.tgz", - "integrity": "sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA==", - "extraneous": true - }, - "yargs-unparser": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/yargs-unparser/-/yargs-unparser-2.0.0.tgz", - "integrity": "sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA==", - "extraneous": true, - "requires": { - "camelcase": "^6.0.0", - "decamelize": "^4.0.0", - "flat": "^5.0.2", - "is-plain-obj": "^2.1.0" - } - }, - "yn": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz", - "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==", - "extraneous": true - }, - "yocto-queue": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", - "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", - "extraneous": true - }, - "z-schema": { - "version": "5.0.4", - "resolved": "https://registry.npmjs.org/z-schema/-/z-schema-5.0.4.tgz", - "integrity": "sha512-gm/lx3hDzJNcLwseIeQVm1UcwhWIKpSB4NqH89pTBtFns4k/HDHudsICtvG05Bvw/Mv3jMyk700y5dadueLHdA==", - "extraneous": true, - "requires": { - "commander": "^2.20.3", - "lodash.get": "^4.4.2", - "lodash.isequal": "^4.5.0", - "validator": "^13.7.0" - } - } - } - }, - "ganache-core": { - "version": "2.13.2", - "resolved": "https://registry.npmjs.org/ganache-core/-/ganache-core-2.13.2.tgz", - "integrity": "sha512-tIF5cR+ANQz0+3pHWxHjIwHqFXcVo0Mb+kcsNhglNFALcYo49aQpnS9dqHartqPfMFjiHh/qFoD3mYK0d/qGgw==", - "requires": { - "abstract-leveldown": "3.0.0", - "async": "2.6.2", - "bip39": "2.5.0", - "cachedown": "1.0.0", - "clone": "2.1.2", - "debug": "3.2.6", - "encoding-down": "5.0.4", - "eth-sig-util": "3.0.0", - "ethereumjs-abi": "0.6.8", - "ethereumjs-account": "3.0.0", - "ethereumjs-block": "2.2.2", - "ethereumjs-common": "1.5.0", - "ethereumjs-tx": "2.1.2", - "ethereumjs-util": "6.2.1", - "ethereumjs-vm": "4.2.0", - "ethereumjs-wallet": "0.6.5", - "heap": "0.2.6", - "keccak": "3.0.1", - "level-sublevel": "6.6.4", - "levelup": "3.1.1", - "lodash": "4.17.20", - "lru-cache": "5.1.1", - "merkle-patricia-tree": "3.0.0", - "patch-package": "6.2.2", - "seedrandom": "3.0.1", - "source-map-support": "0.5.12", - "tmp": "0.1.0", - "web3": "1.2.11", - "web3-provider-engine": "14.2.1", - "websocket": "1.0.32" - }, - "dependencies": { - "@ethersproject/abi": { - "version": "5.0.0-beta.153", - "optional": true, - "requires": { - "@ethersproject/address": ">=5.0.0-beta.128", - "@ethersproject/bignumber": ">=5.0.0-beta.130", - "@ethersproject/bytes": ">=5.0.0-beta.129", - "@ethersproject/constants": ">=5.0.0-beta.128", - "@ethersproject/hash": ">=5.0.0-beta.128", - "@ethersproject/keccak256": ">=5.0.0-beta.127", - "@ethersproject/logger": ">=5.0.0-beta.129", - "@ethersproject/properties": ">=5.0.0-beta.131", - "@ethersproject/strings": ">=5.0.0-beta.130" - } - }, - "@ethersproject/abstract-provider": { - "version": "5.0.8", - "optional": true, - "requires": { - "@ethersproject/bignumber": "^5.0.13", - "@ethersproject/bytes": "^5.0.9", - "@ethersproject/logger": "^5.0.8", - "@ethersproject/networks": "^5.0.7", - "@ethersproject/properties": "^5.0.7", - "@ethersproject/transactions": "^5.0.9", - "@ethersproject/web": "^5.0.12" - } - }, - "@ethersproject/abstract-signer": { - "version": "5.0.10", - "optional": true, - "requires": { - "@ethersproject/abstract-provider": "^5.0.8", - "@ethersproject/bignumber": "^5.0.13", - "@ethersproject/bytes": "^5.0.9", - "@ethersproject/logger": "^5.0.8", - "@ethersproject/properties": "^5.0.7" - } - }, - "@ethersproject/address": { - "version": "5.0.9", - "optional": true, - "requires": { - "@ethersproject/bignumber": "^5.0.13", - "@ethersproject/bytes": "^5.0.9", - "@ethersproject/keccak256": "^5.0.7", - "@ethersproject/logger": "^5.0.8", - "@ethersproject/rlp": "^5.0.7" - } - }, - "@ethersproject/base64": { - "version": "5.0.7", - "optional": true, - "requires": { - "@ethersproject/bytes": "^5.0.9" - } - }, - "@ethersproject/bignumber": { - "version": "5.0.13", - "optional": true, - "requires": { - "@ethersproject/bytes": "^5.0.9", - "@ethersproject/logger": "^5.0.8", - "bn.js": "^4.4.0" - } - }, - "@ethersproject/bytes": { - "version": "5.0.9", - "optional": true, - "requires": { - "@ethersproject/logger": "^5.0.8" - } - }, - "@ethersproject/constants": { - "version": "5.0.8", - "optional": true, - "requires": { - "@ethersproject/bignumber": "^5.0.13" - } - }, - "@ethersproject/hash": { - "version": "5.0.10", - "optional": true, - "requires": { - "@ethersproject/abstract-signer": "^5.0.10", - "@ethersproject/address": "^5.0.9", - "@ethersproject/bignumber": "^5.0.13", - "@ethersproject/bytes": "^5.0.9", - "@ethersproject/keccak256": "^5.0.7", - "@ethersproject/logger": "^5.0.8", - "@ethersproject/properties": "^5.0.7", - "@ethersproject/strings": "^5.0.8" - } - }, - "@ethersproject/keccak256": { - "version": "5.0.7", - "optional": true, - "requires": { - "@ethersproject/bytes": "^5.0.9", - "js-sha3": "0.5.7" - } - }, - "@ethersproject/logger": { - "version": "5.0.8", - "optional": true - }, - "@ethersproject/networks": { - "version": "5.0.7", - "optional": true, - "requires": { - "@ethersproject/logger": "^5.0.8" - } - }, - "@ethersproject/properties": { - "version": "5.0.7", - "optional": true, - "requires": { - "@ethersproject/logger": "^5.0.8" - } - }, - "@ethersproject/rlp": { - "version": "5.0.7", - "optional": true, - "requires": { - "@ethersproject/bytes": "^5.0.9", - "@ethersproject/logger": "^5.0.8" - } - }, - "@ethersproject/signing-key": { - "version": "5.0.8", - "optional": true, - "requires": { - "@ethersproject/bytes": "^5.0.9", - "@ethersproject/logger": "^5.0.8", - "@ethersproject/properties": "^5.0.7", - "elliptic": "6.5.3" - } - }, - "@ethersproject/strings": { - "version": "5.0.8", - "optional": true, - "requires": { - "@ethersproject/bytes": "^5.0.9", - "@ethersproject/constants": "^5.0.8", - "@ethersproject/logger": "^5.0.8" - } - }, - "@ethersproject/transactions": { - "version": "5.0.9", - "optional": true, - "requires": { - "@ethersproject/address": "^5.0.9", - "@ethersproject/bignumber": "^5.0.13", - "@ethersproject/bytes": "^5.0.9", - "@ethersproject/constants": "^5.0.8", - "@ethersproject/keccak256": "^5.0.7", - "@ethersproject/logger": "^5.0.8", - "@ethersproject/properties": "^5.0.7", - "@ethersproject/rlp": "^5.0.7", - "@ethersproject/signing-key": "^5.0.8" - } - }, - "@ethersproject/web": { - "version": "5.0.12", - "optional": true, - "requires": { - "@ethersproject/base64": "^5.0.7", - "@ethersproject/bytes": "^5.0.9", - "@ethersproject/logger": "^5.0.8", - "@ethersproject/properties": "^5.0.7", - "@ethersproject/strings": "^5.0.8" - } - }, - "@sindresorhus/is": { - "version": "0.14.0", - "optional": true - }, - "@szmarczak/http-timer": { - "version": "1.1.2", - "optional": true, - "requires": { - "defer-to-connect": "^1.0.1" - } - }, - "@types/bn.js": { - "version": "4.11.6", - "requires": { - "@types/node": "*" - } - }, - "@types/node": { - "version": "14.14.20" - }, - "@types/pbkdf2": { - "version": "3.1.0", - "requires": { - "@types/node": "*" - } - }, - "@types/secp256k1": { - "version": "4.0.1", - "requires": { - "@types/node": "*" - } - }, - "@yarnpkg/lockfile": { - "version": "1.1.0" - }, - "abstract-leveldown": { - "version": "3.0.0", - "requires": { - "xtend": "~4.0.0" - } - }, - "accepts": { - "version": "1.3.7", - "optional": true, - "requires": { - "mime-types": "~2.1.24", - "negotiator": "0.6.2" - } - }, - "aes-js": { - "version": "3.1.2", - "optional": true - }, - "ajv": { - "version": "6.12.6", - "requires": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - } - }, - "ansi-styles": { - "version": "3.2.1", - "requires": { - "color-convert": "^1.9.0" - } - }, - "arr-diff": { - "version": "4.0.0" - }, - "arr-flatten": { - "version": "1.1.0" - }, - "arr-union": { - "version": "3.1.0" - }, - "array-flatten": { - "version": "1.1.1", - "optional": true - }, - "array-unique": { - "version": "0.3.2" - }, - "asn1": { - "version": "0.2.4", - "requires": { - "safer-buffer": "~2.1.0" - } - }, - "asn1.js": { - "version": "5.4.1", - "optional": true, - "requires": { - "bn.js": "^4.0.0", - "inherits": "^2.0.1", - "minimalistic-assert": "^1.0.0", - "safer-buffer": "^2.1.0" - } - }, - "assert-plus": { - "version": "1.0.0" - }, - "assign-symbols": { - "version": "1.0.0" - }, - "async": { - "version": "2.6.2", - "requires": { - "lodash": "^4.17.11" - } - }, - "async-eventemitter": { - "version": "0.2.4", - "requires": { - "async": "^2.4.0" - } - }, - "async-limiter": { - "version": "1.0.1" - }, - "asynckit": { - "version": "0.4.0" - }, - "atob": { - "version": "2.1.2" - }, - "aws-sign2": { - "version": "0.7.0" - }, - "aws4": { - "version": "1.11.0" - }, - "babel-code-frame": { - "version": "6.26.0", - "requires": { - "chalk": "^1.1.3", - "esutils": "^2.0.2", - "js-tokens": "^3.0.2" - }, - "dependencies": { - "ansi-regex": { - "version": "2.1.1" - }, - "ansi-styles": { - "version": "2.2.1" - }, - "chalk": { - "version": "1.1.3", - "requires": { - "ansi-styles": "^2.2.1", - "escape-string-regexp": "^1.0.2", - "has-ansi": "^2.0.0", - "strip-ansi": "^3.0.0", - "supports-color": "^2.0.0" - } - }, - "js-tokens": { - "version": "3.0.2" - }, - "strip-ansi": { - "version": "3.0.1", - "requires": { - "ansi-regex": "^2.0.0" - } - }, - "supports-color": { - "version": "2.0.0" - } - } - }, - "babel-core": { - "version": "6.26.3", - "requires": { - "babel-code-frame": "^6.26.0", - "babel-generator": "^6.26.0", - "babel-helpers": "^6.24.1", - "babel-messages": "^6.23.0", - "babel-register": "^6.26.0", - "babel-runtime": "^6.26.0", - "babel-template": "^6.26.0", - "babel-traverse": "^6.26.0", - "babel-types": "^6.26.0", - "babylon": "^6.18.0", - "convert-source-map": "^1.5.1", - "debug": "^2.6.9", - "json5": "^0.5.1", - "lodash": "^4.17.4", - "minimatch": "^3.0.4", - "path-is-absolute": "^1.0.1", - "private": "^0.1.8", - "slash": "^1.0.0", - "source-map": "^0.5.7" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "requires": { - "ms": "2.0.0" - } - }, - "json5": { - "version": "0.5.1" - }, - "ms": { - "version": "2.0.0" - }, - "slash": { - "version": "1.0.0" - } - } - }, - "babel-generator": { - "version": "6.26.1", - "requires": { - "babel-messages": "^6.23.0", - "babel-runtime": "^6.26.0", - "babel-types": "^6.26.0", - "detect-indent": "^4.0.0", - "jsesc": "^1.3.0", - "lodash": "^4.17.4", - "source-map": "^0.5.7", - "trim-right": "^1.0.1" - }, - "dependencies": { - "jsesc": { - "version": "1.3.0" - } - } - }, - "babel-helper-builder-binary-assignment-operator-visitor": { - "version": "6.24.1", - "requires": { - "babel-helper-explode-assignable-expression": "^6.24.1", - "babel-runtime": "^6.22.0", - "babel-types": "^6.24.1" - } - }, - "babel-helper-call-delegate": { - "version": "6.24.1", - "requires": { - "babel-helper-hoist-variables": "^6.24.1", - "babel-runtime": "^6.22.0", - "babel-traverse": "^6.24.1", - "babel-types": "^6.24.1" - } - }, - "babel-helper-define-map": { - "version": "6.26.0", - "requires": { - "babel-helper-function-name": "^6.24.1", - "babel-runtime": "^6.26.0", - "babel-types": "^6.26.0", - "lodash": "^4.17.4" - } - }, - "babel-helper-explode-assignable-expression": { - "version": "6.24.1", - "requires": { - "babel-runtime": "^6.22.0", - "babel-traverse": "^6.24.1", - "babel-types": "^6.24.1" - } - }, - "babel-helper-function-name": { - "version": "6.24.1", - "requires": { - "babel-helper-get-function-arity": "^6.24.1", - "babel-runtime": "^6.22.0", - "babel-template": "^6.24.1", - "babel-traverse": "^6.24.1", - "babel-types": "^6.24.1" - } - }, - "babel-helper-get-function-arity": { - "version": "6.24.1", - "requires": { - "babel-runtime": "^6.22.0", - "babel-types": "^6.24.1" - } - }, - "babel-helper-hoist-variables": { - "version": "6.24.1", - "requires": { - "babel-runtime": "^6.22.0", - "babel-types": "^6.24.1" - } - }, - "babel-helper-optimise-call-expression": { - "version": "6.24.1", - "requires": { - "babel-runtime": "^6.22.0", - "babel-types": "^6.24.1" - } - }, - "babel-helper-regex": { - "version": "6.26.0", - "requires": { - "babel-runtime": "^6.26.0", - "babel-types": "^6.26.0", - "lodash": "^4.17.4" - } - }, - "babel-helper-remap-async-to-generator": { - "version": "6.24.1", - "requires": { - "babel-helper-function-name": "^6.24.1", - "babel-runtime": "^6.22.0", - "babel-template": "^6.24.1", - "babel-traverse": "^6.24.1", - "babel-types": "^6.24.1" - } - }, - "babel-helper-replace-supers": { - "version": "6.24.1", - "requires": { - "babel-helper-optimise-call-expression": "^6.24.1", - "babel-messages": "^6.23.0", - "babel-runtime": "^6.22.0", - "babel-template": "^6.24.1", - "babel-traverse": "^6.24.1", - "babel-types": "^6.24.1" - } - }, - "babel-helpers": { - "version": "6.24.1", - "requires": { - "babel-runtime": "^6.22.0", - "babel-template": "^6.24.1" - } - }, - "babel-messages": { - "version": "6.23.0", - "requires": { - "babel-runtime": "^6.22.0" - } - }, - "babel-plugin-check-es2015-constants": { - "version": "6.22.0", - "requires": { - "babel-runtime": "^6.22.0" - } - }, - "babel-plugin-syntax-async-functions": { - "version": "6.13.0" - }, - "babel-plugin-syntax-exponentiation-operator": { - "version": "6.13.0" - }, - "babel-plugin-syntax-trailing-function-commas": { - "version": "6.22.0" - }, - "babel-plugin-transform-async-to-generator": { - "version": "6.24.1", - "requires": { - "babel-helper-remap-async-to-generator": "^6.24.1", - "babel-plugin-syntax-async-functions": "^6.8.0", - "babel-runtime": "^6.22.0" - } - }, - "babel-plugin-transform-es2015-arrow-functions": { - "version": "6.22.0", - "requires": { - "babel-runtime": "^6.22.0" - } - }, - "babel-plugin-transform-es2015-block-scoped-functions": { - "version": "6.22.0", - "requires": { - "babel-runtime": "^6.22.0" - } - }, - "babel-plugin-transform-es2015-block-scoping": { - "version": "6.26.0", - "requires": { - "babel-runtime": "^6.26.0", - "babel-template": "^6.26.0", - "babel-traverse": "^6.26.0", - "babel-types": "^6.26.0", - "lodash": "^4.17.4" - } - }, - "babel-plugin-transform-es2015-classes": { - "version": "6.24.1", - "requires": { - "babel-helper-define-map": "^6.24.1", - "babel-helper-function-name": "^6.24.1", - "babel-helper-optimise-call-expression": "^6.24.1", - "babel-helper-replace-supers": "^6.24.1", - "babel-messages": "^6.23.0", - "babel-runtime": "^6.22.0", - "babel-template": "^6.24.1", - "babel-traverse": "^6.24.1", - "babel-types": "^6.24.1" - } - }, - "babel-plugin-transform-es2015-computed-properties": { - "version": "6.24.1", - "requires": { - "babel-runtime": "^6.22.0", - "babel-template": "^6.24.1" - } - }, - "babel-plugin-transform-es2015-destructuring": { - "version": "6.23.0", - "requires": { - "babel-runtime": "^6.22.0" - } - }, - "babel-plugin-transform-es2015-duplicate-keys": { - "version": "6.24.1", - "requires": { - "babel-runtime": "^6.22.0", - "babel-types": "^6.24.1" - } - }, - "babel-plugin-transform-es2015-for-of": { - "version": "6.23.0", - "requires": { - "babel-runtime": "^6.22.0" - } - }, - "babel-plugin-transform-es2015-function-name": { - "version": "6.24.1", - "requires": { - "babel-helper-function-name": "^6.24.1", - "babel-runtime": "^6.22.0", - "babel-types": "^6.24.1" - } - }, - "babel-plugin-transform-es2015-literals": { - "version": "6.22.0", - "requires": { - "babel-runtime": "^6.22.0" - } - }, - "babel-plugin-transform-es2015-modules-amd": { - "version": "6.24.1", - "requires": { - "babel-plugin-transform-es2015-modules-commonjs": "^6.24.1", - "babel-runtime": "^6.22.0", - "babel-template": "^6.24.1" - } - }, - "babel-plugin-transform-es2015-modules-commonjs": { - "version": "6.26.2", - "requires": { - "babel-plugin-transform-strict-mode": "^6.24.1", - "babel-runtime": "^6.26.0", - "babel-template": "^6.26.0", - "babel-types": "^6.26.0" - } - }, - "babel-plugin-transform-es2015-modules-systemjs": { - "version": "6.24.1", - "requires": { - "babel-helper-hoist-variables": "^6.24.1", - "babel-runtime": "^6.22.0", - "babel-template": "^6.24.1" - } - }, - "babel-plugin-transform-es2015-modules-umd": { - "version": "6.24.1", - "requires": { - "babel-plugin-transform-es2015-modules-amd": "^6.24.1", - "babel-runtime": "^6.22.0", - "babel-template": "^6.24.1" - } - }, - "babel-plugin-transform-es2015-object-super": { - "version": "6.24.1", - "requires": { - "babel-helper-replace-supers": "^6.24.1", - "babel-runtime": "^6.22.0" - } - }, - "babel-plugin-transform-es2015-parameters": { - "version": "6.24.1", - "requires": { - "babel-helper-call-delegate": "^6.24.1", - "babel-helper-get-function-arity": "^6.24.1", - "babel-runtime": "^6.22.0", - "babel-template": "^6.24.1", - "babel-traverse": "^6.24.1", - "babel-types": "^6.24.1" - } - }, - "babel-plugin-transform-es2015-shorthand-properties": { - "version": "6.24.1", - "requires": { - "babel-runtime": "^6.22.0", - "babel-types": "^6.24.1" - } - }, - "babel-plugin-transform-es2015-spread": { - "version": "6.22.0", - "requires": { - "babel-runtime": "^6.22.0" - } - }, - "babel-plugin-transform-es2015-sticky-regex": { - "version": "6.24.1", - "requires": { - "babel-helper-regex": "^6.24.1", - "babel-runtime": "^6.22.0", - "babel-types": "^6.24.1" - } - }, - "babel-plugin-transform-es2015-template-literals": { - "version": "6.22.0", - "requires": { - "babel-runtime": "^6.22.0" - } - }, - "babel-plugin-transform-es2015-typeof-symbol": { - "version": "6.23.0", - "requires": { - "babel-runtime": "^6.22.0" - } - }, - "babel-plugin-transform-es2015-unicode-regex": { - "version": "6.24.1", - "requires": { - "babel-helper-regex": "^6.24.1", - "babel-runtime": "^6.22.0", - "regexpu-core": "^2.0.0" - } - }, - "babel-plugin-transform-exponentiation-operator": { - "version": "6.24.1", - "requires": { - "babel-helper-builder-binary-assignment-operator-visitor": "^6.24.1", - "babel-plugin-syntax-exponentiation-operator": "^6.8.0", - "babel-runtime": "^6.22.0" - } - }, - "babel-plugin-transform-regenerator": { - "version": "6.26.0", - "requires": { - "regenerator-transform": "^0.10.0" - } - }, - "babel-plugin-transform-strict-mode": { - "version": "6.24.1", - "requires": { - "babel-runtime": "^6.22.0", - "babel-types": "^6.24.1" - } - }, - "babel-preset-env": { - "version": "1.7.0", - "requires": { - "babel-plugin-check-es2015-constants": "^6.22.0", - "babel-plugin-syntax-trailing-function-commas": "^6.22.0", - "babel-plugin-transform-async-to-generator": "^6.22.0", - "babel-plugin-transform-es2015-arrow-functions": "^6.22.0", - "babel-plugin-transform-es2015-block-scoped-functions": "^6.22.0", - "babel-plugin-transform-es2015-block-scoping": "^6.23.0", - "babel-plugin-transform-es2015-classes": "^6.23.0", - "babel-plugin-transform-es2015-computed-properties": "^6.22.0", - "babel-plugin-transform-es2015-destructuring": "^6.23.0", - "babel-plugin-transform-es2015-duplicate-keys": "^6.22.0", - "babel-plugin-transform-es2015-for-of": "^6.23.0", - "babel-plugin-transform-es2015-function-name": "^6.22.0", - "babel-plugin-transform-es2015-literals": "^6.22.0", - "babel-plugin-transform-es2015-modules-amd": "^6.22.0", - "babel-plugin-transform-es2015-modules-commonjs": "^6.23.0", - "babel-plugin-transform-es2015-modules-systemjs": "^6.23.0", - "babel-plugin-transform-es2015-modules-umd": "^6.23.0", - "babel-plugin-transform-es2015-object-super": "^6.22.0", - "babel-plugin-transform-es2015-parameters": "^6.23.0", - "babel-plugin-transform-es2015-shorthand-properties": "^6.22.0", - "babel-plugin-transform-es2015-spread": "^6.22.0", - "babel-plugin-transform-es2015-sticky-regex": "^6.22.0", - "babel-plugin-transform-es2015-template-literals": "^6.22.0", - "babel-plugin-transform-es2015-typeof-symbol": "^6.23.0", - "babel-plugin-transform-es2015-unicode-regex": "^6.22.0", - "babel-plugin-transform-exponentiation-operator": "^6.22.0", - "babel-plugin-transform-regenerator": "^6.22.0", - "browserslist": "^3.2.6", - "invariant": "^2.2.2", - "semver": "^5.3.0" - }, - "dependencies": { - "semver": { - "version": "5.7.1" - } - } - }, - "babel-register": { - "version": "6.26.0", - "requires": { - "babel-core": "^6.26.0", - "babel-runtime": "^6.26.0", - "core-js": "^2.5.0", - "home-or-tmp": "^2.0.0", - "lodash": "^4.17.4", - "mkdirp": "^0.5.1", - "source-map-support": "^0.4.15" - }, - "dependencies": { - "source-map-support": { - "version": "0.4.18", - "requires": { - "source-map": "^0.5.6" - } - } - } - }, - "babel-runtime": { - "version": "6.26.0", - "requires": { - "core-js": "^2.4.0", - "regenerator-runtime": "^0.11.0" - } - }, - "babel-template": { - "version": "6.26.0", - "requires": { - "babel-runtime": "^6.26.0", - "babel-traverse": "^6.26.0", - "babel-types": "^6.26.0", - "babylon": "^6.18.0", - "lodash": "^4.17.4" - } - }, - "babel-traverse": { - "version": "6.26.0", - "requires": { - "babel-code-frame": "^6.26.0", - "babel-messages": "^6.23.0", - "babel-runtime": "^6.26.0", - "babel-types": "^6.26.0", - "babylon": "^6.18.0", - "debug": "^2.6.8", - "globals": "^9.18.0", - "invariant": "^2.2.2", - "lodash": "^4.17.4" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "requires": { - "ms": "2.0.0" - } - }, - "globals": { - "version": "9.18.0" - }, - "ms": { - "version": "2.0.0" - } - } - }, - "babel-types": { - "version": "6.26.0", - "requires": { - "babel-runtime": "^6.26.0", - "esutils": "^2.0.2", - "lodash": "^4.17.4", - "to-fast-properties": "^1.0.3" - }, - "dependencies": { - "to-fast-properties": { - "version": "1.0.3" - } - } - }, - "babelify": { - "version": "7.3.0", - "requires": { - "babel-core": "^6.0.14", - "object-assign": "^4.0.0" - } - }, - "babylon": { - "version": "6.18.0" - }, - "backoff": { - "version": "2.5.0", - "requires": { - "precond": "0.2" - } - }, - "balanced-match": { - "version": "1.0.0" - }, - "base": { - "version": "0.11.2", - "requires": { - "cache-base": "^1.0.1", - "class-utils": "^0.3.5", - "component-emitter": "^1.2.1", - "define-property": "^1.0.0", - "isobject": "^3.0.1", - "mixin-deep": "^1.2.0", - "pascalcase": "^0.1.1" - }, - "dependencies": { - "define-property": { - "version": "1.0.0", - "requires": { - "is-descriptor": "^1.0.0" - } - } - } - }, - "base-x": { - "version": "3.0.8", - "requires": { - "safe-buffer": "^5.0.1" - } - }, - "base64-js": { - "version": "1.5.1" - }, - "bcrypt-pbkdf": { - "version": "1.0.2", - "requires": { - "tweetnacl": "^0.14.3" - }, - "dependencies": { - "tweetnacl": { - "version": "0.14.5" - } - } - }, - "bignumber.js": { - "version": "9.0.1", - "optional": true - }, - "bip39": { - "version": "2.5.0", - "requires": { - "create-hash": "^1.1.0", - "pbkdf2": "^3.0.9", - "randombytes": "^2.0.1", - "safe-buffer": "^5.0.1", - "unorm": "^1.3.3" - } - }, - "blakejs": { - "version": "1.1.0" - }, - "bluebird": { - "version": "3.7.2", - "optional": true - }, - "bn.js": { - "version": "4.11.9" - }, - "body-parser": { - "version": "1.19.0", - "optional": true, - "requires": { - "bytes": "3.1.0", - "content-type": "~1.0.4", - "debug": "2.6.9", - "depd": "~1.1.2", - "http-errors": "1.7.2", - "iconv-lite": "0.4.24", - "on-finished": "~2.3.0", - "qs": "6.7.0", - "raw-body": "2.4.0", - "type-is": "~1.6.17" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "optional": true, - "requires": { - "ms": "2.0.0" - } - }, - "ms": { - "version": "2.0.0", - "optional": true - }, - "qs": { - "version": "6.7.0", - "optional": true - } - } - }, - "brace-expansion": { - "version": "1.1.11", - "requires": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "brorand": { - "version": "1.1.0" - }, - "browserify-aes": { - "version": "1.2.0", - "requires": { - "buffer-xor": "^1.0.3", - "cipher-base": "^1.0.0", - "create-hash": "^1.1.0", - "evp_bytestokey": "^1.0.3", - "inherits": "^2.0.1", - "safe-buffer": "^5.0.1" - } - }, - "browserify-cipher": { - "version": "1.0.1", - "optional": true, - "requires": { - "browserify-aes": "^1.0.4", - "browserify-des": "^1.0.0", - "evp_bytestokey": "^1.0.0" - } - }, - "browserify-des": { - "version": "1.0.2", - "optional": true, - "requires": { - "cipher-base": "^1.0.1", - "des.js": "^1.0.0", - "inherits": "^2.0.1", - "safe-buffer": "^5.1.2" - } - }, - "browserify-rsa": { - "version": "4.1.0", - "optional": true, - "requires": { - "bn.js": "^5.0.0", - "randombytes": "^2.0.1" - }, - "dependencies": { - "bn.js": { - "version": "5.1.3", - "optional": true - } - } - }, - "browserify-sign": { - "version": "4.2.1", - "optional": true, - "requires": { - "bn.js": "^5.1.1", - "browserify-rsa": "^4.0.1", - "create-hash": "^1.2.0", - "create-hmac": "^1.1.7", - "elliptic": "^6.5.3", - "inherits": "^2.0.4", - "parse-asn1": "^5.1.5", - "readable-stream": "^3.6.0", - "safe-buffer": "^5.2.0" - }, - "dependencies": { - "bn.js": { - "version": "5.1.3", - "optional": true - }, - "readable-stream": { - "version": "3.6.0", - "optional": true, - "requires": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - } - } - } - }, - "browserslist": { - "version": "3.2.8", - "requires": { - "caniuse-lite": "^1.0.30000844", - "electron-to-chromium": "^1.3.47" - } - }, - "bs58": { - "version": "4.0.1", - "requires": { - "base-x": "^3.0.2" - } - }, - "bs58check": { - "version": "2.1.2", - "requires": { - "bs58": "^4.0.0", - "create-hash": "^1.1.0", - "safe-buffer": "^5.1.2" - } - }, - "buffer": { - "version": "5.7.1", - "requires": { - "base64-js": "^1.3.1", - "ieee754": "^1.1.13" - } - }, - "buffer-from": { - "version": "1.1.1" - }, - "buffer-to-arraybuffer": { - "version": "0.0.5", - "optional": true - }, - "buffer-xor": { - "version": "1.0.3" - }, - "bufferutil": { - "version": "4.0.3", - "requires": { - "node-gyp-build": "^4.2.0" - } - }, - "bytes": { - "version": "3.1.0", - "optional": true - }, - "bytewise": { - "version": "1.1.0", - "requires": { - "bytewise-core": "^1.2.2", - "typewise": "^1.0.3" - } - }, - "bytewise-core": { - "version": "1.2.3", - "requires": { - "typewise-core": "^1.2" - } - }, - "cache-base": { - "version": "1.0.1", - "requires": { - "collection-visit": "^1.0.0", - "component-emitter": "^1.2.1", - "get-value": "^2.0.6", - "has-value": "^1.0.0", - "isobject": "^3.0.1", - "set-value": "^2.0.0", - "to-object-path": "^0.3.0", - "union-value": "^1.0.0", - "unset-value": "^1.0.0" - } - }, - "cacheable-request": { - "version": "6.1.0", - "optional": true, - "requires": { - "clone-response": "^1.0.2", - "get-stream": "^5.1.0", - "http-cache-semantics": "^4.0.0", - "keyv": "^3.0.0", - "lowercase-keys": "^2.0.0", - "normalize-url": "^4.1.0", - "responselike": "^1.0.2" - }, - "dependencies": { - "lowercase-keys": { - "version": "2.0.0", - "optional": true - } - } - }, - "cachedown": { - "version": "1.0.0", - "requires": { - "abstract-leveldown": "^2.4.1", - "lru-cache": "^3.2.0" - }, - "dependencies": { - "abstract-leveldown": { - "version": "2.7.2", - "requires": { - "xtend": "~4.0.0" - } - }, - "lru-cache": { - "version": "3.2.0", - "requires": { - "pseudomap": "^1.0.1" - } - } - } - }, - "call-bind": { - "version": "1.0.2", - "requires": { - "function-bind": "^1.1.1", - "get-intrinsic": "^1.0.2" - } - }, - "caniuse-lite": { - "version": "1.0.30001174" - }, - "caseless": { - "version": "0.12.0" - }, - "chalk": { - "version": "2.4.2", - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - } - }, - "checkpoint-store": { - "version": "1.1.0", - "requires": { - "functional-red-black-tree": "^1.0.1" - } - }, - "chownr": { - "version": "1.1.4", - "optional": true - }, - "ci-info": { - "version": "2.0.0" - }, - "cids": { - "version": "0.7.5", - "optional": true, - "requires": { - "buffer": "^5.5.0", - "class-is": "^1.1.0", - "multibase": "~0.6.0", - "multicodec": "^1.0.0", - "multihashes": "~0.4.15" - }, - "dependencies": { - "multicodec": { - "version": "1.0.4", - "optional": true, - "requires": { - "buffer": "^5.6.0", - "varint": "^5.0.0" - } - } - } - }, - "cipher-base": { - "version": "1.0.4", - "requires": { - "inherits": "^2.0.1", - "safe-buffer": "^5.0.1" - } - }, - "class-is": { - "version": "1.1.0", - "optional": true - }, - "class-utils": { - "version": "0.3.6", - "requires": { - "arr-union": "^3.1.0", - "define-property": "^0.2.5", - "isobject": "^3.0.0", - "static-extend": "^0.1.1" - }, - "dependencies": { - "define-property": { - "version": "0.2.5", - "requires": { - "is-descriptor": "^0.1.0" - } - }, - "is-accessor-descriptor": { - "version": "0.1.6", - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "is-buffer": { - "version": "1.1.6" - }, - "is-data-descriptor": { - "version": "0.1.4", - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "is-descriptor": { - "version": "0.1.6", - "requires": { - "is-accessor-descriptor": "^0.1.6", - "is-data-descriptor": "^0.1.4", - "kind-of": "^5.0.0" - } - }, - "kind-of": { - "version": "5.1.0" - } - } - }, - "clone": { - "version": "2.1.2" - }, - "clone-response": { - "version": "1.0.2", - "optional": true, - "requires": { - "mimic-response": "^1.0.0" - } - }, - "collection-visit": { - "version": "1.0.0", - "requires": { - "map-visit": "^1.0.0", - "object-visit": "^1.0.0" - } - }, - "color-convert": { - "version": "1.9.3", - "requires": { - "color-name": "1.1.3" - } - }, - "color-name": { - "version": "1.1.3" - }, - "combined-stream": { - "version": "1.0.8", - "requires": { - "delayed-stream": "~1.0.0" - } - }, - "component-emitter": { - "version": "1.3.0" - }, - "concat-map": { - "version": "0.0.1" - }, - "concat-stream": { - "version": "1.6.2", - "requires": { - "buffer-from": "^1.0.0", - "inherits": "^2.0.3", - "readable-stream": "^2.2.2", - "typedarray": "^0.0.6" - } - }, - "content-disposition": { - "version": "0.5.3", - "optional": true, - "requires": { - "safe-buffer": "5.1.2" - }, - "dependencies": { - "safe-buffer": { - "version": "5.1.2", - "optional": true - } - } - }, - "content-hash": { - "version": "2.5.2", - "optional": true, - "requires": { - "cids": "^0.7.1", - "multicodec": "^0.5.5", - "multihashes": "^0.4.15" - } - }, - "content-type": { - "version": "1.0.4", - "optional": true - }, - "convert-source-map": { - "version": "1.7.0", - "requires": { - "safe-buffer": "~5.1.1" - }, - "dependencies": { - "safe-buffer": { - "version": "5.1.2" - } - } - }, - "cookie": { - "version": "0.4.0", - "optional": true - }, - "cookie-signature": { - "version": "1.0.6", - "optional": true - }, - "cookiejar": { - "version": "2.1.2", - "optional": true - }, - "copy-descriptor": { - "version": "0.1.1" - }, - "core-js": { - "version": "2.6.12" - }, - "core-js-pure": { - "version": "3.8.2" - }, - "core-util-is": { - "version": "1.0.2" - }, - "cors": { - "version": "2.8.5", - "optional": true, - "requires": { - "object-assign": "^4", - "vary": "^1" - } - }, - "create-ecdh": { - "version": "4.0.4", - "optional": true, - "requires": { - "bn.js": "^4.1.0", - "elliptic": "^6.5.3" - } - }, - "create-hash": { - "version": "1.2.0", - "requires": { - "cipher-base": "^1.0.1", - "inherits": "^2.0.1", - "md5.js": "^1.3.4", - "ripemd160": "^2.0.1", - "sha.js": "^2.4.0" - } - }, - "create-hmac": { - "version": "1.1.7", - "requires": { - "cipher-base": "^1.0.3", - "create-hash": "^1.1.0", - "inherits": "^2.0.1", - "ripemd160": "^2.0.0", - "safe-buffer": "^5.0.1", - "sha.js": "^2.4.8" - } - }, - "cross-fetch": { - "version": "2.2.3", - "requires": { - "node-fetch": "2.1.2", - "whatwg-fetch": "2.0.4" - } - }, - "crypto-browserify": { - "version": "3.12.0", - "optional": true, - "requires": { - "browserify-cipher": "^1.0.0", - "browserify-sign": "^4.0.0", - "create-ecdh": "^4.0.0", - "create-hash": "^1.1.0", - "create-hmac": "^1.1.0", - "diffie-hellman": "^5.0.0", - "inherits": "^2.0.1", - "pbkdf2": "^3.0.3", - "public-encrypt": "^4.0.0", - "randombytes": "^2.0.0", - "randomfill": "^1.0.3" - } - }, - "d": { - "version": "1.0.1", - "requires": { - "es5-ext": "^0.10.50", - "type": "^1.0.1" - } - }, - "dashdash": { - "version": "1.14.1", - "requires": { - "assert-plus": "^1.0.0" - } - }, - "debug": { - "version": "3.2.6", - "requires": { - "ms": "^2.1.1" - } - }, - "decode-uri-component": { - "version": "0.2.0" - }, - "decompress-response": { - "version": "3.3.0", - "optional": true, - "requires": { - "mimic-response": "^1.0.0" - } - }, - "deep-equal": { - "version": "1.1.1", - "requires": { - "is-arguments": "^1.0.4", - "is-date-object": "^1.0.1", - "is-regex": "^1.0.4", - "object-is": "^1.0.1", - "object-keys": "^1.1.1", - "regexp.prototype.flags": "^1.2.0" - } - }, - "defer-to-connect": { - "version": "1.1.3", - "optional": true - }, - "deferred-leveldown": { - "version": "4.0.2", - "requires": { - "abstract-leveldown": "~5.0.0", - "inherits": "^2.0.3" - }, - "dependencies": { - "abstract-leveldown": { - "version": "5.0.0", - "requires": { - "xtend": "~4.0.0" - } - } - } - }, - "define-properties": { - "version": "1.1.3", - "requires": { - "object-keys": "^1.0.12" - } - }, - "define-property": { - "version": "2.0.2", - "requires": { - "is-descriptor": "^1.0.2", - "isobject": "^3.0.1" - } - }, - "defined": { - "version": "1.0.0" - }, - "delayed-stream": { - "version": "1.0.0" - }, - "depd": { - "version": "1.1.2", - "optional": true - }, - "des.js": { - "version": "1.0.1", - "optional": true, - "requires": { - "inherits": "^2.0.1", - "minimalistic-assert": "^1.0.0" - } - }, - "destroy": { - "version": "1.0.4", - "optional": true - }, - "detect-indent": { - "version": "4.0.0", - "requires": { - "repeating": "^2.0.0" - } - }, - "diffie-hellman": { - "version": "5.0.3", - "optional": true, - "requires": { - "bn.js": "^4.1.0", - "miller-rabin": "^4.0.0", - "randombytes": "^2.0.0" - } - }, - "dom-walk": { - "version": "0.1.2" - }, - "dotignore": { - "version": "0.1.2", - "requires": { - "minimatch": "^3.0.4" - } - }, - "duplexer3": { - "version": "0.1.4", - "optional": true - }, - "ecc-jsbn": { - "version": "0.1.2", - "requires": { - "jsbn": "~0.1.0", - "safer-buffer": "^2.1.0" - } - }, - "ee-first": { - "version": "1.1.1", - "optional": true - }, - "electron-to-chromium": { - "version": "1.3.636" - }, - "elliptic": { - "version": "6.5.3", - "requires": { - "bn.js": "^4.4.0", - "brorand": "^1.0.1", - "hash.js": "^1.0.0", - "hmac-drbg": "^1.0.0", - "inherits": "^2.0.1", - "minimalistic-assert": "^1.0.0", - "minimalistic-crypto-utils": "^1.0.0" - } - }, - "encodeurl": { - "version": "1.0.2", - "optional": true - }, - "encoding": { - "version": "0.1.13", - "requires": { - "iconv-lite": "^0.6.2" - }, - "dependencies": { - "iconv-lite": { - "version": "0.6.2", - "requires": { - "safer-buffer": ">= 2.1.2 < 3.0.0" - } - } - } - }, - "encoding-down": { - "version": "5.0.4", - "requires": { - "abstract-leveldown": "^5.0.0", - "inherits": "^2.0.3", - "level-codec": "^9.0.0", - "level-errors": "^2.0.0", - "xtend": "^4.0.1" - }, - "dependencies": { - "abstract-leveldown": { - "version": "5.0.0", - "requires": { - "xtend": "~4.0.0" - } - } - } - }, - "end-of-stream": { - "version": "1.4.4", - "requires": { - "once": "^1.4.0" - } - }, - "errno": { - "version": "0.1.8", - "requires": { - "prr": "~1.0.1" - } - }, - "es-abstract": { - "version": "1.18.0-next.1", - "requires": { - "es-to-primitive": "^1.2.1", - "function-bind": "^1.1.1", - "has": "^1.0.3", - "has-symbols": "^1.0.1", - "is-callable": "^1.2.2", - "is-negative-zero": "^2.0.0", - "is-regex": "^1.1.1", - "object-inspect": "^1.8.0", - "object-keys": "^1.1.1", - "object.assign": "^4.1.1", - "string.prototype.trimend": "^1.0.1", - "string.prototype.trimstart": "^1.0.1" - } - }, - "es-to-primitive": { - "version": "1.2.1", - "requires": { - "is-callable": "^1.1.4", - "is-date-object": "^1.0.1", - "is-symbol": "^1.0.2" - } - }, - "es5-ext": { - "version": "0.10.53", - "requires": { - "es6-iterator": "~2.0.3", - "es6-symbol": "~3.1.3", - "next-tick": "~1.0.0" - } - }, - "es6-iterator": { - "version": "2.0.3", - "requires": { - "d": "1", - "es5-ext": "^0.10.35", - "es6-symbol": "^3.1.1" - } - }, - "es6-symbol": { - "version": "3.1.3", - "requires": { - "d": "^1.0.1", - "ext": "^1.1.2" - } - }, - "escape-html": { - "version": "1.0.3", - "optional": true - }, - "escape-string-regexp": { - "version": "1.0.5" - }, - "esutils": { - "version": "2.0.3" - }, - "etag": { - "version": "1.8.1", - "optional": true - }, - "eth-block-tracker": { - "version": "3.0.1", - "requires": { - "eth-query": "^2.1.0", - "ethereumjs-tx": "^1.3.3", - "ethereumjs-util": "^5.1.3", - "ethjs-util": "^0.1.3", - "json-rpc-engine": "^3.6.0", - "pify": "^2.3.0", - "tape": "^4.6.3" - }, - "dependencies": { - "ethereumjs-tx": { - "version": "1.3.7", - "requires": { - "ethereum-common": "^0.0.18", - "ethereumjs-util": "^5.0.0" - } - }, - "ethereumjs-util": { - "version": "5.2.1", - "requires": { - "bn.js": "^4.11.0", - "create-hash": "^1.1.2", - "elliptic": "^6.5.2", - "ethereum-cryptography": "^0.1.3", - "ethjs-util": "^0.1.3", - "rlp": "^2.0.0", - "safe-buffer": "^5.1.1" - } - }, - "pify": { - "version": "2.3.0" - } - } - }, - "eth-ens-namehash": { - "version": "2.0.8", - "optional": true, - "requires": { - "idna-uts46-hx": "^2.3.1", - "js-sha3": "^0.5.7" - } - }, - "eth-json-rpc-infura": { - "version": "3.2.1", - "requires": { - "cross-fetch": "^2.1.1", - "eth-json-rpc-middleware": "^1.5.0", - "json-rpc-engine": "^3.4.0", - "json-rpc-error": "^2.0.0" - } - }, - "eth-json-rpc-middleware": { - "version": "1.6.0", - "requires": { - "async": "^2.5.0", - "eth-query": "^2.1.2", - "eth-tx-summary": "^3.1.2", - "ethereumjs-block": "^1.6.0", - "ethereumjs-tx": "^1.3.3", - "ethereumjs-util": "^5.1.2", - "ethereumjs-vm": "^2.1.0", - "fetch-ponyfill": "^4.0.0", - "json-rpc-engine": "^3.6.0", - "json-rpc-error": "^2.0.0", - "json-stable-stringify": "^1.0.1", - "promise-to-callback": "^1.0.0", - "tape": "^4.6.3" - }, - "dependencies": { - "abstract-leveldown": { - "version": "2.6.3", - "requires": { - "xtend": "~4.0.0" - } - }, - "deferred-leveldown": { - "version": "1.2.2", - "requires": { - "abstract-leveldown": "~2.6.0" - } - }, - "ethereumjs-account": { - "version": "2.0.5", - "requires": { - "ethereumjs-util": "^5.0.0", - "rlp": "^2.0.0", - "safe-buffer": "^5.1.1" - } - }, - "ethereumjs-block": { - "version": "1.7.1", - "requires": { - "async": "^2.0.1", - "ethereum-common": "0.2.0", - "ethereumjs-tx": "^1.2.2", - "ethereumjs-util": "^5.0.0", - "merkle-patricia-tree": "^2.1.2" - }, - "dependencies": { - "ethereum-common": { - "version": "0.2.0" - } - } - }, - "ethereumjs-tx": { - "version": "1.3.7", - "requires": { - "ethereum-common": "^0.0.18", - "ethereumjs-util": "^5.0.0" - } - }, - "ethereumjs-util": { - "version": "5.2.1", - "requires": { - "bn.js": "^4.11.0", - "create-hash": "^1.1.2", - "elliptic": "^6.5.2", - "ethereum-cryptography": "^0.1.3", - "ethjs-util": "^0.1.3", - "rlp": "^2.0.0", - "safe-buffer": "^5.1.1" - } - }, - "ethereumjs-vm": { - "version": "2.6.0", - "requires": { - "async": "^2.1.2", - "async-eventemitter": "^0.2.2", - "ethereumjs-account": "^2.0.3", - "ethereumjs-block": "~2.2.0", - "ethereumjs-common": "^1.1.0", - "ethereumjs-util": "^6.0.0", - "fake-merkle-patricia-tree": "^1.0.1", - "functional-red-black-tree": "^1.0.1", - "merkle-patricia-tree": "^2.3.2", - "rustbn.js": "~0.2.0", - "safe-buffer": "^5.1.1" - }, - "dependencies": { - "ethereumjs-block": { - "version": "2.2.2", - "requires": { - "async": "^2.0.1", - "ethereumjs-common": "^1.5.0", - "ethereumjs-tx": "^2.1.1", - "ethereumjs-util": "^5.0.0", - "merkle-patricia-tree": "^2.1.2" - }, - "dependencies": { - "ethereumjs-util": { - "version": "5.2.1", - "requires": { - "bn.js": "^4.11.0", - "create-hash": "^1.1.2", - "elliptic": "^6.5.2", - "ethereum-cryptography": "^0.1.3", - "ethjs-util": "^0.1.3", - "rlp": "^2.0.0", - "safe-buffer": "^5.1.1" - } - } - } - }, - "ethereumjs-tx": { - "version": "2.1.2", - "requires": { - "ethereumjs-common": "^1.5.0", - "ethereumjs-util": "^6.0.0" - } - }, - "ethereumjs-util": { - "version": "6.2.1", - "requires": { - "@types/bn.js": "^4.11.3", - "bn.js": "^4.11.0", - "create-hash": "^1.1.2", - "elliptic": "^6.5.2", - "ethereum-cryptography": "^0.1.3", - "ethjs-util": "0.1.6", - "rlp": "^2.2.3" - } - } - } - }, - "isarray": { - "version": "0.0.1" - }, - "level-codec": { - "version": "7.0.1" - }, - "level-errors": { - "version": "1.0.5", - "requires": { - "errno": "~0.1.1" - } - }, - "level-iterator-stream": { - "version": "1.3.1", - "requires": { - "inherits": "^2.0.1", - "level-errors": "^1.0.3", - "readable-stream": "^1.0.33", - "xtend": "^4.0.0" - }, - "dependencies": { - "readable-stream": { - "version": "1.1.14", - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.1", - "isarray": "0.0.1", - "string_decoder": "~0.10.x" - } - } - } - }, - "level-ws": { - "version": "0.0.0", - "requires": { - "readable-stream": "~1.0.15", - "xtend": "~2.1.1" - }, - "dependencies": { - "readable-stream": { - "version": "1.0.34", - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.1", - "isarray": "0.0.1", - "string_decoder": "~0.10.x" - } - }, - "xtend": { - "version": "2.1.2", - "requires": { - "object-keys": "~0.4.0" - } - } - } - }, - "levelup": { - "version": "1.3.9", - "requires": { - "deferred-leveldown": "~1.2.1", - "level-codec": "~7.0.0", - "level-errors": "~1.0.3", - "level-iterator-stream": "~1.3.0", - "prr": "~1.0.1", - "semver": "~5.4.1", - "xtend": "~4.0.0" - } - }, - "ltgt": { - "version": "2.2.1" - }, - "memdown": { - "version": "1.4.1", - "requires": { - "abstract-leveldown": "~2.7.1", - "functional-red-black-tree": "^1.0.1", - "immediate": "^3.2.3", - "inherits": "~2.0.1", - "ltgt": "~2.2.0", - "safe-buffer": "~5.1.1" - }, - "dependencies": { - "abstract-leveldown": { - "version": "2.7.2", - "requires": { - "xtend": "~4.0.0" - } - } - } - }, - "merkle-patricia-tree": { - "version": "2.3.2", - "requires": { - "async": "^1.4.2", - "ethereumjs-util": "^5.0.0", - "level-ws": "0.0.0", - "levelup": "^1.2.1", - "memdown": "^1.0.0", - "readable-stream": "^2.0.0", - "rlp": "^2.0.0", - "semaphore": ">=1.0.1" - }, - "dependencies": { - "async": { - "version": "1.5.2" - } - } - }, - "object-keys": { - "version": "0.4.0" - }, - "safe-buffer": { - "version": "5.1.2" - }, - "semver": { - "version": "5.4.1" - }, - "string_decoder": { - "version": "0.10.31" - } - } - }, - "eth-lib": { - "version": "0.1.29", - "optional": true, - "requires": { - "bn.js": "^4.11.6", - "elliptic": "^6.4.0", - "nano-json-stream-parser": "^0.1.2", - "servify": "^0.1.12", - "ws": "^3.0.0", - "xhr-request-promise": "^0.1.2" - } - }, - "eth-query": { - "version": "2.1.2", - "requires": { - "json-rpc-random-id": "^1.0.0", - "xtend": "^4.0.1" - } - }, - "eth-sig-util": { - "version": "3.0.0", - "requires": { - "buffer": "^5.2.1", - "elliptic": "^6.4.0", - "ethereumjs-abi": "0.6.5", - "ethereumjs-util": "^5.1.1", - "tweetnacl": "^1.0.0", - "tweetnacl-util": "^0.15.0" - }, - "dependencies": { - "ethereumjs-abi": { - "version": "0.6.5", - "requires": { - "bn.js": "^4.10.0", - "ethereumjs-util": "^4.3.0" - }, - "dependencies": { - "ethereumjs-util": { - "version": "4.5.1", - "requires": { - "bn.js": "^4.8.0", - "create-hash": "^1.1.2", - "elliptic": "^6.5.2", - "ethereum-cryptography": "^0.1.3", - "rlp": "^2.0.0" - } - } - } - }, - "ethereumjs-util": { - "version": "5.2.1", - "requires": { - "bn.js": "^4.11.0", - "create-hash": "^1.1.2", - "elliptic": "^6.5.2", - "ethereum-cryptography": "^0.1.3", - "ethjs-util": "^0.1.3", - "rlp": "^2.0.0", - "safe-buffer": "^5.1.1" - } - } - } - }, - "eth-tx-summary": { - "version": "3.2.4", - "requires": { - "async": "^2.1.2", - "clone": "^2.0.0", - "concat-stream": "^1.5.1", - "end-of-stream": "^1.1.0", - "eth-query": "^2.0.2", - "ethereumjs-block": "^1.4.1", - "ethereumjs-tx": "^1.1.1", - "ethereumjs-util": "^5.0.1", - "ethereumjs-vm": "^2.6.0", - "through2": "^2.0.3" - }, - "dependencies": { - "abstract-leveldown": { - "version": "2.6.3", - "requires": { - "xtend": "~4.0.0" - } - }, - "deferred-leveldown": { - "version": "1.2.2", - "requires": { - "abstract-leveldown": "~2.6.0" - } - }, - "ethereumjs-account": { - "version": "2.0.5", - "requires": { - "ethereumjs-util": "^5.0.0", - "rlp": "^2.0.0", - "safe-buffer": "^5.1.1" - } - }, - "ethereumjs-block": { - "version": "1.7.1", - "requires": { - "async": "^2.0.1", - "ethereum-common": "0.2.0", - "ethereumjs-tx": "^1.2.2", - "ethereumjs-util": "^5.0.0", - "merkle-patricia-tree": "^2.1.2" - }, - "dependencies": { - "ethereum-common": { - "version": "0.2.0" - } - } - }, - "ethereumjs-tx": { - "version": "1.3.7", - "requires": { - "ethereum-common": "^0.0.18", - "ethereumjs-util": "^5.0.0" - } - }, - "ethereumjs-util": { - "version": "5.2.1", - "requires": { - "bn.js": "^4.11.0", - "create-hash": "^1.1.2", - "elliptic": "^6.5.2", - "ethereum-cryptography": "^0.1.3", - "ethjs-util": "^0.1.3", - "rlp": "^2.0.0", - "safe-buffer": "^5.1.1" - } - }, - "ethereumjs-vm": { - "version": "2.6.0", - "requires": { - "async": "^2.1.2", - "async-eventemitter": "^0.2.2", - "ethereumjs-account": "^2.0.3", - "ethereumjs-block": "~2.2.0", - "ethereumjs-common": "^1.1.0", - "ethereumjs-util": "^6.0.0", - "fake-merkle-patricia-tree": "^1.0.1", - "functional-red-black-tree": "^1.0.1", - "merkle-patricia-tree": "^2.3.2", - "rustbn.js": "~0.2.0", - "safe-buffer": "^5.1.1" - }, - "dependencies": { - "ethereumjs-block": { - "version": "2.2.2", - "requires": { - "async": "^2.0.1", - "ethereumjs-common": "^1.5.0", - "ethereumjs-tx": "^2.1.1", - "ethereumjs-util": "^5.0.0", - "merkle-patricia-tree": "^2.1.2" - }, - "dependencies": { - "ethereumjs-util": { - "version": "5.2.1", - "requires": { - "bn.js": "^4.11.0", - "create-hash": "^1.1.2", - "elliptic": "^6.5.2", - "ethereum-cryptography": "^0.1.3", - "ethjs-util": "^0.1.3", - "rlp": "^2.0.0", - "safe-buffer": "^5.1.1" - } - } - } - }, - "ethereumjs-tx": { - "version": "2.1.2", - "requires": { - "ethereumjs-common": "^1.5.0", - "ethereumjs-util": "^6.0.0" - } - }, - "ethereumjs-util": { - "version": "6.2.1", - "requires": { - "@types/bn.js": "^4.11.3", - "bn.js": "^4.11.0", - "create-hash": "^1.1.2", - "elliptic": "^6.5.2", - "ethereum-cryptography": "^0.1.3", - "ethjs-util": "0.1.6", - "rlp": "^2.2.3" - } - } - } - }, - "isarray": { - "version": "0.0.1" - }, - "level-codec": { - "version": "7.0.1" - }, - "level-errors": { - "version": "1.0.5", - "requires": { - "errno": "~0.1.1" - } - }, - "level-iterator-stream": { - "version": "1.3.1", - "requires": { - "inherits": "^2.0.1", - "level-errors": "^1.0.3", - "readable-stream": "^1.0.33", - "xtend": "^4.0.0" - }, - "dependencies": { - "readable-stream": { - "version": "1.1.14", - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.1", - "isarray": "0.0.1", - "string_decoder": "~0.10.x" - } - } - } - }, - "level-ws": { - "version": "0.0.0", - "requires": { - "readable-stream": "~1.0.15", - "xtend": "~2.1.1" - }, - "dependencies": { - "readable-stream": { - "version": "1.0.34", - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.1", - "isarray": "0.0.1", - "string_decoder": "~0.10.x" - } - }, - "xtend": { - "version": "2.1.2", - "requires": { - "object-keys": "~0.4.0" - } - } - } - }, - "levelup": { - "version": "1.3.9", - "requires": { - "deferred-leveldown": "~1.2.1", - "level-codec": "~7.0.0", - "level-errors": "~1.0.3", - "level-iterator-stream": "~1.3.0", - "prr": "~1.0.1", - "semver": "~5.4.1", - "xtend": "~4.0.0" - } - }, - "ltgt": { - "version": "2.2.1" - }, - "memdown": { - "version": "1.4.1", - "requires": { - "abstract-leveldown": "~2.7.1", - "functional-red-black-tree": "^1.0.1", - "immediate": "^3.2.3", - "inherits": "~2.0.1", - "ltgt": "~2.2.0", - "safe-buffer": "~5.1.1" - }, - "dependencies": { - "abstract-leveldown": { - "version": "2.7.2", - "requires": { - "xtend": "~4.0.0" - } - } - } - }, - "merkle-patricia-tree": { - "version": "2.3.2", - "requires": { - "async": "^1.4.2", - "ethereumjs-util": "^5.0.0", - "level-ws": "0.0.0", - "levelup": "^1.2.1", - "memdown": "^1.0.0", - "readable-stream": "^2.0.0", - "rlp": "^2.0.0", - "semaphore": ">=1.0.1" - }, - "dependencies": { - "async": { - "version": "1.5.2" - } - } - }, - "object-keys": { - "version": "0.4.0" - }, - "safe-buffer": { - "version": "5.1.2" - }, - "semver": { - "version": "5.4.1" - }, - "string_decoder": { - "version": "0.10.31" - } - } - }, - "ethashjs": { - "version": "0.0.8", - "requires": { - "async": "^2.1.2", - "buffer-xor": "^2.0.1", - "ethereumjs-util": "^7.0.2", - "miller-rabin": "^4.0.0" - }, - "dependencies": { - "bn.js": { - "version": "5.1.3" - }, - "buffer-xor": { - "version": "2.0.2", - "requires": { - "safe-buffer": "^5.1.1" - } - }, - "ethereumjs-util": { - "version": "7.0.7", - "requires": { - "@types/bn.js": "^4.11.3", - "bn.js": "^5.1.2", - "create-hash": "^1.1.2", - "ethereum-cryptography": "^0.1.3", - "ethjs-util": "0.1.6", - "rlp": "^2.2.4" - } - } - } - }, - "ethereum-bloom-filters": { - "version": "1.0.7", - "optional": true, - "requires": { - "js-sha3": "^0.8.0" - }, - "dependencies": { - "js-sha3": { - "version": "0.8.0", - "optional": true - } - } - }, - "ethereum-common": { - "version": "0.0.18" - }, - "ethereum-cryptography": { - "version": "0.1.3", - "requires": { - "@types/pbkdf2": "^3.0.0", - "@types/secp256k1": "^4.0.1", - "blakejs": "^1.1.0", - "browserify-aes": "^1.2.0", - "bs58check": "^2.1.2", - "create-hash": "^1.2.0", - "create-hmac": "^1.1.7", - "hash.js": "^1.1.7", - "keccak": "^3.0.0", - "pbkdf2": "^3.0.17", - "randombytes": "^2.1.0", - "safe-buffer": "^5.1.2", - "scrypt-js": "^3.0.0", - "secp256k1": "^4.0.1", - "setimmediate": "^1.0.5" - } - }, - "ethereumjs-abi": { - "version": "0.6.8", - "requires": { - "bn.js": "^4.11.8", - "ethereumjs-util": "^6.0.0" - } - }, - "ethereumjs-account": { - "version": "3.0.0", - "requires": { - "ethereumjs-util": "^6.0.0", - "rlp": "^2.2.1", - "safe-buffer": "^5.1.1" - } - }, - "ethereumjs-block": { - "version": "2.2.2", - "requires": { - "async": "^2.0.1", - "ethereumjs-common": "^1.5.0", - "ethereumjs-tx": "^2.1.1", - "ethereumjs-util": "^5.0.0", - "merkle-patricia-tree": "^2.1.2" - }, - "dependencies": { - "abstract-leveldown": { - "version": "2.6.3", - "requires": { - "xtend": "~4.0.0" - } - }, - "deferred-leveldown": { - "version": "1.2.2", - "requires": { - "abstract-leveldown": "~2.6.0" - } - }, - "ethereumjs-util": { - "version": "5.2.1", - "requires": { - "bn.js": "^4.11.0", - "create-hash": "^1.1.2", - "elliptic": "^6.5.2", - "ethereum-cryptography": "^0.1.3", - "ethjs-util": "^0.1.3", - "rlp": "^2.0.0", - "safe-buffer": "^5.1.1" - } - }, - "isarray": { - "version": "0.0.1" - }, - "level-codec": { - "version": "7.0.1" - }, - "level-errors": { - "version": "1.0.5", - "requires": { - "errno": "~0.1.1" - } - }, - "level-iterator-stream": { - "version": "1.3.1", - "requires": { - "inherits": "^2.0.1", - "level-errors": "^1.0.3", - "readable-stream": "^1.0.33", - "xtend": "^4.0.0" - }, - "dependencies": { - "readable-stream": { - "version": "1.1.14", - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.1", - "isarray": "0.0.1", - "string_decoder": "~0.10.x" - } - } - } - }, - "level-ws": { - "version": "0.0.0", - "requires": { - "readable-stream": "~1.0.15", - "xtend": "~2.1.1" - }, - "dependencies": { - "readable-stream": { - "version": "1.0.34", - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.1", - "isarray": "0.0.1", - "string_decoder": "~0.10.x" - } - }, - "xtend": { - "version": "2.1.2", - "requires": { - "object-keys": "~0.4.0" - } - } - } - }, - "levelup": { - "version": "1.3.9", - "requires": { - "deferred-leveldown": "~1.2.1", - "level-codec": "~7.0.0", - "level-errors": "~1.0.3", - "level-iterator-stream": "~1.3.0", - "prr": "~1.0.1", - "semver": "~5.4.1", - "xtend": "~4.0.0" - } - }, - "ltgt": { - "version": "2.2.1" - }, - "memdown": { - "version": "1.4.1", - "requires": { - "abstract-leveldown": "~2.7.1", - "functional-red-black-tree": "^1.0.1", - "immediate": "^3.2.3", - "inherits": "~2.0.1", - "ltgt": "~2.2.0", - "safe-buffer": "~5.1.1" - }, - "dependencies": { - "abstract-leveldown": { - "version": "2.7.2", - "requires": { - "xtend": "~4.0.0" - } - } - } - }, - "merkle-patricia-tree": { - "version": "2.3.2", - "requires": { - "async": "^1.4.2", - "ethereumjs-util": "^5.0.0", - "level-ws": "0.0.0", - "levelup": "^1.2.1", - "memdown": "^1.0.0", - "readable-stream": "^2.0.0", - "rlp": "^2.0.0", - "semaphore": ">=1.0.1" - }, - "dependencies": { - "async": { - "version": "1.5.2" - } - } - }, - "object-keys": { - "version": "0.4.0" - }, - "safe-buffer": { - "version": "5.1.2" - }, - "semver": { - "version": "5.4.1" - }, - "string_decoder": { - "version": "0.10.31" - } - } - }, - "ethereumjs-blockchain": { - "version": "4.0.4", - "requires": { - "async": "^2.6.1", - "ethashjs": "~0.0.7", - "ethereumjs-block": "~2.2.2", - "ethereumjs-common": "^1.5.0", - "ethereumjs-util": "^6.1.0", - "flow-stoplight": "^1.0.0", - "level-mem": "^3.0.1", - "lru-cache": "^5.1.1", - "rlp": "^2.2.2", - "semaphore": "^1.1.0" - } - }, - "ethereumjs-common": { - "version": "1.5.0" - }, - "ethereumjs-tx": { - "version": "2.1.2", - "requires": { - "ethereumjs-common": "^1.5.0", - "ethereumjs-util": "^6.0.0" - } - }, - "ethereumjs-util": { - "version": "6.2.1", - "requires": { - "@types/bn.js": "^4.11.3", - "bn.js": "^4.11.0", - "create-hash": "^1.1.2", - "elliptic": "^6.5.2", - "ethereum-cryptography": "^0.1.3", - "ethjs-util": "0.1.6", - "rlp": "^2.2.3" - } - }, - "ethereumjs-vm": { - "version": "4.2.0", - "requires": { - "async": "^2.1.2", - "async-eventemitter": "^0.2.2", - "core-js-pure": "^3.0.1", - "ethereumjs-account": "^3.0.0", - "ethereumjs-block": "^2.2.2", - "ethereumjs-blockchain": "^4.0.3", - "ethereumjs-common": "^1.5.0", - "ethereumjs-tx": "^2.1.2", - "ethereumjs-util": "^6.2.0", - "fake-merkle-patricia-tree": "^1.0.1", - "functional-red-black-tree": "^1.0.1", - "merkle-patricia-tree": "^2.3.2", - "rustbn.js": "~0.2.0", - "safe-buffer": "^5.1.1", - "util.promisify": "^1.0.0" - }, - "dependencies": { - "abstract-leveldown": { - "version": "2.6.3", - "requires": { - "xtend": "~4.0.0" - } - }, - "deferred-leveldown": { - "version": "1.2.2", - "requires": { - "abstract-leveldown": "~2.6.0" - } - }, - "isarray": { - "version": "0.0.1" - }, - "level-codec": { - "version": "7.0.1" - }, - "level-errors": { - "version": "1.0.5", - "requires": { - "errno": "~0.1.1" - } - }, - "level-iterator-stream": { - "version": "1.3.1", - "requires": { - "inherits": "^2.0.1", - "level-errors": "^1.0.3", - "readable-stream": "^1.0.33", - "xtend": "^4.0.0" - }, - "dependencies": { - "readable-stream": { - "version": "1.1.14", - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.1", - "isarray": "0.0.1", - "string_decoder": "~0.10.x" - } - } - } - }, - "level-ws": { - "version": "0.0.0", - "requires": { - "readable-stream": "~1.0.15", - "xtend": "~2.1.1" - }, - "dependencies": { - "readable-stream": { - "version": "1.0.34", - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.1", - "isarray": "0.0.1", - "string_decoder": "~0.10.x" - } - }, - "xtend": { - "version": "2.1.2", - "requires": { - "object-keys": "~0.4.0" - } - } - } - }, - "levelup": { - "version": "1.3.9", - "requires": { - "deferred-leveldown": "~1.2.1", - "level-codec": "~7.0.0", - "level-errors": "~1.0.3", - "level-iterator-stream": "~1.3.0", - "prr": "~1.0.1", - "semver": "~5.4.1", - "xtend": "~4.0.0" - } - }, - "ltgt": { - "version": "2.2.1" - }, - "memdown": { - "version": "1.4.1", - "requires": { - "abstract-leveldown": "~2.7.1", - "functional-red-black-tree": "^1.0.1", - "immediate": "^3.2.3", - "inherits": "~2.0.1", - "ltgt": "~2.2.0", - "safe-buffer": "~5.1.1" - }, - "dependencies": { - "abstract-leveldown": { - "version": "2.7.2", - "requires": { - "xtend": "~4.0.0" - } - } - } - }, - "merkle-patricia-tree": { - "version": "2.3.2", - "requires": { - "async": "^1.4.2", - "ethereumjs-util": "^5.0.0", - "level-ws": "0.0.0", - "levelup": "^1.2.1", - "memdown": "^1.0.0", - "readable-stream": "^2.0.0", - "rlp": "^2.0.0", - "semaphore": ">=1.0.1" - }, - "dependencies": { - "async": { - "version": "1.5.2" - }, - "ethereumjs-util": { - "version": "5.2.1", - "requires": { - "bn.js": "^4.11.0", - "create-hash": "^1.1.2", - "elliptic": "^6.5.2", - "ethereum-cryptography": "^0.1.3", - "ethjs-util": "^0.1.3", - "rlp": "^2.0.0", - "safe-buffer": "^5.1.1" - } - } - } - }, - "object-keys": { - "version": "0.4.0" - }, - "safe-buffer": { - "version": "5.1.2" - }, - "semver": { - "version": "5.4.1" - }, - "string_decoder": { - "version": "0.10.31" - } - } - }, - "ethereumjs-wallet": { - "version": "0.6.5", - "optional": true, - "requires": { - "aes-js": "^3.1.1", - "bs58check": "^2.1.2", - "ethereum-cryptography": "^0.1.3", - "ethereumjs-util": "^6.0.0", - "randombytes": "^2.0.6", - "safe-buffer": "^5.1.2", - "scryptsy": "^1.2.1", - "utf8": "^3.0.0", - "uuid": "^3.3.2" - } - }, - "ethjs-unit": { - "version": "0.1.6", - "optional": true, - "requires": { - "bn.js": "4.11.6", - "number-to-bn": "1.7.0" - }, - "dependencies": { - "bn.js": { - "version": "4.11.6", - "optional": true - } - } - }, - "ethjs-util": { - "version": "0.1.6", - "requires": { - "is-hex-prefixed": "1.0.0", - "strip-hex-prefix": "1.0.0" - } - }, - "eventemitter3": { - "version": "4.0.4", - "optional": true - }, - "events": { - "version": "3.2.0" - }, - "evp_bytestokey": { - "version": "1.0.3", - "requires": { - "md5.js": "^1.3.4", - "safe-buffer": "^5.1.1" - } - }, - "expand-brackets": { - "version": "2.1.4", - "requires": { - "debug": "^2.3.3", - "define-property": "^0.2.5", - "extend-shallow": "^2.0.1", - "posix-character-classes": "^0.1.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "requires": { - "ms": "2.0.0" - } - }, - "define-property": { - "version": "0.2.5", - "requires": { - "is-descriptor": "^0.1.0" - } - }, - "extend-shallow": { - "version": "2.0.1", - "requires": { - "is-extendable": "^0.1.0" - } - }, - "is-accessor-descriptor": { - "version": "0.1.6", - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "is-buffer": { - "version": "1.1.6" - }, - "is-data-descriptor": { - "version": "0.1.4", - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "is-descriptor": { - "version": "0.1.6", - "requires": { - "is-accessor-descriptor": "^0.1.6", - "is-data-descriptor": "^0.1.4", - "kind-of": "^5.0.0" - } - }, - "is-extendable": { - "version": "0.1.1" - }, - "kind-of": { - "version": "5.1.0" - }, - "ms": { - "version": "2.0.0" - } - } - }, - "express": { - "version": "4.17.1", - "optional": true, - "requires": { - "accepts": "~1.3.7", - "array-flatten": "1.1.1", - "body-parser": "1.19.0", - "content-disposition": "0.5.3", - "content-type": "~1.0.4", - "cookie": "0.4.0", - "cookie-signature": "1.0.6", - "debug": "2.6.9", - "depd": "~1.1.2", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "etag": "~1.8.1", - "finalhandler": "~1.1.2", - "fresh": "0.5.2", - "merge-descriptors": "1.0.1", - "methods": "~1.1.2", - "on-finished": "~2.3.0", - "parseurl": "~1.3.3", - "path-to-regexp": "0.1.7", - "proxy-addr": "~2.0.5", - "qs": "6.7.0", - "range-parser": "~1.2.1", - "safe-buffer": "5.1.2", - "send": "0.17.1", - "serve-static": "1.14.1", - "setprototypeof": "1.1.1", - "statuses": "~1.5.0", - "type-is": "~1.6.18", - "utils-merge": "1.0.1", - "vary": "~1.1.2" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "optional": true, - "requires": { - "ms": "2.0.0" - } - }, - "ms": { - "version": "2.0.0", - "optional": true - }, - "qs": { - "version": "6.7.0", - "optional": true - }, - "safe-buffer": { - "version": "5.1.2", - "optional": true - } - } - }, - "ext": { - "version": "1.4.0", - "requires": { - "type": "^2.0.0" - }, - "dependencies": { - "type": { - "version": "2.1.0" - } - } - }, - "extend": { - "version": "3.0.2" - }, - "extend-shallow": { - "version": "3.0.2", - "requires": { - "assign-symbols": "^1.0.0", - "is-extendable": "^1.0.1" - } - }, - "extglob": { - "version": "2.0.4", - "requires": { - "array-unique": "^0.3.2", - "define-property": "^1.0.0", - "expand-brackets": "^2.1.4", - "extend-shallow": "^2.0.1", - "fragment-cache": "^0.2.1", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" - }, - "dependencies": { - "define-property": { - "version": "1.0.0", - "requires": { - "is-descriptor": "^1.0.0" - } - }, - "extend-shallow": { - "version": "2.0.1", - "requires": { - "is-extendable": "^0.1.0" - } - }, - "is-extendable": { - "version": "0.1.1" - } - } - }, - "extsprintf": { - "version": "1.3.0" - }, - "fake-merkle-patricia-tree": { - "version": "1.0.1", - "requires": { - "checkpoint-store": "^1.1.0" - } - }, - "fast-deep-equal": { - "version": "3.1.3" - }, - "fast-json-stable-stringify": { - "version": "2.1.0" - }, - "fetch-ponyfill": { - "version": "4.1.0", - "requires": { - "node-fetch": "~1.7.1" - }, - "dependencies": { - "is-stream": { - "version": "1.1.0" - }, - "node-fetch": { - "version": "1.7.3", - "requires": { - "encoding": "^0.1.11", - "is-stream": "^1.0.1" - } - } - } - }, - "finalhandler": { - "version": "1.1.2", - "optional": true, - "requires": { - "debug": "2.6.9", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "on-finished": "~2.3.0", - "parseurl": "~1.3.3", - "statuses": "~1.5.0", - "unpipe": "~1.0.0" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "optional": true, - "requires": { - "ms": "2.0.0" - } - }, - "ms": { - "version": "2.0.0", - "optional": true - } - } - }, - "find-yarn-workspace-root": { - "version": "1.2.1", - "requires": { - "fs-extra": "^4.0.3", - "micromatch": "^3.1.4" - }, - "dependencies": { - "braces": { - "version": "2.3.2", - "requires": { - "arr-flatten": "^1.1.0", - "array-unique": "^0.3.2", - "extend-shallow": "^2.0.1", - "fill-range": "^4.0.0", - "isobject": "^3.0.1", - "repeat-element": "^1.1.2", - "snapdragon": "^0.8.1", - "snapdragon-node": "^2.0.1", - "split-string": "^3.0.2", - "to-regex": "^3.0.1" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "requires": { - "is-extendable": "^0.1.0" - } - } - } - }, - "fill-range": { - "version": "4.0.0", - "requires": { - "extend-shallow": "^2.0.1", - "is-number": "^3.0.0", - "repeat-string": "^1.6.1", - "to-regex-range": "^2.1.0" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "requires": { - "is-extendable": "^0.1.0" - } - } - } - }, - "fs-extra": { - "version": "4.0.3", - "requires": { - "graceful-fs": "^4.1.2", - "jsonfile": "^4.0.0", - "universalify": "^0.1.0" - } - }, - "is-buffer": { - "version": "1.1.6" - }, - "is-extendable": { - "version": "0.1.1" - }, - "is-number": { - "version": "3.0.0", - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "micromatch": { - "version": "3.1.10", - "requires": { - "arr-diff": "^4.0.0", - "array-unique": "^0.3.2", - "braces": "^2.3.1", - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "extglob": "^2.0.4", - "fragment-cache": "^0.2.1", - "kind-of": "^6.0.2", - "nanomatch": "^1.2.9", - "object.pick": "^1.3.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.2" - } - }, - "to-regex-range": { - "version": "2.1.1", - "requires": { - "is-number": "^3.0.0", - "repeat-string": "^1.6.1" - } - } - } - }, - "flow-stoplight": { - "version": "1.0.0" - }, - "for-each": { - "version": "0.3.3", - "requires": { - "is-callable": "^1.1.3" - } - }, - "for-in": { - "version": "1.0.2" - }, - "forever-agent": { - "version": "0.6.1" - }, - "form-data": { - "version": "2.3.3", - "requires": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.6", - "mime-types": "^2.1.12" - } - }, - "forwarded": { - "version": "0.1.2", - "optional": true - }, - "fragment-cache": { - "version": "0.2.1", - "requires": { - "map-cache": "^0.2.2" - } - }, - "fresh": { - "version": "0.5.2", - "optional": true - }, - "fs-extra": { - "version": "7.0.1", - "requires": { - "graceful-fs": "^4.1.2", - "jsonfile": "^4.0.0", - "universalify": "^0.1.0" - } - }, - "fs.realpath": { - "version": "1.0.0" - }, - "function-bind": { - "version": "1.1.1" - }, - "functional-red-black-tree": { - "version": "1.0.1" - }, - "get-intrinsic": { - "version": "1.0.2", - "requires": { - "function-bind": "^1.1.1", - "has": "^1.0.3", - "has-symbols": "^1.0.1" - } - }, - "get-stream": { - "version": "5.2.0", - "optional": true, - "requires": { - "pump": "^3.0.0" - } - }, - "get-value": { - "version": "2.0.6" - }, - "getpass": { - "version": "0.1.7", - "requires": { - "assert-plus": "^1.0.0" - } - }, - "glob": { - "version": "7.1.3", - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - }, - "global": { - "version": "4.4.0", - "requires": { - "min-document": "^2.19.0", - "process": "^0.11.10" - } - }, - "got": { - "version": "9.6.0", - "optional": true, - "requires": { - "@sindresorhus/is": "^0.14.0", - "@szmarczak/http-timer": "^1.1.2", - "cacheable-request": "^6.0.0", - "decompress-response": "^3.3.0", - "duplexer3": "^0.1.4", - "get-stream": "^4.1.0", - "lowercase-keys": "^1.0.1", - "mimic-response": "^1.0.1", - "p-cancelable": "^1.0.0", - "to-readable-stream": "^1.0.0", - "url-parse-lax": "^3.0.0" - }, - "dependencies": { - "get-stream": { - "version": "4.1.0", - "optional": true, - "requires": { - "pump": "^3.0.0" - } - } - } - }, - "graceful-fs": { - "version": "4.2.4" - }, - "har-schema": { - "version": "2.0.0" - }, - "har-validator": { - "version": "5.1.5", - "requires": { - "ajv": "^6.12.3", - "har-schema": "^2.0.0" - } - }, - "has": { - "version": "1.0.3", - "requires": { - "function-bind": "^1.1.1" - } - }, - "has-ansi": { - "version": "2.0.0", - "requires": { - "ansi-regex": "^2.0.0" - }, - "dependencies": { - "ansi-regex": { - "version": "2.1.1" - } - } - }, - "has-flag": { - "version": "3.0.0" - }, - "has-symbol-support-x": { - "version": "1.4.2", - "optional": true - }, - "has-symbols": { - "version": "1.0.1" - }, - "has-to-string-tag-x": { - "version": "1.4.1", - "optional": true, - "requires": { - "has-symbol-support-x": "^1.4.1" - } - }, - "has-value": { - "version": "1.0.0", - "requires": { - "get-value": "^2.0.6", - "has-values": "^1.0.0", - "isobject": "^3.0.0" - } - }, - "has-values": { - "version": "1.0.0", - "requires": { - "is-number": "^3.0.0", - "kind-of": "^4.0.0" - }, - "dependencies": { - "is-buffer": { - "version": "1.1.6" - }, - "is-number": { - "version": "3.0.0", - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "kind-of": { - "version": "4.0.0", - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "hash-base": { - "version": "3.1.0", - "requires": { - "inherits": "^2.0.4", - "readable-stream": "^3.6.0", - "safe-buffer": "^5.2.0" - }, - "dependencies": { - "readable-stream": { - "version": "3.6.0", - "requires": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - } - } - } - }, - "hash.js": { - "version": "1.1.7", - "requires": { - "inherits": "^2.0.3", - "minimalistic-assert": "^1.0.1" - } - }, - "heap": { - "version": "0.2.6" - }, - "hmac-drbg": { - "version": "1.0.1", - "requires": { - "hash.js": "^1.0.3", - "minimalistic-assert": "^1.0.0", - "minimalistic-crypto-utils": "^1.0.1" - } - }, - "home-or-tmp": { - "version": "2.0.0", - "requires": { - "os-homedir": "^1.0.0", - "os-tmpdir": "^1.0.1" - } - }, - "http-cache-semantics": { - "version": "4.1.0", - "optional": true - }, - "http-errors": { - "version": "1.7.2", - "optional": true, - "requires": { - "depd": "~1.1.2", - "inherits": "2.0.3", - "setprototypeof": "1.1.1", - "statuses": ">= 1.5.0 < 2", - "toidentifier": "1.0.0" - }, - "dependencies": { - "inherits": { - "version": "2.0.3", - "optional": true - } - } - }, - "http-https": { - "version": "1.0.0", - "optional": true - }, - "http-signature": { - "version": "1.2.0", - "requires": { - "assert-plus": "^1.0.0", - "jsprim": "^1.2.2", - "sshpk": "^1.7.0" - } - }, - "iconv-lite": { - "version": "0.4.24", - "optional": true, - "requires": { - "safer-buffer": ">= 2.1.2 < 3" - } - }, - "idna-uts46-hx": { - "version": "2.3.1", - "optional": true, - "requires": { - "punycode": "2.1.0" - }, - "dependencies": { - "punycode": { - "version": "2.1.0", - "optional": true - } - } - }, - "ieee754": { - "version": "1.2.1" - }, - "immediate": { - "version": "3.2.3" - }, - "inflight": { - "version": "1.0.6", - "requires": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "inherits": { - "version": "2.0.4" - }, - "invariant": { - "version": "2.2.4", - "requires": { - "loose-envify": "^1.0.0" - } - }, - "ipaddr.js": { - "version": "1.9.1", - "optional": true - }, - "is-accessor-descriptor": { - "version": "1.0.0", - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-arguments": { - "version": "1.1.0", - "requires": { - "call-bind": "^1.0.0" - } - }, - "is-callable": { - "version": "1.2.2" - }, - "is-ci": { - "version": "2.0.0", - "requires": { - "ci-info": "^2.0.0" - } - }, - "is-data-descriptor": { - "version": "1.0.0", - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-date-object": { - "version": "1.0.2" - }, - "is-descriptor": { - "version": "1.0.2", - "requires": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - } - }, - "is-extendable": { - "version": "1.0.1", - "requires": { - "is-plain-object": "^2.0.4" - } - }, - "is-finite": { - "version": "1.1.0" - }, - "is-fn": { - "version": "1.0.0" - }, - "is-function": { - "version": "1.0.2" - }, - "is-hex-prefixed": { - "version": "1.0.0" - }, - "is-negative-zero": { - "version": "2.0.1" - }, - "is-object": { - "version": "1.0.2", - "optional": true - }, - "is-plain-obj": { - "version": "1.1.0", - "optional": true - }, - "is-plain-object": { - "version": "2.0.4", - "requires": { - "isobject": "^3.0.1" - } - }, - "is-regex": { - "version": "1.1.1", - "requires": { - "has-symbols": "^1.0.1" - } - }, - "is-retry-allowed": { - "version": "1.2.0", - "optional": true - }, - "is-symbol": { - "version": "1.0.3", + "@truffle/contract": { + "version": "4.6.31", + "resolved": "https://registry.npmjs.org/@truffle/contract/-/contract-4.6.31.tgz", + "integrity": "sha512-s+oHDpXASnZosiCdzu+X1Tx5mUJUs1L1CYXIcgRmzMghzqJkaUFmR6NpNo7nJYliYbO+O9/aW8oCKqQ7rCHfmQ==", + "dev": true, + "requires": { + "@ensdomains/ensjs": "^2.1.0", + "@truffle/blockchain-utils": "^0.1.9", + "@truffle/contract-schema": "^3.4.16", + "@truffle/debug-utils": "^6.0.57", + "@truffle/error": "^0.2.2", + "@truffle/interface-adapter": "^0.5.37", + "bignumber.js": "^7.2.1", + "debug": "^4.3.1", + "ethers": "^4.0.32", + "web3": "1.10.0", + "web3-core-helpers": "1.10.0", + "web3-core-promievent": "1.10.0", + "web3-eth-abi": "1.10.0", + "web3-utils": "1.10.0" + }, + "dependencies": { + "@ethereumjs/common": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/@ethereumjs/common/-/common-2.5.0.tgz", + "integrity": "sha512-DEHjW6e38o+JmB/NO3GZBpW4lpaiBpkFgXF6jLcJ6gETBYpEyaA5nTimsWBUJR3Vmtm/didUEbNjajskugZORg==", + "dev": true, "requires": { - "has-symbols": "^1.0.1" + "crc-32": "^1.2.0", + "ethereumjs-util": "^7.1.1" } }, - "is-typedarray": { - "version": "1.0.0" - }, - "is-windows": { - "version": "1.0.2" - }, - "isarray": { - "version": "1.0.0" - }, - "isexe": { - "version": "2.0.0" - }, - "isobject": { - "version": "3.0.1" - }, - "isstream": { - "version": "0.1.2" - }, - "isurl": { - "version": "1.0.0", - "optional": true, + "@ethereumjs/tx": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/@ethereumjs/tx/-/tx-3.3.2.tgz", + "integrity": "sha512-6AaJhwg4ucmwTvw/1qLaZUX5miWrwZ4nLOUsKyb/HtzS3BMw/CasKhdi1ims9mBKeK9sOJCH4qGKOBGyJCeeog==", + "dev": true, "requires": { - "has-to-string-tag-x": "^1.2.0", - "is-object": "^1.0.1" + "@ethereumjs/common": "^2.5.0", + "ethereumjs-util": "^7.1.2" } }, - "js-sha3": { - "version": "0.5.7", - "optional": true - }, - "js-tokens": { - "version": "4.0.0" + "@truffle/error": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/@truffle/error/-/error-0.2.2.tgz", + "integrity": "sha512-TqbzJ0O8DHh34cu8gDujnYl4dUl6o2DE4PR6iokbybvnIm/L2xl6+Gv1VC+YJS45xfH83Yo3/Zyg/9Oq8/xZWg==", + "dev": true }, - "jsbn": { - "version": "0.1.1" + "@types/node": { + "version": "12.20.55", + "resolved": "https://registry.npmjs.org/@types/node/-/node-12.20.55.tgz", + "integrity": "sha512-J8xLz7q2OFulZ2cyGTLE1TbbZcjpno7FaN6zdJNrgAdrJ+DZzh/uFR6YrTb4C+nXakvud8Q4+rbhoIWlYQbUFQ==", + "dev": true }, - "json-buffer": { + "aes-js": { "version": "3.0.0", - "optional": true + "resolved": "https://registry.npmjs.org/aes-js/-/aes-js-3.0.0.tgz", + "integrity": "sha512-H7wUZRn8WpTq9jocdxQ2c8x2sKo9ZVmzfRE13GiNJXfp7NcKYEdvl3vspKjXox6RIG2VtaRe4JFvxG4rqp2Zuw==", + "dev": true + }, + "bignumber.js": { + "version": "7.2.1", + "resolved": "https://registry.npmjs.org/bignumber.js/-/bignumber.js-7.2.1.tgz", + "integrity": "sha512-S4XzBk5sMB+Rcb/LNcpzXr57VRTxgAvaAEDAl1AwRx27j00hT84O6OkteE7u8UB3NuaaygCRrEpqox4uDOrbdQ==", + "dev": true }, - "json-rpc-engine": { - "version": "3.8.0", + "cross-fetch": { + "version": "3.1.8", + "resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-3.1.8.tgz", + "integrity": "sha512-cvA+JwZoU0Xq+h6WkMvAUqPEYy92Obet6UdKLfW60qn99ftItKjB5T+BkyWOFWe2pUyfQ+IJHmpOTznqk1M6Kg==", + "dev": true, "requires": { - "async": "^2.0.1", - "babel-preset-env": "^1.7.0", - "babelify": "^7.3.0", - "json-rpc-error": "^2.0.0", - "promise-to-callback": "^1.0.0", - "safe-event-emitter": "^1.0.1" + "node-fetch": "^2.6.12" } }, - "json-rpc-error": { - "version": "2.0.0", + "eth-lib": { + "version": "0.2.8", + "resolved": "https://registry.npmjs.org/eth-lib/-/eth-lib-0.2.8.tgz", + "integrity": "sha512-ArJ7x1WcWOlSpzdoTBX8vkwlkSQ85CjjifSZtV4co64vWxSV8geWfPI9x4SVYu3DSxnX4yWFVTtGL+j9DUFLNw==", + "dev": true, "requires": { - "inherits": "^2.0.1" + "bn.js": "^4.11.6", + "elliptic": "^6.4.0", + "xhr-request-promise": "^0.1.2" + }, + "dependencies": { + "bn.js": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", + "dev": true + } } }, - "json-rpc-random-id": { - "version": "1.0.1" - }, - "json-schema": { - "version": "0.2.3" - }, - "json-schema-traverse": { - "version": "0.4.1" - }, - "json-stable-stringify": { - "version": "1.0.1", + "ethers": { + "version": "4.0.49", + "resolved": "https://registry.npmjs.org/ethers/-/ethers-4.0.49.tgz", + "integrity": "sha512-kPltTvWiyu+OktYy1IStSO16i2e7cS9D9OxZ81q2UUaiNPVrm/RTcbxamCXF9VUSKzJIdJV68EAIhTEVBalRWg==", + "dev": true, "requires": { - "jsonify": "~0.0.0" + "aes-js": "3.0.0", + "bn.js": "^4.11.9", + "elliptic": "6.5.4", + "hash.js": "1.1.3", + "js-sha3": "0.5.7", + "scrypt-js": "2.0.4", + "setimmediate": "1.0.4", + "uuid": "2.0.1", + "xmlhttprequest": "1.8.0" + }, + "dependencies": { + "bn.js": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", + "dev": true + } } }, - "json-stringify-safe": { - "version": "5.0.1" - }, - "jsonfile": { - "version": "4.0.0", + "hash.js": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.3.tgz", + "integrity": "sha512-/UETyP0W22QILqS+6HowevwhEFJ3MBJnwTf75Qob9Wz9t0DPuisL8kW8YZMK62dHAKE1c1p+gY1TtOLY+USEHA==", + "dev": true, "requires": { - "graceful-fs": "^4.1.6" + "inherits": "^2.0.3", + "minimalistic-assert": "^1.0.0" } }, - "jsonify": { - "version": "0.0.0" + "js-sha3": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/js-sha3/-/js-sha3-0.5.7.tgz", + "integrity": "sha512-GII20kjaPX0zJ8wzkTbNDYMY7msuZcTWk8S5UOh6806Jq/wz1J8/bnr8uGU0DAUmYDjj2Mr4X1cW8v/GLYnR+g==", + "dev": true }, - "jsprim": { - "version": "1.4.1", - "requires": { - "assert-plus": "1.0.0", - "extsprintf": "1.3.0", - "json-schema": "0.2.3", - "verror": "1.10.0" - } + "scrypt-js": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/scrypt-js/-/scrypt-js-2.0.4.tgz", + "integrity": "sha512-4KsaGcPnuhtCZQCxFxN3GVYIhKFPTdLd8PLC552XwbMndtD0cjRFAhDuuydXQ0h08ZfPgzqe6EKHozpuH74iDw==", + "dev": true }, - "keccak": { - "version": "3.0.1", - "bundled": true, - "requires": { - "node-addon-api": "^2.0.0", - "node-gyp-build": "^4.2.0" - } + "setimmediate": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.4.tgz", + "integrity": "sha512-/TjEmXQVEzdod/FFskf3o7oOAsGhHf2j1dZqRFbDzq4F3mvvxflIIi4Hd3bLQE9y/CpwqfSQam5JakI/mi3Pog==", + "dev": true }, - "keyv": { - "version": "3.1.0", - "optional": true, + "uuid": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-2.0.1.tgz", + "integrity": "sha512-nWg9+Oa3qD2CQzHIP4qKUqwNfzKn8P0LtFhotaCTFchsV7ZfDhAybeip/HZVeMIpZi9JgY1E3nUlwaCmZT1sEg==", + "dev": true + }, + "web3": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/web3/-/web3-1.10.0.tgz", + "integrity": "sha512-YfKY9wSkGcM8seO+daR89oVTcbu18NsVfvOngzqMYGUU0pPSQmE57qQDvQzUeoIOHAnXEBNzrhjQJmm8ER0rng==", + "dev": true, "requires": { - "json-buffer": "3.0.0" + "web3-bzz": "1.10.0", + "web3-core": "1.10.0", + "web3-eth": "1.10.0", + "web3-eth-personal": "1.10.0", + "web3-net": "1.10.0", + "web3-shh": "1.10.0", + "web3-utils": "1.10.0" } }, - "kind-of": { - "version": "6.0.3" - }, - "klaw-sync": { - "version": "6.0.0", + "web3-bzz": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/web3-bzz/-/web3-bzz-1.10.0.tgz", + "integrity": "sha512-o9IR59io3pDUsXTsps5pO5hW1D5zBmg46iNc2t4j2DkaYHNdDLwk2IP9ukoM2wg47QILfPEJYzhTfkS/CcX0KA==", + "dev": true, "requires": { - "graceful-fs": "^4.1.11" + "@types/node": "^12.12.6", + "got": "12.1.0", + "swarm-js": "^0.1.40" } }, - "level-codec": { - "version": "9.0.2", + "web3-core": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/web3-core/-/web3-core-1.10.0.tgz", + "integrity": "sha512-fWySwqy2hn3TL89w5TM8wXF1Z2Q6frQTKHWmP0ppRQorEK8NcHJRfeMiv/mQlSKoTS1F6n/nv2uyZsixFycjYQ==", + "dev": true, "requires": { - "buffer": "^5.6.0" + "@types/bn.js": "^5.1.1", + "@types/node": "^12.12.6", + "bignumber.js": "^9.0.0", + "web3-core-helpers": "1.10.0", + "web3-core-method": "1.10.0", + "web3-core-requestmanager": "1.10.0", + "web3-utils": "1.10.0" + }, + "dependencies": { + "bignumber.js": { + "version": "9.1.2", + "resolved": "https://registry.npmjs.org/bignumber.js/-/bignumber.js-9.1.2.tgz", + "integrity": "sha512-2/mKyZH9K85bzOEfhXDBFZTGd1CTs+5IHpeFQo9luiBG7hghdC851Pj2WAhb6E3R6b9tZj/XKhbg4fum+Kepug==", + "dev": true + } } }, - "level-errors": { - "version": "2.0.1", + "web3-core-helpers": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/web3-core-helpers/-/web3-core-helpers-1.10.0.tgz", + "integrity": "sha512-pIxAzFDS5vnbXvfvLSpaA1tfRykAe9adw43YCKsEYQwH0gCLL0kMLkaCX3q+Q8EVmAh+e1jWL/nl9U0de1+++g==", + "dev": true, "requires": { - "errno": "~0.1.1" + "web3-eth-iban": "1.10.0", + "web3-utils": "1.10.0" } }, - "level-iterator-stream": { - "version": "2.0.3", + "web3-core-method": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/web3-core-method/-/web3-core-method-1.10.0.tgz", + "integrity": "sha512-4R700jTLAMKDMhQ+nsVfIXvH6IGJlJzGisIfMKWAIswH31h5AZz7uDUW2YctI+HrYd+5uOAlS4OJeeT9bIpvkA==", + "dev": true, "requires": { - "inherits": "^2.0.1", - "readable-stream": "^2.0.5", - "xtend": "^4.0.0" + "@ethersproject/transactions": "^5.6.2", + "web3-core-helpers": "1.10.0", + "web3-core-promievent": "1.10.0", + "web3-core-subscriptions": "1.10.0", + "web3-utils": "1.10.0" } }, - "level-mem": { - "version": "3.0.1", + "web3-core-promievent": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/web3-core-promievent/-/web3-core-promievent-1.10.0.tgz", + "integrity": "sha512-68N7k5LWL5R38xRaKFrTFT2pm2jBNFaM4GioS00YjAKXRQ3KjmhijOMG3TICz6Aa5+6GDWYelDNx21YAeZ4YTg==", + "dev": true, "requires": { - "level-packager": "~4.0.0", - "memdown": "~3.0.0" - }, - "dependencies": { - "abstract-leveldown": { - "version": "5.0.0", - "requires": { - "xtend": "~4.0.0" - } - }, - "ltgt": { - "version": "2.2.1" - }, - "memdown": { - "version": "3.0.0", - "requires": { - "abstract-leveldown": "~5.0.0", - "functional-red-black-tree": "~1.0.1", - "immediate": "~3.2.3", - "inherits": "~2.0.1", - "ltgt": "~2.2.0", - "safe-buffer": "~5.1.1" - } - }, - "safe-buffer": { - "version": "5.1.2" - } + "eventemitter3": "4.0.4" } }, - "level-packager": { - "version": "4.0.1", + "web3-core-requestmanager": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/web3-core-requestmanager/-/web3-core-requestmanager-1.10.0.tgz", + "integrity": "sha512-3z/JKE++Os62APml4dvBM+GAuId4h3L9ckUrj7ebEtS2AR0ixyQPbrBodgL91Sv7j7cQ3Y+hllaluqjguxvSaQ==", + "dev": true, "requires": { - "encoding-down": "~5.0.0", - "levelup": "^3.0.0" + "util": "^0.12.5", + "web3-core-helpers": "1.10.0", + "web3-providers-http": "1.10.0", + "web3-providers-ipc": "1.10.0", + "web3-providers-ws": "1.10.0" } }, - "level-post": { - "version": "1.0.7", + "web3-core-subscriptions": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/web3-core-subscriptions/-/web3-core-subscriptions-1.10.0.tgz", + "integrity": "sha512-HGm1PbDqsxejI075gxBc5OSkwymilRWZufIy9zEpnWKNmfbuv5FfHgW1/chtJP6aP3Uq2vHkvTDl3smQBb8l+g==", + "dev": true, "requires": { - "ltgt": "^2.1.2" + "eventemitter3": "4.0.4", + "web3-core-helpers": "1.10.0" } }, - "level-sublevel": { - "version": "6.6.4", + "web3-eth": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/web3-eth/-/web3-eth-1.10.0.tgz", + "integrity": "sha512-Z5vT6slNMLPKuwRyKGbqeGYC87OAy8bOblaqRTgg94CXcn/mmqU7iPIlG4506YdcdK3x6cfEDG7B6w+jRxypKA==", + "dev": true, "requires": { - "bytewise": "~1.1.0", - "level-codec": "^9.0.0", - "level-errors": "^2.0.0", - "level-iterator-stream": "^2.0.3", - "ltgt": "~2.1.1", - "pull-defer": "^0.2.2", - "pull-level": "^2.0.3", - "pull-stream": "^3.6.8", - "typewiselite": "~1.0.0", - "xtend": "~4.0.0" + "web3-core": "1.10.0", + "web3-core-helpers": "1.10.0", + "web3-core-method": "1.10.0", + "web3-core-subscriptions": "1.10.0", + "web3-eth-abi": "1.10.0", + "web3-eth-accounts": "1.10.0", + "web3-eth-contract": "1.10.0", + "web3-eth-ens": "1.10.0", + "web3-eth-iban": "1.10.0", + "web3-eth-personal": "1.10.0", + "web3-net": "1.10.0", + "web3-utils": "1.10.0" } }, - "level-ws": { - "version": "1.0.0", + "web3-eth-abi": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/web3-eth-abi/-/web3-eth-abi-1.10.0.tgz", + "integrity": "sha512-cwS+qRBWpJ43aI9L3JS88QYPfFcSJJ3XapxOQ4j40v6mk7ATpA8CVK1vGTzpihNlOfMVRBkR95oAj7oL6aiDOg==", + "dev": true, "requires": { - "inherits": "^2.0.3", - "readable-stream": "^2.2.8", - "xtend": "^4.0.1" + "@ethersproject/abi": "^5.6.3", + "web3-utils": "1.10.0" } }, - "levelup": { - "version": "3.1.1", + "web3-eth-accounts": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/web3-eth-accounts/-/web3-eth-accounts-1.10.0.tgz", + "integrity": "sha512-wiq39Uc3mOI8rw24wE2n15hboLE0E9BsQLdlmsL4Zua9diDS6B5abXG0XhFcoNsXIGMWXVZz4TOq3u4EdpXF/Q==", + "dev": true, "requires": { - "deferred-leveldown": "~4.0.0", - "level-errors": "~2.0.0", - "level-iterator-stream": "~3.0.0", - "xtend": "~4.0.0" + "@ethereumjs/common": "2.5.0", + "@ethereumjs/tx": "3.3.2", + "eth-lib": "0.2.8", + "ethereumjs-util": "^7.1.5", + "scrypt-js": "^3.0.1", + "uuid": "^9.0.0", + "web3-core": "1.10.0", + "web3-core-helpers": "1.10.0", + "web3-core-method": "1.10.0", + "web3-utils": "1.10.0" }, "dependencies": { - "level-iterator-stream": { + "scrypt-js": { "version": "3.0.1", - "requires": { - "inherits": "^2.0.1", - "readable-stream": "^2.3.6", - "xtend": "^4.0.0" - } + "resolved": "https://registry.npmjs.org/scrypt-js/-/scrypt-js-3.0.1.tgz", + "integrity": "sha512-cdwTTnqPu0Hyvf5in5asVdZocVDTNRmR7XEcJuIzMjJeSHybHl7vpB66AzwTaIg6CLSbtjcxc8fqcySfnTkccA==", + "dev": true + }, + "uuid": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.1.tgz", + "integrity": "sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==", + "dev": true } } }, - "lodash": { - "version": "4.17.20" - }, - "looper": { - "version": "2.0.0" - }, - "loose-envify": { - "version": "1.4.0", + "web3-eth-contract": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/web3-eth-contract/-/web3-eth-contract-1.10.0.tgz", + "integrity": "sha512-MIC5FOzP/+2evDksQQ/dpcXhSqa/2hFNytdl/x61IeWxhh6vlFeSjq0YVTAyIzdjwnL7nEmZpjfI6y6/Ufhy7w==", + "dev": true, "requires": { - "js-tokens": "^3.0.0 || ^4.0.0" + "@types/bn.js": "^5.1.1", + "web3-core": "1.10.0", + "web3-core-helpers": "1.10.0", + "web3-core-method": "1.10.0", + "web3-core-promievent": "1.10.0", + "web3-core-subscriptions": "1.10.0", + "web3-eth-abi": "1.10.0", + "web3-utils": "1.10.0" } }, - "lowercase-keys": { - "version": "1.0.1", - "optional": true - }, - "lru-cache": { - "version": "5.1.1", + "web3-eth-ens": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/web3-eth-ens/-/web3-eth-ens-1.10.0.tgz", + "integrity": "sha512-3hpGgzX3qjgxNAmqdrC2YUQMTfnZbs4GeLEmy8aCWziVwogbuqQZ+Gzdfrym45eOZodk+lmXyLuAdqkNlvkc1g==", + "dev": true, "requires": { - "yallist": "^3.0.2" + "content-hash": "^2.5.2", + "eth-ens-namehash": "2.0.8", + "web3-core": "1.10.0", + "web3-core-helpers": "1.10.0", + "web3-core-promievent": "1.10.0", + "web3-eth-abi": "1.10.0", + "web3-eth-contract": "1.10.0", + "web3-utils": "1.10.0" } }, - "ltgt": { - "version": "2.1.3" - }, - "map-cache": { - "version": "0.2.2" - }, - "map-visit": { - "version": "1.0.0", + "web3-eth-iban": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/web3-eth-iban/-/web3-eth-iban-1.10.0.tgz", + "integrity": "sha512-0l+SP3IGhInw7Q20LY3IVafYEuufo4Dn75jAHT7c2aDJsIolvf2Lc6ugHkBajlwUneGfbRQs/ccYPQ9JeMUbrg==", + "dev": true, "requires": { - "object-visit": "^1.0.0" + "bn.js": "^5.2.1", + "web3-utils": "1.10.0" } }, - "md5.js": { - "version": "1.3.5", + "web3-eth-personal": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/web3-eth-personal/-/web3-eth-personal-1.10.0.tgz", + "integrity": "sha512-anseKn98w/d703eWq52uNuZi7GhQeVjTC5/svrBWEKob0WZ5kPdo+EZoFN0sp5a5ubbrk/E0xSl1/M5yORMtpg==", + "dev": true, "requires": { - "hash-base": "^3.0.0", - "inherits": "^2.0.1", - "safe-buffer": "^5.1.2" + "@types/node": "^12.12.6", + "web3-core": "1.10.0", + "web3-core-helpers": "1.10.0", + "web3-core-method": "1.10.0", + "web3-net": "1.10.0", + "web3-utils": "1.10.0" } }, - "media-typer": { - "version": "0.3.0", - "optional": true - }, - "merge-descriptors": { - "version": "1.0.1", - "optional": true - }, - "merkle-patricia-tree": { - "version": "3.0.0", + "web3-net": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/web3-net/-/web3-net-1.10.0.tgz", + "integrity": "sha512-NLH/N3IshYWASpxk4/18Ge6n60GEvWBVeM8inx2dmZJVmRI6SJIlUxbL8jySgiTn3MMZlhbdvrGo8fpUW7a1GA==", + "dev": true, "requires": { - "async": "^2.6.1", - "ethereumjs-util": "^5.2.0", - "level-mem": "^3.0.1", - "level-ws": "^1.0.0", - "readable-stream": "^3.0.6", - "rlp": "^2.0.0", - "semaphore": ">=1.0.1" - }, - "dependencies": { - "ethereumjs-util": { - "version": "5.2.1", - "requires": { - "bn.js": "^4.11.0", - "create-hash": "^1.1.2", - "elliptic": "^6.5.2", - "ethereum-cryptography": "^0.1.3", - "ethjs-util": "^0.1.3", - "rlp": "^2.0.0", - "safe-buffer": "^5.1.1" - } - }, - "readable-stream": { - "version": "3.6.0", - "requires": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - } - } + "web3-core": "1.10.0", + "web3-core-method": "1.10.0", + "web3-utils": "1.10.0" } }, - "methods": { - "version": "1.1.2", - "optional": true - }, - "miller-rabin": { - "version": "4.0.1", + "web3-providers-http": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/web3-providers-http/-/web3-providers-http-1.10.0.tgz", + "integrity": "sha512-eNr965YB8a9mLiNrkjAWNAPXgmQWfpBfkkn7tpEFlghfww0u3I0tktMZiaToJVcL2+Xq+81cxbkpeWJ5XQDwOA==", + "dev": true, "requires": { - "bn.js": "^4.0.0", - "brorand": "^1.0.1" + "abortcontroller-polyfill": "^1.7.3", + "cross-fetch": "^3.1.4", + "es6-promise": "^4.2.8", + "web3-core-helpers": "1.10.0" } }, - "mime": { - "version": "1.6.0", - "optional": true - }, - "mime-db": { - "version": "1.45.0" - }, - "mime-types": { - "version": "2.1.28", + "web3-providers-ipc": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/web3-providers-ipc/-/web3-providers-ipc-1.10.0.tgz", + "integrity": "sha512-OfXG1aWN8L1OUqppshzq8YISkWrYHaATW9H8eh0p89TlWMc1KZOL9vttBuaBEi96D/n0eYDn2trzt22bqHWfXA==", + "dev": true, "requires": { - "mime-db": "1.45.0" + "oboe": "2.1.5", + "web3-core-helpers": "1.10.0" } }, - "mimic-response": { - "version": "1.0.1", - "optional": true - }, - "min-document": { - "version": "2.19.0", + "web3-providers-ws": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/web3-providers-ws/-/web3-providers-ws-1.10.0.tgz", + "integrity": "sha512-sK0fNcglW36yD5xjnjtSGBnEtf59cbw4vZzJ+CmOWIKGIR96mP5l684g0WD0Eo+f4NQc2anWWXG74lRc9OVMCQ==", + "dev": true, "requires": { - "dom-walk": "^0.1.0" + "eventemitter3": "4.0.4", + "web3-core-helpers": "1.10.0", + "websocket": "^1.0.32" } }, - "minimalistic-assert": { - "version": "1.0.1" - }, - "minimalistic-crypto-utils": { - "version": "1.0.1" - }, - "minimatch": { - "version": "3.0.4", + "web3-shh": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/web3-shh/-/web3-shh-1.10.0.tgz", + "integrity": "sha512-uNUUuNsO2AjX41GJARV9zJibs11eq6HtOe6Wr0FtRUcj8SN6nHeYIzwstAvJ4fXA53gRqFMTxdntHEt9aXVjpg==", + "dev": true, "requires": { - "brace-expansion": "^1.1.7" + "web3-core": "1.10.0", + "web3-core-method": "1.10.0", + "web3-core-subscriptions": "1.10.0", + "web3-net": "1.10.0" } }, - "minimist": { - "version": "1.2.5" - }, - "minizlib": { - "version": "1.3.3", - "optional": true, + "web3-utils": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/web3-utils/-/web3-utils-1.10.0.tgz", + "integrity": "sha512-kSaCM0uMcZTNUSmn5vMEhlo02RObGNRRCkdX0V9UTAU0+lrvn0HSaudyCo6CQzuXUsnuY2ERJGCGPfeWmv19Rg==", + "dev": true, "requires": { - "minipass": "^2.9.0" - }, - "dependencies": { - "minipass": { - "version": "2.9.0", - "optional": true, - "requires": { - "safe-buffer": "^5.1.2", - "yallist": "^3.0.0" - } - } + "bn.js": "^5.2.1", + "ethereum-bloom-filters": "^1.0.6", + "ethereumjs-util": "^7.1.0", + "ethjs-unit": "0.1.6", + "number-to-bn": "1.7.0", + "randombytes": "^2.1.0", + "utf8": "3.0.0" } - }, - "mixin-deep": { - "version": "1.3.2", + } + } + }, + "@truffle/contract-schema": { + "version": "3.4.16", + "resolved": "https://registry.npmjs.org/@truffle/contract-schema/-/contract-schema-3.4.16.tgz", + "integrity": "sha512-g0WNYR/J327DqtJPI70ubS19K1Fth/1wxt2jFqLsPmz5cGZVjCwuhiie+LfBde4/Mc9QR8G+L3wtmT5cyoBxAg==", + "requires": { + "ajv": "^6.10.0", + "debug": "^4.3.1" + } + }, + "@truffle/debug-utils": { + "version": "6.0.57", + "resolved": "https://registry.npmjs.org/@truffle/debug-utils/-/debug-utils-6.0.57.tgz", + "integrity": "sha512-Q6oI7zLaeNLB69ixjwZk2UZEWBY6b2OD1sjLMGDKBGR7GaHYiw96GLR2PFgPH1uwEeLmV4N78LYaQCrDsHbNeA==", + "requires": { + "@truffle/codec": "^0.17.3", + "@trufflesuite/chromafi": "^3.0.0", + "bn.js": "^5.1.3", + "chalk": "^2.4.2", + "debug": "^4.3.1", + "highlightjs-solidity": "^2.0.6" + }, + "dependencies": { + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", "requires": { - "for-in": "^1.0.2", - "is-extendable": "^1.0.1" + "color-convert": "^1.9.0" } }, - "mkdirp": { - "version": "0.5.5", + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", "requires": { - "minimist": "^1.2.5" + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" } }, - "mkdirp-promise": { - "version": "5.0.1", - "optional": true, + "color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", "requires": { - "mkdirp": "*" + "color-name": "1.1.3" } }, - "mock-fs": { - "version": "4.13.0", - "optional": true + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==" }, - "ms": { - "version": "2.1.3" + "escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==" }, - "multibase": { - "version": "0.6.1", - "optional": true, - "requires": { - "base-x": "^3.0.8", - "buffer": "^5.5.0" - } + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==" }, - "multicodec": { - "version": "0.5.7", - "optional": true, + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", "requires": { - "varint": "^5.0.0" + "has-flag": "^3.0.0" } - }, - "multihashes": { - "version": "0.4.21", - "optional": true, + } + } + }, + "@truffle/error": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/@truffle/error/-/error-0.1.1.tgz", + "integrity": "sha512-sE7c9IHIGdbK4YayH4BC8i8qMjoAOeg6nUXUDZZp8wlU21/EMpaG+CLx+KqcIPyR+GSWIW3Dm0PXkr2nlggFDA==" + }, + "@truffle/interface-adapter": { + "version": "0.5.37", + "resolved": "https://registry.npmjs.org/@truffle/interface-adapter/-/interface-adapter-0.5.37.tgz", + "integrity": "sha512-lPH9MDgU+7sNDlJSClwyOwPCfuOimqsCx0HfGkznL3mcFRymc1pukAR1k17zn7ErHqBwJjiKAZ6Ri72KkS+IWw==", + "requires": { + "bn.js": "^5.1.3", + "ethers": "^4.0.32", + "web3": "1.10.0" + }, + "dependencies": { + "@ethereumjs/common": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/@ethereumjs/common/-/common-2.5.0.tgz", + "integrity": "sha512-DEHjW6e38o+JmB/NO3GZBpW4lpaiBpkFgXF6jLcJ6gETBYpEyaA5nTimsWBUJR3Vmtm/didUEbNjajskugZORg==", "requires": { - "buffer": "^5.5.0", - "multibase": "^0.7.0", - "varint": "^5.0.0" - }, - "dependencies": { - "multibase": { - "version": "0.7.0", - "optional": true, - "requires": { - "base-x": "^3.0.8", - "buffer": "^5.5.0" - } - } + "crc-32": "^1.2.0", + "ethereumjs-util": "^7.1.1" } }, - "nano-json-stream-parser": { - "version": "0.1.2", - "optional": true - }, - "nanomatch": { - "version": "1.2.13", + "@ethereumjs/tx": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/@ethereumjs/tx/-/tx-3.3.2.tgz", + "integrity": "sha512-6AaJhwg4ucmwTvw/1qLaZUX5miWrwZ4nLOUsKyb/HtzS3BMw/CasKhdi1ims9mBKeK9sOJCH4qGKOBGyJCeeog==", "requires": { - "arr-diff": "^4.0.0", - "array-unique": "^0.3.2", - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "fragment-cache": "^0.2.1", - "is-windows": "^1.0.2", - "kind-of": "^6.0.2", - "object.pick": "^1.3.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" + "@ethereumjs/common": "^2.5.0", + "ethereumjs-util": "^7.1.2" } }, - "negotiator": { - "version": "0.6.2", - "optional": true - }, - "next-tick": { - "version": "1.0.0" - }, - "nice-try": { - "version": "1.0.5" - }, - "node-addon-api": { - "version": "2.0.2", - "bundled": true - }, - "node-fetch": { - "version": "2.1.2" + "@types/node": { + "version": "12.20.55", + "resolved": "https://registry.npmjs.org/@types/node/-/node-12.20.55.tgz", + "integrity": "sha512-J8xLz7q2OFulZ2cyGTLE1TbbZcjpno7FaN6zdJNrgAdrJ+DZzh/uFR6YrTb4C+nXakvud8Q4+rbhoIWlYQbUFQ==" }, - "node-gyp-build": { - "version": "4.2.3", - "bundled": true + "aes-js": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/aes-js/-/aes-js-3.0.0.tgz", + "integrity": "sha512-H7wUZRn8WpTq9jocdxQ2c8x2sKo9ZVmzfRE13GiNJXfp7NcKYEdvl3vspKjXox6RIG2VtaRe4JFvxG4rqp2Zuw==" }, - "normalize-url": { - "version": "4.5.0", - "optional": true + "cross-fetch": { + "version": "3.1.8", + "resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-3.1.8.tgz", + "integrity": "sha512-cvA+JwZoU0Xq+h6WkMvAUqPEYy92Obet6UdKLfW60qn99ftItKjB5T+BkyWOFWe2pUyfQ+IJHmpOTznqk1M6Kg==", + "requires": { + "node-fetch": "^2.6.12" + } }, - "number-to-bn": { - "version": "1.7.0", - "optional": true, + "eth-lib": { + "version": "0.2.8", + "resolved": "https://registry.npmjs.org/eth-lib/-/eth-lib-0.2.8.tgz", + "integrity": "sha512-ArJ7x1WcWOlSpzdoTBX8vkwlkSQ85CjjifSZtV4co64vWxSV8geWfPI9x4SVYu3DSxnX4yWFVTtGL+j9DUFLNw==", "requires": { - "bn.js": "4.11.6", - "strip-hex-prefix": "1.0.0" + "bn.js": "^4.11.6", + "elliptic": "^6.4.0", + "xhr-request-promise": "^0.1.2" }, "dependencies": { "bn.js": { - "version": "4.11.6", - "optional": true + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==" } } }, - "oauth-sign": { - "version": "0.9.0" - }, - "object-assign": { - "version": "4.1.1" - }, - "object-copy": { - "version": "0.1.0", + "ethers": { + "version": "4.0.49", + "resolved": "https://registry.npmjs.org/ethers/-/ethers-4.0.49.tgz", + "integrity": "sha512-kPltTvWiyu+OktYy1IStSO16i2e7cS9D9OxZ81q2UUaiNPVrm/RTcbxamCXF9VUSKzJIdJV68EAIhTEVBalRWg==", "requires": { - "copy-descriptor": "^0.1.0", - "define-property": "^0.2.5", - "kind-of": "^3.0.3" + "aes-js": "3.0.0", + "bn.js": "^4.11.9", + "elliptic": "6.5.4", + "hash.js": "1.1.3", + "js-sha3": "0.5.7", + "scrypt-js": "2.0.4", + "setimmediate": "1.0.4", + "uuid": "2.0.1", + "xmlhttprequest": "1.8.0" }, "dependencies": { - "define-property": { - "version": "0.2.5", - "requires": { - "is-descriptor": "^0.1.0" - } - }, - "is-accessor-descriptor": { - "version": "0.1.6", - "requires": { - "kind-of": "^3.0.2" - } - }, - "is-buffer": { - "version": "1.1.6" - }, - "is-data-descriptor": { - "version": "0.1.4", - "requires": { - "kind-of": "^3.0.2" - } - }, - "is-descriptor": { - "version": "0.1.6", - "requires": { - "is-accessor-descriptor": "^0.1.6", - "is-data-descriptor": "^0.1.4", - "kind-of": "^5.0.0" - }, - "dependencies": { - "kind-of": { - "version": "5.1.0" - } - } - }, - "kind-of": { - "version": "3.2.2", - "requires": { - "is-buffer": "^1.1.5" - } + "bn.js": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==" } } }, - "object-inspect": { - "version": "1.9.0" - }, - "object-is": { - "version": "1.1.4", + "hash.js": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.3.tgz", + "integrity": "sha512-/UETyP0W22QILqS+6HowevwhEFJ3MBJnwTf75Qob9Wz9t0DPuisL8kW8YZMK62dHAKE1c1p+gY1TtOLY+USEHA==", "requires": { - "call-bind": "^1.0.0", - "define-properties": "^1.1.3" + "inherits": "^2.0.3", + "minimalistic-assert": "^1.0.0" } }, - "object-keys": { - "version": "1.1.1" + "js-sha3": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/js-sha3/-/js-sha3-0.5.7.tgz", + "integrity": "sha512-GII20kjaPX0zJ8wzkTbNDYMY7msuZcTWk8S5UOh6806Jq/wz1J8/bnr8uGU0DAUmYDjj2Mr4X1cW8v/GLYnR+g==" + }, + "scrypt-js": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/scrypt-js/-/scrypt-js-2.0.4.tgz", + "integrity": "sha512-4KsaGcPnuhtCZQCxFxN3GVYIhKFPTdLd8PLC552XwbMndtD0cjRFAhDuuydXQ0h08ZfPgzqe6EKHozpuH74iDw==" }, - "object-visit": { - "version": "1.0.1", + "setimmediate": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.4.tgz", + "integrity": "sha512-/TjEmXQVEzdod/FFskf3o7oOAsGhHf2j1dZqRFbDzq4F3mvvxflIIi4Hd3bLQE9y/CpwqfSQam5JakI/mi3Pog==" + }, + "uuid": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-2.0.1.tgz", + "integrity": "sha512-nWg9+Oa3qD2CQzHIP4qKUqwNfzKn8P0LtFhotaCTFchsV7ZfDhAybeip/HZVeMIpZi9JgY1E3nUlwaCmZT1sEg==" + }, + "web3": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/web3/-/web3-1.10.0.tgz", + "integrity": "sha512-YfKY9wSkGcM8seO+daR89oVTcbu18NsVfvOngzqMYGUU0pPSQmE57qQDvQzUeoIOHAnXEBNzrhjQJmm8ER0rng==", + "requires": { + "web3-bzz": "1.10.0", + "web3-core": "1.10.0", + "web3-eth": "1.10.0", + "web3-eth-personal": "1.10.0", + "web3-net": "1.10.0", + "web3-shh": "1.10.0", + "web3-utils": "1.10.0" + } + }, + "web3-bzz": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/web3-bzz/-/web3-bzz-1.10.0.tgz", + "integrity": "sha512-o9IR59io3pDUsXTsps5pO5hW1D5zBmg46iNc2t4j2DkaYHNdDLwk2IP9ukoM2wg47QILfPEJYzhTfkS/CcX0KA==", "requires": { - "isobject": "^3.0.0" + "@types/node": "^12.12.6", + "got": "12.1.0", + "swarm-js": "^0.1.40" } }, - "object.assign": { - "version": "4.1.2", + "web3-core": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/web3-core/-/web3-core-1.10.0.tgz", + "integrity": "sha512-fWySwqy2hn3TL89w5TM8wXF1Z2Q6frQTKHWmP0ppRQorEK8NcHJRfeMiv/mQlSKoTS1F6n/nv2uyZsixFycjYQ==", "requires": { - "call-bind": "^1.0.0", - "define-properties": "^1.1.3", - "has-symbols": "^1.0.1", - "object-keys": "^1.1.1" + "@types/bn.js": "^5.1.1", + "@types/node": "^12.12.6", + "bignumber.js": "^9.0.0", + "web3-core-helpers": "1.10.0", + "web3-core-method": "1.10.0", + "web3-core-requestmanager": "1.10.0", + "web3-utils": "1.10.0" } }, - "object.getownpropertydescriptors": { - "version": "2.1.1", + "web3-core-helpers": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/web3-core-helpers/-/web3-core-helpers-1.10.0.tgz", + "integrity": "sha512-pIxAzFDS5vnbXvfvLSpaA1tfRykAe9adw43YCKsEYQwH0gCLL0kMLkaCX3q+Q8EVmAh+e1jWL/nl9U0de1+++g==", "requires": { - "call-bind": "^1.0.0", - "define-properties": "^1.1.3", - "es-abstract": "^1.18.0-next.1" + "web3-eth-iban": "1.10.0", + "web3-utils": "1.10.0" } }, - "object.pick": { - "version": "1.3.0", + "web3-core-method": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/web3-core-method/-/web3-core-method-1.10.0.tgz", + "integrity": "sha512-4R700jTLAMKDMhQ+nsVfIXvH6IGJlJzGisIfMKWAIswH31h5AZz7uDUW2YctI+HrYd+5uOAlS4OJeeT9bIpvkA==", "requires": { - "isobject": "^3.0.1" + "@ethersproject/transactions": "^5.6.2", + "web3-core-helpers": "1.10.0", + "web3-core-promievent": "1.10.0", + "web3-core-subscriptions": "1.10.0", + "web3-utils": "1.10.0" } }, - "oboe": { - "version": "2.1.4", - "optional": true, + "web3-core-promievent": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/web3-core-promievent/-/web3-core-promievent-1.10.0.tgz", + "integrity": "sha512-68N7k5LWL5R38xRaKFrTFT2pm2jBNFaM4GioS00YjAKXRQ3KjmhijOMG3TICz6Aa5+6GDWYelDNx21YAeZ4YTg==", "requires": { - "http-https": "^1.0.0" + "eventemitter3": "4.0.4" } }, - "on-finished": { - "version": "2.3.0", - "optional": true, + "web3-core-requestmanager": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/web3-core-requestmanager/-/web3-core-requestmanager-1.10.0.tgz", + "integrity": "sha512-3z/JKE++Os62APml4dvBM+GAuId4h3L9ckUrj7ebEtS2AR0ixyQPbrBodgL91Sv7j7cQ3Y+hllaluqjguxvSaQ==", "requires": { - "ee-first": "1.1.1" + "util": "^0.12.5", + "web3-core-helpers": "1.10.0", + "web3-providers-http": "1.10.0", + "web3-providers-ipc": "1.10.0", + "web3-providers-ws": "1.10.0" } }, - "once": { - "version": "1.4.0", + "web3-core-subscriptions": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/web3-core-subscriptions/-/web3-core-subscriptions-1.10.0.tgz", + "integrity": "sha512-HGm1PbDqsxejI075gxBc5OSkwymilRWZufIy9zEpnWKNmfbuv5FfHgW1/chtJP6aP3Uq2vHkvTDl3smQBb8l+g==", "requires": { - "wrappy": "1" + "eventemitter3": "4.0.4", + "web3-core-helpers": "1.10.0" } }, - "os-homedir": { - "version": "1.0.2" - }, - "os-tmpdir": { - "version": "1.0.2" - }, - "p-cancelable": { - "version": "1.1.0", - "optional": true - }, - "p-timeout": { - "version": "1.2.1", - "optional": true, - "requires": { - "p-finally": "^1.0.0" - }, - "dependencies": { - "p-finally": { - "version": "1.0.0", - "optional": true - } + "web3-eth": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/web3-eth/-/web3-eth-1.10.0.tgz", + "integrity": "sha512-Z5vT6slNMLPKuwRyKGbqeGYC87OAy8bOblaqRTgg94CXcn/mmqU7iPIlG4506YdcdK3x6cfEDG7B6w+jRxypKA==", + "requires": { + "web3-core": "1.10.0", + "web3-core-helpers": "1.10.0", + "web3-core-method": "1.10.0", + "web3-core-subscriptions": "1.10.0", + "web3-eth-abi": "1.10.0", + "web3-eth-accounts": "1.10.0", + "web3-eth-contract": "1.10.0", + "web3-eth-ens": "1.10.0", + "web3-eth-iban": "1.10.0", + "web3-eth-personal": "1.10.0", + "web3-net": "1.10.0", + "web3-utils": "1.10.0" } }, - "parse-asn1": { - "version": "5.1.6", - "optional": true, + "web3-eth-abi": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/web3-eth-abi/-/web3-eth-abi-1.10.0.tgz", + "integrity": "sha512-cwS+qRBWpJ43aI9L3JS88QYPfFcSJJ3XapxOQ4j40v6mk7ATpA8CVK1vGTzpihNlOfMVRBkR95oAj7oL6aiDOg==", "requires": { - "asn1.js": "^5.2.0", - "browserify-aes": "^1.0.0", - "evp_bytestokey": "^1.0.0", - "pbkdf2": "^3.0.3", - "safe-buffer": "^5.1.1" + "@ethersproject/abi": "^5.6.3", + "web3-utils": "1.10.0" } }, - "parse-headers": { - "version": "2.0.3" - }, - "parseurl": { - "version": "1.3.3", - "optional": true - }, - "pascalcase": { - "version": "0.1.1" - }, - "patch-package": { - "version": "6.2.2", - "requires": { - "@yarnpkg/lockfile": "^1.1.0", - "chalk": "^2.4.2", - "cross-spawn": "^6.0.5", - "find-yarn-workspace-root": "^1.2.1", - "fs-extra": "^7.0.1", - "is-ci": "^2.0.0", - "klaw-sync": "^6.0.0", - "minimist": "^1.2.0", - "rimraf": "^2.6.3", - "semver": "^5.6.0", - "slash": "^2.0.0", - "tmp": "^0.0.33" + "web3-eth-accounts": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/web3-eth-accounts/-/web3-eth-accounts-1.10.0.tgz", + "integrity": "sha512-wiq39Uc3mOI8rw24wE2n15hboLE0E9BsQLdlmsL4Zua9diDS6B5abXG0XhFcoNsXIGMWXVZz4TOq3u4EdpXF/Q==", + "requires": { + "@ethereumjs/common": "2.5.0", + "@ethereumjs/tx": "3.3.2", + "eth-lib": "0.2.8", + "ethereumjs-util": "^7.1.5", + "scrypt-js": "^3.0.1", + "uuid": "^9.0.0", + "web3-core": "1.10.0", + "web3-core-helpers": "1.10.0", + "web3-core-method": "1.10.0", + "web3-utils": "1.10.0" }, "dependencies": { - "cross-spawn": { - "version": "6.0.5", - "requires": { - "nice-try": "^1.0.4", - "path-key": "^2.0.1", - "semver": "^5.5.0", - "shebang-command": "^1.2.0", - "which": "^1.2.9" - } - }, - "path-key": { - "version": "2.0.1" - }, - "semver": { - "version": "5.7.1" - }, - "shebang-command": { - "version": "1.2.0", - "requires": { - "shebang-regex": "^1.0.0" - } - }, - "shebang-regex": { - "version": "1.0.0" - }, - "slash": { - "version": "2.0.0" - }, - "tmp": { - "version": "0.0.33", - "requires": { - "os-tmpdir": "~1.0.2" - } + "scrypt-js": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/scrypt-js/-/scrypt-js-3.0.1.tgz", + "integrity": "sha512-cdwTTnqPu0Hyvf5in5asVdZocVDTNRmR7XEcJuIzMjJeSHybHl7vpB66AzwTaIg6CLSbtjcxc8fqcySfnTkccA==" }, - "which": { - "version": "1.3.1", - "requires": { - "isexe": "^2.0.0" - } + "uuid": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.1.tgz", + "integrity": "sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==" } } }, - "path-is-absolute": { - "version": "1.0.1" - }, - "path-parse": { - "version": "1.0.6" + "web3-eth-contract": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/web3-eth-contract/-/web3-eth-contract-1.10.0.tgz", + "integrity": "sha512-MIC5FOzP/+2evDksQQ/dpcXhSqa/2hFNytdl/x61IeWxhh6vlFeSjq0YVTAyIzdjwnL7nEmZpjfI6y6/Ufhy7w==", + "requires": { + "@types/bn.js": "^5.1.1", + "web3-core": "1.10.0", + "web3-core-helpers": "1.10.0", + "web3-core-method": "1.10.0", + "web3-core-promievent": "1.10.0", + "web3-core-subscriptions": "1.10.0", + "web3-eth-abi": "1.10.0", + "web3-utils": "1.10.0" + } }, - "path-to-regexp": { - "version": "0.1.7", - "optional": true + "web3-eth-ens": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/web3-eth-ens/-/web3-eth-ens-1.10.0.tgz", + "integrity": "sha512-3hpGgzX3qjgxNAmqdrC2YUQMTfnZbs4GeLEmy8aCWziVwogbuqQZ+Gzdfrym45eOZodk+lmXyLuAdqkNlvkc1g==", + "requires": { + "content-hash": "^2.5.2", + "eth-ens-namehash": "2.0.8", + "web3-core": "1.10.0", + "web3-core-helpers": "1.10.0", + "web3-core-promievent": "1.10.0", + "web3-eth-abi": "1.10.0", + "web3-eth-contract": "1.10.0", + "web3-utils": "1.10.0" + } }, - "pbkdf2": { - "version": "3.1.1", + "web3-eth-iban": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/web3-eth-iban/-/web3-eth-iban-1.10.0.tgz", + "integrity": "sha512-0l+SP3IGhInw7Q20LY3IVafYEuufo4Dn75jAHT7c2aDJsIolvf2Lc6ugHkBajlwUneGfbRQs/ccYPQ9JeMUbrg==", "requires": { - "create-hash": "^1.1.2", - "create-hmac": "^1.1.4", - "ripemd160": "^2.0.1", - "safe-buffer": "^5.0.1", - "sha.js": "^2.4.8" + "bn.js": "^5.2.1", + "web3-utils": "1.10.0" } }, - "performance-now": { - "version": "2.1.0" + "web3-eth-personal": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/web3-eth-personal/-/web3-eth-personal-1.10.0.tgz", + "integrity": "sha512-anseKn98w/d703eWq52uNuZi7GhQeVjTC5/svrBWEKob0WZ5kPdo+EZoFN0sp5a5ubbrk/E0xSl1/M5yORMtpg==", + "requires": { + "@types/node": "^12.12.6", + "web3-core": "1.10.0", + "web3-core-helpers": "1.10.0", + "web3-core-method": "1.10.0", + "web3-net": "1.10.0", + "web3-utils": "1.10.0" + } }, - "posix-character-classes": { - "version": "0.1.1" + "web3-net": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/web3-net/-/web3-net-1.10.0.tgz", + "integrity": "sha512-NLH/N3IshYWASpxk4/18Ge6n60GEvWBVeM8inx2dmZJVmRI6SJIlUxbL8jySgiTn3MMZlhbdvrGo8fpUW7a1GA==", + "requires": { + "web3-core": "1.10.0", + "web3-core-method": "1.10.0", + "web3-utils": "1.10.0" + } }, - "precond": { - "version": "0.2.3" + "web3-providers-http": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/web3-providers-http/-/web3-providers-http-1.10.0.tgz", + "integrity": "sha512-eNr965YB8a9mLiNrkjAWNAPXgmQWfpBfkkn7tpEFlghfww0u3I0tktMZiaToJVcL2+Xq+81cxbkpeWJ5XQDwOA==", + "requires": { + "abortcontroller-polyfill": "^1.7.3", + "cross-fetch": "^3.1.4", + "es6-promise": "^4.2.8", + "web3-core-helpers": "1.10.0" + } }, - "prepend-http": { - "version": "2.0.0", - "optional": true + "web3-providers-ipc": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/web3-providers-ipc/-/web3-providers-ipc-1.10.0.tgz", + "integrity": "sha512-OfXG1aWN8L1OUqppshzq8YISkWrYHaATW9H8eh0p89TlWMc1KZOL9vttBuaBEi96D/n0eYDn2trzt22bqHWfXA==", + "requires": { + "oboe": "2.1.5", + "web3-core-helpers": "1.10.0" + } }, - "private": { - "version": "0.1.8" + "web3-providers-ws": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/web3-providers-ws/-/web3-providers-ws-1.10.0.tgz", + "integrity": "sha512-sK0fNcglW36yD5xjnjtSGBnEtf59cbw4vZzJ+CmOWIKGIR96mP5l684g0WD0Eo+f4NQc2anWWXG74lRc9OVMCQ==", + "requires": { + "eventemitter3": "4.0.4", + "web3-core-helpers": "1.10.0", + "websocket": "^1.0.32" + } }, - "process": { - "version": "0.11.10" + "web3-shh": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/web3-shh/-/web3-shh-1.10.0.tgz", + "integrity": "sha512-uNUUuNsO2AjX41GJARV9zJibs11eq6HtOe6Wr0FtRUcj8SN6nHeYIzwstAvJ4fXA53gRqFMTxdntHEt9aXVjpg==", + "requires": { + "web3-core": "1.10.0", + "web3-core-method": "1.10.0", + "web3-core-subscriptions": "1.10.0", + "web3-net": "1.10.0" + } }, - "process-nextick-args": { - "version": "2.0.1" + "web3-utils": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/web3-utils/-/web3-utils-1.10.0.tgz", + "integrity": "sha512-kSaCM0uMcZTNUSmn5vMEhlo02RObGNRRCkdX0V9UTAU0+lrvn0HSaudyCo6CQzuXUsnuY2ERJGCGPfeWmv19Rg==", + "requires": { + "bn.js": "^5.2.1", + "ethereum-bloom-filters": "^1.0.6", + "ethereumjs-util": "^7.1.0", + "ethjs-unit": "0.1.6", + "number-to-bn": "1.7.0", + "randombytes": "^2.1.0", + "utf8": "3.0.0" + } + } + } + }, + "@trufflesuite/chromafi": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@trufflesuite/chromafi/-/chromafi-3.0.0.tgz", + "integrity": "sha512-oqWcOqn8nT1bwlPPfidfzS55vqcIDdpfzo3HbU9EnUmcSTX+I8z0UyUFI3tZQjByVJulbzxHxUGS3ZJPwK/GPQ==", + "requires": { + "camelcase": "^4.1.0", + "chalk": "^2.3.2", + "cheerio": "^1.0.0-rc.2", + "detect-indent": "^5.0.0", + "highlight.js": "^10.4.1", + "lodash.merge": "^4.6.2", + "strip-ansi": "^4.0.0", + "strip-indent": "^2.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "requires": { + "color-convert": "^1.9.0" + } }, - "promise-to-callback": { - "version": "1.0.0", + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", "requires": { - "is-fn": "^1.0.0", - "set-immediate-shim": "^1.0.1" + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" } }, - "proxy-addr": { - "version": "2.0.6", - "optional": true, + "color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", "requires": { - "forwarded": "~0.1.2", - "ipaddr.js": "1.9.1" + "color-name": "1.1.3" } }, - "prr": { - "version": "1.0.1" + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==" }, - "pseudomap": { - "version": "1.0.2" + "escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==" }, - "psl": { - "version": "1.8.0" + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==" }, - "public-encrypt": { - "version": "4.0.3", - "optional": true, + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", "requires": { - "bn.js": "^4.1.0", - "browserify-rsa": "^4.0.0", - "create-hash": "^1.1.0", - "parse-asn1": "^5.0.0", - "randombytes": "^2.0.1", - "safe-buffer": "^5.1.2" + "has-flag": "^3.0.0" } + } + } + }, + "@types/abstract-leveldown": { + "version": "7.2.5", + "resolved": "https://registry.npmjs.org/@types/abstract-leveldown/-/abstract-leveldown-7.2.5.tgz", + "integrity": "sha512-/2B0nQF4UdupuxeKTJA2+Rj1D+uDemo6P4kMwKCpbfpnzeVaWSELTsAw4Lxn3VJD6APtRrZOCuYo+4nHUQfTfg==" + }, + "@types/bignumber.js": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/@types/bignumber.js/-/bignumber.js-5.0.0.tgz", + "integrity": "sha512-0DH7aPGCClywOFaxxjE6UwpN2kQYe9LwuDQMv+zYA97j5GkOMo8e66LYT+a8JYU7jfmUFRZLa9KycxHDsKXJCA==", + "requires": { + "bignumber.js": "*" + } + }, + "@types/bn.js": { + "version": "5.1.5", + "resolved": "https://registry.npmjs.org/@types/bn.js/-/bn.js-5.1.5.tgz", + "integrity": "sha512-V46N0zwKRF5Q00AZ6hWtN0T8gGmDUaUzLWQvHFo5yThtVwK/VCenFY3wXVbOvNfajEpsTfQM4IN9k/d6gUVX3A==", + "requires": { + "@types/node": "*" + } + }, + "@types/body-parser": { + "version": "1.19.5", + "resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.5.tgz", + "integrity": "sha512-fB3Zu92ucau0iQ0JMCFQE7b/dv8Ot07NI3KaZIkIUNXq82k4eBAqUaneXfleGY9JWskeS9y+u0nXMyspcuQrCg==", + "requires": { + "@types/connect": "*", + "@types/node": "*" + } + }, + "@types/cacheable-request": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/@types/cacheable-request/-/cacheable-request-6.0.3.tgz", + "integrity": "sha512-IQ3EbTzGxIigb1I3qPZc1rWJnH0BmSKv5QYTalEwweFvyBDLSAe24zP0le/hyi7ecGfZVlIVAg4BZqb8WBwKqw==", + "requires": { + "@types/http-cache-semantics": "*", + "@types/keyv": "^3.1.4", + "@types/node": "*", + "@types/responselike": "^1.0.0" + } + }, + "@types/chai": { + "version": "4.3.11", + "resolved": "https://registry.npmjs.org/@types/chai/-/chai-4.3.11.tgz", + "integrity": "sha512-qQR1dr2rGIHYlJulmr8Ioq3De0Le9E4MJ5AiaeAETJJpndT1uUNHsGFK3L/UIu+rbkQSdj8J/w2bCsBZc/Y5fQ==" + }, + "@types/concat-stream": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/@types/concat-stream/-/concat-stream-1.6.1.tgz", + "integrity": "sha512-eHE4cQPoj6ngxBZMvVf6Hw7Mh4jMW4U9lpGmS5GBPB9RYxlFg+CHaVN7ErNY4W9XfLIEn20b4VDYaIrbq0q4uA==", + "requires": { + "@types/node": "*" + } + }, + "@types/connect": { + "version": "3.4.38", + "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.38.tgz", + "integrity": "sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug==", + "requires": { + "@types/node": "*" + } + }, + "@types/express": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.21.tgz", + "integrity": "sha512-ejlPM315qwLpaQlQDTjPdsUFSc6ZsP4AN6AlWnogPjQ7CVi7PYF3YVz+CY3jE2pwYf7E/7HlDAN0rV2GxTG0HQ==", + "requires": { + "@types/body-parser": "*", + "@types/express-serve-static-core": "^4.17.33", + "@types/qs": "*", + "@types/serve-static": "*" + } + }, + "@types/express-serve-static-core": { + "version": "4.17.41", + "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.17.41.tgz", + "integrity": "sha512-OaJ7XLaelTgrvlZD8/aa0vvvxZdUmlCn6MtWeB7TkiKW70BQLc9XEPpDLPdbo52ZhXUCrznlWdCHWxJWtdyajA==", + "requires": { + "@types/node": "*", + "@types/qs": "*", + "@types/range-parser": "*", + "@types/send": "*" + } + }, + "@types/form-data": { + "version": "0.0.33", + "resolved": "https://registry.npmjs.org/@types/form-data/-/form-data-0.0.33.tgz", + "integrity": "sha512-8BSvG1kGm83cyJITQMZSulnl6QV8jqAGreJsc5tPu1Jq0vTSOiY/k24Wx82JRpWwZSqrala6sd5rWi6aNXvqcw==", + "requires": { + "@types/node": "*" + } + }, + "@types/glob": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/@types/glob/-/glob-8.1.0.tgz", + "integrity": "sha512-IO+MJPVhoqz+28h1qLAcBEH2+xHMK6MTyHJc7MTnnYb6wsoLR29POVGJ7LycmVXIqyy/4/2ShP5sUwTXuOwb/w==", + "requires": { + "@types/minimatch": "^5.1.2", + "@types/node": "*" + } + }, + "@types/http-cache-semantics": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/@types/http-cache-semantics/-/http-cache-semantics-4.0.4.tgz", + "integrity": "sha512-1m0bIFVc7eJWyve9S0RnuRgcQqF/Xd5QsUZAZeQFr1Q3/p9JWoQQEqmVy+DPTNpGXwhgIetAoYF8JSc33q29QA==" + }, + "@types/http-errors": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@types/http-errors/-/http-errors-2.0.4.tgz", + "integrity": "sha512-D0CFMMtydbJAegzOyHjtiKPLlvnm3iTZyZRSZoLq2mRhDdmLfIWOCYPfQJ4cu2erKghU++QvjcUjp/5h7hESpA==" + }, + "@types/keyv": { + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/@types/keyv/-/keyv-3.1.4.tgz", + "integrity": "sha512-BQ5aZNSCpj7D6K2ksrRCTmKRLEpnPvWDiLPfoGyhZ++8YtiK9d/3DBKPJgry359X/P1PfruyYwvnvwFjuEiEIg==", + "requires": { + "@types/node": "*" + } + }, + "@types/level-errors": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@types/level-errors/-/level-errors-3.0.2.tgz", + "integrity": "sha512-gyZHbcQ2X5hNXf/9KS2qGEmgDe9EN2WDM3rJ5Ele467C0nA1sLhtmv1bZiPMDYfAYCfPWft0uQIaTvXbASSTRA==" + }, + "@types/levelup": { + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/@types/levelup/-/levelup-4.3.3.tgz", + "integrity": "sha512-K+OTIjJcZHVlZQN1HmU64VtrC0jC3dXWQozuEIR9zVvltIk90zaGPM2AgT+fIkChpzHhFE3YnvFLCbLtzAmexA==", + "requires": { + "@types/abstract-leveldown": "*", + "@types/level-errors": "*", + "@types/node": "*" + } + }, + "@types/lru-cache": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/@types/lru-cache/-/lru-cache-5.1.1.tgz", + "integrity": "sha512-ssE3Vlrys7sdIzs5LOxCzTVMsU7i9oa/IaW92wF32JFb3CVczqOkru2xspuKczHEbG3nvmPY7IFqVmGGHdNbYw==" + }, + "@types/mime": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/@types/mime/-/mime-1.3.5.tgz", + "integrity": "sha512-/pyBZWSLD2n0dcHE3hq8s8ZvcETHtEuF+3E7XVt0Ig2nvsVQXdghHVcEkIWjy9A0wKfTn97a/PSDYohKIlnP/w==" + }, + "@types/minimatch": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-5.1.2.tgz", + "integrity": "sha512-K0VQKziLUWkVKiRVrx4a40iPaxTUefQmjtkQofBkYRcoaaL/8rhwDWww9qWbrgicNOgnpIsMxyNIUM4+n6dUIA==" + }, + "@types/node": { + "version": "20.10.8", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.10.8.tgz", + "integrity": "sha512-f8nQs3cLxbAFc00vEU59yf9UyGUftkPaLGfvbVOIDdx2i1b8epBqj2aNGyP19fiyXWvlmZ7qC1XLjAzw/OKIeA==", + "requires": { + "undici-types": "~5.26.4" + } + }, + "@types/pbkdf2": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/@types/pbkdf2/-/pbkdf2-3.1.2.tgz", + "integrity": "sha512-uRwJqmiXmh9++aSu1VNEn3iIxWOhd8AHXNSdlaLfdAAdSTY9jYVeGWnzejM3dvrkbqE3/hyQkQQ29IFATEGlew==", + "requires": { + "@types/node": "*" + } + }, + "@types/qs": { + "version": "6.9.11", + "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.11.tgz", + "integrity": "sha512-oGk0gmhnEJK4Yyk+oI7EfXsLayXatCWPHary1MtcmbAifkobT9cM9yutG/hZKIseOU0MqbIwQ/u2nn/Gb+ltuQ==" + }, + "@types/range-parser": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.7.tgz", + "integrity": "sha512-hKormJbkJqzQGhziax5PItDUTMAM9uE2XXQmM37dyd4hVM+5aVl7oVxMVUiVQn2oCQFN/LKCZdvSM0pFRqbSmQ==" + }, + "@types/readable-stream": { + "version": "2.3.15", + "resolved": "https://registry.npmjs.org/@types/readable-stream/-/readable-stream-2.3.15.tgz", + "integrity": "sha512-oM5JSKQCcICF1wvGgmecmHldZ48OZamtMxcGGVICOJA8o8cahXC1zEVAif8iwoc5j8etxFaRFnf095+CDsuoFQ==", + "requires": { + "@types/node": "*", + "safe-buffer": "~5.1.1" + }, + "dependencies": { + "safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + } + } + }, + "@types/responselike": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@types/responselike/-/responselike-1.0.3.tgz", + "integrity": "sha512-H/+L+UkTV33uf49PH5pCAUBVPNj2nDBXTN+qS1dOwyyg24l3CcicicCA7ca+HMvJBZcFgl5r8e+RR6elsb4Lyw==", + "requires": { + "@types/node": "*" + } + }, + "@types/secp256k1": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/@types/secp256k1/-/secp256k1-4.0.6.tgz", + "integrity": "sha512-hHxJU6PAEUn0TP4S/ZOzuTUvJWuZ6eIKeNKb5RBpODvSl6hp1Wrw4s7ATY50rklRCScUDpHzVA/DQdSjJ3UoYQ==", + "requires": { + "@types/node": "*" + } + }, + "@types/send": { + "version": "0.17.4", + "resolved": "https://registry.npmjs.org/@types/send/-/send-0.17.4.tgz", + "integrity": "sha512-x2EM6TJOybec7c52BX0ZspPodMsQUd5L6PRwOunVyVUhXiBSKf3AezDL8Dgvgt5o0UfKNfuA0eMLr2wLT4AiBA==", + "requires": { + "@types/mime": "^1", + "@types/node": "*" + } + }, + "@types/serve-static": { + "version": "1.15.5", + "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.15.5.tgz", + "integrity": "sha512-PDRk21MnK70hja/YF8AHfC7yIsiQHn1rcXx7ijCFBX/k+XQJhQT/gw3xekXKJvx+5SXaMMS8oqQy09Mzvz2TuQ==", + "requires": { + "@types/http-errors": "*", + "@types/mime": "*", + "@types/node": "*" + } + }, + "@types/web3": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/@types/web3/-/web3-1.2.2.tgz", + "integrity": "sha512-eFiYJKggNrOl0nsD+9cMh2MLk4zVBfXfGnVeRFbpiZzBE20eet4KLA3fXcjSuHaBn0RnQzwLAGdgzgzdet4C0A==", + "requires": { + "web3": "*" + } + }, + "@types/ws": { + "version": "8.5.3", + "resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.5.3.tgz", + "integrity": "sha512-6YOoWjruKj1uLf3INHH7D3qTXwFfEsg1kf3c0uDdSBJwfa/llkwIjrAGV7j7mVgGNbzTQ3HiHKKDXl6bJPD97w==", + "requires": { + "@types/node": "*" + } + }, + "@types/yauzl": { + "version": "2.10.3", + "resolved": "https://registry.npmjs.org/@types/yauzl/-/yauzl-2.10.3.tgz", + "integrity": "sha512-oJoftv0LSuaDZE3Le4DbKX+KS9G36NzOeSap90UIK0yMA/NhKJhqlSGtNDORNRaIbQfzjXDrQa0ytJ6mNRGz/Q==", + "optional": true, + "requires": { + "@types/node": "*" + } + }, + "@uniswap/lib": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@uniswap/lib/-/lib-1.1.1.tgz", + "integrity": "sha512-2yK7sLpKIT91TiS5sewHtOa7YuM8IuBXVl4GZv2jZFys4D2sY7K5vZh6MqD25TPA95Od+0YzCVq6cTF2IKrOmg==" + }, + "@uniswap/sdk-core": { + "version": "4.0.10", + "resolved": "https://registry.npmjs.org/@uniswap/sdk-core/-/sdk-core-4.0.10.tgz", + "integrity": "sha512-RiobXJKXvVVb+wfNM09Ik8djOMOuRQGfyRP5pHgUjojicK/7nscZILjZ87DjVCGjXEoD8yTSIps0UAQuz6pJIw==", + "requires": { + "@ethersproject/address": "^5.0.2", + "big.js": "^5.2.2", + "decimal.js-light": "^2.5.0", + "jsbi": "^3.1.4", + "tiny-invariant": "^1.1.0", + "toformat": "^2.0.0" + }, + "dependencies": { + "big.js": { + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz", + "integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==" + } + } + }, + "@uniswap/swap-router-contracts": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/@uniswap/swap-router-contracts/-/swap-router-contracts-1.3.1.tgz", + "integrity": "sha512-mh/YNbwKb7Mut96VuEtL+Z5bRe0xVIbjjiryn+iMMrK2sFKhR4duk/86mEz0UO5gSx4pQIw9G5276P5heY/7Rg==", + "requires": { + "@openzeppelin/contracts": "3.4.2-solc-0.7", + "@uniswap/v2-core": "^1.0.1", + "@uniswap/v3-core": "^1.0.0", + "@uniswap/v3-periphery": "^1.4.4", + "dotenv": "^14.2.0", + "hardhat-watcher": "^2.1.1" + }, + "dependencies": { + "@openzeppelin/contracts": { + "version": "3.4.2-solc-0.7", + "resolved": "https://registry.npmjs.org/@openzeppelin/contracts/-/contracts-3.4.2-solc-0.7.tgz", + "integrity": "sha512-W6QmqgkADuFcTLzHL8vVoNBtkwjvQRpYIAom7KiUNoLKghyx3FgH0GBjt8NRvigV1ZmMOBllvE1By1C+bi8WpA==" + }, + "@uniswap/v2-core": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@uniswap/v2-core/-/v2-core-1.0.1.tgz", + "integrity": "sha512-MtybtkUPSyysqLY2U210NBDeCHX+ltHt3oADGdjqoThZaFRDKwM6k1Nb3F0A3hk5hwuQvytFWhrWHOEq6nVJ8Q==" + }, + "dotenv": { + "version": "14.3.2", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-14.3.2.tgz", + "integrity": "sha512-vwEppIphpFdvaMCaHfCEv9IgwcxMljMw2TnAQBB4VWPvzXQLTb82jwmdOKzlEVUL3gNFT4l4TPKO+Bn+sqcrVQ==" + } + } + }, + "@uniswap/v2-core": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@uniswap/v2-core/-/v2-core-1.0.0.tgz", + "integrity": "sha512-BJiXrBGnN8mti7saW49MXwxDBRFiWemGetE58q8zgfnPPzQKq55ADltEILqOt6VFZ22kVeVKbF8gVd8aY3l7pA==" + }, + "@uniswap/v2-periphery": { + "version": "1.1.0-beta.0", + "resolved": "https://registry.npmjs.org/@uniswap/v2-periphery/-/v2-periphery-1.1.0-beta.0.tgz", + "integrity": "sha512-6dkwAMKza8nzqYiXEr2D86dgW3TTavUvCR0w2Tu33bAbM8Ah43LKAzH7oKKPRT5VJQaMi1jtkGs1E8JPor1n5g==", + "requires": { + "@uniswap/lib": "1.1.1", + "@uniswap/v2-core": "1.0.0" + } + }, + "@uniswap/v3-core": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@uniswap/v3-core/-/v3-core-1.0.1.tgz", + "integrity": "sha512-7pVk4hEm00j9tc71Y9+ssYpO6ytkeI0y7WE9P6UcmNzhxPePwyAxImuhVsTqWK9YFvzgtvzJHi64pBl4jUzKMQ==" + }, + "@uniswap/v3-periphery": { + "version": "1.4.4", + "resolved": "https://registry.npmjs.org/@uniswap/v3-periphery/-/v3-periphery-1.4.4.tgz", + "integrity": "sha512-S4+m+wh8HbWSO3DKk4LwUCPZJTpCugIsHrWR86m/OrUyvSqGDTXKFfc2sMuGXCZrD1ZqO3rhQsKgdWg3Hbb2Kw==", + "requires": { + "@openzeppelin/contracts": "3.4.2-solc-0.7", + "@uniswap/lib": "^4.0.1-alpha", + "@uniswap/v2-core": "^1.0.1", + "@uniswap/v3-core": "^1.0.0", + "base64-sol": "1.0.1" + }, + "dependencies": { + "@openzeppelin/contracts": { + "version": "3.4.2-solc-0.7", + "resolved": "https://registry.npmjs.org/@openzeppelin/contracts/-/contracts-3.4.2-solc-0.7.tgz", + "integrity": "sha512-W6QmqgkADuFcTLzHL8vVoNBtkwjvQRpYIAom7KiUNoLKghyx3FgH0GBjt8NRvigV1ZmMOBllvE1By1C+bi8WpA==" }, - "pull-cat": { - "version": "1.1.11" + "@uniswap/lib": { + "version": "4.0.1-alpha", + "resolved": "https://registry.npmjs.org/@uniswap/lib/-/lib-4.0.1-alpha.tgz", + "integrity": "sha512-f6UIliwBbRsgVLxIaBANF6w09tYqc6Y/qXdsrbEmXHyFA7ILiKrIwRFXe1yOg8M3cksgVsO9N7yuL2DdCGQKBA==" }, - "pull-defer": { - "version": "0.2.3" + "@uniswap/v2-core": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@uniswap/v2-core/-/v2-core-1.0.1.tgz", + "integrity": "sha512-MtybtkUPSyysqLY2U210NBDeCHX+ltHt3oADGdjqoThZaFRDKwM6k1Nb3F0A3hk5hwuQvytFWhrWHOEq6nVJ8Q==" + } + } + }, + "@uniswap/v3-sdk": { + "version": "3.10.0", + "resolved": "https://registry.npmjs.org/@uniswap/v3-sdk/-/v3-sdk-3.10.0.tgz", + "integrity": "sha512-sbmSA1O+Ct960r66Ie/c1rOmVadpwRu8nQ79pGICv0pZJdnFIQ/SReG3F+iC2C2UNNjNP6aC2WDUggXrjyrgnA==", + "requires": { + "@ethersproject/abi": "^5.0.12", + "@ethersproject/solidity": "^5.0.9", + "@uniswap/sdk-core": "^4", + "@uniswap/swap-router-contracts": "^1.2.1", + "@uniswap/v3-periphery": "^1.1.1", + "@uniswap/v3-staker": "1.0.0", + "tiny-invariant": "^1.1.0", + "tiny-warning": "^1.0.3" + } + }, + "@uniswap/v3-staker": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@uniswap/v3-staker/-/v3-staker-1.0.0.tgz", + "integrity": "sha512-JV0Qc46Px5alvg6YWd+UIaGH9lDuYG/Js7ngxPit1SPaIP30AlVer1UYB7BRYeUVVxE+byUyIeN5jeQ7LLDjIw==", + "requires": { + "@openzeppelin/contracts": "3.4.1-solc-0.7-2", + "@uniswap/v3-core": "1.0.0", + "@uniswap/v3-periphery": "^1.0.1" + }, + "dependencies": { + "@openzeppelin/contracts": { + "version": "3.4.1-solc-0.7-2", + "resolved": "https://registry.npmjs.org/@openzeppelin/contracts/-/contracts-3.4.1-solc-0.7-2.tgz", + "integrity": "sha512-tAG9LWg8+M2CMu7hIsqHPaTyG4uDzjr6mhvH96LvOpLZZj6tgzTluBt+LsCf1/QaYrlis6pITvpIaIhE+iZB+Q==" }, - "pull-level": { - "version": "2.0.4", + "@uniswap/v3-core": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@uniswap/v3-core/-/v3-core-1.0.0.tgz", + "integrity": "sha512-kSC4djMGKMHj7sLMYVnn61k9nu+lHjMIxgg9CDQT+s2QYLoA56GbSK9Oxr+qJXzzygbkrmuY6cwgP6cW2JXPFA==" + } + } + }, + "@yarnpkg/lockfile": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@yarnpkg/lockfile/-/lockfile-1.1.0.tgz", + "integrity": "sha512-GpSwvyXOcOOlV70vbnzjj4fW5xW/FdUF6nQEt1ENy7m4ZCczi1+/buVUPAqmGfqznsORNFzUMjctTIp8a9tuCQ==" + }, + "abitype": { + "version": "0.7.1", + "resolved": "https://registry.npmjs.org/abitype/-/abitype-0.7.1.tgz", + "integrity": "sha512-VBkRHTDZf9Myaek/dO3yMmOzB/y2s3Zo6nVU7yaw1G+TvCHAjwaJzNGN9yo4K5D8bU/VZXKP1EJpRhFr862PlQ==", + "requires": {} + }, + "abortcontroller-polyfill": { + "version": "1.7.5", + "resolved": "https://registry.npmjs.org/abortcontroller-polyfill/-/abortcontroller-polyfill-1.7.5.tgz", + "integrity": "sha512-JMJ5soJWP18htbbxJjG7bG6yuI6pRhgJ0scHHTfkUjf6wjP912xZWvM+A4sJK3gqd9E8fcPbDnOefbA9Th/FIQ==" + }, + "abstract-level": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/abstract-level/-/abstract-level-1.0.3.tgz", + "integrity": "sha512-t6jv+xHy+VYwc4xqZMn2Pa9DjcdzvzZmQGRjTFc8spIbRGHgBrEKbPq+rYXc7CCo0lxgYvSgKVg9qZAhpVQSjA==", + "requires": { + "buffer": "^6.0.3", + "catering": "^2.1.0", + "is-buffer": "^2.0.5", + "level-supports": "^4.0.0", + "level-transcoder": "^1.0.1", + "module-error": "^1.0.1", + "queue-microtask": "^1.2.3" + } + }, + "abstract-leveldown": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/abstract-leveldown/-/abstract-leveldown-6.3.0.tgz", + "integrity": "sha512-TU5nlYgta8YrBMNpc9FwQzRbiXsj49gsALsXadbGHt9CROPzX5fB0rWDR5mtdpOOKa5XqRFpbj1QroPAoPzVjQ==", + "requires": { + "buffer": "^5.5.0", + "immediate": "^3.2.3", + "level-concat-iterator": "~2.0.0", + "level-supports": "~1.0.0", + "xtend": "~4.0.0" + }, + "dependencies": { + "buffer": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", + "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", "requires": { - "level-post": "^1.0.7", - "pull-cat": "^1.1.9", - "pull-live": "^1.0.1", - "pull-pushable": "^2.0.0", - "pull-stream": "^3.4.0", - "pull-window": "^2.1.4", - "stream-to-pull-stream": "^1.7.1" + "base64-js": "^1.3.1", + "ieee754": "^1.1.13" } }, - "pull-live": { + "level-supports": { "version": "1.0.1", + "resolved": "https://registry.npmjs.org/level-supports/-/level-supports-1.0.1.tgz", + "integrity": "sha512-rXM7GYnW8gsl1vedTJIbzOrRv85c/2uCMpiiCzO2fndd06U/kUXEEU9evYn4zFggBOg36IsBW8LzqIpETwwQzg==", "requires": { - "pull-cat": "^1.1.9", - "pull-stream": "^3.4.0" - } - }, - "pull-pushable": { - "version": "2.2.0" - }, - "pull-stream": { - "version": "3.6.14" - }, - "pull-window": { - "version": "2.1.4", - "requires": { - "looper": "^2.0.0" - } - }, - "pump": { - "version": "3.0.0", - "optional": true, - "requires": { - "end-of-stream": "^1.1.0", - "once": "^1.3.1" - } - }, - "punycode": { - "version": "2.1.1" - }, - "qs": { - "version": "6.5.2" - }, - "query-string": { - "version": "5.1.1", - "optional": true, - "requires": { - "decode-uri-component": "^0.2.0", - "object-assign": "^4.1.0", - "strict-uri-encode": "^1.0.0" - } - }, - "randombytes": { - "version": "2.1.0", - "requires": { - "safe-buffer": "^5.1.0" + "xtend": "^4.0.2" } - }, - "randomfill": { - "version": "1.0.4", - "optional": true, + } + } + }, + "accepts": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", + "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", + "requires": { + "mime-types": "~2.1.34", + "negotiator": "0.6.3" + } + }, + "adm-zip": { + "version": "0.4.16", + "resolved": "https://registry.npmjs.org/adm-zip/-/adm-zip-0.4.16.tgz", + "integrity": "sha512-TFi4HBKSGfIKsK5YCkKaaFG2m4PEDyViZmEwof3MTIgzimHLto6muaHVpbrljdIvIrFZzEq/p4nafOeLcYegrg==" + }, + "aes-js": { + "version": "4.0.0-beta.5", + "resolved": "https://registry.npmjs.org/aes-js/-/aes-js-4.0.0-beta.5.tgz", + "integrity": "sha512-G965FqalsNyrPqgEGON7nIx1e/OVENSgiEIzyC63haUMuvNnwIgIjMs52hlTCKhkBny7A2ORNlfY9Zu+jmGk1Q==", + "dev": true + }, + "agent-base": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", + "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", + "requires": { + "debug": "4" + } + }, + "aggregate-error": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", + "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==", + "requires": { + "clean-stack": "^2.0.0", + "indent-string": "^4.0.0" + } + }, + "ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "requires": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + } + }, + "amazon-cognito-identity-js": { + "version": "6.3.7", + "resolved": "https://registry.npmjs.org/amazon-cognito-identity-js/-/amazon-cognito-identity-js-6.3.7.tgz", + "integrity": "sha512-tSjnM7KyAeOZ7UMah+oOZ6cW4Gf64FFcc7BE2l7MTcp7ekAPrXaCbpcW2xEpH1EiDS4cPcAouHzmCuc2tr72vQ==", + "dev": true, + "requires": { + "@aws-crypto/sha256-js": "1.2.2", + "buffer": "4.9.2", + "fast-base64-decode": "^1.0.0", + "isomorphic-unfetch": "^3.0.0", + "js-cookie": "^2.2.1" + }, + "dependencies": { + "buffer": { + "version": "4.9.2", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-4.9.2.tgz", + "integrity": "sha512-xq+q3SRMOxGivLhBNaUdC64hDTQwejJ+H0T/NB1XMtTVEwNTrfFF3gAxiyW0Bu/xWEGhjVKgUcMhCrUy2+uCWg==", + "dev": true, "requires": { - "randombytes": "^2.0.5", - "safe-buffer": "^5.1.0" + "base64-js": "^1.0.2", + "ieee754": "^1.1.4", + "isarray": "^1.0.0" } }, - "range-parser": { - "version": "1.2.1", + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", + "dev": true + } + } + }, + "ansi-colors": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-3.2.4.tgz", + "integrity": "sha512-hHUXGagefjN2iRrID63xckIvotOXOojhQKWIPUZ4mNUZ9nLZW+7FMNoE1lOkEhNWYsx/7ysGIuJYCiMAA9FnrA==", + "dev": true + }, + "ansi-escapes": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", + "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", + "requires": { + "type-fest": "^0.21.3" + } + }, + "ansi-regex": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.1.tgz", + "integrity": "sha512-+O9Jct8wf++lXxxFc4hc8LsjaSq0HFzzL7cVsw8pRDIPdjKD2mT4ytDZlLuSBZ4cLKZFXIrMGO7DbQCtMJJMKw==" + }, + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "requires": { + "color-convert": "^2.0.1" + } + }, + "antlr4ts": { + "version": "0.5.0-alpha.4", + "resolved": "https://registry.npmjs.org/antlr4ts/-/antlr4ts-0.5.0-alpha.4.tgz", + "integrity": "sha512-WPQDt1B74OfPv/IMS2ekXAKkTZIHl88uMetg6q3OTqgFxZ/dxDXI0EWLyZid/1Pe6hTftyg5N7gel5wNAGxXyQ==" + }, + "anymatch": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", + "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", + "requires": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + } + }, + "aproba": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz", + "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==", + "optional": true + }, + "are-we-there-yet": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-1.1.7.tgz", + "integrity": "sha512-nxwy40TuMiUGqMyRHgCSWZ9FM4VAoRP4xUYSTv5ImRog+h9yISPbVH7H8fASCIzYn9wlEv4zvFL7uKDMCFQm3g==", + "optional": true, + "requires": { + "delegates": "^1.0.0", + "readable-stream": "^2.0.6" + }, + "dependencies": { + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", "optional": true }, - "raw-body": { - "version": "2.4.0", - "optional": true, - "requires": { - "bytes": "3.1.0", - "http-errors": "1.7.2", - "iconv-lite": "0.4.24", - "unpipe": "1.0.0" - } - }, "readable-stream": { - "version": "2.3.7", + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", + "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", + "optional": true, "requires": { "core-util-is": "~1.0.0", "inherits": "~2.0.3", @@ -54035,1661 +20444,2636 @@ "safe-buffer": "~5.1.1", "string_decoder": "~1.1.1", "util-deprecate": "~1.0.1" - }, - "dependencies": { - "safe-buffer": { - "version": "5.1.2" - } - } - }, - "regenerate": { - "version": "1.4.2" - }, - "regenerator-runtime": { - "version": "0.11.1" - }, - "regenerator-transform": { - "version": "0.10.1", - "requires": { - "babel-runtime": "^6.18.0", - "babel-types": "^6.19.0", - "private": "^0.1.6" - } - }, - "regex-not": { - "version": "1.0.2", - "requires": { - "extend-shallow": "^3.0.2", - "safe-regex": "^1.1.0" - } - }, - "regexp.prototype.flags": { - "version": "1.3.0", - "requires": { - "define-properties": "^1.1.3", - "es-abstract": "^1.17.0-next.1" - }, - "dependencies": { - "es-abstract": { - "version": "1.17.7", - "requires": { - "es-to-primitive": "^1.2.1", - "function-bind": "^1.1.1", - "has": "^1.0.3", - "has-symbols": "^1.0.1", - "is-callable": "^1.2.2", - "is-regex": "^1.1.1", - "object-inspect": "^1.8.0", - "object-keys": "^1.1.1", - "object.assign": "^4.1.1", - "string.prototype.trimend": "^1.0.1", - "string.prototype.trimstart": "^1.0.1" - } - } - } - }, - "regexpu-core": { - "version": "2.0.0", - "requires": { - "regenerate": "^1.2.1", - "regjsgen": "^0.2.0", - "regjsparser": "^0.1.4" - } - }, - "regjsgen": { - "version": "0.2.0" - }, - "regjsparser": { - "version": "0.1.5", - "requires": { - "jsesc": "~0.5.0" - }, - "dependencies": { - "jsesc": { - "version": "0.5.0" - } - } - }, - "repeat-element": { - "version": "1.1.3" - }, - "repeat-string": { - "version": "1.6.1" - }, - "repeating": { - "version": "2.0.1", - "requires": { - "is-finite": "^1.0.0" - } - }, - "request": { - "version": "2.88.2", - "requires": { - "aws-sign2": "~0.7.0", - "aws4": "^1.8.0", - "caseless": "~0.12.0", - "combined-stream": "~1.0.6", - "extend": "~3.0.2", - "forever-agent": "~0.6.1", - "form-data": "~2.3.2", - "har-validator": "~5.1.3", - "http-signature": "~1.2.0", - "is-typedarray": "~1.0.0", - "isstream": "~0.1.2", - "json-stringify-safe": "~5.0.1", - "mime-types": "~2.1.19", - "oauth-sign": "~0.9.0", - "performance-now": "^2.1.0", - "qs": "~6.5.2", - "safe-buffer": "^5.1.2", - "tough-cookie": "~2.5.0", - "tunnel-agent": "^0.6.0", - "uuid": "^3.3.2" - } - }, - "resolve-url": { - "version": "0.2.1" - }, - "responselike": { - "version": "1.0.2", - "optional": true, - "requires": { - "lowercase-keys": "^1.0.0" - } - }, - "resumer": { - "version": "0.0.0", - "requires": { - "through": "~2.3.4" - } - }, - "ret": { - "version": "0.1.15" - }, - "rimraf": { - "version": "2.6.3", - "requires": { - "glob": "^7.1.3" - } - }, - "ripemd160": { - "version": "2.0.2", - "requires": { - "hash-base": "^3.0.0", - "inherits": "^2.0.1" - } - }, - "rlp": { - "version": "2.2.6", - "requires": { - "bn.js": "^4.11.1" } }, - "rustbn.js": { - "version": "0.2.0" - }, "safe-buffer": { - "version": "5.2.1" - }, - "safe-event-emitter": { - "version": "1.0.1", - "requires": { - "events": "^3.0.0" - } - }, - "safe-regex": { - "version": "1.1.0", - "requires": { - "ret": "~0.1.10" - } - }, - "safer-buffer": { - "version": "2.1.2" - }, - "scrypt-js": { - "version": "3.0.1" - }, - "scryptsy": { - "version": "1.2.1", - "optional": true, - "requires": { - "pbkdf2": "^3.0.3" - } - }, - "secp256k1": { - "version": "4.0.2", - "requires": { - "elliptic": "^6.5.2", - "node-addon-api": "^2.0.0", - "node-gyp-build": "^4.2.0" - } - }, - "seedrandom": { - "version": "3.0.1" - }, - "semaphore": { - "version": "1.1.0" - }, - "send": { - "version": "0.17.1", - "optional": true, - "requires": { - "debug": "2.6.9", - "depd": "~1.1.2", - "destroy": "~1.0.4", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "etag": "~1.8.1", - "fresh": "0.5.2", - "http-errors": "~1.7.2", - "mime": "1.6.0", - "ms": "2.1.1", - "on-finished": "~2.3.0", - "range-parser": "~1.2.1", - "statuses": "~1.5.0" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "optional": true, - "requires": { - "ms": "2.0.0" - }, - "dependencies": { - "ms": { - "version": "2.0.0", - "optional": true - } - } - }, - "ms": { - "version": "2.1.1", - "optional": true - } - } - }, - "serve-static": { - "version": "1.14.1", - "optional": true, - "requires": { - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "parseurl": "~1.3.3", - "send": "0.17.1" - } - }, - "servify": { - "version": "0.1.12", - "optional": true, - "requires": { - "body-parser": "^1.16.0", - "cors": "^2.8.1", - "express": "^4.14.0", - "request": "^2.79.0", - "xhr": "^2.3.3" - } - }, - "set-immediate-shim": { - "version": "1.0.1" - }, - "set-value": { - "version": "2.0.1", - "requires": { - "extend-shallow": "^2.0.1", - "is-extendable": "^0.1.1", - "is-plain-object": "^2.0.3", - "split-string": "^3.0.1" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "requires": { - "is-extendable": "^0.1.0" - } - }, - "is-extendable": { - "version": "0.1.1" - } - } - }, - "setimmediate": { - "version": "1.0.5" - }, - "setprototypeof": { - "version": "1.1.1", + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", "optional": true }, - "sha.js": { - "version": "2.4.11", + "string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "optional": true, "requires": { - "inherits": "^2.0.1", - "safe-buffer": "^5.0.1" + "safe-buffer": "~5.1.0" } - }, - "simple-concat": { - "version": "1.0.1", - "optional": true - }, - "simple-get": { - "version": "2.8.1", + } + } + }, + "argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==" + }, + "array-buffer-byte-length": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.0.tgz", + "integrity": "sha512-LPuwb2P+NrQw3XhxGc36+XSvuBPopovXYTR9Ew++Du9Yb/bx5AzBfrIsBoj0EZUifjQU+sHL21sseZ3jerWO/A==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "is-array-buffer": "^3.0.1" + } + }, + "array-flatten": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", + "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==" + }, + "array-uniq": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/array-uniq/-/array-uniq-1.0.3.tgz", + "integrity": "sha512-MNha4BWQ6JbwhFhj03YK552f7cb3AzoE8SzeljgChvL1dl3IcvggXVz1DilzySZkCja+CXuZbdW7yATchWn8/Q==" + }, + "array.prototype.findlast": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/array.prototype.findlast/-/array.prototype.findlast-1.2.3.tgz", + "integrity": "sha512-kcBubumjciBg4JKp5KTKtI7ec7tRefPk88yjkWJwaVKYd9QfTaxcsOxoMNKd7iBr447zCfDV0z1kOF47umv42g==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", + "es-shim-unscopables": "^1.0.0", + "get-intrinsic": "^1.2.1" + } + }, + "arraybuffer.prototype.slice": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.2.tgz", + "integrity": "sha512-yMBKppFur/fbHu9/6USUe03bZ4knMYiwFBcyiaXB8Go0qNehwX6inYPzK9U0NeQvGxKthcmHcaR8P5MStSRBAw==", + "dev": true, + "requires": { + "array-buffer-byte-length": "^1.0.0", + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", + "get-intrinsic": "^1.2.1", + "is-array-buffer": "^3.0.2", + "is-shared-array-buffer": "^1.0.2" + } + }, + "asap": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", + "integrity": "sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==" + }, + "asn1": { + "version": "0.2.6", + "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.6.tgz", + "integrity": "sha512-ix/FxPn0MDjeyJ7i/yoHGFt/EX6LyNbxSEhPPXODPL+KB0VPk86UYfL0lMdy+KCnv+fmvIzySwaK5COwqVbWTQ==", + "requires": { + "safer-buffer": "~2.1.0" + } + }, + "assert-plus": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", + "integrity": "sha512-NfJ4UzBCcQGLDlQq7nHxH+tv3kyZ0hHQqF5BO6J7tNJeP5do1llPr8dZ8zHonfhAu0PHAdMkSo+8o0wxg9lZWw==" + }, + "assertion-error": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-1.1.0.tgz", + "integrity": "sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==" + }, + "astral-regex": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz", + "integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==", + "dev": true + }, + "async-limiter": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/async-limiter/-/async-limiter-1.0.1.tgz", + "integrity": "sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ==" + }, + "async-retry": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/async-retry/-/async-retry-1.3.3.tgz", + "integrity": "sha512-wfr/jstw9xNi/0teMHrRW7dsz3Lt5ARhYNZ2ewpadnhaIp5mbALhOAP+EAdsC7t4Z6wqsDVv9+W6gm1Dk9mEyw==", + "dev": true, + "requires": { + "retry": "0.13.1" + } + }, + "asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==" + }, + "at-least-node": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/at-least-node/-/at-least-node-1.0.0.tgz", + "integrity": "sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==" + }, + "available-typed-arrays": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz", + "integrity": "sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==" + }, + "aws-sign2": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", + "integrity": "sha512-08kcGqnYf/YmjoRhfxyu+CLxBjUtHLXLXX/vUfx9l2LYzG3c1m61nrpyFUZI6zeS+Li/wWMMidD9KgrqtGq3mA==" + }, + "aws4": { + "version": "1.12.0", + "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.12.0.tgz", + "integrity": "sha512-NmWvPnx0F1SfrQbYwOi7OeaNGokp9XhzNioJ/CSBs8Qa4vxug81mhJEAVZwxXuBmYB5KDRfMq/F3RR0BIU7sWg==" + }, + "axios": { + "version": "1.6.5", + "resolved": "https://registry.npmjs.org/axios/-/axios-1.6.5.tgz", + "integrity": "sha512-Ii012v05KEVuUoFWmMW/UQv9aRIc3ZwkWDcM+h5Il8izZCtRVpDUfwpoFf7eOtajT3QiGR4yDUx7lPqHJULgbg==", + "requires": { + "follow-redirects": "^1.15.4", + "form-data": "^4.0.0", + "proxy-from-env": "^1.1.0" + } + }, + "balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" + }, + "base-x": { + "version": "3.0.9", + "resolved": "https://registry.npmjs.org/base-x/-/base-x-3.0.9.tgz", + "integrity": "sha512-H7JU6iBHTal1gp56aKoaa//YUxEaAOUiydvrV/pILqIHXTtqxSkATOnDA2u+jZ/61sD+L/412+7kzXRtWukhpQ==", + "requires": { + "safe-buffer": "^5.0.1" + } + }, + "base64-js": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", + "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==" + }, + "base64-sol": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/base64-sol/-/base64-sol-1.0.1.tgz", + "integrity": "sha512-ld3cCNMeXt4uJXmLZBHFGMvVpK9KsLVEhPpFRXnvSVAqABKbuNZg/+dsq3NuM+wxFLb/UrVkz7m1ciWmkMfTbg==" + }, + "bcrypt-pbkdf": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", + "integrity": "sha512-qeFIXtP4MSoi6NLqO12WfqARWWuCKi2Rn/9hJLEmtB5yTNr9DqFWkJRCf2qShWzPeAMRnOgCrq0sg/KLv5ES9w==", + "requires": { + "tweetnacl": "^0.14.3" + }, + "dependencies": { + "tweetnacl": { + "version": "0.14.5", + "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", + "integrity": "sha512-KXXFFdAbFXY4geFIwoyNK+f5Z1b7swfXABfL7HXCmoIWMKU3dmS26672A4EeQtDzLKy7SXmfBu51JolvEKwtGA==" + } + } + }, + "bech32": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/bech32/-/bech32-1.1.4.tgz", + "integrity": "sha512-s0IrSOzLlbvX7yp4WBfPITzpAU8sqQcpsmwXDiKwrG4r491vwCO/XpejasRNl0piBMe/DvP4Tz0mIS/X1DPJBQ==" + }, + "big-integer": { + "version": "1.6.36", + "resolved": "https://registry.npmjs.org/big-integer/-/big-integer-1.6.36.tgz", + "integrity": "sha512-t70bfa7HYEA1D9idDbmuv7YbsbVkQ+Hp+8KFSul4aE5e/i1bjCNIRYJZlA8Q8p0r9T8cF/RVvwUgRA//FydEyg==" + }, + "big.js": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/big.js/-/big.js-6.2.1.tgz", + "integrity": "sha512-bCtHMwL9LeDIozFn+oNhhFoq+yQ3BNdnsLSASUxLciOb1vgvpHsIO1dsENiGMgbb4SkP5TrzWzRiLddn8ahVOQ==" + }, + "bigint-crypto-utils": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/bigint-crypto-utils/-/bigint-crypto-utils-3.3.0.tgz", + "integrity": "sha512-jOTSb+drvEDxEq6OuUybOAv/xxoh3cuYRUIPyu8sSHQNKM303UQ2R1DAo45o1AkcIXw6fzbaFI1+xGGdaXs2lg==" + }, + "bignumber.js": { + "version": "9.1.2", + "resolved": "https://registry.npmjs.org/bignumber.js/-/bignumber.js-9.1.2.tgz", + "integrity": "sha512-2/mKyZH9K85bzOEfhXDBFZTGd1CTs+5IHpeFQo9luiBG7hghdC851Pj2WAhb6E3R6b9tZj/XKhbg4fum+Kepug==" + }, + "binary-extensions": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", + "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==" + }, + "bindings": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/bindings/-/bindings-1.5.0.tgz", + "integrity": "sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==", + "optional": true, + "requires": { + "file-uri-to-path": "1.0.0" + } + }, + "bl": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", + "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", + "optional": true, + "requires": { + "buffer": "^5.5.0", + "inherits": "^2.0.4", + "readable-stream": "^3.4.0" + }, + "dependencies": { + "buffer": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", + "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", "optional": true, "requires": { - "decompress-response": "^3.3.0", - "once": "^1.3.1", - "simple-concat": "^1.0.0" - } - }, - "snapdragon": { - "version": "0.8.2", - "requires": { - "base": "^0.11.1", - "debug": "^2.2.0", - "define-property": "^0.2.5", - "extend-shallow": "^2.0.1", - "map-cache": "^0.2.2", - "source-map": "^0.5.6", - "source-map-resolve": "^0.5.0", - "use": "^3.1.0" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "requires": { - "ms": "2.0.0" - } - }, - "define-property": { - "version": "0.2.5", - "requires": { - "is-descriptor": "^0.1.0" - } - }, - "extend-shallow": { - "version": "2.0.1", - "requires": { - "is-extendable": "^0.1.0" - } - }, - "is-accessor-descriptor": { - "version": "0.1.6", - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "is-buffer": { - "version": "1.1.6" - }, - "is-data-descriptor": { - "version": "0.1.4", - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "is-descriptor": { - "version": "0.1.6", - "requires": { - "is-accessor-descriptor": "^0.1.6", - "is-data-descriptor": "^0.1.4", - "kind-of": "^5.0.0" - } - }, - "is-extendable": { - "version": "0.1.1" - }, - "kind-of": { - "version": "5.1.0" - }, - "ms": { - "version": "2.0.0" - } - } - }, - "snapdragon-node": { - "version": "2.1.1", - "requires": { - "define-property": "^1.0.0", - "isobject": "^3.0.0", - "snapdragon-util": "^3.0.1" - }, - "dependencies": { - "define-property": { - "version": "1.0.0", - "requires": { - "is-descriptor": "^1.0.0" - } - } - } - }, - "snapdragon-util": { - "version": "3.0.1", - "requires": { - "kind-of": "^3.2.0" - }, - "dependencies": { - "is-buffer": { - "version": "1.1.6" - }, - "kind-of": { - "version": "3.2.2", - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "source-map": { - "version": "0.5.7" - }, - "source-map-resolve": { - "version": "0.5.3", - "requires": { - "atob": "^2.1.2", - "decode-uri-component": "^0.2.0", - "resolve-url": "^0.2.1", - "source-map-url": "^0.4.0", - "urix": "^0.1.0" + "base64-js": "^1.3.1", + "ieee754": "^1.1.13" } - }, - "source-map-support": { - "version": "0.5.12", + } + } + }, + "blakejs": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/blakejs/-/blakejs-1.2.1.tgz", + "integrity": "sha512-QXUSXI3QVc/gJME0dBpXrag1kbzOqCjCX8/b54ntNyW6sjtoqxqRk3LTmXzaJoh71zMsDCjM+47jS7XiwN/+fQ==" + }, + "bluebird": { + "version": "3.7.2", + "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz", + "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==" + }, + "bn.js": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.2.1.tgz", + "integrity": "sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ==" + }, + "body-parser": { + "version": "1.20.2", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.2.tgz", + "integrity": "sha512-ml9pReCu3M61kGlqoTm2umSXTlRTuGTx0bfYj+uIUKKYycG5NtSbeetV3faSU6R7ajOPw0g/J1PvK4qNy7s5bA==", + "requires": { + "bytes": "3.1.2", + "content-type": "~1.0.5", + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "1.2.0", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", + "on-finished": "2.4.1", + "qs": "6.11.0", + "raw-body": "2.5.2", + "type-is": "~1.6.18", + "unpipe": "1.0.0" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", "requires": { - "buffer-from": "^1.0.0", - "source-map": "^0.6.0" - }, - "dependencies": { - "source-map": { - "version": "0.6.1" - } + "ms": "2.0.0" } }, - "source-map-url": { - "version": "0.4.0" + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" }, - "split-string": { - "version": "3.1.0", + "qs": { + "version": "6.11.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz", + "integrity": "sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==", "requires": { - "extend-shallow": "^3.0.0" + "side-channel": "^1.0.4" } - }, - "sshpk": { - "version": "1.16.1", + } + } + }, + "boolbase": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", + "integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==" + }, + "brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "requires": { + "balanced-match": "^1.0.0" + } + }, + "braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "requires": { + "fill-range": "^7.0.1" + } + }, + "brorand": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz", + "integrity": "sha512-cKV8tMCEpQs4hK/ik71d6LrPOnpkpGBR0wzxqr68g2m/LB2GxVYQroAjMJZRVM1Y4BCjCKc3vAamxSzOY2RP+w==" + }, + "browser-level": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/browser-level/-/browser-level-1.0.1.tgz", + "integrity": "sha512-XECYKJ+Dbzw0lbydyQuJzwNXtOpbMSq737qxJN11sIRTErOMShvDpbzTlgju7orJKvx4epULolZAuJGLzCmWRQ==", + "requires": { + "abstract-level": "^1.0.2", + "catering": "^2.1.1", + "module-error": "^1.0.2", + "run-parallel-limit": "^1.1.0" + } + }, + "browser-stdout": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.1.tgz", + "integrity": "sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==" + }, + "browserify-aes": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/browserify-aes/-/browserify-aes-1.2.0.tgz", + "integrity": "sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==", + "requires": { + "buffer-xor": "^1.0.3", + "cipher-base": "^1.0.0", + "create-hash": "^1.1.0", + "evp_bytestokey": "^1.0.3", + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" + } + }, + "bs58": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/bs58/-/bs58-4.0.1.tgz", + "integrity": "sha512-Ok3Wdf5vOIlBrgCvTq96gBkJw+JUEzdBgyaza5HLtPm7yTHkjRy8+JzNyHF7BHa0bNWOQIp3m5YF0nnFcOIKLw==", + "requires": { + "base-x": "^3.0.2" + } + }, + "bs58check": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/bs58check/-/bs58check-2.1.2.tgz", + "integrity": "sha512-0TS1jicxdU09dwJMNZtVAfzPi6Q6QeN0pM1Fkzrjn+XYHvzMKPU3pHVpva+769iNVSfIYWf7LJ6WR+BuuMf8cA==", + "requires": { + "bs58": "^4.0.0", + "create-hash": "^1.1.0", + "safe-buffer": "^5.1.2" + } + }, + "buffer": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz", + "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==", + "requires": { + "base64-js": "^1.3.1", + "ieee754": "^1.2.1" + } + }, + "buffer-crc32": { + "version": "0.2.13", + "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz", + "integrity": "sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==", + "optional": true + }, + "buffer-from": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", + "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==" + }, + "buffer-to-arraybuffer": { + "version": "0.0.5", + "resolved": "https://registry.npmjs.org/buffer-to-arraybuffer/-/buffer-to-arraybuffer-0.0.5.tgz", + "integrity": "sha512-3dthu5CYiVB1DEJp61FtApNnNndTckcqe4pFcLdvHtrpG+kcyekCJKg4MRiDcFW7A6AODnXB9U4dwQiCW5kzJQ==" + }, + "buffer-xor": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/buffer-xor/-/buffer-xor-1.0.3.tgz", + "integrity": "sha512-571s0T7nZWK6vB67HI5dyUF7wXiNcfaPPPTl6zYCNApANjIvYJTg7hlud/+cJpdAhS7dVzqMLmfhfHR3rAcOjQ==" + }, + "bufferutil": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/bufferutil/-/bufferutil-4.0.8.tgz", + "integrity": "sha512-4T53u4PdgsXqKaIctwF8ifXlRTTmEPJ8iEPWFdGZvcf7sbwYo6FKFEX9eNNAnzFZ7EzJAQ3CJeOtCRA4rDp7Pw==", + "requires": { + "node-gyp-build": "^4.3.0" + } + }, + "bufio": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/bufio/-/bufio-1.2.1.tgz", + "integrity": "sha512-9oR3zNdupcg/Ge2sSHQF3GX+kmvL/fTPvD0nd5AGLq8SjUYnTz+SlFjK/GXidndbZtIj+pVKXiWeR9w6e9wKCA==" + }, + "bunyan": { + "version": "1.8.15", + "resolved": "https://registry.npmjs.org/bunyan/-/bunyan-1.8.15.tgz", + "integrity": "sha512-0tECWShh6wUysgucJcBAoYegf3JJoZWibxdqhTm7OHPeT42qdjkZ29QCMcKwbgU1kiH+auSIasNRXMLWXafXig==", + "requires": { + "dtrace-provider": "~0.8", + "moment": "^2.19.3", + "mv": "~2", + "safe-json-stringify": "~1" + } + }, + "bytes": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", + "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==" + }, + "cacheable-lookup": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/cacheable-lookup/-/cacheable-lookup-6.1.0.tgz", + "integrity": "sha512-KJ/Dmo1lDDhmW2XDPMo+9oiy/CeqosPguPCrgcVzKyZrL6pM1gU2GmPY/xo6OQPTUaA/c0kwHuywB4E6nmT9ww==" + }, + "cacheable-request": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-7.0.4.tgz", + "integrity": "sha512-v+p6ongsrp0yTGbJXjgxPow2+DL93DASP4kXCDKb8/bwRtt9OEF3whggkkDkGNzgcWy2XaF4a8nZglC7uElscg==", + "requires": { + "clone-response": "^1.0.2", + "get-stream": "^5.1.0", + "http-cache-semantics": "^4.0.0", + "keyv": "^4.0.0", + "lowercase-keys": "^2.0.0", + "normalize-url": "^6.0.1", + "responselike": "^2.0.0" + }, + "dependencies": { + "lowercase-keys": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-2.0.0.tgz", + "integrity": "sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==" + } + } + }, + "call-bind": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.5.tgz", + "integrity": "sha512-C3nQxfFZxFRVoJoGKKI8y3MOEo129NQ+FgQ08iye+Mk4zNZZGdjfs06bVTr+DBSlA66Q2VEcMki/cUCP4SercQ==", + "requires": { + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.1", + "set-function-length": "^1.1.1" + } + }, + "camel-case": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/camel-case/-/camel-case-3.0.0.tgz", + "integrity": "sha512-+MbKztAYHXPr1jNTSKQF52VpcFjwY5RkR7fxksV8Doo4KAYc5Fl4UJRgthBbTmEx8C54DqahhbLJkDwjI3PI/w==", + "requires": { + "no-case": "^2.2.0", + "upper-case": "^1.1.1" + } + }, + "camelcase": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-4.1.0.tgz", + "integrity": "sha512-FxAv7HpHrXbh3aPo4o2qxHay2lkLY3x5Mw3KeE4KQE8ysVfziWeRZDwcjauvwBSGEC/nXUPzZy8zeh4HokqOnw==" + }, + "case": { + "version": "1.6.3", + "resolved": "https://registry.npmjs.org/case/-/case-1.6.3.tgz", + "integrity": "sha512-mzDSXIPaFwVDvZAHqZ9VlbyF4yyXRuX6IvB06WvPYkqJVO24kX1PPhv9bfpKNFZyxYFmmgo03HUiD8iklmJYRQ==" + }, + "caseless": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", + "integrity": "sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw==" + }, + "catering": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/catering/-/catering-2.1.1.tgz", + "integrity": "sha512-K7Qy8O9p76sL3/3m7/zLKbRkyOlSZAgzEaLhyj2mXS8PsCud2Eo4hAb8aLtZqHh0QGqLcb9dlJSu6lHRVENm1w==" + }, + "cbor": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/cbor/-/cbor-8.1.0.tgz", + "integrity": "sha512-DwGjNW9omn6EwP70aXsn7FQJx5kO12tX0bZkaTjzdVFM6/7nhA4t0EENocKGx6D2Bch9PE2KzCUf5SceBdeijg==", + "dev": true, + "requires": { + "nofilter": "^3.1.0" + } + }, + "chai": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/chai/-/chai-4.4.0.tgz", + "integrity": "sha512-x9cHNq1uvkCdU+5xTkNh5WtgD4e4yDFCsp9jVc7N7qVeKeftv3gO/ZrviX5d+3ZfxdYnZXZYujjRInu1RogU6A==", + "requires": { + "assertion-error": "^1.1.0", + "check-error": "^1.0.3", + "deep-eql": "^4.1.3", + "get-func-name": "^2.0.2", + "loupe": "^2.3.6", + "pathval": "^1.1.1", + "type-detect": "^4.0.8" + } + }, + "chai-almost": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/chai-almost/-/chai-almost-1.0.1.tgz", + "integrity": "sha512-UrNSx5f2B1/ESrOz0a4iLpDnQvDnK/3O0ZE/KGYQ+NcndKy0VQkMkv8yoGIHNSbjzKBid3EAMdDMA5wb9CxvSA==", + "dev": true, + "requires": { + "deep-eql": "^2.0.2", + "type-detect": "^4.0.3" + }, + "dependencies": { + "deep-eql": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-2.0.2.tgz", + "integrity": "sha512-uts3fF4HnV1bcNx8K5c9NMjXXKtLOf1obUMq04uEuMaF8i1m0SfugbpDMd59cYfodQcMqeUISvL4Pmx5NZ7lcw==", + "dev": true, "requires": { - "asn1": "~0.2.3", - "assert-plus": "^1.0.0", - "bcrypt-pbkdf": "^1.0.0", - "dashdash": "^1.12.0", - "ecc-jsbn": "~0.1.1", - "getpass": "^0.1.1", - "jsbn": "~0.1.0", - "safer-buffer": "^2.0.2", - "tweetnacl": "~0.14.0" + "type-detect": "^3.0.0" }, "dependencies": { - "tweetnacl": { - "version": "0.14.5" + "type-detect": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-3.0.0.tgz", + "integrity": "sha512-pwZo7l1T0a8wmTMDc4FtXuHseRaqa9nyaUArp4xHaBMUlRzr72PvgF6ouXIIj5rjbVWqo8pZu6vw74jDKg4Dvw==", + "dev": true } } - }, - "static-extend": { - "version": "0.1.2", + } + } + }, + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "change-case": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/change-case/-/change-case-3.0.2.tgz", + "integrity": "sha512-Mww+SLF6MZ0U6kdg11algyKd5BARbyM4TbFBepwowYSR5ClfQGCGtxNXgykpN0uF/bstWeaGDT4JWaDh8zWAHA==", + "requires": { + "camel-case": "^3.0.0", + "constant-case": "^2.0.0", + "dot-case": "^2.1.0", + "header-case": "^1.0.0", + "is-lower-case": "^1.1.0", + "is-upper-case": "^1.1.0", + "lower-case": "^1.1.1", + "lower-case-first": "^1.0.0", + "no-case": "^2.3.2", + "param-case": "^2.1.0", + "pascal-case": "^2.0.0", + "path-case": "^2.1.0", + "sentence-case": "^2.1.0", + "snake-case": "^2.1.0", + "swap-case": "^1.1.0", + "title-case": "^2.1.0", + "upper-case": "^1.1.1", + "upper-case-first": "^1.1.0" + } + }, + "charenc": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/charenc/-/charenc-0.0.2.tgz", + "integrity": "sha512-yrLQ/yVUFXkzg7EDQsPieE/53+0RlaWTs+wBrvW36cyilJ2SaDWfl4Yj7MtLTXleV9uEKefbAGUPv2/iWSooRA==" + }, + "check-error": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/check-error/-/check-error-1.0.3.tgz", + "integrity": "sha512-iKEoDYaRmd1mxM90a2OEfWhjsjPpYPuQ+lMYsoxB126+t8fw7ySEO48nmDg5COTjxDI65/Y2OWpeEHk3ZOe8zg==", + "requires": { + "get-func-name": "^2.0.2" + } + }, + "cheerio": { + "version": "1.0.0-rc.12", + "resolved": "https://registry.npmjs.org/cheerio/-/cheerio-1.0.0-rc.12.tgz", + "integrity": "sha512-VqR8m68vM46BNnuZ5NtnGBKIE/DfN0cRIzg9n40EIq9NOv90ayxLBXA8fXC5gquFRGJSTRqBq25Jt2ECLR431Q==", + "requires": { + "cheerio-select": "^2.1.0", + "dom-serializer": "^2.0.0", + "domhandler": "^5.0.3", + "domutils": "^3.0.1", + "htmlparser2": "^8.0.1", + "parse5": "^7.0.0", + "parse5-htmlparser2-tree-adapter": "^7.0.0" + } + }, + "cheerio-select": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/cheerio-select/-/cheerio-select-2.1.0.tgz", + "integrity": "sha512-9v9kG0LvzrlcungtnJtpGNxY+fzECQKhK4EGJX2vByejiMX84MFNQw4UxPJl3bFbTMw+Dfs37XaIkCwTZfLh4g==", + "requires": { + "boolbase": "^1.0.0", + "css-select": "^5.1.0", + "css-what": "^6.1.0", + "domelementtype": "^2.3.0", + "domhandler": "^5.0.3", + "domutils": "^3.0.1" + } + }, + "chokidar": { + "version": "3.5.3", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", + "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", + "requires": { + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "fsevents": "~2.3.2", + "glob-parent": "~5.1.2", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.6.0" + } + }, + "chownr": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz", + "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==" + }, + "ci-info": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz", + "integrity": "sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==" + }, + "cids": { + "version": "0.7.5", + "resolved": "https://registry.npmjs.org/cids/-/cids-0.7.5.tgz", + "integrity": "sha512-zT7mPeghoWAu+ppn8+BS1tQ5qGmbMfB4AregnQjA/qHY3GC1m1ptI9GkWNlgeu38r7CuRdXB47uY2XgAYt6QVA==", + "requires": { + "buffer": "^5.5.0", + "class-is": "^1.1.0", + "multibase": "~0.6.0", + "multicodec": "^1.0.0", + "multihashes": "~0.4.15" + }, + "dependencies": { + "buffer": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", + "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", "requires": { - "define-property": "^0.2.5", - "object-copy": "^0.1.0" - }, - "dependencies": { - "define-property": { - "version": "0.2.5", - "requires": { - "is-descriptor": "^0.1.0" - } - }, - "is-accessor-descriptor": { - "version": "0.1.6", - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "is-buffer": { - "version": "1.1.6" - }, - "is-data-descriptor": { - "version": "0.1.4", - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "is-descriptor": { - "version": "0.1.6", - "requires": { - "is-accessor-descriptor": "^0.1.6", - "is-data-descriptor": "^0.1.4", - "kind-of": "^5.0.0" - } - }, - "kind-of": { - "version": "5.1.0" - } + "base64-js": "^1.3.1", + "ieee754": "^1.1.13" } }, - "statuses": { - "version": "1.5.0", - "optional": true - }, - "stream-to-pull-stream": { - "version": "1.7.3", + "multicodec": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/multicodec/-/multicodec-1.0.4.tgz", + "integrity": "sha512-NDd7FeS3QamVtbgfvu5h7fd1IlbaC4EQ0/pgU4zqE2vdHCmBGsUa0TiM8/TdSeG6BMPC92OOCf8F1ocE/Wkrrg==", "requires": { - "looper": "^3.0.0", - "pull-stream": "^3.2.3" - }, - "dependencies": { - "looper": { - "version": "3.0.0" - } + "buffer": "^5.6.0", + "varint": "^5.0.0" } + } + } + }, + "cipher-base": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.4.tgz", + "integrity": "sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==", + "requires": { + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" + } + }, + "class-is": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/class-is/-/class-is-1.1.0.tgz", + "integrity": "sha512-rhjH9AG1fvabIDoGRVH587413LPjTZgmDF9fOFCbFJQV4yuocX1mHxxvXI4g3cGwbVY9wAYIoKlg1N79frJKQw==" + }, + "classic-level": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/classic-level/-/classic-level-1.3.0.tgz", + "integrity": "sha512-iwFAJQYtqRTRM0F6L8h4JCt00ZSGdOyqh7yVrhhjrOpFhmBjNlRUey64MCiyo6UmQHMJ+No3c81nujPv+n9yrg==", + "requires": { + "abstract-level": "^1.0.2", + "catering": "^2.1.0", + "module-error": "^1.0.1", + "napi-macros": "^2.2.2", + "node-gyp-build": "^4.3.0" + } + }, + "clean-stack": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", + "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==" + }, + "cli-table3": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/cli-table3/-/cli-table3-0.6.3.tgz", + "integrity": "sha512-w5Jac5SykAeZJKntOxJCrm63Eg5/4dhMWIcuTbo9rpE+brgaSZo0RuNJZeOyMgsUdhDeojvgyQLmjI+K50ZGyg==", + "requires": { + "@colors/colors": "1.5.0", + "string-width": "^4.2.0" + } + }, + "cliui": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", + "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", + "requires": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^7.0.0" + }, + "dependencies": { + "ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==" }, - "strict-uri-encode": { - "version": "1.1.0", - "optional": true - }, - "string_decoder": { - "version": "1.1.1", + "strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", "requires": { - "safe-buffer": "~5.1.0" - }, - "dependencies": { - "safe-buffer": { - "version": "5.1.2" - } + "ansi-regex": "^5.0.1" } }, - "string.prototype.trim": { - "version": "1.2.3", + "wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", "requires": { - "call-bind": "^1.0.0", - "define-properties": "^1.1.3", - "es-abstract": "^1.18.0-next.1" + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" } + } + } + }, + "clone-response": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/clone-response/-/clone-response-1.0.3.tgz", + "integrity": "sha512-ROoL94jJH2dUVML2Y/5PEDNaSHgeOdSDicUyS7izcF63G6sTc/FTjLub4b8Il9S8S0beOfYt0TaA5qvFK+w0wA==", + "requires": { + "mimic-response": "^1.0.0" + }, + "dependencies": { + "mimic-response": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz", + "integrity": "sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==" + } + } + }, + "code-point-at": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz", + "integrity": "sha512-RpAVKQA5T63xEj6/giIbUEtZwJ4UFIc3ZtvEkiaUERylqe8xb5IvqcgOurZLahv93CLKfxcw5YI+DZcUBRyLXA==" + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, + "colors": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/colors/-/colors-1.4.0.tgz", + "integrity": "sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA==" + }, + "combined-stream": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", + "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "requires": { + "delayed-stream": "~1.0.0" + } + }, + "command-exists": { + "version": "1.2.9", + "resolved": "https://registry.npmjs.org/command-exists/-/command-exists-1.2.9.tgz", + "integrity": "sha512-LTQ/SGc+s0Xc0Fu5WaKnR0YiygZkm9eKFvyS+fRsU7/ZWFF8ykFM6Pc9aCVf1+xasOOZpO3BAVgVrKvsqKHV7w==" + }, + "commander": { + "version": "9.5.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-9.5.0.tgz", + "integrity": "sha512-KRs7WVDKg86PWiuAqhDrAQnTXZKraVcCc6vFdL14qrZ/DcWwuRo7VoiYXalXO7S5GKpqYiVEwCbgFDfxNHKJBQ==", + "optional": true + }, + "compare-versions": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/compare-versions/-/compare-versions-6.1.0.tgz", + "integrity": "sha512-LNZQXhqUvqUTotpZ00qLSaify3b4VFD588aRr8MKFw4CMUr98ytzCW5wDH5qx/DEY5kCDXcbcRuCqL0szEf2tg==", + "dev": true + }, + "complex.js": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/complex.js/-/complex.js-2.1.1.tgz", + "integrity": "sha512-8njCHOTtFFLtegk6zQo0kkVX1rngygb/KQI6z1qZxlFI3scluC+LVTCFbrkWjBv4vvLlbQ9t88IPMC6k95VTTg==" + }, + "concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==" + }, + "concat-stream": { + "version": "1.6.2", + "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz", + "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==", + "requires": { + "buffer-from": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^2.2.2", + "typedarray": "^0.0.6" + }, + "dependencies": { + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==" }, - "string.prototype.trimend": { - "version": "1.0.3", + "readable-stream": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", + "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", "requires": { - "call-bind": "^1.0.0", - "define-properties": "^1.1.3" + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" } }, - "string.prototype.trimstart": { - "version": "1.0.3", + "safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + }, + "string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", "requires": { - "call-bind": "^1.0.0", - "define-properties": "^1.1.3" + "safe-buffer": "~5.1.0" } - }, - "strip-hex-prefix": { - "version": "1.0.0", + } + } + }, + "console-control-strings": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz", + "integrity": "sha512-ty/fTekppD2fIwRvnZAVdeOiGd1c7YXEixbgJTNzqcxJWKQnjJ/V1bNEEE6hygpM3WjwHFUVK6HTjWSzV4a8sQ==", + "optional": true + }, + "constant-case": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/constant-case/-/constant-case-2.0.0.tgz", + "integrity": "sha512-eS0N9WwmjTqrOmR3o83F5vW8Z+9R1HnVz3xmzT2PMFug9ly+Au/fxRWlEBSb6LcZwspSsEn9Xs1uw9YgzAg1EQ==", + "requires": { + "snake-case": "^2.1.0", + "upper-case": "^1.1.1" + } + }, + "content-disposition": { + "version": "0.5.4", + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", + "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==", + "requires": { + "safe-buffer": "5.2.1" + } + }, + "content-hash": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/content-hash/-/content-hash-2.5.2.tgz", + "integrity": "sha512-FvIQKy0S1JaWV10sMsA7TRx8bpU+pqPkhbsfvOJAdjRXvYxEckAwQWGwtRjiaJfh+E0DvcWUGqcdjwMGFjsSdw==", + "requires": { + "cids": "^0.7.1", + "multicodec": "^0.5.5", + "multihashes": "^0.4.15" + } + }, + "content-type": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz", + "integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==" + }, + "convert-svg-core": { + "version": "0.6.4", + "resolved": "https://registry.npmjs.org/convert-svg-core/-/convert-svg-core-0.6.4.tgz", + "integrity": "sha512-8mS0n7otc1lljTte4z7nDhihEakKCRq4w5ivMnIGeOZuD/OV/eDZNNEgGLV1ET3p+rMbnrZnX4lAcsf14WzD5w==", + "optional": true, + "requires": { + "chalk": "^4.1.2", + "cheerio": "^1.0.0-rc.11", + "commander": "^9.2.0", + "file-url": "^3.0.0", + "get-stdin": "^8.0.0", + "glob": "^8.0.1", + "lodash.omit": "^4.5.0", + "lodash.pick": "^4.4.0", + "pollock": "^0.2.0", + "puppeteer": "^13.7.0", + "tmp": "^0.2.1" + }, + "dependencies": { + "glob": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/glob/-/glob-8.1.0.tgz", + "integrity": "sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==", + "optional": true, "requires": { - "is-hex-prefixed": "1.0.0" + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^5.0.1", + "once": "^1.3.0" } }, - "supports-color": { - "version": "5.5.0", + "minimatch": { + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", + "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", + "optional": true, "requires": { - "has-flag": "^3.0.0" + "brace-expansion": "^2.0.1" } }, - "swarm-js": { - "version": "0.1.40", + "rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", "optional": true, "requires": { - "bluebird": "^3.5.0", - "buffer": "^5.0.5", - "eth-lib": "^0.1.26", - "fs-extra": "^4.0.2", - "got": "^7.1.0", - "mime-types": "^2.1.16", - "mkdirp-promise": "^5.0.1", - "mock-fs": "^4.1.0", - "setimmediate": "^1.0.5", - "tar": "^4.0.2", - "xhr-request": "^1.0.1" + "glob": "^7.1.3" }, "dependencies": { - "fs-extra": { - "version": "4.0.3", - "optional": true, - "requires": { - "graceful-fs": "^4.1.2", - "jsonfile": "^4.0.0", - "universalify": "^0.1.0" - } - }, - "get-stream": { - "version": "3.0.0", - "optional": true - }, - "got": { - "version": "7.1.0", + "brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", "optional": true, "requires": { - "decompress-response": "^3.2.0", - "duplexer3": "^0.1.4", - "get-stream": "^3.0.0", - "is-plain-obj": "^1.1.0", - "is-retry-allowed": "^1.0.0", - "is-stream": "^1.0.0", - "isurl": "^1.0.0-alpha5", - "lowercase-keys": "^1.0.0", - "p-cancelable": "^0.3.0", - "p-timeout": "^1.1.1", - "safe-buffer": "^5.0.1", - "timed-out": "^4.0.0", - "url-parse-lax": "^1.0.0", - "url-to-options": "^1.0.1" + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" } }, - "is-stream": { - "version": "1.1.0", - "optional": true - }, - "p-cancelable": { - "version": "0.3.0", - "optional": true - }, - "prepend-http": { - "version": "1.0.4", - "optional": true - }, - "url-parse-lax": { - "version": "1.0.0", - "optional": true, - "requires": { - "prepend-http": "^1.0.1" - } - } - } - }, - "tape": { - "version": "4.13.3", - "requires": { - "deep-equal": "~1.1.1", - "defined": "~1.0.0", - "dotignore": "~0.1.2", - "for-each": "~0.3.3", - "function-bind": "~1.1.1", - "glob": "~7.1.6", - "has": "~1.0.3", - "inherits": "~2.0.4", - "is-regex": "~1.0.5", - "minimist": "~1.2.5", - "object-inspect": "~1.7.0", - "resolve": "~1.17.0", - "resumer": "~0.0.0", - "string.prototype.trim": "~1.2.1", - "through": "~2.3.8" - }, - "dependencies": { "glob": { - "version": "7.1.6", + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "optional": true, "requires": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", "inherits": "2", - "minimatch": "^3.0.4", + "minimatch": "^3.1.1", "once": "^1.3.0", "path-is-absolute": "^1.0.0" } }, - "is-regex": { - "version": "1.0.5", - "requires": { - "has": "^1.0.3" - } - }, - "object-inspect": { - "version": "1.7.0" - }, - "resolve": { - "version": "1.17.0", - "requires": { - "path-parse": "^1.0.6" - } - } - } - }, - "tar": { - "version": "4.4.13", - "optional": true, - "requires": { - "chownr": "^1.1.1", - "fs-minipass": "^1.2.5", - "minipass": "^2.8.6", - "minizlib": "^1.2.1", - "mkdirp": "^0.5.0", - "safe-buffer": "^5.1.2", - "yallist": "^3.0.3" - }, - "dependencies": { - "fs-minipass": { - "version": "1.2.7", - "optional": true, - "requires": { - "minipass": "^2.6.0" - } - }, - "minipass": { - "version": "2.9.0", + "minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", "optional": true, "requires": { - "safe-buffer": "^5.1.2", - "yallist": "^3.0.0" + "brace-expansion": "^1.1.7" } } } }, - "through": { - "version": "2.3.8" - }, - "through2": { - "version": "2.0.5", - "requires": { - "readable-stream": "~2.3.6", - "xtend": "~4.0.1" - } - }, - "timed-out": { - "version": "4.0.1", - "optional": true - }, "tmp": { - "version": "0.1.0", - "requires": { - "rimraf": "^2.6.3" - } - }, - "to-object-path": { - "version": "0.3.0", - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "is-buffer": { - "version": "1.1.6" - }, - "kind-of": { - "version": "3.2.2", - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "to-readable-stream": { - "version": "1.0.0", - "optional": true - }, - "to-regex": { - "version": "3.0.2", - "requires": { - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "regex-not": "^1.0.2", - "safe-regex": "^1.1.0" - } - }, - "toidentifier": { - "version": "1.0.0", - "optional": true - }, - "tough-cookie": { - "version": "2.5.0", - "requires": { - "psl": "^1.1.28", - "punycode": "^2.1.1" - } - }, - "trim-right": { - "version": "1.0.1" - }, - "tunnel-agent": { - "version": "0.6.0", - "requires": { - "safe-buffer": "^5.0.1" - } - }, - "tweetnacl": { - "version": "1.0.3" - }, - "tweetnacl-util": { - "version": "0.15.1" - }, - "type": { - "version": "1.2.0" - }, - "type-is": { - "version": "1.6.18", + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.1.tgz", + "integrity": "sha512-76SUhtfqR2Ijn+xllcI5P1oyannHNHByD80W1q447gU3mp9G9PSpGdWmjUOHRDPiHYacIk66W7ubDTuPF3BEtQ==", "optional": true, "requires": { - "media-typer": "0.3.0", - "mime-types": "~2.1.24" - } - }, - "typedarray": { - "version": "0.0.6" - }, - "typedarray-to-buffer": { - "version": "3.1.5", - "requires": { - "is-typedarray": "^1.0.0" - } - }, - "typewise": { - "version": "1.0.3", - "requires": { - "typewise-core": "^1.2.0" - } - }, - "typewise-core": { - "version": "1.2.0" - }, - "typewiselite": { - "version": "1.0.0" - }, - "ultron": { - "version": "1.1.1", - "optional": true - }, - "underscore": { - "version": "1.9.1", - "optional": true - }, - "union-value": { - "version": "1.0.1", - "requires": { - "arr-union": "^3.1.0", - "get-value": "^2.0.6", - "is-extendable": "^0.1.1", - "set-value": "^2.0.1" - }, - "dependencies": { - "is-extendable": { - "version": "0.1.1" - } - } - }, - "universalify": { - "version": "0.1.2" - }, - "unorm": { - "version": "1.6.0" - }, - "unpipe": { - "version": "1.0.0", - "optional": true - }, - "unset-value": { - "version": "1.0.0", - "requires": { - "has-value": "^0.3.1", - "isobject": "^3.0.0" - }, - "dependencies": { - "has-value": { - "version": "0.3.1", - "requires": { - "get-value": "^2.0.3", - "has-values": "^0.1.4", - "isobject": "^2.0.0" - }, - "dependencies": { - "isobject": { - "version": "2.1.0", - "requires": { - "isarray": "1.0.0" - } - } - } - }, - "has-values": { - "version": "0.1.4" - } + "rimraf": "^3.0.0" } - }, - "uri-js": { - "version": "4.4.1", + } + } + }, + "convert-svg-to-png": { + "version": "0.6.4", + "resolved": "https://registry.npmjs.org/convert-svg-to-png/-/convert-svg-to-png-0.6.4.tgz", + "integrity": "sha512-zHNTuVedkyuhMl+f+HMm2L7+TKDYCKFAqAmDqUr0dN7/xtgYe76PPAydjlFzeLbzEpGtEfhaA15q+ejpLaVo3g==", + "optional": true, + "requires": { + "convert-svg-core": "^0.6.4" + } + }, + "cookie": { + "version": "0.4.2", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.2.tgz", + "integrity": "sha512-aSWTXFzaKWkvHO1Ny/s+ePFpvKsPnjc551iI41v3ny/ow6tBG5Vd+FuqGNhh1LxOmVzOlGUriIlOaokOvhaStA==" + }, + "cookie-signature": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", + "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==" + }, + "core-util-is": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", + "integrity": "sha512-3lqz5YjWTYnW6dlDa5TLaTCcShfar1e40rmcJVwCBJC6mWlFuj0eCHIElmG1g5kyuJ/GD+8Wn4FFCcz4gJPfaQ==" + }, + "cors": { + "version": "2.8.5", + "resolved": "https://registry.npmjs.org/cors/-/cors-2.8.5.tgz", + "integrity": "sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==", + "requires": { + "object-assign": "^4", + "vary": "^1" + } + }, + "crc": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/crc/-/crc-4.3.2.tgz", + "integrity": "sha512-uGDHf4KLLh2zsHa8D8hIQ1H/HtFQhyHrc0uhHBcoKGol/Xnb+MPYfUMw7cvON6ze/GUESTudKayDcJC5HnJv1A==", + "requires": {} + }, + "crc-32": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/crc-32/-/crc-32-1.2.2.tgz", + "integrity": "sha512-ROmzCKrTnOwybPcJApAA6WBWij23HVfGVNKqqrZpuyZOHqK2CwHSvpGuyt/UNNvaIjEd8X5IFGp4Mh+Ie1IHJQ==" + }, + "create-hash": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/create-hash/-/create-hash-1.2.0.tgz", + "integrity": "sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==", + "requires": { + "cipher-base": "^1.0.1", + "inherits": "^2.0.1", + "md5.js": "^1.3.4", + "ripemd160": "^2.0.1", + "sha.js": "^2.4.0" + } + }, + "create-hmac": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/create-hmac/-/create-hmac-1.1.7.tgz", + "integrity": "sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==", + "requires": { + "cipher-base": "^1.0.3", + "create-hash": "^1.1.0", + "inherits": "^2.0.1", + "ripemd160": "^2.0.0", + "safe-buffer": "^5.0.1", + "sha.js": "^2.4.8" + } + }, + "cross-fetch": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-4.0.0.tgz", + "integrity": "sha512-e4a5N8lVvuLgAWgnCrLr2PP0YyDOTHa9H/Rj54dirp61qXnNq46m82bRhNqIA5VccJtWBvPTFRV3TtvHUKPB1g==", + "requires": { + "node-fetch": "^2.6.12" + } + }, + "cross-spawn": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "peer": true, + "requires": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + } + }, + "crypt": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/crypt/-/crypt-0.0.2.tgz", + "integrity": "sha512-mCxBlsHFYh9C+HVpiEacem8FEBnMXgU9gy4zmNC+SXAZNB/1idgp/aulFJ4FgCi7GPEVbfyng092GqL2k2rmow==" + }, + "crypto-addr-codec": { + "version": "0.1.8", + "resolved": "https://registry.npmjs.org/crypto-addr-codec/-/crypto-addr-codec-0.1.8.tgz", + "integrity": "sha512-GqAK90iLLgP3FvhNmHbpT3wR6dEdaM8hZyZtLX29SPardh3OA13RFLHDR6sntGCgRWOfiHqW6sIyohpNqOtV/g==", + "requires": { + "base-x": "^3.0.8", + "big-integer": "1.6.36", + "blakejs": "^1.1.0", + "bs58": "^4.0.1", + "ripemd160-min": "0.0.6", + "safe-buffer": "^5.2.0", + "sha3": "^2.1.1" + } + }, + "css-select": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/css-select/-/css-select-5.1.0.tgz", + "integrity": "sha512-nwoRF1rvRRnnCqqY7updORDsuqKzqYJ28+oSMaJMMgOauh3fvwHqMS7EZpIPqK8GL+g9mKxF1vP/ZjSeNjEVHg==", + "requires": { + "boolbase": "^1.0.0", + "css-what": "^6.1.0", + "domhandler": "^5.0.2", + "domutils": "^3.0.1", + "nth-check": "^2.0.1" + } + }, + "css-what": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/css-what/-/css-what-6.1.0.tgz", + "integrity": "sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==" + }, + "d": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/d/-/d-1.0.1.tgz", + "integrity": "sha512-m62ShEObQ39CfralilEQRjH6oAMtNCV1xJyEx5LpRYUVN+EviphDgUc/F3hnYbADmkiNs67Y+3ylmlG7Lnu+FA==", + "requires": { + "es5-ext": "^0.10.50", + "type": "^1.0.1" + } + }, + "dashdash": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", + "integrity": "sha512-jRFi8UDGo6j+odZiEpjazZaWqEal3w/basFjQHQEwVtZJGDpxbH1MeYluwCS8Xq5wmLJooDlMgvVarmWfGM44g==", + "requires": { + "assert-plus": "^1.0.0" + } + }, + "debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "requires": { + "ms": "2.1.2" + } + }, + "decamelize": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-4.0.0.tgz", + "integrity": "sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ==" + }, + "decimal.js": { + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.4.3.tgz", + "integrity": "sha512-VBBaLc1MgL5XpzgIP7ny5Z6Nx3UrRkIViUkPUdtl9aya5amy3De1gsUUSB1g3+3sExYNjCAsAznmukyxCb1GRA==" + }, + "decimal.js-light": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/decimal.js-light/-/decimal.js-light-2.5.1.tgz", + "integrity": "sha512-qIMFpTMZmny+MMIitAB6D7iVPEorVw6YQRWkvarTkT4tBeSLLiHzcwj6q0MmYSFCiVpiqPJTJEYIrpcPzVEIvg==" + }, + "decode-uri-component": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.2.tgz", + "integrity": "sha512-FqUYQ+8o158GyGTrMFJms9qh3CqTKvAqgqsTnkLI8sKu0028orqBhxNMFkFen0zGyg6epACD32pjVk58ngIErQ==" + }, + "decomment": { + "version": "0.9.5", + "resolved": "https://registry.npmjs.org/decomment/-/decomment-0.9.5.tgz", + "integrity": "sha512-h0TZ8t6Dp49duwyDHo3iw67mnh9/UpFiSSiOb5gDK1sqoXzrfX/SQxIUQd2R2QEiSnqib0KF2fnKnGfAhAs6lg==", + "requires": { + "esprima": "4.0.1" + } + }, + "decompress-response": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-4.2.1.tgz", + "integrity": "sha512-jOSne2qbyE+/r8G1VU+G/82LBs2Fs4LAsTiLSHOCOMZQl2OKZ6i8i4IyHemTe+/yIXOtTcRQMzPcgyhoFlqPkw==", + "optional": true, + "requires": { + "mimic-response": "^2.0.0" + } + }, + "deep-eql": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-4.1.3.tgz", + "integrity": "sha512-WaEtAOpRA1MQ0eohqZjpGD8zdI0Ovsm8mmFhaDN8dvDZzyoUMcYDnf5Y6iu7HTXxf8JDS23qWa4a+hKCDyOPzw==", + "requires": { + "type-detect": "^4.0.0" + } + }, + "deep-extend": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", + "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==", + "optional": true + }, + "defer-to-connect": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-2.0.1.tgz", + "integrity": "sha512-4tvttepXG1VaYGrRibk5EwJd1t4udunSOVMdLSAL6mId1ix438oPwPZMALY41FCijukO1L0twNcGsdzS7dHgDg==" + }, + "deferred-leveldown": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/deferred-leveldown/-/deferred-leveldown-5.3.0.tgz", + "integrity": "sha512-a59VOT+oDy7vtAbLRCZwWgxu2BaCfd5Hk7wxJd48ei7I+nsg8Orlb9CLG0PMZienk9BSUKgeAqkO2+Lw+1+Ukw==", + "requires": { + "abstract-leveldown": "~6.2.1", + "inherits": "^2.0.3" + }, + "dependencies": { + "abstract-leveldown": { + "version": "6.2.3", + "resolved": "https://registry.npmjs.org/abstract-leveldown/-/abstract-leveldown-6.2.3.tgz", + "integrity": "sha512-BsLm5vFMRUrrLeCcRc+G0t2qOaTzpoJQLOubq2XM72eNpjF5UdU5o/5NvlNhx95XHcAvcl8OMXr4mlg/fRgUXQ==", "requires": { - "punycode": "^2.1.0" + "buffer": "^5.5.0", + "immediate": "^3.2.3", + "level-concat-iterator": "~2.0.0", + "level-supports": "~1.0.0", + "xtend": "~4.0.0" } }, - "urix": { - "version": "0.1.0" - }, - "url-parse-lax": { - "version": "3.0.0", - "optional": true, + "buffer": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", + "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", "requires": { - "prepend-http": "^2.0.0" + "base64-js": "^1.3.1", + "ieee754": "^1.1.13" } }, - "url-set-query": { - "version": "1.0.0", - "optional": true - }, - "url-to-options": { + "level-supports": { "version": "1.0.1", - "optional": true - }, - "use": { - "version": "3.1.1" - }, - "utf-8-validate": { - "version": "5.0.4", + "resolved": "https://registry.npmjs.org/level-supports/-/level-supports-1.0.1.tgz", + "integrity": "sha512-rXM7GYnW8gsl1vedTJIbzOrRv85c/2uCMpiiCzO2fndd06U/kUXEEU9evYn4zFggBOg36IsBW8LzqIpETwwQzg==", "requires": { - "node-gyp-build": "^4.2.0" + "xtend": "^4.0.2" } + } + } + }, + "define-data-property": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.1.tgz", + "integrity": "sha512-E7uGkTzkk1d0ByLeSc6ZsFS79Axg+m1P/VsgYsxHgiuc3tFSj+MjMIwe90FC4lOAZzNBdY7kkO2P2wKdsQ1vgQ==", + "requires": { + "get-intrinsic": "^1.2.1", + "gopd": "^1.0.1", + "has-property-descriptors": "^1.0.0" + } + }, + "define-properties": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.1.tgz", + "integrity": "sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==", + "dev": true, + "requires": { + "define-data-property": "^1.0.1", + "has-property-descriptors": "^1.0.0", + "object-keys": "^1.1.1" + } + }, + "delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==" + }, + "delegates": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", + "integrity": "sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ==", + "optional": true + }, + "depd": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", + "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==" + }, + "destroy": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", + "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==" + }, + "detect-indent": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/detect-indent/-/detect-indent-5.0.0.tgz", + "integrity": "sha512-rlpvsxUtM0PQvy9iZe640/IWwWYyBsTApREbA1pHOpmOUIl9MkP/U4z7vTtg4Oaojvqhxt7sdufnT0EzGaR31g==" + }, + "detect-libc": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-1.0.3.tgz", + "integrity": "sha512-pGjwhsmsp4kL2RTz08wcOlGN83otlqHeD/Z5T8GXZB+/YcpQ/dgo+lbU8ZsGxV0HIvqqxo9l7mqYwyYMD9bKDg==", + "optional": true + }, + "devtools-protocol": { + "version": "0.0.981744", + "resolved": "https://registry.npmjs.org/devtools-protocol/-/devtools-protocol-0.0.981744.tgz", + "integrity": "sha512-0cuGS8+jhR67Fy7qG3i3Pc7Aw494sb9yG9QgpG97SFVWwolgYjlhJg7n+UaHxOQT30d1TYu/EYe9k01ivLErIg==", + "optional": true + }, + "diff": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/diff/-/diff-5.0.0.tgz", + "integrity": "sha512-/VTCrvm5Z0JGty/BWHljh+BAiw3IK+2j87NGMu8Nwc/f48WoDAC395uomO9ZD117ZOBaHmkX1oyLvkVM/aIT3w==" + }, + "dom-serializer": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-2.0.0.tgz", + "integrity": "sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==", + "requires": { + "domelementtype": "^2.3.0", + "domhandler": "^5.0.2", + "entities": "^4.2.0" + } + }, + "dom-walk": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/dom-walk/-/dom-walk-0.1.2.tgz", + "integrity": "sha512-6QvTW9mrGeIegrFXdtQi9pk7O/nSK6lSdXW2eqUspN5LWD7UTji2Fqw5V2YLjBpHEoU9Xl/eUWNpDeZvoyOv2w==" + }, + "domelementtype": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz", + "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==" + }, + "domhandler": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-5.0.3.tgz", + "integrity": "sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==", + "requires": { + "domelementtype": "^2.3.0" + } + }, + "domutils": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-3.1.0.tgz", + "integrity": "sha512-H78uMmQtI2AhgDJjWeQmHwJJ2bLPD3GMmO7Zja/ZZh84wkm+4ut+IUnUdRa8uCGX88DiVx1j6FRe1XfxEgjEZA==", + "requires": { + "dom-serializer": "^2.0.0", + "domelementtype": "^2.3.0", + "domhandler": "^5.0.3" + } + }, + "dot-case": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/dot-case/-/dot-case-2.1.1.tgz", + "integrity": "sha512-HnM6ZlFqcajLsyudHq7LeeLDr2rFAVYtDv/hV5qchQEidSck8j9OPUsXY9KwJv/lHMtYlX4DjRQqwFYa+0r8Ug==", + "requires": { + "no-case": "^2.2.0" + } + }, + "dotenv": { + "version": "16.3.1", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.3.1.tgz", + "integrity": "sha512-IPzF4w4/Rd94bA9imS68tZBaYyBWSCE47V1RGuMrB94iyTOIEwRmVL2x/4An+6mETpLrKJ5hQkB8W4kFAadeIQ==" + }, + "dtrace-provider": { + "version": "0.8.8", + "resolved": "https://registry.npmjs.org/dtrace-provider/-/dtrace-provider-0.8.8.tgz", + "integrity": "sha512-b7Z7cNtHPhH9EJhNNbbeqTcXB8LGFFZhq1PGgEvpeHlzd36bhbdTWoE/Ba/YguqpBSlAPKnARWhVlhunCMwfxg==", + "optional": true, + "requires": { + "nan": "^2.14.0" + } + }, + "eastasianwidth": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", + "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==", + "peer": true + }, + "ecc-jsbn": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", + "integrity": "sha512-eh9O+hwRHNbG4BLTjEl3nw044CkGm5X6LoaCf7LPp7UU8Qrt47JYNi6nPX8xjW97TKGKm1ouctg0QSpZe9qrnw==", + "requires": { + "jsbn": "~0.1.0", + "safer-buffer": "^2.1.0" + } + }, + "ee-first": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", + "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==" + }, + "elliptic": { + "version": "6.5.4", + "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.4.tgz", + "integrity": "sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ==", + "requires": { + "bn.js": "^4.11.9", + "brorand": "^1.1.0", + "hash.js": "^1.0.0", + "hmac-drbg": "^1.0.1", + "inherits": "^2.0.4", + "minimalistic-assert": "^1.0.1", + "minimalistic-crypto-utils": "^1.0.1" + }, + "dependencies": { + "bn.js": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==" + } + } + }, + "emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" + }, + "encode-utf8": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/encode-utf8/-/encode-utf8-1.0.3.tgz", + "integrity": "sha512-ucAnuBEhUK4boH2HjVYG5Q2mQyPorvv0u/ocS+zhdw0S8AlHYY+GOFhP1Gio5z4icpP2ivFSvhtFjQi8+T9ppw==", + "dev": true + }, + "encodeurl": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", + "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==" + }, + "encoding-down": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/encoding-down/-/encoding-down-6.3.0.tgz", + "integrity": "sha512-QKrV0iKR6MZVJV08QY0wp1e7vF6QbhnbQhb07bwpEyuz4uZiZgPlEGdkCROuFkUwdxlFaiPIhjyarH1ee/3vhw==", + "requires": { + "abstract-leveldown": "^6.2.1", + "inherits": "^2.0.3", + "level-codec": "^9.0.0", + "level-errors": "^2.0.0" + } + }, + "end-of-stream": { + "version": "1.4.4", + "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", + "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", + "requires": { + "once": "^1.4.0" + } + }, + "enquirer": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/enquirer/-/enquirer-2.4.1.tgz", + "integrity": "sha512-rRqJg/6gd538VHvR3PSrdRBb/1Vy2YfzHqzvbhGIQpDRKIa4FgV/54b5Q1xYSxOOwKvjXweS26E0Q+nAMwp2pQ==", + "requires": { + "ansi-colors": "^4.1.1", + "strip-ansi": "^6.0.1" + }, + "dependencies": { + "ansi-colors": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.3.tgz", + "integrity": "sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==" }, - "utf8": { - "version": "3.0.0", - "optional": true - }, - "util-deprecate": { - "version": "1.0.2" + "ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==" }, - "util.promisify": { - "version": "1.1.1", + "strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", "requires": { - "call-bind": "^1.0.0", - "define-properties": "^1.1.3", - "for-each": "^0.3.3", - "has-symbols": "^1.0.1", - "object.getownpropertydescriptors": "^2.1.1" + "ansi-regex": "^5.0.1" } + } + } + }, + "entities": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz", + "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==" + }, + "env-paths": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz", + "integrity": "sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==" + }, + "errno": { + "version": "0.1.8", + "resolved": "https://registry.npmjs.org/errno/-/errno-0.1.8.tgz", + "integrity": "sha512-dJ6oBr5SQ1VSd9qkk7ByRgb/1SH4JZjCHSW/mr63/QcXO9zLVxvJ6Oy13nio03rxpSnVDDjFor75SjVeZWPW/A==", + "requires": { + "prr": "~1.0.1" + } + }, + "error-ex": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", + "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", + "requires": { + "is-arrayish": "^0.2.1" + } + }, + "es-abstract": { + "version": "1.22.3", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.22.3.tgz", + "integrity": "sha512-eiiY8HQeYfYH2Con2berK+To6GrK2RxbPawDkGq4UiCQQfZHb6wX9qQqkbpPqaxQFcl8d9QzZqo0tGE0VcrdwA==", + "dev": true, + "requires": { + "array-buffer-byte-length": "^1.0.0", + "arraybuffer.prototype.slice": "^1.0.2", + "available-typed-arrays": "^1.0.5", + "call-bind": "^1.0.5", + "es-set-tostringtag": "^2.0.1", + "es-to-primitive": "^1.2.1", + "function.prototype.name": "^1.1.6", + "get-intrinsic": "^1.2.2", + "get-symbol-description": "^1.0.0", + "globalthis": "^1.0.3", + "gopd": "^1.0.1", + "has-property-descriptors": "^1.0.0", + "has-proto": "^1.0.1", + "has-symbols": "^1.0.3", + "hasown": "^2.0.0", + "internal-slot": "^1.0.5", + "is-array-buffer": "^3.0.2", + "is-callable": "^1.2.7", + "is-negative-zero": "^2.0.2", + "is-regex": "^1.1.4", + "is-shared-array-buffer": "^1.0.2", + "is-string": "^1.0.7", + "is-typed-array": "^1.1.12", + "is-weakref": "^1.0.2", + "object-inspect": "^1.13.1", + "object-keys": "^1.1.1", + "object.assign": "^4.1.4", + "regexp.prototype.flags": "^1.5.1", + "safe-array-concat": "^1.0.1", + "safe-regex-test": "^1.0.0", + "string.prototype.trim": "^1.2.8", + "string.prototype.trimend": "^1.0.7", + "string.prototype.trimstart": "^1.0.7", + "typed-array-buffer": "^1.0.0", + "typed-array-byte-length": "^1.0.0", + "typed-array-byte-offset": "^1.0.0", + "typed-array-length": "^1.0.4", + "unbox-primitive": "^1.0.2", + "which-typed-array": "^1.1.13" + } + }, + "es-set-tostringtag": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.0.2.tgz", + "integrity": "sha512-BuDyupZt65P9D2D2vA/zqcI3G5xRsklm5N3xCwuiy+/vKy8i0ifdsQP1sLgO4tZDSCaQUSnmC48khknGMV3D2Q==", + "dev": true, + "requires": { + "get-intrinsic": "^1.2.2", + "has-tostringtag": "^1.0.0", + "hasown": "^2.0.0" + } + }, + "es-shim-unscopables": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/es-shim-unscopables/-/es-shim-unscopables-1.0.2.tgz", + "integrity": "sha512-J3yBRXCzDu4ULnQwxyToo/OjdMx6akgVC7K6few0a7F/0wLtmKKN7I73AH5T2836UuXRqN7Qg+IIUw/+YJksRw==", + "dev": true, + "requires": { + "hasown": "^2.0.0" + } + }, + "es-to-primitive": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", + "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", + "dev": true, + "requires": { + "is-callable": "^1.1.4", + "is-date-object": "^1.0.1", + "is-symbol": "^1.0.2" + } + }, + "es5-ext": { + "version": "0.10.62", + "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.62.tgz", + "integrity": "sha512-BHLqn0klhEpnOKSrzn/Xsz2UIW8j+cGmo9JLzr8BiUapV8hPL9+FliFqjwr9ngW7jWdnxv6eO+/LqyhJVqgrjA==", + "requires": { + "es6-iterator": "^2.0.3", + "es6-symbol": "^3.1.3", + "next-tick": "^1.1.0" + } + }, + "es6-iterator": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/es6-iterator/-/es6-iterator-2.0.3.tgz", + "integrity": "sha512-zw4SRzoUkd+cl+ZoE15A9o1oQd920Bb0iOJMQkQhl3jNc03YqVjAhG7scf9C5KWRU/R13Orf588uCC6525o02g==", + "requires": { + "d": "1", + "es5-ext": "^0.10.35", + "es6-symbol": "^3.1.1" + } + }, + "es6-promise": { + "version": "4.2.8", + "resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-4.2.8.tgz", + "integrity": "sha512-HJDGx5daxeIvxdBxvG2cb9g4tEvwIk3i8+nhX0yGrYmZUzbkdg8QbDevheDB8gd0//uPj4c1EQua8Q+MViT0/w==" + }, + "es6-symbol": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.3.tgz", + "integrity": "sha512-NJ6Yn3FuDinBaBRWl/q5X/s4koRHBrgKAu+yGI6JCBeiu3qrcbJhwT2GeR/EXVfylRk8dpQVJoLEFhK+Mu31NA==", + "requires": { + "d": "^1.0.1", + "ext": "^1.1.2" + } + }, + "escalade": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", + "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==" + }, + "escape-html": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", + "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==" + }, + "escape-latex": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/escape-latex/-/escape-latex-1.2.0.tgz", + "integrity": "sha512-nV5aVWW1K0wEiUIEdZ4erkGGH8mDxGyxSeqPzRNtWP7ataw+/olFObw7hujFWlVjNsaDFw5VZ5NzVSIqRgfTiw==" + }, + "escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==" + }, + "esm": { + "version": "3.2.25", + "resolved": "https://registry.npmjs.org/esm/-/esm-3.2.25.tgz", + "integrity": "sha512-U1suiZ2oDVWv4zPO56S0NcR5QriEahGtdN2OR6FiOG4WJvcjBVFB0qI4+eKoWFH483PKGuLuu6V8Z4T5g63UVA==" + }, + "esprima": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==" + }, + "etag": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", + "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==" + }, + "eth-ens-namehash": { + "version": "2.0.8", + "resolved": "https://registry.npmjs.org/eth-ens-namehash/-/eth-ens-namehash-2.0.8.tgz", + "integrity": "sha512-VWEI1+KJfz4Km//dadyvBBoBeSQ0MHTXPvr8UIXiLW6IanxvAV+DmlZAijZwAyggqGUfwQBeHf7tc9wzc1piSw==", + "requires": { + "idna-uts46-hx": "^2.3.1", + "js-sha3": "^0.5.7" + }, + "dependencies": { + "js-sha3": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/js-sha3/-/js-sha3-0.5.7.tgz", + "integrity": "sha512-GII20kjaPX0zJ8wzkTbNDYMY7msuZcTWk8S5UOh6806Jq/wz1J8/bnr8uGU0DAUmYDjj2Mr4X1cW8v/GLYnR+g==" + } + } + }, + "eth-gas-reporter": { + "version": "0.2.27", + "resolved": "https://registry.npmjs.org/eth-gas-reporter/-/eth-gas-reporter-0.2.27.tgz", + "integrity": "sha512-femhvoAM7wL0GcI8ozTdxfuBtBFJ9qsyIAsmKVjlWAHUbdnnXHt+lKzz/kmldM5lA9jLuNHGwuIxorNpLbR1Zw==", + "requires": { + "@solidity-parser/parser": "^0.14.0", + "axios": "^1.5.1", + "cli-table3": "^0.5.0", + "colors": "1.4.0", + "ethereum-cryptography": "^1.0.3", + "ethers": "^5.7.2", + "fs-readdir-recursive": "^1.1.0", + "lodash": "^4.17.14", + "markdown-table": "^1.1.3", + "mocha": "^10.2.0", + "req-cwd": "^2.0.0", + "sha1": "^1.1.1", + "sync-request": "^6.0.0" + }, + "dependencies": { + "@noble/hashes": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.2.0.tgz", + "integrity": "sha512-FZfhjEDbT5GRswV3C6uvLPHMiVD6lQBmpoX5+eSiPaMTXte/IKqI5dykDxzZB/WBeK/CDuQRBWarPdi3FNY2zQ==" }, - "utils-merge": { - "version": "1.0.1", - "optional": true - }, - "uuid": { - "version": "3.4.0" - }, - "varint": { - "version": "5.0.2", - "optional": true - }, - "vary": { - "version": "1.1.2", - "optional": true - }, - "verror": { - "version": "1.10.0", + "@scure/bip32": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/@scure/bip32/-/bip32-1.1.5.tgz", + "integrity": "sha512-XyNh1rB0SkEqd3tXcXMi+Xe1fvg+kUIcoRIEujP1Jgv7DqW2r9lg3Ah0NkFaCs9sTkQAQA8kw7xiRXzENi9Rtw==", "requires": { - "assert-plus": "^1.0.0", - "core-util-is": "1.0.2", - "extsprintf": "^1.2.0" + "@noble/hashes": "~1.2.0", + "@noble/secp256k1": "~1.7.0", + "@scure/base": "~1.1.0" } }, - "web3": { - "version": "1.2.11", - "optional": true, + "@scure/bip39": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@scure/bip39/-/bip39-1.1.1.tgz", + "integrity": "sha512-t+wDck2rVkh65Hmv280fYdVdY25J9YeEUIgn2LG1WM6gxFkGzcksoDiUkWVpVp3Oex9xGC68JU2dSbUfwZ2jPg==", "requires": { - "web3-bzz": "1.2.11", - "web3-core": "1.2.11", - "web3-eth": "1.2.11", - "web3-eth-personal": "1.2.11", - "web3-net": "1.2.11", - "web3-shh": "1.2.11", - "web3-utils": "1.2.11" + "@noble/hashes": "~1.2.0", + "@scure/base": "~1.1.0" } }, - "web3-bzz": { - "version": "1.2.11", - "optional": true, + "cli-table3": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/cli-table3/-/cli-table3-0.5.1.tgz", + "integrity": "sha512-7Qg2Jrep1S/+Q3EceiZtQcDPWxhAvBw+ERf1162v4sikJrvojMHFqXt8QIVha8UlH9rgU0BeWPytZ9/TzYqlUw==", "requires": { - "@types/node": "^12.12.6", - "got": "9.6.0", - "swarm-js": "^0.1.40", - "underscore": "1.9.1" - }, - "dependencies": { - "@types/node": { - "version": "12.19.12", - "optional": true - } + "colors": "^1.1.2", + "object-assign": "^4.1.0", + "string-width": "^2.1.1" } }, - "web3-core": { - "version": "1.2.11", - "optional": true, + "ethereum-cryptography": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-1.2.0.tgz", + "integrity": "sha512-6yFQC9b5ug6/17CQpCyE3k9eKBMdhyVjzUy1WkiuY/E4vj/SXDBbCw8QEIaXqf0Mf2SnY6RmpDcwlUmBSS0EJw==", "requires": { - "@types/bn.js": "^4.11.5", - "@types/node": "^12.12.6", - "bignumber.js": "^9.0.0", - "web3-core-helpers": "1.2.11", - "web3-core-method": "1.2.11", - "web3-core-requestmanager": "1.2.11", - "web3-utils": "1.2.11" - }, - "dependencies": { - "@types/node": { - "version": "12.19.12", - "optional": true - } + "@noble/hashes": "1.2.0", + "@noble/secp256k1": "1.7.1", + "@scure/bip32": "1.1.5", + "@scure/bip39": "1.1.1" } }, - "web3-core-helpers": { - "version": "1.2.11", - "optional": true, - "requires": { - "underscore": "1.9.1", - "web3-eth-iban": "1.2.11", - "web3-utils": "1.2.11" + "ethers": { + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/ethers/-/ethers-5.7.2.tgz", + "integrity": "sha512-wswUsmWo1aOK8rR7DIKiWSw9DbLWe6x98Jrn8wcTflTVvaXhAMaB5zGAXy0GYQEQp9iO1iSHWVyARQm11zUtyg==", + "requires": { + "@ethersproject/abi": "5.7.0", + "@ethersproject/abstract-provider": "5.7.0", + "@ethersproject/abstract-signer": "5.7.0", + "@ethersproject/address": "5.7.0", + "@ethersproject/base64": "5.7.0", + "@ethersproject/basex": "5.7.0", + "@ethersproject/bignumber": "5.7.0", + "@ethersproject/bytes": "5.7.0", + "@ethersproject/constants": "5.7.0", + "@ethersproject/contracts": "5.7.0", + "@ethersproject/hash": "5.7.0", + "@ethersproject/hdnode": "5.7.0", + "@ethersproject/json-wallets": "5.7.0", + "@ethersproject/keccak256": "5.7.0", + "@ethersproject/logger": "5.7.0", + "@ethersproject/networks": "5.7.1", + "@ethersproject/pbkdf2": "5.7.0", + "@ethersproject/properties": "5.7.0", + "@ethersproject/providers": "5.7.2", + "@ethersproject/random": "5.7.0", + "@ethersproject/rlp": "5.7.0", + "@ethersproject/sha2": "5.7.0", + "@ethersproject/signing-key": "5.7.0", + "@ethersproject/solidity": "5.7.0", + "@ethersproject/strings": "5.7.0", + "@ethersproject/transactions": "5.7.0", + "@ethersproject/units": "5.7.0", + "@ethersproject/wallet": "5.7.0", + "@ethersproject/web": "5.7.1", + "@ethersproject/wordlists": "5.7.0" } }, - "web3-core-method": { - "version": "1.2.11", - "optional": true, - "requires": { - "@ethersproject/transactions": "^5.0.0-beta.135", - "underscore": "1.9.1", - "web3-core-helpers": "1.2.11", - "web3-core-promievent": "1.2.11", - "web3-core-subscriptions": "1.2.11", - "web3-utils": "1.2.11" - } + "is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha512-VHskAKYM8RfSFXwee5t5cbN5PZeq1Wrh6qd5bkyiXIf6UQcN6w/A0eXM9r6t8d+GYOh+o6ZhiEnb88LN/Y8m2w==" }, - "web3-core-promievent": { - "version": "1.2.11", - "optional": true, + "string-width": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", + "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", "requires": { - "eventemitter3": "4.0.4" + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^4.0.0" } + } + } + }, + "eth-lib": { + "version": "0.1.29", + "resolved": "https://registry.npmjs.org/eth-lib/-/eth-lib-0.1.29.tgz", + "integrity": "sha512-bfttrr3/7gG4E02HoWTDUcDDslN003OlOoBxk9virpAZQ1ja/jDgwkWB8QfJF7ojuEowrqy+lzp9VcJG7/k5bQ==", + "requires": { + "bn.js": "^4.11.6", + "elliptic": "^6.4.0", + "nano-json-stream-parser": "^0.1.2", + "servify": "^0.1.12", + "ws": "^3.0.0", + "xhr-request-promise": "^0.1.2" + }, + "dependencies": { + "bn.js": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==" }, - "web3-core-requestmanager": { - "version": "1.2.11", - "optional": true, - "requires": { - "underscore": "1.9.1", - "web3-core-helpers": "1.2.11", - "web3-providers-http": "1.2.11", - "web3-providers-ipc": "1.2.11", - "web3-providers-ws": "1.2.11" - } + "safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" }, - "web3-core-subscriptions": { - "version": "1.2.11", - "optional": true, + "ws": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/ws/-/ws-3.3.3.tgz", + "integrity": "sha512-nnWLa/NwZSt4KQJu51MYlCcSQ5g7INpOrOMt4XV8j4dqTXdmlUmSHQ8/oLC069ckre0fRsgfvsKwbTdtKLCDkA==", "requires": { - "eventemitter3": "4.0.4", - "underscore": "1.9.1", - "web3-core-helpers": "1.2.11" + "async-limiter": "~1.0.0", + "safe-buffer": "~5.1.0", + "ultron": "~1.1.0" } - }, - "web3-eth": { - "version": "1.2.11", - "optional": true, + } + } + }, + "ethereum-bloom-filters": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/ethereum-bloom-filters/-/ethereum-bloom-filters-1.0.10.tgz", + "integrity": "sha512-rxJ5OFN3RwjQxDcFP2Z5+Q9ho4eIdEmSc2ht0fCu8Se9nbXjZ7/031uXoUYJ87KHCOdVeiUuwSnoS7hmYAGVHA==", + "requires": { + "js-sha3": "^0.8.0" + } + }, + "ethereum-cryptography": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-2.1.2.tgz", + "integrity": "sha512-Z5Ba0T0ImZ8fqXrJbpHcbpAvIswRte2wGNR/KePnu8GbbvgJ47lMxT/ZZPG6i9Jaht4azPDop4HaM00J0J59ug==", + "requires": { + "@noble/curves": "1.1.0", + "@noble/hashes": "1.3.1", + "@scure/bip32": "1.3.1", + "@scure/bip39": "1.2.1" + } + }, + "ethereum-ens": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/ethereum-ens/-/ethereum-ens-0.8.0.tgz", + "integrity": "sha512-a8cBTF4AWw1Q1Y37V1LSCS9pRY4Mh3f8vCg5cbXCCEJ3eno1hbI/+Ccv9SZLISYpqQhaglP3Bxb/34lS4Qf7Bg==", + "requires": { + "bluebird": "^3.4.7", + "eth-ens-namehash": "^2.0.0", + "js-sha3": "^0.5.7", + "pako": "^1.0.4", + "underscore": "^1.8.3", + "web3": "^1.0.0-beta.34" + }, + "dependencies": { + "js-sha3": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/js-sha3/-/js-sha3-0.5.7.tgz", + "integrity": "sha512-GII20kjaPX0zJ8wzkTbNDYMY7msuZcTWk8S5UOh6806Jq/wz1J8/bnr8uGU0DAUmYDjj2Mr4X1cW8v/GLYnR+g==" + } + } + }, + "ethereumjs-abi": { + "version": "0.6.8", + "resolved": "https://registry.npmjs.org/ethereumjs-abi/-/ethereumjs-abi-0.6.8.tgz", + "integrity": "sha512-Tx0r/iXI6r+lRsdvkFDlut0N08jWMnKRZ6Gkq+Nmw75lZe4e6o3EkSnkaBP5NF6+m5PTGAr9JP43N3LyeoglsA==", + "requires": { + "bn.js": "^4.11.8", + "ethereumjs-util": "^6.0.0" + }, + "dependencies": { + "@types/bn.js": { + "version": "4.11.6", + "resolved": "https://registry.npmjs.org/@types/bn.js/-/bn.js-4.11.6.tgz", + "integrity": "sha512-pqr857jrp2kPuO9uRjZ3PwnJTjoQy+fcdxvBTvHm6dkmEL9q+hDD/2j/0ELOBPtPnS8LjCX0gI9nbl8lVkadpg==", "requires": { - "underscore": "1.9.1", - "web3-core": "1.2.11", - "web3-core-helpers": "1.2.11", - "web3-core-method": "1.2.11", - "web3-core-subscriptions": "1.2.11", - "web3-eth-abi": "1.2.11", - "web3-eth-accounts": "1.2.11", - "web3-eth-contract": "1.2.11", - "web3-eth-ens": "1.2.11", - "web3-eth-iban": "1.2.11", - "web3-eth-personal": "1.2.11", - "web3-net": "1.2.11", - "web3-utils": "1.2.11" + "@types/node": "*" } }, - "web3-eth-abi": { - "version": "1.2.11", - "optional": true, - "requires": { - "@ethersproject/abi": "5.0.0-beta.153", - "underscore": "1.9.1", - "web3-utils": "1.2.11" - } + "bn.js": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==" }, - "web3-eth-accounts": { - "version": "1.2.11", - "optional": true, + "ethereum-cryptography": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-0.1.3.tgz", + "integrity": "sha512-w8/4x1SGGzc+tO97TASLja6SLd3fRIK2tLVcV2Gx4IB21hE19atll5Cq9o3d0ZmAYC/8aw0ipieTSiekAea4SQ==", "requires": { - "crypto-browserify": "3.12.0", - "eth-lib": "0.2.8", - "ethereumjs-common": "^1.3.2", - "ethereumjs-tx": "^2.1.1", - "scrypt-js": "^3.0.1", - "underscore": "1.9.1", - "uuid": "3.3.2", - "web3-core": "1.2.11", - "web3-core-helpers": "1.2.11", - "web3-core-method": "1.2.11", - "web3-utils": "1.2.11" - }, - "dependencies": { - "eth-lib": { - "version": "0.2.8", - "optional": true, - "requires": { - "bn.js": "^4.11.6", - "elliptic": "^6.4.0", - "xhr-request-promise": "^0.1.2" - } - }, - "uuid": { - "version": "3.3.2", - "optional": true - } + "@types/pbkdf2": "^3.0.0", + "@types/secp256k1": "^4.0.1", + "blakejs": "^1.1.0", + "browserify-aes": "^1.2.0", + "bs58check": "^2.1.2", + "create-hash": "^1.2.0", + "create-hmac": "^1.1.7", + "hash.js": "^1.1.7", + "keccak": "^3.0.0", + "pbkdf2": "^3.0.17", + "randombytes": "^2.1.0", + "safe-buffer": "^5.1.2", + "scrypt-js": "^3.0.0", + "secp256k1": "^4.0.1", + "setimmediate": "^1.0.5" } }, - "web3-eth-contract": { - "version": "1.2.11", - "optional": true, + "ethereumjs-util": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-6.2.1.tgz", + "integrity": "sha512-W2Ktez4L01Vexijrm5EB6w7dg4n/TgpoYU4avuT5T3Vmnw/eCRtiBrJfQYS/DCSvDIOLn2k57GcHdeBcgVxAqw==", "requires": { - "@types/bn.js": "^4.11.5", - "underscore": "1.9.1", - "web3-core": "1.2.11", - "web3-core-helpers": "1.2.11", - "web3-core-method": "1.2.11", - "web3-core-promievent": "1.2.11", - "web3-core-subscriptions": "1.2.11", - "web3-eth-abi": "1.2.11", - "web3-utils": "1.2.11" + "@types/bn.js": "^4.11.3", + "bn.js": "^4.11.0", + "create-hash": "^1.1.2", + "elliptic": "^6.5.2", + "ethereum-cryptography": "^0.1.3", + "ethjs-util": "0.1.6", + "rlp": "^2.2.3" } - }, - "web3-eth-ens": { - "version": "1.2.11", - "optional": true, + } + } + }, + "ethereumjs-common": { + "version": "1.5.2", + "resolved": "https://registry.npmjs.org/ethereumjs-common/-/ethereumjs-common-1.5.2.tgz", + "integrity": "sha512-hTfZjwGX52GS2jcVO6E2sx4YuFnf0Fhp5ylo4pEPhEffNln7vS59Hr5sLnp3/QCazFLluuBZ+FZ6J5HTp0EqCA==" + }, + "ethereumjs-tx": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ethereumjs-tx/-/ethereumjs-tx-2.1.2.tgz", + "integrity": "sha512-zZEK1onCeiORb0wyCXUvg94Ve5It/K6GD1K+26KfFKodiBiS6d9lfCXlUKGBBdQ+bv7Day+JK0tj1K+BeNFRAw==", + "requires": { + "ethereumjs-common": "^1.5.0", + "ethereumjs-util": "^6.0.0" + }, + "dependencies": { + "@types/bn.js": { + "version": "4.11.6", + "resolved": "https://registry.npmjs.org/@types/bn.js/-/bn.js-4.11.6.tgz", + "integrity": "sha512-pqr857jrp2kPuO9uRjZ3PwnJTjoQy+fcdxvBTvHm6dkmEL9q+hDD/2j/0ELOBPtPnS8LjCX0gI9nbl8lVkadpg==", "requires": { - "content-hash": "^2.5.2", - "eth-ens-namehash": "2.0.8", - "underscore": "1.9.1", - "web3-core": "1.2.11", - "web3-core-helpers": "1.2.11", - "web3-core-promievent": "1.2.11", - "web3-eth-abi": "1.2.11", - "web3-eth-contract": "1.2.11", - "web3-utils": "1.2.11" + "@types/node": "*" } }, - "web3-eth-iban": { - "version": "1.2.11", - "optional": true, - "requires": { - "bn.js": "^4.11.9", - "web3-utils": "1.2.11" - } + "bn.js": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==" }, - "web3-eth-personal": { - "version": "1.2.11", - "optional": true, + "ethereum-cryptography": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-0.1.3.tgz", + "integrity": "sha512-w8/4x1SGGzc+tO97TASLja6SLd3fRIK2tLVcV2Gx4IB21hE19atll5Cq9o3d0ZmAYC/8aw0ipieTSiekAea4SQ==", "requires": { - "@types/node": "^12.12.6", - "web3-core": "1.2.11", - "web3-core-helpers": "1.2.11", - "web3-core-method": "1.2.11", - "web3-net": "1.2.11", - "web3-utils": "1.2.11" - }, - "dependencies": { - "@types/node": { - "version": "12.19.12", - "optional": true - } + "@types/pbkdf2": "^3.0.0", + "@types/secp256k1": "^4.0.1", + "blakejs": "^1.1.0", + "browserify-aes": "^1.2.0", + "bs58check": "^2.1.2", + "create-hash": "^1.2.0", + "create-hmac": "^1.1.7", + "hash.js": "^1.1.7", + "keccak": "^3.0.0", + "pbkdf2": "^3.0.17", + "randombytes": "^2.1.0", + "safe-buffer": "^5.1.2", + "scrypt-js": "^3.0.0", + "secp256k1": "^4.0.1", + "setimmediate": "^1.0.5" } }, - "web3-net": { - "version": "1.2.11", - "optional": true, + "ethereumjs-util": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-6.2.1.tgz", + "integrity": "sha512-W2Ktez4L01Vexijrm5EB6w7dg4n/TgpoYU4avuT5T3Vmnw/eCRtiBrJfQYS/DCSvDIOLn2k57GcHdeBcgVxAqw==", "requires": { - "web3-core": "1.2.11", - "web3-core-method": "1.2.11", - "web3-utils": "1.2.11" - } - }, - "web3-provider-engine": { - "version": "14.2.1", - "requires": { - "async": "^2.5.0", - "backoff": "^2.5.0", - "clone": "^2.0.0", - "cross-fetch": "^2.1.0", - "eth-block-tracker": "^3.0.0", - "eth-json-rpc-infura": "^3.1.0", - "eth-sig-util": "3.0.0", - "ethereumjs-block": "^1.2.2", - "ethereumjs-tx": "^1.2.0", - "ethereumjs-util": "^5.1.5", - "ethereumjs-vm": "^2.3.4", - "json-rpc-error": "^2.0.0", - "json-stable-stringify": "^1.0.1", - "promise-to-callback": "^1.0.0", - "readable-stream": "^2.2.9", - "request": "^2.85.0", - "semaphore": "^1.0.3", - "ws": "^5.1.1", - "xhr": "^2.2.0", - "xtend": "^4.0.1" - }, - "dependencies": { - "abstract-leveldown": { - "version": "2.6.3", - "requires": { - "xtend": "~4.0.0" - } - }, - "deferred-leveldown": { - "version": "1.2.2", - "requires": { - "abstract-leveldown": "~2.6.0" - } - }, - "eth-sig-util": { - "version": "1.4.2", - "requires": { - "ethereumjs-abi": "git+https://github.com/ethereumjs/ethereumjs-abi.git", - "ethereumjs-util": "^5.1.1" - } - }, - "ethereumjs-account": { - "version": "2.0.5", - "requires": { - "ethereumjs-util": "^5.0.0", - "rlp": "^2.0.0", - "safe-buffer": "^5.1.1" - } - }, - "ethereumjs-block": { - "version": "1.7.1", - "requires": { - "async": "^2.0.1", - "ethereum-common": "0.2.0", - "ethereumjs-tx": "^1.2.2", - "ethereumjs-util": "^5.0.0", - "merkle-patricia-tree": "^2.1.2" - }, - "dependencies": { - "ethereum-common": { - "version": "0.2.0" - } - } - }, - "ethereumjs-tx": { - "version": "1.3.7", - "requires": { - "ethereum-common": "^0.0.18", - "ethereumjs-util": "^5.0.0" - } - }, - "ethereumjs-util": { - "version": "5.2.1", - "requires": { - "bn.js": "^4.11.0", - "create-hash": "^1.1.2", - "elliptic": "^6.5.2", - "ethereum-cryptography": "^0.1.3", - "ethjs-util": "^0.1.3", - "rlp": "^2.0.0", - "safe-buffer": "^5.1.1" - } - }, - "ethereumjs-vm": { - "version": "2.6.0", - "requires": { - "async": "^2.1.2", - "async-eventemitter": "^0.2.2", - "ethereumjs-account": "^2.0.3", - "ethereumjs-block": "~2.2.0", - "ethereumjs-common": "^1.1.0", - "ethereumjs-util": "^6.0.0", - "fake-merkle-patricia-tree": "^1.0.1", - "functional-red-black-tree": "^1.0.1", - "merkle-patricia-tree": "^2.3.2", - "rustbn.js": "~0.2.0", - "safe-buffer": "^5.1.1" - }, - "dependencies": { - "ethereumjs-block": { - "version": "2.2.2", - "requires": { - "async": "^2.0.1", - "ethereumjs-common": "^1.5.0", - "ethereumjs-tx": "^2.1.1", - "ethereumjs-util": "^5.0.0", - "merkle-patricia-tree": "^2.1.2" - }, - "dependencies": { - "ethereumjs-util": { - "version": "5.2.1", - "requires": { - "bn.js": "^4.11.0", - "create-hash": "^1.1.2", - "elliptic": "^6.5.2", - "ethereum-cryptography": "^0.1.3", - "ethjs-util": "^0.1.3", - "rlp": "^2.0.0", - "safe-buffer": "^5.1.1" - } - } - } - }, - "ethereumjs-tx": { - "version": "2.1.2", - "requires": { - "ethereumjs-common": "^1.5.0", - "ethereumjs-util": "^6.0.0" - } - }, - "ethereumjs-util": { - "version": "6.2.1", - "requires": { - "@types/bn.js": "^4.11.3", - "bn.js": "^4.11.0", - "create-hash": "^1.1.2", - "elliptic": "^6.5.2", - "ethereum-cryptography": "^0.1.3", - "ethjs-util": "0.1.6", - "rlp": "^2.2.3" - } - } - } - }, - "isarray": { - "version": "0.0.1" - }, - "level-codec": { - "version": "7.0.1" - }, - "level-errors": { - "version": "1.0.5", - "requires": { - "errno": "~0.1.1" - } - }, - "level-iterator-stream": { - "version": "1.3.1", - "requires": { - "inherits": "^2.0.1", - "level-errors": "^1.0.3", - "readable-stream": "^1.0.33", - "xtend": "^4.0.0" - }, - "dependencies": { - "readable-stream": { - "version": "1.1.14", - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.1", - "isarray": "0.0.1", - "string_decoder": "~0.10.x" - } - } - } - }, - "level-ws": { - "version": "0.0.0", - "requires": { - "readable-stream": "~1.0.15", - "xtend": "~2.1.1" - }, - "dependencies": { - "readable-stream": { - "version": "1.0.34", - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.1", - "isarray": "0.0.1", - "string_decoder": "~0.10.x" - } - }, - "xtend": { - "version": "2.1.2", - "requires": { - "object-keys": "~0.4.0" - } - } - } - }, - "levelup": { - "version": "1.3.9", - "requires": { - "deferred-leveldown": "~1.2.1", - "level-codec": "~7.0.0", - "level-errors": "~1.0.3", - "level-iterator-stream": "~1.3.0", - "prr": "~1.0.1", - "semver": "~5.4.1", - "xtend": "~4.0.0" - } - }, - "ltgt": { - "version": "2.2.1" - }, - "memdown": { - "version": "1.4.1", - "requires": { - "abstract-leveldown": "~2.7.1", - "functional-red-black-tree": "^1.0.1", - "immediate": "^3.2.3", - "inherits": "~2.0.1", - "ltgt": "~2.2.0", - "safe-buffer": "~5.1.1" - }, - "dependencies": { - "abstract-leveldown": { - "version": "2.7.2", - "requires": { - "xtend": "~4.0.0" - } - } - } - }, - "merkle-patricia-tree": { - "version": "2.3.2", - "requires": { - "async": "^1.4.2", - "ethereumjs-util": "^5.0.0", - "level-ws": "0.0.0", - "levelup": "^1.2.1", - "memdown": "^1.0.0", - "readable-stream": "^2.0.0", - "rlp": "^2.0.0", - "semaphore": ">=1.0.1" - }, - "dependencies": { - "async": { - "version": "1.5.2" - } - } - }, - "object-keys": { - "version": "0.4.0" - }, - "safe-buffer": { - "version": "5.1.2" - }, - "semver": { - "version": "5.4.1" - }, - "string_decoder": { - "version": "0.10.31" - }, - "ws": { - "version": "5.2.2", - "requires": { - "async-limiter": "~1.0.0" - } - } + "@types/bn.js": "^4.11.3", + "bn.js": "^4.11.0", + "create-hash": "^1.1.2", + "elliptic": "^6.5.2", + "ethereum-cryptography": "^0.1.3", + "ethjs-util": "0.1.6", + "rlp": "^2.2.3" } - }, - "web3-providers-http": { - "version": "1.2.11", - "optional": true, + } + } + }, + "ethereumjs-util": { + "version": "7.1.5", + "resolved": "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-7.1.5.tgz", + "integrity": "sha512-SDl5kKrQAudFBUe5OJM9Ac6WmMyYmXX/6sTmLZ3ffG2eY6ZIGBes3pEDxNN6V72WyOw4CPD5RomKdsa8DAAwLg==", + "requires": { + "@types/bn.js": "^5.1.0", + "bn.js": "^5.1.2", + "create-hash": "^1.1.2", + "ethereum-cryptography": "^0.1.3", + "rlp": "^2.2.4" + }, + "dependencies": { + "ethereum-cryptography": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-0.1.3.tgz", + "integrity": "sha512-w8/4x1SGGzc+tO97TASLja6SLd3fRIK2tLVcV2Gx4IB21hE19atll5Cq9o3d0ZmAYC/8aw0ipieTSiekAea4SQ==", "requires": { - "web3-core-helpers": "1.2.11", - "xhr2-cookies": "1.1.0" + "@types/pbkdf2": "^3.0.0", + "@types/secp256k1": "^4.0.1", + "blakejs": "^1.1.0", + "browserify-aes": "^1.2.0", + "bs58check": "^2.1.2", + "create-hash": "^1.2.0", + "create-hmac": "^1.1.7", + "hash.js": "^1.1.7", + "keccak": "^3.0.0", + "pbkdf2": "^3.0.17", + "randombytes": "^2.1.0", + "safe-buffer": "^5.1.2", + "scrypt-js": "^3.0.0", + "secp256k1": "^4.0.1", + "setimmediate": "^1.0.5" } - }, - "web3-providers-ipc": { - "version": "1.2.11", - "optional": true, + } + } + }, + "ethers": { + "version": "6.9.2", + "resolved": "https://registry.npmjs.org/ethers/-/ethers-6.9.2.tgz", + "integrity": "sha512-YpkrtILnMQz5jSEsJQRTpduaGT/CXuLnUIuOYzHA0v/7c8IX91m2J48wSKjzGL5L9J/Us3tLoUdb+OwE3U+FFQ==", + "dev": true, + "requires": { + "@adraffy/ens-normalize": "1.10.0", + "@noble/curves": "1.2.0", + "@noble/hashes": "1.3.2", + "@types/node": "18.15.13", + "aes-js": "4.0.0-beta.5", + "tslib": "2.4.0", + "ws": "8.5.0" + }, + "dependencies": { + "@noble/curves": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@noble/curves/-/curves-1.2.0.tgz", + "integrity": "sha512-oYclrNgRaM9SsBUBVbb8M6DTV7ZHRTKugureoYEncY5c65HOmRzvSiTE3y5CYaPYJA/GVkrhXEoF0M3Ya9PMnw==", + "dev": true, "requires": { - "oboe": "2.1.4", - "underscore": "1.9.1", - "web3-core-helpers": "1.2.11" + "@noble/hashes": "1.3.2" } }, - "web3-providers-ws": { - "version": "1.2.11", - "optional": true, + "@noble/hashes": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.3.2.tgz", + "integrity": "sha512-MVC8EAQp7MvEcm30KWENFjgR+Mkmf+D189XJTkFIlwohU5hcBbn1ZkKq7KVTi2Hme3PMGF390DaL52beVrIihQ==", + "dev": true + }, + "@types/node": { + "version": "18.15.13", + "resolved": "https://registry.npmjs.org/@types/node/-/node-18.15.13.tgz", + "integrity": "sha512-N+0kuo9KgrUQ1Sn/ifDXsvg0TTleP7rIy4zOBGECxAljqvqfqpTfzx0Q1NUedOixRMBfe2Whhb056a42cWs26Q==", + "dev": true + }, + "tslib": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.0.tgz", + "integrity": "sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ==", + "dev": true + } + } + }, + "ethjs-abi": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/ethjs-abi/-/ethjs-abi-0.2.1.tgz", + "integrity": "sha512-g2AULSDYI6nEJyJaEVEXtTimRY2aPC2fi7ddSy0W+LXvEVL8Fe1y76o43ecbgdUKwZD+xsmEgX1yJr1Ia3r1IA==", + "dev": true, + "requires": { + "bn.js": "4.11.6", + "js-sha3": "0.5.5", + "number-to-bn": "1.7.0" + }, + "dependencies": { + "bn.js": { + "version": "4.11.6", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.6.tgz", + "integrity": "sha512-XWwnNNFCuuSQ0m3r3C4LE3EiORltHd9M05pq6FOlVeiophzRbMo50Sbz1ehl8K3Z+jw9+vmgnXefY1hz8X+2wA==", + "dev": true + }, + "js-sha3": { + "version": "0.5.5", + "resolved": "https://registry.npmjs.org/js-sha3/-/js-sha3-0.5.5.tgz", + "integrity": "sha512-yLLwn44IVeunwjpDVTDZmQeVbB0h+dZpY2eO68B/Zik8hu6dH+rKeLxwua79GGIvW6xr8NBAcrtiUbYrTjEFTA==", + "dev": true + } + } + }, + "ethjs-unit": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/ethjs-unit/-/ethjs-unit-0.1.6.tgz", + "integrity": "sha512-/Sn9Y0oKl0uqQuvgFk/zQgR7aw1g36qX/jzSQ5lSwlO0GigPymk4eGQfeNTD03w1dPOqfz8V77Cy43jH56pagw==", + "requires": { + "bn.js": "4.11.6", + "number-to-bn": "1.7.0" + }, + "dependencies": { + "bn.js": { + "version": "4.11.6", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.6.tgz", + "integrity": "sha512-XWwnNNFCuuSQ0m3r3C4LE3EiORltHd9M05pq6FOlVeiophzRbMo50Sbz1ehl8K3Z+jw9+vmgnXefY1hz8X+2wA==" + } + } + }, + "ethjs-util": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/ethjs-util/-/ethjs-util-0.1.6.tgz", + "integrity": "sha512-CUnVOQq7gSpDHZVVrQW8ExxUETWrnrvXYvYz55wOU8Uj4VCgw56XC2B/fVqQN+f7gmrnRHSLVnFAwsCuNwji8w==", + "requires": { + "is-hex-prefixed": "1.0.0", + "strip-hex-prefix": "1.0.0" + } + }, + "eventemitter3": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.4.tgz", + "integrity": "sha512-rlaVLnVxtxvoyLsQQFBx53YmXHDxRIzzTLbdfxqi4yocpSjAxXwkU0cScM5JgSKMqEhrZpnvQ2D9gjylR0AimQ==" + }, + "events": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", + "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==" + }, + "evm-bn": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/evm-bn/-/evm-bn-1.1.2.tgz", + "integrity": "sha512-Lq8CT1EAjSeN+Yk0h1hpSwnZyMA4Xir6fQD4vlStljAuW2xr7qLOEGDLGsTa9sU2e40EYIumA4wYhMC/e+lyKw==", + "requires": { + "@ethersproject/bignumber": "^5.5.0", + "from-exponential": "^1.1.1" + } + }, + "evp_bytestokey": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz", + "integrity": "sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==", + "requires": { + "md5.js": "^1.3.4", + "safe-buffer": "^5.1.1" + } + }, + "expand-template": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/expand-template/-/expand-template-2.0.3.tgz", + "integrity": "sha512-XYfuKMvj4O35f/pOXLObndIRvyQ+/+6AhODh+OKWj9S9498pHHn/IMszH+gt0fBCRWMNfk1ZSp5x3AifmnI2vg==", + "optional": true + }, + "express": { + "version": "4.18.2", + "resolved": "https://registry.npmjs.org/express/-/express-4.18.2.tgz", + "integrity": "sha512-5/PsL6iGPdfQ/lKM1UuielYgv3BUoJfz1aUwU9vHZ+J7gyvwdQXFEBIEIaxeGf0GIcreATNyBExtalisDbuMqQ==", + "requires": { + "accepts": "~1.3.8", + "array-flatten": "1.1.1", + "body-parser": "1.20.1", + "content-disposition": "0.5.4", + "content-type": "~1.0.4", + "cookie": "0.5.0", + "cookie-signature": "1.0.6", + "debug": "2.6.9", + "depd": "2.0.0", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "finalhandler": "1.2.0", + "fresh": "0.5.2", + "http-errors": "2.0.0", + "merge-descriptors": "1.0.1", + "methods": "~1.1.2", + "on-finished": "2.4.1", + "parseurl": "~1.3.3", + "path-to-regexp": "0.1.7", + "proxy-addr": "~2.0.7", + "qs": "6.11.0", + "range-parser": "~1.2.1", + "safe-buffer": "5.2.1", + "send": "0.18.0", + "serve-static": "1.15.0", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "type-is": "~1.6.18", + "utils-merge": "1.0.1", + "vary": "~1.1.2" + }, + "dependencies": { + "body-parser": { + "version": "1.20.1", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.1.tgz", + "integrity": "sha512-jWi7abTbYwajOytWCQc37VulmWiRae5RyTpaCyDcS5/lMdtwSz5lOpDE67srw/HYe35f1z3fDQw+3txg7gNtWw==", "requires": { - "eventemitter3": "4.0.4", - "underscore": "1.9.1", - "web3-core-helpers": "1.2.11", - "websocket": "^1.0.31" + "bytes": "3.1.2", + "content-type": "~1.0.4", + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "1.2.0", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", + "on-finished": "2.4.1", + "qs": "6.11.0", + "raw-body": "2.5.1", + "type-is": "~1.6.18", + "unpipe": "1.0.0" } }, - "web3-shh": { - "version": "1.2.11", - "optional": true, + "cookie": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.5.0.tgz", + "integrity": "sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==" + }, + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", "requires": { - "web3-core": "1.2.11", - "web3-core-method": "1.2.11", - "web3-core-subscriptions": "1.2.11", - "web3-net": "1.2.11" + "ms": "2.0.0" } }, - "web3-utils": { - "version": "1.2.11", - "optional": true, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" + }, + "qs": { + "version": "6.11.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz", + "integrity": "sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==", "requires": { - "bn.js": "^4.11.9", - "eth-lib": "0.2.8", - "ethereum-bloom-filters": "^1.0.6", - "ethjs-unit": "0.1.6", - "number-to-bn": "1.7.0", - "randombytes": "^2.1.0", - "underscore": "1.9.1", - "utf8": "3.0.0" - }, - "dependencies": { - "eth-lib": { - "version": "0.2.8", - "optional": true, - "requires": { - "bn.js": "^4.11.6", - "elliptic": "^6.4.0", - "xhr-request-promise": "^0.1.2" - } - } + "side-channel": "^1.0.4" } }, - "websocket": { - "version": "1.0.32", + "raw-body": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.1.tgz", + "integrity": "sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig==", "requires": { - "bufferutil": "^4.0.1", - "debug": "^2.2.0", - "es5-ext": "^0.10.50", - "typedarray-to-buffer": "^3.1.5", - "utf-8-validate": "^5.0.2", - "yaeti": "^0.0.6" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "requires": { - "ms": "2.0.0" - } - }, - "ms": { - "version": "2.0.0" - } + "bytes": "3.1.2", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", + "unpipe": "1.0.0" } - }, - "whatwg-fetch": { - "version": "2.0.4" - }, - "wrappy": { - "version": "1.0.2" - }, - "ws": { - "version": "3.3.3", - "optional": true, + } + } + }, + "ext": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/ext/-/ext-1.7.0.tgz", + "integrity": "sha512-6hxeJYaL110a9b5TEJSj0gojyHQAmA2ch5Os+ySCiA1QGdS697XWY1pzsrSjqA9LDEEgdB/KypIlR59RcLuHYw==", + "requires": { + "type": "^2.7.2" + }, + "dependencies": { + "type": { + "version": "2.7.2", + "resolved": "https://registry.npmjs.org/type/-/type-2.7.2.tgz", + "integrity": "sha512-dzlvlNlt6AXU7EBSfpAscydQ7gXB+pPGsPnfJnZpiNJBDj7IaJzQlBZYGdEi4R9HmPdBv2XmWJ6YUtoTa7lmCw==" + } + } + }, + "extend": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", + "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==" + }, + "extract-zip": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extract-zip/-/extract-zip-2.0.1.tgz", + "integrity": "sha512-GDhU9ntwuKyGXdZBUgTIe+vXnWj0fppUEtMDL0+idd5Sta8TGpHssn/eusA9mrPr9qNDym6SxAYZjNvCn/9RBg==", + "optional": true, + "requires": { + "@types/yauzl": "^2.9.1", + "debug": "^4.1.1", + "get-stream": "^5.1.0", + "yauzl": "^2.10.0" + } + }, + "extsprintf": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", + "integrity": "sha512-11Ndz7Nv+mvAC1j0ktTa7fAb0vLyGGX+rMHNBYQviQDGU0Hw7lhctJANqbPhu9nV9/izT/IntTgZ7Im/9LJs9g==" + }, + "fast-base64-decode": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fast-base64-decode/-/fast-base64-decode-1.0.0.tgz", + "integrity": "sha512-qwaScUgUGBYeDNRnbc/KyllVU88Jk1pRHPStuF/lO7B0/RTRLj7U0lkdTAutlBblY08rwZDff6tNU9cjv6j//Q==", + "dev": true + }, + "fast-check": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/fast-check/-/fast-check-3.1.1.tgz", + "integrity": "sha512-3vtXinVyuUKCKFKYcwXhGE6NtGWkqF8Yh3rvMZNzmwz8EPrgoc/v4pDdLHyLnCyCI5MZpZZkDEwFyXyEONOxpA==", + "requires": { + "pure-rand": "^5.0.1" + } + }, + "fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==" + }, + "fast-json-stable-stringify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==" + }, + "fd-slicer": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.1.0.tgz", + "integrity": "sha512-cE1qsB/VwyQozZ+q1dGxR8LBYNZeofhEdUNGSMbQD3Gw2lAzX9Zb3uIU6Ebc/Fmyjo9AWWfnn0AUCHqtevs/8g==", + "optional": true, + "requires": { + "pend": "~1.2.0" + } + }, + "file-uri-to-path": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz", + "integrity": "sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==", + "optional": true + }, + "file-url": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/file-url/-/file-url-3.0.0.tgz", + "integrity": "sha512-g872QGsHexznxkIAdK8UiZRe7SkE6kvylShU4Nsj8NvfvZag7S0QuQ4IgvPDkk75HxgjIVDwycFTDAgIiO4nDA==", + "optional": true + }, + "fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "requires": { + "to-regex-range": "^5.0.1" + } + }, + "finalhandler": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.2.0.tgz", + "integrity": "sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==", + "requires": { + "debug": "2.6.9", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "on-finished": "2.4.1", + "parseurl": "~1.3.3", + "statuses": "2.0.1", + "unpipe": "~1.0.0" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", "requires": { - "async-limiter": "~1.0.0", - "safe-buffer": "~5.1.0", - "ultron": "~1.1.0" - }, - "dependencies": { - "safe-buffer": { - "version": "5.1.2", - "optional": true - } + "ms": "2.0.0" } }, - "xhr": { - "version": "2.6.0", + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" + } + } + }, + "find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "devOptional": true, + "requires": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + } + }, + "find-yarn-workspace-root": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/find-yarn-workspace-root/-/find-yarn-workspace-root-2.0.0.tgz", + "integrity": "sha512-1IMnbjt4KzsQfnhnzNd8wUEgXZ44IzZaZmnLYx7D5FZlaHt2gW20Cri8Q+E/t5tIj4+epTBub+2Zxu/vNILzqQ==", + "requires": { + "micromatch": "^4.0.2" + } + }, + "flat": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz", + "integrity": "sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==" + }, + "fmix": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/fmix/-/fmix-0.1.0.tgz", + "integrity": "sha512-Y6hyofImk9JdzU8k5INtTXX1cu8LDlePWDFU5sftm9H+zKCr5SGrVjdhkvsim646cw5zD0nADj8oHyXMZmCZ9w==", + "dev": true, + "requires": { + "imul": "^1.0.0" + } + }, + "follow-redirects": { + "version": "1.15.4", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.4.tgz", + "integrity": "sha512-Cr4D/5wlrb0z9dgERpUL3LrmPKVDsETIJhaCMeDfuFYcqa5bldGV6wBsAN6X/vxlXQtFBMrXdXxdL8CbDTGniw==" + }, + "for-each": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz", + "integrity": "sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==", + "requires": { + "is-callable": "^1.1.3" + } + }, + "foreground-child": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.1.1.tgz", + "integrity": "sha512-TMKDUnIte6bfb5nWv7V/caI169OHgvwjb7V4WkeUvbQQdjr5rWKqHFiKWb/fcOwB+CzBT+qbWjvj+DVwRskpIg==", + "peer": true, + "requires": { + "cross-spawn": "^7.0.0", + "signal-exit": "^4.0.1" + } + }, + "forever-agent": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", + "integrity": "sha512-j0KLYPhm6zeac4lz3oJ3o65qvgQCcPubiyotZrXqEaG4hNagNYO8qdlUrX5vwqv9ohqeT/Z3j6+yW067yWWdUw==" + }, + "form-data": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz", + "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==", + "requires": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "mime-types": "^2.1.12" + } + }, + "form-data-encoder": { + "version": "1.7.1", + "resolved": "https://registry.npmjs.org/form-data-encoder/-/form-data-encoder-1.7.1.tgz", + "integrity": "sha512-EFRDrsMm/kyqbTQocNvRXMLjc7Es2Vk+IQFx/YW7hkUH1eBl4J1fqiP34l74Yt0pFLCNpc06fkbVk00008mzjg==" + }, + "forwarded": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", + "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==" + }, + "fp-ts": { + "version": "1.19.3", + "resolved": "https://registry.npmjs.org/fp-ts/-/fp-ts-1.19.3.tgz", + "integrity": "sha512-H5KQDspykdHuztLTg+ajGN0Z2qUjcEf3Ybxc6hLt0k7/zPkn29XnKnxlBPyW2XIddWrGaJBzBl4VLYOtk39yZg==" + }, + "fraction.js": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.3.4.tgz", + "integrity": "sha512-pwiTgt0Q7t+GHZA4yaLjObx4vXmmdcS0iSJ19o8d/goUGgItX9UZWKWNnLHehxviD8wU2IWRsnR8cD5+yOJP2Q==" + }, + "fresh": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", + "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==" + }, + "from-exponential": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/from-exponential/-/from-exponential-1.1.1.tgz", + "integrity": "sha512-VBE7f5OVnYwdgB3LHa+Qo29h8qVpxhVO9Trlc+AWm+/XNAgks1tAwMFHb33mjeiof77GglsJzeYF7OqXrROP/A==" + }, + "fs-constants": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz", + "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==", + "optional": true + }, + "fs-extra": { + "version": "11.2.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.2.0.tgz", + "integrity": "sha512-PmDi3uwK5nFuXh7XDTlVnS17xJS7vW36is2+w3xcv8SVxiB4NyATf4ctkVY5bkSjX0Y4nbvZCq1/EjtEyr9ktw==", + "requires": { + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + } + }, + "fs-minipass": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-1.2.7.tgz", + "integrity": "sha512-GWSSJGFy4e9GUeCcbIkED+bgAoFyj7XF1mV8rma3QW4NIqX9Kyx79N/PF61H5udOV3aY1IaMLs6pGbH71nlCTA==", + "requires": { + "minipass": "^2.6.0" + }, + "dependencies": { + "minipass": { + "version": "2.9.0", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-2.9.0.tgz", + "integrity": "sha512-wxfUjg9WebH+CUDX/CdbRlh5SmfZiy/hpkxaRI16Y9W56Pa75sWgd/rvFilSgrauD9NyFymP/+JFV3KwzIsJeg==", "requires": { - "global": "~4.4.0", - "is-function": "^1.0.1", - "parse-headers": "^2.0.0", - "xtend": "^4.0.0" + "safe-buffer": "^5.1.2", + "yallist": "^3.0.0" } + } + } + }, + "fs-readdir-recursive": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/fs-readdir-recursive/-/fs-readdir-recursive-1.1.0.tgz", + "integrity": "sha512-GNanXlVr2pf02+sPN40XN8HG+ePaNcvM0q5mZBd668Obwb0yD5GiUbZOFgwn8kGMY6I3mdyDJzieUy3PTYyTRA==" + }, + "fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==" + }, + "fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "optional": true + }, + "function-bind": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==" + }, + "function.prototype.name": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.6.tgz", + "integrity": "sha512-Z5kx79swU5P27WEayXM1tBi5Ze/lbIyiNgU3qyXUOf9b2rgXYyF9Dy9Cx+IQv/Lc8WCG6L82zwUPpSS9hGehIg==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", + "functions-have-names": "^1.2.3" + } + }, + "functional-red-black-tree": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", + "integrity": "sha512-dsKNQNdj6xA3T+QlADDA7mOSlX0qiMINjn0cgr+eGHGsbSHzTabcIogz2+p/iqP1Xs6EP/sS2SbqH+brGTbq0g==" + }, + "functions-have-names": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz", + "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==", + "dev": true + }, + "gauge": { + "version": "2.7.4", + "resolved": "https://registry.npmjs.org/gauge/-/gauge-2.7.4.tgz", + "integrity": "sha512-14x4kjc6lkD3ltw589k0NrPD6cCNTD6CWoVUNpB85+DrtONoZn+Rug6xZU5RvSC4+TZPxA5AnBibQYAvZn41Hg==", + "optional": true, + "requires": { + "aproba": "^1.0.3", + "console-control-strings": "^1.0.0", + "has-unicode": "^2.0.0", + "object-assign": "^4.1.0", + "signal-exit": "^3.0.0", + "string-width": "^1.0.1", + "strip-ansi": "^3.0.1", + "wide-align": "^1.1.0" + }, + "dependencies": { + "ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA==", + "optional": true }, - "xhr-request": { - "version": "1.1.0", + "is-fullwidth-code-point": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", + "integrity": "sha512-1pqUqRjkhPJ9miNq9SwMfdvi6lBJcd6eFxvfaivQhaH3SgisfiuudvFntdKOmxuee/77l+FPjKrQjWvmPjWrRw==", "optional": true, "requires": { - "buffer-to-arraybuffer": "^0.0.5", - "object-assign": "^4.1.1", - "query-string": "^5.0.1", - "simple-get": "^2.7.0", - "timed-out": "^4.0.1", - "url-set-query": "^1.0.0", - "xhr": "^2.0.4" + "number-is-nan": "^1.0.0" } }, - "xhr-request-promise": { - "version": "0.1.3", + "signal-exit": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", + "optional": true + }, + "string-width": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", + "integrity": "sha512-0XsVpQLnVCXHJfyEs8tC0zpTVIr5PKKsQtkT29IwupnPTjtPmQ3xT/4yCREF9hYkV/3M3kzcUTSAZT6a6h81tw==", "optional": true, "requires": { - "xhr-request": "^1.1.0" + "code-point-at": "^1.0.0", + "is-fullwidth-code-point": "^1.0.0", + "strip-ansi": "^3.0.0" } }, - "xhr2-cookies": { - "version": "1.1.0", + "strip-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha512-VhumSSbBqDTP8p2ZLKj40UjBCV4+v8bUSEpUb4KjRgWk9pbqGF4REFj6KEagidb2f/M6AzC0EmFyDNGaw9OCzg==", "optional": true, "requires": { - "cookiejar": "^2.1.1" + "ansi-regex": "^2.0.0" } - }, - "xtend": { - "version": "4.0.2" - }, - "yaeti": { - "version": "0.0.6" - }, - "yallist": { - "version": "3.1.1" } } }, - "gensync": { - "version": "1.0.0-beta.2", - "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", - "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", - "peer": true - }, "get-caller-file": { "version": "2.0.5", "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==" }, "get-func-name": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/get-func-name/-/get-func-name-2.0.0.tgz", - "integrity": "sha512-Hm0ixYtaSZ/V7C8FJrtZIuBBI+iSgL+1Aq82zSu8VQNB4S3Gk8e7Qs3VwBDJAhmRZcFqkl3tQu36g/Foh5I5ig==" + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/get-func-name/-/get-func-name-2.0.2.tgz", + "integrity": "sha512-8vXOvuE167CtIc3OyItco7N/dpRtBbYOsPsXCz7X/PMnlGjYjSGuZJgM1Y7mmew7BKf9BqvLX2tnOVy1BBUsxQ==" }, "get-intrinsic": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.3.tgz", - "integrity": "sha512-QJVz1Tj7MS099PevUG5jvnt9tSkXN8K14dxQlikJuPt4uD9hHAHjLyLBiLR5zELelBdD9QNRAXZzsJx0WaDL9A==", + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.2.tgz", + "integrity": "sha512-0gSo4ml/0j98Y3lngkFEot/zhiCeWsbYIlZ+uZOVgzLyLaUw7wxUL+nCTP0XJvJg1AXulJRI3UJi8GsbDuxdGA==", "requires": { - "function-bind": "^1.1.1", - "has": "^1.0.3", - "has-symbols": "^1.0.3" + "function-bind": "^1.1.2", + "has-proto": "^1.0.1", + "has-symbols": "^1.0.3", + "hasown": "^2.0.0" } }, "get-port": { @@ -55704,14 +23088,18 @@ "optional": true }, "get-stream": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", - "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==" + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", + "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", + "requires": { + "pump": "^3.0.0" + } }, "get-symbol-description": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.0.tgz", "integrity": "sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==", + "dev": true, "requires": { "call-bind": "^1.0.2", "get-intrinsic": "^1.1.1" @@ -55725,16 +23113,23 @@ "assert-plus": "^1.0.0" } }, + "github-from-package": { + "version": "0.0.0", + "resolved": "https://registry.npmjs.org/github-from-package/-/github-from-package-0.0.0.tgz", + "integrity": "sha512-SyHy3T1v2NUXn29OsWdxmK6RwHD+vkj3v8en8AOBZ1wBQ/hCAQ5bAQTD02kW4W9tUp/3Qh6J8r9EvntiyCmOOw==", + "optional": true + }, "glob": { - "version": "8.0.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-8.0.3.tgz", - "integrity": "sha512-ull455NHSHI/Y1FqGaaYFaLGkNMMJbavMrEGFXG/PGrg6y7sutWHUHrz6gy6WEBH6akM1M414dWKCNs+IhKdiQ==", + "version": "10.3.10", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.3.10.tgz", + "integrity": "sha512-fa46+tv1Ak0UPK1TOy/pZrIybNNt4HCv7SDzwyfiOZkvZLEbjsZkJBPtDHVshZjbecAoAGSC20MjLDG/qr679g==", + "peer": true, "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^5.0.1", - "once": "^1.3.0" + "foreground-child": "^3.1.0", + "jackspeak": "^2.3.5", + "minimatch": "^9.0.1", + "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0", + "path-scurry": "^1.10.1" } }, "glob-parent": { @@ -55762,11 +23157,22 @@ "process": "^0.11.10" } }, - "globals": { - "version": "11.12.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", - "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", - "peer": true + "globalthis": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.3.tgz", + "integrity": "sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA==", + "dev": true, + "requires": { + "define-properties": "^1.1.3" + } + }, + "gopd": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", + "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", + "requires": { + "get-intrinsic": "^1.1.3" + } }, "got": { "version": "12.1.0", @@ -55796,6 +23202,11 @@ "mimic-response": "^3.1.0" } }, + "get-stream": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", + "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==" + }, "mimic-response": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-3.1.0.tgz", @@ -55804,29 +23215,9 @@ } }, "graceful-fs": { - "version": "4.2.10", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz", - "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==" - }, - "graphql": { - "version": "15.8.0", - "resolved": "https://registry.npmjs.org/graphql/-/graphql-15.8.0.tgz", - "integrity": "sha512-5gghUc24tP9HRznNpV2+FIoq3xKkj5dTQqf4v0CpdPbFVwFkWoxOM+o+2OC9ZSvjEMTjfmG9QT+gcvggTwW1zw==", - "optional": true - }, - "graphql-tag": { - "version": "2.12.6", - "resolved": "https://registry.npmjs.org/graphql-tag/-/graphql-tag-2.12.6.tgz", - "integrity": "sha512-FdSNcu2QQcWnM2VNvSCCDCVS5PpPqpzgFT8+GXzqJuoDd0CBncxCY278u4mhRO7tMgo2JjgJA5aZ+nWSQ/Z+xg==", - "optional": true, - "requires": { - "tslib": "^2.1.0" - } - }, - "growl": { - "version": "1.10.5", - "resolved": "https://registry.npmjs.org/growl/-/growl-1.10.5.tgz", - "integrity": "sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA==" + "version": "4.2.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", + "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==" }, "har-schema": { "version": "2.0.0", @@ -55843,9 +23234,9 @@ } }, "hardhat": { - "version": "2.17.3", - "resolved": "https://registry.npmjs.org/hardhat/-/hardhat-2.17.3.tgz", - "integrity": "sha512-SFZoYVXW1bWJZrIIKXOA+IgcctfuKXDwENywiYNT2dM3YQc4fXNaTbuk/vpPzHIF50upByx4zW5EqczKYQubsA==", + "version": "2.19.4", + "resolved": "https://registry.npmjs.org/hardhat/-/hardhat-2.19.4.tgz", + "integrity": "sha512-fTQJpqSt3Xo9Mn/WrdblNGAfcANM6XC3tAEi6YogB4s02DmTf93A8QsGb8uR0KR8TFcpcS8lgiW4ugAIYpnbrQ==", "requires": { "@ethersproject/abi": "^5.1.2", "@metamask/eth-sig-util": "^4.0.0", @@ -55897,6 +23288,30 @@ "ws": "^7.4.6" }, "dependencies": { + "@noble/hashes": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.2.0.tgz", + "integrity": "sha512-FZfhjEDbT5GRswV3C6uvLPHMiVD6lQBmpoX5+eSiPaMTXte/IKqI5dykDxzZB/WBeK/CDuQRBWarPdi3FNY2zQ==" + }, + "@scure/bip32": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/@scure/bip32/-/bip32-1.1.5.tgz", + "integrity": "sha512-XyNh1rB0SkEqd3tXcXMi+Xe1fvg+kUIcoRIEujP1Jgv7DqW2r9lg3Ah0NkFaCs9sTkQAQA8kw7xiRXzENi9Rtw==", + "requires": { + "@noble/hashes": "~1.2.0", + "@noble/secp256k1": "~1.7.0", + "@scure/base": "~1.1.0" + } + }, + "@scure/bip39": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@scure/bip39/-/bip39-1.1.1.tgz", + "integrity": "sha512-t+wDck2rVkh65Hmv280fYdVdY25J9YeEUIgn2LG1WM6gxFkGzcksoDiUkWVpVp3Oex9xGC68JU2dSbUfwZ2jPg==", + "requires": { + "@noble/hashes": "~1.2.0", + "@scure/base": "~1.1.0" + } + }, "ansi-styles": { "version": "3.2.1", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", @@ -55947,6 +23362,17 @@ "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==" }, + "ethereum-cryptography": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-1.2.0.tgz", + "integrity": "sha512-6yFQC9b5ug6/17CQpCyE3k9eKBMdhyVjzUy1WkiuY/E4vj/SXDBbCw8QEIaXqf0Mf2SnY6RmpDcwlUmBSS0EJw==", + "requires": { + "@noble/hashes": "1.2.0", + "@noble/secp256k1": "1.7.1", + "@scure/bip32": "1.1.5", + "@scure/bip39": "1.1.1" + } + }, "find-up": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", @@ -55991,6 +23417,14 @@ "graceful-fs": "^4.1.6" } }, + "klaw": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/klaw/-/klaw-1.3.1.tgz", + "integrity": "sha512-TED5xi9gGQjGpNnvRWknrwAB1eL5GciPfVFOt3Vk1OJCVDQbzuSfrF3hkUQKlsgKrG1F+0t5W0m+Fje1jIt8rw==", + "requires": { + "graceful-fs": "^4.1.9" + } + }, "locate-path": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", @@ -56034,10 +23468,15 @@ "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", "integrity": "sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==" }, + "require-from-string": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", + "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==" + }, "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==" }, "solc": { "version": "0.7.3", @@ -56076,9 +23515,9 @@ } }, "semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", + "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==" } } }, @@ -56129,9 +23568,9 @@ } }, "hardhat-deploy": { - "version": "0.11.37", - "resolved": "https://registry.npmjs.org/hardhat-deploy/-/hardhat-deploy-0.11.37.tgz", - "integrity": "sha512-pohPSEEo/X9Yfv0Fc0kXBQW6JO0LNOILBGCP69Ci1COJvLht1hLjAtXt/hccyvD9qY/uwJAM75fmsf41Y9N7lg==", + "version": "0.11.45", + "resolved": "https://registry.npmjs.org/hardhat-deploy/-/hardhat-deploy-0.11.45.tgz", + "integrity": "sha512-aC8UNaq3JcORnEUIwV945iJuvBwi65tjHVDU3v6mOcqik7WAzHVCJ7cwmkkipsHrWysrB5YvGF1q9S1vIph83w==", "dev": true, "requires": { "@ethersproject/abi": "^5.7.0", @@ -56151,7 +23590,7 @@ "chokidar": "^3.5.2", "debug": "^4.3.2", "enquirer": "^2.3.6", - "ethers": "^5.5.3", + "ethers": "^5.7.0", "form-data": "^4.0.0", "fs-extra": "^10.0.0", "match-all": "^1.2.6", @@ -56160,15 +23599,51 @@ "zksync-web3": "^0.14.3" }, "dependencies": { - "form-data": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz", - "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==", + "axios": { + "version": "0.21.4", + "resolved": "https://registry.npmjs.org/axios/-/axios-0.21.4.tgz", + "integrity": "sha512-ut5vewkiu8jjGBdqpM44XxjuCjq9LAKeHVmoVfHVzy8eHgxxq8SbAVQNovDA8mVi05kP0Ea/n/UzcSHcTJQfNg==", "dev": true, "requires": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.8", - "mime-types": "^2.1.12" + "follow-redirects": "^1.14.0" + } + }, + "ethers": { + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/ethers/-/ethers-5.7.2.tgz", + "integrity": "sha512-wswUsmWo1aOK8rR7DIKiWSw9DbLWe6x98Jrn8wcTflTVvaXhAMaB5zGAXy0GYQEQp9iO1iSHWVyARQm11zUtyg==", + "dev": true, + "requires": { + "@ethersproject/abi": "5.7.0", + "@ethersproject/abstract-provider": "5.7.0", + "@ethersproject/abstract-signer": "5.7.0", + "@ethersproject/address": "5.7.0", + "@ethersproject/base64": "5.7.0", + "@ethersproject/basex": "5.7.0", + "@ethersproject/bignumber": "5.7.0", + "@ethersproject/bytes": "5.7.0", + "@ethersproject/constants": "5.7.0", + "@ethersproject/contracts": "5.7.0", + "@ethersproject/hash": "5.7.0", + "@ethersproject/hdnode": "5.7.0", + "@ethersproject/json-wallets": "5.7.0", + "@ethersproject/keccak256": "5.7.0", + "@ethersproject/logger": "5.7.0", + "@ethersproject/networks": "5.7.1", + "@ethersproject/pbkdf2": "5.7.0", + "@ethersproject/properties": "5.7.0", + "@ethersproject/providers": "5.7.2", + "@ethersproject/random": "5.7.0", + "@ethersproject/rlp": "5.7.0", + "@ethersproject/sha2": "5.7.0", + "@ethersproject/signing-key": "5.7.0", + "@ethersproject/solidity": "5.7.0", + "@ethersproject/strings": "5.7.0", + "@ethersproject/transactions": "5.7.0", + "@ethersproject/units": "5.7.0", + "@ethersproject/wallet": "5.7.0", + "@ethersproject/web": "5.7.1", + "@ethersproject/wordlists": "5.7.0" } }, "fs-extra": { @@ -56181,6 +23656,13 @@ "jsonfile": "^6.0.1", "universalify": "^2.0.0" } + }, + "zksync-web3": { + "version": "0.14.4", + "resolved": "https://registry.npmjs.org/zksync-web3/-/zksync-web3-0.14.4.tgz", + "integrity": "sha512-kYehMD/S6Uhe1g434UnaMN+sBr9nQm23Ywn0EUP5BfQCsbjcr3ORuS68PosZw8xUTu3pac7G6YMSnNHk+fwzvg==", + "dev": true, + "requires": {} } } }, @@ -56195,19 +23677,58 @@ } }, "hardhat-spdx-license-identifier": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/hardhat-spdx-license-identifier/-/hardhat-spdx-license-identifier-2.1.0.tgz", - "integrity": "sha512-Z3Avr/v6lfDfa7qkriF/h40X8wmuy8qZfS4HgbINkDdmCiKAxQUi5Y5TgsJBZFYN1MvYzLTIbD/fo1dxZ4gsng==", + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/hardhat-spdx-license-identifier/-/hardhat-spdx-license-identifier-2.2.0.tgz", + "integrity": "sha512-audxGrmLL/TGr0Ef/p3tEH8frtygCb+9RWbMQtd1w2p5V6HzQsSJUlAJFywZZ/igQ6B1qAKqAbeLePNclEe2Qw==", "requires": {} }, "hardhat-tracer": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/hardhat-tracer/-/hardhat-tracer-2.6.0.tgz", - "integrity": "sha512-omsGd9NN5i0WmIFuEVZIxULfu5v6zU4/Vx+6oIVmziIJdQgZacmP5VmtVhnJEQd7IPDZNQAa+iBbW827g/ErFQ==", + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/hardhat-tracer/-/hardhat-tracer-2.7.0.tgz", + "integrity": "sha512-H+30jj6bCyX7NfhY7Umbzq535jhi9Wd5fGNli9qWcQ+5iOB477Nm8XdGtPtgOV1vQ7VQzIwKFzoEbqy+BuxTlg==", "requires": { "chalk": "^4.1.2", "debug": "^4.3.4", "ethers": "^5.6.1" + }, + "dependencies": { + "ethers": { + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/ethers/-/ethers-5.7.2.tgz", + "integrity": "sha512-wswUsmWo1aOK8rR7DIKiWSw9DbLWe6x98Jrn8wcTflTVvaXhAMaB5zGAXy0GYQEQp9iO1iSHWVyARQm11zUtyg==", + "requires": { + "@ethersproject/abi": "5.7.0", + "@ethersproject/abstract-provider": "5.7.0", + "@ethersproject/abstract-signer": "5.7.0", + "@ethersproject/address": "5.7.0", + "@ethersproject/base64": "5.7.0", + "@ethersproject/basex": "5.7.0", + "@ethersproject/bignumber": "5.7.0", + "@ethersproject/bytes": "5.7.0", + "@ethersproject/constants": "5.7.0", + "@ethersproject/contracts": "5.7.0", + "@ethersproject/hash": "5.7.0", + "@ethersproject/hdnode": "5.7.0", + "@ethersproject/json-wallets": "5.7.0", + "@ethersproject/keccak256": "5.7.0", + "@ethersproject/logger": "5.7.0", + "@ethersproject/networks": "5.7.1", + "@ethersproject/pbkdf2": "5.7.0", + "@ethersproject/properties": "5.7.0", + "@ethersproject/providers": "5.7.2", + "@ethersproject/random": "5.7.0", + "@ethersproject/rlp": "5.7.0", + "@ethersproject/sha2": "5.7.0", + "@ethersproject/signing-key": "5.7.0", + "@ethersproject/solidity": "5.7.0", + "@ethersproject/strings": "5.7.0", + "@ethersproject/transactions": "5.7.0", + "@ethersproject/units": "5.7.0", + "@ethersproject/wallet": "5.7.0", + "@ethersproject/web": "5.7.1", + "@ethersproject/wordlists": "5.7.0" + } + } } }, "hardhat-watcher": { @@ -56218,18 +23739,11 @@ "chokidar": "^3.5.3" } }, - "has": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", - "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", - "requires": { - "function-bind": "^1.1.1" - } - }, "has-bigints": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.2.tgz", - "integrity": "sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==" + "integrity": "sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==", + "dev": true }, "has-flag": { "version": "4.0.0", @@ -56237,31 +23751,23 @@ "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" }, "has-property-descriptors": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz", - "integrity": "sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.1.tgz", + "integrity": "sha512-VsX8eaIewvas0xnvinAe9bw4WfIeODpGYikiWYLH+dma0Jw6KHYqWiWfhQlgOVK8D6PvjubK5Uc4P0iIhIcNVg==", "requires": { - "get-intrinsic": "^1.1.1" + "get-intrinsic": "^1.2.2" } }, - "has-symbol-support-x": { - "version": "1.4.2", - "resolved": "https://registry.npmjs.org/has-symbol-support-x/-/has-symbol-support-x-1.4.2.tgz", - "integrity": "sha512-3ToOva++HaW+eCpgqZrCfN51IPB+7bJNVT6CUATzueB5Heb8o6Nam0V3HG5dlDvZU1Gn5QLcbahiKw/XVk5JJw==" + "has-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.1.tgz", + "integrity": "sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==" }, "has-symbols": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==" }, - "has-to-string-tag-x": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/has-to-string-tag-x/-/has-to-string-tag-x-1.4.1.tgz", - "integrity": "sha512-vdbKfmw+3LoOYVr+mtxHaX5a96+0f3DljYd8JOqvOLsf5mw2Otda2qCDT9qRqLAhrjyQ0h7ual5nOiASpsGNFw==", - "requires": { - "has-symbol-support-x": "^1.4.1" - } - }, "has-tostringtag": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz", @@ -56270,6 +23776,12 @@ "has-symbols": "^1.0.2" } }, + "has-unicode": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", + "integrity": "sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ==", + "optional": true + }, "hash-base": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.1.0.tgz", @@ -56289,6 +23801,14 @@ "minimalistic-assert": "^1.0.1" } }, + "hasown": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.0.tgz", + "integrity": "sha512-vUptKVTpIJhcczKBbgnS+RtcuYMB8+oNzPK2/Hp3hanz8JmpATdmmgLgSaadVREkDm+e2giHwY3ZRkyjSIDDFA==", + "requires": { + "function-bind": "^1.1.2" + } + }, "he": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", @@ -56306,14 +23826,12 @@ "highlight.js": { "version": "10.7.3", "resolved": "https://registry.npmjs.org/highlight.js/-/highlight.js-10.7.3.tgz", - "integrity": "sha512-tzcUFauisWKNHaRkN4Wjl/ZA07gENAjFl3J/c480dprkGTg5EQstgaNFqBfUqCq54kZRIEcreTsAgF/m2quD7A==", - "dev": true + "integrity": "sha512-tzcUFauisWKNHaRkN4Wjl/ZA07gENAjFl3J/c480dprkGTg5EQstgaNFqBfUqCq54kZRIEcreTsAgF/m2quD7A==" }, "highlightjs-solidity": { "version": "2.0.6", "resolved": "https://registry.npmjs.org/highlightjs-solidity/-/highlightjs-solidity-2.0.6.tgz", - "integrity": "sha512-DySXWfQghjm2l6a/flF+cteroJqD4gI8GSdL4PtvxZSsAHie8m3yVe2JFoRg03ROKT6hp2Lc/BxXkqerNmtQYg==", - "dev": true + "integrity": "sha512-DySXWfQghjm2l6a/flF+cteroJqD4gI8GSdL4PtvxZSsAHie8m3yVe2JFoRg03ROKT6hp2Lc/BxXkqerNmtQYg==" }, "hmac-drbg": { "version": "1.0.1", @@ -56331,15 +23849,14 @@ "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==" }, "htmlparser2": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-8.0.1.tgz", - "integrity": "sha512-4lVbmc1diZC7GUJQtRQ5yBAeUCL1exyMwmForWkRLnwyzWBFxN633SALPMGYaWZvKe9j1pRZJpauvmxENSp/EA==", - "devOptional": true, + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-8.0.2.tgz", + "integrity": "sha512-GYdjWKDkbRLkZ5geuHs5NY1puJ+PXwP7+fHPRz06Eirsb9ugf6d8kkXav6ADhcODhFFPMIXyxkxSuMf3D6NCFA==", "requires": { "domelementtype": "^2.3.0", - "domhandler": "^5.0.2", + "domhandler": "^5.0.3", "domutils": "^3.0.1", - "entities": "^4.3.0" + "entities": "^4.4.0" } }, "http-basic": { @@ -56401,9 +23918,9 @@ } }, "http2-wrapper": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/http2-wrapper/-/http2-wrapper-2.2.0.tgz", - "integrity": "sha512-kZB0wxMo0sh1PehyjJUWRFEd99KC5TLjZ2cULC4f9iqJBAmKQQXEICjxl5iPJRwP40dpeHFqqhm7tYCvODpqpQ==", + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/http2-wrapper/-/http2-wrapper-2.2.1.tgz", + "integrity": "sha512-V5nVw1PAOgfI3Lmeaj2Exmeg7fenjhRUgz1lPSezy1CuhPYbgQtbQj4jZfEAEMlaL+vupsvhjqCyjzob0yxsmQ==", "requires": { "quick-lru": "^5.1.1", "resolve-alpn": "^1.2.0" @@ -56423,14 +23940,6 @@ "debug": "4" } }, - "humanize-ms": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/humanize-ms/-/humanize-ms-1.2.1.tgz", - "integrity": "sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ==", - "requires": { - "ms": "^2.0.0" - } - }, "iconv-lite": { "version": "0.4.24", "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", @@ -56452,20 +23961,15 @@ "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==" }, - "ignore-by-default": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/ignore-by-default/-/ignore-by-default-1.0.1.tgz", - "integrity": "sha512-Ius2VYcGNk7T90CppJqcIkS5ooHUZyIQK+ClZfMfMNFEF9VSE73Fq+906u/CWu92x4gzZMWOwfFYckPObzdEbA==" - }, "immediate": { "version": "3.3.0", "resolved": "https://registry.npmjs.org/immediate/-/immediate-3.3.0.tgz", "integrity": "sha512-HR7EVodfFUdQCTIeySw+WDRFJlPcLOJbXfwwZ7Oom6tjsvZ3bOkCDJHehQC3nxJrv7+f9XecwazynjU8e4Vw3Q==" }, "immutable": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/immutable/-/immutable-4.1.0.tgz", - "integrity": "sha512-oNkuqVTA8jqG1Q6c+UglTOD1xhC1BtjKI7XkCXRkZHrN5m18/XsnUp8Q89GkQO/z+0WjonSvl0FLhDYftp46nQ==" + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/immutable/-/immutable-4.3.4.tgz", + "integrity": "sha512-fsXeu4J4i6WNWSikpI88v/PcVflZz+6kMhUfIwc5SY+poQRPnaf5V7qds6SUyUN3cVxEzuCab7QIoLOQ+DQ1wA==" }, "imul": { "version": "1.0.1", @@ -56492,13 +23996,20 @@ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" }, + "ini": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", + "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", + "optional": true + }, "internal-slot": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.3.tgz", - "integrity": "sha512-O0DB1JC/sPyZl7cIo78n5dR7eUSwwpYPiXRhTzNxZVAMUuB8vlnRFyLxdrVToks6XPLVnFfbzaVd5WLjhgg+vA==", + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.6.tgz", + "integrity": "sha512-Xj6dv+PsbtwyPpEflsejS+oIZxmMlV44zAhG479uYu89MsjcYOhCFnNyKrkJrihbsiasQyY0afoCl/9BLR65bg==", + "dev": true, "requires": { - "get-intrinsic": "^1.1.0", - "has": "^1.0.3", + "get-intrinsic": "^1.2.2", + "hasown": "^2.0.0", "side-channel": "^1.0.4" } }, @@ -56537,6 +24048,17 @@ "has-tostringtag": "^1.0.0" } }, + "is-array-buffer": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.2.tgz", + "integrity": "sha512-y+FyyR/w8vfIRq4eQcM1EYgSTnmHXPqaF+IgzgraytCFq5Xh8lllDVmAZolPJiZttZLeFSINPYMaEJ7/vWUa1w==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.2.0", + "is-typed-array": "^1.1.10" + } + }, "is-arrayish": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", @@ -56546,6 +24068,7 @@ "version": "1.0.4", "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz", "integrity": "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==", + "dev": true, "requires": { "has-bigints": "^1.0.1" } @@ -56562,6 +24085,7 @@ "version": "1.1.2", "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz", "integrity": "sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==", + "dev": true, "requires": { "call-bind": "^1.0.2", "has-tostringtag": "^1.0.0" @@ -56589,6 +24113,7 @@ "version": "1.0.5", "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz", "integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==", + "dev": true, "requires": { "has-tostringtag": "^1.0.0" } @@ -56603,11 +24128,6 @@ "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==" }, - "is-fn": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-fn/-/is-fn-1.0.0.tgz", - "integrity": "sha512-XoFPJQmsAShb3jEQRfzf2rqXavq7fIqF/jOekp308JlThqrODnMpweVSGilKTCXELfLhltGP2AGgbQGVP8F1dg==" - }, "is-fullwidth-code-point": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", @@ -56647,15 +24167,11 @@ "lower-case": "^1.1.0" } }, - "is-natural-number": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/is-natural-number/-/is-natural-number-4.0.1.tgz", - "integrity": "sha512-Y4LTamMe0DDQIIAlaer9eKebAlDSV6huy+TWhJVPlzZh2o4tRP5SQWFlLn5N0To4mDD22/qdOq+veo1cSISLgQ==" - }, "is-negative-zero": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.2.tgz", - "integrity": "sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==" + "integrity": "sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==", + "dev": true }, "is-number": { "version": "7.0.0", @@ -56666,62 +24182,40 @@ "version": "1.0.7", "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.7.tgz", "integrity": "sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==", + "dev": true, "requires": { "has-tostringtag": "^1.0.0" } }, - "is-obj": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-2.0.0.tgz", - "integrity": "sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==", - "optional": true - }, - "is-object": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-object/-/is-object-1.0.2.tgz", - "integrity": "sha512-2rRIahhZr2UWb45fIOuvZGpFtz0TyOZLf32KxBbSoUCeZR495zCKlWUKKUByk3geS2eAs7ZAABt0Y/Rx0GiQGA==" - }, "is-plain-obj": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz", "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==" }, - "is-promise": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-2.2.2.tgz", - "integrity": "sha512-+lP4/6lKUBfQjZ2pdxThZvLUAafmZb8OAxFb8XXtiQmS35INgr85hdOGoEs124ez1FCnZJt6jau/T+alh58QFQ==" - }, "is-regex": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==", + "dev": true, "requires": { "call-bind": "^1.0.2", "has-tostringtag": "^1.0.0" } }, - "is-retry-allowed": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/is-retry-allowed/-/is-retry-allowed-1.2.0.tgz", - "integrity": "sha512-RUbUeKwvm3XG2VYamhJL1xFktgjvPzL0Hq8C+6yrWIswDy3BIXGqCxhxkc30N9jqK311gVU137K8Ei55/zVJRg==" - }, "is-shared-array-buffer": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz", "integrity": "sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==", + "dev": true, "requires": { "call-bind": "^1.0.2" } }, - "is-stream": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", - "integrity": "sha512-uQPm8kcs47jx38atAcWTVxyltQYoPT68y9aWYdV6yWXSyW8mzSat0TL6CiWdZeCdF3KrAvpVtnHbTv4RN+rqdQ==" - }, "is-string": { "version": "1.0.7", "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz", "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==", + "dev": true, "requires": { "has-tostringtag": "^1.0.0" } @@ -56730,20 +24224,17 @@ "version": "1.0.4", "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz", "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==", + "dev": true, "requires": { "has-symbols": "^1.0.2" } }, "is-typed-array": { - "version": "1.1.9", - "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.9.tgz", - "integrity": "sha512-kfrlnTTn8pZkfpJMUgYD7YZ3qzeJgWUn8XfVYBARc4wnmNOmLbmuuaAs3q5fvB0UJOn6yHAKaGTPM7d6ezoD/A==", + "version": "1.1.12", + "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.12.tgz", + "integrity": "sha512-Z14TF2JNG8Lss5/HMqt0//T9JeHXttXy5pH/DBU4vi98ozO2btxzq9MwYDZYnKwU8nRsz/+GVFVRDq3DkVuSPg==", "requires": { - "available-typed-arrays": "^1.0.5", - "call-bind": "^1.0.2", - "es-abstract": "^1.20.0", - "for-each": "^0.3.3", - "has-tostringtag": "^1.0.0" + "which-typed-array": "^1.1.11" } }, "is-typedarray": { @@ -56764,12 +24255,6 @@ "upper-case": "^1.1.0" } }, - "is-url": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/is-url/-/is-url-1.2.4.tgz", - "integrity": "sha512-ITvGim8FhRiYe4IQ5uHSkj7pVaPDrCTkNd3yq3cV7iZAcJdHTUMPMEHcqSOy9xZ9qFenQCvi+2wjH9a1nXqHww==", - "dev": true - }, "is-utf8": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/is-utf8/-/is-utf8-0.2.1.tgz", @@ -56779,6 +24264,7 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz", "integrity": "sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==", + "dev": true, "requires": { "call-bind": "^1.0.2" } @@ -56792,9 +24278,10 @@ } }, "isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==" + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", + "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", + "dev": true }, "isexe": { "version": "2.0.0", @@ -56812,9 +24299,9 @@ } }, "isomorphic-ws": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/isomorphic-ws/-/isomorphic-ws-4.0.1.tgz", - "integrity": "sha512-BhBvN2MBpWTaSHdWRb/bwdZJ1WaehQ2L1KngkCkfLUGF0mAWAT1sQUQacEmQ0jXkFw/czDXPNQSL5u2/Krsz1w==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/isomorphic-ws/-/isomorphic-ws-5.0.0.tgz", + "integrity": "sha512-muId7Zzn9ywDsyXgTIafTry2sV3nySZeUDe6YedVd1Hvuuep5AsIlqK+XefWpYTyJG5e503F2xIuT2lcU6rCSw==", "requires": {} }, "isstream": { @@ -56822,13 +24309,14 @@ "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", "integrity": "sha512-Yljz7ffyPbrLpLngrMtZ7NduUgVvi6wG9RJ9IUcyCd59YQ911PBJphODUcbOVbqYfxe1wuYf/LJ8PauMRwsM/g==" }, - "isurl": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isurl/-/isurl-1.0.0.tgz", - "integrity": "sha512-1P/yWsxPlDtn7QeRD+ULKQPaIaN6yF368GZ2vDfv0AL0NwpStafjWCDDdn0k8wgFMWpVAqG7oJhxHnlud42i9w==", + "jackspeak": { + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-2.3.6.tgz", + "integrity": "sha512-N3yCS/NegsOBokc8GAdM8UcmfsKiSS8cipheD/nivzr700H+nsMOxJjQnvwOcRYVuFkdH0wGUvW2WbXGmrZGbQ==", + "peer": true, "requires": { - "has-to-string-tag-x": "^1.2.0", - "is-object": "^1.0.1" + "@isaacs/cliui": "^8.0.2", + "@pkgjs/parseargs": "^0.11.0" } }, "javascript-natural-sort": { @@ -56836,38 +24324,6 @@ "resolved": "https://registry.npmjs.org/javascript-natural-sort/-/javascript-natural-sort-0.7.1.tgz", "integrity": "sha512-nO6jcEfZWQXDhOiBtG2KvKyEptz7RVbpGP4vTD2hLBdmNQSsCiicO2Ioinv6UI4y9ukqnBpy+XZ9H6uLNgJTlw==" }, - "jayson": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/jayson/-/jayson-4.1.0.tgz", - "integrity": "sha512-R6JlbyLN53Mjku329XoRT2zJAE6ZgOQ8f91ucYdMCD4nkGCF9kZSrcGXpHIU4jeKj58zUZke2p+cdQchU7Ly7A==", - "requires": { - "@types/connect": "^3.4.33", - "@types/node": "^12.12.54", - "@types/ws": "^7.4.4", - "commander": "^2.20.3", - "delay": "^5.0.0", - "es6-promisify": "^5.0.0", - "eyes": "^0.1.8", - "isomorphic-ws": "^4.0.1", - "json-stringify-safe": "^5.0.1", - "JSONStream": "^1.3.5", - "uuid": "^8.3.2", - "ws": "^7.4.5" - }, - "dependencies": { - "@types/node": { - "version": "12.20.55", - "resolved": "https://registry.npmjs.org/@types/node/-/node-12.20.55.tgz", - "integrity": "sha512-J8xLz7q2OFulZ2cyGTLE1TbbZcjpno7FaN6zdJNrgAdrJ+DZzh/uFR6YrTb4C+nXakvud8Q4+rbhoIWlYQbUFQ==" - }, - "ws": { - "version": "7.5.9", - "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.9.tgz", - "integrity": "sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q==", - "requires": {} - } - } - }, "js-cookie": { "version": "2.2.1", "resolved": "https://registry.npmjs.org/js-cookie/-/js-cookie-2.2.1.tgz", @@ -56913,21 +24369,6 @@ "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", "integrity": "sha512-UVU9dibq2JcFWxQPA6KCqj5O42VOmAY3zQUfEKxU0KpTGXwNoCjkX1e13eHNvw/xPynt6pU0rZ1htjWTNTSXsg==" }, - "jsesc": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", - "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", - "peer": true - }, - "json-bigint": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/json-bigint/-/json-bigint-1.0.0.tgz", - "integrity": "sha512-SiPv/8VpZuWbvLSMtTDU8hEfrZWg/mH/nV/b4o0CYbSxu1UIQPLdwKOCIyLQX+VIPO5vrLX3i8qtqFyhdPSUSQ==", - "dev": true, - "requires": { - "bignumber.js": "^9.0.0" - } - }, "json-buffer": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", @@ -56939,38 +24380,6 @@ "integrity": "sha512-QLPs8Dj7lnf3e3QYS1zkCo+4ZwqOiF9d/nZnYozTISxXWCfNs9yuky5rJw4/W34s7POaNlbZmQGaB5NiXCbP4w==", "dev": true }, - "json-pointer": { - "version": "0.6.2", - "resolved": "https://registry.npmjs.org/json-pointer/-/json-pointer-0.6.2.tgz", - "integrity": "sha512-vLWcKbOaXlO+jvRy4qNd+TI1QUPZzfJj1tpJ3vAXDych5XJf93ftpUKe5pKCrzyIIwgBJcOcCVRUfqQP25afBw==", - "requires": { - "foreach": "^2.0.4" - } - }, - "json-rpc-engine": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/json-rpc-engine/-/json-rpc-engine-6.1.0.tgz", - "integrity": "sha512-NEdLrtrq1jUZyfjkr9OCz9EzCNhnRyWtt1PAnvnhwy6e8XETS0Dtc+ZNCO2gvuAoKsIn2+vCSowXTYE4CkgnAQ==", - "requires": { - "@metamask/safe-event-emitter": "^2.0.0", - "eth-rpc-errors": "^4.0.2" - }, - "dependencies": { - "eth-rpc-errors": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/eth-rpc-errors/-/eth-rpc-errors-4.0.3.tgz", - "integrity": "sha512-Z3ymjopaoft7JDoxZcEb3pwdGh7yiYMhOwm2doUt6ASXlMavpNlK6Cre0+IMl2VSGyEU9rkiperQhp5iRxn5Pg==", - "requires": { - "fast-safe-stringify": "^2.0.6" - } - } - } - }, - "json-rpc-random-id": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json-rpc-random-id/-/json-rpc-random-id-1.0.1.tgz", - "integrity": "sha512-RJ9YYNCkhVDBuP4zN5BBtYAzEl03yq/jIIsyif0JY9qyJuQQZNeDK7anAPKKlyEtLSj2s8h6hNh2F8zO5q7ScA==" - }, "json-schema": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.4.0.tgz", @@ -56981,31 +24390,11 @@ "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==" }, - "json-schema-typed": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/json-schema-typed/-/json-schema-typed-7.0.3.tgz", - "integrity": "sha512-7DE8mpG+/fVw+dTpjbxnx47TaMnDfOI1jwft9g1VybltZCduyRQPJPvc+zzKY9WPHxhPWczyFuYa6I8Mw4iU5A==", - "optional": true - }, - "json-stable-stringify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json-stable-stringify/-/json-stable-stringify-1.0.1.tgz", - "integrity": "sha512-i/J297TW6xyj7sDFa7AmBPkQvLIxWr2kKPWI26tXydnZrzVAocNqn5DMNT1Mzk0vit1V5UkRM7C1KdVNp7Lmcg==", - "requires": { - "jsonify": "~0.0.0" - } - }, "json-stringify-safe": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", "integrity": "sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==" }, - "json5": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.2.tgz", - "integrity": "sha512-46Tk9JiOL2z7ytNQWFLpj99RZkVgeHf87yGQKsIkaPz1qSH9UczKH1rO7K3wgRselo0tYMUNfecYpm/p1vC7tQ==", - "peer": true - }, "jsonfile": { "version": "6.1.0", "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", @@ -57015,25 +24404,6 @@ "universalify": "^2.0.0" } }, - "jsonify": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/jsonify/-/jsonify-0.0.1.tgz", - "integrity": "sha512-2/Ki0GcmuqSrgFyelQq9M05y7PS0mEwuIzrf3f1fPqkVDVRvZrPZtVSMHxdgo8Aq0sxAOb/cr2aqqA3LeWHVPg==" - }, - "jsonparse": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/jsonparse/-/jsonparse-1.3.1.tgz", - "integrity": "sha512-POQXvpdL69+CluYsillJ7SUhKvytYjW9vG/GKpnf+xP8UWgYEM/RaMzHHofbALDiKbbP1W8UEYmgGl39WkPZsg==" - }, - "JSONStream": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/JSONStream/-/JSONStream-1.3.5.tgz", - "integrity": "sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ==", - "requires": { - "jsonparse": "^1.2.0", - "through": ">=2.2.7 <3" - } - }, "jsprim": { "version": "1.4.2", "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.2.tgz", @@ -57046,9 +24416,9 @@ } }, "keccak": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/keccak/-/keccak-3.0.2.tgz", - "integrity": "sha512-PyKKjkH53wDMLGrvmRGSNWgmSxZOUqbnXwKL9tmgbFYA1iAYqW21kfR7mZXV0MlESiefxQQE9X9fTa3X+2MPDQ==", + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/keccak/-/keccak-3.0.4.tgz", + "integrity": "sha512-3vKuW0jV8J3XNTzvfyicFR5qvxrSAGl7KIhvgOu5cmWwM7tZRj3fMbj/pfIf4be7aznbc+prBWGjywox/g2Y6Q==", "requires": { "node-addon-api": "^2.0.0", "node-gyp-build": "^4.2.0", @@ -57056,20 +24426,18 @@ } }, "keyv": { - "version": "4.5.2", - "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.2.tgz", - "integrity": "sha512-5MHbFaKn8cNSmVW7BYnijeAVlE4cYA/SVkifVgrh7yotnfhKmjuXpDKjrABLnT0SfHWV21P8ow07OGfRrNDg8g==", + "version": "4.5.4", + "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", + "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==", "requires": { "json-buffer": "3.0.1" } }, "klaw": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/klaw/-/klaw-1.3.1.tgz", - "integrity": "sha512-TED5xi9gGQjGpNnvRWknrwAB1eL5GciPfVFOt3Vk1OJCVDQbzuSfrF3hkUQKlsgKrG1F+0t5W0m+Fje1jIt8rw==", - "requires": { - "graceful-fs": "^4.1.9" - } + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/klaw/-/klaw-4.1.0.tgz", + "integrity": "sha512-1zGZ9MF9H22UnkpVeuaGKOjfA2t6WrfdrJmGjy16ykcjnKQDmHVX+KI477rpbGevz/5FD4MC3xf1oxylBgcaQw==", + "optional": true }, "klaw-sync": { "version": "6.0.0", @@ -57138,52 +24506,6 @@ "xtend": "^4.0.2" } }, - "level-js": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/level-js/-/level-js-5.0.2.tgz", - "integrity": "sha512-SnBIDo2pdO5VXh02ZmtAyPP6/+6YTJg2ibLtl9C34pWvmtMEmRTWpra+qO/hifkUtBTOtfx6S9vLDjBsBK4gRg==", - "optional": true, - "requires": { - "abstract-leveldown": "~6.2.3", - "buffer": "^5.5.0", - "inherits": "^2.0.3", - "ltgt": "^2.1.2" - }, - "dependencies": { - "abstract-leveldown": { - "version": "6.2.3", - "resolved": "https://registry.npmjs.org/abstract-leveldown/-/abstract-leveldown-6.2.3.tgz", - "integrity": "sha512-BsLm5vFMRUrrLeCcRc+G0t2qOaTzpoJQLOubq2XM72eNpjF5UdU5o/5NvlNhx95XHcAvcl8OMXr4mlg/fRgUXQ==", - "optional": true, - "requires": { - "buffer": "^5.5.0", - "immediate": "^3.2.3", - "level-concat-iterator": "~2.0.0", - "level-supports": "~1.0.0", - "xtend": "~4.0.0" - } - }, - "buffer": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", - "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", - "optional": true, - "requires": { - "base64-js": "^1.3.1", - "ieee754": "^1.1.13" - } - }, - "level-supports": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/level-supports/-/level-supports-1.0.1.tgz", - "integrity": "sha512-rXM7GYnW8gsl1vedTJIbzOrRv85c/2uCMpiiCzO2fndd06U/kUXEEU9evYn4zFggBOg36IsBW8LzqIpETwwQzg==", - "optional": true, - "requires": { - "xtend": "^4.0.2" - } - } - } - }, "level-mem": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/level-mem/-/level-mem-5.0.1.tgz", @@ -57216,15 +24538,6 @@ "module-error": "^1.0.1" } }, - "level-write-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/level-write-stream/-/level-write-stream-1.0.0.tgz", - "integrity": "sha512-bBNKOEOMl8msO+uIM9YX/gUO6ckokZ/4pCwTm/lwvs46x6Xs8Zy0sn3Vh37eDqse4mhy4fOMIb/JsSM2nyQFtw==", - "optional": true, - "requires": { - "end-stream": "~0.1.0" - } - }, "level-ws": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/level-ws/-/level-ws-2.0.0.tgz", @@ -57235,57 +24548,6 @@ "xtend": "^4.0.1" } }, - "leveldown": { - "version": "5.6.0", - "resolved": "https://registry.npmjs.org/leveldown/-/leveldown-5.6.0.tgz", - "integrity": "sha512-iB8O/7Db9lPaITU1aA2txU/cBEXAt4vWwKQRrrWuS6XDgbP4QZGj9BL2aNbwb002atoQ/lIotJkfyzz+ygQnUQ==", - "optional": true, - "requires": { - "abstract-leveldown": "~6.2.1", - "napi-macros": "~2.0.0", - "node-gyp-build": "~4.1.0" - }, - "dependencies": { - "abstract-leveldown": { - "version": "6.2.3", - "resolved": "https://registry.npmjs.org/abstract-leveldown/-/abstract-leveldown-6.2.3.tgz", - "integrity": "sha512-BsLm5vFMRUrrLeCcRc+G0t2qOaTzpoJQLOubq2XM72eNpjF5UdU5o/5NvlNhx95XHcAvcl8OMXr4mlg/fRgUXQ==", - "optional": true, - "requires": { - "buffer": "^5.5.0", - "immediate": "^3.2.3", - "level-concat-iterator": "~2.0.0", - "level-supports": "~1.0.0", - "xtend": "~4.0.0" - } - }, - "buffer": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", - "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", - "optional": true, - "requires": { - "base64-js": "^1.3.1", - "ieee754": "^1.1.13" - } - }, - "level-supports": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/level-supports/-/level-supports-1.0.1.tgz", - "integrity": "sha512-rXM7GYnW8gsl1vedTJIbzOrRv85c/2uCMpiiCzO2fndd06U/kUXEEU9evYn4zFggBOg36IsBW8LzqIpETwwQzg==", - "optional": true, - "requires": { - "xtend": "^4.0.2" - } - }, - "node-gyp-build": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.1.1.tgz", - "integrity": "sha512-dSq1xmcPDKPZ2EED2S6zw/b9NKsqzXRE6dVr8TVQnI3FJOTteUMuqF3Qqs6LZg+mLGYJWqQzMbIjMtJqTv87nQ==", - "optional": true - } - } - }, "levelup": { "version": "4.4.0", "resolved": "https://registry.npmjs.org/levelup/-/levelup-4.4.0.tgz", @@ -57318,19 +24580,13 @@ "pify": "^2.0.0", "pinkie-promise": "^2.0.0", "strip-bom": "^2.0.0" - }, - "dependencies": { - "pify": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", - "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==" - } } }, "locate-path": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "devOptional": true, "requires": { "p-locate": "^4.1.0" } @@ -57340,43 +24596,27 @@ "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" }, - "lodash-es": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash-es/-/lodash-es-4.17.21.tgz", - "integrity": "sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw==" - }, "lodash.assign": { "version": "4.2.0", "resolved": "https://registry.npmjs.org/lodash.assign/-/lodash.assign-4.2.0.tgz", "integrity": "sha512-hFuH8TY+Yji7Eja3mGiuAxBqLagejScbG8GbG0j6o9vzn0YL14My+ktnqtZgFTosKymC9/44wP6s7xyuLfnClw==" }, - "lodash.camelcase": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz", - "integrity": "sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA==", - "dev": true - }, - "lodash.debounce": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz", - "integrity": "sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==" - }, - "lodash.defaults": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/lodash.defaults/-/lodash.defaults-4.2.0.tgz", - "integrity": "sha512-qjxPLHd3r5DnsdGacqOMU6pb/avJzdh9tFX2ymgoZE27BmjXrNy/y4LoaiTeAb+O3gL8AfpJGtqfX/ae2leYYQ==" - }, "lodash.flatten": { "version": "4.4.0", "resolved": "https://registry.npmjs.org/lodash.flatten/-/lodash.flatten-4.4.0.tgz", "integrity": "sha512-C5N2Z3DgnnKr0LOpv/hKCgKdb7ZZwafIrsesve6lmzvZIRZRGaZ/l6Q8+2W7NaT+ZwO3fFlSCzCzrDCFdJfZ4g==", "dev": true }, + "lodash.isequal": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.isequal/-/lodash.isequal-4.5.0.tgz", + "integrity": "sha512-pDo3lu8Jhfjqls6GkMgpahsF9kCyayhgykjyLMNFTKWrpVdAQtYyB4muAMWozBB4ig/dtWAmsMxLEI8wuz+DYQ==", + "dev": true + }, "lodash.merge": { "version": "4.6.2", "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", - "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", - "dev": true + "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==" }, "lodash.omit": { "version": "4.5.0", @@ -57390,12 +24630,6 @@ "integrity": "sha512-hXt6Ul/5yWjfklSGvLQl8vM//l3FtyHZeuelpzK6mm99pNvN9yTDruNZPEJZD1oWrqo+izBmB7oUfWgcCX7s4Q==", "optional": true }, - "lodash.sortby": { - "version": "4.7.0", - "resolved": "https://registry.npmjs.org/lodash.sortby/-/lodash.sortby-4.7.0.tgz", - "integrity": "sha512-HDWXG8isMntAyRF5vZ7xKuEvOhT4AhlRt/3czTSjvGUxjYCBVRQY48ViDHyfYz9VIoBkW4TMGQNapx+l3RUwdA==", - "optional": true - }, "lodash.truncate": { "version": "4.4.2", "resolved": "https://registry.npmjs.org/lodash.truncate/-/lodash.truncate-4.4.2.tgz", @@ -57411,18 +24645,6 @@ "is-unicode-supported": "^0.1.0" } }, - "loglevel": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/loglevel/-/loglevel-1.8.1.tgz", - "integrity": "sha512-tCRIJM51SHjAayKwC+QAg8hT8vg6z7GSgLJKGvzuPb1Wc+hLzqtuVLxp6/HzSPOozuK+8ErAhy7U/sVzw8Dgfg==", - "optional": true - }, - "long": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/long/-/long-4.0.0.tgz", - "integrity": "sha512-XsP+KhQif4bjX1kbuSiySJFNAehNxgLb6hPRGJ9QsUr8ajHkuXGdrHmFUTUUXhDwVX2R5bY4JNZEwbUiMhV+MA==", - "optional": true - }, "loose-envify": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", @@ -57432,11 +24654,11 @@ } }, "loupe": { - "version": "2.3.4", - "resolved": "https://registry.npmjs.org/loupe/-/loupe-2.3.4.tgz", - "integrity": "sha512-OvKfgCC2Ndby6aSTREl5aCCPTNIzlDfQZvZxNUrBrihDhL3xcrYegTblhmEiCrg2kKQz4XsFIaemE5BF4ybSaQ==", + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/loupe/-/loupe-2.3.7.tgz", + "integrity": "sha512-zSMINGVYkdpYSOBmLi0D1Uo7JU9nVdQKrHxC8eYlV+9YKK9WePqAlL7lSlorG/U2Fw1w0hTBmaa/jrQ3UbPHtA==", "requires": { - "get-func-name": "^2.0.0" + "get-func-name": "^2.0.1" } }, "lower-case": { @@ -57470,34 +24692,11 @@ "yallist": "^3.0.2" } }, - "lru-queue": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/lru-queue/-/lru-queue-0.1.0.tgz", - "integrity": "sha512-BpdYkt9EvGl8OfWHDQPISVpcl5xZthb+XPsbELj5AQXxIC8IriDZIQYjBJPEm5rS420sjZ0TLEzRcq5KdBhYrQ==", - "requires": { - "es5-ext": "~0.10.2" - } - }, "ltgt": { "version": "2.2.1", "resolved": "https://registry.npmjs.org/ltgt/-/ltgt-2.2.1.tgz", "integrity": "sha512-AI2r85+4MquTw9ZYqabu4nMwy9Oftlfa/e/52t9IjtfG+mGBbTNdAoZ3RQKLHR6r0wQnwZnPIEh/Ya6XTWAKNA==" }, - "make-dir": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-1.3.0.tgz", - "integrity": "sha512-2w31R7SJtieJJnQtGc7RVL2StM2vGYVfqUOvUDxH6bC6aJTxPxTF0GnIgCyu7tjockiUWAYQRbxa7vKn34s5sQ==", - "requires": { - "pify": "^3.0.0" - } - }, - "make-error": { - "version": "1.3.6", - "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", - "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==", - "optional": true, - "peer": true - }, "markdown-table": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/markdown-table/-/markdown-table-1.1.3.tgz", @@ -57510,11 +24709,11 @@ "dev": true }, "mathjs": { - "version": "11.11.0", - "resolved": "https://registry.npmjs.org/mathjs/-/mathjs-11.11.0.tgz", - "integrity": "sha512-i1Ao/tv1mlNd09XlOMOUu3KMySX3S0jhHNfDPzh0sCnPf1i62x6RjxhLwZ9ytmVSs0OdhF3moI4O84VSEjmUFw==", + "version": "12.2.1", + "resolved": "https://registry.npmjs.org/mathjs/-/mathjs-12.2.1.tgz", + "integrity": "sha512-/uG/yMP0wUSfALCyJkKco0gYlrp0kHFt4yNT3E+ZCoiWpsT9GdtLqydxHp3gjDCQrR4GGBDXMnKOQtJbmIe9SQ==", "requires": { - "@babel/runtime": "^7.22.6", + "@babel/runtime": "^7.23.6", "complex.js": "^2.1.1", "decimal.js": "^10.4.3", "escape-latex": "^1.2.0", @@ -57522,7 +24721,7 @@ "javascript-natural-sort": "^0.7.1", "seedrandom": "^3.0.5", "tiny-emitter": "^2.1.0", - "typed-function": "^4.1.0" + "typed-function": "^4.1.1" } }, "mcl-wasm": { @@ -57594,21 +24793,6 @@ } } }, - "memoizee": { - "version": "0.4.15", - "resolved": "https://registry.npmjs.org/memoizee/-/memoizee-0.4.15.tgz", - "integrity": "sha512-UBWmJpLZd5STPm7PMUlOw/TSy972M+z8gcyQ5veOnSDRREz/0bmpyTfKt3/51DhEBqCZQn1udM/5flcSPYhkdQ==", - "requires": { - "d": "^1.0.1", - "es5-ext": "^0.10.53", - "es6-weak-map": "^2.0.3", - "event-emitter": "^0.3.5", - "is-promise": "^2.2.2", - "lru-queue": "^0.1.0", - "next-tick": "^1.1.0", - "timers-ext": "^0.1.7" - } - }, "memory-level": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/memory-level/-/memory-level-1.0.0.tgz", @@ -57661,22 +24845,6 @@ "picomatch": "^2.3.1" } }, - "miller-rabin": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/miller-rabin/-/miller-rabin-4.0.1.tgz", - "integrity": "sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA==", - "requires": { - "bn.js": "^4.0.0", - "brorand": "^1.0.1" - }, - "dependencies": { - "bn.js": { - "version": "4.12.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==" - } - } - }, "mime": { "version": "1.6.0", "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", @@ -57695,10 +24863,10 @@ "mime-db": "1.52.0" } }, - "mimic-fn": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-3.1.0.tgz", - "integrity": "sha512-Ysbi9uYW9hFyfrThdDEQuykN4Ey6BuwPD2kpI5ES/nFTDn/98yxYNLZJcgUAKPT/mcrLLKaGzJR9YVxJrIdASQ==", + "mimic-response": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-2.1.0.tgz", + "integrity": "sha512-wXqjST+SLt7R009ySCglWBCFpjUygmCIfD790/kVbiGmUgfYGuB14PiTd5DwVxSV4NcYHjzMkoj5LjQZwTQLEA==", "optional": true }, "min-document": { @@ -57720,26 +24888,24 @@ "integrity": "sha512-JIYlbt6g8i5jKfJ3xz7rF0LXmv2TkDxBLUkiBeZ7bAx4GnnNMr8xFpGnOxn6GhTEHx3SjRrZEoU+j04prX1ktg==" }, "minimatch": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.0.tgz", - "integrity": "sha512-9TPBGGak4nHfGZsPBohm9AWg6NoT7QTCehS3BIJABslyZbzxfV78QM2Y6+i741OPZIafFAaiiEMh5OyIrJPgtg==", + "version": "9.0.3", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz", + "integrity": "sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==", + "peer": true, "requires": { "brace-expansion": "^2.0.1" } }, "minimist": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.7.tgz", - "integrity": "sha512-bzfL1YUZsP41gmu/qjrEk0Q6i2ix/cVeAhbCbqH9u3zYutS1cLg00qhrD0M2MVdCcx4Sc0UpP2eBWo9rotpq6g==" + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", + "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==" }, "minipass": { - "version": "2.9.0", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-2.9.0.tgz", - "integrity": "sha512-wxfUjg9WebH+CUDX/CdbRlh5SmfZiy/hpkxaRI16Y9W56Pa75sWgd/rvFilSgrauD9NyFymP/+JFV3KwzIsJeg==", - "requires": { - "safe-buffer": "^5.1.2", - "yallist": "^3.0.0" - } + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.0.4.tgz", + "integrity": "sha512-jYofLM5Dam9279rdkWzqHozUo4ybjdZmCsDHePy5V/PbBcVMiSZR97gmAy45aqi8CK1lG2ECd356FU86avfwUQ==", + "peer": true }, "minizlib": { "version": "1.3.3", @@ -57747,6 +24913,17 @@ "integrity": "sha512-6ZYMOEnmVsdCeTJVE0W9ZD+pVnE8h9Hma/iOwwRDsdQoePpoX56/8B6z3P9VNwppJuBKNRuFDRNRqRWexT9G9Q==", "requires": { "minipass": "^2.9.0" + }, + "dependencies": { + "minipass": { + "version": "2.9.0", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-2.9.0.tgz", + "integrity": "sha512-wxfUjg9WebH+CUDX/CdbRlh5SmfZiy/hpkxaRI16Y9W56Pa75sWgd/rvFilSgrauD9NyFymP/+JFV3KwzIsJeg==", + "requires": { + "safe-buffer": "^5.1.2", + "yallist": "^3.0.0" + } + } } }, "mkdirp": { @@ -57760,7 +24937,8 @@ "mkdirp-classic": { "version": "0.5.3", "resolved": "https://registry.npmjs.org/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz", - "integrity": "sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==" + "integrity": "sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==", + "optional": true }, "mkdirp-promise": { "version": "5.0.1", @@ -57779,9 +24957,9 @@ } }, "mocha": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/mocha/-/mocha-10.1.0.tgz", - "integrity": "sha512-vUF7IYxEoN7XhQpFLxQAEMtE4W91acW4B6En9l97MwE9stL1A9gusXfoHZCLVHDUJ/7V5+lbCM6yMqzo5vNymg==", + "version": "10.2.0", + "resolved": "https://registry.npmjs.org/mocha/-/mocha-10.2.0.tgz", + "integrity": "sha512-IDY7fl/BecMwFHzoqF2sg/SHHANeBoMMXFlS9r0OXKDssYE1M5O43wUY/9BVPeIvfH2zmEbBfseqN9gBQZzXkg==", "requires": { "ansi-colors": "4.1.1", "browser-stdout": "1.3.1", @@ -57873,11 +25051,6 @@ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" }, - "nanoid": { - "version": "3.3.3", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.3.tgz", - "integrity": "sha512-p1sjXuopFs0xg+fPASzQ28agW1oHD7xDsd9Xkf3T15H3c/cifrFHVwrh74PdoklAPi+i7MdRsE47vm2r6JoB+w==" - }, "p-limit": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", @@ -57915,9 +25088,9 @@ "integrity": "sha512-0yuvsqSCv8LbaOKhnsQ/T5JhyFlCYLPXK3U2sgV10zoKQwzs/MyfuQUOZQ1V/6OCOJsK/TRgNVrPuPDqtdMFtA==" }, "moment": { - "version": "2.29.4", - "resolved": "https://registry.npmjs.org/moment/-/moment-2.29.4.tgz", - "integrity": "sha512-5LC9SOxjSc2HF6vO2CyuTDNivEdoz2IvyJJGj6X8DJ0eFyfszE0QiEd+iXmBvUP3WHxSjFH/vIsA0EN00cgr8w==", + "version": "2.30.1", + "resolved": "https://registry.npmjs.org/moment/-/moment-2.30.1.tgz", + "integrity": "sha512-uEmtNhbDOrWPFS+hdjFCBfy9f2YoyzRpwcl+DqpC6taX21FzsTLQVbMV/W7PzNSX6x/bhC1zA3c2UQ5NzH6how==", "optional": true }, "ms": { @@ -58005,10 +25178,16 @@ "rimraf": "~2.4.0" } }, + "n": { + "version": "9.2.0", + "resolved": "https://registry.npmjs.org/n/-/n-9.2.0.tgz", + "integrity": "sha512-R8mFN2OWwNVc+r1f9fDzcT34DnDwUIHskrpTesZ6SdluaXBBnRtTu5tlfaSPloBi1Z/eGJoPO9nhyawWPad5UQ==" + }, "nan": { - "version": "2.17.0", - "resolved": "https://registry.npmjs.org/nan/-/nan-2.17.0.tgz", - "integrity": "sha512-2ZTgtl0nJsO0KQCjEpxcIr5D+Yv90plTitZt9JBfQvVJDS5seMl3FOvsh3+9CoYWXf/1l5OaZzzF6nDm4cagaQ==" + "version": "2.18.0", + "resolved": "https://registry.npmjs.org/nan/-/nan-2.18.0.tgz", + "integrity": "sha512-W7tfG7vMOGtD30sHoZSSc/JVYiyDPEyQVso/Zz+/uQd0B0L46gtC+pHha5FFMRpil6fm/AoEcRWyOVi4+E/f8w==", + "optional": true }, "nano-base32": { "version": "1.0.1", @@ -58021,16 +25200,21 @@ "integrity": "sha512-9MqxMH/BSJC7dnLsEMPyfN5Dvoo49IsPFYMcHw3Bcfc2kN0lpHRBSzlMSVx4HGyJ7s9B31CyBTVehWJoQ8Ctew==" }, "nanoid": { - "version": "3.3.4", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.4.tgz", - "integrity": "sha512-MqBkQh/OHTS2egovRtLk45wEyNXwF+cokD+1YPf9u5VfJiRdAiRwB2froX5Co9Rh20xs4siNPm8naNotSD6RBw==" + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.3.tgz", + "integrity": "sha512-p1sjXuopFs0xg+fPASzQ28agW1oHD7xDsd9Xkf3T15H3c/cifrFHVwrh74PdoklAPi+i7MdRsE47vm2r6JoB+w==" }, - "napi-macros": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/napi-macros/-/napi-macros-2.0.0.tgz", - "integrity": "sha512-A0xLykHtARfueITVDernsAWdtIMbOJgKgcluwENp3AlsKN/PloyO10HtmoqnFAQAcxPkgZN7wdfPfEd0zNGxbg==", + "napi-build-utils": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/napi-build-utils/-/napi-build-utils-1.0.2.tgz", + "integrity": "sha512-ONmRUqK7zj7DWX0D9ADe03wbwOBZxNAfF20PlGfCWQcD3+/MakShIHrMqx9YwPTfxDdF1zLeL+RGZiR9kGMLdg==", "optional": true }, + "napi-macros": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/napi-macros/-/napi-macros-2.2.2.tgz", + "integrity": "sha512-hmEVtAGYzVQpCKdbQea4skABsdXW4RUh5t5mJ2zzqowJS2OyXZTU1KhDVFhx+NlWZ4ap9mqR9TcDO3LTTttd+g==" + }, "ncp": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ncp/-/ncp-2.0.0.tgz", @@ -58060,33 +25244,28 @@ "lower-case": "^1.1.1" } }, - "node-abort-controller": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/node-abort-controller/-/node-abort-controller-3.1.1.tgz", - "integrity": "sha512-AGK2yQKIjRuqnc6VkX2Xj5d+QW8xZ87pa1UK6yA6ouUyuxfHuMP6umE5QK7UmTeOAymo+Zx1Fxiuw9rVx8taHQ==", - "optional": true - }, - "node-addon-api": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-2.0.2.tgz", - "integrity": "sha512-Ntyt4AIXyaLIuMHF6IOoTakB3K+RWxwtsHNRxllEoA6vPwP9o4866g6YWDLUdnucilZhmkxiHwHr11gAENw+QA==" - }, - "node-environment-flags": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/node-environment-flags/-/node-environment-flags-1.0.6.tgz", - "integrity": "sha512-5Evy2epuL+6TM0lCQGpFIj6KwiEsGh1SrHUhTbNX+sLbBtjidPZFAnVK9y5yU1+h//RitLbRHTIMyxQPtxMdHw==", + "node-abi": { + "version": "2.30.1", + "resolved": "https://registry.npmjs.org/node-abi/-/node-abi-2.30.1.tgz", + "integrity": "sha512-/2D0wOQPgaUWzVSVgRMx+trKJRC2UG4SUc4oCJoXx9Uxjtp0Vy3/kt7zcbxHF8+Z/pK3UloLWzBISg72brfy1w==", + "optional": true, "requires": { - "object.getownpropertydescriptors": "^2.0.3", - "semver": "^5.7.0" + "semver": "^5.4.1" }, "dependencies": { "semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", + "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", + "optional": true } } }, + "node-addon-api": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-2.0.2.tgz", + "integrity": "sha512-Ntyt4AIXyaLIuMHF6IOoTakB3K+RWxwtsHNRxllEoA6vPwP9o4866g6YWDLUdnucilZhmkxiHwHr11gAENw+QA==" + }, "node-fetch": { "version": "2.7.0", "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz", @@ -58096,97 +25275,33 @@ } }, "node-gyp-build": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.5.0.tgz", - "integrity": "sha512-2iGbaQBV+ITgCz76ZEjmhUKAKVf7xfY1sRl4UiKQspfZMH2h06SyhNsnSVy50cwkFQDGLyif6m/6uFXHkOZ6rg==" - }, - "node-interval-tree": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/node-interval-tree/-/node-interval-tree-1.3.3.tgz", - "integrity": "sha512-K9vk96HdTK5fEipJwxSvIIqwTqr4e3HRJeJrNxBSeVMNSC/JWARRaX7etOLOuTmrRMeOI/K5TCJu3aWIwZiNTw==", - "requires": { - "shallowequal": "^1.0.2" - } - }, - "node-releases": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.6.tgz", - "integrity": "sha512-PiVXnNuFm5+iYkLBNeq5211hvO38y63T0i2KKh2KnUs3RpzJ+JtODFjkD8yjLwnDkTYF1eKXheUwdssR+NRZdg==" + "version": "4.8.0", + "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.8.0.tgz", + "integrity": "sha512-u6fs2AEUljNho3EYTJNBfImO5QTo/J/1Etd+NVdCj7qWKUSN/bSLkZwhDv7I+w/MSC6qJ4cknepkAYykDdK8og==" }, - "nodemon": { - "version": "2.0.22", - "resolved": "https://registry.npmjs.org/nodemon/-/nodemon-2.0.22.tgz", - "integrity": "sha512-B8YqaKMmyuCO7BowF1Z1/mkPqLk6cs/l63Ojtd6otKjMx47Dq1utxfRxcavH1I7VSaL8n5BUaoutadnsX3AAVQ==", + "node-hid": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/node-hid/-/node-hid-1.3.0.tgz", + "integrity": "sha512-BA6G4V84kiNd1uAChub/Z/5s/xS3EHBCxotQ0nyYrUG65mXewUDHE1tWOSqA2dp3N+mV0Ffq9wo2AW9t4p/G7g==", + "optional": true, "requires": { - "chokidar": "^3.5.2", - "debug": "^3.2.7", - "ignore-by-default": "^1.0.1", - "minimatch": "^3.1.2", - "pstree.remy": "^1.1.8", - "semver": "^5.7.1", - "simple-update-notifier": "^1.0.7", - "supports-color": "^5.5.0", - "touch": "^3.1.0", - "undefsafe": "^2.0.5" - }, - "dependencies": { - "brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "requires": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "debug": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", - "requires": { - "ms": "^2.1.1" - } - }, - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==" - }, - "minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "requires": { - "brace-expansion": "^1.1.7" - } - }, - "semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" - }, - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "requires": { - "has-flag": "^3.0.0" - } - } + "bindings": "^1.5.0", + "nan": "^2.14.0", + "node-abi": "^2.18.0", + "prebuild-install": "^5.3.4" } }, "nofilter": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/nofilter/-/nofilter-1.0.4.tgz", - "integrity": "sha512-N8lidFp+fCz+TD51+haYdbDGrcBWwuHX40F5+z0qkUjMJ5Tp+rdSuAkMJ9N9eoolDlEVTf6u5icM+cNKkKW2mA==" + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/nofilter/-/nofilter-3.1.0.tgz", + "integrity": "sha512-l2NNj07e9afPnhAhvgVrCD/oy2Ai1yfLpuo3EpiO1jFTsB4sFz6oIfAfSZyQzVpkZQ9xS8ZS5g1jCBgq4Hwo0g==", + "dev": true }, - "nopt": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/nopt/-/nopt-1.0.10.tgz", - "integrity": "sha512-NWmpvLSqUrgrAC9HCuxEvb+PSloHpqVu+FqcO4eeF2h5qYRhA7ev6KvelyQAKtegUbC6RypJnlEOhd8vloNKYg==", - "requires": { - "abbrev": "1" - } + "noop-logger": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/noop-logger/-/noop-logger-0.1.1.tgz", + "integrity": "sha512-6kM8CLXvuW5crTxsAtva2YLrRrDaiTIkIePWs9moLHqbFWT94WpNFjwS/5dfLfECg5i/lkmw3aoqVidxt23TEQ==", + "optional": true }, "normalize-hex": { "version": "0.0.2", @@ -58215,9 +25330,9 @@ }, "dependencies": { "semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", + "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==" } } }, @@ -58231,11 +25346,22 @@ "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-6.1.0.tgz", "integrity": "sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A==" }, + "npmlog": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-4.1.2.tgz", + "integrity": "sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg==", + "optional": true, + "requires": { + "are-we-there-yet": "~1.1.2", + "console-control-strings": "~1.1.0", + "gauge": "~2.7.3", + "set-blocking": "~2.0.0" + } + }, "nth-check": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.1.1.tgz", "integrity": "sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==", - "devOptional": true, "requires": { "boolbase": "^1.0.0" } @@ -58272,37 +25398,28 @@ "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==" }, "object-inspect": { - "version": "1.12.2", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.2.tgz", - "integrity": "sha512-z+cPxW0QGUp0mcqcsgQyLVRDoXFQbXOwBaqyF7VIgI4TWNQsDHrBpUQslRmIfAoYWdYzs6UlKJtB2XJpTaNSpQ==" + "version": "1.13.1", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.1.tgz", + "integrity": "sha512-5qoj1RUiKOMsCCNLV1CBiPYE10sziTsnmNxkAI/rZhiD63CF7IqdFGC/XzjWjpSgLf0LxXX3bDFIh0E18f6UhQ==" }, "object-keys": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", - "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==" + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", + "dev": true }, "object.assign": { - "version": "4.1.4", - "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.4.tgz", - "integrity": "sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ==", + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.5.tgz", + "integrity": "sha512-byy+U7gp+FVwmyzKPYhW2h5l3crpmGsxl7X2s8y43IgxvG4g3QZ6CffDtsNQy1WsmZpQbO+ybo0AlW7TY6DcBQ==", + "dev": true, "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", + "call-bind": "^1.0.5", + "define-properties": "^1.2.1", "has-symbols": "^1.0.3", "object-keys": "^1.1.1" } }, - "object.getownpropertydescriptors": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.4.tgz", - "integrity": "sha512-sccv3L/pMModT6dJAYF3fzGMVcb38ysQ0tEE6ixv2yXJDtEIPph268OlAdJj5/qZMZDq2g/jqvwppt36uS/uQQ==", - "requires": { - "array.prototype.reduce": "^1.0.4", - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.1" - } - }, "obliterator": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/obliterator/-/obliterator-2.0.4.tgz", @@ -58332,23 +25449,6 @@ "wrappy": "1" } }, - "onetime": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", - "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", - "optional": true, - "requires": { - "mimic-fn": "^2.1.0" - }, - "dependencies": { - "mimic-fn": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", - "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", - "optional": true - } - } - }, "open": { "version": "7.4.2", "resolved": "https://registry.npmjs.org/open/-/open-7.4.2.tgz", @@ -58358,17 +25458,6 @@ "is-wsl": "^2.1.1" } }, - "ordinal": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/ordinal/-/ordinal-1.0.3.tgz", - "integrity": "sha512-cMddMgb2QElm8G7vdaa02jhUNbTSrhsgAGUz1OokD83uJTwSUn+nKoNoKVVaRa08yF6sgfO7Maou1+bgLd9rdQ==", - "peer": true - }, - "original-require": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/original-require/-/original-require-1.0.1.tgz", - "integrity": "sha512-5vdKMbE58WaE61uVD+PKyh8xdM398UnjPBLotW2sjG5MzHARwta/+NtMBCBA0t2WQblGYBvq5vsiZpWokwno+A==" - }, "os-locale": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-1.4.0.tgz", @@ -58387,15 +25476,11 @@ "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-3.0.0.tgz", "integrity": "sha512-mlVgR3PGuzlo0MmTdk4cXqXWlwQDLnONTAg6sm62XkMJEiRxN3GL3SffkYvqwonbkJBcrI7Uvv5Zh9yjvn2iUw==" }, - "p-finally": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", - "integrity": "sha512-LICb2p9CB7FS+0eR1oqWnHhp0FljGLZCWBE9aix0Uye9W8LTQPwMTYVGWQWIw9RdQiDg4+epXQODwIYJtSJaow==" - }, "p-limit": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "devOptional": true, "requires": { "p-try": "^2.0.0" } @@ -58404,6 +25489,7 @@ "version": "4.1.0", "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "devOptional": true, "requires": { "p-limit": "^2.2.0" } @@ -58416,24 +25502,16 @@ "aggregate-error": "^3.0.0" } }, - "p-timeout": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/p-timeout/-/p-timeout-1.2.1.tgz", - "integrity": "sha512-gb0ryzr+K2qFqFv6qi3khoeqMZF/+ajxQipEF6NteZVnvz9tzdsfAVj3lYtn1gAXvH5lfLwfxEII799gt/mRIA==", - "requires": { - "p-finally": "^1.0.0" - } - }, "p-try": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", - "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==" + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", + "devOptional": true }, "pako": { "version": "1.0.11", "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.11.tgz", - "integrity": "sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==", - "dev": true + "integrity": "sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==" }, "param-case": { "version": "2.1.1", @@ -58443,18 +25521,6 @@ "no-case": "^2.2.0" } }, - "parse-asn1": { - "version": "5.1.6", - "resolved": "https://registry.npmjs.org/parse-asn1/-/parse-asn1-5.1.6.tgz", - "integrity": "sha512-RnZRo1EPU6JBnra2vGHj0yhp6ebyjBZpmUCLHWiFhxlzvBCCpAuZ7elsBp1PVAbQN0/04VD/19rfzlBSwLstMw==", - "requires": { - "asn1.js": "^5.2.0", - "browserify-aes": "^1.0.0", - "evp_bytestokey": "^1.0.0", - "pbkdf2": "^3.0.3", - "safe-buffer": "^5.1.1" - } - }, "parse-cache-control": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/parse-cache-control/-/parse-cache-control-1.0.1.tgz", @@ -58474,10 +25540,9 @@ } }, "parse5": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/parse5/-/parse5-7.1.1.tgz", - "integrity": "sha512-kwpuwzB+px5WUg9pyK0IcK/shltJN5/OVhQagxhCQNtT9Y9QRZqNY2e1cmbu/paRh5LMnz/oVTVLBpjFmMZhSg==", - "devOptional": true, + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-7.1.2.tgz", + "integrity": "sha512-Czj1WaSVpaoj0wbhMzLmWD69anp2WH7FXMB9n1Sy8/ZFF9jolSQVMu1Ij5WIyGmcBmhk7EOndpO4mIpihVqAXw==", "requires": { "entities": "^4.4.0" } @@ -58486,7 +25551,6 @@ "version": "7.0.0", "resolved": "https://registry.npmjs.org/parse5-htmlparser2-tree-adapter/-/parse5-htmlparser2-tree-adapter-7.0.0.tgz", "integrity": "sha512-B77tOZrqqfUfnVcOrUvfdLbz4pu4RopLD/4vmu3HUPswwTA8OH0EMW9BlWR2B0RCoiZRAHEUu7IxeP1Pd1UU+g==", - "devOptional": true, "requires": { "domhandler": "^5.0.2", "parse5": "^7.0.0" @@ -58536,6 +25600,18 @@ "concat-map": "0.0.1" } }, + "cross-spawn": { + "version": "6.0.5", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", + "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", + "requires": { + "nice-try": "^1.0.4", + "path-key": "^2.0.1", + "semver": "^5.5.0", + "shebang-command": "^1.2.0", + "which": "^1.2.9" + } + }, "fs-extra": { "version": "9.1.0", "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", @@ -58568,6 +25644,11 @@ "brace-expansion": "^1.1.7" } }, + "path-key": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", + "integrity": "sha512-fEHGKCSmUSDPv4uoj8AlD+joPlq3peND+HRYyxFz4KPw4z926S/b8rIuFs2FYJg3BwsxJf6A9/3eIdLaYC+9Dw==" + }, "rimraf": { "version": "2.7.1", "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", @@ -58577,9 +25658,30 @@ } }, "semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", + "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==" + }, + "shebang-command": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", + "integrity": "sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg==", + "requires": { + "shebang-regex": "^1.0.0" + } + }, + "shebang-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", + "integrity": "sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ==" + }, + "which": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", + "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "requires": { + "isexe": "^2.0.0" + } } } }, @@ -58607,12 +25709,6 @@ } } }, - "path-browserify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-1.0.1.tgz", - "integrity": "sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g==", - "dev": true - }, "path-case": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/path-case/-/path-case-2.1.1.tgz", @@ -58632,15 +25728,34 @@ "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==" }, "path-key": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", - "integrity": "sha512-fEHGKCSmUSDPv4uoj8AlD+joPlq3peND+HRYyxFz4KPw4z926S/b8rIuFs2FYJg3BwsxJf6A9/3eIdLaYC+9Dw==" + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "peer": true }, "path-parse": { "version": "1.0.7", "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==" }, + "path-scurry": { + "version": "1.10.1", + "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.10.1.tgz", + "integrity": "sha512-MkhCqzzBEpPvxxQ71Md0b1Kk51W01lrYvlMzSUaIzNsODdd7mqhiimSZlr+VegAz5Z6Vzt9Xg2ttE//XBhH3EQ==", + "peer": true, + "requires": { + "lru-cache": "^9.1.1 || ^10.0.0", + "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" + }, + "dependencies": { + "lru-cache": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.1.0.tgz", + "integrity": "sha512-/1clY/ui8CzjKFyjdvwPWJUYKiFVXG2I2cY0ssG7h4+hwk+XOIX7ZSG9Q7TW8TW3Kp3BUSqgFWBLgL4PJ+Blag==", + "peer": true + } + } + }, "path-to-regexp": { "version": "0.1.7", "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", @@ -58654,13 +25769,6 @@ "graceful-fs": "^4.1.2", "pify": "^2.0.0", "pinkie-promise": "^2.0.0" - }, - "dependencies": { - "pify": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", - "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==" - } } }, "pathval": { @@ -58683,27 +25791,23 @@ "pend": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz", - "integrity": "sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg==" + "integrity": "sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg==", + "optional": true }, "performance-now": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", "integrity": "sha512-7EAHlyLHI56VEIdK57uwHdHKIaAGbnXPiw0yWbarQZOKaKpvUIgW0jWRVLiatnM+XXlSwsanIBH/hzGMJulMow==" }, - "picocolors": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", - "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==" - }, "picomatch": { "version": "2.3.1", "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==" }, "pify": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", - "integrity": "sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg==" + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==" }, "pinkie": { "version": "2.0.4", @@ -58713,414 +25817,26 @@ "pinkie-promise": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz", - "integrity": "sha512-0Gni6D4UcLTbv9c57DfxDGdr41XfgUjqWZu492f0cIGr16zDU06BWP/RAEvOuo7CQ0CNjHaLlM59YJJFm3NWlw==", - "requires": { - "pinkie": "^2.0.0" - } - }, - "pkg-dir": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", - "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", - "optional": true, - "requires": { - "find-up": "^4.0.0" - } - }, - "pkg-up": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/pkg-up/-/pkg-up-3.1.0.tgz", - "integrity": "sha512-nDywThFk1i4BQK4twPQ6TA4RT8bDY96yeuCVBWL3ePARCiEKDRSrNGbFIgUJpLp+XeIR65v8ra7WuJOFUBtkMA==", - "optional": true, - "requires": { - "find-up": "^3.0.0" - }, - "dependencies": { - "find-up": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", - "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", - "optional": true, - "requires": { - "locate-path": "^3.0.0" - } - }, - "locate-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", - "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", - "optional": true, - "requires": { - "p-locate": "^3.0.0", - "path-exists": "^3.0.0" - } - }, - "p-locate": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", - "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", - "optional": true, - "requires": { - "p-limit": "^2.0.0" - } - }, - "path-exists": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", - "integrity": "sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==", - "optional": true - } - } - }, - "platform-deploy-client": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/platform-deploy-client/-/platform-deploy-client-0.6.0.tgz", - "integrity": "sha512-mBfnOvF2gb9acGJjlXBQ6VOAkKFRdljsNKHUVY5xKqzKP2PNh/RqCIvi5AR5NqLMrQ3XaMIwRvmwAjtGw7JhYg==", - "dev": true, - "requires": { - "@ethersproject/abi": "^5.6.3", - "axios": "^0.21.2", - "defender-base-client": "^1.44.0", - "lodash": "^4.17.19", - "node-fetch": "^2.6.0" - } - }, - "pluralize": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/pluralize/-/pluralize-8.0.0.tgz", - "integrity": "sha512-Nc3IT5yHzflTfbjgqWcCPpo7DaKy4FnpB0l/zCAW0Tc7jxAiuqSxHasntB3D7887LSrA93kDJ9IXovxJYxyLCA==", - "optional": true - }, - "pollock": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/pollock/-/pollock-0.2.1.tgz", - "integrity": "sha512-2Xy6LImSXm0ANKv9BKSVuCa6Z4ACbK7oUrl9gtUgqLkekL7n9C0mlWsOGYYuGbCG8xT0x3Q4F31C3ZMyVQjwsg==", - "optional": true - }, - "pouchdb": { - "version": "7.3.0", - "resolved": "https://registry.npmjs.org/pouchdb/-/pouchdb-7.3.0.tgz", - "integrity": "sha512-OwsIQGXsfx3TrU1pLruj6PGSwFH+h5k4hGNxFkZ76Um7/ZI8F5TzUHFrpldVVIhfXYi2vP31q0q7ot1FSLFYOw==", - "optional": true, - "requires": { - "abort-controller": "3.0.0", - "argsarray": "0.0.1", - "buffer-from": "1.1.2", - "clone-buffer": "1.0.0", - "double-ended-queue": "2.1.0-0", - "fetch-cookie": "0.11.0", - "immediate": "3.3.0", - "inherits": "2.0.4", - "level": "6.0.1", - "level-codec": "9.0.2", - "level-write-stream": "1.0.0", - "leveldown": "5.6.0", - "levelup": "4.4.0", - "ltgt": "2.2.1", - "node-fetch": "2.6.7", - "readable-stream": "1.1.14", - "spark-md5": "3.0.2", - "through2": "3.0.2", - "uuid": "8.3.2", - "vuvuzela": "1.0.3" - }, - "dependencies": { - "isarray": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", - "integrity": "sha512-D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ==", - "optional": true - }, - "level": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/level/-/level-6.0.1.tgz", - "integrity": "sha512-psRSqJZCsC/irNhfHzrVZbmPYXDcEYhA5TVNwr+V92jF44rbf86hqGp8fiT702FyiArScYIlPSBTDUASCVNSpw==", - "optional": true, - "requires": { - "level-js": "^5.0.0", - "level-packager": "^5.1.0", - "leveldown": "^5.4.0" - } - }, - "node-fetch": { - "version": "2.6.7", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz", - "integrity": "sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==", - "optional": true, - "requires": { - "whatwg-url": "^5.0.0" - } - }, - "readable-stream": { - "version": "1.1.14", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz", - "integrity": "sha512-+MeVjFf4L44XUkhM1eYbD8fyEsxcV81pqMSR5gblfcLCHfZvbrqy4/qYHE+/R5HoBUT11WV5O08Cr1n3YXkWVQ==", - "optional": true, - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.1", - "isarray": "0.0.1", - "string_decoder": "~0.10.x" - } - }, - "string_decoder": { - "version": "0.10.31", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", - "integrity": "sha512-ev2QzSzWPYmy9GuqfIVildA4OdcGLeFZQrq5ys6RtiuF+RQQiZWr8TZNyAcuVXyQRYfEO+MsoB/1BuQVhOJuoQ==", - "optional": true - } - } - }, - "pouchdb-abstract-mapreduce": { - "version": "7.3.1", - "resolved": "https://registry.npmjs.org/pouchdb-abstract-mapreduce/-/pouchdb-abstract-mapreduce-7.3.1.tgz", - "integrity": "sha512-0zKXVFBvrfc1KnN0ggrB762JDmZnUpePHywo9Bq3Jy+L1FnoG7fXM5luFfvv5/T0gEw+ZTIwoocZECMnESBI9w==", - "optional": true, - "requires": { - "pouchdb-binary-utils": "7.3.1", - "pouchdb-collate": "7.3.1", - "pouchdb-collections": "7.3.1", - "pouchdb-errors": "7.3.1", - "pouchdb-fetch": "7.3.1", - "pouchdb-mapreduce-utils": "7.3.1", - "pouchdb-md5": "7.3.1", - "pouchdb-utils": "7.3.1" - } - }, - "pouchdb-adapter-leveldb-core": { - "version": "7.3.1", - "resolved": "https://registry.npmjs.org/pouchdb-adapter-leveldb-core/-/pouchdb-adapter-leveldb-core-7.3.1.tgz", - "integrity": "sha512-mxShHlqLMPz2gChrgtA9okV1ogFmQrRAoM/O4EN0CrQWPLXqYtpL1f7sI2asIvFe7SmpnvbLx7kkZyFmLTfwjA==", - "optional": true, - "requires": { - "argsarray": "0.0.1", - "buffer-from": "1.1.2", - "double-ended-queue": "2.1.0-0", - "levelup": "4.4.0", - "pouchdb-adapter-utils": "7.3.1", - "pouchdb-binary-utils": "7.3.1", - "pouchdb-collections": "7.3.1", - "pouchdb-errors": "7.3.1", - "pouchdb-json": "7.3.1", - "pouchdb-md5": "7.3.1", - "pouchdb-merge": "7.3.1", - "pouchdb-utils": "7.3.1", - "sublevel-pouchdb": "7.3.1", - "through2": "3.0.2" - } - }, - "pouchdb-adapter-memory": { - "version": "7.3.1", - "resolved": "https://registry.npmjs.org/pouchdb-adapter-memory/-/pouchdb-adapter-memory-7.3.1.tgz", - "integrity": "sha512-iHdWGJAHONqQv0we3Oi1MYen69ZS8McLW9wUyaAYcWTJnAIIAr2ZM0/TeTDVSHfMUwYqEYk7X8jRtJZEMwLnwg==", - "optional": true, - "requires": { - "memdown": "1.4.1", - "pouchdb-adapter-leveldb-core": "7.3.1", - "pouchdb-utils": "7.3.1" - }, - "dependencies": { - "abstract-leveldown": { - "version": "2.7.2", - "resolved": "https://registry.npmjs.org/abstract-leveldown/-/abstract-leveldown-2.7.2.tgz", - "integrity": "sha512-+OVvxH2rHVEhWLdbudP6p0+dNMXu8JA1CbhP19T8paTYAcX7oJ4OVjT+ZUVpv7mITxXHqDMej+GdqXBmXkw09w==", - "optional": true, - "requires": { - "xtend": "~4.0.0" - } - }, - "memdown": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/memdown/-/memdown-1.4.1.tgz", - "integrity": "sha512-iVrGHZB8i4OQfM155xx8akvG9FIj+ht14DX5CQkCTG4EHzZ3d3sgckIf/Lm9ivZalEsFuEVnWv2B2WZvbrro2w==", - "optional": true, - "requires": { - "abstract-leveldown": "~2.7.1", - "functional-red-black-tree": "^1.0.1", - "immediate": "^3.2.3", - "inherits": "~2.0.1", - "ltgt": "~2.2.0", - "safe-buffer": "~5.1.1" - } - }, - "safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "optional": true - } - } - }, - "pouchdb-adapter-utils": { - "version": "7.3.1", - "resolved": "https://registry.npmjs.org/pouchdb-adapter-utils/-/pouchdb-adapter-utils-7.3.1.tgz", - "integrity": "sha512-uKLG6dClwTs/sLIJ4WkLAi9wlnDBpOnfyhpeAgOjlOGN/XLz5nKHrA4UJRnURDyc+uv79S9r/Unc4hVpmbSPUw==", - "optional": true, - "requires": { - "pouchdb-binary-utils": "7.3.1", - "pouchdb-collections": "7.3.1", - "pouchdb-errors": "7.3.1", - "pouchdb-md5": "7.3.1", - "pouchdb-merge": "7.3.1", - "pouchdb-utils": "7.3.1" - } - }, - "pouchdb-binary-utils": { - "version": "7.3.1", - "resolved": "https://registry.npmjs.org/pouchdb-binary-utils/-/pouchdb-binary-utils-7.3.1.tgz", - "integrity": "sha512-crZJNfAEOnUoRk977Qtmk4cxEv6sNKllQ6vDDKgQrQLFjMUXma35EHzNyIJr1s76J77Q4sqKQAmxz9Y40yHGtw==", - "optional": true, - "requires": { - "buffer-from": "1.1.2" - } - }, - "pouchdb-collate": { - "version": "7.3.1", - "resolved": "https://registry.npmjs.org/pouchdb-collate/-/pouchdb-collate-7.3.1.tgz", - "integrity": "sha512-o4gyGqDMLMSNzf6EDTr3eHaH/JRMoqRhdc+eV+oA8u00nTBtr9wD+jypVe2LbgKLJ4NWqx2qVkXiTiQdUFtsLQ==", - "optional": true - }, - "pouchdb-collections": { - "version": "7.3.1", - "resolved": "https://registry.npmjs.org/pouchdb-collections/-/pouchdb-collections-7.3.1.tgz", - "integrity": "sha512-yUyDqR+OJmtwgExOSJegpBJXDLAEC84TWnbAYycyh+DZoA51Yw0+XVQF5Vh8Ii90/Ut2xo88fmrmp0t6kqom8w==", - "optional": true - }, - "pouchdb-debug": { - "version": "7.2.1", - "resolved": "https://registry.npmjs.org/pouchdb-debug/-/pouchdb-debug-7.2.1.tgz", - "integrity": "sha512-eP3ht/AKavLF2RjTzBM6S9gaI2/apcW6xvaKRQhEdOfiANqerFuksFqHCal3aikVQuDO+cB/cw+a4RyJn/glBw==", - "optional": true, - "requires": { - "debug": "3.1.0" - }, - "dependencies": { - "debug": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", - "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", - "optional": true, - "requires": { - "ms": "2.0.0" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "optional": true - } - } - }, - "pouchdb-errors": { - "version": "7.3.1", - "resolved": "https://registry.npmjs.org/pouchdb-errors/-/pouchdb-errors-7.3.1.tgz", - "integrity": "sha512-Zktz4gnXEUcZcty8FmyvtYUYsHskoST05m6H5/E2gg/0mCfEXq/XeyyLkZHaZmqD0ZPS9yNmASB1VaFWEKEaDw==", - "optional": true, - "requires": { - "inherits": "2.0.4" - } - }, - "pouchdb-fetch": { - "version": "7.3.1", - "resolved": "https://registry.npmjs.org/pouchdb-fetch/-/pouchdb-fetch-7.3.1.tgz", - "integrity": "sha512-205xAtvdHRPQ4fp1h9+RmT9oQabo9gafuPmWsS9aEl3ER54WbY8Vaj1JHZGbU4KtMTYvW7H5088zLS7Nrusuag==", - "optional": true, - "requires": { - "abort-controller": "3.0.0", - "fetch-cookie": "0.11.0", - "node-fetch": "2.6.7" - }, - "dependencies": { - "node-fetch": { - "version": "2.6.7", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz", - "integrity": "sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==", - "optional": true, - "requires": { - "whatwg-url": "^5.0.0" - } - } - } - }, - "pouchdb-find": { - "version": "7.3.1", - "resolved": "https://registry.npmjs.org/pouchdb-find/-/pouchdb-find-7.3.1.tgz", - "integrity": "sha512-AeqUfAVY1c7IFaY36BRT0vIz9r4VTKq/YOWTmiqndOZUQ/pDGxyO2fNFal6NN3PyYww0JijlD377cPvhnrhJVA==", - "optional": true, - "requires": { - "pouchdb-abstract-mapreduce": "7.3.1", - "pouchdb-collate": "7.3.1", - "pouchdb-errors": "7.3.1", - "pouchdb-fetch": "7.3.1", - "pouchdb-md5": "7.3.1", - "pouchdb-selector-core": "7.3.1", - "pouchdb-utils": "7.3.1" - } - }, - "pouchdb-json": { - "version": "7.3.1", - "resolved": "https://registry.npmjs.org/pouchdb-json/-/pouchdb-json-7.3.1.tgz", - "integrity": "sha512-AyOKsmc85/GtHjMZyEacqzja8qLVfycS1hh1oskR+Bm5PIITX52Fb8zyi0hEetV6VC0yuGbn0RqiLjJxQePeqQ==", - "optional": true, - "requires": { - "vuvuzela": "1.0.3" - } - }, - "pouchdb-mapreduce-utils": { - "version": "7.3.1", - "resolved": "https://registry.npmjs.org/pouchdb-mapreduce-utils/-/pouchdb-mapreduce-utils-7.3.1.tgz", - "integrity": "sha512-oUMcq82+4pTGQ6dtrhgORHOVHZSr6w/5tFIUGlv7RABIDvJarL4snMawADjlpiEwPdiQ/ESG8Fqt8cxqvqsIgg==", - "optional": true, - "requires": { - "argsarray": "0.0.1", - "inherits": "2.0.4", - "pouchdb-collections": "7.3.1", - "pouchdb-utils": "7.3.1" - } - }, - "pouchdb-md5": { - "version": "7.3.1", - "resolved": "https://registry.npmjs.org/pouchdb-md5/-/pouchdb-md5-7.3.1.tgz", - "integrity": "sha512-aDV8ui/mprnL3xmt0gT/81DFtTtJiKyn+OxIAbwKPMfz/rDFdPYvF0BmDC9QxMMzGfkV+JJUjU6at0PPs2mRLg==", - "optional": true, - "requires": { - "pouchdb-binary-utils": "7.3.1", - "spark-md5": "3.0.2" - } - }, - "pouchdb-merge": { - "version": "7.3.1", - "resolved": "https://registry.npmjs.org/pouchdb-merge/-/pouchdb-merge-7.3.1.tgz", - "integrity": "sha512-FeK3r35mKimokf2PQ2tUI523QWyZ4lYZ0Yd75FfSch/SPY6wIokz5XBZZ6PHdu5aOJsEKzoLUxr8CpSg9DhcAw==", - "optional": true - }, - "pouchdb-selector-core": { - "version": "7.3.1", - "resolved": "https://registry.npmjs.org/pouchdb-selector-core/-/pouchdb-selector-core-7.3.1.tgz", - "integrity": "sha512-HBX+nNGXcaL9z0uNpwSMRq2GNZd3EZXW+fe9rJHS0hvJohjZL7aRJLoaXfEdHPRTNW+CpjM3Rny60eGekQdI/w==", - "optional": true, + "integrity": "sha512-0Gni6D4UcLTbv9c57DfxDGdr41XfgUjqWZu492f0cIGr16zDU06BWP/RAEvOuo7CQ0CNjHaLlM59YJJFm3NWlw==", "requires": { - "pouchdb-collate": "7.3.1", - "pouchdb-utils": "7.3.1" + "pinkie": "^2.0.0" } }, - "pouchdb-utils": { - "version": "7.3.1", - "resolved": "https://registry.npmjs.org/pouchdb-utils/-/pouchdb-utils-7.3.1.tgz", - "integrity": "sha512-R3hHBo1zTdTu/NFs3iqkcaQAPwhIH0gMIdfVKd5lbDYlmP26rCG5pdS+v7NuoSSFLJ4xxnaGV+Gjf4duYsJ8wQ==", + "pkg-dir": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", + "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", "optional": true, "requires": { - "argsarray": "0.0.1", - "clone-buffer": "1.0.0", - "immediate": "3.3.0", - "inherits": "2.0.4", - "pouchdb-collections": "7.3.1", - "pouchdb-errors": "7.3.1", - "pouchdb-md5": "7.3.1", - "uuid": "8.3.2" + "find-up": "^4.0.0" } }, + "pollock": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/pollock/-/pollock-0.2.1.tgz", + "integrity": "sha512-2Xy6LImSXm0ANKv9BKSVuCa6Z4ACbK7oUrl9gtUgqLkekL7n9C0mlWsOGYYuGbCG8xT0x3Q4F31C3ZMyVQjwsg==", + "optional": true + }, "prb-math": { "version": "2.4.3", "resolved": "https://registry.npmjs.org/prb-math/-/prb-math-2.4.3.tgz", @@ -59155,21 +25871,28 @@ } } }, - "precond": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/precond/-/precond-0.2.3.tgz", - "integrity": "sha512-QCYG84SgGyGzqJ/vlMsxeXd/pgL/I94ixdNFyh1PusWmTCyVfPJjZ1K1jvHtsbfnXQs2TSkEP2fR7QiMZAnKFQ==" - }, - "prepend-http": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-2.0.0.tgz", - "integrity": "sha512-ravE6m9Atw9Z/jjttRUZ+clIXogdghyZAuWJ3qEzjT+jI/dL1ifAqhZeC5VHzQp1MSt1+jxKkFNemj/iO7tVUA==" - }, - "prettier": { - "version": "2.8.7", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.8.7.tgz", - "integrity": "sha512-yPngTo3aXUUmyuTjeTUT75txrf+aMh9FiD7q9ZE/i6r0bPb22g4FsE6Y338PQX1bmfy08i9QQCB7/rcUAVntfw==", - "dev": true + "prebuild-install": { + "version": "5.3.6", + "resolved": "https://registry.npmjs.org/prebuild-install/-/prebuild-install-5.3.6.tgz", + "integrity": "sha512-s8Aai8++QQGi4sSbs/M1Qku62PFK49Jm1CbgXklGz4nmHveDq0wzJkg7Na5QbnO1uNH8K7iqx2EQ/mV0MZEmOg==", + "optional": true, + "requires": { + "detect-libc": "^1.0.3", + "expand-template": "^2.0.3", + "github-from-package": "0.0.0", + "minimist": "^1.2.3", + "mkdirp-classic": "^0.5.3", + "napi-build-utils": "^1.0.1", + "node-abi": "^2.7.0", + "noop-logger": "^0.1.1", + "npmlog": "^4.0.1", + "pump": "^3.0.0", + "rc": "^1.2.7", + "simple-get": "^3.0.3", + "tar-fs": "^2.0.0", + "tunnel-agent": "^0.6.0", + "which-pm-runs": "^1.0.0" + } }, "process": { "version": "0.11.10", @@ -59188,22 +25911,13 @@ "optional": true }, "promise": { - "version": "8.2.0", - "resolved": "https://registry.npmjs.org/promise/-/promise-8.2.0.tgz", - "integrity": "sha512-+CMAlLHqwRYwBMXKCP+o8ns7DN+xHDUiI+0nArsiJ9y+kJVPLFxEaSw6Ha9s9H0tftxg2Yzl25wqj9G7m5wLZg==", + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/promise/-/promise-8.3.0.tgz", + "integrity": "sha512-rZPNPKTOYVNEEKFaq1HqTgOwZD+4/YHS5ukLzQCypkj+OkYx7iv0mA91lJlpPPZ8vMau3IIGj5Qlwrx+8iiSmg==", "requires": { "asap": "~2.0.6" } }, - "promise-to-callback": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/promise-to-callback/-/promise-to-callback-1.0.0.tgz", - "integrity": "sha512-uhMIZmKM5ZteDMfLgJnoSq9GCwsNKrYau73Awf1jIy6/eUcuuZ3P+CD9zUv0kJsIUbU+x6uLNIhXhLHDs1pNPA==", - "requires": { - "is-fn": "^1.0.0", - "set-immediate-shim": "^1.0.1" - } - }, "proper-lockfile": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/proper-lockfile/-/proper-lockfile-4.1.2.tgz", @@ -59220,6 +25934,12 @@ "resolved": "https://registry.npmjs.org/retry/-/retry-0.12.0.tgz", "integrity": "sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow==", "dev": true + }, + "signal-exit": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", + "dev": true } } }, @@ -59235,8 +25955,7 @@ "proxy-from-env": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", - "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==", - "optional": true + "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==" }, "prr": { "version": "1.0.1", @@ -59248,31 +25967,6 @@ "resolved": "https://registry.npmjs.org/psl/-/psl-1.9.0.tgz", "integrity": "sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag==" }, - "pstree.remy": { - "version": "1.1.8", - "resolved": "https://registry.npmjs.org/pstree.remy/-/pstree.remy-1.1.8.tgz", - "integrity": "sha512-77DZwxQmxKnu3aR542U+X8FypNzbfJ+C5XQDk3uWjWxn6151aIMGthWYRXTqT1E5oJvg+ljaa2OJi+VfvCOQ8w==" - }, - "public-encrypt": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/public-encrypt/-/public-encrypt-4.0.3.tgz", - "integrity": "sha512-zVpa8oKZSz5bTMTFClc1fQOnyyEzpl5ozpi1B5YcvBrdohMjH2rfsBtyXcuNuwjsDIXmBYlF2N5FlJYhR29t8Q==", - "requires": { - "bn.js": "^4.1.0", - "browserify-rsa": "^4.0.0", - "create-hash": "^1.1.0", - "parse-asn1": "^5.0.0", - "randombytes": "^2.0.1", - "safe-buffer": "^5.1.2" - }, - "dependencies": { - "bn.js": { - "version": "4.12.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==" - } - } - }, "pump": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", @@ -59366,25 +26060,18 @@ "requires": { "glob": "^7.1.3" } - }, - "ws": { - "version": "8.5.0", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.5.0.tgz", - "integrity": "sha512-BWX0SWVgLPzYwF8lTzEy1egjhS4S4OEAHfsO8o65WOVsrnSRGaSiUaa9e0ggGlkMTtBlmOpEXiie9RUcBO86qg==", - "optional": true, - "requires": {} } } }, "pure-rand": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/pure-rand/-/pure-rand-5.0.3.tgz", - "integrity": "sha512-9N8x1h8dptBQpHyC7aZMS+iNOAm97WMGY0AFrguU1cpfW3I5jINkWe5BIY5md0ofy+1TCIELsVcm/GJXZSaPbw==" + "version": "5.0.5", + "resolved": "https://registry.npmjs.org/pure-rand/-/pure-rand-5.0.5.tgz", + "integrity": "sha512-BwQpbqxSCBJVpamI6ydzcKqyFmnd5msMWUGvzXLm1aXvusbbgkbOto/EUPM00hjveJEaJtdbhUjKSzWRhQVkaw==" }, "qs": { - "version": "6.11.0", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz", - "integrity": "sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==", + "version": "6.11.2", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.2.tgz", + "integrity": "sha512-tDNIz22aBzCDxLtVH++VnTfzxlfeK5CbqohpSqpJgj1Wg/cQbStNAz3NuqCs5vV+pjBsK4x4pN9HlVh7rcYRiA==", "requires": { "side-channel": "^1.0.4" } @@ -59399,12 +26086,6 @@ "strict-uri-encode": "^1.0.0" } }, - "querystring": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/querystring/-/querystring-0.2.0.tgz", - "integrity": "sha512-X/xY82scca2tau62i9mDyU9K+I+djTMUsvwf7xnUX5GLvVzgJybOJf4Y6o9Zx3oJK/LSXg5tTZBjwzqVPaPO2g==", - "dev": true - }, "queue-microtask": { "version": "1.2.3", "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", @@ -59423,29 +26104,15 @@ "safe-buffer": "^5.1.0" } }, - "randomfill": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/randomfill/-/randomfill-1.0.4.tgz", - "integrity": "sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw==", - "requires": { - "randombytes": "^2.0.5", - "safe-buffer": "^5.1.0" - } - }, - "randomhex": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/randomhex/-/randomhex-0.1.5.tgz", - "integrity": "sha512-2+Kkw7UiZGQWOz7rw8hPW44utkBYMEciQfziaZ71RcyDu+refQWzS/0DgfUSa5MwclrOD3sf3vI5vmrTYjwpjQ==" - }, "range-parser": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==" }, "raw-body": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.1.tgz", - "integrity": "sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig==", + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.2.tgz", + "integrity": "sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA==", "requires": { "bytes": "3.1.2", "http-errors": "2.0.0", @@ -59453,6 +26120,26 @@ "unpipe": "1.0.0" } }, + "rc": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", + "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", + "optional": true, + "requires": { + "deep-extend": "^0.6.0", + "ini": "~1.3.0", + "minimist": "^1.2.0", + "strip-json-comments": "~2.0.1" + }, + "dependencies": { + "strip-json-comments": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", + "integrity": "sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==", + "optional": true + } + } + }, "read-pkg": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-1.1.0.tgz", @@ -59492,9 +26179,9 @@ } }, "readable-stream": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", - "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", "requires": { "inherits": "^2.0.3", "string_decoder": "^1.1.1", @@ -59509,44 +26196,20 @@ "picomatch": "^2.2.1" } }, - "reduce-flatten": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/reduce-flatten/-/reduce-flatten-2.0.0.tgz", - "integrity": "sha512-EJ4UNY/U1t2P/2k6oqotuX2Cc3T6nxJwsM0N0asT7dhrtH1ltUxDn4NalSYmPE2rCkVpcf/X6R0wDwcFpzhd4w==", - "dev": true - }, - "redux": { - "version": "3.7.2", - "resolved": "https://registry.npmjs.org/redux/-/redux-3.7.2.tgz", - "integrity": "sha512-pNqnf9q1hI5HHZRBkj3bAngGZW/JMCmexDlOxw4XagXY2o1327nHH54LoTjiPJ0gizoqPDRqWyX/00g0hD6w+A==", - "requires": { - "lodash": "^4.2.1", - "lodash-es": "^4.2.1", - "loose-envify": "^1.1.0", - "symbol-observable": "^1.0.3" - } - }, - "redux-saga": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/redux-saga/-/redux-saga-1.0.0.tgz", - "integrity": "sha512-GvJWs/SzMvEQgeaw6sRMXnS2FghlvEGsHiEtTLpJqc/FHF3I5EE/B+Hq5lyHZ8LSoT2r/X/46uWvkdCnK9WgHA==", - "requires": { - "@redux-saga/core": "^1.0.0" - } - }, "regenerator-runtime": { - "version": "0.14.0", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.14.0.tgz", - "integrity": "sha512-srw17NI0TUWHuGa5CFGGmhfNIeja30WMBfbslPNhf6JrqQlLN5gcrvig1oqPxiVaXb0oW0XRKtH6Nngs5lKCIA==" + "version": "0.14.1", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.14.1.tgz", + "integrity": "sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==" }, "regexp.prototype.flags": { - "version": "1.4.3", - "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.4.3.tgz", - "integrity": "sha512-fjggEOO3slI6Wvgjwflkc4NFRCTZAu5CnNfBd5qOMYhWdn67nJBBu34/TkD++eeFmd8C9r9jfXJ27+nSiRkSUA==", + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.1.tgz", + "integrity": "sha512-sy6TXMN+hnP/wMy+ISxg3krXx7BAtWVO4UouuCN/ziM9UEne0euamVNafDfvC83bRNr95y0V5iijeDQFUNpvrg==", + "dev": true, "requires": { "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "functions-have-names": "^1.2.2" + "define-properties": "^1.2.0", + "set-function-name": "^2.0.0" } }, "req-cwd": { @@ -59614,64 +26277,21 @@ } } }, - "request-promise-core": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/request-promise-core/-/request-promise-core-1.1.4.tgz", - "integrity": "sha512-TTbAfBBRdWD7aNNOoVOBH4pN/KigV6LyapYNNlAPA8JwbovRti1E88m3sYAwsLi5ryhPKsE9APwnjFTgdUjTpw==", - "requires": { - "lodash": "^4.17.19" - } - }, - "request-promise-native": { - "version": "1.0.9", - "resolved": "https://registry.npmjs.org/request-promise-native/-/request-promise-native-1.0.9.tgz", - "integrity": "sha512-wcW+sIUiWnKgNY0dqCpOZkUbF/I+YPi+f09JZIDa39Ec+q82CpSYniDp+ISgTTbKmnpJWASeJBPZmoxH84wt3g==", - "requires": { - "request-promise-core": "1.1.4", - "stealthy-require": "^1.1.1", - "tough-cookie": "^2.3.3" - } - }, "require-directory": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==" }, "require-from-string": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", - "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==" + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-1.2.1.tgz", + "integrity": "sha512-H7AkJWMobeskkttHyhTVtS0fxpFLjxhbfMa6Bk3wimP7sdPRGL3EyCg3sAQenFfAe+xQ+oAc85Nmtvq0ROM83Q==" }, "require-main-filename": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-1.0.1.tgz", "integrity": "sha512-IqSUtOVP4ksd1C/ej5zeEh/BIP2ajqpn8c5x+q99gvcIG/Qf0cud5raVnE/Dwd0ua9TXYDoDc0RE5hBSdz22Ug==" }, - "reselect": { - "version": "4.1.8", - "resolved": "https://registry.npmjs.org/reselect/-/reselect-4.1.8.tgz", - "integrity": "sha512-ab9EmR80F/zQTMNeneUr4cv+jSwPJgIlvEmVwLerwrWVbpLlBuls9XHzIeTFy4cegU2NHBp3va0LKOzU5qFEYQ==" - }, - "reselect-tree": { - "version": "1.3.7", - "resolved": "https://registry.npmjs.org/reselect-tree/-/reselect-tree-1.3.7.tgz", - "integrity": "sha512-kZN+C1cVJ6fFN2smSb0l4UvYZlRzttgnu183svH4NrU22cBY++ikgr2QT75Uuk4MYpv5gXSVijw4c5U6cx6GKg==", - "requires": { - "debug": "^3.1.0", - "json-pointer": "^0.6.1", - "reselect": "^4.0.0" - }, - "dependencies": { - "debug": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", - "requires": { - "ms": "^2.1.1" - } - } - } - }, "resolve": { "version": "1.17.0", "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.17.0.tgz", @@ -59705,21 +26325,11 @@ } } }, - "restore-cursor": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz", - "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==", - "optional": true, - "requires": { - "onetime": "^5.1.0", - "signal-exit": "^3.0.2" - } - }, "retry": { "version": "0.13.1", "resolved": "https://registry.npmjs.org/retry/-/retry-0.13.1.tgz", "integrity": "sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg==", - "devOptional": true + "dev": true }, "rimraf": { "version": "2.4.5", @@ -59730,452 +26340,22 @@ }, "dependencies": { "brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "requires": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "glob": { - "version": "6.0.4", - "resolved": "https://registry.npmjs.org/glob/-/glob-6.0.4.tgz", - "integrity": "sha512-MKZeRNyYZAVVVG1oZeLaWie1uweH40m9AZwIwxyPbTSX4hHrVYSzLg0Ro5Z5R7XKkIX+Cc6oD1rqeDJnwsB8/A==", - "requires": { - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "2 || 3", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - }, - "minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "requires": { - "brace-expansion": "^1.1.7" - } - } - } - }, - "ripemd160": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.2.tgz", - "integrity": "sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==", - "requires": { - "hash-base": "^3.0.0", - "inherits": "^2.0.1" - } - }, - "ripemd160-min": { - "version": "0.0.6", - "resolved": "https://registry.npmjs.org/ripemd160-min/-/ripemd160-min-0.0.6.tgz", - "integrity": "sha512-+GcJgQivhs6S9qvLogusiTcS9kQUfgR75whKuy5jIhuiOfQuJ8fjqxV6EGD5duH1Y/FawFUMtMhyeq3Fbnib8A==" - }, - "rlp": { - "version": "2.2.7", - "resolved": "https://registry.npmjs.org/rlp/-/rlp-2.2.7.tgz", - "integrity": "sha512-d5gdPmgQ0Z+AklL2NVXr/IoSjNZFfTVvQWzL/AM2AOcSzYP2xjlb0AC8YyCLc41MSNf6P6QVtjgPdmVtzb+4lQ==", - "requires": { - "bn.js": "^5.2.0" - } - }, - "rpc-websockets": { - "version": "7.5.1", - "resolved": "https://registry.npmjs.org/rpc-websockets/-/rpc-websockets-7.5.1.tgz", - "integrity": "sha512-kGFkeTsmd37pHPMaHIgN1LVKXMi0JD782v4Ds9ZKtLlwdTKjn+CxM9A9/gLT2LaOuEcEFGL98h1QWQtlOIdW0w==", - "requires": { - "@babel/runtime": "^7.17.2", - "bufferutil": "^4.0.1", - "eventemitter3": "^4.0.7", - "utf-8-validate": "^5.0.2", - "uuid": "^8.3.2", - "ws": "^8.5.0" - } - }, - "run-parallel-limit": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/run-parallel-limit/-/run-parallel-limit-1.1.0.tgz", - "integrity": "sha512-jJA7irRNM91jaKc3Hcl1npHsFLOXOoTkPCUL1JEa1R82O2miplXXRaGdjW/KM/98YQWDhJLiSs793CnXfblJUw==", - "requires": { - "queue-microtask": "^1.2.2" - } - }, - "rustbn.js": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/rustbn.js/-/rustbn.js-0.2.0.tgz", - "integrity": "sha512-4VlvkRUuCJvr2J6Y0ImW7NvTCriMi7ErOAqWk1y69vAdoNIzCF3yPmgeNzx+RQTLEDFq5sHfscn1MwHxP9hNfA==" - }, - "rxjs": { - "version": "6.6.7", - "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.7.tgz", - "integrity": "sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ==", - "requires": { - "tslib": "^1.9.0" - }, - "dependencies": { - "tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" - } - } - }, - "safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==" - }, - "safe-event-emitter": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/safe-event-emitter/-/safe-event-emitter-1.0.1.tgz", - "integrity": "sha512-e1wFe99A91XYYxoQbcq2ZJUWurxEyP8vfz7A7vuUe1s95q8r5ebraVaA1BukYJcpM6V16ugWoD9vngi8Ccu5fg==", - "requires": { - "events": "^3.0.0" - } - }, - "safe-json-stringify": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/safe-json-stringify/-/safe-json-stringify-1.2.0.tgz", - "integrity": "sha512-gH8eh2nZudPQO6TytOvbxnuhYBOvDBBLW52tz5q6X58lJcd/tkmqFR+5Z9adS8aJtURSXWThWy/xJtJwixErvg==", - "optional": true - }, - "safe-regex-test": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.0.0.tgz", - "integrity": "sha512-JBUUzyOgEwXQY1NuPtvcj/qcBDbDmEvWufhlnXZIm75DEHp+afM1r1ujJpJsV/gSM4t59tpDyPi1sd6ZaPFfsA==", - "requires": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.1.3", - "is-regex": "^1.1.4" - } - }, - "safer-buffer": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" - }, - "scrypt-js": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/scrypt-js/-/scrypt-js-3.0.1.tgz", - "integrity": "sha512-cdwTTnqPu0Hyvf5in5asVdZocVDTNRmR7XEcJuIzMjJeSHybHl7vpB66AzwTaIg6CLSbtjcxc8fqcySfnTkccA==" - }, - "scryptsy": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/scryptsy/-/scryptsy-2.1.0.tgz", - "integrity": "sha512-1CdSqHQowJBnMAFyPEBRfqag/YP9OF394FV+4YREIJX4ljD7OxvQRDayyoyyCk+senRjSkP6VnUNQmVQqB6g7w==" - }, - "secp256k1": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/secp256k1/-/secp256k1-4.0.3.tgz", - "integrity": "sha512-NLZVf+ROMxwtEj3Xa562qgv2BK5e2WNmXPiOdVIPLgs6lyTzMvBq0aWTYMI5XCP9jZMVKOcqZLw/Wc4vDkuxhA==", - "requires": { - "elliptic": "^6.5.4", - "node-addon-api": "^2.0.0", - "node-gyp-build": "^4.2.0" - } - }, - "seedrandom": { - "version": "3.0.5", - "resolved": "https://registry.npmjs.org/seedrandom/-/seedrandom-3.0.5.tgz", - "integrity": "sha512-8OwmbklUNzwezjGInmZ+2clQmExQPvomqjL7LFqOYqtmuxRgQYqOD3mHaU+MvZn5FLUeVxVfQjwLZW/n/JFuqg==" - }, - "seek-bzip": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/seek-bzip/-/seek-bzip-1.0.6.tgz", - "integrity": "sha512-e1QtP3YL5tWww8uKaOCQ18UxIT2laNBXHjV/S2WYCiK4udiv8lkG89KRIoCjUagnAmCBurjF4zEVX2ByBbnCjQ==", - "requires": { - "commander": "^2.8.1" - } - }, - "semaphore": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/semaphore/-/semaphore-1.1.0.tgz", - "integrity": "sha512-O4OZEaNtkMd/K0i6js9SL+gqy0ZCBMgUvlSqHKi4IBdjhe7wB8pwztUk1BbZ1fmrvpwFrPbHzqd2w5pTcJH6LA==" - }, - "semaphore-async-await": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/semaphore-async-await/-/semaphore-async-await-1.5.1.tgz", - "integrity": "sha512-b/ptP11hETwYWpeilHXXQiV5UJNJl7ZWWooKRE5eBIYWoom6dZ0SluCIdCtKycsMtZgKWE01/qAw6jblw1YVhg==" - }, - "semver": { - "version": "7.5.4", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", - "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", - "requires": { - "lru-cache": "^6.0.0" - }, - "dependencies": { - "lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "requires": { - "yallist": "^4.0.0" - } - }, - "yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" - } - } - }, - "send": { - "version": "0.18.0", - "resolved": "https://registry.npmjs.org/send/-/send-0.18.0.tgz", - "integrity": "sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==", - "requires": { - "debug": "2.6.9", - "depd": "2.0.0", - "destroy": "1.2.0", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "etag": "~1.8.1", - "fresh": "0.5.2", - "http-errors": "2.0.0", - "mime": "1.6.0", - "ms": "2.1.3", - "on-finished": "2.4.1", - "range-parser": "~1.2.1", - "statuses": "2.0.1" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "requires": { - "ms": "2.0.0" - }, - "dependencies": { - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" - } - } - }, - "ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" - } - } - }, - "sentence-case": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/sentence-case/-/sentence-case-2.1.1.tgz", - "integrity": "sha512-ENl7cYHaK/Ktwk5OTD+aDbQ3uC8IByu/6Bkg+HDv8Mm+XnBnppVNalcfJTNsp1ibstKh030/JKQQWglDvtKwEQ==", - "requires": { - "no-case": "^2.2.0", - "upper-case-first": "^1.1.2" - } - }, - "serialize-javascript": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.0.tgz", - "integrity": "sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag==", - "requires": { - "randombytes": "^2.1.0" - } - }, - "serve-static": { - "version": "1.15.0", - "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.15.0.tgz", - "integrity": "sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==", - "requires": { - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "parseurl": "~1.3.3", - "send": "0.18.0" - } - }, - "servify": { - "version": "0.1.12", - "resolved": "https://registry.npmjs.org/servify/-/servify-0.1.12.tgz", - "integrity": "sha512-/xE6GvsKKqyo1BAY+KxOWXcLpPsUUyji7Qg3bVD7hh1eRze5bR1uYiuDA/k3Gof1s9BTzQZEJK8sNcNGFIzeWw==", - "requires": { - "body-parser": "^1.16.0", - "cors": "^2.8.1", - "express": "^4.14.0", - "request": "^2.79.0", - "xhr": "^2.3.3" - } - }, - "set-blocking": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", - "integrity": "sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==" - }, - "set-immediate-shim": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/set-immediate-shim/-/set-immediate-shim-1.0.1.tgz", - "integrity": "sha512-Li5AOqrZWCVA2n5kryzEmqai6bKSIvpz5oUJHPVj6+dsbD3X1ixtsY5tEnsaNpH3pFAHmG8eIHUrtEtohrg+UQ==" - }, - "setimmediate": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", - "integrity": "sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA==" - }, - "setprototypeof": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", - "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==" - }, - "sha.js": { - "version": "2.4.11", - "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz", - "integrity": "sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==", - "requires": { - "inherits": "^2.0.1", - "safe-buffer": "^5.0.1" - } - }, - "sha1": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/sha1/-/sha1-1.1.1.tgz", - "integrity": "sha512-dZBS6OrMjtgVkopB1Gmo4RQCDKiZsqcpAQpkV/aaj+FCrCg8r4I4qMkDPQjBgLIxlmu9k4nUbWq6ohXahOneYA==", - "requires": { - "charenc": ">= 0.0.1", - "crypt": ">= 0.0.1" - } - }, - "sha3": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/sha3/-/sha3-2.1.4.tgz", - "integrity": "sha512-S8cNxbyb0UGUM2VhRD4Poe5N58gJnJsLJ5vC7FYWGUmGhcsj4++WaIOBFVDxlG0W3To6xBuiRh+i0Qp2oNCOtg==", - "requires": { - "buffer": "6.0.3" - } - }, - "shallowequal": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/shallowequal/-/shallowequal-1.1.0.tgz", - "integrity": "sha512-y0m1JoUZSlPAjXVtPPW70aZWfIL/dSP7AFkRnniLCrK/8MDKog3TySTBmckD+RObVxH0v4Tox67+F14PdED2oQ==" - }, - "shebang-command": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", - "integrity": "sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg==", - "requires": { - "shebang-regex": "^1.0.0" - } - }, - "shebang-regex": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", - "integrity": "sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ==" - }, - "side-channel": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", - "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", - "requires": { - "call-bind": "^1.0.0", - "get-intrinsic": "^1.0.2", - "object-inspect": "^1.9.0" - } - }, - "signal-exit": { - "version": "3.0.7", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", - "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", - "devOptional": true - }, - "simple-concat": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/simple-concat/-/simple-concat-1.0.1.tgz", - "integrity": "sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q==" - }, - "simple-update-notifier": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/simple-update-notifier/-/simple-update-notifier-1.0.7.tgz", - "integrity": "sha512-BBKgR84BJQJm6WjWFMHgLVuo61FBDSj1z/xSFUIozqO6wO7ii0JxCqlIud7Enr/+LhlbNI0whErq96P2qHNWew==", - "requires": { - "semver": "~7.0.0" - }, - "dependencies": { - "semver": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.0.0.tgz", - "integrity": "sha512-+GB6zVA9LWh6zovYQLALHwv5rb2PHGlJi3lfiqIHxR0uuwCgefcOJc59v9fv1w8GbStwxuuqqAjI9NMAOOgq1A==" - } - } - }, - "slash": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-2.0.0.tgz", - "integrity": "sha512-ZYKh3Wh2z1PpEXWr0MpSBZ0V6mZHAQfYevttO11c51CaWjGTaadiKZ+wVt1PbMlDV5qhMFslpZCemhwOK7C89A==" - }, - "slice-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz", - "integrity": "sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==", - "dev": true, - "requires": { - "ansi-styles": "^4.0.0", - "astral-regex": "^2.0.0", - "is-fullwidth-code-point": "^3.0.0" - } - }, - "snake-case": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/snake-case/-/snake-case-2.1.0.tgz", - "integrity": "sha512-FMR5YoPFwOLuh4rRz92dywJjyKYZNLpMn1R5ujVpIYkbA9p01fq8RMg0FkO4M+Yobt4MjHeLTJVm5xFFBHSV2Q==", - "requires": { - "no-case": "^2.2.0" - } - }, - "sol-merger": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/sol-merger/-/sol-merger-4.4.0.tgz", - "integrity": "sha512-eYlgsVAeTPiIpLwRCnu8vdhAI40mt8I9BAnwdHazF+8ggWd0EuucQYxs4v+GyjC/5cmCfPMJ55T37tgk/zXqSg==", - "requires": { - "antlr4ts": "^0.5.0-alpha.4", - "cli-color": "^2.0.3", - "commander": "^4.0.1", - "debug": "^4.3.4", - "fs-extra": "^10.0.0", - "glob": "^7.1.7", - "strip-json-comments": "^3.0.1" - }, - "dependencies": { - "brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "requires": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "commander": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz", - "integrity": "sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==" - }, - "fs-extra": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz", - "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==", + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", "requires": { - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" } }, "glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "version": "6.0.4", + "resolved": "https://registry.npmjs.org/glob/-/glob-6.0.4.tgz", + "integrity": "sha512-MKZeRNyYZAVVVG1oZeLaWie1uweH40m9AZwIwxyPbTSX4hHrVYSzLg0Ro5Z5R7XKkIX+Cc6oD1rqeDJnwsB8/A==", "requires": { - "fs.realpath": "^1.0.0", "inflight": "^1.0.4", "inherits": "2", - "minimatch": "^3.1.1", + "minimatch": "2 || 3", "once": "^1.3.0", "path-is-absolute": "^1.0.0" } @@ -60190,853 +26370,568 @@ } } }, - "sol2uml": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/sol2uml/-/sol2uml-2.2.0.tgz", - "integrity": "sha512-JMBvn3ZMT/1egoZjheM4Mh9gQudrlVjFZ1VS0gjQ/eluITT08U6V438Jyku28OuXz42aXNbGS80JuRZo0J7pLg==", - "optional": true, - "requires": { - "@aduh95/viz.js": "^3.7.0", - "@solidity-parser/parser": "^0.14.3", - "axios": "^0.27.2", - "commander": "^9.4.0", - "convert-svg-to-png": "^0.6.4", - "debug": "^4.3.4", - "ethers": "^5.6.9", - "js-graph-algorithms": "^1.0.18", - "klaw": "^4.0.1" - }, - "dependencies": { - "axios": { - "version": "0.27.2", - "resolved": "https://registry.npmjs.org/axios/-/axios-0.27.2.tgz", - "integrity": "sha512-t+yRIyySRTp/wua5xEr+z1q60QmLq8ABsS5O9Me1AsE5dfKqgnCFzwiCZZ/cGNd1lq4/7akDWMxdhVlucjmnOQ==", - "optional": true, - "requires": { - "follow-redirects": "^1.14.9", - "form-data": "^4.0.0" - } - }, - "commander": { - "version": "9.5.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-9.5.0.tgz", - "integrity": "sha512-KRs7WVDKg86PWiuAqhDrAQnTXZKraVcCc6vFdL14qrZ/DcWwuRo7VoiYXalXO7S5GKpqYiVEwCbgFDfxNHKJBQ==", - "optional": true - }, - "form-data": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz", - "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==", - "optional": true, - "requires": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.8", - "mime-types": "^2.1.12" - } - }, - "klaw": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/klaw/-/klaw-4.1.0.tgz", - "integrity": "sha512-1zGZ9MF9H22UnkpVeuaGKOjfA2t6WrfdrJmGjy16ykcjnKQDmHVX+KI477rpbGevz/5FD4MC3xf1oxylBgcaQw==", - "optional": true - } - } - }, - "solc": { - "version": "0.8.21", - "resolved": "https://registry.npmjs.org/solc/-/solc-0.8.21.tgz", - "integrity": "sha512-N55ogy2dkTRwiONbj4e6wMZqUNaLZkiRcjGyeafjLYzo/tf/IvhHY5P5wpe+H3Fubh9idu071i8eOGO31s1ylg==", - "requires": { - "command-exists": "^1.2.8", - "commander": "^8.1.0", - "follow-redirects": "^1.12.1", - "js-sha3": "0.8.0", - "memorystream": "^0.3.1", - "semver": "^5.5.0", - "tmp": "0.0.33" - }, - "dependencies": { - "commander": { - "version": "8.3.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-8.3.0.tgz", - "integrity": "sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==" - }, - "semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" - } - } - }, - "solidity-ast": { - "version": "0.4.49", - "resolved": "https://registry.npmjs.org/solidity-ast/-/solidity-ast-0.4.49.tgz", - "integrity": "sha512-Pr5sCAj1SFqzwFZw1HPKSq0PehlQNdM8GwKyAVYh2DOn7/cCK8LUKD1HeHnKtTgBW7hi9h4nnnan7hpAg5RhWQ==", - "dev": true - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" - }, - "source-map-support": { - "version": "0.5.21", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", - "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", - "requires": { - "buffer-from": "^1.0.0", - "source-map": "^0.6.0" - } - }, - "spark-md5": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/spark-md5/-/spark-md5-3.0.2.tgz", - "integrity": "sha512-wcFzz9cDfbuqe0FZzfi2or1sgyIrsDwmPwfZC4hiNidPdPINjeUwNfv5kldczoEAcjl9Y1L3SM7Uz2PUEQzxQw==", - "optional": true - }, - "spdx-correct": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.1.tgz", - "integrity": "sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w==", - "requires": { - "spdx-expression-parse": "^3.0.0", - "spdx-license-ids": "^3.0.0" - } - }, - "spdx-exceptions": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz", - "integrity": "sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==" - }, - "spdx-expression-parse": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz", - "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==", - "requires": { - "spdx-exceptions": "^2.1.0", - "spdx-license-ids": "^3.0.0" - } - }, - "spdx-license-ids": { - "version": "3.0.12", - "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.12.tgz", - "integrity": "sha512-rr+VVSXtRhO4OHbXUiAF7xW3Bo9DuuF6C5jH+q/x15j2jniycgKbxU09Hr0WqlSLUs4i4ltHGXqTe7VHclYWyA==" - }, - "split-ca": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/split-ca/-/split-ca-1.0.1.tgz", - "integrity": "sha512-Q5thBSxp5t8WPTTJQS59LrGqOZqOsrhDGDVm8azCqIBjSBd7nd9o2PM+mDulQQkh8h//4U6hFZnc/mul8t5pWQ==" - }, - "sprintf-js": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", - "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==" - }, - "ssh2": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/ssh2/-/ssh2-1.11.0.tgz", - "integrity": "sha512-nfg0wZWGSsfUe/IBJkXVll3PEZ//YH2guww+mP88gTpuSU4FtZN7zu9JoeTGOyCNx2dTDtT9fOpWwlzyj4uOOw==", + "ripemd160": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.2.tgz", + "integrity": "sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==", "requires": { - "asn1": "^0.2.4", - "bcrypt-pbkdf": "^1.0.2", - "cpu-features": "~0.0.4", - "nan": "^2.16.0" + "hash-base": "^3.0.0", + "inherits": "^2.0.1" } }, - "sshpk": { - "version": "1.17.0", - "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.17.0.tgz", - "integrity": "sha512-/9HIEs1ZXGhSPE8X6Ccm7Nam1z8KcoCqPdI7ecm1N33EzAetWahvQWVqLZtaZQ+IDKX4IyA2o0gBzqIMkAagHQ==", - "requires": { - "asn1": "~0.2.3", - "assert-plus": "^1.0.0", - "bcrypt-pbkdf": "^1.0.0", - "dashdash": "^1.12.0", - "ecc-jsbn": "~0.1.1", - "getpass": "^0.1.1", - "jsbn": "~0.1.0", - "safer-buffer": "^2.0.2", - "tweetnacl": "~0.14.0" - }, - "dependencies": { - "tweetnacl": { - "version": "0.14.5", - "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", - "integrity": "sha512-KXXFFdAbFXY4geFIwoyNK+f5Z1b7swfXABfL7HXCmoIWMKU3dmS26672A4EeQtDzLKy7SXmfBu51JolvEKwtGA==" - } - } + "ripemd160-min": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/ripemd160-min/-/ripemd160-min-0.0.6.tgz", + "integrity": "sha512-+GcJgQivhs6S9qvLogusiTcS9kQUfgR75whKuy5jIhuiOfQuJ8fjqxV6EGD5duH1Y/FawFUMtMhyeq3Fbnib8A==" }, - "stacktrace-parser": { - "version": "0.1.10", - "resolved": "https://registry.npmjs.org/stacktrace-parser/-/stacktrace-parser-0.1.10.tgz", - "integrity": "sha512-KJP1OCML99+8fhOHxwwzyWrlUuVX5GQ0ZpJTd1DFXhdkrvg1szxfHhawXUZ3g9TkXORQd4/WG68jMlQZ2p8wlg==", + "rlp": { + "version": "2.2.7", + "resolved": "https://registry.npmjs.org/rlp/-/rlp-2.2.7.tgz", + "integrity": "sha512-d5gdPmgQ0Z+AklL2NVXr/IoSjNZFfTVvQWzL/AM2AOcSzYP2xjlb0AC8YyCLc41MSNf6P6QVtjgPdmVtzb+4lQ==", "requires": { - "type-fest": "^0.7.1" - }, - "dependencies": { - "type-fest": { - "version": "0.7.1", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.7.1.tgz", - "integrity": "sha512-Ne2YiiGN8bmrmJJEuTWTLJR32nh/JdL1+PSicowtNb0WFpn59GK8/lfD61bVtzguz7b3PBt74nxpv/Pw5po5Rg==" - } + "bn.js": "^5.2.0" } }, - "statuses": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", - "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==" - }, - "stealthy-require": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/stealthy-require/-/stealthy-require-1.1.1.tgz", - "integrity": "sha512-ZnWpYnYugiOVEY5GkcuJK1io5V8QmNYChG62gSit9pQVGErXtrKuPC55ITaVSukmMta5qpMU7vqLt2Lnni4f/g==" - }, - "streamsearch": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/streamsearch/-/streamsearch-1.1.0.tgz", - "integrity": "sha512-Mcc5wHehp9aXz1ax6bZUyY5afg9u2rv5cqQI3mRrYkGC8rW2hM02jWuwjtL++LS5qinSyhj2QfLyNsuc+VsExg==" - }, - "strict-uri-encode": { + "run-parallel-limit": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/strict-uri-encode/-/strict-uri-encode-1.1.0.tgz", - "integrity": "sha512-R3f198pcvnB+5IpnBlRkphuE9n46WyVl8I39W/ZUTZLz4nqSP/oLYUrcnJrw462Ds8he4YKMov2efsTIw1BDGQ==" - }, - "string_decoder": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", - "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", + "resolved": "https://registry.npmjs.org/run-parallel-limit/-/run-parallel-limit-1.1.0.tgz", + "integrity": "sha512-jJA7irRNM91jaKc3Hcl1npHsFLOXOoTkPCUL1JEa1R82O2miplXXRaGdjW/KM/98YQWDhJLiSs793CnXfblJUw==", "requires": { - "safe-buffer": "~5.2.0" + "queue-microtask": "^1.2.2" } }, - "string-format": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/string-format/-/string-format-2.0.0.tgz", - "integrity": "sha512-bbEs3scLeYNXLecRRuk6uJxdXUSj6le/8rNPHChIJTn2V79aXVTR1EH2OH5zLKKoz0V02fOUKZZcw01pLUShZA==", - "dev": true + "rustbn.js": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/rustbn.js/-/rustbn.js-0.2.0.tgz", + "integrity": "sha512-4VlvkRUuCJvr2J6Y0ImW7NvTCriMi7ErOAqWk1y69vAdoNIzCF3yPmgeNzx+RQTLEDFq5sHfscn1MwHxP9hNfA==" }, - "string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "rxjs": { + "version": "6.6.7", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.7.tgz", + "integrity": "sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ==", "requires": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" + "tslib": "^1.9.0" }, "dependencies": { - "ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==" - }, - "strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "requires": { - "ansi-regex": "^5.0.1" - } + "tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" } } }, - "string.prototype.trimend": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.5.tgz", - "integrity": "sha512-I7RGvmjV4pJ7O3kdf+LXFpVfdNOxtCW/2C8f6jNiW4+PQchwxkCDzlk1/7p+Wl4bqFIZeF47qAHXLuHHWKAxog==", + "safe-array-concat": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.0.1.tgz", + "integrity": "sha512-6XbUAseYE2KtOuGueyeobCySj9L4+66Tn6KQMOPQJrAJEowYKW/YR/MGJZl7FdydUdaFu4LYyDZjxf4/Nmo23Q==", + "dev": true, "requires": { "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.19.5" + "get-intrinsic": "^1.2.1", + "has-symbols": "^1.0.3", + "isarray": "^2.0.5" } }, - "string.prototype.trimstart": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.5.tgz", - "integrity": "sha512-THx16TJCGlsN0o6dl2o6ncWUsdgnLRSA23rRE5pyGBw/mLr3Ej/R2LaqCtgP8VNMGZsvMWnf9ooZPyY2bHvUFg==", - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.19.5" - } + "safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==" }, - "strip-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", - "integrity": "sha512-4XaJ2zQdCzROZDivEVIDPkcQn8LMFSa8kj8Gxb/Lnwzv9A8VctNZ+lfivC/sV3ivW8ElJTERXZoPBRrZKkNKow==", - "requires": { - "ansi-regex": "^3.0.0" - } + "safe-json-stringify": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/safe-json-stringify/-/safe-json-stringify-1.2.0.tgz", + "integrity": "sha512-gH8eh2nZudPQO6TytOvbxnuhYBOvDBBLW52tz5q6X58lJcd/tkmqFR+5Z9adS8aJtURSXWThWy/xJtJwixErvg==", + "optional": true }, - "strip-bom": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz", - "integrity": "sha512-kwrX1y7czp1E69n2ajbG65mIo9dqvJ+8aBQXOGVxqwvNbsXdFM6Lq37dLAY3mknUwru8CfcCbfOLL/gMo+fi3g==", + "safe-regex-test": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.0.1.tgz", + "integrity": "sha512-Y5NejJTTliTyY4H7sipGqY+RX5P87i3F7c4Rcepy72nq+mNLhIsD0W4c7kEmduMDQCSqtPsXPlSTsFhh2LQv+g==", + "dev": true, "requires": { - "is-utf8": "^0.2.0" + "call-bind": "^1.0.5", + "get-intrinsic": "^1.2.2", + "is-regex": "^1.1.4" } }, - "strip-dirs": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/strip-dirs/-/strip-dirs-2.1.0.tgz", - "integrity": "sha512-JOCxOeKLm2CAS73y/U4ZeZPTkE+gNVCzKt7Eox84Iej1LT/2pTWYpZKJuxwQpvX1LiZb1xokNR7RLfuBAa7T3g==", - "requires": { - "is-natural-number": "^4.0.1" - } + "safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" }, - "strip-hex-prefix": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/strip-hex-prefix/-/strip-hex-prefix-1.0.0.tgz", - "integrity": "sha512-q8d4ue7JGEiVcypji1bALTos+0pWtyGlivAWyPuTkHzuTCJqrK9sWxYQZUq6Nq3cuyv3bm734IhHvHtGGURU6A==", + "scrypt-js": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/scrypt-js/-/scrypt-js-3.0.1.tgz", + "integrity": "sha512-cdwTTnqPu0Hyvf5in5asVdZocVDTNRmR7XEcJuIzMjJeSHybHl7vpB66AzwTaIg6CLSbtjcxc8fqcySfnTkccA==" + }, + "secp256k1": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/secp256k1/-/secp256k1-4.0.3.tgz", + "integrity": "sha512-NLZVf+ROMxwtEj3Xa562qgv2BK5e2WNmXPiOdVIPLgs6lyTzMvBq0aWTYMI5XCP9jZMVKOcqZLw/Wc4vDkuxhA==", "requires": { - "is-hex-prefixed": "1.0.0" + "elliptic": "^6.5.4", + "node-addon-api": "^2.0.0", + "node-gyp-build": "^4.2.0" } }, - "strip-indent": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-2.0.0.tgz", - "integrity": "sha512-RsSNPLpq6YUL7QYy44RnPVTn/lcVZtb48Uof3X5JLbF4zD/Gs7ZFDv2HWol+leoQN2mT86LAzSshGfkTlSOpsA==", - "dev": true + "seedrandom": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/seedrandom/-/seedrandom-3.0.5.tgz", + "integrity": "sha512-8OwmbklUNzwezjGInmZ+2clQmExQPvomqjL7LFqOYqtmuxRgQYqOD3mHaU+MvZn5FLUeVxVfQjwLZW/n/JFuqg==" }, - "strip-json-comments": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", - "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==" + "semaphore-async-await": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/semaphore-async-await/-/semaphore-async-await-1.5.1.tgz", + "integrity": "sha512-b/ptP11hETwYWpeilHXXQiV5UJNJl7ZWWooKRE5eBIYWoom6dZ0SluCIdCtKycsMtZgKWE01/qAw6jblw1YVhg==" }, - "sturdy-websocket": { - "version": "0.1.12", - "resolved": "https://registry.npmjs.org/sturdy-websocket/-/sturdy-websocket-0.1.12.tgz", - "integrity": "sha512-PA7h8LdjaMoIlC5HAwLVzae4raGWgyroscV4oUpEiTtEFINcNa47/CKYT3e98o+FfsJgrclI2pYpaJrz0aaoew==", + "semver": { + "version": "7.5.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", + "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", "requires": { - "lodash.defaults": "^4.2.0" + "lru-cache": "^6.0.0" + }, + "dependencies": { + "lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "requires": { + "yallist": "^4.0.0" + } + }, + "yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" + } } }, - "sublevel-pouchdb": { - "version": "7.3.1", - "resolved": "https://registry.npmjs.org/sublevel-pouchdb/-/sublevel-pouchdb-7.3.1.tgz", - "integrity": "sha512-n+4fK72F/ORdqPwoGgMGYeOrW2HaPpW9o9k80bT1B3Cim5BSvkKkr9WbWOWynni/GHkbCEdvLVFJL1ktosAdhQ==", - "optional": true, + "send": { + "version": "0.18.0", + "resolved": "https://registry.npmjs.org/send/-/send-0.18.0.tgz", + "integrity": "sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==", "requires": { - "inherits": "2.0.4", - "level-codec": "9.0.2", - "ltgt": "2.2.1", - "readable-stream": "1.1.14" + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "1.2.0", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "fresh": "0.5.2", + "http-errors": "2.0.0", + "mime": "1.6.0", + "ms": "2.1.3", + "on-finished": "2.4.1", + "range-parser": "~1.2.1", + "statuses": "2.0.1" }, "dependencies": { - "isarray": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", - "integrity": "sha512-D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ==", - "optional": true - }, - "readable-stream": { - "version": "1.1.14", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz", - "integrity": "sha512-+MeVjFf4L44XUkhM1eYbD8fyEsxcV81pqMSR5gblfcLCHfZvbrqy4/qYHE+/R5HoBUT11WV5O08Cr1n3YXkWVQ==", - "optional": true, + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.1", - "isarray": "0.0.1", - "string_decoder": "~0.10.x" + "ms": "2.0.0" + }, + "dependencies": { + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" + } } }, - "string_decoder": { - "version": "0.10.31", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", - "integrity": "sha512-ev2QzSzWPYmy9GuqfIVildA4OdcGLeFZQrq5ys6RtiuF+RQQiZWr8TZNyAcuVXyQRYfEO+MsoB/1BuQVhOJuoQ==", - "optional": true + "ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" } } }, - "superstruct": { - "version": "0.14.2", - "resolved": "https://registry.npmjs.org/superstruct/-/superstruct-0.14.2.tgz", - "integrity": "sha512-nPewA6m9mR3d6k7WkZ8N8zpTWfenFH3q9pA2PkuiZxINr9DKB2+40wEQf0ixn8VaGuJ78AB6iWOtStI+/4FKZQ==" - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "sentence-case": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/sentence-case/-/sentence-case-2.1.1.tgz", + "integrity": "sha512-ENl7cYHaK/Ktwk5OTD+aDbQ3uC8IByu/6Bkg+HDv8Mm+XnBnppVNalcfJTNsp1ibstKh030/JKQQWglDvtKwEQ==", "requires": { - "has-flag": "^4.0.0" + "no-case": "^2.2.0", + "upper-case-first": "^1.1.2" } }, - "swap-case": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/swap-case/-/swap-case-1.1.2.tgz", - "integrity": "sha512-BAmWG6/bx8syfc6qXPprof3Mn5vQgf5dwdUNJhsNqU9WdPt5P+ES/wQ5bxfijy8zwZgZZHslC3iAsxsuQMCzJQ==", + "serialize-javascript": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.0.tgz", + "integrity": "sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag==", "requires": { - "lower-case": "^1.1.1", - "upper-case": "^1.1.1" + "randombytes": "^2.1.0" } }, - "swarm-js": { - "version": "0.1.42", - "resolved": "https://registry.npmjs.org/swarm-js/-/swarm-js-0.1.42.tgz", - "integrity": "sha512-BV7c/dVlA3R6ya1lMlSSNPLYrntt0LUq4YMgy3iwpCIc6rZnS5W2wUoctarZ5pXlpKtxDDf9hNziEkcfrxdhqQ==", - "requires": { - "bluebird": "^3.5.0", - "buffer": "^5.0.5", - "eth-lib": "^0.1.26", - "fs-extra": "^4.0.2", - "got": "^11.8.5", - "mime-types": "^2.1.16", - "mkdirp-promise": "^5.0.1", - "mock-fs": "^4.1.0", - "setimmediate": "^1.0.5", - "tar": "^4.0.2", - "xhr-request": "^1.0.1" - }, - "dependencies": { - "@szmarczak/http-timer": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-4.0.6.tgz", - "integrity": "sha512-4BAffykYOgO+5nzBWYwE3W90sBgLJoUPRWWcL8wlyiM8IB8ipJz3UMJ9KXQd1RKQXpKp8Tutn80HZtWsu2u76w==", - "requires": { - "defer-to-connect": "^2.0.0" - } - }, - "buffer": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", - "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", - "requires": { - "base64-js": "^1.3.1", - "ieee754": "^1.1.13" - } - }, - "cacheable-lookup": { - "version": "5.0.4", - "resolved": "https://registry.npmjs.org/cacheable-lookup/-/cacheable-lookup-5.0.4.tgz", - "integrity": "sha512-2/kNscPhpcxrOigMZzbiWF7dz8ilhb/nIHU3EyZiXWXpeq/au8qJ8VhdftMkty3n7Gj6HIGalQG8oiBNB3AJgA==" - }, - "decompress-response": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-6.0.0.tgz", - "integrity": "sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==", - "requires": { - "mimic-response": "^3.1.0" - } - }, - "fs-extra": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-4.0.3.tgz", - "integrity": "sha512-q6rbdDd1o2mAnQreO7YADIxf/Whx4AHBiRf6d+/cVT8h44ss+lHgxf1FemcqDnQt9X3ct4McHr+JMGlYSsK7Cg==", - "requires": { - "graceful-fs": "^4.1.2", - "jsonfile": "^4.0.0", - "universalify": "^0.1.0" - } - }, - "got": { - "version": "11.8.6", - "resolved": "https://registry.npmjs.org/got/-/got-11.8.6.tgz", - "integrity": "sha512-6tfZ91bOr7bOXnK7PRDCGBLa1H4U080YHNaAQ2KsMGlLEzRbk44nsZF2E1IeRc3vtJHPVbKCYgdFbaGO2ljd8g==", - "requires": { - "@sindresorhus/is": "^4.0.0", - "@szmarczak/http-timer": "^4.0.5", - "@types/cacheable-request": "^6.0.1", - "@types/responselike": "^1.0.0", - "cacheable-lookup": "^5.0.3", - "cacheable-request": "^7.0.2", - "decompress-response": "^6.0.0", - "http2-wrapper": "^1.0.0-beta.5.2", - "lowercase-keys": "^2.0.0", - "p-cancelable": "^2.0.0", - "responselike": "^2.0.0" - } - }, - "http2-wrapper": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/http2-wrapper/-/http2-wrapper-1.0.3.tgz", - "integrity": "sha512-V+23sDMr12Wnz7iTcDeJr3O6AIxlnvT/bmaAAAP/Xda35C90p9599p0F1eHR/N1KILWSoWVAiOMFjBBXaXSMxg==", - "requires": { - "quick-lru": "^5.1.1", - "resolve-alpn": "^1.0.0" - } - }, - "jsonfile": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", - "integrity": "sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==", - "requires": { - "graceful-fs": "^4.1.6" - } - }, - "lowercase-keys": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-2.0.0.tgz", - "integrity": "sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==" - }, - "mimic-response": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-3.1.0.tgz", - "integrity": "sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==" - }, - "p-cancelable": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-2.1.1.tgz", - "integrity": "sha512-BZOr3nRQHOntUjTrH8+Lh54smKHoHyur8We1V8DSMVrl5A2malOOwuJRnKRDjSnkoeBh4at6BwEnb5I7Jl31wg==" - }, - "universalify": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", - "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==" - } + "serve-static": { + "version": "1.15.0", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.15.0.tgz", + "integrity": "sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==", + "requires": { + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "parseurl": "~1.3.3", + "send": "0.18.0" } }, - "symbol-observable": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/symbol-observable/-/symbol-observable-1.2.0.tgz", - "integrity": "sha512-e900nM8RRtGhlV36KGEU9k65K3mPb1WV70OdjfxlG2EAuM1noi/E/BaW/uMhL7bPEssK8QV57vN3esixjUvcXQ==" - }, - "sync-request": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/sync-request/-/sync-request-6.1.0.tgz", - "integrity": "sha512-8fjNkrNlNCrVc/av+Jn+xxqfCjYaBoHqCsDz6mt030UMxJGr+GSfCV1dQt2gRtlL63+VPidwDVLr7V2OcTSdRw==", + "servify": { + "version": "0.1.12", + "resolved": "https://registry.npmjs.org/servify/-/servify-0.1.12.tgz", + "integrity": "sha512-/xE6GvsKKqyo1BAY+KxOWXcLpPsUUyji7Qg3bVD7hh1eRze5bR1uYiuDA/k3Gof1s9BTzQZEJK8sNcNGFIzeWw==", "requires": { - "http-response-object": "^3.0.1", - "sync-rpc": "^1.2.1", - "then-request": "^6.0.0" + "body-parser": "^1.16.0", + "cors": "^2.8.1", + "express": "^4.14.0", + "request": "^2.79.0", + "xhr": "^2.3.3" } }, - "sync-rpc": { - "version": "1.3.6", - "resolved": "https://registry.npmjs.org/sync-rpc/-/sync-rpc-1.3.6.tgz", - "integrity": "sha512-J8jTXuZzRlvU7HemDgHi3pGnh/rkoqR/OZSjhTyyZrEkkYQbk7Z33AXp37mkPfPpfdOuj7Ex3H/TJM1z48uPQw==", + "set-blocking": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", + "integrity": "sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==" + }, + "set-function-length": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.1.1.tgz", + "integrity": "sha512-VoaqjbBJKiWtg4yRcKBQ7g7wnGnLV3M8oLvVWwOk2PdYY6PEFegR1vezXR0tw6fZGF9csVakIRjrJiy2veSBFQ==", "requires": { - "get-port": "^3.1.0" + "define-data-property": "^1.1.1", + "get-intrinsic": "^1.2.1", + "gopd": "^1.0.1", + "has-property-descriptors": "^1.0.0" } }, - "table": { - "version": "6.8.0", - "resolved": "https://registry.npmjs.org/table/-/table-6.8.0.tgz", - "integrity": "sha512-s/fitrbVeEyHKFa7mFdkuQMWlH1Wgw/yEXMt5xACT4ZpzWFluehAxRtUUQKPuWhaLAWhFcVx6w3oC8VKaUfPGA==", + "set-function-name": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/set-function-name/-/set-function-name-2.0.1.tgz", + "integrity": "sha512-tMNCiqYVkXIZgc2Hnoy2IvC/f8ezc5koaRFkCjrpWzGpCd3qbZXPzVy9MAZzK1ch/X0jvSkojys3oqJN0qCmdA==", "dev": true, "requires": { - "ajv": "^8.0.1", - "lodash.truncate": "^4.4.2", - "slice-ansi": "^4.0.0", - "string-width": "^4.2.3", - "strip-ansi": "^6.0.1" - }, - "dependencies": { - "ajv": { - "version": "8.11.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.11.0.tgz", - "integrity": "sha512-wGgprdCvMalC0BztXvitD2hC04YffAvtsUn93JbGXYLAtCUO4xd17mCCZQxUOItiBwZvJScWo8NIvQMQ71rdpg==", - "dev": true, - "requires": { - "fast-deep-equal": "^3.1.1", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2", - "uri-js": "^4.2.2" - } - }, - "ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "dev": true - }, - "json-schema-traverse": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", - "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", - "dev": true - }, - "strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, - "requires": { - "ansi-regex": "^5.0.1" - } - } + "define-data-property": "^1.0.1", + "functions-have-names": "^1.2.3", + "has-property-descriptors": "^1.0.0" } }, - "table-layout": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/table-layout/-/table-layout-1.0.2.tgz", - "integrity": "sha512-qd/R7n5rQTRFi+Zf2sk5XVVd9UQl6ZkduPFC3S7WEGJAmetDTjY3qPN50eSKzwuzEyQKy5TN2TiZdkIjos2L6A==", - "dev": true, + "setimmediate": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", + "integrity": "sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA==" + }, + "setprototypeof": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", + "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==" + }, + "sha.js": { + "version": "2.4.11", + "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz", + "integrity": "sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==", "requires": { - "array-back": "^4.0.1", - "deep-extend": "~0.6.0", - "typical": "^5.2.0", - "wordwrapjs": "^4.0.0" - }, - "dependencies": { - "array-back": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/array-back/-/array-back-4.0.2.tgz", - "integrity": "sha512-NbdMezxqf94cnNfWLL7V/im0Ub+Anbb0IoZhvzie8+4HJ4nMQuzHuy49FkGYCJK2yAloZ3meiB6AVMClbrI1vg==", - "dev": true - }, - "typical": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/typical/-/typical-5.2.0.tgz", - "integrity": "sha512-dvdQgNDNJo+8B2uBQoqdb11eUCE1JQXhvjC/CZtgvZseVd5TYMXnq0+vuUemXbd/Se29cTaUuPX3YIc2xgbvIg==", - "dev": true - } + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" } }, - "tar": { - "version": "4.4.19", - "resolved": "https://registry.npmjs.org/tar/-/tar-4.4.19.tgz", - "integrity": "sha512-a20gEsvHnWe0ygBY8JbxoM4w3SJdhc7ZAuxkLqh+nvNQN2IOt0B5lLgM490X5Hl8FF0dl0tOf2ewFYAlIFgzVA==", + "sha1": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/sha1/-/sha1-1.1.1.tgz", + "integrity": "sha512-dZBS6OrMjtgVkopB1Gmo4RQCDKiZsqcpAQpkV/aaj+FCrCg8r4I4qMkDPQjBgLIxlmu9k4nUbWq6ohXahOneYA==", "requires": { - "chownr": "^1.1.4", - "fs-minipass": "^1.2.7", - "minipass": "^2.9.0", - "minizlib": "^1.3.3", - "mkdirp": "^0.5.5", - "safe-buffer": "^5.2.1", - "yallist": "^3.1.1" + "charenc": ">= 0.0.1", + "crypt": ">= 0.0.1" } }, - "tar-fs": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-2.1.1.tgz", - "integrity": "sha512-V0r2Y9scmbDRLCNex/+hYzvp/zyYjvFbHPNgVTKfQvVrb6guiE/fxP+XblDNR011utopbkex2nM4dHNV6GDsng==", - "optional": true, + "sha3": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/sha3/-/sha3-2.1.4.tgz", + "integrity": "sha512-S8cNxbyb0UGUM2VhRD4Poe5N58gJnJsLJ5vC7FYWGUmGhcsj4++WaIOBFVDxlG0W3To6xBuiRh+i0Qp2oNCOtg==", "requires": { - "chownr": "^1.1.1", - "mkdirp-classic": "^0.5.2", - "pump": "^3.0.0", - "tar-stream": "^2.1.4" + "buffer": "6.0.3" } }, - "tar-stream": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-2.2.0.tgz", - "integrity": "sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==", + "shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "peer": true, "requires": { - "bl": "^4.0.3", - "end-of-stream": "^1.4.1", - "fs-constants": "^1.0.0", - "inherits": "^2.0.3", - "readable-stream": "^3.1.1" + "shebang-regex": "^3.0.0" } }, - "testrpc": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/testrpc/-/testrpc-0.0.1.tgz", - "integrity": "sha512-afH1hO+SQ/VPlmaLUFj2636QMeDvPCeQMc/9RBMW0IfjNe9gFD9Ra3ShqYkB7py0do1ZcCna/9acHyzTJ+GcNA==" - }, - "text-encoding-utf-8": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/text-encoding-utf-8/-/text-encoding-utf-8-1.0.2.tgz", - "integrity": "sha512-8bw4MY9WjdsD2aMtO0OzOCY3pXGYNx2d2FfHRVUKkiCPDWjKuOlhLVASS+pD7VkLTVjW268LYJHwsnPFlBpbAg==" + "shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "peer": true }, - "then-request": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/then-request/-/then-request-6.0.2.tgz", - "integrity": "sha512-3ZBiG7JvP3wbDzA9iNY5zJQcHL4jn/0BWtXIkagfz7QgOL/LqjCEOBQuJNZfu0XYnv5JhKh+cDxCPM4ILrqruA==", + "side-channel": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", + "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", "requires": { - "@types/concat-stream": "^1.6.0", - "@types/form-data": "0.0.33", - "@types/node": "^8.0.0", - "@types/qs": "^6.2.31", - "caseless": "~0.12.0", - "concat-stream": "^1.6.0", - "form-data": "^2.2.0", - "http-basic": "^8.1.1", - "http-response-object": "^3.0.1", - "promise": "^8.0.0", - "qs": "^6.4.0" - }, - "dependencies": { - "@types/node": { - "version": "8.10.66", - "resolved": "https://registry.npmjs.org/@types/node/-/node-8.10.66.tgz", - "integrity": "sha512-tktOkFUA4kXx2hhhrB8bIFb5TbwzS4uOhKEmwiD+NoiL0qtP2OQ9mFldbgD4dV1djrlBYP6eBuQZiWjuHUpqFw==" - }, - "form-data": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.5.1.tgz", - "integrity": "sha512-m21N3WOmEEURgk6B9GLOE4RuWOFf28Lhh9qGYeNlGq4VDXUlJy2th2slBNU8Gp8EzloYZOibZJ7t5ecIrFSjVA==", - "requires": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.6", - "mime-types": "^2.1.12" - } - } + "call-bind": "^1.0.0", + "get-intrinsic": "^1.0.2", + "object-inspect": "^1.9.0" } }, - "through": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", - "integrity": "sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==" + "signal-exit": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", + "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", + "peer": true }, - "through2": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/through2/-/through2-3.0.2.tgz", - "integrity": "sha512-enaDQ4MUyP2W6ZyT6EsMzqBPZaM/avg8iuo+l2d3QCs0J+6RaqkHV/2/lOwDTueBHeJ/2LG9lrLW3d5rWPucuQ==", + "simple-concat": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/simple-concat/-/simple-concat-1.0.1.tgz", + "integrity": "sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q==" + }, + "simple-get": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/simple-get/-/simple-get-3.1.1.tgz", + "integrity": "sha512-CQ5LTKGfCpvE1K0n2us+kuMPbk/q0EKl82s4aheV9oXjFEz6W/Y7oQFVJuU6QG77hRT4Ghb5RURteF5vnWjupA==", "optional": true, "requires": { - "inherits": "^2.0.4", - "readable-stream": "2 || 3" + "decompress-response": "^4.2.0", + "once": "^1.3.1", + "simple-concat": "^1.0.0" } }, - "timed-out": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/timed-out/-/timed-out-4.0.1.tgz", - "integrity": "sha512-G7r3AhovYtr5YKOWQkta8RKAPb+J9IsO4uVmzjl8AZwfhs8UcUwTiD6gcJYSgOtzyjvQKrKYn41syHbUWMkafA==" + "slash": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-2.0.0.tgz", + "integrity": "sha512-ZYKh3Wh2z1PpEXWr0MpSBZ0V6mZHAQfYevttO11c51CaWjGTaadiKZ+wVt1PbMlDV5qhMFslpZCemhwOK7C89A==" }, - "timers-ext": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/timers-ext/-/timers-ext-0.1.7.tgz", - "integrity": "sha512-b85NUNzTSdodShTIbky6ZF02e8STtVVfD+fu4aXXShEELpozH+bCpJLYMPZbsABN2wDH7fJpqIoXxJpzbf0NqQ==", + "slice-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz", + "integrity": "sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==", + "dev": true, "requires": { - "es5-ext": "~0.10.46", - "next-tick": "1" + "ansi-styles": "^4.0.0", + "astral-regex": "^2.0.0", + "is-fullwidth-code-point": "^3.0.0" } }, - "tiny-emitter": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/tiny-emitter/-/tiny-emitter-2.1.0.tgz", - "integrity": "sha512-NB6Dk1A9xgQPMoGqC5CVXn123gWyte215ONT5Pp5a0yt4nlEoO1ZWeCwpncaekPHXO60i47ihFnZPiRPjRMq4Q==" - }, - "tiny-invariant": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/tiny-invariant/-/tiny-invariant-1.3.1.tgz", - "integrity": "sha512-AD5ih2NlSssTCwsMznbvwMZpJ1cbhkGd2uueNxzv2jDlEeZdU04JQfRnggJQ8DrcVBGjAsCKwFBbDlVNtEMlzw==" - }, - "tiny-typed-emitter": { + "snake-case": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/tiny-typed-emitter/-/tiny-typed-emitter-2.1.0.tgz", - "integrity": "sha512-qVtvMxeXbVej0cQWKqVSSAHmKZEHAvxdF8HEUBFWts8h+xEo5m/lEiPakuyZ3BnCBjOD8i24kzNOiOLLgsSxhA==", - "optional": true - }, - "tiny-warning": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/tiny-warning/-/tiny-warning-1.0.3.tgz", - "integrity": "sha512-lBN9zLN/oAf68o3zNXYrdCt1kP8WsiGW8Oo2ka41b2IM5JL/S1CTyX1rW0mb/zSuJun0ZUrDxx4sqvYS2FWzPA==" - }, - "title-case": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/title-case/-/title-case-2.1.1.tgz", - "integrity": "sha512-EkJoZ2O3zdCz3zJsYCsxyq2OC5hrxR9mfdd5I+w8h/tmFfeOxJ+vvkxsKxdmN0WtS9zLdHEgfgVOiMVgv+Po4Q==", + "resolved": "https://registry.npmjs.org/snake-case/-/snake-case-2.1.0.tgz", + "integrity": "sha512-FMR5YoPFwOLuh4rRz92dywJjyKYZNLpMn1R5ujVpIYkbA9p01fq8RMg0FkO4M+Yobt4MjHeLTJVm5xFFBHSV2Q==", "requires": { - "no-case": "^2.2.0", - "upper-case": "^1.0.3" + "no-case": "^2.2.0" } }, - "tmp": { - "version": "0.0.33", - "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", - "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", + "sol2uml": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/sol2uml/-/sol2uml-2.2.0.tgz", + "integrity": "sha512-JMBvn3ZMT/1egoZjheM4Mh9gQudrlVjFZ1VS0gjQ/eluITT08U6V438Jyku28OuXz42aXNbGS80JuRZo0J7pLg==", + "optional": true, "requires": { - "os-tmpdir": "~1.0.2" + "@aduh95/viz.js": "^3.7.0", + "@solidity-parser/parser": "^0.14.3", + "axios": "^0.27.2", + "commander": "^9.4.0", + "convert-svg-to-png": "^0.6.4", + "debug": "^4.3.4", + "ethers": "^5.6.9", + "js-graph-algorithms": "^1.0.18", + "klaw": "^4.0.1" + }, + "dependencies": { + "axios": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/axios/-/axios-0.27.2.tgz", + "integrity": "sha512-t+yRIyySRTp/wua5xEr+z1q60QmLq8ABsS5O9Me1AsE5dfKqgnCFzwiCZZ/cGNd1lq4/7akDWMxdhVlucjmnOQ==", + "optional": true, + "requires": { + "follow-redirects": "^1.14.9", + "form-data": "^4.0.0" + } + }, + "ethers": { + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/ethers/-/ethers-5.7.2.tgz", + "integrity": "sha512-wswUsmWo1aOK8rR7DIKiWSw9DbLWe6x98Jrn8wcTflTVvaXhAMaB5zGAXy0GYQEQp9iO1iSHWVyARQm11zUtyg==", + "optional": true, + "requires": { + "@ethersproject/abi": "5.7.0", + "@ethersproject/abstract-provider": "5.7.0", + "@ethersproject/abstract-signer": "5.7.0", + "@ethersproject/address": "5.7.0", + "@ethersproject/base64": "5.7.0", + "@ethersproject/basex": "5.7.0", + "@ethersproject/bignumber": "5.7.0", + "@ethersproject/bytes": "5.7.0", + "@ethersproject/constants": "5.7.0", + "@ethersproject/contracts": "5.7.0", + "@ethersproject/hash": "5.7.0", + "@ethersproject/hdnode": "5.7.0", + "@ethersproject/json-wallets": "5.7.0", + "@ethersproject/keccak256": "5.7.0", + "@ethersproject/logger": "5.7.0", + "@ethersproject/networks": "5.7.1", + "@ethersproject/pbkdf2": "5.7.0", + "@ethersproject/properties": "5.7.0", + "@ethersproject/providers": "5.7.2", + "@ethersproject/random": "5.7.0", + "@ethersproject/rlp": "5.7.0", + "@ethersproject/sha2": "5.7.0", + "@ethersproject/signing-key": "5.7.0", + "@ethersproject/solidity": "5.7.0", + "@ethersproject/strings": "5.7.0", + "@ethersproject/transactions": "5.7.0", + "@ethersproject/units": "5.7.0", + "@ethersproject/wallet": "5.7.0", + "@ethersproject/web": "5.7.1", + "@ethersproject/wordlists": "5.7.0" + } + } } }, - "to-buffer": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/to-buffer/-/to-buffer-1.1.1.tgz", - "integrity": "sha512-lx9B5iv7msuFYE3dytT+KE5tap+rNYw+K4jVkb9R/asAb+pbBSM17jtunHplhBe6RRJdZx3Pn2Jph24O32mOVg==" - }, - "to-fast-properties": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", - "integrity": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==" - }, - "to-hex": { - "version": "0.0.18", - "resolved": "https://registry.npmjs.org/to-hex/-/to-hex-0.0.18.tgz", - "integrity": "sha512-twjjF944fl3eUQBpO7bETUhUyCtUFHWJkSLq9+K/Aw+yh3l/xIYaNUmybRqmxsYoZyv9au4aikDiWoJEOMKBDQ==", + "solc": { + "version": "0.8.23", + "resolved": "https://registry.npmjs.org/solc/-/solc-0.8.23.tgz", + "integrity": "sha512-uqe69kFWfJc3cKdxj+Eg9CdW1CP3PLZDPeyJStQVWL8Q9jjjKD0VuRAKBFR8mrWiq5A7gJqERxJFYJsklrVsfA==", "requires": { - "bignumber.js": "9.0.0", - "normalize-hex": "0.0.2" + "command-exists": "^1.2.8", + "commander": "^8.1.0", + "follow-redirects": "^1.12.1", + "js-sha3": "0.8.0", + "memorystream": "^0.3.1", + "n": "^9.2.0", + "semver": "^5.5.0", + "tmp": "0.0.33" }, "dependencies": { - "bignumber.js": { - "version": "9.0.0", - "resolved": "https://registry.npmjs.org/bignumber.js/-/bignumber.js-9.0.0.tgz", - "integrity": "sha512-t/OYhhJ2SD+YGBQcjY8GzzDHEk9f3nerxjtfa6tlMXfe7frs/WozhvCNoGvpM0P3bNf3Gq5ZRMlGr5f3r4/N8A==" + "commander": { + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-8.3.0.tgz", + "integrity": "sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==" + }, + "semver": { + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", + "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==" } } }, - "to-readable-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/to-readable-stream/-/to-readable-stream-1.0.0.tgz", - "integrity": "sha512-Iq25XBt6zD5npPhlLVXGFN3/gyR2/qODcKNNyTMd4vbm39HUaOiAM4PMq0eMVC/Tkxz+Zjdsc55g9yyz+Yq00Q==" + "solidity-ast": { + "version": "0.4.55", + "resolved": "https://registry.npmjs.org/solidity-ast/-/solidity-ast-0.4.55.tgz", + "integrity": "sha512-qeEU/r/K+V5lrAw8iswf2/yfWAnSGs3WKPHI+zAFKFjX0dIBVXEU/swQ8eJQYHf6PJWUZFO2uWV4V1wEOkeQbA==", + "dev": true, + "requires": { + "array.prototype.findlast": "^1.2.2" + } }, - "to-regex-range": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", - "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + }, + "source-map-support": { + "version": "0.5.21", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", + "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", "requires": { - "is-number": "^7.0.0" + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" } }, - "toformat": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/toformat/-/toformat-2.0.0.tgz", - "integrity": "sha512-03SWBVop6nU8bpyZCx7SodpYznbZF5R4ljwNLBcTQzKOD9xuihRo/psX58llS1BMFhhAI08H3luot5GoXJz2pQ==" + "spdx-correct": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.2.0.tgz", + "integrity": "sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA==", + "requires": { + "spdx-expression-parse": "^3.0.0", + "spdx-license-ids": "^3.0.0" + } }, - "toidentifier": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", - "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==" + "spdx-exceptions": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz", + "integrity": "sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==" }, - "toml": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/toml/-/toml-3.0.0.tgz", - "integrity": "sha512-y/mWCZinnvxjTKYhJ+pYxwD0mRLVvOtdS2Awbgxln6iEnt4rk0yBxeSBHkGJcPucRiG0e55mwWp+g/05rsrd6w==" + "spdx-expression-parse": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz", + "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==", + "requires": { + "spdx-exceptions": "^2.1.0", + "spdx-license-ids": "^3.0.0" + } }, - "touch": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/touch/-/touch-3.1.0.tgz", - "integrity": "sha512-WBx8Uy5TLtOSRtIq+M03/sKDrXCLHxwDcquSP2c43Le03/9serjQBIztjRz6FkJez9D/hleyAXTBGLwwZUw9lA==", + "spdx-license-ids": { + "version": "3.0.16", + "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.16.tgz", + "integrity": "sha512-eWN+LnM3GR6gPu35WxNgbGl8rmY1AEmoMDvL/QD6zYmPWgywxWqJWNdLGT+ke8dKNWrcYgYjPpG5gbTfghP8rw==" + }, + "sshpk": { + "version": "1.18.0", + "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.18.0.tgz", + "integrity": "sha512-2p2KJZTSqQ/I3+HX42EpYOa2l3f8Erv8MWKsy2I9uf4wA7yFIkXRffYdsx86y6z4vHtV8u7g+pPlr8/4ouAxsQ==", "requires": { - "nopt": "~1.0.10" + "asn1": "~0.2.3", + "assert-plus": "^1.0.0", + "bcrypt-pbkdf": "^1.0.0", + "dashdash": "^1.12.0", + "ecc-jsbn": "~0.1.1", + "getpass": "^0.1.1", + "jsbn": "~0.1.0", + "safer-buffer": "^2.0.2", + "tweetnacl": "~0.14.0" + }, + "dependencies": { + "tweetnacl": { + "version": "0.14.5", + "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", + "integrity": "sha512-KXXFFdAbFXY4geFIwoyNK+f5Z1b7swfXABfL7HXCmoIWMKU3dmS26672A4EeQtDzLKy7SXmfBu51JolvEKwtGA==" + } } }, - "tough-cookie": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz", - "integrity": "sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==", + "stacktrace-parser": { + "version": "0.1.10", + "resolved": "https://registry.npmjs.org/stacktrace-parser/-/stacktrace-parser-0.1.10.tgz", + "integrity": "sha512-KJP1OCML99+8fhOHxwwzyWrlUuVX5GQ0ZpJTd1DFXhdkrvg1szxfHhawXUZ3g9TkXORQd4/WG68jMlQZ2p8wlg==", "requires": { - "psl": "^1.1.28", - "punycode": "^2.1.1" + "type-fest": "^0.7.1" }, "dependencies": { - "punycode": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", - "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==" + "type-fest": { + "version": "0.7.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.7.1.tgz", + "integrity": "sha512-Ne2YiiGN8bmrmJJEuTWTLJR32nh/JdL1+PSicowtNb0WFpn59GK8/lfD61bVtzguz7b3PBt74nxpv/Pw5po5Rg==" } } }, - "tr46": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", - "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==" + "statuses": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", + "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==" + }, + "strict-uri-encode": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/strict-uri-encode/-/strict-uri-encode-1.1.0.tgz", + "integrity": "sha512-R3f198pcvnB+5IpnBlRkphuE9n46WyVl8I39W/ZUTZLz4nqSP/oLYUrcnJrw462Ds8he4YKMov2efsTIw1BDGQ==" }, - "truffle": { - "version": "5.11.4", - "resolved": "https://registry.npmjs.org/truffle/-/truffle-5.11.4.tgz", - "integrity": "sha512-Oc7HpNQ1ViJhE0Gx1HJ6i915k5pfw89o1rhhyFKXiOZLYuXUkiyyxBdPRt+/IO5PjtXt33Me67Dy3vvoJjeyUQ==", + "string_decoder": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", + "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", "requires": { - "@truffle/db": "^2.0.35", - "@truffle/db-loader": "^0.2.35", - "@truffle/debugger": "^12.1.4", - "app-module-path": "^2.2.0", - "ganache": "7.9.1", - "mocha": "10.1.0", - "original-require": "^1.0.1" + "safe-buffer": "~5.2.0" } }, - "truffle-contract-size": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/truffle-contract-size/-/truffle-contract-size-2.0.1.tgz", - "integrity": "sha512-AIKPwHPC/1pZwtVjgUcgcK23k6gWxKhn4ZnKLr339uieb94UgAUeIwGUkfc87T+0lqgC6ePY7YhsFeoZK2YEsA==", + "string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", "requires": { - "cli-table": "^0.3.1", - "yargs": "^15.3.1" + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" }, "dependencies": { "ansi-regex": { @@ -61044,31 +26939,6 @@ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==" }, - "camelcase": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", - "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==" - }, - "cliui": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-6.0.0.tgz", - "integrity": "sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==", - "requires": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.0", - "wrap-ansi": "^6.2.0" - } - }, - "decamelize": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", - "integrity": "sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==" - }, - "require-main-filename": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz", - "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==" - }, "strip-ansi": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", @@ -61076,198 +26946,164 @@ "requires": { "ansi-regex": "^5.0.1" } + } + } + }, + "string-width-cjs": { + "version": "npm:string-width@4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "peer": true, + "requires": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "dependencies": { + "ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "peer": true }, - "which-module": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz", - "integrity": "sha512-B+enWhmw6cjfVC7kS8Pj9pCrKSc5txArRyaYGe088shv/FGWH+0Rjx/xPgtsWfsUtS27FkP697E4DDhgrgoc0Q==" - }, - "wrap-ansi": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", - "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", - "requires": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - } - }, - "y18n": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.3.tgz", - "integrity": "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==" - }, - "yargs": { - "version": "15.4.1", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-15.4.1.tgz", - "integrity": "sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==", - "requires": { - "cliui": "^6.0.0", - "decamelize": "^1.2.0", - "find-up": "^4.1.0", - "get-caller-file": "^2.0.1", - "require-directory": "^2.1.1", - "require-main-filename": "^2.0.0", - "set-blocking": "^2.0.0", - "string-width": "^4.2.0", - "which-module": "^2.0.0", - "y18n": "^4.0.0", - "yargs-parser": "^18.1.2" - } - }, - "yargs-parser": { - "version": "18.1.3", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz", - "integrity": "sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==", + "strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "peer": true, "requires": { - "camelcase": "^5.0.0", - "decamelize": "^1.2.0" + "ansi-regex": "^5.0.1" } } } }, - "truffle-flattener": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/truffle-flattener/-/truffle-flattener-1.6.0.tgz", - "integrity": "sha512-scS5Bsi4CZyvlrmD4iQcLHTiG2RQFUXVheTgWeH6PuafmI+Lk5U87Es98loM3w3ImqC9/fPHq+3QIXbcPuoJ1Q==", + "string.prototype.trim": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.8.tgz", + "integrity": "sha512-lfjY4HcixfQXOfaqCvcBuOIapyaroTXhbkfJN3gcB1OtyupngWK4sEET9Knd0cXd28kTUqu/kHoV4HKSJdnjiQ==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1" + } + }, + "string.prototype.trimend": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.7.tgz", + "integrity": "sha512-Ni79DqeB72ZFq1uH/L6zJ+DKZTkOtPIHovb3YZHQViE+HDouuU4mBrLOLDn5Dde3RF8qw5qVETEjhu9locMLvA==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1" + } + }, + "string.prototype.trimstart": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.7.tgz", + "integrity": "sha512-NGhtDFu3jCEm7B4Fy0DpLewdJQOZcQ0rGbwQ/+stjnrp2i+rlKeCvos9hOIeCmqwratM47OBxY7uFZzjxHXmrg==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1" + } + }, + "strip-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", + "integrity": "sha512-4XaJ2zQdCzROZDivEVIDPkcQn8LMFSa8kj8Gxb/Lnwzv9A8VctNZ+lfivC/sV3ivW8ElJTERXZoPBRrZKkNKow==", + "requires": { + "ansi-regex": "^3.0.0" + } + }, + "strip-ansi-cjs": { + "version": "npm:strip-ansi@6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "peer": true, "requires": { - "@resolver-engine/imports-fs": "^0.2.2", - "@solidity-parser/parser": "^0.14.1", - "find-up": "^2.1.0", - "mkdirp": "^1.0.4", - "tsort": "0.0.1" + "ansi-regex": "^5.0.1" }, "dependencies": { - "@resolver-engine/core": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/@resolver-engine/core/-/core-0.2.1.tgz", - "integrity": "sha512-nsLQHmPJ77QuifqsIvqjaF5B9aHnDzJjp73Q1z6apY3e9nqYrx4Dtowhpsf7Jwftg/XzVDEMQC+OzUBNTS+S1A==", - "requires": { - "debug": "^3.1.0", - "request": "^2.85.0" - } - }, - "@resolver-engine/fs": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/@resolver-engine/fs/-/fs-0.2.1.tgz", - "integrity": "sha512-7kJInM1Qo2LJcKyDhuYzh9ZWd+mal/fynfL9BNjWOiTcOpX+jNfqb/UmGUqros5pceBITlWGqS4lU709yHFUbg==", - "requires": { - "@resolver-engine/core": "^0.2.1", - "debug": "^3.1.0" - } - }, - "@resolver-engine/imports": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/@resolver-engine/imports/-/imports-0.2.2.tgz", - "integrity": "sha512-u5/HUkvo8q34AA+hnxxqqXGfby5swnH0Myw91o3Sm2TETJlNKXibFGSKBavAH+wvWdBi4Z5gS2Odu0PowgVOUg==", - "requires": { - "@resolver-engine/core": "^0.2.1", - "debug": "^3.1.0", - "hosted-git-info": "^2.6.0" - } - }, - "@resolver-engine/imports-fs": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/@resolver-engine/imports-fs/-/imports-fs-0.2.2.tgz", - "integrity": "sha512-gFCgMvCwyppjwq0UzIjde/WI+yDs3oatJhozG9xdjJdewwtd7LiF0T5i9lrHAUtqrQbqoFE4E+ZMRVHWpWHpKQ==", - "requires": { - "@resolver-engine/fs": "^0.2.1", - "@resolver-engine/imports": "^0.2.2", - "debug": "^3.1.0" - } - }, - "debug": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", - "requires": { - "ms": "^2.1.1" - } - }, - "find-up": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", - "integrity": "sha512-NWzkk0jSJtTt08+FBFMvXoeZnOJD+jTtsRmBYbAIzJdX6l7dLgR7CTubCM5/eDdPUBvLCeVasP1brfVR/9/EZQ==", - "requires": { - "locate-path": "^2.0.0" - } - }, - "locate-path": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", - "integrity": "sha512-NCI2kiDkyR7VeEKm27Kda/iQHyKJe1Bu0FlTbYp3CqJu+9IFe9bLyAjMxf5ZDDbEg+iMPzB5zYyUTSm8wVTKmA==", - "requires": { - "p-locate": "^2.0.0", - "path-exists": "^3.0.0" - } - }, - "mkdirp": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", - "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==" - }, - "p-limit": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz", - "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==", - "requires": { - "p-try": "^1.0.0" - } - }, - "p-locate": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz", - "integrity": "sha512-nQja7m7gSKuewoVRen45CtVfODR3crN3goVQ0DDZ9N3yHxgpkuBhZqsaiotSQRrADUrne346peY7kT3TSACykg==", - "requires": { - "p-limit": "^1.1.0" - } - }, - "p-try": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz", - "integrity": "sha512-U1etNYuMJoIz3ZXSrrySFjsXQTWOx2/jdi86L+2pRvph/qMKL6sbcCYdH23fqsbm8TH2Gn0OybpT4eSFlCVHww==" - }, - "path-exists": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", - "integrity": "sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==" + "ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "peer": true } } }, - "truffle-hdwallet-provider": { - "version": "1.0.17", - "resolved": "https://registry.npmjs.org/truffle-hdwallet-provider/-/truffle-hdwallet-provider-1.0.17.tgz", - "integrity": "sha512-s6DvSP83jiIAc6TUcpr7Uqnja1+sLGJ8og3X7n41vfyC4OCaKmBtXL5HOHf+SsU3iblOvnbFDgmN6Y1VBL/fsg==", + "strip-bom": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz", + "integrity": "sha512-kwrX1y7czp1E69n2ajbG65mIo9dqvJ+8aBQXOGVxqwvNbsXdFM6Lq37dLAY3mknUwru8CfcCbfOLL/gMo+fi3g==", + "requires": { + "is-utf8": "^0.2.0" + } + }, + "strip-hex-prefix": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/strip-hex-prefix/-/strip-hex-prefix-1.0.0.tgz", + "integrity": "sha512-q8d4ue7JGEiVcypji1bALTos+0pWtyGlivAWyPuTkHzuTCJqrK9sWxYQZUq6Nq3cuyv3bm734IhHvHtGGURU6A==", + "requires": { + "is-hex-prefixed": "1.0.0" + } + }, + "strip-indent": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-2.0.0.tgz", + "integrity": "sha512-RsSNPLpq6YUL7QYy44RnPVTn/lcVZtb48Uof3X5JLbF4zD/Gs7ZFDv2HWol+leoQN2mT86LAzSshGfkTlSOpsA==" + }, + "strip-json-comments": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==" + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "requires": { + "has-flag": "^4.0.0" + } + }, + "swap-case": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/swap-case/-/swap-case-1.1.2.tgz", + "integrity": "sha512-BAmWG6/bx8syfc6qXPprof3Mn5vQgf5dwdUNJhsNqU9WdPt5P+ES/wQ5bxfijy8zwZgZZHslC3iAsxsuQMCzJQ==", + "requires": { + "lower-case": "^1.1.1", + "upper-case": "^1.1.1" + } + }, + "swarm-js": { + "version": "0.1.42", + "resolved": "https://registry.npmjs.org/swarm-js/-/swarm-js-0.1.42.tgz", + "integrity": "sha512-BV7c/dVlA3R6ya1lMlSSNPLYrntt0LUq4YMgy3iwpCIc6rZnS5W2wUoctarZ5pXlpKtxDDf9hNziEkcfrxdhqQ==", "requires": { - "any-promise": "^1.3.0", - "bindings": "^1.3.1", - "web3": "1.2.1", - "websocket": "^1.0.28" + "bluebird": "^3.5.0", + "buffer": "^5.0.5", + "eth-lib": "^0.1.26", + "fs-extra": "^4.0.2", + "got": "^11.8.5", + "mime-types": "^2.1.16", + "mkdirp-promise": "^5.0.1", + "mock-fs": "^4.1.0", + "setimmediate": "^1.0.5", + "tar": "^4.0.2", + "xhr-request": "^1.0.1" }, "dependencies": { - "@sindresorhus/is": { - "version": "0.14.0", - "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-0.14.0.tgz", - "integrity": "sha512-9NET910DNaIPngYnLLPeg+Ogzqsi9uM4mSboU5y6p8S5DzMTVEsJZrawi+BoDNUVBa2DhJqQYUFvMDfgU062LQ==" - }, "@szmarczak/http-timer": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-1.1.2.tgz", - "integrity": "sha512-XIB2XbzHTN6ieIjfIMV9hlVcfPU26s2vafYWQcZHWXHOxiaRZYEDKEwdl129Zyg50+foYV2jCgtrqSA6qNuNSA==", + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-4.0.6.tgz", + "integrity": "sha512-4BAffykYOgO+5nzBWYwE3W90sBgLJoUPRWWcL8wlyiM8IB8ipJz3UMJ9KXQd1RKQXpKp8Tutn80HZtWsu2u76w==", "requires": { - "defer-to-connect": "^1.0.1" + "defer-to-connect": "^2.0.0" } }, - "@types/node": { - "version": "10.17.60", - "resolved": "https://registry.npmjs.org/@types/node/-/node-10.17.60.tgz", - "integrity": "sha512-F0KIgDJfy2nA3zMLmWGKxcH2ZVEtCZXHHdOQs2gSaQ27+lNeEfGxzkIw90aXswATX7AZ33tahPbzy6KAfUreVw==" - }, - "bn.js": { - "version": "4.12.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==" - }, "buffer": { "version": "5.7.1", "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", @@ -61277,96 +27113,19 @@ "ieee754": "^1.1.13" } }, - "cacheable-request": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-6.1.0.tgz", - "integrity": "sha512-Oj3cAGPCqOZX7Rz64Uny2GYAZNliQSqfbePrgAQ1wKAihYmCUnraBtJtKcGR4xz7wF+LoJC+ssFZvv5BgF9Igg==", - "requires": { - "clone-response": "^1.0.2", - "get-stream": "^5.1.0", - "http-cache-semantics": "^4.0.0", - "keyv": "^3.0.0", - "lowercase-keys": "^2.0.0", - "normalize-url": "^4.1.0", - "responselike": "^1.0.2" - }, - "dependencies": { - "get-stream": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", - "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", - "requires": { - "pump": "^3.0.0" - } - }, - "lowercase-keys": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-2.0.0.tgz", - "integrity": "sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==" - } - } - }, - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "requires": { - "ms": "2.0.0" - } + "cacheable-lookup": { + "version": "5.0.4", + "resolved": "https://registry.npmjs.org/cacheable-lookup/-/cacheable-lookup-5.0.4.tgz", + "integrity": "sha512-2/kNscPhpcxrOigMZzbiWF7dz8ilhb/nIHU3EyZiXWXpeq/au8qJ8VhdftMkty3n7Gj6HIGalQG8oiBNB3AJgA==" }, "decompress-response": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-3.3.0.tgz", - "integrity": "sha512-BzRPQuY1ip+qDonAOz42gRm/pg9F768C+npV/4JOsxRC2sq+Rlk+Q4ZCAsOhnIaMrgarILY+RMUIvMmmX1qAEA==", - "requires": { - "mimic-response": "^1.0.0" - } - }, - "defer-to-connect": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-1.1.3.tgz", - "integrity": "sha512-0ISdNousHvZT2EiFlZeZAHBUvSxmKswVCEf8hW7KWgG4a8MVEu/3Vb6uWYozkjylyCxe0JBIiRB1jV45S70WVQ==" - }, - "elliptic": { - "version": "6.3.3", - "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.3.3.tgz", - "integrity": "sha512-cIky9SO2H8W2eU1NOLySnhOYJnuEWCq9ZJeHvHd/lXzEL9vyraIMfilZSn57X3aVX+wkfYmqkch2LvmTzkjFpA==", - "requires": { - "bn.js": "^4.4.0", - "brorand": "^1.0.1", - "hash.js": "^1.0.0", - "inherits": "^2.0.1" - } - }, - "ethers": { - "version": "4.0.0-beta.3", - "resolved": "https://registry.npmjs.org/ethers/-/ethers-4.0.0-beta.3.tgz", - "integrity": "sha512-YYPogooSknTwvHg3+Mv71gM/3Wcrx+ZpCzarBj3mqs9njjRkrOo2/eufzhHloOCo3JSoNI4TQJJ6yU5ABm3Uog==", + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-6.0.0.tgz", + "integrity": "sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==", "requires": { - "@types/node": "^10.3.2", - "aes-js": "3.0.0", - "bn.js": "^4.4.0", - "elliptic": "6.3.3", - "hash.js": "1.1.3", - "js-sha3": "0.5.7", - "scrypt-js": "2.0.3", - "setimmediate": "1.0.4", - "uuid": "2.0.1", - "xmlhttprequest": "1.8.0" - }, - "dependencies": { - "setimmediate": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.4.tgz", - "integrity": "sha512-/TjEmXQVEzdod/FFskf3o7oOAsGhHf2j1dZqRFbDzq4F3mvvxflIIi4Hd3bLQE9y/CpwqfSQam5JakI/mi3Pog==" - } + "mimic-response": "^3.1.0" } }, - "eventemitter3": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-3.1.2.tgz", - "integrity": "sha512-tvtQIeLVHjDkJYnzf2dgVMxfuSGJeM/7UCG17TT4EumTfNtF+0nebF/4zWOIkCreAbtNqhGEboB6BWrwqNaw4Q==" - }, "fs-extra": { "version": "4.0.3", "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-4.0.3.tgz", @@ -61377,56 +27136,33 @@ "universalify": "^0.1.0" } }, - "get-stream": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", - "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", - "requires": { - "pump": "^3.0.0" - } - }, "got": { - "version": "9.6.0", - "resolved": "https://registry.npmjs.org/got/-/got-9.6.0.tgz", - "integrity": "sha512-R7eWptXuGYxwijs0eV+v3o6+XH1IqVK8dJOEecQfTmkncw9AV4dcw/Dhxi8MdlqPthxxpZyizMzyg8RTmEsG+Q==", + "version": "11.8.6", + "resolved": "https://registry.npmjs.org/got/-/got-11.8.6.tgz", + "integrity": "sha512-6tfZ91bOr7bOXnK7PRDCGBLa1H4U080YHNaAQ2KsMGlLEzRbk44nsZF2E1IeRc3vtJHPVbKCYgdFbaGO2ljd8g==", "requires": { - "@sindresorhus/is": "^0.14.0", - "@szmarczak/http-timer": "^1.1.2", - "cacheable-request": "^6.0.0", - "decompress-response": "^3.3.0", - "duplexer3": "^0.1.4", - "get-stream": "^4.1.0", - "lowercase-keys": "^1.0.1", - "mimic-response": "^1.0.1", - "p-cancelable": "^1.0.0", - "to-readable-stream": "^1.0.0", - "url-parse-lax": "^3.0.0" + "@sindresorhus/is": "^4.0.0", + "@szmarczak/http-timer": "^4.0.5", + "@types/cacheable-request": "^6.0.1", + "@types/responselike": "^1.0.0", + "cacheable-lookup": "^5.0.3", + "cacheable-request": "^7.0.2", + "decompress-response": "^6.0.0", + "http2-wrapper": "^1.0.0-beta.5.2", + "lowercase-keys": "^2.0.0", + "p-cancelable": "^2.0.0", + "responselike": "^2.0.0" } }, - "hash.js": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.3.tgz", - "integrity": "sha512-/UETyP0W22QILqS+6HowevwhEFJ3MBJnwTf75Qob9Wz9t0DPuisL8kW8YZMK62dHAKE1c1p+gY1TtOLY+USEHA==", + "http2-wrapper": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/http2-wrapper/-/http2-wrapper-1.0.3.tgz", + "integrity": "sha512-V+23sDMr12Wnz7iTcDeJr3O6AIxlnvT/bmaAAAP/Xda35C90p9599p0F1eHR/N1KILWSoWVAiOMFjBBXaXSMxg==", "requires": { - "inherits": "^2.0.3", - "minimalistic-assert": "^1.0.0" + "quick-lru": "^5.1.1", + "resolve-alpn": "^1.0.0" } }, - "is-plain-obj": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz", - "integrity": "sha512-yvkRyxmFKEOQ4pNXCmJG5AEQNlXJS5LaONXo5/cLdTZdWvsZ1ioJEonLGAosKlMWE8lwUy/bJzMjcw8az73+Fg==" - }, - "js-sha3": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/js-sha3/-/js-sha3-0.5.7.tgz", - "integrity": "sha512-GII20kjaPX0zJ8wzkTbNDYMY7msuZcTWk8S5UOh6806Jq/wz1J8/bnr8uGU0DAUmYDjj2Mr4X1cW8v/GLYnR+g==" - }, - "json-buffer": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.0.tgz", - "integrity": "sha512-CuUqjv0FUZIdXkHPI8MezCnFCdaTAacej1TZYulLoAg1h/PhwkdXFN4V/gzY4g+fMBCOV2xF+rp7t2XD2ns/NQ==" - }, "jsonfile": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", @@ -61435,529 +27171,293 @@ "graceful-fs": "^4.1.6" } }, - "keyv": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/keyv/-/keyv-3.1.0.tgz", - "integrity": "sha512-9ykJ/46SN/9KPM/sichzQ7OvXyGDYKGTaDlKMGCAlg2UK8KRy4jb0d8sFc+0Tt0YYnThq8X2RZgCg74RPxgcVA==", - "requires": { - "json-buffer": "3.0.0" - } - }, "lowercase-keys": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.1.tgz", - "integrity": "sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA==" - }, - "mimic-response": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz", - "integrity": "sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==" - }, - "ms": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" - }, - "normalize-url": { - "version": "4.5.1", - "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-4.5.1.tgz", - "integrity": "sha512-9UZCFRHQdNrfTpGg8+1INIg93B6zE0aXMVFkw1WFwvO4SlZywU6aLg5Of0Ap/PgcbSw4LNxvMWXMeugwMCX0AA==" + "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-2.0.0.tgz", + "integrity": "sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==" }, - "oboe": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/oboe/-/oboe-2.1.4.tgz", - "integrity": "sha512-ymBJ4xSC6GBXLT9Y7lirj+xbqBLa+jADGJldGEYG7u8sZbS9GyG+u1Xk9c5cbriKwSpCg41qUhPjvU5xOpvIyQ==", - "requires": { - "http-https": "^1.0.0" - } + "mimic-response": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-3.1.0.tgz", + "integrity": "sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==" }, "p-cancelable": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-1.1.0.tgz", - "integrity": "sha512-s73XxOZ4zpt1edZYZzvhqFa6uvQc1vwUa0K0BdtIZgQMAJj9IbebH+JkgKZc9h+B05PKHLOTl4ajG1BmNrVZlw==" - }, - "prepend-http": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-1.0.4.tgz", - "integrity": "sha512-PhmXi5XmoyKw1Un4E+opM2KcsJInDvKyuOumcjjw3waw86ZNjHwVUOOWLc4bCzLdcKNaWBH9e99sbWzDQsVaYg==" - }, - "responselike": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/responselike/-/responselike-1.0.2.tgz", - "integrity": "sha512-/Fpe5guzJk1gPqdJLJR5u7eG/gNY4nImjbRDaVWVMRhne55TCmj2i9Q+54PBRfatRC8v/rIiv9BN0pMd9OV5EQ==", - "requires": { - "lowercase-keys": "^1.0.0" - } - }, - "scrypt-js": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/scrypt-js/-/scrypt-js-2.0.3.tgz", - "integrity": "sha512-d8DzQxNivoNDogyYmb/9RD5mEQE/Q7vG2dLDUgvfPmKL9xCVzgqUntOdS0me9Cq9Sh9VxIZuoNEFcsfyXRnyUw==" - }, - "semver": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.2.0.tgz", - "integrity": "sha512-jdFC1VdUGT/2Scgbimf7FSx9iJLXoqfglSF+gJeuNWVpiE37OIbc1jywR/GJyFdz3mnkz2/id0L0J/cr0izR5A==" - }, - "swarm-js": { - "version": "0.1.39", - "resolved": "https://registry.npmjs.org/swarm-js/-/swarm-js-0.1.39.tgz", - "integrity": "sha512-QLMqL2rzF6n5s50BptyD6Oi0R1aWlJC5Y17SRIVXRj6OR1DRIPM7nepvrxxkjA1zNzFz6mUOMjfeqeDaWB7OOg==", - "requires": { - "bluebird": "^3.5.0", - "buffer": "^5.0.5", - "decompress": "^4.0.0", - "eth-lib": "^0.1.26", - "fs-extra": "^4.0.2", - "got": "^7.1.0", - "mime-types": "^2.1.16", - "mkdirp-promise": "^5.0.1", - "mock-fs": "^4.1.0", - "setimmediate": "^1.0.5", - "tar": "^4.0.2", - "xhr-request-promise": "^0.1.2" - }, - "dependencies": { - "get-stream": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz", - "integrity": "sha512-GlhdIUuVakc8SJ6kK0zAFbiGzRFzNnY4jUuEbV9UROo4Y+0Ny4fjvcZFVTeDA4odpFyOQzaw6hXukJSq/f28sQ==" - }, - "got": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/got/-/got-7.1.0.tgz", - "integrity": "sha512-Y5WMo7xKKq1muPsxD+KmrR8DH5auG7fBdDVueZwETwV6VytKyU9OX/ddpq2/1hp1vIPvVb4T81dKQz3BivkNLw==", - "requires": { - "decompress-response": "^3.2.0", - "duplexer3": "^0.1.4", - "get-stream": "^3.0.0", - "is-plain-obj": "^1.1.0", - "is-retry-allowed": "^1.0.0", - "is-stream": "^1.0.0", - "isurl": "^1.0.0-alpha5", - "lowercase-keys": "^1.0.0", - "p-cancelable": "^0.3.0", - "p-timeout": "^1.1.1", - "safe-buffer": "^5.0.1", - "timed-out": "^4.0.0", - "url-parse-lax": "^1.0.0", - "url-to-options": "^1.0.1" - } - }, - "p-cancelable": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-0.3.0.tgz", - "integrity": "sha512-RVbZPLso8+jFeq1MfNvgXtCRED2raz/dKpacfTNxsx6pLEpEomM7gah6VeHSYV3+vo0OAi4MkArtQcWWXuQoyw==" - }, - "url-parse-lax": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-1.0.0.tgz", - "integrity": "sha512-BVA4lR5PIviy2PMseNd2jbFQ+jwSwQGdJejf5ctd1rEXt0Ypd7yanUK9+lYechVlN5VaTJGsu2U/3MDDu6KgBA==", - "requires": { - "prepend-http": "^1.0.1" - } - } - } - }, - "underscore": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.9.1.tgz", - "integrity": "sha512-5/4etnCkd9c8gwgowi5/om/mYO5ajCaOgdzj/oW+0eQV9WxKBDZw5+ycmKmeaTXjInS/W0BzpGLo2xR2aBwZdg==" + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-2.1.1.tgz", + "integrity": "sha512-BZOr3nRQHOntUjTrH8+Lh54smKHoHyur8We1V8DSMVrl5A2malOOwuJRnKRDjSnkoeBh4at6BwEnb5I7Jl31wg==" }, "universalify": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==" - }, - "uuid": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-2.0.1.tgz", - "integrity": "sha512-nWg9+Oa3qD2CQzHIP4qKUqwNfzKn8P0LtFhotaCTFchsV7ZfDhAybeip/HZVeMIpZi9JgY1E3nUlwaCmZT1sEg==" - }, - "web3": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/web3/-/web3-1.2.1.tgz", - "integrity": "sha512-nNMzeCK0agb5i/oTWNdQ1aGtwYfXzHottFP2Dz0oGIzavPMGSKyVlr8ibVb1yK5sJBjrWVnTdGaOC2zKDFuFRw==", - "requires": { - "web3-bzz": "1.2.1", - "web3-core": "1.2.1", - "web3-eth": "1.2.1", - "web3-eth-personal": "1.2.1", - "web3-net": "1.2.1", - "web3-shh": "1.2.1", - "web3-utils": "1.2.1" - } - }, - "web3-bzz": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/web3-bzz/-/web3-bzz-1.2.1.tgz", - "integrity": "sha512-LdOO44TuYbGIPfL4ilkuS89GQovxUpmLz6C1UC7VYVVRILeZS740FVB3j9V4P4FHUk1RenaDfKhcntqgVCHtjw==", - "requires": { - "got": "9.6.0", - "swarm-js": "0.1.39", - "underscore": "1.9.1" - } - }, - "web3-core": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/web3-core/-/web3-core-1.2.1.tgz", - "integrity": "sha512-5ODwIqgl8oIg/0+Ai4jsLxkKFWJYE0uLuE1yUKHNVCL4zL6n3rFjRMpKPokd6id6nJCNgeA64KdWQ4XfpnjdMg==", - "requires": { - "web3-core-helpers": "1.2.1", - "web3-core-method": "1.2.1", - "web3-core-requestmanager": "1.2.1", - "web3-utils": "1.2.1" - } - }, - "web3-core-helpers": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/web3-core-helpers/-/web3-core-helpers-1.2.1.tgz", - "integrity": "sha512-Gx3sTEajD5r96bJgfuW377PZVFmXIH4TdqDhgGwd2lZQCcMi+DA4TgxJNJGxn0R3aUVzyyE76j4LBrh412mXrw==", - "requires": { - "underscore": "1.9.1", - "web3-eth-iban": "1.2.1", - "web3-utils": "1.2.1" - } - }, - "web3-core-method": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/web3-core-method/-/web3-core-method-1.2.1.tgz", - "integrity": "sha512-Ghg2WS23qi6Xj8Od3VCzaImLHseEA7/usvnOItluiIc5cKs00WYWsNy2YRStzU9a2+z8lwQywPYp0nTzR/QXdQ==", - "requires": { - "underscore": "1.9.1", - "web3-core-helpers": "1.2.1", - "web3-core-promievent": "1.2.1", - "web3-core-subscriptions": "1.2.1", - "web3-utils": "1.2.1" - } - }, - "web3-core-promievent": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/web3-core-promievent/-/web3-core-promievent-1.2.1.tgz", - "integrity": "sha512-IVUqgpIKoeOYblwpex4Hye6npM0aMR+kU49VP06secPeN0rHMyhGF0ZGveWBrGvf8WDPI7jhqPBFIC6Jf3Q3zw==", - "requires": { - "any-promise": "1.3.0", - "eventemitter3": "3.1.2" - } - }, - "web3-core-requestmanager": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/web3-core-requestmanager/-/web3-core-requestmanager-1.2.1.tgz", - "integrity": "sha512-xfknTC69RfYmLKC+83Jz73IC3/sS2ZLhGtX33D4Q5nQ8yc39ElyAolxr9sJQS8kihOcM6u4J+8gyGMqsLcpIBg==", - "requires": { - "underscore": "1.9.1", - "web3-core-helpers": "1.2.1", - "web3-providers-http": "1.2.1", - "web3-providers-ipc": "1.2.1", - "web3-providers-ws": "1.2.1" - } - }, - "web3-core-subscriptions": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/web3-core-subscriptions/-/web3-core-subscriptions-1.2.1.tgz", - "integrity": "sha512-nmOwe3NsB8V8UFsY1r+sW6KjdOS68h8nuh7NzlWxBQT/19QSUGiERRTaZXWu5BYvo1EoZRMxCKyCQpSSXLc08g==", - "requires": { - "eventemitter3": "3.1.2", - "underscore": "1.9.1", - "web3-core-helpers": "1.2.1" - } - }, - "web3-eth": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/web3-eth/-/web3-eth-1.2.1.tgz", - "integrity": "sha512-/2xly4Yry5FW1i+uygPjhfvgUP/MS/Dk+PDqmzp5M88tS86A+j8BzKc23GrlA8sgGs0645cpZK/999LpEF5UdA==", - "requires": { - "underscore": "1.9.1", - "web3-core": "1.2.1", - "web3-core-helpers": "1.2.1", - "web3-core-method": "1.2.1", - "web3-core-subscriptions": "1.2.1", - "web3-eth-abi": "1.2.1", - "web3-eth-accounts": "1.2.1", - "web3-eth-contract": "1.2.1", - "web3-eth-ens": "1.2.1", - "web3-eth-iban": "1.2.1", - "web3-eth-personal": "1.2.1", - "web3-net": "1.2.1", - "web3-utils": "1.2.1" - } - }, - "web3-eth-abi": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/web3-eth-abi/-/web3-eth-abi-1.2.1.tgz", - "integrity": "sha512-jI/KhU2a/DQPZXHjo2GW0myEljzfiKOn+h1qxK1+Y9OQfTcBMxrQJyH5AP89O6l6NZ1QvNdq99ThAxBFoy5L+g==", - "requires": { - "ethers": "4.0.0-beta.3", - "underscore": "1.9.1", - "web3-utils": "1.2.1" - } - }, - "web3-eth-accounts": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/web3-eth-accounts/-/web3-eth-accounts-1.2.1.tgz", - "integrity": "sha512-26I4qq42STQ8IeKUyur3MdQ1NzrzCqPsmzqpux0j6X/XBD7EjZ+Cs0lhGNkSKH5dI3V8CJasnQ5T1mNKeWB7nQ==", - "requires": { - "any-promise": "1.3.0", - "crypto-browserify": "3.12.0", - "eth-lib": "0.2.7", - "scryptsy": "2.1.0", - "semver": "6.2.0", - "underscore": "1.9.1", - "uuid": "3.3.2", - "web3-core": "1.2.1", - "web3-core-helpers": "1.2.1", - "web3-core-method": "1.2.1", - "web3-utils": "1.2.1" - }, - "dependencies": { - "elliptic": { - "version": "6.5.4", - "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.4.tgz", - "integrity": "sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ==", - "requires": { - "bn.js": "^4.11.9", - "brorand": "^1.1.0", - "hash.js": "^1.0.0", - "hmac-drbg": "^1.0.1", - "inherits": "^2.0.4", - "minimalistic-assert": "^1.0.1", - "minimalistic-crypto-utils": "^1.0.1" - } - }, - "eth-lib": { - "version": "0.2.7", - "resolved": "https://registry.npmjs.org/eth-lib/-/eth-lib-0.2.7.tgz", - "integrity": "sha512-VqEBQKH92jNsaE8lG9CTq8M/bc12gdAfb5MY8Ro1hVyXkh7rOtY3m5tRHK3Hus5HqIAAwU2ivcUjTLVwsvf/kw==", - "requires": { - "bn.js": "^4.11.6", - "elliptic": "^6.4.0", - "xhr-request-promise": "^0.1.2" - } - }, - "uuid": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.3.2.tgz", - "integrity": "sha512-yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA==" - } - } - }, - "web3-eth-contract": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/web3-eth-contract/-/web3-eth-contract-1.2.1.tgz", - "integrity": "sha512-kYFESbQ3boC9bl2rYVghj7O8UKMiuKaiMkxvRH5cEDHil8V7MGEGZNH0slSdoyeftZVlaWSMqkRP/chfnKND0g==", - "requires": { - "underscore": "1.9.1", - "web3-core": "1.2.1", - "web3-core-helpers": "1.2.1", - "web3-core-method": "1.2.1", - "web3-core-promievent": "1.2.1", - "web3-core-subscriptions": "1.2.1", - "web3-eth-abi": "1.2.1", - "web3-utils": "1.2.1" - } - }, - "web3-eth-ens": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/web3-eth-ens/-/web3-eth-ens-1.2.1.tgz", - "integrity": "sha512-lhP1kFhqZr2nnbu3CGIFFrAnNxk2veXpOXBY48Tub37RtobDyHijHgrj+xTh+mFiPokyrapVjpFsbGa+Xzye4Q==", - "requires": { - "eth-ens-namehash": "2.0.8", - "underscore": "1.9.1", - "web3-core": "1.2.1", - "web3-core-helpers": "1.2.1", - "web3-core-promievent": "1.2.1", - "web3-eth-abi": "1.2.1", - "web3-eth-contract": "1.2.1", - "web3-utils": "1.2.1" - } - }, - "web3-eth-iban": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/web3-eth-iban/-/web3-eth-iban-1.2.1.tgz", - "integrity": "sha512-9gkr4QPl1jCU+wkgmZ8EwODVO3ovVj6d6JKMos52ggdT2YCmlfvFVF6wlGLwi0VvNa/p+0BjJzaqxnnG/JewjQ==", - "requires": { - "bn.js": "4.11.8", - "web3-utils": "1.2.1" - }, - "dependencies": { - "bn.js": { - "version": "4.11.8", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.8.tgz", - "integrity": "sha512-ItfYfPLkWHUjckQCk8xC+LwxgK8NYcXywGigJgSwOP8Y2iyWT4f2vsZnoOXTTbo+o5yXmIUJ4gn5538SO5S3gA==" - } - } - }, - "web3-eth-personal": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/web3-eth-personal/-/web3-eth-personal-1.2.1.tgz", - "integrity": "sha512-RNDVSiaSoY4aIp8+Hc7z+X72H7lMb3fmAChuSBADoEc7DsJrY/d0R5qQDK9g9t2BO8oxgLrLNyBP/9ub2Hc6Bg==", - "requires": { - "web3-core": "1.2.1", - "web3-core-helpers": "1.2.1", - "web3-core-method": "1.2.1", - "web3-net": "1.2.1", - "web3-utils": "1.2.1" - } - }, - "web3-net": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/web3-net/-/web3-net-1.2.1.tgz", - "integrity": "sha512-Yt1Bs7WgnLESPe0rri/ZoPWzSy55ovioaP35w1KZydrNtQ5Yq4WcrAdhBzcOW7vAkIwrsLQsvA+hrOCy7mNauw==", + } + } + }, + "sync-request": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/sync-request/-/sync-request-6.1.0.tgz", + "integrity": "sha512-8fjNkrNlNCrVc/av+Jn+xxqfCjYaBoHqCsDz6mt030UMxJGr+GSfCV1dQt2gRtlL63+VPidwDVLr7V2OcTSdRw==", + "requires": { + "http-response-object": "^3.0.1", + "sync-rpc": "^1.2.1", + "then-request": "^6.0.0" + } + }, + "sync-rpc": { + "version": "1.3.6", + "resolved": "https://registry.npmjs.org/sync-rpc/-/sync-rpc-1.3.6.tgz", + "integrity": "sha512-J8jTXuZzRlvU7HemDgHi3pGnh/rkoqR/OZSjhTyyZrEkkYQbk7Z33AXp37mkPfPpfdOuj7Ex3H/TJM1z48uPQw==", + "requires": { + "get-port": "^3.1.0" + } + }, + "table": { + "version": "6.8.1", + "resolved": "https://registry.npmjs.org/table/-/table-6.8.1.tgz", + "integrity": "sha512-Y4X9zqrCftUhMeH2EptSSERdVKt/nEdijTOacGD/97EKjhQ/Qs8RTlEGABSJNNN8lac9kheH+af7yAkEWlgneA==", + "dev": true, + "requires": { + "ajv": "^8.0.1", + "lodash.truncate": "^4.4.2", + "slice-ansi": "^4.0.0", + "string-width": "^4.2.3", + "strip-ansi": "^6.0.1" + }, + "dependencies": { + "ajv": { + "version": "8.12.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz", + "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==", + "dev": true, "requires": { - "web3-core": "1.2.1", - "web3-core-method": "1.2.1", - "web3-utils": "1.2.1" + "fast-deep-equal": "^3.1.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.2.2" } }, - "web3-providers-http": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/web3-providers-http/-/web3-providers-http-1.2.1.tgz", - "integrity": "sha512-BDtVUVolT9b3CAzeGVA/np1hhn7RPUZ6YYGB/sYky+GjeO311Yoq8SRDUSezU92x8yImSC2B+SMReGhd1zL+bQ==", - "requires": { - "web3-core-helpers": "1.2.1", - "xhr2-cookies": "1.1.0" - } + "ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true }, - "web3-providers-ipc": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/web3-providers-ipc/-/web3-providers-ipc-1.2.1.tgz", - "integrity": "sha512-oPEuOCwxVx8L4CPD0TUdnlOUZwGBSRKScCz/Ws2YHdr9Ium+whm+0NLmOZjkjQp5wovQbyBzNa6zJz1noFRvFA==", - "requires": { - "oboe": "2.1.4", - "underscore": "1.9.1", - "web3-core-helpers": "1.2.1" - } + "json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", + "dev": true }, - "web3-providers-ws": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/web3-providers-ws/-/web3-providers-ws-1.2.1.tgz", - "integrity": "sha512-oqsQXzu+ejJACVHy864WwIyw+oB21nw/pI65/sD95Zi98+/HQzFfNcIFneF1NC4bVF3VNX4YHTNq2I2o97LAiA==", - "requires": { - "underscore": "1.9.1", - "web3-core-helpers": "1.2.1", - "websocket": "github:web3-js/WebSocket-Node#polyfill/globalThis" - } + "require-from-string": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", + "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", + "dev": true }, - "web3-shh": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/web3-shh/-/web3-shh-1.2.1.tgz", - "integrity": "sha512-/3Cl04nza5kuFn25bV3FJWa0s3Vafr5BlT933h26xovQ6HIIz61LmvNQlvX1AhFL+SNJOTcQmK1SM59vcyC8bA==", + "strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, "requires": { - "web3-core": "1.2.1", - "web3-core-method": "1.2.1", - "web3-core-subscriptions": "1.2.1", - "web3-net": "1.2.1" + "ansi-regex": "^5.0.1" } - }, - "web3-utils": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/web3-utils/-/web3-utils-1.2.1.tgz", - "integrity": "sha512-Mrcn3l58L+yCKz3zBryM6JZpNruWuT0OCbag8w+reeNROSGVlXzUQkU+gtAwc9JCZ7tKUyg67+2YUGqUjVcyBA==", + } + } + }, + "tar": { + "version": "4.4.19", + "resolved": "https://registry.npmjs.org/tar/-/tar-4.4.19.tgz", + "integrity": "sha512-a20gEsvHnWe0ygBY8JbxoM4w3SJdhc7ZAuxkLqh+nvNQN2IOt0B5lLgM490X5Hl8FF0dl0tOf2ewFYAlIFgzVA==", + "requires": { + "chownr": "^1.1.4", + "fs-minipass": "^1.2.7", + "minipass": "^2.9.0", + "minizlib": "^1.3.3", + "mkdirp": "^0.5.5", + "safe-buffer": "^5.2.1", + "yallist": "^3.1.1" + }, + "dependencies": { + "minipass": { + "version": "2.9.0", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-2.9.0.tgz", + "integrity": "sha512-wxfUjg9WebH+CUDX/CdbRlh5SmfZiy/hpkxaRI16Y9W56Pa75sWgd/rvFilSgrauD9NyFymP/+JFV3KwzIsJeg==", "requires": { - "bn.js": "4.11.8", - "eth-lib": "0.2.7", - "ethjs-unit": "0.1.6", - "number-to-bn": "1.7.0", - "randomhex": "0.1.5", - "underscore": "1.9.1", - "utf8": "3.0.0" - }, - "dependencies": { - "bn.js": { - "version": "4.11.8", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.8.tgz", - "integrity": "sha512-ItfYfPLkWHUjckQCk8xC+LwxgK8NYcXywGigJgSwOP8Y2iyWT4f2vsZnoOXTTbo+o5yXmIUJ4gn5538SO5S3gA==" - }, - "elliptic": { - "version": "6.5.4", - "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.4.tgz", - "integrity": "sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ==", - "requires": { - "bn.js": "^4.11.9", - "brorand": "^1.1.0", - "hash.js": "^1.0.0", - "hmac-drbg": "^1.0.1", - "inherits": "^2.0.4", - "minimalistic-assert": "^1.0.1", - "minimalistic-crypto-utils": "^1.0.1" - }, - "dependencies": { - "bn.js": { - "version": "4.12.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==" - } - } - }, - "eth-lib": { - "version": "0.2.7", - "resolved": "https://registry.npmjs.org/eth-lib/-/eth-lib-0.2.7.tgz", - "integrity": "sha512-VqEBQKH92jNsaE8lG9CTq8M/bc12gdAfb5MY8Ro1hVyXkh7rOtY3m5tRHK3Hus5HqIAAwU2ivcUjTLVwsvf/kw==", - "requires": { - "bn.js": "^4.11.6", - "elliptic": "^6.4.0", - "xhr-request-promise": "^0.1.2" - } - } + "safe-buffer": "^5.1.2", + "yallist": "^3.0.0" } + } + } + }, + "tar-fs": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-2.1.1.tgz", + "integrity": "sha512-V0r2Y9scmbDRLCNex/+hYzvp/zyYjvFbHPNgVTKfQvVrb6guiE/fxP+XblDNR011utopbkex2nM4dHNV6GDsng==", + "optional": true, + "requires": { + "chownr": "^1.1.1", + "mkdirp-classic": "^0.5.2", + "pump": "^3.0.0", + "tar-stream": "^2.1.4" + } + }, + "tar-stream": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-2.2.0.tgz", + "integrity": "sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==", + "optional": true, + "requires": { + "bl": "^4.0.3", + "end-of-stream": "^1.4.1", + "fs-constants": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^3.1.1" + } + }, + "testrpc": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/testrpc/-/testrpc-0.0.1.tgz", + "integrity": "sha512-afH1hO+SQ/VPlmaLUFj2636QMeDvPCeQMc/9RBMW0IfjNe9gFD9Ra3ShqYkB7py0do1ZcCna/9acHyzTJ+GcNA==" + }, + "then-request": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/then-request/-/then-request-6.0.2.tgz", + "integrity": "sha512-3ZBiG7JvP3wbDzA9iNY5zJQcHL4jn/0BWtXIkagfz7QgOL/LqjCEOBQuJNZfu0XYnv5JhKh+cDxCPM4ILrqruA==", + "requires": { + "@types/concat-stream": "^1.6.0", + "@types/form-data": "0.0.33", + "@types/node": "^8.0.0", + "@types/qs": "^6.2.31", + "caseless": "~0.12.0", + "concat-stream": "^1.6.0", + "form-data": "^2.2.0", + "http-basic": "^8.1.1", + "http-response-object": "^3.0.1", + "promise": "^8.0.0", + "qs": "^6.4.0" + }, + "dependencies": { + "@types/node": { + "version": "8.10.66", + "resolved": "https://registry.npmjs.org/@types/node/-/node-8.10.66.tgz", + "integrity": "sha512-tktOkFUA4kXx2hhhrB8bIFb5TbwzS4uOhKEmwiD+NoiL0qtP2OQ9mFldbgD4dV1djrlBYP6eBuQZiWjuHUpqFw==" }, - "websocket": { - "version": "git+ssh://git@github.com/web3-js/WebSocket-Node.git#ef5ea2f41daf4a2113b80c9223df884b4d56c400", - "from": "websocket@^1.0.28", + "form-data": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.5.1.tgz", + "integrity": "sha512-m21N3WOmEEURgk6B9GLOE4RuWOFf28Lhh9qGYeNlGq4VDXUlJy2th2slBNU8Gp8EzloYZOibZJ7t5ecIrFSjVA==", "requires": { - "debug": "^2.2.0", - "es5-ext": "^0.10.50", - "nan": "^2.14.0", - "typedarray-to-buffer": "^3.1.5", - "yaeti": "^0.0.6" + "asynckit": "^0.4.0", + "combined-stream": "^1.0.6", + "mime-types": "^2.1.12" } } } }, - "ts-command-line-args": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/ts-command-line-args/-/ts-command-line-args-2.5.0.tgz", - "integrity": "sha512-Ff7Xt04WWCjj/cmPO9eWTJX3qpBZWuPWyQYG1vnxJao+alWWYjwJBc5aYz3h5p5dE08A6AnpkgiCtP/0KXXBYw==", - "dev": true, + "through": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", + "integrity": "sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==", + "optional": true + }, + "timed-out": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/timed-out/-/timed-out-4.0.1.tgz", + "integrity": "sha512-G7r3AhovYtr5YKOWQkta8RKAPb+J9IsO4uVmzjl8AZwfhs8UcUwTiD6gcJYSgOtzyjvQKrKYn41syHbUWMkafA==" + }, + "tiny-emitter": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/tiny-emitter/-/tiny-emitter-2.1.0.tgz", + "integrity": "sha512-NB6Dk1A9xgQPMoGqC5CVXn123gWyte215ONT5Pp5a0yt4nlEoO1ZWeCwpncaekPHXO60i47ihFnZPiRPjRMq4Q==" + }, + "tiny-invariant": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/tiny-invariant/-/tiny-invariant-1.3.1.tgz", + "integrity": "sha512-AD5ih2NlSssTCwsMznbvwMZpJ1cbhkGd2uueNxzv2jDlEeZdU04JQfRnggJQ8DrcVBGjAsCKwFBbDlVNtEMlzw==" + }, + "tiny-warning": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/tiny-warning/-/tiny-warning-1.0.3.tgz", + "integrity": "sha512-lBN9zLN/oAf68o3zNXYrdCt1kP8WsiGW8Oo2ka41b2IM5JL/S1CTyX1rW0mb/zSuJun0ZUrDxx4sqvYS2FWzPA==" + }, + "title-case": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/title-case/-/title-case-2.1.1.tgz", + "integrity": "sha512-EkJoZ2O3zdCz3zJsYCsxyq2OC5hrxR9mfdd5I+w8h/tmFfeOxJ+vvkxsKxdmN0WtS9zLdHEgfgVOiMVgv+Po4Q==", "requires": { - "@morgan-stanley/ts-mocking-bird": "^0.6.2", - "chalk": "^4.1.0", - "command-line-args": "^5.1.1", - "command-line-usage": "^6.1.0", - "string-format": "^2.0.0" + "no-case": "^2.2.0", + "upper-case": "^1.0.3" } }, - "ts-essentials": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/ts-essentials/-/ts-essentials-7.0.3.tgz", - "integrity": "sha512-8+gr5+lqO3G84KdiTSMRLtuyJ+nTBVRKuCrK4lidMPdVeEp0uqC875uE5NMcaA7YYMN7XsNiFQuMvasF8HT/xQ==", - "dev": true, - "requires": {} + "tmp": { + "version": "0.0.33", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", + "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", + "requires": { + "os-tmpdir": "~1.0.2" + } }, - "ts-node": { - "version": "9.1.1", - "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-9.1.1.tgz", - "integrity": "sha512-hPlt7ZACERQGf03M253ytLY3dHbGNGrAq9qIHWUY9XHYl1z7wYngSr3OQ5xmui8o2AaxsONxIzjafLUiWBo1Fg==", - "optional": true, - "peer": true, + "to-hex": { + "version": "0.0.18", + "resolved": "https://registry.npmjs.org/to-hex/-/to-hex-0.0.18.tgz", + "integrity": "sha512-twjjF944fl3eUQBpO7bETUhUyCtUFHWJkSLq9+K/Aw+yh3l/xIYaNUmybRqmxsYoZyv9au4aikDiWoJEOMKBDQ==", "requires": { - "arg": "^4.1.0", - "create-require": "^1.1.0", - "diff": "^4.0.1", - "make-error": "^1.1.1", - "source-map-support": "^0.5.17", - "yn": "3.1.1" + "bignumber.js": "9.0.0", + "normalize-hex": "0.0.2" }, "dependencies": { - "diff": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", - "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", - "optional": true, - "peer": true + "bignumber.js": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/bignumber.js/-/bignumber.js-9.0.0.tgz", + "integrity": "sha512-t/OYhhJ2SD+YGBQcjY8GzzDHEk9f3nerxjtfa6tlMXfe7frs/WozhvCNoGvpM0P3bNf3Gq5ZRMlGr5f3r4/N8A==" + } + } + }, + "to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "requires": { + "is-number": "^7.0.0" + } + }, + "toformat": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/toformat/-/toformat-2.0.0.tgz", + "integrity": "sha512-03SWBVop6nU8bpyZCx7SodpYznbZF5R4ljwNLBcTQzKOD9xuihRo/psX58llS1BMFhhAI08H3luot5GoXJz2pQ==" + }, + "toidentifier": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", + "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==" + }, + "toml": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/toml/-/toml-3.0.0.tgz", + "integrity": "sha512-y/mWCZinnvxjTKYhJ+pYxwD0mRLVvOtdS2Awbgxln6iEnt4rk0yBxeSBHkGJcPucRiG0e55mwWp+g/05rsrd6w==" + }, + "tough-cookie": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz", + "integrity": "sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==", + "requires": { + "psl": "^1.1.28", + "punycode": "^2.1.1" + }, + "dependencies": { + "punycode": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", + "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==" } } }, + "tr46": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", + "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==" + }, "tslib": { "version": "2.6.2", "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", @@ -62010,95 +27510,57 @@ "mime-types": "~2.1.24" } }, - "typechain": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/typechain/-/typechain-8.1.1.tgz", - "integrity": "sha512-uF/sUvnXTOVF2FHKhQYnxHk4su4JjZR8vr4mA2mBaRwHTbwh0jIlqARz9XJr1tA0l7afJGvEa1dTSi4zt039LQ==", + "typed-array-buffer": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.0.tgz", + "integrity": "sha512-Y8KTSIglk9OZEr8zywiIHG/kmQ7KWyjseXs1CbSo8vC42w7hg2HgYTxSWwP0+is7bWDc1H+Fo026CpHFwm8tkw==", "dev": true, "requires": { - "@types/prettier": "^2.1.1", - "debug": "^4.3.1", - "fs-extra": "^7.0.0", - "glob": "7.1.7", - "js-sha3": "^0.8.0", - "lodash": "^4.17.15", - "mkdirp": "^1.0.4", - "prettier": "^2.3.1", - "ts-command-line-args": "^2.2.0", - "ts-essentials": "^7.0.1" - }, - "dependencies": { - "brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dev": true, - "requires": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "fs-extra": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-7.0.1.tgz", - "integrity": "sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==", - "dev": true, - "requires": { - "graceful-fs": "^4.1.2", - "jsonfile": "^4.0.0", - "universalify": "^0.1.0" - } - }, - "glob": { - "version": "7.1.7", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.7.tgz", - "integrity": "sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ==", - "dev": true, - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - }, - "jsonfile": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", - "integrity": "sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==", - "dev": true, - "requires": { - "graceful-fs": "^4.1.6" - } - }, - "minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dev": true, - "requires": { - "brace-expansion": "^1.1.7" - } - }, - "mkdirp": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", - "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", - "dev": true - }, - "universalify": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", - "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", - "dev": true - } + "call-bind": "^1.0.2", + "get-intrinsic": "^1.2.1", + "is-typed-array": "^1.1.10" + } + }, + "typed-array-byte-length": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/typed-array-byte-length/-/typed-array-byte-length-1.0.0.tgz", + "integrity": "sha512-Or/+kvLxNpeQ9DtSydonMxCx+9ZXOswtwJn17SNLvhptaXYDJvkFFP5zbfU/uLmvnBJlI4yrnXRxpdWH/M5tNA==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "for-each": "^0.3.3", + "has-proto": "^1.0.1", + "is-typed-array": "^1.1.10" + } + }, + "typed-array-byte-offset": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/typed-array-byte-offset/-/typed-array-byte-offset-1.0.0.tgz", + "integrity": "sha512-RD97prjEt9EL8YgAgpOkf3O4IF9lhJFr9g0htQkm0rchFp/Vx7LW5Q8fSXXub7BXAODyUQohRMyOc3faCPd0hg==", + "dev": true, + "requires": { + "available-typed-arrays": "^1.0.5", + "call-bind": "^1.0.2", + "for-each": "^0.3.3", + "has-proto": "^1.0.1", + "is-typed-array": "^1.1.10" + } + }, + "typed-array-length": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.4.tgz", + "integrity": "sha512-KjZypGq+I/H7HI5HlOoGHkWUUGq+Q0TPhQurLbyrVrvnKTBgzLhIJ7j6J/XTQOi0d1RjyZ0wdas8bKs2p0x3Ng==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "for-each": "^0.3.3", + "is-typed-array": "^1.1.9" } }, "typed-function": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/typed-function/-/typed-function-4.1.0.tgz", - "integrity": "sha512-DGwUl6cioBW5gw2L+6SMupGwH/kZOqivy17E4nsh1JI9fKF87orMmlQx3KISQPmg3sfnOUGlwVkroosvgddrlg==" + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/typed-function/-/typed-function-4.1.1.tgz", + "integrity": "sha512-Pq1DVubcvibmm8bYcMowjVnnMwPVMeh0DIdA8ad8NZY2sJgapANJmiigSUwlt+EgXxpfIv8MWrQXTIzkfYZLYQ==" }, "typedarray": { "version": "0.0.6", @@ -62114,36 +27576,9 @@ } }, "typescript": { - "version": "5.2.2", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.2.2.tgz", - "integrity": "sha512-mI4WrpHsbCIcwT9cF4FZvr80QUeKvsUsUvKDoR+X/7XHQH98xYD8YHZg7ANtz2GtZt/CBq2QJ0thkGJMHfqc1w==" - }, - "typescript-compare": { - "version": "0.0.2", - "resolved": "https://registry.npmjs.org/typescript-compare/-/typescript-compare-0.0.2.tgz", - "integrity": "sha512-8ja4j7pMHkfLJQO2/8tut7ub+J3Lw2S3061eJLFQcvs3tsmJKp8KG5NtpLn7KcY2w08edF74BSVN7qJS0U6oHA==", - "requires": { - "typescript-logic": "^0.0.0" - } - }, - "typescript-logic": { - "version": "0.0.0", - "resolved": "https://registry.npmjs.org/typescript-logic/-/typescript-logic-0.0.0.tgz", - "integrity": "sha512-zXFars5LUkI3zP492ls0VskH3TtdeHCqu0i7/duGt60i5IGPIpAHE/DWo5FqJ6EjQ15YKXrt+AETjv60Dat34Q==" - }, - "typescript-tuple": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/typescript-tuple/-/typescript-tuple-2.2.1.tgz", - "integrity": "sha512-Zcr0lbt8z5ZdEzERHAMAniTiIKerFCMgd7yjq1fPnDJ43et/k9twIFQMUYff9k5oXcsQ0WpvFcgzK2ZKASoW6Q==", - "requires": { - "typescript-compare": "^0.0.2" - } - }, - "typical": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/typical/-/typical-4.0.0.tgz", - "integrity": "sha512-VAH4IvQ7BDFYglMd7BPRDfLgxZZX4O4TFcRDA6EN5X7erNJJq+McIEp8np9aVtxrCJ6qx4GTYVfOWNjcqwZgRw==", - "dev": true + "version": "5.3.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.3.3.tgz", + "integrity": "sha512-pXWcraxM0uxAS+tN0AG/BF2TyqmHO014Z070UsJ+pFvYuRSq8KH8DmWpnbXe0pEPDHXZV3FcAbJkijJ5oNEnWw==" }, "u2f-api": { "version": "0.2.7", @@ -62159,6 +27594,7 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.2.tgz", "integrity": "sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==", + "dev": true, "requires": { "call-bind": "^1.0.2", "has-bigints": "^1.0.2", @@ -62170,6 +27606,7 @@ "version": "1.4.3", "resolved": "https://registry.npmjs.org/unbzip2-stream/-/unbzip2-stream-1.4.3.tgz", "integrity": "sha512-mlExGW4w71ebDJviH16lQLtZS32VKqsSfk80GCfUlwT/4/hNRFsoscrF/c++9xinkMzECL1uL9DDwXqFWkruPg==", + "optional": true, "requires": { "buffer": "^5.2.1", "through": "^2.3.8" @@ -62179,6 +27616,7 @@ "version": "5.7.1", "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", + "optional": true, "requires": { "base64-js": "^1.3.1", "ieee754": "^1.1.13" @@ -62186,55 +27624,40 @@ } } }, - "undefsafe": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/undefsafe/-/undefsafe-2.0.5.tgz", - "integrity": "sha512-WxONCrssBM8TSPRqN5EmsjVrsv4A8X12J4ArBiiayv3DyyG3ZlIg6yysuuSYdZsVz3TKcTg2fd//Ujd4CHV1iA==" - }, "underscore": { "version": "1.13.6", "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.13.6.tgz", - "integrity": "sha512-+A5Sja4HP1M08MaXya7p5LvjuM7K6q/2EaC0+iovj/wOcMsTzMvDFbasi/oSapiwOlt252IqsKqPjCl7huKS0A==", - "dev": true + "integrity": "sha512-+A5Sja4HP1M08MaXya7p5LvjuM7K6q/2EaC0+iovj/wOcMsTzMvDFbasi/oSapiwOlt252IqsKqPjCl7huKS0A==" }, "undici": { - "version": "5.21.0", - "resolved": "https://registry.npmjs.org/undici/-/undici-5.21.0.tgz", - "integrity": "sha512-HOjK8l6a57b2ZGXOcUsI5NLfoTrfmbOl90ixJDl0AEFG4wgHNDQxtZy15/ZQp7HhjkpaGlp/eneMgtsu1dIlUA==", + "version": "5.28.2", + "resolved": "https://registry.npmjs.org/undici/-/undici-5.28.2.tgz", + "integrity": "sha512-wh1pHJHnUeQV5Xa8/kyQhO7WFa8M34l026L5P/+2TYiakvGy5Rdc8jWZVyG7ieht/0WgJLEd3kcU5gKx+6GC8w==", "requires": { - "busboy": "^1.6.0" + "@fastify/busboy": "^2.0.0" } }, + "undici-types": { + "version": "5.26.5", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz", + "integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==" + }, "unfetch": { "version": "4.2.0", "resolved": "https://registry.npmjs.org/unfetch/-/unfetch-4.2.0.tgz", "integrity": "sha512-F9p7yYCn6cIW9El1zi0HI6vqpeIvBsr3dSuRO6Xuppb1u5rXpCPmMvLSyECLhybr9isec8Ohl0hPekMVrEinDA==", "dev": true }, - "unit-fns": { - "version": "0.1.9", - "resolved": "https://registry.npmjs.org/unit-fns/-/unit-fns-0.1.9.tgz", - "integrity": "sha512-bxceIkc7n2icQmgQx8u3vX98ZBIcpL2YJDKIsWDFK7ZX1TTuLvtNWVNd9/oARCDHd7QQRzwc+zxabO0HSK8X0w==" - }, "universalify": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", - "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==" + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz", + "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==" }, "unpipe": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==" }, - "update-browserslist-db": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.10.tgz", - "integrity": "sha512-OztqDenkfFkbSG+tRxBeAnCVPckDBcvibKd35yDONx6OU8N7sqgwc7rCbkJ/WcYtVRZ4ba68d6byhC21GFh7sQ==", - "requires": { - "escalade": "^3.1.1", - "picocolors": "^1.0.0" - } - }, "upper-case": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/upper-case/-/upper-case-1.1.3.tgz", @@ -62256,41 +27679,28 @@ "punycode": "^2.1.0" } }, - "url": { - "version": "0.11.0", - "resolved": "https://registry.npmjs.org/url/-/url-0.11.0.tgz", - "integrity": "sha512-kbailJa29QrtXnxgq+DdCEGlbTeYM2eJUxsz6vjZavrCYPMIFHMKQmSKYAIuUK2i7hgPm28a8piX5NTUtM/LKQ==", - "dev": true, - "requires": { - "punycode": "1.3.2", - "querystring": "0.2.0" - }, - "dependencies": { - "punycode": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.3.2.tgz", - "integrity": "sha512-RofWgt/7fL5wP1Y7fxE7/EmTLzQVnB0ycyibJ0OOHIlJqTNzglYFxVwETOcIoJqJmpDXJ9xImDv+Fq34F/d4Dw==", - "dev": true - } - } - }, - "url-parse-lax": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-3.0.0.tgz", - "integrity": "sha512-NjFKA0DidqPa5ciFcSrXnAltTtzz84ogy+NebPvfEgAck0+TNg4UJ4IN+fB7zRZfbgUf0syOo9MDxFkDSMuFaQ==", - "requires": { - "prepend-http": "^2.0.0" - } - }, "url-set-query": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/url-set-query/-/url-set-query-1.0.0.tgz", "integrity": "sha512-3AChu4NiXquPfeckE5R5cGdiHCMWJx1dwCWOmWIL4KHAziJNOFIYJlpGFeKDvwLPHovZRCxK3cYlwzqI9Vp+Gg==" }, - "url-to-options": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/url-to-options/-/url-to-options-1.0.1.tgz", - "integrity": "sha512-0kQLIzG4fdk/G5NONku64rSH/x32NOA39LVQqlK8Le6lvTF6GGRJpqaQFGgU+CLwySIqBSMdwYM0sYcW9f6P4A==" + "usb": { + "version": "1.9.2", + "resolved": "https://registry.npmjs.org/usb/-/usb-1.9.2.tgz", + "integrity": "sha512-dryNz030LWBPAf6gj8vyq0Iev3vPbCLHCT8dBw3gQRXRzVNsIdeuU+VjPp3ksmSPkeMAl1k+kQ14Ij0QHyeiAg==", + "optional": true, + "requires": { + "node-addon-api": "^4.2.0", + "node-gyp-build": "^4.3.0" + }, + "dependencies": { + "node-addon-api": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-4.3.0.tgz", + "integrity": "sha512-73sE9+3UaLYYFmDsFZnqCInzPyh3MqIwZO9cw58yIqAZhONrrabrYyYe3TuIqtIiOuTXVhsGau8hcrhhwSsDIQ==", + "optional": true + } + } }, "utf-8-validate": { "version": "5.0.10", @@ -62341,12 +27751,6 @@ "spdx-expression-parse": "^3.0.0" } }, - "value-or-promise": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/value-or-promise/-/value-or-promise-1.0.11.tgz", - "integrity": "sha512-41BrgH+dIbCFXClcSapVs5M6GkENd3gQOJpEfPDNa71LsUGMXDL0jMWpI/Rh7WhX+Aalfz2TTS3Zt5pUsbnhLg==", - "optional": true - }, "varint": { "version": "5.0.2", "resolved": "https://registry.npmjs.org/varint/-/varint-5.0.2.tgz", @@ -62367,30 +27771,24 @@ "extsprintf": "^1.2.0" } }, - "vuvuzela": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/vuvuzela/-/vuvuzela-1.0.3.tgz", - "integrity": "sha512-Tm7jR1xTzBbPW+6y1tknKiEhz04Wf/1iZkcTJjSFcpNko43+dFW6+OOeQe9taJIug3NdfUAjFKgUSyQrIKaDvQ==", - "optional": true - }, "web3": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/web3/-/web3-1.10.0.tgz", - "integrity": "sha512-YfKY9wSkGcM8seO+daR89oVTcbu18NsVfvOngzqMYGUU0pPSQmE57qQDvQzUeoIOHAnXEBNzrhjQJmm8ER0rng==", + "version": "1.10.3", + "resolved": "https://registry.npmjs.org/web3/-/web3-1.10.3.tgz", + "integrity": "sha512-DgUdOOqC/gTqW+VQl1EdPxrVRPB66xVNtuZ5KD4adVBtko87hkgM8BTZ0lZ8IbUfnQk6DyjcDujMiH3oszllAw==", "requires": { - "web3-bzz": "1.10.0", - "web3-core": "1.10.0", - "web3-eth": "1.10.0", - "web3-eth-personal": "1.10.0", - "web3-net": "1.10.0", - "web3-shh": "1.10.0", - "web3-utils": "1.10.0" + "web3-bzz": "1.10.3", + "web3-core": "1.10.3", + "web3-eth": "1.10.3", + "web3-eth-personal": "1.10.3", + "web3-net": "1.10.3", + "web3-shh": "1.10.3", + "web3-utils": "1.10.3" } }, "web3-bzz": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/web3-bzz/-/web3-bzz-1.10.0.tgz", - "integrity": "sha512-o9IR59io3pDUsXTsps5pO5hW1D5zBmg46iNc2t4j2DkaYHNdDLwk2IP9ukoM2wg47QILfPEJYzhTfkS/CcX0KA==", + "version": "1.10.3", + "resolved": "https://registry.npmjs.org/web3-bzz/-/web3-bzz-1.10.3.tgz", + "integrity": "sha512-XDIRsTwekdBXtFytMpHBuun4cK4x0ZMIDXSoo1UVYp+oMyZj07c7gf7tNQY5qZ/sN+CJIas4ilhN25VJcjSijQ==", "requires": { "@types/node": "^12.12.6", "got": "12.1.0", @@ -62405,307 +27803,177 @@ } }, "web3-core": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/web3-core/-/web3-core-1.10.0.tgz", - "integrity": "sha512-fWySwqy2hn3TL89w5TM8wXF1Z2Q6frQTKHWmP0ppRQorEK8NcHJRfeMiv/mQlSKoTS1F6n/nv2uyZsixFycjYQ==", + "version": "1.10.3", + "resolved": "https://registry.npmjs.org/web3-core/-/web3-core-1.10.3.tgz", + "integrity": "sha512-Vbk0/vUNZxJlz3RFjAhNNt7qTpX8yE3dn3uFxfX5OHbuon5u65YEOd3civ/aQNW745N0vGUlHFNxxmn+sG9DIw==", "requires": { "@types/bn.js": "^5.1.1", "@types/node": "^12.12.6", "bignumber.js": "^9.0.0", - "web3-core-helpers": "1.10.0", - "web3-core-method": "1.10.0", - "web3-core-requestmanager": "1.10.0", - "web3-utils": "1.10.0" + "web3-core-helpers": "1.10.3", + "web3-core-method": "1.10.3", + "web3-core-requestmanager": "1.10.3", + "web3-utils": "1.10.3" }, "dependencies": { "@types/node": { "version": "12.20.55", "resolved": "https://registry.npmjs.org/@types/node/-/node-12.20.55.tgz", "integrity": "sha512-J8xLz7q2OFulZ2cyGTLE1TbbZcjpno7FaN6zdJNrgAdrJ+DZzh/uFR6YrTb4C+nXakvud8Q4+rbhoIWlYQbUFQ==" - }, - "web3-core-helpers": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/web3-core-helpers/-/web3-core-helpers-1.10.0.tgz", - "integrity": "sha512-pIxAzFDS5vnbXvfvLSpaA1tfRykAe9adw43YCKsEYQwH0gCLL0kMLkaCX3q+Q8EVmAh+e1jWL/nl9U0de1+++g==", - "requires": { - "web3-eth-iban": "1.10.0", - "web3-utils": "1.10.0" - } - }, - "web3-eth-iban": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/web3-eth-iban/-/web3-eth-iban-1.10.0.tgz", - "integrity": "sha512-0l+SP3IGhInw7Q20LY3IVafYEuufo4Dn75jAHT7c2aDJsIolvf2Lc6ugHkBajlwUneGfbRQs/ccYPQ9JeMUbrg==", - "requires": { - "bn.js": "^5.2.1", - "web3-utils": "1.10.0" - } } } }, "web3-core-helpers": { - "version": "1.8.2", - "resolved": "https://registry.npmjs.org/web3-core-helpers/-/web3-core-helpers-1.8.2.tgz", - "integrity": "sha512-6B1eLlq9JFrfealZBomd1fmlq1o4A09vrCVQSa51ANoib/jllT3atZrRDr0zt1rfI7TSZTZBXdN/aTdeN99DWw==", - "dev": true, + "version": "1.10.3", + "resolved": "https://registry.npmjs.org/web3-core-helpers/-/web3-core-helpers-1.10.3.tgz", + "integrity": "sha512-Yv7dQC3B9ipOc5sWm3VAz1ys70Izfzb8n9rSiQYIPjpqtJM+3V4EeK6ghzNR6CO2es0+Yu9CtCkw0h8gQhrTxA==", "requires": { - "web3-eth-iban": "1.8.2", - "web3-utils": "1.8.2" - }, - "dependencies": { - "web3-utils": { - "version": "1.8.2", - "resolved": "https://registry.npmjs.org/web3-utils/-/web3-utils-1.8.2.tgz", - "integrity": "sha512-v7j6xhfLQfY7xQDrUP0BKbaNrmZ2/+egbqP9q3KYmOiPpnvAfol+32slgL0WX/5n8VPvKCK5EZ1HGrAVICSToA==", - "dev": true, - "requires": { - "bn.js": "^5.2.1", - "ethereum-bloom-filters": "^1.0.6", - "ethereumjs-util": "^7.1.0", - "ethjs-unit": "0.1.6", - "number-to-bn": "1.7.0", - "randombytes": "^2.1.0", - "utf8": "3.0.0" - } - } + "web3-eth-iban": "1.10.3", + "web3-utils": "1.10.3" } }, "web3-core-method": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/web3-core-method/-/web3-core-method-1.10.0.tgz", - "integrity": "sha512-4R700jTLAMKDMhQ+nsVfIXvH6IGJlJzGisIfMKWAIswH31h5AZz7uDUW2YctI+HrYd+5uOAlS4OJeeT9bIpvkA==", + "version": "1.10.3", + "resolved": "https://registry.npmjs.org/web3-core-method/-/web3-core-method-1.10.3.tgz", + "integrity": "sha512-VZ/Dmml4NBmb0ep5PTSg9oqKoBtG0/YoMPei/bq/tUdlhB2dMB79sbeJPwx592uaV0Vpk7VltrrrBv5hTM1y4Q==", "requires": { "@ethersproject/transactions": "^5.6.2", - "web3-core-helpers": "1.10.0", - "web3-core-promievent": "1.10.0", - "web3-core-subscriptions": "1.10.0", - "web3-utils": "1.10.0" - }, - "dependencies": { - "eventemitter3": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.4.tgz", - "integrity": "sha512-rlaVLnVxtxvoyLsQQFBx53YmXHDxRIzzTLbdfxqi4yocpSjAxXwkU0cScM5JgSKMqEhrZpnvQ2D9gjylR0AimQ==" - }, - "web3-core-helpers": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/web3-core-helpers/-/web3-core-helpers-1.10.0.tgz", - "integrity": "sha512-pIxAzFDS5vnbXvfvLSpaA1tfRykAe9adw43YCKsEYQwH0gCLL0kMLkaCX3q+Q8EVmAh+e1jWL/nl9U0de1+++g==", - "requires": { - "web3-eth-iban": "1.10.0", - "web3-utils": "1.10.0" - } - }, - "web3-core-promievent": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/web3-core-promievent/-/web3-core-promievent-1.10.0.tgz", - "integrity": "sha512-68N7k5LWL5R38xRaKFrTFT2pm2jBNFaM4GioS00YjAKXRQ3KjmhijOMG3TICz6Aa5+6GDWYelDNx21YAeZ4YTg==", - "requires": { - "eventemitter3": "4.0.4" - } - }, - "web3-eth-iban": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/web3-eth-iban/-/web3-eth-iban-1.10.0.tgz", - "integrity": "sha512-0l+SP3IGhInw7Q20LY3IVafYEuufo4Dn75jAHT7c2aDJsIolvf2Lc6ugHkBajlwUneGfbRQs/ccYPQ9JeMUbrg==", - "requires": { - "bn.js": "^5.2.1", - "web3-utils": "1.10.0" - } - } + "web3-core-helpers": "1.10.3", + "web3-core-promievent": "1.10.3", + "web3-core-subscriptions": "1.10.3", + "web3-utils": "1.10.3" } }, "web3-core-promievent": { - "version": "1.8.2", - "resolved": "https://registry.npmjs.org/web3-core-promievent/-/web3-core-promievent-1.8.2.tgz", - "integrity": "sha512-nvkJWDVgoOSsolJldN33tKW6bKKRJX3MCPDYMwP5SUFOA/mCzDEoI88N0JFofDTXkh1k7gOqp1pvwi9heuaxGg==", - "dev": true, + "version": "1.10.3", + "resolved": "https://registry.npmjs.org/web3-core-promievent/-/web3-core-promievent-1.10.3.tgz", + "integrity": "sha512-HgjY+TkuLm5uTwUtaAfkTgRx/NzMxvVradCi02gy17NxDVdg/p6svBHcp037vcNpkuGeFznFJgULP+s2hdVgUQ==", "requires": { "eventemitter3": "4.0.4" - }, - "dependencies": { - "eventemitter3": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.4.tgz", - "integrity": "sha512-rlaVLnVxtxvoyLsQQFBx53YmXHDxRIzzTLbdfxqi4yocpSjAxXwkU0cScM5JgSKMqEhrZpnvQ2D9gjylR0AimQ==", - "dev": true - } } }, "web3-core-requestmanager": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/web3-core-requestmanager/-/web3-core-requestmanager-1.10.0.tgz", - "integrity": "sha512-3z/JKE++Os62APml4dvBM+GAuId4h3L9ckUrj7ebEtS2AR0ixyQPbrBodgL91Sv7j7cQ3Y+hllaluqjguxvSaQ==", + "version": "1.10.3", + "resolved": "https://registry.npmjs.org/web3-core-requestmanager/-/web3-core-requestmanager-1.10.3.tgz", + "integrity": "sha512-VT9sKJfgM2yBOIxOXeXiDuFMP4pxzF6FT+y8KTLqhDFHkbG3XRe42Vm97mB/IvLQCJOmokEjl3ps8yP1kbggyw==", "requires": { "util": "^0.12.5", - "web3-core-helpers": "1.10.0", - "web3-providers-http": "1.10.0", - "web3-providers-ipc": "1.10.0", - "web3-providers-ws": "1.10.0" - }, - "dependencies": { - "web3-core-helpers": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/web3-core-helpers/-/web3-core-helpers-1.10.0.tgz", - "integrity": "sha512-pIxAzFDS5vnbXvfvLSpaA1tfRykAe9adw43YCKsEYQwH0gCLL0kMLkaCX3q+Q8EVmAh+e1jWL/nl9U0de1+++g==", - "requires": { - "web3-eth-iban": "1.10.0", - "web3-utils": "1.10.0" - } - }, - "web3-eth-iban": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/web3-eth-iban/-/web3-eth-iban-1.10.0.tgz", - "integrity": "sha512-0l+SP3IGhInw7Q20LY3IVafYEuufo4Dn75jAHT7c2aDJsIolvf2Lc6ugHkBajlwUneGfbRQs/ccYPQ9JeMUbrg==", - "requires": { - "bn.js": "^5.2.1", - "web3-utils": "1.10.0" - } - } + "web3-core-helpers": "1.10.3", + "web3-providers-http": "1.10.3", + "web3-providers-ipc": "1.10.3", + "web3-providers-ws": "1.10.3" } }, "web3-core-subscriptions": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/web3-core-subscriptions/-/web3-core-subscriptions-1.10.0.tgz", - "integrity": "sha512-HGm1PbDqsxejI075gxBc5OSkwymilRWZufIy9zEpnWKNmfbuv5FfHgW1/chtJP6aP3Uq2vHkvTDl3smQBb8l+g==", + "version": "1.10.3", + "resolved": "https://registry.npmjs.org/web3-core-subscriptions/-/web3-core-subscriptions-1.10.3.tgz", + "integrity": "sha512-KW0Mc8sgn70WadZu7RjQ4H5sNDJ5Lx8JMI3BWos+f2rW0foegOCyWhRu33W1s6ntXnqeBUw5rRCXZRlA3z+HNA==", "requires": { "eventemitter3": "4.0.4", - "web3-core-helpers": "1.10.0" - }, - "dependencies": { - "eventemitter3": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.4.tgz", - "integrity": "sha512-rlaVLnVxtxvoyLsQQFBx53YmXHDxRIzzTLbdfxqi4yocpSjAxXwkU0cScM5JgSKMqEhrZpnvQ2D9gjylR0AimQ==" - }, - "web3-core-helpers": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/web3-core-helpers/-/web3-core-helpers-1.10.0.tgz", - "integrity": "sha512-pIxAzFDS5vnbXvfvLSpaA1tfRykAe9adw43YCKsEYQwH0gCLL0kMLkaCX3q+Q8EVmAh+e1jWL/nl9U0de1+++g==", - "requires": { - "web3-eth-iban": "1.10.0", - "web3-utils": "1.10.0" - } - }, - "web3-eth-iban": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/web3-eth-iban/-/web3-eth-iban-1.10.0.tgz", - "integrity": "sha512-0l+SP3IGhInw7Q20LY3IVafYEuufo4Dn75jAHT7c2aDJsIolvf2Lc6ugHkBajlwUneGfbRQs/ccYPQ9JeMUbrg==", - "requires": { - "bn.js": "^5.2.1", - "web3-utils": "1.10.0" - } - } + "web3-core-helpers": "1.10.3" } }, - "web3-eth": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/web3-eth/-/web3-eth-1.10.0.tgz", - "integrity": "sha512-Z5vT6slNMLPKuwRyKGbqeGYC87OAy8bOblaqRTgg94CXcn/mmqU7iPIlG4506YdcdK3x6cfEDG7B6w+jRxypKA==", + "web3-errors": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/web3-errors/-/web3-errors-1.1.4.tgz", + "integrity": "sha512-WahtszSqILez+83AxGecVroyZsMuuRT+KmQp4Si5P4Rnqbczno1k748PCrZTS1J4UCPmXMG2/Vt+0Bz2zwXkwQ==", "requires": { - "web3-core": "1.10.0", - "web3-core-helpers": "1.10.0", - "web3-core-method": "1.10.0", - "web3-core-subscriptions": "1.10.0", - "web3-eth-abi": "1.10.0", - "web3-eth-accounts": "1.10.0", - "web3-eth-contract": "1.10.0", - "web3-eth-ens": "1.10.0", - "web3-eth-iban": "1.10.0", - "web3-eth-personal": "1.10.0", - "web3-net": "1.10.0", - "web3-utils": "1.10.0" + "web3-types": "^1.3.1" + } + }, + "web3-eth": { + "version": "1.10.3", + "resolved": "https://registry.npmjs.org/web3-eth/-/web3-eth-1.10.3.tgz", + "integrity": "sha512-Uk1U2qGiif2mIG8iKu23/EQJ2ksB1BQXy3wF3RvFuyxt8Ft9OEpmGlO7wOtAyJdoKzD5vcul19bJpPcWSAYZhA==", + "requires": { + "web3-core": "1.10.3", + "web3-core-helpers": "1.10.3", + "web3-core-method": "1.10.3", + "web3-core-subscriptions": "1.10.3", + "web3-eth-abi": "1.10.3", + "web3-eth-accounts": "1.10.3", + "web3-eth-contract": "1.10.3", + "web3-eth-ens": "1.10.3", + "web3-eth-iban": "1.10.3", + "web3-eth-personal": "1.10.3", + "web3-net": "1.10.3", + "web3-utils": "1.10.3" }, "dependencies": { - "web3-core-helpers": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/web3-core-helpers/-/web3-core-helpers-1.10.0.tgz", - "integrity": "sha512-pIxAzFDS5vnbXvfvLSpaA1tfRykAe9adw43YCKsEYQwH0gCLL0kMLkaCX3q+Q8EVmAh+e1jWL/nl9U0de1+++g==", - "requires": { - "web3-eth-iban": "1.10.0", - "web3-utils": "1.10.0" - } - }, - "web3-eth-abi": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/web3-eth-abi/-/web3-eth-abi-1.10.0.tgz", - "integrity": "sha512-cwS+qRBWpJ43aI9L3JS88QYPfFcSJJ3XapxOQ4j40v6mk7ATpA8CVK1vGTzpihNlOfMVRBkR95oAj7oL6aiDOg==", - "requires": { - "@ethersproject/abi": "^5.6.3", - "web3-utils": "1.10.0" - } - }, - "web3-eth-iban": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/web3-eth-iban/-/web3-eth-iban-1.10.0.tgz", - "integrity": "sha512-0l+SP3IGhInw7Q20LY3IVafYEuufo4Dn75jAHT7c2aDJsIolvf2Lc6ugHkBajlwUneGfbRQs/ccYPQ9JeMUbrg==", + "web3-eth-contract": { + "version": "1.10.3", + "resolved": "https://registry.npmjs.org/web3-eth-contract/-/web3-eth-contract-1.10.3.tgz", + "integrity": "sha512-Y2CW61dCCyY4IoUMD4JsEQWrILX4FJWDWC/Txx/pr3K/+fGsBGvS9kWQN5EsVXOp4g7HoFOfVh9Lf7BmVVSRmg==", "requires": { - "bn.js": "^5.2.1", - "web3-utils": "1.10.0" + "@types/bn.js": "^5.1.1", + "web3-core": "1.10.3", + "web3-core-helpers": "1.10.3", + "web3-core-method": "1.10.3", + "web3-core-promievent": "1.10.3", + "web3-core-subscriptions": "1.10.3", + "web3-eth-abi": "1.10.3", + "web3-utils": "1.10.3" } } } }, "web3-eth-abi": { - "version": "1.8.2", - "resolved": "https://registry.npmjs.org/web3-eth-abi/-/web3-eth-abi-1.8.2.tgz", - "integrity": "sha512-Om9g3kaRNjqiNPAgKwGT16y+ZwtBzRe4ZJFGjLiSs6v5I7TPNF+rRMWuKnR6jq0azQZDj6rblvKFMA49/k48Og==", - "dev": true, + "version": "1.10.3", + "resolved": "https://registry.npmjs.org/web3-eth-abi/-/web3-eth-abi-1.10.3.tgz", + "integrity": "sha512-O8EvV67uhq0OiCMekqYsDtb6FzfYzMXT7VMHowF8HV6qLZXCGTdB/NH4nJrEh2mFtEwVdS6AmLFJAQd2kVyoMQ==", "requires": { "@ethersproject/abi": "^5.6.3", - "web3-utils": "1.8.2" - }, - "dependencies": { - "web3-utils": { - "version": "1.8.2", - "resolved": "https://registry.npmjs.org/web3-utils/-/web3-utils-1.8.2.tgz", - "integrity": "sha512-v7j6xhfLQfY7xQDrUP0BKbaNrmZ2/+egbqP9q3KYmOiPpnvAfol+32slgL0WX/5n8VPvKCK5EZ1HGrAVICSToA==", - "dev": true, - "requires": { - "bn.js": "^5.2.1", - "ethereum-bloom-filters": "^1.0.6", - "ethereumjs-util": "^7.1.0", - "ethjs-unit": "0.1.6", - "number-to-bn": "1.7.0", - "randombytes": "^2.1.0", - "utf8": "3.0.0" - } - } + "web3-utils": "1.10.3" } }, "web3-eth-accounts": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/web3-eth-accounts/-/web3-eth-accounts-1.10.0.tgz", - "integrity": "sha512-wiq39Uc3mOI8rw24wE2n15hboLE0E9BsQLdlmsL4Zua9diDS6B5abXG0XhFcoNsXIGMWXVZz4TOq3u4EdpXF/Q==", + "version": "1.10.3", + "resolved": "https://registry.npmjs.org/web3-eth-accounts/-/web3-eth-accounts-1.10.3.tgz", + "integrity": "sha512-8MipGgwusDVgn7NwKOmpeo3gxzzd+SmwcWeBdpXknuyDiZSQy9tXe+E9LeFGrmys/8mLLYP79n3jSbiTyv+6pQ==", "requires": { - "@ethereumjs/common": "2.5.0", - "@ethereumjs/tx": "3.3.2", + "@ethereumjs/common": "2.6.5", + "@ethereumjs/tx": "3.5.2", + "@ethereumjs/util": "^8.1.0", "eth-lib": "0.2.8", - "ethereumjs-util": "^7.1.5", "scrypt-js": "^3.0.1", "uuid": "^9.0.0", - "web3-core": "1.10.0", - "web3-core-helpers": "1.10.0", - "web3-core-method": "1.10.0", - "web3-utils": "1.10.0" + "web3-core": "1.10.3", + "web3-core-helpers": "1.10.3", + "web3-core-method": "1.10.3", + "web3-utils": "1.10.3" }, "dependencies": { "@ethereumjs/common": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/@ethereumjs/common/-/common-2.5.0.tgz", - "integrity": "sha512-DEHjW6e38o+JmB/NO3GZBpW4lpaiBpkFgXF6jLcJ6gETBYpEyaA5nTimsWBUJR3Vmtm/didUEbNjajskugZORg==", + "version": "2.6.5", + "resolved": "https://registry.npmjs.org/@ethereumjs/common/-/common-2.6.5.tgz", + "integrity": "sha512-lRyVQOeCDaIVtgfbowla32pzeDv2Obr8oR8Put5RdUBNRGr1VGPGQNGP6elWIpgK3YdpzqTOh4GyUGOureVeeA==", "requires": { "crc-32": "^1.2.0", - "ethereumjs-util": "^7.1.1" + "ethereumjs-util": "^7.1.5" + } + }, + "@ethereumjs/rlp": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@ethereumjs/rlp/-/rlp-4.0.1.tgz", + "integrity": "sha512-tqsQiBQDQdmPWE1xkkBq4rlSW5QZpLOUJ5RJh2/9fug+q9tnUhuZoVLk7s0scUIKTOzEtR72DFBXI4WiZcMpvw==" + }, + "@ethereumjs/tx": { + "version": "3.5.2", + "resolved": "https://registry.npmjs.org/@ethereumjs/tx/-/tx-3.5.2.tgz", + "integrity": "sha512-gQDNJWKrSDGu2w7w0PzVXVBNMzb7wwdDOmOqczmhNjqFxFuIbhVJDwiGEnxFNC2/b8ifcZzY7MLcluizohRzNw==", + "requires": { + "@ethereumjs/common": "^2.6.4", + "ethereumjs-util": "^7.1.5" } }, - "@ethereumjs/tx": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/@ethereumjs/tx/-/tx-3.3.2.tgz", - "integrity": "sha512-6AaJhwg4ucmwTvw/1qLaZUX5miWrwZ4nLOUsKyb/HtzS3BMw/CasKhdi1ims9mBKeK9sOJCH4qGKOBGyJCeeog==", + "@ethereumjs/util": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/@ethereumjs/util/-/util-8.1.0.tgz", + "integrity": "sha512-zQ0IqbdX8FZ9aw11vP+dZkKDkS+kgIvQPHnSAXzP9pLu+Rfu3D3XEeLbicvoXJTYnhZiPmsZUxgdzXwNKxRPbA==", "requires": { - "@ethereumjs/common": "^2.5.0", - "ethereumjs-util": "^7.1.2" + "@ethereumjs/rlp": "^4.0.1", + "ethereum-cryptography": "^2.0.0", + "micro-ftch": "^0.3.1" } }, "bn.js": { @@ -62724,516 +27992,436 @@ } }, "uuid": { - "version": "9.0.0", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.0.tgz", - "integrity": "sha512-MXcSTerfPa4uqyzStbRoTgt5XIe3x5+42+q1sDuy3R5MDk66URdLMOZe5aPX/SQd+kuYAh0FdP/pO28IkQyTeg==" - }, - "web3-core-helpers": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/web3-core-helpers/-/web3-core-helpers-1.10.0.tgz", - "integrity": "sha512-pIxAzFDS5vnbXvfvLSpaA1tfRykAe9adw43YCKsEYQwH0gCLL0kMLkaCX3q+Q8EVmAh+e1jWL/nl9U0de1+++g==", - "requires": { - "web3-eth-iban": "1.10.0", - "web3-utils": "1.10.0" - } - }, - "web3-eth-iban": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/web3-eth-iban/-/web3-eth-iban-1.10.0.tgz", - "integrity": "sha512-0l+SP3IGhInw7Q20LY3IVafYEuufo4Dn75jAHT7c2aDJsIolvf2Lc6ugHkBajlwUneGfbRQs/ccYPQ9JeMUbrg==", - "requires": { - "bn.js": "^5.2.1", - "web3-utils": "1.10.0" - }, - "dependencies": { - "bn.js": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.2.1.tgz", - "integrity": "sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ==" - } - } + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.1.tgz", + "integrity": "sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==" } } }, "web3-eth-contract": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/web3-eth-contract/-/web3-eth-contract-1.10.0.tgz", - "integrity": "sha512-MIC5FOzP/+2evDksQQ/dpcXhSqa/2hFNytdl/x61IeWxhh6vlFeSjq0YVTAyIzdjwnL7nEmZpjfI6y6/Ufhy7w==", + "version": "4.1.4", + "resolved": "https://registry.npmjs.org/web3-eth-contract/-/web3-eth-contract-4.1.4.tgz", + "integrity": "sha512-tJ4z6QLgtu8EQu2sXnLA7g427oxmngnbAUh+9kJKbP6Yep/oe+z79PqJv7H3MwqwUNW9T+/FeB2PnSQSyxz6ig==", "requires": { - "@types/bn.js": "^5.1.1", - "web3-core": "1.10.0", - "web3-core-helpers": "1.10.0", - "web3-core-method": "1.10.0", - "web3-core-promievent": "1.10.0", - "web3-core-subscriptions": "1.10.0", - "web3-eth-abi": "1.10.0", - "web3-utils": "1.10.0" + "web3-core": "^4.3.2", + "web3-errors": "^1.1.4", + "web3-eth": "^4.3.1", + "web3-eth-abi": "^4.1.4", + "web3-types": "^1.3.1", + "web3-utils": "^4.1.0", + "web3-validator": "^2.0.3" }, "dependencies": { - "eventemitter3": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.4.tgz", - "integrity": "sha512-rlaVLnVxtxvoyLsQQFBx53YmXHDxRIzzTLbdfxqi4yocpSjAxXwkU0cScM5JgSKMqEhrZpnvQ2D9gjylR0AimQ==" + "@ethereumjs/rlp": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@ethereumjs/rlp/-/rlp-4.0.1.tgz", + "integrity": "sha512-tqsQiBQDQdmPWE1xkkBq4rlSW5QZpLOUJ5RJh2/9fug+q9tnUhuZoVLk7s0scUIKTOzEtR72DFBXI4WiZcMpvw==" }, - "web3-core-helpers": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/web3-core-helpers/-/web3-core-helpers-1.10.0.tgz", - "integrity": "sha512-pIxAzFDS5vnbXvfvLSpaA1tfRykAe9adw43YCKsEYQwH0gCLL0kMLkaCX3q+Q8EVmAh+e1jWL/nl9U0de1+++g==", + "web3-core": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/web3-core/-/web3-core-4.3.2.tgz", + "integrity": "sha512-uIMVd/j4BgOnwfpY8ZT+QKubOyM4xohEhFZXz9xB8wimXWMMlYVlIK/TbfHqFolS9uOerdSGhsMbcK9lETae8g==", "requires": { - "web3-eth-iban": "1.10.0", - "web3-utils": "1.10.0" + "web3-errors": "^1.1.4", + "web3-eth-accounts": "^4.1.0", + "web3-eth-iban": "^4.0.7", + "web3-providers-http": "^4.1.0", + "web3-providers-ipc": "^4.0.7", + "web3-providers-ws": "^4.0.7", + "web3-types": "^1.3.1", + "web3-utils": "^4.1.0", + "web3-validator": "^2.0.3" } }, - "web3-core-promievent": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/web3-core-promievent/-/web3-core-promievent-1.10.0.tgz", - "integrity": "sha512-68N7k5LWL5R38xRaKFrTFT2pm2jBNFaM4GioS00YjAKXRQ3KjmhijOMG3TICz6Aa5+6GDWYelDNx21YAeZ4YTg==", + "web3-eth": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/web3-eth/-/web3-eth-4.3.1.tgz", + "integrity": "sha512-zJir3GOXooHQT85JB8SrufE+Voo5TtXdjhf1D8IGXmxM8MrhI8AT+Pgt4siBTupJcu5hF17iGmTP/Nj2XnaibQ==", "requires": { - "eventemitter3": "4.0.4" + "setimmediate": "^1.0.5", + "web3-core": "^4.3.0", + "web3-errors": "^1.1.3", + "web3-eth-abi": "^4.1.4", + "web3-eth-accounts": "^4.1.0", + "web3-net": "^4.0.7", + "web3-providers-ws": "^4.0.7", + "web3-rpc-methods": "^1.1.3", + "web3-types": "^1.3.0", + "web3-utils": "^4.0.7", + "web3-validator": "^2.0.3" } }, "web3-eth-abi": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/web3-eth-abi/-/web3-eth-abi-1.10.0.tgz", - "integrity": "sha512-cwS+qRBWpJ43aI9L3JS88QYPfFcSJJ3XapxOQ4j40v6mk7ATpA8CVK1vGTzpihNlOfMVRBkR95oAj7oL6aiDOg==", + "version": "4.1.4", + "resolved": "https://registry.npmjs.org/web3-eth-abi/-/web3-eth-abi-4.1.4.tgz", + "integrity": "sha512-YLOBVVxxxLYKXjaiwZjEWYEnkMmmrm0nswZsvzSsINy/UgbWbzfoiZU+zn4YNWIEhORhx1p37iS3u/dP6VyC2w==", "requires": { - "@ethersproject/abi": "^5.6.3", - "web3-utils": "1.10.0" + "abitype": "0.7.1", + "web3-errors": "^1.1.3", + "web3-types": "^1.3.0", + "web3-utils": "^4.0.7", + "web3-validator": "^2.0.3" + } + }, + "web3-eth-accounts": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/web3-eth-accounts/-/web3-eth-accounts-4.1.0.tgz", + "integrity": "sha512-UFtAsOANsvihTQ6SSvOKguupmQkResyR9M9JNuOxYpKh7+3W+sTnbLXw2UbOSYIsKlc1mpqqW9bVr1SjqHDpUQ==", + "requires": { + "@ethereumjs/rlp": "^4.0.1", + "crc-32": "^1.2.2", + "ethereum-cryptography": "^2.0.0", + "web3-errors": "^1.1.3", + "web3-types": "^1.3.0", + "web3-utils": "^4.0.7", + "web3-validator": "^2.0.3" } }, "web3-eth-iban": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/web3-eth-iban/-/web3-eth-iban-1.10.0.tgz", - "integrity": "sha512-0l+SP3IGhInw7Q20LY3IVafYEuufo4Dn75jAHT7c2aDJsIolvf2Lc6ugHkBajlwUneGfbRQs/ccYPQ9JeMUbrg==", + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/web3-eth-iban/-/web3-eth-iban-4.0.7.tgz", + "integrity": "sha512-8weKLa9KuKRzibC87vNLdkinpUE30gn0IGY027F8doeJdcPUfsa4IlBgNC4k4HLBembBB2CTU0Kr/HAOqMeYVQ==", "requires": { - "bn.js": "^5.2.1", - "web3-utils": "1.10.0" + "web3-errors": "^1.1.3", + "web3-types": "^1.3.0", + "web3-utils": "^4.0.7", + "web3-validator": "^2.0.3" } - } - } - }, - "web3-eth-ens": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/web3-eth-ens/-/web3-eth-ens-1.10.0.tgz", - "integrity": "sha512-3hpGgzX3qjgxNAmqdrC2YUQMTfnZbs4GeLEmy8aCWziVwogbuqQZ+Gzdfrym45eOZodk+lmXyLuAdqkNlvkc1g==", - "requires": { - "content-hash": "^2.5.2", - "eth-ens-namehash": "2.0.8", - "web3-core": "1.10.0", - "web3-core-helpers": "1.10.0", - "web3-core-promievent": "1.10.0", - "web3-eth-abi": "1.10.0", - "web3-eth-contract": "1.10.0", - "web3-utils": "1.10.0" - }, - "dependencies": { - "eventemitter3": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.4.tgz", - "integrity": "sha512-rlaVLnVxtxvoyLsQQFBx53YmXHDxRIzzTLbdfxqi4yocpSjAxXwkU0cScM5JgSKMqEhrZpnvQ2D9gjylR0AimQ==" }, - "web3-core-helpers": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/web3-core-helpers/-/web3-core-helpers-1.10.0.tgz", - "integrity": "sha512-pIxAzFDS5vnbXvfvLSpaA1tfRykAe9adw43YCKsEYQwH0gCLL0kMLkaCX3q+Q8EVmAh+e1jWL/nl9U0de1+++g==", + "web3-net": { + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/web3-net/-/web3-net-4.0.7.tgz", + "integrity": "sha512-SzEaXFrBjY25iQGk5myaOfO9ZyfTwQEa4l4Ps4HDNVMibgZji3WPzpjq8zomVHMwi8bRp6VV7YS71eEsX7zLow==", "requires": { - "web3-eth-iban": "1.10.0", - "web3-utils": "1.10.0" + "web3-core": "^4.3.0", + "web3-rpc-methods": "^1.1.3", + "web3-types": "^1.3.0", + "web3-utils": "^4.0.7" } }, - "web3-core-promievent": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/web3-core-promievent/-/web3-core-promievent-1.10.0.tgz", - "integrity": "sha512-68N7k5LWL5R38xRaKFrTFT2pm2jBNFaM4GioS00YjAKXRQ3KjmhijOMG3TICz6Aa5+6GDWYelDNx21YAeZ4YTg==", + "web3-providers-http": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/web3-providers-http/-/web3-providers-http-4.1.0.tgz", + "integrity": "sha512-6qRUGAhJfVQM41E5t+re5IHYmb5hSaLc02BE2MaRQsz2xKA6RjmHpOA5h/+ojJxEpI9NI2CrfDKOAgtJfoUJQg==", "requires": { - "eventemitter3": "4.0.4" + "cross-fetch": "^4.0.0", + "web3-errors": "^1.1.3", + "web3-types": "^1.3.0", + "web3-utils": "^4.0.7" } }, - "web3-eth-abi": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/web3-eth-abi/-/web3-eth-abi-1.10.0.tgz", - "integrity": "sha512-cwS+qRBWpJ43aI9L3JS88QYPfFcSJJ3XapxOQ4j40v6mk7ATpA8CVK1vGTzpihNlOfMVRBkR95oAj7oL6aiDOg==", + "web3-providers-ipc": { + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/web3-providers-ipc/-/web3-providers-ipc-4.0.7.tgz", + "integrity": "sha512-YbNqY4zUvIaK2MHr1lQFE53/8t/ejHtJchrWn9zVbFMGXlTsOAbNoIoZWROrg1v+hCBvT2c9z8xt7e/+uz5p1g==", + "optional": true, "requires": { - "@ethersproject/abi": "^5.6.3", - "web3-utils": "1.10.0" + "web3-errors": "^1.1.3", + "web3-types": "^1.3.0", + "web3-utils": "^4.0.7" } }, - "web3-eth-iban": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/web3-eth-iban/-/web3-eth-iban-1.10.0.tgz", - "integrity": "sha512-0l+SP3IGhInw7Q20LY3IVafYEuufo4Dn75jAHT7c2aDJsIolvf2Lc6ugHkBajlwUneGfbRQs/ccYPQ9JeMUbrg==", + "web3-providers-ws": { + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/web3-providers-ws/-/web3-providers-ws-4.0.7.tgz", + "integrity": "sha512-n4Dal9/rQWjS7d6LjyEPM2R458V8blRm0eLJupDEJOOIBhGYlxw5/4FthZZ/cqB7y/sLVi7K09DdYx2MeRtU5w==", "requires": { - "bn.js": "^5.2.1", - "web3-utils": "1.10.0" + "@types/ws": "8.5.3", + "isomorphic-ws": "^5.0.0", + "web3-errors": "^1.1.3", + "web3-types": "^1.3.0", + "web3-utils": "^4.0.7", + "ws": "^8.8.1" } + }, + "web3-utils": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/web3-utils/-/web3-utils-4.1.0.tgz", + "integrity": "sha512-+VJWR6FtCsgwuJr5tvSvQlSEG06586df8h2CxGc9tcNtIDyJKNkSDDWJkdNPvyDhhXFzQYFh8QOGymD1CIP6fw==", + "requires": { + "ethereum-cryptography": "^2.0.0", + "web3-errors": "^1.1.4", + "web3-types": "^1.3.1", + "web3-validator": "^2.0.3" + } + }, + "ws": { + "version": "8.16.0", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.16.0.tgz", + "integrity": "sha512-HS0c//TP7Ina87TfiPUz1rQzMhHrl/SG2guqRcTOIUYD2q8uhUdNHZYJUaQ8aTGPzCh+c6oawMKW35nFl1dxyQ==", + "requires": {} } } }, - "web3-eth-iban": { - "version": "1.8.2", - "resolved": "https://registry.npmjs.org/web3-eth-iban/-/web3-eth-iban-1.8.2.tgz", - "integrity": "sha512-h3vNblDWkWMuYx93Q27TAJz6lhzpP93EiC3+45D6xoz983p6si773vntoQ+H+5aZhwglBtoiBzdh7PSSOnP/xQ==", - "dev": true, + "web3-eth-ens": { + "version": "1.10.3", + "resolved": "https://registry.npmjs.org/web3-eth-ens/-/web3-eth-ens-1.10.3.tgz", + "integrity": "sha512-hR+odRDXGqKemw1GFniKBEXpjYwLgttTES+bc7BfTeoUyUZXbyDHe5ifC+h+vpzxh4oS0TnfcIoarK0Z9tFSiQ==", "requires": { - "bn.js": "^5.2.1", - "web3-utils": "1.8.2" + "content-hash": "^2.5.2", + "eth-ens-namehash": "2.0.8", + "web3-core": "1.10.3", + "web3-core-helpers": "1.10.3", + "web3-core-promievent": "1.10.3", + "web3-eth-abi": "1.10.3", + "web3-eth-contract": "1.10.3", + "web3-utils": "1.10.3" }, "dependencies": { - "web3-utils": { - "version": "1.8.2", - "resolved": "https://registry.npmjs.org/web3-utils/-/web3-utils-1.8.2.tgz", - "integrity": "sha512-v7j6xhfLQfY7xQDrUP0BKbaNrmZ2/+egbqP9q3KYmOiPpnvAfol+32slgL0WX/5n8VPvKCK5EZ1HGrAVICSToA==", - "dev": true, + "web3-eth-contract": { + "version": "1.10.3", + "resolved": "https://registry.npmjs.org/web3-eth-contract/-/web3-eth-contract-1.10.3.tgz", + "integrity": "sha512-Y2CW61dCCyY4IoUMD4JsEQWrILX4FJWDWC/Txx/pr3K/+fGsBGvS9kWQN5EsVXOp4g7HoFOfVh9Lf7BmVVSRmg==", "requires": { - "bn.js": "^5.2.1", - "ethereum-bloom-filters": "^1.0.6", - "ethereumjs-util": "^7.1.0", - "ethjs-unit": "0.1.6", - "number-to-bn": "1.7.0", - "randombytes": "^2.1.0", - "utf8": "3.0.0" + "@types/bn.js": "^5.1.1", + "web3-core": "1.10.3", + "web3-core-helpers": "1.10.3", + "web3-core-method": "1.10.3", + "web3-core-promievent": "1.10.3", + "web3-core-subscriptions": "1.10.3", + "web3-eth-abi": "1.10.3", + "web3-utils": "1.10.3" } } } }, + "web3-eth-iban": { + "version": "1.10.3", + "resolved": "https://registry.npmjs.org/web3-eth-iban/-/web3-eth-iban-1.10.3.tgz", + "integrity": "sha512-ZCfOjYKAjaX2TGI8uif5ah+J3BYFuo+47JOIV1RIz2l7kD9VfnxvRH5UiQDRyMALQC7KFd2hUqIEtHklapNyKA==", + "requires": { + "bn.js": "^5.2.1", + "web3-utils": "1.10.3" + } + }, "web3-eth-personal": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/web3-eth-personal/-/web3-eth-personal-1.10.0.tgz", - "integrity": "sha512-anseKn98w/d703eWq52uNuZi7GhQeVjTC5/svrBWEKob0WZ5kPdo+EZoFN0sp5a5ubbrk/E0xSl1/M5yORMtpg==", + "version": "1.10.3", + "resolved": "https://registry.npmjs.org/web3-eth-personal/-/web3-eth-personal-1.10.3.tgz", + "integrity": "sha512-avrQ6yWdADIvuNQcFZXmGLCEzulQa76hUOuVywN7O3cklB4nFc/Gp3yTvD3bOAaE7DhjLQfhUTCzXL7WMxVTsw==", "requires": { "@types/node": "^12.12.6", - "web3-core": "1.10.0", - "web3-core-helpers": "1.10.0", - "web3-core-method": "1.10.0", - "web3-net": "1.10.0", - "web3-utils": "1.10.0" + "web3-core": "1.10.3", + "web3-core-helpers": "1.10.3", + "web3-core-method": "1.10.3", + "web3-net": "1.10.3", + "web3-utils": "1.10.3" }, "dependencies": { "@types/node": { "version": "12.20.55", "resolved": "https://registry.npmjs.org/@types/node/-/node-12.20.55.tgz", "integrity": "sha512-J8xLz7q2OFulZ2cyGTLE1TbbZcjpno7FaN6zdJNrgAdrJ+DZzh/uFR6YrTb4C+nXakvud8Q4+rbhoIWlYQbUFQ==" - }, - "web3-core-helpers": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/web3-core-helpers/-/web3-core-helpers-1.10.0.tgz", - "integrity": "sha512-pIxAzFDS5vnbXvfvLSpaA1tfRykAe9adw43YCKsEYQwH0gCLL0kMLkaCX3q+Q8EVmAh+e1jWL/nl9U0de1+++g==", - "requires": { - "web3-eth-iban": "1.10.0", - "web3-utils": "1.10.0" - } - }, - "web3-eth-iban": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/web3-eth-iban/-/web3-eth-iban-1.10.0.tgz", - "integrity": "sha512-0l+SP3IGhInw7Q20LY3IVafYEuufo4Dn75jAHT7c2aDJsIolvf2Lc6ugHkBajlwUneGfbRQs/ccYPQ9JeMUbrg==", - "requires": { - "bn.js": "^5.2.1", - "web3-utils": "1.10.0" - } } } }, "web3-net": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/web3-net/-/web3-net-1.10.0.tgz", - "integrity": "sha512-NLH/N3IshYWASpxk4/18Ge6n60GEvWBVeM8inx2dmZJVmRI6SJIlUxbL8jySgiTn3MMZlhbdvrGo8fpUW7a1GA==", + "version": "1.10.3", + "resolved": "https://registry.npmjs.org/web3-net/-/web3-net-1.10.3.tgz", + "integrity": "sha512-IoSr33235qVoI1vtKssPUigJU9Fc/Ph0T9CgRi15sx+itysmvtlmXMNoyd6Xrgm9LuM4CIhxz7yDzH93B79IFg==", "requires": { - "web3-core": "1.10.0", - "web3-core-method": "1.10.0", - "web3-utils": "1.10.0" + "web3-core": "1.10.3", + "web3-core-method": "1.10.3", + "web3-utils": "1.10.3" } }, - "web3-provider-engine": { - "version": "16.0.3", - "resolved": "https://registry.npmjs.org/web3-provider-engine/-/web3-provider-engine-16.0.3.tgz", - "integrity": "sha512-Q3bKhGqLfMTdLvkd4TtkGYJHcoVQ82D1l8jTIwwuJp/sAp7VHnRYb9YJ14SW/69VMWoOhSpPLZV2tWb9V0WJoA==", - "requires": { - "@ethereumjs/tx": "^3.3.0", - "async": "^2.5.0", - "backoff": "^2.5.0", - "clone": "^2.0.0", - "cross-fetch": "^2.1.0", - "eth-block-tracker": "^4.4.2", - "eth-json-rpc-filters": "^4.2.1", - "eth-json-rpc-infura": "^5.1.0", - "eth-json-rpc-middleware": "^6.0.0", - "eth-rpc-errors": "^3.0.0", - "eth-sig-util": "^1.4.2", - "ethereumjs-block": "^1.2.2", - "ethereumjs-util": "^5.1.5", - "ethereumjs-vm": "^2.3.4", - "json-stable-stringify": "^1.0.1", - "promise-to-callback": "^1.0.0", - "readable-stream": "^2.2.9", - "request": "^2.85.0", - "semaphore": "^1.0.3", - "ws": "^5.1.1", - "xhr": "^2.2.0", - "xtend": "^4.0.1" + "web3-providers-http": { + "version": "1.10.3", + "resolved": "https://registry.npmjs.org/web3-providers-http/-/web3-providers-http-1.10.3.tgz", + "integrity": "sha512-6dAgsHR3MxJ0Qyu3QLFlQEelTapVfWNTu5F45FYh8t7Y03T1/o+YAkVxsbY5AdmD+y5bXG/XPJ4q8tjL6MgZHw==", + "requires": { + "abortcontroller-polyfill": "^1.7.5", + "cross-fetch": "^4.0.0", + "es6-promise": "^4.2.8", + "web3-core-helpers": "1.10.3" + } + }, + "web3-providers-ipc": { + "version": "1.10.3", + "resolved": "https://registry.npmjs.org/web3-providers-ipc/-/web3-providers-ipc-1.10.3.tgz", + "integrity": "sha512-vP5WIGT8FLnGRfswTxNs9rMfS1vCbMezj/zHbBe/zB9GauBRTYVrUo2H/hVrhLg8Ut7AbsKZ+tCJ4mAwpKi2hA==", + "requires": { + "oboe": "2.1.5", + "web3-core-helpers": "1.10.3" + } + }, + "web3-providers-ws": { + "version": "1.10.3", + "resolved": "https://registry.npmjs.org/web3-providers-ws/-/web3-providers-ws-1.10.3.tgz", + "integrity": "sha512-/filBXRl48INxsh6AuCcsy4v5ndnTZ/p6bl67kmO9aK1wffv7CT++DrtclDtVMeDGCgB3van+hEf9xTAVXur7Q==", + "requires": { + "eventemitter3": "4.0.4", + "web3-core-helpers": "1.10.3", + "websocket": "^1.0.32" + } + }, + "web3-rpc-methods": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/web3-rpc-methods/-/web3-rpc-methods-1.1.4.tgz", + "integrity": "sha512-LTFNg4LFaeU8K9ecuT8fHDp/LOXyxCneeZjCrRYIW1u82Ly52SrY55FIzMIISGoG/iT5Wh7UiHOB3CQsWLBmbQ==", + "requires": { + "web3-core": "^4.3.2", + "web3-types": "^1.3.1", + "web3-validator": "^2.0.3" }, "dependencies": { - "@ethereumjs/common": { - "version": "2.6.5", - "resolved": "https://registry.npmjs.org/@ethereumjs/common/-/common-2.6.5.tgz", - "integrity": "sha512-lRyVQOeCDaIVtgfbowla32pzeDv2Obr8oR8Put5RdUBNRGr1VGPGQNGP6elWIpgK3YdpzqTOh4GyUGOureVeeA==", - "requires": { - "crc-32": "^1.2.0", - "ethereumjs-util": "^7.1.5" - }, - "dependencies": { - "ethereumjs-util": { - "version": "7.1.5", - "resolved": "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-7.1.5.tgz", - "integrity": "sha512-SDl5kKrQAudFBUe5OJM9Ac6WmMyYmXX/6sTmLZ3ffG2eY6ZIGBes3pEDxNN6V72WyOw4CPD5RomKdsa8DAAwLg==", - "requires": { - "@types/bn.js": "^5.1.0", - "bn.js": "^5.1.2", - "create-hash": "^1.1.2", - "ethereum-cryptography": "^0.1.3", - "rlp": "^2.2.4" - } - } - } + "@ethereumjs/rlp": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@ethereumjs/rlp/-/rlp-4.0.1.tgz", + "integrity": "sha512-tqsQiBQDQdmPWE1xkkBq4rlSW5QZpLOUJ5RJh2/9fug+q9tnUhuZoVLk7s0scUIKTOzEtR72DFBXI4WiZcMpvw==" }, - "@ethereumjs/tx": { - "version": "3.5.2", - "resolved": "https://registry.npmjs.org/@ethereumjs/tx/-/tx-3.5.2.tgz", - "integrity": "sha512-gQDNJWKrSDGu2w7w0PzVXVBNMzb7wwdDOmOqczmhNjqFxFuIbhVJDwiGEnxFNC2/b8ifcZzY7MLcluizohRzNw==", + "web3-core": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/web3-core/-/web3-core-4.3.2.tgz", + "integrity": "sha512-uIMVd/j4BgOnwfpY8ZT+QKubOyM4xohEhFZXz9xB8wimXWMMlYVlIK/TbfHqFolS9uOerdSGhsMbcK9lETae8g==", "requires": { - "@ethereumjs/common": "^2.6.4", - "ethereumjs-util": "^7.1.5" - }, - "dependencies": { - "ethereumjs-util": { - "version": "7.1.5", - "resolved": "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-7.1.5.tgz", - "integrity": "sha512-SDl5kKrQAudFBUe5OJM9Ac6WmMyYmXX/6sTmLZ3ffG2eY6ZIGBes3pEDxNN6V72WyOw4CPD5RomKdsa8DAAwLg==", - "requires": { - "@types/bn.js": "^5.1.0", - "bn.js": "^5.1.2", - "create-hash": "^1.1.2", - "ethereum-cryptography": "^0.1.3", - "rlp": "^2.2.4" - } - } + "web3-errors": "^1.1.4", + "web3-eth-accounts": "^4.1.0", + "web3-eth-iban": "^4.0.7", + "web3-providers-http": "^4.1.0", + "web3-providers-ipc": "^4.0.7", + "web3-providers-ws": "^4.0.7", + "web3-types": "^1.3.1", + "web3-utils": "^4.1.0", + "web3-validator": "^2.0.3" } }, - "async": { - "version": "2.6.4", - "resolved": "https://registry.npmjs.org/async/-/async-2.6.4.tgz", - "integrity": "sha512-mzo5dfJYwAn29PeiJ0zvwTo04zj8HDJj0Mn8TD7sno7q12prdbnasKJHhkm2c1LgrhlJ0teaea8860oxi51mGA==", + "web3-eth-accounts": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/web3-eth-accounts/-/web3-eth-accounts-4.1.0.tgz", + "integrity": "sha512-UFtAsOANsvihTQ6SSvOKguupmQkResyR9M9JNuOxYpKh7+3W+sTnbLXw2UbOSYIsKlc1mpqqW9bVr1SjqHDpUQ==", "requires": { - "lodash": "^4.17.14" + "@ethereumjs/rlp": "^4.0.1", + "crc-32": "^1.2.2", + "ethereum-cryptography": "^2.0.0", + "web3-errors": "^1.1.3", + "web3-types": "^1.3.0", + "web3-utils": "^4.0.7", + "web3-validator": "^2.0.3" } }, - "cross-fetch": { - "version": "2.2.6", - "resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-2.2.6.tgz", - "integrity": "sha512-9JZz+vXCmfKUZ68zAptS7k4Nu8e2qcibe7WVZYps7sAgk5R8GYTc+T1WR0v1rlP9HxgARmOX1UTIJZFytajpNA==", + "web3-eth-iban": { + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/web3-eth-iban/-/web3-eth-iban-4.0.7.tgz", + "integrity": "sha512-8weKLa9KuKRzibC87vNLdkinpUE30gn0IGY027F8doeJdcPUfsa4IlBgNC4k4HLBembBB2CTU0Kr/HAOqMeYVQ==", "requires": { - "node-fetch": "^2.6.7", - "whatwg-fetch": "^2.0.4" + "web3-errors": "^1.1.3", + "web3-types": "^1.3.0", + "web3-utils": "^4.0.7", + "web3-validator": "^2.0.3" } }, - "ethereum-cryptography": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-0.1.3.tgz", - "integrity": "sha512-w8/4x1SGGzc+tO97TASLja6SLd3fRIK2tLVcV2Gx4IB21hE19atll5Cq9o3d0ZmAYC/8aw0ipieTSiekAea4SQ==", + "web3-providers-http": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/web3-providers-http/-/web3-providers-http-4.1.0.tgz", + "integrity": "sha512-6qRUGAhJfVQM41E5t+re5IHYmb5hSaLc02BE2MaRQsz2xKA6RjmHpOA5h/+ojJxEpI9NI2CrfDKOAgtJfoUJQg==", "requires": { - "@types/pbkdf2": "^3.0.0", - "@types/secp256k1": "^4.0.1", - "blakejs": "^1.1.0", - "browserify-aes": "^1.2.0", - "bs58check": "^2.1.2", - "create-hash": "^1.2.0", - "create-hmac": "^1.1.7", - "hash.js": "^1.1.7", - "keccak": "^3.0.0", - "pbkdf2": "^3.0.17", - "randombytes": "^2.1.0", - "safe-buffer": "^5.1.2", - "scrypt-js": "^3.0.0", - "secp256k1": "^4.0.1", - "setimmediate": "^1.0.5" + "cross-fetch": "^4.0.0", + "web3-errors": "^1.1.3", + "web3-types": "^1.3.0", + "web3-utils": "^4.0.7" } }, - "ethereumjs-util": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-5.2.1.tgz", - "integrity": "sha512-v3kT+7zdyCm1HIqWlLNrHGqHGLpGYIhjeHxQjnDXjLT2FyGJDsd3LWMYUo7pAFRrk86CR3nUJfhC81CCoJNNGQ==", + "web3-providers-ipc": { + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/web3-providers-ipc/-/web3-providers-ipc-4.0.7.tgz", + "integrity": "sha512-YbNqY4zUvIaK2MHr1lQFE53/8t/ejHtJchrWn9zVbFMGXlTsOAbNoIoZWROrg1v+hCBvT2c9z8xt7e/+uz5p1g==", + "optional": true, "requires": { - "bn.js": "^4.11.0", - "create-hash": "^1.1.2", - "elliptic": "^6.5.2", - "ethereum-cryptography": "^0.1.3", - "ethjs-util": "^0.1.3", - "rlp": "^2.0.0", - "safe-buffer": "^5.1.1" - }, - "dependencies": { - "bn.js": { - "version": "4.12.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==" - } + "web3-errors": "^1.1.3", + "web3-types": "^1.3.0", + "web3-utils": "^4.0.7" } }, - "readable-stream": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "web3-providers-ws": { + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/web3-providers-ws/-/web3-providers-ws-4.0.7.tgz", + "integrity": "sha512-n4Dal9/rQWjS7d6LjyEPM2R458V8blRm0eLJupDEJOOIBhGYlxw5/4FthZZ/cqB7y/sLVi7K09DdYx2MeRtU5w==", "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" + "@types/ws": "8.5.3", + "isomorphic-ws": "^5.0.0", + "web3-errors": "^1.1.3", + "web3-types": "^1.3.0", + "web3-utils": "^4.0.7", + "ws": "^8.8.1" } }, - "safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" - }, - "string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "web3-utils": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/web3-utils/-/web3-utils-4.1.0.tgz", + "integrity": "sha512-+VJWR6FtCsgwuJr5tvSvQlSEG06586df8h2CxGc9tcNtIDyJKNkSDDWJkdNPvyDhhXFzQYFh8QOGymD1CIP6fw==", "requires": { - "safe-buffer": "~5.1.0" + "ethereum-cryptography": "^2.0.0", + "web3-errors": "^1.1.4", + "web3-types": "^1.3.1", + "web3-validator": "^2.0.3" } }, "ws": { - "version": "5.2.3", - "resolved": "https://registry.npmjs.org/ws/-/ws-5.2.3.tgz", - "integrity": "sha512-jZArVERrMsKUatIdnLzqvcfydI85dvd/Fp1u/VOpfdDWQ4c9qWXe+VIeAbQ5FrDwciAkr+lzofXLz3Kuf26AOA==", - "requires": { - "async-limiter": "~1.0.0" - } + "version": "8.16.0", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.16.0.tgz", + "integrity": "sha512-HS0c//TP7Ina87TfiPUz1rQzMhHrl/SG2guqRcTOIUYD2q8uhUdNHZYJUaQ8aTGPzCh+c6oawMKW35nFl1dxyQ==", + "requires": {} } } }, - "web3-providers-http": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/web3-providers-http/-/web3-providers-http-1.10.0.tgz", - "integrity": "sha512-eNr965YB8a9mLiNrkjAWNAPXgmQWfpBfkkn7tpEFlghfww0u3I0tktMZiaToJVcL2+Xq+81cxbkpeWJ5XQDwOA==", + "web3-shh": { + "version": "1.10.3", + "resolved": "https://registry.npmjs.org/web3-shh/-/web3-shh-1.10.3.tgz", + "integrity": "sha512-cAZ60CPvs9azdwMSQ/PSUdyV4PEtaW5edAZhu3rCXf6XxQRliBboic+AvwUvB6j3eswY50VGa5FygfVmJ1JVng==", "requires": { - "abortcontroller-polyfill": "^1.7.3", - "cross-fetch": "^3.1.4", - "es6-promise": "^4.2.8", - "web3-core-helpers": "1.10.0" - }, - "dependencies": { - "web3-core-helpers": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/web3-core-helpers/-/web3-core-helpers-1.10.0.tgz", - "integrity": "sha512-pIxAzFDS5vnbXvfvLSpaA1tfRykAe9adw43YCKsEYQwH0gCLL0kMLkaCX3q+Q8EVmAh+e1jWL/nl9U0de1+++g==", - "requires": { - "web3-eth-iban": "1.10.0", - "web3-utils": "1.10.0" - } - }, - "web3-eth-iban": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/web3-eth-iban/-/web3-eth-iban-1.10.0.tgz", - "integrity": "sha512-0l+SP3IGhInw7Q20LY3IVafYEuufo4Dn75jAHT7c2aDJsIolvf2Lc6ugHkBajlwUneGfbRQs/ccYPQ9JeMUbrg==", - "requires": { - "bn.js": "^5.2.1", - "web3-utils": "1.10.0" - } - } + "web3-core": "1.10.3", + "web3-core-method": "1.10.3", + "web3-core-subscriptions": "1.10.3", + "web3-net": "1.10.3" } }, - "web3-providers-ipc": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/web3-providers-ipc/-/web3-providers-ipc-1.10.0.tgz", - "integrity": "sha512-OfXG1aWN8L1OUqppshzq8YISkWrYHaATW9H8eh0p89TlWMc1KZOL9vttBuaBEi96D/n0eYDn2trzt22bqHWfXA==", - "requires": { - "oboe": "2.1.5", - "web3-core-helpers": "1.10.0" - }, - "dependencies": { - "web3-core-helpers": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/web3-core-helpers/-/web3-core-helpers-1.10.0.tgz", - "integrity": "sha512-pIxAzFDS5vnbXvfvLSpaA1tfRykAe9adw43YCKsEYQwH0gCLL0kMLkaCX3q+Q8EVmAh+e1jWL/nl9U0de1+++g==", - "requires": { - "web3-eth-iban": "1.10.0", - "web3-utils": "1.10.0" - } - }, - "web3-eth-iban": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/web3-eth-iban/-/web3-eth-iban-1.10.0.tgz", - "integrity": "sha512-0l+SP3IGhInw7Q20LY3IVafYEuufo4Dn75jAHT7c2aDJsIolvf2Lc6ugHkBajlwUneGfbRQs/ccYPQ9JeMUbrg==", - "requires": { - "bn.js": "^5.2.1", - "web3-utils": "1.10.0" - } - } - } + "web3-types": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/web3-types/-/web3-types-1.3.1.tgz", + "integrity": "sha512-8fXi7h/t95VKRtgU4sxprLPZpsTh3jYDfSghshIDBgUD/OoGe5S+syP24SUzBZYllZ/L+hMr2gdp/0bGJa8pYQ==" }, - "web3-providers-ws": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/web3-providers-ws/-/web3-providers-ws-1.10.0.tgz", - "integrity": "sha512-sK0fNcglW36yD5xjnjtSGBnEtf59cbw4vZzJ+CmOWIKGIR96mP5l684g0WD0Eo+f4NQc2anWWXG74lRc9OVMCQ==", + "web3-utils": { + "version": "1.10.3", + "resolved": "https://registry.npmjs.org/web3-utils/-/web3-utils-1.10.3.tgz", + "integrity": "sha512-OqcUrEE16fDBbGoQtZXWdavsPzbGIDc5v3VrRTZ0XrIpefC/viZ1ZU9bGEemazyS0catk/3rkOOxpzTfY+XsyQ==", "requires": { - "eventemitter3": "4.0.4", - "web3-core-helpers": "1.10.0", - "websocket": "^1.0.32" + "@ethereumjs/util": "^8.1.0", + "bn.js": "^5.2.1", + "ethereum-bloom-filters": "^1.0.6", + "ethereum-cryptography": "^2.1.2", + "ethjs-unit": "0.1.6", + "number-to-bn": "1.7.0", + "randombytes": "^2.1.0", + "utf8": "3.0.0" }, "dependencies": { - "eventemitter3": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.4.tgz", - "integrity": "sha512-rlaVLnVxtxvoyLsQQFBx53YmXHDxRIzzTLbdfxqi4yocpSjAxXwkU0cScM5JgSKMqEhrZpnvQ2D9gjylR0AimQ==" - }, - "web3-core-helpers": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/web3-core-helpers/-/web3-core-helpers-1.10.0.tgz", - "integrity": "sha512-pIxAzFDS5vnbXvfvLSpaA1tfRykAe9adw43YCKsEYQwH0gCLL0kMLkaCX3q+Q8EVmAh+e1jWL/nl9U0de1+++g==", - "requires": { - "web3-eth-iban": "1.10.0", - "web3-utils": "1.10.0" - } + "@ethereumjs/rlp": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@ethereumjs/rlp/-/rlp-4.0.1.tgz", + "integrity": "sha512-tqsQiBQDQdmPWE1xkkBq4rlSW5QZpLOUJ5RJh2/9fug+q9tnUhuZoVLk7s0scUIKTOzEtR72DFBXI4WiZcMpvw==" }, - "web3-eth-iban": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/web3-eth-iban/-/web3-eth-iban-1.10.0.tgz", - "integrity": "sha512-0l+SP3IGhInw7Q20LY3IVafYEuufo4Dn75jAHT7c2aDJsIolvf2Lc6ugHkBajlwUneGfbRQs/ccYPQ9JeMUbrg==", + "@ethereumjs/util": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/@ethereumjs/util/-/util-8.1.0.tgz", + "integrity": "sha512-zQ0IqbdX8FZ9aw11vP+dZkKDkS+kgIvQPHnSAXzP9pLu+Rfu3D3XEeLbicvoXJTYnhZiPmsZUxgdzXwNKxRPbA==", "requires": { - "bn.js": "^5.2.1", - "web3-utils": "1.10.0" + "@ethereumjs/rlp": "^4.0.1", + "ethereum-cryptography": "^2.0.0", + "micro-ftch": "^0.3.1" } } } }, - "web3-shh": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/web3-shh/-/web3-shh-1.10.0.tgz", - "integrity": "sha512-uNUUuNsO2AjX41GJARV9zJibs11eq6HtOe6Wr0FtRUcj8SN6nHeYIzwstAvJ4fXA53gRqFMTxdntHEt9aXVjpg==", - "requires": { - "web3-core": "1.10.0", - "web3-core-method": "1.10.0", - "web3-core-subscriptions": "1.10.0", - "web3-net": "1.10.0" - } - }, - "web3-utils": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/web3-utils/-/web3-utils-1.10.0.tgz", - "integrity": "sha512-kSaCM0uMcZTNUSmn5vMEhlo02RObGNRRCkdX0V9UTAU0+lrvn0HSaudyCo6CQzuXUsnuY2ERJGCGPfeWmv19Rg==", + "web3-validator": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/web3-validator/-/web3-validator-2.0.3.tgz", + "integrity": "sha512-fJbAQh+9LSNWy+l5Ze6HABreml8fra98o5+vS073T35jUcLbRZ0IOjF/ZPJhJNbJDt+jP1vseZsc3z3uX9mxxQ==", "requires": { - "bn.js": "^5.2.1", - "ethereum-bloom-filters": "^1.0.6", - "ethereumjs-util": "^7.1.0", - "ethjs-unit": "0.1.6", - "number-to-bn": "1.7.0", - "randombytes": "^2.1.0", - "utf8": "3.0.0" + "ethereum-cryptography": "^2.0.0", + "util": "^0.12.5", + "web3-errors": "^1.1.3", + "web3-types": "^1.3.0", + "zod": "^3.21.4" } }, "webidl-conversions": { @@ -63269,17 +28457,6 @@ } } }, - "whatwg-fetch": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/whatwg-fetch/-/whatwg-fetch-2.0.4.tgz", - "integrity": "sha512-dcQ1GWpOD/eEQ97k66aiEVpNnapVj90/+R+SXTPYGHpYBBypfKJEQjLrvMZ7YXbKm21gXd4NcuxUTjiv1YtLng==" - }, - "whatwg-mimetype": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-3.0.0.tgz", - "integrity": "sha512-nt+N2dzIutVRxARx1nghPKGv1xHikU7HKdfafKkLNLindmPU/ch3U31NOCGGA/dmPcmb1VlofO0vnKAcsm0o/Q==", - "optional": true - }, "whatwg-url": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", @@ -63290,9 +28467,10 @@ } }, "which": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", - "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "peer": true, "requires": { "isexe": "^2.0.0" } @@ -63301,6 +28479,7 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz", "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==", + "dev": true, "requires": { "is-bigint": "^1.0.1", "is-boolean-object": "^1.1.0", @@ -63314,17 +28493,31 @@ "resolved": "https://registry.npmjs.org/which-module/-/which-module-1.0.0.tgz", "integrity": "sha512-F6+WgncZi/mJDrammbTuHe1q0R5hOXv/mBaiNA2TCNT/LTHusX0V+CJnj9XT8ki5ln2UZyyddDgHfCzyrOH7MQ==" }, + "which-pm-runs": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/which-pm-runs/-/which-pm-runs-1.1.0.tgz", + "integrity": "sha512-n1brCuqClxfFfq/Rb0ICg9giSZqCS+pLtccdag6C2HyufBrh3fBOiy9nb6ggRMvWOVH5GrdJskj5iGTZNxd7SA==", + "optional": true + }, "which-typed-array": { - "version": "1.1.8", - "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.8.tgz", - "integrity": "sha512-Jn4e5PItbcAHyLoRDwvPj1ypu27DJbtdYXUa5zsinrUx77Uvfb0cXwwnGMTn7cjUfhhqgVQnVJCwF+7cgU7tpw==", + "version": "1.1.13", + "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.13.tgz", + "integrity": "sha512-P5Nra0qjSncduVPEAr7xhoF5guty49ArDTwzJ/yNuPIbZppyRxFQsRCWrocxIY+CnMVG+qfbU2FmDKyvSGClow==", "requires": { "available-typed-arrays": "^1.0.5", - "call-bind": "^1.0.2", - "es-abstract": "^1.20.0", + "call-bind": "^1.0.4", "for-each": "^0.3.3", - "has-tostringtag": "^1.0.0", - "is-typed-array": "^1.1.9" + "gopd": "^1.0.1", + "has-tostringtag": "^1.0.0" + } + }, + "wide-align": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.5.tgz", + "integrity": "sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg==", + "optional": true, + "requires": { + "string-width": "^1.0.2 || 2 || 3 || 4" } }, "window-size": { @@ -63332,33 +28525,67 @@ "resolved": "https://registry.npmjs.org/window-size/-/window-size-0.2.0.tgz", "integrity": "sha512-UD7d8HFA2+PZsbKyaOCEy8gMh1oDtHgJh1LfgjQ4zVXmYjAT/kvz3PueITKuqDiIXQe7yzpPnxX3lNc+AhQMyw==" }, - "wordwrapjs": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/wordwrapjs/-/wordwrapjs-4.0.1.tgz", - "integrity": "sha512-kKlNACbvHrkpIw6oPeYDSmdCTu2hdMHoyXLTcUKala++lx5Y+wjJ/e474Jqv5abnVmwxw08DiTuHmw69lJGksA==", - "dev": true, - "requires": { - "reduce-flatten": "^2.0.0", - "typical": "^5.2.0" - }, - "dependencies": { - "typical": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/typical/-/typical-5.2.0.tgz", - "integrity": "sha512-dvdQgNDNJo+8B2uBQoqdb11eUCE1JQXhvjC/CZtgvZseVd5TYMXnq0+vuUemXbd/Se29cTaUuPX3YIc2xgbvIg==", - "dev": true - } - } - }, "workerpool": { "version": "6.2.1", "resolved": "https://registry.npmjs.org/workerpool/-/workerpool-6.2.1.tgz", "integrity": "sha512-ILEIE97kDZvF9Wb9f6h5aXK4swSlKGUcOEGiIYb2OOu/IrDU9iwj0fD//SsA6E5ibwJxpEvhullJY4Sl4GcpAw==" }, "wrap-ansi": { - "version": "7.0.0", + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", + "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", + "peer": true, + "requires": { + "ansi-styles": "^6.1.0", + "string-width": "^5.0.1", + "strip-ansi": "^7.0.1" + }, + "dependencies": { + "ansi-regex": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", + "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", + "peer": true + }, + "ansi-styles": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", + "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", + "peer": true + }, + "emoji-regex": { + "version": "9.2.2", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", + "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", + "peer": true + }, + "string-width": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", + "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", + "peer": true, + "requires": { + "eastasianwidth": "^0.2.0", + "emoji-regex": "^9.2.2", + "strip-ansi": "^7.0.1" + } + }, + "strip-ansi": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", + "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", + "peer": true, + "requires": { + "ansi-regex": "^6.0.1" + } + } + } + }, + "wrap-ansi-cjs": { + "version": "npm:wrap-ansi@7.0.0", "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "peer": true, "requires": { "ansi-styles": "^4.0.0", "string-width": "^4.1.0", @@ -63368,12 +28595,14 @@ "ansi-regex": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==" + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "peer": true }, "strip-ansi": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "peer": true, "requires": { "ansi-regex": "^5.0.1" } @@ -63385,27 +28614,10 @@ "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==" }, - "write-stream": { - "version": "0.4.3", - "resolved": "https://registry.npmjs.org/write-stream/-/write-stream-0.4.3.tgz", - "integrity": "sha512-IJrvkhbAnj89W/GAVdVgbnPiVw5Ntg/B4tc/MUCIEwj/g6JIww1DWJyB/yBMT3yw2/TkT6IUZ0+IYef3flEw8A==", - "optional": true, - "requires": { - "readable-stream": "~0.0.2" - }, - "dependencies": { - "readable-stream": { - "version": "0.0.4", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-0.0.4.tgz", - "integrity": "sha512-azrivNydKRYt7zwLV5wWUK7YzKTWs3q87xSmY6DlHapPrCvaT6ZrukvM5erV+yCSSPmZT8zkSdttOHQpWWm9zw==", - "optional": true - } - } - }, "ws": { - "version": "8.14.1", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.14.1.tgz", - "integrity": "sha512-4OOseMUq8AzRBI/7SLMUwO+FEDnguetSk7KMb1sHwvF2w2Wv5Hoj0nlifx8vtGsftE/jWHojPy8sMMzYLJ2G/A==", + "version": "8.5.0", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.5.0.tgz", + "integrity": "sha512-BWX0SWVgLPzYwF8lTzEy1egjhS4S4OEAHfsO8o65WOVsrnSRGaSiUaa9e0ggGlkMTtBlmOpEXiie9RUcBO86qg==", "requires": {} }, "xhr": { @@ -63466,29 +28678,11 @@ "xhr-request": "^1.1.0" } }, - "xhr2-cookies": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/xhr2-cookies/-/xhr2-cookies-1.1.0.tgz", - "integrity": "sha512-hjXUA6q+jl/bd8ADHcVfFsSPIf+tyLIjuO9TwJC9WI6JP2zKcS7C+p56I9kCLLsaCiNT035iYvEUUzdEFj/8+g==", - "requires": { - "cookiejar": "^2.1.1" - } - }, "xmlhttprequest": { "version": "1.8.0", "resolved": "https://registry.npmjs.org/xmlhttprequest/-/xmlhttprequest-1.8.0.tgz", "integrity": "sha512-58Im/U0mlVBLM38NdZjHyhuMtCqa61469k2YP/AaPbvCoV9aQGUpbJBj1QRm2ytRiVQBD/fsw7L2bJGDVQswBA==" }, - "xss": { - "version": "1.0.14", - "resolved": "https://registry.npmjs.org/xss/-/xss-1.0.14.tgz", - "integrity": "sha512-og7TEJhXvn1a7kzZGQ7ETjdQVS2UfZyTlsEdDOqvQF7GoxNfY+0YLCzBy1kPdsDDx4QuNAonQPddpsn6Xl/7sw==", - "optional": true, - "requires": { - "commander": "^2.20.3", - "cssfilter": "0.0.10" - } - }, "xtend": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", @@ -63555,28 +28749,21 @@ "version": "2.10.0", "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.10.0.tgz", "integrity": "sha512-p4a9I6X6nu6IhoGmBqAcbJy1mlC4j27vEPZX9F4L4/vZT3Lyq1VkFHw/V/PUcB9Buo+DG3iHkT0x3Qya58zc3g==", + "optional": true, "requires": { "buffer-crc32": "~0.2.3", "fd-slicer": "~1.1.0" } }, - "yn": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz", - "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==", - "optional": true, - "peer": true - }, "yocto-queue": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==" }, - "zksync-web3": { - "version": "0.14.3", - "resolved": "https://registry.npmjs.org/zksync-web3/-/zksync-web3-0.14.3.tgz", - "integrity": "sha512-hT72th4AnqyLW1d5Jlv8N2B/qhEnl2NePK2A3org7tAa24niem/UAaHMkEvmWI3SF9waYUPtqAtjpf+yvQ9zvQ==", - "requires": {} + "zod": { + "version": "3.22.4", + "resolved": "https://registry.npmjs.org/zod/-/zod-3.22.4.tgz", + "integrity": "sha512-iC+8Io04lddc+mVqQ9AZ7OQ2MrUKGN+oIQyq1vemgt46jwCwLfhq7/pwnBnNXXXZb8VTVLKwp9EDkx+ryxIWmg==" } } } diff --git a/package.json b/package.json index f3fdde85..e515ce95 100644 --- a/package.json +++ b/package.json @@ -16,86 +16,61 @@ "author": "Frax Finance Team (https://github.com/orgs/FraxFinance)", "license": "ISC", "dependencies": { - "@arbitrum/nitro-contracts": "^1.0.2", - "@chainlink/contracts": "0.6.1", - "@eth-optimism/contracts-bedrock": "^0.16.0", - "@ethereumjs/common": "^3.1.2", - "@ethereumjs/tx": "^4.1.2", + "@arbitrum/nitro-contracts": "^1.1.0", + "@chainlink/contracts": "0.8.0", + "@eth-optimism/contracts-bedrock": "^0.16.2", + "@ethereumjs/common": "^4.1.0", + "@ethereumjs/tx": "^5.1.0", "@ethersproject/hardware-wallets": "^5.7.0", - "@flashbots/ethers-provider-bundle": "^0.6.1", - "@maticnetwork/maticjs": "^3.6.6", + "@maticnetwork/maticjs": "^3.7.7", "@maticnetwork/maticjs-ethers": "^1.0.3", "@maticnetwork/maticjs-web3": "^1.0.4", - "@matterlabs/hardhat-zksync-chai-matchers": "^0.1.2", - "@matterlabs/hardhat-zksync-deploy": "^0.6.3", - "@matterlabs/hardhat-zksync-solc": "^0.3.16", - "@openzeppelin/contracts": "^4.9.3", - "@openzeppelin/hardhat-upgrades": "^1.26.0", + "@nomiclabs/hardhat-truffle5": "^2.0.7", + "@openzeppelin/contracts": "^5.0.1", "@poanet/solidity-flattener": "^3.0.9", - "@solana/spl-token": "^0.3.7", - "@solana/web3.js": "^1.78.4", - "@truffle/hdwallet-provider": "^2.1.15", - "@types/express": "^4.17.17", - "@types/node": "^18.11.18", + "@types/express": "^4.17.21", + "@types/node": "^20.10.8", "@types/web3": "^1.2.2", - "@uniswap/sdk-core": "^3.1.0", + "@uniswap/sdk-core": "^4.0.10", "@uniswap/v2-periphery": "^1.1.0-beta.0", "@uniswap/v3-core": "^1.0.1", - "@uniswap/v3-periphery": "^1.4.3", + "@uniswap/v3-periphery": "^1.4.4", "@uniswap/v3-sdk": "^3.10.0", "bignumber.js": "^9.1.2", - "bnc-sdk": "^4.6.7", "chalk": "^4.1.2", - "cross-fetch": "^3.1.6", - "data-fns": "^1.1.0", + "cross-fetch": "^4.0.0", "dotenv": "^16.3.1", "esm": "^3.2.25", "ethereumjs-tx": "^2.1.2", - "flashbots": "^1.0.0", - "fs-extra": "^11.1.1", - "ganache-core": "^2.13.2", + "fs-extra": "^11.2.0", "hardhat-contract-sizer": "^2.10.0", "hardhat-gas-reporter": "^1.0.9", - "hardhat-spdx-license-identifier": "^2.1.0", - "hardhat-tracer": "^2.6.0", + "hardhat-spdx-license-identifier": "^2.2.0", + "hardhat-tracer": "^2.7.0", "https": "^1.0.0", - "mathjs": "^11.11.0", - "nodemon": "^2.0.22", + "mathjs": "^12.2.1", "path": "^0.12.7", "prb-math": "^2.4.3", - "require-from-string": "^2.0.2", - "sol-merger": "^4.4.0", - "solc": "0.8.21", + "solc": "0.8.23", "to-hex": "0.0.18", "toml": "^3.0.0", - "truffle": "^5.11.4", - "truffle-contract-size": "^2.0.1", - "truffle-flattener": "^1.6.0", - "truffle-hdwallet-provider": "^1.0.6", "tslib": "^2.6.2", - "typescript": "^5.2.2", + "typescript": "^5.3.3", "util": "^0.12.5", - "web3-eth-contract": "^1.10.0", - "web3-utils": "^1.10.0", - "ws": "^8.14.1", - "zksync-web3": "^0.14.3" + "web3-eth-contract": "^4.1.4" }, "devDependencies": { - "@nomiclabs/hardhat-ethers": "^2.2.3", + "@nomicfoundation/hardhat-ethers": "^3.0.5", "@nomiclabs/hardhat-etherscan": "^3.1.7", - "@nomiclabs/hardhat-truffle5": "^2.0.7", - "@nomiclabs/hardhat-vyper": "^3.0.4", - "@nomiclabs/hardhat-waffle": "^2.0.6", + "@nomiclabs/hardhat-vyper": "^3.0.5", "@nomiclabs/hardhat-web3": "^2.0.0", - "@openzeppelin/hardhat-upgrades": "^1.26.0", + "@openzeppelin/hardhat-upgrades": "^3.0.2", "@openzeppelin/test-helpers": "^0.5.16", "chai": "^4.3.8", "chai-almost": "^1.0.1", - "ethereum-waffle": "^4.0.10", - "ethers": "^5.7.2", - "hardhat": "^2.17.3", - "hardhat-deploy": "^0.11.37", - "json-loader": "^0.5.7", - "web3": "^1.10.0" + "ethers": "^6.9.2", + "hardhat": "^2.19.4", + "hardhat-deploy": "^0.11.45", + "json-loader": "^0.5.7" } } diff --git a/src/hardhat/contracts/ERC20/ERC20PermissionedMint.sol b/src/hardhat/contracts/ERC20/ERC20PermissionedMint.sol index 86bb6067..88088cfc 100644 --- a/src/hardhat/contracts/ERC20/ERC20PermissionedMint.sol +++ b/src/hardhat/contracts/ERC20/ERC20PermissionedMint.sol @@ -4,7 +4,7 @@ pragma solidity ^0.8.0; import "@openzeppelin/contracts/token/ERC20/ERC20.sol"; import "@openzeppelin/contracts/token/ERC20/IERC20.sol"; import "@openzeppelin/contracts/token/ERC20/extensions/ERC20Burnable.sol"; -import "@openzeppelin/contracts/security/Pausable.sol"; +import "@openzeppelin/contracts/utils/Pausable.sol"; import "@openzeppelin/contracts/access/AccessControl.sol"; import "../Staking/Owned.sol"; diff --git a/src/hardhat/contracts/ERC20/ERC20PermitPermissionedMint.sol b/src/hardhat/contracts/ERC20/ERC20PermitPermissionedMint.sol index 265ddd03..6c83052f 100644 --- a/src/hardhat/contracts/ERC20/ERC20PermitPermissionedMint.sol +++ b/src/hardhat/contracts/ERC20/ERC20PermitPermissionedMint.sol @@ -3,7 +3,7 @@ pragma solidity ^0.8.0; import "@openzeppelin/contracts/token/ERC20/ERC20.sol"; import "@openzeppelin/contracts/token/ERC20/IERC20.sol"; -import "@openzeppelin/contracts/token/ERC20/extensions/draft-ERC20Permit.sol"; +import "@openzeppelin/contracts/token/ERC20/extensions/ERC20Permit.sol"; import "@openzeppelin/contracts/token/ERC20/extensions/ERC20Burnable.sol"; import "../Staking/Owned.sol"; diff --git a/src/hardhat/contracts/ERC20/ERC20PermitPermissionedOptiMintable.sol b/src/hardhat/contracts/ERC20/ERC20PermitPermissionedOptiMintable.sol index a2b70f71..954eb946 100644 --- a/src/hardhat/contracts/ERC20/ERC20PermitPermissionedOptiMintable.sol +++ b/src/hardhat/contracts/ERC20/ERC20PermitPermissionedOptiMintable.sol @@ -6,15 +6,15 @@ import "@openzeppelin/contracts/token/ERC20/IERC20.sol"; import "@openzeppelin/contracts/token/ERC20/extensions/ERC20Permit.sol"; import "@openzeppelin/contracts/token/ERC20/extensions/ERC20Burnable.sol"; import { IERC165 } from "@openzeppelin/contracts/utils/introspection/IERC165.sol"; -import { ILegacyMintableERC20, IOptimismMintableERC20 } from "@eth-optimism/contracts-bedrock/contracts/universal/IOptimismMintableERC20.sol"; -import { Semver } from "@eth-optimism/contracts-bedrock/contracts/universal/Semver.sol"; +import { ILegacyMintableERC20, IOptimismMintableERC20 } from "./IOptimismMintableERC20.sol"; +import { ISemver } from "./ISemver.sol"; import "../Staking/OwnedV2.sol"; /// @title Parent contract for frxETH.sol, but also CrossChainCanonicalV2 /** @notice Combines Openzeppelin's ERC20Permit and ERC20Burnable with Synthetix's Owned and Optimism's OptimismMintableERC20. Also includes a list of authorized minters */ /// @dev ERC20PermitPermissionedOptiMintable adheres to EIP-712/EIP-2612 and can use permits -contract ERC20PermitPermissionedOptiMintable is ERC20Permit, ERC20Burnable, OwnedV2, IOptimismMintableERC20, ILegacyMintableERC20, Semver { +contract ERC20PermitPermissionedOptiMintable is ERC20Permit, ERC20Burnable, OwnedV2, IOptimismMintableERC20, ILegacyMintableERC20, ISemver { /// @notice The timelock address address public timelock_address; @@ -24,6 +24,9 @@ contract ERC20PermitPermissionedOptiMintable is ERC20Permit, ERC20Burnable, Owne /// @notice Address of the corresponding version of this token on the remote chain. address public immutable REMOTE_TOKEN; + + /// @notice Version + string public constant version = "1.0.0"; /// @notice Array of the non-bridge minters address[] public minters_array; @@ -52,7 +55,6 @@ contract ERC20PermitPermissionedOptiMintable is ERC20Permit, ERC20Burnable, Owne ERC20(_name, _symbol) ERC20Permit(_name) OwnedV2(_creator_address) - Semver(1, 0, 0) { REMOTE_TOKEN = _remoteToken; BRIDGE = _bridge; diff --git a/src/hardhat/contracts/ERC20/IOptimismMintableERC20.sol b/src/hardhat/contracts/ERC20/IOptimismMintableERC20.sol new file mode 100644 index 00000000..17314233 --- /dev/null +++ b/src/hardhat/contracts/ERC20/IOptimismMintableERC20.sol @@ -0,0 +1,31 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.0; + +import { IERC165 } from "@openzeppelin/contracts/utils/introspection/IERC165.sol"; + +/// @title IOptimismMintableERC20 +/// @notice This interface is available on the OptimismMintableERC20 contract. +/// We declare it as a separate interface so that it can be used in +/// custom implementations of OptimismMintableERC20. +interface IOptimismMintableERC20 is IERC165 { + function remoteToken() external view returns (address); + + function bridge() external returns (address); + + function mint(address _to, uint256 _amount) external; + + function burn(address _from, uint256 _amount) external; +} + +/// @custom:legacy +/// @title ILegacyMintableERC20 +/// @notice This interface was available on the legacy L2StandardERC20 contract. +/// It remains available on the OptimismMintableERC20 contract for +/// backwards compatibility. +interface ILegacyMintableERC20 is IERC165 { + function l1Token() external view returns (address); + + function mint(address _to, uint256 _amount) external; + + function burn(address _from, uint256 _amount) external; +} \ No newline at end of file diff --git a/src/hardhat/contracts/ERC20/ISemver.sol b/src/hardhat/contracts/ERC20/ISemver.sol new file mode 100644 index 00000000..ae9569a0 --- /dev/null +++ b/src/hardhat/contracts/ERC20/ISemver.sol @@ -0,0 +1,13 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.0; + +/// @title ISemver +/// @notice ISemver is a simple contract for ensuring that contracts are +/// versioned using semantic versioning. +interface ISemver { + /// @notice Getter for the semantic version of the contract. This is not + /// meant to be used onchain but instead meant to be used by offchain + /// tooling. + /// @return Semver contract version as a string. + function version() external view returns (string memory); +} \ No newline at end of file diff --git a/src/hardhat/contracts/ERC20/IsDAI.sol b/src/hardhat/contracts/ERC20/IsDAI.sol new file mode 100644 index 00000000..de18a43d --- /dev/null +++ b/src/hardhat/contracts/ERC20/IsDAI.sol @@ -0,0 +1,43 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.0; + +interface IsDAI { + function DOMAIN_SEPARATOR ( ) external view returns ( bytes32 ); + function PERMIT_TYPEHASH ( ) external view returns ( bytes32 ); + function allowance ( address, address ) external view returns ( uint256 ); + function approve ( address spender, uint256 value ) external returns ( bool ); + function asset ( ) external view returns ( address ); + function balanceOf ( address ) external view returns ( uint256 ); + function convertToAssets ( uint256 shares ) external view returns ( uint256 ); + function convertToShares ( uint256 assets ) external view returns ( uint256 ); + function dai ( ) external view returns ( address ); + function daiJoin ( ) external view returns ( address ); + function decimals ( ) external view returns ( uint8 ); + function decreaseAllowance ( address spender, uint256 subtractedValue ) external returns ( bool ); + function deploymentChainId ( ) external view returns ( uint256 ); + function deposit ( uint256 assets, address receiver ) external returns ( uint256 shares ); + function increaseAllowance ( address spender, uint256 addedValue ) external returns ( bool ); + function maxDeposit ( address ) external pure returns ( uint256 ); + function maxMint ( address ) external pure returns ( uint256 ); + function maxRedeem ( address owner ) external view returns ( uint256 ); + function maxWithdraw ( address owner ) external view returns ( uint256 ); + function mint ( uint256 shares, address receiver ) external returns ( uint256 assets ); + function name ( ) external view returns ( string memory ); + function nonces ( address ) external view returns ( uint256 ); + function permit ( address owner, address spender, uint256 value, uint256 deadline, bytes memory signature ) external; + function permit ( address owner, address spender, uint256 value, uint256 deadline, uint8 v, bytes32 r, bytes32 s ) external; + function pot ( ) external view returns ( address ); + function previewDeposit ( uint256 assets ) external view returns ( uint256 ); + function previewMint ( uint256 shares ) external view returns ( uint256 ); + function previewRedeem ( uint256 shares ) external view returns ( uint256 ); + function previewWithdraw ( uint256 assets ) external view returns ( uint256 ); + function redeem ( uint256 shares, address receiver, address owner ) external returns ( uint256 assets ); + function symbol ( ) external view returns ( string memory ); + function totalAssets ( ) external view returns ( uint256 ); + function totalSupply ( ) external view returns ( uint256 ); + function transfer ( address to, uint256 value ) external returns ( bool ); + function transferFrom ( address from, address to, uint256 value ) external returns ( bool ); + function vat ( ) external view returns ( address ); + function version ( ) external view returns ( string memory ); + function withdraw ( uint256 assets, address receiver, address owner ) external returns ( uint256 shares ); +} diff --git a/src/hardhat/contracts/ERC20/wfrxETH.sol b/src/hardhat/contracts/ERC20/wfrxETH.sol index e5f4ab6a..399eb5ef 100644 --- a/src/hardhat/contracts/ERC20/wfrxETH.sol +++ b/src/hardhat/contracts/ERC20/wfrxETH.sol @@ -4,7 +4,7 @@ pragma solidity ^0.8.0; import "@openzeppelin/contracts/token/ERC20/extensions/IERC20Permit.sol"; import "@openzeppelin/contracts/utils/cryptography/ECDSA.sol"; import "@openzeppelin/contracts/utils/cryptography/EIP712.sol"; -import "@openzeppelin/contracts/utils/Counters.sol"; +import "./ERC20Permit/Counters.sol"; // ==================================================================== // | ______ _______ | diff --git a/src/hardhat/contracts/FXB/FXB.sol b/src/hardhat/contracts/FXB/FXB.sol index 7907592e..927bf304 100644 --- a/src/hardhat/contracts/FXB/FXB.sol +++ b/src/hardhat/contracts/FXB/FXB.sol @@ -24,8 +24,8 @@ pragma solidity >=0.8.0; import "@openzeppelin/contracts/token/ERC20/ERC20.sol"; import "@openzeppelin/contracts/token/ERC20/extensions/ERC20Burnable.sol"; -import "@openzeppelin/contracts/security/Pausable.sol"; -import "@openzeppelin/contracts/token/ERC20/extensions/draft-ERC20Permit.sol"; +import "@openzeppelin/contracts/utils/Pausable.sol"; +import "@openzeppelin/contracts/token/ERC20/extensions/ERC20Permit.sol"; import "./FXBFactory.sol"; diff --git a/src/hardhat/contracts/FXB/IFXB.sol b/src/hardhat/contracts/FXB/IFXB.sol new file mode 100644 index 00000000..2f7fd544 --- /dev/null +++ b/src/hardhat/contracts/FXB/IFXB.sol @@ -0,0 +1,33 @@ +// SPDX-License-Identifier: GPL-2.0-or-later +pragma solidity >=0.8.0; + +interface IFXB { + struct BondInfo { + string symbol; + string name; + uint256 maturityTimestamp; + } + + function DOMAIN_SEPARATOR ( ) external view returns ( bytes32 ); + function FRAX ( ) external view returns ( address ); + function MATURITY_TIMESTAMP ( ) external view returns ( uint256 ); + function allowance ( address owner, address spender ) external view returns ( uint256 ); + function approve ( address spender, uint256 value ) external returns ( bool ); + function balanceOf ( address account ) external view returns ( uint256 ); + function bondInfo ( ) external view returns ( BondInfo memory ); + function burn ( address to, uint256 value ) external; + function decimals ( ) external view returns ( uint8 ); + function eip712Domain ( ) external view returns ( bytes1 fields, string memory name, string memory version, uint256 chainId, address verifyingContract, bytes32 salt, uint256[] memory extensions ); + function isRedeemable ( ) external view returns ( bool _isRedeemable ); + function mint ( address account, uint256 value ) external; + function name ( ) external view returns ( string memory ); + function nonces ( address owner ) external view returns ( uint256 ); + function permit ( address owner, address spender, uint256 value, uint256 deadline, uint8 v, bytes32 r, bytes32 s ) external; + function symbol ( ) external view returns ( string memory ); + function totalFxbMinted ( ) external view returns ( uint256 ); + function totalFxbRedeemed ( ) external view returns ( uint256 ); + function totalSupply ( ) external view returns ( uint256 ); + function transfer ( address to, uint256 value ) external returns ( bool ); + function transferFrom ( address from, address to, uint256 value ) external returns ( bool ); + function version ( ) external pure returns ( uint256 _major, uint256 _minor, uint256 _patch ); +} diff --git a/src/hardhat/contracts/FraxETH/frxETHMinter.sol.old b/src/hardhat/contracts/FraxETH/frxETHMinter.sol.old index 443f3c4f..f0f3ab4b 100644 --- a/src/hardhat/contracts/FraxETH/frxETHMinter.sol.old +++ b/src/hardhat/contracts/FraxETH/frxETHMinter.sol.old @@ -559,9 +559,9 @@ contract ERC20 is Context, IERC20, IERC20Metadata { ) internal virtual {} } -// OpenZeppelin Contracts (last updated v4.6.0) (token/ERC20/extensions/draft-ERC20Permit.sol) +// OpenZeppelin Contracts (last updated v4.6.0) (token/ERC20/extensions/ERC20Permit.sol) -// OpenZeppelin Contracts v4.4.1 (token/ERC20/extensions/draft-IERC20Permit.sol) +// OpenZeppelin Contracts v4.4.1 (token/ERC20/extensions/IERC20Permit.sol) /** * @dev Interface of the ERC20 Permit extension allowing approvals to be made via signatures, as defined in diff --git a/src/hardhat/contracts/Fraxbonds/FXB.sol b/src/hardhat/contracts/Fraxbonds/FXB.sol index f154aa12..b47a96f4 100644 --- a/src/hardhat/contracts/Fraxbonds/FXB.sol +++ b/src/hardhat/contracts/Fraxbonds/FXB.sol @@ -1,7 +1,7 @@ //SPDX-License-Identifier: Unlicense pragma solidity ^0.8.4; -import "@openzeppelin/contracts/token/ERC20/extensions/draft-ERC20Permit.sol"; +import "@openzeppelin/contracts/token/ERC20/extensions/ERC20Permit.sol"; import "@uniswap/v3-periphery/contracts/libraries/TransferHelper.sol"; contract FXB is ERC20Permit { diff --git a/src/hardhat/contracts/Fraxbonds/FraxFPIBond.sol b/src/hardhat/contracts/Fraxbonds/FraxFPIBond.sol index 4194f694..a04767c5 100644 --- a/src/hardhat/contracts/Fraxbonds/FraxFPIBond.sol +++ b/src/hardhat/contracts/Fraxbonds/FraxFPIBond.sol @@ -1,7 +1,7 @@ //SPDX-License-Identifier: Unlicense pragma solidity ^0.8.4; -import "@openzeppelin/contracts/token/ERC20/extensions/draft-ERC20Permit.sol"; +import "@openzeppelin/contracts/token/ERC20/extensions/ERC20Permit.sol"; import "@openzeppelin/contracts/token/ERC20/IERC20.sol"; import "@uniswap/v3-periphery/contracts/libraries/TransferHelper.sol"; import "./FraxFPIBondYield.sol"; diff --git a/src/hardhat/contracts/Fraxbonds/FraxFPIBondYield.sol b/src/hardhat/contracts/Fraxbonds/FraxFPIBondYield.sol index b770fbe4..ecada15d 100644 --- a/src/hardhat/contracts/Fraxbonds/FraxFPIBondYield.sol +++ b/src/hardhat/contracts/Fraxbonds/FraxFPIBondYield.sol @@ -1,7 +1,7 @@ //SPDX-License-Identifier: Unlicense pragma solidity ^0.8.4; -import "@openzeppelin/contracts/token/ERC20/extensions/draft-ERC20Permit.sol"; +import "@openzeppelin/contracts/token/ERC20/extensions/ERC20Permit.sol"; contract FraxFPIBondYield is ERC20Permit { address immutable bond; diff --git a/src/hardhat/contracts/Fraxferry/DummyToken.sol b/src/hardhat/contracts/Fraxferry/DummyToken.sol index d8df875f..ca9ce54c 100644 --- a/src/hardhat/contracts/Fraxferry/DummyToken.sol +++ b/src/hardhat/contracts/Fraxferry/DummyToken.sol @@ -2,15 +2,16 @@ pragma solidity ^0.8.4; import "@openzeppelin/contracts/token/ERC20/ERC20.sol"; -import "@openzeppelin/contracts/token/ERC20/extensions/draft-ERC20Permit.sol"; +import "@openzeppelin/contracts/token/ERC20/extensions/ERC20Permit.sol"; import "@openzeppelin/contracts/token/ERC20/IERC20.sol"; import "@openzeppelin/contracts/token/ERC20/extensions/ERC20Burnable.sol"; -import "@openzeppelin/contracts/security/Pausable.sol"; +import "@openzeppelin/contracts/utils/Pausable.sol"; import "@openzeppelin/contracts/access/Ownable.sol"; import "@openzeppelin/contracts/access/AccessControl.sol"; contract DummyToken is ERC20Permit, ERC20Burnable, Ownable { constructor() + Ownable(msg.sender) ERC20("DummyToken", "DUM") ERC20Permit("DummyToken") { } diff --git a/src/hardhat/contracts/Fraxferry/Fraxferry.sol b/src/hardhat/contracts/Fraxferry/Fraxferry.sol index f763bc41..7a198ef5 100644 --- a/src/hardhat/contracts/Fraxferry/Fraxferry.sol +++ b/src/hardhat/contracts/Fraxferry/Fraxferry.sol @@ -38,7 +38,7 @@ pragma solidity ^0.8.4; ** - Operators do not have enough time to pause the chain after a fake proposal. Avoided by requiring a minimal amount of time between sending the proposal and executing it. */ import "@openzeppelin/contracts/token/ERC20/IERC20.sol"; -import "@openzeppelin/contracts/token/ERC20/extensions/draft-IERC20Permit.sol"; +import "@openzeppelin/contracts/token/ERC20/extensions/IERC20Permit.sol"; import "@openzeppelin/contracts/utils/math/Math.sol"; import "@uniswap/v3-periphery/contracts/libraries/TransferHelper.sol"; diff --git a/src/hardhat/contracts/FraxferryV2/FerryOnL1.sol b/src/hardhat/contracts/FraxferryV2/FerryOnL1.sol index 623707c3..3d31ada9 100644 --- a/src/hardhat/contracts/FraxferryV2/FerryOnL1.sol +++ b/src/hardhat/contracts/FraxferryV2/FerryOnL1.sol @@ -1,7 +1,8 @@ //SPDX-License-Identifier: Unlicense pragma solidity ^0.8.4; -import "@uniswap/v3-periphery/contracts/libraries/TransferHelper.sol"; +import "../ERC20/IERC20.sol"; +import "../Uniswap/TransferHelperV2.sol"; import "@openzeppelin/contracts/utils/math/Math.sol"; import "hardhat/console.sol"; @@ -52,7 +53,7 @@ contract FerryOnL1 { } require (amount>fee,"Amount too low"); require (amount/REDUCED_DECIMALS<=type(uint64).max,"Amount too high"); - TransferHelper.safeTransferFrom(address(token),msg.sender,address(this),amount); + TransferHelperV2.safeTransferFrom(address(token),msg.sender,address(this),amount); uint64 amountAfterFee = uint64((amount-fee)/REDUCED_DECIMALS); emit Embark(recipient,transactionsIn[_captain].length,amount,amountAfterFee*REDUCED_DECIMALS,block.timestamp,_captain); transactionsIn[_captain].push(TransactionIn(recipient,amountAfterFee,uint32(block.timestamp))); @@ -78,7 +79,7 @@ contract FerryOnL1 { CaptainInfo storage captain = captains[msg.sender]; uint withdrawAmount=captain.balance; captain.balance=0; - TransferHelper.safeTransfer(address(token),msg.sender,withdrawAmount); + TransferHelperV2.safeTransfer(address(token),msg.sender,withdrawAmount); } // ************* L2 => L1 @@ -86,7 +87,7 @@ contract FerryOnL1 { if (block.timestamp>=deadline) revert("Deadline"); bytes32 hash = keccak256(abi.encodePacked(amount,recipient,index)); if (transactionsOut[hash]!=address(0)) revert("Already disembarked"); - TransferHelper.safeTransferFrom(address(token),msg.sender,recipient,amount); + TransferHelperV2.safeTransferFrom(address(token),msg.sender,recipient,amount); emit Disembark(captain,index,recipient,amount); transactionsOut[hash]=captain; } diff --git a/src/hardhat/contracts/FraxferryV2/FerryOnL2.sol b/src/hardhat/contracts/FraxferryV2/FerryOnL2.sol index b9982884..38192086 100644 --- a/src/hardhat/contracts/FraxferryV2/FerryOnL2.sol +++ b/src/hardhat/contracts/FraxferryV2/FerryOnL2.sol @@ -7,8 +7,8 @@ pragma solidity ^0.8.4; - User sends FRAX to the contract on L1 and can specify the max cummulative FRAX. This way they can be sure there is enough FRAX on L2 - User provides proofs of the L1 payment on L2 and gets the FRAX. */ - -import "@uniswap/v3-periphery/contracts/libraries/TransferHelper.sol"; +import "../ERC20/IERC20.sol"; +import "../Uniswap/TransferHelperV2.sol"; import "../Fraxoracle/interface/IStateRootOracle.sol"; import "../Fraxoracle/library/MerkleTreeProver.sol"; import "hardhat/console.sol"; @@ -57,7 +57,7 @@ contract FerryOnL2 { function captainDeposit(uint amount) external { CaptainData storage data = captainData[msg.sender]; - TransferHelper.safeTransferFrom(address(token),msg.sender,address(this),amount); + TransferHelperV2.safeTransferFrom(address(token),msg.sender,address(this),amount); data.balance+=amount; } @@ -73,7 +73,7 @@ contract FerryOnL2 { uint toWithdraw=data.withdrawAmount>data.balance?data.balance:data.withdrawAmount; data.balance-=toWithdraw; data.withdrawAmount=0; - TransferHelper.safeTransfer(address(token),msg.sender,toWithdraw); + TransferHelperV2.safeTransfer(address(token),msg.sender,toWithdraw); } function disembark(address captain, uint32 index, uint blockNumber, bytes[] memory _proofAccount,bytes[][] memory _proofValue) external { @@ -91,7 +91,7 @@ contract FerryOnL2 { data.balance-=amount; data.cummAmount+=amount; emit Disembark(captain,index,recipient,amount); - TransferHelper.safeTransfer(address(token),recipient,amount); + TransferHelperV2.safeTransfer(address(token),recipient,amount); } } @@ -99,13 +99,13 @@ contract FerryOnL2 { // ************* L2 => L1 function embarkWithRecipient(uint amount, uint tip, address recipient, uint32 deadline) public { - TransferHelper.safeTransferFrom(address(token),msg.sender,address(this),amount+tip); + TransferHelperV2.safeTransferFrom(address(token),msg.sender,address(this),amount+tip); emit Embark(recipient,uint32(transactions.length),amount,tip,block.timestamp); transactions.push(Transaction(recipient,amount,tip,deadline,false)); } function increaseTip(uint32 index, uint tip) external { - TransferHelper.safeTransferFrom(address(token),msg.sender,address(this),tip); + TransferHelperV2.safeTransferFrom(address(token),msg.sender,address(this),tip); emit IncreaseTip(index,tip); transactions[index].tip+=tip; } @@ -121,10 +121,10 @@ contract FerryOnL2 { uint256 value = MerkleTreeProver.proofStorageSlotValue(accountPool.storageRoot, slot, _proofValue).value; if (value==0) { // Not disembarked, return the funds if (blockInfo.timestamp=0.8.0; + +interface IAuraGauge { + + struct Reward { + address token; + address distributor; + uint256 period_finish; + uint256 rate; + uint256 last_update; + uint256 integral; + } + + function deposit ( uint256 _value ) external; + function deposit ( uint256 _value, address _addr ) external; + function deposit ( uint256 _value, address _addr, bool _claim_rewards ) external; + function withdraw ( uint256 _value ) external; + function withdraw ( uint256 _value, bool _claim_rewards ) external; + function claim_rewards ( ) external; + function claim_rewards ( address _addr ) external; + function claim_rewards ( address _addr, address _receiver ) external; + function transferFrom ( address _from, address _to, uint256 _value ) external returns ( bool ); + function transfer ( address _to, uint256 _value ) external returns ( bool ); + function approve ( address _spender, uint256 _value ) external returns ( bool ); + function permit ( address _owner, address _spender, uint256 _value, uint256 _deadline, uint8 _v, bytes32 _r, bytes32 _s ) external returns ( bool ); + function increaseAllowance ( address _spender, uint256 _added_value ) external returns ( bool ); + function decreaseAllowance ( address _spender, uint256 _subtracted_value ) external returns ( bool ); + function user_checkpoint ( address addr ) external returns ( bool ); + function set_rewards_receiver ( address _receiver ) external; + function kick ( address addr ) external; + function deposit_reward_token ( address _reward_token, uint256 _amount ) external; + function add_reward ( address _reward_token, address _distributor ) external; + function set_reward_distributor ( address _reward_token, address _distributor ) external; + function killGauge ( ) external; + function unkillGauge ( ) external; + function claimed_reward ( address _addr, address _token ) external view returns ( uint256 ); + function claimable_reward ( address _user, address _reward_token ) external view returns ( uint256 ); + function claimable_tokens ( address addr ) external returns ( uint256 ); + function integrate_checkpoint ( ) external view returns ( uint256 ); + function future_epoch_time ( ) external view returns ( uint256 ); + function inflation_rate ( ) external view returns ( uint256 ); + function decimals ( ) external view returns ( uint256 ); + function version ( ) external view returns ( string memory ); + function allowance ( address owner, address spender ) external view returns ( uint256 ); + function initialize ( address _lp_token, uint256 relative_weight_cap ) external; + function setRelativeWeightCap ( uint256 relative_weight_cap ) external; + function getRelativeWeightCap ( ) external view returns ( uint256 ); + function getCappedRelativeWeight ( uint256 time ) external view returns ( uint256 ); + function getMaxRelativeWeightCap ( ) external pure returns ( uint256 ); + function balanceOf ( address arg0 ) external view returns ( uint256 ); + function totalSupply ( ) external view returns ( uint256 ); + function name ( ) external view returns ( string memory ); + function symbol ( ) external view returns ( string memory ); + function DOMAIN_SEPARATOR ( ) external view returns ( bytes32 ); + function nonces ( address arg0 ) external view returns ( uint256 ); + function lp_token ( ) external view returns ( address ); + function is_killed ( ) external view returns ( bool ); + function reward_count ( ) external view returns ( uint256 ); + function reward_data ( address arg0 ) external view returns ( Reward memory ); + function rewards_receiver ( address arg0 ) external view returns ( address ); + function reward_integral_for ( address arg0, address arg1 ) external view returns ( uint256 ); + function working_balances ( address arg0 ) external view returns ( uint256 ); + function working_supply ( ) external view returns ( uint256 ); + function integrate_inv_supply_of ( address arg0 ) external view returns ( uint256 ); + function integrate_checkpoint_of ( address arg0 ) external view returns ( uint256 ); + function integrate_fraction ( address arg0 ) external view returns ( uint256 ); + function period ( ) external view returns ( int128 ); + function reward_tokens ( uint256 arg0 ) external view returns ( address ); + function period_timestamp ( uint256 arg0 ) external view returns ( uint256 ); + function integrate_inv_supply ( uint256 arg0 ) external view returns ( uint256 ); +} diff --git a/src/hardhat/contracts/Misc_AMOs/balancer/IBalancerChildLiquidityGauge.sol b/src/hardhat/contracts/Misc_AMOs/balancer/IBalancerChildLiquidityGauge.sol index 8c75be2f..59cc1140 100644 --- a/src/hardhat/contracts/Misc_AMOs/balancer/IBalancerChildLiquidityGauge.sol +++ b/src/hardhat/contracts/Misc_AMOs/balancer/IBalancerChildLiquidityGauge.sol @@ -1,7 +1,6 @@ // SPDX-License-Identifier: GPL-2.0-or-later pragma solidity >=0.8.0; - interface IBalancerChildLiquidityGauge { function deposit (uint256 _value) external; function deposit (uint256 _value, address _user) external; diff --git a/src/hardhat/contracts/Misc_AMOs/balancer/IBalancerMinter.sol b/src/hardhat/contracts/Misc_AMOs/balancer/IBalancerMinter.sol new file mode 100644 index 00000000..b6800b94 --- /dev/null +++ b/src/hardhat/contracts/Misc_AMOs/balancer/IBalancerMinter.sol @@ -0,0 +1,23 @@ +// SPDX-License-Identifier: GPL-2.0-or-later +pragma solidity >=0.8.0; + + +interface IBalancerMinter { + function allowed_to_mint_for ( address minter, address user ) external view returns ( bool ); + function getBalancerToken ( ) external view returns ( address ); + function getBalancerTokenAdmin ( ) external view returns ( address ); + function getDomainSeparator ( ) external view returns ( bytes32 ); + function getGaugeController ( ) external view returns ( address ); + function getMinterApproval ( address minter, address user ) external view returns ( bool ); + function getNextNonce ( address user ) external view returns ( uint256 ); + function mint ( address gauge ) external returns ( uint256 ); + function mintFor ( address gauge, address user ) external returns ( uint256 ); + function mintMany ( address[] memory gauges ) external returns ( uint256 ); + function mintManyFor ( address[] memory gauges, address user ) external returns ( uint256 ); + function mint_for ( address gauge, address user ) external; + function mint_many ( address[8] memory gauges ) external; + function minted ( address user, address gauge ) external view returns ( uint256 ); + function setMinterApproval ( address minter, bool approval ) external; + function setMinterApprovalWithSignature ( address minter, bool approval, address user, uint256 deadline, uint8 v, bytes32 r, bytes32 s ) external; + function toggle_approve_mint ( address minter ) external; +} diff --git a/src/hardhat/contracts/Misc_AMOs/balancer/IComposableStablePool.sol b/src/hardhat/contracts/Misc_AMOs/balancer/IComposableStablePool.sol new file mode 100644 index 00000000..49c5d875 --- /dev/null +++ b/src/hardhat/contracts/Misc_AMOs/balancer/IComposableStablePool.sol @@ -0,0 +1,62 @@ +// SPDX-License-Identifier: GPL-2.0-or-later +pragma solidity >=0.8.0; + + +interface IComposableStablePool { + function DELEGATE_PROTOCOL_SWAP_FEES_SENTINEL ( ) external view returns ( uint256 ); + function DOMAIN_SEPARATOR ( ) external view returns ( bytes32 ); + function allowance ( address owner, address spender ) external view returns ( uint256 ); + function approve ( address spender, uint256 amount ) external returns ( bool ); + function balanceOf ( address account ) external view returns ( uint256 ); + function decimals ( ) external view returns ( uint8 ); + function decreaseAllowance ( address spender, uint256 amount ) external returns ( bool ); + function disableRecoveryMode ( ) external; + function enableRecoveryMode ( ) external; + function getActionId ( bytes4 selector ) external view returns ( bytes32 ); + function getActualSupply ( ) external view returns ( uint256 ); + function getAmplificationParameter ( ) external view returns ( uint256 value, bool isUpdating, uint256 precision ); + function getAuthorizer ( ) external view returns ( address ); + function getBptIndex ( ) external view returns ( uint256 ); + function getDomainSeparator ( ) external view returns ( bytes32 ); + function getLastJoinExitData ( ) external view returns ( uint256 lastJoinExitAmplification, uint256 lastPostJoinExitInvariant ); + function getMinimumBpt ( ) external pure returns ( uint256 ); + function getNextNonce ( address account ) external view returns ( uint256 ); + function getOwner ( ) external view returns ( address ); + function getPausedState ( ) external view returns ( bool paused, uint256 pauseWindowEndTime, uint256 bufferPeriodEndTime ); + function getPoolId ( ) external view returns ( bytes32 ); + function getProtocolFeePercentageCache ( uint256 feeType ) external view returns ( uint256 ); + function getProtocolFeesCollector ( ) external view returns ( address ); + function getProtocolSwapFeeDelegation ( ) external view returns ( bool ); + function getRate ( ) external view returns ( uint256 ); + function getRateProviders ( ) external view returns ( address[] memory ); + function getScalingFactors ( ) external view returns ( uint256[] memory ); + function getSwapFeePercentage ( ) external view returns ( uint256 ); + function getTokenRate ( address token ) external view returns ( uint256 ); + function getTokenRateCache ( address token ) external view returns ( uint256 rate, uint256 oldRate, uint256 duration, uint256 expires ); + function getVault ( ) external view returns ( address ); + function inRecoveryMode ( ) external view returns ( bool ); + function increaseAllowance ( address spender, uint256 addedValue ) external returns ( bool ); + function isExemptFromYieldProtocolFee ( ) external view returns ( bool ); + function isTokenExemptFromYieldProtocolFee ( address token ) external view returns ( bool ); + function name ( ) external view returns ( string memory ); + function nonces ( address owner ) external view returns ( uint256 ); + function onExitPool ( bytes32 poolId, address sender, address recipient, uint256[] memory balances, uint256 lastChangeBlock, uint256 protocolSwapFeePercentage, bytes memory userData ) external returns ( uint256[] memory, uint256[] memory ); + function onJoinPool ( bytes32 poolId, address sender, address recipient, uint256[] memory balances, uint256 lastChangeBlock, uint256 protocolSwapFeePercentage, bytes memory userData ) external returns ( uint256[] memory, uint256[] memory ); + function pause ( ) external; + function permit ( address owner, address spender, uint256 value, uint256 deadline, uint8 v, bytes32 r, bytes32 s ) external; + function queryExit ( bytes32 poolId, address sender, address recipient, uint256[] memory balances, uint256 lastChangeBlock, uint256 protocolSwapFeePercentage, bytes memory userData ) external returns ( uint256 bptIn, uint256[] memory amountsOut ); + function queryJoin ( bytes32 poolId, address sender, address recipient, uint256[] memory balances, uint256 lastChangeBlock, uint256 protocolSwapFeePercentage, bytes memory userData ) external returns ( uint256 bptOut, uint256[] memory amountsIn ); + function setAssetManagerPoolConfig ( address token, bytes memory poolConfig ) external; + function setSwapFeePercentage ( uint256 swapFeePercentage ) external; + function setTokenRateCacheDuration ( address token, uint256 duration ) external; + function startAmplificationParameterUpdate ( uint256 rawEndValue, uint256 endTime ) external; + function stopAmplificationParameterUpdate ( ) external; + function symbol ( ) external view returns ( string memory ); + function totalSupply ( ) external view returns ( uint256 ); + function transfer ( address recipient, uint256 amount ) external returns ( bool ); + function transferFrom ( address sender, address recipient, uint256 amount ) external returns ( bool ); + function unpause ( ) external; + function updateProtocolFeePercentageCache ( ) external; + function updateTokenRateCache ( address token ) external; + function version ( ) external view returns ( string memory ); +} diff --git a/src/hardhat/contracts/Misc_AMOs/curve/ICurveStableSwapNG.sol b/src/hardhat/contracts/Misc_AMOs/curve/ICurveStableSwapNG.sol new file mode 100644 index 00000000..8d238ccc --- /dev/null +++ b/src/hardhat/contracts/Misc_AMOs/curve/ICurveStableSwapNG.sol @@ -0,0 +1,66 @@ +// SPDX-License-Identifier: GPL-2.0-or-later +pragma solidity ^0.8.0; + +interface ICurveStableSwapNG { + function exchange ( int128 i, int128 j, uint256 _dx, uint256 _min_dy ) external returns ( uint256 ); + function exchange ( int128 i, int128 j, uint256 _dx, uint256 _min_dy, address _receiver ) external returns ( uint256 ); + function exchange_received ( int128 i, int128 j, uint256 _dx, uint256 _min_dy ) external returns ( uint256 ); + function exchange_received ( int128 i, int128 j, uint256 _dx, uint256 _min_dy, address _receiver ) external returns ( uint256 ); + function add_liquidity ( uint256[] memory _amounts, uint256 _min_mint_amount ) external returns ( uint256 ); + function add_liquidity ( uint256[] memory _amounts, uint256 _min_mint_amount, address _receiver ) external returns ( uint256 ); + function remove_liquidity_one_coin ( uint256 _burn_amount, int128 i, uint256 _min_received ) external returns ( uint256 ); + function remove_liquidity_one_coin ( uint256 _burn_amount, int128 i, uint256 _min_received, address _receiver ) external returns ( uint256 ); + function remove_liquidity_imbalance ( uint256[] memory _amounts, uint256 _max_burn_amount ) external returns ( uint256 ); + function remove_liquidity_imbalance ( uint256[] memory _amounts, uint256 _max_burn_amount, address _receiver ) external returns ( uint256 ); + function remove_liquidity ( uint256 _burn_amount, uint256[] memory _min_amounts ) external returns ( uint256[] memory ); + function remove_liquidity ( uint256 _burn_amount, uint256[] memory _min_amounts, address _receiver ) external returns ( uint256[] memory ); + function remove_liquidity ( uint256 _burn_amount, uint256[] memory _min_amounts, address _receiver, bool _claim_admin_fees ) external returns ( uint256[] memory ); + function withdraw_admin_fees ( ) external; + function last_price ( uint256 i ) external view returns ( uint256 ); + function ema_price ( uint256 i ) external view returns ( uint256 ); + function get_p ( uint256 i ) external view returns ( uint256 ); + function price_oracle ( uint256 i ) external view returns ( uint256 ); + function D_oracle ( ) external view returns ( uint256 ); + function transfer ( address _to, uint256 _value ) external returns ( bool ); + function transferFrom ( address _from, address _to, uint256 _value ) external returns ( bool ); + function approve ( address _spender, uint256 _value ) external returns ( bool ); + function permit ( address _owner, address _spender, uint256 _value, uint256 _deadline, uint8 _v, bytes32 _r, bytes32 _s ) external returns ( bool ); + function DOMAIN_SEPARATOR ( ) external view returns ( bytes32 ); + function get_dx ( int128 i, int128 j, uint256 dy ) external view returns ( uint256 ); + function get_dy ( int128 i, int128 j, uint256 dx ) external view returns ( uint256 ); + function calc_withdraw_one_coin ( uint256 _burn_amount, int128 i ) external view returns ( uint256 ); + function totalSupply ( ) external view returns ( uint256 ); + function get_virtual_price ( ) external view returns ( uint256 ); + function calc_token_amount ( uint256[] memory _amounts, bool _is_deposit ) external view returns ( uint256 ); + function A ( ) external view returns ( uint256 ); + function A_precise ( ) external view returns ( uint256 ); + function balances ( uint256 i ) external view returns ( uint256 ); + function get_balances ( ) external view returns ( uint256[] memory ); + function stored_rates ( ) external view returns ( uint256[] memory ); + function dynamic_fee ( int128 i, int128 j ) external view returns ( uint256 ); + function ramp_A ( uint256 _future_A, uint256 _future_time ) external; + function stop_ramp_A ( ) external; + function set_new_fee ( uint256 _new_fee, uint256 _new_offpeg_fee_multiplier ) external; + function set_ma_exp_time ( uint256 _ma_exp_time, uint256 _D_ma_time ) external; + function N_COINS ( ) external view returns ( uint256 ); + function coins ( uint256 arg0 ) external view returns ( address ); + function fee ( ) external view returns ( uint256 ); + function offpeg_fee_multiplier ( ) external view returns ( uint256 ); + function admin_fee ( ) external view returns ( uint256 ); + function initial_A ( ) external view returns ( uint256 ); + function future_A ( ) external view returns ( uint256 ); + function initial_A_time ( ) external view returns ( uint256 ); + function future_A_time ( ) external view returns ( uint256 ); + function admin_balances ( uint256 arg0 ) external view returns ( uint256 ); + function ma_exp_time ( ) external view returns ( uint256 ); + function D_ma_time ( ) external view returns ( uint256 ); + function ma_last_time ( ) external view returns ( uint256 ); + function name ( ) external view returns ( string memory ); + function symbol ( ) external view returns ( string memory ); + function decimals ( ) external view returns ( uint8 ); + function version ( ) external view returns ( string memory ); + function balanceOf ( address arg0 ) external view returns ( uint256 ); + function allowance ( address arg0, address arg1 ) external view returns ( uint256 ); + function nonces ( address arg0 ) external view returns ( uint256 ); + function salt ( ) external view returns ( bytes32 ); +} diff --git a/src/hardhat/contracts/Openzeppelin_Manual/Context.sol b/src/hardhat/contracts/Openzeppelin_Manual/Context.sol new file mode 100644 index 00000000..e85d18de --- /dev/null +++ b/src/hardhat/contracts/Openzeppelin_Manual/Context.sol @@ -0,0 +1,28 @@ +// SPDX-License-Identifier: MIT +// OpenZeppelin Contracts (last updated v5.0.1) (utils/Context.sol) + +pragma solidity >=0.8.0; + +/** + * @dev Provides information about the current execution context, including the + * sender of the transaction and its data. While these are generally available + * via msg.sender and msg.data, they should not be accessed in such a direct + * manner, since when dealing with meta-transactions the account sending and + * paying for execution may not be the actual sender (as far as an application + * is concerned). + * + * This contract is only required for intermediate, library-like contracts. + */ +abstract contract Context { + function _msgSender() internal view virtual returns (address) { + return msg.sender; + } + + function _msgData() internal view virtual returns (bytes calldata) { + return msg.data; + } + + function _contextSuffixLength() internal view virtual returns (uint256) { + return 0; + } +} \ No newline at end of file diff --git a/src/hardhat/contracts/Openzeppelin_Manual/Pausable.sol b/src/hardhat/contracts/Openzeppelin_Manual/Pausable.sol new file mode 100644 index 00000000..49a4d811 --- /dev/null +++ b/src/hardhat/contracts/Openzeppelin_Manual/Pausable.sol @@ -0,0 +1,119 @@ +// SPDX-License-Identifier: MIT +// OpenZeppelin Contracts (last updated v5.0.0) (utils/Pausable.sol) + +pragma solidity >=0.8.0; + +import { Context } from "./Context.sol"; + +/** + * @dev Contract module which allows children to implement an emergency stop + * mechanism that can be triggered by an authorized account. + * + * This module is used through inheritance. It will make available the + * modifiers `whenNotPaused` and `whenPaused`, which can be applied to + * the functions of your contract. Note that they will not be pausable by + * simply including this module, only once the modifiers are put in place. + */ +abstract contract Pausable is Context { + bool private _paused; + + /** + * @dev Emitted when the pause is triggered by `account`. + */ + event Paused(address account); + + /** + * @dev Emitted when the pause is lifted by `account`. + */ + event Unpaused(address account); + + /** + * @dev The operation failed because the contract is paused. + */ + error EnforcedPause(); + + /** + * @dev The operation failed because the contract is not paused. + */ + error ExpectedPause(); + + /** + * @dev Initializes the contract in unpaused state. + */ + constructor() { + _paused = false; + } + + /** + * @dev Modifier to make a function callable only when the contract is not paused. + * + * Requirements: + * + * - The contract must not be paused. + */ + modifier whenNotPaused() { + _requireNotPaused(); + _; + } + + /** + * @dev Modifier to make a function callable only when the contract is paused. + * + * Requirements: + * + * - The contract must be paused. + */ + modifier whenPaused() { + _requirePaused(); + _; + } + + /** + * @dev Returns true if the contract is paused, and false otherwise. + */ + function paused() public view virtual returns (bool) { + return _paused; + } + + /** + * @dev Throws if the contract is paused. + */ + function _requireNotPaused() internal view virtual { + if (paused()) { + revert EnforcedPause(); + } + } + + /** + * @dev Throws if the contract is not paused. + */ + function _requirePaused() internal view virtual { + if (!paused()) { + revert ExpectedPause(); + } + } + + /** + * @dev Triggers stopped state. + * + * Requirements: + * + * - The contract must not be paused. + */ + function _pause() internal virtual whenNotPaused { + _paused = true; + emit Paused(_msgSender()); + } + + /** + * @dev Returns to normal state. + * + * Requirements: + * + * - The contract must be paused. + */ + function _unpause() internal virtual whenPaused { + _paused = false; + emit Unpaused(_msgSender()); + } +} \ No newline at end of file diff --git a/src/hardhat/contracts/Oracle/ICPITrackerOracle.sol b/src/hardhat/contracts/Oracle/ICPITrackerOracle.sol new file mode 100644 index 00000000..8149d45c --- /dev/null +++ b/src/hardhat/contracts/Oracle/ICPITrackerOracle.sol @@ -0,0 +1,43 @@ +// SPDX-License-Identifier: GPL-2.0-or-later +pragma solidity ^0.8.0; + +interface ICPITrackerOracle { + function acceptOwnership ( ) external; + function bot_address ( ) external view returns ( address ); + function cancelRequest ( bytes32 _requestId, uint256 _payment, bytes4 _callbackFunc, uint256 _expiration ) external; + function cpi_last ( ) external view returns ( uint256 ); + function cpi_observations ( uint256 ) external view returns ( uint256 result_year, uint256 result_month, uint256 cpi_target, uint256 peg_price_target, uint256 timestamp ); + function cpi_target ( ) external view returns ( uint256 ); + function currDeltaFracAbsE6 ( ) external view returns ( uint256 ); + function currDeltaFracE6 ( ) external view returns ( int256 ); + function currPegPrice ( ) external view returns ( uint256 ); + function fee ( ) external view returns ( uint256 ); + function fulfill ( bytes32 _requestId, uint256 result ) external; + function fulfill_ready_day ( ) external view returns ( uint256 ); + function future_ramp_period ( ) external view returns ( uint256 ); + function jobId ( ) external view returns ( bytes32 ); + function lastUpdateTime ( ) external view returns ( uint256 ); + function max_delta_frac ( ) external view returns ( uint256 ); + function month_names ( uint256 ) external view returns ( string memory ); + function nominateNewOwner ( address _owner ) external; + function nominatedOwner ( ) external view returns ( address ); + function oracle ( ) external view returns ( address ); + function owner ( ) external view returns ( address ); + function peg_price_last ( ) external view returns ( uint256 ); + function peg_price_target ( ) external view returns ( uint256 ); + function ramp_period ( ) external view returns ( uint256 ); + function recoverERC20 ( address tokenAddress, uint256 tokenAmount ) external; + function requestCPIData ( ) external returns ( bytes32 requestId ); + function setBot ( address _new_bot_address ) external; + function setFulfillReadyDay ( uint256 _fulfill_ready_day ) external; + function setFutureRampPeriod ( uint256 _future_ramp_period ) external; + function setMaxDeltaFrac ( uint256 _max_delta_frac ) external; + function setOracleInfo ( address _oracle, bytes32 _jobId, uint256 _fee ) external; + function setTimelock ( address _new_timelock_address ) external; + function stored_month ( ) external view returns ( uint256 ); + function stored_year ( ) external view returns ( uint256 ); + function time_contract ( ) external view returns ( address ); + function timelock_address ( ) external view returns ( address ); + function upcomingCPIParams ( ) external view returns ( uint256 upcoming_year, uint256 upcoming_month, uint256 upcoming_timestamp ); + function upcomingSerie ( ) external view returns ( string memory serie_name ); +} diff --git a/src/hardhat/contracts/Staking/CommunalFarm.sol b/src/hardhat/contracts/Staking/CommunalFarm.sol index d1d12483..11c3ba79 100755 --- a/src/hardhat/contracts/Staking/CommunalFarm.sol +++ b/src/hardhat/contracts/Staking/CommunalFarm.sol @@ -121,7 +121,7 @@ contract CommunalFarm is Owned, ReentrancyGuard { } modifier notStakingPaused() { - require(stakingPaused == false, "Staking paused"); + require(!stakingPaused, "Staking paused"); _; } diff --git a/src/hardhat/contracts/Staking/FraxCrossChainFarm.sol b/src/hardhat/contracts/Staking/FraxCrossChainFarm.sol index 43192d9f..0ed2e647 100755 --- a/src/hardhat/contracts/Staking/FraxCrossChainFarm.sol +++ b/src/hardhat/contracts/Staking/FraxCrossChainFarm.sol @@ -170,7 +170,7 @@ contract FraxCrossChainFarm is Owned, ReentrancyGuard { } modifier notStakingPaused() { - require(stakingPaused == false, "Staking paused"); + require(!stakingPaused, "Staking paused"); _; } diff --git a/src/hardhat/contracts/Staking/FraxCrossChainFarmV2.sol b/src/hardhat/contracts/Staking/FraxCrossChainFarmV2.sol index aca8571c..c9ba6f0d 100755 --- a/src/hardhat/contracts/Staking/FraxCrossChainFarmV2.sol +++ b/src/hardhat/contracts/Staking/FraxCrossChainFarmV2.sol @@ -177,7 +177,7 @@ contract FraxCrossChainFarmV2 is Owned, ReentrancyGuard { } modifier notStakingPaused() { - require(stakingPaused == false, "Staking paused"); + require(!stakingPaused, "Staking paused"); _; } diff --git a/src/hardhat/contracts/Staking/FraxCrossChainFarmV3_ERC20.sol b/src/hardhat/contracts/Staking/FraxCrossChainFarmV3_ERC20.sol index 1073feb1..155a3a3c 100755 --- a/src/hardhat/contracts/Staking/FraxCrossChainFarmV3_ERC20.sol +++ b/src/hardhat/contracts/Staking/FraxCrossChainFarmV3_ERC20.sol @@ -228,7 +228,7 @@ contract FraxCrossChainFarmV3_ERC20 is Owned, ReentrancyGuard { } modifier notStakingPaused() { - require(stakingPaused == false, "Staking paused"); + require(!stakingPaused, "Staking paused"); _; } diff --git a/src/hardhat/contracts/Staking/FraxCrossChainFarmV3_Pos_Rebase.sol b/src/hardhat/contracts/Staking/FraxCrossChainFarmV3_Pos_Rebase.sol index 46c272e2..d82b18f6 100755 --- a/src/hardhat/contracts/Staking/FraxCrossChainFarmV3_Pos_Rebase.sol +++ b/src/hardhat/contracts/Staking/FraxCrossChainFarmV3_Pos_Rebase.sol @@ -179,7 +179,7 @@ contract FraxCrossChainFarmV3_ERC20_Pos_Rebase is Owned, ReentrancyGuard { } modifier notStakingPaused() { - require(stakingPaused == false, "Staking paused"); + require(!stakingPaused, "Staking paused"); _; } diff --git a/src/hardhat/contracts/Staking/FraxCrossChainFarmV4_ERC20.sol b/src/hardhat/contracts/Staking/FraxCrossChainFarmV4_ERC20.sol index 3f5f0622..8c4dbf9f 100755 --- a/src/hardhat/contracts/Staking/FraxCrossChainFarmV4_ERC20.sol +++ b/src/hardhat/contracts/Staking/FraxCrossChainFarmV4_ERC20.sol @@ -50,9 +50,10 @@ import "../Oracle/AggregatorV3Interface.sol"; // Balancer frxETH-bb-a-WETH Gauge import '../Misc_AMOs/convex/IConvexCvxLPRewardPoolCombo.sol'; // Convex cvxLP/RewardPool Combo import '../Misc_AMOs/curve/ICurveChildLiquidityGauge.sol'; // Convex cvxLP/RewardPool Combo // import '../Misc_AMOs/curve/I2pool.sol'; // Curve 2-token -import '../Misc_AMOs/curve/I2poolTokenNoLending.sol'; // Curve 2-token (No Lending) +// import '../Misc_AMOs/curve/I2poolTokenNoLending.sol'; // Curve 2-token (No Lending) // import '../Misc_AMOs/curve/I3pool.sol'; // Curve 3-token // import '../Misc_AMOs/curve/I3poolAndToken.sol'; // Curve 3-token with pool +import '../Misc_AMOs/curve/ICurveStableSwapNG.sol'; // Curve 2-token Stable NG // import '../Misc_AMOs/kyberswap/elastic/IKSElasticLMV2.sol'; // KyberSwap Elastic // import '../Misc_AMOs/kyberswap/elastic/IKyberSwapFarmingToken.sol'; // KyberSwap Elastic // import '../Misc_AMOs/kyberswap/elastic/IKSReinvestmentTokenPool.sol'; // KyberSwap Elastic @@ -112,19 +113,19 @@ contract FraxCrossChainFarmV4_ERC20 is Owned, ReentrancyGuard { // Balancer frxETH-bb-a-WETH Gauge or Convex frxETH/XXXETH // IBalancerChildLiquidityGauge public stakingToken; // Balancer frxETH-bb-a-WETH Gauge - AggregatorV3Interface internal priceFeedETHUSD = AggregatorV3Interface(0x639Fe6ab55C921f74e7fac1ee960C0B6293ba612); // For Balancer frxETH-bb-a-WETH Gauge - function setETHUSDOracle(address _eth_usd_oracle_address) public onlyByOwnGov { - require(_eth_usd_oracle_address != address(0), "Zero address detected"); + // AggregatorV3Interface internal priceFeedETHUSD = AggregatorV3Interface(0x639Fe6ab55C921f74e7fac1ee960C0B6293ba612); // For Balancer frxETH-bb-a-WETH Gauge + // function setETHUSDOracle(address _eth_usd_oracle_address) public onlyByOwnGov { + // require(_eth_usd_oracle_address != address(0), "Zero address detected"); - priceFeedETHUSD = AggregatorV3Interface(_eth_usd_oracle_address); - } - function getLatestETHPriceE8() public view returns (int) { - // Returns in E8 - (uint80 roundID, int price, , uint256 updatedAt, uint80 answeredInRound) = priceFeedETHUSD.latestRoundData(); - require(price >= 0 && updatedAt!= 0 && answeredInRound >= roundID, "Invalid chainlink price"); + // priceFeedETHUSD = AggregatorV3Interface(_eth_usd_oracle_address); + // } + // function getLatestETHPriceE8() public view returns (int) { + // // Returns in E8 + // (uint80 roundID, int price, , uint256 updatedAt, uint80 answeredInRound) = priceFeedETHUSD.latestRoundData(); + // require(price >= 0 && updatedAt!= 0 && answeredInRound >= roundID, "Invalid chainlink price"); - return price; - } + // return price; + // } /// @notice The token being staked // I2pool public stakingToken; // Curve 2-token @@ -253,14 +254,17 @@ contract FraxCrossChainFarmV4_ERC20 is Owned, ReentrancyGuard { /// @notice If staking is paused bool public stakingPaused; // For emergencies - /// @notice If reward collection on withdrawal is disabled - bool public collectRewardsOnWithdrawalPaused; + // For emergencies if a token is overemitted or something else. Only callable once. + // Bypasses certain logic, which will cause reward calculations to be off + // But the goal is for the users to recover LP, and they couldn't claim the erroneous rewards anyways. + // Reward reimbursement claims would be handled with pre-issue earned() snapshots and a claim contract, or similar. + bool public withdrawalOnlyShutdown; /// @notice If this contract has been initialized bool public isInitialized; /// @notice Version - string public version = "0.0.8"; + string public version = "0.0.9"; /* ========== STRUCTS ========== */ @@ -300,7 +304,7 @@ contract FraxCrossChainFarmV4_ERC20 is Owned, ReentrancyGuard { /// @notice Staking should not be paused modifier notStakingPaused() { - require(stakingPaused == false, "Staking paused"); + require(!stakingPaused, "Staking paused"); _; } @@ -462,16 +466,25 @@ contract FraxCrossChainFarmV4_ERC20 is Owned, ReentrancyGuard { // Convex cvxfrxETH/XXXETH // ============================================ + // { + // // Get the pool + // ICurveChildLiquidityGauge gauge = ICurveChildLiquidityGauge(stakingToken.curveGauge()); + // I2poolTokenNoLending pool = I2poolTokenNoLending(gauge.lp_token()); + + // // Assume frxETH = ETH for pricing purposes + // // Get the USD value of the frxETH per LP token + // uint256 frxETH_in_pool = IERC20(0x178412e79c25968a32e89b11f63B33F733770c2A).balanceOf(address(pool)); + // uint256 frxETH_usd_val_per_lp_e8 = (frxETH_in_pool * uint256(getLatestETHPriceE8())) / pool.totalSupply(); + // frax_per_lp_token = frxETH_usd_val_per_lp_e8 * (1e10); // We use USD as "Frax" here + // } + + // Convex FRAX/FXB + // ============================================ { - // Get the pool + // Count both FRAX and FXB as both are beneficial ICurveChildLiquidityGauge gauge = ICurveChildLiquidityGauge(stakingToken.curveGauge()); - I2poolTokenNoLending pool = I2poolTokenNoLending(gauge.lp_token()); - - // Assume frxETH = ETH for pricing purposes - // Get the USD value of the frxETH per LP token - uint256 frxETH_in_pool = IERC20(0x178412e79c25968a32e89b11f63B33F733770c2A).balanceOf(address(pool)); - uint256 frxETH_usd_val_per_lp_e8 = (frxETH_in_pool * uint256(getLatestETHPriceE8())) / pool.totalSupply(); - frax_per_lp_token = frxETH_usd_val_per_lp_e8 * (1e10); // We use USD as "Frax" here + ICurveStableSwapNG curvePool = ICurveStableSwapNG(gauge.lp_token()); + frax_per_lp_token = curvePool.get_virtual_price(); } // Curve 2-token (No Lending) @@ -774,14 +787,16 @@ contract FraxCrossChainFarmV4_ERC20 is Owned, ReentrancyGuard { /// @return locked_stake The stake information, as a LockedStake /// @return arr_idx The array index of the stake function _getStake(address staker_address, bytes32 kek_id) internal view returns (LockedStake memory locked_stake, uint256 arr_idx) { - for (uint256 i = 0; i < lockedStakes[staker_address].length; i++) { - if (kek_id == lockedStakes[staker_address][i].kek_id){ - locked_stake = lockedStakes[staker_address][i]; - arr_idx = i; - break; + if (kek_id != 0) { + for (uint256 i = 0; i < lockedStakes[staker_address].length; i++) { + if (kek_id == lockedStakes[staker_address][i].kek_id){ + locked_stake = lockedStakes[staker_address][i]; + arr_idx = i; + break; + } } } - require(locked_stake.kek_id == kek_id, "Stake not found"); + require(kek_id != 0 && locked_stake.kek_id == kek_id, "Stake not found"); } @@ -790,16 +805,19 @@ contract FraxCrossChainFarmV4_ERC20 is Owned, ReentrancyGuard { /// @param sync_too If the non-user state should be synced too /// @param pre_sync_vemxstored The pre-sync veFXS multiplier function _updateRewardAndBalance(address account, bool sync_too, bool pre_sync_vemxstored) internal { - // Need to retro-adjust some things if the period hasn't been renewed, then start a new one - if (sync_too){ - sync(); + // Skip certain functions if we are in an emergency shutdown + if (!withdrawalOnlyShutdown) { + // Need to retro-adjust some things if the period hasn't been renewed, then start a new one + if (sync_too){ + sync(); + } } - + // Used to make sure the veFXS multiplier is correct if a stake is increased, before calcCurCombinedWeight if (pre_sync_vemxstored){ _vefxsMultiplierStored[account] = veFXSMultiplier(account); } - + if (account != address(0)) { // To keep the math correct, the user's combined weight must be recomputed to account for their // ever-changing veFXS balance. @@ -810,7 +828,8 @@ contract FraxCrossChainFarmV4_ERC20 is Owned, ReentrancyGuard { ) = calcCurCombinedWeight(account); // Calculate the earnings first - _syncEarned(account); + // Skip if we are in emergency shutdown + if (!withdrawalOnlyShutdown) _syncEarned(account); // Update the user's stored veFXS multipliers _vefxsMultiplierStored[account] = new_vefxs_multiplier; @@ -836,14 +855,15 @@ contract FraxCrossChainFarmV4_ERC20 is Owned, ReentrancyGuard { // Make sure staking isn't paused require(!stakingPaused, "Staking paused"); + // Make sure you are not in shutdown + require(!withdrawalOnlyShutdown, "Only withdrawals allowed"); + // Claim rewards at the old balance first _getReward(msg.sender, msg.sender); // Get the stake and its index (LockedStake memory thisStake, uint256 theArrayIndex) = _getStake(msg.sender, kek_id); - // Claim rewards at the old rate first - // Calculate the new amount uint256 new_amt = thisStake.liquidity + addl_liq; @@ -879,6 +899,9 @@ contract FraxCrossChainFarmV4_ERC20 is Owned, ReentrancyGuard { // Make sure staking isn't paused require(!stakingPaused, "Staking paused"); + // Make sure you are not in shutdown + require(!withdrawalOnlyShutdown, "Only withdrawals allowed"); + // Claim rewards at the old balance first _getReward(msg.sender, msg.sender); @@ -963,6 +986,7 @@ contract FraxCrossChainFarmV4_ERC20 is Owned, ReentrancyGuard { uint256 start_timestamp ) internal updateRewardAndBalance(staker_address, true) { require(!stakingPaused || valid_migrators[msg.sender] == true, "Staking paused or in migration"); + require(!withdrawalOnlyShutdown, "Only withdrawals allowed"); require(liquidity > 0, "Must stake more than zero"); require(secs >= lock_time_min, "Minimum stake time not met"); require(secs <= lock_time_for_max_multiplier,"Trying to lock for too long"); @@ -992,30 +1016,31 @@ contract FraxCrossChainFarmV4_ERC20 is Owned, ReentrancyGuard { /// @notice Withdraw a stake. /// @param kek_id The id for the stake - /// @param claim_rewards Whether you want to claim rewards during withdrawal + /// @param claim_rewards_deprecated DEPRECATED, has no effect (always claims rewards regardless) /// @dev Two different withdrawLocked functions are needed because of delegateCall and msg.sender issues (important for migration) - function withdrawLocked(bytes32 kek_id, bool claim_rewards) nonReentrant public { + function withdrawLocked(bytes32 kek_id, bool claim_rewards_deprecated) nonReentrant public { require(withdrawalsPaused == false, "Withdrawals paused"); - _withdrawLocked(msg.sender, msg.sender, kek_id, claim_rewards); + _withdrawLocked(msg.sender, msg.sender, kek_id, claim_rewards_deprecated); } /// @notice No withdrawer == msg.sender check needed since this is only internally callable and the checks are done in the wrapper functions like withdraw(), migrator_withdraw_unlocked() and migrator_withdraw_locked() /// @param staker_address The address of the staker /// @param destination_address Destination address for the withdrawn LP /// @param kek_id The id for the stake - /// @param claim_rewards Whether you want to claim rewards during withdrawal - function _withdrawLocked(address staker_address, address destination_address, bytes32 kek_id, bool claim_rewards) internal { + /// @param claim_rewards_deprecated DEPRECATED, has no effect (always claims rewards regardless) + function _withdrawLocked(address staker_address, address destination_address, bytes32 kek_id, bool claim_rewards_deprecated) internal { // Collect rewards first and then update the balances - // collectRewardsOnWithdrawalPaused to be used in an emergency situation if reward is overemitted or not available - // and the user can forfeit rewards to get their principal back. User can also specify it in withdrawLocked - if (claim_rewards || !collectRewardsOnWithdrawalPaused) _getReward(staker_address, destination_address); + // withdrawalOnlyShutdown to be used in an emergency situation if reward is overemitted or not available + // and the user can forfeit rewards to get their principal back. + if (withdrawalOnlyShutdown) { + // Do nothing. + } else { - // Sync the rewards at least - _updateRewardAndBalance(staker_address, true, false); + // Get the rewards + _getReward(staker_address, destination_address); } (LockedStake memory thisStake, uint256 theArrayIndex) = _getStake(staker_address, kek_id); - require(thisStake.kek_id == kek_id, "Stake not found"); require(block.timestamp >= thisStake.ending_timestamp || stakesUnlocked == true || valid_migrators[msg.sender] == true, "Stake is still locked!"); uint256 liquidity = thisStake.liquidity; @@ -1054,6 +1079,9 @@ contract FraxCrossChainFarmV4_ERC20 is Owned, ReentrancyGuard { /// @return _rtnRewards The amounts of collected reward tokens /// @dev No withdrawer == msg.sender check needed since this is only internally callable. This distinction is important for the migrator function _getReward(address rewardee, address destination_address) internal updateRewardAndBalance(rewardee, true) returns (uint256[] memory _rtnRewards) { + // Make sure you are not in shutdown + require(!withdrawalOnlyShutdown, "Only withdrawals allowed"); + _rtnRewards = new uint256[](rewardTokens.length); for (uint256 i = 0; i < rewardTokens.length; i++) { _rtnRewards[i] = rewards[rewardee][i]; @@ -1138,6 +1166,9 @@ contract FraxCrossChainFarmV4_ERC20 is Owned, ReentrancyGuard { function sync() public { require(isInitialized, "Contract not initialized"); + // Make sure you are not in shutdown + require(!withdrawalOnlyShutdown, "Only withdrawals allowed"); + // Make sure the rewardRates are synced to the current reward token balances syncRewards(); @@ -1248,9 +1279,9 @@ contract FraxCrossChainFarmV4_ERC20 is Owned, ReentrancyGuard { migrationsOn = !migrationsOn; } - /// @notice Toggle reward collection upon withdrawal - function toggleCollectRewardsOnWithdrawal() external onlyByOwnGov { - collectRewardsOnWithdrawalPaused = !collectRewardsOnWithdrawalPaused; + /// @notice Only settable to true + function initiateWithdrawalOnlyShutdown() external onlyByOwnGov { + withdrawalOnlyShutdown = true; } /// @notice Toggle the ability to stake diff --git a/src/hardhat/contracts/Staking/FraxFarmRageQuitter_VSTFRAX.sol b/src/hardhat/contracts/Staking/FraxFarmRageQuitter_VSTFRAX.sol new file mode 100644 index 00000000..d63c1ad8 --- /dev/null +++ b/src/hardhat/contracts/Staking/FraxFarmRageQuitter_VSTFRAX.sol @@ -0,0 +1,108 @@ +// SPDX-License-Identifier: GPL-2.0-or-later +pragma solidity >=0.8.0; + +// ==================================================================== +// | ______ _______ | +// | / _____________ __ __ / ____(_____ ____ _____ ________ | +// | / /_ / ___/ __ `| |/_/ / /_ / / __ \/ __ `/ __ \/ ___/ _ \ | +// | / __/ / / / /_/ _> < / __/ / / / / / /_/ / / / / /__/ __/ | +// | /_/ /_/ \__,_/_/|_| /_/ /_/_/ /_/\__,_/_/ /_/\___/\___/ | +// | | +// ==================================================================== +// ==================== FraxFarmRageQuitter_VSTFRAX =================== +// ==================================================================== +// Exits a Frax farm early, with a penalty. Deployed on a case-by-case basis + +// Frax Finance: https://github.com/FraxFinance + +// Primary Author(s) +// Dennis: https://github.com/denett + +// Reviewer(s) / Contributor(s) +// Travis Moore: https://github.com/FortisFortuna + +import "@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol"; +import "@openzeppelin/contracts/token/ERC20/IERC20.sol"; + +import "../Utils/ReentrancyGuard.sol"; + +contract FraxFarmRageQuitter_VSTFRAX is ReentrancyGuard { + IFarm public farm = IFarm(0x127963A74c07f72D862F2Bdc225226c3251BD117); + IERC20 public lp_token = IERC20(0x59bF0545FCa0E5Ad48E13DA269faCD2E8C886Ba4); + address public fraxTreasuryAddress = 0xe61D9ed1e5Dc261D1e90a99304fADCef2c76FD10; + uint256 treasuryPercentage = 2000; // 20%; + + // Rewards tokens + IERC20 public fxsToken = IERC20(0x9d2F299715D94d8A7E6F5eaa8E654E8c74a988A7); + IERC20 public vstaToken = IERC20(0xa684cd057951541187f288294a1e1C2646aA2d24); + + // NOTE + // Make sure to enable this contract as a migrator first on the target farm + + /// @notice Exits stake for a specific kek_id + function ragequitOne(bytes32 _kek_id) nonReentrant external { + uint256 _liquidity; + + // Get all locked stake of the user + IFarm.LockedStake[] memory lockedStakes = farm.lockedStakesOf(msg.sender); + + // Find stake with the correct kek_id + for (uint256 i; i < lockedStakes.length; i++) { + if (lockedStakes[i].kek_id == _kek_id) { + _liquidity = lockedStakes[i].liquidity; + break; + } + } + require(_liquidity > 0, "Stake not found"); + + // Unlock the stake and transfer the LP tokens to this contract + farm.migrator_withdraw_locked(msg.sender, _kek_id); + + // Split the LP tokens between the Frax treasury and the user + uint256 liquidityToTreasury = (_liquidity * treasuryPercentage) / 10000; + SafeERC20.safeTransfer(lp_token, fraxTreasuryAddress, liquidityToTreasury); + SafeERC20.safeTransfer(lp_token, msg.sender, _liquidity - liquidityToTreasury); + + // All rewards collected during the migration are sent to the user. + SafeERC20.safeTransfer(fxsToken, msg.sender, fxsToken.balanceOf(address(this))); + SafeERC20.safeTransfer(vstaToken, msg.sender, vstaToken.balanceOf(address(this))); + } + + /// @notice Exits all stakes + function ragequitAll() nonReentrant external { + uint256 _totalLiquidity; + + // Get all locked stake of the user + IFarm.LockedStake[] memory lockedStakes = farm.lockedStakesOf(msg.sender); + + for (uint256 i; i < lockedStakes.length; i++) { + uint256 _liquidity = lockedStakes[i].liquidity; + if (_liquidity > 0) { + farm.migrator_withdraw_locked(msg.sender, lockedStakes[i].kek_id); // Unlock the stake and transfer the LP tokens to this contract + _totalLiquidity += _liquidity; + } + } + require(_totalLiquidity > 0, "Nothing to unlock"); + + // Split the LP tokens between the Frax treasury and the user + uint256 liquidityToTreasury = (_totalLiquidity * treasuryPercentage) / 10000; + SafeERC20.safeTransfer(lp_token, fraxTreasuryAddress, liquidityToTreasury); + SafeERC20.safeTransfer(lp_token, msg.sender, _totalLiquidity - liquidityToTreasury); + + // All reward tokens collected during the migration are send to the user. + SafeERC20.safeTransfer(fxsToken,msg.sender,fxsToken.balanceOf(address(this))); + SafeERC20.safeTransfer(vstaToken,msg.sender,vstaToken.balanceOf(address(this))); + } +} + +interface IFarm{ + struct LockedStake { + bytes32 kek_id; + uint256 start_timestamp; + uint256 liquidity; + uint256 ending_timestamp; + uint256 lock_multiplier; + } + function migrator_withdraw_locked(address, bytes32) external; + function lockedStakesOf(address) external view returns(LockedStake[] memory); +} \ No newline at end of file diff --git a/src/hardhat/contracts/Staking/FraxUnifiedFarmTemplate.sol b/src/hardhat/contracts/Staking/FraxUnifiedFarmTemplate.sol index 55782378..46fdacb4 100755 --- a/src/hardhat/contracts/Staking/FraxUnifiedFarmTemplate.sol +++ b/src/hardhat/contracts/Staking/FraxUnifiedFarmTemplate.sol @@ -44,9 +44,19 @@ import "../Utils/ReentrancyGuard.sol"; import "./Owned.sol"; // Extra rewards -import "../Misc_AMOs/bunni/IBunniGauge.sol"; -import "../Misc_AMOs/bunni/IBunniLens.sol"; -import "../Misc_AMOs/bunni/IBunniMinter.sol"; +// Balancer +// ==================== +import "../Misc_AMOs/balancer/IAuraGauge.sol"; +import "../Misc_AMOs/balancer/IBalancerMinter.sol"; + +// BUNNI +// ==================== +// import "../Misc_AMOs/bunni/IBunniGauge.sol"; +// import "../Misc_AMOs/bunni/IBunniLens.sol"; +// import "../Misc_AMOs/bunni/IBunniMinter.sol"; + +// CONVEX +// ==================== // import "../Misc_AMOs/convex/IConvexBaseRewardPool.sol"; contract FraxUnifiedFarmTemplate is Owned, ReentrancyGuard { @@ -54,7 +64,11 @@ contract FraxUnifiedFarmTemplate is Owned, ReentrancyGuard { // -------------------- VARIES -------------------- - // // Bunni + // Balancer + IAuraGauge public stakingToken; + IBalancerMinter public minter = IBalancerMinter(0x239e55F427D44C3cc793f49bFB507ebe76638a2b); + + // Bunni // IBunniGauge public stakingToken; // IBunniLens public lens = IBunniLens(0xb73F303472C4fD4FF3B9f59ce0F9b13E47fbfD19); // IBunniMinter public minter = IBunniMinter(0xF087521Ffca0Fa8A43F5C445773aB37C5f574DA0); @@ -134,10 +148,15 @@ contract FraxUnifiedFarmTemplate is Owned, ReentrancyGuard { bool internal withdrawalsPaused; // For emergencies bool internal rewardsCollectionPaused; // For emergencies bool internal stakingPaused; // For emergencies - bool internal collectRewardsOnWithdrawalPaused; // For emergencies if a token is overemitted + + // For emergencies if a token is overemitted or something else. Only callable once. + // Bypasses certain logic, which will cause reward calculations to be off + // But the goal is for the users to recover LP, and they couldn't claim the erroneous rewards anyways. + // Reward reimbursement claims would be handled with pre-issue earned() snapshots and a claim contract, or similar. + bool public withdrawalOnlyShutdown; // Version - string public version = "1.0.5"; + string public version = "1.0.6"; /* ========== STRUCTS ========== */ // In children... @@ -494,11 +513,14 @@ contract FraxUnifiedFarmTemplate is Owned, ReentrancyGuard { } function _updateRewardAndBalance(address account, bool sync_too, bool pre_sync_vemxstored) internal { - // Need to retro-adjust some things if the period hasn't been renewed, then start a new one - if (sync_too){ - sync(); + // Skip certain functions if we are in an emergency shutdown + if (!withdrawalOnlyShutdown) { + // Need to retro-adjust some things if the period hasn't been renewed, then start a new one + if (sync_too){ + sync(); + } } - + // Used to make sure the veFXS multiplier is correct if a stake is increased, before calcCurCombinedWeight if (pre_sync_vemxstored){ _vefxsMultiplierStored[account] = veFXSMultiplier(account); @@ -514,7 +536,7 @@ contract FraxUnifiedFarmTemplate is Owned, ReentrancyGuard { ) = calcCurCombinedWeight(account); // Calculate the earnings first - _syncEarned(account); + if (!withdrawalOnlyShutdown) _syncEarned(account); // Update the user's stored veFXS multipliers _vefxsMultiplierStored[account] = new_vefxs_multiplier; @@ -556,6 +578,7 @@ contract FraxUnifiedFarmTemplate is Owned, ReentrancyGuard { /// @notice A function that can be overridden to add extra logic to the getReward function /// @param destination_address The address to send the rewards to function getRewardExtraLogic(address destination_address) public nonReentrant { + require(!withdrawalOnlyShutdown, "Only withdrawals allowed"); require(rewardsCollectionPaused == false, "Rewards collection paused"); return _getRewardExtraLogic(msg.sender, destination_address); } @@ -583,11 +606,14 @@ contract FraxUnifiedFarmTemplate is Owned, ReentrancyGuard { // No withdrawer == msg.sender check needed since this is only internally callable function _getReward(address rewardee, address destination_address, bool do_extra_logic) internal updateRewardAndBalanceMdf(rewardee, true) returns (uint256[] memory rewards_before) { - // Update the last reward claim time first, as an extra reentrancy safeguard - lastRewardClaimTime[rewardee] = block.timestamp; + // Make sure you are not in shutdown + require(!withdrawalOnlyShutdown, "Only withdrawals allowed"); // Make sure rewards collection isn't paused require(rewardsCollectionPaused == false, "Rewards collection paused"); + + // Update the last reward claim time first, as an extra reentrancy safeguard + lastRewardClaimTime[rewardee] = block.timestamp; // Update the rewards array and distribute rewards rewards_before = new uint256[](rewardTokens.length); @@ -641,11 +667,27 @@ contract FraxUnifiedFarmTemplate is Owned, ReentrancyGuard { // lastUpdateTime = periodFinish; periodFinish = periodFinish + ((num_periods_elapsed + 1) * rewardsDuration); - // // Bunni oLIT rewards - // // ========================================== - // // Pull in rewards and set the reward rate for one week, based off of that - // // If the rewards get messed up for some reason, set this to 0 and it will skip - // // Should only be called once per week max + // Balancer Gauge Rewards + // ========================================== + // Pull in rewards and set the reward rate for one week, based off of that + // If the rewards get messed up for some reason, set this to 0 and it will skip + // Should only be called once per week max + if (rewardRatesManual[1] != 0) { + // BAL + // ==================================== + uint256 bal_before = IERC20(rewardTokens[1]).balanceOf(address(this)); + minter.mint(address(stakingToken)); + uint256 bal_after = IERC20(rewardTokens[1]).balanceOf(address(this)); + + // Set the new reward rate + rewardRatesManual[1] = (bal_after - bal_before) / rewardsDuration; + } + + // Bunni oLIT rewards + // ========================================== + // Pull in rewards and set the reward rate for one week, based off of that + // If the rewards get messed up for some reason, set this to 0 and it will skip + // Should only be called once per week max // if (rewardRatesManual[1] != 0) { // // oLIT // // ==================================== @@ -713,6 +755,9 @@ contract FraxUnifiedFarmTemplate is Owned, ReentrancyGuard { /// @notice Updates gauge weights, fraxPerLP, pulls in new rewards or updates rewards function sync() public { + // Make sure you are not in shutdown + require(!withdrawalOnlyShutdown, "Only withdrawals allowed"); + // Sync the gauge weight, if applicable sync_gauge_weights(false); @@ -738,17 +783,20 @@ contract FraxUnifiedFarmTemplate is Owned, ReentrancyGuard { /// @param _stakingPaused Whether staking is paused /// @param _withdrawalsPaused Whether withdrawals are paused /// @param _rewardsCollectionPaused Whether rewards collection is paused - /// @param _collectRewardsOnWithdrawalPaused Whether collectRewardsOnWithdrawal is paused + /// @param _withdrawalOnlyShutdown Whether you can only withdraw. Only settable once function setPauses( bool _stakingPaused, bool _withdrawalsPaused, bool _rewardsCollectionPaused, - bool _collectRewardsOnWithdrawalPaused + bool _withdrawalOnlyShutdown ) external onlyByOwnGov { stakingPaused = _stakingPaused; withdrawalsPaused = _withdrawalsPaused; rewardsCollectionPaused = _rewardsCollectionPaused; - collectRewardsOnWithdrawalPaused = _collectRewardsOnWithdrawalPaused; + + // Only settable once. Rewards math will be permanently wrong afterwards, so only use + // for recovering LP + if(_withdrawalOnlyShutdown && !withdrawalOnlyShutdown) withdrawalOnlyShutdown = true; } /* ========== RESTRICTED FUNCTIONS - Owner or timelock only ========== */ diff --git a/src/hardhat/contracts/Staking/FraxUnifiedFarm_ERC20.sol b/src/hardhat/contracts/Staking/FraxUnifiedFarm_ERC20.sol index 1c7fdd63..c983715c 100755 --- a/src/hardhat/contracts/Staking/FraxUnifiedFarm_ERC20.sol +++ b/src/hardhat/contracts/Staking/FraxUnifiedFarm_ERC20.sol @@ -18,18 +18,26 @@ import "./FraxUnifiedFarmTemplate.sol"; // -------------------- VARIES -------------------- +// Balancer +// import "../Misc_AMOs/balancer/IAuraGauge.sol"; + // Bunni // import "../Misc_AMOs/bunni/IBunniGauge.sol"; // Convex wrappers -import "../Curve/ICurvefrxETHETHPool.sol"; -import "../Misc_AMOs/convex/IConvexStakingWrapperFrax.sol"; +// import "../Curve/ICurvefrxETHETHPool.sol"; +// import "../Misc_AMOs/convex/IConvexStakingWrapperFrax.sol"; // import "../Misc_AMOs/convex/IDepositToken.sol"; // import "../Misc_AMOs/curve/I2pool.sol"; -import "../Misc_AMOs/curve/I2poolToken.sol"; +// import "../Misc_AMOs/curve/I2poolToken.sol"; // import "../Misc_AMOs/curve/I2poolTokenNoLending.sol"; +// import "../Misc_AMOs/curve/ICurveStableSwapNG.sol"; // import "../Misc_AMOs/curve/ICurveTricryptoOptimizedWETH.sol"; +// Convex FXB +// import "../Misc_AMOs/curve/ICurveStableSwapNG.sol"; +// import '../FXB/IFXB.sol'; + // Fraxlend // import '../Fraxlend/IFraxlendPair.sol'; @@ -68,17 +76,25 @@ contract FraxUnifiedFarm_ERC20 is FraxUnifiedFarmTemplate { // -------------------- VARIES -------------------- + // Bunni + // Declared in FraxUnifiedFarmTemplate.sol + + // Balancer + // Declared in FraxUnifiedFarmTemplate.sol + // Convex crvUSD/FRAX // IConvexStakingWrapperFrax public stakingToken; // I2poolTokenNoLending public curveToken; // ICurvefrxETHETHPool public curvePool; // Convex stkcvxFPIFRAX, stkcvxFRAXBP, etc - IConvexStakingWrapperFrax public stakingToken; - I2poolToken public curveToken; + // IConvexStakingWrapperFrax public stakingToken; + // I2poolToken public curveToken; + // ICurveStableSwapNG public curveToken; // ICurveTricryptoOptimizedWETH public curveToken; // I2pool public curvePool; - ICurvefrxETHETHPool public curvePool; + // ICurvefrxETHETHPool public curvePool; + // ICurveStableSwapNG public curvePool; // ICurveTricryptoOptimizedWETH public curvePool; // Fraxswap @@ -187,6 +203,10 @@ contract FraxUnifiedFarm_ERC20 is FraxUnifiedFarmTemplate { // Get the amount of FRAX 'inside' of the lp tokens uint256 frax_per_lp_token; + // Balancer + // ============================================ + // USE CHILD + // Bunni // ============================================ // USE CHILD @@ -427,14 +447,16 @@ contract FraxUnifiedFarm_ERC20 is FraxUnifiedFarmTemplate { } function _getStake(address staker_address, bytes32 kek_id) internal view returns (LockedStake memory locked_stake, uint256 arr_idx) { - for (uint256 i = 0; i < lockedStakes[staker_address].length; i++){ - if (kek_id == lockedStakes[staker_address][i].kek_id){ - locked_stake = lockedStakes[staker_address][i]; - arr_idx = i; - break; + if (kek_id != 0) { + for (uint256 i = 0; i < lockedStakes[staker_address].length; i++){ + if (kek_id == lockedStakes[staker_address][i].kek_id){ + locked_stake = lockedStakes[staker_address][i]; + arr_idx = i; + break; + } } } - require(locked_stake.kek_id == kek_id, "Stake not found"); + require(kek_id != 0 && locked_stake.kek_id == kek_id, "Stake not found"); } @@ -443,6 +465,9 @@ contract FraxUnifiedFarm_ERC20 is FraxUnifiedFarmTemplate { // Make sure staking isn't paused require(!stakingPaused, "Staking paused"); + // Make sure you are not in shutdown + require(!withdrawalOnlyShutdown, "Only withdrawals allowed"); + // Claim rewards at the old balance first _getReward(msg.sender, msg.sender, true); @@ -478,6 +503,9 @@ contract FraxUnifiedFarm_ERC20 is FraxUnifiedFarmTemplate { // Make sure staking isn't paused require(!stakingPaused, "Staking paused"); + // Make sure you are not in shutdown + require(!withdrawalOnlyShutdown, "Only withdrawals allowed"); + // Claim rewards at the old balance first _getReward(msg.sender, msg.sender, true); @@ -528,7 +556,8 @@ contract FraxUnifiedFarm_ERC20 is FraxUnifiedFarmTemplate { uint256 secs, uint256 start_timestamp ) internal updateRewardAndBalanceMdf(staker_address, true) returns (bytes32) { - require(stakingPaused == false, "Staking paused"); + require(!withdrawalOnlyShutdown, "Only withdrawals allowed"); + require(!stakingPaused, "Staking paused"); require(secs >= lock_time_min, "Minimum stake time not met"); require(secs <= lock_time_for_max_multiplier,"Trying to lock for too long"); @@ -559,26 +588,35 @@ contract FraxUnifiedFarm_ERC20 is FraxUnifiedFarmTemplate { // ------ WITHDRAWING ------ - // Two different withdrawLocked functions are needed because of delegateCall and msg.sender issues (important for proxies) - function withdrawLocked(bytes32 kek_id, address destination_address, bool claim_rewards) nonReentrant external returns (uint256) { + /// @notice Withdraw a stake. + /// @param kek_id The id for the stake + /// @param claim_rewards_deprecated DEPRECATED, has no effect (always claims rewards regardless) + /// @dev Two different withdrawLocked functions are needed because of delegateCall and msg.sender issues (important for migration) + function withdrawLocked(bytes32 kek_id, address destination_address, bool claim_rewards_deprecated) nonReentrant external returns (uint256) { require(withdrawalsPaused == false, "Withdrawals paused"); - return _withdrawLocked(msg.sender, destination_address, kek_id, claim_rewards); + return _withdrawLocked(msg.sender, destination_address, kek_id, claim_rewards_deprecated); } - // No withdrawer == msg.sender check needed since this is only internally callable and the checks are done in the wrapper + /// @notice No withdrawer == msg.sender check needed since this is only internally callable and the checks are done in the wrapper functions like withdraw(), migrator_withdraw_unlocked() and migrator_withdraw_locked() + /// @param staker_address The address of the staker + /// @param destination_address Destination address for the withdrawn LP + /// @param kek_id The id for the stake + /// @param claim_rewards_deprecated DEPRECATED, has no effect (always claims rewards regardless) function _withdrawLocked( address staker_address, address destination_address, bytes32 kek_id, - bool claim_rewards + bool claim_rewards_deprecated ) internal returns (uint256) { // Collect rewards first and then update the balances - // collectRewardsOnWithdrawalPaused to be used in an emergency situation if reward is overemitted or not available - // and the user can forfeit rewards to get their principal back. User can also specify it in withdrawLocked - if (claim_rewards || !collectRewardsOnWithdrawalPaused) _getReward(staker_address, destination_address, true); + // withdrawalOnlyShutdown to be used in an emergency situation if reward is overemitted or not available + // and the user can forfeit rewards to get their principal back. + if (withdrawalOnlyShutdown) { + // Do nothing. + } else { - // Sync the rewards at least - _updateRewardAndBalance(staker_address, true, false); + // Get the reward + _getReward(staker_address, destination_address, true); } // Get the stake and its index diff --git a/src/hardhat/contracts/Staking/StakingRewardsDualV5.sol b/src/hardhat/contracts/Staking/StakingRewardsDualV5.sol index 09f5c7d7..1609c50d 100755 --- a/src/hardhat/contracts/Staking/StakingRewardsDualV5.sol +++ b/src/hardhat/contracts/Staking/StakingRewardsDualV5.sol @@ -146,7 +146,7 @@ contract StakingRewardsDualV5 is Owned, ReentrancyGuard { } modifier notStakingPaused() { - require(stakingPaused == false, "Staking paused"); + require(!stakingPaused, "Staking paused"); _; } diff --git a/src/hardhat/contracts/Staking/StakingRewardsMultiGauge.sol b/src/hardhat/contracts/Staking/StakingRewardsMultiGauge.sol index 56dcc654..020a7427 100755 --- a/src/hardhat/contracts/Staking/StakingRewardsMultiGauge.sol +++ b/src/hardhat/contracts/Staking/StakingRewardsMultiGauge.sol @@ -194,7 +194,7 @@ contract StakingRewardsMultiGauge is Owned, ReentrancyGuard { } modifier notStakingPaused() { - require(stakingPaused == false, "Staking paused"); + require(!stakingPaused, "Staking paused"); _; } diff --git a/src/hardhat/contracts/Staking/Variants/FraxUnifiedFarm_ERC20_Convex_Generic.sol b/src/hardhat/contracts/Staking/Variants/FraxUnifiedFarm_ERC20_Convex_Generic.sol index 58581db0..878307f3 100755 --- a/src/hardhat/contracts/Staking/Variants/FraxUnifiedFarm_ERC20_Convex_Generic.sol +++ b/src/hardhat/contracts/Staking/Variants/FraxUnifiedFarm_ERC20_Convex_Generic.sol @@ -2,16 +2,30 @@ pragma solidity >=0.8.0; import "../FraxUnifiedFarm_ERC20.sol"; +import "../../ERC20/IERC20.sol"; +// import '../../FXB/IFXB.sol'; +import "../../FPI/IFPI.sol"; +import "../../Oracle/ICPITrackerOracle.sol"; import "../../Misc_AMOs/convex/IConvexStakingWrapperFrax.sol"; import "../../Misc_AMOs/convex/IDepositToken.sol"; import "../../Misc_AMOs/curve/I2poolToken.sol"; import "../../Misc_AMOs/curve/I2pool.sol"; +import "../../Misc_AMOs/curve/ICurveStableSwapNG.sol"; import "../../Misc_AMOs/curve/ICurveTricryptoOptimizedWETH.sol"; +import "../../Oracle/AggregatorV3Interface.sol"; + contract FraxUnifiedFarm_ERC20_Convex_Generic is FraxUnifiedFarm_ERC20 { string public farm_type = "ERC20_Convex_Generic"; + // IFPI public FPI = IFPI(0x5Ca135cB8527d76e932f34B5145575F9d8cbE08E); + // ICPITrackerOracle public FPI_ORACLE = ICPITrackerOracle(0x66B7DFF2Ac66dc4d6FBB3Db1CB627BBb01fF3146); + + // Convex tricryptoFRAX + // ============================================ + AggregatorV3Interface internal priceFeedETHUSD = AggregatorV3Interface(0x5f4eC3Df9cbd43714FE2740f5E3616155c5b8419); + constructor ( address _owner, address[] memory _rewardTokens, @@ -25,22 +39,51 @@ contract FraxUnifiedFarm_ERC20_Convex_Generic is FraxUnifiedFarm_ERC20 { { // COMMENTED OUT SO COMPILER DOESNT COMPLAIN. UNCOMMENT WHEN DEPLOYING - // // Convex crvUSD/FRAX + // Convex crvUSD/FRAX + // ============================================ // stakingToken = IConvexStakingWrapperFrax(_stakingToken); // curveToken = I2poolTokenNoLending(stakingToken.curveToken()); - // frax_is_token0 = true; - // // Convex FRAX/USDP + // Convex FRAX/PYUSD & NG pools + // ============================================ + // stakingToken = IConvexStakingWrapperFrax(_stakingToken); + // curveToken = ICurveStableSwapNG(stakingToken.curveToken()); + // curvePool = ICurveStableSwapNG(curveToken); + + // Convex FRAX/USDP + // ============================================ // stakingToken = IConvexStakingWrapperFrax(_stakingToken); // curveToken = I2poolToken(stakingToken.curveToken()); // curvePool = I2pool(curveToken.minter()); - // frax_is_token0 = true; - // // Convex triSDT + // Convex FRAX/FXB + // ============================================ + // stakingToken = IConvexStakingWrapperFrax(_stakingToken); + // curveToken = ICurveStableSwapNG(stakingToken.curveToken()); + // curvePool = ICurveStableSwapNG(curveToken); + + // Convex tricryptoFRAX & Convex triSDT + // ============================================ // stakingToken = IConvexStakingWrapperFrax(_stakingToken); // curveToken = ICurveTricryptoOptimizedWETH(address(stakingToken.curveToken())); // curvePool = ICurveTricryptoOptimizedWETH(address(stakingToken.curveToken())); - // frax_is_token0 = false; + + } + + // Convex tricryptoFRAX + // ============================================ + function getLatestETHPriceE8() public view returns (int) { + // Returns in E8 + (uint80 roundID, int price, , uint256 updatedAt, uint80 answeredInRound) = priceFeedETHUSD.latestRoundData(); + require(price >= 0 && updatedAt!= 0 && answeredInRound >= roundID, "Invalid chainlink price"); + + return price; + } + + function setETHUSDOracle(address _eth_usd_oracle_address) public onlyByOwnGov { + require(_eth_usd_oracle_address != address(0), "Zero address detected"); + + priceFeedETHUSD = AggregatorV3Interface(_eth_usd_oracle_address); } function fraxPerLPToken() public view override returns (uint256 frax_per_lp_token) { @@ -54,6 +97,37 @@ contract FraxUnifiedFarm_ERC20_Convex_Generic is FraxUnifiedFarm_ERC20 { // frax_per_lp_token = curvePool.get_virtual_price() / 2; // } + // Convex FRAX/PYUSD + // ============================================ + // { + // // Half of the LP should be FRAX + // // Using 0.50 * virtual price for gas savings + // frax_per_lp_token = curvePool.get_virtual_price() / 2; + // } + + // Convex FRAX/sDAI + // ============================================ + // { + // // Special calculation because FRAX != sDAI + // frax_per_lp_token = (IERC20(frax_address).balanceOf(address(curvePool)) * 1e18) / curvePool.totalSupply(); + // } + + // Convex FRAX/FPI NG + // ============================================ + // { + // // Count both FRAX and FPI as both are beneficial + // uint256 frax_balance = IERC20(frax_address).balanceOf(address(curvePool)); + // uint256 fpi_value_e36 = FPI.balanceOf(address(curvePool)) * FPI_ORACLE.currPegPrice(); + // frax_per_lp_token = ((frax_balance * 1e18) + fpi_value_e36) / curvePool.totalSupply(); + // } + + // Convex FRAX/FXB + // ============================================ + // { + // // Count both FRAX and FXB as both are beneficial + // frax_per_lp_token = curvePool.get_virtual_price(); + // } + // Convex triSDT // ============================================ // { @@ -62,5 +136,18 @@ contract FraxUnifiedFarm_ERC20_Convex_Generic is FraxUnifiedFarm_ERC20 { // frax_per_lp_token = curvePool.lp_price() / 3; // } + // Convex tricryptoFRAX + // ============================================ + // { + // // Get the value of frxETH in the pool + // uint256 frxETH_in_pool = IERC20(0x5E8422345238F34275888049021821E8E08CAa1f).balanceOf(address(curvePool)); + // uint256 frxETH_usd_val = (frxETH_in_pool * uint256(getLatestETHPriceE8())) / (1e8); + + // // Get the value of FRAX in the pool, assuming it is $1 + // uint256 frax_balance = IERC20(frax_address).balanceOf(address(curvePool)); + + // // Add both FRAX and frxETH $ values since both are beneficial + // frax_per_lp_token = ((frax_balance + frxETH_usd_val) * 1e18) / curvePool.totalSupply(); + // } } } diff --git a/src/hardhat/contracts/Staking/Variants/FraxUnifiedFarm_ERC20_Convex_frxETH.sol b/src/hardhat/contracts/Staking/Variants/FraxUnifiedFarm_ERC20_Convex_frxETH.sol index 8b007afe..cdac37d5 100755 --- a/src/hardhat/contracts/Staking/Variants/FraxUnifiedFarm_ERC20_Convex_frxETH.sol +++ b/src/hardhat/contracts/Staking/Variants/FraxUnifiedFarm_ERC20_Convex_frxETH.sol @@ -7,6 +7,7 @@ import "../../Misc_AMOs/convex/IConvexStakingWrapperFrax.sol"; import "../../Misc_AMOs/convex/IDepositToken.sol"; import "../../Misc_AMOs/curve/I2pool.sol"; import "../../Misc_AMOs/curve/I2poolToken.sol"; +import "../../Misc_AMOs/curve/ICurveStableSwapNG.sol"; import "../../Oracle/AggregatorV3Interface.sol"; import "../../ERC20/IERC20.sol"; @@ -35,9 +36,14 @@ contract FraxUnifiedFarm_ERC20_Convex_frxETH is FraxUnifiedFarm_ERC20 { // curvePool = ICurvefrxETHETHPool(curveToken.minter()); // Some Convex frxETH/XYZ (TOKEN = MINTER / POOL)) - stakingToken = IConvexStakingWrapperFrax(_stakingToken); - curveToken = I2poolToken(stakingToken.curveToken()); - curvePool = ICurvefrxETHETHPool(stakingToken.curveToken()); + // stakingToken = IConvexStakingWrapperFrax(_stakingToken); + // curveToken = I2poolToken(stakingToken.curveToken()); + // curvePool = ICurvefrxETHETHPool(stakingToken.curveToken()); + + // Convex frxETH/XYZ NGs (TOKEN = MINTER / POOL)) + // stakingToken = IConvexStakingWrapperFrax(_stakingToken); + // curveToken = ICurveStableSwapNG(stakingToken.curveToken()); + // curvePool = ICurveStableSwapNG(stakingToken.curveToken()); } function getLatestETHPriceE8() public view returns (int) { @@ -59,13 +65,13 @@ contract FraxUnifiedFarm_ERC20_Convex_frxETH is FraxUnifiedFarm_ERC20 { // Convex frxETH/XYZ // ============================================ - { - // Assume frxETH = ETH for pricing purposes - // Get the USD value of the frxETH per LP token - uint256 frxETH_in_pool = IERC20(0x5E8422345238F34275888049021821E8E08CAa1f).balanceOf(address(curvePool)); - uint256 frxETH_usd_val_per_lp_e8 = (frxETH_in_pool * uint256(getLatestETHPriceE8())) / curveToken.totalSupply(); - frax_per_lp_token = frxETH_usd_val_per_lp_e8 * (1e10); // We use USD as "Frax" here - } + // { + // // Assume frxETH = ETH for pricing purposes + // // Get the USD value of the frxETH per LP token + // uint256 frxETH_in_pool = IERC20(0x5E8422345238F34275888049021821E8E08CAa1f).balanceOf(address(curvePool)); + // uint256 frxETH_usd_val_per_lp_e8 = (frxETH_in_pool * uint256(getLatestETHPriceE8())) / curveToken.totalSupply(); + // frax_per_lp_token = frxETH_usd_val_per_lp_e8 * (1e10); // We use USD as "Frax" here + // } } } \ No newline at end of file diff --git a/src/hardhat/contracts/Staking/Variants/FraxUnifiedFarm_ERC20_Other.sol b/src/hardhat/contracts/Staking/Variants/FraxUnifiedFarm_ERC20_Other.sol new file mode 100755 index 00000000..8bf84a97 --- /dev/null +++ b/src/hardhat/contracts/Staking/Variants/FraxUnifiedFarm_ERC20_Other.sol @@ -0,0 +1,140 @@ +// SPDX-License-Identifier: GPL-2.0-or-later +pragma solidity >=0.8.0; + +import "../FraxUnifiedFarm_ERC20.sol"; +import "../../Oracle/AggregatorV3Interface.sol"; + +// Balancer +// ========================= +import "../../Misc_AMOs/balancer/IAuraGauge.sol"; +import "../../Misc_AMOs/balancer/IBalancerMinter.sol"; +import "../../Misc_AMOs/balancer/IBalancerVault.sol"; +import "../../Misc_AMOs/balancer/IComposableStablePool.sol"; + +// Bunni +// ========================= +// import "../../Misc_AMOs/bunni/IBunniTokenLP.sol"; +// import "../../Misc_AMOs/bunni/IBunniGauge.sol"; +// import "../../Misc_AMOs/bunni/IBunniLens.sol"; +// import "../../Misc_AMOs/bunni/IBunniMinter.sol"; +// import "../../Uniswap_V3/IUniswapV3Pool.sol"; + + +contract FraxUnifiedFarm_ERC20_Other is FraxUnifiedFarm_ERC20 { + + // frxETH Pricing + AggregatorV3Interface internal priceFeedETHUSD = AggregatorV3Interface(0x5f4eC3Df9cbd43714FE2740f5E3616155c5b8419); + + // Balancer + IComposableStablePool public lp_tkn; + IBalancerVault public vault; + + // Bunni + // IBunniTokenLP public lp_tkn; + // IUniswapV3Pool public univ3_pool; + + string public farm_type = "ERC20_Convex_Other"; + + constructor ( + address _owner, + address[] memory _rewardTokens, + address[] memory _rewardManagers, + uint256[] memory _rewardRates, + address[] memory _gaugeControllers, + address[] memory _rewardDistributors, + address _stakingToken + ) + FraxUnifiedFarm_ERC20(_owner , _rewardTokens, _rewardManagers, _rewardRates, _gaugeControllers, _rewardDistributors, _stakingToken) + { + // COMMENTED OUT SO COMPILER DOESNT COMPLAIN. UNCOMMENT WHEN DEPLOYING + + // Balancer + stakingToken = IAuraGauge(_stakingToken); + lp_tkn = IComposableStablePool(stakingToken.lp_token()); + vault = IBalancerVault(lp_tkn.getVault()); + + // Bunni + // stakingToken = IBunniGauge(_stakingToken); + // lp_tkn = IBunniTokenLP(stakingToken.lp_token()); + // univ3_pool = IUniswapV3Pool(lp_tkn.pool()); + // address token0 = univ3_pool.token0(); + // frax_is_token0 = (token0 == frax_address); + } + + // Balancer + // ---------------------------------------- + function setBalancerAddrs(address _minter, address _vault) public onlyByOwnGov { + minter = IBalancerMinter(_minter); + vault = IBalancerVault(_vault); + } + + // In case the rewards get screwed up + function toggleBalancer3rdPartyBalClaimer(address _claimer) public onlyByOwnGov { + minter.toggle_approve_mint(_claimer); + } + + // Bunni + // ---------------------------------------- + // function setBunniAddrs(address _lens, address _minter) public onlyByOwnGov { + // lens = IBunniLens(_lens); + // minter = IBunniMinter(_minter); + // } + + // // In case the rewards get screwed up + // function toggleBunni3rdPartyOLITClaimer(address _claimer) public onlyByOwnGov { + // minter.toggle_approve_mint(_claimer); + // } + + + // frxETH pricing + // ---------------------------------------- + function getLatestETHPriceE8() public view returns (int) { + // Returns in E8 + (uint80 roundID, int price, , uint256 updatedAt, uint80 answeredInRound) = priceFeedETHUSD.latestRoundData(); + require(price >= 0 && updatedAt!= 0 && answeredInRound >= roundID, "Invalid chainlink price"); + + return price; + } + + function setETHUSDOracle(address _eth_usd_oracle_address) public onlyByOwnGov { + require(_eth_usd_oracle_address != address(0), "Zero address detected"); + + priceFeedETHUSD = AggregatorV3Interface(_eth_usd_oracle_address); + } + + function fraxPerLPToken() public view override returns (uint256 frax_per_lp_token) { + // COMMENTED OUT SO COMPILER DOESNT COMPLAIN. UNCOMMENT WHEN DEPLOYING + + // Balancer frxETH-pxETH Gauge + // ============================================ + { + // Get the pool ID + bytes32 _poolId = lp_tkn.getPoolId(); + + // Get the balances of each token in the pool + ( , uint256[] memory balances, ) = vault.getPoolTokens(_poolId); + uint256 frxETH_in_pool = balances[1]; + uint256 frxETH_usd_value_e36 = (1e10) * (frxETH_in_pool * uint256(getLatestETHPriceE8())); + + // Calculate the frxETH value per "actual" LP + frax_per_lp_token = (frxETH_usd_value_e36) / lp_tkn.getActualSupply(); + } + + // Bunni FRAX/USDC Gauge + // ============================================ + // { + // // Get the BunniKey so you can query the lens + // IBunniLens.BunniKey memory bkey = IBunniLens.BunniKey({ + // pool: univ3_pool, + // tickLower: lp_tkn.tickLower(), + // tickUpper: lp_tkn.tickUpper() + // }); + // (, uint256 amt0, uint256 amt1) = lens.pricePerFullShare(bkey); + + // // Calc FRAX per LP + // if (frax_is_token0) frax_per_lp_token = amt0; + // else frax_per_lp_token = amt1; + // } + + } +} diff --git a/src/hardhat/contracts/Staking/Variants/FraxUnifiedFarm_ERC20_Other.sol.off b/src/hardhat/contracts/Staking/Variants/FraxUnifiedFarm_ERC20_Other.sol.off deleted file mode 100755 index b0e5657b..00000000 --- a/src/hardhat/contracts/Staking/Variants/FraxUnifiedFarm_ERC20_Other.sol.off +++ /dev/null @@ -1,69 +0,0 @@ -// SPDX-License-Identifier: GPL-2.0-or-later -pragma solidity >=0.8.0; - -import "../FraxUnifiedFarm_ERC20.sol"; -import "../../Misc_AMOs/bunni/IBunniTokenLP.sol"; -import "../../Misc_AMOs/bunni/IBunniGauge.sol"; -import "../../Misc_AMOs/bunni/IBunniLens.sol"; -import "../../Misc_AMOs/bunni/IBunniMinter.sol"; -import "../../Oracle/AggregatorV3Interface.sol"; -import "../../Uniswap_V3/IUniswapV3Pool.sol"; - -contract FraxUnifiedFarm_ERC20_Other is FraxUnifiedFarm_ERC20 { - - // Bunni - IBunniTokenLP public lp_tkn; - IUniswapV3Pool public univ3_pool; - - constructor ( - address _owner, - address[] memory _rewardTokens, - address[] memory _rewardManagers, - uint256[] memory _rewardRates, - address[] memory _gaugeControllers, - address[] memory _rewardDistributors, - address _stakingToken - ) - FraxUnifiedFarm_ERC20(_owner , _rewardTokens, _rewardManagers, _rewardRates, _gaugeControllers, _rewardDistributors, _stakingToken) - { - // COMMENTED OUT SO COMPILER DOESNT COMPLAIN. UNCOMMENT WHEN DEPLOYING - - // Bunni - stakingToken = IBunniGauge(_stakingToken); - lp_tkn = IBunniTokenLP(stakingToken.lp_token()); - univ3_pool = IUniswapV3Pool(lp_tkn.pool()); - address token0 = univ3_pool.token0(); - frax_is_token0 = (token0 == frax_address); - } - - function setBunniAddrs(address _lens, address _minter) public onlyByOwnGov { - lens = IBunniLens(_lens); - minter = IBunniMinter(_minter); - } - - // In case the rewards get screwed up - function toggleBunni3rdPartyOLITClaimer(address _claimer) public onlyByOwnGov { - minter.toggle_approve_mint(_claimer); - } - - function fraxPerLPToken() public view override returns (uint256 frax_per_lp_token) { - // COMMENTED OUT SO COMPILER DOESNT COMPLAIN. UNCOMMENT WHEN DEPLOYING - - // Bunni FRAX/USDC Gauge - // ============================================ - { - // Get the BunniKey so you can query the lens - IBunniLens.BunniKey memory bkey = IBunniLens.BunniKey({ - pool: univ3_pool, - tickLower: lp_tkn.tickLower(), - tickUpper: lp_tkn.tickUpper() - }); - (, uint256 amt0, uint256 amt1) = lens.pricePerFullShare(bkey); - - // Calc FRAX per LP - if (frax_is_token0) frax_per_lp_token = amt0; - else frax_per_lp_token = amt1; - } - - } -} diff --git a/src/hardhat/gnosis-safe-scripts/Bribe_Related/BSC/Reward_Collections.js b/src/hardhat/gnosis-safe-scripts/Bribe_Related/BSC/Reward_Collections.js index 6d18793d..6de53762 100644 --- a/src/hardhat/gnosis-safe-scripts/Bribe_Related/BSC/Reward_Collections.js +++ b/src/hardhat/gnosis-safe-scripts/Bribe_Related/BSC/Reward_Collections.js @@ -7,7 +7,6 @@ const { BigNumber } = require("@ethersproject/bignumber"); const util = require("util"); const chalk = require("chalk"); const fse = require("fs-extra"); -const { formatUnits } = require("ethers/lib/utils"); const constants = require(path.join(__dirname, '../../../../../dist/types/constants')); global.artifacts = artifacts; diff --git a/src/hardhat/gnosis-safe-scripts/Convex_Farm_Deployments/Script_Constants.js b/src/hardhat/gnosis-safe-scripts/Convex_Farm_Deployments/Script_Constants.js index 9e21d455..db62655f 100644 --- a/src/hardhat/gnosis-safe-scripts/Convex_Farm_Deployments/Script_Constants.js +++ b/src/hardhat/gnosis-safe-scripts/Convex_Farm_Deployments/Script_Constants.js @@ -7,7 +7,6 @@ const { BigNumber } = require("@ethersproject/bignumber"); const util = require("util"); const chalk = require("chalk"); const fse = require("fs-extra"); -const { formatUnits } = require("ethers/lib/utils"); const { BIG6, BIG18, stringifyReplacer, serializeJSONObject, calculateChecksum } = require("../utils/utils"); const constants = require(path.join(__dirname, '../../../../dist/types/constants')); const CONTRACT_ADDRESSES = constants.CONTRACT_ADDRESSES; @@ -17,19 +16,25 @@ let ADDRS_ETH_FARMS = ADDRS_ETH.staking_contracts; const wrapperAddrs = [ - // ADDRS_ETH_LPS['Convex stkcvxtriSDT'], - // ADDRS_ETH_LPS['Convex stkcvxmkUSDFRAXBP'], - ADDRS_ETH_LPS['Convex stkcvxfrxETHpETH'], - // ADDRS_ETH_LPS['Convex stkcvxfrxETHzETH'], - // ADDRS_ETH_LPS['Convex stkcvxGRAIFRAXBP'] + // ADDRS_ETH_LPS['Convex stkcvxFRAXFPI_NG'], + // ADDRS_ETH_LPS['Convex stkcvxFRAXPYUSD'], + // ADDRS_ETH_LPS['Convex stkcvxFRAXsDAI'], + // ADDRS_ETH_LPS['Convex stkcvxFRAXFXB_20240630'], + // ADDRS_ETH_LPS['Convex stkcvxFRAXFXB_20241231'], + // ADDRS_ETH_LPS['Convex stkcvxFRAXFXB_20261231'], + ADDRS_ETH_LPS['Convex stkcvxfrxETHpxETH'], + // ADDRS_ETH_LPS['Convex stkcvxtricryptoFRAX'], ]; const farmAddrs = [ - // ADDRS_ETH_FARMS['Convex stkcvxtriSDT'], - // ADDRS_ETH_FARMS['Convex stkcvxmkUSDFRAXBP'], - ADDRS_ETH_FARMS['Convex stkcvxfrxETHpETH'], - // ADDRS_ETH_FARMS['Convex stkcvxfrxETHzETH'], - // ADDRS_ETH_FARMS['Convex stkcvxGRAIFRAXBP'] + // ADDRS_ETH_FARMS['Convex stkcvxFRAXFPI_NG'], + // ADDRS_ETH_FARMS['Convex stkcvxFRAXPYUSD'], + // ADDRS_ETH_FARMS['Convex stkcvxFRAXsDAI'], + // ADDRS_ETH_FARMS['Convex stkcvxFRAXFXB_20240630'], + // ADDRS_ETH_FARMS['Convex stkcvxFRAXFXB_20241231'], + // ADDRS_ETH_FARMS['Convex stkcvxFRAXFXB_20261231'], + ADDRS_ETH_FARMS['Convex stkcvxfrxETHpxETH'], + // ADDRS_ETH_FARMS['Convex stkcvxtricryptoFRAX'], ]; diff --git a/src/hardhat/gnosis-safe-scripts/Convex_Farm_Deployments/Step_1_Vault_Gauge_Proxy.js b/src/hardhat/gnosis-safe-scripts/Convex_Farm_Deployments/Step_1_Vault_Gauge_Proxy.js index c1cdd0a5..0e11c8ef 100644 --- a/src/hardhat/gnosis-safe-scripts/Convex_Farm_Deployments/Step_1_Vault_Gauge_Proxy.js +++ b/src/hardhat/gnosis-safe-scripts/Convex_Farm_Deployments/Step_1_Vault_Gauge_Proxy.js @@ -7,7 +7,6 @@ const { BigNumber } = require("@ethersproject/bignumber"); const util = require("util"); const chalk = require("chalk"); const fse = require("fs-extra"); -const { formatUnits } = require("ethers/lib/utils"); const { BIG6, BIG18, stringifyReplacer, serializeJSONObject, calculateChecksum } = require("../utils/utils"); const constants = require(path.join(__dirname, '../../../../dist/types/constants')); const { wrapperAddrs, farmAddrs } = require("./Script_Constants"); diff --git a/src/hardhat/gnosis-safe-scripts/Convex_Farm_Deployments/Step_1_Vault_Gauge_Proxy.json b/src/hardhat/gnosis-safe-scripts/Convex_Farm_Deployments/Step_1_Vault_Gauge_Proxy.json index 3382329b..3e640c70 100644 --- a/src/hardhat/gnosis-safe-scripts/Convex_Farm_Deployments/Step_1_Vault_Gauge_Proxy.json +++ b/src/hardhat/gnosis-safe-scripts/Convex_Farm_Deployments/Step_1_Vault_Gauge_Proxy.json @@ -1 +1 @@ -{"version":"1.0","chainId":"1","createdAt":1699569887000,"meta":{"name":"Transactions Batch","description":"","txBuilderVersion":"1.14.1","createdFromSafeAddress":"0xB1748C79709f4Ba2Dd82834B8c82D4a505003f27","createdFromOwnerAddress":"","checksum":"0x09b10bddb04abf13ae04d5ed4242f9177293f83a4cf5c2e003cb07fd1953a97d"},"transactions":[{"to":"0xeCF134dF5DE1e0E12A441D446ff81994Cb0301A2","value":"0","data":null,"contractMethod":{"inputs":[{"internalType":"address","name":"_vault","type":"address"}],"name":"setVault","payable":false},"contractInputsValues":{"_vault":"0xD591A551bC1776A7Ce066a5Df7640266afc850bF"}},{"to":"0x3669C421b77340B2979d1A00a792CC2ee0FcE737","value":"0","data":null,"contractMethod":{"inputs":[{"name":"addr","type":"address"},{"name":"gauge_type","type":"int128"},{"name":"weight","type":"uint256"}],"name":"add_gauge","payable":false},"contractInputsValues":{"addr":"0xD591A551bC1776A7Ce066a5Df7640266afc850bF","gauge_type":"0","weight":"1000"}},{"to":"0xD591A551bC1776A7Ce066a5Df7640266afc850bF","value":"0","data":null,"contractMethod":{"inputs":[{"internalType":"address","name":"reward_token_address","type":"address"},{"internalType":"uint256","name":"_new_rate","type":"uint256"},{"internalType":"address","name":"_gauge_controller_address","type":"address"},{"internalType":"address","name":"_rewards_distributor_address","type":"address"}],"name":"setRewardVars","payable":false},"contractInputsValues":{"reward_token_address":"0x3432B6A60D23Ca0dFCa7761B7ab56459D9C964D0","_new_rate":"0","_gauge_controller_address":"0x3669C421b77340B2979d1A00a792CC2ee0FcE737","_rewards_distributor_address":"0x278dC748edA1d8eFEf1aDFB518542612b49Fcd34"}},{"to":"0xD591A551bC1776A7Ce066a5Df7640266afc850bF","value":"0","data":null,"contractMethod":{"inputs":[{"internalType":"address","name":"_proxy_addr","type":"address"}],"name":"toggleValidVeFXSProxy","payable":false},"contractInputsValues":{"_proxy_addr":"0x59CFCD384746ec3035299D90782Be065e466800B"}}]} \ No newline at end of file +{"version":"1.0","chainId":"1","createdAt":1704854327000,"meta":{"name":"Transactions Batch","description":"","txBuilderVersion":"1.14.1","createdFromSafeAddress":"0xB1748C79709f4Ba2Dd82834B8c82D4a505003f27","createdFromOwnerAddress":"","checksum":"0xc9ce505f3ebe191f4e5db6bddd93ba4c4b9ee62d073866d8e1437e8c619e3bf4"},"transactions":[{"to":"0x51521Da84Cbce1B4A930B55d8D896b590532f7A6","value":"0","data":null,"contractMethod":{"inputs":[{"internalType":"address","name":"_vault","type":"address"}],"name":"setVault","payable":false},"contractInputsValues":{"_vault":"0xC68A0174401AE002D6DbA8C9788C6dF4c807BD52"}},{"to":"0x3669C421b77340B2979d1A00a792CC2ee0FcE737","value":"0","data":null,"contractMethod":{"inputs":[{"name":"addr","type":"address"},{"name":"gauge_type","type":"int128"},{"name":"weight","type":"uint256"}],"name":"add_gauge","payable":false},"contractInputsValues":{"addr":"0xC68A0174401AE002D6DbA8C9788C6dF4c807BD52","gauge_type":"0","weight":"1000"}},{"to":"0xC68A0174401AE002D6DbA8C9788C6dF4c807BD52","value":"0","data":null,"contractMethod":{"inputs":[{"internalType":"address","name":"reward_token_address","type":"address"},{"internalType":"uint256","name":"_new_rate","type":"uint256"},{"internalType":"address","name":"_gauge_controller_address","type":"address"},{"internalType":"address","name":"_rewards_distributor_address","type":"address"}],"name":"setRewardVars","payable":false},"contractInputsValues":{"reward_token_address":"0x3432B6A60D23Ca0dFCa7761B7ab56459D9C964D0","_new_rate":"0","_gauge_controller_address":"0x3669C421b77340B2979d1A00a792CC2ee0FcE737","_rewards_distributor_address":"0x278dC748edA1d8eFEf1aDFB518542612b49Fcd34"}},{"to":"0xC68A0174401AE002D6DbA8C9788C6dF4c807BD52","value":"0","data":null,"contractMethod":{"inputs":[{"internalType":"address","name":"_proxy_addr","type":"address"}],"name":"toggleValidVeFXSProxy","payable":false},"contractInputsValues":{"_proxy_addr":"0x59CFCD384746ec3035299D90782Be065e466800B"}}]} \ No newline at end of file diff --git a/src/hardhat/gnosis-safe-scripts/Convex_Farm_Deployments/Step_2_CRVCVXDistro_Contracts.js b/src/hardhat/gnosis-safe-scripts/Convex_Farm_Deployments/Step_2_CRVCVXDistro_Contracts.js index d0089b99..37ef9561 100644 --- a/src/hardhat/gnosis-safe-scripts/Convex_Farm_Deployments/Step_2_CRVCVXDistro_Contracts.js +++ b/src/hardhat/gnosis-safe-scripts/Convex_Farm_Deployments/Step_2_CRVCVXDistro_Contracts.js @@ -7,7 +7,6 @@ const { BigNumber } = require("@ethersproject/bignumber"); const util = require("util"); const chalk = require("chalk"); const fse = require("fs-extra"); -const { formatUnits } = require("ethers/lib/utils"); const { BIG6, BIG18, stringifyReplacer, serializeJSONObject, calculateChecksum } = require("../utils/utils"); const { wrapperAddrs, farmAddrs } = require("./Script_Constants"); const constants = require(path.join(__dirname, '../../../../dist/types/constants')); diff --git a/src/hardhat/gnosis-safe-scripts/Convex_Farm_Deployments/Step_2_CRVCVXDistro_Contracts.json b/src/hardhat/gnosis-safe-scripts/Convex_Farm_Deployments/Step_2_CRVCVXDistro_Contracts.json index c3813757..35575445 100644 --- a/src/hardhat/gnosis-safe-scripts/Convex_Farm_Deployments/Step_2_CRVCVXDistro_Contracts.json +++ b/src/hardhat/gnosis-safe-scripts/Convex_Farm_Deployments/Step_2_CRVCVXDistro_Contracts.json @@ -1 +1 @@ -{"version":"1.0","chainId":"1","createdAt":1699642031000,"meta":{"name":"Transactions Batch","description":"","txBuilderVersion":"1.14.1","createdFromSafeAddress":"0xB1748C79709f4Ba2Dd82834B8c82D4a505003f27","createdFromOwnerAddress":"","checksum":"0xf2ba90c6758070dae0322133e056648b0f038270c3ea6fd36e87ab63b986a86a"},"transactions":[{"to":"0xD591A551bC1776A7Ce066a5Df7640266afc850bF","value":"0","data":null,"contractMethod":{"inputs":[{"internalType":"address","name":"reward_token_address","type":"address"},{"internalType":"address","name":"new_manager_address","type":"address"}],"name":"changeTokenManager","payable":false},"contractInputsValues":{"reward_token_address":"0xd533a949740bb3306d119cc777fa900ba034cd52","new_manager_address":"0x082F707e6D93648e12563C871Cc98Cc9539Fd062"}},{"to":"0xD591A551bC1776A7Ce066a5Df7640266afc850bF","value":"0","data":null,"contractMethod":{"inputs":[{"internalType":"address","name":"reward_token_address","type":"address"},{"internalType":"uint256","name":"_new_rate","type":"uint256"},{"internalType":"address","name":"_gauge_controller_address","type":"address"},{"internalType":"address","name":"_rewards_distributor_address","type":"address"}],"name":"setRewardVars","payable":false},"contractInputsValues":{"reward_token_address":"0xd533a949740bb3306d119cc777fa900ba034cd52","_new_rate":"0","_gauge_controller_address":"0x0000000000000000000000000000000000000000","_rewards_distributor_address":"0x082F707e6D93648e12563C871Cc98Cc9539Fd062"}},{"to":"0xD591A551bC1776A7Ce066a5Df7640266afc850bF","value":"0","data":null,"contractMethod":{"inputs":[{"internalType":"address","name":"reward_token_address","type":"address"},{"internalType":"address","name":"new_manager_address","type":"address"}],"name":"changeTokenManager","payable":false},"contractInputsValues":{"reward_token_address":"0x4e3fbd56cd56c3e72c1403e103b45db9da5b9d2b","new_manager_address":"0x082F707e6D93648e12563C871Cc98Cc9539Fd062"}},{"to":"0xD591A551bC1776A7Ce066a5Df7640266afc850bF","value":"0","data":null,"contractMethod":{"inputs":[{"internalType":"address","name":"reward_token_address","type":"address"},{"internalType":"uint256","name":"_new_rate","type":"uint256"},{"internalType":"address","name":"_gauge_controller_address","type":"address"},{"internalType":"address","name":"_rewards_distributor_address","type":"address"}],"name":"setRewardVars","payable":false},"contractInputsValues":{"reward_token_address":"0x4e3fbd56cd56c3e72c1403e103b45db9da5b9d2b","_new_rate":"0","_gauge_controller_address":"0x0000000000000000000000000000000000000000","_rewards_distributor_address":"0x082F707e6D93648e12563C871Cc98Cc9539Fd062"}}]} \ No newline at end of file +{"version":"1.0","chainId":"1","createdAt":1704926255000,"meta":{"name":"Transactions Batch","description":"","txBuilderVersion":"1.14.1","createdFromSafeAddress":"0xB1748C79709f4Ba2Dd82834B8c82D4a505003f27","createdFromOwnerAddress":"","checksum":"0xb74bcb708b499b85326b8528032862bc29405c11994aee1a3f84b7fc7f87d889"},"transactions":[{"to":"0xC68A0174401AE002D6DbA8C9788C6dF4c807BD52","value":"0","data":null,"contractMethod":{"inputs":[{"internalType":"address","name":"reward_token_address","type":"address"},{"internalType":"address","name":"new_manager_address","type":"address"}],"name":"changeTokenManager","payable":false},"contractInputsValues":{"reward_token_address":"0xd533a949740bb3306d119cc777fa900ba034cd52","new_manager_address":"0xE2CAFd4290c1df48650a39fAc1F8B98E8CF2DF71"}},{"to":"0xC68A0174401AE002D6DbA8C9788C6dF4c807BD52","value":"0","data":null,"contractMethod":{"inputs":[{"internalType":"address","name":"reward_token_address","type":"address"},{"internalType":"uint256","name":"_new_rate","type":"uint256"},{"internalType":"address","name":"_gauge_controller_address","type":"address"},{"internalType":"address","name":"_rewards_distributor_address","type":"address"}],"name":"setRewardVars","payable":false},"contractInputsValues":{"reward_token_address":"0xd533a949740bb3306d119cc777fa900ba034cd52","_new_rate":"0","_gauge_controller_address":"0x0000000000000000000000000000000000000000","_rewards_distributor_address":"0xE2CAFd4290c1df48650a39fAc1F8B98E8CF2DF71"}},{"to":"0xC68A0174401AE002D6DbA8C9788C6dF4c807BD52","value":"0","data":null,"contractMethod":{"inputs":[{"internalType":"address","name":"reward_token_address","type":"address"},{"internalType":"address","name":"new_manager_address","type":"address"}],"name":"changeTokenManager","payable":false},"contractInputsValues":{"reward_token_address":"0x4e3fbd56cd56c3e72c1403e103b45db9da5b9d2b","new_manager_address":"0xE2CAFd4290c1df48650a39fAc1F8B98E8CF2DF71"}},{"to":"0xC68A0174401AE002D6DbA8C9788C6dF4c807BD52","value":"0","data":null,"contractMethod":{"inputs":[{"internalType":"address","name":"reward_token_address","type":"address"},{"internalType":"uint256","name":"_new_rate","type":"uint256"},{"internalType":"address","name":"_gauge_controller_address","type":"address"},{"internalType":"address","name":"_rewards_distributor_address","type":"address"}],"name":"setRewardVars","payable":false},"contractInputsValues":{"reward_token_address":"0x4e3fbd56cd56c3e72c1403e103b45db9da5b9d2b","_new_rate":"0","_gauge_controller_address":"0x0000000000000000000000000000000000000000","_rewards_distributor_address":"0xE2CAFd4290c1df48650a39fAc1F8B98E8CF2DF71"}}]} \ No newline at end of file diff --git a/src/hardhat/gnosis-safe-scripts/Convex_Farm_Deployments/Step_3_RewDist_Seeding_Sync.js b/src/hardhat/gnosis-safe-scripts/Convex_Farm_Deployments/Step_3_RewDist_Seeding_Sync.js index 55226e9c..6d3b6c2a 100644 --- a/src/hardhat/gnosis-safe-scripts/Convex_Farm_Deployments/Step_3_RewDist_Seeding_Sync.js +++ b/src/hardhat/gnosis-safe-scripts/Convex_Farm_Deployments/Step_3_RewDist_Seeding_Sync.js @@ -7,7 +7,6 @@ const { BigNumber } = require("@ethersproject/bignumber"); const util = require("util"); const chalk = require("chalk"); const fse = require("fs-extra"); -const { formatUnits } = require("ethers/lib/utils"); const { BIG6, BIG18, stringifyReplacer, serializeJSONObject, calculateChecksum } = require("../utils/utils"); const { wrapperAddrs, farmAddrs } = require("./Script_Constants"); const constants = require(path.join(__dirname, '../../../../dist/types/constants')); diff --git a/src/hardhat/gnosis-safe-scripts/Convex_Farm_Deployments/Step_3_RewDist_Seeding_Sync.json b/src/hardhat/gnosis-safe-scripts/Convex_Farm_Deployments/Step_3_RewDist_Seeding_Sync.json index ec3787dd..db2412ba 100644 --- a/src/hardhat/gnosis-safe-scripts/Convex_Farm_Deployments/Step_3_RewDist_Seeding_Sync.json +++ b/src/hardhat/gnosis-safe-scripts/Convex_Farm_Deployments/Step_3_RewDist_Seeding_Sync.json @@ -1 +1 @@ -{"version":"1.0","chainId":"1","createdAt":1699662839000,"meta":{"name":"Transactions Batch","description":"","txBuilderVersion":"1.14.1","createdFromSafeAddress":"0xB1748C79709f4Ba2Dd82834B8c82D4a505003f27","createdFromOwnerAddress":"","checksum":"0xbbef45c5abc8ce162d4458e12322d25c157a0dd07f571d4162bc70f339bb2d96"},"transactions":[{"to":"0x278dC748edA1d8eFEf1aDFB518542612b49Fcd34","value":"0","data":null,"contractMethod":{"inputs":[{"internalType":"address","name":"_gauge_address","type":"address"},{"internalType":"bool","name":"_is_middleman","type":"bool"},{"internalType":"bool","name":"_is_active","type":"bool"}],"name":"setGaugeState","payable":false},"contractInputsValues":{"_gauge_address":"0xD591A551bC1776A7Ce066a5Df7640266afc850bF","_is_middleman":"false","_is_active":"true"}},{"to":"0x3432B6A60D23Ca0dFCa7761B7ab56459D9C964D0","value":"0","data":null,"contractMethod":{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","payable":false},"contractInputsValues":{"recipient":"0xD591A551bC1776A7Ce066a5Df7640266afc850bF","amount":"1000000000000000000"}},{"to":"0xD591A551bC1776A7Ce066a5Df7640266afc850bF","value":"0","data":null,"contractMethod":{"inputs":[],"name":"sync","payable":false},"contractInputsValues":{}}]} \ No newline at end of file +{"version":"1.0","chainId":"1","createdAt":1704935075000,"meta":{"name":"Transactions Batch","description":"","txBuilderVersion":"1.14.1","createdFromSafeAddress":"0xB1748C79709f4Ba2Dd82834B8c82D4a505003f27","createdFromOwnerAddress":"","checksum":"0x11a9445f8f0e903d3f160d98092136ff7a20725e2eff6ae28d3a7b888c4e7cdb"},"transactions":[{"to":"0x278dC748edA1d8eFEf1aDFB518542612b49Fcd34","value":"0","data":null,"contractMethod":{"inputs":[{"internalType":"address","name":"_gauge_address","type":"address"},{"internalType":"bool","name":"_is_middleman","type":"bool"},{"internalType":"bool","name":"_is_active","type":"bool"}],"name":"setGaugeState","payable":false},"contractInputsValues":{"_gauge_address":"0xC68A0174401AE002D6DbA8C9788C6dF4c807BD52","_is_middleman":"false","_is_active":"true"}},{"to":"0x3432B6A60D23Ca0dFCa7761B7ab56459D9C964D0","value":"0","data":null,"contractMethod":{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","payable":false},"contractInputsValues":{"recipient":"0xC68A0174401AE002D6DbA8C9788C6dF4c807BD52","amount":"1000000000000000000"}},{"to":"0xC68A0174401AE002D6DbA8C9788C6dF4c807BD52","value":"0","data":null,"contractMethod":{"inputs":[],"name":"sync","payable":false},"contractInputsValues":{}}]} \ No newline at end of file diff --git a/src/hardhat/gnosis-safe-scripts/Frax_Comptroller_Routine/Sunday_Part_1.js b/src/hardhat/gnosis-safe-scripts/Frax_Comptroller_Routine/Sunday_Part_1.js index 5b811c95..db050273 100644 --- a/src/hardhat/gnosis-safe-scripts/Frax_Comptroller_Routine/Sunday_Part_1.js +++ b/src/hardhat/gnosis-safe-scripts/Frax_Comptroller_Routine/Sunday_Part_1.js @@ -7,7 +7,7 @@ const { BigNumber } = require("@ethersproject/bignumber"); const util = require("util"); const chalk = require("chalk"); const fse = require("fs-extra"); -const { formatUnits } = require("ethers/lib/utils"); +const { formatUnits } = require("ethers/lib.commonjs/utils"); const { BIG6, BIG18, stringifyReplacer, serializeJSONObject, calculateChecksum, GetCVXMintAmount } = require("../utils/utils"); global.artifacts = artifacts; global.web3 = web3; @@ -220,9 +220,9 @@ async function main() { const crv_from_convex_frax_usdc = BigNumber.from(convex_frax_usdc_rewards[1][1]); const cvx_from_convex_frax_usdc = BigNumber.from(convex_frax_usdc_rewards[1][2]); - // FRAXBP rewards: 33.3% of CRV and 100% of CVX is saved/reinvested - summary_info.crv_to_save = summary_info.crv_to_save.add(crv_from_convex_frax_usdc.mul(333).div(1000)); - summary_info.crv_to_sell = summary_info.crv_to_sell.add(crv_from_convex_frax_usdc.mul(666).div(1000)); + // FRAXBP rewards: 0% of CRV and 100% of CVX is saved/reinvested + summary_info.crv_to_save = summary_info.crv_to_save.add(crv_from_convex_frax_usdc.mul(0).div(1000)); // 0% + summary_info.crv_to_sell = summary_info.crv_to_sell.add(crv_from_convex_frax_usdc.mul(1000).div(1000)); // 100% summary_info.cvx_to_lock = summary_info.cvx_to_lock.add(cvx_from_convex_frax_usdc); console.log(`----------- Convex Frax FRAX/USDC (stkcvxFRAXBP) -----------`); console.log(`CRV: ${formatUnits(crv_from_convex_frax_usdc, 18)}`); @@ -302,7 +302,11 @@ async function main() { const convex_cvxalusd_frax3CRV = new ethers.Contract("0x26598e3E511ADFadefD70ab2C3475Ff741741104", IConvexBaseRewardPool_ABI).connect(owner); const convex_cvxgusd_frax3CRV = new ethers.Contract("0x47809eE386D1dEC29c0b13f21ba30F564517538B", IConvexBaseRewardPool_ABI).connect(owner); const convex_cvxlusd_frax3CRV = new ethers.Contract("0x053e1dad223A206e6BCa24C77786bb69a10e427d", IConvexBaseRewardPool_ABI).connect(owner); - + const convex_cvxFRAXFPI = new ethers.Contract("0x062450B06EB92F1C4E227C41c987ed97c93Ae232", IConvexBaseRewardPool_ABI).connect(owner); + const convex_cvxFRAXPYUSD = new ethers.Contract("0xB10a6e39Ed8a66fEd3aAef3866a95611a49B9a95", IConvexBaseRewardPool_ABI).connect(owner); + const convex_cvxFRAXsDAI = new ethers.Contract("0xE627082369689b2B86D948c377A4aE4e739C59eE", IConvexBaseRewardPool_ABI).connect(owner); + + // Get earned CRV const cvx_crv_claim_all_rews = await Promise.all([ convex_cvxcrvfrax_brp.earned("0xB1748C79709f4Ba2Dd82834B8c82D4a505003f27"), @@ -310,16 +314,23 @@ async function main() { convex_cvxalusd_frax3CRV.earned("0xB1748C79709f4Ba2Dd82834B8c82D4a505003f27"), convex_cvxgusd_frax3CRV.earned("0xB1748C79709f4Ba2Dd82834B8c82D4a505003f27"), convex_cvxlusd_frax3CRV.earned("0xB1748C79709f4Ba2Dd82834B8c82D4a505003f27"), + convex_cvxFRAXFPI.earned("0xB1748C79709f4Ba2Dd82834B8c82D4a505003f27"), + convex_cvxFRAXPYUSD.earned("0xB1748C79709f4Ba2Dd82834B8c82D4a505003f27"), + convex_cvxFRAXsDAI.earned("0xB1748C79709f4Ba2Dd82834B8c82D4a505003f27"), ]) // FRAXBP rewards get saved/reinvested, everything else is sold. // CRV - summary_info.crv_to_save = summary_info.crv_to_save.add(cvx_crv_claim_all_rews[0]); + // summary_info.crv_to_save = summary_info.crv_to_save.add(cvx_crv_claim_all_rews[0]); summary_info.crv_to_sell = summary_info.crv_to_sell + .add(cvx_crv_claim_all_rews[0]) .add(cvx_crv_claim_all_rews[1]) .add(cvx_crv_claim_all_rews[2]) .add(cvx_crv_claim_all_rews[3]) - .add(cvx_crv_claim_all_rews[4]); + .add(cvx_crv_claim_all_rews[4]) + .add(cvx_crv_claim_all_rews[5]) + .add(cvx_crv_claim_all_rews[6]) + .add(cvx_crv_claim_all_rews[7]); // CVX summary_info.cvx_to_lock = summary_info.cvx_to_lock.add(GetCVXMintAmount(cvx_crv_claim_all_rews[0], cvx_total_supply)) @@ -327,7 +338,10 @@ async function main() { .add(GetCVXMintAmount(cvx_crv_claim_all_rews[1], cvx_total_supply)) .add(GetCVXMintAmount(cvx_crv_claim_all_rews[2], cvx_total_supply)) .add(GetCVXMintAmount(cvx_crv_claim_all_rews[3], cvx_total_supply)) - .add(GetCVXMintAmount(cvx_crv_claim_all_rews[4], cvx_total_supply)); + .add(GetCVXMintAmount(cvx_crv_claim_all_rews[4], cvx_total_supply)) + .add(GetCVXMintAmount(cvx_crv_claim_all_rews[5], cvx_total_supply)) + .add(GetCVXMintAmount(cvx_crv_claim_all_rews[6], cvx_total_supply)) + .add(GetCVXMintAmount(cvx_crv_claim_all_rews[7], cvx_total_supply)); console.log(`----------- Convex Curve Others -----------`); console.log(`convex_cvxcrvfrax_brp: ${formatUnits(cvx_crv_claim_all_rews[0], 18)} CRV, ${formatUnits(GetCVXMintAmount(cvx_crv_claim_all_rews[0], cvx_total_supply), 18)} CVX`); @@ -335,6 +349,10 @@ async function main() { console.log(`convex_cvxalusd_frax3CRV: ${formatUnits(cvx_crv_claim_all_rews[2], 18)} CRV, ${formatUnits(GetCVXMintAmount(cvx_crv_claim_all_rews[2], cvx_total_supply), 18)} CVX`); console.log(`convex_cvxgusd_frax3CRV: ${formatUnits(cvx_crv_claim_all_rews[3], 18)} CRV, ${formatUnits(GetCVXMintAmount(cvx_crv_claim_all_rews[3], cvx_total_supply), 18)} CVX`); console.log(`convex_cvxlusd_frax3CRV: ${formatUnits(cvx_crv_claim_all_rews[4], 18)} CRV, ${formatUnits(GetCVXMintAmount(cvx_crv_claim_all_rews[4], cvx_total_supply), 18)} CVX`); + console.log(`convex_cvxFRAXFPI: ${formatUnits(cvx_crv_claim_all_rews[5], 18)} CRV, ${formatUnits(GetCVXMintAmount(cvx_crv_claim_all_rews[5], cvx_total_supply), 18)} CVX`); + console.log(`convex_cvxFRAXPYUSD: ${formatUnits(cvx_crv_claim_all_rews[6], 18)} CRV, ${formatUnits(GetCVXMintAmount(cvx_crv_claim_all_rews[6], cvx_total_supply), 18)} CVX`); + console.log(`convex_cvxFRAXsDAI: ${formatUnits(cvx_crv_claim_all_rews[7], 18)} CRV, ${formatUnits(GetCVXMintAmount(cvx_crv_claim_all_rews[7], cvx_total_supply), 18)} CVX`); + batch_json.transactions.push({ "to": "0x3f29cB4111CbdA8081642DA1f75B3c12DECf2516", @@ -392,7 +410,7 @@ async function main() { "payable": false }, "contractInputsValues": { - "rewardContracts": "[\"0x7e880867363A7e321f5d260Cade2B0Bb2F717B02\", \"0x6991C1CD588c4e6f6f1de3A0bac5B8BbAb7aAF6d\", \"0x26598e3E511ADFadefD70ab2C3475Ff741741104\", \"0x47809eE386D1dEC29c0b13f21ba30F564517538B\", \"0x053e1dad223A206e6BCa24C77786bb69a10e427d\"]", + "rewardContracts": "[\"0x7e880867363A7e321f5d260Cade2B0Bb2F717B02\", \"0x6991C1CD588c4e6f6f1de3A0bac5B8BbAb7aAF6d\", \"0x26598e3E511ADFadefD70ab2C3475Ff741741104\", \"0x47809eE386D1dEC29c0b13f21ba30F564517538B\", \"0x053e1dad223A206e6BCa24C77786bb69a10e427d\", \"0x062450B06EB92F1C4E227C41c987ed97c93Ae232\", \"0xB10a6e39Ed8a66fEd3aAef3866a95611a49B9a95\", \"0xE627082369689b2B86D948c377A4aE4e739C59eE\"]", "extraRewardContracts": "[]", "tokenRewardContracts": "[]", "tokenRewardTokens": "[]", @@ -853,7 +871,7 @@ async function main() { // =============================================================================== // CRV (For SAVED CRV, 100% goes to voter proxy for now. We are not adding to our cvxCRV stake) summary_info.crv_to_convert_to_cvxcrv = summary_info.crv_to_save.mul(0).div(100); // 0% - summary_info.crv_to_send_to_curve_voter_proxy = summary_info.crv_to_save.mul(100).div(100); // 100% + summary_info.crv_to_send_to_curve_voter_proxy = summary_info.crv_to_save.mul(0).div(100); // 0% summary_info.crv_to_save = BigNumber.from(0); console.log(`\n----------- Post Reward Collection Status -----------`); @@ -865,52 +883,55 @@ async function main() { // Curve Voter Proxy (transfer CRV to proxy) // ===================================== - batch_json.transactions.push({ - "to": "0xD533a949740bb3306d119CC777fa900bA034cd52", - "value": "0", - "data": null, - "contractMethod": { - "inputs": [ - { - "name": "_to", - "type": "address" - }, - { - "name": "_value", - "type": "uint256" - } - ], - "name": "transfer", - "payable": false - }, - "contractInputsValues": { - "_to": "0x847FA1A5337C7f24D7066E467F2e2A0f969Ca79F", - "_value": summary_info.crv_to_send_to_curve_voter_proxy.toString(), - } - }); - - // Curve Voter Proxy Lock - // ===================================== - batch_json.transactions.push({ - "to": "0x847FA1A5337C7f24D7066E467F2e2A0f969Ca79F", - "value": "0", - "data": null, - "contractMethod": { - "inputs": [ - { - "internalType": "uint256", - "name": "_value", - "type": "uint256" - } - ], - "name": "increaseAmount", - "payable": false - }, - "contractInputsValues": { - "_value": summary_info.crv_to_send_to_curve_voter_proxy.toString(), - } - }); - summary_info.crv_to_send_to_curve_voter_proxy = BigNumber.from(0); + if (summary_info.crv_to_send_to_curve_voter_proxy > 0){ + batch_json.transactions.push({ + "to": "0xD533a949740bb3306d119CC777fa900bA034cd52", + "value": "0", + "data": null, + "contractMethod": { + "inputs": [ + { + "name": "_to", + "type": "address" + }, + { + "name": "_value", + "type": "uint256" + } + ], + "name": "transfer", + "payable": false + }, + "contractInputsValues": { + "_to": "0x847FA1A5337C7f24D7066E467F2e2A0f969Ca79F", + "_value": summary_info.crv_to_send_to_curve_voter_proxy.toString(), + } + }); + + // Curve Voter Proxy Lock + // ===================================== + batch_json.transactions.push({ + "to": "0x847FA1A5337C7f24D7066E467F2e2A0f969Ca79F", + "value": "0", + "data": null, + "contractMethod": { + "inputs": [ + { + "internalType": "uint256", + "name": "_value", + "type": "uint256" + } + ], + "name": "increaseAmount", + "payable": false + }, + "contractInputsValues": { + "_value": summary_info.crv_to_send_to_curve_voter_proxy.toString(), + } + }); + summary_info.crv_to_send_to_curve_voter_proxy = BigNumber.from(0); + } + summary_info.crv_new_voter_proxy_add_done = true; // Convex Re-lock (should already be approved) diff --git a/src/hardhat/gnosis-safe-scripts/Frax_Comptroller_Routine/Sunday_Part_1.json b/src/hardhat/gnosis-safe-scripts/Frax_Comptroller_Routine/Sunday_Part_1.json index 8b80de96..e4017913 100644 --- a/src/hardhat/gnosis-safe-scripts/Frax_Comptroller_Routine/Sunday_Part_1.json +++ b/src/hardhat/gnosis-safe-scripts/Frax_Comptroller_Routine/Sunday_Part_1.json @@ -1 +1 @@ -{"version":"1.0","chainId":"1","createdAt":1702150175000,"meta":{"name":"Transactions Batch","description":"","txBuilderVersion":"1.14.1","createdFromSafeAddress":"0xB1748C79709f4Ba2Dd82834B8c82D4a505003f27","createdFromOwnerAddress":"","checksum":"0x4ef80fa7ecc6071c138bf5adce7eed174981b8005661158684fc96916137b3f9"},"transactions":[{"to":"0x2AA609715488B09EFA93883759e8B089FBa11296","value":"0","data":null,"contractMethod":{"inputs":[],"name":"getReward","payable":false},"contractInputsValues":null},{"to":"0xD25D60aBafC220dd6F7BA37baD23e1105Db05a06","value":"0","data":null,"contractMethod":{"inputs":[],"name":"getReward","payable":false},"contractInputsValues":null},{"to":"0x3f29cB4111CbdA8081642DA1f75B3c12DECf2516","value":"0","data":null,"contractMethod":{"inputs":[{"internalType":"address[]","name":"rewardContracts","type":"address[]"},{"internalType":"address[]","name":"extraRewardContracts","type":"address[]"},{"internalType":"address[]","name":"tokenRewardContracts","type":"address[]"},{"internalType":"address[]","name":"tokenRewardTokens","type":"address[]"},{"internalType":"uint256","name":"depositCrvMaxAmount","type":"uint256"},{"internalType":"uint256","name":"minAmountOut","type":"uint256"},{"internalType":"uint256","name":"depositCvxMaxAmount","type":"uint256"},{"internalType":"uint256","name":"spendCvxAmount","type":"uint256"},{"internalType":"uint256","name":"options","type":"uint256"}],"name":"claimRewards","payable":false},"contractInputsValues":{"rewardContracts":"[\"0x7e880867363A7e321f5d260Cade2B0Bb2F717B02\", \"0x6991C1CD588c4e6f6f1de3A0bac5B8BbAb7aAF6d\", \"0x26598e3E511ADFadefD70ab2C3475Ff741741104\", \"0x47809eE386D1dEC29c0b13f21ba30F564517538B\", \"0x053e1dad223A206e6BCa24C77786bb69a10e427d\"]","extraRewardContracts":"[]","tokenRewardContracts":"[]","tokenRewardTokens":"[]","depositCrvMaxAmount":"0","minAmountOut":"0","depositCvxMaxAmount":"0","spendCvxAmount":"0","options":"0"}},{"to":"0xaa0C3f5F7DFD688C6E646F66CD2a6B66ACdbE434","value":"0","data":null,"contractMethod":{"inputs":[{"internalType":"address","name":"_account","type":"address"}],"name":"getReward","payable":false},"contractInputsValues":{"_account":"0xB1748C79709f4Ba2Dd82834B8c82D4a505003f27"}},{"to":"0x72a19342e8F1838460eBFCCEf09F6585e32db86E","value":"0","data":null,"contractMethod":{"inputs":[{"internalType":"address","name":"_account","type":"address"}],"name":"getReward","payable":false},"contractInputsValues":{"_account":"0xB1748C79709f4Ba2Dd82834B8c82D4a505003f27"}},{"to":"0x0c73f1cFd5C9dFc150C8707Aa47Acbd14F0BE108","value":"0","data":null,"contractMethod":{"inputs":[{"internalType":"address","name":"_account","type":"address"}],"name":"getReward","payable":false},"contractInputsValues":{"_account":"0xB1748C79709f4Ba2Dd82834B8c82D4a505003f27"}},{"to":"0x72a19342e8F1838460eBFCCEf09F6585e32db86E","value":"0","data":null,"contractMethod":{"inputs":[{"internalType":"bool","name":"_relock","type":"bool"}],"name":"processExpiredLocks","payable":false},"contractInputsValues":{"_relock":true}},{"to":"0x358fE82370a1B9aDaE2E3ad69D6cF9e503c96018","value":"0","data":null,"contractMethod":{"inputs":[{"internalType":"address","name":"gauge_addr","type":"address"}],"name":"mint","payable":false},"contractInputsValues":{"gauge_addr":"0xB2Ac3382dA625eb41Fc803b57743f941a484e2a6"}},{"to":"0x3814307b86b54b1d8e7B2Ac34662De9125F8f4E6","value":"0","data":null,"contractMethod":{"inputs":[],"name":"collectFees","payable":false},"contractInputsValues":null},{"to":"0xD533a949740bb3306d119CC777fa900bA034cd52","value":"0","data":null,"contractMethod":{"inputs":[{"name":"_to","type":"address"},{"name":"_value","type":"uint256"}],"name":"transfer","payable":false},"contractInputsValues":{"_to":"0x847FA1A5337C7f24D7066E467F2e2A0f969Ca79F","_value":"8472890082187180756548"}},{"to":"0x847FA1A5337C7f24D7066E467F2e2A0f969Ca79F","value":"0","data":null,"contractMethod":{"inputs":[{"internalType":"uint256","name":"_value","type":"uint256"}],"name":"increaseAmount","payable":false},"contractInputsValues":{"_value":"8472890082187180756548"}},{"to":"0x72a19342e8F1838460eBFCCEf09F6585e32db86E","value":"0","data":null,"contractMethod":{"inputs":[{"internalType":"address","name":"_account","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"},{"internalType":"uint256","name":"_spendRatio","type":"uint256"}],"name":"lock","payable":false},"contractInputsValues":{"_account":"0xB1748C79709f4Ba2Dd82834B8c82D4a505003f27","_amount":"203552914887379717875","_spendRatio":"0"}}]} \ No newline at end of file +{"version":"1.0","chainId":"1","createdAt":1704571511000,"meta":{"name":"Transactions Batch","description":"","txBuilderVersion":"1.14.1","createdFromSafeAddress":"0xB1748C79709f4Ba2Dd82834B8c82D4a505003f27","createdFromOwnerAddress":"","checksum":"0x90dd5982fcc0d452fa15ec316d53180a8cf482f8d99d6b70259f055c49c3c3f4"},"transactions":[{"to":"0x2AA609715488B09EFA93883759e8B089FBa11296","value":"0","data":null,"contractMethod":{"inputs":[],"name":"getReward","payable":false},"contractInputsValues":null},{"to":"0xD25D60aBafC220dd6F7BA37baD23e1105Db05a06","value":"0","data":null,"contractMethod":{"inputs":[],"name":"getReward","payable":false},"contractInputsValues":null},{"to":"0x3f29cB4111CbdA8081642DA1f75B3c12DECf2516","value":"0","data":null,"contractMethod":{"inputs":[{"internalType":"address[]","name":"rewardContracts","type":"address[]"},{"internalType":"address[]","name":"extraRewardContracts","type":"address[]"},{"internalType":"address[]","name":"tokenRewardContracts","type":"address[]"},{"internalType":"address[]","name":"tokenRewardTokens","type":"address[]"},{"internalType":"uint256","name":"depositCrvMaxAmount","type":"uint256"},{"internalType":"uint256","name":"minAmountOut","type":"uint256"},{"internalType":"uint256","name":"depositCvxMaxAmount","type":"uint256"},{"internalType":"uint256","name":"spendCvxAmount","type":"uint256"},{"internalType":"uint256","name":"options","type":"uint256"}],"name":"claimRewards","payable":false},"contractInputsValues":{"rewardContracts":"[\"0x7e880867363A7e321f5d260Cade2B0Bb2F717B02\", \"0x6991C1CD588c4e6f6f1de3A0bac5B8BbAb7aAF6d\", \"0x26598e3E511ADFadefD70ab2C3475Ff741741104\", \"0x47809eE386D1dEC29c0b13f21ba30F564517538B\", \"0x053e1dad223A206e6BCa24C77786bb69a10e427d\", \"0x062450B06EB92F1C4E227C41c987ed97c93Ae232\", \"0xB10a6e39Ed8a66fEd3aAef3866a95611a49B9a95\", \"0xE627082369689b2B86D948c377A4aE4e739C59eE\"]","extraRewardContracts":"[]","tokenRewardContracts":"[]","tokenRewardTokens":"[]","depositCrvMaxAmount":"0","minAmountOut":"0","depositCvxMaxAmount":"0","spendCvxAmount":"0","options":"0"}},{"to":"0xaa0C3f5F7DFD688C6E646F66CD2a6B66ACdbE434","value":"0","data":null,"contractMethod":{"inputs":[{"internalType":"address","name":"_account","type":"address"}],"name":"getReward","payable":false},"contractInputsValues":{"_account":"0xB1748C79709f4Ba2Dd82834B8c82D4a505003f27"}},{"to":"0x72a19342e8F1838460eBFCCEf09F6585e32db86E","value":"0","data":null,"contractMethod":{"inputs":[{"internalType":"address","name":"_account","type":"address"}],"name":"getReward","payable":false},"contractInputsValues":{"_account":"0xB1748C79709f4Ba2Dd82834B8c82D4a505003f27"}},{"to":"0x0c73f1cFd5C9dFc150C8707Aa47Acbd14F0BE108","value":"0","data":null,"contractMethod":{"inputs":[{"internalType":"address","name":"_account","type":"address"}],"name":"getReward","payable":false},"contractInputsValues":{"_account":"0xB1748C79709f4Ba2Dd82834B8c82D4a505003f27"}},{"to":"0x72a19342e8F1838460eBFCCEf09F6585e32db86E","value":"0","data":null,"contractMethod":{"inputs":[{"internalType":"bool","name":"_relock","type":"bool"}],"name":"processExpiredLocks","payable":false},"contractInputsValues":{"_relock":true}},{"to":"0x5E8422345238F34275888049021821E8E08CAa1f","value":"0","data":null,"contractMethod":{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","payable":false},"contractInputsValues":{"spender":"0xac3E018457B222d93114458476f3E3416Abbe38F","amount":"14323200000000000000"}},{"to":"0xac3E018457B222d93114458476f3E3416Abbe38F","value":"0","data":null,"contractMethod":{"inputs":[{"internalType":"uint256","name":"assets","type":"uint256"},{"internalType":"address","name":"receiver","type":"address"}],"name":"deposit","payable":false},"contractInputsValues":{"assets":"14323200000000000000","receiver":"0xB1748C79709f4Ba2Dd82834B8c82D4a505003f27"}},{"to":"0x358fE82370a1B9aDaE2E3ad69D6cF9e503c96018","value":"0","data":null,"contractMethod":{"inputs":[{"internalType":"address","name":"gauge_addr","type":"address"}],"name":"mint","payable":false},"contractInputsValues":{"gauge_addr":"0xB2Ac3382dA625eb41Fc803b57743f941a484e2a6"}},{"to":"0x3814307b86b54b1d8e7B2Ac34662De9125F8f4E6","value":"0","data":null,"contractMethod":{"inputs":[],"name":"collectFees","payable":false},"contractInputsValues":null},{"to":"0x72a19342e8F1838460eBFCCEf09F6585e32db86E","value":"0","data":null,"contractMethod":{"inputs":[{"internalType":"address","name":"_account","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"},{"internalType":"uint256","name":"_spendRatio","type":"uint256"}],"name":"lock","payable":false},"contractInputsValues":{"_account":"0xB1748C79709f4Ba2Dd82834B8c82D4a505003f27","_amount":"595433586272637341792","_spendRatio":"0"}}]} \ No newline at end of file diff --git a/src/hardhat/gnosis-safe-scripts/utils/utils.js b/src/hardhat/gnosis-safe-scripts/utils/utils.js index d98ea7d8..9473ecc4 100644 --- a/src/hardhat/gnosis-safe-scripts/utils/utils.js +++ b/src/hardhat/gnosis-safe-scripts/utils/utils.js @@ -7,7 +7,6 @@ const { BigNumber } = require("@ethersproject/bignumber"); const util = require("util"); const chalk = require("chalk"); const fse = require("fs-extra"); -const { formatUnits } = require("ethers/lib/utils"); const constants = require(path.join(__dirname, '../../../../dist/types/constants')); const CONTRACT_ADDRESSES = constants.CONTRACT_ADDRESSES; let ADDRS_ETH = CONTRACT_ADDRESSES.ethereum; diff --git a/src/hardhat/hardhat.config.js b/src/hardhat/hardhat.config.js index 82036f4b..22e44375 100644 --- a/src/hardhat/hardhat.config.js +++ b/src/hardhat/hardhat.config.js @@ -6,9 +6,9 @@ require('hardhat-deploy'); require('hardhat-contract-sizer'); require('hardhat-gas-reporter'); require("hardhat-tracer"); -require("@matterlabs/hardhat-zksync-deploy"); -require("@matterlabs/hardhat-zksync-solc"); -require("@nomiclabs/hardhat-waffle"); +// require("@matterlabs/hardhat-zksync-deploy"); +// require("@matterlabs/hardhat-zksync-solc"); +// require("@nomicfoundation/hardhat-waffle"); require("@nomiclabs/hardhat-truffle5"); require("@nomiclabs/hardhat-web3"); require("@nomiclabs/hardhat-etherscan"); @@ -60,7 +60,9 @@ module.exports = { // Also see src/hardhat/justin-scripts/instructions.txt // url: `https://eth-mainnet.alchemyapi.io/v2/${process.env.ALCHEMY_KEY}`, // Ethereum (alternate) - blockNumber: 149451388 // Pin the block to allow caching + // Pin the block to allow caching + // blockNumber: 167152063 // ARBITRUM + blockNumber: 18936285 // ETHEREUM }, accounts: { @@ -75,7 +77,7 @@ module.exports = { }, chainId: 42161, gas: "auto", - gasPrice: 150000000, // 0.15 Gwei + gasPrice: 170000000, // 0.17 Gwei gasMultiplier: 1.2 }, aurora: { @@ -125,7 +127,7 @@ module.exports = { }, chainId: 1, gas: "auto", - gasPrice: 50000000000, // 50 Gwei + gasPrice: 40000000000, // 40 Gwei gasMultiplier: 1.2, }, evmos: { @@ -284,18 +286,18 @@ module.exports = { gasPrice: "auto", gasMultiplier: 1.2 }, - zksync: { - url: process.env.ZKSYNC_NETWORK_ENDPOINT, - accounts: { - mnemonic: process.env.ZKSYNC_MNEMONIC_PHRASE - }, - chainId: 324, - gas: "auto", - gasPrice: "auto", - // gasPrice: 3000000000, // 3 Gwei - gasMultiplier: 1.2, - zksync: true - }, + // zksync: { + // url: process.env.ZKSYNC_NETWORK_ENDPOINT, + // accounts: { + // mnemonic: process.env.ZKSYNC_MNEMONIC_PHRASE + // }, + // chainId: 324, + // gas: "auto", + // gasPrice: "auto", + // // gasPrice: 3000000000, // 3 Gwei + // gasMultiplier: 1.2, + // zksync: true + // }, }, solidity: { compilers: [ diff --git a/src/hardhat/contracts/BAMM/BAMM.sol b/src/hardhat/old_contracts/BAMM/BAMM.sol similarity index 100% rename from src/hardhat/contracts/BAMM/BAMM.sol rename to src/hardhat/old_contracts/BAMM/BAMM.sol diff --git a/src/hardhat/contracts/BAMM/BAMMHelper.sol b/src/hardhat/old_contracts/BAMM/BAMMHelper.sol similarity index 100% rename from src/hardhat/contracts/BAMM/BAMMHelper.sol rename to src/hardhat/old_contracts/BAMM/BAMMHelper.sol diff --git a/src/hardhat/contracts/BAMM/Babylonian.sol b/src/hardhat/old_contracts/BAMM/Babylonian.sol similarity index 100% rename from src/hardhat/contracts/BAMM/Babylonian.sol rename to src/hardhat/old_contracts/BAMM/Babylonian.sol diff --git a/src/hardhat/contracts/BAMM/FixedPoint.sol b/src/hardhat/old_contracts/BAMM/FixedPoint.sol similarity index 100% rename from src/hardhat/contracts/BAMM/FixedPoint.sol rename to src/hardhat/old_contracts/BAMM/FixedPoint.sol diff --git a/src/hardhat/contracts/BAMM/FraxswapDummyRouter.sol b/src/hardhat/old_contracts/BAMM/FraxswapDummyRouter.sol similarity index 100% rename from src/hardhat/contracts/BAMM/FraxswapDummyRouter.sol rename to src/hardhat/old_contracts/BAMM/FraxswapDummyRouter.sol diff --git a/src/hardhat/contracts/BAMM/FraxswapOracle.sol b/src/hardhat/old_contracts/BAMM/FraxswapOracle.sol similarity index 100% rename from src/hardhat/contracts/BAMM/FraxswapOracle.sol rename to src/hardhat/old_contracts/BAMM/FraxswapOracle.sol diff --git a/src/hardhat/contracts/Bridges/Fraxchain/FraxchainFrxEthMinter.sol b/src/hardhat/old_contracts/Bridges/Fraxchain/FraxchainFrxEthMinter.sol similarity index 98% rename from src/hardhat/contracts/Bridges/Fraxchain/FraxchainFrxEthMinter.sol rename to src/hardhat/old_contracts/Bridges/Fraxchain/FraxchainFrxEthMinter.sol index 0e74c93b..89b644aa 100644 --- a/src/hardhat/contracts/Bridges/Fraxchain/FraxchainFrxEthMinter.sol +++ b/src/hardhat/old_contracts/Bridges/Fraxchain/FraxchainFrxEthMinter.sol @@ -20,7 +20,7 @@ pragma solidity ^0.8.0; // Travis Moore: https://github.com/FortisFortuna import { IfrxETH } from "../../FraxETH/IfrxETH.sol"; -import "@openzeppelin/contracts/security/ReentrancyGuard.sol"; +import "@openzeppelin/contracts/utils/ReentrancyGuard.sol"; import "@openzeppelin/contracts/token/ERC20/IERC20.sol"; import "../../Staking/Owned.sol"; diff --git a/src/hardhat/contracts/Bridges/Fraxchain/FraxchainPortal.sol b/src/hardhat/old_contracts/Bridges/Fraxchain/FraxchainPortal.sol similarity index 100% rename from src/hardhat/contracts/Bridges/Fraxchain/FraxchainPortal.sol rename to src/hardhat/old_contracts/Bridges/Fraxchain/FraxchainPortal.sol diff --git a/src/hardhat/contracts/FPI/FPIStaking.sol b/src/hardhat/old_contracts/FPI/FPIStaking.sol similarity index 100% rename from src/hardhat/contracts/FPI/FPIStaking.sol rename to src/hardhat/old_contracts/FPI/FPIStaking.sol diff --git a/src/hardhat/contracts/FPI/FPIStaking2.sol b/src/hardhat/old_contracts/FPI/FPIStaking2.sol similarity index 100% rename from src/hardhat/contracts/FPI/FPIStaking2.sol rename to src/hardhat/old_contracts/FPI/FPIStaking2.sol diff --git a/src/hardhat/contracts/FPI/PermissionedSend.sol b/src/hardhat/old_contracts/FPI/PermissionedSend.sol similarity index 100% rename from src/hardhat/contracts/FPI/PermissionedSend.sol rename to src/hardhat/old_contracts/FPI/PermissionedSend.sol diff --git a/src/hardhat/contracts/FPI/StakedFPI.sol b/src/hardhat/old_contracts/FPI/StakedFPI.sol similarity index 89% rename from src/hardhat/contracts/FPI/StakedFPI.sol rename to src/hardhat/old_contracts/FPI/StakedFPI.sol index 08eb0129..04e513f6 100644 --- a/src/hardhat/contracts/FPI/StakedFPI.sol +++ b/src/hardhat/old_contracts/FPI/StakedFPI.sol @@ -4,10 +4,9 @@ pragma solidity ^0.8.4; import "@openzeppelin/contracts/token/ERC20/ERC20.sol"; import "@openzeppelin/contracts/token/ERC20/IERC20.sol"; import "@openzeppelin/contracts/token/ERC20/extensions/ERC20Burnable.sol"; -import "@openzeppelin/contracts/security/Pausable.sol"; +import "@openzeppelin/contracts/utils/Pausable.sol"; import "@openzeppelin/contracts/access/Ownable.sol"; import "@openzeppelin/contracts/access/AccessControl.sol"; - /** * Created and owned by the staking contract. * diff --git a/src/hardhat/old_contracts/FXB/ERC-1155/FXB.sol b/src/hardhat/old_contracts/FXB/ERC-1155/FXB.sol index 2b0f8fb6..e508548f 100644 --- a/src/hardhat/old_contracts/FXB/ERC-1155/FXB.sol +++ b/src/hardhat/old_contracts/FXB/ERC-1155/FXB.sol @@ -27,7 +27,7 @@ pragma solidity >=0.8.0; import "@openzeppelin/contracts/token/ERC1155/ERC1155.sol"; import "@openzeppelin/contracts/access/Ownable.sol"; -import "@openzeppelin/contracts/security/Pausable.sol"; +import "@openzeppelin/contracts/utils/Pausable.sol"; import "@openzeppelin/contracts/utils/Strings.sol"; import "@openzeppelin/contracts/token/ERC1155/extensions/ERC1155Burnable.sol"; import "@openzeppelin/contracts/token/ERC1155/extensions/ERC1155Supply.sol"; diff --git a/src/hardhat/old_contracts/Fraxswap_OLD/DummyToken.sol b/src/hardhat/old_contracts/Fraxswap_OLD/DummyToken.sol index ebc2e01d..ad991ffd 100644 --- a/src/hardhat/old_contracts/Fraxswap_OLD/DummyToken.sol +++ b/src/hardhat/old_contracts/Fraxswap_OLD/DummyToken.sol @@ -4,7 +4,7 @@ pragma solidity ^0.8.4; import "@openzeppelin/contracts/token/ERC20/ERC20.sol"; import "@openzeppelin/contracts/token/ERC20/IERC20.sol"; import "@openzeppelin/contracts/token/ERC20/extensions/ERC20Burnable.sol"; -import "@openzeppelin/contracts/security/Pausable.sol"; +import "@openzeppelin/contracts/utils/Pausable.sol"; import "@openzeppelin/contracts/access/Ownable.sol"; import "@openzeppelin/contracts/access/AccessControl.sol"; diff --git a/src/hardhat/old_contracts/Staking/FraxCrossChainFarmOLD.sol.old b/src/hardhat/old_contracts/Staking/FraxCrossChainFarmOLD.sol.old index f86fc47b..b2558f6a 100755 --- a/src/hardhat/old_contracts/Staking/FraxCrossChainFarmOLD.sol.old +++ b/src/hardhat/old_contracts/Staking/FraxCrossChainFarmOLD.sol.old @@ -156,7 +156,7 @@ contract FraxCrossChainFarm is Owned, ReentrancyGuard { } modifier notStakingPaused() { - require(stakingPaused == false, "Staking paused"); + require(!stakingPaused, "Staking paused"); _; } diff --git a/src/hardhat/old_contracts/Staking/FraxCrossChainFarmSushi.sol b/src/hardhat/old_contracts/Staking/FraxCrossChainFarmSushi.sol index 1064b10c..13383136 100755 --- a/src/hardhat/old_contracts/Staking/FraxCrossChainFarmSushi.sol +++ b/src/hardhat/old_contracts/Staking/FraxCrossChainFarmSushi.sol @@ -156,7 +156,7 @@ contract FraxCrossChainFarmSushi is Owned, ReentrancyGuard { } modifier notStakingPaused() { - require(stakingPaused == false, "Staking paused"); + require(!stakingPaused, "Staking paused"); _; } diff --git a/src/hardhat/old_contracts/Staking/FraxUniV3Farm_V2.sol b/src/hardhat/old_contracts/Staking/FraxUniV3Farm_V2.sol index 897f96bc..410a5f81 100755 --- a/src/hardhat/old_contracts/Staking/FraxUniV3Farm_V2.sol +++ b/src/hardhat/old_contracts/Staking/FraxUniV3Farm_V2.sol @@ -622,11 +622,13 @@ contract FraxUniV3Farm_Stable is Owned, ReentrancyGuard { } function _getStake(address staker_address, bytes32 kek_id) internal view returns (LockedStake memory locked_stake, uint256 arr_idx) { - for (uint256 i = 0; i < lockedStakes[staker_address].length; i++){ - if (kek_id == lockedStakes[staker_address][i].kek_id){ - locked_stake = lockedStakes[staker_address][i]; - arr_idx = i; - break; + if (kek_id != 0) { + for (uint256 i = 0; i < lockedStakes[staker_address].length; i++){ + if (kek_id == lockedStakes[staker_address][i].kek_id){ + locked_stake = lockedStakes[staker_address][i]; + arr_idx = i; + break; + } } } require(locked_stake.kek_id == kek_id, "Stake not found"); diff --git a/src/hardhat/contracts/Staking/FraxUnifiedFarmTemplateClone.sol b/src/hardhat/old_contracts/Staking/FraxUnifiedFarmTemplateClone.sol similarity index 100% rename from src/hardhat/contracts/Staking/FraxUnifiedFarmTemplateClone.sol rename to src/hardhat/old_contracts/Staking/FraxUnifiedFarmTemplateClone.sol diff --git a/src/hardhat/contracts/Staking/FraxUnifiedFarm_KyberSwapElastic.sol b/src/hardhat/old_contracts/Staking/FraxUnifiedFarm_KyberSwapElastic.sol similarity index 94% rename from src/hardhat/contracts/Staking/FraxUnifiedFarm_KyberSwapElastic.sol rename to src/hardhat/old_contracts/Staking/FraxUnifiedFarm_KyberSwapElastic.sol index 8c7a35fd..88d8515e 100755 --- a/src/hardhat/contracts/Staking/FraxUnifiedFarm_KyberSwapElastic.sol +++ b/src/hardhat/old_contracts/Staking/FraxUnifiedFarm_KyberSwapElastic.sol @@ -279,14 +279,16 @@ contract FraxUnifiedFarm_KyberSwapElastic is FraxUnifiedFarmTemplate { } function _getStake(address staker_address, uint256 token_id) internal view returns (LockedNFT memory locked_nft, uint256 arr_idx) { - for (uint256 i = 0; i < lockedNFTs[staker_address].length; i++){ - if (token_id == lockedNFTs[staker_address][i].token_id){ - locked_nft = lockedNFTs[staker_address][i]; - arr_idx = i; - break; + if (token_id != 0) { + for (uint256 i = 0; i < lockedNFTs[staker_address].length; i++){ + if (token_id == lockedNFTs[staker_address][i].token_id){ + locked_nft = lockedNFTs[staker_address][i]; + arr_idx = i; + break; + } } } - require(locked_nft.token_id == token_id, "Stake not found"); + require(token_id != 0 && locked_nft.token_id == token_id, "Stake not found"); } @@ -302,6 +304,9 @@ contract FraxUnifiedFarm_KyberSwapElastic is FraxUnifiedFarmTemplate { uint256 token1_min_in, bool use_balof_override // Use balanceOf Override ) nonReentrant public { + // Make sure you are not in shutdown + require(!withdrawalOnlyShutdown, "Only withdrawals allowed"); + // Make sure staking isn't paused require(!stakingPaused, "Staking paused"); @@ -372,7 +377,8 @@ contract FraxUnifiedFarm_KyberSwapElastic is FraxUnifiedFarmTemplate { uint256 secs, uint256 start_timestamp ) internal updateRewardAndBalanceMdf(staker_address, true) { - require(stakingPaused == false, "Staking paused"); + require(!withdrawalOnlyShutdown, "Only withdrawals allowed"); + require(!stakingPaused, "Staking paused"); require(secs >= lock_time_min, "Minimum stake time not met"); require(secs <= lock_time_for_max_multiplier,"Trying to lock for too long"); @@ -424,12 +430,19 @@ contract FraxUnifiedFarm_KyberSwapElastic is FraxUnifiedFarmTemplate { // If it bugs out, the user's NFT could be permanently stuck in this farm // They can always just manually get the LP fees on Kyber's UI once their NFT is withdrawn // Collect rewards first and then update the balances - // collectRewardsOnWithdrawalPaused to be used in an emergency situation if reward is overemitted or not available - // and the user can forfeit rewards to get their principal back. User can also specify it in withdrawLocked - if (claim_rewards || !collectRewardsOnWithdrawalPaused) _getReward(staker_address, destination_address, true); + // withdrawalOnlyShutdown to be used in an emergency situation if reward is overemitted or not available + // and the user can forfeit rewards to get their principal back. + if (withdrawalOnlyShutdown) { + // Do nothing. + /// TODO MARK claim_rewards AS DEPRECATED + /// TODO MARK claim_rewards AS DEPRECATED + /// TODO MARK claim_rewards AS DEPRECATED + /// TODO MARK claim_rewards AS DEPRECATED + /// TODO MARK claim_rewards AS DEPRECATED + } else { - // Sync the rewards at least - _updateRewardAndBalance(staker_address, true); + // Get rewards + _getReward(staker_address, destination_address, true); } LockedNFT memory thisNFT; diff --git a/src/hardhat/contracts/Staking/FraxUnifiedFarm_PosRebase.sol b/src/hardhat/old_contracts/Staking/FraxUnifiedFarm_PosRebase.sol similarity index 93% rename from src/hardhat/contracts/Staking/FraxUnifiedFarm_PosRebase.sol rename to src/hardhat/old_contracts/Staking/FraxUnifiedFarm_PosRebase.sol index 01f91114..9493a2f1 100755 --- a/src/hardhat/contracts/Staking/FraxUnifiedFarm_PosRebase.sol +++ b/src/hardhat/old_contracts/Staking/FraxUnifiedFarm_PosRebase.sol @@ -242,14 +242,16 @@ contract FraxUnifiedFarm_PosRebase is FraxUnifiedFarmTemplateClone { // ------ STAKING ------ function _getStake(address staker_address, bytes32 kek_id) internal view returns (LockedStake memory locked_stake, uint256 arr_idx) { - for (uint256 i = 0; i < lockedStakes[staker_address].length; i++){ - if (kek_id == lockedStakes[staker_address][i].kek_id){ - locked_stake = lockedStakes[staker_address][i]; - arr_idx = i; - break; + if (kek_id != 0) { + for (uint256 i = 0; i < lockedStakes[staker_address].length; i++){ + if (kek_id == lockedStakes[staker_address][i].kek_id){ + locked_stake = lockedStakes[staker_address][i]; + arr_idx = i; + break; + } } } - require(locked_stake.kek_id == kek_id, "Stake not found"); + require(kek_id != 0 && locked_stake.kek_id == kek_id, "Stake not found"); } @@ -259,6 +261,9 @@ contract FraxUnifiedFarm_PosRebase is FraxUnifiedFarmTemplateClone { // Make sure staking isn't paused require(!stakingPaused, "Staking paused"); + // Make sure you are not in shutdown + require(!withdrawalOnlyShutdown, "Only withdrawals allowed"); + // Claim rewards at the old balance first _getReward(msg.sender, msg.sender, true); @@ -308,6 +313,9 @@ contract FraxUnifiedFarm_PosRebase is FraxUnifiedFarmTemplateClone { // Make sure staking isn't paused require(!stakingPaused, "Staking paused"); + // Make sure you are not in shutdown + require(!withdrawalOnlyShutdown, "Only withdrawals allowed"); + // Claim rewards at the old balance first _getReward(msg.sender, msg.sender, true); @@ -358,7 +366,8 @@ contract FraxUnifiedFarm_PosRebase is FraxUnifiedFarmTemplateClone { uint256 secs, uint256 start_timestamp ) internal updateRewardAndBalanceMdf(staker_address, true) returns (bytes32) { - require(stakingPaused == false, "Staking paused"); + require(!stakingPaused, "Staking paused"); + require(!withdrawalOnlyShutdown, "Only withdrawals allowed"); require(secs >= lock_time_min, "Minimum stake time not met"); require(secs <= lock_time_for_max_multiplier,"Trying to lock for too long"); @@ -414,12 +423,20 @@ contract FraxUnifiedFarm_PosRebase is FraxUnifiedFarmTemplateClone { bool claim_rewards ) internal returns (uint256) { // Collect rewards first and then update the balances - // collectRewardsOnWithdrawalPaused to be used in an emergency situation if reward is overemitted or not available - // and the user can forfeit rewards to get their principal back. User can also specify it in withdrawLocked - if (claim_rewards || !collectRewardsOnWithdrawalPaused) _getReward(staker_address, destination_address, true); + // withdrawalOnlyShutdown to be used in an emergency situation if reward is overemitted or not available + // and the user can forfeit rewards to get their principal back. + // User can also specify no claiming in withdrawLocked if they want to simply save gas for a later time + if (withdrawalOnlyShutdown) { + // Do nothing. + /// TODO MARK claim_rewards AS DEPRECATED + /// TODO MARK claim_rewards AS DEPRECATED + /// TODO MARK claim_rewards AS DEPRECATED + /// TODO MARK claim_rewards AS DEPRECATED + /// TODO MARK claim_rewards AS DEPRECATED + } else { - // Sync the rewards at least - _updateRewardAndBalance(staker_address, true); + // Get rewards + _getReward(staker_address, destination_address, true); } // Get the stake and its index diff --git a/src/hardhat/contracts/Staking/FraxUnifiedFarm_UniV3.sol b/src/hardhat/old_contracts/Staking/FraxUnifiedFarm_UniV3.sol similarity index 93% rename from src/hardhat/contracts/Staking/FraxUnifiedFarm_UniV3.sol rename to src/hardhat/old_contracts/Staking/FraxUnifiedFarm_UniV3.sol index ab66c5cd..b943dbae 100755 --- a/src/hardhat/contracts/Staking/FraxUnifiedFarm_UniV3.sol +++ b/src/hardhat/old_contracts/Staking/FraxUnifiedFarm_UniV3.sol @@ -317,14 +317,16 @@ contract FraxUnifiedFarm_UniV3 is FraxUnifiedFarmTemplate { // ------ STAKING ------ function _getStake(address staker_address, uint256 token_id) internal view returns (LockedNFT memory locked_nft, uint256 arr_idx) { - for (uint256 i = 0; i < lockedNFTs[staker_address].length; i++){ - if (token_id == lockedNFTs[staker_address][i].token_id){ - locked_nft = lockedNFTs[staker_address][i]; - arr_idx = i; - break; + if (token_id != 0) { + for (uint256 i = 0; i < lockedNFTs[staker_address].length; i++){ + if (token_id == lockedNFTs[staker_address][i].token_id){ + locked_nft = lockedNFTs[staker_address][i]; + arr_idx = i; + break; + } } } - require(locked_nft.token_id == token_id, "Stake not found"); + require(token_id != 0 && locked_nft.token_id == token_id, "Stake not found"); } @@ -340,6 +342,12 @@ contract FraxUnifiedFarm_UniV3 is FraxUnifiedFarmTemplate { uint256 token1_min_in, bool use_balof_override // Use balanceOf Override ) public { + // Make sure staking isn't paused + require(!stakingPaused, "Staking paused"); + + // Make sure you are not in shutdown + require(!withdrawalOnlyShutdown, "Only withdrawals allowed"); + // Claim rewards at the old balance first _getReward(msg.sender, msg.sender, true); @@ -415,7 +423,8 @@ contract FraxUnifiedFarm_UniV3 is FraxUnifiedFarmTemplate { uint256 secs, uint256 start_timestamp ) internal updateRewardAndBalanceMdf(staker_address, true) { - require(stakingPaused == false, "Staking paused"); + require(!stakingPaused, "Staking paused"); + require(!withdrawalOnlyShutdown, "Only withdrawals allowed"); require(secs >= lock_time_min, "Minimum stake time not met"); require(secs <= lock_time_for_max_multiplier,"Trying to lock for too long"); (, uint256 liquidity, int24 tick_lower, int24 tick_upper) = checkUniV3NFT(token_id, true); // Should throw if false @@ -468,12 +477,20 @@ contract FraxUnifiedFarm_UniV3 is FraxUnifiedFarmTemplate { bool claim_rewards ) internal returns (uint256) { // Collect rewards first and then update the balances - // collectRewardsOnWithdrawalPaused to be used in an emergency situation if reward is overemitted or not available - // and the user can forfeit rewards to get their principal back. User can also specify it in withdrawLocked - if (claim_rewards || !collectRewardsOnWithdrawalPaused) _getReward(staker_address, destination_address, true); + // withdrawalOnlyShutdown to be used in an emergency situation if reward is overemitted or not available + // and the user can forfeit rewards to get their principal back. + // User can also specify no claiming in withdrawLocked if they want to simply save gas for a later time + if (withdrawalOnlyShutdown) { + // Do nothing + /// TODO MARK claim_rewards AS DEPRECATED + /// TODO MARK claim_rewards AS DEPRECATED + /// TODO MARK claim_rewards AS DEPRECATED + /// TODO MARK claim_rewards AS DEPRECATED + /// TODO MARK claim_rewards AS DEPRECATED + } else { - // Sync the rewards at least - _updateRewardAndBalance(staker_address, true); + // Get rewards + _getReward(staker_address, destination_address, true); } LockedNFT memory thisNFT; diff --git a/src/hardhat/old_contracts/Staking/StakingRewardsDualV3.sol b/src/hardhat/old_contracts/Staking/StakingRewardsDualV3.sol index 8d451275..94f25b48 100755 --- a/src/hardhat/old_contracts/Staking/StakingRewardsDualV3.sol +++ b/src/hardhat/old_contracts/Staking/StakingRewardsDualV3.sol @@ -141,7 +141,7 @@ contract StakingRewardsDualV3 is Owned, ReentrancyGuard { } modifier notStakingPaused() { - require(stakingPaused == false, "Staking paused"); + require(!stakingPaused, "Staking paused"); _; } diff --git a/src/hardhat/old_contracts/Staking/StakingRewardsDualV4.sol b/src/hardhat/old_contracts/Staking/StakingRewardsDualV4.sol index 5a1fea99..5071952c 100755 --- a/src/hardhat/old_contracts/Staking/StakingRewardsDualV4.sol +++ b/src/hardhat/old_contracts/Staking/StakingRewardsDualV4.sol @@ -141,7 +141,7 @@ contract StakingRewardsDualV4 is Owned, ReentrancyGuard { } modifier notStakingPaused() { - require(stakingPaused == false, "Staking paused"); + require(!stakingPaused, "Staking paused"); _; } diff --git a/src/hardhat/contracts/Staking/Variants/FraxUnifiedFarm_PosRebase_aFRAX.sol b/src/hardhat/old_contracts/Staking/Variants/FraxUnifiedFarm_PosRebase_aFRAX.sol similarity index 100% rename from src/hardhat/contracts/Staking/Variants/FraxUnifiedFarm_PosRebase_aFRAX.sol rename to src/hardhat/old_contracts/Staking/Variants/FraxUnifiedFarm_PosRebase_aFRAX.sol diff --git a/src/hardhat/contracts/Staking/Variants/FraxUnifiedFarm_UniV3_FRAX_RAI.sol b/src/hardhat/old_contracts/Staking/Variants/FraxUnifiedFarm_UniV3_FRAX_RAI.sol similarity index 100% rename from src/hardhat/contracts/Staking/Variants/FraxUnifiedFarm_UniV3_FRAX_RAI.sol rename to src/hardhat/old_contracts/Staking/Variants/FraxUnifiedFarm_UniV3_FRAX_RAI.sol diff --git a/src/hardhat/contracts/Utils/BundleUtils.sol b/src/hardhat/old_contracts/Utils/BundleUtils.sol similarity index 100% rename from src/hardhat/contracts/Utils/BundleUtils.sol rename to src/hardhat/old_contracts/Utils/BundleUtils.sol diff --git a/src/hardhat/contracts/Utils/MigrationBundleUtils.sol b/src/hardhat/old_contracts/Utils/MigrationBundleUtils.sol similarity index 100% rename from src/hardhat/contracts/Utils/MigrationBundleUtils.sol rename to src/hardhat/old_contracts/Utils/MigrationBundleUtils.sol diff --git a/src/hardhat/old_contracts/__BSC/Staking/FraxFarmBSC_Dual_V5.sol b/src/hardhat/old_contracts/__BSC/Staking/FraxFarmBSC_Dual_V5.sol index 337b88d9..a4278987 100755 --- a/src/hardhat/old_contracts/__BSC/Staking/FraxFarmBSC_Dual_V5.sol +++ b/src/hardhat/old_contracts/__BSC/Staking/FraxFarmBSC_Dual_V5.sol @@ -128,7 +128,7 @@ contract FraxFarmBSC_Dual_V5 is Owned, ReentrancyGuard { } modifier notStakingPaused() { - require(stakingPaused == false, "Staking paused"); + require(!stakingPaused, "Staking paused"); _; } diff --git a/src/hardhat/test/Fraxswap/fraxswap-router-test.js b/src/hardhat/test/Fraxswap/fraxswap-router-test.js index d73c1b0a..036a3814 100644 --- a/src/hardhat/test/Fraxswap/fraxswap-router-test.js +++ b/src/hardhat/test/Fraxswap/fraxswap-router-test.js @@ -54,7 +54,7 @@ CPITrackerOracle: 0x7086F2aCB5558043fF9cE3df346D8E3FB4F4f452 const fraxMinterOwner = "0xB1748C79709f4Ba2Dd82834B8c82D4a505003f27"; const fraxMinter = "0xcf37B62109b537fa0Cb9A90Af4CA72f6fb85E241"; const fraxMinterAbi = require("../../manual_jsons/FRAX_MINTER_ABI.json"); -const { formatUnits } = require("ethers/lib/utils"); +// const { formatUnits } = require("ethers/utils/units"); const ERC20Abi = require("../../artifacts/contracts/Fraxswap/core/FraxswapPair.sol/FraxswapPair").abi; @@ -509,7 +509,7 @@ describe("Router Tests", function () { .sub(totalGasCost) .sub(outputAmountRecieved); console.log("diff", diff); - console.log("diff", formatUnits(diff)); + console.log("diff", ethers.utils.formatUnits(diff)); }); it("Swap ETH => WETH => FRAX => FXS directly", async function () { diff --git a/src/hardhat/test/__ARBITRUM/FraxCrossChainFarmV4_ERC20-Tests.js b/src/hardhat/test/__ARBITRUM/FraxCrossChainFarmV4_ERC20-Tests.js index 6c5663c7..358a5a7b 100644 --- a/src/hardhat/test/__ARBITRUM/FraxCrossChainFarmV4_ERC20-Tests.js +++ b/src/hardhat/test/__ARBITRUM/FraxCrossChainFarmV4_ERC20-Tests.js @@ -11,11 +11,11 @@ const chai = require('chai'); const chaiAlmost = require('chai-almost'); chai.use(chaiAlmost()); + const constants = require(path.join(__dirname, '../../../../dist/types/constants')); const utilities = require(path.join(__dirname, '../../../../dist/misc/utilities')); -// Set provider for all later instances to use -Contract.setProvider('http://127.0.0.1:7545'); + global.artifacts = artifacts; global.web3 = web3; @@ -31,7 +31,7 @@ const ERC20 = artifacts.require("contracts/ERC20/ERC20.sol:ERC20"); const IConvexCvxLPRewardPoolCombo = artifacts.require("Misc_AMOs/convex/IConvexCvxLPRewardPoolCombo"); // Staking contracts -const FraxCCFarmV4_cvxUSDPlusFRAXBP = artifacts.require("Staking/Variants/FraxCCFarmV4_cvxUSDPlusFRAXBP"); +const FraxCCFarmV4_cvxLP = artifacts.require("Staking/Variants/FraxCCFarmV4_cvxLP"); const BIG6 = new BigNumber("1e6"); const BIG18 = new BigNumber("1e18"); @@ -100,7 +100,6 @@ contract('FraxCrossChainFarmV3_ERC20-Tests', async (accounts) => { let rew_tkn_earned = structuredClone(rew_tkn_bals_before); // [token index][account][phase] beforeEach(async() => { - await hre.network.provider.request({ method: "hardhat_impersonateAccount", params: [process.env.FRAX_ONE_ADDRESS] @@ -127,7 +126,7 @@ contract('FraxCrossChainFarmV3_ERC20-Tests', async (accounts) => { lp_tkn_instance = await IConvexCvxLPRewardPoolCombo.at(CHAIN_ADDRESSES.bearer_tokens.cvxUSDPlusFRAXBP); // Fill the staking rewards instances - staking_instance = await FraxCCFarmV4_cvxUSDPlusFRAXBP.deployed(); + staking_instance = await FraxCCFarmV4_cvxLP.deployed(); // Fill reward token instances and info for (let i = 0; i < REWARD_TOKEN_SEED_AMOUNTS.length; i++) { @@ -207,8 +206,8 @@ contract('FraxCrossChainFarmV3_ERC20-Tests', async (accounts) => { // Print reward token balances for (let i = 0; i < rew_addresses.length; i++) { // Get reward token balances before everything starts - rew_tkn_bals_before[i][1]['time0'] = new BigNumber(await rew_instances[i].balanceOf(COLLATERAL_FRAX_AND_FXS_OWNER)).div(BIG18).toNumber() - rew_tkn_bals_before[i][9]['time0'] = new BigNumber(await rew_instances[i].balanceOf(accounts[9])).div(BIG18).toNumber() + rew_tkn_bals_before[i][1]['time0'] = new BigNumber(await rew_instances[i].balanceOf(COLLATERAL_FRAX_AND_FXS_OWNER)).div(BIG18).toNumber(); + rew_tkn_bals_before[i][9]['time0'] = new BigNumber(await rew_instances[i].balanceOf(accounts[9])).div(BIG18).toNumber(); console.log(`Farm ${rew_symbols[i]} balance: ${new BigNumber(await rew_instances[i].balanceOf(staking_instance.address)).div(BIG18).toNumber()}`); console.log(`Farm ${rew_symbols[i]} owed: ${new BigNumber(await staking_instance.ttlRewsOwed(i)).div(BIG18).toNumber()}`); @@ -218,6 +217,10 @@ contract('FraxCrossChainFarmV3_ERC20-Tests', async (accounts) => { await utilities.printCalcCurCombinedWeight(staking_instance, COLLATERAL_FRAX_AND_FXS_OWNER); await utilities.printCalcCurCombinedWeight(staking_instance, accounts[9]); + // Note initial LP balances + const lp_initial_bal_1 = new BigNumber(await lp_tkn_instance.balanceOf(COLLATERAL_FRAX_AND_FXS_OWNER)).div(BIG18).toNumber(); + const lp_initial_bal_9 = new BigNumber(await lp_tkn_instance.balanceOf(accounts[9])).div(BIG18).toNumber(); + // Need to approve first so the staking can use transfer const uni_pool_locked_1 = new BigNumber("75e17"); const uni_pool_locked_1_sum = new BigNumber("10e18"); @@ -276,7 +279,7 @@ contract('FraxCrossChainFarmV3_ERC20-Tests', async (accounts) => { console.log("---- LOCKED [9]: ", locked_balance_9.toString()); console.log("TRY AN EARLY WITHDRAWAL (SHOULD FAIL)"); - await expectRevert.unspecified(staking_instance.withdrawLocked(locked_stake_structs_1_0[0].kek_id, true, { from: COLLATERAL_FRAX_AND_FXS_OWNER })); + await expectRevert.unspecified(staking_instance.withdrawLocked(locked_stake_structs_1_0[0].kek_id, false, { from: COLLATERAL_FRAX_AND_FXS_OWNER })); await expectRevert.unspecified(staking_instance.withdrawLocked(locked_stake_structs_9_0[0].kek_id, true, { from: accounts[9] })); await time.advanceBlock(); @@ -379,7 +382,7 @@ contract('FraxCrossChainFarmV3_ERC20-Tests', async (accounts) => { } console.log(chalk.hex("#ff8b3d")("====================================================================")); - console.log(chalk.hex("#ff8b3d")("WAIT UNTIL THE END OF THE PERIOD (WHICH IS NEW DUE TO ROLLING")); + console.log(chalk.hex("#ff8b3d")("WAIT UNTIL THE END OF THE PERIOD (WHICH IS NEW DUE TO ROLLING 7 DAYS)")); console.log(chalk.hex("#ff8b3d")("====================================================================")); // Sync beforehand await staking_instance.sync({ from: COLLATERAL_FRAX_AND_FXS_OWNER }); @@ -465,7 +468,7 @@ contract('FraxCrossChainFarmV3_ERC20-Tests', async (accounts) => { console.log("TRY WITHDRAWING AGAIN"); console.log("[1] SHOULD SUCCEED, [9] SHOULD FAIL"); await staking_instance.withdrawLocked(locked_stake_structs_1_0[0].kek_id, true, { from: COLLATERAL_FRAX_AND_FXS_OWNER }); - await expectRevert.unspecified(staking_instance.withdrawLocked(locked_stake_structs_9_0[0].kek_id, true, { from: accounts[9] })); + await expectRevert.unspecified(staking_instance.withdrawLocked(locked_stake_structs_9_0[0].kek_id, false, { from: accounts[9] })); // Claim [9] await staking_instance.getReward({ from: accounts[9] }); @@ -566,8 +569,9 @@ contract('FraxCrossChainFarmV3_ERC20-Tests', async (accounts) => { console.log(`Expected yearly reward after 5 weeks [${rew_symbols[i]}]: ${yearly_reward_tkn}`); // Make sure nothing emitted + // Note: CRV/CVX might, if you are running this test live after deployment const expected_tkn_amount = 0; - expect(reward_week_5).to.be.almost(expected_tkn_amount, .01); + expect(reward_week_5).to.be.almost(expected_tkn_amount, 1); } console.log(chalk.yellow.bold("====================================================================")); @@ -651,8 +655,9 @@ contract('FraxCrossChainFarmV3_ERC20-Tests', async (accounts) => { console.log(`Expected yearly reward after 5 weeks (post refill) [${rew_symbols[i]}]: ${yearly_reward_tkn}`); // Make sure nothing emitted + // Note: CRV/CVX might, if you are running this test live after deployment const expected_tkn_amount = 0; - expect(reward_week_5_PR).to.be.almost(expected_tkn_amount, .01); + expect(reward_week_5_PR).to.be.almost(expected_tkn_amount, 1); } @@ -708,8 +713,9 @@ contract('FraxCrossChainFarmV3_ERC20-Tests', async (accounts) => { console.log(`Expected yearly reward after 6 weeks (post refill) [${rew_symbols[i]}]: ${yearly_reward_tkn}`); // Make sure emissions happened properly + // Note: CRV/CVX might have some emissions, if you are running this test live after deployment const expected_tkn_amount = new BigNumber(REWARD_TOKEN_REFILL_AMOUNTS[i]).div(BIG18).toNumber(); - expect(reward_week_6).to.be.almost(expected_tkn_amount, .001 * expected_tkn_amount); + expect(reward_week_6).to.be.almost(expected_tkn_amount, .01 * expected_tkn_amount); } @@ -720,7 +726,7 @@ contract('FraxCrossChainFarmV3_ERC20-Tests', async (accounts) => { // Account 9 withdraws and claims its locked stake await staking_instance.withdrawLocked(locked_stake_structs_9_0[0].kek_id, true, { from: accounts[9] }); await staking_instance.getReward({ from: accounts[9] }); - await expectRevert.unspecified(staking_instance.withdrawLocked(locked_stake_structs_1_0[1].kek_id, true, { from: COLLATERAL_FRAX_AND_FXS_OWNER })); + await expectRevert.unspecified(staking_instance.withdrawLocked(locked_stake_structs_1_0[1].kek_id, false, { from: COLLATERAL_FRAX_AND_FXS_OWNER })); const _total_liquidity_locked_1 = new BigNumber(await staking_instance.totalLiquidityLocked.call()).div(BIG18); const _total_combined_weight_1 = new BigNumber(await staking_instance.totalCombinedWeight.call()).div(BIG18); @@ -729,7 +735,21 @@ contract('FraxCrossChainFarmV3_ERC20-Tests', async (accounts) => { console.log("UNLOCKING ALL STAKES"); await staking_instance.unlockStakes({ from: STAKING_OWNER }); - await staking_instance.withdrawLocked(locked_stake_structs_1_0[1].kek_id, true, { from: COLLATERAL_FRAX_AND_FXS_OWNER }); + + // Account 1 withdraws last stake with claim_rewards false (but should still get rewards because it is deprecated) + const withdrawNoClaim_FxsBefore = new BigNumber(await rew_instances[0].balanceOf(staking_instance.address)).div(BIG18).toNumber(); + await staking_instance.withdrawLocked(locked_stake_structs_1_0[1].kek_id, false, { from: COLLATERAL_FRAX_AND_FXS_OWNER }); + const withdrawNoClaim_FxsAfter1 = new BigNumber(await rew_instances[0].balanceOf(staking_instance.address)).div(BIG18).toNumber(); + + // FXS should have came out still + expect(withdrawNoClaim_FxsAfter1).to.be.lt(withdrawNoClaim_FxsBefore); + + // Account 1 now simply claims + await staking_instance.getReward({ from: COLLATERAL_FRAX_AND_FXS_OWNER }); + const withdrawNoClaim_FxsAfter2 = new BigNumber(await rew_instances[0].balanceOf(staking_instance.address)).div(BIG18).toNumber(); + + // No FXS should have came out + expect(withdrawNoClaim_FxsAfter2).to.be.eq(withdrawNoClaim_FxsAfter1); await utilities.printCalcCurCombinedWeight(staking_instance, COLLATERAL_FRAX_AND_FXS_OWNER); await utilities.printCalcCurCombinedWeight(staking_instance, accounts[9]); @@ -808,6 +828,234 @@ contract('FraxCrossChainFarmV3_ERC20-Tests', async (accounts) => { expect(reward_week_6_PW).to.be.almost(expected_tkn_amount, .001); } + console.log(chalk.hex("#ff8b3d")("====================================================================")); + console.log(chalk.hex("#ff8b3d")("FINAL TOKEN BALANCE CHECKS")); + console.log(chalk.hex("#ff8b3d")("====================================================================")); + + // Note final LP balances + const lp_final_bal_1 = new BigNumber(await lp_tkn_instance.balanceOf(COLLATERAL_FRAX_AND_FXS_OWNER)).div(BIG18).toNumber(); + const lp_final_bal_9 = new BigNumber(await lp_tkn_instance.balanceOf(accounts[9])).div(BIG18).toNumber(); + + // Make sure initial and final user LP balances are the same + expect(lp_final_bal_1).to.be.eq(lp_initial_bal_1); + expect(lp_final_bal_9).to.be.eq(lp_initial_bal_9); + + // Make sure all the tokens that were seeded and refilled went to the users, no shortage or overemission + for (let i = 0; i < rew_addresses.length; i++) { + // Get reward token balances before everything starts + const all_tkns_before = rew_tkn_bals_before[i][1]['time0'] + rew_tkn_bals_before[i][9]['time0']; + let all_tkns_after = new BigNumber(await rew_instances[i].balanceOf(COLLATERAL_FRAX_AND_FXS_OWNER)).div(BIG18).toNumber(); + all_tkns_after += new BigNumber(await rew_instances[i].balanceOf(accounts[9])).div(BIG18).toNumber(); + const all_tkns_to_users = all_tkns_after - all_tkns_before; + const all_tkns_placed_in_farm = new BigNumber(REWARD_TOKEN_SEED_AMOUNTS[i]).div(BIG18).toNumber() + new BigNumber(REWARD_TOKEN_REFILL_AMOUNTS[i]).div(BIG18).toNumber(); + + console.log(`${rew_symbols[i]} emitted to users: ${all_tkns_to_users}`); + console.log(`${rew_symbols[i]} placed in farm: ${all_tkns_placed_in_farm}`); + + // Make sure emitted tokens = placed-in tokens + expect(all_tkns_to_users).to.be.almost(all_tkns_placed_in_farm, all_tkns_to_users * .01); + } + }); + + it('Withdrawal only shutdown test', async () => { + console.log(chalk.hex("#ff8b3d").bold("====================================================================")); + console.log(chalk.hex("#ff8b3d").bold("TRY TESTS WITH LOCKED STAKES.")); + console.log(chalk.hex("#ff8b3d").bold("====================================================================")); + + // Print reward token balances + for (let i = 0; i < rew_addresses.length; i++) { + // Get reward token balances before everything starts + rew_tkn_bals_before[i][1]['time0'] = new BigNumber(await rew_instances[i].balanceOf(COLLATERAL_FRAX_AND_FXS_OWNER)).div(BIG18).toNumber() + rew_tkn_bals_before[i][9]['time0'] = new BigNumber(await rew_instances[i].balanceOf(accounts[9])).div(BIG18).toNumber() + + console.log(`Farm ${rew_symbols[i]} balance: ${new BigNumber(await rew_instances[i].balanceOf(staking_instance.address)).div(BIG18).toNumber()}`); + console.log(`Farm ${rew_symbols[i]} owed: ${new BigNumber(await staking_instance.ttlRewsOwed(i)).div(BIG18).toNumber()}`); + console.log(`Farm ${rew_symbols[i]} paid: ${new BigNumber(await staking_instance.ttlRewsPaid(i)).div(BIG18).toNumber()}`); + } + + await utilities.printCalcCurCombinedWeight(staking_instance, COLLATERAL_FRAX_AND_FXS_OWNER); + await utilities.printCalcCurCombinedWeight(staking_instance, accounts[9]); + + // Need to approve first so the staking can use transfer + const uni_pool_locked_1 = new BigNumber("75e17"); + const uni_pool_locked_1_sum = new BigNumber("10e18"); + const uni_pool_locked_9 = new BigNumber("25e17"); + await lp_tkn_instance.approve(staking_instance.address, uni_pool_locked_1_sum, { from: COLLATERAL_FRAX_AND_FXS_OWNER }); + await lp_tkn_instance.approve(staking_instance.address, uni_pool_locked_9, { from: accounts[9] }); + + // // Note the FRAX amounts before + // const frax_before_1_locked = new BigNumber(await canFRAX_instance.balanceOf.call(COLLATERAL_FRAX_AND_FXS_OWNER)).div(BIG18); + // const frax_before_9_locked = new BigNumber(await canFRAX_instance.balanceOf.call(accounts[9])).div(BIG18); + // console.log("FRAX_USDC Uniswap Liquidity Tokens BEFORE [1]: ", frax_before_1_locked.toString()); + // console.log("FRAX_USDC Uniswap Liquidity Tokens BEFORE [9]: ", frax_before_9_locked.toString()); + + // Get the original starting time and period finish + const original_start_timestamp = (new BigNumber(await time.latest())).toNumber(); + const original_period_end = (new BigNumber(await staking_instance.periodFinish.call())).toNumber(); + console.log("original_start_timestamp: ", original_start_timestamp); + console.log("original_period_end: ", original_period_end); + + // Stake Locked + // account[1] + await staking_instance.stakeLocked(uni_pool_locked_1, 6.95 * 86400, { from: COLLATERAL_FRAX_AND_FXS_OWNER }); // 7 days + await staking_instance.stakeLocked(new BigNumber ("25e17"), 548 * 86400, { from: COLLATERAL_FRAX_AND_FXS_OWNER }); // 270 days + + // account[9] + await staking_instance.stakeLocked(uni_pool_locked_9, 27.95 * 86400, { from: accounts[9] }); + await time.advanceBlock(); + + // Show the stake structs + const locked_stake_structs_1_0 = await staking_instance.lockedStakesOf.call(COLLATERAL_FRAX_AND_FXS_OWNER); + const locked_stake_structs_9_0 = await staking_instance.lockedStakesOf.call(accounts[9]); + console.log("LOCKED STAKES [1] (before withdrawal): ", locked_stake_structs_1_0); + console.log("LOCKED STAKES [9] (before withdrawal): ", locked_stake_structs_9_0); + + // Note the UNI POOL and FXS amount after staking + const regular_balance_1 = new BigNumber(await staking_instance.lockedLiquidityOf.call(COLLATERAL_FRAX_AND_FXS_OWNER)).div(BIG18); + const boosted_balance_1 = new BigNumber(await staking_instance.combinedWeightOf.call(COLLATERAL_FRAX_AND_FXS_OWNER)).div(BIG18); + const locked_balance_1 = new BigNumber(await staking_instance.lockedLiquidityOf.call(COLLATERAL_FRAX_AND_FXS_OWNER)).div(BIG18); + const regular_balance_9 = new BigNumber(await staking_instance.lockedLiquidityOf.call(accounts[9])).div(BIG18); + const boosted_balance_9 = new BigNumber(await staking_instance.combinedWeightOf.call(accounts[9])).div(BIG18); + const locked_balance_9 = new BigNumber(await staking_instance.lockedLiquidityOf.call(accounts[9])).div(BIG18); + console.log("LOCKED LIQUIDITY [1]: ", regular_balance_1.toString()); + console.log("COMBINED WEIGHT [1]: ", boosted_balance_1.toString()); + console.log("---- LOCKED [1]: ", locked_balance_1.toString()); + console.log("LOCKED LIQUIDITY [9]: ", regular_balance_9.toString()); + console.log("COMBINED WEIGHT [9]: ", boosted_balance_9.toString()); + console.log("---- LOCKED [9]: ", locked_balance_9.toString()); + + await time.advanceBlock(); + + await utilities.printCalcCurCombinedWeight(staking_instance, COLLATERAL_FRAX_AND_FXS_OWNER); + await utilities.printCalcCurCombinedWeight(staking_instance, accounts[9]); + + const user_min_vefxs_for_max_boost_1_0 = new BigNumber(await staking_instance.minVeFXSForMaxBoost.call(COLLATERAL_FRAX_AND_FXS_OWNER)).div(BIG18); + const user_min_vefxs_for_max_boost_9_0 = new BigNumber(await staking_instance.minVeFXSForMaxBoost.call(accounts[9])).div(BIG18); + console.log("user_min_vefxs_for_max_boost_1_0: ", user_min_vefxs_for_max_boost_1_0.toString()); + console.log("user_min_vefxs_for_max_boost_9_0: ", user_min_vefxs_for_max_boost_9_0.toString()); + + const _total_liquidity_locked_0 = new BigNumber(await staking_instance.totalLiquidityLocked.call()).div(BIG18); + const _total_combined_weight_0 = new BigNumber(await staking_instance.totalCombinedWeight.call()).div(BIG18); + const frax_per_lp_token_0 = new BigNumber(await staking_instance.fraxPerLPToken.call()).div(BIG18); + console.log("_total_liquidity_locked GLOBAL: ", _total_liquidity_locked_0.toString()); + console.log("_total_combined_weight GLOBAL: ", _total_combined_weight_0.toString()); + console.log("frax_per_lp_token_0 GLOBAL: ", frax_per_lp_token_0.toString()); + + + console.log(chalk.hex("#ff8b3d")("====================================================================")); + console.log(chalk.hex("#ff8b3d")("MID-WEEK-SYNC AND [9] CLAIMS")); + console.log(chalk.hex("#ff8b3d")("====================================================================")); + await time.increase(2 * 86400); + await time.advanceBlock(); + + // Sync + await staking_instance.sync({ from: COLLATERAL_FRAX_AND_FXS_OWNER }); + + // Print reward token balances + console.log(chalk.yellow("--- Before claim ---")); + for (let i = 0; i < rew_addresses.length; i++) { + console.log(`Farm ${rew_symbols[i]} balance: ${new BigNumber(await rew_instances[i].balanceOf(staking_instance.address)).div(BIG18).toNumber()}`); + console.log(`Farm ${rew_symbols[i]} owed: ${new BigNumber(await staking_instance.ttlRewsOwed(i)).div(BIG18).toNumber()}`); + console.log(`Farm ${rew_symbols[i]} paid: ${new BigNumber(await staking_instance.ttlRewsPaid(i)).div(BIG18).toNumber()}`); + + // Balance tracking + rew_tkn_bals_before[i][9]["mid0"] = new BigNumber(await rew_instances[i].balanceOf(accounts[9])).div(BIG18).toNumber(); + console.log(`accounts[9] ${rew_symbols[i]} balance: ${rew_tkn_bals_before[i][9]["mid0"]}`); + } + + // [9] claims + console.log(chalk.yellow("--- Claim ---")); + await staking_instance.getReward({ from: accounts[9] }); + + // Print reward token balances + console.log(chalk.yellow("--- After claim ---")); + for (let i = 0; i < rew_addresses.length; i++) { + console.log(`Farm ${rew_symbols[i]} balance: ${new BigNumber(await rew_instances[i].balanceOf(staking_instance.address)).div(BIG18).toNumber()}`); + console.log(`Farm ${rew_symbols[i]} owed: ${new BigNumber(await staking_instance.ttlRewsOwed(i)).div(BIG18).toNumber()}`); + console.log(`Farm ${rew_symbols[i]} paid: ${new BigNumber(await staking_instance.ttlRewsPaid(i)).div(BIG18).toNumber()}`); + + // Balance tracking + rew_tkn_bals_after[i][9]["mid0"] = new BigNumber(await rew_instances[i].balanceOf(accounts[9])).div(BIG18).toNumber(); + console.log(`accounts[9] ${rew_symbols[i]} balance: ${rew_tkn_bals_after[i][9]["mid0"]}`); + + // Earnings tracking + rew_tkn_earned[i][9]["mid0"] = (rew_tkn_bals_after[i][9]["mid0"]) - (rew_tkn_bals_before[i][9]["mid0"]); + console.log(`accounts[9] mid-week part 0 earnings ${rew_symbols[i]}: ${(rew_tkn_earned[i][9]["mid0"])}`); + } + + console.log(chalk.hex("#ff8b3d")("====================================================================")); + console.log(chalk.hex("#ff8b3d")("TRIGGER THE SHUTDOWN")); + console.log(chalk.hex("#ff8b3d")("====================================================================")); + await time.increase(2 * 86400); + await time.advanceBlock(); + + // Sync + await staking_instance.sync({ from: COLLATERAL_FRAX_AND_FXS_OWNER }); + + // Trigger the shutdown + await staking_instance.initiateWithdrawalOnlyShutdown({ from: STAKING_OWNER }); + + // Staking should fail + await lp_tkn_instance.approve(staking_instance.address, uni_pool_locked_1_sum, { from: COLLATERAL_FRAX_AND_FXS_OWNER }); + await expectRevert( + staking_instance.stakeLocked(uni_pool_locked_1, 6.95 * 86400, { from: COLLATERAL_FRAX_AND_FXS_OWNER }), + "Only withdrawals allowed" + ); + + // Claiming should fail + await expectRevert( + staking_instance.getReward({ from: accounts[9] }), + "Only withdrawals allowed" + ); + + // lockAdditional should fail + const addl_amt_add = new BigNumber("1e18"); + let add_more_before = await staking_instance.lockedStakes.call(COLLATERAL_FRAX_AND_FXS_OWNER, 2); + await lp_tkn_instance.approve(staking_instance.address, addl_amt_add, { from: COLLATERAL_FRAX_AND_FXS_OWNER }); + await expectRevert( + staking_instance.lockAdditional(add_more_before.kek_id, addl_amt_add, { from: COLLATERAL_FRAX_AND_FXS_OWNER }), + "Only withdrawals allowed" + ); + + // lockLonger should fail + let new_end_timestamp = (await time.latest()).toNumber() + 1209600; + await expectRevert( + staking_instance.lockLonger(add_more_before.kek_id, new_end_timestamp, { from: COLLATERAL_FRAX_AND_FXS_OWNER }), + "Only withdrawals allowed" + ); + + // Syncing should fail + await expectRevert( + staking_instance.sync({ from: COLLATERAL_FRAX_AND_FXS_OWNER }), + "Only withdrawals allowed" + ); + + // Withdrawing should SUCCEED. + staking_instance.withdrawLocked(locked_stake_structs_1_0[2].kek_id, true, { from: COLLATERAL_FRAX_AND_FXS_OWNER }); + staking_instance.withdrawLocked(locked_stake_structs_1_0[3].kek_id, true, { from: COLLATERAL_FRAX_AND_FXS_OWNER }); + staking_instance.withdrawLocked(locked_stake_structs_9_0[1].kek_id, false, { from: accounts[9] }); + + // Advance a block + await time.increase(15); + await time.advanceBlock(); + + // Show the stake structs + const locked_stake_structs_1_1 = await staking_instance.lockedStakesOf.call(COLLATERAL_FRAX_AND_FXS_OWNER); + const locked_stake_structs_9_1 = await staking_instance.lockedStakesOf.call(accounts[9]); + console.log("LOCKED STAKES [1] (after withdrawal): ", locked_stake_structs_1_1); + console.log("LOCKED STAKES [9] (after withdrawal): ", locked_stake_structs_9_1); + + // Withdrawing again should FAIL + await expectRevert.unspecified(staking_instance.withdrawLocked(locked_stake_structs_1_0[2].kek_id, true, { from: COLLATERAL_FRAX_AND_FXS_OWNER })); + await expectRevert.unspecified(staking_instance.withdrawLocked(locked_stake_structs_1_0[3].kek_id, true, { from: COLLATERAL_FRAX_AND_FXS_OWNER })); + await expectRevert.unspecified(staking_instance.withdrawLocked(locked_stake_structs_9_0[1].kek_id, true, { from: accounts[9] })); + + // Show the stake structs again + const locked_stake_structs_1_2 = await staking_instance.lockedStakesOf.call(COLLATERAL_FRAX_AND_FXS_OWNER); + const locked_stake_structs_9_2 = await staking_instance.lockedStakesOf.call(accounts[9]); + console.log("LOCKED STAKES [1] (after withdrawal again): ", locked_stake_structs_1_2); + console.log("LOCKED STAKES [9] (after withdrawal again): ", locked_stake_structs_9_2); + }); diff --git a/src/hardhat/test/openzeppelin/ERC20.behavior.js b/src/hardhat/test/old_tests/openzeppelin/ERC20.behavior.js similarity index 100% rename from src/hardhat/test/openzeppelin/ERC20.behavior.js rename to src/hardhat/test/old_tests/openzeppelin/ERC20.behavior.js diff --git a/src/hardhat/test/openzeppelin/ERC20.test.js b/src/hardhat/test/old_tests/openzeppelin/ERC20.test.js similarity index 100% rename from src/hardhat/test/openzeppelin/ERC20.test.js rename to src/hardhat/test/old_tests/openzeppelin/ERC20.test.js diff --git a/src/hardhat/test/openzeppelin/signatures.ts b/src/hardhat/test/old_tests/openzeppelin/signatures.ts similarity index 100% rename from src/hardhat/test/openzeppelin/signatures.ts rename to src/hardhat/test/old_tests/openzeppelin/signatures.ts diff --git a/src/hardhat/test/truffle-fixture.js b/src/hardhat/test/truffle-fixture.js index 6f26b6c6..d51daf25 100644 --- a/src/hardhat/test/truffle-fixture.js +++ b/src/hardhat/test/truffle-fixture.js @@ -25,7 +25,7 @@ const CrossChainOracle = artifacts.require("Oracle/CrossChainOracle"); // const FraxCCFarmV2_ArbiCurveVSTFRAX = artifacts.require("Staking/Variants/FraxCCFarmV2_ArbiCurveVSTFRAX"); // const FraxCCFarmV2_SaddleArbUSDv2 = artifacts.require("Staking/Variants/FraxCCFarmV2_SaddleArbUSDv2"); // const FraxCCFarmV3_ArbiSaddleL2D4 = artifacts.require("Staking/Variants/FraxCCFarmV3_ArbiSaddleL2D4"); -const FraxCCFarmV4_cvxUSDPlusFRAXBP = artifacts.require("Staking/Variants/FraxCCFarmV4_cvxUSDPlusFRAXBP"); +const FraxCCFarmV4_cvxLP = artifacts.require("Staking/Variants/FraxCCFarmV4_cvxLP"); // AMOs const SushiSwapLiquidityAMO_ARBI = artifacts.require("Misc_AMOs/__CROSSCHAIN/Arbitrum/SushiSwapLiquidityAMO_ARBI.sol"); @@ -56,7 +56,7 @@ module.exports = async (deployer) => { // let FraxCCFarmV2_ArbiCurveVSTFRAX_instance; // let FraxCCFarmV2_SaddleArbUSDv2_instance; // let FraxCCFarmV3_ArbiSaddleL2D4_instance; - let FraxCCFarmV4_cvxUSDPlusFRAXBP_instance; + let FraxCCFarmV4_cvxLP_instance; // AMOs let curve_amo_arbi_instance; @@ -209,9 +209,9 @@ module.exports = async (deployer) => { // "0x0000000000000000000000000000000000000000", // Rewarder // ); - console.log(chalk.yellow("========== FraxCCFarmV4_cvxUSDPlusFRAXBP ==========")); - // FraxCCFarmV4_cvxUSDPlusFRAXBP - FraxCCFarmV4_cvxUSDPlusFRAXBP_instance = await FraxCCFarmV4_cvxUSDPlusFRAXBP.new( + console.log(chalk.yellow("========== FraxCCFarmV4_cvxLP ==========")); + // FraxCCFarmV4_cvxLP + FraxCCFarmV4_cvxLP_instance = await FraxCCFarmV4_cvxLP.new( THE_ACCOUNTS[6], // After initializing, switch to CONTRACT_ADDRESSES.arbitrum.multisigs.Comptrollers, [ CONTRACT_ADDRESSES.arbitrum.canonicals.FXS, @@ -271,7 +271,7 @@ module.exports = async (deployer) => { // FraxCCFarmV2_ArbiCurveVSTFRAX.setAsDeployed(FraxCCFarmV2_ArbiCurveVSTFRAX_instance); // FraxCCFarmV2_SaddleArbUSDv2.setAsDeployed(FraxCCFarmV2_SaddleArbUSDv2_instance); // FraxCCFarmV3_ArbiSaddleL2D4.setAsDeployed(FraxCCFarmV3_ArbiSaddleL2D4_instance); - FraxCCFarmV4_cvxUSDPlusFRAXBP.setAsDeployed(FraxCCFarmV4_cvxUSDPlusFRAXBP_instance); + FraxCCFarmV4_cvxLP.setAsDeployed(FraxCCFarmV4_cvxLP_instance); // SushiSwapLiquidityAMO_ARBI.setAsDeployed(sushiswap_liquidity_amo_arbi_instance); // CurveAMO_ARBI.setAsDeployed(curve_amo_arbi_instance); } \ No newline at end of file diff --git a/src/types/constants.ts b/src/types/constants.ts index 0d29da24..067b419f 100755 --- a/src/types/constants.ts +++ b/src/types/constants.ts @@ -2474,6 +2474,26 @@ export const CONTRACT_ADDRESSES = { DOLAFRAXBP_Pool: '0xE57180685E3348589E9521aa53Af0BCD497E884d', FRAXBP: '0x3175Df0976dFA876431C2E9eE6Bc45b65d3473CC', FRAXBP_Pool: '0xDcEF968d416a41Cdac0ED8702fAC8128A64241A2', + FRAXFPI: '0x2Cf99A343e4ECF49623E82f2Ec6A9b62e16Ff3fe', + FRAXFPI_Pool: '0x2Cf99A343e4ECF49623E82f2Ec6A9b62e16Ff3fe', + FRAXFPI_NG: '0x2cf99a343e4ecf49623e82f2ec6a9b62e16ff3fe', + FRAXFPI_NG_Pool: '0x2cf99a343e4ecf49623e82f2ec6a9b62e16ff3fe', + FRAXFPI_NG_Gauge: '0x107e4c1302403095e5a4bc5e815982aa732e95bd', + FRAXFXB_20240630: '0x4ef4c7519023f30a78647eeab321d6cfabc2513c', + FRAXFXB_20240630_Pool: '0x4ef4c7519023f30a78647eeab321d6cfabc2513c', + FRAXFXB_20240630_Gauge: '0x35ad1acf0c4be5d4ba11342128d440fdb9e189eb', + FRAXFXB_20241231: '0x6307e6688819951cf8d6b6066018243d2496952f', + FRAXFXB_20241231_Pool: '0x6307e6688819951cf8d6b6066018243d2496952f', + FRAXFXB_20241231_Gauge: '0xc2fe9d3c761994897594df63b33b6d843ab7b1cf', + FRAXFXB_20261231: '0xe035e27a8ed6842b478933820f90093d205f7098', + FRAXFXB_20261231_Pool: '0xe035e27a8ed6842b478933820f90093d205f7098', + FRAXFXB_20261231_Gauge: '0x0e83df148f69965bfe752250835854b0dbeeaf01', + FRAXPYUSD: '0xa5588f7cdf560811710a2d82d3c9c99769db1dcb', + FRAXPYUSD_Pool: '0xa5588f7cdf560811710a2d82d3c9c99769db1dcb', + FRAXPYUSD_Gauge: '0xdc6d319fac1498125e871ccedf7f1b9998eba3c5', + FRAXsDAI: '0xce6431d21e3fb1036ce9973a3312368ed96f5ce7', + FRAXsDAI_Pool: '0xce6431d21e3fb1036ce9973a3312368ed96f5ce7', + FRAXsDAI_Gauge: '0xb9bdcdcd7c3c1a3255402d44639cb6c7281833cf', FRAXUSDP: '0xFC2838a17D8e8B1D5456E0a351B0708a09211147', FRAXUSDP_Pool: '0xaE34574AC03A15cd58A92DC79De7B1A0800F1CE3', FXSfrxETH: '0x970faa9afbc5feb3ec53059ba330dee71e22b55b', @@ -2552,6 +2572,18 @@ export const CONTRACT_ADDRESSES = { cvxCVXFRAXBP_Rewarder: '0xf02B3A77b1e7775de10294d78a4c3d77772B484A', cvxDOLAFRAXBP: '0xf7eCC27CC9DB5d28110AF2d89b176A6623c7E351', cvxDOLAFRAXBP_Rewarder: '0x0404d05F3992347d2f0dC3a97bdd147D77C85c1c', + cvxFRAXFPI_NG: '0xBA927A88eb7B7902ffC5cd99b94fA2964d1a1E03', + cvxFRAXFPI_NG_Rewarder: '0x062450B06EB92F1C4E227C41c987ed97c93Ae232', + cvxFRAXFXB_20240630: '0x5A82ae31C1a36833B9E148d01E967c1b05eDb346', + cvxFRAXFXB_20240630_Rewarder: '0x830a71574E3c8AE9da477cE1B7F12849E9f7c8c8', + cvxFRAXFXB_20241231: '0x06382622D0FafB372dA64b765EAd3d082a8BCabB', + cvxFRAXFXB_20241231_Rewarder: '0x249cE0b1a682AD7b02e43271f9f0C9ac85Ec47e8', + cvxFRAXFXB_20261231: '0x7Ce2F444D0B034f44EeA4FE77608f0c680966D20', + cvxFRAXFXB_20261231_Rewarder: '0xC9F6D73fD06b8EEB0A4E87cAd407219E10F31712', + cvxFRAXPYUSD: '0x839CF70a09f1CB104b4eb0B48E26B855A0F7e855', + cvxFRAXPYUSD_Rewarder: '0xB10a6e39Ed8a66fEd3aAef3866a95611a49B9a95', + cvxFRAXsDAI: '0xAb4feFd9cabC03D935cAD345b7626C3180238fb3', + cvxFRAXsDAI_Rewarder: '0xE627082369689b2B86D948c377A4aE4e739C59eE', cvxFRAXUSDP: '0x29c22337E3ce362Ce4ad8ecc9CE11fE5A08DBA3c', cvxFRAXUSDP_Rewarder: '0x6991C1CD588c4e6f6f1de3A0bac5B8BbAb7aAF6d', cvxFXSFRAXBP: '0xF57ccaD8122B898A147Cc8601B1ECA88B1662c7E', @@ -2576,6 +2608,8 @@ export const CONTRACT_ADDRESSES = { cvxSDTFRAXBP_Rewarder: '0xc3df9cC2B8FFdB801E8e6E8FF9C1245E2dEcdA98', cvxSTGFRAXBP: '0x867fe27fc2462cff8890b54dfd64e6d42a9d1ac8', cvxSTGFRAXBP_Rewarder: '0xAa57A289Bb22a1A0C583db306F6566AE2c0CAf21', + cvxtricryptoFRAX: "0xa0821fDc8d62413757B9da2357b0e5371f45335e", + cvxtricryptoFRAX_Rewarder: "0x4af50A690062970DAf1d2f0Fa9042C6f5a5495E3", cvxtriSDT: "0x5C2c6E21e141Dd3D13C34754A20d620A1bb731B5", cvxtriSDT_Rewarder: "0x1f2a117314e6e8655E0A1C97669b7B836e2cDb91", cvxTUSDFRAXBP: '0x33baeDa08b8afACc4d3d07cf31d49FC1F1f3E893', @@ -2612,28 +2646,30 @@ export const CONTRACT_ADDRESSES = { cvxfrxETHCVX_Rewarder: '0xA064C1EeEbECD1DF41432f4B7264F508F005aF0C', cvxfrxETHETH: '0xC07e540DbFecCF7431EA2478Eb28A03918c1C30E', // Curve calls it cvxfrxETHCRV cvxfrxETHETH_Rewarder: '0xbD5445402B0a287cbC77cb67B2a52e2FC635dce4', + cvxfrxETHWETH: '0xAA71e0065A29F2529aBC0F615874009287966229', // Curve calls it frxeth-ng + cvxfrxETHWETH_Rewarder: '0xFafDE12dC476C4913e29F47B4747860C148c5E4f', cvxfrxETHalETH: '0x112E8f4b685475CcEd5C38142Cd7A2aE41ef6737', cvxfrxETHalETH_Rewarder: '0xe0DbbCF08A5465db7c7401C86cce89030e11aB67', cvxfrxETHankrETH: '0xc18695D5824C49cF50E054953B3A5910c45597A0', cvxfrxETHankrETH_Rewarder: '0xc18695D5824C49cF50E054953B3A5910c45597A0', cvxfrxETHcbETH: '0x39E1Ea9CB87a352CfFd43e0b19D573d12cf110CC', cvxfrxETHcbETH_Rewarder: '0x0080d49D4a4921dF0F3853c5e4533462A51fbb29', - cvxfrxETHmsETH: "0x29889a5fE8e467da8af697C5f1eB901F4911Ab50", - cvxfrxETHmsETH_Rewarder: "0x15507737f44446EB0A86147E2C72Aa6A111A64B2", + cvxfrxETHmsETH: '0x29889a5fE8e467da8af697C5f1eB901F4911Ab50', + cvxfrxETHmsETH_Rewarder: '0x15507737f44446EB0A86147E2C72Aa6A111A64B2', cvxfrxETHpETH: '0x1941da8D12A6B39B76bd54c865c8cD3a4553E9C3', cvxfrxETHpETH_Rewarder: '0x42aaC689261723d06d2a8f356448bd8249f831Bc', + cvxfrxETHpxETH: '0xDE183818eb02AfEa367C1AAFF1BFdeDecE6B2B05', + cvxfrxETHpxETH_Rewarder: '0x72b99E2cf3f9A2bbDA1Cc76894E4554d7aA8FE2E', cvxfrxETHrETH: '0xeEC515BE690BF445c8C4d1625FD82FA75Bc38bf6', cvxfrxETHrETH_Rewarder: '0x84754821b5484A69DB3164eF4eDC5A5657318039', - cvxfrxETHrETH_StaFi: "0x02a2206268b49A9b3ee5DD51577E5bDa0072d5F1", - cvxfrxETHrETH_StaFi_Rewarder: "0xf011aD8E91D1dc8625e5548755AEa1F6Fff81089", + cvxfrxETHrETH_StaFi: '0x02a2206268b49A9b3ee5DD51577E5bDa0072d5F1', + cvxfrxETHrETH_StaFi_Rewarder: '0xf011aD8E91D1dc8625e5548755AEa1F6Fff81089', cvxfrxETHsETH: '0xf67FEC3D0A32418813bE2BcdD78e058BCFa33AE8', cvxfrxETHsETH_Rewarder: '0x55cdF6c7E6d04b83835E4702ed395D0263237DA2', cvxfrxETHstETH: '0x01492A2cB0Bd14034710475197B4169501B49Ead', cvxfrxETHstETH_Rewarder: '0xC3D0B8170E105d6476fE407934492930CAc3BDAC', - cvxfrxETHWETH: '0xAA71e0065A29F2529aBC0F615874009287966229', - cvxfrxETHWETH_Rewarder: '0xFafDE12dC476C4913e29F47B4747860C148c5E4f', - cvxfrxETHzETH: "0x52EdB08ab81e4Cc32cf318aed17dB11c09C3E8B9", - cvxfrxETHzETH_Rewarder: "0x98B662443695f7328F6A7fDe9894CC0E88630269", + cvxfrxETHzETH: '0x52EdB08ab81e4Cc32cf318aed17dB11c09C3E8B9', + cvxfrxETHzETH_Rewarder: '0x98B662443695f7328F6A7fDe9894CC0E88630269', cvxgusd3CRV_free: '0x15c2471ef46Fa721990730cfa526BcFb45574576', cvxmsUSDFRAXBP: '0xc3b19502F8c02be75F3f77fd673503520DEB51dD', cvxmsUSDFRAXBP_Rewarder: '0xF189A4a1E845Fd62944F93De497409798523B397', @@ -2663,30 +2699,33 @@ export const CONTRACT_ADDRESSES = { frxETHcbETH: '0x548e063ce6f3bac31457e4f5b4e2345286274257', frxETHcbETH_Gauge: '0xd10c17d82053dd0ab65851a9a93a0abe0c4f4794', frxETHcbETH_Pool: '0x73069892f6750ccaaababadc54b6b6b36b3a057d', - frxETHmsETH: "0x2d600bbbcc3f1b6cb9910a70bab59ec9d5f81b9a", - frxETHmsETH_Gauge: "0xb7a3c519889a916c5ecb54101e69ecf11de60d0b", - frxETHmsETH_Pool: "0x2d600bbbcc3f1b6cb9910a70bab59ec9d5f81b9a", + frxETHmsETH: '0x2d600bbbcc3f1b6cb9910a70bab59ec9d5f81b9a', + frxETHmsETH_Gauge: '0xb7a3c519889a916c5ecb54101e69ecf11de60d0b', + frxETHmsETH_Pool: '0x2d600bbbcc3f1b6cb9910a70bab59ec9d5f81b9a', frxETHpETH: '0x320b564fb9cf36933ec507a846ce230008631fd3', frxETHpETH_Gauge: '0x57e1947e1134f6e733a4a694de6a163ef23edf54', frxETHpETH_Pool: '0x320b564fb9cf36933ec507a846ce230008631fd3', + frxETHpxETH: '0xe2ed1dac3a9547bc6057e32bf8133b5268d7d987', + frxETHpxETH_Gauge: '0x277d1424a84B35ec0a8108482551b00b4fc1539b', + frxETHpxETH_Pool: '0xe2ed1dac3a9547bc6057e32bf8133b5268d7d987', frxETHrETH: '0xba6c373992ad8ec1f7520e5878e5540eb36debf1', frxETHrETH_Gauge: '0xf20bd4d5a4112d5f9c64adf53726f3ef1b7d0d61', frxETHrETH_Pool: '0xe7c6e0a739021cdba7aac21b4b728779eef974d9', - frxETHrETH_StaFi: "0xfcc067efb7be2eebd32615f14fc22195abb68e9b", - frxETHrETH_StaFi_Gauge: "0xb0549599d8446a196541de11008ef5e79fa14f57", - frxETHrETH_StaFi_Pool: "0xfcc067efb7be2eebd32615f14fc22195abb68e9b", + frxETHrETH_StaFi: '0xfcc067efb7be2eebd32615f14fc22195abb68e9b', + frxETHrETH_StaFi_Gauge: '0xb0549599d8446a196541de11008ef5e79fa14f57', + frxETHrETH_StaFi_Pool: '0xfcc067efb7be2eebd32615f14fc22195abb68e9b', frxETHsETH: '0x663ac72a1c3e1c4186cd3dcb184f216291f4878c', frxETHsETH_Gauge: '0x77ef5d544ff6c739e7e10a549f64dd08055538d1', frxETHsETH_Pool: '0x663ac72a1c3e1c4186cd3dcb184f216291f4878c', - frxETHstETH: '0x4d9f9d15101eec665f77210cb999639f760f831e', - frxETHstETH_Gauge: '0x821529bb07c83803c9cc7763e5974386e9efedc7', - frxETHstETH_Pool: '0x4d9f9d15101eec665f77210cb999639f760f831e', + frxETHstETH: '0x4d9f9D15101EEC665F77210cB999639f760F831E', + frxETHstETH_Gauge: '0x821529Bb07c83803C9CC7763e5974386e9eFEdC7', + frxETHstETH_Pool: '0x4d9f9D15101EEC665F77210cB999639f760F831E', frxETHWETH: '0x9c3b46c0ceb5b9e304fcd6d88fc50f7dd24b31bc', frxETHWETH_Gauge: '0x4e21418095d32d15c6e2b96a9910772613a50d50', frxETHWETH_Pool: '0x9c3b46c0ceb5b9e304fcd6d88fc50f7dd24b31bc', - frxETHzETH: "0xfc89b519658967fcbe1f525f1b8f4bf62d9b9018", - frxETHzETH_Gauge: "0xb3627140beacb97f9ca52b34090352fdafc77d72", - frxETHzETH_Pool: "0xfc89b519658967fcbe1f525f1b8f4bf62d9b9018", + frxETHzETH: '0xfc89b519658967fcbe1f525f1b8f4bf62d9b9018', + frxETHzETH_Gauge: '0xb3627140beacb97f9ca52b34090352fdafc77d72', + frxETHzETH_Pool: '0xfc89b519658967fcbe1f525f1b8f4bf62d9b9018', gOHM: '0x0ab87046fBb341D058F17CBC4c1133F25a20a52f', gusd3CRV: '0xd2967f45c4f384deea880f807be904762a3dea07', msUSDFRAXBP: '0xc3b19502f8c02be75f3f77fd673503520deb51dd', @@ -2721,8 +2760,8 @@ export const CONTRACT_ADDRESSES = { sdl_vesperFRAXEarnPoolFRAXBP: '0xA3beCa25Bd2bDd67272556666A7791d772C36571', sdl_vesperFRAXEarnPoolFRAXBP_Gauge: '0x9980c9b35844946cf3451cc0b43d9b6501f4a96e', sdl_vesperFRAXEarnPoolFRAXBP_Pool: '0x9AC17f026f0599F77b3513a0A35f0258B0ec77f3', - stETHfrxETH: '0x4d9f9d15101eec665f77210cb999639f760f831e', - stETHfrxETH_Pool: '0x4d9f9d15101eec665f77210cb999639f760f831e', + stETHfrxETH: '0x4d9f9D15101EEC665F77210cB999639f760F831E', + stETHfrxETH_Pool: '0x4d9f9D15101EEC665F77210cB999639f760F831E', stkAAVE: '0x4da27a545c0c5b758a6ba100e3a049001de870f5', stkMTA: '0x8f2326316eC696F6d023E37A9931c2b2C177a3D7', stkcvxALCXFRAXBP: '0xAF1b82809296E52A42B3452c52e301369Ce20554', @@ -2731,11 +2770,17 @@ export const CONTRACT_ADDRESSES = { stkcvxCOILFRAXBP: '0xa5B6f8Ec4122c5Fe0dBc4Ead8Bfe66A412aE427C', 'stkcvxCOILFRAXBP (Deprecated)': '0xdA69CeC36AE581C1b2a2EEb77C527Fb7c1331310', stkcvxCRV: '0xaa0c3f5f7dfd688c6e646f66cd2a6b66acdbe434', - stkcvxCRVUSDFRAX: '0xb6F63cc2066e7626fA47fCC37E78Df9fe89F1663', + stkcvxcrvUSDFRAX: '0xb6F63cc2066e7626fA47fCC37E78Df9fe89F1663', stkcvxCVXFRAXBP: '0x93D1De20eaBB21686CFe716f78F67E51ee578185', stkcvxDOLAFRAXBP: '0xF06c8696730cf760619e4fA0eDd0f79ea50531A9', stkcvxFPIFRAX: '0x7287488F8Df7dddc5f373142D4827aAF92AAC845', stkcvxFRAXBP: '0x8a53ee42FB458D4897e15cc7dEa3F75D0F1c3475', + stkcvxFRAXFPI_NG: '0x562E4d6C958333a5f0988FFedA11e45C27722994', + stkcvxFRAXFXB_20240630: '0x6E804b00fe562707E3a86bBbcC53Eb73c36c0cf6', + stkcvxFRAXFXB_20241231: '0xBb16610CF051AAc4bBEF9c53e2fc99b77BCE4A8c', + stkcvxFRAXFXB_20261231: '0x8aa015CE081505064a9cB8e7816deE3Bd7a45a12', + stkcvxFRAXPYUSD: '0x59Ae4E430be0bF47e758F7E022E9a50A8C7D09d6', + stkcvxFRAXsDAI: '0x2EB43dBF8C0013712fEc7B2A57453e41B9907e95', stkcvxFRAXUSDP: '0x5385AE7dC08F5C3799691E5b387cB01108B76627', stkcvxGHOFRAXBP: '', stkcvxGRAIFRAXBP: '0xDf9BB26ba5a05fcFc2637dC763AA4eb735911568', @@ -2747,9 +2792,11 @@ export const CONTRACT_ADDRESSES = { stkcvxRSRFRAXBP: '0xF37007f2b9DE656115e1B977Bb1fd38A99B8a2a6', stkcvxSDTFRAXBP: '0xE6Aa75F98e6c105b821a2dba9Fbbd886b421F06b', stkcvxSTGFRAXBP: '0xAe1bA2Cf0eBF00C5052309992d7B6c94e3EfcBEf', + stkcvxtricryptoFRAX: '0x0643d5C29498149D31bAd69a5bE2771b5440C58d', stkcvxtriSDT: '0xAD059ccF041e344eA52A3152Bbf654c605d68473', stkcvxTUSDFRAXBP: '0x32fA492Ac1F729E0eE9eDdfCBacc3ef72B234e27', stkcvxUSDDFRAXBP: '0x507e41A64eB7AE47ee303e3B16237ab757F6C06c', + 'stkcvxUZDFRAXBP (Deprecated Old)': '0x57Fb068BDa27351EF0913113264Ce3EF4EeA3316', 'stkcvxUZDFRAXBP (Deprecated)': '0x57Fb068BDa27351EF0913113264Ce3EF4EeA3316', stkcvxUZDFRAXBP: '0xaa236bd1302755937Aa46D6f3423655BbC654B02', stkcvxXAIFRAXBP: '0x19f0a60f4635d3E2c48647822Eda5332BA094fd3', @@ -2769,18 +2816,21 @@ export const CONTRACT_ADDRESSES = { stkcvxfrxETHcbETH: '0x4e9D8323603E69c1310E5e04Db172bD5aB07df95', stkcvxfrxETHmsETH: '0x09bFD0c760E4a1bFc970cdaAAD240307C917Aa6c', stkcvxfrxETHpETH: '0xeCF134dF5DE1e0E12A441D446ff81994Cb0301A2', + stkcvxfrxETHpxETH: '0x51521Da84Cbce1B4A930B55d8D896b590532f7A6', stkcvxfrxETHrETH: '0xE0c65F74728Ff26219C6adddCEfB215484bb08DF', stkcvxfrxETHrETH_StaFi: '0xffAFA5aA5b0a9C0C8e05ec8b89056F018EE2Bad6', stkcvxfrxETHsETH: '0x44b51F7F92D761Cf2FC46011AD6b74Ce56447924', stkcvxfrxETHstETH: '0xc2eC3d1209FD1Fc512950825f34281EaF9aB13A2', stkcvxfrxETHWETH: '0x08061feC3FC09Aa2Eb4B4B72EA618034CBFD22b0', - stkcvxfrxETHzETH: "0xd69068777d1b2dc74522117efA75AA195c0b57DB", + stkcvxfrxETHzETH: '0xd69068777d1b2dc74522117efA75AA195c0b57DB', stkcvxmsUSDFRAXBP: '0x227b7F44468A0EC0FDdfc3FB0cE09b294E62f875', stkcvxpUSDFRAXBP: '0x7AEF5bDC573dCbfb40EC68b0BAAB03abB846C9c6', stkcvxsUSDFRAXBP: '0x9f0C2673a33b7087e367253f196A7E823fBc2341', stkcvxswETHfrxETH: '0xa3ae006Cc863423F690ca01C2a8F692B97c93c3b', swETHfrxETH: '0xe49addc2d1a131c6b8145f0eba1c946b7198e0ba', swETHfrxETH_Pool: '0x67e0bdbe0a2c5999a60d048f50e794218056b767', + tricryptoFRAX: "0x4d1941a887ec788f059b3bfcc8ee1e97b968825b", + tricryptoFRAX_Gauge: "0x4b43feab8f5ccd38ac0831dd7ec797330114f058", triSDT: "0x954313005c56b555bdc41b84d6c63b69049d7847", triSDT_Gauge: "0x2dd2b7e07dd433b758b98a3889a63cbf48ef0d99", tFRAX: '0x94671a3cee8c7a12ea72602978d1bb84e920efb2', @@ -2789,7 +2839,7 @@ export const CONTRACT_ADDRESSES = { veSDL: '0xD2751CdBED54B87777E805be36670D7aeAe73bb2', vlCVX: '0x72a19342e8F1838460eBFCCEf09F6585e32db86E', xSDT: '0xaC14864ce5A98aF3248Ffbf549441b04421247D3', - yvUSDC: '0xa354f35829ae975e850e23e9615b11da1b3dc4de', // V2: "0x5f18C75AbDAe578b483E5F43f12a39cF75b973a9" + yvUSDC: '0xa354f35829ae975e850e23e9615b11da1b3dc4de', // V2: '0x5f18C75AbDAe578b483E5F43f12a39cF75b973a9' }, saddle_pools: { "Saddle alUSD/FEI/FRAX/LUSD": "0xC69DDcd4DFeF25D8a793241834d4cc4b3668EAD6", @@ -2844,6 +2894,7 @@ export const CONTRACT_ADDRESSES = { pair_tokens: { 'Aave aFRAX': '0xd4937682df3C8aEF4FE912A96A74121C0829E664', 'Angle FRAX/agEUR Staking': '0xb3b209bb213a5da5b947c56f2c770b3e1015f1fe', + 'Balancer frxETH-pxETH Gauge': '0xA1D5B81d0024809FAA278Ab72fe3D2FB467Dd28b', 'Balancer sfrxETH-stETH-rETH-BPT': '0x8e85e97ed19C0fa13B2549309965291fbbc0048b', 'Bunni FRAX/USDC Gauge': '0x471A34823DDd9506fe8dFD6BC5c2890e4114Fafe', 'Bunni frxETH/WETH Gauge': '0x4Bf0082080d937897330BAB735c2Baa99FF16F19', @@ -2856,7 +2907,7 @@ export const CONTRACT_ADDRESSES = { 'Convex stkcvxclevUSDFRAXBP': '0x3199a1ed1Ad4cb1d1b57939809c8ee79eafE9934', 'Convex stkcvxCOILFRAXBP (Deprecated)': '0xdA69CeC36AE581C1b2a2EEb77C527Fb7c1331310', 'Convex stkcvxCOILFRAXBP': '0xa5B6f8Ec4122c5Fe0dBc4Ead8Bfe66A412aE427C', - 'Convex stkcvxcrvUSDFRAX' : '0xb6F63cc2066e7626fA47fCC37E78Df9fe89F1663', + 'Convex stkcvxcrvUSDFRAX': '0xb6F63cc2066e7626fA47fCC37E78Df9fe89F1663', 'Convex stkcvxCVXFRAXBP': '0x93D1De20eaBB21686CFe716f78F67E51ee578185', 'Convex stkcvxcvxCRVFRAXBP': '0xa103a6ca0C4D4072BA59a55FD453BFE4197A095B', 'Convex stkcvxcvxFXSFRAXBP': '0xA6A8F315b1a8C9B05433d206b8fECfbF0fC96217', @@ -2867,6 +2918,12 @@ export const CONTRACT_ADDRESSES = { 'Convex stkcvxGUSDFRAXBP': '0x16e9eaC2A9e29aF3c53d24ed0F07fc403E098b64', 'Convex stkcvxFPIFRAX': '0x7287488F8Df7dddc5f373142D4827aAF92AAC845', 'Convex stkcvxFRAXBP': '0x8a53ee42FB458D4897e15cc7dEa3F75D0F1c3475', + 'Convex stkcvxFRAXFPI_NG': '0x562E4d6C958333a5f0988FFedA11e45C27722994', + 'Convex stkcvxFRAXFXB_20240630': '0x6E804b00fe562707E3a86bBbcC53Eb73c36c0cf6', + 'Convex stkcvxFRAXFXB_20241231': '0xBb16610CF051AAc4bBEF9c53e2fc99b77BCE4A8c', + 'Convex stkcvxFRAXFXB_20261231': '0x8aa015CE081505064a9cB8e7816deE3Bd7a45a12', + 'Convex stkcvxFRAXPYUSD': '0x59Ae4E430be0bF47e758F7E022E9a50A8C7D09d6', + 'Convex stkcvxFRAXsDAI': '0x2EB43dBF8C0013712fEc7B2A57453e41B9907e95', 'Convex stkcvxFRAXUSDP' : '0x5385AE7dC08F5C3799691E5b387cB01108B76627', 'Convex stkcvxfrxETHCRV': '0x194aA54376886dAd3d08e71F47D189A88251D8Da', 'Convex stkcvxfrxETHCVX': '0x5B31bf2988E5388Edae2960504d96Bc142742dCb', @@ -2875,6 +2932,7 @@ export const CONTRACT_ADDRESSES = { 'Convex stkcvxfrxETHcbETH': '0x4e9D8323603E69c1310E5e04Db172bD5aB07df95', 'Convex stkcvxfrxETHmsETH': '0x09bFD0c760E4a1bFc970cdaAAD240307C917Aa6c', 'Convex stkcvxfrxETHpETH': '0xeCF134dF5DE1e0E12A441D446ff81994Cb0301A2', + 'Convex stkcvxfrxETHpxETH': '0x51521Da84Cbce1B4A930B55d8D896b590532f7A6', 'Convex stkcvxfrxETHETH': '0x4659d5fF63A1E1EDD6D5DD9CC315e063c95947d0', 'Convex stkcvxfrxETHrETH': '0xE0c65F74728Ff26219C6adddCEfB215484bb08DF', 'Convex stkcvxfrxETHrETH_StaFi': '0xffAFA5aA5b0a9C0C8e05ec8b89056F018EE2Bad6', @@ -2893,9 +2951,11 @@ export const CONTRACT_ADDRESSES = { 'Convex stkcvxSTGFRAXBP': '0xAe1bA2Cf0eBF00C5052309992d7B6c94e3EfcBEf', 'Convex stkcvxsUSDFRAXBP': '0x9f0C2673a33b7087e367253f196A7E823fBc2341', 'Convex stkcvxswETHfrxETH' : '0xa3ae006Cc863423F690ca01C2a8F692B97c93c3b', + 'Convex stkcvxtricryptoFRAX': '0x0643d5C29498149D31bAd69a5bE2771b5440C58d', 'Convex stkcvxtriSDT': '0xAD059ccF041e344eA52A3152Bbf654c605d68473', 'Convex stkcvxTUSDFRAXBP': '0x32fA492Ac1F729E0eE9eDdfCBacc3ef72B234e27', 'Convex stkcvxUSDDFRAXBP': '0x507e41A64eB7AE47ee303e3B16237ab757F6C06c', + 'Convex stkcvxUZDFRAXBP (Deprecated Old)': '0x57Fb068BDa27351EF0913113264Ce3EF4EeA3316', 'Convex stkcvxUZDFRAXBP (Deprecated)': '0x57Fb068BDa27351EF0913113264Ce3EF4EeA3316', 'Convex stkcvxUZDFRAXBP': '0xaa236bd1302755937Aa46D6f3423655BbC654B02', 'Convex stkcvxXAIFRAXBP': '0x19f0a60f4635d3E2c48647822Eda5332BA094fd3', @@ -2910,20 +2970,20 @@ export const CONTRACT_ADDRESSES = { 'dForce FRAX Lending [Ethereum]': '0x71173e3c6999c2C72ccf363f4Ae7b67BCc7E8F63', 'Flux Finance fFRAX': '0x1c9a2d6b33b4826757273d47ebee0e2dddcd978b', 'Fraxlend V1 FRAX/FXS': '0xDbe88DBAc39263c47629ebbA02b3eF4cf0752A72', - 'Fraxswap V1 FPI/FPIS': '0xD3542ec999ceA6C79f09483fF88833f154a5e92f', // Old: "0x04BBDA16ed5C9dB488B47d128bC2A43a2dC53303", - 'Fraxswap V1 FPI/FXS': '0x843B5Ae5861362F20A3aC185A2dD2393D7526C65', // Old: "0xdc95403d54a7BB182e9AAb861c1c3a74d9fB9E57", - 'Fraxswap V1 FRAX/FPI': '0x5A1eA0130Dc4DC38420AA77929f992f1FBd482Bb', // Old: "0x7d95b33cbEC441917d4f617482d4b5c7e6c35902", - 'Fraxswap V1 FRAX/FPIS': '0x99887AC15eBCcbad52FA2c9ceDc9D91A91e36051', // Old: "0x25be6ce04a504D4BCEcb6ba7f5967F7aae6Af579", - 'Fraxswap V1 FRAX/FXS': '0x8206412c107eF1aDb70B9277974f5163760E128E', // Old "0x122F21a89a0A7197FF18C6e2995322ac29f42873", + 'Fraxswap V1 FPI/FPIS': '0xD3542ec999ceA6C79f09483fF88833f154a5e92f', // Old: '0x04BBDA16ed5C9dB488B47d128bC2A43a2dC53303', + 'Fraxswap V1 FPI/FXS': '0x843B5Ae5861362F20A3aC185A2dD2393D7526C65', // Old: '0xdc95403d54a7BB182e9AAb861c1c3a74d9fB9E57', + 'Fraxswap V1 FRAX/FPI': '0x5A1eA0130Dc4DC38420AA77929f992f1FBd482Bb', // Old: '0x7d95b33cbEC441917d4f617482d4b5c7e6c35902', + 'Fraxswap V1 FRAX/FPIS': '0x99887AC15eBCcbad52FA2c9ceDc9D91A91e36051', // Old: '0x25be6ce04a504D4BCEcb6ba7f5967F7aae6Af579', + 'Fraxswap V1 FRAX/FXS': '0x8206412c107eF1aDb70B9277974f5163760E128E', // Old '0x122F21a89a0A7197FF18C6e2995322ac29f42873', 'Fraxswap V1 FRAX/IQ V2': '0xcB0bC7C879bb3E9CFEB9d8EFef653F33B3d242e9', 'Fraxswap V1 FRAX/IQ V3': '0xcB0bC7C879bb3E9CFEB9d8EFef653F33B3d242e9', 'Fraxswap V1 FRAX/IQ': '0xcB0bC7C879bb3E9CFEB9d8EFef653F33B3d242e9', 'Fraxswap V1 FRAX/SYN': '0x750Bb20608601e4C44aCbE774fAC8F37dab67c86', - 'Fraxswap V1 FRAX/WETH': '0x8300f0528e00Ad33b218bb05D396F61A9FDd68Cd', // Old: "0xf2E9fda1fE6a21E519174852A5c752Bd9FBA05A4", + 'Fraxswap V1 FRAX/WETH': '0x8300f0528e00Ad33b218bb05D396F61A9FDd68Cd', // Old: '0xf2E9fda1fE6a21E519174852A5c752Bd9FBA05A4', 'Fraxswap V1 FRAX/pitchFXS V2': '0x0a92aC70B5A187fB509947916a8F63DD31600F80', 'Fraxswap V1 FRAX/pitchFXS V3': '0x0a92aC70B5A187fB509947916a8F63DD31600F80', 'Fraxswap V1 FRAX/pitchFXS': '0x0a92aC70B5A187fB509947916a8F63DD31600F80', - 'Fraxswap V1 FXS/FPIS': '0x1306b420B4B5f99cBeE938E369f06863a0f419A5', // Old: "0xfCCDE09b708115246174DAAFCB13a63332Fc22f0", + 'Fraxswap V1 FXS/FPIS': '0x1306b420B4B5f99cBeE938E369f06863a0f419A5', // Old: '0xfCCDE09b708115246174DAAFCB13a63332Fc22f0', 'Fraxswap V2 FXS/frxETH': '0x49FD21C5C8813B1bAE4e5507C556391D6Dd9e9f1', 'Fraxswap V2 FPI/FPIS': '0xF14766a7C44EFb7F71441B7114d5Dd295B637175', 'Fraxswap V2 FPI/FXS': '0x3ECfdA4EfF6184cD8563772D6d024cB0Fb9cBf80', @@ -2966,6 +3026,7 @@ export const CONTRACT_ADDRESSES = { 'Solidly sAMM-frxETH/WETH': '0x4E30fc7ccD2dF3ddCA39a69d2085334Ee63b9c96', 'Solidly vAMM-FRAX/frxETH': '0xcd0ce74619e46a2ea116d58e3022afb18356a924', 'Solidly vAMM-FXS/frxETH': '0x1eD37b848BA777451dF41f5bd6c2EE9ffda0BaD4', + 'Sommelier Fraximal': '0xdbe19d1c3f21b1bb250ca7bdae0687a97b5f77e6', 'StakeDAO cvxFXS/FXS': '0xF3A43307DcAFa93275993862Aae628fCB50dC768', 'StakeDAO FRAX3CRV': '0xd632f22692FaC7611d2AA1C0D552930D43CAEd3B', 'StakeDAO FRAX/USDC': '0x3175df0976dfa876431c2e9ee6bc45b65d3473cc', @@ -3002,6 +3063,7 @@ export const CONTRACT_ADDRESSES = { staking_contracts: { 'Aave aFRAX': '0x02577b426F223A6B4f2351315A19ecD6F357d65c', 'Angle FRAX/agEUR Staking': '0xb40432243E4F317cE287398e72Ab8f0312fc2FE8', + 'Balancer frxETH-pxETH Gauge': '0x1e64E373c143810524BDb1Ac8Dce35977d12e55d', 'Balancer sfrxETH-stETH-rETH-BPT': '0x3F0FB52648Eb3981EA598716b7320081d1c8Ba1a', 'Bunni FRAX/USDC Gauge': '0x50B4cDb17D3e10C9BC88b3744F3fD7c25695EEE7', 'Bunni frxETH/WETH Gauge': '0xcbcCBA2FA84606Df153B593dD01c37a50ac8427C', @@ -3012,7 +3074,7 @@ export const CONTRACT_ADDRESSES = { 'Convex stkcvxclevUSDFRAXBP': '0x5745506D56b0088f800085b1227B3f1F7d419c89', 'Convex stkcvxCOILFRAXBP (Deprecated)': '0x94c491e298625b1226a89DDA091B3932c59FAbc1', 'Convex stkcvxCOILFRAXBP': '0x39cd4db6460d8B5961F73E997E86DdbB7Ca4D5F6', - 'Convex stkcvxcrvUSDFRAX' : '0x67CC47cF82785728DD5E3AE9900873a074328658', + 'Convex stkcvxcrvUSDFRAX': '0x67CC47cF82785728DD5E3AE9900873a074328658', 'Convex stkcvxCVXFRAXBP': '0xeC670c5e0A8A8d5ae5639158565D840DE44CA03f', 'Convex stkcvxcvxCRVFRAXBP': '0x57c9F019B25AaAF822926f4Cacf0a860f61eDd8D', 'Convex stkcvxcvxFXSFRAXBP': '0x2F9504988675c91787E188Ed928D6E042d9052e9', @@ -3020,6 +3082,12 @@ export const CONTRACT_ADDRESSES = { 'Convex stkcvxeUSDFRAXBP': '0x4c9AD8c53d0a001E7fF08a3E5E26dE6795bEA5ac', 'Convex stkcvxFPIFRAX': '0x0a08673E3d7c454E1c6b27acD059C50Df6727FC9', 'Convex stkcvxFRAXBP': '0x963f487796d54d2f27bA6F3Fbe91154cA103b199', + 'Convex stkcvxFRAXFPI_NG': '0x7d69b887751Af59fB4b56BC98fcA0234096Eb267', + 'Convex stkcvxFRAXFXB_20240630': '0x6D54747fC8e32cA1A91bA2fd36aB673bD84E2e7b', + 'Convex stkcvxFRAXFXB_20241231': '0x9D7eB7Ec34283D93C6677AE30F3983399Ab72A2f', + 'Convex stkcvxFRAXFXB_20261231': '0x9A95396eC04B55de54859C06fd75dFb8466F4653', + 'Convex stkcvxFRAXPYUSD': '0x18FEFE5Db2D63aCaa8b5520AFde32507216d39e1', + 'Convex stkcvxFRAXsDAI': '0x90EB2F13Acf1bc35c2c40c0EBaff2De4d2Eb0d6b', 'Convex stkcvxFRAXUSDP' : '0x2A5b8C7DFE489CeB00ec80524C0bA0C1b78433A9', 'Convex stkcvxfrxETHCRV': '0xDA0622cBa8cC821ee0d4AfA366Df95E948b43297', 'Convex stkcvxfrxETHCVX': '0xb01BaB994b52A37a231551f00a1B7cAcd43bc8C9', @@ -3028,12 +3096,13 @@ export const CONTRACT_ADDRESSES = { 'Convex stkcvxfrxETHcbETH': '0x16e55917849aC7fA4341470FA3A22bB503D5cACD', 'Convex stkcvxfrxETHmsETH': '0x2816Ab1F4Db656602b6B0041c006652A4F5D0437', 'Convex stkcvxfrxETHpETH': '0xD591A551bC1776A7Ce066a5Df7640266afc850bF', + 'Convex stkcvxfrxETHpxETH': '0xC68A0174401AE002D6DbA8C9788C6dF4c807BD52', 'Convex stkcvxfrxETHETH': '0xa537d64881b84faffb9Ae43c951EEbF368b71cdA', + 'Convex stkcvxfrxETHWETH': '0xB4fdD7444E1d86b2035c97124C46b1528802DA35', 'Convex stkcvxfrxETHrETH': '0x719505cB97DF15565255eb1bDe65586271dB873C', 'Convex stkcvxfrxETHrETH_StaFi': '0x76CF35aB1450D3A6c84EdDB8A960A5F65B76e706', 'Convex stkcvxfrxETHsETH': '0xd79Ae34eD6D11A235629A48aeA9F661a241faD4f', 'Convex stkcvxfrxETHstETH': '0x68921998fbc43B360D3cF14a03aF4273CB0cFA44', - 'Convex stkcvxfrxETHWETH': '0xB4fdD7444E1d86b2035c97124C46b1528802DA35', 'Convex stkcvxfrxETHzETH': '0x882B9fad02D1a7436449dcdE9934Eeb9E287909c', 'Convex stkcvxGHOFRAXBP': '', 'Convex stkcvxGRAIFRAXBP': '0x5684d5566bb438D8Ef7B3C1E5da9450cD19C1b9f', @@ -3048,9 +3117,11 @@ export const CONTRACT_ADDRESSES = { 'Convex stkcvxSDTFRAXBP': '0x9C8d9667d5726aEcA4d24171958BeE9F46861bed', 'Convex stkcvxSTGFRAXBP': '0xd600A3E4F57E718A7ad6A0cbb10c2A92c57827e6', 'Convex stkcvxswETHfrxETH' : '0x7b8848f10A016341c9B2427e8541C19F31C2D243', + 'Convex stkcvxtricryptoFRAX': '0x5C0238c4C8f13370001632806C87066B90F1E383', 'Convex stkcvxtriSDT': '0x50Cde910D1f8b6C787b7903d23082542593E0710', 'Convex stkcvxTUSDFRAXBP': '0xb324b2BD8a3Dc55b04111E84d5cce0c3771F8889', 'Convex stkcvxUSDDFRAXBP': '0xF7242A1cE383174802818febB36B6eebb56d5BFb', + 'Convex stkcvxUZDFRAXBP (Deprecated Old)': '0x7677D1AADcd42dC40E758115FfDE5e1E10B7f30b', 'Convex stkcvxUZDFRAXBP (Deprecated)': '0x7838d18AD75372061a1e71e1499b7E90832c1508', 'Convex stkcvxUZDFRAXBP': '0xb8ebc210BCF78be8Ef3F09Dd0d8e85Fa5e252e86', 'Convex stkcvxalUSDFRAXBP': '0x711d650Cd10dF656C2c28D375649689f137005fA', @@ -3065,7 +3136,7 @@ export const CONTRACT_ADDRESSES = { 'Fraxswap V1 FRAX/IQ V2': '0xBF33B67F243a4DAbED494Ff5840f113B2E202a0d', 'Fraxswap V1 FRAX/IQ V3': '0x35678017e1D252dA1CdD6745b147E3e75d1f9C27', 'Fraxswap V1 FRAX/IQ': '0x5e15E40A3AA06bECA711EdE9F3F76E1d80C34490', - 'Fraxswap V1 FRAX/SYN': '0xE8453a2e8E97cba69365A1d727Fde3768b18d814', // Old2: "0xb8e49724a342c5F4C02918a1cDa6B3b25632d04b", // Old: "0xe679312C16200Bc42B7a05eddE8B0162b340a1f3", + 'Fraxswap V1 FRAX/SYN': '0xE8453a2e8E97cba69365A1d727Fde3768b18d814', // Old2: '0xb8e49724a342c5F4C02918a1cDa6B3b25632d04b', // Old: '0xe679312C16200Bc42B7a05eddE8B0162b340a1f3', 'Fraxswap V1 FRAX/pitchFXS V2': '0x899Aa575E0e46344D18471f69337663C48b76e35', 'Fraxswap V1 FRAX/pitchFXS V3': '0x24C66Ba25ca2A53bB97B452B9F45DD075b07Cf55', 'Fraxswap V1 FRAX/pitchFXS': '0x9E66E7811fEacf5402B65021475d1A293f7ea797', @@ -3105,6 +3176,7 @@ export const CONTRACT_ADDRESSES = { 'Solidly sAMM-frxETH/WETH': '0x4E30fc7ccD2dF3ddCA39a69d2085334Ee63b9c96', 'Solidly vAMM-FRAX/frxETH': '0xFae2B6Cac80635Cf768c9B68A4f453DB00BC79F0', 'Solidly vAMM-FXS/frxETH': '0x520b8e754768EEed9a37d78de76Cd5d75456b92F', + 'Sommelier Fraximal': '0x290a42E913083Edf5AEFb241f8A12B306C19f8f9', 'StakeDAO cvxFXS/FXS': '0xAB1927160EC7414C6Fa71763E2a9f3D107c126dd', 'StakeDAO FRAX3CRV': '0x72E158d38dbd50A483501c24f792bDAAA3e7D55C', 'StakeDAO FRAX/USDC': '0xcfc25170633581bf896cb6cdee170e3e3aa59503', @@ -3117,19 +3189,19 @@ export const CONTRACT_ADDRESSES = { 'StakeDAO sfrxETH-stETH-rETH-BPT': '0x3f0fb52648eb3981ea598716b7320081d1c8ba1a', 'Stargate Bridge Liquidity FRAX [Ethereum]': '0xB0D502E938ed5f4df2E681fE6E419ff29631d62b', 'Sushi FRAX/SUSHI': '0xb4Ab0dE6581FBD3A02cF8f9f265138691c3A7d5D', - 'Sushi FXS/WETH': '', // Pre-gauge: "0x74C370990C1181303D20e9f0252437a97518B95B", - 'Temple FRAX/TEMPLE': '0x10460d02226d6ef7B2419aE150E6377BdbB7Ef16', // Old1: "0x016563F5EB22cF84fA0Ff8B593DdC5343ca15856", + 'Sushi FXS/WETH': '', // Pre-gauge: '0x74C370990C1181303D20e9f0252437a97518B95B', + 'Temple FRAX/TEMPLE': '0x10460d02226d6ef7B2419aE150E6377BdbB7Ef16', // Old1: '0x016563F5EB22cF84fA0Ff8B593DdC5343ca15856', 'Tokemak FRAX Staking': '0x94671a3cee8c7a12ea72602978d1bb84e920efb2', 'Tokemak FXS Staking': '0xadf15ec41689fc5b6dca0db7c53c9bfe7981e655', 'Uniswap FEI/TRIBE': '0x9928e4046d7c6513326cCeA028cD3e7a91c7590A', 'Uniswap FRAX/FXS': '0xda2c338350a0E59Ce71CDCED9679A3A590Dd9BEC', - 'Uniswap FRAX/IQ': '0xF37057823910653a554d996B49E3399DC87fAE1b', // V1: "0x35fc5Fd90e06c47c0D9dEBfEDB1daF55bCE14E6d", + 'Uniswap FRAX/IQ': '0xF37057823910653a554d996B49E3399DC87fAE1b', // V1: '0x35fc5Fd90e06c47c0D9dEBfEDB1daF55bCE14E6d', 'Uniswap FRAX/OHM': '0xfC77A420f56Dec53e3b91D7FC936902e132335FF', 'Uniswap FRAX/USDC': '0xa29367a3f057F3191b62bd4055845a33411892b6', 'Uniswap FRAX/WETH': '0xD875628B942f8970De3CcEaf6417005F68540d4f', 'Uniswap FXS/WETH': '0xDc65f3514725206Dd83A8843AAE2aC3D99771C88', - 'Uniswap V3 FRAX/DAI': '0xF22471AC2156B489CC4a59092c56713F813ff53e', // "0xD922cD347eb367FC4FB4bbcb68A84C6CDD3bA4ba", - 'Uniswap V3 FRAX/USDC': '0x3EF26504dbc8Dd7B7aa3E97Bc9f3813a9FC0B4B0', // Old4: "0x1e1356Eb81a56daEcfAdA456E007b26C86c56670", // Old3: "0xCbe6ea4725e4ba34aa215B95239DfA6E8854B49a", // Old2: "0x1C21Dd0cE3bA89375Fc39F1B134AD15671022660", // Old1: "0xF397Abd7495EB6FE4697F45b5BA17166f03533b9" + 'Uniswap V3 FRAX/DAI': '0xF22471AC2156B489CC4a59092c56713F813ff53e', // '0xD922cD347eb367FC4FB4bbcb68A84C6CDD3bA4ba', + 'Uniswap V3 FRAX/USDC': '0x3EF26504dbc8Dd7B7aa3E97Bc9f3813a9FC0B4B0', // Old4: '0x1e1356Eb81a56daEcfAdA456E007b26C86c56670', // Old3: '0xCbe6ea4725e4ba34aa215B95239DfA6E8854B49a', // Old2: '0x1C21Dd0cE3bA89375Fc39F1B134AD15671022660', // Old1: '0xF397Abd7495EB6FE4697F45b5BA17166f03533b9' 'Uniswap V3 FRAX/agEUR': '0xf8caEd1943B15B877D7105B9906a618c154f69E8', 'veFPIS FPIS Staking': '0x574C154C83432B0A45BA3ad2429C3fA242eD7359', 'veFXS FXS Staking': '0xc8418aF6358FFddA74e09Ca9CC3Fe03Ca6aDC5b0', @@ -3205,6 +3277,8 @@ export const CONTRACT_ADDRESSES = { middleman_gauges: { "Balancer frxETH-bb-a-WETH Gauge": "0xE3f4e2b79f1a8bf3b14d9100323Fca24D923f796", "Convex FRAXBP [Arbitrum]": "0x636A9d7686bFA0a2ddd93b37A1E33bCdE6C31e8D", + "Convex FRAX/FXB_20241231 [Arbitrum]": "0xba1ED260F9a81088Ecb7602F790a67C773817BDA", + "Convex FRAX/FXB_20261231 [Arbitrum]": "0x2A8499c4a86F7c07e311c73E36575A0Dc2D362C3", "Convex frxETH/WETH [Arbitrum]": "0x5608051D98377419d7D861531728DFB869dDc054", "Convex USD+FRAXBP": "0x840f20ffED887c61435E81fd1231CB923df39d3d", "Curve VSTFRAX-f": "0x127963A74c07f72D862F2Bdc225226c3251BD117", // Arbitrum @@ -3326,6 +3400,14 @@ export const CONTRACT_ADDRESSES = { curve4pool: '0x1C5ffa4FB4907B681c61B8c82b28C4672ceb1974', cvxFRAXBP: '0x93729702Bf9E1687Ae2124e191B8fFbcC0C8A0B0', cvxFRAXBP_Rewarder: '0x93729702Bf9E1687Ae2124e191B8fFbcC0C8A0B0', + FRAXFXB_20241231: '0xe920eedaff6c3bed1ef61010b64d46986634e908', + FRAXFXB_20241231_Gauge: '0x05824d6d4de8a0ede4e12b98387a4f035a67ee68', + FRAXFXB_20241231_Pool: '0xe920eedaff6c3bed1ef61010b64d46986634e908', + FRAXFXB_20261231: '0x946adc524bd312d036776798c46cedd948dd0a0f', + FRAXFXB_20261231_Gauge: '0xa2617a26f9f528fa7b0e47fc2e66fcc04c6682e9', + FRAXFXB_20261231_Pool: '0x946adc524bd312d036776798c46cedd948dd0a0f', + cvxFRAXFXB_20241231_Arbitrum: '0xCDA69af1077765a89eA156aCe7a6f8b476e4aF12', + cvxFRAXFXB_20261231_Arbitrum: '0x2026681d569f80aE0A86D7c90bc81065D9A3AD42', cvxfrxETHWETH: '0xd2D8BEB901f90163bE4667A85cDDEbB7177eb3E3', cvxfrxETHWETH_Rewarder: '0xd2D8BEB901f90163bE4667A85cDDEbB7177eb3E3', cvxUSDPlusFRAXBP: '0x11F2217fa1D5c44Eae310b9b985E2964FC47D8f9', @@ -3371,6 +3453,8 @@ export const CONTRACT_ADDRESSES = { 'Chronos sAMM-frxETH/sfrxETH': '0xd52862915de98201bA93a45E73081450075C4E33', 'Chronos sAMM-frxETH/WETH': '0xdb286ED48b294D348593bFAf1f862393FA8776e9', 'Convex FRAXBP [Arbitrum]': '0x93729702Bf9E1687Ae2124e191B8fFbcC0C8A0B0', + 'Convex FRAX/FXB_20241231 [Arbitrum]': '0xCDA69af1077765a89eA156aCe7a6f8b476e4aF12', + 'Convex FRAX/FXB_20261231 [Arbitrum]': '0x2026681d569f80aE0A86D7c90bc81065D9A3AD42', 'Convex frxETH/WETH [Arbitrum]': '0xd2D8BEB901f90163bE4667A85cDDEbB7177eb3E3', 'Convex USD+FRAXBP': '0x11F2217fa1D5c44Eae310b9b985E2964FC47D8f9', 'Curve VSTFRAX-f': '0x59bF0545FCa0E5Ad48E13DA269faCD2E8C886Ba4', @@ -3413,6 +3497,8 @@ export const CONTRACT_ADDRESSES = { 'Chronos sAMM-frxETH/sfrxETH': '0x548e0D4Fcb6b82a025E6770066b4127C5FCcBF07', 'Chronos sAMM-frxETH/WETH': '0x9A028F3Dd7067479b51ee89CDb0Db594744ebfAd', 'Convex FRAXBP [Arbitrum]': '0x421Efd53FA0d90687db5ef370D5DCD7f89CbD9dE', + 'Convex FRAX/FXB_20241231 [Arbitrum]': '0xB8c52da3db9EdF9Da6a20959410B007a2387E5a2', + 'Convex FRAX/FXB_20261231 [Arbitrum]': '0xA81F4b86B412CcB51C7420000F59a639F3459f49', 'Convex frxETH/WETH [Arbitrum]': '0x24e927daC110Aab7189a4F864d41680e4F7865FB', 'Convex USD+FRAXBP': '0x56390acF12bce9675ab3922060D8d955149BE286', 'Curve VSTFRAX-f': '0x127963A74c07f72D862F2Bdc225226c3251BD117', From 294e38d72a115098bc2905354be0eecd2f123a72 Mon Sep 17 00:00:00 2001 From: travis Date: Sat, 2 Mar 2024 13:13:19 -0700 Subject: [PATCH 32/37] periodic update --- SAMPLE.env | 4 + package.json | 1 + src/foundry/test/BAMM/BAMMTest.t.sol | 229 ++++++++++++++++++ .../test/FXS/FXSDisableVoteTracking.t.sol | 131 ++++++++++ .../test/{ => veFPIS}/veFPISProxy.t.sol | 2 +- src/hardhat/contracts/Fraxferry/Fraxferry.sol | 2 +- .../Misc_AMOs/balancer/IAuraDeposit.sol | 19 ++ .../Misc_AMOs/balancer/IAuraDepositVault.sol | 64 +++++ .../{IAuraGauge.sol => IBalancerGauge.sol} | 2 +- .../Staking/FraxCrossChainFarmV4_ERC20.sol | 51 ++-- .../Staking/FraxUnifiedFarmTemplate.sol | 39 +-- .../Staking/FraxUnifiedFarm_ERC20.sol | 19 +- .../Variants/FraxUnifiedFarm_ERC20_Other.sol | 45 ++-- .../Frax_Comptroller_Routine/Sunday_Part_1.js | 130 ++++++---- .../Sunday_Part_1.json | 2 +- .../gnosis-safe-scripts/utils/utils.js | 25 +- src/hardhat/hardhat.config.js | 43 +++- src/hardhat/test/Fraxswap/utilities.js | 2 +- src/types/api.d.ts | 4 +- src/types/constants.ts | 120 +++++++-- 20 files changed, 782 insertions(+), 152 deletions(-) create mode 100644 src/foundry/test/BAMM/BAMMTest.t.sol create mode 100644 src/foundry/test/FXS/FXSDisableVoteTracking.t.sol rename src/foundry/test/{ => veFPIS}/veFPISProxy.t.sol (99%) create mode 100644 src/hardhat/contracts/Misc_AMOs/balancer/IAuraDeposit.sol create mode 100644 src/hardhat/contracts/Misc_AMOs/balancer/IAuraDepositVault.sol rename src/hardhat/contracts/Misc_AMOs/balancer/{IAuraGauge.sol => IBalancerGauge.sol} (99%) diff --git a/SAMPLE.env b/SAMPLE.env index 024dbdd2..8a773bf7 100644 --- a/SAMPLE.env +++ b/SAMPLE.env @@ -64,6 +64,7 @@ BSCSCAN_API_KEY='' COINGECKO_API_KEY='' ETHERSCAN_API_KEY='' EVMOS_API_KEY='' +FRAXTAL_API_KEY='' FTMSCAN_API_KEY='' HARMONY_API_KEY='' MOONBEAM_API_KEY='' @@ -105,6 +106,9 @@ EVMOS_MNEMONIC_PHRASE='future ahead slight riot brand perfect paddle hammer circ # Fantom FANTOM_MNEMONIC_PHRASE='future ahead slight riot brand perfect paddle hammer circle return review behave nasty fiction balcony' +# Fraxtal +FRAXTAL_MNEMONIC_PHRASE='future ahead slight riot brand perfect paddle hammer circle return review behave nasty fiction balcony' + # Harmony HARMONY_MNEMONIC_PHRASE='future ahead slight riot brand perfect paddle hammer circle return review behave nasty fiction balcony' diff --git a/package.json b/package.json index e515ce95..8f82f23e 100644 --- a/package.json +++ b/package.json @@ -69,6 +69,7 @@ "chai": "^4.3.8", "chai-almost": "^1.0.1", "ethers": "^6.9.2", + "ethers-v5": "npm:ethers@5.7.2", "hardhat": "^2.19.4", "hardhat-deploy": "^0.11.45", "json-loader": "^0.5.7" diff --git a/src/foundry/test/BAMM/BAMMTest.t.sol b/src/foundry/test/BAMM/BAMMTest.t.sol new file mode 100644 index 00000000..05abd4ce --- /dev/null +++ b/src/foundry/test/BAMM/BAMMTest.t.sol @@ -0,0 +1,229 @@ +// SPDX-License-Identifier: ISC +pragma solidity ^0.8.19; + +import "frax-std/FraxTest.sol"; +import { IERC20 } from "@openzeppelin/contracts/token/ERC20/IERC20.sol"; +import { FRAXStablecoin } from "../../../hardhat/contracts/Frax/Frax.sol"; +import { FRAXShares } from "../../../hardhat/contracts/FXS/FXS.sol"; +import { BAMM } from "../../../hardhat/contracts/BAMM/BAMM.sol"; +import { BAMMHelper } from "../../../hardhat/contracts/BAMM/BAMMHelper.sol"; +import { FraxswapRouter } from "../../../hardhat/contracts/Fraxswap/periphery/FraxswapRouter.sol"; +import { FraxswapOracle } from "../../../hardhat/contracts/BAMM/FraxswapOracle.sol"; +import { FraxswapPair } from "../../../hardhat/contracts/Fraxswap/core/FraxswapPair.sol"; + +contract BAMMTest is FraxTest { + // JUST going to use the hardhat tests... + + // using stdStorage for StdStorage; + + // // Contract addresses + // BAMM public bamm; + // // BAMM public univ2_bamm; // Maybe test generic UniV2s later + // BAMMHelper public bamm_helper; + // FraxswapOracle public fs_oracle; + // FraxswapPair public fs_pair = FraxswapPair(0x03B59Bd1c8B9F6C265bA0c3421923B93f15036Fa); // Use Fraxswap FRAX/FXS + // FraxswapRouter public fs_router = FraxswapRouter(payable(0xC14d550632db8592D1243Edc8B95b0Ad06703867)); + // FRAXStablecoin public frax = FRAXStablecoin(0x853d955aCEf822Db058eb8505911ED77F175b99e); + // FRAXShares public fxs = FRAXShares(0x3432B6A60D23Ca0dFCa7761B7ab56459D9C964D0); + + // // Test users + // address internal constant ADDRESS_WITH_LP = 0x3F2E53B1A3036Fd33F3c2f3cC49daB26A88DF2e0; // Fraxswap FRAX/FXS gauge farm + // address internal constant BORROWER_USER = 0x36A87d1E3200225f881488E4AEedF25303FebcAe; + // address internal constant COMPTROLLER_ADDRESS = 0xB1748C79709f4Ba2Dd82834B8c82D4a505003f27; + // address internal constant LOANER_USER = 0x733371d7C15ACECF9e120dd037D6BcDb6E069148; + + // function defaultSetup() public { + // // Select the fork block + // vm.createSelectFork(vm.envString("ETHEREUM_NETWORK_ENDPOINT"), 17198193); // Should be 17198193 + + // // Initiate some contracts + // bamm_helper = new BAMMHelper(); + // fs_oracle = new FraxswapOracle(); + // bamm = new BAMM( + // fs_pair, + // true, + // 9970, + // fs_router, + // bamm_helper, + // fs_oracle + // ); + + // // Give the loaner some LP + // vm.startPrank(ADDRESS_WITH_LP); + // fs_pair.transfer(LOANER_USER, 1000e18); + // vm.stopPrank(); + // } + + // function setUp() public { + // defaultSetup(); + // } + + // // Loan some FRAX, accrue no interest, pull the LP back out + // function testMintRedeemNoLenders() public { + // vm.startPrank(LOANER_USER); + + // // Mint some BAMM + // fs_pair.approve(address(bamm), 100e18); + // uint256 bamm_minted = bamm.mint(LOANER_USER, 100e18); + + // // Wait 24 hrs + // skip(24 * 3600); + + // // Accrue interest + // bamm.addInterest(); + + // // Wait 24 hrs again + // skip(24 * 3600); + + // // Redeem the BAMM tokens for LP + // uint256 lp_redeemed = bamm.redeem(LOANER_USER, bamm_minted); + + // // Make sure you got the same amount of LP back (minus 1 wei) + // assertEq(lp_redeemed, 100e18 - 1 wei); + + // vm.stopPrank(); + // } + + // // Loan some FRAX, accrue some interest, pull the LP back out + // function testMintRedeemWithLender() public { + // vm.startPrank(LOANER_USER); + + // // Mint some BAMM + // fs_pair.approve(address(bamm), 100e18); + // uint256 bamm_minted = bamm.mint(LOANER_USER, 100e18); + + // // Switch over to the borrower + // vm.stopPrank(); + // vm.startPrank(BORROWER_USER); + + // // Wait 24 hrs + // skip(24 * 3600); + + // // Note token balances before + // uint256[6] memory balances_before = [ + // frax.balanceOf(BORROWER_USER), + // frax.balanceOf(address(bamm)), + // fxs.balanceOf(BORROWER_USER), + // fxs.balanceOf(address(bamm)), + // fs_pair.balanceOf(BORROWER_USER), + // fs_pair.balanceOf(address(bamm)) + // ]; + + // // Borrower puts down FRAX as collateral, but doesn't take a loan yet. + // frax.approve(address(bamm), 500e18); + // BAMM.Action memory action1 = BAMM.Action( + // 0, // NOTE: There might be dust issues + // 500e18, + // 0, + // BORROWER_USER, + // 0, + // 0, + // false, + // true, + // 0, + // "", + // "", + // block.timestamp + 66666666 + // ); + // bamm.executeActions(action1); + + // // Print some info + // { + // console.log("ACTION 1"); + // console.log("================================="); + // (int256 tkn0, int256 tkn1, int256 rented) = bamm.userVaults(BORROWER_USER); + // uint256 rentedMultiplier = bamm.rentedMultiplier(); + // console.log("Vault token0", tkn0); + // console.log("Vault token1", tkn1); + // console.log("Vault rented", rented); + // console.log("rentedMultiplier", rentedMultiplier); + // console.log("FRAX change [Borrower]", int256(frax.balanceOf(BORROWER_USER)) - int256(balances_before[0])); + // console.log("FRAX change [BAMM]", int256(frax.balanceOf(address(bamm))) - int256(balances_before[1])); + // console.log("FXS change [Borrower]", int256(fxs.balanceOf(BORROWER_USER)) - int256(balances_before[2])); + // console.log("FXS change [BAMM]", int256(fxs.balanceOf(address(bamm))) - int256(balances_before[3])); + // console.log("FS-LP change [Borrower]", int256(fs_pair.balanceOf(BORROWER_USER)) - int256(balances_before[4])); + // console.log("FS-LP change [BAMM]", int256(fs_pair.balanceOf(address(bamm))) - int256(balances_before[5])); + // console.log(""); + + // // Update the token balances + // balances_before = [ + // frax.balanceOf(BORROWER_USER), + // frax.balanceOf(address(bamm)), + // fxs.balanceOf(BORROWER_USER), + // fxs.balanceOf(address(bamm)), + // fs_pair.balanceOf(BORROWER_USER), + // fs_pair.balanceOf(address(bamm)) + // ]; + // } + + // // Borrower swaps some of the FRAX for FXS + // frax.approve(address(bamm), 100e18); + // { + // BAMM.FraxswapV2RouterParams memory swap2 = BAMM.FraxswapV2RouterParams( + // XXX + // ); + // BAMM.Action memory action2 = BAMM.Action( + // 0, // NOTE: There might be dust issues + // 0, + // 0, + // BORROWER_USER, + // 0, + // 0, + // false, + // true, + // 0, + // "", + // "", + // block.timestamp + 66666666 + // ); + + // bamm.executeActionsAndSwap(action2, swap2); + // } + + // // Print some info + // { + // console.log("ACTION 2"); + // console.log("================================="); + // (int256 tkn0, int256 tkn1, int256 rented) = bamm.userVaults(BORROWER_USER); + // uint256 rentedMultiplier = bamm.rentedMultiplier(); + // console.log("Vault token0", tkn0); + // console.log("Vault token1", tkn1); + // console.log("Vault rented", rented); + // console.log("rentedMultiplier", rentedMultiplier); + // console.log("FRAX change [Borrower]", int256(frax.balanceOf(BORROWER_USER)) - int256(balances_before[0])); + // console.log("FRAX change [BAMM]", int256(frax.balanceOf(address(bamm))) - int256(balances_before[1])); + // console.log("FXS change [Borrower]", int256(fxs.balanceOf(BORROWER_USER)) - int256(balances_before[2])); + // console.log("FXS change [BAMM]", int256(fxs.balanceOf(address(bamm))) - int256(balances_before[3])); + // console.log("FS-LP change [Borrower]", int256(fs_pair.balanceOf(BORROWER_USER)) - int256(balances_before[4])); + // console.log("FS-LP change [BAMM]", int256(fs_pair.balanceOf(address(bamm))) - int256(balances_before[5])); + // console.log(""); + + // // Update the token balances + // balances_before = [ + // frax.balanceOf(BORROWER_USER), + // frax.balanceOf(address(bamm)), + // fxs.balanceOf(BORROWER_USER), + // fxs.balanceOf(address(bamm)), + // fs_pair.balanceOf(BORROWER_USER), + // fs_pair.balanceOf(address(bamm)) + // ]; + // } + + + // // Wait 24 hrs again + // skip(24 * 3600); + + // // Switch back over to the loaner + // vm.stopPrank(); + // vm.startPrank(LOANER_USER); + + // // Redeem the BAMM tokens for LP + // uint256 lp_redeemed = bamm.redeem(LOANER_USER, bamm_minted); + + // // Make sure you got the same amount of LP back (minus 1 wei) + // assertEq(lp_redeemed, 100e18 - 1 wei); + + // vm.stopPrank(); + // } +} + diff --git a/src/foundry/test/FXS/FXSDisableVoteTracking.t.sol b/src/foundry/test/FXS/FXSDisableVoteTracking.t.sol new file mode 100644 index 00000000..8b88267d --- /dev/null +++ b/src/foundry/test/FXS/FXSDisableVoteTracking.t.sol @@ -0,0 +1,131 @@ +// SPDX-License-Identifier: ISC +pragma solidity ^0.8.19; + +import "frax-std/FraxTest.sol"; +import { IERC20 } from "@openzeppelin/contracts/token/ERC20/IERC20.sol"; +import { FRAXStablecoin } from "../../../hardhat/contracts/Frax/Frax.sol"; +import { FRAXShares } from "../../../hardhat/contracts/FXS/FXS.sol"; +import { BAMM } from "../../../hardhat/contracts/BAMM/BAMM.sol"; +import { BAMMHelper } from "../../../hardhat/contracts/BAMM/BAMMHelper.sol"; +import { FraxswapRouter } from "../../../hardhat/contracts/Fraxswap/periphery/FraxswapRouter.sol"; +import { FraxswapOracle } from "../../../hardhat/contracts/BAMM/FraxswapOracle.sol"; +import { FraxswapPair } from "../../../hardhat/contracts/Fraxswap/core/FraxswapPair.sol"; +import { GasHelper } from "../../../hardhat/contracts/Utils/GasHelper.sol"; + +contract BAMMTest is FraxTest, GasHelper { + + // using stdStorage for StdStorage; + + // Contract addresses + FraxswapPair public fs_pair = FraxswapPair(0x03B59Bd1c8B9F6C265bA0c3421923B93f15036Fa); // Use Fraxswap FRAX/FXS + FraxswapRouter public fs_router = FraxswapRouter(payable(0xC14d550632db8592D1243Edc8B95b0Ad06703867)); + FRAXStablecoin public frax = FRAXStablecoin(0x853d955aCEf822Db058eb8505911ED77F175b99e); + FRAXShares public fxs = FRAXShares(0x3432B6A60D23Ca0dFCa7761B7ab56459D9C964D0); + + // Test users + address internal constant ADDRESS_WITH_LP = 0x3F2E53B1A3036Fd33F3c2f3cC49daB26A88DF2e0; // Fraxswap FRAX/FXS gauge farm + address internal constant FXS_WHALE = 0xF977814e90dA44bFA03b6295A0616a897441aceC; + address internal constant UTILITY_WALLET = 0x36A87d1E3200225f881488E4AEedF25303FebcAe; + address internal constant COMPTROLLER_ADDRESS = 0xB1748C79709f4Ba2Dd82834B8c82D4a505003f27; + + function defaultSetup() public { + // Select the fork block + vm.createSelectFork(vm.envString("ETHEREUM_NETWORK_ENDPOINT"), 17198193); // Should be 17198193 + + // Turn off FXS vote tracking + vm.startPrank(COMPTROLLER_ADDRESS); + fxs.toggleVotes(); + + // Switch control to the FXS WHALE + changePrank(FXS_WHALE); + } + + function setUp() public { + defaultSetup(); + } + + function testTransfers() public { + // Note the balances beforehand + uint256 bal_before_whale = fxs.balanceOf(FXS_WHALE); + uint256 bal_before_utility = fxs.balanceOf(UTILITY_WALLET); + + // Do a test transfer with the tracking disabled + startMeasuringGas("Tracking disabled"); + fxs.transfer(UTILITY_WALLET, 100e18); + fxs.transferFrom(FXS_WHALE, UTILITY_WALLET, 100e18); + stopMeasuringGas(); + + // Note the balances after + uint256 bal_after_whale = fxs.balanceOf(FXS_WHALE); + uint256 bal_after_utility = fxs.balanceOf(UTILITY_WALLET); + + // Check balance changes + assertEq(int256(bal_after_whale) - int256(bal_before_whale), -200e18); + assertEq(int256(bal_after_utility) - int256(bal_before_utility), 200e18); + + // Do a test transfer with the tracking re-enabled + // ====================================================== + + // Turn on FXS vote tracking + vm.startPrank(COMPTROLLER_ADDRESS); + fxs.toggleVotes(); + + // Switch control to the FXS WHALE + changePrank(FXS_WHALE); + + // Should be like 52638 gwei more for each: about $10 at 100 gwei gas and $1800 ETH + startMeasuringGas("transfer"); + fxs.transfer(UTILITY_WALLET, 100e18); + fxs.transferFrom(FXS_WHALE, UTILITY_WALLET, 100e18); + stopMeasuringGas(); + } + + function testBurn() public { + // Note the balances beforehand + uint256 bal_before_whale = fxs.balanceOf(FXS_WHALE); + uint256 bal_before_utility = fxs.balanceOf(UTILITY_WALLET); + + // Approve a burnFrom + fxs.approve(FXS_WHALE, 100e18); + startMeasuringGas("burnFrom"); + fxs.burnFrom(FXS_WHALE, 100e18); + stopMeasuringGas(); + + // Do a test transfer with the tracking disabled + startMeasuringGas("burn"); + fxs.burn(100e18); + stopMeasuringGas(); + + // Note the balances after + uint256 bal_after_whale = fxs.balanceOf(FXS_WHALE); + uint256 bal_after_utility = fxs.balanceOf(UTILITY_WALLET); + + // Check balance changes + assertEq(int256(bal_after_whale) - int256(bal_before_whale), -200e18); + assertEq(int256(bal_after_utility) - int256(bal_before_utility), 0); + } + + function testPoolActions() public { + // As the FXS whale, approve the utility wallet to burn + fxs.approve(UTILITY_WALLET, 100e18); + + // Switch control to the COMPTROLLER + changePrank(COMPTROLLER_ADDRESS); + + // Set the utility wallet as a pool (have to do on FRAX contract, as FXS looks there) + frax.addPool(UTILITY_WALLET); + + // Switch control to the COMPTROLLER + changePrank(UTILITY_WALLET); + + // Test mints, pool_mints, and burns + fxs.mint(FXS_WHALE, 100e18); + fxs.pool_mint(FXS_WHALE, 100e18); + fxs.pool_burn_from(FXS_WHALE, 100e18); + } + + + + // TEST movements with mint and other weird stuff, clean addresses, etc +} + diff --git a/src/foundry/test/veFPISProxy.t.sol b/src/foundry/test/veFPIS/veFPISProxy.t.sol similarity index 99% rename from src/foundry/test/veFPISProxy.t.sol rename to src/foundry/test/veFPIS/veFPISProxy.t.sol index 1b617dd9..b60e3953 100644 --- a/src/foundry/test/veFPISProxy.t.sol +++ b/src/foundry/test/veFPIS/veFPISProxy.t.sol @@ -12,7 +12,7 @@ pragma solidity ^0.8.13; import { console } from "forge-std/console.sol"; import "forge-std/Test.sol"; -import "../../hardhat/contracts/Curve/veFPISProxy.sol"; +import "../../../hardhat/contracts/Curve/veFPISProxy.sol"; // import "../../contracts/Curve/IveFPIS.sol"; address constant FPIS_COMPTROLLER = 0x6A7efa964Cf6D9Ab3BC3c47eBdDB853A8853C502; diff --git a/src/hardhat/contracts/Fraxferry/Fraxferry.sol b/src/hardhat/contracts/Fraxferry/Fraxferry.sol index 7a198ef5..6d62843c 100644 --- a/src/hardhat/contracts/Fraxferry/Fraxferry.sol +++ b/src/hardhat/contracts/Fraxferry/Fraxferry.sol @@ -1,4 +1,4 @@ -pragma solidity ^0.8.4; +pragma solidity >=0.8.0; // ==================================================================== // | ______ _______ | diff --git a/src/hardhat/contracts/Misc_AMOs/balancer/IAuraDeposit.sol b/src/hardhat/contracts/Misc_AMOs/balancer/IAuraDeposit.sol new file mode 100644 index 00000000..8c45eef6 --- /dev/null +++ b/src/hardhat/contracts/Misc_AMOs/balancer/IAuraDeposit.sol @@ -0,0 +1,19 @@ +// SPDX-License-Identifier: GPL-2.0-or-later +pragma solidity >=0.8.0; + +interface IAuraDeposit { + function allowance ( address owner, address spender ) external view returns ( uint256 ); + function approve ( address spender, uint256 amount ) external returns ( bool ); + function balanceOf ( address account ) external view returns ( uint256 ); + function burn ( address _from, uint256 _amount ) external; + function decimals ( ) external view returns ( uint8 ); + function decreaseAllowance ( address spender, uint256 subtractedValue ) external returns ( bool ); + function increaseAllowance ( address spender, uint256 addedValue ) external returns ( bool ); + function mint ( address _to, uint256 _amount ) external; + function name ( ) external view returns ( string memory ); + function operator ( ) external view returns ( address ); + function symbol ( ) external view returns ( string memory ); + function totalSupply ( ) external view returns ( uint256 ); + function transfer ( address recipient, uint256 amount ) external returns ( bool ); + function transferFrom ( address sender, address recipient, uint256 amount ) external returns ( bool ); +} diff --git a/src/hardhat/contracts/Misc_AMOs/balancer/IAuraDepositVault.sol b/src/hardhat/contracts/Misc_AMOs/balancer/IAuraDepositVault.sol new file mode 100644 index 00000000..0e2bcb28 --- /dev/null +++ b/src/hardhat/contracts/Misc_AMOs/balancer/IAuraDepositVault.sol @@ -0,0 +1,64 @@ +// SPDX-License-Identifier: GPL-2.0-or-later +pragma solidity >=0.8.0; + +interface IAuraDepositVault { + function addExtraReward ( address _reward ) external returns ( bool ); + function allowance ( address owner, address spender ) external view returns ( uint256 ); + function approve ( address spender, uint256 amount ) external returns ( bool ); + function asset ( ) external view returns ( address ); + function balanceOf ( address account ) external view returns ( uint256 ); + function clearExtraRewards ( ) external; + function convertToAssets ( uint256 shares ) external view returns ( uint256 ); + function convertToShares ( uint256 assets ) external view returns ( uint256 ); + function currentRewards ( ) external view returns ( uint256 ); + function decimals ( ) external view returns ( uint8 ); + function deposit ( uint256 assets, address receiver ) external returns ( uint256 ); + function duration ( ) external view returns ( uint256 ); + function earned ( address account ) external view returns ( uint256 ); + function extraRewards ( uint256 ) external view returns ( address ); + function extraRewardsLength ( ) external view returns ( uint256 ); + function getReward ( ) external returns ( bool ); + function getReward ( address _account, bool _claimExtras ) external returns ( bool ); + function historicalRewards ( ) external view returns ( uint256 ); + function lastTimeRewardApplicable ( ) external view returns ( uint256 ); + function lastUpdateTime ( ) external view returns ( uint256 ); + function maxDeposit ( address ) external view returns ( uint256 ); + function maxMint ( address owner ) external view returns ( uint256 ); + function maxRedeem ( address owner ) external view returns ( uint256 ); + function maxWithdraw ( address owner ) external view returns ( uint256 ); + function mint ( uint256 shares, address receiver ) external returns ( uint256 ); + function name ( ) external view returns ( string memory ); + function newRewardRatio ( ) external view returns ( uint256 ); + function operator ( ) external view returns ( address ); + function periodFinish ( ) external view returns ( uint256 ); + function pid ( ) external view returns ( uint256 ); + function previewDeposit ( uint256 assets ) external view returns ( uint256 ); + function previewMint ( uint256 shares ) external view returns ( uint256 ); + function previewRedeem ( uint256 shares ) external view returns ( uint256 ); + function previewWithdraw ( uint256 assets ) external view returns ( uint256 shares ); + function processIdleRewards ( ) external; + function queueNewRewards ( uint256 _rewards ) external returns ( bool ); + function queuedRewards ( ) external view returns ( uint256 ); + function redeem ( uint256 shares, address receiver, address owner ) external returns ( uint256 ); + function rewardManager ( ) external view returns ( address ); + function rewardPerToken ( ) external view returns ( uint256 ); + function rewardPerTokenStored ( ) external view returns ( uint256 ); + function rewardRate ( ) external view returns ( uint256 ); + function rewardToken ( ) external view returns ( address ); + function rewards ( address ) external view returns ( uint256 ); + function stake ( uint256 _amount ) external returns ( bool ); + function stakeAll ( ) external returns ( bool ); + function stakeFor ( address _for, uint256 _amount ) external returns ( bool ); + function stakingToken ( ) external view returns ( address ); + function symbol ( ) external view returns ( string memory ); + function totalAssets ( ) external view returns ( uint256 ); + function totalSupply ( ) external view returns ( uint256 ); + function transfer ( address, uint256 ) external returns ( bool ); + function transferFrom ( address, address, uint256 ) external returns ( bool ); + function userRewardPerTokenPaid ( address ) external view returns ( uint256 ); + function withdraw ( uint256 amount, bool claim ) external returns ( bool ); + function withdraw ( uint256 assets, address receiver, address owner ) external returns ( uint256 ); + function withdrawAll ( bool claim ) external; + function withdrawAllAndUnwrap ( bool claim ) external; + function withdrawAndUnwrap ( uint256 amount, bool claim ) external returns ( bool ); +} diff --git a/src/hardhat/contracts/Misc_AMOs/balancer/IAuraGauge.sol b/src/hardhat/contracts/Misc_AMOs/balancer/IBalancerGauge.sol similarity index 99% rename from src/hardhat/contracts/Misc_AMOs/balancer/IAuraGauge.sol rename to src/hardhat/contracts/Misc_AMOs/balancer/IBalancerGauge.sol index c75a1bcc..6fdb5520 100644 --- a/src/hardhat/contracts/Misc_AMOs/balancer/IAuraGauge.sol +++ b/src/hardhat/contracts/Misc_AMOs/balancer/IBalancerGauge.sol @@ -1,7 +1,7 @@ // SPDX-License-Identifier: GPL-2.0-or-later pragma solidity >=0.8.0; -interface IAuraGauge { +interface IBalancerGauge { struct Reward { address token; diff --git a/src/hardhat/contracts/Staking/FraxCrossChainFarmV4_ERC20.sol b/src/hardhat/contracts/Staking/FraxCrossChainFarmV4_ERC20.sol index 8c4dbf9f..41c3aa14 100755 --- a/src/hardhat/contracts/Staking/FraxCrossChainFarmV4_ERC20.sol +++ b/src/hardhat/contracts/Staking/FraxCrossChainFarmV4_ERC20.sol @@ -46,14 +46,15 @@ import "../ERC20/SafeERC20.sol"; // import '../Misc_AMOs/balancer/IBalancerChildLiquidityGauge.sol'; // Balancer frxETH-bb-a-WETH Gauge // import '../Misc_AMOs/balancer/IL2BalancerPseudoMinter.sol'; // Balancer frxETH-bb-a-WETH Gauge // import '../Misc_AMOs/balancer/IStablePool.sol'; // Balancer frxETH-bb-a-WETH Gauge -import "../Oracle/AggregatorV3Interface.sol"; // Balancer frxETH-bb-a-WETH Gauge and Convex frxETH/XXXETH -import '../Misc_AMOs/convex/IConvexCvxLPRewardPoolCombo.sol'; // Convex cvxLP/RewardPool Combo -import '../Misc_AMOs/curve/ICurveChildLiquidityGauge.sol'; // Convex cvxLP/RewardPool Combo +// import "../Oracle/AggregatorV3Interface.sol"; // Balancer frxETH-bb-a-WETH Gauge and Convex frxETH/XXXETH +// import '../Misc_AMOs/convex/IConvexCvxLPRewardPoolCombo.sol'; // Convex cvxLP/RewardPool Combo +// import '../Misc_AMOs/curve/ICurveChildLiquidityGauge.sol'; // Convex cvxLP/RewardPool Combo // import '../Misc_AMOs/curve/I2pool.sol'; // Curve 2-token // import '../Misc_AMOs/curve/I2poolTokenNoLending.sol'; // Curve 2-token (No Lending) // import '../Misc_AMOs/curve/I3pool.sol'; // Curve 3-token // import '../Misc_AMOs/curve/I3poolAndToken.sol'; // Curve 3-token with pool -import '../Misc_AMOs/curve/ICurveStableSwapNG.sol'; // Curve 2-token Stable NG +// import '../Misc_AMOs/curve/ICurveStableSwapNG.sol'; // Curve 2-token Stable NG +import '../Fraxswap/core/interfaces/IFraxswapPair.sol'; // Fraxswap V2 // import '../Misc_AMOs/kyberswap/elastic/IKSElasticLMV2.sol'; // KyberSwap Elastic // import '../Misc_AMOs/kyberswap/elastic/IKyberSwapFarmingToken.sol'; // KyberSwap Elastic // import '../Misc_AMOs/kyberswap/elastic/IKSReinvestmentTokenPool.sol'; // KyberSwap Elastic @@ -131,7 +132,8 @@ contract FraxCrossChainFarmV4_ERC20 is Owned, ReentrancyGuard { // I2pool public stakingToken; // Curve 2-token // I3pool public stakingToken; // Curve 3-token // I3poolAndToken public stakingToken; // Curve 3-token with pool - IConvexCvxLPRewardPoolCombo public stakingToken; // Convex cvxLP/RewardPool combo + // IConvexCvxLPRewardPoolCombo public stakingToken; // Convex cvxLP/RewardPool combo + IFraxswapPair public stakingToken; // Fraxswap V2 // IStableXPair public stakingToken; // Impossible // IFeederPool public stakingToken; // mStable // ISaddleLPToken public stakingToken; // Saddle L2D4 @@ -355,12 +357,13 @@ contract FraxCrossChainFarmV4_ERC20 is Owned, ReentrancyGuard { } // stakingToken = IBalancerChildLiquidityGauge(_stakingToken); // Balancer frxETH-bb-a-WETH Gauge - stakingToken = IConvexCvxLPRewardPoolCombo(_stakingToken); + // stakingToken = IConvexCvxLPRewardPoolCombo(_stakingToken); // stakingToken = I2pool(_stakingToken); // stakingToken = I3pool(_stakingToken); // stakingToken = I3poolAndToken(_stakingToken); // stakingToken = IStableXPair(_stakingToken); // stakingToken = IFeederPool(_stakingToken); + stakingToken = IFraxswapPair(_stakingToken); // stakingToken = ISaddleLPToken(_stakingToken); // stakingToken = ILToken(_stakingToken); // stakingToken = ILPToken(_stakingToken); @@ -372,9 +375,9 @@ contract FraxCrossChainFarmV4_ERC20 is Owned, ReentrancyGuard { // Uniswap V2 / Impossible ONLY // Need to know which token FRAX is (0 or 1) - // address token0 = stakingToken.token0(); - // if (token0 == fraxAddress) frax_is_token0 = true; - // else frax_is_token0 = false; + address token0 = stakingToken.token0(); + if (token0 == fraxAddress) frax_is_token0 = true; + else frax_is_token0 = false; // Other booleans migrationsOn = false; @@ -480,12 +483,12 @@ contract FraxCrossChainFarmV4_ERC20 is Owned, ReentrancyGuard { // Convex FRAX/FXB // ============================================ - { - // Count both FRAX and FXB as both are beneficial - ICurveChildLiquidityGauge gauge = ICurveChildLiquidityGauge(stakingToken.curveGauge()); - ICurveStableSwapNG curvePool = ICurveStableSwapNG(gauge.lp_token()); - frax_per_lp_token = curvePool.get_virtual_price(); - } + // { + // // Count both FRAX and FXB as both are beneficial + // ICurveChildLiquidityGauge gauge = ICurveChildLiquidityGauge(stakingToken.curveGauge()); + // ICurveStableSwapNG curvePool = ICurveStableSwapNG(gauge.lp_token()); + // frax_per_lp_token = curvePool.get_virtual_price(); + // } // Curve 2-token (No Lending) // ============================================ @@ -532,6 +535,22 @@ contract FraxCrossChainFarmV4_ERC20 is Owned, ReentrancyGuard { // frax_per_lp_token = stakingToken.get_virtual_price() / 4; // } + // Fraxswap V2 + // ============================================ + { + uint256 total_frax_reserves; + // Technically getReserveAfterTwamm is more accurate, but if the TWAMM becomes paused, it will eventually gas out + // (uint256 _reserve0, uint256 _reserve1, , ,) = (stakingToken.getReserveAfterTwamm(block.timestamp)); + (uint256 _reserve0, uint256 _reserve1, ) = (stakingToken.getReserves()); + if (frax_is_token0) total_frax_reserves = _reserve0; + else total_frax_reserves = _reserve1; + + frax_per_lp_token = (total_frax_reserves * 1e18) / stakingToken.totalSupply(); + + // Multiply by two since both sides (for FRAX/wfrxETH and FRAX/FXS) are beneficial to Frax + frax_per_lp_token *= 2; + } + // KyberSwap Elastic // ============================================ // { @@ -1122,7 +1141,7 @@ contract FraxCrossChainFarmV4_ERC20 is Owned, ReentrancyGuard { // Convex cvxLP/RewardPool Combo // ========================= - stakingToken.getReward(address(this)); + // stakingToken.getReward(address(this)); } diff --git a/src/hardhat/contracts/Staking/FraxUnifiedFarmTemplate.sol b/src/hardhat/contracts/Staking/FraxUnifiedFarmTemplate.sol index 46fdacb4..8463727a 100755 --- a/src/hardhat/contracts/Staking/FraxUnifiedFarmTemplate.sol +++ b/src/hardhat/contracts/Staking/FraxUnifiedFarmTemplate.sol @@ -46,8 +46,8 @@ import "./Owned.sol"; // Extra rewards // Balancer // ==================== -import "../Misc_AMOs/balancer/IAuraGauge.sol"; -import "../Misc_AMOs/balancer/IBalancerMinter.sol"; +import "../Misc_AMOs/balancer/IAuraDeposit.sol"; +import "../Misc_AMOs/balancer/IAuraDepositVault.sol"; // BUNNI // ==================== @@ -65,8 +65,8 @@ contract FraxUnifiedFarmTemplate is Owned, ReentrancyGuard { // -------------------- VARIES -------------------- // Balancer - IAuraGauge public stakingToken; - IBalancerMinter public minter = IBalancerMinter(0x239e55F427D44C3cc793f49bFB507ebe76638a2b); + IAuraDeposit public stakingToken; + IAuraDepositVault public aura_deposit_vault = IAuraDepositVault(0xE557658e3D13d074961265756dC2eFB6c903A763); // Bunni // IBunniGauge public stakingToken; @@ -96,7 +96,7 @@ contract FraxUnifiedFarmTemplate is Owned, ReentrancyGuard { uint256 public lock_max_multiplier = uint256(2e18); // E18. 1x = e18 uint256 public lock_time_for_max_multiplier = 1 * 1095 * 86400; // 3 years // uint256 public lock_time_for_max_multiplier = 2 * 86400; // 2 days - uint256 public lock_time_min = 0; // 0 sec + uint256 public lock_time_min = 1; // 1 seconds. If 0, calcCurrLockMultiplier could div by 0 // veFXS related uint256 public vefxs_boost_scale_factor = uint256(4e18); // E18. 4x = 4e18; 100 / scale_factor = % vefxs supply needed for max boost @@ -667,20 +667,23 @@ contract FraxUnifiedFarmTemplate is Owned, ReentrancyGuard { // lastUpdateTime = periodFinish; periodFinish = periodFinish + ((num_periods_elapsed + 1) * rewardsDuration); - // Balancer Gauge Rewards + // Aura & Balancer Gauge Rewards // ========================================== // Pull in rewards and set the reward rate for one week, based off of that // If the rewards get messed up for some reason, set this to 0 and it will skip // Should only be called once per week max if (rewardRatesManual[1] != 0) { - // BAL + // AURA & BAL // ==================================== - uint256 bal_before = IERC20(rewardTokens[1]).balanceOf(address(this)); - minter.mint(address(stakingToken)); - uint256 bal_after = IERC20(rewardTokens[1]).balanceOf(address(this)); - - // Set the new reward rate - rewardRatesManual[1] = (bal_after - bal_before) / rewardsDuration; + uint256 aura_before = IERC20(rewardTokens[1]).balanceOf(address(this)); + uint256 bal_before = IERC20(rewardTokens[2]).balanceOf(address(this)); + aura_deposit_vault.getReward(address(this), true); + uint256 aura_after = IERC20(rewardTokens[1]).balanceOf(address(this)); + uint256 bal_after = IERC20(rewardTokens[2]).balanceOf(address(this)); + + // Set the new reward rates + rewardRatesManual[1] = (aura_after - aura_before) / rewardsDuration; // AURA + rewardRatesManual[2] = (bal_after - bal_before) / rewardsDuration; // BAL } // Bunni oLIT rewards @@ -825,6 +828,12 @@ contract FraxUnifiedFarmTemplate is Owned, ReentrancyGuard { (isRewTkn && rewardManagers[tokenAddress] == msg.sender) || (!isRewTkn && (msg.sender == owner)) ) { + + // Aura & Balancer + // Withdraw the tokens from the Aura vault. Do not claim + // ========================================= + if (tokenAddress == address(stakingToken)) aura_deposit_vault.withdraw(tokenAmount, false); + TransferHelper.safeTransfer(tokenAddress, msg.sender, tokenAmount); return; } @@ -853,8 +862,8 @@ contract FraxUnifiedFarmTemplate is Owned, ReentrancyGuard { // [5] uint256 _lock_time_min ) external onlyByOwnGov { require(_misc_vars[0] >= MULTIPLIER_PRECISION, "Must be >= MUL PREC"); - require((_misc_vars[1] >= 0) && (_misc_vars[2] >= 0) && (_misc_vars[3] >= 0) && (_misc_vars[5] >= 0), "Must be >= 0"); - require((_misc_vars[4] >= 1), "Must be >= 1"); + require((_misc_vars[1] >= 0) && (_misc_vars[2] >= 0) && (_misc_vars[3] >= 0), "Must be >= 0"); + require((_misc_vars[4] >= 1) && (_misc_vars[5] >= 1), "Must be >= 1"); lock_max_multiplier = _misc_vars[0]; vefxs_max_multiplier = _misc_vars[1]; diff --git a/src/hardhat/contracts/Staking/FraxUnifiedFarm_ERC20.sol b/src/hardhat/contracts/Staking/FraxUnifiedFarm_ERC20.sol index c983715c..e230afa8 100755 --- a/src/hardhat/contracts/Staking/FraxUnifiedFarm_ERC20.sol +++ b/src/hardhat/contracts/Staking/FraxUnifiedFarm_ERC20.sol @@ -19,7 +19,7 @@ import "./FraxUnifiedFarmTemplate.sol"; // -------------------- VARIES -------------------- // Balancer -// import "../Misc_AMOs/balancer/IAuraGauge.sol"; +// import "../Misc_AMOs/balancer/IBalancerGauge.sol"; // Bunni // import "../Misc_AMOs/bunni/IBunniGauge.sol"; @@ -483,6 +483,12 @@ contract FraxUnifiedFarm_ERC20 is FraxUnifiedFarmTemplate { // Pull the tokens from the sender TransferHelper.safeTransferFrom(address(stakingToken), msg.sender, address(this), addl_liq); + // Aura & Balancer + // Deposit the tokens into the Aura vault + // ========================================= + stakingToken.approve(address(aura_deposit_vault), addl_liq); + aura_deposit_vault.stake(addl_liq); + // Update the stake lockedStakes[msg.sender][theArrayIndex] = LockedStake( kek_id, @@ -565,6 +571,12 @@ contract FraxUnifiedFarm_ERC20 is FraxUnifiedFarmTemplate { // Varies per farm TransferHelper.safeTransferFrom(address(stakingToken), source_address, address(this), liquidity); + // Aura & Balancer + // Deposit the tokens into the Aura vault + // ========================================= + stakingToken.approve(address(aura_deposit_vault), liquidity); + aura_deposit_vault.stake(liquidity); + // Get the lock multiplier and kek_id uint256 lock_multiplier = lockMultiplier(secs); bytes32 kek_id = keccak256(abi.encodePacked(staker_address, start_timestamp, liquidity, _locked_liquidity[staker_address])); @@ -626,6 +638,11 @@ contract FraxUnifiedFarm_ERC20 is FraxUnifiedFarmTemplate { if (liquidity > 0) { + // Aura & Balancer + // Withdraw the tokens from the Aura vault. Do not claim + // ========================================= + aura_deposit_vault.withdraw(liquidity, false); + // Give the tokens to the destination_address // Should throw if insufficient balance TransferHelper.safeTransfer(address(stakingToken), destination_address, liquidity); diff --git a/src/hardhat/contracts/Staking/Variants/FraxUnifiedFarm_ERC20_Other.sol b/src/hardhat/contracts/Staking/Variants/FraxUnifiedFarm_ERC20_Other.sol index 8bf84a97..4c8b3150 100755 --- a/src/hardhat/contracts/Staking/Variants/FraxUnifiedFarm_ERC20_Other.sol +++ b/src/hardhat/contracts/Staking/Variants/FraxUnifiedFarm_ERC20_Other.sol @@ -6,8 +6,8 @@ import "../../Oracle/AggregatorV3Interface.sol"; // Balancer // ========================= -import "../../Misc_AMOs/balancer/IAuraGauge.sol"; -import "../../Misc_AMOs/balancer/IBalancerMinter.sol"; +import "../../Misc_AMOs/balancer/IAuraDeposit.sol"; +import "../../Misc_AMOs/balancer/IAuraDepositVault.sol"; import "../../Misc_AMOs/balancer/IBalancerVault.sol"; import "../../Misc_AMOs/balancer/IComposableStablePool.sol"; @@ -25,9 +25,9 @@ contract FraxUnifiedFarm_ERC20_Other is FraxUnifiedFarm_ERC20 { // frxETH Pricing AggregatorV3Interface internal priceFeedETHUSD = AggregatorV3Interface(0x5f4eC3Df9cbd43714FE2740f5E3616155c5b8419); - // Balancer - IComposableStablePool public lp_tkn; - IBalancerVault public vault; + // Aura / Balancer + IComposableStablePool public bal_vanilla_lp_tkn; + IBalancerVault public bal_vanilla_vault; // Bunni // IBunniTokenLP public lp_tkn; @@ -49,9 +49,9 @@ contract FraxUnifiedFarm_ERC20_Other is FraxUnifiedFarm_ERC20 { // COMMENTED OUT SO COMPILER DOESNT COMPLAIN. UNCOMMENT WHEN DEPLOYING // Balancer - stakingToken = IAuraGauge(_stakingToken); - lp_tkn = IComposableStablePool(stakingToken.lp_token()); - vault = IBalancerVault(lp_tkn.getVault()); + stakingToken = IAuraDeposit(_stakingToken); + bal_vanilla_lp_tkn = IComposableStablePool(0xB06bFBD7b50F80c8d9dA57Fc4cF5CBD5B3E2f148); + bal_vanilla_vault = IBalancerVault(bal_vanilla_lp_tkn.getVault()); // Bunni // stakingToken = IBunniGauge(_stakingToken); @@ -61,17 +61,9 @@ contract FraxUnifiedFarm_ERC20_Other is FraxUnifiedFarm_ERC20 { // frax_is_token0 = (token0 == frax_address); } - // Balancer + // Aura & Balancer // ---------------------------------------- - function setBalancerAddrs(address _minter, address _vault) public onlyByOwnGov { - minter = IBalancerMinter(_minter); - vault = IBalancerVault(_vault); - } - - // In case the rewards get screwed up - function toggleBalancer3rdPartyBalClaimer(address _claimer) public onlyByOwnGov { - minter.toggle_approve_mint(_claimer); - } + // Nothing // Bunni // ---------------------------------------- @@ -96,28 +88,29 @@ contract FraxUnifiedFarm_ERC20_Other is FraxUnifiedFarm_ERC20 { return price; } - function setETHUSDOracle(address _eth_usd_oracle_address) public onlyByOwnGov { - require(_eth_usd_oracle_address != address(0), "Zero address detected"); + // function setETHUSDOracle(address _eth_usd_oracle_address) public onlyByOwnGov { + // require(_eth_usd_oracle_address != address(0), "Zero address detected"); - priceFeedETHUSD = AggregatorV3Interface(_eth_usd_oracle_address); - } + // priceFeedETHUSD = AggregatorV3Interface(_eth_usd_oracle_address); + // } function fraxPerLPToken() public view override returns (uint256 frax_per_lp_token) { // COMMENTED OUT SO COMPILER DOESNT COMPLAIN. UNCOMMENT WHEN DEPLOYING - // Balancer frxETH-pxETH Gauge + // Aura / Balancer frxETH-pxETH // ============================================ { // Get the pool ID - bytes32 _poolId = lp_tkn.getPoolId(); + bytes32 _poolId = bal_vanilla_lp_tkn.getPoolId(); // Get the balances of each token in the pool - ( , uint256[] memory balances, ) = vault.getPoolTokens(_poolId); + ( , uint256[] memory balances, ) = bal_vanilla_vault.getPoolTokens(_poolId); uint256 frxETH_in_pool = balances[1]; uint256 frxETH_usd_value_e36 = (1e10) * (frxETH_in_pool * uint256(getLatestETHPriceE8())); // Calculate the frxETH value per "actual" LP - frax_per_lp_token = (frxETH_usd_value_e36) / lp_tkn.getActualSupply(); + // Balancer vault to Aura deposit vault is 1:1 + frax_per_lp_token = (frxETH_usd_value_e36) / bal_vanilla_lp_tkn.getActualSupply(); } // Bunni FRAX/USDC Gauge diff --git a/src/hardhat/gnosis-safe-scripts/Frax_Comptroller_Routine/Sunday_Part_1.js b/src/hardhat/gnosis-safe-scripts/Frax_Comptroller_Routine/Sunday_Part_1.js index db050273..5aab139e 100644 --- a/src/hardhat/gnosis-safe-scripts/Frax_Comptroller_Routine/Sunday_Part_1.js +++ b/src/hardhat/gnosis-safe-scripts/Frax_Comptroller_Routine/Sunday_Part_1.js @@ -3,11 +3,11 @@ const envPath = path.join(process.cwd(), "../../../.env"); require("dotenv").config({ path: envPath }); const { ethers } = require("hardhat"); -const { BigNumber } = require("@ethersproject/bignumber"); +// const { BigNumber } = require("@ethersproject/bignumber"); const util = require("util"); const chalk = require("chalk"); const fse = require("fs-extra"); -const { formatUnits } = require("ethers/lib.commonjs/utils"); +const { formatUnits } = require("ethers"); const { BIG6, BIG18, stringifyReplacer, serializeJSONObject, calculateChecksum, GetCVXMintAmount } = require("../utils/utils"); global.artifacts = artifacts; global.web3 = web3; @@ -36,16 +36,16 @@ async function main() { // Useful info to use later const summary_info = { - crv_to_save: BigNumber.from(0), - crv_to_convert_to_cvxcrv: BigNumber.from(0), - crv_to_send_to_curve_voter_proxy: BigNumber.from(0), + crv_to_save: BigInt(0), + crv_to_convert_to_cvxcrv: BigInt(0), + crv_to_send_to_curve_voter_proxy: BigInt(0), crv_new_voter_proxy_add_done: false, - crv_to_sell: BigNumber.from(0), - cvx_to_lock: BigNumber.from(0), + crv_to_sell: BigInt(0), + cvx_to_lock: BigInt(0), cvx_new_lock_done: false, - cvx_to_sell: BigNumber.from(0), - "3crv_direct_collected": BigNumber.from(0), - cvxcrv_direct_collected: BigNumber.from(0), + cvx_to_sell: BigInt(0), + "3crv_direct_collected": BigInt(0), + cvxcrv_direct_collected: BigInt(0), } console.log(`Using env file from ${envPath}`); @@ -118,7 +118,7 @@ async function main() { const ERC20_json_path = path.join(__dirname, '../../artifacts/contracts/ERC20/ERC20.sol/ERC20.json'); const { abi: ERC20_ABI } = JSON.parse( await fse.readFileSync(ERC20_json_path, 'utf-8')); const cvx = new ethers.Contract("0x4e3fbd56cd56c3e72c1403e103b45db9da5b9d2b", ERC20_ABI).connect(owner); - const cvx_total_supply = BigNumber.from(await cvx.totalSupply()); + const cvx_total_supply = BigInt(await cvx.totalSupply()); // console.log(cvx_total_supply.toString()); // // Get CRV rewards @@ -126,7 +126,7 @@ async function main() { // const { abi: IConvexAMO_Old_ABI } = JSON.parse( await fse.readFileSync(IConvexAMO_Old_json_path, 'utf-8')); // const convex_amo = new ethers.Contract("0x49ee75278820f409ecd67063D8D717B38d66bd71", IConvexAMO_Old_ABI).connect(owner); // const convex_amo_rewards = await convex_amo.showRewards(); - // const crv_from_convex_amo = BigNumber.from(convex_amo_rewards[0]); + // const crv_from_convex_amo = BigInt(convex_amo_rewards[0]); // const cvx_from_convex_amo = GetCVXMintAmount(crv_from_convex_amo, cvx_total_supply); // console.log(`----------- Convex AMO (FRAX3CRV) -----------`); // console.log(`CRV: ${formatUnits(crv_from_convex_amo, 18)}`); @@ -217,13 +217,13 @@ async function main() { const { abi: IStakingProxyConvex_ABI } = JSON.parse( await fse.readFileSync(IStakingProxyConvex, 'utf-8')); const convex_frax_usdc_staking_proxy = new ethers.Contract("0x2AA609715488B09EFA93883759e8B089FBa11296", IStakingProxyConvex_ABI).connect(owner); const convex_frax_usdc_rewards = await convex_frax_usdc_staking_proxy.earned(); - const crv_from_convex_frax_usdc = BigNumber.from(convex_frax_usdc_rewards[1][1]); - const cvx_from_convex_frax_usdc = BigNumber.from(convex_frax_usdc_rewards[1][2]); + const crv_from_convex_frax_usdc = BigInt(convex_frax_usdc_rewards[1][1]); + const cvx_from_convex_frax_usdc = BigInt(convex_frax_usdc_rewards[1][2]); // FRAXBP rewards: 0% of CRV and 100% of CVX is saved/reinvested - summary_info.crv_to_save = summary_info.crv_to_save.add(crv_from_convex_frax_usdc.mul(0).div(1000)); // 0% - summary_info.crv_to_sell = summary_info.crv_to_sell.add(crv_from_convex_frax_usdc.mul(1000).div(1000)); // 100% - summary_info.cvx_to_lock = summary_info.cvx_to_lock.add(cvx_from_convex_frax_usdc); + summary_info.crv_to_save = summary_info.crv_to_save + ((crv_from_convex_frax_usdc * BigInt(0)) / BigInt(1000)); // 0% + summary_info.crv_to_sell = summary_info.crv_to_sell + ((crv_from_convex_frax_usdc * BigInt(1000)) / BigInt(1000)); // 100% + summary_info.cvx_to_lock = summary_info.cvx_to_lock + (cvx_from_convex_frax_usdc); console.log(`----------- Convex Frax FRAX/USDC (stkcvxFRAXBP) -----------`); console.log(`CRV: ${formatUnits(crv_from_convex_frax_usdc, 18)}`); console.log(`CVX: ${formatUnits(cvx_from_convex_frax_usdc, 18)}`); @@ -245,13 +245,13 @@ async function main() { // Convex Frax FRAX/USDP (stkcvxFRAXUSDP) rewards // ================================================================ const convex_frax_usdp_staking_proxy = new ethers.Contract("0xD25D60aBafC220dd6F7BA37baD23e1105Db05a06", IStakingProxyConvex_ABI).connect(owner); - const convex_frax_usdp_rewards = await convex_frax_usdp_staking_proxy.callStatic.earned(); - const crv_from_convex_frax_usdp = BigNumber.from(convex_frax_usdp_rewards[1][1]); - const cvx_from_convex_frax_usdp = BigNumber.from(convex_frax_usdp_rewards[1][2]); + const convex_frax_usdp_rewards = await convex_frax_usdp_staking_proxy.earned.staticCall(); + const crv_from_convex_frax_usdp = BigInt(convex_frax_usdp_rewards[1][1]); + const cvx_from_convex_frax_usdp = BigInt(convex_frax_usdp_rewards[1][2]); // FRAXUSDP Rewards: Sell all - summary_info.crv_to_sell = summary_info.crv_to_sell.add(crv_from_convex_frax_usdp); - summary_info.cvx_to_sell = summary_info.cvx_to_sell.add(cvx_from_convex_frax_usdp); + summary_info.crv_to_sell = summary_info.crv_to_sell + crv_from_convex_frax_usdp; + summary_info.cvx_to_sell = summary_info.cvx_to_sell + cvx_from_convex_frax_usdp; console.log(`----------- Convex Frax FRAX/USDP (stkcvxFRAXUSDP) -----------`); console.log(`CRV: ${formatUnits(crv_from_convex_frax_usdp, 18)}`); console.log(`CVX: ${formatUnits(cvx_from_convex_frax_usdp, 18)}`); @@ -273,8 +273,8 @@ async function main() { // // Convex Frax Frax/FPI (stkcvxFPIFRAX) rewards // const convex_frax_fpi_staking_proxy = new ethers.Contract("0x2df2378103baB456457329D4C603440B92b9c0bd", IStakingProxyConvex_ABI).connect(owner); // const convex_frax_fpi_rewards = await convex_frax_fpi_staking_proxy.earned(); - // const crv_from_convex_frax_fpi = BigNumber.from(convex_frax_fpi_rewards[1][1]); - // const cvx_from_convex_frax_fpi = BigNumber.from(convex_frax_fpi_rewards[1][2]); + // const crv_from_convex_frax_fpi = BigInt(convex_frax_fpi_rewards[1][1]); + // const cvx_from_convex_frax_fpi = BigInt(convex_frax_fpi_rewards[1][2]); // summary_info.crv_to_sell = summary_info.crv_to_sell.add(crv_from_convex_frax_fpi); // summary_info.cvx_to_sell = summary_info.cvx_to_sell.add(cvx_from_convex_frax_fpi); // console.log(`----------- Convex Frax FRAX/FPI (stkcvxFPIFRAX) -----------`); @@ -323,25 +323,25 @@ async function main() { // CRV // summary_info.crv_to_save = summary_info.crv_to_save.add(cvx_crv_claim_all_rews[0]); summary_info.crv_to_sell = summary_info.crv_to_sell - .add(cvx_crv_claim_all_rews[0]) - .add(cvx_crv_claim_all_rews[1]) - .add(cvx_crv_claim_all_rews[2]) - .add(cvx_crv_claim_all_rews[3]) - .add(cvx_crv_claim_all_rews[4]) - .add(cvx_crv_claim_all_rews[5]) - .add(cvx_crv_claim_all_rews[6]) - .add(cvx_crv_claim_all_rews[7]); + + cvx_crv_claim_all_rews[0] + + cvx_crv_claim_all_rews[1] + + cvx_crv_claim_all_rews[2] + + cvx_crv_claim_all_rews[3] + + cvx_crv_claim_all_rews[4] + + cvx_crv_claim_all_rews[5] + + cvx_crv_claim_all_rews[6] + + cvx_crv_claim_all_rews[7]; // CVX - summary_info.cvx_to_lock = summary_info.cvx_to_lock.add(GetCVXMintAmount(cvx_crv_claim_all_rews[0], cvx_total_supply)) - summary_info.cvx_to_sell = summary_info.cvx_to_sell - .add(GetCVXMintAmount(cvx_crv_claim_all_rews[1], cvx_total_supply)) - .add(GetCVXMintAmount(cvx_crv_claim_all_rews[2], cvx_total_supply)) - .add(GetCVXMintAmount(cvx_crv_claim_all_rews[3], cvx_total_supply)) - .add(GetCVXMintAmount(cvx_crv_claim_all_rews[4], cvx_total_supply)) - .add(GetCVXMintAmount(cvx_crv_claim_all_rews[5], cvx_total_supply)) - .add(GetCVXMintAmount(cvx_crv_claim_all_rews[6], cvx_total_supply)) - .add(GetCVXMintAmount(cvx_crv_claim_all_rews[7], cvx_total_supply)); + summary_info.cvx_to_lock = summary_info.cvx_to_lock + GetCVXMintAmount(cvx_crv_claim_all_rews[0], cvx_total_supply) + summary_info.cvx_to_sell = summary_info.cvx_to_sell + + GetCVXMintAmount(cvx_crv_claim_all_rews[1], cvx_total_supply) + + GetCVXMintAmount(cvx_crv_claim_all_rews[2], cvx_total_supply) + + GetCVXMintAmount(cvx_crv_claim_all_rews[3], cvx_total_supply) + + GetCVXMintAmount(cvx_crv_claim_all_rews[4], cvx_total_supply) + + GetCVXMintAmount(cvx_crv_claim_all_rews[5], cvx_total_supply) + + GetCVXMintAmount(cvx_crv_claim_all_rews[6], cvx_total_supply) + + GetCVXMintAmount(cvx_crv_claim_all_rews[7], cvx_total_supply); console.log(`----------- Convex Curve Others -----------`); console.log(`convex_cvxcrvfrax_brp: ${formatUnits(cvx_crv_claim_all_rews[0], 18)} CRV, ${formatUnits(GetCVXMintAmount(cvx_crv_claim_all_rews[0], cvx_total_supply), 18)} CVX`); @@ -451,7 +451,7 @@ async function main() { const { abi: ICvxLockerV2_ABI } = JSON.parse( await fse.readFileSync(ICvxLockerV2_json_path, 'utf-8')); let cvx_locker = new ethers.Contract("0x72a19342e8F1838460eBFCCEf09F6585e32db86E", ICvxLockerV2_ABI).connect(owner);; const locked_cvx_rewards = await cvx_locker.claimableRewards("0xB1748C79709f4Ba2Dd82834B8c82D4a505003f27"); - summary_info.cvxcrv_direct_collected = summary_info.cvxcrv_direct_collected.add(locked_cvx_rewards[0][1]); + summary_info.cvxcrv_direct_collected = summary_info.cvxcrv_direct_collected + locked_cvx_rewards[0][1]; console.log(`----------- Convex Curve Others -----------`); console.log(`cvxcrv_direct_collected: ${formatUnits(locked_cvx_rewards[0][1], 18)} cvxCRV`); @@ -501,7 +501,7 @@ async function main() { // ===================================== // Determine if you need to process expired locks const cvx_lock_status = await cvx_locker.lockedBalances("0xB1748C79709f4Ba2Dd82834B8c82D4a505003f27"); - const PROCESS_EXPIRED_LOCKS = (BigNumber.from(cvx_lock_status.unlockable).gt(0)); + const PROCESS_EXPIRED_LOCKS = (BigInt(cvx_lock_status.unlockable) > BigInt(0)); if (PROCESS_EXPIRED_LOCKS) { batch_json.transactions.push({ "to": "0x72a19342e8F1838460eBFCCEf09F6585e32db86E", @@ -526,6 +526,32 @@ async function main() { else { console.log("No expired locks to process") } + + // =============================================================== + // ============================ PRISMA =========================== + // =============================================================== + + // PRISMA rewards + // ===================================== + batch_json.transactions.push({ + "to": "0xC72bc1a8cf9b1A218386df641d8bE99B40436A0f", + "value": "0", + "data": null, + "contractMethod": { + "inputs": [ + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "claim", + "payable": false + }, + "contractInputsValues": { + "account": "0xB1748C79709f4Ba2Dd82834B8c82D4a505003f27", + } + }); // =============================================================== @@ -870,9 +896,9 @@ async function main() { // ============================= CALCULATE SELL STUFF ============================ // =============================================================================== // CRV (For SAVED CRV, 100% goes to voter proxy for now. We are not adding to our cvxCRV stake) - summary_info.crv_to_convert_to_cvxcrv = summary_info.crv_to_save.mul(0).div(100); // 0% - summary_info.crv_to_send_to_curve_voter_proxy = summary_info.crv_to_save.mul(0).div(100); // 0% - summary_info.crv_to_save = BigNumber.from(0); + summary_info.crv_to_convert_to_cvxcrv = (summary_info.crv_to_save * BigInt(0)) / (BigInt(100)); // 0% + summary_info.crv_to_send_to_curve_voter_proxy = (summary_info.crv_to_save * BigInt(0)) / (BigInt(100)); // 0% + summary_info.crv_to_save = BigInt(0); console.log(`\n----------- Post Reward Collection Status -----------`); console.log(summary_info); @@ -929,7 +955,7 @@ async function main() { "_value": summary_info.crv_to_send_to_curve_voter_proxy.toString(), } }); - summary_info.crv_to_send_to_curve_voter_proxy = BigNumber.from(0); + summary_info.crv_to_send_to_curve_voter_proxy = BigInt(0); } summary_info.crv_new_voter_proxy_add_done = true; @@ -967,7 +993,7 @@ async function main() { "_spendRatio": "0", } }); - summary_info.cvx_to_lock = BigNumber.from(0); + summary_info.cvx_to_lock = BigInt(0); summary_info.cvx_new_lock_done = true; @@ -981,7 +1007,7 @@ async function main() { // // Swap CRV for cvxCRV // // ===================================== - // if (summary_info.crv_to_convert_to_cvxcrv.gt(BigNumber.from(0))) { + // if (summary_info.crv_to_convert_to_cvxcrv.gt(BigInt(0))) { // const I2PoolcvxCRVCRV_json_path = path.join(__dirname, '../../artifacts/contracts/Misc_AMOs/curve/I2PoolcvxCRVCRV.sol/I2PoolcvxCRVCRV.json'); // const { abi: I2PoolcvxCRVCRV_ABI } = JSON.parse( await fse.readFileSync(I2PoolcvxCRVCRV_json_path, 'utf-8')); // let cvxcrvcrv = new ethers.Contract("0x971add32ea87f10bd192671630be3be8a11b8623", I2PoolcvxCRVCRV_ABI).connect(owner); @@ -1020,7 +1046,7 @@ async function main() { // "_min_dy": slipped_cvxcrv_out.toString(), // } // }); - // summary_info.crv_to_convert_to_cvxcrv = BigNumber.from(0); + // summary_info.crv_to_convert_to_cvxcrv = BigInt(0); // summary_info.cvxcrv_direct_collected = summary_info.cvxcrv_direct_collected.add(slipped_cvxcrv_out); // // Lock the cvxCRV in Convex (approve) @@ -1078,8 +1104,8 @@ async function main() { // "_to": "0xB1748C79709f4Ba2Dd82834B8c82D4a505003f27", // } // }); - // summary_info.crv_to_convert_to_cvxcrv = BigNumber.from(0); - // summary_info.cvxcrv_direct_collected = BigNumber.from(0); + // summary_info.crv_to_convert_to_cvxcrv = BigInt(0); + // summary_info.cvxcrv_direct_collected = BigInt(0); // console.log(`\n----------- Post cvxCRV Handling Status -----------`); // console.log(summary_info); diff --git a/src/hardhat/gnosis-safe-scripts/Frax_Comptroller_Routine/Sunday_Part_1.json b/src/hardhat/gnosis-safe-scripts/Frax_Comptroller_Routine/Sunday_Part_1.json index e4017913..c1fdc81f 100644 --- a/src/hardhat/gnosis-safe-scripts/Frax_Comptroller_Routine/Sunday_Part_1.json +++ b/src/hardhat/gnosis-safe-scripts/Frax_Comptroller_Routine/Sunday_Part_1.json @@ -1 +1 @@ -{"version":"1.0","chainId":"1","createdAt":1704571511000,"meta":{"name":"Transactions Batch","description":"","txBuilderVersion":"1.14.1","createdFromSafeAddress":"0xB1748C79709f4Ba2Dd82834B8c82D4a505003f27","createdFromOwnerAddress":"","checksum":"0x90dd5982fcc0d452fa15ec316d53180a8cf482f8d99d6b70259f055c49c3c3f4"},"transactions":[{"to":"0x2AA609715488B09EFA93883759e8B089FBa11296","value":"0","data":null,"contractMethod":{"inputs":[],"name":"getReward","payable":false},"contractInputsValues":null},{"to":"0xD25D60aBafC220dd6F7BA37baD23e1105Db05a06","value":"0","data":null,"contractMethod":{"inputs":[],"name":"getReward","payable":false},"contractInputsValues":null},{"to":"0x3f29cB4111CbdA8081642DA1f75B3c12DECf2516","value":"0","data":null,"contractMethod":{"inputs":[{"internalType":"address[]","name":"rewardContracts","type":"address[]"},{"internalType":"address[]","name":"extraRewardContracts","type":"address[]"},{"internalType":"address[]","name":"tokenRewardContracts","type":"address[]"},{"internalType":"address[]","name":"tokenRewardTokens","type":"address[]"},{"internalType":"uint256","name":"depositCrvMaxAmount","type":"uint256"},{"internalType":"uint256","name":"minAmountOut","type":"uint256"},{"internalType":"uint256","name":"depositCvxMaxAmount","type":"uint256"},{"internalType":"uint256","name":"spendCvxAmount","type":"uint256"},{"internalType":"uint256","name":"options","type":"uint256"}],"name":"claimRewards","payable":false},"contractInputsValues":{"rewardContracts":"[\"0x7e880867363A7e321f5d260Cade2B0Bb2F717B02\", \"0x6991C1CD588c4e6f6f1de3A0bac5B8BbAb7aAF6d\", \"0x26598e3E511ADFadefD70ab2C3475Ff741741104\", \"0x47809eE386D1dEC29c0b13f21ba30F564517538B\", \"0x053e1dad223A206e6BCa24C77786bb69a10e427d\", \"0x062450B06EB92F1C4E227C41c987ed97c93Ae232\", \"0xB10a6e39Ed8a66fEd3aAef3866a95611a49B9a95\", \"0xE627082369689b2B86D948c377A4aE4e739C59eE\"]","extraRewardContracts":"[]","tokenRewardContracts":"[]","tokenRewardTokens":"[]","depositCrvMaxAmount":"0","minAmountOut":"0","depositCvxMaxAmount":"0","spendCvxAmount":"0","options":"0"}},{"to":"0xaa0C3f5F7DFD688C6E646F66CD2a6B66ACdbE434","value":"0","data":null,"contractMethod":{"inputs":[{"internalType":"address","name":"_account","type":"address"}],"name":"getReward","payable":false},"contractInputsValues":{"_account":"0xB1748C79709f4Ba2Dd82834B8c82D4a505003f27"}},{"to":"0x72a19342e8F1838460eBFCCEf09F6585e32db86E","value":"0","data":null,"contractMethod":{"inputs":[{"internalType":"address","name":"_account","type":"address"}],"name":"getReward","payable":false},"contractInputsValues":{"_account":"0xB1748C79709f4Ba2Dd82834B8c82D4a505003f27"}},{"to":"0x0c73f1cFd5C9dFc150C8707Aa47Acbd14F0BE108","value":"0","data":null,"contractMethod":{"inputs":[{"internalType":"address","name":"_account","type":"address"}],"name":"getReward","payable":false},"contractInputsValues":{"_account":"0xB1748C79709f4Ba2Dd82834B8c82D4a505003f27"}},{"to":"0x72a19342e8F1838460eBFCCEf09F6585e32db86E","value":"0","data":null,"contractMethod":{"inputs":[{"internalType":"bool","name":"_relock","type":"bool"}],"name":"processExpiredLocks","payable":false},"contractInputsValues":{"_relock":true}},{"to":"0x5E8422345238F34275888049021821E8E08CAa1f","value":"0","data":null,"contractMethod":{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","payable":false},"contractInputsValues":{"spender":"0xac3E018457B222d93114458476f3E3416Abbe38F","amount":"14323200000000000000"}},{"to":"0xac3E018457B222d93114458476f3E3416Abbe38F","value":"0","data":null,"contractMethod":{"inputs":[{"internalType":"uint256","name":"assets","type":"uint256"},{"internalType":"address","name":"receiver","type":"address"}],"name":"deposit","payable":false},"contractInputsValues":{"assets":"14323200000000000000","receiver":"0xB1748C79709f4Ba2Dd82834B8c82D4a505003f27"}},{"to":"0x358fE82370a1B9aDaE2E3ad69D6cF9e503c96018","value":"0","data":null,"contractMethod":{"inputs":[{"internalType":"address","name":"gauge_addr","type":"address"}],"name":"mint","payable":false},"contractInputsValues":{"gauge_addr":"0xB2Ac3382dA625eb41Fc803b57743f941a484e2a6"}},{"to":"0x3814307b86b54b1d8e7B2Ac34662De9125F8f4E6","value":"0","data":null,"contractMethod":{"inputs":[],"name":"collectFees","payable":false},"contractInputsValues":null},{"to":"0x72a19342e8F1838460eBFCCEf09F6585e32db86E","value":"0","data":null,"contractMethod":{"inputs":[{"internalType":"address","name":"_account","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"},{"internalType":"uint256","name":"_spendRatio","type":"uint256"}],"name":"lock","payable":false},"contractInputsValues":{"_account":"0xB1748C79709f4Ba2Dd82834B8c82D4a505003f27","_amount":"595433586272637341792","_spendRatio":"0"}}]} \ No newline at end of file +{"version":"1.0","chainId":"1","createdAt":1709409527000,"meta":{"name":"Transactions Batch","description":"","txBuilderVersion":"1.14.1","createdFromSafeAddress":"0xB1748C79709f4Ba2Dd82834B8c82D4a505003f27","createdFromOwnerAddress":"","checksum":"0x4764d3374837e7ae1ba414b0124dd91bcab561c085e8fca5bce48b6ff68e7ff1"},"transactions":[{"to":"0x2AA609715488B09EFA93883759e8B089FBa11296","value":"0","data":null,"contractMethod":{"inputs":[],"name":"getReward","payable":false},"contractInputsValues":null},{"to":"0xD25D60aBafC220dd6F7BA37baD23e1105Db05a06","value":"0","data":null,"contractMethod":{"inputs":[],"name":"getReward","payable":false},"contractInputsValues":null},{"to":"0x3f29cB4111CbdA8081642DA1f75B3c12DECf2516","value":"0","data":null,"contractMethod":{"inputs":[{"internalType":"address[]","name":"rewardContracts","type":"address[]"},{"internalType":"address[]","name":"extraRewardContracts","type":"address[]"},{"internalType":"address[]","name":"tokenRewardContracts","type":"address[]"},{"internalType":"address[]","name":"tokenRewardTokens","type":"address[]"},{"internalType":"uint256","name":"depositCrvMaxAmount","type":"uint256"},{"internalType":"uint256","name":"minAmountOut","type":"uint256"},{"internalType":"uint256","name":"depositCvxMaxAmount","type":"uint256"},{"internalType":"uint256","name":"spendCvxAmount","type":"uint256"},{"internalType":"uint256","name":"options","type":"uint256"}],"name":"claimRewards","payable":false},"contractInputsValues":{"rewardContracts":"[\"0x7e880867363A7e321f5d260Cade2B0Bb2F717B02\", \"0x6991C1CD588c4e6f6f1de3A0bac5B8BbAb7aAF6d\", \"0x26598e3E511ADFadefD70ab2C3475Ff741741104\", \"0x47809eE386D1dEC29c0b13f21ba30F564517538B\", \"0x053e1dad223A206e6BCa24C77786bb69a10e427d\", \"0x062450B06EB92F1C4E227C41c987ed97c93Ae232\", \"0xB10a6e39Ed8a66fEd3aAef3866a95611a49B9a95\", \"0xE627082369689b2B86D948c377A4aE4e739C59eE\"]","extraRewardContracts":"[]","tokenRewardContracts":"[]","tokenRewardTokens":"[]","depositCrvMaxAmount":"0","minAmountOut":"0","depositCvxMaxAmount":"0","spendCvxAmount":"0","options":"0"}},{"to":"0xaa0C3f5F7DFD688C6E646F66CD2a6B66ACdbE434","value":"0","data":null,"contractMethod":{"inputs":[{"internalType":"address","name":"_account","type":"address"}],"name":"getReward","payable":false},"contractInputsValues":{"_account":"0xB1748C79709f4Ba2Dd82834B8c82D4a505003f27"}},{"to":"0x72a19342e8F1838460eBFCCEf09F6585e32db86E","value":"0","data":null,"contractMethod":{"inputs":[{"internalType":"address","name":"_account","type":"address"}],"name":"getReward","payable":false},"contractInputsValues":{"_account":"0xB1748C79709f4Ba2Dd82834B8c82D4a505003f27"}},{"to":"0x0c73f1cFd5C9dFc150C8707Aa47Acbd14F0BE108","value":"0","data":null,"contractMethod":{"inputs":[{"internalType":"address","name":"_account","type":"address"}],"name":"getReward","payable":false},"contractInputsValues":{"_account":"0xB1748C79709f4Ba2Dd82834B8c82D4a505003f27"}},{"to":"0x72a19342e8F1838460eBFCCEf09F6585e32db86E","value":"0","data":null,"contractMethod":{"inputs":[{"internalType":"bool","name":"_relock","type":"bool"}],"name":"processExpiredLocks","payable":false},"contractInputsValues":{"_relock":true}},{"to":"0xC72bc1a8cf9b1A218386df641d8bE99B40436A0f","value":"0","data":null,"contractMethod":{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"claim","payable":false},"contractInputsValues":{"account":"0xB1748C79709f4Ba2Dd82834B8c82D4a505003f27"}},{"to":"0x5E8422345238F34275888049021821E8E08CAa1f","value":"0","data":null,"contractMethod":{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","payable":false},"contractInputsValues":{"spender":"0xac3E018457B222d93114458476f3E3416Abbe38F","amount":"14689600000000000000"}},{"to":"0xac3E018457B222d93114458476f3E3416Abbe38F","value":"0","data":null,"contractMethod":{"inputs":[{"internalType":"uint256","name":"assets","type":"uint256"},{"internalType":"address","name":"receiver","type":"address"}],"name":"deposit","payable":false},"contractInputsValues":{"assets":"14689600000000000000","receiver":"0xB1748C79709f4Ba2Dd82834B8c82D4a505003f27"}},{"to":"0x358fE82370a1B9aDaE2E3ad69D6cF9e503c96018","value":"0","data":null,"contractMethod":{"inputs":[{"internalType":"address","name":"gauge_addr","type":"address"}],"name":"mint","payable":false},"contractInputsValues":{"gauge_addr":"0xB2Ac3382dA625eb41Fc803b57743f941a484e2a6"}},{"to":"0x3814307b86b54b1d8e7B2Ac34662De9125F8f4E6","value":"0","data":null,"contractMethod":{"inputs":[],"name":"collectFees","payable":false},"contractInputsValues":null},{"to":"0x72a19342e8F1838460eBFCCEf09F6585e32db86E","value":"0","data":null,"contractMethod":{"inputs":[{"internalType":"address","name":"_account","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"},{"internalType":"uint256","name":"_spendRatio","type":"uint256"}],"name":"lock","payable":false},"contractInputsValues":{"_account":"0xB1748C79709f4Ba2Dd82834B8c82D4a505003f27","_amount":"124847245010746964501","_spendRatio":"0"}}]} \ No newline at end of file diff --git a/src/hardhat/gnosis-safe-scripts/utils/utils.js b/src/hardhat/gnosis-safe-scripts/utils/utils.js index 9473ecc4..292a1953 100644 --- a/src/hardhat/gnosis-safe-scripts/utils/utils.js +++ b/src/hardhat/gnosis-safe-scripts/utils/utils.js @@ -3,7 +3,6 @@ const envPath = path.join(process.cwd(), "../../../.env"); require("dotenv").config({ path: envPath }); const { ethers } = require("hardhat"); -const { BigNumber } = require("@ethersproject/bignumber"); const util = require("util"); const chalk = require("chalk"); const fse = require("fs-extra"); @@ -16,8 +15,8 @@ let ADDRS_ETH_FARMS = ADDRS_ETH.staking_contracts; global.artifacts = artifacts; global.web3 = web3; -const BIG6 = BigNumber.from(10).pow(6); -const BIG18 = BigNumber.from(10).pow(18); +const BIG6 = BigInt("1000000"); +const BIG18 = BigInt("1000000000000000000"); const stringifyReplacer = (_, value) => (value === undefined ? null : value) @@ -54,29 +53,29 @@ const calculateChecksum = (batchFile) => { // From https://docs.convexfinance.com/convexfinanceintegration/cvx-minting const GetCVXMintAmount = ( crvEarned, cvxTotalSupply ) => { // Constants - let cliffSize = BigNumber.from("1000000000000000000").mul(100000); // New cliff every 100000 tokens - let cliffCount = BigNumber.from("1000"); // 1,000 cliffs - let maxSupply = BigNumber.from("1000000000000000000").mul(100000000); // 100 mil max supply + let cliffSize = BigInt("1000000000000000000") * BigInt("100000"); // New cliff every 100000 tokens + let cliffCount = BigInt("1000"); // 1,000 cliffs + let maxSupply = BigInt("1000000000000000000") * BigInt("100000000"); // 100 mil max supply // Get current cliff - let currentCliff = cvxTotalSupply.div(cliffSize); + let currentCliff = cvxTotalSupply / cliffSize; // If current cliff is under the max - if(currentCliff.lt(cliffCount)){ + if(currentCliff < cliffCount){ // Get remaining cliffs - let remaining = cliffCount.sub(currentCliff); + let remaining = cliffCount - currentCliff; // Multiply ratio of remaining cliffs to total cliffs against amount CRV received - var cvxEarned = (crvEarned.mul(remaining)).div(cliffCount); + var cvxEarned = (crvEarned * remaining) / (cliffCount); // Double check we have not gone over the max supply - var amountTillMax = maxSupply.sub(cvxTotalSupply); - if(cvxEarned.gt(amountTillMax)){ + var amountTillMax = maxSupply - cvxTotalSupply; + if(cvxEarned > amountTillMax){ cvxEarned = amountTillMax; } return cvxEarned; } - return BigNumber.from(0); + return BigInt(0); } module.exports = { diff --git a/src/hardhat/hardhat.config.js b/src/hardhat/hardhat.config.js index 22e44375..31f31761 100644 --- a/src/hardhat/hardhat.config.js +++ b/src/hardhat/hardhat.config.js @@ -44,9 +44,10 @@ module.exports = { // url: `${process.env.AVALANCHE_FORKING_NETWORK_ENDPOINT}`, // Avalanche // url: `${process.env.BOBA_NETWORK_ENDPOINT}`, // Boba // url: `${process.env.BSC_NETWORK_ENDPOINT}`, // BSC - url: `${process.env.ETHEREUM_NETWORK_ENDPOINT}`, // Ethereum + // url: `${process.env.ETHEREUM_NETWORK_ENDPOINT}`, // Ethereum // url: `${process.env.EVMOS_NETWORK_ENDPOINT}`, // Evmos // url: `${process.env.FANTOM_FORKING_NETWORK_ENDPOINT}`, // Fantom + url: `${process.env.FRAXTAL_NETWORK_ENDPOINT}`, // Fraxtal // url: `${process.env.FUSE_NETWORK_ENDPOINT}`, // Fuse // url: `${process.env.HARMONY_NETWORK_ENDPOINT}`, // Harmony // url: `${process.env.MOONBEAM_NETWORK_ENDPOINT}`, // Moonbeam @@ -62,7 +63,7 @@ module.exports = { // Pin the block to allow caching // blockNumber: 167152063 // ARBITRUM - blockNumber: 18936285 // ETHEREUM + // blockNumber: 18936285 // ETHEREUM }, accounts: { @@ -176,6 +177,19 @@ module.exports = { gasPrice: 2000000000, // 2 Gwei gasMultiplier: 1.2, }, + fraxtal: { + url:`${process.env.FRAXTAL_NETWORK_ENDPOINT}`, + accounts: { + mnemonic: process.env.MNEMONIC_PHRASE, + }, + // httpHeaders: { + // "Cookie": `${process.env.FRAXCHAIN_DEVNET_COOKIE}` + // }, + chainId: 252, + gas: "auto", + gasPrice: 2500000, // 0.0025 Gwei + gasMultiplier: 1.2, + }, // fuse: { // url: process.env.FUSE_NETWORK_ENDPOINT, // accounts: { @@ -500,11 +514,26 @@ module.exports = { timeout: 50000000 }, etherscan: { - // apiKey: process.env.BSCSCAN_API_KEY // BSC - apiKey: process.env.ETHERSCAN_API_KEY, // ETH Mainnet - // apiKey: process.env.FTMSCAN_API_KEY // Fantom - // apiKey: process.env.OPTIMISM_API_KEY, // Optimism - // apiKey: process.env.POLYGONSCAN_API_KEY // Polygon + apiKey: { + bsc: process.env.BSCSCAN_API_KEY, + mainnet: process.env.ETHERSCAN_API_KEY, + // fantom: process.env.FTMSCAN_API_KEY, + fraxtal: process.env.FRAXTAL_API_KEY, + // optimisticEthereum: process.env.OPTIMISM_API_KEY, + polygon: process.env.POLYGONSCAN_API_KEY, + }, + customChains: [ + { + network: "fraxtal", + chainId: 252, + urls: { + apiURL: "https://api.fraxscan.com", + browserURL: "https://fraxscan.com" + } + } + ] + + }, gasReporter: { currency: 'USD', diff --git a/src/hardhat/test/Fraxswap/utilities.js b/src/hardhat/test/Fraxswap/utilities.js index f07844af..711c839d 100644 --- a/src/hardhat/test/Fraxswap/utilities.js +++ b/src/hardhat/test/Fraxswap/utilities.js @@ -1,4 +1,4 @@ -const {constants, BigNumber, utils} = require('ethers'); +const {constants, BigNumber, utils} = require('ethers-v5'); // https://github.com/ethers-io/ethers.js/blob/master/packages/bignumber/src.ts/bignumber.ts const BIG6 = BigNumber.from("1000000"); diff --git a/src/types/api.d.ts b/src/types/api.d.ts index 5e5a9c36..402186bc 100755 --- a/src/types/api.d.ts +++ b/src/types/api.d.ts @@ -1,6 +1,6 @@ import { CollateralDetailsPack, GovernanceHistoryCodes } from './constants'; import Web3 from 'web3'; -import SolanaWeb3 from '@solana/web3.js'; +// import SolanaWeb3 from '@solana/web3.js'; import BigNumber from 'bignumber.js'; /** @@ -152,7 +152,7 @@ declare global { moonriver: Web3; optimism: Web3; polygon: Web3; - solana: SolanaWeb3.Connection; + // solana: SolanaWeb3.Connection; } export interface BlockNumPack { diff --git a/src/types/constants.ts b/src/types/constants.ts index 067b419f..2bb7bcb1 100755 --- a/src/types/constants.ts +++ b/src/types/constants.ts @@ -2301,6 +2301,12 @@ export const CONTRACT_ADDRESSES = { fraxferry_v2__ethereum_fantom__FXS__ETH_SIDE: "0x1313d143BE1ac25aCACEFF39Bf31877bccDb9622", fraxferry_v2__ethereum_fantom__frxETH__ETH_SIDE: "0xaF4305d05e9B08b1D17894ce1ACE8235528f7EdE", fraxferry_v2__ethereum_fantom__sfrxETH__ETH_SIDE: "0xB6b0290A39E2F896bBd8fC19cf17FE393e993dE4", + fraxferry_v2__ethereum_fraxtal__FRAX__ETH_SIDE: '0x5e1D94021484642863Ea8E7Cb4F0188e56B18FEE', + fraxferry_v2__ethereum_fraxtal__FXS__ETH_SIDE: '0x4A6d155df9Ec9A1BB3639e6B7B99E46Fb68D42f6', + fraxferry_v2__ethereum_fraxtal__FPI__ETH_SIDE: '0x9A576A3d39c589A861B46864C253288bcA428a6c', + fraxferry_v2__ethereum_fraxtal__FPIS__ETH_SIDE: '0x958815f476cD07354c0BC034EE5077B20fD93003', + fraxferry_v2__ethereum_fraxtal__sfrxETH__ETH_SIDE: '0x5c5f05cF8528FFe925A2264743bFfEdbAB2b0FE3', + fraxferry_v2__ethereum_fraxtal__sFRAX__ETH_SIDE: '0x2b4864c2F2A2C275C6C66B90a2ae6BE9fA9cbE47', fraxferry_v1__ethereum_moonbeam__FRAX__ETH_SIDE: "0xF1E1deA8F1053FD9C5F47f72F1f03977E17aF242", fraxferry_v2__ethereum_moonbeam__FXS__ETH_SIDE: "0x2De1354c98880889643c4cA8B06FA2Fb8Fc1Fd7A", fraxferry_v2__ethereum_moonbeam__frxETH__ETH_SIDE: "0x228567c10b7533C88057c10dDeA6349360F122c5", @@ -2417,6 +2423,7 @@ export const CONTRACT_ADDRESSES = { reward_tokens: { aave: "0x7fc66500c84a76ad7e9c93437bfc5ac33e2ddae9", anyswap: "0xf99d58e463A2E07e5692127302C20A191861b4D6", + aura: "0xC0c293ce456fF0ED870ADd98a0828Dd4d2903DBF", comp: "0xc00e94Cb662C3520282E6f5717214004A7f26888", curve_dao: "0xd533a949740bb3306d119cc777fa900ba034cd52", cvx: "0x4e3fbd56cd56c3e72c1403e103b45db9da5b9d2b", @@ -2608,10 +2615,10 @@ export const CONTRACT_ADDRESSES = { cvxSDTFRAXBP_Rewarder: '0xc3df9cC2B8FFdB801E8e6E8FF9C1245E2dEcdA98', cvxSTGFRAXBP: '0x867fe27fc2462cff8890b54dfd64e6d42a9d1ac8', cvxSTGFRAXBP_Rewarder: '0xAa57A289Bb22a1A0C583db306F6566AE2c0CAf21', - cvxtricryptoFRAX: "0xa0821fDc8d62413757B9da2357b0e5371f45335e", - cvxtricryptoFRAX_Rewarder: "0x4af50A690062970DAf1d2f0Fa9042C6f5a5495E3", - cvxtriSDT: "0x5C2c6E21e141Dd3D13C34754A20d620A1bb731B5", - cvxtriSDT_Rewarder: "0x1f2a117314e6e8655E0A1C97669b7B836e2cDb91", + cvxtricryptoFRAX: '0xa0821fDc8d62413757B9da2357b0e5371f45335e', + cvxtricryptoFRAX_Rewarder: '0x4af50A690062970DAf1d2f0Fa9042C6f5a5495E3', + cvxtriSDT: '0x5C2c6E21e141Dd3D13C34754A20d620A1bb731B5', + cvxtriSDT_Rewarder: '0x1f2a117314e6e8655E0A1C97669b7B836e2cDb91', cvxTUSDFRAXBP: '0x33baeDa08b8afACc4d3d07cf31d49FC1F1f3E893', cvxTUSDFRAXBP_Rewarder: '0x4a744870fD705971c8c00aC510eAc2206C93d5bb', cvxUSDDFRAXBP: '0x4606326b4Db89373F5377C316d3b0F6e55Bc6A20', @@ -2656,10 +2663,10 @@ export const CONTRACT_ADDRESSES = { cvxfrxETHcbETH_Rewarder: '0x0080d49D4a4921dF0F3853c5e4533462A51fbb29', cvxfrxETHmsETH: '0x29889a5fE8e467da8af697C5f1eB901F4911Ab50', cvxfrxETHmsETH_Rewarder: '0x15507737f44446EB0A86147E2C72Aa6A111A64B2', - cvxfrxETHpETH: '0x1941da8D12A6B39B76bd54c865c8cD3a4553E9C3', - cvxfrxETHpETH_Rewarder: '0x42aaC689261723d06d2a8f356448bd8249f831Bc', cvxfrxETHpxETH: '0xDE183818eb02AfEa367C1AAFF1BFdeDecE6B2B05', cvxfrxETHpxETH_Rewarder: '0x72b99E2cf3f9A2bbDA1Cc76894E4554d7aA8FE2E', + cvxfrxETHpETH: '0x1941da8D12A6B39B76bd54c865c8cD3a4553E9C3', + cvxfrxETHpETH_Rewarder: '0x42aaC689261723d06d2a8f356448bd8249f831Bc', cvxfrxETHrETH: '0xeEC515BE690BF445c8C4d1625FD82FA75Bc38bf6', cvxfrxETHrETH_Rewarder: '0x84754821b5484A69DB3164eF4eDC5A5657318039', cvxfrxETHrETH_StaFi: '0x02a2206268b49A9b3ee5DD51577E5bDa0072d5F1', @@ -2829,10 +2836,10 @@ export const CONTRACT_ADDRESSES = { stkcvxswETHfrxETH: '0xa3ae006Cc863423F690ca01C2a8F692B97c93c3b', swETHfrxETH: '0xe49addc2d1a131c6b8145f0eba1c946b7198e0ba', swETHfrxETH_Pool: '0x67e0bdbe0a2c5999a60d048f50e794218056b767', - tricryptoFRAX: "0x4d1941a887ec788f059b3bfcc8ee1e97b968825b", - tricryptoFRAX_Gauge: "0x4b43feab8f5ccd38ac0831dd7ec797330114f058", - triSDT: "0x954313005c56b555bdc41b84d6c63b69049d7847", - triSDT_Gauge: "0x2dd2b7e07dd433b758b98a3889a63cbf48ef0d99", + tricryptoFRAX: '0x4d1941a887ec788f059b3bfcc8ee1e97b968825b', + tricryptoFRAX_Gauge: '0x4b43feab8f5ccd38ac0831dd7ec797330114f058', + triSDT: '0x954313005c56b555bdc41b84d6c63b69049d7847', + triSDT_Gauge: '0x2dd2b7e07dd433b758b98a3889a63cbf48ef0d99', tFRAX: '0x94671a3cee8c7a12ea72602978d1bb84e920efb2', tFXS: '0xadf15ec41689fc5b6dca0db7c53c9bfe7981e655', veCRV: '0x5f3b5DfEb7B28CDbD7FAba78963EE202a494e2A2', @@ -2894,7 +2901,8 @@ export const CONTRACT_ADDRESSES = { pair_tokens: { 'Aave aFRAX': '0xd4937682df3C8aEF4FE912A96A74121C0829E664', 'Angle FRAX/agEUR Staking': '0xb3b209bb213a5da5b947c56f2c770b3e1015f1fe', - 'Balancer frxETH-pxETH Gauge': '0xA1D5B81d0024809FAA278Ab72fe3D2FB467Dd28b', + 'Aura frxETH-pxETH Deposit': '0x4a4eF6Be54d2666A6D56cf861de7AB3D150a20b6', + 'Balancer frxETH-pxETH Gauge [Deprecated]': '0xA1D5B81d0024809FAA278Ab72fe3D2FB467Dd28b', 'Balancer sfrxETH-stETH-rETH-BPT': '0x8e85e97ed19C0fa13B2549309965291fbbc0048b', 'Bunni FRAX/USDC Gauge': '0x471A34823DDd9506fe8dFD6BC5c2890e4114Fafe', 'Bunni frxETH/WETH Gauge': '0x4Bf0082080d937897330BAB735c2Baa99FF16F19', @@ -3063,7 +3071,8 @@ export const CONTRACT_ADDRESSES = { staking_contracts: { 'Aave aFRAX': '0x02577b426F223A6B4f2351315A19ecD6F357d65c', 'Angle FRAX/agEUR Staking': '0xb40432243E4F317cE287398e72Ab8f0312fc2FE8', - 'Balancer frxETH-pxETH Gauge': '0x1e64E373c143810524BDb1Ac8Dce35977d12e55d', + 'Aura frxETH-pxETH Deposit': '0x60aaA9b33e712A76F9421E46a75ec47fBDc8d4CB', + 'Balancer frxETH-pxETH Gauge [Deprecated]': '0x1e64E373c143810524BDb1Ac8Dce35977d12e55d', 'Balancer sfrxETH-stETH-rETH-BPT': '0x3F0FB52648Eb3981EA598716b7320081d1c8Ba1a', 'Bunni FRAX/USDC Gauge': '0x50B4cDb17D3e10C9BC88b3744F3fD7c25695EEE7', 'Bunni frxETH/WETH Gauge': '0xcbcCBA2FA84606Df153B593dD01c37a50ac8427C', @@ -3276,9 +3285,9 @@ export const CONTRACT_ADDRESSES = { }, middleman_gauges: { "Balancer frxETH-bb-a-WETH Gauge": "0xE3f4e2b79f1a8bf3b14d9100323Fca24D923f796", - "Convex FRAXBP [Arbitrum]": "0x636A9d7686bFA0a2ddd93b37A1E33bCdE6C31e8D", - "Convex FRAX/FXB_20241231 [Arbitrum]": "0xba1ED260F9a81088Ecb7602F790a67C773817BDA", - "Convex FRAX/FXB_20261231 [Arbitrum]": "0x2A8499c4a86F7c07e311c73E36575A0Dc2D362C3", + "Convex FRAXBP [Arbitrum]": "0x636A9d7686bFA0a2ddd93b37A1E33bCdE6C31e8D", // Arbitrum + "Convex FRAX/FXB_20241231 [Arbitrum]": "0xba1ED260F9a81088Ecb7602F790a67C773817BDA", // Arbitrum + "Convex FRAX/FXB_20261231 [Arbitrum]": "0x2A8499c4a86F7c07e311c73E36575A0Dc2D362C3", // Arbitrum "Convex frxETH/WETH [Arbitrum]": "0x5608051D98377419d7D861531728DFB869dDc054", "Convex USD+FRAXBP": "0x840f20ffED887c61435E81fd1231CB923df39d3d", "Curve VSTFRAX-f": "0x127963A74c07f72D862F2Bdc225226c3251BD117", // Arbitrum @@ -4237,6 +4246,87 @@ export const CONTRACT_ADDRESSES = { pair_tokens: {}, staking_contracts: {}, }, + fraxtal: { + chain_id: 252, + main: { + FRAX: "0xfc00000000000000000000000000000000000001", + FXS: "0xfc00000000000000000000000000000000000002", + }, + canonicals: { + FRAX: "0xfc00000000000000000000000000000000000001", + FXS: "0xfc00000000000000000000000000000000000002", + FPI: "0xfc00000000000000000000000000000000000003", + FPIS: "0xfc00000000000000000000000000000000000004", + sfrxETH: "0xfc00000000000000000000000000000000000005", + wfrxETH: "0xfc00000000000000000000000000000000000006", + frxBTC: "0xfc00000000000000000000000000000000000007", + sFRAX: "0xfc00000000000000000000000000000000000008", + }, + bridge_tokens: {}, + collaterals: { + USDC: '', + }, + system: { + + }, + bridges: {}, + bridge_backers: {}, + oracles: { + single_assets: { + FRAX: '', + FXS: '', + USDC: '', + }, + cross_chain_oracle: '', + }, + oracles_other: { + combo_oracle: '', + combo_oracle_univ2_univ3: '', + }, + fraxferry: { + fraxferry_v2__ethereum_fraxtal__FRAX__FXTL_SIDE: "0x00160baF84b3D2014837cc12e838ea399f8b8478", + fraxferry_v2__ethereum_fraxtal__FXS__FXTL_SIDE: "0x24e927daC110Aab7189a4F864d41680e4F7865FB", + fraxferry_v2__ethereum_fraxtal__FPI__FXTL_SIDE: "0xEcf63fd1A839fF54949eB786693237bEEC59C6e7", + fraxferry_v2__ethereum_fraxtal__FPIS__FXTL_SIDE: "0xcD3A040f05769d7628582B403063e61B7D212F91", + fraxferry_v2__ethereum_fraxtal__sfrxETH__FXTL_SIDE: "0x67c6A8A715fc726ffD0A40588701813d9eC04d9C", + fraxferry_v2__ethereum_fraxtal__sFRAX__FXTL_SIDE: "0x08Be8BaAb62fB0A363f38C82Ee2320A36b72f2DB", + captain: "0xBB437059584e30598b3AF0154472E47E6e2a45B9", + first_officer: "0xBB437059584e30598b3AF0154472E47E6e2a45B9", + crewmember: "0xBB437059584e30598b3AF0154472E47E6e2a45B9", + }, + multisigs: { + Comptrollers: '0xC4EB45d80DC1F079045E75D5d55de8eD1c1090E6', + FPI_Comptroller: '0xC4EB45d80DC1F079045E75D5d55de8eD1c1090E6', // Same as normal comptroller + }, + uniswap: { + v2_router: "0x0000000000000000000000000000000000000000", + v3_factory: "0x0000000000000000000000000000000000000000", + v3_nft_manager: "0x0000000000000000000000000000000000000000", + v3_router: "0x0000000000000000000000000000000000000000", + fraxswap_factory_v2: "0xE30521fe7f3bEB6Ad556887b50739d6C7CA667E6", + fraxswap_router_v2: "0x2Dd1B4D4548aCCeA497050619965f91f78b3b532", + fraxswap_router_multi_hop: '0x67E04873691258950299Bd8610403D69bA0A1e10', + }, + amos: {}, + reward_tokens: { + + }, + vamms: {}, + pair_tokens: { + "Fraxswap V2 FRAX/FPI [Fraxtal]": "0x0EFFABede4e31101DE5209096611D073981A817b", + "Fraxswap V2 FRAX/FPIS [Fraxtal]": "0x78d264E25781f31343352A0f91875B655c79B843", + "Fraxswap V2 FRAX/sfrxETH [Fraxtal]": "0xEBD293F2173082320d88533316F5964298dE316E", + "Fraxswap V2 FRAX/FXS [Fraxtal]": "0xb4dA8dA10ffF1F6127ab71395053Aa1d499b503F", + "Fraxswap V2 FRAX/wfrxETH [Fraxtal]": "0x4527bcEd9d41706D1436507e9a6e354d3FF44ff9", + }, + staking_contracts: { + // "Fraxswap V2 FRAX/FPI [Fraxtal]": "", + // "Fraxswap V2 FRAX/FPIS [Fraxtal]": "", + // "Fraxswap V2 FRAX/sfrxETH [Fraxtal]": "", + "Fraxswap V2 FRAX/FXS [Fraxtal]": "0x8fE4C7F2eF79AEDd8A6e40398a17ed4DaE18Ee25", + "Fraxswap V2 FRAX/wfrxETH [Fraxtal]": "0xfbf1d253FcAA3cE13187dBD5B8610C15Cc8241c7", + }, + }, fuse: { chain_id: 122, main: { From b799d54be18380d989181685623bdddf4432a275 Mon Sep 17 00:00:00 2001 From: travis Date: Sat, 2 Mar 2024 13:15:19 -0700 Subject: [PATCH 33/37] periodic update --- package-lock.json | 88 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 88 insertions(+) diff --git a/package-lock.json b/package-lock.json index febf1e95..217ac854 100644 --- a/package-lock.json +++ b/package-lock.json @@ -62,6 +62,7 @@ "chai": "^4.3.8", "chai-almost": "^1.0.1", "ethers": "^6.9.2", + "ethers-v5": "npm:ethers@5.7.2", "hardhat": "^2.19.4", "hardhat-deploy": "^0.11.45", "json-loader": "^0.5.7" @@ -7957,6 +7958,55 @@ "node": ">=14.0.0" } }, + "node_modules/ethers-v5": { + "name": "ethers", + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/ethers/-/ethers-5.7.2.tgz", + "integrity": "sha512-wswUsmWo1aOK8rR7DIKiWSw9DbLWe6x98Jrn8wcTflTVvaXhAMaB5zGAXy0GYQEQp9iO1iSHWVyARQm11zUtyg==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "dependencies": { + "@ethersproject/abi": "5.7.0", + "@ethersproject/abstract-provider": "5.7.0", + "@ethersproject/abstract-signer": "5.7.0", + "@ethersproject/address": "5.7.0", + "@ethersproject/base64": "5.7.0", + "@ethersproject/basex": "5.7.0", + "@ethersproject/bignumber": "5.7.0", + "@ethersproject/bytes": "5.7.0", + "@ethersproject/constants": "5.7.0", + "@ethersproject/contracts": "5.7.0", + "@ethersproject/hash": "5.7.0", + "@ethersproject/hdnode": "5.7.0", + "@ethersproject/json-wallets": "5.7.0", + "@ethersproject/keccak256": "5.7.0", + "@ethersproject/logger": "5.7.0", + "@ethersproject/networks": "5.7.1", + "@ethersproject/pbkdf2": "5.7.0", + "@ethersproject/properties": "5.7.0", + "@ethersproject/providers": "5.7.2", + "@ethersproject/random": "5.7.0", + "@ethersproject/rlp": "5.7.0", + "@ethersproject/sha2": "5.7.0", + "@ethersproject/signing-key": "5.7.0", + "@ethersproject/solidity": "5.7.0", + "@ethersproject/strings": "5.7.0", + "@ethersproject/transactions": "5.7.0", + "@ethersproject/units": "5.7.0", + "@ethersproject/wallet": "5.7.0", + "@ethersproject/web": "5.7.1", + "@ethersproject/wordlists": "5.7.0" + } + }, "node_modules/ethers/node_modules/@noble/curves": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/@noble/curves/-/curves-1.2.0.tgz", @@ -22518,6 +22568,44 @@ } } }, + "ethers-v5": { + "version": "npm:ethers@5.7.2", + "resolved": "https://registry.npmjs.org/ethers/-/ethers-5.7.2.tgz", + "integrity": "sha512-wswUsmWo1aOK8rR7DIKiWSw9DbLWe6x98Jrn8wcTflTVvaXhAMaB5zGAXy0GYQEQp9iO1iSHWVyARQm11zUtyg==", + "dev": true, + "requires": { + "@ethersproject/abi": "5.7.0", + "@ethersproject/abstract-provider": "5.7.0", + "@ethersproject/abstract-signer": "5.7.0", + "@ethersproject/address": "5.7.0", + "@ethersproject/base64": "5.7.0", + "@ethersproject/basex": "5.7.0", + "@ethersproject/bignumber": "5.7.0", + "@ethersproject/bytes": "5.7.0", + "@ethersproject/constants": "5.7.0", + "@ethersproject/contracts": "5.7.0", + "@ethersproject/hash": "5.7.0", + "@ethersproject/hdnode": "5.7.0", + "@ethersproject/json-wallets": "5.7.0", + "@ethersproject/keccak256": "5.7.0", + "@ethersproject/logger": "5.7.0", + "@ethersproject/networks": "5.7.1", + "@ethersproject/pbkdf2": "5.7.0", + "@ethersproject/properties": "5.7.0", + "@ethersproject/providers": "5.7.2", + "@ethersproject/random": "5.7.0", + "@ethersproject/rlp": "5.7.0", + "@ethersproject/sha2": "5.7.0", + "@ethersproject/signing-key": "5.7.0", + "@ethersproject/solidity": "5.7.0", + "@ethersproject/strings": "5.7.0", + "@ethersproject/transactions": "5.7.0", + "@ethersproject/units": "5.7.0", + "@ethersproject/wallet": "5.7.0", + "@ethersproject/web": "5.7.1", + "@ethersproject/wordlists": "5.7.0" + } + }, "ethjs-abi": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/ethjs-abi/-/ethjs-abi-0.2.1.tgz", From c146dbd037abf6ec30745f570ceb4e17acd848f3 Mon Sep 17 00:00:00 2001 From: travis Date: Mon, 6 May 2024 10:15:49 -0700 Subject: [PATCH 34/37] periodic update --- ...it - April 2024 - Frax Security Cartel.pdf | Bin 0 -> 456191 bytes .../contracts/Curve/FraxMiddlemanGaugeV3.sol | 193 ++++++++++++++++++ .../contracts/ERC20/ERC20PermissionedMint.sol | 2 +- .../ERC20/ERC20PermitPermissionedMint.sol | 2 +- .../ERC20PermitPermissionedOptiMintable.sol | 2 +- src/hardhat/contracts/ERC20/IwfrxETH.sol | 20 ++ .../contracts/FraxETH/frxETHMinter.sol.old | 2 +- .../Fraxswap/periphery/FraxswapRouter.sol | 5 +- .../libraries/FraxswapRouterLibrary.sol | 38 +++- .../curve/ICurveStableSwapMetaNG.sol | 73 +++++++ .../curve/ICurveTwocryptoOptimized.sol | 74 +++++++ .../contracts/Staking/FLETwammGauge.sol | 170 +++++++++++++++ .../Staking/FraxCrossChainFarmV4_ERC20.sol | 91 ++++++--- .../Staking/FraxUnifiedFarmTemplate.sol | 44 ++-- .../Staking/FraxUnifiedFarm_ERC20.sol | 41 ++-- ...ifiedFarm_ERC20_Convex_FRAXBP_Volatile.sol | 6 +- .../FraxUnifiedFarm_ERC20_Convex_Generic.sol | 45 ++-- .../FraxUnifiedFarm_ERC20_Convex_frxETH.sol | 21 +- .../Variants/FraxUnifiedFarm_ERC20_Other.sol | 32 +-- .../Script_Constants.js | 10 +- .../Step_1_Vault_Gauge_Proxy.json | 2 +- .../Step_2_CRVCVXDistro_Contracts.json | 2 +- .../Step_3_RewDist_Seeding_Sync.json | 2 +- .../Frax_Comptroller_Routine/Sunday_Part_1.js | 186 +++++++++++------ .../Sunday_Part_1.json | 2 +- src/hardhat/hardhat.config.js | 4 +- ...FraxUnifiedFarm_ERC20_Convex_frxETH_V2.sol | 6 +- src/types/constants.ts | 74 ++++++- 28 files changed, 952 insertions(+), 197 deletions(-) create mode 100644 src/audits/Fraxtal Audit - April 2024 - Frax Security Cartel.pdf create mode 100755 src/hardhat/contracts/Curve/FraxMiddlemanGaugeV3.sol create mode 100644 src/hardhat/contracts/ERC20/IwfrxETH.sol create mode 100644 src/hardhat/contracts/Misc_AMOs/curve/ICurveStableSwapMetaNG.sol create mode 100644 src/hardhat/contracts/Misc_AMOs/curve/ICurveTwocryptoOptimized.sol create mode 100644 src/hardhat/contracts/Staking/FLETwammGauge.sol diff --git a/src/audits/Fraxtal Audit - April 2024 - Frax Security Cartel.pdf b/src/audits/Fraxtal Audit - April 2024 - Frax Security Cartel.pdf new file mode 100644 index 0000000000000000000000000000000000000000..37ee8eaf9b4c96581613bd63140cef8ac9608ed9 GIT binary patch literal 456191 zcmeFa2|U!__diZW$PyKieaUXjK4XnYvXp&^7-K~Coh(uINFrp-UfGu{p|qf~wp)@t zl}MDO#QzR?zYD$Jz2BeuJig!G|67l0nwfiF=iYnHx#v93g71*RK2fL`l8UeWaeW6B zf>WH+-s~8aloS<2+tY!-3DG}jc8q{`p@L|+nz<~!v(MhimI@*-Z|}i*SR8yGD!%l` zmSD`w-OOILk&(d??Kb~;q zdtlDB;{bg>Bt)FJwct0ADCnQB)xmo*GMxX>T*Lz-F6iIRwKASa*UIaaxxlpY_O9T} zzPZ z|5vMN=zq`hfc`eqV`=7}WNM&6f5MtZ0;Mc2jzRz>vtmrIyv6y)3!>uw<3DR&{1ZLC zGWeS@KVxctGi>jFXleh&R4csyv$C^ls+HmESxevPaF`fUTpWh}!{7!V{=J>;;^g`d z%xvhlSNiW&;V|O5e~SuVn)&~@{jaRuzf;MpSoGVeR@n7-b30TFh7^aPekZrXVE;9P z1qT0Z+)kYN|G52I7F~J$FIjYD_<9QY9}3Qju&g)Lce;J)I)x#AE4P0Osr_c%PBfZ+ zk8c0g9Qzyd{QqG~=CAnbKVZ=n&i`K|IDcFda4{$h3B&%K1Odieg+%@{3kmk$!)?G~ zewP$|Yv%op6#Xwp*Tuzv+FSku6z-B9{_dThWpxl9`7?X~e2I1D1*i4@4BieWYM2$P z;`d$_@ZW~zEX};Ki2ujg{44XVXK4K0g|LRTzn$xM3Cp_kerFQ>H^NFFYV}`Z^WWwH z!2f{<@E>UN{}GVocWm>2+8o4Ce+EDp+ zuJ6R>U(fj6EI$^)|GG9u{Asj+L=jGilD)P)$i3h^j94-;K-|#Eg(xm7Nd<^+73bF! z7B~|9(WVr~K=%;dhRx^Bxqu zVjry$><7apNGO6S7eXMR=R-{W;nAL(jr0fa-JBPs{GxsT)~OHXD1<|5(rz!E5-mnr z0i4VlXs{6N7+?VXz>r=@8BdOu&gCx_Fx3B%dI@RiEFmlfHo=ClV=!!ooSxU@j<# z9oo6t*nFF}g7_A6Sv?fBJQRr%!ywm={Kho-E+n&LM}Q0&oD0aWvg2G@+EQMPl9mfd zwOUHH(c~niae=ig*?t%}Ct?Ya0TO`0aw3-EOhh?YopA%vCV04fmv@8tcIhiwURZIE z)kFOC_gP+JhMi82_HXxT(|bj8*+S%T{h z&tJtBN07p2x%iZFeOhZrQoNp=fg)K4hy5S*bdhX35I$ZW&(cI&>*eWykn!+6V7!sD zTX7T1p!G(%U3+iu?Z}qtrf1=39+XNvT!-el?%4eB6T-J=aYJ%`O(FjC8M;{?HvACx zuBtsRw(0Yv9-0zKWSUR$)K{BzV;|}48>4wUk<0a2$>^QTC%%r`UtZo;3eoK5x(?lN zC#XZO_ohYf226Z>u%0KfVqd#sv(^>~3!I!eIo+{?No1XOPS%AR(jjHSi}tE^o9!BT z*3H@5J9LfqB+1^A09AIF?KRWXf;lx_Sysb4dAH&f1z=OR6jX|A=_)XHgwhB=OY8KHco(T=Ft}NA86Xl_RPG5K?YwJtzY;DdPvE4VO2Fgzd+@Px%Q$ZUl)0m3(#OWlEi&$`? zZj=e)38?T=tApjnug00XB=%YlUl(>haW;)$b*AF%OS|Nkjfzr{fqSVLn8o6vwzBKK z;&FT1v<<58K<3!fums#E>JZyj{W!jx+g!Y-@&k?F0#(7fIs;+5N;ogGm33gNLU&hW zeG<`cdEEIXAo{e*7Lut8ftQ)z?BWt-#vz(i7`Jw6FK~Ff7{$p3>+$qc&6RF=V4zy> z`{3{;d~?_($lZenj!J92dz7zHLSB}Ev$^VUJuC;kOF>3%{0It-3(bornTXnSmMxS_ zYKOyt8~2Z)RIXEJ`h^%W7wM!;*TcLf<=K-Ex8}~s3hlpgNlCil!%>nGc%dYjEr*I7 z?nyNm;hX#i@#HTaqNA$ghIusxICt;TvvfX5_MjCw&q7*ipL!3%W<}m)}3}u%AF%a z^kb=^r`a73*D8E)Gd0ET-(tkQpJcXN-aP~uEQnw@poXJDiyO4t1 zZAv2t&eI%K;oPIUKQ2;Ps-YKtr|0}$R>AEDxedrJ80@yFJCVNgj_|~+_mQm6#Ys;` zO}x(K$mO+q-4+iivC?8C&#z@Ar`@i;qw!%uMwdXcliOl{W5bBh+bNG%YMVAE*s!UV z>1HWh(M&l^Qqmh3e^390q2`8Z3m=}6r*8~3j3pZxxh#CGNssNjpi4@R4~OiyEWy@_ zd!(nUJR8HY-A;4g)rV8Cg9^OjQS9_jAGsk}qKq8}cbSfTz!hw{98}h?8KY1peV}J% zKWq0LZ3E3*Tb*N8(AQ7jzLaM|o7H1j*Ie1G^8R`Mv*R*+)hCk+oRv@>0Z^+%K~|`-l%<4pqD8 zO5CSgIY%pw#cRPrt3!6 z6vKgdRr{FAtIxMOZ4wQkTL{Zyde#!<=B=jXP8*|QuFHG2FRsOGzA8*dCpPXyW6Lv+ zkLf#(*i>i0HqU!oc;{B)MQ5l+69q0<<=*ZZt(PeF-ONnU8TrAe7MpaedZuf56TzCd zUG%+)QbPs#4hi8?2U21utPrwIyA`*`Jn%|m!#~Z5Y|2QAM94^V;7*wC?;yoh-1$hI z$0uZK@?tXAb#G03hSCv>qUpZsQP`#?p{&6!mrI(*58n1RhQ_h81vNKOchQ(uBV!yd zI4Y#Pp3J$XN@EL_y*I4Wx91N0{2rKGiRMdn`}48y(%1x} z9Xijp9~JrVjMg-F?&ZT?1z&ZuYPpZjH?VR#dQRjRmiPKr z@!Aa^N0Fwyxtp-1lj~Ta%&hHjLRzbo+MR&$w9*d4`5AS~K9P~a=hBTC-uVI(;?vEy z4d`?EH_TVhlO)q3sLw5uyt^UHu+~%p_x@^hW0k42biIFPDq;SOsRWU;v$F@5*I`b? z5@rpuK8Pk1Cvw^DMlRbZ$Ysj~Ni-?IXG@MECvw>^0ao|Yn@gq_Cvtff)bcE-}PNDwJTL&e45z-NcTKy(AF5Df!pvp5EPO>W7c`^L2qa0XfZAX{AwDo8Zw{`75@ zPT<#2g+z;CFlbH`79l1Mb_$AyilK<<-r{gEj5ut4s$9+fAZ#sZ#6A4Aq@e+cAX5v9 z78irTQJg3YS`3MR|2=82)w@RIj$ca}3Y;n6ZYUfCr~tF0!0y2?h`%QdzM8bP!u%hy z848XNg9Cp63jPIN6$*h6L!y4LX#oCO9-NkF^>@IDHL z0sHm0Tn1aqW#4*Uzl1a-77Mrv93=+$i(tQ?Ffno15BBR%{)dUJ*)*b>`87=TRbe2} zAU6!CSEx8t3=W(#BnBadL8I4avad(EhQEkf@7GZE^(c|Rv4w(@!~$Uy#{f-_5d*qo zeWL!{FCZqXIiIMAe+^|Am>3r5btD`sh5^?K0wFGj0?Cm`Bn&9rAM6((?K|q$()a5w zfR&wt!NpKSA;6%()`9bc1C#;zx2y(V!)i-6=&#*6ad4V&EGHa_A#NGC;;~|I?2q-? zw_CSXNSChmUrHYW3l$RwW(@++1pppkiNJwY`ytbPPu^-tT{1a-4S8Qr7J&wm2}5$i z!~w^FY)b?*!bHdSZF)Xl05J+%+A%9>M0ph-=Z_UyEy6a(O|6nLF7=Q{9;Kl-} z(Ex@7`w9Cw$$+mt-(Po0tk5Tp6+;u@KNL`Uz(hvCz}198{*-9I#Sp8M@{+0jYtHwp zXuz>RQo$Vt?k*@Wf)V0KF(l?Eu8TF4{qpMq4$Mm!@E<^IKnx0W3NV_);IN;Q46vBh zJNN6Zi?1gO2R0@Q+^`5Z3K(>VB?%G#ktMfEG7xL-j3s~R*PQGMeF!x09MFI+Kp$`h ziTenH5fS%w{FycMt=4=?j@+-IZ-w)K#3Hc3-@*Wi1uh{Rm<8A$TLXXSWaO%oUGgn| z4P`4k2W(6j2z ziv!&U`|;L&Pv2^tyyT7lTKdpH=K%u`c+S}6 z7+>WB1_zQ#H1<$pSYQ#sfQf*`{;YVQR+IP3FAf-#=!b#h1$YDkKqfF4xImCUD<0_8 z^!@US1B%6f&?7MB!375ecP|V8PYCpn{fzI$7qg1KC5Y_Tu-{k33V5mx6a_Kj zCD>LI^y~oPvkrpE=5O)TE$I zrdrioWpe?CLdw7kgc`XB)fyQEJ~uLa!>@7uGv& zGj+|>80|Pi?&$ddi!+lQtUvsLdfUX&oz*2(cul&Ifa$~hMO$<;&wX?(J=!QCQNCFz z*lo*ktLl7(3|!+a>P6pPw^Ll9(+zcJslyF8dautf@cCFtT03bJdz~m=Ff@-c@X#+O z_0qjqPu1gnzqI5lq?{f@+*0rPB6kGSNYy zx{aeCdrx9&_mt(wyAo^$i+iHCG_i~`R0cUUjlO+xg=I#nH=KZ+80lytvl>*fHSuX1 z^mi|}_jny^Z1l+Z`l)Ig$%~e~yPNj5>khKOpV>C{JKV}R{#Xe8hPUzWA4_?rkz;nsrs(Qyl5@jH`SZISPRngqgoZo5k}KbeN!m?{ z(J#Eoohq`sx3TZLijlL{|{_%YUB_v6?*HX2^C!!n6KB%|`QMvS0OG1;Y^R3sWO@T$h9bZY^2-E58ymqA=hAy2hlj9s=mP4Lzztp^~(CLnJy1I#J z>uXG3zXV^ROF{>0;Lz+RW-S4@fM#f9LDCJflN7f@q9;bqC}vg`OY%;jy)vP$Mw#rD z8%D-NbDcLKLerc@M(TsM<#{x`9g=%+?si1L*p@S%KTy@DvGx6KrXkXY2(bU+WuPHn_&@4HX==n|K3?ncYZWPL}Kw}+Zr z@f~7YumNdfriK1OmTgU!ONBSx&GhBzz4u9aZ?-ANo}mIZ;W@j^eEu_P?=@z(U8Tk!M)d``Z9(!q$~hg=5EZCfTe=SszQaGTZb zFRm5rjh&0vY2s<0^Q-o~lk8x=Sd+n_ZWjfwDj!=YQYwpGFt4eg;owDs zrw>Iqc#V2d^I`8V?iJ!>*k18K%U{nK;Te`53Tdz4mvr>$HG84LO3QZxDX#Fj_+sm! zgZ5$RW8svQR$kjY{Q*1 z9S7a<4M!2)9#MnR_3bBz4$W{elu)Hukvumy`4+LXt2${2ii1=_A`c#iSJ zb;=RU>@I6c+7I_r(b_2ve1Q04FXK0`@vyiN7WZ|iC40>)kd{Q=6ycy!>QfU~D9hY2>B$}f{TL)j^F zDztB_t}WPgMj7R`El3=;qq@3FuKPxQ+mXezJXQf0IxF*9p6e`_i|9$7*@C>pQjVb$ zErIOh3_TPQ+mG3$%;J?hQzs|3u^4`Ez8!1AJqnriDebGtqc}Ir<}|K=s?D)<^Vzzk zIBeUlYeH~iE73W_y}rVVtdQik~cat!&~$nf&mbq&w;V!^~d zSw!DO6Bx3f6&M!8G66o0LI6h;3w#IgF9N`JC}0}{cM*K=Yb!ShF}e(qlag9$^#+k! ziU&iqAUc}L#6JR-E-ntv5)g=m6V5}-!paV3hbKS;zY7*GFYaFxiWCE$I}*Uh2vBhY zg9G}2d5HwESi};3_YdiGb|B!K%&c6*@bBC$Q1XmA>f={-0khnSMTf(Bcy*%F#@0~pvT4^B!dtiKv}@n z{tA+vtZWFLmiELZeU`4ytEgV5{OfC6_a~@cPGUd+Fb#zMKrRPxjQ|=Bf~SCe|2f-! zyUl+|^O6AmOCE*+d;{>r3e9jhz!5+wmj^FxO#Q^{RQ-}UwB*;`ig3Vl=%8Vsu!2FQjrH7(m044%3<(i@2 zW_+ywRARJ=2;r+chxTMSg9yBp}Qzbot$ zHB}6F85n0@l5u{hr0I;iit_oPjr;vn%;o$@LyYrJ)K=$sO&B^ET*+iG4!PNUu{tN` z^Qe80nPbJ))9!j^3m*tu8~V)_Y{nT!f_%N)KYkf|GCHac$$Wp6^2vZ(wfKFy$J{V~ z4*vEiQ5nx;Ra5~JFI)^9jS99SPI&6?KJsGEjhRD3O?SPF7JNSsI%mu(OJt^Q@_)j` zC~P~gz$?-lm)UPos$Hzd;q*`wve90p<;3HbFA8KKs*IW!w}x_OLAFze1P<*8D4xhr zfY{Ak>_2`v;F({`NA{t>4HB8}CtV+96;Tjs_}}REJI+ugXbcIaQMQ z@Kv{M3^Ktl>@Mqdn5t~@Qlq>?&i0z=P1QZLu@^z~P3=xQj-c5@|3 z_9R>kmT8$pb|scq(e)U5oj4V!>pnhua+qy0`%ztuHS*%laa$d~9+$#{J@XRW@@o6Gc+2Kz<%<`20uX z;+xsiGF#X(BlC?NhI$?z)4ri3jxXEp>gI*JRA9M)RL8wrAXqU(%8Cjlyr}ym$mG2v zgqJ)+ZD$a@RK^~@Ag6^7TZiTcqR+>6ZuRtgZfx75d!OQ@gy@wWhdnd>`S$S{oQ6Wx z_X?|ey$c)sY^P?S$;tkvyy#_@C?)4jm%iF`<}t3`?R{u`R#$}dj!SJYLt&GhQfbU3*HUED?PXz_UW_5(R`3=Qy9 zkF7Kk)U|Xry!Dl@;pnmyie~X5MH``}<5o3F_jlsc_DD4;Z9O^_Rez+_fw^un-7$#H z>Wvdk#{GgQ38TdJ9&XB@*Y0_0ZLr;E_*qUV+}^8xR&Pr<uC@*cZdo!y1Ks)GEmiL!v?=K}9!kR_rxcYP_ zWnl+=PVMWIf2emeUy(tW&;Ev-b(5J|?atQTbaYyEuE6q@h^(z{@hIcns4haOiNFtv%o@w- z=M~(Ha>$#ToSb*AS$Chk z%{VS1^BI!!s(|giIhhbUV(sgk50Gyyy)D7+)O$%_ADC46j(kJ03d3n8*jP7$n8G>q9P>9# zxhJoZF>Z(_ahJHjt<(1&#fDTke*69H*!tF zu^P7BX7o-UK|-|cp_K@qaQ~>nL4$@xe_Uhn9Evl|zWMw?G2yg*pAU602`A5nQudtZ zGYNa)^4aGYL_Rge*zm|+F24vXh_R76-q30=7$*gN|8_0je@on3rzfMI3b8<&-;Kf2d^imEaaaZ zdrg|r?nuqjM?-d?%zeUkFiAnD<`h9rX{@BoWe1@pO!GEMwVQXnZl;VRGv>S= zo?mC}&0I9{HbU_8s4<mtFL5QVsvRqkU zi8Fc|BUPQ?RuLIdYcbXK;MTnZgiRMj=lcBJ-C$uC%%h%(EL@jx|2$0P{Wh03fhwAk za@X7d;S{Hc|6rq*;I{Bs`a`(P*lBWP+o!Iuvo@RA@_jmuI7b}bJcN7QdrmV_L12LF z$_so?n#ivy=6T@s9kj#+-^~3VY10Nz9$@>-O?_RH-^Mk*Io5jrNDAlclTR`4H@?4W zxNT5H`q33-VMY$ePqGP)0r&4PNhIVN-_wsgBR%qAm%eLe%ZJhU4@?wU59KdQLkw+d zOw~Af&ceH^JV~)r758HfG#&bks|)Vnl0KqV$ZI({63Vi(N;>7h4dDvI>JWBsIrg?#E==eYs)GV|S0U z>PVNY$Y%-1PY~<|uft^1Z*?zaGT}@TDD=5G4z-%PU8^b-5sCA3Lnpls_Q|lurgsOE z?tMmpQ1LREs&A#=H}m1u*w~XBg%(WD7-r8J*i7rC`ZArS-sd}{=2f(MkO4PNIfqsEhc{dfodb)>#-IFTH7x-hHpe1)8xH%)`6d5 z+q;%DLH!JBkLb4?ZSc5x%F{1%1J}VG)~TRgjXkVXKL1&E2y%Xj7{R~C9+q2U0E}Td zY5hBF;k)J*-{rUdy^FRSrpGR&{1UU#i1AYtfLH!Cws6$S#nRPm$rauQV1|8PQ3i8@ znz*~Yg?4o$!13BUFE^D04A0}P@{Ys!9%?}H9o|q=Ql)Od^^oxU)fWX;u^4dT2 z>i^kFAfTH)0b+*7Va+UHXmK3gf`CPe6D;63Gdu=nfy9_2V0e(p3CAI^D9kDc5JWb= zcc_+_?57++fCv4>(7$p3L9OcFj{K1W_$`z{^y0pwcj=)p3=(Yr+A`Q>N%);!9Edl9 zx?L#9Nd5VM}t&kIyOl5;Gj>9Y)nSskprc4Z25NlkYRbaA(L zbzR+R;KYkf>~mQBVlmr(+uAzSs@(SM?%1Fq2Mnau;nKdFo?FQdo=NX9kq=ZgFZz5q zb#rjS5h?7aH$$(c1_Q`qwlxq~lak1!c5~BiXX1T8qECJ!zy`&nv7LQn7zSxe?6l|a zJ(AM<#n2_jl8gG9Ks;RCC6i4^UbLiew5Ej#&Jt(^O>89bywIXO>y~|+I^o6Pj-eR0 zD-=;$vODtfQ}4BXv}qU+x3zHGUe5ULb+~3cMwF=(LkZtvlvh$e+918_{()!RuCp(L z<4W~|P9)X~868)Ua48cjRYPvWZ5$P96BYP^G_%>~sLa^TO=A^tw~dB1l~v95dMj&0 zhgB`J=yCVr7zHRofz*{DnwuLoaPuAug6hWiijGr|@Qqm4^nQIYBv{bVnmk4^&fC&Q(hL6TYy7QY<_az8k`48PQ?azQ$k)635TX1l^nVENdzoFe|fqnJl*z8s>wo8q^_i9DT6_vt@b23gO zvqms+@$!i1=S9BQWLj}>1HPv3!Uc5&2YSwq1*WLG08SWrS&u&*$QiR+jx}miJUNA2 z>dCub*kmA2Z+euBNXJ$w!QZ`?n$hwxr;?&i&?<_4Kxd<`lxpAFwotX-F=eXZ97PIO znh537>GR6zBo|NJsw19;uH`h&L_zqY(9P~BXtiMT#n}IhrW|ZBKbG!E02F>Y1 zq@SpQqA#&8k_;*D31@rUrbq36=8`WtZ&l8%2`FZA@B1A=)p98hPU-d1H{_knC`~Mh zW>DXe;jd7yeOH4Hcd}?xOVQ3c26+S4P(S*6J1nuA17jVVzs!#JIK)N;I171Q>d)hq z-_qbEP{K|6ajWzK>D}n!BF*AMXk%!AXTm3DsZMD=_6>Jgspv?x+5I=W=DzT+j*?_u zymL>|X)>qpQqtp|+6ktEXKHjX?&2OU4c6E;%I13?d@q)kKDq8|%|qbuc4fD2JV(wR zEtDQlh0qtQj=k}mCiOj?SjRk6xQ0tL-7#~BDpsEZL)wE#~KDyS_<%(a|U48oTxrkhV7uzR_veWcr@mocth}t8cO}ivOW48+`AZdUGHbLq-s$YEzGLBETo@Y9Wuoue8SYt1@5GQGBUbQq zt36X-;IsH5{0mdfglkvZho5FlF*8fqb7|yq@i3xJz>4N=gc`%QIb5J*)9MLL(tod( zcfs+l^>FKzu`rjo@k*)Ig4!hR;8Pm|YFz?s^BT40<4*2RYs`S=q&a#N-)9n5xh>&i z&+#^Gui0dBtzeelCL{6FjV}e%f@U#W5^G#w$@&pN6Yy*v#IqyRJ7V@z_ynJ#F=4LA z*&QBe<&#kHQKW&Nw<#%lPj$=n_ks{~H)9~loZzYX4|k633a_UYZ)3gXe;}cvS%$T_ z^P+7`DKs^2gIP{xdwnupID)ATm7CYYaDPTGr(i=Fx9($DzZ1;fY5(1jYMzVdWp%IV z6Nc5*M?LUt-F-FpIb2C3{clc7-61j3^@{4Yk(qo`BK%=zxdRJVzlDl-BHQA;Q}07F zTk2NV(t9qQXR?tal%JpA>*6ttqz6fMZCk)l2CBF+*inz>YTbQLe=)BWuVOf&W`WB( zKlfDVkVZ{KpSn~>kHhI;+Ohg8B|f^Bqb>y+LK6ec35P2~C-MsJNiq%yG!EQ%BSF3V zSO)PEQO$kNLRaE?cUP-&W`~EV|4~9D>$U?2HLOW{40ty@N_XT-oL=FyTq9$K3sN`DZr<2_FcuO-@a1yR=7oZ-MCh=K@drwH%&zGTc*{kZPDVCOsiQ z6X)#Jp<@@f_3n=JAq(Dg=FHLBo3Ye~Y190i z5DWRzjy)DM$5>Uo%}+j-y!BbF?mE`N{g&kmT2`%wDB0J^41%X(NZn@Waq5|ct=R+# z{nU`U2LqmuwzkYtcOU9{+xr;Xs1Gf^oxm+?f=%VSO`t8-GN*pD$vDfgKGFu?)nPIU z&!lO3VdHFlx8Q-J+NX^U`Q)EAV5oLAr(q#InHx=nHp|>)zh-#2{Q5`OHDT3|*C7u1 zjlwBT7uhl{?dI;pJu%HO`=TCbe(|}HH({E^{IV^!#f>7lYuK~7u6NY2@@n-Qqeq#| z^y~5PDyPqLX|c%8|9 zDz||q{*5&0Hie6dI<@;|-SEA^EQyTev?Qk6Qg0SY9?Z#}Hl5_zsu*x4!a*?WqzRu{ zi|zD{8~1iQhK%jJS2F&}SnnLEhfXU~?qhAVX}0qR@>spQ{UwiTaK10a-K;iCK}uze zt~~R+U{ECdcE3r7KXXtZ8zXzsp;(H$0mjYUWZ6a-8D|Ad23HVjcg{&hrdN)oE&Y+v zlCzArPxxW(^#vJ7^4+|+(=ENR=g{E&>UM@19fB5fnns!ld!D`Qo} zLU?`U*O4E-^$776NE%iGVc2n5qLqE z=8F)Wjmz1jkYaDns{V!WfybLR)q7+FhddA3Fui$-iHXNW!|+)Mwz$`^tsOu6*lTO_ z2Z5N=!YrG|Cr!QKqn+AEdelzdN}u2#G*x<415!AuZtL4ODc#;X zS>MmpxtWlCb#Fmgi9SECn^$A2F(j;98**X(VZOX=XB4q=d z5JqvxP$uuRW*)(*Z@-DKLcN|LJTiTA_<;;*5A9uJH+_6cQ_V?6FU<`yCdfK|z%wP) zN>6Dxddj*SyjS&ZR<97N)lNf|Hmh`5LW?fVE4NkK^wyr7+}7f7W!|1FgXW80m|t8K z>M2O?lsBDCbtyjn(dVOxZCByji2JW$xw3Ixr3}HYrP6_CeXqrSGKrJ?@*L>4F?aJT?rFprzKRnsc)praSph~3foy%MHZasoFLcR6#B650R0vn%|8BP9{cU@ zT&<`VEsGywsM<1a{o>$!b4m1(RADBA=}(_#XgPu?PsVE9TsTL{ef}(AbTfOE<-12X)@t*yf!umn41XKU8-sl@sb zv)b_JnB4ZwN(t56M-^QiANlL}4AR^4A9bn~f0Y{YsaHcHxqrd!!~>JU!@=pYz7en5 z7HM0K(!M{rsgNq;#GEKqEXk**&&^`CTH$i8((rO#+{5vKq1kF?P>QBu-$(z#spkY? zMPAoqve&$JR=*RNUkn+5FUmftgCIWHr*b~IT_8I+)uhojc+2Rn_t9SVHuFm3m*c0? znO^RDlzl5#RS2Y9H0LnN2S%b@$1O5%^%#X`#7FXyJI%_TO}R$D4z{$^ooXepx{Tzk z#+KH$v?6BX|7X||F@{XcUm-?>HNR{61O+bepCG|M#FmJ86=>j!!$EF29Aq9NKrJiL zHAjHlax{jR`~GVX86vJEdeq(x^uSumXfd;~H-iumC?paJ$KgTAI1Yz4voJ@Y5ePFl z6pjL^+7>th5^6y(hvOm6PI!neVV{SyuDuKR(SiyD8^TfCQX>UtdmA2AC_;QSSo3Y* z{2y)!6bq8RpYOI{)@k9g(DplTl!!mTrS zH5$6!V37T_-gYfDrCCwFKcbolj{_`!E!C?L(e)k->R8u3KP=+AY426C)kVF{;H4YyH)F{E zv}R?g@zBa4uCx$EfYh#^ObZ$_9(C?UF)WVXIN5vVTGG}UIaEu}aDm$KFAuY)KR~Ur zc~r_;C>5`yZ*O#VUi>V2Wc%eq=Lm_=^OlpGm75q(*P9h@s!MfnVD9UCLOHFcKz1gB zghwn(+d=1KgH-(OL7GV4N7lGIM3`|UTX z-!jAQ)C|A<-mlLgraKX)Y-45)VQLa7z1(RuA{@5GYqW5XluWm(ino+hqd)yZ|COB+ z6J6O%dRCp9ud8yM4R&vfbKK*h-|+!0o78nDi*Is5dS2z_+}$T{-YAFrQL@xXf4;8C zV|nVyRnp582=WslPs1Wx&QRMaEqI9g{xhF z25+Fv>eISx<8SLbSUZgq%K_mOLVYboLE z9bJ+aHi9DXrQ;??oMN#3WgUu%>HD>YG4lFUx!ljVS-ZxY`qcN(Y1y*3#>m7{IW4qw zTFG1vKiYHmiUmGj;jKc@0dk>v@rxG&s}@cmgp&p?rrMtAEv~Z~fAhEt(SxuuoEE4? z>3VA&r+hg7u&FP=>K#2l%VYU)<796yw};yFISlmsPQL#z)JBpwr(>$h@_fT-9(p6t zP;b#Jpr=-)7KKjX*s+10!QaPeg2~94_bgrYiH{#VSP<4;wPx@S-a*KHg+7Exu~SSu zF9XP1ws`K5<6rT6)t%s(ZM%42)!2UMhU2-qL&AZ{Egx&M{A$gf<386+lss zI785JQDolCzhR34U%z8Sk`=5&g46<8;uj@{C3{wUB~yLsoMpj|PQ8RDq3UHie1?%r&^ab z^5eRPqum%LzoF}<)ae~JE#uQdoVl&dGjO2_B0CGCuF7*4F>2(3XFUwJ-E2^j3(tL2 zW1f4U=7X@66j?l$F=a!Z)W(C8&s?twS7py-?Bm#^`O} zn_^4nu<3k>$HpfSHMvj2wI21$m|afl?CQHxrImixOeh4`_o6kfATTy4!me}<&r+46 zIo{IWb_IHIf5Ta5@?~7}4y6O~vJ7_us9q{NI8I*UNz+kuR=%iP8u8e_oGK`Z@=j({ z+nr|t6MNG1aof5ojWp>)3eQIr28)r`8V6RiFx8MoIm~8+9+Sv3O;9~Orxu4a&v1I+ z2~TmqXB6Ch?`T7bMiTy5**QUy-Nbb8XYnvdYWt z-L<)$GNN{QIU^Z|A?asdk?ccjeHwnhEqwg6*$Y0e+Pum_dY=u!(c{98N*DH*@=q03 zo2y%X$iq)@8BZ?S-{{#vplI4Sp{va;rW5z#%DcI`l%3?Kj(;jsasI;BQX)2&%5Ut% zL3nn2?y3UO1EzOvLvJ$BgIsVI@ehZ>X0IvJ~$ zb1S-lr&nFi-?D8ZxgfpH<_VaXdAPZY_pW!t-LtllyL`AlU$Gw-uX<~;rK{pj`lI3J zh1JGTD2IW_hsGU^uF*d8)qMiHHy4TWDFp14E=XjpyLL~G!>amp?wBV?USs>aPX}_CB!(RWD5L`@n78qEK;@r$>CepyG2c+x zZDPl}#g0VKm85s{{Z5|r0X%Q_;{NG-(LPMF58JG-1_=9Ouzn#C!ZgZqk#uo)P?hg>lTx6O29@z_##V=7(3MuzhSP!*B)h0`0f z<#~MC&8rSPb(`%e8DL3Oyj(H)@y1aa>X!0_BT6wP&sf6Ko=s3mUZx!y*_s!$BS0r` zATDw78M7XlsKh`Kd1S{1&jV*0N~bKtV#56Jp}dyQIMq`O{PqjVpSbD}p&3Mo5@n;} zJP{8GCXDxXwKL^KpO^BImhh*K;M=n|9?7^=GARF14J#;FE z0vjs=6Ad(CUwgiU>H1xrFgH|vczRc2c`O<8l@|!^*J&KDYYmUsOOUx|nie5=kEhnm ze{@mWdx<;b(bbcqhWI1a`$TdZj*sr^WHoo$pQAoM#p}qo`<{q!vw$fM_Mk8KoIZ(( zvCD>9s%E9m-7!WFw5!@3{Ao$t#-Z+^_0QSPIy`)3Zqay|EZ()Kj`|I23psCz-xY_% z-i|v|&vh~$9E&#%Rv$eZmfRDGyfQAY*K?~Ich9i0N0hB0B)izct5u0PJZmWUG!skT zj?aS{-DS7TUNwgx=8Qy~Po2wq;0l!)r^Hio3bDn<@@iY zq-Q1`SY4+jo0qhZO3j?hnxRzFer39!l3^j^OPt|A6}dmVk7d12HWf~s;%!L|M_I?! z`|k!Z)|a{-S-o*dYhWto9z^o%U4DOabem0c@$B8pJyPKx6tG#o99#Q-YH)c;z6@$6YO-w3woi9%X{1QEk!udGZ0C0`n!WK8ko~hrTK;3 zP=OTI?CBGHVI5b&u;rzkE$^`5d?~34YXa+N)S&gAJ5S#a`e{fX({*Ue&ad}7=AJcT zAAI?U*wNCr*<|!REmp_3xy2TTnrmO%(y~(Fn>D(ePNo`DR27zk_}-6 zay&t#&PJ3jULu`Ro*i!n5X%77#&81dX0iGXcB)tEgIgfn&YT zatqVX)`|NUKHc_ZOqBF}S60WIf77QN5w$U_Sn055?3s$kJ%(?55{%v*wn%x^Uie(# zty1r~9wqB1W*TGd`yjfOlo9MSvF0-gq8NK}e|nt44UJ9>r!A7**Pc0gIbXGT?j&9w zccSvT7L@PPvpt(0Y&oD$H*mM#szUm*f683_NjG7+nLdseCCVl}hv5q$o9-Mqu899~ z%p~+M#}gUD7qd?$lPhJmbMW_|@6}sg5d9=Fkp8OFWpLPN(N{Nq=!@<^K_TojXXfIO zGTCw(|`t@OrDbT5`%mo#A534ll=kR>{;=Xu2&a1qz?B+t%JBOb&Xx|+SW&0mmItAD+!lc zn*9gad`mx`0wAtm+uA~xn%{x{FBR4h-(Sx1gD$mpTZPDe^P?@Omg@XCmrE4a?<)I! zB_T+KgMqoxpg9Tx_|U}8cvygDph52nEc9Oivd%7I-{i?1UoLNgVBi321toQ8EDAJP zM4Fl5;RrP74Fc7FZZe+#D-z4jSR0EX)W57(yI@ zB$%6{;RL8T5`)2+BYE)l=7iPj`xesrhlnu(H1xy*%>3)}Rto?A_44c;T&!%ZoL#K& zVn0|ZLEMahM_3?`ID!QVfhXXx=6EykgC4}q5oQDn3o|I3fQ2GZsP$I*U1iumUFmYQ zAhAOZ6y$A!a0Gzbz=48tLGa!`Kgi#^(jPa3{Cl2-0-nVHdO?z>jD8kNVy41h?ZwG@A z0_do|1}y!qi{Fo)3@}~{h>)xu{H^Nx(O^LSx({9r#;>S?XpfUCFpm3*M9V1pvuu8*s%7&f5l#3SpD000uuMYRD^JD~Q7y<5-b)Nha90n?xfl#d@k(kxtp7owgY%&I{!_@@_G?&>mX?xkP&%bk8VM=s?hfhh?rst3?r!Nuxf|0JMQ0S z>%XT61JFhSvaXj^(^C#yu-XkpG$`&4um2pxk)OZh|H_#~R5D8=~r!>MKfFl>CNI zI(HXtwns8#;`XVDh;S6B?6@sXmP-tl;TcwT=&Rd%O#7{{u4{p>Qi=IVgkU?=L@GCC z=V5kT@n(Y!u^7?cO;9TEu7EMFIHos*A#5FiwY4y4RxV1V$l@x8e_JTrTChU2pI zCJBmhB7XQ}^fR|Da^h&}Xx?2l79bPFclnGRtCd7i^b>`_foiuGAJK)iyz)phUs0*pVQ8?_erxb}-n&$ffWDe0WM}Ur z2Mf?Q45(tdRQ)i|#G6FpomN=9Xwk2q+%(<bVCEItCP>E)d1iE9JQo*Q^iFy3! zfPjV3-jayiX|xfLSKF$DC9`HtdLy~+93=%4VQSm6LR-3^AgjU8t*USSB3mI&AxBzm zi%e9a?{!KTq<9!s+zrOGeoMh!oYK4ct9AVvTEh^f@NVsvd>zrTZ0Ri}YOCg6T+@My zWSRZ9IY$NpR;lb!iW>0q)J=j-p~9YwqKOD%?F^Knh3T{y@6 z#@Bpwe3(hXfyNPy@q7Gn6%Yc3t!dNmS_TU^)Jq~5#F#~*&z9|{$ksyk$E!3{EVw*2 zy4`YHb-Jm2!XQ>z3a9(zyI~I5gIXcy(WRP`JmxP-*m8_=NVDuj>g3QDx4rml`0Vxe zP3FogSV|_8{GYZ`_QOV$o=i@*#M@UP+(J49nRjq(8L|qzBaSHSAr+AvYaD#b9x8r{ zc>KwKIE-oPqN|gMIg(GZec`n^Xc)p%=QFPLW6&Y zls%4-Lx{k2Wdu2UPIppWHm$M=oOaz5oG;QW?j#|W0wXNx9Qb@ak-k}o`Gx;N1&syM zXib!b@`}N^*2!_J^Jz;i#Bfsmq4cBkgu^6^DsECoK11{Ps&6g99<&JaNp?ta&bQrjLA|n|{wH)oktzn->r0DOnVm3om%;Yq`heD-i zKzrT1IW+||(ZiA@LW<;^;d3v$xjfOHI$rJZ$e5v%ncj*agtJzztw}icqE-uSKpB0ZX)VrucDs5$mHW2?t9KjqsG(H94x%y z7)<>9P#YJ=iir#*KC3mkVeey0N@W%Y>VfbEBx=K?xog4;^rdV&9Cp&;0nL{MRNEp$g(L$kpP#kwXwy4Ws# z1WV~R%@SpZ0+#f^$`uWYD?9@ z0)Ly4&X0o?PD`Ve1p}WPv~@pcdtzt&(xQy}UqY z66Ate@Pa2c?wH+10rQs=1&u9ZhCqF5j!f9M0*?@Jcd%tjk#lT|*pp#Ph2&PCe7sb( zki$z)vaFP5Uwvwori|DNyONyNU)2^;w2{_nHDQN}D;PDPGo9C$)*@|FvSL%+;3t)s zj_*-jx$HP!-XE%Fp@%MH2t?^#I}t`Sbh{1fcz3m6JGbIDi2B|SBQC|0i5TC>m)kve z4x_q0kB42yR0Gdfz(^0@axGsqZC5uk&XDDvE`Z!qBhjd3|Bfy)K3oyTHzFYOuL#-SAjqbQ#Z4jW*4f> z4W6wrDjK~+IDTEmZ<=YZ-X+-8QX3t+(beXY^D4N`_DbJaQmALvS>Wje3ia)N;&}cm zh(dRgts2!0e28e8cZhqsPh&+%2+HHNENFiW>@1v{oCve))yk7$Ku@o)iv((xj#L)7 z-#m5IJIQTr;$tc3UrWT~9}m~w-$h{>el7H)$ewzmaG5W!f<6PvNx$E0ZU0m3QeEZ@ zQ43;q{&hbpTr_mV@opBm91@Lh-eJjt)yk@Wv0DXOCY931PM@pIq)={hdi9~j7%CsL z6J37>?g8gV^!6)0tUqS1k8O~@`XfLEU--54Kp4slv+T9%3+9JsB%b3bN;_Vvcj84P z?7Yxa%|NEvM4>kC5Y)62fNz4#L& zStqwQZFEziiXzW1Dtk`j@|)J$dO!TYs-KYihF9VY(%L56{K_LW?@0mT%@e(d;e)Wm z#mzaQnFQ9?$>}82=YsFtclLbPzxUSKN9m`TgX_9=v^1M->?NeX(wZT5;J&g!H)4D2 z+Bnoq=KrJZI;noPWbtCdp57vJ^$u6ha@xq>8!!IhQv4{#X zCt0j$6GNJv@%~^D#&){K8cDD9S~qHxmMy$3R3_P2zAXqWKn(n8#v_I&7u;HEa&w)Z zSU%E}&_sTXWmY@ovv%ono6%{4Hd8O7oDv*6pj-4QHln_H~-NT?256w?8;Aj4Mh`cet17xXEYE9_F-DltuEy! zoLywwnpWGX=TVagiF=ynA6tu~kam2n{()hDLRaD3$Wv0nK(m5MBoQL-Vb5`` zsA_8eq6U8{3Fl*S9ballfX^#ZTqvzoq!vr0i;GpQM2nJ&??0-FWwM#cHkHUAWXD6V zAUcZ{;TkT)B-%dS^+@h0o~|#AOon>U1<<=odw#iIjv%AQscHQ}pB_ft=-VA_!2Ux@ z$_L*rd$8n6>9O`vj5_^IlrGFyjJ)=X)&)J|G`ACkAcv{c6|gd(YU1zH?JM!%$fNp!plpwwttR{|p20 zDoftlByaqgkprod97z&^{iv0MQY+?wEK7I^72)Zc@o}0?dMsJ(iXY$*i;GYe3G3(k z;MZ=nexyhBS8|o|J5y?l-wWs8zBBcRSeTZ!N3UNr@XFIKxYa4qJT>8=*%#RPdU)9P zs(aoEFe36Oql((Id3*sU@vIQ`G%AwAy<+K0ixBaTH{_pUFYFiEQE!pVKU?R3V77kJ zJA-Dn{<<9f%xnQn%KxC2fbl%3NkPP-IabH z3^acP1#SS;*B=A}#TNHo2oE#=3M7G;FBYJ31LS=DiX(xFz3+4Y0`j|WPxISHW&wDC z`<{OfNBzIrUVmextU%of2*?lUY48V`0cTAn5Re}u0QdfW*Z{%G4xl#=h7B~o`+e|z z;Q|QAkCEXIHrRdhHAYZN1<*{t&kS^OV+Y)A9}fEuHW)Kd(!v4)@?!+LaQ-$kGr)K- z0v)m*X8wa62K1)@DlQ&EV2prF{`Z-I;ss^^rF)q94|W(ca0uOdo;(O<{DU3F3=o?y zfhHCYga2TM-M172XnPRBf3U-t8342rM8O8*UrxsVBo9Em&-Y!pKox8-{$+psn_!?X zAW*OY>Y4vwhus%Vv4J2=82>VK{!Qk;T7`fhm;evp-*1xpx(Rj=gdF2f4Jz(A4-gY} zUpK)5f?xvrUHw7k`?Czh8~KwR@4qDmT10`Iub+&f{w)~b)Iff0{&JrB-DCrt+I`93 zgRT9S{nhV+ffhM0K@m)U{U-Tu@c$vM{Eto~0I&=aWd0))Sisu)A8YtGuFM2%(m%zO z@l0*!yN?>(A$g*!9a}C)!si?0=EdfAy2`N)yZam|QBfJlVUr<>>ymz49IhhL1!qbI zm4O8@)jXm;EU&%)@5$lX3S(RQz|;Lwh}$(!2mn`p9E83m4)I~OFW^ys6a2V01s1~x zAuIH^W!C{H=Oed=3g08EMf~`DxB09|t7{NYDgAHmj&F=GA7-C}O6>=zLuF51|WdS;& zP^>mKOc4sXe7_z2eepomnm;c=w~Qfbs@guMfH#|LD8%@2aD~qx zp}Xiz_V(i%?7$bhZ7uGQ-H{MARf2J%SnZCH)im^i$+pC{FqvOddI?A6r})C7TP-@= zh7eE}THiOrN^No)I#B({O`v$T?1)dhsMsyZ<}HknCoetbS_VHFNi&}On26L{V8Jg1#AzUyHm4lZGg$%Sv1=- zDNW10@(U^qN0Cpf$BdH0imE126o{98jvH6XLFzvsp2I~y)3cl4s^m|=1MceJUeOgD zR@HC`eJ4oQD6Ukhr&8BDpV#9f)96X-j1u=X)u8l0bfTf;4p;f+^I3Y`j95>S;@`Fq zh@|yw9jG;rYh^3DY*QlyxV_=zpg6j=Y6;PkQ$FTUKO23c>wO|iLs9#1$y40Hz_8m&QFlV%-+j;=wBBQfi0!EAxlpI4UP0dbW z1a4B`#&*0_^`mC>ZI^;fQCj34&9m$(-5VRW7TxBr#zy!W%{=&lhr^elB!f;NUF>p! zA)IM}yKhM_M`E#ulSt7d`q842li~-VK8o)8znrG28fi>`!D)@VtuIG((9~v5(S0sS zq>oefk{-e4iJS#kdaj3cn5^4M(XLOlGB+MfDl|+eN{St!Rj$G(csgeIr}nv(&q8-{ zdD@$;KIi6Oju@=Ea_v8T?4rPR*By?b!t|~f#UR&TVgA~^Wmj%N;=Auf2M_GF_4{B5Q~n$<9QDv}iE#k2IGV;u;-mLYl|(hN>(= z)5BR%cBHl22HD^mVD3Z;@)E}bCHMnhUm_&Q$>g6w!O~5gMBzn~C3hOI1Wiwr<9ud2 zU$;*S*Vay!vgPv zuR>d8#|Db8+vN4)S`1qe#?dLZ0p`x-x^jQo2FoU;uop!!-HsJ4Iq~W!c*w;te)=21 zYmTJk&edTHa$)`*zc7+_`0S5-$aEl+9d7AgL=ublHkp7uQ`QvPlzq{*n2}&!tsf(4o=8<%E1}Zz6V#c z!QDuU)naG;Fx>Dt9PMTVTgozJ) z{g|z-V|MA)C0`z~xLsJpNCK)PVS7`=$gZRm0J}#ZydK1N%8xu;Y+SI2eqr?7tehu9 zn8e|Z0j_jmkx_C=LWXxD;0>oxGp~hHYCRQfEuNY0Vu?k~FuwcwE>bdhHpY=bfcL(e zCGSik0@AtFKCOps!e>W+)?oL_*^Z~sjz4D9@1AMEPfw7p!#F@fqF3pcUgpvjC|21^ zlKIPlp%f>IhiSuUClF?C>yxi+cT5bcXDP569uN_|%nVvIGdJUV)TydGv!zF)eNyl5 z_QqLc?E`kmz`1a%V*Sd2r;+9JTAgax)aGYLc&VHzW_QLhVe1s{ifeU)j7+(S4>XAv z-nItt&_*SbMRW2r*1qZx;!5711S{hkNQgrXw4Ucuf{lnjXIiWay$~7k>{;My6k|O4GS|?P6e0j14;mS^1Q#cLoVLV&HHzF-+L7g5RnbJ4H-wTS(&eGN+rOC+rvpd1N*{xa1<7{J=CRrRz^V*vBP`>1e^8p(J z_^bt7{VPFw7PDJ#{fq`nOQP9}bG1AF^WrFGljpZJ%JY4j(zy{!HJwj%hES&Q%4+C~ zBUw)=0}0ZrKTc>SEVUxVCh7#rOoBzdC#~R3Gknewc<0mrNANA28upF)TlF`D zS)Z-nad#oqcP>}FG#9{SHi~j8Mau0@k66>YfI@#iTawBK#B)eEnE{fq;8%8V!As zX&$|XA%){xp|n4Xj>yev`%dm>dQxNPQ#li~j-r^>TQhcOqu{)KK2fv+$moI?B3bv) zknR33qk>ASny)V*T+Zq7N}{_1#`1^`B|OX-mak1i?DrVu+g*-X+)MoA5l?CxAtAN8 zD<0`qZ;lm*xfk1HkWn7abq;y2A#*QKQX-D^O_1Z<;quGMwQ9(GR+xFVn^W>;p3JZ8 zYE=c@Hc~t|^zPLXq}6`Hn?`Pl{Vf;vt#peguvgha+WVB#fmpL};9Is*kzFh(`=yp% z88`ziXvdYb@!X9<)Yor*SYQsgGodv;?{L%Yd@POy{-P0P$1;mFEJVtsk5r}p+unyh zEBB;sB;FwnzuPbbPy7f$=$4A|N8^nqp3aJ4;gNVK-l{gY=LX#a8v~EFY%)rXa!Us6%WKo53Cc;A#kak2HCW)Xn%{b(tvG8dOIgz zftJ7%&pRBPJ23Joy4G*OFlm~2mIMd45iL2bjXw&NfQdH^U)<%$4wrV(9God`(eH3m zY4EaQ#KmdF+0*ZYG$bQ~hx1)Ycyd>FXLiNh)oZX_i9ERyWRxbA<^JqKu~?|pTCB_R z&^IRals9f2Tt1<;%qQiGv3YzJD>y?RNU^0p-1#*gqshY{nrX3?(dIrcGta#B)Sh+0 z14~>>r*Qhx=L)HJAqKy)!&Nj8DwC#@S%bo(=`}(>T5G$RgkTY{CAST$r`KX&KZFlu zE%2^-k$ar=i*-iW)6O^p*EO(^;EX!2ZMXgTeb}JK^WVD8cdydE{AfA;ig%JD^k%c# zVMk?-r4uziM_xhCoi=xQR>(j{*V{a_D~KvWZkTE(vO5=}z+#O9$89nYfg{0Tg@YK$ zY#(QMd=R{hCXu+#mYoRdykcsrtL(jmBF{!=z4TsLutA8i-n0u_OZpsfx-{>Vji-Fm zDLb`IzC_1rYN{Lwn!HxuURFiC#q3YJ%%i%0~;K9c@~sb+scg zAq`8@+)z^G;vnN18wcw>COj!;U_@%p;8l8q@MTmy#|u|Q53V?vX`0F&r*v$?LMFCF}zFOBXPKz%^7(jv2)r@XEvs}f3qjvhdD8WU*_&0 zJ@UPx7GFd|%pUeOb-bu-oEzbL1^7_zg;{y1Ys9P61{}7flh+M*1Ty43dk=AJ#-F@# zLE_l|xs3gUW8Zg5{y)O88Gkaq0q)BG8ONXD*nb)6{NuL!Q|#|>?4Rm8eog#$@Vz!3 z6twV9V+6W?3kD!05GE%;$J~EhY5y(uzP&Ce9Q!8&-G2)P5G24Q`C`3q z`3eeJ_|=;QWH5l^0P@8Lu*6@wvfnHe>phGE3daWEte;Rukcoi>yH|QY%=`;P2{QN| z#{q?71DNOUGvDJlpm6M8%~?QYW&u>$fPd1%VFUl*Z!_P^b=g2IGq7)d9}LKKSwPVh zzq+%49QM897SvJ!>h#}d1{AlTpZOPv5>)2D6t|$33g~zB+syZh+xwR34>k$lD)jqc zKyk|iigEyYiT^$rP~6gkq8xxu(7z7`gtM%mD2JcQx&GxWUz5 zfMx;V5e4|`|G}^UMhvJxeE7^S|KJR}Z;JqY#UH$pFaO{OV`RVAgo7XffwpqLo$S9H z;XoLH0Rs0w2nJN}Odvd>?oFqDpBW&;0HpolBmcn(2Kb=?9~)3}{RjK&zR-^i=wJRY z^BkMk8{@?^-0QfKlU`Zcj{_EG{e_zP|tBk`xr0oA6`|xLs!(YAN|2`!C zW*qLzCH|Cgz%{nS={ak3|CFWKU^aNPATo~j4zJI86}-Ht8!Wmlv+rZoBP4wXV`a+k z%h#K0hi{tnWXJm{kwYqNo1CVboS05DtZdR(zD%MZwgQBMFDXDcJnf?=CVwUsaVwfR zP}p_G*%A1RCc3ao@%oOwW0f;@sUZR;9L@`7>=819!79qOUuUa<6Wi-K+vZ}gQ zb9UM46vO}-J2|+iuXd{4XBcYaIA0uTRU5Q`IcY3>D4{i+jB=9DdeQLi+K*9$QfMSW zRmoY@N#*3@q`2Qbi=j$_Ur%bg7KRh`#g%1?lZI+>1(iV>h}uehsel?qBGf_f41N?( z>9;)jo!-U|Qj@^=Ys`mP#hsF3UblB>XXHlKA7-+WtRP|-E8nwjuYH;em+QGQN{cr& z7h1%oN~6q96o=0{c7MV>(>fo0>$iUUmN@t+NfeYkn3!rO;3(uB2%{rFCKMkUv9yH8 zoA+3CrNMvA*nHy}br4z-3TlW@3a=C38BTxrBBxX8p^^8^vcWc^*+su0GyL#n`ZQ(f ztKr=O!_ZANdFy#lHycd_FNRapf!CAFA2=9}t?4oR$~Vj-hLi4#WA2Lu$HQEY8^|JW zroSRV?g&=D{Mzfz-D>LKlKJkP>(pBnSnp|$xLp8`j@MbdMsyFE9D$u*PDj&@IdK`pFs4G(Z z4F$heIlJYt-<{vQCp4$`PZ8yFd82YT{WWLx%0~Ql0&l|iIk5_FoiQUetSZCbYP;5cBOH5e?UB=P!qL}oc^(+1&xVTUI z$!GCtBl3twek(U zpgF5HK1rio;J-*n7#%RoO1cht$<=UnQ>fbNZf|SXChPYoXoiiWV*vNFXUI+;+m381 z2Diz0`<5k*7=1T$kBlEZ{o{bct1Wz4W7gfX{CPAVDH*RYH|(|XrQ?n@)X!EU2WPLf z7r{a^q`0ZYRB^-R$6p}ac*n!`f`QUk++R3np^!%uh(qWXt|7yo-G9iSh;t-Z{*^X3Iu@ zJamlM=H80*4h|2-)izf~+I6Y*(beUC4?Ssyq-$R|@eW~N*BCnz%}KiGz@z^7o))%1 z!Jd%WyajOr{&R)WqY|n>Ve!YyxqMql%Iws~1NaKYaU+I%NveW`Gc7|^{7tRB2A-j# zJ6VIl_ztn135I<|$C`ZTw(|V5N7*8d$yYo3DwDmUeT#NSv+=Nc3`Vapu=)9WJ35f<6p=m2p_7?CFVJ}|;-tcd0Gqd(o33yS7*u;c%_)j7<=wg+U>f)? zIAZ4aiS==sRHn(N)qZO^%}p*Rk=7R8K(lR~gZ!xpVOoraGbprU%xS?p zgAks_4hOMFaD@8ps}X8XbQIL>-s)GMv9UN;c8Liz9xbVPZSd?;nqE zJ|F5YuSO@Vq=`lSguGtFy}B7U(H5&SKr)6uEAs;1t{1}_L(%*UcAQ>gwbL_+<{6gu z(1PBZ?;~W{vi9tBC;c8(>^pqQhpxNIuOW@=KRrd6?SSxN*O9ChON!sxp3ti3ojQ6y zLWbq0b76%=+;O{GwS;33Qd-$EaixO+f9KkS2#esJIBv~3H|X50J)mr%s?TbRdy1pj zx&Dpy(GOVCGB&MOh+sVu)@~PxiBOsI!W#<&hz{X{@4J=~O;@w1)F2@zND++W0^{Gu z5?O>QhpQ>Vn;VJ1w<%Bgdm<5JR~DH=98*&meWoeLa%b`4Lu=Ce))*+*TEZ;)WDm7F z5FL(|cxrg|oNyPeXBi7aPKgt$=Q63GA-p1=!gxx^%wL-IcKZ(3ZNDtHEVbGKlC8K@ z{pq>9gKJq?E=RKNvjLP6RSUP{7Aju@BeXF%FNB46Vpd3^oDc#C$~aVz1{jXTwLRk2 z2IwzedA#-L{?51>Sz|G5|GEy#+&KrQyT&q>fepGVkb|1SeF}3@zIQ(BNPCCY{FNuQ z>il4cv};CTQ6d64jy5yFSA4ajsl_+eWkzqgqrq!TS(lHj=|8Cj%+IdyXP{g0VX?h) zL9*Dp?e~fGT92E2mbC&A(C*lo)V5qvVtTaRp0Wgwy9mkX*g@jat&H?z)?R<^V-=@= z27W7-`_0Kw071C4#*gcv*#ITFB{#>D?|{hr+^fzWA@qP7Tx`J2YOW!)*|@Hx!iKI~ z+#t_(gIQnaYOk)frBCp3f}G0Q$g|yZfsFBs2K*yjpSV_Ex3`bW^rgM}+CNyTt2=lr z4SMR5^^sr=h}gX$K2RYHb;9I|8%pl1f37D9> z=~XIH|H~`p()7T%A}$%ETuPf{d1I$JQs~Da91It@|8p z$W`_A6+Q2*6;shpc9h(PYObYBu6OhlkPD|Mi)oJ!bo=m1e_#_fl#eqDnK+=%xS6?X z+5|XIvZ*Ro#|L&*RrzT0mG~0jVgIOwhIC}>`mu3Rqna$Gg>_(*ThG=@F}wYqwwqHY z8;w8pT}L~@Fghfz-C*qgTqT&FX3^W)WrTdaz`fTa{shOf;nQ(--VHc-n4%4eH znrFCcv}+Pl%}0{c6vnxq(@nEQbBEjIXChT=c*fQ@cV}O2d_cLe?v0HQ*2*2ZqNidf zh@Fdk;U5Y+O;6`cPnmRH1lYEV+*gqjvVzhO1NI zLa0|tJSrO%*sd!4U|m63-fgD)vLVqw-(cEZlB7TRrJPhAr!~84KjRaasi?UULBj2q z@X&gQ^c1YnNiwSZ&b|zo3M2B)7@r?Mip6YL>(tFixcR6IJjL zKZa1#b);sq=Z1ZOa;;b!Cq5Vtjh_hDit_BfVIPbd0(T1;P^bc=GM&rA^{k)X;|;#{ zt;XoKEkm@jBt@8PKp%Ha9j9;$Ws5u5&%eNlzuVo-7#ulyPd5jTG0-Oa^;=;DDwkOR6cXq`2VluStH8fRv+VzKYngvo9{oX+LprN>W@dD( zj6b`HFtYu6qyKBR|BPW^`}IQq&)C07f`3!W19$D8(Ew1v|Hd$|{d%JZ75py@!>1KiHeh z%=fNcAQ+i{YCZqLQ9&%!J$B3nFkKHb|H0m5W(1%r;Lv&){43f7Dl-EBNP_T+VEnb} z1=NJyW5=K-jOl;5QvaQ8CboOs_rqsq`nBu@WM-hj1U(3c9;RRGUO)x|*fHSZ_F%%8 zeyw`}84OrlFo6J4nSQN%0T~SJQg&b!eqAc2U+Z2#1_RhJD~LKFCII^X?K#2(_+v1F z;8&Rdxb64B0Co%<84pMO2OI1jJHG!yJq-SX(~pr2P+x-}-k5%^djU0H_YNv-Ao$h$ z#x1{nWJXq?iv)c!Y#Td(5zOwMGy=OrrBfyE`jSHTP@w_CXRJQ<~q4yb=iwXai<)Y6cxDXA<)=%z4bK4O~{NF8_VKpNTJQT!lZJ zH_C>5A-2b3`6w-h;Y9tf1*T=B)ADRQ!qAhs=O{c#1PY-RT#AsZDIwchWi*`s zu?(R~?6T;MO7Z*n zr`XwogQL@t&rrCRDZqA32U5y{vm3mFx055`z<5B73Vq_(cZ0PJ3|t>c{EIEG$tb79a%An&3wh=N}<9&YEyPHBCLe zo~WYaxZ}RDwmzsO94nQ<42PaLvg&*JzH9l$G#j35s^&=+sZ1CQ>s+PQY6^CH8Jnhx zV5of?KITqdhExK{ohsk$$Bkl_Ipq3+(m;Poey+e3Fmx~hYCS(b*>8d(+XCheC< z7>)@`F7)+QpYQYy>uF2B2K_i<<{S|ohm&X#eW+?G1* zRjjL%wz`GOM+Q;U4WW~Ww!V)HpABW>TLt8JO}D8djSw{i=_77M_q>`3_{_4 z-|_71cJ(xkW{pyyF;k1_NcHj^eH(E3CBQnMCu2o(jvehNt~trxH@Nix_l>C}-J5y6 z5u9(aZ)|#S;B>{Yn4NJ6`pfBQvJlK%+*> zE-$3~dEQNf{*mQsl==#FIrbf8PxUXvmEjc6|X|9VPdlB6W zcQD|zy{oJX9xWlf7ZdRe|0F}k@Iq=|sONoH0{dq&8cZ7cXN#99I*F1J9`k!Ls1YI? zRgc+FrGq_A`j#l1(pj}OgmiFF(`iGh@>ZT)8?t`PB8{du${@KmOFkQ!h}n5}aSCl( zpSrBF=uEEFM*M{ff2Ed!6DIb0uD%OUfdW&CSqMh_cr>fO6TgcwP7{32x%46Le%xVzIOe!jRaG%&OO{HqVH`hzj)wCw4ccTHx_`Bzf!u z!`1npYHVCdvbsH`9ihVx+z*T48$qLciJ8B(AS^HhBZQ1HBBud~P^dDP_$syR3aK(H zdM2j^= zv1WG5zP^k^oeM8o!hvAS>gQ9WN{_3p&Vh_kQK27r}F++)De=3PW5yzuichX&mmW&gqZ8=$~mSHF*#_xp1HR$$|B!@LL zKDFV)+cxAeS-&Jk2`xvm-&v8!0}dZuh~m=K8y%c?}V6o(a#&g z!DM5K4LgjqF(aF&Ks4}T+evno*bvOQYrN`#8^V1WJ=OHQEnQBVtw(vD~_H- z?%S`SSB=fY3k2F0-Zz>bTwg<1Ytznlf5VNj&pog6x2B)cn5UTd;+k00i$0=@&@3Bz zQj`(*vM`4Dt`mm1m38RM=ZWx)$fo98B5x{E;T$ay)L6wv#dGam?VfVl1FqE2+>JMW z34<~(8AoG-W+$U+E){5!miM0-ho&Fkte<3yN>60DzP^y!Ye9)G&PCpzY>{<8VZ%si zlYwC{Q7JhSXiMa`$UNis@K{!5U5dNYJ=;Ssd_1S`*CIU-@}Gw~${zGrF1HNtcByUS zPC=1y)*o|@PycwcQ+H8*hD(#vJT(D0o_}9A-s>xRt+o}}WjeS}67IOCoZl#4i)q<& zkX7<-y_8O13D0y^Zkgs=H8x4s^RhsaoQ^lC6u6kOjorbuT(mmy+T!OJnD3UGGcR9r z;2C_pR-F;TF}}-KiSpWub5-$qirP?(b<@8#A`hhVF8lU+H11+Ig~9q9+28n09grZ!#cD^yiRQ5L7Ct5Wf06|zHGQc+G&WKxJ56*Ig{?2t*YdxyD) zDFXY9i+Gg?RePz%RzR^Ag(1+kc|w~|Ba-LG=`KO;qQl;oK6S;uuGz6Zl&!^>62?S3 zhOdmasi&~?ig>yRHA0E_M3TJGFqpQaET&h;{T2-{oeQTg_WkFC!KHHh@2ZBZO$&>96~{LfUO%pSu7S#>^(2Ta zN#b@%iJm=S60k@8@LF(%@umI_K;gp6*D;K48JotXT+gI=E$mjN)8+CUgdJt$W135` zuMTIIrgaxO3$~kc2T!=b-esJsNE=x$+{Vo>b7if>!@Xj5N)At>&wg%MA4dTvD{NnJ z9AnJ*y>9kP-4p9ldvsX-~lQcCR~#|D@awJH=U6rbOa7^oZ$ z2NH|wHdKC+AdlI(e9?Rt+NMI3R5aok!<%x22B&?_jERUsD`Pr>Q5qYHgB6jNR%GbR zE#{){kZ6uAyO4evG_a%Jz>jTw6gnnFfE3+SS6ix@8+!hVYi=seEbbMf%L^q@Xu5=a zmtH83+jFpy{#Mn|oSYi^Pfi#%7zMd2)Tw`3#(+)3Iexcc#H^RTL(L+~Ydg9wF z*v%)4hvacX7ykXx_pzGA-t8DF=F_b$#%Hs(tjmu@Ebsh<-O`W8Ge#dl^IX4<+@*lI z{2`5eIWc{=OLupO%)r^ckp50%hMA@Ti502g5%L>gKi%*;mh*k5B z?vyOC#C4A)b!C>v^pgEv1i|p8@-uAMazovG^B5_RL4Sx_1HRh-xU+)9t^ack{0X;a z`pcvN_|t2BJ!5SFOGiT0dmQ?{uOnbnO$Z=PfO-$WieXz_R?BCcZ0J*U;fPi9vzx{Ma2OZ2pOAkU1cP|+GeJ}vIfx!Bh09oMgV*$jC z38)@_fNA_{mH=|pfLfCsgdXl*JNnzqEPzWhJqT?q6JT%q2f_EwvJZj6dmH252Loba z1`w9TfX({vgPGX?K^zD%F%#fK@Y~GyVq#FbZ>C?(5y=!v-Y1pistt>K^aWcaX6F zDtq6cIW&>zN3>Oh%I!Mi0{BV06k}TTx3CD@xqR)T)TtJtZ5XFbr~Ww|jSfNJ2uAUdGku zWXBQ|tCb&EC7#qLWTzm!{3$|&E2!{DG|`bEL+Q10s3U&qp3uqCc0l3CBLRGYUiPQ; zP?t4FlU3MhCtMLdl_p&ZYRn3psA5g{X(6ORm;-dkLG`U{ z=X^d@g#s;JqSNAVezqDPZ_Q?9gB5+QLUUHebYVkN`6#}l)tO@h0c3~)lMDaHPi8e( z`Ii_X_-T#h=_jE<%(*DMO|P8Q`2?TU#tRrCl@7BZlLpm&uuRUCEMUeS8F3HR;@}C| zPfaD0+$0aPAfe7_g_T%nygrL_JNou2nQ{1aEE%;NOoU)@*Ub};h%MRH($X5fVeZ%y z#6hK&56e{^5dtN3f!`z0JslmKn69kUv|hfXAq(L+T{bdn=PlzN{15X2%7j8S?wfd-%WP=U)%gHReJq5Gjf}`-E;>ED-P~+M4x|!MK zcND@J*G#GaI6=7#g=M>P_nfFL-yHP@UbMrm=`jA1xjCWTZMF zTCWjZ?y%2}Ycg!hZC*dY8+m;(nKEC0{=GUzi&G7~SDLUTo}=GOcS9m*qy z-=RN;KZ01ze_MdCW@%2c;v-tAMln@kU0tEZ2&vLQX~?{37ug!rsIAOZ6r@<^4=KXegm(_!>;3SzPgMT$Y_eEa!loj3%i z&ziJTlVzB%%kf#=&oYIk%E}+7@#vk-=`b2?Qd$Hz7(>7AC_gLxw5PzJL7)+A>Ae2! z+lv`a$8{B)91ptd01_7n5-jP{yJ`GY-w;-X;n;$d6m2F&cB5H4RUZ>GD2s@xLa%{g z`{udO>5$33uyJTX{L3=~?tM2q&h0Ql;Y_Ikr%cmh(ovS^T==RFAyv(`yDiSn2x#Ry z4cMm*Zxu3Gp$@>3G56lF7$r?l4V9(2)=rl8D`VY_ejl=qKUFU-&{o|_GI$fj>*-eV zG-rZ$=wzB<La>ra@$9kD7FWrXB|Q`~%=(Mh&(d#QPP*ehb;NyhfzM?& z9M6DHqw9BmL$K7p@Z4H1wC6d2h6b(?lxM5-IK=HyRPilA0b8ip8@TfYgUpz0Z5u5} z{r<97Iqnii6FEF}rB+?H1FIvL`t=2K=T?yRmvW2lu4-#_hl>z#*b=0@gIT&%D4Bj*dABhgxPq;ewR4|qP`50W6!o8vY|y5=>nUoG}|vy%W8mQfUv zL#?x*2Pn%7T9W%3c!&0!H`T z&2S|iq95eWv!*JdeO+$lUx@&_DyEvAlD_tmRX)n3a!H&FLtAT;$@3{|^}E~1eVKOU z;SEdOfOCoPnfJu{;|J*OT$1zrV{tyu6AdiWOGIka)GD}QUUlDbFyeFFdQk9trt`xk zLpO5o;pgbo`}&^HlDr@2GTFat^lbExowdi$uECR}lYG}7YDck6pv|#jLV8^1*z)qd zj8Xg}bv55FIzOt)pE+h4JohWrD^Vz=xYVyi_Q`IPuR!ZB+2m~23C{@3kY67v&}eOY ziSH4bj+@>yX+|eSWLH8uP*H^BL6^KGV6y$}1Wp~Bh-1O*Dm*?xM%~ztGeVP)D zSI22LOkYi%UHDm2TyTA<%0jfhhbKIjS(lzZ9hz1~jemO0 z3+(kq^+$+YBqqsqlqLB_w-`d&1RP&x#yfUM&J@gIny!1G$Gn&c3!4A^1gzI zv(9l4tuN?SxG8e(JIYn_>>c<{XhmT%&HU}yr}@!$CRm9M7!$Zg2XW5xC#ZRC!vqg*p_HWSMtBQ>rpAkbHdKjxef8+?R)x6(u_CfLZU#IEnCbzG zb=u~GTMEj{V%^I&89r#6!#;{+$YDOXgH^jj%zLw}*`w|KufaUBMeJy8=`$HC9+SqD zIX_y!^c?FhUZlu-ogOCB#`!wED`Gdt*U7{IKDR8!b9+>*qpq(}3M<#51u8F(>SQL& zTBB*Zmpqh0wI_MHvfzWzp|O{CjVxT&z$EQl&2Fh3<>P0x#XIFTO-QVKVmbW>tbDZu z9>{!R85CrLuHNUQ!#|b_?VAb`FqQ=`UiuQU%>^niLEF4jOSgHiCHLvtyt}aAtx^VE zxAfPj{P~g-2#7VrM47yX0V3?|s{e<#w}8rO>(_Wey1PN?66x-4knZl5l$LI#QxK#Z z>F)0C?hYxDzAyXx_W8E>p0oG4=Z@qC^ZdDRG~gDQCAP} zsx>va6G>ZHGeWsS_Esb1rC5R9-M}a2!cQvUwtS`j65^Xi9&W1ex|S<|`_iP1$3nXx z#eA#M$441Na3Vv9&l25R%Z0XrJ1oO3kXWGbXL-6C>HI2G5~X6p*Hw&BN_p^e^phq+ zg+cyMThqD7$NkZ}Q1pI~)0fdPbL(|ZmoqbXUUENr>9fbBPaBc^{0llfKc>8QZnm8T zC2KUQrt_g1;2M}y-Iswx>2dC=NKmj*kj(L3peaecsO?WN9&nJ!Q*TR&(j%Y9$^Mol zCq`fErlQEjR?Yk)aG2%mPu~J(lTq+ElXpFO3CtEXBI+DM2bj4th!?$!eWdz&L_d1Y zy1HukKHP7vZM@=Zx%-*+mU8n)8`K5!RTSi#xgsQ_p#(!oc|D6qZFJt|yR-e%+*h8S zPIX}+O%@`!!+Ix+4Hm|agLd5WakuyDK6q;2c}huN&LA;Mw;ZCH9xy01*}u6#4SWk| zvs`J<5Qsexe(ePl7KlOULVGVlwu=a|q5l4;-glXRM%(-ZHonBsJxCIYkMfN2&dx@! z&mIyoCwlD@5iX}}tMFNksaaR7QjXalv zn|iUWxL|GSQAFTy{2cV4qCLpI5VV`b{E^>8@+rPs~6oSH|zC27!ct5oc+BkeGBq+wIE1upNIqwZV?vqj5u zopOTPPo{xOiNnpk>JC@8dqp7UmPa7zCtW6} z8gynRNPKz@pFyY2#|lTq(z?$fAV~H;Ew-ukjdq;FdkBRr({N{Wn!Go+J6V9Tm%&nU zJ^cEEqx_;t>HK)|=V>qjRQkKvOtX!3F_+r*p15`lfwkVHy5-?4O`~(3u{tmx6b-pb zwVV&v#4>t>jJz)ECZ;m05D+0@s?F;x>qN}7V{Bz$CyF(}5{GBAXRR9|`KM_fN*;YF*((C7wWp_g9eK_s^F?VWEWUw%2$)DlqyH@1k7r5y3 z`B+-3$H5+juUYSxDp|?pSqNn?-vrD^;GJ7jq`o@w773qez~^&c<8!;G@w<-IJdN(U z-?ba@a1x_oAK0}&J^3J>f!ge0qNJ zph|BEBZIar=u*sO6egaem3e^rY#Fo&GB&&%dtMzpt5!NzFbg1R80dOE*A9UV%mj$C1%g9idXC8e zIx-_bVE$bSV|ecF{-yR`CVoIzF8~|=yX?sD+}sVU7NDYW0FGyVQ_-H&Iew}A_ewJY z#8M6*PI{*2bPnLf02@BwnD)1kpVK*j7C+^f0-nC#i=RuDKt3nNryNrttp`lc@f<)$ ze#$Wg(t5!3$GhPF8>cg1N&hSF@IR1AkI$?2Yr8GVvJqMMH(g}MQbK{=LdCK5vIs} zuGbBxruQuQkSU&%IK6;$OkQW2sId1#5w$C?2v1o_2- zXN5;?aW%%Sf=a^c^!#J@RJ|d1N zUrKahpQiL2iw(qIHtnXT5alfx-#6OaVi8bgP|kNcfeQK7rHXw1Y8`-|kxFGK#`*3i zM5gsoAn~Qb=ACO$Aj}uiaXSOxX(tQ}TaGN#(6TCjgbrwLQDCKed5g=;td?1(-1^QV zjt#Dt=H1l3C!8u{86A;V)CKjJJ{|k3NcSR4yIt3Bx%}+4{yK5G>L1y z_3QKhgCi1s&-c;R1<{#qNoeyA`+KKt7IXzX3~9%j*VPC6qzgFrIeQ#2){Xd)0kugm zDdd1BkcgKL$B*5)ySu}8F@y0A%@@S>*y{d!o8x?_Lnu4#!A6)cuqcLb>A{TBK6=Qx zp{L}QQc0v@FFGzrVAu%G2BY;$QK^lCXubw1$X4y6k7tWW(98tl!+miI5vZ(2e(m}? zWWv-Qy<%Rh_a&o9fb&a3!Cr?b{4WFrDlg6(3`nD@{iqA)#EEcoXbZ?HwrYfZVtunC zi2C%$z@=Uot;fe(rDwktr?xkPOP=sMtLCFEz9#v#@QDISOX|(G7n5JTjlXCQ zJ6rfLzq^&esU1|!tuQFhJp5F*jB!1c?uzN!q!Bw%++HutW>d{Dms^9xYtqJU9b~q|3|{)XcDaR#d@aj+Huht`(MsRT7nn;(-^@n| zl&6ahb?=+Ix>c`wO@#`5iLrn33Mzg-^?x^II#P`o6BNt)@dnG4$LO@^EvM0G0cSFT zdTVJ5gC0y_1(6h6Sc7Ya_I8%2e+-oR_WMK_E^;xE$kq9`;nR_XO0TTEo!B&LC~gmq zXWWyrzSXqM8~Q)|*owq7BZ?ZoBf{JbI$t(essk}q`M@gs`4s9yrpX}#HpPm{l*jCJ zUxvmPU3m3QE7se_8?UVC9TIw3Y%#UZM2BfdiO5HNbd=L4(aK@&^W=5K){2J}=8F(s zbzE~VX}#v|-C8{3K5&HYW3PvUXN#jSjyAo@i~{lfii%=jQ+u`HcxMzLvT!){L3O+O z9&xUKXSUPRZQ*4t-HuF+DwMH7L-VEi=h;PUqmQ_|G_S<)Oo9zxE)Lt(HV z6IaBY!Ik&{BDDt@hnf+&iH@7eKS;7#_NrU=` z7hRIY9~dgIOO0)>)gCtnx-V%a^+ZckNhyt(A4stUO&p(fpV!!1VX8` z)(3()FK_(5#=*C0ydF z*dtjm;Gx8`y1pPE^P?#wW_&G4*X9J0(*fU)4ywL-q5Da^TVnI8k1LeOpa#LQAe+6K zR{&z^XrBej+R#h;*=gt?T!<@H5R7lMp}_$u+cCjMm1o-niR~mZWkG@O8Dd1F6(+G1 zBPJTDYrf(pIYDwXh$)e%T?_6v7{Y4u24&!`B!D}Mva}ls_{%Z-;szXXzpn~w6$pe@ z%<98Tb9d<$KTO9VDeEF;ZRASqQoHN%GulKo(LgXUfO6?USf6jbm|Ie)E^?>u`qYUq+eN;l{Wa{+(3_UJG@#3n z<41jz@VD{U^cy`rQSi1LWEt_JgXZL5qNzv(7E zyGH0|{H1Bgxefkq`IbEew)4%H`}a*wFx%wUJvM9oPKO5wCHRX;;XJZbG?sE1WwK3| zc;Ri4rprf!%fq?Ts>DPZ=0%N~P$&I-_c9~fS6SVPXMwBI*X&vilWeRFW~1Sp5(Gg+yoc%z!`#5HRrL>Q zn3u_%y3_AI_@;T>+$E^yi4Is)f0Iq2&eDg!sO^I0em%_GQq-UQX}ZY$)Qbioqvp8A z6Ltal$B#t{d+Yic=Nw!T8zQ{wyS+2QA}*Dzw>+LJWD17>&@~?4%f|*TzseLdLR&3juUX#y#7A?oHLwp1#7EUd0$uZ zNrmzK6oRkycY@4XNSAPUG(J@OyisiDXedZ5L%msuo(FB_d7Z6Gi{_T5K*tPe7Pa-tM?+f`o_|Yxox#{SUQo)b=YmJ-N-uzVjc-o|jU98o-Z}OJ6%(veMPO z#iSc9v@i?}KPb@G+I$sZ?+p5P~HPm*%kiRzqv65YO`W%a{p z#7e~5mE5K}!{WvXXD>t@cIWV*rpz2mwiW%$BRaN-rNbOt23p>sfB^ALdP%?c9COW(Gl79D#u+PI}UFH{}78LtR2DwErf+a#39gGad&#-mi_Q;1n?lcQT zx&iF<|6|_*F5UdG^Z8Y}`GcnTzm{(PgQ#F)c^dXtM8&`U?oa34zosH!WAn}tmQL`U zy^*o~A9iATZ8~u}2|6LbHw=Uf06VdQv7sXXNWcNGFaqp4YycA_8$cvs0(hX<06S7P zKm#=g1Ka;Uhzb^tUlA2d0Ds|s7Wc`O_s44gBY}$Hd3*S;wNKt!LN=!RHtpv$ z5n#oDY(e05`{y(fpvCL}Mlmq^@5?>RFto9uHW2(W200(3bBV9MWOn^%Gx6@_> zkW8Mu^}jFJKX`{R0@^A#0Q&IrV&>;a5TMr#=&N7_f&^jyO*97bG62Mx(lP=;f-wK4 z8UrZ?g!}?pVSc}6=Kt}X|L^CS0YEZg0istwJ!yZt+5m_(Ed$^k{riIbgF6fW;s=~) z{Qf*MKSzQ9TWtowf5d?H2p}W>gLfDMGr$@QBs-WH(B<*>*9;(;umN%FGXws?zb^)m zOqhT$L71O2L4aN}fR{xN1jf(wR~YsG(PaDIsohV?G~j&#xI(~>8=`;7ZTv@S_tVkB zf7a$twfo5<{g2gd>vxN+s1L`w=?4^Vh6f_i^ApgaQs_R#U^X|9GtffJXN(?OGznHk zlbFX~2i=~qbzn6WRUORg^w`U1Rb`=Y;19zGO@3Eb*lAB6E+nxifqzg4;_yZ5BjAG# z*?}=_=Dk_vPf`u1b`cK23K+lMBvgMCgJBujKK|rZdRH6kUpBgivc@PJ2p=kc4iGz= z-`{*{GOv?>K zY`iapq>pmVH>eG2GUn;J)Cz zvq30tA!U=;2Qt}owVQ=5;H34)KSCWQSRlX^c)eRtx7-(^@ej-aMF_r7c6{i$9;;C7 z_D74P{5r^?%PAnto!I<>{snyCdBAxEo~p9KG##Jx2cE}tbLia`ISB;o26>lThWvda zyPJuIBMT$vFX|~>*WA}vXQTteq1Pu<5}v6gF$*l*uT2&(!kyzGi{)y<2g0&=zd_FH z_n;~Juiw|yx2oEIN!TGcVd#cS6w8W4IuHWW8Dl<)fi}pt4|}|vbeh0$t5`~yMrsIy zM$5~Q$+Cz?uDg+PF6z&5Q)fLY8c-4w9Pv@+7bclPfp%iv|F-cW#lYX8Igq#M3;jO% zISkU0L6hv62)BNeX0FHszB}AvhW272MR3HqSi%a-*=>N^vOf$P6@?hp= zLd!(0>vH3Aa&v6Cd)}`iIm8UWz&SVhDhglQh7LM)KBG*K*ozFV_qGLYLv~r{hs?IBhvi*b|K* zgX?|NO2lbQhkKO)cu11(hu6mqFUZ)dm1At^Vp+p39fOEFnnz&OvgLFO$7=KCY+#21 zQdw!VoJKD1PtY*yVP;iZ)aMvK*{uO!H*2M`=MbMc;rWYai`j*W4WqXFeX?@6gNK$3 zq6TB7R6?w4FWFt@l|pEX;oD2_z~ONG{JRO&8cmUD45uU)o zBP#0;6MgM|y4uQ}gYcq&E2+vKgUjqtk7Upn6u2f0SHAKlt?0fCM=*YHFYzCa?h1IH zBygRR6Ghb%5z5at6(?Qco-oK}tf9M?i)E*7$SzsFrYEeA39U}@6H)$itE&w8fZo1{ z@J~_7h}M=qC4*ZL9m~^L0*gCCbVD(4h!bzwPID8dN*cZvZZGR8D9kuyu6pH}vb|-R zu^E{X5~StA2TYY3?D(m)EXKHmWDohHBaA?^<#WhA0UFrB)oWSx3)H0JPiOHEnZCBT z7fFq}WOXIM6(-`uD_GieMsl-$C+j+7nTg5s=bnjcnIDw#TIACtlQ^0632h81Fxd@F zUX@c(>C&fqT`}TLmO?|QPBi0ifNMvnI6CB?eq|Ac%hiL?&NByRJ`^xCmgatYS z^^7d5V>xmltk!eLlC6A(k1ID>Ato!w$kaKuy%OP3;jmA^a?r=e!BJ8=UKI7c2j@K{ z!%E*8MUDNC94jfLa${{zhfp^(TKUP*Tr}}IMn>yCf23z9VJ>}9>JtJg)S0nN-R+_J~xt;&~F_o&7@m(kwg*B;G zEwjB!tFBh6O9pNQ12yE%tR4oxh5WEu}-W+qp2)ja)_F6 zmWN~v@($_Q&~(>ff$R?%fqRIsvN29|tgWfyHx0oDE~?pfiKxvuY8TK<)2UrAnU58j zDCW>dYzDM!Ow>77T6(TlP!L|yo%NBtS*=E|HEooW_DCePP4bw{GCnhk?;QmtZtqFr zw|RdCEr9>R-~XKxlc~q!*%6#?lLV^xn&tm0{VX=@*v$R2mpNuG%)EVI8m{=zODJNxKVZXJB2m*qV5;=U=M{T zQP*~Deyc{f0C8Mn2)mE!a7&`itqvh6AZQYwJ2O$=lI{8>_IeoEbt8IT>g?0iU?7ju zCEf5PJ~576!idhT44d(B-l7h_T+DJ}vmX!O=K!RRH{T*s=^%98|ImC7O4q~%LdOLS zi_q8zX>ocR3`ZRjgl*XAeJ5pjiXOYgX~rN3-H*8~0va4?pAr=e>#DA?V^ zb)Kchf%!)gWRg`(zR3*Id=WH-E0F~n-VdrphMgB{_k3#uHBM% zW#yPzg`Q#$S$bG2^hlBuZb~s(Q=9R>l1uVoXKgD@y|2$Gm+LzY?%;Tk94M>hVFq?9twwNi8|Xy0xfv4M`$knN{OQEtk1c5`^J@lek!5=Z zDcN>YCz#^V@!Qq|yVn3W-YGKgB+|8|NaAM?>Jubd%j-qV4&x(7g85NjI@@Z?f=Ng((-Bm2=dtoX22I zbAJQP+O6fF;Af`=wJy!$W%q{Hy3TH9foytLqWaqggX7tkd2zXXjNL^oTWLhw!|Ow* zrdnHhLtMvW3>F&(A4pPXf)KBbCb`^cpkJDkxoDziV5oVX_qq$LCEV(97Idy0`{azt z^@w%se>4|@_Hvin64!V8^brMRJWI-1Hln-eEoOUm*5g3aQvJgn|2mejThun2wR1Q^ zV1E|jhs{s!nQ48Ir5_aTyIX4xE<+G&DQX8jzZfOlz8HJiXyoCVr2VDreEnnEp*jPf z`QYX(J(aXe=lNzL>rT>l3BsT0&O2Ol=|V5VCg(tKXTP+(Z->t$I!)TOsXsF@{K$r9 z-P45T+_-J^GCUWBLG{&9`fz%bn`%^{A$KB&Ro;HuY{wE)$+sIVqz>`gE^^J?+$5^m zV?}#sf`d2G9egvny+wyqyzjk6ShLxB*{}+Wt2HS>==;K}Hh<{F$Z`yf;MZq{7V->Q zN`7Ql8^?biOHn<*&`+k_2?L%XkFcDK;Jj$N80&)kb`@t4q>-6g05=fB2?QzfRxK!J zSfl0M$oYb6@N-UK-1O__q$HI|7(rW}4P0j4E$&WhHCInORwYw`02f~=8}|JPZ%(e_ zqB(Qra?JX&MQQ50-$jLa4|B3|DVb_g5Vnn- z787z}gNgY@pPyvc9AG9<7*zZc^h1_*V3N5nYt9xj0d0Zvnh&;HLF0FApZTx7oOD37 z{eSKAe$n=yD5?Jo{510)L5~WsfNiC*jnR`*#QX~(5+ES|Yaahd^=5vK0Qsf%-wFsI z>y4Hkm=5ur0Rpu6zX3BdKWBgdEd~x|W_T{W{8IZbo8gmg%>V=+@+8^)XQ%yqwf=p@ z%m6zmD-dCj`8hx2mx2GQ_$dVph}!g=9|E+P?I{K9cXuQpLhc_-oAoIL42atFoF4*o zWR|BGFd%BvbAAZWVt}d$bitnULx2`DJ;i_lyXI#i8PH;Ys>lHZ@4)<=9|E)(penKg zQOubcpNV8Zi|GN-U0`?EbAAZ0;wL^b5W$@JIX(nvEkIOc0ph-8evS_TTFeSKo&ad1 zzbTT>@gYEq0iq&15TFk;U^ajIPyrM&S|Il(;E?7Yls@r4fZQR^;UT~#4ba(vrlv7J zr-uM72ApiL1L@mm{w3!3zj=)?08Tc5#mq53r-uL?`RRz@_mAnXc;o-0l=&Btl1>!3 zuKCZz%U{?Ye~Op%fcxYhikDRy>JE#wC;+Q&VvQ{|CKh4q>vzK?RbsAecv1jV*b$Tk zv^lmzZ=bE1`XlesE+mZouo5*A!1F!K+x$>ZROX@++!ev*o95+NdwonhfTiGH*Sod8 zW)Aw!75r6~Agv>M_Zab%U82B3hsh~}%YO2dLa3f@m5jXV?aY=nsnPdY)ytQvSavDlc3u-@j!qShD`PQNO>dSi@4dA0y``qI-BKq8;>Iv8zqf1DwF~wOKD>Lt;q} zM$GD`k^aolP$^j)gojG5lPv*1y>QosL`mg8^gyI(?e#k5bl3j79aA z=nclajT0Lod_8S&ELIEI(&8jJbE+aTL)w~GwISgjj%Of#@bk30%ofAXH`DHI%ui~% zx#$0|++VLugi@Zlgj9|qU>jH zX8HQlnXi5neT-J1LN=+iDI&Wjr@T`Cj&u`~4;33}0Q!AZz%kv$!P1JYVr^G&cr53A zySs1DmMEqpr$8K=k*4+m=On&;+jN)zoz>sSrsvk_&Fo-1zeoIVIf3j-ApY# zavGZ@us^{N#L5Tvik9rOCA3=jiVOLUpUTF?_O`QW<}O57xx#VIs?2nWSGBMsKgefg zAAYFN`8`M~{`0-dti394v$EaA-*}@aBaJ^)4bX z=n*U@{?b!iXs!6vKt@sxFfZKvC3J&C;b>Og#IYZ6 zn}NT)>uF2qUN{`sjKN@|LviPY;_0upNFB>!!dR@CT-$-0uck$VaiM;XgXHSJlS!B=A|a}OD=Mr zRp>68h^V2-o?>C~QW);MFGokAA{xoj+*y@)IK8tTVl_6tnsGs#eP*~A1#*6SUw3fe zy;KCTZ<6HkqtM+C84HD zr%Rt%w~}=PqU5TLTXpHfm7D$?<#>AZgaqX*)lQypR2&KP2WVyZON!pGGXrdP`x)gC zgcc?ofsWoW+UV8}=L;!*-9U;%-e?UA?7ecbICM4+J%SyRIVE|8Kv!xg>`$KeQo4`t zQ5aSBVot;=X!moCX`pmYvQZRK$tV`}1b?oBB}w1~FMQxL4CyjtF<~%Oz%(+Bz&HTA z!iD+HCHsqR^piT@r%Q81$Lnv)`O3zwf_Te_k-&P{K{MWgOmJ>El^)PT;wM^V zG2M<`9?vf|<)`t6sI~IBu4%zWYVm)jPx@xPm=52Shs5eE2wx1{B|2q7(HN;93ju#> ztX(|KOvEL-U1un&|LP?|u7RoS$b9$&ee__r6lX1m1z8z18kQQl+{v8x&XRP8&UAQC zSr>QAJGRH-dwlk072M>*ZZBf|iMC!_Z#WZ5mLwlj)^9(FLy~7}+SH85ePvFKsh9>_ zncxsi%Q&UlX+kItyjs9)BtgT4@QNHBkmV6C-lWMopvxYnLgSJOfU)BHL0Yj5F#inf zfbnvUpNoKk94y^S(GyP%5uEQ0Bc@u|CVh}4$&Ob~6oqdMhk8-EfFF2`5(GnF#m@-= z9+J2!3GucQjrHQ7Da*$FaBQ3_PG~Z6Do+YFv=SCgDYB*PpgrG<6QW0I+=EkQOuGsq zuAd&%h7G5I?)`{~mwcX}0C#f8B?4U3KE%!VnMO~#bdDl^N0p&_-PDWWVjoy?ee|8f z6P?u6iK@@8s$)at#8-8jW+7VajRo9a89~Q<+RmFTD3=L~TPQDS5EKdCn$}J;c|OE< za4X2}q*sO>V!woEK&(wSUa+~HzsXR73LvBwnM3=iKGf>DYRxkl)6HTLdO%B1qswZ& z@?9@kyJNylv2DQtCn=*A?Cs!&fhE7UEk;Cf{p)?$ypP}?8P;~?RQ;nb51195{Rt}U zvSPE`H&$VkTO$mn#4SpHalMjzR>SmIJdj|O1Uoi zVg^GLom6O^;bui6`MrFOGhViqkI&9Xa&dOsp*D4GVuFYScCJ0=Bj1ej5E|2wG(=qd zsWN1Vd6)6Zm#T+JoZ`KYmtu!=wdO9oEoO0U*K`+OFp76Yi3WPgw96POnu7I~rpexR z2Z*wNN4XBcrzAjg3EaK2a-+x%kABP8k+O@{T&gRva&_)HAC0sqjKZcb>J2L$nY;_b zmR{e|BNI*Y)AdC1?rxEgb(V1ayRuIYe-I~;FZe9Xmq@Jkb!{H>yW%L4k8W=~UKYM%Lp>9J5ULOCufr)7vlx*3X(vQlv-mfFU0Gf8+~ zIV4m0584CDCP1SswQrP)2Ox!6Vzp(JW~N&yELF7&5n&h7{84{U8}dvZ%4-8PX|kt86jVC3n>1qIS}pLU!rWT91&vO@ zn!(xE0#2NL-4V~{is|0_Q8;Ze5vMO>d``W%w&*+aT5obWn^tr?iQcvOxoxBm zWmn;amW54yIk->TP#|rD9dc0`%-Q;yiJK@z+=^ass+hghi`UK6@uqp#?0fjQ9Dn(s zQ$xdkG8qTS_JS0O_yq)Jj@(e>k$_c1rWW806sDNQd*@Q|(`@JGJ=hQiMGPFK+94%V z-4?s&q2DzWuC>mThU=!WWgemB38Cnd|@Imx*y8CK%;4NtXdE* zkX6XlI2S=OP*xo>IAVdEuyJoy>R;=G9l<)PYUDt9hYKAd1*8$UxwV*dLpRUlp-G zD24yn?fR!8_8+$^^B;`FU)`?%`nx}!RsT!3DL{~`a;2^cz>zq6rJq*GRqc=}Cg=IChaz)45<|0a-) zh4ojrEAw+IBJ&@s{f~6Nr#_F(7*PJ{&ffX zm#yhP+=2q@7G(fPSO0JedW2^l0Z7TYeSrO7K{@$(urKpop=W5@+pqIS216t`B$=IR zXLPJ|NjYoi!&NgI6h{`NxiQ5hCQJ%VAICDw$>$^r+(mHapZmVysk&O)9v_l|y&0mZ zyZj0d`0ZcNl_`-*r0Zkcp~DiJI*6G6^yoIKP0C)ow;Eo%Rpt%r&|Twt7us-@b5x$E zD&jdY{GsmVJyM#0sDz|qV6PcHR%~fyhfrdhBTLwZtpnEvNP`W+W*bM0t8%?BgBx^->zzSh`HM+GLkuzRMyZ2(bSuj zVEFoMi%Hh2H@Tp8!fOGubf@s7#<|Oxu)<1yn?fArD@Yl#P^q(9)w`;%{F5}Y9T_Ym z@UJA)tW~;3l*F}AtR9@m1u#~TQ1t?>N@QjTzGve#uMDffpMf&IUSKhl+>qepzUo@K zLGH_h2v%s1V@7|+bzIdCt#%(bhKZsxf}JOA$h$AYQ=>un3A1&UES$d6?4@)?l&|Xy zZr%$1*RGQMd%O6sc>YXrJr+2)9QSElAsuIb1Qg~^Z+EsnPLw9u;h3E8CR6PP&l@^| zfotx)4gQ4EAEcm|l9gY6&^Qd&*^`+XGW(gJ(wxa}$KeNf(hG(CI0EZhznYBsc-J_v zclgpa-Ttf~3#L7X^NYg=2`_ld%R3WlH!xJzzwFIhsBac}XcBv!AWi&aQocx>6GyZf zFzUV9LRv{djTaY>{g}hU5h@NVH)e)3R;ZXrOwU~~+=i|gEyvM*akh7$n5ZBNj3%&0<0{M{`IXXRxyK?EUc z4!ulIorSgaE^8tAQJ5B{EWBj$1(8b7bIpQG0k)LIa zrid|l&S;^SDE}13gy2fuvN`M^sGsftiXMr(s5Qo?RLu-ZaI;r38PL+ESUGFAzJ%Ol zSM>cwcuklojaCVpbu*p9$J*Cu=Ep<)SeS!1vg)g?iAwk=l3SEcqk}&N**~a%ws_NN zRV+$&J!sL_{(k$?#JS=ahHt?74N8cu{4}MRWC=Cad~s`V|X^)J@ek2H6Ryz+K2i&@z$fzEBd96!EtfN)LP& zk6#op6hx-JTJ0O9+sOIZOmGBo=sY$=RY9q zxE_rsuO?3*jZE;uq+(#+hZ(j&Yu-G;CWW83bye?mtMNWwO2xFS-It(Rx)dgm(FPyQ zGY_aKSEWFPP5*E2Z7VPmKS6jmZMmD8)3#)XJAiqNfw2wS)TPR~t$55^AEP?#E7g7H zOPQ-|IGSFYVJd&~z=I7Lcnh7B<6r+}q(a6zL&66XVrZsTSZ`o-9rfMIeVbhRL2CE| zwwH}aXoDVCQV<|xu;s>}yh|p-veCm(SeS1M6|L~1D&s}Ek-m?umwu<)E-PQFp~7r< zNiK$!E{&9&sWcUvUVd&!?gVzjUh{o=$o+yFFej@)emIke404 z;t8|d+RM|Q_Ze#jOFXU?^CQO!EQ)?i<Gn@vusoBTMV$>h5M5=7g-4Hx5`r z!eBw=B8slt8iOXE$NI=+qJDe>7H_I<7%tE+QN{q98Ivk00P7TZg?7hzJ% z@%eg~po6($a_(zc4KBTppR+)h&8MZgf$#LDstK+OZg!F_IDBCg(k+;UHW1UUQ(_sk zbqqUlxZlEGU+2dpM|FikvpQ>qhucJN2;}oM_;~6R1@gV^LsOa7zBhud=4z+RmTxoyP3#-Q`|^qWp} zc4CD-7kUq7kd5=Bp-aAaob@_$gpg8sS?t5f*XMogHaciTe&ejrlB6dU%x8yfjUXSwAx}v&^H&%zE`p>g)Wo56JNgPBG zZt;+5q_zblho;dl$=biT;$7lTtU#nK8Nql>65ZtsfkJKeG1}=3Kb{Sx$Z{jLlA)7dUiPRAyJ$}!x^NG+Abm?4DdolKiqm*3*<&uWB6qLG_4lQZdb z4`%-w0w!j0l4uaFR_N+pwP^Nr7br?4d}dc$&(rm*boGszH}IPE*l0cu5StFe=mI0~ zm3s{mgINZ>m3hPXhm>u^?FtPMtvpH1R`hc#=)?L_-_i7#LIjr^+YVQUoGS7W2iZ&u zCNEJ%l6d)<4eQ@Bp}zM-FsU+)E_ZS8$l!X`k%Lfbe`@$+`8i;ff^rvAyAl{9Z!gdyk$lS|Dm}X#m*FTQaqJ z9#bo4O$RRarut1=tohz8KN%x~2b`OGhW_g-v8-3z0p1{Zonpm+FFZXB3c2lPeN!## zRg)JQS*vd$C?%S2?v=r->r?cHi`C#4L?y8UzLa8)8Aa@zE+oh7KMIU?V17GK=8Jyc z0~0bwAx?xy0l~fIZ)fay%@-k|A}=j`0fXO0F~~r00DA)7MdIX35JhFB_aVke;T5lE zJ$JbqysOcr=}Xsm=SbA*u?U{Gkud3{uWx&~&){!oPl|atLy8_A+l!F>Df&oM5mBNj zm0KiG^B;LBL+(n2kH&Jmy~K~UKW4e?{tS*5FL5MGPZNI0+sP%TbfQhgQF@;r?^R|H zfw8kxXW(3{aL{7dx+LtN$a3ksV)Fpa8;}CVexcA^^uLAw)v9% z7rJ+^lxKqTuvYznH@a zr|&vM!ddOwC2YnSV|+7DF^Ya_%cE|Z>|dW;_cEn%KG9S)GU%0!gec`w1e9!n9IpOC zB%J4@r*y#GiXXr9j*IC!7`8d`__8JJISa($cJe$X$gU)tcCV$##%ak8!YsE&Afh!j z&iH0HdBiD8LMcMr>J*f50xz4VK=x}fyg2`Gma=bZrut-Z9t6+Iet8sS?aT(X!#%=>7vK7I1d6_d z6RTyS!~}oZuXfyB#Re_y?2A{wpW=SVR$Zb3Ir|VIq`Prj*w#CsP}qbZ_|{auRuf}- zF8TA=QBIpd4Y(*nKno(O_sJe+h96E>tTvBq9sa;(ON_GVIIzv`U-wi>fZZS=AbZ8s z7?w`xosAz+eKT zHZTA)tN@G^e_zb_6lweWteKya?SGl|pCbd(z!`vq4?iWG{Qb!EfYWtgokoCWn!hb( zd?J_u2_I$#^sD}T@sn8wkk<0sRv)kqe_#AWFay?U^heL}pNh-#o9o{T#t1-|0pU|I z|CLYm)Yl4Zu^9n9p7cQ4ai5Od|9;j__%on4*k3OB|Eg~MJsIntsT;q*^ZqQTCzJEOcLF(Gza)K6T#(|d4&?*%+vNDxr!x5x{eNmD-jSi&51iC`yqmGs3uCr z#TR8lQn)6HsDbZesn-wZZ%0C_PZXrQ;4X1Rb8J-c!28Gjdo#=_ICpJ(4mhh}N#1Wl z@?!CX(CHlM^7ql85j$a5Gmkh3G8`ufvcln&#L^;6SJ;MG2KeV@`)N4Qv1XX^!Za%1Kl!>JCV#$<|KT_sW(_X8J3xIc&eGNRzQO>|BplJ)% zlGMM%{^DP>jZ%Iq4WMNAL?WLp3RBE16vPn98i*2`!!xnszM;gmYpYcj``RT(zs>jp z;yd;r_jWK-N$6o$g))s$r~|Q7fpU?sAlOQ@1#@~Ur*Kd z6KoiOKkj65^6}jtUJ5Jf9;s>lnu){^ql|R==eYeV7fAejMbSOVkGmQQq9>kG9 zwB|DB93QjLd7{s3!JbdH+=C^h8q*5xeoyD|NPBC`IJ*Wsh6EOqeVyGiN7j57t4vfn ziOQF_JMREnbwDIKd?a_``iP!@EP3u4kZ{K~zAf7L`OQiTgg|tW<_kk}OEqhQBHhbA z6WfpeN<1|t!@s=`7zSQRUCBYHV&BDXT=IJ4@a?o_)5`_VuV1w^PmA zH^q3fy}7?ULKiw5sw`i2E_Fm_Gbf!^w{)Ry%w=7eKXSR_ z$J8&I@ZEB-OS>GjEw|5}WeCa?ReG>V>Jb_c?KT93-hs48R?+3%Y5PuBC%Nc+kY|%E zq#>zI+G4^4>}7wse_cb3cIR?&yo8G9qdxzndGrl;PDRmpzB<+<9A(84{C&e!OoW`; z`ZXdJoMs`%C@=0@kRlh-LPAZp|Fkp_WdUqL;yTlj$-q@Rl4!4~}F zP3CKBUgWQ+dNQ)FYgPs)#=HfaFt@S#^>XPvaO#WU1u;-dJ&WV)_x9g5&g<*E$bUz% z=Pr~j8t`I%j3qAnW6T`4lfM{7;8xu!^8gzXgp$T6c`}V>o2((P@>~wD7;@%# z^vL3Y^K0GCUV7}Dy~a{vjajfdO9%wXf>jBB!5-gh4a@Bd2d=(%+l7r|YTg@sP+C|y zk99t?@4x-fo*9P!!R;RfCa3~l&y#E6)tT3Bra8L*U^I(YouNd6AteoFBZ4Cm-Ob#} zMX%CM%e*bp?JL(&3~PZA(l(J+IG zkB~&34=q_;V14W+Dkl|O{-`fK5>~6*_>P?q%}PvCiI2+ABqU{_^v~HcnirNjG-`Bh zG&$@B3XXp2f)a*{x9RGx<%2ED&|~vxV|zr*BnF|ShgY897d-RGYF-YTkA0rfKG zm~+fYjdy)qhvXIm;tkidtmy9`SnYlpmCDP(I09@5_qM7@Cp9uXi)bE3J6)~Qb`!Wp5@*iYe{f_A z$6I1>zbq!;0`=kYc#&haZd#{>=gH-Zc6+nzUR!%Q8vWwt4T`GZXo>u5`pk>Fv9e$x z4#U>#`23D&-Io->!iqOg3SRuo}8|J z=g?H5@IQ27w_}V>90%B41y78PR)D!pwK}|?n5n*Kyql^U5L)5Slxkd))EA6HPO3N@ z)OlQ56!t3TSsu%{6LT6)mm5^;JrzJQ8_G&_N>y$`3mmF`S9PYALNWLQyJg*V@l^1- zcWr8wYb+>kScNBj+XEX#e9U0M2>i??Gf$=pt;cJ57<+)C!0WrHOC6C$J;n?N48xGM z)SME9C_m|hE<_KjM;bZtW-!LmndR#bxipJr-7*4hMO0T80@dv2Dh{bQjitQACJa2cW+(UQYcK?e5_!1eF>7x%xVmi6w@Vd zSqV`CSv2ovDfu}1Lqs)i#k@(PPQZINmm-FeKR0aWU|J7G;qrM`@#|v!~sJWBd#9V#3Xhl~JKKu~4Xw%Mm2q~Og2wN_0ReI&`0R3siQ0f&i zaQE!n95gE3S_rFjGIdEI;ZbNRVQnyv78%z zS-Zxhd$hfC9;N!2s&RDx0vEc6X!}@2bM)Tg>ecx7&^b5%v|7)2V|~|BduWumqf3KR z+3WP$cEgd?+l+WWx-CtHrYk*6nfFYGz{l#sM-KB=JB>C=hK=F0@JZ*lZi)dSB(8t} zIUL^c*KTSVyor0S08{8&B3>D5ItSax1j)qoi{j}`ltyj^mV={MZn*#@)hNrs>N<(~ zkM54lWp#Q{hofM#oNq?lYRE=iZf)=<*WEEWak7r6s-+IGxsuLMq;?Z|d#~8=2+UfV zU4j4Ja`Ga)&iBu-lrzBq_$)a=$#85d*5T*Y-s&Hr7NH9(iNI>%7p720pbwQp zB0r6C#=~8)wg*QFb65pO>K9huIG@rR^5LZ#t>(-!z)Xq~RnnRR-!hGm%Gwi(5K$ux z?x0}2G~73?Wuc73Tq}XaaHcpDTR?o6Z(-8ds&ci=NnNFIXah9Bb0X?{ zU7ajU#mVF9z+HiT(*;OG9EQ*-(t1NvNK{p-1*{Nq%*i__Qk%+}pOPeyo~Y|-)l4fe z3Z>ytCz!_{?h@!?;CqqO>#m!qF@J9=J3cf=9*k_ZoynkLS z3<2BiAMJg>XN)>Io}hGbvDM~iU8k+ z;GR@yWJl;k5Y&Vy>!nAk41?^&*53F!EJ&d6rhQ@4Ysz>98jDybIae_CuD&)NM~NW( zF3#;0$+w9q=QTYoCw&Lj`m8amTryiQY5liLH)N^60OUPCzAiOxZ2;}>i@y$cuoQ5`0Y6Ukl}img6^W z@gFy`e;oLKi9yHJ{-TQic{2)13_7ls<2gVaVY@pBAbCNg6fq`+(Ai*eqWSjivlz>=Y0HB-32?|5=8!YEm`2S5B3PK?IjRlRoH@8TfbBUTa6`XwR{rL&Ik5HKP1Z)eQT0yGdo zd4SJRZJ=k(PL;3X2wECwv^Z@-tB;+V6pvVV0QCSapd(x%i5? zA&M(+tlVngz21K@^;5^MjcD8SP-^3wai=}UMHCS6Ur9!lA}ZmlE6Ouf4439q4n~`e zXpH`z9Oy_#68S)7$6Bv{3X41~zeH;alIOX~>uY&=jwd0JW8p#(jL{=WQC3ScXo%eJ zq8RD^S;gbu_Y^M{_XI3xdK$(K1SAxz>iW0LQ|*d?X0v=DQW(jTppd(K?0 zrg}ztK7&1Cbg>+ZL_Vat#UAa5Np<_sioG6Q(jj>}EXgL4el{5&vbNjwqkXRN3K~fv zLN|pM%0o$Es378nG1JM#ym6USpf&3pcbrdb9u zxGaQ#ud^XP7ws3DKZCuOfc;Wl?RlGTiDz+my1%~>6&9zX{UofjUB68|B5xL5^ID1Y zW%*n#om>oZiu!`O0w+B}c7{%zJ(|%xt@+$!0n%*@eqDW)*safd<+s?K-*5Pau?wvB zHXc-SzG~Hs>KvU#4IR|iLVcOMX=7M*W_L&$T8M7pr?rb?To1%8FbU=!#D|`xG@hTR z(q=y(Wp9YGuOtbl{8CAt|M+p7NiENBmgSLOEqr7hPSPT=R!(0q zJ>x;>#3XU(hodnH<12~jH#_b;_>_JW@;KCS{rmZu$W8p?AsS-4?q8btmx7jOZ)G+; z!WHX-;XiyuTE=RuQ-i(J4i_Q~e}BW$9e)xwR%5C36n$A6<$zQlh+ai))s9_sxV9uU z&%$ppBte`7@O@jx-%P7V(`jG7IJwCtqZ3s%dtS1n2$#2T(bm3qDY8En;DA$W9`}lm$nwJx$9}uRoRsx=rlu5#AhFFjE%N}M$iYl@Tt}>^s-ab zp0$>wy9v{&iV2YZ=$2F!_?TbR{$dXrogVfvHL~f2li{rXr^{x4C+th=4ELXxG=}Lt z+?QMrQa>m;<^Ad(R)dyU+A_X3wVZ)Ju4P%B?IRM)11Em7&Mnl0No<~Z1{QK)Y#HtY zH9B0AnXAWuklwn3j-+?F&}C@i^X&xAul-07+=3Q7<$loSDLs#@fE&)^sT)&=>C1|6 zlYgcB=M~$=V=gIAq=N~yq(XTx!$f&fm9I3U;rRXKCIQk09wiubvij8M3!j)^)<1Y5 ztmZZk`@9{q!3=s$$SrR)SW?-36?=TeRVOES)>43gvVRwL)UF7Hv6Aen8<@Tv*WX=# zgTel|vY;l9-98s!!u9Tfa~ZIiofiGOx1%E6&54%^9Jr z`h+HFw%PyKzw2XnTxRE`l<4HOR=~8qN}krt=s%p!^tu9aFwzK9cj=m^dfbR|XQac3 zRg8Cg`h>Lda3ErRfoXl%3}Lnr?~b&zU-(nJB!b$<&LB%B=i9?(%g3?NjHMdkJ{N{o zDYgnj{hnfDNU5b1@5)X0okX$*sMCNmxkohFU3oJf{+F@JL2!BzQ@0EFDm;GNuQ#=i z$4A!Wi%jOKV4V_#R9)*nMJwoBuc z;I-14VHqac(oajhy|87Y{Sn1-RV)zwMNXKIO0USp1e$Q0o@_*enuW-OAuGDe_abE6g_-->9hIHc7D)YB zG&8M%FZQRbxAwsJgkG9(bGc~2bU@<`s6tUd>FS1|o+`#b;7en;^GJa+CKO;o#_RE5 z`7sw5^oYYM2l8m+vyNeVeBBH<@s@W%2 z3KEUX>SuEzEdk{u^XRv)j%&!YO{znVI1#syf_fB9OtsP$T*iH zinZWvc@>;^lyZJ2q|NZah)FkBCm}g(F<-Xn`9@b%v;^Xfp5VvAf$c@d;82rXM6-la zZn2k-gZi1U2?6B52$)%g0B*CObgbQONjnv<@RiH`#~DbdJfeL8WK7+kWT+opqi&3b zqr2U&_K)C4>Tb406e{c<)#f$Z^Xc9QcC{_gbctnT2gtGZh!14zfEOBMA{bNNX$q;% zu0wdi#m60QZe#$ybNC`LQ%eJ!U8KO3GB_q7T1wIhv%F3;`(v?3rDJQn%VX1^9?@y2 z*UyG{1f@^2Y=`ttPo)(bvERp;FwJ=!gc!bF*!~&xhQqH})ZcQL9fQTL>sr9}GZXtm zBZW}Ni`l}qYtw0rZMg72kaS&8>tL89BdY31WAR z$RkZSPJ4==jqMYe{+A2}8kQvOy4=encx&13GFf1gBnP9Dqp0h+jR9ubRA1-_#C7I% z2z64r+?-n4ZLt?p`j~pWV9@w-U;`{;%n>*jCg|mlE4H#muB=oS*_LD*JVr4%$7DSc^Uf1`VvusV+&W5w@qh zXbN*B3}d6aH$QsmlS%@H=|M0|C$ zDJTqGmZg4&ME{o|uosA!N^MMWPmmpts@#8dr~!XMN`rK$|FviNlS2*ojbi=ZF2(yp z-x<%Zt^c#Wv)_L9yI1wEL;1%k3%~cB@o)l3Gd%y*b_R56c(^$KAGMuv|GDi9@En@` zuao_cYrfalC?kYdodDWC!RXO{t_7HGZkfH0x} z&x;*Fih&mtRJ9}EIWilRnDbY>0|@U8@En;9QVgv81G-($eLDcqsri$!0#f@c-2sF# z4EPfV4OqMfQVhJ>K)^YOk)K(WAjQAZ9Y7ev!1#oJaM-`n9Y7evfafeUkRt;v9TuS7 z_16>j%nS!91_m_z$_n|b_#Z4Vz^{M?AO-BX_!p=BKVPbUXRZQ`baoImt-$vJ{~PVU z??-l4AYlsx0txUOh6ZZN?7$aH>>z4@0ncG*pu}vzcSJluBlr1~0ncG*AjRBVz?@kS z+GjpGNG%uefeU=4^Vfm@!Qx~Cz9Is7zMiwtK#mLmlCFUDtA8E&nbQeU47}Q)4*DM~ zO;+GTgc}4#4e*?V25Q`2ge^7@+&RE=5*kP`kg&xAf;;z%_w}FG^}pBVFTxf8_$uiy zr|UTi4dlo`!WJ6{?i}Db3Js(f7-J0bg#9rJ!!qeIFcgQ&oKqZT+Lsb`hx5)7zqip`V4$Q8+dDCQ={tFS*_?BGZW z=k#4i%OJD6gGY!9wp-Gu^D$=kWG;!>K6G_8TOF}izg0+Lt)6T6#s@7yC z9_WeccucnPbAF%9fUT*z+#;x z9~bxPnrwO^j&y>DN&6@nEEsccmJ-IkmxXVyi1&-s^E=q@1CDzsI@(h_A_8$>+}Mo! z7HyPjBmK@ahTY{%D$LJ07QTEy1eWKRiixYDMKuf)9~GbSd%o*rmLp&+>Vq6rQmA+xJIY?yARmWr_2EX(5VL#Fz^8VG!pe5O1HJ~PvI_u{URGKk zBPI!louJDggFpkPWbrPc>*J%40scum*k5Ew-Y)AV%YOFY+9wyjhXkloG+pSR3d{+0E`&4zj1xZ`8 zVTGZy273F^VJ`p+qm*UJ@gSphd?!d{{t!QqFFBm{06daBUvu5H_K-!oG)0)Is8N^b9Vh8<(a;4;PBJ9>F_Mx)=*hg zcg)O3Y+abKFV|D9Tmtgr_}IGf=|W7^Po!AWE;IqYAdGjoMcql!kt<{~JDIt*@3{gV zytf9>C^IE?*i8p!-u6|#IchE^+KnAkCfhMRpIGo!C3iVBMTdwy?L_9AJ^*ZwyP$8G zY%#mB&wa<^k|GwLgs9d(w&@)%sRvMq0%9LFwKkV3v5q`x<#jT(7(Bb>S zDYp1Xv>T^zL;N5svPA&i`vDS5n!GX9krF@meni?c`>GnZsxx+|k!Yab<=DD}@H{5C zpPYvFKnjqoQwH6KPwMMI@uT3R@}p|QJ1-$EB5LZrOq|8M&0581W4p|5H%`mTjz%b}IvwzdMv6%t zH9=v*PFtbtrgb$>BzVpW2HjH0Sam!JC%VML+Y$s${6B;|{T*qS4wLwHB z&T@FVf9T4znniAC?#J*l{6@%Uo}A>qQMA&Bl^dP%Y0!5nzf%~Fo1!oaa#F)-W>7ZN z%mC?q6E9o5M(vu{4DMIY*UT?yxrtN8`RQn>PNY_BnH(_QnBTlpNJQ+1)=Q<=P_OhV zrJN%R|GY29i?)^*-xL4NG9L~SRiOk;-L>berOsgOh$y#^Xo<(S@&r2XEwRF?B=jX* zK;~+YrAMv&xVq0y#8AngD~#2IQVRlet|#1=YP%$V z(L9fP18W~yi#6rNvGcRDLKMrres53S93u4niwV9M%|Ls6m}PRAatR3)CvtE)?+>39 ztOnoO?Uy{_)I90@@ThN1tlJ*14h3(J_&zv~W9lrJwab7Mk%)}#HkTyAC^s;Xa)#ul zjQ@tjy{e^0ukEYa1%oE?2O2A!nd_8%~kyUwdHs^Z}R;(m; zKxJtdp^^DRad>yHWGI&}h%sNFQESR-?}0JQ@xBmuL4>-15Xcbp401W(?t?O25{%Ie z+#8C-$}M6pU`F!d{!xCkH0)ir?|yi8LKCG@%+vekCz)R;O+D#OuB&}WlJ3Mtt(^nOb2NB1tttlMJ*ADW?XMS1SDZ%en zBXs6gQbY6jX}?wYu1rh>_eN4IeUB70T>+;6Yk)vxSQLg*oOv^-EvAl7m)^a7hvZS; zNQe<^*LzEWtKNAFrIRvNAa|S}+Lv>gj~)9H!+O{r|7e>j6hDw)mrnHqzsMtQy4CPk zmg%$@y*MLu(T-*OuYE}|xu~f^vYQo0eYJ@Cf*AxQ8X;f(yb8B`!{L$dnu@%LK7_1& z#%sOZ9H^y(gYcDl(|t~LqMo2A-bSUnOV*+iGF))xd{k-`_zn>}K*vlV$18ie-&_3^Pd!Il1yuZ<^|Jy$Ae^nv_o|B^iza7UvvOrn?;>!I=`>(#~Uv)!& ztsi9liz)Y4DX^s#$dCWaewg(ymfT;Z92_jb>Mjso;2+`M|HB>a9~obNEI0zP!9l0z zF^jVSFW|3g%3sF%Kilp8hBEuzasPd{%L(j8{)fBW141*ajk=R&uYl9dY_TdtS^R(XH9INN}?@%||odQv$;%n#ZMg*E)TN}yX$9An+8-Bw> zmh&s|hR)0!>p1&@W0aXj&8Him%ki2&2T8bj*ZoQW1mr#x&i zeC*h?cf6ty$I9>w_G?hn9D^t4(X2i;W!7UY&*WWI8{08d-Jt22jasr%!bAhygilH{wRSlruHIV#r7qOvWPYfo^$-49##F zx{8BPC)M%pox-6k__*aAEviTz>IqDL zvY7r(2EX=s7CJMjZsB|-8ZX&!Dm)-kgXYV-^--g5v8^}iALlI;Qm^hSs@aH5URUhC ze9LcWht-CM^&-;_j+y~2&`vxF-xs5!i@B_mJCKLpw8s4>M2WNvf62Q%yk%1@rJuKj zD9{yZuQ<>UxEd|YH{q9D&qj+(6wG3(2#0G8(_34(2@w6HAw=M?_o{UuMps85%f1=K zA9KWXIC$%xWulw5AI#G~bf|Ae`&Uw|poNHr!@jnIF!j1U3UgR-x-9Nub28o{%1|vY zk;wmw76XqB_4omXTVPh3@u})tMP^BFG>v2mOU4VcGg>7wyeQ|lpRAyWXkJ1%TeDD0 zqXN5G<_sBi(bA-n3nf`&97o}^;IbGLi~XcgXC+0Y7P5~>8Nq`q0-6qs1xCjw9X`X1 zqGvVYrZwhY!wp%G_iZf|l)zf3bj+TXe>V`VNUj#jdf)r)4NQ!X4xQ3|YniANnLfO) zP<*h$Hy#FjoA{=!gZeG{pgG?nv+U|C8WB21nbZ}V@+UNE-G4Bz8tT=VOTQS2xj zh-x5B;A~KZ3>COxKik3r|4j#3&)a@I61={acfV)iE}`CZ#C#muHj*bVefhIhy>-eR z=S9=T4$XJd8PnW3^*0ssUbTUypN08F`t{MzxFuin_h@|TUzNvvS~b29OV)sN5Bm1Lg~Zd5dx=ZU}8Kr5yJ@(yle)*GgKNUQik_j&B4Mg9w=i zel$E}Qmx#aeezU1bH4n}C&(Rn@l(aE0i>&?}^ZE*pLXGc}V*^fTae``3_)b(+%&bZ( zBx?o(9b~purqn)?ekwP1XUE}t&8=9&qult~+GPF<*YKv;Pl)EZeZ+6h9*IBm4lI{n z(%&+|9BS>kZb9A7t`B>$>1IpoF_j_ApUCs3cQT3g>C=&}LTDkN^vnk;-{w|OP_oMF@w)ka`=hQ&vTQ;a=03$$r?g4y)+@aXCb4j6AjEZpGlK@ov{7qQ&H4 zX0l>6O#7V?eE~VNV&@WiUAe3O&_J;G@`sVIfGpDkDlS3nUU2WAlyye{YvGd~C1PzS ztq8jMnhd|@p*~}$-gu+4W*i^dy0e0wMA8YlNK*>S+UCBbYJ@`iuM$Zg!l*zqk*Ro&Iomp@fg9& zrf4w~1ia%eQq?ug!k_{KW|Z18mZ&4FA8VeO8Lg=6)+(3RC&U<*e`3L^l+~4h-5T91 z95>q;eAUPJd5I$ZGbcJ64eePaFlNBGlFTwU#_trD$n`^C-gfP%9CC9%&x#Giu;Tue zQ;0#FM7W?P;99x7<0w1(1-|;w?rce;<-rr>qEJF&Z?RGH>)sk@<3>F33zb>3>ipHdx|y6XTb57;NGZ zv&f2_Xqbm19G^8t9aTGu@@HS1?g#Lvvv$UAZQJtVX4UmHjdB$Pk^rjSd?_f&CbnN! zL0i%gJ4auTHzCkT%F?o8o`chwf6soeUK(2e9{I(7;fq>?rJ0QcrrQ#~W?VY1Slw?k zF9NY5J)rK?~fim?tL=!d>>F^hvoF01YK4vls3V>eMW@`bwD8Lykr-k8>^P5UT z-7NGY;-3~{3xM%^mWOt`v`;=h>zFvv1K^6ndeG)ViDJ42aWuPRLqy#O04H7M9}7Os z&Xs%FC^pLXp4meckI@vXRU}kUF;t-lSWcB9D`MHY?`&~jdE?L?eAO8%GWpPp`1B) z7$;0~3*rgQGpv=BTw3Ql=BPu}d2iTd>5bv-(D*|n(~t&)F=D&BJ~OB-aWMZ#?6V_K z5)^t(fi(=>Rz)+0!EVrMVL)xjZNbfYeHIUqtJ?$1w*4S6LNdnEP)Qxy&E^?i*~j?3 zO+GN(MH)_I1Ru)5lj2k$^1N~vYI#J>muc|y^*4TxEyvQuow$Y^#(pgV*^KxF1jr0Q zFUkG$mob8Fm(eqV4SSl4n+)eP=s5Rog$fU@m^X3nW%Oq(`3HCy6c}aO z%x=e6BO}Q?N?i-ecAB#VKgvbbxFMLimQpsF`I(rxk|1(h${j)SdPr{cmF;-w3Vvd> z_NvyLyb+1qn1D&w_sBn8VK^N&KODC?6&iXe zwEWbvX(B*Nq9`s(c}m-OsYxfin2@@hf&S%%HDzd~qA)s+5MJ}%9F_mZrOlyEQ~L0++idyJ$zy~;)1l7cqNd!cKi9HDl5i{*#h zQD`LMRY8r(>Hgojp>l7pS6TEb!4#Nt;Qqe@q~ za}=${O{y^g;ky%z(CIfLj`<8uAG7`w0vlUBp++-rJo1}H$StkD%Th0 z@be`VWerJ%X|ZzVsdJQZFNm4hWGtONw`eC}8)Y!%HE6o3mtNuCD&LD`TuBkev`E^L zeK_pBxJ){+50pra8B@aBE&2X{c(-ST$RuVJWp7}+&6hxdJw9C7#NP+KSl_c&L4T#P zB`^_mLmRy4yz~Mpr)*-Aqs}X*4U;#$&G@V5Z(@OUQ#$zBq@^W zeTr2Lha@&(ur+Kvp&EJlD$~MMYZo(GpEQ=4xh*+2BBeV;zC*24vU{zgb~MC4mKa)G z&+M}zNuQWgbF`GM=UrCx?x#s9it9(iF!JtKg%hyCZ7cOoXcJnD-M)vWFFk9g4Jr@v z4y@8Q%c~QHv*rlPRghUeJy7a$DBt?=EPvz*d#Cb4$I8(y`r5=Zm;!<)+yk>P4GpEe z=EL{iz;B&43-wGV!b-8ysYcsXq4rDWYV)~+=BDAaG?H{49D)Z{k{JipN>1J`vX}(X zVEQKe-u7_9N;?jf^6bZ~nr*WWSGAjzrqNkX)j)+!dfxG|)DR=p|P zSXKNG=kJ`_oKm|m9+ltC(9z$6FH0>0)6ML}rLsx|y9Ku&%2JZEY-`1qVaQOLO1ZSP zG|M4JVaqOQPb3o~+%TlWRG+8qFgdo@2bqAARyet}_b`#m&59}Ip_E9uKxNc(5=@2P zAion>F!F)^#Wx_}*PIgbhWm8@GmZy^`XXA045J7x`x_%@v7g3smMQrylOYC)EMcvV ztpI}e33K)=7(?8}`)n_h?N(0o7d2z1)f{N#D-_0Yf3O^K{cz17?how~)s+ow;m1L{ z4d&!&95m$!Ig5k%1WU#OnH{8ybXR4^7+YZbE?rz&Jo$}(W}&I#(Q;@;upTGPRrKPJ zyKN{JGCGQgp_R$}MrWy~-_Aqr2L)zYh3yC{)2ZfHMPnism(D>|a~7Dkfkq4IK9>%q67c+yWh9U|J~v=pw++)^b3B~J8%PsWdpv8|5f+E28<_T zW&gilo%X@X!otL!*?`9oz@cxb58&oD1n9GVFfh<(;|6}|aRYch>gjRo8L)r+$jQ$2 ztcvZov+;j8b6{B(u#V@yW)8F`n1J8?Kbp6-gSj~~C(E<>{3(O$SIyPGAo`@t@72^v zfxW}P(ljpM1^eY8JujAEWqn@N@+a;8jsggH&Y=I(u>UU7-~@j1fT{rk{_M{c9)BG7 zcQLR?gB^sU1^A6r`1=KXKH=ZRz>adE^*0yk ztBAB?Bh6bW`$1$VGMGGRSAJ;;V;&Sa%wH&;JRRLG_Qe#$r9%}H>6+3dq`$pr>z5Rx zLX(OWZKpc*@1yA^0lH!x{QS)g!1XHK=S6I4*sl#36k$H-g9Z!dIiHoi4;W;m(L zxOcuAs>YH2REYX95w98PD9fIf4UE{F&8n%`!n0_ZW4^~+iC_8PAb$gB6)CKkI{s)kB`9%ft007K%~kw}WgQW`H(nTvYQad0 zU&YD716)kWAe-ftrs*uzda+%zQ`Gr!&w*;+N(aW<9jHVIdJNs7AL0GbJ6dwG_jRAt zLJfSg*;InBTMBpdqPSR2M{5}Q7f;gK4(s^X6ihVbyk0?$3YW~)Esfr}2vB`|sjT8Z zGs1PW?rD4$J=LXdVF|6eQ^v?R%om3$6d3lHJ5*?ORuN*%+ z)l}_bNDl6;E22>5){Hj36it#_=33_EScz{cF6LtLuA?2`K)+ z>_d}^HLGB%)q!dl-;WDl=ISx1?EE1iUx;akViYq>cvqAv3-6@C-Zhc43g^d8Eu)7{dbB|DK*|+Mv z9Ey|H=`KjBmCF%BC{l~H?6*HrxKEwtmndAfqB2@04pRTcswX7lyQ9eIa8;aFj7@@QEH-@g^`apB*p%!N483hZ`~4 zf_Oa9RMuoEGCqrIpXn&%8K}Dh+EDEo_q1N1oEBFdwv5QSV&Y`c<&_W zRZt@g*e$-2q^;vv^Ku!YTvXp=YkV>TNAL{@UsSun&8nu*babg!_8t34rg^Emhkx!t zC^t9gLmR+SgjAryM9Y(d6KJbC9o zy!&0T$9YZpUr;b~kcCM}wB4tg)ioB4uy?_vKY!b<+F=Wz;6NG^%#=g1RDg%GMM-S( z&5$NXGW?OVSm`r|=pU0g;U8IAi-!j57KWe=j}pehmq2TDQol63codFc`KKZmq$TU6Y&?~NNG_<`NTEQ1>v7d5qrOU?a~z9Ii!vB){-ze6?~Y!e(EUPM8o>HTjrCC`l`Sc zf0i*R7=3V)j3=YNv=WWJy6YQ-V!U7+B2I(5qFyD0&7{UF6Z?b#%y^Mc<0y69u;41M zn+{-<-o|%RM02~&bVV-{uOj8NsPPip!`>jlY6bai>e+85uF*4Wi$(V5sB)qGV8|}H z393?rgG`7EWm6s?Y}^rNv6>8EvT+j(gem`+B8Im^rz7jfo#Hr(f^Y`@)Cu?JrM{#TC&NvgwiGg#ro{f>FHLcxp`1x!&WRq2e8LmKL|%{9Gl zCHyk@E;0#_1!sjX=%AUC&OgczAE=gooVQe>4MXqNt$YTi0lqgrjOtVK3|IWL;6|w6(DGsH$Yw!)< zpyX%Z&i!tdUEV+tS)2qx{+xf*;LUV%L3pOjdS=k<)G>SyG%9Xs-%ge8(ygOaKadH#xp`Ye#Tz%tN zF{4XpZOXNIx;;oTI)%|P)w37A=~^_M%FsXR2#%6wE}dP>a6;v~n>fpSs`YTP75?5A zO2&-AcaK#xaPnP@Mh&~WG)Kqy`C@AtQmKje(N2F^^tfqytJSi!wYMn0ORKj(b~Zl}VUyR`m+ zv^>hv-Dd;E=hfYl$5+pnM5T-2@;@SL>Q~iFh%>tLibi9If{Mm7D zUjJI0>b;cV+a1o;8O9-@dm$zwQ%6MWFgaa%E+hNX{v@7qhi(hm5|TGSmorP#9&Wb- zCku;9b9Vizu68=s<^CcuvV^|Hzn~YZ<-pQ2dhRVw05S4b)G`_6iQw@jufWn#**!*V zdp^RO>7Owykbott*{gD@;edjBJreBt9L-mU%m!$RE&E438g8~8AsSQ|;ziaMxS1ct z4#JaeY);S>so^j?X_p_4N{gaf5uHB3FzUPMC#=*Wa?Q9q?8CDTt(kd!Z2J^{Shsu` z9}jg_->WU!64sezDc0_8^)08)r`Hiu`3yW~++wkWO#zoer|0}Lub1s1!oSO` zmv@ftD!1P;2@9psE^DdEJf&k1_3q)S_-Jp4Qd^`Z$o|3G8$1XM z@Fn<|N*>R5Dei+}sB*z-LcYKYsfc%v2+L1PmCK6`a`lS<_kscN{eXnqK*Py6i22Ao zv*cGv0xLHBxJKS{b#n{T^D?580aXvX9phApi7UB=?3Y!oDAt6#07svZ%dHWo#ZnaE zmke!}W8=j`*BSTM$h`+F;}p(a@wH8p%|)?-)6R%gMy%J$V|UI|F1hLzOVY*aOMXx{cWm_$!EQW*$H zvopB<)7D>CNToy>cH*r1eX?2;35WPAUKt8-i|{;A(@|jXQPEBY@u-^|qYs;m=qk3Y z`rtQkmg{Ipsq*{3Tz2C6!fB+zM;b5`dsP$9sv_aaggjp}PT09&HI5!=k)=0RQsZwL zac8qo9$8~iMHqs7s1v2Dm|r<$v*FsJ)bGkrj*Eb zgILMVo0A@Y&AyD6U5k?Z@hx>6X|`P_metx9fO@87+p0{Mhmyt!ZME;M1J^<5Y;PT= zXU#~&7njP}K24e38A(K8NXQCoMZJEE|4v-)>ONa_LBm+2jhB+g7)ekgzR*2Y_*NL; zQGLPKCs#l1>drLJXxFr!i>*7YLR^OjT~N7@RQy8y$lm4RA&M=fBgtytMhu&O#zn@| zf6Tbt;{0}Zs!|DW8Uw2TXNDd=M@%;ldZe<~=S;6TQ}2hScZoRM7rgGCMBm-V<_Nuc zSu@{MIdhrKC@8pBc?sFZVSR=RsqtbV4ZFT^oj6XU+Z=_H3ZLEX_X6`{U@`{b;r@}n z^dCIjf8oC1nH4|USvlB#_-IG^tDy^M!TxtW+&>hY{V4$8m)Z5(as0!Av*(>-f71Tu z?)^giv4Uy?eU9Ax)42aO*?vWJaIu0gU!F5JL5qQb8NdXS=l%)cIdc=F7#Ntr1uP@` zi};TL5dTvHbPZ;)MKmCch1|de8H~YQb*)N;LtexSh01!TUxoTxMlhE!JiyYo^7%PH(nKAk3~vT91}%- zrC+vY^hd9Ba1%w+^!kYzDxPH#YxYch8<1Au`2W~@>$s@8u3=aNDFH>15~PumW&kNE z3F%fqq*GcD3=|NhBt=RI2`T9kDG`vAkPb-^DHW6w_|EL>!eNH-y1d`}eV*^1*PnBk z*=Mi4SM7DqS!eCFw0zi)%3UN*C;QRR6Z$%?iMLr9rp+qRbi~*sy8+{CJ<~x}g8E9| zpF5P(5geBZtc6%6JT{*2U3AcpKG4HY%9@3zMnSs)Dc#ipJy3wesL3` zzoa8OY2N9~PBk=)J09%G%y}ALSkk=MWiWkEFzPO=AFee!XHbrdZSTGEhlwu_$8lPO zRX%79c8Ypam0dzI`~EVcspgu7=H}g|&|_BCp)!GV>a_P));RooFAdsoWC%>e3o|6; zspP9WmanCpj+|XC$mEMFds-h6Q~49OSi)#H{#~BtZxF-_} zo>hv9*~Gmq_HJgXo%;4^^}xn>R^oh+961klz}Q)ClTC^9{i!28bG+&TA~PB0i#`Jy=JRjhi>O!2$VhxNyTJK{SMx7abM-;t5cc*O)Mi<6ZL zgfUPbBgK9UQ;;IslC&abyqtKnllgc6i_fBx)F&P-p39Y&E-=@I)f`k;D6@ZXoPj8b zI3toU|ITFvVM1+&h_qIHlOi3H1nVx6v)!MSf~Jd^%x_`KZEHvP_KjSqdVNx1hxQfU z;fL+3IXd1#>Oojtu4?8sy%*%)9!;ZDT2|1+UH0uVt_ht|jHZOu*OYas9d5?AV3~@4 z>sOY2#Xqqi@se$RM##~Pfal9r0k6&+9}?A>FHnl*bIqX%pZCEp2L^Gt zT0Z_De-`^z2V2LKo(Z2d?I59#TdB3{iNcs2rI?nTW~s%CtT?u7m23n*ajniaD=P#& zV2|!&Dq@gSdQKbYz5J|i6)M$xC*mkW1}OzzA-kD4Z)N1Su99ODltQVYI%U4c7g<>; zk`?tjJgSsVV=oAgm2ti+VZ4r0K5oBKEJn0tH;q*Q|97Xm9v*D z7H;S|xmGTTT-4$ybX^Y86W4kd@MNU@JF8S(<))UIVb25&w`R3cy1v{Fsfc1~X)zN8 zS%scPiRpTS*Csy$2K_|ChqZaWV?y#;6z&;Y60ypDhlaEqeD+z;aWhOC*}3kV7%y()5pyw}vby!#}-> zHo7XauoYcagE3!xYgt?$XWKQQ4fA>5+~*4z-K(D8^jlBY5mU5o*iBs{*>dYUtl4sM zE>$Fu;`R9BfrEpKW1gYGOcO~%KL!S3*iU{}9VzwlSpT*}bNlT2%&dj#i%YcZD_wW5 z)QA_JB)=x)wgmeySRnAdYObe@p=H%-xzb9XP`uiQ((ZcU2Rm&`<^XE#?IgJu`5jmp zTm?MahpKVb3htBhuqKoo`WeI|?qEMQspCwj_yZy+P
R@p*QOhPAwI~5C8=j6vgYQ}=Q*wG z{gUB=Q|=ts%ZqOY8gD<7ZVpv@ zd89Lz+9y`g%-gF)k~(4O6i1Q8N!Q%AaS4Y3>QQ!`bp38a`%6nUI=MPdQpBl6s>Uwf zxQrQfvOBiwjlJJzzH7b2#(A5S;}aSuLr#V*o;gv&PN{ThyCSp9vr{ARJfVG9>QeD@ z4aXC`T8xT^-sefZ4o_7Pv&}Ly8ZgJ}daa(|?CuUzNmtz)U^JVFYU zvX|qyUh_q06=yK#4GpvTROrJls4`Od*FI{Zw(1)s z(lTMU7p$*0>tFTOzjED{gIrx&$hm#9X`S-CL3f!dxog;DhhbxVtK|&Mi#5-8I&EBY zo&3?adW>?cUuuu2M{GQ1^t1AyPAB`2lRlpx%AmMHt?`59yz%oRr(1hGf27WjJU)b@ z`6F5eA8U~BNA!7b+fSDsb~gAYvH8cI)y2EyTB$f_GN;`YYo|Nw@Zc4m(Gl$symRV8 zk;)bnWeUFP2FJ_F*3ZeYt}f}$lICWImspuUDyluaym6A=p`ngxR;*|0aq>)gExW$x ztK!!JQ?EXkH@3GOKj5Uz72|P-;b`f})Hn>`Mv{B;DnDz?Wt-=EzcuE(=#8>^s(-$B z{#t}J4(gr&E5!QpUSHW!d)xa?v@OGy__o1=yPY2Z|l8g{zHq4<^r)sAJyj^9~Uyd zZ0#J3Fb=I%YAZ>(g5!h}`Lm@;oF?F|(|IYFmBBVQPIZXi$Lqv4u`X}0<5Zl#UOd`x zVZ(quqRSG7ue*iIkh^0u#T2| zPUq(okFHEOB2g#Nxw6(*`uyCw=zxX{C+n5|6Xx5AWTx-v5hFBXz-z6=40{^Bo&Q)80_3@T)>Osn7rS47vklm~Mly5C z0JE<)#l9S4F4Z>PXQOt=6USGI$&2u`yF6Z@i-hVTx8|vIeU-(;fZ775u_kJZ?>|?s z^KLp)S$Y^Jer<_6n7Hv(NafoCOZmw{t|&_d(OEav4Vf8iJIixYA*PL2nh(w&w7qxr zJNuCvqvz|L^9wb*Lz+M0D>Q9TXUH9DwQE0A{qohL4>!cxNsVl43?lGl9Cu!l`%Kfc z$WgG%)*5$-&aZz-ri-4eN^Sc%88?Kj{h)t|x< zhktxi!s2;E*n9k+qXn2%(p;a(2{-fPJ@JPgG_YtDe3--Ur0NV6E4X&=-0Y#wt;@Rd z@?mMt^cYzcW zy;5IGbLFY+is`rQ@0>q5G=61E=pmDsZ{4^>_KJ9xtDkqv$iK1N%{Yi#UCgLr7-w9% z_r)g*V&woqL#Ign&DD1}gymb$ctj$n)eqLkSc>F`o%G>5X*Ae($Wo`4=%hDa9L6Dr zG-6iWDEB2N?nC}b1lDJK=Dx*TIJr~TnsEJscWFnKj`Z0%p*#WNC!A?YbP7~{!Y~Y* z7&@|G>iV}ozjBd9uH|g?Y#+9}`JF3I;HjuebLhL1ah^PpKGXbezR7~-p))4-xaWDz zuAejZV-6U1{9+PT&v}8~;1ffAWNz=~4o1>9^=vfH>_}A<&~Fk04`;}6SDTm5gIat+U@z!yTnrSd#0%x|+V|j$T6_ULFqD-a+7q@97`6BU zT3{HIl^?1)upbyT;S@Twq0C^yP|BkHz^FNW&;di++n^}5{jjLPPv~HIh0*g1wfF*B zl6eFGZ5M2ZlYVig1z))QgbRl1;#TU>4^Fpbv1fd|l{S5m94TF~=;DN&U_5=Tu z4f@-V@Ipm41kqFn7CiTeLh1kak&Ie?0WC0;B@hNh2=52}0}}>M@Wl%$(|%yo zKs7YXh6?p?3iF~dVW{;N(4ox(PZJ1TSoY8S2MPwS{J@JQW>o;S{sP*W;b{WVrM*Kf zz^%8`tn8Jy%2a(|?x8$h|WrRGhd2gM*yITqZ zKY)a^^SaZw8(3E_%a)AeomXO_e;GtDuvLexKhggr64Nq64{8P$j8_uMPB`xa@ zW!aQc2^U>?#kAzSh5RY}Q~aa)pI=mGd-D7QO^R|&wh7t5szWDvxG3p)ZGYcmL2@S? zFqDq9`)9M#R#~d6-_fp5ByI9?o2{~J#4>tnBO!Ns{qoX}t`AjbGbS43oF;8ASiUAE zXns$W8B%}Iq3&Ms%}2?f%X{%k8w^hK1YD$I#ho5%b4|cHqP_KS>vry;dUb-&8aBTC zBt(z%vB-$u$WZ0D@{4)6c&*P{r6p}GEx_7B7*mMItr(eP-7>jUs>DP*ZY$!3n8-Uu z%UE`^=sb|D3W<@@Xy_bZ+~AHrG28Q{uaM@m`kf!dhv%(Fh{yYuCtjsvdW=5^G22{v zNBMDeu#tq9+9CwX7~+?P=Z$Bx@KfQjt(frEv|*o{RcY$X`t{UqjUAD90bd;~m+y(U zYMwPTcOfqwnj1KJ5c`NDtvv$)9_Ok4t07O1vn_D9zGcK?VKJu0SY@Dj6o~m+-RR8s z>svZrU0L6a@2+hV)$UBD8F*zG&2Xs-&b29eRdX~HCKPWk93V|?KR0G_!s2B({xilz zJEjx&PhS02KSIj*sc|xt;E7r!qpG|9+pc1w%_v&)gB5)1d7N`jYScVfC2g%9pS;d! zj;!Df8g!>#4i^wiynR(9ldSan557{buMerW-d>%R3l^)?#^S}Br#YdcL##*L?S^-U zr=R)DCp!$bO6p^x9g}pyIQ1q;%L->1ZStOytqY#NcqPq^n?Z@T$Kr<}&**`W?~XG0 zluCrQZ_60)6I>FHiFahtP5Zct@|#YPy%={k*C$dCy>s49?T(O{npx_mhu8(>zGBm& zr)^@lUN$wRJtOW_pEr-4sZk_)MKUvZYmkRO`!4gMXJJvLl2=`&<9q&!B2n>89?p*m zes+mBlsjQ;Lc|;s^NyG8zWGnziR-HCnHFssE_F67F7hgRN-H7La!rU*z0hNIZn>MT zJ`v{-Pp)UBw5c!MgM8aF0KU65$Ynap#FSH;k} zV$Mcj5KD-8K5q%DdZ?*qC!&oz>i+VK3D2rdVz-&+Ls^HXbAwl=9yv#a_MI8mtLmO? zv#Hvif3Y3&x&UiJ&vHvWi0%es3h(<(I^v@-%OTNDOa7O#Z6~yD$>q6Bbfw$t6({!x z%j5?gOG%mPWx&U4%DkKAw*Jkz!14UTx2T$nI#*}R?IV9S$Jxct(qYV$bN{fX6A2X4;ZT2zXD?3Vet=W^S)eiy!nW<^c^{h#hH zsdDddjYNo2QsHvkn@p*jwEK8Ew&{)j$zG-d_!)X`8%0qOo7ldhFL15h-JD`h^5I5A z+VPTy`4YgGqK{WevN`&GpYCABlg=a{oVA-}IrP&ir={}RRkB7mTf?yE8|(^i#+=ih zFc`MDCJa)M&X(C`&V?0SaEgw2@ciM#au=b&VB)v42|gw*NiYSwx#%10h&YBuKbpHL8?R$Ok`#McDir$;LO>}h^!npN`O0lp@k7Z+JvGw_? zGsXm1k6gPz5hrDcnXYw6T^;;K_Al37d?Uc&c0*d$H7W6req%0!C=bX~=W zA(mk+$`Z1}>#e!==q0m0X5aLD?C|ptT~mIAM;wz9i`F$pKW+{(;7UAJ*u+hKJm`+4 zE_kzu;lUI0yLIkatJ58#X==xq659zkKjVZBJX~T;S^eaVSJoNJ@v6U&Z>B^3jl#9= zca3hU-A1#YvTpU$%bh(nH@#tJu4C=_J>p_mKjaDV_Ge9xel0(eoD*P~mD}t2D1AUh zyrjo#Nzb4>S9PPAgUW5$5fh(|%1yULXuh1~dpgVV?Cm-G!$vGRkZiv3Bp!d^iR$OJUZUBZAFEr{?mFcnKHvS$849qkl|B_nAFB0gE_^5W zE{cp!_U!b7!|RM;53!gP->+;qd%dsAVMz?i#L zb@4v?DT-G_18xx`n@>dY@99Ur4%R1WJofda)<#c$qs<6WxfszG=^W{jv%}%cjgOYb z2H%KuIu~Yo)N`&w<(Rv#7ia{J{R%re5 zjCxW)dTuX!Wrv91CrMnqW2AG5ZMazlH?!*=*71L`HXuE0I3*e9c(%H~#$M2jI8eDm zMMau)k(cl+-iyGzB?iw|c%pLY7j?E3bf=Y!-yGZS%e=Xo8PDoxGJWJ>T9yg1GsmPU z*_{_|E(A#`?@aD--%5`7G<5L$MJZy-S7&|8myDYUi#HP6)uV&LBJUoHLgm482k) z(sLQDjZLTFG2JG9c&TVaZM67Chw0(l_Lw(EFflIhsU1ok{fdjlduNCl_Bi&&%TMA} z$@bsZ6eHp!y`54Ae~z}1EprrieQWTcyUAU6$`ps0+X6YDLOAqszxhpJu)- zatA-t$OjKOm?@M;HMK|wlwU@Z1k(lSZzU{HcTS8)xP|B^HrpC;`*9GI3{=OTh-+oP zxtP;|%gp;cyAzMODtP(UnsaP4=B*>f5<2g1b%z`{Eh>rkFvR~rqx?69np}1m&SW)> z+0V^q)p)~qxmEOnx0&;(_(y;ALmO)Od7kG|ZW?M1_AkW_H{9-Y-kN9|R9h0GYr(mX= zzIsc^9*2#L@6}2dT&FoH`q#to3#fU~lNQR#~mAu!3o=QUg zs6PY#$ffHaEPCFOMZXlsZO+!CYoAPf9jDfB`gLx6q##o;OYp|YanCbVC)eH|HH~9= zo5%LNqajaE&8aY8kicTbKT*l*l(of*^(oR&ebm~~v(>!cmos&?k1n;U z2PoxDxL>za`PskJYAu`RrAr{$^@vd7XTUSOpWl4^MYvZ}ua-I%3*Ar(lU<^Xbx%lp zBOm@yW%!efa{Xw0(wZR0EyHRmIXk0=bt5fKWgfyrxtAYK>OXz?jM(AHV`<@jCAQ@X zA3t;B$G7q7Fct3~jUqT5Dx>2f!AQJ4>}S$k0b7^gl4IuI?~R2al>k8Njs5E>0?8W- z14Re^V{a^C7c2}^gwUXcfl_tIB^v%Zx4XCLKimb&3vB>{`_lx3;qEdXT0Y2CC=9s* zAdI0$X8!;28V!H%g5|XkvM}KmurM((HsKcJhVckM;fuzmkbj1k*Mwilgb!vW$ZaNQ zg1l?=FK+xFQodW9f(LSlKzX=ndEgF1D9;!V^x!Nc{J*yU7h<*6HD)INc{%aGa0F-c_53)(9-YFRB22OPILbY}|;gv=91EV-z(E~$oGoVa@ z`+@&SHUCyGet3;x$P>RG_@7AL1%}j%7fmS%7-~5Pv}p4}%NtE$1sG~M2z0=Fa4U(X zQUDCK90XcmNXq zyvzU^&npbI9t7H%p)v#LJg+dQ`uV@l4BtnN#`6k;9CH5-4Btl%t=#<#`vVPw0Dr@< zKd^qh&^~f>o>v%ZMF?~Z*`Q(uSdzjCu#7-+$LCR0qPHr*d^8m7MMtB@N87Y%*Em;#Yo9slM?u(j>;(EM=;MQ$SuG zJKCVQ#bj$ClRP_ciLCB}YKsGD-1_sMCk_+r_&bcw2dLd8=*-{Blykh?AM)Kofa}Js z04MR7BYt9;%i|V3&zNae9yIm+c=lx}9WP~G-Rk7nIiH0>%FmD5iT(1gtT8yX%Fy03 zZsnu>=pZX>pd3{)_uY(VhpofGEr~XopAAGA$dD#3SKS#A*#CiCt7Ou zp&ylfCrw^*=v0dHFjx1t-hWuj&3L$TJ!Qp#*=3CGUEun2a*qe>TsL#L1sd9daB__8 zUR*YwBh=|un17Q$+Jj+tivP=zL1nVi=NAPGuS(mr2J&O;wfwXabrz{3D!-){f~lcP zxt6PJ-IT9NE6!+SmzD&>4X0_lDYi8xS@ZPp;Y-;Tr;aKT`jS;?3#&|J9jQB~()=|3 zDZfAICAyq~@%brbY~D2v7w_xd#C(^`mUy9J$K0=zsGeRflai6UcMdBO%Oc7f3sWlk z3&H)J*=5Hl0g)T(rn7SVTa@nt`+LMRkNR`RcVw>@AEXL-{Fuy(n#fM#aq8(XhG%%) z1Fd9)mn3B$qo?hT_$tFH_B{73+L+BL#n_(6#8J{M+g{*=}4ouTG{@F8+XR0 z&Iqrc6^U7TG@`TCVtHDf-CJ1xl+QQ(MvsSysuqKHCEqn%{cd3&^^8INV)hwjMGj_l zd7fygj;_i1=@NH~o%uT>2`9$|gq>{(95QRilr&P#gVM2sEEpYw|e7-`Rp<_7lM9V>l#RcnvqV3jU0~KoDSyR8 zMmv{n1H-l;0V%9pSpf)Gub_TZazK5)@ZcH`@8?e&%QBdYU3-!~W~Ql%D8b8kD4 z-?L|-vC}OZ*>=}hCt#t$xMVDCCiqlk{UM+86JE!>+4_xBH%rCzDf?qws6~r+U_>v6 z(lWPJB!r6ytRfb)JYC6t6mHo_>r)T6jm*F%GLs|@FZA6{5+BREbz6DvnWmyFa|(8Q z>;^%ls_dvS*lpfj+fsNTftzsq6A#gi zU~zLciKVYUeR5wOtj3-aEK}hFAS{&jw z^*ZktS4Ha|ZZ18%9hlWewywXK_ZiQ6<`MY`(-R77cV`}v4B+cZk+NZ(cU^pwBKvf{ zqH{{OHSf3|V_J=`CI6aBl72L4NaW@>9J!3+me=vAd%i~bj``)43+nn3j*8=t$P8{V z>V+EO=!!MFsQx7XB+8)*m2JE?Gw&%H{lWG1Pzc8Wf{WCq-}p(>3fvM>)7Q; z`S`Q1m~6Q(CS8maIA%`hQ=`Fd8b>c{hiT8|we%*pK%1z2OE-{2Qae=sXh+X4?|P6Ve5U^nBm${*W7pCa*1%clJJddW1p-|A3y5NdV1aD?6qe^Y>Fjsx}{!K z9<~!c5?p(yo{84cMpZA)MlYnl_lj4%YOiH_9)-{*o_IiKcY;xp02^7iG^GM#xRziT zU9~|q(X#6-_BbO?kd4>y6ZZZhyQCG7*O+h0Sg1!Q9Ft#Ni@(kzB85p#5d6i;asGfPYk{4BL5lc%z$8*~r zHTGWNg{A|{Va(X4?Cxl;KTP=XpjD9F^1g3#E+-jAi&6SLxR#dpQ8Eb~6a)<) zRyR(Vq2+nb?Y-k)Ax#GwiC)1RSMIoMaRuicQ!^6~ce-3LNV_}k47-@>fI{2DMrG7geD~-P_ z{G*#NUa$Gq>J=gJip^H2GV9H=6pJC|uB@XijMDMT_Bct=SUWnt*`G_DXjU@y9HQ>e zWL-EtLGY7sUe#5k^{QiJ+4$X|LLa&pCAv%4S<~s1o);!}u-sJ}go2jDj|nY083#(I z)7A#K8B~(XD&9L`_lo>gwKe~bn@-z~;nd`voFttK85m2rZVztT^ag$iTn`TVaHZVf z%qVGN+uSyXU#(S9ft;iuNtjK}Fc(Y6E1seI8MH@O3jJzt%i;I<*SL_JIaq;3;cUH- zGGZ9}@dZ<+c&u2Yq%$r1A};ITGeSY71B>CJ>I`a)n)Df+^2Xm|a@e%^u7CKR(TV?d zVDQzj{3E|dr*1_KR4(v-v8tvJZa8&Kv5chnakuyd)mTMumdXT|WU<2&rj0@$Kv}R9=*!7*L znkcKFr_tWdK1lK`gwbQO&u=TUud?{=fWCsEyQq-l*HRX2^NZQNA95Yeme;H6wu^_| zOBfVU`?hSbwxD_?`hL-u<2NK_M{UMc7X{`kyF)MAjaRN*#*au=@4dl!KHe#a=KMj4 zYZC2Jr$V`}+%T5vd+q3B8Zo)Vct}AlVXXDIX|Da3`+Uo9HKJYHwXlx6mbz8y-kK87QOi#=m^-WS~MpkKw4El5>Xp_Idgws!s02 z$8`E}pKtQS-OXN0U<#_HiY6Ls`@vODY}VbBlx}ppZUA@mrsYLDvmfm}aqFT+7G9GM zv6bHbw&gOj>OA)tGrB%zRDLtby?|4jS#`0hk7U$DhG>ByZ!|ADw=QZTL$tt9nonVL zZe7$whG>EL;NkK6!+>ERq3pjbXQ+xQw5ZTHSNCqj|D7S>g^~{lLCUnBVgF>a|6a~K z@aSc9K4GMMg}*T*Jn-mcbUxv|1z`W%`~knx1VE*1kgDALSAmuw=5$voe|z|N1tIJC z#~wZ?n*i)vh1Veo4F#-8%J|+#<$;dM z5~J`$;UvlBD2#x~>Gc(d$uR4WqNP~QDJP8CqK9;)7){98Nm~`~oF^waM{FLA?R!k- zL~2T=o^-?CyW4-%@L}rU9%oC%A;n^7&Irh4zA3M8ulC~I7G_KF4q_cavCym%wmT=KaKF_rS_30BE?8EA7mxrJHEB`Mr-c~)knWdRPUa3_jG1nd|5*^gvK#&b;S)iJy?tl)mxcZ`r$#F)M{ zk>AdUuDyHgf!rXs39aY^OL&6~vCjZ!pwDb)oQl;8i(}E}Soj4ZsW`~V=x^Qjbp3gZ z37)=y_D9#Nskya6f#Vo)Gm<6xpVOT%-7E?9H(+7yf_;q5uw|5O!MYGK@8WLx6jNKA#wor)AC72+aor*d1 z*!=d{t&LOsYZLD^O;}GRho(&|YM09z;xi;$9aRq?f2L!!WSRIxF{t>`?YRg7CtqK! z%24AJVxLrVtiy!Vc&FPB%~JZhiGH4`Zj1ma*4rS@ zHm!>@rfiFGt~Wu0RVMX`se_oS^vF9molo`Qr%fKr-OyW$3x1J(rQUQi_H?*>9cgYy zW4n_*d)Fpg>4(@E%{UvwWvYW7<;VN8g6GnA414UmwdPi;vyKgxzAoOYa zI6p3%nL8;a3y8$QungN5;s^+-uSwfTrGI0)Ksr5i{Z)H-PwtO}7WER!qtp$BIRwWE z8q(yOzEAI^91CMNIP?rbbQHDw`aXxNu_2^ zO4GE1?d!)N9qeyBb+UK5RO9#qj7ka;*L$akhicrdDMJW93%!%0sF7;?wnp#Q6PaEx z`Iw~T9Nifvu4wGSuhHTs+s@Al-4?s`gfuKNqQ|B1RMtUO-FstUmh^qWDR?j1+Oa%4 zsML1E+8Zwx@PFpvaL~RR;(Y~QtAP1fR^+fA(erR0G4C#qH6M)XVsd4pA8YLSwQI>M z*d-?&htAV!GheES6H?Z*Ip=64tw~b&nSbVG9x}QH+?X#Jz`~8{OtUz%PL0sKhn~YaW}$BI8x@;FUAwf zm~CF>_N^k=Y&mZv!eb`Ycjb^vi~vu!c9%cHK{6RTbp^(w@3S~KDW>)B(|BWbnrB$H z`;DmO2Nh<}T?uPjewi~-``WUw{?7f!Cs+@e>txc7G--(f?O2e%e7rU0;Q0TCzrb}|u`NvULnIxH%<|(=} z#HJc8ytU`qKjjf;@OiMEV{m`&4b!;KX7yxKbA0t26P{OmD;;5=RmK&aWnM%6qVq-B z%L=Z(cdY7LHhOL_w558(3Jjp$X&Ug}6h{OtKdFbWJ~}gXHrI*~`|2V4CeqC2t%1UO zS45}>T;GYT@=I?LNtJv&!Xp_L**A5>>7ZZRu*KP!#eU)stru;ElUrmD9)9rTL+7IE zbb+P&vQb$P5tq;GWMl0$;$hWiHXC#jF}Xhyvl6UDsa$-YiAT>azB=`g0V``UE^b0B zX56Udo&1%96?d8owW@k$?>-oLG3qAaoNjSaCu*>H_C_hS9oKh{%^9NdPnxkOe3)cp z^r|bMt%jvaOF?tOlM$7VEpqqXE>+1WPfQ$tq43c`X*rjz3LO5eOJ zCuC6&{9KdV+grSN^|?6Z(T_iW^e)?o8!;EgOgg$<6sq>RM#Xh_$L6Vs2`5+h*L%0( z8?n1t&frrTy{wzp=6l?8ukTHh<_24F#uRf)s&Q?4VdhQF7qN#)ZD*dJN{t{CT(NU{8nk6G^NexC zHE`yc$18zwzb8f?7G$cha*L07YK6n#ch*$>Ct5bkc2tW$)dI<;Xy?5;X9om_ zzb8Eop}FDiyHWz26#}SDDx6SL#)&mw6Q_=!3p1o*{{f89ppu^q{9({+8VbO(PoW z1rpzrvIRToORRU#yfksoli#SkFm+WjN20bYkZ1nId(1po;bV?>N#a2tpe&v zDHu_wR+x`Z>FG~;U;MA*-gl!M>1ESA%6L_LvLeBe`!1JJTzi_i7OiW z^*_DVKj_ElNzzk2qxtO(p{irCI)nShSVpDx>5E@JDv+M4x*B;?Sf4!0sY{sRt)m!g zy+fTqi>$?jQowlVx4Zc!*{>taqso~59f?^2#y9^(y^8&BnGTmJnoPgJKCmb~O0kzx+^pD{DYC5B5CZ{)aJzyODKJ3=$L}1Vz*d zL66`Ntx(VhC%4f5T1+7n(Id=fVj(ERBP1*=XaNP&@mQFfLxna>Ow6IMDQ-S5tjs@h&B9=)PN==G ze?R66LWMkFXmSj~P_rGt&;mot22GAZ7;3fyw7|T)oRI%)zjp#P+W}f&$o(aZCfflF z3KT|mf1yDeCIopZ(fCvZ_i7p3vw;p421R~BennKD3eUbEy}iJHM??zp18cJnc3+Gh z8d!eFqk_(tBZwL(w-@$rA@jrCl#ne&ofw9iWdR+<{E+{O2TdUk7{va6Wi>p7r4Txw z9cq>Zv@=8gD}E>fd_UTMpxAuE&_-c&B%}Ji(C~{7GLGo^h3Z^I2MqbX_@V8(`>;k$ zvVe|cUMPzP6z+`%_z(0N9!v?3>fJx{A1F32lpBH<@@MV`{sRT$1(E4!JdLPH7SPfR zuhxRbdk+GiR*~?P zfg=HCbAf*YjIo1%1Iz*^uEKu;WS#e5u&X(6l}4v%NX&w#wE4?YAWi;TqIU(T3ZL2y zG5@ch05O1*`!AdX!TzSdi~7maYyofH zZPA7QKnTlr4_XK-`44EJ@N4(_xgRZ{BtRzM0OSPp!(%Tx`w;{S1@H|l0fd@?pO$c7 zgoX+3*{Xwr^xuXANx1}nZLmSY_dlC*&psQJDG}m>uDwX&`?W&`X`mgdGAuZGjT(>xCF*mtkNYB>M&Ih$(C1w?0ofwN3Wfn~NWBm`1cm|FfL;i2 zZ~{p+0N;TI0Bpd}V5U7*a?c*9f8!&vLj2mogrpEa=qOel2`2>lfIe^z&;an00A%pm>V2+ z&mph@7$TVpKpBt|Qg4KTK*Aj~1B7;aqtLwD4Eg{`0{($1_lk4Z;O@Jr*}Eo?uY6Dv zH#93k`PcFVa{vy2d4Y6y(E;)X^7tQF zfKXhdl?ylxB!r~O`!69tW}q3N8M~a?uMdE)0F&QdI(C7dbd)6uBuG;lG z{Il7G_BSKlF8+!tMPjBjoLHctU`l`(LZ%2pkkkbsYS16);tjM2(10*~fCj+ZU7A5J zFwZ|(&_B>~B)opJ3imHJgc$^w{_(;Cy#Z79$mW-AKq3w?#a~LbXF2RzO>~wPc{%VS zN$^*MEs_Lf;PV3xBa|6jtpKt>KtK`*AtT`lnt>#Cn}JGz7H|%57>UhbMsN9Nk>&<$1&D)QyJPK_An1r#FJO9r&3;`2ECA^44hN_K&7e1! z4~(_j;XE8WJ@`Qjeo%rRcF!S9E`nw-)}BSWC!BfzBK>urj3V7#KMay|!PEeGu;_M? z(1c?IkpG{!dhQ8p-jDuX4TXY}ku`MpCIX2Dz(YU-c*sI10g_e$>7lT6zc9ftNV)+y z#Jg8QKsP`~un2)>*-4U`XPDZmc&1`7;~u-glPIiL!R0Ommm z2%rs+^FUYw=mpiE*>mVUAu_LbZ*h=#4OSfj7eEcb6A*yJaFn$MumflVpk2BE^?;9H z1SHlYc=b<$MOZ=v-vJ^>*nnQ31%d7^4q(ZF=>dL#qX=1m{zzj1yueinoCBJ*JJvs4 zyAXx|Ua>v}S%q#3M0X0X{!aY!p<1;s9I#*?>oY5YQQcuvVq_v zuoQ@&z-H{ZNbHHQ-%r3^D+|3uLZ)K(1_Fr+6*v_DClpJH^ymuE0UgjSD#UUD-vF6_ z^gj_Of?Hr{aM(lr9?9)mu7A4$5XOE0T&Pp1GE8502zQFK;M4D z4X*DFCwV0Pl6-4^&8ekcBG% z5CQ@X1Qh^XfIZR^DvEIi+Ku4cF4YKzBIrjzBFF@jAn6-2s8D0Ghikf1sFV z2o>7158~fghkTdyE9wM^bxLs7@xl+g=m44kH+EYy4xR|Lz)M{VK5e$0?de{(g?O8m;_cQ zVqt%`U}(?_VH!bygkB@wHw*45+wyN3B!tY*-3u*R4MOk*paWJWXaj@*bawFt6o6)c zFW@pbAb`LL1j}|IfhmKc0JU=AgJQBpLmRBSJz}8$K^!I6|uc zYY^%Qr~vc;p&^+-&=p~o|6(e9$X$jb1PX6KEZtu*H2MNi=#c=FQB44HI0`_HSUzZ% zH9r((z{e|KxEt#NFT(uS!>c~L!o~ml{8v0cu=Q6-88}<_H1B$d^!d2=2m#t#{{MvV z|CjRZk?7;e$BJ4}~7^0q#O$K@sDE zaGpW^;NSW8nlWhn-4z5?`GLX7f!>zzaD&hVxJ3BiqeCeK1fbW00?_L$A?QgI9%0M} zr77TpavH!t{LteZ{2XY58%+2)Xc&0gpL{@n2xf0zIHtl-IFbOwF?jl6s5l!yO#sd% z=!=>`ls#|P~&7l7i4;mKG9pg09VC`|@Dz#bkG39K^wFGRh70Q>`y2%QsvXb^%+ z7YefmbV1w$v_Lq+{{lSVv;&-=`5=1vq0o8wUjZnH0`LUNHUj_63u!kmblHVV4X(X# z{(yc^A^`9g4hu<-AJPOqpjl8~NNVt`n{a&LwD80B+BAe$6rby_eeOK8f_!|tKcH(7 zkC33y?oY@t?tX=o4gLzUsbZhnBN&cDLk~LNI7%mR@?7xGfTWOtVlq@NK8iEX6W0eY-E_>rOhynL8hv@e{vrc{7}=?eFZbou>Ix zy&U*SKTf}V2l_v|U=)k7O}tPo-9|0jIuaB-)%t{>ZF_cPU`-;gETZaBIbC&d#v`6P z+Y+G#!D0D6kIIAd<8z*scULo}8Yk{JB!tJ5C#44GKV!HvEx~De^4U%%%THC2^B-Yp zJ6){}@*iqHd13Cjwams139*(BL8$J$EZr%g*bX_9vlEhMe?Zw2Duv+Zb#O;`+cI^_ zXqw~+mEDummV(~hc8x0?{2(YHoXQ}h`T~=+Yi?yOw6XTD^lbEvA3kjOL*N$&oR+Cx6_oX zL<{n5KI^*fO{!byP^JGiX~sqVgr`{ShE=Gi%?jDNN)Ux;=Vg07G2-Z_6%`#7)Dlt0 z4j36^nk8Q%CXt`%8H2quKT>(AT|P`T>5&8r_wpT<#N;@`e1c=MB#gE-3_INME4D>6 z7~6M)*qcuFJ+e7SmtCXCi`#n4n5NxIb?;;PTHfvQ z#xYB^3EFw*54e5xcoo}~>1|D8o9}B1M85^SCI9TY$&~D~x}|Mm$gf4p*cnHYN6OJx z;nVT?<%^Wuvdl8t$F`$VQOF%G`cyDQ+R zni=J2&J%O3T|b~|S@fLx6XW+^to`bgpPzYj`Vg@|dF9W#3aiWCTPNvH9oLGmk!n`l zzW20)kALNOo#3sU`&eP0oAUA5m2O=#<7bP+xN3;2%p^oUP^D+^bk*1{FA$a}4Ei4^Qe*IPtS72K;onmp9W9?eY0Y*XKNTSG^0>uP?}ws97{Mgj2iG z-g(k@k0I{LfaYX3=Fe%?rVE2^ywN-x>ED_;2yG|YK0VR%f<2mI{4_xIRe(5ufpb!k z)F5U`_`DRwiQ$iTT7Tr?;>t=2r1*W*F_6P~Mx|1FjJ5WeYlAxZRRSYd85V1nJHa`c zx5HUjvSTM5`b+yiSE|{#4QbHr#NPawa5zy>TIl`3hZPMK(-g|z7NZ&RZXCPIo+0X> zwAuSy|+4{IgP z3-?@~vDB!|e$v27w;;;ZuM|7$=ylEh=HtA_2d%K}E?f|QSUgYGR1iGmB_W$FnbE0x zU)Xc>-96Jxd~!agva%7Gk<)4}8A%~S{q(E&Fh{(Kx0WpV5*$+GX$8+V#p#b66lTBP z2%93MDA#yFtoI^4YAwe}?D=GrPv`}W3Cx3(tnQDu)JBdjPCm!H+n6EuGNbvC+?~$F z*WL!V^)HnW2c+M&eH+C0`aqA_DcN^{UdqH5+E&cOzdjhkEH)J^dvr|Aoj*m&X!a<-vsYz_mm}udT2Ro4eVvrxy4<70^mwz@uS zY`qeH!F(eG7 zFlI^!5@O!qO^p*Hc0Gzu^S#p1R2#dlhggQ>U=C^f7-ruhJdE)A|J4)Y%^y2O9a!R5bOrN^ z@#$(?&Jkq@?6Lt`iw;l0febZ0G9|6^ZQs@|`bjXrbYmPyrFRG^*L|~UJ zh$rGd=6lOgjIy?U2HGV(O|cMYoE`U8_XFCpOs5l=HcnWt!{${$+DG%$9neARxyl8m z4BQ4YV9>t^`9in-)_-IJ_2s43j0%FNyMtjed)0*P1cf0C9DdhUlY1W_EIe6G&iqZz zn!>i}ytqC$NM*03N9HvBu82Gn-s<;)7l4U4RD#-1r(g&2%ZP~MX}cIQA(Bj74#`2q z_VK`5MmQqtspyk7Q@foPD5KUiD9b9Sqg~Ls?V{Q9O8Fr)C{OqDNsKm*{rLnV%}3<1lQGiyy(c`^s0lJl?1SQ36*4V9+Ar!vqZBF&^C z1I@czfoM!`d&K0PPA;MZc;+5GcJIx60Gkw~! z2rqf0PKkwHaKXB@8O7Dp9T<>ZpBZaq+zeFn)Mi_P19|ds7+_tw0CEQ!;_wP6gQRbF z5_DnXPb&RFD_YH=6C?`!yi`nb!^@2cCL(Za(t6JZ(2v}@H^(p(x=$8ZpN~#J4&NdP)Q7FnrIdTTT=}yX{j+rT}pjRUXqymroQ-f$ke&z&;zkc zJKr?=1h-fL5hs6Z;&rGQj_b35=u#2N(jC=^SJK?PAM7bXB`PE|2v4lARc&x-LOlWL z@7x2Lq`z-b+wl@)Yv?u`w}g-ZpxSu&V7nA-EKme=tg+LFAuFgFhu9gy<@3LZ_gikX zcMAm4C9ATH>q|4k;hOH~181nu{KOxdEs#O{%{+6$(WtD8ewv6SyD=Qeopt3G?=%7#e}5ncy|Y0{O!O zwor6!CfKAW6Jr~(<(i%H(JlK^t*=XcqY(`PuKK<_D33N&ydd>W{VBoGskVR73altj zy=|+50>7}eU>z@1uC+7-6E5tW!?AWO8SzWBQ>?{iddcAS>~F(d)Ms0GC--?`RrSz$ zb|aSF1g1Q~zYT*9A6&VNE-UeopX_R?4BA-XPu!Bh5wtop)LZt~5^E&C+|rZj%qxo7 z>2RfmGnNvh_f8vvVv2cAs`{+`{8ZD}j;R43(j6V8jPdSM+Xv3@p{!BFq!BaNn_+q9 zZ1r3w;W6bNh|Qi50lEDfM0sb{7^JI&uuR zP(Z9ANmoDiev7YrOskOl9ic8HDSm7E7csr!LiBJt;qjbiDebE6s}@t>{LE=89igM3 zs!i?x_I;PdGv3tE)pX|K9t{nRj<4v6{QLgcwK&4v&N#4+c?L-s_SE`ENz6Wz`^6@y z&g>x4b$yZX5#?}-J#wLbGdk$ycX!sH$62l+k>q39Ohxvbnh)u%lPWUu8$IaJq%APh zq)%ke5aR=>7Q}G}otUcZHV0S9G`InlZ-BYv@;dS6Zz=ljZ+e-g3@f5_S29`by!cme7{C1;b(!5fe2 zhH1SGd3=$a;sbdp{Ei?d#~DG;Gx{^BK!{w}aYi%WdFcTb)o$YKZgW3_ zsZl+}B`obrA$EQV{6484QW|&YTNqTCqtp||XNfQ363G#T2%-`&&#{BQ=hc^mi2QDn zg>l4g)u)9fm13d)OzwAk^!w`>v-u~+5;ivF_mwq>{B(F=Ro_t?4fsD(AAdDv469L3Dn3X_^N_{(+@7-_)DPoQor%i ze6?}?N&3x)VRus*7biNYDZE1r$gvvp>l0qqPOD*mYXmIUK|m(lN+Rp5ap_G445{9A z`Zf^b6eYeObA-K6;ln?R7=hS2V&tEXpY&mSZxPq|QC}Bd7j`&DAC0_puXFe97}H%9 zwL_Ixg%D-c#sXUzW#&QqJ+ zS2%B=3d!?@A-K{Q41l2nVtU;E<$BiD>#&p?Q5q&oV?6wJNdq&Zv~`xV$m-2gJ4z|J zQqT3nH9ieN1yY~_Is0=|c_VANBLrt$3|#?h@ParLMB8?EE7*6Ft2l}4uRlj;k@!W8 zYvu8DUTy+qE%}#N(yZZ{Mb^9f)I$efTCiq9X(AVZKYRHbL@8_ldnmGDJ$R?VpqKWE z`UPJ&C3*__V3^TFL^H{x4{f)gsy1n{h5wIvnWUn}sYxkx`ZM)?ljs%o?tTyt9& zo;9#VEn!17-s9MNt}YjhbG4--NH#U?&(OFJ(>&x-4#6C1h6x+n--bQaqq`joHHdbM zGAH70%2-48<38BAboU^x-Gf~S!`L`oJ9K@=fvl(unBKUepjFB`Nt7TUZ?RJ(PN}k- zbmC zT`_v{KgpG(Gb80FO!%ZU*rcqvCecnhBmpi7mrvx|Pz&pQ4lCR{Eg%e%MYSbgP~&ts zKEY)f!hioc`x?6L$Uv(sJ-l zkxmgp^avgl-q?sYAvQM};8f%J9TZ#4KyJ%SSCGjBUmo84;}FeVZ3V|h8~Lrl)VlmJ z%#fJ#A^4OIuLr8E=cw6-)1Oouc`98)3(1Vmf9-O3) z{nvLkIVq?s#c7np?UH~1rcY=|J#Oo(*STSZ^lhKphugo}vjJeQ0UAzoGcZ=?6cShV z!TFm#GL=ihl^L+>`#D-=kDDvCD0A;*%L4B6{r(h}1r^&+%pIUVJ}A_p{8dBS7tYnG zm1en>mhtL27ACf98M;RDD$@1XM+O|BR1!Ijt0CO2bQsA*9j|wCIDN(KE(jtA zfJIeDGJg5s1v+Aeq3rg&kc8HIQ7-MrV~4Ht!2|^o&HzcEZ2~$re8F0hExp?vnZz2Z zTceM&6!~T1%rA+(8Y++1H(}8htSmHNMPTSquliCT>oObAk6K-`ZW0kbl@o^#>^B_S zt3gpP<6smIR`!LCwzqoVL8Q^08ZrL&(`L`QxH##Wq2ri zc2vNiQNDt_PmKQG3~nh~IxdaP=zwVw3EBw+s)wjjSh+w>2@(xrPYdnB{(>%)+d}j3 z*^8;rs-6`p3LsMUl9h>&zGH{?MBh;Rlc(msyT}*Ft%pRhk7ccfzH{ue0t{BiVUjCl&uL_0bh5}2uv~sP@T5a4Dm(u4KZ5}W4o7m`dj5!qgDV#_gGjftO~5G2 zPYF8xD4;%!A0T=b)38fhDSrirs=G~c9ua;L z^CC(#+&3LW3RaRjC>VyZBN{CTtx5__v<{Ss1pf`x*!Ct2Pb7Z~;<+l*Mjtq4zQ_07 zawLtlSjb>et}cPsGjz(h^@CvzpZethb+1;C8>=0ahNW_)QTrZU!h3x3@*4Ro7F5# zAkazUP?+sSdyfRPP*9~fG`{HU9Ubq2s(6Ozsb3K9dZM-fAu3^nK#DRO{-ODysH1@b zc9!rBZp2UC#`W_sw$(Vh%N~E^z9TwABBRi{2Nf-u$dCIe9vXtoVl#`kQ9;ft+FH2x zRsWEp*0$}#6U^te+j*uJdYhoi51WUcA#d#T_w0TinqDaAoXJ%_0H;2-?~v~iwyhZX zs*z#bF6KM|fA~`w+Obv}X`-Llp=(Hyq|p%87#{*-_d9F-mC2sJuRCYq|tK&Jv2HU6@JfAL90a=&-FepvKY@Q(I_Jwp;&%nZ+qcR!V}^uPgcCV#^}{UjC`Zh=hxV~~4w2hXqR_=3gCo8c(c!5p{LLfGU*_Pg&fhtPSs0DRe#7-8 zSht0d$LBt>mxp5cPodH59gKssHtYlW|;|16FW3K*o^Y~<~ z#Sg)Wa;sv(R+^f8mQ3{U^HPkA=KUEsd3UY9PRuJxH?P&>dfx4FlHtcp6cd}(60gyo zfC=6@5)0YbE{vPt%L|jRq~_Z&4;F2)%7P9_C;YCuAo+Ui`&a(>Q>bWL#nbH7P^ymf zMEv!j&M%>5>W*t`y|6Z^LBzS)+<}qrl6B}%u{o;$u4#|-+Cwv~iaKx%LTI+h-^E#* zs4(%3Z7R82Ei}MoYnHpylxAlzOHlCjOCdk<2I_+YDqnD`@>zmSru^~M@SrgWs{VLyY8WN&?C1@_@ErAEYF*|#_ua|Y{8}R6( zKqCjuTHe0%28FEF+kk`v>p|ht)|I#N8R}tMMxmC04dx_a7~H&h9f_%!q?yK2Wbi58 zAN)g$*z2KRtPf`30Q%n6qBM9iRhcxgVc&WSfZaaVIK6ob>L?vqnLu!yw$IKQLVCU|5!tztY5U!rQ6r_Q52#oWduk zf(}@71XeE56H#vy7U)vc6tQ_ARO|ATL+G)4eLT&Sut8C5$qGCfz@C8$@l?ZZlYV4> zu#09=F;Nji3KpBqJB=rIc|!%dRJ7{8x6}T3ioo z$Lc>>#)IgxFpz96jtZ*w`f$fY=7Z9Bt~s1rCg4|&v0?(NIA$BCeo4eprY_UvGrf{I zDu6nPG9G-#>|-e#_`18TXjeQ2X}rZN%H-^12M96eO)b=M#OJfNU;X7;5iK2smf%_G z2W5{xFff2xGv;G0DtGDmz=d4A@;o}KwvoA4-~ltNrga*3{T%B&RrE*mNnckaNlZ?S zSHM^TQdJ$Z>jx6BYx;S>h8{&x5mT?ySh~^}fPw6+ooC>5kZ#0C(Lz$h9|(zvzUn($ zUoole^ousgwRgI_WZGJOyrZZ4o6hsW=gNo4BBDC!=43KqK!FORU#v#ZoQsdK)NexY z70M4iCE5vonFA&KJH9JzF6}BUR-H!)c9GvcsSNZ6ax}BHGq@Nm3QEDC$U<25rPAwL z@@2e!<;q~qv{iJc-l@BqEuySx{98>d^#WLFfzRlmVOL)_GOY4mFFmEQW@+D8x>9v%k*fvQkP5 z;c1rj9sT@J++*x$u<|wpj0TCC>u8`GMA(emIV~MlA?)Ivuwzs)nf&QHR3{_>`BXqo zmuqS5r+U;OLi-(R4m*g}8QtvXj92vmZm;c-4-u*cSe_@koccgb`RL?Wg;J(ZK!R0$ zh{tHn$Zi0KFn`eBf9wx23cd0i5M+TvPuliC@K7QnVUt#Ny?h$_SPWlp&!wnZNez>> z)R{75K-ET$Iw2BF zr6ty2W>nU@V{WvRg1?~q_C0v)nk>8)R@P&f9dSP#f;q`xdJy1!B;ZDX83=L*Y?wE_ zg(WjLt_7Q$WUe&Njr8g!nrKSC+_$XDj!hYjFGxwPCIy6kRX$O9Kl2yL0!Pq&P{UWf z%c_MKxVEaGP|U0)B-B9=miNL!Y0%H$SXF@@;j1lqS(_I+OHITg#P$r?mspee2MQG> z|5rWLK5F#@lzi!ZAP?m2ZQsciP~;5HUdp%xU9F!cXPEjY&7+UVuLn5IAC}krhg+OU zvmjwS9OXEu1kXeZ%qQsD>iXCY#94WihupRJpfWLJ{1iu{(4A<5w`dW3LE<7~(bF)*T0ylPb}+IB_giGM-V^iYj2e zz|~k zrzl3C@O%&QPn~MSX4JYx3>yY+ae%r>3F=3b=$JNsO@F!Yrz;0*0mTM$np(tcD+{8& zygL_n^aW*D_NKdq_m<+cQ5qHG&vO+pyVoLi1F6DF=VGGYTVXsLma#*^Fyk49 zT;&iJC;f4Nyk;MHWfs_F?}bLSP4<*5}-19;G#XJs?0hdV>jboEpi<>{Ls zM;{VZd^{XDDOeZZyO;S0F5EZG^B?w}9V*7}7qBdZR`8==^+pdrP*A$9sjGb$FGPvy zxc3`~zRG{(W_fEKo^%kB9;$1svIt}9>_vXQ%8_AYwZgvT>hyj zm=o(~g@n;|X?GD@>p9`1x~sDUpJAlS;NLe09VJgf7iTha5^o@Rx$hmiDGbz98AR=} z+o92nZc&ZxuVdFIZpfJEz$A>0hZFbDe`ZP80Scl0 z7j5&qEJtmpT>DqJVCzwX#@oD2z{7-i+I&nFm$hj7&6-+lZp&G=TjJgK0_JVH>TFY(jKmP)wZv zys}eub>Lu*3jW%OEGcU1hSDS$aQ z%2Zq$$*eSu7#f!A<7D*BYOg|7DkVHg2Ht+jH`1}Rd`+{glaxUilG1pe84pHHDgM}( z|D0#Rh47l~zBt?Oa472c;2)iHWQ-7K?5CEzAihFf%26H9iyC`5v%l>8F#&`j3DU;W zW(=w+9B!&7hB)j){%s3-6CuyRuNati7DLeaux2drJk>Y#8N`v%w{m)rd-8U$+FHX& zS9ZTbBDO#4-Bw9T-oQ1W&|t=TVc2^S=WwY5M=BkfEp$pOP4SQekZQ&vxd$1gXo34>AQjQDYkklqLUZuUWk?Va${EsykVW zq*i2gB~+|Uoy7h9W!oRLBYh0hF)e7Njlq&aB5H<8sS|T6j{axsU&C#2?l2E!HzCB> z*Opw@;Vz6hJg0KSLO9k^Xj&Jo0uhezD|tE|9lR4crO5!9{)tRJb*MbsE{$S_Il9T+ zH2(r#c#UY0s2r+=xQ7brtM5vTeG^Ljs^8gG zLPeo)r8oG+M=z$$>$_KgWXsdQJFIt!Px=WeoYMh6?kLqHf~^@-+POQ)J>lVWGWZ%G zQN6&GBOS}v3$n9NON>V;|D}FW5XkNoX&Gj1>87VGFD{;<`>~!3tCZ~xQH@#F;Z2>| zUY^&4p4?Y8Y0p1urKammJ-9~b0nn?IUYtVtwixGzh*k+0k9>4imk+JT@}4#k3+OQP|sIE)FqUCd4p47%^rpK?QY8G zC6Vscw{oduL3NmCN{I3Y?He~gM4j&7R4u^FFYrqu z!0%bW7%68D5Iw)^KVf9Ph6dmnKz2Vf;BtxU(Na&;xrJL_s>}ZT>>E~k6wMjZwD zx_q;eH{6dO_1?sf$aT(-Hv5Ja`E6<@@VvVdjO!{y*Z0Oi{!cDqj28?yNET#yi!y>Li&F1TsJvMt#mlB*L z4hm#t088+oQ$lC4=dfc#xvN{O5T#j$|Fb;BBQ`mL$pBq!K|IrkM=p-?yi)Xo()0-A zTCK|}-J1wUlK zXYn{iVOK9XTIt0<-HDdn{3M<&!@#6A^KH;atAzwAUG zq&_o?51UF$f%nt|?j)w|I_>AIT*&%PEh5PrX&D-m6yRg)@Q3MM8eY#n&ABpEOwN+R z$f64PmQJ9^ZFfS*8%O!#xS!=5zjzx++L<~n(XbYR|NNFvl{8#U5RL9HL0=@Aokiz> ziqbNL$!nF_2PW&t@x6`Bm{I3I1elbgP1iUl3-NYvyMqshEMJu51Y6|;DP5awdN2d& zNvgo8os(DvLkRV%fqa}IISD&*)OC{%@FVK&)ST2vGAc6-)gapmE!-uVOhL*%r}}y% zIMX$0?OaU2twhNdEX|jVftpD{-h%*?Z&HX;zO1=8I_zh5BUzk=>@U_4SXKoed1Ysj ztcAWi2c41vZ*QKKAu=~|!UQ>1gGc^&8J0eOb<}t-f|3!|-05NF4^mX| zd>q*>35&mJhp)o*g#xygRFMF3*K*f)N<@-|-n`3)u~CbMl?*sQQ#Jz^KB=EdnEv&PB+LTi+H-QmzWs`w8jRg_ zor9yZl~x$Z1}S1;EwBbt8~dC^_mW${;Hl03ZpP_CR(`qh7pwsHa`Yj$5)RV5-n&q> zPmu%&R0(~hKOLepqH4hFSwxZk5{u`=tF6!iy$}UHxkN5pqK21TWb@A63-Dx*J$p65 zLMg@04EV+a33-Us;jmXR35)N4QXlCb*KwO(L`QA7pa7aj2+dAbV;+r3MUjo_K`JKO zJk)V=LZ#}a*`@nrK_^mDrB0`eFk&ySbR<#N5Wr%nuCJ|CW&_4g`A+H8E=@87Q1tmY z=)8Q~dutG_AL6^r_PdIG{ux_L`|jBp*doZ*0i?Svfc}s zF@lUf*iK)dG&0m@`QHz3Y>4wZD&0Er{!%Wg=%czs)&4v%E0|f;@*g{)Kt8u|?8w;j z@pNAnPgmFcB>PaHiMCSDme+-vyo`~{i{Nv7pVvjE&Ix~|Z#4O1^|V!stqDC{ReEUK~J(oi#z{aTuP{R`f} zdE7T*tt4#{wUtlFNK!pj{O=mfqrmOWvi~J6OwH39idvB(cGXUfBqhC_= zN_~TdO9B*GT4V7l@E84r!mAqEiws|=?yZWA!f9M#DR=W{E3_Py(3;&*wyU+vEoKK& zNm%k19vhvz5JE#8TFRzPzImvBG z+|y}}#!zR79y75nKv=;Iu+sTfH$h-A)WZ5rx^H`xgw7aEYKhGW&MINs)iKyq`JV71 zl^6RD2+7puKpLCMG`wm#SXQYaV<3dSwN?J5f7s3htD{^mQoc5t#ybI&m^R!WjdLSs zUA8)B;)&l80R|y~0qd^zh4;i+*QJT;QmMr&qCGQ04{z$QNplLuUZGveyzfZ!<+cWW zOIZP5AW-hES%EXj6lLJQa&8NF4fbzDllt8xN<7eo+$+rPPSP&!QR{NW0mS8 zVJ+{zL-K&-yucK2_~Y!9jk17{71QY-YmsB*$~FvvoWtFlx`=N;gE{MrJ=!<2g@c!g zoyY=GXu}C_s z$1&dJgY;uiewk$y`RfVq-=+{XwGS>utoM)eOH{%1>@=gJMlFg**wtlTk|{Oo!>9JM zKrbJzoB~&RF-XW~uRnK}tvVT8ZAUtbhY(WU!-V?9R7FS?8?z9Ng7f{>?AuK6+v6Dy zABgKMe}woJ?i!s+4(->0(hXy|i3Tk^BHs6ipf0wv(NPO8c41IH`Pxs;kv^ZZ4kW{$M76*|dE11vQhfaul&lkR&Nt~ zT@MIWBL+Gs5QmD>1)`!SG(j+{%RLbT%9$HEC2fy3={@U6oJKt810kl}boCkLDvHww z>`$&LX1oz>w|2f|!aFxtX_E86S|%F&jW=J|!aWp?Dh%GpRd$6}BVo=cYupC6qito$ zbB{>0C|S6oGFhgPOiP4bUQgw`RP=0viMMGPAh5 zK-=rflqcHixdQZ*`Os_~Ku?X@%)hY5f`MIzomtTmsD$lYNeb`QA0o|Jg`&-K%fyVK8xvVq&Tf0;> zK?xUPSLP^SD^_GXz{7bvx7bYJiL)@rXMeX#X%8)zeUAU5L9`BsNTiJtgn&17_Y^QL#m0Z@9 zbluU^?)tvShj9We@L%JvWKFz|56Un~?x5h=<2CrI$N(bE5jQ?v&S*$KeAfn}cnU?~ zUr{>&6n`tIZ@{ryXpou4<8L$QWs70eh}UHrTzyZsEJBf!zB9r@9U2ORCCqyhxw!13 zpSqI$A9*n23@y4vY=osj0$;R3BqBAY-PihHJVFmDDtjf-Wh;4=qWxWlY4_l?Stv#q zT4dk~C|+&{)}RaSjN_~CErJW#Ew3fjQY1?0`~1t6CaZJd{` zkuywZm@rD9Rh>`f$-xsR8?h7GT(DTyuuc4-1EZGmuBqgiSO{LEToiIZih|2k4d&`R2Q+SrMMA5b4*OJpUrFTMxyc&)p(=^b zW`_Cb2A&n7ceOZN_H309x>;POPTv1Hf0=J?+UEq9Y;zy(RVGCTgPj@opFVMbJhHJL zc4YU!_B5HXeTk4H{PI;-+sN4~#?|YB1_QutKqkyEXjXz{2eo?@?%EjaB>J$uA^W72 z>SK)`joa;I_dD9a(fSQcZ`EqAzU1tWB3DW+Oc*SFnA$=TK;bhWwq_W$>Z?P3O-2&} zkELu+u-S`M9(L037`y0%2V!@vM&qNX79xmpN1!tDd|OhGrtCtj7-sud;-}5TL#X8B zJM1cBvkht3s|s`n5=y?D-6>owC913N%7{l_h&HSNx0G?MP1h(nSuB4DgkP$9UY#2F zIZypLq?5?ikDH%{uTDUB+8Ln$VqNjnlq8Yu=;LZX^dKiP9NuS=>h*^POQBw~$yMAO zuDc6Rwm!o^n;fh#28drZ6A#&cl3X>FP7qZ-BjzGQE%@EtR0GU@jdb=Y(k@Ep;O*#$H2WP& zC5ByhObqM1r8G4mFBSSgS?_sKQ1+*j02<6Uzj_1Wv4kN_*%u6L+ZJkVbKj)3^G%QO z2#aFrKa#`fL;5_s)}dRvmSaRcYeH~M**PGMNfi@cOd1}F+-{}=@G74iq86a<(fNgw zYaK5l{p6w-h1QsMGzldesjL^W0MjDV&*fK}9_sYkdUOLOp&sri2V*^MbZX{WcGFPC zCy$#}OuAQME%Go<+=uX{A~86-;D-cQHN&&Eu)`Qb+&iR^hfL|#@g zSx1-Qj5`~&sMc7YpQuf?xyC78@;3z^>89VewJ@!Y^iygG`MLdu>5duYMN%IFDK?yK z_cL`+@ZQdZUVgiUY?+QHs-^WhYk*J&L&6-nSo4-=f z{M&vY1wzm23|xaJM_{U*RP@#A8VqPLwNWY3rA{W5vb_Pv%gEd9QGMeF@=E$zzG^(F zfa2tXAPT*}tw zUQMD&rIwh&C@i1)Fy^m~Q3GT;Y(y|A{>=F2m>LRBY9h}&fqm8S{TiNmgobm@D-Ymv zsd`Rg=0|dsDk<&QA4Pw-lEg^zG5Z^qpCN6nr-Xt$;lPJsYJZh2;jLRsV_ffn@g=g- zR>r0557KSJ-oO5*lR8sis82Q&g$ha1PhIZ)WL}=8t0OhZZX_k_&SFPhatD_vAV}lr zAb4hx`Cc(x;IK8zZ9rSSP%KPmzBL#rd9hY!n5Q|vxow?gZ3!lg@UsSXY+Dz!ux}+i zlW&m2F0Umm!z!Md1~!ovK?I?R^Fn}SIr|fh|BzZ5s9&W*scZukUYIqu#jggCi}o*} zE0U4HfOp~Y%(a*d`K#pmu#El+!48t%s%!_UWn13!)8wFYJTho*Hg`tUUcp&@#wsdV z3tHYo>!C1_#Wn#oa|HnvcmzuvTfi6>@dzec{_IPE`|jQ_n#4x+A;M0HJYJG!PQAte zu{Zs=0d}LATb#SbB5FyxONB-_B329ddG0eGE7;Ew=Z^hw_2d3>PFR0P539Bf#fJ9Q zv?+YzKq)X^vEu3w^3_(*uE36Ay3x^+FOpHv%;QcPZn*t6?c=@bCOhxeS4bGK`0JL4 zEOk)mgd(BID79246I_}@ikZ%H0Qg@5Ie&kIu8cQ8XD6<#+y<)ImzVf_k%0!5dQO+H zUDz42cz3S_Pqof!e6AZ{*XhT~y68J*FI#0d;%F@>(twen9K-B_N^fqnpxX5N5=|5; zLrjv@vT-ipGfTNCf>xyffb{3h3#L*ij9m82g?am@;_Q%_5yThmY}Ili$Gjaac++hb z(5fcncGqrGVNkR0S+1XBHF&V3@Sua@8;??*gfD4p4}Dqbhcgi5kw^v)uQ{wo!@!c# z$KRcxQdWn%W=>H=-JF$?Ea=|fV@U?dOK3ZKWSGo{3fX^G{0bS?tk3Vn?V+*lF={sw zS?WB!-z5KrW2s0N;Ya52on&nwOOB@bUC%W=ojy993K2-~e$(*weDj6}ekA%$A;cna zK*f_AxfEkIn?_p!Tdbw-y|B@a5x2(asm*w&O#xapRoPfqce=(?%%gJCQx}!>((I{F19Hs<~OXU6*DaR5nASqHN5txk-ua z0GXZyK`C$-gAJXkOlOGdoVJX_D}hGlxzs0bILC=XGAz^ zhCJ^%s6C5fxZ1a_XBc*qsR+v(k?cywsmU6uw}m!URltE#G{+WFlzEnl9Z$<78;rAFiyNQkAQar3tpw9k%jKH$xp$O$UER(ZhzH>Sz*G8LpFQh+txvqT7=<%Jrv zx6%yn&)B$N1}q4uT@#ECGQfic&RQPNI{8gHwRi^RP#;F2Z?q$>ThiP(>e% ztGk)39Eu<~w`|YhbF9aXSj^TZ6Z2%#rETMmcD?pV+xICU`76f9>L>7DyXWER>KVSM z_TsQ3C7dn;h=ok+PjMcZk{9Kpa1<*Ql_Miszij_&8ku7v^?y&9Z4zIoq2p{#`4vC1 z%~!e`f8$p5@W$I{tQKLt13Z93c%-|#I$asCDo6wYBlTeF&aOR=))PZl2mW%V9R}>n zljy4OK25VCTzgj2@*X}tFICySxJvGWeA^B%NKuR@xE__%_PN181PeM4cYYy z)B3w09nG619(b)Qs=Qm?O*0OLtBElElD=lLY|pr%Wk%3=3%Sp1s8G=fn{lW36sj95 zrO2ORf9ZgussRM|X;^}p4m=R^hH1L#!A}O+kcCUv2?)I)9_JYFKHaIu6rdASkWqQb z7`~z(di>;SkJ?Gi&-`f@RP>}39cbzWBuB~|K5 zZF@ZkMB8@lp812mtPU}y;+U5qMh{FKa_ZH#jH|01*%-F8?S?Pfx?f#}JC#^`Sx`kf zFTwf%P@9A8!(?Fh?n23|m4uTO21Ph;pQcFH*0QOonD)*gKSca1F=P=XQy6UU@TR2r zzBkW+Z*x&TgjPr;fIcxO=a)&w{NW$0kWk_!C~OP0Zlf37q#x&1j;h8Qa+QII7w!Bp zT~FWfcUoc!561U>{R=EtG&OyB*qC;Y<&l6#5;iByDZ*bZg|Uiy1jjX0tEOiY1oQ-$ zUU2wGiqA#mnhD24^8gQt@>rO`7(+OIjQD;szN{gZEH@2a^=U7%M@+K!sSnKuQCxlT z2BOjX|KZ{sn}p%PB|Y}cGq!Epwr$(CZQHhO+qP|+duqSzzULRDDwW*TN%z$Ow~Kjx ze&CD!nfoS9Ry36kjg-5H@c2n5f8V+HmQZDDd6hejOg=q!PM^fmIrSHjkZoe+{AgbV z;wM+aDpJW&vUv@`er5IR8PZjIY1rcGUGPiM?)N&G0)T2*eWLByO@{4W?Y=3B{M7XP z=QR*y4>KJIs^jwA(!mpeP;zq&Tqm`C<$*poCPAU8f6l~Yq7ryecPNV=d!K=ITE zI-ubwUAE3~Ht?5ALJ$W|nD_eQR&XxZw_ptx->*Kjqm}sgtgZ_Y{n-QiMKmgFuZa_; zoLD3|!lXy2kR8c4RnY`Q4Uj7H=K!^`dhNRW=T!-T3_~qjo6h0vp1f2nx3%F$oFw4Dny13&otfC&bEiKsfof@We+8|;qifiLFnxK$V zi5+}=0e#{8K=-szehJ%Qk$ZO@htr8U%Lf?PYh-I0PRG{y!(+QBoib==D%CA z_q|Or=GU6(Z`MU#Qf$beX7SaMenU2(v9Q%|+45t@J!KsN++%bNKlSG0viE+lz>Y2f z2@lr9u;w}Owt68(CH^D+Drw&r3%2`E_Gn6lM}^C(U3OL2Y-d7#C2Ne&M}VGjuTCK* z)*zCDrlYoZ-&z$s$=XJ!f%sitVAQQpGzq7VAKZb#;D14@wFVW-zNaUK6CIQLoL>i&JnQA!^a=6D2$(fxzvV;wyfCO%5)->de32xpUMVc&$C}e`5 z=JA_*spyim#C1hMe!jiCpZbq$I(>`5*TfSG^Fc2WU7}S+IVgm%O{o$mak0=J^r5aE zPs01{G5+mqv3I$nHT1(Z`B0NZR(jh!xwD7Qc^9^4gBZ{?ijs7zahTN0&R_hCunv=4 zXH+0G@8SnP=NSJIh!NNXNF*}5q#%iwtQgceN#lDMHRG^Knxg@kbjTgHHzF$cm%T9z zIdcfU-p%=0bI315RLsSx`S;+n!qbP}=FMz+D+wEE38wuQkd>^14}tUSYy#y(d%Y{) zN?|3e&vl5BL>vvdq=S_jY-sG|^N@lVnh}gC1xZL8%)cHBj@WyTg1Q_1w*$0@OciRR z7?yiiqS1nFPN-hW*>JW=Qy-{)@~{|Im0Wez|NBU+S993?nCZ*hsw4BzbiwX?r;UoZ zj3*1YI@#7!X+l0UCM*Yxg;v>cQ36s8*Zn0{`^Q>l>a`X=uHaLCmbWi%uCG?_nYL=zxdPF3CX~Lp`+ekJ5Q)HJ)c-Y0K z-h~J~rSDR7bcO}JKGpBh4|}l1&DG5QmS}{sD7ZS5QSxDfl6N@Nu&lGUd}wS|ap*<; zkS`sW_){RI!M-eueV~eai^XAf0RtqsUqI|6@nivAB@pGIfYiI&(E-inC%**yRDdfvQ%o$gi%pHMJKW7egEE#cJY`9_+vRnE-_k8piA?-5cQTq(aqDJnP zFzvwAo^uJNnRl!`r z#cz;O$15E#Xg^MSkB}h58bkdp5=(KIrDTJe4P!y3*Z8-YUJOEDN!5O0cjjgVQAkw7 z04+e$zsu@kBM@5Yu1f*{w^?e|Mk1zeP1OEDbCn?>OvY+tn^DoTmkL7X>@{(C zLAvw4-KXd9VHokQJAl;ejE7wHXNV*?cLF!rCgx|nzTF)``%$=6H<`!yV7yCr$7Lc!)U|>nOz=Mpsx%} zK5@m(OfS*GTjnff#w6y9&1;xgV}o_RzaJey(w`ttw%_CjO~pp&Tautr=@V?)0iRdw zGMb$FnKyaFAS}!}Q#}Caz)UIZTQDK6Que#nGZb^E?R~SSDpypW_CaT_MeVR+;{=7)6l1GzGJ$s0()VcwE?wg+Ooyf}sa1sE! zt6Jpv9WrB|4HtIa(NB=GPuHov1u@Cq-rCK_44HTW)KyCWW})*s0;xP06&oqu-XuZm zY|8mIYLhA>4JNm!K>9m}=g%qYJ6d1YbC$*5maN4J^FK-Mp=&pMgd1Gf37FVx#JCIn zRwl~cFoj5i9%iy0xZ)-8R(B;WtKH*&(=i}~lwZQNL1vrTJL!Z_DIMQxqUCcmI#o3@ zuHpKkuRFe8j5CIc)Yy|m2LJZ1TATnMW(pt7u!~K#$Xf+UZ>qFRDXC440%EHAo}Vv?9`>p0K9+_PO6 zek(N2IuDQYm!fEHBXFMzOC{tvY51!6Bu;u4PTnV7-_515Ud_JiI3ky^yiyR}CIsB$ z6aE!tKk{e5P+ik{iN0HNwSk|sn*_6ezpK&BKT>l8G0(mygQN!NdA7KN+zqvS^Gnw@ur&RR)3NTOL( zz^;^S@E1nZX!nH2^`3EmxUmlmKK)7k6QLM(Iazj^03H6!VFjzk-rneFpkTSusFyE$ zl5z)Xw-mv0zbMPa)Z?cb+aV75_R1vj+@{zNAoXR zGz=;Zni3_q-LL49+j;-JdXKCtJq;);OZOf4tL;ujEy2Ro^?B_yBD!Qz`=+=nm5*=} zJcpe$yWJUzigS$%`0~y$2y=al#iRR6j>=sD#)OJc(F9Yxa@9|uK zNL4+JLxI!l0d&&9;`cqISs zUf(>2z1)A458n{tvvU**E)8H8!&eu(P#fP}zi-mxRIDr5r9{S-GDPy^{cqy#{lx7J z_3Y@r6)yxuTYCs@=(}%n*}p30{7e-YWTp8~^irxP-BJxn9NK&?&aX@&mX;#)RhgG0s1IxZm{P0s>;dD)*jF+fHLq;V4Q~Q*=`c*)Eia?&XK4kaj?9h z0^u5X;iVXY!`qliWVP;6fEB$hrrW*ACP+I$^1mLRS~E42SE=?Hw)%c!BP+ zZK3zbEZAUK2^=7I$wn(j15hP-G_5hX_v|gJx!ewOzrb}lr~s5aTKu}2mZaW#UX5KS zC@*DAmS|ga?b9$SRNgn&!HMR>(VCiI{A10OwT!{HlS~0i`u@-8oTEhSgm1G4;M5Bq z{U4A4Z3TAxN>sS*>zPx}4bc`XXT9qfDnx@M0z$I<6;S@Nju0-tIK_|4BoDSO-?lwR z>&My^wlTJEl@eU9?cyHHQ=B_>=Akq0*Pn*&Xv0<%P>|rtCUSP3l=y*%GB)XwcSa17 zbadB2GL|O~r!>QeZp-|Z{VJ(Dbnf#AQd`cNVkK5+mg3Lzs`M)P-S)o`Q|z!qw%TqE zTMj=ibec+EJ?n+20~94Yji*R}8*sZ<-ulUBCv;L%O{bN=&$2LtwM^KM@53tPhB^NJTOqTi+)f}iz0QP%P4urc5RMMFKBHoW0Ftl@EnkJf;zS>$Z!6~0 zKxXbn!@;h8=mJ2@xKq3l^9+YWE(R>q$|Ji{?!(QyWwDCjO>;r*Wu#PGZDB>xi~ReK ztf2m}yDy$V1i#B0rj2iK#aYq~->O~tC^&+GU{3s4C}U%R?A&vI4!_CUQ6!vrm60C% zr(GKtVO&5lXW@>r`$9xSp2%Vt&j9hBbXW}@8_skjxXlXG;&#R5;D#JZjB#34z|+k zf_9NOL2o?Kiuuh0jzB~>88jvFmv30fz_vx-o))p=%bem!{gJ@C^-=Qro(+bWr&lJvOEY>IWZCY;8@Oc>M#2+3wlm?vfFa%@!xbUooyC+dPCgz2*bSMYp4Gj zlFcfG{(SCrMwV2KNE>a?o4N20ggQDswNO_dGM7DtEyPPPyY3fGUgBgM%koWX`f=nG zcPNKDdq@vi45RZ|Qw;n@i*dES1Cwc5wbWeV8LrlICD;c^1d9MD+pBmHb?i!XDyQUw z#iOPI4bAN#tkC*TwruchNhX;tB^0qK4)qv-Y(wMA{L3{r>hEP2A+;r1O*F{J(C4{w zG=w_V!v?YSV#dGK#J$U=F{%PliRK>=4d`5l+R70xgD?w+6m*x52(eY}JM(DPC?=*K7>5uhIO)K?fi8uPg;ej?_wsgL22!WUGd;0qPZ21>+QS{QXGPep}w=jwv%mo7F zafoSP9nxyI6l|uuXh(L_w$#3pupE!RnMC!kkCxyn)pU|6mralJH>LmoqS6Rj#ksw3 zhgCsKM6ovkcUIidTDJv@T*U zN-tq_(Fobqbif7ffw^dX1cJ+FEp9i`95ipWmMtyWD9K&64!dQ(7k-xbBNij_wP6DO z7)8(8ZG8V!WMOSG#BNmwj9gxjAXz#e0J&BqcRYTau)9n5o2PSrMWZ1qYedSp79i3{mc{RXYocjt%-HD4Mj|>+yk@5J-z~% zt8C++NBEi^wI|Vm=@7erxB^tStoRO1JZz3f^Sme%S$Tw=eEVSha(WLHdj;^G=H!A> zwLy~KofHgo&OK1y>=AZl6F`=&2Rh&KjYTKl|CSyFeRzL=#;9qQnGWx1cpJ({L)wki${2zFBj0iV;p`K9 zA*fzDf7Vi!zmh!RlTW(G(iCQ3_Fvdp@YNwiihobXkv+D?+f#BOXI^JW=GMJL-I7p0 zxZCaGWv80Vi3tqY5NwLKptIR#J^ll);e?xW(>dVhoo40cV8R(bs#eLcn0eP)1LUVh zmM>N*?u#18K{w9^!$*%&TaP2~(H8x4c5pDM*o>({r3m^Png`(BgMUgKPdCsf0u*}@ zNTvlByi-rS*>a_%k2C(-R^tIsmPi(%t=N^qLlP+XB z98_8Jp$pnI@4?Bg)csWQc>8|(1@Y^`>yi$_30 zfF#bL!ar=xuOE~|vTn@9y%!t~@5_22oTRzo3=$Dk2D%QehI`3xcz74^8|sY>Ipr|W zb`t`SlU!)-_@~ygjHge_sK2V06CcUc0qBt-wY$5(NnFUH{ z5I;DmUU7O|>#M6mRzHaWrvA)MYNi{dFaYN3c5 zr23~eY2JjPpU&-ZxRwqDLQY$)C&PV6v&X(h%(*W+ph2idyjkTls-{(@Mii$JqT#U6 z-3q8kgo0_6rh$VK0$C2(G;F+GF9xBwng*SBwD_Tbj<}#lf?@T6GVXHRcY)g z5Q z=Rjo_-lssn8!;FOHW(=%$tU#>a;xCil&+#`@@Lv($g4B#l3iK4Cli9Ce1K^a;vUwK z%H#1tQd?sZYjMI`yCV<&CX1VxsR;7N4#*Qt~cE5QA?gvX~2@ylAmogjV_ zo1|3~u~eqpj{=_aOUOhM_6VBU(=kPUm*XiO9M7fk@FGj)jm58wthS$D(8?Vn+YXU( z4dL>>K1e!I`aLe$N*gH7frv>iZ6Gd)Dk$n$h#x9WqMo4t(G)WeI$On{xxUY@yamO~ zZ_<9RcFyBn-w8%8x+Ljn_99Lm{Kz=5GNp_evmET&Zhs-mUH#gdv@m2tuwT_4goee7 zzm7{X(UVp>lGCtBG1L7_L@!YN-NXr7dSLaVKr$O#`fyJaeyRwg%Mc%>vDv&gJ+$VJ zJGXRzsGFd;iOjL3ponQ&nEFt{)tib)xrNgWRdo(UI$X5|n51XAUn4DPt-Y45z^dn5 zCTfdgF1oM=ggQ`erA1w77RRtlqV{n3~_><&xsnX_Ou8X7Q(@dwc@u=mAi zp#}=;yDp>W0{PYPhL06_BK6)u@GFOeJ29e{=bm84z!-Cfb7L!goH%k~ra`uov~bv) z=;}0mB!iDn*@D_@VdRn#vgPEl#U{_n3Io)PU&buri%m87!t+8P&j1H3tB6*ruvB_9 z?!T<&a=gPU%R4x+!kioIVepG|&YW9WX8Qizn5uYXbN-1A8@c(>2H~_!I#f=?il`$> zzYS{WjSF=7&7AX6+z;iD>_Sf)TCE&mFBUU*>^nIt?z&hoQ5dtt8v+PQXoN}=arT86 zN!a>04^@qYg>1^WBH)DDNEW_Q!p&m{c^TU^MO?5r?-aPZ{CQ z^g@yVTAOu6+V!@}IEOT7H5C4FLAdiWgV2|4n3UEUf?a}XGk~k5*V**Z;e;C(k6X4E zld7AOwjpFy|65^`wlowH#ra$}D~abe;y&ncAYX3zQ8|T7fMp{RzMtpH zm`eqIn^IB*reG<|Nzh$r9S=-PkYN~q%rZ-m$E8|M%(P5bFY_9LCN28Ug#RTExvg` zga8Hwkc+EAk#?k?<~D~AF$cRy@P>^bE2FK=P`>CNz&b2fqLGqiM%UOZ=!kgk9MTcO z31+i5YF~{|s?BW^#G9260t7KKDilRSb%wDPsAwelsQl6EP%LQUC(+7DsNOc7jNE{Z z&zCw<7Q0OivJ;GZACG$Ef>bqI^Z}*>@;{@3MyoZtDHJrd@5sJC{%5QW+*H-RQJ58> z2_ye$y#-nnS?TILbT3WS!pGKnNyM_So@e0QcnmH;+o&RDnr2jJ>PW^A(Pj_mUAA!P z119q1uHX4ia^0`1uEA_l%+}y|Y;8@U8wYX|It$m9QW38R4&EkiY(X_=xQ>P)@qx%m zkB;T-&KLs6p;D>(Flw7NAKSVS!@*gL;qNGF7jFeCS%Xq%U|3dFWFjunQtg%MV;X$& zT5g3x8jBiGCO1}@Yf`?~(G_XG?Fy7vw(pS|DcW@|h4cRodBoLnB75;n`b~LNh>U4wGU;w{F?J%Ed8)fAmbAhrZ8JOhT}zmpb4)ZN*H|rj#jbOs zsH(U6!?fym7${sp-n&76n-vj}4aZ>nF+24cJY|puvDC%_*GTl2n!4`j>23o^yXS`; zb-+QM&>xst&cRYpX-O}krYk}4Qq8TQb zl3@r`9EEUr^XwpPpBmh7Kd~5Ff5LrSh-}_`>)1b75B)Y4IC{XOwL;MPSm|^h_EVPW z-B!10G|o2UNty7ceKmlH5Hv8>wP9?dJF^%MQ{{RGdTLpk*mcPA_)<~4Q+#QVVeTqy zRdSq^F_^NW>2>57J^xM$NpTiW-0VOjt*lRFctSw-!1rddQYlT|PYPxK3!Ks;>PmfE z>bW{E3uu@b)8CH_Cx6ZONzgrx&a707aRH@=kH>3t9c`5*@H~tO@TnYS`*1%h7{^t- zOJp=m0kse(LNp7eN1kj5VdA%TA)OW()6`mVULZqXYrQfx1Vx2a?x8mvexp16o7d+q z=0V^j=o55EP@0SWzghU4ct#FPdV&YP@2>$Ykwp1*{itTa*1B=x!)A05$7ax^g8Zwu zv`>i+uS0uDQ>tfx9{@mw_irMi zr1dhpWFm)rfwcOMpDnoEK%`BLiZ*_RSC#9Lj4jR7nku5=4lDQL5zWe(zp zYHHp-F`*Oy7$c+lz|>``%gkXpf!u$go4Y<|bn&v=|pspe_rkKsJiPtLlrL61!- z8?FVj62Ti$9;=in4Cyw?LstRQH zwbSPjV&`}WqHdNjj>Tq#iK=Yew^5*I~T`m?0N zUpOI+W-Lavx*(s&t>GjY-!6U);W*P>i|krQW=)0Reeo`U;_L!E8vqhyGrV3=AJ@~$ z&Gb0=&QPIs(!JM4vA0%cT~N!h?}VQ|xG+n$m)u{TkpTkAj}8tBvN#}wK~R+eik{UR zF1Sx3UnWjlZX4d;Qj4|}Q24d_c3r=aIvW<>$k&!5@FIKC%3z)*rE6i1n1OrVv zY{r;x7F zxQF3I#W_aXfY-LV_S*>Qm9;%WG|^KeHT4(0*W)DXJ`!ZMC>#kt-<6f1Vo7rqd8?Ee zac)!HIM(8LrPyMbP%>O2wg}d@6HL*BPQ{*oc-rg#qnvct$!_l(;eA4hv86a4ko_s3 zQ6r4uTkey|;xn+|g*~pTC|Z>epxa=NrZ9VCAx_1CczWPv4AlFcTYN|i8Qpp7%_P?? zYviHc$>Hrm9^p+OA{ZX5)TNvCegbjagt4K2HF(7YMjIz=Y2JxqmyGW<&jrxR?y|G%h zRV$yZSxE(2kTmS}Us`?%3#i`YYsaq#Z?X|A+p6uw4ziT=e8&o$`f#*^nOBdWm?WNlY>(=(`!ptw-A_Dj z=_>VO)1I1G-y)ICe;oBUTeryJw1>iywSi8CU8T~6iV+9@A)|HB7$}a=$x}AS7FTm| z0cn%Pzc=6_zC)_ML=9OM`&pTRFhG;0^D87FCFp0%1A6OwX^ zK0oqpOxB^XcTtD+8haNU!`i-4jMw7Nc|f8gI&@b_-W_q`Ur`k6OQ?0yk#EXu@{@6D zwN%LNSmp~b#qjy3b|^WQv7q9 zMmDaKfu!d%YOcQI6kASuU4GKSB6Lecrs;xfL-aHCq8=GoT4G{#L;n5-e>zw)_wa;D z8r`^%-$suaB<@eLQSK+M`wsz6ASQ37)XSGz5QT{X$Gu90a@SP;q8iqHE@y?NesSX5 zZaK;fXH5ZC3nt@p0~lcEP$z9@Of9;oSp=3A{g0tzmeQxPLN*+D?%MGq;4l1xhik|Q zrOz&f(sEDK(rMg{6QSEk|6!kTh!3OXNtnOu-RR2{_v6&GxfXKCs5j)lY=*1cD`or* zftFL-5tK)dYP`;EC;!+&w(XPN907zY8oK$&jTTo8Z+jH5O<^}Ctx&lHk`oJ|l3i6k zn8bUdT(RR+N@_u-uRjb8@K2W;3H7jY?JnOC@Z|y4KpBg&=Z>GjveY(}X=PIM zr=vi6TrArdV=oyX^qY1=v_VNGC`pE(Ihb;ge*`Uos|Ei&dsyutV;R5bEK*(p_+^4w zD_){9QBwu6c2hJE8r&rgFwxyCb4)`)c>a>&B%nh=lhH@6V2MV@kC-zAV3cLAGqE&iU1`ljxmai;R&4-P|2VglHGd+RwG3f>lmD| zHzX3~BS@;ah#+5{C`n%2E$9srqbzi7&mK8DrZa~1g7^;OjOy(&E zM_zu7e{PWzW8ERzf^I6FGu8`_+{l7N2~*)E3ArtEwhWT(9hJgqSdFM>_10vh zA9oxK3c(CjIV;>ZZobpdtGUxtLx8X^q%Hbf8n#PV|0bNQyQfKe_SzT$G>|f7fEeCz z0ntBfS^e;>DeQIMHG%%&e~#LD|i?5V2f#73+9{=7lTHnk80V2Koc z>VQ*F;7UJAGcT$T8fO315W8|iGZS_ zHEhuT@XFR4_<2zTJx?f1DO_?;*G`vrn9*y}UK z!nZH|A;e97Ir){ZY1;TLHt@waU#@pzA0E=lv=MvUGZOymcJ4g_8C-c+tbS#L za*@1^>w!C{Dy@?7b!Q{n$-CP9af7ChVM4o<{(u`uk=H>7a(P!nS7|1#Zw|m16R!hnxO!1F?{?17 z{t&0~8sWp^ZMro{XfvZ&7X|}zCRu`EPSrUb-ljQZNAj2 zzc2BH(YEsIrMZo*tB7Luij1ps6f3DIgw5j0v?e_!V?uqoI)qJs_p}UO8~F zi}*fD7D@LUGzaJWJzNe`wg$aip0m5$w16%qG!VYd4d;LHg7v;d9_I`y$Vl%EZs#{#JpJS+tqK~iep84_nGHYsivbiRn-O6?E5IUdzZ%9|yU=;mS)WFiS;s>7 z=qlOZVw-k-FYpa!`?3&rIwzVzS4YY7nmRFiO~^ykZ57HvJXo9d4VO_rNzloNDA1zN$w&BWX&+9O&`DR>W$HM4Y?)Qzpx zgw(K<@C^UC%j6CK7k2R*+w9e^74!deO2nZqSD(Xxdm5qBxl@K72Y+g%S{G9d8U%Ev zHTs>JW;p8S3!W|LuDx||&YSI{5FN7e39u@|(_T_sSO$hHW1L_;i&xUr6?uPyhW)bZ z#qSFEtt?k-VTEHSXM?+|AcZ?xf&Nv5>@*&GB&Qe-Mn#S2QX*_|;b^RLJ8At+`QGdiK!b}Ct*CETOhQzdZ`o*&Ip*f)`rGJmCif(s6=#9)!HPRKnS((Ms@SLm)B&eUf z4+U?>23_Ku#Sin1ZyWFc>rFyC1jj&2uxa-DRt`L6MsE(>ap(ldgTN zkv#TR@w0y(fdF;qd;mg$KpU ze#v8KD#yasXZhV*P$pWD%W&dcMzeWVFVQf}_}CKwgz}U3^TeGMw0uLnk&Et@_<=~? zOJlY&1sm=tfU_K!Y<+D!ADUl2T38U97nA9Akf}V`2M=aBRzW)c@_N48DYB#52aR@) z{ic|o6iEvQC_U

(M)dU5&fzy;+DujI&fg&)h!uZu3ZcMA{|IfENX7?btcqE&^lC zr3M*_=a??0Phve)I9~6M%C!Y#n`2UFdqoLx4*+iRJ1U_L3PKUc+5URgIhJrU6FN4o zaER)Cc}#C)byU;1Mw6Tf zKWfp>6;};4VVKnL|DVISVG}F9u>4sZk&uM)C_04%vX;sL9|0G}SUB5QefbnK$~VP& zq4$L0R+bbyog!kyv*>biQkfVt{y~a{$gD^E?t*PH6o>wd+Cg;=UMY)=t-EyNZnCKY zT3SXf(L){Gab{OoWb68p=JMKjc&!45gu|9w;5CK&;uI!#aF1mgMi3qLx%2lHD15^b zuU4ob=JZVO{PZ(8SJWcCE)!@po`Ko~84iA*Pf-DHOEc;Vi+;hFZ+FNuQ1_m+gLz`0 zRR$0o{Wdtl5YXG$HsS;~C5V`r_eg*Pi|(~bbB+}X%5VEY6leLDxy@$$Rmehn>rGpQ zuT0(P>th~_{xSwDOQ+(RcZVom`Z@5l9WvE-kM&wzL-58nRF!k?8fNg7`7vYkX_t|l zR_Ate$^5a|2r0S$y&G~SSWV`NpUS;IuU98E&+1C;49X0fHSM0Wjxslk3pArMkm(Dy z_@EYl&8UN`z<{C?Xo4T+`vY{4{CLe_?>&`q41tmnE3>G?8T@`ab3_WsRPgv#y_yV( ziU#2a0DGheGAiSkD!dTZPNv*;s?MQY0mMDs_ ztR=DoE*{V2z_nDfKoV=H$XycpwL#B*SXES+x8i1v+8YmXhcEO!J=EU>tHE`_)QgwZ z%7Va6acE58gIBs=9eg*!o*@q+eCN?f#nF4tw@%bD^dQrW?-Z@ltgyPM-G$g0}$ zeFno-cWfloxWb*ZHsBOu#_t~|GlM<}A=6!g1ROis^>ZMf3Dz$aGm?XA+#>}v$?F|Rth$<`*tL+T=+eHyYk7W0J|>3j}HisHN2 zMD1ND$8xI#C@P3XfXQT$WO{iH3%ud3U;%Dx9T~r9jHG(fEUoIPe!C9amI8O=LuhwQ<5_U_0S^Q0q`dHw zFN#lG6_e7`vz7=o+AEGl0H0kt4r;%T9YDZmDCu94`fRtNU2t*DDuwP*_A{7@R9Z43 zRZxXdpyKjt-&-Y|1#l!pyte^ZvD%u@j%)Fj(=a^Yv@D}VUre9rG8B27LHX{u(tw$< zosbJsF@;5&bm|>vHjkZ~q7Kwh#z89`n0aKfs2|A)&^&Us{FGSmZ#e3=w)G3y>g$vX zLOtHu31X)lq!TNL$DNjcbPW34Y`D|qr$D>%VXMcYz&)ETLt7Re%xw;QSIG)UPIi)= zGZj0W>vOg#@~@rhdKXx1%>i80c!B(*5zQh8Ir%=ou;|qu&%iehal2A!i?&{A?h1k+ zD3^lq@0=%EiNtkf^x0A(-dTXbuRqNC=KaRtuKIbZJ9etx9qq6~dv4!G^5M=VkVuX$ zx!KcTNVJ&GL6N{WNL%rc?D$-<8IJ##RS)7b(05kbw++r5qYd&jv`QC0B1Pv=I?d## z_TxoV3(A;uaRYfM&_}jUu=1m}i4}?VI!hjWTXBO=aYW2O@G|V($p@lfX z6l=J1jf<;XvHLOW&^HqFv$lF)@tUTG=8aonSB$@5>Att3d~9xA<|n4=nOQIcr<)yR z6P#6-l@(zH&M@$YoOn5B*A1f=Cg^O#7QWJ(B2z6JU6oWnW!C&HD+^<%z6PhtcYXSuf?yO9`^Bw&&F&(D;& z_052~`s$+J5}o^-Q!4533Ok~zPl5G`Xjdl~_g1Uf>UVHS^8NSoqCkw+21d^WcJ_vw zXSm~mIwT(`EgC{tEH&9(UQ+lznpaGZDii2J7=j>@p_=qqxV2X!)kuW*y5WPNLl5fO zz9}m_FwZ|tAyUYJtJrpm+3FCj@M(|p7FS#5`l7d&A>w$CvnXCkQTj~cp2GS_FH09d{8ZW zK0H9!-166O>lACh!P$SFym>Pvz9CDRViwo?Zg(;rg_5<8b@2r)coB6jL(zoFJ@N1_ z&bynhXVD(Jt+-O=x|>9+R5~IkDJAC_jQiTqt%RUy5Z`a{|5Yk!26Y{dYgqJZju2}C z+0Q7Q5jig50)Jh23d5=+8k$ern?Q(&acL;1qK430U&1(I-}O z8AvI3gDxS%eodL*)>x9JI62W_5X_~S6f3U>eJkJRa6OJUBcD29Nj*er-0iK%Xz+QQ z{<8;NWoC>)8Ta9`8?HX&O}4WD*O!z$PSJBkS@%tS9+Onpgc~RFJ|PS}eS=1D2;Lv| zpaQZcxoK_wxbN+F!d~m2CBUg~q7VLB*Ky_{jbs&(u+UFYAZz+XYK}VUTE$`&>SIs{ zO=IB|g&>4k?knvhwtDEmH0JYa{~;MBhXX1hZwmh+zh%I(7A@I{0A*&veN8@7jmAMj z6?QxtAg#xtP$YXiq?Zr;g)13_u*vFFRwYr1*FXFKjiJ7s~aWt^KO zj$}lo@5c63FX&E+(PnWh{ZJnQ`)Onap~9)_zh&*u4ulK3=Ph%$`tTU?+x%Znu~}&# z>m?TlxRwmeBHuj*CRUF<$pZ`d=={K^mI|@5#vyvPw2&_nyP9ZX`^{Z7$FTF;->x$WnYM+FOe~|36c9~n4%8twFdEJQj zjwNf7re~$ND0U3&UsOF7wVfD!j@%q09|j`MramMl6e zD#qDtFCi+p5=Bzp}(J09x7p zuKi_~r~Q@a;u%*ZV3mqgPhJ7&J_M>VJ?dh`)882z+F80AL-Yi$-cO%U0a0uQBr7pz z`OT4Bv0Z!JpOgE=B)X|T%2a~>ZjpZrB2=sUy_crZ=y|-YZzpe3uE4-Cws_BqQ!vQ% zx6mq27{-tou8zzy)@y|{LH&4%{XF#bMn+ex2kUg%2%ZWiqo;pOB{19x#+(rqtoUZ7 zgdjZO))P+XKb&fjBPT*=o{d*QgiR6}h&65_=Ru0P0dS3tm5>Y%pM*RT1m`Q)vZx16 z-qbl|&@p0no+^l|*C`M&S4efO=0GZoX&3{E(7my zA+lGqNpNUHR1#MGL2y3VgdjCZ^gV;|hs^^Wh-x$iXLAvaLJ?+2?xy1=&*%9cC&I4H z699_^`tnS=M{R~2h_UV#DbOVTuS*0-^UjQ$HI4$~HnSFAf6^2h|1Hj&h}zTbLUmtN z8GMkEl{fZdD>6UmW2+)^o_t!+xNx(og}m5>ak)tKsP6WgIi*HS-Jm!+Iw7MwzBeLU z9mHmM&KN60PB)5Ti8F$Bm|$}ncVPb{!gO38VhCv-WB2y=MnJgp1T*n+7&sKTSIv+k zSE9l53uwKaIl&P9?TiJCk5aAVc^vZeTz`X%8nZ5Vs2eg8P7Z#!#=2ZezDm=jmB4~c z6x(WRb-%gWiBa#1yBxkRGaA}jr0!!jjtna1?@3*^*HL7unNTCi4+|8(-yd(uOHaAp zxd0jTUm`V#tQ`ishc0XXh;2~|U+xu*y$3A}-bkeZ4<)<(y`~mrwcZN- zG2ulJ_%(gH?=sa3tv3_w<(?h1+EJatVQi^{#?uy)*`& z1cJQs-JAJ?Wk~bEtZL0FN)!W&ZWBHVoNtD5C$1mH9P%>Fy%xDYJEd$aLUu}+z!LA( znH2ET9HCm`oy+YhqAS1bdc%(Qv?AtQ`s%2=J8v#~^%TvIo`i()=DqILp6BeX$IzqQBY`Bsv^hdc9O1$Jsend{j*4sdBev+q&~q&zKh08YMQ()P zD?2Qn(Ky(ArG`0jQRR$8!5{c6zYv$vPJeI~^49glr}#eASh5yeb$9=Q;kuKF1kK9g zF(Qrug5ot};Fpc{C0lS$UtrDVgI8|XU$ERW@qMKMr;9yHe&A%tkjmo_rM1<#N|Q<7 z-1w>sHvN^)@)MA#1kMPq$TSXOxZcD)UcF+&fI2XgRsjiniMcJ}`a0LGQo*q5U2Uzn zmIo|_IH38u>U8Hn)QN$ov<6Ojf7duJ3zliGBZ4Xx*C?*6ZnkiYOLv~Kj^nrbs5Glt z;5Vz65W*`H>G8p$%}(Z`hY^C3_T5YyJ2X6f@hDPh3U(3@8oVv(A>t+hz{^{)J(}Ml zULm>09{ixae%NpIjX#SakS5X;9Yw-d#$HjF$_1mWaNqWD%VWA^()7(6L{yz-^p}Cg zb{V=D#sz@FoIvKt$Xl2OTBaq9Lmn6^x!Bt@3{1|QRmh)33`CcKk|s>Uj<6AW)viX*`<7r=F_Yb`0!u2#Sj7ig>KU}5OTz?J0pD8 zLtK(eHp(IYveD$WvPx(-;}q=e=&l*?NedxPZ|3Ga2iC!8MQfn+JCeEMxHQl6vs{?tMNO!OBrEsr%nC}A1%|O zh&>p2JtDM{LJfj=_}k9-Y3ix_lr)L4xwA%H<$XHRG_*E+oF{{I2*J|4o=kWI-VQ-q zbqJyc;FNCl)=zlL{g4?euW1JnceHXK?nbH9I({Owd#e}y$u*aC=h#jDTl@V;nlCAd z9r4h_#TGrl1x_l`%R4UesMRtIhzZ=;fxG`FqOk5Huw*(+y!LTN-}0mKAb;X=Ak2rV z51A#OTv`_Q*&tj?Ic=&N1QEfEMo6inZPj`ppV zX%sB-{jU0s*I#365P|_72U~A#^XAjpT;z~>bdKm{sltU{O$_e~b@Gg>5vOyABo_&8 zFA55#c4nit2>*Me2Xda(JecI>GSe6vX2liZo;TjNWAwK~dOrLR=4;}#vVDfi=;I0v za8=cd-vn0L`=VKv10jpQ95~NofQ$3Ct&-#XcyEbr2sNKe{e6l5(nc?rR|iTsdZ9kw z(@B9~nC4H_FRtGJJ#t<*$v}-l9U%(Q5MNn@2qo7;axN8-JI6(TzM3|}lpjeF_56&( z5Y7QZ^G13qu>6jH+A7LOr-Ct_yqJdJJc_wp-su_6o9-U{p+jn}@nt#Rpu-sCwd8{I zviF~`HeCmbRYq$x|6J{P`hLzyNH6!o3*lP_g?{Xm|1B3dC)r&U|9GD}2K-#awq{Z1 zIXC~S*xSK!%WugdT_i@+yX7p=fZd$sQ!-=)dT4 zl59-9V{|6Z7p@&=f{AVGN%F***tV02ZQFJxPA0Z(+vdc!ZNK@w|FhOP{b|>#>fTkm zSAVFkz3;1mY^}1&$*xo@L?v3;$Co+mMzg2Fqt0)Isn+hJea2OyTs0AGg((Rc9h@YU zMxZ}SNO7`m!kjN?&_ z+{pzort#=(xIcd4zAIrDncKH7GEHFL#KU(R#d$n}%vVHN$zDdVi+R-o)X!-fZSbt&|9i0tZLolN!=U)+c{&*mX33D+ zgMF>5sdQ81TKZh=QxN(*l_3q>-Ac;A`bp`V#wn>0I-=VK5c;7z%-;|(RflcXPwz<3 zNV2h$(&}C(pV#$s^piHFax!ODIf;dyBzgu(sfVmmWoRVvp2@i4Sam8kNlFD`1F(6x zCSfQ`Jy2C^%!pSuAdo?t0xtNt9;L|i56e%QDWxO$_=lAH*u+#xm_se&*b{@uJ**m& zlP$0`RbB9z+lQG5@^_xBB$6w!AYXtQ`hFr$r@EL2NPwCWG^7du#Js0Kkhj})B zv_yb@#67_jg-GTkjqL!6M4&>gMAc1oqpNR{!HGi6Z~tY~PJ-fj$ci?HZ8??>uj(-mTLWZ~(IvY(TTtZVR~%DuXo z2%=gl&k^%{4NTx@H!T4q-GYHS#e3@*IHk^|2a3^9s>GY7l>6pD?z8!r_KAmFV{Eep z9U>9Jk)6oqZof3Q)s7#=Xv5QJKg7S232n^?h?oK}*=P+*fl$SBQTCJGj%7D*|NTGevAc z910`={=a5|ks%b-`;Ejf+LTs5K3xPL=HK=~wFun36+Y?pTjr&O&|rR=+KWA)QWjHi z$HphxtFU<73V-hV0d8Gkyg3q(J{;%eoM$Gfuj7nlMBtziGK9J5M2F(U-BvyWzTpN; z&0N)lM@vSK3Rf3q$A(?|CzEy4_hOx^k7Nk((d@{AxlDw#Uk>=kLQaM{@&ch4mx2dlGSGZ3_q83CjW zyUvB#7;o9tbB4n3+U-0TP76#lCuWV$-ez4Eb6?G>wyFnt1s!98&3%xe{ID+U$^1Hi zSjpD9fZv%in$_5R?4b^<@qj7;mnHKrP+~XqDQIWLgw$Z1XA<|3S3xdX*1Hcs^EzLH z&bt0(DMwO%1sN(kA5cC6UgHpMZ~n%{J{8^9^YYb=;0L;XNn8W_bj(hDr0OqD+Ab#| zGkl)oO?V22%|6szQj7sAWpXqppMa$f@uOE5yt0fvOB#|TkSPpQt@m8*p&SVmX`yJl zO!*m2W1BLuq>|K|ZK-}_x~tCFo@vuOS2a82G!@#>^@qS<|33Ns<2Fd*BM!a()bd#= zIr$d+lhKX8Hwce#y>?{2f7yK6zeEvfIn;KW0l9<`L)^KpP`^78 z1w@8oTxx7`vZ;KS-nkDCA?uG?2~-Q?f9^?aeNQX#EtP{B^wa%<@;PU3GP$% zc^nsVhvtCJ9T$DE9|b0vf*ZmkSIn5aichNd}~6n*!C{%66X&)~pzo$eB!K^H#OR?%o} zMzHv&6Ir}bdLIX=K;33V3#`;fg=7%p-2QbSXTx?8v3 zKg#@CMG$=NFdTumdAW+H^HsTdg89_%%mfv=#A z_p~=aT#egV}Iik<9YR|A|P^4{V|Md>=q%(eHB1`_L!5OsDKL2<^e_7>G z%{O}47qp>cjr6rx`lM`clnxQuzPzqAX;J|dQ;++j@m$G6)|1*fhi4NghfwD~)o8&& z6Me5Um;x^P;r|mH(VDLO&=A&wk^V3NPPDOpx+ru*Y;>1PA$%Zj)ce;&Lr=!v=1Gp# zAF++G;gilrf}4F}9g^j9_^-cXUiDQ+=D6Yz>BwURa_+7)+AKTgUM2i#5}tI!#Ph7Q z&<8k3(1MFL;4(i)`O1!hg5QOwUcLoCpk9(MD08lWPg}`i}&Qplr&{ zH`442We7Nzkc*zh3}qP!Wu(!r(=dr)zh z=C~^8HU5f^VHrb=hhxIj#yX*Egg-P~@4j`!P!lUqObfVtwQvjrkr}h|rPZ2)Y>1h< z5Q%4NI(w1I1j<*Gly}Y{#E8c=7$on-lTQZ8uc}!!PF2TsrZv_zAP8qW-2RQdS{U%X ztBgBzhUyn8$dg?IOwynQVxg_v#2KWV8$w%^uEeh-O3d$4MJo4K&m|rGYe5jGvQ&)$ z;B`Va94T6{srg#cXO)zZ%G;+WZbJ)w4s}QM5$HBXKp|k>LffnqmfXr(in9(EHY^Jo z=lka02;r8pqk(r3Z_bBNY005L0n0Ni-G`sCPu8c9p~8x*7pu~pj##&pTVm`{vl8E& zk`y>R0_VFKl$(c(K`QpTU%NAE9)3ZjLrK8Kya?!@rdN@Op>YA~9P|^iX zJ)b#-kUKizx@wiRWBup2g36xz2*w%4XTYf0#{b}#|Ebd?H5~$(v_9a(o;#UF=dtd; z3rry`@@oG}A|q@)$=mM@4(sa&A=;P&G9+*3Q3u_D%q$|neh6i3vH4xYD$LsG7_;Zf zQtci$N6bx;sD0;+VnPsF_OnmH?{gWPEZB61&(FI$AkMhe*Av%+y@H_aA-i_UD1*07 zFVHFg663gQ%h8IhNA@UHR0dLUxxLKE&y_EEcK0DR1M-x>vp_H)n=DU7W4wyx-sEt_N~XB2ZnqVPN!; zz)0_eU}bK@|Jy5df%<_4ZezRjWs8A@N}TqlQ`|~Uc0>X`F{_a*X5(dQx}OBoCYA}j z!~0txW|KoY;L3k2+%YGtsw;QEV2g45_<*xa06%J_&aoG}Cs}QuxYqgjPvj*b^4I0* zZRPfZ=P+eS^H*JQ26S%Jk5Vwz#Qmso{meF6DE4COq>U2ZN%Yg7mE8^Dd>M5YG&_Th zF-&k;orn%q*b)+Gb*yuLy~s6qW^zxP@)3W(Ku*9!Q)8^*m(2DZs6BbZ`?B8unTR`Y z$7uYyd=_*mzKvMw?M)yrPwUb4!$l$Sxif7j(jEd1`4lAUk#)!#wPIL1(_VC;e_`Ks z3D_g(_G4;uu-gM(^?jbuK;}Ok>UeQz!#`K^j?FG$I!mN7dLM!lh{ToBLWM-dkP}90sK0WDVAfHZQjmw+k?3 zzl_~&O89Vn;OoBv321%sECUk?c%<&J{*)WJ90ES1nlp%+T&~HVI4O~nv0(3R@?C(h zS!=t|G>YrVu)1IQy=kn+80X34$i7ty$r1<5?SvF#jt;G=rDDR= z5UT8`UO%VMy%i)UhauZgAn_6W!G0zKCxZGSeNX0OI=Q|jTAZExHJA+aE^d zk=hZaU}Q{-m$_Lv&8UnPqQCA9A^}6B``O36kpa4``+EA3(Nl@Tqc&jB#(ctXGM6ES zns=Y5s5p_^sydH08ys#9pY`3E_yF$xyVe_AG2Fbsy8ZJAr}3#J=%G@`jBJ9OwRXp9 zxqw?tLKa~1x)dbM+4KZK?MP_F$ zI5Lm1if(45%f2M9=W+eZ5^f(bEGiC7s4SRET8ZLiq8~!V4U8!(@R^nTyRr@Ti^&ir z<6>g1#Lu{9Nte}i>$7;qU0>=SqgJ{%!)J1n?PHUx)B~9C{U!$kj5mtXQQGD;J$0}W zyx)XXL@%0GGN825-34jkhDg|EK(4}TyDFr%vS>@gYpZ8uf2wC4Ao6Bf^igD(Vf5AT z@3z*Q0?ddsIOhGgNY5F8kuR6fsF=AiEiExmUEz7Rj-h^vrB=akH7N==gW_%y_@M$f3?AU3loPXUMqWy|5ajAb3j+r^78#u?3FU;Qybz#Ll9Dy zG!2LmDA+H6bol!pAB&soB*suSn`%_+l$ZRY)zT^<-}LgsCmCniyF9PWx*wZLa?OTWpS6M8ef+7 zC2I=h1|5ce#$WGYGkdcNHLK%s*P=tbhUiBSZvRCCGOS)f8-PhIiC~SI%(;Y-HfWv* z%Z8;3Q1zZY=HGg1YYdolZSmbFU&@RsnB&GO=Ba7Z+NaOuo2*QZE6~BAE(=$2g8$|c zHYdrtcM<9CkM-3Rh0*6#RzgrNyET0DwV#RSatP8T+*i^WsQl4gOgFDa>1&9(V4E6@ zH8UT%pt?|*9U_O3xrB0yIPUdl!{GY)cxn{EwHe=O`cD+Hqip% z(U@r^v^-`Yw8Nb~tE%HN6hkYI4js_Cd<6n9E3DGd={+%c~F-}sKVb&U(I zgvSJp#HH5>>mz3+@g+C%%{BBTs8&u*H{TB*add5xA&j(t%dH9ZQ&xg;8z4MnO+R8k zKM1im8K-zqIxCK^+4+Tb)~~i*AnZVK>$pUd>+^MICM z^oC}xeF)PR0KJfZ^xJnRQu4B!ifcmt!dxMl>+c6Me`83n_8Q#_{#=?&ptZL%bGF`o1 zW0z};QU5QSBmDpjvcjXhLok$6cGHC0O~YG5XlkR@t_cd>FWp;MFv*kxe1~H94=D$* zl<{sQX6T%hI=tRcAMRUYSNU4}OCacjROma;@>|oiAKVCL9&*XfiuOV>SgXC(c=1^6 z{iO@xYsm{T=NRUn;>(2K3Msf+Vsx(MG~eQ(QF%}lF>g_Li$ZT+LR07iwp5&q zu6Cj9)o{>+{3v7;${iJi|G z@LgLIf~XS{t!J}y2L6U=ur>kOqn75+`n)YO2KsK_`SHcnzhNF^Z|zj6Ni&;}c=#_A z*{VTBQ|ffh!<=YG;Arf@Z8~x*@11Mh&tFq{fHS?nqRr^2Kn74OFAhzMW$(8D5MmfR zh>V~`crm%p3qkC*!I?pgPH8-khfhwTVCnGqziS9LfdObK3tGGceN2yGXz>QcDlyYO zl0m?rttfG4VaQ=-4ZPGR&O3n53@)J|=u-Xn#~V1E0p`j!^jTneMHX(o=OzM~m|I(L{l^(&E`qQl#8S z{_fbhOWsQP0(0{G2v_^uA=M1Yk(##u6DR2ozRTiFfKA=IJ6Y|f=-0kxT9*4S{ghTY zm7W@`7BsJOSa03Bx6t!>>&k;3Dtn1Bxh>l0Qqi!}_gmfV+v&PW=L%le%mo6e@b6+E z#2)rF%xsP3zWsr0$q%?OuOW6!cG^%tzf|kwxJ$mRjFTvnK9%HM>}BHGnwnC|!F)Fn zx|0%O@N@3pfq~`DG>V3pTKiIJiWqmIu+z_hNQM`;zl;1Cp@sD$3{+z(;QeT-#Xqxu zr>~}=1iv^8fY&JpL**KC2xCvkr<@xLyVBE%JX6V1K1UD9m>kzlvWj{3qp-(8521zD z{OzKXUI+BTARQH;;AY^{cz^a>vE7?e>ECN!#F%q%9u%8`fAcK~uq&mNj%U$**;?-A zT8VJZwZr;{35Ba_#!TNg`HutI{K@O!0%_9VYkbgO*Pd32PpJ0hFLgRkA*0&J#$MAX z&1atx)Znea$|y1!bA`?vdHeE{CEN?(6xDCBS6RRk-%hr7d0}o<%~-W04U&0@6F-qH z7$LupT;x{R=PQEZHSw42*gCE}@B=v*#r2D$t;ViK&r*i(Q#Oy0)Y|_vFQ1Tvn0MR9 z;#^1oT2S+p6Fwc^oHFdTh9E~cCx=}OPC_-u8dwuR3B}5geY#@ob0sAC0Z+JS_Cw8T zX6)zBTOcUR=xG=dlrWZHbncl(acZ)tvEABR4Dy2L@V#Sey`o>GqDI`eN1Y(L_3P#q zT$S=I<*GHT_FTMR-p{+w%!`^f|`rOLPEFO{3REZ5;Z%{VQAd@)YrF$ zI`_gslax$4Q-YL$264sS4y#1Q=#iVqrfIR1e~|#Vz=8#6UyYQS;CJx(ta)B28gv)#tea zVlF8;ea>0xH5g46Ynt9-eh!wWut(%US{x<#VI2*7h2dBd4%Ix}4uu({&re27pI5nw zFpgGPVONWT3&voxI*X;tbE;4?P$(5e1v;o;1>G6jw==JhkNtZE_{5tj#~Q9m1~3C6 zG3R0Z&A9`m!E2>Pq~T4^;N zg5912V}WIozLCNm#4eIR5+K&F|F7kO?G`HJlQ?hI6odFYSUOA|9OtjKnM)*yw>bwV zSsz1@%jg8>rXS0g=qB!bp*9bDZJ$}A?_K)?Q@-OgRY_GUV_;iK{wES}vE}Y~_BVIG zt)A7AM7>tExCVujsy52k@NTWOiuBV<*7B$UFFQoy&%qU(`xO;Ee|nV|Y4?kkX01O} zM~PSKXoNr-ci+3=!i0pH(+J}9;cBF1sAeR{p(oIeaE`oiqud%>S>0VB3j=>sDtTsX zW*;Fq$nyd|1m3PF8O;i$prNWTlzl*9vm|X+C6xOLYy1xV#hBUfeS&Pm8N|WEZtXFm zh1Sb-h2|kRY|TVsOuM3SdJ+m^E@F)S(PrZf@pH#oirx(@@z)VZQbyC2iR`N?p-pU` zVDQYcq)o^at$>xg9E@7Lay!MP-qL)bsxTG}(X|=E&(*DS)|K?sE14DJ-<7;SUI{qP zd6pAw#tSk(-GI+xjzZw|k}c#5V6ZVplg??1SfWbjs zi4l_zr!8aIxc!5&cGVNwIrjxs434vfHMTKwbaF7(xBkzvHL!qX=lDg$K=hx*%?%4w zcDFMo0*cz&I0+j&8akNUIoUeE{{L-Ree3TY5#`@Pa+1PTE~ff7Jzpd3&hs0>sA>H`gchCm~rG0+5P3N!!W}{-qdB)-J|4$DsmB=it&;zgQA#njLdZP4sp_OIF)CQ&YlM)6=Lq zR_4o7G+I`%xIjN8dhNlb{VC}EvQ04fxqc1#5~D>~Pl80@IF!|Ko;G~B=9H$sd>4mZ zOk99!eVOZ@o?i1=uTNxT_&>UUl=)(nfXbQ-6+ODJWqtWmFSmopOn@kVoxp=|f=7YU z%MKNpG!4lvf_OUibT=c&KRCHC);mLqucaI-h7#4K~O!_xG*VmQknaG?;=*Y+&Dq$Xtlo`3>)binB=`J{XO^+7zaUW zss$~1huemiXLMw9ba^PdT(`Z1v2FeZ$g1U zvGv8bKCm!4Ix%&y_4hPe;d7WB`ZGT=H8nI9X8kpy6UMei#X~hjibr+xI59<)i?QHW z`J4Dti%QELcC0AixVRUVJRE*qSL)TxEp8n;0|l17nq4EiatgjSFuU%Cc);$T^BaX- z271=HpM^o9mO!CRi<;DM{w+ivo9j3*SMxZo*wO4K1?lS$R*fiUl<9%Zga+8C53dv{ zOiNdLdrf;L$Rm@VyjPl4yebU5`qRQS+m|t6g6gGuxNhwv&`!RISb|>#_}2pRK1QkL zoVYrm|3?I3i5jU1;&~S}vb6L1a+iiI-miXubH5ou7lH76d-IrKiP03){*>QQ9?DXP zCo$y8DrbWf(<0u1Q!;;qegQ_C&l{dRxZrZKby7j1mLo~+3>>t|;`cfAkXuSv$?Wo$ zc~0P;Kh6hA(@hMN7gnuGtM18+r`5{zjp_yM|7^xV1ka%j9*pbbJI>x9D1RF8zZvVXBNaGBluvA< z7d!^uUKHu!SSZ2C?~$d}$(pXE((*61+!)#9Jo4H>FPeMwX(4|rZkpW7k0G8(WJu9^ z#(O*tbQRl{|LRgt;p;yaX&)MIK>n_X<*;-7s*J`O)45KRM5?%%BxG7A-hEQn@S&%x zWx_5n`6CcYy)f3>YZk_ICOWVfN&Az8OEnA5Vqlc}VAVk4Tc=96CpxhhpT_e!%kFx3q%8mpWzSv5n#MeHfBY9$)}3^QV`B1Rqu z0C0*Y__uLERqmAWzLY(lQ?Yy19_&H$Y9N<(cnUcw&Tdqm<#cibkkj;bqR@6nE$2Zv zi84aV%ssG+_8F6e5j2;Fq$GWc+{C=KSMjF=wckA5_$6({Hra2Qiop8(EE{#{i84$o zRg@zeplbwh>}7pvQh?KVqh;Wk5&x$;^;#nfkh>cB znZp9nEjhhQzZv}&4c?{5bST_+GNeN*S?uIjo-elWu$DrIG$P#k?7OOqZz5WHk-6WOOcWhyh*JsHYbu}<<0FxnH&$Ua zdS$yaZ_ibf_;Vf`?NI)#G4fxr<(1mRKu~7p!bF9$ksrM-a};JUMzEe^uoK=TirsyM zPW@V{?soarOCHjbGMM@gl4Dh~6o`*th19RkoO2#)R_)}M1E%TaVv|bZN+_H9?u~aW zz0^FocYzuuy0nWGBHQyB%l@D?Y|N{hVw34=>I-(iVMxit9))c-v7%GTJ_9ldm*p-_Kj4jmZ(w4lPj5{u!)~Cx1CADw-RtO8*|!q=HdQPJc?IBu*Fl3 zCFHQ5ukx1bYNR5pi6vp0qa7mFp1;_xBC!g0m4udp$G4}5_IE8!_5;iF=*2k|8Trar|7Q}1HTvNHZ$3Cbvz>QC~Kas+IbTlV&dKWZsH zBjH~hm!|u~BEqPwvM=R4HN%W)_Mr_l^_E>!*BzuovRK5uZODi2sBG6L!Y7WH;rT6v{^(DuP7Jbk#sTeD;kvc z1EO+OU~XVVmAw3ajo5zJaTE|nCc~5V(qK#^pDp=- zn;FLGJxmhaM)(#4>RNzD){O?>D>J2AUy@ZTQXZ*# zF37Hf{*w?B;~yt%o(r!%VbAH7LO&Pgf>LkN0Gfo}isww^fNlxES9cg-WfLZU!UiF0 zJ+bV2erkNqZmfawzEC*-97MW;Pg&77$Qf0ae$u7UT^=$IG^SgQMYeLxOA`i%mX#*T zvhs$^yw)Sn!&R1ms)7QKwb(A`eFVWCF9#XrQx8Ld(B8Dj0OjiL-6@4aXs#8Ih<<4k zoEQSGaZJYZ4==C~k=1XKrAeVxB!Q(1T?L>f{@sL?={-(fS5~-7`-0_LI6$LitDm+o z#Qjbx2c_9k{yP8kfFWN@VP0zr(=e$9!{mr-okj4Z^UOA>^9I4_>szRzT*yMW*z`38 z8>gneU(6j{N;%|0d2OGAgFtUt?$;~ei-c2C8-=_%#F){rB|AZ;3*P((;0-%;WG#3U zlVPzgZMx4;U883Ig^QQTUAmE(R=}bqQ#ezWkS2;!Z=wl886-Q9HMjycw2u0G)jrcx z6mj%dS7InqW>~xC?34y~Ub8AsfV9}e4vY380wZ>xOqkSu9{OOh?!e>?bZl5rA-mg2 zUiof2UG{*Z%-F zm~4JhHePc5;$a9SWa)C)RR`<+=@<$%GOa=W+v+18HHJL4cVn~+@lY2L&JUI4QTb13 zzH$ebxQ`b_^upP7Eel8bKy}WNfWDR%ms1Lhq#KQT5A=qe@IW^g3qsSE;g;E4%I$+} z$OkdQb)x|Ot-YWQ`)c{WqhS-1i$dWUD{4)VcF02G92PWIBI%5LbS^k1qU9O#@K&~@ZmvY^5hs>W%W8u~!Y@p|+SKI){d_gB^=A#_MbC7x3 zX4wf|Mu?6##e1Ex9N+jjhF=_wH9j<|?&xT*yNa>FlYnCi=Rk={;K@Y^ zz1yqXj6C2EWFc!&z8oO+ijJ5Qo*RlZ_xFIyh+TQjgr1pr4{|tb%{-Qnm^Sp3{8!X& z6^NbHDw1pjzVyqoEW9D&4uE6TQf+cobKAZ?wH-6hM#V)>!{?dpr?JFr>Du8%;GJ&W zfqM-~$g_HUDRYNyr4>75ToQO9$(Uw47>Jm++*Vfb^2cwOFy`-|Y?7GfXC#a)2dfX% zV#lTcor_tww^M~TUMgvO;3}db8`%BY3TFVZqxeY%6gfrG zXMeFs9Y1kzz$9rnl4VpBnt;s2<7^}&u@+A4*}&6Z3*;qf9WnV2OO@i2Ydj0A`>IIK zNhl;H5OTOzhs9UUjiofMAL5F^WJb3Z5e!|+pFvI%QSz)?d^3XCy-c0WPxF?F zMv6NmsM)dIpF-Nbh+`E*(wQJdMVXdroJcrJo7v;~3Yiiy%5u%$fA8;~xxBE)G*}b4 z3(#uOwwqRierw0!E*2tt>RY)>DYna|f~?5&Gr8U6!wCz%mbL8)T zUlN&oXqGGiVPW^5#Z%*THcxqN7kR1mEjUud>sdU6lm;@-rcrBpZUj%Z>4lFX{Qy17 zzBdCHULzuFd;}|H@L7zJhO>^yH>f3$%+^A2lrVTZ$$1|&t|TUBW+S}Y!B&;ClF^V9 zkmZO??1SPuu{+hWmEbVctGA?Ind+%H7xol$lx=UK=7EFbg=9jpCSnY35z@8r1jHYe ztKl>fK*Z@%fvy!kuJvXLm`r5iCk>o>@bXX&J6THG;|^U;iu{7msfmW^;vbYxB9H&p zQb=K^4lI}fCar2-u;C3wvO3~F$oi9)162T{YP@D1dH7XqAi8%O6PJ$X*!M`bWye~} zD}oJXM%M)O>VFb?a(nPk86rq_n5W$3>O?N}w_TKb7AYjza{y7?`L#r!CLPRAUmsC{ zLd}hAp52(E~y}?Sd*TFNkD3TuJ@mOBS8uQ#Ws^&9DiqebRDl%v#xcsJ? z{BWq0*CflX0rFXu@0=;bjHg2LTlqMv-B|^mQqgrkDz$ASrXEQhGEpZha}pHqM(zNq zUB-EZ{c3)|RSeF>b*p){Np9Jzu-PYe6MhrejCAo?LnV6BUfPFZNFJ=!B=__nJT=~{sC30iT<@I{hjXf)I_`aq0^mFUq z$$5Wvk%uY!FrN&YkD&)=4AUxY79`Ez@q`-vtHGvLeU=jxWyz{|fXEStSKLeM44#hu zXoGmTKGX5-_sL`xQ<(cpUW|jgBMOw(!5o%qOe}20Wrs{bOkzjIMXHc|zVC8r%J9uR z=LOUQ@o3K38wTCOUs}RPy))LSE3Pwh2H08{EaJhNYCN@FBCT~8=iW)*jAwG&nP0{cgw&=yA4*b*1QsU@|Nofh!0MKF=w zP%v}H-5ZlBdogCadQ-=q$a&x}eyqwUZsERCL-&{z$|1Y`=**pCy%PF68@}};9D)1M zsml^*wA;ipqhBoF`CjY>#Y5kDt)E6biETH{`I&-<1H%t-iYD_pX3!$TgN&hj@gvQ7ESJ`9l>GgK;WIdgjs3~kN0cM*Wy^%A5B(*%u>reH zjv&iwH!xMs*ZFZij~xW8=2RR#{w9@52E`avF!v7Bsh0as5Im?cLY8add6NDSY!op! zNza8^i8`oz)n5s50GB3}?%j<{Xyt{R5&f$^)l(Q5(MN`mpm5sr!P+eRX%&~<;uUmJ zKNYU9exNUBP%+bXUA&uQJ?*Jk^%nLmv&!7C^OIqa=&|ErZ~jG6Xhzi8U`jP_@RHAT zvv9cg8r_>qAUq<8y_D2F{$hdgO>;CPh|0c?l4B~26-ciw4#ccKwhpGL#9~$Ysb|Az zCPe2X+0;hg<}NX1$D#7s z&cFwdW={V87j_$_ymLo>HYU(Q&5LZ=s;_t_YH4ITwkc@##qa`oSCzq^^?Mwex~bva zZ?wYo2iK!AW%=N*ub)2xEVj1$pFRfZ*+XSI%W;AM0Yy4z!UPDsj+Vygn`O%9wvPd9|^Vkga2Oblfk z#B|FhB(h~q9WD)}mjVvC<>!x|ErZmF0}>W`)f~Y?T(CByugw7}o|I3>JGz%t^aK6A>8M@ zupVg0Q{STY9%PyyJYf+}h|-5i3$VcjzHe51sIg z=LD!sX$QAomLB{X?)ZpCn(cQ`O)Ca7l6{8Aa{n7qgE2d-cSDNvF;8z+@1knK=+n5{ zrBFwbd2i8Gs6c_zZGudY7C2RiX5%$F^wShR_*%?V7Ad;sgtmN8yLpvH#@?bD6u(QJf0s5B>*Gm?{(OtA3a(tEGBd7Wp04c|#s3`Z&E zzy9%pPlzep&bRk_g9iu#8VNowz-1{npt5`TwXg&n+Iez!?lbSb>}QA+SP)AO)an`^ zD(*Sh=zelO>X*DnOXjy_!7=zmMw!++B0?thb(=z7lk{2pMo48}l9xO1+DF0KDU(*}xpYE{OiPnjx^NoX& zfAmZCnl+3e1ivu|HZ&$aJ2#|j?GzjE9FBu+dJB;!OX=LBilt?N*W#0SU?RTAL8!%i z%3LD%TExCO-}sG9kmM7IC5Kf*U=@3EC&<{n{OUet8t{WtxVAKoa&zEoIe(;FnFPyA zdgqf}t#-Xc@R4(nzA28Nv7p?V>iZu(hE5O_onb|#25N6s4#3GTOXqIs8AvXRfq{86 zjvQ4%pc7dPr4~MQGMP2>Qq)|?u`{*i?39CX@01Z%C;qdu36J{uD5}y~?)Nlu15Y7Q z$m)BH$F_w!luJM_81TK&iSziV?H9y?J+@(8qw<(iH;y~k0t^FMTY@vNViIjr%qVSOg|J>8WTUI<}^G9J0#j&uR_e9h&|x% z=GK2ZrF;?-{p)n=&VL=U2-hy8DTP7S6c7WZCuiinNJp5#J_zEJ+~G_Ghm=+ zYjiW~;7&Zk^!N!6xCgX%rn?Aks8Jw^oDY_3%es^DVH-zdXQY&P zSBE#Jzr+@CTNA{ntnc(2w8f(8W_7P^!=f8yx6f^e)`{*Z5ASz@Eb_~ZPQ>Sq4%!)% zP)#w9G2>J~ud5gCwTYE(OtTxu#|~9U=zAQhrRKR&0CX}}95FPk(^Bo^*o^M{C($2>Z%>Uv4v z+D3k&wuJFS*52B5{tr@D^9tdj9L%Wfc>jH05)q`mf=PWwi~(!joH-K)#3ANx3zV>p zGF;<`d1oqS;-6gEAfX^!FKbt!hEPJYYQ(~U<*^73M;2sy5q*91-iaTz>iMK7+l))6 zmm-=1ise5b-%Gv0`WU7}e^!`T^AujJuh3Ee;i-d&(`zj_w=$xoDuTf@1@ta>d81O=Y|DC))HP#9y3+d zEs7soznG~`d{ytFi_Q@Rk~{?_HpK84pySA|y3VNwc%H|mup9sRJxE*wyuLZ!(e}mO z(2iprnwrrgC^gF*kYIHr$WztLa}UXiRK2?{bopg35{X`pg%i`W9^S)X=Co2_X^@v{ z<>vK@I>EuJ1+k)hhoNJwsNJuv7i(Sq;@I!13eTo6-cvNDCXG@4Sri+CqYNl4>FnVvo|>hPM9=9yX2eO!_xFFOj*F={*Gl1tqau*=Fn zfBD8Q6df))r@yKET0vNCFmMW3!a&;aD^#hCZUBn1sUBTfU-IljvYzs`Jd%8lFvxBp z$PwQnw)OBXM9$Ke36G9vzMhJCfdbYJ0RBxL9sFZ{&VWu!Tnr)*Xvdea!`*X?T)As_1fw?c0A=I-J5q}QMrM~+FYC2 zFg{?4xMOJNtcFQ%A5S}coQ^vkGTlgEM}SfhxPMoRb{(D0KeM;6Uh^ZIm{V=wm&2mb zKUJkrLN9q_ot>JZLVCxQF*SWo}Gs(N!i^X7(Ry z#kTzm-Pyu8P6$AIkva&$PLa0u`*-T-8#y7VB|Z$LcGp3 zRu-7MZLClRElcO6-gG{?(_+ag^sLz{X`g4kdA7z+hP{uEKS)LzjFbWQd8MyqM6ct> zTEk7APjXU_(zMltS(%QYTP)i`a_0YF5%=(ve)2GEWabX8&)%a?k46-2*+g z=BPv2343iYU#^kSyYpfM#6yZz@Y~f|glhT?Xm*?c+0s#WT+?Vhi4y3;=|9``kv!}Q zUDXTy;VDLgwwzioW%JyhazA)LQ7((jH+e_*6ZoR!>SCtMW1t}PTD}~E|B&b$; znwJUl8o}(Mfj$@4Iq8;2m#uslRBg;warWk>0@~Y5DS7Qn;GWC?MN?1mm!Y~|%-f(M zttK;bG&q8pkt;KmZSlc%ZIG}$jDw0<5l@rO!lKnasYa#cj+SOO9U98%Ql+KpGd`@8 zjtNHOCtUU!j!=bnv3nYJ;Ee@_!GJ;Rg&G2#t9JMiAg+v7lml1H_D?cBj9LYum^rOE z$P!wcCBIWR`eYQWf1jY>P%v}1OU9Lzin8s_+tpOnMBlni8qK$kNV`w{OfCYUfW_O> zhPy(&$n*wk7YlNr}C@-6Ok+Smw#aQEd_iW>?*L|8ZHMQnVI{|DuY5%PzrE>Zy zd8*SLqj~5B_%DKv;E7%Gk3R+#DG;_7>Dc$?H-Rl#SlawK;(c2#=u$yZK6LAoFrV4$IC=n+%ti9?|HO zOA=7|<3qG=*HJfQ2XdU{UPcftnZ}7md4DzZe!RPVvM37-BhE*`KM8>R0;P08#N#1# zue%V*e)epF{Kb!}?fzDI{sl*cR-_#CmrM8Cho~g_$TC$fO%Y}dU>gnh(@=rhFJQd& zj+#rN0i7g0gzj!ZE|M&8Rj_nxJcO}W4vI(kGp$;JX&s#`Z=6B)SywOB?koqVqgKWZ zED%&OwGvr(LW)F(vDYg>PTYiJnjD!V1oAqzjV!@k6((l-B@*QDbpOqi`sDpdOn{1q z@i+3eu*y@yH2NB`wO61xQkShTK-&JgC9p{bK60O#FHEgnr%hf~Ln@WXDYWs{NAg}pTb5>li)V~$V0o&8;*+};_UFc|MLa0r=SZ`ZR?kcVxGcB=kO+y-1?SLx`?zL`O+`J z=8ghQMo^7EG?odL_O$X>lo6n^onY4TmY!Mr&KPoK!t-BS=L0ZfQPwdphnKU3K_@l^ zNwa17W=?z@P$3%cj8JfDj39-ZQZ5BNHyI{g;#>02mW#Tro{;nVv3b^S zRe4o4ycp~Kxt!x7QnFi*kL@VB;EHm^6*4F(B3VP)z$Yh1EuaIlDaw=bgisio2@{^P zf#3L*RSv(M1mm~(0tq`0o0k+a@%gjvr<4I#(q|!xhQzjdji6ZRr$ViL>H?Zb<-~%D z5Qdw$)B{Q^=`};M%XsX<;19KyD%7t$j+H1C;)No2DhnvnY1n3v^_G3mSz5^cl%f*S zTTXZA0esiI%9FrGDynIn;b>jv)|GU68nCBC8bTY;q}$0M3a_)XJhMV=_Y3}TG8*gSK#Q%Y^Xy%*(b zVsLifEE|u{JyCJ9!w2sQREFfw*((`?{n@5nR<2ncExl}_xEC> z=k|1BZJj}-4z3XPNW=W`3oP3``HRr_??W{`*K7X=XLN9fDL>~rG}$cZ8v4QCDm2Ng z0eXl9dz560UX(UMHs7N&!zjmN0{pMPZ!e*9SJ<+DXVW@Dq`NZUG!Jo%fp3_6;@&R& z?&mO3G_s5k3NPM)K4z9oC(4f$3a7V;(Md&3uTY_%fx5lSQnqk-Oh*}BiLp&!Rh1Ri3+saqm$#Vlr5o(L zc~D1y!(YM6u(%s~8mU+8caFWU()bBHvBeKQtU3R}SY^?EXG8Z* z32}BG0DJWrU;J5>lTcPQeP=6JYC%6bAA_skr^+GwXLU@pN^Cfj|)>W zLJY}>_vR4Bd`^hRi;cVj3gt_4FQUhoe=eoM_y}=8j*q9^zZ8yl*VsXl5Aj>deJK)#}TBMygT#h zC8}S1i)3PzmSAe`Mr6|H9q+nx$kZ;hl`+lACO{tTh=sS8)g+?Sv7;Tiq2Ek)du264 zSQ!1pq4;U|{%+f#cgj5Dt`JTn#|ep~gR}8RM5@vz#<*NZ9QsBB0Iot$xpkHTp+HK`UuZ@M|^uQzw??DszzV#$mtBZ<^DVWGZl4PhW zW7m|g-pD)^Nm4vsy`0`(kQ60Ds-CHN)-50azTc$Sv65Q|xs?y|WyTNLZ!INS(3%0y zGzxIMfnrmO4G`@*FO=~^dAZpGol;lA8dSkU0vYEh#2t&DnKw7g?E+Sn@vv~7oIQnc=hQj$}ji&SDchZZ5$1S*t z_QA_-_k?npremU*^A>?di>+^{gwBoi2p0(i7;v!K!Z0le3__(9F?)RXDb^a{~Kgrpf{>C+C6QD^^ zW2lh3lM^V$mOs7Nz@1RQ+=M3VTs>I$!HJy4R(kRHB;H#UVX6d zbKo0B;?Qp4Q#dylGHX~Z7iva^4{-7$M;JTs30tygDm}Mrj$?oTDH6yP&@;LV2POYg zT7D<`KC`Zi4~+I*;wB064@EjY*VOE0WW{u;vh|Q1J0B6c@Op7x?=m$^p&_y^n@EjZ zJ6Dj}pT1#E?PnxTV)q^lcr6q)6WL72E3oX1fY$1 zAXp+lX+3TbggatT_L-Ppj<<0j-naC1HPf!Dm8-MYk{{(o%JW`LImzd)u_tEFw^OO_ zXRp1(RfflH?H9d^;S=Az04@m8j+nR7)1A|fFBg9i{T10)L9-Fx5n~}Ub1}7d+=4SJ zt6l$ET$p3R#TC__FWv;HLR-o6iZWFM4#8C*B|fjPuHGY^TXK402*x}M&lQk54nibkqEm3*Q$i%IK%luOi#C;4cJ&3()(v-69R9GMT$a%%$ z9OOaB;}JFdH_z2fgclfUcbhTLtc$y@E=hjTye^DUj?9Ydsa}SA+Xs_2MxCV7Bp6Cw z3$IC;QXgom!eUpB-qUJ-o%xD?loW+ZNEOe2e%9Yiz#xL<-LWVE6+DRRYORBN(KcuN z1fSaUmxNKnc(?71h!1;;|6~EOC(`eXdT1=5A4|dNK@)iNnwn|4fM}u@xBUn89xwF$ zTShsfgW|iIo(jLsF=LrbNajUq~!8$c|yA*CO$jq@pgF+^`R9HN)F` zZFi*%UIHC*+ok3jaHHyqMs<+T3Exy64rg}y14r>dd!B|yc+^Pke3<9AI&fx3V#)K4 z1NUXr*I}#gCpcDb*B$wY+5fbLM=H?7kNA?tM zR=qKoH9a}ri%A$bxonQ}Ge}GWP3S8)1j;ypC2JQ~?i96OE}4zYtMr$F8U-~d*Lt31 zR(h3+XKza_q@BTqGc1ocGoE!e!-Nx&^m9e}Y!}e$aX(U~G|`(nxv4YyFSIPYf3Ue1 z3qHe>qKNg(2Sd~z!y@V zx?}fls^4ozp-Ecw{$d4gpd&9DLBr(^6J&J2|L$p;l4*!cUvN&Y^Eae?w|mZqw+PK} zdX}u3@k&dzaE{HcLb3?Eru{~w(ew~q3j}mUGZ4jrh|oRZp)oi!6GGY(LvXi z3g309AFQ!J0AA!LD#-7*zNPS~1$+m+FxcW$oh?(l5?$-tv|Y9)pf284BrdTQ^7jl| zCWH~_#|qKRl(%WhP%|jkBx`FK)ncY_v+R>^rLP(T<7o}!P-!TJZ2g6J{^-&kdFv3_ zt#bM}QdDn!fVB+ci8?s)56^Z4AmQG(m91m*>DfqAmsUlGlv&=?2%N1HWu^G2ru&iPDUKut z%gpSR;NDT$HY*Y~16yV#)EkgK;TV-R%+g!M5AYo2TWk*_m$MyH3C*jif-OotWZJhu z2~`|8_J;>II~HH-q*8~J^zh}k@-i3b`EilHXwMa{Aeu6=e#tAD#bUxf*|>^F%I!BZ zi$`@wx2WL-Ih#^;_<#X)ckATJ%O2RkUer|I_7<24?Jg=u(2HrsK6FJ($dADz9dE(d z65&(q@{?9bEn~uMdZmIwJ;+gon}I%u#iO8xtyYi(q1xpM-_yG(W>^o|%QwyJtV9GV zWXX3VX@5gy$Bj`t?rx)-7$7aOI^x;pOp# zF$JCn6Sl{Xn5t7l?hGN#&N$6p0~uYIf_u9>+X2y0<}$U?yj~t1bg2Dotx>xGw~}i% zVM277vh0nzaNWE&h-n~ge}`JVh;gp}nL^zY-_BuhpUJb{pIqP@HzEi!m4tHfav9Z5 zB{mNYQPVhU!jumYl++W@24Qv?%3}$olqM84C#Kr04gVlAYcgoW3GPxf(3xOB4}jjb zFk%^_*Ws7~IUl+AqzcrYy35?BI3j zzK-V0$YiFe1^pUl=w8wAx2;GG9}pkjLuT;HdHD%*jkFpYDn1Z76l#b)paS#(Hd+3N zjG%CAAXwxZ0DDFzV7vixL`)sB?26(R=2AFi2Uio;H2Cl8G<$*q zC49fcPGk2KmZ<*naU=xj|Ja9>QNe*JXZ}G#LoT+`)|=!hXTpPn0%=C&UMmaUK;=|5 z8WBTuuVlmur2#T$Ij}gKXG+!U-4mu#Y)d^FY|dMo&K9s6kiO1dpT|+CvnJlJ$-TvA z>C+epIf`LWIjd7id%3da6B)6T2@EZRH%Ml3Vms>Kfi`Ma@u1yCVb6_P*ZadJAfd4> z|68);&<}Zm1(oVg`>$3i6E4QrNq5gjXeiFp`8BE0%PD(?9Av*E%@ohRzZh&^;sMg& zm{%=pJYqBC7JbJfy3{bIZKA*?5~hX1u)dI;*e&g8BB|q;0LTQ4d&A@D?Un>r)F}nX zMh`<45#n}pu{58*^CVf8pGY6yZd9PWAk)g%ZQY|uf^Mz+Njyq8iuYjh!;^gu9#%f! z8Mdib2P}Z$SG1~SQ#*r@H!+y+8)6GqFU9w0HRl=VDN$DFqt=ignxGrw2oadXlx0o) zLRnC2p8UJfar5#jjQ~z4ME5y1AJl}-x7+?cn{LeoNr(M;VQN-Q9z}%|XOa$Z1({=% zRN=;K#u-s4ZIPz13D~40x?IHRb=~1Uat^d!o4KFU?YyQF8zfwR>IUZdo1Jw7FsAm4 z;#ih{V%ly9D2&|km4p)U1}c`*7o*yooeIpMt0^%R<2$tnw*F1~A@Hec8wn67BgR>f zlFK>zz)#zG!hVqHG~nG87m3#2=l8vv-SI;x#^$uN5cK~2dU!Bfw(=m1ghjDgMf>iv z?^N9sTMA?3cxoAdo4|ANs1k&(%@6i_M%bo6ibM(Y7exZ4BEoD8k5tgsQMh zOPz;r<&#X$AFyPK)E2k_u6Q_vz{>Ec1n%Z!0l^i;`j(FFax1{R$VoQfuyloV)NkPc= zVfeO(iu#%~o=W!%pgifz@x3Rgllg_p<~(B?qi?2Q~J|42eFAd*I^=%}m@BD=WWOsoUboqJDL zev6DDY7lxSkk~sWR2TM<80J*jNL`qd4BezIm9_xnttN=e*SVYvMVKrSBJZ>h9cNIw zLi@SC7G4mB+sjDGZ42;vQRO45qO% zB2LPA#N7!g6h+mC%!-=yw1H8Osl;1FRK(y$CCNN!y-{SIM`O-OSp{8Y@D>bp^@tWDdyk%Hn+ym=)2vRa`#x%B>EFg}(`up*0c}CM~o1t+mnd#D4hCBi^)S zxHs4Cu$e7WnMctJ$BYlV>1`vlaYSoejRzkRWnK;Cz(MKjHlG9pW-2PXNImL@{=&5z zrg_dv-#I80_b-P}Z;S(1%0$Q(J zDa9l6twKuwZ5TGeko01mC3V;jZsV7PzGd?pFFZuX=M0<|?ym*M76s7(2+gn`wPs`Y zPWHdp+dd*u!n2gHiiagwAsI@x(0P?eJG(G8(?+2lCz#y=inT%_qCKsCu+;d(-x>>S zcW|AqoQH7nOCMu2>WAMx8R3JB-k;c^5dE&_zdyt{Fb{hM&PzM0N2#i3##Rt1u+>F4 zV70u{8x5NHhjk@hcwVCNiWB!)dmc8a)|Q&BlTP0`wWDw-&SYpNJ|MiYEJo}gQ4MWz zvyoXc`S?5^InmsidTKq=X2}3KL5DxJ_@bAC;W6{>?IdFKz$Fw7Z}I@1XrM)50Y^R6 zW|1r@u6DH4!uzy+_9GmRP@50zRx-=8Uk-p}?v*NXN1m#y_xL&; zN1pU37}ix^lF{NbK_u|$cX)yQm_J!81Z1M2!HUHnSR<-D3YcH}(6WL#)~YzEWu#1( z+g}tGziPgGn28i$+^V1G$eIZWi$qQXQ4X^)x|(Pm)5_WfhPd+!{#4Bf_Bv$%V2!0^ zPvz#JHDAfIAeacvb|WRiD4PAgE}D@xo0VIXF`%u+Y8<7!Ws_ddjz4$3G3jwhp0T^DJZbJg2DQqs_&{z%**-a^OAp&$(bnAp{95498~txCDEf z-K6x6YHf&0N-XZ69{>F8lyXOeGq~8fO8a|(;wHLy`1p=E!9Klsse9!9KIVHp({+`G z8N}%j>$m$*><vS2Hr^OfiaBb(kDO6Sy=LDZ~1$Q&i&+l<@)@Za5A z=$L#?Gu7iQovs%3gb??o2zCdqtaA)PYiw(-_vQ_f7;;mQkH&fapsX+GJrw6mtt#3+ zioZFNt1*}rU>;}`rjf^F12-%krui;>bn_@i<`>muL6sq?+fKALRW^g37J0+WVVtAb z%?w2>x+>su1gVO^t$2bdbpr!?NE;-#+ZK2G-2;lFET3L%T1xqFFX}BBH`OLKtzNjd zaf}t>QEyozrGd!s-9Nt>6Iq7Rpo&P4E&e;c{mJ)Bs?Syz1Al6?$kq#KnZ{!1H}Nzf&K9Rt~XcDxKLT+2PG;&c?TIrdv{-WXHf5oFK|1 zr77kXnA@FS_+#Y6eHDE5><78;=}%}J4`UQpVH5}jo4^k!Xf#^$awzTjQ&3zwd;CyI zY838OVH=1{8RMPckF`qCwF;Rn6Zc7pY&BJkqqgzb53on4()mU%1gW^Nw{l`KM)NCT{m}qo^O3!frjv1S3bGZEj^?pr~ifM98$89NlUriTFoiR_cYUqqa!5+lE zPw$fjR~cc2<=a1WAJbwWIjlK521+T4&5iJffm5t~;+w(wmMylu7>i)e`V$l8}0@DEtcab;Nvje4g4MK5|+I zkq;>xM@pFgUAqp}mW||vsorze^j%4(sgI8gQ8~^lQ$xV|0%VU8gsoW=;{g_TH0I21wf>85vARG@OY@qBcK zh!^6IE*PowD@^$#$KN?3dYWbmX=>x{w)XV@#l<--i2@+Ywr$(CZQHhO+qP}nwr#t6 zw{4qe;>LZM`GtDO%BozEch8~6IXw$Btr}&h#7m4xcrPuz8Ok4?ISm$Tv>Po1<^q{O z;)_)SreXbY++>J4pV2`4uBKS*bHHhAS^xxX4+TQD?<_XQ!?hDWDBq!wDpkK>qs1j% z?n}cA`uLY?P=vUpZu3qRK)$@-< z4kT*NFrU#w+Y{rQlDj`BAe+K}RCCXa5IXq{X6J7oWx6D-Z~PEC9VGyo!FrXbh8$s& zlKP8K@$5n?X43emkXjfc$jCqH`25K8=Vp0iqtAV#s|}tZFeT1Dr&XcWWygyI%y~jd zQD)~g+0I_a2ua+JMgDAsTiE`*WgNPTxLr{ynLc4~fs-Ef$7WcT3_3a@7N>Tpz9Sw!JZx z+wl-2!Ub^~gMbkno#1lZald?olA$2nCo`Jzgl^pgqIG4;7n>PH^M}<(w6P{`pa6o? z6auW+@(N4h7#PYrU>)P~Au{U1nu5(I-?GdxuE&D6c zQ1IAW3xWy89oM2dJd36#;2w!eEr*s#?Zp%r{^Hb)=<>_`#2YTV*1HqllY+Shn0>LC z|BCs!%=q9ziHagi&g&V~(FLOGJ|lqt*@G!3)%DB>WIkq}?O>*UH z)*{_2m5I#wBf_U|F8ZT(c3&w?gV{FOx+IluugCRc z#wBwEofpAmu5R1?aV&{M8Ck1?X|!-S{kuY=gCx^9zTjeO!+Vl(n2CT`;_b$8)OsEO z3%Z!Zxh%-SnQdPK;lJi*fR9{Sw_?Rb&7U6(Ga4Rbup}3O_TfGBYFPCM&t1Y31DR!j z3cRsKVIPYHFOX}TClsfZ9{!yCK{EIJ7@YmGrr7E z@ILSF4sQo|827wDMg+vy{a`)OkQe!Vy#$;l0|B_rY50MPgVZ~m8%jtEICg40Y!lnA zeBm8%?K~3Bu+(RA%zj(a*6K$u>ch0tLpHnV)!r;wvT$PkgLF;a<>F3ZOP_(yed?47 zMFzYN#VJ6MTzES7c1U)-ot*NOi>R@iM1T^E$5yC)*gV_Cgm?8jl|S5C*-KH8w##!C z4nYKLkUjLaz;q|O&Qvxb2o5b8p_-J8b>gxf(i2{7vBzCfco!ZOx8tYq6en@AO*Yv8 zb>5DQIOZ!4^n%zg@kExL1x{@}J!CD7G1*uS7=SLt6s{iu8I-btXAzu}Z%n#FH{__u z<}LBM%q3_Z7EXXfeSdp|mVyE^uw@=_&gqB;F^`S5;zhdEFa$}3lt=1~0Sx;S1vj+2 z-Na?^DlzGSFYd!I=mX_72AVi8QYIkcfY*u*45^BPn4;tZ?@>prcRcCMP3vW^6T@Tn z5ip6sK&Nb)`H$j9x4dkBCQuK)Vhap;1Wj$e(QJZcoQ&)G){Xz^CDu+@EK?JM9wT!# zSrYNqGWmaC6-}P>>E2$S6ERPO?5l`bFuzpwKKk<*oY!$vxHA>QiA5&8Dtcb!))kpA zE%aRdg7N2&NNjj~3M$6-cLe%ewbX_MF;QTdjROle@jg6NwuVN01sp{IT}|#z4D_u5 z^?Nh}=vd8tUDjt4`LV2*nv1Pyt8Q?m(KBK2a@&vjy&9mu;g7kf_aFt!7>X6xFhQqP z%ryBXcNBTi&JrA%7xFYt5f?MZGa5JGvM(DWrzEs7+{#v_A&0BMVmYG#%w3YfDYPse z8?w2Ts|StinshM;ug!N-hn@qM%s%CYWJsLDHtq9KJbP>7l}afA%WcCgWrT!t*zqBBm z7afSfl(koiQ1lS^p-;iV4cdkTj_x9@u~cbYJZJ-yHzBc*J+Glg>)UUhM4pQ=-Lz*U zP8et^xx43qE0x~l1_$P!zokhbAi0*E)q^}pdDQP%`ojRsPN)qDZ(?RZ9< zd8nW@{#LNT9;EJ4#qGDbp{AGPHG%luiC5ZhK_kYREY*HL@nvBvSl`190-&KMAffJ3#Yi2 z<3oH>e{4Cc|U5Myk6#m}c|12M8I6 zU;ZKr9XUy394y8Xn2v-#y)9Z&Z?2Op0(0|#e&YBAuF$D&2o_)A0P0t-mRx=8z8T>! z1OReiwZBkXB9s;o(t@$?K~>znKgr~$ z`*T0YiQHmywof(pPMzTHqy&wADb=)H*2ZiKeo6TfM76%47t%7F*PuR*NchHhh$vF*~diJQv^iE2UHCT1;ab@eegsnrE2G;s~ z1$h#_HiSEMa@qRO--#ZaOu>rrXTgTK;WP6Ifph+awsldXeZRx% z$niZA?QJfHJ%j+DYaZkp>7dyP^}-o9YW}8qKycab+w6?P<*7w7&aJEqO7tUMAr$=s zS`7~!16I1X4uy&1)DL3hOB5EGF%ivfAuo=txJvUQE$+@wJ?OAW#2tEBSV!3B@U>** zL@C~~8>h@-q0PJiiQxpnkPH!l|HhQYjlr}1^`s&r`ovCi(Re6Z-ZiqZez z`iwMO!5j9`nerxupN(?^GYFoMo_zq_b`=*5mZL8n4H?Q*vK0jyC1F!sHLl?HN?rfA zKr?;#eBRK9Sk_S8>7Bp*Lt0RTbXa&wn+ZkqzX%$ z$ElzB@m3}t4*?F088+%5+v?~YpMHAeZWM@nPf3oHka88uS%^n*&<5UmuR2s*0-fH( z3f`aI{-)OL@6)d?q9Qnh6Bd&b%{9J~iNWxwq=ZN12~v|nP+w2(GL}5y$fxch zip2!?XAyE>3y+zKe~EY6pvF_Hq+(Ulkubu4U_0{5o_az5g>VD_!|zL-UCfxD{G&^u zMJZii_0r=@bwFSGtz$ZU{){WV*FHOWQ((wvFh`H0^};WsL3|*z<5L{tQVD|qc_I4S zGl64q>gKu)Mh=-0(m#2S=N|lAND1W0A~Auq&>Cy+Ep86FAgtZ5$8cZ4=E}(#foFiD zj0a>}+;~COJh=c_^sI|zvIQAPHChn{h8n(3U$VO{aKZpOWa7(7-56G6Qh(c|e~lX6 zsE00q^sa#vZPBsW3786siP96=gR$tAzJoQOkmNt^Za-Ms9k}rN^h^_|6$R9$$W5%e zJTye@2V|D>0!Mh>FVbx9Tk~Q9v?S%EdpF1KNq?RY!VMk6V)RCv$*Kg0D=yroyHfeU zDpaFmBvPoPO_6$W!`qe&V3x`WLFS>vW-OX9mvk^f_rlSSBD>0~)c?-*3#F}QZ~a=@ z8lBSViNK_rHd+#{9f%7X1VZDAUuPJYD+U-PlMmi5KAxX~ocA-;i*zoZBqu`dU|ZjD zV+4jA#(});AeWy|CpJ(JK9CV}N+`Yf=Ngx|9CTBFLvt|9N<3ZlB`u6UxljZhF0!Dn zu)HX|hm^+L(z%SlR^SH&Ehi|vyRK=(>>`1^f_vtm><{xb+-vqJHRRqowRRE!q<}P| zcDoLlH}u!&W6O3Vorb(HLu7x~WMaVHUA=mt{o$R(Oai*~0iWwZ=MBX&qWjhVolDJd zOy89v;SjdpCr(sR$O&`*@V6!i83(R@ZrPxc9QtiQ^2K-7LZA0RgJVV#`#lDAF{Qn3 zsJ9W{y?EQ~cmnL1z({#$4J*kia;rktjG}KWfIY1!MxO+X_OlCMq;iq-kBBZMkMJCV zb%o39P`)j?`#x4LS|_UtY$cgCWorj9tfh>a?u9WIRK7D@Y%`~syQcgOM?U_&8wC!= zLTLk`J+#rVveujo z)7=C%QFkX*x+;z*r$d;V=b0e;u!m_UvS^V;6r=q2e5-Jf$R>Y#!3J;{UNP6BlU1_8 z6pFaW3DiHUDMl)Q6H|)_QE>1v2pmG>X-YW zitAJLVww~5{K6pkhIyZ-6(E%C_vcGKv$zYh1z8E(H-_UC2KjPs9NN?PoS<>Jgb=aD zeXm@;Aq3ti2uGk2{#)XTum_Nns0_b#NKZ{4BJIvC0?H*tBIG%oO=F^Wm>*7ESm=dW zwAMa!!g0b`cR~3^`O^^!6q}7v}jZ2wtsXzoBQy@S+6;W`Bx>`t} zQYWt^=5F%hgW73#9tD;Cgua;Mzq(K)kBxG1SK3?)UHIU_vE<#M5_q8OQ4|*&1&;`H zh`v21UE|dD!OgYz)w%?iTlOiZbs;!c*|fWtk(^&>@ndxH>kp|hWVT<2-Z(WScVT1gxM2QzEP*s=by+*{0W|7Bp^dEaBuk9Kp! zn)%#PSZzLFCt*{+@3aZ;Isw2gt4o-}oGU3FqZMtVpVs-`(UB7c@QOkMWa>B<@y-cAc+2LunsEDyV$@dPeCqp+v5u+~A z43+$8b>^noQ<`TQ)JW%m6uCtlI;IU^*(ti}NBelHq2hVROy4$gY*V)&3b84)dIKs2 zPb46&ig>tZ-Tl$^2m~*I58o$q*;xhg6sep(UQdVx`KwI@j-VB)vHbr z2&{!@L(Us0>4R_7ZZXI8St=${IfRPl%7OU)ebFJA!A^}WCHqIUuYkdA`R2v0w4qwv zamS)YyrM_vUa$t#Bt7cR8eA+n_Ebf63`o?bcl7Vg?>8C z>Zw*B{V(&U6NA(rd)cMS_i38)dTi6x>BVg zK7GdIABk43)^UNfQqJgG*kn$mx<`4T{7-)!>h@t;LU>46OhoLdnba^Exi8H5XpsJ} zrib&(x8$e+*z}{)?6kIA@0K|JZlR(lkbC~)K@)OI{wSZyJ%lN4WqxiUzMeeWFIgbbP1z!v@Qi_4@^e z6P7ji8t(=CI^v5ru5E;}8gLO!DYxE_0cI@$O{rYAMxyjP917^stX$MM7ZfU(*W3I9 zc34GuA%A+_w45@TbHJ zb`O^Vn1ku)UI940UAre0`V_fbO3%hKXd_ku8L+c)|w=2_ku7t?tmk z>5#o-VsKi7z%c%trz)9R`eTp@@kJJOFm56diLr5T>R%iP=bkSeFx8c{ZwEh;mpO#a zJd_su_sz?Eh&(4By>%;PtVga^sts|&D~JnlPPRwf!$!AU5GHJ@`;2)REmaaAW-_~0 z(uV%OFtB@x34$DWf1(~>P(w-J27{~>d*Z@pCORO-?4n0oRG`FN6j}Iyw{*vsoleN+ zsqQ>co5xywpJ+hSZcXlRMjmRWo%KzZm#n0m+aP-rh<>FYMRGSrfCsG>l*_DAG3-YG zkF;KZQe4{XW%Rm?N|s`y?OUJ391BYJ49UV2Kr$#7o(1?4YF;Yd01*vv9g$DynvL* zIWV$5zG$Xb#Suo($g*xBNePHwEf4BJnt|JTz7eumJ?=oYI5|``Y({WV_D9ot&Mr;x zisN$}psGc(PiEdU49-}crhKTVg!F8m9!2!C1sv0E!N1DS7EZ=Pvjyx2i(<3pHbyVH ze)Djv7rwN2c+~eDU#Q*m1r`gEYkqKeM=G=+B}@+0&`n(kq?lxJ{*lp#SXA9{^5s); zd+`Y==~6<##*|5%b#ms(u(I1V6E{xVt*&zxH7B^ALbo_QP3?2_uWDnr^OK-QKKC!r zrP(K6cdiS8Mw}Xcusx_cX-X}-&%q`E9i;zmMuq8i4i5+msAqUZRNXN>bG}cvs+ife zVTijho+oDKYiWK87?RopTCT0)vuz`AuI@khMqprWgV}|my6zOqy8@Sy>BP@**{6ik z$+SK<1{mg$313|!W)gv}LVD`dgpe^HXh_0ofInj0I-^2eCc5 zQL~eL59l#wDI}VZ4nr)^?AqpmlI6bAqqU>#2TkrIVklBWeEQclgBr>d@Z?^Xslr{Q>Tf1{?{U+*=6%0~5dvV%Zt+^nMId zyL}vw#ME^)g9$*WET3!e>fu!RD4%xs$b7W@BRPjDAQ)F-`LR(KL`Shdr8`ZgT<%GO z#Ty7@?SAZZSx81TFT}A{+(wma%jc8M{R{{hMH286v<&c$5-|RXt8#44_Ilh_JN{CF z`ly7Yqr^A#$BUY2hqmZF0(w^GUv6m%lv7F2C!J)NF=h~D$|X4whNgn)nz- z2}yy@wk(i;n$b+C%qVBL1KkE;-%m?kusBX2+2Z2^AROo_CXd(QuCw~$Xjk6~RLg=3 zcj(9Y$MET_yV7z{Z;?f`hnQWOfpzUcXZA>^H`^y64NI84*(Ocgi`~$V??m4vbh5__ zW`t2FkClvi*3>UdS8=w|NSqcKThWscuC$h<@o9;b*@SpoP3+rOrYh~wYgRYy3+;WQ zT@d7M1A`EpOaS;N<`?eGCGIV~Ict8dD6J}I>@S}Af*mHV&oe^xMFN?Wz>9I9bTPWs zH0Sl|zr*&2|^cmW=%IyRak; z2!VX3iuVW-mMjE`57QW>oigL(8kG7Hjf=KARWQRp;9!cZpU;5+O+d20f*mal+!)@b zS+vVS7xBwpM^x9H`^ej{Is{A$Lr`<1pEz*PqkASRV5gVyMcFxv1RowA*q@VzKJ8JZ zNxn6Be$wDVobyy@Hay(*J|TYWEfgy3Pdqln6N`r(Hu{np8>1>auD4wAwBRA zS7;O{_#PQ=>E~J7D{f99XUwJK5$34ah_mDIkUmD>D^j175&vvB`iu{0V|dmIXqsp4MbH&3?h zQIR{>srC-q1!@m6sR)>DBk)*lO7q)$5ED?5UqR230k1a>R>J}EFVGsi1_9}9owu}%*C zVi+`?qVW6Ge@8wIelR{|GU-lYC-wsqpl<}a4^7*7nm;a}dV>bEp%L|P8OTl7*;KJ) zL!Yi^@9=ez3WWWq4DPX6!zsFt#-ir(@7X%tVU+p-(f3zv-0b$>JcOkITv1)n@@6Z0 zPs-C^ZYUw^psX3_MsLdw%>WS=^j#*fssPLZ*^TXeR`YGZ+eQR|i;TRUQg*{c& zq@Z~dC?(S4fxm8Ac`gfEX=g~mxL#p@7-Sn3^U03jWKucWW(opDhT57nXe&h z)_!uH_VPnH#gtU3cqKPh_cQwy&h@;HKP_5p@|Q0J$>B*^{LPyE*@&Fdpk6P?PB8xV ze~zQ)E!YEcpltaM(Jb9)n6j{-!v}XeH1qw!ri7j|Pw9iBZ9(X%#CGI~8R~&}KOi{Q zDw4InaG!>wMZ;$gQf2#sQWq31@{<)gzv~{9y4h@0_ZB87$S89XsTAU)Ln5G3bF}`2 zThh{0;sX}Nuc}kc&P$87vby0HHhnWz9{O=go<4@ zqoukhkjFXjo>gVIqEsnh&A2Sl`AwH0sn>AVP9Qg(Gf{;Jl!KMqM>}389s@0)Qc!-> z1H=@5plRphKsdD(20tYCfX)pa_p{bi_7)U6OPcNl+MLOP)M*M$cxr+qZ<@|$eCg};-bFfP4?kn8ygPZd?K+GlRnNLC4< zdAlvQqsR3Z+t9ighl?_|KA$v(*CnA$md|>%v*J=m=EAH2>6}sb#}OiVeR-jYtXAZ$ z;?Ca7^Ye9A)4OFYfB23LZXPAw>0T;Gc1b6s?~2WNCSW#T0!yFgG-cm5|2_he7Z9~F zl7R0E$Bwilb|+R=?=R|IAH;QQI+$~Ll>+>-zS*O*fAp746!(oIYv>Y}5RCW+Y+%U) zQEwQ>!rU9YXaHijfo5H4FoJRNp2iwB%Rg8#vE4zm)`d9JJZ&6{n%6;mum~H`Ryn>j z&DYr>oyjZ4#(#i$zkEPK`vq7xG(t|@SqWvY2e9I)6~WV{?fVQ2V4(ck6s1R0rb!W$fe8btw}dx zeM12P`*?rY7Osk{7HJW{2vDz{{6cl5>s(COg=r7JW}gx~{6V%%Slpy!UsA?5Nm1tX z)BqsN>z)91WsIlC{!9UbL_EAh7A3gJcN9y)%R0i;2`c{vko;2{uGGf|ni{EbVD(9% z^%5p1EK2ba=DizDjniQ^0{?VMh}g0cPac$*GiUZ-uw5G^G|HgN@>ye|-a1PA0ubXB zEFApEuC=p}j%JMM&5lh_a08bTSR1gkLds@TOT9%XwRn!%S6miqJ?PK6OW5X4)yzbMU|G!f$s>A1ic-14J6oXn> zQs3S!*Wfg3U_svCIKeuX!oP*L4$t^RsrM|9V0O5>3RAD}BHAF{sjBCxymd~b8Cd+* zO>p>!#{zNFurGZj_?jz>s#vO(VKjvk)1~v;2mk8uBwg}nwU~x-1+Tp!I>DkVhR6RN zRk~(9<4$E|bi5t69S`Ek+9f+|3a09?04EwKp?`}UyY%BNfC9|#OPv2DUFUdEBt?A`+)y z)9~-p;r>~uH>&CH(~&auUB87LSEpXT^1U8WD_iGzIq_0=L_G2{yZY3{X=+G64oVU} z6p<$s5QOPWOIo>_uwBF!U0k>QeBkrC=zvCv;(AXEYW zrAv;{o&Ck+poy#VZw8WHP%>0*s8iz1!{z6WaGgw%n-c5txdpo3odD5lNZ{#9lT9gb zk(>jS=6APIC-xVnRC*@;h7(oLmsOVOiyP>Q9{1aaegzR5Nh?CWxj$g!4l;TRT=;Z6 zHvEy$rGSF}GBm~8&c|Q^tVw!vv>VyF-Jpu*8hPcJ7BX>Hq7K44>B(9gBwa8PBJe1JU7BuVQ5QA+^T%zYndl+-L)z8?uk@Is_z#a4QIO#0St6 z5Jj=sAvPOAZEi6N*Hs(r?><6iWz9{G3XacQwko`vmXzF>^-oWGLz7`GGC(UF2$|<~ z9LKR|1d%PS-_Whh18{)AX6fy9pLN^;qFcQE&`EfZSmYnvygKHt>^tYBtXk%-rOrj! zrCSy+In~{6p-qO;HM>NAr~-b*KezMx`E6zFfcX;vPNwZnvpY)E9QV-jn!0KG?@L>m zH8Kgb3t`I%OFICa$_zCw!vHOzQpyrpV8Q46b1ylt9>|XAJm&4N!p`t)ajmh!bt{&k zf`|vpgaf5p&Af@3Q&v66W(62k(IV&@0R)_8Iz2!m3-XO{3mlLQxf;O}(b~0pfWfmC z49~G%^5AO2)(mvi@qEUyWn6BaQ-$~k%SNOE#!3ll49G4=-H(3s*_uVQ>?0QPk$_Ig5`ybk}GZ6!n{{gFLS+ zYeB(0)j;6*MGu7_DUlE=eMjv8&Aa2GI%~W(3|cf3%;y<}%*)x&%z;2UXtDWAe|jq_ z>BCrc!>cW$9AJOG)i^Em=IPH?Sv_z7m=Z)GIm=+~`UF}n)X%BMdJO=yZ>Y=^RVda- zehwv}ZI^)$VhtNqN9gWV%tWzrV3OncbBD=-K)uR%d9eNb>7>FIWy7)(};?K{R&TrG6fL_sBEi$qQIcNMlYJBpLQx}g`cTmkh_aX-NT~;90Q0lw3aZTnvTPEpP3);m321#7_dNdc8C0huJcfjYGr)Q*yxHPq~xdUq!QbQE=M{0W;aDN#mx=%(I$(Og!pWU*vypY z_fK5>F|T%MQ!Rr?2-%cC7^ztQB<}`sul`7i^6LzT!CR;pU24cCp8>51uBP{4E%?KQ zFW0<+%OXijWx|>Z@$ofU4+VB#j$qN@m;P-1Uq*|b%4`j71J|{8JZEmWpSI22+mB5> zjHAp?FFyvv8@L9t9myU=Z{Go%)ld!1%8L|CEq_X?IW-xKzU(RQp{qifoAi%{fO8E( zU_rMnx!jn4*>$1H_J)yd=u`I$;|*+57g&ao{Vk(Xu=z8vlAC3BB}%_VM8A6G-;|DL zSr{moHGZ_m6=~%Q!WnqvL(W8ANNY{v2Vx0A@$8^1!%0%Q5+n!cQ5;RAbw@N*_@jUT z1NPDFZ<}x~cg-7%$X&AT1$JMq7bzd@k|InyF((~=rl>rEgineGYbPN@0+VenwDX1_ z9u-uy&eNxj8QB?L+;slW<$4omIs8A(H^a)K6Y z2)ji#DCLo8pO;8!wi)rg7c0;fOU8pSbVp`G?!yrfYEKCSb;btxe{;OOJ9g#tA8mRa zy1i}(3RT9Mz|r4^vt5p-0%B7x>dDpWdo_~__*Yp>kB?g5J@SuWekRlyb}@?opEw0a-dEK{TaEpp6nVErkG|x~kQS$=Mu|2ToIa5V@fx9VAJdCvfG>}jlE}6f z;y9c}Oewdb_d2ug(qR)ET0#^Tzv6k6wPF+ay_F_p;E=nmukGhIaJeiJNF+1#XsR6p zUssaUC)n$4$u+Dy;KYe+JWYcJ4L^T!!U62OanRyDqIE5MAGf6JSIe+Fz1xf%I)9S` z!wCs$NKq1mfWwB;m(T*cLJSIiOYjQH>ug5c@O|FME9tu^?IljE0#Zd#aa0D7B*SXG z9FYut>^O!z;}gSou)i$Qo8(0I3X9UKkz_r~WjKxmJ1_r_Ri;xE5DE&>b%NO}f(}Ks z+f_ou;&j%|OKEuq9B*`JFoIqYd$CkEIevBF&>AC#naB(c?4PQ=u-w#4^|1D`}c2i=K8?M%Oqf*S&`n^H!WJxV z?K6Opp|{u-z#lp}Sbb$1l%%bZ1fnDE?@Y-^>}KuXF!5`MqbeY4NtT?rr;9OjYscz1 z5W;R8sXd{<(Kv~B+6n)S!6XnOQfFLwX$D}d4USunTWi&MT8ic~fsZvrdi2w;%O%UBqd(~jrP-c-&*5g&W3~Ij(kGPOM*fH;1mK38wFCLl_(7;==L-t zYe+ShLoD^-6adq(j2+2jtd}io^pJa0tNUo@TdKlD%|nQTGx)4q8C-m52Nx2!-!I;* z+_7_)v}u^)sDn1{rydxJAhj0<$^xM6#b_Uvp9PX%nD>6=pQMM33GSDrLEZcz%p*O0 zZMsh6Znb4Nata?=#4qTn6V*l5J~W3sU2J~V?1VXLv5cCxg+j^7=acffm!vrRxWwk5 zS%UX9p*MOp1uPH<$fqr z;lP`S8&-U?#>=WIvnj48zHUh1$nrg)QVYYRT^4kNGpWIXobJV|Cyb{yOKznguW z?yt>h9K9dz9piW4Zb6t{qxeNFPsn>TsxpX-2s5hKv7mhENMqt+ldcUKZrEUAvlvt^ z5J=rsp))_NXXP{Rlao3-xkn{l5aT*Jm$?=J+JR_c#|w=ze5b|*Ve`Vr+J+W$72Ud! zl6EW89e)}6!M?U^cDc)+F1kcNsJdzUuu35pCmr(YM=PPr*-R|3c{U*sZUjqh54S>y}) z<&GtFb}oL=UeeM-o)=>I zw9cGwMp`}=5gy^Y1m5%(@ZzOY_U^n?kHtJ}3Bt$5>Ny#Xim^Jri*qqO(*2 z0Jat6Sz#3BkUN>)ELDx?x8 zyB3N7P;emCSIq)xyX8#?&&1<~&#gn+Xr6SOAXi0_sK3WulNui5PhvnG#Ym&;rmO}| z9QocoWC)ZA`{w<{pz6SQ!U)HTn}?7zjA_xS&TJ`K{%1H!F0Wt*!kPDhf-7W-AO-gA z1Rc>Y5_~ShFxKJYCg=i(59D(6c@<#;!VB|dB-HLc6S9w{t&{39TlgRwfDom-qP`u) zqV=)2X-&K@91O;TQ4$h7o@zA5H3ij}6_&3;J5dp~B3`#0$?+Qq9eD&-0blXXD0VXr zil!(G+!Q@TUiXM1sXqJKx}$-fwfDs)pnvHlTA5<#-;CUjm%4coma?@cCFF4GwjpDc z#o6LN61V~rTggyggH;Ej!YAUX6hw0eAQffQhJ=Ne%L+_2t&z;}B-E3djVQ!}J2Q|e z$Z-4N#VobS^lMc~(7S3H81-})qD3qr7 zJS)>_+4Z_84TE;kK&h?Sctb3|>rED%>9bwn6RWB3W@sY4!H3sE|K`*sqS6Qh#*IQBa?$E)e5_*j8?Hj(ZP zfG~NB^4eCC(ZE=#Vy!e|Q{p}gUaHm)$qfS;@B@jXDem23$Dh7LL@lW#Q4FKmAbofY z1$7;%vcYdo*>`7%w!ms?a({8x_k%pNB=-{$)49ZF2=PA@Pa(#bT-Ypw&#xL|ra3-0 z+$REKuJwH}E;I9%yfc!py?D7~7)SM57ydb{kvSHW`&wSba4wtgeYx@|s}aiR*llCx z`6ZaCF<0>U=jhQJF>rr2N{@GML0sYT9~8(xM&Dfkeo!u-+|bxkJD!}2EOREc`>)dz zHj6=hvN_H~e1+nBkkZ|;R1X18nxJ2`R5wxd?VEgDHRy1q$T&4}Rip^!Et|O!0XeNo zdqBXlND~)sG^~-n5F~*EHD?QVqV5XrBojXN*=Y@fS`oePGy!_O>{KKaim;Ou-B7NK z6vbzv`|1Z@l%V#uJ6-qhloNW`FOmNP31`f6b~-lukMmAkYB_BlWe0-50AcD$B=MI% zzhvG_J|(|EB^hvEml(zp+S{iAR4B$r4F15_i6kwqm;{nxP$?2e;FXTnvW#pr=B*|7 zxLIHSI&C#opEb4Y%31%(?Xpz_%*|~+X-Jg=0ARSrLz$j1KUKgNFEg-bu+%U@?QJ6> z{s-=P#$GSoRuICD(^eE7fCwc8a3jHXrEUnWDljGchUujr+mT{Ikk-5u!LCG9x<8#h z9wTP2687TmJOoy-{r5j8<9=5zMF$($Ye@ujuYL!{4HEYsl6;sVMJlsCt%5v8&E z`$GPcq$i9I823eXOsCg4bTfD2J?od`K1#oc<$4=c17}k2DZs_biYa>~!VM#98sh8f zEq0Z4sCLdp@XrWaQiAIqqI+!aA@))JG)q|JPAaV@98(u*{v@O)iRO}d_FEh%3-d4|02)E|I~2DE>w)2 zSe>C#T9#BN*DtPW`8h41zjTaG4$WafH>!O?v1D z2VM3Da6~UZxKBHe_cq92ThXL_dp|EaH<)*~jUp|ez%#>fZuv~uZN<7)26aqoxF?0& zu~E|36#w|Kb?Q|1?Pd!~zV|wD8gg7aQmc|V9RX#xO3B2kC5ay)Qx*zDGrY`-0rG$O{>OP|32BW|(^Q$$z@>rAW5S zQp8%uJZCN3h0-8Og*NIg@D^cCSbMC&2WU2iFAh9!I2>I5h@ zhd$Kp`6Q`$tRQytP|PWN?x8wVmzv2w4=ta+cRWL z1CYKSOIBH2Mo@hD4!0H7xSp^T&1V7He%jqbH$UfBqd?kOn$u{&&8Z+RE)o!@uqq>~ zMBv9cXNWJ0ZCNMZaVvkP`))nx?fpwMwzY<+ilkxmq!;ENk7h=j@a)Fnv&wl(_DDW> zZ_`pzZ%>27nr?rcpTN`0*HB0X_kz-)P<(TUGsAR;!i3(Lb`HXcsW$82%z3+={F^qL zaqL)f_8ZLC~6*t@FY`+^UWdKoQl#(DuLCIHBPW7c6us0vk@Dk)fI_2#`(hLKaX*j!oT4=^IQglb`I@ubP-# z=3g6Wqf##KlqeY>OEk1rPK|9-3WjM9kn$W$gLzjhLyOV7kchV@dq*j|M4BbmK9_VE z+v-*J?;)dqYZS~w!&LiAaiJd0|MCytIIgSVVitWc2{ohdOtRfR?*ugd2ngXfaHxTL z+E0>uM2eF)fzt)D!;juE@~(avqp|2MhJ0DP_vz&lQ1UB*Be@i^NK)=}GLGNXWh6LX z1BWNTAO+P2AqVcd!fCY8CHy;m=Pv}KpR12$Y;X$wM)P13N$8*aT4K2ur5E+NFJI{P zm#}mZO96$YY_3)%0Ahf{=eWlIua*d)QZhK_kN2&W3eZe#z4D}gZAU+sR?Y}F69MD!wm}IV zgfN6B(V+qv)8zl#%63oSy>$*pLB3%ih~g3J&eNxzFDmHZB(b1bsutVoAy-R4kQmfQ zsr8c4tD{!+jIGyX0(oAgZ^Xd!0!~Z%uyu+K%5f^gY?EbKkxJh}Z}F3MT*ts48|j3_ z?0lo@Ey#c~UJqK^>yCu=TneoLEg}Wx7hml`g-won^4OmxGRvgsDsLMM1x}XCMD=7a zV1Q6MG)^YUAR!TV3rUZ`qjK2mpxhu7fXUD_?*hT=^r6bp{_k4O8+#F z6f-CI0SScuujd#L30#Fn9|#Nib9_NhS|+P8irKn}5*vq)Rh#_YdO>usbF?A?M1YD! zHiOK;_RlGlYNJgMz|s~RMXPpi0L%bkYJe&kU6>o`$^IZbQ~ePi#RrD2!t7_;05+}3 zx?poFIZIeMA%Mb`NQfkX%Lzn`Mp;DR%&?(}g;p4wc9*H-bbwBe7~$hwmGEWz{_3vk0wtW*-d^~<(hr&z_FrxTs zTuRZX%){pUJ+=MGCif(FXNg3em?xLDu;w7l;F3$HX6l2Sd|yE zzKu%WF2{S7T&sv_j-ZFYr;*})XuW4^AGa_^^1?}ePg`gQsymxYt6~ zta|m?`5t`xT`W0&lS$*Pj3Z*LtIYwS=7~|t0#tKmGjhX_Iyb4uqlB+ew)x}Kol9jL5rO1a9&P@@i_OQ{ELg{CsKTo`yOlMLw1VuejEMf*!f1hJ1#OdhtNUJz55 zuYe$=v{le%D6pSD@YsV6kQ>o)gN{~8ouP;!-O$>p3V6P=w!s7TGxPk2nGo!M4@h-~ z;*XbX@(Oq-cDZ*QL4IUK>{~$0p(^EWpTTJFUE$+B+yc)RYPG8RDh)2uE;gs5^y#Go z`y$tA3QS;>D$foxJCQr>hB*Z5&6=AJfA>Y?FZU#+k>1#kJs2*61NrO=Y1|^QXR2n+ zC>5xTg$qZZ+rpzTIe|tL;YTk4`cQjNh*+~1O(t(k^$}3wQ-gckPniBfXxL0k5K`LV zZuV4?_f-smhpca{WL)M@-LvD(!C#@V5#+G)7#G;7*%64LYCI&EAr zmAe}DVtG~RU(gu~?00B%BukwgKA5Ueyw8~U*E?yo zqEG`o=z%{ka%6k>tg{4|SY9TZ09`hNcpE)kNX=i+WXfL=TVnx1V>$y%y0Oby(c> z8uDeJ?X!mln4C|*)q?ba&$9uaMY$UPFY++(9MBUJHUv*$M9?xLS}$=nz4*>NWiH$a zatVVa;%I0a^D|29A_qijV){|={54fqu(^gFBq@Jk45RkWjU-TZtRUMp5nXECdsiOw zQ4?f;DHCEgCILlwQ`)hBlS|h&-L^~n+(aCMn4pr#B3jr_jw6JUlb1lF^MXb@=>|7i zfXAN(=e8_b^JJDzd-pR;M&8wAY(wdmAPO8d+8p-zwq$#zWq4dHQ?BU+; zTzMKWH>h789eM)(L>;s9b3}1E2zEYiD;j8O7)+u8cME^i%IV#??~t6Y^BYTrQ#AHy!**< z9k{n>o?gWW|1P{z;WH9-cupfU}nxRaSRHfrh$(j!)5#d(oUIoBLj zWqXToR0{uXI--B}v-S&Nh*xfFr3A&>bI}RPn@7YmJpnaiqm-&z-Ze-nM`lEi(uU($OSqq(B_%)ZMSx zRkuQb#$R-m^E{*#dM4k&^w@@poAu*)@6hep_*2cMhE#@yeAydP)Vu$T89)fUUvrNr zEm*%03Yu6L)uDMlu|t9l5|J{Iv9M4{GSVmKQWN8_AUR9~+d6rcsHH}Rybre*G1_*Z z)EhKTppBdsI(Ev-dWu>lNH374Ept_x(~(&Qb*qqkPm(T>YMf2v-3CEEDrVt-8n?@e+_4plcxTteE>!VAN^W1g{4p56Rs;J_CAv zmJ#&4k}E#kw6IQDn0vlw**h8#9aQJ+Hbztwtkeu|*9Xb>jL=7KbZP=k1OLDF=n<$1 zed~%JWQoYKobA~^0P-KT3}52B$v#{lc7Kqy#pZcfVEF4|YHUR<-BeP1;g2~7?UAC= z%v51I_8?TLEmw;31r?#lk)5ah)20X-wFOMS|2YM5XGRs1$bAV81et%TCD9q!O`*;v zEOJx$n81-+x6cqiLJrwtb7~`SG3Fas;P7%DU*c!z&!l$CU=1K;wAV_0NO!<>ZJl>b z@H5Q;FW@dq)j$^_ZO@_0a-`OS)GeNVoQUKA=1viF;}Zh`9jo*l{m|`M zI1V#O`j7LoLz1aC5T%5e+FX@orT>HfBUXX8`QF8@TW`@N_UL1SI!s^{a|;(YH$QyD z;%!w+2-=~)-&N3&%FkRYv?o zN4y5eIsbjrNH%R&?_hdyp1W&+nG{QLciIocm(hB&;mVHGF&QJuwjjaR#d(xskP{EO8u&ehiz=S# zxYQOmirFP@;kKSK*PsPAen0p_kEy?7DHKZ}>a#pAS|ENGIF0}*7G14XFTdLVFm42U@Bkf`TCmc&xqqx0Qtlx1>}$RZ?p0!!2uoG0frVf zXdlwY&;o;iK>q37z8{082-Di{nSZ*iN?dC#xtL5E*4l79rtj{*`88*i7!^jaZr^Z; zIn4Jny7+_}V+TP4I=Oo~zKf&kz7#UMJ#{(1r@Y3Fuu5Ivms9UK>r z4YN4TF5|Zx6{(uNI|~^@#z2h9t*M7LL-TJIlc)zG#xS%cXlz$|Cs6bUQa1Myq8 z*RMH^n*JMlkB@gTaq*E z)l_2Bbc3BJo=l|q-y)I)vnX;0)k3$UmHqaOzSWj~)F51BvM4bnnNc-4dUxn&8$`W^ zC^8h2=t(E{&-d%ZukLWq+!WSlXj7#7aA|Ox)xf_n)2sq3-12qDrK+9dvC?-6QN2C@ zB4^n0Bm^#byl{6V!8?PW|5}P}SkVoN7A?kHnm_OvZkd0*JAZZs`ra#WMapNj~)j6kX%Fs)#=i_s7`eG*3mi;+8|`*HeJhwRCDkVP zx+`1d$LBNH`~IQM`e6{6J1KGc1v+GV`qzS#J1phBK*IL{oD%o2#*f6+fUQneUyIho zYMNk2t!gB*=&AQ0Rf67M){d1P$9*9(hL%OD9+RE@3etP|oVJ&Wpy{pcN|)&`B3r*g z+g?Hkqo5THf?iC7e>3Ql_LTs|+l-NIFcHu! zKM7JT=$3jE_Vb`;yhTnW?L-Tfd(`Uz{|6^mHZ6xBY=HAyz_<_Iq=Kp*Ds_i(nVxhv|LDvWU*p19(BFVn^#8wRr z(6~YO$*{>ZlF+S@*ie!_Z81J)!jr{)L@qXuyAr1bnoKP^cLqM2W6DfF#~&r#KPl_O zInCJJGffB>9Z^6>!Ar`c!(p36d0b5_fg)K<*_;M&%(+EJELL6Tb-=|2EL%`~k_VMW<%g`ujIzrs zgSe*8XC=q+JG+6KJZJ*)+Ogtm8zv)?AEVZ_w=gNQFtB_!B(KbJ;iN4s6wVAUNkxZsY_2Nh%9zBhHcK% zwN0*}yrh{w#pf+Pyoxq`v{Emdrm19BQncBYPN$&bNb}bYFre5q$WDwUCEuXAcYExl2$02S zaM$3KsRLR1we=BVmbig?fsZEH{yhpu;KKFDw@3B_c5hiuL^0Znc;S0fshpc~3QX+? z++?+dikGmr47e@VpzFd|bc@Hy(pC>QPpc6?Z)fREf0sWole8h3?IZjeW!*WHgASQa zhPmB54$O-DWW?Hp0;01?lK_QojSHaD zUR-PG-P(m(s2dYNZp`8=bFxV{Z+8U~yC8S2)OmXs4?Am17sdP?l`4vx1?5$?5*{s; zM|_FT>(&#kFP>Y)-R@(;Sm)3g+NUAJVC-m#n|BPeS`P@U$g^wUU}G4J(@j`3v^5v3 zBY-M^Is6QI7S8a3@c$j08E>8|o#FloCOV=6%Itx54=ojc{ROyg>g`G-S}zSIn9tNw z`#BY>hv?>_nQi!}HE4TCGq`?DbCkzE`Fxe_-7hW@U`VIYQtkY^jydToZ+tlDl{SXr z1y^@$+Pjvi4sDDll~Rx955r`6wB^`4R6 z+fa$RKiRofpTfT_8Ry;Ts^t)%B{W2UNP?oz6)R~;JaQV?e9PM0lj~--)s@>a6AU_J zGUs?Sszni4ieK70HNsWA6XeupwtHXmRJoNl+eiPloi^*M_opcxE;rUb zm*NdF=Fy2P^LhP_KOdZ9orVvaMEX4do1HR3t6}r9$3p#OK4DY*mVtv^uUV??vL9~e zLV!vz^Dm*Hi%tgi8DV~EGib?5N0i2T`9qgOSFMKk~2uH;M!Oo;^7>lkgJUTu8|ZNdrdVBY z=Sa1_3sAYzTNS@oNyB*Qy&jN}gDJ+(6vf(;@rwY2Vpja{;L7~E@st;`O?QR)gT`3N zeC^T3T0K)Bn|guqbsNqJXmb-S4l!dA?BD0vQ#y8RBhZviOim!hb2GQ>22T(W%pK+? zumfrgcqqGYd+h>;KrQnYjOut09wVxXoTk8=n{XT;=n=u)o<%L{P6Qwsw-OncioQg3 ziEe;b5G2Ip?m2D9hy;|G%KC80;4F~48VW#V-~By>WNnl(A4*6eU%+1zB}BL}C0myJ zvkrqbxP2Orvsm@jRWoHBc^_SbfxwkwXe*8=_Oeo!giIP{JHH)7fA)`jl9U7S9T|XIM5_@elDtSV0Pt&enDJ#I})X& zSYT( zZg0OxPcZ6C-wry*4dWzj{JYlVNta_ox`MEiC6It*b;%xGgQbS_e5kjPRd;P;ebLD5 zQ(4qDn1a;hhz)ZZi&#c{<%82zJt@TLEoLc`O``U7p31>)-#p;kyV-v%eSi1G@yIZJ zZ9#j6pKbObw;Y_8HQsQxnio0Ts^A}-jt!RO6BE|IiEwYOEbJv)MoaQ*m5#Wh>D0Cm z*6c`?Vt)Wpsb~Ytc6({|q?c|b-c8cm1#@yoHA%@6s#L5Au~l9*X7FFh<=18%sJl*A za*Airk~eq~Zo^w?ZWwkujNy-~Wa+lo7vJ#yy{OQpOrqiUK_q%8&W?U{ldmoV=saT$ z0mCNSTFA)n1{+Y>ZJsvuLd_m&}N?YJW^e(^_P45}S2b7_>ahII=bb|~4fbsF9(zqE{Q7lGo@%nA^(awm_T$8C0WzGkf^G0G&)1oJ z%oD&&N+aLHx)!Ig8WcD{>=yKei6QCB=RwD|3}dDSk7JSH6@s|=o*dux$3wDr%Sjd> znTAXP5ToX>G-)tPPxEN=;}ty{w!0G^o`1xuBWhH3TbNcyhpuf`?3*z(EQxz>0XN{28q7h$bLCjg681QX4J)? z-Hw<~lCw3wNwQK2C&NVh^MlBjZ+1^0r%sJ>VQGaN@`wt%(tqV=TaHczwH?U%2hn3v zVhIm~J?WEgy|ywYR)&_`u;c}No&5Ies7Ub&-h61Do#7{y?HRR#!SE<gKrcJB|r_YRcwkPijR zKJD=;UP>BX%}Hz{%=%1fBi{_HZNL&^vEY ziHZy8_iZTSPQ{^%!F2RZk1JP3$EGBIe2!o)GK3vOo@)b^==PFWHI%jKso8F>Sb8Rx zzBml8SSb$BsP%s6sCOt8ezxxgFh0fkQM-S9q*SwIgOHWkpC67L$`%MFnY^VkazhI0 z%>3b_`o;hHdq?k;u_H+akXe1 zcRf8iu`N?F#%tQTz3(H|%qRlfb0*53Je>+TTVJKUZ4XX{k+mb_<9-Cs$a&hmc;-^V z^9jjqZV)Jdu??qV(kTw%{aJv<5WvTA?=}C$U0n5&qo75D^TU?~dMm*fi{K{uMGmHCLuIRK{j}>?_Ups5>Y}O`&m&J?)ifbM z)dgJF^&pHBYe*-!`poO|uPhA9>H7T}z}oYQ!8H4lP`)V#80?~D`o7bJqZ|`P8oHew zvVa6YqC+N8^8)`I+{wNEz8u-hmjTdg>FiE2%+JH)o4a=-4_-NPToY$*34RJnJKq&m zvTtJBP}?JY4sHE1{o2HH^<)Ev*Gf7M><1}HKmbI`2e|>8fdcm_avHn;5z%r3;OQQj zNh>JKv@dxG_VYOd+>kF4e(8&OWK01n%^pJ~ad2UJ^h;g47Aq5>s)Oz&>}sauz44i; z#pTz{WYQXz07ltypda#f$gBUy0=buB{OU(brAmIhKMzs-G zhI|lL9Y5riSnVugW1}SnFzKr~SH;#}8hZ$LRH=mhkIcy@vno^`dB$$Xavdu(U+0IX?_huCK9Lr~2Oe6W*u+0@;)rNQ=?ip-302%Q;Fi6! z#DbffzIqXj;5IFGwZ8POC?+KSSCyw+q5WCiA!16}i=x$^Tr?E*7%W;cHTL6SNNSOq zdcyT>j$cH`tVjS&UTsM7$@zwyDkZ2@1P4oola3I-_p&QM{Do~H0%KW>mh{^RgR!BA zpwm*y0dbMDWBHy!tTQ8&dqwqv^^z8bBZ#+oo?DM)x^58C;EaO)`;duYE5&%zz{1~~ zq}FX)S`DMjXXE$YyM9We5o!J!QU%wPui@zu@|o)MnIBHA(P=+=9#7bo)=#h-bT-ok z?KyQpv%i?|nctjs47gId0QpOR7>&DC8`~v=wpy=`XxA_)gyo!MLo6^T98Orze>Ow8 zI*u%wC%q;nu4_CqZH=gj4IU_d08!=`C(1d)edyn^7eX&XQchO$OqM8^g*p+TGM(<| z<&Mb?zJQ5dIn;x|^b_!2JEP0+B%Ca&zaDoJUeh^aLehkOtAWI5U7cxAvckWr?n0M8 zMSi{}1a{$CDz0$xN0y*OA#7zr`AofIaAwic1{zFkTQjlV*tTuIvF(X5aWb)O+qR8~ zZQHmx=X`bV-9NgXUZ`HHyK7hNT6;b1Oqz48Pz82IoS!4yscfIpY}uk8dB<5SxL5l? zvSH59iLZ8;Vbq-FES`VMQw)I9$;Zd`-#RNco^M>mNx_wE?1dyOvUeCS8NcSgY`)A^ z)bsOMAtT_~)XLOZ3%@?W$*<(>@}BQaJHRZ}_ns^6 zx4AL7M2xs+aN5V2iTEhvR8`4})8ZoC3N!RLs`RdYIb5GzFd1!7- zPTD8q0cMZFCHbQ{Qz=G89AB{Z_jwWfhc}%@3w88 z6|E@DGA!N&db^362b(#qHoEdW`?)C$WVK3kwGg~g;{6aNMn8`=2W71G^s-_^^|O0= z0I9SgP&!dh!+z&t7p-lBp9rI`$MBe9xuA(IVB7p+U8jld#fbOxWSqnDFFgJS(WGEO z0j)@HgE=081E-!|+N-L-)IX2Zt09|Z4KTKuihsi9ouy*dF8b`XF2Baf!UGKd1O}|S zWYBiP(4$T`AkHW~Vi(gPqlKtG`gd1fwT zHEf>hh`4s>90qkMHdy3YgzXdeHG{qN+E!r%&w0BmvzDIYqEmI9qDywe@S9~9!g=VR zKjfOH>7~~b_{}(VNXS^oIfo66yi0>>BT<}?aJ#mI%}Kk0W{jK4;)=buD{~wzJsr}b zTL}B?=S3zw7b?=KQ{eOJdGxq^-F~#D_8I<3azl;%QUUt0vetEIpA#PGCAW!HIwSH~9EI9n~t_2+rx;>Bx9SNA#Z; zuQR8;D%+oO??c-%C63&(eI(uGgr7tALyQY~cF|RM=!f5i!qu4UAZ*0eM9EDn&jg^pcM8?sBlYtl z;X?EYJ1{>fZ{7-!+y&SihZui4b9Tvhw=e7jAtt@3`ws-CgB-~$(Ciu4h^4J+P)D=L zhZiBVm#o|X`Sl^zNo64`Ck@lk8|i<%M~Dd@8U@t3pv+zHe`J!qGMaZ&{Q8m>s5-2f zd3=_-M-mOrRb*~G0!pnN@8*f)Zg`|nE2j%^Ku-F%L7#kN}jt;PRxGlV1c+XswJ zD4H%|Xt9#0_RKRe-XK%v!x(RYm=;%pVo+5JIAH9~Mo5s|=;FF?ARv-r*8-sy)is;E<&0Vy@j?2;hc--jR6 zXP-;^S<3u#q*;m+ri^(9U;R8#z$)d{&@G%c^U_I#H_|s>;+5Vr=sh~UW?J;stmS|;Ago3q zKz$2d-o3^P<$nKSuJOg)um`8pb<`avisYfeVo*i4>xB@uftsTH!sBT5fVLB7#~TNB zx+r;OX%punU^hKT;H4Rc#8vxU&rj5+csA0zJkBJtr((*D^8GTey_jD+EhewykE*uZ zbki$nzTx28wBN;8_RJeLo%%rrX1#YH&{hy6Q$UtKUuC@k;rcNlsd>iAR@ZTAmoYFPhr zHb?_pc{4KsbtU*J8>2oLaIbwul+nF4<*=;A86}VG{nu{)hh1whN0!tyN!_)g`@+M! z#`VaC7SCH1ly{$uJW*kyVC}6bLYl;N(ci}i0$006t_ljykNRn?<$Iz%>stDv8No~@ z!}K=%D`MrEm`15E&FJnU2{1%*nLcUV?2V1^HIn(JurQ z8fxpT+f13n?D5Ub;h0P2d-!F_8XD{i0M?Aa>;wZJ2>2dJouSYl)w%2(RAfs=@wgwa z_WlO7cT|{I>YUsw5bJxvN(Dxtlc_s;O8H=vyuO4{yg^XIKd3n;4-H7&5c6%pIKF;~p<@^x1f1!dBKaxrn}D{tJRKLFVXC_|sFD=H zVdTJ}1bYfTH%6>u@}!c<)&vjk==q*JTsDjQegr}>pT);#_|YwgEc77HW>swIAkM$x zlPm?#$b;zvaKsv;@FXMDc#ILM`~ZnMgC1Jx4w|3VTifsNL&dh)kEoiwst{ z4@WM2M$M|5NFD2{kj3pB`yc3V(?g<^a(THj%0{MMF`owYFOrQTC@Rh-bA1z~w;#{% zP!`T=+z0<6ow`~+o11ZOp}4H6APW!5+)P}^6+buXwy-tKBPE{4sJ+MqtH=C785A3~ z?&ZRIrB2?~oJ#*?a@2Z#&R6w{GAujFcnhgbszhZHW~5J&VxA&3=$~hX-RDVDKEXqB zvw>K?FW}ZWGZOPOXZsZ}92coEJMfPew(UVnWhy+S7C;CJ;jPGVYNqeAP-!OzqHs*R zcrd|0IHHM#=y*jF9L7*oNbMiVLP76{p!!DsiO=XY%SyxtFi zOQQb^3%NgNYwh5Mr|;VZpLmkYUh5c(O2)%H+AY!Ls*lMY2%+M4=JOX)tmZYFLchXf zQcAGPGKnKlK*I=xhiLV@MEJW5`{fY-rfmldL47>u22~ElUBZ)i(@$4hS)V+ z&@Y(t30k}?t;v-iNe5w~R+aCuk&VaN2txGWog!|O2NDe38=7W-#2Zq!yjCy+cUL8RbDl#n!ctg*wmHrdj?!=fCYRd=#Nz=Z{ zbk?d#%4&X8?xOmcbrkl}nK_>=zPBD{SjV~R2t+?2U!Dg|1A`aEB1SFEgF9Kahe5}N z43Z)mCHPJ`>m4TKVfCQx5_R$<{bmd4OB~>sw#U^AXNhC5|dnwYi zOg&$L9sb^;G{;ryJ37E2r~OlbbUhg`F+JMi{>v!U7P2Frrtm#SsO0WBF*gC_wJ!mM zGcaL5C3ze=O&F92`>uoDj1Tb<9m6T5dv}cRenr}l73{O?R0&&%Z*VJ=D}uV)IT-#& zSV(C)Y7|H%_{dYhY*0?PUVXHyJgk}Drv#n- zLeS#}A24L967DThPHKfd$y>4cQVG@f?bXE6?&418bM#T;OiCh95s{@l+jKrSl3#kvuK!Nc12#0 z3Yn%<)u)Y$+484lQ_|Nw0{YDi>dk@{dCpz%wvo%rl znpr=?450!(yA{3wt$*YE6Mib8P2leXFCiG+Tf|SC)2l^AN8e9F9^~C+evdyw`IE*J;oSY04L)GsiWH3q&c?z6pR$=U@Mxw! zKaS8(VO3fTH>9`Z)UAiBu(5o?US2AS%a@nZ%S)3$ss^fY-MO~z`Be{#&dx^@%^{x8 zg5v?P-mv|ed`(s36E>lfnUs55`LNvb&t`9ewqsByyR(fN8Rg6uQAQn zWx_|BTB$*iwB<~E4@Hpz%Q-=ULsC0n%6{eGG^_5%`_BaObZ0SxZ?z2~4lv>K>Fv4T zyaTwF z0g!G`p)FY^p%-LN4$7$OLMkml|8UyuL%WTki-9<*@~Ji;{yszbeU-)kn zRC!e*g_uX(uR8yX$V6GbTKAy`%p?Y5_`IfJM_!aw?Y?f=VjS~)Yl@pWZE^NpP4FB_ z8z`_|PlIlFd6s>=L;UQxe^B*gXC4((n7+E*wiFm@MXs?a&MbxA(_Pa2(TfMStb8^C zq;*_-mV*E<>VP#^4EVwkd)tXHSPU`*RV%#~6_~3P8l6U5u==`%g#)3@ zIaXSkwF^grAkT*v1@d7^jEcHFd<;pxOkHP)oK1_4=P}Wv*isS4B-s!%HIS^XUw+FZ zP6%Dw-{e+Agf|g(D7~#?atFV}81v8g9kLgot8GSivP2MC0dlFeBE<<&jp%y5)K=}q zbE$!yTt$Fk5^J72Z3Yl5_Ft~g1?|#95ZMn6wj7by*IyD=!?3WJ>$52URdjHNCANF{ zw!k~tpS6}VKZh<}zSul=_icZeF7sFWU=#b#v~liY7z*o2_K@^-4BZsKuKk+3?h|iv zO)fE_RK$_+0mrpP5FV{jec@7=cWV8#yp$D zFpOvAa8NbOfhM4gjcdPpcLhJIJp=UcoY`VCHr~RZ@;?R4y(|3^e|8!u{eWztv|>%M zIyWST6TqRKk5u2G*T-mHQ~u5Kb+G8_tdrB-qphjtm;rz6r^~(HUw_TX0ev;p;-i88 zhyO*NVtUck`PaSQMd!9Aw$xKW!^JY(@%@(cqOA;wmU49j!qfu@Bsz1`I6J|L#`Vh& z51EP$+f_m*_^f~-*HcS4Cn_hJPqnBZg5Y3}uNuqfqvDpR_xR!8t)Y3|60?M>Cm*KB z25bHRMWv%dljx74t-%~A03YQKOP7v8oq&|sUkUxz+Uq@bJ9d+|wCk8MF%+Os{wh*K zF!Qh<_2a(EExC?AbRl^K*NP-yqt)vyVBwSpf0Y&`J-LC#*clKv5wN&pu1Z+u-rNr- z=Iu;@Bn8ICny}*~ZZaM?{T}_pyDQpf^IanjhMZpPOOEDHlrHhqpP_w(&skoSaScFe z8STTHx}2v!`hH11e+ACQ-vxZCmWfWNR(NMoBe7k2wW_wj14gomHyGM#IOoTnT75(V zF2G5Yu_TY@T~aI*WTjI_P3MPP^oS{(U#mxudqg!VXKH;%xXEu3sOPAsbF7ffZvXu_ z4~sQ(0VUOk7aYJrwyOs)<-3g7^N}sf|CkjyAZBOYlAv zxk)LiFD+O8M>yv+)<@tVxTDjFc@XG$GF!i*R>R` z1|61GXarFqB=OTQg$*Om;HO+$Vbq(fKP(AgsNgOY=LH-=Cp9SQrk@I@bneHUCbymt?rIpkZvoUMFNDau*GLN1i%*UaEBL!5j5jc$eip%% zawOM}*d|n;gq;~E8=Y?f8F}Ee?(gX3A$3+fNLa^VB+ou@MO(*SHRt~d@PfWpIdmx8 zpe}dL*m(qRuFIvGBqHOb&X~dKQq=assbU3OHZcQCsQA7y|lh)fRk$)!~jpux9 zdIYPsU#pes?Oqx3nE$CXXo6vW-%6ly?)JEU=iA~cdD`Othj62mxxj^AkME)9|7y?~ z+;K7N)b3f!y1fe&6V%G9Ue{=%uDp_T(%#{2rcNI1@g0;&-LP#beo56saW#}R)%C#` zX~WoO+!MdNrM;Ba5ZYkBdy@wcM5(W2CnkxG08J%)j_uiCzkn#nL7VPmX8@n>2U?F4XOvOE`Q zs%1}=3(=#hm_}y&ut-=+vHc|xS*Z+dZc@}ZSK`%R7Y(QKJTM;5Ex7OASL{2f10+@r zI~;3Lf!knSFqVbxTp=o>!AX@b4FtKSb;1_yEfc8Syhhn9>ENwz3mj z=g|9kg=0yLUx>VOrF;-={E?MQ7W^7E@K2R^59R5MSx$|V3Bl7I>_EDCSHbd{HuL`E zI11f4@s#^6N@jR5&|gn)SXUX@IB144X8v}(&;862UuB?4mR*kz2`@oHaS=~G@m{0i zOa#Ol7!9=U^OvcvykVMxe#-Tn6H>^i@jkkIjMWqeODV2Pf3uN~H^o;#3nZ(ZY;$`l zkP8F>EQuOlbGaD()!PlPSETNHP%Oo)^sAe;GoLG)Ju&?mgHgY*(^yaTJH&InZFDWz z=5$9txZe+TyjSzB5Z@Ba@s5tGpIWvx))*y&4*2&k1L9p4Ubh{a>w065W%mhbF18=a zk&s>fV&_IGA?M={VA;kZjD;~xq`)83Sj_jI0(({C$|%`?liUkHeJ|yZjTKn^!XM}G zI&C?)FLM@8@(IjKSXX2w@3;5i5Gy3XPU>sT`Rzo&cO~W(VDcAHH{9rT@)FLs& z_C7LpCe^7rv!J#3`OO%_KF})jGXMO_x)UoZ^0-$8{QS}g+-?}`3?6+yO@0>&=kEWq z`8VOZwJRqw?R;DFMmw$bBvH1AGZW65_ng-QMt=LH{*WhdxGBh^M*jA1dRs-55NxO4 z8=246VxK5onB@09e_48JyWC0PECM++@7!Tb8NpHkXYPEt0qhP`(kTjvm#$G-1zVvW zO<6J4*BY4m-?cZ(FgXqdw%rp=L@s76$t&Eq5@uHY-jKYQWnSE?w5RyFL0B(#CEi_q z+rRwyDYYFR4Ql0;ST27|g{ZUcN-4J?yyQ&zDQ>|Xl#GfQUs+VOXEYGU0=ah9N)2Lr zri&mI!J&2&lQES}()?2npilSRgzeVz6ON-bX66WDgSoMyE_Jt`9c{_lYYpoUE-wLtpm{XNbwb#IfE*!p;6`&N?p`)*WX4+~IzD>w;KBwaLDtSYzx?OQZF3q97V! zpgL62Oa*Iqxvl$7j0YlCPg0u?U zj*?~8#=Awk4ax@jP`%<;(A98L@sH-DNrD5K!Yvd4ZBu3PUuKeE5qS}>Dtuq9RZN%z)epvJdI2A#i(0rHsEOq{%g9L@ zcI3mhI7Yr_fAoyLD;9;B$PsB@I-B1QiXKzCYYZgM)A^9$b!Su1PO|bs#nN}H+#Uu_ z28R`u&H4Id?)@TLAiCo6-z zdyg3V<5+^O9V#9xVuO0puqL*~PR@=dK%4&{J3~uY4h9Bd2IBu99v)bLiif=kF+j}D z)>*{F$;i>d-r3F(_P@Fu(B`{GO-5N-OO;01&c)HlMA**QM8VOHPRYc~#TxjZan?XH zCt{ZWO%M{Yb0^lOW8`Eerek4cA!h#uj0|iHy08F2CnFPEXJQ6efH2Tr!o_fsV>1&cu`eLBRJpJ3s^= z3J?Q`10(>F0BL{>Ko%eekOwFLlmN;A6@V&04WJIt0B8Y#0HBS%iK7$H)))YEGP1BR zvT!tVvH8Z%CXNvbOabW0*y?pO-#S_{~*WzEcL(8%EbBqZT`mp>o5Ws z*;(7!eoGr0Aix-40{HLV045GDKx=@ByOA}}24D&>wQw~7n0~tuUWf8fH}b2 z!`|G)7GMFe1XuyA0oEo?P5>K#Ex^{o)&yV&u=|$w0DGXLiS2(4{}=tw?DtkI?2G~S z)-Fx}2Y`c%iIcO%_bMD*?3_)E4XytNoGkw1On@W63E*U6WAVR*I+?hBn{={p2RK;+ zoy-Bw0B3VY6BB^5n;pOf;9_h1?Ia^RM-zZ6zzyII@BnxMJWU+!sQwpWF^li$uyb;L z=Z_LBAK(9%QH=k;jFK_2HFGv+BxYx4g9ZFgVIpQ@Wo7ve=KoaY|3vtI@VkSZg^Bn- z&$kH+>u=9|XQTDEheS+_zO(H=R{k%2-B-Pujhsz4mgsQTT(g#&Y}TgG*1lyaM`?*+ zI>wr*C`Pv1)kc@o<;qjj+ENVba7t$kpSb?rFfKajm?iwr!{{ObNpUE4NK7$PJ-@X4 z_6Qt>$$?(gmBCoSh1n_mp0SZJ_+fB{W;Q4A6fn9kg9_?+Q7rLNKh^Eo>a?$kUwgOImjo>|#u+TI1 zHJ|DQhmZ2NL~Vhb@%eB)H`xSOeyREGf$0&fGl@6dE`#`)9l8~CmFpl2UuL6Y6MYrc z)nC&QM_=;l*{frdlVQnWqx19ev-|oSV$9;d$-Qws{fZmYF$6G&G!Yi*2t3DNd+Q|?RqQUBwU+w_IMHei&Ws0S`*cw%H?;uh&T z`^Z-f@{6qa@Nm~0ZlR9tYq?#gef7J2Jzuhy`(BCk{R99xIP0(B`8fJ1vTC+X+P_?PjvHEBpHpV}eZ4&K&Ow#Qp}lx9`I_K<5fY4{B28o%Y=u=&Dqp!9zUU?O?HHEO9o@VdpDe19|aL_^TtR%Kaa zzLkE5-JbZ^eveclyZo83%X+JISAn3H&tfMqw?+h(9wfF?u1B#CF)l5ezre~c~& z_qhS9$DFL~H3X7`n$?pkAaLAIk!DG<KgwP>NX~^qm0Zu#P{)?C>vy1*yJ6k~POa||K1fsy)ZjI{O$Vsuqg7okrDu1Xa5*E*MtM;Mnd7 zA6h+Yx#BTTOw-SepEpZI+-2P~oZI_SP@v)UPGdD*a|xg$w#Iu5Yzx5ez&J+n*pPZg zD>k~snz1&d`}TqRs8^Ce%RPM+G{|;^b zR)OHqLoLy%e#8`Ho}h05cqO&4ZzK0AeeaY-q-wj|>zeCK_)EzW~`%M_jm^6orbprS~!j6VWgQ`FJJW8Z7v%B7848A$2mcpNoFs!peS2hC;W!FBU>R6HhEn`W(Xk4(J)-xyljKi&v|S=WvjbqE~^!39fUV zVi4G{sSk(ba`WC}$TS2YN@J zp7-lqiu*CXA|%D?tWs~%E(9FbyWWjRbhK=#WZnE^c zPiTe^=ish_9!EZ|l8$2#x?eUBb8c08Gy0v@DA~^P^0(hQs=>5N@qU1Sj z=gtCuhQ(Lx9-D-8mIk)`xa(}}HDg}d-8@ZWQW{aM(UIgOBY#&=q;X4pQbp6hsGAC! zUVj$CR=e~nbAPNg@_E`q1@Y>H<0}eX=glB+YrdcUdjYjbVULsENa<*)d^|qXZAC?e zY@B;#ld!t0z)crJol=z*K*;D1mm_0+!3drzj5JZ^Z?V}rxuQ6@0{qSw&5TS^lbsTU zak#SKI580q5a z(HE&j@J{v-Qq!{S%fmhc4w*stz?_b5sUY+*BMWq+YS8>d16(=XQuNd{#FenE8=1oD zD%@M`VbwvapB^a+p>|d#{0XeIt?~OU!#g;7+$lM%Ma4&OC41U{t4d=zsMNj5@-X+P zAA(sMmWTxWx<~E~zO-Ak$D)S$x)Q*|E)ZINA03R}(3kr-X(1cg z9*{<}I;TC%@)b=mZ20!ON!JrSHVfau(eT7xyW-fK`C#0F%C}B_oZ#ND^g^;0=lvS` zSx0zTNY-~C>~gyPZlHMI1@2lJ50(^>ey;Ny(+ze6H(g%hN{}p$*~6CqN#st5XGhQl zv*kISY9GnDM)bv`gtHv{CJ@>*!5EX%!`Jo|0?mDr^88Ycws66f#_91+pC4RUL0sL* zf?(2Y$(3;H;JQ6!lOnp;9u2(G7_ER`B>tTEyoJQA51ngU!m|4SQ2}6aBCYvvRX|`U zp(Z%~;$}ptFhb*4gWldzr}PKbc3PfOgRH!<;tbzEiK;2^auu}_Dw zO&GPmph@M6i>`szxNZEo32@Umowv3cmR@yNQEpBl62G&t-#k!~Z($DQw0s{DTZ>`( zF(;;1SB~cP-^%P~o(pxe$;$J zK&^|TyB20XJ)-60yn!P!yYK^{(M;(!e1BLZy{fwh%1a?pytgy73eNO(Iu|Ue_P;!*#hEmC>lE2bdX*J~u`kAPZ!u4Q0!(lx2kG%EiNaXdvQ9QBY=UO+1+LvA^E84JYfmB};;t!}M9Tv-9fHBdh3_K zN?xBRQC>F%ZzkYUouLoH%&R{hVNg%R&v&g?`?DF9XE;;Uc2HQRWBc~i3{9>>X=Kia zbNiXkUQ%*Il7`PyVzQT>me=N>05Q^iYj~c*6^lQP?p#o|jW5hui~~Y1>CK;mr8zK* z21`h<`(;BmAx+X6Gr%_7dzl}>9>bDfYvuEJ5uJv#w(cf<|0Qa(K3d74*k=KY*3XG` z!-4_gv+~;uwyiClR(IPO*3t1uQ8lx@NM4Jlx&#Z(6C?XdHQYEKC^vA17<;Aook+gg z8#>eC=?|+$LM&QTd7mTm(Go;PvWrxjV|WYlS4I5=h|OCpogZP92z||WrJyr9suj+m zdyfQ+&&*l}K&N3+mtqrzd-X;08qmHI@;9qhSX^m3In@{+B``1whExv<&v9ziEbu=eO{c5943J4h(#{rbBYBZwHhiJVPTWMBLQCzHb1hO)6Jr z3+2|g>6jn9AqlX!*@iS5bG(A8hr`t-oLlHj6^4L*MsH8)T#?*-caQ3FM(sNaCf#;j z=JY{JbWW(NDSxxGH{qTiqC-n^{{Ax35t@`{nCL5AUY`@c zV}O}}#hif$P43G21o8%6v2=aMr3mkZcv<~yExL~1$AJCCM?Wp)7MDu|ffDMX#BW#( zb3kpg7ZU%dRn{|Z(Skoecf!zFTM;Shg>lH zasxR*<;JaduW8rS|BSmG7mVs6pxFCj{HU{*&KdY3iB=B7$L41T(3@l!hra&_W z$?#}>@2j6o;tlLzTn!4$;%@JQsCn)W7d5Yt>-6Mljvt!8dai&A1zi6(`8~4AQJZ%V z$ge=9|GlGt4eF~oEW$Hh=P~_&6+u4S>mY&FF_NGo<8xv*3nA#i{UbpTm zDh;vzMvfnGK$t$onxn(0v6RhzqDMJ~OCc_|LE(7BB7=4X*`3CV%yydCOS#z(S6I&2 zv4agR5`eutgwrsVn=j{U+uiSu0C65qUB(J>t9dhheAd>eVFgki)o}<4HLVqATyzYy zb0YhlTFMp0!|_E2CZ3P5;S~ZdNaMG%&{ zwHsAR^?wC1ku7)?cRalP&BW2io^zc76th{#F0dLo(FcAH%XS<)wNt!#uPh9(nHA4N z@_G@uZdwH3srEI6u3TL_=ez1XZo^*S7u8&7%=>{6?MD@C>5aqu6NCiLF=hi)tPW}p z(Pvr44~=9+o8qkL5-Q>w8a_}J(q;FOvcreCi^tKu7-#N&pX<&E@J#MEhIeUtbA4-S zk2Rlf1ER8^FH`7;7shkV*i$i7231FFxNzFdp4F(Ss&y@7Dg-G>m%&EDAMoOHE^03R zm5xGMeCJIdt5^HCM}siQz8EDI`|1#mdNsyRnal4TZiBR^)hX6(W7vi(^+`rWT=5|A zpQE3@cj=peYf={d!29iETd0A_e zg!U|_wcRCme-N=8oJC_bWnUUHnJ~IASXD#lZ?M6sE|ZrlYu5Yz@C}8=sS| z+SorIe*ImxPK|DNr+kMx7DzxvFv>K|r$69z z`=qG!07kJF)6cozy@ifMuA3!_#!k26bxiB=bKYiXrZKz$x1d#c1)1y@Rq)PV?2Lft zvA3WhGy9a^VCh6H7v|c;oya9rvgvehyD0@mC{y+H%Ho%1aCx&Ufj@d$lf&#c-;WOf zaeVLvuWk_2dS@#k4TnKe6e+EU4<&B}Wb;Kln(PTs_&Gd)}-!xH%QITg`5tI<58L z9&YUudk>ci5M|zmrj}R-ZAnzuSRbE4*HGJDO+3eGEQZ`ACN8Qt!)jN<_2xbi!oc9L zZGT8X;c%)zd9tTIBshykwsd_nV=e4lWhktp+jxueY$HP%Fv7|Wua>d*Jf__Wnc2zU zIc7RA^<5E1lrkwXy@GEM<4EDNzAxIf!o~Lhi3j=#>4Xa7fh$9D9M_j*C9g*KSo!qB z7wc$cY)31rfI?PA8m#7+Z3vUqQb(1Dh$kPBxZyRh&FMH*^2eUaW&svaUy3h%tJes# zEkEdL_ZmcCUMMseU7nJjCyng^{oFPyf=Ij=&2W0EOPnp4t)KhC=HB;DX5M$=7>Lr2 zM%fsD5Bx98QLqzkvkk>D$m5>z-ce|Lo<=h?u0OyJIx>F$?W8ooiA#3_z(na2t~Kd^4O|wXTB{BY;O@8@=a}dTRrJZ2Fr@voz|L@yq_O z!mLyQL==s$SB$2~>rn|RJf6_oi)SKED+j(5enNL1!3&>d^Kx>!pn*$IgfyF4j~Z<_ zcheN$gvQGrD`STbGzx)iuLkSga*|X9 z#j$1>8Phpy5JD0+J-kd(MHaY1jvw*I)MYeF1e3NXJ@x|Z zo`sTj-&MtI@lFf>30IwI)$^-ZrkhZX3fyGxt?L**BtF!{A_~|X>Y$@lINTteq zBz%AO=S2y;pa61Q%Abp(npmDBv>~-Lcii zqQc#gT;o-aUV@GnX};dj8_5N4-^*_j*-56voXKjB(C0E_dsp)gbtbR@sh6F$&>6@( zdW2+YzufJg-A>^!8k&#;2ax01xn6%yZxJ9-#l+A*V5#;T61?*ak z!?1mo$S*@xW^nx6u+>sChN}X!zJ~i)ZndI%9W87kh=jW=_fFV&3sQ$=Sx5gx^|?fY ztjS_+wyN8~+5NL@o*j5v5-8-8GPw6t_V}-nZl3L_UX*W1EDNWFsf5?MbTn;DT#+me zTdg>9c=r9QBd&xtF}76B_K$Xa9T%|Jq^8DuRA+Z{^LL^KA+$omF5C%k)T_v-eywe1 zz($2KSlih$&8p*Fawqp}sG96d*m^n3C&!F;i8nlfPm;^eCphBUxRo?b`lzy4VZyqQ zj)#mJtj$GZseiZ9#M7vy%TOV0c~T6uwRM9v|6qrtJsz{={@rI^;)?kjh{~>=qiW8t z9?0{zz7fcQ`Ti|NMyUUCaxhYHt0=+=qdcg@NX|s`OXbR1YEBqazx+Wz#D^$$hZY=9 z?zT!VX$@N-L6Zb;@r)n>4zcSG!?8Nu!R_&+2Re^HpFmx1%pXf~*0>`ESD}z;-meLr zAsPYXFMX8Fe|1MAd)4YSE~OW&Hh<+ouapTKK;43=2)-oq#;|!I2j3>khkxS^uG*3u zwyM(pJAKq2Gby{Np%zwACsHXpeoy1^xb2X#Rd65WxH9QS`5HzQQ56O}%+L7vIl$jJ zod<1ZLPuC70del&Oc}T?W`Z5GUC8iD3DEXZ8l77~9vZL_0^eFRx!9<)21yztaYFwB zjFuZWu~WGakqs)+5wi(FK&1hU&H>S()U!&8Wu@0C}E z;OT>@W3@D~?}znyFsKbpz;fx1C7alZA-=|T?h7GxR8C`FG>+WgzBkTN@VnPm=8wp6 zeQ}$iQ}#7O$JX=A^j|vbx@=!G7Z}mJMd6Ub1@n2&am#6=h2+BB~S#+-2ta4)t7#6 zHUbHz%IXRczE=8;!3-}A&a}7WE~WHH1*35cprn&+Szs#{44FKxK1LqP>@H0Aa3hrryGBLF_XmUDI+m& zo(lPxjiL2C<9l|;&DzNoRSN?ON!QX6YtSp$&OOi}obY}qx>(p9+8-s*Vb05iW0FB2`WNyg zadYTk6t2I_mCxH?u^^JZh&IoW21*yP>D%{w6JZgllKjKd0ndRPK{6%!ZH$fsLB zqb5mhLE==jCr6`~HWW)xHZw(3oFHQLH1pLOO4APab4_=xI$Tp^ibXBDI!KHeL~+{C z1NzGSN?<)OMNGKvGPghM%O6kc`{Fj-dqdwS)|e;HZ6@3eqR=@l2k+bFZ%rZo=ju=% zBSBgJd0vIIMX+dn6%N5csbGR#GJh1>Os_YzsdjG`IZue-IW-ozROUyw8j)(n`ExK$ zkg|Y}x8uTeTCsoPh!DthD(dCmtJq&rOky8aztD9Y_nun6NQ>!SG}7N-`@Ziiy3cw& zqhvaxe5xC7W>YeQqp+9~e*HFFOdR&ocP&-jzuu&xDvy281RqTZ91$b`-6VG_o#tiE zD8v_c!|IVmr7RMLw9)2RxT;SGj!DepyuR{me`^1j{i5ED1LH3vluv{MX6gQuRDn8; zxsY&WJ`^y1J27FZ?q_NG9d&|5RR;krjF7#AuP-ZH9v&nck3ZVc{URS5#}l*rw_#VHgDnTxXiPJfd?-0YjI_1yR=7RDoWhHHl+paiBQocj^&lFrPH{k}8VtudN zI0+shEXTMi4=)=-F?pYzSQW7f0VAuE2X;Hyrh|{L)*`4qqnmlwW!k1u2;l`0Woq6!fsr2RmYd?C1Ml5V#?)^m3HQn3pf0N z<{q(KK*Z5opa~6da5t!$pah(>DC3Y+f=I`^VpWPbi%&u;x)%h$y@(m=m&4W_a3*x?ijw4yBHWQNM`j_2xFU|f4 z)+|Y$@so}aG;-Z`p5O7w^=@8UcU9_|e9}{xA`1;t?gXj`?YXPs#epHGIlE1qN7>@W z!ZvA03JAn^-@6C%+f}tViJUCKwBr@%T1$A~X79kxPg(1^%)?DN9?;5b z%EA5<%-U0Ta7#e%gkiIQjI~Y!t3=Lga&?jqi z!{N@e-QKii#&8t>_+(Z&+ zr{9nIy{^;3?Z_uwv;`Pgep2=H-z{32W=Mc(JlWp@L(=k2+(hw*JDt;{OcFCe2(+rA z*X8w*8LKS!#z#Ugs#>IdR>?2VD?cGnQx@Q7ZM>-{pn)IT7B z-SySK;r09DK?4ff;Cp!t_Tcg}$2!+Grw5xaU3d;H0{(0bcGbADM);NV9#C^sYa++V z*;e^Ht`88Mb-W?Sm8?I0^c|jFUa1OP5VMf5P-Y=Ht7X0OzlgjY{c%$0s)_r1zUsiR zhG;)k_b`1mx~Xu9mXaS56StoAgNI47tt$=8DK{~dvSdBF%AxiRgOoUDS}&s#_SKBG z-xM9ugdpx53j6NnolHjP1DY&h0H@7xZ4O}Sg{NV z4F{gQ>nHgi_pxg5j^jwiK`2x1MgoO~g=5KTH$6t_PhpCt?yoS<1wGpKzfFnsBp@&5N6*}dSOtbFYGxQO4i>}r`$}< z7~72rHrVWV?oueG*E;kKerkUTaq48Ce~h5^5Tz5BS0hRrY+WO}7KuC^_E&-tE4yWBTi zjevF;;FtTau@4_Bw9Q+7l+sL*{lAn$+#TQ)2gBe9Z4hXiS{$+;kE`oW*5}x9KV~g# z(t0=#D5J#*>lU%o;HfIf5%c`e6ZTiz5QABN{d#Z=(oXcnhu|Al0sFtl z%~rdP{et69RFWpr&jSVqNoFyxq#O2GmeqL3fIkv~FJ*h#O~pe;+-Kwhj$IAPmx*g% z$@j+b*&EPDt@=$JQIh!&vXiSEp^(qNE#9j8lQu$p|1NQmNuGSB;DC4|7kOLw7y=NG4P6J zC|^5?^f~aTdS_q9*1;%J%Tf(WkO`mT(d;xsI9LFc$|NPLT*%R#d$V^)J~d9@lam-n zKuHV7JW;^2gfiy<7PO`dCfTV7lE36VY{jz1`6mJ(r)%`M!(^-}x)*ckEo0oc=js`P z9=%N~3_shBLj)xp)tp(Xov)H(ZYC9#(kr4cdpC~~G2d?JoLaqfI8tJrTC&ldyI*7+ zBWf(ES$sS)yUa{l@R1q;jcjO}GDc)w@Gzb-m#xg&&EFy5Z>dBuqi6QFoR#=mWsXw+ zH$pUMdpd`fL!dlKq?e?sDDg*?a|;q_;|Qumc1jH*0V~sC)ZOpyzm%fLJ?+{rkgH4<0 zwL<0K`!B=+;!|P?r_Khyy%NuXpe`+yEsW9Z>;M_V3<8oeS--^%!pj8rUl!s0o3h-g zybAE)V5Kr$)^50ojDFx>hJDdkAgL);#V?5dcTq{xZN{jh!2vwjYRNOj(BybJm5$Rv)-Sq@_smUx|Mf+zR$Y(VP?t)Dm(Mut zdVNYtqj1vzJSiB@=8YmG$94I$G1RLqbmQ?^4x41--5MH?)%?&bwE_3`b96hX>e!Nkd7&rRPJCQv_7`b1QUK%IpXn$;1(PVJbSz^UD|7JSvyQ7Ch;&?PV+n;nB zqHt!zu9!6$^g-ZYWx*~(0C=UWv>+BiWp{Wc<7;v0sUm^aZK?_`88f(-SBUE&OFGi% zoHitkkiP>GG5Ne$vVs*#YenlbGnhZ7FJy_EVYjezjtdy(q|GK(>MoP24UQ)s*hOu5 zHY>twC9NHACM}g2{4fNm{cxpcE9yQM_r0xJM=!x_qY0lWFF|Zju20p`5@Xb4jLymh z9e5&!qYrAmD~-KUUgcT3URYG{k{Mts?WH0y&RwsbKXKCyZ9nxlVP~~moD|2ZSLC-| zbzru-UIxqG#KuIlMTvizaHdcln6aQsJ`>U)feub?in^kesh&1X3#`rs@y`uRe8ruI za~|xEQ~C?Gqv++F5Q$zpfxOqEvg zbMw!MbVY4CTQ5)?xarVVHL&Q~^z&A$bKqnO8$pO>{_j87DUyt+ngmepKM`OS;j{uj zk-snj7}23zp9^2=try~2@PQu?&sLQsbop#rMUz3S?ey$d2)hW^@LaU_={E~?Khim~ zC=L^d1;mSg(N-^#p;x-pEZ&bR@fdLG<4IRalzJV0={;>4FlNa5|AOQ@!;AIHakF~= zuzPevHEe)997K4{-aPBee;9&^%yB?&5)GCH)jrfZ|3S#7C)3W=NfijjD1GOf=lW&^ zm9{|)Z5Z~!wAWl}ogn0FW&n=1QW>q>$>i>hPM3!^h0J2z3T~2 z*=ZLOEjBk%z^}z&LyZEiSJzBS3MMqwFhB)!?fI@Kkf_B1NN0bOn{u2;$5v-+4bf8f zR;f1f@{U?@+qhLTG!%^{m=A*Dh455t@tyFrSxoomkED+cw#-}#`RsA!0gpt%7|rmW z{A^7a1zcP2500Lxr`B<1yZ}Jg{Gx>?B;d=*l1QuLoUjLi{93_^!Isfb+y#g9!CFA4 zL?YoRg24{Do5n*;WnY5Kby z_Q-DV_G@?$vm=N$LyAOtGILwTx^e?s&*ILs@EhhGkEQ@BU9j`V#M5SXJW7n zxJi?n1KZQc%(zRMjU+1-)6@Bzxf0{CKxAsyvTHhx#e*s7v`i?K-F05Tbije<206N= z1nP83{Ra*Rj`Ex0A#MQ{&-V2bND4sU&;IvbVBZWnot}tyX&bc{H)Xhi5B@uTs0?Th zZym*{q+bm(l=_)ZxwS-`#8G_156uj%+=~fQI#`!UIn5#7;IzOR%B7(i!IhDg9hIR4 zS>hMFowZDxD4k-{h)mG6sXU%z)X{EhEUSE5XM0v<2ys;)+{EKaU5p6!-d1Y0zJlaW z6hmfm$9Dr@uL0V+ERP37!A(b!DC3Z%j*6MYg-N7^V?=z8V-|wg@A%&@=RrHSKSYPi zO%%Zk#i*)yj9L=WNNT3c%+HbI>^Z$vx@QR_JVO1i=dbBga5tqfhaXACYh>+tTjk)0 zszWMG%z&0{sVJ2C@UYE+W@*@R)M^k&v8kKbMs%hlx5h_I6h_R#&R$xgi zljeSpl*p(RjPIMFulx6k1WG-8o_|ae4px)T`xjxcq~-j)gbQ^-cZ<~%8%HjXP}-2h zXSO*JEu90XZ&;9tO=?#1%1RkD!oOQ!V&mRjsvW?%&!3GeM!ZQWQJ%sItSSsAP~1=y=RN>2|FkOuG$=&0pni!Er<6i^#DA( zV0K5*<^50NRmWdq<*8wJ07cyUR_%Ai$@YPp7t5&c@JjWWitB{p|9*6 z#WFJ@u=85t`^k^G8?xZz=PAwT`|9s@ykagxm4MD+G*$5NZ^9^IJE<0hj>7p1nvR{Y z;>%xD^d4(u@Gk|#SpcY%uN=)~(>34Lmq^B}pj+i1w{$+GGjRNzPn*YCI*X$yh+N4? zQ7+x#X3;-qYHC9k`B_`8K#^P#M$KjljL(Co#0gwj>}MKTOZbYq& zk;A8v23(lDZ|&bP+G=-KujFj8XI*2Cxtz8ozhi(hVZtn56YJ{ zhm0T1x+qaRc(R>oqLaWsUxBl|lA^HI7<3aas(81nzhc*xV1aAaj$Eo2TND+1!-y#E zC1db#S~HFlTz2JcUi}3E@a?_bJWgKqu?aqi>h@6}dJ{)I=dHZ4W^%PfC9youuK5J| z8BRf87^Hs4Y0-^jGC`iG(RBu}Cd?VgILLA&&j@tpThEpCn66Sp{JBxqhnMAN{31T5 zb1?Z8;_%7ODJgjGWbCK(Mt>LFzk#Ia1ji8De19YmN>y@+v2VTpMgv7Z5sRIjJT1MGxV;?C%{yh>9`3fbStIu-Yd=T zFM2=B_%2DpofAzyf9qx_C<9vcpxh8r>zApA6`LzX*a#EGPnPPeBcsB7bVpHv$@q$- zq$!E-yg0t*wr-MI5)Ek5$}t0@A6&XU9YAsMMpv9S!8<_b)iI z-&No}@;~ulw4;Y0R9(T%Mf?T5*W-xtArn5p+XLq9jf<{S*LM$gI?%Z#*?%JX1?4{O zxP-<6pYm)~v)~HL>eLI7Zw}0SLZqfkaH8)x>M6GUMoC=axVxN6>yW%gnh#F)ay%uX zoztKo(@207XZzMhI9sqNnli4Evb6?RiO(adV85p2J>}2h#T|?jKe=^y>otx;hr>^n z(lPy>RDMjbo4={KKkiFHJ%duDG%W{;DDjICW}N1W-7+?QzNN&QrLJjeBenc^lJhj~ z?^`G+X6GoB3jC_OEsI((7sN++{;~k9WLGAOFwFSe@%x$gGkh|MztC&^SQ`h`@3>+R zdoza*kDwA)wSK(92oC#|MjY9w2T>-;LK7Y0V7SefzCNKhixCP*i?}Inu9H^-GGpRP zSef-*-E0Fr;Ui4oTZ20*WPtpOT>xtwppWv%n2|EaQ4tUAmMPhavi@en#8=l4lnYfG znNVTa(Af3M%^_Xw5f{r$B}>)=EnM6B5& zBk?Noj#1)*emOxIS4;e){vD*=wumO1=+q4==e$qPBVapZ%URepR$5m1;F=bU#MWot z`=$SVLgAHi@SW(_E!4Bo*Wy(Qhc;2 z7t7d%`lh08uZPd$;(1WhACB}=#0YrYl1+gVBRCBgtp`@aTAwDNfCD&;@B-I78ZHJ< z&d^h&r4N!$?6hfy+PN()ua)WkM$_1dT>tIf(6T?&CYPrx(}6Fspl|jp~=_Rr(r7Cj#%Y0UhVU>V)uRmM8j2je4Em~>!_{`hPq8*cd_d{qA0~wm$!IWZHQYeoXK#85k40Hr zK9N*OTr0jh6SvNs6%RESw&LVYaFxuU+fy-BLW1hM!ksIzB%@uWq@Pbo%0-})Cf`~L5m<^TY~tezY|V-VtZlUAS40PW{!kmknmzrR{aaPe$qmdL`zueoaG3)6K&M5 zqW5KD!&9uPBZl7cx zB)vgD27LhvK9&Q|n`KaBN!|0>k$UVu$iygd)FMqkLOHv90y@}#TICTt)wyR#W$uVT zDW%=}$P#SDVAMuzSA?@+;;8gKpFV*sd*7+fQkGt(3c&517S?_ArXnB9CRldNp8yx7n_Az7Z_cuwrgc77!+^>8z>(lm0;NUvx zqs_w4L>&C9RGZrozI(;I4kxZXW} zd^HnWd;{!0O@TbE*p{I<2mc&Ts#rwiN1&)9Xs8uSMN6Hg`;MMntje}Y@&DrD9Ct(k zkZ#+yZQHhO+qP}nwr$(CZQJhC{^ln4&&)GaYGq}oYRggQ;kcZcKdyHI>dC||ZYWzL z*5%IChF3$4KETfvmMQ{^2M34oN)yIuda*aC2bU^R^&}z8I5%peER8q<)Q|c%ueS_t z&boeiS!pa?-~%y5a7XP&`%rk=Jh$-w$<2TdfTME}znM_m3=t4eLScCZJy<{zRs&aB z7c194EJ9d7LeD4x9GQ|`Np5*nh?rUJ0Pv_=pG$Ob;V)iTbsk-9-Fi$}qfmwl=l}K| zNPbWX6>pPW5>XQS&%_xBte1~RfLe?zh4rvSfOV%nCAo%cy9?H2{~|gHDjnSVGz%G% z0>C-Y1y-0v^8%m6v-@o;76#sR1yOYZrUJU~;OUT3B_TEyE^| z_|fkO`2TAejUc))|GcSwjPT95vBMi;#2{i<3#KS0ik1{Ri(>@I5WwHJML*_`P@D`r z&~@BEC*P1%rXfw-+Ur_W>1$@4j&(|wK1a-Ff-S9Fe-BUdZlq6k(By9!(`gSoeU@AX zyG1;mQG~EH!lfSgjn3#+W~J>4@WV((#}iC#+l0SF1hd)*EV+A2|u6R}3OP1qSr z=67uZDeDp>8?f=l=eD}O!#x#4k?VZWnpeWYS}f$AX1A{i>b+Q96@gR+`eyYS-sm0 zEkb)e4_6iv-uRNiAY)hePInO>0O-ZE^E#CC-KG#43n;_zLK#QZH!WHrR{4a5qp;E) zDMAtF+4NP%)3*0z#tW=rj?-4s%%kQi^q_&3p0i{kv*7W%Lw+YF@UO^lg;Wp)`+`cO zX3k7E1e$wO%*0*;Ldv_^z+QI4qO)vXYMA^5_`1A12Cm{rRu-vm?;(~(n>BFb?K?eU zEty?)+`bl7Jg3ABL{rBtvsq!V5^33U^Vla$Y$1fq?)S>Ojz8e^*NkrPb#&YT6Xw6g z8MTa~6R~T*E@jjsH%vCP>Nfx21n7DTZ3GGBuZZtXWOzaapZN z%QwJ*lbEOts_%sI3oKJYQ!%pf;i$aj*s|NeQCs-O<$2PUkz(^_)2C^FxngeiL*+~% zh6_KRCMzrGUBE@`0L6%P`o|<6Ud%(jiccO}lT(b(S5(QJJJyS&n#Mh# zDKeJ~aTUgb)I#@4d&-Q_w;D5opAC92*rbWG&kqs9Ed#H<3Qx5=+ptl57dW=Syr&mI?FG$ngy_G4m|L zWCtiOBeZOMtzoEB&OJX<2~~{v`4FVsDN{Nj!NKC)(SkNqXRjK&JFXB}+&;jB zge=p-CMx5mqhZj8DpGivV@)-N3uD_>`2ND?vjx%d)CBgs4W$u%I$;IK=(h7BXa|L^=oM+s^Wa1IHMN7fLPMBzs8v z_}Qc+8)>I69<-%VFhM^4>{&I3yb0}xVTc?9 zs9(hI2n+t5iVal#z!Oy!=d_p*+(!Pt(D}))*^}17C%gTv(IXo|;_a4XltaTLBKo|7 z+u+(2*ywB0TjcX-nY@)XmvehRtb|UV9FwQ576K-cu8JMpQ9$S$$H!n-rF1%RnRAji zM57anq=WnY{Mew)n_!r)reHE6GTwc)#}3m;(D(WC_q34r2559~h4p=m>ko}ij~$r0 ziw~7vpIa^ii92q)9tno)*|8CxrCTPSQkD}*02fT2F~cSs)yAX(K)Hba{QPV3p$%ooZ8Q>K`Up7=Vv;v`Pe_C=3%9>tYXS_Z zRzBkHRAfD|c>JNMP<~lv*C6A~86E_mS>#(-C(1{lV?9+aP_1*p>Z|){+~@#5(mL`YBX`TkD?x~(;=Pxgy4t!*EO*0 z?YszK&W+F^#;Nk0hta^SteBmb*@&Q3?KhfGVcLS`R3*OOwnK~`T!ExAFNX9U-Qu2- z6X0(8TT+2Cl=}8dQ2$kYr6-5#Q%=u&C|6k#9nF3<~cH!_kyPOSdw7Ehr2FF z9$cXKZzoO*$>2bo%bm`90nJ@xGvx^_@t_9{BtBy#x?a zg$s`P!S*{u<>MGW3g^0A-P_pDaEHw33UdrVq>$1(16ybHtEM#wV?F_sDyLH%Itwep zEE9sGLeog)Qg;icRwb7jnrcxo{Nwsvy`&mF#Vc^AII#yoRb{TT_^KsVJPkZ7ZgdAH zrbn4_)9bex*Tu$!H6i1HkF;gDvu;5U)YQ#z>%Ln`I`29{>@q2R4tN%j1l zyq70X4*eV(=JUgDyHPp|Su$eyLjC8yU7Nj`MO?E+$x+mQ-+XNGDj2K0M)waf{q?<} z);>$iFjADBOyDLqWwFZ_!+=E}ZIh*$-fB+VHz#l?N{FHc5LKho# zp>wdN3fwi0-B`@n)^a%M6yQ(jDWjC`XPfqFUMC8(sfIMDlwPxqbAK#XNJUAP3Y{A~ zEX+JHffw*TxSWJf3bA1@k4xbLtgZpq(rZdw|I}t)2v{C>_eutupf);aQsPXvuvqbw zmHRS#ug$kN@P`Wu8Oa6x@@2fthBf8J#{--Degbrkhsz*JrWZapE*TY$Akp)lFEC4B zsYe;~8ciTYJSCr1STeH1KaNoaxjz65{H;risff ze2)7uvs!iO($7fEmB?t<=$+v%g4q(CS#tJ(gxc&l3aMpSdTAzkk+8QAdI1zI-Z7q2 zh^)2uC40&kb73Nano_uc)J}>evTk*X9-&CRba}zix^$J1lgGJQD>zZ^fcRSuqHw!P zaf>uI$QkXcg^9fqRQ;RbFaqO&UIg6u_Ytp&2yeGixHJ!jcOAo}Gb9CV>kHgBp;~9C z@-I-;319-shxF=ZNrdZ#_fKyrPgE%J{V-%a)BLx8XbkQ+)n%!xF-j&YRC8x!@hq4`zuFKUBV2THXtg z5`CTVe@4t7;j;m-o(^w9q;n7Da_+#kDI%W3)l%<0OZtbdHgvtjuMpKM;E8)xuoBjP z7jn-upc#N#t;5&?e~^R`vv_$I%~|YjoBHjuslt)4>3Y&!$FqIXci@7dYBcF*ZQU6m z+Tjsx$EInD!5N)#pZ<8>nhrcOssUZD%`t5Bv#)}uMGbB*n*edhk?pzc%vi^L6J5l( zM+>HBOl*w()U6UOZv^H6Gy4xg4v*v!0kkIxAHOF6$QK=U!_b#({8$uP=LQS1Ht#iSlB>{XBtS3 zX({2OS)9v>5qD!h-F^DpVd~G2)T5oXRQ!~Gs~6zR8vz3z$dIo37f`Vw_d8>vVsiAO zsw^GtpX9^YT1`T1qQ9Ei8b$97gaCN2w^II`Q+nh&mjx2OkX-0`8~S(W;RWnV-=d_8 zwgdF$Aa4?hYk9%LB}-YaotR7UljTvw5`lEr!IF9dD=3o66hQ8g%#zPQ$+bbnS_e%! zKU#(Ch7%THJ*XjfoWi@#cqA*&`9AqSg+I$c|N8W1Lqf*t52}jq?Z9+#CXM7O=ZJZl zhPCMw$Jr1b z1BZXQrH*spf&M-~c}N$2eSLDrRjVeH@4vb z-W@-rBNT8zr4-E(UxeTd?Ro}_m`}L=yP^xYYL>D$wvVuJX+X%XOcSx6DZ|h3lGJ&l zkYkV?l%r{FOlA8OZcE!j#<3x!$OWP~h(St4tTN%S4O0~?eWpRf|FCNBv&{&$41~La z8j?v90!&;d@pOZ06vV%rP)BPXi#B{!<`)#0mMbx};pL^p<`}Ga)s-;WJtFs@+V&n3 zq7Xe<9uY;(#-b2iS55@+x3owV5Vcor!MIig&WZC0VJs@D^JFN)UWJ?}C)#WK@Sxzc$j_1nDWwFhT?)&C>?PVmt zawK4#JwO)*hq{;$V_--11T~n)sUOUi!n8^P0%Y^?MHv(I5gEGiWKXSKL2QKB1Z$5~ zQ(-0aBY;uPJ~f~Ka;^+uuCD=rg;jv`b*02?x;o1Hp+!_8GVdpxe966B<kjaiAOl1kU{eS9@-k{}g09|B!{V zG>c>)t+OH|eZ*VQ5jI(7*u`^2Aq`UJ)0YCbTP9~K<^cnELj||khW$s-z01TZMz-r4 z)KP|v;;K*h7}QGS(-NQUPw6UbN8Z1&t?`VE>7O4>}bsY&;L)FzJ?_|2Q{ z&sYO;U+3~Y$3Bh7f$eR;kkSN5iMa%!pmgK-hh~qbX=>ZXGnQE(@GC&9RwveKg;E=O z3X=zabs%D6EFB|tz+8Z4+)Ef*QIqtx1lzh}?)znXG^`u^X{0y|=^dLxNb7UBDsKl1 zCq;4_exTwY^^WF-64C-rocd{bpg*0ghUl4yR!y1*mU|Tq;x0ie_oDEsP$w9{93C;e zKAk;j^7f{IxUL^N>BjseuWF?Q=vkLCJF8=+W9y4g#odKle7} zNZZGEz^`ZN??gW@!v;QUA*%+8*SOmMLku0a1Q(oOF08LicDwE)cxP{KF~}ir!})pH zPA@}A$~*FKV(1ri!OuQ=75n{>*(Rq1S*@@{USyN#AUlFaRK9xN?o zz|mawLP2R{?kAaa4rivHfFcyG-cKoK2U6AaS^TRbxA1TyF6(1xw3-}r&@EeBsTHNU z-|2yZWXpxYcjh??6mgLLw8dNNkzZl`@qaJ`^mk@HE_ULiO!EB z;rWM*wk2h@P%85i#gpdNpnXxU5Oqz-+ z^56^M4~vq^qr%LtgfvI3V)ua>*HpXX3yWbWZ-8$Ef7)QiB|UBM>2f>T7W#NO%3@#c zPkiG1x9^9EXa*~~NpZZId>SB!+zag=Xn+HTx=%aY_RiAUlM}`r3LmEL@P&$55 zH<#T>|53ktrMVz*_-%^<9#C2-f6a*NsJ99rPzJOAOA5s zu$r->IygUge_6C!y*g%3s|+3RX*W>!>Ths{L54uHPbI9!z3!PWvS0)X!cIl^l){X1 zczn46bO27z^k62GPBH=Ev(2`1YjOv8Sa8l72TTPrA zx($4TSItT}9S=cC$F?K#*+|W$Z2wr5Dj80H4)u+>0!0+VQXAMIqlXmRZJnj`HTllo z-tK#$2r39V3*UgZMeM(!l%?(Q$9=}`raT2QAAx4ymDO^S23MdpxeR^hh3;y-yM^F9 z^~oD=?iv))$KX4cs(q`_l;-eN$Z(xX)V4Rvdd)OLLASrvWzDR9BrfSr+34#~aO>v7 zi2z>fQicYajsw|YtO*@zITo4+(|OUcXJi=m$yU;cjjwb%6}>(y6-zvz&ozSTjGVsE zZPMVgBjkosuTzPQo#$hy@06S%hVQ!k?RApSHepZw(0U-WIGgY%Az6#qRhBk~iX^S| z))iE8fH;z@p4I&v!WbEPi(LWyp_7BvS9U;YW*38HbDj=Pnzz&hD})uy@O$d@vZg&; z1qsH@8GPnIZHKS?IUHnX*@LLfel(QzV_#I8xLCe)s(3kDOob2n>2n#Sy~v1T?Gyqr zb3Wykr{e0y6W*CrWTR48vlKW9R;FUBv;}f>vT~a;5hN);m+e6|9`ml|NI-S8)<2x)l?0mUe`$mA*8Ncqj>0S-4ao&pQ6hM$mdd zCZk*oDN~;03nQUfPN4mC?UD3!cNt@#JAZ5ph8b59nx;ZznI+0R zg&BP?it?sZf_AS$>oA*9Th>}$WTz$U5f(ktvHk-N*R~a-VblOP{o$S ze%n{;BIq0Ml)P8XWhzEh(Dn#LCG2$}xY6*DVMn4f#N zT#5z%u_5>w$4t3I%mkE6-97Ax9x9-q6JVdYWb2l)mZ_OF{xgk=(HNH&_-CE;uWV(q zkgxGn>q?+?-?qso!!VmibUNHt%7APEXJYH@1mW&z#aKL?@g{cM`!EoR#%VNwrO?4f^Ade+oF+;G4+s4c^oyJ5gB#^U!fC6lLP@_wpvlQi_w z##O53bi8_JDi zgcXWIUUymLnfw|3xZn1fsucJ zj`E2uqd_p?i;BhC$cFkfBS{bKy6Z5#ks*N61B#m!~r18bDHHYEJmm$bv!iC zgdYjSu5CE`=c5uNqCLFho#U7g-7q5)ew?HKnEE6;P9D^Pzd+j;>p*gXu^=H1xxGnTyfnL+ZoQD74C1fl>YVOFQC;& zzD>N6#AKqS6+r%*3pcj?>`L7tCVke&CvQk%?Fs+*wgIGi$JuP2+d1Y1+7jGCJ}|R{44Qs#AFP)paG@3lVp?GuO&}t#jL1;X zoW~s%kJa9)_VY+BA|}mvIsF=1#7?XPK@=l{65W6y-%tN=-0u-`9-oWwd9?W8FFZZY z0X7B!t=n&rWWb#2{GxwkP%@lsYmiUPg=`yS^MG!X7mDw=jIUOJGRmf=MAs}MC6 zeKA09m*E&Oud(w(IAE+YGO#j_L~xSg`To>!e2x**?jBCg`z6|WzdWX{jr!wXE`{tCJxn(zMW1yBNdGGRmp^vTKR$8XT)fc$WAo`F zJIOx%GkosI4|MY#FF|tf<{TXQ9)jSc{Z-U=wQj#qr@#jD*`DLq$Oh{4{8e)9?bP4& z>Y}f45+huT*93@YT`S{I7q3&$?;O2x0UgU1}d$Xb{(GzY)ECRBPvKe ztsnzADc9un+ob08aIg%Y>~n?j#s0jlnwhX%)<->qgAZn$Mb&U*M0wAZZO0L(--^T< z@{RG+m2#@h0d&&+{sw*JmJ#qoh=`Sdk^idV0%Rnpa@zDq;}|LFGxyjB%xH^iO7O@)IeZf-s5?2t0?91F}zSW67V zaAGSD?=I7z2g1sJ3FxPb2Vja2W9jHNvT`~Lk1h$&wqD@TN(z#e&8}6K4-vFJ`HwDT zj{em!S?!7Hh|#3a!3&+ksZi1d=&XxJf|{F~vZIm*&4Z8PoFCC|H$Sk^ZT~j-{K<46 z9zbEI3KGlv$O-;`bqII54u}_*uI^>NzK$_g1Hcfn*6lJC5JAOlp_Jv% z`rvju%XpDU>v~FA9!W>V&vq@cD4I20rSLAHTU2_8eRd2C%}SES zie9S3S#-pJ^r8) zDcJKbkXl&bRsh1qC)w+DG(sZb?`f)=L=vs27K#^Z2dP#?PF*sR%vum9A41j1ZznMV z>C$DPZ;b+}4REy|g76sp)n8HDXx8He1wSJG;87kiN1G_7>B`0*d(=0aCwVisf@L41 zm$?GvRo?;cA=8|C6cwMe2`N7f%DQTZhm~8`fT$<6^)UrGYczwC^JN*&tG)UaWHsm7 zT{F=Kk?GQuC1}8v$;P|B)V9}-?cT}1oyQQ3Du34sB4uo9scH_tf1whuyIF3^9~+G3 zrcnDotu*crwg+gaTbLMquu!h`!Gu$*{N<$t8 zGWypWJ7m}<^Kna(nKNrYY>A`CH^KtLIbsRp1C40-F-LXZ z4pud1!tMe`+$1v{Z0zZVy>Z1bI5>hT#3YB?CyW}h;mjZjM&dp6G&e2{%87`3=;jr9GWE#KDI4Ej(t61b7qwQhuqHU}R@za?vX* z8XG~c6ibb7Ka(-0gi(uHCJrv!GX>Ub2qa9=!CyV`4!@|S3_py@`yY$GB#z=S%D%0puHySZq{m2q|?9M)2 z9zpqqb9!U>;f)uoH7*BLNM);$JpvfQ`Ga-&<2<_m6UiF-MDydOW%*1Lxii%IWf_vc z>zj~y)4s5klVAb@eB!DCS>XH+%NSxCl=KYeEhb{HZ%s3_WRkmO%}`;6U{j953c47> z#|^}jG%hG0?u)Z{RAS50{UVu;Dw9?==KYXEk@LttgmB-NOvi^$g}~4in3EawDL=85 zISUW7l_ZCu-1&>xBgnB3)>UqQn87d9Fl-*X?Ap6UQAh?C#S6cEQRU1(?MffkZbG6t zgZ^}_`4_nr;3m|){LrNF{&MCJtZR1Gj{{Ab5_PVBH;EyOj`0_`gnbuUA3j$tEATn5 zwkRK(L!>ucd!EHSB&5)m*o(fbQe_DmqM1h*hz?dOPNB%n6%~w@L1`Nt@=#U? zkVBq`I%6P>Y+;S$XWIe8(RQ_KBvAE@N0+Zc|J?o`IGGQmji6qkAu#g(wQ2l}a>#BC zu{0Ou#=Q|g$oW|tqog8ffy1YypSnS5jp61Z6Yl~b>V;vF@80YDF!-DIK|!xT$aArU z*2DIzb?VPpd62oW8+{PBB}1;n-8_sXuwAPBjy~LUm19=wsTmqE=;&wh1oz9|2O6}4 zPG5B-Jf`#$GbT)yWHGh0WnVabQfuN~^3?Cl3E3R|x^q?^@bec;*u=(pl?+h8R9O*$ zjhgr$&~HPL7r_RAeYb>$*i+yNUfB8eZSMG5#TO3Bu#mAhSYArrk@y^ z;zWbnh-2-5w0J^c-MCLH$`yh-M33}zc#*#YFR}ZOf#^q1aABm(kb*9F(jCdBLcKkc z5#ZXN`mWm>2$uH09BuQ&U_dhK!P zgeK>aoh(VJ5wX+Gl!jSH{ZqKQ828Bb#$qm}dV(#&&|OtEcvz${hE~;cMDbPP-t%q_ zB=Hw9>(UgWEP3L~}C5Y7Fer z0Y)3q<}-C85X{NlRTZvHJ%l+^yJ93a*A%ZXFQbDyE^LO(`6Z_fHXCAU_kyg*!0@*K zqnerK<;#ot9yap5S5W#?C!1n*YvK@U#PY}|hQog$eOEh0b@Eu)bDfwkQR*i7n50w0 zIpAK$a>|799qi|=j15#zTTgF9;qZVU@v1Xy&evAeo(E?W+W+dv zSYRY@k}uub`{Q8zB+sU|edl3CQb#cYq%l|C>o6GLsb!LV@bdh@8iW1{^WAyyi>jjtOMP`X*XffJ1+h|pInz>!Y}1{_0H=;&ue zX{0^P)Am%}5s-Lfoce!H^T1gCdqh5z4LD*`I4reVH8d)P0u)P+=cCVL`X?Pd3D zj!aPgr1aD9`|ibKC^Kyw4oR}yE8}FMCKJ#uTm$x5ajRC&LSR1P%R~aZJbD#W{yW1r ztwGU`?|TGJwe^ad6n%LNBPm7ekYC8?bo{E!*#9ik(}Au80LQ=VF4<{M>rEcD-Z3%f zQS?o^8%2=0CYIn;#FFJes{c`M0{=VX)+qMqzV&J4maWOh@YYf*dTMKsLMjjMeLGcZ zk1L76^lOS>`PrT@LZm{Qh%RWI@V$NV`7z)j*TQ$Ze=8aR533uxG2aGYtDWpJaHi&K z-7}qqQ1%cc1!WDoH`j2#fAc4QU3kgciIK@ssA$nqJ?u9!GU3TE?b*P`h4l+Uc?Kr0 zpvJ}RN{)M1PsCn`T?-``Nq?^-hIprnhaG{g=Tw+I5_}j^L>Qi;RUm1)+DjkSdMFbM zuXWVA0SH^s)AFZsjn5vP6uW<4BNU9?=UPmaQ`8RCq?|I$V-)T=LpmlAX4qg9M$usZ z5}8ZZj!juZTRa6Y&bBGy3c;vJHc%TBt=W`|43u(@ z{K=tTjZYWHrr+#w&xsG$n;kb%Mf+*IW6q)GX!vT%00as+&;_r#!h;Xwt~Bis8&oZa zj_>p5cW37M_tXNZMs(2w9%8r}kM*b`rzL+A^+h&RO-AWy>#8r<`f|DmU)fRkTOo0l zIJk%HQ?lWxH3|dOA<#~VUqgR{_>olOll^)P zkVHJ>e%5e&j?*i|c~`KA-fVgu*Ww{=YV>T+iHBAoh+v@r=*&OV5e74@@5qvbX<6hR zx^RscWj$e$a`r338uPvE?P592!CA?I7{X&Rw3Sc;JyyLocOz#AU%}R>5OF^dQBPL z76@n1itw+Cx6=IP5G}P|YUs{%#WK07h6Pm}i?t`+VB5XnQ7;wG0nHMr;*2UA3YQtn z_R%g>u!|7cd}uvB%MFqGV_jOPfg>tuNKcT*IwCoFS#OwW=8B6PTrRxRoB&b8iO+^z zBN)9?%Yhv%>YK6Undq$m5^J}(~%4>Rk9-}Xf;UB>VX25|%_4O}Vg+jEs$24(YFp{nvJvCtnH zCIsM6`75*i3N@=8hN2UnbVY#y5_xAcST`03W{iIDCqaNlAy1`Lh%u&k`6p zlthvMCGiyTC5L>n6SD~Et0|93su5V>AQ%Ek>K;dJ77M&%=tSs{p~ z(i8m^0R)UTuec@$q}w*C)gK@{;`F1W)H=6^EcIAPCxkto(6{@e zEHIi71Ij$Sp~)b@DwZC)QXIt5^MN`&G9V^1=wiA+&htE`K~C%fPkGW=;AuBK{OI>7Dp7hz)uexYN zDU1Rb5n1pqSd!~mts@yrY?y1Eqy$A>+l_obPo^QQV~ zs$0oDu<(`DP-nyn$g8bFg>fsT59*fgo6%S`DJrS6^`V***Upv;oBsd5J9S9GO9WYk zZ(M(#>qZ_1QUZW;PO7ugCvSFGyB_$(kh_eiDEPsDXEk;p zPU?dQy+0}Izq) zG)Bm0rKC{FaMZGKeLk9{0lvge_SugngL8mzF%G`e84gIHJ%!~;rs%BbyhN2IdV65W ztk$YILEX}i#&S;bazySMF+)$d6rR&!B%WSVLi8Aa@?UxBb${PNJO{AJgX=OL&9FC+ zpR~K5D=;Wk6uLQB{tjTWV0(gfrf(Da6FnqGSzF92c4;w?)=RC~eMmf6Z&)Ql6pT@g z1$_4$?17ZEeqzs3YzOK01StVo?dqtzidb5Z8If8ctp26MkuII20qE&ojD!e`72Lo_ z?v}T7t(I1tUKB2gC2IsJPNNwfi2F~kJ`OUXau;Q{{Z8IH6CncTGNozo&70d7gd%91 zk|&80dO<>(!_!PiXMOp%zA4|L9LQn6SDwEUGvENF#(BM`>*GOr=DU@}LB>K_K-=<; ziDcs{zSz&bJGf=IcM!oPJLVQ*%)o9KX`}P%jx1Wa%QlIG_rrjnxl^B#p!`e80f&07 zVS6x-82iE7=_H~~yc$W;6{$z4jUcs!%So%f!z!`~3iFc1d^i-*eM^Zp?#hz@P@7KT# zxZd2K+dku6u zP!y`}maM@5V}6$$!b1U{Z8|EUbbLRWn&RSXb%LzKy{K`7r++H>aOE{jdjwZE9FEB+ zEnzmZW*RbUB_umV(>kEX#nUpKpb*A@q>%_I|r{Re1!!+GWdBn=u zZ51?IMkGZVlKatSf~-NO+cOqcD`tKDw7*?c=}TdM86)r&k(C$>Y7@Tz5G^ndy@(yc zITzXQ`Mi;mo!%G-aF=O>dQh7mtG&PiGB^ruAHfccv3F!`>$e-h;$k>$NT7 zW`;T>C#qcnGJw~4fi^UZ#bVKQMb5Evvw|XR{$Is9$JvC*8PF_&`J5J?1q0c1>>Xz1AI%^f%27l@^#V!JuP*>56Aqegnp>xLTwXx7``D&d(2lGDrkb2C5(K__jyM^gE3k4^lpgQC)`7D1hy_B`Qq3C6|0>~0@n3eL4+ zg3YOn&#iMxnW6lwvkkdx{sT^&715kIUS8L2d|kXh?*DcEO?&OBfX{^O!@DK;!A3k2pAcDNyCaoTproa}dEiw7pTfTHA z%jFy=seje6Bs2!Nj$&UT-18?cNSNaukP`V%Oe@r|24cbVn1p5Nq!}Q@f?LdwTDqQ% zrbC0qvo_Wv2dQq=-%2A>{S)o0zERhhXiw7xgGtW06;QB?NSl)5M7ULZp3^`W09W@L z3M9(sKj13f+?KDomKsEQdIG+Cmfs))6R`?PrE9S>DAJOt=ElMgi<^EC;?ze=R9R&=7dM(thWkxU3u!kXtllQVMs|dEZ3HEH9L# z1;>zw!$4eYgDeo=C)$iF*{!4Pm0y#k&yE&Wl*E$tXn#g+Le*(8;fWa}T=6p2yzqHd zHHIN960m*WQr4@lvMMPs+4fyt-jbJL{S#XJl@yVQ<7L_Hutf&qP?yK$aFclZ#2q0W z`qK0lOC15v9*XNCaM<{-rMKoBjhlxmlHo~^FhZ+B$nN%Oquc|WXWfTdYCJR=Xt9PV zi;7D^$Af4T3J?b*9r>}DI}FBAryULOxDDu5kLCymxW%{=7Oz#Ch4vkwWkkik_Jy+E z)*}oQ&JR=!ScZ!bone!ap#vilu+2{(!{)qv?cD2KKcwrHtc-QM>B+0G+A7GOaYF31)qT_Y*&nieZF~;yc&P+XW@vjUXE*hr`8oRk%|nPflB% z0FC<>73hulBuqDiOnG7xD9%Wo*`1vrM09){X-3B=LXJK78>~MR9=bzsR85x}hxVt> zlIh`Y^OGs;yb?ic;~2t!`CmK;ow)S;l7P3rox~X5%%?q;l;gPieA~C7w~DRTF4|R4SU*q zb|?wJ?_{r^;~i7<+_XM+fUfP+VY9;C6&gzBPBam`enh&CD%%o0|xJ$wj?H4Eki zz3$&Kqh~%xf-*a*HK3TT8G4Uv^w26E0JRZfs?ppA_!?W|WJMT~qX2dQ!pqId;EmIx z&(+WWP>6L?;&22e*%EaccVY%&L!%R?aAZ&VI+jRk_lXohSAV&dhq#qoW*lI-&-2Z~ zpcqvOt=GDL-)R$KR)!qG?3O1v_ zg=Sz9*Fa6w8;AdWAH)svE11Yliw!1fTRBK(G)Fg|y$1T|^ zMfqrUb&ZF4_)-Dye~Ul0KS}YTQ%gmS?y2)Ct?v+-uXtSpc-;t_%oYDx>S{@$CP1Py zaC;9+9XWvHLhT<{g5dvtg{ckDEEMeww9bBNAoYLdLq%&dj-nnOQLEMTui>RRo1E%L zj#Gv*hT~e5!IseIiQ4p!u%j~;BU4J6saoudo{LYK0Oy{lURLDL+An+_;Lj3j{{CZ^ zv9URyBN2w(<`~~!Ho%2aiyKH&bwpJe7C)+t*Cu_d8FJ7 zE#zm$^XuGhCFmMjqW{7uw8Xc{w#wb}lXF9f06v1qAW^%09w{fuXwalrYkXh& zJ1w#7d-Tr_E`Hvm;z3jDp`U_T=v&WA*wU0{R|`hgUx7pkfgL83;=+1>9+yKzTu^TM`CW~CAq18X^2cIO!aj`lQ+xT(9nyhT;7#@7hFh-291!z*`#Z)#O! zh)Lzx!V3k4OE0FQ#g%QN!u@^(wvko|1;?A@g4tbYEbEzS0B3}TH#Oj}sWhh68F=_M zUnpaS54?03-2T0?D>B7#Vi)AX%TT7aT;OE!&;j{W`H9bZb`f~Q!x}r~)0a{)Nw;>R z*+grMfSGw-mxi?T`IDs5I!3P4N2KZharF*C!Z2NsZriqP+kD%$ZQHhO+qP}nwrzLc znYf$zzkTg0sv=Hio_u;NmDK&SQFm@=7=*;QgM5-GR0IC9%0OJ48?PzcYNxt6s`Udz z{p7CeXu|)-y@PF&k5WD80;?k>8Zer$F@Ijh=# zwd7A=Nc5ppf=`z$G+;Lx&Q;wOFvR!v=!scGC?OvotfEviS}f(g4KY@bksSOlPo66Y zJ+-1S_886_oe+5XIZAmzw#AI*Weg6MMwz<2Ka(N&&=|%6r%6395UcSnSQU+h6Ab~B z@MX`EaS(Bl;23nJAunHQruEYg!GM~qcMAcGGY6dGhT-c^M#40?LmF4#ivq4e$fUX{ zSO6%|u4eUQc#iYt?nf($2BMOv5kYzf8uI|XPvwf?8iR4Qc>+1(;AY|}=YH|eEBYs_ zsp%j2L}f1(JNsc*mDlK=;VFd@OiBT1!a597Meh^5^TpDy6!jCDBSo_v74T3Qy_p#7 z=$!RpuhmV>91bDB4vc1R-@}(iw~)D)HNI2LSa`%Qjv))pIL z%%cDDwUo3$YZUt>!LCNvY;nFI<6hbH^&a92@KI5g=?_7O6MA}Ea&E{xu?%Y#go>CPGhfv#rrVeDtz0< z@Dzt72F2`|v+}e~Ym4NB=E{JmbU3b&I|q)}hTLNhyf0|YKL4?$Q6V(&Q_YE89%v$9 zSNhlPLfxM8is)x1*`j{~M;dcj-F{S(Q4~;jBCG+g#A2e2JXtA#rl@&_^(#QCrf{Kc z)I>@Yl>WVmDx>bU$&sV<3xhHgB)&QKh!cQ>ka$k?#YAC|r0-rwq!<##7YUKm2~#C6kL*4? z@NWy%7sc!BK0egRDB0^zRKbP9NzKrPwjy?3tm%Z#npjjad#OY_e(q<6*I!cAIe+5 zOf>@!5{W890iN9OaAh*jh$6X;g~*&JZ&)!6Pi)3)sk7zfX$**zl0STQ`mvb0x!$O=;%;AAo8^FE=r)p%MeT}TSuGN7tW z%v?IzV1t&ia>_ZUqF?V}gwk1N%Ot`m54MBh+F)Gi2IHAz>n*kaTVTLGqm5e}z4V-K z`y;~V;=CaNP9G>Rek(rERRg-H>DOQ#yyR(_3r9bn1L$VVc6jf-d@T^8w|+Dk<;1pK zF0*csNl*_~Y3U=J>zW*rcJUa(Ea%IV@A#$BedcdgDKr7XZ$-|dW05QnxquWd#$HMK zIyBL}huG52;o829`OvzPDPfOtM9ypO{iAw_+}mO@5^c5Z!`;Vij0=Uk|DyDZD~kWq zKX8vD8bj9W6T+~pkKMm-9;t0=Wc!g%AEaKL3EieDW`+ zwSjGQTC10}WOXaG`oL9dEaLw4X5!pT{33ctTu2K9HILYiCy`GG8f8dq4@$I7emRV- z@-b4RksZj(Zn;jda%5+8vSq4Ao?Bu|cf2M??ss*s&}vo`RQI%*mj`niaXBG}egBkz z-ul#sK_~UbeoRQ$B({^81x&qFypgY(a?IJ8%6$OU&jh2s)GqN{gwbz-_F|NFm%0TB zSnW%fZXyBZP&O5Ya=z#0UI>?d%$}SW7eh2D3^=+(fl7E!$>YC+AI*mR-&tfhWCy@9xIxi-1lq|JlEn$%`#MH2InErnaN76QLj(7wr*J@>gR_BQ(1?{2H5nljA*?tqslWiW+;Q3h$d;(9_}M$L+-VnH=JqbHlEm{i!yv7&WemV z!q4c`7vABSX4HADa~*Wz6oq&*wZd62B`0xM7R-ECP}QUapFZ+u#xAZJK||6|!&sLQ z`@@~TMXlfB`oTyr@@NVf5E)w3_{8tcf6a#x+I`k+kPTLlmvb1RhKZ2UMT7fvzN~#j4pemoIvo7bwx|_GdHHPpkG>L0(w@Tk_cU~7A zWVd@Ho*~e|rkGh6-Or~&Id}g)h~3K`uaj0(+NOG5^muO8X>8pdo+xlKS-HVxlsFH z+}`$a@DdBXudJXD=r=6ZrrCvK3mYwxDvGPq6BVs;R8x_^r_hw!TA#5SclNPb42oUn zMp0F7^@nNI@6bwGKJb!-otbtpbBVMk$c<~41OKupL$2?h!vdo+)GK^ur?pJm68 z$udAEFKE{G2Hm2Pao|M8&_;iKp?%$)-j#V~nPv$DU4QK}_}B<~h346ONYwQ?s&8Qe z2~abXrNlSLus0$9<0~9Yrff`n53zM#iZG}yPPQP;UUwf4Ca#ESrUn3)0A8uHU)BF0 z$*RvKMV7J8rpQ$kfkpX8n3?YaP^ojevhTD2H(kLQ>Xdq$K7o*`B#Z}TDnk^41k=j^ z8tgdv;tH5hr;*0#=1S}S`=1F2lM2Esd98p8MjX5ttNl>Mw5mX9S@sJmq7xqL%?5Usn@^sGTS@uPL!r-3(R{~Ca4)J9HC8P-E=S6@`9KX` z>GrTUB*TkILf%10@uB)(ClsO4>1MTso2an|BZ5qe^g; zWoi+okkBQ1H5L2->=&A~44#)HgWDB&i0jyTw44!5u`~tta9khliO@#7Uyk`_VIyXg%v-<(~nB zt=-+*{T>|U;(b($ccbk=Z4l2#wV>Ck;6VJw9I=pqH~`@P%mpzCO4Fv&Y!4SRkJZyj z7@o8-(=h!0{o~);@xm73Mw^&D5IQ1N2=QRW?5!`mKRmvEy(d(A9}@z5gLRiKzdMwd zXrhMlb(o4cJXAERV<*O|GrUa4qOw5ggP}9w{L<;?4~ifq3=?ji^L2pxiT`mG1)T{n zd$*8(LezCrM&_`CKWY zo+Oo#7N|Jx*R5@R2}5#wPu2VI3P;tM?;1gkfp=~w8T;t(G2V^ZUTs&X+F?K9c*64qq5NesY)JCGXLIWa|;TO(PBA)e%Qh!N(|B2q}+ma znD;ICX>#XnlrY-zuUlvB$?~$oqk`UZn`5m)H~%>Jo!2Dqh(z!uG+dcn3ggOj7UoE& z_gq1e-l)h^-RTWF2_w$}ukj?coHUQn2QW8}RI(y!Q!vIx2`bbAKK>C$D#$~PMvx4~ zn~(o-0Qk*f>Kfa3{_qe-?NwrUXiGehCo;U!o+8hb1SYLOm@wU)yPPUFa0aC$`7TNa9_ zU`cB=Z34B5VP(ywSh*OOg}M8FRF>S1jzy?37kyRmmjsBW+A={LRi0~gPpY0|((3Ra z4xSzP2|EDgC7HzmxIh?qY~urU&-G$52orV;?QVnJxrK4-BF3#|!Us`dNk%K#cvVO# zvZ)_Fw8nmmFB^MISUJMYX!E&I$UAbg7K2nj4@4#5nXX9I;G*LSsA=60{3=Tb;wFHU zPmR5pwl`nnrFWsvMU;oJG$7Rso)D>ny@BVm>^@Bq)sD%(3bA2n7e5kGJIva9>^TA= z6E1HP4XCA1V^sy4R4BujiIr681e=({Frl39`PKjG1i7;g;vw;ArR zodr2IalTrPOn&ku(yhiD#NI12fqLD9@&v6@$CMh zH1RfaW#Ge25K;DV!j+G=R-a38%mx1c<`&_SoHBIq+G8`+JZ3Fgm~>Q}aWFHYi;N_h zsu7!ye!!OsP@?-u&vpUNA`)1NYBk!b4sRnM=|MINI-x_2{uqV@#P9+Qe;Uhh?85vMSMw;@%?c5=bH0sNpGdsCwF&qE%6Q4#qPekqTwwEcgc5 zd(MHV3>FR#QSp@t2_vJ@*2lG=q|h|TIkT?KTWx=h=((6fJf{UWy_r$W%5%Ubb@>GF zoCk!G?i3}=j$pw`GGfm;h7(E{@jf>puJTkAY$3D&LVjtx@Nbp6gNCNQ_*g?hs>Yf5 zH8Mj|44nL_*)h&iV>zU!mTC0}P94C(l@8e1R~-j^zo)8s`MC7gNK_1%ZC?CmBcx2+ zh?85Z^bO7a$#6<+Dl0l>Us-OpjLxCjTJnz-r60FzsWF+{%}N`B6ES3v!fae)|9Nk`ML?6 zUQO;xok+QO=mthCDgA#doJ@gKTAfw%ajhZB%CD#&I9u@u|p4HOb-2 z2Tie*7SRq}niGBMpvu$W(yk0D13;<`NM_s3ZP1r3*%+%~pGCAMMrKPwmitCNNG4Q| zeqW}2xWh(3=u}p+OP!Drs+h+(Toz|tjhe?)bZ;R}k&VYE`KoUiz640?lBU5jzO4PB zX+$mxT{4%VMQeyv&?j?+#nIPFsf5lUxIvJENa4UPHTFuE1^<-GJ*at3AK$JiV|5#$ zM#clb$gA!mkkQ`>efEv_tA{c;#i2>(`mk zL@i%wBPyawj0d}-Sj1_N!Cou&TFljT zJ{}m5oqf8TLe}*L1|tAD{-c#~?hR>tEJ1o)w@6)1CJ(~GZSGOi7S|)b1zGE;5H8`U zFAHX`b@#C+l<`pq&sn)r^=G%!dMJhqy?Hm9RRW-TFT zaRJRzQI@E(Pct8G6GjTjcqt&r1#NKN3M0`9yld8>58RQh?1%j7%p7POb^yQ7Cvdu- z_YCk7LW6c5Mw^jLiR#^LKNV*4qUWXRL3nC#hdV<^0s3!y;+PD2b>hW}g6wP^1c2@> z=T&;f6>~JOOK?mH*V$!rWr|3{=(&QA>32mZBSH$B{J$E3&zejWL9k{qHJ>Wy7$H~R zaU;Re5ef+Zb{it%!!Jd(?r{M@v!G5;!zvp}e9WT8VbhCv_Hyp&gVI0D*Vu^#%S*gw z2NHrjNBIr-9!iCji!uWzkgv+w`2mlhwwh9i@a9J&;UpizjfozcyuaQw8wsO61OX&G zp*e~uvALuk0D-RA2AGdj)ergQ!x25>%S$V2l57jD3Caz$UMqzkCbZvn!3oM+ep03` zrS>ajF&X@XMmDd1s-bKyiF!@BZb{)Zug;4dooAv$;Q^jOX)z_u5Sz{5rz zD;ysSPzkw`1Q?8OI1NS-oS7_2N^SSITBnDkBP!{AEL>PSh?9iXpZNv0jE#5cgg%NX zD*swAX)^ws#u{n|CrwR9JzgO9+Uy?eL>gWQPdPcMXO#(=CY)7kwfc?Ie4HrK@d|%7 z)YOU;*z7P6p+`AFE?WhIk6apQ6uanjERdC7t(>E2QXAg}xsinqW6#+@GYCWnn#dau zeZnY5h%_&wH|%y*Wtxe!JfB0S^PWq(?#hzLNf7M9*;T1M^DqLm#Bo#6d%w2hoT^wS zzxFEDMQu7w=E267hrgPQToECF!N=GGQ4JeGYs$ooa6z{GXxeX~kPxqTyxF>tSc&}I zz3EdtU`BFrzZqp6YgzhIJ?9(hq&y{>8wXe7HJL5MjyrUL-f}W#^SA2;!3B$>9=2l0 z=X%Pihfa)rhKF5-Bh-rO5$IAMOAZ{l$C?ynVMJ69o8p8%FuFJ%=f6DvPH90!apRH- zZ+}G3w?GG~baT_7Ch3O>GOw8b2Qm4)?-}V~GQ$<4-hU+O)Z@x56;Jvf9h6RKoy+7x zeCx_%xheXl0_yWvQS$kJAv}-q=5b7)7BspN1xw1vW|F0!9`RrXRu45b2ib9ypZBU< zWFdHH&QlQ5OuV1rUjW`U_c?LX;4(1qV>AZd9~)?|49P0Z{>h7(aq9*pJvZ1L7p;{$ z%K@8W(Q6JY{PQzy&=lp0zu}AF{0>a+M^O$3Q3l=j8qEDeuOC(fA1kr>)hva7pIA)7 zH-ua5sfcWT4k4=B!xGZqmQxC(8F z12Rah3W^5fI+CDzrW^X=em`gXuc6?@YJ_`nMsfl_e3@F3mhq|9S;cF@rm3<7E)QA) z!E8Zx80`~2d8O~@9gQo5{nkWc6YS@eyJJLBjaEHYK(MI*OYZJFSLsI`%wI{sbu~b? z>;OVv#`u}{UpjUQA|o4!^2ooRSiOLvDSH4-K(fD~w-ErObKamzLB>ZV94$F}u9S3O z5#Aa`arpy^n{h<$gEUj6*#Zt6L4L@*BHAxu_%g`S4Mr`PYPmA1x)%-wC(r`qTP*Px zESc;chNPizYci^0e$hh*_^phPl>Z#O5_D&vX`&UkO0ekErjDomVpH8U1^>_W&HJix z)kki=KCW#%IYKHQOmPLqg?k=i3+nB<8%Yy>VE&jOdC~{P2DphwV5Dok48rex@_atI`h`>l|)%963t+$y(KlMkIO4#2m0>2m=kI^uHwJUNPacaB1>O;`= zA$#>JrAPEGl%?8&uNN`orp|H)Cl-^47aCSVdVa` z%04BDmS7@pL(9`Z6X6&5O(}xyF79qVfA(0sVt^_JEl_E}!d`3~4#*jTE&}*lTf09! zU;l3ZXk4@yo+nt_1Dm!g%DDJ!Ubvv#ET3YQoud9&KCl>vJQ9$oPH@qwT`f|6>g2X= z0@J#aC)DC13*|u8sFbMJvaKQsiIlJ(`7%8pox@MJ!fCj|c|2vI?7NT&r_UYzT+wEk zaDeL3bU-20d7;2$T_$OKJEKXL9l}=473I5mvbfM7+QV zF4iF4JND1)jIQz$ZOjjxaphSz`=Xx5CRK^`D4?(uN9!Y|&%~n2uxnkYNV6v7r^40b z&0lRF>YY%_Qf7n(?b1mov5d@6U02 z-(3BU+LM#y9ObP-BrRPUMza7@Wl#ROnMFcb{!@tET4s1WU^+urVI2(=?E~*KGg%sZ z*xR2}0cATt$GZbhcGBH1e@CMUegL;wv(EgYp^WJs{hkiBLqVy>_w2?S$e`?amg}zS)>)pALxb>?eJ;Room-%b4Qpa}WI$;U=|u0ne$s5$HGpIBU7y_9^|v$#ePE z%;}c#t7AuezY#KxCeZ!ZP9e34JKvkT@hkiVxB+2Ou_F@_xfV zAP+Yv-m6A)B`<=q=0c-fPeT(WJUL6VIo~pRxe{LkN4=?F#cdGuGPyIC-ami)z%2J5 zCw=A&Up{>_tD}!e`=Wr0bE{w?b$zdC!(*oyqezjEXI2li(Yd7)Od<`>I%m<)B;Hc~ zWF;2ALTQAbu>+X{@3qVV8InR|`99+dJAG@`2`@C|0??h{5}A1pJqFFdB$S;^%P{VF zP6-cSowDhDQvwHhIV1{mx7_9$-@hHu<%=>mJIOM1e9XTNS#-qhq6Y zPuBLyveSTV!k3(s-+7GCtwrV{DxAsrtbZSTlIs-n4h&QPWM3>=`EK_%@S!zMMzd{u ze)c1kJ%(rJgd6*-Sc}f20;&D@hqX4KI5+kt+E2g|{Mjk=s1HgHlk_~XN-H^Im4I$t z@-}r56puAlKJiat5I^mZ)MdgjAy{SG=6TXe6P0x0dD_T~cbw ztCjc2hnxU{jiZ%+Z|-}AJ(kX8h1NCVl4j`&^i3=)gYNesJfJOq#sbjMHd|T#XvH`y1(?hhAsfcfAE_ z*5C{`4SIIuhNKi@6s2vXZ^qSYj+^jWT2A9oR-gvbLckchfG?!Jr*03=TNxo%^LC5v zwv5=?6;}qCF1vtDk6=MFFcgn2{ny@25>!4wO@%BqGrX+;tRW=GzHksecMxaWsg z^&=Yhk_XJ!pY9hTYjoCAkuwNFEGb-t`u->wxokQovs&%r7O@3x@UyZTW+x28fXoU+ zuh->3=H1%jEyNwUQ5Ia1HF+Yo+hI@dB};Zy*KpsJoFg9R!%p9gv2Vz+-yzF5{ZN(V z0}pobgz}XNK%1>bGsCUI?%>*`r9B3hTRCpme55>PPF5O@J7yBp*HlA2u9~n!FE@(= z9rW7)*ww}T5F18{rv(d*L6)|S>)4+02-AD+&AwSIU#sZgayhAe^Sq@Q#fQ@S^KsSf z{`z&6?A&6as?Q#j&*S%P1g~@OUJp|zRJ-10v2~N3<|yNMAA@CRIagjy;Y*2GE%&x1 zPtKUBk4riH){!m!sLsEDBw_e&*!X?Qb7iN`9q8n(`r}V)iWhLrn&JM$+Fg}piuT2s zaW|R`#wlasib`A)#NJPxjwEA&M?nV^^M{2;hc4eX0tqWy#&&uggyWB7M+%|_oZl8^ zLGBFxUoHxLQsZ+4vMM<+2PUo4%yEC+SZ3QXirJ7lkSM&;Rjgb@5=<`XL5hIe#HpX1 z`tO#nj~fYWI9O8W4RQf`Z9xb=Vd-)H^;5uUE;UnI4oGmyVGr zpsIJBs(}3X1q&PhX6H%PN%NGbeHwRw5pI=#CwM31NbH1;AXzlwaK9I2{m#n@Hwg{zQgYU9ekA*32rzzmDzIubg$0QD(@kBxV#z+)*8MVguL zHO|TRNvHH+To{8BQEffn)Cy!#X=UlpK*nH#V52kcDkH2}u!@RbucjUb5MXgM(ptSH zz}VO;da-H7rQSgqt|+=S0elk52~(_$z}y*x!I@o46nh|7mr-XxShbn8dA1Db77}!$zW2&wVjg{ouUA{%(cz$a$Zu+RF@&v8-t8fE2^{;fTP&4)?H zPe5YS!R4E6Xl`iu2~7fnC>9egy@R%)B!tvu^c)-pVzn~>cZ<#u zuQXKaEQ5VS6SXDraf|G&&L)g5#{>?<(b4pZ2Xk~93hd;6Vl))7ds5bb-d+q6Da2la zmfNcprRv>i2#{>cmaiPwn{%V*=bWcN7LI@35aW<0d3=_b>{rs~pK2s=60YGP}@A_N+Ze`dodZtr~_m};P86SN9mv_*yn$%}6MwXEXZ?}bY${F@Zu0yP16 zS5#cRUcn%{p;k=rcWo_}a+gq<1M}cdcKHqp1W=?z z3R*KXu0+y?jb^-ks(Jr7mRDDxQO7llvEg~bIeXhUjl@is&R z%v7Ll)^mOzUp@)@E}7-1#^mBwmD!>Mhk z!%`8e()Q=;p>XaH*25V%kQW@RlJGCct7~rRkzdR77kGI!STM%qndKu4thLEEfoepA z>|Cm&zka^csaSwk&bNBN^A&P^2eCOD@}m+0QXQlZ2Z z#ubIbp`IMF0?Ns$m2TF^w3lzoL((yKF;WD|<%Qd?-l8Q!$ssF( zwlW-PeDY<`mfS-^Fgblr8{o(1s;lq--bjHExm+%`tmfg-5%b*`88+Ju@#JEYE77sF z^_MoyWTFF0V(_XsfTuEI>AqL;w)>w8>fbB89$%HYPeiT9J_SQB9}+Ni;QE7QB!-xp zsC}0hVbCHQ(gtYSH9if7bJ+Y-TJA~XRg@fW^;ETTwFYeqYqm4ov_`CRAs7J}Xg#vh zp_y;i;fd`cDuhkgd%zcjN&HjBTcQf8}# z_|z(A&)03}pAs(BCJ9RO`qn{v3V}isd_jfpR+I9+A3;@s>nnMdDc^$T&?XAR8sj?f zSANS})?qaf#yX&B^>pAm9hkuTa`+%?ha4V^(fZ3Rj=;q%OWw=$&-5CRBVjRFp zj22aZ*TnA(t9Uc%vx6Ad9KOmZiD$Z5|!)Yr-`a%rGRy z`^|q9|BKgc)Xzp8fyX<2eSWt5i@7LzY1v~Lv4fR(o;50An^HW8Wo-D(aNJ zoYO1+)=kXkpP{Hnkp2-}PGhVZ(4Lj7?)z{tI9GKZi(AO0SxYlW>xXlRDo! z_^hRZE)TzI_MH(DdVFEXaXagIf!EPgTgwhgd&@EqTD4`|6KU#YNePcXj@EN*ectg& zda?KL*5g;0!d%}QBG2AyV>GTKsr+-ZJ7V5GqGlRbA5UlC2?KP96uF9i_QS5C&b%#0tKSrjV1oAI>E;4pmXm3m zZ9W3T#<7p|4g_sk#b4nB;(nG zfWdPwvi;7%s`Fa4H{eNa!)|BStLX?o{e`H3UN6WgJu4vzmsJ$jJbPAGOHOvI;{fKd z|4jR_CIAOFp)|{VKwPekR%_P5x5T&&n#}(6US7Gt%bmCzCokZsMva>ApryrP@V)F!i@M~ z_f2(mx8Ivb18Oqvw?}AsaG#2{vvKpA$c3!)wf5}3;K&+l-f8H7EiUfy*(MxplQpJ@ zZa)Q$rjtYm7aH-r?Y<*1VpLh)F=$ggo|rU73(M$|46o}E4chLWAc-q*%Tvvdr}FKS ziye8H_EOcWC*wd*@K`iNL;BSg0BTY9mGrbE^RTYMoj=B-2f}68*2^YF)CKS zFrMO{K)A%XhFkF)3d1A2+yPK(rFTg$0*cu3%U9=ddNL>CeKa^MQ8NdGDZx!-&F&;~ zf2Ky@7=>J-4u`O7q9$=#b@7(W&zt+TdC$wC`q)t)+{F zhdbX3V=hFelUx>q4e&cccqBv@NkNA0q*`L)QhYVw=;tIkQZ$&Tb|Vt9_Jp~Gt%=tg za1GR?zB4k}yaiHV1;--~x?!Juu#nG)m8^^{r)G(Di(bnIXW@_xjDVA%zEu1`R$C~= z;EW2-lkO5K+$f7U35c`T^Iv_(_6+|Rs@eT2u$TGGUPNu)zk()^kxy67QAFkty~BS_ zY+t2}4oe}AEo+6t;n^jDJ)V#qVEk=c4kK5CuHruB_5WtB8QDB%gzXBYFy4d6LDzh% zU4M5gpGKR1S+Wll*Q$zP+nn#Y)nL)hJ>F1dN~IrB3k09B@5S(#($iGh*7+a3pb|>y z-=8WM8axssj|5`7th}^DCh@O*AA@SXo6kKP5D5Jkaj6?Wfz%ur&|s$@>2t4nuggs^ zz_Mde)222e%L|O=u4xWLpaE^*>FM@0a?b4mG~B*P=~ZK6icTOgPP{3?f;M;x0vk2; zAt(^6Br{ zH1BX+sAwE+i0e7T9!XS$l-X9ca^EMjDg}mTu>}7RNIIGLno zs{#5k$<1VoM>HK72+JlHo6P2?0YV1%ChiwK$y>MZ(T>O~{2#tZe6XH85Mn|1Y^)|R|+7aTcxwbW5!1PAV1`89ZyE5Ipg7ov3t@;grypodNYUP))g8ZB$@j0 zjl=Jd^WCYbxOkhfCVDXBG_3^n$Rw_jg}hDBewM!{B3)olJDvb3kzZz%u$^Mcd89WRz~N zITOT5X9c1dqt~18V~{;@F}*UXjXGp$tmBpf*z1^Ii~4-!TSU3PUX1;EjDt8QO`dL-1)^vYGq7>dhkJi$z+qyzu#5WRFKni^BeoANWJ0T$0uVPMHL-&3{_PAK=#%%ii&m!71Dkx;pk~ z2N5UN-c|7{JOgoDGu-H86O0*NZLRtHlZ)Gjk!zEDBI@D-vA@cc>~1Oc8GIsz=}sL( zk{kFS6>Xg`lH=p~&tPDbOVJY>?TgJ(%J(&#+hMX3o*1@Z9smxP7jNAn3)NRMPW$eN zC(Y%>)_cK8aSK2Gb*3O|L)@UG7_toHIXb1p7hY zdpG6{-*W`7(CiJuu@+~_ig`F2F}Jj@i~%8A*B+S+t|#H_eRIRP3GnF5{xuMx7U)S1 z5e`!)wo$b$xU5JP_NdP#Ly*ewF+{v{N1!Qfnq{58j>YGVm*~-2t4jw@a0Y7;C71=~ z7ka`F56_%AVX5Uf&Zf|rqj4olQIlwavY-~D?+ZEKfv${;#I?KJAf<0*$*eqZQo56& zaokZ3xc8US;k_`^7#Q+kN%V>w%^+)#s)4);9D2lWGzxV1_7cI^T5ET7Wh&^CS3IrP zLItyr^cvu0ibpyFTx?w&aJa`dPV@G<3z^vM#hLJSau;rQiRj2lEXJi2eJ^SU5uC4% zt&a+I3Wu1wa7hV8?8EOmXd?A0NXXWZeP-OLb@YA`g0cV=CTtPjjv(M+{|-baBSH>-b6Cd%Oriu*AQU6A-3@bQnY>g3-cK+(8ZkB?AR)_P zrjM@L1?ydN8Q7!23P}6_KQYm`i&QoZpcwo(ZI)rn-yxM8`*m@2LVno=$Q(){@4_0l zb8HC%kY+-dPSkB(G`RqZM60;2(wBdK=}G6ssh{c_8olFo~9Uw#)x@>}WotB|6 zN1XT~s(GIcYSk7Y4_^PCDIXHl@3ziy?jT zA8(dmQK`?MM%+l4hJhrfwlCfb(Fo$N*IVqjTAPi##p4mETPVHgPF5RGZL7osh zWvy1@%z5n^zguE=x_RGhZV-c=uijXS1LUkkAay~+kqt(KAB_%3A@zXsx=VfF(mrFL z&Li0@JW;R^8;`o!Y!CHKv?BUNEiCX=A@(tM0gM2CJ|>=FXiKKZ%-9zCoUX-Uc!w#RGTEkUI1F2r41Eyyi`=S!|UL zqIrY&*gmeeGj}rIzleFu1_A=FEO|7*3HH0>IHOxTny%uCBB(j7;eBm9vs?iKwB*c# zsq_iV6ssVa)0gK;iGkj)q7*J|GG>^5bpP&|>}C0dZzb2@raYtv`1Gwp``1sL;QYgr zI`=}jB4#GmgRO@fw7~1X@%jZL6O+pj7XGiiExX=)v;K3C3S=8y!u(Sb*Up(vPnSorqqZ# zsfKc(aPBY^m8P&HxyCU1*Q$2t9rn-{uN$q&*+J^`z9xlF2DqlDV~`(^#bwz%OJW)= zn6j|&1j^m%^>V45z`*9p9J{kIdA@QBkH_nLK{hR+Q73EzBw@0GHlI$8xWOvPSfj>5KbODDo%_}xzx zf}6}KpTa?ZUzwlIySf8uldE4cs@5z4}lbn5x^lA!2w2p%aR;x(4E1IF3} z-!TgIK2Y`Kcpn*lw8!X!pIgSgu26Cc$5MQfZp3eg18YtJC@eCSj&Li3STP+p5#Ns# zHV(2v`&WWL=zOpnz90Wkd@_a8X;*y{0|8ArMM+G3wH!-|*Viq{^C86Zy3T%4PogvB z&7Lx*@omC1T30PL;c!BLOImr)M1MYFiQ1CV4F}xPh6*X(VIsE~gl-9cRd(dazq&qP zNsP-VPQgmJ$@BD#9R%C;h_A&U_|P=?OOb8MCxwzXohS=OA1BqtY|!$iaIXPU5=1~Y zXnKdWVt48>1G`(fg7?lWqrKHQalBXHj#_zB#PRaKLfRRbn(&O4Uk-b7*8yWY98EMA zOvdg~=CwEdecVocUi~|VluuyO?pQI(*EVj3+#?tWtj&EFohd3LQZ-IBw6jwcwY}U> zKSQGkxxa}9f`P&S5~9vLo7PV zxqYM^m#ffdUQ0J-uL-3;z{!v%&bw(v#)IVIE!s8YGn|la9S9^9v45aTPp|e6U?FAO{Lt%;M`k34{;7x*K;6@QNeNQQgI_DyvI>)*9hff7C!QT5^ zhTV-;p5{5J;olFxI`eJd#8`e8LIO<}h=rKI2R3xF{2NO3bkE}G>qh>+OHISZ>MNGH z@=suPYl7pCRPh}qr`@9n5|r`BX*h#r=5nS_dHi2aJtTEVi%(KvS0625X$~^&mpxZf zA-RzlO|W(#tb((5NcA4ZZjl&vpoaxDYd;05_>L_TPg|D`gwzu2H30`d2NQ~UxD(Ga zA!UrjF0N|qPol=3ugptlgeuGX1&=_7yB{G7*n8d{bW3Ec7@-E|-18$>@$V_ruHqu_ z%TF;ENXFeR2;sJNDfQgEmhb=|?`gc?A@!&b>*NL|i4dz-LIQbRt$*%pXuQvI39rP| zPU#>)JTO1`TRHgdxE<$CFzEwc$?p1+R9W?Dflj*TK!Iw2cw$bs~TfqjGZ-FpX9}nHtn{_R^ z$#?&&<16Ay3~bq4m)Ps<|pkh3~*AJ8!x{;@Y2pL97;<;$C1h{Dl% zJP9zG#M#5gU1MhEwMIWmV49+#>3UiK3%mhej83AP~YMM zH!xb*+Punt9}^I=@*WQ$Jm>5?;_7l-@{>!k9cUMmjpYsjpfQdf?ms42(4#0YoSH`^ zi$%<7gh}fl@JNl4edF^;x@(Ng*N-J>w-f9P!8s$YNq(XB|E5xq?-R2Bq|O0dTW~~a z^~vdWBx|GL*erD*&2;r$3W3wFSm7f+TGjJl(BFpO?oUv`RH7eP}(}RoB;NF znA8R+rM%*p{2Ma8Y;Gb``CKF%zL4&Wr+{duIX#FPBgm%&8?WEY zjVQF&;sBRfFg#uMvZsK0$u&Plhu1W{{ItSz$)bpW`_So*1=bSHt@>P3o?4e9{}-8G z%lig!3`3XI@)XEh0!t~Ul+7(4V?FzAvBsnqHVL+NN&(c~ zeYljDMTg9)=)54;Qb9`Jeo9Uut%d+D__~qwO$+6B_`-4OCPb&}mL44Jh`MIaNML(L z75nnq`SpX#+rJ#}3Y)a)zzo;o8!Zi{#l;QFbOFOubg_ea=y6Y4gFgcI2l$#uQ9Bj= zdo(bA@zdZSR0r-ai+7`67>7`zpYi?AvDZl(nl`5+HL{?N-%2cQx5C> z1?Zq9h|d^V9{XRlBOlEaLN}Z4P+8555NA*)2d6R@HVA~q6~7vt)?mYo0lr<>nc*2r zZk(o6YkFNs>0{dW)0jKy<@FGxZW-!+5CjpR;)H*+zDH+Ljd~eswATqsn?ZW$k0BW^ z=U&>2N)FhmP+a3Gk%JWrwU36vs&|H3p$=Q)iW9i+ps*fw_Wg`939q zs9NR3)X9`h9(aS;z+f9{G6wN2A18WKgc~o@5#aD)&KS7e3(@?9nUeQ5@-C0V--2({0>X&;t{vgq{PhyghVC&VZJ;rO>;6wTM9_reCSNn0Gu-A zFsBFIZf%^r+TWAj3zSeFjntaGsHYO+7S%|R_3-`-Mqg~G7%RNUt4oof7m*BhBqg(O z`KPX}-2Xqtryc@nt;%2SlA=_`wF27i7_^6DiL{C_%l|L}C<;I%^^$)Cf_yW~Scd*S zBkTG>h_2$xZAW;9px~lJDakUQR{?9(08uR7Cq(LugW%!tbJS9B;U`QKwyobmt&3hY z$>Dg8^VtOlvkLEG@kA;$$Ia0AC=rFwFTpB_ySMrY)S!}mXW2tK1<+nQJF*83m(GAi znnKlt@EiJ;jLMNXE!5|U+Sp~=VeGW45qBvLn`1-n|!Kp zHzRm2yCm&y^Eqqa>$Z5@>58LW${*E=DhWs#jswXX+AF?zfP;NKm(kqWyKuJ$F7zjX zc^L~wnC30$^*}uA?%lRi)R$k?Zb9`#(`D15hun=c~TQ^ulJ^MQ+$}WH5J29(LKTezw!dT`yPh_M{N+S4!8(o z0gk12ut9*mIUnukP7si8H>m}d+so0d-|PtHduiNxrdQ5%?Qj37}Y&a4n9U>Q~ps5eeefN1r{GxMGY#LiO>n~so#yZ zhq;rQ%(sZoz`5NQi2VEu%ksG4lSJg(wqzt7%fHai=oNq6CxfQ;9g(qY&1L2!EXJE9 z&x+Dc?}xkzmMeZ*GCAuDb9w==J#_CTyEcPx|X z$%)QWE=@@3pWe}%pY(emL88(b!l*>%i1*P&jB5NQz|oDQF)gI#?gnw3xfPv$eh`KR zaI^KA-ZSb!ppDf^p8jBY?2{xpO0X_badH^(rEvhly$f75mn}Etk#=Idg7&xXgEGlx zU7ITS_*PYMh9U@VR6)=BEduf29^FbT+d1=+=Y&=ZH`E*h3eGNX0BjSkI%Pn5ivbiS^na6RHa&4*U2Jy^;V>=>4nx?WA zK#>tKUgmu{)=Twv+ljs{yo9Bl{TLQ;X3Pk$)TOURhq1u79X2o{LMbTB`?r=b4O`~Z zGCy`a1oRKTY>bPnaEQr6Rsju2f|D;<`BqLVhUQzz z70!bMYEV0&{Qb!_C;Z9!608#8U;PCwhLdeXV4B*&og;0&6=r7}t`Vl_Uh|Csg(4`k zk>}C>%$|cy|LhTb+|_=23R@u)S1+UpEw$-5`9hd_7j$Q3-|R56bQ15UTNp0L{>it69b1Yfa8tSn1y_(2Bq=C4fJnn~Y> z5s4#XfYe(Gc9)=}jIw6+9K32mLPt!$r*)671hL3r%sd~iLx9I{^ZqlRy;}|gRZ&I( zcd5ETHZZmhQ675CYqS1Z7Dw(gXxcCC#y|2#w$b+Hudh#?xe2Fjl0!xB84!s=Y!6y|`%Ji%D6HUL-%Fz_WMur0&^oqpGBu4+ zzEI9H#d#6cE_Pjx)bAXXtJAzIQ*`+ZTI|XrZhUP&(H>1uiQd3=xBl6VvHXii@sd=m zP&sK5b4#P%8kTK&hY6Z*CvN7g28*1YL367h5NKo#4>tM0sL1 zO(EPS4DUquBt+s5*xkBYNbX(AIfGEC@queMJm*EE4rEJ}l|O=KGvLR~d^8C(1XgA+ z0E}%Vc@(Ze#v{l}Zr!_~31iCu77VvyMn;|;IjNpeH1o<%Sh$DD_RgbK2xo{BRW+wR z@l&>~r%f17Kg2HDq#kEUl<*0(c6P4yjykvs;xn?I&QFPIssw{A#ZG?gSL0&jO#g|E zNU$R1dRrn#pI8u+kbHCevHUxjIc0FQ)#6;ywn7#$sRww%mn+NuSGym$LBpZoXO92l zH}%%Luvg22%wG2SG6>NAa30#Vmc?|=Ka|o4>>R-yGJiCqcUK!GmUP7q9EtcXNz&L? zyW^pPA06<{X3(>eY<>hzY2Bc7EUohS3{oOxMImQE4pVB#T?h5UXa>!4ep|X;^aKX> z8pU7&Wyb43h_}k-+fqcSIA%+-g(Lg9Ux2UXdBc$tn#ECxT9xXcv`|;qH2xDgOjF*j z0UU5XfL^ItL5^r((P_d%h8-@LS{(x`?(9Xz(fzP{e+4GARdHE78v$@yC}fh+CEh z;*l-Y_i%~MJNA@6<6^?fYg%~K?`TU3yaw`-gE!-?j4ZH|mNx8R%pt9F#{{f)o(gRM zvgA6T0nElO1Qe@DV9uZ|K-aO40zzI?GQaM5imZ4>QFil5{2RQ3J)u;D?jUnIM=(0Y>m*3~3%UoMIOf> zh3Db(`ut!A@md5Er!k?(5hKrnX6SlDq&8^I;N2+R-2nUoU~^pA_!wtr>IAwkA<47% z>NBJIXYtLEi|cd(?l-19kYvvnrU-d9o|z=zp>biuXqB4!*ZFE8<}AF~qtgn|@X;+R zvhy=#CD9=+Dt!SAFaK!cwLUmuUIId`_9UV3JK6!1Eu!rt0;PAFP6=blydAYEo7%!t zVIjBtQUkd??63V)?@&`?1?f(;S0&8c0Hy!n^@XU#H^?Oye=h5e#w*9ea}jADp3)KbMHKLZgvL1b;|29 zcS=yuh0V5d`{Fafz4qjUZh&*3Rr*O>mf;q;v`9MxSG|dEpNOEF;aYM35Fe9BccmP> z-efO-Ox?4zx7E65xk=SevCohVS>LTBOv}ac{h{5UAm-MRT6e(jl_ql{pYae>Q(blB zHKE@{-S<;&qNxH?p6%EHrUGx(HwNn95l7&DS@jF4jhve<5CTFoC6#|xzeekd&~`93 zT;J1=V2!O%i{fS}cazyA?t>5}$vCx}gCz0`UNP(UX~T1OFSF zKF>#?4!XXG%{WIe^xrPp-Bz1{Quv+67E0IyF}hb&$xc!QLF}w$ZG1Fz2A|vf-ybNK zCi_1X=(tKQNHwPn+BbUq#X|4Y?I#9`O_`dQj|~*-eitb;Fv_Qi@tY={yf3W3jGzOfl?pCMRJ~AkxR8%Z zytpN^)N4K6PW78x-Ji}<+RYBq-OAnvMPN4P$Hz9w;>u`j9&&$^y}US z)82P)-A{sZKR3vO%Pt+@XhnYD&VTPsm4bI33BEkKDjrO)zuCD%cn_|mdQ$qmku@<> zzUDODKUh-8H}m3lLf@SC!n{nLFtrj3san^)0XjcDSEB5i$6_$du@RC% z_WUa1Qy%TQatOJ+fZWxeW)_U%6QQbe+d)MoMCi8O&eNPE zvm)e;(O7!pvO-otUyD7t3hv6p2NRn9^w*}+uzA{f>6kGyMZwBWvgEW!X+>8Up>x5* zHB ze?<=Z9?E#Sxf^7boe1T}q+bM`__GL6iEWxLcnD)AkooWDJ7N5~OzFl-Dw*7c9=RW0 zvF9Crj(TrjcfWzhtB8V(g0PC>qlMf#MJiC}=A*_uq%pn(n)TuSP~}CR)Qt9)uQ7qMAAD9Al^R9 z7Hk}m@!hPpo6mC|pP9eGl@Tn~czS9fdA-)v8c`Q@W1p3U@fsF$VV}aa_T~sQFEB>- z$-hgJ2@QSazh8+md4xP78%XsSaZh# zb^ATUhLlcU5vg7XXoUXgiiCQq*#+j;mFd=~vMPh2*dcDy#WsC0$ObB!9+PMg^;0Kz za(vtlv4iDAh zl78NB;$@SByqqymh;jQN)*_7dP&T0jQSZR52xcQkyCv=4=-NQ+KkVNu(ZPZ7; zdHet)Lk{{Z^WM56RVT;{?l{&q{QE@swR}lus>%HJ_YkVzqRKI^q9T#yn56R;rdo2R z85yi6${0$g$?5dhKbWVFue#L_;Cfz57#wvP2im%#S&VM3UqWE=PY;p%)t=8)EtAr% zNP9bod9-ywF-W_?&yAP8f9Zs!T7o?30W(*~IPe&lpwbh)QAozS6%E^SqxJ37lLpTHGfL)(|=u3yGah=94-o}l;OF>OYJuW#6tB;`@(YodeLMcQMfu%)cxM|qL zbigYh=vu|v1WeZ4%5aPYqUU0q#sjYz>6Yjrxkb{!$A@NDR5MP2aUyC{*x-=-Vi1i@ZFu*Vt#E5+Iwh z{2m?&Ita?^EviDAepMJ%n{?b;cJvQby%<|>#o->Mhe42;kvHuZ>Itb;`{BW1}N;9wqt#(nD}u z`f&-^_*A^;t!P1Nj1-c2@3(GX2QBs`H%%}I z6?I}fJ>$F>UuJRD^>i7BR0Hy}C`~fX1SyTE${S~#3j{?S|IO(M%T&~}(%w=lS&OTR zKhpz_Vp9(W$%q4tsvoyC+NzMwbjG0_!aD<F~_iZQ85R0AvH zlH*UFVkO!?*dR)jZ)zywz>xl1vob;%4cTvl0Ugr9FB|nI=&MO@Fs$QeQLKUs zPCE0-KJ~Ci5Z1#~R8qE#z-{*kyrW!$h_*Pzxl}M`kHP8Cz3~^eb(Ho}0sL{+1pXC> zzb04yRJFRdb0H8eOnc%nU$=E%GHfDiM9v#IUT0sVjCt8DMj=4b(Jf^h^?WBq)=~44 z9Gp1uyxVG0&<{aX0c+?ey`cnSz)g-D%~5vVBjJ4Eo-8W3viUEh`kSSE&67Zjr6%FW zbUtv-=kN%U=-7Cr`Gl?z(ED8vfQI?QTYxD~cgp$!-hwpwG2 zWIQ&CP%2DS|4bR(lyo-R77^lXj96;4Y=ZQ=9sK8cg3GmDF21{~4y?v<<8d8TBGJUN zTVN1lxf>vyb8_3=oXFwSnU-JY8Zw5kB|?17!w%v^FSet~cc z5`2OJK^g4$_pz1mh`@w_w=(p>BUBNMrF6<;LV4fLK?J+50fWL~N^$@?+$1J8P|oI9CI&P|WaB zGI*p5W2%#Wk$FL}$m$K_IeoOtlNd^_S)A3bC4Cd9d+oW9|Jxs}T0&005T)BSVR*wx z$j(NlquZF;-Hf_x6zN246auYUb-0pD`mR>-e!N9{$+iul(GT2RS|NW$Z71+ni$6#( zNk#CmXLj9)V0{+_#9c=TdR-5u&g#g#OqIouGmjTb#z6ihN>T-CVjK!-U`lj#{Ki10 z^5c6swI=@$dEQ@TJVxlpQPTvgy4&sJE>87BSadC>Pv&OlGeVQ%N&odsXf!)i=ZXuq z45Q3~0(Q75`v)F9h5Q%4Ej^{aFk9>A@bfg=Lw-s@lOk}>F$YP|8#avoGVqN)%fO>F z?hE+6hEFo0D%vO}Lpo1FfOAYE86S|49x?0iOvITNOQ;x35!hq8@c43Yy0?u5rYu7k zy6^r!-n_VB^q^n1S-U%xF2A;XA}j~U3qX_x0qgHjx15Nc2Q;z$H>AMO1ev&*)Dsk? z{8&gD85VfN9rgJkvoARP3BJ~A^zJM9t+UU%(u}KN6-}mQ@Ac(>>$%z*XzVzhHVIM% zu%M<0fDsE#Wc}y3E&e)Z`v-vu!s+ukzOo0NNl@pPRpoOab&TK

3N1>PDoU-7qM zgEhSAxwdU#QD`Fa>4l8=LJAEn0=qL~+P zUNjqos?OywKABv<$;J0*^|T0+gl+xXh?Bi~(i65ebv(M2E_Psb65~UTCqAD**+Qz$ zF+0!Zj@p-*%y(lT)?;cJT}{JcWfK(Fbr_G@-){tK*qT?}hqs|78ShaeR`ZO5)O5ML z!?|y{cbiL1{OSaWt)bUusVs^=h7UqCAP9zSI;9f{>0RV*vq;z;Z7h3M#%&T6#(r8# zF#lqUSazvYjTv=bhxGo?JL_Gl{jvT(x)HoBxcg&uIyyFcFk03RVpdVW0yY2f7++ zSH7UHaX&b;dz=YS5~*KuEKsYoOWtFGAgGmId|yiBpp=tqe~F_hw6B$l03RUaSu84s zU0*6)FsyE!h>rbRtry=p=|=0LkAif$@gbo|Qm?A?z`j~XHi>}@(*7*a90dO5mY%#D z7F6nFAs?_$^SjgkSY!OdxP!V^dAwqa7|DK-YV0dAyQf~%wL$G;B=&H@-0lybM3pOD zCPGE6kRw`7IwpNN+0#C4_RA-TGodpO_`0edfXh`%kF8Ol_`td)W&Me-`b1Zm2Zk-l z(cXUPRm}|nj1(A|V3}1LFPX6)xsI1ez>+UuRGJ@7XY6vw1XkYdR!m>Mj9H&FLDM{Z zk#vQwL?u6`-s6}&?v5&^un)T|fms6HgK4Fe<#^LXu}|3s$Lah?G!P#RKFFyiNj`@_ zzcbaJ()D87y$dFr)Nc;t(U&bKsx}waGnC33d>0X{EZPC3y`k$p@z=L{7FCC#85K33PQ0Ar<}1v*E37zrXhA0ESJXtQfqJUF|TZ?=%k?U z8lRDsa0@qzY2nGYN@LnD9nbD?0g%dQInTFzwqLwNc2a?)`Ff4SimW}OT|oR-XNpr_ z2T6N|)5iZo_?1MOpNG2Tov_|tF8qBY2rI4bz(plc8q6rO=<~ttN^O^HGMkQ6`F9_* z42WM>)!!vus|n-`^;dj!W33n+>(t}!E*ZO!r33gzP!xdT)?q0w5?#&E6D6A?ZbR4Q zji~1G{8J9kid*(udnO39sznB~tnFr&i19C=YQ~ih#BD<8!k62F>(c}RMNA0682B>Q zc{RtkeiI0#XqQC!*gg=sagT_VpHyqhuUPq@#ZNO+@7`uKO$30f#Nm;sCob$-*#FK{ zCK+ssRwn%=Tn(Hs7NEn&2yM3~w>0N^*yA1z{PGm-iilslFwXlIj&WvTwhvc|ja()2 zdL^70A*M_;;-FrU{z@vtA`b>XixVA>RHJZFuRcow$OJIDgPMU6BkLdV2(nC*X9k$Z zLyNsuvh)p^T$GuAK{Gta%QDqVf0oF>${SgxV<45s4t>cOpnf}*r=M};w`vlK|* zTrs*{gR#JZzOv75YLp%Kay&kW6>QLKH=$BKxN6?>z*UzaVL}vEIhTEC%u4B3mfUJP z2xxELEFO5v7~Sym=lDHR2jE10wa0H$)IwQhThJx(|FyHZ8@P-u_q_e?u$(I8z? z&DJ#AB++Upf@Bkiw}uRF%}7*$hea8^6`OB`;^rpfMhhJhpvp#u!9=ZnEMxYk7a@cs z!KxgM5!LdPLdxD!h_z>wyP2Vvv?r~dT5OP%B%zsZ;F>?-681=XaDk_7Fn8ubAZwj!Ib+%!ju*;@US5;wnR%@LcmnhD5)?t1B+^sP2DFt{+&s) zFAj2T)X{qDhiXP&5E6VT?hIFnKNyMR-n~uFdRf*5@=YU>XH9)jku?UaDgA{n0=2Sp zpWMCd`8G2`7IeCPTL{_px2Mf0hFFpzcv78|<)&KBHV{G;LW@FPGfibn5fZ{CPxXAY zs5{-Q++D!`1t~ZtEsqf%*$_%XSSWW*uWL6LSDPnTI-L#2L23RtxEQA(OC!nbR1)Y` z@#_M@BU-lX)q36SOFTEqWpR@x{j(?zf}BdYQQveb6PUl&eJN$O!aG_-jq`xZC+{+X8-&N*HGiy6unPkp)j+%?zoSWHww zuSCXdKGI=@_b)om9T51*bA(Z$YFUOjq`$WYFiB{X`BFL|fH>|9`s|phLbk$FS(R(i zbNAAj10{8UfI+me_u}l4iScrh^*HgLV1=o-aH=kB-EVi>R4qsS#{@cVESs0#U5IkV z$Fry(`cSQ7l)EKjp_&lZ+j7b4=dpDr6ImKWUVC%B?m$X^w2Hltp=i6-6AatU79|LUtCM?cM8f+@$(-Qbp{zm?cAJjWZb`l# z^@o*~S-=W4WD~oS%xu9Zo}Vljj0Eua??iirgpZP}Wr!3+l8c=jaa85(@$lbRwqx>_ z10T&av>@IN)Z+AY=vQ)kB>HXi9Q+YQ8$$GHWIN!CQnX?LX^EsshJSHOhh~2id2R8w zJAL8uZ~U-#bVTRNn2N4Z95Eu=WJUnS?EhnLc+-j;(ejn%U%m95rq8ja`|35m_XNTc zJP2=VkgN*T*oUk7T>cb^WN$ltCszY)bgCQ=`V)(^qdv_C`cXcRPyflXV+#&C+F`h$ z=1;mPhyyAy-(hF2@@nU%+!?pSd#o3z9oK}xH@?j`+^JDshTRxm+?W-pxnT;cSviu2 z$E&Lm3zof%_+=P(IOYQH;JD{zq}h6S7txtB<*9=?riVAK*#Qo?BW*|~CTaZvR-!l9 zct&%i&v7W+Q@t@AD=RjI$!0D95i(e_U^uQ`J0nr617muAEEaO|hM@k7{x{0np>8=I zj45iy4a4seip<`8%;wN&7+S3{@1gik5hHH+Q58A(n!CQC4g$JhBcI7}dCxm%+MqkQ}S63kG2H zJ7DJAqY<1QQd{AzG`+0M{qFj&O7 zS+-l)3d`d;`mf20dUkgS`d-()<3%mnqkhr=e5}Hwv^4f{Y1_M<+(kbL^|0e#IK)E! z%j$5_4EQHx-sSEy`Dkrgf!!#zgVDXERmpNM#95QA)WAeaS-1fFjuFj>O#Ax=etl|+ zWw72>SbF@<3L00$8>CeZQjcxrn=)uX)BBCrRBfa0;BjD)7!Nj^6L@!t0K0Ms2WM2jl$7WgN-uF(d*!Yf&u6x+X+Hn4z|7iMK_EW! z71EP;3LK%aEn9guGaeB`Rp-?5=dgVn!4Q8pv9Muwpq7{8Dai!8NiUrK6vqZ0^;3`1 zYvW#A9zAgb}d4v|KPx>FwoZ4fa?L@(2#nyQVMixx9E z-;k~Q)_7p*x8Af4NVH&;Cjp}Pr}TiLJq>~CEbDvH~- z3@GD4xJJg3E)#BDlCj9mB+jW2&s?br@geI&3m5l9GK?>Ba$2$Yl^3dn$jjLb*44aX zCF?H@FN)1*()rd7Ktj8o>tl-R;&-@G?;@V24B;9Raa^thssH9#Mbt?QUQo9ZJ3~|| zr+M(`=s>lT1`ddK2dwW_ET%Ad5*F`u5WFZ;F;1nr=~b7oXQJwtL+(zGc9O*>o3-nt-Pq zDs|AQD1OY_FD4W{)dal_h6trL_w`28;(wS{*=P+`W;TP4UAHXj@nMf+I!V+k5nr4! z^S1uw1l#YUG%%+4&8QcIMXxR%KdvU@M4d(|FYzak$Aaq+u-l?E%tiTt-_*kJ{ikBC z|Lk{wpB!sx>f9$2j((ffCiIB;SAfQODUFV>n*-S=fF*IatkFYGN%Ei*9;+{C8OI1m4o zi?w8tIp?4ZwctDVQK1OLN*!EY5#c}&mbgLZ@IjF9Tqj-=$Nh7y^eL_%@7W2x&Hk=S zdF#&^+Bk|8yQeNfBQ22`N$VnkDv(9dyaN|h7V(7H#84hO!b8O5`lCs)KmB!cpDKoS zRBhj=${b%?xJJC5{2UW6!MP>Q#RX=K3^#;SkJC{X`gj}qcB%3m4WhCA5=%t@p;UVI z041=pimLq=N)|oGcoCLn%p0jaa^rOIiBbeJwh zI_QBMsesBG?-6>_JB#lxn^5c_x5{O$a}j zQgF7cux3%a#y`WUFSf$&&w?D&uKG5`=)e6m_~54)NHVAmp9az~xgC`^X~7bmd}!z~ znEw`ntFhoAp2-DplRM`c3}dsXyeo`Nf^A}xdV51y-76t=<1*y?K! z*VWWI;rtc73%F($_L}t;}Vw(Vg zxpNVyDP48R;+y)>3-Vm{hW-ZO-!tnW%Rjw$j4n3i7T2?O2$p;UF7br-yoS`o%hff_ zn{8U#aXP8gj2&vfI<~!0Pc4qV;msMdd-;GEK(?0iAA{hY#;YB@vg32D==WjhyVtOp zm&aYo%!X4^91EnuJfWLAJo=(?y>g&5)-{@s(ixj=K^YxI?51=pHC@-X3TWJFnNB7q zngaW9ML$Op(ewWD=?k`9?#?zY@RxYwAkFMq)SflS)k&&HSg=XzF8!E%R;Mvmhx59W zad~K8bO{VEfGHi}aX#9};(k814?xg4VJ?S$hRpJV-#a89ARbCDBjC~NqMTL9vXLRS z>Ga@HAoEMw5c_utB@Zs}oUv1o<9i^$BhiEjc6VKE-1k^e_NcHhhj4zO>rlTtfNvX( zy$dMI#NJ=wtZH}Oda!i@&Tj=@7G^4Bv8Ve|mAxCN1OyBnjx0~G_~9~2msJLDU7=ltzp ztTPx5Kf#JpdgtQS2m)EMAZ9b}5;9Nen-DJLT0|(5*EebivXmU1WSEBWNlp}Oq_pd7 z-sXYAY@~;NWB#R2R*QeVs>G4TwCDwYY*!3`(p^PM=AoWE@~zOJK(C@B-=I~!?G;f9 zeLLP@PA+dq0%>|n!TdBPpWZPoCwub{?%!R($8u;p=}@>{@>cev84wnNsavm|sm}ms z^ao-r+zhOOTRCqHTld$`9<*J#octRbUy$Rdk@r@DPzH?Ok(h=g zhPmRf8)BGP;o~eq*y)alT%@?MU!o_u{P}B!QBlN0m0L&Gw z$yHwF7Z`zL9{Q_nzSVUQNtAAPI%U1|{iANrD5(Mad<;G~WS{z~oV0(B&1FARR?>;%-Y z+DBmJi^kz4iD4O%D9W^|O!>xpO3R>+iWVVt+?^f^iELi`MejSK?nyH^i|ax;oy?s; zCZ>J~tN;LpjAM0>3#?n8bMb#F} zX{0A_fAD`LnCW6pzlE<5)x=FPtFrVY?Hv;O&x|CaL#Md2W8(rzd27KCk$~#?v?LH- zC9zLw_HZ=Pdsa23UwB18==>wlLT}Q(V(+ZaCl*LB#D4YQ0{g~;A6Exgk1793j4&Sb z=~I0Uv2wwN@pah&rvZNW2Gtptbc8mxF>-WrFxI#J4`pj$0nNd{M94t+ABu+u8ld8C zXG{nXv$b&&F?KX`Ft>BEb%6dKUQXZoCr3n4UQ|qrM%mWc!O&P)-^NkF!InWg}!{U}VyP1_(MD8rwJ#vNJG41BCVM zB#g~X&726?Sbo_52>nkU9U~_zG(gfx-^$!j(8kotn2-S)pzLI9twzYm`XfT)e=D(Y zvi-DSrthF^>_kWj5CjMTgaIM|QGggg93TOZ1jqnn0dfF&fC4}XpbSs}r~=dg>HrOZ zKEMEA2r#s@vb6yi0gM6v(+7YFz(m&xU}FAryBGsZeg+9J1(*STP@Bw*Z2;x~OMn%? z8ejvkF}E=W*aB>SQaga1zJsxim9dG_e<_Fmj0Rw5>|kzd1hBJmb_Cc1?450$ejfZM z!vWw3a5Q%LY0lBy4d4WDGIKCC1~|Fe0-OOZ09Sw;z#ZU0_1{SpGyfSl2Lt1eew3j3 z`2L^9nEyYG$r#(1I+^|asbT+_m;W+Mgv_iQoIlg~U-qZ;|0M~T*_b&v3IB8bh%mSM z>D7<6t@NFYMT`w?jg0>z<$srl+nQI4VVuom1M6DLrO#T6wPCaM|9~>6|0mU`eC_hQ z=6K%d>c$kP{&;~-0HpK9YFK;i#gYEB`xeIA20Roq#gOapo%=nHpGO&0eNK492=k>ei zw?a`5{T|&hIXkd2w}r_2PNwl(Numh;ivp^ zs@y2b6gbk{%3z+R(y6|q^22>kx&C+-LkZo6W_%( z+2Q$#qu={4t{Qzab5o*&^L?njFFnIM+idgSYYrjbQN5sflM>S-BM%5Sx!1mG9p9>Q ztAnFkYbu*_2Lx!}x>&)%m%Kn*PE}c1KwN5KL%v4?eZYDKMn(^x-*?eE*;z7|+F#y4 z-=~MZR?OqRNsO$I46Grm8qMrSQ1xRYQ%>f+69n1li)Iuc7>4!)r}(WAc7N-NmLS>Y zeisv_gt#~4N&BHqc@EK&x!!xE-mYFvpz<;$NJ5eYM(lM;1Ojc zQYDutgF#Nav9=C7uM8JPaA+QB>Y;vtncyV=sXRMSs|yil2Ohw>qv4Au_zHcn>fQC8 zW%Be^4XEGy&MYtI{HA7y%18cdLhG>GMhrdsPbdg(6^Rs_|Q^qfn@8b^f`b9zE z-`ne*g4aM{*`-*|!=%X3#pihgVcwbbJ1wywbM^h@#wQ_^s??=T%Y@fvRiP+)S4q`q zCk4jSs3Tu3SRLH{mkS&#N1=>4)ne8ci43#MGQ9^a0+J@Rb8AHf%Ym|UO)J?8(VG(Y z=hfXy4$21xrOHCY0B-yyiR{B4d^GI_*AZM4lwz)g;XdzL+OM-%WgQ*H9+!4`a|)RA zc3_ZHty@Hw;y3>@Zj5u6{4=5|(r%0}@p2G;g*a147IwXeo|oRD)=+hO6SD5UQT2Gd zQAftQe*Um0UhLm<_={4Cddw~fyIK~y;>h3dAM9Xc?NG@d9SBQG?=jvdezu#|PM%{b z9UNq6xhqZPq<;brC46kv&S+vU;~-O?e*^jC0dt&pmsq zvL&-l)o-FU!ZAk|t$KjU>x~c8%o27tiX+TOw*2T##Gb1Mx6CrS7XZ0A9HHmVKgvu@S zwm+u#3`11wbzg|$Ssk>wM#R92GY>_ikV5^k=;B}6^SE1>f9Gn7BJ9e2XSe7X-v%Zf zv7(U*EU>>Fc^Vb5Tlq{S@p0C@x&Z1~`)rMD4S%Qcg@ZFYD02~EPH?oD|1A%Vd-NBI z3*s}HlxtcPD+?4Axj$8lcZ-*%^G7MS<1KFMh0p-?RrH+w(n5}LMR7V*m*3qO7?)l8 ztQm`_n*qS;ROF(qZj02eHg!B-ueK z_v>~QVnbPtafHf*$;K$KxyxOkG$zUW&hJ4oUh9MBuu5H>KR4T&$x z9|mRLQ&cMw-(%{3Wo3IHDJ5BdlopOSzGVD;F~sYdyOW{D)vInz@XRnc=E&_#Er;l` zyQ7?x4_G^PzE$>VNQ3Mn6|9!NXZi_D#$GjDy;NR1CK)P#n~`t_O-p+8sgOf+y*mch znWk4Ytzx9{r<@z0O?ow|M!xYu0T7NpJplo+3d!E?>vT0>Qq@ngl_4O|=8v^Cn44X(r^_?B!gL_5e_lBm; zEI<4=0aFewd^mWfC3zXpsK$mqwAZ zc)oTD+c`TFFRGS#2ZIc7YmEqX!PC!n{Naxl^0>=1PR7Pnu}K_lctCy;7I-&FYiE?#uXyAe2MxFULs1SwXBl(XKkB4zDasmkT2jvygZh^7by^c;dIyGm5*?`5< zl?o}tCpGO3dPo-H=J-b00>_Fu@R#?WovewptRGST@DB=eg!KE07P$i?c0ZN4W!Of; z)#qPIk%B&OS-IfJgZ1VWP?+CiJ5!JMgP_K(J|0<+m${ki|0$jdTl<>MGW|B zXtu<;u6$d2d?O>_Z>d~-Qx1?H!8MU*6w5QQoRt~aNK(V><4}4e#V)XqfuRUiohka| zJuXj0u1cu^xAdC*a0|fBae^3}(L-Z=dL9&d9^vsq`xo6h67Ot08zm?>^jwM_67~FN zzu(h=QD6Cs3#Mc%X}X$1yY;n3!9DKn367E~kznARGO){~63j76% zmc-z#Sc%MUnSQy*)ZPAZ_%rFrGS?>pZ6>6upr`*zQFzs5UgKM6MheM)q0-meDZ^*#oUSnM}C3U{th3cx4TVPd8~}sQI$u5bkSBCdgrDJONfdOMI^N9 z!-sKbXoRG};P7pwxK)Xt*8WZgBNLo0;S8xq5)gFo#wF{*lC@PCJwsA6HW&riK9mFo zUM3YVPrIndNcqT^Aej92W|^qxgyGze9$wo`Hf=aFn@3Vd4M`0EzNN`V6U(>f-r@0W zA1$D5gqR~>ou^60wr#8dx+C>D#K_Tt>SONbWs($k+Yvn{_M#v#^Ceno-WQN29puS$ zl9e0^Yz3#B+Lkk#D0fs}f2$PhsH3!ZDX`hKA$ERl^8fWv6&@gZ7-pNxQ>o-QCMnLh zo>8(SR&r`5&!^5l00@O6osW8qS1GP|P((!=`~~_9hasa*okjoXy*QPhla*0F%r2}| z=Ky>FP4-ROemZ_)B^X{mv0+pn4o{?E18_ zHcu{BP3REsw$6r^mm{e;B7f(@1(a@=mz13mkcS8TBqndfKQI!$U=DNuBJ4Xi2W@vx z5r*gQ>Q-$Tp{8ZKei8BkUEp39c+1+xWXku%kcijRWQy~596sI;BiLW1rLNZVgM%+| z>&*|4=T<7LDHz+*WI3bKJ};v?LI`pKIZff2b4ORo3DYR{mde%SX zjcps+{T}`)JJx!asOf9GtC=lWF_KnCpZV6z!>{DcWw)ySaQD_UXv|tqLJ3Jt>ay05 z-uO5+hMFTx)Vw&akbttMYTb9DkDC!cW|&V8dWn=kXauv4y)1%9!FGNUvhXYSWw?pt znKd^!x!X3i41Kjp=XV4`4o$^BrW$Z-#R~vHmF>qrKQ?ttJM?xjDG1{SJRNO%=G_UB zA*2>UM+10W+^1B%dRL(%M^O9{R3wZwUhh|OD$_~~?lH)TLfYMfLtlxsAvM}=URJd3 z-8S{Ob=2TjPCgpoV6>C9>!Ttj9BKWGEwrPTISLx@-XWz0OJxPIwbaO2rob`$`WrF~X{MiI)} zw9X3DdG*&c&t66EV|Kh8Y|GHH4Y}={9%X0+BI<+MfWNDlr^}QP9TnxgtU!!q!x3n; z6eToC1~)*ON9}V^wB|H_QSjjalq~@_;Uj!^lak7*+=)4*Nzo{=NFad*>|87)^ZO_q zP)+vlBcT>ZJEDMMM+QrDZ-t;c4=J(g(^+KMHT0~tKG)^!3cB+Z2j$RQ|5wP)EJxyI z@a~HKag(+!4^EazpV*oW?;d#>zI4#!!wpRje$fE?&`H)>Uz(>Y4&FRmiYj!$xr6gQ zu+70LH^?ou*bo=61vP`;zlWv%*76ru1#{g&V(DM^HrVXl&RFH1x_={T#vVjhykU6B zlm?2%m$KI~!602WR8P~CeJlP#nP|Qf)Hm3|Mo#(x@(nWGqknQ5o~61mdwTU4XyNw8 zzZht2lr=DH)#4%~pg!(W5IvpLf7c79zuK)Vm~S|N8a~)0HWlADR;Z1Ah_!gkK zK|LkOOs>{6pP^s`sKyfbF*}id?nTA*A{M=7!5pk*Z2Z-!hx4C>P67}8Dr4wK7x>LU z-*+?9qwT!4*W-*081xpWx?s`@P!%-CQWaG**#y!AWz>=j{splNF ziBMHM2Q}G6Wbi)@mSw)93RzVz{>!zb9&?dG>{1O;mug?Z00o6uCGRvuAl$ z=q)nkaUjcGap}-_)5$~*IhEq#UtgIIKTiF&ZRn)UCFMYFnY! z%}<@2ntnWgz2Fep6)88zf&v{id3=A~1nBJ%^cMr{Tow&q>Sh(LDG{MxgqdEj>D5VC z&-(>L6+Q2dW4;@s)8DUl8jEMfuL0^M5lfX52YaO3$TlX4_}?o{g8Mee zSYMh2nGG?_x6#^%D}XogN(C3aW@j&7MaG&e8DdH&MXW& z!31kxo0ONB5M!FC%?Apf&%pPsS$20U$Y7m_TJ|LdJWU1J{|Zf-eQJ?l1#iSD$&o+X zzhfuUjSAOvZfV%SEk%#5D&wyy{;HfR@xNdicuR!Ke&o9=t>)-S#Y8ORgk2S)TCD*l zp|7>m#IW4Oy?AVvD>hK`bae@*lm=h@!&b_2pOd5_~2D38VqX> z(YnXx0-cPxE)f%1RwFz%6Vdpr-%`wZMiPjrS;yr8hjp;7`Qw4y{UlkI8zSvc&>e?? zCw^CL*~bE}Q%!#xA8+XA3Uqubb?+?Pv#dX2MPoem)KT+ju8#o?{?G;O0vKCAy_@C&XxQQ z_E#?m5D3B!WQIbQd`Z|DOU91iU9Mn+u&y7IaFWzc)n3;49QL>Ba_J_|l>YVzG`l9M zx;~`LY`CgT zom#S;0EN9+3q^FHml+rr%Z@o5gF^gigOffOq`7YB)|y*m0fZ{?Ci$c$=-dcfF~|^S z)zTl8}c6wBH4rZjvEhWwT{$=(b{^%;a{@P)VcJAo>BkO03KMU_Xy*9A1RhTbps zJl;3agl%KUDK4+DmeK(Qf2BWLMBB&`B(A2XNXs`8`>0@?3tTSJ9w3gASG_w8Q>%5E zj!QUpb;BqnYd*!qMB-^H16Ooa=tEbOV?BRcgx298RcEPbEm~Hr&6pK8UYb8gF;wYf zQ5?^L!M%iDYwXRvn@ia-DpjX0^Gd{T7!FWa?xmZADEBo*h1`0KCUs7=T&zE|Dv6_; ziX-C=)*K&*!TUclfQDLQn4UjUomt{&O&}yK#S1k;UwaL-0u)Hha{G4FW3JHtMYVCo z;BOMj_3aX4K8DKYW(0y-ozB!H39@)saF$ws>Qr55Br^-np4RIQ|Jzw&Ko8^BoWYW{ zFQ13Uc0Kp7S+~>V*JmkRNN6NkK-^d}*hC&YwZufiswbr4%OUqfEc=zM# zDRQ}u@}(@@PqpO^oYNYP5&@n?=YDk-ZNb7Py&CINaYUkY8klyPGUNf4pv;LTMnn@$ z_T-`7HV^c*-~vTjeMG~p@2<=4a_2xrHCsK4fBv#UX9uT?^0p|&{#>^P zw38tZ`ytnJ`Grh=jF>H1cxmGFBy+*x>*PIuCo;P7uOGq240I}+%t=aoBcRasJ5Hlz zh^p`gMrILT$v45WGnb-Kuz4N27L3$U#yuQ=&L1&F8+tS--YTtF$?3O?J2@}FNx>`; zkzTjHae0N;O!D7>6>b?wY@^)cm=_WV!km_&0e;(EBp}MPAl|T`3&M3#ry*cME?Mm6 zHF1oQJn^f9g~OM-uZFcQFxnKxe)fP@k`flh)A@i}ZzG1x9ERYR-`}VVBkcU~^p*s7 zUhbrb{s`c!@j9+-V_|P)_D;65WvDRTCPqua(tqB zEELd7d_pwpA*4yjunW` z@A4#psLaNjN4x0q=R0lh35?Ao%pPP?Iwp^+X_`Z)XAWyzBWDde@$H6F6M-y#R}~N{ zuNVZ2jXo_LFG9!h1TZ%NdRNv9kak2i5mc*Do9y1{gb)2FLd}WdXKZb7V`&bOdr2yV zaJS{9P?mE5rfaZ{%4@s=uknS#p8irDEyw*Y%f);-mX#wc2CA)YDBklBEGGHz-sF>{ z50|QK<4VK`sYV99-z<>Uc0EiSys6PoA)*WqX*a`yY@l|~^(B8cL;eo{LqNR0PYVa{ zDaK^{o36FBJa2jPj!NfijGf=Zy>y5UDz}QfzmN-KafG81TPRVzKs-4fXgrpOba|vm zVK|TS@|4QCUU3oDSH~*W+c4sN-cUv+Op^0Zg3B_zJvXPdNKY!4s34@mtWS$)Ppo^dIo35L#n*Jc zMSGjpKxhd`_gTiHfy$QSWjvE~avVC|1CO+xW*Sr+q@>MjFyS8y?-`LcTr<@$vzTUx zlboumG!!D=w3ss@KLrT3D=5f0e80z7>%p_8Ke9e+d%N?)0m0X=&k; zRNwYZ-gaJ(D2e0`-hS-kFDTFRnQr!NQj5MX-XWnm>|~n-dZ=VGJ1N3#4u+r8%w6(L z?3xNGd1Wj8xgimlxyNsP6+@*1{w$U*lw0f>`Ow4*81pWtLPZV<5SU~Aa1U0Sr(z0uX&m1U`QI?z=DG9%-eU+19nB3!?WS9m@54*}%eThwW6K!*&3D7hx=% z*lySAZ^kE@U=Qfa3dCV+@kr)W#=Fd6dZ4t)8WUj!z-m!-cUUsS*;U0z9~jvy%5_k4 zinT%62wiQUZ}FZtIj!`Q+0;VvcXx?|jl(>Pdp-piP=Vq$%DIbdxaBI^v_cNYS!KqK zK?OQ~0l~UnSm72j0zQaY)%4UFC+LR74m)CY{_vid=PC22yi$RR%rx&>pjAF&I*{jN=$B>gti8)RUkyzE+UP z;7S#%JfNqX`jaK5X^QyDkeh}@dht;OZ#Hu>Qpk5n7o5$uk-)&M-G&#SPq)WUj0LgQ z5@f|iuN>3%%(gM8-i+K<|p+3nUGl%)YeQC-l| zMzgm66QAWgIfb}hFnP`C{jFBZN{x2Hr${KM6!qBTeucNbYgNSPn@kl3wRr`K_sk&O zLoHACUY?(?yPDoDTlvFhbST=&uPpaaeBGW9R%ixAb_>QMkpSu_Z_$*3`YLYrNFYvB zAaw%Xb#aA>pkZiM+?NxbKiP;XDm!QDGOE6@3nxNr0L5cx8@=sL=s}wq6zBk-OSR_7 z>WGn~_knYrgUL{`dDyIdGq}7KEVJ<}+D4_YJ0|rTZ?PO;1z6xQ;(Uv<5q(RqC#Eh3%5*g^^eSE4kS`rOexUV`^_W#)?I3@U?#8lX<86u;HU13xCh)9%nO zFIqU*QrnsQruD;>E6D=7-#ZSZ7G`EUh zFcU{I=@n9#N*(xnqoVBu<=E~y5-yAN!PWRAat|U6$A7~v;9HR=KYi{bbjg~IPb@m((OdsdHf_eTM_z*b*iGNI-4BmF`-x^wciO1rbhWFM00wUx6Vp;XaeUO%tNBVw0uw;`;#)&g@BiRl3%|4jNgZPK58a zfHIicYN^)mb6zQVsK|Es9JSdWB;x^`PD_uKIclcp6H{1Ox1ov|ndwot?$-mPe9@^h zX;7H#x4C9|#y5|m0bChTby1U%Tq^;fI zc}`x%LoF2pg+~o1#$zzC1lpN&2pc1#oxvLE^nvEPg(msR=@uT*pDO9@TpmFcn-w19 zxk{_LS<||IS|(icv2?hcews8>!KP-D#}8oTnqMT~*z`6rZ6sU>R46=o0_npzKJa8eV8!hn>=vQJFe;A2EOr4 zxZedmY>}3$V6%=b?^ zAc6vM*mUrp&b1AGP{T18kG-Q@CjCa8ZVc->9b(!o3^Y!g)`q9azvq>^Mss>wp~Ua> zg~Za4?cRu!FOrx4<`sG3-hqPieL_K^ZpVUnq3guUDtN}rBo@rD^&V<&;)V+PS~EV8 zW>Y@u;*n~QNtqS&6G~b7YV1;OH#TE@B1kZb!s`H0a$A!q7Y|3D8AY_aH#$CPd58@R z_%l1cF4)3O@zLF zIEeG*14zEsa@)9cy@cL6x-PGBy*KBwlc9L`#%RO5U1G1vrMHeFs& z+>f4SzlyepAtd%Ax?$flD!MoX`FaXb-w;vWxBZYOiR_q6-_$mg|R>dRbPzhcN|-?JbN z%zmG>x-v@T%wHp?cd0$HuVK7t(V803&@70Mj446^gI61c)76(q!r%E5z>fL@F!rdL zp4nhwK)~{H8q`a7n@VT@EF$c#n=OA-ge8ck_?$tXyf``F@CMpLoe$pOK2d}qFcK8K z;tvTwS!(1(Pxv}p@n_mCq18^Q3&$nZnTwhzbt>##HH#w9n{8IDHHHPmM=speNf5wI zX{GpwZGv|$5qk?>Scv;HVZk&mspOo=uKQg`Q~IR%nQxUt3jAI%`0G89e`S4$;!yM% z90gHXZ$L2tb$bp{lzL1WBaIwN_<&zadmn}jG@bDHyPY*J`x8ZbRDhz~_3f3D16Q0| ze{5F(XA1PM$>vPHOe3LDh8c1TbqRg=7kIt2Yx7R$)O_azCK|c8FbnY0XX*N_*D)>H zGJA6u8aCKZYxX-2lIPny(Dblu+ADD6K#3=ps1UiI3ISqL{t5-pR_b?pbWna8=Arq6Z?zwr_PM4+(YD?woiH(+2f7-P1b+ zo>IhnpXAOymeTu2cr26roI#}__p@!i?n}%Isq2}Y-Jxp!)sg01#i0dh!Z(|Zg-K$M z_X{I2?AN5CX#znt)ofJ(^WC565tDkI#VsAjb#3DQ{sj6CQUt57N;)sjP(0P^?c{1tN+=N2Z9_(@!KEG52VFM0 zaoas3liiiyVvLNXK22U#7!en6WF|X&i|fDpG>DjBN_b5oseZ{TMi zIL3J~f*5btW(Al_awbXSzI!S$I0*EKT*o|(IaczE2|G|T#5+%QFxdG z`8kbhMS^&UT6Q_;`ztnK@`eoK^*vTDEm1%trxq(j^+(!kmEqmk%xkL$912M-{f?F` zDi7%Z2`x$L(e`g<9(Q*N5G)-UgQ<+nzRxbp`U5*(1YAES&Yt9HM-{ypNY1auqH5;f zT^z1uJ;PfLlx`fuh}P5NyAMdfx1&i)`KJ?vEMidVKpDw2`DPyjA+c1J2TEw0O*ANZ zeDRDyi`>)mFsoJrcD`r7P&A8w{E_3AyrLE^sOqUUjk z^2?Ne?`Y8at}+7#OvKRgsc~aU*~S4x?fkaocq~CNKkohGf#Yd`J?t=*a~2l*XBokf zZVK!gld{2%zWRYcnS?GCz4Y4EMy}djFvR%=TH>~#Z4h^mG6=bh^u1|S*-|PkiAM`@2rHw9#*spAN-Ks40jK>Rgi?sAL z)K|jpn~CKCYzk1CNd?!;0Gk1Ry$j~>^uLPUu!5Bnj%)fHEwt}y_T3#opOc2 zrSXNllDMq<$TJ);nX6Dbli+8H?Q!q!xXt;tMJbCxyeHJ6p1XBw5|q9ON}qNUAdFDn zo%$|*OfrWOlOacSG&8GkXEGE2tO{uL#0-y^agAjrVsrETB9<>Y4HXHh(kUMhqlQ9~ zV*T6nK*@QJB`(ne4QDI*)|4u#0<9mEZ^_`sRA2+l$V8=52mt-}?jO z-jvyS!d3K7#I-h~mXM0E4EZKX{}|O>a}AlO0lCDK)e(kmpjtp1@qPxr_CaEgVrDxA zvqXjkNv%oFqlltgvt82OT3SjkLsrJ=$MB38zCKZS_3n{H=mkS6ff5ZtH^~ZEO7HVo zVDOFu;r;yIUp=~zs}X7yj2cONlst#^>1a#fhqjDo)k--vru|UpdHlAS(?~z);k5d7 zh=e4+hj@Q{Hb)w5T_aaXxjlVY*D|J18;nsS9>HhM$)RSjlNGlPPLc(yzQ*LXMA z>%iWYw+A{)Y*!=_&%~sEU3hiN?%{lz-*b9+$Iy%We7Jn1x&kqvl$$fm^p+XX&bj{y`ejR554c~&& zOcPn*wb~&SWcmGTDwHf@get_bJI2?x92vza`?|E12?o9%4$=>kbzfd#+;wDZ#TLR| z{yNuIXF9~j%?_+SbGe>H(v#a!p;?B zeM}Hl#Ml7EbZ$57&Q=}dTBMn^Lb!}XkChv^Qsx(B1g&%V{yL93<8;q9k89-tl9@(P zckPeDJb(SuiylJCQ(e7HW;*eL=4ys%SjrTOh=R`1nhaILA+3;kh=sb8uw8y> zZ08B;L{$LwnIZ;a@S5^QB~TK$5Z|)t zGtfHl8l}B4$7~bjeRFKJou1RtseN$ToP((Y*EOMy*>cuJD77Wnf;n(n&h?S1{>An0 z4dzGtZJKNnh%z>_WlhI+F@S#6NV7(G!c6OJuh? z-7~0WDY(aUP6I>$FCFThQFU6?irT8RWY9@LzUA_yGCq*5WdA6_dt74^7y;YDzTpMg zzVoFD>hvjw&-3^tDE+j-bM}Io@aH42IYTjHLSM~zTmI0OA&L>UDpOim*H6Mz;xDg^ zEXE2joqHAevqL^f^bt21d0*4k`<!seIEC34#H%z>_EQE)6<-O(igm6WLR zc{^!WAF>FYGc$gi7&27ovwb^BjQMB`3ElG=;o7WKBqHQk%HhT}-v;!!nisdt;fgk% zF9|Ai3anQKIyxPN6A{ z{Lm^x?3rX(8id$FZIPDtUCvKa?jySFemF&Iif(GHa%1XOPeC&h9Ql$<%(huuV=F7?EK27uXuktzQ&8fa~c!ljk)n zT^K7DzveBYBe)Q<$n`8_eg0T!hPe3Egty8;xY!eng#ZjV!RJ*rC0JrhP@S9Y=2pe% zupRlP*Q*UFJ(TnNtD=$Ua_v61aySmERIn;~xK=xngh)f05s#%2R-I}{C#fZ0VO`Bu{F)`lPpSy9 zc{g`0h^C1;c=xh{ZJQlH*n%;$K~1N@LW zjHY08T|#sG(!iIQ67QHBV^;-Pvv)U&#m$y1OKo7~x1moZDH!I^=pDB`nj8$bK$d^+ zO%v!YI$s}_BWj8UYA}&p1%uo5$k0~cxp3lh2K0_rD<^T1NAT=qJZ=3tk@klW^4wrh zdX-9U-pL;2{DI&7Ar$@!lPq87>MMMq=;(UT(znWj6b?An^Gzeuov}dNc2mY&`nZqt zpQk~C{hn&RH$JKxZu`4OR9wvrTtIVe8Y%Qbd32+eV@JroVcKNIaLh z{popT{!?0?XIj8Gp(h&KSPGA{$7SWTfXAr100dd=)R(b46gra3|1BWPP72X3f-*_0 zbvVo1w*IqEZO^BB@vxtmBnjCWQK3@-aYIdP_=9za0_x_=(ad2Y{MQ<)oA9p@dC-Tv z*#jXr;an1#SW5b0#uqwtdykP@ZN(kF3u3MpGz(Bj-}C9~%p?Ngj6<%>_x8w}+1k6wT~R z9Irlq-N=C`;r3ISdUPQq!%KRYY9ir}s_xDhLmsjzLY`d^3^)&$RTf?l=`vF*C4y z63U{#nuy+hDYkgVpFQwyU`<1E&^HNOB&34NIS%NiC{|SnHP})Sr3+Hgd;apLi#9#u zxDO}^I0e>#`hN6bEc2r zv^y)oofIRNwoKAl(myhb_PM6^jB@EB>{xb}c!fRJWWn2O8>4onI6&KC#|XN;3qlRt z;8nl#M#%DofE2@#Rfd+^Bth~fJMaYLB`d>k9kO_H7L`*KX_d``_|RSFe`Qt0%@Ilu zkGNZ$D^_)*nv$(LQkrR;eSPnkIsfO$^W72LgsHqr}cG#OakLO}Mlq{zYQtR^S6TP7V7bE$^pf4}I-wJaDz4XS~Tv?W=+IOO=0h z_<#_&;uGJVivP-V{Z^p1mN%bfTB^VVP9Q_ZPa{>2JQUI&!dlg{WI|?Nl}hC6q8p+@ zdz;g<9I?uo3%nh>Y%hU(!Pv5rPlO z2Bn>a)3pcyOEm{lV$;6w1*y^eIH>4TbJ2V(zz?Kw@BmSue*EA!o-E;_h~3E3?7$2;7d2 zz3^W?ldiauY5^3^AIbYqJ~7%g&V9jq$QT#*JxMEF_Iuc%@XY1jP-j9w2$1NH9qRFY1p)$M$uL0gbl>(L9@M{ zkVYE48Khi6{1=oMpdz}-B>hw?YwLYz5^@I2hy_o^%1g>bX2QCY1^2FUEEwD}pa+n1 z5k%Ya?vLZ6`y0dX2u3QQ-A$&bi4NQGEmSfuz-yg^%~NOK^Dl90JhJxBc0RjKXI$(c4;Le5Eb|L za8)3`d>2pjj+vD~As2ogQo@JPEs@EmDz;nN-o?elKlX&PUe_WF6wdZlOhCAYX=*n_ zvGsrjbBJN1%!CTvOP-&)wNQ_!dyl*z%O<^9A$^n_Y!PjS$vHqK!ZW0@==BTqCKU?T z6kZO~YuuZo4s7_JX-1|6j=z2&w5JzCBw>s&!H(_-FWBd%D~7&FT~5cV5@H|X1Gaaj zK5(m^!;?)Q;J?zp8#|v32nP(VhtWzrfUk^HgC>+O+p0DCw%%iSlef-)$u@hIQ+Lze zqZn{MoXqco??piyk_&}5&?*C^(t$?wcq^V;D(-HJ-yZp<$7#dntn{`ZxMNk5>1o~O z2Q2OlvA{9#aSgP@bhkF59n{#BAofDV-{sC$!oSB(2ggEYIjGYcp5O7`h@e?j{485lQ>1| zJj}52k-t3CVw@yr@Cu=CVbxQ#9cD}(oIU>`nzai9TMiz4=ydfF(m3ex!kz&yw?DK zN1!#%$a}BHm4Dl4xs{bP8-6;BAdpA}g8#6(w&b{|BovMHf)l@v8`*ETjBaBq$fKYV z!_D43q1qxE*z#T5h={BaPghoY+OBQez)&iw=|xbbfj;8ub~mHWB65;o;uZrVG~^C+ zV_dZ`Sj=IpptFvx>Cw;yG=B52lQ{)<>i+l58J5kbPp^xEzG*j_%>#daKLV508uXEh zPg;*We*h6XYa^m>&(RCZPmdqBu*c6x)qeE<;p!ZlGy#xh-L`Gp?rGb$`L=D_wx(^{ zwvB1qwtY74ha0i`AF3)VA}gN~962-Zqd^QlEY%cIKMTahoy!(@TCT{@*Z0@-xG$qM z)XV>2mL8=KApxq){3n)BV_<*o zvG7;EUhgNuo1Z{!?ykk*&W4sNKkn`+SN;TM=wK-BK@NVEcnW@6=p7dTQM8a?FWm}@moNc}R8K->z!pPm}mZ+o5@X_@E`)gbwd%YwdpKWg$+kg3`$~g)V zTR$(~y7L|7vq#7vzK?w!=l`Y)J1;~Ji!uD=D?7o%*NvJZ2vLMFxB)v?>BH(YtB8}T z)oirRxycc0*lUHK?zC6`O=O>rbtAF#Jm;IR-ENN%35lk4LJ~*}DDc*?3KpAzEwD^% zImB^TE7=W-7jgd`gaw`5kPV@k^I?*nr<*kxg=RNlLSwED$PvUV`=Fj zj>zZ`HvIW&BCM7=2aOGpX2P*5W<{qB71G817mf7@L&W3(<0-w$d&CGIkd({LgGa3) z85lr1HHnmmb8mJxNj}FXkW(w$Ff>4K&~9kTnwz5FIyPxbQ5}?#URDFw%WCYA@oO|u z-bs5l3}jWDJo)tox-1-A>A;AkX8z(sP`&h0!=W}Epf%ak&7F9!gvzR)YeRvcY9n21nwSR6o3dn5@HfHKjm6C5=H)r8}jwQ z@qZ{CjY&$^8d%L=Z?_E#Gq+PIxKnI6n>*Y*lz5j0OK8qTOMcGAet|&Ww!-1mjSGP! zk3&i#iVtE(=I7;QWQnlYSz`YpnWc|rthC+Vc!1?gG6JQs%g8#MBUe(BT~W$(GmxQ2ORtp>RcdR^GK)DZhE{wmE03Z5X+5*R11Iv_Dy#$}#m z($pft*YBJuay~KKX#-N>adX;B0oX28#i&aw=nv~RB8k}&uzb}4z*@~gh!IF4)Xbz2S7dj5G+2Hbc-G`vA6i z)M0aqF6c)xf481m2(OT>`X$VyQJdx(#GYX^y_TLWM-$H}xn9m)$sI4bO1){>h$HpX*DnF*SFn-8vY=I0J9NK`0MFC+ynJbh&#F*kKAMwKd(xNqR()a4wd4o1f` z-j5IYp|8OIB>fhF)6Gix|Kvm=-TO=&?|z=WfrpH`bUC^x3^FHjT#O0O+ltsl#!1Suo$K@*wo ztjV@(eX*q|tjO6{!PZ#qhN4}}Xeqf)=Phdd-qG!5t&{pqMJ>9d4-}_KY0=Z)zdXZ; z#N{%q?(Z*Kz;SpktUQZWkGOM0B&OUxrdlvdVJ7Mt_^&M)icOc2t00Pg)?khF|EVPT zPCJ&G4IM3ucvsMd+3~VkHQIgrxmKq&F~ne5BJYWnw*)epV=yKb;`^y6gJjZN5 zR+KXnzG7tVMvp7B1nYyuGE>0Nla~@8oZk4_tMH3tOky!e>Y2Ggd}%(gOWu`_vcB`# zXXpzgakO3Uc#gK?8oV?%1Ly<`sXHbrg(e^hA2iZ3L=N>pl7B}i=DIr{DK`I^ZkkK5T{)3dhu z#LC#Ii*V*B!Og<>rTtrk|J?+#zLaJY>V>FoL8aY>mOVrHjTh;_w$ zixRXp4hIjij15eNiK=J5Ufo%*-AgC_Cnn>8gM|FoKV-KCKe8;DgP&)5wwH3*NEr|X zB{AUliu43;{KiCB=2Rtog>Dj=cGoqpEl;tlNZXYbZFF;9v^2lwWW))U;2sQ|=WGpo zEtbMr1yAs9#9jEhh2E1SSqg9k19O*$#eUnd=|igAwA)?c zSj&hD!MPoZem4@*~FLqW1|aKLq@sD|=BwX^Lt4*O8hlMcE}ymI%__@LoXcygg2_NA0@UO`+?99DmSVx711xEaXQ3 zi+o&B9*m)r!m{N}IH2Goa<6&%j{yz1yw9O%LZsVHH)vcJuB)P_MmTMD0-5!(NibGU zb+iW@*9@lU{@p+{GXV9P_k{TXh}!N{=-wI&_Y50TCZ5nHPbxnG&ppQFSf?#fctU{O zA;K~;VPzasSfpQ5rKQ>p8_@CnD!3oYr|_XU8!4elD5Q$9)#6bA=sW({;ff zq#KHmbqcYK5n}Q$`!*VdY2WyBnY<4-?V>0GKLdU{BCNttkvIP;S3WW&}H=wAvR>4j;;qSb$MJh>aEH($)>jA>@X zt|JVZ_=kl;kDNtba8FQl&ZW#nNw=K6>D;6BrT>DwZQDFI6fFof3%WjyYUq#sUf}1n z6%0!@Tv&_*G09WPH=f<4D#-V`ot!7>3`Za(>YWN-Pu54pHmUeq@$6Pw@1C!HMZ6C0 zWyQxNnD9MIOT9`8aH`j4VVmVV{5zIVxxj&#%%jLffw zV*$Xcg5tEqT@dB5qrkI#RiaIqWI5g)o6nN z;b_dUbI4@%&jRBv*ecn{7J4Aw-v_#;8_*B}Q-4kjE@v}MWAvU@64Fgb&r{AinZCWa zC%??q`aysg%yNsX)C|>fhqpkWi>Oz+`^?1f`V^i9;l+QufM^x;E1Q3b7etN%r#+vl zw&VZ07V~6Y3hcNz)eNXp?)OWLdoo^LVSi1Gd+D%P03l?|7o~bW_-34?+_(~kAV<#{ z=O@pp^RlHE*);dDh3;grIXj%OF{!Obp^eJSiOkRjOWOkPwLDY3iMs}teoA9Nc_DPC z=_jxSy_u`HM9%Sh`QyzqG+B`hKObeGvuUj(%;og4*d!lGsQnpxe$pDY>bp*yfb@R5 z;OJ)OOBqw1R{r@y`SWN^)~$zE^@fkF6-Hbl$yoiJIKQk!f2WaM!n+lPbs-$tHqpTIiGT> zs!{Y7wYvp2^;|zC zOhA_LaV_i_OXuAo5XTQBz;p9cxYgE5@uqh2ufR%ba=ag1mj48Uw{SfSg+rHs97e{p zpn^_W$@<&y1P!UoIAZrhN+Y4Ki=~yal@i2k^$OGl&FEBqJn}5@biAbn2y4qLLRQ(T z!3^1J7Aim#6Hju^zftgJXqN-wQekBoM}{Tw0prD|msnk4Yd9dcAym1qkDvKTGiL;b zCjCQdAR|m9mdqE{7oXh6+*=AU*ed{#1!$siJc7P$!HRKR6PICJc>Y^X$ecezXRw zYoGU)-$>ekmG(JEQqDK?#!@of>K7S=9YV22Y-(R4kTw5cIg%g97IWZd(=db^e=4ED zQHx=`%skpM#!RCk5H)Z+u|$Z}F8SJElc=V#a5*unZVab4y7O#_q)|!jSY96%2z9V& zNprrz>&L!5#B)ANVy(`})w_@vno*uX+U35DESJ6e(6k{&kTCv z`cDZ|6Bc%*$&p_b`12w<^51IsdouWKAPX9QHt#*J@9|_c4+CpmtFL!I)hjeZDFRUDWgryWMB6qzH&=_QnO!TEgbVXo zVpg8El1Vn$6fUWoupF3lkox0z@s!2ZcYjbKwiu-OpCy2O$5PKl;H-Jy2P5_o0m-0| z{1>wuv!LK^qeQ9(h-m8IH4Ay&d_36axtA!sCW^7ew1X*>m_mIWdS*#B;}fmB$QNZZ zclOKgn}(ef80mYte;FCxFA)fLB9_+z9Knb0ji^*uv>YOM%#Rrm_So$db45UFz7Akj zCr-wfa1lz=Wh?hli#LUw3pB)TgGQB6n(a;J&JWATU7)`MebAjs6khL)AF8^G0JZDPOuZ0s0WxS=%yl5T|}Z6@D8llRIIj zG1^fO%|QW4k*(w8FLRp23-b<982Yk%INqqa439|N4(P%Hr7R+gkcK$87VfzlRkBWc zO!Ah>zYW5f1k~0mACa5cEO;Y$+h_TCe}fEm>J2%KaWm=ZYfjS9&223=S)F?MVEM}m zgWR>)0Qa3`sQ-+o0hI_Ki>zML+k#*GeCvgM&M;su4~!_$E=cWLinJ-lk98_@@tk<}RG2fdqH9`CKL*lP|drtpmETpix^ z)JH)G7u|t)JN^RrO7K0>x(w$p2j*raibzlQPOmObT&8Ju7$ALF}>nwnwc5n1XHL$fY~WC zzixyTwBiXN#nErv(xZ++Nsld}d>k$13S47#8)HuNHv>vCQ487?PpxYE$NJ$b#DV=* z=D?a&%jRBCGI7uwugvy6p!4Z6<(|PaitZT)TcjO=cLAE^%boC)pKEFBp@8yx^!rK@ zjAnU{VD@nTn545+U?9^+RO0mD%o|cx&=7IO+q3*eADpVmzD&;Zl2QVz2s*w;QSlxT zcRM@jovtk&rn3eSE_Gh)Os~qpXGf#}hpSU0GveO=q7^EHou-`eB^q2KfIz4x^#~8F z*^kY7Dqv#QXIQ8>tfsAeoN>m=z0UPrrgqT^pzF<0+FuIyEloOYUj_e^w`j{+nu!F*mKAr}2o}M8f>6 zzbFn`C|3eX>H#K0bY?)cu(F_yqk3snP7jgAG2`h&XR>7Z%RPL)h1${heK!I;lD)!) zKVXjkTt$g@4j!CfihgDFe%rWa8>m+y->Esm|6T5i?p7?`xCI#C`kw7I(sl?UMx7F9 zHoZ&N0B!Gq{%fhf;;S#1dW;SIL0n-f9E~_Y*_4xPUdnnGKs|l|zq~<6VAq?rgd#;N zI-=qxaG{^S5c^Ki`VgeXEk6S>$^eT={B--HiAG{uq-QvnP{I7qCIyoZ$yYw_`DrLA zQ{dPJ*}z#*9%%IT#RwT)(%S5w_ng`XdXHGf8EWTyyUN^K@C!UX+<5T#E4+%kn6swAq;SL{&LmYI z=~0A{cDiW^SS%}r-s?d#>|*Md+Vc3BEdJpF5h%-+tTx56z^jT*Xn)uiHT5vLd~;1bGP6E`^3m`Y{I}_w`1dy3 zEm2tRizN~^mRrGu{@o}vN06ss z_g{?n3ZoofR88-yF2YQbb~u0aLB6XZ8>1!vQOvm$9_ z_Cw+l1PUP>lG-JrJ=O1@EGCd)rF|g~xgzY(j_yCmq8P(RmtJhmW0Oz@9+7NcW7I)h zE5LMa)jP^a0+{YB6XpHVgU}7(2Q?=I!{6|h+I!$G^F5#tV)SM8kLYYaVgXX17}qUp z+@ez%4t;d*ZTAXG3SPI}R6x)He62`%JF9E5@R#yx(`s2wiP0m!j7&rZjoqX04-_l0 zI+(aocDN`Ub{>oN9~u9W+xcPxvBOgHA!*&HoSfmWN{T)h$=KCQw zzx&*u@&lc*XbxCB!XxEeV7p%oE3uRC_Ysm8%4Cj)od1k;QE-rs^%0G$l&_)`C8)F| zd<>#pnB?A7s2_WupdVF*M)&dn?&v+A1M=eTa`iKx$>JOj@#r&^;TcuB&6Dwu*(-x4 zek%zyA_orfZnTOJcsm3SeuYeb*!Q*4IksG7hJ_^Ts350D2~S>1{VntQ)RWMZ^}1+1 zk`P%9W>^zN3Uu2prsZS+oy;M|mITgZrx6x9$;9ZQ z<#e_DNOb1Qf6;e9(9qe{1xKvxVI&+g?rPK8bnzf@>kL3Q$$Vy_2-Xdt-c1y6y$U7e zYp@1;O$@doDf*JrvHN&Cd3ztv8VALr(lv!NhI#C?VM?5&!X_Fs#gq6q*ZiqJP=>IO z#>9Ygu0y>-JE8wkc6*VD;?|Zuqwr;FAFI79bVK&C=0m(ado*X^9EP8)&9_0{>pMum zlr#ojm7W?W_}r>2g59y6rHm4TJI7P>sjBhAAIDUu`Fp!joR2h~X2ao3#3fUPF=U(J zvu5hQd@6MpzQ zodTM}RbgB3Yg1En!nvbNeN%8KLAP#fYsa>2+je$rJK3>q+qP}nwrx8(`48&esd-qd zdUf}7KXvtd;7G*fDe+;RJz^5-7kC$*yecx9Hu{6lvOU(&n+hQvQy??+Q|Jj(F%GML ztwtR^$0v75jI%h@rMI*v$!_XPx-!USv?(yXUFU)|X!t@WIFWSU@JRt8rIO&nKXt(Q z_wgU^GmcM~x?MSyzBT6cyTA=U%@1%_-A7_0LBpB>NiiGEXZC%WA$svwc?3_nEOQLt zywUuP@1nyE1F9j@V|svJ`#^`q2&%OYClH_R2=Sa9h(FJHeS&qau~yfwQ|6`zvXIk4 zArB#1Q8UAurA-vlL^FmP2)39IP0S1aOhXVqRiQF- z|HHVL1cjf`=7^QcF8#1t5q{j|31X8t6*-JCqrlQ#AEAz;c(M!oGy$M`1EMyFHsBXA z|E;eD54iEVbPD+J(8j}I481{cijB3sU4NTaGg$ZeSE`_#nNKr!`M{sE9`9>Oq%lyZ z^zh>H*Bp7|y7T_dXoV*0>bYQi<=YeJSWeT!R=rzW#x2R|X$$gFIbxHo)Sg8mmhJJr z&+nOFb;lgNeMhNgPgiIEJUzd$kMw9aO<|;*A;v$@R&6xS(jqq$q3qI^Cr^EDMa5K4J39{_47JG1%?=r))DNK*y2AYhO`c~DY&W+ooK8b@ zoj=yveVq_P3axXpv5z4+6zY#e?1ZHpo#m;-;!f5BGkc#~d`R^R#OwTl$H*JHB7pyd zX|JNhJV? z6e>3;Rr~c8yb3-w8XXLBCY68Zg>XEx1Xw0j3Q3JiZRrDLl}X`nfX*^bT=EQ1)($K! zWHTK_MWxivCiz6XZ6V78(qAf{zBmk>VCMl=fo(zV(TjTn?xP(O*#VnrV@tLw!!cXS z;`$Ee1(q`Ah-5bPFoJ#4OhV82b10$6`ry)lt^PPF6Myg#Y7OthQMDdA^WNlv~^c{$ty4x)NxqJKIr%1w8c1FWqt?_e znV4ij=TB(&dzIRFg$249-EUzrevt?v>YWOD%a&FTlzLed6}}@oIpH_e42LINLvULx zDuk}&dFm|}cP8LMAb<5Kx_^ViSxY0o4(kzL4?#;kQ|xrhVSJc1sU^TcH8m5wlxkb+ zH>l{DNQ4&)lMoS&HL)eQ_ssmt>YhnpoY6UJ5Ur-KRUQ`&miM|`e^l3csfuHdl>Q`9 zjA+z^6sQwJOZ{ z^>g)uKpj?;DUO9MTwm3Ij8Pdum{|S8voDLIyN{#>eL%Uzftk!61))NRLDc^rgT!gC=`>8pBl5t{_GSgZd8Jxp z0%5B5d)!d2s*L}w4RVPN9R5FE@#R`Gh*`I?cugK)eVM+1%doh3cj5RhI$L5*1-A4z zU><;AP4JAHd$3Q8{D_sy*6q3X*GS4il$LrCB~;wAx@^w2>Hx$-2&Qcu?nEG75igLJ0`yl0Fqu8zFt9hX?eUm}Wi<%5m0=cE zFlSDDYgDl^sG7y}v?`C<@Fis)!<{?S_2fd>T%8aMf>~paeF2e`ZeZ^Zt4mpdVuW@T zO$?V2XPJ|EGAurvLa?VmVl1T+4~gIx0HM~g$_!qYnxp-ZSmz8sL1#<>UXs{Hk$vXl zxE({sC-0U$bgF+)BeA?-`eMSQ>_CXTd%q+72)8)J-Er|Ep|;}Gw?zjz$4o(gh8zhvZF-|-Z#^Sybbi##RC}U3MPJXpBLKoeUu_C8>1+ zzxNV21#A~1T0IyBflp8djde#DpabEeHKu#=R1A(h@q3#Qn?4TS#Q>apu0tw^UhsSxi)b=#hHrjP zfP%VFs)Fwb0{m5raoeSa(4dVC=;G=^d7MZVMs8<0X%-8E0E$G8z9GQXCcypU-5wvL zJ#O?(mIIFSpM;@ZER)Yc55{P?N{qnzT?B6>;)fXm@bGc@(%)W!0;8cAtAtN`NUVl!z%d1{2`KT8Vr(*KyMV1!+C#Y+jcN3-nRI_6hDLdwp&O=d0B znL5L&Y*S?$;br9mMYB*q7Ykf!hcv_@_tWNGf#}8dqPw5FL_V<$e5v<6nekBBvwtPO zg^>9gRtCu?2RcJp%+T2NX7F=+h-!g0jCAqQUy`Dm83I8rrTslQtj|Ijy$b&UtQt9M zEU#2p3{;04$v@qr&qqq7J&iBDZtAP^G9j3c&dF;lg?39?7vGMW2ypxd+RW45yosfB zD~$Yiwh;242q&-@!SZNZVbE-ifperK|F4eEwmfvAAq~}8k5I?>*jT66dxKe$fiBZ! z^zmuzGUuJx<)82RiJ~f6jIvk-)7n3edmyyh9F<9csZBqR?0a+g5Wz4rD zrEhARt!oh6)+bKN%T-pAN>i6%wze9=>MNb)@Nki&xLrH$k@_e9>C=5UxFrV}d8 zzc1Pf0sVEG=Q!4K?N4#5;-ftBS1w|i8XML4D6z4{cXHxqc+`3Uu1DZWF1ePb-DdWq zP+kNrs%)CiF)MI}I5T@OGI`D^wyM4cE3WM-wkaxx#51{8=-;cZV4BEq@s72%`i9jD zi4OfGT5cOq%`iq?mU^5vL#;`CES-BbtySS&QC@Yyb#7x<4}SkLCjUyp;cOFHmN<5U z+Wgc$kav0xo7!;rVX%S?5GY)kTRVSJHmt@@G~(eKlPmZcI&Td`8@X9XWCfpP=N64_ z>|q$fRw!qfRrPl_>WrZbYZL1fe+r)vK5rj+Gcp~;5_MASG#?@eV(s+Gt1UC3L5B)W z#Ha{+6M!$$#f%A7Mn>Z4utfS>ZuElv8{re^4jt+WU^3L3z@kEGT19(QC4Y^~>Uf5J z5+GJfC^Nr~9oZ3{y1pBit3qazs6HC5abXxU;wi~Xf{P+I2}rWWH8=<35iTPt>I+{+ zWWi++Vf=M5*mW1m>dP~N{{FKeb6e0&t?vB&H;M7#mIzwn11>2q)TxJCxWcT3$ALZh z1Tx?E2!gBit|u%~vd*R{}vV6#|^P5$~uipxv!|`TXGzs@ls{ z9LC8Dkkx`B*Q?=i=y?A<)MW;yXQgMdmF6}CJ(FDdStiF=KTFn%PQ431D8CXl%%;p$1r|YvPDMG+(3jh3h8b&G_Xz;n4HmXfKUO*ckFbOpyYSHZLxQDhi4f z&{5O@6(4vBHCB3%xwM6b9aDs@YuX7;wyFiu?BX4<`NgaPW}P0=^F8P~5B z9HTD~kC!rdAcj%B`aJf)I<9fu4BlhjHWkr}9(-3TK-77V#i^k}F@NirLIRf6tx*I1 z*2L$fcvkOyXBmKFR9frVn29f7#c3s$p-Q5YYr9uUyE96r9C~?*xywaf7rmLKdxiex zD>K*n`-f^<6wtOA74Of};Q4kH(lUj9gsUF}@7UM<0P(TR+_Y65*V`j`Nq(8(2D#WZ zdua2}w?@&+l|uOsbn%)?59@)6u@`LL=d;tF*gMOKLAq6@Z0Ikq9A7+=`EyekAmyE< zac=$@up!@SiNaMvkJ=)ZoCHGsP6)sBxK|-_k|>-N560V#EcDeSfc~D5KneC;@Urgx zu1{L2383%9&>wbks^a_|fx*L9Cm=&=z3S=b8|`YhsA9f;$cH?W)79X+X<+o`dV)JO zaOV1d2OgUB0}vjOCb3GoZuMdG#W-Hi#sE;fGj}zvayo-$r12Ul_#TZatf|L01^FHp zr`8ZzV$e_fzVEpetcxKgZuxQ?*blYUb^++|BZQttIhi-ywC|o}fGYWj7aeJxL_w## zO0>|^u^A`d$!+^0+V?7PM`$Y9Z20^WD~M35EZ8836r^xEngG!+mBd5tqMFjL-9)OG zz6-PH?d}0Ye5>7N&eRVMGj`{Ah|1{3{HEdkNq$;zN9sXv^Fe6lh&{6P7BZ-M zX|c<7F7*w=o+U?Ckww)9;=z39Ata0P%DnrifL>~LO9&|(`@4J&UXxGP(gP12_>1;t&MAc^cJ2q&n zcORY!J>~Z0c6P#}Ih3V`zN`M%W2`(vXCqM-z^$v5W4pakG@vGdLABK;MFAkQltrwa zZfit{S!z->e7@hp4FHt`4XEX2vb}`WkLH@3;}La zNe5=rDQX~%pc<+$iXAK44r?w;^;eB&fBdhwH_WJKQV*a;4|Y+)`x;wEPzuwK;FS^g z!apf@lvgKu+Qy?G0Xmc=DdAp3wMuzhU_Gd_k@AhZgKztmW(`dh~!MB*vX17F7KdY72KnsCu88*eO+ch-xn#HqFCy_9y&_oe>| zuG82V@YsmtK-sHEDm127pVN~usyjl}t7$%Y=k7_&v~M$r3@D}t+sQWr?q}m0w?4j3 z9f;%t<_Kx^xu`|rYvnuSGpc!=%Y$0=?A|WZ<40$waZ!+Dy>6p~QrhXlyjfk`VqAQU zMrLoN?JAj?Te+6rCLD8%cCWi+!9F{Z{^(eUUo8okkt)l-b}`(;(V9M8n|&2koYd~C z5Da#pkek%%>!P;JsN5SQFUXXfsP99h|Ah{&grH|QMeLUIT2f}DZf;-uzD;W=rpYg$ zDIEz5G3pu9gJ=)^bzK<#XRW{3ueV36AohMA*@$85!%!@ZJ0Yb`fC6e80=U4etne~a z`~~8J_%EQv)d8{))R`3LL+eRz?tUX)^9zAPN}rKVvZ`jRsTE(=T19g^M(2yxs$+g! zEISR|k)W&D59@1YF~C*wqXoJApDYDIc+l#CcOgbl8#R9{7DNrirm*IfV9prh>*BwR zO^%K-X zHu}*Er8~B29KGw2CdT_f_@2IAyMx6S9^VoY8(iE2>#exO7Q=EUPV`aQ#Lf|gx*-4K1qYuG4v(`Vw5~d zTk9MYYpE|DE}YOFfYj!p2^f7I$9Sd;IX1C=;u!hpLL9kwb9>Cxph-4$n4z?Y%?ro3 z=AvYVC6Ce;3qWL3`F1p}oNDC!vR*XO*vsh=VXpnGBnD3Yzf|Ee?afVb7 z;KDn}SIW^E1W{d8r!hVgfRvm#BpLj3L(w8Xm4i-UL`uMSXwG|6v98>`p`(SyVL*H_(rnvMzj`j4^xN ziu*e=x6YosfZRuhjT>CT9W-@NK%+>Px9&*W-gTIEV4oeEU7RKuzFyi<<+0FzyR5jI z)8B5B|ME+U!jZusaY=aprHLj3cyvf??h-RmU#36Z3hwf*j0VQ-w8GV*MEIxAgUO|< z*YJK?-sc_eSb;8X$U}K(Liyd4MqSXQ-xYa<{+yomj7bbbMaXSHzlz;+!^;mHHhgIC zy`hBAPfCuaf_Yb#c#^59d{rd6Bx0NXai82)qt?qA0u~0J{P9}>Ymt)R)n;ouC$^hF z#0lx)%?__Rd|aaN6h_DZ8HyXR?vxXI0zJ?k0W2&XoIPfQgRf6ocRmR4SWscR=_)l= zJ^lro0(}q$4f>XmBDGMqh^62ztePT#sZa}KSgq02xLUw0Xj^R*D<9VOS{)t(Sy(3_ z8+a9l`Y1aXCxZmfQCD7yLy|}dlee~FxfdH;|4X$qJafgooS~M{{8MMsh@3O?T!Ti) z4Hq5Qp%kfz=qUTfHdsuyypsyxYh^Ver#M_Tz`*$6#3RfR`)Rm76|5Ggy1F(G#}R!C zDEnr&%XhMvM7g)%AyHH|LYk!%Md-Z}@M5ie?v!fa3M}b*AH%t~F3-lo#^&-$ru(DO zv2T&y_m+$?(+Xb#ZOY#=Ro=oO`KNh9NG_`6d9GRJGyJ7+tQi80Vbh1tXQTDqcP~aZ$#mY1xuoOg72Mc zkN>dcuz0as9~aMkvfA zA9b7Tk;mG1icl`s^*6ulmCrh(DilSJL|5*Qy96()dCsZNL2Gf4UOFzc&#NpoH_JGA z7<&J73VaIx-=LfMKKq{76kP9$AEyA*O0vX_F1R~nNb4buc(nFp5k9n{z?#0598w~1 z94mbA_PgTf=XGWN7s;sxRf1w0yfH?;bH~Z3K+y`{KOqsPYjXx&ybbn3(3zhm)7!gulq|M$GMw z-(uZSBc%j|Lp`~ylAupUakHNbXa%%IdJX(@zKRN@kJsCb_mg_@t%fMm>V$s@yVF-R z9>}Kd6*|VHJb9PQ&@xg(5fyzv^p(skaW+km2xvJhWrO*AOX^#Kk^LK&1`V@Al>VZl zj(no3?1we4lkkl1pWI8CZ(8$tD91xqs{SK3JJk@)v-7^$G(zC(Z$yX#S@R9`J08rLL{u*6s953y0dM2730Oti z-fC$LDmUMHQ+m8GBJGErE9P5poH*lWb5MmNkOk7SO?#l!_)v^}S|Sz+?e9h)r+9O> zuW7;x&-bXXesM;X0ZpREY3{gso^If7Y`%=V`)n9k5oP(Q(=e@XTxf(i%5#C zvjFb3gc0N-vfpFI%|pJ!P7^a1-7@{-Ydou$Y-0nmvrf^QPn8YdLH)iPxRw zQiS#*i{$A(U5@H?7@~D)?o5Saf}}SQ#adonF$K2{0D9x`1WE zfSWL))PiB-F2f~B=!td^4^?i+>ez4y!9W*5JoCC+O1G3+vew|# z<8+0Ip}OXCaCcNsgnO=>e6aq3X{e~f(BgSwXLZ+kc623smE_q;U9Bii41X&VHaw*l z(;~Ed*69O=7Se~%GaW3pySfSBh)Z$Q$1g{a_c8%$Cf0eZPC9r8poa;^zqRvN`OBpv zoPC+#fY-u_stMrv)D)Vs~i#psE zkh>)vPa|JSfi{P}B(|?`tuaUKyhqmwhA*YFmJ`N&0-Iyl4^&%D*C9FA1jZwwi!dc` zDA9l(U~QV)tdbr9mAtb#=G!uy<1dvu=VRFP>;r;2X(rn;U0#uVURQ(1AYvW;VMBDu zg-(pP#V2o9QmGS?^XX}Mtb`||6TQ{#5a|?3w;D5YcDujo6~$e$0ZGi&)p%}kY5_*( zV|l=}3JY_z?@ck^QShga%neCd*PGBg8R@p-+M2(V!CY`gI`5VIH1&nXeK<@= z@|yDyaSmk6mBF$1zONcyA6@S>Z3z7-llUVop08nVhio|@2bR_p`6W$RGRR$$NOi&< zv5$Q<{dT))yXZ>C+WOkpNUIC$WkRg&Qu8`e^POP$sdjH}5AuVk7_?rY5n=#O`YePc zj&wenv=<$ZjPz@@6A;Vze!o73r^^}wA%@ji9geT;aekfL*B|qb_HR3sq>1+>a?n+zcD75Xa8_JniR3abiZGs!FC517fN<6%6S=f={8}DJ$ zqRll>+ur_DU#85yEfP{`nl_yN*#THxkYoCstZ-xzw1^UMnN;^=viz*=R1$Upk8)w5q39cfaJ1_W%L$1C^4i;2xg= zS>m=pW#`bP*OFa43#3zQ0kACDyX??#8Fyop4{m~dHd4o@H})iPUs)VCL4wTd#)C%d zAC&6r^-`ahs_Kc(VW-mjD7~}W2}(=}!-nr8LNd59HCAbn-VS>oc@yQr{EU^K zj$FvUCZd^L(R`WR0J)kALmA}lpq6NZKWrua(ig>ZQApI5#M!n3KpCpMTS&xikep7D zkhmCv1Dkx>P}j>eBx7d5S}05%l0J`{qR^DDe*r<4XGytJmng7ChYKMfDr9l`!gTSQ zLZfQWl3?H-@Wl`! z_q)2aSpJ#U_*LQtH8j*Bv*UYD`Z^z7J$1-k7y;_IAuJwXETjtqN}dTpO~b9je)Im# ztYq7TRc5}gfTYP24Bj1H@6)B)Z*_jo1+K&E`!1q4ICXT;;4F~wRiRmDZ$2iGCxp@d z3zN{@ZDVKe?S?!(UaF+kG$Ho&Yx$sKC31~XwP~5EH!I?1~s**HW4~ zyD_T-R8@|fB&b^$r@=1ONvixpEe3)+9P8uf0uw?Ov4mi=M1q zbCMUSrjDCQw=2mhxH!+h+h>SpMr23UyI7rS4I zt;HwDQ_q3Bsp)RRh0~&i{K`<68;+|(ffx7eGv|Cw=*SUJGX6wQzPj+ro9PI?vz;yp z799>m^>*7Ja0sm*q`S9CH;FF@vRF$47+g;C(U&{zVu$#@=uJC0>g!~G)dmF ziS532|C%eYNle2;9f+{rkrArf(M1mGWxH{*HkY@vxUi&jM3z!XyPTDyL1FZU3Cv+k zT|mHRtcOf|?cKkFDC$7vEv$Inh4RzbRX=Uoo*g3l`oVvxN}OM4u_$srHpr{6;0<_x zDWFF^BM(2eOYv)?-GEK%K{wf?hZ?Cb`sLR<5PUX%bI5|wZ-(zGm;>ZuDm??< z=SAd@?uEGM_ZK)Z)v(91VJF481*%m&ink`F5bn#ILj)q50YBWGY z0W0<6S*L~oWAg4ynGCG8Xp(gf<~IsAgG?lPfXMmgNqpCQ)WTU|c<`dapc~ZT-CW*J zb+S^bd)%f1K3fdTR@;xEKJOYDOjRD0VpU#_b(Wh(u~=Tui7OT7>1E^?tUFGRFEZ?? z=-FOMU@}QnD@3jtY(bzYJG(*BR)HMR>s8WTk2`zv+sz^*itop$p(0ha#BS;qi>wwdp+hnQUo#hTYefT62j4S2sw0lzu#FLx51Ta4*{4oB+%zPd ziAhkiOb-8)u{a<8(ZTwdVZDeA4zLmUIS&KkK~2hFY0(uZ0Y{=8c|4P#^*x7~n4_kj zERDqxD-PV}v{-&Div1!J8g>hNa^q_~ZjvoEynulJd3S#8MNhZQb(EP=%El& zeK?;vx)p-<@sd*JI-BokG)UXzcn^0w%GOjy6fM%Y;JN+Vt#w%{Fzvo+wNq7lM{an? z1%d?BoPug2%-(TzWBHP&(| zAdxmsJZ3B_T4qh3GbF?;l_SR)r+=DT7yH{wm8exjz7l6E`;(Q8{NgpalB zzM@;H%_vqZa2}AawheR1XH*q`myMkU&R(&U-~k}U2Y&+s876FW3O}%E#wMsh_@5!=aDWk`=M8i#>Psj)pFU^C( zo13ZvTi6Rdl~pJxwH%;>uFnchR3Q8i?Q{9n^G!(kCZz1vw7lLcUfL^iZwnL)s49RRwR^;I$|XUKvJ4vsNyuKWvFL=*_(s@F8Hd~5g)Fr6(k ze97%ZjZww7npxETv$xYObHy(Nw73FZD=qj$P`{Myb3Go3F+A{c?<-pj53+1=9)C}5Zo zCLu>wyZ+2Ixw}77_?jp!GhumR;DEUFJWt9os*(u^WpA&1KN^oTUya~i8wMw+Nl#qV zHgPyxjQsT5Esg@9+0lB0U?kO*_6uH%Sc>V#_NM>sjnRg51!KPZR zm}3aqm@?Y24tP}=!Ob1Q_(DA^TjVc%2gMFuU9eBuql>}*51p%kWAN3_ddqQxS$K9+ zAoMM@A&aM=DanEk&!OX)YP?2GQ<(+yQ9G$P#Y9gKCl406rNL%}w&)kocApJ#?Xgfl z;L~u$RWFU~zO$mT<=|tlwhSAX%a5i5QcZPQJx8oazUQ(i$_@Rpqco-?EEV1p;kugk z1=vp!Y-uPKWYd6@D5Q^GJM1Ku6KoM4cl(<-y&8rjN4>_=v@AP09xtfXUQ7|99*lc5?L`s%x;m9PgR~%CCB*UyTWi$bP z2obipCc**R{Sv>xo=C5w>lKKXP{_2$XE-Q7Tp!xIJ|PVA7uq^$pEFBVHm$o5$NU7i9Jl83SoR_hbpFitIWl=|*=nlli z+1i2SQQKta;VcqKl-X$pdc=vh0|upk)HL$qPm6+XKYJ1-%oLcFUXSJixi7mXM`$HE zBSOs>ZRhtjf}eE%2qEmpsjylDXYn5Af`qfT0={UJlx!xTJT%}4VUF3!kgmD=VIi%f z>R;0Rc4bJXi~@VGRmuq<3@e@9+*SKx{Pv&%=vDPU%D)KJjF{8{$I0+7pnba1kAizQ zy`Ve4f0Yj4PRKTjUq2~ zwBzrc2?!eXT1Z(UaN_f-iC4dT*x=ED6+|+CJ-7`)_!Ugty_l#Hl%` z>*p1sfj$i2hZwM?5aN0&mkyfQ>!{tXwXSK(S+Gtti6Fi$u|=#>q=C`=TZAXoebPJl zgA?9_LpOk4*vfQStKG)cAB?HEEbW@|&m_4%(!GuYMfrW6Lc|+}#7BX8N(WEq%+K;N zfYzqXyezbS4+FQNlQmlP=w@fO;#7Q5i9|>A3+(zV32NA^+@9Qdfv28oLJg3^Kb4)f zv+hVOoWY;7*Uq!%BtV4HYeCJ&zpDPdQcm}hHN3KPlh6w^(n*6ts8?}J?t^)(0wF(g z9Key|hd3$RS<4b>KwrE;)^;;;~7Jm;13{ zJ@7qsy%-?LEa=L`QG0i-X{kI%u#X9P@l_{ba8r596{%9@`}HqMt^DP#mePqM5%x*S zGrY?V@6q7)tP`1j0tScd;F8%zHHUl)XPn9U1pGPhmiEG4`&}t9MgB|1a*2YT-uzb2 zR*vHt((GpBPm@h5BiA$LbhHi0#SO;LsZLZebYe`A1GQTT!qcIrKjx5q4&*;RnX7 zO3K>@^5%2volD(s)ic`_NgSIb-!BQGnVi^YhK)Yoj94l?}B}BW+I{W?2F#6|Nobm* zG|>9tPA`I0@qpE|)6)Gj^>s(t0^_JXTKs+d672KV-5pmHYn8xIu@H_$=j$G&A9zeX z)&o!MEw$O9qd%BI*Hzt5L6rz&O+n}X>chES{tP4Q;@yc-4ei-mIFDA)9@d1U>@rL-ex#lVK<;13*{{mA;ol1k=@8Oz zxe4uaCLZ1DOfK**1krpf7o_Vr9Lhr(+ZZ`IIT-6(|0l9Fuz+HxXU3<;|4+ot4MnHy zW@n5~Cu(csBy8+x=wNQ=Wa|L+-?^;5^>2%~rkJ>>2$hnpvxA|rlD>_jyn`)`gwt<{ zmAg zHa9hM!e?dqP5(3Hf7)n%>!Ii*ob;{C4FzmWt&H($7#N`Fl$?yMRq@%Gpy<^9w-+-z z>+c|D`VLCQPWa?>HgvXhP89$138Ln|-Pq}we%Gc5#moEuR?G7LtybFD#?;A-0iTVX z5sL1A5=MMhMm7$P|4V=S|6hpD%0$mXkN=Ft5J{>jZW-+dqWG<0-~#-^qp4*Tz)I}4>$F0Kv7xrL6lwmFPX zXfabGQ=u9e387t+JuBHkErI)=N3rjp^pI4)sGz2i9)_QSzMe;t zSFzonU`_Tgjn)kG2`zT4G~`rFb*{9}5xO%gJ!^epGfNX|!QNZEl<=y$u!5$bs<6(i zgrJ9>!4hNBubSBUwxGDAs;~rPzzd&xX{)H82!+R->L?nksqdnysye@dyB~+oUr87} z{fl2#&QFio&(ckg_3)4N1o~$Kz%_^_j1vq@*)cIT{>o3vq z1hOG@a_Qk9=0#PkeKc<`r&Ujoe0&|4i2T_BUe%vca1h)3jkeU)G322B-=`|u1D+q( z?OqDBoeG%Odazk880Ml{5N)Hz-#cDhM=yrb?T?Sy4{g3>MIgV{MZU1}Aq0Ny6(O!p zwJw-*j)Ebdh{`WNKn<`VNJ`Lwn(8gbxgRcDqXZZ8NnZ5k+ZHT?2!)fK6F z4SonPw|!CnBB+*I2bhK8lukn6ussFbOt;ZFf^TaTLb7iRajqZ2)w{EApyAt48~>i6 z`JhW=bso~*e^TnS$PVl?D{|`0Y(68$lBn34N=`0IZ)6lIR7hfWwm0PA@feS$a6(^BX6Jsg)1eJ!EZ3ssj_4P-P*s3X`fOk<%JF$WCiey)m@Mhxi)&uPT`ioG9 zP3^92DhXd3#R-tOgH6rO#ZeBlU2VBY8PM%uTUtQ9HA;3xaHVQYKkl)sK!Y<(EIq66 zvTHQotH9-w*zx#nMjX8X0CD@{w?UA;LA^wIw7a1crx;#fd!ei%aHD;0cmbR75;Bln z#?qj^vgMPV))2omlGxb_XpK>fMp78BbTXiAG++7udV$*zZp4!+4Uv<(iIhn9+n*DQ z-nOT;t#F371AY?x3oY$m?|4}Nz1Q&~3g95?5LB~$6ievTuoXY0dndk*fbLiTcQ$E=D!4pAg^XrxUz}V#~1Kadqq-9tzS*s7jcK? zy)M8C8@{c?n8#B{d7fI{vIMjX6-j7pVJ5u;QPJ4b%@*MV6pt8KPOIy~r1^k z${PJiY(2BWC87cjnv;)j+_UF9(en>t;Hmc ztBemLfrQl+X>1$|P5#JUk(y+LP45}twoMLkQ8=N+yUBl_B`5d9Xt^H|sAmybv?8Uy zVnQ=+V31z*WD-%gQ>Ye_^1Pl$;i!OmxNivX>1z@ArtYCx)!{lZ(Jw~BDoN{l3;l;> zy3=LC#ggql$d0^;;Nx7*@x4#uSp{22viH^sfNsM1WG0$V*L3rWoDLdtJnv1u*$izw zd=?Ee-qd^Gp-wci#qDl%^NaWxBV|JX^N#qXMQFCZ*VSL*o0r~ELKa>qv#g~-+3zIL z5NKjJGo8$jf!lEBsryB%q|f|BJAmG50s^WTX{%-My}D1t^2C+^xc+-#iSWI&&aX*{ z%Vab2$syNIZuOk-@tGNm**oM`M=A^0J!M|W@y#u+%HK0#$>-)A>vpt?j_az@9cRM_ zD`cV&FaW>?-&DnIg^edp?2ohINerZ;wYZMGEru$4&< zv#c#qbL+@+Nn3U6UJ8fG=u1}7$3zuNKS@8IJU@1`CYN4L?L)iOcEs8J25TQ1aP20Q zX4vG@^qAZns~KkLMI;fi?>)}fH>Xt=2;2Jwa0kuwi)spZ^u=DpD95}8- zgVHeHK;;l@)B8x|S)aoYyv6Q(3s*`5Fvo9$R%17*ca~{!{<#d|&{uR(eoe6uU}lsX zF5heC`~aA-^g!I;R+1a)BR?4j=yrH-A^eUBhH-Ft@F%vKIFy9psXwxr6|3J}lca&^ zcP)*Kt#k@Ggp3ddDpQ9t-4muue*2?wgtBSJ>@&@7xCfDUsexBW+~atd;0%^JTza%v z-F$e*Lpd4=6e-hPuLDF+t|Pn>Kxxw+UqrxHu}c*JH<5B~=UU!Tyvj5dqr1YxJ~f=0 ztn18`xOulp725`Ei-b8R^KNS#M0i4^c5eyZsLPv!Dsenc_BW(uVhHyb$8u0#m3{OKCJatH!8g1FRYDD2J)Dks5~E zIn%iXhM#3p;fXk;b7q{&S9bcZ=QxLXKC0iE%GDY;etJJ$M1Bq{lpd(x?N85052C`6 zD;=}XF7bW`6RsNaT;2YjqndN_@Jih6I^n<=w9Q2|IP9&aTXhf;$s5~A>#{m9gKc_{ zOKL==fbi@ylhnNtDq#qz5+}q zAaE`y4%S+wXi&w;V+hp&0g>W8xc8S6_V021WCW~E5CTdco7E<`wd=_AmWo~1t1FsR z#}@_J5n8l%j~DO){XC*dlcl0>eof(hTdtBZC$BV?;ZuCbA>j2No|I!FlKo7ld!ITa z>`Urx&!5@id>9Ya>$C8XammRyM(p#ut`B9MQ{lWtNG+_+SjCV4YAN9axBiI@6^h#s zx)QfM*@b!;f_bh(hZJowjr<$xYv(D(2O)!mm8MMsmF)JOxS@6}>+2-$!rJ`9vBi`I zWm-TA|Hwa>m__;otl~^z`s#dBrLVk*-h!2j%klR*(;&Oy*q<%HhpxN}tFicRwn@ zc41yGQ}cGbwhg{rwQ{<#yFtmTAwe?-BD-@L?0b?wt^s~A8SOZP z&lJCCU-&K_%idn&uRM<}*SIvo0aoE4_;;K3*c8@z_1|02$%yGBKv~fFe^49n@FRW2 zwSD?Zfj<$>*mdsx14wtRMuYR!EpVet71N13N=X4g&4^bGC91$fO~s9C@Vj4((iq8# ziTC1biQqnJ;a`7c_p&bVa|%MlyaeQ+tA5Ndd7Hi1*SAD z^ysBPy|&k;I3+j5Z-l*Gho{yO? zFxPeaHjnbIzb%c0t5{E>#uK!r)Ejd>oL^6T6CsHMrbl38HyMvFOIW(UCyw^wO*%Tz z^C$W=cHSNpfCY0gR+|zX;_Iagj=5(FIOibZ zSf1Yc#W!G?mwUC`4nOnW5z^_`p8(g0UfJBDjDH{qv8Z02f4M#LGUi?pS}3nZ%x;ZI zV_#MUJ||qrb2T~r$q#OqIl%KHGcrg9lZ1423ep_5VASe!1ovkinjO8nJ&RAM2fS*d z5`3c=fp2=QenR)Ehn-6Bv3m~OI4%IYsD&hFG_#||u%mI}Vy%|xzW_!+xxX@CzpJJQ zixvo=UGfImc06Rf+p@?3-f0yVs6FC?wp}(Q;oQqy(MTQ%@MlxQRoevJS%Kv8!m9o` z-heLLJp3j*3Tk=@F6S}fUnBCVM0b|H>>mkI=-6hUc_^6;I0#XDm-}b|9$c;?{vf#q zovR~V>qk+vv5BpW%+^LYps8jWngd`V{jU0Zlqua7Gzt0A za48I9SjRUW)xO8x>(7&`&#>``-m;AelNZ|)9w!v_;}2o{1ESa3)WcI_<5+PtF?)yy zs$rl7&&9J)tLD8B__Df+hRvyw;tg8n99n_5R~;%%YnU>V2VefVa625c!qxgdDnm=A z*j~C>)Qx{1T)28$kBz^W{FP+fn0vm21F?t9G_G0|dbSH5F|Dkk#Xr^_lU9QrxCIR{x1m`!aJZ?rPIbM039W{6MpS(BKBrPaBFIu3 zSC|9|cUafvsxROCcetLC?b0H|C%dV2bbn43*8@UQ5*iz5a2IZ6~Ly-XdEBG{k!pQlRUUEy1QQg)g}`YjXO9l; z^vJcXaUYIc(7?%IixL4t~< z4N@vtvv#p7fnL%OUaMioMo?9y}P=jQhX>TCd|5jeOO z12GIMJ6~Y6mUl^+)x#$}!t(fxQr_p&u>%|#eWl~jiZC6XrrAG|7@@@EseBf~gQt`W zRL`559Q&t9d*&oTk+SOJbNm;?5zXy}zvQNt3e;h}7nTDpnuP zdmHUkO;UEjKhARex4Q3_EErElO@IXmSrEIko`(uTgy&a5(~Hd!t^;k)6p*2Emu^() z$US_}na8H;5lbpsFsqzAU-iz>xomyhHp9fT_TQB-# z4dxICBRFK-M%;@78RepK;t=G4MCe*N&j;P;xX$WJv8mi)IvmUo(fD)Fbh*SJo|{Qv zhnR+~4;uwu?c;Bc?B}iQ+}o%9ie?Y?t6q;7dSCkNT4P$R3<*yn~d3Ri=0e`QM* zX4>|U~FeNXJB6NFTPi|-@KLWfs0g$WS zZ4}k?_`}VL>anOjI)OOr4OrNkas8d}ZCK*5UKx;eFA&q3a;wB6;Omk~iDcfc-y_mR zIfyk^>r2gnIuTjBN`u=9AeEWa;GG5-Z<&x8AH#1gg}FUM1W_785KW@*!csN0^haG7 zX6D?dxAo)lN7BXE8)oU>lp03I3dbrUy?nK_Fku&>w?VN|x^?W$h|#$dD1kZTl@&I% z5j9MazKlQ~ald zIPcsjPlmomIJ+_r*C@DjS{}K=JdPJPh4%JslZF+)k~IAE@V8KNEan?aj#b*83Nd+| znsEy5$F@3GY;sR`4xmD+gPX$|ERd5A6DhKk?SeTuoU9*7Et>z58iC0aP&gy|%kdD?n}!^roM5gYNQYAAca4`5I19_^^KP1NY%=|Nf&SjRw5p(o(}5}*-?8~Z5UKZ|2<>+*~{uIY|n$wFFYoc z-@4`|OdYHD-N=>F{IyLdUvkqrV`9--U6T}dKV)ovcup77r>Z2`963HT403ry{VsQOYu|C%%dN{7Uvv|4=Aq&O-P(>W*h4Q z*J|~Mp+KM*J@&cHR^-VQIKKvEC=NBv5195}1w4%w8S&Gn?qyhpB43wlG-OlF_*tLH zFe8~YCMwSXSy7NiBQy|uxx!Xx2;%wrMQth8MuD^-)}C78{`;h5YSKm+zMIqsKdp8K z;N??6u|^_q5`8)Y`=w0$+I6&o3|*p1c9nvO!1ftsy9or{=X(t-_?LlEIfP!d2~yo9 zw>YOFlsPpC(w_ewc<7M)M*2)Uxdnh(Ad0oO)D_qu;aK=X0vJbEZ#lQ^qS9(;G0pX$ z8i7rs(}4G0hi!k~O3>3+YO_O8$G*9mQ8Qa>SwO6n;SPMkiSL=Ti52p|Tmr-5cxN02 zx{|#PjZvME1$yd%l5lW>d>|G}SbtK|(#4qVJjQxF%n+D;$!l;Re#OY@@5r3Fy1i>9 z3Nd{=$!0J6xJwoS#Sd&tQR!_-_*67cpLUXBZDU7gW-(V-IAS%O%apJ1sMZ zGfITlN-O9esW&6j@|rM}KM7qVm7Bkr<)JXLgn*EI@Q9l@u$m3kXSG>9f9$LkWu7@v zt)2%(S=s1Cu>ot-nGALU6v;j_ajHniH_&YEBARRfyjZ9fXTK^FSL)O=!UN>V$-q{c^uWj9nQRIC}7$>2l!-2RM zln_8Q***zdvhkclsYsSRbp!6F$VedIi}?4iJeR+bFiDRQ9US`h2BK)$Z>>`pjvZsH z^4C%ZO;GMMm3L|^zxp{lpU-E_Zt#{(T_}y0ND)^4Er z)$C#qZhF}1tp7LXpfnfS20VR|1nH42D^W-NJ zg(a$Ew-6zS;)LiB&R;MIY=NZfxW(9!vd|xR_zoMt;{TG5pxnNTFMxwFW-k*Z=QtyX4xTCR|44-G)~9H2NMz{Kd(Kj|EPcb!Rq5vTFZw!BDg&yg)_9hVK!O=WNMVO5$N&#x~qSUz3!k29x4BjP46` zZWf!(&5*CZz`|Hk6$guW^wYM#TfDdNMv4_!8zgR?*R|wtxrcQ>Oz67sbkLRNMI5XC zt7JE?KaGjh?S)Gw;uz`!*CWBwy{}ZRc86M2e<$o{l;0`#d*IaD52=^^LgX6H-%*OQ zQQyI^NR1X)jMA77GR?Mv%W>&&yfp* zeduO5UV@j|#@-ue+-9L)ha(YzpQPbT-Y1J4l-|@h+8TU@ z0Ff!osfZF5@aXD0BBjiy@tKm%f>=a+cEI$&b=210ZEDLA#Ib}x-wElC-%2qo&6j~+ z!=Q^Bf!xXI@$1@xen#4;x2DFoH3%(3?+jZ9NJvkctKg9i6AeP#ulQ7Rl+2+rOGTVN zKud_M{GC)kI7jUAc;9K|^o~K%ZWCcq63oSs>IVAn8q41#^zjMD7nQGHk#AiKOe(%} zD(ve4V|D{C&^ZC0)gZvpt`n*WHR=Dvc6DJE3dyk-mj<)<)efJqaRgpTBs|Q+X*PY4 zn*7sW*W}t=#$pVn8QU7P;qVRQ+}I(f6pl(T9As1%ALwYHPm&w_8ka>@5}wW%5j`kg z8&Exvl^ho0%zP;nZp_h?7bGq@EG#XIwl*cqNkZeXQUASG?Bg?HI}vC3*>XnosOYW? zfCIAw8&C7Z2m0jGIL!cc6J<{IaB_rRi9|?M9!a8+}0_#vPNW!`vvj1AFHH=IC%mj_19Sy zJ>G+cxzyKp#3-9Wme_avjqh~7MLCmVYno~ccK-TxKYfy7CqW;MD)lK{Dp*#)f<}1n z(BX7?rUu#`-KzLu!BPJWv=wb>n3ZzQYcUlE1Sw ze$|S6@|_kf!WLpPE)AhV66;0JrwffZez#IS6?x0)`&9vMIC6OY@z08sJGTL8Ip5eb zNe$scDvMrY&<*7BcZO6B5~h9KWA!%gNJfVJ6w$eBPQkok%OBHf#iS2yr5Z`2|1F~^ z;@Z2^0&j}mGka^!F#EouV}_B&^ZGMrn`{R45rK4l+<$cTrk$*YNp^0@`;=T4`kTW| zqeU21`Z1_*f{gTFwTdK(namg|y!r4w0#pY5J`|?Ow~dWncJj{~B-2Ie5KTYRkILs& zp4Schx_$Cx6r*M0)}w8FblNbe$RMI5HzHFipY$U#Xj$1NPn&%>V(-U1r50&q1r(>( zxz@Q*zZ!< zRh)Wi>mvq0_D&u}e>xusbRzg>7|)Hi6y0a@5xjt}6EhSicWhVZ&FS1)wD5EAy~6@< zF%1)*7y8#gjtTh_xpeTWhD5jYatDF8)1nKlNk}32cuUplAisFE~GoRi<(! zJP;OQc>t4xU=7qQb^K~4kvFywB1>+|5ta4sCK)qcpZ@ne5o?7f!;Wpiz(5^?`P&r* z#8u%5bOD#=a`x>dk3Y$P_F7pH-Eg?HEpOoZ6DpQeTjP}mkL^xR8ZZ`F7omvnGa4MX z0!Q!lYq>12Gq?@Vvh!dTO&tuuGB!|qXoAj$U*_iJ(IyYRt2BS70WY#?e$l@wlZIlu z)*_t=VoVsTD?`7>(N^jJdqJWNXI?IQUF4uQncjuL%a2uLb5w4|RJ(H<7N>@xdXWID zp3-^}ZTxHOM*=Z3UB#JnC{-vfy*p(l&WYzB7uuShO9)7Q9M23oqSdK`TEQNue>xe0 z{Z8*0p{99mw+S?9yS@juOk7l1bA0Z|HL@Z~euAe%oI=M)OkTChkqjc(YQfNb$)WyKb&>Ag)`-NpTxtQJ3xj2v0zSmA8mE4z z0SbtSKJh>>79#oaQp3_Kb@WFhik`y`CSHBx!{Xl;C9S&s!K~*3Mc;QW;Jx_UF~RH8 z+~7KpV8*ihXI^M8wMP03YSB=a67?CqtgmAhleY2pcs*#CcmX(Bd_S>vTC|!CN}0#2 zJOwEd%B*5f%#$bOI?hkRzTO53twvaa=RBhfW_qW%O1I=u8zMT&!XaE6%o%9Pt%&pW zp0bGk5+jTqPy(jRjuKsb3=rzMQJZJ+*wv2s2Y?CgGCm;sdqBlZ_V+H_I0A8q8PXC9 zm^0w=BCc%9fiId(;CPfv3ZqDt*hHe25Ea+o>zx4{SK4qMIJ)gS8Jc#0Z!N#zp?pHT zZhkD;FP?CbaTT}xCsZa^Afm0aAKv-cb-?ln{gJmdE-DT~MB5v0$nTb=! zs)l+bm-z2zwppir_h`gS|KsmmYItNdp>v}B8*g6JN`lvD8?6k-b!wGNFcWKQ&mOGR zj$6MdWM9#pcjIZ4%KgX;W6h6u0P3nd3$ibG$CR|2^jWlst$yq`hX&t`AW{lP?(66q zYv2Qyw{CebPX4A+TZ@B_jim0mJzQ`mBeSdqpzHPQXN2FWQ{6|ICvH&0}naVD%Bq} zwD3&S3B^YpMfxs^wjzoK@PS}V1@$at@-NMY+h;>yNJv{E?R<8amI1*T=IcRms8Y!f zb){x+EDz4)#8s@Do5}$waF}r;Hr4sZf&y;2#d>mk*dHf7`(AuP1dyr|GGA7Ch|~vc z>-#q~$>&!ajE?vX{}5Fk4=n)QPAF6h)ES^+M#t8LU&7639E1m{f+Ji$w0R=wPjl(XYnOK8qY8OP0V^z)0j6I8k>$U`1@__hp}npsFPVaKFLpaSm3$H0c1 z)un{$z7yc*Ca+4}FZ{-TPJ)iV#M}BDNIEK^stOc*GD>Tq%?ZpfQ0ZnZZ$^+JC~tb$ zc{jY2d#qQK!`+0=U?8-Q{uGN2+I@5(`24ftQAe|+- zUUs@PR!>`n8lzKy?M5;H`^C6+S|Vpe975(kOjS{~zW0|RRQ_(e5(8p&Z?z~mTjvPS z!uJW4AYY#$BWfXq4K9V2Z8D$qoUzAVJ9#h!iH5#3w8OrMV>)95Iv^EY6=;Y59Nz|5 z(^THj0a+X*-YyOM%ABuX&y8W5X#|2~M$v%-DoDf06%OCI>qJiD{}I&)`UFBtKqiz8 z-yM8V17VRzgxOGA|5->28Z;(7Indm|C4;rn+pEetrZ7(1h;yIE`83@bf5xF%#+RK0= zEwi@L4o2y3QwwCjE{E=!j3Jn-)u!iQjvD!yu}*bU@s2o9k%&kk^q1Rb)R$waVqmkw z6kL@iq@ZP0ws=LdHcCyTAVu1}vLGHS2g)us{4;JKOp7{js`to7Bv_t&wIz|QM=XdP zJjn#e97An(&x7Nm$|HQcAM#g7!5<5Be+@x6{1D)PD2FBR#*-@*)nWv$Mb`XpqKrG- z>nE*YI=E0amtPlu&(|SMuoltr_F^AlU4Rv&=P%Jm)J0elU2>eX>VC|X2Di9gvNBCN zRfI7|MU@kYhNciEV@-Vs2Vcrpe&+XZjgEN6-N_|9>9@r>hg`zE_GcO+;Q+EM2W`mJ zQ>OmIYyQF`a3q7yL0iJDtKZvBi#F}@HV+JB{*e$Xyf%LS1=SN&4#D{C6$fuopo0JY_EPx|a z->n;oDA}c2?K?F%Bn3D|GjTT{jYoF22wDCq%3-{v0GNn?FKm}NP;xacP6cz_rxNI1 ztqLQK()D)Z4{t*hi5DCFOB;-;XqF=3b7G@r5-)Eq*qC)*SZ!dhs9{uhuzn1shuw@0 zlCK17I8gVCW;)lkv=ixM?Wyo{+@nlWFFww1)Mzz@NnQ{DqhGF9$Lh;s#WV)3*Fzfdw%A~ zJ>p&)XF<{jcHpg%Rb`uk5IZFlT?zx+G)%;NkyO3TpyMZ{JFFNk&$#w2)s<}&hkUH! z5_ooOszOe0cs?aTVg6DCRO9Fk$pB#J3j02FdyMzb25<(Hh@HnDa$vC33J;4xCdvj8l~B;PH;$2 zgOD=6mDWxudpj6)2A{j{H9xPttPEKy8W(}(lsL(@^W{}hg#72Etwv$IcTVUvD6&#- zq`Lc2iQHao{OeD#_7G!=#>I`awZ(=FrFh`!YrI+U3Yud#EhH`s88~m?4^&v$d4;TV zJj8MUxPc}uV{TjP-un(%yx&!X!gRCwM=3q#68b}TT`YEJ$?$5h5M;-~Jfy`x;pRU& zO(aiGovqV-gobdWc}~>A(3D@DUdlr*jVVpQdk??v`nSp<)hF+d<krVxS6aCcFen^2e~^{V)$X#txMZVmf#N@r*%2e zukpi~ZKLfxaBhv%5=LFzqu({*lulfEKJNKGWPRHhUIkuSmVu(v(D@ee&4*a_+ZD63 zXGkhCUAc(qp0Pq?_Qi$xPhU)sIz)R1XAZtFr|0!}*m0$P=QuGg<DTs_l4w$9;{2@V7Xm(UBdbFhm^4#BDgjU7?t^x^qlv)yZM!C~X zC~%NVa!e4Z;EKo@LGMw8-;jBjDo{jlq1NTQPLn5&!4D8vtjm;77#0 zFGh0|rAFFdAzG8$oD(|zffp5gF4{~7v_Sdv^fc?hEGFPW1_ww^8&mf9LZ6jZ=Azra zATQ5cb;11mp_`>vaKE^M)Z@MmD3w0O&C}hZu%4IuHy&$m-?oNvp4SFsBLre_k*6eh z>fjvC>4O|}EGT3^8NF`|SJUa#|KfV)|e-q3Co_o z6nAF~NsQf2x}1d)_B}o5p_9493WdhaQQ2Uy{s-UE$3nMAT^o{^ zhl_JrYwGVt=ua>_#XvvH>fx|B>IRtSVb(~ntS_yVt{a-5Q`JDh7dw0^OUdQ)i%5)* zU}_}R5=%qvf*#stEoS{}jS2X8j0=<(ck1o9L}j9I(_YXKmY7Y9nS+~ zJ3Q}Q(wZdeTR=TY7Ze+;SJG-e7mNgW5n8V~tGoZbl3!3koZ?&dETwmA;m#27B@=IV_=B!t38uPegquRJm zTEgP}N%+{XQQJp#2}h0>MEkgAJ?sN3{NY(wJQ-$~=C4m0_4qAtH57ARv%cvSO`)5g zD(a^jbP_SIX|57)JJ`NO)+!v-gsMi+`;zXpE=U0kl(SXGMq;OzDP07JrDg2DM2oP*(;f9n#y#AI5WGqyhogr z06`e@vNsCLgfBWgvg5(3>(j;Cn~L)-h+yRKU9S0LSp}_N4ay0F97e&BEE1NOmG}j) z%^s=6H73k~AdP!yNcZ-B&%Extq?2WS;w|Ly@%0a|AOpjKG9z~hZC0=IV_D^m%<&ZW zI$cZhmk&U8%0F(QWCZza*wyVY3ag+hTWf|k!H=C&jMuOU9bjpOHsFPNw847x;@Y~I zO(U;4bpSG5B0qAa^30me{l6nSIdQsybUCa-> z(kA(Vi0fGFbZ>WtGKMJ$Z|Gb59m0ZyETRm6Sk~#0zlHIl&J5X76wV;k0lI+?NZOK@ zL0ZcGb$SJ3{d`v;cD{oN!UA zHSh7_v;Eg_N51PbT1WsH*&T-7Gt13Up##EP`&>MW3BqI5 zk*aKyya#4N`M`n2>7T60yY;a}=8@th*9A?g2&}9P*qrxgb0KGf$e|T0&-2#1Wi5Bl z1P;897jkFHm$$d?nvbRBZ(OwARYI$d9ISDdxM}IY!8`JW;5373Vm3xBNoCQZ>$+%S zhgj!Vg(=$f!Zc?sDLu!`1s$cdw76#+`!!yOhz1nVl4lOP)uu;SUf*$ct2q}!_=xI0svC!-($hvp5a|@g~**z`@I?r5p`g zkP45s*w?A(jZU(L*$NFYtkNRBn{jUouH`)AhGpMlVnOfL95-0BeKep8clraDXLBZO*~2F z^FFMbUHv1yr+lG;&dZR3;Tl^^oT8z{D(21K3`K3?FN{mR0Hg~ ziW80a;WPq;>dVdXe5e%X&@5wY#6LH?R3v)4tyOEJs(DK%5+o1-#3}na-n{OZ8XNTw zuuL!pz^Pk`uo|ghWp;5Xd5>9?K1JjFEf==i7C{|#&HCWI-hCmN+Y*a$tL1KQVeRf( zvYLAs< zTJPX>?J481P%1uH@TqgqElLB<*~6+0Gh^U;kS7R}FJ^7ec>ncndgcU{Obw@n%oymR zp|H`ay(6Mya(c7psrFG6DO{gF2fA#(PQkM&ZS-6R@%Dx0?MfcLW2@$IK*wrw%5N6a zV%DBt^2akA=BteQs)t=!W8a<-J4`9a)HXL2%z!@X9 zE>CW;>pj<9j$bLAId??LCdF09Dx=Ob$)rblMTy2~AkrUo;+Ql^Z6Ysf{Po=7s_WO3 zAPn_SzD$zC1(W80Ko@acl=s<66@1`ekI_k<@i~~xW+|`KF3-+jnJ8Gs_jP7M<*}7? zLo;`4>4B_5QnFO6qARQ0soi`9ELzI>BUmqK!xxn7_wXPD8&LBR(ahJWhFCS;oBEb_ z+em<#x$057cMQ9ry01|n=R)@7&9e+8oo@KIbj9gPm@?WPSQ2B@MYj<7d%(cmCGg=n zn#Iiq&`k2IvH1@w7K(iMxjffurllwwT{t6yD$d!^{iGA4PzofxX)Qa)bJz;fPOtmM zLX5M=q2rti+elXihARn10Yb^BzmH0&gnc^g(ip~N78QKsRu_A1em5D#>trgxa$Vp9ewJ!|SG&deCB0Wq#v_T^5cK z_t04%y}X{5%C1(`q9=n6@tPJcp_)=1_)Ke|uYJ(HGO?9M=<$~i<`0+mV3BKL!)7mC zVDlvU2D@s(S;sJKYdSt>_`6>tb$7y^eG7hB{zEo}Fx-d+{*d?HsW2|7$r}UMy30au z?v2IiaWLW)9u;JJy`XZDnxgC_+Dkd7(p_;GVr@A4q774UIzXNgtq2E6p+E*mhWh0< zba!2=LF|JyKSU7ikFHmmXeaExED9wG%|fkP#Ab~k^PJN`RXHdFil-nP9Zc*=O&DoG z;G+y^l?c9zU^!jm4OaaSrw@lUO7qs*xm&EU6gsG6A)7#}@0 z>yy!Gihw_NW8?q1rxf+kjHcZ|0+!^sZH+k>MS7eSIY?7>UR6{#>S-#HH&#!%P@U8m zWoPQ#zKn2gXV*Ex<&<&=L8%m1vq)8yyQbvodsdQs+V~Z6?i5Xmb5=F8LaRYzPdR*R znyR#NW#}c_1|&qiRk*6PhtCob)TV3yCaY_U_}Der#>wlSV6q>>92Do3T=3!5IKRwJ zK}PqI4PwVo4J7(N-Cpb^$xIsE)0sv|HcK@y)Ba^%LP&7dWH5pVFdp2$3Z#svq~1Xo zVKziHqSVjMZnV<|{d3&q=)5qEij7x(3JACUjIf|;kaJq#0<{s)BWw@QPc z$3cO?1)2|bJ&o8vn~RH_G$3V88Ih_zW7?4ba%D*T%{q1++XuIhG{u!4i8PnbAfgk7 zfy^>U0e$wDxco*yke?ppwupeT=x9we{lFhKd^t{GoBTjor|;E2VAGOCXZ{SqTELoH zkh7RnwQmZwOxs0d6ANZneIB|Wosq+*8>97r$_-Ot{90_-TuoBQHs?9X$kr1%hW`HA zomf-t?m2zog~iXX@okCr#8Kk!MXND}w_`i(thsS6r1UJj%UPn{s^J;2L25);U;?tq z=;lK7CLeyMuZ&+@217%GPl$xYkCCZTN6^t`H)Qz;K}OJAY`lRye(cxi@GUd-kE`#wV*Bgu$I%7pM9`t=Q{uuuR9t z0pmR;Q3`qIIRSVb{i74h*C|6^C;*3SxEE#wmU)KTPj#qmna7_KE6{>mL>_AST z7t~f(yYutj@qyneIxUvzg|LQ`@Ye-#(qo~{y5_|PAMwkD&Bo)RzZ%*7gnF#4ySREqAK}aaRuK*rlOrso(SibaI(K@aBh!L;Lz*rxnA}N56QW=nm_hGEbd^ zffK5i|32L-az)|kA@&9w-Pey^UiTNJ|AF)Q(|A6w&N=< zvPp-^ggwky@{}mk#3moC4&iNaSnO{c3ynXFL$WxCAX;BcYX%8~alXtBBYeS}-WF?} zdkV1?a{}zPfaF)JrZ;$zU}}S03;!1v@3bt6qAc5XjBeYuZQHhO+qP}nwr$(CZQT`d z&&%BZP!W}xm92hRkt9W1r_z@!j>ktjoiWRfd$=0Dw~3!`3mCKJTivB_@MXG9=dGLy zt$hc;wL^CXQCY3>&eBo#3Qe+KwoV)yP15B6-Z7nPYl?Z`b)onmWr;QEk5o5u zpDPf8z5adet0g$H2KBN#08~X_R=k3jx&i_HHE~ehVi)|aax$qRHG5M`!kCsCU$88h z5Kp4XX8bGyW`XO@LdGWaVS^1rQ6UlI3lBvuADL2cs+WvyQFICbp0xPDP~uj^n;`1vUm0G=H`DgEzF?)5u0&?1D|xK7@V8N4}~04 zM=W=MX80()GGVFLJ`aF3aU=4Y!)KwB(WpVFY=kQl?c%)0qG>xEIwVFuE&n=#M{&Cq z4docgavOhx){@akUU>oeKyvxg6XNh}-ZtV}B43$Lt1F)*mAqrHCj-V|1@H-d0;l_V z&j2sMx0K$KI^Rym-zA;9nUC{L?r}}8T12C&rpx358GU@&{Bz3&Irwjsg^=i9y9;cL z6t4`apDCvTfX^egy!EBmP11sa=ef^>YM6%aZRkWm- zcZa%L8=jzqyIxOOz)UCH3{6f@0FTK{0w~7WUj}9&0 z{Y7tNQ@jp4>a|KTf-e3RixfqW0NNB#rpa9hE?OO${MYQ4_~!+8H_jHk(Z6JurFF3c zZJ!kh*G|u_{U1zjkqpU%T;dpR|2%SlVy53DWFX|Zm^nJ)Q5)w{cjU1nytw@kOu4Ro zK136Oh%@V!*a$yDI?3v)P9FM8!o#Fv{ff+??79EZ6-0G~RDi5?H%}c^j*{)TM6nT^ z9IB(94lrh3Tqq;r!}=DX81z6Yd~+V6?6_@4BvuIEUd}sppxe@1J5}13OE))=$vSm5 z-nuEstSY4+9zzq~gMWrTwW;oShiG^I#GI8L=3EYZ-J{f>PDg?|YkY0hm6HOn3OrZ~ zvho?EMUC7oVcLPK$KRg@p7a!Rv`WndG=N3xO?)T#deI6rUq9U_A~0WOhD2-Tgxr-& zW7sq1#5^y=%(56V!HIqgPJg(%hi6l!c5kuM;i5HXQCFCNJs?mr?f(*wRw&L;( z_bPlnY+!7Dlj0i;vk+(q`Wj0KRKRHJxB2SUCeH+H zW}^}|QTmAY^QU|kqa_WwJ)=i-OWEl~-W_Jc(n0FJBADd>^ysGc{U(C_FDBxXB*{}m zGV9Bm-Xk0*f)H2t^#q0SEcTsKU&OdkKtWU6MgQ%+PX@3S+zX!Jno9;isg)=>nFL_- z&s7!Xy&Y#kZt&1q`d@4>5-8$Y!GE%uL=zY91*>^3vT+VCmxTA`Y=!6HM;*MGc_{I zk|qUMhHq;tn8yREilQ8RKTZVfp?MxLm=#n$c^Wuhg{4LC88^Y>w2P5C6BswX&P-Nn zje32uwN)TGM+!~-;M4mqW&dd9tB;H9yzYzpv%k?qZ3M(7J876aTP#{R)O^VcXHto= zVpHy>edGIrAwP;PgxZ@f^cGUZ-{~&4?=IsTz1<3%e^)s^jSwsbHwQ#7nzHueDPl9F-5bPG1c6KlqlG4?@?ckU=hE;lUz`UHaO!= zR5w@2@&YwdzAPgs=`0rhk;kGWqlevysc^i8Ps!utSU(_lKZagi#s-6;``&S6sdte^ z2`lXnlPNS-c6I{X5H{XC(h;St1&Cm>lJV)ZR1P3bUYi@BJ4zYEiIRU$4#7rkH2h%@ zAw*~qx)13GI#0k*CUhMXt)R#j`13!7s>Kew4AOfl99>%XWMc@TzzXs#f;~MEJIkU$ zfz$y-cs?{Y#) zgHBAS0o)6@v*a9SD{Z!)WK9EvFK6B*n;{xnO`FqL6nynH;0Bgtp~DgKd|ISpnSe^C z_}Z2x0p|Oj@!)v0(=&V1wU>LuLm3HX+1qh7`*pqFhmwf&KFyJ|FIN9+5Zo}08q`nQ zN*z4x145SFqIf!P1{m#RZr>@Sx=YCpCe)yR0kXDA*=N%0z88|@-pRgZTV=p+f+35W zZMs&?E{Z@yk>Hejquxzkr_6xZ7)o=HI<)&K*Cn6NHt)??3Y}TC>ww7fhM56L>4VEr2S4LvVNe@gN1is|Dn8G_ZM~qT&@i@ZM^_ z`nnN?jEzd1#BfWS#YvPfu45B9U<=kJjtc{8?+Ai?A)o}!rA_%;sJFvcOSM$A_!*U#?WPcx679faD^Q{MM1 zfXw(0Rh+X5=wxz&74Oq%(Xh{tsnRblDI$ji-|)617YRHL47{Mdi2r1Q>~{BaNEH(6 zEEuVbAjSws$OL0mt+DBbzh~&`qUVQv#Z&DqTQCwzF2q9^R#R`qo&=1Q_0kdpOJvm_ zBnEFAQ|jO^%rF+*%XdsznB}47aW^3rRQ?%t$3COV!%zeH(|TFEE>P5vv!G%(DU*h6 z3>LQaG5~^dIPni24sB8KdHz+8ApE!;evo$Ede@ zZ-V>K!jZEo07j&FJw)d$GcG5f~{Cjo2K_tcD9v8x3 z*uB0oWD=Ed4rpk|$Oxq|LtVczTI`RFYbeJtHL8{Z3TH|lg=`?L(mP>CeCPlshJ7r| ztREP`?aEX+(VmN*a_+;@JV#0;n?fBvJNHW_QmzsqxNKfov@J9^6@!oy$MwL~O%1}j z^<^0tvW#(p@ho0RQ&;4Dzo=6MJ$nrrBrw!~Xy!-;0$K*b>ymF{D!f0l)@W#8-7Ee+ zZJ`IK5EMc^6YJyP zcWf#NKiW)shwQl#$>C5T+P(|bz{WgrM%V^9#9mzaml#Zewxiqg3Zkj{e%Eq|uKvSz z&wtG*>b*$pNt$Vgr&ZvPaM*GSyrytpoWkVG>%Ab#VD-@nS>{y?Q@&q=T2{i@WAJn7 zBb9~AcviMQP<|?fqzl;8M3%38g&vGX1>hIVS|(B| z^^l!VrprzLM_#ijmzEs9ZHRt>F2cE&II?IdNQo@MZ8}y!=4QIT#iyByfRzxUE-xC&2})3eAj#YOs_N-iUJXyW(9qn$xqWb=Z-}0yR{4 zC-3jOTnd2DDf7u$m;d_HRksR*LZxpzXQQiyyZ;;@Rq)0n5GjedM!HX~S<%%Lm=R*q z9Pjkg#2Tv?v>fN@WI(|Pc5dhCPFx?N6t4*rsM{@Hs-4bOQp5h;(}C;aOh8aeC&;9Z zN92z&&I6SR)Y|cMeHUMmc7mA3`H>FxYj@pp_SdWnJgm-(+!wu z%gN;COQqfEL2M}x4pYc za0Ng@wU;V;7>`SJm0QwGzA+LxztVF%p2(|Fh#FDk6_)eHm4?}f}OOxZ=P^~B|0$>v4KE(nogDqt?^ z_mqr4NYP4UnvhXR^n}YO-K0is*(FV#vss)SGqTaVat781o(i`a@~x-`(prc{q0U1VTG;^M`_tO~)inxnzuTJl5T@YXJ~g0x$uH(ohLGX1 zgodHfx0Y5QnXuEwAnqiOPUKP1^|Zzfe}yySwki1WQSOpB(WnP?C z#L!Z<<{Xb`3L&Hns=QdN%#P#*mNacr-u13MYbYRxJ8GnG7ntT9Y2B$~$+SF~t1!6R z4bqA71*ih=xx*o8g2_a##`EiWO!SHghbvi9B|6H?L$2ja(;^C9P$OY;DUi+)aNVck zgAAs=oNtC?bPc(xnZ1MC(4V2H5j#M{BrJ8&c-Tf9gG;1ST`Fm;e@#7OAO3P0a#Q8z z>oquR5<6yHVUY6tg)&*@(PtLC<~{*k3&o_` zHaL+8m;&{w%Jxo4B4<5JbSn~j_u6`6iwm%zTFW(_=sk$P6-6BXZC?D_zr)@c`I!Ob zX*M}(5vNP!k$lwDi0(}jk|8ZLE!=Cm`9^$;Cjr%#l_#E>q1E#j?n8gPKlp{Z&{4--3u*ehWcpCbI;3N{HG6Dn^uW!z?I3#hr^o`%!FR%cr$qU5pYjB)UT{1sRWDL+ zAS1({M!na-MFbO8jH|GP{vs{C(RKne9heG_BBWnBN=U?mePU7v%t)Vx17^e7mfu z9kyD8A*z8#sqrnTX)c>Qo2I-c%K2EAt2Ig3=yVPBq*aMT6uZ;^e296_i6H%DF201w zHOwyVB*%HfHBlV~v0wFp=%7Bz1`VJDBue&^6n2~s{Vc46sTuBjM=(q%?+ry!Qkd?` zTt(cDve1`|qc5kOGHdW$j#nC7&xEoj>_0p$p<=mwv25M48|nGb3M8pA8$UU7Fet}+zzl;s}P z>w~W-y(p@E-AV3tKCr}0zY>zY$Ao4~d2Ff>_K*fll14uxkAe>my%aXxc!(>*SGIH$ z_1ct8U_+|ra`SKI;SCNI&kx_{ieyaBod1TimnRK5l=ii(n#b+(ZRPG|*oukukPciz z!hR2c%&~zL)2ZPKor#e1Ljf~IQ4a?1K=BV+g%s)6e|XjkXiefHx=69V^w>%0NY;qtjyGFNREN+**hHA9C?LB0@}|bY?$%Jgw#nmgOslluErej zmXXIKqYj@vr9^ob;JA$>i(SL7NR{|}&U&@e@*cE5ON>I-=K=U!+;gGm8S;JDD-Oj8 z7U)yh!$b}CG(%&06h4Np{kr!vX;~X}I|@wTc=O6vE$Q`RZ#Bg}fOCzw#mKU64s840Pf` zt$SEOLgr}M;=Y+Bn;5Pc{#C>)S<>tYiH}v)->Gr_75NToOeH}{@Ss+%DhF-(Ty>(i zs4G(3rpdiR7jRaUC=W5PF6dZ#pZDsq<;byiVY@o1-v1!zw_0kUDjc8NXLTqv3eIcm zMd@>7JI{nT|I2eo&O|hS2BAxFv@TM!A_}HLD2wpa7jRJ)1)JeM^hgFI7pxXf0KxGER1(HV2o1n$!RYvnbA5qHn>TuY zouj?*hHqD4>h9@8vA|rx%05`V82f+3GE^QZs6P6{rx{#A)X5KffU_tlt{+z`z$ne# zorIG6w3O>>-URwnh8tH&RIPxE{bD2Mgb4+ZV=sG+jT_e`A>%TFIEx7a!ZWQ9*(O}) z|Ma-h>uK-DQ(qd#q4o>u|6|S9z%i*{q}h9*&B|jyarsVK-at^47F* zfN`qZqvrFx7xd<`$q8ef>#0biPK$1Xn>SoC+!4QE5%z`prN^0dL~;4vBTH7Trrjtl zE!{KZ2i*QN(7dgT8{8(m78Kj4xsHI|B5tbCDa@34e4@q0v@>TzKLW3Y!nY37qXC9N zO7)IC{DT5^G?c|U_7`MOt;Lif_fIM|cGeuvJ70^1#z9>1LN~H3Uh#EctM&j*nZWaH zcOV=raKtRb?jJ{67Cm)X`WD^7OE53%H=XGoIL^UnkxOGt{|Ey8L5{WgGlSr}n77%PXQogWwk=vF4hrw? zuF>@SfRJPU$u~Kr6 z(MJmKXC9ocgf5C$&aj=JN4=98 zO*-MRgiJJ9x{NtN{8tANaVzU5q+pUe0&Mk$U6e^{itd~f6W@)_L32gnu2p086Gwk{ zL4v{O+I7Z0qHFwx`k>%u3?a&{>~u%Yb`vsklW#O2E%@Opc&Gj zrIlyYO#tHm_^$CZIgW12AfWWIyU~V9by@Goq;aiEQgayhDUJf7!OiO9b%SDJ(W~If z@5*<~1FMa}E*{%rC686K=H%ENn=czTxnT$H&1u(LrtCLk7=Q^BBNc>k!^*a+#NLv2 z3)`i}prkuq6p{Wbfsmq&7|#T{1+Lj!584*0r^J8HAekFk*CcO6?YJo@FtfSVFp3Uw z_s9I5Af_z#uvjmvT1SL=+OcIdbQ%*7A2=q@y$xY49o{6e5hM<}7=9##5Og*sRc1`6 zmBFu|104+w3}wLAYwR9{c_dwp(L%$DG>v6*qI?I?SYHV^%I_F!)Bxy{??=Xov_j{u z9pm?R>zEuDb`Y3^XcO15z!$W8NOIMl)B9RZ=q(YWu2lRTIalL2`rW?2hfQ$4BW|8~ zWo4-H&%9gBjb==S$63X0ghSs&p`i<6!4%K6_gv5dZb4MJ@A?P|`bQiCts$#VHEh%3 zs^WenvA5wAnT>`pDiQX~G6|DcvI%y$HWub`3j!avA7{A%@T_OeY3WR)$BS z*#4MA`h|oOc6WtH*6OMulmgDqdwJivH3HAJv*<7xaYdzVh(wwl_6D$)f31|j zeM-sr7PcY!$!*VJtJM_lB6)$w6S3cyQ5DI?cYL(o61qZ?@`OCttDgho4>IO}CBbnu z9`fx*y?>s2NPLP=u5PrEWE$1d6jl%E?Q(+HgnN4SQF*OjgRU0_jB7#?^Bcy2SHG_MQVML;))OLgpvNo}J-mj8b45Kq4l2lzYP_%;t!h8 zo)h6%g>isAc*``g1iN%a?O)I~2TJVFMK9OzKiIp-R-5OUMS+rrf`%{ODOiUABA<_1 z)9GnMK>ac-@_WcA!BNCUpTnglsM8}HKZpa z^{6@6{Uk8*-{30V8Ceb?Np?e4dH2s>9GHe2fpmoASzz(9RIW@4oSV~iP(R)B0-NnI zcvx=kwdi-S9JVGN*}ktm%^G*jSEa*!~q zL$_veGJQRtzutPDRc&W-9aJ5%W_UNZwX4~wnOw~2VFN6n@h`Toa|#%{@_{3w;fRDP zSX|CG;avWRmJBx}jjbGf6M$OS;>Vg~LYE1$)M$UcA3i}h#{Xz6Ho#l~>UnN&(nGnE z8vvOM4U3xNF)CN(Sc#UCsF9W)j^2Y5w;(=7W0$eUpSs+$G73^r&FyUwL1TsFbX7y=XtaPkOsBxdQe!#c4VuP4VCo&S1GKiUI}egOKR7=L6Uj z*A)45G3kPvAMH>={7X1W(Q0W)5ZMGNzA4jWC67gn7-1|ny+`=Vo#yRX%z7{6pK&+6 znmQT0|9;@=S0%FeF+yUDNJ(9yZsznq7@5U-79^(bc)A~a#9f7rAqxxby>os&Z2O}z zP*-S~Emt)<`Z4Z#>PA8)KNn%6^|pGx#Rkg7Vi{* zT>wO1fpLs^HlnqekzdfSRM(6fp!AUMncDwg6|iQ+3art*k zZ9=Xl^@K^Nv?CwlF({aQk#|Xxz0k(pzg31fK+3EpxVUYRIXtVw6Wrx}1-4E@d02gb zd_Ba~OpI#i6c!007Pe*eEhaU-Egp08NUm-|8)oe3l5^y-SE1{!rXP%sS>eB#J)f78 zTQ@b7@y7ZY!xMV-EaC8*Xh=CGowkulj-@ze6-{PE71FNA_vw8ig=tS6Ly{YKAr!hI zNYD{sVK2y302;c$XQjx;Br&K0kqe7`{xbal>rjD{iw)<~Q>upBo!^uQ*M=-IJ~H!5 zIARo4xP$$}`r4)f%s0j)Sk<}oq`VBtQYFc zAri8?t!0fUD|*&jj!sq%l#^VoupJkIus2!`2hR3DfwqvoK_#ydQ+P8@;m3-vYHor# z1?|>YS~yiaPR`Pt*=Hs8IFNQ*q+}VkJ1C^w!cV|7sW=!hvCm{<;Uy|hft?NuazL>l zU3Uz)$v~Vp79|*(7gVjpVqtP^b{KIK%Jyge`-lHBtY|);^$LeviG1wv>W@d!mxGi-h(UvAy8dR8 z^(Z1fnoYS*{@o=cK3O{IsOMZ@<$$d(oVq(1rWv7{5)e`mrxd1b4zQPOvVAC8C0KL= zFZy%7ql?;=Wss>8`r@E@FSy;9&e3}1aGqHzG-xi?T(?69r<>5bJ9Qia)24x&-DYfp zuT${RnLCzN@eaXYZ%J4f7Ro-V6Qro%thDj#FexL1$@b5{o~;lL}|Zj%Spz>u;w}Owt68(CH^D+Dk7%Q5fu?MD zoIa^?8(@%H)P{z<;E1r1!#!RSCypS9Z&CiM`wKF7G$9A2pUa%A4@xoJd}sNOF%lo( zMpeNH!UnnsMB}7@doE>uA6e5{#6*FSaD6q#r&%COnlOVpPdH+Qb4pUczj~ecl5!%% z3{U{_N|?pFe4Ly+@&`|ZG*2CsPzl}YtTdt2!0vLwCKJLlW|JpZES1Nc8OA;=kP~N|0`eiUZQNXl}F5{Z2gzC zeBCUz!GTwPHz)3=&w3re5(WQckYEN7y(4i7eXgDnL4$y?QA5f& zsfgl-q}3_A>rqGxWWAcg^nE{B12px{^@KkG7A$t@^_vbI%~7knyJ_L3X94|Gd230DN1iOTTGgPcx9!wL2D z!?4(n9tgj^c&N&VT}^dUIq&6px9Bj2E|Y$dn|iQXhG*&Zbi%#cn-0N~d!;9Z)3s zDZL;(MX^eYd?;nEhiZx9E#a8pb+eOE5%cPl)DZ;a3@H48$>{B@y97n=Zf!!|!Iis$ z3C_(b=PrgLk#KGt4@D_Q=Jwa1><~2c*#tcH@5`=^0T|b;&2buV@`riYTuu;1a-jD6 z4;;7&{2=^)dlBZpl*b@}hB&;iL{p=cx0Ojh1FwG`uaIm}*ThMS;J zU^`*e07f07@!BFdJ6#6qf4x{#YB|xyontfwP9d}3(X9=JXLV(3I}qQ{Vq`a*3i~My zk!(f6Z(rf%z?A|i7UlAw(3-Krb~lHpAEFaSN#L)2h%%>>R^t!!I#ps}P}^kRSpK@AE6b zCenmQbjo>sIh`#1(}3nzp<1jE?aw++Kwf23v2|}6XEb8uW_TJo*K6v?F!v}od`$v^ z4@6Kk(`8-rfG*B%FTfW6jaTDkAMn&2rw;}XMWyY(J2uN|FA+J8Sf|3c+>or(uk>@; z$I=5S&FCBN(M z`$9~ot1*($9>$bp1s*PiD~^M)6X^l2Z#l>^vA2A7Oc#Z1Ry)^s9O5!s%ijXQF7RT^ zsoMb`O>Nd+K3-9!X%OTA)m`74w^R<8uOcYfO1YOWV#$*=?t&7qZ_7WHSaDfG{-~10 zo+ivt(cOA+(EzafxTB2_9?5*n*^cRlXU7&rn*V}-YK;!Ii*+a=i$2{C6bYJ_I*C+r z@WiukUZA1~Yl5dsnDoH5D!E#wyA3Xf`2mWjrU)rxmX>R;V@YqWO95|F!Ql49H;9}T zHwzHn6gpX~l=tSw$VkYu;wj|9Jt2`2alKJ!awqt9zaoDmR1Wa*|4o`(0LyX2r@c@# zTz6B4RSBD;t{tzGW|^bG){mb|8{YYwI8S%@WhGOhQ}C#u-l%I980N{lTFlTNkfaj1 z+>w=XZ76(ts72|F>$sQbGyCBPTOjPD} z;6tJ>{BL~Y%S$_JD5Bdr_VPzdv}U2;Oc?ze8oj+NB)Ye9ey9H!c!)u|CB12sTDRCq zs;~zmRLAbtbLk!rMb6&GJACfV>sb6YV*>j0d2lzxtKNriw4$B8D|siWH!Tr>wW&RX z@f8a@t#&1O(8X!UV0QTa#YnXPt8=JG;q0Bd^tos3xRL`SRs!+w5+QHKSubGUaP42( zH!PxO6CC|XH&}+?NtZJCaNy=cQKsD(PBF=Utr^dzfd-G(xwro*McGQK;wWaHFabGZ zT+q~U$U`n)$QLcRa!uHkEHrt+X(R=6B*G(Ex=k$&Cwt}kd)y{WDCn~{;&**5ok3TE zexvolFm_=)83?Epd23$fFj5m-B%h-+Wef`C!ACanS)%teU!JYBvB|P#So7Skqd3%p zB*Pu+hE(*UBZx0*v(=~;`;77gYNdGySXa%vpS{KH zS@70XxkZK+)ry-V*i(iuU_0M3e`X4?70bbR2>WL1E~@cuECcrqI|<=DxzCryD;RtK zIgRiEj{sz-`RCX>(KmW!Wb=Mc)XJ7rZAu_?Hcgy#MfKAN#4MGk5s za!r5jBp2Cx92mB>9JI4A9bdd=d#)!rv`<%A+#;FWOnQg{2sTvxzTcnx?tDmi30sU- z1h$8S!Z}daz)Q+q<)Hq+X)P%Hk)}*{gW1R95`3cQOaDLnYsmQqd8+lhL`gX_)IoQp zdJd`VteQm)WG%T4%-bzD_W4GlGz5a#xuc$AIa-p?;WoztmQc@OJ|ZIK(}u$|Z8!VX zJ2F&=JSSE&8w7g!hHhzrVM^hjnxC2aip|)*N27h1s_unD`M$%?jL9q&A^`V#f^h`j zq#-WkyCSWJpVLd7jx`+xK#P$H1a5;7F&vA{*x4-y9xG&g0W@RA51W%fafwfz1IwQ( zJul#a@h>Se;Ic)mIAB!#jsG_1cK9;q{&hwJxnIwTYdAW(WL` zB&GgOEOuWGcLi*9&~iSeY*}Z-0KK^0Y>+H81S=5w4w^Cwf4g+zCL}tAvjD8q69^v0 z!p>FK(8wV@&u=pV`K%DNCwa|AtpLkj6ZYnDj*`&cH(`yi=CcvXmjxj2)VJ*|a1i7Z z>*z1<9Un^Bqg&R4JgX(e1pqxo>9?R~|74T|qTUty~%s1b(Jv9f|;;W&*Zb2=i$>yLe|;Ie{aa3-4UHMfk&x_n7z1u)mC%GTM&nu zYpSz-jF!>ugW@E6SR`beirXQOVV>fPj&b^pi-zlkqp}MV!83Q1^KxW68E;LAwQKWL_5XdS-H8@e_zz58JNlFOdKwj*(~MEtoe@i(tpV z#VbgsP`Eq)HysfOsUIaqOVx5&dbgvP8*s=Yh!7p5vh4BI1o%SwlS-MLQYLuYZi*n3 zYz?+}CBI(3ij!5!host9e8bc?qO{{#HMj^9Bw3~`Y^)=$vOO$yU4l5Y`HdY=S&{6b zDol_1s1}PlSpYV;bTv^NgBg@IZva0c%PKp^{Cf@1fkD#b#NuxC)JOI{D=ayohV6@;c+-}-E zl>T~pgz(5mcLpsv=8ecRxqM^o(om9tOe0C1m`_2qds+&ge}K+_B;b#>cPFPn812GE zz@46}FDRYFX8K8auHL%E&(<-dIS)EJTM<}%>;0bgU@hSPP$5Q{;su{50VFU+&MmkN z`5NWXZI1<2t${J=o=9GoYqlxALJC32l1xh9pA*sYelX^I<ug)YIO`YPO%JB=N4>T_eba(<=VG5)ix#+rAlG>v)>Y=D?O=Z>anY#EZ4*g- z&HOYDE1;s@&`yXc>$wIV;+-^l99#1eLBEIJ z?s9zn(3OK}CDB1|(%7_-pvG0cKl*Y9=?s?(2fw#ie{Scb8`xeqaKhEk(gjaWJ`61)Nzn1uN|Z7&*Q0`rZ0owU zrw5ww-;+dA{*%uek_PG<)e0Z&Eeo&$4h7k)7fCW|wGZAcmLbu@c9+q-o90#2zg%N@ zO)($%yy?Y`7RHi@ptiFoSrx*I0Oj3cKVe{~;`;+8r&cl{YN>U<;j-Gp@b%1H#r^BE zU>NXW`5e3rc@jTOx$bRZ1PkL!TH();Gp7TWWKLvGv!0{wmXkRVYGUa3lFO)leJ*Y@Ok zrw-EK;ABGgd5{y53R?h3dN-fukQP{T>Z23zpiV@%@AyU5+_xw=~+f(-3A z%kXEh~``pC%G*|cC_7yZ-#tT1hL>suHY8_5i;*H}DI5tN?VztYodq?*^ z0d@9T235(BzuO9UQJ4sE4Q`C{al%UGeBL$pIdRiqVp^_n3E?Ab_SEU4=>Q)do>F?( zR4_R|C;|5;0f7xXN$0`@(dlQgRX#?F)UpG4*)7)zR*o#{jbNY&PPsv5N%Z@NIg1UT z&2r}iqM4zh?%2r*i!!tM^mVX@94Zx@MY0EkG)*Cj5a3@K#9A3VUh80- zeCYUtPqVOb69Ce6x=EBfaOf+3*RQsA-SzghSKAp z9qxwih3b<@po9~OT|k%fIrOUDwRW));yIWqCQLu_UA`^0wj6STNOgD&)o0OUP!B-# zQRiy;MC8PQ;Uz=9Bd|add~03I6hm)Bw@A>-Wfir`lw;#Cqa(wW$O z9%3j+o#m|_s9K)G2H_f$&n*zew3KNG_`+D)Zzj}IKPT5`dICn;ck{B0(&^>C z??UNDY#UB-L;+#{sU=V3`pw6zI0A;mC5r4zkcZ8?I8ZZ>;nRLJ-G>B5Nn>g4sAY-p z4$V6sk3YL%ZjB-OimzLE2k%AT@dy`mQdTSyA(c5+Ek2d6qLT00xkf>8s`IodfNr1A zzO{kK9|)S|wjal`r3aEOtlg0F6qHZA+4H0_oBo6}db$ziUKSCxEt5hwoV;zk7e}PzL?p zRYKFnfn;u!$NY1*z-&Wcxn2u_XPL0;$&b1&DjQ)R)dj5G~|S68d<7k z(fJrvsAQZny_h@1V^JmkGKIHnsWw-W*uap)f-(hOBNHlri__4U>D+fK5|(8{ZNCN} zO6>Aqi6-X=*NLpbIdskGRrbWsODI{~1M_?^7lFhp-R@DJd>F=CMicQ*vbgK8-q=uu zxJh7fV0$Df;h2Zg$1(}m2K=$as~y25Tzn~d<%82SM`Ql>WyuNasA&R~eC!`;3rp-b z80>_+d(mn_8Lc8g?a4qmIr!lk>vAdiDovMG0t@;~qm26D$Jl7l$)TVS z>0L6Tm_oy8DY?@70J(cqx59IqZFk!BPL?l> zs((QCxu9g&91+-2%M^Uxj*w`}a@=k3jS`_W&8?fF!7j6s2xfV7hNL3NK{uBF7B+8v zh*JNxENrh(hGkgCXhlJ>25I1({3|pf^xGd1*1k)b9&T-Yw%e2wJ=F7t5G%SO<5Q8* z(fYB0a61P!jh&^zKd8mk{N0)mU5gs=rz)OPF0PTXL;Mh2`mi7?LxJ z2_$f%Vo%~A1D*Rw`7)~H2%W!eEmx;KK{7#qXKKXGlh<#A=1HItiJ%Wyp+!|wBCc^) zH^I;pnT(KJgtqs9uTQ~a4Vt^2fF{2d;T6D6O4*Fxr{r;suUFp6ml0AvSSH#-{`qG4 z-146y{l2*BFTQ%CS@z0B+%Yz?#LYQpQH8scOY+@sLmim8Vel>1H=)0~5RDmbLn zU&X{HVb$Kc8A4hHnmT7Cj1BN7#S#}^8llNF&ajdOUe6G~|1`t#0SZZg9ixl1&B%qt zQfIS&%7me-=9cXRsNlLEEb=t*y88ZDLCr=HJhK*!$37t<|Y4VDWXbJ-PgX2q*T? zdwz*^q2XlKSIKV}KT8-W#LJqNo`!H-dw)PgL;kgzsUSKw9%I)%z-D$Me&re6vI(ES z_uy?j!76lPbsJqy)DJCU5`GJ|=jgpKV*NU@{j(B@`>IDsaR0)MrRb@$K!h#+*I#{M zTcr#ydM_6q)(h5KUg`?H9`l=8X4zx}DzjW3wzz>tJnYdWpfqez14i1W{nT*1-zz-bX(x)8h*7p_P+OpPxkQ^88GE zn-14#RCKV>?_ix+0QP!JHB+>jRu`Z)>K$kFo4e;#+K)Dkc{x5kxUXJS%5l#LhCkGR}oOKg^cAqGn35G{!A7S;7i^e-~h{>A!Wn z--(+j@ojjWoz$4(ok)Y=X*(s~ZR=-#YNxct5N%vmJMg)u6u9$$A^0JISL*2R1-!!y zd?)G``eVKM^*t9C+uqB&)|WQAQ7hM)tZdKt%X8lxcnXt{H1NoTB`K>91Gt zkfkn>F&LGvz?Zy}9HMn0mGENCqJq$Tgoz-NLRr)d?4rsj)ypt;Yv2=a(eq+;?F~S$?wsuikz+nCej23+p5VKbpnJz^kAKFoCC0Je&`dgIZW0Mr%04#0(i~BSy z@w_#_2sXcj08AEgz}K zS)*%|i+%S3yb=8k5N~bev+xZ@{I1}LtSlRyud5vpQ{gW}4k5ADa?P{hmrN&9 z05aof0A;UQxl4=lE-pY_e1Y>ikIzcL^y$=H7LWMEuXysPTHZb-Pcj0)$QoFVGnbMV zO5>L~)@;2L3@i>;g}u#so$@OFU-u%-IgNGH?--4Ql)SxE54oeGD%-*Ws}Jpxu{DhD zaYp$f0*DL@2MSNcty2PZ|H8LUy!{p)GsJ~!!o{6ISA>wa@3PO=G87Lss;wax+?6@T z{c<+dAS1+$G#FireAAo?ItIv>h5bc;4D>d={Z4UoGL^X9BMIPxqv0oywbYxL<35%q z1T5{f)#=DXzgSNV%##0~jyq?<2K|bfKI!x#Qp6bA{^3gc216d#k58?*{OHe0)YgdF zdqR{zzB7-US0LSIBoHdlv4N1nGOx+U3rpyyA7&pH+rw~5)HH06s!~3_Fa}oawQ1& z1+euY6_k16RuuQ<|l=~sxThm|c>Z`1|SONP0bRww6UUp8FP zbYt5#;;LF6_SqJ(sp?tVR}pAW47J^p=4zS>KdP&U_%mWG@hxq$^LXsyAQF-Is07(g zB_j-j3v^U&=0%b|DRP2`b-e!c6@-)TMvC92{!D9AsQ0MUNZ@{AaPz9iihIIFo z0Ump8?^X7+j+AUDk%r)+)Xz`-KM>*p6r2J)aJmobJ8a(^b3bjJ7fZb;FrRFvKe`+I zw#Mg~Y_bV2D6Qcs)z>eC%+Gh0SI+j=AAsa?_hfrGr~y{MgxPVvTLEcC-prz&;17VH z7X=MJXzcFH;gjX1YD7N8t zP0#W_*+iI8QW@06+S7uq&IcJ#X5lAt_2d74n_Gq(VoqD|0Vr2i+-$JH|1Ezr84o#Sg4p)pqc1z#qo{t_Qrdj@9jcR-_c3+>Aon4>mV zt;OC9>LG0FS!2%9L?lBm>Foym(#Om1q!s-r%_D8nAU}6%xg0uwo9_t-5W2z@z?DlmYfooo7uu;SGh5+VkEDuU9 zS=hwgaSF=AVFm{@g=?-Da|@09lzYNsjROD;%8NB^hH^%Tg|i9@GeqoFTx@SsjvBDC zmbjkeM8KwU!Irm1*nST@%uIxCb+#bNcL(LgiiM1~seR=Kpgf;Q ztMY56KDXzSU`To$QMzUCr*xq2vmWw%}5lEr@sS?x6Yg8OnqGovb2DxQ6ap?;#i8+Bp${i6aVt!vR;Wa+ zI!e0Gsao4|!)g|)wUlRYZ!#|5ETjie57T)w(iYJ_OV4Y0+2(lv2XTv znlryo7;Du5lUnP9P7ML_b`)*I>A~I~zlOQj_(M3%YFgZ24(u7I5G%n(Ja`QUJ%(|W z=4q2PEvUZ9<;Ddti2eAF?S&FvYJ9+5Y1hJ}Q*iwwe}M>o$hJRTbN%Sap#9JQcNlCA z*Z5S6*QMOOR5pQUt&dY>YrW6GkC@)Hr%_)Y5ySUYL_m>i19i;0XlL--V}M>r*2EP< zx$Vnv1(kcNA@$dG+|B0+eYS%fVAX%e30Yxz>nV3g?;uhK_6tN%lq$JaN}Ydx+NM2v zf)Pg&R21sKJV$aR6jrAsWn%kSY74YuE*(!AXP@Wb&~^_mc`Ar9LuQE;&&Jl=la|LA z`yEdLpd9> zD-w|y3q#OK*bZk>Wuk8mf6Y}ac@F1Lqa5;snrcMK5Fi3|zW=CH4#%l*&kV=8(ZVgt zUf9)zV=zBZA8-|RzBr>YdWHcoUS`h4K{GDs#~+CSrXulKR=W#(ZtH&N7x6zKe7HnUFsi zw)e2wAUct&s$TzfpeX-}taoC-x9Wy9quLo=lqGDz`RF)51TUXarQ`aG<6}?@nE_w- zF-IW5%qGu71aS&B@I{;5HD*4@a`@lhFzVEB+0wI}+NX@RwlGVa?ljmnPu~Xm#J+z8 zje~Ve@Hx%wbgFmCBW~BUEye4ABivX&6uoVuT-2I@ZH1?Mz+akmLhH` ze16vf)vY>19Qje^LwJhh`aJLSW<)?dE$%F$pDXRM-K4@MYubWFW6R77YGkMw5C2G$ zn$XF1&IdTPP~G}OpcuP;Kw`3AvC{lG(KYk3{}o^wKwKmcvgjQ_0MVAB&SyEh!3rA2 zE5K^VsroWf=oa`z8g9ua+sdbSh8vr-T?CdGcnHCSz0Ufp{zEuC<}ciBt>^J4E!F&T z-PL;D>6>>H_#9Ijjq^OOW1jzCUN`He?MpE&Supu+Hp@ANN&p1%5dnpVqPTu?P|Y{d z@@Ri!wruQH|2?opteu}$xq|Y=a4q-5u-Wj?BOt-wjJ07cWwU0BRNNNNWsra}aA?vo z0SmiJ&Q#Ink$MP<>+v+W;|>Qa6rR8v=UXZHh{}Sr+b7?4dEbqHf4mfpz0)tH>;`Jp6x>QMULB z3d@l)j%Tgp;UBr{EGC1|G)9^8NH@}9GHgjj1PFS|3YT`@G(}lm33m~TjEf6d~LD}Vq?we*@ zkK>9-Lymiu<~tIHg`y4fnJ&i3}JKI z)goCqp4sPhBr-OWD_??*Yw%NNBOSWPx*>4DzvTzFST;Z9%1Z0gVLTGv&9IEesZQ8g z5Q*Cye4iP9{q*}Z+|m_L6c2Hgy@8ai3NiuGj&(V3QUwsKe! zsPq)A%aM{C|O?da@n2zT7mJ z9bSRGOE;b`^VY;=4gCjp+*P=X(WV@3ui_JZAB|n`X7wTketNF|wK{y+ltMglF{prd zhYCJN0+)Im@xZVc24y;SGiI=9ajW}OJ(PxqCY0>&AhhN3yDlrZeq9xSE$i2)Vuw1@TzY|WoHR8QYon2MuB{eK(z4SJK_9^Jrk+0%~4CuGgvmE-Fe%kpU zy3KF4?&L0pvt^H#=sSIHhWuN^y@6WF-ky{mP8-N&niBlpwlVhH4wu&Z?$E!X8n0Ox zr&4=3G1WWCO;~I`t#1l7Mu1fbG0SiAJVM;H)3_%m0Rl9+YDD2ge|)z0a6!m^zDiYSNgbgS)6X~TRf+t_Rsdkiz0F*(?9u)~ zKN0#qQn+|&I+;JNBgU~nmYZY85GBRkdS3Rnv z5=@kXO9ft6juCQ1o6t5rZX4GF@s4EC5n*{ES~3IPz#dNV_Uu^)$`*T+c_j2oH#iO0 zC_9=l&$+T)sk90-Z*+h@DRxaPf{2H$6&guBlY&=ln{b57ou|?mJ@g#I`~uI>xEd^E z_tEh&!fA+zxxOkY{YaIUsQ!7);7BcCgH?KD_P+C(y;c~R(^TA40!^~JKfBruv^m`R4 zX^L+^qNbX$2za#h5_26LIEPVGM9s??gLK`!0Pi;p8vG74v$`FCP%@iy%O40KFh}F9 zbATDN^=!wX0#$ZFGeITbc2Ir?)2{dS%~OgD13i{lKmS{rz-!dw>niGpgSK=DEzKw7 zQS$SA{9vVN&j*YyWL=TMv$E-7!F2;y~QAi(8S%hz-NnSiuVaE zE8Az}How;8#;CfIs6!&wlkxV7oxbiI9eE3GFm8=zk5=OMu3Vm+OZ%q5@ z6M5V?CId5@;$Ezii@Z+*E5a&`s~iDGZjv(Wg`N91Qtbu-4TJ>!%R zfp9mRD~OH-`NXHItz=N${1aZqx!tqImRP=K9}vo^p7))P(Tn%5(V@U=RNM>u1577z^T-B}f!Wf4+oUEUbzU2`^)#SRrm;01&2!0#uT`4~?>aCCGAq#+3aB9yfd z!IIo8GYSn4+xI(rhhO)qZt>PR)o&qp?_qP?3Sos4lr{bWY}8it<8VZ=E>`kj3KHCO zOHOj>%<&1I8`{Xr2j#BJq*Jw59z~exVn^pZZ7-gk97Y+#wAdGhaNmI)5?L4l~dOyvQ~X{ zq@I-DAOYG3Y5mV1(c)_APrc5z?|KW=tikDT8uaW)=4aW;a!68yM8}o;nF_it`xoPs zq}%Zxz_U!fLpM4MIRbMF82qrtyLYsRp2v z?NmYu&XO%x)KwbT_@bE|D>AKUymzw5;H zTa9M>oDddfcDxr}BZ6f`o|0Szpy#q+A!ZQmrdRn9Ts1lpm{r2}aA3TBRKfa?;mjW3 zT=G#42$YdOvSMbp9h;a}o%=$@WBbPM3DX|XVrFquwPXh4Ttmye#5^Yk;bozi(Tlr< zpZqjrf8OP-(f@Xip(-vvC99VBrcRn!;70qI@pq*-gI4Fq$Fa`R%~B2{~U{QBOt)Za^SA_x$jlV+^6SEq!|F z@gBPWSIWClxIag?Mz)r2mLnMzV-sbiqZLU9RJdYg&CAhpD)I-|t>Ho9H@>^naR(G`t_V{JP3y z!u*^o*VM_pLu+h}eJUvCEuLXD7?sFBv{U}iPnBt3%n)#0Re5&mItLcIOg!(SgMC^O zUEBW}a$ZH%+tSBwG)HkV? z$h$*>g4rxv*$J*P?F0z{#Bh5GS)fG>)0|#{`4$TC#E;}4*W>K9Dfl+* z@3><3K*P%Ve4L$93$^W*Tx!i?FmB`3Ru@nGhzQiI6^)52C^fmXS-DIe{ory0Rn`{# za}Hj4o4vgS!0kjxQWd|KTsn!)M`;TJBn<+cBKk25xTg_1ojYadaqy>Bs&!r3ImY{8 zI+bc=^NIhgvJXNFc#T+82ln@=oe)CAwif>VkixP#oxW!<{;+wV14)gh;A}3Umj+7F zbOnh9VE!EHWvZKTDc}QnUHDWr_Q77(x)c`O`8clJuKbHQ{X|W5lKxKqJ)o8hDpR36j!T0=D;1po(hA9f4qTX4Dc| zGQ6ENdPx>{;lJgkUuIhgA!F`iW4YqWe)nAJG9*NEhUwBc5BMJ!Yx1=x zfR;v%P7f`+D*KhEwa%Uk;XHlN2di0qm7fRwp7oz0r0hGBL*S(eyqhqM>L98my6961 zZ%|H|%*o$EtU34SQ9i&*bs{C4l=hQUI5VOmIKEO=a;DFy3AR6bO=lF_CyR(vpjSfU ziDK{d#K?o&i894CiI4{RPwkK9vMwLJ-=Qjh`Tk#^8gCzx&eCSTx)<-HbJM#!s zm(;e#iE%k(YZgTrhLpDZ&$aXFBS1*FRk28MBSKNdt>=S$QEf8VxW;y5t>-z62c3Ye z&r)Cm8^1|}I53q_(+4g!0TF90WI(Qrl}|0hDTkb!1qf9+^$h1I)ir0v;5tlwEC{tPZ<+RfX#CZcgT^F3A9 zOL*sGlL*j*it@9$AQ*-SKUEZ@IsYKK(p1EXc_QEJxn}~0qIe#y)M01S!E(5sh78~I z3WP!*lMg&~53TgsupYYmH}%Y*b#loHZ>O!kalcFf;iiy?Szqq9HSeCEg3=7w$*vVd zdX0N%$882oy@#u-ed_y0f!+A(B8OC+*7u4-4ek+pyuF$NuNJVFIjHI~+JE0)B=4O4v0#bvGOIl4!Ly^hC9w2z zeT*%34N1>i#0&~PjIN}tF&-k&=01I#R_uWIM9IRgIwsJgbFUq?M%ENOQ5O>tYpKm3?P%Zl~Wm?q?AS{8}S!HK4%j*hW7L@&vakOZ0`C za2j!j+W$t|=K0?@1n6D%Fdd1Hm5TKZK>Nj$ z+o-)vHI*#{mhu>WX9Qwj+CYPSy6e_!@N&0z*Q0Q3DzYG+VxVICXvg!!y}udEBV6v{ zE1@TD!6VG3@t>0F@9zTxA7gR$B(cnIPX$_sCZB-u>?R11=ef^gDB@GtsZXN9G_ze0hx!=$KC>xuYkPnOs9U?r$rKX{OYLVt1aXOC5JkRBoOB^whfsM!{9=HPd)yD{g9<8c$%y!<$t&OG|^vvYi@;a4OuFUtHu< z$5#$;%9vnM~fK&clb@-A*3~D%5&EdtJ#k${IGELgO8}R%H%a8MzH8F4hXMbu`Km9*di+rTW!5qjmTb3D4U0Vs9-cx zv0tZTo>c!&qS>1Eq6DGP#LfRD5>;AJ)Tk2F>u{X77|GTK|AH}t!%fpg^U3Rq-Ss&x^i_YH;-U1^rthG{3hN`eE&@dV4?b7uW3r6;g%JUK` zjwD!^C{M!g$ln*wK!OZcmeCjx0n8)Mw2Fztj*|hS@26&&3uW+U@eX7wN@q$+ zh(--YG3MT}+p2+QJ9{8)L9@wBkFh}2gyiITTUniEB{m+>pn>c+gHL+gNtyHVal#ojAzIh}XSnN<%Kj!hQjq8uG~CRSo*6WKnpGAC%Buq{Q+^g^y3A zM1MVdOZ^1z$nXy!4@0j+r$gdyZM4!AthL`7Z`v?ZliV*<+=^AYI{yB%Z{%gn3(4B} zqa0$VVPhZ#>jVF~Ejq?;E?}kx&}VemLcF8w=nC+H@w!)$4FhtC!OuTw2#_{+Ya-cU zV~dUvnJltH6#<_!7OLm#hV2Y-Gz+MVqaKB^3~YKJbj|ezUr`F0RpanMF3|U&xQ-EU^3jTHP@#RHo%R9W;os2n| z8e6zs$OQAzOkUFz3(l!}MF?50lyNyr3yZ2bnnRHGKK!wH8}1%3-G}uqqq7NHN@3ZE zq>kYr-&l^jLeB0dP2Cz-Rt!y@G5)w^n9-n4=xl+6=0=(QqH=>35@9z&w>Mp-uOZ@q zaVju0I7gC+esiy_kG@r#Q5YW7S{=Z~a{|pH=>=?dJ^XH1`i>+#z#7-ReFL!cw0Y#L z&;7+ zg8C8O;QT=Y;nEEyCN>eSaz~KwSYqOFCn8EiyH2|1X1W9UAem4-x_z1U;SL*qp_BBs zqY@&8;w>a6&qEKzR^<}xel>v+lPo?i9&e)^p**l$6f<2QjgTwebU?1lIr***)MgCD z(5R6@l&doB^eQ+~V6+4)Rqg@M_FNI`#~OU^C_s}g4X!XwSHrFg6y#;WRLXmYjRo3C zPgV5qUei>NrF0Xlz&1w&K-waORZouDe<)%geW?pKR>QwSdg&pGGTgkP*P147vTGjq zbtZ4*S2b>h_BiHB=P?OQh&_pU9Gh(NyrM)hM<%hj8*)#Yt%WO^PoMLRG56h&Ag?Tn z!XA1d5uYv#YGU3g+L4^)*D9Oz0b=gPjBt3Kz@>5e8m*G#uUGkSovKAY7*5B-uF8{e zRO#i5qtzBX6FGlk0-WGXY2A%XyJZ)=C)u5mbk;Pj=%($(`h6HD*~%D){2H`rr8mgP zq`vd*b-h113dif7JT+BeKND!H^?-dKF^01*oWS8r=kO4u-rI4@p>PaWs$ltyS`CpH zfo02Q91{UCHcK#xlOB@a1*$7>s?k%z^{U{imOulPD91RQ6xCg&5`!$@NO`5(es$5r zF_Qs!&R=s(-H9ds&gWij$8n!+J77EZSJm8k?g&kN5zoKy!}YIol#-xDY5g1p+vL6i zfIzlPmx_>ge%;qO`W_&(iYt9J+Ukq7a~dJWFeHQFDzJ?(WSFld+*BGrbOjuEC60!;%Q6mLdHOy0RrS<}d*7uAp6A!b6B%8j>>5JGs(4mkM4MJ+X zccJRox5x%wG4P2AHSED5iu{!PytP7AFkKy6$Aw+CFqUUIvKZ3^)_ptffm74U77>4h zZj0XKlg?2g2$N^KG~%_r7eR5R0xwujo-iU(!Ct{(P!DwY9aGPMNU^kD_w=6JClr{m zuT6A^QsP4C*P7sLPv7insgQq33i25|^G6+rFHX!&Eal&0Gefb3vyZLsdyz;0ty{*Q zWaq4~9EuX#Kz}qQO1-(<6iu=uYjNW^QKzTBdVz)stXh%_jQ&_g`w%_@-2Yx!(r{!= zz`?_!@CbSF>N^?cQvx?b11N$$VhE`%q!HLVI%3+rAsWB@aijtJ6UDfR+3 zlRSpp3kK9iN8|`w1n!uAKy=A4x7*~c0V%OW@_+)oRiCEqaxDewi7uEPmRV*2!}8m` zSyl~FvT!5PnxAu%A;_sEvt!<*vkLOF##R-Q@Mu8(^ASx`!k_ORhjOt(~5vRs$vWHXED$^g1}aXmipD z5F+})U`2DB{zxg@smf{+N_aKl0HggDYA7`->7pBvXYX*qE*|Vnx_iz5u#%PhU!q2k z6WxGBGzc8>{HFbaRNB-|_=0G9uxj)A<-!lGS0XFfat%(GslSh5Gb4V$0txg;C@k~t zYfP&tiHwr`uf}rspH>!tg#{lc3E<<&B<6S7%*`uG303(o8kE1d#!=u(HZGCgBR~BE zyDOd;Aq%h4756>ok?-W&aH8v>%$-5f}4dJWVfZ+&YqL#qcQ9TW`jBg2A z!r{&i`Lio)gqnywCWCW$PFQr_oer3b!tKrQHx1#u{sEIDk4?cPmY z+ZBV;p)dnD78Da4KSl&mVI64^Y+iIz#6mR&+%QFY)^jt$INfX#_L<^~YIF~>Z`#Eg#fHUcazk+l;Ul^WgP-OD!_B1>MCNd?RNx zynUF_7|HrFB_OWxVxA!hz*E}Sv89k25j0z@#(2IWbT}tqWU@Iq&hb9>*b}aYxSY1q zsv%oM>ipGdaaq&ZMnKManDk~?8n2>bGc>lHj#REmy}&|5{fZ$-q)hC|)pWW^L4!wO zvMO9(ggJ_IdV~{1Eo|5`cH4`bq#en?*(}10ftt%(aThaN>aj+N-xwaDj=N&Gg7Hp1 zC0sWiG{sR~zuzSN*2&qJ88j4lBE(P-h!A)hnYaG$_75n3{0InCLSa>0HoI&D)Rq%P z)~ys}Jyi>&gz+TmI2Ft4w>N)m8 zi+Ceu2Jm+?W)d@puZdEN1FkSuJz(&4TCL{FyyDw+cB~mtB|qqw7!=7z;H4vf-xdHh zV-Ka}G)yGpkm-i!F4r}61&a0jVMAjC?9d#-`EM=&&83T0+77?IaXHK#(r&C)#t6n0 z`{ZUOPHbl@8h>TAs8Ry`(NKeWbh^mqH}4BFTRFi-Vm0B&65akpjIpHhDQY)-w@N?m z{v``;NZy~;AT9c}=JI%)Tz^1(J~dNwngVoU6ZSa6Thsg1w>6`7c#lhHc*XMr1Nwq1 zHVB-%6{) z+uKB7;7hgE4eqyXs2vV@y(GBROC0=yMFw$YK;cL7HmHFqL+1WiK9s>++1%Ajh%m)# z(A{gH5xL^t0J1mK~#e=e8GVtX61n9_$muGY)0%VD1HouRwsx*XW zK-pR4zSxc%`qi*L>hXhW+3EUrC2Q$Z4J%Z1|KeScQ&ujB9$EldE(wCytks42d?|yE zk`fvXYaW`@-rZjrZdU9Nc;F+$I-}jZ(f>!JRJZR4H8*`w;#9`rVeEmu2YNY@mBD(> z3e;J$??ZuHqTm3d-}ak!WBHfQapf_sX-F+16s#xWU!vAypMs&64+)q$aQ(qD5|i@w zRrjK!-lX)OkqfD6F2Vx@&JeQJGF$E|`4Lb`ESE8Ez0@erAfcc~HqD*+G&CbjFXkA4 zQyqF~C3l5f~ zjxPPTdbw}NhUrG!dY5}nf^*a%C%4i_J?gV}|FZZwlzXEr@+XYGFG2=)d`9Lbe@?k4 z#AU;eb9Hek5pP;UlkcOo6_PQuy>2YNwOHFM+X&qt&(t$z1&``ktA==b|(OuW*UBkrAtHhMD7u2iazIBR9zwG!K;Cqg-09Rii_Nm=r1eC!OOi zxp8@sr$zwkAqpCI+32NSwesRE%8^fr!JoD&^3QJt;)7< z(NHp_Q9~aXl_z6V=NKuByp(e%lEZ3?M5i=W#;>FcEI7*NasA((omI&BMyPwh?scWP zB)fCQG9NTiaq6kb7`Vy!{{|O2Esl8I30H3!%KewYcAX@a=vHA$Aq`?~ccJ0+08J>M zA;pR$l<8`Rnky+c=~Fs7ZeWwCJGR1Wh7wh)c@d|}Hp}W`bxTXFz-Xvg6vi%B39tWP z9%oGVH28+Y(m;Oc@@F=V3@YaDNnN+sQGgl>Vp=EXEdZ|{l@<%v69C<%iQic^>ta0u zJj*bqhl!RIYIGRR7xmDVzHCTig)C#BJv+{TvcBXE1ig?##x1PnmgS)ZEFu?85NQ)d z`vRLk9zBs&PaK6GB-C$8+ViERH#(JvKKTR(J_5&tuI@c>iZ-|c4(ro{ca0r48?nwz z>83$t8-uTGnvDQP!9)#p<4YiDGU?W50<*+VpA#0lXRtI~rtxY&MmMKDRH8G|V2tbA zsdSWG^Hopi!L_43CqaKfPfz|G_PviIFQ$HOm8Yf=2)LJXE3&T7n@Saf51^nGW*aYi z6_uab{PaV}>B{CX@j`@v!aMx6_twc5*lr-!(are$fQ+c2y6qIRuv5m?D@5uQgScxm z`x|Fz!)HJwUb7eIdp^$8;1lW=r57Hen_itdT(kWW3xg;z2e}U*D_wo9nlrnyTd&G? ziJYX`!bP*z9LWNwIR%BXy-W$3nE7PK9`iU*nl}8OHAarG#( z3498v!JK3-@$BftGF08Ip7|308T90h>IyfK%EW6}ru=Z?nOz2v@8GU^d>A)ykH=iG z7xv}w94*JYo?qTIHA}#oCz zr!02ZXOmo};fUYDVTa#e5IJ6l?L`;ysMVD@Lq6(S4)*uZ!fD^~jtJvoY*QvLq!ZW8 zoEPz1!Zlv`%u!ryc9H#l7&moPmTD8T<8BegoW`NT?WZ~c=j^n23%*>Z)P<@uWB)_# zMLyHr0z~!fN3zNd9V_57k0#L=4oz-Ve@=b-r)?yG29yJxz5^|Csk{S7pUv;LGNd1y z<7wr0jL}bdbK_M~bnCo3X@gA-D&Jw(TTqfD;ihTY5N3lVW~(zTJtcT{2PU9vI7WhK z@PR_ST{T?fh4|0WARA<>ylX%fwBwotk1Wfikbs*iRm8qKuG0e~ugi1G{FQhA1J%Cw z$v{>{{A7*}ua8+S$Q*KPG=sS~5i}AtMSO<$GlT^oCUn~%Q?v4-z_^lqU2i5JmVI_9 z6Zfg`6d9d+mAM0*t`*!XFkCumG6<)(5=ZfH7td`Ce5!3$W81h*Il)`o4>m6&wQ)#L zFSCfDNxhHx{h6?=Z0mB7k8!OVu*uVJx_gM$5{3HV(nMc_AWw=Ajl%_^XN?6#%hLC@ zZFl(0euOE1=}$zoVBl8`gl#3)1ugY&i?D}Pr(QrgpCbkgqI2M`w4E;3LqhS z>bmK>MQ?+syB}Q90GcG301bI=fE1-l9MV^#B{!~3F3UGez>@Z!6{>)j!XGPuuqZ>U zz|Y%%9>Ea*CdWUI=7$R>>)}OSCgZ$rD0(gbg43BCbto54R+dugan&SYf5`HNw0z_J zE%pkGG=X)4V;KCM&}SG6co>8mK3BoRxVGA3%oiPj+eg939>F8}EjPP8qQ;$xp2#sz zDcj=L9w=GV^kyYW*-3zyNOw9{)no(F%NDziF@%%8tycuj$1GHnHV&Qb-y=qB1;{hU z$cVd4Iw*%PTIrp?Sq8R}^d2BJgbe0Ucy!d$BiV0Se+Y(z>jSMIJ^zS4BVpawk42vL zfx|1bbQeHGS)ALbPYBGcjkz0Aq!a^Z*e(rZ$4du6Ro4R2uHd`|!TdeoDw38-0WjRo zeudJ(a&rt%e^Ds`Nb!cY6nc5kPdUdfhP4%vIq%9u?8lY|D=84$G65A46=vvI6*cvqP_-L?KgR>P_jnnn=6u<6{=CkPF- zGL-1mV?Ts1iOUB2<$Bb4dQ)`~QmOGx3_eab60pI6zDzXsvVKUuE8`fne$H%oenfmR zwY{hXWkMY^$r3n&e~4rHRX&p$V5H%dNYv+Uxr@=h=SaJmrI@dH0%YV{LDMr>qk>;4 zpP=WKGn+ES!esPFy+<(n-0MmJU6e;e&osId`DNg=qanC=)DpRI^c`=Jig}P%}MZ= zup84Kt1paUS3rtST4v?dfeQX~_Lb316XrLmP80L+u>O0|fhLhl@>Rn(UATW@#(Ve^ zVPrJ$iU`ZDT}CiV=WG^_Z3U7b^pE`X9n+qP}n=4spJY1_7K z+qP|~9`5{wN~)5b%G!(cmceTWj|`gMksxX3cUee8kJsd7#JTSJ@x3Q! z0~*;~#o#X$PXYv($sj!75Huq5zNhvvn1b)2YIvlZPo4P`+fV#ykfv$)3<= zzQWT=1UBdRb%n`AV4LA=a55-My|+QoWI)6;F~11t@bDb_-lYVq%o+tvkBBp5GjRN}9i&@*o;uWcZkxiyh?D5l+}I%CyIP z=pG1ELw9VLHyHJ(F_LSZRe9PPh8F{oMDwlr3LZbVACyi=$5}s&HRJAd+kVxu+A1}$ zeo~W~kkoJU%0qsZp_nPKaPy&Me7PBY)s|JefLt>mJLPJH(xwiIa$W?9guCca1imhL zMepwD$>T*pu-=GsJMttfhLhnTIU_>TeP5$XpHpjsvJ%V2wDziF+FWlG{OIQ_-Q^Hz z%r&YN=bHZ%9^4XIH2W%eNkDjQ*2<^I6@ndc{$s_OSCKRVdv9y)n2v=p`<(u1Gb*iOy=I=$RB?p_CUM73e9RN1R`T- zFRQMIAD{G-fTniyrb%=IsTCggdwg!D0Mu&KfSLkblv3`XF0^9Zuo;C@DY7ow@}?Q- zq63Ql)m`DFHT6!1hUBf&@t_mZSmgg)9H@&Iu}j;T`Eb*w&?G}T1sibz%QM!umMZU^ z=1MQdDrs$?SgDWU$7iro{kRp4)Hm5uGFN)Di`ekl?@On5>`DlWR}P-scQ1i13`7H& zVU(#d7UzPrvz6qp7Y3&Tl$fgd2b8#xm;H(-l|edN3PG zW009%6JZLOaGj|kV|QCMb+5#RwSE-9mCB3QBM9_dF+FoW=}?-GC}rh!itow#M>j+t zsua=!&%&U$nDrNW$=epejXyJ|K?G{OC%2wPrE>?ys-1)#38SqD$=6D<;*9iiVI?lS za=UBZP_NOFs8fWqQ|JF*5r%?1@j9eB6^tXQS2e2fpMy*UAld(BuQ|`p2fce^rM2(P zS-};MpO>Q;N2yjj0=r<9YH@PVGCtlS_>G6U)8FaZ<6*jL5#dtj#Q=H*dX{yLB*gQ} zx+T$5M6Le@GiqIRaobfsQB#_|#t%#YaoxT1AAVOa!rVZ3YT;O7AX2}&$1sz!e6r4G zmR6Cnqg`D4?s0qGyBMOZK;?29CvGRJ!K{EvC+N%+V$poi8s9u_TEBcBS!TI^*#;-_ zDWX|ck_&xRSTN`%LVf&1?=plLM;~(Sz3n0d2H|51YKs^%f8vT7`HFj7FcK0xqqMsv z1%ovu7>-|-B$|xP*qr@It`(S~awBC9*0!Xn`f0&59F~zJ+3S}R-(y3t z6ut_I%K#;@CSR_C%;_Y28RhzpV=6+9DV3o1+YHc7eurUJgc`IkPAvL|)ts7miPcd>0YAkUjQz*?kTa0&1BCF-^P(2S?qXsy9Zn$?sy(hk7UMQ8Q$5hIo|Ao3FKKb(szBgV$oSrlW>qcA#LR7sY zG~$>D3cv%xQM97Cd0ZkcK@Jes@s0JQM_tw|i;Y9hZ;^T!jEQ{=k)*v$6`b9eht&~v zmJiFUhpX+ys>Ju_@k2+*jzkobHn_2&^{Q7f;2Aq8L?pS+oLP7JwX%c_-n{W9&YsRp z50JWU-j=f~Yrw!+;v$1_mZrozX85ic6%7S!I~1@nLKXADcrt)~EOK zIgL}TK8(YN-5ngj%Dd1Z1=|m82Lx z15I!u3w(dR<(0~R4b`0gU`A@${rN1I`OGmz9j3^@HL{czG)uxY+nJh@N^V?flOr>D7z&kRvYYXc20Yr#eF-vyddPP2S$ z@1~|?E97pC-dT=GMRYn=+xg5i34S!L+v|`dv0jblmnd6yj@y<|6!Iv^{ESOuX?9yV zXC{DELr6Ed zD{|kWg;-9E7mdu?_#V!Nc*u1f%_@zj{zY@LTbGSC=~n~ix$D;rh`{B4Qn5-iNXx>ai?q3pfaR9YWK2fxys<{O$zht~eS$UNFjTW3>{f5FN3PvIz+hpooMZwdC@me4x>Og97vCl zg3@lR48eB+_0Xc7Z6Ju1p*u~-o++t+F=0%_FOX22Uwyq@esm99kYkI60q1)^-L2p} zf^rB4B+@H5nRn-Z?CeHCzcWlp!1o$5#fwN&Gu*X(xXn($1qf>oS}JN^_JP4RhaM=o z8=Dk@GPnk9Kl3iU#;|b(VI_? z7cjl@GVV5@Nx7Af6))+osVI(eW@Lb~8`KX;4}_J!2LAD35n9~4Kl~W86khla7lUsf zaMZB)^@<3YU>qinx?J%KtS#QASo5pwxh7%+lMGw@OjGJz=Hg>&P?Iagg-l)>Z`iWrd2|r^PRC;wp*SRFW#NJX}C2BViG5kI5ld`Hy0K`xE10zfBac7qsOi(uP z3(JmEAmsA-C3c`dfWQ<=#eit@LfnF9yI-4hyz);pa8FK4(DM}00eqE>B^Ldk-vzai z4TcfhW{2kEn6PQTKXuUJ5s5TT+VgH3S`y*UKPY1a$&}N*-WEA?e&50O0#O^KC!X{A)3~XCqB?zw!7UVC*67 zaFK_L^p>B^^KJjw2fe3upxsy z#jPBW(=0>qPhd*bMa)HJ56o=^Unn|0ym1=ZK*dI+1X*_#IL|fP?I*e;#l@(A!At$t zPKSq$yQicgEOm7f%{ygBx{#k}sId!yBT?cKZTakDYD<-p+HW)DL`wn<1SObv<9Bj& zO^Jguy9jX_Z~G!f@&85!&=RIULi#SYi|Q0`aA!NQpQ2QE5x3vIj(m&uHb^&R{8rR( z*pak2aZJ4+AvCmZ+A}70EJSKdNwJ`s_*wPLLVZ+@f@F zm6C!rvgy<%<7Er6%u5gq37>^Nt*t|DiPbuP*?;Ij(l-w1K@;`F6H|t%0P=!>wroGx zL*IXe3*=bQNIAXR0?uOnn=GEU6S@zvytcF|WhM|#|)So@`M_0u~a>N5wzCo{85zt#bSJ7${hMN;T z?ToH-S+z6oMkVhc2v{X)6nwK<)EN5OMS8`kI4&;_>-5&*qM zQByG1nK`HcL9qn{g{a3?uQn6zTPcn^aU=N0SED@Ob3+ZDXocNt_BWY6S1TU5>+^6e znI1MG$diC&9?R1Dz<+uE2O^4RWjl!+HXSI%Ja0l%7KdlY>dttU({}8)5QP0-eP7Tc zM`1v`q4j-sm9>&dLq_y@p-(k}IP0z_>EB@!TRb|;hj91Rp9H`3u5#p*Tv>iHZly*1 zG__lBP3{y;(2|bR?gijDp{g;kjIWqO_x;5E1z1&E*FS(Nh$yK73WBidX4BnBmvl+9 z>F!3PBqWuRkZvReN$Hf3ZV?2ek?y--!#Th?@B4k<|9S4cJc4_zx%QZ2{6@?%#+rNW zBt%NMQtQ=?HsyP#*Rh)M*o3CuZ6D(@Lc@lC!I66X&s)CFkT_Cr0Y(78bcZwW%Y%4lR8^KHx%;+4LL!HteY`6N%I%kH=sOan4ebevJ>BJwe zu;M>c`Ng-qthI>qal4aEGJs`fJI=s`B2saB=|vrk5mMpZyDQwWnoc{jGB6A1L4`~F zHD2(kDC*x8J_wPm>qmP&x`nVB@~EZ_~T1G;K@IxC8la`GdX;slm*L~6ecf1xn&1W z$YkR9@)2)GmStgj&`EReG&}LT=@2yW*yAvC!GIj}P{ihTp`JI>I!F}El3zbKd%g$7 zR>fsE2|7? z!P5+_TbvBBdaCqPJ5PA?GH#W^W3-n%_AR$Kc|gi)@X@QZH$?%d{t1Fru5^kZ;tZatiU?{SdkKj^m+0laLRHlEyEiR``9S6{sTIiYG7TwJ_7NTGc&%7A3=;@*_68w6x-`TXgO`63z ztiU5BU01l_5((UjLu}XS21Vu#@%S4eII);xaspAU-2$w6Nx#HrZ^=d6!4GJ@b-I|) z+a`}HF0D--tUHF|2-yfT1sb0e3iF_ zCbVH;Q@1ncvPnB^G}Stc+G*0&Un_j({yMG$d5c`QEU+qsrorjj2?v@fTgz9f3er3k zJ(|12i|#0eKl?(xB;uB*v^pxf>%v&*Yr$su_~O)ztrK=K8+OcT~xC%#KpdgvCs-*&w6xTAl$(SdKc} z5`P_Qu9AuvF@UB;$k)$A5}$Mi1qoqZ$<<}NCzRJWLxifIyREFe_yJCvPtn2_3vm(E ztD55Ykg0nD%)dparB@=q_$LZK;w8|<4&bFTKmH|CjQ)Tf1&;&eVHJL>ho(|B9{uYj zQVX9UWed*A`dC#LUCVuaYK_enwPz(jW8b?|3f}ylciOc7njXEYIA)WtcW#p@DUM2> z0rNLU+S6AskA(Mf98STb?oJh3zUb>C{K={Jy3m^|j--_fBQfAJZCZpfxcbatzmmja z*uSFwqdQ+FOz>Lhld{`h?>fRFd(toLFH{-%kDK>4O{8N8T&Lf5Y&krF{9(6$0`Atp z2pS7A*neKEjiUO#BF4&qni7j$X>*k@Dvi2maH1LPy}CEd6U8|$VGAow6y}`r@ieej zm_xv8S68Bl&zi3sc|zD=!Q46m@_g<2r)7HreV7n4o_H`mJ-Q5n%Km)d*v~MDA1IW{ zR$MSDvmGc&-4Y5b2-dH@nJOr61ahF0H95;}tVD_l@Hw<LLF#bBh zo>8LZEoXehWcA=Oy-MhorETte%CG%-i#1roIauW*Tz$i!Ve;T@VeKW6sutca5PrP` z=KR9&&PwDAHkKPO&rL|>)c=Q>~X;|~!q_mW$SvB=o_LgL`U(gpzBgR6`1c zLD*?Ldj3fu0=_712r#`j-BpQ=LeA zqX4bf9FNG5)9bU^glF8n)|m7*<6e@9`&BG33EZ(Zmlm_Ty~yO?OomJbZbhLnOK+6v zAax2|TivvrytkU`&D0rld+)RCZ_+(+e-?Eaj)~zi9m>NVaK{<%L)_(|~b>Iqy+-*8W+ zpp9nsLHdum+KFLzWx^XQM;HidKOblDM&iMu6^fus>btSN!yw=Y7Cc(mE;D~4T@E4M zMiFg&E?oCa{i~1T?c+C3b^Y(&)}JZ;l=&IA7JT1bVM&zcWBZzfA~-XD(sml2P_o)H z+@l(KzP?Vlf(ZYldR*(Xp{Vr(i@1DaZXIWAlax`IcySHN@DZ4h{Ol~}!jrA;4#MUl zOHbKXj$T!a$UgD)tg}1h@0{zKAE7_LtIS^1wFFa=%dW5dfn`c)QF- zNVu}m_G=9NN3)ASu}-fYLuM@`nX&2VpTZmsx4Jf&)c{>q#04sGe5!+0BE!KSUxq`Y zU171QWW`E&M&j}|M8g%tP?Exw!o1cg?tT|EO>YP>tmuFBRM!!2;caz{uDFU-_CtcF zLvv%_A~;>91V8Wv*M!&Ch%+LtPtJz%9LEvNI}~uxHD&&i%}I->KO~KLruc(m=unc_ zyb+e$)aJReiFbI!G@K_-_7KROJxSmmj!llc*u;sd91d}+jKnLe4ei!u>_I9Y zb$-a3Zp;#r#@)NU=%{9i_-@$!$oUoz*V-LD?<5?#tlz`lz1>JYv+n3E+Tcc-_;rbC z<%6f1Zvu~|IAlGv!eS@bHkf|^u2sRUs`u%MV|_D*LY9+D!6b@3WOFlLk!>V6H-3)p z+fJ#i6vAm)_S$;#Gy6bNDI?ju_$hJ?vLPxpvb{x{#I_;DVGgRPe6fx7+5ubw@59ET zx&ZOpVayYy^6yppBxrbco+ediyk8RFK!06R{(a;ATOE{PdL~L4@zKNbV2m11+J@RP z=d^pGC#CfuCH%@tB~8l10md%j5nA?0w=}F~_FI-h)|l|sUNPALnLZwHClvRxaKZ30 zYAq*%p8=Oo);)<3 zm-Z1;8sks-A%tO-+^W1;!>Y=*4*gUc+F+2im6TK-n#LUtO4edC$sMl>nmPr`PY zbT4=qm1vFM)WbF>p`IkwymEL!KY1L7_w}VgNm~a_vIAS@05Y!JN2jFYbg4T^#KwCA zT5-4}8E+hg!yT8?ZcjzJJ^Q7bKq0)FyY0a1uPyjxgk`U*X|0_dot2Qt9$rJ;8iAMb zU39Q-);LEksVYs@k1d^i<9P-%+N~*f#`%^C*ts{R{7G<|ffCQqBcrS0K??kv?0E=& zC$c^+SS(zr8JkR1+3-cKBVX31F-&B3mj}#fP6E$)*X)hDmD| z_=L)~koT7-Q1Q!Yc9EP{<*yL|tk^vODE zFl);WTi=w9ksp54G#0t<43}@F0E)2d$ZLaw3S524x~F-3jZ@{d9}fgepX%&~a&@;- zg*;@crd43RvmN}!l=4@0V@_f$(foo7#bedZqAi+&jLdTTx9kMyB@62h{dP@f%Z+H6 z1is$EM-qA2Hg(Igp!K0)T~4frmt?HpEsxQN70jeh=A$S%q9-LaObKX zbzr-)5-pA6AvG>aw%8yQEkuXvmY2m}+#A*dSy7oq(Aid9`7?J#AR6K6UYj~d zZT0Kjcr2qmNQq!~FR{nTCjK3cGMvn2k}xEQt!$!;M z>!dMft@CHQsXluw&%rAoZ6HYTi$;ao-&RZ=^yP9mkFU^v|npT@Woaj5H(zSMNY zy_rE*Dcv*9#MWAF6yg{vWhsi9F}jx*^Pr~V_gucE)E87gR96q<>Ue7c40J7d!4b>- z`X9PZ{Kfsq8jZm-CFv(dmHh#jThm{&Y?B^8(fHmnriSC(dbqY=ZXx>6V7`?`NU(*w zvBGPdC?<-TfV^_(Sg=aGVXWl-e!;LfTcGb^4;r~Z!7aIXvl!=C_!sbXN3Z=zS#CYC zsMEo)5)FJHSvhC%zJ76zw=MnK@iszY0^V$ysY-xIq*D#f{87{&d28Dj>}VQlGLELD18(6}R_U!zDWC1`mWiFzgw#?kM(S52n#|JGQ_JWU+?a!bdoMHX3F= z{sCjGR3R4@VR6Fj>XN&+Pfo6NYYMLCV4@Os zw}wEocwsVg{4-@gIT^(tyTq$4FK0*CjjU>kj(WMd5ksr?aF3|-RncM!3qig(d}sw| z%x*L>&e655d*7SWkcZpTN9u3mZ6I}$liH^q6UGKTXWd>&`u%YJ?W>|z1>ZXc2d@;p zZBJFXDeE$x>xs+{n|Qh65fiZ#2y4{u<+;YW@SOUq#hKyeu7N z-9L~yvmi-uJg~aUb6I%RCLqtCp@VP$w6bgL@p3A${}t*AK;$=EobxTX^q$fD6D6V5&N(T>FUt zH(r2lDypObKUY#YIeB~ZM5|T^8|bat`LHe2Ovj*#Ie|aoDfH&Onq|cæ=XiI;c zZr)n*bL;tuL-Ca|cmtM@QDSd>zPn^N$N*mXXG5-Ho8yEP`JxQ`(TI$3tWiDM=D?dB zQpsa7$?=bmF(L7&`C=+u$fk(JO?$c@`?QXAX((oVXql2uTA>UPKQQxN=#Uw@}9uZ zK%}eFG$Y#@&zP(nl5HQ(S_H>%D9jLI&SQ)2`rbNuMiz@#MNv)3`HHDNAQvC@0Hyn0 zt2EjylBAp|!iO1C!X;fF z!G(?(0CuwsYz{X3hCo@stAVc&OS>U!Qs&P(`B{*>_fE%H_)O!y`~yB>yF?Xl^kak% zWw#X$;Av$0eGPw9E(i{@iL`uYjpTO3PKu_{JiO&N8R4OYtk>$xD7wT3AHdSz$lurZ zTfct=K0EVES>o^Qjyn~dtWiUrf+)u#1QC3}b)_AnibrrtsB4g4nMd&wng&#!PeWLI zmW|<^exeGsbB_<3>ly!|8QLvVk#Fb{3kKUdQmS(ncdp!Bi=;?RIoRA{wS3q89Wz^H ztB2+zL1h-t5FsycgFCQ=GD=LJatVT1FZX2{I_emB_^$b7H2hc`o#nJ0)q1@ZPl z4b8J2zqd`h*;Ef#@4XU=5zcxVW;&RP#UBJ0Jwa8%9pGHkPV$gU+56+iA^s_Q5r)J) zvB&B1kG?Ip&I${;xTe71o*u6mR%8SvO2-|xx*!*?xMm#dx7F%z%C*Qv<}GmtkH3u~ zF{Ozf&yW~>NX>mD569KZwh+e)Z^}nB{O%+D{vxezqNskhrb34btJ0q~3A2S9tBt5B zzq=STtEP)nXd+=>D~B2hNQuRwx5i8D=SW3)9cp@CB)KY`k>RcKB+bBDT^u0#1TWJu!q4?-T05KhkWX~ zZ%3Q{{%P1xn1L#9&?i}h@;U8|Nt_Oxl>rw4L!J}3as4)xK53jN-JjUX*UyQ{gXuB3 z9{g^kDu%3&__Ob3<~JNYgp7^}3)9^dS*3Z;r_&OQ(rDO9g0C>0^1Uf=)7?1AC|^TFVRwn_r%!-y?M-XTYXo^2 z@4jyeu?b$}CD?v)Yy4|7xnPkG@y@D(^L{qo>{Lb1a&JCH7xxsuV)B-sthco>>2`t& zXJOQnjjx1p;f;p|$GGx$MnQZN6IFZy%OrE3R`OX^t$7H{7I>}3R@#4OD2e!kw{u`m z_zg?8%Pk%)y-R!Y$PmvqM$5A(NeInCBHbV1<+Jq$Vb^ROm@){p1;2ic&30JuuX0u* zeG>MHS9|UFXkP+-n^Ws&aTJ#&?Dt>UsBmdnoZOf8y6gYW)1>4{(YA58fQ7o#j^Py81x8;oQU<$Xc5RqDlI-r>|%GPl!8{5Te9|9r9G)fX9xwL7&Rd9HNioUDo9r8l+Xj60d z`-d2(R{<4dp$P`P})A~AzD}CuvayIe!Y;rAy{3fP&lY#F%8&MW*W#h=+OR9&r zp^?G=aZve0G+?_jz5Ej=DD~IjeHBidDW{V#VXh;CO{K}hVSJJYLoWvHv__FXJ-gke zSf$I?Kt<0NJ>%=Z_J*ebn+?4zrqgMbJJICDQMuf$!#@k5+Uti*D=#4jO*HRH{b4tI zD(JOCe5dRbqK~tQ@D?)Xw)_>+BERqxJx}|<@pwV7H_0-YSs<>|JdWX0*1BeTNYq-f z$SNrJh0K%+G2e%YX3ifT1}SV!Qm-EhF8$`Nr&2wDd6osgMShp>sYsE1G^CsJHW=<6 zl9XgH@c2*#(hdmX!2BU&cGXBFuEwtyB-tC%eNWyKpH{Wb5ULyh;loW;0sBcs`7hrm z%*fit$rV++w*(Ws5^~f##(OXVx1pX7Gu&GysF;TwWRMwO)0e_@1ef_MuZ8^dZIU1J zsW&PAooZ%(+Izxz>US)Sp0pRbONQ)6WHz@eFU)4=5si}CZRER0hunV(DtMb2kDDru zBBdzrw$0bB&skZ#5(lrDi$iozKP;}YrSjqM%N_8G-l8uyGQal18yPS)*lPuX#P1ge zed6}%y%jh{(kS*!RETR#+_>64#v3*5s?ySbh>RcfH(RxE{{are z%6sslI@gJPZ5E+k$m_6+p{s<-2E!-#HF=_HT-94bgyAysRD{E9FCDzz7`@bIN52Y- zF|>jop;OUO(tq~JawgHC?eX7C_ERG%A(Fwl??jlQ()8AuTnK##Xy+dIakmT=3)Fp_I9 z1>D*4y!DiDEoxpeOjV03S7+|0!X|HT+3RpVvL7T4+o6Jw)hr8)i#e-tLtc=~R+`^^ zKxUTN|6L`q9O7RqExVjEs@L`_r#7=y-%;Xsl#iO1Ix#^kz4`DVceJrAO`Dk2$w>cl zIPwqOXie=f_WDr6`)EgSqtD|V6BURkm$*G?w|j3(iSr$0eCGdAM=I;>Y)jPU=|h=&v-gdzQwjKP(lhvo>ZfagH6I4Q} z86VM7n6?o~%L(NS`@BspAo)~!-%DZ2w6aPdo(jgxJE*;1f?SxjzYdXLGGR!qQYB)r zT2>b1lgSFx`ypV(B6}GI9(y-R!t54|+eqeuId@1`wb)RpzhXE`Pf&451ADP2=*uV% zbF%hbE~gl{B>jlsnod^c5~MCw$&D^Wp4Vo|^6s9dR($heQO|$Xjg2LcEPik@?Oz8^ zCQAIUzCRPEDQBp}b%0=a^4l95G(^{6XA3p1fair=tHGx zwl;J;XT|o$fG(4Q!Zq1>qd;~F@7O?9CnyrsGvk%bKi_jur+M4A@}-XOhs=%U$9^X` z7|tk8AcNv!nO_^2dbnE6RF7T_Xvd|Z8u3&7f@4&$vf~8rzu$2EPSRJiIY|nk4-b1O zqo*z2WcsH;?9l{Aal)8w;p_@o#xn-;$?&7fH?NMgNY@Fyo9>KkWsA3IVQJ!xIAATd z(;MWOKs>D|`)hbx7h!CvDSbTiH*G-##b0^$+(t23A@f;Jy{J=PYZ$`Gn$5{f~5wcAsZLA)djv3nqYL`Cf^=7~O-NUP+WROzpY4APISas<9)?!MfD? z{vC_N{c-Kv_EkfpctlCYa#RD|9QEcs@%y|N`EcQW1zM=^aV?N); zywh@P2bEJ2rOLyW;DHSAd_u2xq4Dw*N}Y0n<_evB%Q*UEkXVX(iGWsXeR7{*0oMH* z_gjatUnDaAycKb36dCDG6#BHygYY#r`bS(Fzi zc!GD>4ayZIQa4q+)Ti=v(lkxv{Fk4&8nA-ZKPd0dd-hUimiGi#g2f8#l}aCg38&tU z7ikEha;J>Yqd9PYl$UC0afqB~>7Z5?@9J%N8{OtZ+nn{Cg8JFGTr6Hn6ag$dApzJ)?;sGCTy&>FEDh zpzRvqF|Cb#j~pcaP91NWZe6m9x%1nfuX zJv`!!g)PTsd#P`e)z8y3jARQTx)1LSZ0PZe5Tr;6ntxJI6=Nq=)l(Fa{NphSB1wzG z2aEbw$eWKH>5YqATvrHCv-46$rg#KD1ZA> z{$Rydx6yZKHKWKFtZu`$*(c(}^$niAKy$C#{BVn^j!^4!TG_{Z~^!v z_LBa!yF~7fnO)}{4kt`}@4vHObAH9mb1+G4l&mQgHJq&3Lsh?rp?kWeD(E!2nu;S* z(pHFdG%&wZKc_kSYwzB>=|$c+0cU9qFwy(aZXR@cO z=R0|qKf~}+(YIJ=Tm+5kk?tc^d7S)YzEGqHnOpkSHNdmHP#!x-Z+-R;JWM8HXt30Z}6WAe`uz<_4>_*;Bf3#3Nizs z4sJAdUTtN>ea$~MRNojkkF+fe@H3@Q4pQ6`wiEfWT$|bUV#bLZw zqPK(DJGchIXz49HqHD{7*&d75U?l?f02wckQe>Fo$NfO5wb}uB(XBw5HNh7 zjo-HBO`;!zcsAMho6Um{=8fxdHU zuqylzoe3&8n@u1>le|Atg5>f0SaMPTFEn~!6lNH?)O`xVQ28=Y?emF$MLdO$=K{F* zJM3)o8y$7pft8tgeS4#a$g&vg9YqLHlVW=g+>x*e^+s`8i%;&pEjb9ueiTI%nDXvZ z^?>rC>0>W~6kR^amf@*-{)N*12p2x=;;aZ4*zpQPcE+K?;-4Y5JU?l4DOQX|K0Roq zv}C06i^=}=`-xV*mk&NA_9=W9Gp#=Y#9YtD)*7O1cJ|6b#~6W?mKj6~I(x;*i2#;& zvV?%ZLKfz>&mlIt)<%}L7S;&o$5Ps6z=))xB)_Z}rJRMGwJt;?4z{(ewGqN%R?>5x7mV?-W$iRGH zey{-eIam-Z1QrI1fJMO)U`enPSQ`8SEDM$c%YzlbieM$MGFSzy3f2Z|n^{7vZM4nx zz}mK89k7nIwyp`p))b--96?`OpK%4&u`@M=*n)Mzx)!Du=D=SwGi|UQ7y>?L8mtf2 z*F5{R1?w9D|Lh@PeN(VLfDYIIYzQ`VvNVL4gN?w(U=y$@*bHnAHa9YdfGxllz+X$S zrM5N1{Cv*ySI`*&zKksNz?P(akm}=V?f^EUJhSm@W*w(=UYzMXnJAfU*PQW+uIzy~2$e}6{G6K+LrDXyPKo)_U z`_d#>*y#UZ5`yNs7J5eJ1_fSf%yU=^=kxZ|F;Af*q~C`0JKdZ z*NCwG(=h)N7tDV_^G}>W^o(ap0@1Vlr6*Gm1M3wFxB}$AX#~W`0M!Om`4>vPP!kmE zGfdBQdImNW_H!dRw}^9&003shSEx;8Lu7x$^|4}dJGeMw{N!uEFbnf+66~;=- zaz$Yh5OV`tLl7$?JqY>(xVw=lAUF`(O#uL&LjY%noH^{pTHrYPUZKu>jP*hF5@osH zt>1i1MuLwpFz<@A!B`J}&h!$r@FDEYx~)d9w;x&yp6X;pq}mC^HRXIe)mgPmBV85ef#Co1`+AtN^ubfo{%A@ z*eTh!blraYm}92}a)K2HWa_=i9`&|tK@BPNiKT;u1y~2pocQm=iyr72TNPLEARQB} z_9Ir2=w}@WuykO!Ib=lB#Fkk^vBf3$9!KXY8gFo&IL2hK{MjZ~ag9HqedeoVcPi6c zXyn3`7;+otz0{z|fS=nqhRsP42VCi1L*ry+;#3zO_3zPwD4HG3u1Xq-%4sGd%Df@t zfzL}sNXH)T3|M7V%NFC3vy05`)OLz_5%2kmRb=b>$!5vWU$*LK8@-b0VgIRI@Nk~` zi76Gj);mU(CtC7a@)!u|cT$=oeGQ(+BgT@8|LFI);IfpXXpy zNAJQVJfvHmavl9SS9w_afhd^_#j6y58Sj<$OYjm5E8#fk&M_~J9~1k$Gwe%R`>({i zkzXU18b6hn!P&nQ{yw^?@w5Ns?pI`kw=pC$8vV#7>)vb~NNku1G1_ZIvl^XXM%_;E zuT|b+;x!W0x5Ko)4wZUHYs|VxYdfABccZJYzw0A5M_Y(DHx}k1Kh0f8txoOZ6>A$7Zv1Q54EYg~kwXZuVn?OcH-1LNKSL-*?E=J9ZQ&Dk+L*iXOT-vZ)!E6E{QE^#H z*1is4HZ)CZlA2#06xwXqKbpi()_)RvaQbQd$%sLomtfe(TQdrtMU`r(w4Uuj5UPeq z^|jyUBZUbTt3sOWo?m5`+*n9wxf@@}YK1D`=#drI!cegwV39J`fv%)EHp`NZzJv77 z1dD;?pRx2T!2*&RJ008eeCsUhqC)`lYuiB1MnGUec~t>vsf#pA0PxkbG>hNDR1dmt z|DBtGSlG^}%bq#7wTYb$nXOZM;I>1VMRe=A;*z$q*LG>oam_X_*Z?y>w)q9B1ZNgtYso5#nW$m7J z0eW6O8~7emZVWT>+0JcsgStohbJg$~=G<;$&H31xu5qq|ij47u-#*Wub7E_*bq zWy|Z%3#c7U)M}tqk|&@ZIx<@w6>%Io?k-uzWb9K90ymes{b;9WzERj_qS}(F?lwrz zyW`Z5ZK{|&L->%C(@glCO&HNC^RZI*q5A?!VU~s#JH7b8_6n8K)&#CVr{QExyn%-+ z=8kTOYL;M6U*i1lx8oCnff-qway(VpW2g%#Zetz4ZP$A;ZA&zAy4D&hLicA@7Y2UL z^j4!fx^p;{rkXSakJA2h9W8YSdf?ouM%9Wr=_x`t@6GiEOXHG1PxY0r6guUWwk-o zZIU(Ll93>~xv@ApD=HJOyOiuk;NOh9J*MK#jtQnsmJH?V zsg*qt-0Kd0Cp^yO@kw~SZP4Fwz~Bg0_KfF| z!=p5=84ZXnYpF|>7)sKTTktv*M@j#TEv#2p{l9Cs{}x&lCFI0a6>fxL8{_{bx#fqgaeoSR#L5ZM=kbb0^%CD zLEeqzpRUNj%y7ky|9|9*Y*&1d0XVo^=-KFQx+2?!BVS$Uq1nI{SERdIwqGvvEDZl^ zSA4G^88XIs(0JP@KIwRLD^TzUbU3ZdLr~a$Gg9(cB|CT zxrpGgQ!<=F7zq8V4p)|FJ|FKb&upbAP91S-WOTJ`uN{ipIt&F(Y%lx$D&DPLvv8P~ zUR+|d=cvs*JScR+3GVRYb;qgbE8S%oJdKF+U_)6$&jpHzqg_Yg_Y>~X0&2_6a(Lhj zfhyoBLX+Lxlc($RwI|#Lh0W0!Gu8+zwZmC3>c>>-z5E_~M%=*-q!4c7JOOQvt!+mk zGMkb|y2f_J&a5bBRRlwo5Q)rjq1tS~Nu`a*lW&znP8;(r)3icMrK)a-Eb|a&Voki{ zfvBwAJ}XC=T^>qy#+Cf2jy8dh-+T2_oIUQD_{8z7b!+6g(-oGjW()-?-B-un`Tn*# z5q#JseK_4DY?8-fJn{KME9$YwYRo&e1XPw)W=lKllSlE29}LZUOdnB1KlMTKi9<9Z zBhn%wGkj)A_U^U;^^^7&t&(5iBnNK`FCheF^Vgwk^+)%v2R&uDC?mpwGJ^VF$_QGZ zj8L2d$_N`C(dT?PcTEI_xo$O-OD*EC5<|;~K!|Pg_FYy3Q%}TI>R00VXth5l9}inU z6E$gBdXzC&0c*}`(#c4^n{2M^MfkGl1c&FP&1Z6Jx+)=rXU)|c2zw0ME_hrkbH}l` zJ3E>-X{6-JsC!@Zk-qtGTFt(YO(1D}QlK3)Nw1Cc7SfKn^bR$s?CZM>{8~sC=4Quh zIxDdqc;qz4G`qGOr&nv=>6$rI2ZO@+MrhObXS?+rS0Npk?39Cv+7kiW20xT?6DK2p z7d>)?Cvnay9w=)-t?{P&z~*Oh7fdYWpvn(6#axCoAQ6x~O9VD7yB=%g0*Qd4b=Rx& zL_oPitjlpXcQ(i_Z#IZCZ&m`Q4Qn!Q7U@{g+E>a6>ctdJEpOEf11V$Wf;Ig+R>i;RzG9vMS51tb_ z`N3GF=!>ITms!?nq&i|}7*)3u2s>xiy_VmH9t_LwV+d}camP6tG~s3Wlluc)yU>Tl!xj4>u5b zX0JsazkiQBEJF;He{qmi!k zXA57|EykHA-q*nH)Fxb@3h>T8MU9=-Pb4NX`HlvORdX=e$9YWYWN0 zQMkMLt7rc=E$5+O-nLNQm_6El(rGtWgmp*XM)SnoeDem)|M$ovqADyRBzPn8hywkP>$jbN;^U&A z_`9`1M|Z8aK?mFdx=eY_OQHWU@IdpTt0~XbTOEI;JWT(Wl*b}P1n6y0I-`cs!#7Vn zs1b@xyBqYbp)07l*Vvp8W`#->o9gTLxhad-UNkdB*A0=ev9c)>eqiD|0edo$Y512EI&gmuW_U7Y{k@;LEZP7Yp5S{I(-Vd4eZ? zk5-In|CK=de&TFQ!V*tSJdLi6oj`B}dc#c{g5%XXiM zgbR78O?uC<_|LON*k=KQ$J29==w@)c>!9jkz58;`?;zVqEkcxmxw(DTpkpfL0R{

pE=D)UO#yX3>JA6!^aX96ouUztxilxxtC z!oL-RuZ&-u=>4=A<6+h!%wV3B770QfK!`i zf=En4yv%M3$$ZqJr={r3bQ1ExV!~u9>(^Rt^G>hF4Z16UZEi$c!Y3|gb(>o9Ell@1 z=8gq7qRr;S@krOBuqS?XqYr4#I;X-42smi@4_~{3f}5VkTUOtd!czMYnIXO#t+JTfO3rKll#;s;UcS@kG3dE=hF`%s~25qYXrwqv1bS=o)yfnqSenf>cY`qI-*cR(r z*AVM!jEeK`?iLhK?!tB?C-yk|Jwg>f%Xx}{oQDUV_#5!lwJay4*Emn>GFdvau-WVu z-qmdc4t0(dPN~n2)IMBLe{R4gwV`cm@hPXnmhXw%0+)k}=FFlR+7T>`5#q@|V-Ms1 zz4`G!+`hiq{J6+muEZZ8;9O~bT+Mr+H&OqGya$>{T@621i^j|52T(~ufBxs&HqhqB zS@?lAKOXQ~VhGl|im;igF%1}7P{K$Byt@Tsy-=%Jixs|_zw;gU)%<+SJd5t~2a9es zmi*CptNC5os^}!H-88F+HNpAu@l-P>?ihVn#&r4th`r;3ZZ|daZ)D~Xk`+da8(nuT zV*fbicM>n2@{Qsw&Jo^OdNZc9**Ed1m^!vD{R?=`lKXKr2k!1Ft7Cp8<=vUbwU5=u zs(kXj`%SoT^BSKN`A9xY6g_Kx^r6~~ao$_g5Hs@6%?jV~zKh&tN+H`x16f;2U(66| zLb2mW0B2X=WIU|yh*)6^FI#Icl=`4Q#h&v%T18-+c4tj~DxSe*k+N^-8{fElbGhVr zLglKVmaK?D_2c&=W80=vc!3cQi@~;Q+3N?BSkryOGqLTT=>?SDrGsO=tQ2MQn<%=6 zf{n60<|5+?$E1^Fv;_Jv-=;_rUOfq-*`=SL7f*zLsr9O@#ikH^APFNmmWR!l?G5x)A&-Wg?}T*;--Ez( z-gRqq;cn6U`mi8FYg{g9dIXh~`WbW-RxoC4rWCJJ`nVwhwE328BeDJa@X3 zr(nCV8Vp2SG3(WyZ&;)7$TS|_ihnZ*v3NLyD?r+gsY{AJgwf!IpiBw}G(R}EUijd6 z;bymCGrlKTuFDXM5mpb_dV;kVZ4x5m(plQ_rZ-^ssXOB-*3(kMZ*HK@C)bc3x&SY}*fKb-I$%vcIpV!uQ+a9VY7 zG5_8E5!Nq7k!8*~$JWe`%6WmkVmud<>sOaW;pY2)=~L1%{QtpM8Lm0&+0kXLz;@DZu?(4XgL zvLJd^=p+nuP$n3dpyLcI|Cp4K;s0Gu=p>960y8q669+K@8-LCuWTJ%v!NhRR#8pX| znEshZ{_ntLVm$9`ftZ-iJIf#@D2yOxX!ZzVW`Huq%zO^_)k&dh`Y-U(16!FcR0t&w zRfsIGBjjSTbGBu#6Fn39I#FpmTT@`)4`3jw-N;3U~>%(M!8yVZE8(LeJbJaE=I+z(rf|!f^j$<%KoG9>fA{ z-2(J>$u-M4Gr%E~>&qi3*VJ@Z*}i_u6UsKr#mz^6ZI*N6`^#Pang=>7)FiKwy9Vh6 zxr@d5jNApAmqJ{!eL?O*S}BMlfb}_NS6dG(K$qbk5Cc8WbHUGuLm~YO;_JkjFNC@v z4%N)xA%o?7{096i7nlRYna|DWKLNpfA>svbs2o>`U-KC#EX)_so)N#WlYfWhyj=|_ z6H5F-j;qAaAh^Lf)P>Fshxr24|3Lgg#0%n3Ij#~v8^1~X0%(A9XuSAOus}oCUz|f# zb%pr(_zmLF;Bd}4)Mfuk{DM~~=U2)7iwiRS?Sf1xaUO_V7U|o z>Q5Jzc@YJuS+6<((-}55MY_Ms`J{>nj=5a2Wq~&-26@Fpd8} z?m~7bUgw-$^QZHme}mWa{v<#V;Fa-)vtIHFC3nu*b#njWo{WFHCv>U#o7d~`Lzmi1 z_%B@-8iZM(tJ7sTyAb3O{%cW~;S8IbB3)n(hy+~>{^sFwRw(??75J()ulG!#@Si70 zP=pw6`0WjH7qUa~I_K;fUgvA;4PK#{#yR}Z)$l*^dLh&W@qhR&!`b*v;(z-s{e=x( z8qOu>7v%oospsQ2$kAVfL;zR%i}-g*?z(R2E-t(8bE0~<0xk=z} z7e4R(UkNvtLO|KRMCgL;b7uZh?B&tFN^OHxq9UfcHo$asO| zMdov1@fWi)Uj^&>ZhEM1U+kzli+&e-t^W$Gm-AfA`VSAGJv(zlh|9L<8MzC-F0sEP z2ZipOmuu#9K7NzjU;fL?cHMukWAazhdO`f++6%p$Gy0caE@u8Wb7DTPOs@05e7T8@ z55&xN-Rb|D^&BDQi#;ZP8yED%$vFY{%ocY)ANau>3niv;EDDqhUz_t9?>zrg&A z*X!Q=7x4>n(3S2Aujgt14RV)z@&Iy|E$j7PY0Rzyr_Ns6<`MWM5+YJfN z7P$W=A%H9$G*`PmIX$2xMrbB=V*pSRBQ$frF#wQagq99B1^^{7LMy!+0|2^=Q2YN+ z0s=Iz$w$w4L%uWJ{8#w^MKS#wy7Yjen4sCgjVS;{F+sD#8v}r%nEn+jKv7K0=V9Rb zI{?AypjE?vln-FfHw#MdSbfh*j%3hz?A9V)WHC-%M4wK zZ;%4?#7uu4vTh6j+%rQ{&Hp6e8GqNOXS%MzYst=KWVveN41l7TFB&x0DFKRN{x^eT z02IXxEx-Rig`Hi`9LI5m@A)g<8^crrlRL8?GZPpFWXl2q$1or(fq^&|wDrnXAd><~ z#ZG>Go>M)uoUT*5YuGedJw4skRb74RV|vrr2CksOsjhj%#960_V0(cvH5B}9oEL_lX-djt$R`y=pO6u^mX5bWjnU|6q|)kfd*D{6AX{L^I`Ws_#M|+Y+69r9UJb+ zZ-d*hL9sjBx_C3Q(vJJ$6|W64<|&BPoo4SCLWhqHcIG~4@v*_cz9rQ7*j$y|B28%) z{x++b)8W;a6uAO8du<(FN$r~7lxHBVYhGF3GHQz*cb4SMS$zd;dMa%V~(3vNaz?6Zz+d7ilngS`O^4Wx0W}_eY9>n#JQV+)~zAPTb#x$ z(@0a|bRVgyH24%N+LAy0+)l9uEzy))q=}KCYHsy))~8omgB?)5wwz;}9a7%6Xs5J@ z!!1^0njNdW@Q`?Ygrn%9jo19co+X+j@rKN;N$j>a%l}cI;}2T8i`* zw{4<{-Mm{L0jYEB)}33nn}W2iC2aGwrFC(|L6YqGm3C{31?4{4tu1%lw_HNzEiQAL z)x2BPtKY4UfYc>4wfP*=w6*dUW{LdNoR3@F(mipjUY!~T z?7fF3W}T#`T@3cBk8?=8a&qR7c!itika&f}=8*U<@Ua_55^s3sHmA(8lk1G0^qk7& zy3eWfr$R?dNW6Jp{U}RFq4JiNShvbqT4LQQUulVTYp&95PMKxLse1LCKEO@koel+D zZ_eqkmUrz38O7&N!1#dH!!9nhiER{@LjkMIG-(WH(*bkpsd;pk6>Df>K^igUy z6!3hMT^U+!Mz_AB%*xOTKl+9Uq@AioIfPo=b!}pX9gphN%kcqH8V{jk)fyi{#|qzt zKC;Hu${b>ER!eh;y;-fzA*}IM$X3QB+AI^Nd2c>INxVaQvr^0m5S>~t(xF`-V>L-n8Z^GOO?im9W`^@teE^g+lwiPG;hNqSBK(wx+i@kP3Wtc- ziKoILqD3qf4iPPyL34=iFv~+}dY2^K2f-!=60T`AhxuJP{H<( z(4vJaJOo-o8v<+JW|diXoT^u^#}A@Rj1#Kmkd&6ttU{>aKAsBiZlncGI~OSfHL)ws zg^Qpjmf_r7gj>wUL_21qTgPo!@;lf;BeAUfs=UEpHL()s=5h3^N)tNh9h7N;@Gj#KsOH|-<%be0s(h08HUNaS3&0<^>$6#M+r)}UCoORPcR-|;rB zL38hJbDE8@di9(>f=_t(jMI_}y?#XG;9TSa#wqwIQUPPQmFLQT2&eR1A>wc&&-W2= z%(9cIdi9(>f=}U;o-0TkPU*RV#Nm{lD@Ytp>A8Z$axeL8B!c<J^<^o!(Ny<||OEqaXG-!E?*O=#? z*Ve6P_5p5E7g?ABsnVo56iAR3^(l}bEwV}l5~M{tvIvdSBCFJ(+YMfMCLgWQt>;yO zxnqFoA+uBQLhl~0 zbkQV=(^Hd>V2k5ZO_FSJeyT~LEe=pMNw%#xqT91-Lb#U}y}Tt{9%8PU<8*3Syl%Eo>VHzlvR1Y9ICc%9_iGE}*b_HJ2mcr}4-o@o+Ux(~umOhJ3M z@L*`s-Yq~eE!w-g($VXb!jfMKw0sQz?oxndT4G7>`FCxW9jE5sMcCw?9*5g>*%ess zW{nsw1%PC3+GPcRq(z&e0FXz#6}4#LlX{1nak&ca-G`UIqcLFGcapkrtV(yEu^-XFD9-dZ|8uPZ~*zRUkz*$zl~yQB7jE zz=~=TzXe!SlhmO=i)xZS+>M~>p@QRVn;u~(-XaAnf~XomC(rs7bf-l$>Ex;4WcWgt zqR@%=X_bmPCt9>fcgvhK8z!1&k@D)@x3NW*j+bc33&(~Qt$5+s(4qw@N}OoX`V=k? zEn1$!z7@@v9{yHw6b zI5U^KQE^rS2FKw#6ski5c6eyZ zcI(KAN$weqUOl4^024j1Y(pUgT2PpwNL$dt0uP0FXu-M+MLiEKY_y?RP+BktLtD@r zobpVvztOAb^g*?IGq*=vcT!IX#W)%16s6Y z8nC{hu{^^p_o9qmy(}Lad)doi*$MSW$hMRqD8t~l>E~oT`uw=v}lc6An8s*uoaK`Albtd0~M= z@5(dIk^+13Dv7OtezZtz1@@ywVk^KOEfQOS{%Fxk-}N_nCYhk<)l2jN3JOPVEMh(3 zZH`5xC!Ec(i1UQ6ITl5PkzpK*m`o%X$MPfcPny8e?f0hDymog+6j72{!Hcno?SuzB z77&*PZQ3HjO^c*opkG=f{Q~}mJ3Zd@GGmH+Ce4`+kLHfThMPJTE@rsWW8sm7Cp{Jp zSvb;T;g2nf9F2w7wJ2~j-gUanjaHvdQ6q72mqUqh`(Wk=?v<1|+YaycZ=`nIG6{{s zBgakjje?Ypo6H*p1v@o(e#4+F(x8{y!~LwQg6sAq8~e1Ojz(capSBadQ81aO?F48P zmiWAV63{5D?RhJ)ZWLy7Zb)Z8;nv2e>rB%T7CM{PH~O$5n|`!^vyA8M#A+0l@w^%E zMxoPX1EGz=GG4YK@kU`Tmv$i7Jn7!1neV)a4OC8(_YWI}i1+h)eqFWYOoG7r4xK`< zyhAr_R(IHPqtQi*+v55*McJM8nO@{o5F{Ryf^I>p56^$r?`Qs#lyuud=RZ-|uPuzjG@HAs&(Rqh(3Pn#3e zHAt^E4_FPK!~=`5D3O|ciW%=4+loc@>jtMW&$3_7Zgs5ZsgUgzYdeAN=h8}Ow)jWx z8_CyUvqavi-MIO{-Wp39aSdMs;&193E0h;uKfjp0t%Q2_D^Z0%@{C$2adUyaHMm)m zlDV}7ytZhNw`z^Ih>*AH&0AE+TeVJp^yKGa_O=p=p7kqH1xWI{BD6MahorZLYOhAs zTV+4DaFMrSOouIGlv{}o(dwUa<>z94#;bbod0j%Ow_~E+K-{kJ`ii@y+vc0ssm$w6 zo!7|J+#*DK)!W_mB@}kO+4}Zui#`} z&*FK_pwDZ*e7@^@4~&Iobi?DtBx&!D+?Dw?JT$MtApMlHswd_Za?L9cnC}L02Fqjd z^+Hy){i(SP-gd~mqPcmE#>{K%Wp25BU{xHNN$Q(xqoI=jMgepmTUp{@N(;Xx?dR2N zn^z}oUVXB8b;0K5aorj{QWg7kr`io4rq{atF|+c%CeY^uW^gHMJaBK zuCXwU-SD|SX9;_qcwawtn%5A-yapWR73R%rFkx#QNTvuB@-|fO+-) z_4`|)bE{`RuYUY|*K7AIaZb)G0Xh=nYeslpeV2L7_Rg!%H?K*=xupzmFm72B*iJ?+ z4!Sh%7A6d4;U=T8lZag_pBmLDj+VJ(#frEKdD?+;*sa1p;qS zds(qrGrpoXNWFN9Ast{>3uERa4*ooBGiJ-0I%wNY!!RO z=xs+eiR<0rMckEMMhd>9ZmgCy?Y69dXK7im{W$xjdpyJ*Z1N-HA3relfE&9jZkGTY z+ak9grTEpGk8i$z_ZM9&%@1OH`u&UThYz3xT;?Y3xPNqM;H5qPTYh%@^}m03-X4DO z`gcD(zx_NMOfCbE4cZSMIAJrMJXVgIauZcqLF+Bv5C*L~Y3N=$s~^6P7tSjiYZUi=p|#G{=U;x$43n;wXH z#RD<9*817&-#q{C-`~Ce=EFd<;^_OqH|L~0Ne*Nn|y!!IT@4x@ko40SJf?xmjyAMzNx2fXK znkqi2Hssae>E))9pY4?SAMc;PeQ_W*GQ5DD_z#B!Rfd4hZ=ZrT90@IR5bHlrZ?CkA z_GP9Cn(k@(yEa~;Md~xrrlRj6gxx>KrNEfYM2mvSo1B%b?3i^97^`=nQ&o;w%s zi$d{zUv4N`1O_|WaEPo&Pa7iCzNZ}qN?`Jw2eQIWi&%N;8y^THTKpzWqAfZWdm8tw zra80OB2S&3i_5SREqAARFGtuI@f<%k@>uXzQJ_>c(>AJVBb3Vt1OX+>_TPukc5VEK7agfP_FCd&2cci7h@r`Ao z#V<1@T6lpyjb8-V_R*D(DXJ;cb8!(zPoso0%k8j4xT$|`iaRqiP2R$u#__t?T&Tt| zo#Zr91ZUqD<9v|glW1`jO;0;TCMVJ2la@@AW7*R%f0-XXK=3%Ox#{|%L)Y_n)$xIRy#i$2 zbH^cmr7hD;$A=|iI{W7i6lW^Rm}oXmtl$XFE3bvp?(Q`C6h z_rMjq8QUJXZ`|ic7|zz^6akvIME{NkZIpEZJ$2a?NvE#PR{7{0e3o2>+@>QGh%XeQUBYyER?*%TvbzKAA zJ8zL?Npp^1WTGvuYm?(_ZjV+XqwhOKHGQH*Nmimo(MzTohC5EDtFN)GJwL&sNK@CB zi$m>9=9pHMYX97Durx<5m}Lc!zooW%tQY+Ujg zDw^##ZXi`QCA}|FjG1P*iEA^j{@Zn(IU0>Os<@3e9fWyYL}a{CnV$E@3HY4%2Q=Fs zC(5KvmJ}45+)y>s4N6&^kNEtqUl*z!osY?EG53ht{@?;pv&GPqTT;+j5ZN3&EoU=M8lFq6)&+fFX`bKRKSc5>67>&EQ1lZcF+ zgWUIL7zvvB6?oIiXZCBw^o$R(*(Nt~%qBNdza}FRvbI-&)Fva6m!{9;6iwI2^(B2i z0QKCSvZT((qC{HHF9{{%jckwcMykVjTcQ|0y)VjO6D@u&AkpG>=#F;gH+%B9+_hwD z#qM=`Pk1A*Dfdnp200T}u`&2vfXo{a9<#ByY8JDErmS?&2fwM1Wl6|ViPH3(pR4%9 zCf_p`xMw|uX0kjV7n3DF0B*8`X0kkU*k(P2W@n>dtntSE&BhyWBkL*mbJ^Jl&CW({ z>$0=)%rCQ<+_Ke=?i<+_$~G-_qy0#J;c0oSy+e1WGXU(QS87n5yzy2O1%z1|b1&Nhd;j$FRW zn>L!*}lAR%w*m!L^CpP&{S#C%?0gBW&t?y%DXtOgb%R4C@0p1pt;qwo*5<E*^U&!(y>lXcl{&Fm<+8#Hx%BHkZ>p_DUAkY|b=! z>~$hkU~51+-qrw>v^5}pYWoQDoc0m^zT1tNvn=z0RkO2u1|HbnN7?fH@JMW}aQ#fj zXE1B#cLr``T_baBwiEZ#&H$>6oewUV&U2noH5(U4%J{&c$?Hswv8oO`U4v$E5NeQZ z??bb_PlU(L3Q9Z8#uBAAOhf6X%ZTuc$#RJ=vimtNu4|NznjN1P%e7Hj5qD#!_r?9V ziRLv4lx3J5r=Ha8I5e|ExB-^SqV_bO$;^*rbdnJ@rREE<%;pP0GptNH%CIst!^+gB z8de648&-y9SQ&T5WC_h=N!5~_$rP-bzCbfsQqXE=GBgzocXFfP)y@Sf7Yx@yGhBxY zX7MIy7H^{9)y@>u+2T#m?A((2<$bvjV@$S=eBx@TIpf69ht`v=YPh@zQ1aOtuOq_QlJ z2+i_{qGkK1G+4HO&@7KATK4mxSsqcejP;;d9ub=55k<>>1vJYeik4$(&_K6I@A-Lv zY=?Nx@`&h=3mNYZB+u?0=$#C;M@WDKi4QpIe}V~b|GK`mWDvm6GX&f+Ch`@|0icf3)rm$5SA zn$L;H^y#~pwZ=xY95aGuHOHdaIZaf+&gmmh=5>Z5^9Wms2&rtSdb`qM|NmAuzC!yIsI*wGZCH*_1SV`CPU770(wL-Se zq~p_^`EaD-&2bYEyljW)8y^h!x^~0?$#X^^X)fw(n2?>H^R+|{(enO%^etqL>zwTx zr3M+dt8eCmG2)m05+89B)1F3Oi!0NYz;Zu7Xj8^(^tDkJegUxGow5qz!*n++UbTV)JVyelPl(oyqV%&^T@JpQ4bP{u)u>iHdzE=rJ z8^45jY|i|sR@yTlkSWJsaIndqWPb4xZ7$>y6OF#{qaAy>iRAkncQwh4z66K!xFl24 z7`)G9PG8e;*sz!{G^c?&T+?U&o2p(BumC6sM?Rgxb{sAPBOr_ ze-4`AXZl)xP|q2bqKqe>Gbe63Gk<~Sa{N@)u{rKTU&~kMIk)Y^#}gm)weNB0Yk5g% z=6BQA>e2O_pLvU6R{9dK%WF#cOO_EHQ}$En>w3U*w$5ZQa!ioE$LhHpi^RMbeo@~X zN0%A0eF@6R`<%XUwRESGm_)-MC{d2}(bvyz8Nj?hR1@v;B{-MXndfp0nU{Hd2vck} zo6vu*FX2=*7n^Ku-Iy1pjoa`Gs!jZo`+f`6b?kHC6Zf<)QRny->26$3^BnU)ovr>#D(Ppp=M8wyVhYgWGN*oA6+QL( zOraV@q()<4qZ#(rrvN!0iaLA!3$Q)wpVZ#Z4?^qdygac2+0TPU_dGvJD~u1)_Qo$s zrL_0;34+^pLI5@f>?V7_N9vZ}helz2njf*CyjOW{GWoL2v#-ncjeE*FS@IhRW`|Vz zk=KB5gq;B($L#xoCQ+F@XF1+Rv+v~iY{J)+>PfR}Z2r7|>Fehk-yY_eKA&OOH}23# zI^_9*S+fp}XTweUk}>C=WD-rE6@RgH@fZrh-T2LhUPk=jRn{S56oxV7`q>y1DcRbS z0?)b&1hI3Pn*?kxP<3N_focZZ3w&ad&s9DRyev#cH;BpX({{ zjU3}f3k-uuGjd)Wn&CRCuI(EvXqHcgW;sJ>ENap`RW%z4ggHK1874m3Wd z&F?#76pa?Y{nXEy9E+_z<}~jQ*vN&wu{(`uE@c-*a39^!lrJ?>=(x z7IWs}tJnYf_S<*Rv6}I(FP{GM=bwM^OMGFK8L%)U(N15IQTUvQ$YJ{Ym*W@9FP=0.6.11; + +// ==================================================================== +// | ______ _______ | +// | / _____________ __ __ / ____(_____ ____ _____ ________ | +// | / /_ / ___/ __ `| |/_/ / /_ / / __ \/ __ `/ __ \/ ___/ _ \ | +// | / __/ / / / /_/ _> < / __/ / / / / / /_/ / / / / /__/ __/ | +// | /_/ /_/ \__,_/_/|_| /_/ /_/_/ /_/\__,_/_/ /_/\___/\___/ | +// | | +// ==================================================================== +// ======================= FraxMiddlemanGaugeV2 ======================= +// ==================================================================== +// Looks at the gauge controller contract and pushes out FXS rewards once +// a week to the gauges (farms). +// This contract is what gets added to the gauge as a 'slice' +// V2: Uses Fraxferry instead of miscellaneous 3rd-party bridges +// V3: Adds Fraxtal's L1StandardBridge + +// Frax Finance: https://github.com/FraxFinance + +// Primary Author(s) +// Travis Moore: https://github.com/FortisFortuna + +// Reviewer(s) / Contributor(s) +// Sam Kazemian: https://github.com/samkazemian + +import "../Math/Math.sol"; +import "../Math/SafeMath.sol"; +import "../ERC20/ERC20.sol"; +import "../ERC20/SafeERC20.sol"; +import "./IFraxGaugeFXSRewardsDistributor.sol"; +import "../Fraxferry/IFraxferry.sol"; +import '../Uniswap/TransferHelper.sol'; +import "../Staking/Owned.sol"; +import "../Utils/ReentrancyGuard.sol"; +import "../Misc_AMOs/optimism/IL1StandardBridge.sol"; + + +contract FraxMiddlemanGaugeV3 is Owned, ReentrancyGuard { + using SafeMath for uint256; + using SafeERC20 for ERC20; + + /* ========== STATE VARIABLES ========== */ + + // Instances and addresses + address public reward_token_address = 0x3432B6A60D23Ca0dFCa7761B7ab56459D9C964D0; // FXS + address public fraxtal_reward_token_address = 0xFc00000000000000000000000000000000000002; // FXS + address public rewards_distributor_address; + + // Informational + string public name; + + // Admin addresses + address public timelock_address; + + // Gauge-related + IFraxferry public ferry; + IL1StandardBridge public l1StandardBridge; + uint32 public bridgeL2GasLimit = 200000; + bytes public bridgeExtraData; + address public destination_address; + + // Routing + bool public useL1StandardBridge; + + + /* ========== MODIFIERS ========== */ + + modifier onlyByOwnGov() { + require(msg.sender == owner || msg.sender == timelock_address, "Not owner or timelock"); + _; + } + + modifier onlyRewardsDistributor() { + require(msg.sender == rewards_distributor_address, "Not rewards distributor"); + _; + } + + /* ========== CONSTRUCTOR ========== */ + + constructor ( + address _owner, + address _timelock_address, + address _rewards_distributor_address, + address _ferry_address, + address _l1_standard_bridge_address, + address _destination_address, + string memory _name + ) Owned(_owner) { + timelock_address = _timelock_address; + + rewards_distributor_address = _rewards_distributor_address; + + ferry = IFraxferry(_ferry_address); + l1StandardBridge = IL1StandardBridge(_l1_standard_bridge_address); + destination_address = _destination_address; + + name = _name; + + useL1StandardBridge = true; + } + + /* ========== MUTATIVE FUNCTIONS ========== */ + + // Callable only by the rewards distributor + function pullAndBridge(uint256 reward_amount) external onlyRewardsDistributor nonReentrant { + // Check the address + if (useL1StandardBridge) { + require(address(l1StandardBridge) != address(0), "Invalid bridge address"); + } else { + require(address(ferry) != address(0), "Invalid ferry address"); + } + + // Pull in the rewards from the rewards distributor + TransferHelper.safeTransferFrom(reward_token_address, rewards_distributor_address, address(this), reward_amount); + + // Logic here + if (useL1StandardBridge) { + // Use the standard bridge + ERC20(reward_token_address).approve(address(l1StandardBridge), reward_amount); + l1StandardBridge.depositERC20To(reward_token_address, fraxtal_reward_token_address, destination_address, reward_amount, bridgeL2GasLimit, bridgeExtraData); + + } else { + // Use the ferry + ERC20(reward_token_address).approve(address(ferry), reward_amount); + ferry.embarkWithRecipient(reward_amount, destination_address); + } + + } + + /* ========== RESTRICTED FUNCTIONS - Owner or timelock only ========== */ + + // Added to support recovering LP Rewards and other mistaken tokens from other systems to be distributed to holders + function recoverERC20(address tokenAddress, uint256 tokenAmount) external onlyByOwnGov { + // Only the owner address can ever receive the recovery withdrawal + TransferHelper.safeTransfer(tokenAddress, owner, tokenAmount); + emit RecoveredERC20(tokenAddress, tokenAmount); + } + + // Generic proxy + function execute( + address _to, + uint256 _value, + bytes calldata _data + ) external onlyByOwnGov returns (bool, bytes memory) { + (bool success, bytes memory result) = _to.call{value:_value}(_data); + return (success, result); + } + + + function setBridgeInfo(address _bridge_address, address _destination_address, uint32 _bridgeL2GasLimit, bytes calldata _bridgeExtraData) external onlyByOwnGov { + // Set the new bridge + l1StandardBridge = IL1StandardBridge(_bridge_address); + + // Set the cross-chain destination address + destination_address = _destination_address; + + // Set other bridge info + bridgeL2GasLimit = _bridgeL2GasLimit; + bridgeExtraData = _bridgeExtraData; + + emit BridgeInfoChanged(_bridge_address, _destination_address, _bridgeL2GasLimit, _bridgeExtraData); + } + + function setFerryInfo(address _ferry_address, address _destination_address) external onlyByOwnGov { + // Set the new ferry + ferry = IFraxferry(_ferry_address); + + // Set the cross-chain destination address + destination_address = _destination_address; + + emit FerryInfoChanged(_ferry_address, _destination_address); + } + + function setRewardsDistributor(address _rewards_distributor_address) external onlyByOwnGov { + rewards_distributor_address = _rewards_distributor_address; + } + + function setUseL1StandardBridge(bool _useL1StandardBridge) external onlyByOwnGov { + useL1StandardBridge = _useL1StandardBridge; + } + + function setTimelock(address _new_timelock) external onlyByOwnGov { + timelock_address = _new_timelock; + } + + /* ========== EVENTS ========== */ + + event BridgeInfoChanged(address bridge_address, address destination_address, uint32 _bridgeL2GasLimit, bytes _bridgeExtraData); + event FerryInfoChanged(address ferry_address, address destination_address); + event RecoveredERC20(address token, uint256 amount); +} diff --git a/src/hardhat/contracts/ERC20/ERC20PermissionedMint.sol b/src/hardhat/contracts/ERC20/ERC20PermissionedMint.sol index 88088cfc..6556ca6e 100644 --- a/src/hardhat/contracts/ERC20/ERC20PermissionedMint.sol +++ b/src/hardhat/contracts/ERC20/ERC20PermissionedMint.sol @@ -48,7 +48,7 @@ contract ERC20PermissionedMint is ERC20, ERC20Burnable, Owned { // Used by minters when user redeems function minter_burn_from(address b_address, uint256 b_amount) public onlyMinters { - super.burnFrom(b_address, b_amount); + super._burn(b_address, b_amount); emit TokenMinterBurned(b_address, msg.sender, b_amount); } diff --git a/src/hardhat/contracts/ERC20/ERC20PermitPermissionedMint.sol b/src/hardhat/contracts/ERC20/ERC20PermitPermissionedMint.sol index 6c83052f..d81cd24a 100644 --- a/src/hardhat/contracts/ERC20/ERC20PermitPermissionedMint.sol +++ b/src/hardhat/contracts/ERC20/ERC20PermitPermissionedMint.sol @@ -51,7 +51,7 @@ contract ERC20PermitPermissionedMint is ERC20Permit, ERC20Burnable, Owned { // Used by minters when user redeems function minter_burn_from(address b_address, uint256 b_amount) public onlyMinters { - super.burnFrom(b_address, b_amount); + super._burn(b_address, b_amount); emit TokenMinterBurned(b_address, msg.sender, b_amount); } diff --git a/src/hardhat/contracts/ERC20/ERC20PermitPermissionedOptiMintable.sol b/src/hardhat/contracts/ERC20/ERC20PermitPermissionedOptiMintable.sol index 954eb946..4c4ca381 100644 --- a/src/hardhat/contracts/ERC20/ERC20PermitPermissionedOptiMintable.sol +++ b/src/hardhat/contracts/ERC20/ERC20PermitPermissionedOptiMintable.sol @@ -159,7 +159,7 @@ contract ERC20PermitPermissionedOptiMintable is ERC20Permit, ERC20Burnable, Owne /// @param b_address Address of the account to burn from /// @param b_amount Amount of tokens to burn function minter_burn_from(address b_address, uint256 b_amount) public onlyMinters { - super.burnFrom(b_address, b_amount); + super._burn(b_address, b_amount); emit TokenMinterBurned(b_address, msg.sender, b_amount); } diff --git a/src/hardhat/contracts/ERC20/IwfrxETH.sol b/src/hardhat/contracts/ERC20/IwfrxETH.sol new file mode 100644 index 00000000..f75a693c --- /dev/null +++ b/src/hardhat/contracts/ERC20/IwfrxETH.sol @@ -0,0 +1,20 @@ +// SPDX-License-Identifier: MIT +pragma solidity >=0.8.0; + +interface IwfrxETH { + function DOMAIN_SEPARATOR ( ) external view returns ( bytes32 ); + function allowance ( address, address ) external view returns ( uint256 ); + function approve ( address guy, uint256 wad ) external returns ( bool ); + function balanceOf ( address ) external view returns ( uint256 ); + function decimals ( ) external view returns ( uint8 ); + function deposit ( ) external; + function eip712Domain ( ) external view returns ( bytes1 fields, string memory name, string memory version, uint256 chainId, address verifyingContract, bytes32 salt, uint256[] memory extensions ); + function name ( ) external view returns ( string memory ); + function nonces ( address owner ) external view returns ( uint256 ); + function permit ( address owner, address spender, uint256 value, uint256 deadline, uint8 v, bytes32 r, bytes32 s ) external; + function symbol ( ) external view returns ( string memory ); + function totalSupply ( ) external view returns ( uint256 ); + function transfer ( address dst, uint256 wad ) external returns ( bool ); + function transferFrom ( address src, address dst, uint256 wad ) external returns ( bool ); + function withdraw ( uint256 wad ) external; +} diff --git a/src/hardhat/contracts/FraxETH/frxETHMinter.sol.old b/src/hardhat/contracts/FraxETH/frxETHMinter.sol.old index f0f3ab4b..c6720c5d 100644 --- a/src/hardhat/contracts/FraxETH/frxETHMinter.sol.old +++ b/src/hardhat/contracts/FraxETH/frxETHMinter.sol.old @@ -1571,7 +1571,7 @@ contract ERC20PermitPermissionedMint is ERC20Permit, ERC20Burnable, Owned { // Used by minters when user redeems function minter_burn_from(address b_address, uint256 b_amount) public onlyMinters { - super.burnFrom(b_address, b_amount); + super._burn(b_address, b_amount); emit TokenMinterBurned(b_address, msg.sender, b_amount); } diff --git a/src/hardhat/contracts/Fraxswap/periphery/FraxswapRouter.sol b/src/hardhat/contracts/Fraxswap/periphery/FraxswapRouter.sol index d0d16cfe..efc52105 100644 --- a/src/hardhat/contracts/Fraxswap/periphery/FraxswapRouter.sol +++ b/src/hardhat/contracts/Fraxswap/periphery/FraxswapRouter.sol @@ -14,6 +14,7 @@ pragma solidity ^0.8.0; // TWAMM Router // Inspired by https://www.paradigm.xyz/2021/07/twamm // https://github.com/para-dave/twamm +// 2.0.1: UInt112 fixes // Frax Finance: https://github.com/FraxFinance @@ -45,6 +46,8 @@ contract FraxswapRouter is IUniswapV2Router02V5 { address public immutable override factory; address public immutable override WETH; + string constant public version = "2.0.1"; + modifier ensure(uint deadline) { require(deadline >= block.timestamp, 'FraxswapV1Router: EXPIRED'); _; @@ -362,7 +365,7 @@ contract FraxswapRouter is IUniswapV2Router02V5 { { // scope to avoid stack too deep errors (uint reserveInput, uint reserveOutput, uint twammReserveInput, uint twammReserveOutput) = FraxswapRouterLibrary.getReservesWithTwamm(factory, input, output); amountInput = IERC20(input).balanceOf(address(pair)) - reserveInput - twammReserveInput; - amountOutput = pair.getAmountOut(amountInput, input); + amountOutput = FraxswapRouterLibrary.getAmountOutU112Fixed(address(pair), amountInput, input); } (uint amount0Out, uint amount1Out) = input == token0 ? (uint(0), amountOutput) : (amountOutput, uint(0)); address to = i < path.length - 2 ? FraxswapRouterLibrary.pairFor(factory, output, path[i + 2]) : _to; diff --git a/src/hardhat/contracts/Fraxswap/periphery/libraries/FraxswapRouterLibrary.sol b/src/hardhat/contracts/Fraxswap/periphery/libraries/FraxswapRouterLibrary.sol index ed349732..885315ff 100644 --- a/src/hardhat/contracts/Fraxswap/periphery/libraries/FraxswapRouterLibrary.sol +++ b/src/hardhat/contracts/Fraxswap/periphery/libraries/FraxswapRouterLibrary.sol @@ -35,7 +35,7 @@ import '../../core/interfaces/IFraxswapPair.sol'; library FraxswapRouterLibrary { - bytes public constant INIT_CODE_HASH = hex'46dd19aa7d926c9d41df47574e3c09b978a1572918da0e3da18ad785c1621d48'; // init code / init hash + bytes public constant INIT_CODE_HASH = hex'676b4c9b92980c4e7823b43031b17d7299896d1cd7d147104ad8e21692123fa1'; // init code / init hash // returns sorted token addresses, used to handle return values from pairs sorted in this order function sortTokens(address tokenA, address tokenB) internal pure returns (address token0, address token1) { @@ -91,7 +91,7 @@ library FraxswapRouterLibrary { for (uint i; i < path.length - 1; i++) { IFraxswapPair pair = IFraxswapPair(FraxswapRouterLibrary.pairFor(factory, path[i], path[i + 1])); require(pair.twammUpToDate(), 'twamm out of date'); - amounts[i + 1] = pair.getAmountOut(amounts[i], path[i]); + amounts[i + 1] = getAmountOutU112Fixed(address(pair), amounts[i], path[i]); } } @@ -103,7 +103,7 @@ library FraxswapRouterLibrary { for (uint i = path.length - 1; i > 0; i--) { IFraxswapPair pair = IFraxswapPair(FraxswapRouterLibrary.pairFor(factory, path[i - 1], path[i])); require(pair.twammUpToDate(), 'twamm out of date'); - amounts[i - 1] = pair.getAmountIn(amounts[i], path[i - 1]); + amounts[i - 1] = getAmountInU112Fixed(address(pair), amounts[i], path[i - 1]); } } @@ -115,7 +115,7 @@ library FraxswapRouterLibrary { for (uint i; i < path.length - 1; i++) { IFraxswapPair pair = IFraxswapPair(FraxswapRouterLibrary.pairFor(factory, path[i], path[i + 1])); pair.executeVirtualOrders(block.timestamp); - amounts[i + 1] = pair.getAmountOut(amounts[i], path[i]); + amounts[i + 1] = getAmountOutU112Fixed(address(pair), amounts[i], path[i]); } } @@ -127,7 +127,35 @@ library FraxswapRouterLibrary { for (uint i = path.length - 1; i > 0; i--) { IFraxswapPair pair = IFraxswapPair(FraxswapRouterLibrary.pairFor(factory, path[i - 1], path[i])); pair.executeVirtualOrders(block.timestamp); - amounts[i - 1] = pair.getAmountIn(amounts[i], path[i - 1]); + amounts[i - 1] = getAmountInU112Fixed(address(pair), amounts[i], path[i - 1]); } } + + + // Fixes overflow issues with some tokens + // ===================================================== + + // given an output amount of an asset and pair reserves, returns a required input amount of the other asset + function getAmountInU112Fixed(address _pairAddress, uint _amountOut, address _tokenOut) internal view returns (uint) { + IFraxswapPair pair = IFraxswapPair(_pairAddress); + (uint112 _reserve0, uint112 _reserve1, ) = pair.getReserves(); + (uint112 _reserveIn, uint112 _reserveOut) = _tokenOut == pair.token0() ? (_reserve1, _reserve0) : (_reserve0, _reserve1); + require(_amountOut > 0 && _reserveIn > 0 && _reserveOut > 0); // INSUFFICIENT_OUTPUT_AMOUNT, INSUFFICIENT_LIQUIDITY + uint numerator = uint256(_reserveIn) * _amountOut * 10000; + uint denominator = (uint256(_reserveOut) - _amountOut) * pair.fee(); + return (numerator / denominator) + 1; + } + + + // given an input amount of an asset and pair reserves, returns the maximum output amount of the other asset + function getAmountOutU112Fixed(address _pairAddress, uint _amountIn, address _tokenIn) internal view returns (uint) { + IFraxswapPair pair = IFraxswapPair(_pairAddress); + (uint112 _reserve0, uint112 _reserve1, ) = pair.getReserves(); + (uint112 _reserveIn, uint112 _reserveOut) = _tokenIn == pair.token0() ? (_reserve0, _reserve1) : (_reserve1, _reserve0); + require(_amountIn > 0 && _reserveIn > 0 && _reserveOut > 0); // INSUFFICIENT_INPUT_AMOUNT, INSUFFICIENT_LIQUIDITY + uint amountInWithFee = uint256(_amountIn) * pair.fee(); + uint numerator = amountInWithFee * uint256(_reserveOut); + uint denominator = (uint256(_reserveIn) * 10000) + amountInWithFee; + return numerator / denominator; + } } diff --git a/src/hardhat/contracts/Misc_AMOs/curve/ICurveStableSwapMetaNG.sol b/src/hardhat/contracts/Misc_AMOs/curve/ICurveStableSwapMetaNG.sol new file mode 100644 index 00000000..6ceb2fa0 --- /dev/null +++ b/src/hardhat/contracts/Misc_AMOs/curve/ICurveStableSwapMetaNG.sol @@ -0,0 +1,73 @@ +// SPDX-License-Identifier: GPL-2.0-or-later +pragma solidity ^0.8.0; + +interface ICurveStableSwapMetaNG { + function exchange ( int128 i, int128 j, uint256 _dx, uint256 _min_dy ) external returns ( uint256 ); + function exchange ( int128 i, int128 j, uint256 _dx, uint256 _min_dy, address _receiver ) external returns ( uint256 ); + function exchange_received ( int128 i, int128 j, uint256 _dx, uint256 _min_dy ) external returns ( uint256 ); + function exchange_received ( int128 i, int128 j, uint256 _dx, uint256 _min_dy, address _receiver ) external returns ( uint256 ); + function exchange_underlying ( int128 i, int128 j, uint256 _dx, uint256 _min_dy ) external returns ( uint256 ); + function exchange_underlying ( int128 i, int128 j, uint256 _dx, uint256 _min_dy, address _receiver ) external returns ( uint256 ); + function add_liquidity ( uint256[2] memory _amounts, uint256 _min_mint_amount ) external returns ( uint256 ); + function add_liquidity ( uint256[2] memory _amounts, uint256 _min_mint_amount, address _receiver ) external returns ( uint256 ); + function remove_liquidity_one_coin ( uint256 _burn_amount, int128 i, uint256 _min_received ) external returns ( uint256 ); + function remove_liquidity_one_coin ( uint256 _burn_amount, int128 i, uint256 _min_received, address _receiver ) external returns ( uint256 ); + function remove_liquidity_imbalance ( uint256[2] memory _amounts, uint256 _max_burn_amount ) external returns ( uint256 ); + function remove_liquidity_imbalance ( uint256[2] memory _amounts, uint256 _max_burn_amount, address _receiver ) external returns ( uint256 ); + function remove_liquidity ( uint256 _burn_amount, uint256[2] memory _min_amounts ) external returns ( uint256[2] memory ); + function remove_liquidity ( uint256 _burn_amount, uint256[2] memory _min_amounts, address _receiver ) external returns ( uint256[2] memory ); + function remove_liquidity ( uint256 _burn_amount, uint256[2] memory _min_amounts, address _receiver, bool _claim_admin_fees ) external returns ( uint256[2] memory ); + function withdraw_admin_fees ( ) external; + function last_price ( uint256 i ) external view returns ( uint256 ); + function ema_price ( uint256 i ) external view returns ( uint256 ); + function get_p ( uint256 i ) external view returns ( uint256 ); + function price_oracle ( uint256 i ) external view returns ( uint256 ); + function D_oracle ( ) external view returns ( uint256 ); + function transfer ( address _to, uint256 _value ) external returns ( bool ); + function transferFrom ( address _from, address _to, uint256 _value ) external returns ( bool ); + function approve ( address _spender, uint256 _value ) external returns ( bool ); + function permit ( address _owner, address _spender, uint256 _value, uint256 _deadline, uint8 _v, bytes32 _r, bytes32 _s ) external returns ( bool ); + function DOMAIN_SEPARATOR ( ) external view returns ( bytes32 ); + function get_dx ( int128 i, int128 j, uint256 dy ) external view returns ( uint256 ); + function get_dx_underlying ( int128 i, int128 j, uint256 dy ) external view returns ( uint256 ); + function get_dy ( int128 i, int128 j, uint256 dx ) external view returns ( uint256 ); + function get_dy_underlying ( int128 i, int128 j, uint256 dx ) external view returns ( uint256 ); + function calc_withdraw_one_coin ( uint256 _burn_amount, int128 i ) external view returns ( uint256 ); + function totalSupply ( ) external view returns ( uint256 ); + function get_virtual_price ( ) external view returns ( uint256 ); + function calc_token_amount ( uint256[2] memory _amounts, bool _is_deposit ) external view returns ( uint256 ); + function A ( ) external view returns ( uint256 ); + function A_precise ( ) external view returns ( uint256 ); + function balances ( uint256 i ) external view returns ( uint256 ); + function get_balances ( ) external view returns ( uint256[] memory ); + function stored_rates ( ) external view returns ( uint256[] memory ); + function dynamic_fee ( int128 i, int128 j ) external view returns ( uint256 ); + function ramp_A ( uint256 _future_A, uint256 _future_time ) external; + function stop_ramp_A ( ) external; + function set_new_fee ( uint256 _new_fee, uint256 _new_offpeg_fee_multiplier ) external; + function set_ma_exp_time ( uint256 _ma_exp_time, uint256 _D_ma_time ) external; + function N_COINS ( ) external view returns ( uint256 ); + function BASE_POOL ( ) external view returns ( address ); + function BASE_N_COINS ( ) external view returns ( uint256 ); + function BASE_COINS ( uint256 arg0 ) external view returns ( address ); + function coins ( uint256 arg0 ) external view returns ( address ); + function fee ( ) external view returns ( uint256 ); + function offpeg_fee_multiplier ( ) external view returns ( uint256 ); + function admin_fee ( ) external view returns ( uint256 ); + function initial_A ( ) external view returns ( uint256 ); + function future_A ( ) external view returns ( uint256 ); + function initial_A_time ( ) external view returns ( uint256 ); + function future_A_time ( ) external view returns ( uint256 ); + function admin_balances ( uint256 arg0 ) external view returns ( uint256 ); + function ma_exp_time ( ) external view returns ( uint256 ); + function D_ma_time ( ) external view returns ( uint256 ); + function ma_last_time ( ) external view returns ( uint256 ); + function name ( ) external view returns ( string memory ); + function symbol ( ) external view returns ( string memory ); + function decimals ( ) external view returns ( uint8 ); + function version ( ) external view returns ( string memory ); + function balanceOf ( address arg0 ) external view returns ( uint256 ); + function allowance ( address arg0, address arg1 ) external view returns ( uint256 ); + function nonces ( address arg0 ) external view returns ( uint256 ); + function salt ( ) external view returns ( bytes32 ); +} diff --git a/src/hardhat/contracts/Misc_AMOs/curve/ICurveTwocryptoOptimized.sol b/src/hardhat/contracts/Misc_AMOs/curve/ICurveTwocryptoOptimized.sol new file mode 100644 index 00000000..7ac264cd --- /dev/null +++ b/src/hardhat/contracts/Misc_AMOs/curve/ICurveTwocryptoOptimized.sol @@ -0,0 +1,74 @@ +// SPDX-License-Identifier: GPL-2.0-or-later +pragma solidity >=0.8.0; + +interface ICurveTwocryptoOptimized { + function exchange ( uint256 i, uint256 j, uint256 dx, uint256 min_dy ) external returns ( uint256 ); + function exchange ( uint256 i, uint256 j, uint256 dx, uint256 min_dy, address receiver ) external returns ( uint256 ); + function exchange_received ( uint256 i, uint256 j, uint256 dx, uint256 min_dy ) external returns ( uint256 ); + function exchange_received ( uint256 i, uint256 j, uint256 dx, uint256 min_dy, address receiver ) external returns ( uint256 ); + function add_liquidity ( uint256[2] memory amounts, uint256 min_mint_amount ) external returns ( uint256 ); + function add_liquidity ( uint256[2] memory amounts, uint256 min_mint_amount, address receiver ) external returns ( uint256 ); + function remove_liquidity ( uint256 _amount, uint256[2] memory min_amounts ) external returns ( uint256[2] memory ); + function remove_liquidity ( uint256 _amount, uint256[2] memory min_amounts, address receiver ) external returns ( uint256[2] memory ); + function remove_liquidity_one_coin ( uint256 token_amount, uint256 i, uint256 min_amount ) external returns ( uint256 ); + function remove_liquidity_one_coin ( uint256 token_amount, uint256 i, uint256 min_amount, address receiver ) external returns ( uint256 ); + function transferFrom ( address _from, address _to, uint256 _value ) external returns ( bool ); + function transfer ( address _to, uint256 _value ) external returns ( bool ); + function approve ( address _spender, uint256 _value ) external returns ( bool ); + function permit ( address _owner, address _spender, uint256 _value, uint256 _deadline, uint8 _v, bytes32 _r, bytes32 _s ) external returns ( bool ); + function fee_receiver ( ) external view returns ( address ); + function admin ( ) external view returns ( address ); + function calc_token_amount ( uint256[2] memory amounts, bool deposit ) external view returns ( uint256 ); + function get_dy ( uint256 i, uint256 j, uint256 dx ) external view returns ( uint256 ); + function get_dx ( uint256 i, uint256 j, uint256 dy ) external view returns ( uint256 ); + function lp_price ( ) external view returns ( uint256 ); + function get_virtual_price ( ) external view returns ( uint256 ); + function price_oracle ( ) external view returns ( uint256 ); + function xcp_oracle ( ) external view returns ( uint256 ); + function price_scale ( ) external view returns ( uint256 ); + function fee ( ) external view returns ( uint256 ); + function calc_withdraw_one_coin ( uint256 token_amount, uint256 i ) external view returns ( uint256 ); + function calc_token_fee ( uint256[2] memory amounts, uint256[2] memory xp ) external view returns ( uint256 ); + function A ( ) external view returns ( uint256 ); + function gamma ( ) external view returns ( uint256 ); + function mid_fee ( ) external view returns ( uint256 ); + function out_fee ( ) external view returns ( uint256 ); + function fee_gamma ( ) external view returns ( uint256 ); + function allowed_extra_profit ( ) external view returns ( uint256 ); + function adjustment_step ( ) external view returns ( uint256 ); + function ma_time ( ) external view returns ( uint256 ); + function precisions ( ) external view returns ( uint256[2] memory ); + function fee_calc ( uint256[2] memory xp ) external view returns ( uint256 ); + function DOMAIN_SEPARATOR ( ) external view returns ( bytes32 ); + function ramp_A_gamma ( uint256 future_A, uint256 future_gamma, uint256 future_time ) external; + function stop_ramp_A_gamma ( ) external; + function apply_new_parameters ( uint256 _new_mid_fee, uint256 _new_out_fee, uint256 _new_fee_gamma, uint256 _new_allowed_extra_profit, uint256 _new_adjustment_step, uint256 _new_ma_time, uint256 _new_xcp_ma_time ) external; + function MATH ( ) external view returns ( address ); + function coins ( uint256 arg0 ) external view returns ( address ); + function factory ( ) external view returns ( address ); + function last_prices ( ) external view returns ( uint256 ); + function last_timestamp ( ) external view returns ( uint256 ); + function last_xcp ( ) external view returns ( uint256 ); + function xcp_ma_time ( ) external view returns ( uint256 ); + function initial_A_gamma ( ) external view returns ( uint256 ); + function initial_A_gamma_time ( ) external view returns ( uint256 ); + function future_A_gamma ( ) external view returns ( uint256 ); + function future_A_gamma_time ( ) external view returns ( uint256 ); + function balances ( uint256 arg0 ) external view returns ( uint256 ); + function D ( ) external view returns ( uint256 ); + function xcp_profit ( ) external view returns ( uint256 ); + function xcp_profit_a ( ) external view returns ( uint256 ); + function virtual_price ( ) external view returns ( uint256 ); + function packed_rebalancing_params ( ) external view returns ( uint256 ); + function packed_fee_params ( ) external view returns ( uint256 ); + function ADMIN_FEE ( ) external view returns ( uint256 ); + function name ( ) external view returns ( string memory ); + function symbol ( ) external view returns ( string memory ); + function decimals ( ) external view returns ( uint8 ); + function version ( ) external view returns ( string memory ); + function balanceOf ( address arg0 ) external view returns ( uint256 ); + function allowance ( address arg0, address arg1 ) external view returns ( uint256 ); + function totalSupply ( ) external view returns ( uint256 ); + function nonces ( address arg0 ) external view returns ( uint256 ); + function salt ( ) external view returns ( bytes32 ); +} diff --git a/src/hardhat/contracts/Staking/FLETwammGauge.sol b/src/hardhat/contracts/Staking/FLETwammGauge.sol new file mode 100644 index 00000000..66efef4d --- /dev/null +++ b/src/hardhat/contracts/Staking/FLETwammGauge.sol @@ -0,0 +1,170 @@ +// SPDX-License-Identifier: GPL-2.0-or-later +pragma solidity >=0.8.0; + +// ==================================================================== +// | ______ _______ | +// | / _____________ __ __ / ____(_____ ____ _____ ________ | +// | / /_ / ___/ __ `| |/_/ / /_ / / __ \/ __ `/ __ \/ ___/ _ \ | +// | / __/ / / / /_/ _> < / __/ / / / / / /_/ / / / / /__/ __/ | +// | /_/ /_/ \__,_/_/|_| /_/ /_/_/ /_/\__,_/_/ /_/\___/\___/ | +// | | +// ==================================================================== +// ========================== FLETwammGauge =========================== +// ==================================================================== +// Interacts with Fraxswap to sell FXS for Frax-ecosystem assets +// Frax Finance: https://github.com/FraxFinance + +// Primary Author(s) +// Travis Moore: https://github.com/FortisFortuna + +// Reviewer(s) / Contributor(s) +// Sam Kazemian: https://github.com/samkazemian +// Dennis: https://github.com/denett + +import "../ERC20/IERC20.sol"; +import "../FXS/IFxs.sol"; +import "../Staking/OwnedV2.sol"; +import "../Oracle/AggregatorV3Interface.sol"; +import "../Fraxswap/core/interfaces/IFraxswapPair.sol"; +import '../Uniswap/TransferHelper.sol'; + +contract FLETwammGauge is OwnedV2 { + + // Core + IFxs public FXS = IFxs(0xFc00000000000000000000000000000000000002); + IERC20 public otherToken; + IFraxswapPair public fraxswapPair; + address public operatorAddress; + + // Safety + uint256 public maxSwapFxsAmtIn = 1000000e18; // 1M, mainly fat-finger precautions + + // Misc + bool public isFxsToken0; + uint256 public numTwammIntervals = 168; // 1 week. Each interval is default 3600 sec (1 hr) + uint256 public swapPeriod = 7 * 86400; // 7 days + + /* ========== MODIFIERS ========== */ + + modifier onlyByOwnerOrOperator() { + require(msg.sender == owner || msg.sender == operatorAddress, "Not owner or operator"); + _; + } + + /* ========== CONSTRUCTOR ========== */ + + constructor ( + address _ownerAddress, + address _operatorAddress, + address _fraxswap_pair + ) OwnedV2(_ownerAddress) { + // Set operator + operatorAddress = _operatorAddress; + + // Set instances + fraxswapPair = IFraxswapPair(_fraxswap_pair); + + // Need to know which token FXS is (0 or 1) + address _token0 = fraxswapPair.token0(); + if (_token0 == address(FXS)) { + isFxsToken0 = true; + otherToken = IERC20(fraxswapPair.token1()); + } + else { + isFxsToken0 = false; + otherToken = IERC20(_token0); + } + + // Get the number of TWAMM intervals. Truncation desired + numTwammIntervals = swapPeriod / fraxswapPair.orderTimeInterval(); + } + + + /* ========== MUTATIVE ========== */ + + // Use the TWAMM + function twammLongTermSwap(uint256 _fxsSellAmount) external onlyByOwnerOrOperator returns (uint256 _fxsToUse, uint256 new_order_id) { + // Sell FXS for another asset + // -------------------------------- + _fxsToUse = _fxsSellAmount; + + // Make sure input amount is nonzero + require(_fxsToUse > 0, "FXS sold must be nonzero"); + + // Safety check + require(_fxsToUse <= maxSwapFxsAmtIn, "Too much FXS sold"); + + // Approve FXS first + FXS.approve(address(fraxswapPair), _fxsToUse); + + // Swap + if (isFxsToken0) { + new_order_id = fraxswapPair.longTermSwapFrom0To1(_fxsToUse, numTwammIntervals); + } + else { + new_order_id = fraxswapPair.longTermSwapFrom1To0(_fxsToUse, numTwammIntervals); + } + + emit SwapInitiated(new_order_id, _fxsToUse, block.timestamp); + } + + function cancelTWAMMOrder(uint256 order_id, bool _send_to_msig) external onlyByOwnerOrOperator { + // Cancel the order + uint256 _amtOtherBefore = otherToken.balanceOf(address(this)); + uint256 _fxsBefore = FXS.balanceOf(address(this)); + fraxswapPair.cancelLongTermSwap(order_id); + uint256 _otherCollected = otherToken.balanceOf(address(this)) - _amtOtherBefore; + uint256 _fxsCollected = FXS.balanceOf(address(this)) - _fxsBefore; + + // Optionally send the collected otherToken to the msig + if (_send_to_msig) TransferHelper.safeTransfer(address(otherToken), owner, _otherCollected); + + emit SwapCancelled(order_id, _fxsCollected, _otherCollected); + } + + function collectCurrTWAMMProceeds(uint256 _order_id, bool _send_to_msig) external onlyByOwnerOrOperator { + // Collect current proceeds. + ( , , uint256 _otherCollected) = fraxswapPair.withdrawProceedsFromLongTermSwap(_order_id); + + // Optionally send the collected otherToken to the msig + if (_send_to_msig) TransferHelper.safeTransfer(address(otherToken), owner, _otherCollected); + + emit SwapProceedsCollected(_order_id, _otherCollected); + } + + // Send all otherToken to the msig + function sendOtherTokenToMsig() external onlyByOwnerOrOperator { + TransferHelper.safeTransfer(address(otherToken), owner, otherToken.balanceOf(address(this))); + + } + + /* ========== RESTRICTED FUNCTIONS ========== */ + + function setSwapPeriod(uint256 _swapPeriod) external onlyOwner { + // Change the swap period + swapPeriod = _swapPeriod; + numTwammIntervals = _swapPeriod / fraxswapPair.orderTimeInterval(); + } + + function setTWAMMMaxSwapIn(uint256 _maxSwapFxsAmtIn) external onlyOwner { + maxSwapFxsAmtIn = _maxSwapFxsAmtIn; + } + + function setOperator(address _newOperatorAddress) external onlyOwner { + operatorAddress = _newOperatorAddress; + } + + + // Added to support other mistaken tokens + function recoverERC20(address tokenAddress, uint256 tokenAmount) external onlyOwner { + // Only the owner address can ever receive the recovery withdrawal + TransferHelper.safeTransfer(tokenAddress, owner, tokenAmount); + emit RecoveredERC20(tokenAddress, tokenAmount); + } + + /* ========== EVENTS ========== */ + event RecoveredERC20(address token, uint256 amount); + event SwapCancelled(uint256 order_id, uint256 recovered_fxs, uint256 other_token_amount); + event SwapInitiated(uint256 order_id, uint256 fxs_amt, uint256 timestamp); + event SwapProceedsCollected(uint256 order_id, uint256 other_token_amount); +} diff --git a/src/hardhat/contracts/Staking/FraxCrossChainFarmV4_ERC20.sol b/src/hardhat/contracts/Staking/FraxCrossChainFarmV4_ERC20.sol index 41c3aa14..f6fc8926 100755 --- a/src/hardhat/contracts/Staking/FraxCrossChainFarmV4_ERC20.sol +++ b/src/hardhat/contracts/Staking/FraxCrossChainFarmV4_ERC20.sol @@ -46,15 +46,16 @@ import "../ERC20/SafeERC20.sol"; // import '../Misc_AMOs/balancer/IBalancerChildLiquidityGauge.sol'; // Balancer frxETH-bb-a-WETH Gauge // import '../Misc_AMOs/balancer/IL2BalancerPseudoMinter.sol'; // Balancer frxETH-bb-a-WETH Gauge // import '../Misc_AMOs/balancer/IStablePool.sol'; // Balancer frxETH-bb-a-WETH Gauge -// import "../Oracle/AggregatorV3Interface.sol"; // Balancer frxETH-bb-a-WETH Gauge and Convex frxETH/XXXETH -// import '../Misc_AMOs/convex/IConvexCvxLPRewardPoolCombo.sol'; // Convex cvxLP/RewardPool Combo -// import '../Misc_AMOs/curve/ICurveChildLiquidityGauge.sol'; // Convex cvxLP/RewardPool Combo +import "../Oracle/AggregatorV3Interface.sol"; // Balancer frxETH-bb-a-WETH Gauge and Convex frxETH/XXXETH +import '../Misc_AMOs/convex/IConvexCvxLPRewardPoolCombo.sol'; // Convex cvxLP/RewardPool Combo +import '../Misc_AMOs/curve/ICurveChildLiquidityGauge.sol'; // Convex cvxLP/RewardPool Combo +import '../Misc_AMOs/curve/ICurveTwocryptoOptimized.sol'; // Fraxtal Curve 2-token XXX/wfrxETH // import '../Misc_AMOs/curve/I2pool.sol'; // Curve 2-token // import '../Misc_AMOs/curve/I2poolTokenNoLending.sol'; // Curve 2-token (No Lending) // import '../Misc_AMOs/curve/I3pool.sol'; // Curve 3-token // import '../Misc_AMOs/curve/I3poolAndToken.sol'; // Curve 3-token with pool // import '../Misc_AMOs/curve/ICurveStableSwapNG.sol'; // Curve 2-token Stable NG -import '../Fraxswap/core/interfaces/IFraxswapPair.sol'; // Fraxswap V2 +// import '../Fraxswap/core/interfaces/IFraxswapPair.sol'; // Fraxswap V2 // import '../Misc_AMOs/kyberswap/elastic/IKSElasticLMV2.sol'; // KyberSwap Elastic // import '../Misc_AMOs/kyberswap/elastic/IKyberSwapFarmingToken.sol'; // KyberSwap Elastic // import '../Misc_AMOs/kyberswap/elastic/IKSReinvestmentTokenPool.sol'; // KyberSwap Elastic @@ -113,6 +114,7 @@ contract FraxCrossChainFarmV4_ERC20 is Owned, ReentrancyGuard { // Balancer frxETH-bb-a-WETH Gauge or Convex frxETH/XXXETH + // ================================================ // IBalancerChildLiquidityGauge public stakingToken; // Balancer frxETH-bb-a-WETH Gauge // AggregatorV3Interface internal priceFeedETHUSD = AggregatorV3Interface(0x639Fe6ab55C921f74e7fac1ee960C0B6293ba612); // For Balancer frxETH-bb-a-WETH Gauge // function setETHUSDOracle(address _eth_usd_oracle_address) public onlyByOwnGov { @@ -127,13 +129,30 @@ contract FraxCrossChainFarmV4_ERC20 is Owned, ReentrancyGuard { // return price; // } + + // Convex XXX/wfrxETH Volatile [Fraxtal] + // ================================================ + IConvexCvxLPRewardPoolCombo public stakingToken; // Convex cvxLP/RewardPool combo + AggregatorV3Interface internal priceFeedETHUSD = AggregatorV3Interface(0x89e60b56efD70a1D4FBBaE947bC33cae41e37A72); // For Balancer frxETH-bb-a-WETH Gauge + function setETHUSDOracle(address _eth_usd_oracle_address) public onlyByOwnGov { + require(_eth_usd_oracle_address != address(0), "Zero address detected"); + + priceFeedETHUSD = AggregatorV3Interface(_eth_usd_oracle_address); + } + function getLatestETHPriceE8() public view returns (int) { + // Returns in E8 + (uint80 roundID, int price, , uint256 updatedAt, uint80 answeredInRound) = priceFeedETHUSD.latestRoundData(); + require(price >= 0 && updatedAt!= 0 && answeredInRound >= roundID, "Invalid chainlink price"); + + return price; + } /// @notice The token being staked // I2pool public stakingToken; // Curve 2-token // I3pool public stakingToken; // Curve 3-token // I3poolAndToken public stakingToken; // Curve 3-token with pool // IConvexCvxLPRewardPoolCombo public stakingToken; // Convex cvxLP/RewardPool combo - IFraxswapPair public stakingToken; // Fraxswap V2 + // IFraxswapPair public stakingToken; // Fraxswap V2 // IStableXPair public stakingToken; // Impossible // IFeederPool public stakingToken; // mStable // ISaddleLPToken public stakingToken; // Saddle L2D4 @@ -357,13 +376,13 @@ contract FraxCrossChainFarmV4_ERC20 is Owned, ReentrancyGuard { } // stakingToken = IBalancerChildLiquidityGauge(_stakingToken); // Balancer frxETH-bb-a-WETH Gauge - // stakingToken = IConvexCvxLPRewardPoolCombo(_stakingToken); + stakingToken = IConvexCvxLPRewardPoolCombo(_stakingToken); // stakingToken = I2pool(_stakingToken); // stakingToken = I3pool(_stakingToken); // stakingToken = I3poolAndToken(_stakingToken); // stakingToken = IStableXPair(_stakingToken); // stakingToken = IFeederPool(_stakingToken); - stakingToken = IFraxswapPair(_stakingToken); + // stakingToken = IFraxswapPair(_stakingToken); // stakingToken = ISaddleLPToken(_stakingToken); // stakingToken = ILToken(_stakingToken); // stakingToken = ILPToken(_stakingToken); @@ -375,9 +394,9 @@ contract FraxCrossChainFarmV4_ERC20 is Owned, ReentrancyGuard { // Uniswap V2 / Impossible ONLY // Need to know which token FRAX is (0 or 1) - address token0 = stakingToken.token0(); - if (token0 == fraxAddress) frax_is_token0 = true; - else frax_is_token0 = false; + // address token0 = stakingToken.token0(); + // if (token0 == fraxAddress) frax_is_token0 = true; + // else frax_is_token0 = false; // Other booleans migrationsOn = false; @@ -457,7 +476,7 @@ contract FraxCrossChainFarmV4_ERC20 is Owned, ReentrancyGuard { // frax_per_lp_token = frxETH_usd_val_per_lp_e8 * (1e10); // We use USD as "Frax" here. Scale up to E18 // } - // Convex cvxLP/RewardPool Combo + // Convex cvxLP/RewardPool Combo (FRAXBP) // ============================================ // { // // Half of the LP is FRAXBP. Half of that should be FRAX. @@ -467,6 +486,31 @@ contract FraxCrossChainFarmV4_ERC20 is Owned, ReentrancyGuard { // frax_per_lp_token = pool.get_virtual_price() / 4; // } + // Convex cvxLP/RewardPool Combo (HFXB/FRAX) + // ============================================ + // { + // // All of the LP constituents are Frax ecosystem related + // // LP price is roughly 1 + // ICurveChildLiquidityGauge gauge = ICurveChildLiquidityGauge(stakingToken.curveGauge()); + // I2pool pool = I2pool(gauge.lp_token()); + // frax_per_lp_token = pool.get_virtual_price(); + // } + + + // Convex /wfrxETH [Fraxtal] + // ============================================ + { + // Get the pool + ICurveChildLiquidityGauge gauge = ICurveChildLiquidityGauge(stakingToken.curveGauge()); + ICurveTwocryptoOptimized pool = ICurveTwocryptoOptimized(gauge.lp_token()); + + // Assume wfrxETH = ETH for pricing purposes + // Get the USD value of the frxETH per LP token + uint256 wfrxETH_in_pool = IERC20(0xFC00000000000000000000000000000000000006).balanceOf(address(pool)); + uint256 frxETH_usd_val_per_lp_e8 = (wfrxETH_in_pool * uint256(getLatestETHPriceE8())) / pool.totalSupply(); + frax_per_lp_token = frxETH_usd_val_per_lp_e8 * (1e10); // We use USD as "Frax" here + } + // Convex cvxfrxETH/XXXETH // ============================================ // { @@ -537,19 +581,19 @@ contract FraxCrossChainFarmV4_ERC20 is Owned, ReentrancyGuard { // Fraxswap V2 // ============================================ - { - uint256 total_frax_reserves; - // Technically getReserveAfterTwamm is more accurate, but if the TWAMM becomes paused, it will eventually gas out - // (uint256 _reserve0, uint256 _reserve1, , ,) = (stakingToken.getReserveAfterTwamm(block.timestamp)); - (uint256 _reserve0, uint256 _reserve1, ) = (stakingToken.getReserves()); - if (frax_is_token0) total_frax_reserves = _reserve0; - else total_frax_reserves = _reserve1; + // { + // uint256 total_frax_reserves; + // // Technically getReserveAfterTwamm is more accurate, but if the TWAMM becomes paused, it will eventually gas out + // // (uint256 _reserve0, uint256 _reserve1, , ,) = (stakingToken.getReserveAfterTwamm(block.timestamp)); + // (uint256 _reserve0, uint256 _reserve1, ) = (stakingToken.getReserves()); + // if (frax_is_token0) total_frax_reserves = _reserve0; + // else total_frax_reserves = _reserve1; - frax_per_lp_token = (total_frax_reserves * 1e18) / stakingToken.totalSupply(); + // frax_per_lp_token = (total_frax_reserves * 1e18) / stakingToken.totalSupply(); - // Multiply by two since both sides (for FRAX/wfrxETH and FRAX/FXS) are beneficial to Frax - frax_per_lp_token *= 2; - } + // // Multiply by two since both sides (for FRAX/wfrxETH and FRAX/FXS) are beneficial to Frax + // frax_per_lp_token *= 2; + // } // KyberSwap Elastic // ============================================ @@ -1141,10 +1185,9 @@ contract FraxCrossChainFarmV4_ERC20 is Owned, ReentrancyGuard { // Convex cvxLP/RewardPool Combo // ========================= - // stakingToken.getReward(address(this)); + stakingToken.getReward(address(this)); } - lastRewardPull = block.timestamp; } diff --git a/src/hardhat/contracts/Staking/FraxUnifiedFarmTemplate.sol b/src/hardhat/contracts/Staking/FraxUnifiedFarmTemplate.sol index 8463727a..9a1fe17b 100755 --- a/src/hardhat/contracts/Staking/FraxUnifiedFarmTemplate.sol +++ b/src/hardhat/contracts/Staking/FraxUnifiedFarmTemplate.sol @@ -46,8 +46,8 @@ import "./Owned.sol"; // Extra rewards // Balancer // ==================== -import "../Misc_AMOs/balancer/IAuraDeposit.sol"; -import "../Misc_AMOs/balancer/IAuraDepositVault.sol"; +// import "../Misc_AMOs/balancer/IAuraDeposit.sol"; +// import "../Misc_AMOs/balancer/IAuraDepositVault.sol"; // BUNNI // ==================== @@ -57,7 +57,7 @@ import "../Misc_AMOs/balancer/IAuraDepositVault.sol"; // CONVEX // ==================== -// import "../Misc_AMOs/convex/IConvexBaseRewardPool.sol"; +import "../Misc_AMOs/convex/IConvexBaseRewardPool.sol"; contract FraxUnifiedFarmTemplate is Owned, ReentrancyGuard { @@ -65,8 +65,8 @@ contract FraxUnifiedFarmTemplate is Owned, ReentrancyGuard { // -------------------- VARIES -------------------- // Balancer - IAuraDeposit public stakingToken; - IAuraDepositVault public aura_deposit_vault = IAuraDepositVault(0xE557658e3D13d074961265756dC2eFB6c903A763); + // IAuraDeposit public stakingToken; + // IAuraDepositVault public aura_deposit_vault = IAuraDepositVault(0xE557658e3D13d074961265756dC2eFB6c903A763); // Bunni // IBunniGauge public stakingToken; @@ -672,19 +672,19 @@ contract FraxUnifiedFarmTemplate is Owned, ReentrancyGuard { // Pull in rewards and set the reward rate for one week, based off of that // If the rewards get messed up for some reason, set this to 0 and it will skip // Should only be called once per week max - if (rewardRatesManual[1] != 0) { - // AURA & BAL - // ==================================== - uint256 aura_before = IERC20(rewardTokens[1]).balanceOf(address(this)); - uint256 bal_before = IERC20(rewardTokens[2]).balanceOf(address(this)); - aura_deposit_vault.getReward(address(this), true); - uint256 aura_after = IERC20(rewardTokens[1]).balanceOf(address(this)); - uint256 bal_after = IERC20(rewardTokens[2]).balanceOf(address(this)); - - // Set the new reward rates - rewardRatesManual[1] = (aura_after - aura_before) / rewardsDuration; // AURA - rewardRatesManual[2] = (bal_after - bal_before) / rewardsDuration; // BAL - } + // if (rewardRatesManual[1] != 0) { + // // AURA & BAL + // // ==================================== + // uint256 aura_before = IERC20(rewardTokens[1]).balanceOf(address(this)); + // uint256 bal_before = IERC20(rewardTokens[2]).balanceOf(address(this)); + // aura_deposit_vault.getReward(address(this), true); + // uint256 aura_after = IERC20(rewardTokens[1]).balanceOf(address(this)); + // uint256 bal_after = IERC20(rewardTokens[2]).balanceOf(address(this)); + + // // Set the new reward rates + // rewardRatesManual[1] = (aura_after - aura_before) / rewardsDuration; // AURA + // rewardRatesManual[2] = (bal_after - bal_before) / rewardsDuration; // BAL + // } // Bunni oLIT rewards // ========================================== @@ -829,10 +829,10 @@ contract FraxUnifiedFarmTemplate is Owned, ReentrancyGuard { || (!isRewTkn && (msg.sender == owner)) ) { - // Aura & Balancer - // Withdraw the tokens from the Aura vault. Do not claim - // ========================================= - if (tokenAddress == address(stakingToken)) aura_deposit_vault.withdraw(tokenAmount, false); + // // Aura & Balancer + // // Withdraw the tokens from the Aura vault. Do not claim + // // ========================================= + // if (tokenAddress == address(stakingToken)) aura_deposit_vault.withdraw(tokenAmount, false); TransferHelper.safeTransfer(tokenAddress, msg.sender, tokenAmount); return; diff --git a/src/hardhat/contracts/Staking/FraxUnifiedFarm_ERC20.sol b/src/hardhat/contracts/Staking/FraxUnifiedFarm_ERC20.sol index e230afa8..a8488b9a 100755 --- a/src/hardhat/contracts/Staking/FraxUnifiedFarm_ERC20.sol +++ b/src/hardhat/contracts/Staking/FraxUnifiedFarm_ERC20.sol @@ -26,12 +26,13 @@ import "./FraxUnifiedFarmTemplate.sol"; // Convex wrappers // import "../Curve/ICurvefrxETHETHPool.sol"; -// import "../Misc_AMOs/convex/IConvexStakingWrapperFrax.sol"; +import "../Misc_AMOs/convex/IConvexStakingWrapperFrax.sol"; // import "../Misc_AMOs/convex/IDepositToken.sol"; // import "../Misc_AMOs/curve/I2pool.sol"; // import "../Misc_AMOs/curve/I2poolToken.sol"; // import "../Misc_AMOs/curve/I2poolTokenNoLending.sol"; -// import "../Misc_AMOs/curve/ICurveStableSwapNG.sol"; +import "../Misc_AMOs/curve/ICurveStableSwapNG.sol"; +// import "../Misc_AMOs/curve/ICurveStableSwapMetaNG.sol"; // import "../Misc_AMOs/curve/ICurveTricryptoOptimizedWETH.sol"; // Convex FXB @@ -83,18 +84,20 @@ contract FraxUnifiedFarm_ERC20 is FraxUnifiedFarmTemplate { // Declared in FraxUnifiedFarmTemplate.sol // Convex crvUSD/FRAX - // IConvexStakingWrapperFrax public stakingToken; + IConvexStakingWrapperFrax public stakingToken; // I2poolTokenNoLending public curveToken; // ICurvefrxETHETHPool public curvePool; // Convex stkcvxFPIFRAX, stkcvxFRAXBP, etc // IConvexStakingWrapperFrax public stakingToken; // I2poolToken public curveToken; - // ICurveStableSwapNG public curveToken; + ICurveStableSwapNG public curveToken; + // ICurveStableSwapMetaNG public curveToken; // ICurveTricryptoOptimizedWETH public curveToken; // I2pool public curvePool; // ICurvefrxETHETHPool public curvePool; - // ICurveStableSwapNG public curvePool; + ICurveStableSwapNG public curvePool; + // ICurveStableSwapMetaNG public curvePool; // ICurveTricryptoOptimizedWETH public curvePool; // Fraxswap @@ -483,11 +486,11 @@ contract FraxUnifiedFarm_ERC20 is FraxUnifiedFarmTemplate { // Pull the tokens from the sender TransferHelper.safeTransferFrom(address(stakingToken), msg.sender, address(this), addl_liq); - // Aura & Balancer - // Deposit the tokens into the Aura vault - // ========================================= - stakingToken.approve(address(aura_deposit_vault), addl_liq); - aura_deposit_vault.stake(addl_liq); + // // Aura & Balancer + // // Deposit the tokens into the Aura vault + // // ========================================= + // stakingToken.approve(address(aura_deposit_vault), addl_liq); + // aura_deposit_vault.stake(addl_liq); // Update the stake lockedStakes[msg.sender][theArrayIndex] = LockedStake( @@ -571,11 +574,11 @@ contract FraxUnifiedFarm_ERC20 is FraxUnifiedFarmTemplate { // Varies per farm TransferHelper.safeTransferFrom(address(stakingToken), source_address, address(this), liquidity); - // Aura & Balancer - // Deposit the tokens into the Aura vault - // ========================================= - stakingToken.approve(address(aura_deposit_vault), liquidity); - aura_deposit_vault.stake(liquidity); + // // Aura & Balancer + // // Deposit the tokens into the Aura vault + // // ========================================= + // stakingToken.approve(address(aura_deposit_vault), liquidity); + // aura_deposit_vault.stake(liquidity); // Get the lock multiplier and kek_id uint256 lock_multiplier = lockMultiplier(secs); @@ -638,10 +641,10 @@ contract FraxUnifiedFarm_ERC20 is FraxUnifiedFarmTemplate { if (liquidity > 0) { - // Aura & Balancer - // Withdraw the tokens from the Aura vault. Do not claim - // ========================================= - aura_deposit_vault.withdraw(liquidity, false); + // // Aura & Balancer + // // Withdraw the tokens from the Aura vault. Do not claim + // // ========================================= + // aura_deposit_vault.withdraw(liquidity, false); // Give the tokens to the destination_address // Should throw if insufficient balance diff --git a/src/hardhat/contracts/Staking/Variants/FraxUnifiedFarm_ERC20_Convex_FRAXBP_Volatile.sol b/src/hardhat/contracts/Staking/Variants/FraxUnifiedFarm_ERC20_Convex_FRAXBP_Volatile.sol index 098f2b41..5ad77e89 100755 --- a/src/hardhat/contracts/Staking/Variants/FraxUnifiedFarm_ERC20_Convex_FRAXBP_Volatile.sol +++ b/src/hardhat/contracts/Staking/Variants/FraxUnifiedFarm_ERC20_Convex_FRAXBP_Volatile.sol @@ -24,7 +24,7 @@ contract FraxUnifiedFarm_ERC20_Convex_FRAXBP_Volatile is FraxUnifiedFarm_ERC20 { { // COMMENTED OUT SO COMPILER DOESNT COMPLAIN. UNCOMMENT WHEN DEPLOYING - // // Convex stkcvxFPIFRAX and stkcvxFRAXBP. Also Volatile/FRAXBP + // Convex stkcvxFPIFRAX and stkcvxFRAXBP. Also Volatile/FRAXBP // stakingToken = IConvexStakingWrapperFrax(_stakingToken); // curveToken = I2poolToken(stakingToken.curveToken()); // curvePool = I2pool(curveToken.minter()); @@ -35,8 +35,8 @@ contract FraxUnifiedFarm_ERC20_Convex_FRAXBP_Volatile is FraxUnifiedFarm_ERC20 { function fraxPerLPToken() public view override returns (uint256 frax_per_lp_token) { // COMMENTED OUT SO COMPILER DOESNT COMPLAIN. UNCOMMENT WHEN DEPLOYING - // // Convex Volatile/FRAXBP - // // ============================================ + // Convex Volatile/FRAXBP + // ============================================ // { // // Half of the LP is FRAXBP. Half of that should be FRAX. // // Using 0.25 * lp price for gas savings diff --git a/src/hardhat/contracts/Staking/Variants/FraxUnifiedFarm_ERC20_Convex_Generic.sol b/src/hardhat/contracts/Staking/Variants/FraxUnifiedFarm_ERC20_Convex_Generic.sol index 878307f3..a8f78f4e 100755 --- a/src/hardhat/contracts/Staking/Variants/FraxUnifiedFarm_ERC20_Convex_Generic.sol +++ b/src/hardhat/contracts/Staking/Variants/FraxUnifiedFarm_ERC20_Convex_Generic.sol @@ -11,6 +11,7 @@ import "../../Misc_AMOs/convex/IDepositToken.sol"; import "../../Misc_AMOs/curve/I2poolToken.sol"; import "../../Misc_AMOs/curve/I2pool.sol"; import "../../Misc_AMOs/curve/ICurveStableSwapNG.sol"; +import "../../Misc_AMOs/curve/ICurveStableSwapMetaNG.sol"; import "../../Misc_AMOs/curve/ICurveTricryptoOptimizedWETH.sol"; import "../../Oracle/AggregatorV3Interface.sol"; @@ -22,9 +23,9 @@ contract FraxUnifiedFarm_ERC20_Convex_Generic is FraxUnifiedFarm_ERC20 { // IFPI public FPI = IFPI(0x5Ca135cB8527d76e932f34B5145575F9d8cbE08E); // ICPITrackerOracle public FPI_ORACLE = ICPITrackerOracle(0x66B7DFF2Ac66dc4d6FBB3Db1CB627BBb01fF3146); - // Convex tricryptoFRAX - // ============================================ - AggregatorV3Interface internal priceFeedETHUSD = AggregatorV3Interface(0x5f4eC3Df9cbd43714FE2740f5E3616155c5b8419); + // // Convex tricryptoFRAX + // // ============================================ + // AggregatorV3Interface internal priceFeedETHUSD = AggregatorV3Interface(0x5f4eC3Df9cbd43714FE2740f5E3616155c5b8419); constructor ( address _owner, @@ -50,6 +51,12 @@ contract FraxUnifiedFarm_ERC20_Convex_Generic is FraxUnifiedFarm_ERC20 { // curveToken = ICurveStableSwapNG(stakingToken.curveToken()); // curvePool = ICurveStableSwapNG(curveToken); + // Convex DOLA/FRAXPYUSD + // ============================================ + // stakingToken = IConvexStakingWrapperFrax(_stakingToken); + // curveToken = ICurveStableSwapMetaNG(stakingToken.curveToken()); + // curvePool = ICurveStableSwapMetaNG(curveToken); + // Convex FRAX/USDP // ============================================ // stakingToken = IConvexStakingWrapperFrax(_stakingToken); @@ -70,21 +77,21 @@ contract FraxUnifiedFarm_ERC20_Convex_Generic is FraxUnifiedFarm_ERC20 { } - // Convex tricryptoFRAX - // ============================================ - function getLatestETHPriceE8() public view returns (int) { - // Returns in E8 - (uint80 roundID, int price, , uint256 updatedAt, uint80 answeredInRound) = priceFeedETHUSD.latestRoundData(); - require(price >= 0 && updatedAt!= 0 && answeredInRound >= roundID, "Invalid chainlink price"); + // // Convex tricryptoFRAX + // // ============================================ + // function getLatestETHPriceE8() public view returns (int) { + // // Returns in E8 + // (uint80 roundID, int price, , uint256 updatedAt, uint80 answeredInRound) = priceFeedETHUSD.latestRoundData(); + // require(price >= 0 && updatedAt!= 0 && answeredInRound >= roundID, "Invalid chainlink price"); - return price; - } + // return price; + // } - function setETHUSDOracle(address _eth_usd_oracle_address) public onlyByOwnGov { - require(_eth_usd_oracle_address != address(0), "Zero address detected"); + // function setETHUSDOracle(address _eth_usd_oracle_address) public onlyByOwnGov { + // require(_eth_usd_oracle_address != address(0), "Zero address detected"); - priceFeedETHUSD = AggregatorV3Interface(_eth_usd_oracle_address); - } + // priceFeedETHUSD = AggregatorV3Interface(_eth_usd_oracle_address); + // } function fraxPerLPToken() public view override returns (uint256 frax_per_lp_token) { // COMMENTED OUT SO COMPILER DOESNT COMPLAIN. UNCOMMENT WHEN DEPLOYING @@ -105,6 +112,14 @@ contract FraxUnifiedFarm_ERC20_Convex_Generic is FraxUnifiedFarm_ERC20 { // frax_per_lp_token = curvePool.get_virtual_price() / 2; // } + // Convex DOLA/FRAXPYUSD + // ============================================ + // { + // // One quarter of the LP should be FRAX + // // Using 0.25 * virtual price for gas savings + // frax_per_lp_token = curvePool.get_virtual_price() / 4; + // } + // Convex FRAX/sDAI // ============================================ // { diff --git a/src/hardhat/contracts/Staking/Variants/FraxUnifiedFarm_ERC20_Convex_frxETH.sol b/src/hardhat/contracts/Staking/Variants/FraxUnifiedFarm_ERC20_Convex_frxETH.sol index cdac37d5..1adf554a 100755 --- a/src/hardhat/contracts/Staking/Variants/FraxUnifiedFarm_ERC20_Convex_frxETH.sol +++ b/src/hardhat/contracts/Staking/Variants/FraxUnifiedFarm_ERC20_Convex_frxETH.sol @@ -8,6 +8,7 @@ import "../../Misc_AMOs/convex/IDepositToken.sol"; import "../../Misc_AMOs/curve/I2pool.sol"; import "../../Misc_AMOs/curve/I2poolToken.sol"; import "../../Misc_AMOs/curve/ICurveStableSwapNG.sol"; +import "../../Misc_AMOs/curve/ICurveStableSwapMetaNG.sol"; import "../../Oracle/AggregatorV3Interface.sol"; import "../../ERC20/IERC20.sol"; @@ -41,9 +42,9 @@ contract FraxUnifiedFarm_ERC20_Convex_frxETH is FraxUnifiedFarm_ERC20 { // curvePool = ICurvefrxETHETHPool(stakingToken.curveToken()); // Convex frxETH/XYZ NGs (TOKEN = MINTER / POOL)) - // stakingToken = IConvexStakingWrapperFrax(_stakingToken); - // curveToken = ICurveStableSwapNG(stakingToken.curveToken()); - // curvePool = ICurveStableSwapNG(stakingToken.curveToken()); + stakingToken = IConvexStakingWrapperFrax(_stakingToken); + curveToken = ICurveStableSwapNG(stakingToken.curveToken()); + curvePool = ICurveStableSwapNG(stakingToken.curveToken()); } function getLatestETHPriceE8() public view returns (int) { @@ -65,13 +66,13 @@ contract FraxUnifiedFarm_ERC20_Convex_frxETH is FraxUnifiedFarm_ERC20 { // Convex frxETH/XYZ // ============================================ - // { - // // Assume frxETH = ETH for pricing purposes - // // Get the USD value of the frxETH per LP token - // uint256 frxETH_in_pool = IERC20(0x5E8422345238F34275888049021821E8E08CAa1f).balanceOf(address(curvePool)); - // uint256 frxETH_usd_val_per_lp_e8 = (frxETH_in_pool * uint256(getLatestETHPriceE8())) / curveToken.totalSupply(); - // frax_per_lp_token = frxETH_usd_val_per_lp_e8 * (1e10); // We use USD as "Frax" here - // } + { + // Assume frxETH = ETH for pricing purposes + // Get the USD value of the frxETH per LP token + uint256 frxETH_in_pool = IERC20(0x5E8422345238F34275888049021821E8E08CAa1f).balanceOf(address(curvePool)); + uint256 frxETH_usd_val_per_lp_e8 = (frxETH_in_pool * uint256(getLatestETHPriceE8())) / curveToken.totalSupply(); + frax_per_lp_token = frxETH_usd_val_per_lp_e8 * (1e10); // We use USD as "Frax" here + } } } \ No newline at end of file diff --git a/src/hardhat/contracts/Staking/Variants/FraxUnifiedFarm_ERC20_Other.sol b/src/hardhat/contracts/Staking/Variants/FraxUnifiedFarm_ERC20_Other.sol index 4c8b3150..8b11440e 100755 --- a/src/hardhat/contracts/Staking/Variants/FraxUnifiedFarm_ERC20_Other.sol +++ b/src/hardhat/contracts/Staking/Variants/FraxUnifiedFarm_ERC20_Other.sol @@ -49,9 +49,9 @@ contract FraxUnifiedFarm_ERC20_Other is FraxUnifiedFarm_ERC20 { // COMMENTED OUT SO COMPILER DOESNT COMPLAIN. UNCOMMENT WHEN DEPLOYING // Balancer - stakingToken = IAuraDeposit(_stakingToken); - bal_vanilla_lp_tkn = IComposableStablePool(0xB06bFBD7b50F80c8d9dA57Fc4cF5CBD5B3E2f148); - bal_vanilla_vault = IBalancerVault(bal_vanilla_lp_tkn.getVault()); + // stakingToken = IAuraDeposit(_stakingToken); + // bal_vanilla_lp_tkn = IComposableStablePool(0xB06bFBD7b50F80c8d9dA57Fc4cF5CBD5B3E2f148); + // bal_vanilla_vault = IBalancerVault(bal_vanilla_lp_tkn.getVault()); // Bunni // stakingToken = IBunniGauge(_stakingToken); @@ -99,19 +99,19 @@ contract FraxUnifiedFarm_ERC20_Other is FraxUnifiedFarm_ERC20 { // Aura / Balancer frxETH-pxETH // ============================================ - { - // Get the pool ID - bytes32 _poolId = bal_vanilla_lp_tkn.getPoolId(); - - // Get the balances of each token in the pool - ( , uint256[] memory balances, ) = bal_vanilla_vault.getPoolTokens(_poolId); - uint256 frxETH_in_pool = balances[1]; - uint256 frxETH_usd_value_e36 = (1e10) * (frxETH_in_pool * uint256(getLatestETHPriceE8())); - - // Calculate the frxETH value per "actual" LP - // Balancer vault to Aura deposit vault is 1:1 - frax_per_lp_token = (frxETH_usd_value_e36) / bal_vanilla_lp_tkn.getActualSupply(); - } + // { + // // Get the pool ID + // bytes32 _poolId = bal_vanilla_lp_tkn.getPoolId(); + + // // Get the balances of each token in the pool + // ( , uint256[] memory balances, ) = bal_vanilla_vault.getPoolTokens(_poolId); + // uint256 frxETH_in_pool = balances[1]; + // uint256 frxETH_usd_value_e36 = (1e10) * (frxETH_in_pool * uint256(getLatestETHPriceE8())); + + // // Calculate the frxETH value per "actual" LP + // // Balancer vault to Aura deposit vault is 1:1 + // frax_per_lp_token = (frxETH_usd_value_e36) / bal_vanilla_lp_tkn.getActualSupply(); + // } // Bunni FRAX/USDC Gauge // ============================================ diff --git a/src/hardhat/gnosis-safe-scripts/Convex_Farm_Deployments/Script_Constants.js b/src/hardhat/gnosis-safe-scripts/Convex_Farm_Deployments/Script_Constants.js index db62655f..8aad7e70 100644 --- a/src/hardhat/gnosis-safe-scripts/Convex_Farm_Deployments/Script_Constants.js +++ b/src/hardhat/gnosis-safe-scripts/Convex_Farm_Deployments/Script_Constants.js @@ -16,24 +16,30 @@ let ADDRS_ETH_FARMS = ADDRS_ETH.staking_contracts; const wrapperAddrs = [ + // ADDRS_ETH_LPS['Convex stkcvxCVGFRAXBP'], + // ADDRS_ETH_LPS['Convex stkcvxDOLAFRAXPYUSD'], // ADDRS_ETH_LPS['Convex stkcvxFRAXFPI_NG'], // ADDRS_ETH_LPS['Convex stkcvxFRAXPYUSD'], // ADDRS_ETH_LPS['Convex stkcvxFRAXsDAI'], // ADDRS_ETH_LPS['Convex stkcvxFRAXFXB_20240630'], // ADDRS_ETH_LPS['Convex stkcvxFRAXFXB_20241231'], // ADDRS_ETH_LPS['Convex stkcvxFRAXFXB_20261231'], - ADDRS_ETH_LPS['Convex stkcvxfrxETHpxETH'], + // ADDRS_ETH_LPS['Convex stkcvxfrxETHpxETH'], + ADDRS_ETH_LPS['Convex stkcvxfrxETHzunETH'], // ADDRS_ETH_LPS['Convex stkcvxtricryptoFRAX'], ]; const farmAddrs = [ + // ADDRS_ETH_FARMS['Convex stkcvxCVGFRAXBP'], + // ADDRS_ETH_FARMS['Convex stkcvxDOLAFRAXPYUSD'], // ADDRS_ETH_FARMS['Convex stkcvxFRAXFPI_NG'], // ADDRS_ETH_FARMS['Convex stkcvxFRAXPYUSD'], // ADDRS_ETH_FARMS['Convex stkcvxFRAXsDAI'], // ADDRS_ETH_FARMS['Convex stkcvxFRAXFXB_20240630'], // ADDRS_ETH_FARMS['Convex stkcvxFRAXFXB_20241231'], // ADDRS_ETH_FARMS['Convex stkcvxFRAXFXB_20261231'], - ADDRS_ETH_FARMS['Convex stkcvxfrxETHpxETH'], + // ADDRS_ETH_FARMS['Convex stkcvxfrxETHpxETH'], + ADDRS_ETH_FARMS['Convex stkcvxfrxETHzunETH'], // ADDRS_ETH_FARMS['Convex stkcvxtricryptoFRAX'], ]; diff --git a/src/hardhat/gnosis-safe-scripts/Convex_Farm_Deployments/Step_1_Vault_Gauge_Proxy.json b/src/hardhat/gnosis-safe-scripts/Convex_Farm_Deployments/Step_1_Vault_Gauge_Proxy.json index 3e640c70..ab516fb7 100644 --- a/src/hardhat/gnosis-safe-scripts/Convex_Farm_Deployments/Step_1_Vault_Gauge_Proxy.json +++ b/src/hardhat/gnosis-safe-scripts/Convex_Farm_Deployments/Step_1_Vault_Gauge_Proxy.json @@ -1 +1 @@ -{"version":"1.0","chainId":"1","createdAt":1704854327000,"meta":{"name":"Transactions Batch","description":"","txBuilderVersion":"1.14.1","createdFromSafeAddress":"0xB1748C79709f4Ba2Dd82834B8c82D4a505003f27","createdFromOwnerAddress":"","checksum":"0xc9ce505f3ebe191f4e5db6bddd93ba4c4b9ee62d073866d8e1437e8c619e3bf4"},"transactions":[{"to":"0x51521Da84Cbce1B4A930B55d8D896b590532f7A6","value":"0","data":null,"contractMethod":{"inputs":[{"internalType":"address","name":"_vault","type":"address"}],"name":"setVault","payable":false},"contractInputsValues":{"_vault":"0xC68A0174401AE002D6DbA8C9788C6dF4c807BD52"}},{"to":"0x3669C421b77340B2979d1A00a792CC2ee0FcE737","value":"0","data":null,"contractMethod":{"inputs":[{"name":"addr","type":"address"},{"name":"gauge_type","type":"int128"},{"name":"weight","type":"uint256"}],"name":"add_gauge","payable":false},"contractInputsValues":{"addr":"0xC68A0174401AE002D6DbA8C9788C6dF4c807BD52","gauge_type":"0","weight":"1000"}},{"to":"0xC68A0174401AE002D6DbA8C9788C6dF4c807BD52","value":"0","data":null,"contractMethod":{"inputs":[{"internalType":"address","name":"reward_token_address","type":"address"},{"internalType":"uint256","name":"_new_rate","type":"uint256"},{"internalType":"address","name":"_gauge_controller_address","type":"address"},{"internalType":"address","name":"_rewards_distributor_address","type":"address"}],"name":"setRewardVars","payable":false},"contractInputsValues":{"reward_token_address":"0x3432B6A60D23Ca0dFCa7761B7ab56459D9C964D0","_new_rate":"0","_gauge_controller_address":"0x3669C421b77340B2979d1A00a792CC2ee0FcE737","_rewards_distributor_address":"0x278dC748edA1d8eFEf1aDFB518542612b49Fcd34"}},{"to":"0xC68A0174401AE002D6DbA8C9788C6dF4c807BD52","value":"0","data":null,"contractMethod":{"inputs":[{"internalType":"address","name":"_proxy_addr","type":"address"}],"name":"toggleValidVeFXSProxy","payable":false},"contractInputsValues":{"_proxy_addr":"0x59CFCD384746ec3035299D90782Be065e466800B"}}]} \ No newline at end of file +{"version":"1.0","chainId":"1","createdAt":1714343891000,"meta":{"name":"Transactions Batch","description":"","txBuilderVersion":"1.14.1","createdFromSafeAddress":"0xB1748C79709f4Ba2Dd82834B8c82D4a505003f27","createdFromOwnerAddress":"","checksum":"0x76bf9dc2ce6276f0b919f99cb89ac246dbb7e22b2a55e61aeec89f456c5c61b1"},"transactions":[{"to":"0xD893522D2CCd40eA6C1414815e3eAD1B58a83D51","value":"0","data":null,"contractMethod":{"inputs":[{"internalType":"address","name":"_vault","type":"address"}],"name":"setVault","payable":false},"contractInputsValues":{"_vault":"0xE2E998A68C6f1D10c41884931457B7C302C6fA97"}},{"to":"0x3669C421b77340B2979d1A00a792CC2ee0FcE737","value":"0","data":null,"contractMethod":{"inputs":[{"name":"addr","type":"address"},{"name":"gauge_type","type":"int128"},{"name":"weight","type":"uint256"}],"name":"add_gauge","payable":false},"contractInputsValues":{"addr":"0xE2E998A68C6f1D10c41884931457B7C302C6fA97","gauge_type":"0","weight":"1000"}},{"to":"0xE2E998A68C6f1D10c41884931457B7C302C6fA97","value":"0","data":null,"contractMethod":{"inputs":[{"internalType":"address","name":"reward_token_address","type":"address"},{"internalType":"uint256","name":"_new_rate","type":"uint256"},{"internalType":"address","name":"_gauge_controller_address","type":"address"},{"internalType":"address","name":"_rewards_distributor_address","type":"address"}],"name":"setRewardVars","payable":false},"contractInputsValues":{"reward_token_address":"0x3432B6A60D23Ca0dFCa7761B7ab56459D9C964D0","_new_rate":"0","_gauge_controller_address":"0x3669C421b77340B2979d1A00a792CC2ee0FcE737","_rewards_distributor_address":"0x278dC748edA1d8eFEf1aDFB518542612b49Fcd34"}},{"to":"0xE2E998A68C6f1D10c41884931457B7C302C6fA97","value":"0","data":null,"contractMethod":{"inputs":[{"internalType":"address","name":"_proxy_addr","type":"address"}],"name":"toggleValidVeFXSProxy","payable":false},"contractInputsValues":{"_proxy_addr":"0x59CFCD384746ec3035299D90782Be065e466800B"}}]} \ No newline at end of file diff --git a/src/hardhat/gnosis-safe-scripts/Convex_Farm_Deployments/Step_2_CRVCVXDistro_Contracts.json b/src/hardhat/gnosis-safe-scripts/Convex_Farm_Deployments/Step_2_CRVCVXDistro_Contracts.json index 35575445..ae634b63 100644 --- a/src/hardhat/gnosis-safe-scripts/Convex_Farm_Deployments/Step_2_CRVCVXDistro_Contracts.json +++ b/src/hardhat/gnosis-safe-scripts/Convex_Farm_Deployments/Step_2_CRVCVXDistro_Contracts.json @@ -1 +1 @@ -{"version":"1.0","chainId":"1","createdAt":1704926255000,"meta":{"name":"Transactions Batch","description":"","txBuilderVersion":"1.14.1","createdFromSafeAddress":"0xB1748C79709f4Ba2Dd82834B8c82D4a505003f27","createdFromOwnerAddress":"","checksum":"0xb74bcb708b499b85326b8528032862bc29405c11994aee1a3f84b7fc7f87d889"},"transactions":[{"to":"0xC68A0174401AE002D6DbA8C9788C6dF4c807BD52","value":"0","data":null,"contractMethod":{"inputs":[{"internalType":"address","name":"reward_token_address","type":"address"},{"internalType":"address","name":"new_manager_address","type":"address"}],"name":"changeTokenManager","payable":false},"contractInputsValues":{"reward_token_address":"0xd533a949740bb3306d119cc777fa900ba034cd52","new_manager_address":"0xE2CAFd4290c1df48650a39fAc1F8B98E8CF2DF71"}},{"to":"0xC68A0174401AE002D6DbA8C9788C6dF4c807BD52","value":"0","data":null,"contractMethod":{"inputs":[{"internalType":"address","name":"reward_token_address","type":"address"},{"internalType":"uint256","name":"_new_rate","type":"uint256"},{"internalType":"address","name":"_gauge_controller_address","type":"address"},{"internalType":"address","name":"_rewards_distributor_address","type":"address"}],"name":"setRewardVars","payable":false},"contractInputsValues":{"reward_token_address":"0xd533a949740bb3306d119cc777fa900ba034cd52","_new_rate":"0","_gauge_controller_address":"0x0000000000000000000000000000000000000000","_rewards_distributor_address":"0xE2CAFd4290c1df48650a39fAc1F8B98E8CF2DF71"}},{"to":"0xC68A0174401AE002D6DbA8C9788C6dF4c807BD52","value":"0","data":null,"contractMethod":{"inputs":[{"internalType":"address","name":"reward_token_address","type":"address"},{"internalType":"address","name":"new_manager_address","type":"address"}],"name":"changeTokenManager","payable":false},"contractInputsValues":{"reward_token_address":"0x4e3fbd56cd56c3e72c1403e103b45db9da5b9d2b","new_manager_address":"0xE2CAFd4290c1df48650a39fAc1F8B98E8CF2DF71"}},{"to":"0xC68A0174401AE002D6DbA8C9788C6dF4c807BD52","value":"0","data":null,"contractMethod":{"inputs":[{"internalType":"address","name":"reward_token_address","type":"address"},{"internalType":"uint256","name":"_new_rate","type":"uint256"},{"internalType":"address","name":"_gauge_controller_address","type":"address"},{"internalType":"address","name":"_rewards_distributor_address","type":"address"}],"name":"setRewardVars","payable":false},"contractInputsValues":{"reward_token_address":"0x4e3fbd56cd56c3e72c1403e103b45db9da5b9d2b","_new_rate":"0","_gauge_controller_address":"0x0000000000000000000000000000000000000000","_rewards_distributor_address":"0xE2CAFd4290c1df48650a39fAc1F8B98E8CF2DF71"}}]} \ No newline at end of file +{"version":"1.0","chainId":"1","createdAt":1714412363000,"meta":{"name":"Transactions Batch","description":"","txBuilderVersion":"1.14.1","createdFromSafeAddress":"0xB1748C79709f4Ba2Dd82834B8c82D4a505003f27","createdFromOwnerAddress":"","checksum":"0xf3df41c088205a738fa0041b74c459fd76809bcb2bd719c6c008086cb34235b8"},"transactions":[{"to":"0xE2E998A68C6f1D10c41884931457B7C302C6fA97","value":"0","data":null,"contractMethod":{"inputs":[{"internalType":"address","name":"reward_token_address","type":"address"},{"internalType":"address","name":"new_manager_address","type":"address"}],"name":"changeTokenManager","payable":false},"contractInputsValues":{"reward_token_address":"0xd533a949740bb3306d119cc777fa900ba034cd52","new_manager_address":"0x9CCdb23A101F2Af81CD4291b841537472ee7abD1"}},{"to":"0xE2E998A68C6f1D10c41884931457B7C302C6fA97","value":"0","data":null,"contractMethod":{"inputs":[{"internalType":"address","name":"reward_token_address","type":"address"},{"internalType":"uint256","name":"_new_rate","type":"uint256"},{"internalType":"address","name":"_gauge_controller_address","type":"address"},{"internalType":"address","name":"_rewards_distributor_address","type":"address"}],"name":"setRewardVars","payable":false},"contractInputsValues":{"reward_token_address":"0xd533a949740bb3306d119cc777fa900ba034cd52","_new_rate":"0","_gauge_controller_address":"0x0000000000000000000000000000000000000000","_rewards_distributor_address":"0x9CCdb23A101F2Af81CD4291b841537472ee7abD1"}},{"to":"0xE2E998A68C6f1D10c41884931457B7C302C6fA97","value":"0","data":null,"contractMethod":{"inputs":[{"internalType":"address","name":"reward_token_address","type":"address"},{"internalType":"address","name":"new_manager_address","type":"address"}],"name":"changeTokenManager","payable":false},"contractInputsValues":{"reward_token_address":"0x4e3fbd56cd56c3e72c1403e103b45db9da5b9d2b","new_manager_address":"0x9CCdb23A101F2Af81CD4291b841537472ee7abD1"}},{"to":"0xE2E998A68C6f1D10c41884931457B7C302C6fA97","value":"0","data":null,"contractMethod":{"inputs":[{"internalType":"address","name":"reward_token_address","type":"address"},{"internalType":"uint256","name":"_new_rate","type":"uint256"},{"internalType":"address","name":"_gauge_controller_address","type":"address"},{"internalType":"address","name":"_rewards_distributor_address","type":"address"}],"name":"setRewardVars","payable":false},"contractInputsValues":{"reward_token_address":"0x4e3fbd56cd56c3e72c1403e103b45db9da5b9d2b","_new_rate":"0","_gauge_controller_address":"0x0000000000000000000000000000000000000000","_rewards_distributor_address":"0x9CCdb23A101F2Af81CD4291b841537472ee7abD1"}}]} \ No newline at end of file diff --git a/src/hardhat/gnosis-safe-scripts/Convex_Farm_Deployments/Step_3_RewDist_Seeding_Sync.json b/src/hardhat/gnosis-safe-scripts/Convex_Farm_Deployments/Step_3_RewDist_Seeding_Sync.json index db2412ba..503c5646 100644 --- a/src/hardhat/gnosis-safe-scripts/Convex_Farm_Deployments/Step_3_RewDist_Seeding_Sync.json +++ b/src/hardhat/gnosis-safe-scripts/Convex_Farm_Deployments/Step_3_RewDist_Seeding_Sync.json @@ -1 +1 @@ -{"version":"1.0","chainId":"1","createdAt":1704935075000,"meta":{"name":"Transactions Batch","description":"","txBuilderVersion":"1.14.1","createdFromSafeAddress":"0xB1748C79709f4Ba2Dd82834B8c82D4a505003f27","createdFromOwnerAddress":"","checksum":"0x11a9445f8f0e903d3f160d98092136ff7a20725e2eff6ae28d3a7b888c4e7cdb"},"transactions":[{"to":"0x278dC748edA1d8eFEf1aDFB518542612b49Fcd34","value":"0","data":null,"contractMethod":{"inputs":[{"internalType":"address","name":"_gauge_address","type":"address"},{"internalType":"bool","name":"_is_middleman","type":"bool"},{"internalType":"bool","name":"_is_active","type":"bool"}],"name":"setGaugeState","payable":false},"contractInputsValues":{"_gauge_address":"0xC68A0174401AE002D6DbA8C9788C6dF4c807BD52","_is_middleman":"false","_is_active":"true"}},{"to":"0x3432B6A60D23Ca0dFCa7761B7ab56459D9C964D0","value":"0","data":null,"contractMethod":{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","payable":false},"contractInputsValues":{"recipient":"0xC68A0174401AE002D6DbA8C9788C6dF4c807BD52","amount":"1000000000000000000"}},{"to":"0xC68A0174401AE002D6DbA8C9788C6dF4c807BD52","value":"0","data":null,"contractMethod":{"inputs":[],"name":"sync","payable":false},"contractInputsValues":{}}]} \ No newline at end of file +{"version":"1.0","chainId":"1","createdAt":1714413023000,"meta":{"name":"Transactions Batch","description":"","txBuilderVersion":"1.14.1","createdFromSafeAddress":"0xB1748C79709f4Ba2Dd82834B8c82D4a505003f27","createdFromOwnerAddress":"","checksum":"0x0771ed3c5751f474d7dd77ae27325d5961195b0778bd2b2bd5ab5c1841c45e8b"},"transactions":[{"to":"0x278dC748edA1d8eFEf1aDFB518542612b49Fcd34","value":"0","data":null,"contractMethod":{"inputs":[{"internalType":"address","name":"_gauge_address","type":"address"},{"internalType":"bool","name":"_is_middleman","type":"bool"},{"internalType":"bool","name":"_is_active","type":"bool"}],"name":"setGaugeState","payable":false},"contractInputsValues":{"_gauge_address":"0xE2E998A68C6f1D10c41884931457B7C302C6fA97","_is_middleman":"false","_is_active":"true"}},{"to":"0x3432B6A60D23Ca0dFCa7761B7ab56459D9C964D0","value":"0","data":null,"contractMethod":{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","payable":false},"contractInputsValues":{"recipient":"0xE2E998A68C6f1D10c41884931457B7C302C6fA97","amount":"1000000000000000000"}},{"to":"0xE2E998A68C6f1D10c41884931457B7C302C6fA97","value":"0","data":null,"contractMethod":{"inputs":[],"name":"sync","payable":false},"contractInputsValues":{}}]} \ No newline at end of file diff --git a/src/hardhat/gnosis-safe-scripts/Frax_Comptroller_Routine/Sunday_Part_1.js b/src/hardhat/gnosis-safe-scripts/Frax_Comptroller_Routine/Sunday_Part_1.js index 5aab139e..7aca3ef2 100644 --- a/src/hardhat/gnosis-safe-scripts/Frax_Comptroller_Routine/Sunday_Part_1.js +++ b/src/hardhat/gnosis-safe-scripts/Frax_Comptroller_Routine/Sunday_Part_1.js @@ -269,29 +269,88 @@ async function main() { "contractInputsValues": null }); + // Convex Frax FRAX/sDAI (stkcvxFRAXsDAI) rewards + // ================================================================ + const convex_frax_sdai_staking_proxy = new ethers.Contract("0x9145880B721eC3DA9d8a9fA595A34562F139AC69", IStakingProxyConvex_ABI).connect(owner); + const convex_frax_sdai_rewards = await convex_frax_sdai_staking_proxy.earned.staticCall(); + const crv_from_convex_frax_sdai = BigInt(convex_frax_sdai_rewards[1][1]); + const cvx_from_convex_frax_sdai = BigInt(convex_frax_sdai_rewards[1][2]); + + // FRAXsDAI Rewards: Sell all + summary_info.crv_to_sell = summary_info.crv_to_sell + crv_from_convex_frax_sdai; + summary_info.cvx_to_sell = summary_info.cvx_to_sell + cvx_from_convex_frax_sdai; + console.log(`----------- Convex Frax FRAX/sDAI (stkcvxFRAXsDAI) -----------`); + console.log(`CRV: ${formatUnits(crv_from_convex_frax_sdai, 18)}`); + console.log(`CVX: ${formatUnits(cvx_from_convex_frax_sdai, 18)}`); + + // ===================================== + batch_json.transactions.push({ + "to": "0x9145880B721eC3DA9d8a9fA595A34562F139AC69", + "value": "0", + "data": null, + "contractMethod": { + "inputs": [], + "name": "getReward", + "payable": false + }, + "contractInputsValues": null + }); + + // Convex Frax FRAX/pyUSD (stkcvxFRAXpyUSD) rewards + // ================================================================ + const convex_frax_pyusd_staking_proxy = new ethers.Contract("0x0C150631A996716e11F71f8BA77BF8CF6c2D047c", IStakingProxyConvex_ABI).connect(owner); + const convex_frax_pyusd_rewards = await convex_frax_pyusd_staking_proxy.earned.staticCall(); + const crv_from_convex_frax_pyusd = BigInt(convex_frax_pyusd_rewards[1][1]); + const cvx_from_convex_frax_pyusd = BigInt(convex_frax_pyusd_rewards[1][2]); + + // FRAXpyUSD Rewards: Sell all + summary_info.crv_to_sell = summary_info.crv_to_sell + crv_from_convex_frax_pyusd; + summary_info.cvx_to_sell = summary_info.cvx_to_sell + cvx_from_convex_frax_pyusd; + console.log(`----------- Convex Frax FRAX/pyUSD (stkcvxFRAXpyUSD) -----------`); + console.log(`CRV: ${formatUnits(crv_from_convex_frax_pyusd, 18)}`); + console.log(`CVX: ${formatUnits(cvx_from_convex_frax_pyusd, 18)}`); + + // ===================================== + batch_json.transactions.push({ + "to": "0x0C150631A996716e11F71f8BA77BF8CF6c2D047c", + "value": "0", + "data": null, + "contractMethod": { + "inputs": [], + "name": "getReward", + "payable": false + }, + "contractInputsValues": null + }); + + // Convex Frax FRAX/FPI (stkcvxFRAXFPI) rewards + // ================================================================ + const convex_frax_fpi_staking_proxy = new ethers.Contract("0x9592CD5dA20184Cbbf884C5892B150e575674aD0", IStakingProxyConvex_ABI).connect(owner); + const convex_frax_fpi_rewards = await convex_frax_fpi_staking_proxy.earned.staticCall(); + const crv_from_convex_frax_fpi = BigInt(convex_frax_fpi_rewards[1][1]); + const cvx_from_convex_frax_fpi = BigInt(convex_frax_fpi_rewards[1][2]); + + // FRAXFPI Rewards: Sell all + summary_info.crv_to_sell = summary_info.crv_to_sell + crv_from_convex_frax_fpi; + summary_info.cvx_to_sell = summary_info.cvx_to_sell + cvx_from_convex_frax_fpi; + console.log(`----------- Convex Frax FRAX/FPI (stkcvxFRAXFPI) -----------`); + console.log(`CRV: ${formatUnits(crv_from_convex_frax_fpi, 18)}`); + console.log(`CVX: ${formatUnits(cvx_from_convex_frax_fpi, 18)}`); + + // ===================================== + batch_json.transactions.push({ + "to": "0x9592CD5dA20184Cbbf884C5892B150e575674aD0", + "value": "0", + "data": null, + "contractMethod": { + "inputs": [], + "name": "getReward", + "payable": false + }, + "contractInputsValues": null + }); + - // // Convex Frax Frax/FPI (stkcvxFPIFRAX) rewards - // const convex_frax_fpi_staking_proxy = new ethers.Contract("0x2df2378103baB456457329D4C603440B92b9c0bd", IStakingProxyConvex_ABI).connect(owner); - // const convex_frax_fpi_rewards = await convex_frax_fpi_staking_proxy.earned(); - // const crv_from_convex_frax_fpi = BigInt(convex_frax_fpi_rewards[1][1]); - // const cvx_from_convex_frax_fpi = BigInt(convex_frax_fpi_rewards[1][2]); - // summary_info.crv_to_sell = summary_info.crv_to_sell.add(crv_from_convex_frax_fpi); - // summary_info.cvx_to_sell = summary_info.cvx_to_sell.add(cvx_from_convex_frax_fpi); - // console.log(`----------- Convex Frax FRAX/FPI (stkcvxFPIFRAX) -----------`); - // console.log(`CRV: ${formatUnits(crv_from_convex_frax_fpi, 18)}`); - // console.log(`CVX: ${formatUnits(cvx_from_convex_frax_fpi, 18)}`); - // // ===================================== - // batch_json.transactions.push({ - // "to": "0x2df2378103baB456457329D4C603440B92b9c0bd", - // "value": "0", - // "data": null, - // "contractMethod": { - // "inputs": [], - // "name": "getReward", - // "payable": false - // }, - // "contractInputsValues": null - // }); // Convex Curve (cvxLP) Claim All (excluding cvxCRV and locked CVX) // ===================================== @@ -305,18 +364,19 @@ async function main() { const convex_cvxFRAXFPI = new ethers.Contract("0x062450B06EB92F1C4E227C41c987ed97c93Ae232", IConvexBaseRewardPool_ABI).connect(owner); const convex_cvxFRAXPYUSD = new ethers.Contract("0xB10a6e39Ed8a66fEd3aAef3866a95611a49B9a95", IConvexBaseRewardPool_ABI).connect(owner); const convex_cvxFRAXsDAI = new ethers.Contract("0xE627082369689b2B86D948c377A4aE4e739C59eE", IConvexBaseRewardPool_ABI).connect(owner); - + const convex_cvxFRAXUSDe = new ethers.Contract("0xc030b717b96B83bf4EC4a075dD547614953968FD", IConvexBaseRewardPool_ABI).connect(owner); // Get earned CRV const cvx_crv_claim_all_rews = await Promise.all([ - convex_cvxcrvfrax_brp.earned("0xB1748C79709f4Ba2Dd82834B8c82D4a505003f27"), - convex_cvxcrvfrax_usdp_brp.earned("0xB1748C79709f4Ba2Dd82834B8c82D4a505003f27"), - convex_cvxalusd_frax3CRV.earned("0xB1748C79709f4Ba2Dd82834B8c82D4a505003f27"), - convex_cvxgusd_frax3CRV.earned("0xB1748C79709f4Ba2Dd82834B8c82D4a505003f27"), - convex_cvxlusd_frax3CRV.earned("0xB1748C79709f4Ba2Dd82834B8c82D4a505003f27"), - convex_cvxFRAXFPI.earned("0xB1748C79709f4Ba2Dd82834B8c82D4a505003f27"), - convex_cvxFRAXPYUSD.earned("0xB1748C79709f4Ba2Dd82834B8c82D4a505003f27"), - convex_cvxFRAXsDAI.earned("0xB1748C79709f4Ba2Dd82834B8c82D4a505003f27"), + convex_cvxcrvfrax_brp.earned("0xB1748C79709f4Ba2Dd82834B8c82D4a505003f27"), // [0] + convex_cvxcrvfrax_usdp_brp.earned("0xB1748C79709f4Ba2Dd82834B8c82D4a505003f27"), // [1] + convex_cvxalusd_frax3CRV.earned("0xB1748C79709f4Ba2Dd82834B8c82D4a505003f27"), // [2] + convex_cvxgusd_frax3CRV.earned("0xB1748C79709f4Ba2Dd82834B8c82D4a505003f27"), // [3] + convex_cvxlusd_frax3CRV.earned("0xB1748C79709f4Ba2Dd82834B8c82D4a505003f27"), // [4] + convex_cvxFRAXFPI.earned("0xB1748C79709f4Ba2Dd82834B8c82D4a505003f27"), // [5] + convex_cvxFRAXPYUSD.earned("0xB1748C79709f4Ba2Dd82834B8c82D4a505003f27"), // [6] + convex_cvxFRAXsDAI.earned("0xB1748C79709f4Ba2Dd82834B8c82D4a505003f27"), // [7] + convex_cvxFRAXUSDe.earned("0xB1748C79709f4Ba2Dd82834B8c82D4a505003f27"), // [8] ]) // FRAXBP rewards get saved/reinvested, everything else is sold. @@ -330,10 +390,14 @@ async function main() { + cvx_crv_claim_all_rews[4] + cvx_crv_claim_all_rews[5] + cvx_crv_claim_all_rews[6] - + cvx_crv_claim_all_rews[7]; + + cvx_crv_claim_all_rews[7] + + cvx_crv_claim_all_rews[8]; // CVX - summary_info.cvx_to_lock = summary_info.cvx_to_lock + GetCVXMintAmount(cvx_crv_claim_all_rews[0], cvx_total_supply) + // Keep FRAXBP + summary_info.cvx_to_lock = summary_info.cvx_to_lock + GetCVXMintAmount(cvx_crv_claim_all_rews[0], cvx_total_supply); + + // Sell the rest summary_info.cvx_to_sell = summary_info.cvx_to_sell + GetCVXMintAmount(cvx_crv_claim_all_rews[1], cvx_total_supply) + GetCVXMintAmount(cvx_crv_claim_all_rews[2], cvx_total_supply) @@ -341,7 +405,8 @@ async function main() { + GetCVXMintAmount(cvx_crv_claim_all_rews[4], cvx_total_supply) + GetCVXMintAmount(cvx_crv_claim_all_rews[5], cvx_total_supply) + GetCVXMintAmount(cvx_crv_claim_all_rews[6], cvx_total_supply) - + GetCVXMintAmount(cvx_crv_claim_all_rews[7], cvx_total_supply); + + GetCVXMintAmount(cvx_crv_claim_all_rews[7], cvx_total_supply) + + GetCVXMintAmount(cvx_crv_claim_all_rews[8], cvx_total_supply); console.log(`----------- Convex Curve Others -----------`); console.log(`convex_cvxcrvfrax_brp: ${formatUnits(cvx_crv_claim_all_rews[0], 18)} CRV, ${formatUnits(GetCVXMintAmount(cvx_crv_claim_all_rews[0], cvx_total_supply), 18)} CVX`); @@ -352,6 +417,7 @@ async function main() { console.log(`convex_cvxFRAXFPI: ${formatUnits(cvx_crv_claim_all_rews[5], 18)} CRV, ${formatUnits(GetCVXMintAmount(cvx_crv_claim_all_rews[5], cvx_total_supply), 18)} CVX`); console.log(`convex_cvxFRAXPYUSD: ${formatUnits(cvx_crv_claim_all_rews[6], 18)} CRV, ${formatUnits(GetCVXMintAmount(cvx_crv_claim_all_rews[6], cvx_total_supply), 18)} CVX`); console.log(`convex_cvxFRAXsDAI: ${formatUnits(cvx_crv_claim_all_rews[7], 18)} CRV, ${formatUnits(GetCVXMintAmount(cvx_crv_claim_all_rews[7], cvx_total_supply), 18)} CVX`); + console.log(`convex_cvxFRAXUSDe: ${formatUnits(cvx_crv_claim_all_rews[8], 18)} CRV, ${formatUnits(GetCVXMintAmount(cvx_crv_claim_all_rews[8], cvx_total_supply), 18)} CVX`); batch_json.transactions.push({ @@ -500,32 +566,32 @@ async function main() { // Relock expired locked CVX // ===================================== // Determine if you need to process expired locks - const cvx_lock_status = await cvx_locker.lockedBalances("0xB1748C79709f4Ba2Dd82834B8c82D4a505003f27"); - const PROCESS_EXPIRED_LOCKS = (BigInt(cvx_lock_status.unlockable) > BigInt(0)); - if (PROCESS_EXPIRED_LOCKS) { - batch_json.transactions.push({ - "to": "0x72a19342e8F1838460eBFCCEf09F6585e32db86E", - "value": "0", - "data": null, - "contractMethod": { - "inputs": [ - { - "internalType": "bool", - "name": "_relock", - "type": "bool" - } - ], - "name": "processExpiredLocks", - "payable": false - }, - "contractInputsValues": { - "_relock": true, - } - }); - } - else { - console.log("No expired locks to process") - } + // const cvx_lock_status = await cvx_locker.lockedBalances("0xB1748C79709f4Ba2Dd82834B8c82D4a505003f27"); + // const PROCESS_EXPIRED_LOCKS = (BigInt(cvx_lock_status.unlockable) > BigInt(0)); + // if (PROCESS_EXPIRED_LOCKS) { + // batch_json.transactions.push({ + // "to": "0x72a19342e8F1838460eBFCCEf09F6585e32db86E", + // "value": "0", + // "data": null, + // "contractMethod": { + // "inputs": [ + // { + // "internalType": "bool", + // "name": "_relock", + // "type": "bool" + // } + // ], + // "name": "processExpiredLocks", + // "payable": false + // }, + // "contractInputsValues": { + // "_relock": true, + // } + // }); + // } + // else { + // console.log("No expired locks to process") + // } // =============================================================== // ============================ PRISMA =========================== diff --git a/src/hardhat/gnosis-safe-scripts/Frax_Comptroller_Routine/Sunday_Part_1.json b/src/hardhat/gnosis-safe-scripts/Frax_Comptroller_Routine/Sunday_Part_1.json index c1fdc81f..7d9944e8 100644 --- a/src/hardhat/gnosis-safe-scripts/Frax_Comptroller_Routine/Sunday_Part_1.json +++ b/src/hardhat/gnosis-safe-scripts/Frax_Comptroller_Routine/Sunday_Part_1.json @@ -1 +1 @@ -{"version":"1.0","chainId":"1","createdAt":1709409527000,"meta":{"name":"Transactions Batch","description":"","txBuilderVersion":"1.14.1","createdFromSafeAddress":"0xB1748C79709f4Ba2Dd82834B8c82D4a505003f27","createdFromOwnerAddress":"","checksum":"0x4764d3374837e7ae1ba414b0124dd91bcab561c085e8fca5bce48b6ff68e7ff1"},"transactions":[{"to":"0x2AA609715488B09EFA93883759e8B089FBa11296","value":"0","data":null,"contractMethod":{"inputs":[],"name":"getReward","payable":false},"contractInputsValues":null},{"to":"0xD25D60aBafC220dd6F7BA37baD23e1105Db05a06","value":"0","data":null,"contractMethod":{"inputs":[],"name":"getReward","payable":false},"contractInputsValues":null},{"to":"0x3f29cB4111CbdA8081642DA1f75B3c12DECf2516","value":"0","data":null,"contractMethod":{"inputs":[{"internalType":"address[]","name":"rewardContracts","type":"address[]"},{"internalType":"address[]","name":"extraRewardContracts","type":"address[]"},{"internalType":"address[]","name":"tokenRewardContracts","type":"address[]"},{"internalType":"address[]","name":"tokenRewardTokens","type":"address[]"},{"internalType":"uint256","name":"depositCrvMaxAmount","type":"uint256"},{"internalType":"uint256","name":"minAmountOut","type":"uint256"},{"internalType":"uint256","name":"depositCvxMaxAmount","type":"uint256"},{"internalType":"uint256","name":"spendCvxAmount","type":"uint256"},{"internalType":"uint256","name":"options","type":"uint256"}],"name":"claimRewards","payable":false},"contractInputsValues":{"rewardContracts":"[\"0x7e880867363A7e321f5d260Cade2B0Bb2F717B02\", \"0x6991C1CD588c4e6f6f1de3A0bac5B8BbAb7aAF6d\", \"0x26598e3E511ADFadefD70ab2C3475Ff741741104\", \"0x47809eE386D1dEC29c0b13f21ba30F564517538B\", \"0x053e1dad223A206e6BCa24C77786bb69a10e427d\", \"0x062450B06EB92F1C4E227C41c987ed97c93Ae232\", \"0xB10a6e39Ed8a66fEd3aAef3866a95611a49B9a95\", \"0xE627082369689b2B86D948c377A4aE4e739C59eE\"]","extraRewardContracts":"[]","tokenRewardContracts":"[]","tokenRewardTokens":"[]","depositCrvMaxAmount":"0","minAmountOut":"0","depositCvxMaxAmount":"0","spendCvxAmount":"0","options":"0"}},{"to":"0xaa0C3f5F7DFD688C6E646F66CD2a6B66ACdbE434","value":"0","data":null,"contractMethod":{"inputs":[{"internalType":"address","name":"_account","type":"address"}],"name":"getReward","payable":false},"contractInputsValues":{"_account":"0xB1748C79709f4Ba2Dd82834B8c82D4a505003f27"}},{"to":"0x72a19342e8F1838460eBFCCEf09F6585e32db86E","value":"0","data":null,"contractMethod":{"inputs":[{"internalType":"address","name":"_account","type":"address"}],"name":"getReward","payable":false},"contractInputsValues":{"_account":"0xB1748C79709f4Ba2Dd82834B8c82D4a505003f27"}},{"to":"0x0c73f1cFd5C9dFc150C8707Aa47Acbd14F0BE108","value":"0","data":null,"contractMethod":{"inputs":[{"internalType":"address","name":"_account","type":"address"}],"name":"getReward","payable":false},"contractInputsValues":{"_account":"0xB1748C79709f4Ba2Dd82834B8c82D4a505003f27"}},{"to":"0x72a19342e8F1838460eBFCCEf09F6585e32db86E","value":"0","data":null,"contractMethod":{"inputs":[{"internalType":"bool","name":"_relock","type":"bool"}],"name":"processExpiredLocks","payable":false},"contractInputsValues":{"_relock":true}},{"to":"0xC72bc1a8cf9b1A218386df641d8bE99B40436A0f","value":"0","data":null,"contractMethod":{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"claim","payable":false},"contractInputsValues":{"account":"0xB1748C79709f4Ba2Dd82834B8c82D4a505003f27"}},{"to":"0x5E8422345238F34275888049021821E8E08CAa1f","value":"0","data":null,"contractMethod":{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","payable":false},"contractInputsValues":{"spender":"0xac3E018457B222d93114458476f3E3416Abbe38F","amount":"14689600000000000000"}},{"to":"0xac3E018457B222d93114458476f3E3416Abbe38F","value":"0","data":null,"contractMethod":{"inputs":[{"internalType":"uint256","name":"assets","type":"uint256"},{"internalType":"address","name":"receiver","type":"address"}],"name":"deposit","payable":false},"contractInputsValues":{"assets":"14689600000000000000","receiver":"0xB1748C79709f4Ba2Dd82834B8c82D4a505003f27"}},{"to":"0x358fE82370a1B9aDaE2E3ad69D6cF9e503c96018","value":"0","data":null,"contractMethod":{"inputs":[{"internalType":"address","name":"gauge_addr","type":"address"}],"name":"mint","payable":false},"contractInputsValues":{"gauge_addr":"0xB2Ac3382dA625eb41Fc803b57743f941a484e2a6"}},{"to":"0x3814307b86b54b1d8e7B2Ac34662De9125F8f4E6","value":"0","data":null,"contractMethod":{"inputs":[],"name":"collectFees","payable":false},"contractInputsValues":null},{"to":"0x72a19342e8F1838460eBFCCEf09F6585e32db86E","value":"0","data":null,"contractMethod":{"inputs":[{"internalType":"address","name":"_account","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"},{"internalType":"uint256","name":"_spendRatio","type":"uint256"}],"name":"lock","payable":false},"contractInputsValues":{"_account":"0xB1748C79709f4Ba2Dd82834B8c82D4a505003f27","_amount":"124847245010746964501","_spendRatio":"0"}}]} \ No newline at end of file +{"version":"1.0","chainId":"1","createdAt":1714343219000,"meta":{"name":"Transactions Batch","description":"","txBuilderVersion":"1.14.1","createdFromSafeAddress":"0xB1748C79709f4Ba2Dd82834B8c82D4a505003f27","createdFromOwnerAddress":"","checksum":"0xdcd15964a60a73edb1bda27e0eded16cfb8aabef1be9b9d267482047db9b32b3"},"transactions":[{"to":"0x2AA609715488B09EFA93883759e8B089FBa11296","value":"0","data":null,"contractMethod":{"inputs":[],"name":"getReward","payable":false},"contractInputsValues":null},{"to":"0xD25D60aBafC220dd6F7BA37baD23e1105Db05a06","value":"0","data":null,"contractMethod":{"inputs":[],"name":"getReward","payable":false},"contractInputsValues":null},{"to":"0x9145880B721eC3DA9d8a9fA595A34562F139AC69","value":"0","data":null,"contractMethod":{"inputs":[],"name":"getReward","payable":false},"contractInputsValues":null},{"to":"0x0C150631A996716e11F71f8BA77BF8CF6c2D047c","value":"0","data":null,"contractMethod":{"inputs":[],"name":"getReward","payable":false},"contractInputsValues":null},{"to":"0x9592CD5dA20184Cbbf884C5892B150e575674aD0","value":"0","data":null,"contractMethod":{"inputs":[],"name":"getReward","payable":false},"contractInputsValues":null},{"to":"0x3f29cB4111CbdA8081642DA1f75B3c12DECf2516","value":"0","data":null,"contractMethod":{"inputs":[{"internalType":"address[]","name":"rewardContracts","type":"address[]"},{"internalType":"address[]","name":"extraRewardContracts","type":"address[]"},{"internalType":"address[]","name":"tokenRewardContracts","type":"address[]"},{"internalType":"address[]","name":"tokenRewardTokens","type":"address[]"},{"internalType":"uint256","name":"depositCrvMaxAmount","type":"uint256"},{"internalType":"uint256","name":"minAmountOut","type":"uint256"},{"internalType":"uint256","name":"depositCvxMaxAmount","type":"uint256"},{"internalType":"uint256","name":"spendCvxAmount","type":"uint256"},{"internalType":"uint256","name":"options","type":"uint256"}],"name":"claimRewards","payable":false},"contractInputsValues":{"rewardContracts":"[\"0x7e880867363A7e321f5d260Cade2B0Bb2F717B02\", \"0x6991C1CD588c4e6f6f1de3A0bac5B8BbAb7aAF6d\", \"0x26598e3E511ADFadefD70ab2C3475Ff741741104\", \"0x47809eE386D1dEC29c0b13f21ba30F564517538B\", \"0x053e1dad223A206e6BCa24C77786bb69a10e427d\", \"0x062450B06EB92F1C4E227C41c987ed97c93Ae232\", \"0xB10a6e39Ed8a66fEd3aAef3866a95611a49B9a95\", \"0xE627082369689b2B86D948c377A4aE4e739C59eE\"]","extraRewardContracts":"[]","tokenRewardContracts":"[]","tokenRewardTokens":"[]","depositCrvMaxAmount":"0","minAmountOut":"0","depositCvxMaxAmount":"0","spendCvxAmount":"0","options":"0"}},{"to":"0xaa0C3f5F7DFD688C6E646F66CD2a6B66ACdbE434","value":"0","data":null,"contractMethod":{"inputs":[{"internalType":"address","name":"_account","type":"address"}],"name":"getReward","payable":false},"contractInputsValues":{"_account":"0xB1748C79709f4Ba2Dd82834B8c82D4a505003f27"}},{"to":"0x72a19342e8F1838460eBFCCEf09F6585e32db86E","value":"0","data":null,"contractMethod":{"inputs":[{"internalType":"address","name":"_account","type":"address"}],"name":"getReward","payable":false},"contractInputsValues":{"_account":"0xB1748C79709f4Ba2Dd82834B8c82D4a505003f27"}},{"to":"0x0c73f1cFd5C9dFc150C8707Aa47Acbd14F0BE108","value":"0","data":null,"contractMethod":{"inputs":[{"internalType":"address","name":"_account","type":"address"}],"name":"getReward","payable":false},"contractInputsValues":{"_account":"0xB1748C79709f4Ba2Dd82834B8c82D4a505003f27"}},{"to":"0xC72bc1a8cf9b1A218386df641d8bE99B40436A0f","value":"0","data":null,"contractMethod":{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"claim","payable":false},"contractInputsValues":{"account":"0xB1748C79709f4Ba2Dd82834B8c82D4a505003f27"}},{"to":"0x5E8422345238F34275888049021821E8E08CAa1f","value":"0","data":null,"contractMethod":{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","payable":false},"contractInputsValues":{"spender":"0xac3E018457B222d93114458476f3E3416Abbe38F","amount":"9055200000000000000"}},{"to":"0xac3E018457B222d93114458476f3E3416Abbe38F","value":"0","data":null,"contractMethod":{"inputs":[{"internalType":"uint256","name":"assets","type":"uint256"},{"internalType":"address","name":"receiver","type":"address"}],"name":"deposit","payable":false},"contractInputsValues":{"assets":"9055200000000000000","receiver":"0xB1748C79709f4Ba2Dd82834B8c82D4a505003f27"}},{"to":"0x358fE82370a1B9aDaE2E3ad69D6cF9e503c96018","value":"0","data":null,"contractMethod":{"inputs":[{"internalType":"address","name":"gauge_addr","type":"address"}],"name":"mint","payable":false},"contractInputsValues":{"gauge_addr":"0xB2Ac3382dA625eb41Fc803b57743f941a484e2a6"}},{"to":"0x3814307b86b54b1d8e7B2Ac34662De9125F8f4E6","value":"0","data":null,"contractMethod":{"inputs":[],"name":"collectFees","payable":false},"contractInputsValues":null},{"to":"0x72a19342e8F1838460eBFCCEf09F6585e32db86E","value":"0","data":null,"contractMethod":{"inputs":[{"internalType":"address","name":"_account","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"},{"internalType":"uint256","name":"_spendRatio","type":"uint256"}],"name":"lock","payable":false},"contractInputsValues":{"_account":"0xB1748C79709f4Ba2Dd82834B8c82D4a505003f27","_amount":"0","_spendRatio":"0"}}]} \ No newline at end of file diff --git a/src/hardhat/hardhat.config.js b/src/hardhat/hardhat.config.js index 31f31761..89de74f4 100644 --- a/src/hardhat/hardhat.config.js +++ b/src/hardhat/hardhat.config.js @@ -78,7 +78,7 @@ module.exports = { }, chainId: 42161, gas: "auto", - gasPrice: 170000000, // 0.17 Gwei + gasPrice: 150000000, // 0.15 Gwei gasMultiplier: 1.2 }, aurora: { @@ -128,7 +128,7 @@ module.exports = { }, chainId: 1, gas: "auto", - gasPrice: 40000000000, // 40 Gwei + gasPrice: 7000000000, // 7 Gwei gasMultiplier: 1.2, }, evmos: { diff --git a/src/hardhat/old_contracts/Staking/Variants/FraxUnifiedFarm_ERC20_Convex_frxETH_V2.sol b/src/hardhat/old_contracts/Staking/Variants/FraxUnifiedFarm_ERC20_Convex_frxETH_V2.sol index e75e7eb3..de6ad64a 100755 --- a/src/hardhat/old_contracts/Staking/Variants/FraxUnifiedFarm_ERC20_Convex_frxETH_V2.sol +++ b/src/hardhat/old_contracts/Staking/Variants/FraxUnifiedFarm_ERC20_Convex_frxETH_V2.sol @@ -37,9 +37,9 @@ contract FraxUnifiedFarm_ERC20_Convex_frxETH_V2 is FraxUnifiedFarm_ERC20_V2 { // // frax_is_token0 = false; // Doesn't matter for frxETH // Convex swETHfrxETH - stakingToken = IConvexStakingWrapperFrax(_stakingToken); - curveToken = I2poolToken(stakingToken.curveToken()); - curvePool = ICurvefrxETHETHPool(curveToken.minter()); + // stakingToken = IConvexStakingWrapperFrax(_stakingToken); + // curveToken = I2poolToken(stakingToken.curveToken()); + // curvePool = ICurvefrxETHETHPool(curveToken.minter()); // address token0 = curvePool.coins(0); // frax_is_token0 = false; // Doesn't matter for frxETH } diff --git a/src/types/constants.ts b/src/types/constants.ts index 2bb7bcb1..40039a7a 100755 --- a/src/types/constants.ts +++ b/src/types/constants.ts @@ -2473,12 +2473,18 @@ export const CONTRACT_ADDRESSES = { COILFRAXBP_Pool: '0xAF4264916B467e2c9C8aCF07Acc22b9EDdDaDF33', CRVfrxETH: '0xc34993c9adf6a5ab3b4ca27dc71b9c7894a53974', CRVfrxETH_Pool: '0x442f37cfd85d3f35e576ad7d63bba7bb36fcfe4a', + CVGFRAXBP: '0x421e13b4e805993a0d50ad8c6c47a4f693f04424', + CVGFRAXBP_Pool: '0xa7b0e924c2dbb9b4f576cce96ac80657e42c3e42', + CVGFRAXBP_Gauge: '0x8a111b47b31bba40c2f0d2f9a8cf6b6c4b50114e', CVXFRAXBP: '0x7F17A6C77C3938D235b014818092eb6305BdA110', CVXFRAXBP_Pool: '0xBEc570d92AFB7fFc553bdD9d4B4638121000b10D', CVXfrxETH: '0xbb2568deeb365b8b89ef7f9b53e86b34cd5d0490', CVXfrxETH_Pool: '0x6e855d08f2984516c40c4246a385ba4a2edfcd0a', DOLAFRAXBP: '0xE57180685E3348589E9521aa53Af0BCD497E884d', DOLAFRAXBP_Pool: '0xE57180685E3348589E9521aa53Af0BCD497E884d', + DOLAFRAXPYUSD: '0xef484de8C07B6e2d732A92B5F78e81B38f99f95E', + DOLAFRAXPYUSD_Pool: '0xef484de8C07B6e2d732A92B5F78e81B38f99f95E', + DOLAFRAXPYUSD_Gauge: '0x4b092818708a721cb187dfacf41f440adb79044d', FRAXBP: '0x3175Df0976dFA876431C2E9eE6Bc45b65d3473CC', FRAXBP_Pool: '0xDcEF968d416a41Cdac0ED8702fAC8128A64241A2', FRAXFPI: '0x2Cf99A343e4ECF49623E82f2Ec6A9b62e16Ff3fe', @@ -2575,10 +2581,14 @@ export const CONTRACT_ADDRESSES = { cvxCRVFRAXBP: '0x527331F3F550f6f85ACFEcAB9Cc0889180C6f1d5', cvxCRVFRAXBP_Pool: '0x31c325A01861c7dBd331a9270296a31296D797A0', cvxCRV_Rewarder: '0x3Fe65692bfCD0e6CF84cB1E7d24108E434A7587e', + cvxCVGFRAXBP: '0x3cB8E5cac768D6Dd3E7683dBC78E255aae66EDBB', + cvxCVGFRAXBP_Rewarder: '0x0736b746F53826A1eEC888a05EBF592AF68946Db', cvxCVXFRAXBP: '0x123dC033d6fF314211F7953eD31bC805f85C13d5', cvxCVXFRAXBP_Rewarder: '0xf02B3A77b1e7775de10294d78a4c3d77772B484A', cvxDOLAFRAXBP: '0xf7eCC27CC9DB5d28110AF2d89b176A6623c7E351', cvxDOLAFRAXBP_Rewarder: '0x0404d05F3992347d2f0dC3a97bdd147D77C85c1c', + cvxDOLAFRAXPYUSD: '0x430bE19e180fd8c2199eC5FAEabE2F5CDba68C94', + cvxDOLAFRAXPYUSD_Rewarder: '0xE8cBdBFD4A1D776AB1146B63ABD1718b2F92a823', cvxFRAXFPI_NG: '0xBA927A88eb7B7902ffC5cd99b94fA2964d1a1E03', cvxFRAXFPI_NG_Rewarder: '0x062450B06EB92F1C4E227C41c987ed97c93Ae232', cvxFRAXFXB_20240630: '0x5A82ae31C1a36833B9E148d01E967c1b05eDb346', @@ -2677,6 +2687,8 @@ export const CONTRACT_ADDRESSES = { cvxfrxETHstETH_Rewarder: '0xC3D0B8170E105d6476fE407934492930CAc3BDAC', cvxfrxETHzETH: '0x52EdB08ab81e4Cc32cf318aed17dB11c09C3E8B9', cvxfrxETHzETH_Rewarder: '0x98B662443695f7328F6A7fDe9894CC0E88630269', + cvxfrxETHzunETH: '0xCB5d9126402cC17eF47b81BD48B43D52bF474Cd4', + cvxfrxETHzunETH_Rewarder: '0x756d67A10974Fa0e0cE63F82AF4E7ef0d46d452D', cvxgusd3CRV_free: '0x15c2471ef46Fa721990730cfa526BcFb45574576', cvxmsUSDFRAXBP: '0xc3b19502F8c02be75F3f77fd673503520DEB51dD', cvxmsUSDFRAXBP_Rewarder: '0xF189A4a1E845Fd62944F93De497409798523B397', @@ -2733,6 +2745,9 @@ export const CONTRACT_ADDRESSES = { frxETHzETH: '0xfc89b519658967fcbe1f525f1b8f4bf62d9b9018', frxETHzETH_Gauge: '0xb3627140beacb97f9ca52b34090352fdafc77d72', frxETHzETH_Pool: '0xfc89b519658967fcbe1f525f1b8f4bf62d9b9018', + frxETHzunETH: '0x3a65cbaebbfecbea5d0cb523ab56fdbda7ff9aaa', + frxETHzunETH_Gauge: '0x44f30d79f62a3d5340030d64806cd73239889f07', + frxETHzunETH_Pool: '0x3a65cbaebbfecbea5d0cb523ab56fdbda7ff9aaa', gOHM: '0x0ab87046fBb341D058F17CBC4c1133F25a20a52f', gusd3CRV: '0xd2967f45c4f384deea880f807be904762a3dea07', msUSDFRAXBP: '0xc3b19502f8c02be75f3f77fd673503520deb51dd', @@ -2778,8 +2793,10 @@ export const CONTRACT_ADDRESSES = { 'stkcvxCOILFRAXBP (Deprecated)': '0xdA69CeC36AE581C1b2a2EEb77C527Fb7c1331310', stkcvxCRV: '0xaa0c3f5f7dfd688c6e646f66cd2a6b66acdbe434', stkcvxcrvUSDFRAX: '0xb6F63cc2066e7626fA47fCC37E78Df9fe89F1663', + stkcvxCVGFRAXBP: '0x7B465174A93a6d0602fD4ea99eEc86C07e5E1568', stkcvxCVXFRAXBP: '0x93D1De20eaBB21686CFe716f78F67E51ee578185', stkcvxDOLAFRAXBP: '0xF06c8696730cf760619e4fA0eDd0f79ea50531A9', + stkcvxDOLAFRAXPYUSD: '0x8aAa49650C4908156efAc3B47e00745a319c806c', stkcvxFPIFRAX: '0x7287488F8Df7dddc5f373142D4827aAF92AAC845', stkcvxFRAXBP: '0x8a53ee42FB458D4897e15cc7dEa3F75D0F1c3475', stkcvxFRAXFPI_NG: '0x562E4d6C958333a5f0988FFedA11e45C27722994', @@ -2830,6 +2847,7 @@ export const CONTRACT_ADDRESSES = { stkcvxfrxETHstETH: '0xc2eC3d1209FD1Fc512950825f34281EaF9aB13A2', stkcvxfrxETHWETH: '0x08061feC3FC09Aa2Eb4B4B72EA618034CBFD22b0', stkcvxfrxETHzETH: '0xd69068777d1b2dc74522117efA75AA195c0b57DB', + stkcvxfrxETHzunETH: '0xD893522D2CCd40eA6C1414815e3eAD1B58a83D51', stkcvxmsUSDFRAXBP: '0x227b7F44468A0EC0FDdfc3FB0cE09b294E62f875', stkcvxpUSDFRAXBP: '0x7AEF5bDC573dCbfb40EC68b0BAAB03abB846C9c6', stkcvxsUSDFRAXBP: '0x9f0C2673a33b7087e367253f196A7E823fBc2341', @@ -2916,10 +2934,12 @@ export const CONTRACT_ADDRESSES = { 'Convex stkcvxCOILFRAXBP (Deprecated)': '0xdA69CeC36AE581C1b2a2EEb77C527Fb7c1331310', 'Convex stkcvxCOILFRAXBP': '0xa5B6f8Ec4122c5Fe0dBc4Ead8Bfe66A412aE427C', 'Convex stkcvxcrvUSDFRAX': '0xb6F63cc2066e7626fA47fCC37E78Df9fe89F1663', + 'Convex stkcvxCVGFRAXBP': '0x7B465174A93a6d0602fD4ea99eEc86C07e5E1568', 'Convex stkcvxCVXFRAXBP': '0x93D1De20eaBB21686CFe716f78F67E51ee578185', 'Convex stkcvxcvxCRVFRAXBP': '0xa103a6ca0C4D4072BA59a55FD453BFE4197A095B', 'Convex stkcvxcvxFXSFRAXBP': '0xA6A8F315b1a8C9B05433d206b8fECfbF0fC96217', 'Convex stkcvxDOLAFRAXBP': '0xF06c8696730cf760619e4fA0eDd0f79ea50531A9', + 'Convex stkcvxDOLAFRAXPYUSD': '0x8aAa49650C4908156efAc3B47e00745a319c806c', 'Convex stkcvxeUSDFRAXBP': '0x49BF6f9B860fAF73B0b515c06Be1Bcbf4A0db3dF', 'Convex stkcvxGHOFRAXBP': '', 'Convex stkcvxGRAIFRAXBP': '0xDf9BB26ba5a05fcFc2637dC763AA4eb735911568', @@ -2948,6 +2968,7 @@ export const CONTRACT_ADDRESSES = { 'Convex stkcvxfrxETHstETH': '0xc2eC3d1209FD1Fc512950825f34281EaF9aB13A2', 'Convex stkcvxfrxETHWETH': '0x08061feC3FC09Aa2Eb4B4B72EA618034CBFD22b0', 'Convex stkcvxfrxETHzETH': '0xd69068777d1b2dc74522117efA75AA195c0b57DB', + 'Convex stkcvxfrxETHzunETH': '0xD893522D2CCd40eA6C1414815e3eAD1B58a83D51', 'Convex stkcvxLUSDFRAXBP': '0x8C402989a966D37B96f60401A6158D5D49f1381D', 'Convex stkcvxMAIFRAXBP': '0x787eB52b94c4610ABE2C9C5eE95c3a4a16533344', 'Convex stkcvxmkUSDFRAXBP': '0xd529a0FD4249f0b48171140873b1b13a1ad5286d', @@ -3084,10 +3105,12 @@ export const CONTRACT_ADDRESSES = { 'Convex stkcvxCOILFRAXBP (Deprecated)': '0x94c491e298625b1226a89DDA091B3932c59FAbc1', 'Convex stkcvxCOILFRAXBP': '0x39cd4db6460d8B5961F73E997E86DdbB7Ca4D5F6', 'Convex stkcvxcrvUSDFRAX': '0x67CC47cF82785728DD5E3AE9900873a074328658', + 'Convex stkcvxCVGFRAXBP': '0x1ee8D379e374A4A00e7d79AF4Bf2eD2b591561c2', 'Convex stkcvxCVXFRAXBP': '0xeC670c5e0A8A8d5ae5639158565D840DE44CA03f', 'Convex stkcvxcvxCRVFRAXBP': '0x57c9F019B25AaAF822926f4Cacf0a860f61eDd8D', 'Convex stkcvxcvxFXSFRAXBP': '0x2F9504988675c91787E188Ed928D6E042d9052e9', 'Convex stkcvxDOLAFRAXBP': '0xE7211E87D60177575846936F2123b5FA6f0ce8Ab', + 'Convex stkcvxDOLAFRAXPYUSD': '0x972d92f4563Ac9581c730A13A47Ae9d6dCdf18b7', 'Convex stkcvxeUSDFRAXBP': '0x4c9AD8c53d0a001E7fF08a3E5E26dE6795bEA5ac', 'Convex stkcvxFPIFRAX': '0x0a08673E3d7c454E1c6b27acD059C50Df6727FC9', 'Convex stkcvxFRAXBP': '0x963f487796d54d2f27bA6F3Fbe91154cA103b199', @@ -3113,6 +3136,7 @@ export const CONTRACT_ADDRESSES = { 'Convex stkcvxfrxETHsETH': '0xd79Ae34eD6D11A235629A48aeA9F661a241faD4f', 'Convex stkcvxfrxETHstETH': '0x68921998fbc43B360D3cF14a03aF4273CB0cFA44', 'Convex stkcvxfrxETHzETH': '0x882B9fad02D1a7436449dcdE9934Eeb9E287909c', + 'Convex stkcvxfrxETHzunETH': '0xE2E998A68C6f1D10c41884931457B7C302C6fA97', 'Convex stkcvxGHOFRAXBP': '', 'Convex stkcvxGRAIFRAXBP': '0x5684d5566bb438D8Ef7B3C1E5da9450cD19C1b9f', 'Convex stkcvxGUSDFRAXBP': '0xF0Ffe16810B7f412c52C1610e3BC9819A7Dcb366', @@ -3284,13 +3308,21 @@ export const CONTRACT_ADDRESSES = { "Zenlink FRAX/FXS": "", }, middleman_gauges: { - "Balancer frxETH-bb-a-WETH Gauge": "0xE3f4e2b79f1a8bf3b14d9100323Fca24D923f796", + "Balancer frxETH-bb-a-WETH Gauge": "0xE3f4e2b79f1a8bf3b14d9100323Fca24D923f796", // Polygon "Convex FRAXBP [Arbitrum]": "0x636A9d7686bFA0a2ddd93b37A1E33bCdE6C31e8D", // Arbitrum "Convex FRAX/FXB_20241231 [Arbitrum]": "0xba1ED260F9a81088Ecb7602F790a67C773817BDA", // Arbitrum "Convex FRAX/FXB_20261231 [Arbitrum]": "0x2A8499c4a86F7c07e311c73E36575A0Dc2D362C3", // Arbitrum - "Convex frxETH/WETH [Arbitrum]": "0x5608051D98377419d7D861531728DFB869dDc054", - "Convex USD+FRAXBP": "0x840f20ffED887c61435E81fd1231CB923df39d3d", + "Convex frxETH/WETH [Arbitrum]": "0x5608051D98377419d7D861531728DFB869dDc054", // Arbitrum + "Convex HFXB/FRAX [Arbitrum]": "0x53e78a6e12146565c7d7307d07A3C1ABacf3E20F", // Arbitrum + "Convex SQUID/wfrxETH [Fraxtal]": "0xE096E62B4b23C46a748828083458e22b014640f3", // Fraxtal + "Convex USD+FRAXBP": "0x840f20ffED887c61435E81fd1231CB923df39d3d", // Arbitrum "Curve VSTFRAX-f": "0x127963A74c07f72D862F2Bdc225226c3251BD117", // Arbitrum + "FLE FXS/wfrxETH [Fraxtal]": "0x6f82A6551cc351Bc295602C3ea99C78EdACF590C", // Fraxtal + "FLE FRAX/FXS [Fraxtal]": "0x83Dc6775c1B0fc7AaA46680D78B04b4a3d4f5650", // Fraxtal + "Fraxswap V2 FRAX/FPI [Fraxtal]": "0x3B78BdC7575896701C4e32f9D070AA387fcEB22b", // Fraxtal + "Fraxswap V2 FRAX/FXS [Fraxtal]": "0x99FA1928A9Fea45b8d1395e870a92a0675A10E6E", // Fraxtal + "Fraxswap V2 FRAX/sfrxETH [Fraxtal]": "0x007c874a4240f8C31B4BfE6D91f47b903e2E3BE1", // Fraxtal + "Fraxswap V2 FRAX/wfrxETH [Fraxtal]": "0x8Fa7B006538F0710BD5fEfBd5737eBDD8B487166", // Fraxtal "KyberSwap Elastic FRAX/USDC [Arbitrum]": "0x0884c9Bb52348fa76d4e1c6Ea042A2EaF0b72c6C", // Arbitrum "KyberSwap Elastic FRAX/USDC [Optimism]": "0x9c9e8E8ccD7dAF6AfAB436829992B3Cf408319B4", // Optimism "KyberSwap Elastic FRAX/USDC [Polygon]": "0x11c9C6F9e983bf6E10296A9ce09D4572F664FF25", // Polygon @@ -3301,6 +3333,10 @@ export const CONTRACT_ADDRESSES = { "SpiritSwap FRAX/FXS": "0xebF993690F65B23862E10F489656529ac06A27B8", // Fantom "Sushi FRAX/FXS": "", // Polygon }, + fraxtal: { + l1StandardBridgeProxy: '0x34C0bD5877A5Ee7099D0f5688D65F4bB9158BDE2', + optimismPortalProxy: '0x36cb65c1967A0Fb0EEE11569C51C2f2aA1Ca6f6D', + }, }, arbitrum: { chain_id: 42161, @@ -3415,10 +3451,15 @@ export const CONTRACT_ADDRESSES = { FRAXFXB_20261231: '0x946adc524bd312d036776798c46cedd948dd0a0f', FRAXFXB_20261231_Gauge: '0xa2617a26f9f528fa7b0e47fc2e66fcc04c6682e9', FRAXFXB_20261231_Pool: '0x946adc524bd312d036776798c46cedd948dd0a0f', + HFXBFRAX: '0x8f5d46267eb52f3aa6e141004a781469d445888c', + HFXBFRAX_Gauge: '0x725e997571f4fd144bb741762e8fa9f1d11761a7', + HFXBFRAX_Pool: '0x8f5d46267eb52f3aa6e141004a781469d445888c', cvxFRAXFXB_20241231_Arbitrum: '0xCDA69af1077765a89eA156aCe7a6f8b476e4aF12', cvxFRAXFXB_20261231_Arbitrum: '0x2026681d569f80aE0A86D7c90bc81065D9A3AD42', cvxfrxETHWETH: '0xd2D8BEB901f90163bE4667A85cDDEbB7177eb3E3', cvxfrxETHWETH_Rewarder: '0xd2D8BEB901f90163bE4667A85cDDEbB7177eb3E3', + cvxHFXBFRAX: '0x256f53f13adff53cb888bc19ea0003651be8f3b6', + cvxHFXBFRAX_Rewarder: '0x256F53F13AdfF53CB888bc19ea0003651Be8F3B6', cvxUSDPlusFRAXBP: '0x11F2217fa1D5c44Eae310b9b985E2964FC47D8f9', cvxUSDPlusFRAXBP_Rewarder: '0x11F2217fa1D5c44Eae310b9b985E2964FC47D8f9', FRAX2pool: '0xf07d553B195080F84F582e88ecdD54bAa122b279', @@ -3465,6 +3506,7 @@ export const CONTRACT_ADDRESSES = { 'Convex FRAX/FXB_20241231 [Arbitrum]': '0xCDA69af1077765a89eA156aCe7a6f8b476e4aF12', 'Convex FRAX/FXB_20261231 [Arbitrum]': '0x2026681d569f80aE0A86D7c90bc81065D9A3AD42', 'Convex frxETH/WETH [Arbitrum]': '0xd2D8BEB901f90163bE4667A85cDDEbB7177eb3E3', + 'Convex HFXB/FRAX [Arbitrum]': '0x256F53F13AdfF53CB888bc19ea0003651Be8F3B6', 'Convex USD+FRAXBP': '0x11F2217fa1D5c44Eae310b9b985E2964FC47D8f9', 'Curve VSTFRAX-f': '0x59bF0545FCa0E5Ad48E13DA269faCD2E8C886Ba4', 'dForce FRAX Lending [Arbitrum]': '0xb3ab7148cCCAf66686AD6C1bE24D83e58E6a504e', @@ -3509,6 +3551,7 @@ export const CONTRACT_ADDRESSES = { 'Convex FRAX/FXB_20241231 [Arbitrum]': '0xB8c52da3db9EdF9Da6a20959410B007a2387E5a2', 'Convex FRAX/FXB_20261231 [Arbitrum]': '0xA81F4b86B412CcB51C7420000F59a639F3459f49', 'Convex frxETH/WETH [Arbitrum]': '0x24e927daC110Aab7189a4F864d41680e4F7865FB', + 'Convex HFXB/FRAX [Arbitrum]': '0xBa32Df0b78b1A68F7FA304BbD4Ed7a56A74c525a', 'Convex USD+FRAXBP': '0x56390acF12bce9675ab3922060D8d955149BE286', 'Curve VSTFRAX-f': '0x127963A74c07f72D862F2Bdc225226c3251BD117', 'KyberSwap Elastic FRAX/USDC [Arbitrum]': '0xbAFA44EFE7901E04E39Dad13167D089C559c1138', @@ -4304,27 +4347,44 @@ export const CONTRACT_ADDRESSES = { v3_nft_manager: "0x0000000000000000000000000000000000000000", v3_router: "0x0000000000000000000000000000000000000000", fraxswap_factory_v2: "0xE30521fe7f3bEB6Ad556887b50739d6C7CA667E6", - fraxswap_router_v2: "0x2Dd1B4D4548aCCeA497050619965f91f78b3b532", + // fraxswap_router_v2: '0x2Dd1B4D4548aCCeA497050619965f91f78b3b532', // OLD, has UInt112 issue corner case (i.e. KFC) + fraxswap_router_v2: '0x39cd4db6460d8B5961F73E997E86DdbB7Ca4D5F6', // Supports KFC fraxswap_router_multi_hop: '0x67E04873691258950299Bd8610403D69bA0A1e10', }, amos: {}, reward_tokens: { - + CVX: '0x3a562a8CEB9866BcF39bB5EdA32F282d619e08E0', + SQUID: '0x6e58089d8e8f664823d26454f49a5a0f2ff697fe', + }, + bearer_tokens: { + SQUIDwfrxETH: '0x277fa53c8a53c880e0625c92c92a62a9f60f3f04', + SQUIDwfrxETH_Gauge: '0xe5e5ed1b50ae33e66ca69df17aa6381fde4e9c7e', + SQUIDwfrxETH_Pool: '0x277fa53c8a53c880e0625c92c92a62a9f60f3f04', + cvxSQUIDwfrxETH: '0x29FF8F9ACb27727D8A2A52D16091c12ea56E9E4d', + cvxSQUIDwfrxETH_Rewarder: '0x29FF8F9ACb27727D8A2A52D16091c12ea56E9E4d', }, vamms: {}, pair_tokens: { + "Convex SQUID/wfrxETH [Fraxtal]": "0x29FF8F9ACb27727D8A2A52D16091c12ea56E9E4d", "Fraxswap V2 FRAX/FPI [Fraxtal]": "0x0EFFABede4e31101DE5209096611D073981A817b", "Fraxswap V2 FRAX/FPIS [Fraxtal]": "0x78d264E25781f31343352A0f91875B655c79B843", "Fraxswap V2 FRAX/sfrxETH [Fraxtal]": "0xEBD293F2173082320d88533316F5964298dE316E", "Fraxswap V2 FRAX/FXS [Fraxtal]": "0xb4dA8dA10ffF1F6127ab71395053Aa1d499b503F", "Fraxswap V2 FRAX/wfrxETH [Fraxtal]": "0x4527bcEd9d41706D1436507e9a6e354d3FF44ff9", + "Fraxswap V2 FXS/wfrxETH [Fraxtal]": "0x922Aa688F879050b2e32a63D764cf4E8B79c3Bdb", + "FLE FXS/wfrxETH [Fraxtal]": "", + "FLE FRAX/FXS [Fraxtal]": "", }, staking_contracts: { - // "Fraxswap V2 FRAX/FPI [Fraxtal]": "", + "Convex SQUID/wfrxETH [Fraxtal]": "0x95AB2a2F6e701873cEA0070dAc735589D089f6Bc", + "Fraxswap V2 FRAX/FPI [Fraxtal]": "0x7b8848f10A016341c9B2427e8541C19F31C2D243", // "Fraxswap V2 FRAX/FPIS [Fraxtal]": "", - // "Fraxswap V2 FRAX/sfrxETH [Fraxtal]": "", + "Fraxswap V2 FRAX/sfrxETH [Fraxtal]": "0xe402a39F788f90607A50254fAf56316E6a78231A", "Fraxswap V2 FRAX/FXS [Fraxtal]": "0x8fE4C7F2eF79AEDd8A6e40398a17ed4DaE18Ee25", "Fraxswap V2 FRAX/wfrxETH [Fraxtal]": "0xfbf1d253FcAA3cE13187dBD5B8610C15Cc8241c7", + "Fraxswap V2 FXS/wfrxETH [Fraxtal]": "", + "FLE FXS/wfrxETH [Fraxtal]": "0x7A6BE195f9931341c1f4c4230fc48F8B9b9dE91b", + "FLE FRAX/FXS [Fraxtal]": "0xCe70630b4b2E889AdC558b58B2980437f58003D4", }, }, fuse: { From 6d7ad10175cb5085e8e0f058dea9b60477e39768 Mon Sep 17 00:00:00 2001 From: travis Date: Tue, 18 Jun 2024 11:17:16 -0700 Subject: [PATCH 35/37] sync --- README_DEPLOYS.md | 439 ++++++++++++++++++ package-lock.json | 44 ++ package.json | 10 + .../Misc_AMOs/morpho/IMetaMorpho.sol | 95 ++++ .../Staking/FraxCrossChainFarmV4_ERC20.sol | 4 +- .../Staking/FraxUnifiedFarm_ERC20.sol | 23 +- .../FraxUnifiedFarm_ERC20_Convex_frxETH.sol | 20 +- .../Variants/FraxUnifiedFarm_ERC20_Other.sol | 51 +- .../Frax_Comptroller_Routine/Sunday_Part_1.js | 54 +-- .../Sunday_Part_1.json | 2 +- src/hardhat/hardhat.config.js | 53 ++- ...tal_yield_distributor_mass_checkpointer.js | 382 +++++++++++++++ .../public-scripts/l1veFXS_proof_collector.js | 438 +++++++++++++++++ src/misc/utilities.ts | 13 + src/types/constants.ts | 40 ++ 15 files changed, 1594 insertions(+), 74 deletions(-) create mode 100755 README_DEPLOYS.md create mode 100644 src/hardhat/contracts/Misc_AMOs/morpho/IMetaMorpho.sol create mode 100644 src/hardhat/public-scripts/fraxtal_yield_distributor_mass_checkpointer.js create mode 100644 src/hardhat/public-scripts/l1veFXS_proof_collector.js diff --git a/README_DEPLOYS.md b/README_DEPLOYS.md new file mode 100755 index 00000000..a8ddb107 --- /dev/null +++ b/README_DEPLOYS.md @@ -0,0 +1,439 @@ +## FORGE +**------Deploying------** + +Evmos +```source .env && forge script ./src/foundry/deploy/deployEvmosToEthFraxferry.s.sol:Deploy --rpc-url $EVMOS_NETWORK_ENDPOINT --private-key $MAINTENANCE_PRIVATE_KEY --broadcast``` + +## HARDHAT +**---Deploying---** +cd ./src/hardhat + + +**---Gnosis Safe Stuff---** +npx hardhat run --network ethereum gnosis-safe-scripts/Frax_Comptroller_Routine/Sunday_Part_1.js +npx hardhat run --network ethereum gnosis-safe-scripts/Convex_Farm_Deployments/Step_1_Vault_Gauge_Proxy.js +npx hardhat run --network ethereum gnosis-safe-scripts/Convex_Farm_Deployments/Step_2_CRVCVXDistro_Contracts.js +npx hardhat run --network ethereum gnosis-safe-scripts/Convex_Farm_Deployments/Step_3_RewDist_Seeding_Sync.js +npx hardhat run --network bsc gnosis-safe-scripts/Bribe_Related/BSC/Reward_Collections.js + +ARBITRUM +npx hardhat run --network arbitrum scripts/__ARBITRUM/deploy_amo_minter.js +npx hardhat run --network arbitrum scripts/__ARBITRUM/deploy_CrossChainBridgeBacker.js +npx hardhat run --network arbitrum scripts/__ARBITRUM/deploy_CrossChainCanonicals.js +npx hardhat run --network arbitrum scripts/__ARBITRUM/deploy_CrossChainOracle.js +npx hardhat run --network arbitrum scripts/__ARBITRUM/deploy_CrossChainOracleSingleAsset.js +npx hardhat run --network arbitrum scripts/__ARBITRUM/deploy_CurveAMO_ARBI.js +npx hardhat run --network arbitrum scripts/__ARBITRUM/deploy_FraxCrossChainFarm.js +npx hardhat run --network arbitrum scripts/__ARBITRUM/deploy_HundredLendingAMO.js +npx hardhat run --network arbitrum scripts/__ARBITRUM/deploy_SushiSwapLiquidityAMO_ARBI.js +npx hardhat run --network arbitrum scripts/__ARBITRUM/deploy_combo_oracle.js +npx hardhat run --network arbitrum scripts/__ARBITRUM/deploy_combo_oracle_univ2_univ3.js +npx hardhat run --network arbitrum scripts/deploys/deploy_fraxswap.js + +AURORA +npx hardhat run --network aurora scripts/__AURORA/deploy_CrossChainBridgeBacker.js +npx hardhat run --network aurora scripts/__AURORA/deploy_CrossChainCanonicals.js +npx hardhat run --network aurora scripts/__AURORA/deploy_CrossChainOracle.js +npx hardhat run --network aurora scripts/__AURORA/deploy_CrossChainOracleSingleAsset.js +npx hardhat run --network aurora scripts/__AURORA/deploy_combo_oracle.js +npx hardhat run --network aurora scripts/__AURORA/deploy_combo_oracle_univ2_univ3.js + +AVALANCHE +npx hardhat run --network avalanche scripts/__AVALANCHE/deploy_AxialAMO.js +npx hardhat run --network avalanche scripts/__AVALANCHE/deploy_CrossChainBridgeBacker.js +npx hardhat run --network avalanche scripts/__AVALANCHE/deploy_CrossChainCanonicals.js +npx hardhat run --network avalanche scripts/__AVALANCHE/deploy_CrossChainOracle.js +npx hardhat run --network avalanche scripts/__AVALANCHE/deploy_CrossChainOracleSingleAsset.js +npx hardhat run --network avalanche scripts/__AVALANCHE/deploy_FraxCrossChainFarm.js +npx hardhat run --network avalanche scripts/__AVALANCHE/deploy_FraxCrossChainRewarder.js +npx hardhat run --network avalanche scripts/__AVALANCHE/deploy_PangolinLiquidityAMO.js +npx hardhat run --network avalanche scripts/__AVALANCHE/deploy_combo_oracle.js +npx hardhat run --network avalanche scripts/__AVALANCHE/deploy_combo_oracle_univ2_univ3.js +npx hardhat run --network avalanche scripts/deploys/deploy_fraxswap.js + +BOBA +npx hardhat run --network boba scripts/__BOBA/deploy_CrossChainBridgeBacker.js +npx hardhat run --network boba scripts/__BOBA/deploy_CrossChainCanonicals.js +npx hardhat run --network boba scripts/__BOBA/deploy_CrossChainOracle.js +npx hardhat run --network boba scripts/__BOBA/deploy_CrossChainOracleSingleAsset.js +npx hardhat run --network boba scripts/__BOBA/deploy_OolongSwapLiquidityAMO.js +npx hardhat run --network boba scripts/__BOBA/deploy_combo_oracle.js +npx hardhat run --network boba scripts/__BOBA/deploy_combo_oracle_univ2_univ3.js + +BSC +npx hardhat run --network bsc scripts/__BSC/deploy_ApeSwapLiquidityAMO.js +npx hardhat run --network bsc scripts/__BSC/deploy_CrossChainBridgeBacker.js +npx hardhat run --network bsc scripts/__BSC/deploy_CrossChainCanonicals.js +npx hardhat run --network bsc scripts/__BSC/deploy_CrossChainOracle.js +npx hardhat run --network bsc scripts/__BSC/deploy_CrossChainOracleSingleAsset.js +npx hardhat run --network bsc scripts/__BSC/deploy_FraxCrossChainFarm.js +npx hardhat run --network bsc scripts/__BSC/deploy_FraxFarmBSC_Dual_FRAX_IF.js +npx hardhat run --network bsc scripts/__BSC/deploy_combo_oracle.js +npx hardhat run --network bsc scripts/__BSC/deploy_combo_oracle_univ2_univ3.js +npx hardhat run --network bsc scripts/__BSC/deploy_migratable_farm.js +npx hardhat run --network bsc scripts/deploys/deploy_fraxswap.js + +ETHEREUM +npx hardhat run --network ethereum scripts/deploys/deploy_FPI_and_FPIS.js +npx hardhat run --network ethereum scripts/deploys/deploy_FraxLiquidityBridger_XYZ.js +npx hardhat run --network ethereum scripts/deploys/deploy_FraxPoolV3.js +npx hardhat run --network ethereum scripts/deploys/deploy_UniV3Farm.js +npx hardhat run --network ethereum scripts/deploys/deploy_aave_AMO.js +npx hardhat run --network ethereum scripts/deploys/deploy_amo_minter.js +npx hardhat run --network ethereum scripts/deploys/deploy_combo_oracle.js +npx hardhat run --network ethereum scripts/deploys/deploy_combo_oracle_univ2_univ3.js +npx hardhat run --network ethereum scripts/deploys/deploy_curve_voter_proxy.js +npx hardhat run --network ethereum scripts/deploys/deploy_cpi_tracker_oracle.js +npx hardhat run --network ethereum scripts/deploys/deploy_curve_metapool_locker.js +npx hardhat run --network ethereum scripts/deploys/deploy_delegation_proxy.js +npx hardhat run --network ethereum scripts/deploys/deploy_dual_token_contract_v2.js +npx hardhat run --network ethereum scripts/deploys/deploy_fraxfarm_ragequitter.js +npx hardhat run --network ethereum scripts/deploys/deploy_fraxferry_crosschain_one_side.js +npx hardhat run --network ethereum scripts/deploys/deploy_frax_gauge_controller.js +npx hardhat run --network ethereum scripts/deploys/deploy_frax_middleman_gauge.js +npx hardhat run --network ethereum scripts/deploys/deploy_fraxswapRouterMultihop.js +npx hardhat run --network ethereum scripts/deploys/deploy_fraxswap.js +npx hardhat run --network ethereum scripts/deploys/deploy_fxs_1559_amo_v3.js +npx hardhat run --network ethereum scripts/deploys/deploy_gauge_rewards_distributor.js +npx hardhat run --network ethereum scripts/deploys/deploy_manual_token_tracker.js +npx hardhat run --network ethereum scripts/deploys/deploy_mim_amo.js +npx hardhat run --network ethereum scripts/deploys/deploy_multicall_oz.js +npx hardhat run --network ethereum scripts/deploys/deploy_msig_helper.js +npx hardhat run --network ethereum scripts/deploys/deploy_oracle_extra.js +npx hardhat run --network ethereum scripts/deploys/deploy_oracle_wrappers.js +npx hardhat run --network ethereum scripts/deploys/deploy_frax_unified_farms.js +npx hardhat run --network ethereum scripts/deploys/deploy_frax_unified_farms_convex_fraxbp.js +npx hardhat run --network ethereum scripts/deploys/deploy_frax_unified_farms_convex_frxeth.js +npx hardhat run --network ethereum scripts/deploys/deploy_frax_unified_farms_convex_fxbs.js +npx hardhat run --network ethereum scripts/deploys/deploy_frax_unified_farms_convex_generic.js +npx hardhat run --network ethereum scripts/deploys/deploy_frax_unified_farms_convex_ngs.js +npx hardhat run --network ethereum scripts/deploys/deploy_frax_unified_farms_factory_convex.js +npx hardhat run --network ethereum scripts/deploys/deploy_frax_unified_farms_fraxlend.js +npx hardhat run --network ethereum scripts/deploys/deploy_frax_unified_farms_kyberswap_elastic.js +npx hardhat run --network ethereum scripts/deploys/deploy_staking_rewards_multi_gauge.js +npx hardhat run --network ethereum scripts/deploys/deploy_token_tracker.js +npx hardhat run --network ethereum scripts/deploys/deploy_twamm_amo.js +npx hardhat run --network ethereum scripts/deploys/deploy_univ3_liquidity_amo.js +npx hardhat run --network ethereum scripts/deploys/deploy_univ3_twap_oracle.js +npx hardhat run --network ethereum scripts/deploys/deploy_veFPIS.js +npx hardhat run --network ethereum scripts/deploys/deploy_veFPISYieldDistributor.js +npx hardhat run --network ethereum scripts/deploys/deploy_veFXSYieldDistributor.js +npx hardhat run --network ethereum scripts/deploys/deploy_voting_escrow_delegation.js +npx hardhat run --network ethereum scripts/deploys/l1veFXS_proof_collector.js +npx hardhat run --network ethereum scripts/deploys/mass_contract_caller.js +npx hardhat run --network ethereum scripts/deploys/manual_farming_syncer.js +npx hardhat run --network ethereum scripts/deploys/miscellaneous_call.js +npx hardhat run --no-compile --network ethereum scripts/deploys/matic_polygon_recovery.mjs + +EVMOS +npx hardhat run --network evmos scripts/__EVMOS/deploy_CrossChainBridgeBacker.js +npx hardhat run --network evmos scripts/__EVMOS/deploy_CrossChainCanonicals.js +npx hardhat run --network evmos scripts/__EVMOS/deploy_CrossChainOracle.js +npx hardhat run --network evmos scripts/__EVMOS/deploy_CrossChainOracleSingleAsset.js +npx hardhat run --network evmos scripts/__EVMOS/deploy_combo_oracle.js +npx hardhat run --network evmos scripts/__EVMOS/deploy_combo_oracle_univ2_univ3.js +npx hardhat run --network evmos scripts/__EVMOS/deploy_Evmos_Fraxferry.js + +FANTOM +npx hardhat run --network fantom scripts/__FANTOM/deploy_CrossChainBridgeBacker.js +npx hardhat run --network fantom scripts/__FANTOM/deploy_CrossChainCanonicals.js +npx hardhat run --network fantom scripts/__FANTOM/deploy_CrossChainOracle.js +npx hardhat run --network fantom scripts/__FANTOM/deploy_CrossChainOracleSingleAsset.js +npx hardhat run --network fantom scripts/__FANTOM/deploy_CurveAMO_FTM.js +npx hardhat run --network fantom scripts/__FANTOM/deploy_FraxCrossChainFarm.js +npx hardhat run --network fantom scripts/__FANTOM/deploy_FraxCrossChainRewarder.js +npx hardhat run --network fantom scripts/__FANTOM/deploy_ScreamAMO.js +npx hardhat run --network fantom scripts/__FANTOM/deploy_SolidlySingleLPOracle.js +npx hardhat run --network fantom scripts/__FANTOM/deploy_SpiritSwapLiquidityAMO.js +npx hardhat run --network fantom scripts/__FANTOM/deploy_combo_oracle.js +npx hardhat run --network fantom scripts/__FANTOM/deploy_combo_oracle_univ2_univ3.js +npx hardhat run --network fantom scripts/deploys/deploy_fraxswap.js + +FRAXCHAIN DEVNET L1 +npx hardhat run --network fraxchain_devnet_l1 scripts/__FRAXCHAIN_DEVNET_L1/deploy_CrossChainCanonicals.js +npx hardhat run --network fraxchain_devnet_l1 scripts/__FRAXCHAIN_DEVNET_L1/deploy_FraxchainPortal.js + +FRAXCHAIN DEVNET L2 +npx hardhat run --network fraxchain_devnet_l2 scripts/__FRAXCHAIN_DEVNET_L2/deploy_CrossChainCanonicals.js + +FRAXTAL +npx hardhat run --network fraxtal scripts/deploys/deploy_fraxferry_crosschain_one_side.js +npx hardhat run --network fraxtal scripts/deploys/fraxtal_yield_distributor_mass_checkpointer.js +npx hardhat run --network fraxtal scripts/__FRAXTAL/deploy_FraxCrossChainFarm.js + +HARMONY +npx hardhat run --network harmony scripts/__HARMONY/deploy_CrossChainBridgeBacker.js +npx hardhat run --network harmony scripts/__HARMONY/deploy_CrossChainCanonicals.js +npx hardhat run --network harmony scripts/__HARMONY/deploy_CrossChainOracle.js +npx hardhat run --network harmony scripts/__HARMONY/deploy_CrossChainOracleSingleAsset.js +npx hardhat run --network harmony scripts/__HARMONY/deploy_combo_oracle.js +npx hardhat run --network harmony scripts/__HARMONY/deploy_combo_oracle_univ2_univ3.js +npx hardhat run --network harmony scripts/deploys/deploy_fraxswap.js + +HOLESKY +npx hardhat run --network holesky scripts/__HOLESKY/deploy_frxETHMinter.js +npx hardhat run --network holesky scripts/__HOLESKY/deploy_MainERC20s.js + +MOONBEAM +npx hardhat run --network moonbeam scripts/__MOONBEAM/deploy_CrossChainBridgeBacker.js +npx hardhat run --network moonbeam scripts/__MOONBEAM/deploy_CrossChainCanonicals.js +npx hardhat run --network moonbeam scripts/__MOONBEAM/deploy_CrossChainOracle.js +npx hardhat run --network moonbeam scripts/__MOONBEAM/deploy_CrossChainOracleSingleAsset.js +npx hardhat run --network moonbeam scripts/__MOONBEAM/deploy_combo_oracle.js +npx hardhat run --network moonbeam scripts/__MOONBEAM/deploy_combo_oracle_univ2_univ3.js +npx hardhat run --network moonbeam scripts/deploys/deploy_fraxswap.js + +MOONRIVER +npx hardhat run --network moonriver scripts/__MOONRIVER/deploy_CCFrax1to1AMM.js +npx hardhat run --network moonriver scripts/__MOONRIVER/deploy_CrossChainBridgeBacker.js +npx hardhat run --network moonriver scripts/__MOONRIVER/deploy_CrossChainCanonicals.js +npx hardhat run --network moonriver scripts/__MOONRIVER/deploy_CrossChainOracle.js +npx hardhat run --network moonriver scripts/__MOONRIVER/deploy_CrossChainOracleSingleAsset.js +npx hardhat run --network moonriver scripts/__MOONRIVER/deploy_SushiSwapLiquidityAMO_MOON.js +npx hardhat run --network moonriver scripts/__MOONRIVER/deploy_combo_oracle.js +npx hardhat run --network moonriver scripts/__MOONRIVER/deploy_combo_oracle_univ2_univ3.js +npx hardhat run --network moonriver scripts/deploys/deploy_fraxswap.js + +OPTIMISM +npx hardhat run --network optimism scripts/__OPTIMISM/deploy_CrossChainBridgeBacker.js +npx hardhat run --network optimism scripts/__OPTIMISM/deploy_CrossChainCanonicals.js +npx hardhat run --network optimism scripts/__OPTIMISM/deploy_CrossChainOracle.js +npx hardhat run --network optimism scripts/__OPTIMISM/deploy_CrossChainOracleSingleAsset.js +npx hardhat run --network optimism scripts/__OPTIMISM/deploy_combo_oracle.js +npx hardhat run --network optimism scripts/__OPTIMISM/deploy_combo_oracle_univ2_univ3.js +npx hardhat run --network optimism scripts/__OPTIMISM/deploy_FraxCrossChainFarm.js + +POLYGON +npx hardhat run --network polygon scripts/__POLYGON/deploy_CrossChainBridgeBacker.js +npx hardhat run --network polygon scripts/__POLYGON/deploy_CrossChainCanonicals.js +npx hardhat run --network polygon scripts/__POLYGON/deploy_CrossChainOracle.js +npx hardhat run --network polygon scripts/__POLYGON/deploy_CrossChainOracleSingleAsset.js +npx hardhat run --network polygon scripts/__POLYGON/deploy_CurveAMO_POLY.js +npx hardhat run --network polygon scripts/__POLYGON/deploy_FraxCrossChainFarm.js +npx hardhat run --network polygon scripts/deploys/deploy_fraxfarm_ragequitter.js +npx hardhat run --network polygon scripts/__POLYGON/deploy_MarketXYZLendingAMO.js +npx hardhat run --network polygon scripts/__POLYGON/deploy_SolidlySingleLPOracle.js +npx hardhat run --network polygon scripts/__POLYGON/deploy_SushiSwapLiquidityAMO_POLY.js +npx hardhat run --network polygon scripts/__POLYGON/deploy_combo_oracle.js +npx hardhat run --network polygon scripts/__POLYGON/deploy_combo_oracle_univ2_univ3.js +npx hardhat run --network polygon scripts/deploys/deploy_fraxferry_crosschain_one_side.js +npx hardhat run --network polygon scripts/deploys/deploy_fraxswap.js + +POLYGON ZKEVM +npx hardhat run --network polygon_zkevm scripts/__POLYGON_ZKEVM/deploy_CrossChainCanonicals.js +npx hardhat run --network polygon_zkevm scripts/deploys/deploy_fraxferry_crosschain_one_side.js + +POLYGON MUMBAI +npx hardhat run --network polygon_mumbai scripts/deploys/deploy_cpi_tracker_oracle.js + +ZKSYNC +npx hardhat run --network zksync scripts/__ZKSYNC/deploy_CrossChainCanonicals.js + + +**---Verifying---** +cd ./src/hardhat +npx hardhat verify --network ethereum 0x35302f77e5bd7a93cbec05d585e414e14b2a84a8 +npx hardhat verify --network ethereum 0xc0dC493cE1b5908Dd95b768c397dD581Ef4FCAEb "Constructor argument 1" +may need to use truffle: copy paste the contracts and compile +truffle run verify StakingRewardsDual_FRAX_FXS_Sushi@0x35302f77E5Bd7A93cbec05d585e414e14B2A84a8 --network ethereum --debug +truffle run verify StakingRewardsDual_FRAX3CRV@0xB88107bFB7aa9b6A5eC8784374018073e76d4DF0 --network ethereum --debug + +npx hardhat verify --network ethereum --contract contracts/Staking/Variants/FraxUniV3Farm_Stable_FRAX_USDC.sol:FraxUniV3Farm_Stable_FRAX_USDC --constructor-args ./scripts/deploys/arguments/UniV3Farm_arguments.js 0x3EF26504dbc8Dd7B7aa3E97Bc9f3813a9FC0B4B0 +npx hardhat verify --network ethereum --contract contracts/Staking/Variants/FraxUniV3Farm_Stable_FRAX_DAI.sol:FraxUniV3Farm_Stable_FRAX_DAI --constructor-args ./scripts/deploys/arguments/UniV3Farm_arguments.js 0x4E3EdfE5ADD243154f1A3C49b15968EF9e0AE6ca +npx hardhat verify --network ethereum --contract contracts/Curve/IFraxGaugeFXSRewardsDistributor.sol:FraxGaugeFXSRewardsDistributor --constructor-args ./scripts/deploys/arguments/frax_gauge_rewards_distributor_arguments.js 0x278dC748edA1d8eFEf1aDFB518542612b49Fcd34 +npx hardhat verify --network ethereum --contract contracts/Curve/Middleman_Gauges/FraxMiddlemanGauge_FRAX_mUSD.sol:FraxMiddlemanGauge_FRAX_mUSD --constructor-args ./scripts/deploys/arguments/frax_middleman_gauge_arguments.js 0x3e14f6EEDCC5Bc1d0Fc7B20B45eAE7B1F74a6AeC +npx hardhat verify --network ethereum --contract contracts/Curve/FraxMiddlemanGauge.sol:FraxMiddlemanGauge --constructor-args ./scripts/deploys/arguments/frax_middleman_gauge_arguments.js 0x66fD216bCBeb566EF038A116B7270f241005e186 +npx hardhat verify --network ethereum --contract contracts/Staking/Variants/StakingRewardsMultiGauge_FRAX_SUSHI.sol:StakingRewardsMultiGauge_FRAX_SUSHI --constructor-args ./scripts/deploys/arguments/staking_rewards_multi_gauge_arguments.js 0xb4Ab0dE6581FBD3A02cF8f9f265138691c3A7d5D +npx hardhat verify --network ethereum --contract contracts/Curve/IFraxGaugeController.vy:FraxGaugeController --constructor-args ./scripts/deploys/arguments/frax_gauge_controller_arguments.js 0x44ade9AA409B0C29463fF7fcf07c9d3c939166ce +npx hardhat verify --network ethereum --contract contracts/Misc_AMOs/RariFuseLendingAMO_V2.sol:RariFuseLendingAMO_V2 --constructor-args ./scripts/deploys/arguments/rari_amo_arguments.js 0x843df6229C1B8fc41c1D74bcddC7E17788ddb0A2 +npx hardhat verify --network ethereum --contract contracts/Misc_AMOs/UniV3LiquidityAMO.sol:UniV3LiquidityAMO --constructor-args ./scripts/deploys/arguments/univ3_liquidity_amo_arguments.js 0xef2b0895f986Afd7Eb7939B65E2883C5e199751f +npx hardhat verify --network ethereum --contract contracts/Frax/Pools/FraxPoolV3.sol:FraxPoolV3 --constructor-args ./scripts/deploys/arguments/frax_pool_v3_arguments.js 0x80c72d42846EFf15Cb1BDEE8FeC9A57594F17960 +npx hardhat verify --network ethereum --contract contracts/Frax/FraxAMOMinter.sol:FraxAMOMinter --constructor-args ./scripts/deploys/arguments/amo_minter_arguments.js 0x36a0B6a5F7b318A2B4Af75FFFb1b51a5C78dEB8C +npx hardhat verify --network ethereum --contract contracts/Misc_AMOs/CurveMetapoolLockerAMO.sol:CurveMetapoolLockerAMO --constructor-args ./scripts/deploys/arguments/curve_metapool_locker_arguments.js 0x70F55767B11c047C8397285E852919F5f6c8DC60 + +npx hardhat verify --network ethereum 0x97e7d56A0408570bA1a7852De36350f7713906ec + +BSC +npx hardhat verify --network bsc --contract contracts/__BSC/Staking/Variants/FraxFarmBSC_Dual_FRAX_IF.sol:FraxFarmBSC_Dual_FRAX_IF --constructor-args ./scripts/deploys/arguments/fraxfarm_bsc_dual_frax_if_arguments.js 0x45dD6e5f65A5a526c09A50D612e3516ed6AB47d2 +npx hardhat verify --network bsc --contract contracts/Staking/Variants/FraxCrossChainFarm_FRAX_IF_Impossible.sol:FraxCrossChainFarm_FRAX_IF_Impossible --constructor-args ./scripts/deploys/arguments/frax_cross_chain_farm.js 0x5e1F728C0123f7e8B237F61D0105bf9CBd8867B5 + +POLYGON +npx hardhat verify --network polygon --contract contracts/Staking/Variants/FraxCrossChainFarm_FRAX_mUSD.sol:FraxCrossChainFarm_FRAX_mUSD --constructor-args ./scripts/deploys/arguments/frax_cross_chain_farm.js 0xCc112B11bDd419859FbA88d842CEE660C1Ee277d + +npx hardhat verify --network polygon --contract contracts/Staking/FraxCrossChainFarmSushi.sol:FraxCrossChainFarmSushi --constructor-args ./scripts/deploys/arguments/frax_cross_chain_farm.js 0xc9C731aa0fA61Cfe6D32508CCA932e2715bCaE00 + +FANTOM +npx hardhat verify --network fantom --contract contracts/Curve/FraxCrossChainRewarder.sol:FraxCrossChainRewarder --constructor-args ./scripts/deploys/arguments/frax_cross_chain_rewarder.js 0xebF993690F65B23862E10F489656529ac06A27B8 +npx hardhat verify --network fantom --contract contracts/Staking/Variants/FraxCrossChainFarm_FRAX_FXS_Spirit.sol:FraxCrossChainFarm_FRAX_FXS_Spirit --constructor-args ./scripts/deploys/arguments/frax_cross_chain_farm.js 0x365fb1636316EB7DC298b8dC1F2ca0bB2F7C51A9 +npx hardhat verify --network fantom --contract contracts/Frax/CrossChainCanonical.sol:CrossChainCanonical --constructor-args ./scripts/deploys/arguments/cross_chain_canonical_arguments.js 0x8E81F4DA11Dad4427CD4D106Fab77873DDC94d00 + +**---Flat File Compiling (Used as a backup for manual source code verification)---** +cd ./src/hardhat + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +sed -i '/SPDX-License-Identifier/d' ./flattened.sol && +sed -i '/pragma solidity/d' ./flattened.sol && +sed -i '1s/^/\/\/ SPDX-License-Identifier: GPL-2.0-or-later\npragma solidity >=0.8.0;\n\n/' flattened.sol +OPTIONAL [REMOVE "//" COMMENTS]: sed -i -E 's:(\s+(//|#)|^\s*(//|#)).*$::; /^$/d' flattened.sol +OPTIONAL [REMOVE "/*" COMMENTS]: sed -i -r ':a; s%(.*)/\*.*\*/%\1%; ta; /\/\*/ !b; N; ba' flattened.sol +OPTIONAL [REMOVE NEWLINES]: sed -i ':a;$!{N;s/\n/ /;ba;}' flattened.sol +OPTIONAL [REMOVE WHITESPACE]: sed -i -r 's/\s+//g' flattened.sol + +BACKUP VERIFICATION #1 (NPX HARDHAT VERIFY THE flattened.sol) +1) Make sure the etherscan option in hardhat config is on the right chain +2a) npx hardhat verify --network optimism --contract contracts/flattened2.sol:ComboOracle 0xE7d6CB15aBE01c681b81f46e6c289aD492c04f5c +2b) npx hardhat verify --network optimism --contract contracts/flattened2.sol:ComboOracle --constructor-args ./scripts/deploys/arguments/frax_middleman_gauge_arguments.js 0xE7d6CB15aBE01c681b81f46e6c289aD492c04f5c + +BACKUP VERIFICATION #2 (SOURCIFY) +1) Paste the flattened.sol file in the saddle-contract file +2) Edit Boba 007_deploy_MiscTest +3) do a 'deploy' +4) npx hardhat --network boba sourcify + +BACKUP VERIFICATION #3 (STANDARD INPUT JSON) +https://medium.com/coinmonks/how-to-verify-your-kcc-smart-contract-via-standard-input-json-db712176dbc4 + +BACKUP VERIFICATION #4 (SOL-MERGER) [Works like a flattener] +npx sol-merger ./src/hardhat/contracts/Fraxswap/core/FraxswapPair.sol ./src/hardhat/flattened2.sol + +FORGE FLATTENING +forge flatten --output src/flattened-pair.sol src/contracts/core/FraxswapPair.sol +forge flatten --output src/flattened-router.sol src/contracts/periphery/FraxswapRouter.sol +forge flatten --output src/flattened-factory.sol src/contracts/core/FraxswapFactory.sol +sed -i '/SPDX-License-Identifier/d' ./src/flattened-pair.sol && +sed -i '/pragma solidity/d' ./src/flattened-pair.sol && +sed -i '1s/^/\/\/ SPDX-License-Identifier: GPL-2.0-or-later\npragma solidity >=0.8.0;\n\n/' ./src/flattened-pair.sol +sed -i '/SPDX-License-Identifier/d' ./src/flattened-factory.sol && +sed -i '/pragma solidity/d' ./src/flattened-factory.sol && +sed -i '1s/^/\/\/ SPDX-License-Identifier: GPL-2.0-or-later\npragma solidity >=0.8.0;\n\n/' ./src/flattened-factory.sol +sed -i '/SPDX-License-Identifier/d' ./src/flattened-router.sol && +sed -i '/pragma solidity/d' ./src/flattened-router.sol && +sed -i '1s/^/\/\/ SPDX-License-Identifier: GPL-2.0-or-later\npragma solidity >=0.8.0;\n\n/' ./src/flattened-router.sol + +# Truffle Size Estimator +truffle run contract-size + diff --git a/package-lock.json b/package-lock.json index 217ac854..335250b0 100644 --- a/package-lock.json +++ b/package-lock.json @@ -14,7 +14,16 @@ "@eth-optimism/contracts-bedrock": "^0.16.2", "@ethereumjs/common": "^4.1.0", "@ethereumjs/tx": "^5.1.0", + "@ethersproject/abstract-provider": "^5.7.0", + "@ethersproject/abstract-signer": "^5.7.0", + "@ethersproject/bignumber": "^5.7.0", + "@ethersproject/bytes": "^5.7.0", + "@ethersproject/contracts": "^5.7.0", "@ethersproject/hardware-wallets": "^5.7.0", + "@ethersproject/providers": "^5.7.2", + "@ethersproject/rlp": "^5.7.0", + "@ethersproject/solidity": "^5.7.0", + "@ethersproject/wallet": "^5.7.0", "@maticnetwork/maticjs": "^3.7.7", "@maticnetwork/maticjs-ethers": "^1.0.3", "@maticnetwork/maticjs-web3": "^1.0.4", @@ -31,6 +40,7 @@ "@uniswap/v3-sdk": "^3.10.0", "bignumber.js": "^9.1.2", "chalk": "^4.1.2", + "cli-table": "^0.3.11", "cross-fetch": "^4.0.0", "dotenv": "^16.3.1", "esm": "^3.2.25", @@ -6260,6 +6270,25 @@ "node": ">=6" } }, + "node_modules/cli-table": { + "version": "0.3.11", + "resolved": "https://registry.npmjs.org/cli-table/-/cli-table-0.3.11.tgz", + "integrity": "sha512-IqLQi4lO0nIB4tcdTpN4LCB9FI3uqrJZK7RC515EnhZ6qBaglkIgICb1wjeAqpdoOabm1+SuQtkXIPdYC93jhQ==", + "dependencies": { + "colors": "1.0.3" + }, + "engines": { + "node": ">= 0.2.0" + } + }, + "node_modules/cli-table/node_modules/colors": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/colors/-/colors-1.0.3.tgz", + "integrity": "sha512-pFGrxThWcWQ2MsAz6RtgeWe4NK2kUE1WfsrvvlctdII745EW9I0yflqhe7++M5LEc7bV2c/9/5zc8sFcpL0Drw==", + "engines": { + "node": ">=0.1.90" + } + }, "node_modules/cli-table3": { "version": "0.6.3", "resolved": "https://registry.npmjs.org/cli-table3/-/cli-table3-0.6.3.tgz", @@ -21212,6 +21241,21 @@ "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==" }, + "cli-table": { + "version": "0.3.11", + "resolved": "https://registry.npmjs.org/cli-table/-/cli-table-0.3.11.tgz", + "integrity": "sha512-IqLQi4lO0nIB4tcdTpN4LCB9FI3uqrJZK7RC515EnhZ6qBaglkIgICb1wjeAqpdoOabm1+SuQtkXIPdYC93jhQ==", + "requires": { + "colors": "1.0.3" + }, + "dependencies": { + "colors": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/colors/-/colors-1.0.3.tgz", + "integrity": "sha512-pFGrxThWcWQ2MsAz6RtgeWe4NK2kUE1WfsrvvlctdII745EW9I0yflqhe7++M5LEc7bV2c/9/5zc8sFcpL0Drw==" + } + } + }, "cli-table3": { "version": "0.6.3", "resolved": "https://registry.npmjs.org/cli-table3/-/cli-table3-0.6.3.tgz", diff --git a/package.json b/package.json index 8f82f23e..9a0f05d3 100644 --- a/package.json +++ b/package.json @@ -21,7 +21,16 @@ "@eth-optimism/contracts-bedrock": "^0.16.2", "@ethereumjs/common": "^4.1.0", "@ethereumjs/tx": "^5.1.0", + "@ethersproject/abstract-provider": "^5.7.0", + "@ethersproject/abstract-signer": "^5.7.0", + "@ethersproject/bignumber": "^5.7.0", + "@ethersproject/bytes": "^5.7.0", + "@ethersproject/contracts": "^5.7.0", "@ethersproject/hardware-wallets": "^5.7.0", + "@ethersproject/providers": "^5.7.2", + "@ethersproject/rlp": "^5.7.0", + "@ethersproject/solidity": "^5.7.0", + "@ethersproject/wallet": "^5.7.0", "@maticnetwork/maticjs": "^3.7.7", "@maticnetwork/maticjs-ethers": "^1.0.3", "@maticnetwork/maticjs-web3": "^1.0.4", @@ -38,6 +47,7 @@ "@uniswap/v3-sdk": "^3.10.0", "bignumber.js": "^9.1.2", "chalk": "^4.1.2", + "cli-table": "^0.3.11", "cross-fetch": "^4.0.0", "dotenv": "^16.3.1", "esm": "^3.2.25", diff --git a/src/hardhat/contracts/Misc_AMOs/morpho/IMetaMorpho.sol b/src/hardhat/contracts/Misc_AMOs/morpho/IMetaMorpho.sol new file mode 100644 index 00000000..63109382 --- /dev/null +++ b/src/hardhat/contracts/Misc_AMOs/morpho/IMetaMorpho.sol @@ -0,0 +1,95 @@ +// SPDX-License-Identifier: GPL-2.0-or-later +pragma solidity >=0.8.0; + + +interface IMetaMorpho { + + struct MarketParams { + address loanToken; + address collateralToken; + address oracle; + address irm; + uint256 lltv; + } + + struct MarketAllocation { + /// @notice The market to allocate. + MarketParams marketParams; + /// @notice The amount of assets to allocate. + uint256 assets; + } + + function DECIMALS_OFFSET ( ) external view returns ( uint8 ); + function DOMAIN_SEPARATOR ( ) external view returns ( bytes32 ); + function MORPHO ( ) external view returns ( address ); + function acceptCap ( MarketParams memory marketParams ) external; + function acceptGuardian ( ) external; + function acceptOwnership ( ) external; + function acceptTimelock ( ) external; + function allowance ( address owner, address spender ) external view returns ( uint256 ); + function approve ( address spender, uint256 value ) external returns ( bool ); + function asset ( ) external view returns ( address ); + function balanceOf ( address account ) external view returns ( uint256 ); + function config ( bytes32 ) external view returns ( uint184 cap, bool enabled, uint64 removableAt ); + function convertToAssets ( uint256 shares ) external view returns ( uint256 ); + function convertToShares ( uint256 assets ) external view returns ( uint256 ); + function curator ( ) external view returns ( address ); + function decimals ( ) external view returns ( uint8 ); + function deposit ( uint256 assets, address receiver ) external returns ( uint256 shares ); + function eip712Domain ( ) external view returns ( bytes1 fields, string memory name, string memory version, uint256 chainId, address verifyingContract, bytes32 salt, uint256[] memory extensions ); + function fee ( ) external view returns ( uint96 ); + function feeRecipient ( ) external view returns ( address ); + function guardian ( ) external view returns ( address ); + function isAllocator ( address ) external view returns ( bool ); + function lastTotalAssets ( ) external view returns ( uint256 ); + function maxDeposit ( address ) external view returns ( uint256 ); + function maxMint ( address ) external view returns ( uint256 ); + function maxRedeem ( address owner ) external view returns ( uint256 ); + function maxWithdraw ( address owner ) external view returns ( uint256 assets ); + function mint ( uint256 shares, address receiver ) external returns ( uint256 assets ); + function multicall ( bytes[] memory data ) external returns ( bytes[] memory results ); + function name ( ) external view returns ( string memory ); + function nonces ( address owner ) external view returns ( uint256 ); + function owner ( ) external view returns ( address ); + function pendingCap ( bytes32 ) external view returns ( uint192 value, uint64 validAt ); + function pendingGuardian ( ) external view returns ( address value, uint64 validAt ); + function pendingOwner ( ) external view returns ( address ); + function pendingTimelock ( ) external view returns ( uint192 value, uint64 validAt ); + function permit ( address owner, address spender, uint256 value, uint256 deadline, uint8 v, bytes32 r, bytes32 s ) external; + function previewDeposit ( uint256 assets ) external view returns ( uint256 ); + function previewMint ( uint256 shares ) external view returns ( uint256 ); + function previewRedeem ( uint256 shares ) external view returns ( uint256 ); + function previewWithdraw ( uint256 assets ) external view returns ( uint256 ); + function reallocate ( MarketAllocation[] memory allocations ) external; + function redeem ( uint256 shares, address receiver, address owner ) external returns ( uint256 assets ); + function renounceOwnership ( ) external; + function revokePendingCap ( bytes32 id ) external; + function revokePendingGuardian ( ) external; + function revokePendingMarketRemoval ( bytes32 id ) external; + function revokePendingTimelock ( ) external; + function setCurator ( address newCurator ) external; + function setFee ( uint256 newFee ) external; + function setFeeRecipient ( address newFeeRecipient ) external; + function setIsAllocator ( address newAllocator, bool newIsAllocator ) external; + function setSkimRecipient ( address newSkimRecipient ) external; + function setSupplyQueue ( bytes32[] memory newSupplyQueue ) external; + function skim ( address token ) external; + function skimRecipient ( ) external view returns ( address ); + function submitCap ( MarketParams memory marketParams, uint256 newSupplyCap ) external; + function submitGuardian ( address newGuardian ) external; + function submitMarketRemoval ( MarketParams memory marketParams ) external; + function submitTimelock ( uint256 newTimelock ) external; + function supplyQueue ( uint256 ) external view returns ( bytes32 ); + function supplyQueueLength ( ) external view returns ( uint256 ); + function symbol ( ) external view returns ( string memory ); + function timelock ( ) external view returns ( uint256 ); + function totalAssets ( ) external view returns ( uint256 assets ); + function totalSupply ( ) external view returns ( uint256 ); + function transfer ( address to, uint256 value ) external returns ( bool ); + function transferFrom ( address from, address to, uint256 value ) external returns ( bool ); + function transferOwnership ( address newOwner ) external; + function updateWithdrawQueue ( uint256[] memory indexes ) external; + function withdraw ( uint256 assets, address receiver, address owner ) external returns ( uint256 shares ); + function withdrawQueue ( uint256 ) external view returns ( bytes32 ); + function withdrawQueueLength ( ) external view returns ( uint256 ); +} diff --git a/src/hardhat/contracts/Staking/FraxCrossChainFarmV4_ERC20.sol b/src/hardhat/contracts/Staking/FraxCrossChainFarmV4_ERC20.sol index f6fc8926..213c1477 100755 --- a/src/hardhat/contracts/Staking/FraxCrossChainFarmV4_ERC20.sol +++ b/src/hardhat/contracts/Staking/FraxCrossChainFarmV4_ERC20.sol @@ -356,7 +356,7 @@ contract FraxCrossChainFarmV4_ERC20 is Owned, ReentrancyGuard { fraxAddress = _fraxAddress; rewardTokens = _rewardTokens; - // Loop thought the reward tokens + // Loop through the reward tokens for (uint256 i = 0; i < _rewardTokens.length; i++) { // For fast token address -> token ID lookups later rewardTokenAddrToIdx[_rewardTokens[i]] = i; @@ -1138,7 +1138,7 @@ contract FraxCrossChainFarmV4_ERC20 is Owned, ReentrancyGuard { /// @notice Collect rewards (internal) /// @param rewardee The address of the staker - /// @param destination_address Destination address for the withdrawn LP + /// @param destination_address Destination address for the rewards /// @return _rtnRewards The amounts of collected reward tokens /// @dev No withdrawer == msg.sender check needed since this is only internally callable. This distinction is important for the migrator function _getReward(address rewardee, address destination_address) internal updateRewardAndBalance(rewardee, true) returns (uint256[] memory _rtnRewards) { diff --git a/src/hardhat/contracts/Staking/FraxUnifiedFarm_ERC20.sol b/src/hardhat/contracts/Staking/FraxUnifiedFarm_ERC20.sol index a8488b9a..4e980a4f 100755 --- a/src/hardhat/contracts/Staking/FraxUnifiedFarm_ERC20.sol +++ b/src/hardhat/contracts/Staking/FraxUnifiedFarm_ERC20.sol @@ -26,12 +26,12 @@ import "./FraxUnifiedFarmTemplate.sol"; // Convex wrappers // import "../Curve/ICurvefrxETHETHPool.sol"; -import "../Misc_AMOs/convex/IConvexStakingWrapperFrax.sol"; +// import "../Misc_AMOs/convex/IConvexStakingWrapperFrax.sol"; // import "../Misc_AMOs/convex/IDepositToken.sol"; // import "../Misc_AMOs/curve/I2pool.sol"; // import "../Misc_AMOs/curve/I2poolToken.sol"; // import "../Misc_AMOs/curve/I2poolTokenNoLending.sol"; -import "../Misc_AMOs/curve/ICurveStableSwapNG.sol"; +// import "../Misc_AMOs/curve/ICurveStableSwapNG.sol"; // import "../Misc_AMOs/curve/ICurveStableSwapMetaNG.sol"; // import "../Misc_AMOs/curve/ICurveTricryptoOptimizedWETH.sol"; @@ -51,6 +51,9 @@ import "../Misc_AMOs/curve/ICurveStableSwapNG.sol"; // KyberSwap Elastic KyberSwapFarmingToken (KS-FT) // import "../Misc_AMOs/kyberswap/elastic/IKyberSwapFarmingToken.sol"; +// Morpho +import "../Misc_AMOs/morpho/IMetaMorpho.sol"; + // mStable // import '../Misc_AMOs/mstable/IFeederPool.sol'; @@ -84,19 +87,19 @@ contract FraxUnifiedFarm_ERC20 is FraxUnifiedFarmTemplate { // Declared in FraxUnifiedFarmTemplate.sol // Convex crvUSD/FRAX - IConvexStakingWrapperFrax public stakingToken; + // IConvexStakingWrapperFrax public stakingToken; // I2poolTokenNoLending public curveToken; // ICurvefrxETHETHPool public curvePool; // Convex stkcvxFPIFRAX, stkcvxFRAXBP, etc // IConvexStakingWrapperFrax public stakingToken; // I2poolToken public curveToken; - ICurveStableSwapNG public curveToken; + // ICurveStableSwapNG public curveToken; // ICurveStableSwapMetaNG public curveToken; // ICurveTricryptoOptimizedWETH public curveToken; // I2pool public curvePool; // ICurvefrxETHETHPool public curvePool; - ICurveStableSwapNG public curvePool; + // ICurveStableSwapNG public curvePool; // ICurveStableSwapMetaNG public curvePool; // ICurveTricryptoOptimizedWETH public curvePool; @@ -112,6 +115,9 @@ contract FraxUnifiedFarm_ERC20 is FraxUnifiedFarmTemplate { // KyberSwap Elastic KyberSwapFarmingToken (KS-FT) // IKyberSwapFarmingToken public stakingToken; + // Morpho + IMetaMorpho public stakingToken; + // mStable // IFeederPool public stakingToken; @@ -179,6 +185,9 @@ contract FraxUnifiedFarm_ERC20 is FraxUnifiedFarmTemplate { // KyberSwap Elastic KyberSwapFarmingToken (KS-FT) // stakingToken = IKyberSwapFarmingToken(_stakingToken); + // Morpho + // USE CHILD + // mStable // stakingToken = IFeederPool(_stakingToken); @@ -247,6 +256,10 @@ contract FraxUnifiedFarm_ERC20 is FraxUnifiedFarmTemplate { // ============================================ // USE CHILD + // Morpho + // ============================================ + // USE CHILD + // mStable // ============================================ // { diff --git a/src/hardhat/contracts/Staking/Variants/FraxUnifiedFarm_ERC20_Convex_frxETH.sol b/src/hardhat/contracts/Staking/Variants/FraxUnifiedFarm_ERC20_Convex_frxETH.sol index 1adf554a..7424a966 100755 --- a/src/hardhat/contracts/Staking/Variants/FraxUnifiedFarm_ERC20_Convex_frxETH.sol +++ b/src/hardhat/contracts/Staking/Variants/FraxUnifiedFarm_ERC20_Convex_frxETH.sol @@ -42,9 +42,9 @@ contract FraxUnifiedFarm_ERC20_Convex_frxETH is FraxUnifiedFarm_ERC20 { // curvePool = ICurvefrxETHETHPool(stakingToken.curveToken()); // Convex frxETH/XYZ NGs (TOKEN = MINTER / POOL)) - stakingToken = IConvexStakingWrapperFrax(_stakingToken); - curveToken = ICurveStableSwapNG(stakingToken.curveToken()); - curvePool = ICurveStableSwapNG(stakingToken.curveToken()); + // stakingToken = IConvexStakingWrapperFrax(_stakingToken); + // curveToken = ICurveStableSwapNG(stakingToken.curveToken()); + // curvePool = ICurveStableSwapNG(stakingToken.curveToken()); } function getLatestETHPriceE8() public view returns (int) { @@ -66,13 +66,13 @@ contract FraxUnifiedFarm_ERC20_Convex_frxETH is FraxUnifiedFarm_ERC20 { // Convex frxETH/XYZ // ============================================ - { - // Assume frxETH = ETH for pricing purposes - // Get the USD value of the frxETH per LP token - uint256 frxETH_in_pool = IERC20(0x5E8422345238F34275888049021821E8E08CAa1f).balanceOf(address(curvePool)); - uint256 frxETH_usd_val_per_lp_e8 = (frxETH_in_pool * uint256(getLatestETHPriceE8())) / curveToken.totalSupply(); - frax_per_lp_token = frxETH_usd_val_per_lp_e8 * (1e10); // We use USD as "Frax" here - } + // { + // // Assume frxETH = ETH for pricing purposes + // // Get the USD value of the frxETH per LP token + // uint256 frxETH_in_pool = IERC20(0x5E8422345238F34275888049021821E8E08CAa1f).balanceOf(address(curvePool)); + // uint256 frxETH_usd_val_per_lp_e8 = (frxETH_in_pool * uint256(getLatestETHPriceE8())) / curveToken.totalSupply(); + // frax_per_lp_token = frxETH_usd_val_per_lp_e8 * (1e10); // We use USD as "Frax" here + // } } } \ No newline at end of file diff --git a/src/hardhat/contracts/Staking/Variants/FraxUnifiedFarm_ERC20_Other.sol b/src/hardhat/contracts/Staking/Variants/FraxUnifiedFarm_ERC20_Other.sol index 8b11440e..82ad22da 100755 --- a/src/hardhat/contracts/Staking/Variants/FraxUnifiedFarm_ERC20_Other.sol +++ b/src/hardhat/contracts/Staking/Variants/FraxUnifiedFarm_ERC20_Other.sol @@ -6,10 +6,10 @@ import "../../Oracle/AggregatorV3Interface.sol"; // Balancer // ========================= -import "../../Misc_AMOs/balancer/IAuraDeposit.sol"; -import "../../Misc_AMOs/balancer/IAuraDepositVault.sol"; -import "../../Misc_AMOs/balancer/IBalancerVault.sol"; -import "../../Misc_AMOs/balancer/IComposableStablePool.sol"; +// import "../../Misc_AMOs/balancer/IAuraDeposit.sol"; +// import "../../Misc_AMOs/balancer/IAuraDepositVault.sol"; +// import "../../Misc_AMOs/balancer/IBalancerVault.sol"; +// import "../../Misc_AMOs/balancer/IComposableStablePool.sol"; // Bunni // ========================= @@ -19,20 +19,26 @@ import "../../Misc_AMOs/balancer/IComposableStablePool.sol"; // import "../../Misc_AMOs/bunni/IBunniMinter.sol"; // import "../../Uniswap_V3/IUniswapV3Pool.sol"; +// Morpho +// ========================= +import "../../Misc_AMOs/morpho/IMetaMorpho.sol"; contract FraxUnifiedFarm_ERC20_Other is FraxUnifiedFarm_ERC20 { // frxETH Pricing - AggregatorV3Interface internal priceFeedETHUSD = AggregatorV3Interface(0x5f4eC3Df9cbd43714FE2740f5E3616155c5b8419); + // AggregatorV3Interface internal priceFeedETHUSD = AggregatorV3Interface(0x5f4eC3Df9cbd43714FE2740f5E3616155c5b8419); // Aura / Balancer - IComposableStablePool public bal_vanilla_lp_tkn; - IBalancerVault public bal_vanilla_vault; + // IComposableStablePool public bal_vanilla_lp_tkn; + // IBalancerVault public bal_vanilla_vault; // Bunni // IBunniTokenLP public lp_tkn; // IUniswapV3Pool public univ3_pool; + // Morpho + + string public farm_type = "ERC20_Convex_Other"; constructor ( @@ -59,6 +65,10 @@ contract FraxUnifiedFarm_ERC20_Other is FraxUnifiedFarm_ERC20 { // univ3_pool = IUniswapV3Pool(lp_tkn.pool()); // address token0 = univ3_pool.token0(); // frax_is_token0 = (token0 == frax_address); + + // Morpho + stakingToken = IMetaMorpho(_stakingToken); + } // Aura & Balancer @@ -77,16 +87,20 @@ contract FraxUnifiedFarm_ERC20_Other is FraxUnifiedFarm_ERC20 { // minter.toggle_approve_mint(_claimer); // } - - // frxETH pricing + // Morpho // ---------------------------------------- - function getLatestETHPriceE8() public view returns (int) { - // Returns in E8 - (uint80 roundID, int price, , uint256 updatedAt, uint80 answeredInRound) = priceFeedETHUSD.latestRoundData(); - require(price >= 0 && updatedAt!= 0 && answeredInRound >= roundID, "Invalid chainlink price"); + // Nothing + + + // // frxETH pricing + // // ---------------------------------------- + // function getLatestETHPriceE8() public view returns (int) { + // // Returns in E8 + // (uint80 roundID, int price, , uint256 updatedAt, uint80 answeredInRound) = priceFeedETHUSD.latestRoundData(); + // require(price >= 0 && updatedAt!= 0 && answeredInRound >= roundID, "Invalid chainlink price"); - return price; - } + // return price; + // } // function setETHUSDOracle(address _eth_usd_oracle_address) public onlyByOwnGov { // require(_eth_usd_oracle_address != address(0), "Zero address detected"); @@ -129,5 +143,12 @@ contract FraxUnifiedFarm_ERC20_Other is FraxUnifiedFarm_ERC20 { // else frax_per_lp_token = amt1; // } + // Morpho + // ============================================ + { + // Convert 1e18 shares to FRAX + frax_per_lp_token = stakingToken.convertToAssets(1e18); + } + } } diff --git a/src/hardhat/gnosis-safe-scripts/Frax_Comptroller_Routine/Sunday_Part_1.js b/src/hardhat/gnosis-safe-scripts/Frax_Comptroller_Routine/Sunday_Part_1.js index 7aca3ef2..bffb5ce0 100644 --- a/src/hardhat/gnosis-safe-scripts/Frax_Comptroller_Routine/Sunday_Part_1.js +++ b/src/hardhat/gnosis-safe-scripts/Frax_Comptroller_Routine/Sunday_Part_1.js @@ -476,7 +476,7 @@ async function main() { "payable": false }, "contractInputsValues": { - "rewardContracts": "[\"0x7e880867363A7e321f5d260Cade2B0Bb2F717B02\", \"0x6991C1CD588c4e6f6f1de3A0bac5B8BbAb7aAF6d\", \"0x26598e3E511ADFadefD70ab2C3475Ff741741104\", \"0x47809eE386D1dEC29c0b13f21ba30F564517538B\", \"0x053e1dad223A206e6BCa24C77786bb69a10e427d\", \"0x062450B06EB92F1C4E227C41c987ed97c93Ae232\", \"0xB10a6e39Ed8a66fEd3aAef3866a95611a49B9a95\", \"0xE627082369689b2B86D948c377A4aE4e739C59eE\"]", + "rewardContracts": "[\"0x7e880867363A7e321f5d260Cade2B0Bb2F717B02\", \"0x6991C1CD588c4e6f6f1de3A0bac5B8BbAb7aAF6d\", \"0x26598e3E511ADFadefD70ab2C3475Ff741741104\", \"0x47809eE386D1dEC29c0b13f21ba30F564517538B\", \"0x053e1dad223A206e6BCa24C77786bb69a10e427d\", \"0x062450B06EB92F1C4E227C41c987ed97c93Ae232\", \"0xB10a6e39Ed8a66fEd3aAef3866a95611a49B9a95\", \"0xE627082369689b2B86D948c377A4aE4e739C59eE\", \"0xc030b717b96B83bf4EC4a075dD547614953968FD\"]", "extraRewardContracts": "[]", "tokenRewardContracts": "[]", "tokenRewardTokens": "[]", @@ -566,32 +566,32 @@ async function main() { // Relock expired locked CVX // ===================================== // Determine if you need to process expired locks - // const cvx_lock_status = await cvx_locker.lockedBalances("0xB1748C79709f4Ba2Dd82834B8c82D4a505003f27"); - // const PROCESS_EXPIRED_LOCKS = (BigInt(cvx_lock_status.unlockable) > BigInt(0)); - // if (PROCESS_EXPIRED_LOCKS) { - // batch_json.transactions.push({ - // "to": "0x72a19342e8F1838460eBFCCEf09F6585e32db86E", - // "value": "0", - // "data": null, - // "contractMethod": { - // "inputs": [ - // { - // "internalType": "bool", - // "name": "_relock", - // "type": "bool" - // } - // ], - // "name": "processExpiredLocks", - // "payable": false - // }, - // "contractInputsValues": { - // "_relock": true, - // } - // }); - // } - // else { - // console.log("No expired locks to process") - // } + const cvx_lock_status = await cvx_locker.lockedBalances("0xB1748C79709f4Ba2Dd82834B8c82D4a505003f27"); + const PROCESS_EXPIRED_LOCKS = (BigInt(cvx_lock_status.unlockable) > BigInt(0)); + if (PROCESS_EXPIRED_LOCKS) { + batch_json.transactions.push({ + "to": "0x72a19342e8F1838460eBFCCEf09F6585e32db86E", + "value": "0", + "data": null, + "contractMethod": { + "inputs": [ + { + "internalType": "bool", + "name": "_relock", + "type": "bool" + } + ], + "name": "processExpiredLocks", + "payable": false + }, + "contractInputsValues": { + "_relock": true, + } + }); + } + else { + console.log("No expired locks to process") + } // =============================================================== // ============================ PRISMA =========================== diff --git a/src/hardhat/gnosis-safe-scripts/Frax_Comptroller_Routine/Sunday_Part_1.json b/src/hardhat/gnosis-safe-scripts/Frax_Comptroller_Routine/Sunday_Part_1.json index 7d9944e8..3ffdf5ff 100644 --- a/src/hardhat/gnosis-safe-scripts/Frax_Comptroller_Routine/Sunday_Part_1.json +++ b/src/hardhat/gnosis-safe-scripts/Frax_Comptroller_Routine/Sunday_Part_1.json @@ -1 +1 @@ -{"version":"1.0","chainId":"1","createdAt":1714343219000,"meta":{"name":"Transactions Batch","description":"","txBuilderVersion":"1.14.1","createdFromSafeAddress":"0xB1748C79709f4Ba2Dd82834B8c82D4a505003f27","createdFromOwnerAddress":"","checksum":"0xdcd15964a60a73edb1bda27e0eded16cfb8aabef1be9b9d267482047db9b32b3"},"transactions":[{"to":"0x2AA609715488B09EFA93883759e8B089FBa11296","value":"0","data":null,"contractMethod":{"inputs":[],"name":"getReward","payable":false},"contractInputsValues":null},{"to":"0xD25D60aBafC220dd6F7BA37baD23e1105Db05a06","value":"0","data":null,"contractMethod":{"inputs":[],"name":"getReward","payable":false},"contractInputsValues":null},{"to":"0x9145880B721eC3DA9d8a9fA595A34562F139AC69","value":"0","data":null,"contractMethod":{"inputs":[],"name":"getReward","payable":false},"contractInputsValues":null},{"to":"0x0C150631A996716e11F71f8BA77BF8CF6c2D047c","value":"0","data":null,"contractMethod":{"inputs":[],"name":"getReward","payable":false},"contractInputsValues":null},{"to":"0x9592CD5dA20184Cbbf884C5892B150e575674aD0","value":"0","data":null,"contractMethod":{"inputs":[],"name":"getReward","payable":false},"contractInputsValues":null},{"to":"0x3f29cB4111CbdA8081642DA1f75B3c12DECf2516","value":"0","data":null,"contractMethod":{"inputs":[{"internalType":"address[]","name":"rewardContracts","type":"address[]"},{"internalType":"address[]","name":"extraRewardContracts","type":"address[]"},{"internalType":"address[]","name":"tokenRewardContracts","type":"address[]"},{"internalType":"address[]","name":"tokenRewardTokens","type":"address[]"},{"internalType":"uint256","name":"depositCrvMaxAmount","type":"uint256"},{"internalType":"uint256","name":"minAmountOut","type":"uint256"},{"internalType":"uint256","name":"depositCvxMaxAmount","type":"uint256"},{"internalType":"uint256","name":"spendCvxAmount","type":"uint256"},{"internalType":"uint256","name":"options","type":"uint256"}],"name":"claimRewards","payable":false},"contractInputsValues":{"rewardContracts":"[\"0x7e880867363A7e321f5d260Cade2B0Bb2F717B02\", \"0x6991C1CD588c4e6f6f1de3A0bac5B8BbAb7aAF6d\", \"0x26598e3E511ADFadefD70ab2C3475Ff741741104\", \"0x47809eE386D1dEC29c0b13f21ba30F564517538B\", \"0x053e1dad223A206e6BCa24C77786bb69a10e427d\", \"0x062450B06EB92F1C4E227C41c987ed97c93Ae232\", \"0xB10a6e39Ed8a66fEd3aAef3866a95611a49B9a95\", \"0xE627082369689b2B86D948c377A4aE4e739C59eE\"]","extraRewardContracts":"[]","tokenRewardContracts":"[]","tokenRewardTokens":"[]","depositCrvMaxAmount":"0","minAmountOut":"0","depositCvxMaxAmount":"0","spendCvxAmount":"0","options":"0"}},{"to":"0xaa0C3f5F7DFD688C6E646F66CD2a6B66ACdbE434","value":"0","data":null,"contractMethod":{"inputs":[{"internalType":"address","name":"_account","type":"address"}],"name":"getReward","payable":false},"contractInputsValues":{"_account":"0xB1748C79709f4Ba2Dd82834B8c82D4a505003f27"}},{"to":"0x72a19342e8F1838460eBFCCEf09F6585e32db86E","value":"0","data":null,"contractMethod":{"inputs":[{"internalType":"address","name":"_account","type":"address"}],"name":"getReward","payable":false},"contractInputsValues":{"_account":"0xB1748C79709f4Ba2Dd82834B8c82D4a505003f27"}},{"to":"0x0c73f1cFd5C9dFc150C8707Aa47Acbd14F0BE108","value":"0","data":null,"contractMethod":{"inputs":[{"internalType":"address","name":"_account","type":"address"}],"name":"getReward","payable":false},"contractInputsValues":{"_account":"0xB1748C79709f4Ba2Dd82834B8c82D4a505003f27"}},{"to":"0xC72bc1a8cf9b1A218386df641d8bE99B40436A0f","value":"0","data":null,"contractMethod":{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"claim","payable":false},"contractInputsValues":{"account":"0xB1748C79709f4Ba2Dd82834B8c82D4a505003f27"}},{"to":"0x5E8422345238F34275888049021821E8E08CAa1f","value":"0","data":null,"contractMethod":{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","payable":false},"contractInputsValues":{"spender":"0xac3E018457B222d93114458476f3E3416Abbe38F","amount":"9055200000000000000"}},{"to":"0xac3E018457B222d93114458476f3E3416Abbe38F","value":"0","data":null,"contractMethod":{"inputs":[{"internalType":"uint256","name":"assets","type":"uint256"},{"internalType":"address","name":"receiver","type":"address"}],"name":"deposit","payable":false},"contractInputsValues":{"assets":"9055200000000000000","receiver":"0xB1748C79709f4Ba2Dd82834B8c82D4a505003f27"}},{"to":"0x358fE82370a1B9aDaE2E3ad69D6cF9e503c96018","value":"0","data":null,"contractMethod":{"inputs":[{"internalType":"address","name":"gauge_addr","type":"address"}],"name":"mint","payable":false},"contractInputsValues":{"gauge_addr":"0xB2Ac3382dA625eb41Fc803b57743f941a484e2a6"}},{"to":"0x3814307b86b54b1d8e7B2Ac34662De9125F8f4E6","value":"0","data":null,"contractMethod":{"inputs":[],"name":"collectFees","payable":false},"contractInputsValues":null},{"to":"0x72a19342e8F1838460eBFCCEf09F6585e32db86E","value":"0","data":null,"contractMethod":{"inputs":[{"internalType":"address","name":"_account","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"},{"internalType":"uint256","name":"_spendRatio","type":"uint256"}],"name":"lock","payable":false},"contractInputsValues":{"_account":"0xB1748C79709f4Ba2Dd82834B8c82D4a505003f27","_amount":"0","_spendRatio":"0"}}]} \ No newline at end of file +{"version":"1.0","chainId":"1","createdAt":1718214707000,"meta":{"name":"Transactions Batch","description":"","txBuilderVersion":"1.14.1","createdFromSafeAddress":"0xB1748C79709f4Ba2Dd82834B8c82D4a505003f27","createdFromOwnerAddress":"","checksum":"0xec564a68c0275b1710c387672bc5d58e39a689d9395b3f5775be7c5031b773ed"},"transactions":[{"to":"0x2AA609715488B09EFA93883759e8B089FBa11296","value":"0","data":null,"contractMethod":{"inputs":[],"name":"getReward","payable":false},"contractInputsValues":null},{"to":"0xD25D60aBafC220dd6F7BA37baD23e1105Db05a06","value":"0","data":null,"contractMethod":{"inputs":[],"name":"getReward","payable":false},"contractInputsValues":null},{"to":"0x9145880B721eC3DA9d8a9fA595A34562F139AC69","value":"0","data":null,"contractMethod":{"inputs":[],"name":"getReward","payable":false},"contractInputsValues":null},{"to":"0x0C150631A996716e11F71f8BA77BF8CF6c2D047c","value":"0","data":null,"contractMethod":{"inputs":[],"name":"getReward","payable":false},"contractInputsValues":null},{"to":"0x9592CD5dA20184Cbbf884C5892B150e575674aD0","value":"0","data":null,"contractMethod":{"inputs":[],"name":"getReward","payable":false},"contractInputsValues":null},{"to":"0x3f29cB4111CbdA8081642DA1f75B3c12DECf2516","value":"0","data":null,"contractMethod":{"inputs":[{"internalType":"address[]","name":"rewardContracts","type":"address[]"},{"internalType":"address[]","name":"extraRewardContracts","type":"address[]"},{"internalType":"address[]","name":"tokenRewardContracts","type":"address[]"},{"internalType":"address[]","name":"tokenRewardTokens","type":"address[]"},{"internalType":"uint256","name":"depositCrvMaxAmount","type":"uint256"},{"internalType":"uint256","name":"minAmountOut","type":"uint256"},{"internalType":"uint256","name":"depositCvxMaxAmount","type":"uint256"},{"internalType":"uint256","name":"spendCvxAmount","type":"uint256"},{"internalType":"uint256","name":"options","type":"uint256"}],"name":"claimRewards","payable":false},"contractInputsValues":{"rewardContracts":"[\"0x7e880867363A7e321f5d260Cade2B0Bb2F717B02\", \"0x6991C1CD588c4e6f6f1de3A0bac5B8BbAb7aAF6d\", \"0x26598e3E511ADFadefD70ab2C3475Ff741741104\", \"0x47809eE386D1dEC29c0b13f21ba30F564517538B\", \"0x053e1dad223A206e6BCa24C77786bb69a10e427d\", \"0x062450B06EB92F1C4E227C41c987ed97c93Ae232\", \"0xB10a6e39Ed8a66fEd3aAef3866a95611a49B9a95\", \"0xE627082369689b2B86D948c377A4aE4e739C59eE\", \"0xc030b717b96B83bf4EC4a075dD547614953968FD\"]","extraRewardContracts":"[]","tokenRewardContracts":"[]","tokenRewardTokens":"[]","depositCrvMaxAmount":"0","minAmountOut":"0","depositCvxMaxAmount":"0","spendCvxAmount":"0","options":"0"}},{"to":"0xaa0C3f5F7DFD688C6E646F66CD2a6B66ACdbE434","value":"0","data":null,"contractMethod":{"inputs":[{"internalType":"address","name":"_account","type":"address"}],"name":"getReward","payable":false},"contractInputsValues":{"_account":"0xB1748C79709f4Ba2Dd82834B8c82D4a505003f27"}},{"to":"0x72a19342e8F1838460eBFCCEf09F6585e32db86E","value":"0","data":null,"contractMethod":{"inputs":[{"internalType":"address","name":"_account","type":"address"}],"name":"getReward","payable":false},"contractInputsValues":{"_account":"0xB1748C79709f4Ba2Dd82834B8c82D4a505003f27"}},{"to":"0x0c73f1cFd5C9dFc150C8707Aa47Acbd14F0BE108","value":"0","data":null,"contractMethod":{"inputs":[{"internalType":"address","name":"_account","type":"address"}],"name":"getReward","payable":false},"contractInputsValues":{"_account":"0xB1748C79709f4Ba2Dd82834B8c82D4a505003f27"}},{"to":"0x72a19342e8F1838460eBFCCEf09F6585e32db86E","value":"0","data":null,"contractMethod":{"inputs":[{"internalType":"bool","name":"_relock","type":"bool"}],"name":"processExpiredLocks","payable":false},"contractInputsValues":{"_relock":true}},{"to":"0xC72bc1a8cf9b1A218386df641d8bE99B40436A0f","value":"0","data":null,"contractMethod":{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"claim","payable":false},"contractInputsValues":{"account":"0xB1748C79709f4Ba2Dd82834B8c82D4a505003f27"}},{"to":"0x5E8422345238F34275888049021821E8E08CAa1f","value":"0","data":null,"contractMethod":{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","payable":false},"contractInputsValues":{"spender":"0xac3E018457B222d93114458476f3E3416Abbe38F","amount":"9137600000000000000"}},{"to":"0xac3E018457B222d93114458476f3E3416Abbe38F","value":"0","data":null,"contractMethod":{"inputs":[{"internalType":"uint256","name":"assets","type":"uint256"},{"internalType":"address","name":"receiver","type":"address"}],"name":"deposit","payable":false},"contractInputsValues":{"assets":"9137600000000000000","receiver":"0xB1748C79709f4Ba2Dd82834B8c82D4a505003f27"}},{"to":"0x358fE82370a1B9aDaE2E3ad69D6cF9e503c96018","value":"0","data":null,"contractMethod":{"inputs":[{"internalType":"address","name":"gauge_addr","type":"address"}],"name":"mint","payable":false},"contractInputsValues":{"gauge_addr":"0xB2Ac3382dA625eb41Fc803b57743f941a484e2a6"}},{"to":"0x3814307b86b54b1d8e7B2Ac34662De9125F8f4E6","value":"0","data":null,"contractMethod":{"inputs":[],"name":"collectFees","payable":false},"contractInputsValues":null},{"to":"0xC36442b4a4522E871399CD717aBDD847Ab11FE88","value":"0","data":null,"contractMethod":{"inputs":[{"components":[{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint128","name":"amount0Max","type":"uint128"},{"internalType":"uint128","name":"amount1Max","type":"uint128"}],"internalType":"struct INonfungiblePositionManager.CollectParams","name":"params","type":"tuple"}],"name":"collect","payable":true},"contractInputsValues":{"params":"[\"215775\",\"0xB1748C79709f4Ba2Dd82834B8c82D4a505003f27\",\"340282366920938463463374607431768211455\",\"340282366920938463463374607431768211455\"]"}},{"to":"0xC36442b4a4522E871399CD717aBDD847Ab11FE88","value":"0","data":null,"contractMethod":{"inputs":[{"components":[{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint128","name":"amount0Max","type":"uint128"},{"internalType":"uint128","name":"amount1Max","type":"uint128"}],"internalType":"struct INonfungiblePositionManager.CollectParams","name":"params","type":"tuple"}],"name":"collect","payable":true},"contractInputsValues":{"params":"[\"219036\",\"0xB1748C79709f4Ba2Dd82834B8c82D4a505003f27\",\"340282366920938463463374607431768211455\",\"340282366920938463463374607431768211455\"]"}},{"to":"0xC36442b4a4522E871399CD717aBDD847Ab11FE88","value":"0","data":null,"contractMethod":{"inputs":[{"components":[{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint128","name":"amount0Max","type":"uint128"},{"internalType":"uint128","name":"amount1Max","type":"uint128"}],"internalType":"struct INonfungiblePositionManager.CollectParams","name":"params","type":"tuple"}],"name":"collect","payable":true},"contractInputsValues":{"params":"[\"219099\",\"0xB1748C79709f4Ba2Dd82834B8c82D4a505003f27\",\"340282366920938463463374607431768211455\",\"340282366920938463463374607431768211455\"]"}},{"to":"0xC36442b4a4522E871399CD717aBDD847Ab11FE88","value":"0","data":null,"contractMethod":{"inputs":[{"components":[{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint128","name":"amount0Max","type":"uint128"},{"internalType":"uint128","name":"amount1Max","type":"uint128"}],"internalType":"struct INonfungiblePositionManager.CollectParams","name":"params","type":"tuple"}],"name":"collect","payable":true},"contractInputsValues":{"params":"[\"304636\",\"0xB1748C79709f4Ba2Dd82834B8c82D4a505003f27\",\"340282366920938463463374607431768211455\",\"340282366920938463463374607431768211455\"]"}},{"to":"0xC36442b4a4522E871399CD717aBDD847Ab11FE88","value":"0","data":null,"contractMethod":{"inputs":[{"components":[{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint128","name":"amount0Max","type":"uint128"},{"internalType":"uint128","name":"amount1Max","type":"uint128"}],"internalType":"struct INonfungiblePositionManager.CollectParams","name":"params","type":"tuple"}],"name":"collect","payable":true},"contractInputsValues":{"params":"[\"419023\",\"0xB1748C79709f4Ba2Dd82834B8c82D4a505003f27\",\"340282366920938463463374607431768211455\",\"340282366920938463463374607431768211455\"]"}},{"to":"0x72a19342e8F1838460eBFCCEf09F6585e32db86E","value":"0","data":null,"contractMethod":{"inputs":[{"internalType":"address","name":"_account","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"},{"internalType":"uint256","name":"_spendRatio","type":"uint256"}],"name":"lock","payable":false},"contractInputsValues":{"_account":"0xB1748C79709f4Ba2Dd82834B8c82D4a505003f27","_amount":"0","_spendRatio":"0"}}]} \ No newline at end of file diff --git a/src/hardhat/hardhat.config.js b/src/hardhat/hardhat.config.js index 89de74f4..5792b09e 100644 --- a/src/hardhat/hardhat.config.js +++ b/src/hardhat/hardhat.config.js @@ -128,7 +128,7 @@ module.exports = { }, chainId: 1, gas: "auto", - gasPrice: 7000000000, // 7 Gwei + gasPrice: 18000000000, // 18 Gwei gasMultiplier: 1.2, }, evmos: { @@ -187,7 +187,8 @@ module.exports = { // }, chainId: 252, gas: "auto", - gasPrice: 2500000, // 0.0025 Gwei + // gasPrice: 2500000, // 0.0025 Gwei + gasPrice: 15000, // 0.000015 Gwei gasMultiplier: 1.2, }, // fuse: { @@ -300,18 +301,18 @@ module.exports = { gasPrice: "auto", gasMultiplier: 1.2 }, - // zksync: { - // url: process.env.ZKSYNC_NETWORK_ENDPOINT, - // accounts: { - // mnemonic: process.env.ZKSYNC_MNEMONIC_PHRASE - // }, - // chainId: 324, - // gas: "auto", - // gasPrice: "auto", - // // gasPrice: 3000000000, // 3 Gwei - // gasMultiplier: 1.2, - // zksync: true - // }, + zksync: { + url: process.env.ZKSYNC_NETWORK_ENDPOINT, + accounts: { + mnemonic: process.env.ZKSYNC_MNEMONIC_PHRASE + }, + chainId: 324, + gas: "auto", + gasPrice: "auto", + // gasPrice: 3000000000, // 3 Gwei + gasMultiplier: 1.2, + zksync: true + }, }, solidity: { compilers: [ @@ -495,6 +496,30 @@ module.exports = { } } }, + { + version: "0.8.26", + settings: { + // viaIR: true, + // optimizer: { + // enabled: true, + // runs: 200000, + // details: { + // orderLiterals: true, + // deduplicate: true, + // cse: true, + // constantOptimizer: true, + // yul: true, + // yulDetails: { + // stackAllocation: true + // } + // }, + // } + optimizer: { + enabled: true, + runs: 100000 + } + } + }, ], }, zksolc: { diff --git a/src/hardhat/public-scripts/fraxtal_yield_distributor_mass_checkpointer.js b/src/hardhat/public-scripts/fraxtal_yield_distributor_mass_checkpointer.js new file mode 100644 index 00000000..edc21a0c --- /dev/null +++ b/src/hardhat/public-scripts/fraxtal_yield_distributor_mass_checkpointer.js @@ -0,0 +1,382 @@ +const Web3 = require('web3'); +const path = require('path'); +const fs = require('fs'); +const envPath = path.join(__dirname, '../../../.env'); +const { Chain, Common, Hardfork } = require('@ethereumjs/common'); +const { LegacyTransaction, FeeMarketEIP1559Transaction } = require('@ethereumjs/tx'); +const { hexToBytes, bytesToHex } = require('@ethereumjs/util'); +require('dotenv').config({ path: envPath }); +const constants = require(path.join(__dirname, '../../../dist/types/constants')); +const toHex = require('to-hex'); +const chalk = require('chalk'); +const { sleep } = require('../../../dist/misc/utilities'); + + +const { Provider } = require('@ethersproject/abstract-provider'); +const { Signer } = require('@ethersproject/abstract-signer'); +const { BigNumber } = require('@ethersproject/bignumber'); +const { hexZeroPad, hexStripZeros } = require('@ethersproject/bytes'); +const { Contract } = require('@ethersproject/contracts'); +const { JsonRpcProvider } = require('@ethersproject/providers'); +const { encode } = require('@ethersproject/rlp'); +const { keccak256 } = require('@ethersproject/solidity'); +const { Wallet } = require('@ethersproject/wallet'); + +const VEFXS_AGGREGATOR_ABI = [{"type":"constructor","inputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"acceptOwnership","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"addAddlVeFXSContract","inputs":[{"name":"_addr","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"addlVeContracts","inputs":[{"name":"","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"addlVeContractsArr","inputs":[{"name":"","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"view"},{"type":"function","name":"allAddlVeContractsAddresses","inputs":[],"outputs":[{"name":"_addresses","type":"address[]","internalType":"address[]"}],"stateMutability":"view"},{"type":"function","name":"allAddlVeContractsLength","inputs":[],"outputs":[{"name":"_length","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"fpisLocker","inputs":[],"outputs":[{"name":"","type":"address","internalType":"contract IFPISLocker"}],"stateMutability":"view"},{"type":"function","name":"getAllCurrActiveLocks","inputs":[{"name":"_account","type":"address","internalType":"address"},{"name":"_estimateCrudeVeFXS","type":"bool","internalType":"bool"}],"outputs":[{"name":"_currActiveLocks","type":"tuple[]","internalType":"struct IveFXSStructs.LockedBalanceExtendedV2[]","components":[{"name":"id","type":"uint256","internalType":"uint256"},{"name":"index","type":"uint128","internalType":"uint128"},{"name":"amount","type":"int128","internalType":"int128"},{"name":"end","type":"uint128","internalType":"uint128"},{"name":"location","type":"address","internalType":"address"},{"name":"estimatedCurrLockVeFXS","type":"uint256","internalType":"uint256"}]}],"stateMutability":"view"},{"type":"function","name":"getAllExpiredLocks","inputs":[{"name":"_account","type":"address","internalType":"address"}],"outputs":[{"name":"_expiredLocks","type":"tuple[]","internalType":"struct IveFXSStructs.LockedBalanceExtendedV2[]","components":[{"name":"id","type":"uint256","internalType":"uint256"},{"name":"index","type":"uint128","internalType":"uint128"},{"name":"amount","type":"int128","internalType":"int128"},{"name":"end","type":"uint128","internalType":"uint128"},{"name":"location","type":"address","internalType":"address"},{"name":"estimatedCurrLockVeFXS","type":"uint256","internalType":"uint256"}]}],"stateMutability":"view"},{"type":"function","name":"initialize","inputs":[{"name":"_owner","type":"address","internalType":"address"},{"name":"_timelockAddress","type":"address","internalType":"address"},{"name":"_veAddresses","type":"address[6]","internalType":"address[6]"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"l1VeFXSTotalSupplyOracle","inputs":[],"outputs":[{"name":"","type":"address","internalType":"contract L1VeFXSTotalSupplyOracle"}],"stateMutability":"view"},{"type":"function","name":"l1veFXS","inputs":[],"outputs":[{"name":"","type":"address","internalType":"contract IL1VeFXS"}],"stateMutability":"view"},{"type":"function","name":"lFpisUtils","inputs":[],"outputs":[{"name":"","type":"address","internalType":"contract FPISLockerUtils"}],"stateMutability":"view"},{"type":"function","name":"nominateNewOwner","inputs":[{"name":"_owner","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"nominatedOwner","inputs":[],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"view"},{"type":"function","name":"owner","inputs":[],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"view"},{"type":"function","name":"recoverERC20","inputs":[{"name":"_tokenAddress","type":"address","internalType":"address"},{"name":"_tokenAmount","type":"uint256","internalType":"uint256"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"removeAddlVeFXSContract","inputs":[{"name":"_addr","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"setAddresses","inputs":[{"name":"_veAddresses","type":"address[6]","internalType":"address[6]"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"setTimelock","inputs":[{"name":"_newTimelock","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"timelockAddress","inputs":[],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"view"},{"type":"function","name":"ttlCombinedVeFXS","inputs":[{"name":"_user","type":"address","internalType":"address"}],"outputs":[{"name":"_currBal","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"ttlCombinedVeFXSTotalSupply","inputs":[],"outputs":[{"name":"_totalSupply","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"ttlCombinedVeFXSTotalSupplyDetailed","inputs":[],"outputs":[{"name":"_supplyInfo","type":"tuple","internalType":"struct VeFXSAggregator.DetailedTotalSupplyInfo","components":[{"name":"vestedFXSTotal","type":"uint256","internalType":"uint256"},{"name":"fpisLockerTotal","type":"uint256","internalType":"uint256"},{"name":"l1veFXSTotal","type":"uint256","internalType":"uint256"},{"name":"otherSourcesTotal","type":"uint256","internalType":"uint256"},{"name":"grandTotal","type":"uint256","internalType":"uint256"}]}],"stateMutability":"view"},{"type":"function","name":"veFXS","inputs":[],"outputs":[{"name":"","type":"address","internalType":"contract IVestedFXS"}],"stateMutability":"view"},{"type":"function","name":"veFXSUtils","inputs":[],"outputs":[{"name":"","type":"address","internalType":"contract IVestedFXSUtils"}],"stateMutability":"view"},{"type":"event","name":"AddlVeFXSContractAdded","inputs":[{"name":"addr","type":"address","indexed":false,"internalType":"address"}],"anonymous":false},{"type":"event","name":"AddlVeFXSContractRemoved","inputs":[{"name":"addr","type":"address","indexed":false,"internalType":"address"}],"anonymous":false},{"type":"event","name":"DefaultInitialization","inputs":[],"anonymous":false},{"type":"event","name":"OwnerChanged","inputs":[{"name":"oldOwner","type":"address","indexed":false,"internalType":"address"},{"name":"newOwner","type":"address","indexed":false,"internalType":"address"}],"anonymous":false},{"type":"event","name":"OwnerNominated","inputs":[{"name":"newOwner","type":"address","indexed":false,"internalType":"address"}],"anonymous":false},{"type":"event","name":"RecoveredERC20","inputs":[{"name":"token","type":"address","indexed":false,"internalType":"address"},{"name":"amount","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"RewardAdded","inputs":[{"name":"reward","type":"uint256","indexed":false,"internalType":"uint256"},{"name":"yieldRate","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"TimelockChanged","inputs":[{"name":"timelock_address","type":"address","indexed":false,"internalType":"address"}],"anonymous":false},{"type":"event","name":"YieldCollected","inputs":[{"name":"user","type":"address","indexed":true,"internalType":"address"},{"name":"yield","type":"uint256","indexed":false,"internalType":"uint256"},{"name":"tokenAddress","type":"address","indexed":false,"internalType":"address"}],"anonymous":false},{"type":"event","name":"YieldDurationUpdated","inputs":[{"name":"newDuration","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"error","name":"InitializeFailed","inputs":[]},{"type":"error","name":"InvalidOwnershipAcceptance","inputs":[]},{"type":"error","name":"NotOwnerOrTimelock","inputs":[]},{"type":"error","name":"OnlyOwner","inputs":[]},{"type":"error","name":"OwnerCannotBeZero","inputs":[]},{"type":"error","name":"TransferHelperTransferFailed","inputs":[]}]; +const YIELD_DISTRIBUTOR_ABI = [{"type":"constructor","inputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"acceptOwnership","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"bulkCheckpointOtherUsers","inputs":[{"name":"_accounts","type":"address[]","internalType":"address[]"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"checkpoint","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"checkpointOtherUser","inputs":[{"name":"_account","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"earned","inputs":[{"name":"_account","type":"address","internalType":"address"}],"outputs":[{"name":"_earned","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"eligibleCurrentVeFXS","inputs":[{"name":"_user","type":"address","internalType":"address"}],"outputs":[{"name":"_eligibleVefxsBal","type":"uint256","internalType":"uint256"},{"name":"_storedEndingTimestamp","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"emittedToken","inputs":[],"outputs":[{"name":"","type":"address","internalType":"contract ERC20"}],"stateMutability":"view"},{"type":"function","name":"emittedTokenAddress","inputs":[],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"view"},{"type":"function","name":"fractionParticipating","inputs":[],"outputs":[{"name":"_fraction","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"getYield","inputs":[],"outputs":[{"name":"_yield0","type":"uint256","internalType":"uint256"}],"stateMutability":"nonpayable"},{"type":"function","name":"getYieldForDuration","inputs":[],"outputs":[{"name":"_yield","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"getYieldThirdParty","inputs":[{"name":"_staker","type":"address","internalType":"address"}],"outputs":[{"name":"_yield0","type":"uint256","internalType":"uint256"}],"stateMutability":"nonpayable"},{"type":"function","name":"greylist","inputs":[{"name":"","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"greylistAddress","inputs":[{"name":"_address","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"initialize","inputs":[{"name":"_owner","type":"address","internalType":"address"},{"name":"_timelockAddress","type":"address","internalType":"address"},{"name":"_emittedToken","type":"address","internalType":"address"},{"name":"_veFXSAggregator","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"lastTimeYieldApplicable","inputs":[],"outputs":[{"name":"_ts","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"lastUpdateTime","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"nominateNewOwner","inputs":[{"name":"_owner","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"nominatedOwner","inputs":[],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"view"},{"type":"function","name":"notifyRewardAmount","inputs":[{"name":"_amount","type":"uint256","internalType":"uint256"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"owner","inputs":[],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"view"},{"type":"function","name":"periodFinish","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"recoverERC20","inputs":[{"name":"_tokenAddress","type":"address","internalType":"address"},{"name":"_tokenAmount","type":"uint256","internalType":"uint256"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"rewardNotifiers","inputs":[{"name":"","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"setPauses","inputs":[{"name":"_yieldCollectionPaused","type":"bool","internalType":"bool"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"setThirdPartyClaimer","inputs":[{"name":"_staker","type":"address","internalType":"address"},{"name":"_claimer","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"setTimelock","inputs":[{"name":"_newTimelock","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"setVeFXSAggregator","inputs":[{"name":"_veFXSAggregator","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"setYieldDuration","inputs":[{"name":"_yieldDuration","type":"uint256","internalType":"uint256"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"setYieldRate","inputs":[{"name":"_newRate","type":"uint256","internalType":"uint256"},{"name":"_syncToo","type":"bool","internalType":"bool"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"sync","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"thirdPartyClaimers","inputs":[{"name":"staker","type":"address","internalType":"address"}],"outputs":[{"name":"claimer","type":"address","internalType":"address"}],"stateMutability":"view"},{"type":"function","name":"timelockAddress","inputs":[],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"view"},{"type":"function","name":"toggleRewardNotifier","inputs":[{"name":"_notifierAddr","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"totalComboVeFXSSupplyStored","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"totalVeFXSParticipating","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"userIsInitialized","inputs":[{"name":"","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"userVeFXSCheckpointed","inputs":[{"name":"","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"userVeFXSEndpointCheckpointed","inputs":[{"name":"","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"userYieldPerTokenPaid","inputs":[{"name":"","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"veFXSAggregator","inputs":[],"outputs":[{"name":"","type":"address","internalType":"contract VeFXSAggregator"}],"stateMutability":"view"},{"type":"function","name":"yieldCollectionPaused","inputs":[],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"yieldDuration","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"yieldPerVeFXS","inputs":[],"outputs":[{"name":"_yield","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"yieldPerVeFXSStored","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"yieldRate","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"yields","inputs":[{"name":"","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"event","name":"DefaultInitialization","inputs":[],"anonymous":false},{"type":"event","name":"OwnerChanged","inputs":[{"name":"oldOwner","type":"address","indexed":false,"internalType":"address"},{"name":"newOwner","type":"address","indexed":false,"internalType":"address"}],"anonymous":false},{"type":"event","name":"OwnerNominated","inputs":[{"name":"newOwner","type":"address","indexed":false,"internalType":"address"}],"anonymous":false},{"type":"event","name":"RecoveredERC20","inputs":[{"name":"token","type":"address","indexed":false,"internalType":"address"},{"name":"amount","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"RewardAdded","inputs":[{"name":"reward","type":"uint256","indexed":false,"internalType":"uint256"},{"name":"yieldRate","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"TimelockChanged","inputs":[{"name":"timelock_address","type":"address","indexed":false,"internalType":"address"}],"anonymous":false},{"type":"event","name":"YieldCollected","inputs":[{"name":"staker","type":"address","indexed":true,"internalType":"address"},{"name":"recipient","type":"address","indexed":true,"internalType":"address"},{"name":"yield","type":"uint256","indexed":false,"internalType":"uint256"},{"name":"tokenAddress","type":"address","indexed":false,"internalType":"address"}],"anonymous":false},{"type":"event","name":"YieldDurationUpdated","inputs":[{"name":"newDuration","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"error","name":"AddressGreylisted","inputs":[]},{"type":"error","name":"InitializeFailed","inputs":[]},{"type":"error","name":"InvalidOwnershipAcceptance","inputs":[]},{"type":"error","name":"NotOwnerOrTimelock","inputs":[]},{"type":"error","name":"OnlyOwner","inputs":[]},{"type":"error","name":"OwnerCannotBeZero","inputs":[]},{"type":"error","name":"SenderNotAuthorizedClaimer","inputs":[]},{"type":"error","name":"SenderNotRewarder","inputs":[]},{"type":"error","name":"TransferHelperTransferFailed","inputs":[]},{"type":"error","name":"YieldCollectionPaused","inputs":[]},{"type":"error","name":"YieldPeriodMustCompleteBeforeChangingToNewPeriod","inputs":[]}]; +const CONTRACT_ADDRESSES = constants.CONTRACT_ADDRESSES; + +// MANUALLY SET THESE +// LIST OF ALL veFXS holders: https://api.frax.finance/v2/vefxs/users +const MANUAL_ADDRESS_LIST = [ + // "0x5180db0237291A6449DdA9ed33aD90a38787621c", + "0x00ea95c08064a987f96e2632b78951e5dd0bc0e3", + "0x02654d401cea4c544418aca90a631079756904ed", + "0x10c16c7b8b1ddcfe65990ec822de4379dd8a86de", + // "0x11443ad12aef3663a8cd767e6f9508fc799c4b18", + // "0x13fe84d36d7a507bb4bdac6dcaf13a10961fc470", + // "0x14b1b3ff91525dd00e8fb8ce000097ce7d1cb251", + // "0x169787961b393d800afafc0b9927088dc84d692b", + // "0x1b7ea7d42c476a1e2808f23e18d850c5a4692df7", + // "0x281dbb9ca3f6d48e085384a821b7259abfdc7d66", + // "0x420a6c1c79a6ce31ed9dc1c4343310c97b378f83", + // "0x57447072d5fe4c5e740e6e2bfce3f41a1ce047b5", + // "0x641d99580f6cf034e1734287a9e8dae4356641ca", + // "0x66df2139c24446f5b43db80a680fb94d0c1c5d8e", + // "0x6763bc9000fb2d8b922a025c4b2be745a449cad3", + // "0x6a5dbf2fb5206ec8192620810c3edb6d5e62b188", + // "0x8593b031d147cb86824ba55dacc7625a9d446bcf", + // "0x88e863d4572d2dae27db81e98837a9dbeb0e7a12", + // "0x8df937afdf1d08c2ba565d636ca1365a42144385", + // "0x91746d6f9df58b9807a5bb0e54e4ea86600c2dba", + // "0x9c5083dd4838e120dbeac44c052179692aa5dac5", + // "0x9de160ff0063dd08bf0cd716f9e686e640b9c2d3", + // "0xa35b52835dc644444881dd51563d13ad987c148c", + // "0xa4b5778d81cc9bb79e46a51ebd57de90148ab8a4", + // "0xa81ace214b97d4b9c2072a934d0c4de486757538", + // "0xaf2c6c841bfe63df61364b8ee120773a7517f1d4", + // "0xc30a8c89b02180f8c184c1b8e8f76af2b9d8f54d", + // "0xcc4e62029e0491a61a7ac1b60ab1721f6df841e3", + // "0xccf6c29d87eb2c0bafede74f5df35f84541f4549", + // "0xd6ddac45512c216600502f46feb3a85731accac1", + // "0xdfc11349cb2b6368854318b808b47c87f32c7efb", +]; +const LOCK_LOCATIONS = { + [CONTRACT_ADDRESSES.fraxtal.misc.L1VEFXS_PROXY.toLowerCase()]: 'L1veFXS', + [CONTRACT_ADDRESSES.fraxtal.misc.FPIS_LOCKER_PROXY.toLowerCase()]: 'FPISLocker', + [CONTRACT_ADDRESSES.fraxtal.misc.VESTED_FXS_PROXY.toLowerCase()]: 'VestedFXS', +} +const SENDER_ADDRESS = process.env.L1VEFXS_PROVER_ADDRESS_ROPSTEN_10; +const PKEY = process.env.L1VEFXS_PROVER_PRIVATE_KEY; +const SLEEP_MSECS = 500; +const USE_BULK_ROUTE = true; +const BULK_BATCH_INTERVAL = 50; +const USE_MANUAL_ADDRESS_LIST = false; +const OFFSET = 0; +const VEFXS_CUTOFF_BN = BigNumber.from("10000000000000000000"); // 10e18 +const VEFXS_CUTOFF_DEC = VEFXS_CUTOFF_BN.div("1000000000000000000").toNumber(); +const BIG18 = BigNumber.from("1000000000000000000"); // 1e18 + +// Helpful: https://github.com/FraxFinance/fraxtal-proof-client +async function main() { + // Initialize the providers and wallets + const fraxtalProvider = new JsonRpcProvider(process.env.FRAXTAL_NETWORK_ENDPOINT); + const fraxtalWallet = new Wallet(PKEY, fraxtalProvider); + + // Initialize the main response + const mainResponse = []; + + // Instantiate the contracts + let vefxsAggregator = new Contract(CONTRACT_ADDRESSES.fraxtal.misc.VEFXS_AGGREGATOR_PROXY, VEFXS_AGGREGATOR_ABI, fraxtalWallet); + let yieldDistributor = new Contract(CONTRACT_ADDRESSES.fraxtal.misc.YIELD_DISTRIBUTOR_PROXY, YIELD_DISTRIBUTOR_ABI, fraxtalWallet); + + // Determine the address list + let addressesToUse = []; + let numBatches = 0; + if (USE_MANUAL_ADDRESS_LIST) { + // Use the manual list + addressesToUse = MANUAL_ADDRESS_LIST; + console.log(`Using the manual address list`); + + } else { + // Fetch from the API + const response = await fetch('https://api.frax.finance/v2/vefxs/users'); + const users = (await response.json()).users; + console.log(`Using the API for the address list`); + + // Remove expired positions and amounts under VEFXS_CUTOFF_BN + for (let i = OFFSET; i < users.length; i++) { + // Get the user object + const theUser = users[i]; + + // Get the amount and end time + const usrAmount = theUser.vefxsBalance; + const usrEndMs = Date.parse(theUser.lockEndsAt); + + // Reject if the amount is below the cutoff, or if the position is expired + if ((usrAmount < VEFXS_CUTOFF_DEC) || (usrEndMs <= Date.now())){ + continue; + } else { + addressesToUse.push(theUser.address); + } + } + + // Determine how many bulk batches to use + numBatches = Math.ceil(addressesToUse.length / BULK_BATCH_INTERVAL); + + console.log(`Found ${addressesToUse.length} unexpired veFXS users above ${VEFXS_CUTOFF_DEC} veFXS`); + console.log(`numBatches: ${numBatches}`); + console.log(addressesToUse); + } + + // PROCESS USERS + // ============================================== + + // Nonce tracking + // let availableNonceMainnet = await mainnetProvider.getTransactionCount(SENDER_ADDRESS); + let availableNonceFraxtal = await fraxtalProvider.getTransactionCount(SENDER_ADDRESS); + console.log(`availableNonceFraxtal: ${availableNonceFraxtal}`); + + // Loop through the addresses + let bulkAddressesToCheckpoint = []; + for (let i = 0; i < addressesToUse.length; i++) { + // Initialize the user + const userAddress = addressesToUse[i]; + + console.log(chalk.blue(`\n================= PROCESSING USER ${userAddress} [#${i} IN JSON] =================`)); + + // Fetch the user's active locks + const activeLocks = await vefxsAggregator.getAllCurrActiveLocks(userAddress, false, { gasLimit: '50000000' }); + console.log(`Number of active locks: ${activeLocks.length}`); + + // Fetch the user's checkpointed endpoint + const checkpointedEndTs = await yieldDistributor.userVeFXSEndpointCheckpointed(userAddress, { gasLimit: '50000000' }); + const endCheckpointBig = BigNumber.from(checkpointedEndTs); + const endCheckpointDec = checkpointedEndTs.toNumber(); + console.log(`Ending checkpoint: ${endCheckpointDec}`); + + // See if the user needs to be checkpointed + // -------------------------------- + + // Loop through the user locks. userVeFXSEndpointCheckpointed needs to match one of the locks + let needToCheckpoint = true; + console.log(`----- Locks -----`); + for (let j = 0; j < activeLocks.length; j++) { + // Get the lock + const theLock = activeLocks[j]; + + // Print info + console.log(`Lock #${j} @ ${LOCK_LOCATIONS[theLock.location.toLowerCase()]} || amount ${theLock.amount.div(BIG18).toNumber()} end: ${theLock.end.toNumber()}`); + console.log(` -- amount ${theLock.amount.div(BIG18).toNumber()}`); + console.log(` -- end: ${theLock.end.toNumber()}`); + + // See if there is a match + if (theLock.end.eq(checkpointedEndTs)) { + needToCheckpoint = false; + console.log(chalk.yellow(` -- Match found, no need to checkpoint, so far`)); + break; + } + } + + // Also see if veFXS increased + console.log(`----- veFXS -----`); + if (!needToCheckpoint) { + // See the aggregator's current total combined veFXS + const currAggregatorVeFXS = await vefxsAggregator.ttlCombinedVeFXS(userAddress, { gasLimit: '50000000' }); + + // See the checkpointed veFXS + const checkpointedVeFXS = await yieldDistributor.userVeFXSCheckpointed(userAddress, { gasLimit: '50000000' }); + + // Print info + console.log(` -- VeFXSAggregator: ${currAggregatorVeFXS.div(BIG18).toNumber()}`); + console.log(` -- YieldDistributor: ${checkpointedVeFXS.div(BIG18).toNumber()}`); + + // If the current veFXS > checkpointed veFXS, you should checkpoint + if (currAggregatorVeFXS.gt(checkpointedVeFXS)) { + needToCheckpoint = true; + console.log(chalk.hex('#FFA500')(` -- Aggregator veFXS > Checkpointed veFXS, so you should checkpoint`)); + } else { + needToCheckpoint = false; + console.log(chalk.green(` -- Checkpointed veFXS > Aggregator veFXS, so don't need to checkpoint`)); + } + } else { + console.log(chalk.hex('#FFA500')(` -- No match found, so you need to checkpoint`)); + } + + // Checkpoint if you need to + if (needToCheckpoint) { + // If you are going the bulk route, add the address for later + if (USE_BULK_ROUTE) { + // Push the address into the array + bulkAddressesToCheckpoint.push(userAddress); + console.log(`Will bulk checkpoint ${userAddress} later`); + } + else { + try { + console.log(`Trying to checkpoint with nonce ${availableNonceFraxtal}`); + + console.log(`Sending tx`); + const tx = await yieldDistributor.checkpointOtherUser( + userAddress + , { + // gasLimit: '50000000', + gasPrice: '15000', + nonce: availableNonceFraxtal + }); + + console.log(`Checkpoint for ${userAddress} submitted with nonce ${availableNonceFraxtal}`); + console.log(`TxID: ${tx.hash}`); + + // Increment the nonce + availableNonceFraxtal++; + + } catch (err) { + console.log(`yieldDistributor.checkpointOtherUser failed for ${userAddress}: ${err}`); + } + } + } + + // Bulk checkpoint, if applicable + // Every BULK_BATCH_INTERVAL, or if you reached the end + if ((i > 0) && (bulkAddressesToCheckpoint.length > 0) && (((i % BULK_BATCH_INTERVAL) == 0) || (i == addressesToUse.length - 1))) { + try { + console.log(`=================== BULK CHECKPOINT ===================`); + console.log(`Trying to bulk checkpoint with nonce ${availableNonceFraxtal}`); + console.log(bulkAddressesToCheckpoint); + console.log(`Sending tx`); + const tx = await yieldDistributor.bulkCheckpointOtherUsers( + bulkAddressesToCheckpoint + , { + // gasLimit: '50000000', + gasPrice: '15000', + nonce: availableNonceFraxtal + }); + + console.log(`Checkpoint for bulk users submitted with nonce ${availableNonceFraxtal}`); + console.log(`TxID: ${tx.hash}`); + + // Increment the nonce + availableNonceFraxtal++; + } catch (err) { + console.log(`yieldDistributor.bulkCheckpointOtherUsers failed: ${err}`); + } + + // Clear the batch array + bulkAddressesToCheckpoint = []; + + // Increment the nonce + availableNonceFraxtal++; + + + } + + + // Sleep + console.log(`Sleeping ${SLEEP_MSECS} milliseconds`); + await sleep(SLEEP_MSECS); + } + + + + + + // console.log("================== MAIN RESPONSE =================="); + // console.log(mainResponse); + + // Write to file + // const stringedJson = JSON.stringify(mainResponse, null, 4); + // fs.writeFileSync("proofs.json", stringedJson, function(err) { + // if (err) throw err; + // console.log('complete'); + // } + // ); + + +} + +const increaseGasLimit = (estimatedGasLimit) => { + return estimatedGasLimit.mul(115).div(100) // increase by 15% + } + +function convertHeaderFields(headerFields) { + for (var i = 0; i < headerFields.length; i++) { + var field = headerFields[i]; + if (field == "0x0") field = "0x"; + if (field.length % 2 == 1) field = "0x0" + field.substring(2); + headerFields[i] = field; + } +} + +const getBlockHeaderInfo = async (blockHexed, provider) => { + const blkHeaderResponse = await provider.send('eth_getBlockByNumber', [ + blockHexed, + true + ]); + + // const blockHdrJson = JSON.stringify(blkHeaderResponse, null, 4); + // fs.writeFileSync("blockHdr.json", blockHdrJson, function(err) { + // if (err) throw err; + // console.log('complete'); + // } + // ); + + let headerFields = []; + let block = blkHeaderResponse; + + headerFields.push(block.parentHash); + headerFields.push(block.sha3Uncles); + headerFields.push(block.miner); + headerFields.push(block.stateRoot); + headerFields.push(block.transactionsRoot); + headerFields.push(block.receiptsRoot); + headerFields.push(block.logsBloom); + headerFields.push(block.difficulty); + headerFields.push(block.number); + headerFields.push(block.gasLimit); + headerFields.push(block.gasUsed); + headerFields.push(block.timestamp); + headerFields.push(block.extraData); + headerFields.push(block.mixHash); + headerFields.push(block.nonce); + headerFields.push(block.baseFeePerGas); + if (block.withdrawalsRoot) { + headerFields.push(block.withdrawalsRoot); + } + if (block.blobGasUsed) { + headerFields.push(block.blobGasUsed); + } + if (block.excessBlobGas) { + headerFields.push(block.excessBlobGas); + } + if (block.parentBeaconBlockRoot) { + headerFields.push(block.parentBeaconBlockRoot); + } + + // console.log("========================= headerFields (raw) ========================="); + + // console.log(headerFields); + + // console.log("========================= headerFields (converted) ========================="); + + convertHeaderFields(headerFields); + // console.log(headerFields); + + // console.log("========================= rlpData ========================="); + + const rlpData = encode(headerFields); + // console.log(rlpData); + + return rlpData; +}; + + +// We recommend this pattern to be able to use async/await everywhere +// and properly handle errors. +main() + .then(() => process.exit(0)) + .catch(error => { + console.error(error); + process.exit(1); + }); + + diff --git a/src/hardhat/public-scripts/l1veFXS_proof_collector.js b/src/hardhat/public-scripts/l1veFXS_proof_collector.js new file mode 100644 index 00000000..defb19f6 --- /dev/null +++ b/src/hardhat/public-scripts/l1veFXS_proof_collector.js @@ -0,0 +1,438 @@ +const Web3 = require('web3'); +const path = require('path'); +const fs = require('fs'); +const envPath = path.join(__dirname, '../../../.env'); +const { Chain, Common, Hardfork } = require('@ethereumjs/common'); +const { LegacyTransaction, FeeMarketEIP1559Transaction } = require('@ethereumjs/tx'); +const { hexToBytes, bytesToHex } = require('@ethereumjs/util'); +require('dotenv').config({ path: envPath }); +const constants = require(path.join(__dirname, '../../../dist/types/constants')); +const toHex = require('to-hex'); +const chalk = require('chalk'); +const { sleep } = require('../../../dist/misc/utilities'); + +const { Provider } = require('@ethersproject/abstract-provider'); +const { Signer } = require('@ethersproject/abstract-signer'); +const { BigNumber } = require('@ethersproject/bignumber'); +const { hexZeroPad, hexStripZeros } = require('@ethersproject/bytes'); +const { Contract } = require('@ethersproject/contracts'); +const { JsonRpcProvider } = require('@ethersproject/providers'); +const { encode } = require('@ethersproject/rlp'); +const { keccak256 } = require('@ethersproject/solidity'); +const { Wallet } = require('@ethersproject/wallet'); + +const VEFXS_ABI = [{"name":"CommitOwnership","inputs":[{"type":"address","name":"admin","indexed":false}],"anonymous":false,"type":"event"},{"name":"ApplyOwnership","inputs":[{"type":"address","name":"admin","indexed":false}],"anonymous":false,"type":"event"},{"name":"Deposit","inputs":[{"type":"address","name":"provider","indexed":true},{"type":"uint256","name":"value","indexed":false},{"type":"uint256","name":"locktime","indexed":true},{"type":"int128","name":"type","indexed":false},{"type":"uint256","name":"ts","indexed":false}],"anonymous":false,"type":"event"},{"name":"Withdraw","inputs":[{"type":"address","name":"provider","indexed":true},{"type":"uint256","name":"value","indexed":false},{"type":"uint256","name":"ts","indexed":false}],"anonymous":false,"type":"event"},{"name":"Supply","inputs":[{"type":"uint256","name":"prevSupply","indexed":false},{"type":"uint256","name":"supply","indexed":false}],"anonymous":false,"type":"event"},{"outputs":[],"inputs":[{"type":"address","name":"token_addr"},{"type":"string","name":"_name"},{"type":"string","name":"_symbol"},{"type":"string","name":"_version"}],"stateMutability":"nonpayable","type":"constructor"},{"name":"commit_transfer_ownership","outputs":[],"inputs":[{"type":"address","name":"addr"}],"stateMutability":"nonpayable","type":"function","gas":37568},{"name":"apply_transfer_ownership","outputs":[],"inputs":[],"stateMutability":"nonpayable","type":"function","gas":38407},{"name":"commit_smart_wallet_checker","outputs":[],"inputs":[{"type":"address","name":"addr"}],"stateMutability":"nonpayable","type":"function","gas":36278},{"name":"apply_smart_wallet_checker","outputs":[],"inputs":[],"stateMutability":"nonpayable","type":"function","gas":37005},{"name":"toggleEmergencyUnlock","outputs":[],"inputs":[],"stateMutability":"nonpayable","type":"function","gas":37038},{"name":"recoverERC20","outputs":[],"inputs":[{"type":"address","name":"token_addr"},{"type":"uint256","name":"amount"}],"stateMutability":"nonpayable","type":"function","gas":4045},{"name":"get_last_user_slope","outputs":[{"type":"int128","name":""}],"inputs":[{"type":"address","name":"addr"}],"stateMutability":"view","type":"function","gas":2600},{"name":"user_point_history__ts","outputs":[{"type":"uint256","name":""}],"inputs":[{"type":"address","name":"_addr"},{"type":"uint256","name":"_idx"}],"stateMutability":"view","type":"function","gas":1703},{"name":"locked__end","outputs":[{"type":"uint256","name":""}],"inputs":[{"type":"address","name":"_addr"}],"stateMutability":"view","type":"function","gas":1624},{"name":"checkpoint","outputs":[],"inputs":[],"stateMutability":"nonpayable","type":"function","gas":46119699},{"name":"deposit_for","outputs":[],"inputs":[{"type":"address","name":"_addr"},{"type":"uint256","name":"_value"}],"stateMutability":"nonpayable","type":"function","gas":92414024},{"name":"create_lock","outputs":[],"inputs":[{"type":"uint256","name":"_value"},{"type":"uint256","name":"_unlock_time"}],"stateMutability":"nonpayable","type":"function","gas":92415425},{"name":"increase_amount","outputs":[],"inputs":[{"type":"uint256","name":"_value"}],"stateMutability":"nonpayable","type":"function","gas":92414846},{"name":"increase_unlock_time","outputs":[],"inputs":[{"type":"uint256","name":"_unlock_time"}],"stateMutability":"nonpayable","type":"function","gas":92415493},{"name":"withdraw","outputs":[],"inputs":[],"stateMutability":"nonpayable","type":"function","gas":46291332},{"name":"balanceOf","outputs":[{"type":"uint256","name":""}],"inputs":[{"type":"address","name":"addr"}],"stateMutability":"view","type":"function"},{"name":"balanceOf","outputs":[{"type":"uint256","name":""}],"inputs":[{"type":"address","name":"addr"},{"type":"uint256","name":"_t"}],"stateMutability":"view","type":"function"},{"name":"balanceOfAt","outputs":[{"type":"uint256","name":""}],"inputs":[{"type":"address","name":"addr"},{"type":"uint256","name":"_block"}],"stateMutability":"view","type":"function","gas":512868},{"name":"totalSupply","outputs":[{"type":"uint256","name":""}],"inputs":[],"stateMutability":"view","type":"function"},{"name":"totalSupply","outputs":[{"type":"uint256","name":""}],"inputs":[{"type":"uint256","name":"t"}],"stateMutability":"view","type":"function"},{"name":"totalSupplyAt","outputs":[{"type":"uint256","name":""}],"inputs":[{"type":"uint256","name":"_block"}],"stateMutability":"view","type":"function","gas":882020},{"name":"totalFXSSupply","outputs":[{"type":"uint256","name":""}],"inputs":[],"stateMutability":"view","type":"function","gas":2116},{"name":"totalFXSSupplyAt","outputs":[{"type":"uint256","name":""}],"inputs":[{"type":"uint256","name":"_block"}],"stateMutability":"view","type":"function","gas":252170},{"name":"changeController","outputs":[],"inputs":[{"type":"address","name":"_newController"}],"stateMutability":"nonpayable","type":"function","gas":36998},{"name":"token","outputs":[{"type":"address","name":""}],"inputs":[],"stateMutability":"view","type":"function","gas":1871},{"name":"supply","outputs":[{"type":"uint256","name":""}],"inputs":[],"stateMutability":"view","type":"function","gas":1901},{"name":"locked","outputs":[{"type":"int128","name":"amount"},{"type":"uint256","name":"end"}],"inputs":[{"type":"address","name":"arg0"}],"stateMutability":"view","type":"function","gas":3380},{"name":"epoch","outputs":[{"type":"uint256","name":""}],"inputs":[],"stateMutability":"view","type":"function","gas":1961},{"name":"point_history","outputs":[{"type":"int128","name":"bias"},{"type":"int128","name":"slope"},{"type":"uint256","name":"ts"},{"type":"uint256","name":"blk"},{"type":"uint256","name":"fxs_amt"}],"inputs":[{"type":"uint256","name":"arg0"}],"stateMutability":"view","type":"function","gas":6280},{"name":"user_point_history","outputs":[{"type":"int128","name":"bias"},{"type":"int128","name":"slope"},{"type":"uint256","name":"ts"},{"type":"uint256","name":"blk"},{"type":"uint256","name":"fxs_amt"}],"inputs":[{"type":"address","name":"arg0"},{"type":"uint256","name":"arg1"}],"stateMutability":"view","type":"function","gas":6525},{"name":"user_point_epoch","outputs":[{"type":"uint256","name":""}],"inputs":[{"type":"address","name":"arg0"}],"stateMutability":"view","type":"function","gas":2266},{"name":"slope_changes","outputs":[{"type":"int128","name":""}],"inputs":[{"type":"uint256","name":"arg0"}],"stateMutability":"view","type":"function","gas":2196},{"name":"controller","outputs":[{"type":"address","name":""}],"inputs":[],"stateMutability":"view","type":"function","gas":2111},{"name":"transfersEnabled","outputs":[{"type":"bool","name":""}],"inputs":[],"stateMutability":"view","type":"function","gas":2141},{"name":"emergencyUnlockActive","outputs":[{"type":"bool","name":""}],"inputs":[],"stateMutability":"view","type":"function","gas":2171},{"name":"name","outputs":[{"type":"string","name":""}],"inputs":[],"stateMutability":"view","type":"function","gas":8603},{"name":"symbol","outputs":[{"type":"string","name":""}],"inputs":[],"stateMutability":"view","type":"function","gas":7656},{"name":"version","outputs":[{"type":"string","name":""}],"inputs":[],"stateMutability":"view","type":"function","gas":7686},{"name":"decimals","outputs":[{"type":"uint256","name":""}],"inputs":[],"stateMutability":"view","type":"function","gas":2291},{"name":"future_smart_wallet_checker","outputs":[{"type":"address","name":""}],"inputs":[],"stateMutability":"view","type":"function","gas":2321},{"name":"smart_wallet_checker","outputs":[{"type":"address","name":""}],"inputs":[],"stateMutability":"view","type":"function","gas":2351},{"name":"admin","outputs":[{"type":"address","name":""}],"inputs":[],"stateMutability":"view","type":"function","gas":2381},{"name":"future_admin","outputs":[{"type":"address","name":""}],"inputs":[],"stateMutability":"view","type":"function","gas":2411}]; +const L1VEFXS_ABI = [{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"InvalidInitialization","type":"error"},{"inputs":[],"name":"NotInitializing","type":"error"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"OwnableInvalidOwner","type":"error"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"OwnableUnauthorizedAccount","type":"error"},{"inputs":[],"name":"UnequalLengths","type":"error"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint64","name":"version","type":"uint64"}],"name":"Initialized","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferStarted","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"addr","type":"address"},{"indexed":false,"internalType":"uint128","name":"amount","type":"uint128"},{"indexed":false,"internalType":"uint64","name":"end","type":"uint64"},{"indexed":false,"internalType":"uint64","name":"blockTimestamp","type":"uint64"}],"name":"veFXSUpdated","type":"event"},{"inputs":[],"name":"LOCKED_SLOT_INDEX","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"acceptOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"_addresses","type":"address[]"},{"components":[{"internalType":"uint128","name":"amount","type":"uint128"},{"internalType":"uint64","name":"end","type":"uint64"},{"internalType":"uint64","name":"blockTimestamp","type":"uint64"}],"internalType":"struct L1VeFXS.LockedBalance[]","name":"_lockedBalances","type":"tuple[]"}],"name":"adminProofVeFXS","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"_balance","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_stateRootOracle","type":"address"},{"internalType":"address","name":"_owner","type":"address"}],"name":"initialize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"locked","outputs":[{"components":[{"internalType":"uint128","name":"amount","type":"uint128"},{"internalType":"uint64","name":"end","type":"uint64"},{"internalType":"uint64","name":"blockTimestamp","type":"uint64"}],"internalType":"struct L1VeFXS.LockedBalance","name":"","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pendingOwner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"},{"internalType":"uint256","name":"_blockNumber","type":"uint256"},{"internalType":"bytes[]","name":"_accountProof","type":"bytes[]"},{"internalType":"bytes[]","name":"_storageProof1","type":"bytes[]"},{"internalType":"bytes[]","name":"_storageProof2","type":"bytes[]"}],"name":"proofVeFXS","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"veFXSAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"}]; +const FRAXCHAIN_L1_BLOCK_ABI = [{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bytes32","name":"blockHash","type":"bytes32"}],"name":"BlockHashReceived","type":"event"},{"inputs":[],"name":"DEPOSITOR_ACCOUNT","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"baseFeeScalar","outputs":[{"internalType":"uint32","name":"","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"basefee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"batcherHash","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"blobBaseFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"blobBaseFeeScalar","outputs":[{"internalType":"uint32","name":"","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"_blockHash","type":"bytes32"}],"name":"blockHashStored","outputs":[{"internalType":"bool","name":"_result","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"hash","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"l1FeeOverhead","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"l1FeeScalar","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"number","outputs":[{"internalType":"uint64","name":"","type":"uint64"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sequenceNumber","outputs":[{"internalType":"uint64","name":"","type":"uint64"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint64","name":"_number","type":"uint64"},{"internalType":"uint64","name":"_timestamp","type":"uint64"},{"internalType":"uint256","name":"_basefee","type":"uint256"},{"internalType":"bytes32","name":"_hash","type":"bytes32"},{"internalType":"uint64","name":"_sequenceNumber","type":"uint64"},{"internalType":"bytes32","name":"_batcherHash","type":"bytes32"},{"internalType":"uint256","name":"_l1FeeOverhead","type":"uint256"},{"internalType":"uint256","name":"_l1FeeScalar","type":"uint256"}],"name":"setL1BlockValues","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"setL1BlockValuesEcotone","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"name":"storedBlockHashes","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"timestamp","outputs":[{"internalType":"uint64","name":"","type":"uint64"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"version","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"}]; +const STATE_ROOT_ORACLE_ABI = [{"inputs":[{"internalType":"contract IBlockHashProvider[]","name":"_providers","type":"address[]"},{"internalType":"uint256","name":"_minimumRequiredProviders","type":"uint256"},{"internalType":"address","name":"_timelockAddress","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"MinimumRequiredProvidersTooLow","type":"error"},{"inputs":[],"name":"NotEnoughProviders","type":"error"},{"inputs":[],"name":"OnlyPendingTimelock","type":"error"},{"inputs":[],"name":"OnlyTimelock","type":"error"},{"inputs":[],"name":"ProviderAlreadyAdded","type":"error"},{"inputs":[],"name":"ProviderNotFound","type":"error"},{"inputs":[],"name":"SameMinimumRequiredProviders","type":"error"},{"inputs":[{"internalType":"uint256","name":"blockNumber","type":"uint256"}],"name":"StateRootAlreadyProvenForBlockNumber","type":"error"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint40","name":"blockNumber","type":"uint40"},{"indexed":false,"internalType":"uint40","name":"timestamp","type":"uint40"},{"indexed":false,"internalType":"bytes32","name":"stateRootHash","type":"bytes32"}],"name":"BlockVerified","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"provider","type":"address"}],"name":"ProviderAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"provider","type":"address"}],"name":"ProviderRemoved","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"oldMinimumRequiredProviders","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"newMinimumRequiredProviders","type":"uint256"}],"name":"SetMinimumRequiredProviders","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousTimelock","type":"address"},{"indexed":true,"internalType":"address","name":"newTimelock","type":"address"}],"name":"TimelockTransferStarted","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousTimelock","type":"address"},{"indexed":true,"internalType":"address","name":"newTimelock","type":"address"}],"name":"TimelockTransferred","type":"event"},{"inputs":[],"name":"acceptTransferTimelock","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IBlockHashProvider","name":"_provider","type":"address"}],"name":"addProvider","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"blockHashProviders","outputs":[{"internalType":"contract IBlockHashProvider","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"blockNumber","type":"uint256"}],"name":"blockNumberToBlockInfo","outputs":[{"internalType":"bytes32","name":"stateRootHash","type":"bytes32"},{"internalType":"uint40","name":"timestamp","type":"uint40"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getBlockHashProvidersCount","outputs":[{"internalType":"uint256","name":"_providersCount","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_blockNumber","type":"uint256"}],"name":"getBlockInfo","outputs":[{"components":[{"internalType":"bytes32","name":"stateRootHash","type":"bytes32"},{"internalType":"uint40","name":"timestamp","type":"uint40"}],"internalType":"struct IStateRootOracle.BlockInfo","name":"_blockInfo","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"minimumRequiredProviders","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pendingTimelockAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes","name":"_blockHeader","type":"bytes"}],"name":"proveStateRoot","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IBlockHashProvider","name":"_provider","type":"address"}],"name":"removeProvider","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceTimelock","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_minimumRequiredProviders","type":"uint256"}],"name":"setMinimumRequiredProviders","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"timelockAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_newTimelock","type":"address"}],"name":"transferTimelock","outputs":[],"stateMutability":"nonpayable","type":"function"}]; + +const CONTRACT_ADDRESSES = constants.CONTRACT_ADDRESSES; + +// MANUALLY SET THESE +// LIST OF ALL veFXS holders: https://api.frax.finance/v2/vefxs/users +const MANUAL_ADDRESS_LIST = [ + "0x5180db0237291A6449DdA9ed33aD90a38787621c", + // "0x00ea95c08064a987f96e2632b78951e5dd0bc0e3", + // "0x02654d401cea4c544418aca90a631079756904ed", + // "0x10c16c7b8b1ddcfe65990ec822de4379dd8a86de", + // "0x11443ad12aef3663a8cd767e6f9508fc799c4b18", + // "0x13fe84d36d7a507bb4bdac6dcaf13a10961fc470", + // "0x14b1b3ff91525dd00e8fb8ce000097ce7d1cb251", + // "0x169787961b393d800afafc0b9927088dc84d692b", + // "0x1b7ea7d42c476a1e2808f23e18d850c5a4692df7", + // "0x281dbb9ca3f6d48e085384a821b7259abfdc7d66", + // "0x420a6c1c79a6ce31ed9dc1c4343310c97b378f83", + // "0x57447072d5fe4c5e740e6e2bfce3f41a1ce047b5", + // "0x641d99580f6cf034e1734287a9e8dae4356641ca", + // "0x66df2139c24446f5b43db80a680fb94d0c1c5d8e", + // "0x6763bc9000fb2d8b922a025c4b2be745a449cad3", + // "0x6a5dbf2fb5206ec8192620810c3edb6d5e62b188", + // "0x8593b031d147cb86824ba55dacc7625a9d446bcf", + // "0x88e863d4572d2dae27db81e98837a9dbeb0e7a12", + // "0x8df937afdf1d08c2ba565d636ca1365a42144385", + // "0x91746d6f9df58b9807a5bb0e54e4ea86600c2dba", + // "0x9c5083dd4838e120dbeac44c052179692aa5dac5", + // "0x9de160ff0063dd08bf0cd716f9e686e640b9c2d3", + // "0xa35b52835dc644444881dd51563d13ad987c148c", + // "0xa4b5778d81cc9bb79e46a51ebd57de90148ab8a4", + // "0xa81ace214b97d4b9c2072a934d0c4de486757538", + // "0xaf2c6c841bfe63df61364b8ee120773a7517f1d4", + // "0xc30a8c89b02180f8c184c1b8e8f76af2b9d8f54d", + // "0xcc4e62029e0491a61a7ac1b60ab1721f6df841e3", + // "0xccf6c29d87eb2c0bafede74f5df35f84541f4549", + // "0xd6ddac45512c216600502f46feb3a85731accac1", + // "0xdfc11349cb2b6368854318b808b47c87f32c7efb", +]; +const SENDER_ADDRESS = process.env.L1VEFXS_PROVER_ADDRESS_ROPSTEN_10; +const PKEY = process.env.L1VEFXS_PROVER_PRIVATE_KEY; +const CHAIN_ID = Chain.Mainnet; +const PROOF_DELAY_MSECS = 50; +const SLEEP_MSECS = 50; +// const FIXED_BLOCK = 19949000; +let FIXED_BLOCK = 20107700; +const USE_MANUAL_ADDRESS_LIST = false; +const OFFSET = 900; +const USE_MOST_RECENT_KNOWN_BLOCK = false; +const VEFXS_CUTOFF_BN = BigNumber.from("10000000000000000000"); // 10e18 +const VEFXS_CUTOFF_DEC = VEFXS_CUTOFF_BN.div("1000000000000000000").toNumber(); + +// Helpful: https://github.com/FraxFinance/fraxtal-proof-client +async function main() { + // Initialize the providers and wallets + const mainnetProvider = new JsonRpcProvider(process.env.ETHEREUM_NETWORK_ENDPOINT); + const fraxtalProvider = new JsonRpcProvider(process.env.FRAXTAL_NETWORK_ENDPOINT); + const mainnetWallet = new Wallet(PKEY, mainnetProvider); + const fraxtalWallet = new Wallet(PKEY, fraxtalProvider); + + // Initialize the main response + const mainResponse = []; + + // Instantiate the contracts + let vefxsMainnet = new Contract(CONTRACT_ADDRESSES.ethereum.main.veFXS, VEFXS_ABI, mainnetWallet); + let l1vefxsFraxtal = new Contract(CONTRACT_ADDRESSES.fraxtal.oracles.L1veFXS, L1VEFXS_ABI, fraxtalWallet); + let fraxchainL1Block = new Contract(CONTRACT_ADDRESSES.fraxtal.oracles.fraxchain_l1_block, FRAXCHAIN_L1_BLOCK_ABI, fraxtalWallet); + let stateRootFraxtal = new Contract(CONTRACT_ADDRESSES.fraxtal.oracles.state_root, STATE_ROOT_ORACLE_ABI, fraxtalWallet); + + // Determine the address list + let addressesToUse = []; + if (USE_MANUAL_ADDRESS_LIST) { + // Use the manual list + addressesToUse = MANUAL_ADDRESS_LIST; + console.log(`Using the manual address list`); + + } else { + // Fetch from the API + const response = await fetch('https://api.frax.finance/v2/vefxs/users'); + const users = (await response.json()).users; + console.log(`Using the API for the address list`); + + // Remove expired positions and amounts under VEFXS_CUTOFF_BN + for (let i = OFFSET; i < users.length; i++) { + // Get the user object + const theUser = users[i]; + + // Get the amount and end time + const usrAmount = theUser.vefxsBalance; + const usrEndMs = Date.parse(theUser.lockEndsAt); + + // Reject if the amount is below the cutoff, or if the position is expired + if ((usrAmount < VEFXS_CUTOFF_DEC) || (usrEndMs <= Date.now())){ + continue; + } else { + addressesToUse.push(theUser.address); + } + } + + console.log(`Found ${addressesToUse.length} unexpired veFXS users above ${VEFXS_CUTOFF_DEC} veFXS`); + console.log(addressesToUse); + } + + // Determine which block number to use + let blockToUse; + if (USE_MOST_RECENT_KNOWN_BLOCK) { + // Fetch the most recent known block from fraxchainL1Block + blockToUse = await fraxchainL1Block.number(); + blockToUse = blockToUse.toNumber(); + console.log(`Using most recent known block: ${blockToUse}`); + } + else { + // Use the fixed block + blockToUse = FIXED_BLOCK; + console.log(`Using fixed block: ${blockToUse}`); + } + + // Convert the block to hex + const blockHexed = '0x' + blockToUse.toString(16).replace(/^0+/, ''); + + // STATE ROOT + // ============================================== + console.log(`================= CHECK STATE ROOT =================`); + + // See if the state root oracle already has the block header. If it doesn't, you need to prove it. + const fetchedHeaderInfo = await stateRootFraxtal.getBlockInfo(blockToUse); + if (fetchedHeaderInfo.timestamp == 0) { + // Prove the block header + console.log(`Need to prove state root for block ${blockToUse}.`) + + // Generate the RLP data for the header + const blkHeaderInfoRLP = await getBlockHeaderInfo(blockHexed, mainnetProvider); + + // Estimate gas + const estimatedGas = await stateRootFraxtal.estimateGas.proveStateRoot(blkHeaderInfoRLP); + console.log(`proveStateRoot estimatedGas: ${estimatedGas}`); + + // Submit the proof + const psrResponse = await stateRootFraxtal.proveStateRoot( + blkHeaderInfoRLP + ,{ + gasLimit: increaseGasLimit(estimatedGas), + gasPrice: 15000 + }); + + // console.log(psrResponse); + } else { + console.log(`State root already proven for block ${blockToUse}. Skipping...`) + } + + // PROCESS USERS + // ============================================== + + // Nonce tracking + // let availableNonceMainnet = await mainnetProvider.getTransactionCount(SENDER_ADDRESS); + let availableNonceFraxtal = await fraxtalProvider.getTransactionCount(SENDER_ADDRESS); + console.log(`availableNonceFraxtal: ${availableNonceFraxtal}`); + + + for (let i = 0; i < addressesToUse.length; i++) { + // Initialize the user + const userAddress = addressesToUse[i]; + + console.log(`\n================= PROCESSING USER ${userAddress} [#${i} IN JSON] =================`); + + // Fetch the mainnet locked user data + const mainnetLocked = await vefxsMainnet.locked(userAddress, { gasLimit: '50000000' }); + const amountBigMainnet = BigNumber.from(mainnetLocked.amount); + const endBigMainnet = BigNumber.from(mainnetLocked.end); + // console.log(`amountBigMainnet: ${amountBigMainnet}`); + // console.log(`endBigMainnet: ${endBigMainnet}`); + + // Skip users with small veFXS amounts + if (amountBigMainnet.lt(VEFXS_CUTOFF_BN)) { + console.log(`User balance (${amountBigMainnet.toString()}) below script cutoff. Skipping...`); + continue; + } + + // See if the user already has already been proven with this lock + try { + // Fetch l1veFXS locked + const l1vefxsLocked = await l1vefxsFraxtal.locked(userAddress, { gasLimit: '50000000' }); + + // Clean up the data from the response + const amountBigFraxtal = BigNumber.from(l1vefxsLocked.amount); + const endBigFraxtal = BigNumber.from(l1vefxsLocked.end); + const blockTsBigFraxtal = BigNumber.from(l1vefxsLocked.blockTimestamp); + // console.log(`amountBigFraxtal: ${amountBigFraxtal}`); + // console.log(`endBigFraxtal: ${endBigFraxtal}`); + // console.log(`blockTsBigFraxtal: ${blockTsBigFraxtal}`); + + // Check the response + if ((amountBigMainnet.eq(amountBigFraxtal)) && (endBigMainnet.eq(endBigFraxtal))) { + console.log(`User has already proven this data (amount and end did not change). Skipping...`); + continue; + } else { + console.log(`Need to re-prove the lock`); + } + + } catch (err) { + // User has not been proven yet for anything + console.log(`Existing l1vefxsFraxtal.locked() failed for ${userAddress}: ${err}`); + } + + // Initialize the user response + const usrResponse = { + address: userAddress, + blockNumber: blockToUse, + provenAmount: null, + provenEndTs: null, + accountProof: [], + storageProof1: [], // Amount + storageProof2: [], // Ending timestamp + }; + + // FETCH PROOFS ON MAINNET + // ============================================== + + // Wait briefly + console.log(`Sleeping ${PROOF_DELAY_MSECS} milliseconds`); + await sleep(PROOF_DELAY_MSECS); + + try { + // Pad some variables + const paddedAddress = hexZeroPad(userAddress, 32); + const paddedSlotLBAmt = hexZeroPad('0x2', 32); // LockedBalance.amount + + // Pack and hash + const dblKeckedLBAmt = keccak256(['uint256'], [keccak256(['uint256', 'address'], [paddedSlotLBAmt, paddedAddress])]); + + // Get the "amount" proof + const amtProofResponse = await mainnetProvider.send('eth_getProof', [ + '0xc8418aF6358FFddA74e09Ca9CC3Fe03Ca6aDC5b0', + [dblKeckedLBAmt], + blockHexed, + ]); + usrResponse.accountProof = amtProofResponse.accountProof; + usrResponse.storageProof1 = amtProofResponse.storageProof[0].proof; + usrResponse.provenAmount = parseInt(amtProofResponse.storageProof[0].value); + + // Check that the proven and fetched amounts match + assert(hexStripZeros(BigNumber.from(mainnetLocked.amount).toHexString()) == hexStripZeros(amtProofResponse.storageProof[0].value), "Fetched and proven [amount] mismatch"); + + // Wait briefly + console.log(`Sleeping ${PROOF_DELAY_MSECS} milliseconds`); + await sleep(PROOF_DELAY_MSECS); + + // Get the "end" proof + const endSlot = BigNumber.from(dblKeckedLBAmt).add(1).toHexString(); + // console.log(`endSlot: ${endSlot}`); + // console.log(`endSlot (parsed): ${parseInt(endSlot, 16)}`); + const endProofResponse = await mainnetProvider.send('eth_getProof', [ + '0xc8418aF6358FFddA74e09Ca9CC3Fe03Ca6aDC5b0', + [endSlot], + blockHexed, + ]); + usrResponse.storageProof2 = endProofResponse.storageProof[0].proof; + usrResponse.provenEndTs = parseInt(endProofResponse.storageProof[0].value); + + // const stringedJson2 = JSON.stringify(endProofResponse, null, 4); + // fs.writeFileSync("endProofResponse.json", stringedJson2, function(err) { + // if (err) throw err; + // console.log('complete'); + // } + // ); + + // Check that the proven and fetched ending timestamps match + assert(hexStripZeros(BigNumber.from(mainnetLocked.end).toHexString()) == hexStripZeros(endProofResponse.storageProof[0].value), "Fetched and proven [ending timestamp] mismatch"); + } + catch (err) { + console.log(`Failed for ${userAddress}: ${err}`); + } + + // Push the result into the final response + mainResponse.push(usrResponse); + + // PROVING ON FRAXTAL + // ============================================== + + // Submit the proof + try { + console.log(`Trying to prove with nonce ${availableNonceFraxtal}`); + + console.log(`Sending tx`); + await l1vefxsFraxtal.proofVeFXS( + userAddress, + blockToUse, + usrResponse.accountProof, + usrResponse.storageProof1, + usrResponse.storageProof2 + , { + // gasLimit: '50000000', + gasPrice: '15000', + nonce: availableNonceFraxtal + }); + + console.log(`Proof for ${userAddress} submitted with nonce ${availableNonceFraxtal}. veFXS: ${usrResponse.provenAmount}, end: ${usrResponse.provenEndTs}`); + + // Increment the nonce + availableNonceFraxtal++; + } catch (err) { + console.log(`l1vefxsFraxtal.proofVeFXS failed for ${userAddress}: ${err}`); + } + + + + + + } + + + // console.log("================== MAIN RESPONSE =================="); + // console.log(mainResponse); + + // Write to file + // const stringedJson = JSON.stringify(mainResponse, null, 4); + // fs.writeFileSync("proofs.json", stringedJson, function(err) { + // if (err) throw err; + // console.log('complete'); + // } + // ); + + console.log(`Sleeping ${SLEEP_MSECS} milliseconds`); + await sleep(SLEEP_MSECS); +} + +const increaseGasLimit = (estimatedGasLimit) => { + return estimatedGasLimit.mul(115).div(100) // increase by 15% + } + +function convertHeaderFields(headerFields) { + for (var i = 0; i < headerFields.length; i++) { + var field = headerFields[i]; + if (field == "0x0") field = "0x"; + if (field.length % 2 == 1) field = "0x0" + field.substring(2); + headerFields[i] = field; + } +} + +const getBlockHeaderInfo = async (blockHexed, provider) => { + const blkHeaderResponse = await provider.send('eth_getBlockByNumber', [ + blockHexed, + true + ]); + + // const blockHdrJson = JSON.stringify(blkHeaderResponse, null, 4); + // fs.writeFileSync("blockHdr.json", blockHdrJson, function(err) { + // if (err) throw err; + // console.log('complete'); + // } + // ); + + let headerFields = []; + let block = blkHeaderResponse; + + headerFields.push(block.parentHash); + headerFields.push(block.sha3Uncles); + headerFields.push(block.miner); + headerFields.push(block.stateRoot); + headerFields.push(block.transactionsRoot); + headerFields.push(block.receiptsRoot); + headerFields.push(block.logsBloom); + headerFields.push(block.difficulty); + headerFields.push(block.number); + headerFields.push(block.gasLimit); + headerFields.push(block.gasUsed); + headerFields.push(block.timestamp); + headerFields.push(block.extraData); + headerFields.push(block.mixHash); + headerFields.push(block.nonce); + headerFields.push(block.baseFeePerGas); + if (block.withdrawalsRoot) { + headerFields.push(block.withdrawalsRoot); + } + if (block.blobGasUsed) { + headerFields.push(block.blobGasUsed); + } + if (block.excessBlobGas) { + headerFields.push(block.excessBlobGas); + } + if (block.parentBeaconBlockRoot) { + headerFields.push(block.parentBeaconBlockRoot); + } + + // console.log("========================= headerFields (raw) ========================="); + + // console.log(headerFields); + + // console.log("========================= headerFields (converted) ========================="); + + convertHeaderFields(headerFields); + // console.log(headerFields); + + // console.log("========================= rlpData ========================="); + + const rlpData = encode(headerFields); + // console.log(rlpData); + + return rlpData; +}; + + +// We recommend this pattern to be able to use async/await everywhere +// and properly handle errors. +main() + .then(() => process.exit(0)) + .catch(error => { + console.error(error); + process.exit(1); + }); + + diff --git a/src/misc/utilities.ts b/src/misc/utilities.ts index 90e16f61..882c2cb0 100644 --- a/src/misc/utilities.ts +++ b/src/misc/utilities.ts @@ -1,6 +1,7 @@ import { CONTRACT_ADDRESSES, INVESTOR_ALLOCATIONS, INVESTOR_REWARDS, TOKEN_BALANCES, StakeChoices, ONE_E18, BIG6, BIG18 } from '../types/constants'; import { Pool, Position, FeeAmount, TickMath, encodeSqrtRatioX96, tickToPrice } from '@uniswap/v3-sdk'; import { Token, Price } from '@uniswap/sdk-core'; +const {utils} = require('ethers-v5'); const BigNumber = require('bignumber.js'); const axios = require('axios').default; const chalk = require('chalk'); @@ -732,4 +733,16 @@ export const EMPTY_LENDING_AMOS_DATA = (): LendingAMOsData => { total_frax: 0, total_profit: 0, }; +} + +export const expandTo18Decimals = (amount) => { + return utils.parseUnits(`${amount.toLocaleString('fullwide', {useGrouping: false})}`, 18); +} + +export const bigNumberify = (amount) => { + return utils.parseUnits(`${amount.toLocaleString('fullwide', {useGrouping: false})}`, 0); +} + +export const sleep = (ms) => { + return new Promise(resolve => setTimeout(resolve, ms)); } \ No newline at end of file diff --git a/src/types/constants.ts b/src/types/constants.ts index 40039a7a..5df161ef 100755 --- a/src/types/constants.ts +++ b/src/types/constants.ts @@ -2755,6 +2755,7 @@ export const CONTRACT_ADDRESSES = { pUSDFRAXBP: '0xC47EBd6c0f68fD5963005D28D0ba533750E5C11B', pUSDFRAXBP_Pool: '0xC47EBd6c0f68fD5963005D28D0ba533750E5C11B', pitchFXS: '0x11EBe21e9d7BF541A18e1E3aC94939018Ce88F0b', + Re7FRAX: '0xBE40491F3261Fd42724F1AEb465796eb11c06ddF', rETHfrxETH: '0xba6c373992ad8ec1f7520e5878e5540eb36debf1', rETHfrxETH_Pool: '0xe7c6e0a739021cdba7aac21b4b728779eef974d9', sETHfrxETH: '0x663ac72a1c3e1c4186cd3dcb184f216291f4878c', @@ -3037,6 +3038,7 @@ export const CONTRACT_ADDRESSES = { 'Monolith mo-sAMM-FRAX/USDT': '0xC983fdb96ceB4A787E9F07e7e4135A75f75ccCb1', 'Monolith mo-sAMM-frxETH/WETH': '0x73c229785ADe094d090A72146Bd4C24C4655EFbB', 'Monolith mo-vAMM-FXS/frxETH': '0xcD0E1867C775d703458C5478830E9Ab8195DC5Cd', + 'Morpho Re7FRAX': '0xBE40491F3261Fd42724F1AEb465796eb11c06ddF', 'Pickle Finance pveFXS (Brinery)': '0x62826760CC53AE076a7523Fd9dCF4f8Dbb1dA140', 'Pickle Finance Curve cvxFXS/FXS': '0x5da34d322a4b29488e711419fea36da0d0114d5c', 'Pickle Finance Saddle D4': '0xe6487033f5c8e2b4726af54ca1449fec18bd1484', @@ -3191,6 +3193,7 @@ export const CONTRACT_ADDRESSES = { 'Monolith mo-sAMM-FRAX/USDT': '0x9972F7c292Deae7759a3831b1aDFF54dD43Dc264', 'Monolith mo-sAMM-frxETH/WETH': '0x4E30fc7ccD2dF3ddCA39a69d2085334Ee63b9c96', 'Monolith mo-vAMM-FXS/frxETH': '0x520b8e754768EEed9a37d78de76Cd5d75456b92F', + 'Morpho Re7FRAX': '0xE1e697Fd7EC9b3675808Ba8Ad508fD51cac756a3', 'Pickle Finance pveFXS (Brinery)': '0x62826760CC53AE076a7523Fd9dCF4f8Dbb1dA140', 'Pickle Finance Curve cvxFXS/FXS': '0x6667c53D631410649B1826D21cFdf41E7a7aE6b1', 'Pickle Finance Saddle D4': '0x08cb0a0ba8e4f143e4e6f7bed65e02b6dfb9a16c', @@ -4294,6 +4297,7 @@ export const CONTRACT_ADDRESSES = { main: { FRAX: "0xfc00000000000000000000000000000000000001", FXS: "0xfc00000000000000000000000000000000000002", + }, canonicals: { FRAX: "0xfc00000000000000000000000000000000000001", @@ -4315,6 +4319,9 @@ export const CONTRACT_ADDRESSES = { bridges: {}, bridge_backers: {}, oracles: { + L1veFXS: '0x942f912c9295b774d4ca36BABee1f114d3d6B4a5', + state_root: '0xeD403d48e2bC946438B5686AA1AD65056Ccf9512', + fraxchain_l1_block: '0x4200000000000000000000000000000000000015', single_assets: { FRAX: '', FXS: '', @@ -4337,6 +4344,39 @@ export const CONTRACT_ADDRESSES = { first_officer: "0xBB437059584e30598b3AF0154472E47E6e2a45B9", crewmember: "0xBB437059584e30598b3AF0154472E47E6e2a45B9", }, + misc: { + FPIS_ERC20: "0xfc00000000000000000000000000000000000004", + FPIS_LOCKER_PROXY: "0x437E9F65cA234eCfed12149109587139d435AD35", + FPIS_LOCKER_UTILS: "0x9E461cF6773F168A991A7aD73E2aD89ecD737745", + FPI_ERC20: "0xFc00000000000000000000000000000000000003", + FRAXCHAIN_ADMIN: "0xC4EB45d80DC1F079045E75D5d55de8eD1c1090E6", + FRAXTAL_STATE_ROOT_ORACLE: "0xeD403d48e2bC946438B5686AA1AD65056Ccf9512", + FRAX_ERC20: "0xFc00000000000000000000000000000000000001", + FRXBTC_ERC20: "0xfC00000000000000000000000000000000000007", + FXB_20240630: "0x758094A71a39De49626FE25B86631ED944558653", + FXB_20241231: "0xa71bB8c79dc8FfA90A6Dd711aA9Fbe5114c19cba", + FXB_20261231: "0x8e9C334afc76106F08E0383907F4Fca9bB10BA3e", + FXB_TIMED_LOCKER_20261231: "0x00a5b34d4b436E3276695a1EaA8242FA2FC11dC5", + FXS_ERC20: "0xFc00000000000000000000000000000000000002", + L1VEFXS_IMPLEMENTATION_OWNER: "0xC4EB45d80DC1F079045E75D5d55de8eD1c1090E6", + L1VEFXS_PROXY: "0x942f912c9295b774d4ca36BABee1f114d3d6B4a5", + L1VEFXS_PROXY_OWNER: "0xC4EB45d80DC1F079045E75D5d55de8eD1c1090E6", + L1VEFXS_TOTAL_SUPPLY_ORACLE: "0xaBBeFFb0d24EAcFFD3Be194471F0FD8aaaa3e5f8", + L2_STANDARD_BRIDGE: "0x4200000000000000000000000000000000000010", + PROXY_ADMIN: "0xfC00000000000000000000000000000000000009", + SFRAX_ERC20: "0xfc00000000000000000000000000000000000008", + SFRAX_ERC4626_MINT_REDEEMER_PROXY: "0xBFc4D34Db83553725eC6c768da71D2D9c1456B55", + SFRAX_ERC4626_MINT_REDEEMER_IMPL: "0x0aF57786D6B2447EA2E04F9FAB36a239c2E8C9d5", + SFRXETH_ERC20: "0xFC00000000000000000000000000000000000005", + VEFXS_AGGREGATOR_PROXY: "0x176A4e081653EbB8a2246BAfbfCf663782426531", + VEFXS_AGGREGATOR_IMPL: "0xF9Ca1Dc83B16C72b3359CEcD1d3Fc96d80dC4Fa6", + VESTED_FXS_PROXY: "0x007FD070a7E1B0fA1364044a373Ac1339bAD89CF", + VESTED_FXS_IMPL: "0x54bd5c72645fed784C117cA83533e0584b24Ee5c", + VESTED_FXS_UTILS: "0xC540f05BF5a09336078634D65E46242DFBa55030", + WFRXETH_ERC20: "0xFC00000000000000000000000000000000000006", + YIELD_DISTRIBUTOR_PROXY: "0x21359d1697e610e25C8229B2C57907378eD09A2E", + YIELD_DISTRIBUTOR_IMPL: "0x08de0C3BCBa9529fe59FA4e4593805Bd55A54B0B" + }, multisigs: { Comptrollers: '0xC4EB45d80DC1F079045E75D5d55de8eD1c1090E6', FPI_Comptroller: '0xC4EB45d80DC1F079045E75D5d55de8eD1c1090E6', // Same as normal comptroller From 1bb585a74018bd1e657976337faea0b14f415d20 Mon Sep 17 00:00:00 2001 From: travis Date: Tue, 18 Jun 2024 11:19:40 -0700 Subject: [PATCH 36/37] remove unnecessary code --- ...tal_yield_distributor_mass_checkpointer.js | 90 ------------------- 1 file changed, 90 deletions(-) diff --git a/src/hardhat/public-scripts/fraxtal_yield_distributor_mass_checkpointer.js b/src/hardhat/public-scripts/fraxtal_yield_distributor_mass_checkpointer.js index edc21a0c..ad8261b6 100644 --- a/src/hardhat/public-scripts/fraxtal_yield_distributor_mass_checkpointer.js +++ b/src/hardhat/public-scripts/fraxtal_yield_distributor_mass_checkpointer.js @@ -278,98 +278,8 @@ async function main() { - - - // console.log("================== MAIN RESPONSE =================="); - // console.log(mainResponse); - - // Write to file - // const stringedJson = JSON.stringify(mainResponse, null, 4); - // fs.writeFileSync("proofs.json", stringedJson, function(err) { - // if (err) throw err; - // console.log('complete'); - // } - // ); - - } -const increaseGasLimit = (estimatedGasLimit) => { - return estimatedGasLimit.mul(115).div(100) // increase by 15% - } - -function convertHeaderFields(headerFields) { - for (var i = 0; i < headerFields.length; i++) { - var field = headerFields[i]; - if (field == "0x0") field = "0x"; - if (field.length % 2 == 1) field = "0x0" + field.substring(2); - headerFields[i] = field; - } -} - -const getBlockHeaderInfo = async (blockHexed, provider) => { - const blkHeaderResponse = await provider.send('eth_getBlockByNumber', [ - blockHexed, - true - ]); - - // const blockHdrJson = JSON.stringify(blkHeaderResponse, null, 4); - // fs.writeFileSync("blockHdr.json", blockHdrJson, function(err) { - // if (err) throw err; - // console.log('complete'); - // } - // ); - - let headerFields = []; - let block = blkHeaderResponse; - - headerFields.push(block.parentHash); - headerFields.push(block.sha3Uncles); - headerFields.push(block.miner); - headerFields.push(block.stateRoot); - headerFields.push(block.transactionsRoot); - headerFields.push(block.receiptsRoot); - headerFields.push(block.logsBloom); - headerFields.push(block.difficulty); - headerFields.push(block.number); - headerFields.push(block.gasLimit); - headerFields.push(block.gasUsed); - headerFields.push(block.timestamp); - headerFields.push(block.extraData); - headerFields.push(block.mixHash); - headerFields.push(block.nonce); - headerFields.push(block.baseFeePerGas); - if (block.withdrawalsRoot) { - headerFields.push(block.withdrawalsRoot); - } - if (block.blobGasUsed) { - headerFields.push(block.blobGasUsed); - } - if (block.excessBlobGas) { - headerFields.push(block.excessBlobGas); - } - if (block.parentBeaconBlockRoot) { - headerFields.push(block.parentBeaconBlockRoot); - } - - // console.log("========================= headerFields (raw) ========================="); - - // console.log(headerFields); - - // console.log("========================= headerFields (converted) ========================="); - - convertHeaderFields(headerFields); - // console.log(headerFields); - - // console.log("========================= rlpData ========================="); - - const rlpData = encode(headerFields); - // console.log(rlpData); - - return rlpData; -}; - - // We recommend this pattern to be able to use async/await everywhere // and properly handle errors. main() From 341b6cfce195f8b2f9818dffd98ba28174301de9 Mon Sep 17 00:00:00 2001 From: Tyler Hawthorne <110597351+Hawthorne001@users.noreply.github.com> Date: Mon, 26 Aug 2024 19:08:47 -0400 Subject: [PATCH 37/37] Create npm-publish.yml --- .github/workflows/npm-publish.yml | 33 +++++++++++++++++++++++++++++++ 1 file changed, 33 insertions(+) create mode 100644 .github/workflows/npm-publish.yml diff --git a/.github/workflows/npm-publish.yml b/.github/workflows/npm-publish.yml new file mode 100644 index 00000000..2a4766d3 --- /dev/null +++ b/.github/workflows/npm-publish.yml @@ -0,0 +1,33 @@ +# This workflow will run tests using node and then publish a package to GitHub Packages when a release is created +# For more information see: https://docs.github.com/en/actions/publishing-packages/publishing-nodejs-packages + +name: Node.js Package + +on: + release: + types: [created] + +jobs: + build: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + - uses: actions/setup-node@v4 + with: + node-version: 20 + - run: npm ci + - run: npm test + + publish-npm: + needs: build + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + - uses: actions/setup-node@v4 + with: + node-version: 20 + registry-url: https://registry.npmjs.org/ + - run: npm ci + - run: npm publish + env: + NODE_AUTH_TOKEN: ${{secrets.npm_token}}